1. load libraries

2. Load Seurat Object

  All_samples_Merged
An object of class Seurat 
62625 features across 46976 samples within 6 assays 
Active assay: SCT (25901 features, 3000 variable features)
 3 layers present: counts, data, scale.data
 5 other assays present: RNA, ADT, prediction.score.celltype.l1, prediction.score.celltype.l2, prediction.score.celltype.l3
 4 dimensional reductions calculated: pca, umap, integrated_dr, ref.umap

3. Data PREPERATION

The saved ADT PCA output reports that requested dimensions beyond 28 available items were capped at 28. The source asks for `npcs = 28`, then requests `dims.list = list(1:30, 1:18)` for `pca` and `apca`. The original object is not available here, so this report cannot establish how many components each stored reduction contains or which call produced each repeated warning. Also check the `pca` reduction before the later UMAP call, which requests `dims = 1:30`. Verify that every requested dimension exists before rerunning.

The original source supplied one `RNA.weight` name for two modalities. The saved output says the weights were stored as `SCT.weight` and `ADT.weight`, which the following violin plots use. The source now names both observed columns explicitly. The warning shown in the saved output is from the earlier source, not a regenerated run.

DefaultAssay(All_samples_Merged) <- 'ADT'

VariableFeatures(All_samples_Merged) <- rownames(All_samples_Merged[["ADT"]])

# we will use all ADT features for dimensional reduction
# we set a dimensional reduction name to avoid overwriting the 
All_samples_Merged <- NormalizeData(All_samples_Merged, normalization.method = 'CLR', margin = 2) %>% 
  ScaleData() %>% RunPCA(reduction.name = 'apca', npcs =28, maxit = 5000)
Normalizing across cells

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~00s          
  |+                                                 | 2 % ~00s          
  |++                                                | 3 % ~00s          
  |++                                                | 4 % ~00s          
  |+++                                               | 5 % ~00s          
  |+++                                               | 6 % ~00s          
  |++++                                              | 7 % ~00s          
  |++++                                              | 8 % ~00s          
  |+++++                                             | 9 % ~00s          
  |+++++                                             | 10% ~00s          
  |++++++                                            | 11% ~00s          
  |++++++                                            | 12% ~00s          
  |+++++++                                           | 13% ~00s          
  |+++++++                                           | 14% ~00s          
  |++++++++                                          | 15% ~00s          
  |++++++++                                          | 16% ~00s          
  |+++++++++                                         | 17% ~00s          
  |+++++++++                                         | 18% ~00s          
  |++++++++++                                        | 19% ~00s          
  |++++++++++                                        | 20% ~00s          
  |+++++++++++                                       | 21% ~00s          
  |+++++++++++                                       | 22% ~00s          
  |++++++++++++                                      | 23% ~00s          
  |++++++++++++                                      | 24% ~00s          
  |+++++++++++++                                     | 25% ~00s          
  |+++++++++++++                                     | 26% ~00s          
  |++++++++++++++                                    | 27% ~00s          
  |++++++++++++++                                    | 28% ~00s          
  |+++++++++++++++                                   | 29% ~00s          
  |+++++++++++++++                                   | 30% ~00s          
  |++++++++++++++++                                  | 31% ~00s          
  |++++++++++++++++                                  | 32% ~00s          
  |+++++++++++++++++                                 | 33% ~00s          
  |+++++++++++++++++                                 | 34% ~00s          
  |++++++++++++++++++                                | 35% ~00s          
  |++++++++++++++++++                                | 36% ~00s          
  |+++++++++++++++++++                               | 37% ~00s          
  |+++++++++++++++++++                               | 38% ~00s          
  |++++++++++++++++++++                              | 39% ~00s          
  |++++++++++++++++++++                              | 40% ~00s          
  |+++++++++++++++++++++                             | 41% ~00s          
  |+++++++++++++++++++++                             | 42% ~00s          
  |++++++++++++++++++++++                            | 43% ~00s          
  |++++++++++++++++++++++                            | 44% ~00s          
  |+++++++++++++++++++++++                           | 45% ~00s          
  |+++++++++++++++++++++++                           | 46% ~00s          
  |++++++++++++++++++++++++                          | 47% ~00s          
  |++++++++++++++++++++++++                          | 48% ~00s          
  |+++++++++++++++++++++++++                         | 49% ~00s          
  |+++++++++++++++++++++++++                         | 50% ~00s          
  |++++++++++++++++++++++++++                        | 51% ~00s          
  |++++++++++++++++++++++++++                        | 52% ~00s          
  |+++++++++++++++++++++++++++                       | 53% ~00s          
  |+++++++++++++++++++++++++++                       | 54% ~00s          
  |++++++++++++++++++++++++++++                      | 55% ~00s          
  |++++++++++++++++++++++++++++                      | 56% ~00s          
  |+++++++++++++++++++++++++++++                     | 57% ~00s          
  |+++++++++++++++++++++++++++++                     | 58% ~00s          
  |++++++++++++++++++++++++++++++                    | 59% ~00s          
  |++++++++++++++++++++++++++++++                    | 60% ~00s          
  |+++++++++++++++++++++++++++++++                   | 61% ~00s          
  |+++++++++++++++++++++++++++++++                   | 62% ~00s          
  |++++++++++++++++++++++++++++++++                  | 63% ~00s          
  |++++++++++++++++++++++++++++++++                  | 64% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++                | 68% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s  
Centering and scaling data matrix

  |                                                                                                                                 
  |                                                                                                                           |   0%
  |                                                                                                                                 
  |===========================================================================================================================| 100%
Warning: You're computing too large a percentage of total singular values, use a standard svd instead.Warning: Requested number is larger than the number of available items (28). Setting to 28.Warning: Requested number is larger than the number of available items (28). Setting to 28.Warning: Requested number is larger than the number of available items (28). Setting to 28.Warning: Requested number is larger than the number of available items (28). Setting to 28.Warning: Requested number is larger than the number of available items (28). Setting to 28.PC_ 1 
Positive:  CD5, CD274, TCRab, CD7, CD3, CD28, CD45RO, CD26, CD44, CD62L 
       CXCR3, CD127, CD45, CCR8 
Negative:  CD25, CD30, CD2, CD95, CD45RA, CD4, CCR6, CCR4, CXCR4, CD40 
       CD19, CCR7, PD1, CCR10 
PC_ 2 
Positive:  CD45, CD44, CD45RO, CD4, CD3, CD40, CCR4, CD45RA, CD26, CD95 
       CD2, CD5, CD62L, CD28 
Negative:  CD127, CD19, PD1, CCR7, CCR10, CXCR3, CCR8, CCR6, CD7, CD274 
       CD30, CXCR4, CD25, TCRab 
PC_ 3 
Positive:  CD62L, TCRab, CD28, CD3, CD4, CXCR4, CCR7, CD45RA, CD127, CD5 
       PD1, CCR4, CD95, CD2 
Negative:  CD26, CXCR3, CD45RO, CD274, CD40, CD44, CCR10, CCR6, CD7, CD30 
       CD19, CD25, CD45, CCR8 
PC_ 4 
Positive:  CCR4, CD5, CD274, CD4, CD30, CCR6, CD44, CD28, CD25, CD45RA 
       CD19, CCR10, CXCR3, PD1 
Negative:  CD40, CD45, CD2, CD62L, CD7, CD26, CXCR4, CCR7, CD127, CD95 
       CD45RO, CCR8, CD3, TCRab 
PC_ 5 
Positive:  CD45RO, CD28, CCR8, CD26, CCR4, PD1, CD4, CCR10, CD40, CD127 
       CD19, TCRab, CD2, CCR7 
Negative:  CD7, CD45RA, CD5, CD44, CCR6, CXCR3, CXCR4, CD274, CD62L, CD30 
       CD3, CD95, CD45, CD25 
Warning: Key 'PC_' taken, using 'apca_' instead
# Identify multimodal neighbors and graphs on All_samples_Merged.
# Cell-specific modality weights are stored as SCT.weight and ADT.weight, as reported by the saved run.

All_samples_Merged <- FindMultiModalNeighbors(
  All_samples_Merged, reduction.list = list("pca", "apca"), 
  dims.list = list(1:30, 1:18), modality.weight.name = c("SCT.weight", "ADT.weight")
)
Calculating cell-specific modality weights
Finding 20 nearest neighbors for each modality.

  |                                                  | 0 % ~calculating  
  |+++++++++++++++++++++++++                         | 50% ~08s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=17s  
Calculating kernel bandwidths

  |                                                  | 0 % ~calculating  
  |+++++++++++++++++++++++++                         | 50% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=02s  
