1 Introduction

Though there is no fundamental reason to separate the likelihood ratio testing and GSVA from the differential expression analyses, they are both tasks which reach back to the primary expression data, unlike GSEA. Therefore I chose to separate these two tasks into a their own document.

2 LRT

EdgeR (McCarthy, Chen, and Smyth (2012)) and DESeq2 (Love, Huber, and Anders (2014)) both provide easily accessible LRT analyses. If I remember correctly, the function I wrote to simplify these analyses is aware of both, but this document primarily uses the results from DESeq2. I am reasonably certain they end up basically identical…

The likelihood ratio testing performed on the TMRC3 data is intended to look for shared patterns of expression across some known, constant factor. This may be time (are there patterns across the visits of each person), or cell type (do some genes act consistently across type). We could also ask this question of our two clinics, or indeed across the cure/fail samples.

2.1 Patterns across clinic

tc_clinical_filt <- normalize_expt(tc_clinical, filter = TRUE)
## Removing 5654 low-count genes (14298 remaining).
tc_lrt_clinic <- deseq_lrt(tc_clinical_filt, transform = "vst", interaction = FALSE,
                           interactor_column = "visitnumber",
                           interest_column = "clinic")
## converting counts to integer mode
## estimating size factors
## estimating dispersions
## gene-wise dispersion estimates
## mean-dispersion relationship
## final dispersion estimates
## fitting model and testing
## -- replacing outliers and refitting for 169 genes
## -- DESeq argument 'minReplicatesForReplace' = 7 
## -- original counts are preserved in counts(dds)
## estimating dispersions
## fitting model and testing
## A large number of genes was given-- please, make sure this is not an error. Normally, only DE genes will be useful for this function.
## Working with 6279 genes.
## Working with 6279 genes after filtering: minc > 3
## Joining with `by = join_by(merge)`
## Joining with `by = join_by(merge)`
## Warning in `labels<-.dendrogram`(dend, value = value, ...): The lengths of the
## new labels is shorter than the number of leaves in the dendrogram - labels are
## recycled.

tc_lrt_clinic[["cluster_data"]][["plot"]]

2.2 Patterns across visits, only Tumaco

2.2.1 All clinical cell types

t_clinical_filt <- normalize_expt(t_clinical, filter=TRUE)
## Removing 5796 low-count genes (14156 remaining).
lrt_visit <- deseq_lrt(t_clinical_filt, transform = "vst", interaction = FALSE,
                       interactor_column = "visitnumber",
                       interest_column = "finaloutcome")
## converting counts to integer mode
## estimating size factors
## estimating dispersions
## gene-wise dispersion estimates
## mean-dispersion relationship
## final dispersion estimates
## fitting model and testing
## -- replacing outliers and refitting for 120 genes
## -- DESeq argument 'minReplicatesForReplace' = 7 
## -- original counts are preserved in counts(dds)
## estimating dispersions
## fitting model and testing
## A large number of genes was given-- please, make sure this is not an error. Normally, only DE genes will be useful for this function.
## Working with 5445 genes.
## Working with 5444 genes after filtering: minc > 3
## Joining with `by = join_by(merge)`
## Joining with `by = join_by(merge)`
## Warning in `labels<-.dendrogram`(dend, value = value, ...): The lengths of the
## new labels is shorter than the number of leaves in the dendrogram - labels are
## recycled.

lrt_visit$cluster_data$plot

summary(lrt_visit[["favorite_genes"]])
##     genes              cluster     
##  Length:5444        Min.   : 1.00  
##  Class :character   1st Qu.: 2.00  
##  Mode  :character   Median : 3.00  
##                     Mean   : 3.65  
##                     3rd Qu.: 4.00  
##                     Max.   :11.00
written <- write_xlsx(data = as.data.frame(lrt_visit[["deseq_table"]]),
                      excel = glue("excel/lrt_clinical_visit-v{ver}.xlsx"))

2.2.2 Monocytes, only Tumaco

lrt_monocyte_visit <- deseq_lrt(t_visitcf_monocyte, transform = "vst",
                                interaction = FALSE,
                                interactor_column = "visitnumber",
                                interest_column = "finaloutcome")
## converting counts to integer mode
## estimating size factors
## estimating dispersions
## gene-wise dispersion estimates
## mean-dispersion relationship
## final dispersion estimates
## fitting model and testing
## -- replacing outliers and refitting for 68 genes
## -- DESeq argument 'minReplicatesForReplace' = 7 
## -- original counts are preserved in counts(dds)
## estimating dispersions
## fitting model and testing
## Working with 12 genes.
## Working with 12 genes after filtering: minc > 3
## Joining with `by = join_by(merge)`
## Joining with `by = join_by(merge)`
## Warning in `labels<-.dendrogram`(dend, value = value, ...): The lengths of the
## new labels is shorter than the number of leaves in the dendrogram - labels are
## recycled.

lrt_monocyte_visit[["cluster_data"]][["plot"]]

2.2.3 Neutrophils, only Tumaco

lrt_neutrophil_visit <- deseq_lrt(t_visitcf_neutrophil, transform = "vst",
                                  interaction = FALSE,
                                  interactor_column = "visitnumber",
                                  interest_column = "finaloutcome")
## converting counts to integer mode
## estimating size factors
## estimating dispersions
## gene-wise dispersion estimates
## mean-dispersion relationship
## final dispersion estimates
## fitting model and testing
## -- replacing outliers and refitting for 49 genes
## -- DESeq argument 'minReplicatesForReplace' = 7 
## -- original counts are preserved in counts(dds)
## estimating dispersions
## fitting model and testing
## Working with 952 genes.
## Working with 952 genes after filtering: minc > 3
## Joining with `by = join_by(merge)`
## Joining with `by = join_by(merge)`
## Warning in `labels<-.dendrogram`(dend, value = value, ...): The lengths of the
## new labels is shorter than the number of leaves in the dendrogram - labels are
## recycled.

lrt_neutrophil_visit[["cluster_data"]][["plot"]]

2.2.4 Eosinophils, only Tumaco

lrt_eosinophil_visit <- deseq_lrt(t_visitcf_eosinophil, transform = "vst",
                                  interaction = FALSE,
                                  interactor_column = "visitnumber",
                                  interest_column = "finaloutcome")
## converting counts to integer mode
## estimating size factors
## estimating dispersions
## gene-wise dispersion estimates
## mean-dispersion relationship
## final dispersion estimates
## fitting model and testing
## Warning in deseq_lrt(t_visitcf_eosinophil, transform = "vst", interaction =
## FALSE, : There are no significant differences given the 0.05 adjusted p-value.
## Returning the full LRT table just so that you have something to look at.

2.3 Shared patterns across cell types

lrt_celltype_clinical_test <- deseq_lrt(tc_clinical, transform = "vst",
                                        interactor_column = "typeofcells",
                                        interest_column = "finaloutcome")
## converting counts to integer mode
## estimating size factors
## estimating dispersions
## gene-wise dispersion estimates
## mean-dispersion relationship
## final dispersion estimates
## fitting model and testing
## -- replacing outliers and refitting for 15 genes
## -- DESeq argument 'minReplicatesForReplace' = 7 
## -- original counts are preserved in counts(dds)
## estimating dispersions
## fitting model and testing
## Working with 535 genes.
## Working with 534 genes after filtering: minc > 3
## Joining with `by = join_by(merge)`
## Joining with `by = join_by(merge)`
## Warning in `labels<-.dendrogram`(dend, value = value, ...): The lengths of the
## new labels is shorter than the number of leaves in the dendrogram - labels are
## recycled.

hs_annot <- fData(hs_expt)
deseq_lrt_df <- merge(hs_annot, as.data.frame(lrt_celltype_clinical_test[["deseq_table"]]), all.y=TRUE,
                      by="row.names")
rownames(deseq_lrt_df) <- deseq_lrt_df[["Row.names"]]
deseq_lrt_df[["Row.names"]] <- NULL
written <- write_xlsx(data=deseq_lrt_df,
                      excel=glue("excel/lrt_clinical_celltype-v{ver}.xlsx"))

3 GSVA

GSVA(Hänzelmann, Castelo, and Guinney (2013)) is a completely different family of analysis, and at least in my hands is used as a way to explore and look for publications which may be of interest. The general idea is that it performs a specific set of normalizations on the raw data, rank orders the results; then cross references them against extant analyses looking for over represented gene sets in specific papers or categories (e.g. reactome/GO/etc). This may either use a built-in set of mSigDB (Liberzon et al. (2011)) gene sets, or you may pull in manually downloaded (newer) data. On my workstation, I do the latter because I can leverage the downloaded gmt/xml/etc files in order to get the full annotations for the gene sets and accompanying papers. This container just uses the pre-downloaded mSigDB data (GSVAdata (n.d.)), which is a bit older.

Reminder: I disabled these for the moment in order to consider how to handle the (non)inclusion of the mSigDB gmt files.

3.1 Load some signatures

If one chooses, simple_gsva() can either load signatures from the GSVAdata package, which is a little old, or load an arbitrary set. load_gmt_signatures() provides a quick way to extract them from a gmt file.

broad_c7 <- load_gmt_signatures(signatures = "reference/msigdb/c7.all.v7.5.1.entrez.gmt",
                                signature_category = "c7")
broad_c2 <- load_gmt_signatures(signatures = "reference/msigdb/c2.all.v7.5.1.entrez.gmt",
                                signature_category = "c2")
broad_h <- load_gmt_signatures(signatures = "reference/msigdb/h.all.v7.5.1.entrez.gmt",
                               signature_category = "h")

Actually, I am going to try to semi-change my mind: GSVA comes with a dataset comprised of some older mSigDB data. Thus I will repeat each of the following blocks with an invocation which uses the older data and leave the previous invocations here so you can see what I actually ran to make pretty pictures. In the best case scenario, the results should be nearly identical with only a few categories missing between the new copy I downloaded and loaded above and the loaded-by-gsva version.

3.1.1 Clinical samples

3.1.1.1 Clinical C2

tc_celltype_gsva_c2 <- simple_gsva(
    tc_valid, signatures = broad_c2,
    msig_xml = "reference/msigdb/msigdb_v7.5.1.xml")
tc_celltype_gsva_c2_sig <- get_sig_gsva_categories(
    tc_celltype_gsva_c2,
    excel = "analyses/3_cali_and_tumaco/GSVA/tc_valid_gsva_c2.xlsx")
tc_celltype_gsva_c2_sig$subset_plot
tc_celltype_gsva_c2_sig$score_plot

There are two other important differences between these results and the results obtained when using the above invocations and the following:

  1. The above invocations were done before mSigDB changed the xml format so that it no longer successfully parses. I therefore changed my function to use the newer sqlite versions for versions of mSigDB > 7.2. Thus I should change the above to reflect this.
  2. The R data package version of the mSigDB (at least the last time I checked) does not have all the fun/interesting experiment annotation information included in the xml/sqlite. Thus, the following results will be sparser (unless I am mistaken about the GSVAdata) vis a vis the annotations.

heh, only 1 way to find out! Let us try!

Reminder to self, these are the current mSigDB human categories, I am not certain which (I assume all) are included in GSVAdata.

  • H: Hallmark genes, 50 gene sets for well defined states/processes.
  • C1: Genes by chromosomal position. E.g. using the karyogram to make groups.
  • C2: Curated gene sets: Various other datasets brought together: BioCarta pathways, KEGG_MEDICUS, PID pathways, reactome pathways, wikipathways, and legacy KEGG.
  • C3: Regulatory targets sets (e.g. expected to be affected by stuff like miRNA): MIR targets, miRDB targets, MIR_LEGACY, TFT genes, and the GTRD subset of TFT.
  • C4: Computational sets in cancer: 3CA from the cell atlas, GCN (cancer gene neighborhoods), CM: Cancer modules.
  • C5: Gene ontology – this is split between the canonical MF/BP/CC and the human phenotype pathology dataset.
  • C6: oncogenic signature gene sets: pulled from NCBI GEO and/or Broad experiments.
  • C7: immunologic signature gene sets: Perturbations of the immune system: ImmuneSigDB, VAX (this one is our favorite for obvious (I think) reasons)
  • C8: cell type signatures
tc_celltype_gsva_c2 <- simple_gsva(
  tc_valid, signature_category = "c2")
## Converting the rownames() of the expressionset to ENTREZID.
## 574 ENSEMBL ID's didn't have a matching ENTEREZ ID. Dropping them now.
## Before conversion, the expressionset has 19952 entries.
## After conversion, the expressionset has 19337 entries.
## Adding descriptions and IDs to the gene set annotations.
tc_celltype_gsva_c2_sig <- get_sig_gsva_categories(
    tc_celltype_gsva_c2,
    excel = "analyses/3_cali_and_tumaco/GSVA/tc_valid_gsva_c2.xlsx")
## libsize was not specified, this parameter has profound effects on limma's result.
## Using the libsize from expt$libsize.
## Limma step 1/6: choosing model.
## Assuming this data is similar to a micro array and not performign voom.
## Limma step 3/6: running lmFit with method: ls.
## Limma step 4/6: making and fitting contrasts with no intercept. (~ 0 + factors)
## Finished make_pairwise_contrasts.
## Limma step 5/6: Running eBayes with robust = FALSE and trend = FALSE.
## Limma step 6/6: Writing limma outputs.
## Limma step 6/6: 1/1: Creating table: failure_vs_cure.  Adjust = BH
## Limma step 6/6: 1/2: Creating table: cure.  Adjust = BH
## Limma step 6/6: 2/2: Creating table: failure.  Adjust = BH
## The factor cure has 122 rows.
## The factor failure has 62 rows.
## Testing each factor against the others.
## Scoring cure against everything else.
## Scoring failure against everything else.
tc_celltype_gsva_c2_sig$subset_plot

tc_celltype_gsva_c2_sig$score_plot

3.1.1.2 Valid C7

Ditto for C7

tc_celltype_gsva_c7 <- simple_gsva(
    tc_valid, signatures = broad_c7,
    msig_xml = "reference/msigdb/msigdb_v7.5.1.xml",
    signature_category="c7")
tc_celltype_gsva_c7_sig <- get_sig_gsva_categories(
    tc_celltype_gsva_c7,
    excel = "analyses/3_cali_and_tumaco/GSVA/tc_valid_gsva_c7.xlsx")
tc_celltype_gsva_c7 <- simple_gsva(
  tc_valid, signature_category = "c7")
## Converting the rownames() of the expressionset to ENTREZID.
## 574 ENSEMBL ID's didn't have a matching ENTEREZ ID. Dropping them now.
## Before conversion, the expressionset has 19952 entries.
## After conversion, the expressionset has 19337 entries.
## Adding descriptions and IDs to the gene set annotations.
tc_celltype_gsva_c7_sig <- get_sig_gsva_categories(
    tc_celltype_gsva_c7,
    excel = "analyses/3_cali_and_tumaco/GSVA/tc_valid_gsva_c7.xlsx")
## libsize was not specified, this parameter has profound effects on limma's result.
## Using the libsize from expt$libsize.
## Limma step 1/6: choosing model.
## Assuming this data is similar to a micro array and not performign voom.
## Limma step 3/6: running lmFit with method: ls.
## Limma step 4/6: making and fitting contrasts with no intercept. (~ 0 + factors)
## Finished make_pairwise_contrasts.
## Limma step 5/6: Running eBayes with robust = FALSE and trend = FALSE.
## Limma step 6/6: Writing limma outputs.
## Limma step 6/6: 1/1: Creating table: failure_vs_cure.  Adjust = BH
## Limma step 6/6: 1/2: Creating table: cure.  Adjust = BH
## Limma step 6/6: 2/2: Creating table: failure.  Adjust = BH
## The factor cure has 122 rows.
## The factor failure has 62 rows.
## Testing each factor against the others.
## Scoring cure against everything else.
## Scoring failure against everything else.
tc_celltype_gsva_c7_sig$subset_plot

tc_celltype_gsva_c7_sig$score_plot

I am not too fussed about the hallmark genes.

3.1.1.3 Valid H

tc_celltype_gsva_h <- simple_gsva(
    tc_valid,
    signatures = broad_h,
    msig_xml = "reference/msigdb/msigdb_v7.5.1.xml",
    signature_category = "h")
tc_celltype_gsva_h_sig <- get_sig_gsva_categories(
    tc_celltype_gsva_h,
    excel = "analyses/3_cali_and_tumaco/GSVA/tc_valid_gsva_h.xlsx")

3.1.2 Tumaco samples

3.1.2.1 Clinical C2

The C2 set includes a broad array of databases and studies. Thus when we look at the various gene sets which are deemed to be poor scoring, we see things like ‘the retinoid cycle in cones’ or ‘Nicotine metabolism’.

t_clinical_gsva_c2 <- simple_gsva(
    t_clinical,
    signatures = broad_c2,
    msig_xml = "reference/msigdb/msigdb_v7.5.1.xml",
    signature_category = "c2")
t_clinical_gsva_c2_sig <- get_sig_gsva_categories(
    t_clinical_gsva_c2,
    excel = "analyses/4_tumaco/GSVA/t_clinical_gsva_c2.xlsx")
t_clinical_gsva_c2_sig$subset_plot
t_clinical_gsva_c2_sig$score_plot
t_clinical_gsva_c2 <- simple_gsva(
    t_clinical, signature_category = "c2")
## Converting the rownames() of the expressionset to ENTREZID.
## 574 ENSEMBL ID's didn't have a matching ENTEREZ ID. Dropping them now.
## Before conversion, the expressionset has 19952 entries.
## After conversion, the expressionset has 19337 entries.
## Adding descriptions and IDs to the gene set annotations.
t_clinical_gsva_c2_sig <- get_sig_gsva_categories(
    t_clinical_gsva_c2,
    excel = "analyses/4_tumaco/GSVA/t_clinical_gsva_c2.xlsx")
## libsize was not specified, this parameter has profound effects on limma's result.
## Using the libsize from expt$libsize.
## Limma step 1/6: choosing model.
## Assuming this data is similar to a micro array and not performign voom.
## Limma step 3/6: running lmFit with method: ls.
## Limma step 4/6: making and fitting contrasts with no intercept. (~ 0 + factors)
## Finished make_pairwise_contrasts.
## Limma step 5/6: Running eBayes with robust = FALSE and trend = FALSE.
## Limma step 6/6: Writing limma outputs.
## Limma step 6/6: 1/1: Creating table: failure_vs_cure.  Adjust = BH
## Limma step 6/6: 1/2: Creating table: cure.  Adjust = BH
## Limma step 6/6: 2/2: Creating table: failure.  Adjust = BH
## The factor cure has 67 rows.
## The factor failure has 56 rows.
## Testing each factor against the others.
## Scoring cure against everything else.
## Scoring failure against everything else.
t_clinical_gsva_c2_sig$subset_plot

t_clinical_gsva_c2_sig$score_plot

The get_sig_gsva_categories() function uses a few metrics to attempt to find msigDB categories of interest from the GSVA results. One of the methods employed which I hope will prove useful is to test the scores observed for one condition against all values in order to look for categories which are the most likely to be interesting.

