Log.final.out Output File of Star Read Into Df

1. References and resources

Reference

PLoS One. 2013;8(3):e59582. doi: 10.1371/periodical.pone.0059582.

Motorcar

AWS r5.2xlarge and CentOS linux 7 on a Virtual Machine

2. Obtain and/process analysis datsets

Make directories

~/data/rnaseq/Rn/PLoS-One-eight-e59582$ ls -l

drwxrwxr-ten 2 ubuntu ubuntu 4096 Apr 10 02:48 f344_pfc_nicotine

drwxrwxr-10 2 ubuntu ubuntu 4096 Apr x 03:28 f344_pfc_saline

Convert sra files to fastq files

f344_pfc_nicotine$ fastq-dump –split up-3 SRR869032.sra –gzip

f344_pfc_nicotine$ fastq-dump –divide-iii SRR869033.sra –gzip

f344_pfc_nicotine$ fastq-dump –separate-three SRR869034.sra –gzip

PLoS-One-8-e59582$ ls -l f344_pfc_nicotine/

-rw-rw-r– 1 ubuntu ubuntu 1918376826 Apr 7 13:08 SRR869032.sra

-rw-rw-r– i ubuntu ubuntu 1512702873 Apr 10 03:07 SRR869032_1.fastq.gz

-rw-rw-r– 1 ubuntu ubuntu 1565027421 Apr ten 03:07 SRR869032_2.fastq.gz

-rw-rw-r– ane ubuntu ubuntu 1989086241 April 7 xiii:09 SRR869033.sra

-rw-rw-r– one ubuntu ubuntu 1559510818 Apr 10 03:11 SRR869033_1.fastq.gz

-rw-rw-r– 1 ubuntu ubuntu 1612258618 Apr 10 03:eleven SRR869033_2.fastq.gz

-rw-rw-r– 1 ubuntu ubuntu 1978327667 Apr vii thirteen:x SRR869034.sra

-rw-rw-r– 1 ubuntu ubuntu 1568979784 April 10 03:12 SRR869034_1.fastq.gz

-rw-rw-r– 1 ubuntu ubuntu 1615385331 Apr 10 03:12 SRR869034_2.fastq.gz

3. Obtain, process and/or build genome, reference and index datasets

Download the refGene file and convert it to a GTF file

wget http://hgdownload.soe.ucsc.edu/goldenPath/rn6/database/refGene.txt.gz

gunzip refGene.txt.gz

cutting -f 2- refGene.txt > refGene.input

genePredToGtf file refGene.input refGene.gtf

genome_rat$ ls -50

-rw-rw-r– 1 ubuntu ubuntu 61891341 Apr 9 19:27 refGene.gtf

-rw-rw-r– ane ubuntu ubuntu 5143380 April 9 nineteen:27 refGene.input

-rw-rw-r– i ubuntu ubuntu 5226507 April 9 xix:27 refGene.txt

4. Build a STAR alphabetize for the rat geneome

              $ STAR --runThreadN xvi --runMode genomeGenerate --genomeDir StarIndexRat/ --genomeFastaFiles rn6/rn6.fa                          

Apr 09 18:39:04 ….. started STAR run

April 09 18:39:04 … starting to generate Genome files

Apr 09 18:xl:18 … starting to sort Suffix Array. This may take a long time…

Apr 09 18:forty:32 … sorting Suffix Array chunks and saving them to disk…

Apr 09 nineteen:05:33 … loading chunks from deejay, packing SA…

April 09 19:06:42 … finished generating suffix array

Apr 09 19:06:42 … generating Suffix Array index

Apr 09 19:ten:57 … completed Suffix Assortment index

April 09 19:10:57 … writing Genome to disk …

Apr 09 xix:ten:59 … writing Suffix Array to disk …

Apr 09 19:12:19 … writing SAindex to disk

Apr 09 nineteen:12:27 ….. finished successfully

StarIndexRat$ ls -l

-rw-rw-r– ane ubuntu ubuntu 3095134208 April nine nineteen:10 Genome

-rw-rw-r– 1 ubuntu ubuntu 22521351645 April 9 19:12 SA

-rw-rw-r– 1 ubuntu ubuntu 1565873619 Apr ix xix:12 SAindex

-rw-rw-r– 1 ubuntu ubuntu 5213 Apr 9 18:forty chrLength.txt

-rw-rw-r– 1 ubuntu ubuntu 19347 Apr 9 18:twoscore chrName.txt

-rw-rw-r– 1 ubuntu ubuntu 24560 Apr nine 18:40 chrNameLength.txt

-rw-rw-r– ane ubuntu ubuntu 10387 April 9 18:40 chrStart.txt

-rw-rw-r– ane ubuntu ubuntu 479 Apr ix xix:x genomeParameters.txt

5. Align the fastq.gz files to obtain BAM files

                          ~/results/rnaseq/Rn/star_rat$ STAR     --runThreadN 12     --genomeDir StarIndexRat/     --sjdbGTFfile ~/genome_rat/refGene.gtf     --sjdbOverhang 100     --readFilesIn ~/PLoS-1-8-e59582/f344_pfc_saline/SRR869044_1.fastq.gz    ~/PLoS-Ane-8-e59582/f344_pfc_saline/SRR869044_2.fastq.gz     --readFilesCommand zcat     --quantMode TranscriptomeSAM     --outFileNamePrefix 1align/                      

Apr 10 03:30:thirty ….. started STAR run

Apr 10 03:30:30 ….. loading genome

Apr ten 03:32:39 ….. processing annotations GTF

Apr 10 03:32:43 ….. inserting junctions into the genome indices

Apr x 03:37:23 ….. started mapping

Apr 10 03:42:29 ….. finished successfully

$ ls -l 1align/

-rw-rw-r– 1 ubuntu ubuntu 15933444986 Apr ten 03:42 Aligned.out.sam

-rw-rw-r– 1 ubuntu ubuntu 2358643579 Apr 10 03:42 Aligned.toTranscriptome.out.bam

-rw-rw-r– ane ubuntu ubuntu 1862 April ten 03:42 Log.final.out

-rw-rw-r– 1 ubuntu ubuntu 272935 Apr 10 03:42 Log.out

-rw-rw-r– 1 ubuntu ubuntu 836 Apr 10 03:42 Log.progress.out

-rw-rw-r– 1 ubuntu ubuntu 7368886 Apr 10 03:42 SJ.out.tab

drwx—— 2 ubuntu ubuntu 4096 Apr 10 03:32 _STARgenome

$ cat 1align/Log.terminal.out

                              Started task on |   Apr 10 03:xxx:30                              Started mapping on |   Apr 10 03:37:23                                     Finished on |   Apr 10 03:42:29        Mapping speed, 1000000 of reads per hour |   489.23                            Number of input reads |   41584891                       Average input read length |   100                                     UNIQUE READS:                    Uniquely mapped reads number |   34796331                         Uniquely mapped reads % |   83.68%                           Boilerplate mapped length |   99.37                        Number of splices: Total |   7910199             Number of splices: Annotated (sjdb) |   7194940                        Number of splices: GT/AG |   7764677                        Number of splices: GC/AG |   62004                        Number of splices: AT/Ac |   7634                Number of splices: Not-canonical |   75884                       Mismatch rate per base, % |   0.37%                          Deletion charge per unit per base |   0.01%                         Deletion average length |   i.61                         Insertion rate per base of operations |   0.00%                        Insertion boilerplate length |   1.35                              MULTI-MAPPING READS:         Number of reads mapped to multiple loci |   2553852              % of reads mapped to multiple loci |   6.14%         Number of reads mapped to too many loci |   57308              % of reads mapped to too many loci |   0.14%                                   UNMAPPED READS:        % of reads unmapped: too many mismatches |   0.00%                  % of reads unmapped: too short |   9.92%                      % of reads unmapped: other |   0.13%                                   CHIMERIC READS:                        Number of chimeric reads |   0                             % of chimeric reads |   0.00%                          
              ~/results/rnaseq/Rn/star_rat/transcriptomeOut$ STAR --runThreadN 12 --genomeDir ~/genomeAndIndices/Rn/star/ --sjdbGTFfile ~/genomeAndIndices/Rn/rn6.refGene.gtf --sjdbOverhang 100 --readFilesIn ~/information/rnaseq/Rn/PLoS-One-8-e59582/f344_pfc_saline/SRR869045_1.fastq.gz ~/information/rnaseq/Rn/PLoS-One-viii-e59582/f344_pfc_saline/SRR869045_2.fastq.gz --readFilesCommand zcat --quantMode TranscriptomeSAM --outFileNamePrefix 2align/                          

Apr xi 15:08:19 ….. started STAR run

Apr xi xv:08:twenty ….. loading genome

Apr 11 15:12:01 ….. processing annotations GTF

Apr xi 15:12:25 ….. inserting junctions into the genome indices

April 11 15:37:46 ….. started mapping

Apr 11 15:58:54 ….. finished successfully

$ ls -l 2align/

-rw-rw-r– 1 ubuntu ubuntu 14869436644 April xi 15:58 Aligned.out.sam

-rw-rw-r– i ubuntu ubuntu 2216166668 Apr 11 15:58 Aligned.toTranscriptome.out.bam

-rw-rw-r– 1 ubuntu ubuntu 1863 Apr 11 15:58 Log.terminal.out

-rw-rw-r– 1 ubuntu ubuntu 290971 Apr 11 15:58 Log.out

-rw-rw-r– i ubuntu ubuntu 2488 Apr 11 15:58 Log.progress.out

-rw-rw-r– 1 ubuntu ubuntu 7278953 Apr eleven 15:58 SJ.out.tab

drwx—— 2 ubuntu ubuntu 4096 Apr xi xv:12 _STARgenome

$ cat 2align/Log.final.out

                              Started job on |   April 11 xv:08:19                              Started mapping on |   Apr xi 15:37:46                                     Finished on |   Apr xi 15:58:54        Mapping speed, Million of reads per 60 minutes |   116.02                            Number of input reads |   40866035                       Average input read length |   100                                     UNIQUE READS:                    Uniquely mapped reads number |   32594115                         Uniquely mapped reads % |   79.76%                           Average mapped length |   99.35                        Number of splices: Full |   7372181             Number of splices: Annotated (sjdb) |   6695155                        Number of splices: GT/AG |   7235135                        Number of splices: GC/AG |   58523                        Number of splices: AT/Air conditioning |   6995                Number of splices: Non-approved |   71528                       Mismatch rate per base, % |   0.38%                          Deletion charge per unit per base |   0.01%                         Deletion boilerplate length |   one.61                         Insertion rate per base |   0.01%                        Insertion average length |   i.35                              MULTI-MAPPING READS:         Number of reads mapped to multiple loci |   2353903              % of reads mapped to multiple loci |   5.76%         Number of reads mapped to too many loci |   52876              % of reads mapped to too many loci |   0.13%                                   UNMAPPED READS:        % of reads unmapped: too many mismatches |   0.00%                  % of reads unmapped: likewise short |   14.23%                      % of reads unmapped: other |   0.12%                                   CHIMERIC READS:                        Number of chimeric reads |   0                             % of chimeric reads |   0.00%                          
              ~/results/rnaseq/Rn/star_rat/transcriptomeOut$ STAR --runThreadN 12 --genomeDir ~/genomeAndIndices/Rn/star/ --sjdbGTFfile ~/genomeAndIndices/Rn/rn6.refGene.gtf --sjdbOverhang 100 --readFilesIn ~/data/rnaseq/Rn/PLoS-I-8-e59582/f344_pfc_saline/SRR869046_1.fastq.gz ~/data/rnaseq/Rn/PLoS-One-8-e59582/f344_pfc_saline/SRR869046_2.fastq.gz --readFilesCommand zcat --quantMode TranscriptomeSAM --outFileNamePrefix 3align/                          

April 11 16:00:52 ….. started STAR run

Apr 11 16:00:52 ….. loading genome

April eleven 16:02:35 ….. processing annotations GTF

Apr xi sixteen:02:37 ….. inserting junctions into the genome indices

Apr 11 xvi:05:23 ….. started mapping

Apr 11 16:11:29 ….. finished successfully

$ ls -l 3align/

-rw-rw-r– ane ubuntu ubuntu 14998319245 Apr 11 sixteen:11 Aligned.out.sam

-rw-rw-r– 1 ubuntu ubuntu 2183814631 Apr 11 sixteen:11 Aligned.toTranscriptome.out.bam

-rw-rw-r– i ubuntu ubuntu 1863 Apr 11 16:11 Log.last.out

-rw-rw-r– 1 ubuntu ubuntu 290970 Apr 11 16:11 Log.out

-rw-rw-r– ane ubuntu ubuntu 954 Apr eleven 16:11 Log.progress.out

-rw-rw-r– 1 ubuntu ubuntu 7220923 Apr xi 16:11 SJ.out.tab

drwx—— 2 ubuntu ubuntu 4096 Apr 11 16:02 _STARgenome

$ cat 3align/Log.final.out

                              Started chore on |   April 11 16:00:52                              Started mapping on |   April 11 xvi:05:23                                     Finished on |   Apr eleven 16:11:29        Mapping speed, Meg of reads per hour |   387.26                            Number of input reads |   39370935                       Average input read length |   100                                     UNIQUE READS:                    Uniquely mapped reads number |   32717958                         Uniquely mapped reads % |   83.10%                           Average mapped length |   99.35                        Number of splices: Total |   7102328             Number of splices: Annotated (sjdb) |   6458206                        Number of splices: GT/AG |   6971391                        Number of splices: GC/AG |   55634                        Number of splices: AT/Ac |   6999                Number of splices: Non-canonical |   68304                       Mismatch rate per base, % |   0.twoscore%                          Deletion rate per base |   0.01%                         Deletion average length |   i.61                         Insertion rate per base |   0.01%                        Insertion average length |   1.35                              MULTI-MAPPING READS:         Number of reads mapped to multiple loci |   2462309              % of reads mapped to multiple loci |   6.25%         Number of reads mapped to too many loci |   51917              % of reads mapped to likewise many loci |   0.thirteen%                                   UNMAPPED READS:        % of reads unmapped: too many mismatches |   0.00%                  % of reads unmapped: likewise brusque |   10.38%                      % of reads unmapped: other |   0.13%                                   CHIMERIC READS:                        Number of chimeric reads |   0                             % of chimeric reads |   0.00%                          
              ~/results/rnaseq/Rn/star_rat/transcriptomeOut$ STAR --runThreadN 12 --genomeDir ~/genomeAndIndices/Rn/star/ --sjdbGTFfile ~/genomeAndIndices/Rn/rn6.refGene.gtf --sjdbOverhang 100 --readFilesIn ~/information/rnaseq/Rn/PLoS-One-8-e59582/f344_pfc_nicotine/SRR869032_1.fastq.gz ~/data/rnaseq/Rn/PLoS-I-8-e59582/f344_pfc_nicotine/SRR869032_2.fastq.gz --readFilesCommand zcat --quantMode TranscriptomeSAM --outFileNamePrefix 4align/                          

Apr 11 sixteen:21:26 ….. started STAR run

Apr 11 sixteen:21:26 ….. loading genome

April xi 16:23:09 ….. processing annotations GTF

Apr xi 16:23:x ….. inserting junctions into the genome indices

Apr 11 16:25:24 ….. started mapping

Apr 11 16:28:58 ….. finished successfully

$ ls -50 4align/

-rw-rw-r– 1 ubuntu ubuntu 10933116395 Apr 11 sixteen:28 Aligned.out.sam

-rw-rw-r– 1 ubuntu ubuntu 1617775311 Apr eleven xvi:28 Aligned.toTranscriptome.out.bam

-rw-rw-r– 1 ubuntu ubuntu 1863 Apr 11 16:28 Log.terminal.out

-rw-rw-r– 1 ubuntu ubuntu 291006 April 11 16:28 Log.out

-rw-rw-r– 1 ubuntu ubuntu 600 April 11 16:28 Log.progress.out

-rw-rw-r– one ubuntu ubuntu 6778075 April xi 16:28 SJ.out.tab

drwx—— 2 ubuntu ubuntu 4096 Apr 11 16:23 _STARgenome

$ cat 4align/Log.terminal.out

                              Started job on |   Apr xi 16:21:26                              Started mapping on |   April eleven 16:25:24                                     Finished on |   Apr xi 16:28:58        Mapping speed, One thousand thousand of reads per hour |   486.66                            Number of input reads |   28929485                       Average input read length |   100                                     UNIQUE READS:                    Uniquely mapped reads number |   23884850                         Uniquely mapped reads % |   82.56%                           Average mapped length |   99.37                        Number of splices: Total |   5337591             Number of splices: Annotated (sjdb) |   4843698                        Number of splices: GT/AG |   5237284                        Number of splices: GC/AG |   42360                        Number of splices: AT/Ac |   5126                Number of splices: Non-approved |   52821                       Mismatch charge per unit per base, % |   0.38%                          Deletion rate per base |   0.01%                         Deletion average length |   1.61                         Insertion rate per base |   0.01%                        Insertion average length |   ane.35                              MULTI-MAPPING READS:         Number of reads mapped to multiple loci |   1745210              % of reads mapped to multiple loci |   half dozen.03%         Number of reads mapped to likewise many loci |   41759              % of reads mapped to too many loci |   0.fourteen%                                   UNMAPPED READS:        % of reads unmapped: besides many mismatches |   0.00%                  % of reads unmapped: too brusque |   eleven.13%                      % of reads unmapped: other |   0.14%                                   CHIMERIC READS:                        Number of chimeric reads |   0                             % of chimeric reads |   0.00%                          
              ~/results/rnaseq/Rn/star_rat/transcriptomeOut$ STAR --runThreadN 12 --genomeDir ~/genomeAndIndices/Rn/star/ --sjdbGTFfile ~/genomeAndIndices/Rn/rn6.refGene.gtf --sjdbOverhang 100 --readFilesIn ~/data/rnaseq/Rn/PLoS-One-8-e59582/f344_pfc_nicotine/SRR869033_1.fastq.gz ~/data/rnaseq/Rn/PLoS-I-8-e59582/f344_pfc_nicotine/SRR869033_2.fastq.gz --readFilesCommand zcat --quantMode TranscriptomeSAM --outFileNamePrefix 5align/                          

April 11 16:32:44 ….. started STAR run

April 11 16:32:44 ….. loading genome

Apr 11 16:34:26 ….. processing annotations GTF

Apr 11 sixteen:34:28 ….. inserting junctions into the genome indices

Apr eleven 16:36:40 ….. started mapping

Apr eleven xvi:40:24 ….. finished successfully

$ ls -fifty 5align/

-rw-rw-r– i ubuntu ubuntu 11152871716 April 11 16:xl Aligned.out.sam

-rw-rw-r– one ubuntu ubuntu 1650315098 April 11 16:40 Aligned.toTranscriptome.out.bam

-rw-rw-r– ane ubuntu ubuntu 1863 April 11 16:40 Log.last.out

-rw-rw-r– 1 ubuntu ubuntu 291006 Apr 11 xvi:40 Log.out

-rw-rw-r– 1 ubuntu ubuntu 600 April 11 16:40 Log.progress.out

-rw-rw-r– 1 ubuntu ubuntu 6943028 Apr eleven 16:40 SJ.out.tab

drwx—— two ubuntu ubuntu 4096 Apr 11 16:34 _STARgenome

$ cat 5align/Log.terminal.out

                              Started job on |   April 11 16:32:44                              Started mapping on |   Apr eleven sixteen:36:40                                     Finished on |   Apr 11 xvi:xl:24        Mapping speed, Million of reads per hr |   483.07                            Number of input reads |   30057458                       Boilerplate input read length |   100                                     UNIQUE READS:                    Uniquely mapped reads number |   24242026                         Uniquely mapped reads % |   lxxx.65%                           Average mapped length |   99.39                        Number of splices: Total |   5464310             Number of splices: Annotated (sjdb) |   4969845                        Number of splices: GT/AG |   5365023                        Number of splices: GC/AG |   42481                        Number of splices: AT/Ac |   5178                Number of splices: Non-canonical |   51628                       Mismatch rate per base, % |   0.37%                          Deletion rate per base |   0.01%                         Deletion average length |   ane.60                         Insertion charge per unit per base |   0.00%                        Insertion boilerplate length |   1.36                              MULTI-MAPPING READS:         Number of reads mapped to multiple loci |   1816245              % of reads mapped to multiple loci |   6.04%         Number of reads mapped to too many loci |   44886              % of reads mapped to besides many loci |   0.15%                                   UNMAPPED READS:        % of reads unmapped: too many mismatches |   0.00%                  % of reads unmapped: also short |   13.03%                      % of reads unmapped: other |   0.13%                                   CHIMERIC READS:                        Number of chimeric reads |   0                             % of chimeric reads |   0.00%                          
              ~/results/rnaseq/Rn/star_rat/transcriptomeOut$ STAR --runThreadN 12 --genomeDir ~/genomeAndIndices/Rn/star/ --sjdbGTFfile ~/genomeAndIndices/Rn/rn6.refGene.gtf --sjdbOverhang 100 --readFilesIn ~/data/rnaseq/Rn/PLoS-One-8-e59582/f344_pfc_nicotine/SRR869034_1.fastq.gz ~/data/rnaseq/Rn/PLoS-One-8-e59582/f344_pfc_nicotine/SRR869034_2.fastq.gz --readFilesCommand zcat --quantMode TranscriptomeSAM --outFileNamePrefix 6align/                          

Apr 11 xvi:41:46 ….. started STAR run

Apr 11 16:41:46 ….. loading genome

April eleven 16:42:54 ….. processing annotations GTF

Apr xi 16:42:55 ….. inserting junctions into the genome indices

Apr xi sixteen:45:08 ….. started mapping

April 11 16:48:49 ….. finished successfully

$ ls -l 6align/

-rw-rw-r– 1 ubuntu ubuntu 11451915825 Apr 11 16:48 Aligned.out.sam

-rw-rw-r– ane ubuntu ubuntu 1719135420 Apr 11 16:48 Aligned.toTranscriptome.out.bam

-rw-rw-r– 1 ubuntu ubuntu 1862 Apr eleven xvi:48 Log.final.out

-rw-rw-r– 1 ubuntu ubuntu 291006 Apr xi 16:48 Log.out

-rw-rw-r– i ubuntu ubuntu 600 Apr xi sixteen:48 Log.progress.out

-rw-rw-r– 1 ubuntu ubuntu 6840437 April 11 16:48 SJ.out.tab

drwx—— 2 ubuntu ubuntu 4096 April 11 16:42 _STARgenome

