1. load libraries
2. load seurat object
All_samples_Merged <- readRDS("/home/nabbasi/isilon/PHD_3rd_YEAR_Analysis/0-Seurat_RDS_OBJECT_FINAL/All_samples_Merged_Harmony_integrated_Cell_line_renamed_03-07-2025.rds")
Subset L4 from Merged Object
# Assuming All_samples_Merged is already loaded
L4 <- subset(All_samples_Merged, subset = cell_line == "L4")
L4
An object of class Seurat
62900 features across 6006 samples within 6 assays
Active assay: SCT (26176 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
5 dimensional reductions calculated: integrated_dr, ref.umap, pca, umap, harmony
rm(All_samples_Merged)
gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 14141518 755.3 20798817 1110.8 20798817 1110.8
Vcells 210168725 1603.5 1233954730 9414.4 1478034031 11276.6
3. QC
# Set identity classes to an existing column in meta data
Idents(object = L4) <- "cell_line"
L4[["percent.rb"]] <- PercentageFeatureSet(L4, pattern = "^RP[SL]")
VlnPlot(L4, features = c("nFeature_RNA", "nCount_RNA", "percent.mt", "percent.rb"),
pt.size = 0.1, ncol = 4) & theme(plot.title = element_text(size = 10))
Avis : The `slot` argument of `FetchData()` is deprecated as of SeuratObject 5.0.0.
Please use the `layer` argument instead.Avis : `PackageCheck()` was deprecated in SeuratObject 5.0.0.
Please use `rlang::check_installed()` instead.

FeatureScatter(L4, feature1 = "nCount_RNA", feature2 = "percent.mt") + geom_smooth(method = "lm")

FeatureScatter(L4, feature1 = "nCount_RNA", feature2 = "nFeature_RNA") + geom_smooth(method = "lm")

Assign Cell-Cycle Scores
Running SCTransform on assay: RNA
Avis : The `slot` argument of `GetAssayData()` is deprecated as of SeuratObject 5.0.0.
Please use the `layer` argument instead.vst.flavor='v2' set. Using model with fixed slope and excluding poisson genes.
Calculating cell attributes from input UMI matrix: log_umi
Variance stabilizing transformation of count matrix of size 19692 by 6006
Model formula is y ~ log_umi
Get Negative Binomial regression parameters per gene
Using 2000 genes, 5000 cells
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.Found 117 outliers - those will be ignored in fitting/regularization step
Second step: Get residuals using fitted parameters for 19692 genes
Computing corrected count matrix for 19692 genes
Calculating gene attributes
Wall clock passed: Time difference of 53.87945 secs
Determine variable features
|
| | 0%
|
|============================ | 25%
|
|========================================================= | 50%
|
|====================================================================================== | 75%
|
|==================================================================================================================| 100%
Place corrected count matrix in counts slot
Avis : The `slot` argument of `SetAssayData()` is deprecated as of SeuratObject 5.0.0.
Please use the `layer` argument instead.Avis : Different cells and/or features from existing assay SCTSet default assay to SCT
Avis : The following features are not present in the object: MLF1IP, not searching for symbol synonymsAvis : The following features are not present in the object: FAM64A, HN1, not searching for symbol synonyms
4. Normalize data
# Apply SCTransform
L4 <- SCTransform(L4, vars.to.regress = c("percent.rb","percent.mt", "CC.Difference"),
do.scale=TRUE,
do.center=TRUE,
verbose = TRUE)
Running SCTransform on assay: RNA
vst.flavor='v2' set. Using model with fixed slope and excluding poisson genes.
Calculating cell attributes from input UMI matrix: log_umi
Variance stabilizing transformation of count matrix of size 19692 by 6006
Model formula is y ~ log_umi
Get Negative Binomial regression parameters per gene
Using 2000 genes, 5000 cells
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.Found 117 outliers - those will be ignored in fitting/regularization step
Second step: Get residuals using fitted parameters for 19692 genes
Computing corrected count matrix for 19692 genes
Calculating gene attributes
Wall clock passed: Time difference of 51.43853 secs
Determine variable features
Regressing out percent.rb, percent.mt, CC.Difference
|
| | 0%
|
|= | 0%
|
|= | 1%
|
|== | 1%
|
|== | 2%
|
|=== | 2%
|
|=== | 3%
|
|==== | 3%
|
|==== | 4%
|
|===== | 4%
|
|===== | 5%
|
|====== | 5%
|
|====== | 6%
|
|======= | 6%
|
|======= | 7%
|
|======== | 7%
|
|========= | 7%
|
|========= | 8%
|
|========== | 8%
|
|========== | 9%
|
|=========== | 9%
|
|=========== | 10%
|
|============ | 10%
|
|============ | 11%
|
|============= | 11%
|
|============= | 12%
|
|============== | 12%
|
|============== | 13%
|
|=============== | 13%
|
|=============== | 14%
|
|================ | 14%
|
|================= | 14%
|
|================= | 15%
|
|================== | 15%
|
|================== | 16%
|
|=================== | 16%
|
|=================== | 17%
|
|==================== | 17%
|
|==================== | 18%
|
|===================== | 18%
|
|===================== | 19%
|
|====================== | 19%
|
|====================== | 20%
|
|======================= | 20%
|
|======================= | 21%
|
|======================== | 21%
|
|========================= | 22%
|
|========================== | 22%
|
|========================== | 23%
|
|=========================== | 23%
|
|=========================== | 24%
|
|============================ | 24%
|
|============================ | 25%
|
|============================= | 25%
|
|============================= | 26%
|
|============================== | 26%
|
|============================== | 27%
|
|=============================== | 27%
|
|=============================== | 28%
|
|================================ | 28%
|
|================================= | 29%
|
|================================== | 29%
|
|================================== | 30%
|
|=================================== | 30%
|
|=================================== | 31%
|
|==================================== | 31%
|
|==================================== | 32%
|
|===================================== | 32%
|
|===================================== | 33%
|
|====================================== | 33%
|
|====================================== | 34%
|
|======================================= | 34%
|
|======================================= | 35%
|
|======================================== | 35%
|
|======================================== | 36%
|
|========================================= | 36%
|
|========================================== | 36%
|
|========================================== | 37%
|
|=========================================== | 37%
|
|=========================================== | 38%
|
|============================================ | 38%
|
|============================================ | 39%
|
|============================================= | 39%
|
|============================================= | 40%
|
|============================================== | 40%
|
|============================================== | 41%
|
|=============================================== | 41%
|
|=============================================== | 42%
|
|================================================ | 42%
|
|================================================ | 43%
|
|================================================= | 43%
|
|================================================== | 43%
|
|================================================== | 44%
|
|=================================================== | 44%
|
|=================================================== | 45%
|
|==================================================== | 45%
|
|==================================================== | 46%
|
|===================================================== | 46%
|
|===================================================== | 47%
|
|====================================================== | 47%
|
|====================================================== | 48%
|
|======================================================= | 48%
|
|======================================================= | 49%
|
|======================================================== | 49%
|
|======================================================== | 50%
|
|========================================================= | 50%
|
|========================================================== | 50%
|
|========================================================== | 51%
|
|=========================================================== | 51%
|
|=========================================================== | 52%
|
|============================================================ | 52%
|
|============================================================ | 53%
|
|============================================================= | 53%
|
|============================================================= | 54%
|
|============================================================== | 54%
|
|============================================================== | 55%
|
|=============================================================== | 55%
|
|=============================================================== | 56%
|
|================================================================ | 56%
|
|================================================================ | 57%
|
|================================================================= | 57%
|
|================================================================== | 57%
|
|================================================================== | 58%
|
|=================================================================== | 58%
|
|=================================================================== | 59%
|
|==================================================================== | 59%
|
|==================================================================== | 60%
|
|===================================================================== | 60%
|
|===================================================================== | 61%
|
|====================================================================== | 61%
|
|====================================================================== | 62%
|
|======================================================================= | 62%
|
|======================================================================= | 63%
|
|======================================================================== | 63%
|
|======================================================================== | 64%
|
|========================================================================= | 64%
|
|========================================================================== | 64%
|
|========================================================================== | 65%
|
|=========================================================================== | 65%
|
|=========================================================================== | 66%
|
|============================================================================ | 66%
|
|============================================================================ | 67%
|
|============================================================================= | 67%
|
|============================================================================= | 68%
|
|============================================================================== | 68%
|
|============================================================================== | 69%
|
|=============================================================================== | 69%
|
|=============================================================================== | 70%
|
|================================================================================ | 70%
|
|================================================================================ | 71%
|
|================================================================================= | 71%
|
|================================================================================== | 72%
|
|=================================================================================== | 72%
|
|=================================================================================== | 73%
|
|==================================================================================== | 73%
|
|==================================================================================== | 74%
|
|===================================================================================== | 74%
|
|===================================================================================== | 75%
|
|====================================================================================== | 75%
|
|====================================================================================== | 76%
|
|======================================================================================= | 76%
|
|======================================================================================= | 77%
|
|======================================================================================== | 77%
|
|======================================================================================== | 78%
|
|========================================================================================= | 78%
|
|========================================================================================== | 79%
|
|=========================================================================================== | 79%
|
|=========================================================================================== | 80%
|
|============================================================================================ | 80%
|
|============================================================================================ | 81%
|
|============================================================================================= | 81%
|
|============================================================================================= | 82%
|
|============================================================================================== | 82%
|
|============================================================================================== | 83%
|
|=============================================================================================== | 83%
|
|=============================================================================================== | 84%
|
|================================================================================================ | 84%
|
|================================================================================================ | 85%
|
|================================================================================================= | 85%
|
|================================================================================================= | 86%
|
|================================================================================================== | 86%
|
|=================================================================================================== | 86%
|
|=================================================================================================== | 87%
|
|==================================================================================================== | 87%
|
|==================================================================================================== | 88%
|
|===================================================================================================== | 88%
|
|===================================================================================================== | 89%
|
|====================================================================================================== | 89%
|
|====================================================================================================== | 90%
|
|======================================================================================================= | 90%
|
|======================================================================================================= | 91%
|
|======================================================================================================== | 91%
|
|======================================================================================================== | 92%
|
|========================================================================================================= | 92%
|
|========================================================================================================= | 93%
|
|========================================================================================================== | 93%
|
|=========================================================================================================== | 93%
|
|=========================================================================================================== | 94%
|
|============================================================================================================ | 94%
|
|============================================================================================================ | 95%
|
|============================================================================================================= | 95%
|
|============================================================================================================= | 96%
|
|============================================================================================================== | 96%
|
|============================================================================================================== | 97%
|
|=============================================================================================================== | 97%
|
|=============================================================================================================== | 98%
|
|================================================================================================================ | 98%
|
|================================================================================================================ | 99%
|
|================================================================================================================= | 99%
|
|================================================================================================================= | 100%
|
|==================================================================================================================| 100%
Centering and scaling data matrix
|
| | 0%
|
|============================ | 25%
|
|========================================================= | 50%
|
|====================================================================================== | 75%
|
|==================================================================================================================| 100%
Place corrected count matrix in counts slot
Set default assay to SCT
5. Perform PCA
Variables_genes <- L4@assays$SCT@var.features
# Exclude genes starting with "HLA-" AND "Xist" AND "TRBV, TRAV"
Variables_genes_after_exclusion <- Variables_genes[!grepl("^HLA-|^XIST|^TRBV|^TRAV", Variables_genes)]
# These are now standard steps in the Seurat workflow for visualization and clustering
L4 <- RunPCA(L4,
features = Variables_genes_after_exclusion,
do.print = TRUE,
pcs.print = 1:5,
genes.print = 15,
npcs = 50)
PC_ 1
Positive: LGALS1, S100A6, S100A4, S100A11, B2M, LSP1, CRIP1, S100A10, SH3BGRL3, TMSB10
CYBA, IL32, MYL6, LAPTM5, CAPG, TMSB4X, IFITM2, PRDX5, ANXA2, VIM
FXYD5, TAGLN2, TIMP1, IFITM1, ANXA1, RHOC, CD63, IL9R, TNFRSF18, CARS
Negative: HSP90AB1, HSPD1, SRM, NPM1, SERBP1, NCL, RPS17, HSPA9, C1QBP, SET
YBX1, CCT6A, HSPE1, RPL23, RANBP1, HNRNPAB, ATP5MC1, RPL37A, RBM17, MTDH
PRKDC, ODC1, NME2, HMGA1, RPL27, BATF3, MIR155HG, ANK3, TRAP1, VDAC1
PC_ 2
Positive: RABGAP1L, FN1, CABLES1, ATP8A1, RORA, CAMK4, DENND4A, RNGTT, TNFRSF11A, CCR7
FNBP1, APP, THEMIS, PCBP3, CAMK1D, OSBPL10, MAPK8, ZNF292, PNRC1, NEDD4L
TMEM178B, LINC01934, MT-ND4, KCNK1, EPAS1, NLGN1, PDE4D, MCTP2, ELL2, AGBL1
Negative: CORO1A, CYCS, DYNLL1, PSMB8, UBE2S, SNRPD1, PA2G4, CDC20, RAN, RPL17
RPL35, NOP16, ARPC2, HNRNPAB, CLIC1, ODC1, CCT2, TUBA4A, SSBP1, PRELID1
HSPE1, CCDC85B, ARPC5L, MT1E, TOMM40, CALM1, MAZ, TXN, RBM8A, DANCR
PC_ 3
Positive: RPL19, NME2, CA2, TOMM20, JPT1, DEGS1, CCR7, SNRPE, SNHG16, SUMO2
ARF1, MATN4, TNFRSF4, RPL27, PNRC1, CD74, MIR155HG, PHB, ACTG1, NME1
B2M, MINDY3, ARID5A, SEC14L1, ALOX5AP, LTA, PSMB3, NSMCE1, SAT1, IL32
Negative: RRM2, MKI67, KCNQ5, HIST1H1B, RASGRP2, AHNAK, LMNB1, ATAD2, SLC1A5, PRUNE2
RPS6KA5, ARHGEF6, HIST1H4C, H1FX, SMC1A, SMC4, AAK1, HIST1H1E, PXYLP1, TUBA1B
NSD2, FLNA, MAD2L2, MYH9, KLF2, HIST1H2AH, ANTXR2, PCNA, DYNC1H1, CTDSPL
PC_ 4
Positive: HSPA8, SLC2A3, DDX21, CELF2, RAB11FIP1, AK4, NCL, CDC20, JUN, PLIN2
DDX17, NAMPT, HSPA4, ST8SIA4, HSPH1, SERBP1, CORO1B, NOLC1, PXYLP1, BHLHE40
ATP8B4, CCND2, GSPT1, NOP58, ATP12A, LDHA, NFAT5, CAPRIN1, CYP51A1, CEP135
Negative: HIST1H4C, RPL19, H2AFZ, NME2, TUBB, TUBA1B, H3F3A, NENF, EIF1, GGH
SUMO2, PPIA, RRM2, BATF3, STMN1, H3F3B, SNRPE, RPL27, NUSAP1, CD74
PSMB3, TOP2A, PCLAF, HIST1H1D, PARP1, EIF4EBP1, NME1, HIST1H1C, CENPU, H1FX
PC_ 5
Positive: GAPDH, LDHA, ENO1, MIF, TPI1, DDIT4, SLC2A3, PLIN2, ANKRD37, BNIP3L
RGS1, PPP1R15A, BNIP3, HILPDA, MXI1, MT-ND4, PGAM1, DNAJB1, DUSP4, HSPA1B
KLF6, MT-ND4L, PPIA, HIST1H1E, C12orf75, PKM, RPL41, RPS3, FDFT1, P4HA1
Negative: TRAF3IP3, DANCR, LIMD2, FRMPD4, RPL23, JPT1, AC004687.1, GRIA4, ARL6IP5, SOS1
SLFN5, MT-ND1, GPR15, CUL3, ALAS1, GNAQ, CDC42BPA, MAT2A, SLC20A2, LINC02694
ZNF804A, AGBL1, ETF1, DDX3X, WWP1, LARP4B, PEX5L, MED10, NLGN1, MBP
# determine dimensionality of the data
ElbowPlot(L4, ndims =50)

NA
NA
6. Clustering
L4 <- FindNeighbors(L4,
dims = 1:min.pc,
verbose = FALSE)
# understanding resolution
L4 <- FindClusters(L4,
resolution = c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6,
0.7,0.8, 0.9, 1, 1.1, 1.2))
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
Number of nodes: 6006
Number of edges: 204452
Running Louvain algorithm...
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9385
Number of communities: 5
Elapsed time: 0 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
Number of nodes: 6006
Number of edges: 204452
Running Louvain algorithm...
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9004
Number of communities: 6
Elapsed time: 0 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
Number of nodes: 6006
Number of edges: 204452
Running Louvain algorithm...
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8767
Number of communities: 8
Elapsed time: 0 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
Number of nodes: 6006
Number of edges: 204452
Running Louvain algorithm...
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8545
Number of communities: 9
Elapsed time: 0 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
Number of nodes: 6006
Number of edges: 204452
Running Louvain algorithm...
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8377
Number of communities: 10
Elapsed time: 0 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
Number of nodes: 6006
Number of edges: 204452
Running Louvain algorithm...
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8220
Number of communities: 11
Elapsed time: 0 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
Number of nodes: 6006
Number of edges: 204452
Running Louvain algorithm...
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8062
Number of communities: 11
Elapsed time: 0 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
Number of nodes: 6006
Number of edges: 204452
Running Louvain algorithm...
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.7916
Number of communities: 13
Elapsed time: 0 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
Number of nodes: 6006
Number of edges: 204452
Running Louvain algorithm...
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.7808
Number of communities: 14
Elapsed time: 0 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
Number of nodes: 6006
Number of edges: 204452
Running Louvain algorithm...
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.7697
Number of communities: 13
Elapsed time: 0 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
Number of nodes: 6006
Number of edges: 204452
Running Louvain algorithm...
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.7595
Number of communities: 14
Elapsed time: 0 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
Number of nodes: 6006
Number of edges: 204452
Running Louvain algorithm...
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.7509
Number of communities: 14
Elapsed time: 0 seconds
# non-linear dimensionality reduction --------------
L4 <- RunUMAP(L4,
dims = 1:min.pc,
verbose = FALSE)
Avis : The default method for RunUMAP has changed from calling Python UMAP via reticulate to the R-native UWOT using the cosine metric
To use Python UMAP via reticulate, set umap.method to 'umap-learn' and metric to 'correlation'
This message will be shown once per session
# note that you can set `label = TRUE` or use the Label Clusters function to help label
# individual clusters
DimPlot(L4,group.by = "cell_line",
reduction = "umap",
label.size = 3,
repel = T,
label = T, label.box = T)

DimPlot(L4,
group.by = "SCT_snn_res.0.1",
reduction = "umap",
label.size = 3,
repel = T,
label = T, label.box = T)

DimPlot(L4,
group.by = "SCT_snn_res.0.2",
reduction = "umap",
label.size = 3,
repel = T,
label = T, label.box = T)

DimPlot(L4,
group.by = "SCT_snn_res.0.3",
reduction = "umap",
label.size = 3,
repel = T,
label = T, label.box = T)

DimPlot(L4,
group.by = "SCT_snn_res.0.4",
reduction = "umap",
label.size = 3,
repel = T,
label = T, label.box = T)

DimPlot(L4,
group.by = "SCT_snn_res.0.5",
reduction = "umap",
label.size = 3,
repel = T,
label = T, label.box = T)

DimPlot(L4,
group.by = "SCT_snn_res.0.6",
reduction = "umap",
label.size = 3,
repel = T,
label = T, label.box = T)

DimPlot(L4,
group.by = "SCT_snn_res.0.7",
reduction = "umap",
label.size = 3,
repel = T,
label = T, label.box = T)

DimPlot(L4,
group.by = "SCT_snn_res.0.8",
reduction = "umap",
label.size = 3,
repel = T,
label = T, label.box = T)

DimPlot(L4,
group.by = "SCT_snn_res.0.9",
reduction = "umap",
label.size = 3,
repel = T,
label = T, label.box = T)

