1 Rework DIA-Umpire to feed OpenSWATH.

In the following blocks I want to use DIA Umpire to create transition libraries for openswath, then I want to run openswath and score the runs.

1.5 Combine the statistics

## Rerunning because writing the file failed.
spectrast \
    -cNSpecLib -cICID-QTOF \
    -cf "Protein! ~ DECOY_" \
    -cP0.4237 \
    -c_IRTreference/irt.txt \
    -c_IRR results/05_dia_umpire_prophet/iProphet.pep.xml

spectrast \
    -cNSpecLib_cons \
    -cICID-QTOF \
    -cAC SpecLib.splib

spectrast2tsv.py \
    -l 350,2000 \
    -s b,y \
    -x 1,2 \
    -o 6 \
    -n 6 \
    -p 0.05 \
    -d -e \
    -k openswath \
    -w windows/2018_0817BrikenTrypsinDIA19.txt \
    -a SpecLib_cons_openswath.tsv \
    SpecLib_cons.sptxt

TargetedFileConverter \
    -in SpecLib_cons_openswath.tsv \
    -in_type tsv \
    -out SpecLib_cons_openswath.TraML \
    -out_type TraML

OpenSwathDecoyGenerator \
    -in SpecLib_cons_openswath.TraML \
    -out SpecLib_cons_openswath_decoy.TraML \
    -method shuffle
##    -exclude_similar \
##    -similarity_threshold 0.05 \
##    -identity_threshold 0.7

TargetedFileConverter \
    -in SpecLib_cons_openswath_decoy.TraML \
    -in_type TraML \
    -out SpecLib_cons_openswath_decoy.tsv \
    -out_type tsv

TargetedFileConverter \
    -in SpecLib_cons_openswath_decoy.TraML \
    -in_type TraML \
    -out SpecLib_cons_openswath_decoy.pqp \
    -out_type pqp

export VERSION=${VERSION:-20190327}
echo "Loading environment modules and parameters for version: ${VERSION}."
source "parameters/${VERSION}_settings.sh"

echo "Invoking the OpenSwathWorkflow using local comet-derived transitions."
type="diaumpire"
input_type="mzXML"
export TRANSITION_PREFIX="SpecLib_cons_openswath_decoy"
echo "Checking in, the transition library is: ${TRANSITION_PREFIX}.pqp"
base_mzxmldir="results/01${input_type}/dia/${VERSION}"
swath_inputs=$(/usr/bin/find "${base_mzxmldir}" -name *.${input_type} -print | sort)
echo "Checking in, the inputs are: ${swath_inputs}"
mkdir -p "${SWATH_OUTDIR}_${type}"
pypdir="${PYPROPHET_OUTDIR}_${type}"
mkdir -p "${pypdir}"
for input in ${swath_inputs}
do
    name=$(basename "${input}" ".${input_type}")
    echo "Starting openswath run, library type ${type} for ${name} using ${MZ_WINDOWS} windows at $(date)."
    swath_output_prefix="${SWATH_OUTDIR}_${type}/${name}_${DDA_METHOD}"
    pyprophet_output_prefix="${PYPROPHET_OUTDIR}_${type}/${name}_${DDA_METHOD}"
    echo "Deleting previous swath output file: ${swath_output_prefix}.osw"
    rm -f "${swath_output_prefix}.osw"
    rm -f "${swath_output_prefix}.tsv"
    OpenSwathWorkflow \
        -in "${input}" \
        -force \
        -sort_swath_maps \
        -min_upper_edge_dist 1 \
        -mz_correction_function "quadratic_regression_delta_ppm" \
        -Scoring:TransitionGroupPicker:background_subtraction "original" \
        -Scoring:stop_report_after_feature "5" \
        -swath_windows_file "windows/openswath_${name}.txt" \
        -tr "${TRANSITION_PREFIX}.pqp" \
        -out_tsv "${swath_output_prefix}.tsv"
    OpenSwathWorkflow \
        -in "${input}" \
        -force \
        -sort_swath_maps \
        -min_upper_edge_dist 1 \
        -mz_correction_function "quadratic_regression_delta_ppm" \
        -Scoring:TransitionGroupPicker:background_subtraction "original" \
        -Scoring:stop_report_after_feature "5" \
        -swath_windows_file "windows/openswath_${name}.txt" \
        -tr "${TRANSITION_PREFIX}.pqp" \
        -out_osw "${swath_output_prefix}.osw"
    ##2>"${swath_output_prefix}_osw.log" 1>&2