$ cat 6align/Log.final.out

                              Started job on |   Apr 11 16:41:46                              Started mapping on |   Apr 11 sixteen:45:08                                     Finished on |   April eleven sixteen:48:49        Mapping speed, Million of reads per 60 minutes |   485.67                            Number of input reads |   29814687                       Average input read length |   100                                     UNIQUE READS:                    Uniquely mapped reads number |   25029582                         Uniquely mapped reads % |   83.95%                           Boilerplate mapped length |   99.40                        Number of splices: Full |   5664801             Number of splices: Annotated (sjdb) |   5152217                        Number of splices: GT/AG |   5560246                        Number of splices: GC/AG |   44589                        Number of splices: AT/AC |   5504                Number of splices: Not-canonical |   54462                       Mismatch rate per base, % |   0.38%                          Deletion rate per base |   0.01%                         Deletion average length |   1.61                         Insertion rate per base of operations |   0.00%                        Insertion average length |   1.36                              MULTI-MAPPING READS:         Number of reads mapped to multiple loci |   1834753              % of reads mapped to multiple loci |   6.xv%         Number of reads mapped to as well many loci |   40924              % of reads mapped to besides many loci |   0.14%                                   UNMAPPED READS:        % of reads unmapped: too many mismatches |   0.00%                  % of reads unmapped: too short |   9.63%                      % of reads unmapped: other |   0.13%                                   CHIMERIC READS:                        Number of chimeric reads |   0                             % of chimeric reads |   0.00%                          

vi. RSEM analysis

Download the information

BAM files were imported to CentOS as directories (1s, 2s, 3s, 4s, 5s and 6s) for RSEM analysis. The genome and GTF files are were also imported (& also renamed).

$ ls -l

drwxr-xr-x. 2 bdash bdash 45 Apr 11 xx:17 1s

drwxr-xr-x. 2 bdash bdash 45 Apr eleven eighteen:21 2s

drwxr-xr-x. 2 bdash bdash 45 Apr eleven 20:20 3s

drwxr-xr-x. 2 bdash bdash 45 Apr eleven twenty:21 4s

drwxr-xr-x. 2 bdash bdash 45 April eleven 20:27 5s

drwxr-xr-x. 2 bdash bdash 45 Apr eleven twenty:27 6s

-rw-rw-r–. 1 bdash bdash 2927607333 Apr ix 15:26 rn6.fa

-rw-rw-r–. 1 bdash bdash 40654 Apr 9 15:26 rn6.fa.fai

-rw-rw-r–. one bdash bdash 61891341 April nine xv:27 rn6.refGene.gtf

Prepare RSEM reference (will apply both the fa and gtf file)

mkdir rsem_ref

cd rsem_ref

rsem_ref$ rsem-fix-reference –gtf rn6.refGene.gtf rn6.fa ./rsemRef

                                  rsem-extract-reference-transcripts ./rsemRef 0 rn6.refGene.gtf None 0 rn6.fa  Parsed 200000 lines  Parsing gtf File is washed!  rn6.fa is processed!  18939 transcripts are extracted and 0 transcripts are omitted.  Extracting sequences is done!  Grouping File is generated!  Transcript Information File is generated!  Chromosome List File is generated!  Extracted Sequences File is generated!  rsem-preref ./rsemRef.transcripts.fa 1 ./rsemRef  Refs.makeRefs finished!  Refs.saveRefs finished!  ./rsemRef.idx.fa is generated!  ./rsemRef.n2g.idx.fa is generated!                              

star-transcriptomeout$ ls -50 rsem_ref/

-rw-rw-r–. 1 bdash bdash 1293 Apr eleven 21:06 rsemRef.chrlist

-rw-rw-r–. 1 bdash bdash 93718 Apr xi 21:06 rsemRef.grp

-rw-rw-r–. 1 bdash bdash 43007289 Apr eleven 21:06 rsemRef.idx.fa

-rw-rw-r–. one bdash bdash 43007289 April xi 21:06 rsemRef.n2g.idx.fa

-rw-rw-r–. 1 bdash bdash 45858412 April xi 21:06 rsemRef.seq

-rw-rw-r–. one bdash bdash 6041108 Apr 11 21:06 rsemRef.ti

-rw-rw-r–. 1 bdash bdash 43007289 Apr 11 21:06 rsemRef.transcripts.fa

RSEM-calculate-expression

star-transcriptomeout$ rsem-calculate-expression –bam –no-bam-output -p 12 –paired-finish –frontwards-prob 0 1s/Aligned.toTranscriptome.out.bam rsem_ref/rsemRef 1out/ >& rsem1.log

Echo information technology for the rest of the bam files

star-transcriptomeout$ ls -l

drwxrwxr-10. 3 bdash bdash 66 April 11 22:41 1out

drwxrwxr-10. 3 bdash bdash 66 Apr xi 23:56 2out

drwxrwxr-ten. 3 bdash bdash 66 April 12 03:48 3out

drwxrwxr-x. 3 bdash bdash 66 April 12 03:13 4out

drwxrwxr-x. 3 bdash bdash 66 Apr 12 02:48 5out

drwxrwxr-ten. 3 bdash bdash 66 April 12 01:54 6out

-rw-rw-r–. 1 bdash bdash 309141 Apr xi 22:41 rsem1.log

-rw-rw-r–. one bdash bdash 353855 Apr eleven 23:56 rsem2.log

-rw-rw-r–. 1 bdash bdash 255588 Apr 12 03:48 rsem3.log

-rw-rw-r–. 1 bdash bdash 326662 Apr 12 03:13 rsem4.log

-rw-rw-r–. 1 bdash bdash 366472 Apr 12 02:48 rsem5.log

-rw-rw-r–. ane bdash bdash 294402 Apr 12 01:54 rsem6.log

drwxrwxr-10. 2 bdash bdash 163 Apr xi 21:20 rsem_ref

seven. edgeR (Empirical Assay of Digital Factor Expression) assay of isoforms

Generate a matrix file of the isoforms for analysis using edgeR method

              star-transcriptomeout$ abundance_estimates_to_matrix.pl   --est_method RSEM    1out/.isoforms.results  2out/.isoforms.results  3out/.isoforms.results  4out/.isoforms.results  5out/.isoforms.results  6out/.isoforms.results   --gene_trans_map none   --name_sample_by_basedir   --out_prefix isoforms_gene_trans_map_none/isoforms                          

-reading file: 1out/.isoforms.results

-reading file: 2out/.isoforms.results

-reading file: 3out/.isoforms.results

-reading file: 4out/.isoforms.results

-reading file: 5out/.isoforms.results

-reading file: 6out/.isoforms.results

  • Outputting combined matrix.

/home/bdash/miniconda2/opt/trinity-2.six.6/util/support_scripts/run_TMM_scale_matrix.pl

–matrix isoforms_gene_trans_map_none/isoforms.isoform.TPM.not_cross_norm >

isoforms_gene_trans_map_none/isoforms.isoform.TMM.EXPR.matrix

CMD: R –no-salve –no-restore –no-site-file –no-init-file -q <

isoforms_gene_trans_map_none/isoforms.isoform.TPM.not_cross_norm.runTMM.R 1>&2

              > library(edgeR)  Loading required packet: limma  >   > rnaseqMatrix = read.table("isoforms_gene_trans_map_none/isoforms.isoform.TPM.not_cross_norm", header=T, row.names=1, com='', check.names=F)  > rnaseqMatrix = as.matrix(rnaseqMatrix)  > rnaseqMatrix = round(rnaseqMatrix)  > exp_study = DGEList(counts=rnaseqMatrix, group=cistron(colnames(rnaseqMatrix)))  > exp_study = calcNormFactors(exp_study)  > exp_study$samples$eff.lib.size = exp_study$samples$lib.size * exp_study$samples$norm.factors  > write.table(exp_study$samples, file="isoforms_gene_trans_map_none/isoforms.isoform.TPM.not_cross_norm.TMM_info.txt", quote=F, sep="\t", row.names=F)                          

star-transcriptomeout$ ls -l isoforms_gene_trans_map_none/

-rw-rw-r–. 1 bdash bdash 934917 April 12 12:12 isoforms.isoform.counts.matrix

-rw-rw-r–. 1 bdash bdash 981854 Apr 12 12:12 isoforms.isoform.TMM.EXPR.matrix

-rw-rw-r–. ane bdash bdash 775288 Apr 12 12:12 isoforms.isoform.TPM.not_cross_norm

-rw-rw-r–. 1 bdash bdash 590 April 12 12:12 isoforms.isoform.TPM.not_cross_norm.runTMM.R

-rw-rw-r–. 1 bdash bdash 320 Apr 12 12:12 isoforms.isoform.TPM.not_cross_norm.TMM_info.txt

Run differential analysis (DE) assay using method edgeR: Produces MA plot and volcano plot

Annotation: Analysis with biological triplicates with ii conditions (condition A=saline treatment and condition B=nicotine treatment)

A file with the name "samples_described.txt" will be needed for the assay. Its contents are as follows:

              $ cat samples_described.txt   conditionA   1out conditionA   2out conditionA   3out   conditionB   4out conditionB   5out conditionB   6out                          
              star-transcriptomeout]$ run_DE_analysis.pl   --matrix isoforms_gene_trans_map_none/isoforms.isoform.counts.matrix   --output isoforms_DE_3/   --samples_file samples_described.txt   --method edgeR                          

Got half dozen samples, and got: 7 information fields.

Header: 1out 2out 3out 4out 5out 6out

Next: NM_021666 thirteen.00 7.00 vi.00 i.00 2.00 4.00

$VAR1 =

                              {        '2out' => 2,              '1out' => i,              '4out' => four,              '5out' => 5,              '3out' => iii,              '6out' => vi            };                          

$VAR1 =

                              {              'conditionB' => [                                '4out',                                                  '5out',                                                  '6out'                                                ],                                                     'conditionA' => [                                '1out',                                                  '2out',                                                  '3out'                                                ]     };                          

Contrasts to perform are: $VAR1 =

                              [        [                'conditionA',                  'conditionB'                ]            ];                          

CMD: R –no-salve –no-restore –no-site-file –no-init-file -q < isoforms.isoform.counts.matrix.conditionA_vs_conditionB.conditionA.vs.conditionB.EdgeR.Rscript

              > library(edgeR)  Loading required package: limma  >  > information = read.table("/home/bdash/Desktop/star-transcriptomeout/isoforms_gene_trans_map_none/isoforms.isoform.counts.matrix", header=T, row.names=i, com='')  > col_ordering = c(i,two,3,iv,5,six)  > rnaseqMatrix = information[,col_ordering]  > rnaseqMatrix = round(rnaseqMatrix)  > rnaseqMatrix = rnaseqMatrix[rowSums(cpm(rnaseqMatrix) > 1) >= 2,]  > weather condition = factor(c(rep("conditionA", 3), rep("conditionB", three))) >  > exp_study = DGEList(counts=rnaseqMatrix, group=weather condition)  > exp_study = calcNormFactors(exp_study)  > exp_study = estimateCommonDisp(exp_study)  > exp_study = estimateTagwiseDisp(exp_study)  > et = exactTest(exp_study, pair=c("conditionA", "conditionB"))  > tTags = topTags(et,n=Aught)  > result_table = tTags$tabular array  > result_table = data.frame(sampleA="conditionA", sampleB="conditionB", result_table)  > result_table$logFC = -1 * result_table$logFC  > write.tabular array(result_table, file='isoforms.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results', sep='  ', quote=F, row.names=T)  > write.tabular array(rnaseqMatrix, file='isoforms.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.count_matrix', sep='    ', quote=F, row.names=T)  > source("/home/bdash/miniconda2/opt/trinity-2.6.6/Analysis/DifferentialExpression/R/rnaseq_plot_funcs.R")  > pdf("isoforms.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.MA_n_Volcano.pdf")  > plot_MA_and_Volcano(rownames(result_table), result_table$logCPM, result_table$logFC, result_table$FDR)  > dev.off()  null device            1             >                          

star-transcriptomeout]$ ls -l isoforms_DE_3/

-rw-rw-r–. 1 bdash bdash 1425 Apr 13 02:26 isoforms.isoform.counts.matrix.conditionA_vs_conditionB.conditionA.vs.conditionB.EdgeR.Rscript

-rw-rw-r–. 1 bdash bdash 447974 Apr 13 02:27 isoforms.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.count_matrix

-rw-rw-r–. 1 bdash bdash 1156287 April thirteen 02:27 isoforms.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results

-rw-rw-r–. 1 bdash bdash 118065 Apr 13 02:27 isoforms.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.MA_n_Volcano.pdf

-rw-rw-r–. 1 bdash bdash 959 Apr 13 02:29 isoforms.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.P0.001_C2.conditionA-UP.subset

-rw-rw-r–. one bdash bdash 513 Apr 13 02:29 isoforms.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.P0.001_C2.conditionB-UP.subset

-rw-rw-r–. i bdash bdash 1402 Apr thirteen 02:29 isoforms.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.P0.001_C2.DE.subset

-rw-rw-r–. ane bdash bdash 96 Apr 13 02:29 isoforms.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.samples

DE_isoforms.MA_plot

DE_isoforms.MA_plot

DE_isoforms.volcano_plot

DE_isoforms.volcano_plot

star-transcriptomeout$ cd isoforms_DE_3/

Clarify differential expression: Produces heatmap

              isoforms_DE_3$ analyze_diff_expr.pl   --matrix ../isoforms_gene_trans_map_none/isoforms.isoform.TMM.EXPR.matrix   --samples ../samples_described.txt   --output DE_isoforms_3                          

Found 9 features as differentially expressed.

CMD:

/habitation/bdash/miniconda2/opt/trinity-2.6.6/Analysis/DifferentialExpression/PtR

-m DE_isoforms_3.matrix

–log2

–heatmap

–min_colSums 0

–min_rowSums 0

–gene_dist euclidean

–sample_dist euclidean

–sample_cor_matrix

–center_rows

–salve

-due south ../samples_described.txt

CMD:

R

–no-save

–no-restore

–no-site-file

–no-init-file

-q < DE_isoforms_3.matrix.R

              > library(cluster)  > library(Biobase)                          

Loading required package: BiocGenerics

Loading required bundle: parallel

Attaching package: 'BiocGenerics'

The following objects are masked from 'package:parallel':

              clusterApply, clusterApplyLB, clusterCall, clusterEvalQ, clusterExport, clusterMap, parApply, parCapply, parLapply, parLapplyLB, parRapply, parSapply, parSapplyLB            

The following objects are masked from 'package:stats':

              IQR, mad, sd, var, xtabs            

The following objects are masked from 'package:base':

              anyDuplicated, suspend, as.data.frame, basename, cbind, colMeans, colnames, colSums, dirname, do.telephone call, duplicated, eval, evalq, Filter, Discover, get, grep, grepl, intersect, is.unsorted, lapply, lengths, Map, mapply, match, mget, social club, paste, pmax, pmax.int, pmin, pmin.int, Position, rank, rbind, Reduce, rowMeans, rownames, rowSums, sapply, setdiff, sort, table, tapply, spousal relationship, unique, unsplit, which, which.max, which.min            

Welcome to Bioconductor

              Vignettes contain introductory textile; view with 'browseVignettes()'. To cite Bioconductor, meet 'citation("Biobase")', and for packages 'citation("pkgname")'.            
              > library(qvalue)  > library(fastcluster)                          

Attaching package: 'fastcluster'

The post-obit object is masked from 'packet:stats':

              hclust            
              > options(stringsAsFactors = FALSE)  > NO_REUSE = F  >   > # try to reuse earlier-loaded data if possible  > if (file.exists("DE_isoforms_3.matrix.RData") && ! NO_REUSE) { +     print('RESTORING Information FROM EARLIER Assay') +     load("DE_isoforms_3.matrix.RData") + } else { +     print('Reading matrix file.') +     primary_data = read.tabular array("DE_isoforms_3.matrix", header=T, com='', row.names=1, check.names=F) +     primary_data = as.matrix(primary_data) + }  [1] "Reading matrix file."  > source("/dwelling house/bdash/miniconda2/opt/trinity-2.6.6/Analysis/DifferentialExpression/R/heatmap.3.R")  > source("/domicile/bdash/miniconda2/opt/trinity-2.6.6/Analysis/DifferentialExpression/R/misc_rnaseq_funcs.R")  > source("/home/bdash/miniconda2/opt/trinity-2.6.6/Analysis/DifferentialExpression/R/pairs3.R")  > source("/home/bdash/miniconda2/opt/trinity-2.six.6/Analysis/DifferentialExpression/R/vioplot2.R")  > data = primary_data  > myheatcol = colorpanel(75, 'regal','black','yellow')  > samples_data = read.table("../samples_described.txt", header=F, bank check.names=F, fill=T)  > samples_data = samples_data[samples_data[,ii] != '',]  > colnames(samples_data) = c('sample_name', 'replicate_name')  > sample_types = as.character(unique(samples_data[,1]))  > rep_names = equally.character(samples_data[,2])  > data = data[, colnames(information) %in% rep_names, drop=F ]  > nsamples = length(sample_types)  > sample_colors = rainbow(nsamples)  > names(sample_colors) = sample_types  > sample_type_list = list()  > for (i in one:nsamples) { +     samples_want = samples_data[samples_data[,1]==sample_types[i], 2] +     sample_type_list[[sample_types[i]]] = as.vector(samples_want) + }  > sample_factoring = colnames(data)  > for (i in 1:nsamples) { +     sample_type = sample_types[i] +     replicates_want = sample_type_list[[sample_type]] +     sample_factoring[ colnames(data) %in% replicates_want ] = sample_type + }  > initial_matrix = data # shop before doing various data transformations  > information = log2(data+1)  > sample_factoring = colnames(information)  > for (i in 1:nsamples) { +     sample_type = sample_types[i] +     replicates_want = sample_type_list[[sample_type]] +     sample_factoring[ colnames(data) %in% replicates_want ] = sample_type + }  > sampleAnnotations = matrix(ncol=ncol(data),nrow=nsamples)  > for (i in 1:nsamples) { +   sampleAnnotations[i,] = colnames(data) %in% sample_type_list[[sample_types[i]]] + }  > sampleAnnotations = utilise(sampleAnnotations, i:2, function(x) as.logical(x))  > sampleAnnotations = sample_matrix_to_color_assignments(sampleAnnotations, col=sample_colors)  > rownames(sampleAnnotations) = as.vector(sample_types)  > colnames(sampleAnnotations) = colnames(information)  > information = as.matrix(data) # convert to matrix  >  > # Centering rows  > data = t(scale(t(data), calibration=F)) >   > write.tabular array(information, file="DE_isoforms_3.matrix.log2.centered.dat", quote=F, sep='   ');  > if (nrow(data) < ii) { finish(" +  + **** Pitiful, at least 2 rows are required for this matrix. +  + ");}   > if (ncol(information) < 2) { stop(" +  + **** Sorry, at least two columns are required for this matrix. +  + ");}  > sample_cor = cor(data, method='pearson', use='pairwise.complete.obs')  > write.table(sample_cor, file="DE_isoforms_3.matrix.log2.centered.sample_cor.dat", quote=F, sep='  ')  > sample_dist = dist(t(information), method='euclidean')  > hc_samples = hclust(sample_dist, method='complete')  > pdf("DE_isoforms_3.matrix.log2.centered.sample_cor_matrix.pdf")  > sample_cor_for_plot = sample_cor  > heatmap.3(sample_cor_for_plot, dendrogram='both', Rowv=as.dendrogram(hc_samples), Colv=as.dendrogram(hc_samples), col = myheatcol, calibration='none', symm=Truthful, key=True,density.info='none', trace='none', symkey=FALSE, symbreaks=F, margins=c(10,10), cexCol=1, cexRow=1, cex.main=0.75, chief=paste("sample correlation matrix + ", "DE_isoforms_3.matrix.log2.centered") , ColSideColors=sampleAnnotations, RowSideColors=t(sampleAnnotations)) for plotting:: min.raw: -0.959807727628706 max.raw: 1  > dev.off()  zippo device            1             > gene_cor = NULL  > gene_dist = dist(data, method='euclidean')  > if (nrow(information) <= 1) { bulletin('Too few genes to generate heatmap'); quit(status=0); }  > hc_genes = hclust(gene_dist, method='complete')  > heatmap_data = data  > pdf("DE_isoforms_3.matrix.log2.centered.genes_vs_samples_heatmap.pdf")  > heatmap.3(heatmap_data, dendrogram='both', Rowv=as.dendrogram(hc_genes), Colv=every bit.dendrogram(hc_samples), col=myheatcol, scale="none", density.info="none", trace="none", key=Truthful, keysize=ane.2, cexCol=1, margins=c(10,10), cex.chief=0.75, primary=paste("samples vs. features + ", "DE_isoforms_3.matrix.log2.centered" ) , ColSideColors=sampleAnnotations) for plotting:: min.raw: -5.1576065841341 max.raw: 5.1576065841341  > dev.off()  aught device            1  > save(listing=ls(all=TRUE), file="DE_isoforms_3.matrix.RData")  >                          

star-transcriptomeout]$ ls -l isoforms_DE_3/

-rw-rw-r–. 1 bdash bdash 53 April 13 02:29 DE_feature_counts.P0.001_C2.matrix

-rw-rw-r–. 1 bdash bdash 476 April 13 02:29 DE_isoforms_3.matrix

-rw-rw-r–. 1 bdash bdash 1104 April xiii 02:29 DE_isoforms_3.matrix.log2.centered.dat

-rw-rw-r–. 1 bdash bdash 6526 Apr xiii 02:29 DE_isoforms_3.matrix.log2.centered.genes_vs_samples_heatmap.pdf

-rw-rw-r–. i bdash bdash 634 Apr 13 02:29 DE_isoforms_3.matrix.log2.centered.sample_cor.dat

-rw-rw-r–. 1 bdash bdash 6381 Apr 13 02:29 DE_isoforms_3.matrix.log2.centered.sample_cor_matrix.pdf

-rw-rw-r–. 1 bdash bdash 4465 Apr 13 02:29 DE_isoforms_3.matrix.R

-rw-rw-r–. 1 bdash bdash 34409 Apr 13 02:29 DE_isoforms_3.matrix.RData

                library(pdftools)                              
                pdf_convert('isoforms_DE_3/DE_isoforms_3.matrix.log2.centered.genes_vs_samples_heatmap.pdf', format = "jpeg", pages = Nil, filenames = Nix, dpi = 300, antialias = True, opw = "", upw = "", verbose = TRUE)                              
                Converting page 1 to DE_isoforms_3.matrix.log2.centered.genes_vs_samples_heatmap_1.jpeg... washed! [i] "DE_isoforms_3.matrix.log2.centered.genes_vs_samples_heatmap_1.jpeg"              

genes_vs_sample_heatmap

genes_vs_sample_heatmap

                pdf_convert('isoforms_DE_3/DE_isoforms_3.matrix.log2.centered.sample_cor_matrix.pdf', format = "jpeg", pages = NULL, filenames = NULL, dpi = 300, antialias = Truthful, opw = "", upw = "", verbose = True)                              
                Converting page 1 to DE_isoforms_3.matrix.log2.centered.sample_cor_matrix_1.jpeg... washed! [1] "DE_isoforms_3.matrix.log2.centered.sample_cor_matrix_1.jpeg"              

sample_cor_matrix

sample_cor_matrix

