零、欢迎关注Biomamba 生信基地

本人为在读博士研究生,此公众号旨在分享生信知识及科研经验与体会,目前在B站的同名账号中发布的手把手教你做单细胞测序数据分析系列视频点击量已经超过19W。同名微信公众号拥有超过三万的关注用户以及超过百万的访问量,欢迎各位同学、老师与专家的批评指正,也欢迎各界人士的合作与交流。

一、scFAST绪论

视频教程:点击跳转

1.1 写在前面

单细胞的论文我们介绍过很多,大家可以前往合集查看更多内容:文献速递。此处我们需要向大家介绍一个单细胞组学新技术,该文于3月23号发布在预印本,题为”High throughput detection of variation in single-cell whole transcriptome through streamlined scFAST-seq”的文章。这项技术(single cell Full-length RNA Sequence, scFAST-seq)。该单细胞平台由寻因生物历时三年开发完成,可以在8h内建库构建约12,000个细胞的全长RNA文库。这是一种依托于随机引物建库策略的单细胞全新技术。传统的3'端建库策略由于其通过oligo-dT去捕获转录本的polyA尾,因此对非polyA尾的lncRNArRNAcircRNAeRNA等RNA分子敏感性不足。因此,相较于3‘端策略来说,scFAST-seq利用随机引物进行随机捕获,避免poly A尾的介入,使得其在检测非polyA的转录本、覆盖更长的转录本长度和鉴定更多的剪接位点方面具有明显的优势(这意味着能够更深入的挖掘转录本层面的信息)。对于细胞分化、拟时序分析、RNA动力学分析等进阶分析内容来说,scFAST-seq也较3’端策略而言具有更好的效果。在cDNA终文库的基础上也可以灵活选择cDNA巢式扩增或测序文库的探针捕获,从而针对不同的研究目的富集对应的序列。

1.2 主要结果

1.2.1 建库流程与特征

具体建库的实验流程的受众比较少,感兴趣的同学可以阅读一下原文的methods(https://www.biorxiv.org/content/10.1101/2023.03.19.533382v1.full)。大致来说,与大家熟悉的10X Genomics一样,单细胞悬液会被制备成一个油包水的体系,但scFAST-seq使用随机引物而非3’端的oligo-dT去捕获RNA分子参与逆转录,优化后的随机引物12N7F能够捕获到更多的转录本与RNA分子:

以往的5'策略在Bulk RNA-Seq中被频繁使用,因为Bulk RNA-Seq可以很方便的使用RNase H降解rRNA,但在单细胞建库中,这就是个难题。因此scFAST-seq使用在使用随机引物的同时加入了一种”阻断”探针,能够特异性的阻断rRNAmtRNA的逆转录从而大大降低文库中rRNA(30%→10%)mtRNA(6%→1%)的占比:

scFAST-seq的流程示意图如下所示:

1.2.2 scFAST-seq3'策略的scRNA-seq一致性评价

作者对K562A549HCC827混合细胞系、乳腺癌、胶质母细胞瘤、小鼠胰腺癌、外周血等样本分别进行了scFAST-seq3'策略的scRNA-seq的测序,与上文表述的一样,scFAST-seq获得的mtRNArRNA数量都更少(图A)。与此同时,scFAST-seqreads分布在基因中的位置更加的均匀,而不是像3'测序那般主要集中在RNA分子的3'端(图B);这显然更有利于转录本结构的研究。在基因定量方面,相关性分析(图D)、降维分析(图E)与细胞比例分析(图F)均显示scFAST-seq3' scRNA-seq具有极为相似的表达矩阵;infercnv分析方面两种技术的一致性极高(图G)。但在转录本的捕获数量上而言,在对应样本中scFAST-seq依旧是更胜一筹(图C)。

1.2.3 scFAST-seq与目的区域富集技术的结合

期望简单的通过增大测序量来增大目的区域的reads数是不切实际的,因此通过生物素探针或巢式PCR可以提升目的区域的捕获效率,例如EGFR 19del可通过生物素探针提升近一倍(图A)、巢式PCR也可以在少量的细胞中捕获到更多对应的转录本(图B)。scFAST-seq与目的区域富集策略的结合可以用最低的测序成本获取更多的目的信息。

1.3 小结

作为全序列的产品,相较于3’单细胞测序而言,其有以下优势:

作为一款对标SMART-Seq2的国产测序技术,scFAST-seq的表现十分优秀。
scFAST-seqSMART-Seq2对比可见:

当然,scFAST-seq也并不是没有缺点,其对于低丰度的转录本捕获效率稳定性不足。为寻因生物点赞的同时也期待单细胞领域出现越来越多有竞争力的国产平台!

二、准备工作

2.1 SeekSoul®Tools

2.1.1 简介

SeekSoul® Tools是寻因自主研发的单细胞数据自动化质控分析软件,包括细胞标签提取、测序数据质控、参考基因组比对、基因定量以及表达矩阵构建等流程。兼容寻因生物SeekOne® MMSeekOne® DD不同单细胞技术平台数据,实现高水平质控分析。

2.1.2 模块组成

目前该软件包含三个模块:
-(1)rna模块
用于识别细胞标签barcode,比对定量,得到可用于下游分析的细胞表达矩阵,之后进行细胞聚类和差异分析,该模块不仅支持SeekOne系列试剂盒产出数据,还可通过对barcode的描述,支持多种自定义设计结构。
-(2)fast模块
该模块专门针对SeekOne全序列试剂盒产出的数据,用于对数据进行barcode提取,双端reads比对,定量,以及全序列数据特有的指标统计
-(3)mut模块
该模块针对SeekOne全序列(scFASTA-seq)数据及panel捕获后数据变异检测及可视化分析。

2.1.3 软件优势

1、灵敏检测低UMI细胞:采用高UMI阈值+EmptyDrops的方法判定细胞;
2、支持多平台数据分析:适配寻因自主平台及10x 等其他平台数据;
3、分析结果格式支持下游多种开源软件。

2.2 预备知识

为了无障碍的学习本教程,建议先行学习以下教程:

2.2.1 单细胞教程全收录

B站视频:先看一遍视频再去看推送操作,建议至少看三遍
以下的资料都可以在这里订阅: 单细胞数据基础分析学习手册

6. 其他单细胞相关技术贴:

细胞的数量由誰决定?
单细胞中应该如何做GSVA?
答读者问(三):单细胞测序前景
答读者问(四):如何分析细胞亚群
答读者问(八):为什么Read10X也会报错?
答读者问(十)整合后的表达矩阵,如何拆分出分组信息?
答读者问(十一)如何一次性读取一个目录下的cellranger输出文件?
给你安排一个懂生信的工具人(十):不学编程 零代码完成单细胞测序数据分析:Loupe Browser
什么?不做单细胞也能分析细胞类群和免疫浸润?
答读者问 (十三)查看Seurat对象时的ERROR:type=‘text’
各类单细胞对象(数据格式)转换大全(一)
批量整理好GEO中下载的单细胞数据
答读者问 (十四)Seurat中分类变量处理技巧
答读者问 (十五)稀疏矩阵转matrix, as.matrix函数是下下策
答读者问 (十六)做单细胞测序到底需要多少内存
答读者问 (十七)调用的线程越多就算的越快嘛?
答读者问(十八)、一个我至少被问过30遍的monocle报错
一文搞定单细胞基因集评分
沉浸式统计细胞比例
没有barcode文件的单细胞数据要怎么读取
单细胞基因集评分之AUCell
如何加快Seurat的计算速度
粉丝来稿|1. Seurat4相较于Seurat3的几点改动
​如何加快Seurat的计算速度
​答读者问(二十)四个单细胞样本只给了一套文件怎么读 人类单细胞测序数据中有哪些以”**-“开头的基因
为什么总把分辨率调的很高
答读者问(六):Seurat中如何让细胞听你指挥

7. 单细胞文献阅读

Biomamba助推的第二篇文章!发表了!
又来了!Biomamba生信基地助推的第四篇文章!
单细胞测序解析糖尿病肾病中肾小球的动态变化
单细胞测序技术解析健康人与T2D患者的胰岛差异
小鼠全肾单细胞测序开篇之作
Nature也能白嫖?
一篇不花钱就能白嫖的文章
高氧下小鼠肺发育损伤的ScRNA图谱
文献阅读(十二)、IgAN & STRT-Seq
老树开新花——EGFR、肿瘤、免疫+scRNA-Seq
癌前基质细胞驱动BRCA1肿瘤发生
文献阅读(十八)、紧跟生信”钱”沿,胰腺癌&免疫多模态图谱
文献阅读(十九)、原发头颈癌和肿瘤转移微生态
文献阅读(二十一)、肾脏疾病&代谢&核受体ESRRA 文献阅读(二十二)、PD-1&急性髓细胞性白血病&T Cell
文献阅读(二十二)、PD-1&急性髓细胞性白血病&T Cell
文献阅读(二十三)鼻咽癌微环境&scRNA
文献阅读(二十四)、《Nature》:MYB调控衰竭性T细胞对检查点抑制的响应
文献阅读(二十八)、单细胞都能活检测序了?
文献阅读(二十九)、单细胞测序做到什么程度能毕业|硕士篇
文献阅读(三十)、单细胞测序做到什么程度能毕业|博士篇
2022年了,都有哪些器官/组织有scRNA-Seq数据|小鼠篇
2022年了,都有哪些器官/组织有scRNA-Seq数据|人类篇 终于读到一篇用monocle3做拟时序的文章
单细胞转录组+亚细胞空间代谢组=25分文章
基于scRNA-Seq&空间转录组的AKI研究
《Nature Methods》: NiCheNet, 能够考虑到胞内转录调控的细胞通讯软件
数百万级单细胞数据时代的多组学分析
两万字长文|当前单细胞 RNA-seq 分析的最佳实践
《Nature》: 单细胞解析大脑感知流感过程
scRNA-Seq+WGCNA+铁死亡:IF=9.69
<IF=27.4> IgG4相关性疾病中颌下腺和血液中的细胞和分子改变
急性心肌梗塞(AMI)外周血scRNA-Seq分析流程及结果梳理
酸了,六个样本的scRNA-Seq+差异分析=9分文章

9. 非技术帖

生信分析为什么要使用服务器?
(有root权限的共享服务器,注册即送200¥
为实验室准备一份生物信息学不动产

2.2.3 R语言教程

持续更新中,敬请期待:生信R语言保姆级教程
百度云资料中有R语言参考书。
下载链接

2.2.4 服务器准备

下列教程实测至少需要4核以及60GB的内存,如果自己电脑不满足计算要求的同学可以参考以下内容:
生信分析为什么要使用服务器?
独享服务器,满足你对生信分析的所有幻想
为实验室准备一份生物信息学不动产

2.3 依赖工具下载

2.3.1 condamamba

# 下载Anaconda:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 安装:
bash Anaconda3-5.3.1-Linux-x86_64.sh
# 疯狂按回车,遇到询问输出yes,注意vs code安装询问选择no

# 利用conda安装mamba,后者与前者功能相同,但运行速度更快:
conda install mamba

2.3.2 gffread

用于后面的gff文件转gtf文件,用mamba装起来很方便

# 一行搞定:
mamba install gffread

# 当然你也可以自行从github抓取并安装:
# 安装gffread
# 下载文件:
git clone https://github.com/gpertea/gffread
# 切换工作路径:
cd gffread
# 编译安装:
make release
# 切换工作路径:
cd ../

2.3.3 annovar安装及库文件下载

# annovar下载配置:
wget http://www.openbioinformatics.org/annovar/download/0wgxR2rIVP/annovar.latest.tar.gz
# 以上链接可能会失效,如失效可在百度云盘中下载:https://pan.baidu.com/s/1bWbNbOrXHUpeu0qSJv49ig?pwd=ptey

# 解压:
tar -xvf annovar.latest.tar.gz

# 切换工作路径:
cd annovar
  
# 大约花费一个小时,具体取决于机器硬件配置与网速:
perl annotate_variation.pl -buildver hg38 --downdb --webfrom annovar refGene humandb/
perl annotate_variation.pl -buildver hg38 --downdb --webfrom annovar gnomad312_genome humandb/
perl annotate_variation.pl -buildver hg38 --downdb --webfrom annovar exac03 humandb/
perl annotate_variation.pl -buildver hg38 --downdb --webfrom annovar avsnp150 humandb/
perl annotate_variation.pl -buildver hg38 --downdb --webfrom annovar 1000g2015aug humandb/
perl annotate_variation.pl -buildver hg38 --downdb --webfrom annovar clinvar_20220320 humandb/
perl annotate_variation.pl -buildver hg38 --downdb --webfrom annovar cosmic70 humandb/

# 更改文件名,方便后续mut模块调用:
mv hg38_gnomad312_genome.txt hg38_gnomad.txt
mv hg38_clinvar_20220320.txt hg38_clinvar.txt
mv hg38_cosmic70.txt hg38_cosmic.txt
mv hg38_avsnp150.txt hg38_avsnp.txt
mv hg38_exac03.txt  hg38_exac.txt

# 将annovar路径添加致配置文件中:
echo "export PATH=/home/biomamba/analysis/xunyin/annovar:$PATH" >> ~/.bashrc
source ~/.bashrc

2.3.4 fastp下载安装

fastp用于原始fastq文件过滤生成clean fastq

# 下载:
wget http://opengene.org/fastp/fastp
# 无需安装,赋予运行权限即可
chmod a+x ./fastp

2.4 SeekSoul®Tools下载与安装

本手册用到的所有资料均可在以下链接下载:
百度云盘链接

SeekSoul®Tools下载链接

当前教程演示的是seeksoultools 1.0 版本制作

seeksoul tools软件由寻因生物公司负责开发和维护,更新版本的seeksoul tools 软件见: http://seeksoul.seekgene.com/

# 下载上述软件后,在Linux终端中进行安装

# 创建文件夹:
mkdir -p seeksoultools
# 切换工作目录
cd seeksoultools

# 解压
tar zxf seeksoultools_fast_mut_dev.tar.gz

# 激活seeksoultools环境
source seeksoultools/bin/activate

# 利用conda配置软件
seeksoultools/bin/conda-unpack

# 将文件安装地址配置到环境变量PATH中:
export PATH=`pwd`/seeksoultools/bin:$PATH

# 将配置写入~/.bashrc,这样每次登入服务器时均会生效
echo "export PATH=$(pwd)/seeksoultools/bin:\$PATH" >> ~/.bashrc

# 安装起来总体比较智能,上述步骤没报错即为成功

# 所以,我的工作路径在:
cd /home/biomamba/analysis/xunyin/

2.5 参考基因组下载及索引构建

# 创建文件夹:
mkdir my_refference

# 切换工作目录:
cd my_refference

下文教程为人类来源细胞系数据,因此我们以人类参考基因组的两个版本GRCh38hg38为例。

2.5.1 GRCh38

这一步,你可以选择直接下载构建好的参考基因组,或者自行构建

(1) 直接下载

# wget下载:
wget -c -O GRCh38.tar.gz "https://seekgene-public.oss-cn-beijing.aliyuncs.com/software/data/reference/GRCh38.tar.gz"
# 解压:
tar -zxvf GRCh38.tar.gz

# 或者通过curl下载:
curl -C - -o GRCh38.tar.gz "https://seekgene-public.oss-cn-beijing.aliyuncs.com/software/data/reference/GRCh38.tar.gz"
# 解压
tar -zxvf GRCh38.tar.gz

(2) 自行构建

# 下载GRCh38基因组fatsq文件:
wget https://ftp.ncbi.nlm.nih.gov/refseq/H_sapiens/annotation/GRCh38_latest/refseq_identifiers/GRCh38_latest_genomic.fna.gz 
# 下载GRCh38基因组gff注释文件:
wget https://ftp.ncbi.nlm.nih.gov/refseq/H_sapiens/annotation/GRCh38_latest/refseq_identifiers/GRCh38_latest_genomic.gff.gz

gunzip ./*gz

  
# 将gff文件转换为gtf文件:
gffread  GRCh38_latest_genomic.gff -T -o GRCh38_latest_genomic.gtf  

# 运行STAR构建基因组索引,我的机器上大约花费1.5h,具体时长需要取决于你的硬件条件:  
nohup STAR \ 
--runMode genomeGenerate \
--genomeDir /home/biomamba/analysis/xunyin/seeksoultools/my_refference/GRCh38_index \ # 基因组索引输出路径
--genomeFastaFiles /home/biomamba/analysis/xunyin/seeksoultools/my_refference/GRCh38_latest_genomic.fna \ # 基因组fastq文件
--sjdbGTFfile /home/biomamba/analysis/xunyin/seeksoultools/my_refference/GRCh38_latest_genomic.gtf \ # 基因组注释gtf文件地址 
--sjdbOverhang 149 \  # 读段长度,PE150则填149
--runThreadN 8 & # 并行计算调用的线程数
  
# 构建好后待后续调用

2.5.2 hg38

### hg38 ####
# 创建目录:
mkdir /home/biomamba/analysis/xunyin/seeksoultools/my_refference/hg38/
# 更改工作路径:
cd hg38
# 我的机器花费五分钟,主要取决于网速:
wget --timestamping  'ftp://hgdownload.cse.ucsc.edu/goldenPath/hg38/chromosomes/*'

# 解压
gunzip ./*gz

# 合并fastq文件:
cat ./*fa > hg38.fa

# 下载基因组注释gtf文件:
wget https://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/genes/hg38.refGene.gtf.gz
# 解压:
gunzip hg38.refGene.gtf.gz
 
# 运行STAR构建索引: 
nohup STAR \
--runMode genomeGenerate \
--genomeDir /home/biomamba/analysis/xunyin/seeksoultools/my_refference/hg38/hg38_index \
--genomeFastaFiles /home/biomamba/analysis/xunyin/seeksoultools/my_refference/hg38/hg38.fa \
--sjdbGTFfile /home/biomamba/analysis/xunyin/seeksoultools/my_refference/hg38/hg38.refGene.gtf \
--sjdbOverhang 149 \  
--runThreadN 8 &

2.5.3 rRNA基因组索引

# rRNA基因组
wget -c -O hg38_rRNA.tar "https://seekgene-public.oss-cn-beijing.aliyuncs.com/software/data/reference/hg38_rRNA.tar.gz"
# 解压
tar -zxvf hg38_rRNA.tar

三、fast模块

3.1 rnafast模块算法及流程说明

rna模块用于识别细胞标签barcode,比对定量,得到可用于下游分析的细胞表达矩阵,之后进行细胞聚类和差异分析,该模块不仅支持SeekOne系列试剂盒产出数据,还可通过对barcode的描述,支持多种自定义设计结构。基于rna模块开发出的fast模块专门用于全序列数据(scFAST-seq)的分析。

  • Step1: barcode/umi提取
    seeksoultools可以根据不同的R1结构设计和每种结构的不同的参数对barcode/umi提取和处理,对R1以及对应的R2进行过滤,生成新的R2文件。(fast针对全序列数据,保留了reads1去除barcodeUMI等部分后的数据,进行双端比对,并基于此结果后续进行分析)

结构描述,以下的两种R1结构为例: MM: B8L8B8L10B8U8(错位设计)
DDV2: B17U12

B表示barcode部分碱基;
L表示linker部分碱基;
U表示umi部分碱基;
X表示任意碱基,用于占位;
字母后数字表示碱基长度。

错位设计的Anchor定位
有些设计下,为了使测序reads碱基多样性,加入了1-4bp的移码碱基,即anchoranchor决定了barcode的起始位置。seeksoultools尝试在R1序列前7个碱基中寻找Anchor序列,若没找到anchor序列,此条read以及对应的R2被认为是无效read

Barcode和Linker矫正
Barcode序列有一定几率发生测序错误的情况,在提供有白名单的情况下,seeksoultools可以实现barcode矫正功能。当barcode存在于白名单中时,我们认为它是有效的barcode,统计有效barcode对应的reads数量。当barcode不存在于白名单中时,我们认为它是无效的barcode。在开启矫正功能时,当无效barcode一个碱基错配(一个hamming distance)的序列存在于白名单中,我们会进行以下几种处理:

只有唯一一个序列存在于白名单中:我们将这个无效barcode矫正为白名单中barcode

有多个序列存在于白名单中,且有至少一个序列的read支持数大于0

如果只有一个序列的read支持数大于0,我们将这个无效barcode 改为这个序列且保留这条read。 如果有多个序列的read 支持数大于0,我们将这个无效barcode 改为read支持数量最多的序列。 其余情况:这条read以及对应的R2为无效read。

Linker的处理与Barcode相同。

接头和PolyA序列剪切 在转录组产品中,Read2的末端有可能会出现polyA tail或建库时引入的接头序列。这些序列并没有有效信息。为了节省计算时间和复杂度,我们要这些序列进行切除。剪切完的read2长度需要大于设定的最小长度来保证有足够的信息,准确比对到基因组的位置。如果剪切完成后的read2长度小于最小长度,我们认为这条read为无效read

指标统计

total: 总共的reads数目
valid: 不需要矫正和矫正成功的reads数目
B_corrected: 矫正成功的reads数目
B_no_correction: 错误Barcode的reads数目
L_no_correction: 错误Linker的reads数目
no_anchor:不包含anchor的reads数目
trimmed: 进行过剪切的reads数目
too_short: 进行过剪切后长度小于60bp的reads数目

指标之间的关系如下:
total = valid + no_anchor + B_no_correction + L_no_correction
输出fastq的reads数:total_output = valid - too_short

  • Step2: 进行比对并找到比对基因
    序列比对
    使用STAR比对软件将处理后的R2比对到参考基因组上。 使用qualimap软件和转录本注释文件GTF,统计reads比对外显子、内含子和基因间区等的比例。 使用featuresCounts将比对上的read注释到基因上,可以选择不同的注释规则,如链方向性和定量的feature。当使用外显子定量时,当read超过50%碱基比对到外显子区域时,认为该read来源于此外显子以及外显子对应的基因;当使用转录本定量时,当read超过50%碱基比对到转录本区域时,认为该read来源于此转录本以及转录本对应的基因。

指标统计

Reads Mapped to Genome: 能比对到参考基因组上的reads占所有reads的比例(包括只有一个比对位置和多个比对位置的reads)
Reads Mapped Confidently to Genome: 在参考基因组上只有一个比对位置的reads占所有reads的比例
Reads Mapped to Intergenic Regions:比对到基因间隔区reads占所有reads的比例
Reads Mapped to Intronic Regions:比对到内含子reads占所有reads的比例
Reads Mapped to Exonic Regions:比对到外显子reads占所有reads的比例
  • Step3: 定量
    UMI 定量
    为了得到每个barcode下基因的表达数据,seeksoultoolsbarcode为单位提取featureCounts输出的bam数据,统计注释到基因的umiumi对应的reads数:

过滤掉对应UMI为单个重复碱基的reads, 例如UMITTTTTTTT 过滤掉注释到多个基因的reads

UMI矫正
UMI序列也有一定概率出现测序错误的情况。seeksoultools会尝试对UMI进行矫正。当同一个barcode中的某一个特定基因对应有两个UMI序列只有一个碱基错配时(一个hamming distance),reads支持数低的UMI将被纠正为reads支持数高的UMI

细胞判定
在一个细胞群中,我们认为细胞和细胞的mRNA的含量不会相差太多。如果一个barcode对应的mRNA的含量很低,我们认为这个barcode的磁珠并没有捕获细胞,mRNA来源于背景。 seeksoultools 会以上面的规则,进行barcode是否为细胞的判定。有以下几个步骤:

对所有barcode按照对应的UMI数由高到低排序; 取预估细胞的1%位置的barcodeUMI数除以10为阈值; barcodeUMI数大于阈值的判定为细胞; barocdeUMI小于阈值,但大于300时,使用DropletUtils分析。DropletUtils方法先假设UMI数量低于100barcodeempty droplet,然后根据每个droplet相同基因的UMI数总和为背景RNA表达谱中该基因UMI数目,进而得到基因UMI数目的期望值。再通过将每个barcodeUMI数进行统计学检验,显著差异的为细胞; 不符合上述条件的为背景。

指标统计

Estimated Number of Cells:判定的细胞总数
Fraction Reads in Cells: 判定为细胞的reads占所有参与定量的reads的比例
Mean Reads per Cell: 细胞的平均reads数,总reads数/判定的细胞数
Median Genes per Cell: 判定为细胞的barcode对应genes的中位数
Median UMI Counts per Cell: 判定为细胞的barcode对应UMI的中位数
Total Genes Detected: 所有细胞检测到基因数量
Sequencing Saturation: 饱和度,1 - UMI总数/reads总数

fast中包含一些全序列数据特有指标:

-(1)核糖体含量

-(2)数据biotype占比饼图

-(3)genebody图及ACTB覆盖度

-(4)lnc基因数量

  • Step4: 后续分析
    得到表达矩阵后,我们可以进行下一步的分析。

Seurat分析流程 使用Seurat计算线粒体含量,细胞中UMI总数,细胞中基因总数。之后对矩阵进行归一化、寻找高变基因、降维聚类之后寻找差异基因。当然,我们也会在下面的教程中给大家详解Seurat运行过程。

3.2 fast模块使用

3.2.1 模块基本参数

  • --fq1
    R1 fastq数据路径。

  • --fq2
    R2 fastq数据路径。

  • --samplename
    样本名称,会在outdir目录下创建以样本名称命名的目录。仅支持数字,字母和下划线。

  • --outdir
    结果输出目录。默认值:./。

  • --genomeDir
    STAR构建的参考基因组路径, 版本需要与seeksoultools使用的STAR一致。

  • --gtf
    相应物种的gtf路径。

  • --core
    分析使用的线程数。

  • --chemistry
    试剂类型,每种对应一组--shift--pattern--structure--barcode--sc5p的组合,可选值:DDV1DDV2DD5V1MMMM-DDD-QDDV1 对应DD平台3’转录组V1版本试剂; DDV2 对应DD平台3‘转录组V2版本试剂; DD5V1 对应DD平台5‘转录组V1版本试剂; MM 对应MM平台3’转录组数据; MM-D 对应MM大孔径; DD-Q 对应DD全序列。

  • --shift
    使用移码设计。

  • --pattern
    移码设计设计中用于锚定起始的碱基。

  • --structure
    ⽤于描述read1的接头结构,B表示cellbarcodeL表示linkerU表示UMI,后⾯数字表示碱基⻓度,⽐如B9L12B9L13B9U8;如果是P3CBGB类的结构,只有barcodeUMI,没有linkerstructure参数就是B17U12

  • --barcode
    barcode文件路径。

  • --linker
    linker文件路径。

  • --skip_misB
    barcode不允许碱基错配,默认允许一个碱基错配。

  • --skip_misL
    linker不允许碱基错配,默认允许一个碱基错配。

  • --skip_multi
    舍弃能纠错为多个白名单barocdereads,默认纠错为比例最高的barcode

  • --sc5p
    不启用时,分析5’转录组;启用时,分析5’转录组需。

  • --expectNum
    预估的捕获细胞数目。

  • --forceCell
    当正常分析得到的细胞数⽬不理想时,选⽤此参数,后⾯加⼀个预期的数值Nseeksoultools软件会按照UMI从⾼到低取前N个细胞。

  • --include-introns
    不启用时,只会选择exon reads⽤于定量;启用时,intron reads也会⽤于定量。

  • --star_path
    指定其他版本的STAR路径进行比对,版本需要与--genomeDir版本兼容,默认的--star_path为环境下的STAR

3.2.2 fast模块使用实战

(1)fastp指控原始fastq数据
我们采用trim的方式截去测序数据的测序接头和低质量片段,从而高效地利用测序数据,后续分析都基于clean data。在进行原始数据Trimming时我们使用 fastp软件( Chen S,et al. 2018),处理具体如下: ①截去低质量reads,使用滑动窗口的方式,4个碱基为一个窗口,若该窗口的平均碱基质量值低于10,则从该处截去reads, 参数选择:–cut_front, –cut_front_window_size 4, –cut_front_mean_quality 10; ②截去 reads 尾部质量低于3或者含N(N 表示无法确定碱基信息)的 reads,参数选择: –cut_tail, –cut_tail_window_size 1, –cut_tail_mean_quality; ③截去接头序列(–detect_adapter_for_pe ); ④经上述处理后,过滤掉短于 60 bpreads,及其paired reads-l or --length_required 60 双端测序需要加上: --detect_adapter_for_pe

fastp -i cellline_test/cellline_R1_001.fastq.gz -I cellline_test/cellline_R2_001.fastq.gz \
-o cellline_test/cellline_R1_001.clean.fastq.gz -O cellline_test/cellline_R2_001.clean.fastq.gz \
--cut_front –-cut_front_window_size 4 --cut_front_mean_quality 10 \
--cut_tail –-cut_tail_window_size 1 –-cut_tail_mean_quality \
--length_required 60 --detect_adapter_for_pe 

# 运行提示:
# Detecting adapter sequence for read1...
# No adapter detected for read1
# 
# Detecting adapter sequence for read2...
# >Illumina TruSeq Adapter Read 2
# AGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGT
# 
# Read1 before filtering:
#   total reads: 18714992
# total bases: 2807248800
# Q20 bases: 2751519892(98.0148%)
# Q30 bases: 2642338596(94.1256%)
# 
# Read2 before filtering:
#   total reads: 18714992
# total bases: 2807248800
# Q20 bases: 2693483677(95.9475%)
# Q30 bases: 2530358229(90.1366%)
# 
# Read1 after filtering:
#   total reads: 18471287
# total bases: 2760865206
# Q20 bases: 2708982515(98.1208%)
# Q30 bases: 2602928318(94.2794%)
# 
# Read2 after filtering:
#   total reads: 18471287
# total bases: 2759509560
# Q20 bases: 2667685071(96.6724%)
# Q30 bases: 2511042682(90.996%)
# 
# Filtering result:
#   reads passed filter: 36942574
# reads failed due to low quality: 454502
# reads failed due to too many N: 222
# reads failed due to too short: 32686
# reads with adapter trimmed: 1054560
# bases trimmed due to adapters: 18837617
# 
# Duplication rate: 14.048%
# 
# Insert size peak (evaluated by paired-end reads): 224
# 
# JSON report: fastp.json
# HTML report: fastp.html
# 
# fastp -i cellline_test/cellline_R1_001.fastq.gz -I cellline_test/cellline_R2_001.fastq.gz -o cellline_test/cellline_R1_001.clean.fastq.gz -O cellline_test/cellline_R2_001.clean.fastq.gz --cut_front –-cut_front_window_size 4 --cut_front_mean_quality 10 --cut_tail –-cut_tail_window_size 1 –-cut_tail_mean_quality --length_required 60 --detect_adapter_for_pe 
# fastp v0.23.4, time used: 157 seconds

(2)fast模块使用

seeksoultools fast run \
--fq1 /home/biomamba/analysis/xunyin/test_data/cellline_test/cellline_R1_001.clean.fastq.gz \
--fq2 /home/biomamba/analysis/xunyin/test_data/cellline_test/cellline_R2_001.clean.fastq.gz \
--samplename cellline \
--outdir /home/biomamba/analysis/xunyin/cellline_out \
--genomeDir /home/biomamba/analysis/xunyin/seek_ref/GRCh38/star \
--gtf /home/biomamba/analysis/xunyin/seek_ref/GRCh38/genes/genes.gtf \
--include_introns  \
--rRNAgenomeDir /home/biomamba/analysis/xunyin/seek_ref/hg38_rRNA/star \
--rRNAgtf /home/biomamba/analysis/xunyin/seek_ref/hg38_rRNA/genes/delete_rRNA5.8-18-28_in_rRNA45s.gtf \
--core 8

输出目录下包含以下文件:
/home/biomamba/analysis/xunyin/cellline_out
├── cellline_report.html
├── cellline_summary.csv
├── cellline_summary.json
├── step1
│   ├── cellline_1.fq.gz
│   ├── cellline_2.fq.gz
│   ├── cellline.cutTSO_1.fq.gz
│   ├── cellline.cutTSO_2.fq.gz
│   └── cellline_stat.fq.gz
├── step2
│   ├── featureCounts
│   │   ├── cellline_SortedByCoordinate.bam.featureCounts.bam
│   │   ├── cellline_SortedByName.bam
│   │   ├── counts.txt
│   │   └── counts.txt.summary
│   └── STAR
│   ├── cellline_Aligned.out.bam
│   ├── cellline_Log.final.out
│   ├── cellline_Log.out
│   ├── cellline_Log.progress.out
│   ├── cellline_SJ.out.tab
│   ├── cellline_SortedByCoordinate.bam
│   ├── cellline_SortedByCoordinate.bam.bai
│   ├── cellline_SortedByName.bam
│   ├── downbam
│   │   ├── cellline.down.0.1.bam
│   │   ├── cellline.down.0.1.bam.bai
│   │   ├── cellline.geneBodyCoverage.curves.pdf
│   │   ├── cellline.geneBodyCoverage.r
│   │   └── cellline.geneBodyCoverage.txt
│   ├── report.pdf
│   ├── rnaseq_qc_results.txt
│   └── rRNA
│   ├── cellline_Aligned.out.bam
│   ├── cellline_Log.final.out
│   ├── cellline_Log.out
│   ├── cellline_Log.progress.out
│   ├── cellline_SJ.out.tab
│   ├── cellline_SortedByName.bam
│   ├── cellline.xls
│   ├── counts.txt
│   ├── counts.txt.summary
│   ├── test.input.1.fq.gz
│   └── test.input.2.fq.gz
├── step3
│   ├── counts.xls
│   ├── detail.xls
│   ├── filtered_feature_bc_matrix
│   │   ├── barcodes.tsv.gz
│   │   ├── features.tsv.gz
│   │   └── matrix.mtx.gz
│   ├── filtered_feature_bc_matrix_
│   │   ├── barcodes.tsv.gz
│   │   ├── features.tsv.gz
│   │   └── matrix.mtx.gz
│   ├── fragment.xls
│   ├── raw_feature_bc_matrix
│   │   ├── barcodes.tsv.gz
│   │   ├── features.tsv.gz
│   │   └── matrix.mtx.gz
│   └── umi.xls
└── step4
├── biotype_FindAllMarkers.xls
├── cellline.rds
├── FeatureScatter.png
├── FindAllMarkers.xls
├── lncgene_FindAllMarkers.xls
├── mito_quantile.xls
├── nCount_quantile.xls
├── nFeature_quantile.xls
├── resolution.xls
├── top10_heatmap.png
├── tsne.png
├── tsne_umi.png
├── tsne_umi.xls
├── umap.png
└── VlnPlot.png

11 directories, 66 files

四、Seurat分析与可视化

Seurat可谓是单细胞数据分析及可视化的神包,利用R语言分析单细胞不可不学的利器。这部分内容阅读有障碍的同学可以查看以下我们以往的教程:

scRNA-Seq学习手册2023_R语言版

4.1 数据读取

# 设置工作目录
setwd('~/analysis/xunyin/')
# 加载R包
if (!require("Seurat", quietly = TRUE))install.packages("Seurat")
## The legacy packages maptools, rgdal, and rgeos, underpinning the sp package,
## which was just loaded, were retired in October 2023.
## Please refer to R-spatial evolution reports for details, especially
## https://r-spatial.org/r/2023/05/15/evolution4.html.
## It may be desirable to make the sf package available;
## package maintainers should consider adding sf to Suggests:.
## 
## Attaching package: 'SeuratObject'
## The following objects are masked from 'package:base':
## 
##     intersect, saveRDS
## Loading Seurat v5 beta version 
## To maintain compatibility with previous workflows, new Seurat objects will use the previous object structure by default
## To use new Seurat v5 assays please run: options(Seurat.object.assay.version = 'v5')
if (!require("BiocManager", quietly = TRUE))install.packages("BiocManager")
## Bioconductor version '3.15' requires R version '4.2'; use `version = '3.18'`
##   with R version 4.3; see https://bioconductor.org/install
## Bioconductor version '3.15' is out-of-date; the current release version '3.18'
##   is available with R version '4.3'; see https://bioconductor.org/install
if (!require("multtest", quietly = TRUE))BiocManager::install("multtest")
## 
## Attaching package: 'BiocGenerics'
## The following object is masked from 'package:SeuratObject':
## 
##     intersect
## The following objects are masked from 'package:stats':
## 
##     IQR, mad, sd, var, xtabs
## The following objects are masked from 'package:base':
## 
##     anyDuplicated, aperm, append, as.data.frame, basename, cbind,
##     colnames, dirname, do.call, duplicated, eval, evalq, Filter, Find,
##     get, grep, grepl, intersect, is.unsorted, lapply, Map, mapply,
##     match, mget, order, paste, pmax, pmax.int, pmin, pmin.int,
##     Position, rank, rbind, Reduce, rownames, sapply, setdiff, sort,
##     table, tapply, union, unique, unsplit, which.max, which.min
## Welcome to Bioconductor
## 
##     Vignettes contain introductory material; view with
##     'browseVignettes()'. To cite Bioconductor, see
##     'citation("Biobase")', and for packages 'citation("pkgname")'.
if (!require("dplyr", quietly = TRUE))install.packages("dplyr")
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:Biobase':
## 
##     combine
## The following objects are masked from 'package:BiocGenerics':
## 
##     combine, intersect, setdiff, union
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# 指定数据路径
data_dir <- "cellline_out/step3/filtered_feature_bc_matrix/"
list.files(data_dir)
## [1] "barcodes.tsv.gz" "features.tsv.gz" "matrix.mtx.gz"
#自动读取定量数据,格式为三个tsv或mtx文件
scFAST.data <- Read10X(data.dir = data_dir) 

# 创建Seurat对象并初步过滤
# min.cells表示基因至少在几个细胞中表达,min.genes代表每个细胞中至少表达多少基因,细胞的平均reads数量> 5万一般比较好,否则需要补测:
scFAST <- CreateSeuratObject(counts = scFAST.data, 
                           project = "cell_line", min.cells = 3, 
                           min.features = 200)

4.2 数据预处理

# 通过线粒体的序列数来对数据进行计算线粒体mRNA百分比:
scFAST[["percent.mt"]] <- PercentageFeatureSet(scFAST, 
                                              pattern = "^MT-") # 小鼠数据需要换为mt
# QC的数据存在meta.data里,可以用这个来查看前5行
head(scFAST@meta.data, 5)  
##                   orig.ident nCount_RNA nFeature_RNA percent.mt
## CAGGCCAGCTCACAGCC  cell_line        341          281  0.5865103
## CCGGGTATACGAAGTCC  cell_line        341          285  2.9325513
## GTGTGGCGCTGTACTAC  cell_line        338          258  3.8461538
## TCAGCAACGATCCGCGA  cell_line        341          275  1.1730205
## TCCCATGTACTAGTCCT  cell_line        340          273  2.3529412
# 用小提琴图来展示QC的结果,展示了每个barcode中基因的数目、UMI数目以及线粒体基因含量的分布情况:
#pdf(file = 'Feature.Count.percent.mt.pdf',height = 6,width = 18)
VlnPlot(scFAST, 
        features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), 
        ncol = 3) 

#dev.off()

# 可视化:
plot1 <- FeatureScatter(scFAST, feature1 = "nCount_RNA", feature2 = "percent.mt")
plot2 <- FeatureScatter(scFAST, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")
#pdf(file = '判断基因表达趋势.pdf',width = 12,height = 6)
CombinePlots(plots = list(plot1, plot2)) #高变基因,判断趋势及占比
## Warning: CombinePlots is being deprecated. Plots should now be combined using
## the patchwork system.

#dev.off()
# 质控,选子集,RNA数量在200与2500之间的,多的可能是低质量细胞或空drouplets,gene count多的可能是doublets or multiplets:
scFAST <- subset(scFAST, subset = nFeature_RNA > 200 & 
                  nFeature_RNA < 2500 & percent.mt < 5)   

# 用LogNormalize法对数据进行标准化(乘10000再取对数)数据存在scFAST[["RNA"]]@data.里
# 默认的方法也完成了log1p的操作,得到的结果就类似于TPM的对数:
scFAST <- NormalizeData(scFAST, normalization.method = "LogNormalize", 
                       scale.factor = 10000)      

# 筛选高变基因(输出2000个),用于下游的PCA及分群:
scFAST <- FindVariableFeatures(scFAST, selection.method = "vst", 
                              nfeatures = 2000)

# 输出差异最大的十个基因:
top10 <- head(VariableFeatures(scFAST), 10) 
plot1 <- VariableFeaturePlot(scFAST)
plot2 <- LabelPoints(plot = plot1, points = top10, repel = TRUE)
## When using repel, set xnudge and ynudge to 0 for optimal results
#输出差异基因散点图(有无标签):
plot1+plot2  

# 将数据进行归一化,为后续的PCA分析做准备,数据存在scFAST[["RNA"]]@scale.data
scFAST <- ScaleData(scFAST, features =  rownames(scFAST))  
## Centering and scaling data matrix
#scFAST <- ScaleData(scFAST)#only4VariableFeatures

# 回归计算消除无关的变量(如线粒体的比例):
scFAST <- ScaleData(scFAST, vars.to.regress = "percent.mt") 
## Regressing out percent.mt
## Centering and scaling data matrix
#scFAST[["RNA"]]@scale.data

# PCA降维分析:
scFAST <- RunPCA(scFAST, 
                features = VariableFeatures(object = scFAST)) 
## PC_ 1 
## Positive:  HBG2, HBG1, PRAME, CPED1, AL713998.1, GLUL, KCNH2, MPP1, PRKCB, RELN 
##     AC136431.1, LINC01287, CBFA2T3, FAM178B, NUP214, AC004949.1, AP000547.3, ANK1, AC097528.1, RHAG 
##     LYL1, LINC02476, ALDH1A2, CTCFL, SEPTIN5, GYPC, EPB41, AP001531.1, ZEB2, GATA1 
## Negative:  ASPH, EGFR, LCN2, KRT18, GAPDH, IGFBP3, CD44, VOPP1, KRT8, JUN 
##     LPP, NFKBIZ, SAA1, S100A10, CFB, AREG, CDH1, CDK4, EGR1, PGK1 
##     PIP4K2C, CCN1, MUC16, SOD2, KRT19, KRT7, AZGP1, UBC, PGM1, TGFBI 
## PC_ 2 
## Positive:  FP236383.3, VOPP1, LCN2, EPCAM, SAA1, CDK4, EGFR, AZGP1, RPL7, PIP4K2C 
##     KRT19, HIST1H1B, CFB, CDH1, RNASET2, NFKBIZ, LAD1, SERPINB4, CCT6A, MUC16 
##     F3, LANCL2, ESRP1, ICAM1, SLC43A3, PDZK1IP1, CHCHD2, CLDN4, CDH3, GNS 
## Negative:  ALDH1A1, AKR1C2, CYP24A1, IGFBP4, AKR1C3, AKAP12, AKR1B1, PDE4D, VIM, ALDH3A1 
##     TPM2, AKR1B10, G6PD, AHNAK2, CA12, AKR1C1, PGD, TNS4, PDE10A, SERPINE1 
##     FTL, PBX1, NQO1, MYO1E, ANXA2, UGDH, CPLX2, THSD4, MAP1B, IGFBP7 
## PC_ 3 
## Positive:  MKI67, HIST1H1C, RPS6, STMN1, RPL29, HSP90AA1, RPS8, MYH9, HMGB2, FLNA 
##     FTL, HIST1H1E, HSPA8, HIST1H2AI, PRRC2A, TUBB4B, RANBP1, SERBP1, INCENP, RPL24 
##     LDHB, PLEC, TOP2A, TPX2, CENPF, MRPL16, HSPD1, PPP1R15A, PRAME, ACTN4 
## Negative:  GAPDH, PTMA, IGFBP3, TRPC6, AC007325.2, PADI2, FGG, VOPP1, PLAAT4, NTS 
##     FGB, PLAAT3, SERPINB4, AZGP1, MUC4, FGA, LCN2, KRT18, SAA4, TCN1 
##     SUSD2, PEG10, HMOX1, LIPG, AC093817.2, SEMA3A, NUPR1, SLC16A5, TRIM31, C4orf19 
## PC_ 4 
## Positive:  FN1, NEAT1, C3, CXCL8, ANXA4, IGFBP3, RCSD1, CD24, INSIG1, PHLDB2 
##     TNFAIP2, CFH, PNRC1, NDRG1, CXCL5, ARL15, DLK1, FNDC3B, STXBP5, CD53 
##     MAP1A, EPB41, LRMDA, IFNGR1, C1R, ADGRB3, RHAG, RND1, CFB, SOX6 
## Negative:  MKI67, KPNA2, TUBB4B, TPX2, TOP2A, CDCA3, ANLN, CENPF, NUSAP1, HIST1H1B 
##     AURKA, INCENP, HMGB2, CCNA2, KNSTRN, HIST1H1E, HIST1H2AB, ECT2, HIST1H2AI, RRM2 
##     PTMA, CDC20, CDCA8, H2AFX, KIF20A, PSRC1, FAM83D, CCNB1, PLK1, KIF2C 
## PC_ 5 
## Positive:  KIF20A, RCSD1, CDC20, DLK1, CCNB1, CENPF, DLGAP5, ANXA1, KPNA2, AURKA 
##     PSRC1, CCNB2, ADGRB3, TOP2A, TPX2, CDCA3, CD53, ARL6IP1, ANTXR2, STXBP5 
##     NUSAP1, SOSTDC1, CALB1, SLAMF6, BUB1, CFH, SOX6, CD24, LYZ, MUC4 
## Negative:  HIST1H2AI, HIST1H1E, HIST1H1B, HIST1H2AB, HIST1H1C, HIST2H2AA4, HBG2, HIST2H2AC, HBG1, HIST1H2AJ 
##     HIST1H1D, HEMGN, SLC43A3, FAM178B, CA1, RRM2, PKLR, HIST2H2BF, FOSL1, CCN1 
##     ATF3, HIST1H2BK, MCM2, CCDC26, ATAD3B, SLC38A5, CDC45, KCNH2, RANBP1, SRM
# 打印PCA部分结果:
print(scFAST[["pca"]], dims = 1:5, nfeatures = 5) 
## PC_ 1 
## Positive:  HBG2, HBG1, PRAME, CPED1, AL713998.1 
## Negative:  ASPH, EGFR, LCN2, KRT18, GAPDH 
## PC_ 2 
## Positive:  FP236383.3, VOPP1, LCN2, EPCAM, SAA1 
## Negative:  ALDH1A1, AKR1C2, CYP24A1, IGFBP4, AKR1C3 
## PC_ 3 
## Positive:  MKI67, HIST1H1C, RPS6, STMN1, RPL29 
## Negative:  GAPDH, PTMA, IGFBP3, TRPC6, AC007325.2 
## PC_ 4 
## Positive:  FN1, NEAT1, C3, CXCL8, ANXA4 
## Negative:  MKI67, KPNA2, TUBB4B, TPX2, TOP2A 
## PC_ 5 
## Positive:  KIF20A, RCSD1, CDC20, DLK1, CCNB1 
## Negative:  HIST1H2AI, HIST1H1E, HIST1H1B, HIST1H2AB, HIST1H1C
#pdf(file = 'PCA_点图.pdf',width = 10,height = 6)
VizDimLoadings(scFAST, dims = 1:2, reduction = "pca") 

#dev.off()

# 三种PCA展示方式:
DimHeatmap(scFAST, dims = 1, 
           cells = 500, balanced = TRUE) 

#pdf(file = 'PCA.heatmap.pdf',width = 15,height = 12)

# 展示15种PCA:
DimHeatmap(scFAST, dims = 1:15, 
           cells = 500, balanced = TRUE) 

#dev.off()

# 筛选合适的维度:
# 重复计算次数:
scFAST <- JackStraw(scFAST, num.replicate = 100) 

# 计算维度这一步花的时间比较久:
scFAST <- ScoreJackStraw(scFAST, dims = 1:20) 
#pdf(file = 'jackstrawplot.pdf',width = 6,height = 6)

# JackStrawPlot相当于高级PCA,为挑选合适维度进行下游可视化提供依据:
# 画出1到15个维度:
JackStrawPlot(scFAST, dims = 1:15) 
## Warning: Removed 21504 rows containing missing values (geom_point).

#dev.off()


# 利用ElbowPlot来评价PC,不可为了结果好看而降低PC数
#pdf(file = 'elbow.pdf',width = 6,height = 5)
ElbowPlot(scFAST) 

#dev.off()

4.3 降维、分群、注释

scFAST <- FindNeighbors(scFAST, dims = 1:11)
## Computing nearest neighbor graph
## Computing SNN
# 细胞分群,resolution分辨率在细胞数在3000附近时一般设为0.4-1.2,resolution越大得到的类群越多:
scFAST <- FindClusters(scFAST, resolution = 0.5) 
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
## 
## Number of nodes: 4986
## Number of edges: 165138
## 
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.8383
## Number of communities: 6
## Elapsed time: 0 seconds
# 看前五个分类群ID:
head(Idents(scFAST), 5) 
## CAGGCCAGCTCACAGCC CCGGGTATACGAAGTCC GTGTGGCGCTGTACTAC TCAGCAACGATCCGCGA 
##                 2                 2                 0                 1 
## TCCCATGTACTAGTCCT 
##                 2 
## Levels: 0 1 2 3 4 5
#非线性降维方法:UMAP、tSNE

# 运行UMAP算法:
scFAST <- RunUMAP(scFAST, dims = 1:11) 
## Warning: The default method for RunUMAP has changed from calling Python UMAP via reticulate to the R-native UWOT using the cosine metric
## To use Python UMAP via reticulate, set umap.method to 'umap-learn' and metric to 'correlation'
## This message will be shown once per session
## 12:32:13 UMAP embedding parameters a = 0.9922 b = 1.112
## Found more than one class "dist" in cache; using the first, from namespace 'spam'
## Also defined by 'BiocGenerics'
## 12:32:13 Read 4986 rows and found 11 numeric columns
## 12:32:13 Using Annoy for neighbor search, n_neighbors = 30
## Found more than one class "dist" in cache; using the first, from namespace 'spam'
## Also defined by 'BiocGenerics'
## 12:32:13 Building Annoy index with metric = cosine, n_trees = 50
## 0%   10   20   30   40   50   60   70   80   90   100%
## [----|----|----|----|----|----|----|----|----|----|
## **************************************************|
## 12:32:14 Writing NN index file to temp file /tmp/RtmpoD6ECd/file2f34c37455ca81
## 12:32:14 Searching Annoy index using 1 thread, search_k = 3000
## 12:32:15 Annoy recall = 100%
## 12:32:17 Commencing smooth kNN distance calibration using 1 thread with target n_neighbors = 30
## 12:32:18 Initializing from normalized Laplacian + noise (using RSpectra)
## 12:32:18 Commencing optimization for 500 epochs, with 199020 positive edges
## 12:32:26 Optimization finished
# 运行TSNE算法,TSNE算法运行时间较UMAP更久:
scFAST <- RunTSNE(scFAST, dims = 1:11) 
DimPlot(scFAST, reduction = "umap", label = TRUE)

# 计算cluster1相较于其它cluster的marker:
cluster1.markers <- FindMarkers(scFAST, ident.1 = 1, 
                                min.pct = 0.25) 

# roc算法计算cluster1的marker
cluster1.markers <- FindMarkers(scFAST, ident.1 = 0, 
                                logfc.threshold = 0.25, 
                                test.use = "roc", 
                                only.pos = TRUE)  

# 查看前五个标记基因:
head(cluster1.markers, n = 5) 
##         myAUC avg_diff power avg_log2FC pct.1 pct.2
## ALDH1A1 0.973 3.584375 0.946   6.269209 0.953 0.052
## CYP24A1 0.924 2.547823 0.848   4.288242 0.890 0.151
## AKR1C2  0.910 3.383152 0.820   6.050831 0.836 0.042
## PKM     0.879 0.872585 0.758   1.277443 0.993 0.881
## IGFBP4  0.863 2.537671 0.726   5.060269 0.747 0.043
# 寻找每一个分类群与其他所有细胞之间的标记基因,并只显示positive结果
scFAST.markers <- FindAllMarkers(scFAST, only.pos = TRUE, 
                                min.pct = 0.25, 
                                logfc.threshold = 0.25) 
## Calculating cluster 0
## Calculating cluster 1
## Calculating cluster 2
## Calculating cluster 3
## Calculating cluster 4
## Calculating cluster 5
library(dplyr)
# 筛选出top10:
top10gene <- scFAST.markers %>% group_by(cluster) %>% 
  top_n(n = 10, wt = avg_log2FC) 
# pdf(file = 'top10marker.pdf',width = 20,height = 100)
VlnPlot(scFAST, features = unique(top10gene$gene),
        pt.size = 0,ncol = 4)

# dev.off()

VlnPlot(scFAST, features = unique(top10gene$gene),
        pt.size = 0,stack = T)

DimPlot(scFAST)

# 查看部分marker基因在FeaturePlot(以UMAP作为底图)中的表达情况:
FeaturePlot(scFAST, 
            features = unique(top10gene$gene)[1:9]) 

# 展示cluster标签
FeaturePlot(scFAST, 
            features = unique(top10gene$gene)[1:9],
            label = T) 

FeaturePlot(scFAST, 
            features = c("ALDH1A1","AKR1C2","AKR1C3","CYP24A1")) 

# 展示前10个标记基因的热图
top10 <- scFAST.markers %>% group_by(cluster) %>% top_n(n = 10, wt = avg_log2FC)
DoHeatmap(scFAST, features = top10$gene) + NoLegend()

#通过标记基因及文献,可以人工确定各分类群的细胞类型,则可以如下手动添加细胞群名称:

# 重命名方法1:
new.cluster.ids <- c("Celltype_A", "Celltype_B","Celltype_C",
                     "Celltype_B","Celltype_B","Celltype_C")
names(new.cluster.ids) <- levels(scFAST)
scFAST <- RenameIdents(scFAST, new.cluster.ids)
scFAST$celltype <- Idents(scFAST)
# 重命名方法2
scFAST$celltype <- scFAST$RNA_snn_res.0.5
scFAST$celltype <- recode(scFAST$celltype,
                  '0'="Celltype_A", 
                  '1'="Celltype_B",
                  '2'="Celltype_C",
                  '3'="Celltype_B",
                  '4'="Celltype_B",
                  '5'="Celltype_C")

Idents(scFAST) <- 'celltype'

# 计算重命名后的细胞类型marker
scFAST_rename_markers <- FindAllMarkers(scFAST, only.pos = TRUE, 
                                 min.pct = 0.25, 
                                 logfc.threshold = 0.25) 
## Calculating cluster Celltype_A
## Calculating cluster Celltype_B
## Calculating cluster Celltype_C
# 筛选top5 maker
top5_rename <- scFAST_rename_markers %>% group_by(cluster) %>% 
  top_n(n = 5, wt = avg_log2FC)

# 利用堆积小提琴图查看表达情况:
VlnPlot(scFAST,
          features = unique(top5_rename$gene),
            stack = T)

# 求各个细胞类型基因的平均表达量:
cell.expr <- 
  log1p(AverageExpression(scFAST, verbose = FALSE)$RNA)
## Warning: `invoke()` is deprecated as of rlang 0.4.0.
## Please use `exec()` or `inject()` instead.
## This warning is displayed once every 8 hours.
head(cell.expr)
## 6 x 3 sparse Matrix of class "dgCMatrix"
##            Celltype-A  Celltype-B Celltype-C
## AL627309.1 .          .           0.28221346
## AL627309.2 .          0.006774702 0.01673949
## AL627309.5 0.04375944 0.116682264 0.20596967
## AP006222.2 0.01291225 0.013775439 0.56941424
## AL732372.1 .          0.009998963 0.01746337
## AC114498.1 .          0.010397461 0.03523540
DimPlot(scFAST, reduction = "umap", 
        label = TRUE, pt.size = 0.5) + NoLegend()

Idents(scFAST) <- 'celltype'

DimPlot(scFAST, reduction = "umap", 
        label = TRUE, pt.size = 0.5) + NoLegend()

可以如是完成数据的保存与再次读取:

# 创建目录:
dir.create('scFAST_out')

# 将Seurat对象保存为rds文件输出:
saveRDS(scFAST, file = "./scFAST_out/scFAST_fast.rds")

# 读取rds文件:
scFAST <- readRDS('./scFAST_out/scFAST_fast.rds')

五、mut模块

5.1 简介

该模块用于分析panel数据或者全序列数据中的变异信息,可以说是scFAST的特色分析模块。在该模块中,对可靠的突变位点会给出位点所在clusterbarcode等信息,所以需要提供rds文件(即我们上一步中存出的scFAST_fast.rds文件),因此,需要先利用seeksoultools等软件进行定量、分群之后再用此模块进行变异检测。panel的分析也是使用该模块完成的。

5.2 模块工作流程

突变检测模块流程示意图
突变检测模块流程示意图

在将整体数据变异位点到单细胞维度时,利用了bam文件中每条readsbarcodeUMI信息。流程默认将非同义突变过滤,并且基于链偏好性对突变进行再一次的过滤。

我们使用 SOR(Symmetric Odds Ratio)值评估链偏好性。snv小于1.0indel 默认小于10.0的所有位点进行reads统计,并且每个位点可给出一个中间文件(该文件生成与否根据_tmptype_参数设定),如下

BC_UMI  BKGD/CB coverage        alt     ref1    ref2    alt1    alt2
CGTAGTACGAGCACGAA_CCCGCTTTCCTT  cell    35      0       0       35      0       0
TGATCAGATGGTAACAC_ACTCCTTTCCAT  cell    34      1       0       33      0       1
AGGATAATACACTACGA_CTGTCGATCCTT  background      1       1       0       0       0       1

该文件记录突变位点中每一条UMI的ref alt reads数量,并依据此对位点进行了过滤,过滤条件如下:
(1)只有符合alt/coverage>=0.9(altvaf参数值)且coverage reads>=2(UMIreads参数值)的UMI才被认为是支持突变的UMI;
(2)支持突变的UMI数目>=2(umiint参数值);
(3)支持突变的barcode数目>=2(bcint参数值);
(4)位点总突变reads>=2(ADint数值);
(5)位点覆盖reads>=2(DPint参数值);
(6)snvsor值<=1.0 indelsor<=10.0(sorcut参数值) ;
(7)ExAC数据库中easAll频率小于0.01;
(8)突变的vaf(alt reads/coverage reads) > 0.03 。经过如上8个步骤过滤的位点认为是最终的突变位点。

5.3 运行mut模块

5.3.1 输入文件准备

panel原始fastq数据(clean data;需要自行用fastp等软件处理下机数据)

  • STAR软件
    可以选择本软件环境中的STAR,也可以用外部STAR

  • 基因组fasta文件

  • STAR软件的参考基因组索引文件
    需要注意STAR软件版本兼容问题

  • 全序列数据(非panel数据)
    处理得到的表达矩阵进行降维分群之后的文件,即我们上文保存的scFAST_fast.rds文件

  • panelbed文件

  • annovar软件及其database
    可见2.3.3部分

5.3.2 运行mut模块

参数解释:

  • --fq1
    panel R1 fastq数据路径。

  • --fq2
    panel R2 fastq数据路径。

  • --genomeDir
    STAR软件构建的索引文件,注意需要与STAR软件版本兼容。

  • --star_path
    STAR软件的路径。

  • --fasta
    参考基因组的fasta文件。注意,fasta文件的染色体名称需要与genomeDir的染色体名称保持一致。

  • --samplename
    样本名称。

  • --outdir
    结果目录。

  • --rds
    全序列RNA表达矩阵的rds文件。

  • --annovarpl
    下载的annovar软件路径。

  • --annovardb
    下载的annovar数据库路径。

  • --ref
    参考基因组版本。

  • --cellanno
    seurat_clusters或者CellType,默认为seurat_clusters,当rds文件是经过手动注释之后的rds文件时,将meta data细胞类型列命名为CellType,并将此参数设置为CellType。

  • --filted
    fsys。默认只保留非同义突变。

  • --tmptype
    参数值为allreads时,每个位点在BC_UMI_reads_tmp路径下生成一个记录详细reads数目的文件。该参数值默认为txt,即不生成详细的文件。

  • --panel:panel的bed文件。 此参数时,只对bed区间内进行变异检测,当不指定此参数的时候,会对全部reads进行变异检测。

# 任务比较大,将其丢到后台运行
nohup seeksoultools mut run \
        --fq1 /home/biomamba/analysis/xunyin/test_data/cellline_test/cellline_R1_001.clean.fastq.gz \
        --fq2 /home/biomamba/analysis/xunyin/test_data/cellline_test/cellline_R2_001.clean.fastq.gz \
        --genomeDir /home/biomamba/analysis/xunyin/my_refference/hg38/ \
        --fasta /home/biomamba/ext_data2/analysis/xunyin/my_refference/hg38/hg38.fa \
        --samplename cellline \
        --outdir /home/biomamba/analysis/xunyin/cell_line_mutout \
        --rds  /home/biomamba/analysis/xunyin/scFAST_out/scFAST_fast.rds \
        --annovarpl /home/biomamba/ext_data2/analysis/xunyin/annovar/table_annovar.pl \
        --annovardb /home/biomamba/ext_data2/analysis/xunyin/annovar/humandb \
        --ref hg38 \
        --filted fsys \
        --cellanno celltype \
        --core 4 2>&1 > mut.log &

5.3.3 输出结果

输出路径中包含的文件为:

tree cell_line_mutout
## cell_line_mutout
## ├── celllinebarcodelist.xls
## ├── mutation_umap
## │   ├── cellline_add_snv.rds
## │   └── SNV_diff
## │       ├── cellline_snv_markers.xls
## │       ├── Celltype_A
## │       │   ├── ANLN_chr7-36407745_-_TCT.png
## │       │   ├── ANP32E_chr1-150226713_T_C.png
## │       │   ├── CANX_chr5-179708267_G_T.png
## │       │   ├── CANX_chr5-179726685_A_G.png
## │       │   ├── CPPED1_chr16-12704775_C_G.png
## │       │   ├── CYBA_chr16-88643516_G_C.png
## │       │   ├── DBN1_chr5-177466941_C_T.png
## │       │   ├── FH_chr1-241497970_C_A.png
## │       │   ├── FUS_chr16-31190121_G_A.png
## │       │   ├── H2AC14_chr6-27814513_C_G.png
## │       │   ├── HLA-B_chr6-31356259_T_G.png
## │       │   ├── KIFBP_chr10-69000515_T_C.png
## │       │   ├── KRAS_chr12-25245351_C_T.png
## │       │   ├── NAMPT_chr7-106261662_T_C.png
## │       │   ├── NCOA4_chr10-46010599_C_T.png
## │       │   ├── NUDT3;RPS10-NUDT3_chr6-34293496_T_G.png
## │       │   ├── PCNT_chr21-46334596_A_G.png
## │       │   ├── PMPCB_chr7-103298662_G_A.png
## │       │   ├── PPP4R2_chr3-73065058_C_G.png
## │       │   ├── RALY_chr20-34077059_-_AGC.png
## │       │   ├── REST_chr4-56930473_T_C.png
## │       │   ├── SPTBN1_chr2-54643117_C_A.png
## │       │   ├── TBC1D23_chr3-100296189_C_A.png
## │       │   └── UNC93B1_chr11-67999234_G_A.png
## │       ├── Celltype_B
## │       │   ├── ARL6IP1_chr16-18794662_A_G.png
## │       │   ├── BAG3_chr10-119670133_G_A.png
## │       │   ├── CAP1_chr1-40070169_A_T.png
## │       │   ├── CCNDBP1_chr15-43191645_T_C.png
## │       │   ├── CCT8_chr21-29067014_C_T.png
## │       │   ├── CDCA5_chr11-65079463_C_T.png
## │       │   ├── CYBA_chr16-88647125_T_G.png
## │       │   ├── CYP1B1_chr2-38071060_G_C.png
## │       │   ├── DDX3X_chrX-41343348_A_C.png
## │       │   ├── DHX33_chr17-5461073_A_G.png
## │       │   ├── EEFSEC_chr3-128153739_G_A.png
## │       │   ├── GART_chr21-33534717_C_A.png
## │       │   ├── GART_chr21-33534718_A_T.png
## │       │   ├── HAVCR1_chr5-157052561_A_G.png
## │       │   ├── HMGA1_chr6-34243515_-_A.png
## │       │   ├── INO80_chr15-41079889_T_C.png
## │       │   ├── LRRC8D_chr1-89933402_A_G.png
## │       │   ├── MRPS7_chr17-75261947_C_T.png
## │       │   ├── PCIF1_chr20-45940563_G_A.png
## │       │   ├── PLD3_chr19-40378055_G_A.png
## │       │   ├── PLOD1_chr1-11965543_C_T.png
## │       │   ├── POLR1A_chr2-86089889_C_G.png
## │       │   ├── PPP4R3B_chr2-55617200_G_A.png
## │       │   ├── RRBP1_chr20-17616749_C_T.png
## │       │   ├── SERINC1_chr6-122451991_T_G.png
## │       │   ├── VPS35L_chr16-19699568_C_T.png
## │       │   ├── WASHC1_chr9-17843_C_A.png
## │       │   ├── WASHC1_chr9-18081_G_A.png
## │       │   ├── WASHC1_chr9-18143_C_T.png
## │       │   ├── WASHC1_chr9-18481_T_C.png
## │       │   ├── ZNF180_chr19-44479350_G_C.png
## │       │   ├── ZNF280A_chr22-22515221_G_T.png
## │       │   └── ZSCAN25_chr7-99619904_G_A.png
## │       └── Celltype_C
## │           ├── ACIN1_chr14-23079588_-_ACGTGA.png
## │           ├── CCAR2_chr8-22615709_G_T.png
## │           ├── CCDC34_chr11-27350364_G_T.png
## │           ├── CCDC74B_chr2-130141240_G_A.png
## │           ├── CDC20_chr1-43362992_G_A.png
## │           ├── DFFA_chr1-10469269_A_G.png
## │           ├── EGLN2_chr19-40807854_C_T.png
## │           ├── EIF3A_chr10-119051224_T_A.png
## │           ├── FAM185A_chr7-102751727_A_G.png
## │           ├── FBXO22_chr15-75904057_C_T.png
## │           ├── HDLBP_chr2-241256379_C_A.png
## │           ├── KIAA0100_chr17-28643219_C_A.png
## │           ├── KMT2D_chr12-49032947_GCT_-.png
## │           ├── LSM12_chr17-44038092_T_C.png
## │           ├── MDC1_chr6-30713191_C_T.png
## │           ├── MRPL20_chr1-1402212_G_C.png
## │           ├── NDUFC2;NDUFC2-KCTD14_chr11-78073109_-_A.png
## │           ├── NEK9_chr14-75124193_C_T.png
## │           ├── NFE2L2_chr2-177231803_G_C.png
## │           ├── NR1H2_chr19-50378574_-_CAG.png
## │           ├── PKP3_chr11-397348_A_G.png
## │           ├── PUS7_chr7-105508236_A_G.png
## │           ├── RAB5B_chr12-55992132_GGA_-.png
## │           ├── RTN3_chr11-63758191_-_A.png
## │           └── TSR2_chrX-54444542_A_G.png
## ├── STAR
## │   ├── cellline_Aligned.out.bam
## │   ├── cellline_Aligned.sortedByCoord.out.bam
## │   ├── cellline_Aligned.sortedByCoord.out.bam.bai
## │   ├── cellline_Log.final.out
## │   ├── cellline_Log.out
## │   ├── cellline_Log.progress.out
## │   ├── cellline_SJ.out.tab
## │   └── cellline__STARtmp
## │       ├── readFilesIn.info
## │       ├── readsCommand_read1
## │       ├── readsCommand_read2
## │       ├── tmp.fifo.read1
## │       └── tmp.fifo.read2
## ├── step1
## │   ├── cellline_1.fq.gz
## │   ├── cellline_2.fq.gz
## │   ├── cellline.cutTSO_1.fq.gz
## │   ├── cellline.cutTSO_2.fq.gz
## │   └── cellline_stat.fq.gz
## ├── summary.json
## └── varscan
##     ├── BC_UMI_reads_tmp
##     ├── cellline.annoCB.varscan.indel.chr10.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr11.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr12.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr13.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr14.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr15.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr16.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr17.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr18.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr19.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr1.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr20.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr21.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr22.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr2.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr3.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr4.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr5.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr6.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr7.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr8.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chr9.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chrX.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.indel.chrY.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr10.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr11.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr12.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr13.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr14.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr15.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr16.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr17.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr18.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr19.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr1.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr20.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr21.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr22.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr2.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr3.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr4.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr5.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr6.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr7.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr8.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chr9.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chrX.hg38_multianno.txt
##     ├── cellline.annoCB.varscan.snp.chrY.hg38_multianno.txt
##     ├── cellline.clusters.varscan.snp_indel.hg38_multianno.xls
##     ├── cellline.filter-nonsys.varscan.indel.chr10.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr11.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr12.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr13.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr14.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr15.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr16.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr17.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr18.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr19.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr1.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr20.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr21.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr22.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr2.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr3.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr4.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr5.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr6.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr7.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr8.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chr9.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chrX.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.indel.chrY.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr10.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr11.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr12.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr13.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr14.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr15.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr16.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr17.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr18.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr19.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr1.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr20.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr21.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr22.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr2.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr3.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr4.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr5.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr6.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr7.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr8.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chr9.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chrX.hg38_multianno.txt
##     ├── cellline.filter-nonsys.varscan.snp.chrY.hg38_multianno.txt
##     ├── cellline.filter.varscan.snp_indel.hg38_multianno.txt
##     ├── cellline.final.varscan.snp_indel.hg38_multianno.txt
##     ├── cellline.hg38.varscan.indel.chr10.vcf
##     ├── cellline.hg38.varscan.indel.chr11.vcf
##     ├── cellline.hg38.varscan.indel.chr12.vcf
##     ├── cellline.hg38.varscan.indel.chr13.vcf
##     ├── cellline.hg38.varscan.indel.chr14.vcf
##     ├── cellline.hg38.varscan.indel.chr15.vcf
##     ├── cellline.hg38.varscan.indel.chr16.vcf
##     ├── cellline.hg38.varscan.indel.chr17.vcf
##     ├── cellline.hg38.varscan.indel.chr18.vcf
##     ├── cellline.hg38.varscan.indel.chr19.vcf
##     ├── cellline.hg38.varscan.indel.chr1.vcf
##     ├── cellline.hg38.varscan.indel.chr20.vcf
##     ├── cellline.hg38.varscan.indel.chr21.vcf
##     ├── cellline.hg38.varscan.indel.chr22.vcf
##     ├── cellline.hg38.varscan.indel.chr2.vcf
##     ├── cellline.hg38.varscan.indel.chr3.vcf
##     ├── cellline.hg38.varscan.indel.chr4.vcf
##     ├── cellline.hg38.varscan.indel.chr5.vcf
##     ├── cellline.hg38.varscan.indel.chr6.vcf
##     ├── cellline.hg38.varscan.indel.chr7.vcf
##     ├── cellline.hg38.varscan.indel.chr8.vcf
##     ├── cellline.hg38.varscan.indel.chr9.vcf
##     ├── cellline.hg38.varscan.indel.chrX.vcf
##     ├── cellline.hg38.varscan.indel.chrY.vcf
##     ├── cellline.hg38.varscan.snp.chr10.vcf
##     ├── cellline.hg38.varscan.snp.chr11.vcf
##     ├── cellline.hg38.varscan.snp.chr12.vcf
##     ├── cellline.hg38.varscan.snp.chr13.vcf
##     ├── cellline.hg38.varscan.snp.chr14.vcf
##     ├── cellline.hg38.varscan.snp.chr15.vcf
##     ├── cellline.hg38.varscan.snp.chr16.vcf
##     ├── cellline.hg38.varscan.snp.chr17.vcf
##     ├── cellline.hg38.varscan.snp.chr18.vcf
##     ├── cellline.hg38.varscan.snp.chr19.vcf
##     ├── cellline.hg38.varscan.snp.chr1.vcf
##     ├── cellline.hg38.varscan.snp.chr20.vcf
##     ├── cellline.hg38.varscan.snp.chr21.vcf
##     ├── cellline.hg38.varscan.snp.chr22.vcf
##     ├── cellline.hg38.varscan.snp.chr2.vcf
##     ├── cellline.hg38.varscan.snp.chr3.vcf
##     ├── cellline.hg38.varscan.snp.chr4.vcf
##     ├── cellline.hg38.varscan.snp.chr5.vcf
##     ├── cellline.hg38.varscan.snp.chr6.vcf
##     ├── cellline.hg38.varscan.snp.chr7.vcf
##     ├── cellline.hg38.varscan.snp.chr8.vcf
##     ├── cellline.hg38.varscan.snp.chr9.vcf
##     ├── cellline.hg38.varscan.snp.chrX.vcf
##     ├── cellline.hg38.varscan.snp.chrY.vcf
##     ├── cellline.simple.varscan.snp_indel.hg38_multianno.txt
##     ├── cellline.snp_indel.all_UMI.matrix
##     ├── cellline.snp_indel.alt_UMI.matrix
##     ├── cellline.varscan.indel.chr10.avinput
##     ├── cellline.varscan.indel.chr10.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr10.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr10.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr11.avinput
##     ├── cellline.varscan.indel.chr11.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr11.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr11.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr12.avinput
##     ├── cellline.varscan.indel.chr12.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr12.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr12.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr13.avinput
##     ├── cellline.varscan.indel.chr13.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr13.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr13.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr14.avinput
##     ├── cellline.varscan.indel.chr14.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr14.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr14.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr15.avinput
##     ├── cellline.varscan.indel.chr15.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr15.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr15.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr16.avinput
##     ├── cellline.varscan.indel.chr16.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr16.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr16.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr17.avinput
##     ├── cellline.varscan.indel.chr17.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr17.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr17.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr18.avinput
##     ├── cellline.varscan.indel.chr18.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr18.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr18.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr19.avinput
##     ├── cellline.varscan.indel.chr19.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr19.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr19.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr1.avinput
##     ├── cellline.varscan.indel.chr1.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr1.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr1.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr20.avinput
##     ├── cellline.varscan.indel.chr20.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr20.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr20.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr21.avinput
##     ├── cellline.varscan.indel.chr21.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr21.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr21.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr22.avinput
##     ├── cellline.varscan.indel.chr22.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr22.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr22.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr2.avinput
##     ├── cellline.varscan.indel.chr2.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr2.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr2.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr3.avinput
##     ├── cellline.varscan.indel.chr3.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr3.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr3.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr4.avinput
##     ├── cellline.varscan.indel.chr4.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr4.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr4.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr5.avinput
##     ├── cellline.varscan.indel.chr5.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr5.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr5.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr6.avinput
##     ├── cellline.varscan.indel.chr6.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr6.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr6.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr7.avinput
##     ├── cellline.varscan.indel.chr7.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr7.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr7.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr8.avinput
##     ├── cellline.varscan.indel.chr8.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr8.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr8.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chr9.avinput
##     ├── cellline.varscan.indel.chr9.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr9.hg38_multianno.txt
##     ├── cellline.varscan.indel.chr9.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chrX.avinput
##     ├── cellline.varscan.indel.chrX.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chrX.hg38_multianno.txt
##     ├── cellline.varscan.indel.chrX.hg38_multianno.vcf
##     ├── cellline.varscan.indel.chrY.avinput
##     ├── cellline.varscan.indel.chrY.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.indel.chrY.hg38_multianno.txt
##     ├── cellline.varscan.indel.chrY.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr10.avinput
##     ├── cellline.varscan.snp.chr10.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr10.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr10.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr11.avinput
##     ├── cellline.varscan.snp.chr11.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr11.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr11.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr12.avinput
##     ├── cellline.varscan.snp.chr12.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr12.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr12.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr13.avinput
##     ├── cellline.varscan.snp.chr13.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr13.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr13.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr14.avinput
##     ├── cellline.varscan.snp.chr14.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr14.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr14.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr15.avinput
##     ├── cellline.varscan.snp.chr15.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr15.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr15.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr16.avinput
##     ├── cellline.varscan.snp.chr16.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr16.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr16.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr17.avinput
##     ├── cellline.varscan.snp.chr17.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr17.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr17.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr18.avinput
##     ├── cellline.varscan.snp.chr18.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr18.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr18.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr19.avinput
##     ├── cellline.varscan.snp.chr19.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr19.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr19.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr1.avinput
##     ├── cellline.varscan.snp.chr1.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr1.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr1.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr20.avinput
##     ├── cellline.varscan.snp.chr20.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr20.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr20.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr21.avinput
##     ├── cellline.varscan.snp.chr21.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr21.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr21.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr22.avinput
##     ├── cellline.varscan.snp.chr22.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr22.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr22.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr2.avinput
##     ├── cellline.varscan.snp.chr2.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr2.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr2.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr3.avinput
##     ├── cellline.varscan.snp.chr3.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr3.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr3.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr4.avinput
##     ├── cellline.varscan.snp.chr4.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr4.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr4.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr5.avinput
##     ├── cellline.varscan.snp.chr5.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr5.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr5.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr6.avinput
##     ├── cellline.varscan.snp.chr6.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr6.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr6.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr7.avinput
##     ├── cellline.varscan.snp.chr7.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr7.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr7.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr8.avinput
##     ├── cellline.varscan.snp.chr8.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr8.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr8.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chr9.avinput
##     ├── cellline.varscan.snp.chr9.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr9.hg38_multianno.txt
##     ├── cellline.varscan.snp.chr9.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chrX.avinput
##     ├── cellline.varscan.snp.chrX.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chrX.hg38_multianno.txt
##     ├── cellline.varscan.snp.chrX.hg38_multianno.vcf
##     ├── cellline.varscan.snp.chrY.avinput
##     ├── cellline.varscan.snp.chrY.filtersor.hg38_multianno.txt
##     ├── cellline.varscan.snp.chrY.hg38_multianno.txt
##     └── cellline.varscan.snp.chrY.hg38_multianno.vcf
## 
## 10 directories, 445 files

重要输出结果 *clusters.varscan.snp_indel.hg38_multianno.xls:是经过barcode UMI vaf 人群频率等过滤的最终位点注释文件

*.snp_indel.alt_UMI.matrix:是经过最终过滤的位点在细胞中突变的UMI矩阵,行是突变,列是细胞。

*.snp_indel.all_UMI.matrix:是经过最终过滤的位点在细胞中覆盖的UMI矩阵,行是突变,列是细胞。

mutation_umap/*_snv_markers.xls结果如下所示:
每列的含义为:
SNV:突变位点

p_val:fisher检验的p值

ident1_cover:目标cluster/celltype中有多少细胞覆盖到了这个突变位点但是没发生突变

ident1_mut:目标cluster/celltype中有多少细胞带有这个突变

ident2_cover: 非目标cluster/celltype中有多少细胞覆盖到了这个突变位点但是没发生突变

ident2_mut:非目标cluster/celltype中有多少细胞带有这个突变

cluster:目标细胞类型

5.3.4 Seurat再处理及可视化

library(Seurat)
# 读取处理后的rds文件
scFAST <- readRDS('cell_line_mutout/mutation_umap/cellline_add_snv.rds')

# 与原来一样是一个Seurat对象,可以查看一下细胞类型:
DimPlot(scFAST)

# 比输入的rds文件多出了几列metadata:  
colnames(scFAST@meta.data)
##  [1] "orig.ident"       "nCount_RNA"       "nFeature_RNA"     "percent.mt"      
##  [5] "RNA_snn_res.0.5"  "seurat_clusters"  "celltype"         "Sample"          
##  [9] "nCount_SNV_all"   "nFeature_SNV_all" "nCount_SNV"       "nFeature_SNV"    
## [13] "CellType"         "tmp_mut"
# 例如nFeature_SNV记录了每个细胞发生SNV的基因数:
FeaturePlot(scFAST,features = 'nFeature_SNV',label = T)

# 记录snp信息的矩阵已添加在Seurat的矩阵中:
snp_matrix <- scFAST@assays$SNV_all@counts

# 这是一个列名为细胞名,行名为突变类型的矩阵:
snp_matrix[1:4,1:4]
## 4 x 4 sparse Matrix of class "dgCMatrix"
##                         CAGGCCAGCTCACAGCC CCGGGTATACGAAGTCC GTGTGGCGCTGTACTAC
## MRPL20:chr1-1402212:G>C                 .                 .                 .
## ATAD3C:chr1-1459164:A>G                 .                 .                 .
## ATAD3C:chr1-1459173:G>A                 .                 .                 .
## CDK11A:chr1-1721654:A>G                 .                 .                 .
##                         TCAGCAACGATCCGCGA
## MRPL20:chr1-1402212:G>C                 .
## ATAD3C:chr1-1459164:A>G                 .
## ATAD3C:chr1-1459173:G>A                 .
## CDK11A:chr1-1721654:A>G                 .
# 转换数据格式
library(dplyr)
snp_matrix <- as.matrix(snp_matrix) %>% t()

# 查看所有细胞中突变数量最多的三个类型:
apply(snp_matrix, 2, function(x){sum(x)}) %>% sort(decreasing = T)%>% .[1:3]
##   HMGA1:chr6-34243515:->A EGR1:chr5-138465944:CAG>-  AKR1C2:chr10-4995430:->T 
##                      5058                      3007                      2918
# 可视化突变:
VlnPlot(scFAST,features = 'HMGA1:chr6-34243515:->A',assay = 'SNV_all')

DefaultAssay(scFAST) <- 'SNV_all'
FeaturePlot(scFAST,features = 'HMGA1:chr6-34243515:->A')

# 如果上述不够直观,可用突变发生的堆积柱状图展示:
# 统计突变数量的比例:
cell.prop<-as.data.frame(prop.table(table(scFAST@assays$SNV_all@counts['HMGA1:chr6-34243515:->A',], scFAST$CellType)))
colnames(cell.prop)<-c("SNP_Number","Celltype","proportion")
head(cell.prop)
##   SNP_Number   Celltype   proportion
## 1          0 Celltype_A 0.1991576414
## 2          1 Celltype_A 0.0878459687
## 3          2 Celltype_A 0.0238668271
## 4          3 Celltype_A 0.0066185319
## 5          4 Celltype_A 0.0018050542
## 6          5 Celltype_A 0.0004011231
# 可视化
library(ggplot2)
# 可以看出Celltype_B的突变数量略高一些
ggplot(cell.prop,aes(Celltype,proportion,fill=SNP_Number))+
geom_bar(stat="identity",position="fill")+
ggtitle("")+
theme_bw()+
theme(axis.ticks.length=unit(0.5,'cm'))+
guides(fill=guide_legend(title=NULL))+
  theme( axis.text.x.bottom = element_text(angle = 45,hjust = 1,vjust = 1))+
  ggtitle('HMGA1:chr6-34243515:->A')

更多教程,敬请期待!

详情与更多动态请点击

最后、如果以上内容对你有帮助,欢迎在文章的Acknowledgement中加上这一段:

Since Biomamba and his wechat public account team produce bioinformatics tutorials and share code with annotation, we thank Biomamba for their guidance in bioinformatics and data analysis for the current study. 欢迎在发文/毕业时向我们分享你的喜悦~

LS0tCnRpdGxlOiAic2NGQVNU5a2m5Lmg5omL5YaMIgphdXRob3I6ICJCaW9tYW1iYSIKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6IG9wZW5pbnRybzo6bGFiX3JlcG9ydAotLS0KCiAgCiMg6Zu244CB5qyi6L+O5YWz5rOoKipCaW9tYW1iYSDnlJ/kv6Hln7rlnLAqKgrmnKzkurrkuLrlnKjor7vljZrlo6vnoJTnqbbnlJ/vvIzmraTlhazkvJflj7fml6jlnKjliIbkuqsqKueUn+S/oeefpeivhioq5Y+K56eR56CU57uP6aqM5LiO5L2T5Lya77yM55uu5YmN5ZyoQuermeeahOWQjOWQjei0puWPt+S4reWPkeW4g+eahFsqKuaJi+aKiuaJi+aVmeS9oOWBmuWNlee7huiDnua1i+W6j+aVsOaNruWIhuaekCoq57O75YiX6KeG6aKR54K55Ye76YeP5bey57uP6LaF6L+HMTlXXShodHRwczovL3d3dy5iaWxpYmlsaS5jb20vdmlkZW8vQlYxUzQ0eTFiNzZaLz92ZF9zb3VyY2U9NjMzNTM1NmEwZDM2MzFhZDQ3NmI3YzdkZTgzODkyZGIp44CC5ZCM5ZCN5b6u5L+h5YWs5LyX5Y+35oul5pyJ6LaF6L+H5LiJ5LiH55qE5YWz5rOo55So5oi35Lul5Y+K6LaF6L+H55m+5LiH55qE6K6/6Zeu6YeP77yM5qyi6L+O5ZCE5L2N5ZCM5a2m44CB6ICB5biI5LiO5LiT5a6255qE5om56K+E5oyH5q2j77yM5Lmf5qyi6L+O5ZCE55WM5Lq65aOr55qE5ZCI5L2c5LiO5Lqk5rWB44CCCiFbXShybWRfaW1hZ2UvUm1hcmtkb3du5byA5aS0MjAyMy5wbmcpICAKICAKICAKIyDkuIDjgIFzY0ZBU1Tnu6rorrogIAogIArop4bpopHmlZnnqIvvvJpb54K55Ye76Lez6L2sXShodHRwczovL3d3dy5iaWxpYmlsaS5jb20vdmlkZW8vQlYxRjk0eTE4NzlqLz92ZF9zb3VyY2U9NjMzNTM1NmEwZDM2MzFhZDQ3NmI3YzdkZTgzODkyZGIpICAKICAKIyMgMS4xICDlhpnlnKjliY3pnaIK5Y2V57uG6IOe55qE6K665paH5oiR5Lus5LuL57uN6L+H5b6I5aSa77yM5aSn5a625Y+v5Lul5YmN5b6A5ZCI6ZuG5p+l55yL5pu05aSa5YaF5a6577yaW+aWh+eMrumAn+mAkl0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL21wL2FwcG1zZ2FsYnVtP19fYml6PU16QXdNekl6T1RrNU9RPT0mYWN0aW9uPWdldGFsYnVtJmFsYnVtX2lkPTI4MDI0NjM0MzEzNTc2NjExODQmc2NlbmU9MTczJmZyb21fbXNnaWQ9MjI0NzQ5ODU5NyZmcm9tX2l0ZW1pZHg9MSZjb3VudD0zJm5vbGFzdHJlYWQ9MSZ1aW49JmtleT0mZGV2aWNldHlwZT1XaW5kb3dzKzExK3g2NCZ2ZXJzaW9uPTYzMDkwNjIxJmxhbmc9emhfQ04mYXNjZW5lPTEp44CC5q2k5aSE5oiR5Lus6ZyA6KaB5ZCR5aSn5a625LuL57uN5LiA5Liq5Y2V57uG6IOe57uE5a2m5paw5oqA5pyv77yM6K+l5paH5LqOM+aciDIz5Y+35Y+R5biD5Zyo6aKE5Y2w5pys77yM6aKY5Li6IkhpZ2ggdGhyb3VnaHB1dCBkZXRlY3Rpb24gb2YgdmFyaWF0aW9uIGluIHNpbmdsZS1jZWxsIHdob2xlIHRyYW5zY3JpcHRvbWUgdGhyb3VnaCBzdHJlYW1saW5lZCBzY0ZBU1Qtc2VxIueahOaWh+eroOOAgui/memhueaKgOacryhzaW5nbGUgY2VsbCBGdWxsLWxlbmd0aCBSTkEgU2VxdWVuY2UsICoqc2NGQVNULXNlcSoqKeOAguivpeWNlee7huiDnuW5s+WPsOeUsSoq5a+75Zug55Sf54mpKirljobml7bkuInlubTlvIDlj5HlrozmiJDvvIzlj6/ku6XlnKhgOGhg5YaF5bu65bqT5p6E5bu657qmYDEyLDAwMGDkuKrnu4bog57nmoTlhajplb9STkHmloflupPjgILov5nmmK/kuIDnp43kvp3miZjkuo7pmo/mnLrlvJXnianlu7rlupPnrZbnlaXnmoTljZXnu4bog57lhajmlrDmioDmnK/jgILkvKDnu5/nmoRgMydg56uv5bu65bqT562W55Wl55Sx5LqO5YW26YCa6L+HYG9saWdvLWRUYOWOu+aNleiOt+i9rOW9leacrOeahGBwb2x5QWDlsL7vvIzlm6DmraTlr7npnZ5wb2x5QeWwvueahGBsbmNSTkFg44CBYHJSTkFg44CBYGNpcmNSTkFg44CBYGVSTkFg562JUk5B5YiG5a2Q5pWP5oSf5oCn5LiN6Laz44CC5Zug5q2k77yM55u46L6D5LqOM+KAmOerr+etlueVpeadpeivtO+8jGBzY0ZBU1Qtc2VxYOWIqeeUqOmaj+acuuW8leeJqei/m+ihjOmaj+acuuaNleiOt++8jOmBv+WFjXBvbHkgQeWwvueahOS7i+WFpe+8jOS9v+W+l+WFtuWcqOajgOa1i2DpnZ5wb2x5QWDnmoTovazlvZXmnKzjgIHopobnm5Yq5pu06ZW/55qE6L2s5b2V5pysKumVv+W6puWSjOmJtOWumuabtOWkmueahCrliarmjqXkvY3ngrkq5pa56Z2i5YW35pyJ5piO5pi+55qE5LyY5Yq/77yI6L+Z5oSP5ZGz552A6IO95aSf5pu05rex5YWl55qE5oyW5o6Y6L2s5b2V5pys5bGC6Z2i55qE5L+h5oGv77yJ44CC5a+55LqO57uG6IOe5YiG5YyW44CB5ouf5pe25bqP5YiG5p6Q44CBUk5B5Yqo5Yqb5a2m5YiG5p6Q562J6L+b6Zi25YiG5p6Q5YaF5a655p2l6K+077yMc2NGQVNULXNlceS5n+i+gzMn56uv562W55Wl6ICM6KiA5YW35pyJ5pu05aW955qE5pWI5p6c44CC5ZyoY0ROQee7iOaWh+W6k+eahOWfuuehgOS4iuS5n+WPr+S7peeBtea0u+mAieaLqSpjRE5B5bei5byP5omp5aKeKuaIlua1i+W6j+aWh+W6k+eahOaOoumSiOaNleiOt++8jOS7juiAjOmSiOWvueS4jeWQjOeahOeglOeptuebrueahOWvjOmbhuWvueW6lOeahOW6j+WIl+OAggogIAogIAojIyAxLjIg5Li76KaB57uT5p6cICAKIyMjIDEuMi4xIOW7uuW6k+a1geeoi+S4jueJueW+gSAgCuWFt+S9k+W7uuW6k+eahOWunumqjOa1geeoi+eahOWPl+S8l+avlOi+g+Wwke+8jOaEn+WFtOi2o+eahOWQjOWtpuWPr+S7pemYheivu+S4gOS4i+WOn+aWh+eahG1ldGhvZHMoaHR0cHM6Ly93d3cuYmlvcnhpdi5vcmcvY29udGVudC8xMC4xMTAxLzIwMjMuMDMuMTkuNTMzMzgydjEuZnVsbCnjgILlpKfoh7TmnaXor7TvvIzkuI7lpKflrrbnhp/mgonnmoRgMTBYIEdlbm9taWNzYOS4gOagt++8jOWNlee7huiDnuaCrOa2suS8muiiq+WItuWkh+aIkOS4gOS4qioq5rK55YyF5rC0KirnmoTkvZPns7vvvIzkvYZgc2NGQVNULXNlcWDkvb/nlKjpmo/mnLrlvJXnianogIzpnZ4zJ+err+eahG9saWdvLWRU5Y675o2V6I63Uk5B5YiG5a2Q5Y+C5LiO6YCG6L2s5b2V77yM5LyY5YyW5ZCO55qE6ZqP5py65byV54mpYDEyTjdGYOiDveWkn+aNleiOt+WIsOabtOWkmueahOi9rOW9leacrOS4jlJOQeWIhuWtkO+8miAgCiFbXShybWRfaW1hZ2UvaW1hZ2VfMS5qcGcpICAKICAgIArku6XlvoDnmoRgNSdg562W55Wl5ZyoYEJ1bGsgUk5BLVNlcWDkuK3ooqvpopHnuYHkvb/nlKjvvIzlm6DkuLpCdWxrIFJOQS1TZXHlj6/ku6Xlvojmlrnkvr/nmoTkvb/nlKhgUk5hc2UgSGDpmY3op6NgclJOQWDvvIzkvYblnKjljZXnu4bog57lu7rlupPkuK3vvIzov5nlsLHmmK/kuKrpmr7popjjgILlm6DmraRgc2NGQVNULXNlcWDkvb/nlKjlnKjkvb/nlKjpmo/mnLrlvJXniannmoTlkIzml7bliqDlhaXkuobkuIDnp40i6Zi75patIuaOoumSiO+8jOiDveWkn+eJueW8guaAp+eahCrpmLvmlq0qYHJSTkFg5LiOYG10Uk5BYOeahOmAhui9rOW9leS7juiAjOWkp+Wkp+mZjeS9juaWh+W6k+S4rWByUk5BKDMwJeKGkjEwJSlg5LiOYG10Uk5BKDYl4oaSMSUpYOeahOWNoOavlO+8miAgCiFbXShybWRfaW1hZ2UvaW1hZ2VfMi5qcGcpICAKICAKYHNjRkFTVC1zZXFg55qE5rWB56iL56S65oSP5Zu+5aaC5LiL5omA56S677yaICAKIVtdKHJtZF9pbWFnZS9pbWFnZV8zLmpwZykgIAogIAojIyMgMS4yLjIgYHNjRkFTVC1zZXFg5LiOYDMnYOetlueVpeeahGBzY1JOQS1zZXFg5LiA6Ie05oCn6K+E5Lu3ICAKICAK5L2c6ICF5a+5YEs1NjJg44CBYEE1NDlg44CBYEhDQzgyN2Dmt7flkIjnu4bog57ns7vjgIHkubPohbrnmYzjgIHog7botKjmr43nu4bog57nmKTjgIHlsI/pvKDog7DohbrnmYzjgIHlpJblkajooYDnrYnmoLfmnKzliIbliKvov5vooYzkuoZgc2NGQVNULXNlcWDkuI5gMydg562W55Wl55qEYHNjUk5BLXNlcWDnmoTmtYvluo/vvIzkuI7kuIrmlofooajov7DnmoTkuIDmoLfvvIxgc2NGQVNULXNlcWDojrflvpfnmoRgbXRSTkFg5LiOYHJSTkFg5pWw6YeP6YO95pu05bCRKOWbvkEp44CC5LiO5q2k5ZCM5pe277yMYHNjRkFTVC1zZXFg55qEYHJlYWRzYOWIhuW4g+WcqOWfuuWboOS4reeahOS9jee9ruabtOWKoOeahOWdh+WMgO+8jOiAjOS4jeaYr+WDj2AzJ2DmtYvluo/pgqPoiKzkuLvopoHpm4bkuK3lnKhgUk5BYOWIhuWtkOeahGAzJ2Dnq68o5Zu+QinvvJvov5nmmL7nhLbmm7TmnInliKnkuo4q6L2s5b2V5pys57uT5p6EKueahOeglOeptuOAguWcqOWfuuWboOWumumHj+aWuemdou+8jOebuOWFs+aAp+WIhuaekCjlm75EKeOAgemZjee7tOWIhuaekCjlm75FKeS4jue7huiDnuavlOS+i+WIhuaekCjlm75GKeWdh+aYvuekumBzY0ZBU1Qtc2VxYOS4jmAzJyBzY1JOQS1zZXFg5YW35pyJ5p6B5Li655u45Ly855qE6KGo6L6+55+p6Zi177ybYGluZmVyY252YOWIhuaekOaWuemdouS4pOenjeaKgOacr+eahOS4gOiHtOaAp+aegemrmCjlm75HKeOAguS9huWcqOi9rOW9leacrOeahOaNleiOt+aVsOmHj+S4iuiAjOiogO+8jOWcqOWvueW6lOagt+acrOS4rWBzY0ZBU1Qtc2VxYOS+neaXp+aYr+abtOiDnOS4gOetuSjlm75DKeOAggohW10ocm1kX2ltYWdlL2ltYWdlXzQuanBnKSAgCiAgCiAgCiMjIyAxLjIuMyBgc2NGQVNULXNlcWDkuI7nm67nmoTljLrln5/lr4zpm4bmioDmnK/nmoTnu5PlkIgK5pyf5pyb566A5Y2V55qE6YCa6L+H5aKe5aSn5rWL5bqP6YeP5p2l5aKe5aSn55uu55qE5Yy65Z+f55qEYHJlYWRzYOaVsOaYr+S4jeWIh+WunumZheeahO+8jOWboOatpOmAmui/h+eUn+eJqee0oOaOoumSiOaIlmDlt6LlvI9QQ1Jg5Y+v5Lul5o+Q5Y2H55uu55qE5Yy65Z+f55qE5o2V6I635pWI546H77yM5L6L5aaCYEVHRlIgMTlkZWxg5Y+v6YCa6L+H55Sf54mp57Sg5o6i6ZKIKuaPkOWNh+i/keS4gOWAjSoo5Zu+QSnjgIHlt6LlvI9QQ1LkuZ/lj6/ku6XlnKjlsJHph4/nmoTnu4bog57kuK3mjZXojrfliLDmm7TlpJrlr7nlupTnmoTovazlvZXmnKwo5Zu+QinjgIJgc2NGQVNULXNlcWDkuI7nm67nmoTljLrln5/lr4zpm4bnrZbnlaXnmoTnu5PlkIjlj6/ku6XnlKjmnIDkvY7nmoTmtYvluo/miJDmnKzojrflj5bmm7TlpJrnmoTnm67nmoTkv6Hmga/jgIIgIAogIAohW10ocm1kX2ltYWdlL2ltYWdlXzcuanBnKSAgCiAgCiMjIDEuMyDlsI/nu5MgIArkvZzkuLrlhajluo/liJfnmoTkuqflk4HvvIznm7jovoPkuo4zJ+WNlee7huiDnua1i+W6j+iAjOiogO+8jOWFtuacieS7peS4i+S8mOWKv++8miAgCiFbXShybWRfaW1hZ2Uv5YWo5bqP5YiX5a+55q+ULmpwZykgIAogIArkvZzkuLrkuIDmrL7lr7nmoIdgU01BUlQtU2VxMmDnmoTlm73kuqfmtYvluo/mioDmnK/vvIxgc2NGQVNULXNlcWDnmoTooajnjrDljYHliIbkvJjnp4DjgIIgIApgc2NGQVNULXNlcWDkuI5gU01BUlQtU2VxMmDlr7nmr5Tlj6/op4HvvJogIAohW10ocm1kX2ltYWdlL3NtYXJ05a+55q+ULmpwZykgIAogIAogIAoKICAK5b2T54S277yMYHNjRkFTVC1zZXFg5Lmf5bm25LiN5piv5rKh5pyJ57y654K577yM5YW25a+55LqO5L2O5Liw5bqm55qE6L2s5b2V5pys5o2V6I635pWI546H56iz5a6a5oCn5LiN6Laz44CC5Li65a+75Zug55Sf54mp54K56LWe55qE5ZCM5pe25Lmf5pyf5b6F5Y2V57uG6IOe6aKG5Z+f5Ye6546w6LaK5p2l6LaK5aSa5pyJ56ue5LqJ5Yqb55qE5Zu95Lqn5bmz5Y+w77yBCiAgCiAgCiMg5LqM44CB5YeG5aSH5bel5L2cICAgICAgCiMjIDIuMSBgU2Vla1NvdWzCrlRvb2xzYCAgCiMjIyAyLjEuMSDnroDku4sgIAogIApgU2Vla1NvdWzCriBUb29sc2DmmK/lr7vlm6Doh6rkuLvnoJTlj5HnmoTljZXnu4bog57mlbDmja7oh6rliqjljJbotKjmjqfliIbmnpDova/ku7bvvIzljIXmi6znu4bog57moIfnrb7mj5Dlj5bjgIHmtYvluo/mlbDmja7otKjmjqfjgIHlj4LogIPln7rlm6Dnu4Tmr5Tlr7njgIHln7rlm6Dlrprph4/ku6Xlj4rooajovr7nn6npmLXmnoTlu7rnrYnmtYHnqIvjgILlhbzlrrnlr7vlm6DnlJ/nialgU2Vla09uZcKuIE1NYOOAgWBTZWVrT25lwq4gRERg5LiN5ZCM5Y2V57uG6IOe5oqA5pyv5bmz5Y+w5pWw5o2u77yM5a6e546w6auY5rC05bmz6LSo5o6n5YiG5p6Q44CCICAKICAKICAKIyMjIDIuMS4yIOaooeWdl+e7hOaIkCAgCiAgCuebruWJjeivpei9r+S7tuWMheWQq+S4ieS4quaooeWdlzogIAot77yIMe+8iXJuYeaooeWdlyAgCueUqOS6juivhuWIq+e7huiDnuagh+etvmBiYXJjb2RlYO+8jOavlOWvueWumumHj++8jOW+l+WIsOWPr+eUqOS6juS4i+a4uOWIhuaekOeahOe7huiDnuihqOi+vuefqemYte+8jOS5i+WQjui/m+ihjOe7huiDnuiBmuexu+WSjOW3ruW8guWIhuaekO+8jOivpeaooeWdl+S4jeS7heaUr+aMgWBTZWVrT25lYOezu+WIl+ivleWJguebkuS6p+WHuuaVsOaNru+8jOi/mOWPr+mAmui/h+WvuWBiYXJjb2RlYOeahOaPj+i/sO+8jOaUr+aMgeWkmuenjeiHquWumuS5ieiuvuiuoee7k+aehOOAgiAgCi3vvIgy77yJZmFzdOaooeWdlyAgCuivpeaooeWdl+S4k+mXqOmSiOWvuWBTZWVrT25lYOWFqOW6j+WIl+ivleWJguebkuS6p+WHuueahOaVsOaNru+8jOeUqOS6juWvueaVsOaNrui/m+ihjGBiYXJjb2RlYOaPkOWPlu+8jCoq5Y+M56uvKipgcmVhZHNg5q+U5a+577yM5a6a6YeP77yM5Lul5Y+K5YWo5bqP5YiX5pWw5o2u54m55pyJ55qE5oyH5qCH57uf6K6hICAKLe+8iDPvvIltdXTmqKHlnZcgIAror6XmqKHlnZfpkojlr7kqU2Vla09uZeWFqOW6j+WIlyooYHNjRkFTVEEtc2VxYCnmlbDmja7lj4pgcGFuZWxg5o2V6I635ZCO5pWw5o2u5Y+Y5byC5qOA5rWL5Y+K5Y+v6KeG5YyW5YiG5p6Q44CCICAKICAKICAKIyMjIDIuMS4zIOi9r+S7tuS8mOWKvyAgCjHjgIHngbXmlY/mo4DmtYvkvY5VTUnnu4bog57vvJrph4fnlKjpq5hVTUnpmIjlgLwrRW1wdHlEcm9wc+eahOaWueazleWIpOWumue7huiDnu+8myAgCjLjgIHmlK/mjIHlpJrlubPlj7DmlbDmja7liIbmnpDvvJrpgILphY3lr7vlm6Doh6rkuLvlubPlj7Dlj4oxMHgg562J5YW25LuW5bmz5Y+w5pWw5o2u77ybICAKM+OAgeWIhuaekOe7k+aenOagvOW8j+aUr+aMgeS4i+a4uOWkmuenjeW8gOa6kOi9r+S7tuOAgiAgCiAgCiMjIDIuMiDpooTlpIfnn6Xor4YgICAgCuS4uuS6huaXoOmanOeijeeahOWtpuS5oOacrOaVmeeoi++8jOW7uuiuruWFiOihjOWtpuS5oOS7peS4i+aVmeeoi++8miAgCiAgCiMjIyAyLjIuMSDljZXnu4bog57mlZnnqIvlhajmlLblvZUgIAogIApbQuermeinhumikV0oaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL3ZpZGVvL0JWMVM0NHkxYjc2Wi8pOuWFiOeci+S4gOmBjeinhumikeWGjeWOu+eci+aOqOmAgeaTjeS9nO+8jOW7uuiuruiHs+WwkSoq55yL5LiJ6YGNKiogIArku6XkuIvnmoTotYTmlpnpg73lj6/ku6XlnKjov5nph4zorqLpmIXvvJoKW+WNlee7huiDnuaVsOaNruWfuuehgOWIhuaekOWtpuS5oOaJi+WGjF0oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDkyMjk1JmlkeD0xJnNuPWQ0ZTgxNTg4YzBhYzI5MDY4NDljOGJjNDRkMDc5MjA5JmNoa3NtPTliM2M5Yjk3YWM0YjEyODFhYjQ2MmY4NjY1MzhmMDk2YmEyNDczYTNkMTQyNmEyN2Q4ZDk3Y2NjNjM2YmZkMDgxZTFiYTg5MzRkZmQmc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KQogIAojIyAxLiDljZXnu4bog57mtYvluo/ln7rnoYDmlbDmja7liIbmnpAqKuS/neWnhue6p+aVmeeoiyoq77yM5Luj56CB6YOo5YiG5pW055CG5Zyo5b6A5pyf5o6o6YCB5LmL5Lit77yaClvmiYvmiormiYvmlZnkvaDlgZrljZXnu4bog57mtYvluo/mlbDmja7liIbmnpDvvIjkuIDvvInigJTigJTnu6rorrpdKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTk3NzYmaWR4PTImc249N2ZjMjUwZDk0ZWQ4OGNmZDVlMjIyNGYwNzFiYjE3NDImY2hrc209OWIzY2I5NTBhYzRiMzA0NjdhMDgyNTI3NTQ3YjkxYWVjMTViN2QxZjQwZDQ0ZTM2Mjg5NGFlZGViNmE5OWUwMTQ1MThmYTVlNDc0MyZ0b2tlbj03Njc4NDI4NjMmbGFuZz16aF9DTiNyZCkgIApb5omL5oqK5omL5pWZ5L2g5YGa5Y2V57uG6IOe5rWL5bqP5pWw5o2u5YiG5p6Q77yI5LqM77yJ4oCU4oCU5ZCE57G75pWw5o2u57uT5p6E5LiO6K+75Y+W5pa55rOVXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDk5Nzk1JmlkeD0yJnNuPTY4ZTYyOThlYjQzNjMzYzcxOTM5YzE0NmQ5MDIzMGZmJmNoa3NtPTliM2NiOTQzYWM0YjMwNTVlMDk3MzlkNzdlMDM3ZDY3OWYzZDllYzY4NzgwZDFhYThjNTkyZjgwNmZjYzhkMjMyMmVhZWU3ODc1MmQmc2NlbmU9MTc4JmN1cl9hbGJ1bV9pZD0yOTIzNjk0ODUzMzc1Njg4NzA2I3JkKSAgClvmiYvmiormiYvmlZnkvaDlgZrljZXnu4bog57mtYvluo/mlbDmja7liIbmnpDvvIjkuInvvInigJTigJTljZXmoLfmnKzliIbmnpBdKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc1MDAwMTAmaWR4PTImc249MmY5ZmQxYjAxMDFkNTc5YmNkMjUwZmRjMjRlOThiZmMmY2hrc209OWIzY2I5YmFhYzRiMzBhYzZmMGNlMjhhNmRkMTA0NzBlNzNkMWUxZDZkZWZlY2U1NjM2OTM5YTMyYTZkYjliMmNjZTBmZjg2ODhlYiZzY2VuZT0xNzgmY3VyX2FsYnVtX2lkPTI5MjM2OTQ4NTMzNzU2ODg3MDYjcmQpICAKW+aJi+aKiuaJi+aVmeS9oOWBmuWNlee7huiDnua1i+W6j+aVsOaNruWIhuaekO+8iOWbm++8ieKAlOKAlOWkmuagt+acrOaVtOWQiF0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzUwMDExNyZpZHg9MiZzbj1jZWYwYjBhYmVjNmQ3M2E4YzI2MTU5ODBlZjY4YWVjMSZjaGtzbT05YjNjYjgwNWFjNGIzMTEzZmRjODIwYjljOTY2N2Y5NTU0YjJlMzlmOTBjNDViNTgwNjAyMWE0MTU2OThiMGE1MTQxYzUyMWM2NGRjJnNjZW5lPTE3OCZjdXJfYWxidW1faWQ9MjkyMzY5NDg1MzM3NTY4ODcwNiNyZCkgIApb5omL5oqK5omL5pWZ5L2g5YGa5Y2V57uG6IOe5rWL5bqP5pWw5o2u5YiG5p6Q77yI5LqU77yJ4oCU4oCU57uG6IOe57G75Z6L5rOo6YeKXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NTAwMTE3JmlkeD0yJnNuPWNlZjBiMGFiZWM2ZDczYThjMjYxNTk4MGVmNjhhZWMxJmNoa3NtPTliM2NiODA1YWM0YjMxMTNmZGM4MjBiOWM5NjY3Zjk1NTRiMmUzOWY5MGM0NWI1ODA2MDIxYTQxNTY5OGIwYTUxNDFjNTIxYzY0ZGMmc2NlbmU9MTc4JmN1cl9hbGJ1bV9pZD0yOTIzNjk0ODUzMzc1Njg4NzA2I3JkKSAgClvmiYvmiormiYvmlZnkvaDlgZrljZXnu4bog57mtYvluo/mlbDmja7liIbmnpDvvIjlha3vvInigJTigJTnu4Tpl7Tlt67lvILliIbmnpDlj4rlj6/op4bljJZdKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc1MDAxMTcmaWR4PTImc249Y2VmMGIwYWJlYzZkNzNhOGMyNjE1OTgwZWY2OGFlYzEmY2hrc209OWIzY2I4MDVhYzRiMzExM2ZkYzgyMGI5Yzk2NjdmOTU1NGIyZTM5ZjkwYzQ1YjU4MDYwMjFhNDE1Njk4YjBhNTE0MWM1MjFjNjRkYyZzY2VuZT0xNzgmY3VyX2FsYnVtX2lkPTI5MjM2OTQ4NTMzNzU2ODg3MDYjcmQpICAKW+aJi+aKiuaJi+aVmeS9oOWBmuWNlee7huiDnua1i+W6j+aVsOaNruWIhuaekO+8iOS4g++8ieKAlOKAlOWfuuWboOmbhuWvjOmbhuWIhuaekF0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzUwMDM1NyZpZHg9MiZzbj00MDAzNDA3OWI3NzFjNDc4YjQ4MmU4NDllZDRiMjE2YyZjaGtzbT05YjNjYmIxNWFjNGIzMjAzZDUxN2ZmNzEwNzNhYjA1MjBmZTE0NGJjMTA4YjdhMjZmNmIxN2U4OGZiNjNhNzhjNTc3Nzk0NjYxOGUzJnNjZW5lPTE3OCZjdXJfYWxidW1faWQ9MjkyMzY5NDg1MzM3NTY4ODcwNiNyZCkgIAogIAogIAogIAojIyAyLiDkuIrmuLgqKmZhc3RxKirmlofku7blpITnkIbvvJogIApb5Y2V57uG6IOe5YiG5p6Q55qE5pyA5LiK5ri44oCU4oCU5aSE55CGRmFzdHHmlofku7bvvJpjZWxscmFuZ2VyXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDg0OTIzJmlkeD0xJnNuPWI1ODc2YWYxNGZiZWU2OGQxZTlkYjRiMGY3MGNkMWM4JmNoa3NtPTliM2Y3Y2FiYWM0OGY1YmRiM2FhYzdkMjAyMDFkODkxMjFhODM3MjBiNDFhMTAwMTc1NjRmZWRiYjhjNGExM2RmMGRhOTJkYWZmZDcmc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgClvljZXnu4bog57liIbmnpDnmoTmnIDkuIrmuLjigJTigJTlpITnkIZGYXN0ceaWh+S7tu+8mmRyb3BzZXFSdW5uZXJdKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0ODQ5MzcmaWR4PTEmc249NGZlMWZhNTE4MjAyYmRhZjQ2MmJiOTNhMjYxNGVkMzImY2hrc209OWIzZjdmNTlhYzQ4ZjY0ZmFmYWYzNGJhYzJjODBmMDZkM2E4NmI2YTg0Y2NmMTI1NjZjN2VhYzI1YmI3MWM3ZWRkM2Q3NDAwNGNmNyZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW+acieWlluaPkOmXrizov5nkuKpzbWFydC1TZXEy5pWw5o2u5a6e5oiY55qE5q+U5a+5546H5Li65L2V5aaC5q2k5L2O77yfXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDg4NDQxJmlkeD0xJnNuPWRhYzRlZmM0YTg5MDFhNGFiYjEzM2Y5ZTVjODA4MzFlJmNoa3NtPTliM2Y2YWU5YWM0OGUzZmZmNWE3MTEyYTAxMjc3MjY0NDFjY2I5ZGMyYzMzNjlkNGEwZmU5OGEyMTIwZGY5OTE5NTRmZjA1Njc3MzImc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgCiAgCiAgCiAgCiMjIDMuICoq57uG6IOe6YCa6K6vKiogIApb6Lez6L2sQuerme+8jOi/nuaSreabtOaWueS+v10oaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL3ZpZGVvL0JWMUFiNHkxVzdxeD9wPTEpICAKKirlvoDmnJ/mjqjpgIEqKiAgClvjgIrnu4bog57pgJrorq/jgItDZWxsQ2hhdOWtpuS5oOaJi+WGjF0oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NTAxNzM1JmlkeD0yJnNuPTM1ZmM3OTI5NjE1MDdmNGFlMWNiYWUzYTI4ODJmYmE2JmNoa3NtPTliM2NiZWY3YWM0YjM3ZTE0MTdkNDEwOGM4YmQzNzhjNjhjMzkwNzQzMWRkZmM1MmFkMzdjOTE2ZTg1NjQ5YmI0NTBkNzYxYThlMTkmc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgClvjgIrnu4bog57pgJrorq/jgIsxLuamguiuul0oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NTAxMjgyJmlkeD0yJnNuPWNkMzdlYTgwZTBiOTJmNWJmYmM5OGVhMjg2ZTM2M2RhJmNoa3NtPTliM2NiY2IyYWM0YjM1YTQyNThkMjFmZTAwMzM3NDc5NTYxOWZjMjM1NjM3NmViYmU0ZmY2NDAyMzNmNGI0YzZlM2UzZWFkNDEzNzAmc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgClvjgIrnu4bog57pgJrorq/jgIsyLjFDZWxsQ2hhdOWfuuehgOWIhuaekOaVmeeoi10oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NTAxMjk2JmlkeD0yJnNuPWZiM2UyNTJkOTVlZThiNTBjZDQ0NmU3MTMzNWIxYWEwJmNoa3NtPTliM2NiY2EwYWM0YjM1YjYyMWI0ZjUxZDJjM2ExMzBmMDA0NjFmYWVlZmYwNjczOTYyMjJjMmZjMmVlYjUzZjM1NDQ2NjRkN2Q5YmMmc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgClvjgIrnu4bog57pgJrorq/jgIsyLjJDZWxsQ2hhdOWkmue7hOWIq+WIhuaekF0oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NTAxNTIzJmlkeD0yJnNuPTZmYTgwM2YyNTZjMmUwYjk0NWY5M2FlN2Q4MjQ1ZjUwJmNoa3NtPTliM2NiZjgzYWM0YjM2OTViNTg3ZTk4MTc4NDBmNDE5MTA0Yzg2ODBmNWVmMDhlZTM5YWExNDliNzk4NTJmNDhiMTc5ZjY4ZTMzOTcmc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgICAKCiMjIDQuICoq6L2s5b2V5Zug5a2Q6aKE5rWLKiogIApbU0NFTklD5Y2V57uG6IOe6L2s5b2V5Zug5a2Q6aKE5rWLfDEu57uq6K66XShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NTAwMDk4JmlkeD0xJnNuPThjMzEyNDFiZDI1OWUzMDNhNmFjM2M5NzQwZjI5OGQ5JmNoa3NtPTliM2NiODEyYWM0YjMxMDQ2ZmQyOThjOGVlNWYwYmMwZGU0NDVkZjYyYjIzNGJkOTM0YzM0Y2E2NTVlNjFkZTNkYTU0ZDgxZTIwNTMmc2NlbmU9MTc4JmN1cl9hbGJ1bV9pZD0yOTMzODg1MDc1NzAyOTcyNDE4I3JkKSAgCltTQ0VOSUPljZXnu4bog57ovazlvZXlm6DlrZDpooTmtYt8Mi7lrabkuaDmiYvlhoxdKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc1MDA0MzkmaWR4PTEmc249ZDZiNDg3NGE4MzUyZjViN2E0MTY1NjI5YzAzMDU4Y2UmY2hrc209OWIzY2JiYzdhYzRiMzJkMTU4ZmQzYzVjMmYxNTVjNTRjODkyZDQwZWFhZTM3MTg0MDk5MzZmYzMxOWY2OTcwNWRhMzJiYWRmNzlkNiZzY2VuZT0xNzgmY3VyX2FsYnVtX2lkPTI5MzM4ODUwNzU3MDI5NzI0MTgjcmQpICAKW1NDRU5JQ+WNlee7huiDnui9rOW9leWboOWtkOmihOa1i3wzLui9r+S7tuWuieijheS4juaVsOaNruWHhuWkh10oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzUwMDYzMSZpZHg9MSZzbj01ZDczZGI0ZGNjNzRiNjZkZTA3ZGVlOWRiOTEwYmI4MyZjaGtzbT05YjNjYmEwN2FjNGIzMzExZDE4MjBiYjMwNTc3OGFlYTcwNzI5NGYxOWZkNmZmMjYzMWNkMDAzZGE4MGJkY2ZmOGY4YmM4ZWQzNGRlJnNjZW5lPTE3OCZjdXJfYWxidW1faWQ9MjkzMzg4NTA3NTcwMjk3MjQxOCNyZCkgICAgICAgIApbU0NFTklD5Y2V57uG6IOe6L2s5b2V5Zug5a2Q6aKE5rWLfDQu57K+566A54mI5rWB56iLXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NTAxMjYwJmlkeD0xJnNuPWYxZTJhMTY1NTk5ZTc1M2UyOTU5YWFkN2M4YTI5OGNiJmNoa3NtPTliM2NiYzljYWM0YjM1OGE5NDk5NjU0YTJmOTVmYTkwMTAzMDllZTRmNDA4ZWY4YjFmMzFjZWIxYTBmMjYzY2UyMmU4YjUxMWM0MzAmc2NlbmU9MTc4JmN1cl9hbGJ1bV9pZD0yOTMzODg1MDc1NzAyOTcyNDE4I3JkKSAgICAgICAgICAgICAgCltTQ0VOSUPljZXnu4bog57ovazlvZXlm6DlrZDpooTmtYt8NS5zdGVwMStzdGVwMuaehOW7uuWFseihqOi+vue9kee7nOS4jnJlZ3Vsb25dKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc1MDE2OTImaWR4PTEmc249M2Y3ZTI2M2E5Mzk0MmFkMDNmYWExYmE1Zjg2OTRlYzQmY2hrc209OWIzY2JlMmNhYzRiMzczYWY5ZGI3NGE1MGZmYjA4YTliOGEzYjk1OGZjNjM4NWM5MzczODVmMGY3MzIzYmM5MzVjZGIwZmU1Mjc1YyZzY2VuZT0xNzgmY3VyX2FsYnVtX2lkPTI5MzM4ODUwNzU3MDI5NzI0MTgjcmQpICAgICAgICAgICAgICAgICAgICAKW1NDRU5JQ+WNlee7huiDnui9rOW9leWboOWtkOmihOa1i3w2LlN0ZXAzIOWIqeeUqEFVQ2VsbOWvuVJlZ3Vsb27or4TliIZdKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc1MDE5ODkmaWR4PTEmc249MjcwMGJmNzc5ZDdkMjYxYTRkNzUxZDE2MzVmZGNlMmMmY2hrc209OWIzY2IxZjVhYzRiMzhlMzAxNDQ3NjI0MmZlOTU2Y2Y1MTBjYzQ1YjlmNGNlZjg2MDcwYWY4MDk0ZmQ1Zjg4NGY5ZDVjM2EzMzYzZiZzY2VuZT0xNzgmY3VyX2FsYnVtX2lkPTI5MzM4ODUwNzU3MDI5NzI0MTgjcmQpICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIyMgNS4gKirmi5/ml7bluo/liIbmnpAqKgpbQuermei/nue7reaSreaUvui1t+adpeavlOi+g+aWueS+v10oaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL3ZpZGVvL0JWMWJyNHkxeDdIZj9wPTEpICAKKirlvoDmnJ/mjqjpgIEqKiAgClvljZXnu4bog57mtYvluo/mlbDmja7ov5vpmLbliIbmnpDigJTjgIrmi5/ml7bluo/liIbmnpDjgIsxLuamguiuul0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ4NjU1MyZpZHg9MSZzbj1iNjg5ZWM5NjJhMTdjYTFhMWFkYTI5YWU4ZmY4YzAxOSZjaGtzbT05YjNmNzUwOWFjNDhmYzFmMGY4MWUyODhkZThmMTVjODY1NDgyMTVhMWNkOWQ1Yzc0MGRjNjNmMjQyMTM3MWQxMzg5MDM5OGFiMWRmJnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApb5Y2V57uG6IOe5rWL5bqP5pWw5o2u6L+b6Zi25YiG5p6Q4oCU44CK5ouf5pe25bqP5YiG5p6Q44CLMi5tb25vY2xl5qaC6K66XShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0ODcwMDEmaWR4PTEmc249MzI5MTI5ZTc1ZjcwM2UzZjMzMmU3NmFmOWM2Njg3MWUmY2hrc209OWIzZjc3NDlhYzQ4ZmU1ZjA4MTI0OGMyYTQ4YzU2Njg1ZTM5MTUwMTUwMzZjNzNmOGY2N2VjM2U2YWNjMjQ2ZGRmODE1ZGFlZGIyMiZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW+WNlee7huiDnua1i+W6j+aVsOaNrui/m+mYtuWIhuaekOKAlOOAiuaLn+aXtuW6j+WIhuaekOOAizMubW9ub2NsZTLlrp7mk43vvJrlrozmlbTniYhdKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTc3MzAmaWR4PTImc249OTMwZGMwZTI3NjIxOWQ3MGM5MzdlOTQzMTE5Mzg4ZmYmY2hrc209OWIzYzgxNTJhYzRiMDg0NDZkNDU3Y2VmM2VkZTRhNGExN2MwZWJhY2FlYzBjMzZlZmU3ZDdjODcwNmZiNGEzZDYyMjIyZDcwMmVlNSZzY2VuZT0xNzgmY3VyX2FsYnVtX2lkPTI4MjA3OTQ4ODA5NDcxNTkwNDMjcmQpICAKW+WNlee7huiDnua1i+W6j+aVsOaNrui/m+mYtuWIhuaekOKAlOOAiuaLn+aXtuW6j+WIhuaekOOAizQu5Yid6K+GbW9ub2NsZTNdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ4OTA0NCZpZHg9MSZzbj0wNjFkYmZjMzRkMjAwYjczYTgyMjdkMGJiMjhhMWQyNyZjaGtzbT05YjNmNmY0NGFjNDhlNjUyNTFmN2U1ZWNjZTg0NjM3YzA1ZDUwZWNiOTI3NjllODM4NmYyMjFmOGU3YjliZmViNzE5MjMyZGVmODYzJnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApb5Y2V57uG6IOe5rWL5bqP5pWw5o2u6L+b6Zi25YiG5p6Q4oCU44CK5ouf5pe25bqP5YiG5p6Q44CLNS5tb25vY2xlM+eahOmZjee7tOOAgeWIhue+pOOAgeiBmuexu10oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDg5NDk0JmlkeD0xJnNuPTQ0ZjBhNDQ4NTdjMTJmY2Y5YTFhYjg0ZTRmMmNiZWJmJmNoa3NtPTliM2Y2ZTg2YWM0OGU3OTAyNjMyMWRlMmZkY2E4MWExMzlkMTA0ZDY1NTg4NGZmZTg3YTY4ZTBhMTU1MWRkZmZhNWFmNzkxOWQxOWUmc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgClvljZXnu4bog57mtYvluo/mlbDmja7ov5vpmLbliIbmnpDigJTjgIrmi5/ml7bluo/liIbmnpDjgIs2Lm1vbm9jbGUz55qE5ouf5pe25bqP5YiG5p6QXShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTA0MTgmaWR4PTEmc249MThhZTBiNjEzOWZlMWEyNDM2ZGNmNmNjNDc4NTAyOTcmY2hrc209OWIzZjYyMjJhYzQ4ZWIzNDUwZGUwYjAyYTM0ZWI1ZmZmMmRiODlhYjhmMTU1NDYwZDU1NGNiYjIzYmUwY2QyN2ZkMzQ5MDc5ZTdiMiZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW+WNlee7huiDnua1i+W6j+aVsOaNrui/m+mYtuWIhuaekOKAlOOAiuaLn+aXtuW6j+WIhuaekOOAizcu6Kej5YazbW9ub2NsZTLnmoRvcmRlckNlbGxz5oql6ZSZ55qE5Lik56eN5pa55rOVXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDkxMDgzJmlkeD0xJnNuPWM1Njk3YWIwMjQxOTNjYjY1OTVkMjdlNGY0ZDNiZmFmJmNoa3NtPTliM2Y2NzViYWM0OGVlNGQ3MjQ0ZDk4MTllMTRmZTIxMGY3ZTQyZTQwZmM3YTZhOGRmN2I5NWJmZDkyZjA2MzM0ZDYwZDIyNmNiOTMmdG9rZW49MzMzNDUwMzI0Jmxhbmc9emhfQ04jcmQpICAKW+S4gOaWh+aQnuWumuaLn+aXtuW6j+WIhuaekOeahOS4i+a4uOWPr+inhuWMluaOoue0ol0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5NzYzNCZpZHg9MSZzbj02NDg3MjY2MGU4Y2U4MGZmMDhjNmMwNzQ1YzJiMjQxYiZjaGtzbT05YjNjOGVmMmFjNGIwN2U0YTJlZjAzODcwYzkxZmRjMWMzZGVkMjQ1ZGNlY2Q1YTIwNDk4NDFjYjdlOTc0OWJkMWNkMDg1MjEzM2YxJnNjZW5lPTE3OCZjdXJfYWxidW1faWQ9MjgyMDc5NDg4MDk0NzE1OTA0MyNyZCkgIAogIAogIAojIyA2LiDlhbbku5bljZXnu4bog57nm7jlhbMqKuaKgOacr+i0tCoqOiAgClvnu4bog57nmoTmlbDph4/nlLHoqrDlhrPlrprvvJ9dKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ4NDA1NiZpZHg9MSZzbj00OTY3YTA1NGY1MjQxZmYzYTFiZDRhNmZlOWE1MDJiMSZjaGtzbT05YjNmN2JjOGFjNDhmMmRlY2EzMTQxNDYxYmUwMzVkZWI4NjU4YmUxODRkNzg1OTdhZjI4ZjhiYTIwOTJkMTJmMDIwNzY4Mjc1MjQ4JnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApb5Y2V57uG6IOe5Lit5bqU6K+l5aaC5L2V5YGaR1NWQe+8n10oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDg0NzAxJmlkeD0xJnNuPWFkOTA2ODBmMjUyZDA5MmEyZTIxZjM0OWM4ZjMyY2FiJmNoa3NtPTliM2Y3YzRkYWM0OGY1NWJmMWQxMTMzNzQwNmFiMGUxMjk1ZThlMTczMWRiYWMwNzE1ZWVkYzk5ZDExYmVmZjdmMzgwZTQyZGQ0OWImc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgClvnrZTor7vogIXpl67vvIjkuInvvInvvJrljZXnu4bog57mtYvluo/liY3mma9dKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ4NDI4MCZpZHg9MiZzbj04NDRhZjAyMDcwMDEyYTFjMjY4MTg4MDU5NmJhNTFhMiZjaGtzbT05YjNmN2EyOGFjNDhmMzNlOTVlYjkwNjEyMWJlODk1MzQxMGNhNGM1NzJjODAzNWNiODAxNjA5YTU2Y2FmOWRjZmY1N2ZhOTg5NjAyJnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApb562U6K+76ICF6Zeu77yI5Zub77yJ77ya5aaC5L2V5YiG5p6Q57uG6IOe5Lqa576kXShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0ODQzMTYmaWR4PTImc249ZThkMDJmZGRjODBkMTEzN2JiNjRjNTU1NDFmMTY1MWQmY2hrc209OWIzZjdhY2NhYzQ4ZjNkYTdkZjdmY2FkOWM5OTYyOTFiYzY2OTY3YzA0ZDE2ZGRlOTJlZDM5MWM1NmU2MTBhNzI5OGFjOGZiN2RiYiZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW+etlOivu+iAhemXru+8iOWFq++8ie+8muS4uuS7gOS5iFJlYWQxMFjkuZ/kvJrmiqXplJk/XShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0ODUwMTImaWR4PTEmc249NjAwN2M4ZDdjYjJhMjM2ZGQ3MjQwYTY3OGRhYzAzOTEmY2hrc209OWIzZjdmMDRhYzQ4ZjYxMmY4MTFjMWRmOWU5NDUwZGM4MTEyZDM0M2U0YmYyNDViZTUxNDljMmUyYTA3M2QzZTMzOWNkMGUzZmY2MSZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW+etlOivu+iAhemXru+8iOWNge+8ieaVtOWQiOWQjueahOihqOi+vuefqemYte+8jOWmguS9leaLhuWIhuWHuuWIhue7hOS/oeaBr++8n10oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDg1MTM0JmlkeD0xJnNuPTEzZjVmOGM0N2Q4YWYyYmVlY2E0ZTEwM2E1ZjVlMjZkJmNoa3NtPTliM2Y3ZjllYWM0OGY2ODhiNDU0YTEwNjJlZTRlNDFmNzA3MmFjOWQ1OGU1NDY2ZmE3ZWQ0YmIwNTAxOGFkYmZlMTY3YmIzYTQ0NWEmc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgClvnrZTor7vogIXpl67vvIjljYHkuIDvvInlpoLkvZXkuIDmrKHmgKfor7vlj5bkuIDkuKrnm67lvZXkuIvnmoRjZWxscmFuZ2Vy6L6T5Ye65paH5Lu277yfXShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0ODUxNDUmaWR4PTEmc249NDAyY2IyOGMxNmFiYTBkYzY0NzAzN2M5YjdhYmE4ZjcmY2hrc209OWIzZjdmODlhYzQ4ZjY5ZmUyN2NkNDI3ZGYzZWZmMmU4OGMyNDBiZjIwZGZlOTJkOGI1MjJlZWNkNzMwMmQxMzJkODgwYmYyOTA0NyZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW+e7meS9oOWuieaOkuS4gOS4quaHgueUn+S/oeeahOW3peWFt+S6uu+8iOWNge+8ie+8muS4jeWtpue8lueoiyDpm7bku6PnoIHlrozmiJDljZXnu4bog57mtYvluo/mlbDmja7liIbmnpDvvJpMb3VwZSBCcm93c2VyXShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0ODU3MzAmaWR4PTEmc249NDJiOWIzNTAyNmJlYzUzNTlhYzM0NzUwZGVhM2JmNDQmY2hrc209OWIzZjcwNzJhYzQ4Zjk2NDk3MGY2NzNhODZlMjdlY2Q0NTNhODBiOTUzMTY4ZGMxMTBlMGVhNmJmYTQxMTBlZWVkMzM1MGM5NjAxYSZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW+S7gOS5iO+8n+S4jeWBmuWNlee7huiDnuS5n+iDveWIhuaekOe7huiDnuexu+e+pOWSjOWFjeeWq+a1uOa2pu+8n10oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDg1Nzk4JmlkeD0xJnNuPWM4NDliYzdhMDA5M2FmOTJmYzk5ZTEzYjU1ODQyYmIyJmNoa3NtPTliM2Y3MDM2YWM0OGY5MjA0OGQ3MjZiMzhmMmRkOTc4ZDBiMGNjZTc3OWMxYTQwOTBhYTRkYTVjYjJkZjNhZDMwYTVjNWRiZWQyN2Umc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgClvnrZTor7vogIXpl64g77yI5Y2B5LiJ77yJ5p+l55yLU2V1cmF05a+56LGh5pe255qERVJST1LvvJp0eXBlPSd0ZXh0J10oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDg1ODU5JmlkeD0xJnNuPWEwMTRjNGNiNjAzNDU1MWU1N2M3MDgyMGM3NzgxZTQ5JmNoa3NtPTliM2Y3MGYzYWM0OGY5ZTUyNjIwZTNmZjE5N2ViOThlNTg4MzZlOGJiNmJhYWQ2MzQzODdhNTIxZmRkYTFlNGExOTQzNTY1MTdjNzMmc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgClvlkITnsbvljZXnu4bog57lr7nosaHvvIjmlbDmja7moLzlvI/vvInovazmjaLlpKflhajvvIjkuIDvvIldKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ4NTkyNSZpZHg9MSZzbj0xNGUwODQ0MDIwMGYwZjVjYjRkY2MyZGM2MTVlZmViOCZjaGtzbT05YjNmNzBiNWFjNDhmOWEzN2E0M2NjMmE4YjJhNWU0ODVhM2Y4NGI0ZWY4Nzk0OWRmZTk5MDU2YmM2MzAxYjExMGU4MDgwMGY2YmIxJnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApb5om56YeP5pW055CG5aW9R0VP5Lit5LiL6L2955qE5Y2V57uG6IOe5pWw5o2uXShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0ODYwNDUmaWR4PTEmc249MGI2ODc0YmNmZmM4YWJhZmI1MDVjYWJjZTRjNGZjMGUmY2hrc209OWIzZjczMGRhYzQ4ZmExYjE0MGVmMDFjMDdhNzc0OWU2OWRmNGZhN2QyMDU2ZGVlZWQwNjczYzY2OGI2MjQ2NzI0Y2Q4NTc0MTEyNSZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW+etlOivu+iAhemXriDvvIjljYHlm5vvvIlTZXVyYXTkuK3liIbnsbvlj5jph4/lpITnkIbmioDlt6ddKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ4NjEzNCZpZHg9MSZzbj1lNTgxYjhhYzIwYmJjOTY4YWVlZjNmOWNmNTZmM2EwZiZjaGtzbT05YjNmNzNlNmFjNDhmYWYwZjFjODE3NTJiMDE5MGFiYzYxN2ViNzIwYTcxODA2OTUwZTc4NTFjN2QxOWI3ZTNlMDkyYWE5N2JkMDA1JnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApb562U6K+76ICF6ZeuIO+8iOWNgeS6lO+8ieeogOeWj+efqemYtei9rG1hdHJpeCwgYXMubWF0cml45Ye95pWw5piv5LiL5LiL562WXShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0ODYyNTkmaWR4PTEmc249OTdkZTVjOWUxNWU0OGNiNjJjOGE2ODAzNzZhNGVlMGQmY2hrc209OWIzZjcyNjNhYzQ4ZmI3NWE5MWI0MDQxNjgyNmZlMzViMzQwMjg0Y2YzODI1NTkyNWFjNDQ3NDQzYTYyY2RjMWRmMDgyZDIwZmI2MSZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW+etlOivu+iAhemXriDvvIjljYHlha3vvInlgZrljZXnu4bog57mtYvluo/liLDlupXpnIDopoHlpJrlsJHlhoXlrZhdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ4NzkyMyZpZHg9MSZzbj0xNTA0M2M2ZDcyOWIwZDU0OTNhYjg3NWIwZTU0YTI1OSZjaGtzbT05YjNmNjhlM2FjNDhlMWY1ZGFlNTE0YTAxYzg1N2Y5YTU2YTkwZTI5NzdkZDc4NjJkYjI4ZDA2ZmU1NTg4OGNkOWJiNGFmYmIxNGUwJnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApb562U6K+76ICF6ZeuIO+8iOWNgeS4g++8ieiwg+eUqOeahOe6v+eoi+i2iuWkmuWwseeul+eahOi2iuW/q+WYmz9dKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ4ODk5NSZpZHg9MSZzbj03MTQwZTBkMDM3NjcxNTQyZmIzN2RmZjNhM2M5NGIyOCZjaGtzbT05YjNmNmNiM2FjNDhlNWE1ZjU0YTAyYmU5ZTZhZjlmNWE0Y2Y4ZGExZGUxNzcwZjkwMzUxMzBjODRkZWRmMDU5YTAyNDk2NGZjMTVhJnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApb562U6K+76ICF6Zeu77yI5Y2B5YWr77yJ44CB5LiA5Liq5oiR6Iez5bCR6KKr6Zeu6L+HMzDpgY3nmoRtb25vY2xl5oql6ZSZXShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTAwMTAmaWR4PTEmc249MjRjNTVmYTRiZDVkN2Q4Mjk2MjVjYjY3ZGJhZjMyMWEmY2hrc209OWIzZjYwOGFhYzQ4ZTk5YzlmMjdlMzQyM2M4Mzk4MDM0YTE4MTlkMGNjZWJiZjIxMTcwYjk1NTQ2MWQyYzMzNTEzMmQ2ZjNjY2UyNSZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW+S4gOaWh+aQnuWumuWNlee7huiDnuWfuuWboOmbhuivhOWIhl0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5NzgzMSZpZHg9MiZzbj04MmZhNTFjNzZhMzgxZmJhMGI0NDRlOWI2YjIzZWI1ZiZjaGtzbT05YjNjODEzN2FjNGIwODIxZGZiNjJlOWIzNjVlYTNjMzJhYmJiZDgwZGY0MmRmNjMxODFjMzdhZDllZDk5MWMwMTgzYzJjNzk4MWQ4JnBheXJlYWR0aWNrZXQ9SENrUktyN1IzLU8zcDUtMFZrQXdPT2ZnSVhSOFNUalg5SG9aWVlXS1MzamdKdHB0c0cyTXU0S1dJNlB6NmNBdUNPeGlGUE0jcmQpICAKW+ayiea1uOW8j+e7n+iuoee7huiDnuavlOS+i10oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5MDk0OSZpZHg9MSZzbj1iOGRiZTA3ZDkwMWY3YzI0ZjgyZDA3OGJlN2EyZmM3NyZjaGtzbT05YjNmNjRkNWFjNDhlZGMzMzk4MDM2M2M3YmM4NjJhOWY2MjgzYjc4ZGFjNDA3ZTljMDgyZDgwYmQ3ZDk2NjkyMTVlZWNhYzYyMzQ3JnRva2VuPTE3NjA2MzYyODEmbGFuZz16aF9DTiNyZCkgIApb5rKh5pyJYmFyY29kZeaWh+S7tueahOWNlee7huiDnuaVsOaNruimgeaAjuS5iOivu+WPll0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5MDk1MiZpZHg9MSZzbj0zNjRhMzk0MWU1OWU0NTIzNDc5NWM5MDZhNDJmYzlhYiZjaGtzbT05YjNmNjRkOGFjNDhlZGNlYzcwMzg0Y2Y1YzZhOTEyMjRkMGY3ODQxY2UzYTdjZmNhZGU2NTEzNTAwYzEzNjczYTY2OTVkNmYwMjk5JnRva2VuPTE3NjA2MzYyODEmbGFuZz16aF9DTiNyZCkgIApb5Y2V57uG6IOe5Z+65Zug6ZuG6K+E5YiG5LmLQVVDZWxsXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDkxNzYxJmlkeD0xJnNuPTQxZjVjMWNlYWFjZjZhMWM0ODQwNTY3ZjhhMzQ5ZTA2JmNoa3NtPTliM2M5OWUxYWM0YjEwZjdjYTE1ODU2MWU5NmZlYzc2YTQ5ZmYzMmI4NDEyY2IxNDZlZDNmYjdhYTkyNjBjNzUxNzJiNGViMTZmOWEmc2NlbmU9MjEmdG9rZW49NzE3Mzc1MiZsYW5nPXpoX0NOI3dlY2hhdF9yZWRpcmVjdCkgICAgClvlpoLkvZXliqDlv6tTZXVyYXTnmoTorqHnrpfpgJ/luqZdKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTQxMTYmaWR4PTEmc249ZjNkYzU3N2NiYjQ2NDc3OTA2MmFhZGEzMTMxOTFhMDUmY2hrc209OWIzYzkwYjRhYzRiMTlhMjdhMTdmOTU4ZTM0MzczMzdkNWIxMGI2YmE3MTUzZTRkZDQzZGVkY2I0ZGY4MTJkOGM2YjRkODZmZTk3MCZ0b2tlbj00MTY4OTY1NjMmbGFuZz16aF9DTiNyZCkgIApb57KJ5Lid5p2l56i/fDEuIFNldXJhdDTnm7jovoPkuo5TZXVyYXQz55qE5Yeg54K55pS55YqoXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDk0NTE2JmlkeD0xJnNuPWNiMmQ0ZTZiMTgyNDI4Y2U3Yjk4ZTdmZmYyZTg3MjlhJmNoa3NtPTliM2M5MjI0YWM0YjFiMzJjNGZlOTk3NTg5NjAzMDVjNDg0NTM5NWNmZTAzODUxZDcwYTA0MDcwNDNlZTM2MjUwZTU1ZDIwMTA2ZmMmc2NlbmU9MjEmdG9rZW49MTYzNDk3NTcwNSZsYW5nPXpoX0NOI3dlY2hhdF9yZWRpcmVjdCkgIApb4oCL5aaC5L2V5Yqg5b+rU2V1cmF055qE6K6h566X6YCf5bqmXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDk0MTE2JmlkeD0xJnNuPWYzZGM1NzdjYmI0NjQ3NzkwNjJhYWRhMzEzMTkxYTA1JmNoa3NtPTliM2M5MGI0YWM0YjE5YTI3YTE3Zjk1OGUzNDM3MzM3ZDViMTBiNmJhNzE1M2U0ZGQ0M2RlZGNiNGRmODEyZDhjNmI0ZDg2ZmU5NzAmdG9rZW49NDY4NTM1MzU5Jmxhbmc9emhfQ04jcmQpICAgICAgClvigIvnrZTor7vogIXpl67vvIjkuozljYHvvInlm5vkuKrljZXnu4bog57moLfmnKzlj6rnu5nkuobkuIDlpZfmlofku7bmgI7kuYjor7tdKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTQ4NzkmaWR4PTEmc249YzIyODdhYjM2ODQ3OTI3NDdkZmFjNTNkNjcwNDQ2MmImY2hrc209OWIzYzk1OGZhYzRiMWM5OTRhNGIwNzVjNGY4NDc1ODE2ZTEyMTk2NmZhOGM1MmNiMGEyY2U4YzE0OTg3OTg4YWI5YmRiNDliZGY2OSZ0b2tlbj00Njg1MzUzNTkmbGFuZz16aF9DTiNyZCkKW+S6uuexu+WNlee7huiDnua1i+W6j+aVsOaNruS4reacieWTquS6m+S7pSIqKi0i5byA5aS055qE5Z+65ZugXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDk1MDE5JmlkeD0xJnNuPWY1MmFjMjJjYTFlYTQ3ZWNkZGFhMzUwM2JkYzJjMGI2JmNoa3NtPTliM2M5NDNiYWM0YjFkMmQ1MjFmNzE1NWNlOGY0OTkzODlkYWRlMjM4MjgwMTc1NzJhODRjZGNlNzFlNWQwOGQzN2Q3NGUwODUxMmImc2NlbmU9MjEmdG9rZW49MTYyNDQ4MDY3MSZsYW5nPXpoX0NOI3dlY2hhdF9yZWRpcmVjdCkgIApb5Li65LuA5LmI5oC75oqK5YiG6L6o546H6LCD55qE5b6I6auYXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDk1NzY1JmlkeD0xJnNuPTJlYzVlM2UyNjQ5MWUyOGM5MmUyNWM0MDYzMGJmZmFlJmNoa3NtPTliM2M4OTA1YWM0YjAwMTNhMjNmOWNkYTJjY2NkNjdjZGYzYzRhOTQxYmFjMTYxZTNhMTVhMTJhYjk4Y2Q0ZTVlY2E4YWVlZGJlOTYmdG9rZW49MTMzNzQ5OTY3Jmxhbmc9emhfQ04jcmQpICAgICAgICAgICAgClvnrZTor7vogIXpl67vvIjlha3vvInvvJpTZXVyYXTkuK3lpoLkvZXorqnnu4bog57lkKzkvaDmjIfmjKVdKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTc2NjkmaWR4PTMmc249YWMzNDA4YzdkZDI4NDI1NDI2ZDk1NGY4MWQyODMyNTImY2hrc209OWIzYzhlOTVhYzRiMDc4M2MxMjE4MmE5NjBlODE1OGM4YTA5OTJhMjAzMzVmOGM3MGYxZGM2Mzg1NWM1OTg0ZGQyMmU0ZGVlNzA2ZCZzY2VuZT0xNzgmY3VyX2FsYnVtX2lkPTI4MjA3OTQ4ODA5NDcxNTkwNDMjcmQpICAKICAgIAogICAgICAgICAgICAgIAojIyA3LiDljZXnu4bog57mlofnjK7pmIXor7sgIApbQmlvbWFtYmHliqnmjqjnmoTnrKzkuoznr4fmlofnq6Ah5Y+R6KGo5LqG77yBXShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0ODk4MjMmaWR4PTEmc249NmE1ZGRkZDUzODcwMzk1MzE2ZDJiMmU5MDRjNmNlNzImY2hrc209OWIzZjYwNGZhYzQ4ZTk1OWU5N2U0YjAzMTc2NDNlZmRjZjExN2RhN2Y4Yjc1ZjFlZGJjZDY0ZGQ4ZTJmMDcxNDllNjAzMWE5NGRkNCZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW+WPiOadpeS6hu+8gUJpb21hbWJh55Sf5L+h5Z+65Zyw5Yqp5o6o55qE56ys5Zub56+H5paH56ugIV0oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDkyNTMyJmlkeD0xJnNuPWNkZGI0NjkxZjIzZGVmYzgwYjYwZGEyMzE3OTBjNTNjJmNoa3NtPTliM2M5YWU0YWM0YjEzZjIzMzRjYzdmNmIxNmVlYzFkODIyMzgwMGY2ZWNlZjcxYTkzY2ZiYTIxNjk4YWM1ZjQ1MDVkYmQ2NGYzMDAmc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgClvljZXnu4bog57mtYvluo/op6PmnpDns5blsL/nl4Xogr7nl4XkuK3ogr7lsI/nkIPnmoTliqjmgIHlj5jljJZdKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTc2ODImaWR4PTImc249N2VmNDkxOTFjNWUzMzRiYjI5MWNjZGFhOGVhNDQ0YWUmY2hrc209OWIzYzhlODJhYzRiMDc5NDI1NDMzOTM4YzgzMWQ1MjhlZGRiOTIzN2VmYWNhNDlhY2JjMjEwZTljZDcxNWQwNTc1NDE1ODlkYzI5MCZzY2VuZT0xNzgmY3VyX2FsYnVtX2lkPTI4MDI0NjM0MzEzNTc2NjExODQjcmQpICAKW+WNlee7huiDnua1i+W6j+aKgOacr+ino+aekOWBpeW6t+S6uuS4jlQyROaCo+iAheeahOiDsOWym+W3ruW8gl0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5NzcxMyZpZHg9MSZzbj1iN2Y4ZGY3NThiYzRkOTViODg5NjkzNzhjNmRmYmVlZSZjaGtzbT05YjNjOGVhMWFjNGIwN2I3YzZhMGI1MDIzZWJmNmM4ZWNkN2QzNDc0MWFiMDc2YmFhMGI1NjQ1MzVkMWQ3NTNiYmY5ZGM1YmU1MjkwJnNjZW5lPTE3OCZjdXJfYWxidW1faWQ9MjgwMjQ2MzQzMTM1NzY2MTE4NCNyZCkgIApb5bCP6byg5YWo6IK+5Y2V57uG6IOe5rWL5bqP5byA56+H5LmL5L2cXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDk3NzEzJmlkeD0yJnNuPTU1NGQ2YTRlMWIyOGIyZTUzMDM2OTVmYWU1OTQyYTM0JmNoa3NtPTliM2M4ZWExYWM0YjA3YjcyMzIzY2UyNWNkNDk0NzRhOTIyOGVjMWFhYTU2MjQzZjU3ZGNhM2YyZjY2OGRjNDJhYjljZDU4ZGNhMjEmc2NlbmU9MTc4JmN1cl9hbGJ1bV9pZD0yODAyNDYzNDMxMzU3NjYxMTg0I3JkKSAgCltOYXR1cmXkuZ/og73nmb3lq5bvvJ9dKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTc4NjcmaWR4PTImc249Y2FlYjhlZDA2ZmZkNTIzOWI1OGNlYmNkOTA4NDNjZjgmY2hrc209OWIzYzgxZGJhYzRiMDhjZDllZWM1MDk3ODk1MWExYjg5MGNhMDhlZGVjNjQ0ZmY3NTIwNWEwOWFkMWYwNjdkZmYyNWQ2ZWNiOTM4ZSZzY2VuZT0xNzgmY3VyX2FsYnVtX2lkPTI4MDI0NjM0MzEzNTc2NjExODQjcmQpICAKW+S4gOevh+S4jeiKsemSseWwseiDveeZveWrlueahOaWh+eroF0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5Nzg0MCZpZHg9MiZzbj0xZGFjYmZiMTkwZTExZDJmZjEwNGUzMmYyMzhjZjhjNCZjaGtzbT05YjNjODEyMGFjNGIwODM2N2JmZTNhMGRkOGQ1NWYyMWY1ZDEzNTI4ODI2ZGUzMTQ0YTlhODVjZTliMWM5ZjRjNzEwZGU3MDNlZGFlJnNjZW5lPTE3OCZjdXJfYWxidW1faWQ9MjgwMjQ2MzQzMTM1NzY2MTE4NCNyZCkgIApb6auY5rCn5LiL5bCP6byg6IK65Y+R6IKy5o2f5Lyk55qEU2NSTkHlm77osLFdKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTg1MTMmaWR4PTImc249Nzk4NDVlZGY1NmEzMDIzYzU5YzczNDAzZDdiNjQ5NGImY2hrc209OWIzYzgyNDFhYzRiMGI1Nzc5MzQwMjY4NmVkYzhjMzVhYWEzYjA5NTlkMzA5NmI1MTIyMjA3ZmJiNzBhYjgwOWQxZGY1ZmFlZTBkNyZzY2VuZT0xNzgmY3VyX2FsYnVtX2lkPTI4MDI0NjM0MzEzNTc2NjExODQjcmQpICAKW+aWh+eMrumYheivu++8iOWNgeS6jO+8ieOAgUlnQU4gJiBTVFJULVNlcV0oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDg1Mzc2JmlkeD0xJnNuPTAyZTIyOGQwOTkzZDhhNjUzYzhiYjFkNTMxMDIxY2RiJmNoa3NtPTliM2Y3ZTkwYWM0OGY3ODY4NmQ2ZDU5NTNhZWIxOTJkYjRmMjhiZjU3N2RiZWJkNzZkOWZhYmJlNzk3ZjEzNWI3ZmIwOGZiNDI4Njcmc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgClvogIHmoJHlvIDmlrDoirHigJTigJRFR0ZS44CB6IK/55ik44CB5YWN55arK3NjUk5BLVNlcV0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5ODU5NiZpZHg9MiZzbj04ZjYzZjU4NTZjZGY5MGUxNWYxZDE5YjRjZmU2YTM5ZSZjaGtzbT05YjNjODIzNGFjNGIwYjIyMWE1ZDJjNDE3NTU4ZjBlNjNmNzQyNDU5YzBhM2Y4YzFjYmI0Y2RmNzRjZTI1ZGRjYWYwZTQ4ZjRhN2NlJnNjZW5lPTE3OCZjdXJfYWxidW1faWQ9MjgwMjQ2MzQzMTM1NzY2MTE4NCNyZCkgIApb55mM5YmN5Z+66LSo57uG6IOe6amx5YqoQlJDQTHogr/nmKTlj5HnlJ9dKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTg1OTcmaWR4PTImc249OWY1ZmVlMzhkMDgyMTA1MmM5YzZiMzc1M2MyYjNiZWQmY2hrc209OWIzYzgyMzVhYzRiMGIyMzhjNDkwMmFkN2IzOTQ0YjI4NWJhYWEwYTdlYzZmNWM3ZDA4YTU5NmZkZjg5NzM1ZGM3YTdhZmFiOTFmMCZzY2VuZT0xNzgmY3VyX2FsYnVtX2lkPTI4MDI0NjM0MzEzNTc2NjExODQjcmQpICAKW+aWh+eMrumYheivu++8iOWNgeWFq++8ieOAgee0p+i3n+eUn+S/oSLpkrEi5rK/LOiDsOiFuueZjCblhY3nlqvlpJrmqKHmgIHlm77osLFdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ4OTA0NSZpZHg9MSZzbj0yOWZlYjAwZjA5NGE5YTdlMjA0MThiMjJhYTU0ZGQ4YyZjaGtzbT05YjNmNmY0NWFjNDhlNjUzZDQyMjM4MzhlYjFkOTZlNjVlNWVlNTFhYzNmNzc4Mjg0MWQ5YjMzMDEzYmRiNjdiNWUyMmU5NTk5ZmFjJnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApb5paH54yu6ZiF6K+777yI5Y2B5Lmd77yJ44CB5Y6f5Y+R5aS06aKI55mM5ZKM6IK/55ik6L2s56e75b6u55Sf5oCBXShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0ODk1MTEmaWR4PTEmc249NzZlYzcwNmViZDk3ZTNlZGQwODY4N2Y1Y2YzYjY4MTYmY2hrc209OWIzZjZlYjdhYzQ4ZTdhMTBiYjgxYWVjNTMzMmVjYzA1NDRhNjgzZjU3NmVhNjgwYzhiYWE2MjFlNTA0ODE2YmY2NWM3ZDMzMWJkZiZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW+aWh+eMrumYheivu++8iOS6jOWNgeS4gO+8ieOAgeiCvuiEj+eWvueXhSbku6PosKIm5qC45Y+X5L2TRVNSUkFdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5MDU3NSZpZHg9MSZzbj1iOTMxYTFkNTBkZGNmYzRlMzQ5OTk3NjMxMzk2OTVhMCZjaGtzbT05YjNmNjU1ZmFjNDhlYzQ5ZWIyZmIwMWNlOGFjYjE1ZTIzMDA5MWFiM2MyOWNlMTQ3MTc0Nzg1MGJlNWRhZTU0ZGJlOTdmZDEwM2IwJnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkKW+aWh+eMrumYheivu++8iOS6jOWNgeS6jO+8ieOAgVBELTEm5oCl5oCn6auT57uG6IOe5oCn55m96KGA55eFJlQgQ2VsbF0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5MDkyOSZpZHg9MSZzbj04MmJmOTNjY2JkOWRkOTA2Y2FhZDhlYzcwOWM4NjE1MyZjaGtzbT05YjNmNjQyMWFjNDhlZDM3MTE3Nzk0ZTdjNWI4NzhmYTc4NzYwNjI3ZThiY2VkOWMzN2EyYzdjNjdmZDhhZmQ1OGQwY2YwYWRkMTdlJnRva2VuPTE3NjA2MzYyODEmbGFuZz16aF9DTiNyZCkgIApb5paH54yu6ZiF6K+777yI5LqM5Y2B5LqM77yJ44CBUEQtMSbmgKXmgKfpq5Pnu4bog57mgKfnmb3ooYDnl4UmVCBDZWxsXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDkwOTI5JmlkeD0xJnNuPTgyYmY5M2NjYmQ5ZGQ5MDZjYWFkOGVjNzA5Yzg2MTUzJmNoa3NtPTliM2Y2NDIxYWM0OGVkMzcxMTc3OTRlN2M1Yjg3OGZhNzg3NjA2MjdlOGJjZWQ5YzM3YTJjN2M2N2ZkOGFmZDU4ZDBjZjBhZGQxN2UmdG9rZW49MTc2MDYzNjI4MSZsYW5nPXpoX0NOI3JkKSAgClvmlofnjK7pmIXor7vvvIjkuozljYHkuInvvInpvLvlkr3nmYzlvq7njq/looMmc2NSTkFdKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTEwODQmaWR4PTEmc249ZTQ1MDg0NGQ0ZjEwMmNhYTg4Y2FiNmRlYjYzMGEzZjQmY2hrc209OWIzZjY3NWNhYzQ4ZWU0YTY4ODM1NTk4NTlhMjFkNzcyNTY0NzliYjhkMDMwYzU0YTkxMjQwODI3ZDg1YjkyNTA2NmJjNGY4ZWJiNiZ0b2tlbj0zMzM0NTAzMjQmbGFuZz16aF9DTiNyZCkgIApb5paH54yu6ZiF6K+7KOS6jOWNgeWbmynjgIHjgIpOYXR1cmXjgIvvvJpNWULosIPmjqfoobDnq63mgKdU57uG6IOe5a+55qOA5p+l54K55oqR5Yi255qE5ZON5bqUXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDkxOTA5JmlkeD0xJnNuPTVkNDdkMjkxNzM5NzI0OGRkNmEzYTllODVmMmFjZDZkJmNoa3NtPTliM2M5ODE1YWM0YjExMDM3ZTUyYmEwMDIxNWEwYjZjZDIzYjU1NDEzOTk1NTEyM2VmMjFhYzJjZDA3YTY0NmU5NzMwOWU3ZGVmNzgmc2NlbmU9MjEmdG9rZW49NzE3Mzc1MiZsYW5nPXpoX0NOI3dlY2hhdF9yZWRpcmVjdCkgIApb5paH54yu6ZiF6K+7KOS6jOWNgeWFqynjgIHljZXnu4bog57pg73og73mtLvmo4DmtYvluo/kuobvvJ9dKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTM2MDQmaWR4PTEmc249ZDBmODczOGUyNmE0YjFjODcwZDMyOWI2YTRhN2I2ODkmY2hrc209OWIzYzllYjRhYzRiMTdhMmQwYjA0ZDcyYzM1MGMyMGY1NzU3MDFkZTcxNzlmNzdmY2QzNTY3ZjRiMTUzM2NmMzVkZjQxNTdmNjdlMSZ0b2tlbj00MTY4OTY1NjMmbGFuZz16aF9DTiNyZCkgIApb5paH54yu6ZiF6K+7KOS6jOWNgeS5nSnjgIHljZXnu4bog57mtYvluo/lgZrliLDku4DkuYjnqIvluqbog73mr5XkuJp856GV5aOr56+HXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDkzODA4JmlkeD0xJnNuPTUyYzdkMzMwZmZkZGE0N2MzNDA5ZDM2ZmU5Y2JiY2Q4JmNoa3NtPTliM2M5MWUwYWM0YjE4ZjZlZGY1OWQxNzFhMGQ5ODJiMWUzZjg0MjE0ODA0NmQ4ZWVkMTkzNDM0ODRmZWFhODRkYmQ1Yjc2ODJhMTEmdG9rZW49NDE2ODk2NTYzJmxhbmc9emhfQ04jcmQpICAKW+aWh+eMrumYheivuyjkuInljYEp44CB5Y2V57uG6IOe5rWL5bqP5YGa5Yiw5LuA5LmI56iL5bqm6IO95q+V5LiafOWNmuWjq+evh10oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5NDAxNyZpZHg9MSZzbj1hMmRjNGUyZWVmMmJjZGI0MGY1MDc0YjY2NWRmYTQ1ZiZjaGtzbT05YjNjOTBkMWFjNGIxOWM3OWFjNTEyOGY5NmQyNzc4OTI0MTM1N2M5NzQ1YmIwMzg5ZmY1Zjc5Zjk2YWI4MjVkM2UxYzliMjllM2FmJnRva2VuPTQxNjg5NjU2MyZsYW5nPXpoX0NOI3JkKSAgClsyMDIy5bm05LqG77yM6YO95pyJ5ZOq5Lqb5Zmo5a6YL+e7hOe7h+aciXNjUk5BLVNlceaVsOaNrnzlsI/pvKDnr4ddKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTQ3OTYmaWR4PTEmc249OTJjOTFhNjU3MTliZGYzOTY1ODgxNGViNjkxYTc4MGYmY2hrc209OWIzYzk1ZGNhYzRiMWNjYTU1NDc0NDBhNTg4MWU2NTBkYTNlYTQzMGJhZDNlNjAxN2NiZDI4OTE2MDZiMmVjNDBlM2VjMzQzYmMwZSZzY2VuZT0yMSZ0b2tlbj00Njg1MzUzNTkmbGFuZz16aF9DTiN3ZWNoYXRfcmVkaXJlY3QpICAKWzIwMjLlubTkuobvvIzpg73mnInlk6rkupvlmajlrpgv57uE57uH5pyJc2NSTkEtU2Vx5pWw5o2ufOS6uuexu+evh10oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5NDgwNiZpZHg9MSZzbj0xZDE1YWQ5Y2I0ZDM1MGExNjRkM2I5NDFiYzcxNTIzMyZjaGtzbT05YjNjOTVjNmFjNGIxY2QwNTRjZWRiZDNlOGM4ZjU3ZWU4OGNjNTlhNmViZGEyZmQxMWJhOGZlYTc5ZjVlOWU4YzY1ZDIxZmYzMzhjJnNjZW5lPTIxJnRva2VuPTQ2ODUzNTM1OSZsYW5nPXpoX0NOI3dlY2hhdF9yZWRpcmVjdCkKW+e7iOS6juivu+WIsOS4gOevh+eUqG1vbm9jbGUz5YGa5ouf5pe25bqP55qE5paH56ugXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDk2MDY0JmlkeD0xJnNuPTBiZTM4MzA2ZjljZDhjNmI4MTlkNThjYzJlNzc5Yjg3JmNoa3NtPTliM2M4OGQwYWM0YjAxYzY3NzNiNmM0ZjFhMDYzNzg4NTA5YmFhMjdjNTdlMjA5OGIxNmI4ZWJlMzhjYzYyNWE4N2I5ZDg5MjcyYzcmc2NlbmU9MjEmdG9rZW49NDQ1OTQwNTg3Jmxhbmc9emhfQ04jd2VjaGF0X3JlZGlyZWN0KSAgClvljZXnu4bog57ovazlvZXnu4Qr5Lqa57uG6IOe56m66Ze05Luj6LCi57uEPTI15YiG5paH56ugXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDk2MTI2JmlkeD0xJnNuPThjYjYwNDBhMzhlYjg0NGJiMjE1YzBkMzk1MTk2ZTNhJmNoa3NtPTliM2M4OGVlYWM0YjAxZjhkY2I4ZjRjN2ExOWM1YTU4ODQxZDVmZTE2MjNmMGE0YzU4NWM2ZGNjMjgxY2JiZGQyODMwYTExNTBmNmEmc2NlbmU9MjEmdG9rZW49NDQ1OTQwNTg3Jmxhbmc9emhfQ04jd2VjaGF0X3JlZGlyZWN0KSAgClvln7rkuo5zY1JOQS1TZXEm56m66Ze06L2s5b2V57uE55qEQUtJ56CU56m2Cl0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzUwMzY2NCZpZHg9MSZzbj0zOTUxOWQ5Y2ZhNTRlMmQ1Yjc1N2Y2YzI0OWNjYmM4NiZjaGtzbT05YjNjYjY2MGFjNGIzZjc2OGM4Y2ZiNzA4ZDgzNTVjNDI2YjJkNGFkMzk1MzhhY2Q1NTg0YWE5NzQxY2NkZjEwNzZiNzExMjQ5MmRmJnRva2VuPTQzNjQ3ODI4NSZsYW5nPXpoX0NOI3JkKSAgClvjgIpOYXR1cmUgTWV0aG9kc+OAizogTmlDaGVOZXQsIOiDveWkn+iAg+iZkeWIsOiDnuWGhei9rOW9leiwg+aOp+eahOe7huiDnumAmuiur+i9r+S7tl0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzUwMzYxNyZpZHg9MSZzbj0xODM4OWZmZTFkMjAxYjFjMDU5MmViYzkyM2FhYzg1MSZjaGtzbT05YjNjYjY1MWFjNGIzZjQ3NzdjYjBhNjI4MmFkOTljZDJhYWQ3MTEwNTBkMTU5MGYyMGY5NzBkODQzZjA1ZmI0MmY4Y2MwMjgzM2UyJnNjZW5lPTE3OCZjdXJfYWxidW1faWQ9MjgwMjQ2MzQzMTM1NzY2MTE4NCNyZCkgICAgICAKW+aVsOeZvuS4h+e6p+WNlee7huiDnuaVsOaNruaXtuS7o+eahOWkmue7hOWtpuWIhuaekF0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzUwMzYwMyZpZHg9MSZzbj1jMTQ2ZWVjNDUyOGY0MTgyMjZmMDEwMzAzMGNiODAzYyZjaGtzbT05YjNjYjdhM2FjNGIzZWI1YmQ4YmU3ZTQxYzhjNDQwYzgwZTgyMjNmYjEwNjM0YmZjNmQ1MjNmZTM4OWUzYWEwYmMxNGU1ZWE4N2Q1JnNjZW5lPTE3OCZjdXJfYWxidW1faWQ9MjgwMjQ2MzQzMTM1NzY2MTE4NCNyZCkgIApb5Lik5LiH5a2X6ZW/5paHfOW9k+WJjeWNlee7huiDniBSTkEtc2VxIOWIhuaekOeahOacgOS9s+Wunui3tV0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzUwMzU0NCZpZHg9MSZzbj1kNTYzNDk3Y2M5MTI5NTBkMDdjMjI4NDcwOWYzYWVkZSZjaGtzbT05YjNjYjdlOGFjNGIzZWZlNjZmYTRlNzQzZjlkNmMyNDVhN2RkNmVhMzcwY2QwZWUzOTdlOTI3NjFhMmQ2ODBjYWM1YzZkZDRlYTg3JnNjZW5lPTE3OCZjdXJfYWxidW1faWQ9MjgwMjQ2MzQzMTM1NzY2MTE4NCNyZCkgIApb44CKTmF0dXJl44CLOiDljZXnu4bog57op6PmnpDlpKfohJHmhJ/nn6XmtYHmhJ/ov4fnqItdKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc1MDM1MDgmaWR4PTEmc249NzI3ODFmZjk3ZWNhZTFjMzI4MTVmZTJjNGQ3MWIyNGUmY2hrc209OWIzY2I3YzRhYzRiM2VkMmI0NmM4YzIyZjRjZThmOTNlM2Y5MzAwNGVlNzY1NDJiZGQ5MjAzOWQzMDFjZWM0YTEwMDc3YmI5NzNkYiZzY2VuZT0xNzgmY3VyX2FsYnVtX2lkPTI4MDI0NjM0MzEzNTc2NjExODQjcmQpICAKW3NjUk5BLVNlcStXR0NOQSvpk4HmrbvkuqHvvJpJRj05LjY5XShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NTAzNDk4JmlkeD0xJnNuPWZjZjM4YmQ2ZmQxZGJhZjgwZTIwMzkyNmJiNjNkNWM0JmNoa3NtPTliM2NiN2RhYWM0YjNlY2NhOWYyZGQ1OTBmYzU4MWY1YjFhZTY3YTdmODliZTZmNzZlYjQzOGEwMTdiNWMzMzVkOGEwMTgzMGI2YTUmc2NlbmU9MTc4JmN1cl9hbGJ1bV9pZD0yODAyNDYzNDMxMzU3NjYxMTg0I3JkKSAgCls8SUY9MjcuND4gSWdHNOebuOWFs+aAp+eWvueXheS4remijOS4i+iFuuWSjOihgOa2suS4reeahOe7huiDnuWSjOWIhuWtkOaUueWPmF0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzUwMzA4MSZpZHg9MSZzbj0yOTg5MDk1N2FiNzVmMDUwZDQ2NmNhNjU5MjkyYjUyOSZjaGtzbT05YjNjYjViOWFjNGIzY2FmZTI3OTc4M2M0OWNmNzkyODgxOWM1Y2FlZmZiYzM0ZTUyYWUwYzc5ZjVlNzAxY2U4YTI1ZGQ2ZjBjOTEzJnNjZW5lPTE3OCZjdXJfYWxidW1faWQ9MjgwMjQ2MzQzMTM1NzY2MTE4NCNyZCkgICAgClvmgKXmgKflv4PogozmopfloZ4oQU1JKeWkluWRqOihgHNjUk5BLVNlceWIhuaekOa1geeoi+WPiue7k+aenOais+eQhl0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzUwMDk0MyZpZHg9MSZzbj1jODVjZjViZTU1ZmEyYWU0Yjg1YzcwY2E3ZTRkZmZmYyZjaGtzbT05YjNjYmRkZmFjNGIzNGM5OWFiYjMwN2Y3MTg4M2NhNDk1ZTJlZDg3NjU1NmE3YWQwNjRhM2NkNjllMTc4MjdkYzUzNDMxN2IzNzJlJnNjZW5lPTE3OCZjdXJfYWxidW1faWQ9MjgwMjQ2MzQzMTM1NzY2MTE4NCNyZCkgIApb6YW45LqG77yM5YWt5Liq5qC35pys55qEc2NSTkEtU2VxK+W3ruW8guWIhuaekD055YiG5paH56ugXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NTAwMjczJmlkeD0yJnNuPWM5NWFjN2NlZWNjZTBlNjM2NGY0OWU3NTA1OGNhYWJlJmNoa3NtPTliM2NiOGExYWM0YjMxYjc2YjM2NjM1YWM1ZTNkMzM4NWRiNmNjOGMzZmE5MTY1NDFiY2I2MWQ5YTNhZDQ0MTdmNGJmZGFhMTAyNzQmc2NlbmU9MTc4JmN1cl9hbGJ1bV9pZD0yODAyNDYzNDMxMzU3NjYxMTg0I3JkKSAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIyMgOC4g5Y2V57uG6IOe5rOo6YeK5aSN5YaZClvljZXnu4bog57ms6jph4rlpI3lhpko5LiAKTpIdW1hbiBGZXRhbCBLaWRuZXldKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5MDUwNCZpZHg9MSZzbj0wMDY2YjJiMzMwNjdjZWRiOWQxYzI4Njg5YTUzZmFhYiZjaGtzbT05YjNmNjI5OGFjNDhlYjhlMTJjZGM3YmRkNjI2M2U1ZmViOTAzOWY1NDlmN2I5ZGJmNGUyNTg4NTRlZTYxNDc2ZDA5ZjcwMmYxNDQ3JnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApb5Y2V57uG6IOe5rOo6YeK5aSN5YaZKOS6jCk6SHVtYW4gY29sb3JlY3RhbF0oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDkxNjQyJmlkeD0xJnNuPTIyNDZmYjcwMjI3N2RkYzY5MGYwNTZmYzg4NTQxNDJlJmNoa3NtPTliM2M5OTZhYWM0YjEwN2MwNTlhNDAzOTc4ZWNhN2JlMWFlNzk4NzY1OTYyNjI3MmM1ODQzMDkxMGFkNzU4OTJhZDQ3MDUxN2FlZmImc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgClvljZXnu4bog57lpI3lhpl8My7mgKXmgKflv4PogozmopfloZ4oQU1JKeWkluWRqOihgHNjUk5BLVNlceWIhuaekOWunuaImCjpk77mjqXph43nva4pXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NTAxMTQ1JmlkeD0yJnNuPTEyYzJlOGQxMDRhZDM0M2ZjMTNhY2I4Y2RhMjY2ZTZjJmNoa3NtPTliM2NiYzA5YWM0YjM1MWY0ZWQ3MDhhMGVkNTc3YTIxZjQ4Y2NiMGQ0MTczYWVkOTRhMDI3YjQxNzAxNDdhYjg1OTMxZWU1MWQxZTUmcGF5cmVhZHRpY2tldD1IRnZ4OWMxVUIydXhvei1qQzRvbnhFQnNqWHoxa29pMnBVWWFHV1ZPTGczcklPMXRBR0FRcnBQbWZwWGx1TnBUSUJHVWQ0TSNyZCkgIApb5Y2V57uG6IOe5aSN5YaZfDQuIEdTRTE1Nzc4M+aVsOaNrumbhuWkjeeOsOWPiuW3ruW8guWIhuaekF0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzUwMzU4NSZpZHg9MSZzbj0wMDM1OTc3YTgwNjIxZjA5ZDA3NzRkM2M5YjBhODZjZCZjaGtzbT05YjNjYjdiMWFjNGIzZWE3NjY4NWVkNDRhYmNmYjAzMWM2OTg4MzVkOWI5YjQyYjI2OTQ5NmY2MTA0Y2Q4YzlkNDU0NjdkZTdlZGRkJnRva2VuPTQzNjQ3ODI4NSZsYW5nPXpoX0NOI3JkKSAgCiAgCiAgCiMjIDkuIOmdnuaKgOacr+W4lgpb55Sf5L+h5YiG5p6Q5Li65LuA5LmI6KaB5L2/55So5pyN5Yqh5Zmo77yfXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDkxMDA3JmlkeD0xJnNuPTg2MTljMmJhZDIzNzkxYjMyNTJhMWM0Y2IxODMxOTMxJmNoa3NtPTliM2Y2NGVmYWM0OGVkZjljMDJmODQ5NTlhZWVlOWIxMjQ4MDczNmZjZTcwYzVkZGI4YjQxZDc5Y2ZjMjJjZTU5MGVhMmNiNjBmYmEmdG9rZW49MTc2MDYzNjI4MSZsYW5nPXpoX0NOI3JkKSAgClso5pyJcm9vdOadg+mZkOeahOWFseS6q+acjeWKoeWZqCzms6jlhozljbPpgIEyMDDvv6VdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5OTcwNyZpZHg9MSZzbj0xYjFiYjM1MDY5ZjZhODZlNTBiYzA4NjZhMjI1MDJiNyZjaGtzbT05YjNjODZlYmFjNGIwZmZkNTVkM2NkOWQ4MjQ3ZWFiNjExMDQ4MWYxYmY1M2U3ZmVkZTg0YzBkYjI5MzY2OTEwZGY4YmQ3OWRjYzQxJnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApb5Li65a6e6aqM5a6k5YeG5aSH5LiA5Lu955Sf54mp5L+h5oGv5a2m5LiN5Yqo5LqnXShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTIzODMmaWR4PTEmc249YjhkOTEyODc3Y2IzOGU4ZDhjOTA4NGQxZDkzNzBkZWQmY2hrc209OWIzYzlhNGZhYzRiMTM1OTI2MDkxYThhZjk3MmM0NWExN2EyZmExZjk0YzcwNDc3OWM2MGRmNWY3MzM4NDcwMzZjMzc5Nzg5NGMxYyZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKCgogIAogIAojIyMgMi4yLjIgYExpbnV4YOWfuuehgOaVmeeoiyAgCltC56uZ54iG5qy+6KeG6aKR5ZCM5q2l5pKt5Ye6XSgpICAKW0xpbnV4fCDkuIAu6K6h566X5py656Gs5Lu257uE5oiQXShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTE0MTMmaWR4PTEmc249MTI1MmFiYzNiZDU1ODRiZGY1ZDU5NDg3YzhkZDYxZTMmY2hrc209OWIzZjY2MDVhYzQ4ZWYxM2JmMGJjNjA1YTlmM2JiYTRiODA0ZjU2YjgyNGEwYjJhNTUwZjdjODMxNTE2NDQxZTgyOWYzNWVkOWY2OSZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW0xpbnV4fCDkuowu6K6h566X5py66L2v5Lu257uE5oiQ5LiOTGludXhdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5MjI0MyZpZHg9MSZzbj1iYmIwNmNmZDdhMDgzNjk0MzI2MmJmNDg5N2EzOTBkMSZjaGtzbT05YjNjOWJjM2FjNGIxMmQ1MjlkOWU1MTczYzFlZjIyZjQzZGIzZGJmZmFjOTE0MzM4NGZiNDYzZjMwZGExY2E2YWZlZWE4ZDk4N2JiJnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApbTGludXh8IOS4iS7lhY3otLnojrflvpdMaW51eOezu+e7ny1XU0xdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5MzI3OSZpZHg9MSZzbj1hYjdmNDMwZWE5OGRlN2YyOWQ4ZjRiZmIyMzhlYjBkNiZjaGtzbT05YjNjOWZjZmFjNGIxNmQ5MTZiYTE4NmU2NThmZmI4OTczMDQzZTg1ZjJmZDBjZjUyNGExZjI3NzE1MDU2NTU1YmEwMTMwYjBjMmQ1JnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApbTGludXh8IOWbmy7lhY3otLnojrflvpdMaW51eOezu+e7ny3omZrmi5/mnLpdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5MzY0OSZpZHg9MSZzbj0wYjMwNzAxNTdjYzE2YmI1NDQyNGJlYzViODY0MWQzMiZjaGtzbT05YjNjOTE0MWFjNGIxODU3NGE2YTA5YTc4NzQ5ZTQwZGY3YmJiYjMyMGZhZDJhNTkzZDdhNjE1ODY1MjYwODVlYmJkYWJkMTQ4Mzg0JnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApbTGludXh8IOS6lC7lhY3otLnojrflvpdMaW51eOezu+e7ny3mnI3liqHlmahdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5NDk5NCZpZHg9MiZzbj0wY2VjZDk0NTIyODc5MmE2YmUxMDhjY2E4M2U4NTc3OSZjaGtzbT05YjNjOTQwMmFjNGIxZDE0ODkzYjI4ZDg2MThkNDM3YzBhZWMxYWM2MTE3MTU0YmQ4ZmZlYWFjOGY4ZjEyOWRkZWZiMGQ0Mzc3Y2ZiJnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApbTGludXh8IOS6lC7lhY3otLnojrflvpdMaW51eOezu+e7ny3mnI3liqHlmahdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5NTA1NCZpZHg9MiZzbj0xM2QxZjhkMGM2YjhjOTc0ZTMxYTM1NWVkN2I5OTdlYiZjaGtzbT05YjNjOTRkZWFjNGIxZGM4MTQ3N2MyMzkzODBhZWEyMmFlYWM5NTJmYTA0OTVmNjFjZDc2OTM5M2QxNjVkODEyMmM0MmJhYjgzMGFmJnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApbTGludXh8IOWFrS7lkb3ku6TooYzkuI7kuI7ln7rmnKzlkb3ku6RdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5NTA1NCZpZHg9MiZzbj0xM2QxZjhkMGM2YjhjOTc0ZTMxYTM1NWVkN2I5OTdlYiZjaGtzbT05YjNjOTRkZWFjNGIxZGM4MTQ3N2MyMzkzODBhZWEyMmFlYWM5NTJmYTA0OTVmNjFjZDc2OTM5M2QxNjVkODEyMmM0MmJhYjgzMGFmJnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApbTGludXh8IOS4gy7ojrflj5ZMaW51eOWRveS7pOW4ruWKqeeahOWHoOenjeaWueW8j10oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDk1MDU0JmlkeD0xJnNuPTFhNDE4YjY4NzdmN2Q4OTA1OTAyYWJlN2Y3M2ViZjdhJmNoa3NtPTliM2M5NGRlYWM0YjFkYzhlMWRhNDc1NjEwODk5NGJhNmY0ZTBlMzg1Mzg1ZGYyMWQ4ZmJjNWEwOTQ3ZWRlZjM2OTU5MmI5YjFkM2Emc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgCltMaW51eHwg5YWrLkxpbnV455qE5paH5Lu255uu5b2V57O757ufXShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTYyOTEmaWR4PTImc249MTgxM2Y2NjE1YWEyZjVhODU5ODg1MWY0M2JmZGFmYmYmY2hrc209OWIzYzhiMzNhYzRiMDIyNWIzOTdiNTY0NjVkNTU5YWU4MGMxZDZjYzFhYjYxMzViYjEyMTUzYjliZWFhMDRmZjFlMGNhMWVjNDQwMiZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW0xpbnV4fCDkuZ0u6Lev5b6E5p+l55yL5LiO5YiH5o2iOiBwd2QsY2QsbHPlkb3ku6RdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5NjI5MSZpZHg9MSZzbj1lNGFmYzM2NTZjODIxNzNmZjVlYzhmYTZiMzljOWQ5ZiZjaGtzbT05YjNjOGIzM2FjNGIwMjI1YTUwNTUwMTk5YmI4NWMwMjU2NjdiMmMxMDRhZjI3MDgxMmUyYmFhODE1Nzc3ODkzMDg1NzJhYzRkYTIzJnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApbTGludXh8IOWNgS7pgJrphY3nrKZdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5NjQ0MiZpZHg9MSZzbj0zYTYwOTUxZGFmMzMxZjEzNGYyOTU5YjNlNjU0ZDA4NSZjaGtzbT05YjNjOGJhYWFjNGIwMmJjOTUyZDUyNmU0OTg4NjFlZmE0ZmFiZjBlYjhmYmRmNmI3ZjI5MWM3ZTgwZDAxMDVhYWZmNDU0MzIzY2NiJnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApbTGludXh8IDExLuaWh+S7tuWIoOmZpDogcm3lkb3ku6RdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5NjUyNyZpZHg9MSZzbj1mZThlZWMwYmU1OTk0YTA4NDk2YmY0MWQ4MDNhYmViOSZjaGtzbT05YjNjOGExZmFjNGIwMzA5NzRjNWMxYmRjOGNjZDE4Y2I5NmJhNmUyM2M1YWVhMjlmZTMwMzUzZGIwYjQzMzI5NGQ5OTUyZDc2NWMxJnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApbTGludXh8IDEyLuaWh+S7tueahOWkjeWItihjcCnkuI7np7vliqgobXYpXShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTY1OTkmaWR4PTEmc249NjQ4Yjk3YjNmZmMwZTdkMzdmYWY4YjcxZjdiYTJhOGUmY2hrc209OWIzYzhhYzdhYzRiMDNkMTFjMGJjODFhYTRjNDExZDZiZGFkMzRlNGMwN2NhZDQ3NmM3OTI5Mzg4NDRhZTJkNGU3NmUxYzk3OWM1NCZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW0xpbnV4fCAxMy7nlKjmiLfkuI7nu4TnvqTmpoLlv7VdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5NjYxMyZpZHg9MSZzbj00NjM2MjE3NjFmOGViYjI4YWUyMjljN2E0ZWZmODA5YSZjaGtzbT05YjNjOGFmNWFjNGIwM2UzN2EzZTk1OTYxN2E0OWZiMGU3MzA0YjA0MmRiZDdhNTQ4Y2RhNjIwYzY4MjAxMzYzMjIxNGU0MWFlOTExJnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApbTGludXh8IDE0LueUqOaIt+euoeeQhuWRveS7pCh1c2VyYWRkLCBwYXNzd2QsIHVzZXJkZWwsIHN1KV0oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDk2ODkyJmlkeD0xJnNuPTk2MGRiY2E4NDNhNTFhNzNjMWIzMzFhYmVlNWMxMjdkJmNoa3NtPTliM2M4ZGVjYWM0YjA0ZmEzZmIxZmVjMzc1ZTZjNjk1MGYyNzdmNmMxMjhjOWRlY2Y1YzM4YTY4OTA4NmVmNzk4ZjUxOWNkMTBhY2Qmc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgCltMaW51eHwgMTUu5paH5Lu25p2D6ZmQ566h55CGOiBjaG93biwgY2htb2RdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5NjkzMSZpZHg9MSZzbj0zOTJlMmI5N2Y4NTAzNzRjOTZkZTUwMTk0Yjk1YmZiZiZjaGtzbT05YjNjOGRiM2FjNGIwNGE1ZGRjNTc5NzBiY2IzNmY2NDU4NzcyNWQxZGRjZDliZWMxMmUwOTAyOTUzNDgzZWVlYzMxNGE1ZjRhM2FhJnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApbTGludXh8IDE2LuW/q+aNt+mUrl0oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NDk3MTgwJmlkeD0xJnNuPWU0ZDk5OGQ5YzlkNWE3NjcyY2JhNjc2NTRmN2U4YzFjJmNoa3NtPTliM2M4YzhjYWM0YjA1OWFiZDczZTFlMDI2ZjVkNzA1ZDFiZDJmMjU4ODNiNDYyY2IwOWJkYzcyZjE0MGZlMjcyN2Y5M2FiYjBjMWYmc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgCltMaW51eHwgMTcu6L6T5Ye66YeN5a6a5ZCRXShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTcyNTUmaWR4PTEmc249MzA0ZDU0OTI3MzgwNjhmMzNkMzc3MzE3YzMxYmY3NWImY2hrc209OWIzYzhmNzdhYzRiMDY2MWE3ZTQzMDYwNzFmMTI5ZjA2YTJjYTY4MGNhZWVjYWE5ZDZhZjFmMjQ3MjAxNzBkOWUxZmEzYTM3MWRlMSZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW0xpbnV4fCAxOC7nrqHpgZPnrKZdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5NzI2MSZpZHg9MSZzbj04ZDQxNzc5MzdmN2ZmNGVlN2RiMmViOWE1OTg3OGFmOSZjaGtzbT05YjNjOGY3ZGFjNGIwNjZiN2NlM2RkOWY4MTVkNjMxYmM0M2M4ZDcxMTVjNTA4Yzg4YzFiODAzOGIyYTVhZjViNmNmZGU2NzM0MTQ4JnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApbTGludXh8IDE5LuaWh+S7tuafpeaJviBmaW5kLCBsb2NhdGUsIHdoaWNoXShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTc3NDMmaWR4PTEmc249ZjhlOWZkYTdkMzI1MjYyZjEyOWE4MGZhZjc3MjE3ZGQmY2hrc209OWIzYzgxNWZhYzRiMDg0OWMxMmNmYjkyNmNlZjJlYWVkOGUwYzc3OWNiNTBjOTI2NDdjNDgyMzBiOTk0OTJkYzEyYWVkMTM1ZTAzZiZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW0xpbnV4fCAyMC7liKvlkI0gYWxpYXNdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5ODA1MCZpZHg9MSZzbj05ZjI5YTBjNTk0NzQzYTZjZDBjZTJiMmJlYWFlZjAzNyZjaGtzbT05YjNjODAxMmFjNGIwOTA0NjY2OTc5NTg4YzI1YjIwMjVlZGVkNDdkNWYwNTg4NWY5MTAxZDdkMGU4MWE5NmQ4ZmVlZmY4Mzc4NTljJnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApbTGludXh8IDIxLui9r+mTvuaOpeS4juehrOmTvuaOpWxuXShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTgwNzMmaWR4PTEmc249NjU4ZjkwNTliMDVjYzI4NTlkZWIzY2Q0ZjJiNWRmNGImY2hrc209OWIzYzgwMDlhYzRiMDkxZjliYWVhM2YzY2E2NDBiMTM4MzU4ZWRkNzY4ZDkwNjcwMzAwNDMyMzYyMjUxNmM3YWY3ZmVkYjcyYzQ0NiZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW0xpbnV4fCAyMi4gKOinoynljovnvKnkuI5tZDXlgLzmoKHpqoxdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5OTY2NCZpZHg9MSZzbj00ODY0MTYxOTQyZDQ1ZmVkZWUyZmEyOGU2ZDg1NDYwZSZjaGtzbT05YjNjODZjMGFjNGIwZmQ2N2ZmMTc5ODI5MGY5NTY5NWI4Mjg0OTQzZDQ2OGFhYTlhZTJkYjM4ZmU3OTkyN2VmNDdkZDdkNzNmN2Y2JnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApbTGludXh8IDIzLiDmlofku7bmn6XnnIsgd2MsIGNhdCwgaGVhZCwgdGFpbF0oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NTAwNDAxJmlkeD0xJnNuPWU0MjcwZTQyNmM3ZTFkY2JjNTVjZTkzMjA5NTVjMjFhJmNoa3NtPTliM2NiYjIxYWM0YjMyMzdiMWJlODdiMWVhNDY2NTg0ZmQ5OTZjMTg1NjRiNTBiNjVhNmZmN2U2NmQwNzMyNTMwYjBiZjVlMDA2ZWImc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgCltMaW51eHwgMjQuIOaWh+S7tua1j+iniOWZqCBtb3JlLGxlc3NdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzUwMDU1NCZpZHg9MiZzbj0zZDIwYjEzNWFjN2Y3ODUwMGQ0MzliZWFjMTZmMjA2NyZjaGtzbT05YjNjYmE1YWFjNGIzMzRjODlhZDJiMDQwYjkwZjI5MTExODA3MmJmM2E2ZWU1NjY1OTFiNDI5MjAxNjNhOTY1ZjMwOTVlNDFhNGU0JnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApbTGludXh8IDI1LiDmlofku7bnvJbovpHlmaggdmltXShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc1MDA5MDAmaWR4PTEmc249ZjhlNDE3MzdkMjI1ODhiZWFlYjZjZmVlYTg4NjVhN2QmY2hrc209OWIzY2JkMzRhYzRiMzQyMmRlZDczNDY2ZTg2MjExN2E1YjQ5ODllYjBjYTIxMjVmMmMxZjQ1YjY3ZjljYTM3NzJkNDBhMWJiNjgzNSZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW0xpbnV4fCAyNi4g5paH5Lu25aSE55CGIGN1dCwgcGFzdGVdKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzUwMTkzNCZpZHg9MSZzbj0yZjk0MmFlZjk1YmE1NDNhNWJmMDIyNmIwYzczMDFiZiZjaGtzbT05YjNjYjEzZWFjNGIzODI4MzgzMjlhODUxOTczMDM0NzYwMmU5OTMzNzRiMDYzZTdhYmFmY2VjYjdiMmY0NzZlZWRhZTZjOWRkOWJiJnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApbTGludXh8IDI3LiDmlofku7blpITnkIYgc29ydCwgdW5pcV0oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NTAyMDM5JmlkeD0xJnNuPThlOTJhNWY4NDUzMTViNmZkMmMwZDIyOWFhNjA2ZDE3JmNoa3NtPTliM2NiMTg3YWM0YjM4OTFiOWU5NGIxZTRjZDM4NDk5NzVkYjc0NjEyOTFhMWQ5MDVmMjhiMTc1MTYxOTgwM2ZjODllMzM1ZDlhODMmc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgCltMaW51eHwgMjguIOato+WImeihqOi+vuW8j10oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NTAyMTU2JmlkeD0xJnNuPWIwMDZkN2NiMDljZDM4ZWI3NTRhZDNmOGQxMTFmYTFiJmNoa3NtPTliM2NiMDFjYWM0YjM5MGE1ZjA1YTNmNTFkMGM5MzJmMzVjOWQ1ZDdiMjNlNmFhODkzOWY2MGE1NThiZjIzOTZmYjNjYmZmYTAxOTEmc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgCltMaW51eHwgMjkuIOaWh+acrOWkhOeQhiBncmVwXShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc1MDIzNjAmaWR4PTEmc249ZTE0M2JlMTA0MzY0MGNlNDc1MjhkMTdlZWQ3ODQ5ODQmY2hrc209OWIzY2IzNDhhYzRiM2E1ZTY5YjE0YjA3MmI4YmE4MjhmMGNhYmRkZjQyYWEzYTcxNDAxOThjNjMxZGYxOWQ5OWM0ZWVmMzllNmJlNiZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAgIApbTGludXh8IDMwLiDmlofmnKzlpITnkIYgc2Vk5ZG95LukXShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc1MDI0MTEmaWR4PTEmc249ZjRjOWVjZDg1NWE2Yzc1ZjYyMDYzMGY3MTBmNWExMjAmY2hrc209OWIzY2IzMWJhYzRiM2EwZDg5ZmNjZjM5MTU0Yzc0ZjU0OGYzYjFiMzE0NGY1OGM4MDhiNWM0MDBhZWM2NDViZmY2NGVlYThhZTE2YyZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW0xpbnV4fCAzMS4g5paH5pys5aSE55CGIGF3a+WRveS7pF0oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NTAyNDI0JmlkeD0xJnNuPTZmZjkzYWU0OTc0ZWVjNzU0N2UyZTRmMGYwYjEzOWZjJmNoa3NtPTliM2NiMzA4YWM0YjNhMWU0YTA2YTMyMTZlYTFjMzUxZTk2NzA1MTM2MjQxYTBlNmE0OTZkNDcyY2UyOWZmZTBhNjMzMzUzZDllMGImc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgCltMaW51eHwgMzIuIHNoZWxs6ISa5pysXShodHRwOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc1MDMwODAmaWR4PTEmc249ODhlZDg4MzVjZjg3NzE1NmY5MDg5ZmMzNzc5NWI2MmQmY2hrc209OWIzY2I1YjhhYzRiM2NhZWU2ZWU4YjI4YzA4YTc0OGViNGVhYzFhYzJlNjNiMTMzNDMwNTNlZmUwMzkzNjM1ODljMjQ4M2IyMTljZCZzY2VuZT0yMSN3ZWNoYXRfcmVkaXJlY3QpICAKW0xpbnV4fCAzMy4gc2hlbGzlj5jph49dKGh0dHA6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzUwMzA5OSZpZHg9MSZzbj0yN2MwODNkNzFhMjg4MjBiZTZmZmIxMzMzYTk3ODk4YyZjaGtzbT05YjNjYjVhYmFjNGIzY2JkYjczMDc3YWExOTc2ZTJhZmJhZTg2NTZlYTY0Mjk0MmYxZTBmNjBkMTEwMzJmNjhkOGIxZTBjYzdiOGQ0JnNjZW5lPTIxI3dlY2hhdF9yZWRpcmVjdCkgIApbTGludXh8IDM0LiBpZuadoeS7tuivreWPpV0oaHR0cDovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NTAzMTQwJmlkeD0xJnNuPTYwYzVmMWIxMzE1MjQ1ZDlhOWEyZDNmMzBjMTZjOGQ1JmNoa3NtPTliM2NiNDc0YWM0YjNkNjJjMDUzMDA5NDVlMWExZmRjMGFmMGMwYzVhZjcyZmNlN2VlZTc1MmZiMjBkMmU5OWM2ZTBjYTMwMzNkNmImc2NlbmU9MjEjd2VjaGF0X3JlZGlyZWN0KSAgCltMaW51eHwgMzUuIOW+queOr10oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzUwMzE0NCZpZHg9MSZzbj05ZGNlNmQ5YzBmOGFlNTZjMGNlZWU1NDViNDgwZTc2ZSZjaGtzbT05YjNjYjQ3OGFjNGIzZDZlNDk3ZjQ4MGExNTU0NWUwOWIwZGJhYmZkY2NkMmE4ZWQ4Mjc0MWRkM2E5ODQ5OTQ1MTIyODcxNzdlZjRkJnRva2VuPTQ3ODQxMjExMCZsYW5nPXpoX0NOI3JkKSAgCiAgCiAgCiMjIyAyLjIuMyBS6K+t6KiA5pWZ56iLICAK5oyB57ut5pu05paw5Lit77yM5pWs6K+35pyf5b6F77yaW+eUn+S/oVLor63oqIDkv53lp4bnuqfmlZnnqItdKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9tcC9hcHBtc2dhbGJ1bT9fX2Jpej1NekF3TXpJek9UazVPUT09JmFjdGlvbj1nZXRhbGJ1bSZhbGJ1bV9pZD0zMDgzMjI1NDgyNjIxNjQ4ODk4I3dlY2hhdF9yZWRpcmVjdCkgIArnmb7luqbkupHotYTmlpnkuK3mnIlS6K+t6KiA5Y+C6ICD5Lmm44CCICAKW+S4i+i9vemTvuaOpV0oaHR0cHM6Ly9wYW4uYmFpZHUuY29tL3MvMWJXYk5iT3JYSFVwZXUwcVNKdjQ5aWc/cHdkPXB0ZXkpICAKICAKICAKIyMjIDIuMi40IOacjeWKoeWZqOWHhuWkhyAgCuS4i+WIl+aVmeeoi+Wunua1i+iHs+WwkemcgOimgWA05qC4YOS7peWPimA2MEdCYOeahOWGheWtmO+8jOWmguaenOiHquW3seeUteiEkeS4jea7oei2s+iuoeeul+imgeaxgueahOWQjOWtpuWPr+S7peWPguiAg+S7peS4i+WGheWuue+8miAgClvnlJ/kv6HliIbmnpDkuLrku4DkuYjopoHkvb/nlKjmnI3liqHlmajvvJ9dKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc1MDEwOTkmaWR4PTEmc249Nzg0NDYxNDcxODQyOTJmYWQzNDE3NDk1OTI2YjMwOTYmY2hrc209OWIzY2JjN2JhYzRiMzU2ZGNmMDQ2MDc4MWY5YmYxNmRmNGVkZTQ4MWY4Y2M1NzI4MmM3Mzg0YjlkMmJhY2NhYTgyMGQ2NGM4OWJhYiZzY2VuZT0xNzgmY3VyX2FsYnVtX2lkPTI3MjU1MjEyMTkzNDkxNTE3NDUjcmQpICAKW+eLrOS6q+acjeWKoeWZqO+8jOa7oei2s+S9oOWvueeUn+S/oeWIhuaekOeahOaJgOacieW5u+aDs10oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzUwMDExMSZpZHg9MSZzbj0xZGZjNjY4MjYzNjE0ZWZiODJlMDY1OWFmNWZjZDQzOCZjaGtzbT05YjNjYjgxZmFjNGIzMTA5YThlMTlhMDljYzY4MTIyYjE5NDNkY2Q0NWM2NTM2MjdlNzdkZmE0N2Q0NzYyODAwNzllYTZhOGRkNjNkJnNjZW5lPTE3OCZjdXJfYWxidW1faWQ9MjcyNTUyMTIxOTM0OTE1MTc0NSZwb2NfdG9rZW49SEZ1OTdtU2o5aHlCV21RS0gzd01obWVXQkdZdEV4bFRwX1RyZHduNikgIApb5Li65a6e6aqM5a6k5YeG5aSH5LiA5Lu955Sf54mp5L+h5oGv5a2m5LiN5Yqo5LqnXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NTAyOTMyJmlkeD0xJnNuPTQwMWQzODRkNDc2MTYwMjkzNzUyMjRiMmQwYTNjOTMzJmNoa3NtPTliM2NiNTA0YWM0YjNjMTI5OWFhYzVjOWYwNzQ3Y2NjMzY3NzczOTBkMmE5MzllMWVkNGFmMzdjMjgzNmMxZjdlOGI0YWY2MTI5ODkmc2NlbmU9MTc4JmN1cl9hbGJ1bV9pZD0yNzI1NTIxMjE5MzQ5MTUxNzQ1I3JkKSAgCiAgCiAgCiMjIDIuMyDkvp3otZblt6XlhbfkuIvovb0gIAojIyMgMi4zLjEgYGNvbmRhYOS4jmBtYW1iYWAgIApgYGB7YmFzaCxldmFsPUZ9CiMg5LiL6L29QW5hY29uZGHvvJoKd2dldCBodHRwczovL3JlcG8uYW5hY29uZGEuY29tL21pbmljb25kYS9NaW5pY29uZGEzLWxhdGVzdC1MaW51eC14ODZfNjQuc2gKIyDlronoo4XvvJoKYmFzaCBBbmFjb25kYTMtNS4zLjEtTGludXgteDg2XzY0LnNoCiMg55av54uC5oyJ5Zue6L2m77yM6YGH5Yiw6K+i6Zeu6L6T5Ye6eWVz77yM5rOo5oSPdnMgY29kZeWuieijheivoumXrumAieaLqW5vCgojIOWIqeeUqGNvbmRh5a6J6KOFbWFtYmHvvIzlkI7ogIXkuI7liY3ogIXlip/og73nm7jlkIzvvIzkvYbov5DooYzpgJ/luqbmm7Tlv6vvvJoKY29uZGEgaW5zdGFsbCBtYW1iYQoKYGBgCiAgCiAgCiMjIyAyLjMuMiBgZ2ZmcmVhZGAgCueUqOS6juWQjumdoueahGBnZmZg5paH5Lu26L2sYGd0ZmDmlofku7bvvIznlKhgbWFtYmFg6KOF6LW35p2l5b6I5pa55L6/ICAgIApgYGB7YmFzaCxldmFsPUZ9CiMg5LiA6KGM5pCe5a6aOgptYW1iYSBpbnN0YWxsIGdmZnJlYWQKCiMg5b2T54S25L2g5Lmf5Y+v5Lul6Ieq6KGM5LuOZ2l0aHVi5oqT5Y+W5bm25a6J6KOF77yaCiMg5a6J6KOFZ2ZmcmVhZAojIOS4i+i9veaWh+S7tu+8mgpnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL2dwZXJ0ZWEvZ2ZmcmVhZAojIOWIh+aNouW3peS9nOi3r+W+hO+8mgpjZCBnZmZyZWFkCiMg57yW6K+R5a6J6KOF77yaCm1ha2UgcmVsZWFzZQojIOWIh+aNouW3peS9nOi3r+W+hO+8mgpjZCAuLi8KYGBgCiAgCiAgCiMjIyAyLjMuMyBgYW5ub3ZhcmDlronoo4Xlj4rlupPmlofku7bkuIvovb17I2Fubm92YXLot7Povax9CmBgYHtiYXNoLGV2YWw9Rn0KIyBhbm5vdmFy5LiL6L296YWN572u77yaCndnZXQgaHR0cDovL3d3dy5vcGVuYmlvaW5mb3JtYXRpY3Mub3JnL2Fubm92YXIvZG93bmxvYWQvMHdneFIycklWUC9hbm5vdmFyLmxhdGVzdC50YXIuZ3oKIyDku6XkuIrpk77mjqXlj6/og73kvJrlpLHmlYjvvIzlpoLlpLHmlYjlj6/lnKjnmb7luqbkupHnm5jkuK3kuIvovb3vvJpodHRwczovL3Bhbi5iYWlkdS5jb20vcy8xYldiTmJPclhIVXBldTBxU0p2NDlpZz9wd2Q9cHRleQoKIyDop6PljovvvJoKdGFyIC14dmYgYW5ub3Zhci5sYXRlc3QudGFyLmd6CgojIOWIh+aNouW3peS9nOi3r+W+hO+8mgpjZCBhbm5vdmFyCiAgCiMg5aSn57qm6Iqx6LS55LiA5Liq5bCP5pe277yM5YW35L2T5Y+W5Yaz5LqO5py65Zmo56Gs5Lu26YWN572u5LiO572R6YCf77yaCnBlcmwgYW5ub3RhdGVfdmFyaWF0aW9uLnBsIC1idWlsZHZlciBoZzM4IC0tZG93bmRiIC0td2ViZnJvbSBhbm5vdmFyIHJlZkdlbmUgaHVtYW5kYi8KcGVybCBhbm5vdGF0ZV92YXJpYXRpb24ucGwgLWJ1aWxkdmVyIGhnMzggLS1kb3duZGIgLS13ZWJmcm9tIGFubm92YXIgZ25vbWFkMzEyX2dlbm9tZSBodW1hbmRiLwpwZXJsIGFubm90YXRlX3ZhcmlhdGlvbi5wbCAtYnVpbGR2ZXIgaGczOCAtLWRvd25kYiAtLXdlYmZyb20gYW5ub3ZhciBleGFjMDMgaHVtYW5kYi8KcGVybCBhbm5vdGF0ZV92YXJpYXRpb24ucGwgLWJ1aWxkdmVyIGhnMzggLS1kb3duZGIgLS13ZWJmcm9tIGFubm92YXIgYXZzbnAxNTAgaHVtYW5kYi8KcGVybCBhbm5vdGF0ZV92YXJpYXRpb24ucGwgLWJ1aWxkdmVyIGhnMzggLS1kb3duZGIgLS13ZWJmcm9tIGFubm92YXIgMTAwMGcyMDE1YXVnIGh1bWFuZGIvCnBlcmwgYW5ub3RhdGVfdmFyaWF0aW9uLnBsIC1idWlsZHZlciBoZzM4IC0tZG93bmRiIC0td2ViZnJvbSBhbm5vdmFyIGNsaW52YXJfMjAyMjAzMjAgaHVtYW5kYi8KcGVybCBhbm5vdGF0ZV92YXJpYXRpb24ucGwgLWJ1aWxkdmVyIGhnMzggLS1kb3duZGIgLS13ZWJmcm9tIGFubm92YXIgY29zbWljNzAgaHVtYW5kYi8KCiMg5pu05pS55paH5Lu25ZCN77yM5pa55L6/5ZCO57utbXV05qih5Z2X6LCD55So77yaCm12IGhnMzhfZ25vbWFkMzEyX2dlbm9tZS50eHQgaGczOF9nbm9tYWQudHh0Cm12IGhnMzhfY2xpbnZhcl8yMDIyMDMyMC50eHQgaGczOF9jbGludmFyLnR4dAptdiBoZzM4X2Nvc21pYzcwLnR4dCBoZzM4X2Nvc21pYy50eHQKbXYgaGczOF9hdnNucDE1MC50eHQgaGczOF9hdnNucC50eHQKbXYgaGczOF9leGFjMDMudHh0ICBoZzM4X2V4YWMudHh0CgojIOWwhmFubm92YXLot6/lvoTmt7vliqDoh7TphY3nva7mlofku7bkuK3vvJoKZWNobyAiZXhwb3J0IFBBVEg9L2hvbWUvYmlvbWFtYmEvYW5hbHlzaXMveHVueWluL2Fubm92YXI6JFBBVEgiID4+IH4vLmJhc2hyYwpzb3VyY2Ugfi8uYmFzaHJjCgpgYGAKICAKICAKIyMjIDIuMy40IGBmYXN0cGDkuIvovb3lronoo4UgIApgZmFzdHBg55So5LqO5Y6f5aeLYGZhc3RxYOaWh+S7tui/h+a7pOeUn+aIkGBjbGVhbiBmYXN0cWAgIAogIApgYGB7YmFzaCxldmFsPUZ9CiMg5LiL6L2977yaCndnZXQgaHR0cDovL29wZW5nZW5lLm9yZy9mYXN0cC9mYXN0cAojIOaXoOmcgOWuieijhe+8jOi1i+S6iOi/kOihjOadg+mZkOWNs+WPrwpjaG1vZCBhK3ggLi9mYXN0cApgYGAKICAKICAKICAKIyMgMi40IGBTZWVrU291bMKuVG9vbHNg5LiL6L295LiO5a6J6KOFICAK5pys5omL5YaM55So5Yiw55qE5omA5pyJ6LWE5paZ5Z2H5Y+v5Zyo5Lul5LiL6ZO+5o6l5LiL6L2977yaICAKW+eZvuW6puS6keebmOmTvuaOpV0oaHR0cHM6Ly9wYW4uYmFpZHUuY29tL3MvMWJXYk5iT3JYSFVwZXUwcVNKdjQ5aWc/cHdkPXB0ZXkpICAgCgogIApbYFNlZWtTb3Vswq5Ub29sc2DkuIvovb3pk77mjqVdKGh0dHBzOi8vc2Vla2dlbmUtcHVibGljLm9zcy1jbi1iZWlqaW5nLmFsaXl1bmNzLmNvbS9mYXN0X3NlZWtzb3VsX2RhdGEvc2Vla3NvdWx0b29sc19mYXN0X211dF9kZXYudGFyLmd6P09TU0FjY2Vzc0tleUlkPUxUQUk1dDdleVJDejhkR2FFaHdGYU1TViZFeHBpcmVzPTEwMDE2ODcyNDY3OTkmU2lnbmF0dXJlPVZIZ1d5UHNabVJtOFNTOXk2NXRiRFdZV2k5YyUzRCkgIAogIArlvZPliY3mlZnnqIvmvJTnpLrnmoTmmK9gc2Vla3NvdWx0b29scyAxLjBgIOeJiOacrOWItuS9nAoKYHNlZWtzb3VsIHRvb2xzYOi9r+S7tueUsSoq5a+75Zug55Sf54mp5YWs5Y+4KirotJ/otKPlvIDlj5Hlkoznu7TmiqTvvIzmm7TmlrDniYjmnKznmoRzZWVrc291bCB0b29scyDova/ku7bop4E6IGh0dHA6Ly9zZWVrc291bC5zZWVrZ2VuZS5jb20vICAKICAKCmBgYHtiYXNoLGV2YWw9Rn0KIyDkuIvovb3kuIrov7Dova/ku7blkI7vvIzlnKhMaW51eOe7iOerr+S4rei/m+ihjOWuieijhQoKIyDliJvlu7rmlofku7blpLnvvJoKbWtkaXIgLXAgc2Vla3NvdWx0b29scwojIOWIh+aNouW3peS9nOebruW9lQpjZCBzZWVrc291bHRvb2xzCgojIOino+WOiwp0YXIgenhmIHNlZWtzb3VsdG9vbHNfZmFzdF9tdXRfZGV2LnRhci5negoKIyDmv4DmtLtzZWVrc291bHRvb2xz546v5aKDCnNvdXJjZSBzZWVrc291bHRvb2xzL2Jpbi9hY3RpdmF0ZQoKIyDliKnnlKhjb25kYemFjee9rui9r+S7tgpzZWVrc291bHRvb2xzL2Jpbi9jb25kYS11bnBhY2sKCiMg5bCG5paH5Lu25a6J6KOF5Zyw5Z2A6YWN572u5Yiw546v5aKD5Y+Y6YePUEFUSOS4re+8mgpleHBvcnQgUEFUSD1gcHdkYC9zZWVrc291bHRvb2xzL2JpbjokUEFUSAoKIyDlsIbphY3nva7lhpnlhaV+Ly5iYXNocmPvvIzov5nmoLfmr4/mrKHnmbvlhaXmnI3liqHlmajml7blnYfkvJrnlJ/mlYgKZWNobyAiZXhwb3J0IFBBVEg9JChwd2QpL3NlZWtzb3VsdG9vbHMvYmluOlwkUEFUSCIgPj4gfi8uYmFzaHJjCgojIOWuieijhei1t+adpeaAu+S9k+avlOi+g+aZuuiDve+8jOS4iui/sOatpemqpOayoeaKpemUmeWNs+S4uuaIkOWKnwoKIyDmiYDku6XvvIzmiJHnmoTlt6XkvZzot6/lvoTlnKjvvJoKY2QgL2hvbWUvYmlvbWFtYmEvYW5hbHlzaXMveHVueWluLwpgYGAKCiAgCiMjIDIuNSDlj4LogIPln7rlm6Dnu4TkuIvovb3lj4rntKLlvJXmnoTlu7ogICAgCiAgICAKYGBge2Jhc2gsZXZhbD1GfQojIOWIm+W7uuaWh+S7tuWkue+8mgpta2RpciBteV9yZWZmZXJlbmNlCgojIOWIh+aNouW3peS9nOebruW9le+8mgpjZCBteV9yZWZmZXJlbmNlCgpgYGAKICAK5LiL5paH5pWZ56iL5Li65Lq657G75p2l5rqQ57uG6IOe57O75pWw5o2u77yM5Zug5q2k5oiR5Lus5Lul5Lq657G75Y+C6ICD5Z+65Zug57uE55qE5Lik5Liq54mI5pysYEdSQ2gzOGDkuI5gaGczOGDkuLrkvovjgIIgIAogIAojIyMgMi41LjEgYEdSQ2gzOGAgIArov5nkuIDmraXvvIzkvaDlj6/ku6XpgInmi6nnm7TmjqXkuIvovb3mnoTlu7rlpb3nmoTlj4LogIPln7rlm6Dnu4TvvIzmiJbogIXoh6rooYzmnoTlu7ogIAogIAojIyMjICgxKSDnm7TmjqXkuIvovb0gIApgYGB7YmFzaCxldmFsPUZBTFNFfQojIHdnZXTkuIvovb3vvJoKd2dldCAtYyAtTyBHUkNoMzgudGFyLmd6ICJodHRwczovL3NlZWtnZW5lLXB1YmxpYy5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vc29mdHdhcmUvZGF0YS9yZWZlcmVuY2UvR1JDaDM4LnRhci5neiIKIyDop6PljovvvJoKdGFyIC16eHZmIEdSQ2gzOC50YXIuZ3oKCiMg5oiW6ICF6YCa6L+HY3VybOS4i+i9ve+8mgpjdXJsIC1DIC0gLW8gR1JDaDM4LnRhci5neiAiaHR0cHM6Ly9zZWVrZ2VuZS1wdWJsaWMub3NzLWNuLWJlaWppbmcuYWxpeXVuY3MuY29tL3NvZnR3YXJlL2RhdGEvcmVmZXJlbmNlL0dSQ2gzOC50YXIuZ3oiCiMg6Kej5Y6LCnRhciAtenh2ZiBHUkNoMzgudGFyLmd6CmBgYAogIAogIAogIAogIAojIyMjICgyKSDoh6rooYzmnoTlu7ogIAogIApgYGB7YmFzaCxldmFsPUZ9CiMg5LiL6L29R1JDaDM45Z+65Zug57uEZmF0c3Hmlofku7bvvJoKd2dldCBodHRwczovL2Z0cC5uY2JpLm5sbS5uaWguZ292L3JlZnNlcS9IX3NhcGllbnMvYW5ub3RhdGlvbi9HUkNoMzhfbGF0ZXN0L3JlZnNlcV9pZGVudGlmaWVycy9HUkNoMzhfbGF0ZXN0X2dlbm9taWMuZm5hLmd6IAojIOS4i+i9vUdSQ2gzOOWfuuWboOe7hGdmZuazqOmHiuaWh+S7tu+8mgp3Z2V0IGh0dHBzOi8vZnRwLm5jYmkubmxtLm5paC5nb3YvcmVmc2VxL0hfc2FwaWVucy9hbm5vdGF0aW9uL0dSQ2gzOF9sYXRlc3QvcmVmc2VxX2lkZW50aWZpZXJzL0dSQ2gzOF9sYXRlc3RfZ2Vub21pYy5nZmYuZ3oKCmd1bnppcCAuLypnegoKICAKIyDlsIZnZmbmlofku7bovazmjaLkuLpndGbmlofku7bvvJoKZ2ZmcmVhZCAgR1JDaDM4X2xhdGVzdF9nZW5vbWljLmdmZiAtVCAtbyBHUkNoMzhfbGF0ZXN0X2dlbm9taWMuZ3RmICAKCiMg6L+Q6KGMU1RBUuaehOW7uuWfuuWboOe7hOe0ouW8le+8jOaIkeeahOacuuWZqOS4iuWkp+e6puiKsei0uTEuNWjvvIzlhbfkvZPml7bplb/pnIDopoHlj5blhrPkuo7kvaDnmoTnoazku7bmnaHku7bvvJogIApub2h1cCBTVEFSIFwgCi0tcnVuTW9kZSBnZW5vbWVHZW5lcmF0ZSBcCi0tZ2Vub21lRGlyIC9ob21lL2Jpb21hbWJhL2FuYWx5c2lzL3h1bnlpbi9zZWVrc291bHRvb2xzL215X3JlZmZlcmVuY2UvR1JDaDM4X2luZGV4IFwgIyDln7rlm6Dnu4TntKLlvJXovpPlh7rot6/lvoQKLS1nZW5vbWVGYXN0YUZpbGVzIC9ob21lL2Jpb21hbWJhL2FuYWx5c2lzL3h1bnlpbi9zZWVrc291bHRvb2xzL215X3JlZmZlcmVuY2UvR1JDaDM4X2xhdGVzdF9nZW5vbWljLmZuYSBcICMg5Z+65Zug57uEZmFzdHHmlofku7YKLS1zamRiR1RGZmlsZSAvaG9tZS9iaW9tYW1iYS9hbmFseXNpcy94dW55aW4vc2Vla3NvdWx0b29scy9teV9yZWZmZXJlbmNlL0dSQ2gzOF9sYXRlc3RfZ2Vub21pYy5ndGYgXCAjIOWfuuWboOe7hOazqOmHimd0ZuaWh+S7tuWcsOWdgCAKLS1zamRiT3ZlcmhhbmcgMTQ5IFwgICMg6K+75q616ZW/5bqm77yMUEUxNTDliJnloasxNDkKLS1ydW5UaHJlYWROIDggJiAjIOW5tuihjOiuoeeul+iwg+eUqOeahOe6v+eoi+aVsAogIAojIOaehOW7uuWlveWQjuW+heWQjue7reiwg+eUqApgYGAKICAKICAKIyMjIDIuNS4yIGBoZzM4YCAgCmBgYHtiYXNoLGV2YWw9Rn0KIyMjIGhnMzggIyMjIwojIOWIm+W7uuebruW9le+8mgpta2RpciAvaG9tZS9iaW9tYW1iYS9hbmFseXNpcy94dW55aW4vc2Vla3NvdWx0b29scy9teV9yZWZmZXJlbmNlL2hnMzgvCiMg5pu05pS55bel5L2c6Lev5b6E77yaCmNkIGhnMzgKIyDmiJHnmoTmnLrlmajoirHotLnkupTliIbpkp/vvIzkuLvopoHlj5blhrPkuo7nvZHpgJ/vvJoKd2dldCAtLXRpbWVzdGFtcGluZyAgJ2Z0cDovL2hnZG93bmxvYWQuY3NlLnVjc2MuZWR1L2dvbGRlblBhdGgvaGczOC9jaHJvbW9zb21lcy8qJwoKIyDop6PljosKZ3VuemlwIC4vKmd6CgojIOWQiOW5tmZhc3Rx5paH5Lu277yaCmNhdCAuLypmYSA+IGhnMzguZmEKCiMg5LiL6L295Z+65Zug57uE5rOo6YeKZ3Rm5paH5Lu277yaCndnZXQgaHR0cHM6Ly9oZ2Rvd25sb2FkLnNvZS51Y3NjLmVkdS9nb2xkZW5QYXRoL2hnMzgvYmlnWmlwcy9nZW5lcy9oZzM4LnJlZkdlbmUuZ3RmLmd6CiMg6Kej5Y6L77yaCmd1bnppcCBoZzM4LnJlZkdlbmUuZ3RmLmd6CiAKIyDov5DooYxTVEFS5p6E5bu657Si5byV77yaIApub2h1cCBTVEFSIFwKLS1ydW5Nb2RlIGdlbm9tZUdlbmVyYXRlIFwKLS1nZW5vbWVEaXIgL2hvbWUvYmlvbWFtYmEvYW5hbHlzaXMveHVueWluL3NlZWtzb3VsdG9vbHMvbXlfcmVmZmVyZW5jZS9oZzM4L2hnMzhfaW5kZXggXAotLWdlbm9tZUZhc3RhRmlsZXMgL2hvbWUvYmlvbWFtYmEvYW5hbHlzaXMveHVueWluL3NlZWtzb3VsdG9vbHMvbXlfcmVmZmVyZW5jZS9oZzM4L2hnMzguZmEgXAotLXNqZGJHVEZmaWxlIC9ob21lL2Jpb21hbWJhL2FuYWx5c2lzL3h1bnlpbi9zZWVrc291bHRvb2xzL215X3JlZmZlcmVuY2UvaGczOC9oZzM4LnJlZkdlbmUuZ3RmIFwKLS1zamRiT3ZlcmhhbmcgMTQ5IFwgIAotLXJ1blRocmVhZE4gOCAmCmBgYAogIAogIAojIyMgMi41LjMgYHJSTkFg5Z+65Zug57uE57Si5byVICAKICAKYGBge2Jhc2gsZXZhbD1GfQojIHJSTkHln7rlm6Dnu4QKd2dldCAtYyAtTyBoZzM4X3JSTkEudGFyICJodHRwczovL3NlZWtnZW5lLXB1YmxpYy5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vc29mdHdhcmUvZGF0YS9yZWZlcmVuY2UvaGczOF9yUk5BLnRhci5neiIKIyDop6PljosKdGFyIC16eHZmIGhnMzhfclJOQS50YXIKYGBgCiAgCiAgCiMg5LiJ44CBYGZhc3Rg5qih5Z2XICAKIyMgMy4xIGBybmFg5Y+KYGZhc3Rg5qih5Z2X566X5rOV5Y+K5rWB56iL6K+05piOICAKYHJuYWDmqKHlnZfnlKjkuo7or4bliKvnu4bog57moIfnrb5gYmFyY29kZWDvvIzmr5Tlr7nlrprph4/vvIzlvpfliLDlj6/nlKjkuo7kuIvmuLjliIbmnpDnmoTnu4bog57ooajovr7nn6npmLXvvIzkuYvlkI7ov5vooYznu4bog57ogZrnsbvlkozlt67lvILliIbmnpDvvIzor6XmqKHlnZfkuI3ku4XmlK/mjIFgU2Vla09uZWDns7vliJfor5XliYLnm5Lkuqflh7rmlbDmja7vvIzov5jlj6/pgJrov4flr7lgYmFyY29kZWDnmoTmj4/ov7DvvIzmlK/mjIHlpJrnp43oh6rlrprkuYnorr7orqHnu5PmnoTjgILln7rkuo5gcm5hYOaooeWdl+W8gOWPkeWHuueahGBmYXN0YOaooeWdl+S4k+mXqOeUqOS6juWFqOW6j+WIl+aVsOaNrihgc2NGQVNULXNlcWAp55qE5YiG5p6Q44CCICAKICAKICAgCi0gU3RlcDE6IGJhcmNvZGUvdW1p5o+Q5Y+WICAKc2Vla3NvdWx0b29sc+WPr+S7peagueaNruS4jeWQjOeahFIx57uT5p6E6K6+6K6h5ZKM5q+P56eN57uT5p6E55qE5LiN5ZCM55qE5Y+C5pWw5a+5YmFyY29kZS91bWnmj5Dlj5blkozlpITnkIbvvIzlr7lSMeS7peWPiuWvueW6lOeahFIy6L+b6KGM6L+H5ruk77yM55Sf5oiQ5paw55qEUjLmlofku7bjgIIoYGZhc3Rg6ZKI5a+55YWo5bqP5YiX5pWw5o2u77yM5L+d55WZ5LqGYHJlYWRzMWDljrvpmaRgYmFyY29kZVVNSWDnrYnpg6jliIblkI7nmoTmlbDmja7vvIzov5vooYzlj4znq6/mr5Tlr7nvvIzlubbln7rkuo7mraTnu5PmnpzlkI7nu63ov5vooYzliIbmnpApCgoq57uT5p6E5o+P6L+w77yM5Lul5LiL55qE5Lik56eNUjHnu5PmnoTkuLrkvovvvJoqCmBNTTogQjhMOEI4TDEwQjhVOGDvvIjplJnkvY3orr7orqEpICAKYEREVjI6IEIxN1UxMmAgIAogIApgYGB7YmFzaCxldmFsPUZ9CkLooajnpLpiYXJjb2Rl6YOo5YiG56Kx5Z+677ybCkzooajnpLpsaW5rZXLpg6jliIbnorHln7rvvJsKVeihqOekunVtaemDqOWIhueiseWfuu+8mwpY6KGo56S65Lu75oSP56Kx5Z+677yM55So5LqO5Y2g5L2N77ybCuWtl+avjeWQjuaVsOWtl+ihqOekuueiseWfuumVv+W6puOAggpgYGAKICAKKumUmeS9jeiuvuiuoeeahEFuY2hvcuWumuS9jSogIArmnInkupvorr7orqHkuIvvvIzkuLrkuobkvb/mtYvluo9gcmVhZHNg56Kx5Z+65aSa5qC35oCn77yM5Yqg5YWl5LqGYDEtNGJwYOeahOenu+eggeeiseWfuu+8jOWNs2BhbmNob3Jg77ybYGFuY2hvcmDlhrPlrprkuoZgYmFyY29kZWDnmoTotbflp4vkvY3nva7jgIJgc2Vla3NvdWx0b29sc2DlsJ3or5XlnKhgUjFg5bqP5YiX5YmNN+S4queiseWfuuS4reWvu+aJvmBBbmNob3Jg5bqP5YiX77yM6Iul5rKh5om+YOWIsGFuY2hvcmDluo/liJfvvIzmraTmnaFgcmVhZGDku6Xlj4rlr7nlupTnmoRSMuiiq+iupOS4uuaYr+aXoOaViGByZWFkYOOAgiAgCiAgCiAgCipCYXJjb2Rl5ZKMTGlua2Vy55+r5q2jKiAgCmBCYXJjb2RlYOW6j+WIl+acieS4gOWumuWHoOeOh+WPkeeUn+a1i+W6j+mUmeivr+eahOaDheWGte+8jOWcqOaPkOS+m+acieeZveWQjeWNleeahOaDheWGteS4i++8jGBzZWVrc291bHRvb2xzYOWPr+S7peWunueOsGBiYXJjb2RlYOefq+ato+WKn+iDveOAguW9k2BiYXJjb2RlYOWtmOWcqOS6jueZveWQjeWNleS4reaXtu+8jOaIkeS7rOiupOS4uuWug+aYr+acieaViOeahGBiYXJjb2RlYO+8jOe7n+iuoeacieaViGBiYXJjb2RlYOWvueW6lOeahGByZWFkc2DmlbDph4/jgILlvZNgYmFyY29kZWDkuI3lrZjlnKjkuo7nmb3lkI3ljZXkuK3ml7bvvIzmiJHku6zorqTkuLrlroPmmK/ml6DmlYjnmoRgYmFyY29kZWDjgILlnKjlvIDlkK/nn6vmraPlip/og73ml7bvvIzlvZPml6DmlYhgYmFyY29kZWDkuIDkuKrnorHln7rplJnphY3vvIjkuIDkuKpgaGFtbWluZyBkaXN0YW5jZWDvvInnmoTluo/liJflrZjlnKjkuo7nmb3lkI3ljZXkuK3vvIzmiJHku6zkvJrov5vooYzku6XkuIvlh6Dnp43lpITnkIbvvJoKCuWPquacieWUr+S4gOS4gOS4quW6j+WIl+WtmOWcqOS6jueZveWQjeWNleS4re+8muaIkeS7rOWwhui/meS4quaXoOaViGBiYXJjb2RlYOefq+ato+S4uueZveWQjeWNleS4rWBiYXJjb2RlYOOAggoK5pyJ5aSa5Liq5bqP5YiX5a2Y5Zyo5LqO55m95ZCN5Y2V5Lit77yM5LiU5pyJ6Iez5bCR5LiA5Liq5bqP5YiXYOeahHJlYWRg5pSv5oyB5pWwKuWkp+S6jjAq77yaCgrlpoLmnpzlj6rmnInkuIDkuKrluo/liJfnmoRgcmVhZGDmlK/mjIHmlbDlpKfkuo4w77yM5oiR5Lus5bCG6L+Z5LiqKuaXoOaViCpgYmFyY29kZWAg5pS55Li66L+Z5Liq5bqP5YiX5LiU5L+d55WZ6L+Z5p2hYHJlYWRg44CCCuWmguaenOacieWkmuS4quW6j+WIl+eahGByZWFkYCDmlK/mjIHmlbDlpKfkuo4w77yM5oiR5Lus5bCG6L+Z5Liq5peg5pWIYmFyY29kZSDmlLnkuLpyZWFk5pSv5oyB5pWw6YeP5pyA5aSa55qE5bqP5YiX44CCCuWFtuS9meaDheWGte+8mui/meadoXJlYWTku6Xlj4rlr7nlupTnmoRSMuS4uirml6DmlYgqcmVhZOOAgiAgCgpgTGlua2VyYOeahOWkhOeQhuS4jmBCYXJjb2RlYOebuOWQjOOAgiAgCgoq5o6l5aS05ZKMUG9seUHluo/liJfliarliIcqCuWcqOi9rOW9lee7hOS6p+WTgeS4re+8jGBSZWFkMmDnmoTmnKvnq6/mnInlj6/og73kvJrlh7rnjrBgcG9seUFgIGB0YWlsYOaIluW7uuW6k+aXtuW8leWFpeeahOaOpeWktOW6j+WIl+OAgui/meS6m+W6j+WIl+W5tuayoeacieacieaViOS/oeaBr+OAguS4uuS6huiKguecgeiuoeeul+aXtumXtOWSjOWkjeadguW6pu+8jOaIkeS7rOimgei/meS6m+W6j+WIl+i/m+ihjOWIh+mZpOOAguWJquWIh+WujOeahGByZWFkMmDplb/luqbpnIDopoHlpKfkuo7orr7lrprnmoTmnIDlsI/plb/luqbmnaXkv53or4HmnInotrPlpJ/nmoTkv6Hmga/vvIzlh4bnoa7mr5Tlr7nliLDln7rlm6Dnu4TnmoTkvY3nva7jgILlpoLmnpzliarliIflrozmiJDlkI7nmoRgcmVhZDJg6ZW/5bqm5bCP5LqO5pyA5bCP6ZW/5bqm77yM5oiR5Lus6K6k5Li66L+Z5p2hYHJlYWRg5Li65peg5pWIYHJlYWRg44CCICAKICAKKuaMh+agh+e7n+iuoSogIAohW10ocm1kX2ltYWdlL2ltYWdlXzkuanBnKSAgCiAgCiAgCmBgYHtiYXNoLGV2YWw9Rn0KdG90YWw6IOaAu+WFseeahHJlYWRz5pWw55uuCnZhbGlkOiDkuI3pnIDopoHnn6vmraPlkoznn6vmraPmiJDlip/nmoRyZWFkc+aVsOebrgpCX2NvcnJlY3RlZDog55+r5q2j5oiQ5Yqf55qEcmVhZHPmlbDnm64KQl9ub19jb3JyZWN0aW9uOiDplJnor69CYXJjb2Rl55qEcmVhZHPmlbDnm64KTF9ub19jb3JyZWN0aW9uOiDplJnor69MaW5rZXLnmoRyZWFkc+aVsOebrgpub19hbmNob3LvvJrkuI3ljIXlkKthbmNob3LnmoRyZWFkc+aVsOebrgp0cmltbWVkOiDov5vooYzov4fliarliIfnmoRyZWFkc+aVsOebrgp0b29fc2hvcnQ6IOi/m+ihjOi/h+WJquWIh+WQjumVv+W6puWwj+S6jjYwYnDnmoRyZWFkc+aVsOebrgpgYGAKICAK5oyH5qCH5LmL6Ze055qE5YWz57O75aaC5LiL77yaICAKdG90YWwgPSB2YWxpZCArIG5vX2FuY2hvciArIEJfbm9fY29ycmVjdGlvbiArIExfbm9fY29ycmVjdGlvbiAgCui+k+WHumZhc3Rx55qEcmVhZHPmlbDvvJp0b3RhbF9vdXRwdXQgPSB2YWxpZCAtIHRvb19zaG9ydCAgCiAgCiAgCi0gU3RlcDI6IOi/m+ihjOavlOWvueW5tuaJvuWIsOavlOWvueWfuuWboCAgCirluo/liJfmr5Tlr7kqICAK5L2/55SoYFNUQVJg5q+U5a+56L2v5Lu25bCG5aSE55CG5ZCO55qEYFIyYOavlOWvueWIsOWPguiAg+WfuuWboOe7hOS4iuOAggrkvb/nlKhgcXVhbGltYXBg6L2v5Lu25ZKM6L2s5b2V5pys5rOo6YeK5paH5Lu2YEdURmDvvIznu5/orqFgcmVhZHNg5q+U5a+55aSW5pi+5a2Q44CB5YaF5ZCr5a2Q5ZKM5Z+65Zug6Ze05Yy6562J55qE5q+U5L6L44CCCuS9v+eUqGBmZWF0dXJlc0NvdW50c2DlsIbmr5Tlr7nkuIrnmoRgcmVhZGDms6jph4rliLDln7rlm6DkuIrvvIzlj6/ku6XpgInmi6nkuI3lkIznmoTms6jph4rop4TliJnvvIzlpoLpk77mlrnlkJHmgKflkozlrprph4/nmoRmZWF0dXJl44CC5b2T5L2/55So5aSW5pi+5a2Q5a6a6YeP5pe277yM5b2TYHJlYWRg6LaF6L+HYDUwJWDnorHln7rmr5Tlr7nliLDlpJbmmL7lrZDljLrln5/ml7bvvIzorqTkuLror6VgcmVhZGDmnaXmupDkuo7mraTlpJbmmL7lrZDku6Xlj4rlpJbmmL7lrZDlr7nlupTnmoTln7rlm6DvvJvlvZPkvb/nlKjovazlvZXmnKzlrprph4/ml7bvvIzlvZNgcmVhZGDotoXov4dgNTAlYOeiseWfuuavlOWvueWIsOi9rOW9leacrOWMuuWfn+aXtu+8jOiupOS4uuivpWByZWFkYOadpea6kOS6juatpOi9rOW9leacrOS7peWPiui9rOW9leacrOWvueW6lOeahOWfuuWboOOAgiAgCiAgCiAgCirmjIfmoIfnu5/orqEqICAKYGBge2Jhc2gsZXZhbD1GfQpSZWFkcyBNYXBwZWQgdG8gR2Vub21lOiDog73mr5Tlr7nliLDlj4LogIPln7rlm6Dnu4TkuIrnmoRyZWFkc+WNoOaJgOaciXJlYWRz55qE5q+U5L6L77yI5YyF5ous5Y+q5pyJ5LiA5Liq5q+U5a+55L2N572u5ZKM5aSa5Liq5q+U5a+55L2N572u55qEcmVhZHPvvIkKUmVhZHMgTWFwcGVkIENvbmZpZGVudGx5IHRvIEdlbm9tZTog5Zyo5Y+C6ICD5Z+65Zug57uE5LiK5Y+q5pyJ5LiA5Liq5q+U5a+55L2N572u55qEcmVhZHPljaDmiYDmnIlyZWFkc+eahOavlOS+iwpSZWFkcyBNYXBwZWQgdG8gSW50ZXJnZW5pYyBSZWdpb25z77ya5q+U5a+55Yiw5Z+65Zug6Ze06ZqU5Yy6cmVhZHPljaDmiYDmnIlyZWFkc+eahOavlOS+iwpSZWFkcyBNYXBwZWQgdG8gSW50cm9uaWMgUmVnaW9uc++8muavlOWvueWIsOWGheWQq+WtkHJlYWRz5Y2g5omA5pyJcmVhZHPnmoTmr5TkvosKUmVhZHMgTWFwcGVkIHRvIEV4b25pYyBSZWdpb25z77ya5q+U5a+55Yiw5aSW5pi+5a2QcmVhZHPljaDmiYDmnIlyZWFkc+eahOavlOS+iwpgYGAKICAKICAKICAKLSBTdGVwMzog5a6a6YePICAKKlVNSSDlrprph48qICAK5Li65LqG5b6X5Yiw5q+P5LiqYGJhcmNvZGVg5LiL5Z+65Zug55qE6KGo6L6+5pWw5o2u77yMYHNlZWtzb3VsdG9vbHNg5LulYGJhcmNvZGVg5Li65Y2V5L2N5o+Q5Y+WYGZlYXR1cmVDb3VudHNg6L6T5Ye655qEYGJhbWDmlbDmja7vvIznu5/orqHms6jph4rliLDln7rlm6DnmoRgdW1pYOWSjGB1bWlg5a+55bqU55qEYHJlYWRzYOaVsO+8mgoK6L+H5ruk5o6J5a+55bqUYFVNSWDkuLrljZXkuKrph43lpI3norHln7rnmoRgcmVhZHNg77yMIOS+i+WmgmBVTUlg5Li6YFRUVFRUVFRUYArov4fmu6Tmjonms6jph4rliLDlpJrkuKrln7rlm6DnmoRgcmVhZHNgICAKICAKKlVNSeefq+atoyogIApgVU1JYOW6j+WIl+S5n+acieS4gOWumuamgueOh+WHuueOsOa1i+W6j+mUmeivr+eahOaDheWGteOAgmBzZWVrc291bHRvb2xzYOS8muWwneivleWvuWBVTUlg6L+b6KGM55+r5q2j44CC5b2T5ZCM5LiA5LiqYGJhcmNvZGVg5Lit55qE5p+Q5LiA5Liq54m55a6a5Z+65Zug5a+55bqU5pyJ5Lik5LiqYFVNSWDluo/liJflj6rmnInkuIDkuKrnorHln7rplJnphY3ml7bvvIjkuIDkuKpgaGFtbWluZyBkaXN0YW5jZWDvvInvvIxgcmVhZHNg5pSv5oyB5pWw5L2O55qEYFVNSWDlsIbooqvnuqDmraPkuLpgcmVhZHNg5pSv5oyB5pWw6auY55qEYFVNSWDjgIIgIAogIAogIAoq57uG6IOe5Yik5a6aKiAgCuWcqOS4gOS4que7huiDnue+pOS4re+8jOaIkeS7rOiupOS4uue7huiDnuWSjOe7huiDnueahGBtUk5BYOeahOWQq+mHj+S4jeS8muebuOW3ruWkquWkmuOAguWmguaenOS4gOS4qmBiYXJjb2RlYOWvueW6lOeahGBtUk5BYOeahOWQq+mHj+W+iOS9ju+8jOaIkeS7rOiupOS4uui/meS4qmBiYXJjb2RlYOeahOejgeePoOW5tuayoeacieaNleiOt+e7huiDnu+8jGBtUk5BYOadpea6kOS6juiDjOaZr+OAgiBgc2Vla3NvdWx0b29sc2Ag5Lya5Lul5LiK6Z2i55qE6KeE5YiZ77yM6L+b6KGMYGJhcmNvZGVg5piv5ZCm5Li657uG6IOe55qE5Yik5a6a44CC5pyJ5Lul5LiL5Yeg5Liq5q2l6aqk77yaICAKICAK5a+55omA5pyJYGJhcmNvZGVg5oyJ54Wn5a+55bqU55qEYFVNSWDmlbDnlLHpq5jliLDkvY7mjpLluo/vvJsK5Y+W6aKE5Lyw57uG6IOe55qEYDElYOS9jee9rueahGBiYXJjb2RlYOeahGBVTUlg5pWw6Zmk5LulYDEwYOS4uumYiOWAvO+8mwpgYmFyY29kZWDnmoRgVU1JYOaVsOWkp+S6jumYiOWAvOeahOWIpOWumuS4uue7huiDnu+8mwpgYmFyb2NkZWDnmoRgVU1JYOWwj+S6jumYiOWAvO+8jOS9huWkp+S6jmAzMDBg5pe277yM5L2/55SoYERyb3BsZXRVdGlsc2DliIbmnpDjgIJgRHJvcGxldFV0aWxzYOaWueazleWFiOWBh+iuvlVNSeaVsOmHj+S9juS6jmAxMDBg55qEYGJhcmNvZGVg5Li6YGVtcHR5YCBgZHJvcGxldGDvvIznhLblkI7moLnmja7mr4/kuKpgZHJvcGxldGDnm7jlkIzln7rlm6DnmoRgVU1JYOaVsOaAu+WSjOS4uuiDjOaZr2BSTkFg6KGo6L6+6LCx5Lit6K+l5Z+65ZugYFVNSWDmlbDnm67vvIzov5vogIzlvpfliLDln7rlm6BgVU1JYOaVsOebrueahOacn+acm+WAvOOAguWGjemAmui/h+Wwhuavj+S4qmBiYXJjb2RlYOeahGBVTUlg5pWw6L+b6KGM57uf6K6h5a2m5qOA6aqM77yM5pi+6JGX5beu5byC55qE5Li657uG6IOe77ybCuS4jeespuWQiOS4iui/sOadoeS7tueahOS4uuiDjOaZr+OAgiAgCiAgCiAgCirmjIfmoIfnu5/orqEqICAKCmBgYHtiYXNoLGV2YWw9Rn0KRXN0aW1hdGVkIE51bWJlciBvZiBDZWxsc++8muWIpOWumueahOe7huiDnuaAu+aVsApGcmFjdGlvbiBSZWFkcyBpbiBDZWxsczog5Yik5a6a5Li657uG6IOe55qEcmVhZHPljaDmiYDmnInlj4LkuI7lrprph4/nmoRyZWFkc+eahOavlOS+iwpNZWFuIFJlYWRzIHBlciBDZWxsOiDnu4bog57nmoTlubPlnYdyZWFkc+aVsO+8jOaAu3JlYWRz5pWwL+WIpOWumueahOe7huiDnuaVsApNZWRpYW4gR2VuZXMgcGVyIENlbGw6IOWIpOWumuS4uue7huiDnueahGJhcmNvZGXlr7nlupRnZW5lc+eahOS4reS9jeaVsApNZWRpYW4gVU1JIENvdW50cyBwZXIgQ2VsbDog5Yik5a6a5Li657uG6IOe55qEYmFyY29kZeWvueW6lFVNSeeahOS4reS9jeaVsApUb3RhbCBHZW5lcyBEZXRlY3RlZDog5omA5pyJ57uG6IOe5qOA5rWL5Yiw5Z+65Zug5pWw6YePClNlcXVlbmNpbmcgU2F0dXJhdGlvbjog6aWx5ZKM5bqm77yMMSAtIFVNSeaAu+aVsC9yZWFkc+aAu+aVsApgYGAKICAKCmBmYXN0YOS4reWMheWQq+S4gOS6myoq5YWo5bqP5YiXKirmlbDmja7nibnmnInmjIfmoIfvvJogIAogIAot77yIMe+8ieaguOezluS9k+WQq+mHjyAgCiAgCi3vvIgy77yJ5pWw5o2uYGJpb3R5cGVg5Y2g5q+U6aW85Zu+ICAKICAKLe+8iDPvvIlgZ2VuZWJvZHlg5Zu+5Y+KYEFDVEJg6KaG55uW5bqmICAgIAogIAot77yINO+8iWBsbmNg5Z+65Zug5pWw6YePICAKICAKLSBTdGVwNDog5ZCO57ut5YiG5p6QICAK5b6X5Yiw6KGo6L6+55+p6Zi15ZCO77yM5oiR5Lus5Y+v5Lul6L+b6KGM5LiL5LiA5q2l55qE5YiG5p6Q44CCICAKCmBTZXVyYXRg5YiG5p6Q5rWB56iLCuS9v+eUqGBTZXVyYXRg6K6h566X57q/57KS5L2T5ZCr6YeP77yM57uG6IOe5LitYFVNSWDmgLvmlbDvvIznu4bog57kuK3ln7rlm6DmgLvmlbDjgILkuYvlkI7lr7nnn6npmLXov5vooYzlvZLkuIDljJbjgIHlr7vmib7pq5jlj5jln7rlm6DjgIHpmY3nu7TogZrnsbvkuYvlkI7lr7vmib7lt67lvILln7rlm6DjgILlvZPnhLbvvIzmiJHku6zkuZ/kvJrlnKjkuIvpnaLnmoTmlZnnqIvkuK3nu5nlpKflrrbor6bop6NgU2V1cmF0YOi/kOihjOi/h+eoi+OAgiAgIAogIAoKICAKICAKIyMgMy4yIGBmYXN0YOaooeWdl+S9v+eUqCAgCiMjIyAzLjIuMSDmqKHlnZfln7rmnKzlj4LmlbAgIAogIAotIFwtXC1mcTEgIApSMSBmYXN0ceaVsOaNrui3r+W+hOOAgiAgCiAgCi0gXC1cLWZxMiAgClIyIGZhc3Rx5pWw5o2u6Lev5b6E44CCICAKICAKLSBcLVwtc2FtcGxlbmFtZSAgCuagt+acrOWQjeensO+8jOS8muWcqG91dGRpcuebruW9leS4i+WIm+W7uuS7peagt+acrOWQjeensOWRveWQjeeahOebruW9leOAguS7heaUr+aMgeaVsOWtl++8jOWtl+avjeWSjOS4i+WIkue6v+OAgiAgCiAgCi0gXC1cLW91dGRpciAgCue7k+aenOi+k+WHuuebruW9leOAgum7mOiupOWAvO+8mi4v44CCICAKICAKLSBcLVwtZ2Vub21lRGlyICAKYFNUQVJg5p6E5bu655qE5Y+C6ICD5Z+65Zug57uE6Lev5b6ELCDniYjmnKzpnIDopoHkuI5gc2Vla3NvdWx0b29sc2Dkvb/nlKjnmoRTVEFS5LiA6Ie044CCICAKICAKLSBcLVwtZ3RmICAK55u45bqU54mp56eN55qEZ3Rm6Lev5b6E44CCICAKICAKLSBcLVwtY29yZSAgCuWIhuaekOS9v+eUqOeahOe6v+eoi+aVsOOAgiAgCiAgCi0gXC1cLWNoZW1pc3RyeSAgCuivleWJguexu+Wei++8jOavj+enjeWvueW6lOS4gOe7hGAtLXNoaWZ0YOOAgWAtLXBhdHRlcm5g44CBIGAtLXN0cnVjdHVyZWDjgIFgLS1iYXJjb2RlYOWSjGAtLXNjNXBg55qE57uE5ZCI77yM5Y+v6YCJ5YC877yaYEREVjFg77yMYEREVjJg77yMYERENVYxYO+8jGBNTWDvvIxgTU0tRGDvvIxgREQtUWDvvJsKYEREVjFgIOWvueW6lERE5bmz5Y+wM+KAmei9rOW9lee7hFYx54mI5pys6K+V5YmC77ybCmBERFYyYCDlr7nlupREROW5s+WPsDPigJjovazlvZXnu4RWMueJiOacrOivleWJgu+8mwpgREQ1VjFgIOWvueW6lERE5bmz5Y+wNeKAmOi9rOW9lee7hFYx54mI5pys6K+V5YmC77ybCmBNTWAg5a+55bqUTU3lubPlj7Az4oCZ6L2s5b2V57uE5pWw5o2u77ybCmBNTS1EYCDlr7nlupRNTeWkp+WtlOW+hO+8mwpgREQtUWAg5a+55bqURETlhajluo/liJfjgIIgIAogIAotIFwtXC1zaGlmdCAgCuS9v+eUqOenu+eggeiuvuiuoeOAgiAgCiAgCi0gXC1cLXBhdHRlcm4gIArnp7vnoIHorr7orqHorr7orqHkuK3nlKjkuo7plJrlrprotbflp4vnmoTnorHln7rjgIIgIAogIAotIFwtXC1zdHJ1Y3R1cmUgIArivaTkuo7mj4/ov7BgcmVhZDFg55qE5o6l5aS057uT5p6E77yMQuihqOekumBjZWxsYmFyY29kZWDvvIxgTGDooajnpLpgbGlua2VyYO+8jGBVYOihqOekumBVTUlg77yM5ZCO4r6v5pWw5a2X6KGo56S656Kx5Z+64ruT5bqm77yM4r2Q5aaCYEI5TDEyQjlMMTNCOVU4YO+8m+WmguaenOaYr2BQM0NCR0Jg57G755qE57uT5p6E77yM5Y+q5pyJYGJhcmNvZGVg5ZKMYFVNSWDvvIzmsqHmnIlgbGlua2VyYO+8jGBzdHJ1Y3R1cmVg5Y+C5pWw5bCx5pivYEIxN1UxMmDjgIIgIAogIAotIFwtXC1iYXJjb2RlICAKYGJhcmNvZGVg5paH5Lu26Lev5b6E44CCICAKICAKLSBcLVwtbGlua2VyCQpgbGlua2VyYOaWh+S7tui3r+W+hOOAgiAgCiAgCi0gXC1cLXNraXBfbWlzQiAgCmBiYXJjb2RlYOS4jeWFgeiuuOeiseWfuumUmemFje+8jOm7mOiupOWFgeiuuOS4gOS4queiseWfuumUmemFjeOAgiAgCiAgCi0gXC1cLXNraXBfbWlzTCAgCmBsaW5rZXJg5LiN5YWB6K6456Kx5Z+66ZSZ6YWN77yM6buY6K6k5YWB6K645LiA5Liq56Kx5Z+66ZSZ6YWN44CCIAogIAotIFwtXC1za2lwX211bHRpICAK6IiN5byD6IO957qg6ZSZ5Li65aSa5Liq55m95ZCN5Y2VYGJhcm9jZGVg55qEYHJlYWRzYO+8jOm7mOiupOe6oOmUmeS4uuavlOS+i+acgOmrmOeahGBiYXJjb2RlYOOAgiAgCiAgCi0gXC1cLXNjNXAgIArkuI3lkK/nlKjml7bvvIzliIbmnpA1J+i9rOW9lee7hO+8m+WQr+eUqOaXtu+8jOWIhuaekDUn6L2s5b2V57uE6ZyA44CCICAKICAKLSBcLVwtZXhwZWN0TnVtICAK6aKE5Lyw55qE5o2V6I6357uG6IOe5pWw55uu44CCICAKICAKLSBcLVwtZm9yY2VDZWxsICAK5b2T5q2j5bi45YiG5p6Q5b6X5Yiw55qE57uG6IOe5pWw4r2s5LiN55CG5oOz5pe277yM6YCJ4r2k5q2k5Y+C5pWw77yM5ZCO4r6v5Yqg4ryA5Liq6aKE5pyf55qE5pWw5YC8YE5g77yMYHNlZWtzb3VsdG9vbHNg6L2v5Lu25Lya5oyJ54WnYFVNSWDku47ivrzliLDkvY7lj5bliY1gTmDkuKrnu4bog57jgIIgIAogIAotIFwtXC1pbmNsdWRlLWludHJvbnMgIArkuI3lkK/nlKjml7bvvIzlj6rkvJrpgInmi6lgZXhvbiByZWFkc2DivaTkuo7lrprph4/vvJvlkK/nlKjml7bvvIxgaW50cm9uIHJlYWRzYOS5n+S8muK9pOS6juWumumHj+OAgiAgCiAgCi0gXC1cLXN0YXJfcGF0aCAgCuaMh+WumuWFtuS7lueJiOacrOeahGBTVEFSYOi3r+W+hOi/m+ihjOavlOWvue+8jOeJiOacrOmcgOimgeS4jmAtLWdlbm9tZURpcmDniYjmnKzlhbzlrrnvvIzpu5jorqTnmoRgLS1zdGFyX3BhdGhg5Li6546v5aKD5LiL55qEYFNUQVJg44CCICAKICAKICAKIyMjIDMuMi4yIGBmYXN0YOaooeWdl+S9v+eUqOWunuaImCAgCigxKWBmYXN0cGDmjIfmjqfljp/lp4tgZmFzdHFg5pWw5o2uICAgIArmiJHku6zph4fnlKhgdHJpbWDnmoTmlrnlvI/miKrljrvmtYvluo/mlbDmja7nmoTmtYvluo/mjqXlpLTlkozkvY7otKjph4/niYfmrrXvvIzku47ogIzpq5jmlYjlnLDliKnnlKjmtYvluo/mlbDmja7vvIzlkI7nu63liIbmnpDpg73ln7rkuo5gY2xlYW4gZGF0YWDjgILlnKjov5vooYzljp/lp4vmlbDmja5gVHJpbW1pbmdg5pe25oiR5Lus5L2/55SoIGBmYXN0cGDova/ku7bvvIggQ2hlbiBT77yMZXQgYWwuIDIwMTjvvInvvIzlpITnkIblhbfkvZPlpoLkuIvvvJoK4pGg5oiq5Y675L2O6LSo6YePYHJlYWRzYO+8jOS9v+eUqOa7keWKqOeql+WPo+eahOaWueW8j++8jGA0YOS4queiseWfuuS4uuS4gOS4queql+WPo++8jOiLpeivpeeql+WPo+eahOW5s+Wdh+eiseWfuui0qOmHj+WAvOS9juS6jmAxMGDvvIzliJnku47or6XlpITmiKrljrtgcmVhZHNg77yMIOWPguaVsOmAieaLqe+8mmDigJNjdXRfZnJvbnRgLCBg4oCTY3V0X2Zyb250X3dpbmRvd19zaXplIDRgLCBg4oCTY3V0X2Zyb250X21lYW5fcXVhbGl0eSAxMGDvvJsK4pGh5oiq5Y67IGByZWFkc2Ag5bC+6YOo6LSo6YeP5L2O5LqOM+aIluiAheWQq07vvIhOIOihqOekuuaXoOazleehruWumueiseWfuuS/oeaBr++8ieeahCBgcmVhZHNg77yM5Y+C5pWw6YCJ5oupOiBg4oCTY3V0X3RhaWxgLCBg4oCTY3V0X3RhaWxfd2luZG93X3NpemUgMWAsIGDigJNjdXRfdGFpbF9tZWFuX3F1YWxpdHlg77ybCuKRouaIquWOu+aOpeWktOW6j+WIl++8iGDigJNkZXRlY3RfYWRhcHRlcl9mb3JfcGVgIO+8ie+8mwrikaPnu4/kuIrov7DlpITnkIblkI7vvIzov4fmu6Tmjonnn63kuo4gYDYwIGJwYOeahCBgcmVhZHNg77yM5Y+K5YW2YHBhaXJlZCByZWFkc2DjgIIKYC1sYCBvciBgLS1sZW5ndGhfcmVxdWlyZWRgIDYwCuWPjOerr+a1i+W6j+mcgOimgeWKoOS4iu+8miBgLS1kZXRlY3RfYWRhcHRlcl9mb3JfcGVgICAKICAKYGBge2Jhc2gsZXZhbD1GfQpmYXN0cCAtaSBjZWxsbGluZV90ZXN0L2NlbGxsaW5lX1IxXzAwMS5mYXN0cS5neiAtSSBjZWxsbGluZV90ZXN0L2NlbGxsaW5lX1IyXzAwMS5mYXN0cS5neiBcCi1vIGNlbGxsaW5lX3Rlc3QvY2VsbGxpbmVfUjFfMDAxLmNsZWFuLmZhc3RxLmd6IC1PIGNlbGxsaW5lX3Rlc3QvY2VsbGxpbmVfUjJfMDAxLmNsZWFuLmZhc3RxLmd6IFwKLS1jdXRfZnJvbnQg4oCTLWN1dF9mcm9udF93aW5kb3dfc2l6ZSA0IC0tY3V0X2Zyb250X21lYW5fcXVhbGl0eSAxMCBcCi0tY3V0X3RhaWwg4oCTLWN1dF90YWlsX3dpbmRvd19zaXplIDEg4oCTLWN1dF90YWlsX21lYW5fcXVhbGl0eSBcCi0tbGVuZ3RoX3JlcXVpcmVkIDYwIC0tZGV0ZWN0X2FkYXB0ZXJfZm9yX3BlIAoKIyDov5DooYzmj5DnpLrvvJoKIyBEZXRlY3RpbmcgYWRhcHRlciBzZXF1ZW5jZSBmb3IgcmVhZDEuLi4KIyBObyBhZGFwdGVyIGRldGVjdGVkIGZvciByZWFkMQojIAojIERldGVjdGluZyBhZGFwdGVyIHNlcXVlbmNlIGZvciByZWFkMi4uLgojID5JbGx1bWluYSBUcnVTZXEgQWRhcHRlciBSZWFkIDIKIyBBR0FUQ0dHQUFHQUdDR1RDR1RHVEFHR0dBQUFHQUdUR1QKIyAKIyBSZWFkMSBiZWZvcmUgZmlsdGVyaW5nOgojICAgdG90YWwgcmVhZHM6IDE4NzE0OTkyCiMgdG90YWwgYmFzZXM6IDI4MDcyNDg4MDAKIyBRMjAgYmFzZXM6IDI3NTE1MTk4OTIoOTguMDE0OCUpCiMgUTMwIGJhc2VzOiAyNjQyMzM4NTk2KDk0LjEyNTYlKQojIAojIFJlYWQyIGJlZm9yZSBmaWx0ZXJpbmc6CiMgICB0b3RhbCByZWFkczogMTg3MTQ5OTIKIyB0b3RhbCBiYXNlczogMjgwNzI0ODgwMAojIFEyMCBiYXNlczogMjY5MzQ4MzY3Nyg5NS45NDc1JSkKIyBRMzAgYmFzZXM6IDI1MzAzNTgyMjkoOTAuMTM2NiUpCiMgCiMgUmVhZDEgYWZ0ZXIgZmlsdGVyaW5nOgojICAgdG90YWwgcmVhZHM6IDE4NDcxMjg3CiMgdG90YWwgYmFzZXM6IDI3NjA4NjUyMDYKIyBRMjAgYmFzZXM6IDI3MDg5ODI1MTUoOTguMTIwOCUpCiMgUTMwIGJhc2VzOiAyNjAyOTI4MzE4KDk0LjI3OTQlKQojIAojIFJlYWQyIGFmdGVyIGZpbHRlcmluZzoKIyAgIHRvdGFsIHJlYWRzOiAxODQ3MTI4NwojIHRvdGFsIGJhc2VzOiAyNzU5NTA5NTYwCiMgUTIwIGJhc2VzOiAyNjY3Njg1MDcxKDk2LjY3MjQlKQojIFEzMCBiYXNlczogMjUxMTA0MjY4Mig5MC45OTYlKQojIAojIEZpbHRlcmluZyByZXN1bHQ6CiMgICByZWFkcyBwYXNzZWQgZmlsdGVyOiAzNjk0MjU3NAojIHJlYWRzIGZhaWxlZCBkdWUgdG8gbG93IHF1YWxpdHk6IDQ1NDUwMgojIHJlYWRzIGZhaWxlZCBkdWUgdG8gdG9vIG1hbnkgTjogMjIyCiMgcmVhZHMgZmFpbGVkIGR1ZSB0byB0b28gc2hvcnQ6IDMyNjg2CiMgcmVhZHMgd2l0aCBhZGFwdGVyIHRyaW1tZWQ6IDEwNTQ1NjAKIyBiYXNlcyB0cmltbWVkIGR1ZSB0byBhZGFwdGVyczogMTg4Mzc2MTcKIyAKIyBEdXBsaWNhdGlvbiByYXRlOiAxNC4wNDglCiMgCiMgSW5zZXJ0IHNpemUgcGVhayAoZXZhbHVhdGVkIGJ5IHBhaXJlZC1lbmQgcmVhZHMpOiAyMjQKIyAKIyBKU09OIHJlcG9ydDogZmFzdHAuanNvbgojIEhUTUwgcmVwb3J0OiBmYXN0cC5odG1sCiMgCiMgZmFzdHAgLWkgY2VsbGxpbmVfdGVzdC9jZWxsbGluZV9SMV8wMDEuZmFzdHEuZ3ogLUkgY2VsbGxpbmVfdGVzdC9jZWxsbGluZV9SMl8wMDEuZmFzdHEuZ3ogLW8gY2VsbGxpbmVfdGVzdC9jZWxsbGluZV9SMV8wMDEuY2xlYW4uZmFzdHEuZ3ogLU8gY2VsbGxpbmVfdGVzdC9jZWxsbGluZV9SMl8wMDEuY2xlYW4uZmFzdHEuZ3ogLS1jdXRfZnJvbnQg4oCTLWN1dF9mcm9udF93aW5kb3dfc2l6ZSA0IC0tY3V0X2Zyb250X21lYW5fcXVhbGl0eSAxMCAtLWN1dF90YWlsIOKAky1jdXRfdGFpbF93aW5kb3dfc2l6ZSAxIOKAky1jdXRfdGFpbF9tZWFuX3F1YWxpdHkgLS1sZW5ndGhfcmVxdWlyZWQgNjAgLS1kZXRlY3RfYWRhcHRlcl9mb3JfcGUgCiMgZmFzdHAgdjAuMjMuNCwgdGltZSB1c2VkOiAxNTcgc2Vjb25kcwpgYGAKICAKICAKKDIpYGZhc3Rg5qih5Z2X5L2/55SoICAKYGBge2Jhc2gsZXZhbD1GfQpzZWVrc291bHRvb2xzIGZhc3QgcnVuIFwKLS1mcTEgL2hvbWUvYmlvbWFtYmEvYW5hbHlzaXMveHVueWluL3Rlc3RfZGF0YS9jZWxsbGluZV90ZXN0L2NlbGxsaW5lX1IxXzAwMS5jbGVhbi5mYXN0cS5neiBcCi0tZnEyIC9ob21lL2Jpb21hbWJhL2FuYWx5c2lzL3h1bnlpbi90ZXN0X2RhdGEvY2VsbGxpbmVfdGVzdC9jZWxsbGluZV9SMl8wMDEuY2xlYW4uZmFzdHEuZ3ogXAotLXNhbXBsZW5hbWUgY2VsbGxpbmUgXAotLW91dGRpciAvaG9tZS9iaW9tYW1iYS9hbmFseXNpcy94dW55aW4vY2VsbGxpbmVfb3V0IFwKLS1nZW5vbWVEaXIgL2hvbWUvYmlvbWFtYmEvYW5hbHlzaXMveHVueWluL3NlZWtfcmVmL0dSQ2gzOC9zdGFyIFwKLS1ndGYgL2hvbWUvYmlvbWFtYmEvYW5hbHlzaXMveHVueWluL3NlZWtfcmVmL0dSQ2gzOC9nZW5lcy9nZW5lcy5ndGYgXAotLWluY2x1ZGVfaW50cm9ucyAgXAotLXJSTkFnZW5vbWVEaXIgL2hvbWUvYmlvbWFtYmEvYW5hbHlzaXMveHVueWluL3NlZWtfcmVmL2hnMzhfclJOQS9zdGFyIFwKLS1yUk5BZ3RmIC9ob21lL2Jpb21hbWJhL2FuYWx5c2lzL3h1bnlpbi9zZWVrX3JlZi9oZzM4X3JSTkEvZ2VuZXMvZGVsZXRlX3JSTkE1LjgtMTgtMjhfaW5fclJOQTQ1cy5ndGYgXAotLWNvcmUgOAoKYGBgCiAgCui+k+WHuuebruW9leS4i+WMheWQq+S7peS4i+aWh+S7tu+8miAgCi9ob21lL2Jpb21hbWJhL2FuYWx5c2lzL3h1bnlpbi9jZWxsbGluZV9vdXQgIArilJzilIDilIAgY2VsbGxpbmVfcmVwb3J0Lmh0bWwgIArilJzilIDilIAgY2VsbGxpbmVfc3VtbWFyeS5jc3YgIArilJzilIDilIAgY2VsbGxpbmVfc3VtbWFyeS5qc29uICAK4pSc4pSA4pSAIHN0ZXAxICAK4pSCwqDCoCDilJzilIDilIAgY2VsbGxpbmVfMS5mcS5neiAgCuKUgsKgwqAg4pSc4pSA4pSAIGNlbGxsaW5lXzIuZnEuZ3ogIArilILCoMKgIOKUnOKUgOKUgCBjZWxsbGluZS5jdXRUU09fMS5mcS5neiAgCuKUgsKgwqAg4pSc4pSA4pSAIGNlbGxsaW5lLmN1dFRTT18yLmZxLmd6ICAK4pSCwqDCoCDilJTilIDilIAgY2VsbGxpbmVfc3RhdC5mcS5neiAgCuKUnOKUgOKUgCBzdGVwMiAgCuKUgsKgwqAg4pSc4pSA4pSAIGZlYXR1cmVDb3VudHMgIArilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGNlbGxsaW5lX1NvcnRlZEJ5Q29vcmRpbmF0ZS5iYW0uZmVhdHVyZUNvdW50cy5iYW0gIArilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGNlbGxsaW5lX1NvcnRlZEJ5TmFtZS5iYW0gIArilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGNvdW50cy50eHQgIArilILCoMKgIOKUgsKgwqAg4pSU4pSA4pSAIGNvdW50cy50eHQuc3VtbWFyeSAgCuKUgsKgwqAg4pSU4pSA4pSAIFNUQVIgIArilILCoMKgICAgICDilJzilIDilIAgY2VsbGxpbmVfQWxpZ25lZC5vdXQuYmFtICAK4pSCwqDCoCAgICAg4pSc4pSA4pSAIGNlbGxsaW5lX0xvZy5maW5hbC5vdXQgIArilILCoMKgICAgICDilJzilIDilIAgY2VsbGxpbmVfTG9nLm91dCAgCuKUgsKgwqAgICAgIOKUnOKUgOKUgCBjZWxsbGluZV9Mb2cucHJvZ3Jlc3Mub3V0ICAK4pSCwqDCoCAgICAg4pSc4pSA4pSAIGNlbGxsaW5lX1NKLm91dC50YWIgIArilILCoMKgICAgICDilJzilIDilIAgY2VsbGxpbmVfU29ydGVkQnlDb29yZGluYXRlLmJhbSAgCuKUgsKgwqAgICAgIOKUnOKUgOKUgCBjZWxsbGluZV9Tb3J0ZWRCeUNvb3JkaW5hdGUuYmFtLmJhaSAgCuKUgsKgwqAgICAgIOKUnOKUgOKUgCBjZWxsbGluZV9Tb3J0ZWRCeU5hbWUuYmFtICAK4pSCwqDCoCAgICAg4pSc4pSA4pSAIGRvd25iYW0gIArilILCoMKgICAgICDilILCoMKgIOKUnOKUgOKUgCBjZWxsbGluZS5kb3duLjAuMS5iYW0gIArilILCoMKgICAgICDilILCoMKgIOKUnOKUgOKUgCBjZWxsbGluZS5kb3duLjAuMS5iYW0uYmFpICAK4pSCwqDCoCAgICAg4pSCwqDCoCDilJzilIDilIAgY2VsbGxpbmUuZ2VuZUJvZHlDb3ZlcmFnZS5jdXJ2ZXMucGRmICAK4pSCwqDCoCAgICAg4pSCwqDCoCDilJzilIDilIAgY2VsbGxpbmUuZ2VuZUJvZHlDb3ZlcmFnZS5yICAK4pSCwqDCoCAgICAg4pSCwqDCoCDilJTilIDilIAgY2VsbGxpbmUuZ2VuZUJvZHlDb3ZlcmFnZS50eHQgIArilILCoMKgICAgICDilJzilIDilIAgcmVwb3J0LnBkZiAgCuKUgsKgwqAgICAgIOKUnOKUgOKUgCBybmFzZXFfcWNfcmVzdWx0cy50eHQgIArilILCoMKgICAgICDilJTilIDilIAgclJOQSAgCuKUgsKgwqAgICAgICAgICDilJzilIDilIAgY2VsbGxpbmVfQWxpZ25lZC5vdXQuYmFtICAK4pSCwqDCoCAgICAgICAgIOKUnOKUgOKUgCBjZWxsbGluZV9Mb2cuZmluYWwub3V0ICAK4pSCwqDCoCAgICAgICAgIOKUnOKUgOKUgCBjZWxsbGluZV9Mb2cub3V0ICAK4pSCwqDCoCAgICAgICAgIOKUnOKUgOKUgCBjZWxsbGluZV9Mb2cucHJvZ3Jlc3Mub3V0ICAK4pSCwqDCoCAgICAgICAgIOKUnOKUgOKUgCBjZWxsbGluZV9TSi5vdXQudGFiICAK4pSCwqDCoCAgICAgICAgIOKUnOKUgOKUgCBjZWxsbGluZV9Tb3J0ZWRCeU5hbWUuYmFtICAK4pSCwqDCoCAgICAgICAgIOKUnOKUgOKUgCBjZWxsbGluZS54bHMgIArilILCoMKgICAgICAgICAg4pSc4pSA4pSAIGNvdW50cy50eHQgIArilILCoMKgICAgICAgICAg4pSc4pSA4pSAIGNvdW50cy50eHQuc3VtbWFyeSAgCuKUgsKgwqAgICAgICAgICDilJzilIDilIAgdGVzdC5pbnB1dC4xLmZxLmd6ICAK4pSCwqDCoCAgICAgICAgIOKUlOKUgOKUgCB0ZXN0LmlucHV0LjIuZnEuZ3ogIArilJzilIDilIAgc3RlcDMgIArilILCoMKgIOKUnOKUgOKUgCBjb3VudHMueGxzICAK4pSCwqDCoCDilJzilIDilIAgZGV0YWlsLnhscyAgCuKUgsKgwqAg4pSc4pSA4pSAIGZpbHRlcmVkX2ZlYXR1cmVfYmNfbWF0cml4ICAK4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBiYXJjb2Rlcy50c3YuZ3ogIArilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGZlYXR1cmVzLnRzdi5neiAgCuKUgsKgwqAg4pSCwqDCoCDilJTilIDilIAgbWF0cml4Lm10eC5neiAgCuKUgsKgwqAg4pSc4pSA4pSAIGZpbHRlcmVkX2ZlYXR1cmVfYmNfbWF0cml4XyAgCuKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgYmFyY29kZXMudHN2Lmd6ICAK4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBmZWF0dXJlcy50c3YuZ3ogIArilILCoMKgIOKUgsKgwqAg4pSU4pSA4pSAIG1hdHJpeC5tdHguZ3ogIArilILCoMKgIOKUnOKUgOKUgCBmcmFnbWVudC54bHMgIArilILCoMKgIOKUnOKUgOKUgCByYXdfZmVhdHVyZV9iY19tYXRyaXggIArilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGJhcmNvZGVzLnRzdi5neiAgCuKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgZmVhdHVyZXMudHN2Lmd6ICAK4pSCwqDCoCDilILCoMKgIOKUlOKUgOKUgCBtYXRyaXgubXR4Lmd6ICAK4pSCwqDCoCDilJTilIDilIAgdW1pLnhscyAgCuKUlOKUgOKUgCBzdGVwNCAgCiAgICDilJzilIDilIAgYmlvdHlwZV9GaW5kQWxsTWFya2Vycy54bHMgIAogICAg4pSc4pSA4pSAIGNlbGxsaW5lLnJkcyAgCiAgICDilJzilIDilIAgRmVhdHVyZVNjYXR0ZXIucG5nICAKICAgIOKUnOKUgOKUgCBGaW5kQWxsTWFya2Vycy54bHMgIAogICAg4pSc4pSA4pSAIGxuY2dlbmVfRmluZEFsbE1hcmtlcnMueGxzICAKICAgIOKUnOKUgOKUgCBtaXRvX3F1YW50aWxlLnhscyAgCiAgICDilJzilIDilIAgbkNvdW50X3F1YW50aWxlLnhscyAgCiAgICDilJzilIDilIAgbkZlYXR1cmVfcXVhbnRpbGUueGxzICAKICAgIOKUnOKUgOKUgCByZXNvbHV0aW9uLnhscyAgCiAgICDilJzilIDilIAgdG9wMTBfaGVhdG1hcC5wbmcgIAogICAg4pSc4pSA4pSAIHRzbmUucG5nICAKICAgIOKUnOKUgOKUgCB0c25lX3VtaS5wbmcgIAogICAg4pSc4pSA4pSAIHRzbmVfdW1pLnhscyAgCiAgICDilJzilIDilIAgdW1hcC5wbmcgIAogICAg4pSU4pSA4pSAIFZsblBsb3QucG5nICAKICAgIAoxMSBkaXJlY3RvcmllcywgNjYgZmlsZXMKICAKIyDlm5vjgIFgU2V1cmF0YOWIhuaekOS4juWPr+inhuWMliAgCmBTZXVyYXRg5Y+v6LCT5piv5Y2V57uG6IOe5pWw5o2u5YiG5p6Q5Y+K5Y+v6KeG5YyW55qE56We5YyF77yM5Yip55SoUuivreiogOWIhuaekOWNlee7huiDnuS4jeWPr+S4jeWtpueahOWIqeWZqOOAgui/memDqOWIhuWGheWuuemYheivu+aciemanOeijeeahOWQjOWtpuWPr+S7peafpeeci+S7peS4i+aIkeS7rOS7peW+gOeahOaVmeeoi++8miAgCiAgCltzY1JOQS1TZXHlrabkuaDmiYvlhowyMDIzX1Lor63oqIDniYhdKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc1MDA1MTYmaWR4PTEmc249M2MwYjlkZTUwNWZjZDIzMjA1NGUzOGI0NTFmYTE3NDImY2hrc209OWIzY2JiYjRhYzRiMzJhMjZiNjFmM2ExZjc5NDFmZmY1ODUyZDNlNmU3NDRlYzY4MGFhZmQwYjg0ZWM5NzZhMzNiZjk4MmZiNWY3OSZwYXlyZWFkdGlja2V0PUhJOHUxN3dsZ1RFaTJ5M19lQUI2bExvRGVLR252MENPUzFBdUtOUW1pTUNoSGRPOE9CZEIxMnNINjhFZ1RvWEJmcEdyb0ZZI3JkKQogIAojIyMjIOWNlee7huiDnua1i+W6j+WfuuehgOaVsOaNruWIhuaekCoq5L+d5aeG57qn5pWZ56iLKirvvIzku6PnoIHpg6jliIbmlbTnkIblnKjlvoDmnJ/mjqjpgIHkuYvkuK3vvJoKW+aJi+aKiuaJi+aVmeS9oOWBmuWNlee7huiDnua1i+W6j+aVsOaNruWIhuaekO+8iOS4gO+8ieKAlOKAlOe7quiuul0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzQ5OTc3NiZpZHg9MiZzbj03ZmMyNTBkOTRlZDg4Y2ZkNWUyMjI0ZjA3MWJiMTc0MiZjaGtzbT05YjNjYjk1MGFjNGIzMDQ2N2EwODI1Mjc1NDdiOTFhZWMxNWI3ZDFmNDBkNDRlMzYyODk0YWVkZWI2YTk5ZTAxNDUxOGZhNWU0NzQzJnRva2VuPTc2Nzg0Mjg2MyZsYW5nPXpoX0NOI3JkKSAgClvmiYvmiormiYvmlZnkvaDlgZrljZXnu4bog57mtYvluo/mlbDmja7liIbmnpDvvIjkuozvvInigJTigJTlkITnsbvmlbDmja7nu5PmnoTkuI7or7vlj5bmlrnms5VdKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc0OTk3OTUmaWR4PTImc249NjhlNjI5OGViNDM2MzNjNzE5MzljMTQ2ZDkwMjMwZmYmY2hrc209OWIzY2I5NDNhYzRiMzA1NWUwOTczOWQ3N2UwMzdkNjc5ZjNkOWVjNjg3ODBkMWFhOGM1OTJmODA2ZmNjOGQyMzIyZWFlZTc4NzUyZCZzY2VuZT0xNzgmY3VyX2FsYnVtX2lkPTI5MjM2OTQ4NTMzNzU2ODg3MDYjcmQpICAKW+aJi+aKiuaJi+aVmeS9oOWBmuWNlee7huiDnua1i+W6j+aVsOaNruWIhuaekO+8iOS4ie+8ieKAlOKAlOWNleagt+acrOWIhuaekF0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzUwMDAxMCZpZHg9MiZzbj0yZjlmZDFiMDEwMWQ1NzliY2QyNTBmZGMyNGU5OGJmYyZjaGtzbT05YjNjYjliYWFjNGIzMGFjNmYwY2UyOGE2ZGQxMDQ3MGU3M2QxZTFkNmRlZmVjZTU2MzY5MzlhMzJhNmRiOWIyY2NlMGZmODY4OGViJnNjZW5lPTE3OCZjdXJfYWxidW1faWQ9MjkyMzY5NDg1MzM3NTY4ODcwNiNyZCkgIApb5omL5oqK5omL5pWZ5L2g5YGa5Y2V57uG6IOe5rWL5bqP5pWw5o2u5YiG5p6Q77yI5Zub77yJ4oCU4oCU5aSa5qC35pys5pW05ZCIXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NTAwMTE3JmlkeD0yJnNuPWNlZjBiMGFiZWM2ZDczYThjMjYxNTk4MGVmNjhhZWMxJmNoa3NtPTliM2NiODA1YWM0YjMxMTNmZGM4MjBiOWM5NjY3Zjk1NTRiMmUzOWY5MGM0NWI1ODA2MDIxYTQxNTY5OGIwYTUxNDFjNTIxYzY0ZGMmc2NlbmU9MTc4JmN1cl9hbGJ1bV9pZD0yOTIzNjk0ODUzMzc1Njg4NzA2I3JkKSAgClvmiYvmiormiYvmlZnkvaDlgZrljZXnu4bog57mtYvluo/mlbDmja7liIbmnpDvvIjkupTvvInigJTigJTnu4bog57nsbvlnovms6jph4pdKGh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9zP19fYml6PU16QXdNekl6T1RrNU9RPT0mbWlkPTIyNDc1MDAxMTcmaWR4PTImc249Y2VmMGIwYWJlYzZkNzNhOGMyNjE1OTgwZWY2OGFlYzEmY2hrc209OWIzY2I4MDVhYzRiMzExM2ZkYzgyMGI5Yzk2NjdmOTU1NGIyZTM5ZjkwYzQ1YjU4MDYwMjFhNDE1Njk4YjBhNTE0MWM1MjFjNjRkYyZzY2VuZT0xNzgmY3VyX2FsYnVtX2lkPTI5MjM2OTQ4NTMzNzU2ODg3MDYjcmQpICAKW+aJi+aKiuaJi+aVmeS9oOWBmuWNlee7huiDnua1i+W6j+aVsOaNruWIhuaekO+8iOWFre+8ieKAlOKAlOe7hOmXtOW3ruW8guWIhuaekOWPiuWPr+inhuWMll0oaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3M/X19iaXo9TXpBd016SXpPVGs1T1E9PSZtaWQ9MjI0NzUwMDExNyZpZHg9MiZzbj1jZWYwYjBhYmVjNmQ3M2E4YzI2MTU5ODBlZjY4YWVjMSZjaGtzbT05YjNjYjgwNWFjNGIzMTEzZmRjODIwYjljOTY2N2Y5NTU0YjJlMzlmOTBjNDViNTgwNjAyMWE0MTU2OThiMGE1MTQxYzUyMWM2NGRjJnNjZW5lPTE3OCZjdXJfYWxidW1faWQ9MjkyMzY5NDg1MzM3NTY4ODcwNiNyZCkgIApb5omL5oqK5omL5pWZ5L2g5YGa5Y2V57uG6IOe5rWL5bqP5pWw5o2u5YiG5p6Q77yI5LiD77yJ4oCU4oCU5Z+65Zug6ZuG5a+M6ZuG5YiG5p6QXShodHRwczovL21wLndlaXhpbi5xcS5jb20vcz9fX2Jpej1NekF3TXpJek9UazVPUT09Jm1pZD0yMjQ3NTAwMzU3JmlkeD0yJnNuPTQwMDM0MDc5Yjc3MWM0NzhiNDgyZTg0OWVkNGIyMTZjJmNoa3NtPTliM2NiYjE1YWM0YjMyMDNkNTE3ZmY3MTA3M2FiMDUyMGZlMTQ0YmMxMDhiN2EyNmY2YjE3ZTg4ZmI2M2E3OGM1Nzc3OTQ2NjE4ZTMmc2NlbmU9MTc4JmN1cl9hbGJ1bV9pZD0yOTIzNjk0ODUzMzc1Njg4NzA2I3JkKSAgCiAgICAKICAgIAojIyA0LjEgIOaVsOaNruivu+WPliAgCgoKYGBge3J9CiMg6K6+572u5bel5L2c55uu5b2VCnNldHdkKCd+L2FuYWx5c2lzL3h1bnlpbi8nKQojIOWKoOi9vVLljIUKaWYgKCFyZXF1aXJlKCJTZXVyYXQiLCBxdWlldGx5ID0gVFJVRSkpaW5zdGFsbC5wYWNrYWdlcygiU2V1cmF0IikKaWYgKCFyZXF1aXJlKCJCaW9jTWFuYWdlciIsIHF1aWV0bHkgPSBUUlVFKSlpbnN0YWxsLnBhY2thZ2VzKCJCaW9jTWFuYWdlciIpCmlmICghcmVxdWlyZSgibXVsdHRlc3QiLCBxdWlldGx5ID0gVFJVRSkpQmlvY01hbmFnZXI6Omluc3RhbGwoIm11bHR0ZXN0IikKaWYgKCFyZXF1aXJlKCJkcGx5ciIsIHF1aWV0bHkgPSBUUlVFKSlpbnN0YWxsLnBhY2thZ2VzKCJkcGx5ciIpCiMg5oyH5a6a5pWw5o2u6Lev5b6ECmRhdGFfZGlyIDwtICJjZWxsbGluZV9vdXQvc3RlcDMvZmlsdGVyZWRfZmVhdHVyZV9iY19tYXRyaXgvIgpsaXN0LmZpbGVzKGRhdGFfZGlyKQoKI+iHquWKqOivu+WPluWumumHj+aVsOaNru+8jOagvOW8j+S4uuS4ieS4qnRzduaIlm10eOaWh+S7tgpzY0ZBU1QuZGF0YSA8LSBSZWFkMTBYKGRhdGEuZGlyID0gZGF0YV9kaXIpIAoKIyDliJvlu7pTZXVyYXTlr7nosaHlubbliJ3mraXov4fmu6QKIyBtaW4uY2VsbHPooajnpLrln7rlm6Doh7PlsJHlnKjlh6DkuKrnu4bog57kuK3ooajovr7vvIxtaW4uZ2VuZXPku6Pooajmr4/kuKrnu4bog57kuK3oh7PlsJHooajovr7lpJrlsJHln7rlm6DvvIznu4bog57nmoTlubPlnYdyZWFkc+aVsOmHjz4gNeS4h+S4gOiIrOavlOi+g+Wlve+8jOWQpuWImemcgOimgeihpea1i++8mgpzY0ZBU1QgPC0gQ3JlYXRlU2V1cmF0T2JqZWN0KGNvdW50cyA9IHNjRkFTVC5kYXRhLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdCA9ICJjZWxsX2xpbmUiLCBtaW4uY2VsbHMgPSAzLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluLmZlYXR1cmVzID0gMjAwKQpgYGAKICAKICAKIyMgNC4yIOaVsOaNrumihOWkhOeQhiAgCmBgYHtyfQojIOmAmui/h+e6v+eykuS9k+eahOW6j+WIl+aVsOadpeWvueaVsOaNrui/m+ihjOiuoeeul+e6v+eykuS9k21STkHnmb7liIbmr5TvvJoKc2NGQVNUW1sicGVyY2VudC5tdCJdXSA8LSBQZXJjZW50YWdlRmVhdHVyZVNldChzY0ZBU1QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9ICJeTVQtIikgIyDlsI/pvKDmlbDmja7pnIDopoHmjaLkuLptdAojIFFD55qE5pWw5o2u5a2Y5ZyobWV0YS5kYXRh6YeM77yM5Y+v5Lul55So6L+Z5Liq5p2l5p+l55yL5YmNNeihjApoZWFkKHNjRkFTVEBtZXRhLmRhdGEsIDUpICAKCiMg55So5bCP5o+Q55C05Zu+5p2l5bGV56S6UUPnmoTnu5PmnpzvvIzlsZXnpLrkuobmr4/kuKpiYXJjb2Rl5Lit5Z+65Zug55qE5pWw55uu44CBVU1J5pWw55uu5Lul5Y+K57q/57KS5L2T5Z+65Zug5ZCr6YeP55qE5YiG5biD5oOF5Ya177yaCiNwZGYoZmlsZSA9ICdGZWF0dXJlLkNvdW50LnBlcmNlbnQubXQucGRmJyxoZWlnaHQgPSA2LHdpZHRoID0gMTgpClZsblBsb3Qoc2NGQVNULCAKICAgICAgICBmZWF0dXJlcyA9IGMoIm5GZWF0dXJlX1JOQSIsICJuQ291bnRfUk5BIiwgInBlcmNlbnQubXQiKSwgCiAgICAgICAgbmNvbCA9IDMpIAojZGV2Lm9mZigpCgojIOWPr+inhuWMlu+8mgpwbG90MSA8LSBGZWF0dXJlU2NhdHRlcihzY0ZBU1QsIGZlYXR1cmUxID0gIm5Db3VudF9STkEiLCBmZWF0dXJlMiA9ICJwZXJjZW50Lm10IikKcGxvdDIgPC0gRmVhdHVyZVNjYXR0ZXIoc2NGQVNULCBmZWF0dXJlMSA9ICJuQ291bnRfUk5BIiwgZmVhdHVyZTIgPSAibkZlYXR1cmVfUk5BIikKYGBgCgoKYGBge3IsZmlnLndpZHRoPTE1LGZpZy5oZWlnaHQ9NX0KI3BkZihmaWxlID0gJ+WIpOaWreWfuuWboOihqOi+vui2i+WKvy5wZGYnLHdpZHRoID0gMTIsaGVpZ2h0ID0gNikKQ29tYmluZVBsb3RzKHBsb3RzID0gbGlzdChwbG90MSwgcGxvdDIpKSAj6auY5Y+Y5Z+65Zug77yM5Yik5pat6LaL5Yq/5Y+K5Y2g5q+UCiNkZXYub2ZmKCkKYGBgCgoKYGBge3J9CiMg6LSo5o6n77yM6YCJ5a2Q6ZuG77yMUk5B5pWw6YeP5ZyoMjAw5LiOMjUwMOS5i+mXtOeahO+8jOWkmueahOWPr+iDveaYr+S9jui0qOmHj+e7huiDnuaIluepumRyb3VwbGV0c++8jGdlbmUgY291bnTlpJrnmoTlj6/og73mmK9kb3VibGV0cyBvciBtdWx0aXBsZXRzOgpzY0ZBU1QgPC0gc3Vic2V0KHNjRkFTVCwgc3Vic2V0ID0gbkZlYXR1cmVfUk5BID4gMjAwICYgCiAgICAgICAgICAgICAgICAgIG5GZWF0dXJlX1JOQSA8IDI1MDAgJiBwZXJjZW50Lm10IDwgNSkgICAKCiMg55SoTG9nTm9ybWFsaXpl5rOV5a+55pWw5o2u6L+b6KGM5qCH5YeG5YyW77yI5LmYMTAwMDDlho3lj5blr7nmlbDvvInmlbDmja7lrZjlnKhzY0ZBU1RbWyJSTkEiXV1AZGF0YS7ph4wKIyDpu5jorqTnmoTmlrnms5XkuZ/lrozmiJDkuoZsb2cxcOeahOaTjeS9nO+8jOW+l+WIsOeahOe7k+aenOWwseexu+S8vOS6jlRQTeeahOWvueaVsDoKc2NGQVNUIDwtIE5vcm1hbGl6ZURhdGEoc2NGQVNULCBub3JtYWxpemF0aW9uLm1ldGhvZCA9ICJMb2dOb3JtYWxpemUiLCAKICAgICAgICAgICAgICAgICAgICAgICBzY2FsZS5mYWN0b3IgPSAxMDAwMCkgICAgICAKCiMg562b6YCJ6auY5Y+Y5Z+65Zug77yI6L6T5Ye6MjAwMOS4qu+8ie+8jOeUqOS6juS4i+a4uOeahFBDQeWPiuWIhue+pDoKc2NGQVNUIDwtIEZpbmRWYXJpYWJsZUZlYXR1cmVzKHNjRkFTVCwgc2VsZWN0aW9uLm1ldGhvZCA9ICJ2c3QiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmZlYXR1cmVzID0gMjAwMCkKCiMg6L6T5Ye65beu5byC5pyA5aSn55qE5Y2B5Liq5Z+65ZugOgp0b3AxMCA8LSBoZWFkKFZhcmlhYmxlRmVhdHVyZXMoc2NGQVNUKSwgMTApIApwbG90MSA8LSBWYXJpYWJsZUZlYXR1cmVQbG90KHNjRkFTVCkKcGxvdDIgPC0gTGFiZWxQb2ludHMocGxvdCA9IHBsb3QxLCBwb2ludHMgPSB0b3AxMCwgcmVwZWwgPSBUUlVFKQoKI+i+k+WHuuW3ruW8guWfuuWboOaVo+eCueWbvu+8iOacieaXoOagh+etvu+8iToKcGxvdDErcGxvdDIgIAoKIyDlsIbmlbDmja7ov5vooYzlvZLkuIDljJbvvIzkuLrlkI7nu63nmoRQQ0HliIbmnpDlgZrlh4blpIfvvIzmlbDmja7lrZjlnKhzY0ZBU1RbWyJSTkEiXV1Ac2NhbGUuZGF0YQpzY0ZBU1QgPC0gU2NhbGVEYXRhKHNjRkFTVCwgZmVhdHVyZXMgPSAgcm93bmFtZXMoc2NGQVNUKSkgIAoKCiNzY0ZBU1QgPC0gU2NhbGVEYXRhKHNjRkFTVCkjb25seTRWYXJpYWJsZUZlYXR1cmVzCgojIOWbnuW9kuiuoeeul+a2iOmZpOaXoOWFs+eahOWPmOmHj++8iOWmgue6v+eykuS9k+eahOavlOS+i++8ie+8mgpzY0ZBU1QgPC0gU2NhbGVEYXRhKHNjRkFTVCwgdmFycy50by5yZWdyZXNzID0gInBlcmNlbnQubXQiKSAKI3NjRkFTVFtbIlJOQSJdXUBzY2FsZS5kYXRhCgojIFBDQemZjee7tOWIhuaekO+8mgpzY0ZBU1QgPC0gUnVuUENBKHNjRkFTVCwgCiAgICAgICAgICAgICAgICBmZWF0dXJlcyA9IFZhcmlhYmxlRmVhdHVyZXMob2JqZWN0ID0gc2NGQVNUKSkgCgojIOaJk+WNsFBDQemDqOWIhue7k+aenO+8mgpwcmludChzY0ZBU1RbWyJwY2EiXV0sIGRpbXMgPSAxOjUsIG5mZWF0dXJlcyA9IDUpIAojcGRmKGZpbGUgPSAnUENBX+eCueWbvi5wZGYnLHdpZHRoID0gMTAsaGVpZ2h0ID0gNikKVml6RGltTG9hZGluZ3Moc2NGQVNULCBkaW1zID0gMToyLCByZWR1Y3Rpb24gPSAicGNhIikgCiNkZXYub2ZmKCkKCiMg5LiJ56eNUENB5bGV56S65pa55byP77yaCkRpbUhlYXRtYXAoc2NGQVNULCBkaW1zID0gMSwgCiAgICAgICAgICAgY2VsbHMgPSA1MDAsIGJhbGFuY2VkID0gVFJVRSkgCiNwZGYoZmlsZSA9ICdQQ0EuaGVhdG1hcC5wZGYnLHdpZHRoID0gMTUsaGVpZ2h0ID0gMTIpCgojIOWxleekujE156eNUENB77yaCkRpbUhlYXRtYXAoc2NGQVNULCBkaW1zID0gMToxNSwgCiAgICAgICAgICAgY2VsbHMgPSA1MDAsIGJhbGFuY2VkID0gVFJVRSkgCiNkZXYub2ZmKCkKCiMg562b6YCJ5ZCI6YCC55qE57u05bqm77yaCiMg6YeN5aSN6K6h566X5qyh5pWw77yaCnNjRkFTVCA8LSBKYWNrU3RyYXcoc2NGQVNULCBudW0ucmVwbGljYXRlID0gMTAwKSAKCiMg6K6h566X57u05bqm6L+Z5LiA5q2l6Iqx55qE5pe26Ze05q+U6L6D5LmF77yaCnNjRkFTVCA8LSBTY29yZUphY2tTdHJhdyhzY0ZBU1QsIGRpbXMgPSAxOjIwKSAKI3BkZihmaWxlID0gJ2phY2tzdHJhd3Bsb3QucGRmJyx3aWR0aCA9IDYsaGVpZ2h0ID0gNikKCiMgSmFja1N0cmF3UGxvdOebuOW9k+S6jumrmOe6p1BDQe+8jOS4uuaMkemAieWQiOmAgue7tOW6pui/m+ihjOS4i+a4uOWPr+inhuWMluaPkOS+m+S+neaNru+8mgojIOeUu+WHujHliLAxNeS4que7tOW6pu+8mgpKYWNrU3RyYXdQbG90KHNjRkFTVCwgZGltcyA9IDE6MTUpIAojZGV2Lm9mZigpCgoKIyDliKnnlKhFbGJvd1Bsb3TmnaXor4Tku7dQQ++8jOS4jeWPr+S4uuS6hue7k+aenOWlveeci+iAjOmZjeS9jlBD5pWwCiNwZGYoZmlsZSA9ICdlbGJvdy5wZGYnLHdpZHRoID0gNixoZWlnaHQgPSA1KQpFbGJvd1Bsb3Qoc2NGQVNUKSAKI2Rldi5vZmYoKQpgYGAKICAKICAKIyMgNC4zIOmZjee7tOOAgeWIhue+pOOAgeazqOmHiiAgCiAgCmBgYHtyfQpzY0ZBU1QgPC0gRmluZE5laWdoYm9ycyhzY0ZBU1QsIGRpbXMgPSAxOjExKQoKIyDnu4bog57liIbnvqTvvIxyZXNvbHV0aW9u5YiG6L6o546H5Zyo57uG6IOe5pWw5ZyoMzAwMOmZhOi/keaXtuS4gOiIrOiuvuS4ujAuNC0xLjLvvIxyZXNvbHV0aW9u6LaK5aSn5b6X5Yiw55qE57G7576k6LaK5aSaOgpzY0ZBU1QgPC0gRmluZENsdXN0ZXJzKHNjRkFTVCwgcmVzb2x1dGlvbiA9IDAuNSkgCgojIOeci+WJjeS6lOS4quWIhuexu+e+pElEOgpoZWFkKElkZW50cyhzY0ZBU1QpLCA1KSAKCiPpnZ7nur/mgKfpmY3nu7Tmlrnms5XvvJpVTUFQ44CBdFNORQoKIyDov5DooYxVTUFQ566X5rOVOgpzY0ZBU1QgPC0gUnVuVU1BUChzY0ZBU1QsIGRpbXMgPSAxOjExKSAKCiMg6L+Q6KGMVFNOReeul+azle+8jFRTTkXnrpfms5Xov5DooYzml7bpl7TovoNVTUFQ5pu05LmFOgpzY0ZBU1QgPC0gUnVuVFNORShzY0ZBU1QsIGRpbXMgPSAxOjExKSAKRGltUGxvdChzY0ZBU1QsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgbGFiZWwgPSBUUlVFKQoKIyDorqHnrpdjbHVzdGVyMeebuOi+g+S6juWFtuWug2NsdXN0ZXLnmoRtYXJrZXLvvJoKY2x1c3RlcjEubWFya2VycyA8LSBGaW5kTWFya2VycyhzY0ZBU1QsIGlkZW50LjEgPSAxLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4ucGN0ID0gMC4yNSkgCgojIHJvY+eul+azleiuoeeul2NsdXN0ZXIx55qEbWFya2VyCmNsdXN0ZXIxLm1hcmtlcnMgPC0gRmluZE1hcmtlcnMoc2NGQVNULCBpZGVudC4xID0gMCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZmMudGhyZXNob2xkID0gMC4yNSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC51c2UgPSAicm9jIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seS5wb3MgPSBUUlVFKSAgCgojIOafpeeci+WJjeS6lOS4quagh+iusOWfuuWboO+8mgpoZWFkKGNsdXN0ZXIxLm1hcmtlcnMsIG4gPSA1KSAKCgojIOWvu+aJvuavj+S4gOS4quWIhuexu+e+pOS4juWFtuS7luaJgOaciee7huiDnuS5i+mXtOeahOagh+iusOWfuuWboO+8jOW5tuWPquaYvuekunBvc2l0aXZl57uT5p6cCnNjRkFTVC5tYXJrZXJzIDwtIEZpbmRBbGxNYXJrZXJzKHNjRkFTVCwgb25seS5wb3MgPSBUUlVFLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4ucGN0ID0gMC4yNSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZmMudGhyZXNob2xkID0gMC4yNSkgCgoKbGlicmFyeShkcGx5cikKIyDnrZvpgInlh7p0b3AxMO+8mgp0b3AxMGdlbmUgPC0gc2NGQVNULm1hcmtlcnMgJT4lIGdyb3VwX2J5KGNsdXN0ZXIpICU+JSAKICB0b3BfbihuID0gMTAsIHd0ID0gYXZnX2xvZzJGQykgCiMgcGRmKGZpbGUgPSAndG9wMTBtYXJrZXIucGRmJyx3aWR0aCA9IDIwLGhlaWdodCA9IDEwMCkKVmxuUGxvdChzY0ZBU1QsIGZlYXR1cmVzID0gdW5pcXVlKHRvcDEwZ2VuZSRnZW5lKSwKICAgICAgICBwdC5zaXplID0gMCxuY29sID0gNCkKIyBkZXYub2ZmKCkKClZsblBsb3Qoc2NGQVNULCBmZWF0dXJlcyA9IHVuaXF1ZSh0b3AxMGdlbmUkZ2VuZSksCiAgICAgICAgcHQuc2l6ZSA9IDAsc3RhY2sgPSBUKQoKRGltUGxvdChzY0ZBU1QpCgojIOafpeeci+mDqOWIhm1hcmtlcuWfuuWboOWcqEZlYXR1cmVQbG90KOS7pVVNQVDkvZzkuLrlupXlm74p5Lit55qE6KGo6L6+5oOF5Ya177yaCkZlYXR1cmVQbG90KHNjRkFTVCwgCiAgICAgICAgICAgIGZlYXR1cmVzID0gdW5pcXVlKHRvcDEwZ2VuZSRnZW5lKVsxOjldKSAKIyDlsZXnpLpjbHVzdGVy5qCH562+CkZlYXR1cmVQbG90KHNjRkFTVCwgCiAgICAgICAgICAgIGZlYXR1cmVzID0gdW5pcXVlKHRvcDEwZ2VuZSRnZW5lKVsxOjldLAogICAgICAgICAgICBsYWJlbCA9IFQpIApGZWF0dXJlUGxvdChzY0ZBU1QsIAogICAgICAgICAgICBmZWF0dXJlcyA9IGMoIkFMREgxQTEiLCJBS1IxQzIiLCJBS1IxQzMiLCJDWVAyNEExIikpIAoKIyDlsZXnpLrliY0xMOS4quagh+iusOWfuuWboOeahOeDreWbvgp0b3AxMCA8LSBzY0ZBU1QubWFya2VycyAlPiUgZ3JvdXBfYnkoY2x1c3RlcikgJT4lIHRvcF9uKG4gPSAxMCwgd3QgPSBhdmdfbG9nMkZDKQpEb0hlYXRtYXAoc2NGQVNULCBmZWF0dXJlcyA9IHRvcDEwJGdlbmUpICsgTm9MZWdlbmQoKQpgYGAKCgpgYGB7cixldmFsPUZ9CiPpgJrov4fmoIforrDln7rlm6Dlj4rmlofnjK7vvIzlj6/ku6Xkurrlt6Xnoa7lrprlkITliIbnsbvnvqTnmoTnu4bog57nsbvlnovvvIzliJnlj6/ku6XlpoLkuIvmiYvliqjmt7vliqDnu4bog57nvqTlkI3np7DvvJoKCiMg6YeN5ZG95ZCN5pa55rOVMe+8mgpuZXcuY2x1c3Rlci5pZHMgPC0gYygiQ2VsbHR5cGVfQSIsICJDZWxsdHlwZV9CIiwiQ2VsbHR5cGVfQyIsCiAgICAgICAgICAgICAgICAgICAgICJDZWxsdHlwZV9CIiwiQ2VsbHR5cGVfQiIsIkNlbGx0eXBlX0MiKQpuYW1lcyhuZXcuY2x1c3Rlci5pZHMpIDwtIGxldmVscyhzY0ZBU1QpCnNjRkFTVCA8LSBSZW5hbWVJZGVudHMoc2NGQVNULCBuZXcuY2x1c3Rlci5pZHMpCnNjRkFTVCRjZWxsdHlwZSA8LSBJZGVudHMoc2NGQVNUKQpgYGAKCgpgYGB7cn0KIyDph43lkb3lkI3mlrnms5UyCnNjRkFTVCRjZWxsdHlwZSA8LSBzY0ZBU1QkUk5BX3Nubl9yZXMuMC41CnNjRkFTVCRjZWxsdHlwZSA8LSByZWNvZGUoc2NGQVNUJGNlbGx0eXBlLAogICAgICAgICAgICAgICAgICAnMCc9IkNlbGx0eXBlX0EiLCAKICAgICAgICAgICAgICAgICAgJzEnPSJDZWxsdHlwZV9CIiwKICAgICAgICAgICAgICAgICAgJzInPSJDZWxsdHlwZV9DIiwKICAgICAgICAgICAgICAgICAgJzMnPSJDZWxsdHlwZV9CIiwKICAgICAgICAgICAgICAgICAgJzQnPSJDZWxsdHlwZV9CIiwKICAgICAgICAgICAgICAgICAgJzUnPSJDZWxsdHlwZV9DIikKCklkZW50cyhzY0ZBU1QpIDwtICdjZWxsdHlwZScKCiMg6K6h566X6YeN5ZG95ZCN5ZCO55qE57uG6IOe57G75Z6LbWFya2VyCnNjRkFTVF9yZW5hbWVfbWFya2VycyA8LSBGaW5kQWxsTWFya2VycyhzY0ZBU1QsIG9ubHkucG9zID0gVFJVRSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbi5wY3QgPSAwLjI1LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZmMudGhyZXNob2xkID0gMC4yNSkgCiMg562b6YCJdG9wNSBtYWtlcgp0b3A1X3JlbmFtZSA8LSBzY0ZBU1RfcmVuYW1lX21hcmtlcnMgJT4lIGdyb3VwX2J5KGNsdXN0ZXIpICU+JSAKICB0b3BfbihuID0gNSwgd3QgPSBhdmdfbG9nMkZDKQoKIyDliKnnlKjloIbnp6/lsI/mj5DnkLTlm77mn6XnnIvooajovr7mg4XlhrXvvJoKVmxuUGxvdChzY0ZBU1QsCiAgICAgICAgICBmZWF0dXJlcyA9IHVuaXF1ZSh0b3A1X3JlbmFtZSRnZW5lKSwKICAgICAgICAgICAgc3RhY2sgPSBUKQoKIyDmsYLlkITkuKrnu4bog57nsbvlnovln7rlm6DnmoTlubPlnYfooajovr7ph4/vvJoKY2VsbC5leHByIDwtIAogIGxvZzFwKEF2ZXJhZ2VFeHByZXNzaW9uKHNjRkFTVCwgdmVyYm9zZSA9IEZBTFNFKSRSTkEpCgpoZWFkKGNlbGwuZXhwcikKCkRpbVBsb3Qoc2NGQVNULCByZWR1Y3Rpb24gPSAidW1hcCIsIAogICAgICAgIGxhYmVsID0gVFJVRSwgcHQuc2l6ZSA9IDAuNSkgKyBOb0xlZ2VuZCgpCgpJZGVudHMoc2NGQVNUKSA8LSAnY2VsbHR5cGUnCgpEaW1QbG90KHNjRkFTVCwgcmVkdWN0aW9uID0gInVtYXAiLCAKICAgICAgICBsYWJlbCA9IFRSVUUsIHB0LnNpemUgPSAwLjUpICsgTm9MZWdlbmQoKQpgYGAKICAK5Y+v5Lul5aaC5piv5a6M5oiQ5pWw5o2u55qE5L+d5a2Y5LiO5YaN5qyh6K+75Y+W77yaCmBgYHtyLGV2YWw9Rn0KIyDliJvlu7rnm67lvZXvvJoKZGlyLmNyZWF0ZSgnc2NGQVNUX291dCcpCgojIOWwhlNldXJhdOWvueixoeS/neWtmOS4unJkc+aWh+S7tui+k+WHuu+8mgpzYXZlUkRTKHNjRkFTVCwgZmlsZSA9ICIuL3NjRkFTVF9vdXQvc2NGQVNUX2Zhc3QucmRzIikKCiMg6K+75Y+WcmRz5paH5Lu277yaCnNjRkFTVCA8LSByZWFkUkRTKCcuL3NjRkFTVF9vdXQvc2NGQVNUX2Zhc3QucmRzJykKCmBgYAogIAojIOS6lOOAgWBtdXRg5qih5Z2XICAKIyMgNS4xIOeugOS7iyAgCuivpeaooeWdl+eUqOS6juWIhuaekGBwYW5lbGDmlbDmja7miJbogIXlhajluo/liJfmlbDmja7kuK3nmoQq5Y+Y5byC5L+h5oGvKu+8jOWPr+S7peivtOaYr3NjRkFTVOeahOeJueiJsuWIhuaekOaooeWdl+OAguWcqOivpeaooeWdl+S4re+8jOWvueWPr+mdoOeahOeqgeWPmOS9jeeCueS8mue7meWHuuS9jeeCueaJgOWcqGBjbHVzdGVyYOOAgSBgYmFyY29kZWDnrYnkv6Hmga/vvIzmiYDku6XpnIDopoHmj5DkvptgcmRzYOaWh+S7tijljbPmiJHku6zkuIrkuIDmraXkuK3lrZjlh7rnmoRgc2NGQVNUX2Zhc3QucmRzYOaWh+S7tinvvIzlm6DmraTvvIzpnIDopoHlhYjliKnnlKhgc2Vla3NvdWx0b29sc2DnrYnova/ku7bov5vooYzlrprph4/jgIHliIbnvqTkuYvlkI7lho3nlKjmraTmqKHlnZfov5vooYzlj5jlvILmo4DmtYvjgIJwYW5lbOeahOWIhuaekOS5n+aYr+S9v+eUqOivpeaooeWdl+WujOaIkOeahOOAgiAgCiAgCiMjIDUuMiDmqKHlnZflt6XkvZzmtYHnqIsgIAohW+eqgeWPmOajgOa1i+aooeWdl+a1geeoi+ekuuaEj+Wbvl0ocm1kX2ltYWdlL2ltYWdlXzEwLnBuZykKICAK5Zyo5bCG5pW05L2T5pWw5o2u5Y+Y5byC5L2N54K55Yiw5Y2V57uG6IOe57u05bqm5pe277yM5Yip55So5LqGYGJhbWDmlofku7bkuK3mr4/mnaFgcmVhZHNg55qEYGJhcmNvZGVg5ZKMYFVNSWDkv6Hmga/jgILmtYHnqIvpu5jorqTlsIYq6Z2e5ZCM5LmJ56qB5Y+YKui/h+a7pO+8jOW5tuS4lOWfuuS6jumTvuWBj+WlveaAp+WvueeqgeWPmOi/m+ihjOWGjeS4gOasoeeahOi/h+a7pOOAggoK5oiR5Lus5L2/55SoIGBTT1LvvIhTeW1tZXRyaWMgT2RkcyBSYXRpb++8iWDlgLzor4TkvLDpk77lgY/lpb3mgKfjgIJgc252YOWwj+S6jmAxLjBg44CBYGluZGVsYCDpu5jorqTlsI/kuo5gMTAuMGDnmoTmiYDmnInkvY3ngrnov5vooYxyZWFkc+e7n+iuoe+8jOW5tuS4lOavj+S4quS9jeeCueWPr+e7meWHuuS4gOS4quS4remXtOaWh+S7tu+8iOivpeaWh+S7tueUn+aIkOS4juWQpuagueaNrl90bXB0eXBlX+WPguaVsOiuvuWumu+8ie+8jOWmguS4iwpgYGB7YmFzaCxldmFsPUZ9CkJDX1VNSSAgQktHRC9DQiBjb3ZlcmFnZSAgICAgICAgYWx0ICAgICByZWYxICAgIHJlZjIgICAgYWx0MSAgICBhbHQyCkNHVEFHVEFDR0FHQ0FDR0FBX0NDQ0dDVFRUQ0NUVCAgY2VsbCAgICAzNSAgICAgIDAgICAgICAgMCAgICAgICAzNSAgICAgIDAgICAgICAgMApUR0FUQ0FHQVRHR1RBQUNBQ19BQ1RDQ1RUVENDQVQgIGNlbGwgICAgMzQgICAgICAxICAgICAgIDAgICAgICAgMzMgICAgICAwICAgICAgIDEKQUdHQVRBQVRBQ0FDVEFDR0FfQ1RHVENHQVRDQ1RUICBiYWNrZ3JvdW5kICAgICAgMSAgICAgICAxICAgICAgIDAgICAgICAgMCAgICAgICAwICAgICAgIDEKYGBgCiAgCuivpeaWh+S7tuiusOW9leeqgeWPmOS9jeeCueS4reavj+S4gOadoWBVTUlg55qEcmVmIGFsdCByZWFkc+aVsOmHj++8jOW5tuS+neaNruatpOWvueS9jeeCuei/m+ihjOS6hui/h+a7pO+8jOi/h+a7pOadoeS7tuWmguS4i++8miAgCu+8iDHvvInlj6rmnInnrKblkIhgYWx0L2NvdmVyYWdlYD49MC45KGBhbHR2YWZg5Y+C5pWw5YC8KeS4lGBjb3ZlcmFnZSByZWFkc2A+PTIoYFVNSXJlYWRzYOWPguaVsOWAvCnnmoRVTUnmiY3ooqvorqTkuLrmmK/mlK/mjIHnqoHlj5jnmoRVTUnvvJsgIArvvIgy77yJ5pSv5oyB56qB5Y+YYOeahFVNSWDmlbDnm64+PTIoYHVtaWludGDlj4LmlbDlgLwp77ybICAK77yIM++8ieaUr+aMgeeqgeWPmOeahGBiYXJjb2RlYOaVsOebrj49MihgYmNpbnRg5Y+C5pWw5YC8Ke+8myAgCu+8iDTvvInkvY3ngrnmgLvnqoHlj5hgcmVhZHNgPj0yKGBBRGludGDmlbDlgLwp77ybICAK77yINe+8ieS9jeeCueimhueblmByZWFkc2A+PTIoYERQaW50YOWPguaVsOWAvCnvvJsgIArvvIg277yJYHNudmDnmoRgc29yYOWAvDw9MS4wIGBpbmRlbGDnmoRgc29yYDw9MTAuMChgc29yY3V0YOWPguaVsOWAvCkg77ybICAK77yIN++8iWBFeEFDYOaVsOaNruW6k+S4rWBlYXNg5ZKMYEFsbGDpopHnjoflsI/kuo4wLjAx77ybICAK77yIOO+8ieeqgeWPmOeahGB2YWZgKGFsdCByZWFkcy9jb3ZlcmFnZSByZWFkcykgPiAwLjAzIOOAgue7j+i/h+WmguS4ijjkuKrmraXpqqTov4fmu6TnmoTkvY3ngrnorqTkuLrmmK/mnIDnu4jnmoTnqoHlj5jkvY3ngrnjgIIKICAKICAKIyMgNS4zIOi/kOihjGBtdXRg5qih5Z2XCiMjIyA1LjMuMSDovpPlhaXmlofku7blh4blpIcgIApwYW5lbOWOn+Wni2Zhc3Rx5pWw5o2u77yIY2xlYW4gZGF0Ye+8m+mcgOimgeiHquihjOeUqGZhc3Rw562J6L2v5Lu25aSE55CG5LiL5py65pWw5o2u77yJCgotIFNUQVLova/ku7YgIArlj6/ku6XpgInmi6nmnKzova/ku7bnjq/looPkuK3nmoRgU1RBUmDvvIzkuZ/lj6/ku6XnlKjlpJbpg6hgU1RBUmAgIAoKLSDln7rlm6Dnu4RmYXN0YeaWh+S7tgoKLSBgU1RBUmDova/ku7bnmoTlj4LogIPln7rlm6Dnu4TntKLlvJXmlofku7YgIArpnIDopoHms6jmhI9TVEFS6L2v5Lu254mI5pys5YW85a656Zeu6aKYICAKCi0g5YWo5bqP5YiX5pWw5o2u77yI6Z2ecGFuZWzmlbDmja7vvIkgIArlpITnkIblvpfliLDnmoTooajovr7nn6npmLXov5vooYzpmY3nu7TliIbnvqTkuYvlkI7nmoTmlofku7bvvIzljbPmiJHku6zkuIrmlofkv53lrZjnmoRgc2NGQVNUX2Zhc3QucmRzYOaWh+S7tgoKLSBgcGFuZWxg55qEYGJlZGDmlofku7YKCi0gYW5ub3Zhcui9r+S7tuWPiuWFtmBkYXRhYmFzZWAgIApb5Y+v6KeBMi4zLjPpg6jliIZdKCNhbm5vdmFy6Lez6L2sKQoKIyMjIDUuMy4yIOi/kOihjGBtdXRg5qih5Z2XICAK5Y+C5pWw6Kej6YeK77yaIAogIAotIFwtXC1mcTEgICAgCnBhbmVsIFIxIGZhc3Rx5pWw5o2u6Lev5b6E44CCICAKCi0gXC1cLWZxMiAgCnBhbmVsIFIyIGZhc3Rx5pWw5o2u6Lev5b6E44CCCgotIFwtXC1nZW5vbWVEaXIgIApTVEFS6L2v5Lu25p6E5bu655qE57Si5byV5paH5Lu277yM5rOo5oSP6ZyA6KaB5LiOU1RBUui9r+S7tueJiOacrOWFvOWuueOAgiAgCgotIFwtXC1zdGFyX3BhdGggIApTVEFS6L2v5Lu255qE6Lev5b6E44CCICAKCi0gXC1cLWZhc3RhICAK5Y+C6ICD5Z+65Zug57uE55qEZmFzdGHmlofku7bjgILms6jmhI/vvIxmYXN0YeaWh+S7tueahOafk+iJsuS9k+WQjeensOmcgOimgeS4jmdlbm9tZURpcueahOafk+iJsuS9k+WQjeensOS/neaMgeS4gOiHtOOAggoKLSBcLVwtc2FtcGxlbmFtZSAgCuagt+acrOWQjeensOOAggoKLSBcLVwtb3V0ZGlyICAK57uT5p6c55uu5b2V44CCCgotIFwtXC1yZHMgIArlhajluo/liJdSTkHooajovr7nn6npmLXnmoRyZHPmlofku7bjgIIKCi0gXC1cLWFubm92YXJwbCAgCuS4i+i9veeahGFubm92YXLova/ku7bot6/lvoTjgIIKCi0gXC1cLWFubm92YXJkYiAgCuS4i+i9veeahGFubm92YXLmlbDmja7lupPot6/lvoTjgIIKCi0gXC1cLXJlZiAgCuWPguiAg+WfuuWboOe7hOeJiOacrOOAggoKLSBcLVwtY2VsbGFubm8gIApzZXVyYXRfY2x1c3RlcnPmiJbogIVDZWxsVHlwZe+8jOm7mOiupOS4unNldXJhdF9jbHVzdGVyc++8jOW9k3Jkc+aWh+S7tuaYr+e7j+i/h+aJi+WKqOazqOmHiuS5i+WQjueahHJkc+aWh+S7tuaXtu+8jOWwhm1ldGEgZGF0Yee7huiDnuexu+Wei+WIl+WRveWQjeS4ukNlbGxUeXBl77yM5bm25bCG5q2k5Y+C5pWw6K6+572u5Li6Q2VsbFR5cGXjgIIKCi0gXC1cLWZpbHRlZCAgCmZzeXPjgILpu5jorqTlj6rkv53nlZnpnZ7lkIzkuYnnqoHlj5jjgIIKCi0gXC1cLXRtcHR5cGUgIArlj4LmlbDlgLzkuLphbGxyZWFkc+aXtu+8jOavj+S4quS9jeeCueWcqEJDX1VNSV9yZWFkc190bXDot6/lvoTkuIvnlJ/miJDkuIDkuKrorrDlvZXor6bnu4ZyZWFkc+aVsOebrueahOaWh+S7tuOAguivpeWPguaVsOWAvOm7mOiupOS4unR4dO+8jOWNs+S4jeeUn+aIkOivpue7hueahOaWh+S7tuOAggoKLSBcLVwtcGFuZWzvvJpwYW5lbOeahGJlZOaWh+S7tuOAgiDmraTlj4LmlbDml7bvvIzlj6rlr7liZWTljLrpl7TlhoXov5vooYzlj5jlvILmo4DmtYvvvIzlvZPkuI3mjIflrprmraTlj4LmlbDnmoTml7blgJnvvIzkvJrlr7nlhajpg6hyZWFkc+i/m+ihjOWPmOW8guajgOa1i+OAgiAgCgpgYGB7YmFzaCxldmFsPUZ9CiMg5Lu75Yqh5q+U6L6D5aSn77yM5bCG5YW25Lii5Yiw5ZCO5Y+w6L+Q6KGMCm5vaHVwIHNlZWtzb3VsdG9vbHMgbXV0IHJ1biBcCiAgICAgICAgLS1mcTEgL2hvbWUvYmlvbWFtYmEvYW5hbHlzaXMveHVueWluL3Rlc3RfZGF0YS9jZWxsbGluZV90ZXN0L2NlbGxsaW5lX1IxXzAwMS5jbGVhbi5mYXN0cS5neiBcCiAgICAgICAgLS1mcTIgL2hvbWUvYmlvbWFtYmEvYW5hbHlzaXMveHVueWluL3Rlc3RfZGF0YS9jZWxsbGluZV90ZXN0L2NlbGxsaW5lX1IyXzAwMS5jbGVhbi5mYXN0cS5neiBcCiAgICAgICAgLS1nZW5vbWVEaXIgL2hvbWUvYmlvbWFtYmEvYW5hbHlzaXMveHVueWluL215X3JlZmZlcmVuY2UvaGczOC8gXAogICAgICAgIC0tZmFzdGEgL2hvbWUvYmlvbWFtYmEvZXh0X2RhdGEyL2FuYWx5c2lzL3h1bnlpbi9teV9yZWZmZXJlbmNlL2hnMzgvaGczOC5mYSBcCiAgICAgICAgLS1zYW1wbGVuYW1lIGNlbGxsaW5lIFwKICAgICAgICAtLW91dGRpciAvaG9tZS9iaW9tYW1iYS9hbmFseXNpcy94dW55aW4vY2VsbF9saW5lX211dG91dCBcCiAgICAgICAgLS1yZHMgIC9ob21lL2Jpb21hbWJhL2FuYWx5c2lzL3h1bnlpbi9zY0ZBU1Rfb3V0L3NjRkFTVF9mYXN0LnJkcyBcCiAgICAgICAgLS1hbm5vdmFycGwgL2hvbWUvYmlvbWFtYmEvZXh0X2RhdGEyL2FuYWx5c2lzL3h1bnlpbi9hbm5vdmFyL3RhYmxlX2Fubm92YXIucGwgXAogICAgICAgIC0tYW5ub3ZhcmRiIC9ob21lL2Jpb21hbWJhL2V4dF9kYXRhMi9hbmFseXNpcy94dW55aW4vYW5ub3Zhci9odW1hbmRiIFwKICAgICAgICAtLXJlZiBoZzM4IFwKICAgICAgICAtLWZpbHRlZCBmc3lzIFwKICAgICAgICAtLWNlbGxhbm5vIGNlbGx0eXBlIFwKICAgICAgICAtLWNvcmUgNCAyPiYxID4gbXV0LmxvZyAmCmBgYAogIAogIAojIyMgNS4zLjMg6L6T5Ye657uT5p6cICAK6L6T5Ye66Lev5b6E5Lit5YyF5ZCr55qE5paH5Lu25Li677yaCmBgYHtiYXNofQp0cmVlIGNlbGxfbGluZV9tdXRvdXQKYGBgCiAgCiAgCumHjeimgei+k+WHuue7k+aenApgKmNsdXN0ZXJzLnZhcnNjYW4uc25wX2luZGVsLmhnMzhfbXVsdGlhbm5vLnhsc2DvvJrmmK/nu4/ov4diYXJjb2RlIFVNSSB2YWYg5Lq6576k6aKR546H562J6L+H5ruk55qE5pyA57uI5L2N54K55rOo6YeK5paH5Lu2ICAKCmAqLnNucF9pbmRlbC5hbHRfVU1JLm1hdHJpeGDvvJrmmK/nu4/ov4fmnIDnu4jov4fmu6TnmoTkvY3ngrnlnKjnu4bog57kuK3nqoHlj5jnmoRVTUnnn6npmLXvvIzooYzmmK/nqoHlj5jvvIzliJfmmK/nu4bog57jgIIgIAohW10ocm1kX2ltYWdlL2ltYWdlXzExLnBuZykgIAogIApgKi5zbnBfaW5kZWwuYWxsX1VNSS5tYXRyaXhg77ya5piv57uP6L+H5pyA57uI6L+H5ruk55qE5L2N54K55Zyo57uG6IOe5Lit6KaG55uW55qEVU1J55+p6Zi177yM6KGM5piv56qB5Y+Y77yM5YiX5piv57uG6IOe44CCICAKIVtdKHJtZF9pbWFnZS9pbWFnZV8xMi5wbmcpICAKICAKYG11dGF0aW9uX3VtYXAvKl9zbnZfbWFya2Vycy54bHNg57uT5p6c5aaC5LiL5omA56S677yaCiFbXShybWRfaW1hZ2UvaW1hZ2VfMTMucG5nKSAgCuavj+WIl+eahOWQq+S5ieS4uu+8miAgCmBTTlZg77ya56qB5Y+Y5L2N54K5CgpgcF92YWxg77yaZmlzaGVy5qOA6aqM55qEcOWAvAoKYGlkZW50MV9jb3ZlcmDvvJrnm67moIdjbHVzdGVyL2NlbGx0eXBl5Lit5pyJ5aSa5bCR57uG6IOe6KaG55uW5Yiw5LqG6L+Z5Liq56qB5Y+Y5L2N54K55L2G5piv5rKh5Y+R55Sf56qB5Y+YCgpgaWRlbnQxX211dGDvvJrnm67moIdjbHVzdGVyL2NlbGx0eXBl5Lit5pyJ5aSa5bCR57uG6IOe5bim5pyJ6L+Z5Liq56qB5Y+YCgpgaWRlbnQyX2NvdmVyYDog6Z2e55uu5qCHY2x1c3Rlci9jZWxsdHlwZeS4reacieWkmuWwkee7huiDnuimhuebluWIsOS6hui/meS4queqgeWPmOS9jeeCueS9huaYr+ayoeWPkeeUn+eqgeWPmAoKYGlkZW50Ml9tdXRg77ya6Z2e55uu5qCHY2x1c3Rlci9jZWxsdHlwZeS4reacieWkmuWwkee7huiDnuW4puaciei/meS4queqgeWPmAoKYGNsdXN0ZXJg77ya55uu5qCH57uG6IOe57G75Z6LCgogIAojIyMgNS4zLjQgYFNldXJhdGDlho3lpITnkIblj4rlj6/op4bljJYgIAogIApgYGB7cn0KbGlicmFyeShTZXVyYXQpCiMg6K+75Y+W5aSE55CG5ZCO55qEcmRz5paH5Lu2CnNjRkFTVCA8LSByZWFkUkRTKCdjZWxsX2xpbmVfbXV0b3V0L211dGF0aW9uX3VtYXAvY2VsbGxpbmVfYWRkX3Nudi5yZHMnKQoKIyDkuI7ljp/mnaXkuIDmoLfmmK/kuIDkuKpTZXVyYXTlr7nosaHvvIzlj6/ku6Xmn6XnnIvkuIDkuIvnu4bog57nsbvlnovvvJoKRGltUGxvdChzY0ZBU1QpCgojIOavlOi+k+WFpeeahHJkc+aWh+S7tuWkmuWHuuS6huWHoOWIl21ldGFkYXRh77yaICAKY29sbmFtZXMoc2NGQVNUQG1ldGEuZGF0YSkKCiMg5L6L5aaCbkZlYXR1cmVfU05W6K6w5b2V5LqG5q+P5Liq57uG6IOe5Y+R55SfU05W55qE5Z+65Zug5pWw77yaCkZlYXR1cmVQbG90KHNjRkFTVCxmZWF0dXJlcyA9ICduRmVhdHVyZV9TTlYnLGxhYmVsID0gVCkKCiMg6K6w5b2Vc25w5L+h5oGv55qE55+p6Zi15bey5re75Yqg5ZyoU2V1cmF055qE55+p6Zi15Lit77yaCnNucF9tYXRyaXggPC0gc2NGQVNUQGFzc2F5cyRTTlZfYWxsQGNvdW50cwoKIyDov5nmmK/kuIDkuKrliJflkI3kuLrnu4bog57lkI3vvIzooYzlkI3kuLrnqoHlj5jnsbvlnovnmoTnn6npmLXvvJoKc25wX21hdHJpeFsxOjQsMTo0XQoKIyDovazmjaLmlbDmja7moLzlvI8KbGlicmFyeShkcGx5cikKc25wX21hdHJpeCA8LSBhcy5tYXRyaXgoc25wX21hdHJpeCkgJT4lIHQoKQoKIyDmn6XnnIvmiYDmnInnu4bog57kuK3nqoHlj5jmlbDph4/mnIDlpJrnmoTkuInkuKrnsbvlnovvvJoKYXBwbHkoc25wX21hdHJpeCwgMiwgZnVuY3Rpb24oeCl7c3VtKHgpfSkgJT4lIHNvcnQoZGVjcmVhc2luZyA9IFQpJT4lIC5bMTozXQoKIyDlj6/op4bljJbnqoHlj5jvvJoKVmxuUGxvdChzY0ZBU1QsZmVhdHVyZXMgPSAnSE1HQTE6Y2hyNi0zNDI0MzUxNTotPkEnLGFzc2F5ID0gJ1NOVl9hbGwnKQoKRGVmYXVsdEFzc2F5KHNjRkFTVCkgPC0gJ1NOVl9hbGwnCkZlYXR1cmVQbG90KHNjRkFTVCxmZWF0dXJlcyA9ICdITUdBMTpjaHI2LTM0MjQzNTE1Oi0+QScpCgojIOWmguaenOS4iui/sOS4jeWkn+ebtOingu+8jOWPr+eUqOeqgeWPmOWPkeeUn+eahOWghuenr+afseeKtuWbvuWxleekuu+8mgojIOe7n+iuoeeqgeWPmOaVsOmHj+eahOavlOS+i++8mgpjZWxsLnByb3A8LWFzLmRhdGEuZnJhbWUocHJvcC50YWJsZSh0YWJsZShzY0ZBU1RAYXNzYXlzJFNOVl9hbGxAY291bnRzWydITUdBMTpjaHI2LTM0MjQzNTE1Oi0+QScsXSwgc2NGQVNUJENlbGxUeXBlKSkpCmNvbG5hbWVzKGNlbGwucHJvcCk8LWMoIlNOUF9OdW1iZXIiLCJDZWxsdHlwZSIsInByb3BvcnRpb24iKQpoZWFkKGNlbGwucHJvcCkKCiMg5Y+v6KeG5YyWCmxpYnJhcnkoZ2dwbG90MikKIyDlj6/ku6XnnIvlh7pDZWxsdHlwZV9C55qE56qB5Y+Y5pWw6YeP55Wl6auY5LiA5LqbCmdncGxvdChjZWxsLnByb3AsYWVzKENlbGx0eXBlLHByb3BvcnRpb24sZmlsbD1TTlBfTnVtYmVyKSkrCmdlb21fYmFyKHN0YXQ9ImlkZW50aXR5Iixwb3NpdGlvbj0iZmlsbCIpKwpnZ3RpdGxlKCIiKSsKdGhlbWVfYncoKSsKdGhlbWUoYXhpcy50aWNrcy5sZW5ndGg9dW5pdCgwLjUsJ2NtJykpKwpndWlkZXMoZmlsbD1ndWlkZV9sZWdlbmQodGl0bGU9TlVMTCkpKwogIHRoZW1lKCBheGlzLnRleHQueC5ib3R0b20gPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSxoanVzdCA9IDEsdmp1c3QgPSAxKSkrCiAgZ2d0aXRsZSgnSE1HQTE6Y2hyNi0zNDI0MzUxNTotPkEnKQoKYGBgCmBgYHtyLGVjaG89RkFMU0V9CnNhdmUuaW1hZ2UoJ3JtZC5yZGF0YScpCmBgYAoKICAKIyDmm7TlpJrmlZnnqIvvvIzmlazor7fmnJ/lvoXvvIEgIApb6K+m5oOF5LiO5pu05aSa5Yqo5oCB6K+354K55Ye7XShodHRwczovL3d3dy5zZWVrZ2VuZS5jb20vZnhyaikgIAogIAogIAojIOacgOWQjuOAgeWmguaenOS7peS4iuWGheWuueWvueS9oOacieW4ruWKqe+8jOasoui/juWcqOaWh+eroOeahEFja25vd2xlZGdlbWVudOS4reWKoOS4iui/meS4gOaute+8mgpTaW5jZSBCaW9tYW1iYSBhbmQgaGlzIHdlY2hhdCBwdWJsaWMgYWNjb3VudCB0ZWFtIHByb2R1Y2UgYmlvaW5mb3JtYXRpY3MgdHV0b3JpYWxzIGFuZCBzaGFyZSBjb2RlIHdpdGggYW5ub3RhdGlvbiwgd2UgdGhhbmsgQmlvbWFtYmEgZm9yIHRoZWlyIGd1aWRhbmNlIGluIGJpb2luZm9ybWF0aWNzIGFuZCBkYXRhIGFuYWx5c2lzIGZvciB0aGUgY3VycmVudCBzdHVkeS4K5qyi6L+O5Zyo5Y+R5paHL+avleS4muaXtuWQkeaIkeS7rOWIhuS6q+S9oOeahOWWnOaCpn4gIAogIApgYGB7YmFzaCwgZWNobz1GfQpybSAvZG93bmxvYWQvc2NGQVNU5a2m5Lmg5omL5YaMLmh0bWwKbG4gLXMgL2hvbWUvYmlvbWFtYmEvZXh0X2RhdGEyL2FuYWx5c2lzL3h1bnlpbi9zY0ZBU1TlrabkuaDmiYvlhowxMC4wNy5odG1sIC9kb3dubG9hZC9zY0ZBU1TlrabkuaDmiYvlhowuaHRtbApgYGAKCg==