DimPlot(L4,
group.by = "SCT_snn_res.1",
reduction = "umap",
label.size = 3,
repel = T,
label = T, label.box = T)

DimPlot(L4,
group.by = "SCT_snn_res.1.1",
reduction = "umap",
label.size = 3,
repel = T,
label = T, label.box = T)

DimPlot(L4,
group.by = "SCT_snn_res.1.2",
reduction = "umap",
label.size = 3,
repel = T,
label = T, label.box = T)

7. clusTree
library(clustree)
clustree(L4, prefix = "SCT_snn_res.")

8. Save the Seurat object as an RDS-L4
saveRDS(L4, file = "../0-RDS_Cell_lines/L4_clustered.rds")
LS0tCnRpdGxlOiAiQ2VsbCBMaW5lIEw0IEFuYWx5c2lzLVJlY2x1c3RlcmluZyIKYXV0aG9yOiBOYXNpciBNYWhtb29kIEFiYmFzaQpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDoKICAjIHBkZl9kb2N1bWVudDogZGVmYXVsdAogICMgd29yZF9kb2N1bWVudDogZGVmYXVsdAogICMgaHRtbF9kb2N1bWVudDogZGVmYXVsdAogICNybWRmb3JtYXRzOjpyZWFkdGhlZG93bgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdG9jX2NvbGxhcHNlZDogdHJ1ZQotLS0KCgojIDEuIGxvYWQgbGlicmFyaWVzCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQoKbGlicmFyeShTZXVyYXQpCmxpYnJhcnkoU2V1cmF0T2JqZWN0KQpsaWJyYXJ5KFNldXJhdERhdGEpCmxpYnJhcnkocGF0Y2h3b3JrKQoKbGlicmFyeShkcGx5cikKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KFJDb2xvckJyZXdlcikKbGlicmFyeShtYWdyaXR0cikKbGlicmFyeShkYnBseXIpCmxpYnJhcnkocm1hcmtkb3duKQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KHRpbnl0ZXgpCiNBemltdXRoIEFubm90YXRpb24gbGlicmFyaWVzCmxpYnJhcnkoQXppbXV0aCkKI1Byb2plY1RpbHMgQW5ub3RhdGlvbiBsaWJyYXJpZXMKbGlicmFyeShTVEFDQVMpCmxpYnJhcnkoUHJvamVjVElMcykKI3NpbmdsZVIgQW5ub3RhdGlvbiBsaWJyYXJpZXMKbGlicmFyeShTaW5nbGVSKQpsaWJyYXJ5KGNlbGxkZXgpCmxpYnJhcnkoU2luZ2xlQ2VsbEV4cGVyaW1lbnQpCgpgYGAKIyAyLiBsb2FkIHNldXJhdCBvYmplY3QKYGBge3IgbG9hZF9zZXVyYXR9CgpBbGxfc2FtcGxlc19NZXJnZWQgPC0gcmVhZFJEUygiL2hvbWUvbmFiYmFzaS9pc2lsb24vUEhEXzNyZF9ZRUFSX0FuYWx5c2lzLzAtU2V1cmF0X1JEU19PQkpFQ1RfRklOQUwvQWxsX3NhbXBsZXNfTWVyZ2VkX0hhcm1vbnlfaW50ZWdyYXRlZF9DZWxsX2xpbmVfcmVuYW1lZF8wMy0wNy0yMDI1LnJkcyIpCgoKCmBgYAoKIyMgU3Vic2V0IEw0IGZyb20gTWVyZ2VkIE9iamVjdApgYGB7cn0KCiMgQXNzdW1pbmcgQWxsX3NhbXBsZXNfTWVyZ2VkIGlzIGFscmVhZHkgbG9hZGVkCkw0IDwtIHN1YnNldChBbGxfc2FtcGxlc19NZXJnZWQsIHN1YnNldCA9IGNlbGxfbGluZSA9PSAiTDQiKQoKTDQKCnJtKEFsbF9zYW1wbGVzX01lcmdlZCkKZ2MoKQpgYGAKCgojIDMuIFFDCmBgYHtyIFFDLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMH0KIyBTZXQgaWRlbnRpdHkgY2xhc3NlcyB0byBhbiBleGlzdGluZyBjb2x1bW4gaW4gbWV0YSBkYXRhCklkZW50cyhvYmplY3QgPSBMNCkgPC0gImNlbGxfbGluZSIKCkw0W1sicGVyY2VudC5yYiJdXSA8LSBQZXJjZW50YWdlRmVhdHVyZVNldChMNCwgcGF0dGVybiA9ICJeUlBbU0xdIikKVmxuUGxvdChMNCwgZmVhdHVyZXMgPSBjKCJuRmVhdHVyZV9STkEiLCAibkNvdW50X1JOQSIsICJwZXJjZW50Lm10IiwgInBlcmNlbnQucmIiKSwKICAgICAgICBwdC5zaXplID0gMC4xLCBuY29sID0gNCkgJiB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCkpCgpGZWF0dXJlU2NhdHRlcihMNCwgZmVhdHVyZTEgPSAibkNvdW50X1JOQSIsIGZlYXR1cmUyID0gInBlcmNlbnQubXQiKSArIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpCkZlYXR1cmVTY2F0dGVyKEw0LCBmZWF0dXJlMSA9ICJuQ291bnRfUk5BIiwgZmVhdHVyZTIgPSAibkZlYXR1cmVfUk5BIikgKyBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iKQoKYGBgCgojIyBBc3NpZ24gQ2VsbC1DeWNsZSBTY29yZXMKYGBge3IgUmVncmVzcywgZWNobz1GQUxTRSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTB9CgojcmVtb3Rlczo6aW5zdGFsbF92ZXJzaW9uKCJtYXRyaXhTdGF0cyIsIHZlcnNpb249IjEuMS4wIikgKGlmIHlvdSBhcmUgcnVubmluZyBSIHNlcnZlciB1c2UgdGhpcyBmaXJzdCkKTDQgPC0gU0NUcmFuc2Zvcm0oTDQsIGRvLnNjYWxlPUZBTFNFLCBkby5jZW50ZXI9RkFMU0UpCgoKIyBBIGxpc3Qgb2YgY2VsbCBjeWNsZSBtYXJrZXJzLCBmcm9tIFRpcm9zaCBldCBhbCwgMjAxNSwgaXMgbG9hZGVkIHdpdGggU2V1cmF0LiAgV2UgY2FuCiMgc2VncmVnYXRlIHRoaXMgbGlzdCBpbnRvIG1hcmtlcnMgb2YgRzIvTSBwaGFzZSBhbmQgbWFya2VycyBvZiBTIHBoYXNlCnMuZ2VuZXMgPC0gY2MuZ2VuZXMkcy5nZW5lcwpnMm0uZ2VuZXMgPC0gY2MuZ2VuZXMkZzJtLmdlbmVzCgoKTDQgPC0gQ2VsbEN5Y2xlU2NvcmluZyhMNCwgcy5mZWF0dXJlcyA9IHMuZ2VuZXMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICBnMm0uZmVhdHVyZXMgPSBnMm0uZ2VuZXMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQuaWRlbnQgPSBUUlVFKQoKRGVmYXVsdEFzc2F5KEw0KSA8LSAiUk5BIgoKTDQkQ0MuRGlmZmVyZW5jZSA8LSBMNCRTLlNjb3JlIC0gTDQkRzJNLlNjb3JlCgpgYGAKCiMgNC4gTm9ybWFsaXplIGRhdGEKYGBge3J9CgoKIyBBcHBseSBTQ1RyYW5zZm9ybQpMNCA8LSBTQ1RyYW5zZm9ybShMNCwgdmFycy50by5yZWdyZXNzID0gYygicGVyY2VudC5yYiIsInBlcmNlbnQubXQiLCAiQ0MuRGlmZmVyZW5jZSIpLCAKICAgICAgICAgICAgICAgICAgZG8uc2NhbGU9VFJVRSwgCiAgICAgICAgICAgICAgICAgIGRvLmNlbnRlcj1UUlVFLCAKICAgICAgICAgICAgICAgICAgdmVyYm9zZSA9IFRSVUUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCmBgYAoKCiMgNS4gUGVyZm9ybSBQQ0EKYGBge3IgUENBLCBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD02fQoKVmFyaWFibGVzX2dlbmVzIDwtIEw0QGFzc2F5cyRTQ1RAdmFyLmZlYXR1cmVzCgojIEV4Y2x1ZGUgZ2VuZXMgc3RhcnRpbmcgd2l0aCAiSExBLSIgQU5EICJYaXN0IiBBTkQgIlRSQlYsIFRSQVYiClZhcmlhYmxlc19nZW5lc19hZnRlcl9leGNsdXNpb24gPC0gVmFyaWFibGVzX2dlbmVzWyFncmVwbCgiXkhMQS18XlhJU1R8XlRSQlZ8XlRSQVYiLCBWYXJpYWJsZXNfZ2VuZXMpXQoKCiMgVGhlc2UgYXJlIG5vdyBzdGFuZGFyZCBzdGVwcyBpbiB0aGUgU2V1cmF0IHdvcmtmbG93IGZvciB2aXN1YWxpemF0aW9uIGFuZCBjbHVzdGVyaW5nCkw0IDwtIFJ1blBDQShMNCwKICAgICAgICAgICAgIGZlYXR1cmVzID0gVmFyaWFibGVzX2dlbmVzX2FmdGVyX2V4Y2x1c2lvbiwKICAgICAgICAgICAgIGRvLnByaW50ID0gVFJVRSwgCiAgICAgICAgICAgICBwY3MucHJpbnQgPSAxOjUsIAogICAgICAgICAgICAgZ2VuZXMucHJpbnQgPSAxNSwKICAgICAgICAgICAgIG5wY3MgPSA1MCkKCiMgZGV0ZXJtaW5lIGRpbWVuc2lvbmFsaXR5IG9mIHRoZSBkYXRhCkVsYm93UGxvdChMNCwgbmRpbXMgPTUwKQoKCmBgYAojIFBlcmZvcm0gUENBIFRFU1QKYGBge3IgUENBLVRFU1QsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTEwfQoKCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShSQ29sb3JCcmV3ZXIpICAKCiMgQXNzdW1pbmcgeW91IGhhdmUgMTAgZGlmZmVyZW50IGNlbGwgbGluZXMsIGdlbmVyYXRpbmcgYSBjb2xvciBwYWxldHRlIHdpdGggMTAgY29sb3JzCmNlbGxfbGluZV9jb2xvcnMgPC0gYnJld2VyLnBhbCgxMCwgIlNldDMiKQoKIyBBc3N1bWluZyBMNCRjZWxsX2xpbmUgaXMgYSBmYWN0b3Igb3IgY2hhcmFjdGVyIHZlY3RvciBjb250YWluaW5nIGNlbGwgbGluZSBuYW1lcwpkYXRhIDwtIGFzLmRhdGEuZnJhbWUodGFibGUoTDQkY2VsbF9saW5lKSkKY29sbmFtZXMoZGF0YSkgPC0gYygiY2VsbF9saW5lIiwgIm5VTUkiKSAgIyBDaGFuZ2UgY29sdW1uIG5hbWUgdG8gblVNSQoKbmNlbGxzIDwtIGdncGxvdChkYXRhLCBhZXMoeCA9IGNlbGxfbGluZSwgeSA9IG5VTUksIGZpbGwgPSBjZWxsX2xpbmUpKSArIAogIGdlb21fY29sKCkgKwogIHRoZW1lX2NsYXNzaWMoKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IG5VTUkpLCAKICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOSksIAogICAgICAgICAgICB2anVzdCA9IC0wLjI1KSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY2VsbF9saW5lX2NvbG9ycykgKyAKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpLAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSArICAjIEFkanVzdCB0aGUgdGl0bGUgcG9zaXRpb24KICBnZ3RpdGxlKCJGaWx0ZXJlZCBjZWxscyBwZXIgc2FtcGxlIikgKwogIHhsYWIoIkNlbGwgbGluZXMiKSArICAjIEFkanVzdCB4LWF4aXMgbGFiZWwKICB5bGFiKCJGcmVxdWVuY3kiKSAgICAjIEFkanVzdCB5LWF4aXMgbGFiZWwKCnByaW50KG5jZWxscykKCgoKIyBURVNULTEKIyBnaXZlbiB0aGF0IHRoZSBvdXRwdXQgb2YgUnVuUENBIGlzICJwY2EiCiMgcmVwbGFjZSAic28iIGJ5IHRoZSBuYW1lIG9mIHlvdXIgc2V1cmF0IG9iamVjdAoKcGN0IDwtIEw0W1sicGNhIl1dQHN0ZGV2IC8gc3VtKEw0W1sicGNhIl1dQHN0ZGV2KSAqIDEwMApjdW11IDwtIGN1bXN1bShwY3QpICMgQ2FsY3VsYXRlIGN1bXVsYXRpdmUgcGVyY2VudHMgZm9yIGVhY2ggUEMKIyBEZXRlcm1pbmUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB2YXJpYXRpb24gb2YgUEMgYW5kIHN1YnNlcXVlbnQgUEMKY28yIDwtIHNvcnQod2hpY2goKHBjdFstbGVuZ3RoKHBjdCldIC0gcGN0Wy0xXSkgPiAwLjEpLCBkZWNyZWFzaW5nID0gVClbMV0gKyAxCiMgbGFzdCBwb2ludCB3aGVyZSBjaGFuZ2Ugb2YgJSBvZiB2YXJpYXRpb24gaXMgbW9yZSB0aGFuIDAuMSUuIC0+IGNvMgpjbzIKCiMgVEVTVC0yCiMgZ2V0IHNpZ25pZmljYW50IFBDcwpzdGR2IDwtIEw0W1sicGNhIl1dQHN0ZGV2CnN1bS5zdGR2IDwtIHN1bShMNFtbInBjYSJdXUBzdGRldikKcGVyY2VudC5zdGR2IDwtIChzdGR2IC8gc3VtLnN0ZHYpICogMTAwCmN1bXVsYXRpdmUgPC0gY3Vtc3VtKHBlcmNlbnQuc3RkdikKY28xIDwtIHdoaWNoKGN1bXVsYXRpdmUgPiA5MCAmIHBlcmNlbnQuc3RkdiA8IDUpWzFdCmNvMiA8LSBzb3J0KHdoaWNoKChwZXJjZW50LnN0ZHZbMTpsZW5ndGgocGVyY2VudC5zdGR2KSAtIDFdIC0gCiAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudC5zdGR2WzI6bGVuZ3RoKHBlcmNlbnQuc3RkdildKSA+IDAuMSksIAogICAgICAgICAgICAgIGRlY3JlYXNpbmcgPSBUKVsxXSArIDEKbWluLnBjIDwtIG1pbihjbzEsIGNvMikKbWluLnBjCgojIENyZWF0ZSBhIGRhdGFmcmFtZSB3aXRoIHZhbHVlcwpwbG90X2RmIDwtIGRhdGEuZnJhbWUocGN0ID0gcGVyY2VudC5zdGR2LCAKICAgICAgICAgICBjdW11ID0gY3VtdWxhdGl2ZSwgCiAgICAgICAgICAgcmFuayA9IDE6bGVuZ3RoKHBlcmNlbnQuc3RkdikpCgojIEVsYm93IHBsb3QgdG8gdmlzdWFsaXplIAogIGdncGxvdChwbG90X2RmLCBhZXMoY3VtdWxhdGl2ZSwgcGVyY2VudC5zdGR2LCBsYWJlbCA9IHJhbmssIGNvbG9yID0gcmFuayA+IG1pbi5wYykpICsgCiAgZ2VvbV90ZXh0KCkgKyAKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSA5MCwgY29sb3IgPSAiZ3JleSIpICsgCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gbWluKHBlcmNlbnQuc3RkdltwZXJjZW50LnN0ZHYgPiA1XSksIGNvbG9yID0gImdyZXkiKSArCiAgdGhlbWVfYncoKQoKICAKCmBgYAoKIyA2LiBDbHVzdGVyaW5nCmBgYHtyIEMxLCBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD02fQpMNCA8LSBGaW5kTmVpZ2hib3JzKEw0LCAKICAgICAgICAgICAgICAgICAgICBkaW1zID0gMTptaW4ucGMsIAogICAgICAgICAgICAgICAgICAgIHZlcmJvc2UgPSBGQUxTRSkKCiMgdW5kZXJzdGFuZGluZyByZXNvbHV0aW9uCkw0IDwtIEZpbmRDbHVzdGVycyhMNCwgCiAgICAgICAgICAgICAgICAgIHJlc29sdXRpb24gPSBjKDAuMSwgMC4yLCAwLjMsIDAuNCwgMC41LCAwLjYsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNywwLjgsIDAuOSwgMSwgMS4xLCAxLjIpKQoKCmBgYAoKCmBgYHtyIEMyLCBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD02fQoKIyBub24tbGluZWFyIGRpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbiAtLS0tLS0tLS0tLS0tLQpMNCA8LSBSdW5VTUFQKEw0LCAKICAgICAgICAgICAgICBkaW1zID0gMTptaW4ucGMsCiAgICAgICAgICAgICAgdmVyYm9zZSA9IEZBTFNFKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgojIG5vdGUgdGhhdCB5b3UgY2FuIHNldCBgbGFiZWwgPSBUUlVFYCBvciB1c2UgdGhlIExhYmVsIENsdXN0ZXJzIGZ1bmN0aW9uIHRvIGhlbHAgbGFiZWwKIyBpbmRpdmlkdWFsIGNsdXN0ZXJzCkRpbVBsb3QoTDQsZ3JvdXAuYnkgPSAiY2VsbF9saW5lIiwgCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwKICAgICAgICBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQpCgoKRGltUGxvdChMNCwKICAgICAgICBncm91cC5ieSA9ICJTQ1Rfc25uX3Jlcy4wLjEiLCAKICAgICAgICByZWR1Y3Rpb24gPSAidW1hcCIsCiAgICAgICAgbGFiZWwuc2l6ZSA9IDMsCiAgICAgICAgcmVwZWwgPSBULAogICAgICAgIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCkKCkRpbVBsb3QoTDQsCiAgICAgICAgZ3JvdXAuYnkgPSAiU0NUX3Nubl9yZXMuMC4yIiwgCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwKICAgICAgICBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQpCgpEaW1QbG90KEw0LAogICAgICAgIGdyb3VwLmJ5ID0gIlNDVF9zbm5fcmVzLjAuMyIsIAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsCiAgICAgICAgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBUKQoKRGltUGxvdChMNCwKICAgICAgICBncm91cC5ieSA9ICJTQ1Rfc25uX3Jlcy4wLjQiLCAKICAgICAgICByZWR1Y3Rpb24gPSAidW1hcCIsCiAgICAgICAgbGFiZWwuc2l6ZSA9IDMsCiAgICAgICAgcmVwZWwgPSBULAogICAgICAgIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCkKCgpEaW1QbG90KEw0LAogICAgICAgIGdyb3VwLmJ5ID0gIlNDVF9zbm5fcmVzLjAuNSIsIAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsCiAgICAgICAgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBUKQoKRGltUGxvdChMNCwKICAgICAgICBncm91cC5ieSA9ICJTQ1Rfc25uX3Jlcy4wLjYiLCAKICAgICAgICByZWR1Y3Rpb24gPSAidW1hcCIsCiAgICAgICAgbGFiZWwuc2l6ZSA9IDMsCiAgICAgICAgcmVwZWwgPSBULAogICAgICAgIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCkKCkRpbVBsb3QoTDQsCiAgICAgICAgZ3JvdXAuYnkgPSAiU0NUX3Nubl9yZXMuMC43IiwgCiAgICAgICAgcmVkdWN0aW9uID0gInVtYXAiLAogICAgICAgIGxhYmVsLnNpemUgPSAzLAogICAgICAgIHJlcGVsID0gVCwKICAgICAgICBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQpCgpEaW1QbG90KEw0LAogICAgICAgIGdyb3VwLmJ5ID0gIlNDVF9zbm5fcmVzLjAuOCIsIAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsCiAgICAgICAgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBUKQpEaW1QbG90KEw0LAogICAgICAgIGdyb3VwLmJ5ID0gIlNDVF9zbm5fcmVzLjAuOSIsIAogICAgICAgIHJlZHVjdGlvbiA9ICJ1bWFwIiwKICAgICAgICBsYWJlbC5zaXplID0gMywKICAgICAgICByZXBlbCA9IFQsCiAgICAgICAgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBUKQpEaW1QbG90KEw0LAogICAgICAgIGdyb3VwLmJ5ID0gIlNDVF9zbm5fcmVzLjEiLCAKICAgICAgICByZWR1Y3Rpb24gPSAidW1hcCIsCiAgICAgICAgbGFiZWwuc2l6ZSA9IDMsCiAgICAgICAgcmVwZWwgPSBULAogICAgICAgIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCkKRGltUGxvdChMNCwKICAgICAgICBncm91cC5ieSA9ICJTQ1Rfc25uX3Jlcy4xLjEiLCAKICAgICAgICByZWR1Y3Rpb24gPSAidW1hcCIsCiAgICAgICAgbGFiZWwuc2l6ZSA9IDMsCiAgICAgICAgcmVwZWwgPSBULAogICAgICAgIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCkKRGltUGxvdChMNCwKICAgICAgICBncm91cC5ieSA9ICJTQ1Rfc25uX3Jlcy4xLjIiLCAKICAgICAgICByZWR1Y3Rpb24gPSAidW1hcCIsCiAgICAgICAgbGFiZWwuc2l6ZSA9IDMsCiAgICAgICAgcmVwZWwgPSBULAogICAgICAgIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCkKCmBgYAoKIyA3LiBjbHVzVHJlZQpgYGB7ciBjbHVzVHJlZSwgZmlnLmhlaWdodD0xMiwgZmlnLndpZHRoPTEwfQpsaWJyYXJ5KGNsdXN0cmVlKQoKY2x1c3RyZWUoTDQsIHByZWZpeCA9ICJTQ1Rfc25uX3Jlcy4iKQoKYGBgCgojIDguIFNhdmUgdGhlIFNldXJhdCBvYmplY3QgYXMgYW4gUkRTLUw0CmBgYHtyIHNhdmVST0JKLCBlY2hvPVRSVUV9CgpzYXZlUkRTKEw0LCBmaWxlID0gIi4uLzAtUkRTX0NlbGxfbGluZXMvTDRfY2x1c3RlcmVkLnJkcyIpCgoKYGBgCgoKCgoKCgoKCgo=