8. edgeR analysis of differentail factor expression (similar to the isoforms analysis done in a higher place)

Generate a matrix file of abundance estimates

                              star-transcriptomeout$ abundance_estimates_to_matrix.pl   --est_method RSEM   1out/.genes.results  2out/.genes.results  3out/.genes.results  4out/.genes.results  5out/.genes.results  6out/.genes.results   --gene_trans_map none   --name_sample_by_basedir   --out_prefix genes_gene_trans_map_none/genes                          

-reading file: 1out/.genes.results

-reading file: 2out/.genes.results

-reading file: 3out/.genes.results

-reading file: 4out/.genes.results

-reading file: 5out/.genes.results

-reading file: 6out/.genes.results

  • Outputting combined matrix.

/home/bdash/miniconda2/opt/trinity-2.6.6/util/support_scripts/run_TMM_scale_matrix.pl –matrix genes_gene_trans_map_none/genes.isoform.TPM.not_cross_norm > genes_gene_trans_map_none/genes.isoform.TMM.EXPR.matrixCMD: R –no-save –no-restore –no-site-file –no-init-file -q < genes_gene_trans_map_none/genes.isoform.TPM.not_cross_norm.runTMM.R one>&2

…………….

star-transcriptomeout$ ls -l genes_gene_trans_map_none/

-rw-rw-r–. 1 bdash bdash 764847 Apr 12 12:24 genes.isoform.counts.matrix

-rw-rw-r–. ane bdash bdash 805903 Apr 12 12:24 genes.isoform.TMM.EXPR.matrix

-rw-rw-r–. 1 bdash bdash 622537 Apr 12 12:24 genes.isoform.TPM.not_cross_norm

-rw-rw-r–. i bdash bdash 578 Apr 12 12:24 genes.isoform.TPM.not_cross_norm.runTMM.R

-rw-rw-r–. 1 bdash bdash 318 Apr 12 12:24 genes.isoform.TPM.not_cross_norm.TMM_info.txt

DE analysis of cistron expression: Priduces MA plot, volcano plot and counts matrix

Note biologiacl triplicates for each group (see beneath)

              star-transcriptomeout$ run_DE_analysis.pl   --matrix genes_gene_trans_map_none/genes.isoform.counts.matrix   --output genes_DE_3/   --samples_file samples_described.txt   --method edgeR                          

Got six samples, and got: seven data fields.

Header: 1out 2out 3out 4out 5out 6out

Adjacent: Olr1501 0.00 0.00 0.00 0.00 0.00 0.00

$VAR1 = { '5out' => 5, '6out' => 6, '3out' => three, '1out' => one, '2out' => ii, '4out' => 4 };

$VAR1 = { 'conditionB' => [ '4out', '5out', '6out' ], 'conditionA' => [ '1out', '2out', '3out' ] };

Contrasts to perform are: $VAR1 = [ [ 'conditionA', 'conditionB' ] ];

CMD: R –no-save –no-restore –no-site-file –no-init-file -q < genes.isoform.counts.matrix.conditionA_vs_conditionB.conditionA.vs.conditionB.EdgeR.Rscript

……………

star-transcriptomeout$ ls -l genes_DE_3/

-rw-rw-r–. ane bdash bdash 1410 April 13 02:12 genes.isoform.counts.matrix.conditionA_vs_conditionB.conditionA.vs.conditionB.EdgeR.Rscript

-rw-rw-r–. 1 bdash bdash 352277 April 13 02:13 genes.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.count_matrix

-rw-rw-r–. 1 bdash bdash 1010284 Apr 13 02:xiii genes.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results

-rw-rw-r–. 1 bdash bdash 112695 Apr 13 02:13 genes.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.MA_n_Volcano.pdf

-rw-rw-r–. ane bdash bdash 355 April xiii 02:21 genes.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.P0.001_C2.conditionA-UP.subset

-rw-rw-r–. 1 bdash bdash seventy Apr xiii 02:21 genes.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.P0.001_C2.conditionB-Upward.subset

-rw-rw-r–. 1 bdash bdash 355 Apr 13 02:21 genes.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.P0.001_C2.DE.subset

-rw-rw-r–. ane bdash bdash 96 Apr 13 02:21 genes.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.samples

genes_MA_plot

genes_MA_plot

genes_volcano_plot

genes_volcano_plot

Analyze differential gene expression: Produces heatmap and coorelation matrix

              genes_DE_3$ analyze_diff_expr.pl   --matrix ../genes_gene_trans_map_none/genes.isoform.TMM.EXPR.matrix   --samples ../samples_described.txt   --output DE_genes_3                          

Found two features equally differentially expressed.

CMD: /domicile/bdash/miniconda2/opt/trinity-ii.vi.6/Assay/DifferentialExpression/PtR -m DE_genes_3.matrix –log2 –heatmap –min_colSums 0 –min_rowSums 0 –gene_dist euclidean –sample_dist euclidean –sample_cor_matrix –center_rows –salve -s ../samples_described.txt CMD: R –no-save –no-restore –no-site-file –no-init-file -q < DE_genes_3.matrix.R

……

star-transcriptomeout$ ls -50 genes_DE_3/

-rw-rw-r–. one bdash bdash 53 Apr 13 02:21 DE_feature_counts.P0.001_C2.matrix

-rw-rw-r–. 1 bdash bdash 120 April thirteen 02:21 DE_genes_3.matrix

-rw-rw-r–. 1 bdash bdash 256 Apr 13 02:21 DE_genes_3.matrix.log2.centered.dat

-rw-rw-r–. one bdash bdash 5977 April thirteen 02:21 DE_genes_3.matrix.log2.centered.genes_vs_samples_heatmap.pdf

-rw-rw-r–. i bdash bdash 148 Apr 13 02:21 DE_genes_3.matrix.log2.centered.sample_cor.dat

-rw-rw-r–. one bdash bdash 6311 Apr 13 02:21 DE_genes_3.matrix.log2.centered.sample_cor_matrix.pdf

-rw-rw-r–. 1 bdash bdash 4435 Apr 13 02:21 DE_genes_3.matrix.R

-rw-rw-r–. 1 bdash bdash 33214 Apr 13 02:21 DE_genes_3.matrix.RData

                pdf_convert('genes_DE_3/DE_genes_3.matrix.log2.centered.genes_vs_samples_heatmap.pdf', format = "jpeg", pages = NULL, filenames = Nix, dpi = 300, antialias = Truthful, opw = "", upw = "", verbose = TRUE)              
                Converting page 1 to DE_genes_3.matrix.log2.centered.genes_vs_samples_heatmap_1.jpeg... done! [1] "DE_genes_3.matrix.log2.centered.genes_vs_samples_heatmap_1.jpeg"              

genes_heatmap

genes_heatmap

                pdf_convert('genes_DE_3/DE_genes_3.matrix.log2.centered.sample_cor_matrix.pdf', format = "jpeg", pages = NULL, filenames = Aught, dpi = 300, antialias = TRUE, opw = "", upw = "", verbose = TRUE)              
                Converting folio 1 to DE_genes_3.matrix.log2.centered.sample_cor_matrix_1.jpeg... done! [1] "DE_genes_3.matrix.log2.centered.sample_cor_matrix_1.jpeg"              

genes_correlation_matrix

genes_correlation_matrix