Warning: The number of provided modality.weight.name is not equal to the number of modalities. SCT.weight ADT.weight are used to store the modality weightsFinding multimodal neighbors

  |                                                  | 0 % ~calculating  
  |+++++++++++++++++++++++++                         | 50% ~28s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=59s  

  |                                                  | 0 % ~calculating  
  |+++++++++++++++++++++++++                         | 50% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=02s  
Constructing multimodal KNN graph
Constructing multimodal SNN graph

4. Visualization RNA+ADT

The saved output reports that `adt_CD90` was not found. The source does not establish a valid replacement feature, so no substitute is inferred. The request and its warning are retained as an unavailable feature example; the plot output has not been regenerated.


# The saved run reports that adt_CD90 was not found. No replacement is inferred from this source.
p5 <- FeaturePlot(All_samples_Merged, features = c("adt_CD45RA","adt_CD45RO","adt_CD90"),
                  reduction = 'wnn.umap', max.cutoff = 2, 
                  cols = c("lightgrey","darkgreen"), ncol = 3)
Warning: The following features could not be found adt_CD90Warning: The following requested variables were not found: adt_CD90
p6 <- FeaturePlot(All_samples_Merged, features = c("rna_TRDC","rna_MPO","rna_AVP"), 
                  reduction = 'wnn.umap', max.cutoff = 3, ncol = 3)
p5 / p6


 VlnPlot(All_samples_Merged, features = "SCT.weight", group.by = 'predicted.celltype.l2', sort = TRUE, pt.size = 0.1) +
  NoLegend()

 VlnPlot(All_samples_Merged, features = "ADT.weight", group.by = 'predicted.celltype.l2', sort = TRUE, pt.size = 0.1) +
  NoLegend()

5. Save the Seurat object as an Robj file


