1. load libraries

2. Load Seurat Object


#Load Seurat Object merged from cell lines and a control(PBMC) after filtration
SS_All_samples_Merged <- load("0-OBJ/CD4Tcells_no_B_cells_in_L4_SCT_Ready_for_integration.robj")

All_samples_Merged
An object of class Seurat 
62931 features across 49388 samples within 6 assays 
Active assay: SCT (26179 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: integrated_dr, ref.umap, pca, umap

3. Data PREPARATION

options(future.globals.maxSize = 1024 * 1024 * 1024)  # 1 GB

# Data Preparation for Seurat v5
alldata <- All_samples_Merged



# Split the object by 'orig.ident' for individual dataset processing
alldata.list <- SplitObject(alldata, split.by = "orig.ident")

# Normalize and identify variable features for each dataset in the list
alldata.list <- lapply(X = alldata.list, FUN = function(x) {
    x <- SCTransform(x, verbose = F)
    })
Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : Different cells and/or features from existing assay SCTAvis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : Different cells and/or features from existing assay SCTAvis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : Different cells and/or features from existing assay SCTAvis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : Different cells and/or features from existing assay SCTAvis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : Different cells and/or features from existing assay SCTAvis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : Different cells and/or features from existing assay SCTAvis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : Different cells and/or features from existing assay SCTAvis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : Different cells and/or features from existing assay SCTAvis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : useNames = NA is deprecated. Instead, specify either useNames = TRUE or useNames = FALSE.Avis : Different cells and/or features from existing assay SCT
# Select integration features across datasets
hvgs_all <- SelectIntegrationFeatures(alldata.list, nfeatures = 3000)

# Scale and PCA on each dataset using selected integration features
alldata.list <- lapply(alldata.list, function(x) {
    x <- RunPCA(x, features = hvgs_all, verbose = FALSE)
})

4. rpca-integration


alldata.list <- PrepSCTIntegration(alldata.list, anchor.features = hvgs_all)

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~21s          
  |++++++++++++                                      | 22% ~19s          
  |+++++++++++++++++                                 | 33% ~16s          
  |+++++++++++++++++++++++                           | 44% ~14s          
  |++++++++++++++++++++++++++++                      | 56% ~11s          
  |++++++++++++++++++++++++++++++++++                | 67% ~08s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=23s  
alldata.anchors <- FindIntegrationAnchors(object.list = alldata.list, anchor.features = hvgs_all, reduction =  "rpca", normalization.method = "SCT")
Computing within dataset neighborhoods

  |                                                  | 0 % ~calculating  
  |++++++                                            | 11% ~15s          
  |++++++++++++                                      | 22% ~14s          
  |+++++++++++++++++                                 | 33% ~12s          
  |+++++++++++++++++++++++                           | 44% ~10s          
  |++++++++++++++++++++++++++++                      | 56% ~08s          
  |++++++++++++++++++++++++++++++++++                | 67% ~06s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=16s  
Finding all pairwise anchors

  |                                                  | 0 % ~calculating  
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 1789 anchors

  |++                                                | 3 % ~05m 35s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 1153 anchors

  |+++                                               | 6 % ~05m 27s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 1908 anchors

  |+++++                                             | 8 % ~05m 24s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 859 anchors

  |++++++                                            | 11% ~05m 16s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 1441 anchors

  |+++++++                                           | 14% ~05m 06s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 2444 anchors

  |+++++++++                                         | 17% ~04m 56s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 1083 anchors

  |++++++++++                                        | 19% ~04m 45s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 1830 anchors

  |++++++++++++                                      | 22% ~04m 39s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 2432 anchors

  |+++++++++++++                                     | 25% ~04m 29s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 2937 anchors

  |++++++++++++++                                    | 28% ~04m 19s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 1187 anchors

  |++++++++++++++++                                  | 31% ~04m 07s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 1629 anchors

  |+++++++++++++++++                                 | 33% ~03m 56s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 2564 anchors

  |+++++++++++++++++++                               | 36% ~03m 46s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 1762 anchors

  |++++++++++++++++++++                              | 39% ~03m 36s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 2614 anchors

  |+++++++++++++++++++++                             | 42% ~03m 26s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 988 anchors

  |+++++++++++++++++++++++                           | 44% ~03m 15s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 1736 anchors

  |++++++++++++++++++++++++                          | 47% ~03m 06s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 2066 anchors

  |+++++++++++++++++++++++++                         | 50% ~02m 56s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 2784 anchors

  |+++++++++++++++++++++++++++                       | 53% ~02m 46s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 3732 anchors

  |++++++++++++++++++++++++++++                      | 56% ~02m 36s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 2935 anchors

  |++++++++++++++++++++++++++++++                    | 58% ~02m 26s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 655 anchors

  |+++++++++++++++++++++++++++++++                   | 61% ~02m 15s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 662 anchors

  |++++++++++++++++++++++++++++++++                  | 64% ~02m 05s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 637 anchors

  |++++++++++++++++++++++++++++++++++                | 67% ~01m 55s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 567 anchors

  |+++++++++++++++++++++++++++++++++++               | 69% ~01m 46s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 603 anchors

  |+++++++++++++++++++++++++++++++++++++             | 72% ~01m 36s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 774 anchors

  |++++++++++++++++++++++++++++++++++++++            | 75% ~01m 26s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 650 anchors

  |+++++++++++++++++++++++++++++++++++++++           | 78% ~01m 16s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 519 anchors

  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01m 06s      
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 432 anchors

  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~56s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 402 anchors

  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~47s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 337 anchors

  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~37s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 416 anchors

  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~28s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 468 anchors

  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~18s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 382 anchors

  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~09s          
Projecting new data onto SVD
Projecting new data onto SVD
Finding neighborhoods
Finding anchors
    Found 1241 anchors

  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=05m 27s
alldata.int <- IntegrateData(anchorset = alldata.anchors, normalization.method = "SCT")
[1] 1
Avis : Different cells and/or features from existing assay SCTAvis : Layer counts isn't present in the assay object; returning NULL
[1] 2
Avis : Different cells and/or features from existing assay SCTAvis : Layer counts isn't present in the assay object; returning NULL
[1] 3
Avis : Different cells and/or features from existing assay SCTAvis : Layer counts isn't present in the assay object; returning NULL
[1] 4
Avis : Different cells and/or features from existing assay SCTAvis : Layer counts isn't present in the assay object; returning NULL
[1] 5
Avis : Different cells and/or features from existing assay SCTAvis : Layer counts isn't present in the assay object; returning NULL
[1] 6
Avis : Different cells and/or features from existing assay SCTAvis : Layer counts isn't present in the assay object; returning NULL
[1] 7
Avis : Different cells and/or features from existing assay SCTAvis : Layer counts isn't present in the assay object; returning NULL
[1] 8
Avis : Different cells and/or features from existing assay SCTAvis : Layer counts isn't present in the assay object; returning NULL
[1] 9
Avis : Different cells and/or features from existing assay SCTAvis : Layer counts isn't present in the assay object; returning NULLMerging dataset 7 into 5
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Avis : Layer counts isn't present in the assay object; returning NULLMerging dataset 6 into 5 7
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Avis : Layer counts isn't present in the assay object; returning NULLMerging dataset 4 into 3
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Avis : Layer counts isn't present in the assay object; returning NULLMerging dataset 9 into 8
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Avis : Layer counts isn't present in the assay object; returning NULLMerging dataset 3 4 into 5 7 6
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Avis : Layer counts isn't present in the assay object; returning NULLMerging dataset 1 into 2
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Avis : Layer counts isn't present in the assay object; returning NULLMerging dataset 2 1 into 5 7 6 3 4
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Avis : Layer counts isn't present in the assay object; returning NULLMerging dataset 8 9 into 5 7 6 3 4 2 1
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Avis : Layer counts isn't present in the assay object; returning NULLAvis : sparse->dense coercion: allocating vector of size 1.1 GiBAvis : Assay integrated changing from Assay to SCTAssayAvis : Layer counts isn't present in the assay object; returning NULLAvis : Different cells and/or features from existing assay SCT

Integration visualization-rpca


DefaultAssay(alldata.int) <- "integrated"

#Run Dimensionality reduction on integrated space
alldata.int <- RunPCA(alldata.int, features = hvgs_all, npcs = 50, do.print = TRUE, pcs.print = 1:5, genes.print = 15, verbose = FALSE)

# TEST-1
# get significant PCs
stdv <- All_samples_Merged[["pca"]]@stdev
sum.stdv <- sum(All_samples_Merged[["pca"]]@stdev)
percent.stdv <- (stdv / sum.stdv) * 100
cumulative <- cumsum(percent.stdv)
co1 <- which(cumulative > 90 & percent.stdv < 5)[1]
co2 <- sort(which((percent.stdv[1:length(percent.stdv) - 1] - 
                       percent.stdv[2:length(percent.stdv)]) > 0.1), 
              decreasing = T)[1] + 1
min.pc <- min(co1, co2)
min.pc
[1] 16
alldata.int <- RunUMAP(alldata.int,  dims = 1:16, verbose = FALSE)

# by cell line
P1 <- DimPlot(alldata.int, reduction = "umap", group.by = "cell_line")+ ggtitle("UMAP seurat_integrated_rpca by cell line")
P1


DimPlot(alldata.int, reduction = "umap", group.by = "cell_line", label = T, label.box = T)+ ggtitle("UMAP seurat_integrated_rpca by cell line")


alldata.int <- FindNeighbors(alldata.int, reduction = "pca", dims = 1:16, verbose = FALSE)
alldata.int <- FindClusters(alldata.int, resolution = 0.5, verbose = FALSE)

# by celltype
P2 <- DimPlot(alldata.int, reduction = "umap", group.by = "cell_line")+ ggtitle("UMAP seurat_integrated_rpca by cell line")
P2


DimPlot(alldata.int, reduction = "umap", group.by = "cell_line", label = T, label.box = T)+ ggtitle("UMAP seurat_integrated_rpca by cell line")


# by celltype
P3 <- DimPlot(alldata.int, reduction = "umap", group.by = "predicted.celltype.l2", label = T, label.box = T)+ ggtitle("UMAP seurat_integrated_ by Annotation")
P3


DimPlot(alldata.int, reduction = "umap", group.by = "predicted.celltype.l2", label = T, label.box = T)+ ggtitle("UMAP seurat_integrated_ by Annotation")


# Visualize UMAP with clusters
DimPlot(alldata.int, reduction = "umap", group.by = "seurat_clusters", label = TRUE, label.box = TRUE) +
  ggtitle("UMAP with Clusters (Resolution 0.5)")

Marker Gene Visualization


DefaultAssay(alldata.int) <- "SCT"


# Set marker genes specific to requested immune cell types
myfeatures1 <- c("CD19", "CD79A", "MS4A1", # B cells
                "CD14", "LYZ", "FCGR3A", # Monocytes
                "CSF1R", "CD68", # Macrophages
                "NKG7", "GNLY", "KIR3DL1", # NK cells
                "MKI67", # Proliferating NK cells
                "CD34", "KIT", # HSPCs
                "CD3E", "CCR7", # T cells
                "SELL", "CD45RO", # Tnaive, Tcm
                "CD44", "CD45RA") # Tem, Temra

cd4_feature_plot1 <- FeaturePlot(
  alldata.int, 
  features = myfeatures1, 
  reduction = "umap", 
  ncol = 4
) + 
  ggtitle("CD4 T Cell Marker Expression - Harmony Integration") +
  NoLegend()
Avis : Could not find CD34 in the default search locations, found in 'RNA' assay insteadAvis : Could not find CD45RO in the default search locations, found in 'ADT' assay insteadAvis : Could not find CD45RA in the default search locations, found in 'ADT' assay instead
# Display the plot
print(cd4_feature_plot1)


# Define markers specific to CD4 T cells and their subsets
cd4_markers <- c(
  "CD4",          # General CD4 T cells
  "IL7R",         # Naive T cells
  "CCR7",         # T central memory (Tcm) cells
  "SELL",         # T naive cells
  "FOXP3",        # Regulatory T cells (Tregs)
  "IL2RA",        # Activated T cells
  "PDCD1",        # Exhausted T cells
  "LAG3",         # Exhausted T cells
  "TIGIT",        # Exhausted T cells
  "GATA3",        # Th2 cells
  "TBX21",        # Th1 cells
  "RORC",         # Th17 cells
  "BCL6"          # T follicular helper (Tfh) cells
)

# Visualize marker genes for CD4 T cells
cd4_feature_plot2 <- FeaturePlot(
  alldata.int, 
  features = cd4_markers, 
  reduction = "umap", 
  ncol = 4
) + 
  ggtitle("CD4 T Cell Marker Expression - Harmony Integration") +
  NoLegend()

# Display the plot
print(cd4_feature_plot2)

CD4 T Cell Marker Visualization

# Set marker genes specific to CD4 T cell biology and states
cd4_markers <- c(
    # Core T cell markers
    "CD3E",     # T cell marker
    "CD4",      # CD4 T cell marker
    
    # Naive/Memory markers
    "CCR7",     # Naive/Central memory
    "SELL",     # L-selectin, naive marker
    "CD27",     # Memory marker
    "IL7R",     # Naive/Memory marker
    
    # Activation/State markers
    "IL2RA",    # CD25, activation marker
    "CD69",     # Early activation
    "HLA-DRA",  # Activation marker
    
    # Exhaustion markers
    "PDCD1",    # PD-1
    "LAG3",     # Exhaustion marker
    "TIGIT",    # Exhaustion marker
    
    # Regulatory T cell markers
    "FOXP3",    # Treg marker
    "IL2RA",    # CD25, Treg marker
    "CTLA4",    # Treg/exhaustion marker
    
    # Effector/Function markers
    "IL2",      # T cell function
    "IFNG",     # Th1
    "IL4",      # Th2
    "IL13",     # Th2
    "IL17A"     # Th17
)

# Create feature plots with better visualization
FeaturePlot(alldata.int, 
            features = cd4_markers, 
            reduction = "umap", 
            ncol = 4,
            pt.size = 0.1,           # Smaller point size for better resolution
            min.cutoff = "q1",       # Remove bottom 1% of expression
            max.cutoff = "q99",      # Remove top 1% of expression
            order = TRUE) +          # Plot highest expressing cells on top
    ggtitle("CD4 T Cell Marker Expression - Harmony Integration") +
    theme(plot.title = element_text(size = 16, face = "bold")) +
    NoLegend()
Avis : Found the following features in more than one assay, excluding the default. We will not include these in the final data frame: PDCD1, LAG3, FOXP3, CTLA4, IL2, IFNG, IL4, IL13, IL17AAvis : The following requested variables were not found: PDCD1, LAG3, FOXP3, CTLA4, IL2, IFNG, IL4, IL13, IL17A

# Optional: Add violin plots to see expression distribution across clusters
VlnPlot(alldata.int, 
        features = cd4_markers[1:20], # First 8 markers
        stack = TRUE,
        flip = TRUE) +
        ggtitle("CD4 T Cell Marker Distribution Across Clusters")
Avis : Found the following features in more than one assay, excluding the default. We will not include these in the final data frame: PDCD1, LAG3, FOXP3, CTLA4, IL2, IFNG, IL4, IL13, IL17AAvis : The following requested variables were not found: PDCD1, LAG3, FOXP3, CTLA4, IL2, IFNG, IL4, IL13, IL17A

LS0tCnRpdGxlOiAiU2V1cmF0IEludGVncmF0aW9uIG9mIFBCTUMxMHgtUnNlcnZlci1ycGNhLXBhcnQxIgphdXRob3I6IE5hc2lyIE1haG1vb2QgQWJiYXNpCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCIKb3V0cHV0OgogICNybWRmb3JtYXRzOjpyZWFkdGhlZG93bgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdG9jX2NvbGxhcHNlZDogdHJ1ZQotLS0KCiMgMS4gbG9hZCBsaWJyYXJpZXMKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CgpsaWJyYXJ5KFNldXJhdCkKbGlicmFyeShTZXVyYXRPYmplY3QpCmxpYnJhcnkoU2V1cmF0RGF0YSkKbGlicmFyeShwYXRjaHdvcmspCmxpYnJhcnkoQXppbXV0aCkKbGlicmFyeShkcGx5cikKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShybWFya2Rvd24pCmxpYnJhcnkodGlueXRleCkKCgpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGRpdHRvU2VxKQpsaWJyYXJ5KGdncmVwZWwpCiNsaWJyYXJ5KGdndHJlZSkKbGlicmFyeShwYXJhbGxlbCkKbGlicmFyeShwbG90bHkpICAjIDNEIHBsb3QKbGlicmFyeShTZXVyYXQpICAjIElkZW50cygpCmxpYnJhcnkoU2V1cmF0RGlzaykgICMgU2F2ZUg1U2V1cmF0KCkKbGlicmFyeSh0aWJibGUpICAjIHJvd25uYW1lc190b19jb2x1bW4KbGlicmFyeShoYXJtb255KSAjIFJ1bkhhcm1vbnkoKQojb3B0aW9ucyhtYy5jb3JlcyA9IGRldGVjdENvcmVzKCkgLSAxKQoKCgpgYGAKCgojIDIuIExvYWQgU2V1cmF0IE9iamVjdCAKYGBge3IgbG9hZF9zZXVyYXR9CgojTG9hZCBTZXVyYXQgT2JqZWN0IG1lcmdlZCBmcm9tIGNlbGwgbGluZXMgYW5kIGEgY29udHJvbChQQk1DKSBhZnRlciBmaWx0cmF0aW9uCmxvYWQoIjAtT0JKL0NENFRjZWxsc19ub19CX2NlbGxzX2luX0w0X1NDVF9SZWFkeV9mb3JfaW50ZWdyYXRpb24ucm9iaiIpCgpBbGxfc2FtcGxlc19NZXJnZWQKYGBgCgoKCgojIDMuIERhdGEgUFJFUEFSQVRJT04KYGBge3IgZGF0YSwgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MTJ9Cm9wdGlvbnMoZnV0dXJlLmdsb2JhbHMubWF4U2l6ZSA9IDEwMjQgKiAxMDI0ICogMTAyNCkgICMgMSBHQgoKIyBEYXRhIFByZXBhcmF0aW9uIGZvciBTZXVyYXQgdjUKYWxsZGF0YSA8LSBBbGxfc2FtcGxlc19NZXJnZWQKCgoKIyBTcGxpdCB0aGUgb2JqZWN0IGJ5ICdvcmlnLmlkZW50JyBmb3IgaW5kaXZpZHVhbCBkYXRhc2V0IHByb2Nlc3NpbmcKYWxsZGF0YS5saXN0IDwtIFNwbGl0T2JqZWN0KGFsbGRhdGEsIHNwbGl0LmJ5ID0gIm9yaWcuaWRlbnQiKQoKIyBOb3JtYWxpemUgYW5kIGlkZW50aWZ5IHZhcmlhYmxlIGZlYXR1cmVzIGZvciBlYWNoIGRhdGFzZXQgaW4gdGhlIGxpc3QKYWxsZGF0YS5saXN0IDwtIGxhcHBseShYID0gYWxsZGF0YS5saXN0LCBGVU4gPSBmdW5jdGlvbih4KSB7CiAgICB4IDwtIFNDVHJhbnNmb3JtKHgsIHZlcmJvc2UgPSBGKQogICAgfSkKCgojIFNlbGVjdCBpbnRlZ3JhdGlvbiBmZWF0dXJlcyBhY3Jvc3MgZGF0YXNldHMKaHZnc19hbGwgPC0gU2VsZWN0SW50ZWdyYXRpb25GZWF0dXJlcyhhbGxkYXRhLmxpc3QsIG5mZWF0dXJlcyA9IDMwMDApCgojIFNjYWxlIGFuZCBQQ0Egb24gZWFjaCBkYXRhc2V0IHVzaW5nIHNlbGVjdGVkIGludGVncmF0aW9uIGZlYXR1cmVzCmFsbGRhdGEubGlzdCA8LSBsYXBwbHkoYWxsZGF0YS5saXN0LCBmdW5jdGlvbih4KSB7CiAgICB4IDwtIFJ1blBDQSh4LCBmZWF0dXJlcyA9IGh2Z3NfYWxsLCB2ZXJib3NlID0gRkFMU0UpCn0pCgoKYGBgCgoKIyA0LiBycGNhLWludGVncmF0aW9uCmBgYHtyIGludGVncmF0aW9uLXJwY2ExLCBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0xMn0KCmFsbGRhdGEubGlzdCA8LSBQcmVwU0NUSW50ZWdyYXRpb24oYWxsZGF0YS5saXN0LCBhbmNob3IuZmVhdHVyZXMgPSBodmdzX2FsbCkKCmFsbGRhdGEuYW5jaG9ycyA8LSBGaW5kSW50ZWdyYXRpb25BbmNob3JzKG9iamVjdC5saXN0ID0gYWxsZGF0YS5saXN0LCBhbmNob3IuZmVhdHVyZXMgPSBodmdzX2FsbCwgcmVkdWN0aW9uID0gICJycGNhIiwgbm9ybWFsaXphdGlvbi5tZXRob2QgPSAiU0NUIikKCmFsbGRhdGEuaW50IDwtIEludGVncmF0ZURhdGEoYW5jaG9yc2V0ID0gYWxsZGF0YS5hbmNob3JzLCBub3JtYWxpemF0aW9uLm1ldGhvZCA9ICJTQ1QiKQoKCgpgYGAKCiMjIEludGVncmF0aW9uIHZpc3VhbGl6YXRpb24tcnBjYQpgYGB7ciBpbnRlZ3JhdGlvbi12aXN1YWxpemF0aW9uMSwgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MTJ9CgpEZWZhdWx0QXNzYXkoYWxsZGF0YS5pbnQpIDwtICJpbnRlZ3JhdGVkIgoKI1J1biBEaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24gb24gaW50ZWdyYXRlZCBzcGFjZQphbGxkYXRhLmludCA8LSBSdW5QQ0EoYWxsZGF0YS5pbnQsIGZlYXR1cmVzID0gaHZnc19hbGwsIG5wY3MgPSA1MCwgZG8ucHJpbnQgPSBUUlVFLCBwY3MucHJpbnQgPSAxOjUsIGdlbmVzLnByaW50ID0gMTUsIHZlcmJvc2UgPSBGQUxTRSkKCiMgVEVTVC0xCiMgZ2V0IHNpZ25pZmljYW50IFBDcwpzdGR2IDwtIEFsbF9zYW1wbGVzX01lcmdlZFtbInBjYSJdXUBzdGRldgpzdW0uc3RkdiA8LSBzdW0oQWxsX3NhbXBsZXNfTWVyZ2VkW1sicGNhIl1dQHN0ZGV2KQpwZXJjZW50LnN0ZHYgPC0gKHN0ZHYgLyBzdW0uc3RkdikgKiAxMDAKY3VtdWxhdGl2ZSA8LSBjdW1zdW0ocGVyY2VudC5zdGR2KQpjbzEgPC0gd2hpY2goY3VtdWxhdGl2ZSA+IDkwICYgcGVyY2VudC5zdGR2IDwgNSlbMV0KY28yIDwtIHNvcnQod2hpY2goKHBlcmNlbnQuc3RkdlsxOmxlbmd0aChwZXJjZW50LnN0ZHYpIC0gMV0gLSAKICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50LnN0ZHZbMjpsZW5ndGgocGVyY2VudC5zdGR2KV0pID4gMC4xKSwgCiAgICAgICAgICAgICAgZGVjcmVhc2luZyA9IFQpWzFdICsgMQptaW4ucGMgPC0gbWluKGNvMSwgY28yKQptaW4ucGMKCgphbGxkYXRhLmludCA8LSBSdW5VTUFQKGFsbGRhdGEuaW50LCAgZGltcyA9IDE6MTYsIHZlcmJvc2UgPSBGQUxTRSkKCiMgYnkgY2VsbCBsaW5lClAxIDwtIERpbVBsb3QoYWxsZGF0YS5pbnQsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAiY2VsbF9saW5lIikrIGdndGl0bGUoIlVNQVAgc2V1cmF0X2ludGVncmF0ZWRfcnBjYSBieSBjZWxsIGxpbmUiKQpQMQoKRGltUGxvdChhbGxkYXRhLmludCwgcmVkdWN0aW9uID0gInVtYXAiLCBncm91cC5ieSA9ICJjZWxsX2xpbmUiLCBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQpKyBnZ3RpdGxlKCJVTUFQIHNldXJhdF9pbnRlZ3JhdGVkX3JwY2EgYnkgY2VsbCBsaW5lIikKCmFsbGRhdGEuaW50IDwtIEZpbmROZWlnaGJvcnMoYWxsZGF0YS5pbnQsIHJlZHVjdGlvbiA9ICJwY2EiLCBkaW1zID0gMToxNiwgdmVyYm9zZSA9IEZBTFNFKQphbGxkYXRhLmludCA8LSBGaW5kQ2x1c3RlcnMoYWxsZGF0YS5pbnQsIHJlc29sdXRpb24gPSAwLjUsIHZlcmJvc2UgPSBGQUxTRSkKCiMgYnkgY2VsbHR5cGUKUDIgPC0gRGltUGxvdChhbGxkYXRhLmludCwgcmVkdWN0aW9uID0gInVtYXAiLCBncm91cC5ieSA9ICJjZWxsX2xpbmUiKSsgZ2d0aXRsZSgiVU1BUCBzZXVyYXRfaW50ZWdyYXRlZF9ycGNhIGJ5IGNlbGwgbGluZSIpClAyCgpEaW1QbG90KGFsbGRhdGEuaW50LCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gImNlbGxfbGluZSIsIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCkrIGdndGl0bGUoIlVNQVAgc2V1cmF0X2ludGVncmF0ZWRfcnBjYSBieSBjZWxsIGxpbmUiKQoKIyBieSBjZWxsdHlwZQpQMyA8LSBEaW1QbG90KGFsbGRhdGEuaW50LCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gInByZWRpY3RlZC5jZWxsdHlwZS5sMiIsIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCkrIGdndGl0bGUoIlVNQVAgc2V1cmF0X2ludGVncmF0ZWRfIGJ5IEFubm90YXRpb24iKQpQMwoKRGltUGxvdChhbGxkYXRhLmludCwgcmVkdWN0aW9uID0gInVtYXAiLCBncm91cC5ieSA9ICJwcmVkaWN0ZWQuY2VsbHR5cGUubDIiLCBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQpKyBnZ3RpdGxlKCJVTUFQIHNldXJhdF9pbnRlZ3JhdGVkXyBieSBBbm5vdGF0aW9uIikKCiMgVmlzdWFsaXplIFVNQVAgd2l0aCBjbHVzdGVycwpEaW1QbG90KGFsbGRhdGEuaW50LCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gInNldXJhdF9jbHVzdGVycyIsIGxhYmVsID0gVFJVRSwgbGFiZWwuYm94ID0gVFJVRSkgKwogIGdndGl0bGUoIlVNQVAgd2l0aCBDbHVzdGVycyAoUmVzb2x1dGlvbiAwLjUpIikKCmBgYAoKCgojIyAgTWFya2VyIEdlbmUgVmlzdWFsaXphdGlvbgpgYGB7ciBmZWF0dXJlcGxvdC1ycGNhMSwgZmlnLmhlaWdodD0xNCwgZmlnLndpZHRoPTE4fQoKRGVmYXVsdEFzc2F5KGFsbGRhdGEuaW50KSA8LSAiU0NUIgoKCiMgU2V0IG1hcmtlciBnZW5lcyBzcGVjaWZpYyB0byByZXF1ZXN0ZWQgaW1tdW5lIGNlbGwgdHlwZXMKbXlmZWF0dXJlczEgPC0gYygiQ0QxOSIsICJDRDc5QSIsICJNUzRBMSIsICMgQiBjZWxscwogICAgICAgICAgICAgICAgIkNEMTQiLCAiTFlaIiwgIkZDR1IzQSIsICMgTW9ub2N5dGVzCiAgICAgICAgICAgICAgICAiQ1NGMVIiLCAiQ0Q2OCIsICMgTWFjcm9waGFnZXMKICAgICAgICAgICAgICAgICJOS0c3IiwgIkdOTFkiLCAiS0lSM0RMMSIsICMgTksgY2VsbHMKICAgICAgICAgICAgICAgICJNS0k2NyIsICMgUHJvbGlmZXJhdGluZyBOSyBjZWxscwogICAgICAgICAgICAgICAgIkNEMzQiLCAiS0lUIiwgIyBIU1BDcwogICAgICAgICAgICAgICAgIkNEM0UiLCAiQ0NSNyIsICMgVCBjZWxscwogICAgICAgICAgICAgICAgIlNFTEwiLCAiQ0Q0NVJPIiwgIyBUbmFpdmUsIFRjbQogICAgICAgICAgICAgICAgIkNENDQiLCAiQ0Q0NVJBIikgIyBUZW0sIFRlbXJhCgpjZDRfZmVhdHVyZV9wbG90MSA8LSBGZWF0dXJlUGxvdCgKICBhbGxkYXRhLmludCwgCiAgZmVhdHVyZXMgPSBteWZlYXR1cmVzMSwgCiAgcmVkdWN0aW9uID0gInVtYXAiLCAKICBuY29sID0gNAopICsgCiAgZ2d0aXRsZSgiQ0Q0IFQgQ2VsbCBNYXJrZXIgRXhwcmVzc2lvbiAtIEhhcm1vbnkgSW50ZWdyYXRpb24iKSArCiAgTm9MZWdlbmQoKQoKIyBEaXNwbGF5IHRoZSBwbG90CnByaW50KGNkNF9mZWF0dXJlX3Bsb3QxKQoKIyBEZWZpbmUgbWFya2VycyBzcGVjaWZpYyB0byBDRDQgVCBjZWxscyBhbmQgdGhlaXIgc3Vic2V0cwpjZDRfbWFya2VycyA8LSBjKAogICJDRDQiLCAgICAgICAgICAjIEdlbmVyYWwgQ0Q0IFQgY2VsbHMKICAiSUw3UiIsICAgICAgICAgIyBOYWl2ZSBUIGNlbGxzCiAgIkNDUjciLCAgICAgICAgICMgVCBjZW50cmFsIG1lbW9yeSAoVGNtKSBjZWxscwogICJTRUxMIiwgICAgICAgICAjIFQgbmFpdmUgY2VsbHMKICAiRk9YUDMiLCAgICAgICAgIyBSZWd1bGF0b3J5IFQgY2VsbHMgKFRyZWdzKQogICJJTDJSQSIsICAgICAgICAjIEFjdGl2YXRlZCBUIGNlbGxzCiAgIlBEQ0QxIiwgICAgICAgICMgRXhoYXVzdGVkIFQgY2VsbHMKICAiTEFHMyIsICAgICAgICAgIyBFeGhhdXN0ZWQgVCBjZWxscwogICJUSUdJVCIsICAgICAgICAjIEV4aGF1c3RlZCBUIGNlbGxzCiAgIkdBVEEzIiwgICAgICAgICMgVGgyIGNlbGxzCiAgIlRCWDIxIiwgICAgICAgICMgVGgxIGNlbGxzCiAgIlJPUkMiLCAgICAgICAgICMgVGgxNyBjZWxscwogICJCQ0w2IiAgICAgICAgICAjIFQgZm9sbGljdWxhciBoZWxwZXIgKFRmaCkgY2VsbHMKKQoKIyBWaXN1YWxpemUgbWFya2VyIGdlbmVzIGZvciBDRDQgVCBjZWxscwpjZDRfZmVhdHVyZV9wbG90MiA8LSBGZWF0dXJlUGxvdCgKICBhbGxkYXRhLmludCwgCiAgZmVhdHVyZXMgPSBjZDRfbWFya2VycywgCiAgcmVkdWN0aW9uID0gInVtYXAiLCAKICBuY29sID0gNAopICsgCiAgZ2d0aXRsZSgiQ0Q0IFQgQ2VsbCBNYXJrZXIgRXhwcmVzc2lvbiAtIEhhcm1vbnkgSW50ZWdyYXRpb24iKSArCiAgTm9MZWdlbmQoKQoKIyBEaXNwbGF5IHRoZSBwbG90CnByaW50KGNkNF9mZWF0dXJlX3Bsb3QyKQpgYGAKCiMjICBDRDQgVCBDZWxsIE1hcmtlciBWaXN1YWxpemF0aW9uCmBgYHtyIGZlYXR1cmVwbG90LXJwY2EyLCBmaWcuaGVpZ2h0PTEyLCBmaWcud2lkdGg9MTZ9CiMgU2V0IG1hcmtlciBnZW5lcyBzcGVjaWZpYyB0byBDRDQgVCBjZWxsIGJpb2xvZ3kgYW5kIHN0YXRlcwpjZDRfbWFya2VycyA8LSBjKAogICAgIyBDb3JlIFQgY2VsbCBtYXJrZXJzCiAgICAiQ0QzRSIsICAgICAjIFQgY2VsbCBtYXJrZXIKICAgICJDRDQiLCAgICAgICMgQ0Q0IFQgY2VsbCBtYXJrZXIKICAgIAogICAgIyBOYWl2ZS9NZW1vcnkgbWFya2VycwogICAgIkNDUjciLCAgICAgIyBOYWl2ZS9DZW50cmFsIG1lbW9yeQogICAgIlNFTEwiLCAgICAgIyBMLXNlbGVjdGluLCBuYWl2ZSBtYXJrZXIKICAgICJDRDI3IiwgICAgICMgTWVtb3J5IG1hcmtlcgogICAgIklMN1IiLCAgICAgIyBOYWl2ZS9NZW1vcnkgbWFya2VyCiAgICAKICAgICMgQWN0aXZhdGlvbi9TdGF0ZSBtYXJrZXJzCiAgICAiSUwyUkEiLCAgICAjIENEMjUsIGFjdGl2YXRpb24gbWFya2VyCiAgICAiQ0Q2OSIsICAgICAjIEVhcmx5IGFjdGl2YXRpb24KICAgICJITEEtRFJBIiwgICMgQWN0aXZhdGlvbiBtYXJrZXIKICAgIAogICAgIyBFeGhhdXN0aW9uIG1hcmtlcnMKICAgICJQRENEMSIsICAgICMgUEQtMQogICAgIkxBRzMiLCAgICAgIyBFeGhhdXN0aW9uIG1hcmtlcgogICAgIlRJR0lUIiwgICAgIyBFeGhhdXN0aW9uIG1hcmtlcgogICAgCiAgICAjIFJlZ3VsYXRvcnkgVCBjZWxsIG1hcmtlcnMKICAgICJGT1hQMyIsICAgICMgVHJlZyBtYXJrZXIKICAgICJJTDJSQSIsICAgICMgQ0QyNSwgVHJlZyBtYXJrZXIKICAgICJDVExBNCIsICAgICMgVHJlZy9leGhhdXN0aW9uIG1hcmtlcgogICAgCiAgICAjIEVmZmVjdG9yL0Z1bmN0aW9uIG1hcmtlcnMKICAgICJJTDIiLCAgICAgICMgVCBjZWxsIGZ1bmN0aW9uCiAgICAiSUZORyIsICAgICAjIFRoMQogICAgIklMNCIsICAgICAgIyBUaDIKICAgICJJTDEzIiwgICAgICMgVGgyCiAgICAiSUwxN0EiICAgICAjIFRoMTcKKQoKIyBDcmVhdGUgZmVhdHVyZSBwbG90cyB3aXRoIGJldHRlciB2aXN1YWxpemF0aW9uCkZlYXR1cmVQbG90KGFsbGRhdGEuaW50LCAKICAgICAgICAgICAgZmVhdHVyZXMgPSBjZDRfbWFya2VycywgCiAgICAgICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwgCiAgICAgICAgICAgIG5jb2wgPSA0LAogICAgICAgICAgICBwdC5zaXplID0gMC4xLCAgICAgICAgICAgIyBTbWFsbGVyIHBvaW50IHNpemUgZm9yIGJldHRlciByZXNvbHV0aW9uCiAgICAgICAgICAgIG1pbi5jdXRvZmYgPSAicTEiLCAgICAgICAjIFJlbW92ZSBib3R0b20gMSUgb2YgZXhwcmVzc2lvbgogICAgICAgICAgICBtYXguY3V0b2ZmID0gInE5OSIsICAgICAgIyBSZW1vdmUgdG9wIDElIG9mIGV4cHJlc3Npb24KICAgICAgICAgICAgb3JkZXIgPSBUUlVFKSArICAgICAgICAgICMgUGxvdCBoaWdoZXN0IGV4cHJlc3NpbmcgY2VsbHMgb24gdG9wCiAgICBnZ3RpdGxlKCJDRDQgVCBDZWxsIE1hcmtlciBFeHByZXNzaW9uIC0gSGFybW9ueSBJbnRlZ3JhdGlvbiIpICsKICAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2LCBmYWNlID0gImJvbGQiKSkgKwogICAgTm9MZWdlbmQoKQoKIyBPcHRpb25hbDogQWRkIHZpb2xpbiBwbG90cyB0byBzZWUgZXhwcmVzc2lvbiBkaXN0cmlidXRpb24gYWNyb3NzIGNsdXN0ZXJzClZsblBsb3QoYWxsZGF0YS5pbnQsIAogICAgICAgIGZlYXR1cmVzID0gY2Q0X21hcmtlcnNbMToyMF0sICMgRmlyc3QgOCBtYXJrZXJzCiAgICAgICAgc3RhY2sgPSBUUlVFLAogICAgICAgIGZsaXAgPSBUUlVFKSArCiAgICAgICAgZ2d0aXRsZSgiQ0Q0IFQgQ2VsbCBNYXJrZXIgRGlzdHJpYnV0aW9uIEFjcm9zcyBDbHVzdGVycyIpCgoKYGBgCgoKCg==