With that in mind, here are the brief descriptions for a few of the most highly scored C2 groups and their associated PMIDs. Note that this are taken from the set of failed samples vs. all; there are some differences among the cure samples, but they are generally very similar.

  • IL22 Soluble Receptor Signaling Pathway
  • LRR FLII-interacting protein 1 (LRRFIP1) activates type I IFN production
  • Stat3 Signaling Pathway
  • DEx/H-box helicases activate type I IFN and inflammatory cytokines production
  • Maturation of SARS-CoV-1 spike protein
  • 18285459: Proteins significantly induced by oxidative stress (hydrogen peroxide [PubChem=784] in 786-O cells (renal clear cell carcinoma, RCC) expressing VHL [GeneID=7428].
  • Negative feedback regulation of MAPK pathway
  • 16424014: Genes from the 12p region that were up-regulated in choriocarcinoma cells compared to normal testis.
  • Dicer Pathway
  • 17440165: Proteins with reduced expression in mulignant glioma cell line (A172) which bears loss of heterozygosity (LOH) in the 1p region.
  • Interleukin-6 signaling
  • Human Cytomegalovirus and Map Kinase
  • Signaling by cytosolic FGFR1 fusion mutants
  • 15710396: Genes down-regulated during transition from G2 (moderately differentiated tumor, infected with HCV) to G3 (poorly differentiated tumor, infected with HCV) in the development of hepatocellular carcinoma.
  • 15288478: Genes down-regulated in hepatocellular carcinoma (HCC) with early recurrence.
  • Endosomal/Vacuolar pathway
  • IkBA variant leads to EDA-ID
  • Canonical NF-kB pathway
  • 17234770: Genes involved in cell cycle regulation which were up-regulated in MCF-7 cells (breast cancer) by tretinoin (retinoic acid) [PubChem=444795].
  • 15710396: Genes down-regulated during transition from L0 (non-tumor, not infected with HCV) to L1 (non-tumor, infected with HCV) in the development of hepatocellular carcinoma.
  • Maturation of SARS-CoV-1 nucleoprotein
  • IFN gamma signaling pathway
  • Pilocytic astrocytoma
  • 17072321: Genes encoding the NF-kB core signaling proteins.
  • MAPK1 (ERK2) activation
  • TNFR2 Signaling Pathway
  • CLEC7A/inflammasome pathway
  • Regulation of PTEN mRNA translation
  • 16140955: Genes up-regulated synergistically in NB4 cells (acute promyelocytic leukemia, APL) by tretinoin and NSC682994 [PubChem=444795;388304].

3.1.2.2 Clinical C7

In contrast, the C7 set is relatively focused on the immune system, and is therefore likely to be of direct interest.

t_clinical_gsva_c7 <- simple_gsva(
    t_clinical,
    signatures = broad_c7,
    msig_xml = "reference/msigdb/msigdb_v7.5.1.xml",
    signature_category = "c7")
t_clinical_gsva_c7_sig <- get_sig_gsva_categories(
    t_clinical_gsva_c7,
    excel = "analyses/4_tumaco/GSVA/t_clinical_gsva_c7.xlsx")
t_clinical_gsva_c7 <- simple_gsva(
    t_clinical, signature_category = "c7")
## Converting the rownames() of the expressionset to ENTREZID.
## 574 ENSEMBL ID's didn't have a matching ENTEREZ ID. Dropping them now.
## Before conversion, the expressionset has 19952 entries.
## After conversion, the expressionset has 19337 entries.
## Adding descriptions and IDs to the gene set annotations.
t_clinical_gsva_c7_sig <- get_sig_gsva_categories(
    t_clinical_gsva_c7,
    excel = "analyses/4_tumaco/GSVA/t_clinical_gsva_c7.xlsx")
## libsize was not specified, this parameter has profound effects on limma's result.
## Using the libsize from expt$libsize.
## Limma step 1/6: choosing model.
## Assuming this data is similar to a micro array and not performign voom.
## Limma step 3/6: running lmFit with method: ls.
## Limma step 4/6: making and fitting contrasts with no intercept. (~ 0 + factors)
## Finished make_pairwise_contrasts.
## Limma step 5/6: Running eBayes with robust = FALSE and trend = FALSE.
## Limma step 6/6: Writing limma outputs.
## Limma step 6/6: 1/1: Creating table: failure_vs_cure.  Adjust = BH
## Limma step 6/6: 1/2: Creating table: cure.  Adjust = BH
## Limma step 6/6: 2/2: Creating table: failure.  Adjust = BH
## The factor cure has 67 rows.
## The factor failure has 56 rows.
## Testing each factor against the others.
## Scoring cure against everything else.
## Scoring failure against everything else.

With the above in mind, here are a few of the most highly scored papers/sets when scoring the failed samples:

  • 21357945: Genes positively correlated with titer response index in peripheral blood mononuclear cell in Caucasian male adults (18-40) (high responders) after exposure to Fluarix/Fluvirin , time point 1D and 3DY. Comment: Signature predictive of titer response index (TRI). Day 1 and day 3 values averaged.
  • 27764254: Genes negatively correlated with T cell responses (long term) in peripheral blood mononuclear cell in seniors (50-75) after exposure to Zostavax , time point 1D. Comment: (B) Network of genes informative of long-term responses.
  • 29535712: Genes down-regulated in blood 1d vs 0hr in adults (18-45) after exposure to CN54gp140 adjuvanted with GLA-AF , time point 1D , administered i.m.
  • 15789058: Genes down-regulated in comparison of naive B cells versus day 0 monocytes.
  • 15789058: Genes down-regulated in comparison of naive CD8 T cells versus day 0 monocytes.
  • 15789058: Genes down-regulated in comparison of dendritic cells (DC) versus monocytes.
  • 15789058: Genes up-regulated in comparison of monocytes cultured for 0 days versus those cultured for 7 days.
  • 21743478: Genes up-regulated in comparison of monocytes versus plasmacytoid dendritic cells (pDC).
  • 27764254: Genes positively correlated with expansion of VZV specific T cells (0d to peak) in peripheral blood mononuclear cell in seniors (50-75) after exposure to Zostavax , time point 1D
  • 15789058: Genes down-regulated in comparison of naive CD4 [GeneID=920] T cells versus day 0 monocytes.
  • 24808365: Genes up-regulated in dendritic cells infected by Leishmania major: 2h versus 24h.
  • 18275831: Genes down-regulated in comparison of systemic lupus erythematosus B cells versus systemic lupus erythromatosus myeloid cells.
  • 21743478: Genes up-regulated in comparison of monocytes from influenza vaccinee at day 7 post-vaccination versus plasmacytoid dendritic cells (mDC) at day 7 post-vaccination.
  • 15789058: Genes down-regulated in comparison of naive CD4 [GeneID=920] CD8 T cells versus monocytes cultured for 0 days.
  • 21743478: Genes down-regulated in peripheral blood mononuclear cell 7d vs 0d in adults (18-50) after exposure to FluMist , time point 7D. Comment: Molecular signature induced by LAIV vaccination. (a) Interferon (IFN)-related genes differentially expressed after LAIV vaccination
  • 27764254: Genes positively correlated with contraction of VZV specific T cells (peak to 28d) in peripheral blood mononuclear cell in seniors (50-75) after exposure to Zostavax , time point 1D
  • 25596819: Genes down-regulated in peripheral blood mononuclear cell 2d vs 0d in seniors (70+) (nonresponder) after exposure to Inactivated influenza vaccine , time point 2D
  • 21743478: Genes up-regulated in comparison of monocytes from influenza vaccinee at day 7 post-vaccination versus myeloid dendritic cells at day 7 post-vaccination.
  • 24808365: Genes up-regulated in dendritic cells: untreated versus 24h after infection of Leishmania major.
  • 21743478: Genes down-regulated in comparison of B cells versus monocytes.
  • 17105821: Genes down-regulated in comparison of peripheral blood mononuclear cells (PBMC) from healthy donors versus PBMC from patients with acute S. aureus infection.
  • 21743478: Genes down-regulated in comparison of B cells from influenza vaccinee at day 7 versus monocytes from influenza vaccinee at day 7.
  • 18275831: Genes down-regulated in comparison of systemic lupus erythematosus CD4 [GeneID=920] T cells versus systemic lupus erythematosus myeloid cells.
  • 15789058: Genes down-regulated in comparison of naive B cells versus unstimulated neutrophils.
  • 19047440: Genes up-regulated in peripheral blood mononuclear cell 28d vs 0d in unknown after exposure to YF-Vax/Stamaril , time point 28D
  • 21093321: Genes up-regulated in bone marrow-derived macrophages with STAT6 [GeneID=6778] knockout treated with rosiglitazone [PubChem=77999]: control versus IL4 [GeneID=3565].
  • 21743478: Genes up-regulated in peripheral blood mononuclear cell 3d vs 0d in adults (18-50) after exposure to FluMist , time point 3D. Comment: Molecular signature induced by LAIV vaccination. (a) Interferon (IFN)-related genes differentially expressed after LAIV vaccination
  • 18292579: Genes down-regulated in comparison of monocytes treated with anti-TREM1 [GeneID=54210] versus monocytes treated with control IgG.
  • 21743478: Genes down-regulated in comparison of plasmacytoid dendritic cells (DC) versus myeloid DCs.
  • 22986450: Genes up-regulated in comparison of control polymorphonuclear leukocytes (PMN) at 12 h versus PMN treated with F. tularensis vaccine at 24 h.
  • 28099485: Genes up-regulated in B cell 1d vs 0d in adults (18-49) after exposure to inactivated monovalent influenza A/Indonesia/05/2005 H5N1 split-virus vaccine , time point 1D , administered i.m.
  • 18292579: Genes down-regulated in comparison of monocytes treated with anti-TREM1 [GeneID=54210] versus untreated monocytes.
  • 17105821: Genes up-regulated in comparison of peripheral blood mononuclear cells (PBMC) from patients with acute influenza infection versus PBMC from patients with acute E. coli infection.
  • 21093321: Genes up-regulated in bone marrow-derived macrophages with STAT6 [GeneID=6778] knockout treated with IL4 [GeneID=3565]: control versus rosiglitazone [PubChem=77999].
  • 21743478: Genes up-regulated in comparison of monocytes versus myeloid dendritic cells (mDC).
  • 21743478: Genes up-regulated in peripheral blood mononuclear cell 7d vs 0d in adults (18-50) after exposure to FluMist , time point 7D. Comment: Molecular signature induced by LAIV vaccination. (a) Interferon (IFN)-related genes differentially expressed after LAIV vaccination
  • 17595242: Genes up-regulated in comparison of peripheral blood mononuclear cells (PBMC) from healthy donors versus PBMCs from patients with type 1 diabetes at 4 month after the diagnosis.
  • 16474395: Genes up-regulated in comparison of neutrophils versus central memory CD4 [GeneID=920] T cells.
  • 22986450: Genes up-regulated in comparison of control polymorphonuclear leukocytes (PMN) at 0 h versus PMN treated with F. tularensis vaccine at 24 h.
  • 21743478: Genes down-regulated in comparison of plasmacytoid dendritic cells (DC) from influenza vaccinee at day 7 post-vaccination versus myeloid DCs at day 7 post-vaccination.

3.1.2.3 Clinical H

The H set is both much larger and smaller, it is comprised of just 50 sets, but they have many more genes associated with them.

t_clinical_gsva_h <- simple_gsva(
    t_clinical,
    signatures = broad_h,
    msig_xml = "reference/msigdb/msigdb_v7.5.1.xml",
    signature_category="h")
t_clinical_gsva_h_sig <- get_sig_gsva_categories(
    t_clinical_gsva_h,
    excel = "analyses/4_tumaco/GSVA/t_clinical_gsva_h.xlsx")
t_clinical_gsva_h <- simple_gsva(
    t_clinical, signature_category = "h")
## Converting the rownames() of the expressionset to ENTREZID.
## 574 ENSEMBL ID's didn't have a matching ENTEREZ ID. Dropping them now.
## Before conversion, the expressionset has 19952 entries.
## After conversion, the expressionset has 19337 entries.
## Adding descriptions and IDs to the gene set annotations.
t_clinical_gsva_h_sig <- get_sig_gsva_categories(
    t_clinical_gsva_h,
    excel = "analyses/4_tumaco/GSVA/t_clinical_gsva_h.xlsx")
## libsize was not specified, this parameter has profound effects on limma's result.
## Using the libsize from expt$libsize.
## Limma step 1/6: choosing model.
## Assuming this data is similar to a micro array and not performign voom.
## Limma step 3/6: running lmFit with method: ls.
## Limma step 4/6: making and fitting contrasts with no intercept. (~ 0 + factors)
## Finished make_pairwise_contrasts.
## Limma step 5/6: Running eBayes with robust = FALSE and trend = FALSE.
## Limma step 6/6: Writing limma outputs.
## Limma step 6/6: 1/1: Creating table: failure_vs_cure.  Adjust = BH
## Limma step 6/6: 1/2: Creating table: cure.  Adjust = BH
## Limma step 6/6: 2/2: Creating table: failure.  Adjust = BH
## The factor cure has 67 rows.
## The factor failure has 56 rows.
## Testing each factor against the others.
## Scoring cure against everything else.
## Scoring failure against everything else.
  • Genes up-regulated in response to alpha interferon proteins.
  • Genes involved in protein secretion pathway.
  • Genes up-regulated in response to IFNG [GeneID=3458].
  • A subgroup of genes regulated by MYC - version 1 (v1).
  • Genes up-regulated by activation of the PI3K/AKT/mTOR pathway.
  • Genes up-regulated during unfolded protein response, a cellular stress response related to the endoplasmic reticulum.
  • Genes up-regulated in response to TGFB1 [GeneID=7040].
  • Genes up-regulated by reactive oxigen species (ROS).
  • Genes important for mitotic spindle assembly.
  • Genes regulated by NF-kB in response to TNF [GeneID=7124].
  • Genes up-regulated through activation of mTORC1 complex.
  • Genes encoding proteins involved in oxidative phosphorylation.
  • Genes defining response to androgens.
  • Genes mediating programmed cell death (apoptosis) by activation of caspases.
  • Genes up-regulated by IL6 [GeneID=3569] via STAT3 [GeneID=6774], e.g., during acute phase response.
  • Genes involved in p53 pathways and networks.

3.1.2.4 Tumaco Biopsies c2

t_biopsy_gsva_c2 <- simple_gsva(
    t_biopsies,
    signatures = broad_c2,
    msig_xml = "reference/msigdb/msigdb_v7.5.1.xml",
    signature_category="c2")
t_biopsy_gsva_c2_sig <- get_sig_gsva_categories(
    t_biopsy_gsva_c2,
    excel = "analyses/4_tumaco/GSVA/t_biopsy_gsva_c2.xlsx")
t_biopsy_gsva_c2 <- simple_gsva(
    t_biopsies, signature_category = "c2")
## Converting the rownames() of the expressionset to ENTREZID.
## 574 ENSEMBL ID's didn't have a matching ENTEREZ ID. Dropping them now.
## Before conversion, the expressionset has 19952 entries.
## After conversion, the expressionset has 19337 entries.
## Adding descriptions and IDs to the gene set annotations.
t_biopsy_gsva_c2_sig <- get_sig_gsva_categories(
    t_biopsy_gsva_c2,
    excel = "analyses/4_tumaco/GSVA/t_biopsy_gsva_c2.xlsx")
## libsize was not specified, this parameter has profound effects on limma's result.
## Using the libsize from expt$libsize.
## Limma step 1/6: choosing model.
## Assuming this data is similar to a micro array and not performign voom.
## Limma step 3/6: running lmFit with method: ls.
## Limma step 4/6: making and fitting contrasts with no intercept. (~ 0 + factors)
## Finished make_pairwise_contrasts.
## Limma step 5/6: Running eBayes with robust = FALSE and trend = FALSE.
## Limma step 6/6: Writing limma outputs.
## Limma step 6/6: 1/1: Creating table: tumacofailure_vs_tumacocure.  Adjust = BH
## Limma step 6/6: 1/2: Creating table: tumacocure.  Adjust = BH
## Limma step 6/6: 2/2: Creating table: tumacofailure.  Adjust = BH
## The factor tumaco_cure has 9 rows.
## The factor tumaco_failure has 5 rows.
## Testing each factor against the others.
## Scoring tumaco_cure against everything else.
## Scoring tumaco_failure against everything else.
  • 17440165: Proteins with reduced expression in mulignant glioma cell line (A172) which bears loss of heterozygosity (LOH) in the 1p region.
  • 15710396: Genes down-regulated during transition from L0 (non-tumor, not infected with HCV) to L1 (non-tumor, infected with HCV) in the development of hepatocellular carcinoma.
  • Macrophage markers
  • 18285459: Proteins significantly induced by oxidative stress (hydrogen peroxide [PubChem=784] in 786-O cells (renal clear cell carcinoma, RCC) expressing VHL [GeneID=7428].
  • IL22 Soluble Receptor Signaling Pathway
  • Maturation of SARS-CoV-1 spike protein
  • 16424014: Genes from the 12p region that were up-regulated in choriocarcinoma cells compared to normal testis.
  • Uptake and function of diphtheria toxin
  • Lck and Fyn tyrosine kinases in initiation of TCR Activation
  • Type I hemidesmosome assembly
  • 12618007: Genes down-regulated after heat shock in peripheral lympocytes from old donors, compared to those from the young ones.
  • Stat3 Signaling Pathway
  • Nef and signal transduction
  • T Helper Cell Surface Molecules
  • LRR FLII-interacting protein 1 (LRRFIP1) activates type I IFN production
  • Endosomal/Vacuolar pathway
  • T Cytotoxic Cell Surface Molecules
  • Folding of actin by CCT/TriC
  • CTL mediated immune response against target cells
  • PD-1 signaling
  • DEx/H-box helicases activate type I IFN and inflammatory cytokines production
  • 16140955: Genes up-regulated synergistically in NB4 cells (acute promyelocytic leukemia, APL) by tretinoin and NSC682994 [PubChem=444795;388304].
  • 15710396: Genes down-regulated during transition from G2 (moderately differentiated tumor, infected with HCV) to G3 (poorly differentiated tumor, infected with HCV) in the development of hepatocellular carcinoma.
  • Interleukin-6 signaling
  • 18757430: Immune response genes up-regulated in zenograft tumors formed by SNU-601 cells (gastric cancer) made to express LRRC3B [GeneID=116135].
  • TCA cycle nutrient use and invasiveness of ovarian cancer
  • 18245477: Genes in the green cluster of protein kinases distinguishing between luminal A and basal breast cancer subtypes.
  • 20308323: Proteins identified by mass spectrometry in complexes containing ALKBH8 [GeneID=91801].
  • Cycling of Ran in nucleocytoplasmic transport
  • Activation of the mRNA upon binding of the cap-binding complex and eIFs, and subsequent binding to 43S
  • 18451147: Genes down-regulated in HSA/c and KYSE140 cells (esophageal squamous cell carcinoma, ESCC) after knockdown of PTTG1 [GeneID=9232] by RNAi.
  • 17187432: Down-regulated genes in hepatocellular carcinoma (HCC) subclass G5, defined by unsupervised clustering.
  • 15608688: Cluster 4: genes with similar expression profiles across follicular thyroid carcinoma (FTC) samples.
  • Basic Mechanisms of SUMOylation
  • IFN gamma signaling pathway
  • 15531917: Selected down-regulated genes distinguishing between Wilms tumors of different histological types: anaplastic vs favorable histology.
  • 15608688: Cluster 3: genes with similar expression profiles across follicular thyrorid carcinoma (FTC) samples; genes in this cluster correlated well with the presence of PAX8-PPARG [GeneID=7849;5468] fusion protein.
  • Internal Ribosome entry pathway
  • 11773596: Housekeeping genes identified as expressed across 19 normal tissues.
  • 16909099: Genes down-regulated in adult T-cell leukemia (ATL), chronic vs acute clinical condition.
  • 17486082: The ‘TEB profile genes’: down-regulated during pubertal mammary gland development specifically in the TEB (terminal end bud) structures.
  • CLEC7A/inflammasome pathway
  • Nef Mediated CD4 Down-regulation
  • 15608688: Genes down-regulated in follicular thyroid carcinoma (FTC) samples that bear PAX8-PPARG [GeneID=7849;5468] fusion protein.
  • SUMO is conjugated to E1 (UBA2:SAE1)
  • 18724378: Genes up-regulated in MCF7-ADR cell line (breast cancer) resistant to docetaxel [PubChem=148124].
  • MAPK1 (ERK2) activation
  • 16760442: Down-regulated genes constituting the molecular signature of Burkitt ’s lymphoma.
  • Antigen Processing and Presentation
  • 15295046: Genes distinguishing asparaginase resistant and sensitive B-lineage ALL; here - genes up-regulated in the drug resistant samples.

3.1.2.5 Tumaco Biopsies c7

t_biopsy_gsva_c7 <- simple_gsva(
    t_biopsies,
    signatures = broad_c7,
    msig_xml = "reference/msigdb/msigdb_v7.5.1.xml",
    signature_category = "c7")
t_biopsy_gsva_c7_sig <- get_sig_gsva_categories(
    t_biopsy_gsva_c7,
    excel = "analyses/4_tumaco/GSVA/t_biopsy_gsva_c7.xlsx")
t_biopsy_gsva_c7 <- simple_gsva(
    t_biopsies, signature_category = "c7")
## Converting the rownames() of the expressionset to ENTREZID.
## 574 ENSEMBL ID's didn't have a matching ENTEREZ ID. Dropping them now.
## Before conversion, the expressionset has 19952 entries.
## After conversion, the expressionset has 19337 entries.
## Adding descriptions and IDs to the gene set annotations.
t_biopsy_gsva_c7_sig <- get_sig_gsva_categories(
    t_biopsy_gsva_c7,
    excel = "analyses/4_tumaco/GSVA/t_biopsy_gsva_c7.xlsx")
## libsize was not specified, this parameter has profound effects on limma's result.
## Using the libsize from expt$libsize.
## Limma step 1/6: choosing model.
## Assuming this data is similar to a micro array and not performign voom.
## Limma step 3/6: running lmFit with method: ls.
## Limma step 4/6: making and fitting contrasts with no intercept. (~ 0 + factors)
## Finished make_pairwise_contrasts.
## Limma step 5/6: Running eBayes with robust = FALSE and trend = FALSE.
## Limma step 6/6: Writing limma outputs.
## Limma step 6/6: 1/1: Creating table: tumacofailure_vs_tumacocure.  Adjust = BH
## Limma step 6/6: 1/2: Creating table: tumacocure.  Adjust = BH
## Limma step 6/6: 2/2: Creating table: tumacofailure.  Adjust = BH
## The factor tumaco_cure has 9 rows.
## The factor tumaco_failure has 5 rows.
## Testing each factor against the others.
## Scoring tumaco_cure against everything else.
## Scoring tumaco_failure against everything else.
  • 28099485: Genes up-regulated in B cell 1d vs 0d in adults (18-49) after exposure to inactivated monovalent influenza A/Indonesia/05/2005 H5N1 split-virus vaccine , time point 1D , administered i.m.
  • 24912498: Genes up-regulated in peripheral blood mononuclear cell 28d vs 7d in infants (4-6m) (BCG-primed) after exposure to Modified Vaccinia Ankara (MVA) virus vaccine vector , time point 28D
  • 24912498: Genes up-regulated in peripheral blood mononuclear cell vaccinated vs candin placebo in infants (4-6m) (BCG-primed) after exposure to Modified Vaccinia Ankara (MVA) virus vaccine vector , time point 28D
  • 27764254Genes negatively correlated with T cell responses (long term) in peripheral blood mononuclear cell in seniors (50-75) after exposure to Zostavax , time point 1D. Comment: (B) Network of genes informative of long-term responses.
  • 15879137Genes up-regulated in polymorphonuclear leukocytes (24h): control versus infection by A. phagocytophilum.
  • 29868000: Genes positively correlated with high anti-HBs concentration at week 30 in blood in young/old adults (20-40)/(60-84) (primary vaccination) after exposure to Twinrix , time point 1D. Comment: Correlation between pre-immunization expression levels of single genes (log2-transformed) and anti-HBs concentrations (log10-transformed) at week 30 post-primary vaccination
  • 21357945: Genes positively correlated with titer response index in peripheral blood mononuclear cell in Caucasian male adults (18-40) (high responders) after exposure to Fluarix/Fluvirin , time point 1D and 3DY. Comment: Signature predictive of titer response index (TRI). Day 1 and day 3 values averaged.
  • 15879137: Genes down-regulated in polymorphonuclear leukocytes (9h): control versus infection by A. phagocytophilum.
  • 28193898: Genes up-regulated in peripheral blood mononuclear cell immunized with ARR vs immunized by RRR in unknown (primary immunization with recombinant adenovirus 35 (Ad35)) after exposure to P. falciparum RTS,S/AS01 , time point 1D
  • 15789058: Genes down-regulated in comparison of neutrophils versusl monocytes.
  • 17651872: Genes down-regulated in peripheral blood mononuclear cell post-vaccination vs pre-vaccination in adults (18-40) after exposure to YF-Vax or APSV Wetvax (identical responses) , time point anyD. Comment: Significantly Modulated Genes Common to Vaccinia and Yellow Fever Vaccination
  • 26726811: Genes down-regulated in T cell 7d vs 1d in adults (18-64) after exposure to Pandemrix (A/California/7/09 (H1N1)) , time point 7D. Comment: - roughly 60/40 female:male ratio, over 70% were Causasian
  • 15789058: Genes down-regulated in comparison of naive B cells versus day 0 monocytes.
  • 29535712: Genes down-regulated in blood 3d and 7d vs 0hr in adults (18-45) (high IgM responders) after exposure to CN54gp140 adjuvanted with GLA-AF , time point 3D, 7D combined (identical signatures) , administered i.m.
  • 17651872: Genes down-regulated in peripheral blood mononuclear cell in adults (18-40) after exposure to YF-Vax , time point anyD
  • 24495909: Genes positively correlated with H3N2 VN titer in blood in children (0.5-14y) after exposure to FluMist , time point 7D. Comment: ~80% of cohort were white, ~50/50 Female:male
  • 17349694: Genes up-regulated in peripheral blood mononuclear cell (18 to 336)h vs 0h in adults (22-54) after exposure to F. tularensis vaccine LVS , time point 18 to 336H. Comment: Pattern 3, sustained-up. These approx 9 of 42 genes in pattern linked to immune function.
  • 28099485: Genes up-regulated in T cell 1d vs 0d in adults (18-49) after exposure to inactivated monovalent influenza A/Indonesia/05/2005 H5N1 split-virus vaccine , time point 1D , administered i.m.
  • 21743478: Genes up-regulated in peripheral blood mononuclear cell 7d vs 0d in adults (18-50) after exposure to FluMist , time point 7D. Comment: Molecular signature induced by LAIV vaccination. (a) Interferon (IFN)-related genes differentially expressed after LAIV vaccination
  • 21743478: Genes up-regulated in peripheral blood mononuclear cell 3d vs 0d in adults (18-50) after exposure to FluMist , time point 3D. Comment: Molecular signature induced by LAIV vaccination. (a) Interferon (IFN)-related genes differentially expressed after LAIV vaccination
  • 26726811: Genes up-regulated in T cell 1d vs 0d in adults (18-64) after exposure to Pandemrix (A/California/7/09 (H1N1)) , time point 1D. Comment: - roughly 60/40 female:male ratio, over 70% were Causasian
  • 27870591: Genes up-regulated in blood vaccinated vs control in adults (23-48) after exposure to Live attenuated vaccine TC-83 , time point 7D
  • 26755593: Genes up-regulated in peripheral blood mononuclear cell 1d postboost vs 0d pre-imm in children (14-27m) (MF59-adjuvanted) after exposure to Fluad , time point 1D. Comment: ATIV
  • 23420886: Genes down-regulated in thymic T reg: CD24 high [GeneID=100133941] versus CD24 int [GeneID=100133941].
  • 20643338: Genes up-regulated in ex vivo follicular dendritic cells from peripheral lymph nodes: naïve versus immunized mice.
  • 23420886: Genes down-regulated in T reg: peripheral lymph nodes versus thymic CD24 int [GeneID=100133941].
  • 23844129: Genes up-regulated in peripheral blood mononuclear cell low responders vs high responders in adults (18-55) after exposure to Modified Vaccinia Ankara (MVA) virus vaccine vector , time point 2D. Comment: Enriched for GO terms associated with regulation of T-cell activation and co-stimulation signal (DAVID, fdr<0.05), from 176 DE genes
  • 23878721: Genes positively correlated with antibody response in blood in adults (18-40) after exposure to Sanofi Pasteur, SA, Inactivated influenza vaccine , time point 1D
  • 26755593: Genes up-regulated in peripheral blood mononuclear cell 1d postboost vs 0d pre-imm in children (14-27m) (MF59-adjuvanted) after exposure to Fluad , time point 1D. Comment: (C) Genes in BTM M40; (D) Genes in BTM M53
  • 17105821: Genes up-regulated in comparison of peripheral blood mononuclear cells (PBMC) from patients with acute influenza infection versus PBMC from patients with acute E. coli infection.
  • 21743478: Genes down-regulated in peripheral blood mononuclear cell 7d vs 0d in adults (18-50) after exposure to FluMist , time point 7D. Comment: Molecular signature induced by LAIV vaccination. (a) Interferon (IFN)-related genes differentially expressed after LAIV vaccination
  • 15789058: Genes down-regulated in comparison of naive CD8 T cells versus day 0 monocytes.
  • 17595242: Genes up-regulated in comparison of peripheral blood mononuclear cells (PBMC) from healthy donors versus PBMCs from patients with type 1 diabetes at 4 month after the diagnosis.
  • 24336226: Genes negatively correlated with antibody response in peripheral blood mononuclear cell in adults (18-45) (anti-DT antibody-correlation profile) after exposure to Menactra , time point 3D
  • 24808365: Genes up-regulated in dendritic cells infected by Leishmania major: 2h versus 24h.
  • 21743478: Genes down-regulated in comparison of B cells versus myeloid dendritic cells (mDC).
  • 21743478: Genes down-regulated in comparison of plasmacytoid dendritic cells (DC) versus myeloid DCs.
  • 26755593: Genes positively correlated with HAI response in peripheral blood mononuclear cell in children (14-27m) (MF59-adjuvanted and non-adjuvanted) after exposure to Fluad/Imuvac , time point 1D. Comment: Genes in BTM M75
  • 22617845: Genes down-regulated in peripheral blood mononuclear cell 24h vs 0h in adults (18-45) (non-responders (previously immunized)) after exposure to Live attenuated vaccine TC-83 , time point 24H. Comment: initial exposure 2-10 months before PBMCs drawn. significant genes chosen for membership in canonical pathways
  • 27870591: Genes up-regulated in blood vaccinated vs control in adults (23-48) after exposure to Live attenuated vaccine TC-83 , time point 2D
  • 29535712: Genes down-regulated in blood 1d vs 0hr in adults (18-45) after exposure to CN54gp140 adjuvanted with GLA-AF , time point 1D , administered i.m.
  • 22722857: Genes down-regulated in CD4 [GeneID=920] over-expressing: FOXP3 [GeneID=50943] and PPARg1 form of PPARG [GeneID=5468] versus FOXP3 [GeneID=50943].
  • 19029902: Genes up-regulated in peripheral blood mononuclear cell 3d vs 0d in adults (18-45) after exposure to YF-17D vaccine , time point 3D
  • 19029902: Genes up-regulated in peripheral blood mononuclear cell 7d vs 0d in adults (18-45) after exposure to YF-17D vaccine , time point 7D
  • 22722857: Genes down-regulated in CD4 [GeneID=920] T cells treated with pioglitazone [PubChem=4829] and over-expressing: FOXP3 [GeneID=50943] and PPARg1 isoform of PPARG [GeneID=5468] versus FOXP3 [GeneID=50943] and PPARg2 form of PPARG [GeneID=5468].
  • 21743478: Genes down-regulated in comparison of plasmacytoid dendritic cells (DC) from influenza vaccinee at day 7 post-vaccination versus myeloid DCs at day 7 post-vaccination.
  • 24912498: Genes up-regulated in blood vaccinated vs candin placebo in infants (4-6m) (BCG-primed) after exposure to Modified Vaccinia Ankara (MVA) virus vaccine vector , time point 1D
  • 21636294: Genes down-regulated in BCL6 [GeneID=604] high follicular helper T cells (Tfh) versus all Tfh.
  • 15789058: Genes down-regulated in comparison of naive CD4 [GeneID=920] T cells versus day 0 monocytes.
  • 17204652: Genes down-regulated in cells from Flt3L Melanom injected mice: splenic DEC205+ dendritic cells versus CD8 T cells.

3.1.2.6 Tumaco biopsies H

t_biopsy_gsva_h <- simple_gsva(
    t_biopsies,
    signatures = broad_h,
    msig_xml = "reference/msigdb/msigdb_v7.5.1.xml",
    signature_category = "h")
t_biopsy_gsva_h_sig <- get_sig_gsva_categories(
    t_biopsy_gsva_h,
    excel = "analyses/4_tumaco/GSVA/t_biopsy_gsva_h.xlsx")
t_biopsy_gsva_h <- simple_gsva(
    t_biopsies, signature_category = "h")
## Converting the rownames() of the expressionset to ENTREZID.
## 574 ENSEMBL ID's didn't have a matching ENTEREZ ID. Dropping them now.
## Before conversion, the expressionset has 19952 entries.
## After conversion, the expressionset has 19337 entries.
## Adding descriptions and IDs to the gene set annotations.
t_biopsy_gsva_h_sig <- get_sig_gsva_categories(
    t_biopsy_gsva_h,
    excel = "analyses/4_tumaco/GSVA/t_biopsy_gsva_h.xlsx")
## libsize was not specified, this parameter has profound effects on limma's result.
## Using the libsize from expt$libsize.
## Limma step 1/6: choosing model.
## Assuming this data is similar to a micro array and not performign voom.
## Limma step 3/6: running lmFit with method: ls.
## Limma step 4/6: making and fitting contrasts with no intercept. (~ 0 + factors)
## Finished make_pairwise_contrasts.
## Limma step 5/6: Running eBayes with robust = FALSE and trend = FALSE.
## Limma step 6/6: Writing limma outputs.
## Limma step 6/6: 1/1: Creating table: tumacofailure_vs_tumacocure.  Adjust = BH
## Limma step 6/6: 1/2: Creating table: tumacocure.  Adjust = BH
## Limma step 6/6: 2/2: Creating table: tumacofailure.  Adjust = BH
## The factor tumaco_cure has 9 rows.
## The factor tumaco_failure has 5 rows.
## Testing each factor against the others.
## Scoring tumaco_cure against everything else.
## Scoring tumaco_failure against everything else.

3.1.2.7 Tumaco Eosinophils C7

t_eosinophil_gsva_c7 <- simple_gsva(
    t_eosinophils,
    signatures = broad_c7,
    msig_xml = "reference/msigdb/msigdb_v7.5.1.xml",
    signature_category = "c7")
t_eosinophil_gsva_c7_sig <- get_sig_gsva_categories(
    t_eosinophil_gsva_c7,
    excel = "analyses/4_tumaco/GSVA/t_eosinophil_gsva_c7.xlsx")
t_eosinophil_gsva_c7 <- simple_gsva(
    t_eosinophils, signature_category = "c7")
## Converting the rownames() of the expressionset to ENTREZID.
## 574 ENSEMBL ID's didn't have a matching ENTEREZ ID. Dropping them now.
## Before conversion, the expressionset has 19952 entries.
## After conversion, the expressionset has 19337 entries.
## Adding descriptions and IDs to the gene set annotations.
t_eosinophil_gsva_c7_sig <- get_sig_gsva_categories(
    t_eosinophil_gsva_c7,
    excel = "analyses/4_tumaco/GSVA/t_eosinophil_gsva_c7.xlsx")
## libsize was not specified, this parameter has profound effects on limma's result.
## Using the libsize from expt$libsize.
## Limma step 1/6: choosing model.
## Assuming this data is similar to a micro array and not performign voom.
## Limma step 3/6: running lmFit with method: ls.
## Limma step 4/6: making and fitting contrasts with no intercept. (~ 0 + factors)
## Finished make_pairwise_contrasts.
## Limma step 5/6: Running eBayes with robust = FALSE and trend = FALSE.
## Limma step 6/6: Writing limma outputs.
## Limma step 6/6: 1/1: Creating table: tumacofailure_vs_tumacocure.  Adjust = BH
## Limma step 6/6: 1/2: Creating table: tumacocure.  Adjust = BH
## Limma step 6/6: 2/2: Creating table: tumacofailure.  Adjust = BH
## The factor tumaco_cure has 17 rows.
## The factor tumaco_failure has 9 rows.
## Testing each factor against the others.
## Scoring tumaco_cure against everything else.
## Scoring tumaco_failure against everything else.

3.1.2.8 Tumaco Eosinophils C2

t_eosinophil_gsva_c2 <- simple_gsva(
    t_eosinophils,
    signatures = broad_c2,
    msig_xml = "reference/msigdb/msigdb_v7.5.1.xml",
    signature_category = "c2")
t_eosinophil_gsva_c2_sig <- get_sig_gsva_categories(
    t_eosinophil_gsva_c2,
    excel = "analyses/4_tumaco/GSVA/t_eosinophil_gsva_c2.xlsx")
t_eosinophil_gsva_c2 <- simple_gsva(
    t_eosinophils, signature_category = "c2")
## Converting the rownames() of the expressionset to ENTREZID.
## 574 ENSEMBL ID's didn't have a matching ENTEREZ ID. Dropping them now.
## Before conversion, the expressionset has 19952 entries.
## After conversion, the expressionset has 19337 entries.
## Adding descriptions and IDs to the gene set annotations.
t_eosinophil_gsva_c2_sig <- get_sig_gsva_categories(
    t_eosinophil_gsva_c2,
    excel = "analyses/4_tumaco/GSVA/t_eosinophil_gsva_c2.xlsx")
## libsize was not specified, this parameter has profound effects on limma's result.
## Using the libsize from expt$libsize.
## Limma step 1/6: choosing model.
## Assuming this data is similar to a micro array and not performign voom.
## Limma step 3/6: running lmFit with method: ls.
## Limma step 4/6: making and fitting contrasts with no intercept. (~ 0 + factors)
## Finished make_pairwise_contrasts.
## Limma step 5/6: Running eBayes with robust = FALSE and trend = FALSE.
## Limma step 6/6: Writing limma outputs.
## Limma step 6/6: 1/1: Creating table: tumacofailure_vs_tumacocure.  Adjust = BH
## Limma step 6/6: 1/2: Creating table: tumacocure.  Adjust = BH
## Limma step 6/6: 2/2: Creating table: tumacofailure.  Adjust = BH
## The factor tumaco_cure has 17 rows.
## The factor tumaco_failure has 9 rows.
## Testing each factor against the others.
## Scoring tumaco_cure against everything else.
## Scoring tumaco_failure against everything else.

3.1.2.9 Tumaco Eosinophils H

t_eosinophil_gsva_h <- simple_gsva(
    t_eosinophils,
    signatures = broad_h,
    msig_xml = "reference/msigdb/msigdb_v7.5.1.xml",
    signature_category = "h")
t_eosinophil_gsva_h_sig <- get_sig_gsva_categories(
    t_eosinophil_gsva_h,
    excel = "analyses/4_tumaco/GSVA/t_eosinophil_gsva_h.xlsx")
t_eosinophil_gsva_h <- simple_gsva(
    t_eosinophils, signature_category = "h")
## Converting the rownames() of the expressionset to ENTREZID.
## 574 ENSEMBL ID's didn't have a matching ENTEREZ ID. Dropping them now.
## Before conversion, the expressionset has 19952 entries.
## After conversion, the expressionset has 19337 entries.
## Adding descriptions and IDs to the gene set annotations.
t_eosinophil_gsva_h_sig <- get_sig_gsva_categories(
    t_eosinophil_gsva_h,
    excel = "analyses/4_tumaco/GSVA/t_eosinophil_gsva_h.xlsx")
## libsize was not specified, this parameter has profound effects on limma's result.
## Using the libsize from expt$libsize.
## Limma step 1/6: choosing model.
## Assuming this data is similar to a micro array and not performign voom.
## Limma step 3/6: running lmFit with method: ls.
## Limma step 4/6: making and fitting contrasts with no intercept. (~ 0 + factors)
## Finished make_pairwise_contrasts.
## Limma step 5/6: Running eBayes with robust = FALSE and trend = FALSE.
## Limma step 6/6: Writing limma outputs.
## Limma step 6/6: 1/1: Creating table: tumacofailure_vs_tumacocure.  Adjust = BH
## Limma step 6/6: 1/2: Creating table: tumacocure.  Adjust = BH
## Limma step 6/6: 2/2: Creating table: tumacofailure.  Adjust = BH
## The factor tumaco_cure has 17 rows.
## The factor tumaco_failure has 9 rows.
## Testing each factor against the others.
## Scoring tumaco_cure against everything else.
## Scoring tumaco_failure against everything else.

3.1.2.10 Tumaco Monocytes C7

t_monocyte_gsva_c7 <- simple_gsva(
    t_monocytes,
    signatures = broad_c7,
    msig_xml = "reference/msigdb/msigdb_v7.5.1.xml",
    signature_category = "c7")
t_monocyte_gsva_c7_sig <- get_sig_gsva_categories(
    t_monocyte_gsva_c7,
    excel = "analyses/4_tumaco/GSVA/t_monocyte_gsva_c7.xlsx")
t_monocyte_gsva_c7 <- simple_gsva(
    t_monocytes, signature_category = "c7")
## Converting the rownames() of the expressionset to ENTREZID.
## 574 ENSEMBL ID's didn't have a matching ENTEREZ ID. Dropping them now.
## Before conversion, the expressionset has 19952 entries.
## After conversion, the expressionset has 19337 entries.
## Adding descriptions and IDs to the gene set annotations.
t_monocyte_gsva_c7_sig <- get_sig_gsva_categories(
    t_monocyte_gsva_c7,
    excel = "analyses/4_tumaco/GSVA/t_monocyte_gsva_c7.xlsx")
## libsize was not specified, this parameter has profound effects on limma's result.
## Using the libsize from expt$libsize.
## Limma step 1/6: choosing model.
## Assuming this data is similar to a micro array and not performign voom.
## Limma step 3/6: running lmFit with method: ls.
## Limma step 4/6: making and fitting contrasts with no intercept. (~ 0 + factors)
## Finished make_pairwise_contrasts.
## Limma step 5/6: Running eBayes with robust = FALSE and trend = FALSE.
## Limma step 6/6: Writing limma outputs.
## Limma step 6/6: 1/1: Creating table: tumacofailure_vs_tumacocure.  Adjust = BH
## Limma step 6/6: 1/2: Creating table: tumacocure.  Adjust = BH
## Limma step 6/6: 2/2: Creating table: tumacofailure.  Adjust = BH
## The factor tumaco_cure has 21 rows.
## The factor tumaco_failure has 21 rows.
## Testing each factor against the others.
## Scoring tumaco_cure against everything else.
## Scoring tumaco_failure against everything else.

3.1.2.11 Tumaco Monocytes C2

t_monocyte_gsva_c2 <- simple_gsva(
    t_monocytes,
    signatures = broad_c2,
    msig_xml = "reference/msigdb/msigdb_v7.5.1.xml",
    signature_category = "c2")
t_monocyte_gsva_c2_sig <- get_sig_gsva_categories(
    t_monocyte_gsva_c2,
    excel = "analyses/4_tumaco/GSVA/t_monocyte_gsva_c2.xlsx")
t_monocyte_gsva_c2 <- simple_gsva(
    t_monocytes, signature_category = "c2")
## Converting the rownames() of the expressionset to ENTREZID.
## 574 ENSEMBL ID's didn't have a matching ENTEREZ ID. Dropping them now.
## Before conversion, the expressionset has 19952 entries.
## After conversion, the expressionset has 19337 entries.
## Adding descriptions and IDs to the gene set annotations.
t_monocyte_gsva_c2_sig <- get_sig_gsva_categories(
    t_monocyte_gsva_c2,
    excel = "analyses/4_tumaco/GSVA/t_monocyte_gsva_c2.xlsx")
## libsize was not specified, this parameter has profound effects on limma's result.
## Using the libsize from expt$libsize.
## Limma step 1/6: choosing model.
## Assuming this data is similar to a micro array and not performign voom.
## Limma step 3/6: running lmFit with method: ls.
## Limma step 4/6: making and fitting contrasts with no intercept. (~ 0 + factors)
## Finished make_pairwise_contrasts.
## Limma step 5/6: Running eBayes with robust = FALSE and trend = FALSE.
## Limma step 6/6: Writing limma outputs.
## Limma step 6/6: 1/1: Creating table: tumacofailure_vs_tumacocure.  Adjust = BH
## Limma step 6/6: 1/2: Creating table: tumacocure.  Adjust = BH
## Limma step 6/6: 2/2: Creating table: tumacofailure.  Adjust = BH
## The factor tumaco_cure has 21 rows.
## The factor tumaco_failure has 21 rows.
## Testing each factor against the others.
## Scoring tumaco_cure against everything else.
## Scoring tumaco_failure against everything else.

3.1.2.12 Tumaco Monocytes H

t_monocyte_gsva_h <- simple_gsva(
    t_monocytes,
    signatures = broad_h,
    msig_xml = "reference/msigdb/msigdb_v7.5.1.xml",
    signature_category = "h")
t_monocyte_gsva_h_sig <- get_sig_gsva_categories(
    t_monocyte_gsva_h,
    excel = "analyses/4_tumaco/GSVA/t_monocyte_gsva_h.xlsx")
t_monocyte_gsva_h <- simple_gsva(
    t_monocytes, signature_category = "h")
## Converting the rownames() of the expressionset to ENTREZID.
## 574 ENSEMBL ID's didn't have a matching ENTEREZ ID. Dropping them now.
## Before conversion, the expressionset has 19952 entries.
## After conversion, the expressionset has 19337 entries.
## Adding descriptions and IDs to the gene set annotations.
t_monocyte_gsva_h_sig <- get_sig_gsva_categories(
    t_monocyte_gsva_h,
    excel = "analyses/4_tumaco/GSVA/t_monocyte_gsva_h.xlsx")
## libsize was not specified, this parameter has profound effects on limma's result.
## Using the libsize from expt$libsize.
## Limma step 1/6: choosing model.
## Assuming this data is similar to a micro array and not performign voom.
## Limma step 3/6: running lmFit with method: ls.
## Limma step 4/6: making and fitting contrasts with no intercept. (~ 0 + factors)
## Finished make_pairwise_contrasts.
## Limma step 5/6: Running eBayes with robust = FALSE and trend = FALSE.
## Limma step 6/6: Writing limma outputs.
## Limma step 6/6: 1/1: Creating table: tumacofailure_vs_tumacocure.  Adjust = BH
## Limma step 6/6: 1/2: Creating table: tumacocure.  Adjust = BH
## Limma step 6/6: 2/2: Creating table: tumacofailure.  Adjust = BH
## The factor tumaco_cure has 21 rows.
## The factor tumaco_failure has 21 rows.
## Testing each factor against the others.
## Scoring tumaco_cure against everything else.
## Scoring tumaco_failure against everything else.

3.1.2.13 Tumaco Neutrophils c7

t_neutrophil_gsva_c7 <- simple_gsva(
    t_neutrophils,
    signatures = broad_c7,
    msig_xml = "reference/msigdb/msigdb_v7.5.1.xml",
    signature_category = "c7")
t_neutrophil_gsva_c7_sig <- get_sig_gsva_categories(
    t_neutrophil_gsva_c7,
    excel = "analyses/4_tumaco/GSVA/t_neutrophil_gsva_c7.xlsx")
t_neutrophil_gsva_c7 <- simple_gsva(
    t_neutrophils, signature_category = "c7")
## Converting the rownames() of the expressionset to ENTREZID.
## 574 ENSEMBL ID's didn't have a matching ENTEREZ ID. Dropping them now.
## Before conversion, the expressionset has 19952 entries.
## After conversion, the expressionset has 19337 entries.
## Adding descriptions and IDs to the gene set annotations.
t_neutrophil_gsva_c7_sig <- get_sig_gsva_categories(
    t_neutrophil_gsva_c7,
    excel = "analyses/4_tumaco/GSVA/t_neutrophil_gsva_c7.xlsx")
## libsize was not specified, this parameter has profound effects on limma's result.
## Using the libsize from expt$libsize.
## Limma step 1/6: choosing model.
## Assuming this data is similar to a micro array and not performign voom.
## Limma step 3/6: running lmFit with method: ls.
## Limma step 4/6: making and fitting contrasts with no intercept. (~ 0 + factors)
## Finished make_pairwise_contrasts.
## Limma step 5/6: Running eBayes with robust = FALSE and trend = FALSE.
## Limma step 6/6: Writing limma outputs.
## Limma step 6/6: 1/1: Creating table: tumacofailure_vs_tumacocure.  Adjust = BH
## Limma step 6/6: 1/2: Creating table: tumacocure.  Adjust = BH
## Limma step 6/6: 2/2: Creating table: tumacofailure.  Adjust = BH
## The factor tumaco_cure has 20 rows.
## The factor tumaco_failure has 21 rows.
## Testing each factor against the others.
## Scoring tumaco_cure against everything else.
## Scoring tumaco_failure against everything else.

3.1.2.14 Tumaco Neutrophils c2

t_neutrophil_gsva_c2 <- simple_gsva(
    t_neutrophils,
    signatures = broad_c2,
    msig_xml = "reference/msigdb/msigdb_v7.5.1.xml",
    signature_category = "c2")
t_neutrophil_gsva_c2_sig <- get_sig_gsva_categories(
    t_neutrophil_gsva_c2,
    excel = "analyses/4_tumaco/GSVA/t_neutrophil_gsva_c2.xlsx")
t_neutrophil_gsva_c2 <- simple_gsva(
    t_neutrophils, signature_category = "c2")
## Converting the rownames() of the expressionset to ENTREZID.
## 574 ENSEMBL ID's didn't have a matching ENTEREZ ID. Dropping them now.
## Before conversion, the expressionset has 19952 entries.
## After conversion, the expressionset has 19337 entries.
## Adding descriptions and IDs to the gene set annotations.
t_neutrophil_gsva_c2_sig <- get_sig_gsva_categories(
    t_neutrophil_gsva_c2,
    excel = "analyses/4_tumaco/GSVA/t_neutrophil_gsva_c2.xlsx")
## libsize was not specified, this parameter has profound effects on limma's result.
## Using the libsize from expt$libsize.
## Limma step 1/6: choosing model.
## Assuming this data is similar to a micro array and not performign voom.
## Limma step 3/6: running lmFit with method: ls.
## Limma step 4/6: making and fitting contrasts with no intercept. (~ 0 + factors)
## Finished make_pairwise_contrasts.
## Limma step 5/6: Running eBayes with robust = FALSE and trend = FALSE.
## Limma step 6/6: Writing limma outputs.
## Limma step 6/6: 1/1: Creating table: tumacofailure_vs_tumacocure.  Adjust = BH
## Limma step 6/6: 1/2: Creating table: tumacocure.  Adjust = BH
## Limma step 6/6: 2/2: Creating table: tumacofailure.  Adjust = BH
## The factor tumaco_cure has 20 rows.
## The factor tumaco_failure has 21 rows.
## Testing each factor against the others.
## Scoring tumaco_cure against everything else.
## Scoring tumaco_failure against everything else.

3.1.2.15 Tumaco Neutrophils H

t_neutrophil_gsva_h <- simple_gsva(
    t_neutrophils,
    signatures = broad_h,
    msig_xml = "reference/msigdb/msigdb_v7.5.1.xml",
    signature_category = "h")
t_neutrophil_gsva_h_sig <- get_sig_gsva_categories(
    t_neutrophil_gsva_h,
    excel = "analyses/4_tumaco/GSVA/t_neutrophil_gsva_h.xlsx")
t_neutrophil_gsva_h <- simple_gsva(
    t_neutrophils, signature_category = "h")
## Converting the rownames() of the expressionset to ENTREZID.
## 574 ENSEMBL ID's didn't have a matching ENTEREZ ID. Dropping them now.
## Before conversion, the expressionset has 19952 entries.
## After conversion, the expressionset has 19337 entries.
## Adding descriptions and IDs to the gene set annotations.
t_neutrophil_gsva_h_sig <- get_sig_gsva_categories(
    t_neutrophil_gsva_h,
    excel = "analyses/4_tumaco/GSVA/t_neutrophil_gsva_h.xlsx")
## libsize was not specified, this parameter has profound effects on limma's result.
## Using the libsize from expt$libsize.
## Limma step 1/6: choosing model.
## Assuming this data is similar to a micro array and not performign voom.
## Limma step 3/6: running lmFit with method: ls.
## Limma step 4/6: making and fitting contrasts with no intercept. (~ 0 + factors)
## Finished make_pairwise_contrasts.
## Limma step 5/6: Running eBayes with robust = FALSE and trend = FALSE.
## Limma step 6/6: Writing limma outputs.
## Limma step 6/6: 1/1: Creating table: tumacofailure_vs_tumacocure.  Adjust = BH
## Limma step 6/6: 1/2: Creating table: tumacocure.  Adjust = BH
## Limma step 6/6: 2/2: Creating table: tumacofailure.  Adjust = BH
## The factor tumaco_cure has 20 rows.
## The factor tumaco_failure has 21 rows.
## Testing each factor against the others.
## Scoring tumaco_cure against everything else.
## Scoring tumaco_failure against everything else.

Bibliography

GSVAdata.” n.d. Bioconductor. http://bioconductor.org/packages/GSVAdata/. Accessed September 16, 2024.
Hänzelmann, Sonja, Robert Castelo, and Justin Guinney. 2013. GSVA: Gene Set Variation Analysis for Microarray and RNA-Seq Data.” BMC Bioinformatics 14 (1): 7. https://doi.org/10.1186/1471-2105-14-7.
Liberzon, Arthur, Aravind Subramanian, Reid Pinchback, Helga Thorvaldsdóttir, Pablo Tamayo, and Jill P. Mesirov. 2011. “Molecular Signatures Database (MSigDB) 3.0.” Bioinformatics 27 (12): 1739–40. https://doi.org/10.1093/bioinformatics/btr260.
Love, Michael I., Wolfgang Huber, and Simon Anders. 2014. “Moderated Estimation of Fold Change and Dispersion for RNA-Seq Data with DESeq2.” bioRxiv. https://doi.org/10.1101/002832.
McCarthy, Davis J., Yunshun Chen, and Gordon K. Smyth. 2012. “Differential Expression Analysis of Multifactor RNA-Seq Experiments with Respect to Biological Variation.” Nucleic Acids Research 40 (10): 4288–97. https://doi.org/10.1093/nar/gks042.
LS0tCnRpdGxlOiAiVE1SQzMgYHIgU3lzLmdldGVudignVkVSU0lPTicpYDogTGlrZWxpaG9vZCBSYXRpbyBUZXN0cyBhbmQgR1NWQSIKYXV0aG9yOiAiYXRiIGFiZWxld0BnbWFpbC5jb20iCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCIKYmlibGlvZ3JhcGh5OiBhdGIuYmliCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgY29kZV9mb2xkaW5nOiBzaG93CiAgICBmaWdfY2FwdGlvbjogdHJ1ZQogICAgZmlnX2hlaWdodDogNwogICAgZmlnX3dpZHRoOiA3CiAgICBoaWdobGlnaHQ6IHplbmJ1cm4KICAgIGtlZXBfbWQ6IGZhbHNlCiAgICBtb2RlOiBzZWxmY29udGFpbmVkCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICAgIHNlbGZfY29udGFpbmVkOiB0cnVlCiAgICB0aGVtZTogcmVhZGFibGUKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OgogICAgICBjb2xsYXBzZWQ6IGZhbHNlCiAgICAgIHNtb290aF9zY3JvbGw6IGZhbHNlCi0tLQoKPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KYm9keSAubWFpbi1jb250YWluZXIgewogIG1heC13aWR0aDogMTYwMHB4Owp9CmJvZHksIHRkIHsKICBmb250LXNpemU6IDE2cHg7Cn0KY29kZS5yewogIGZvbnQtc2l6ZTogMTZweDsKfQpwcmUgewogIGZvbnQtc2l6ZTogMTZweAp9Cjwvc3R5bGU+CgpgYGB7ciBvcHRpb25zLCBpbmNsdWRlPUZBTFNFfQpsaWJyYXJ5KGhwZ2x0b29scykKbGlicmFyeShkcGx5cikKbGlicmFyeShmb3JjYXRzKQoKa25pdHI6Om9wdHNfa25pdCRzZXQocHJvZ3Jlc3MgPSBUUlVFLCB2ZXJib3NlID0gVFJVRSwgd2lkdGggPSA5MCwgZWNobyA9IFRSVUUpCmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICBlcnJvciA9IFRSVUUsIGZpZy53aWR0aCA9IDgsIGZpZy5oZWlnaHQgPSA4LCBmaWcucmV0aW5hID0gMiwKICBvdXQud2lkdGggPSAiMTAwJSIsIGRldiA9ICJwbmciLAogIGRldi5hcmdzID0gbGlzdChwbmcgPSBsaXN0KHR5cGUgPSAiY2Fpcm8tcG5nIikpKQpvbGRfb3B0aW9ucyA8LSBvcHRpb25zKGRpZ2l0cyA9IDQsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSwga25pdHIuZHVwbGljYXRlLmxhYmVsID0gImFsbG93IikKZ2dwbG90Mjo6dGhlbWVfc2V0KGdncGxvdDI6OnRoZW1lX2J3KGJhc2Vfc2l6ZSA9IDEyKSkKdmVyIDwtIFN5cy5nZXRlbnYoIlZFUlNJT04iKQpydW5kYXRlIDwtIGZvcm1hdChTeXMuRGF0ZSgpLCBmb3JtYXQgPSAiJVklbSVkIikKCnJtZF9maWxlIDwtICIwNGxydF9nc3ZhLlJtZCIKc2F2ZWZpbGUgPC0gZ3N1YihwYXR0ZXJuPSJcXC5SbWQiLCByZXBsYWNlPSJcXC5yZGFcXC54eiIsIHg9cm1kX2ZpbGUpCmxvYWRlZCA8LSBsb2FkKGZpbGU9Z2x1ZSgicmRhL3RtcmMzX2RhdGFfc3RydWN0dXJlcy12e3Zlcn0ucmRhIikpCmBgYAoKIyBJbnRyb2R1Y3Rpb24KClRob3VnaCB0aGVyZSBpcyBubyBmdW5kYW1lbnRhbCByZWFzb24gdG8gc2VwYXJhdGUgdGhlIGxpa2VsaWhvb2QgcmF0aW8KdGVzdGluZyBhbmQgR1NWQSBmcm9tIHRoZSBkaWZmZXJlbnRpYWwgZXhwcmVzc2lvbiBhbmFseXNlcywgdGhleSBhcmUKYm90aCB0YXNrcyB3aGljaCByZWFjaCBiYWNrIHRvIHRoZSBwcmltYXJ5IGV4cHJlc3Npb24gZGF0YSwgdW5saWtlCkdTRUEuICBUaGVyZWZvcmUgSSBjaG9zZSB0byBzZXBhcmF0ZSB0aGVzZSB0d28gdGFza3MgaW50byBhIHRoZWlyIG93bgpkb2N1bWVudC4KCiMgTFJUCgpFZGdlUiAoQG1jY2FydGh5RGlmZmVyZW50aWFsRXhwcmVzc2lvbkFuYWx5c2lzMjAxMikgIGFuZCBERVNlcTIKKEBsb3ZlTW9kZXJhdGVkRXN0aW1hdGlvbkZvbGQyMDE0KSBib3RoIHByb3ZpZGUgZWFzaWx5IGFjY2Vzc2libGUgTFJUCmFuYWx5c2VzLiAgSWYgSSByZW1lbWJlciBjb3JyZWN0bHksIHRoZSBmdW5jdGlvbiBJIHdyb3RlIHRvIHNpbXBsaWZ5CnRoZXNlIGFuYWx5c2VzIGlzIGF3YXJlIG9mIGJvdGgsIGJ1dCB0aGlzIGRvY3VtZW50IHByaW1hcmlseQp1c2VzIHRoZSByZXN1bHRzIGZyb20gREVTZXEyLiAgSSBhbSByZWFzb25hYmx5IGNlcnRhaW4gdGhleSBlbmQgdXAKYmFzaWNhbGx5IGlkZW50aWNhbC4uLgoKVGhlIGxpa2VsaWhvb2QgcmF0aW8gdGVzdGluZyBwZXJmb3JtZWQgb24gdGhlIFRNUkMzIGRhdGEgaXMgaW50ZW5kZWQKdG8gbG9vayBmb3Igc2hhcmVkIHBhdHRlcm5zIG9mIGV4cHJlc3Npb24gYWNyb3NzIHNvbWUga25vd24sIGNvbnN0YW50CmZhY3Rvci4gIFRoaXMgbWF5IGJlIHRpbWUgKGFyZSB0aGVyZSBwYXR0ZXJucyBhY3Jvc3MgdGhlIHZpc2l0cyBvZgplYWNoIHBlcnNvbiksIG9yIGNlbGwgdHlwZSAoZG8gc29tZSBnZW5lcyBhY3QgY29uc2lzdGVudGx5IGFjcm9zcwp0eXBlKS4gIFdlIGNvdWxkIGFsc28gYXNrIHRoaXMgcXVlc3Rpb24gb2Ygb3VyIHR3byBjbGluaWNzLCBvciBpbmRlZWQKYWNyb3NzIHRoZSBjdXJlL2ZhaWwgc2FtcGxlcy4KCiMjIFBhdHRlcm5zIGFjcm9zcyBjbGluaWMKCmBgYHtyfQp0Y19jbGluaWNhbF9maWx0IDwtIG5vcm1hbGl6ZV9leHB0KHRjX2NsaW5pY2FsLCBmaWx0ZXIgPSBUUlVFKQp0Y19scnRfY2xpbmljIDwtIGRlc2VxX2xydCh0Y19jbGluaWNhbF9maWx0LCB0cmFuc2Zvcm0gPSAidnN0IiwgaW50ZXJhY3Rpb24gPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3Rvcl9jb2x1bW4gPSAidmlzaXRudW1iZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmVzdF9jb2x1bW4gPSAiY2xpbmljIikKdGNfbHJ0X2NsaW5pY1tbImNsdXN0ZXJfZGF0YSJdXVtbInBsb3QiXV0KYGBgCgojIyBQYXR0ZXJucyBhY3Jvc3MgdmlzaXRzLCBvbmx5IFR1bWFjbwoKIyMjIEFsbCBjbGluaWNhbCBjZWxsIHR5cGVzCgpgYGB7cn0KdF9jbGluaWNhbF9maWx0IDwtIG5vcm1hbGl6ZV9leHB0KHRfY2xpbmljYWwsIGZpbHRlcj1UUlVFKQpscnRfdmlzaXQgPC0gZGVzZXFfbHJ0KHRfY2xpbmljYWxfZmlsdCwgdHJhbnNmb3JtID0gInZzdCIsIGludGVyYWN0aW9uID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3Rvcl9jb2x1bW4gPSAidmlzaXRudW1iZXIiLAogICAgICAgICAgICAgICAgICAgICAgIGludGVyZXN0X2NvbHVtbiA9ICJmaW5hbG91dGNvbWUiKQpscnRfdmlzaXQkY2x1c3Rlcl9kYXRhJHBsb3QKc3VtbWFyeShscnRfdmlzaXRbWyJmYXZvcml0ZV9nZW5lcyJdXSkKd3JpdHRlbiA8LSB3cml0ZV94bHN4KGRhdGEgPSBhcy5kYXRhLmZyYW1lKGxydF92aXNpdFtbImRlc2VxX3RhYmxlIl1dKSwKICAgICAgICAgICAgICAgICAgICAgIGV4Y2VsID0gZ2x1ZSgiZXhjZWwvbHJ0X2NsaW5pY2FsX3Zpc2l0LXZ7dmVyfS54bHN4IikpCmBgYAoKIyMjIE1vbm9jeXRlcywgb25seSBUdW1hY28KCmBgYHtyfQpscnRfbW9ub2N5dGVfdmlzaXQgPC0gZGVzZXFfbHJ0KHRfdmlzaXRjZl9tb25vY3l0ZSwgdHJhbnNmb3JtID0gInZzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24gPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdG9yX2NvbHVtbiA9ICJ2aXNpdG51bWJlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJlc3RfY29sdW1uID0gImZpbmFsb3V0Y29tZSIpCmxydF9tb25vY3l0ZV92aXNpdFtbImNsdXN0ZXJfZGF0YSJdXVtbInBsb3QiXV0KYGBgCgojIyMgTmV1dHJvcGhpbHMsIG9ubHkgVHVtYWNvCgpgYGB7cn0KbHJ0X25ldXRyb3BoaWxfdmlzaXQgPC0gZGVzZXFfbHJ0KHRfdmlzaXRjZl9uZXV0cm9waGlsLCB0cmFuc2Zvcm0gPSAidnN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aW9uID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdG9yX2NvbHVtbiA9ICJ2aXNpdG51bWJlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmVzdF9jb2x1bW4gPSAiZmluYWxvdXRjb21lIikKbHJ0X25ldXRyb3BoaWxfdmlzaXRbWyJjbHVzdGVyX2RhdGEiXV1bWyJwbG90Il1dCmBgYAoKIyMjIEVvc2lub3BoaWxzLCBvbmx5IFR1bWFjbwoKYGBge3J9CmxydF9lb3Npbm9waGlsX3Zpc2l0IDwtIGRlc2VxX2xydCh0X3Zpc2l0Y2ZfZW9zaW5vcGhpbCwgdHJhbnNmb3JtID0gInZzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbiA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3Rvcl9jb2x1bW4gPSAidmlzaXRudW1iZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJlc3RfY29sdW1uID0gImZpbmFsb3V0Y29tZSIpCmBgYAoKIyMgU2hhcmVkIHBhdHRlcm5zIGFjcm9zcyBjZWxsIHR5cGVzCgpgYGB7cn0KbHJ0X2NlbGx0eXBlX2NsaW5pY2FsX3Rlc3QgPC0gZGVzZXFfbHJ0KHRjX2NsaW5pY2FsLCB0cmFuc2Zvcm0gPSAidnN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0b3JfY29sdW1uID0gInR5cGVvZmNlbGxzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZXN0X2NvbHVtbiA9ICJmaW5hbG91dGNvbWUiKQoKaHNfYW5ub3QgPC0gZkRhdGEoaHNfZXhwdCkKZGVzZXFfbHJ0X2RmIDwtIG1lcmdlKGhzX2Fubm90LCBhcy5kYXRhLmZyYW1lKGxydF9jZWxsdHlwZV9jbGluaWNhbF90ZXN0W1siZGVzZXFfdGFibGUiXV0pLCBhbGwueT1UUlVFLAogICAgICAgICAgICAgICAgICAgICAgYnk9InJvdy5uYW1lcyIpCnJvd25hbWVzKGRlc2VxX2xydF9kZikgPC0gZGVzZXFfbHJ0X2RmW1siUm93Lm5hbWVzIl1dCmRlc2VxX2xydF9kZltbIlJvdy5uYW1lcyJdXSA8LSBOVUxMCndyaXR0ZW4gPC0gd3JpdGVfeGxzeChkYXRhPWRlc2VxX2xydF9kZiwKICAgICAgICAgICAgICAgICAgICAgIGV4Y2VsPWdsdWUoImV4Y2VsL2xydF9jbGluaWNhbF9jZWxsdHlwZS12e3Zlcn0ueGxzeCIpKQpgYGAKCiMgR1NWQQoKR1NWQShAaGFuemVsbWFubkdTVkFHZW5lU2V0MjAxMykgaXMgYSBfY29tcGxldGVseV8gZGlmZmVyZW50IGZhbWlseSBvZgphbmFseXNpcywgYW5kIGF0IGxlYXN0IGluIG15IGhhbmRzIGlzIHVzZWQgYXMgYSB3YXkgdG8gZXhwbG9yZSBhbmQKbG9vayBmb3IgcHVibGljYXRpb25zIHdoaWNoIG1heSBiZSBvZiBpbnRlcmVzdC4gIFRoZSBnZW5lcmFsIGlkZWEgaXMKdGhhdCBpdCBwZXJmb3JtcyBhIHNwZWNpZmljIHNldCBvZiBub3JtYWxpemF0aW9ucyBvbiB0aGUgcmF3IGRhdGEsCnJhbmsgb3JkZXJzIHRoZSByZXN1bHRzOyB0aGVuIGNyb3NzIHJlZmVyZW5jZXMgdGhlbSBhZ2FpbnN0CmV4dGFudCBhbmFseXNlcyBsb29raW5nIGZvciBvdmVyIHJlcHJlc2VudGVkIGdlbmUgc2V0cyBpbgpzcGVjaWZpYyBwYXBlcnMgb3IgY2F0ZWdvcmllcyAoZS5nLiByZWFjdG9tZS9HTy9ldGMpLiAgVGhpcyBtYXkgZWl0aGVyCnVzZSBhIGJ1aWx0LWluIHNldCBvZiBtU2lnREIKKEBsaWJlcnpvbk1vbGVjdWxhclNpZ25hdHVyZXNEYXRhYmFzZTIwMTEpIGdlbmUgc2V0cywgb3IgeW91IG1heSBwdWxsCmluIG1hbnVhbGx5IGRvd25sb2FkZWQgKG5ld2VyKSBkYXRhLiAgT24gbXkgd29ya3N0YXRpb24sIEkgZG8gdGhlCmxhdHRlciBiZWNhdXNlIEkgY2FuIGxldmVyYWdlIHRoZSBkb3dubG9hZGVkIGdtdC94bWwvZXRjIGZpbGVzIGluCm9yZGVyIHRvIGdldCB0aGUgZnVsbCBhbm5vdGF0aW9ucyBmb3IgdGhlIGdlbmUgc2V0cyBhbmQgYWNjb21wYW55aW5nCnBhcGVycy4gIFRoaXMgY29udGFpbmVyIGp1c3QgdXNlcyB0aGUgcHJlLWRvd25sb2FkZWQgbVNpZ0RCIGRhdGEKKEBHU1ZBZGF0YSksIHdoaWNoIGlzIGEgYml0IG9sZGVyLgoKKlJlbWluZGVyKjogSSBkaXNhYmxlZCB0aGVzZSBmb3IgdGhlIG1vbWVudCBpbiBvcmRlciB0byBjb25zaWRlciBob3cKdG8gaGFuZGxlIHRoZSAobm9uKWluY2x1c2lvbiBvZiB0aGUgbVNpZ0RCIGdtdCBmaWxlcy4KCiMjIExvYWQgc29tZSBzaWduYXR1cmVzCgpJZiBvbmUgY2hvb3Nlcywgc2ltcGxlX2dzdmEoKSBjYW4gZWl0aGVyIGxvYWQgc2lnbmF0dXJlcyBmcm9tIHRoZQpHU1ZBZGF0YSBwYWNrYWdlLCB3aGljaCBpcyBhIGxpdHRsZSBvbGQsIG9yIGxvYWQgYW4gYXJiaXRyYXJ5IHNldC4KbG9hZF9nbXRfc2lnbmF0dXJlcygpIHByb3ZpZGVzIGEgcXVpY2sgd2F5IHRvIGV4dHJhY3QgdGhlbSBmcm9tIGEgZ210CmZpbGUuCgpgYGB7ciwgZXZhbD1GQUxTRX0KYnJvYWRfYzcgPC0gbG9hZF9nbXRfc2lnbmF0dXJlcyhzaWduYXR1cmVzID0gInJlZmVyZW5jZS9tc2lnZGIvYzcuYWxsLnY3LjUuMS5lbnRyZXouZ210IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVfY2F0ZWdvcnkgPSAiYzciKQpicm9hZF9jMiA8LSBsb2FkX2dtdF9zaWduYXR1cmVzKHNpZ25hdHVyZXMgPSAicmVmZXJlbmNlL21zaWdkYi9jMi5hbGwudjcuNS4xLmVudHJlei5nbXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZV9jYXRlZ29yeSA9ICJjMiIpCmJyb2FkX2ggPC0gbG9hZF9nbXRfc2lnbmF0dXJlcyhzaWduYXR1cmVzID0gInJlZmVyZW5jZS9tc2lnZGIvaC5hbGwudjcuNS4xLmVudHJlei5nbXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlX2NhdGVnb3J5ID0gImgiKQpgYGAKCkFjdHVhbGx5LCBJIGFtIGdvaW5nIHRvIHRyeSB0byBzZW1pLWNoYW5nZSBteSBtaW5kOgpHU1ZBIGNvbWVzIHdpdGggYSBkYXRhc2V0IGNvbXByaXNlZCBvZiBzb21lIG9sZGVyIG1TaWdEQiBkYXRhLiAgVGh1cyBJCndpbGwgcmVwZWF0IGVhY2ggb2YgdGhlIGZvbGxvd2luZyBibG9ja3Mgd2l0aCBhbiBpbnZvY2F0aW9uIHdoaWNoIHVzZXMKdGhlIG9sZGVyIGRhdGEgYW5kIGxlYXZlIHRoZSBwcmV2aW91cyBpbnZvY2F0aW9ucyBoZXJlIHNvIHlvdSBjYW4gc2VlCndoYXQgSSBhY3R1YWxseSByYW4gdG8gbWFrZSBwcmV0dHkgcGljdHVyZXMuICBJbiB0aGUgYmVzdCBjYXNlCnNjZW5hcmlvLCB0aGUgcmVzdWx0cyBzaG91bGQgYmUgbmVhcmx5IGlkZW50aWNhbCB3aXRoIG9ubHkgYSBmZXcKY2F0ZWdvcmllcyBtaXNzaW5nIGJldHdlZW4gdGhlIG5ldyBjb3B5IEkgZG93bmxvYWRlZCBhbmQgbG9hZGVkIGFib3ZlCmFuZCB0aGUgbG9hZGVkLWJ5LWdzdmEgdmVyc2lvbi4KCiMjIyBDbGluaWNhbCBzYW1wbGVzCgojIyMjIENsaW5pY2FsIEMyCgpgYGB7ciwgZXZhbD1GQUxTRX0KdGNfY2VsbHR5cGVfZ3N2YV9jMiA8LSBzaW1wbGVfZ3N2YSgKICAgIHRjX3ZhbGlkLCBzaWduYXR1cmVzID0gYnJvYWRfYzIsCiAgICBtc2lnX3htbCA9ICJyZWZlcmVuY2UvbXNpZ2RiL21zaWdkYl92Ny41LjEueG1sIikKdGNfY2VsbHR5cGVfZ3N2YV9jMl9zaWcgPC0gZ2V0X3NpZ19nc3ZhX2NhdGVnb3JpZXMoCiAgICB0Y19jZWxsdHlwZV9nc3ZhX2MyLAogICAgZXhjZWwgPSAiYW5hbHlzZXMvM19jYWxpX2FuZF90dW1hY28vR1NWQS90Y192YWxpZF9nc3ZhX2MyLnhsc3giKQp0Y19jZWxsdHlwZV9nc3ZhX2MyX3NpZyRzdWJzZXRfcGxvdAp0Y19jZWxsdHlwZV9nc3ZhX2MyX3NpZyRzY29yZV9wbG90CmBgYAoKVGhlcmUgYXJlIHR3byBvdGhlciBpbXBvcnRhbnQgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGVzZSByZXN1bHRzIGFuZCB0aGUKcmVzdWx0cyBvYnRhaW5lZCB3aGVuIHVzaW5nIHRoZSBhYm92ZSBpbnZvY2F0aW9ucyBhbmQgdGhlIGZvbGxvd2luZzoKCjEuICBUaGUgYWJvdmUgaW52b2NhdGlvbnMgd2VyZSBkb25lIGJlZm9yZSBtU2lnREIgY2hhbmdlZCB0aGUgeG1sCiAgICBmb3JtYXQgc28gdGhhdCBpdCBubyBsb25nZXIgc3VjY2Vzc2Z1bGx5IHBhcnNlcy4gIEkgdGhlcmVmb3JlCiAgICBjaGFuZ2VkIG15IGZ1bmN0aW9uIHRvIHVzZSB0aGUgbmV3ZXIgc3FsaXRlIHZlcnNpb25zIGZvciB2ZXJzaW9ucwogICAgb2YgbVNpZ0RCID4gNy4yLiAgVGh1cyBJIHNob3VsZCBjaGFuZ2UgdGhlIGFib3ZlIHRvIHJlZmxlY3QgdGhpcy4KMi4gIFRoZSBSIGRhdGEgcGFja2FnZSB2ZXJzaW9uIG9mIHRoZSBtU2lnREIgKGF0IGxlYXN0IHRoZSBsYXN0IHRpbWUgSQogICAgY2hlY2tlZCkgZG9lcyBub3QgaGF2ZSBhbGwgdGhlIGZ1bi9pbnRlcmVzdGluZyBleHBlcmltZW50CiAgICBhbm5vdGF0aW9uIGluZm9ybWF0aW9uIGluY2x1ZGVkIGluIHRoZSB4bWwvc3FsaXRlLiAgVGh1cywgdGhlCiAgICBmb2xsb3dpbmcgcmVzdWx0cyB3aWxsIGJlIHNwYXJzZXIgKHVubGVzcyBJIGFtIG1pc3Rha2VuIGFib3V0IHRoZQogICAgR1NWQWRhdGEpIHZpcyBhIHZpcyB0aGUgYW5ub3RhdGlvbnMuCgpoZWgsIG9ubHkgMSB3YXkgdG8gZmluZCBvdXQhICBMZXQgdXMgdHJ5IQoKUmVtaW5kZXIgdG8gc2VsZiwgdGhlc2UgYXJlIHRoZSBjdXJyZW50IG1TaWdEQiBodW1hbiBjYXRlZ29yaWVzLCBJIGFtCm5vdCBjZXJ0YWluIHdoaWNoIChJIGFzc3VtZSBhbGwpIGFyZSBpbmNsdWRlZCBpbiBHU1ZBZGF0YS4KCiogSDogSGFsbG1hcmsgZ2VuZXMsIDUwIGdlbmUgc2V0cyBmb3Igd2VsbCBkZWZpbmVkIHN0YXRlcy9wcm9jZXNzZXMuCiogQzE6IEdlbmVzIGJ5IGNocm9tb3NvbWFsIHBvc2l0aW9uLiAgRS5nLiB1c2luZyB0aGUga2FyeW9ncmFtIHRvIG1ha2UKICBncm91cHMuCiogQzI6IEN1cmF0ZWQgZ2VuZSBzZXRzOiBWYXJpb3VzIG90aGVyIGRhdGFzZXRzIGJyb3VnaHQgdG9nZXRoZXI6CiAgQmlvQ2FydGEgcGF0aHdheXMsIEtFR0dfTUVESUNVUywgUElEIHBhdGh3YXlzLCByZWFjdG9tZSBwYXRod2F5cywKICB3aWtpcGF0aHdheXMsIGFuZCBsZWdhY3kgS0VHRy4KKiBDMzogUmVndWxhdG9yeSB0YXJnZXRzIHNldHMgKGUuZy4gZXhwZWN0ZWQgdG8gYmUgYWZmZWN0ZWQgYnkgc3R1ZmYKICBsaWtlIG1pUk5BKTogTUlSIHRhcmdldHMsIG1pUkRCIHRhcmdldHMsIE1JUl9MRUdBQ1ksIFRGVCBnZW5lcywgYW5kCiAgdGhlIEdUUkQgc3Vic2V0IG9mIFRGVC4KKiBDNDogQ29tcHV0YXRpb25hbCBzZXRzIGluIGNhbmNlcjogM0NBIGZyb20gdGhlIGNlbGwgYXRsYXMsIEdDTgogIChjYW5jZXIgZ2VuZSBuZWlnaGJvcmhvb2RzKSwgQ006IENhbmNlciBtb2R1bGVzLgoqIEM1OiBHZW5lIG9udG9sb2d5IC0tIHRoaXMgaXMgc3BsaXQgYmV0d2VlbiB0aGUgY2Fub25pY2FsIE1GL0JQL0NDCiAgYW5kIHRoZSBodW1hbiBwaGVub3R5cGUgcGF0aG9sb2d5IGRhdGFzZXQuCiogQzY6IG9uY29nZW5pYyBzaWduYXR1cmUgZ2VuZSBzZXRzOiBwdWxsZWQgZnJvbSBOQ0JJIEdFTyBhbmQvb3IgQnJvYWQKICBleHBlcmltZW50cy4KKiBDNzogaW1tdW5vbG9naWMgc2lnbmF0dXJlIGdlbmUgc2V0czogUGVydHVyYmF0aW9ucyBvZiB0aGUgaW1tdW5lCiAgc3lzdGVtOiBJbW11bmVTaWdEQiwgVkFYICh0aGlzIG9uZSBpcyBvdXIgZmF2b3JpdGUgZm9yIG9idmlvdXMgKEkKICB0aGluaykgcmVhc29ucykKKiBDODogY2VsbCB0eXBlIHNpZ25hdHVyZXMKCmBgYHtyfQp0Y19jZWxsdHlwZV9nc3ZhX2MyIDwtIHNpbXBsZV9nc3ZhKAogIHRjX3ZhbGlkLCBzaWduYXR1cmVfY2F0ZWdvcnkgPSAiYzIiKQoKdGNfY2VsbHR5cGVfZ3N2YV9jMl9zaWcgPC0gZ2V0X3NpZ19nc3ZhX2NhdGVnb3JpZXMoCiAgICB0Y19jZWxsdHlwZV9nc3ZhX2MyLAogICAgZXhjZWwgPSAiYW5hbHlzZXMvM19jYWxpX2FuZF90dW1hY28vR1NWQS90Y192YWxpZF9nc3ZhX2MyLnhsc3giKQp0Y19jZWxsdHlwZV9nc3ZhX2MyX3NpZyRzdWJzZXRfcGxvdAp0Y19jZWxsdHlwZV9nc3ZhX2MyX3NpZyRzY29yZV9wbG90CmBgYAoKIyMjIyBWYWxpZCAgQzcKCkRpdHRvIGZvciBDNwoKYGBge3IsIGV2YWw9RkFMU0V9CnRjX2NlbGx0eXBlX2dzdmFfYzcgPC0gc2ltcGxlX2dzdmEoCiAgICB0Y192YWxpZCwgc2lnbmF0dXJlcyA9IGJyb2FkX2M3LAogICAgbXNpZ194bWwgPSAicmVmZXJlbmNlL21zaWdkYi9tc2lnZGJfdjcuNS4xLnhtbCIsCiAgICBzaWduYXR1cmVfY2F0ZWdvcnk9ImM3IikKdGNfY2VsbHR5cGVfZ3N2YV9jN19zaWcgPC0gZ2V0X3NpZ19nc3ZhX2NhdGVnb3JpZXMoCiAgICB0Y19jZWxsdHlwZV9nc3ZhX2M3LAogICAgZXhjZWwgPSAiYW5hbHlzZXMvM19jYWxpX2FuZF90dW1hY28vR1NWQS90Y192YWxpZF9nc3ZhX2M3Lnhsc3giKQpgYGAKCmBgYHtyfQp0Y19jZWxsdHlwZV9nc3ZhX2M3IDwtIHNpbXBsZV9nc3ZhKAogIHRjX3ZhbGlkLCBzaWduYXR1cmVfY2F0ZWdvcnkgPSAiYzciKQoKdGNfY2VsbHR5cGVfZ3N2YV9jN19zaWcgPC0gZ2V0X3NpZ19nc3ZhX2NhdGVnb3JpZXMoCiAgICB0Y19jZWxsdHlwZV9nc3ZhX2M3LAogICAgZXhjZWwgPSAiYW5hbHlzZXMvM19jYWxpX2FuZF90dW1hY28vR1NWQS90Y192YWxpZF9nc3ZhX2M3Lnhsc3giKQp0Y19jZWxsdHlwZV9nc3ZhX2M3X3NpZyRzdWJzZXRfcGxvdAp0Y19jZWxsdHlwZV9nc3ZhX2M3X3NpZyRzY29yZV9wbG90CmBgYAoKSSBhbSBub3QgdG9vIGZ1c3NlZCBhYm91dCB0aGUgaGFsbG1hcmsgZ2VuZXMuCgojIyMjIFZhbGlkIEgKCmBgYHtyLCBldmFsPUZBTFNFfQp0Y19jZWxsdHlwZV9nc3ZhX2ggPC0gc2ltcGxlX2dzdmEoCiAgICB0Y192YWxpZCwKICAgIHNpZ25hdHVyZXMgPSBicm9hZF9oLAogICAgbXNpZ194bWwgPSAicmVmZXJlbmNlL21zaWdkYi9tc2lnZGJfdjcuNS4xLnhtbCIsCiAgICBzaWduYXR1cmVfY2F0ZWdvcnkgPSAiaCIpCnRjX2NlbGx0eXBlX2dzdmFfaF9zaWcgPC0gZ2V0X3NpZ19nc3ZhX2NhdGVnb3JpZXMoCiAgICB0Y19jZWxsdHlwZV9nc3ZhX2gsCiAgICBleGNlbCA9ICJhbmFseXNlcy8zX2NhbGlfYW5kX3R1bWFjby9HU1ZBL3RjX3ZhbGlkX2dzdmFfaC54bHN4IikKYGBgCgojIyMgVHVtYWNvIHNhbXBsZXMKCiMjIyMgQ2xpbmljYWwgQzIKClRoZSBDMiBzZXQgaW5jbHVkZXMgYSBicm9hZCBhcnJheSBvZiBkYXRhYmFzZXMgYW5kIHN0dWRpZXMuICBUaHVzIHdoZW4Kd2UgbG9vayBhdCB0aGUgdmFyaW91cyBnZW5lIHNldHMgd2hpY2ggYXJlIGRlZW1lZCB0byBiZSBwb29yIHNjb3JpbmcsCndlIHNlZSB0aGluZ3MgbGlrZSAndGhlIHJldGlub2lkIGN5Y2xlIGluIGNvbmVzJyBvciAnTmljb3RpbmUKbWV0YWJvbGlzbScuCgpgYGB7ciwgZXZhbD1GQUxTRX0KdF9jbGluaWNhbF9nc3ZhX2MyIDwtIHNpbXBsZV9nc3ZhKAogICAgdF9jbGluaWNhbCwKICAgIHNpZ25hdHVyZXMgPSBicm9hZF9jMiwKICAgIG1zaWdfeG1sID0gInJlZmVyZW5jZS9tc2lnZGIvbXNpZ2RiX3Y3LjUuMS54bWwiLAogICAgc2lnbmF0dXJlX2NhdGVnb3J5ID0gImMyIikKdF9jbGluaWNhbF9nc3ZhX2MyX3NpZyA8LSBnZXRfc2lnX2dzdmFfY2F0ZWdvcmllcygKICAgIHRfY2xpbmljYWxfZ3N2YV9jMiwKICAgIGV4Y2VsID0gImFuYWx5c2VzLzRfdHVtYWNvL0dTVkEvdF9jbGluaWNhbF9nc3ZhX2MyLnhsc3giKQp0X2NsaW5pY2FsX2dzdmFfYzJfc2lnJHN1YnNldF9wbG90CnRfY2xpbmljYWxfZ3N2YV9jMl9zaWckc2NvcmVfcGxvdApgYGAKCmBgYHtyfQp0X2NsaW5pY2FsX2dzdmFfYzIgPC0gc2ltcGxlX2dzdmEoCiAgICB0X2NsaW5pY2FsLCBzaWduYXR1cmVfY2F0ZWdvcnkgPSAiYzIiKQp0X2NsaW5pY2FsX2dzdmFfYzJfc2lnIDwtIGdldF9zaWdfZ3N2YV9jYXRlZ29yaWVzKAogICAgdF9jbGluaWNhbF9nc3ZhX2MyLAogICAgZXhjZWwgPSAiYW5hbHlzZXMvNF90dW1hY28vR1NWQS90X2NsaW5pY2FsX2dzdmFfYzIueGxzeCIpCnRfY2xpbmljYWxfZ3N2YV9jMl9zaWckc3Vic2V0X3Bsb3QKdF9jbGluaWNhbF9nc3ZhX2MyX3NpZyRzY29yZV9wbG90CmBgYAoKVGhlIGdldF9zaWdfZ3N2YV9jYXRlZ29yaWVzKCkgZnVuY3Rpb24gdXNlcyBhIGZldyBtZXRyaWNzIHRvIGF0dGVtcHQKdG8gZmluZCBtc2lnREIgY2F0ZWdvcmllcyBvZiBpbnRlcmVzdCBmcm9tIHRoZSBHU1ZBIHJlc3VsdHMuICBPbmUgb2YKdGhlIG1ldGhvZHMgZW1wbG95ZWQgd2hpY2ggSSBob3BlIHdpbGwgcHJvdmUgdXNlZnVsIGlzIHRvIHRlc3QgdGhlCnNjb3JlcyBvYnNlcnZlZCBmb3Igb25lIGNvbmRpdGlvbiBhZ2FpbnN0IGFsbCB2YWx1ZXMgaW4gb3JkZXIgdG8gbG9vawpmb3IgY2F0ZWdvcmllcyB3aGljaCBhcmUgdGhlIG1vc3QgbGlrZWx5IHRvIGJlIGludGVyZXN0aW5nLgoKV2l0aCB0aGF0IGluIG1pbmQsIGhlcmUgYXJlIHRoZSBicmllZiBkZXNjcmlwdGlvbnMgZm9yIGEgZmV3IG9mIHRoZQptb3N0IGhpZ2hseSBzY29yZWQgQzIgZ3JvdXBzIGFuZCB0aGVpciBhc3NvY2lhdGVkIFBNSURzLiAgTm90ZSB0aGF0CnRoaXMgYXJlIHRha2VuIGZyb20gdGhlIHNldCBvZiBmYWlsZWQgc2FtcGxlcyB2cy4gYWxsOyB0aGVyZSBhcmUgc29tZQpkaWZmZXJlbmNlcyBhbW9uZyB0aGUgY3VyZSBzYW1wbGVzLCBidXQgdGhleSBhcmUgZ2VuZXJhbGx5IHZlcnkKc2ltaWxhci4KCiogSUwyMiBTb2x1YmxlIFJlY2VwdG9yIFNpZ25hbGluZyBQYXRod2F5CiogTFJSIEZMSUktaW50ZXJhY3RpbmcgcHJvdGVpbiAxIChMUlJGSVAxKSBhY3RpdmF0ZXMgdHlwZSBJIElGTiBwcm9kdWN0aW9uCiogU3RhdDMgU2lnbmFsaW5nIFBhdGh3YXkKKiBERXgvSC1ib3ggaGVsaWNhc2VzIGFjdGl2YXRlIHR5cGUgSSBJRk4gYW5kIGluZmxhbW1hdG9yeSBjeXRva2luZXMgcHJvZHVjdGlvbgoqIE1hdHVyYXRpb24gb2YgU0FSUy1Db1YtMSBzcGlrZSBwcm90ZWluCiogMTgyODU0NTk6IFByb3RlaW5zIHNpZ25pZmljYW50bHkgaW5kdWNlZCBieSBveGlkYXRpdmUgc3RyZXNzIChoeWRyb2dlbiBwZXJveGlkZQogIFtQdWJDaGVtPTc4NF0gaW4gNzg2LU8gY2VsbHMgKHJlbmFsIGNsZWFyIGNlbGwgY2FyY2lub21hLCBSQ0MpIGV4cHJlc3NpbmcgVkhMIFtHZW5lSUQ9NzQyOF0uCiogTmVnYXRpdmUgZmVlZGJhY2sgcmVndWxhdGlvbiBvZiBNQVBLIHBhdGh3YXkKKiAxNjQyNDAxNDogR2VuZXMgZnJvbSB0aGUgMTJwIHJlZ2lvbiB0aGF0IHdlcmUgdXAtcmVndWxhdGVkIGluCiAgY2hvcmlvY2FyY2lub21hIGNlbGxzIGNvbXBhcmVkIHRvIG5vcm1hbCB0ZXN0aXMuCiogRGljZXIgUGF0aHdheQoqIDE3NDQwMTY1OiBQcm90ZWlucyB3aXRoIHJlZHVjZWQgZXhwcmVzc2lvbiBpbiBtdWxpZ25hbnQgZ2xpb21hIGNlbGwgbGluZSAoQTE3Mikgd2hpY2ggYmVhcnMKICBsb3NzIG9mIGhldGVyb3p5Z29zaXR5IChMT0gpIGluIHRoZSAxcCByZWdpb24uCiogSW50ZXJsZXVraW4tNiBzaWduYWxpbmcKKiBIdW1hbiBDeXRvbWVnYWxvdmlydXMgYW5kIE1hcCBLaW5hc2UKKiBTaWduYWxpbmcgYnkgY3l0b3NvbGljIEZHRlIxIGZ1c2lvbiBtdXRhbnRzCiogMTU3MTAzOTY6IEdlbmVzIGRvd24tcmVndWxhdGVkIGR1cmluZyB0cmFuc2l0aW9uIGZyb20gRzIgKG1vZGVyYXRlbHkgZGlmZmVyZW50aWF0ZWQKICB0dW1vciwgaW5mZWN0ZWQgd2l0aCBIQ1YpIHRvIEczIChwb29ybHkgZGlmZmVyZW50aWF0ZWQgdHVtb3IsIGluZmVjdGVkIHdpdGggSENWKSBpbiB0aGUKICBkZXZlbG9wbWVudCBvZiBoZXBhdG9jZWxsdWxhciBjYXJjaW5vbWEuCiogMTUyODg0Nzg6IEdlbmVzIGRvd24tcmVndWxhdGVkIGluIGhlcGF0b2NlbGx1bGFyIGNhcmNpbm9tYSAoSENDKSB3aXRoCiAgZWFybHkgcmVjdXJyZW5jZS4KKiBFbmRvc29tYWwvVmFjdW9sYXIgcGF0aHdheQoqIElrQkEgdmFyaWFudCBsZWFkcyB0byBFREEtSUQKKiBDYW5vbmljYWwgTkYta0IgcGF0aHdheQoqIDE3MjM0NzcwOiBHZW5lcyBpbnZvbHZlZCBpbiBjZWxsIGN5Y2xlIHJlZ3VsYXRpb24gd2hpY2ggd2VyZSB1cC1yZWd1bGF0ZWQgaW4gTUNGLTcgY2VsbHMKICAoYnJlYXN0IGNhbmNlcikgYnkgdHJldGlub2luIChyZXRpbm9pYyBhY2lkKSBbUHViQ2hlbT00NDQ3OTVdLgoqIDE1NzEwMzk2OiBHZW5lcyBkb3duLXJlZ3VsYXRlZCBkdXJpbmcgdHJhbnNpdGlvbiBmcm9tIEwwIChub24tdHVtb3IsIG5vdCBpbmZlY3RlZCB3aXRoIEhDVikKICB0byBMMSAobm9uLXR1bW9yLCBpbmZlY3RlZCB3aXRoIEhDVikgaW4gdGhlIGRldmVsb3BtZW50IG9mIGhlcGF0b2NlbGx1bGFyIGNhcmNpbm9tYS4KKiBNYXR1cmF0aW9uIG9mIFNBUlMtQ29WLTEgbnVjbGVvcHJvdGVpbgoqIElGTiBnYW1tYSBzaWduYWxpbmcgcGF0aHdheQoqIFBpbG9jeXRpYyBhc3Ryb2N5dG9tYQoqIDE3MDcyMzIxOiBHZW5lcyBlbmNvZGluZyB0aGUgTkYta0IgY29yZSBzaWduYWxpbmcgcHJvdGVpbnMuCiogTUFQSzEgKEVSSzIpIGFjdGl2YXRpb24KKiBUTkZSMiBTaWduYWxpbmcgUGF0aHdheQoqIENMRUM3QS9pbmZsYW1tYXNvbWUgcGF0aHdheQoqIFJlZ3VsYXRpb24gb2YgUFRFTiBtUk5BIHRyYW5zbGF0aW9uCiogMTYxNDA5NTU6IEdlbmVzIHVwLXJlZ3VsYXRlZCBzeW5lcmdpc3RpY2FsbHkgaW4gTkI0IGNlbGxzIChhY3V0ZSBwcm9teWVsb2N5dGljIGxldWtlbWlhLAogIEFQTCkgYnkgdHJldGlub2luIGFuZCBOU0M2ODI5OTQgW1B1YkNoZW09NDQ0Nzk1OzM4ODMwNF0uCgojIyMjIENsaW5pY2FsIEM3CgpJbiBjb250cmFzdCwgdGhlIEM3IHNldCBpcyByZWxhdGl2ZWx5IGZvY3VzZWQgb24gdGhlIGltbXVuZSBzeXN0ZW0sCmFuZCBpcyB0aGVyZWZvcmUgbGlrZWx5IHRvIGJlIG9mIGRpcmVjdCBpbnRlcmVzdC4KCmBgYHtyLCBldmFsPUZBTFNFfQp0X2NsaW5pY2FsX2dzdmFfYzcgPC0gc2ltcGxlX2dzdmEoCiAgICB0X2NsaW5pY2FsLAogICAgc2lnbmF0dXJlcyA9IGJyb2FkX2M3LAogICAgbXNpZ194bWwgPSAicmVmZXJlbmNlL21zaWdkYi9tc2lnZGJfdjcuNS4xLnhtbCIsCiAgICBzaWduYXR1cmVfY2F0ZWdvcnkgPSAiYzciKQp0X2NsaW5pY2FsX2dzdmFfYzdfc2lnIDwtIGdldF9zaWdfZ3N2YV9jYXRlZ29yaWVzKAogICAgdF9jbGluaWNhbF9nc3ZhX2M3LAogICAgZXhjZWwgPSAiYW5hbHlzZXMvNF90dW1hY28vR1NWQS90X2NsaW5pY2FsX2dzdmFfYzcueGxzeCIpCmBgYAoKYGBge3J9CnRfY2xpbmljYWxfZ3N2YV9jNyA8LSBzaW1wbGVfZ3N2YSgKICAgIHRfY2xpbmljYWwsIHNpZ25hdHVyZV9jYXRlZ29yeSA9ICJjNyIpCnRfY2xpbmljYWxfZ3N2YV9jN19zaWcgPC0gZ2V0X3NpZ19nc3ZhX2NhdGVnb3JpZXMoCiAgICB0X2NsaW5pY2FsX2dzdmFfYzcsCiAgICBleGNlbCA9ICJhbmFseXNlcy80X3R1bWFjby9HU1ZBL3RfY2xpbmljYWxfZ3N2YV9jNy54bHN4IikKYGBgCgpXaXRoIHRoZSBhYm92ZSBpbiBtaW5kLCBoZXJlIGFyZSBhIGZldyBvZiB0aGUgbW9zdCBoaWdobHkgc2NvcmVkCnBhcGVycy9zZXRzIHdoZW4gc2NvcmluZyB0aGUgZmFpbGVkIHNhbXBsZXM6CgoqIDIxMzU3OTQ1OiBHZW5lcyBwb3NpdGl2ZWx5IGNvcnJlbGF0ZWQgd2l0aCB0aXRlciByZXNwb25zZSBpbmRleCBpbgogIHBlcmlwaGVyYWwgYmxvb2QgbW9ub251Y2xlYXIgY2VsbCBpbiBDYXVjYXNpYW4gbWFsZSBhZHVsdHMgKDE4LTQwKQogIChoaWdoIHJlc3BvbmRlcnMpIGFmdGVyIGV4cG9zdXJlIHRvIEZsdWFyaXgvRmx1dmlyaW4gLCB0aW1lIHBvaW50IDFECiAgYW5kIDNEWS4gQ29tbWVudDogU2lnbmF0dXJlIHByZWRpY3RpdmUgb2YgdGl0ZXIgcmVzcG9uc2UgaW5kZXgKICAoVFJJKS4gRGF5IDEgYW5kIGRheSAzIHZhbHVlcyBhdmVyYWdlZC4KKiAyNzc2NDI1NDogR2VuZXMgbmVnYXRpdmVseSBjb3JyZWxhdGVkIHdpdGggVCBjZWxsIHJlc3BvbnNlcyAobG9uZwogIHRlcm0pIGluIHBlcmlwaGVyYWwgYmxvb2QgbW9ub251Y2xlYXIgY2VsbCBpbiBzZW5pb3JzICg1MC03NSkgYWZ0ZXIKICBleHBvc3VyZSB0byBab3N0YXZheCAsIHRpbWUgcG9pbnQgMUQuIENvbW1lbnQ6IChCKSBOZXR3b3JrIG9mIGdlbmVzCiAgaW5mb3JtYXRpdmUgb2YgbG9uZy10ZXJtIHJlc3BvbnNlcy4KKiAyOTUzNTcxMjogR2VuZXMgZG93bi1yZWd1bGF0ZWQgaW4gYmxvb2QgMWQgdnMgMGhyIGluIGFkdWx0cyAoMTgtNDUpCiAgYWZ0ZXIgZXhwb3N1cmUgdG8gQ041NGdwMTQwIGFkanV2YW50ZWQgd2l0aCBHTEEtQUYgLCB0aW1lIHBvaW50IDFEICwKICBhZG1pbmlzdGVyZWQgaS5tLgoqIDE1Nzg5MDU4OiBHZW5lcyBkb3duLXJlZ3VsYXRlZCBpbiBjb21wYXJpc29uIG9mIG5haXZlIEIgY2VsbHMgdmVyc3VzCiAgZGF5IDAgbW9ub2N5dGVzLgoqIDE1Nzg5MDU4OiBHZW5lcyBkb3duLXJlZ3VsYXRlZCBpbiBjb21wYXJpc29uIG9mIG5haXZlIENEOCBUIGNlbGxzCiAgdmVyc3VzIGRheSAwIG1vbm9jeXRlcy4KKiAxNTc4OTA1ODogR2VuZXMgZG93bi1yZWd1bGF0ZWQgaW4gY29tcGFyaXNvbiBvZiBkZW5kcml0aWMgY2VsbHMgKERDKQogIHZlcnN1cyBtb25vY3l0ZXMuCiogMTU3ODkwNTg6IEdlbmVzIHVwLXJlZ3VsYXRlZCBpbiBjb21wYXJpc29uIG9mIG1vbm9jeXRlcyBjdWx0dXJlZCBmb3IKICAwIGRheXMgdmVyc3VzIHRob3NlIGN1bHR1cmVkIGZvciA3IGRheXMuCiogMjE3NDM0Nzg6IEdlbmVzIHVwLXJlZ3VsYXRlZCBpbiBjb21wYXJpc29uIG9mIG1vbm9jeXRlcyB2ZXJzdXMKICBwbGFzbWFjeXRvaWQgZGVuZHJpdGljIGNlbGxzIChwREMpLgoqIDI3NzY0MjU0OiBHZW5lcyBwb3NpdGl2ZWx5IGNvcnJlbGF0ZWQgd2l0aCBleHBhbnNpb24gb2YgVlpWIHNwZWNpZmljCiAgVCBjZWxscyAoMGQgdG8gcGVhaykgaW4gcGVyaXBoZXJhbCBibG9vZCBtb25vbnVjbGVhciBjZWxsIGluIHNlbmlvcnMKICAoNTAtNzUpIGFmdGVyIGV4cG9zdXJlIHRvIFpvc3RhdmF4ICwgdGltZSBwb2ludCAxRAoqIDE1Nzg5MDU4OiBHZW5lcyBkb3duLXJlZ3VsYXRlZCBpbiBjb21wYXJpc29uIG9mIG5haXZlIENENAogIFtHZW5lSUQ9OTIwXSBUIGNlbGxzIHZlcnN1cyBkYXkgMCBtb25vY3l0ZXMuCiogMjQ4MDgzNjU6IEdlbmVzIHVwLXJlZ3VsYXRlZCBpbiBkZW5kcml0aWMgY2VsbHMgaW5mZWN0ZWQgYnkKICBMZWlzaG1hbmlhIG1ham9yOiAyaCB2ZXJzdXMgMjRoLgoqIDE4Mjc1ODMxOiBHZW5lcyBkb3duLXJlZ3VsYXRlZCBpbiBjb21wYXJpc29uIG9mIHN5c3RlbWljIGx1cHVzCiAgZXJ5dGhlbWF0b3N1cyBCIGNlbGxzIHZlcnN1cyBzeXN0ZW1pYyBsdXB1cyBlcnl0aHJvbWF0b3N1cyBteWVsb2lkCiAgY2VsbHMuCiogMjE3NDM0Nzg6IEdlbmVzIHVwLXJlZ3VsYXRlZCBpbiBjb21wYXJpc29uIG9mIG1vbm9jeXRlcyBmcm9tCiAgaW5mbHVlbnphIHZhY2NpbmVlIGF0IGRheSA3IHBvc3QtdmFjY2luYXRpb24gdmVyc3VzIHBsYXNtYWN5dG9pZAogIGRlbmRyaXRpYyBjZWxscyAobURDKSBhdCBkYXkgNyBwb3N0LXZhY2NpbmF0aW9uLgoqIDE1Nzg5MDU4OiBHZW5lcyBkb3duLXJlZ3VsYXRlZCBpbiBjb21wYXJpc29uIG9mIG5haXZlIENENAogIFtHZW5lSUQ9OTIwXSBDRDggVCBjZWxscyB2ZXJzdXMgbW9ub2N5dGVzIGN1bHR1cmVkIGZvciAwIGRheXMuCiogMjE3NDM0Nzg6IEdlbmVzIGRvd24tcmVndWxhdGVkIGluIHBlcmlwaGVyYWwgYmxvb2QgbW9ub251Y2xlYXIgY2VsbAogIDdkIHZzIDBkIGluIGFkdWx0cyAoMTgtNTApIGFmdGVyIGV4cG9zdXJlIHRvIEZsdU1pc3QgLCB0aW1lIHBvaW50CiAgN0QuIENvbW1lbnQ6IE1vbGVjdWxhciBzaWduYXR1cmUgaW5kdWNlZCBieSBMQUlWIHZhY2NpbmF0aW9uLiAoYSkKICBJbnRlcmZlcm9uIChJRk4pLXJlbGF0ZWQgZ2VuZXMgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGFmdGVyIExBSVYKICB2YWNjaW5hdGlvbgoqIDI3NzY0MjU0OiBHZW5lcyBwb3NpdGl2ZWx5IGNvcnJlbGF0ZWQgd2l0aCBjb250cmFjdGlvbiBvZiBWWlYKICBzcGVjaWZpYyBUIGNlbGxzIChwZWFrIHRvIDI4ZCkgaW4gcGVyaXBoZXJhbCBibG9vZCBtb25vbnVjbGVhciBjZWxsCiAgaW4gc2VuaW9ycyAoNTAtNzUpIGFmdGVyIGV4cG9zdXJlIHRvIFpvc3RhdmF4ICwgdGltZSBwb2ludCAxRAoqIDI1NTk2ODE5OiBHZW5lcyBkb3duLXJlZ3VsYXRlZCBpbiBwZXJpcGhlcmFsIGJsb29kIG1vbm9udWNsZWFyIGNlbGwKICAyZCB2cyAwZCBpbiBzZW5pb3JzICg3MCspIChub25yZXNwb25kZXIpIGFmdGVyIGV4cG9zdXJlIHRvCiAgSW5hY3RpdmF0ZWQgaW5mbHVlbnphIHZhY2NpbmUgLCB0aW1lIHBvaW50IDJECiogMjE3NDM0Nzg6IEdlbmVzIHVwLXJlZ3VsYXRlZCBpbiBjb21wYXJpc29uIG9mIG1vbm9jeXRlcyBmcm9tCiAgaW5mbHVlbnphIHZhY2NpbmVlIGF0IGRheSA3IHBvc3QtdmFjY2luYXRpb24gdmVyc3VzIG15ZWxvaWQKICBkZW5kcml0aWMgY2VsbHMgYXQgZGF5IDcgcG9zdC12YWNjaW5hdGlvbi4KKiAyNDgwODM2NTogR2VuZXMgdXAtcmVndWxhdGVkIGluIGRlbmRyaXRpYyBjZWxsczogdW50cmVhdGVkIHZlcnN1cwogIDI0aCBhZnRlciBpbmZlY3Rpb24gb2YgTGVpc2htYW5pYSBtYWpvci4KKiAyMTc0MzQ3ODogR2VuZXMgZG93bi1yZWd1bGF0ZWQgaW4gY29tcGFyaXNvbiBvZiBCIGNlbGxzIHZlcnN1cwogIG1vbm9jeXRlcy4KKiAxNzEwNTgyMTogR2VuZXMgZG93bi1yZWd1bGF0ZWQgaW4gY29tcGFyaXNvbiBvZiBwZXJpcGhlcmFsIGJsb29kCiAgbW9ub251Y2xlYXIgY2VsbHMgKFBCTUMpIGZyb20gaGVhbHRoeSBkb25vcnMgdmVyc3VzIFBCTUMgZnJvbQogIHBhdGllbnRzIHdpdGggYWN1dGUgUy4gYXVyZXVzIGluZmVjdGlvbi4KKiAyMTc0MzQ3ODogR2VuZXMgZG93bi1yZWd1bGF0ZWQgaW4gY29tcGFyaXNvbiBvZiBCIGNlbGxzIGZyb20KICBpbmZsdWVuemEgdmFjY2luZWUgYXQgZGF5IDcgdmVyc3VzIG1vbm9jeXRlcyBmcm9tIGluZmx1ZW56YSB2YWNjaW5lZQogIGF0IGRheSA3LgoqIDE4Mjc1ODMxOiBHZW5lcyBkb3duLXJlZ3VsYXRlZCBpbiBjb21wYXJpc29uIG9mIHN5c3RlbWljIGx1cHVzCiAgZXJ5dGhlbWF0b3N1cyBDRDQgW0dlbmVJRD05MjBdIFQgY2VsbHMgdmVyc3VzIHN5c3RlbWljIGx1cHVzCiAgZXJ5dGhlbWF0b3N1cyBteWVsb2lkIGNlbGxzLgoqIDE1Nzg5MDU4OiBHZW5lcyBkb3duLXJlZ3VsYXRlZCBpbiBjb21wYXJpc29uIG9mIG5haXZlIEIgY2VsbHMgdmVyc3VzCiAgdW5zdGltdWxhdGVkIG5ldXRyb3BoaWxzLgoqIDE5MDQ3NDQwOiBHZW5lcyB1cC1yZWd1bGF0ZWQgaW4gcGVyaXBoZXJhbCBibG9vZCBtb25vbnVjbGVhciBjZWxsCiAgMjhkIHZzIDBkIGluIHVua25vd24gYWZ0ZXIgZXhwb3N1cmUgdG8gWUYtVmF4L1N0YW1hcmlsICwgdGltZSBwb2ludAogIDI4RAoqIDIxMDkzMzIxOiBHZW5lcyB1cC1yZWd1bGF0ZWQgaW4gYm9uZSBtYXJyb3ctZGVyaXZlZCBtYWNyb3BoYWdlcyB3aXRoCiAgU1RBVDYgW0dlbmVJRD02Nzc4XSBrbm9ja291dCB0cmVhdGVkIHdpdGgKICByb3NpZ2xpdGF6b25lIFtQdWJDaGVtPTc3OTk5XTogY29udHJvbCB2ZXJzdXMgSUw0IFtHZW5lSUQ9MzU2NV0uCiogMjE3NDM0Nzg6IEdlbmVzIHVwLXJlZ3VsYXRlZCBpbiBwZXJpcGhlcmFsIGJsb29kIG1vbm9udWNsZWFyIGNlbGwgM2QKICB2cyAwZCBpbiBhZHVsdHMgKDE4LTUwKSBhZnRlciBleHBvc3VyZSB0byBGbHVNaXN0ICwgdGltZSBwb2ludAogIDNELiBDb21tZW50OiBNb2xlY3VsYXIgc2lnbmF0dXJlIGluZHVjZWQgYnkgTEFJViB2YWNjaW5hdGlvbi4gKGEpCiAgSW50ZXJmZXJvbiAoSUZOKS1yZWxhdGVkIGdlbmVzIGRpZmZlcmVudGlhbGx5IGV4cHJlc3NlZCBhZnRlciBMQUlWCiAgdmFjY2luYXRpb24KKiAxODI5MjU3OTogR2VuZXMgZG93bi1yZWd1bGF0ZWQgaW4gY29tcGFyaXNvbiBvZiBtb25vY3l0ZXMgdHJlYXRlZAogIHdpdGggYW50aS1UUkVNMSBbR2VuZUlEPTU0MjEwXSB2ZXJzdXMgbW9ub2N5dGVzIHRyZWF0ZWQgd2l0aCBjb250cm9sCiAgSWdHLgoqIDIxNzQzNDc4OiBHZW5lcyBkb3duLXJlZ3VsYXRlZCBpbiBjb21wYXJpc29uIG9mIHBsYXNtYWN5dG9pZAogIGRlbmRyaXRpYyBjZWxscyAoREMpIHZlcnN1cyBteWVsb2lkIERDcy4KKiAyMjk4NjQ1MDogR2VuZXMgdXAtcmVndWxhdGVkIGluIGNvbXBhcmlzb24gb2YgY29udHJvbAogIHBvbHltb3JwaG9udWNsZWFyIGxldWtvY3l0ZXMgKFBNTikgYXQgMTIgaCB2ZXJzdXMgUE1OIHRyZWF0ZWQgd2l0aAogIEYuIHR1bGFyZW5zaXMgdmFjY2luZSBhdCAyNCBoLgoqIDI4MDk5NDg1OiBHZW5lcyB1cC1yZWd1bGF0ZWQgaW4gQiBjZWxsIDFkIHZzIDBkIGluIGFkdWx0cyAoMTgtNDkpCiAgYWZ0ZXIgZXhwb3N1cmUgdG8gaW5hY3RpdmF0ZWQgbW9ub3ZhbGVudCBpbmZsdWVuemEKICBBL0luZG9uZXNpYS8wNS8yMDA1IEg1TjEgc3BsaXQtdmlydXMgdmFjY2luZSAsIHRpbWUgcG9pbnQgMUQgLAogIGFkbWluaXN0ZXJlZCBpLm0uCiogMTgyOTI1Nzk6IEdlbmVzIGRvd24tcmVndWxhdGVkIGluIGNvbXBhcmlzb24gb2YgbW9ub2N5dGVzIHRyZWF0ZWQKICB3aXRoIGFudGktVFJFTTEgW0dlbmVJRD01NDIxMF0gdmVyc3VzIHVudHJlYXRlZCBtb25vY3l0ZXMuCiogMTcxMDU4MjE6IEdlbmVzIHVwLXJlZ3VsYXRlZCBpbiBjb21wYXJpc29uIG9mIHBlcmlwaGVyYWwgYmxvb2QKICBtb25vbnVjbGVhciBjZWxscyAoUEJNQykgZnJvbSBwYXRpZW50cyB3aXRoIGFjdXRlIGluZmx1ZW56YQogIGluZmVjdGlvbiB2ZXJzdXMgUEJNQyBmcm9tIHBhdGllbnRzIHdpdGggYWN1dGUgRS4gY29saSBpbmZlY3Rpb24uCiogMjEwOTMzMjE6IEdlbmVzIHVwLXJlZ3VsYXRlZCBpbiBib25lIG1hcnJvdy1kZXJpdmVkIG1hY3JvcGhhZ2VzIHdpdGgKICBTVEFUNiBbR2VuZUlEPTY3NzhdIGtub2Nrb3V0IHRyZWF0ZWQgd2l0aCBJTDQgW0dlbmVJRD0zNTY1XTogY29udHJvbAogIHZlcnN1cyByb3NpZ2xpdGF6b25lIFtQdWJDaGVtPTc3OTk5XS4KKiAyMTc0MzQ3ODogR2VuZXMgdXAtcmVndWxhdGVkIGluIGNvbXBhcmlzb24gb2YgbW9ub2N5dGVzIHZlcnN1cwogIG15ZWxvaWQgZGVuZHJpdGljIGNlbGxzIChtREMpLgoqIDIxNzQzNDc4OiBHZW5lcyB1cC1yZWd1bGF0ZWQgaW4gcGVyaXBoZXJhbCBibG9vZCBtb25vbnVjbGVhciBjZWxsIDdkCiAgdnMgMGQgaW4gYWR1bHRzICgxOC01MCkgYWZ0ZXIgZXhwb3N1cmUgdG8gRmx1TWlzdCAsIHRpbWUgcG9pbnQKICA3RC4gQ29tbWVudDogTW9sZWN1bGFyIHNpZ25hdHVyZSBpbmR1Y2VkIGJ5IExBSVYgdmFjY2luYXRpb24uIChhKQogIEludGVyZmVyb24gKElGTiktcmVsYXRlZCBnZW5lcyBkaWZmZXJlbnRpYWxseSBleHByZXNzZWQgYWZ0ZXIgTEFJVgogIHZhY2NpbmF0aW9uCiogMTc1OTUyNDI6IEdlbmVzIHVwLXJlZ3VsYXRlZCBpbiBjb21wYXJpc29uIG9mIHBlcmlwaGVyYWwgYmxvb2QKICBtb25vbnVjbGVhciBjZWxscyAoUEJNQykgZnJvbSBoZWFsdGh5IGRvbm9ycyB2ZXJzdXMgUEJNQ3MgZnJvbQogIHBhdGllbnRzIHdpdGggdHlwZSAxIGRpYWJldGVzIGF0IDQgIG1vbnRoIGFmdGVyIHRoZSBkaWFnbm9zaXMuCiogMTY0NzQzOTU6IEdlbmVzIHVwLXJlZ3VsYXRlZCBpbiBjb21wYXJpc29uIG9mIG5ldXRyb3BoaWxzIHZlcnN1cwogIGNlbnRyYWwgbWVtb3J5IENENCBbR2VuZUlEPTkyMF0gVCBjZWxscy4KKiAyMjk4NjQ1MDogR2VuZXMgdXAtcmVndWxhdGVkIGluIGNvbXBhcmlzb24gb2YgY29udHJvbAogIHBvbHltb3JwaG9udWNsZWFyIGxldWtvY3l0ZXMgKFBNTikgYXQgMCBoIHZlcnN1cyBQTU4gdHJlYXRlZCB3aXRoCiAgRi4gdHVsYXJlbnNpcyB2YWNjaW5lIGF0IDI0IGguCiogMjE3NDM0Nzg6IEdlbmVzIGRvd24tcmVndWxhdGVkIGluIGNvbXBhcmlzb24gb2YgcGxhc21hY3l0b2lkCiAgZGVuZHJpdGljIGNlbGxzIChEQykgZnJvbSBpbmZsdWVuemEgdmFjY2luZWUgYXQgZGF5IDcKICBwb3N0LXZhY2NpbmF0aW9uIHZlcnN1cyBteWVsb2lkIERDcyBhdCBkYXkgNyBwb3N0LXZhY2NpbmF0aW9uLgoKIyMjIyBDbGluaWNhbCBICgpUaGUgSCBzZXQgaXMgYm90aCBtdWNoIGxhcmdlciBhbmQgc21hbGxlciwgaXQgaXMgY29tcHJpc2VkIG9mIGp1c3QgNTAKc2V0cywgYnV0IHRoZXkgaGF2ZSBtYW55IG1vcmUgZ2VuZXMgYXNzb2NpYXRlZCB3aXRoIHRoZW0uCgpgYGB7ciwgZXZhbD1GQUxTRX0KdF9jbGluaWNhbF9nc3ZhX2ggPC0gc2ltcGxlX2dzdmEoCiAgICB0X2NsaW5pY2FsLAogICAgc2lnbmF0dXJlcyA9IGJyb2FkX2gsCiAgICBtc2lnX3htbCA9ICJyZWZlcmVuY2UvbXNpZ2RiL21zaWdkYl92Ny41LjEueG1sIiwKICAgIHNpZ25hdHVyZV9jYXRlZ29yeT0iaCIpCnRfY2xpbmljYWxfZ3N2YV9oX3NpZyA8LSBnZXRfc2lnX2dzdmFfY2F0ZWdvcmllcygKICAgIHRfY2xpbmljYWxfZ3N2YV9oLAogICAgZXhjZWwgPSAiYW5hbHlzZXMvNF90dW1hY28vR1NWQS90X2NsaW5pY2FsX2dzdmFfaC54bHN4IikKYGBgCgpgYGB7cn0KdF9jbGluaWNhbF9nc3ZhX2ggPC0gc2ltcGxlX2dzdmEoCiAgICB0X2NsaW5pY2FsLCBzaWduYXR1cmVfY2F0ZWdvcnkgPSAiaCIpCnRfY2xpbmljYWxfZ3N2YV9oX3NpZyA8LSBnZXRfc2lnX2dzdmFfY2F0ZWdvcmllcygKICAgIHRfY2xpbmljYWxfZ3N2YV9oLAogICAgZXhjZWwgPSAiYW5hbHlzZXMvNF90dW1hY28vR1NWQS90X2NsaW5pY2FsX2dzdmFfaC54bHN4IikKYGBgCgoqIEdlbmVzIHVwLXJlZ3VsYXRlZCBpbiByZXNwb25zZSB0byBhbHBoYSBpbnRlcmZlcm9uIHByb3RlaW5zLgoqIEdlbmVzIGludm9sdmVkIGluIHByb3RlaW4gc2VjcmV0aW9uIHBhdGh3YXkuCiogR2VuZXMgdXAtcmVndWxhdGVkIGluIHJlc3BvbnNlIHRvIElGTkcgW0dlbmVJRD0zNDU4XS4KKiBBIHN1Ymdyb3VwIG9mIGdlbmVzIHJlZ3VsYXRlZCBieSBNWUMgLSB2ZXJzaW9uIDEgKHYxKS4KKiBHZW5lcyB1cC1yZWd1bGF0ZWQgYnkgYWN0aXZhdGlvbiBvZiB0aGUgUEkzSy9BS1QvbVRPUiBwYXRod2F5LgoqIEdlbmVzIHVwLXJlZ3VsYXRlZCBkdXJpbmcgdW5mb2xkZWQgcHJvdGVpbiByZXNwb25zZSwgYSBjZWxsdWxhciBzdHJlc3MKICByZXNwb25zZSByZWxhdGVkIHRvIHRoZSBlbmRvcGxhc21pYyByZXRpY3VsdW0uCiogR2VuZXMgdXAtcmVndWxhdGVkIGluIHJlc3BvbnNlIHRvIFRHRkIxIFtHZW5lSUQ9NzA0MF0uCiogR2VuZXMgdXAtcmVndWxhdGVkIGJ5IHJlYWN0aXZlIG94aWdlbiBzcGVjaWVzIChST1MpLgoqIEdlbmVzIGltcG9ydGFudCBmb3IgbWl0b3RpYyBzcGluZGxlIGFzc2VtYmx5LgoqIEdlbmVzIHJlZ3VsYXRlZCBieSBORi1rQiBpbiByZXNwb25zZSB0byBUTkYgW0dlbmVJRD03MTI0XS4KKiBHZW5lcyB1cC1yZWd1bGF0ZWQgdGhyb3VnaCBhY3RpdmF0aW9uIG9mIG1UT1JDMSBjb21wbGV4LgoqIEdlbmVzIGVuY29kaW5nIHByb3RlaW5zIGludm9sdmVkIGluIG94aWRhdGl2ZSBwaG9zcGhvcnlsYXRpb24uCiogR2VuZXMgZGVmaW5pbmcgcmVzcG9uc2UgdG8gYW5kcm9nZW5zLgoqIEdlbmVzIG1lZGlhdGluZyBwcm9ncmFtbWVkIGNlbGwgZGVhdGggKGFwb3B0b3NpcykgYnkgYWN0aXZhdGlvbiBvZgogIGNhc3Bhc2VzLgoqIEdlbmVzIHVwLXJlZ3VsYXRlZCBieSBJTDYgW0dlbmVJRD0zNTY5XSB2aWEgU1RBVDMgW0dlbmVJRD02Nzc0XSwgZS5nLiwKICBkdXJpbmcgYWN1dGUgcGhhc2UgcmVzcG9uc2UuCiogR2VuZXMgaW52b2x2ZWQgaW4gcDUzIHBhdGh3YXlzIGFuZCBuZXR3b3Jrcy4KCiMjIyMgVHVtYWNvIEJpb3BzaWVzIGMyCgpgYGB7ciwgZXZhbD1GQUxTRX0KdF9iaW9wc3lfZ3N2YV9jMiA8LSBzaW1wbGVfZ3N2YSgKICAgIHRfYmlvcHNpZXMsCiAgICBzaWduYXR1cmVzID0gYnJvYWRfYzIsCiAgICBtc2lnX3htbCA9ICJyZWZlcmVuY2UvbXNpZ2RiL21zaWdkYl92Ny41LjEueG1sIiwKICAgIHNpZ25hdHVyZV9jYXRlZ29yeT0iYzIiKQp0X2Jpb3BzeV9nc3ZhX2MyX3NpZyA8LSBnZXRfc2lnX2dzdmFfY2F0ZWdvcmllcygKICAgIHRfYmlvcHN5X2dzdmFfYzIsCiAgICBleGNlbCA9ICJhbmFseXNlcy80X3R1bWFjby9HU1ZBL3RfYmlvcHN5X2dzdmFfYzIueGxzeCIpCmBgYAoKYGBge3J9CnRfYmlvcHN5X2dzdmFfYzIgPC0gc2ltcGxlX2dzdmEoCiAgICB0X2Jpb3BzaWVzLCBzaWduYXR1cmVfY2F0ZWdvcnkgPSAiYzIiKQp0X2Jpb3BzeV9nc3ZhX2MyX3NpZyA8LSBnZXRfc2lnX2dzdmFfY2F0ZWdvcmllcygKICAgIHRfYmlvcHN5X2dzdmFfYzIsCiAgICBleGNlbCA9ICJhbmFseXNlcy80X3R1bWFjby9HU1ZBL3RfYmlvcHN5X2dzdmFfYzIueGxzeCIpCmBgYAoKKiAxNzQ0MDE2NTogUHJvdGVpbnMgd2l0aCByZWR1Y2VkIGV4cHJlc3Npb24gaW4gbXVsaWduYW50IGdsaW9tYSBjZWxsCiAgbGluZSAoQTE3Mikgd2hpY2ggYmVhcnMgbG9zcyBvZiBoZXRlcm96eWdvc2l0eSAoTE9IKSBpbiB0aGUgMXAKICByZWdpb24uCiogMTU3MTAzOTY6IEdlbmVzIGRvd24tcmVndWxhdGVkIGR1cmluZyB0cmFuc2l0aW9uIGZyb20gTDAgKG5vbi10dW1vciwKICBub3QgaW5mZWN0ZWQgd2l0aCBIQ1YpIHRvIEwxIChub24tdHVtb3IsIGluZmVjdGVkIHdpdGggSENWKSBpbiB0aGUKICBkZXZlbG9wbWVudCBvZiBoZXBhdG9jZWxsdWxhciBjYXJjaW5vbWEuCiogTWFjcm9waGFnZSBtYXJrZXJzCiogMTgyODU0NTk6IFByb3RlaW5zIHNpZ25pZmljYW50bHkgaW5kdWNlZCBieSBveGlkYXRpdmUgc3RyZXNzCiAgKGh5ZHJvZ2VuIHBlcm94aWRlIFtQdWJDaGVtPTc4NF0gaW4gNzg2LU8gY2VsbHMgKHJlbmFsIGNsZWFyIGNlbGwKICBjYXJjaW5vbWEsIFJDQykgZXhwcmVzc2luZyBWSEwgW0dlbmVJRD03NDI4XS4KKiBJTDIyIFNvbHVibGUgUmVjZXB0b3IgU2lnbmFsaW5nIFBhdGh3YXkKKiBNYXR1cmF0aW9uIG9mIFNBUlMtQ29WLTEgc3Bpa2UgcHJvdGVpbgoqIDE2NDI0MDE0OiBHZW5lcyBmcm9tIHRoZSAxMnAgcmVnaW9uIHRoYXQgd2VyZSB1cC1yZWd1bGF0ZWQgaW4KICBjaG9yaW9jYXJjaW5vbWEgY2VsbHMgY29tcGFyZWQgdG8gbm9ybWFsIHRlc3Rpcy4KKiBVcHRha2UgYW5kIGZ1bmN0aW9uIG9mIGRpcGh0aGVyaWEgdG94aW4KKiBMY2sgYW5kIEZ5biB0eXJvc2luZSBraW5hc2VzIGluIGluaXRpYXRpb24gb2YgVENSIEFjdGl2YXRpb24KKiBUeXBlIEkgaGVtaWRlc21vc29tZSBhc3NlbWJseQoqIDEyNjE4MDA3OiBHZW5lcyBkb3duLXJlZ3VsYXRlZCBhZnRlciBoZWF0IHNob2NrIGluIHBlcmlwaGVyYWwKICBseW1wb2N5dGVzIGZyb20gb2xkIGRvbm9ycywgY29tcGFyZWQgdG8gdGhvc2UgZnJvbSB0aGUgeW91bmcgb25lcy4KKiBTdGF0MyBTaWduYWxpbmcgUGF0aHdheQoqIE5lZiBhbmQgc2lnbmFsIHRyYW5zZHVjdGlvbgoqIFQgSGVscGVyIENlbGwgU3VyZmFjZSBNb2xlY3VsZXMKKiBMUlIgRkxJSS1pbnRlcmFjdGluZyBwcm90ZWluIDEgKExSUkZJUDEpIGFjdGl2YXRlcyB0eXBlIEkgSUZOIHByb2R1Y3Rpb24KKiBFbmRvc29tYWwvVmFjdW9sYXIgcGF0aHdheQoqIFQgQ3l0b3RveGljIENlbGwgU3VyZmFjZSBNb2xlY3VsZXMKKiBGb2xkaW5nIG9mIGFjdGluIGJ5IENDVC9UcmlDCiogQ1RMIG1lZGlhdGVkIGltbXVuZSByZXNwb25zZSBhZ2FpbnN0IHRhcmdldCBjZWxscwoqIFBELTEgc2lnbmFsaW5nCiogREV4L0gtYm94IGhlbGljYXNlcyBhY3RpdmF0ZSB0eXBlIEkgSUZOIGFuZCBpbmZsYW1tYXRvcnkgY3l0b2tpbmVzIHByb2R1Y3Rpb24KKiAxNjE0MDk1NTogR2VuZXMgdXAtcmVndWxhdGVkIHN5bmVyZ2lzdGljYWxseSBpbiBOQjQgY2VsbHMgKGFjdXRlCiAgcHJvbXllbG9jeXRpYyBsZXVrZW1pYSwgQVBMKSBieSB0cmV0aW5vaW4gYW5kIE5TQzY4Mjk5NAogIFtQdWJDaGVtPTQ0NDc5NTszODgzMDRdLgoqIDE1NzEwMzk2OiBHZW5lcyBkb3duLXJlZ3VsYXRlZCBkdXJpbmcgdHJhbnNpdGlvbiBmcm9tIEcyIChtb2RlcmF0ZWx5CiAgZGlmZmVyZW50aWF0ZWQgdHVtb3IsIGluZmVjdGVkIHdpdGggSENWKSB0byBHMyAocG9vcmx5CiAgZGlmZmVyZW50aWF0ZWQgdHVtb3IsIGluZmVjdGVkIHdpdGggSENWKSBpbiB0aGUgZGV2ZWxvcG1lbnQgb2YKICBoZXBhdG9jZWxsdWxhciBjYXJjaW5vbWEuCiogSW50ZXJsZXVraW4tNiBzaWduYWxpbmcKKiAxODc1NzQzMDogSW1tdW5lIHJlc3BvbnNlIGdlbmVzIHVwLXJlZ3VsYXRlZCBpbiB6ZW5vZ3JhZnQgdHVtb3JzCiAgZm9ybWVkIGJ5IFNOVS02MDEgY2VsbHMgKGdhc3RyaWMgY2FuY2VyKSBtYWRlIHRvIGV4cHJlc3MgTFJSQzNCCiAgW0dlbmVJRD0xMTYxMzVdLgoqIFRDQSBjeWNsZSBudXRyaWVudCB1c2UgYW5kIGludmFzaXZlbmVzcyBvZiBvdmFyaWFuIGNhbmNlcgoqIDE4MjQ1NDc3OiBHZW5lcyBpbiB0aGUgZ3JlZW4gY2x1c3RlciBvZiBwcm90ZWluIGtpbmFzZXMKICBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuIGx1bWluYWwgQSBhbmQgYmFzYWwgYnJlYXN0IGNhbmNlciBzdWJ0eXBlcy4KKiAyMDMwODMyMzogUHJvdGVpbnMgaWRlbnRpZmllZCBieSBtYXNzIHNwZWN0cm9tZXRyeSBpbiBjb21wbGV4ZXMgY29udGFpbmluZyBBTEtCSDggW0dlbmVJRD05MTgwMV0uCiogQ3ljbGluZyBvZiBSYW4gaW4gbnVjbGVvY3l0b3BsYXNtaWMgdHJhbnNwb3J0CiogQWN0aXZhdGlvbiBvZiB0aGUgbVJOQSB1cG9uIGJpbmRpbmcgb2YgdGhlIGNhcC1iaW5kaW5nIGNvbXBsZXggYW5kCiAgZUlGcywgYW5kIHN1YnNlcXVlbnQgYmluZGluZyB0byA0M1MKKiAxODQ1MTE0NzogR2VuZXMgZG93bi1yZWd1bGF0ZWQgaW4gSFNBL2MgYW5kIEtZU0UxNDAgY2VsbHMKICAoZXNvcGhhZ2VhbCBzcXVhbW91cyBjZWxsIGNhcmNpbm9tYSwgRVNDQykgYWZ0ZXIga25vY2tkb3duIG9mIFBUVEcxCiAgW0dlbmVJRD05MjMyXSBieSBSTkFpLgoqIDE3MTg3NDMyOiBEb3duLXJlZ3VsYXRlZCBnZW5lcyBpbiBoZXBhdG9jZWxsdWxhciBjYXJjaW5vbWEgKEhDQykKICBzdWJjbGFzcyBHNSwgZGVmaW5lZCBieSB1bnN1cGVydmlzZWQgY2x1c3RlcmluZy4KKiAxNTYwODY4ODogQ2x1c3RlciA0OiBnZW5lcyB3aXRoIHNpbWlsYXIgZXhwcmVzc2lvbiBwcm9maWxlcyBhY3Jvc3MKICBmb2xsaWN1bGFyIHRoeXJvaWQgY2FyY2lub21hIChGVEMpIHNhbXBsZXMuCiogQmFzaWMgTWVjaGFuaXNtcyBvZiBTVU1PeWxhdGlvbgoqIElGTiBnYW1tYSBzaWduYWxpbmcgcGF0aHdheQoqIDE1NTMxOTE3OiBTZWxlY3RlZCBkb3duLXJlZ3VsYXRlZCBnZW5lcyBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuIFdpbG1zCiAgdHVtb3JzIG9mIGRpZmZlcmVudCBoaXN0b2xvZ2ljYWwgdHlwZXM6IGFuYXBsYXN0aWMgdnMgZmF2b3JhYmxlCiAgaGlzdG9sb2d5LgoqIDE1NjA4Njg4OiBDbHVzdGVyIDM6IGdlbmVzIHdpdGggc2ltaWxhciBleHByZXNzaW9uIHByb2ZpbGVzIGFjcm9zcwogIGZvbGxpY3VsYXIgdGh5cm9yaWQgY2FyY2lub21hIChGVEMpIHNhbXBsZXM7IGdlbmVzIGluIHRoaXMgY2x1c3RlcgogIGNvcnJlbGF0ZWQgd2VsbCB3aXRoIHRoZSBwcmVzZW5jZSBvZiBQQVg4LVBQQVJHIFtHZW5lSUQ9Nzg0OTs1NDY4XQogIGZ1c2lvbiBwcm90ZWluLgoqIEludGVybmFsIFJpYm9zb21lIGVudHJ5IHBhdGh3YXkKKiAxMTc3MzU5NjogSG91c2VrZWVwaW5nIGdlbmVzIGlkZW50aWZpZWQgYXMgZXhwcmVzc2VkIGFjcm9zcyAxOSBub3JtYWwgdGlzc3Vlcy4KKiAxNjkwOTA5OTogR2VuZXMgZG93bi1yZWd1bGF0ZWQgaW4gYWR1bHQgVC1jZWxsIGxldWtlbWlhIChBVEwpLAogIGNocm9uaWMgdnMgYWN1dGUgY2xpbmljYWwgY29uZGl0aW9uLgoqIDE3NDg2MDgyOiBUaGUgJ1RFQiBwcm9maWxlIGdlbmVzJzogZG93bi1yZWd1bGF0ZWQgZHVyaW5nIHB1YmVydGFsCiAgbWFtbWFyeSBnbGFuZCBkZXZlbG9wbWVudCBzcGVjaWZpY2FsbHkgaW4gdGhlIFRFQiAodGVybWluYWwgZW5kIGJ1ZCkKICBzdHJ1Y3R1cmVzLgoqIENMRUM3QS9pbmZsYW1tYXNvbWUgcGF0aHdheQoqIE5lZiBNZWRpYXRlZCBDRDQgRG93bi1yZWd1bGF0aW9uCiogMTU2MDg2ODg6IEdlbmVzIGRvd24tcmVndWxhdGVkIGluIGZvbGxpY3VsYXIgdGh5cm9pZCBjYXJjaW5vbWEgKEZUQykKICBzYW1wbGVzIHRoYXQgYmVhciBQQVg4LVBQQVJHIFtHZW5lSUQ9Nzg0OTs1NDY4XSBmdXNpb24gcHJvdGVpbi4KKiBTVU1PIGlzIGNvbmp1Z2F0ZWQgdG8gRTEgKFVCQTI6U0FFMSkKKiAxODcyNDM3ODogR2VuZXMgdXAtcmVndWxhdGVkIGluIE1DRjctQURSIGNlbGwgbGluZSAoYnJlYXN0IGNhbmNlcikKICByZXNpc3RhbnQgdG8gZG9jZXRheGVsIFtQdWJDaGVtPTE0ODEyNF0uCiogTUFQSzEgKEVSSzIpIGFjdGl2YXRpb24KKiAxNjc2MDQ0MjogRG93bi1yZWd1bGF0ZWQgZ2VuZXMgY29uc3RpdHV0aW5nIHRoZSBtb2xlY3VsYXIgc2lnbmF0dXJlIG9mIEJ1cmtpdHQgJ3MgbHltcGhvbWEuCiogQW50aWdlbiBQcm9jZXNzaW5nIGFuZCBQcmVzZW50YXRpb24KKiAxNTI5NTA0NjogR2VuZXMgZGlzdGluZ3Vpc2hpbmcgYXNwYXJhZ2luYXNlIHJlc2lzdGFudCBhbmQgc2Vuc2l0aXZlCiAgQi1saW5lYWdlIEFMTDsgaGVyZSAtIGdlbmVzIHVwLXJlZ3VsYXRlZCBpbiB0aGUgZHJ1ZyByZXNpc3RhbnQKICBzYW1wbGVzLgoKIyMjIyBUdW1hY28gQmlvcHNpZXMgYzcKCmBgYHtyLCBldmFsPUZBTFNFfQp0X2Jpb3BzeV9nc3ZhX2M3IDwtIHNpbXBsZV9nc3ZhKAogICAgdF9iaW9wc2llcywKICAgIHNpZ25hdHVyZXMgPSBicm9hZF9jNywKICAgIG1zaWdfeG1sID0gInJlZmVyZW5jZS9tc2lnZGIvbXNpZ2RiX3Y3LjUuMS54bWwiLAogICAgc2lnbmF0dXJlX2NhdGVnb3J5ID0gImM3IikKdF9iaW9wc3lfZ3N2YV9jN19zaWcgPC0gZ2V0X3NpZ19nc3ZhX2NhdGVnb3JpZXMoCiAgICB0X2Jpb3BzeV9nc3ZhX2M3LAogICAgZXhjZWwgPSAiYW5hbHlzZXMvNF90dW1hY28vR1NWQS90X2Jpb3BzeV9nc3ZhX2M3Lnhsc3giKQpgYGAKCmBgYHtyfQp0X2Jpb3BzeV9nc3ZhX2M3IDwtIHNpbXBsZV9nc3ZhKAogICAgdF9iaW9wc2llcywgc2lnbmF0dXJlX2NhdGVnb3J5ID0gImM3IikKdF9iaW9wc3lfZ3N2YV9jN19zaWcgPC0gZ2V0X3NpZ19nc3ZhX2NhdGVnb3JpZXMoCiAgICB0X2Jpb3BzeV9nc3ZhX2M3LAogICAgZXhjZWwgPSAiYW5hbHlzZXMvNF90dW1hY28vR1NWQS90X2Jpb3BzeV9nc3ZhX2M3Lnhsc3giKQpgYGAKCiogMjgwOTk0ODU6IEdlbmVzIHVwLXJlZ3VsYXRlZCBpbiBCIGNlbGwgMWQgdnMgMGQgaW4gYWR1bHRzICgxOC00OSkgYWZ0ZXIgZXhwb3N1cmUgdG8gaW5hY3RpdmF0ZWQgbW9ub3ZhbGVudCBpbmZsdWVuemEgQS9JbmRvbmVzaWEvMDUvMjAwNSBINU4xIHNwbGl0LXZpcnVzIHZhY2NpbmUgLCB0aW1lIHBvaW50IDFEICwgYWRtaW5pc3RlcmVkIGkubS4KKiAyNDkxMjQ5ODogR2VuZXMgdXAtcmVndWxhdGVkIGluIHBlcmlwaGVyYWwgYmxvb2QgbW9ub251Y2xlYXIgY2VsbCAyOGQgdnMgN2QgaW4gaW5mYW50cyAoNC02bSkgKEJDRy1wcmltZWQpIGFmdGVyIGV4cG9zdXJlIHRvIE1vZGlmaWVkIFZhY2NpbmlhIEFua2FyYSAoTVZBKSB2aXJ1cyB2YWNjaW5lIHZlY3RvciAsIHRpbWUgcG9pbnQgMjhECiogMjQ5MTI0OTg6IEdlbmVzIHVwLXJlZ3VsYXRlZCBpbiBwZXJpcGhlcmFsIGJsb29kIG1vbm9udWNsZWFyIGNlbGwgdmFjY2luYXRlZCB2cyBjYW5kaW4gcGxhY2VibyBpbiBpbmZhbnRzICg0LTZtKSAoQkNHLXByaW1lZCkgYWZ0ZXIgZXhwb3N1cmUgdG8gTW9kaWZpZWQgVmFjY2luaWEgQW5rYXJhIChNVkEpIHZpcnVzIHZhY2NpbmUgdmVjdG9yICwgdGltZSBwb2ludCAyOEQKKiAyNzc2NDI1NEdlbmVzIG5lZ2F0aXZlbHkgY29ycmVsYXRlZCB3aXRoIFQgY2VsbCByZXNwb25zZXMgKGxvbmcgdGVybSkgaW4gcGVyaXBoZXJhbCBibG9vZCBtb25vbnVjbGVhciBjZWxsIGluIHNlbmlvcnMgKDUwLTc1KSBhZnRlciBleHBvc3VyZSB0byBab3N0YXZheCAsIHRpbWUgcG9pbnQgMUQuIENvbW1lbnQ6IChCKSBOZXR3b3JrIG9mIGdlbmVzIGluZm9ybWF0aXZlIG9mIGxvbmctdGVybSByZXNwb25zZXMuCiogMTU4NzkxMzdHZW5lcyB1cC1yZWd1bGF0ZWQgaW4gcG9seW1vcnBob251Y2xlYXIgbGV1a29jeXRlcyAoMjRoKTogY29udHJvbCB2ZXJzdXMgaW5mZWN0aW9uIGJ5IEEuIHBoYWdvY3l0b3BoaWx1bS4KKiAyOTg2ODAwMDogR2VuZXMgcG9zaXRpdmVseSBjb3JyZWxhdGVkIHdpdGggaGlnaCBhbnRpLUhCcyBjb25jZW50cmF0aW9uIGF0IHdlZWsgMzAgaW4gYmxvb2QgaW4geW91bmcvb2xkIGFkdWx0cyAoMjAtNDApLyg2MC04NCkgKHByaW1hcnkgdmFjY2luYXRpb24pIGFmdGVyIGV4cG9zdXJlIHRvIFR3aW5yaXggLCB0aW1lIHBvaW50IDFELiBDb21tZW50OiBDb3JyZWxhdGlvbiBiZXR3ZWVuIHByZS1pbW11bml6YXRpb24gZXhwcmVzc2lvbiBsZXZlbHMgb2Ygc2luZ2xlIGdlbmVzIChsb2cyLXRyYW5zZm9ybWVkKSBhbmQgYW50aS1IQnMgY29uY2VudHJhdGlvbnMgKGxvZzEwLXRyYW5zZm9ybWVkKSBhdCB3ZWVrIDMwIHBvc3QtcHJpbWFyeSB2YWNjaW5hdGlvbgoqIDIxMzU3OTQ1OiBHZW5lcyBwb3NpdGl2ZWx5IGNvcnJlbGF0ZWQgd2l0aCB0aXRlciByZXNwb25zZSBpbmRleCBpbiBwZXJpcGhlcmFsIGJsb29kIG1vbm9udWNsZWFyIGNlbGwgaW4gQ2F1Y2FzaWFuIG1hbGUgYWR1bHRzICgxOC00MCkgKGhpZ2ggcmVzcG9uZGVycykgYWZ0ZXIgZXhwb3N1cmUgdG8gRmx1YXJpeC9GbHV2aXJpbiAsIHRpbWUgcG9pbnQgMUQgYW5kIDNEWS4gQ29tbWVudDogU2lnbmF0dXJlIHByZWRpY3RpdmUgb2YgdGl0ZXIgcmVzcG9uc2UgaW5kZXggKFRSSSkuIERheSAxIGFuZCBkYXkgMyB2YWx1ZXMgYXZlcmFnZWQuCiogMTU4NzkxMzc6IEdlbmVzIGRvd24tcmVndWxhdGVkIGluIHBvbHltb3JwaG9udWNsZWFyIGxldWtvY3l0ZXMgKDloKTogY29udHJvbCB2ZXJzdXMgaW5mZWN0aW9uIGJ5IEEuIHBoYWdvY3l0b3BoaWx1bS4KKiAyODE5Mzg5ODogR2VuZXMgdXAtcmVndWxhdGVkIGluIHBlcmlwaGVyYWwgYmxvb2QgbW9ub251Y2xlYXIgY2VsbCBpbW11bml6ZWQgd2l0aCBBUlIgdnMgaW1tdW5pemVkIGJ5IFJSUiBpbiB1bmtub3duIChwcmltYXJ5IGltbXVuaXphdGlvbiB3aXRoIHJlY29tYmluYW50IGFkZW5vdmlydXMgMzUgKEFkMzUpKSBhZnRlciBleHBvc3VyZSB0byBQLiBmYWxjaXBhcnVtIFJUUyxTL0FTMDEgLCB0aW1lIHBvaW50IDFECiogMTU3ODkwNTg6IEdlbmVzIGRvd24tcmVndWxhdGVkIGluIGNvbXBhcmlzb24gb2YgbmV1dHJvcGhpbHMgdmVyc3VzbCBtb25vY3l0ZXMuCiogMTc2NTE4NzI6IEdlbmVzIGRvd24tcmVndWxhdGVkIGluIHBlcmlwaGVyYWwgYmxvb2QgbW9ub251Y2xlYXIgY2VsbCBwb3N0LXZhY2NpbmF0aW9uIHZzIHByZS12YWNjaW5hdGlvbiBpbiBhZHVsdHMgKDE4LTQwKSBhZnRlciBleHBvc3VyZSB0byBZRi1WYXggb3IgQVBTViBXZXR2YXggKGlkZW50aWNhbCByZXNwb25zZXMpICwgdGltZSBwb2ludCBhbnlELiBDb21tZW50OiBTaWduaWZpY2FudGx5IE1vZHVsYXRlZCBHZW5lcyBDb21tb24gdG8gVmFjY2luaWEgYW5kIFllbGxvdyBGZXZlciBWYWNjaW5hdGlvbgoqIDI2NzI2ODExOiBHZW5lcyBkb3duLXJlZ3VsYXRlZCBpbiBUIGNlbGwgN2QgdnMgMWQgaW4gYWR1bHRzICgxOC02NCkgYWZ0ZXIgZXhwb3N1cmUgdG8gUGFuZGVtcml4IChBL0NhbGlmb3JuaWEvNy8wOSAoSDFOMSkpICwgdGltZSBwb2ludCA3RC4gQ29tbWVudDogLSByb3VnaGx5IDYwLzQwIGZlbWFsZTptYWxlIHJhdGlvLCBvdmVyIDcwJSB3ZXJlIENhdXNhc2lhbgoqIDE1Nzg5MDU4OiBHZW5lcyBkb3duLXJlZ3VsYXRlZCBpbiBjb21wYXJpc29uIG9mIG5haXZlIEIgY2VsbHMgdmVyc3VzIGRheSAwIG1vbm9jeXRlcy4KKiAyOTUzNTcxMjogR2VuZXMgZG93bi1yZWd1bGF0ZWQgaW4gYmxvb2QgM2QgYW5kIDdkIHZzIDBociBpbiBhZHVsdHMgKDE4LTQ1KSAoaGlnaCBJZ00gcmVzcG9uZGVycykgYWZ0ZXIgZXhwb3N1cmUgdG8gQ041NGdwMTQwIGFkanV2YW50ZWQgd2l0aCBHTEEtQUYgLCB0aW1lIHBvaW50IDNELCA3RCBjb21iaW5lZCAoaWRlbnRpY2FsIHNpZ25hdHVyZXMpICwgYWRtaW5pc3RlcmVkIGkubS4KKiAxNzY1MTg3MjogR2VuZXMgZG93bi1yZWd1bGF0ZWQgaW4gcGVyaXBoZXJhbCBibG9vZCBtb25vbnVjbGVhciBjZWxsIGluIGFkdWx0cyAoMTgtNDApIGFmdGVyIGV4cG9zdXJlIHRvIFlGLVZheCAsIHRpbWUgcG9pbnQgYW55RAoqIDI0NDk1OTA5OiBHZW5lcyBwb3NpdGl2ZWx5IGNvcnJlbGF0ZWQgd2l0aCBIM04yIFZOIHRpdGVyIGluIGJsb29kIGluIGNoaWxkcmVuICgwLjUtMTR5KSBhZnRlciBleHBvc3VyZSB0byBGbHVNaXN0ICwgdGltZSBwb2ludCA3RC4gQ29tbWVudDogfjgwJSBvZiBjb2hvcnQgd2VyZSB3aGl0ZSwgfjUwLzUwIEZlbWFsZTptYWxlCiogMTczNDk2OTQ6IEdlbmVzIHVwLXJlZ3VsYXRlZCBpbiBwZXJpcGhlcmFsIGJsb29kIG1vbm9udWNsZWFyIGNlbGwgKDE4IHRvIDMzNiloIHZzIDBoIGluIGFkdWx0cyAoMjItNTQpIGFmdGVyIGV4cG9zdXJlIHRvIEYuIHR1bGFyZW5zaXMgdmFjY2luZSBMVlMgLCB0aW1lIHBvaW50IDE4IHRvIDMzNkguIENvbW1lbnQ6IFBhdHRlcm4gMywgc3VzdGFpbmVkLXVwLiBUaGVzZSBhcHByb3ggOSBvZiA0MiBnZW5lcyBpbiBwYXR0ZXJuIGxpbmtlZCB0byBpbW11bmUgZnVuY3Rpb24uCiogMjgwOTk0ODU6IEdlbmVzIHVwLXJlZ3VsYXRlZCBpbiBUIGNlbGwgMWQgdnMgMGQgaW4gYWR1bHRzICgxOC00OSkgYWZ0ZXIgZXhwb3N1cmUgdG8gaW5hY3RpdmF0ZWQgbW9ub3ZhbGVudCBpbmZsdWVuemEgQS9JbmRvbmVzaWEvMDUvMjAwNSBINU4xIHNwbGl0LXZpcnVzIHZhY2NpbmUgLCB0aW1lIHBvaW50IDFEICwgYWRtaW5pc3RlcmVkIGkubS4KKiAyMTc0MzQ3ODogR2VuZXMgdXAtcmVndWxhdGVkIGluIHBlcmlwaGVyYWwgYmxvb2QgbW9ub251Y2xlYXIgY2VsbCA3ZCB2cyAwZCBpbiBhZHVsdHMgKDE4LTUwKSBhZnRlciBleHBvc3VyZSB0byBGbHVNaXN0ICwgdGltZSBwb2ludCA3RC4gQ29tbWVudDogTW9sZWN1bGFyIHNpZ25hdHVyZSBpbmR1Y2VkIGJ5IExBSVYgdmFjY2luYXRpb24uIChhKSBJbnRlcmZlcm9uIChJRk4pLXJlbGF0ZWQgZ2VuZXMgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGFmdGVyIExBSVYgdmFjY2luYXRpb24KKiAyMTc0MzQ3ODogR2VuZXMgdXAtcmVndWxhdGVkIGluIHBlcmlwaGVyYWwgYmxvb2QgbW9ub251Y2xlYXIgY2VsbCAzZCB2cyAwZCBpbiBhZHVsdHMgKDE4LTUwKSBhZnRlciBleHBvc3VyZSB0byBGbHVNaXN0ICwgdGltZSBwb2ludCAzRC4gQ29tbWVudDogTW9sZWN1bGFyIHNpZ25hdHVyZSBpbmR1Y2VkIGJ5IExBSVYgdmFjY2luYXRpb24uIChhKSBJbnRlcmZlcm9uIChJRk4pLXJlbGF0ZWQgZ2VuZXMgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGFmdGVyIExBSVYgdmFjY2luYXRpb24KKiAyNjcyNjgxMTogR2VuZXMgdXAtcmVndWxhdGVkIGluIFQgY2VsbCAxZCB2cyAwZCBpbiBhZHVsdHMgKDE4LTY0KSBhZnRlciBleHBvc3VyZSB0byBQYW5kZW1yaXggKEEvQ2FsaWZvcm5pYS83LzA5IChIMU4xKSkgLCB0aW1lIHBvaW50IDFELiBDb21tZW50OiAtIHJvdWdobHkgNjAvNDAgZmVtYWxlOm1hbGUgcmF0aW8sIG92ZXIgNzAlIHdlcmUgQ2F1c2FzaWFuCiogMjc4NzA1OTE6IEdlbmVzIHVwLXJlZ3VsYXRlZCBpbiBibG9vZCB2YWNjaW5hdGVkIHZzIGNvbnRyb2wgaW4gYWR1bHRzICgyMy00OCkgYWZ0ZXIgZXhwb3N1cmUgdG8gTGl2ZSBhdHRlbnVhdGVkIHZhY2NpbmUgVEMtODMgLCB0aW1lIHBvaW50IDdECiogMjY3NTU1OTM6IEdlbmVzIHVwLXJlZ3VsYXRlZCBpbiBwZXJpcGhlcmFsIGJsb29kIG1vbm9udWNsZWFyIGNlbGwgMWQgcG9zdGJvb3N0IHZzIDBkIHByZS1pbW0gaW4gY2hpbGRyZW4gKDE0LTI3bSkgKE1GNTktYWRqdXZhbnRlZCkgYWZ0ZXIgZXhwb3N1cmUgdG8gRmx1YWQgLCB0aW1lIHBvaW50IDFELiBDb21tZW50OiBBVElWCiogMjM0MjA4ODY6IEdlbmVzIGRvd24tcmVndWxhdGVkIGluIHRoeW1pYyBUIHJlZzogQ0QyNCBoaWdoIFtHZW5lSUQ9MTAwMTMzOTQxXSB2ZXJzdXMgQ0QyNCBpbnQgW0dlbmVJRD0xMDAxMzM5NDFdLgoqIDIwNjQzMzM4OiBHZW5lcyB1cC1yZWd1bGF0ZWQgaW4gZXggdml2byBmb2xsaWN1bGFyIGRlbmRyaXRpYyBjZWxscyBmcm9tIHBlcmlwaGVyYWwgbHltcGggbm9kZXM6IG5hw692ZSB2ZXJzdXMgaW1tdW5pemVkIG1pY2UuCiogMjM0MjA4ODY6IEdlbmVzIGRvd24tcmVndWxhdGVkIGluIFQgcmVnOiBwZXJpcGhlcmFsIGx5bXBoIG5vZGVzIHZlcnN1cyB0aHltaWMgQ0QyNCBpbnQgW0dlbmVJRD0xMDAxMzM5NDFdLgoqIDIzODQ0MTI5OiBHZW5lcyB1cC1yZWd1bGF0ZWQgaW4gcGVyaXBoZXJhbCBibG9vZCBtb25vbnVjbGVhciBjZWxsIGxvdyByZXNwb25kZXJzIHZzIGhpZ2ggcmVzcG9uZGVycyBpbiBhZHVsdHMgKDE4LTU1KSBhZnRlciBleHBvc3VyZSB0byBNb2RpZmllZCBWYWNjaW5pYSBBbmthcmEgKE1WQSkgdmlydXMgdmFjY2luZSB2ZWN0b3IgLCB0aW1lIHBvaW50IDJELiBDb21tZW50OiBFbnJpY2hlZCBmb3IgR08gdGVybXMgYXNzb2NpYXRlZCB3aXRoIHJlZ3VsYXRpb24gb2YgVC1jZWxsIGFjdGl2YXRpb24gYW5kIGNvLXN0aW11bGF0aW9uIHNpZ25hbCAoREFWSUQsIGZkcjwwLjA1KSwgZnJvbSAxNzYgREUgZ2VuZXMKKiAyMzg3ODcyMTogR2VuZXMgcG9zaXRpdmVseSBjb3JyZWxhdGVkIHdpdGggYW50aWJvZHkgcmVzcG9uc2UgaW4gYmxvb2QgaW4gYWR1bHRzICgxOC00MCkgYWZ0ZXIgZXhwb3N1cmUgdG8gU2Fub2ZpIFBhc3RldXIsIFNBLCBJbmFjdGl2YXRlZCBpbmZsdWVuemEgdmFjY2luZSAsIHRpbWUgcG9pbnQgMUQKKiAyNjc1NTU5MzogR2VuZXMgdXAtcmVndWxhdGVkIGluIHBlcmlwaGVyYWwgYmxvb2QgbW9ub251Y2xlYXIgY2VsbCAxZCBwb3N0Ym9vc3QgdnMgMGQgcHJlLWltbSBpbiBjaGlsZHJlbiAoMTQtMjdtKSAoTUY1OS1hZGp1dmFudGVkKSBhZnRlciBleHBvc3VyZSB0byBGbHVhZCAsIHRpbWUgcG9pbnQgMUQuIENvbW1lbnQ6IChDKSBHZW5lcyBpbiBCVE0gTTQwOyAoRCkgR2VuZXMgaW4gQlRNIE01MwoqIDE3MTA1ODIxOiBHZW5lcyB1cC1yZWd1bGF0ZWQgaW4gY29tcGFyaXNvbiBvZiBwZXJpcGhlcmFsIGJsb29kIG1vbm9udWNsZWFyIGNlbGxzIChQQk1DKSBmcm9tIHBhdGllbnRzIHdpdGggYWN1dGUgaW5mbHVlbnphIGluZmVjdGlvbiB2ZXJzdXMgUEJNQyBmcm9tIHBhdGllbnRzIHdpdGggYWN1dGUgRS4gY29saSBpbmZlY3Rpb24uCiogMjE3NDM0Nzg6IEdlbmVzIGRvd24tcmVndWxhdGVkIGluIHBlcmlwaGVyYWwgYmxvb2QgbW9ub251Y2xlYXIgY2VsbCA3ZCB2cyAwZCBpbiBhZHVsdHMgKDE4LTUwKSBhZnRlciBleHBvc3VyZSB0byBGbHVNaXN0ICwgdGltZSBwb2ludCA3RC4gQ29tbWVudDogTW9sZWN1bGFyIHNpZ25hdHVyZSBpbmR1Y2VkIGJ5IExBSVYgdmFjY2luYXRpb24uIChhKSBJbnRlcmZlcm9uIChJRk4pLXJlbGF0ZWQgZ2VuZXMgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGFmdGVyIExBSVYgdmFjY2luYXRpb24KKiAxNTc4OTA1ODogR2VuZXMgZG93bi1yZWd1bGF0ZWQgaW4gY29tcGFyaXNvbiBvZiBuYWl2ZSBDRDggVCBjZWxscyB2ZXJzdXMgZGF5IDAgbW9ub2N5dGVzLgoqIDE3NTk1MjQyOiBHZW5lcyB1cC1yZWd1bGF0ZWQgaW4gY29tcGFyaXNvbiBvZiBwZXJpcGhlcmFsIGJsb29kIG1vbm9udWNsZWFyIGNlbGxzIChQQk1DKSBmcm9tIGhlYWx0aHkgZG9ub3JzIHZlcnN1cyBQQk1DcyBmcm9tIHBhdGllbnRzIHdpdGggdHlwZSAxIGRpYWJldGVzIGF0IDQgIG1vbnRoIGFmdGVyIHRoZSBkaWFnbm9zaXMuCiogMjQzMzYyMjY6IEdlbmVzIG5lZ2F0aXZlbHkgY29ycmVsYXRlZCB3aXRoIGFudGlib2R5IHJlc3BvbnNlIGluIHBlcmlwaGVyYWwgYmxvb2QgbW9ub251Y2xlYXIgY2VsbCBpbiBhZHVsdHMgKDE4LTQ1KSAoYW50aS1EVCBhbnRpYm9keS1jb3JyZWxhdGlvbiBwcm9maWxlKSBhZnRlciBleHBvc3VyZSB0byBNZW5hY3RyYSAsIHRpbWUgcG9pbnQgM0QKKiAyNDgwODM2NTogR2VuZXMgdXAtcmVndWxhdGVkIGluIGRlbmRyaXRpYyBjZWxscyBpbmZlY3RlZCBieSBMZWlzaG1hbmlhIG1ham9yOiAyaCB2ZXJzdXMgMjRoLgoqIDIxNzQzNDc4OiBHZW5lcyBkb3duLXJlZ3VsYXRlZCBpbiBjb21wYXJpc29uIG9mIEIgY2VsbHMgdmVyc3VzIG15ZWxvaWQgZGVuZHJpdGljIGNlbGxzIChtREMpLgoqIDIxNzQzNDc4OiBHZW5lcyBkb3duLXJlZ3VsYXRlZCBpbiBjb21wYXJpc29uIG9mIHBsYXNtYWN5dG9pZCBkZW5kcml0aWMgY2VsbHMgKERDKSB2ZXJzdXMgbXllbG9pZCBEQ3MuCiogMjY3NTU1OTM6IEdlbmVzIHBvc2l0aXZlbHkgY29ycmVsYXRlZCB3aXRoIEhBSSByZXNwb25zZSBpbiBwZXJpcGhlcmFsIGJsb29kIG1vbm9udWNsZWFyIGNlbGwgaW4gY2hpbGRyZW4gKDE0LTI3bSkgKE1GNTktYWRqdXZhbnRlZCBhbmQgbm9uLWFkanV2YW50ZWQpIGFmdGVyIGV4cG9zdXJlIHRvIEZsdWFkL0ltdXZhYyAsIHRpbWUgcG9pbnQgMUQuIENvbW1lbnQ6IEdlbmVzIGluIEJUTSBNNzUKKiAyMjYxNzg0NTogR2VuZXMgZG93bi1yZWd1bGF0ZWQgaW4gcGVyaXBoZXJhbCBibG9vZCBtb25vbnVjbGVhciBjZWxsIDI0aCB2cyAwaCBpbiBhZHVsdHMgKDE4LTQ1KSAobm9uLXJlc3BvbmRlcnMgKHByZXZpb3VzbHkgaW1tdW5pemVkKSkgYWZ0ZXIgZXhwb3N1cmUgdG8gTGl2ZSBhdHRlbnVhdGVkIHZhY2NpbmUgVEMtODMgLCB0aW1lIHBvaW50IDI0SC4gQ29tbWVudDogaW5pdGlhbCBleHBvc3VyZSAyLTEwIG1vbnRocyBiZWZvcmUgUEJNQ3MgZHJhd24uIHNpZ25pZmljYW50IGdlbmVzIGNob3NlbiBmb3IgbWVtYmVyc2hpcCBpbiBjYW5vbmljYWwgcGF0aHdheXMKKiAyNzg3MDU5MTogR2VuZXMgdXAtcmVndWxhdGVkIGluIGJsb29kIHZhY2NpbmF0ZWQgdnMgY29udHJvbCBpbiBhZHVsdHMgKDIzLTQ4KSBhZnRlciBleHBvc3VyZSB0byBMaXZlIGF0dGVudWF0ZWQgdmFjY2luZSBUQy04MyAsIHRpbWUgcG9pbnQgMkQKKiAyOTUzNTcxMjogR2VuZXMgZG93bi1yZWd1bGF0ZWQgaW4gYmxvb2QgMWQgdnMgMGhyIGluIGFkdWx0cyAoMTgtNDUpIGFmdGVyIGV4cG9zdXJlIHRvIENONTRncDE0MCBhZGp1dmFudGVkIHdpdGggR0xBLUFGICwgdGltZSBwb2ludCAxRCAsIGFkbWluaXN0ZXJlZCBpLm0uCiogMjI3MjI4NTc6IEdlbmVzIGRvd24tcmVndWxhdGVkIGluIENENCBbR2VuZUlEPTkyMF0gb3Zlci1leHByZXNzaW5nOiBGT1hQMyBbR2VuZUlEPTUwOTQzXSBhbmQgUFBBUmcxIGZvcm0gb2YgUFBBUkcgW0dlbmVJRD01NDY4XSB2ZXJzdXMgRk9YUDMgW0dlbmVJRD01MDk0M10uCiogMTkwMjk5MDI6IEdlbmVzIHVwLXJlZ3VsYXRlZCBpbiBwZXJpcGhlcmFsIGJsb29kIG1vbm9udWNsZWFyIGNlbGwgM2QgdnMgMGQgaW4gYWR1bHRzICgxOC00NSkgYWZ0ZXIgZXhwb3N1cmUgdG8gWUYtMTdEIHZhY2NpbmUgLCB0aW1lIHBvaW50IDNECiogMTkwMjk5MDI6IEdlbmVzIHVwLXJlZ3VsYXRlZCBpbiBwZXJpcGhlcmFsIGJsb29kIG1vbm9udWNsZWFyIGNlbGwgN2QgdnMgMGQgaW4gYWR1bHRzICgxOC00NSkgYWZ0ZXIgZXhwb3N1cmUgdG8gWUYtMTdEIHZhY2NpbmUgLCB0aW1lIHBvaW50IDdECiogMjI3MjI4NTc6IEdlbmVzIGRvd24tcmVndWxhdGVkIGluIENENCBbR2VuZUlEPTkyMF0gVCBjZWxscyB0cmVhdGVkIHdpdGggcGlvZ2xpdGF6b25lIFtQdWJDaGVtPTQ4MjldIGFuZCBvdmVyLWV4cHJlc3Npbmc6IEZPWFAzIFtHZW5lSUQ9NTA5NDNdIGFuZCBQUEFSZzEgaXNvZm9ybSBvZiBQUEFSRyBbR2VuZUlEPTU0NjhdIHZlcnN1cyBGT1hQMyBbR2VuZUlEPTUwOTQzXSBhbmQgUFBBUmcyIGZvcm0gb2YgUFBBUkcgW0dlbmVJRD01NDY4XS4KKiAyMTc0MzQ3ODogR2VuZXMgZG93bi1yZWd1bGF0ZWQgaW4gY29tcGFyaXNvbiBvZiBwbGFzbWFjeXRvaWQgZGVuZHJpdGljIGNlbGxzIChEQykgZnJvbSBpbmZsdWVuemEgdmFjY2luZWUgYXQgZGF5IDcgcG9zdC12YWNjaW5hdGlvbiB2ZXJzdXMgbXllbG9pZCBEQ3MgYXQgZGF5IDcgcG9zdC12YWNjaW5hdGlvbi4KKiAyNDkxMjQ5ODogR2VuZXMgdXAtcmVndWxhdGVkIGluIGJsb29kIHZhY2NpbmF0ZWQgdnMgY2FuZGluIHBsYWNlYm8gaW4gaW5mYW50cyAoNC02bSkgKEJDRy1wcmltZWQpIGFmdGVyIGV4cG9zdXJlIHRvIE1vZGlmaWVkIFZhY2NpbmlhIEFua2FyYSAoTVZBKSB2aXJ1cyB2YWNjaW5lIHZlY3RvciAsIHRpbWUgcG9pbnQgMUQKKiAyMTYzNjI5NDogR2VuZXMgZG93bi1yZWd1bGF0ZWQgaW4gQkNMNiBbR2VuZUlEPTYwNF0gaGlnaCBmb2xsaWN1bGFyIGhlbHBlciBUIGNlbGxzIChUZmgpIHZlcnN1cyBhbGwgVGZoLgoqIDE1Nzg5MDU4OiBHZW5lcyBkb3duLXJlZ3VsYXRlZCBpbiBjb21wYXJpc29uIG9mIG5haXZlIENENCBbR2VuZUlEPTkyMF0gVCBjZWxscyB2ZXJzdXMgZGF5IDAgbW9ub2N5dGVzLgoqIDE3MjA0NjUyOiBHZW5lcyBkb3duLXJlZ3VsYXRlZCBpbiBjZWxscyBmcm9tIEZsdDNMIE1lbGFub20gaW5qZWN0ZWQgbWljZTogc3BsZW5pYyBERUMyMDUrIGRlbmRyaXRpYyBjZWxscyB2ZXJzdXMgQ0Q4IFQgY2VsbHMuCgojIyMjIFR1bWFjbyBiaW9wc2llcyBICgpgYGB7ciwgZXZhbD1GQUxTRX0KdF9iaW9wc3lfZ3N2YV9oIDwtIHNpbXBsZV9nc3ZhKAogICAgdF9iaW9wc2llcywKICAgIHNpZ25hdHVyZXMgPSBicm9hZF9oLAogICAgbXNpZ194bWwgPSAicmVmZXJlbmNlL21zaWdkYi9tc2lnZGJfdjcuNS4xLnhtbCIsCiAgICBzaWduYXR1cmVfY2F0ZWdvcnkgPSAiaCIpCnRfYmlvcHN5X2dzdmFfaF9zaWcgPC0gZ2V0X3NpZ19nc3ZhX2NhdGVnb3JpZXMoCiAgICB0X2Jpb3BzeV9nc3ZhX2gsCiAgICBleGNlbCA9ICJhbmFseXNlcy80X3R1bWFjby9HU1ZBL3RfYmlvcHN5X2dzdmFfaC54bHN4IikKYGBgCgpgYGB7cn0KdF9iaW9wc3lfZ3N2YV9oIDwtIHNpbXBsZV9nc3ZhKAogICAgdF9iaW9wc2llcywgc2lnbmF0dXJlX2NhdGVnb3J5ID0gImgiKQp0X2Jpb3BzeV9nc3ZhX2hfc2lnIDwtIGdldF9zaWdfZ3N2YV9jYXRlZ29yaWVzKAogICAgdF9iaW9wc3lfZ3N2YV9oLAogICAgZXhjZWwgPSAiYW5hbHlzZXMvNF90dW1hY28vR1NWQS90X2Jpb3BzeV9nc3ZhX2gueGxzeCIpCmBgYAoKIyMjIyBUdW1hY28gRW9zaW5vcGhpbHMgQzcKCmBgYHtyLCBldmFsPUZBTFNFfQp0X2Vvc2lub3BoaWxfZ3N2YV9jNyA8LSBzaW1wbGVfZ3N2YSgKICAgIHRfZW9zaW5vcGhpbHMsCiAgICBzaWduYXR1cmVzID0gYnJvYWRfYzcsCiAgICBtc2lnX3htbCA9ICJyZWZlcmVuY2UvbXNpZ2RiL21zaWdkYl92Ny41LjEueG1sIiwKICAgIHNpZ25hdHVyZV9jYXRlZ29yeSA9ICJjNyIpCnRfZW9zaW5vcGhpbF9nc3ZhX2M3X3NpZyA8LSBnZXRfc2lnX2dzdmFfY2F0ZWdvcmllcygKICAgIHRfZW9zaW5vcGhpbF9nc3ZhX2M3LAogICAgZXhjZWwgPSAiYW5hbHlzZXMvNF90dW1hY28vR1NWQS90X2Vvc2lub3BoaWxfZ3N2YV9jNy54bHN4IikKYGBgCgpgYGB7cn0KdF9lb3Npbm9waGlsX2dzdmFfYzcgPC0gc2ltcGxlX2dzdmEoCiAgICB0X2Vvc2lub3BoaWxzLCBzaWduYXR1cmVfY2F0ZWdvcnkgPSAiYzciKQp0X2Vvc2lub3BoaWxfZ3N2YV9jN19zaWcgPC0gZ2V0X3NpZ19nc3ZhX2NhdGVnb3JpZXMoCiAgICB0X2Vvc2lub3BoaWxfZ3N2YV9jNywKICAgIGV4Y2VsID0gImFuYWx5c2VzLzRfdHVtYWNvL0dTVkEvdF9lb3Npbm9waGlsX2dzdmFfYzcueGxzeCIpCmBgYAoKIyMjIyBUdW1hY28gRW9zaW5vcGhpbHMgQzIKCmBgYHtyLCBldmFsPUZBTFNFfQp0X2Vvc2lub3BoaWxfZ3N2YV9jMiA8LSBzaW1wbGVfZ3N2YSgKICAgIHRfZW9zaW5vcGhpbHMsCiAgICBzaWduYXR1cmVzID0gYnJvYWRfYzIsCiAgICBtc2lnX3htbCA9ICJyZWZlcmVuY2UvbXNpZ2RiL21zaWdkYl92Ny41LjEueG1sIiwKICAgIHNpZ25hdHVyZV9jYXRlZ29yeSA9ICJjMiIpCnRfZW9zaW5vcGhpbF9nc3ZhX2MyX3NpZyA8LSBnZXRfc2lnX2dzdmFfY2F0ZWdvcmllcygKICAgIHRfZW9zaW5vcGhpbF9nc3ZhX2MyLAogICAgZXhjZWwgPSAiYW5hbHlzZXMvNF90dW1hY28vR1NWQS90X2Vvc2lub3BoaWxfZ3N2YV9jMi54bHN4IikKYGBgCgpgYGB7cn0KdF9lb3Npbm9waGlsX2dzdmFfYzIgPC0gc2ltcGxlX2dzdmEoCiAgICB0X2Vvc2lub3BoaWxzLCBzaWduYXR1cmVfY2F0ZWdvcnkgPSAiYzIiKQp0X2Vvc2lub3BoaWxfZ3N2YV9jMl9zaWcgPC0gZ2V0X3NpZ19nc3ZhX2NhdGVnb3JpZXMoCiAgICB0X2Vvc2lub3BoaWxfZ3N2YV9jMiwKICAgIGV4Y2VsID0gImFuYWx5c2VzLzRfdHVtYWNvL0dTVkEvdF9lb3Npbm9waGlsX2dzdmFfYzIueGxzeCIpCmBgYAoKIyMjIyBUdW1hY28gRW9zaW5vcGhpbHMgSAoKYGBge3IsIGV2YWw9RkFMU0V9CnRfZW9zaW5vcGhpbF9nc3ZhX2ggPC0gc2ltcGxlX2dzdmEoCiAgICB0X2Vvc2lub3BoaWxzLAogICAgc2lnbmF0dXJlcyA9IGJyb2FkX2gsCiAgICBtc2lnX3htbCA9ICJyZWZlcmVuY2UvbXNpZ2RiL21zaWdkYl92Ny41LjEueG1sIiwKICAgIHNpZ25hdHVyZV9jYXRlZ29yeSA9ICJoIikKdF9lb3Npbm9waGlsX2dzdmFfaF9zaWcgPC0gZ2V0X3NpZ19nc3ZhX2NhdGVnb3JpZXMoCiAgICB0X2Vvc2lub3BoaWxfZ3N2YV9oLAogICAgZXhjZWwgPSAiYW5hbHlzZXMvNF90dW1hY28vR1NWQS90X2Vvc2lub3BoaWxfZ3N2YV9oLnhsc3giKQpgYGAKCmBgYHtyfQp0X2Vvc2lub3BoaWxfZ3N2YV9oIDwtIHNpbXBsZV9nc3ZhKAogICAgdF9lb3Npbm9waGlscywgc2lnbmF0dXJlX2NhdGVnb3J5ID0gImgiKQp0X2Vvc2lub3BoaWxfZ3N2YV9oX3NpZyA8LSBnZXRfc2lnX2dzdmFfY2F0ZWdvcmllcygKICAgIHRfZW9zaW5vcGhpbF9nc3ZhX2gsCiAgICBleGNlbCA9ICJhbmFseXNlcy80X3R1bWFjby9HU1ZBL3RfZW9zaW5vcGhpbF9nc3ZhX2gueGxzeCIpCmBgYAoKIyMjIyBUdW1hY28gTW9ub2N5dGVzIEM3CgpgYGB7ciwgZXZhbD1GQUxTRX0KdF9tb25vY3l0ZV9nc3ZhX2M3IDwtIHNpbXBsZV9nc3ZhKAogICAgdF9tb25vY3l0ZXMsCiAgICBzaWduYXR1cmVzID0gYnJvYWRfYzcsCiAgICBtc2lnX3htbCA9ICJyZWZlcmVuY2UvbXNpZ2RiL21zaWdkYl92Ny41LjEueG1sIiwKICAgIHNpZ25hdHVyZV9jYXRlZ29yeSA9ICJjNyIpCnRfbW9ub2N5dGVfZ3N2YV9jN19zaWcgPC0gZ2V0X3NpZ19nc3ZhX2NhdGVnb3JpZXMoCiAgICB0X21vbm9jeXRlX2dzdmFfYzcsCiAgICBleGNlbCA9ICJhbmFseXNlcy80X3R1bWFjby9HU1ZBL3RfbW9ub2N5dGVfZ3N2YV9jNy54bHN4IikKYGBgCgpgYGB7cn0KdF9tb25vY3l0ZV9nc3ZhX2M3IDwtIHNpbXBsZV9nc3ZhKAogICAgdF9tb25vY3l0ZXMsIHNpZ25hdHVyZV9jYXRlZ29yeSA9ICJjNyIpCnRfbW9ub2N5dGVfZ3N2YV9jN19zaWcgPC0gZ2V0X3NpZ19nc3ZhX2NhdGVnb3JpZXMoCiAgICB0X21vbm9jeXRlX2dzdmFfYzcsCiAgICBleGNlbCA9ICJhbmFseXNlcy80X3R1bWFjby9HU1ZBL3RfbW9ub2N5dGVfZ3N2YV9jNy54bHN4IikKYGBgCgojIyMjIFR1bWFjbyBNb25vY3l0ZXMgQzIKCmBgYHtyLCBldmFsPUZBTFNFfQp0X21vbm9jeXRlX2dzdmFfYzIgPC0gc2ltcGxlX2dzdmEoCiAgICB0X21vbm9jeXRlcywKICAgIHNpZ25hdHVyZXMgPSBicm9hZF9jMiwKICAgIG1zaWdfeG1sID0gInJlZmVyZW5jZS9tc2lnZGIvbXNpZ2RiX3Y3LjUuMS54bWwiLAogICAgc2lnbmF0dXJlX2NhdGVnb3J5ID0gImMyIikKdF9tb25vY3l0ZV9nc3ZhX2MyX3NpZyA8LSBnZXRfc2lnX2dzdmFfY2F0ZWdvcmllcygKICAgIHRfbW9ub2N5dGVfZ3N2YV9jMiwKICAgIGV4Y2VsID0gImFuYWx5c2VzLzRfdHVtYWNvL0dTVkEvdF9tb25vY3l0ZV9nc3ZhX2MyLnhsc3giKQpgYGAKCmBgYHtyfQp0X21vbm9jeXRlX2dzdmFfYzIgPC0gc2ltcGxlX2dzdmEoCiAgICB0X21vbm9jeXRlcywgc2lnbmF0dXJlX2NhdGVnb3J5ID0gImMyIikKdF9tb25vY3l0ZV9nc3ZhX2MyX3NpZyA8LSBnZXRfc2lnX2dzdmFfY2F0ZWdvcmllcygKICAgIHRfbW9ub2N5dGVfZ3N2YV9jMiwKICAgIGV4Y2VsID0gImFuYWx5c2VzLzRfdHVtYWNvL0dTVkEvdF9tb25vY3l0ZV9nc3ZhX2MyLnhsc3giKQpgYGAKCiMjIyMgVHVtYWNvIE1vbm9jeXRlcyBICgpgYGB7ciwgZXZhbD1GQUxTRX0KdF9tb25vY3l0ZV9nc3ZhX2ggPC0gc2ltcGxlX2dzdmEoCiAgICB0X21vbm9jeXRlcywKICAgIHNpZ25hdHVyZXMgPSBicm9hZF9oLAogICAgbXNpZ194bWwgPSAicmVmZXJlbmNlL21zaWdkYi9tc2lnZGJfdjcuNS4xLnhtbCIsCiAgICBzaWduYXR1cmVfY2F0ZWdvcnkgPSAiaCIpCnRfbW9ub2N5dGVfZ3N2YV9oX3NpZyA8LSBnZXRfc2lnX2dzdmFfY2F0ZWdvcmllcygKICAgIHRfbW9ub2N5dGVfZ3N2YV9oLAogICAgZXhjZWwgPSAiYW5hbHlzZXMvNF90dW1hY28vR1NWQS90X21vbm9jeXRlX2dzdmFfaC54bHN4IikKYGBgCgpgYGB7cn0KdF9tb25vY3l0ZV9nc3ZhX2ggPC0gc2ltcGxlX2dzdmEoCiAgICB0X21vbm9jeXRlcywgc2lnbmF0dXJlX2NhdGVnb3J5ID0gImgiKQp0X21vbm9jeXRlX2dzdmFfaF9zaWcgPC0gZ2V0X3NpZ19nc3ZhX2NhdGVnb3JpZXMoCiAgICB0X21vbm9jeXRlX2dzdmFfaCwKICAgIGV4Y2VsID0gImFuYWx5c2VzLzRfdHVtYWNvL0dTVkEvdF9tb25vY3l0ZV9nc3ZhX2gueGxzeCIpCmBgYAoKIyMjIyBUdW1hY28gTmV1dHJvcGhpbHMgYzcKCmBgYHtyLCBldmFsPUZBTFNFfQp0X25ldXRyb3BoaWxfZ3N2YV9jNyA8LSBzaW1wbGVfZ3N2YSgKICAgIHRfbmV1dHJvcGhpbHMsCiAgICBzaWduYXR1cmVzID0gYnJvYWRfYzcsCiAgICBtc2lnX3htbCA9ICJyZWZlcmVuY2UvbXNpZ2RiL21zaWdkYl92Ny41LjEueG1sIiwKICAgIHNpZ25hdHVyZV9jYXRlZ29yeSA9ICJjNyIpCnRfbmV1dHJvcGhpbF9nc3ZhX2M3X3NpZyA8LSBnZXRfc2lnX2dzdmFfY2F0ZWdvcmllcygKICAgIHRfbmV1dHJvcGhpbF9nc3ZhX2M3LAogICAgZXhjZWwgPSAiYW5hbHlzZXMvNF90dW1hY28vR1NWQS90X25ldXRyb3BoaWxfZ3N2YV9jNy54bHN4IikKYGBgCgpgYGB7cn0KdF9uZXV0cm9waGlsX2dzdmFfYzcgPC0gc2ltcGxlX2dzdmEoCiAgICB0X25ldXRyb3BoaWxzLCBzaWduYXR1cmVfY2F0ZWdvcnkgPSAiYzciKQp0X25ldXRyb3BoaWxfZ3N2YV9jN19zaWcgPC0gZ2V0X3NpZ19nc3ZhX2NhdGVnb3JpZXMoCiAgICB0X25ldXRyb3BoaWxfZ3N2YV9jNywKICAgIGV4Y2VsID0gImFuYWx5c2VzLzRfdHVtYWNvL0dTVkEvdF9uZXV0cm9waGlsX2dzdmFfYzcueGxzeCIpCmBgYAoKIyMjIyBUdW1hY28gTmV1dHJvcGhpbHMgYzIKCmBgYHtyLCBldmFsPUZBTFNFfQp0X25ldXRyb3BoaWxfZ3N2YV9jMiA8LSBzaW1wbGVfZ3N2YSgKICAgIHRfbmV1dHJvcGhpbHMsCiAgICBzaWduYXR1cmVzID0gYnJvYWRfYzIsCiAgICBtc2lnX3htbCA9ICJyZWZlcmVuY2UvbXNpZ2RiL21zaWdkYl92Ny41LjEueG1sIiwKICAgIHNpZ25hdHVyZV9jYXRlZ29yeSA9ICJjMiIpCnRfbmV1dHJvcGhpbF9nc3ZhX2MyX3NpZyA8LSBnZXRfc2lnX2dzdmFfY2F0ZWdvcmllcygKICAgIHRfbmV1dHJvcGhpbF9nc3ZhX2MyLAogICAgZXhjZWwgPSAiYW5hbHlzZXMvNF90dW1hY28vR1NWQS90X25ldXRyb3BoaWxfZ3N2YV9jMi54bHN4IikKYGBgCgpgYGB7cn0KdF9uZXV0cm9waGlsX2dzdmFfYzIgPC0gc2ltcGxlX2dzdmEoCiAgICB0X25ldXRyb3BoaWxzLCBzaWduYXR1cmVfY2F0ZWdvcnkgPSAiYzIiKQp0X25ldXRyb3BoaWxfZ3N2YV9jMl9zaWcgPC0gZ2V0X3NpZ19nc3ZhX2NhdGVnb3JpZXMoCiAgICB0X25ldXRyb3BoaWxfZ3N2YV9jMiwKICAgIGV4Y2VsID0gImFuYWx5c2VzLzRfdHVtYWNvL0dTVkEvdF9uZXV0cm9waGlsX2dzdmFfYzIueGxzeCIpCmBgYAoKIyMjIyBUdW1hY28gTmV1dHJvcGhpbHMgSAoKYGBge3IsIGV2YWw9RkFMU0V9CnRfbmV1dHJvcGhpbF9nc3ZhX2ggPC0gc2ltcGxlX2dzdmEoCiAgICB0X25ldXRyb3BoaWxzLAogICAgc2lnbmF0dXJlcyA9IGJyb2FkX2gsCiAgICBtc2lnX3htbCA9ICJyZWZlcmVuY2UvbXNpZ2RiL21zaWdkYl92Ny41LjEueG1sIiwKICAgIHNpZ25hdHVyZV9jYXRlZ29yeSA9ICJoIikKdF9uZXV0cm9waGlsX2dzdmFfaF9zaWcgPC0gZ2V0X3NpZ19nc3ZhX2NhdGVnb3JpZXMoCiAgICB0X25ldXRyb3BoaWxfZ3N2YV9oLAogICAgZXhjZWwgPSAiYW5hbHlzZXMvNF90dW1hY28vR1NWQS90X25ldXRyb3BoaWxfZ3N2YV9oLnhsc3giKQpgYGAKCmBgYHtyfQp0X25ldXRyb3BoaWxfZ3N2YV9oIDwtIHNpbXBsZV9nc3ZhKAogICAgdF9uZXV0cm9waGlscywgc2lnbmF0dXJlX2NhdGVnb3J5ID0gImgiKQp0X25ldXRyb3BoaWxfZ3N2YV9oX3NpZyA8LSBnZXRfc2lnX2dzdmFfY2F0ZWdvcmllcygKICAgIHRfbmV1dHJvcGhpbF9nc3ZhX2gsCiAgICBleGNlbCA9ICJhbmFseXNlcy80X3R1bWFjby9HU1ZBL3RfbmV1dHJvcGhpbF9nc3ZhX2gueGxzeCIpCmBgYAoKIyBCaWJsaW9ncmFwaHkK