save(All_samples_Merged, file = "../0-imp_OBJ_SS/All_samples_Merged_WNN.Robj")
LS0tCnRpdGxlOiAiV05OIGFuYWx5c2lzIG9mIENJVEUtc2VxLCBSTkEgKyBBRFQiCmF1dGhvcjogTmFzaXIgTWFobW9vZCBBYmJhc2kKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6CiAgI3JtZGZvcm1hdHM6OnJlYWR0aGVkb3duCiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICB0b2NfY29sbGFwc2VkOiB0cnVlCi0tLQoKPiAqKlN0YXR1czogcGFydGlhbCByZWZlcmVuY2Ugb25seS4qKiBUaGlzIHBhZ2UgY29udGFpbnMgc2F2ZWQgVU1BUCwgZmVhdHVyZSwgYW5kIG1vZGFsaXR5LXdlaWdodCBwbG90cywgYnV0IHRoZSBzb3VyY2UgU2V1cmF0IG9iamVjdCBpcyBub3QgaW5jbHVkZWQgYW5kIHRoZSBhbmFseXNlcyBoYXZlIG5vdCBiZWVuIHJlcnVuLiBTYXZlZCBvdXRwdXQgcmVwb3J0cyBhIDI4LWl0ZW0gUENBIGNhcCwgYSBtb2RhbGl0eS13ZWlnaHQgbmFtZSBtaXNtYXRjaCwgYW5kIGEgbWlzc2luZyBgYWR0X0NEOTBgIGZlYXR1cmUuIFRyZWF0IHRoZSBlbWJlZGRlZCBwbG90cyBhcyByZWZlcmVuY2VzLCBub3QgYXMgcmVzdWx0cyByZWdlbmVyYXRlZCBmcm9tIHRoZSBzb3VyY2Ugc2hvd24gaGVyZS4KCiMgMS4gbG9hZCBsaWJyYXJpZXMKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkoU2V1cmF0KQpsaWJyYXJ5KFNldXJhdE9iamVjdCkKbGlicmFyeShTZXVyYXREYXRhKQpsaWJyYXJ5KHBhdGNod29yaykKbGlicmFyeShoYXJtb255KQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoY293cGxvdCkKbGlicmFyeShyZXRpY3VsYXRlKQpsaWJyYXJ5KEF6aW11dGgpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoUnRzbmUpCmxpYnJhcnkoaGFybW9ueSkKbGlicmFyeShncmlkRXh0cmEpCmBgYAoKIyAyLiBMb2FkIFNldXJhdCBPYmplY3QgCmBgYHtyIGxvYWRfc2V1cmF0fQoKICMgVGhpcyBvYmplY3QgaXMgbm90IGluY2x1ZGVkLiBSZXBsYWNlIHRoZSBwbGFjZWhvbGRlciB3aXRoIHlvdXIgbG9jYWwgQ0lURS1zZXEgU2V1cmF0IFJvYmogZmlsZS4Kd25uX29iamVjdF9wYXRoIDwtICJwYXRoL3RvL3lvdXJfQ0lURV9zZXFfU2V1cmF0X29iamVjdC5Sb2JqIgppZiAoIWZpbGUuZXhpc3RzKHdubl9vYmplY3RfcGF0aCkpIHsKICBzdG9wKCJTZXQgd25uX29iamVjdF9wYXRoIHRvIGEgbG9jYWwgb2JqZWN0IGZpbGUgYmVmb3JlIHJ1bm5pbmcgdGhpcyByZXBvcnQuIikKfQpsb2FkKHdubl9vYmplY3RfcGF0aCkKaWYgKCFleGlzdHMoIkFsbF9zYW1wbGVzX01lcmdlZCIpKSB7CiAgc3RvcCgiVGhlIFJvYmogbXVzdCBsb2FkIGEgY29tcGF0aWJsZSBTZXVyYXQgb2JqZWN0IG5hbWVkIEFsbF9zYW1wbGVzX01lcmdlZC4iKQp9CiAKICBBbGxfc2FtcGxlc19NZXJnZWQKCgpgYGAKCgojIDMuIERhdGEgUFJFUEVSQVRJT04KClRoZSBzYXZlZCBBRFQgUENBIG91dHB1dCByZXBvcnRzIHRoYXQgcmVxdWVzdGVkIGRpbWVuc2lvbnMgYmV5b25kIDI4IGF2YWlsYWJsZSBpdGVtcyB3ZXJlIGNhcHBlZCBhdCAyOC4gVGhlIHNvdXJjZSBhc2tzIGZvciBgbnBjcyA9IDI4YCwgdGhlbiByZXF1ZXN0cyBgZGltcy5saXN0ID0gbGlzdCgxOjMwLCAxOjE4KWAgZm9yIGBwY2FgIGFuZCBgYXBjYWAuIFRoZSBvcmlnaW5hbCBvYmplY3QgaXMgbm90IGF2YWlsYWJsZSBoZXJlLCBzbyB0aGlzIHJlcG9ydCBjYW5ub3QgZXN0YWJsaXNoIGhvdyBtYW55IGNvbXBvbmVudHMgZWFjaCBzdG9yZWQgcmVkdWN0aW9uIGNvbnRhaW5zIG9yIHdoaWNoIGNhbGwgcHJvZHVjZWQgZWFjaCByZXBlYXRlZCB3YXJuaW5nLiBBbHNvIGNoZWNrIHRoZSBgcGNhYCByZWR1Y3Rpb24gYmVmb3JlIHRoZSBsYXRlciBVTUFQIGNhbGwsIHdoaWNoIHJlcXVlc3RzIGBkaW1zID0gMTozMGAuIFZlcmlmeSB0aGF0IGV2ZXJ5IHJlcXVlc3RlZCBkaW1lbnNpb24gZXhpc3RzIGJlZm9yZSByZXJ1bm5pbmcuCgpUaGUgb3JpZ2luYWwgc291cmNlIHN1cHBsaWVkIG9uZSBgUk5BLndlaWdodGAgbmFtZSBmb3IgdHdvIG1vZGFsaXRpZXMuIFRoZSBzYXZlZCBvdXRwdXQgc2F5cyB0aGUgd2VpZ2h0cyB3ZXJlIHN0b3JlZCBhcyBgU0NULndlaWdodGAgYW5kIGBBRFQud2VpZ2h0YCwgd2hpY2ggdGhlIGZvbGxvd2luZyB2aW9saW4gcGxvdHMgdXNlLiBUaGUgc291cmNlIG5vdyBuYW1lcyBib3RoIG9ic2VydmVkIGNvbHVtbnMgZXhwbGljaXRseS4gVGhlIHdhcm5pbmcgc2hvd24gaW4gdGhlIHNhdmVkIG91dHB1dCBpcyBmcm9tIHRoZSBlYXJsaWVyIHNvdXJjZSwgbm90IGEgcmVnZW5lcmF0ZWQgcnVuLgoKYGBge3IgZGF0YSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTB9CkRlZmF1bHRBc3NheShBbGxfc2FtcGxlc19NZXJnZWQpIDwtICdBRFQnCgpWYXJpYWJsZUZlYXR1cmVzKEFsbF9zYW1wbGVzX01lcmdlZCkgPC0gcm93bmFtZXMoQWxsX3NhbXBsZXNfTWVyZ2VkW1siQURUIl1dKQoKIyB3ZSB3aWxsIHVzZSBhbGwgQURUIGZlYXR1cmVzIGZvciBkaW1lbnNpb25hbCByZWR1Y3Rpb24KIyB3ZSBzZXQgYSBkaW1lbnNpb25hbCByZWR1Y3Rpb24gbmFtZSB0byBhdm9pZCBvdmVyd3JpdGluZyB0aGUgCkFsbF9zYW1wbGVzX01lcmdlZCA8LSBOb3JtYWxpemVEYXRhKEFsbF9zYW1wbGVzX01lcmdlZCwgbm9ybWFsaXphdGlvbi5tZXRob2QgPSAnQ0xSJywgbWFyZ2luID0gMikgJT4lIAogIFNjYWxlRGF0YSgpICU+JSBSdW5QQ0EocmVkdWN0aW9uLm5hbWUgPSAnYXBjYScsIG5wY3MgPTI4LCBtYXhpdCA9IDUwMDApCgoKIyBJZGVudGlmeSBtdWx0aW1vZGFsIG5laWdoYm9ycyBhbmQgZ3JhcGhzIG9uIEFsbF9zYW1wbGVzX01lcmdlZC4KIyBDZWxsLXNwZWNpZmljIG1vZGFsaXR5IHdlaWdodHMgYXJlIHN0b3JlZCBhcyBTQ1Qud2VpZ2h0IGFuZCBBRFQud2VpZ2h0LCBhcyByZXBvcnRlZCBieSB0aGUgc2F2ZWQgcnVuLgoKQWxsX3NhbXBsZXNfTWVyZ2VkIDwtIEZpbmRNdWx0aU1vZGFsTmVpZ2hib3JzKAogIEFsbF9zYW1wbGVzX01lcmdlZCwgcmVkdWN0aW9uLmxpc3QgPSBsaXN0KCJwY2EiLCAiYXBjYSIpLCAKICBkaW1zLmxpc3QgPSBsaXN0KDE6MzAsIDE6MTgpLCBtb2RhbGl0eS53ZWlnaHQubmFtZSA9IGMoIlNDVC53ZWlnaHQiLCAiQURULndlaWdodCIpCikKCgoKCmBgYAoKCiMgNC4gVmlzdWFsaXphdGlvbiBSTkErQURUCmBgYHtyIFZpc3VhbGl6ZSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTB9CgpBbGxfc2FtcGxlc19NZXJnZWQgPC0gUnVuVU1BUChBbGxfc2FtcGxlc19NZXJnZWQsIG5uLm5hbWUgPSAid2VpZ2h0ZWQubm4iLCByZWR1Y3Rpb24ubmFtZSA9ICJ3bm4udW1hcCIsIHJlZHVjdGlvbi5rZXkgPSAid25uVU1BUF8iKQpBbGxfc2FtcGxlc19NZXJnZWQgPC0gRmluZENsdXN0ZXJzKEFsbF9zYW1wbGVzX01lcmdlZCwgZ3JhcGgubmFtZSA9ICJ3c25uIiwgYWxnb3JpdGhtID0gMywgcmVzb2x1dGlvbiA9IDIsIHZlcmJvc2UgPSBGQUxTRSkKCnAxIDwtIERpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAnd25uLnVtYXAnLCBsYWJlbCA9IFRSVUUsIHJlcGVsID0gVFJVRSwgbGFiZWwuc2l6ZSA9IDIuNSkgKyBOb0xlZ2VuZCgpCnAyIDwtIERpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAnd25uLnVtYXAnLCBncm91cC5ieSA9ICdwcmVkaWN0ZWQuY2VsbHR5cGUubDInLCBsYWJlbCA9IFRSVUUsIHJlcGVsID0gVFJVRSwgbGFiZWwuc2l6ZSA9IDIuNSkgKyBOb0xlZ2VuZCgpCnAxICsgcDIKCgpgYGAKCmBgYHtyIFZpc3VhbGl6ZTIsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTEwfQoKQWxsX3NhbXBsZXNfTWVyZ2VkIDwtIFJ1blVNQVAoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAncGNhJywgZGltcyA9IDE6MzAsIGFzc2F5ID0gJ1JOQScsIAogICAgICAgICAgICAgIHJlZHVjdGlvbi5uYW1lID0gJ3JuYS51bWFwJywgcmVkdWN0aW9uLmtleSA9ICdybmFVTUFQXycpCkFsbF9zYW1wbGVzX01lcmdlZCA8LSBSdW5VTUFQKEFsbF9zYW1wbGVzX01lcmdlZCwgcmVkdWN0aW9uID0gJ2FwY2EnLCBkaW1zID0gMToxOCwgYXNzYXkgPSAnQURUJywgCiAgICAgICAgICAgICAgcmVkdWN0aW9uLm5hbWUgPSAnYWR0LnVtYXAnLCByZWR1Y3Rpb24ua2V5ID0gJ2FkdFVNQVBfJykKCnAzIDwtIERpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAncm5hLnVtYXAnLCBncm91cC5ieSA9ICdwcmVkaWN0ZWQuY2VsbHR5cGUubDInLCBsYWJlbCA9IFRSVUUsIAogICAgICAgICAgICAgIHJlcGVsID0gVFJVRSwgbGFiZWwuc2l6ZSA9IDIuNSkgKyBOb0xlZ2VuZCgpCnA0IDwtIERpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAnYWR0LnVtYXAnLCBncm91cC5ieSA9ICdwcmVkaWN0ZWQuY2VsbHR5cGUubDInLCBsYWJlbCA9IFRSVUUsIAogICAgICAgICAgICAgIHJlcGVsID0gVFJVRSwgbGFiZWwuc2l6ZSA9IDIuNSkgKyBOb0xlZ2VuZCgpCnAzICsgcDQKYGBgCgoKYGBge3IgVmlzdWFsaXplMywgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTB9CgojIFRoZSBzYXZlZCBydW4gcmVwb3J0cyB0aGF0IGFkdF9DRDkwIHdhcyBub3QgZm91bmQuIE5vIHJlcGxhY2VtZW50IGlzIGluZmVycmVkIGZyb20gdGhpcyBzb3VyY2UuCnA1IDwtIEZlYXR1cmVQbG90KEFsbF9zYW1wbGVzX01lcmdlZCwgZmVhdHVyZXMgPSBjKCJhZHRfQ0Q0NVJBIiwiYWR0X0NENDVSTyIsImFkdF9DRDkwIiksCiAgICAgICAgICAgICAgICAgIHJlZHVjdGlvbiA9ICd3bm4udW1hcCcsIG1heC5jdXRvZmYgPSAyLCAKICAgICAgICAgICAgICAgICAgY29scyA9IGMoImxpZ2h0Z3JleSIsImRhcmtncmVlbiIpLCBuY29sID0gMykKcDYgPC0gRmVhdHVyZVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCBmZWF0dXJlcyA9IGMoInJuYV9UUkRDIiwicm5hX01QTyIsInJuYV9BVlAiKSwgCiAgICAgICAgICAgICAgICAgIHJlZHVjdGlvbiA9ICd3bm4udW1hcCcsIG1heC5jdXRvZmYgPSAzLCBuY29sID0gMykKcDUgLyBwNgpgYGAKYGBge3IgVmlzdWFsaXplNCwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTB9CgogVmxuUGxvdChBbGxfc2FtcGxlc19NZXJnZWQsIGZlYXR1cmVzID0gIlNDVC53ZWlnaHQiLCBncm91cC5ieSA9ICdwcmVkaWN0ZWQuY2VsbHR5cGUubDInLCBzb3J0ID0gVFJVRSwgcHQuc2l6ZSA9IDAuMSkgKwogIE5vTGVnZW5kKCkKIFZsblBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCBmZWF0dXJlcyA9ICJBRFQud2VpZ2h0IiwgZ3JvdXAuYnkgPSAncHJlZGljdGVkLmNlbGx0eXBlLmwyJywgc29ydCA9IFRSVUUsIHB0LnNpemUgPSAwLjEpICsKICBOb0xlZ2VuZCgpCgpgYGAKIyA1LiBTYXZlIHRoZSBTZXVyYXQgb2JqZWN0IGFzIGFuIFJvYmogZmlsZQpgYGB7ciBzYXZlUk9CSn0KCnNhdmUoQWxsX3NhbXBsZXNfTWVyZ2VkLCBmaWxlID0gIi4uLzAtaW1wX09CSl9TUy9BbGxfc2FtcGxlc19NZXJnZWRfV05OLlJvYmoiKQoKCmBgYAoKCgoK