done
swath_out=$(dirname ${swath_output_prefix})
pyprophet_out="$(dirname "${pyprophet_output_prefix}")/openswath_merged.osw"
echo "Merging osw files to ${pyprophet_out}"
pyprophet merge \
          --template "${TRANSITION_PREFIX}.pqp" \
          --out="${pyprophet_out}" \
          ${swath_out}/*.osw
pyprophet score --in="${pyprophet_out}"
pyprophet export --in="${pyprophet_out}" --out "test.tsv"
## pyprophet always exports to the current working directory.
final_name="$(dirname ${pyprophet_out})/$(basename ${pyprophet_out} ".osw").tsv"
echo $final_name
mv "test.tsv"
ls -ld "${pyprophet_out}"

tric_tb="${TRIC_OUTDIR}_tuberculist"
mkdir -p "${tric_tb}"
feature_alignment.py \
    --force \
    --in "./${pypdir}/"*.tsv \
    --out "${tric_tb}/${SEARCH_METHOD}_${DDA_METHOD}.tsv" \
    --out_matrix "${tric_tb}/${DDA_METHOD}_outmatrix.tsv" \
    --out_meta "${tric_tb}/${DDA_METHOD}_meta.tsv"
2>"${tric_tb}/feature_alignment.err" \
 1>"${tric_tb}/feature_alignment.out"
echo "Wrote final output to ${tric_tb}/${SEARCH_METHOD}_${DDA_METHOD}.tsv"

2 DEP usage

Thanks to Vivek, I now am aware of DEP, which does everything I wish MSstats did. The matrix given to me by tric’s feature_alignment.py I think gives me what DEP requires, along with my annotations and sample sheet.

Let us see if this is true.

2.2 Preprocess intensities in preparation for DEP

##  [1] "sampleid"           "tubeid"             "tubelabel"         
##  [4] "figurereplicate"    "figurename"         "sampledescription" 
##  [7] "bioreplicate"       "lcrun"              "msrun"             
## [10] "technicalreplicate" "replicatestate"     "rep"               
## [13] "run"                "exptid"             "genotype"          
## [16] "collectiontype"     "condition"          "batch"             
## [19] "windowsize"         "enzyme"             "harvestdate"       
## [22] "prepdate"           "rundate"            "runinfo"           
## [25] "rawfile"            "filename"           "mzmlfile"          
## [28] "diascored"          "includeexclude"
##  [1] "s2018_0315Briken01"           "s2018_0315Briken02"          
##  [3] "s2018_0315Briken03"           "s2018_0315Briken04"          
##  [5] "s2018_0315Briken05"           "s2018_0315Briken06"          
##  [7] "s2018_0315Briken21"           "s2018_0315Briken22"          
##  [9] "s2018_0315Briken23"           "s2018_0315Briken24"          
## [11] "s2018_0315Briken25"           "s2018_0315Briken26"          
## [13] "s2018_0502BrikenDIA01"        "s2018_0502BrikenDIA02"       
## [15] "s2018_0502BrikenDIA03"        "s2018_0502BrikenDIA04"       
## [17] "s2018_0502BrikenDIA05"        "s2018_0502BrikenDIA06"       
## [19] "s2018_0502BrikenDIA07"        "s2018_0502BrikenDIA08"       
## [21] "s2018_0502BrikenDIA09"        "s2018_0502BrikenDIA10"       
## [23] "s2018_0502BrikenDIA11"        "s2018_0502BrikenDIA12"       
## [25] "s2018_0726Briken01"           "s2018_0726Briken02"          
## [27] "s2018_0726Briken03"           "s2018_0726Briken04"          
## [29] "s2018_0726Briken05"           "s2018_0726Briken06"          
## [31] "s2018_0726Briken07"           "s2018_0726Briken08"          
## [33] "s2018_0726Briken09"           "s2018_0726Briken11"          
## [35] "s2018_0726Briken12"           "s2018_0726Briken13"          
## [37] "s2018_0726Briken14"           "s2018_0726Briken15"          
## [39] "s2018_0726Briken16"           "s2018_0726Briken17"          
## [41] "s2018_0726Briken18"           "s2018_0726Briken19"          
## [43] "s2018_0817BrikenTrypsinDIA01" "s2018_0817BrikenTrypsinDIA02"
## [45] "s2018_0817BrikenTrypsinDIA03" "s2018_0817BrikenTrypsinDIA04"
## [47] "s2018_0817BrikenTrypsinDIA05" "s2018_0817BrikenTrypsinDIA06"
## [49] "s2018_0817BrikenTrypsinDIA07" "s2018_0817BrikenTrypsinDIA08"
## [51] "s2018_0817BrikenTrypsinDIA09" "s2018_0817BrikenTrypsinDIA11"
## [53] "s2018_0817BrikenTrypsinDIA12" "s2018_0817BrikenTrypsinDIA13"
## [55] "s2018_0817BrikenTrypsinDIA14" "s2018_0817BrikenTrypsinDIA15"
## [57] "s2018_0817BrikenTrypsinDIA16" "s2018_0817BrikenTrypsinDIA17"
## [59] "s2018_0817BrikenTrypsinDIA18" "s2018_0817BrikenTrypsinDIA19"
##  [1] "results/01mzXML/dia/20190327/2018_0315Briken01.mzXML"          
##  [2] "results/01mzXML/dia/20190327/2018_0315Briken02.mzXML"          
##  [3] "results/01mzXML/dia/20190327/2018_0315Briken03.mzXML"          
##  [4] "results/01mzXML/dia/20190327/2018_0315Briken04.mzXML"          
##  [5] "results/01mzXML/dia/20190327/2018_0315Briken05.mzXML"          
##  [6] "results/01mzXML/dia/20190327/2018_0315Briken06.mzXML"          
##  [7] "results/01mzXML/dia/20190327/2018_0315Briken21.mzXML"          
##  [8] "results/01mzXML/dia/20190327/2018_0315Briken22.mzXML"          
##  [9] "results/01mzXML/dia/20190327/2018_0315Briken23.mzXML"          
## [10] "results/01mzXML/dia/20190327/2018_0315Briken24.mzXML"          
## [11] "results/01mzXML/dia/20190327/2018_0315Briken25.mzXML"          
## [12] "results/01mzXML/dia/20190327/2018_0315Briken26.mzXML"          
## [13] "results/01mzXML/dia/20190327/2018_0502BrikenDIA01.mzXML"       
## [14] "results/01mzXML/dia/20190327/2018_0502BrikenDIA02.mzXML"       
## [15] "results/01mzXML/dia/20190327/2018_0502BrikenDIA03.mzXML"       
## [16] "results/01mzXML/dia/20190327/2018_0502BrikenDIA04.mzXML"       
## [17] "results/01mzXML/dia/20190327/2018_0502BrikenDIA05.mzXML"       
## [18] "results/01mzXML/dia/20190327/2018_0502BrikenDIA06.mzXML"       
## [19] "results/01mzXML/dia/20190327/2018_0502BrikenDIA07.mzXML"       
## [20] "results/01mzXML/dia/20190327/2018_0502BrikenDIA08.mzXML"       
## [21] "results/01mzXML/dia/20190327/2018_0502BrikenDIA09.mzXML"       
## [22] "results/01mzXML/dia/20190327/2018_0502BrikenDIA10.mzXML"       
## [23] "results/01mzXML/dia/20190327/2018_0502BrikenDIA11.mzXML"       
## [24] "results/01mzXML/dia/20190327/2018_0502BrikenDIA12.mzXML"       
## [25] "results/01mzXML/dia/20190327/2018_0726Briken01.mzXML"          
## [26] "results/01mzXML/dia/20190327/2018_0726Briken02.mzXML"          
## [27] "results/01mzXML/dia/20190327/2018_0726Briken03.mzXML"          
## [28] "results/01mzXML/dia/20190327/2018_0726Briken04.mzXML"          
## [29] "results/01mzXML/dia/20190327/2018_0726Briken05.mzXML"          
## [30] "results/01mzXML/dia/20190327/2018_0726Briken06.mzXML"          
## [31] "results/01mzXML/dia/20190327/2018_0726Briken07.mzXML"          
## [32] "results/01mzXML/dia/20190327/2018_0726Briken08.mzXML"          
## [33] "results/01mzXML/dia/20190327/2018_0726Briken09.mzXML"          
## [34] "results/01mzXML/dia/20190327/2018_0726Briken11.mzXML"          
## [35] "results/01mzXML/dia/20190327/2018_0726Briken12.mzXML"          
## [36] "results/01mzXML/dia/20190327/2018_0726Briken13.mzXML"          
## [37] "results/01mzXML/dia/20190327/2018_0726Briken14.mzXML"          
## [38] "results/01mzXML/dia/20190327/2018_0726Briken15.mzXML"          
## [39] "results/01mzXML/dia/20190327/2018_0726Briken16.mzXML"          
## [40] "results/01mzXML/dia/20190327/2018_0726Briken17.mzXML"          
## [41] "results/01mzXML/dia/20190327/2018_0726Briken18.mzXML"          
## [42] "results/01mzXML/dia/20190327/2018_0726Briken19.mzXML"          
## [43] "results/01mzXML/dia/20190327/2018_0817BrikenTrypsinDIA01.mzXML"
## [44] "results/01mzXML/dia/20190327/2018_0817BrikenTrypsinDIA02.mzXML"
## [45] "results/01mzXML/dia/20190327/2018_0817BrikenTrypsinDIA03.mzXML"
## [46] "results/01mzXML/dia/20190327/2018_0817BrikenTrypsinDIA04.mzXML"
## [47] "results/01mzXML/dia/20190327/2018_0817BrikenTrypsinDIA05.mzXML"
## [48] "results/01mzXML/dia/20190327/2018_0817BrikenTrypsinDIA06.mzXML"
## [49] "results/01mzXML/dia/20190327/2018_0817BrikenTrypsinDIA07.mzXML"
## [50] "results/01mzXML/dia/20190327/2018_0817BrikenTrypsinDIA08.mzXML"
## [51] "results/01mzXML/dia/20190327/2018_0817BrikenTrypsinDIA09.mzXML"
## [52] "results/01mzXML/dia/20190327/2018_0817BrikenTrypsinDIA11.mzXML"
## [53] "results/01mzXML/dia/20190327/2018_0817BrikenTrypsinDIA12.mzXML"
## [54] "results/01mzXML/dia/20190327/2018_0817BrikenTrypsinDIA13.mzXML"
## [55] "results/01mzXML/dia/20190327/2018_0817BrikenTrypsinDIA14.mzXML"
## [56] "results/01mzXML/dia/20190327/2018_0817BrikenTrypsinDIA15.mzXML"
## [57] "results/01mzXML/dia/20190327/2018_0817BrikenTrypsinDIA16.mzXML"
## [58] "results/01mzXML/dia/20190327/2018_0817BrikenTrypsinDIA17.mzXML"
## [59] "results/01mzXML/dia/20190327/2018_0817BrikenTrypsinDIA18.mzXML"
## [60] "results/01mzXML/dia/20190327/2018_0817BrikenTrypsinDIA19.mzXML"
## Loading SWATH2stats
## Found the same mzXML files in the annotations and data.
## Number of non-decoy peptides: 17081
## Number of decoy peptides: 1801
## Decoy rate: 0.1054
## The average FDR by run on assay level is 0.015
## The average FDR by run on peptide level is 0.016
## The average FDR by run on protein level is 0.001
## Target assay FDR: 0.02
## Required overall m-score cutoff: 0.0031623
## achieving assay FDR: 0.0194
## Target protein FDR: 0.02
## Required overall m-score cutoff: 0.01
## achieving protein FDR: 0.00115
## Original dimension: 221952, new dimension: 211415, difference: 10537.
## Peptides need to have been quantified in more conditions than: 48 in order to pass this percentage-based threshold.
## Fraction of peptides selected: 0.00058
## Original dimension: 224796, new dimension: 680, difference: 224116.
## Target protein FDR: 0.01
## Required overall m-score cutoff: 0.01
## achieving protein FDR: 0
## filter_mscore_fdr is filtering the data...
## finding m-score cutoff to achieve desired protein FDR in protein master list..
## finding m-score cutoff to achieve desired global peptide FDR..
## Target peptide FDR: 0.05
## Required overall m-score cutoff: 0.01
## Achieving peptide FDR: 0
## Proteins selected: 
## Total proteins selected: 2412
## Final target proteins: 2412
## Final decoy proteins: 0
## Peptides mapping to these protein entries selected:
## Total mapping peptides: 16868
## Final target peptides: 16868
## Final decoy peptides: 0
## Total peptides selected from:
## Total peptides: 16868
## Final target peptides: 16868
## Final decoy peptides: 0
## Individual run FDR quality of the peptides was not calculated
## as not every run contains a decoy.
## The decoys have been removed from the returned data.
## Number of proteins detected: 2363
## Protein identifiers: Rv0577, Rv0242c, Rv3012c, Rv2467, Rv3715c, Rv2220
## Number of proteins detected that are supported by a proteotypic peptide: 2337
## Number of proteotypic peptides detected: 16728
## Number of proteins detected: 2337
## First 6 protein identifiers: Rv0577, Rv0242c, Rv3012c, Rv2467, Rv3715c, Rv2220
## Before filtering:
##   Number of proteins: 2337
##   Number of peptides: 16728
## 
## Percentage of peptides removed: 25.94%
## 
## After filtering:
##   Number of proteins: 2331
##   Number of peptides: 12388
## Before filtering:
##   Number of proteins: 2331
##   Number of peptides: 12388
## 
## Percentage of peptides removed: 0%
## 
## After filtering:
##   Number of proteins: 2284
##   Number of peptides: 12388
## Protein overview matrix results/swath2stats/20190327/ump_protein_all.csv written to working folder.
## [1] 2434   61
## Protein overview matrix results/swath2stats/20190327/ump_protein_matrix_mscore.csv written to working folder.
## [1] 2412   61
## Peptide overview matrix results/swath2stats/20190327/ump_peptide_matrix_mscore.csv written to working folder.
## [1] 16868    61
## Protein overview matrix results/swath2stats/20190327/ump_protein_matrix_filtered.csv written to working folder.
## [1] 2284   61
## Peptide overview matrix results/swath2stats/20190327/ump_peptide_matrix_filtered.csv written to working folder.
## [1] 144819     61

3 Look at raw data

## Reading results/01mzML/dia/20190327/2018_0315Briken01.mzML
## Warning in extract_msraw_data(sample_annot, parallel = FALSE,
## format = "mzML", : There was an error reading results/01mzML/dia/
## 20190327/2018_0315Briken01.mzML.
## Reading results/01mzML/dia/20190327/2018_0315Briken02.mzML
## Warning in extract_msraw_data(sample_annot, parallel = FALSE,
## format = "mzML", : There was an error reading results/01mzML/dia/
## 20190327/2018_0315Briken02.mzML.
## Reading results/01mzML/dia/20190327/2018_0315Briken03.mzML
## Warning in extract_msraw_data(sample_annot, parallel = FALSE,
## format = "mzML", : There was an error reading results/01mzML/dia/
## 20190327/2018_0315Briken03.mzML.
## Reading results/01mzML/dia/20190327/2018_0315Briken04.mzML
## Warning in extract_msraw_data(sample_annot, parallel = FALSE,
## format = "mzML", : There was an error reading results/01mzML/dia/
## 20190327/2018_0315Briken04.mzML.
## Reading results/01mzML/dia/20190327/2018_0315Briken05.mzML
## Warning in extract_msraw_data(sample_annot, parallel = FALSE,
## format = "mzML", : There was an error reading results/01mzML/dia/
## 20190327/2018_0315Briken05.mzML.
## Reading results/01mzML/dia/20190327/2018_0315Briken06.mzML
## Warning in extract_msraw_data(sample_annot, parallel = FALSE,
## format = "mzML", : There was an error reading results/01mzML/dia/
## 20190327/2018_0315Briken06.mzML.
## Reading results/01mzML/dia/20190327/2018_0315Briken21.mzML
## Warning in extract_msraw_data(sample_annot, parallel = FALSE,
## format = "mzML", : There was an error reading results/01mzML/dia/
## 20190327/2018_0315Briken21.mzML.
## Reading results/01mzML/dia/20190327/2018_0315Briken22.mzML
## Warning in extract_msraw_data(sample_annot, parallel = FALSE,
## format = "mzML", : There was an error reading results/01mzML/dia/
## 20190327/2018_0315Briken22.mzML.
## Reading results/01mzML/dia/20190327/2018_0315Briken23.mzML
## Warning in extract_msraw_data(sample_annot, parallel = FALSE,
## format = "mzML", : There was an error reading results/01mzML/dia/
## 20190327/2018_0315Briken23.mzML.
## Reading results/01mzML/dia/20190327/2018_0315Briken24.mzML
## Warning in extract_msraw_data(sample_annot, parallel = FALSE,
## format = "mzML", : There was an error reading results/01mzML/dia/
## 20190327/2018_0315Briken24.mzML.
## Reading results/01mzML/dia/20190327/2018_0315Briken25.mzML
## Warning in extract_msraw_data(sample_annot, parallel = FALSE,
## format = "mzML", : There was an error reading results/01mzML/dia/
## 20190327/2018_0315Briken25.mzML.
## Reading results/01mzML/dia/20190327/2018_0315Briken26.mzML
## Warning in extract_msraw_data(sample_annot, parallel = FALSE,
## format = "mzML", : There was an error reading results/01mzML/dia/
## 20190327/2018_0315Briken26.mzML.
## Reading results/01mzML/dia/20190327/2018_0502BrikenDIA01.mzML
## Reading results/01mzML/dia/20190327/2018_0502BrikenDIA02.mzML
## Reading results/01mzML/dia/20190327/2018_0502BrikenDIA03.mzML
## Reading results/01mzML/dia/20190327/2018_0502BrikenDIA04.mzML
## Reading results/01mzML/dia/20190327/2018_0502BrikenDIA05.mzML
## Reading results/01mzML/dia/20190327/2018_0502BrikenDIA06.mzML
## Reading results/01mzML/dia/20190327/2018_0502BrikenDIA07.mzML
## Reading results/01mzML/dia/20190327/2018_0502BrikenDIA08.mzML
## Reading results/01mzML/dia/20190327/2018_0502BrikenDIA09.mzML
## Reading results/01mzML/dia/20190327/2018_0502BrikenDIA10.mzML
## Reading results/01mzML/dia/20190327/2018_0502BrikenDIA11.mzML
## Reading results/01mzML/dia/20190327/2018_0502BrikenDIA12.mzML
## Reading results/01mzML/dia/20190327/2018_0726Briken01.mzML
## Reading results/01mzML/dia/20190327/2018_0726Briken02.mzML
## Reading results/01mzML/dia/20190327/2018_0726Briken03.mzML
## Reading results/01mzML/dia/20190327/2018_0726Briken04.mzML
## Reading results/01mzML/dia/20190327/2018_0726Briken05.mzML
## Reading results/01mzML/dia/20190327/2018_0726Briken06.mzML
## Reading results/01mzML/dia/20190327/2018_0726Briken07.mzML
## Reading results/01mzML/dia/20190327/2018_0726Briken08.mzML
## Reading results/01mzML/dia/20190327/2018_0726Briken09.mzML
## Reading results/01mzML/dia/20190327/2018_0726Briken11.mzML
## Reading results/01mzML/dia/20190327/2018_0726Briken12.mzML
## Reading results/01mzML/dia/20190327/2018_0726Briken13.mzML
## Reading results/01mzML/dia/20190327/2018_0726Briken14.mzML
## Reading results/01mzML/dia/20190327/2018_0726Briken15.mzML
## Reading results/01mzML/dia/20190327/2018_0726Briken16.mzML
## Reading results/01mzML/dia/20190327/2018_0726Briken17.mzML
## Reading results/01mzML/dia/20190327/2018_0726Briken18.mzML
## Reading results/01mzML/dia/20190327/2018_0726Briken19.mzML
## Reading results/01mzML/dia/20190327/2018_0817BrikenTrypsinDIA01.mzML
## Reading results/01mzML/dia/20190327/2018_0817BrikenTrypsinDIA02.mzML
## Reading results/01mzML/dia/20190327/2018_0817BrikenTrypsinDIA03.mzML
## Reading results/01mzML/dia/20190327/2018_0817BrikenTrypsinDIA04.mzML
## Reading results/01mzML/dia/20190327/2018_0817BrikenTrypsinDIA05.mzML
## Reading results/01mzML/dia/20190327/2018_0817BrikenTrypsinDIA06.mzML
## Reading results/01mzML/dia/20190327/2018_0817BrikenTrypsinDIA07.mzML
## Reading results/01mzML/dia/20190327/2018_0817BrikenTrypsinDIA08.mzML
## Reading results/01mzML/dia/20190327/2018_0817BrikenTrypsinDIA09.mzML
## Reading results/01mzML/dia/20190327/2018_0817BrikenTrypsinDIA11.mzML
## Reading results/01mzML/dia/20190327/2018_0817BrikenTrypsinDIA12.mzML
## Reading results/01mzML/dia/20190327/2018_0817BrikenTrypsinDIA13.mzML
## Reading results/01mzML/dia/20190327/2018_0817BrikenTrypsinDIA14.mzML
## Reading results/01mzML/dia/20190327/2018_0817BrikenTrypsinDIA15.mzML
## Reading results/01mzML/dia/20190327/2018_0817BrikenTrypsinDIA16.mzML
## Reading results/01mzML/dia/20190327/2018_0817BrikenTrypsinDIA17.mzML
## Reading results/01mzML/dia/20190327/2018_0817BrikenTrypsinDIA18.mzML
## Reading results/01mzML/dia/20190327/2018_0817BrikenTrypsinDIA19.mzML

4 Get pyprophet data

## Attempting to read the tsv file for: 2018_0315Briken01: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0315Briken01.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0315Briken02: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0315Briken02.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0315Briken03: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0315Briken03.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0315Briken04: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0315Briken04.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0315Briken05: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0315Briken05.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0315Briken06: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0315Briken06.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0315Briken21: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0315Briken21.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0315Briken22: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0315Briken22.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0315Briken23: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0315Briken23.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0315Briken24: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0315Briken24.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0315Briken25: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0315Briken25.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0315Briken26: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0315Briken26.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0502BrikenDIA01: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0502BrikenDIA01.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0502BrikenDIA02: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0502BrikenDIA02.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0502BrikenDIA03: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0502BrikenDIA03.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0502BrikenDIA04: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0502BrikenDIA04.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0502BrikenDIA05: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0502BrikenDIA05.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0502BrikenDIA06: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0502BrikenDIA06.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0502BrikenDIA07: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0502BrikenDIA07.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0502BrikenDIA08: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0502BrikenDIA08.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0502BrikenDIA09: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0502BrikenDIA09.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0502BrikenDIA10: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0502BrikenDIA10.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0502BrikenDIA11: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0502BrikenDIA11.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0502BrikenDIA12: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0502BrikenDIA12.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0726Briken01: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0726Briken01.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0726Briken02: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0726Briken02.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0726Briken03: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0726Briken03.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0726Briken04: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0726Briken04.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0726Briken05: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0726Briken05.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0726Briken06: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0726Briken06.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0726Briken07: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0726Briken07.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0726Briken08: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0726Briken08.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0726Briken09: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0726Briken09.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0726Briken11: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0726Briken11.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0726Briken12: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0726Briken12.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0726Briken13: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0726Briken13.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0726Briken14: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0726Briken14.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0726Briken15: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0726Briken15.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0726Briken16: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0726Briken16.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0726Briken17: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0726Briken17.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0726Briken18: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0726Briken18.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0726Briken19: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0726Briken19.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0817BrikenTrypsinDIA01: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0817BrikenTrypsinDIA01.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0817BrikenTrypsinDIA02: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0817BrikenTrypsinDIA02.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0817BrikenTrypsinDIA03: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0817BrikenTrypsinDIA03.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0817BrikenTrypsinDIA04: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0817BrikenTrypsinDIA04.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0817BrikenTrypsinDIA05: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0817BrikenTrypsinDIA05.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0817BrikenTrypsinDIA06: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0817BrikenTrypsinDIA06.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0817BrikenTrypsinDIA07: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0817BrikenTrypsinDIA07.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0817BrikenTrypsinDIA08: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0817BrikenTrypsinDIA08.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0817BrikenTrypsinDIA09: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0817BrikenTrypsinDIA09.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0817BrikenTrypsinDIA11: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0817BrikenTrypsinDIA11.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0817BrikenTrypsinDIA12: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0817BrikenTrypsinDIA12.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0817BrikenTrypsinDIA13: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0817BrikenTrypsinDIA13.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0817BrikenTrypsinDIA14: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0817BrikenTrypsinDIA14.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0817BrikenTrypsinDIA15: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0817BrikenTrypsinDIA15.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0817BrikenTrypsinDIA16: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0817BrikenTrypsinDIA16.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0817BrikenTrypsinDIA17: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0817BrikenTrypsinDIA17.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0817BrikenTrypsinDIA18: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0817BrikenTrypsinDIA18.mzXML.tsv.
## Attempting to read the tsv file for: 2018_0817BrikenTrypsinDIA19: results/08pyprophet/20190327/whole_8mz_diaumpire/2018_0817BrikenTrypsinDIA19.mzXML.tsv.
## Adding filtwt0301
## Adding filtwt0302
## Adding filtwt0303
## Adding whlwt0304
## Adding whlwt0305
## Adding whlwt0306
## Adding whlwt0321
## Adding whlwt0322
## Adding filtwt0323
## Adding filtwt0324
## Adding filtwt0325
## Adding whlwt0326
## Adding filtdt0501
## Adding filtdt0502
## Adding filtdt0503
## Adding filtcm0504
## Adding filtcm0505
## Adding filtcm0506
## Adding whldt0507
## Adding whldt0508
## Adding whldt0509
## Adding whlcm0510
## Adding whlcm0511
## Adding whlcm0512
## Adding filtdt0701
## Adding filtdt0702
## Adding filtdt0703
## Adding filtcm0704
## Adding filtcm0705
## Adding filtcm0706
## Adding filtwt0707
## Adding filtwt0708
## Adding filt0709
## Adding whldt0711
## Adding whldt0712
## Adding whldt0713
## Adding wholcm0714
## Adding whlcm0715
## Adding whlcm0716
## Adding whlwt0717
## Adding whlwt0718
## Adding whlwt0719
## Adding filtdt0801
## Adding filtdt0802
## Adding filtdt0803
## Adding filtcm0804
## Adding filtcm0805
## Adding filtcm0806
## Adding filtwt0807
## Adding filtwt0808
## Adding filtwt0809
## Adding whldt0811
## Adding whldt0812
## Adding whldt0813
## Adding whlcm0814
## Adding whlcm0815
## Adding whlcm0816
## Adding whlwt0817
## Adding whlwt0818
## Adding whlwt0819
## Writing the image to: images/ump_esxG_intensities.png and calling dev.off().

## Adding filtwt0301
## Adding filtwt0302
## Adding filtwt0303
## Adding whlwt0304
## Adding whlwt0305
## Adding whlwt0306
## Adding whlwt0321
## Adding whlwt0322
## Adding filtwt0323
## Adding filtwt0324
## Adding filtwt0325
## Adding whlwt0326
## Adding filtdt0501
## Adding filtdt0502
## Adding filtdt0503
## Adding filtcm0504
## Adding filtcm0505
## Adding filtcm0506
## Adding whldt0507
## Adding whldt0508
## Adding whldt0509
## Adding whlcm0510
## Adding whlcm0511
## Adding whlcm0512
## Adding filtdt0701
## Adding filtdt0702
## Adding filtdt0703
## Adding filtcm0704
## Adding filtcm0705
## Adding filtcm0706
## Adding filtwt0707
## Adding filtwt0708
## Adding filt0709
## Adding whldt0711
## Adding whldt0712
## Adding whldt0713
## Adding wholcm0714
## Adding whlcm0715
## Adding whlcm0716
## Adding whlwt0717
## Adding whlwt0718
## Adding whlwt0719
## Adding filtdt0801
## Adding filtdt0802
## Adding filtdt0803
## Adding filtcm0804
## Adding filtcm0805
## Adding filtcm0806
## Adding filtwt0807
## Adding filtwt0808
## Adding filtwt0809
## Adding whldt0811
## Adding whldt0812
## Adding whldt0813
## Adding whlcm0814
## Adding whlcm0815
## Adding whlcm0816
## Adding whlwt0817
## Adding whlwt0818
## Adding whlwt0819
## Writing the image to: images/ump_esxH_intensities.png and calling dev.off().

## Adding filtwt0301
## Adding filtwt0302
## Adding filtwt0303
## Adding whlwt0304
## Adding whlwt0305
## Adding whlwt0306
## Adding whlwt0321
## Adding whlwt0322
## Adding filtwt0323
## Adding filtwt0324
## Adding filtwt0325
## Adding whlwt0326
## Adding filtdt0501
## Adding filtdt0502
## Adding filtdt0503
## Adding filtcm0504
## Adding filtcm0505
## Adding filtcm0506
## Adding whldt0507
## Adding whldt0508
## Adding whldt0509
## Adding whlcm0510
## Adding whlcm0511
## Adding whlcm0512
## Adding filtdt0701
## Adding filtdt0702
## Adding filtdt0703
## Adding filtcm0704
## Adding filtcm0705
## Adding filtcm0706
## Adding filtwt0707
## Adding filtwt0708
## Adding filt0709
## Adding whldt0711
## Adding whldt0712
## Adding whldt0713
## Adding wholcm0714
## Adding whlcm0715
## Adding whlcm0716
## Adding whlwt0717
## Adding whlwt0718
## Adding whlwt0719
## Adding filtdt0801
## Adding filtdt0802
## Adding filtdt0803
## Adding filtcm0804
## Adding filtcm0805
## Adding filtcm0806
## Adding filtwt0807
## Adding filtwt0808
## Adding filtwt0809
## Adding whldt0811
## Adding whldt0812
## Adding whldt0813
## Adding whlcm0814
## Adding whlcm0815
## Adding whlcm0816
## Adding whlwt0817
## Adding whlwt0818
## Adding whlwt0819
## Writing the image to: images/ump_lpqh_intensities.png and calling dev.off().

## Adding filtwt0301
## Adding filtwt0302
## Adding filtwt0303
## Adding whlwt0304
## Adding whlwt0305
## Adding whlwt0306
## Adding whlwt0321
## Adding whlwt0322
## Adding filtwt0323
## Adding filtwt0324
## Adding filtwt0325
## Adding whlwt0326
## Adding filtdt0501
## Adding filtdt0502
## Adding filtdt0503
## Adding filtcm0504
## Adding filtcm0505
## Adding filtcm0506
## Adding whldt0507
## Adding whldt0508
## Adding whldt0509
## Adding whlcm0510
## Adding whlcm0511
## Adding whlcm0512
## Adding filtdt0701
## Adding filtdt0702
## Adding filtdt0703
## Adding filtcm0704
## Adding filtcm0705
## Adding filtcm0706
## Adding filtwt0707
## Adding filtwt0708
## Adding filt0709
## Adding whldt0711
## Adding whldt0712
## Adding whldt0713
## Adding wholcm0714
## Adding whlcm0715
## Adding whlcm0716
## Adding whlwt0717
## Adding whlwt0718
## Adding whlwt0719
## Adding filtdt0801
## Adding filtdt0802
## Adding filtdt0803
## Adding filtcm0804
## Adding filtcm0805
## Adding filtcm0806
## Adding filtwt0807
## Adding filtwt0808
## Adding filtwt0809
## Adding whldt0811
## Adding whldt0812
## Adding whldt0813
## Adding whlcm0814
## Adding whlcm0815
## Adding whlcm0816
## Adding whlwt0817
## Adding whlwt0818
## Adding whlwt0819
## Writing the image to: images/ump_groel1_intensities.png and calling dev.off().

## Adding filtwt0301
## Adding filtwt0302
## Adding filtwt0303
## Adding whlwt0304
## Adding whlwt0305
## Adding whlwt0306
## Adding whlwt0321
## Adding whlwt0322
## Adding filtwt0323
## Adding filtwt0324
## Adding filtwt0325
## Adding whlwt0326
## Adding filtdt0501
## Adding filtdt0502
## Adding filtdt0503
## Adding filtcm0504
## Adding filtcm0505
## Adding filtcm0506
## Adding whldt0507
## Adding whldt0508
## Adding whldt0509
## Adding whlcm0510
## Adding whlcm0511
## Adding whlcm0512
## Adding filtdt0701
## Adding filtdt0702
## Adding filtdt0703
## Adding filtcm0704
## Adding filtcm0705
## Adding filtcm0706
## Adding filtwt0707
## Adding filtwt0708
## Adding filt0709
## Adding whldt0711
## Adding whldt0712
## Adding whldt0713
## Adding wholcm0714
## Adding whlcm0715
## Adding whlcm0716
## Adding whlwt0717
## Adding whlwt0718
## Adding whlwt0719
## Adding filtdt0801
## Adding filtdt0802
## Adding filtdt0803
## Adding filtcm0804
## Adding filtcm0805
## Adding filtcm0806
## Adding filtwt0807
## Adding filtwt0808
## Adding filtwt0809
## Adding whldt0811
## Adding whldt0812
## Adding whldt0813
## Adding whlcm0814
## Adding whlcm0815
## Adding whlcm0816
## Adding whlwt0817
## Adding whlwt0818
## Adding whlwt0819
## Writing the image to: images/ump_groel2_intensities.png and calling dev.off().

## Adding filtwt0301
## Adding filtwt0302
## Adding filtwt0303
## Adding whlwt0304
## Adding whlwt0305
## Adding whlwt0306
## Adding whlwt0321
## Adding whlwt0322
## Adding filtwt0323
## Adding filtwt0324
## Adding filtwt0325
## Adding whlwt0326
## Adding filtdt0501
## Adding filtdt0502
## Adding filtdt0503
## Adding filtcm0504
## Adding filtcm0505
## Adding filtcm0506
## Adding whldt0507
## Adding whldt0508
## Adding whldt0509
## Adding whlcm0510
## Adding whlcm0511
## Adding whlcm0512
## Adding filtdt0701
## Adding filtdt0702
## Adding filtdt0703
## Adding filtcm0704
## Adding filtcm0705
## Adding filtcm0706
## Adding filtwt0707
## Adding filtwt0708
## Adding filt0709
## Adding whldt0711
## Adding whldt0712
## Adding whldt0713
## Adding wholcm0714
## Adding whlcm0715
## Adding whlcm0716
## Adding whlwt0717
## Adding whlwt0718
## Adding whlwt0719
## Adding filtdt0801
## Adding filtdt0802
## Adding filtdt0803
## Adding filtcm0804
## Adding filtcm0805
## Adding filtcm0806
## Adding filtwt0807
## Adding filtwt0808
## Adding filtwt0809
## Adding whldt0811
## Adding whldt0812
## Adding whldt0813
## Adding whlcm0814
## Adding whlcm0815
## Adding whlcm0816
## Adding whlwt0817
## Adding whlwt0818
## Adding whlwt0819
## Writing the image to: images/ump_fap_intensities.png and calling dev.off().

## Adding filtwt0301
## Adding filtwt0302
## Adding filtwt0303
## Adding whlwt0304
## Adding whlwt0305
## Adding whlwt0306
## Adding whlwt0321
## Adding whlwt0322
## Adding filtwt0323
## Adding filtwt0324
## Adding filtwt0325
## Adding whlwt0326
## Adding filtdt0501
## Adding filtdt0502
## Adding filtdt0503
## Adding filtcm0504
## Adding filtcm0505
## Adding filtcm0506
## Adding whldt0507
## Adding whldt0508
## Adding whldt0509
## Adding whlcm0510
## Adding whlcm0511
## Adding whlcm0512
## Adding filtdt0701
## Adding filtdt0702
## Adding filtdt0703
## Adding filtcm0704
## Adding filtcm0705
## Adding filtcm0706
## Adding filtwt0707
## Adding filtwt0708
## Adding filt0709
## Adding whldt0711
## Adding whldt0712
## Adding whldt0713
## Adding wholcm0714
## Adding whlcm0715
## Adding whlcm0716
## Adding whlwt0717
## Adding whlwt0718
## Adding whlwt0719
## Adding filtdt0801
## Adding filtdt0802
## Adding filtdt0803
## Adding filtcm0804
## Adding filtcm0805
## Adding filtcm0806
## Adding filtwt0807
## Adding filtwt0808
## Adding filtwt0809
## Adding whldt0811
## Adding whldt0812
## Adding whldt0813
## Adding whlcm0814
## Adding whlcm0815
## Adding whlcm0816
## Adding whlwt0817
## Adding whlwt0818
## Adding whlwt0819
## Writing the image to: images/ump_katg_intensities.png and calling dev.off().

5 Get intensities

##  [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [15] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [29] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [43] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [57] TRUE TRUE TRUE TRUE
##  [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [15] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [29] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [43] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [57] TRUE TRUE TRUE TRUE
## Reading the sample metadata.
## The sample definitions comprises: 60 rows(samples) and 29 columns(metadata fields).
## Matched 2268 annotations and counts.
## Bringing together the count matrix and gene information.
## Some annotations were lost in merging, setting them to 'undefined'.
## The final expressionset has 2284 rows and 60 columns.

6 Pass the data to DEP and see what happens.

## Loading DEP
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:testthat':
## 
##     matches
## The following object is masked from 'package:hpgltools':
## 
##     combine
## The following object is masked from 'package:Biobase':
## 
##     combine
## The following objects are masked from 'package:BiocGenerics':
## 
##     combine, intersect, setdiff, union
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
my_make_se <- function (proteins_unique, columns, expdesign,
                        id_column="ID", name_column="name") {
  assertthat::assert_that(is.data.frame(proteins_unique), is.integer(columns),
                          is.data.frame(expdesign))
  if (any(!c("name", "ID") %in% colnames(proteins_unique))) {
    stop("'name' and/or 'ID' columns are not present in '",
         deparse(substitute(proteins_unique)), "'.\nRun make_unique() to obtain the required columns",
         call. = FALSE)
  }
  if (any(!c("label", "condition", "replicate") %in% colnames(expdesign))) {
    stop("'label', 'condition' and/or 'replicate' columns",
         "are not present in the experimental design", call. = FALSE)
  }
  if (any(!apply(proteins_unique[, columns], 2, is.numeric))) {
    stop("specified 'columns' should be numeric", "\nRun make_se_parse() with the appropriate columns as argument",
         call. = FALSE)
  }
  if (tibble::is.tibble(proteins_unique)) {
    proteins_unique <- as.data.frame(proteins_unique)
  }
  if (tibble::is.tibble(expdesign)) {
    expdesign <- as.data.frame(expdesign)
  }
  rownames(proteins_unique) <- proteins_unique[[name_column]]
  raw <- proteins_unique[, columns]
  raw[raw == 0] <- NA
  raw <- log2(raw)
  ## Perhaps consider the following?
  ## raw <- log1p(raw) / log(2)
  expdesign <- dplyr::mutate(expdesign, condition=make.names(condition))
  ## I changed the following because it didn't make sense to me.
  if (is.null(expdesign[[id_column]])) {
    expdesign <- expdesign %>%
      tidyr::unite(condition, replicate, remove=FALSE)
  }
  rownames(expdesign) <- expdesign[[id_column]]
  matched <- match(make.names(DEP:::delete_prefix(expdesign[["label"]])),
                   make.names(DEP:::delete_prefix(colnames(raw))))
  if (any(is.na(matched))) {
    stop("None of the labels in the experimental design match ",
         "with column names in 'proteins_unique'", "\nRun make_se() with the correct labels in the experimental design",
         "and/or correct columns specification")
  }
  colnames(raw)[matched] <- expdesign[[id_column]]
  raw <- raw[, !is.na(colnames(raw))][rownames(expdesign)]
  row_data <- proteins_unique[, -columns]
  rownames(row_data) <- row_data$name
  se <- SummarizedExperiment(assays = as.matrix(raw), colData = expdesign,
                             rowData = row_data)
  return(se)
}
## Loading DEP
## Loading required package: GenomicRanges
## Loading required package: stats4
## Loading required package: S4Vectors
## 
## Attaching package: 'S4Vectors'
## The following objects are masked from 'package:DEP':
## 
##     first, rename
## The following objects are masked from 'package:dplyr':
## 
##     first, rename
## The following object is masked from 'package:base':
## 
##     expand.grid
## Loading required package: IRanges
## 
## Attaching package: 'IRanges'
## The following objects are masked from 'package:DEP':
## 
##     collapse, desc, slice
## The following objects are masked from 'package:dplyr':
## 
##     collapse, desc, slice
## Loading required package: GenomeInfoDb
## Loading required package: DelayedArray
## Loading required package: matrixStats
## 
## Attaching package: 'matrixStats'
## The following objects are masked from 'package:DEP':
## 
##     count, rowRanges
## The following object is masked from 'package:dplyr':
## 
##     count
## The following objects are masked from 'package:hpgltools':
## 
##     anyMissing, rowMedians
## The following objects are masked from 'package:Biobase':
## 
##     anyMissing, rowMedians
## Loading required package: BiocParallel
## 
## Attaching package: 'DelayedArray'
## The following objects are masked from 'package:matrixStats':
## 
##     colMaxs, colMins, colRanges, rowMaxs, rowMins, rowRanges
## The following objects are masked from 'package:base':
## 
##     aperm, apply, rowsum
## Warning: `is.tibble()` is deprecated, use `is_tibble()`.
## This warning is displayed once per session.

## [1] 2284   60
## [1] 817  60

## vsn2: 2284 x 60 matrix (1 stratum).
## Please use 'meanSdPlot' to verify the fit.

## Loading required package: imputeLCMD
## Loading required package: tmvtnorm
## Loading required package: mvtnorm
## Loading required package: Matrix
## 
## Attaching package: 'Matrix'
## The following object is masked from 'package:S4Vectors':
## 
##     expand
## Loading required package: gmm
## Loading required package: sandwich
## Loading required package: norm
## Loading required package: pcaMethods
## 
## Attaching package: 'pcaMethods'
## The following object is masked from 'package:stats':
## 
##     loadings
## Loading required package: impute
## [1] 1.708

##  s2018_0315Briken01 s2018_0315Briken02 s2018_0315Briken03
##  Min.   :15.4       Min.   :14.5       Min.   :16.1      
##  1st Qu.:21.0       1st Qu.:20.9       1st Qu.:20.8      
##  Median :22.9       Median :22.6       Median :22.9      
##  Mean   :23.2       Mean   :23.1       Mean   :23.2      
##  3rd Qu.:25.1       3rd Qu.:25.0       3rd Qu.:25.2      
##  Max.   :36.2       Max.   :35.8       Max.   :36.0      
##  NA's   :1474       NA's   :1429       NA's   :1364      
##  s2018_0315Briken04 s2018_0315Briken05 s2018_0315Briken06
##  Min.   :14.8       Min.   :14.2       Min.   :13.4      
##  1st Qu.:20.6       1st Qu.:20.6       1st Qu.:20.5      
##  Median :22.4       Median :22.4       Median :22.3      
##  Mean   :22.4       Mean   :22.4       Mean   :22.3      
##  3rd Qu.:24.2       3rd Qu.:24.2       3rd Qu.:24.1      
##  Max.   :32.3       Max.   :31.4       Max.   :31.6      
##  NA's   :615        NA's   :495        NA's   :556       
##  s2018_0315Briken21 s2018_0315Briken22 s2018_0315Briken23
##  Min.   :14.3       Min.   :13.0       Min.   :15.3      
##  1st Qu.:20.5       1st Qu.:20.5       1st Qu.:20.7      
##  Median :22.4       Median :22.3       Median :22.6      
##  Mean   :22.4       Mean   :22.3       Mean   :22.8      
##  3rd Qu.:24.3       3rd Qu.:24.2       3rd Qu.:24.8      
##  Max.   :32.2       Max.   :31.8       Max.   :35.6      
##  NA's   :467        NA's   :417        NA's   :1393      
##  s2018_0315Briken24 s2018_0315Briken25 s2018_0315Briken26
##  Min.   :17.0       Min.   :14.7       Min.   :13.8      
##  1st Qu.:20.9       1st Qu.:20.9       1st Qu.:20.5      
##  Median :22.6       Median :22.7       Median :22.3      
##  Mean   :23.0       Mean   :23.0       Mean   :22.3      
##  3rd Qu.:25.0       3rd Qu.:24.9       3rd Qu.:24.1      
##  Max.   :35.2       Max.   :35.4       Max.   :31.7      
##  NA's   :1343       NA's   :1456       NA's   :459       
##  s2018_0502BrikenDIA01 s2018_0502BrikenDIA02 s2018_0502BrikenDIA03
##  Min.   :16.9          Min.   :15.9          Min.   :17.2         
##  1st Qu.:21.0          1st Qu.:20.5          1st Qu.:20.8         
##  Median :22.6          Median :22.4          Median :22.5         
##  Mean   :23.0          Mean   :22.8          Mean   :22.8         
##  3rd Qu.:24.9          3rd Qu.:24.7          3rd Qu.:24.7         
##  Max.   :36.1          Max.   :35.7          Max.   :35.9         
##  NA's   :1587          NA's   :1485          NA's   :1607         
##  s2018_0502BrikenDIA04 s2018_0502BrikenDIA05 s2018_0502BrikenDIA06
##  Min.   :16.7          Min.   :16.4          Min.   :16.5         
##  1st Qu.:20.6          1st Qu.:20.4          1st Qu.:20.5         
##  Median :22.4          Median :22.3          Median :22.3         
##  Mean   :22.8          Mean   :22.6          Mean   :22.6         
##  3rd Qu.:24.6          3rd Qu.:24.5          3rd Qu.:24.4         
##  Max.   :36.2          Max.   :35.0          Max.   :35.9         
##  NA's   :1449          NA's   :1369          NA's   :1465         
##  s2018_0502BrikenDIA07 s2018_0502BrikenDIA08 s2018_0502BrikenDIA09
##  Min.   :14.0          Min.   :15.1          Min.   :17.7         
##  1st Qu.:20.9          1st Qu.:20.5          1st Qu.:20.8         
##  Median :22.7          Median :22.3          Median :22.4         
##  Mean   :22.7          Mean   :22.4          Mean   :22.5         
##  3rd Qu.:24.6          3rd Qu.:24.1          3rd Qu.:24.0         
##  Max.   :31.8          Max.   :32.0          Max.   :32.1         
##  NA's   :578           NA's   :599           NA's   :1061         
##  s2018_0502BrikenDIA10 s2018_0502BrikenDIA11 s2018_0502BrikenDIA12
##  Min.   :21.7          Min.   :13.5          Min.   :13.9         
##  1st Qu.:24.0          1st Qu.:20.5          1st Qu.:20.6         
##  Median :25.1          Median :22.3          Median :22.4         
##  Mean   :25.4          Mean   :22.3          Mean   :22.4         
##  3rd Qu.:26.6          3rd Qu.:24.1          3rd Qu.:24.2         
##  Max.   :32.4          Max.   :31.8          Max.   :31.3         
##  NA's   :2098          NA's   :570           NA's   :732          
##  s2018_0726Briken01 s2018_0726Briken02 s2018_0726Briken03
##  Min.   :21.0       Min.   :16.7       Min.   :21.1      
##  1st Qu.:24.2       1st Qu.:22.2       1st Qu.:23.5      
##  Median :26.2       Median :24.5       Median :25.3      
##  Mean   :26.2       Mean   :24.4       Mean   :25.7      
##  3rd Qu.:27.7       3rd Qu.:26.2       3rd Qu.:27.5      
##  Max.   :35.1       Max.   :35.5       Max.   :34.4      
##  NA's   :2140       NA's   :2051       NA's   :2166      
##  s2018_0726Briken04 s2018_0726Briken05 s2018_0726Briken06
##  Min.   :21.2       Min.   :19.4       Min.   :18.5      
##  1st Qu.:24.7       1st Qu.:22.6       1st Qu.:22.1      
##  Median :26.4       Median :24.3       Median :24.1      
##  Mean   :26.7       Mean   :24.5       Mean   :24.1      
##  3rd Qu.:28.2       3rd Qu.:26.1       3rd Qu.:26.1      
##  Max.   :36.1       Max.   :34.6       Max.   :34.1      
##  NA's   :2166       NA's   :2096       NA's   :2025      
##  s2018_0726Briken07 s2018_0726Briken08 s2018_0726Briken09
##  Min.   :17.5       Min.   :20.0       Min.   :17.6      
##  1st Qu.:22.6       1st Qu.:23.1       1st Qu.:21.9      
##  Median :24.6       Median :25.0       Median :23.8      
##  Mean   :24.7       Mean   :25.3       Mean   :24.0      
##  3rd Qu.:26.6       3rd Qu.:27.0       3rd Qu.:25.6      
##  Max.   :37.3       Max.   :37.0       Max.   :36.4      
##  NA's   :2021       NA's   :2036       NA's   :1965      
##  s2018_0726Briken11 s2018_0726Briken12 s2018_0726Briken13
##  Min.   :16.3       Min.   :15.7       Min.   :17.7      
##  1st Qu.:21.2       1st Qu.:21.0       1st Qu.:21.3      
##  Median :22.6       Median :22.8       Median :22.8      
##  Mean   :22.7       Mean   :22.8       Mean   :22.9      
##  3rd Qu.:24.4       3rd Qu.:24.5       3rd Qu.:24.3      
##  Max.   :31.2       Max.   :31.4       Max.   :31.5      
##  NA's   :1701       NA's   :1590       NA's   :1758      
##  s2018_0726Briken14 s2018_0726Briken15 s2018_0726Briken16
##  Min.   :16.8       Min.   :16.9       Min.   :14.8      
##  1st Qu.:21.5       1st Qu.:21.2       1st Qu.:20.7      
##  Median :23.0       Median :22.9       Median :22.6      
##  Mean   :23.1       Mean   :22.9       Mean   :22.5      
##  3rd Qu.:24.8       3rd Qu.:24.4       3rd Qu.:24.4      
##  Max.   :32.0       Max.   :32.0       Max.   :31.1      
##  NA's   :1768       NA's   :1702       NA's   :1626      
##  s2018_0726Briken17 s2018_0726Briken18 s2018_0726Briken19
##  Min.   :13.6       Min.   :14.6       Min.   :15.6      
##  1st Qu.:21.0       1st Qu.:20.5       1st Qu.:21.6      
##  Median :22.8       Median :22.1       Median :23.5      
##  Mean   :22.7       Mean   :22.2       Mean   :23.4      
##  3rd Qu.:24.6       3rd Qu.:23.9       3rd Qu.:25.2      
##  Max.   :31.7       Max.   :30.4       Max.   :30.6      
##  NA's   :1686       NA's   :1484       NA's   :1858      
##  s2018_0817BrikenTrypsinDIA01 s2018_0817BrikenTrypsinDIA02
##  Min.   :17.7                 Min.   :17.7                
##  1st Qu.:20.8                 1st Qu.:20.9                
##  Median :22.3                 Median :22.4                
##  Mean   :22.5                 Mean   :22.5                
##  3rd Qu.:23.9                 3rd Qu.:23.9                
##  Max.   :33.8                 Max.   :33.5                
##  NA's   :1723                 NA's   :1704                
##  s2018_0817BrikenTrypsinDIA03 s2018_0817BrikenTrypsinDIA04
##  Min.   :17.2                 Min.   :16.0                
##  1st Qu.:21.0                 1st Qu.:20.9                
##  Median :22.6                 Median :22.7                
##  Mean   :22.7                 Mean   :22.7                
##  3rd Qu.:24.2                 3rd Qu.:24.3                
##  Max.   :33.7                 Max.   :33.3                
##  NA's   :1710                 NA's   :1573                
##  s2018_0817BrikenTrypsinDIA05 s2018_0817BrikenTrypsinDIA06
##  Min.   :17.5                 Min.   :17.3                
##  1st Qu.:20.4                 1st Qu.:20.4                
##  Median :22.0                 Median :22.1                
##  Mean   :22.1                 Mean   :22.2                
##  3rd Qu.:23.6                 3rd Qu.:23.7                
##  Max.   :32.7                 Max.   :32.5                
##  NA's   :1638                 NA's   :1622                
##  s2018_0817BrikenTrypsinDIA07 s2018_0817BrikenTrypsinDIA08
##  Min.   :18.8                 Min.   :19.2                
##  1st Qu.:22.0                 1st Qu.:22.3                
##  Median :23.3                 Median :23.7                
##  Mean   :23.6                 Mean   :23.8                
##  3rd Qu.:24.7                 3rd Qu.:25.0                
##  Max.   :34.1                 Max.   :34.6                
##  NA's   :1825                 NA's   :1776                
##  s2018_0817BrikenTrypsinDIA09 s2018_0817BrikenTrypsinDIA11
##  Min.   :18.4                 Min.   :14.7                
##  1st Qu.:21.2                 1st Qu.:20.2                
##  Median :22.7                 Median :21.7                
##  Mean   :22.9                 Mean   :21.6                
##  3rd Qu.:24.4                 3rd Qu.:23.1                
##  Max.   :33.8                 Max.   :30.1                
##  NA's   :1746                 NA's   :786                 
##  s2018_0817BrikenTrypsinDIA12 s2018_0817BrikenTrypsinDIA13
##  Min.   :14.9                 Min.   :14.3                
##  1st Qu.:20.3                 1st Qu.:20.1                
##  Median :21.7                 Median :21.7                
##  Mean   :21.7                 Mean   :21.6                
##  3rd Qu.:23.0                 3rd Qu.:23.1                
##  Max.   :30.5                 Max.   :30.2                
##  NA's   :789                  NA's   :692                 
##  s2018_0817BrikenTrypsinDIA14 s2018_0817BrikenTrypsinDIA15
##  Min.   :14.7                 Min.   :15.0                
##  1st Qu.:20.2                 1st Qu.:20.2                
##  Median :21.8                 Median :21.7                
##  Mean   :21.7                 Mean   :21.6                
##  3rd Qu.:23.2                 3rd Qu.:23.0                
##  Max.   :30.8                 Max.   :30.3                
##  NA's   :752                  NA's   :632                 
##  s2018_0817BrikenTrypsinDIA16 s2018_0817BrikenTrypsinDIA17
##  Min.   :14.7                 Min.   :13.4                
##  1st Qu.:20.2                 1st Qu.:20.0                
##  Median :21.6                 Median :21.3                
##  Mean   :21.5                 Mean   :21.3                
##  3rd Qu.:23.0                 3rd Qu.:22.7                
##  Max.   :30.2                 Max.   :30.1                
##  NA's   :642                  NA's   :1145                
##  s2018_0817BrikenTrypsinDIA18 s2018_0817BrikenTrypsinDIA19
##  Min.   :14.9                 Min.   :15.4                
##  1st Qu.:20.1                 1st Qu.:20.3                
##  Median :21.7                 Median :21.8                
##  Mean   :21.6                 Mean   :21.7                
##  3rd Qu.:23.2                 3rd Qu.:23.2                
##  Max.   :30.6                 Max.   :30.2                
##  NA's   :799                  NA's   :790
##  s2018_0315Briken01 s2018_0315Briken02 s2018_0315Briken03
##  Min.   :12.0       Min.   :11.3       Min.   :11.2      
##  1st Qu.:16.7       1st Qu.:16.9       1st Qu.:16.8      
##  Median :18.3       Median :18.6       Median :18.5      
##  Mean   :19.3       Mean   :19.5       Mean   :19.5      
##  3rd Qu.:21.5       3rd Qu.:21.6       3rd Qu.:22.1      
##  Max.   :36.2       Max.   :35.8       Max.   :36.0      
##  s2018_0315Briken04 s2018_0315Briken05 s2018_0315Briken06
##  Min.   :11.4       Min.   :11.3       Min.   :11.4      
##  1st Qu.:18.0       1st Qu.:18.8       1st Qu.:18.2      
##  Median :21.1       Median :21.5       Median :21.2      
##  Mean   :20.8       Mean   :21.2       Mean   :20.9      
##  3rd Qu.:23.6       3rd Qu.:23.7       3rd Qu.:23.5      
##  Max.   :32.4       Max.   :31.4       Max.   :31.6      
##  s2018_0315Briken21 s2018_0315Briken22 s2018_0315Briken23
##  Min.   :11.2       Min.   :11.5       Min.   :11.8      
##  1st Qu.:18.6       1st Qu.:18.8       1st Qu.:16.5      
##  Median :21.5       Median :21.5       Median :18.2      
##  Mean   :21.2       Mean   :21.2       Mean   :19.2      
##  3rd Qu.:23.8       3rd Qu.:23.7       3rd Qu.:21.5      
##  Max.   :32.2       Max.   :31.8       Max.   :35.6      
##  s2018_0315Briken24 s2018_0315Briken25 s2018_0315Briken26
##  Min.   :12.1       Min.   :12.1       Min.   :11.8      
##  1st Qu.:16.9       1st Qu.:16.2       1st Qu.:18.7      
##  Median :18.7       Median :17.9       Median :21.4      
##  Mean   :19.6       Mean   :19.0       Mean   :21.1      
##  3rd Qu.:21.9       3rd Qu.:21.4       3rd Qu.:23.5      
##  Max.   :35.2       Max.   :35.4       Max.   :31.7      
##  s2018_0502BrikenDIA01 s2018_0502BrikenDIA02 s2018_0502BrikenDIA03
##  Min.   :12.4          Min.   :10.7          Min.   :12.8         
##  1st Qu.:17.4          1st Qu.:16.9          1st Qu.:17.1         
##  Median :18.9          Median :18.5          Median :18.6         
##  Mean   :19.5          Mean   :19.2          Mean   :19.2         
##  3rd Qu.:21.0          3rd Qu.:21.1          3rd Qu.:20.7         
##  Max.   :36.1          Max.   :35.7          Max.   :35.9         
##  s2018_0502BrikenDIA04 s2018_0502BrikenDIA05 s2018_0502BrikenDIA06
##  Min.   :11.6          Min.   :11.4          Min.   :11.7         
##  1st Qu.:17.3          1st Qu.:17.2          1st Qu.:17.0         
##  Median :18.8          Median :18.8          Median :18.7         
##  Mean   :19.6          Mean   :19.6          Mean   :19.3         
##  3rd Qu.:21.3          3rd Qu.:21.4          3rd Qu.:21.1         
##  Max.   :36.2          Max.   :35.0          Max.   :35.9         
##  s2018_0502BrikenDIA07 s2018_0502BrikenDIA08 s2018_0502BrikenDIA09
##  Min.   :10.7          Min.   :11.8          Min.   :13.5         
##  1st Qu.:18.3          1st Qu.:18.3          1st Qu.:18.5         
##  Median :21.6          Median :21.1          Median :20.4         
##  Mean   :21.2          Mean   :20.9          Mean   :20.6         
##  3rd Qu.:23.9          3rd Qu.:23.5          3rd Qu.:22.5         
##  Max.   :31.8          Max.   :32.0          Max.   :32.1         
##  s2018_0502BrikenDIA10 s2018_0502BrikenDIA11 s2018_0502BrikenDIA12
##  Min.   :16.4          Min.   : 9.62         Min.   :10.9         
##  1st Qu.:21.1          1st Qu.:18.33         1st Qu.:17.2         
##  Median :22.5          Median :21.11         Median :20.8         
##  Mean   :22.5          Mean   :20.93         Mean   :20.4         
##  3rd Qu.:23.7          3rd Qu.:23.47         3rd Qu.:23.3         
##  Max.   :32.4          Max.   :31.81         Max.   :31.3         
##  s2018_0726Briken01 s2018_0726Briken02 s2018_0726Briken03
##  Min.   :15.8       Min.   :12.3       Min.   :15.8      
##  1st Qu.:20.2       1st Qu.:17.3       1st Qu.:20.1      
##  Median :21.4       Median :18.6       Median :21.2      
##  Mean   :21.5       Mean   :18.9       Mean   :21.4      
##  3rd Qu.:22.7       3rd Qu.:19.9       3rd Qu.:22.5      
##  Max.   :35.1       Max.   :35.5       Max.   :34.4      
##  s2018_0726Briken04 s2018_0726Briken05 s2018_0726Briken06
##  Min.   :15.2       Min.   :13.6       Min.   :12.8      
##  1st Qu.:20.7       1st Qu.:18.5       1st Qu.:17.6      
##  Median :21.8       Median :19.8       Median :18.9      
##  Mean   :22.0       Mean   :20.0       Mean   :19.3      
##  3rd Qu.:23.1       3rd Qu.:21.1       3rd Qu.:20.3      
##  Max.   :36.1       Max.   :34.6       Max.   :34.1      
##  s2018_0726Briken07 s2018_0726Briken08 s2018_0726Briken09
##  Min.   :11.9       Min.   :13.8       Min.   :12.2      
##  1st Qu.:17.3       1st Qu.:19.3       1st Qu.:17.2      
##  Median :18.6       Median :20.5       Median :18.4      
##  Mean   :19.0       Mean   :20.8       Mean   :18.9      
##  3rd Qu.:19.9       3rd Qu.:21.9       3rd Qu.:19.9      
##  Max.   :37.3       Max.   :37.0       Max.   :36.4      
##  s2018_0726Briken11 s2018_0726Briken12 s2018_0726Briken13
##  Min.   :11.2       Min.   :12.0       Min.   :11.9      
##  1st Qu.:17.1       1st Qu.:16.4       1st Qu.:17.6      
##  Median :18.6       Median :18.0       Median :19.2      
##  Mean   :19.1       Mean   :18.8       Mean   :19.5      
##  3rd Qu.:20.5       3rd Qu.:20.8       3rd Qu.:20.9      
##  Max.   :31.2       Max.   :31.4       Max.   :31.5      
##  s2018_0726Briken14 s2018_0726Briken15 s2018_0726Briken16
##  Min.   :12.7       Min.   :12.9       Min.   :10.7      
##  1st Qu.:17.3       1st Qu.:17.7       1st Qu.:15.9      
##  Median :18.7       Median :19.1       Median :17.4      
##  Mean   :19.2       Mean   :19.6       Mean   :18.3      
##  3rd Qu.:20.5       3rd Qu.:21.0       3rd Qu.:20.1      
##  Max.   :32.0       Max.   :32.0       Max.   :31.1      
##  s2018_0726Briken17 s2018_0726Briken18 s2018_0726Briken19
##  Min.   :10.8       Min.   :11.2       Min.   :12.0      
##  1st Qu.:15.6       1st Qu.:15.9       1st Qu.:16.4      
##  Median :17.2       Median :17.6       Median :17.9      
##  Mean   :18.1       Mean   :18.4       Mean   :18.4      
##  3rd Qu.:19.7       3rd Qu.:20.8       3rd Qu.:19.6      
##  Max.   :31.7       Max.   :30.4       Max.   :30.6      
##  s2018_0817BrikenTrypsinDIA01 s2018_0817BrikenTrypsinDIA02
##  Min.   :13.0                 Min.   :13.4                
##  1st Qu.:17.5                 1st Qu.:17.6                
##  Median :18.9                 Median :19.0                
##  Mean   :19.3                 Mean   :19.4                
##  3rd Qu.:20.7                 3rd Qu.:20.7                
##  Max.   :33.8                 Max.   :33.5                
##  s2018_0817BrikenTrypsinDIA03 s2018_0817BrikenTrypsinDIA04
##  Min.   :12.6                 Min.   :11.8                
##  1st Qu.:17.4                 1st Qu.:16.9                
##  Median :18.8                 Median :18.4                
##  Mean   :19.3                 Mean   :19.1                
##  3rd Qu.:20.7                 3rd Qu.:20.9                
##  Max.   :33.7                 Max.   :33.3                
##  s2018_0817BrikenTrypsinDIA05 s2018_0817BrikenTrypsinDIA06
##  Min.   :11.0                 Min.   :12.5                
##  1st Qu.:17.4                 1st Qu.:17.4                
##  Median :18.9                 Median :18.9                
##  Mean   :19.2                 Mean   :19.3                
##  3rd Qu.:20.6                 3rd Qu.:20.7                
##  Max.   :32.7                 Max.   :32.5                
##  s2018_0817BrikenTrypsinDIA07 s2018_0817BrikenTrypsinDIA08
##  Min.   :14.2                 Min.   :14.2                
##  1st Qu.:19.1                 1st Qu.:19.3                
##  Median :20.4                 Median :20.7                
##  Mean   :20.6                 Mean   :20.9                
##  3rd Qu.:21.9                 3rd Qu.:22.2                
##  Max.   :34.1                 Max.   :34.6                
##  s2018_0817BrikenTrypsinDIA09 s2018_0817BrikenTrypsinDIA11
##  Min.   :12.9                 Min.   :11.6                
##  1st Qu.:18.3                 1st Qu.:17.4                
##  Median :19.6                 Median :20.2                
##  Mean   :19.9                 Mean   :19.9                
##  3rd Qu.:21.2                 3rd Qu.:22.3                
##  Max.   :33.8                 Max.   :30.1                
##  s2018_0817BrikenTrypsinDIA12 s2018_0817BrikenTrypsinDIA13
##  Min.   :11.5                 Min.   :10.4                
##  1st Qu.:17.7                 1st Qu.:17.7                
##  Median :20.3                 Median :20.4                
##  Mean   :20.0                 Mean   :20.1                
##  3rd Qu.:22.3                 3rd Qu.:22.5                
##  Max.   :30.5                 Max.   :30.2                
##  s2018_0817BrikenTrypsinDIA14 s2018_0817BrikenTrypsinDIA15
##  Min.   :11.7                 Min.   :11.9                
##  1st Qu.:17.7                 1st Qu.:18.0                
##  Median :20.4                 Median :20.6                
##  Mean   :20.1                 Mean   :20.3                
##  3rd Qu.:22.4                 3rd Qu.:22.5                
##  Max.   :30.8                 Max.   :30.3                
##  s2018_0817BrikenTrypsinDIA16 s2018_0817BrikenTrypsinDIA17
##  Min.   :11.6                 Min.   :10.9                
##  1st Qu.:17.8                 1st Qu.:16.6                
##  Median :20.5                 Median :18.8                
##  Mean   :20.1                 Mean   :19.0                
##  3rd Qu.:22.4                 3rd Qu.:21.3                
##  Max.   :30.2                 Max.   :30.1                
##  s2018_0817BrikenTrypsinDIA18 s2018_0817BrikenTrypsinDIA19
##  Min.   :10.4                 Min.   :11.1                
##  1st Qu.:17.3                 1st Qu.:17.3                
##  Median :20.0                 Median :20.3                
##  Mean   :19.8                 Mean   :19.9                
##  3rd Qu.:22.3                 3rd Qu.:22.5                
##  Max.   :30.6                 Max.   :30.2
##  s2018_0315Briken01 s2018_0315Briken02 s2018_0315Briken03
##  Min.   :14.7       Min.   :13.9       Min.   :14.3      
##  1st Qu.:17.0       1st Qu.:16.8       1st Qu.:17.0      
##  Median :17.9       Median :17.8       Median :18.0      
##  Mean   :19.4       Mean   :19.3       Mean   :19.6      
##  3rd Qu.:21.4       3rd Qu.:21.5       3rd Qu.:22.0      
##  Max.   :36.2       Max.   :35.8       Max.   :36.0      
##  s2018_0315Briken04 s2018_0315Briken05 s2018_0315Briken06
##  Min.   :14.8       Min.   :14.2       Min.   :13.4      
##  1st Qu.:18.2       1st Qu.:18.6       1st Qu.:18.3      
##  Median :21.1       Median :21.5       Median :21.2      
##  Mean   :21.1       Mean   :21.4       Mean   :21.2      
##  3rd Qu.:23.6       3rd Qu.:23.7       3rd Qu.:23.5      
##  Max.   :32.4       Max.   :31.4       Max.   :31.6      
##  s2018_0315Briken21 s2018_0315Briken22 s2018_0315Briken23
##  Min.   :14.3       Min.   :13.0       Min.   :14.0      
##  1st Qu.:18.6       1st Qu.:18.9       1st Qu.:16.7      
##  Median :21.5       Median :21.5       Median :17.8      
##  Mean   :21.4       Mean   :21.4       Mean   :19.3      
##  3rd Qu.:23.8       3rd Qu.:23.7       3rd Qu.:21.5      
##  Max.   :32.2       Max.   :31.8       Max.   :35.6      
##  s2018_0315Briken24 s2018_0315Briken25 s2018_0315Briken26
##  Min.   :14.2       Min.   :12.9       Min.   :13.8      
##  1st Qu.:17.0       1st Qu.:17.0       1st Qu.:18.7      
##  Median :18.0       Median :17.9       Median :21.4      
##  Mean   :19.6       Mean   :19.3       Mean   :21.4      
##  3rd Qu.:21.9       3rd Qu.:21.3       3rd Qu.:23.5      
##  Max.   :35.2       Max.   :35.4       Max.   :31.7      
##  s2018_0502BrikenDIA01 s2018_0502BrikenDIA02 s2018_0502BrikenDIA03
##  Min.   :13.6          Min.   :14.0          Min.   :14.3         
##  1st Qu.:16.9          1st Qu.:16.7          1st Qu.:17.0         
##  Median :17.8          Median :17.7          Median :17.7         
##  Mean   :19.1          Mean   :19.0          Mean   :18.9         
##  3rd Qu.:20.3          3rd Qu.:20.8          3rd Qu.:20.0         
##  Max.   :36.1          Max.   :35.7          Max.   :35.9         
##  s2018_0502BrikenDIA04 s2018_0502BrikenDIA05 s2018_0502BrikenDIA06
##  Min.   :14.5          Min.   :13.2          Min.   :14.5         
##  1st Qu.:16.9          1st Qu.:16.8          1st Qu.:17.0         
##  Median :17.8          Median :17.8          Median :17.8         
##  Mean   :19.2          Mean   :19.2          Mean   :19.1         
##  3rd Qu.:21.1          3rd Qu.:21.4          3rd Qu.:20.9         
##  Max.   :36.2          Max.   :35.0          Max.   :35.9         
##  s2018_0502BrikenDIA07 s2018_0502BrikenDIA08 s2018_0502BrikenDIA09
##  Min.   :14.0          Min.   :15.1          Min.   :16.1         
##  1st Qu.:18.6          1st Qu.:18.2          1st Qu.:18.3         
##  Median :21.6          Median :21.1          Median :19.6         
##  Mean   :21.5          Mean   :21.1          Mean   :20.6         
##  3rd Qu.:23.9          3rd Qu.:23.5          3rd Qu.:22.5         
##  Max.   :31.8          Max.   :32.0          Max.   :32.1         
##  s2018_0502BrikenDIA10 s2018_0502BrikenDIA11 s2018_0502BrikenDIA12
##  Min.   :19.8          Min.   :13.5          Min.   :13.9         
##  1st Qu.:21.3          1st Qu.:18.4          1st Qu.:18.1         
##  Median :21.7          Median :21.1          Median :20.7         
##  Mean   :21.9          Mean   :21.2          Mean   :20.9         
##  3rd Qu.:22.1          3rd Qu.:23.5          3rd Qu.:23.3         
##  Max.   :32.4          Max.   :31.8          Max.   :31.3         
##  s2018_0726Briken01 s2018_0726Briken02 s2018_0726Briken03
##  Min.   :18.3       Min.   :15.4       Min.   :16.9      
##  1st Qu.:20.6       1st Qu.:18.5       1st Qu.:19.6      
##  Median :21.2       Median :19.1       Median :20.2      
##  Mean   :21.5       Mean   :19.6       Mean   :20.4      
##  3rd Qu.:21.9       3rd Qu.:19.9       3rd Qu.:20.9      
##  Max.   :35.1       Max.   :35.5       Max.   :34.4      
##  s2018_0726Briken04 s2018_0726Briken05 s2018_0726Briken06
##  Min.   :18.8       Min.   :16.8       Min.   :16.0      
##  1st Qu.:20.9       1st Qu.:19.1       1st Qu.:18.4      
##  Median :21.4       Median :19.7       Median :19.1      
##  Mean   :21.7       Mean   :20.0       Mean   :19.5      
##  3rd Qu.:22.1       3rd Qu.:20.3       3rd Qu.:19.8      
##  Max.   :36.1       Max.   :34.6       Max.   :34.1      
##  s2018_0726Briken07 s2018_0726Briken08 s2018_0726Briken09
##  Min.   :16.1       Min.   :17.0       Min.   :15.3      
##  1st Qu.:18.5       1st Qu.:19.2       1st Qu.:17.9      
##  Median :19.1       Median :19.9       Median :18.6      
##  Mean   :19.7       Mean   :20.3       Mean   :19.2      
##  3rd Qu.:19.9       3rd Qu.:20.6       3rd Qu.:19.4      
##  Max.   :37.3       Max.   :37.0       Max.   :36.4      
##  s2018_0726Briken11 s2018_0726Briken12 s2018_0726Briken13
##  Min.   :15.5       Min.   :15.7       Min.   :16.4      
##  1st Qu.:18.1       1st Qu.:18.0       1st Qu.:18.4      
##  Median :18.7       Median :18.7       Median :18.9      
##  Mean   :19.5       Mean   :19.6       Mean   :19.6      
##  3rd Qu.:19.7       3rd Qu.:20.5       3rd Qu.:19.8      
##  Max.   :31.2       Max.   :31.4       Max.   :31.5      
##  s2018_0726Briken14 s2018_0726Briken15 s2018_0726Briken16
##  Min.   :16.3       Min.   :16.1       Min.   :14.8      
##  1st Qu.:18.2       1st Qu.:18.4       1st Qu.:17.5      
##  Median :18.8       Median :19.0       Median :18.2      
##  Mean   :19.6       Mean   :19.8       Mean   :19.2      
##  3rd Qu.:19.7       3rd Qu.:20.0       3rd Qu.:19.7      
##  Max.   :32.0       Max.   :32.0       Max.   :31.1      
##  s2018_0726Briken17 s2018_0726Briken18 s2018_0726Briken19
##  Min.   :13.6       Min.   :14.6       Min.   :15.6      
##  1st Qu.:17.7       1st Qu.:17.4       1st Qu.:18.6      
##  Median :18.4       Median :18.1       Median :19.2      
##  Mean   :19.3       Mean   :19.2       Mean   :19.8      
##  3rd Qu.:19.6       3rd Qu.:20.8       3rd Qu.:20.0      
##  Max.   :31.7       Max.   :30.4       Max.   :30.6      
##  s2018_0817BrikenTrypsinDIA01 s2018_0817BrikenTrypsinDIA02
##  Min.   :15.5                 Min.   :16.2                
##  1st Qu.:17.7                 1st Qu.:18.1                
##  Median :18.3                 Median :18.6                
##  Mean   :19.1                 Mean   :19.4                
##  3rd Qu.:19.3                 3rd Qu.:19.7                
##  Max.   :33.8                 Max.   :33.5                
##  s2018_0817BrikenTrypsinDIA03 s2018_0817BrikenTrypsinDIA04
##  Min.   :16.2                 Min.   :16.1                
##  1st Qu.:18.2                 1st Qu.:18.0                
##  Median :18.8                 Median :18.7                
##  Mean   :19.6                 Mean   :19.6                
##  3rd Qu.:19.8                 3rd Qu.:20.6                
##  Max.   :33.7                 Max.   :33.3                
##  s2018_0817BrikenTrypsinDIA05 s2018_0817BrikenTrypsinDIA06
##  Min.   :15.8                 Min.   :15.9                
##  1st Qu.:17.6                 1st Qu.:17.7                
##  Median :18.2                 Median :18.3                
##  Mean   :19.1                 Mean   :19.2                
##  3rd Qu.:19.6                 3rd Qu.:19.8                
##  Max.   :32.7                 Max.   :32.5                
##  s2018_0817BrikenTrypsinDIA07 s2018_0817BrikenTrypsinDIA08
##  Min.   :16.9                 Min.   :17.6                
##  1st Qu.:19.1                 1st Qu.:19.5                
##  Median :19.6                 Median :20.0                
##  Mean   :20.2                 Mean   :20.7                
##  3rd Qu.:20.4                 3rd Qu.:20.8                
##  Max.   :34.1                 Max.   :34.6                
##  s2018_0817BrikenTrypsinDIA09 s2018_0817BrikenTrypsinDIA11
##  Min.   :16.2                 Min.   :14.7                
##  1st Qu.:18.4                 1st Qu.:18.1                
##  Median :18.9                 Median :20.2                
##  Mean   :19.7                 Mean   :20.3                
##  3rd Qu.:19.9                 3rd Qu.:22.3                
##  Max.   :33.8                 Max.   :30.1                
##  s2018_0817BrikenTrypsinDIA12 s2018_0817BrikenTrypsinDIA13
##  Min.   :14.9                 Min.   :14.3                
##  1st Qu.:18.1                 1st Qu.:18.2                
##  Median :20.2                 Median :20.4                
##  Mean   :20.4                 Mean   :20.5                
##  3rd Qu.:22.3                 3rd Qu.:22.5                
##  Max.   :30.5                 Max.   :30.2                
##  s2018_0817BrikenTrypsinDIA14 s2018_0817BrikenTrypsinDIA15
##  Min.   :14.7                 Min.   :15.0                
##  1st Qu.:18.1                 1st Qu.:18.3                
##  Median :20.3                 Median :20.6                
##  Mean   :20.4                 Mean   :20.6                
##  3rd Qu.:22.4                 3rd Qu.:22.5                
##  Max.   :30.8                 Max.   :30.3                
##  s2018_0817BrikenTrypsinDIA16 s2018_0817BrikenTrypsinDIA17
##  Min.   :14.7                 Min.   :13.4                
##  1st Qu.:18.2                 1st Qu.:17.6                
##  Median :20.5                 Median :18.5                
##  Mean   :20.5                 Mean   :19.5                
##  3rd Qu.:22.4                 3rd Qu.:21.3                
##  Max.   :30.2                 Max.   :30.1                
##  s2018_0817BrikenTrypsinDIA18 s2018_0817BrikenTrypsinDIA19
##  Min.   :14.9                 Min.   :15.4                
##  1st Qu.:18.0                 1st Qu.:18.1                
##  Median :20.0                 Median :20.2                
##  Mean   :20.3                 Mean   :20.4                
##  3rd Qu.:22.3                 3rd Qu.:22.5                
##  Max.   :30.6                 Max.   :30.2
##           s2018_0315Briken01           s2018_0315Briken02 
##                        18787                        19711 
##           s2018_0315Briken03           s2018_0315Briken04 
##                        21308                        37463 
##           s2018_0315Briken05           s2018_0315Briken06 
##                        40130                        38550 
##           s2018_0315Briken21           s2018_0315Briken22 
##                        40749                        41648 
##           s2018_0315Briken23           s2018_0315Briken24 
##                        20354                        21682 
##           s2018_0315Briken25           s2018_0315Briken26 
##                        19059                        40686 
##        s2018_0502BrikenDIA01        s2018_0502BrikenDIA02 
##                        16065                        18204 
##        s2018_0502BrikenDIA03        s2018_0502BrikenDIA04 
##                        15465                        19049 
##        s2018_0502BrikenDIA05        s2018_0502BrikenDIA06 
##                        20713                        18498 
##        s2018_0502BrikenDIA07        s2018_0502BrikenDIA08 
##                        38739                        37680 
##        s2018_0502BrikenDIA09        s2018_0502BrikenDIA10 
##                        27574                         4725 
##        s2018_0502BrikenDIA11        s2018_0502BrikenDIA12 
##                        38297                        34740 
##           s2018_0726Briken01           s2018_0726Briken02 
##                         3775                         5687 
##           s2018_0726Briken03           s2018_0726Briken04 
##                         3029                         3150 
##           s2018_0726Briken05           s2018_0726Briken06 
##                         4600                         6253 
##           s2018_0726Briken07           s2018_0726Briken08 
##                         6483                         6277 
##           s2018_0726Briken09           s2018_0726Briken11 
##                         7660                        13263 
##           s2018_0726Briken12           s2018_0726Briken13 
##                        15807                        12023 
##           s2018_0726Briken14           s2018_0726Briken15 
##                        11908                        13331 
##           s2018_0726Briken16           s2018_0726Briken17 
##                        14817                        13598 
##           s2018_0726Briken18           s2018_0726Briken19 
##                        17738                         9966 
## s2018_0817BrikenTrypsinDIA01 s2018_0817BrikenTrypsinDIA02 
##                        12643                        13059 
## s2018_0817BrikenTrypsinDIA03 s2018_0817BrikenTrypsinDIA04 
##                        13026                        16118 
## s2018_0817BrikenTrypsinDIA05 s2018_0817BrikenTrypsinDIA06 
##                        14301                        14682 
## s2018_0817BrikenTrypsinDIA07 s2018_0817BrikenTrypsinDIA08 
##                        10812                        12111 
## s2018_0817BrikenTrypsinDIA09 s2018_0817BrikenTrypsinDIA11 
##                        12316                        32394 
## s2018_0817BrikenTrypsinDIA12 s2018_0817BrikenTrypsinDIA13 
##                        32368                        34396 
## s2018_0817BrikenTrypsinDIA14 s2018_0817BrikenTrypsinDIA15 
##                        33222                        35731 
## s2018_0817BrikenTrypsinDIA16 s2018_0817BrikenTrypsinDIA17 
##                        35382                        24299 
## s2018_0817BrikenTrypsinDIA18 s2018_0817BrikenTrypsinDIA19 
##                        32064                        32437
##           s2018_0315Briken01           s2018_0315Briken02 
##                        44142                        44508 
##           s2018_0315Briken03           s2018_0315Briken04 
##                        44607                        47599 
##           s2018_0315Briken05           s2018_0315Briken06 
##                        48416                        47737 
##           s2018_0315Briken21           s2018_0315Briken22 
##                        48367                        48324 
##           s2018_0315Briken23           s2018_0315Briken24 
##                        43908                        44840 
##           s2018_0315Briken25           s2018_0315Briken26 
##                        43375                        48116 
##        s2018_0502BrikenDIA01        s2018_0502BrikenDIA02 
##                        44623                        43961 
##        s2018_0502BrikenDIA03        s2018_0502BrikenDIA04 
##                        43897                        44772 
##        s2018_0502BrikenDIA05        s2018_0502BrikenDIA06 
##                        44773                        44136 
##        s2018_0502BrikenDIA07        s2018_0502BrikenDIA08 
##                        48339                        47675 
##        s2018_0502BrikenDIA09        s2018_0502BrikenDIA10 
##                        47076                        51302 
##        s2018_0502BrikenDIA11        s2018_0502BrikenDIA12 
##                        47798                        46538 
##           s2018_0726Briken01           s2018_0726Briken02 
##                        49165                        43236 
##           s2018_0726Briken03           s2018_0726Briken04 
##                        48912                        50227 
##           s2018_0726Briken05           s2018_0726Briken06 
##                        45579                        44054 
##           s2018_0726Briken07           s2018_0726Briken08 
##                        43388                        47556 
##           s2018_0726Briken09           s2018_0726Briken11 
##                        43215                        43641 
##           s2018_0726Briken12           s2018_0726Briken13 
##                        42994                        44536 
##           s2018_0726Briken14           s2018_0726Briken15 
##                        43918                        44745 
##           s2018_0726Briken16           s2018_0726Briken17 
##                        41722                        41243 
##           s2018_0726Briken18           s2018_0726Briken19 
##                        42090                        42122 
## s2018_0817BrikenTrypsinDIA01 s2018_0817BrikenTrypsinDIA02 
##                        44180                        44239 
## s2018_0817BrikenTrypsinDIA03 s2018_0817BrikenTrypsinDIA04 
##                        44079                        43640 
## s2018_0817BrikenTrypsinDIA05 s2018_0817BrikenTrypsinDIA06 
##                        43872                        44005 
## s2018_0817BrikenTrypsinDIA07 s2018_0817BrikenTrypsinDIA08 
##                        47115                        47749 
## s2018_0817BrikenTrypsinDIA09 s2018_0817BrikenTrypsinDIA11 
##                        45503                        45549 
## s2018_0817BrikenTrypsinDIA12 s2018_0817BrikenTrypsinDIA13 
##                        45785                        45820 
## s2018_0817BrikenTrypsinDIA14 s2018_0817BrikenTrypsinDIA15 
##                        45830                        46285 
## s2018_0817BrikenTrypsinDIA16 s2018_0817BrikenTrypsinDIA17 
##                        45903                        43394 
## s2018_0817BrikenTrypsinDIA18 s2018_0817BrikenTrypsinDIA19 
##                        45218                        45495
## Tested contrasts: wt_filtrate_vs_wt_whole, wt_filtrate_vs_delta_filtrate, wt_filtrate_vs_comp_filtrate, wt_filtrate_vs_delta_whole, wt_filtrate_vs_comp_whole, wt_whole_vs_delta_filtrate, wt_whole_vs_comp_filtrate, wt_whole_vs_delta_whole, wt_whole_vs_comp_whole, delta_filtrate_vs_comp_filtrate, delta_filtrate_vs_delta_whole, delta_filtrate_vs_comp_whole, comp_filtrate_vs_delta_whole, comp_filtrate_vs_comp_whole, delta_whole_vs_comp_whole
## Tested contrasts: wt_filtrate_vs_wt_whole, delta_filtrate_vs_wt_filtrate, comp_filtrate_vs_wt_filtrate, wt_filtrate_vs_delta_filtrate, wt_filtrate_vs_comp_filtrate, wt_whole_vs_delta_whole, wt_whole_vs_comp_whole

## Warning: The input is a data frame, convert it to the matrix.

## Saving to: excel/dep_result.xlsx
## Note: zip::zip() is deprecated, please use zip::zipr() instead

7 Minor change to plot_missval

DEP has a neat function to plot missing values. Sadly, it does not return the actual matrix, only the plot. This is nice and all, but I need the matrix, ergo this minor change.

##  s2018_0315Briken01 s2018_0315Briken02 s2018_0315Briken03
##  Min.   :0.000      Min.   :0.000      Min.   :0.000     
##  1st Qu.:0.000      1st Qu.:0.000      1st Qu.:0.000     
##  Median :0.000      Median :0.000      Median :0.000     
##  Mean   :0.355      Mean   :0.374      Mean   :0.403     
##  3rd Qu.:1.000      3rd Qu.:1.000      3rd Qu.:1.000     
##  Max.   :1.000      Max.   :1.000      Max.   :1.000     
##  s2018_0315Briken04 s2018_0315Briken05 s2018_0315Briken06
##  Min.   :0.000      Min.   :0.000      Min.   :0.000     
##  1st Qu.:0.000      1st Qu.:1.000      1st Qu.:1.000     
##  Median :1.000      Median :1.000      Median :1.000     
##  Mean   :0.731      Mean   :0.783      Mean   :0.757     
##  3rd Qu.:1.000      3rd Qu.:1.000      3rd Qu.:1.000     
##  Max.   :1.000      Max.   :1.000      Max.   :1.000     
##  s2018_0315Briken21 s2018_0315Briken22 s2018_0315Briken23
##  Min.   :0.000      Min.   :0.000      Min.   :0.00      
##  1st Qu.:1.000      1st Qu.:1.000      1st Qu.:0.00      
##  Median :1.000      Median :1.000      Median :0.00      
##  Mean   :0.795      Mean   :0.817      Mean   :0.39      
##  3rd Qu.:1.000      3rd Qu.:1.000      3rd Qu.:1.00      
##  Max.   :1.000      Max.   :1.000      Max.   :1.00      
##  s2018_0315Briken24 s2018_0315Briken25 s2018_0315Briken26
##  Min.   :0.000      Min.   :0.000      Min.   :0.000     
##  1st Qu.:0.000      1st Qu.:0.000      1st Qu.:1.000     
##  Median :0.000      Median :0.000      Median :1.000     
##  Mean   :0.412      Mean   :0.362      Mean   :0.799     
##  3rd Qu.:1.000      3rd Qu.:1.000      3rd Qu.:1.000     
##  Max.   :1.000      Max.   :1.000      Max.   :1.000     
##  s2018_0502BrikenDIA01 s2018_0502BrikenDIA02 s2018_0502BrikenDIA03
##  Min.   :0.000         Min.   :0.00          Min.   :0.000        
##  1st Qu.:0.000         1st Qu.:0.00          1st Qu.:0.000        
##  Median :0.000         Median :0.00          Median :0.000        
##  Mean   :0.305         Mean   :0.35          Mean   :0.296        
##  3rd Qu.:1.000         3rd Qu.:1.00          3rd Qu.:1.000        
##  Max.   :1.000         Max.   :1.00          Max.   :1.000        
##  s2018_0502BrikenDIA04 s2018_0502BrikenDIA05 s2018_0502BrikenDIA06
##  Min.   :0.000         Min.   :0.000         Min.   :0.000        
##  1st Qu.:0.000         1st Qu.:0.000         1st Qu.:0.000        
##  Median :0.000         Median :0.000         Median :0.000        
##  Mean   :0.366         Mean   :0.401         Mean   :0.359        
##  3rd Qu.:1.000         3rd Qu.:1.000         3rd Qu.:1.000        
##  Max.   :1.000         Max.   :1.000         Max.   :1.000        
##  s2018_0502BrikenDIA07 s2018_0502BrikenDIA08 s2018_0502BrikenDIA09
##  Min.   :0.000         Min.   :0.000         Min.   :0.000        
##  1st Qu.:0.000         1st Qu.:0.000         1st Qu.:0.000        
##  Median :1.000         Median :1.000         Median :1.000        
##  Mean   :0.747         Mean   :0.738         Mean   :0.535        
##  3rd Qu.:1.000         3rd Qu.:1.000         3rd Qu.:1.000        
##  Max.   :1.000         Max.   :1.000         Max.   :1.000        
##  s2018_0502BrikenDIA10 s2018_0502BrikenDIA11 s2018_0502BrikenDIA12
##  Min.   :0.0000        Min.   :0.00          Min.   :0.000        
##  1st Qu.:0.0000        1st Qu.:1.00          1st Qu.:0.000        
##  Median :0.0000        Median :1.00          Median :1.000        
##  Mean   :0.0814        Mean   :0.75          Mean   :0.679        
##  3rd Qu.:0.0000        3rd Qu.:1.00          3rd Qu.:1.000        
##  Max.   :1.0000        Max.   :1.00          Max.   :1.000        
##  s2018_0726Briken01 s2018_0726Briken02 s2018_0726Briken03
##  Min.   :0.000      Min.   :0.000      Min.   :0.0000    
##  1st Qu.:0.000      1st Qu.:0.000      1st Qu.:0.0000    
##  Median :0.000      Median :0.000      Median :0.0000    
##  Mean   :0.063      Mean   :0.102      Mean   :0.0517    
##  3rd Qu.:0.000      3rd Qu.:0.000      3rd Qu.:0.0000    
##  Max.   :1.000      Max.   :1.000      Max.   :1.0000    
##  s2018_0726Briken04 s2018_0726Briken05 s2018_0726Briken06
##  Min.   :0.0000     Min.   :0.0000     Min.   :0.000     
##  1st Qu.:0.0000     1st Qu.:0.0000     1st Qu.:0.000     
##  Median :0.0000     Median :0.0000     Median :0.000     
##  Mean   :0.0517     Mean   :0.0823     Mean   :0.113     
##  3rd Qu.:0.0000     3rd Qu.:0.0000     3rd Qu.:0.000     
##  Max.   :1.0000     Max.   :1.0000     Max.   :1.000     
##  s2018_0726Briken07 s2018_0726Briken08 s2018_0726Briken09
##  Min.   :0.000      Min.   :0.000      Min.   :0.00      
##  1st Qu.:0.000      1st Qu.:0.000      1st Qu.:0.00      
##  Median :0.000      Median :0.000      Median :0.00      
##  Mean   :0.115      Mean   :0.109      Mean   :0.14      
##  3rd Qu.:0.000      3rd Qu.:0.000      3rd Qu.:0.00      
##  Max.   :1.000      Max.   :1.000      Max.   :1.00      
##  s2018_0726Briken11 s2018_0726Briken12 s2018_0726Briken13
##  Min.   :0.000      Min.   :0.000      Min.   :0.00      
##  1st Qu.:0.000      1st Qu.:0.000      1st Qu.:0.00      
##  Median :0.000      Median :0.000      Median :0.00      
##  Mean   :0.255      Mean   :0.304      Mean   :0.23      
##  3rd Qu.:1.000      3rd Qu.:1.000      3rd Qu.:0.00      
##  Max.   :1.000      Max.   :1.000      Max.   :1.00      
##  s2018_0726Briken14 s2018_0726Briken15 s2018_0726Briken16
##  Min.   :0.000      Min.   :0.000      Min.   :0.000     
##  1st Qu.:0.000      1st Qu.:0.000      1st Qu.:0.000     
##  Median :0.000      Median :0.000      Median :0.000     
##  Mean   :0.226      Mean   :0.255      Mean   :0.288     
##  3rd Qu.:0.000      3rd Qu.:1.000      3rd Qu.:1.000     
##  Max.   :1.000      Max.   :1.000      Max.   :1.000     
##  s2018_0726Briken17 s2018_0726Briken18 s2018_0726Briken19
##  Min.   :0.000      Min.   :0.00       Min.   :0.000     
##  1st Qu.:0.000      1st Qu.:0.00       1st Qu.:0.000     
##  Median :0.000      Median :0.00       Median :0.000     
##  Mean   :0.262      Mean   :0.35       Mean   :0.186     
##  3rd Qu.:1.000      3rd Qu.:1.00       3rd Qu.:0.000     
##  Max.   :1.000      Max.   :1.00       Max.   :1.000     
##  s2018_0817BrikenTrypsinDIA01 s2018_0817BrikenTrypsinDIA02
##  Min.   :0.000                Min.   :0.000               
##  1st Qu.:0.000                1st Qu.:0.000               
##  Median :0.000                Median :0.000               
##  Mean   :0.246                Mean   :0.254               
##  3rd Qu.:0.000                3rd Qu.:1.000               
##  Max.   :1.000                Max.   :1.000               
##  s2018_0817BrikenTrypsinDIA03 s2018_0817BrikenTrypsinDIA04
##  Min.   :0.000                Min.   :0.000               
##  1st Qu.:0.000                1st Qu.:0.000               
##  Median :0.000                Median :0.000               
##  Mean   :0.251                Mean   :0.311               
##  3rd Qu.:1.000                3rd Qu.:1.000               
##  Max.   :1.000                Max.   :1.000               
##  s2018_0817BrikenTrypsinDIA05 s2018_0817BrikenTrypsinDIA06
##  Min.   :0.000                Min.   :0.00                
##  1st Qu.:0.000                1st Qu.:0.00                
##  Median :0.000                Median :0.00                
##  Mean   :0.283                Mean   :0.29                
##  3rd Qu.:1.000                3rd Qu.:1.00                
##  Max.   :1.000                Max.   :1.00                
##  s2018_0817BrikenTrypsinDIA07 s2018_0817BrikenTrypsinDIA08
##  Min.   :0.000                Min.   :0.000               
##  1st Qu.:0.000                1st Qu.:0.000               
##  Median :0.000                Median :0.000               
##  Mean   :0.201                Mean   :0.222               
##  3rd Qu.:0.000                3rd Qu.:0.000               
##  Max.   :1.000                Max.   :1.000               
##  s2018_0817BrikenTrypsinDIA09 s2018_0817BrikenTrypsinDIA11
##  Min.   :0.000                Min.   :0.000               
##  1st Qu.:0.000                1st Qu.:0.000               
##  Median :0.000                Median :1.000               
##  Mean   :0.236                Mean   :0.656               
##  3rd Qu.:0.000                3rd Qu.:1.000               
##  Max.   :1.000                Max.   :1.000               
##  s2018_0817BrikenTrypsinDIA12 s2018_0817BrikenTrypsinDIA13
##  Min.   :0.000                Min.   :0.000               
##  1st Qu.:0.000                1st Qu.:0.000               
##  Median :1.000                Median :1.000               
##  Mean   :0.655                Mean   :0.697               
##  3rd Qu.:1.000                3rd Qu.:1.000               
##  Max.   :1.000                Max.   :1.000               
##  s2018_0817BrikenTrypsinDIA14 s2018_0817BrikenTrypsinDIA15
##  Min.   :0.000                Min.   :0.000               
##  1st Qu.:0.000                1st Qu.:0.000               
##  Median :1.000                Median :1.000               
##  Mean   :0.671                Mean   :0.723               
##  3rd Qu.:1.000                3rd Qu.:1.000               
##  Max.   :1.000                Max.   :1.000               
##  s2018_0817BrikenTrypsinDIA16 s2018_0817BrikenTrypsinDIA17
##  Min.   :0.000                Min.   :0.000               
##  1st Qu.:0.000                1st Qu.:0.000               
##  Median :1.000                Median :0.000               
##  Mean   :0.719                Mean   :0.499               
##  3rd Qu.:1.000                3rd Qu.:1.000               
##  Max.   :1.000                Max.   :1.000               
##  s2018_0817BrikenTrypsinDIA18 s2018_0817BrikenTrypsinDIA19
##  Min.   :0.00                 Min.   :0.000               
##  1st Qu.:0.00                 1st Qu.:0.000               
##  Median :1.00                 Median :1.000               
##  Mean   :0.65                 Mean   :0.654               
##  3rd Qu.:1.00                 3rd Qu.:1.000               
##  Max.   :1.00                 Max.   :1.000
## iRT_Kit  Rv0001  Rv0002  Rv0003  Rv0005  Rv0006 
##      35      22      57      16      50      57
##           s2018_0315Briken01           s2018_0315Briken02 
##                          810                          855 
##           s2018_0315Briken03           s2018_0315Briken04 
##                          920                         1669 
##           s2018_0315Briken05           s2018_0315Briken06 
##                         1789                         1728 
##           s2018_0315Briken21           s2018_0315Briken22 
##                         1817                         1867 
##           s2018_0315Briken23           s2018_0315Briken24 
##                          891                          941 
##           s2018_0315Briken25           s2018_0315Briken26 
##                          828                         1825 
##        s2018_0502BrikenDIA01        s2018_0502BrikenDIA02 
##                          697                          799 
##        s2018_0502BrikenDIA03        s2018_0502BrikenDIA04 
##                          677                          835 
##        s2018_0502BrikenDIA05        s2018_0502BrikenDIA06 
##                          915                          819 
##        s2018_0502BrikenDIA07        s2018_0502BrikenDIA08 
##                         1706                         1685 
##        s2018_0502BrikenDIA09        s2018_0502BrikenDIA10 
##                         1223                          186 
##        s2018_0502BrikenDIA11        s2018_0502BrikenDIA12 
##                         1714                         1552 
##           s2018_0726Briken01           s2018_0726Briken02 
##                          144                          233 
##           s2018_0726Briken03           s2018_0726Briken04 
##                          118                          118 
##           s2018_0726Briken05           s2018_0726Briken06 
##                          188                          259 
##           s2018_0726Briken07           s2018_0726Briken08 
##                          263                          248 
##           s2018_0726Briken09           s2018_0726Briken11 
##                          319                          583 
##           s2018_0726Briken12           s2018_0726Briken13 
##                          694                          526 
##           s2018_0726Briken14           s2018_0726Briken15 
##                          516                          582 
##           s2018_0726Briken16           s2018_0726Briken17 
##                          658                          598 
##           s2018_0726Briken18           s2018_0726Briken19 
##                          800                          426 
## s2018_0817BrikenTrypsinDIA01 s2018_0817BrikenTrypsinDIA02 
##                          561                          580 
## s2018_0817BrikenTrypsinDIA03 s2018_0817BrikenTrypsinDIA04 
##                          574                          711 
## s2018_0817BrikenTrypsinDIA05 s2018_0817BrikenTrypsinDIA06 
##                          646                          662 
## s2018_0817BrikenTrypsinDIA07 s2018_0817BrikenTrypsinDIA08 
##                          459                          508 
## s2018_0817BrikenTrypsinDIA09 s2018_0817BrikenTrypsinDIA11 
##                          538                         1498 
## s2018_0817BrikenTrypsinDIA12 s2018_0817BrikenTrypsinDIA13 
##                         1495                         1592 
## s2018_0817BrikenTrypsinDIA14 s2018_0817BrikenTrypsinDIA15 
##                         1532                         1652 
## s2018_0817BrikenTrypsinDIA16 s2018_0817BrikenTrypsinDIA17 
##                         1642                         1139 
## s2018_0817BrikenTrypsinDIA18 s2018_0817BrikenTrypsinDIA19 
##                         1485                         1494

8 Request 20190523

Compare our ‘normal’ openswath output via hpgltools analysis vs. the umpire version. Secondary goal: With and without imputation.

## Loading SWATH2stats
## Found the same mzXML files in the annotations and data.
## Number of non-decoy peptides: 21557
## Number of decoy peptides: 939
## Decoy rate: 0.0436

## The average FDR by run on assay level is 0.009
## The average FDR by run on peptide level is 0.01
## The average FDR by run on protein level is 0.047

## Target assay FDR: 0.02
## Required overall m-score cutoff: 0.0070795
## achieving assay FDR: 0.0181
## Target protein FDR: 0.02
## Required overall m-score cutoff: 0.00089125
## achieving protein FDR: 0.0182
## Original dimension: 133447, new dimension: 128204, difference: 5243.
## Peptides need to have been quantified in more conditions than: 9.6 in order to pass this percentage-based threshold.
## Fraction of peptides selected: 0.11
## Original dimension: 135427, new dimension: 33028, difference: 102399.
## Target protein FDR: 0.000891250938133746
## Required overall m-score cutoff: 0.01
## achieving protein FDR: 0
## filter_mscore_fdr is filtering the data...
## finding m-score cutoff to achieve desired protein FDR in protein master list..
## finding m-score cutoff to achieve desired global peptide FDR..
## Target peptide FDR: 0.05
## Required overall m-score cutoff: 0.01
## Achieving peptide FDR: 0
## Proteins selected: 
## Total proteins selected: 2999
## Final target proteins: 2999
## Final decoy proteins: 0
## Peptides mapping to these protein entries selected:
## Total mapping peptides: 20921
## Final target peptides: 20921
## Final decoy peptides: 0
## Total peptides selected from:
## Total peptides: 20921
## Final target peptides: 20921
## Final decoy peptides: 0
## Individual run FDR quality of the peptides was not calculated
## as not every run contains a decoy.
## The decoys have been removed from the returned data.
## Number of proteins detected: 3016
## Protein identifiers: Rv2524c, Rv3716c, Rv1270c, Rv0724, Rv0161, Rv2535c
## Number of proteins detected that are supported by a proteotypic peptide: 2888
## Number of proteotypic peptides detected: 20772
## Number of proteins detected: 2890
## First 6 protein identifiers: Rv2524c, Rv3716c, Rv1270c, Rv0724, Rv0161, Rv2535c
## Before filtering:
##   Number of proteins: 2888
##   Number of peptides: 20772
## 
## Percentage of peptides removed: 21.87%
## 
## After filtering:
##   Number of proteins: 2861
##   Number of peptides: 16230
## Before filtering:
##   Number of proteins: 2861
##   Number of peptides: 16230
## 
## Percentage of peptides removed: 0.04%
## 
## After filtering:
##   Number of proteins: 2603
##   Number of peptides: 16223
## Protein overview matrix results/swath2stats/20180913/osw_protein_all.csv written to working folder.
## [1] 3873   13
## Protein overview matrix results/swath2stats/20180913/osw_protein_matrix_mscore.csv written to working folder.
## [1] 2999   13
## Peptide overview matrix results/swath2stats/20180913/osw_peptide_matrix_mscore.csv written to working folder.
## [1] 20921    13
## Protein overview matrix results/swath2stats/20180913/osw_protein_matrix_filtered.csv written to working folder.
## [1] 2603   13
## Peptide overview matrix results/swath2stats/20180913/osw_peptide_matrix_filtered.csv written to working folder.
## [1] 93860    13
## The library contains 5 transitions per precursor.
## The data table was transformed into a table containing one row per transition.
## One or several columns required by MSstats were not in the data. The columns were created and filled with NAs.
## Missing columns: productcharge, isotopelabeltype
## isotopelabeltype was filled with light.
##  [1] "X2018_0502BrikenDIA01.mzML"       
##  [2] "X2018_0502BrikenDIA02.mzML"       
##  [3] "X2018_0502BrikenDIA03.mzML"       
##  [4] "X2018_0502BrikenDIA04.mzML"       
##  [5] "X2018_0502BrikenDIA05.mzML"       
##  [6] "X2018_0502BrikenDIA06.mzML"       
##  [7] "X2018_0502BrikenDIA07.mzML"       
##  [8] "X2018_0502BrikenDIA08.mzML"       
##  [9] "X2018_0502BrikenDIA09.mzML"       
## [10] "X2018_0502BrikenDIA10.mzML"       
## [11] "X2018_0502BrikenDIA11.mzML"       
## [12] "X2018_0502BrikenDIA12.mzML"       
## [13] "X2018_0726Briken01.mzML"          
## [14] "X2018_0726Briken02.mzML"          
## [15] "X2018_0726Briken03.mzML"          
## [16] "X2018_0726Briken04.mzML"          
## [17] "X2018_0726Briken05.mzML"          
## [18] "X2018_0726Briken06.mzML"          
## [19] "X2018_0726Briken07.mzML"          
## [20] "X2018_0726Briken08.mzML"          
## [21] "X2018_0726Briken09.mzML"          
## [22] "X2018_0726Briken11.mzML"          
## [23] "X2018_0726Briken12.mzML"          
## [24] "X2018_0726Briken13.mzML"          
## [25] "X2018_0726Briken14.mzML"          
## [26] "X2018_0726Briken15.mzML"          
## [27] "X2018_0726Briken16.mzML"          
## [28] "X2018_0726Briken17.mzML"          
## [29] "X2018_0726Briken18.mzML"          
## [30] "X2018_0726Briken19.mzML"          
## [31] "X2018_0817BrikenTrypsinDIA01.mzML"
## [32] "X2018_0817BrikenTrypsinDIA02.mzML"
## [33] "X2018_0817BrikenTrypsinDIA03.mzML"
## [34] "X2018_0817BrikenTrypsinDIA04.mzML"
## [35] "X2018_0817BrikenTrypsinDIA05.mzML"
## [36] "X2018_0817BrikenTrypsinDIA06.mzML"
## [37] "X2018_0817BrikenTrypsinDIA07.mzML"
## [38] "X2018_0817BrikenTrypsinDIA08.mzML"
## [39] "X2018_0817BrikenTrypsinDIA09.mzML"
## [40] "X2018_0817BrikenTrypsinDIA11.mzML"
## [41] "X2018_0817BrikenTrypsinDIA12.mzML"
## [42] "X2018_0817BrikenTrypsinDIA13.mzML"
## [43] "X2018_0817BrikenTrypsinDIA14.mzML"
## [44] "X2018_0817BrikenTrypsinDIA15.mzML"
## [45] "X2018_0817BrikenTrypsinDIA16.mzML"
## [46] "X2018_0817BrikenTrypsinDIA17.mzML"
## [47] "X2018_0817BrikenTrypsinDIA18.mzML"
## [48] "X2018_0817BrikenTrypsinDIA19.mzML"
## Reading the sample metadata.
## The sample definitions comprises: 48 rows(samples) and 28 columns(metadata fields).
## Matched 2632 annotations and counts.
## Bringing together the count matrix and gene information.
## The final expressionset has 2632 rows and 48 columns.

9 Perform comparisons

For the first and simplest comparison, I will take the median by condition for these three data sets and see how they compare. Then I will subset the data into whole vs. filtered and do the logFC comparisons and compare again. Finally I will repeat these processes with my version of the imputation provided by DEP.

## The factor delta_filtrate has 3 rows.
## The factor delta_whole has 3 rows.
## The factor wt_filtrate has 3 rows.
## The factor wt_whole has 3 rows.
## The factor delta_filtrate has 9 rows.
## The factor comp_filtrate has 10 rows.
## The factor delta_whole has 8 rows.
## The factor comp_whole has 9 rows.
## The factor wt_filtrate has 6 rows.
## The factor wt_whole has 6 rows.
## The factor wt_filtrate has 12 rows.
## The factor wt_whole has 12 rows.
## The factor delta_filtrate has 9 rows.
## The factor comp_filtrate has 9 rows.
## The factor delta_whole has 9 rows.
## The factor comp_whole has 9 rows.
## Warning in cor.test.default(test_df[[1]], test_df[[2]], method =
## "spearman"): Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  test_df[[1]] and test_df[[2]]
## S = 5.8e+08, p-value <2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##    rho 
## 0.6746
## Warning in cor.test.default(test_df[[1]], test_df[[3]], method =
## "spearman"): Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  test_df[[1]] and test_df[[3]]
## S = 6e+08, p-value <2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##    rho 
## 0.6628
## 
##  Pearson's product-moment correlation
## 
## data:  test_df[[1]] and test_df[[2]]
## t = 320, df = 2200, p-value <2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.9885 0.9903
## sample estimates:
##    cor 
## 0.9894
## This function will replace the expt$expressionset slot with:
## cbcb(data)
## It will save copies of each step along the way
##  in expt$normalized with the corresponding libsizes. Keep libsizes in mind
##  when invoking limma.  The appropriate libsize is non-log(cpm(normalized)).
##  This is most likely kept at:
##  'new_expt$normalized$intermediate_counts$normalization$libsizes'
##  A copy of this may also be found at:
##  new_expt$best_libsize
## Leaving the data in its current base format, keep in mind that
##  some metrics are easier to see when the data is log2 transformed, but
##  EdgeR/DESeq do not accept transformed data.
## Leaving the data unconverted.  It is often advisable to cpm/rpkm
##  the data to normalize for sampling differences, keep in mind though that rpkm
##  has some annoying biases, and voom() by default does a cpm (though hpgl_voom()
##  will try to detect this).
## Leaving the data unnormalized.  This is necessary for DESeq, but
##  EdgeR/limma might benefit from normalization.  Good choices include quantile,
##  size-factor, tmm, etc.
## Not correcting the count-data for batch effects.  If batch is
##  included in EdgerR/limma's model, then this is probably wise; but in extreme
##  batch effects this is a good parameter to play with.
## Step 1: performing count filter with option: cbcb
## Removing 8 low-count genes (2276 remaining).
## Step 2: not normalizing the data.
## Step 3: not converting the data.
## Step 4: not transforming the data.
## Step 5: not doing batch correction.
## This function will replace the expt$expressionset slot with:
## log2(cpm(quant(cbcb(data))))
## It will save copies of each step along the way
##  in expt$normalized with the corresponding libsizes. Keep libsizes in mind
##  when invoking limma.  The appropriate libsize is non-log(cpm(normalized)).
##  This is most likely kept at:
##  'new_expt$normalized$intermediate_counts$normalization$libsizes'
##  A copy of this may also be found at:
##  new_expt$best_libsize
## Not correcting the count-data for batch effects.  If batch is
##  included in EdgerR/limma's model, then this is probably wise; but in extreme
##  batch effects this is a good parameter to play with.
## Step 1: performing count filter with option: cbcb
## Removing 0 low-count genes (2276 remaining).
## Step 2: normalizing the data with quant.
## Step 3: converting the data with cpm.
## Step 4: transforming the data with log2.
## transform_counts: Found 11255 values equal to 0, adding 1 to the matrix.
## Step 5: not doing batch correction.
## Plotting a PCA before surrogates/batch inclusion.
## Using limma's removeBatchEffect to visualize with(out) batch inclusion.
## Finished running DE analyses, collecting outputs.
## Comparing analyses.

## Deleting the file excel/diaumpire_tables-v20190327.xlsx before writing the tables.
## Writing a legend of columns.
## Printing a pca plot before/after surrogates/batch estimation.
## Working on 1/4: wt_cfwhole which is: wt_filtrate/wt_whole.
## Found inverse table with wt_whole_vs_wt_filtrate
## The ebseq table is null.
## Used Bon Ferroni corrected t test(s) between columns.
## Used Bon Ferroni corrected t test(s) between columns.
## Used Bon Ferroni corrected t test(s) between columns.
## Working on 2/4: delta_cfwhole which is: delta_filtrate/delta_whole.
## Found inverse table with delta_whole_vs_delta_filtrate
## The ebseq table is null.
## Used Bon Ferroni corrected t test(s) between columns.
## Used Bon Ferroni corrected t test(s) between columns.
## Used Bon Ferroni corrected t test(s) between columns.
## Working on 3/4: whole_deltawt which is: delta_whole/wt_whole.
## Found inverse table with wt_whole_vs_delta_whole
## The ebseq table is null.
## Used Bon Ferroni corrected t test(s) between columns.
## Used Bon Ferroni corrected t test(s) between columns.
## Used Bon Ferroni corrected t test(s) between columns.
## Working on 4/4: cf_deltawt which is: delta_filtrate/wt_filtrate.
## Found inverse table with wt_filtrate_vs_delta_filtrate
## The ebseq table is null.
## Used Bon Ferroni corrected t test(s) between columns.
## Used Bon Ferroni corrected t test(s) between columns.
## Used Bon Ferroni corrected t test(s) between columns.
## Adding venn plots for wt_cfwhole.

## Limma expression coefficients for wt_cfwhole; R^2: 0.507; equation: y = 0.399x - 4.78
## Edger expression coefficients for wt_cfwhole; R^2: 0.475; equation: y = 1x - 7.81
## DESeq2 expression coefficients for wt_cfwhole; R^2: 0.26; equation: y = 0.833x - 14.2
## Adding venn plots for delta_cfwhole.

## Limma expression coefficients for delta_cfwhole; R^2: 0.704; equation: y = 0.526x - 3.16
## Edger expression coefficients for delta_cfwhole; R^2: 0.38; equation: y = 0.894x - 5.55
## DESeq2 expression coefficients for delta_cfwhole; R^2: 0.202; equation: y = 0.663x - 12.9
## Warning: Removed 1 rows containing missing values (geom_hline).
## Warning: Removed 1 rows containing missing values (geom_hline).
## Adding venn plots for whole_deltawt.

## Limma expression coefficients for whole_deltawt; R^2: 0.918; equation: y = 0.995x - 0.168
## Edger expression coefficients for whole_deltawt; R^2: 0.977; equation: y = 0.99x + 0.448
## DESeq2 expression coefficients for whole_deltawt; R^2: 0.935; equation: y = 1.01x - 0.708
## Adding venn plots for cf_deltawt.

## Limma expression coefficients for cf_deltawt; R^2: 0.905; equation: y = 0.896x - 0.825
## Edger expression coefficients for cf_deltawt; R^2: 0.706; equation: y = 0.808x + 6.06
## DESeq2 expression coefficients for cf_deltawt; R^2: 0.784; equation: y = 0.869x - 1.25
## Warning: Removed 1 rows containing missing values (geom_hline).

## Warning: Removed 1 rows containing missing values (geom_hline).
## Writing summary information.
## Performing save of excel/diaumpire_tables-v20190327.xlsx.

10 Add imputation

## Found 11011 zeros in the data.
## The data has not been filtered.
## Filtering the data, turn on force to stop this.
## This function will replace the expt$expressionset slot with:
## pofa(data)
## It will save copies of each step along the way
##  in expt$normalized with the corresponding libsizes. Keep libsizes in mind
##  when invoking limma.  The appropriate libsize is non-log(cpm(normalized)).
##  This is most likely kept at:
##  'new_expt$normalized$intermediate_counts$normalization$libsizes'
##  A copy of this may also be found at:
##  new_expt$best_libsize
## Leaving the data in its current base format, keep in mind that
##  some metrics are easier to see when the data is log2 transformed, but
##  EdgeR/DESeq do not accept transformed data.
## Leaving the data unconverted.  It is often advisable to cpm/rpkm
##  the data to normalize for sampling differences, keep in mind though that rpkm
##  has some annoying biases, and voom() by default does a cpm (though hpgl_voom()
##  will try to detect this).
## Leaving the data unnormalized.  This is necessary for DESeq, but
##  EdgeR/limma might benefit from normalization.  Good choices include quantile,
##  size-factor, tmm, etc.
## Not correcting the count-data for batch effects.  If batch is
##  included in EdgerR/limma's model, then this is probably wise; but in extreme
##  batch effects this is a good parameter to play with.
## Step 1: performing count filter with option: pofa
## Removing 471 low-count genes (2132 remaining).
## Step 2: not normalizing the data.
## Step 3: not converting the data.
## Step 4: not transforming the data.
## Step 5: not doing batch correction.
## Invoking impute from MSnbase with the bpca method.
## Found 46806 zeros in the data.
## The data has not been filtered.
## Filtering the data, turn on force to stop this.
## This function will replace the expt$expressionset slot with:
## pofa(data)
## It will save copies of each step along the way
##  in expt$normalized with the corresponding libsizes. Keep libsizes in mind
##  when invoking limma.  The appropriate libsize is non-log(cpm(normalized)).
##  This is most likely kept at:
##  'new_expt$normalized$intermediate_counts$normalization$libsizes'
##  A copy of this may also be found at:
##  new_expt$best_libsize
## Leaving the data in its current base format, keep in mind that
##  some metrics are easier to see when the data is log2 transformed, but
##  EdgeR/DESeq do not accept transformed data.
## Leaving the data unconverted.  It is often advisable to cpm/rpkm
##  the data to normalize for sampling differences, keep in mind though that rpkm
##  has some annoying biases, and voom() by default does a cpm (though hpgl_voom()
##  will try to detect this).
## Leaving the data unnormalized.  This is necessary for DESeq, but
##  EdgeR/limma might benefit from normalization.  Good choices include quantile,
##  size-factor, tmm, etc.
## Not correcting the count-data for batch effects.  If batch is
##  included in EdgerR/limma's model, then this is probably wise; but in extreme
##  batch effects this is a good parameter to play with.
## Step 1: performing count filter with option: pofa
## Removing 868 low-count genes (1764 remaining).
## Step 2: not normalizing the data.
## Step 3: not converting the data.
## Step 4: not transforming the data.
## Step 5: not doing batch correction.
## Invoking impute from MSnbase with the bpca method.
## Found 82251 zeros in the data.
## The data has not been filtered.
## Filtering the data, turn on force to stop this.
## This function will replace the expt$expressionset slot with:
## pofa(data)
## It will save copies of each step along the way
##  in expt$normalized with the corresponding libsizes. Keep libsizes in mind
##  when invoking limma.  The appropriate libsize is non-log(cpm(normalized)).
##  This is most likely kept at:
##  'new_expt$normalized$intermediate_counts$normalization$libsizes'
##  A copy of this may also be found at:
##  new_expt$best_libsize
## Leaving the data in its current base format, keep in mind that
##  some metrics are easier to see when the data is log2 transformed, but
##  EdgeR/DESeq do not accept transformed data.
## Leaving the data unconverted.  It is often advisable to cpm/rpkm
##  the data to normalize for sampling differences, keep in mind though that rpkm
##  has some annoying biases, and voom() by default does a cpm (though hpgl_voom()
##  will try to detect this).
## Leaving the data unnormalized.  This is necessary for DESeq, but
##  EdgeR/limma might benefit from normalization.  Good choices include quantile,
##  size-factor, tmm, etc.
## Not correcting the count-data for batch effects.  If batch is
##  included in EdgerR/limma's model, then this is probably wise; but in extreme
##  batch effects this is a good parameter to play with.
## Step 1: performing count filter with option: pofa
## Removing 1558 low-count genes (726 remaining).
## Step 2: not normalizing the data.
## Step 3: not converting the data.
## Step 4: not transforming the data.
## Step 5: not doing batch correction.
## Invoking impute from MSnbase with the bpca method.
## This function will replace the expt$expressionset slot with:
## log2(cpm(quant(cbcb(data))))
## It will save copies of each step along the way
##  in expt$normalized with the corresponding libsizes. Keep libsizes in mind
##  when invoking limma.  The appropriate libsize is non-log(cpm(normalized)).
##  This is most likely kept at:
##  'new_expt$normalized$intermediate_counts$normalization$libsizes'
##  A copy of this may also be found at:
##  new_expt$best_libsize
## Not correcting the count-data for batch effects.  If batch is
##  included in EdgerR/limma's model, then this is probably wise; but in extreme
##  batch effects this is a good parameter to play with.
## Step 1: performing count filter with option: cbcb
## Removing 23 low-count genes (2580 remaining).
## Step 2: normalizing the data with quant.
## Step 3: converting the data with cpm.
## Step 4: transforming the data with log2.
## transform_counts: Found 838 values equal to 0, adding 1 to the matrix.
## Step 5: not doing batch correction.

## This function will replace the expt$expressionset slot with:
## cbcb(data)
## It will save copies of each step along the way
##  in expt$normalized with the corresponding libsizes. Keep libsizes in mind
##  when invoking limma.  The appropriate libsize is non-log(cpm(normalized)).
##  This is most likely kept at:
##  'new_expt$normalized$intermediate_counts$normalization$libsizes'
##  A copy of this may also be found at:
##  new_expt$best_libsize
## Leaving the data in its current base format, keep in mind that
##  some metrics are easier to see when the data is log2 transformed, but
##  EdgeR/DESeq do not accept transformed data.
## Leaving the data unconverted.  It is often advisable to cpm/rpkm
##  the data to normalize for sampling differences, keep in mind though that rpkm
##  has some annoying biases, and voom() by default does a cpm (though hpgl_voom()
##  will try to detect this).
## Leaving the data unnormalized.  This is necessary for DESeq, but
##  EdgeR/limma might benefit from normalization.  Good choices include quantile,
##  size-factor, tmm, etc.
## Not correcting the count-data for batch effects.  If batch is
##  included in EdgerR/limma's model, then this is probably wise; but in extreme
##  batch effects this is a good parameter to play with.
## Step 1: performing count filter with option: cbcb
## Warning in t(log2(t(qcounts + 0.5)/(libsize + 1) * 1e+06)): NaNs produced
## Removing 0 low-count genes (2132 remaining).
## Step 2: not normalizing the data.
## Step 3: not converting the data.
## Step 4: not transforming the data.
## Step 5: not doing batch correction.
## This function will replace the expt$expressionset slot with:
## cpm(quant(cbcb(data)))
## It will save copies of each step along the way
##  in expt$normalized with the corresponding libsizes. Keep libsizes in mind
##  when invoking limma.  The appropriate libsize is non-log(cpm(normalized)).
##  This is most likely kept at:
##  'new_expt$normalized$intermediate_counts$normalization$libsizes'
##  A copy of this may also be found at:
##  new_expt$best_libsize
## Leaving the data in its current base format, keep in mind that
##  some metrics are easier to see when the data is log2 transformed, but
##  EdgeR/DESeq do not accept transformed data.
## Not correcting the count-data for batch effects.  If batch is
##  included in EdgerR/limma's model, then this is probably wise; but in extreme
##  batch effects this is a good parameter to play with.
## Step 1: performing count filter with option: cbcb
## Removing 0 low-count genes (1869 remaining).
## Step 2: normalizing the data with quant.
## Step 3: converting the data with cpm.
## Step 4: not transforming the data.
## Step 5: not doing batch correction.

## This function will replace the expt$expressionset slot with:
## log2(svaseq(cpm(quant(data))))
## It will save copies of each step along the way
##  in expt$normalized with the corresponding libsizes. Keep libsizes in mind
##  when invoking limma.  The appropriate libsize is non-log(cpm(normalized)).
##  This is most likely kept at:
##  'new_expt$normalized$intermediate_counts$normalization$libsizes'
##  A copy of this may also be found at:
##  new_expt$best_libsize
## Filter is false, this should likely be set to something, good
##  choices include cbcb, kofa, pofa (anything but FALSE).  If you want this to
##  stay FALSE, keep in mind that if other normalizations are performed, then the
##  resulting libsizes are likely to be strange (potentially negative!)
## Warning in normalize_expt(enc_expt, transform = "log2", norm = "quant", :
## Quantile normalization and sva do not always play well together.
## Step 1: not doing count filtering.
## Step 2: normalizing the data with quant.
## Step 3: converting the data with cpm.
## Step 4: transforming the data with log2.
## transform_counts: Found 2353 values equal to 0, adding 1 to the matrix.
## Step 5: doing batch correction with svaseq.
## Note to self:  If you get an error like 'x contains missing values' The data has too many 0's and needs a stronger low-count filter applied.
## Passing off to all_adjusters.
## batch_counts: Before batch/surrogate estimation, 120350 entries are x>1: 95.3%.
## batch_counts: Before batch/surrogate estimation, 2353 entries are x==0: 1.86%.
## batch_counts: Before batch/surrogate estimation, 3633 entries are 0<x<1: 2.88%.
## The be method chose 6 surrogate variable(s).
## Attempting svaseq estimation with 6 surrogates.
## There are 286 (0.226%) elements which are < 0 after batch correction.

## This function will replace the expt$expressionset slot with:
## log2(svaseq(cpm(quant(data))))
## It will save copies of each step along the way
##  in expt$normalized with the corresponding libsizes. Keep libsizes in mind
##  when invoking limma.  The appropriate libsize is non-log(cpm(normalized)).
##  This is most likely kept at:
##  'new_expt$normalized$intermediate_counts$normalization$libsizes'
##  A copy of this may also be found at:
##  new_expt$best_libsize
## Filter is false, this should likely be set to something, good
##  choices include cbcb, kofa, pofa (anything but FALSE).  If you want this to
##  stay FALSE, keep in mind that if other normalizations are performed, then the
##  resulting libsizes are likely to be strange (potentially negative!)
## Warning in normalize_expt(enc_imputed, transform = "log2", norm =
## "quant", : Quantile normalization and sva do not always play well together.
## Step 1: not doing count filtering.
## Step 2: normalizing the data with quant.
## Step 3: converting the data with cpm.
## Warning in convert_counts(count_table, ...): There are 4800 negative values
## in the expressionset, modifying it.
## Step 4: transforming the data with log2.
## transform_counts: Found 4800 values equal to 0, adding 1 to the matrix.
## Step 5: doing batch correction with svaseq.
## Note to self:  If you get an error like 'x contains missing values' The data has too many 0's and needs a stronger low-count filter applied.
## Passing off to all_adjusters.
## batch_counts: Before batch/surrogate estimation, 79584 entries are x>1: 94.0%.
## batch_counts: Before batch/surrogate estimation, 4800 entries are x==0: 5.67%.
## batch_counts: Before batch/surrogate estimation, 288 entries are 0<x<1: 0.340%.
## The be method chose 8 surrogate variable(s).
## Attempting svaseq estimation with 8 surrogates.
## There are 148 (0.175%) elements which are < 0 after batch correction.

## If you wish to reproduce this exact build of hpgltools, invoke the following:
## > git clone http://github.com/abelew/hpgltools.git
## > git reset 8b0982a32ca67b6e0038facd2536a24e06bd4da8
## This is hpgltools commit: Fri Jun 21 10:35:35 2019 -0400: 8b0982a32ca67b6e0038facd2536a24e06bd4da8
## Saving to dia_umpire_20190308-v20190327.rda.xz

R version 3.6.0 (2019-04-26)

Platform: x86_64-pc-linux-gnu (64-bit)

locale: LC_CTYPE=en_US.UTF-8, LC_NUMERIC=C, LC_TIME=en_US.UTF-8, LC_COLLATE=en_US.UTF-8, LC_MONETARY=en_US.UTF-8, LC_MESSAGES=en_US.UTF-8, LC_PAPER=en_US.UTF-8, LC_NAME=C, LC_ADDRESS=C, LC_TELEPHONE=C, LC_MEASUREMENT=en_US.UTF-8 and LC_IDENTIFICATION=C

attached base packages: stats4, parallel, stats, graphics, grDevices, utils, datasets, methods and base

other attached packages: ruv(v.0.9.7), SWATH2stats(v.1.13.5), imputeLCMD(v.2.0), impute(v.1.58.0), pcaMethods(v.1.76.0), norm(v.1.0-9.5), tmvtnorm(v.1.4-10), gmm(v.1.6-2), sandwich(v.2.5-1), Matrix(v.1.2-17), mvtnorm(v.1.0-11), SummarizedExperiment(v.1.14.0), DelayedArray(v.0.10.0), BiocParallel(v.1.18.0), matrixStats(v.0.54.0), GenomicRanges(v.1.36.0), GenomeInfoDb(v.1.20.0), IRanges(v.2.18.1), S4Vectors(v.0.22.0), DEP(v.1.5.3), dplyr(v.0.8.1), testthat(v.2.1.1), hpgltools(v.1.0), Biobase(v.2.44.0) and BiocGenerics(v.0.30.0)

loaded via a namespace (and not attached): rtracklayer(v.1.44.0), tidyr(v.0.8.3), acepack(v.1.4.1), ggplot2(v.3.2.0), bit64(v.0.9-7), knitr(v.1.23), rpart(v.4.1-15), data.table(v.1.12.2), RCurl(v.1.95-4.12), doParallel(v.1.0.14), GenomicFeatures(v.1.36.3), preprocessCore(v.1.46.0), callr(v.3.2.0), cowplot(v.0.9.4), usethis(v.1.5.0), RSQLite(v.2.1.1), europepmc(v.0.3), bit(v.1.1-14), enrichplot(v.1.4.0), xml2(v.1.2.0), httpuv(v.1.5.1), assertthat(v.0.2.1), viridis(v.0.5.1), xfun(v.0.8), hms(v.0.4.2), evaluate(v.0.14), promises(v.1.0.1), DEoptimR(v.1.0-8), progress(v.1.2.2), caTools(v.1.17.1.2), geneplotter(v.1.62.0), igraph(v.1.2.4.1), DBI(v.1.0.0), htmlwidgets(v.1.3), purrr(v.0.3.2), selectr(v.0.4-1), backports(v.1.1.4), annotate(v.1.62.0), biomaRt(v.2.40.0), remotes(v.2.1.0), BRAIN(v.1.30.0), withr(v.2.1.2), ggforce(v.0.2.2), triebeard(v.0.3.0), robustbase(v.0.93-5), checkmate(v.1.9.3), GenomicAlignments(v.1.20.1), fdrtool(v.1.2.15), prettyunits(v.1.0.2), cluster(v.2.1.0), DOSE(v.3.10.2), lazyeval(v.0.2.2), crayon(v.1.3.4), genefilter(v.1.66.0), edgeR(v.3.26.5), pkgconfig(v.2.0.2), labeling(v.0.3), tweenr(v.1.0.1), nlme(v.3.1-140), PolynomF(v.2.0-2), pkgload(v.1.0.2), ProtGenerics(v.1.16.0), nnet(v.7.3-12), devtools(v.2.0.2), rlang(v.0.4.0), affyio(v.1.54.0), rprojroot(v.1.3-2), polyclip(v.1.10-0), graph(v.1.62.0), urltools(v.1.7.3), boot(v.1.3-22), zoo(v.1.8-6), base64enc(v.0.1-3), ggridges(v.0.5.1), GlobalOptions(v.0.1.0), processx(v.3.3.1), png(v.0.1-7), viridisLite(v.0.3.0), rjson(v.0.2.20), mzR(v.2.18.0), bitops(v.1.0-6), shinydashboard(v.0.7.1), KernSmooth(v.2.23-15), pander(v.0.6.3), Biostrings(v.2.52.0), blob(v.1.1.1), shape(v.1.4.4), stringr(v.1.4.0), qvalue(v.2.16.0), readr(v.1.3.1), gridGraphics(v.0.4-1), scales(v.1.0.0), memoise(v.1.1.0), magrittr(v.1.5), plyr(v.1.8.4), gplots(v.3.0.1.1), gdata(v.2.18.0), zlibbioc(v.1.30.0), compiler(v.3.6.0), RColorBrewer(v.1.1-2), clue(v.0.3-57), lme4(v.1.1-21), DESeq2(v.1.24.0), Rsamtools(v.2.0.0), cli(v.1.1.0), affy(v.1.62.0), XVector(v.0.24.0), ps(v.1.3.0), htmlTable(v.1.13.1), Formula(v.1.2-3), MASS(v.7.3-51.4), mgcv(v.1.8-28), tidyselect(v.0.2.5), vsn(v.3.52.0), stringi(v.1.4.3), yaml(v.2.2.0), GOSemSim(v.2.10.0), locfit(v.1.5-9.1), latticeExtra(v.0.6-28), MALDIquant(v.1.19.3), ggrepel(v.0.8.1), grid(v.3.6.0), fastmatch(v.1.1-0), tools(v.3.6.0), circlize(v.0.4.6), rstudioapi(v.0.10), foreign(v.0.8-71), foreach(v.1.4.4), gridExtra(v.2.3), farver(v.1.1.0), mzID(v.1.22.0), ggraph(v.1.0.2), digest(v.0.6.19), rvcheck(v.0.1.3), BiocManager(v.1.30.4), shiny(v.1.3.2), Rcpp(v.1.0.1), later(v.0.8.0), ncdf4(v.1.16.1), httr(v.1.4.0), MSnbase(v.2.10.1), AnnotationDbi(v.1.46.0), ComplexHeatmap(v.2.0.0), colorspace(v.1.4-1), rvest(v.0.3.4), XML(v.3.98-1.20), fs(v.1.3.1), splines(v.3.6.0), RBGL(v.1.60.0), ggplotify(v.0.0.3), sessioninfo(v.1.1.1), xtable(v.1.8-4), jsonlite(v.1.6), nloptr(v.1.2.1), corpcor(v.1.6.9), UpSetR(v.1.4.0), Vennerable(v.3.1.0.9000), R6(v.2.4.0), Hmisc(v.4.2-0), pillar(v.1.4.2), htmltools(v.0.3.6), mime(v.0.7), glue(v.1.3.1), minqa(v.1.2.4), clusterProfiler(v.3.12.0), DT(v.0.7), codetools(v.0.2-16), fgsea(v.1.10.0), pkgbuild(v.1.0.3), lattice(v.0.20-38), tibble(v.2.1.3), sva(v.3.32.1), pbkrtest(v.0.4-7), curl(v.3.3), colorRamps(v.2.3), gtools(v.3.8.1), zip(v.2.0.2), GO.db(v.3.8.2), openxlsx(v.4.1.0.1), survival(v.2.44-1.1), limma(v.3.40.2), rmarkdown(v.1.13), desc(v.1.2.0), munsell(v.0.5.0), DO.db(v.2.9), GetoptLong(v.0.1.7), GenomeInfoDbData(v.1.2.1), iterators(v.1.0.10), variancePartition(v.1.14.0), reshape2(v.1.4.3) and gtable(v.0.3.0)

LS0tCnRpdGxlOiAiTS4gdHViZXJjdWxvc2lzIDIwMTkwMzI3OiBESUEtVW1waXJlIGJhc2VkIE9wZW5TV0FUSCB3b3JrZmxvdy4iCmF1dGhvcjogImF0YiBhYmVsZXdAZ21haWwuY29tIgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgY29kZV9mb2xkaW5nOiBzaG93CiAgICBmaWdfY2FwdGlvbjogdHJ1ZQogICAgZmlnX2hlaWdodDogNwogICAgZmlnX3dpZHRoOiA3CiAgICBoaWdobGlnaHQ6IHRhbmdvCiAgICBrZWVwX21kOiBmYWxzZQogICAgbW9kZTogc2VsZmNvbnRhaW5lZAogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQogICAgdGhlbWU6IHJlYWRhYmxlCiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDoKICAgICAgY29sbGFwc2VkOiBmYWxzZQogICAgICBzbW9vdGhfc2Nyb2xsOiBmYWxzZQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOgogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgY29kZV9mb2xkaW5nOiBzaG93CiAgICBkZl9wcmludDogcGFnZWQKICAgIGZpZ19jYXB0aW9uOiB0cnVlCiAgICBmaWdfaGVpZ2h0OiA3CiAgICBmaWdfd2lkdGg6IDcKICAgIGhpZ2hsaWdodDogdGFuZ28KICAgIHdpZHRoOiAzMDAKICAgIGtlZXBfbWQ6IGZhbHNlCiAgICBtb2RlOiBzZWxmY29udGFpbmVkCiAgICB0b2NfZmxvYXQ6IHRydWUKICBCaW9jU3R5bGU6Omh0bWxfZG9jdW1lbnQ6CiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cKICAgIGZpZ19jYXB0aW9uOiB0cnVlCiAgICBmaWdfaGVpZ2h0OiA3CiAgICBmaWdfd2lkdGg6IDcKICAgIGhpZ2hsaWdodDogdGFuZ28KICAgIGtlZXBfbWQ6IGZhbHNlCiAgICBtb2RlOiBzZWxmY29udGFpbmVkCiAgICB0b2NfZmxvYXQ6IHRydWUKLS0tCgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgpib2R5LCB0ZCB7CiAgZm9udC1zaXplOiAxNnB4Owp9CmNvZGUucnsKICBmb250LXNpemU6IDE2cHg7Cn0KcHJlIHsKIGZvbnQtc2l6ZTogMTZweAp9Cjwvc3R5bGU+CgpgYGB7ciBvcHRpb25zLCBpbmNsdWRlPUZBTFNFfQpsaWJyYXJ5KCJocGdsdG9vbHMiKQp0dCA8LSBkZXZ0b29sczo6bG9hZF9hbGwoIi9kYXRhL2hwZ2x0b29scyIpCmtuaXRyOjpvcHRzX2tuaXQkc2V0KHdpZHRoPTEyMCwKICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3M9VFJVRSwKICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZT1UUlVFLAogICAgICAgICAgICAgICAgICAgICBlY2hvPVRSVUUpCmtuaXRyOjpvcHRzX2NodW5rJHNldChlcnJvcj1UUlVFLAogICAgICAgICAgICAgICAgICAgICAgZHBpPTk2KQpvbGRfb3B0aW9ucyA8LSBvcHRpb25zKGRpZ2l0cz00LAogICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICAga25pdHIuZHVwbGljYXRlLmxhYmVsPSJhbGxvdyIpCmdncGxvdDI6OnRoZW1lX3NldChnZ3Bsb3QyOjp0aGVtZV9idyhiYXNlX3NpemU9MTApKQpydW5kYXRlIDwtIGZvcm1hdChTeXMuRGF0ZSgpLCBmb3JtYXQ9IiVZJW0lZCIpCnByZXZpb3VzX2ZpbGUgPC0gIjAyX2VzdGltYXRpb25faW5mZWN0aW9uXzIwMTgwODIyLlJtZCIKdmVyIDwtICIyMDE5MDMyNyIKCiMjdG1wIDwtIHNtKGxvYWRtZShmaWxlbmFtZT1wYXN0ZTAoZ3N1YihwYXR0ZXJuPSJcXC5SbWQiLCByZXBsYWNlPSIiLCB4PXByZXZpb3VzX2ZpbGUpLCAiLXYiLCB2ZXIsICIucmRhLnh6IikpKQpybWRfZmlsZSA8LSAiZGlhX3VtcGlyZV8yMDE5MDMwOC5SbWQiCmBgYAoKIyBSZXdvcmsgRElBLVVtcGlyZSB0byBmZWVkIE9wZW5TV0FUSC4KCkluIHRoZSBmb2xsb3dpbmcgYmxvY2tzIEkgd2FudCB0byB1c2UgRElBIFVtcGlyZSB0byBjcmVhdGUgdHJhbnNpdGlvbiBsaWJyYXJpZXMgZm9yIG9wZW5zd2F0aCwKdGhlbiBJIHdhbnQgdG8gcnVuIG9wZW5zd2F0aCBhbmQgc2NvcmUgdGhlIHJ1bnMuCgojIyBJbnZva2UgRElBIFVtcGlyZQoKYGBge2Jhc2ggdW1waXJlLCBldmFsPUZBTFNFfQpjZCB+L3NjcmF0Y2gvcHJvdGVvbWljcy9teWNvYmFjdGVyaXVtX3R1YmVyY3Vsb3Npc18yMDE4Cm1vZHVsZSBhZGQgb3Blbm1zCgp0eXBlPSJtelhNTCIKZXhwb3J0IFZFUlNJT049IjIwMTkwMjI4IgpiYXNlZGlyPSIke0hPTUV9L3NjcmF0Y2gvcHJvdGVvbWljcy9teWNvYmFjdGVyaXVtX3R1YmVyY3Vsb3Npc18yMDE4IgpiYXNlX2lucHV0PSIke2Jhc2VkaXJ9L3Jlc3VsdHMvMDEke3R5cGV9L2RpYS8ke1ZFUlNJT059LyIKdW1waXJlX2lucHV0cz0kKC91c3IvYmluL2ZpbmQgIiR7YmFzZV9pbnB1dH0iIC1uYW1lICIqLiR7dHlwZX0iIHwgc29ydCkKZWNobyAiQ2hlY2tpbmcgaW46ICR7dW1waXJlX2lucHV0c30iCmZvciBpbnB1dCBpbiAke3VtcGlyZV9pbnB1dHN9OwpkbwogICAgaW5fbmFtZT0kKGJhc2VuYW1lICRpbnB1dCAiLiR7dHlwZX0iKQogICAgb3V0X25hbWU9IiR7aW5fbmFtZX1fUTEubWdmIgogICAgaWYgW1sgISAtZiAiJHtiYXNlX2lucHV0fS8ke291dF9uYW1lfSIgXV07IHRoZW4KICAgICAgICBlY2hvICJUaGUgb3V0cHV0IGZpbGU6ICR7b3V0X25hbWV9IGFscmVhZHkgZXhpc3RzLiIKICAgIGVsc2UKICAgICAgICBqYXZhIC1qYXIgRElBX1VtcGlyZV9TRS5qYXIgJHtpbnB1dH0gZGlhdW1waXJlX3NlLnBhcmFtcwogICAgZmkKZG9uZQpgYGAKCiMjIENvbnZlcnQgRElBIFVtcGlyZSByZXN1bHRzCgpgYGB7YmFzaCBjb252ZXJ0LCBldmFsPUZBTFNFfQptc2NvbnZlcnQgLS1telhNTCByZXN1bHRzLzAybWdmLyoubWdmCm12ICoubXpYTUwgcmVzdWx0cy8wM19kaWFfdW1waXJlX216eG1sCmBgYAoKIyMgU2VhcmNoIHRoZSBVbXBpcmUgcmVzdWx0cwoKYGBge2Jhc2ggc2VhcmNoX3VtcGlyZSwgZXZhbD1GQUxTRX0KY29tZXQgXAogICAgLVBwYXJhbWV0ZXJzL2NvbWV0X2RpYV91bXBpcmVfcGFyYW1zLnR4dCBcCiAgICByZXN1bHRzLzAzX2RpYV91bXBpcmVfbXp4bWwvKi5telhNTApgYGAKCiMjIE1lcmdlIHRoZW0KCmBgYHtiYXNoIG1lcmdlX3hpbnRlcmFjdCwgZXZhbD1GQUxTRX0KeGludGVyYWN0IFwKICAgIC1kREVDT1lfIFwKICAgIC1PQVJQZCBcCiAgICAtTmludGVyYWN0LmNvbWV0LnBlcC54bWwgXAogICAgcmVzdWx0cy8wM19kaWFfdW1waXJlX216eG1sLyoucGVwLnhtbAoKbXYgaW50ZXJhY3QuY29tZXQucGVwLnhtbCByZXN1bHRzLzA0X2RpYV91bXBpcmVfeGludGVyYWN0CmBgYAoKIyMgQ29tYmluZSB0aGUgc3RhdGlzdGljcwoKYGBge2Jhc2ggcHJvdGVpbl9wcm9waGV0LCBldmFsPUZBTFNFfQpQcm90ZWluUHJvcGhldCBcCiAgICByZXN1bHRzLzA0X2RpYV91bXBpcmVfeGludGVyYWN0L2ludGVyYWN0LmNvbWV0LnBlcC54bWwgXAogICAgcmVzdWx0cy8wNV9kaWFfdW1waXJlX3Byb3BoZXQvY29tYmluZWQucHJvdC54bWwKCkludGVyUHJvcGhldFBhcnNlciBcCiAgICBERUNPWT1ERUNPWSBcCiAgICByZXN1bHRzLzA0X2RpYV91bXBpcmVfeGludGVyYWN0L2ludGVyYWN0LmNvbWV0LnBlcC54bWwgXAogICAgcmVzdWx0cy8wNV9kaWFfdW1waXJlX3Byb3BoZXQvaVByb3BoZXQucGVwLnhtbAoKTWF5dS5wbCBcCiAgICAtQSByZXN1bHRzLzA1X2RpYV91bXBpcmVfcHJvcGhldC9pUHJvcGhldC5wZXAueG1sIFwKICAgIC1DIHJlZmVyZW5jZS9tdGJfaXJ0LmZhc3RhIFwKICAgIC1FIERFQ09ZCmBgYAoKYGBge3IgZXh0cmFjdF9wY3RfbWF5dSwgZXZhbD1GQUxTRX0KbWF5dV9vdXRwdXQgPC0gIi4uLzIwMTktMDUtMTJfMTIuMzcuMDNfbWFpbl8xLjA3LmNzdiIKbnVtYmVyIDwtIGhwZ2x0b29sczo6ZXh0cmFjdF9tYXl1X3Bwc19mZHIobWF5dV9vdXRwdXQpCm1lc3NhZ2UoIlRoZSBudW1iZXIgaXM6ICIsIG51bWJlcikKIyMgMC40MzI5MQpgYGAKCgpgYGB7YmFzaCB1bXBpcmVfY29udGQsIGV2YWw9RkFMU0V9CiMjIFJlcnVubmluZyBiZWNhdXNlIHdyaXRpbmcgdGhlIGZpbGUgZmFpbGVkLgpzcGVjdHJhc3QgXAogICAgLWNOU3BlY0xpYiAtY0lDSUQtUVRPRiBcCiAgICAtY2YgIlByb3RlaW4hIH4gREVDT1lfIiBcCiAgICAtY1AwLjQyMzcgXAogICAgLWNfSVJUcmVmZXJlbmNlL2lydC50eHQgXAogICAgLWNfSVJSIHJlc3VsdHMvMDVfZGlhX3VtcGlyZV9wcm9waGV0L2lQcm9waGV0LnBlcC54bWwKCnNwZWN0cmFzdCBcCiAgICAtY05TcGVjTGliX2NvbnMgXAogICAgLWNJQ0lELVFUT0YgXAogICAgLWNBQyBTcGVjTGliLnNwbGliCgpzcGVjdHJhc3QydHN2LnB5IFwKICAgIC1sIDM1MCwyMDAwIFwKICAgIC1zIGIseSBcCiAgICAteCAxLDIgXAogICAgLW8gNiBcCiAgICAtbiA2IFwKICAgIC1wIDAuMDUgXAogICAgLWQgLWUgXAogICAgLWsgb3BlbnN3YXRoIFwKICAgIC13IHdpbmRvd3MvMjAxOF8wODE3QnJpa2VuVHJ5cHNpbkRJQTE5LnR4dCBcCiAgICAtYSBTcGVjTGliX2NvbnNfb3BlbnN3YXRoLnRzdiBcCiAgICBTcGVjTGliX2NvbnMuc3B0eHQKClRhcmdldGVkRmlsZUNvbnZlcnRlciBcCiAgICAtaW4gU3BlY0xpYl9jb25zX29wZW5zd2F0aC50c3YgXAogICAgLWluX3R5cGUgdHN2IFwKICAgIC1vdXQgU3BlY0xpYl9jb25zX29wZW5zd2F0aC5UcmFNTCBcCiAgICAtb3V0X3R5cGUgVHJhTUwKCk9wZW5Td2F0aERlY295R2VuZXJhdG9yIFwKICAgIC1pbiBTcGVjTGliX2NvbnNfb3BlbnN3YXRoLlRyYU1MIFwKICAgIC1vdXQgU3BlY0xpYl9jb25zX29wZW5zd2F0aF9kZWNveS5UcmFNTCBcCiAgICAtbWV0aG9kIHNodWZmbGUKIyMgICAgLWV4Y2x1ZGVfc2ltaWxhciBcCiMjICAgIC1zaW1pbGFyaXR5X3RocmVzaG9sZCAwLjA1IFwKIyMgICAgLWlkZW50aXR5X3RocmVzaG9sZCAwLjcKClRhcmdldGVkRmlsZUNvbnZlcnRlciBcCiAgICAtaW4gU3BlY0xpYl9jb25zX29wZW5zd2F0aF9kZWNveS5UcmFNTCBcCiAgICAtaW5fdHlwZSBUcmFNTCBcCiAgICAtb3V0IFNwZWNMaWJfY29uc19vcGVuc3dhdGhfZGVjb3kudHN2IFwKICAgIC1vdXRfdHlwZSB0c3YKClRhcmdldGVkRmlsZUNvbnZlcnRlciBcCiAgICAtaW4gU3BlY0xpYl9jb25zX29wZW5zd2F0aF9kZWNveS5UcmFNTCBcCiAgICAtaW5fdHlwZSBUcmFNTCBcCiAgICAtb3V0IFNwZWNMaWJfY29uc19vcGVuc3dhdGhfZGVjb3kucHFwIFwKICAgIC1vdXRfdHlwZSBwcXAKCmV4cG9ydCBWRVJTSU9OPSR7VkVSU0lPTjotMjAxOTAzMjd9CmVjaG8gIkxvYWRpbmcgZW52aXJvbm1lbnQgbW9kdWxlcyBhbmQgcGFyYW1ldGVycyBmb3IgdmVyc2lvbjogJHtWRVJTSU9OfS4iCnNvdXJjZSAicGFyYW1ldGVycy8ke1ZFUlNJT059X3NldHRpbmdzLnNoIgoKZWNobyAiSW52b2tpbmcgdGhlIE9wZW5Td2F0aFdvcmtmbG93IHVzaW5nIGxvY2FsIGNvbWV0LWRlcml2ZWQgdHJhbnNpdGlvbnMuIgp0eXBlPSJkaWF1bXBpcmUiCmlucHV0X3R5cGU9Im16WE1MIgpleHBvcnQgVFJBTlNJVElPTl9QUkVGSVg9IlNwZWNMaWJfY29uc19vcGVuc3dhdGhfZGVjb3kiCmVjaG8gIkNoZWNraW5nIGluLCB0aGUgdHJhbnNpdGlvbiBsaWJyYXJ5IGlzOiAke1RSQU5TSVRJT05fUFJFRklYfS5wcXAiCmJhc2VfbXp4bWxkaXI9InJlc3VsdHMvMDEke2lucHV0X3R5cGV9L2RpYS8ke1ZFUlNJT059Igpzd2F0aF9pbnB1dHM9JCgvdXNyL2Jpbi9maW5kICIke2Jhc2VfbXp4bWxkaXJ9IiAtbmFtZSAqLiR7aW5wdXRfdHlwZX0gLXByaW50IHwgc29ydCkKZWNobyAiQ2hlY2tpbmcgaW4sIHRoZSBpbnB1dHMgYXJlOiAke3N3YXRoX2lucHV0c30iCm1rZGlyIC1wICIke1NXQVRIX09VVERJUn1fJHt0eXBlfSIKcHlwZGlyPSIke1BZUFJPUEhFVF9PVVRESVJ9XyR7dHlwZX0iCm1rZGlyIC1wICIke3B5cGRpcn0iCmZvciBpbnB1dCBpbiAke3N3YXRoX2lucHV0c30KZG8KICAgIG5hbWU9JChiYXNlbmFtZSAiJHtpbnB1dH0iICIuJHtpbnB1dF90eXBlfSIpCiAgICBlY2hvICJTdGFydGluZyBvcGVuc3dhdGggcnVuLCBsaWJyYXJ5IHR5cGUgJHt0eXBlfSBmb3IgJHtuYW1lfSB1c2luZyAke01aX1dJTkRPV1N9IHdpbmRvd3MgYXQgJChkYXRlKS4iCiAgICBzd2F0aF9vdXRwdXRfcHJlZml4PSIke1NXQVRIX09VVERJUn1fJHt0eXBlfS8ke25hbWV9XyR7RERBX01FVEhPRH0iCiAgICBweXByb3BoZXRfb3V0cHV0X3ByZWZpeD0iJHtQWVBST1BIRVRfT1VURElSfV8ke3R5cGV9LyR7bmFtZX1fJHtEREFfTUVUSE9EfSIKICAgIGVjaG8gIkRlbGV0aW5nIHByZXZpb3VzIHN3YXRoIG91dHB1dCBmaWxlOiAke3N3YXRoX291dHB1dF9wcmVmaXh9Lm9zdyIKICAgIHJtIC1mICIke3N3YXRoX291dHB1dF9wcmVmaXh9Lm9zdyIKICAgIHJtIC1mICIke3N3YXRoX291dHB1dF9wcmVmaXh9LnRzdiIKICAgIE9wZW5Td2F0aFdvcmtmbG93IFwKICAgICAgICAtaW4gIiR7aW5wdXR9IiBcCiAgICAgICAgLWZvcmNlIFwKICAgICAgICAtc29ydF9zd2F0aF9tYXBzIFwKICAgICAgICAtbWluX3VwcGVyX2VkZ2VfZGlzdCAxIFwKICAgICAgICAtbXpfY29ycmVjdGlvbl9mdW5jdGlvbiAicXVhZHJhdGljX3JlZ3Jlc3Npb25fZGVsdGFfcHBtIiBcCiAgICAgICAgLVNjb3Jpbmc6VHJhbnNpdGlvbkdyb3VwUGlja2VyOmJhY2tncm91bmRfc3VidHJhY3Rpb24gIm9yaWdpbmFsIiBcCiAgICAgICAgLVNjb3Jpbmc6c3RvcF9yZXBvcnRfYWZ0ZXJfZmVhdHVyZSAiNSIgXAogICAgICAgIC1zd2F0aF93aW5kb3dzX2ZpbGUgIndpbmRvd3Mvb3BlbnN3YXRoXyR7bmFtZX0udHh0IiBcCiAgICAgICAgLXRyICIke1RSQU5TSVRJT05fUFJFRklYfS5wcXAiIFwKICAgICAgICAtb3V0X3RzdiAiJHtzd2F0aF9vdXRwdXRfcHJlZml4fS50c3YiCiAgICBPcGVuU3dhdGhXb3JrZmxvdyBcCiAgICAgICAgLWluICIke2lucHV0fSIgXAogICAgICAgIC1mb3JjZSBcCiAgICAgICAgLXNvcnRfc3dhdGhfbWFwcyBcCiAgICAgICAgLW1pbl91cHBlcl9lZGdlX2Rpc3QgMSBcCiAgICAgICAgLW16X2NvcnJlY3Rpb25fZnVuY3Rpb24gInF1YWRyYXRpY19yZWdyZXNzaW9uX2RlbHRhX3BwbSIgXAogICAgICAgIC1TY29yaW5nOlRyYW5zaXRpb25Hcm91cFBpY2tlcjpiYWNrZ3JvdW5kX3N1YnRyYWN0aW9uICJvcmlnaW5hbCIgXAogICAgICAgIC1TY29yaW5nOnN0b3BfcmVwb3J0X2FmdGVyX2ZlYXR1cmUgIjUiIFwKICAgICAgICAtc3dhdGhfd2luZG93c19maWxlICJ3aW5kb3dzL29wZW5zd2F0aF8ke25hbWV9LnR4dCIgXAogICAgICAgIC10ciAiJHtUUkFOU0lUSU9OX1BSRUZJWH0ucHFwIiBcCiAgICAgICAgLW91dF9vc3cgIiR7c3dhdGhfb3V0cHV0X3ByZWZpeH0ub3N3IgogICAgIyMyPiIke3N3YXRoX291dHB1dF9wcmVmaXh9X29zdy5sb2ciIDE+JjIKZG9uZQpzd2F0aF9vdXQ9JChkaXJuYW1lICR7c3dhdGhfb3V0cHV0X3ByZWZpeH0pCnB5cHJvcGhldF9vdXQ9IiQoZGlybmFtZSAiJHtweXByb3BoZXRfb3V0cHV0X3ByZWZpeH0iKS9vcGVuc3dhdGhfbWVyZ2VkLm9zdyIKZWNobyAiTWVyZ2luZyBvc3cgZmlsZXMgdG8gJHtweXByb3BoZXRfb3V0fSIKcHlwcm9waGV0IG1lcmdlIFwKICAgICAgICAgIC0tdGVtcGxhdGUgIiR7VFJBTlNJVElPTl9QUkVGSVh9LnBxcCIgXAogICAgICAgICAgLS1vdXQ9IiR7cHlwcm9waGV0X291dH0iIFwKICAgICAgICAgICR7c3dhdGhfb3V0fS8qLm9zdwpweXByb3BoZXQgc2NvcmUgLS1pbj0iJHtweXByb3BoZXRfb3V0fSIKcHlwcm9waGV0IGV4cG9ydCAtLWluPSIke3B5cHJvcGhldF9vdXR9IiAtLW91dCAidGVzdC50c3YiCiMjIHB5cHJvcGhldCBhbHdheXMgZXhwb3J0cyB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KZmluYWxfbmFtZT0iJChkaXJuYW1lICR7cHlwcm9waGV0X291dH0pLyQoYmFzZW5hbWUgJHtweXByb3BoZXRfb3V0fSAiLm9zdyIpLnRzdiIKZWNobyAkZmluYWxfbmFtZQptdiAidGVzdC50c3YiCmxzIC1sZCAiJHtweXByb3BoZXRfb3V0fSIKCnRyaWNfdGI9IiR7VFJJQ19PVVRESVJ9X3R1YmVyY3VsaXN0Igpta2RpciAtcCAiJHt0cmljX3RifSIKZmVhdHVyZV9hbGlnbm1lbnQucHkgXAogICAgLS1mb3JjZSBcCiAgICAtLWluICIuLyR7cHlwZGlyfS8iKi50c3YgXAogICAgLS1vdXQgIiR7dHJpY190Yn0vJHtTRUFSQ0hfTUVUSE9EfV8ke0REQV9NRVRIT0R9LnRzdiIgXAogICAgLS1vdXRfbWF0cml4ICIke3RyaWNfdGJ9LyR7RERBX01FVEhPRH1fb3V0bWF0cml4LnRzdiIgXAogICAgLS1vdXRfbWV0YSAiJHt0cmljX3RifS8ke0REQV9NRVRIT0R9X21ldGEudHN2IgoyPiIke3RyaWNfdGJ9L2ZlYXR1cmVfYWxpZ25tZW50LmVyciIgXAogMT4iJHt0cmljX3RifS9mZWF0dXJlX2FsaWdubWVudC5vdXQiCmVjaG8gIldyb3RlIGZpbmFsIG91dHB1dCB0byAke3RyaWNfdGJ9LyR7U0VBUkNIX01FVEhPRH1fJHtEREFfTUVUSE9EfS50c3YiCmBgYAoKIyBERVAgdXNhZ2UKClRoYW5rcyB0byBWaXZlaywgSSBub3cgYW0gYXdhcmUgb2YgREVQLCB3aGljaCBkb2VzIGV2ZXJ5dGhpbmcgSSB3aXNoIE1Tc3RhdHMgZGlkLgpUaGUgbWF0cml4IGdpdmVuIHRvIG1lIGJ5IHRyaWMncyBmZWF0dXJlX2FsaWdubWVudC5weSBJIHRoaW5rIGdpdmVzIG1lIHdoYXQgREVQCnJlcXVpcmVzLCBhbG9uZyB3aXRoIG15IGFubm90YXRpb25zIGFuZCBzYW1wbGUgc2hlZXQuCgpMZXQgdXMgc2VlIGlmIHRoaXMgaXMgdHJ1ZS4KCiMjIFByb3RlaW4gYW5ub3RhdGlvbnMKCmBgYHtyIHByb3RlaW5fYW5ub3RhdGlvbnN9Cm10Yl9nZmYgPC0gInJlZmVyZW5jZS9teWNvYmFjdGVyaXVtX3R1YmVyY3Vsb3Npc19oMzdydl8yLmdmZi5neiIKbXRiX2dlbm9tZSA8LSAicmVmZXJlbmNlL210dWJlcmN1bG9zaXNfaDM3cnZfZ2VuYmFuay5mYXN0YSIKbXRiX2NkcyA8LSAicmVmZXJlbmNlL210Yl9jZHMuZmFzdGEiCgptdGJfYW5ub3RhdGlvbnMgPC0gc20obG9hZF9nZmZfYW5ub3RhdGlvbnMobXRiX2dmZiwgdHlwZT0iZ2VuZSIpKQpjb2xuYW1lcyhtdGJfYW5ub3RhdGlvbnMpIDwtIGdzdWIocGF0dGVybj0iXFwuIiwgcmVwbGFjZW1lbnQ9IiIsIHg9Y29sbmFtZXMobXRiX2Fubm90YXRpb25zKSkKbXRiX2Fubm90YXRpb25zW1siZGVzY3JpcHRpb24iXV0gPC0gZ3N1YihwYXR0ZXJuPSJcXCsiLCByZXBsYWNlbWVudD0iICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeD1tdGJfYW5ub3RhdGlvbnNbWyJkZXNjcmlwdGlvbiJdXSkKbXRiX2Fubm90YXRpb25zW1siZnVuY3Rpb24iXV0gPC0gZ3N1YihwYXR0ZXJuPSJcXCsiLCByZXBsYWNlbWVudD0iICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeD1tdGJfYW5ub3RhdGlvbnNbWyJmdW5jdGlvbiJdXSkKcm93bmFtZXMobXRiX2Fubm90YXRpb25zKSA8LSBtdGJfYW5ub3RhdGlvbnNbWyJJRCJdXQoKbXRiX21pY3JvYmVzIDwtIGxvYWRfbWljcm9iZXNvbmxpbmVfYW5ub3RhdGlvbnMoaWQ9ODMzMzIpCmBgYAoKIyMgUHJlcHJvY2VzcyBpbnRlbnNpdGllcyBpbiBwcmVwYXJhdGlvbiBmb3IgREVQCgpgYGB7ciBzd2F0aDJzdGF0cywgZmlnLnNob3c9ImhpZGUifQp2ZXIgPC0gIjIwMTkwMzI3Igp1bXBfZGF0YSA8LSByZWFkLmNzdigKICBwYXN0ZTAoInJlc3VsdHMvdHJpYy8iLCB2ZXIsICIvd2hvbGVfOG16X2RpYV91bXBpcmUvY29tZXRfSENELnRzdiIpLCBzZXA9Ilx0IikKdW1wX2RhdGFbWyJQcm90ZWluTmFtZSJdXSA8LSBnc3ViKHBhdHRlcm49Il4oLiopXy4qJCIsIHJlcGxhY2VtZW50PSJcXDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeD11bXBfZGF0YVtbIlByb3RlaW5OYW1lIl1dKQpzYW1wbGVfYW5ub3QgPC0gZXh0cmFjdF9tZXRhZGF0YShwYXN0ZTAoInNhbXBsZV9zaGVldHMvTXRiX2RpYV9zYW1wbGVzX3VtcGlyZV8yMDE5MDUyMi54bHN4IikpCmNvbG5hbWVzKHNhbXBsZV9hbm5vdCkKcm93bmFtZXMoc2FtcGxlX2Fubm90KQpsZXZlbHMoYXMuZmFjdG9yKHVtcF9kYXRhW1siZmlsZW5hbWUiXV0pKQoKZGV2dG9vbHM6OmxvYWRfYWxsKCJ+L3NjcmF0Y2gvZ2l0L1NXQVRIMnN0YXRzX215Zm9ya2VkIikKdW1wX3MycyA8LSBTV0FUSDJzdGF0czo6c2FtcGxlX2Fubm90YXRpb24oZGF0YT11bXBfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX2Fubm90YXRpb249c2FtcGxlX2Fubm90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxscGVwdGlkZW5hbWVfY29sdW1uPSJmdWxscGVwdGlkZW5hbWUiKQoKZGVjb3lfbGlzdHMgPC0gYXNzZXNzX2RlY295X3JhdGUodW1wX3MycykKIyMgVGhpcyBzZWVtcyBhIGJpdCBoaWdoIHRvIG1lLCB5ZXNubz8KdW1wX2ZkciA8LSBhc3Nlc3NfZmRyX292ZXJhbGwodW1wX3Mycywgb3V0cHV0PSJSY29uc29sZSIsIHBsb3Q9VFJVRSkKCnVtcF9ieXJ1bl9mZHIgPC0gYXNzZXNzX2Zkcl9ieXJ1bih1bXBfczJzLCBGRlQ9MC43LCBwbG90PVRSVUUsIG91dHB1dD0iUmNvbnNvbGUiKQp1bXBfY2hvc2VuX21zY29yZTIgPC0gbXNjb3JlNGFzc2F5ZmRyKHVtcF9zMnMsIEZGVD0wLjcsIGZkcl90YXJnZXQ9MC4wMikKdW1wX3Byb3Rfc2NvcmUgPC0gbXNjb3JlNHByb3RmZHIodW1wX3MycywgRkZUPTAuNywgZmRyX3RhcmdldD0wLjAyKQoKdW1wX2ZpbHRlcmVkX21zIDwtIGZpbHRlcl9tc2NvcmUodW1wX3MycywgdW1wX2Nob3Nlbl9tc2NvcmUyKQp1bXBfZmlsdGVyZWRfZnEgPC0gZmlsdGVyX21zY29yZV9mcmVxb2JzKHVtcF9zMnMsIDAuMDEsIDAuOCwgcm0uZGVjb3k9RkFMU0UpCnVtcF9maWx0ZXJlZF9tc19mZHIgPC0gZmlsdGVyX21zY29yZV9mZHIodW1wX2ZpbHRlcmVkX21zLCBGRlQ9MC43LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJhbGxfcHJvdGVpbl9mZHJfdGFyZ2V0PXVtcF9wcm90X3Njb3JlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyX292ZXJhbGxfcGVwdGlkZV9mZHJfbGltaXQ9MC4wNSkKdW1wX2ZpbHRlcmVkX21zX2Zkcl9wciA8LSBmaWx0ZXJfcHJvdGVvdHlwaWNfcGVwdGlkZXModW1wX2ZpbHRlcmVkX21zX2ZkcikKdW1wX2ZpbHRlcmVkX21zX2Zkcl9wcl9hbGwgPC0gZmlsdGVyX2FsbF9wZXB0aWRlcyh1bXBfZmlsdGVyZWRfbXNfZmRyX3ByKQp1bXBfZmlsdGVyZWRfbXNfZmRyX3ByX2FsbF9zdHIgPC0gZmlsdGVyX29uX21heF9wZXB0aWRlcyhkYXRhPXVtcF9maWx0ZXJlZF9tc19mZHJfcHJfYWxsLCBuX3BlcHRpZGVzPTEwKQp1bXBfZmlsdGVyZWRfYWxsX2ZpbHRlcnMgPC0gZmlsdGVyX29uX21pbl9wZXB0aWRlcyhkYXRhPXVtcF9maWx0ZXJlZF9tc19mZHJfcHJfYWxsX3N0ciwgbl9wZXB0aWRlcz0zKQoKdW1wX21hdHJpeF9wcmVmaXggPC0gZmlsZS5wYXRoKCJyZXN1bHRzIiwgInN3YXRoMnN0YXRzIiwgdmVyKQppZiAoIWZpbGUuZXhpc3RzKHVtcF9tYXRyaXhfcHJlZml4KSkgewogIGRpci5jcmVhdGUodW1wX21hdHJpeF9wcmVmaXgpCn0KcHJvdGVpbl9tYXRyaXhfYWxsIDwtIHdyaXRlX21hdHJpeF9wcm90ZWlucygKICB1bXBfczJzLCB3cml0ZS5jc3Y9VFJVRSwKICBmaWxlbmFtZT1maWxlLnBhdGgodW1wX21hdHJpeF9wcmVmaXgsICJ1bXBfcHJvdGVpbl9hbGwuY3N2IikpCmRpbShwcm90ZWluX21hdHJpeF9hbGwpCnByb3RlaW5fbWF0cml4X21zY29yZSA8LSB3cml0ZV9tYXRyaXhfcHJvdGVpbnMoCiAgdW1wX2ZpbHRlcmVkX21zLCB3cml0ZS5jc3Y9VFJVRSwKICBmaWxlbmFtZT1maWxlLnBhdGgodW1wX21hdHJpeF9wcmVmaXgsICJ1bXBfcHJvdGVpbl9tYXRyaXhfbXNjb3JlLmNzdiIpKQpkaW0ocHJvdGVpbl9tYXRyaXhfbXNjb3JlKQpwZXB0aWRlX21hdHJpeF9tc2NvcmUgPC0gd3JpdGVfbWF0cml4X3BlcHRpZGVzKAogIHVtcF9maWx0ZXJlZF9tcywgd3JpdGUuY3N2PVRSVUUsCiAgZmlsZW5hbWU9ZmlsZS5wYXRoKHVtcF9tYXRyaXhfcHJlZml4LCAidW1wX3BlcHRpZGVfbWF0cml4X21zY29yZS5jc3YiKSkKZGltKHBlcHRpZGVfbWF0cml4X21zY29yZSkKcHJvdGVpbl9tYXRyaXhfZmlsdGVyZWQgPC0gd3JpdGVfbWF0cml4X3Byb3RlaW5zKAogIHVtcF9maWx0ZXJlZF9hbGxfZmlsdGVycywgd3JpdGUuY3N2PVRSVUUsCiAgZmlsZW5hbWU9ZmlsZS5wYXRoKHVtcF9tYXRyaXhfcHJlZml4LCAidW1wX3Byb3RlaW5fbWF0cml4X2ZpbHRlcmVkLmNzdiIpKQpkaW0ocHJvdGVpbl9tYXRyaXhfZmlsdGVyZWQpCnBlcHRpZGVfbWF0cml4X2ZpbHRlcmVkIDwtIHdyaXRlX21hdHJpeF9wZXB0aWRlcygKICB1bXBfZmlsdGVyZWRfYWxsX2ZpbHRlcnMsIHdyaXRlLmNzdj1UUlVFLAogIGZpbGVuYW1lPWZpbGUucGF0aCh1bXBfbWF0cml4X3ByZWZpeCwgInVtcF9wZXB0aWRlX21hdHJpeF9maWx0ZXJlZC5jc3YiKSkKZGltKHBlcHRpZGVfbWF0cml4X2ZpbHRlcmVkKQpgYGAKCiMgTG9vayBhdCByYXcgZGF0YQoKYGBge3IgbXNyYXd9Cm16bWxfZGF0YSA8LSBleHRyYWN0X21zcmF3X2RhdGEoc2FtcGxlX2Fubm90LCBwYXJhbGxlbD1GQUxTRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9Im16TUwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X3dpbmRvd19vdmVybGFwPUZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfY29sdW1uPSJtem1sZmlsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWZpbGU9InRlc3RpbmcucmRhIikKYGBgCgojIEdldCBweXByb3BoZXQgZGF0YQoKYGBge3IgcHlwcm9waGV0X3Bsb3RzfQppbl92ZXIgPC0gIjIwMTkwNTIyIgpweXBfbWV0YWRhdGEgPC0gZ2x1ZTo6Z2x1ZSgic2FtcGxlX3NoZWV0cy9NdGJfZGlhX3NhbXBsZXNfdW1waXJlX3tpbl92ZXJ9Lnhsc3giKQpweXByb3BoZXRfZnVuIDwtIGV4dHJhY3RfcHlwcm9waGV0X2RhdGEobWV0YWRhdGE9cHlwX21ldGFkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHlwcm9waGV0X2NvbHVtbj0iZGlhc2NvcmVkIikKCmludGVuc2l0aWVzX2VzeEcgPC0gcGxvdF9weXByb3BoZXRfcHJvdGVpbihweXByb3BoZXRfZnVuLCBleHB0X25hbWVzPSJmaWd1cmVuYW1lIiwgc2NhbGU9ImxvZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0iZXN4RyBJbnRlbnNpdGllcyIsIGNvbHVtbj0iaW50ZW5zaXR5IiwgcHJvdGVpbj0iUnYwMjg3IikKcHAoZmlsZT0iaW1hZ2VzL3VtcF9lc3hHX2ludGVuc2l0aWVzLnBuZyIsIGltYWdlPWludGVuc2l0aWVzX2VzeEcpCgppbnRlbnNpdGllc19lc3hIIDwtIHBsb3RfcHlwcm9waGV0X3Byb3RlaW4ocHlwcm9waGV0X2Z1biwgZXhwdF9uYW1lcz0iZmlndXJlbmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0iZXN4SCBJbnRlbnNpdGllcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZT0ibG9nIiwgY29sdW1uPSJpbnRlbnNpdHkiLCBwcm90ZWluPSJSdjAyODgiKQpwcChmaWxlPSJpbWFnZXMvdW1wX2VzeEhfaW50ZW5zaXRpZXMucG5nIiwgaW1hZ2U9aW50ZW5zaXRpZXNfZXN4SCkKCmludGVuc2l0aWVzX2xwcUggPC0gcGxvdF9weXByb3BoZXRfcHJvdGVpbihweXByb3BoZXRfZnVuLCBleHB0X25hbWVzPSJmaWd1cmVuYW1lIiwgc2NhbGU9ImxvZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0ibHBxSF9pbnRlbnNpdGllcyIsIGNvbHVtbj0iaW50ZW5zaXR5IiwgcHJvdGVpbj0iUnYzNzYzIikKcHAoZmlsZT0iaW1hZ2VzL3VtcF9scHFoX2ludGVuc2l0aWVzLnBuZyIsIGltYWdlPWludGVuc2l0aWVzX2xwcUgpCgppbnRlbnNpdGllc19ncm9lbDEgPC0gcGxvdF9weXByb3BoZXRfcHJvdGVpbihweXByb3BoZXRfZnVuLCBleHB0X25hbWVzPSJmaWd1cmVuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9Imdyb0VMMSBpbnRlbnNpdGllcyIsIHNjYWxlPSJsb2ciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW49ImludGVuc2l0eSIsIHByb3RlaW49IlJ2MzQxNyIpCnBwKGZpbGU9ImltYWdlcy91bXBfZ3JvZWwxX2ludGVuc2l0aWVzLnBuZyIsIGltYWdlPWludGVuc2l0aWVzX2dyb2VsMSkKCmludGVuc2l0aWVzX2dyb2VsMiA8LSBwbG90X3B5cHJvcGhldF9wcm90ZWluKHB5cHJvcGhldF9mdW4sIGV4cHRfbmFtZXM9ImZpZ3VyZW5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0iZ3JvRUwyIGludGVuc2l0aWVzIiwgc2NhbGU9ImxvZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbj0iaW50ZW5zaXR5IiwgcHJvdGVpbj0iUnYwNDQwIikKcHAoZmlsZT0iaW1hZ2VzL3VtcF9ncm9lbDJfaW50ZW5zaXRpZXMucG5nIiwgaW1hZ2U9aW50ZW5zaXRpZXNfZ3JvZWwyKQoKaW50ZW5zaXRpZXNfZmFwIDwtIHBsb3RfcHlwcm9waGV0X3Byb3RlaW4ocHlwcm9waGV0X2Z1biwgZXhwdF9uYW1lcz0iZmlndXJlbmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSJmYXAgaW50ZW5zaXRpZXMiLCBzY2FsZT0ibG9nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uPSJpbnRlbnNpdHkiLCBwcm90ZWluPSJSdjE4NjAiKQpwcChmaWxlPSJpbWFnZXMvdW1wX2ZhcF9pbnRlbnNpdGllcy5wbmciLCBpbWFnZT1pbnRlbnNpdGllc19mYXApCgppbnRlbnNpdGllc19rYXRnIDwtIHBsb3RfcHlwcm9waGV0X3Byb3RlaW4ocHlwcm9waGV0X2Z1biwgZXhwdF9uYW1lcz0iZmlndXJlbmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0ia2F0RyBpbnRlbnNpdGllcyIsIHNjYWxlPSJsb2ciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uPSJpbnRlbnNpdHkiLCBwcm90ZWluPSJSdjE5MDgiKQpwcChmaWxlPSJpbWFnZXMvdW1wX2thdGdfaW50ZW5zaXRpZXMucG5nIiwgaW1hZ2U9aW50ZW5zaXRpZXNfa2F0ZykKYGBgCgojIEdldCBpbnRlbnNpdGllcwoKYGBge3IgdGJfZXhwdCwgZmlnLnNob3c9ImhpZGUifQppbnRlbnNpdGllcyA8LSBwcm90ZWluX21hdHJpeF9maWx0ZXJlZApjb2xzIDwtIGdzdWIoeD1jb2xuYW1lcyhpbnRlbnNpdGllcyksIHBhdHRlcm49Il4uKigyMDE4LiokKSIsIHJlcGxhY2VtZW50PSJzXFwxIikKY29sc1tbMV1dIDwtICJQcm90ZWluIgpjb2xuYW1lcyhpbnRlbnNpdGllcykgPC0gY29scwpyb3duYW1lcyhpbnRlbnNpdGllcykgPC0gaW50ZW5zaXRpZXNbWyJQcm90ZWluIl1dCmludGVuc2l0aWVzW1siUHJvdGVpbiJdXSA8LSBOVUxMCgojIyBDaGVjayB0aGUgc2FtcGxlIG5hbWVzIG9mIHRoZSBpbnRlbnNpdHkgbWF0cml4IGFuZCBzYW1wbGUgYW5ub3RhdGlvbnMuCmNvbG5hbWVzKGludGVuc2l0aWVzKSAlaW4lIHJvd25hbWVzKHNhbXBsZV9hbm5vdCkKcm93bmFtZXMoc2FtcGxlX2Fubm90KSAlaW4lIGNvbG5hbWVzKGludGVuc2l0aWVzKQojI3Jvd25hbWVzKHNhbXBsZV9hbm5vdCkKIyNjb2xuYW1lcyhpbnRlbnNpdGllcykKCnJlb3JkZXJlZCA8LSBjb2xuYW1lcyhpbnRlbnNpdGllcykKbWV0YWRhdGEgPC0gc2FtcGxlX2Fubm90W3Jlb3JkZXJlZCwgXQp1bXBfZXhwdCA8LSBjcmVhdGVfZXhwdChzYW1wbGVfYW5ub3QsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50X2RhdGFmcmFtZT1pbnRlbnNpdGllcywKICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZV9pbmZvPW10Yl9hbm5vdGF0aW9ucykKYGBgCgojIFBhc3MgdGhlIGRhdGEgdG8gREVQIGFuZCBzZWUgd2hhdCBoYXBwZW5zLgoKYGBge3IgbWFrZV9zZV9zaGVuYW5pZ2Fuc30KZGV2dG9vbHM6OmxvYWRfYWxsKCJ+L3NjcmF0Y2gvZ2l0L0RFUCIpCmxpYnJhcnkoZHBseXIpCm15X21ha2Vfc2UgPC0gZnVuY3Rpb24gKHByb3RlaW5zX3VuaXF1ZSwgY29sdW1ucywgZXhwZGVzaWduLAogICAgICAgICAgICAgICAgICAgICAgICBpZF9jb2x1bW49IklEIiwgbmFtZV9jb2x1bW49Im5hbWUiKSB7CiAgYXNzZXJ0dGhhdDo6YXNzZXJ0X3RoYXQoaXMuZGF0YS5mcmFtZShwcm90ZWluc191bmlxdWUpLCBpcy5pbnRlZ2VyKGNvbHVtbnMpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlzLmRhdGEuZnJhbWUoZXhwZGVzaWduKSkKICBpZiAoYW55KCFjKCJuYW1lIiwgIklEIikgJWluJSBjb2xuYW1lcyhwcm90ZWluc191bmlxdWUpKSkgewogICAgc3RvcCgiJ25hbWUnIGFuZC9vciAnSUQnIGNvbHVtbnMgYXJlIG5vdCBwcmVzZW50IGluICciLAogICAgICAgICBkZXBhcnNlKHN1YnN0aXR1dGUocHJvdGVpbnNfdW5pcXVlKSksICInLlxuUnVuIG1ha2VfdW5pcXVlKCkgdG8gb2J0YWluIHRoZSByZXF1aXJlZCBjb2x1bW5zIiwKICAgICAgICAgY2FsbC4gPSBGQUxTRSkKICB9CiAgaWYgKGFueSghYygibGFiZWwiLCAiY29uZGl0aW9uIiwgInJlcGxpY2F0ZSIpICVpbiUgY29sbmFtZXMoZXhwZGVzaWduKSkpIHsKICAgIHN0b3AoIidsYWJlbCcsICdjb25kaXRpb24nIGFuZC9vciAncmVwbGljYXRlJyBjb2x1bW5zIiwKICAgICAgICAgImFyZSBub3QgcHJlc2VudCBpbiB0aGUgZXhwZXJpbWVudGFsIGRlc2lnbiIsIGNhbGwuID0gRkFMU0UpCiAgfQogIGlmIChhbnkoIWFwcGx5KHByb3RlaW5zX3VuaXF1ZVssIGNvbHVtbnNdLCAyLCBpcy5udW1lcmljKSkpIHsKICAgIHN0b3AoInNwZWNpZmllZCAnY29sdW1ucycgc2hvdWxkIGJlIG51bWVyaWMiLCAiXG5SdW4gbWFrZV9zZV9wYXJzZSgpIHdpdGggdGhlIGFwcHJvcHJpYXRlIGNvbHVtbnMgYXMgYXJndW1lbnQiLAogICAgICAgICBjYWxsLiA9IEZBTFNFKQogIH0KICBpZiAodGliYmxlOjppcy50aWJibGUocHJvdGVpbnNfdW5pcXVlKSkgewogICAgcHJvdGVpbnNfdW5pcXVlIDwtIGFzLmRhdGEuZnJhbWUocHJvdGVpbnNfdW5pcXVlKQogIH0KICBpZiAodGliYmxlOjppcy50aWJibGUoZXhwZGVzaWduKSkgewogICAgZXhwZGVzaWduIDwtIGFzLmRhdGEuZnJhbWUoZXhwZGVzaWduKQogIH0KICByb3duYW1lcyhwcm90ZWluc191bmlxdWUpIDwtIHByb3RlaW5zX3VuaXF1ZVtbbmFtZV9jb2x1bW5dXQogIHJhdyA8LSBwcm90ZWluc191bmlxdWVbLCBjb2x1bW5zXQogIHJhd1tyYXcgPT0gMF0gPC0gTkEKICByYXcgPC0gbG9nMihyYXcpCiAgIyMgUGVyaGFwcyBjb25zaWRlciB0aGUgZm9sbG93aW5nPwogICMjIHJhdyA8LSBsb2cxcChyYXcpIC8gbG9nKDIpCiAgZXhwZGVzaWduIDwtIGRwbHlyOjptdXRhdGUoZXhwZGVzaWduLCBjb25kaXRpb249bWFrZS5uYW1lcyhjb25kaXRpb24pKQogICMjIEkgY2hhbmdlZCB0aGUgZm9sbG93aW5nIGJlY2F1c2UgaXQgZGlkbid0IG1ha2Ugc2Vuc2UgdG8gbWUuCiAgaWYgKGlzLm51bGwoZXhwZGVzaWduW1tpZF9jb2x1bW5dXSkpIHsKICAgIGV4cGRlc2lnbiA8LSBleHBkZXNpZ24gJT4lCiAgICAgIHRpZHlyOjp1bml0ZShjb25kaXRpb24sIHJlcGxpY2F0ZSwgcmVtb3ZlPUZBTFNFKQogIH0KICByb3duYW1lcyhleHBkZXNpZ24pIDwtIGV4cGRlc2lnbltbaWRfY29sdW1uXV0KICBtYXRjaGVkIDwtIG1hdGNoKG1ha2UubmFtZXMoREVQOjo6ZGVsZXRlX3ByZWZpeChleHBkZXNpZ25bWyJsYWJlbCJdXSkpLAogICAgICAgICAgICAgICAgICAgbWFrZS5uYW1lcyhERVA6OjpkZWxldGVfcHJlZml4KGNvbG5hbWVzKHJhdykpKSkKICBpZiAoYW55KGlzLm5hKG1hdGNoZWQpKSkgewogICAgc3RvcCgiTm9uZSBvZiB0aGUgbGFiZWxzIGluIHRoZSBleHBlcmltZW50YWwgZGVzaWduIG1hdGNoICIsCiAgICAgICAgICJ3aXRoIGNvbHVtbiBuYW1lcyBpbiAncHJvdGVpbnNfdW5pcXVlJyIsICJcblJ1biBtYWtlX3NlKCkgd2l0aCB0aGUgY29ycmVjdCBsYWJlbHMgaW4gdGhlIGV4cGVyaW1lbnRhbCBkZXNpZ24iLAogICAgICAgICAiYW5kL29yIGNvcnJlY3QgY29sdW1ucyBzcGVjaWZpY2F0aW9uIikKICB9CiAgY29sbmFtZXMocmF3KVttYXRjaGVkXSA8LSBleHBkZXNpZ25bW2lkX2NvbHVtbl1dCiAgcmF3IDwtIHJhd1ssICFpcy5uYShjb2xuYW1lcyhyYXcpKV1bcm93bmFtZXMoZXhwZGVzaWduKV0KICByb3dfZGF0YSA8LSBwcm90ZWluc191bmlxdWVbLCAtY29sdW1uc10KICByb3duYW1lcyhyb3dfZGF0YSkgPC0gcm93X2RhdGEkbmFtZQogIHNlIDwtIFN1bW1hcml6ZWRFeHBlcmltZW50KGFzc2F5cyA9IGFzLm1hdHJpeChyYXcpLCBjb2xEYXRhID0gZXhwZGVzaWduLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGEgPSByb3dfZGF0YSkKICByZXR1cm4oc2UpCn0KYGBgCgpgYGB7ciBzdGFydF9ERVB9CmxpYnJhcnkoREVQKQpkZXZ0b29sczo6bG9hZF9hbGwoIn4vc2NyYXRjaC9naXQvREVQIikKbGlicmFyeShTdW1tYXJpemVkRXhwZXJpbWVudCkKCmRlc2lnbiA8LSBwRGF0YSh1bXBfZXhwdCkKZGVzaWduW1sibGFiZWwiXV0gPC0gZGVzaWduW1sic2FtcGxlaWQiXV0KZGVzaWduW1sicmVwbGljYXRlIl1dIDwtIGRlc2lnbltbInNhbXBsZWlkIl1dCgpteV9zZSA8LSBTdW1tYXJpemVkRXhwZXJpbWVudCgKICBhc3NheXM9ZXhwcnModW1wX2V4cHQpLAogIGNvbERhdGE9ZGVzaWduLAogIHJvd0RhdGE9ZkRhdGEodW1wX2V4cHQpKQoKbXRiX3VuaXF1ZSA8LSBhcy5kYXRhLmZyYW1lKGV4cHJzKHVtcF9leHB0KSkKbXRiX3VuaXF1ZVtbIm5hbWUiXV0gPC0gcm93bmFtZXMobXRiX3VuaXF1ZSkKbXRiX3VuaXF1ZVtbIklEIl1dIDwtIHJvd25hbWVzKG10Yl91bmlxdWUpCmRlc2lnbltbIklEIl1dIDwtIHJvd25hbWVzKGRlc2lnbikKaW50ZW5zaXR5X2NvbHVtbnMgPC0gMTo2MAojIyBtdGJfc2UgPC0gd3RmKG10Yl91bmlxdWUsIGludGVuc2l0eV9jb2x1bW5zLCBkZXNpZ24pCm10Yl9zZSA8LSBteV9tYWtlX3NlKG10Yl91bmlxdWUsIGludGVuc2l0eV9jb2x1bW5zLCBkZXNpZ24pCgpERVA6OnBsb3RfZnJlcXVlbmN5KG10Yl9zZSkKZGltKGFzc2F5KG10Yl9zZSkpCm10Yl9maWx0IDwtIERFUDo6ZmlsdGVyX21pc3N2YWwobXRiX3NlLCB0aHI9MikKZGltKGFzc2F5KG10Yl9maWx0KSkKREVQOjpwbG90X251bWJlcnMobXRiX3NlKQpERVA6OnBsb3RfY292ZXJhZ2UobXRiX3NlKQoKbXRiX25vcm0gPC0gREVQOjpub3JtYWxpemVfdnNuKG10Yl9zZSkKREVQOjpwbG90X25vcm1hbGl6YXRpb24obXRiX3NlLCBtdGJfbm9ybSkKCkRFUDo6cGxvdF9taXNzdmFsKG10Yl9zZSkKREVQOjpwbG90X2RldGVjdChtdGJfc2UpCgptdGJfaW1wIDwtIERFUDo6aW1wdXRlKG10Yl9ub3JtLCBmdW49Ik1pblByb2IiLCBxPTAuMDEpCm10Yl9pbXBfbWFuIDwtIERFUDo6aW1wdXRlKG10Yl9ub3JtLCBmdW49Im1hbiIsIHNoaWZ0PTEuOCwgc2NhbGU9MC4zKQpERVA6OnBsb3RfaW1wdXRhdGlvbihtdGJfbm9ybSwgbXRiX2ltcCkKCm5vcm1fZXhwcnMgPC0gYXNzYXkobXRiX25vcm0pCmltcF9leHBycyA8LSBhc3NheShtdGJfaW1wKQptYW5fZXhwcnMgPC0gYXNzYXkobXRiX2ltcF9tYW4pCnN1bW1hcnkobm9ybV9leHBycykKc3VtbWFyeShpbXBfZXhwcnMpCnN1bW1hcnkobWFuX2V4cHJzKQpjb2xTdW1zKG5vcm1fZXhwcnMsIG5hLnJtPVRSVUUpCmNvbFN1bXMoaW1wX2V4cHJzKQoKbXRiX2RpZmYgPC0gREVQOjp0ZXN0X2RpZmYobXRiX2ltcCwgdHlwZT0iYWxsIikKbXRiX2RpZmYgPC0gREVQOjp0ZXN0X2RpZmYobXRiX2ltcCwgdHlwZT0ibWFudWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdD1jKCJ3dF9maWx0cmF0ZV92c193dF93aG9sZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsdGFfZmlsdHJhdGVfdnNfd3RfZmlsdHJhdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBfZmlsdHJhdGVfdnNfd3RfZmlsdHJhdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInd0X2ZpbHRyYXRlX3ZzX2RlbHRhX2ZpbHRyYXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3dF9maWx0cmF0ZV92c19jb21wX2ZpbHRyYXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3dF93aG9sZV92c19kZWx0YV93aG9sZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3Rfd2hvbGVfdnNfY29tcF93aG9sZSIpKQoKbXRiX2RlcCA8LSBERVA6OmFkZF9yZWplY3Rpb25zKG10Yl9kaWZmLCBhbHBoYT0wLjUsIGxmYz0wLjYpCiMjbXRiX3BjYSA8LSBERVA6OnBsb3RfcGNhKG10Yl9kZXApCiMjIFRoZSBQQ0EgcGxvdHRlciBwcm92aWRlZCBieSBERVAgaGFzIHNvbWUgcHJvYmxlbXMuCgpERVA6OnBsb3RfY29yKG10Yl9kZXApCkRFUDo6cGxvdF9oZWF0bWFwKG10Yl9kZXAsIHR5cGU9ImNlbnRlcmVkIiwga21lYW5zPVRSVUUpCkRFUDo6cGxvdF9oZWF0bWFwKG10Yl9kZXAsIHR5cGU9ImNvbnRyYXN0Iiwga21lYW5zPVRSVUUpCgpERVA6OnBsb3Rfdm9sY2FubyhtdGJfZGVwLCBjb250cmFzdD0id3Rfd2hvbGVfdnNfZGVsdGFfd2hvbGUiLCBhZGp1c3RlZD1GQUxTRSkKREVQOjpwbG90X3ZvbGNhbm8obXRiX2RlcCwgY29udHJhc3Q9Ind0X2ZpbHRyYXRlX3ZzX2RlbHRhX2ZpbHRyYXRlIikKREVQOjpwbG90X2NvbmQobXRiX2RlcCkKbXRiX3Jlc3VsdCA8LSBERVA6OmdldF9yZXN1bHRzKG10Yl9kZXApCnBsb3Rfc2luZ2xlKG10Yl9kZXAsIHByb3RlaW5zID0gYygiUnYwMjg3IiwgIlJ2MDI4OCIpKQp3cml0dGVuX2RlcCA8LSBocGdsdG9vbHM6OndyaXRlX3hscyhkYXRhPW10Yl9yZXN1bHQsIGV4Y2VsPSJleGNlbC9kZXBfcmVzdWx0Lnhsc3giKQpgYGAKCiMgTWlub3IgY2hhbmdlIHRvIHBsb3RfbWlzc3ZhbAoKREVQIGhhcyBhIG5lYXQgZnVuY3Rpb24gdG8gcGxvdCBtaXNzaW5nIHZhbHVlcy4gIFNhZGx5LCBpdCBkb2VzIG5vdCByZXR1cm4gdGhlCmFjdHVhbCBtYXRyaXgsIG9ubHkgdGhlIHBsb3QuICBUaGlzIGlzIG5pY2UgYW5kIGFsbCwgYnV0IEkgbmVlZCB0aGUgbWF0cml4LCBlcmdvCnRoaXMgbWlub3IgY2hhbmdlLgoKYGBge3IgbXlfcGxvdF9taXNzaW5nfQpjb3VudF9kZWZpbmVkIDwtIGZ1bmN0aW9uKHNlKSB7CiAgZGYgPC0gYXMuZGF0YS5mcmFtZShhc3NheShzZSkpCiAgbmFfaWR4IDwtIGlzLm5hKGRmKQogIGRlZmluZWRfbXRyeCA8LSBpZmVsc2UoaXMubmEoZGYpLCAwLCAxKQogIHJldHVybihkZWZpbmVkX210cngpCn0KCmRlZl9tdHJ4IDwtIGNvdW50X2RlZmluZWQobXRiX3NlKQpzdW1tYXJ5KGRlZl9tdHJ4KQpkZWZpbmVkX2J5X3Byb3RlaW4gPC0gcm93U3VtcyhkZWZfbXRyeCkKaGVhZChkZWZpbmVkX2J5X3Byb3RlaW4pCmRlZmluZWRfYnlfc2FtcGxlIDwtIGNvbFN1bXMoZGVmX210cngpCmRlZmluZWRfYnlfc2FtcGxlCmBgYAoKIyBSZXF1ZXN0IDIwMTkwNTIzCgpDb21wYXJlIG91ciAnbm9ybWFsJyBvcGVuc3dhdGggb3V0cHV0IHZpYSBocGdsdG9vbHMgYW5hbHlzaXMgdnMuIHRoZSB1bXBpcmUKdmVyc2lvbi4gIFNlY29uZGFyeSBnb2FsOiBXaXRoIGFuZCB3aXRob3V0IGltcHV0YXRpb24uCgpgYGB7ciBjb21wYXJlIHVtcGlyZV92c19ub3JtYWx9CnZlciA8LSAiMjAxODA5MTMiCnRyaWNfZGF0YSA8LSByZWFkLmNzdigKICBwYXN0ZTAoInJlc3VsdHMvdHJpYy8iLCB2ZXIsICIvd2hvbGVfOG16X3R1YmVyY3VsaXN0L2NvbWV0X0hDRC50c3YiKSwgc2VwPSJcdCIpCnRyaWNfZGF0YVtbIlByb3RlaW5OYW1lIl1dIDwtIGdzdWIocGF0dGVybj0iXiguKilfLiokIiwgcmVwbGFjZW1lbnQ9IlxcMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeD10cmljX2RhdGFbWyJQcm90ZWluTmFtZSJdXSkKc2FtcGxlX2Fubm90IDwtIGV4dHJhY3RfbWV0YWRhdGEocGFzdGUwKCJzYW1wbGVfc2hlZXRzL010Yl9kaWFfc2FtcGxlc18iLCB2ZXIsICIueGxzeCIpKQprZXB0IDwtICEgZ3JlcGwoeD1yb3duYW1lcyhzYW1wbGVfYW5ub3QpLCBwYXR0ZXJuPSJec1xcLlxcLiIpCnNhbXBsZV9hbm5vdCA8LSBzYW1wbGVfYW5ub3Rba2VwdCwgXQpkZXZ0b29sczo6bG9hZF9hbGwoIn4vc2NyYXRjaC9naXQvU1dBVEgyc3RhdHNfbXlmb3JrZWQiKQpzMnNfZXhwIDwtIHNhbXBsZV9hbm5vdGF0aW9uKGRhdGE9dHJpY19kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZV9hbm5vdGF0aW9uPXNhbXBsZV9hbm5vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxscGVwdGlkZW5hbWVfY29sdW1uPSJmdWxscGVwdGlkZW5hbWUiKQoKZGVjb3lfbGlzdHMgPC0gYXNzZXNzX2RlY295X3JhdGUoczJzX2V4cCkKIyMgVGhpcyBzZWVtcyBhIGJpdCBoaWdoIHRvIG1lLCB5ZXNubz8KZmRyX292ZXJhbGwgPC0gYXNzZXNzX2Zkcl9vdmVyYWxsKHMyc19leHAsIG91dHB1dD0iUmNvbnNvbGUiLCBwbG90PVRSVUUpCmJ5cnVuX2ZkciA8LSBhc3Nlc3NfZmRyX2J5cnVuKHMyc19leHAsIEZGVD0wLjcsIHBsb3Q9VFJVRSwgb3V0cHV0PSJSY29uc29sZSIpCmNob3Nlbl9tc2NvcmUgPC0gbXNjb3JlNGFzc2F5ZmRyKHMyc19leHAsIEZGVD0wLjcsIGZkcl90YXJnZXQ9MC4wMikKcHJvdF9zY29yZSA8LSBtc2NvcmU0cHJvdGZkcihzMnNfZXhwLCBGRlQ9MC43LCBmZHJfdGFyZ2V0PTAuMDIpCmZpbHRlcmVkX21zIDwtIGZpbHRlcl9tc2NvcmUoczJzX2V4cCwgY2hvc2VuX21zY29yZSkKZmlsdGVyZWRfZnEgPC0gZmlsdGVyX21zY29yZV9mcmVxb2JzKHMyc19leHAsIDAuMDEsIDAuOCwgcm0uZGVjb3k9RkFMU0UpCmZpbHRlcmVkX21zX2ZkciA8LSBmaWx0ZXJfbXNjb3JlX2ZkcihmaWx0ZXJlZF9tcywgRkZUPTAuNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJhbGxfcHJvdGVpbl9mZHJfdGFyZ2V0PXByb3Rfc2NvcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHBlcl9vdmVyYWxsX3BlcHRpZGVfZmRyX2xpbWl0PTAuMDUpCmZpbHRlcmVkX21zX2Zkcl9wciA8LSBmaWx0ZXJfcHJvdGVvdHlwaWNfcGVwdGlkZXMoZmlsdGVyZWRfbXNfZmRyKQpmaWx0ZXJlZF9tc19mZHJfcHJfYWxsIDwtIGZpbHRlcl9hbGxfcGVwdGlkZXMoZmlsdGVyZWRfbXNfZmRyX3ByKQpmaWx0ZXJlZF9tc19mZHJfcHJfYWxsX3N0ciA8LSBmaWx0ZXJfb25fbWF4X3BlcHRpZGVzKGRhdGE9ZmlsdGVyZWRfbXNfZmRyX3ByX2FsbCwgbl9wZXB0aWRlcz0xMCkKZmlsdGVyZWRfYWxsX2ZpbHRlcnMgPC0gZmlsdGVyX29uX21pbl9wZXB0aWRlcyhkYXRhPWZpbHRlcmVkX21zX2Zkcl9wcl9hbGxfc3RyLCBuX3BlcHRpZGVzPTMpCgptYXRyaXhfcHJlZml4IDwtIGZpbGUucGF0aCgicmVzdWx0cyIsICJzd2F0aDJzdGF0cyIsIHZlcikKaWYgKCFmaWxlLmV4aXN0cyhtYXRyaXhfcHJlZml4KSkgewogIGRpci5jcmVhdGUobWF0cml4X3ByZWZpeCkKfQpwcm90ZWluX21hdHJpeF9hbGwgPC0gd3JpdGVfbWF0cml4X3Byb3RlaW5zKAogIHMyc19leHAsIHdyaXRlLmNzdj1UUlVFLAogIGZpbGVuYW1lPWZpbGUucGF0aChtYXRyaXhfcHJlZml4LCAib3N3X3Byb3RlaW5fYWxsLmNzdiIpKQpkaW0ocHJvdGVpbl9tYXRyaXhfYWxsKQpwcm90ZWluX21hdHJpeF9tc2NvcmUgPC0gd3JpdGVfbWF0cml4X3Byb3RlaW5zKAogIGZpbHRlcmVkX21zLCB3cml0ZS5jc3Y9VFJVRSwKICBmaWxlbmFtZT1maWxlLnBhdGgobWF0cml4X3ByZWZpeCwgIm9zd19wcm90ZWluX21hdHJpeF9tc2NvcmUuY3N2IikpCmRpbShwcm90ZWluX21hdHJpeF9tc2NvcmUpCnBlcHRpZGVfbWF0cml4X21zY29yZSA8LSB3cml0ZV9tYXRyaXhfcGVwdGlkZXMoCiAgZmlsdGVyZWRfbXMsIHdyaXRlLmNzdj1UUlVFLAogIGZpbGVuYW1lPWZpbGUucGF0aChtYXRyaXhfcHJlZml4LCAib3N3X3BlcHRpZGVfbWF0cml4X21zY29yZS5jc3YiKSkKZGltKHBlcHRpZGVfbWF0cml4X21zY29yZSkKcHJvdGVpbl9tYXRyaXhfZmlsdGVyZWQgPC0gd3JpdGVfbWF0cml4X3Byb3RlaW5zKAogIGZpbHRlcmVkX2FsbF9maWx0ZXJzLCB3cml0ZS5jc3Y9VFJVRSwKICBmaWxlbmFtZT1maWxlLnBhdGgobWF0cml4X3ByZWZpeCwgIm9zd19wcm90ZWluX21hdHJpeF9maWx0ZXJlZC5jc3YiKSkKZGltKHByb3RlaW5fbWF0cml4X2ZpbHRlcmVkKQpwZXB0aWRlX21hdHJpeF9maWx0ZXJlZCA8LSB3cml0ZV9tYXRyaXhfcGVwdGlkZXMoCiAgZmlsdGVyZWRfYWxsX2ZpbHRlcnMsIHdyaXRlLmNzdj1UUlVFLAogIGZpbGVuYW1lPWZpbGUucGF0aChtYXRyaXhfcHJlZml4LCAib3N3X3BlcHRpZGVfbWF0cml4X2ZpbHRlcmVkLmNzdiIpKQpkaW0ocGVwdGlkZV9tYXRyaXhfZmlsdGVyZWQpCmNvbHMgPC0gY29sbmFtZXMoZmlsdGVyZWRfYWxsX2ZpbHRlcnMpCmRpc2FnZ3JlZ2F0ZWQgPC0gZGlzYWdncmVnYXRlKGZpbHRlcmVkX2FsbF9maWx0ZXJzLCBhbGwuY29sdW1ucz1UUlVFKQptc3N0YXRzX2lucHV0IDwtIGNvbnZlcnRfTVNzdGF0cyhkaXNhZ2dyZWdhdGVkKQoKcHJvdF9tdHJ4IDwtIHByb3RlaW5fbWF0cml4X2ZpbHRlcmVkCnJvd25hbWVzKHByb3RfbXRyeCkgPC0gZ3N1YihwYXR0ZXJuPSJeMVxcLyIsIHJlcGxhY2VtZW50PSIiLCB4PXByb3RfbXRyeFtbInByb3RlaW5uYW1lIl1dKQpwcm90X210cnggPC0gcHJvdF9tdHJ4WywgLTFdCiMjIEltcG9ydGFudCBxdWVzdGlvbjogRGlkIFNXQVRIMnN0YXRzIHJlb3JkZXIgbXkgZGF0YT8KY29sbmFtZXMocHJvdF9tdHJ4KSA8LSBnc3ViKHBhdHRlcm49Il4oLiopKDIwMTguKikkIiwgcmVwbGFjZW1lbnQ9InNcXDIiLCB4PWNvbG5hbWVzKHByb3RfbXRyeCkpCnJlb3JkZXJlZCA8LSBjb2xuYW1lcyhwcm90X210cngpCm1ldGFkYXRhIDwtIHNhbXBsZV9hbm5vdFtyZW9yZGVyZWQsIF0Kb3N3X2V4cHQgPC0gc20oY3JlYXRlX2V4cHQobWV0YWRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50X2RhdGFmcmFtZT1wcm90X210cngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVfaW5mbz1tdGJfYW5ub3RhdGlvbnMpKQpgYGAKCmBgYHtyIGNvbXBhcmVfZW5jeWxvcGVkaWF9CnZlciA8LSAiMjAxOTAzMjciCmVuY19tZXRhZGF0YSA8LSBocGdsdG9vbHM6OjpyZWFkX21ldGFkYXRhKCJzYW1wbGVfc2hlZXRzL010Yl9kaWFfc2FtcGxlc19lbmN5Y2xvcGVkaWFfMjAxOTAzMjcueGxzeCIpCnJvd25hbWVzKGVuY19tZXRhZGF0YSkgPC0gcGFzdGUwKCJzIiwgZW5jX21ldGFkYXRhW1sic2FtcGxlaWQiXV0pCmVuY19tYXRyaXggPC0gcmVhZC50YWJsZSgiZW5jeWNsb3BlZGlhL21vc3Rfc2FtcGxlc19xdWFudF9yZXBvcnQuZWxpYi5wcm90ZWlucy50eHQiLCBoZWFkZXI9VFJVRSkKZW5jX3BlcF9tYXRyaXggPC0gcmVhZC50YWJsZSgiZW5jeWNsb3BlZGlhL21vc3Rfc2FtcGxlc19xdWFudF9yZXBvcnQuZWxpYi5wZXB0aWRlcy50eHQiLCBoZWFkZXI9VFJVRSkKcm93bmFtZXMoZW5jX21hdHJpeCkgPC0gZW5jX21hdHJpeFtbIlByb3RlaW4iXV0KZW5jX21hdHJpeCA8LSBlbmNfbWF0cml4WywgLTFdCmVuY19tYXRyaXggPC0gZW5jX21hdHJpeFssIC0xXQplbmNfbWF0cml4IDwtIGVuY19tYXRyaXhbLCAtMV0KY29sbmFtZXMoZW5jX21hdHJpeCkKY29sbmFtZXMoZW5jX21hdHJpeCkgPC0gZ3N1YihwYXR0ZXJuPSJYIiwgcmVwbGFjZW1lbnQ9InMiLCB4PWNvbG5hbWVzKGVuY19tYXRyaXgpKQpjb2xuYW1lcyhlbmNfbWF0cml4KSA8LSBnc3ViKHBhdHRlcm49IlxcLm16TUwiLCByZXBsYWNlbWVudD0iIiwgeD1jb2xuYW1lcyhlbmNfbWF0cml4KSkKY29sbmFtZXMoZW5jX21hdHJpeCkgPC0gZ3N1YihwYXR0ZXJuPSJeWCIsIHJlcGxhY2VtZW50PSJzIiwgeD1jb2xuYW1lcyhlbmNfbWF0cml4KSkKCm5hX2lkeCA8LSBpcy5uYShlbmNfbWF0cml4KQplbmNfbWF0cml4W25hX2lkeF0gPC0gMAoKZW5jX2V4cHQgPC0gY3JlYXRlX2V4cHQobWV0YWRhdGE9ZW5jX21ldGFkYXRhLCBjb3VudF9kYXRhZnJhbWU9ZW5jX21hdHJpeCwgZ2VuZV9pbmZvPU5VTEwpCmBgYAoKIyBQZXJmb3JtIGNvbXBhcmlzb25zCgpGb3IgdGhlIGZpcnN0IGFuZCBzaW1wbGVzdCBjb21wYXJpc29uLCBJIHdpbGwgdGFrZSB0aGUgbWVkaWFuIGJ5IGNvbmRpdGlvbiBmb3IKdGhlc2UgdGhyZWUgZGF0YSBzZXRzIGFuZCBzZWUgaG93IHRoZXkgY29tcGFyZS4gIFRoZW4gSSB3aWxsIHN1YnNldCB0aGUgZGF0YQppbnRvIHdob2xlIHZzLiBmaWx0ZXJlZCBhbmQgZG8gdGhlIGxvZ0ZDIGNvbXBhcmlzb25zIGFuZCBjb21wYXJlIGFnYWluLiAgRmluYWxseQpJIHdpbGwgcmVwZWF0IHRoZXNlIHByb2Nlc3NlcyB3aXRoIG15IHZlcnNpb24gb2YgdGhlIGltcHV0YXRpb24gcHJvdmlkZWQgYnkgREVQLgoKYGBge3IgZmlyc3RfY29tcGFyaXNvbnN9Cm9zd19tZWRpYW5zIDwtIG1lZGlhbl9ieV9mYWN0b3Iob3N3X2V4cHQpCmVuY19tZWRpYW5zIDwtIG1lZGlhbl9ieV9mYWN0b3IoZW5jX2V4cHQpCnVtcF9tZWRpYW5zIDwtIG1lZGlhbl9ieV9mYWN0b3IodW1wX2V4cHQpCgphbGwgPC0gbWVyZ2Uob3N3X21lZGlhbnMsIGVuY19tZWRpYW5zLCBieT0icm93Lm5hbWVzIikKcm93bmFtZXMoYWxsKSA8LSBhbGxbWyJSb3cubmFtZXMiXV0KYWxsW1siUm93Lm5hbWVzIl1dIDwtIE5VTEwKYWxsIDwtIG1lcmdlKGFsbCwgdW1wX21lZGlhbnMsIGJ5PSJyb3cubmFtZXMiKQpyb3duYW1lcyhhbGwpIDwtIGFsbFtbIlJvdy5uYW1lcyJdXQphbGxbWyJSb3cubmFtZXMiXV0gPC0gTlVMTAoKIyMgT3BlblNXQVRIICdub3JtYWwnIHZzLiBFbmN5Y2xvcGVESUEKdGVzdF9kZiA8LSBhbGxbLCBjKCJkZWx0YV9maWx0cmF0ZSIsICJkZWx0YV9maWx0cmF0ZS54IiwgImRlbHRhX2ZpbHRyYXRlLnkiKV0KY29yLnRlc3QodGVzdF9kZltbMV1dLCB0ZXN0X2RmW1syXV0sIG1ldGhvZD0ic3BlYXJtYW4iKQpjb3IudGVzdCh0ZXN0X2RmW1sxXV0sIHRlc3RfZGZbWzNdXSwgbWV0aG9kPSJzcGVhcm1hbiIpCgojIyBPcGVuU1dBVEggJ25vcm1hbCcgdnMuIERJQVVtcGlyZQp0ZXN0X2RmIDwtIGFsbFssIGMoImRlbHRhX2ZpbHRyYXRlIiwgImRlbHRhX2ZpbHRyYXRlLnkiKV0KY29yLnRlc3QodGVzdF9kZltbMV1dLCB0ZXN0X2RmW1syXV0pCgprZWVwZXJzIDwtIGxpc3QoCiAgInd0X2Nmd2hvbGUiID0gYygid3RfZmlsdHJhdGUiLCAid3Rfd2hvbGUiKSwKICAiZGVsdGFfY2Z3aG9sZSIgPSBjKCJkZWx0YV9maWx0cmF0ZSIsICJkZWx0YV93aG9sZSIpLAogICJ3aG9sZV9kZWx0YXd0IiA9IGMoImRlbHRhX3dob2xlIiwgInd0X3dob2xlIiksCiAgImNmX2RlbHRhd3QiID0gYygiZGVsdGFfZmlsdHJhdGUiLCAid3RfZmlsdHJhdGUiKSkKdW1wX25vcm0gPC0gbm9ybWFsaXplX2V4cHQodW1wX2V4cHQsIGZpbHRlcj1UUlVFKQp1bXBfZGUgPC0gYWxsX3BhaXJ3aXNlKHVtcF9ub3JtLCBmb3JjZT1UUlVFKQp3aG9sZV90YWJsZXMgPC0gY29tYmluZV9kZV90YWJsZXMoCiAgdW1wX2RlLAogIGtlZXBlcnM9a2VlcGVycywKICBleGNlbD1wYXN0ZTAoImV4Y2VsL2RpYXVtcGlyZV90YWJsZXMtdiIsIHZlciwgIi54bHN4IikpCmBgYAoKIyBBZGQgaW1wdXRhdGlvbgoKYGBge3IgaW1wdXRhdGlvbl9hZGRpdGlvbn0Kb3N3X2ltcHV0ZWQgPC0gaW1wdXRlX2V4cHQob3N3X2V4cHQpCmVuY19pbXB1dGVkIDwtIGltcHV0ZV9leHB0KGVuY19leHB0KQp1bXBfaW1wdXRlZCA8LSBpbXB1dGVfZXhwdCh1bXBfZXhwdCkKCm9zd19ub3JtIDwtIG5vcm1hbGl6ZV9leHB0KG9zd19leHB0LCB0cmFuc2Zvcm09ImxvZzIiLCBub3JtPSJxdWFudCIsIGNvbnZlcnQ9ImNwbSIsIGZpbHRlcj1UUlVFKQpocGdsdG9vbHM6OnBsb3RfcGNhKG9zd19ub3JtKSRwbG90Cm9zd19pbXBfbm9ybSA8LSBub3JtYWxpemVfZXhwdChvc3dfaW1wdXRlZCwgZmlsdGVyPVRSVUUpCgpvc3dfaW1wX25vcm0gPC0gbm9ybWFsaXplX2V4cHQob3N3X2ltcF9ub3JtLCBmaWx0ZXI9VFJVRSwgY29udmVydD0iY3BtIiwgbm9ybT0icXVhbnQiKQpocGdsdG9vbHM6OnBsb3RfcGNhKG9zd19pbXBfbm9ybSkkcGxvdAoKZW5jX25vcm0gPC0gbm9ybWFsaXplX2V4cHQoZW5jX2V4cHQsIHRyYW5zZm9ybT0ibG9nMiIsIG5vcm09InF1YW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydD0iY3BtIiwgYmF0Y2g9InN2YXNlcSIpCmhwZ2x0b29sczo6cGxvdF9wY2EoZW5jX25vcm0pJHBsb3QKZW5jX2ltcF9ub3JtIDwtIG5vcm1hbGl6ZV9leHB0KGVuY19pbXB1dGVkLCB0cmFuc2Zvcm09ImxvZzIiLCBub3JtPSJxdWFudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0PSJjcG0iLCBiYXRjaD0ic3Zhc2VxIikKaHBnbHRvb2xzOjpwbG90X3BjYShlbmNfaW1wX25vcm0pJHBsb3QKYGBgCgpgYGB7ciBzYXZlbWV9CmlmICghaXNUUlVFKGdldDAoInNraXBfbG9hZCIpKSkgewogIG1lc3NhZ2UocGFzdGUwKCJUaGlzIGlzIGhwZ2x0b29scyBjb21taXQ6ICIsIGdldF9naXRfY29tbWl0KCkpKQogIHRoaXNfc2F2ZSA8LSBwYXN0ZTAoZ3N1YihwYXR0ZXJuPSJcXC5SbWQiLCByZXBsYWNlPSIiLCB4PXJtZF9maWxlKSwgIi12IiwgdmVyLCAiLnJkYS54eiIpCiAgbWVzc2FnZShwYXN0ZTAoIlNhdmluZyB0byAiLCB0aGlzX3NhdmUpKQogIHRtcCA8LSBzbShzYXZlbWUoZmlsZW5hbWU9dGhpc19zYXZlKSkKICBwYW5kZXI6OnBhbmRlcihzZXNzaW9uSW5mbygpKQp9CmBgYAoKYGBge3IgbG9hZG1lLCBldmFsPUZBTFNFfQp0bXAgPC0gbG9hZG1lKGZpbGVuYW1lPXRoaXNfc2F2ZSkKYGBgCg==