LS0tDQp0aXRsZTogIkFuYWx5c2lzIG9mIGdlbmUgYW5kIGlzb2Zvcm0gZXhwcmVzc2lvbiBpbiBwcmVmcm9udGFsIGNvcnRleCAoUEZDKSBvZiByYXRzIGV4cG9zZWQgdG8gbmljb3RpbmU6IFN0YXItUlNFTS1lZGdlUiBwaXBlbGluZSINCmF1dGhvcjogIkJoYWdpcmF0aGkgRGFzaCINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiMjIDEuIFJlZmVyZW5jZXMgYW5kIHJlc291cmNlcw0KDQojIyMjIFJlZmVyZW5jZQ0KDQpQTG9TIE9uZS4gMjAxMzs4KDMpOmU1OTU4Mi4gZG9pOiAxMC4xMzcxL2pvdXJuYWwucG9uZS4wMDU5NTgyLg0KDQojIyMjIE1hY2hpbmUNCg0KQVdTIHI1LjJ4bGFyZ2UgYW5kIENlbnRPUyBsaW51eCA3IG9uIGEgVmlydHVhbCBNYWNoaW5lDQoNCiMjIyMgU29mdHdhcmUNCg0Kd2dldCBodHRwOi8vaGdkb3dubG9hZC5zb2UudWNzYy5lZHUvYWRtaW4vZXhlL2xpbnV4Lng4Nl82NC9nZW5lUHJlZFRvR3RmDQoNCg0KDQojIyAyLiBPYnRhaW4gYW5kL3Byb2Nlc3MgYW5hbHlzaXMgZGF0c2V0cw0KDQojIyMgTWFrZSBkaXJlY3RvcmllcyANCg0KIyMjIyB+L2RhdGEvcm5hc2VxL1JuL1BMb1MtT25lLTgtZTU5NTgyJCBscyAtbA0KDQpkcnd4cnd4ci14IDIgdWJ1bnR1IHVidW50dSA0MDk2IEFwciAxMCAwMjo0OCBmMzQ0X3BmY19uaWNvdGluZQ0KDQpkcnd4cnd4ci14IDIgdWJ1bnR1IHVidW50dSA0MDk2IEFwciAxMCAwMzoyOCBmMzQ0X3BmY19zYWxpbmUNCg0KDQojIyMgRG93bmxvYWQgc3JhIGZpbGVzIChuaWNvdGluZSBleHBvc2VkIHJhdCBQRkMpIHRvIGYzNDRfcGZjX25pY290aW5lIGRpcmVjdG9yeQ0KDQoNCiMjIyMgZjM0NF9wZmNfbmljb3RpbmUkIHdnZXQgZnRwOi8vZnRwLXRyYWNlLm5jYmkubmloLmdvdi9zcmEvc3JhLWluc3RhbnQvcmVhZHMvQnlSdW4vc3JhL1NSUi9TUlI4NjkvU1JSODY5MDMyL1NSUjg2OTAzMi5zcmENCg0KIyMjIyBmMzQ0X3BmY19uaWNvdGluZSQgd2dldCBmdHA6Ly9mdHAtdHJhY2UubmNiaS5uaWguZ292L3NyYS9zcmEtaW5zdGFudC9yZWFkcy9CeVJ1bi9zcmEvU1JSL1NSUjg2OS9TUlI4NjkwMzMvU1JSODY5MDMzLnNyYQ0KDQojIyMjIGYzNDRfcGZjX25pY290aW5lJCB3Z2V0IGZ0cDovL2Z0cC10cmFjZS5uY2JpLm5paC5nb3Yvc3JhL3NyYS1pbnN0YW50L3JlYWRzL0J5UnVuL3NyYS9TUlIvU1JSODY5L1NSUjg2OTAzNC9TUlI4NjkwMzQuc3JhDQoNCg0KDQoNCiMjIyBDb252ZXJ0IHNyYSBmaWxlcyB0byBmYXN0cSBmaWxlcw0KDQojIyMjIGYzNDRfcGZjX25pY290aW5lJCBmYXN0cS1kdW1wIC0tc3BsaXQtMyBTUlI4NjkwMzIuc3JhIC0tZ3ppcA0KDQojIyMjIGYzNDRfcGZjX25pY290aW5lJCBmYXN0cS1kdW1wIC0tc3BsaXQtMyBTUlI4NjkwMzMuc3JhIC0tZ3ppcA0KDQojIyMjIGYzNDRfcGZjX25pY290aW5lJCBmYXN0cS1kdW1wIC0tc3BsaXQtMyBTUlI4NjkwMzQuc3JhIC0tZ3ppcA0KDQoNCg0KIyMjIyBQTG9TLU9uZS04LWU1OTU4MiQgbHMgLWwgZjM0NF9wZmNfbmljb3RpbmUvDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDE5MTgzNzY4MjYgQXByICA3IDEzOjA4IFNSUjg2OTAzMi5zcmENCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMTUxMjcwMjg3MyBBcHIgMTAgMDM6MDcgU1JSODY5MDMyXzEuZmFzdHEuZ3oNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMTU2NTAyNzQyMSBBcHIgMTAgMDM6MDcgU1JSODY5MDMyXzIuZmFzdHEuZ3oNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMTk4OTA4NjI0MSBBcHIgIDcgMTM6MDkgU1JSODY5MDMzLnNyYQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAxNTU5NTEwODE4IEFwciAxMCAwMzoxMSBTUlI4NjkwMzNfMS5mYXN0cS5neg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAxNjEyMjU4NjE4IEFwciAxMCAwMzoxMSBTUlI4NjkwMzNfMi5mYXN0cS5neg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAxOTc4MzI3NjY3IEFwciAgNyAxMzoxMCBTUlI4NjkwMzQuc3JhDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDE1Njg5Nzk3ODQgQXByIDEwIDAzOjEyIFNSUjg2OTAzNF8xLmZhc3RxLmd6DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDE2MTUzODUzMzEgQXByIDEwIDAzOjEyIFNSUjg2OTAzNF8yLmZhc3RxLmd6DQoNCg0KIyMjIERvd25sb2FkIHNyYSBmaWxlcyAoY29udHJvbC9zYWxpbmUgZXhwb3NlZCByYXQgUEZDKSB0byBmMzQ0X3BmY19zYWxpbmUgZGlyZWN0b3J5DQoNCg0KIyMjIyBmMzQ0X3BmY19zYWxpbmUkIHdnZXQgZnRwOi8vZnRwLXRyYWNlLm5jYmkubmloLmdvdi9zcmEvc3JhLWluc3RhbnQvcmVhZHMvQnlSdW4vc3JhL1NSUi9TUlI4NjkvU1JSODY5MDQ0L1NSUjg2OTA0NC5zcmENCg0KIyMjIyBmMzQ0X3BmY19zYWxpbmUkIHdnZXQgZnRwOi8vZnRwLXRyYWNlLm5jYmkubmloLmdvdi9zcmEvc3JhLWluc3RhbnQvcmVhZHMvQnlSdW4vc3JhL1NSUi9TUlI4NjkvU1JSODY5MDQ1L1NSUjg2OTA0NS5zcmENCg0KIyMjIyBmMzQ0X3BmY19zYWxpbmUkIHdnZXQgZnRwOi8vZnRwLXRyYWNlLm5jYmkubmloLmdvdi9zcmEvc3JhLWluc3RhbnQvcmVhZHMvQnlSdW4vc3JhL1NSUi9TUlI4NjkvU1JSODY5MDQ2L1NSUjg2OTA0Ni5zcmENCg0KDQoNCg0KIyMjIyBmMzQ0X3BmY19zYWxpbmUkIGZhc3RxLWR1bXAgLS1zcGxpdC0zIFNSUjg2OTA0NC5zcmEgLS1nemlwDQoNCiMjIyMgZjM0NF9wZmNfc2FsaW5lJCBmYXN0cS1kdW1wIC0tc3BsaXQtMyBTUlI4NjkwNDUuc3JhIC0tZ3ppcA0KDQojIyMjIGYzNDRfcGZjX3NhbGluZSQgZmFzdHEtZHVtcCAtLXNwbGl0LTMgU1JSODY5MDQ2LnNyYSAtLWd6aXANCg0KDQoNCiMjIyMgUExvUy1PbmUtOC1lNTk1ODIkIGxzIC1sIGYzNDRfcGZjX3NhbGluZS8NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMjY4MTMzMDA3NCBBcHIgIDcgMTI6NTkgU1JSODY5MDQ0LnNyYQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAyMTE5NzQ1OTU1IEFwciAxMCAwMzoxMCBTUlI4NjkwNDRfMS5mYXN0cS5neg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAyMjAyNTgwNDgyIEFwciAxMCAwMzoxMCBTUlI4NjkwNDRfMi5mYXN0cS5neg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAyNzA5MzgzMTk0IEFwciAgNyAxMzowMSBTUlI4NjkwNDUuc3JhDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDIxMDM4OTIwOTcgQXByIDEwIDAzOjEyIFNSUjg2OTA0NV8xLmZhc3RxLmd6DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDIxOTgzNjMwNjIgQXByIDEwIDAzOjEyIFNSUjg2OTA0NV8yLmZhc3RxLmd6DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDI2MTQwMjMzMjggQXByICA3IDEzOjAyIFNSUjg2OTA0Ni5zcmENCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMjA1NDk0MjM3NSBBcHIgMTAgMDM6MTMgU1JSODY5MDQ2XzEuZmFzdHEuZ3oNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMjEzODQ0NjI2OSBBcHIgMTAgMDM6MTMgU1JSODY5MDQ2XzIuZmFzdHEuZ3oNCg0KDQoNCiMjIDMuIE9idGFpbiwgcHJvY2VzcyBhbmQvb3IgYnVpbGQgZ2Vub21lLCByZWZlcmVuY2UgYW5kIGluZGV4IGRhdGFzZXRzDQoNCg0KIyMjIERvd25sb2FkIHRoZSBnZW5vbWUgZmlsZSBhbmQgaW5kZXggaXQNCg0KDQojIyMjIHdnZXQgaHR0cDovL2hnZG93bmxvYWQuc29lLnVjc2MuZWR1L2dvbGRlblBhdGgvcm42L2JpZ1ppcHMvcm42LmZhLmd6DQoNCg0KIyMjIyBzYW10b29scyBmYWlkeCBybjYuZmENCg0KDQojIyMjIHJuNiQgbHMgLWwNCg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAyOTI3NjA3MzMzIEFwciAgOSAxOToyNiBybjYuZmENCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICA0MDY1NCBBcHIgIDkgMTk6MjYgcm42LmZhLmZhaQ0KDQoNCg0KDQojIyMgRG93bmxvYWQgdGhlIHJlZkdlbmUgZmlsZSBhbmQgY29udmVydCBpdCB0byBhIEdURiBmaWxlDQoNCg0KIyMjIyB3Z2V0IGh0dHA6Ly9oZ2Rvd25sb2FkLnNvZS51Y3NjLmVkdS9nb2xkZW5QYXRoL3JuNi9kYXRhYmFzZS9yZWZHZW5lLnR4dC5neg0KDQojIyMjIGd1bnppcCByZWZHZW5lLnR4dC5neiANCiANCiMjIyMgY3V0IC1mIDItIHJlZkdlbmUudHh0ID4gcmVmR2VuZS5pbnB1dA0KDQojIyMjIGdlbmVQcmVkVG9HdGYgZmlsZSByZWZHZW5lLmlucHV0IHJlZkdlbmUuZ3RmDQogDQoNCiMjIyMgZ2Vub21lX3JhdCQgbHMgLWwgIA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgIDYxODkxMzQxIEFwciAgOSAxOToyNyByZWZHZW5lLmd0Zg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICA1MTQzMzgwIEFwciAgOSAxOToyNyByZWZHZW5lLmlucHV0DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgIDUyMjY1MDcgQXByICA5IDE5OjI3IHJlZkdlbmUudHh0DQoNCg0KDQoNCg0KDQoNCiMjIyA0LiBCdWlsZCBhIFNUQVIgaW5kZXggZm9yIHRoZSByYXQgZ2VuZW9tZQ0KDQoNCmBgYA0KJCBTVEFSIC0tcnVuVGhyZWFkTiAxNiAtLXJ1bk1vZGUgZ2Vub21lR2VuZXJhdGUgLS1nZW5vbWVEaXIgU3RhckluZGV4UmF0LyAtLWdlbm9tZUZhc3RhRmlsZXMgcm42L3JuNi5mYQ0KDQpgYGANCg0KDQpBcHIgMDkgMTg6Mzk6MDQgLi4uLi4gc3RhcnRlZCBTVEFSIHJ1bg0KDQpBcHIgMDkgMTg6Mzk6MDQgLi4uIHN0YXJ0aW5nIHRvIGdlbmVyYXRlIEdlbm9tZSBmaWxlcw0KDQpBcHIgMDkgMTg6NDA6MTggLi4uIHN0YXJ0aW5nIHRvIHNvcnQgU3VmZml4IEFycmF5LiBUaGlzIG1heSB0YWtlIGEgbG9uZyB0aW1lLi4uDQoNCkFwciAwOSAxODo0MDozMiAuLi4gc29ydGluZyBTdWZmaXggQXJyYXkgY2h1bmtzIGFuZCBzYXZpbmcgdGhlbSB0byBkaXNrLi4uDQoNCkFwciAwOSAxOTowNTozMyAuLi4gbG9hZGluZyBjaHVua3MgZnJvbSBkaXNrLCBwYWNraW5nIFNBLi4uDQoNCkFwciAwOSAxOTowNjo0MiAuLi4gZmluaXNoZWQgZ2VuZXJhdGluZyBzdWZmaXggYXJyYXkNCg0KQXByIDA5IDE5OjA2OjQyIC4uLiBnZW5lcmF0aW5nIFN1ZmZpeCBBcnJheSBpbmRleA0KDQpBcHIgMDkgMTk6MTA6NTcgLi4uIGNvbXBsZXRlZCBTdWZmaXggQXJyYXkgaW5kZXgNCg0KQXByIDA5IDE5OjEwOjU3IC4uLiB3cml0aW5nIEdlbm9tZSB0byBkaXNrIC4uLg0KDQpBcHIgMDkgMTk6MTA6NTkgLi4uIHdyaXRpbmcgU3VmZml4IEFycmF5IHRvIGRpc2sgLi4uDQoNCkFwciAwOSAxOToxMjoxOSAuLi4gd3JpdGluZyBTQWluZGV4IHRvIGRpc2sNCg0KQXByIDA5IDE5OjEyOjI3IC4uLi4uIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseQ0KDQoNCiMjIyMgU3RhckluZGV4UmF0JCBscyAtbA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgMzA5NTEzNDIwOCBBcHIgIDkgMTk6MTAgR2Vub21lDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDIyNTIxMzUxNjQ1IEFwciAgOSAxOToxMiBTQQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgMTU2NTg3MzYxOSBBcHIgIDkgMTk6MTIgU0FpbmRleA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgICAgNTIxMyBBcHIgIDkgMTg6NDAgY2hyTGVuZ3RoLnR4dA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgICAxOTM0NyBBcHIgIDkgMTg6NDAgY2hyTmFtZS50eHQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgMjQ1NjAgQXByICA5IDE4OjQwIGNock5hbWVMZW5ndGgudHh0DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgIDEwMzg3IEFwciAgOSAxODo0MCBjaHJTdGFydC50eHQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgICA0NzkgQXByICA5IDE5OjEwIGdlbm9tZVBhcmFtZXRlcnMudHh0DQoNCg0KDQoNCg0KDQoNCiMjIDUuIEFsaWduIHRoZSBmYXN0cS5neiBmaWxlcyB0byBvYnRhaW4gQkFNIGZpbGVzDQoNCg0KYGBgDQogfi9yZXN1bHRzL3JuYXNlcS9Sbi9zdGFyX3JhdCQgU1RBUiANCiANCiAtLXJ1blRocmVhZE4gMTIgDQogDQogLS1nZW5vbWVEaXIgU3RhckluZGV4UmF0LyANCiANCiAtLXNqZGJHVEZmaWxlIH4vZ2Vub21lX3JhdC9yZWZHZW5lLmd0ZiANCiANCiAtLXNqZGJPdmVyaGFuZyAxMDAgDQogDQogLS1yZWFkRmlsZXNJbiB+L1BMb1MtT25lLTgtZTU5NTgyL2YzNDRfcGZjX3NhbGluZS9TUlI4NjkwNDRfMS5mYXN0cS5neg0KIA0KIH4vUExvUy1PbmUtOC1lNTk1ODIvZjM0NF9wZmNfc2FsaW5lL1NSUjg2OTA0NF8yLmZhc3RxLmd6IA0KIA0KIC0tcmVhZEZpbGVzQ29tbWFuZCB6Y2F0IA0KIA0KIC0tcXVhbnRNb2RlIFRyYW5zY3JpcHRvbWVTQU0gDQogDQogLS1vdXRGaWxlTmFtZVByZWZpeCAxYWxpZ24vDQogDQogYGBgDQoNCkFwciAxMCAwMzozMDozMCAuLi4uLiBzdGFydGVkIFNUQVIgcnVuDQoNCkFwciAxMCAwMzozMDozMCAuLi4uLiBsb2FkaW5nIGdlbm9tZQ0KDQpBcHIgMTAgMDM6MzI6MzkgLi4uLi4gcHJvY2Vzc2luZyBhbm5vdGF0aW9ucyBHVEYNCg0KQXByIDEwIDAzOjMyOjQzIC4uLi4uIGluc2VydGluZyBqdW5jdGlvbnMgaW50byB0aGUgZ2Vub21lIGluZGljZXMNCg0KQXByIDEwIDAzOjM3OjIzIC4uLi4uIHN0YXJ0ZWQgbWFwcGluZw0KDQpBcHIgMTAgMDM6NDI6MjkgLi4uLi4gZmluaXNoZWQgc3VjY2Vzc2Z1bGx5DQoNCg0KDQojIyMjICQgbHMgLWwgMWFsaWduLw0KDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDE1OTMzNDQ0OTg2IEFwciAxMCAwMzo0MiBBbGlnbmVkLm91dC5zYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgIDIzNTg2NDM1NzkgQXByIDEwIDAzOjQyIEFsaWduZWQudG9UcmFuc2NyaXB0b21lLm91dC5iYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgIDE4NjIgQXByIDEwIDAzOjQyIExvZy5maW5hbC5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAyNzI5MzUgQXByIDEwIDAzOjQyIExvZy5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgICA4MzYgQXByIDEwIDAzOjQyIExvZy5wcm9ncmVzcy5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgIDczNjg4ODYgQXByIDEwIDAzOjQyIFNKLm91dC50YWINCg0KZHJ3eC0tLS0tLSAyIHVidW50dSB1YnVudHUgICAgICAgIDQwOTYgQXByIDEwIDAzOjMyIF9TVEFSZ2Vub21lDQoNCg0KDQojIyMjICQgY2F0IDFhbGlnbi9Mb2cuZmluYWwub3V0IA0KDQoNCmBgYA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRlZCBqb2Igb24gfAlBcHIgMTAgMDM6MzA6MzANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRlZCBtYXBwaW5nIG9uIHwJQXByIDEwIDAzOjM3OjIzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaW5pc2hlZCBvbiB8CUFwciAxMCAwMzo0MjoyOQ0KICAgICAgIE1hcHBpbmcgc3BlZWQsIE1pbGxpb24gb2YgcmVhZHMgcGVyIGhvdXIgfAk0ODkuMjMNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2YgaW5wdXQgcmVhZHMgfAk0MTU4NDg5MQ0KICAgICAgICAgICAgICAgICAgICAgIEF2ZXJhZ2UgaW5wdXQgcmVhZCBsZW5ndGggfAkxMDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOSVFVRSBSRUFEUzoNCiAgICAgICAgICAgICAgICAgICBVbmlxdWVseSBtYXBwZWQgcmVhZHMgbnVtYmVyIHwJMzQ3OTYzMzENCiAgICAgICAgICAgICAgICAgICAgICAgIFVuaXF1ZWx5IG1hcHBlZCByZWFkcyAlIHwJODMuNjglDQogICAgICAgICAgICAgICAgICAgICAgICAgIEF2ZXJhZ2UgbWFwcGVkIGxlbmd0aCB8CTk5LjM3DQogICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBUb3RhbCB8CTc5MTAxOTkNCiAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBBbm5vdGF0ZWQgKHNqZGIpIHwJNzE5NDk0MA0KICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogR1QvQUcgfAk3NzY0Njc3DQogICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBHQy9BRyB8CTYyMDA0DQogICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBBVC9BQyB8CTc2MzQNCiAgICAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBOb24tY2Fub25pY2FsIHwJNzU4ODQNCiAgICAgICAgICAgICAgICAgICAgICBNaXNtYXRjaCByYXRlIHBlciBiYXNlLCAlIHwJMC4zNyUNCiAgICAgICAgICAgICAgICAgICAgICAgICBEZWxldGlvbiByYXRlIHBlciBiYXNlIHwJMC4wMSUNCiAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0aW9uIGF2ZXJhZ2UgbGVuZ3RoIHwJMS42MQ0KICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJ0aW9uIHJhdGUgcGVyIGJhc2UgfAkwLjAwJQ0KICAgICAgICAgICAgICAgICAgICAgICBJbnNlcnRpb24gYXZlcmFnZSBsZW5ndGggfAkxLjM1DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1VTFRJLU1BUFBJTkcgUkVBRFM6DQogICAgICAgIE51bWJlciBvZiByZWFkcyBtYXBwZWQgdG8gbXVsdGlwbGUgbG9jaSB8CTI1NTM4NTINCiAgICAgICAgICAgICAlIG9mIHJlYWRzIG1hcHBlZCB0byBtdWx0aXBsZSBsb2NpIHwJNi4xNCUNCiAgICAgICAgTnVtYmVyIG9mIHJlYWRzIG1hcHBlZCB0byB0b28gbWFueSBsb2NpIHwJNTczMDgNCiAgICAgICAgICAgICAlIG9mIHJlYWRzIG1hcHBlZCB0byB0b28gbWFueSBsb2NpIHwJMC4xNCUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTk1BUFBFRCBSRUFEUzoNCiAgICAgICAlIG9mIHJlYWRzIHVubWFwcGVkOiB0b28gbWFueSBtaXNtYXRjaGVzIHwJMC4wMCUNCiAgICAgICAgICAgICAgICAgJSBvZiByZWFkcyB1bm1hcHBlZDogdG9vIHNob3J0IHwJOS45MiUNCiAgICAgICAgICAgICAgICAgICAgICUgb2YgcmVhZHMgdW5tYXBwZWQ6IG90aGVyIHwJMC4xMyUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSElNRVJJQyBSRUFEUzoNCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGNoaW1lcmljIHJlYWRzIHwJMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgb2YgY2hpbWVyaWMgcmVhZHMgfAkwLjAwJQ0KDQpgYGANCg0KDQoNCg0KYGBgDQp+L3Jlc3VsdHMvcm5hc2VxL1JuL3N0YXJfcmF0L3RyYW5zY3JpcHRvbWVPdXQkIFNUQVIgLS1ydW5UaHJlYWROIDEyIC0tZ2Vub21lRGlyIH4vZ2Vub21lQW5kSW5kaWNlcy9Sbi9zdGFyLyAtLXNqZGJHVEZmaWxlIH4vZ2Vub21lQW5kSW5kaWNlcy9Sbi9ybjYucmVmR2VuZS5ndGYgLS1zamRiT3ZlcmhhbmcgMTAwIC0tcmVhZEZpbGVzSW4gfi9kYXRhL3JuYXNlcS9Sbi9QTG9TLU9uZS04LWU1OTU4Mi9mMzQ0X3BmY19zYWxpbmUvU1JSODY5MDQ1XzEuZmFzdHEuZ3ogfi9kYXRhL3JuYXNlcS9Sbi9QTG9TLU9uZS04LWU1OTU4Mi9mMzQ0X3BmY19zYWxpbmUvU1JSODY5MDQ1XzIuZmFzdHEuZ3ogLS1yZWFkRmlsZXNDb21tYW5kIHpjYXQgLS1xdWFudE1vZGUgVHJhbnNjcmlwdG9tZVNBTSAtLW91dEZpbGVOYW1lUHJlZml4IDJhbGlnbi8NCg0KYGBgDQoNCg0KQXByIDExIDE1OjA4OjE5IC4uLi4uIHN0YXJ0ZWQgU1RBUiBydW4NCg0KQXByIDExIDE1OjA4OjIwIC4uLi4uIGxvYWRpbmcgZ2Vub21lDQoNCkFwciAxMSAxNToxMjowMSAuLi4uLiBwcm9jZXNzaW5nIGFubm90YXRpb25zIEdURg0KDQpBcHIgMTEgMTU6MTI6MjUgLi4uLi4gaW5zZXJ0aW5nIGp1bmN0aW9ucyBpbnRvIHRoZSBnZW5vbWUgaW5kaWNlcw0KDQpBcHIgMTEgMTU6Mzc6NDYgLi4uLi4gc3RhcnRlZCBtYXBwaW5nDQoNCkFwciAxMSAxNTo1ODo1NCAuLi4uLiBmaW5pc2hlZCBzdWNjZXNzZnVsbHkNCg0KDQojIyMjICQgbHMgLWwgMmFsaWduLw0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAxNDg2OTQzNjY0NCBBcHIgMTEgMTU6NTggQWxpZ25lZC5vdXQuc2FtDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAyMjE2MTY2NjY4IEFwciAxMSAxNTo1OCBBbGlnbmVkLnRvVHJhbnNjcmlwdG9tZS5vdXQuYmFtDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgICAxODYzIEFwciAxMSAxNTo1OCBMb2cuZmluYWwub3V0DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgMjkwOTcxIEFwciAxMSAxNTo1OCBMb2cub3V0DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgICAyNDg4IEFwciAxMSAxNTo1OCBMb2cucHJvZ3Jlc3Mub3V0DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICA3Mjc4OTUzIEFwciAxMSAxNTo1OCBTSi5vdXQudGFiDQoNCmRyd3gtLS0tLS0gMiB1YnVudHUgdWJ1bnR1ICAgICAgICA0MDk2IEFwciAxMSAxNToxMiBfU1RBUmdlbm9tZQ0KDQoNCg0KDQojIyMjICQgY2F0IDJhbGlnbi9Mb2cuZmluYWwub3V0IA0KDQoNCg0KYGBgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydGVkIGpvYiBvbiB8CUFwciAxMSAxNTowODoxOQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydGVkIG1hcHBpbmcgb24gfAlBcHIgMTEgMTU6Mzc6NDYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbmlzaGVkIG9uIHwJQXByIDExIDE1OjU4OjU0DQogICAgICAgTWFwcGluZyBzcGVlZCwgTWlsbGlvbiBvZiByZWFkcyBwZXIgaG91ciB8CTExNi4wMg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBpbnB1dCByZWFkcyB8CTQwODY2MDM1DQogICAgICAgICAgICAgICAgICAgICAgQXZlcmFnZSBpbnB1dCByZWFkIGxlbmd0aCB8CTEwMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5JUVVFIFJFQURTOg0KICAgICAgICAgICAgICAgICAgIFVuaXF1ZWx5IG1hcHBlZCByZWFkcyBudW1iZXIgfAkzMjU5NDExNQ0KICAgICAgICAgICAgICAgICAgICAgICAgVW5pcXVlbHkgbWFwcGVkIHJlYWRzICUgfAk3OS43NiUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgQXZlcmFnZSBtYXBwZWQgbGVuZ3RoIHwJOTkuMzUNCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IFRvdGFsIHwJNzM3MjE4MQ0KICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IEFubm90YXRlZCAoc2pkYikgfAk2Njk1MTU1DQogICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBHVC9BRyB8CTcyMzUxMzUNCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IEdDL0FHIHwJNTg1MjMNCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IEFUL0FDIHwJNjk5NQ0KICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IE5vbi1jYW5vbmljYWwgfAk3MTUyOA0KICAgICAgICAgICAgICAgICAgICAgIE1pc21hdGNoIHJhdGUgcGVyIGJhc2UsICUgfAkwLjM4JQ0KICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0aW9uIHJhdGUgcGVyIGJhc2UgfAkwLjAxJQ0KICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRpb24gYXZlcmFnZSBsZW5ndGggfAkxLjYxDQogICAgICAgICAgICAgICAgICAgICAgICBJbnNlcnRpb24gcmF0ZSBwZXIgYmFzZSB8CTAuMDElDQogICAgICAgICAgICAgICAgICAgICAgIEluc2VydGlvbiBhdmVyYWdlIGxlbmd0aCB8CTEuMzUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVVMVEktTUFQUElORyBSRUFEUzoNCiAgICAgICAgTnVtYmVyIG9mIHJlYWRzIG1hcHBlZCB0byBtdWx0aXBsZSBsb2NpIHwJMjM1MzkwMw0KICAgICAgICAgICAgICUgb2YgcmVhZHMgbWFwcGVkIHRvIG11bHRpcGxlIGxvY2kgfAk1Ljc2JQ0KICAgICAgICBOdW1iZXIgb2YgcmVhZHMgbWFwcGVkIHRvIHRvbyBtYW55IGxvY2kgfAk1Mjg3Ng0KICAgICAgICAgICAgICUgb2YgcmVhZHMgbWFwcGVkIHRvIHRvbyBtYW55IGxvY2kgfAkwLjEzJQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOTUFQUEVEIFJFQURTOg0KICAgICAgICUgb2YgcmVhZHMgdW5tYXBwZWQ6IHRvbyBtYW55IG1pc21hdGNoZXMgfAkwLjAwJQ0KICAgICAgICAgICAgICAgICAlIG9mIHJlYWRzIHVubWFwcGVkOiB0b28gc2hvcnQgfAkxNC4yMyUNCiAgICAgICAgICAgICAgICAgICAgICUgb2YgcmVhZHMgdW5tYXBwZWQ6IG90aGVyIHwJMC4xMiUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSElNRVJJQyBSRUFEUzoNCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGNoaW1lcmljIHJlYWRzIHwJMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgb2YgY2hpbWVyaWMgcmVhZHMgfAkwLjAwJQ0KDQoNCmBgYA0KDQoNCg0KDQoNCg0KDQoNCmBgYA0Kfi9yZXN1bHRzL3JuYXNlcS9Sbi9zdGFyX3JhdC90cmFuc2NyaXB0b21lT3V0JCBTVEFSIC0tcnVuVGhyZWFkTiAxMiAtLWdlbm9tZURpciB+L2dlbm9tZUFuZEluZGljZXMvUm4vc3Rhci8gLS1zamRiR1RGZmlsZSB+L2dlbm9tZUFuZEluZGljZXMvUm4vcm42LnJlZkdlbmUuZ3RmIC0tc2pkYk92ZXJoYW5nIDEwMCAtLXJlYWRGaWxlc0luIH4vZGF0YS9ybmFzZXEvUm4vUExvUy1PbmUtOC1lNTk1ODIvZjM0NF9wZmNfc2FsaW5lL1NSUjg2OTA0Nl8xLmZhc3RxLmd6IH4vZGF0YS9ybmFzZXEvUm4vUExvUy1PbmUtOC1lNTk1ODIvZjM0NF9wZmNfc2FsaW5lL1NSUjg2OTA0Nl8yLmZhc3RxLmd6IC0tcmVhZEZpbGVzQ29tbWFuZCB6Y2F0IC0tcXVhbnRNb2RlIFRyYW5zY3JpcHRvbWVTQU0gLS1vdXRGaWxlTmFtZVByZWZpeCAzYWxpZ24vDQoNCmBgYA0KDQpBcHIgMTEgMTY6MDA6NTIgLi4uLi4gc3RhcnRlZCBTVEFSIHJ1bg0KDQpBcHIgMTEgMTY6MDA6NTIgLi4uLi4gbG9hZGluZyBnZW5vbWUNCg0KQXByIDExIDE2OjAyOjM1IC4uLi4uIHByb2Nlc3NpbmcgYW5ub3RhdGlvbnMgR1RGDQoNCkFwciAxMSAxNjowMjozNyAuLi4uLiBpbnNlcnRpbmcganVuY3Rpb25zIGludG8gdGhlIGdlbm9tZSBpbmRpY2VzDQoNCkFwciAxMSAxNjowNToyMyAuLi4uLiBzdGFydGVkIG1hcHBpbmcNCg0KQXByIDExIDE2OjExOjI5IC4uLi4uIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseQ0KDQoNCiMjIyMgJCBscyAtbCAzYWxpZ24vDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDE0OTk4MzE5MjQ1IEFwciAxMSAxNjoxMSBBbGlnbmVkLm91dC5zYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgIDIxODM4MTQ2MzEgQXByIDExIDE2OjExIEFsaWduZWQudG9UcmFuc2NyaXB0b21lLm91dC5iYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgIDE4NjMgQXByIDExIDE2OjExIExvZy5maW5hbC5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAyOTA5NzAgQXByIDExIDE2OjExIExvZy5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgICA5NTQgQXByIDExIDE2OjExIExvZy5wcm9ncmVzcy5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgIDcyMjA5MjMgQXByIDExIDE2OjExIFNKLm91dC50YWINCg0KZHJ3eC0tLS0tLSAyIHVidW50dSB1YnVudHUgICAgICAgIDQwOTYgQXByIDExIDE2OjAyIF9TVEFSZ2Vub21lDQoNCg0KDQojIyMjICQgY2F0IDNhbGlnbi9Mb2cuZmluYWwub3V0IA0KDQpgYGANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0ZWQgam9iIG9uIHwJQXByIDExIDE2OjAwOjUyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0ZWQgbWFwcGluZyBvbiB8CUFwciAxMSAxNjowNToyMw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmluaXNoZWQgb24gfAlBcHIgMTEgMTY6MTE6MjkNCiAgICAgICBNYXBwaW5nIHNwZWVkLCBNaWxsaW9uIG9mIHJlYWRzIHBlciBob3VyIHwJMzg3LjI2DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGlucHV0IHJlYWRzIHwJMzkzNzA5MzUNCiAgICAgICAgICAgICAgICAgICAgICBBdmVyYWdlIGlucHV0IHJlYWQgbGVuZ3RoIHwJMTAwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTklRVUUgUkVBRFM6DQogICAgICAgICAgICAgICAgICAgVW5pcXVlbHkgbWFwcGVkIHJlYWRzIG51bWJlciB8CTMyNzE3OTU4DQogICAgICAgICAgICAgICAgICAgICAgICBVbmlxdWVseSBtYXBwZWQgcmVhZHMgJSB8CTgzLjEwJQ0KICAgICAgICAgICAgICAgICAgICAgICAgICBBdmVyYWdlIG1hcHBlZCBsZW5ndGggfAk5OS4zNQ0KICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogVG90YWwgfAk3MTAyMzI4DQogICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogQW5ub3RhdGVkIChzamRiKSB8CTY0NTgyMDYNCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IEdUL0FHIHwJNjk3MTM5MQ0KICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogR0MvQUcgfAk1NTYzNA0KICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogQVQvQUMgfAk2OTk5DQogICAgICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogTm9uLWNhbm9uaWNhbCB8CTY4MzA0DQogICAgICAgICAgICAgICAgICAgICAgTWlzbWF0Y2ggcmF0ZSBwZXIgYmFzZSwgJSB8CTAuNDAlDQogICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRpb24gcmF0ZSBwZXIgYmFzZSB8CTAuMDElDQogICAgICAgICAgICAgICAgICAgICAgICBEZWxldGlvbiBhdmVyYWdlIGxlbmd0aCB8CTEuNjENCiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VydGlvbiByYXRlIHBlciBiYXNlIHwJMC4wMSUNCiAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJ0aW9uIGF2ZXJhZ2UgbGVuZ3RoIHwJMS4zNQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVUxUSS1NQVBQSU5HIFJFQURTOg0KICAgICAgICBOdW1iZXIgb2YgcmVhZHMgbWFwcGVkIHRvIG11bHRpcGxlIGxvY2kgfAkyNDYyMzA5DQogICAgICAgICAgICAgJSBvZiByZWFkcyBtYXBwZWQgdG8gbXVsdGlwbGUgbG9jaSB8CTYuMjUlDQogICAgICAgIE51bWJlciBvZiByZWFkcyBtYXBwZWQgdG8gdG9vIG1hbnkgbG9jaSB8CTUxOTE3DQogICAgICAgICAgICAgJSBvZiByZWFkcyBtYXBwZWQgdG8gdG9vIG1hbnkgbG9jaSB8CTAuMTMlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5NQVBQRUQgUkVBRFM6DQogICAgICAgJSBvZiByZWFkcyB1bm1hcHBlZDogdG9vIG1hbnkgbWlzbWF0Y2hlcyB8CTAuMDAlDQogICAgICAgICAgICAgICAgICUgb2YgcmVhZHMgdW5tYXBwZWQ6IHRvbyBzaG9ydCB8CTEwLjM4JQ0KICAgICAgICAgICAgICAgICAgICAgJSBvZiByZWFkcyB1bm1hcHBlZDogb3RoZXIgfAkwLjEzJQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENISU1FUklDIFJFQURTOg0KICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2YgY2hpbWVyaWMgcmVhZHMgfAkwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBvZiBjaGltZXJpYyByZWFkcyB8CTAuMDAlDQoNCmBgYA0KDQoNCg0KYGBgDQp+L3Jlc3VsdHMvcm5hc2VxL1JuL3N0YXJfcmF0L3RyYW5zY3JpcHRvbWVPdXQkIFNUQVIgLS1ydW5UaHJlYWROIDEyIC0tZ2Vub21lRGlyIH4vZ2Vub21lQW5kSW5kaWNlcy9Sbi9zdGFyLyAtLXNqZGJHVEZmaWxlIH4vZ2Vub21lQW5kSW5kaWNlcy9Sbi9ybjYucmVmR2VuZS5ndGYgLS1zamRiT3ZlcmhhbmcgMTAwIC0tcmVhZEZpbGVzSW4gfi9kYXRhL3JuYXNlcS9Sbi9QTG9TLU9uZS04LWU1OTU4Mi9mMzQ0X3BmY19uaWNvdGluZS9TUlI4NjkwMzJfMS5mYXN0cS5neiB+L2RhdGEvcm5hc2VxL1JuL1BMb1MtT25lLTgtZTU5NTgyL2YzNDRfcGZjX25pY290aW5lL1NSUjg2OTAzMl8yLmZhc3RxLmd6IC0tcmVhZEZpbGVzQ29tbWFuZCB6Y2F0IC0tcXVhbnRNb2RlIFRyYW5zY3JpcHRvbWVTQU0gLS1vdXRGaWxlTmFtZVByZWZpeCA0YWxpZ24vDQoNCmBgYA0KDQpBcHIgMTEgMTY6MjE6MjYgLi4uLi4gc3RhcnRlZCBTVEFSIHJ1bg0KDQpBcHIgMTEgMTY6MjE6MjYgLi4uLi4gbG9hZGluZyBnZW5vbWUNCg0KQXByIDExIDE2OjIzOjA5IC4uLi4uIHByb2Nlc3NpbmcgYW5ub3RhdGlvbnMgR1RGDQoNCkFwciAxMSAxNjoyMzoxMCAuLi4uLiBpbnNlcnRpbmcganVuY3Rpb25zIGludG8gdGhlIGdlbm9tZSBpbmRpY2VzDQoNCkFwciAxMSAxNjoyNToyNCAuLi4uLiBzdGFydGVkIG1hcHBpbmcNCg0KQXByIDExIDE2OjI4OjU4IC4uLi4uIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseQ0KDQoNCg0KDQojIyMjICQgbHMgLWwgNGFsaWduLw0KDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDEwOTMzMTE2Mzk1IEFwciAxMSAxNjoyOCBBbGlnbmVkLm91dC5zYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgIDE2MTc3NzUzMTEgQXByIDExIDE2OjI4IEFsaWduZWQudG9UcmFuc2NyaXB0b21lLm91dC5iYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgIDE4NjMgQXByIDExIDE2OjI4IExvZy5maW5hbC5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAyOTEwMDYgQXByIDExIDE2OjI4IExvZy5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgICA2MDAgQXByIDExIDE2OjI4IExvZy5wcm9ncmVzcy5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgIDY3NzgwNzUgQXByIDExIDE2OjI4IFNKLm91dC50YWINCg0KZHJ3eC0tLS0tLSAyIHVidW50dSB1YnVudHUgICAgICAgIDQwOTYgQXByIDExIDE2OjIzIF9TVEFSZ2Vub21lDQoNCg0KDQojIyMjICQgY2F0IDRhbGlnbi9Mb2cuZmluYWwub3V0IA0KDQoNCmBgYA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRlZCBqb2Igb24gfAlBcHIgMTEgMTY6MjE6MjYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRlZCBtYXBwaW5nIG9uIHwJQXByIDExIDE2OjI1OjI0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaW5pc2hlZCBvbiB8CUFwciAxMSAxNjoyODo1OA0KICAgICAgIE1hcHBpbmcgc3BlZWQsIE1pbGxpb24gb2YgcmVhZHMgcGVyIGhvdXIgfAk0ODYuNjYNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2YgaW5wdXQgcmVhZHMgfAkyODkyOTQ4NQ0KICAgICAgICAgICAgICAgICAgICAgIEF2ZXJhZ2UgaW5wdXQgcmVhZCBsZW5ndGggfAkxMDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOSVFVRSBSRUFEUzoNCiAgICAgICAgICAgICAgICAgICBVbmlxdWVseSBtYXBwZWQgcmVhZHMgbnVtYmVyIHwJMjM4ODQ4NTANCiAgICAgICAgICAgICAgICAgICAgICAgIFVuaXF1ZWx5IG1hcHBlZCByZWFkcyAlIHwJODIuNTYlDQogICAgICAgICAgICAgICAgICAgICAgICAgIEF2ZXJhZ2UgbWFwcGVkIGxlbmd0aCB8CTk5LjM3DQogICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBUb3RhbCB8CTUzMzc1OTENCiAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBBbm5vdGF0ZWQgKHNqZGIpIHwJNDg0MzY5OA0KICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogR1QvQUcgfAk1MjM3Mjg0DQogICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBHQy9BRyB8CTQyMzYwDQogICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBBVC9BQyB8CTUxMjYNCiAgICAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBOb24tY2Fub25pY2FsIHwJNTI4MjENCiAgICAgICAgICAgICAgICAgICAgICBNaXNtYXRjaCByYXRlIHBlciBiYXNlLCAlIHwJMC4zOCUNCiAgICAgICAgICAgICAgICAgICAgICAgICBEZWxldGlvbiByYXRlIHBlciBiYXNlIHwJMC4wMSUNCiAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0aW9uIGF2ZXJhZ2UgbGVuZ3RoIHwJMS42MQ0KICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJ0aW9uIHJhdGUgcGVyIGJhc2UgfAkwLjAxJQ0KICAgICAgICAgICAgICAgICAgICAgICBJbnNlcnRpb24gYXZlcmFnZSBsZW5ndGggfAkxLjM1DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1VTFRJLU1BUFBJTkcgUkVBRFM6DQogICAgICAgIE51bWJlciBvZiByZWFkcyBtYXBwZWQgdG8gbXVsdGlwbGUgbG9jaSB8CTE3NDUyMTANCiAgICAgICAgICAgICAlIG9mIHJlYWRzIG1hcHBlZCB0byBtdWx0aXBsZSBsb2NpIHwJNi4wMyUNCiAgICAgICAgTnVtYmVyIG9mIHJlYWRzIG1hcHBlZCB0byB0b28gbWFueSBsb2NpIHwJNDE3NTkNCiAgICAgICAgICAgICAlIG9mIHJlYWRzIG1hcHBlZCB0byB0b28gbWFueSBsb2NpIHwJMC4xNCUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTk1BUFBFRCBSRUFEUzoNCiAgICAgICAlIG9mIHJlYWRzIHVubWFwcGVkOiB0b28gbWFueSBtaXNtYXRjaGVzIHwJMC4wMCUNCiAgICAgICAgICAgICAgICAgJSBvZiByZWFkcyB1bm1hcHBlZDogdG9vIHNob3J0IHwJMTEuMTMlDQogICAgICAgICAgICAgICAgICAgICAlIG9mIHJlYWRzIHVubWFwcGVkOiBvdGhlciB8CTAuMTQlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hJTUVSSUMgUkVBRFM6DQogICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBjaGltZXJpYyByZWFkcyB8CTANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIG9mIGNoaW1lcmljIHJlYWRzIHwJMC4wMCUNCg0KYGBgDQoNCg0KDQoNCmBgYA0Kfi9yZXN1bHRzL3JuYXNlcS9Sbi9zdGFyX3JhdC90cmFuc2NyaXB0b21lT3V0JCBTVEFSIC0tcnVuVGhyZWFkTiAxMiAtLWdlbm9tZURpciB+L2dlbm9tZUFuZEluZGljZXMvUm4vc3Rhci8gLS1zamRiR1RGZmlsZSB+L2dlbm9tZUFuZEluZGljZXMvUm4vcm42LnJlZkdlbmUuZ3RmIC0tc2pkYk92ZXJoYW5nIDEwMCAtLXJlYWRGaWxlc0luIH4vZGF0YS9ybmFzZXEvUm4vUExvUy1PbmUtOC1lNTk1ODIvZjM0NF9wZmNfbmljb3RpbmUvU1JSODY5MDMzXzEuZmFzdHEuZ3ogfi9kYXRhL3JuYXNlcS9Sbi9QTG9TLU9uZS04LWU1OTU4Mi9mMzQ0X3BmY19uaWNvdGluZS9TUlI4NjkwMzNfMi5mYXN0cS5neiAtLXJlYWRGaWxlc0NvbW1hbmQgemNhdCAtLXF1YW50TW9kZSBUcmFuc2NyaXB0b21lU0FNIC0tb3V0RmlsZU5hbWVQcmVmaXggNWFsaWduLw0KDQpgYGANCg0KQXByIDExIDE2OjMyOjQ0IC4uLi4uIHN0YXJ0ZWQgU1RBUiBydW4NCg0KQXByIDExIDE2OjMyOjQ0IC4uLi4uIGxvYWRpbmcgZ2Vub21lDQoNCkFwciAxMSAxNjozNDoyNiAuLi4uLiBwcm9jZXNzaW5nIGFubm90YXRpb25zIEdURg0KDQpBcHIgMTEgMTY6MzQ6MjggLi4uLi4gaW5zZXJ0aW5nIGp1bmN0aW9ucyBpbnRvIHRoZSBnZW5vbWUgaW5kaWNlcw0KDQpBcHIgMTEgMTY6MzY6NDAgLi4uLi4gc3RhcnRlZCBtYXBwaW5nDQoNCkFwciAxMSAxNjo0MDoyNCAuLi4uLiBmaW5pc2hlZCBzdWNjZXNzZnVsbHkNCg0KDQojIyMjICQgbHMgLWwgNWFsaWduLw0KDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDExMTUyODcxNzE2IEFwciAxMSAxNjo0MCBBbGlnbmVkLm91dC5zYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgIDE2NTAzMTUwOTggQXByIDExIDE2OjQwIEFsaWduZWQudG9UcmFuc2NyaXB0b21lLm91dC5iYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgIDE4NjMgQXByIDExIDE2OjQwIExvZy5maW5hbC5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAyOTEwMDYgQXByIDExIDE2OjQwIExvZy5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgICA2MDAgQXByIDExIDE2OjQwIExvZy5wcm9ncmVzcy5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgIDY5NDMwMjggQXByIDExIDE2OjQwIFNKLm91dC50YWINCg0KZHJ3eC0tLS0tLSAyIHVidW50dSB1YnVudHUgICAgICAgIDQwOTYgQXByIDExIDE2OjM0IF9TVEFSZ2Vub21lDQoNCg0KDQoNCg0KIyMjIyAkIGNhdCA1YWxpZ24vTG9nLmZpbmFsLm91dCANCg0KYGBgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydGVkIGpvYiBvbiB8CUFwciAxMSAxNjozMjo0NA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydGVkIG1hcHBpbmcgb24gfAlBcHIgMTEgMTY6MzY6NDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbmlzaGVkIG9uIHwJQXByIDExIDE2OjQwOjI0DQogICAgICAgTWFwcGluZyBzcGVlZCwgTWlsbGlvbiBvZiByZWFkcyBwZXIgaG91ciB8CTQ4My4wNw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBpbnB1dCByZWFkcyB8CTMwMDU3NDU4DQogICAgICAgICAgICAgICAgICAgICAgQXZlcmFnZSBpbnB1dCByZWFkIGxlbmd0aCB8CTEwMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5JUVVFIFJFQURTOg0KICAgICAgICAgICAgICAgICAgIFVuaXF1ZWx5IG1hcHBlZCByZWFkcyBudW1iZXIgfAkyNDI0MjAyNg0KICAgICAgICAgICAgICAgICAgICAgICAgVW5pcXVlbHkgbWFwcGVkIHJlYWRzICUgfAk4MC42NSUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgQXZlcmFnZSBtYXBwZWQgbGVuZ3RoIHwJOTkuMzkNCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IFRvdGFsIHwJNTQ2NDMxMA0KICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IEFubm90YXRlZCAoc2pkYikgfAk0OTY5ODQ1DQogICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBHVC9BRyB8CTUzNjUwMjMNCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IEdDL0FHIHwJNDI0ODENCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IEFUL0FDIHwJNTE3OA0KICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IE5vbi1jYW5vbmljYWwgfAk1MTYyOA0KICAgICAgICAgICAgICAgICAgICAgIE1pc21hdGNoIHJhdGUgcGVyIGJhc2UsICUgfAkwLjM3JQ0KICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0aW9uIHJhdGUgcGVyIGJhc2UgfAkwLjAxJQ0KICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRpb24gYXZlcmFnZSBsZW5ndGggfAkxLjYwDQogICAgICAgICAgICAgICAgICAgICAgICBJbnNlcnRpb24gcmF0ZSBwZXIgYmFzZSB8CTAuMDAlDQogICAgICAgICAgICAgICAgICAgICAgIEluc2VydGlvbiBhdmVyYWdlIGxlbmd0aCB8CTEuMzYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVVMVEktTUFQUElORyBSRUFEUzoNCiAgICAgICAgTnVtYmVyIG9mIHJlYWRzIG1hcHBlZCB0byBtdWx0aXBsZSBsb2NpIHwJMTgxNjI0NQ0KICAgICAgICAgICAgICUgb2YgcmVhZHMgbWFwcGVkIHRvIG11bHRpcGxlIGxvY2kgfAk2LjA0JQ0KICAgICAgICBOdW1iZXIgb2YgcmVhZHMgbWFwcGVkIHRvIHRvbyBtYW55IGxvY2kgfAk0NDg4Ng0KICAgICAgICAgICAgICUgb2YgcmVhZHMgbWFwcGVkIHRvIHRvbyBtYW55IGxvY2kgfAkwLjE1JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOTUFQUEVEIFJFQURTOg0KICAgICAgICUgb2YgcmVhZHMgdW5tYXBwZWQ6IHRvbyBtYW55IG1pc21hdGNoZXMgfAkwLjAwJQ0KICAgICAgICAgICAgICAgICAlIG9mIHJlYWRzIHVubWFwcGVkOiB0b28gc2hvcnQgfAkxMy4wMyUNCiAgICAgICAgICAgICAgICAgICAgICUgb2YgcmVhZHMgdW5tYXBwZWQ6IG90aGVyIHwJMC4xMyUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSElNRVJJQyBSRUFEUzoNCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGNoaW1lcmljIHJlYWRzIHwJMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgb2YgY2hpbWVyaWMgcmVhZHMgfAkwLjAwJQ0KDQoNCmBgYA0KDQoNCg0KDQoNCmBgYA0Kfi9yZXN1bHRzL3JuYXNlcS9Sbi9zdGFyX3JhdC90cmFuc2NyaXB0b21lT3V0JCBTVEFSIC0tcnVuVGhyZWFkTiAxMiAtLWdlbm9tZURpciB+L2dlbm9tZUFuZEluZGljZXMvUm4vc3Rhci8gLS1zamRiR1RGZmlsZSB+L2dlbm9tZUFuZEluZGljZXMvUm4vcm42LnJlZkdlbmUuZ3RmIC0tc2pkYk92ZXJoYW5nIDEwMCAtLXJlYWRGaWxlc0luIH4vZGF0YS9ybmFzZXEvUm4vUExvUy1PbmUtOC1lNTk1ODIvZjM0NF9wZmNfbmljb3RpbmUvU1JSODY5MDM0XzEuZmFzdHEuZ3ogfi9kYXRhL3JuYXNlcS9Sbi9QTG9TLU9uZS04LWU1OTU4Mi9mMzQ0X3BmY19uaWNvdGluZS9TUlI4NjkwMzRfMi5mYXN0cS5neiAtLXJlYWRGaWxlc0NvbW1hbmQgemNhdCAtLXF1YW50TW9kZSBUcmFuc2NyaXB0b21lU0FNIC0tb3V0RmlsZU5hbWVQcmVmaXggNmFsaWduLw0KDQpgYGANCg0KDQpBcHIgMTEgMTY6NDE6NDYgLi4uLi4gc3RhcnRlZCBTVEFSIHJ1bg0KDQpBcHIgMTEgMTY6NDE6NDYgLi4uLi4gbG9hZGluZyBnZW5vbWUNCg0KQXByIDExIDE2OjQyOjU0IC4uLi4uIHByb2Nlc3NpbmcgYW5ub3RhdGlvbnMgR1RGDQoNCkFwciAxMSAxNjo0Mjo1NSAuLi4uLiBpbnNlcnRpbmcganVuY3Rpb25zIGludG8gdGhlIGdlbm9tZSBpbmRpY2VzDQoNCkFwciAxMSAxNjo0NTowOCAuLi4uLiBzdGFydGVkIG1hcHBpbmcNCg0KQXByIDExIDE2OjQ4OjQ5IC4uLi4uIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseQ0KDQoNCg0KDQoNCiMjIyMgJCBscyAtbCA2YWxpZ24vDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDExNDUxOTE1ODI1IEFwciAxMSAxNjo0OCBBbGlnbmVkLm91dC5zYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgIDE3MTkxMzU0MjAgQXByIDExIDE2OjQ4IEFsaWduZWQudG9UcmFuc2NyaXB0b21lLm91dC5iYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgIDE4NjIgQXByIDExIDE2OjQ4IExvZy5maW5hbC5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAyOTEwMDYgQXByIDExIDE2OjQ4IExvZy5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgICA2MDAgQXByIDExIDE2OjQ4IExvZy5wcm9ncmVzcy5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgIDY4NDA0MzcgQXByIDExIDE2OjQ4IFNKLm91dC50YWINCg0KZHJ3eC0tLS0tLSAyIHVidW50dSB1YnVudHUgICAgICAgIDQwOTYgQXByIDExIDE2OjQyIF9TVEFSZ2Vub21lDQoNCg0KDQoNCiMjIyMgJCBjYXQgNmFsaWduL0xvZy5maW5hbC5vdXQgDQoNCg0KDQpgYGANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0ZWQgam9iIG9uIHwJQXByIDExIDE2OjQxOjQ2DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0ZWQgbWFwcGluZyBvbiB8CUFwciAxMSAxNjo0NTowOA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmluaXNoZWQgb24gfAlBcHIgMTEgMTY6NDg6NDkNCiAgICAgICBNYXBwaW5nIHNwZWVkLCBNaWxsaW9uIG9mIHJlYWRzIHBlciBob3VyIHwJNDg1LjY3DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGlucHV0IHJlYWRzIHwJMjk4MTQ2ODcNCiAgICAgICAgICAgICAgICAgICAgICBBdmVyYWdlIGlucHV0IHJlYWQgbGVuZ3RoIHwJMTAwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTklRVUUgUkVBRFM6DQogICAgICAgICAgICAgICAgICAgVW5pcXVlbHkgbWFwcGVkIHJlYWRzIG51bWJlciB8CTI1MDI5NTgyDQogICAgICAgICAgICAgICAgICAgICAgICBVbmlxdWVseSBtYXBwZWQgcmVhZHMgJSB8CTgzLjk1JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICBBdmVyYWdlIG1hcHBlZCBsZW5ndGggfAk5OS40MA0KICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogVG90YWwgfAk1NjY0ODAxDQogICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogQW5ub3RhdGVkIChzamRiKSB8CTUxNTIyMTcNCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IEdUL0FHIHwJNTU2MDI0Ng0KICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogR0MvQUcgfAk0NDU4OQ0KICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogQVQvQUMgfAk1NTA0DQogICAgICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogTm9uLWNhbm9uaWNhbCB8CTU0NDYyDQogICAgICAgICAgICAgICAgICAgICAgTWlzbWF0Y2ggcmF0ZSBwZXIgYmFzZSwgJSB8CTAuMzglDQogICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRpb24gcmF0ZSBwZXIgYmFzZSB8CTAuMDElDQogICAgICAgICAgICAgICAgICAgICAgICBEZWxldGlvbiBhdmVyYWdlIGxlbmd0aCB8CTEuNjENCiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VydGlvbiByYXRlIHBlciBiYXNlIHwJMC4wMCUNCiAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJ0aW9uIGF2ZXJhZ2UgbGVuZ3RoIHwJMS4zNg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVUxUSS1NQVBQSU5HIFJFQURTOg0KICAgICAgICBOdW1iZXIgb2YgcmVhZHMgbWFwcGVkIHRvIG11bHRpcGxlIGxvY2kgfAkxODM0NzUzDQogICAgICAgICAgICAgJSBvZiByZWFkcyBtYXBwZWQgdG8gbXVsdGlwbGUgbG9jaSB8CTYuMTUlDQogICAgICAgIE51bWJlciBvZiByZWFkcyBtYXBwZWQgdG8gdG9vIG1hbnkgbG9jaSB8CTQwOTI0DQogICAgICAgICAgICAgJSBvZiByZWFkcyBtYXBwZWQgdG8gdG9vIG1hbnkgbG9jaSB8CTAuMTQlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5NQVBQRUQgUkVBRFM6DQogICAgICAgJSBvZiByZWFkcyB1bm1hcHBlZDogdG9vIG1hbnkgbWlzbWF0Y2hlcyB8CTAuMDAlDQogICAgICAgICAgICAgICAgICUgb2YgcmVhZHMgdW5tYXBwZWQ6IHRvbyBzaG9ydCB8CTkuNjMlDQogICAgICAgICAgICAgICAgICAgICAlIG9mIHJlYWRzIHVubWFwcGVkOiBvdGhlciB8CTAuMTMlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hJTUVSSUMgUkVBRFM6DQogICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBjaGltZXJpYyByZWFkcyB8CTANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIG9mIGNoaW1lcmljIHJlYWRzIHwJMC4wMCUNCg0KYGBgDQoNCg0KDQoNCg0KDQojIyA2LiBSU0VNIGFuYWx5c2lzDQoNCg0KIyMjIERvd25sb2FkIHRoZSBkYXRhDQoNCkJBTSBmaWxlcyB3ZXJlIGltcG9ydGVkIHRvIENlbnRPUyBhcyBkaXJlY3RvcmllcyAoMXMsIDJzLCAzcywgNHMsIDVzIGFuZCA2cykgZm9yIFJTRU0gYW5hbHlzaXMuIFRoZSBnZW5vbWUgYW5kIEdURiBmaWxlcyBhcmUgd2VyZSBhbHNvIGltcG9ydGVkICgmIGFsc28gcmVuYW1lZCkuDQoNCg0KIyMjIyAgJCBscyAtbA0KDQoNCmRyd3hyLXhyLXguIDIgYmRhc2ggYmRhc2ggICAgICAgICA0NSBBcHIgMTEgMjA6MTcgMXMNCg0KZHJ3eHIteHIteC4gMiBiZGFzaCBiZGFzaCAgICAgICAgIDQ1IEFwciAxMSAxODoyMSAycw0KDQpkcnd4ci14ci14LiAyIGJkYXNoIGJkYXNoICAgICAgICAgNDUgQXByIDExIDIwOjIwIDNzDQoNCmRyd3hyLXhyLXguIDIgYmRhc2ggYmRhc2ggICAgICAgICA0NSBBcHIgMTEgMjA6MjEgNHMNCg0KZHJ3eHIteHIteC4gMiBiZGFzaCBiZGFzaCAgICAgICAgIDQ1IEFwciAxMSAyMDoyNyA1cw0KDQpkcnd4ci14ci14LiAyIGJkYXNoIGJkYXNoICAgICAgICAgNDUgQXByIDExIDIwOjI3IDZzDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggMjkyNzYwNzMzMyBBcHIgIDkgMTU6MjYgcm42LmZhDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgICA0MDY1NCBBcHIgIDkgMTU6MjYgcm42LmZhLmZhaQ0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgNjE4OTEzNDEgQXByICA5IDE1OjI3IHJuNi5yZWZHZW5lLmd0Zg0KDQoNCg0KIyMjIFByZXBhcmUgUlNFTSByZWZlcmVuY2UgKHdpbGwgdXNlIGJvdGggdGhlIGZhIGFuZCBndGYgZmlsZSkNCg0KDQojIyMjIG1rZGlyIHJzZW1fcmVmDQoNCiMjIyMgY2QgcnNlbV9yZWYNCg0KIyMjIyByc2VtX3JlZiQgcnNlbS1wcmVwYXJlLXJlZmVyZW5jZSAtLWd0ZiBybjYucmVmR2VuZS5ndGYgcm42LmZhIC4vcnNlbVJlZg0KDQoNCmBgYA0KDQpyc2VtLWV4dHJhY3QtcmVmZXJlbmNlLXRyYW5zY3JpcHRzIC4vcnNlbVJlZiAwIHJuNi5yZWZHZW5lLmd0ZiBOb25lIDAgcm42LmZhDQoNClBhcnNlZCAyMDAwMDAgbGluZXMNCg0KUGFyc2luZyBndGYgRmlsZSBpcyBkb25lIQ0KDQpybjYuZmEgaXMgcHJvY2Vzc2VkIQ0KDQoxODkzOSB0cmFuc2NyaXB0cyBhcmUgZXh0cmFjdGVkIGFuZCAwIHRyYW5zY3JpcHRzIGFyZSBvbWl0dGVkLg0KDQpFeHRyYWN0aW5nIHNlcXVlbmNlcyBpcyBkb25lIQ0KDQpHcm91cCBGaWxlIGlzIGdlbmVyYXRlZCENCg0KVHJhbnNjcmlwdCBJbmZvcm1hdGlvbiBGaWxlIGlzIGdlbmVyYXRlZCENCg0KQ2hyb21vc29tZSBMaXN0IEZpbGUgaXMgZ2VuZXJhdGVkIQ0KDQpFeHRyYWN0ZWQgU2VxdWVuY2VzIEZpbGUgaXMgZ2VuZXJhdGVkIQ0KDQpyc2VtLXByZXJlZiAuL3JzZW1SZWYudHJhbnNjcmlwdHMuZmEgMSAuL3JzZW1SZWYNCg0KUmVmcy5tYWtlUmVmcyBmaW5pc2hlZCENCg0KUmVmcy5zYXZlUmVmcyBmaW5pc2hlZCENCg0KLi9yc2VtUmVmLmlkeC5mYSBpcyBnZW5lcmF0ZWQhDQoNCi4vcnNlbVJlZi5uMmcuaWR4LmZhIGlzIGdlbmVyYXRlZCENCg0KYGBgDQoNCg0KIyMjIyBzdGFyLXRyYW5zY3JpcHRvbWVvdXQkIGxzIC1sIHJzZW1fcmVmLw0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgICAxMjkzIEFwciAxMSAyMTowNiByc2VtUmVmLmNocmxpc3QNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICA5MzcxOCBBcHIgMTEgMjE6MDYgcnNlbVJlZi5ncnANCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCA0MzAwNzI4OSBBcHIgMTEgMjE6MDYgcnNlbVJlZi5pZHguZmENCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCA0MzAwNzI4OSBBcHIgMTEgMjE6MDYgcnNlbVJlZi5uMmcuaWR4LmZhDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggNDU4NTg0MTIgQXByIDExIDIxOjA2IHJzZW1SZWYuc2VxDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggIDYwNDExMDggQXByIDExIDIxOjA2IHJzZW1SZWYudGkNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCA0MzAwNzI4OSBBcHIgMTEgMjE6MDYgcnNlbVJlZi50cmFuc2NyaXB0cy5mYQ0KDQoNCg0KIyMjIFJTRU0tY2FsY3VsYXRlLWV4cHJlc3Npb24NCg0KDQojIyMjIHN0YXItdHJhbnNjcmlwdG9tZW91dCQgcnNlbS1jYWxjdWxhdGUtZXhwcmVzc2lvbiAtLWJhbSAtLW5vLWJhbS1vdXRwdXQgLXAgMTIgLS1wYWlyZWQtZW5kIC0tZm9yd2FyZC1wcm9iIDAgMXMvQWxpZ25lZC50b1RyYW5zY3JpcHRvbWUub3V0LmJhbSByc2VtX3JlZi9yc2VtUmVmIDFvdXQvID4mIHJzZW0xLmxvZw0KDQoNCiMjIyMgUmVwZWF0IGl0IGZvciB0aGUgcmVzdCBvZiB0aGUgYmFtIGZpbGVzDQoNCg0KDQoNCg0KIyMjIyAgIHN0YXItdHJhbnNjcmlwdG9tZW91dCQgbHMgLWwNCg0KZHJ3eHJ3eHIteC4gMyBiZGFzaCBiZGFzaCAgICAgICAgIDY2IEFwciAxMSAyMjo0MSAxb3V0DQoNCmRyd3hyd3hyLXguIDMgYmRhc2ggYmRhc2ggICAgICAgICA2NiBBcHIgMTEgMjM6NTYgMm91dA0KDQpkcnd4cnd4ci14LiAzIGJkYXNoIGJkYXNoICAgICAgICAgNjYgQXByIDEyIDAzOjQ4IDNvdXQNCg0KZHJ3eHJ3eHIteC4gMyBiZGFzaCBiZGFzaCAgICAgICAgIDY2IEFwciAxMiAwMzoxMyA0b3V0DQoNCmRyd3hyd3hyLXguIDMgYmRhc2ggYmRhc2ggICAgICAgICA2NiBBcHIgMTIgMDI6NDggNW91dA0KDQpkcnd4cnd4ci14LiAzIGJkYXNoIGJkYXNoICAgICAgICAgNjYgQXByIDEyIDAxOjU0IDZvdXQNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgMzA5MTQxIEFwciAxMSAyMjo0MSByc2VtMS5sb2cNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgMzUzODU1IEFwciAxMSAyMzo1NiByc2VtMi5sb2cNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgMjU1NTg4IEFwciAxMiAwMzo0OCByc2VtMy5sb2cNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgMzI2NjYyIEFwciAxMiAwMzoxMyByc2VtNC5sb2cNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgMzY2NDcyIEFwciAxMiAwMjo0OCByc2VtNS5sb2cNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgMjk0NDAyIEFwciAxMiAwMTo1NCByc2VtNi5sb2cNCg0KZHJ3eHJ3eHIteC4gMiBiZGFzaCBiZGFzaCAgICAgICAgMTYzIEFwciAxMSAyMToyMCByc2VtX3JlZg0KDQoNCg0KDQojIyA3LiBlZGdlUiAoRW1waXJpY2FsIEFuYWx5c2lzIG9mIERpZ2l0YWwgR2VuZSBFeHByZXNzaW9uKSBhbmFseXNpcyBvZiBpc29mb3Jtcw0KDQoNCiMjIyBHZW5lcmF0ZSBhIG1hdHJpeCBmaWxlIG9mIHRoZSBpc29mb3JtcyBmb3IgYW5hbHlzaXMgdXNpbmcgZWRnZVIgbWV0aG9kDQoNCg0KYGBgDQpzdGFyLXRyYW5zY3JpcHRvbWVvdXQkIGFidW5kYW5jZV9lc3RpbWF0ZXNfdG9fbWF0cml4LnBsIA0KDQotLWVzdF9tZXRob2QgUlNFTSANCg0KDQoxb3V0Ly5pc29mb3Jtcy5yZXN1bHRzIA0KMm91dC8uaXNvZm9ybXMucmVzdWx0cyANCjNvdXQvLmlzb2Zvcm1zLnJlc3VsdHMgDQo0b3V0Ly5pc29mb3Jtcy5yZXN1bHRzIA0KNW91dC8uaXNvZm9ybXMucmVzdWx0cyANCjZvdXQvLmlzb2Zvcm1zLnJlc3VsdHMgDQoNCi0tZ2VuZV90cmFuc19tYXAgbm9uZSANCg0KLS1uYW1lX3NhbXBsZV9ieV9iYXNlZGlyIA0KDQotLW91dF9wcmVmaXggaXNvZm9ybXNfZ2VuZV90cmFuc19tYXBfbm9uZS9pc29mb3Jtcw0KDQpgYGANCg0KDQotcmVhZGluZyBmaWxlOiAxb3V0Ly5pc29mb3Jtcy5yZXN1bHRzDQoNCi1yZWFkaW5nIGZpbGU6IDJvdXQvLmlzb2Zvcm1zLnJlc3VsdHMNCg0KLXJlYWRpbmcgZmlsZTogM291dC8uaXNvZm9ybXMucmVzdWx0cw0KDQotcmVhZGluZyBmaWxlOiA0b3V0Ly5pc29mb3Jtcy5yZXN1bHRzDQoNCi1yZWFkaW5nIGZpbGU6IDVvdXQvLmlzb2Zvcm1zLnJlc3VsdHMNCg0KLXJlYWRpbmcgZmlsZTogNm91dC8uaXNvZm9ybXMucmVzdWx0cw0KDQoNCiogT3V0cHV0dGluZyBjb21iaW5lZCBtYXRyaXguDQoNCi9ob21lL2JkYXNoL21pbmljb25kYTIvb3B0L3RyaW5pdHktMi42LjYvdXRpbC9zdXBwb3J0X3NjcmlwdHMvcnVuX1RNTV9zY2FsZV9tYXRyaXgucGwgDQoNCi0tbWF0cml4IGlzb2Zvcm1zX2dlbmVfdHJhbnNfbWFwX25vbmUvaXNvZm9ybXMuaXNvZm9ybS5UUE0ubm90X2Nyb3NzX25vcm0gPg0KDQppc29mb3Jtc19nZW5lX3RyYW5zX21hcF9ub25lL2lzb2Zvcm1zLmlzb2Zvcm0uVE1NLkVYUFIubWF0cml4DQoNCg0KDQpDTUQ6IFIgLS1uby1zYXZlIC0tbm8tcmVzdG9yZSAtLW5vLXNpdGUtZmlsZSAtLW5vLWluaXQtZmlsZSAtcSA8DQoNCmlzb2Zvcm1zX2dlbmVfdHJhbnNfbWFwX25vbmUvaXNvZm9ybXMuaXNvZm9ybS5UUE0ubm90X2Nyb3NzX25vcm0ucnVuVE1NLlIgMT4mMiANCg0KDQpgYGANCj4gbGlicmFyeShlZGdlUikNCg0KTG9hZGluZyByZXF1aXJlZCBwYWNrYWdlOiBsaW1tYQ0KDQo+IA0KDQo+IHJuYXNlcU1hdHJpeCA9IHJlYWQudGFibGUoImlzb2Zvcm1zX2dlbmVfdHJhbnNfbWFwX25vbmUvaXNvZm9ybXMuaXNvZm9ybS5UUE0ubm90X2Nyb3NzX25vcm0iLCBoZWFkZXI9VCwgcm93Lm5hbWVzPTEsIGNvbT0nJywgY2hlY2submFtZXM9RikNCg0KPiBybmFzZXFNYXRyaXggPSBhcy5tYXRyaXgocm5hc2VxTWF0cml4KQ0KDQo+IHJuYXNlcU1hdHJpeCA9IHJvdW5kKHJuYXNlcU1hdHJpeCkNCg0KPiBleHBfc3R1ZHkgPSBER0VMaXN0KGNvdW50cz1ybmFzZXFNYXRyaXgsIGdyb3VwPWZhY3Rvcihjb2xuYW1lcyhybmFzZXFNYXRyaXgpKSkNCg0KPiBleHBfc3R1ZHkgPSBjYWxjTm9ybUZhY3RvcnMoZXhwX3N0dWR5KQ0KDQo+IGV4cF9zdHVkeSRzYW1wbGVzJGVmZi5saWIuc2l6ZSA9IGV4cF9zdHVkeSRzYW1wbGVzJGxpYi5zaXplICogZXhwX3N0dWR5JHNhbXBsZXMkbm9ybS5mYWN0b3JzDQoNCj4gd3JpdGUudGFibGUoZXhwX3N0dWR5JHNhbXBsZXMsIGZpbGU9Imlzb2Zvcm1zX2dlbmVfdHJhbnNfbWFwX25vbmUvaXNvZm9ybXMuaXNvZm9ybS5UUE0ubm90X2Nyb3NzX25vcm0uVE1NX2luZm8udHh0IiwgcXVvdGU9Riwgc2VwPSJcdCIsIHJvdy5uYW1lcz1GKQ0KDQpgYGANCg0KDQojIyMjIHN0YXItdHJhbnNjcmlwdG9tZW91dCQgbHMgLWwgaXNvZm9ybXNfZ2VuZV90cmFuc19tYXBfbm9uZS8NCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCA5MzQ5MTcgQXByIDEyIDEyOjEyIGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoIDk4MTg1NCBBcHIgMTIgMTI6MTIgaXNvZm9ybXMuaXNvZm9ybS5UTU0uRVhQUi5tYXRyaXgNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCA3NzUyODggQXByIDEyIDEyOjEyIGlzb2Zvcm1zLmlzb2Zvcm0uVFBNLm5vdF9jcm9zc19ub3JtDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgNTkwIEFwciAxMiAxMjoxMiBpc29mb3Jtcy5pc29mb3JtLlRQTS5ub3RfY3Jvc3Nfbm9ybS5ydW5UTU0uUg0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgIDMyMCBBcHIgMTIgMTI6MTIgaXNvZm9ybXMuaXNvZm9ybS5UUE0ubm90X2Nyb3NzX25vcm0uVE1NX2luZm8udHh0DQoNCg0KDQoNCg0KDQojIyMgUnVuIGRpZmZlcmVudGlhbCBhbmFseXNpcyAoREUpIGFuYWx5c2lzIHVzaW5nIG1ldGhvZCBlZGdlUjogUHJvZHVjZXMgTUEgcGxvdCBhbmQgdm9sY2FubyBwbG90DQoNCk5vdGU6IEFuYWx5c2lzIHdpdGggYmlvbG9naWNhbCB0cmlwbGljYXRlcyB3aXRoIHR3byBjb25kaXRpb25zIChjb25kaXRpb24gQT1zYWxpbmUgdHJlYXRtZW50IGFuZCBjb25kaXRpb24gQj1uaWNvdGluZSB0cmVhdG1lbnQpDQoNCkEgZmlsZSB3aXRoIHRoZSBuYW1lICJzYW1wbGVzX2Rlc2NyaWJlZC50eHQiIHdpbGwgYmUgbmVlZGVkIGZvciB0aGUgYW5hbHlzaXMuIEl0cyBjb250ZW50cyBhcmUgYXMgZm9sbG93czoNCg0KYGBgDQokIGNhdCBzYW1wbGVzX2Rlc2NyaWJlZC50eHQgDQoNCmNvbmRpdGlvbkEgICAxb3V0DQpjb25kaXRpb25BICAgMm91dA0KY29uZGl0aW9uQSAgIDNvdXQNCg0KDQpjb25kaXRpb25CICAgNG91dA0KY29uZGl0aW9uQiAgIDVvdXQNCmNvbmRpdGlvbkIgICA2b3V0DQoNCmBgYA0KDQoNCmBgYA0Kc3Rhci10cmFuc2NyaXB0b21lb3V0XSQgcnVuX0RFX2FuYWx5c2lzLnBsIA0KDQotLW1hdHJpeCBpc29mb3Jtc19nZW5lX3RyYW5zX21hcF9ub25lL2lzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeCANCg0KLS1vdXRwdXQgaXNvZm9ybXNfREVfMy8gDQoNCi0tc2FtcGxlc19maWxlIHNhbXBsZXNfZGVzY3JpYmVkLnR4dCANCg0KLS1tZXRob2QgZWRnZVINCg0KYGBgDQoNCkdvdCA2IHNhbXBsZXMsIGFuZCBnb3Q6IDcgZGF0YSBmaWVsZHMuDQoNCkhlYWRlcjogMW91dAkyb3V0CTNvdXQJNG91dAk1b3V0CTZvdXQNCg0KTmV4dDogTk1fMDIxNjY2CTEzLjAwCTcuMDAJNi4wMAkxLjAwCTIuMDAJNC4wMA0KDQoNCg0KJFZBUjEgPSANCg0KICAgICAgICB7DQoNCiAgICAgICAgICAnMm91dCcgPT4gMiwNCiAgICAgICAgICANCiAgICAgICAgICAnMW91dCcgPT4gMSwNCiAgICAgICAgICANCiAgICAgICAgICAnNG91dCcgPT4gNCwNCiAgICAgICAgICANCiAgICAgICAgICAnNW91dCcgPT4gNSwNCiAgICAgICAgICANCiAgICAgICAgICAnM291dCcgPT4gMywNCiAgICAgICAgICANCiAgICAgICAgICAnNm91dCcgPT4gNg0KICAgICAgICAgIA0KICAgICAgICB9Ow0KICAgICAgICANCg0KJFZBUjEgPSANCg0KICAgICAgICB7DQogICAgICAgICAgDQogICAgICAgICAgJ2NvbmRpdGlvbkInID0+IFsNCiAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNG91dCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzVvdXQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc2b3V0Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgJ2NvbmRpdGlvbkEnID0+IFsNCiAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMW91dCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzJvdXQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICczb3V0Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBdDQogICAgICAgIH07DQogICAgICAgIA0KDQpDb250cmFzdHMgdG8gcGVyZm9ybSBhcmU6ICRWQVIxID0gDQoNCiAgICAgICAgWw0KDQogICAgICAgICAgWw0KICAgICAgICAgIA0KICAgICAgICAgICAgJ2NvbmRpdGlvbkEnLA0KICAgICAgICAgICAgDQogICAgICAgICAgICAnY29uZGl0aW9uQicNCiAgICAgICAgICAgIA0KICAgICAgICAgIF0NCiAgICAgICAgICANCiAgICAgICAgXTsNCiAgICAgICAgDQpDTUQ6IFIgLS1uby1zYXZlIC0tbm8tcmVzdG9yZSAtLW5vLXNpdGUtZmlsZSAtLW5vLWluaXQtZmlsZSAtcSA8IGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5jb25kaXRpb25BX3ZzX2NvbmRpdGlvbkIuY29uZGl0aW9uQS52cy5jb25kaXRpb25CLkVkZ2VSLlJzY3JpcHQNCg0KDQpgYGANCj4gbGlicmFyeShlZGdlUikNCg0KTG9hZGluZyByZXF1aXJlZCBwYWNrYWdlOiBsaW1tYQ0KDQo+IA0KPiBkYXRhID0gcmVhZC50YWJsZSgiL2hvbWUvYmRhc2gvRGVza3RvcC9zdGFyLXRyYW5zY3JpcHRvbWVvdXQvaXNvZm9ybXNfZ2VuZV90cmFuc19tYXBfbm9uZS9pc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXgiLCBoZWFkZXI9VCwgcm93Lm5hbWVzPTEsIGNvbT0nJykNCg0KPiBjb2xfb3JkZXJpbmcgPSBjKDEsMiwzLDQsNSw2KQ0KDQo+IHJuYXNlcU1hdHJpeCA9IGRhdGFbLGNvbF9vcmRlcmluZ10NCg0KPiBybmFzZXFNYXRyaXggPSByb3VuZChybmFzZXFNYXRyaXgpDQoNCj4gcm5hc2VxTWF0cml4ID0gcm5hc2VxTWF0cml4W3Jvd1N1bXMoY3BtKHJuYXNlcU1hdHJpeCkgPiAxKSA+PSAyLF0NCg0KPiBjb25kaXRpb25zID0gZmFjdG9yKGMocmVwKCJjb25kaXRpb25BIiwgMyksIHJlcCgiY29uZGl0aW9uQiIsIDMpKSkNCj4gDQo+IGV4cF9zdHVkeSA9IERHRUxpc3QoY291bnRzPXJuYXNlcU1hdHJpeCwgZ3JvdXA9Y29uZGl0aW9ucykNCg0KPiBleHBfc3R1ZHkgPSBjYWxjTm9ybUZhY3RvcnMoZXhwX3N0dWR5KQ0KDQo+IGV4cF9zdHVkeSA9IGVzdGltYXRlQ29tbW9uRGlzcChleHBfc3R1ZHkpDQoNCj4gZXhwX3N0dWR5ID0gZXN0aW1hdGVUYWd3aXNlRGlzcChleHBfc3R1ZHkpDQoNCj4gZXQgPSBleGFjdFRlc3QoZXhwX3N0dWR5LCBwYWlyPWMoImNvbmRpdGlvbkEiLCAiY29uZGl0aW9uQiIpKQ0KDQo+IHRUYWdzID0gdG9wVGFncyhldCxuPU5VTEwpDQoNCj4gcmVzdWx0X3RhYmxlID0gdFRhZ3MkdGFibGUNCg0KPiByZXN1bHRfdGFibGUgPSBkYXRhLmZyYW1lKHNhbXBsZUE9ImNvbmRpdGlvbkEiLCBzYW1wbGVCPSJjb25kaXRpb25CIiwgcmVzdWx0X3RhYmxlKQ0KDQo+IHJlc3VsdF90YWJsZSRsb2dGQyA9IC0xICogcmVzdWx0X3RhYmxlJGxvZ0ZDDQoNCj4gd3JpdGUudGFibGUocmVzdWx0X3RhYmxlLCBmaWxlPSdpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguY29uZGl0aW9uQV92c19jb25kaXRpb25CLmVkZ2VSLkRFX3Jlc3VsdHMnLCBzZXA9JwknLCBxdW90ZT1GLCByb3cubmFtZXM9VCkNCg0KPiB3cml0ZS50YWJsZShybmFzZXFNYXRyaXgsIGZpbGU9J2lzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5jb25kaXRpb25BX3ZzX2NvbmRpdGlvbkIuZWRnZVIuY291bnRfbWF0cml4Jywgc2VwPScJJywgcXVvdGU9Riwgcm93Lm5hbWVzPVQpDQoNCj4gc291cmNlKCIvaG9tZS9iZGFzaC9taW5pY29uZGEyL29wdC90cmluaXR5LTIuNi42L0FuYWx5c2lzL0RpZmZlcmVudGlhbEV4cHJlc3Npb24vUi9ybmFzZXFfcGxvdF9mdW5jcy5SIikNCg0KPiBwZGYoImlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5jb25kaXRpb25BX3ZzX2NvbmRpdGlvbkIuZWRnZVIuREVfcmVzdWx0cy5NQV9uX1ZvbGNhbm8ucGRmIikNCg0KPiBwbG90X01BX2FuZF9Wb2xjYW5vKHJvd25hbWVzKHJlc3VsdF90YWJsZSksIHJlc3VsdF90YWJsZSRsb2dDUE0sIHJlc3VsdF90YWJsZSRsb2dGQywgcmVzdWx0X3RhYmxlJEZEUikNCg0KPiBkZXYub2ZmKCkNCg0KbnVsbCBkZXZpY2UgDQogICAgICAgICAgMSANCiAgICAgICAgICANCj4gDQoNCmBgYA0KDQoNCiMjIyMgc3Rhci10cmFuc2NyaXB0b21lb3V0XSQgbHMgLWwgaXNvZm9ybXNfREVfMy8NCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAxNDI1IEFwciAxMyAwMjoyNiBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguY29uZGl0aW9uQV92c19jb25kaXRpb25CLmNvbmRpdGlvbkEudnMuY29uZGl0aW9uQi5FZGdlUi5Sc2NyaXB0DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggIDQ0Nzk3NCBBcHIgMTMgMDI6MjcgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4LmNvbmRpdGlvbkFfdnNfY29uZGl0aW9uQi5lZGdlUi5jb3VudF9tYXRyaXgNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAxMTU2Mjg3IEFwciAxMyAwMjoyNyBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguY29uZGl0aW9uQV92c19jb25kaXRpb25CLmVkZ2VSLkRFX3Jlc3VsdHMNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgMTE4MDY1IEFwciAxMyAwMjoyNyBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguY29uZGl0aW9uQV92c19jb25kaXRpb25CLmVkZ2VSLkRFX3Jlc3VsdHMuTUFfbl9Wb2xjYW5vLnBkZg0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgICA5NTkgQXByIDEzIDAyOjI5IGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5jb25kaXRpb25BX3ZzX2NvbmRpdGlvbkIuZWRnZVIuREVfcmVzdWx0cy5QMC4wMDFfQzIuY29uZGl0aW9uQS1VUC5zdWJzZXQNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgNTEzIEFwciAxMyAwMjoyOSBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguY29uZGl0aW9uQV92c19jb25kaXRpb25CLmVkZ2VSLkRFX3Jlc3VsdHMuUDAuMDAxX0MyLmNvbmRpdGlvbkItVVAuc3Vic2V0DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgMTQwMiBBcHIgMTMgMDI6MjkgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4LmNvbmRpdGlvbkFfdnNfY29uZGl0aW9uQi5lZGdlUi5ERV9yZXN1bHRzLlAwLjAwMV9DMi5ERS5zdWJzZXQNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgIDk2IEFwciAxMyAwMjoyOSBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguY29uZGl0aW9uQV92c19jb25kaXRpb25CLmVkZ2VSLkRFX3Jlc3VsdHMuc2FtcGxlcw0KDQoNCiFbREVfaXNvZm9ybXMuTUFfcGxvdF0oaXNvZm9ybXNfREVfMy9jb25kQV92c19jb25kQl9NQXBsb3QuanBnKQ0KDQoNCg0KIVtERV9pc29mb3Jtcy52b2xjYW5vX3Bsb3RdKGlzb2Zvcm1zX0RFXzMvY29uZEFfdnNfY29uZEJfdm9sY2Fub3Bsb3QuanBnKQ0KDQoNCg0KDQoNCiMjIyMgc3Rhci10cmFuc2NyaXB0b21lb3V0JCBjZCBpc29mb3Jtc19ERV8zLw0KDQoNCg0KDQoNCg0KDQojIyMgQW5hbHl6ZSBkaWZmZXJlbnRpYWwgZXhwcmVzc2lvbjogUHJvZHVjZXMgaGVhdG1hcA0KDQoNCg0KDQpgYGANCmlzb2Zvcm1zX0RFXzMkIGFuYWx5emVfZGlmZl9leHByLnBsIA0KDQotLW1hdHJpeCAuLi9pc29mb3Jtc19nZW5lX3RyYW5zX21hcF9ub25lL2lzb2Zvcm1zLmlzb2Zvcm0uVE1NLkVYUFIubWF0cml4IA0KDQotLXNhbXBsZXMgLi4vc2FtcGxlc19kZXNjcmliZWQudHh0IA0KDQotLW91dHB1dCBERV9pc29mb3Jtc18zDQoNCmBgYA0KDQoNCioqRm91bmQgOSBmZWF0dXJlcyBhcyBkaWZmZXJlbnRpYWxseSBleHByZXNzZWQuKioNCg0KDQoNCkNNRDogDQoNCi9ob21lL2JkYXNoL21pbmljb25kYTIvb3B0L3RyaW5pdHktMi42LjYvQW5hbHlzaXMvRGlmZmVyZW50aWFsRXhwcmVzc2lvbi9QdFIgDQoNCi1tIERFX2lzb2Zvcm1zXzMubWF0cml4IA0KDQotLWxvZzIgDQoNCi0taGVhdG1hcCANCg0KLS1taW5fY29sU3VtcyAwIA0KDQotLW1pbl9yb3dTdW1zIDAgDQoNCi0tZ2VuZV9kaXN0IGV1Y2xpZGVhbiANCg0KLS1zYW1wbGVfZGlzdCBldWNsaWRlYW4gDQoNCi0tc2FtcGxlX2Nvcl9tYXRyaXggDQoNCi0tY2VudGVyX3Jvd3MgDQoNCi0tc2F2ZSAgDQoNCi1zIC4uL3NhbXBsZXNfZGVzY3JpYmVkLnR4dA0KDQoNCg0KQ01EOiANCg0KUiANCg0KLS1uby1zYXZlIA0KDQotLW5vLXJlc3RvcmUgDQoNCi0tbm8tc2l0ZS1maWxlIA0KDQotLW5vLWluaXQtZmlsZSANCg0KLXEgPCBERV9pc29mb3Jtc18zLm1hdHJpeC5SDQoNCg0KYGBgDQo+IGxpYnJhcnkoY2x1c3RlcikNCg0KPiBsaWJyYXJ5KEJpb2Jhc2UpDQoNCmBgYA0KDQpMb2FkaW5nIHJlcXVpcmVkIHBhY2thZ2U6IEJpb2NHZW5lcmljcw0KDQpMb2FkaW5nIHJlcXVpcmVkIHBhY2thZ2U6IHBhcmFsbGVsDQoNCkF0dGFjaGluZyBwYWNrYWdlOiDigJhCaW9jR2VuZXJpY3PigJkNCg0KVGhlIGZvbGxvd2luZyBvYmplY3RzIGFyZSBtYXNrZWQgZnJvbSDigJhwYWNrYWdlOnBhcmFsbGVs4oCZOg0KDQogICAgY2x1c3RlckFwcGx5LCBjbHVzdGVyQXBwbHlMQiwgY2x1c3RlckNhbGwsIGNsdXN0ZXJFdmFsUSwNCiAgICBjbHVzdGVyRXhwb3J0LCBjbHVzdGVyTWFwLCBwYXJBcHBseSwgcGFyQ2FwcGx5LCBwYXJMYXBwbHksDQogICAgcGFyTGFwcGx5TEIsIHBhclJhcHBseSwgcGFyU2FwcGx5LCBwYXJTYXBwbHlMQg0KDQpUaGUgZm9sbG93aW5nIG9iamVjdHMgYXJlIG1hc2tlZCBmcm9tIOKAmHBhY2thZ2U6c3RhdHPigJk6DQoNCiAgICBJUVIsIG1hZCwgc2QsIHZhciwgeHRhYnMNCg0KVGhlIGZvbGxvd2luZyBvYmplY3RzIGFyZSBtYXNrZWQgZnJvbSDigJhwYWNrYWdlOmJhc2XigJk6DQoNCiAgICBhbnlEdXBsaWNhdGVkLCBhcHBlbmQsIGFzLmRhdGEuZnJhbWUsIGJhc2VuYW1lLCBjYmluZCwgY29sTWVhbnMsDQogICAgY29sbmFtZXMsIGNvbFN1bXMsIGRpcm5hbWUsIGRvLmNhbGwsIGR1cGxpY2F0ZWQsIGV2YWwsIGV2YWxxLA0KICAgIEZpbHRlciwgRmluZCwgZ2V0LCBncmVwLCBncmVwbCwgaW50ZXJzZWN0LCBpcy51bnNvcnRlZCwgbGFwcGx5LA0KICAgIGxlbmd0aHMsIE1hcCwgbWFwcGx5LCBtYXRjaCwgbWdldCwgb3JkZXIsIHBhc3RlLCBwbWF4LCBwbWF4LmludCwNCiAgICBwbWluLCBwbWluLmludCwgUG9zaXRpb24sIHJhbmssIHJiaW5kLCBSZWR1Y2UsIHJvd01lYW5zLCByb3duYW1lcywNCiAgICByb3dTdW1zLCBzYXBwbHksIHNldGRpZmYsIHNvcnQsIHRhYmxlLCB0YXBwbHksIHVuaW9uLCB1bmlxdWUsDQogICAgdW5zcGxpdCwgd2hpY2gsIHdoaWNoLm1heCwgd2hpY2gubWluDQoNCldlbGNvbWUgdG8gQmlvY29uZHVjdG9yDQoNCiAgICBWaWduZXR0ZXMgY29udGFpbiBpbnRyb2R1Y3RvcnkgbWF0ZXJpYWw7IHZpZXcgd2l0aA0KICAgICdicm93c2VWaWduZXR0ZXMoKScuIFRvIGNpdGUgQmlvY29uZHVjdG9yLCBzZWUNCiAgICAnY2l0YXRpb24oIkJpb2Jhc2UiKScsIGFuZCBmb3IgcGFja2FnZXMgJ2NpdGF0aW9uKCJwa2duYW1lIiknLg0KICAgIA0KYGBgDQo+IGxpYnJhcnkocXZhbHVlKQ0KDQo+IGxpYnJhcnkoZmFzdGNsdXN0ZXIpDQoNCmBgYA0KDQoNCkF0dGFjaGluZyBwYWNrYWdlOiDigJhmYXN0Y2x1c3RlcuKAmQ0KDQpUaGUgZm9sbG93aW5nIG9iamVjdCBpcyBtYXNrZWQgZnJvbSDigJhwYWNrYWdlOnN0YXRz4oCZOg0KDQogICAgaGNsdXN0DQogICAgDQogICAgDQpgYGANCj4gb3B0aW9ucyhzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpDQoNCj4gTk9fUkVVU0UgPSBGDQoNCj4gDQoNCj4gIyB0cnkgdG8gcmV1c2UgZWFybGllci1sb2FkZWQgZGF0YSBpZiBwb3NzaWJsZQ0KDQo+IGlmIChmaWxlLmV4aXN0cygiREVfaXNvZm9ybXNfMy5tYXRyaXguUkRhdGEiKSAmJiAhIE5PX1JFVVNFKSB7DQorICAgICBwcmludCgnUkVTVE9SSU5HIERBVEEgRlJPTSBFQVJMSUVSIEFOQUxZU0lTJykNCisgICAgIGxvYWQoIkRFX2lzb2Zvcm1zXzMubWF0cml4LlJEYXRhIikNCisgfSBlbHNlIHsNCisgICAgIHByaW50KCdSZWFkaW5nIG1hdHJpeCBmaWxlLicpDQorICAgICBwcmltYXJ5X2RhdGEgPSByZWFkLnRhYmxlKCJERV9pc29mb3Jtc18zLm1hdHJpeCIsIGhlYWRlcj1ULCBjb209JycsIHJvdy5uYW1lcz0xLCBjaGVjay5uYW1lcz1GKQ0KKyAgICAgcHJpbWFyeV9kYXRhID0gYXMubWF0cml4KHByaW1hcnlfZGF0YSkNCisgfQ0KDQpbMV0gIlJlYWRpbmcgbWF0cml4IGZpbGUuIg0KDQo+IHNvdXJjZSgiL2hvbWUvYmRhc2gvbWluaWNvbmRhMi9vcHQvdHJpbml0eS0yLjYuNi9BbmFseXNpcy9EaWZmZXJlbnRpYWxFeHByZXNzaW9uL1IvaGVhdG1hcC4zLlIiKQ0KDQo+IHNvdXJjZSgiL2hvbWUvYmRhc2gvbWluaWNvbmRhMi9vcHQvdHJpbml0eS0yLjYuNi9BbmFseXNpcy9EaWZmZXJlbnRpYWxFeHByZXNzaW9uL1IvbWlzY19ybmFzZXFfZnVuY3MuUiIpDQoNCj4gc291cmNlKCIvaG9tZS9iZGFzaC9taW5pY29uZGEyL29wdC90cmluaXR5LTIuNi42L0FuYWx5c2lzL0RpZmZlcmVudGlhbEV4cHJlc3Npb24vUi9wYWlyczMuUiIpDQoNCj4gc291cmNlKCIvaG9tZS9iZGFzaC9taW5pY29uZGEyL29wdC90cmluaXR5LTIuNi42L0FuYWx5c2lzL0RpZmZlcmVudGlhbEV4cHJlc3Npb24vUi92aW9wbG90Mi5SIikNCg0KPiBkYXRhID0gcHJpbWFyeV9kYXRhDQoNCj4gbXloZWF0Y29sID0gY29sb3JwYW5lbCg3NSwgJ3B1cnBsZScsJ2JsYWNrJywneWVsbG93JykNCg0KPiBzYW1wbGVzX2RhdGEgPSByZWFkLnRhYmxlKCIuLi9zYW1wbGVzX2Rlc2NyaWJlZC50eHQiLCBoZWFkZXI9RiwgY2hlY2submFtZXM9RiwgZmlsbD1UKQ0KDQo+IHNhbXBsZXNfZGF0YSA9IHNhbXBsZXNfZGF0YVtzYW1wbGVzX2RhdGFbLDJdICE9ICcnLF0NCg0KPiBjb2xuYW1lcyhzYW1wbGVzX2RhdGEpID0gYygnc2FtcGxlX25hbWUnLCAncmVwbGljYXRlX25hbWUnKQ0KDQo+IHNhbXBsZV90eXBlcyA9IGFzLmNoYXJhY3Rlcih1bmlxdWUoc2FtcGxlc19kYXRhWywxXSkpDQoNCj4gcmVwX25hbWVzID0gYXMuY2hhcmFjdGVyKHNhbXBsZXNfZGF0YVssMl0pDQoNCj4gZGF0YSA9IGRhdGFbLCBjb2xuYW1lcyhkYXRhKSAlaW4lIHJlcF9uYW1lcywgZHJvcD1GIF0NCg0KPiBuc2FtcGxlcyA9IGxlbmd0aChzYW1wbGVfdHlwZXMpDQoNCj4gc2FtcGxlX2NvbG9ycyA9IHJhaW5ib3cobnNhbXBsZXMpDQoNCj4gbmFtZXMoc2FtcGxlX2NvbG9ycykgPSBzYW1wbGVfdHlwZXMNCg0KPiBzYW1wbGVfdHlwZV9saXN0ID0gbGlzdCgpDQoNCj4gZm9yIChpIGluIDE6bnNhbXBsZXMpIHsNCisgICAgIHNhbXBsZXNfd2FudCA9IHNhbXBsZXNfZGF0YVtzYW1wbGVzX2RhdGFbLDFdPT1zYW1wbGVfdHlwZXNbaV0sIDJdDQorICAgICBzYW1wbGVfdHlwZV9saXN0W1tzYW1wbGVfdHlwZXNbaV1dXSA9IGFzLnZlY3RvcihzYW1wbGVzX3dhbnQpDQorIH0NCg0KPiBzYW1wbGVfZmFjdG9yaW5nID0gY29sbmFtZXMoZGF0YSkNCg0KPiBmb3IgKGkgaW4gMTpuc2FtcGxlcykgew0KKyAgICAgc2FtcGxlX3R5cGUgPSBzYW1wbGVfdHlwZXNbaV0NCisgICAgIHJlcGxpY2F0ZXNfd2FudCA9IHNhbXBsZV90eXBlX2xpc3RbW3NhbXBsZV90eXBlXV0NCisgICAgIHNhbXBsZV9mYWN0b3JpbmdbIGNvbG5hbWVzKGRhdGEpICVpbiUgcmVwbGljYXRlc193YW50IF0gPSBzYW1wbGVfdHlwZQ0KKyB9DQoNCj4gaW5pdGlhbF9tYXRyaXggPSBkYXRhICMgc3RvcmUgYmVmb3JlIGRvaW5nIHZhcmlvdXMgZGF0YSB0cmFuc2Zvcm1hdGlvbnMNCg0KPiBkYXRhID0gbG9nMihkYXRhKzEpDQoNCj4gc2FtcGxlX2ZhY3RvcmluZyA9IGNvbG5hbWVzKGRhdGEpDQoNCj4gZm9yIChpIGluIDE6bnNhbXBsZXMpIHsNCisgICAgIHNhbXBsZV90eXBlID0gc2FtcGxlX3R5cGVzW2ldDQorICAgICByZXBsaWNhdGVzX3dhbnQgPSBzYW1wbGVfdHlwZV9saXN0W1tzYW1wbGVfdHlwZV1dDQorICAgICBzYW1wbGVfZmFjdG9yaW5nWyBjb2xuYW1lcyhkYXRhKSAlaW4lIHJlcGxpY2F0ZXNfd2FudCBdID0gc2FtcGxlX3R5cGUNCisgfQ0KDQo+IHNhbXBsZUFubm90YXRpb25zID0gbWF0cml4KG5jb2w9bmNvbChkYXRhKSxucm93PW5zYW1wbGVzKQ0KDQo+IGZvciAoaSBpbiAxOm5zYW1wbGVzKSB7DQorICAgc2FtcGxlQW5ub3RhdGlvbnNbaSxdID0gY29sbmFtZXMoZGF0YSkgJWluJSBzYW1wbGVfdHlwZV9saXN0W1tzYW1wbGVfdHlwZXNbaV1dXQ0KKyB9DQoNCj4gc2FtcGxlQW5ub3RhdGlvbnMgPSBhcHBseShzYW1wbGVBbm5vdGF0aW9ucywgMToyLCBmdW5jdGlvbih4KSBhcy5sb2dpY2FsKHgpKQ0KDQo+IHNhbXBsZUFubm90YXRpb25zID0gc2FtcGxlX21hdHJpeF90b19jb2xvcl9hc3NpZ25tZW50cyhzYW1wbGVBbm5vdGF0aW9ucywgY29sPXNhbXBsZV9jb2xvcnMpDQoNCj4gcm93bmFtZXMoc2FtcGxlQW5ub3RhdGlvbnMpID0gYXMudmVjdG9yKHNhbXBsZV90eXBlcykNCg0KPiBjb2xuYW1lcyhzYW1wbGVBbm5vdGF0aW9ucykgPSBjb2xuYW1lcyhkYXRhKQ0KDQo+IGRhdGEgPSBhcy5tYXRyaXgoZGF0YSkgIyBjb252ZXJ0IHRvIG1hdHJpeA0KDQo+IA0KPiAjIENlbnRlcmluZyByb3dzDQoNCj4gZGF0YSA9IHQoc2NhbGUodChkYXRhKSwgc2NhbGU9RikpDQo+IA0KDQo+IHdyaXRlLnRhYmxlKGRhdGEsIGZpbGU9IkRFX2lzb2Zvcm1zXzMubWF0cml4LmxvZzIuY2VudGVyZWQuZGF0IiwgcXVvdGU9Riwgc2VwPScJJyk7DQoNCj4gaWYgKG5yb3coZGF0YSkgPCAyKSB7IHN0b3AoIg0KKyANCisgKioqKiBTb3JyeSwgYXQgbGVhc3QgdHdvIHJvd3MgYXJlIHJlcXVpcmVkIGZvciB0aGlzIG1hdHJpeC4NCisgDQorICIpO30NCg0KDQo+IGlmIChuY29sKGRhdGEpIDwgMikgeyBzdG9wKCINCisgDQorICoqKiogU29ycnksIGF0IGxlYXN0IHR3byBjb2x1bW5zIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBtYXRyaXguDQorIA0KKyAiKTt9DQoNCj4gc2FtcGxlX2NvciA9IGNvcihkYXRhLCBtZXRob2Q9J3BlYXJzb24nLCB1c2U9J3BhaXJ3aXNlLmNvbXBsZXRlLm9icycpDQoNCj4gd3JpdGUudGFibGUoc2FtcGxlX2NvciwgZmlsZT0iREVfaXNvZm9ybXNfMy5tYXRyaXgubG9nMi5jZW50ZXJlZC5zYW1wbGVfY29yLmRhdCIsIHF1b3RlPUYsIHNlcD0nCScpDQoNCj4gc2FtcGxlX2Rpc3QgPSBkaXN0KHQoZGF0YSksIG1ldGhvZD0nZXVjbGlkZWFuJykNCg0KPiBoY19zYW1wbGVzID0gaGNsdXN0KHNhbXBsZV9kaXN0LCBtZXRob2Q9J2NvbXBsZXRlJykNCg0KPiBwZGYoIkRFX2lzb2Zvcm1zXzMubWF0cml4LmxvZzIuY2VudGVyZWQuc2FtcGxlX2Nvcl9tYXRyaXgucGRmIikNCg0KPiBzYW1wbGVfY29yX2Zvcl9wbG90ID0gc2FtcGxlX2Nvcg0KDQo+IGhlYXRtYXAuMyhzYW1wbGVfY29yX2Zvcl9wbG90LCBkZW5kcm9ncmFtPSdib3RoJywgUm93dj1hcy5kZW5kcm9ncmFtKGhjX3NhbXBsZXMpLCBDb2x2PWFzLmRlbmRyb2dyYW0oaGNfc2FtcGxlcyksIGNvbCA9IG15aGVhdGNvbCwgc2NhbGU9J25vbmUnLCBzeW1tPVRSVUUsIGtleT1UUlVFLGRlbnNpdHkuaW5mbz0nbm9uZScsIHRyYWNlPSdub25lJywgc3lta2V5PUZBTFNFLCBzeW1icmVha3M9RiwgbWFyZ2lucz1jKDEwLDEwKSwgY2V4Q29sPTEsIGNleFJvdz0xLCBjZXgubWFpbj0wLjc1LCBtYWluPXBhc3RlKCJzYW1wbGUgY29ycmVsYXRpb24gbWF0cml4DQorICIsICJERV9pc29mb3Jtc18zLm1hdHJpeC5sb2cyLmNlbnRlcmVkIikgLCBDb2xTaWRlQ29sb3JzPXNhbXBsZUFubm90YXRpb25zLCBSb3dTaWRlQ29sb3JzPXQoc2FtcGxlQW5ub3RhdGlvbnMpKQ0KZm9yIHBsb3R0aW5nOjogbWluLnJhdzogLTAuOTU5ODA3NzI3NjI4NzA2IG1heC5yYXc6IDENCg0KPiBkZXYub2ZmKCkNCg0KbnVsbCBkZXZpY2UgDQogICAgICAgICAgMSANCiAgICAgICAgICANCj4gZ2VuZV9jb3IgPSBOVUxMDQoNCj4gZ2VuZV9kaXN0ID0gZGlzdChkYXRhLCBtZXRob2Q9J2V1Y2xpZGVhbicpDQoNCj4gaWYgKG5yb3coZGF0YSkgPD0gMSkgeyBtZXNzYWdlKCdUb28gZmV3IGdlbmVzIHRvIGdlbmVyYXRlIGhlYXRtYXAnKTsgcXVpdChzdGF0dXM9MCk7IH0NCg0KPiBoY19nZW5lcyA9IGhjbHVzdChnZW5lX2Rpc3QsIG1ldGhvZD0nY29tcGxldGUnKQ0KDQo+IGhlYXRtYXBfZGF0YSA9IGRhdGENCg0KPiBwZGYoIkRFX2lzb2Zvcm1zXzMubWF0cml4LmxvZzIuY2VudGVyZWQuZ2VuZXNfdnNfc2FtcGxlc19oZWF0bWFwLnBkZiIpDQoNCj4gaGVhdG1hcC4zKGhlYXRtYXBfZGF0YSwgZGVuZHJvZ3JhbT0nYm90aCcsIFJvd3Y9YXMuZGVuZHJvZ3JhbShoY19nZW5lcyksIENvbHY9YXMuZGVuZHJvZ3JhbShoY19zYW1wbGVzKSwgY29sPW15aGVhdGNvbCwgc2NhbGU9Im5vbmUiLCBkZW5zaXR5LmluZm89Im5vbmUiLCB0cmFjZT0ibm9uZSIsIGtleT1UUlVFLCBrZXlzaXplPTEuMiwgY2V4Q29sPTEsIG1hcmdpbnM9YygxMCwxMCksIGNleC5tYWluPTAuNzUsIG1haW49cGFzdGUoInNhbXBsZXMgdnMuIGZlYXR1cmVzDQorICIsICJERV9pc29mb3Jtc18zLm1hdHJpeC5sb2cyLmNlbnRlcmVkIiApICwgQ29sU2lkZUNvbG9ycz1zYW1wbGVBbm5vdGF0aW9ucykNCmZvciBwbG90dGluZzo6IG1pbi5yYXc6IC01LjE1NzYwNjU4NDEzNDEgbWF4LnJhdzogNS4xNTc2MDY1ODQxMzQxDQoNCj4gZGV2Lm9mZigpDQoNCm51bGwgZGV2aWNlIA0KICAgICAgICAgIDEgDQo+IHNhdmUobGlzdD1scyhhbGw9VFJVRSksIGZpbGU9IkRFX2lzb2Zvcm1zXzMubWF0cml4LlJEYXRhIikNCg0KPiANCg0KYGBgDQoNCg0KDQoNCiMjIyMgc3Rhci10cmFuc2NyaXB0b21lb3V0XSQgbHMgLWwgaXNvZm9ybXNfREVfMy8NCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgIDUzIEFwciAxMyAwMjoyOSBERV9mZWF0dXJlX2NvdW50cy5QMC4wMDFfQzIubWF0cml4DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgIDQ3NiBBcHIgMTMgMDI6MjkgREVfaXNvZm9ybXNfMy5tYXRyaXgNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAxMTA0IEFwciAxMyAwMjoyOSBERV9pc29mb3Jtc18zLm1hdHJpeC5sb2cyLmNlbnRlcmVkLmRhdA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgIDY1MjYgQXByIDEzIDAyOjI5IERFX2lzb2Zvcm1zXzMubWF0cml4LmxvZzIuY2VudGVyZWQuZ2VuZXNfdnNfc2FtcGxlc19oZWF0bWFwLnBkZg0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgICA2MzQgQXByIDEzIDAyOjI5IERFX2lzb2Zvcm1zXzMubWF0cml4LmxvZzIuY2VudGVyZWQuc2FtcGxlX2Nvci5kYXQNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICA2MzgxIEFwciAxMyAwMjoyOSBERV9pc29mb3Jtc18zLm1hdHJpeC5sb2cyLmNlbnRlcmVkLnNhbXBsZV9jb3JfbWF0cml4LnBkZg0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgIDQ0NjUgQXByIDEzIDAyOjI5IERFX2lzb2Zvcm1zXzMubWF0cml4LlINCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgIDM0NDA5IEFwciAxMyAwMjoyOSBERV9pc29mb3Jtc18zLm1hdHJpeC5SRGF0YQ0KDQoNCg0KYGBge3J9DQpsaWJyYXJ5KHBkZnRvb2xzKQ0KDQpgYGANCg0KDQpgYGB7cn0NCnBkZl9jb252ZXJ0KCdpc29mb3Jtc19ERV8zL0RFX2lzb2Zvcm1zXzMubWF0cml4LmxvZzIuY2VudGVyZWQuZ2VuZXNfdnNfc2FtcGxlc19oZWF0bWFwLnBkZicsIGZvcm1hdCA9ICJqcGVnIiwgcGFnZXMgPSBOVUxMLCBmaWxlbmFtZXMgPSBOVUxMLCBkcGkgPSAzMDAsIGFudGlhbGlhcyA9IFRSVUUsIG9wdyA9ICIiLCB1cHcgPSAiIiwgdmVyYm9zZSA9IFRSVUUpDQoNCmBgYA0KDQoNCiFbZ2VuZXNfdnNfc2FtcGxlX2hlYXRtYXBdKERFX2lzb2Zvcm1zXzMubWF0cml4LmxvZzIuY2VudGVyZWQuZ2VuZXNfdnNfc2FtcGxlc19oZWF0bWFwXzEuanBlZykNCg0KDQoNCmBgYHtyfQ0KcGRmX2NvbnZlcnQoJ2lzb2Zvcm1zX0RFXzMvREVfaXNvZm9ybXNfMy5tYXRyaXgubG9nMi5jZW50ZXJlZC5zYW1wbGVfY29yX21hdHJpeC5wZGYnLCBmb3JtYXQgPSAianBlZyIsIHBhZ2VzID0gTlVMTCwgZmlsZW5hbWVzID0gTlVMTCwgZHBpID0gMzAwLCBhbnRpYWxpYXMgPSBUUlVFLCBvcHcgPSAiIiwgdXB3ID0gIiIsIHZlcmJvc2UgPSBUUlVFKQ0KDQpgYGANCg0KDQoNCiFbc2FtcGxlX2Nvcl9tYXRyaXhdKERFX2lzb2Zvcm1zXzMubWF0cml4LmxvZzIuY2VudGVyZWQuc2FtcGxlX2Nvcl9tYXRyaXhfMS5qcGVnKQ0KDQoNCiMjIDguIGVkZ2VSIGFuYWx5c2lzIG9mIGRpZmZlcmVudGFpbCBnZW5lICBleHByZXNzaW9uIChzaW1pbGFyIHRvIHRoZSBpc29mb3JtcyBhbmFseXNpcyBkb25lIGFib3ZlKQ0KDQojIyMgR2VuZXJhdGUgYSBtYXRyaXggZmlsZSBvZiBhYnVuZGFuY2UgZXN0aW1hdGVzDQoNCg0KYGBgDQoNCnN0YXItdHJhbnNjcmlwdG9tZW91dCQgYWJ1bmRhbmNlX2VzdGltYXRlc190b19tYXRyaXgucGwgDQoNCi0tZXN0X21ldGhvZCBSU0VNIA0KDQoxb3V0Ly5nZW5lcy5yZXN1bHRzIA0KMm91dC8uZ2VuZXMucmVzdWx0cyANCjNvdXQvLmdlbmVzLnJlc3VsdHMgDQo0b3V0Ly5nZW5lcy5yZXN1bHRzIA0KNW91dC8uZ2VuZXMucmVzdWx0cyANCjZvdXQvLmdlbmVzLnJlc3VsdHMgDQoNCi0tZ2VuZV90cmFuc19tYXAgbm9uZSANCg0KLS1uYW1lX3NhbXBsZV9ieV9iYXNlZGlyIA0KDQotLW91dF9wcmVmaXggZ2VuZXNfZ2VuZV90cmFuc19tYXBfbm9uZS9nZW5lcw0KDQpgYGANCg0KLXJlYWRpbmcgZmlsZTogMW91dC8uZ2VuZXMucmVzdWx0cw0KDQotcmVhZGluZyBmaWxlOiAyb3V0Ly5nZW5lcy5yZXN1bHRzDQoNCi1yZWFkaW5nIGZpbGU6IDNvdXQvLmdlbmVzLnJlc3VsdHMNCg0KLXJlYWRpbmcgZmlsZTogNG91dC8uZ2VuZXMucmVzdWx0cw0KDQotcmVhZGluZyBmaWxlOiA1b3V0Ly5nZW5lcy5yZXN1bHRzDQoNCi1yZWFkaW5nIGZpbGU6IDZvdXQvLmdlbmVzLnJlc3VsdHMNCg0KDQoqIE91dHB1dHRpbmcgY29tYmluZWQgbWF0cml4Lg0KDQovaG9tZS9iZGFzaC9taW5pY29uZGEyL29wdC90cmluaXR5LTIuNi42L3V0aWwvc3VwcG9ydF9zY3JpcHRzL3J1bl9UTU1fc2NhbGVfbWF0cml4LnBsIC0tbWF0cml4IGdlbmVzX2dlbmVfdHJhbnNfbWFwX25vbmUvZ2VuZXMuaXNvZm9ybS5UUE0ubm90X2Nyb3NzX25vcm0gPiBnZW5lc19nZW5lX3RyYW5zX21hcF9ub25lL2dlbmVzLmlzb2Zvcm0uVE1NLkVYUFIubWF0cml4Q01EOiBSIC0tbm8tc2F2ZSAtLW5vLXJlc3RvcmUgLS1uby1zaXRlLWZpbGUgLS1uby1pbml0LWZpbGUgLXEgPCBnZW5lc19nZW5lX3RyYW5zX21hcF9ub25lL2dlbmVzLmlzb2Zvcm0uVFBNLm5vdF9jcm9zc19ub3JtLnJ1blRNTS5SIDE+JjIgDQoNCg0KLi4uLi4uLi4uLi4uLi4uLg0KDQoNCiMjIyMgc3Rhci10cmFuc2NyaXB0b21lb3V0JCBscyAtbCBnZW5lc19nZW5lX3RyYW5zX21hcF9ub25lLw0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoIDc2NDg0NyBBcHIgMTIgMTI6MjQgZ2VuZXMuaXNvZm9ybS5jb3VudHMubWF0cml4DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggODA1OTAzIEFwciAxMiAxMjoyNCBnZW5lcy5pc29mb3JtLlRNTS5FWFBSLm1hdHJpeA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoIDYyMjUzNyBBcHIgMTIgMTI6MjQgZ2VuZXMuaXNvZm9ybS5UUE0ubm90X2Nyb3NzX25vcm0NCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICA1NzggQXByIDEyIDEyOjI0IGdlbmVzLmlzb2Zvcm0uVFBNLm5vdF9jcm9zc19ub3JtLnJ1blRNTS5SDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgMzE4IEFwciAxMiAxMjoyNCBnZW5lcy5pc29mb3JtLlRQTS5ub3RfY3Jvc3Nfbm9ybS5UTU1faW5mby50eHQNCg0KDQoNCg0KDQojIyMgREUgYW5hbHlzaXMgb2YgZ2VuZSBleHByZXNzaW9uOiBQcmlkdWNlcyBNQSBwbG90LCB2b2xjYW5vIHBsb3QgYW5kIGNvdW50cyBtYXRyaXgNCg0KIE5vdGUgYmlvbG9naWFjbCB0cmlwbGljYXRlcyBmb3IgZWFjaCBncm91cCAoc2VlIGJlbG93KQ0KDQoNCmBgYA0Kc3Rhci10cmFuc2NyaXB0b21lb3V0JCBydW5fREVfYW5hbHlzaXMucGwgDQoNCi0tbWF0cml4IGdlbmVzX2dlbmVfdHJhbnNfbWFwX25vbmUvZ2VuZXMuaXNvZm9ybS5jb3VudHMubWF0cml4IA0KDQotLW91dHB1dCBnZW5lc19ERV8zLyANCg0KLS1zYW1wbGVzX2ZpbGUgc2FtcGxlc19kZXNjcmliZWQudHh0IA0KDQotLW1ldGhvZCBlZGdlUg0KDQpgYGANCg0KR290IDYgc2FtcGxlcywgYW5kIGdvdDogNyBkYXRhIGZpZWxkcy4NCg0KSGVhZGVyOiAxb3V0CTJvdXQJM291dAk0b3V0CTVvdXQJNm91dA0KDQpOZXh0OiBPbHIxNTAxCTAuMDAJMC4wMAkwLjAwCTAuMDAJMC4wMAkwLjAwDQoNCiRWQVIxID0gew0KICAgICAgICAgICc1b3V0JyA9PiA1LA0KICAgICAgICAgICc2b3V0JyA9PiA2LA0KICAgICAgICAgICczb3V0JyA9PiAzLA0KICAgICAgICAgICcxb3V0JyA9PiAxLA0KICAgICAgICAgICcyb3V0JyA9PiAyLA0KICAgICAgICAgICc0b3V0JyA9PiA0DQogICAgICAgIH07DQogICAgICAgIA0KJFZBUjEgPSB7DQogICAgICAgICAgJ2NvbmRpdGlvbkInID0+IFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNG91dCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzVvdXQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc2b3V0Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICdjb25kaXRpb25BJyA9PiBbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzFvdXQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICcyb3V0JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnM291dCcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgXQ0KICAgICAgICB9Ow0KICAgICAgICANCkNvbnRyYXN0cyB0byBwZXJmb3JtIGFyZTogJFZBUjEgPSBbDQogICAgICAgICAgWw0KICAgICAgICAgICAgJ2NvbmRpdGlvbkEnLA0KICAgICAgICAgICAgJ2NvbmRpdGlvbkInDQogICAgICAgICAgXQ0KICAgICAgICBdOw0KICAgICAgICANCiAgICAgICAgDQpDTUQ6IFIgLS1uby1zYXZlIC0tbm8tcmVzdG9yZSAtLW5vLXNpdGUtZmlsZSAtLW5vLWluaXQtZmlsZSAtcSA8IGdlbmVzLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5jb25kaXRpb25BX3ZzX2NvbmRpdGlvbkIuY29uZGl0aW9uQS52cy5jb25kaXRpb25CLkVkZ2VSLlJzY3JpcHQNCg0KDQouLi4uLi4uLi4uLi4uLi4NCg0KIyMjIyBzdGFyLXRyYW5zY3JpcHRvbWVvdXQkIGxzIC1sIGdlbmVzX0RFXzMvDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgMTQxMCBBcHIgMTMgMDI6MTIgZ2VuZXMuaXNvZm9ybS5jb3VudHMubWF0cml4LmNvbmRpdGlvbkFfdnNfY29uZGl0aW9uQi5jb25kaXRpb25BLnZzLmNvbmRpdGlvbkIuRWRnZVIuUnNjcmlwdA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAzNTIyNzcgQXByIDEzIDAyOjEzIGdlbmVzLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5jb25kaXRpb25BX3ZzX2NvbmRpdGlvbkIuZWRnZVIuY291bnRfbWF0cml4DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggMTAxMDI4NCBBcHIgMTMgMDI6MTMgZ2VuZXMuaXNvZm9ybS5jb3VudHMubWF0cml4LmNvbmRpdGlvbkFfdnNfY29uZGl0aW9uQi5lZGdlUi5ERV9yZXN1bHRzDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggIDExMjY5NSBBcHIgMTMgMDI6MTMgZ2VuZXMuaXNvZm9ybS5jb3VudHMubWF0cml4LmNvbmRpdGlvbkFfdnNfY29uZGl0aW9uQi5lZGdlUi5ERV9yZXN1bHRzLk1BX25fVm9sY2Fuby5wZGYNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgMzU1IEFwciAxMyAwMjoyMSBnZW5lcy5pc29mb3JtLmNvdW50cy5tYXRyaXguY29uZGl0aW9uQV92c19jb25kaXRpb25CLmVkZ2VSLkRFX3Jlc3VsdHMuUDAuMDAxX0MyLmNvbmRpdGlvbkEtVVAuc3Vic2V0DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgICA3MCBBcHIgMTMgMDI6MjEgZ2VuZXMuaXNvZm9ybS5jb3VudHMubWF0cml4LmNvbmRpdGlvbkFfdnNfY29uZGl0aW9uQi5lZGdlUi5ERV9yZXN1bHRzLlAwLjAwMV9DMi5jb25kaXRpb25CLVVQLnN1YnNldA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgICAzNTUgQXByIDEzIDAyOjIxIGdlbmVzLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5jb25kaXRpb25BX3ZzX2NvbmRpdGlvbkIuZWRnZVIuREVfcmVzdWx0cy5QMC4wMDFfQzIuREUuc3Vic2V0DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgICA5NiBBcHIgMTMgMDI6MjEgZ2VuZXMuaXNvZm9ybS5jb3VudHMubWF0cml4LmNvbmRpdGlvbkFfdnNfY29uZGl0aW9uQi5lZGdlUi5ERV9yZXN1bHRzLnNhbXBsZXMNCg0KDQoNCg0KDQoNCiFbZ2VuZXNfTUFfcGxvdF0oZ2VuZXNfREVfMy9nZW5lc19NQXBsb3QuanBnKQ0KDQoNCg0KIVtnZW5lc192b2xjYW5vX3Bsb3RdKGdlbmVzX0RFXzMvZ2VuZXNfdm9sY2Fub19wbG90LmpwZykNCg0KDQoNCiMjIyBBbmFseXplIGRpZmZlcmVudGlhbCBnZW5lIGV4cHJlc3Npb246IFByb2R1Y2VzIGhlYXRtYXAgYW5kIGNvb3JlbGF0aW9uIG1hdHJpeA0KDQoNCmBgYA0KZ2VuZXNfREVfMyQgYW5hbHl6ZV9kaWZmX2V4cHIucGwgDQoNCi0tbWF0cml4IC4uL2dlbmVzX2dlbmVfdHJhbnNfbWFwX25vbmUvZ2VuZXMuaXNvZm9ybS5UTU0uRVhQUi5tYXRyaXggDQoNCi0tc2FtcGxlcyAuLi9zYW1wbGVzX2Rlc2NyaWJlZC50eHQgDQoNCi0tb3V0cHV0IERFX2dlbmVzXzMNCg0KYGBgDQoNCg0KKipGb3VuZCAyIGZlYXR1cmVzIGFzIGRpZmZlcmVudGlhbGx5IGV4cHJlc3NlZC4qKg0KDQpDTUQ6IC9ob21lL2JkYXNoL21pbmljb25kYTIvb3B0L3RyaW5pdHktMi42LjYvQW5hbHlzaXMvRGlmZmVyZW50aWFsRXhwcmVzc2lvbi9QdFIgLW0gREVfZ2VuZXNfMy5tYXRyaXggLS1sb2cyIC0taGVhdG1hcCAtLW1pbl9jb2xTdW1zIDAgLS1taW5fcm93U3VtcyAwIC0tZ2VuZV9kaXN0IGV1Y2xpZGVhbiAtLXNhbXBsZV9kaXN0IGV1Y2xpZGVhbiAtLXNhbXBsZV9jb3JfbWF0cml4IC0tY2VudGVyX3Jvd3MgLS1zYXZlICAtcyAuLi9zYW1wbGVzX2Rlc2NyaWJlZC50eHQNCkNNRDogUiAtLW5vLXNhdmUgLS1uby1yZXN0b3JlIC0tbm8tc2l0ZS1maWxlIC0tbm8taW5pdC1maWxlIC1xIDwgREVfZ2VuZXNfMy5tYXRyaXguUg0KDQoNCi4uLi4uLg0KDQoNCiMjIyMgc3Rhci10cmFuc2NyaXB0b21lb3V0JCBscyAtbCBnZW5lc19ERV8zLw0KDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgICA1MyBBcHIgMTMgMDI6MjEgREVfZmVhdHVyZV9jb3VudHMuUDAuMDAxX0MyLm1hdHJpeA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgICAxMjAgQXByIDEzIDAyOjIxIERFX2dlbmVzXzMubWF0cml4DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgIDI1NiBBcHIgMTMgMDI6MjEgREVfZ2VuZXNfMy5tYXRyaXgubG9nMi5jZW50ZXJlZC5kYXQNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICA1OTc3IEFwciAxMyAwMjoyMSBERV9nZW5lc18zLm1hdHJpeC5sb2cyLmNlbnRlcmVkLmdlbmVzX3ZzX3NhbXBsZXNfaGVhdG1hcC5wZGYNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgMTQ4IEFwciAxMyAwMjoyMSBERV9nZW5lc18zLm1hdHJpeC5sb2cyLmNlbnRlcmVkLnNhbXBsZV9jb3IuZGF0DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgNjMxMSBBcHIgMTMgMDI6MjEgREVfZ2VuZXNfMy5tYXRyaXgubG9nMi5jZW50ZXJlZC5zYW1wbGVfY29yX21hdHJpeC5wZGYNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICA0NDM1IEFwciAxMyAwMjoyMSBERV9nZW5lc18zLm1hdHJpeC5SDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAzMzIxNCBBcHIgMTMgMDI6MjEgREVfZ2VuZXNfMy5tYXRyaXguUkRhdGENCg0KDQoNCmBgYHtyfQ0KbGlicmFyeShwZGZ0b29scykNCg0KYGBgDQoNCmBgYHtyfQ0KcGRmX2NvbnZlcnQoJ2dlbmVzX0RFXzMvREVfZ2VuZXNfMy5tYXRyaXgubG9nMi5jZW50ZXJlZC5nZW5lc192c19zYW1wbGVzX2hlYXRtYXAucGRmJywgZm9ybWF0ID0gImpwZWciLCBwYWdlcyA9IE5VTEwsIGZpbGVuYW1lcyA9IE5VTEwsIGRwaSA9IDMwMCwgYW50aWFsaWFzID0gVFJVRSwgb3B3ID0gIiIsIHVwdyA9ICIiLCB2ZXJib3NlID0gVFJVRSkNCg0KYGBgDQoNCg0KIVtnZW5lc19oZWF0bWFwXShERV9nZW5lc18zLm1hdHJpeC5sb2cyLmNlbnRlcmVkLmdlbmVzX3ZzX3NhbXBsZXNfaGVhdG1hcF8xLmpwZWcpDQoNCg0KDQoNCg0KDQpgYGB7cn0NCnBkZl9jb252ZXJ0KCdnZW5lc19ERV8zL0RFX2dlbmVzXzMubWF0cml4LmxvZzIuY2VudGVyZWQuc2FtcGxlX2Nvcl9tYXRyaXgucGRmJywgZm9ybWF0ID0gImpwZWciLCBwYWdlcyA9IE5VTEwsIGZpbGVuYW1lcyA9IE5VTEwsIGRwaSA9IDMwMCwgYW50aWFsaWFzID0gVFJVRSwgb3B3ID0gIiIsIHVwdyA9ICIiLCB2ZXJib3NlID0gVFJVRSkNCg0KYGBgDQoNCg0KIVtnZW5lc19jb3JyZWxhdGlvbl9tYXRyaXhdKERFX2dlbmVzXzMubWF0cml4LmxvZzIuY2VudGVyZWQuc2FtcGxlX2Nvcl9tYXRyaXhfMS5qcGVnKQ0KDQo=

armstrongfrour2001.blogspot.com

Source: http://rstudio-pubs-static.s3.amazonaws.com/490470_d4b52ca759674bcda12514a0ce97e8cd.html

0 Response to "Log.final.out Output File of Star Read Into Df"

ارسال یک نظر

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel