knitr::opts_chunk$set(
  echo      = TRUE,
  message   = FALSE,
  warning   = FALSE,
  fig.align = "center",
  dpi       = 150
)

1 Overview

1.1 Approach

This document implements and compares two trajectory methods for normal CD4 T cells, then projects Sézary syndrome CD4 T cells onto both reference trajectories.

1.1.1 Method 1 — Custom MST (Burel et al. 2022 approach)

  • Over-cluster within each annotated state → define milestones (M00–M07)
  • Compute Minimum Spanning Tree on milestone centroids in UMAP space
  • Project each cell onto nearest MST edge → pseudotime

1.1.2 Method 2 — Monocle3

  • Convert Seurat object → cell_data_set
  • learn_graph() fits principal graph to data topology
  • order_cells() rooted at CD4 Naive centroid → pseudotime
  • graph_test() identifies trajectory-variable genes

1.1.3 Comparison

  • Spearman correlation between pseudotimes
  • Agreement on cell ordering per state
  • Concordance on Sézary cell positioning

1.2 Key Objects

Object Description Required columns
cd4_ref Annotated normal CD4 T cells $predicted.celltype.l2, UMAP, RNA
sezary_obj Sézary CD4 T cells RNA (normalised), optional ADT

1.3 Packages Required

install.packages(c("igraph","RANN","ggrepel","patchwork","pheatmap","viridis"))
BiocManager::install("monocle3")
remotes::install_github("satijalab/seurat-wrappers")

2 Setup



suppressPackageStartupMessages({
  library(Seurat)
  library(SeuratWrappers)
  library(monocle3)
  library(igraph)
  library(RANN)
  library(ggplot2)
  library(ggrepel)
  library(dplyr)
  library(tidyr)
  library(patchwork)
  library(pheatmap)
  library(viridis)
  library(scales)
  library(RColorBrewer)
  library(knitr)
  library(kableExtra)
})

STATE_COLORS <- c(
  "CD4 Naive"     = "#4472C4",
  "CD4 TCM"       = "#70AD47",
  "CD4 TEM"       = "#ED7D31",
  "CD4 Temra/CTL" = "#C00000",
  "Treg"          = "#7030A0"
)

METHOD_COLORS <- c(
  "Monocle3"   = "#e74c3c",
  "Custom MST" = "#2980b9"
)

STATE_ORDER <- c("CD4 Naive","CD4 TCM","CD4 TEM","CD4 Temra/CTL","Treg")

UMAP_NAME <- "umap"
STATE_COL <- "predicted.celltype.l2"

# BIOINFORMATICIAN NOTE on resolutions:
# Dotplot showed M03 was TCM-like (LTB+/IL7R+, no effector markers) —
# this means resolution 0.08 for TCM was still too high, producing 3 TCM
# milestones instead of 2. Reducing to 0.05 collapses the third TCM milestone
# so the sub-clustering yields exactly 2 TCM milestones (early and late).
# TEM resolution increased to 0.30 to better separate TEM from Temra.
MILESTONE_RES <- c(
  "CD4 Naive"     = 0.05,   # CHANGED 0.10→0.05: single homogeneous milestone
  "CD4 TCM"       = 0.06,   # CHANGED 0.08→0.05: was producing 3 milestones, need 2
  "CD4 TEM"       = 0.05,   # CHANGED 0.20→0.30: better separation of TEM vs Temra
  "CD4 Temra/CTL" = 0.10,   # unchanged — single milestone (only 10 cells)
  "Treg"          = 0.20    # unchanged — 2 milestones (naive + terminal)
)

cat("✓ Setup complete\n")
✓ Setup complete
cat("\nState colours:\n");        print(STATE_COLORS)

State colours:
    CD4 Naive       CD4 TCM       CD4 TEM CD4 Temra/CTL          Treg 
    "#4472C4"     "#70AD47"     "#ED7D31"     "#C00000"     "#7030A0" 
cat("\nMilestone resolutions:\n"); print(MILESTONE_RES)

Milestone resolutions:
    CD4 Naive       CD4 TCM       CD4 TEM CD4 Temra/CTL          Treg 
         0.05          0.06          0.05          0.10          0.20 
cat("\nState column:", STATE_COL, "\n")

State column: predicted.celltype.l2 
cat("UMAP name:   ", UMAP_NAME,  "\n")
UMAP name:    umap 

3 Load & Validate Objects

cat("CD4 reference loaded:", ncol(cd4_ref),    "cells\n")
CD4 reference loaded: 11466 cells
cat("Sezary object loaded:", ncol(sezary_obj), "cells\n")
Sezary object loaded: 49305 cells
cat("\nAzimuth l2 labels present:\n")

Azimuth l2 labels present:
print(table(cd4_ref@meta.data[[STATE_COL]]))

    CD4 Naive       CD4 TCM       CD4 TEM CD4 Temra/CTL          Treg 
         2037          9067           145            10           207 
stopifnot(
  "predicted.celltype.l2 missing from cd4_ref" = STATE_COL %in% colnames(cd4_ref@meta.data),
  "UMAP missing from cd4_ref"                  = UMAP_NAME %in% names(cd4_ref@reductions),
  "RNA assay missing from cd4_ref"             = "RNA" %in% names(cd4_ref@assays),
  "RNA assay missing from sezary_obj"          = "RNA" %in% names(sezary_obj@assays)
)
cat("✅ Validation passed\n")
✅ Validation passed
DefaultAssay(cd4_ref)    <- "RNA"
DefaultAssay(sezary_obj) <- "RNA"

cd4_states_keep <- names(MILESTONE_RES)
cells_keep      <- cd4_ref@meta.data[[STATE_COL]] %in% cd4_states_keep
if (sum(!cells_keep) > 0) {
  cd4_ref <- subset(cd4_ref, cells = colnames(cd4_ref)[cells_keep])
  cat("Subsetted to trajectory states:", ncol(cd4_ref), "cells\n")
}

umap_df           <- as.data.frame(Embeddings(cd4_ref, UMAP_NAME))
colnames(umap_df) <- c("UMAP_1","UMAP_2")
umap_df$cell      <- rownames(umap_df)
umap_df$state     <- cd4_ref@meta.data[[STATE_COL]]

ref_summary <- cd4_ref@meta.data %>%
  count(!!sym(STATE_COL), name = "n_cells") %>%
  rename(State = !!sym(STATE_COL)) %>%
  mutate(pct = round(100 * n_cells / sum(n_cells), 1)) %>%
  arrange(match(State, STATE_ORDER))

kable(ref_summary,
      caption = sprintf("Reference CD4 T cells (n = %d total)", ncol(cd4_ref))) %>%
  kable_styling(bootstrap_options = c("striped","hover"), full_width = FALSE)
Reference CD4 T cells (n = 11466 total)
State n_cells pct
CD4 Naive 2037 17.8
CD4 TCM 9067 79.1
CD4 TEM 145 1.3
CD4 Temra/CTL 10 0.1
Treg 207 1.8

4 Define Milestones (Shared by Both Methods)

4.1 Sub-clustering

set.seed(42)
cd4_ref@meta.data$milestone <- NA_character_
milestone_counter           <- 0L
milestone_state_map         <- list()

states_present <- intersect(names(MILESTONE_RES),
                             unique(cd4_ref@meta.data[[STATE_COL]]))

cat("Defining milestones by sub-clustering within each state:\n\n")
Defining milestones by sub-clustering within each state:
for (st in states_present) {
  cells_st <- colnames(cd4_ref)[cd4_ref@meta.data[[STATE_COL]] == st]

  if (length(cells_st) < 50) {
    m_id <- sprintf("M%02d", milestone_counter)
    cd4_ref@meta.data$milestone[colnames(cd4_ref) %in% cells_st] <- m_id
    milestone_state_map[[m_id]] <- st
    milestone_counter <- milestone_counter + 1L
    cat(sprintf("  %-20s  %4d cells  →  1 milestone (%s) [too few]\n",
                st, length(cells_st), m_id))
    next
  }

  sub_obj <- subset(cd4_ref, cells = cells_st)

  sub_obj <- FindNeighbors(
    sub_obj,
    reduction  = "pca",
    dims       = 1:20,
    k.param    = 20,
    graph.name = c("sub_nn","sub_snn"),
    verbose    = FALSE
  )

  sub_obj <- FindClusters(
    sub_obj,
    graph.name  = "sub_snn",
    resolution  = MILESTONE_RES[st],
    random.seed = 42,
    verbose     = FALSE
  )

  sub_clusters <- as.character(sub_obj$seurat_clusters)
  n_sub        <- length(unique(sub_clusters))

  for (sc in sort(unique(sub_clusters))) {
    m_id     <- sprintf("M%02d", milestone_counter)
    sc_cells <- cells_st[sub_clusters == sc]
    cd4_ref@meta.data$milestone[colnames(cd4_ref) %in% sc_cells] <- m_id
    milestone_state_map[[m_id]] <- st
    milestone_counter <- milestone_counter + 1L
  }

  cat(sprintf("  %-20s  %4d cells  →  %d milestones (M%02d–M%02d)\n",
              st, length(cells_st), n_sub,
              milestone_counter - n_sub, milestone_counter - 1))
}
  CD4 Naive             2037 cells  →  1 milestones (M00–M00)
  CD4 TCM               9067 cells  →  2 milestones (M01–M02)
  CD4 TEM                145 cells  →  1 milestones (M03–M03)
  CD4 Temra/CTL           10 cells  →  1 milestone (M04) [too few]
  Treg                   207 cells  →  2 milestones (M05–M06)
cat(sprintf("\nTotal milestones: %d\n", milestone_counter))

Total milestones: 7
cat("\nMilestone distribution:\n")

Milestone distribution:
print(table(cd4_ref@meta.data$milestone, useNA = "ifany"))

 M00  M01  M02  M03  M04  M05  M06 
2037 4717 4350  145   10  146   61 

4.2 Milestone Centroids


umap_df$milestone <- cd4_ref@meta.data$milestone

milestone_centroids <- umap_df %>%
  filter(!is.na(milestone)) %>%
  group_by(milestone) %>%
  summarise(
    UMAP_1  = mean(UMAP_1),
    UMAP_2  = mean(UMAP_2),
    n_cells = n(),
    state   = dplyr::first(state),
    .groups = "drop"
  ) %>%
  mutate(state = unlist(milestone_state_map[milestone])) %>%
  arrange(milestone)

cat("Milestone centroids — inspect before setting manual edges:\n")
Milestone centroids — inspect before setting manual edges:
print(milestone_centroids[, c("milestone","state","UMAP_1","UMAP_2","n_cells")])

kable(milestone_centroids,
      caption = "Milestone centroids in UMAP space",
      digits  = 3) %>%
  kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)
Milestone centroids in UMAP space
milestone UMAP_1 UMAP_2 n_cells state
M00 -3.437 -0.644 2037 CD4 Naive
M01 3.267 0.287 4717 CD4 TCM
M02 -2.250 -0.166 4350 CD4 TCM
M03 6.521 -0.373 145 CD4 TEM
M04 6.944 -0.262 10 CD4 Temra/CTL
M05 1.124 3.371 146 Treg
M06 3.276 3.962 61 Treg

5 Method 1 — Custom MST Trajectory

Custom MST approach (Burel et al. 2022): connects milestone centroids with a Minimum Spanning Tree; cells get pseudotime by projection onto nearest edge.

5.1 MST Computation

# ── Step 1: Distance matrix ────────────────────────────────────────────────
centroid_mat <- as.matrix(milestone_centroids[, c("UMAP_1","UMAP_2")])
rownames(centroid_mat) <- milestone_centroids$milestone
dist_mat <- as.matrix(dist(centroid_mat, method = "euclidean"))

# ── Step 2: Root = CD4 Naive ──────────────────────────────────────────────
tn_milestones <- milestone_centroids$milestone[milestone_centroids$state == "CD4 Naive"]
cat("CD4 Naive milestones:", tn_milestones, "\n")
CD4 Naive milestones: M00 
if (length(tn_milestones) == 1) {
  root_ms <- tn_milestones
} else {
  tn_centroid <- colMeans(centroid_mat[tn_milestones, , drop = FALSE])
  tn_dists    <- rowSums((centroid_mat[tn_milestones, , drop = FALSE] -
                   matrix(tn_centroid, nrow=length(tn_milestones), ncol=2, byrow=TRUE))^2)
  root_ms <- tn_milestones[which.min(tn_dists)]
}
cat("Root milestone:", root_ms, "\n")
Root milestone: M00 
# ── Step 3: Automatic MST — inspect only ──────────────────────────────────
g_auto   <- graph_from_adjacency_matrix(dist_mat, mode="undirected",
                                        weighted=TRUE, diag=FALSE)
mst_auto <- mst(g_auto, algorithm="prim")
cat("\nAutomatic MST (reference only):\n")

Automatic MST (reference only):
auto_edges <- as_edgelist(mst_auto)
for (i in seq_len(nrow(auto_edges))) {
  s1 <- milestone_centroids$state[milestone_centroids$milestone == auto_edges[i,1]]
  s2 <- milestone_centroids$state[milestone_centroids$milestone == auto_edges[i,2]]
  cat(sprintf("  %s(%s) — %s(%s)\n", auto_edges[i,1], s1, auto_edges[i,2], s2))
}
  M00(CD4 Naive) — M02(CD4 TCM)
  M01(CD4 TCM) — M03(CD4 TEM)
  M01(CD4 TCM) — M06(Treg)
  M02(CD4 TCM) — M05(Treg)
  M03(CD4 TEM) — M04(CD4 Temra/CTL)
  M05(Treg) — M06(Treg)
# ── Step 4: Build edgelist via state lookup ────────────────────────────────
ms_by_state <- function(state_name, rank = 1) {
  candidates <- milestone_centroids[milestone_centroids$state == state_name, ]
  if (nrow(candidates) < rank) stop(sprintf(
    "State '%s' has only %d milestone(s), but rank=%d was requested.",
    state_name, nrow(candidates), rank))
  candidates <- candidates[order(candidates$UMAP_1), ]
  candidates$milestone[rank]
}

naive_ms  <- ms_by_state("CD4 Naive",     1)
tcm_e_ms  <- ms_by_state("CD4 TCM",       1)
tcm_l_ms  <- ms_by_state("CD4 TCM",       2)
tem_ms    <- ms_by_state("CD4 TEM",       1)  # single TEM milestone
temra_ms  <- ms_by_state("CD4 Temra/CTL", 1)
treg_n_ms <- ms_by_state("Treg",          1)
treg_t_ms <- ms_by_state("Treg",          2)

cat("\nState-to-Current-ID mapping:\n")

State-to-Current-ID mapping:
cat(sprintf("  Naive: %s\n  TCM:   %s(early), %s(late)\n", naive_ms, tcm_e_ms, tcm_l_ms))
  Naive: M00
  TCM:   M02(early), M01(late)
cat(sprintf("  TEM:   %s\n  Temra: %s\n", tem_ms, temra_ms))
  TEM:   M03
  Temra: M04
cat(sprintf("  Treg:  %s(naive), %s(terminal)\n", treg_n_ms, treg_t_ms))
  Treg:  M05(naive), M06(terminal)
edge_list_ordered <- matrix(c(
  naive_ms,  tcm_e_ms,
  tcm_e_ms,  tcm_l_ms,
  tcm_l_ms,  tem_ms,
  tem_ms,    temra_ms,
  tcm_l_ms,  treg_n_ms,
  treg_n_ms, treg_t_ms
), ncol = 2, byrow = TRUE)

# ── Step 5: Explicit traversal order ──────────────────────────────────────
bfs_order_clean <- unique(as.vector(t(edge_list_ordered)))
cat("\nTraversal order:", paste(bfs_order_clean, collapse=" → "), "\n")

Traversal order: M00 → M02 → M01 → M03 → M04 → M05 → M06 
stopifnot(
  "Must have 7 milestones" = length(bfs_order_clean) == 7,
  "Naive must be root"     = bfs_order_clean[1] == naive_ms,
  "Temra before Treg"      = which(bfs_order_clean==temra_ms) < which(bfs_order_clean==treg_n_ms)
)
cat("✅ Traversal order validated\n")
✅ Traversal order validated
# ── Validate edge weights ──────────────────────────────────────────────────
edge_weights <- apply(edge_list_ordered, 1, function(e) dist_mat[e[1], e[2]])
if (any(!is.finite(edge_weights))) {
  bad <- which(!is.finite(edge_weights))
  print(data.frame(from=edge_list_ordered[bad,1],
                   to  =edge_list_ordered[bad,2],
                   w   =edge_weights[bad]))
  stop("NaN/NA/Inf edge weights detected — check state lookup or dist_mat rownames.")
}

mst_graph <- graph_from_edgelist(edge_list_ordered, directed = FALSE)
E(mst_graph)$weight <- edge_weights

cat("\nManual edges defined:\n")

Manual edges defined:
for (i in seq_len(nrow(edge_list_ordered))) {
  sf <- milestone_centroids$state[milestone_centroids$milestone == edge_list_ordered[i,1]]
  st <- milestone_centroids$state[milestone_centroids$milestone == edge_list_ordered[i,2]]
  cat(sprintf("  %s(%s) → %s(%s)  w=%.4f\n",
              edge_list_ordered[i,1], sf, edge_list_ordered[i,2], st, edge_weights[i]))
}
  M00(CD4 Naive) → M02(CD4 TCM)  w=1.2794
  M02(CD4 TCM) → M01(CD4 TCM)  w=5.5349
  M01(CD4 TCM) → M03(CD4 TEM)  w=3.3207
  M03(CD4 TEM) → M04(CD4 Temra/CTL)  w=0.4376
  M01(CD4 TCM) → M05(Treg)  w=3.7556
  M05(Treg) → M06(Treg)  w=2.2321
# ── Step 6: Rename to M00-M06 ─────────────────────────────────────────────
old_to_new <- setNames(sprintf("M%02d", seq_along(bfs_order_clean) - 1L), bfs_order_clean)

cat("\nRenaming map:\n")

Renaming map:
for (o in names(old_to_new)) {
  st <- milestone_centroids$state[milestone_centroids$milestone == o]
  cat(sprintf("  %s (%s) → %s\n", o, st, old_to_new[o]))
}
  M00 (CD4 Naive) → M00
  M02 (CD4 TCM) → M01
  M01 (CD4 TCM) → M02
  M03 (CD4 TEM) → M03
  M04 (CD4 Temra/CTL) → M04
  M05 (Treg) → M05
  M06 (Treg) → M06
milestone_centroids$milestone <- old_to_new[milestone_centroids$milestone]
cd4_ref@meta.data$milestone   <- unname(old_to_new[cd4_ref@meta.data$milestone])
names(milestone_state_map)    <- old_to_new[names(milestone_state_map)]
rownames(centroid_mat)        <- old_to_new[rownames(centroid_mat)]
rownames(dist_mat)            <- old_to_new[rownames(dist_mat)]
colnames(dist_mat)            <- old_to_new[colnames(dist_mat)]
V(mst_graph)$name             <- unname(old_to_new[V(mst_graph)$name])
cat("✅ Renaming applied\n")
✅ Renaming applied
# ── Step 7: Verify final biology ──────────────────────────────────────────
milestone_order <- sprintf("M%02d", seq_len(nrow(milestone_centroids)) - 1L)
cat("\nFinal milestone → biology:\n")

Final milestone → biology:
for (m in milestone_order) {
  st <- milestone_centroids$state[milestone_centroids$milestone == m]
  nc <- milestone_centroids$n_cells[milestone_centroids$milestone == m]
  cat(sprintf("  %s = %-20s  n=%4d\n", m, st, nc))
}
  M00 = CD4 Naive             n=2037
  M01 = CD4 TCM               n=4350
  M02 = CD4 TCM               n=4717
  M03 = CD4 TEM               n= 145
  M04 = CD4 Temra/CTL         n=  10
  M05 = Treg                  n= 146
  M06 = Treg                  n=  61
cat("Expected:\n  M00=Naive  M01/M02=TCM  M03=TEM  M04=Temra  M05/M06=Treg\n")
Expected:
  M00=Naive  M01/M02=TCM  M03=TEM  M04=Temra  M05/M06=Treg
# ── Swap helper ────────────────────────────────────────────────────────────
swap_ms <- function(a, b) {
  tmp <- "__TMP__"
  vn <- V(mst_graph)$name
  vn[vn==a] <- tmp; vn[vn==b] <- a; vn[vn==tmp] <- b; V(mst_graph)$name <<- vn
  mc <- milestone_centroids$milestone
  mc[mc==a] <- tmp; mc[mc==b] <- a; mc[mc==tmp] <- b; milestone_centroids$milestone <<- mc
  mv <- cd4_ref@meta.data$milestone
  mv[!is.na(mv)&mv==a] <- tmp; mv[!is.na(mv)&mv==b] <- a
  mv[!is.na(mv)&mv==tmp] <- b; cd4_ref@meta.data$milestone <<- mv
  nm <- names(milestone_state_map)
  nm[nm==a] <- tmp; nm[nm==b] <- a; nm[nm==tmp] <- b; names(milestone_state_map) <<- nm
  rn <- rownames(centroid_mat)
  rn[rn==a] <- tmp; rn[rn==b] <- a; rn[rn==tmp] <- b; rownames(centroid_mat) <<- rn
  rn <- rownames(dist_mat); cn <- colnames(dist_mat)
  rn[rn==a] <- tmp; rn[rn==b] <- a; rn[rn==tmp] <- b; rownames(dist_mat) <<- rn
  cn[cn==a] <- tmp; cn[cn==b] <- a; cn[cn==tmp] <- b; colnames(dist_mat) <<- cn
  cat(sprintf("  Swapped %s <-> %s\n", a, b))
}
 #swap_ms("M01","M02")  # TCM early/late reversed?
# swap_ms("M05","M06")  # Treg naive/terminal reversed?

# ── Step 8: Graph distances ────────────────────────────────────────────────
graph_dists <- distances(mst_graph, v = "M00", weights = NA)
graph_dists[is.infinite(graph_dists)] <- max(graph_dists[is.finite(graph_dists)]) + 1

milestone_centroids$graph_dist <- as.numeric(graph_dists[, milestone_centroids$milestone])
milestone_centroids$order_pos  <- match(milestone_centroids$milestone, milestone_order)
milestone_centroids             <- arrange(milestone_centroids, order_pos)

# ── Step 9: Edge data frame for plotting ──────────────────────────────────
mst_edges   <- as_edgelist(mst_graph)
mst_edge_df <- do.call(rbind, lapply(seq_len(nrow(mst_edges)), function(i) {
  m1 <- mst_edges[i,1]; m2 <- mst_edges[i,2]
  r1 <- milestone_centroids[milestone_centroids$milestone == m1, ]
  r2 <- milestone_centroids[milestone_centroids$milestone == m2, ]
  if (nrow(r1)==0 || nrow(r2)==0) return(NULL)
  data.frame(x1=r1$UMAP_1, y1=r1$UMAP_2, x2=r2$UMAP_1, y2=r2$UMAP_2)
}))

# ── Final summary ──────────────────────────────────────────────────────────
cat(sprintf("\nFinal MST: %d nodes, %d edges | Root: M00\n",
            vcount(mst_graph), ecount(mst_graph)))

Final MST: 7 nodes, 6 edges | Root: M00
mst_edges_final <- as_edgelist(mst_graph)
for (i in seq_len(nrow(mst_edges_final))) {
  s1 <- milestone_centroids$state[milestone_centroids$milestone == mst_edges_final[i,1]]
  s2 <- milestone_centroids$state[milestone_centroids$milestone == mst_edges_final[i,2]]
  cat(sprintf("  %s (%s) → %s (%s)\n", mst_edges_final[i,1], s1, mst_edges_final[i,2], s2))
}
  M00 (CD4 Naive) → M01 (CD4 TCM)
  M01 (CD4 TCM) → M02 (CD4 TCM)
  M02 (CD4 TCM) → M03 (CD4 TEM)
  M03 (CD4 TEM) → M04 (CD4 Temra/CTL)
  M02 (CD4 TCM) → M05 (Treg)
  M05 (Treg) → M06 (Treg)

5.2 Pseudotime Projection

project_onto_mst <- function(cell_coords, centroid_mat, mst_graph, graph_dists) {
  edges      <- as_edgelist(mst_graph)
  n_cells    <- nrow(cell_coords)
  pseudotime <- numeric(n_cells)
  nearest_ms <- character(n_cells)

  for (i in seq_len(n_cells)) {
    cx <- cell_coords[i, 1]; cy <- cell_coords[i, 2]
    best_dist <- Inf; best_pt <- 0; best_ms <- NA_character_

    for (e in seq_len(nrow(edges))) {
      m1 <- edges[e,1]; m2 <- edges[e,2]
      p1 <- centroid_mat[m1,]; p2 <- centroid_mat[m2,]
      dx <- p2[1]-p1[1]; dy <- p2[2]-p1[2]
      len2 <- dx^2 + dy^2
      if (len2 < 1e-10) next
      t    <- max(0, min(1, ((cx-p1[1])*dx + (cy-p1[2])*dy) / len2))
      proj <- c(p1[1]+t*dx, p1[2]+t*dy)
      d    <- sqrt((cx-proj[1])^2 + (cy-proj[2])^2)
      if (d < best_dist) {
        best_dist <- d
        pt_m1     <- graph_dists[m1]
        pt_m2     <- graph_dists[m2]
        best_pt   <- pt_m1 + t * (pt_m2 - pt_m1)
        best_ms   <- if (t < 0.5) m1 else m2
      }
    }
    pseudotime[i] <- best_pt
    nearest_ms[i] <- best_ms
  }
  list(pseudotime = pseudotime, nearest_ms = nearest_ms)
}

cell_coords <- as.matrix(umap_df[colnames(cd4_ref), c("UMAP_1","UMAP_2")])
g_dists_vec <- setNames(as.numeric(graph_dists), colnames(graph_dists))

cat("Projecting reference cells onto MST...\n")
Projecting reference cells onto MST...
mst_proj <- project_onto_mst(cell_coords, centroid_mat, mst_graph, g_dists_vec)

mst_pt_raw   <- mst_proj$pseudotime
mst_pt_range <- range(mst_pt_raw, na.rm = TRUE)

meta <- cd4_ref@meta.data
meta$mst_pseudotime      <- mst_pt_raw
meta$mst_pseudotime_norm <- 100 * (mst_pt_raw - mst_pt_range[1]) /
                                   (mst_pt_range[2] - mst_pt_range[1])
meta$nearest_milestone   <- mst_proj$nearest_ms
cd4_ref@meta.data        <- meta

cat(sprintf("MST pseudotime range: %.3f – %.3f\n",
            mst_pt_range[1], mst_pt_range[2]))
MST pseudotime range: 0.000 – 4.000
# Validate: median pseudotime should increase along trajectory
cat("\nMedian pseudotime per state (should increase Naive→TCM→TEM→Temra):\n")

Median pseudotime per state (should increase Naive→TCM→TEM→Temra):
pt_check <- cd4_ref@meta.data %>%
  group_by(!!sym(STATE_COL)) %>%
  summarise(median_pt = round(median(mst_pseudotime_norm, na.rm=TRUE), 1),
            .groups="drop") %>%
  arrange(median_pt)
print(pt_check)

5.3 Visualisation

ms_plot <- milestone_centroids %>% mutate(x = order_pos, y = 0)

state_bands <- ms_plot %>%
  group_by(state) %>%
  summarise(xmin = min(x)-.4, xmax = max(x)+.4, .groups="drop") %>%
  mutate(ymin=-.35, ymax=-.15, fill=STATE_COLORS[state])

edge_linear <- do.call(rbind, lapply(seq_len(nrow(mst_edges)), function(i) {
  m1<-mst_edges[i,1]; m2<-mst_edges[i,2]
  r1<-ms_plot[ms_plot$milestone==m1,]; r2<-ms_plot[ms_plot$milestone==m2,]
  if(nrow(r1)==0||nrow(r2)==0) return(NULL)
  data.frame(x1=r1$x,y1=r1$y,x2=r2$x,y2=r2$y)
}))

# ── Panel a: Linear milestone trajectory ──────────────────────────────────
p_mst_linear <- ggplot() +
  geom_rect(data=state_bands,
            aes(xmin=xmin,xmax=xmax,ymin=ymin,ymax=ymax,fill=state), alpha=.85) +
  geom_text(data=state_bands,
            aes(x=(xmin+xmax)/2, y=(ymin+ymax)/2, label=state),
            colour="white", size=3.5, fontface="bold") +
  geom_segment(data=edge_linear,
               aes(x=x1,y=y1,xend=x2,yend=y2),
               colour="grey35", linewidth=1.3, lineend="round") +
  geom_text(data=ms_plot,
            aes(x=x, y=y+0.18, label=paste0("n=", scales::comma(n_cells))),
            size=3, colour="grey10", fontface="bold", vjust=0) +
  geom_point(data=ms_plot, aes(x=x, y=y, fill=state),
             shape=21, colour="white", stroke=2, size=12) +
  geom_text(data=ms_plot, aes(x=x, y=y, label=milestone),
            size=3.2, colour="white", fontface="bold") +
  scale_fill_manual(values=STATE_COLORS, name="State") +
  coord_cartesian(ylim=c(-.5, 0.45)) +
  theme_void() +
  theme(legend.position = "right",
        legend.title    = element_text(size=10, face="bold"),
        legend.text     = element_text(size=9),
        plot.title      = element_text(size=13, face="bold", hjust=.5),
        plot.margin     = margin(15, 10, 10, 10)) +
  ggtitle("Custom MST — Milestones Trajectory")

# ── Panel b: Milestones on UMAP ───────────────────────────────────────────
p_mst_umap_ms <- ggplot() +
  geom_point(data=umap_df[sample(nrow(umap_df)),],
             aes(x=UMAP_1,y=UMAP_2,colour=state), size=.35, alpha=.5) +
  geom_segment(data=mst_edge_df,
               aes(x=x1,y=y1,xend=x2,yend=y2),
               colour="black", linewidth=1, alpha=.85, lineend="round") +
  geom_point(data=milestone_centroids,
             aes(x=UMAP_1,y=UMAP_2,fill=state),
             shape=21, size=8, colour="white", stroke=2) +
  geom_text_repel(data=milestone_centroids,
                  aes(x=UMAP_1,y=UMAP_2,label=milestone),
                  size=3, colour="white", fontface="bold",
                  bg.color="grey20", bg.r=.15, max.overlaps=25,
                  point.padding=0.3, box.padding=0.4) +
  scale_colour_manual(values=STATE_COLORS, guide="none") +
  scale_fill_manual(values=STATE_COLORS, name="State") +
  theme_classic() +
  labs(x="UMAP-1",y="UMAP-2",title="Custom MST — Milestones on UMAP") +
  theme(plot.title=element_text(size=13,face="bold"))

# ── Panel c: Pseudotime on UMAP ───────────────────────────────────────────
pt_umap_df            <- umap_df
pt_umap_df$pseudotime <- cd4_ref@meta.data$mst_pseudotime_norm

p_mst_pseudo <- ggplot(pt_umap_df[sample(nrow(pt_umap_df)),],
                        aes(x=UMAP_1,y=UMAP_2,colour=pseudotime)) +
  geom_point(size=.35, alpha=.7) +
  scale_colour_gradientn(
    colours = c("#0D0887","#6A00A8","#B12A90","#E16462","#FCA636","#F0F921"),
    name    = "Pseudotime\n(0–100)", limits=c(0,100)) +
  geom_segment(data=mst_edge_df,
               aes(x=x1,y=y1,xend=x2,yend=y2),
               colour="black", linewidth=.7, alpha=.6, inherit.aes=FALSE) +
  theme_classic() +
  labs(x="UMAP-1",y="UMAP-2",title="Custom MST — Pseudotime on UMAP") +
  theme(plot.title=element_text(size=13,face="bold"))

print((p_mst_linear) / (p_mst_umap_ms | p_mst_pseudo))

# Panel A: Linear trajectory
print(p_mst_linear)


# Panel B: Milestones on UMAP  
print(p_mst_umap_ms)


# Panel C: Pseudotime on UMAP
print(p_mst_pseudo)

5.4 Visualisation



# Panel B: Milestones on UMAP  
print(p_mst_umap_ms)


# Panel C: Pseudotime on UMAP
print(p_mst_pseudo)


6 Method 2 — Monocle3 Trajectory

Monocle3 fits a principal graph directly to the data topology using reversed graph embedding, then assigns pseudotime by geodesic distance from the root.

6.1 Convert & Preprocess

DefaultAssay(cd4_ref) <- "RNA"

cd4_ref_joined <- JoinLayers(cd4_ref)
cds <- as.cell_data_set(cd4_ref_joined)

colData(cds)[[STATE_COL]] <- cd4_ref@meta.data[[STATE_COL]]
colData(cds)$milestone    <- cd4_ref@meta.data$milestone

reducedDims(cds)[["PCA"]]  <- Embeddings(cd4_ref, "pca")
reducedDims(cds)[["UMAP"]] <- Embeddings(cd4_ref, UMAP_NAME)

cds <- estimate_size_factors(cds)
cds@clusters$UMAP$clusters <- cd4_ref@meta.data[[STATE_COL]]

cat("cell_data_set created:\n")
cell_data_set created:
cat(sprintf("  %d cells | %d genes\n", ncol(cds), nrow(cds)))
  11466 cells | 36601 genes

6.2 Learn Graph & Set Root

set.seed(42)
DefaultAssay(cd4_ref) <- "RNA"
cd4_ref_joined <- JoinLayers(cd4_ref)
cds <- as.cell_data_set(cd4_ref_joined)

# ── Transfer metadata ──────────────────────────────────────────────────────
colData(cds)[[STATE_COL]] <- cd4_ref@meta.data[[STATE_COL]]
colData(cds)$milestone    <- cd4_ref@meta.data$milestone

# ── Transfer reductions ───────────────────────────────────────────────────
reducedDims(cds)[["PCA"]]  <- Embeddings(cd4_ref, "pca")
reducedDims(cds)[["UMAP"]] <- Embeddings(cd4_ref, UMAP_NAME)

cds <- estimate_size_factors(cds)

# ── FIX: Set BOTH clusters AND partitions with NAMED factors ──────────────
# learn_graph() checks: names(cds@clusters$UMAP$partitions) != NULL
cell_ids <- colnames(cds)

# Clusters: named factor of state labels
cluster_vec <- setNames(
  factor(cd4_ref@meta.data[[STATE_COL]]),
  cell_ids
)

# Partitions: all cells in one partition (required slot, use_partition=FALSE
# ignores boundaries but the slot must still be a named factor)
partition_vec <- setNames(
  factor(rep(1L, length(cell_ids))),
  cell_ids
)

cds@clusters$UMAP$clusters   <- cluster_vec
cds@clusters$UMAP$partitions  <- partition_vec

# Verify names are present before calling learn_graph
stopifnot(
  "clusters must be named"   = !is.null(names(cds@clusters$UMAP$clusters)),
  "partitions must be named" = !is.null(names(cds@clusters$UMAP$partitions)),
  "cluster length matches"   = length(cds@clusters$UMAP$clusters) == ncol(cds),
  "partition length matches" = length(cds@clusters$UMAP$partitions) == ncol(cds)
)
cat(sprintf("✅ clusters and partitions set: %d cells\n", ncol(cds)))
✅ clusters and partitions set: 11466 cells
cat("cell_data_set created:\n")
cell_data_set created:
cat(sprintf("  %d cells | %d genes\n", ncol(cds), nrow(cds)))
  11466 cells | 36601 genes
# ── learn_graph ────────────────────────────────────────────────────────────
set.seed(42)
cds <- learn_graph(
  cds,
  use_partition       = FALSE,
  close_loop          = FALSE,
  learn_graph_control = list(minimal_branch_len = 8, nn.k = 20),
  verbose             = FALSE
)
cat("✅ learn_graph complete\n")
✅ learn_graph complete

6.3 Order Cells & Assign Pseudotime

# Set root at CD4 Naive centroid and assign pseudotime
tn_cells    <- colnames(cds)[colData(cds)[[STATE_COL]] == "CD4 Naive"]
tn_umap     <- reducedDims(cds)[["UMAP"]][tn_cells, , drop = FALSE]
tn_centroid <- colMeans(tn_umap)

pr_nodes     <- t(cds@principal_graph_aux[["UMAP"]]$dp_mst)
node_dists   <- rowSums((pr_nodes - matrix(tn_centroid, nrow=nrow(pr_nodes),
                                            ncol=2, byrow=TRUE))^2)
root_pr_node <- names(which.min(node_dists))
cat(sprintf("Root principal graph node: %s\n", root_pr_node))
Root principal graph node: Y_14
cds <- order_cells(cds, root_pr_nodes = root_pr_node)

pt_raw <- pseudotime(cds)
cat(sprintf("Pseudotime: %d non-NA | %d NA\n",
            sum(!is.na(pt_raw)), sum(is.na(pt_raw))))
Pseudotime: 11466 non-NA | 0 NA
cat(sprintf("Raw range: %.3f – %.3f\n",
            min(pt_raw, na.rm=TRUE), max(pt_raw, na.rm=TRUE)))
Raw range: 0.000 – 25.356
stopifnot("order_cells produced all NA — check root node" = sum(!is.na(pt_raw)) > 0)

# Normalise and write to cd4_ref metadata
pt_min <- min(pt_raw, na.rm=TRUE)
pt_max <- max(pt_raw, na.rm=TRUE)

meta <- cd4_ref@meta.data
meta$monocle3_pseudotime      <- as.numeric(pt_raw)
meta$monocle3_pseudotime_norm <- 100 * (as.numeric(pt_raw) - pt_min) /
                                        (pt_max - pt_min)
cd4_ref@meta.data <- meta

cat(sprintf("Non-NA in metadata: %d / %d\n",
            sum(!is.na(cd4_ref@meta.data$monocle3_pseudotime_norm)),
            ncol(cd4_ref)))
Non-NA in metadata: 11466 / 11466
cat("\nMedian pseudotime per state (Naive < TCM < TEM < Temra expected):\n")

Median pseudotime per state (Naive < TCM < TEM < Temra expected):
cd4_ref@meta.data %>%
  group_by(!!sym(STATE_COL)) %>%
  summarise(median_pt = round(median(monocle3_pseudotime_norm, na.rm=TRUE), 1),
            .groups   = "drop") %>%
  arrange(median_pt) %>%
  print()

6.4 Visualisation


pr_graph_obj <- principal_graph(cds)[["UMAP"]]
pr_layout    <- t(cds@principal_graph_aux[["UMAP"]]$dp_mst)

m3_edge_list <- igraph::as_edgelist(pr_graph_obj)
m3_edge_df   <- do.call(rbind, lapply(seq_len(nrow(m3_edge_list)), function(i) {
  n1 <- m3_edge_list[i,1]; n2 <- m3_edge_list[i,2]
  data.frame(x1=pr_layout[n1,1], y1=pr_layout[n1,2],
             x2=pr_layout[n2,1], y2=pr_layout[n2,2])
}))

umap_m3            <- umap_df
umap_m3$pseudotime <- cd4_ref@meta.data$monocle3_pseudotime_norm

p_m3_states <- ggplot() +
  geom_point(data=umap_m3[sample(nrow(umap_m3)),],
             aes(x=UMAP_1, y=UMAP_2, colour=state), size=.35, alpha=.6) +
  geom_segment(data=m3_edge_df,
               aes(x=x1,y=y1,xend=x2,yend=y2),
               colour="black", linewidth=.6, alpha=.7, lineend="round") +
  scale_colour_manual(values=STATE_COLORS, name="State") +
  theme_classic() +
  labs(x="UMAP-1",y="UMAP-2", title="Monocle3 — Principal Graph & States") +
  theme(plot.title=element_text(size=13,face="bold"))

p_m3_pseudo <- ggplot(umap_m3[sample(nrow(umap_m3)),],
                       aes(x=UMAP_1, y=UMAP_2, colour=pseudotime)) +
  geom_point(size=.35, alpha=.7) +
  scale_colour_gradientn(
    colours=c("#0D0887","#6A00A8","#B12A90","#E16462","#FCA636","#F0F921"),
    name="Pseudotime\n(0–100)", limits=c(0,100)) +
  geom_segment(data=m3_edge_df,
               aes(x=x1,y=y1,xend=x2,yend=y2),
               colour="black", linewidth=.6, alpha=.6, inherit.aes=FALSE) +
  theme_classic() +
  labs(x="UMAP-1",y="UMAP-2", title="Monocle3 — Pseudotime on UMAP") +
  theme(plot.title=element_text(size=13,face="bold"))

m3_pt_df <- data.frame(
  state      = factor(cd4_ref@meta.data[[STATE_COL]], levels=STATE_ORDER),
  pseudotime = cd4_ref@meta.data$monocle3_pseudotime_norm
) %>% filter(!is.na(pseudotime), state %in% STATE_ORDER)

p_m3_violin <- ggplot(m3_pt_df, aes(x=state, y=pseudotime, fill=state)) +
  geom_violin(scale="width", trim=FALSE, alpha=.85) +
  geom_boxplot(width=.08, fill="white", outlier.size=.3, outlier.alpha=.3) +
  scale_fill_manual(values=STATE_COLORS, guide="none") +
  theme_classic() +
  labs(x=NULL, y="Pseudotime (0–100)", title="Monocle3 — Pseudotime per State") +
  theme(axis.text.x=element_text(size=11, face="bold"),
        plot.title=element_text(size=13,face="bold"))

print((p_m3_states | p_m3_pseudo) / (p_m3_violin | plot_spacer()))

p_m3_states
p_m3_pseudo
p_m3_violin 

6.5 Trajectory-Variable Genes

var_genes_use <- head(VariableFeatures(cd4_ref), 2000)
var_genes_use <- intersect(var_genes_use, rownames(cds))
cat(sprintf("Variable genes for graph_test: %d\n", length(var_genes_use)))
Variable genes for graph_test: 2000
cat("Running graph_test (Moran's I)...\n")
Running graph_test (Moran's I)...
pr_test_res <- graph_test(
  cds[var_genes_use, ],
  neighbor_graph = "principal_graph",
  cores          = 2
)

  |                                                                                                                        |   0%, ETA NA
  |                                                                                                                     |   0%, ETA 04:16
  |                                                                                                                     |   0%, ETA 02:38
  |                                                                                                                     |   0%, ETA 01:47
  |                                                                                                                     |   0%, ETA 01:35
  |                                                                                                                     |   0%, ETA 01:17
  |                                                                                                                     |   0%, ETA 01:14
  |                                                                                                                     |   0%, ETA 01:04
  |                                                                                                                     |   0%, ETA 01:03
  |=                                                                                                                    |   0%, ETA 00:57
  |=                                                                                                                    |   0%, ETA 00:58
  |=                                                                                                                    |   1%, ETA 00:53
  |=                                                                                                                    |   1%, ETA 00:53
  |=                                                                                                                    |   1%, ETA 00:50
  |=                                                                                                                    |   1%, ETA 00:50
  |=                                                                                                                    |   1%, ETA 00:49
  |=                                                                                                                    |   1%, ETA 00:48
  |=                                                                                                                    |   1%, ETA 00:47
  |=                                                                                                                    |   1%, ETA 00:46
  |=                                                                                                                    |   1%, ETA 00:45
  |=                                                                                                                    |   1%, ETA 00:43
  |=                                                                                                                    |   1%, ETA 00:44
  |=                                                                                                                    |   1%, ETA 00:42
  |=                                                                                                                    |   1%, ETA 00:41
  |==                                                                                                                   |   1%, ETA 00:42
  |==                                                                                                                   |   1%, ETA 00:41
  |==                                                                                                                   |   1%, ETA 00:41
  |==                                                                                                                   |   1%, ETA 00:41
  |==                                                                                                                   |   2%, ETA 00:41
  |==                                                                                                                   |   2%, ETA 00:41
  |==                                                                                                                   |   2%, ETA 00:40
  |==                                                                                                                   |   2%, ETA 00:41
  |==                                                                                                                   |   2%, ETA 00:40
  |==                                                                                                                   |   2%, ETA 00:40
  |==                                                                                                                   |   2%, ETA 00:39
  |==                                                                                                                   |   2%, ETA 00:39
  |==                                                                                                                   |   2%, ETA 00:39
  |==                                                                                                                   |   2%, ETA 00:39
  |==                                                                                                                   |   2%, ETA 00:38
  |==                                                                                                                   |   2%, ETA 00:38
  |==                                                                                                                   |   2%, ETA 00:38
  |===                                                                                                                  |   2%, ETA 00:38
  |===                                                                                                                  |   2%, ETA 00:38
  |===                                                                                                                  |   2%, ETA 00:38
  |===                                                                                                                  |   2%, ETA 00:38
  |===                                                                                                                  |   2%, ETA 00:37
  |===                                                                                                                  |   2%, ETA 00:37
  |===                                                                                                                  |   2%, ETA 00:37
  |===                                                                                                                  |   2%, ETA 00:37
  |===                                                                                                                  |   3%, ETA 00:37
  |===                                                                                                                  |   3%, ETA 00:37
  |===                                                                                                                  |   3%, ETA 00:36
  |===                                                                                                                  |   3%, ETA 00:37
  |===                                                                                                                  |   3%, ETA 00:36
  |===                                                                                                                  |   3%, ETA 00:36
  |===                                                                                                                  |   3%, ETA 00:36
  |===                                                                                                                  |   3%, ETA 00:37
  |===                                                                                                                  |   3%, ETA 00:36
  |====                                                                                                                 |   3%, ETA 00:36
  |====                                                                                                                 |   3%, ETA 00:36
  |====                                                                                                                 |   3%, ETA 00:36
  |====                                                                                                                 |   3%, ETA 00:36
  |====                                                                                                                 |   3%, ETA 00:36
  |====                                                                                                                 |   3%, ETA 00:36
  |====                                                                                                                 |   3%, ETA 00:36
  |====                                                                                                                 |   3%, ETA 00:36
  |====                                                                                                                 |   3%, ETA 00:35
  |====                                                                                                                 |   3%, ETA 00:36
  |====                                                                                                                 |   4%, ETA 00:36
  |====                                                                                                                 |   4%, ETA 00:36
  |====                                                                                                                 |   4%, ETA 00:35
  |====                                                                                                                 |   4%, ETA 00:35
  |====                                                                                                                 |   4%, ETA 00:35
  |====                                                                                                                 |   4%, ETA 00:35
  |====                                                                                                                 |   4%, ETA 00:35
  |=====                                                                                                                |   4%, ETA 00:35
  |=====                                                                                                                |   4%, ETA 00:35
  |=====                                                                                                                |   4%, ETA 00:35
  |=====                                                                                                                |   4%, ETA 00:35
  |=====                                                                                                                |   4%, ETA 00:35
  |=====                                                                                                                |   4%, ETA 00:35
  |=====                                                                                                                |   4%, ETA 00:35
  |=====                                                                                                                |   4%, ETA 00:35
  |=====                                                                                                                |   4%, ETA 00:35
  |=====                                                                                                                |   4%, ETA 00:35
  |=====                                                                                                                |   4%, ETA 00:35
  |=====                                                                                                                |   4%, ETA 00:35
  |=====                                                                                                                |   4%, ETA 00:35
  |=====                                                                                                                |   4%, ETA 00:34
  |=====                                                                                                                |   5%, ETA 00:35
  |=====                                                                                                                |   5%, ETA 00:35
  |=====                                                                                                                |   5%, ETA 00:35
  |=====                                                                                                                |   5%, ETA 00:34
  |======                                                                                                               |   5%, ETA 00:35
  |======                                                                                                               |   5%, ETA 00:35
  |======                                                                                                               |   5%, ETA 00:34
  |======                                                                                                               |   5%, ETA 00:34
  |======                                                                                                               |   5%, ETA 00:34
  |======                                                                                                               |   5%, ETA 00:34
  |======                                                                                                               |   5%, ETA 00:34
  |======                                                                                                               |   5%, ETA 00:34
  |======                                                                                                               |   6%, ETA 00:34
  |======                                                                                                               |   6%, ETA 00:34
  |=======                                                                                                              |   6%, ETA 00:34
  |=======                                                                                                              |   6%, ETA 00:34
  |=======                                                                                                              |   6%, ETA 00:34
  |=======                                                                                                              |   6%, ETA 00:34
  |=======                                                                                                              |   6%, ETA 00:34
  |=======                                                                                                              |   6%, ETA 00:34
  |=======                                                                                                              |   6%, ETA 00:34
  |=======                                                                                                              |   6%, ETA 00:34
  |=======                                                                                                              |   6%, ETA 00:33
  |=======                                                                                                              |   6%, ETA 00:33
  |=======                                                                                                              |   6%, ETA 00:33
  |=======                                                                                                              |   6%, ETA 00:33
  |=======                                                                                                              |   6%, ETA 00:33
  |=======                                                                                                              |   6%, ETA 00:33
  |=======                                                                                                              |   6%, ETA 00:33
  |=======                                                                                                              |   6%, ETA 00:33
  |=======                                                                                                              |   6%, ETA 00:33
  |========                                                                                                             |   6%, ETA 00:33
  |========                                                                                                             |   6%, ETA 00:33
  |========                                                                                                             |   7%, ETA 00:33
  |========                                                                                                             |   7%, ETA 00:33
  |========                                                                                                             |   7%, ETA 00:33
  |========                                                                                                             |   7%, ETA 00:33
  |========                                                                                                             |   7%, ETA 00:33
  |========                                                                                                             |   7%, ETA 00:33
  |========                                                                                                             |   7%, ETA 00:33
  |========                                                                                                             |   7%, ETA 00:33
  |========                                                                                                             |   7%, ETA 00:33
  |========                                                                                                             |   7%, ETA 00:33
  |========                                                                                                             |   7%, ETA 00:33
  |========                                                                                                             |   7%, ETA 00:33
  |========                                                                                                             |   7%, ETA 00:33
  |========                                                                                                             |   7%, ETA 00:33
  |========                                                                                                             |   7%, ETA 00:33
  |=========                                                                                                            |   7%, ETA 00:33
  |=========                                                                                                            |   7%, ETA 00:33
  |=========                                                                                                            |   7%, ETA 00:33
  |=========                                                                                                            |   7%, ETA 00:33
  |=========                                                                                                            |   8%, ETA 00:33
  |=========                                                                                                            |   8%, ETA 00:33
  |=========                                                                                                            |   8%, ETA 00:33
  |=========                                                                                                            |   8%, ETA 00:33
  |=========                                                                                                            |   8%, ETA 00:32
  |=========                                                                                                            |   8%, ETA 00:33
  |=========                                                                                                            |   8%, ETA 00:32
  |=========                                                                                                            |   8%, ETA 00:32
  |=========                                                                                                            |   8%, ETA 00:32
  |=========                                                                                                            |   8%, ETA 00:32
  |=========                                                                                                            |   8%, ETA 00:32
  |=========                                                                                                            |   8%, ETA 00:32
  |=========                                                                                                            |   8%, ETA 00:32
  |==========                                                                                                           |   8%, ETA 00:32
  |==========                                                                                                           |   8%, ETA 00:32
  |==========                                                                                                           |   8%, ETA 00:32
  |==========                                                                                                           |   8%, ETA 00:32
  |==========                                                                                                           |   8%, ETA 00:32
  |==========                                                                                                           |   8%, ETA 00:32
  |==========                                                                                                           |   8%, ETA 00:32
  |==========                                                                                                           |   8%, ETA 00:32
  |==========                                                                                                           |   9%, ETA 00:32
  |==========                                                                                                           |   9%, ETA 00:32
  |==========                                                                                                           |   9%, ETA 00:32
  |==========                                                                                                           |   9%, ETA 00:32
  |==========                                                                                                           |   9%, ETA 00:32
  |==========                                                                                                           |   9%, ETA 00:32
  |==========                                                                                                           |   9%, ETA 00:32
  |==========                                                                                                           |   9%, ETA 00:32
  |==========                                                                                                           |   9%, ETA 00:32
  |===========                                                                                                          |   9%, ETA 00:32
  |===========                                                                                                          |   9%, ETA 00:32
  |===========                                                                                                          |   9%, ETA 00:32
  |===========                                                                                                          |   9%, ETA 00:32
  |===========                                                                                                          |   9%, ETA 00:32
  |===========                                                                                                          |   9%, ETA 00:32
  |===========                                                                                                          |   9%, ETA 00:32
  |===========                                                                                                          |   9%, ETA 00:32
  |===========                                                                                                          |   9%, ETA 00:32
  |===========                                                                                                          |   9%, ETA 00:32
  |===========                                                                                                          |  10%, ETA 00:32
  |===========                                                                                                          |  10%, ETA 00:32
  |===========                                                                                                          |  10%, ETA 00:32
  |===========                                                                                                          |  10%, ETA 00:32
  |===========                                                                                                          |  10%, ETA 00:32
  |===========                                                                                                          |  10%, ETA 00:32
  |===========                                                                                                          |  10%, ETA 00:32
  |============                                                                                                         |  10%, ETA 00:32
  |============                                                                                                         |  10%, ETA 00:32
  |============                                                                                                         |  10%, ETA 00:32
  |============                                                                                                         |  10%, ETA 00:32
  |============                                                                                                         |  10%, ETA 00:32
  |============                                                                                                         |  10%, ETA 00:31
  |============                                                                                                         |  10%, ETA 00:32
  |============                                                                                                         |  10%, ETA 00:31
  |============                                                                                                         |  10%, ETA 00:31
  |============                                                                                                         |  10%, ETA 00:31
  |============                                                                                                         |  10%, ETA 00:31
  |============                                                                                                         |  10%, ETA 00:31
  |============                                                                                                         |  10%, ETA 00:31
  |============                                                                                                         |  10%, ETA 00:31
  |============                                                                                                         |  11%, ETA 00:31
  |============                                                                                                         |  11%, ETA 00:31
  |============                                                                                                         |  11%, ETA 00:31
  |=============                                                                                                        |  11%, ETA 00:31
  |=============                                                                                                        |  11%, ETA 00:31
  |=============                                                                                                        |  11%, ETA 00:31
  |=============                                                                                                        |  11%, ETA 00:31
  |=============                                                                                                        |  11%, ETA 00:31
  |=============                                                                                                        |  11%, ETA 00:31
  |=============                                                                                                        |  11%, ETA 00:31
  |=============                                                                                                        |  11%, ETA 00:31
  |=============                                                                                                        |  11%, ETA 00:31
  |=============                                                                                                        |  11%, ETA 00:31
  |=============                                                                                                        |  11%, ETA 00:31
  |=============                                                                                                        |  11%, ETA 00:31
  |=============                                                                                                        |  11%, ETA 00:31
  |=============                                                                                                        |  11%, ETA 00:31
  |=============                                                                                                        |  11%, ETA 00:31
  |=============                                                                                                        |  11%, ETA 00:31
  |=============                                                                                                        |  12%, ETA 00:31
  |==============                                                                                                       |  12%, ETA 00:31
  |==============                                                                                                       |  12%, ETA 00:31
  |==============                                                                                                       |  12%, ETA 00:31
  |==============                                                                                                       |  12%, ETA 00:31
  |==============                                                                                                       |  12%, ETA 00:31
  |==============                                                                                                       |  12%, ETA 00:31
  |==============                                                                                                       |  12%, ETA 00:31
  |==============                                                                                                       |  12%, ETA 00:31
  |==============                                                                                                       |  12%, ETA 00:31
  |==============                                                                                                       |  12%, ETA 00:31
  |==============                                                                                                       |  12%, ETA 00:31
  |==============                                                                                                       |  12%, ETA 00:31
  |==============                                                                                                       |  12%, ETA 00:31
  |==============                                                                                                       |  12%, ETA 00:30
  |==============                                                                                                       |  12%, ETA 00:30
  |==============                                                                                                       |  12%, ETA 00:30
  |==============                                                                                                       |  12%, ETA 00:30
  |===============                                                                                                      |  12%, ETA 00:30
  |===============                                                                                                      |  12%, ETA 00:30
  |===============                                                                                                      |  12%, ETA 00:30
  |===============                                                                                                      |  13%, ETA 00:30
  |===============                                                                                                      |  13%, ETA 00:30
  |===============                                                                                                      |  13%, ETA 00:30
  |===============                                                                                                      |  13%, ETA 00:30
  |===============                                                                                                      |  13%, ETA 00:30
  |===============                                                                                                      |  13%, ETA 00:30
  |===============                                                                                                      |  13%, ETA 00:30
  |===============                                                                                                      |  13%, ETA 00:30
  |===============                                                                                                      |  13%, ETA 00:30
  |===============                                                                                                      |  13%, ETA 00:30
  |===============                                                                                                      |  13%, ETA 00:30
  |===============                                                                                                      |  13%, ETA 00:30
  |===============                                                                                                      |  13%, ETA 00:30
  |===============                                                                                                      |  13%, ETA 00:30
  |================                                                                                                     |  13%, ETA 00:30
  |================                                                                                                     |  13%, ETA 00:30
  |================                                                                                                     |  13%, ETA 00:30
  |================                                                                                                     |  13%, ETA 00:30
  |================                                                                                                     |  13%, ETA 00:30
  |================                                                                                                     |  14%, ETA 00:30
  |================                                                                                                     |  14%, ETA 00:30
  |================                                                                                                     |  14%, ETA 00:30
  |================                                                                                                     |  14%, ETA 00:30
  |================                                                                                                     |  14%, ETA 00:30
  |================                                                                                                     |  14%, ETA 00:30
  |================                                                                                                     |  14%, ETA 00:30
  |================                                                                                                     |  14%, ETA 00:29
  |================                                                                                                     |  14%, ETA 00:30
  |================                                                                                                     |  14%, ETA 00:29
  |================                                                                                                     |  14%, ETA 00:29
  |================                                                                                                     |  14%, ETA 00:29
  |================                                                                                                     |  14%, ETA 00:29
  |=================                                                                                                    |  14%, ETA 00:29
  |=================                                                                                                    |  14%, ETA 00:29
  |=================                                                                                                    |  14%, ETA 00:29
  |=================                                                                                                    |  14%, ETA 00:29
  |=================                                                                                                    |  14%, ETA 00:29
  |=================                                                                                                    |  14%, ETA 00:29
  |=================                                                                                                    |  14%, ETA 00:29
  |=================                                                                                                    |  14%, ETA 00:29
  |=================                                                                                                    |  15%, ETA 00:29
  |=================                                                                                                    |  15%, ETA 00:29
  |=================                                                                                                    |  15%, ETA 00:29
  |=================                                                                                                    |  15%, ETA 00:29
  |=================                                                                                                    |  15%, ETA 00:29
  |=================                                                                                                    |  15%, ETA 00:29
  |=================                                                                                                    |  15%, ETA 00:29
  |=================                                                                                                    |  15%, ETA 00:29
  |=================                                                                                                    |  15%, ETA 00:29
  |==================                                                                                                   |  15%, ETA 00:29
  |==================                                                                                                   |  15%, ETA 00:29
  |==================                                                                                                   |  15%, ETA 00:29
  |==================                                                                                                   |  15%, ETA 00:29
  |==================                                                                                                   |  15%, ETA 00:29
  |==================                                                                                                   |  15%, ETA 00:29
  |==================                                                                                                   |  15%, ETA 00:29
  |==================                                                                                                   |  15%, ETA 00:29
  |==================                                                                                                   |  15%, ETA 00:29
  |==================                                                                                                   |  15%, ETA 00:29
  |==================                                                                                                   |  16%, ETA 00:29
  |==================                                                                                                   |  16%, ETA 00:29
  |==================                                                                                                   |  16%, ETA 00:29
  |==================                                                                                                   |  16%, ETA 00:29
  |==================                                                                                                   |  16%, ETA 00:29
  |==================                                                                                                   |  16%, ETA 00:29
  |==================                                                                                                   |  16%, ETA 00:29
  |===================                                                                                                  |  16%, ETA 00:29
  |===================                                                                                                  |  16%, ETA 00:29
  |===================                                                                                                  |  16%, ETA 00:29
  |===================                                                                                                  |  16%, ETA 00:29
  |===================                                                                                                  |  16%, ETA 00:29
  |===================                                                                                                  |  16%, ETA 00:29
  |===================                                                                                                  |  16%, ETA 00:29
  |===================                                                                                                  |  16%, ETA 00:29
  |===================                                                                                                  |  16%, ETA 00:29
  |===================                                                                                                  |  16%, ETA 00:29
  |===================                                                                                                  |  16%, ETA 00:29
  |===================                                                                                                  |  17%, ETA 00:28
  |===================                                                                                                  |  17%, ETA 00:29
  |===================                                                                                                  |  17%, ETA 00:28
  |====================                                                                                                 |  17%, ETA 00:28
  |====================                                                                                                 |  17%, ETA 00:28
  |====================                                                                                                 |  17%, ETA 00:28
  |====================                                                                                                 |  17%, ETA 00:28
  |====================                                                                                                 |  17%, ETA 00:28
  |====================                                                                                                 |  17%, ETA 00:28
  |====================                                                                                                 |  17%, ETA 00:28
  |====================                                                                                                 |  17%, ETA 00:28
  |====================                                                                                                 |  17%, ETA 00:28
  |====================                                                                                                 |  17%, ETA 00:28
  |====================                                                                                                 |  17%, ETA 00:28
  |====================                                                                                                 |  17%, ETA 00:28
  |====================                                                                                                 |  17%, ETA 00:28
  |====================                                                                                                 |  17%, ETA 00:28
  |====================                                                                                                 |  17%, ETA 00:28
  |====================                                                                                                 |  17%, ETA 00:28
  |====================                                                                                                 |  18%, ETA 00:28
  |=====================                                                                                                |  18%, ETA 00:28
  |=====================                                                                                                |  18%, ETA 00:28
  |=====================                                                                                                |  18%, ETA 00:28
  |=====================                                                                                                |  18%, ETA 00:28
  |=====================                                                                                                |  18%, ETA 00:28
  |=====================                                                                                                |  18%, ETA 00:28
  |=====================                                                                                                |  18%, ETA 00:28
  |=====================                                                                                                |  18%, ETA 00:28
  |=====================                                                                                                |  18%, ETA 00:28
  |=====================                                                                                                |  18%, ETA 00:28
  |=====================                                                                                                |  18%, ETA 00:28
  |=====================                                                                                                |  18%, ETA 00:28
  |=====================                                                                                                |  18%, ETA 00:28
  |=====================                                                                                                |  18%, ETA 00:28
  |=====================                                                                                                |  18%, ETA 00:28
  |=====================                                                                                                |  18%, ETA 00:28
  |======================                                                                                               |  18%, ETA 00:28
  |======================                                                                                               |  18%, ETA 00:28
  |======================                                                                                               |  18%, ETA 00:28
  |======================                                                                                               |  19%, ETA 00:28
  |======================                                                                                               |  19%, ETA 00:28
  |======================                                                                                               |  19%, ETA 00:28
  |======================                                                                                               |  19%, ETA 00:28
  |======================                                                                                               |  19%, ETA 00:28
  |======================                                                                                               |  19%, ETA 00:28
  |======================                                                                                               |  19%, ETA 00:28
  |======================                                                                                               |  19%, ETA 00:28
  |======================                                                                                               |  19%, ETA 00:28
  |======================                                                                                               |  19%, ETA 00:28
  |======================                                                                                               |  19%, ETA 00:28
  |======================                                                                                               |  19%, ETA 00:28
  |======================                                                                                               |  19%, ETA 00:28
  |======================                                                                                               |  19%, ETA 00:28
  |=======================                                                                                              |  19%, ETA 00:27
  |=======================                                                                                              |  19%, ETA 00:27
  |=======================                                                                                              |  19%, ETA 00:27
  |=======================                                                                                              |  19%, ETA 00:27
  |=======================                                                                                              |  19%, ETA 00:27
  |=======================                                                                                              |  20%, ETA 00:27
  |=======================                                                                                              |  20%, ETA 00:27
  |=======================                                                                                              |  20%, ETA 00:27
  |=======================                                                                                              |  20%, ETA 00:27
  |=======================                                                                                              |  20%, ETA 00:27
  |=======================                                                                                              |  20%, ETA 00:27
  |=======================                                                                                              |  20%, ETA 00:27
  |=======================                                                                                              |  20%, ETA 00:27
  |=======================                                                                                              |  20%, ETA 00:27
  |=======================                                                                                              |  20%, ETA 00:27
  |=======================                                                                                              |  20%, ETA 00:27
  |=======================                                                                                              |  20%, ETA 00:27
  |========================                                                                                             |  20%, ETA 00:27
  |========================                                                                                             |  20%, ETA 00:27
  |========================                                                                                             |  20%, ETA 00:27
  |========================                                                                                             |  20%, ETA 00:27
  |========================                                                                                             |  20%, ETA 00:27
  |========================                                                                                             |  20%, ETA 00:27
  |========================                                                                                             |  20%, ETA 00:27
  |========================                                                                                             |  20%, ETA 00:27
  |========================                                                                                             |  20%, ETA 00:27
  |========================                                                                                             |  21%, ETA 00:27
  |========================                                                                                             |  21%, ETA 00:27
  |========================                                                                                             |  21%, ETA 00:27
  |========================                                                                                             |  21%, ETA 00:27
  |=========================                                                                                            |  21%, ETA 00:27
  |=========================                                                                                            |  21%, ETA 00:27
  |=========================                                                                                            |  21%, ETA 00:27
  |=========================                                                                                            |  21%, ETA 00:27
  |=========================                                                                                            |  21%, ETA 00:27
  |=========================                                                                                            |  21%, ETA 00:27
  |=========================                                                                                            |  21%, ETA 00:27
  |=========================                                                                                            |  21%, ETA 00:27
  |=========================                                                                                            |  21%, ETA 00:27
  |=========================                                                                                            |  21%, ETA 00:27
  |=========================                                                                                            |  21%, ETA 00:27
  |=========================                                                                                            |  22%, ETA 00:27
  |=========================                                                                                            |  22%, ETA 00:27
  |=========================                                                                                            |  22%, ETA 00:27
  |=========================                                                                                            |  22%, ETA 00:27
  |=========================                                                                                            |  22%, ETA 00:27
  |=========================                                                                                            |  22%, ETA 00:27
  |==========================                                                                                           |  22%, ETA 00:27
  |==========================                                                                                           |  22%, ETA 00:27
  |==========================                                                                                           |  22%, ETA 00:27
  |==========================                                                                                           |  22%, ETA 00:27
  |==========================                                                                                           |  22%, ETA 00:26
  |==========================                                                                                           |  22%, ETA 00:26
  |==========================                                                                                           |  22%, ETA 00:26
  |==========================                                                                                           |  22%, ETA 00:26
  |==========================                                                                                           |  22%, ETA 00:26
  |==========================                                                                                           |  22%, ETA 00:26
  |==========================                                                                                           |  22%, ETA 00:26
  |==========================                                                                                           |  22%, ETA 00:26
  |==========================                                                                                           |  22%, ETA 00:26
  |==========================                                                                                           |  22%, ETA 00:26
  |==========================                                                                                           |  22%, ETA 00:26
  |==========================                                                                                           |  23%, ETA 00:26
  |==========================                                                                                           |  23%, ETA 00:26
  |===========================                                                                                          |  23%, ETA 00:26
  |===========================                                                                                          |  23%, ETA 00:26
  |===========================                                                                                          |  23%, ETA 00:26
  |===========================                                                                                          |  23%, ETA 00:26
  |===========================                                                                                          |  23%, ETA 00:26
  |===========================                                                                                          |  23%, ETA 00:26
  |===========================                                                                                          |  23%, ETA 00:26
  |===========================                                                                                          |  23%, ETA 00:26
  |===========================                                                                                          |  23%, ETA 00:26
  |===========================                                                                                          |  23%, ETA 00:26
  |===========================                                                                                          |  23%, ETA 00:26
  |===========================                                                                                          |  23%, ETA 00:26
  |===========================                                                                                          |  23%, ETA 00:26
  |===========================                                                                                          |  23%, ETA 00:26
  |===========================                                                                                          |  23%, ETA 00:26
  |===========================                                                                                          |  23%, ETA 00:26
  |===========================                                                                                          |  23%, ETA 00:26
  |===========================                                                                                          |  24%, ETA 00:26
  |============================                                                                                         |  24%, ETA 00:26
  |============================                                                                                         |  24%, ETA 00:26
  |============================                                                                                         |  24%, ETA 00:26
  |============================                                                                                         |  24%, ETA 00:26
  |============================                                                                                         |  24%, ETA 00:26
  |============================                                                                                         |  24%, ETA 00:26
  |============================                                                                                         |  24%, ETA 00:26
  |============================                                                                                         |  24%, ETA 00:26
  |============================                                                                                         |  24%, ETA 00:26
  |============================                                                                                         |  24%, ETA 00:26
  |============================                                                                                         |  24%, ETA 00:26
  |============================                                                                                         |  24%, ETA 00:26
  |============================                                                                                         |  24%, ETA 00:26
  |============================                                                                                         |  24%, ETA 00:26
  |============================                                                                                         |  24%, ETA 00:26
  |============================                                                                                         |  24%, ETA 00:26
  |=============================                                                                                        |  24%, ETA 00:26
  |=============================                                                                                        |  24%, ETA 00:26
  |=============================                                                                                        |  24%, ETA 00:25
  |=============================                                                                                        |  25%, ETA 00:25
  |=============================                                                                                        |  25%, ETA 00:25
  |=============================                                                                                        |  25%, ETA 00:25
  |=============================                                                                                        |  25%, ETA 00:25
  |=============================                                                                                        |  25%, ETA 00:25
  |=============================                                                                                        |  25%, ETA 00:25
  |=============================                                                                                        |  25%, ETA 00:25
  |=============================                                                                                        |  25%, ETA 00:25
  |=============================                                                                                        |  25%, ETA 00:25
  |=============================                                                                                        |  25%, ETA 00:25
  |=============================                                                                                        |  25%, ETA 00:25
  |=============================                                                                                        |  25%, ETA 00:25
  |=============================                                                                                        |  25%, ETA 00:25
  |=============================                                                                                        |  25%, ETA 00:25
  |==============================                                                                                       |  25%, ETA 00:25
  |==============================                                                                                       |  25%, ETA 00:25
  |==============================                                                                                       |  25%, ETA 00:25
  |==============================                                                                                       |  25%, ETA 00:25
  |==============================                                                                                       |  25%, ETA 00:25
  |==============================                                                                                       |  26%, ETA 00:25
  |==============================                                                                                       |  26%, ETA 00:25
  |==============================                                                                                       |  26%, ETA 00:25
  |==============================                                                                                       |  26%, ETA 00:25
  |==============================                                                                                       |  26%, ETA 00:25
  |==============================                                                                                       |  26%, ETA 00:25
  |==============================                                                                                       |  26%, ETA 00:25
  |==============================                                                                                       |  26%, ETA 00:25
  |==============================                                                                                       |  26%, ETA 00:25
  |==============================                                                                                       |  26%, ETA 00:25
  |==============================                                                                                       |  26%, ETA 00:25
  |==============================                                                                                       |  26%, ETA 00:25
  |===============================                                                                                      |  26%, ETA 00:25
  |===============================                                                                                      |  26%, ETA 00:25
  |===============================                                                                                      |  26%, ETA 00:25
  |===============================                                                                                      |  26%, ETA 00:25
  |===============================                                                                                      |  26%, ETA 00:25
  |===============================                                                                                      |  26%, ETA 00:25
  |===============================                                                                                      |  26%, ETA 00:25
  |===============================                                                                                      |  26%, ETA 00:25
  |===============================                                                                                      |  26%, ETA 00:25
  |===============================                                                                                      |  27%, ETA 00:25
  |===============================                                                                                      |  27%, ETA 00:25
  |===============================                                                                                      |  27%, ETA 00:25
  |===============================                                                                                      |  27%, ETA 00:25
  |===============================                                                                                      |  27%, ETA 00:25
  |===============================                                                                                      |  27%, ETA 00:25
  |===============================                                                                                      |  27%, ETA 00:25
  |===============================                                                                                      |  27%, ETA 00:25
  |================================                                                                                     |  27%, ETA 00:25
  |================================                                                                                     |  27%, ETA 00:25
  |================================                                                                                     |  27%, ETA 00:25
  |================================                                                                                     |  27%, ETA 00:25
  |================================                                                                                     |  27%, ETA 00:25
  |================================                                                                                     |  27%, ETA 00:25
  |================================                                                                                     |  27%, ETA 00:25
  |================================                                                                                     |  27%, ETA 00:25
  |================================                                                                                     |  27%, ETA 00:24
  |================================                                                                                     |  27%, ETA 00:24
  |================================                                                                                     |  27%, ETA 00:24
  |================================                                                                                     |  28%, ETA 00:24
  |================================                                                                                     |  28%, ETA 00:24
  |================================                                                                                     |  28%, ETA 00:24
  |================================                                                                                     |  28%, ETA 00:24
  |================================                                                                                     |  28%, ETA 00:24
  |================================                                                                                     |  28%, ETA 00:24
  |=================================                                                                                    |  28%, ETA 00:24
  |=================================                                                                                    |  28%, ETA 00:24
  |=================================                                                                                    |  28%, ETA 00:24
  |=================================                                                                                    |  28%, ETA 00:24
  |=================================                                                                                    |  28%, ETA 00:24
  |=================================                                                                                    |  28%, ETA 00:24
  |=================================                                                                                    |  28%, ETA 00:24
  |=================================                                                                                    |  28%, ETA 00:24
  |=================================                                                                                    |  28%, ETA 00:24
  |=================================                                                                                    |  28%, ETA 00:24
  |=================================                                                                                    |  28%, ETA 00:24
  |=================================                                                                                    |  28%, ETA 00:24
  |=================================                                                                                    |  28%, ETA 00:24
  |=================================                                                                                    |  28%, ETA 00:24
  |=================================                                                                                    |  28%, ETA 00:24
  |=================================                                                                                    |  29%, ETA 00:24
  |=================================                                                                                    |  29%, ETA 00:24
  |==================================                                                                                   |  29%, ETA 00:24
  |==================================                                                                                   |  29%, ETA 00:24
  |==================================                                                                                   |  29%, ETA 00:24
  |==================================                                                                                   |  29%, ETA 00:24
  |==================================                                                                                   |  29%, ETA 00:24
  |==================================                                                                                   |  29%, ETA 00:24
  |==================================                                                                                   |  29%, ETA 00:24
  |==================================                                                                                   |  29%, ETA 00:24
  |==================================                                                                                   |  29%, ETA 00:24
  |==================================                                                                                   |  29%, ETA 00:24
  |==================================                                                                                   |  29%, ETA 00:24
  |==================================                                                                                   |  29%, ETA 00:24
  |==================================                                                                                   |  29%, ETA 00:24
  |==================================                                                                                   |  29%, ETA 00:24
  |==================================                                                                                   |  29%, ETA 00:24
  |==================================                                                                                   |  29%, ETA 00:24
  |==================================                                                                                   |  29%, ETA 00:24
  |===================================                                                                                  |  30%, ETA 00:24
  |===================================                                                                                  |  30%, ETA 00:24
  |===================================                                                                                  |  30%, ETA 00:24
  |===================================                                                                                  |  30%, ETA 00:24
  |===================================                                                                                  |  30%, ETA 00:24
  |===================================                                                                                  |  30%, ETA 00:24
  |===================================                                                                                  |  30%, ETA 00:24
  |===================================                                                                                  |  30%, ETA 00:24
  |===================================                                                                                  |  30%, ETA 00:24
  |===================================                                                                                  |  30%, ETA 00:24
  |===================================                                                                                  |  30%, ETA 00:24
  |===================================                                                                                  |  30%, ETA 00:24
  |===================================                                                                                  |  30%, ETA 00:24
  |===================================                                                                                  |  30%, ETA 00:23
  |===================================                                                                                  |  30%, ETA 00:23
  |===================================                                                                                  |  30%, ETA 00:23
  |===================================                                                                                  |  30%, ETA 00:23
  |====================================                                                                                 |  30%, ETA 00:23
  |====================================                                                                                 |  30%, ETA 00:23
  |====================================                                                                                 |  30%, ETA 00:23
  |====================================                                                                                 |  30%, ETA 00:23
  |====================================                                                                                 |  31%, ETA 00:23
  |====================================                                                                                 |  31%, ETA 00:23
  |====================================                                                                                 |  31%, ETA 00:23
  |====================================                                                                                 |  31%, ETA 00:23
  |====================================                                                                                 |  31%, ETA 00:23
  |====================================                                                                                 |  31%, ETA 00:23
  |====================================                                                                                 |  31%, ETA 00:23
  |====================================                                                                                 |  31%, ETA 00:23
  |====================================                                                                                 |  31%, ETA 00:23
  |====================================                                                                                 |  31%, ETA 00:23
  |====================================                                                                                 |  31%, ETA 00:23
  |====================================                                                                                 |  31%, ETA 00:23
  |====================================                                                                                 |  31%, ETA 00:23
  |=====================================                                                                                |  31%, ETA 00:23
  |=====================================                                                                                |  31%, ETA 00:23
  |=====================================                                                                                |  31%, ETA 00:23
  |=====================================                                                                                |  31%, ETA 00:23
  |=====================================                                                                                |  31%, ETA 00:23
  |=====================================                                                                                |  31%, ETA 00:23
  |=====================================                                                                                |  32%, ETA 00:23
  |=====================================                                                                                |  32%, ETA 00:23
  |=====================================                                                                                |  32%, ETA 00:23
  |=====================================                                                                                |  32%, ETA 00:23
  |=====================================                                                                                |  32%, ETA 00:23
  |=====================================                                                                                |  32%, ETA 00:23
  |=====================================                                                                                |  32%, ETA 00:23
  |=====================================                                                                                |  32%, ETA 00:23
  |=====================================                                                                                |  32%, ETA 00:23
  |=====================================                                                                                |  32%, ETA 00:23
  |=====================================                                                                                |  32%, ETA 00:23
  |=====================================                                                                                |  32%, ETA 00:23
  |======================================                                                                               |  32%, ETA 00:23
  |======================================                                                                               |  32%, ETA 00:23
  |======================================                                                                               |  32%, ETA 00:23
  |======================================                                                                               |  32%, ETA 00:23
  |======================================                                                                               |  32%, ETA 00:23
  |======================================                                                                               |  32%, ETA 00:23
  |======================================                                                                               |  32%, ETA 00:23
  |======================================                                                                               |  32%, ETA 00:23
  |======================================                                                                               |  32%, ETA 00:23
  |======================================                                                                               |  33%, ETA 00:23
  |======================================                                                                               |  33%, ETA 00:23
  |======================================                                                                               |  33%, ETA 00:23
  |======================================                                                                               |  33%, ETA 00:23
  |======================================                                                                               |  33%, ETA 00:23
  |======================================                                                                               |  33%, ETA 00:23
  |======================================                                                                               |  33%, ETA 00:22
  |======================================                                                                               |  33%, ETA 00:22
  |=======================================                                                                              |  33%, ETA 00:22
  |=======================================                                                                              |  33%, ETA 00:22
  |=======================================                                                                              |  33%, ETA 00:22
  |=======================================                                                                              |  33%, ETA 00:22
  |=======================================                                                                              |  33%, ETA 00:22
  |=======================================                                                                              |  33%, ETA 00:22
  |=======================================                                                                              |  33%, ETA 00:22
  |=======================================                                                                              |  33%, ETA 00:22
  |=======================================                                                                              |  33%, ETA 00:22
  |=======================================                                                                              |  33%, ETA 00:22
  |=======================================                                                                              |  33%, ETA 00:22
  |=======================================                                                                              |  34%, ETA 00:22
  |=======================================                                                                              |  34%, ETA 00:22
  |=======================================                                                                              |  34%, ETA 00:22
  |=======================================                                                                              |  34%, ETA 00:22
  |=======================================                                                                              |  34%, ETA 00:22
  |=======================================                                                                              |  34%, ETA 00:22
  |========================================                                                                             |  34%, ETA 00:22
  |========================================                                                                             |  34%, ETA 00:22
  |========================================                                                                             |  34%, ETA 00:22
  |========================================                                                                             |  34%, ETA 00:22
  |========================================                                                                             |  34%, ETA 00:22
  |========================================                                                                             |  34%, ETA 00:22
  |========================================                                                                             |  34%, ETA 00:22
  |========================================                                                                             |  34%, ETA 00:22
  |========================================                                                                             |  34%, ETA 00:22
  |========================================                                                                             |  34%, ETA 00:22
  |========================================                                                                             |  34%, ETA 00:22
  |========================================                                                                             |  34%, ETA 00:22
  |========================================                                                                             |  34%, ETA 00:22
  |========================================                                                                             |  34%, ETA 00:22
  |========================================                                                                             |  34%, ETA 00:22
  |========================================                                                                             |  35%, ETA 00:22
  |========================================                                                                             |  35%, ETA 00:22
  |=========================================                                                                            |  35%, ETA 00:22
  |=========================================                                                                            |  35%, ETA 00:22
  |=========================================                                                                            |  35%, ETA 00:22
  |=========================================                                                                            |  35%, ETA 00:22
  |=========================================                                                                            |  35%, ETA 00:22
  |=========================================                                                                            |  35%, ETA 00:22
  |=========================================                                                                            |  35%, ETA 00:22
  |=========================================                                                                            |  35%, ETA 00:22
  |=========================================                                                                            |  35%, ETA 00:22
  |=========================================                                                                            |  35%, ETA 00:22
  |=========================================                                                                            |  35%, ETA 00:22
  |=========================================                                                                            |  35%, ETA 00:22
  |=========================================                                                                            |  35%, ETA 00:22
  |=========================================                                                                            |  35%, ETA 00:22
  |=========================================                                                                            |  35%, ETA 00:22
  |=========================================                                                                            |  35%, ETA 00:22
  |=========================================                                                                            |  35%, ETA 00:22
  |==========================================                                                                           |  36%, ETA 00:22
  |==========================================                                                                           |  36%, ETA 00:22
  |==========================================                                                                           |  36%, ETA 00:21
  |==========================================                                                                           |  36%, ETA 00:21
  |==========================================                                                                           |  36%, ETA 00:21
  |==========================================                                                                           |  36%, ETA 00:21
  |==========================================                                                                           |  36%, ETA 00:21
  |==========================================                                                                           |  36%, ETA 00:21
  |==========================================                                                                           |  36%, ETA 00:21
  |==========================================                                                                           |  36%, ETA 00:21
  |==========================================                                                                           |  36%, ETA 00:21
  |==========================================                                                                           |  36%, ETA 00:21
  |==========================================                                                                           |  36%, ETA 00:21
  |==========================================                                                                           |  36%, ETA 00:21
  |==========================================                                                                           |  36%, ETA 00:21
  |==========================================                                                                           |  36%, ETA 00:21
  |==========================================                                                                           |  36%, ETA 00:21
  |===========================================                                                                          |  36%, ETA 00:21
  |===========================================                                                                          |  36%, ETA 00:21
  |===========================================                                                                          |  36%, ETA 00:21
  |===========================================                                                                          |  36%, ETA 00:21
  |===========================================                                                                          |  37%, ETA 00:21
  |===========================================                                                                          |  37%, ETA 00:21
  |===========================================                                                                          |  37%, ETA 00:21
  |===========================================                                                                          |  37%, ETA 00:21
  |===========================================                                                                          |  37%, ETA 00:21
  |===========================================                                                                          |  37%, ETA 00:21
  |===========================================                                                                          |  37%, ETA 00:21
  |===========================================                                                                          |  37%, ETA 00:21
  |===========================================                                                                          |  37%, ETA 00:21
  |===========================================                                                                          |  37%, ETA 00:21
  |===========================================                                                                          |  37%, ETA 00:21
  |===========================================                                                                          |  37%, ETA 00:21
  |===========================================                                                                          |  37%, ETA 00:21
  |============================================                                                                         |  37%, ETA 00:21
  |============================================                                                                         |  37%, ETA 00:21
  |============================================                                                                         |  37%, ETA 00:21
  |============================================                                                                         |  38%, ETA 00:21
  |============================================                                                                         |  38%, ETA 00:21
  |============================================                                                                         |  38%, ETA 00:21
  |============================================                                                                         |  38%, ETA 00:21
  |============================================                                                                         |  38%, ETA 00:21
  |============================================                                                                         |  38%, ETA 00:21
  |============================================                                                                         |  38%, ETA 00:21
  |============================================                                                                         |  38%, ETA 00:21
  |============================================                                                                         |  38%, ETA 00:21
  |============================================                                                                         |  38%, ETA 00:21
  |============================================                                                                         |  38%, ETA 00:21
  |=============================================                                                                        |  38%, ETA 00:21
  |=============================================                                                                        |  38%, ETA 00:21
  |=============================================                                                                        |  38%, ETA 00:21
  |=============================================                                                                        |  38%, ETA 00:21
  |=============================================                                                                        |  38%, ETA 00:21
  |=============================================                                                                        |  38%, ETA 00:21
  |=============================================                                                                        |  38%, ETA 00:21
  |=============================================                                                                        |  38%, ETA 00:21
  |=============================================                                                                        |  38%, ETA 00:21
  |=============================================                                                                        |  38%, ETA 00:21
  |=============================================                                                                        |  39%, ETA 00:21
  |=============================================                                                                        |  39%, ETA 00:21
  |=============================================                                                                        |  39%, ETA 00:21
  |=============================================                                                                        |  39%, ETA 00:21
  |=============================================                                                                        |  39%, ETA 00:20
  |=============================================                                                                        |  39%, ETA 00:20
  |=============================================                                                                        |  39%, ETA 00:20
  |==============================================                                                                       |  39%, ETA 00:20
  |==============================================                                                                       |  39%, ETA 00:20
  |==============================================                                                                       |  39%, ETA 00:20
  |==============================================                                                                       |  39%, ETA 00:20
  |==============================================                                                                       |  39%, ETA 00:20
  |==============================================                                                                       |  39%, ETA 00:20
  |==============================================                                                                       |  39%, ETA 00:20
  |==============================================                                                                       |  39%, ETA 00:20
  |==============================================                                                                       |  39%, ETA 00:20
  |==============================================                                                                       |  39%, ETA 00:20
  |==============================================                                                                       |  39%, ETA 00:20
  |==============================================                                                                       |  39%, ETA 00:20
  |==============================================                                                                       |  40%, ETA 00:20
  |==============================================                                                                       |  40%, ETA 00:20
  |==============================================                                                                       |  40%, ETA 00:20
  |==============================================                                                                       |  40%, ETA 00:20
  |==============================================                                                                       |  40%, ETA 00:20
  |===============================================                                                                      |  40%, ETA 00:20
  |===============================================                                                                      |  40%, ETA 00:20
  |===============================================                                                                      |  40%, ETA 00:20
  |===============================================                                                                      |  40%, ETA 00:20
  |===============================================                                                                      |  40%, ETA 00:20
  |===============================================                                                                      |  40%, ETA 00:20
  |===============================================                                                                      |  40%, ETA 00:20
  |===============================================                                                                      |  40%, ETA 00:20
  |===============================================                                                                      |  40%, ETA 00:20
  |===============================================                                                                      |  40%, ETA 00:20
  |===============================================                                                                      |  40%, ETA 00:20
  |===============================================                                                                      |  40%, ETA 00:20
  |===============================================                                                                      |  40%, ETA 00:20
  |===============================================                                                                      |  40%, ETA 00:20
  |===============================================                                                                      |  40%, ETA 00:20
  |===============================================                                                                      |  40%, ETA 00:20
  |===============================================                                                                      |  41%, ETA 00:20
  |================================================                                                                     |  41%, ETA 00:20
  |================================================                                                                     |  41%, ETA 00:20
  |================================================                                                                     |  41%, ETA 00:20
  |================================================                                                                     |  41%, ETA 00:20
  |================================================                                                                     |  41%, ETA 00:20
  |================================================                                                                     |  41%, ETA 00:20
  |================================================                                                                     |  41%, ETA 00:20
  |================================================                                                                     |  41%, ETA 00:20
  |================================================                                                                     |  41%, ETA 00:20
  |================================================                                                                     |  41%, ETA 00:20
  |================================================                                                                     |  41%, ETA 00:20
  |================================================                                                                     |  41%, ETA 00:20
  |================================================                                                                     |  41%, ETA 00:20
  |================================================                                                                     |  41%, ETA 00:20
  |================================================                                                                     |  41%, ETA 00:20
  |================================================                                                                     |  41%, ETA 00:20
  |================================================                                                                     |  41%, ETA 00:20
  |================================================                                                                     |  41%, ETA 00:20
  |=================================================                                                                    |  42%, ETA 00:20
  |=================================================                                                                    |  42%, ETA 00:19
  |=================================================                                                                    |  42%, ETA 00:19
  |=================================================                                                                    |  42%, ETA 00:19
  |=================================================                                                                    |  42%, ETA 00:19
  |=================================================                                                                    |  42%, ETA 00:19
  |=================================================                                                                    |  42%, ETA 00:19
  |=================================================                                                                    |  42%, ETA 00:19
  |=================================================                                                                    |  42%, ETA 00:19
  |=================================================                                                                    |  42%, ETA 00:19
  |=================================================                                                                    |  42%, ETA 00:19
  |=================================================                                                                    |  42%, ETA 00:19
  |=================================================                                                                    |  42%, ETA 00:19
  |=================================================                                                                    |  42%, ETA 00:19
  |=================================================                                                                    |  42%, ETA 00:19
  |=================================================                                                                    |  42%, ETA 00:19
  |=================================================                                                                    |  42%, ETA 00:19
  |==================================================                                                                   |  42%, ETA 00:19
  |==================================================                                                                   |  42%, ETA 00:19
  |==================================================                                                                   |  42%, ETA 00:19
  |==================================================                                                                   |  43%, ETA 00:19
  |==================================================                                                                   |  43%, ETA 00:19
  |==================================================                                                                   |  43%, ETA 00:19
  |==================================================                                                                   |  43%, ETA 00:19
  |==================================================                                                                   |  43%, ETA 00:19
  |==================================================                                                                   |  43%, ETA 00:19
  |==================================================                                                                   |  43%, ETA 00:19
  |==================================================                                                                   |  43%, ETA 00:19
  |==================================================                                                                   |  43%, ETA 00:19
  |==================================================                                                                   |  43%, ETA 00:19
  |==================================================                                                                   |  43%, ETA 00:19
  |==================================================                                                                   |  43%, ETA 00:19
  |==================================================                                                                   |  43%, ETA 00:19
  |===================================================                                                                  |  43%, ETA 00:19
  |===================================================                                                                  |  43%, ETA 00:19
  |===================================================                                                                  |  43%, ETA 00:19
  |===================================================                                                                  |  43%, ETA 00:19
  |===================================================                                                                  |  43%, ETA 00:19
  |===================================================                                                                  |  43%, ETA 00:19
  |===================================================                                                                  |  44%, ETA 00:19
  |===================================================                                                                  |  44%, ETA 00:19
  |===================================================                                                                  |  44%, ETA 00:19
  |===================================================                                                                  |  44%, ETA 00:19
  |===================================================                                                                  |  44%, ETA 00:19
  |===================================================                                                                  |  44%, ETA 00:19
  |===================================================                                                                  |  44%, ETA 00:19
  |===================================================                                                                  |  44%, ETA 00:19
  |===================================================                                                                  |  44%, ETA 00:19
  |===================================================                                                                  |  44%, ETA 00:19
  |===================================================                                                                  |  44%, ETA 00:19
  |====================================================                                                                 |  44%, ETA 00:19
  |====================================================                                                                 |  44%, ETA 00:19
  |====================================================                                                                 |  44%, ETA 00:19
  |====================================================                                                                 |  44%, ETA 00:19
  |====================================================                                                                 |  44%, ETA 00:19
  |====================================================                                                                 |  44%, ETA 00:19
  |====================================================                                                                 |  44%, ETA 00:19
  |====================================================                                                                 |  44%, ETA 00:18
  |====================================================                                                                 |  44%, ETA 00:18
  |====================================================                                                                 |  44%, ETA 00:18
  |====================================================                                                                 |  45%, ETA 00:18
  |====================================================                                                                 |  45%, ETA 00:18
  |====================================================                                                                 |  45%, ETA 00:18
  |====================================================                                                                 |  45%, ETA 00:18
  |====================================================                                                                 |  45%, ETA 00:18
  |====================================================                                                                 |  45%, ETA 00:18
  |====================================================                                                                 |  45%, ETA 00:18
  |=====================================================                                                                |  45%, ETA 00:18
  |=====================================================                                                                |  45%, ETA 00:18
  |=====================================================                                                                |  45%, ETA 00:18
  |=====================================================                                                                |  45%, ETA 00:18
  |=====================================================                                                                |  45%, ETA 00:18
  |=====================================================                                                                |  45%, ETA 00:18
  |=====================================================                                                                |  45%, ETA 00:18
  |=====================================================                                                                |  45%, ETA 00:18
  |=====================================================                                                                |  45%, ETA 00:18
  |=====================================================                                                                |  45%, ETA 00:18
  |=====================================================                                                                |  45%, ETA 00:18
  |=====================================================                                                                |  45%, ETA 00:18
  |=====================================================                                                                |  46%, ETA 00:18
  |=====================================================                                                                |  46%, ETA 00:18
  |=====================================================                                                                |  46%, ETA 00:18
  |=====================================================                                                                |  46%, ETA 00:18
  |=====================================================                                                                |  46%, ETA 00:18
  |======================================================                                                               |  46%, ETA 00:18
  |======================================================                                                               |  46%, ETA 00:18
  |======================================================                                                               |  46%, ETA 00:18
  |======================================================                                                               |  46%, ETA 00:18
  |======================================================                                                               |  46%, ETA 00:18
  |======================================================                                                               |  46%, ETA 00:18
  |======================================================                                                               |  46%, ETA 00:18
  |======================================================                                                               |  46%, ETA 00:18
  |======================================================                                                               |  46%, ETA 00:18
  |======================================================                                                               |  46%, ETA 00:18
  |======================================================                                                               |  46%, ETA 00:18
  |======================================================                                                               |  46%, ETA 00:18
  |======================================================                                                               |  46%, ETA 00:18
  |======================================================                                                               |  46%, ETA 00:18
  |======================================================                                                               |  46%, ETA 00:18
  |======================================================                                                               |  46%, ETA 00:18
  |======================================================                                                               |  47%, ETA 00:18
  |=======================================================                                                              |  47%, ETA 00:18
  |=======================================================                                                              |  47%, ETA 00:18
  |=======================================================                                                              |  47%, ETA 00:18
  |=======================================================                                                              |  47%, ETA 00:18
  |=======================================================                                                              |  47%, ETA 00:18
  |=======================================================                                                              |  47%, ETA 00:18
  |=======================================================                                                              |  47%, ETA 00:18
  |=======================================================                                                              |  47%, ETA 00:18
  |=======================================================                                                              |  47%, ETA 00:18
  |=======================================================                                                              |  47%, ETA 00:18
  |=======================================================                                                              |  47%, ETA 00:18
  |=======================================================                                                              |  47%, ETA 00:18
  |=======================================================                                                              |  47%, ETA 00:18
  |=======================================================                                                              |  47%, ETA 00:18
  |=======================================================                                                              |  47%, ETA 00:17
  |=======================================================                                                              |  47%, ETA 00:17
  |=======================================================                                                              |  47%, ETA 00:17
  |========================================================                                                             |  47%, ETA 00:17
  |========================================================                                                             |  48%, ETA 00:17
  |========================================================                                                             |  48%, ETA 00:17
  |========================================================                                                             |  48%, ETA 00:17
  |========================================================                                                             |  48%, ETA 00:17
  |========================================================                                                             |  48%, ETA 00:17
  |========================================================                                                             |  48%, ETA 00:17
  |========================================================                                                             |  48%, ETA 00:17
  |========================================================                                                             |  48%, ETA 00:17
  |========================================================                                                             |  48%, ETA 00:17
  |========================================================                                                             |  48%, ETA 00:17
  |========================================================                                                             |  48%, ETA 00:17
  |========================================================                                                             |  48%, ETA 00:17
  |========================================================                                                             |  48%, ETA 00:17
  |========================================================                                                             |  48%, ETA 00:17
  |========================================================                                                             |  48%, ETA 00:17
  |=========================================================                                                            |  48%, ETA 00:17
  |=========================================================                                                            |  48%, ETA 00:17
  |=========================================================                                                            |  48%, ETA 00:17
  |=========================================================                                                            |  48%, ETA 00:17
  |=========================================================                                                            |  48%, ETA 00:17
  |=========================================================                                                            |  49%, ETA 00:17
  |=========================================================                                                            |  49%, ETA 00:17
  |=========================================================                                                            |  49%, ETA 00:17
  |=========================================================                                                            |  49%, ETA 00:17
  |=========================================================                                                            |  49%, ETA 00:17
  |=========================================================                                                            |  49%, ETA 00:17
  |=========================================================                                                            |  49%, ETA 00:17
  |=========================================================                                                            |  49%, ETA 00:17
  |=========================================================                                                            |  49%, ETA 00:17
  |=========================================================                                                            |  49%, ETA 00:17
  |=========================================================                                                            |  49%, ETA 00:17
  |=========================================================                                                            |  49%, ETA 00:17
  |==========================================================                                                           |  49%, ETA 00:17
  |==========================================================                                                           |  49%, ETA 00:17
  |==========================================================                                                           |  49%, ETA 00:17
  |==========================================================                                                           |  49%, ETA 00:17
  |==========================================================                                                           |  49%, ETA 00:17
  |==========================================================                                                           |  49%, ETA 00:17
  |==========================================================                                                           |  50%, ETA 00:17
  |==========================================================                                                           |  50%, ETA 00:17
  |==========================================================                                                           |  50%, ETA 00:17
  |==========================================================                                                           |  50%, ETA 00:17
  |==========================================================                                                           |  50%, ETA 00:17
  |==========================================================                                                           |  50%, ETA 00:17
  |==========================================================                                                           |  50%, ETA 00:17
  |==========================================================                                                           |  50%, ETA 00:17
  |==========================================================                                                           |  50%, ETA 00:17
  |==========================================================                                                           |  50%, ETA 00:17
  |==========================================================                                                           |  50%, ETA 00:17
  |===========================================================                                                          |  50%, ETA 00:17
  |===========================================================                                                          |  50%, ETA 00:17
  |===========================================================                                                          |  50%, ETA 00:17
  |===========================================================                                                          |  50%, ETA 00:17
  |===========================================================                                                          |  50%, ETA 00:17
  |===========================================================                                                          |  50%, ETA 00:17
  |===========================================================                                                          |  50%, ETA 00:17
  |===========================================================                                                          |  50%, ETA 00:16
  |===========================================================                                                          |  50%, ETA 00:16
  |===========================================================                                                          |  50%, ETA 00:16
  |===========================================================                                                          |  51%, ETA 00:16
  |===========================================================                                                          |  51%, ETA 00:16
  |===========================================================                                                          |  51%, ETA 00:16
  |===========================================================                                                          |  51%, ETA 00:16
  |===========================================================                                                          |  51%, ETA 00:16
  |===========================================================                                                          |  51%, ETA 00:16
  |===========================================================                                                          |  51%, ETA 00:16
  |============================================================                                                         |  51%, ETA 00:16
  |============================================================                                                         |  51%, ETA 00:16
  |============================================================                                                         |  51%, ETA 00:16
  |============================================================                                                         |  51%, ETA 00:16
  |============================================================                                                         |  51%, ETA 00:16
  |============================================================                                                         |  51%, ETA 00:16
  |============================================================                                                         |  51%, ETA 00:16
  |============================================================                                                         |  51%, ETA 00:16
  |============================================================                                                         |  51%, ETA 00:16
  |============================================================                                                         |  51%, ETA 00:16
  |============================================================                                                         |  51%, ETA 00:16
  |============================================================                                                         |  51%, ETA 00:16
  |============================================================                                                         |  52%, ETA 00:16
  |============================================================                                                         |  52%, ETA 00:16
  |============================================================                                                         |  52%, ETA 00:16
  |============================================================                                                         |  52%, ETA 00:16
  |============================================================                                                         |  52%, ETA 00:16
  |=============================================================                                                        |  52%, ETA 00:16
  |=============================================================                                                        |  52%, ETA 00:16
  |=============================================================                                                        |  52%, ETA 00:16
  |=============================================================                                                        |  52%, ETA 00:16
  |=============================================================                                                        |  52%, ETA 00:16
  |=============================================================                                                        |  52%, ETA 00:16
  |=============================================================                                                        |  52%, ETA 00:16
  |=============================================================                                                        |  52%, ETA 00:16
  |=============================================================                                                        |  52%, ETA 00:16
  |=============================================================                                                        |  52%, ETA 00:16
  |=============================================================                                                        |  52%, ETA 00:16
  |=============================================================                                                        |  52%, ETA 00:16
  |=============================================================                                                        |  52%, ETA 00:16
  |=============================================================                                                        |  52%, ETA 00:16
  |=============================================================                                                        |  52%, ETA 00:16
  |=============================================================                                                        |  53%, ETA 00:16
  |==============================================================                                                       |  53%, ETA 00:16
  |==============================================================                                                       |  53%, ETA 00:16
  |==============================================================                                                       |  53%, ETA 00:16
  |==============================================================                                                       |  53%, ETA 00:16
  |==============================================================                                                       |  53%, ETA 00:16
  |==============================================================                                                       |  53%, ETA 00:16
  |==============================================================                                                       |  53%, ETA 00:16
  |==============================================================                                                       |  53%, ETA 00:16
  |==============================================================                                                       |  53%, ETA 00:16
  |==============================================================                                                       |  53%, ETA 00:16
  |==============================================================                                                       |  53%, ETA 00:16
  |==============================================================                                                       |  53%, ETA 00:16
  |==============================================================                                                       |  53%, ETA 00:16
  |==============================================================                                                       |  53%, ETA 00:16
  |==============================================================                                                       |  53%, ETA 00:15
  |==============================================================                                                       |  53%, ETA 00:15
  |===============================================================                                                      |  53%, ETA 00:15
  |===============================================================                                                      |  54%, ETA 00:15
  |===============================================================                                                      |  54%, ETA 00:15
  |===============================================================                                                      |  54%, ETA 00:15
  |===============================================================                                                      |  54%, ETA 00:15
  |===============================================================                                                      |  54%, ETA 00:15
  |===============================================================                                                      |  54%, ETA 00:15
  |===============================================================                                                      |  54%, ETA 00:15
  |===============================================================                                                      |  54%, ETA 00:15
  |===============================================================                                                      |  54%, ETA 00:15
  |===============================================================                                                      |  54%, ETA 00:15
  |===============================================================                                                      |  54%, ETA 00:15
  |===============================================================                                                      |  54%, ETA 00:15
  |===============================================================                                                      |  54%, ETA 00:15
  |===============================================================                                                      |  54%, ETA 00:15
  |===============================================================                                                      |  54%, ETA 00:15
  |===============================================================                                                      |  54%, ETA 00:15
  |================================================================                                                     |  54%, ETA 00:15
  |================================================================                                                     |  54%, ETA 00:15
  |================================================================                                                     |  54%, ETA 00:15
  |================================================================                                                     |  54%, ETA 00:15
  |================================================================                                                     |  55%, ETA 00:15
  |================================================================                                                     |  55%, ETA 00:15
  |================================================================                                                     |  55%, ETA 00:15
  |================================================================                                                     |  55%, ETA 00:15
  |================================================================                                                     |  55%, ETA 00:15
  |================================================================                                                     |  55%, ETA 00:15
  |================================================================                                                     |  55%, ETA 00:15
  |================================================================                                                     |  55%, ETA 00:15
  |================================================================                                                     |  55%, ETA 00:15
  |================================================================                                                     |  55%, ETA 00:15
  |================================================================                                                     |  55%, ETA 00:15
  |================================================================                                                     |  55%, ETA 00:15
  |================================================================                                                     |  55%, ETA 00:15
  |=================================================================                                                    |  55%, ETA 00:15
  |=================================================================                                                    |  55%, ETA 00:15
  |=================================================================                                                    |  55%, ETA 00:15
  |=================================================================                                                    |  55%, ETA 00:15
  |=================================================================                                                    |  55%, ETA 00:15
  |=================================================================                                                    |  55%, ETA 00:15
  |=================================================================                                                    |  55%, ETA 00:15
  |=================================================================                                                    |  56%, ETA 00:15
  |=================================================================                                                    |  56%, ETA 00:15
  |=================================================================                                                    |  56%, ETA 00:15
  |=================================================================                                                    |  56%, ETA 00:15
  |=================================================================                                                    |  56%, ETA 00:15
  |=================================================================                                                    |  56%, ETA 00:15
  |=================================================================                                                    |  56%, ETA 00:15
  |=================================================================                                                    |  56%, ETA 00:15
  |==================================================================                                                   |  56%, ETA 00:15
  |==================================================================                                                   |  56%, ETA 00:15
  |==================================================================                                                   |  56%, ETA 00:15
  |==================================================================                                                   |  56%, ETA 00:15
  |==================================================================                                                   |  56%, ETA 00:15
  |==================================================================                                                   |  56%, ETA 00:15
  |==================================================================                                                   |  56%, ETA 00:14
  |==================================================================                                                   |  56%, ETA 00:14
  |==================================================================                                                   |  56%, ETA 00:14
  |==================================================================                                                   |  56%, ETA 00:14
  |==================================================================                                                   |  56%, ETA 00:14
  |==================================================================                                                   |  57%, ETA 00:14
  |==================================================================                                                   |  57%, ETA 00:14
  |==================================================================                                                   |  57%, ETA 00:14
  |==================================================================                                                   |  57%, ETA 00:14
  |==================================================================                                                   |  57%, ETA 00:14
  |==================================================================                                                   |  57%, ETA 00:14
  |===================================================================                                                  |  57%, ETA 00:14
  |===================================================================                                                  |  57%, ETA 00:14
  |===================================================================                                                  |  57%, ETA 00:14
  |===================================================================                                                  |  57%, ETA 00:14
  |===================================================================                                                  |  57%, ETA 00:14
  |===================================================================                                                  |  57%, ETA 00:14
  |===================================================================                                                  |  57%, ETA 00:14
  |===================================================================                                                  |  57%, ETA 00:14
  |===================================================================                                                  |  57%, ETA 00:14
  |===================================================================                                                  |  57%, ETA 00:14
  |===================================================================                                                  |  57%, ETA 00:14
  |===================================================================                                                  |  57%, ETA 00:14
  |===================================================================                                                  |  57%, ETA 00:14
  |===================================================================                                                  |  57%, ETA 00:14
  |===================================================================                                                  |  58%, ETA 00:14
  |===================================================================                                                  |  58%, ETA 00:14
  |====================================================================                                                 |  58%, ETA 00:14
  |====================================================================                                                 |  58%, ETA 00:14
  |====================================================================                                                 |  58%, ETA 00:14
  |====================================================================                                                 |  58%, ETA 00:14
  |====================================================================                                                 |  58%, ETA 00:14
  |====================================================================                                                 |  58%, ETA 00:14
  |====================================================================                                                 |  58%, ETA 00:14
  |====================================================================                                                 |  58%, ETA 00:14
  |====================================================================                                                 |  58%, ETA 00:14
  |====================================================================                                                 |  58%, ETA 00:14
  |====================================================================                                                 |  58%, ETA 00:14
  |====================================================================                                                 |  58%, ETA 00:14
  |====================================================================                                                 |  58%, ETA 00:14
  |====================================================================                                                 |  58%, ETA 00:14
  |====================================================================                                                 |  58%, ETA 00:14
  |====================================================================                                                 |  58%, ETA 00:14
  |====================================================================                                                 |  58%, ETA 00:14
  |=====================================================================                                                |  59%, ETA 00:14
  |=====================================================================                                                |  59%, ETA 00:14
  |=====================================================================                                                |  59%, ETA 00:14
  |=====================================================================                                                |  59%, ETA 00:14
  |=====================================================================                                                |  59%, ETA 00:14
  |=====================================================================                                                |  59%, ETA 00:14
  |=====================================================================                                                |  59%, ETA 00:14
  |=====================================================================                                                |  59%, ETA 00:14
  |=====================================================================                                                |  59%, ETA 00:14
  |=====================================================================                                                |  59%, ETA 00:14
  |=====================================================================                                                |  59%, ETA 00:14
  |=====================================================================                                                |  59%, ETA 00:14
  |=====================================================================                                                |  59%, ETA 00:14
  |=====================================================================                                                |  59%, ETA 00:14
  |=====================================================================                                                |  59%, ETA 00:13
  |=====================================================================                                                |  59%, ETA 00:13
  |=====================================================================                                                |  59%, ETA 00:13
  |=====================================================================                                                |  59%, ETA 00:13
  |======================================================================                                               |  59%, ETA 00:13
  |======================================================================                                               |  60%, ETA 00:13
  |======================================================================                                               |  60%, ETA 00:13
  |======================================================================                                               |  60%, ETA 00:13
  |======================================================================                                               |  60%, ETA 00:13
  |======================================================================                                               |  60%, ETA 00:13
  |======================================================================                                               |  60%, ETA 00:13
  |======================================================================                                               |  60%, ETA 00:13
  |======================================================================                                               |  60%, ETA 00:13
  |======================================================================                                               |  60%, ETA 00:13
  |======================================================================                                               |  60%, ETA 00:13
  |======================================================================                                               |  60%, ETA 00:13
  |======================================================================                                               |  60%, ETA 00:13
  |======================================================================                                               |  60%, ETA 00:13
  |======================================================================                                               |  60%, ETA 00:13
  |======================================================================                                               |  60%, ETA 00:13
  |=======================================================================                                              |  60%, ETA 00:13
  |=======================================================================                                              |  60%, ETA 00:13
  |=======================================================================                                              |  60%, ETA 00:13
  |=======================================================================                                              |  60%, ETA 00:13
  |=======================================================================                                              |  60%, ETA 00:13
  |=======================================================================                                              |  61%, ETA 00:13
  |=======================================================================                                              |  61%, ETA 00:13
  |=======================================================================                                              |  61%, ETA 00:13
  |=======================================================================                                              |  61%, ETA 00:13
  |=======================================================================                                              |  61%, ETA 00:13
  |=======================================================================                                              |  61%, ETA 00:13
  |=======================================================================                                              |  61%, ETA 00:13
  |=======================================================================                                              |  61%, ETA 00:13
  |=======================================================================                                              |  61%, ETA 00:13
  |=======================================================================                                              |  61%, ETA 00:13
  |=======================================================================                                              |  61%, ETA 00:13
  |=======================================================================                                              |  61%, ETA 00:13
  |========================================================================                                             |  61%, ETA 00:13
  |========================================================================                                             |  61%, ETA 00:13
  |========================================================================                                             |  61%, ETA 00:13
  |========================================================================                                             |  61%, ETA 00:13
  |========================================================================                                             |  61%, ETA 00:13
  |========================================================================                                             |  61%, ETA 00:13
  |========================================================================                                             |  61%, ETA 00:13
  |========================================================================                                             |  62%, ETA 00:13
  |========================================================================                                             |  62%, ETA 00:13
  |========================================================================                                             |  62%, ETA 00:13
  |========================================================================                                             |  62%, ETA 00:13
  |========================================================================                                             |  62%, ETA 00:13
  |========================================================================                                             |  62%, ETA 00:13
  |========================================================================                                             |  62%, ETA 00:13
  |========================================================================                                             |  62%, ETA 00:13
  |========================================================================                                             |  62%, ETA 00:13
  |========================================================================                                             |  62%, ETA 00:13
  |=========================================================================                                            |  62%, ETA 00:13
  |=========================================================================                                            |  62%, ETA 00:13
  |=========================================================================                                            |  62%, ETA 00:12
  |=========================================================================                                            |  62%, ETA 00:12
  |=========================================================================                                            |  62%, ETA 00:12
  |=========================================================================                                            |  62%, ETA 00:12
  |=========================================================================                                            |  62%, ETA 00:12
  |=========================================================================                                            |  62%, ETA 00:12
  |=========================================================================                                            |  62%, ETA 00:12
  |=========================================================================                                            |  62%, ETA 00:12
  |=========================================================================                                            |  62%, ETA 00:12
  |=========================================================================                                            |  63%, ETA 00:12
  |=========================================================================                                            |  63%, ETA 00:12
  |=========================================================================                                            |  63%, ETA 00:12
  |=========================================================================                                            |  63%, ETA 00:12
  |=========================================================================                                            |  63%, ETA 00:12
  |==========================================================================                                           |  63%, ETA 00:12
  |==========================================================================                                           |  63%, ETA 00:12
  |==========================================================================                                           |  63%, ETA 00:12
  |==========================================================================                                           |  63%, ETA 00:12
  |==========================================================================                                           |  63%, ETA 00:12
  |==========================================================================                                           |  63%, ETA 00:12
  |==========================================================================                                           |  63%, ETA 00:12
  |==========================================================================                                           |  63%, ETA 00:12
  |==========================================================================                                           |  63%, ETA 00:12
  |==========================================================================                                           |  63%, ETA 00:12
  |==========================================================================                                           |  63%, ETA 00:12
  |==========================================================================                                           |  63%, ETA 00:12
  |==========================================================================                                           |  64%, ETA 00:12
  |==========================================================================                                           |  64%, ETA 00:12
  |==========================================================================                                           |  64%, ETA 00:12
  |==========================================================================                                           |  64%, ETA 00:12
  |===========================================================================                                          |  64%, ETA 00:12
  |===========================================================================                                          |  64%, ETA 00:12
  |===========================================================================                                          |  64%, ETA 00:12
  |===========================================================================                                          |  64%, ETA 00:12
  |===========================================================================                                          |  64%, ETA 00:12
  |===========================================================================                                          |  64%, ETA 00:12
  |===========================================================================                                          |  64%, ETA 00:12
  |===========================================================================                                          |  64%, ETA 00:12
  |===========================================================================                                          |  64%, ETA 00:12
  |===========================================================================                                          |  64%, ETA 00:12
  |===========================================================================                                          |  64%, ETA 00:12
  |===========================================================================                                          |  64%, ETA 00:12
  |===========================================================================                                          |  64%, ETA 00:12
  |===========================================================================                                          |  64%, ETA 00:12
  |===========================================================================                                          |  64%, ETA 00:12
  |===========================================================================                                          |  64%, ETA 00:12
  |============================================================================                                         |  65%, ETA 00:12
  |============================================================================                                         |  65%, ETA 00:12
  |============================================================================                                         |  65%, ETA 00:12
  |============================================================================                                         |  65%, ETA 00:12
  |============================================================================                                         |  65%, ETA 00:12
  |============================================================================                                         |  65%, ETA 00:12
  |============================================================================                                         |  65%, ETA 00:12
  |============================================================================                                         |  65%, ETA 00:11
  |============================================================================                                         |  65%, ETA 00:11
  |============================================================================                                         |  65%, ETA 00:11
  |============================================================================                                         |  65%, ETA 00:11
  |============================================================================                                         |  65%, ETA 00:11
  |============================================================================                                         |  65%, ETA 00:11
  |============================================================================                                         |  65%, ETA 00:11
  |============================================================================                                         |  65%, ETA 00:11
  |============================================================================                                         |  65%, ETA 00:11
  |============================================================================                                         |  65%, ETA 00:11
  |=============================================================================                                        |  65%, ETA 00:11
  |=============================================================================                                        |  65%, ETA 00:11
  |=============================================================================                                        |  66%, ETA 00:11
  |=============================================================================                                        |  66%, ETA 00:11
  |=============================================================================                                        |  66%, ETA 00:11
  |=============================================================================                                        |  66%, ETA 00:11
  |=============================================================================                                        |  66%, ETA 00:11
  |=============================================================================                                        |  66%, ETA 00:11
  |=============================================================================                                        |  66%, ETA 00:11
  |=============================================================================                                        |  66%, ETA 00:11
  |=============================================================================                                        |  66%, ETA 00:11
  |=============================================================================                                        |  66%, ETA 00:11
  |=============================================================================                                        |  66%, ETA 00:11
  |=============================================================================                                        |  66%, ETA 00:11
  |=============================================================================                                        |  66%, ETA 00:11
  |=============================================================================                                        |  66%, ETA 00:11
  |=============================================================================                                        |  66%, ETA 00:11
  |==============================================================================                                       |  66%, ETA 00:11
  |==============================================================================                                       |  66%, ETA 00:11
  |==============================================================================                                       |  66%, ETA 00:11
  |==============================================================================                                       |  66%, ETA 00:11
  |==============================================================================                                       |  66%, ETA 00:11
  |==============================================================================                                       |  67%, ETA 00:11
  |==============================================================================                                       |  67%, ETA 00:11
  |==============================================================================                                       |  67%, ETA 00:11
  |==============================================================================                                       |  67%, ETA 00:11
  |==============================================================================                                       |  67%, ETA 00:11
  |==============================================================================                                       |  67%, ETA 00:11
  |==============================================================================                                       |  67%, ETA 00:11
  |==============================================================================                                       |  67%, ETA 00:11
  |==============================================================================                                       |  67%, ETA 00:11
  |==============================================================================                                       |  67%, ETA 00:11
  |==============================================================================                                       |  67%, ETA 00:11
  |===============================================================================                                      |  67%, ETA 00:11
  |===============================================================================                                      |  67%, ETA 00:11
  |===============================================================================                                      |  67%, ETA 00:11
  |===============================================================================                                      |  67%, ETA 00:11
  |===============================================================================                                      |  67%, ETA 00:11
  |===============================================================================                                      |  67%, ETA 00:11
  |===============================================================================                                      |  67%, ETA 00:11
  |===============================================================================                                      |  67%, ETA 00:11
  |===============================================================================                                      |  68%, ETA 00:11
  |===============================================================================                                      |  68%, ETA 00:11
  |===============================================================================                                      |  68%, ETA 00:11
  |===============================================================================                                      |  68%, ETA 00:11
  |===============================================================================                                      |  68%, ETA 00:11
  |===============================================================================                                      |  68%, ETA 00:11
  |===============================================================================                                      |  68%, ETA 00:11
  |===============================================================================                                      |  68%, ETA 00:10
  |===============================================================================                                      |  68%, ETA 00:10
  |================================================================================                                     |  68%, ETA 00:10
  |================================================================================                                     |  68%, ETA 00:10
  |================================================================================                                     |  68%, ETA 00:10
  |================================================================================                                     |  68%, ETA 00:10
  |================================================================================                                     |  68%, ETA 00:10
  |================================================================================                                     |  68%, ETA 00:10
  |================================================================================                                     |  68%, ETA 00:10
  |================================================================================                                     |  68%, ETA 00:10
  |================================================================================                                     |  68%, ETA 00:10
  |================================================================================                                     |  68%, ETA 00:10
  |================================================================================                                     |  68%, ETA 00:10
  |================================================================================                                     |  68%, ETA 00:10
  |================================================================================                                     |  69%, ETA 00:10
  |================================================================================                                     |  69%, ETA 00:10
  |================================================================================                                     |  69%, ETA 00:10
  |================================================================================                                     |  69%, ETA 00:10
  |================================================================================                                     |  69%, ETA 00:10
  |================================================================================                                     |  69%, ETA 00:10
  |=================================================================================                                    |  69%, ETA 00:10
  |=================================================================================                                    |  69%, ETA 00:10
  |=================================================================================                                    |  69%, ETA 00:10
  |=================================================================================                                    |  69%, ETA 00:10
  |=================================================================================                                    |  69%, ETA 00:10
  |=================================================================================                                    |  69%, ETA 00:10
  |=================================================================================                                    |  69%, ETA 00:10
  |=================================================================================                                    |  69%, ETA 00:10
  |=================================================================================                                    |  69%, ETA 00:10
  |=================================================================================                                    |  69%, ETA 00:10
  |=================================================================================                                    |  69%, ETA 00:10
  |=================================================================================                                    |  69%, ETA 00:10
  |=================================================================================                                    |  70%, ETA 00:10
  |=================================================================================                                    |  70%, ETA 00:10
  |=================================================================================                                    |  70%, ETA 00:10
  |=================================================================================                                    |  70%, ETA 00:10
  |==================================================================================                                   |  70%, ETA 00:10
  |==================================================================================                                   |  70%, ETA 00:10
  |==================================================================================                                   |  70%, ETA 00:10
  |==================================================================================                                   |  70%, ETA 00:10
  |==================================================================================                                   |  70%, ETA 00:10
  |==================================================================================                                   |  70%, ETA 00:10
  |==================================================================================                                   |  70%, ETA 00:10
  |==================================================================================                                   |  70%, ETA 00:10
  |==================================================================================                                   |  70%, ETA 00:10
  |==================================================================================                                   |  70%, ETA 00:10
  |==================================================================================                                   |  70%, ETA 00:10
  |==================================================================================                                   |  70%, ETA 00:10
  |==================================================================================                                   |  70%, ETA 00:10
  |==================================================================================                                   |  70%, ETA 00:10
  |==================================================================================                                   |  70%, ETA 00:10
  |==================================================================================                                   |  70%, ETA 00:10
  |==================================================================================                                   |  70%, ETA 00:10
  |===================================================================================                                  |  71%, ETA 00:10
  |===================================================================================                                  |  71%, ETA 00:10
  |===================================================================================                                  |  71%, ETA 00:10
  |===================================================================================                                  |  71%, ETA 00:09
  |===================================================================================                                  |  71%, ETA 00:09
  |===================================================================================                                  |  71%, ETA 00:09
  |===================================================================================                                  |  71%, ETA 00:09
  |===================================================================================                                  |  71%, ETA 00:09
  |===================================================================================                                  |  71%, ETA 00:09
  |===================================================================================                                  |  71%, ETA 00:09
  |===================================================================================                                  |  71%, ETA 00:09
  |===================================================================================                                  |  71%, ETA 00:09
  |===================================================================================                                  |  71%, ETA 00:09
  |===================================================================================                                  |  71%, ETA 00:09
  |===================================================================================                                  |  71%, ETA 00:09
  |====================================================================================                                 |  71%, ETA 00:09
  |====================================================================================                                 |  71%, ETA 00:09
  |====================================================================================                                 |  72%, ETA 00:09
  |====================================================================================                                 |  72%, ETA 00:09
  |====================================================================================                                 |  72%, ETA 00:09
  |====================================================================================                                 |  72%, ETA 00:09
  |====================================================================================                                 |  72%, ETA 00:09
  |====================================================================================                                 |  72%, ETA 00:09
  |====================================================================================                                 |  72%, ETA 00:09
  |====================================================================================                                 |  72%, ETA 00:09
  |====================================================================================                                 |  72%, ETA 00:09
  |====================================================================================                                 |  72%, ETA 00:09
  |====================================================================================                                 |  72%, ETA 00:09
  |====================================================================================                                 |  72%, ETA 00:09
  |====================================================================================                                 |  72%, ETA 00:09
  |====================================================================================                                 |  72%, ETA 00:09
  |====================================================================================                                 |  72%, ETA 00:09
  |=====================================================================================                                |  72%, ETA 00:09
  |=====================================================================================                                |  72%, ETA 00:09
  |=====================================================================================                                |  72%, ETA 00:09
  |=====================================================================================                                |  72%, ETA 00:09
  |=====================================================================================                                |  72%, ETA 00:09
  |=====================================================================================                                |  72%, ETA 00:09
  |=====================================================================================                                |  73%, ETA 00:09
  |=====================================================================================                                |  73%, ETA 00:09
  |=====================================================================================                                |  73%, ETA 00:09
  |=====================================================================================                                |  73%, ETA 00:09
  |=====================================================================================                                |  73%, ETA 00:09
  |=====================================================================================                                |  73%, ETA 00:09
  |=====================================================================================                                |  73%, ETA 00:09
  |=====================================================================================                                |  73%, ETA 00:09
  |=====================================================================================                                |  73%, ETA 00:09
  |=====================================================================================                                |  73%, ETA 00:09
  |=====================================================================================                                |  73%, ETA 00:09
  |======================================================================================                               |  73%, ETA 00:09
  |======================================================================================                               |  73%, ETA 00:09
  |======================================================================================                               |  73%, ETA 00:09
  |======================================================================================                               |  73%, ETA 00:09
  |======================================================================================                               |  73%, ETA 00:09
  |======================================================================================                               |  73%, ETA 00:09
  |======================================================================================                               |  73%, ETA 00:09
  |======================================================================================                               |  73%, ETA 00:09
  |======================================================================================                               |  74%, ETA 00:09
  |======================================================================================                               |  74%, ETA 00:09
  |======================================================================================                               |  74%, ETA 00:09
  |======================================================================================                               |  74%, ETA 00:09
  |======================================================================================                               |  74%, ETA 00:08
  |======================================================================================                               |  74%, ETA 00:08
  |======================================================================================                               |  74%, ETA 00:08
  |======================================================================================                               |  74%, ETA 00:08
  |======================================================================================                               |  74%, ETA 00:08
  |=======================================================================================                              |  74%, ETA 00:08
  |=======================================================================================                              |  74%, ETA 00:08
  |=======================================================================================                              |  74%, ETA 00:08
  |=======================================================================================                              |  74%, ETA 00:08
  |=======================================================================================                              |  74%, ETA 00:08
  |=======================================================================================                              |  74%, ETA 00:08
  |=======================================================================================                              |  74%, ETA 00:08
  |=======================================================================================                              |  74%, ETA 00:08
  |=======================================================================================                              |  74%, ETA 00:08
  |=======================================================================================                              |  74%, ETA 00:08
  |=======================================================================================                              |  74%, ETA 00:08
  |=======================================================================================                              |  74%, ETA 00:08
  |=======================================================================================                              |  75%, ETA 00:08
  |=======================================================================================                              |  75%, ETA 00:08
  |=======================================================================================                              |  75%, ETA 00:08
  |=======================================================================================                              |  75%, ETA 00:08
  |=======================================================================================                              |  75%, ETA 00:08
  |========================================================================================                             |  75%, ETA 00:08
  |========================================================================================                             |  75%, ETA 00:08
  |========================================================================================                             |  75%, ETA 00:08
  |========================================================================================                             |  75%, ETA 00:08
  |========================================================================================                             |  75%, ETA 00:08
  |========================================================================================                             |  75%, ETA 00:08
  |========================================================================================                             |  75%, ETA 00:08
  |========================================================================================                             |  75%, ETA 00:08
  |========================================================================================                             |  75%, ETA 00:08
  |========================================================================================                             |  75%, ETA 00:08
  |========================================================================================                             |  75%, ETA 00:08
  |========================================================================================                             |  75%, ETA 00:08
  |========================================================================================                             |  75%, ETA 00:08
  |========================================================================================                             |  75%, ETA 00:08
  |========================================================================================                             |  76%, ETA 00:08
  |========================================================================================                             |  76%, ETA 00:08
  |========================================================================================                             |  76%, ETA 00:08
  |=========================================================================================                            |  76%, ETA 00:08
  |=========================================================================================                            |  76%, ETA 00:08
  |=========================================================================================                            |  76%, ETA 00:08
  |=========================================================================================                            |  76%, ETA 00:08
  |=========================================================================================                            |  76%, ETA 00:08
  |=========================================================================================                            |  76%, ETA 00:08
  |=========================================================================================                            |  76%, ETA 00:08
  |=========================================================================================                            |  76%, ETA 00:08
  |=========================================================================================                            |  76%, ETA 00:08
  |=========================================================================================                            |  76%, ETA 00:08
  |=========================================================================================                            |  76%, ETA 00:08
  |=========================================================================================                            |  76%, ETA 00:08
  |=========================================================================================                            |  76%, ETA 00:08
  |=========================================================================================                            |  76%, ETA 00:08
  |=========================================================================================                            |  76%, ETA 00:08
  |=========================================================================================                            |  76%, ETA 00:08
  |=========================================================================================                            |  76%, ETA 00:08
  |==========================================================================================                           |  76%, ETA 00:08
  |==========================================================================================                           |  77%, ETA 00:08
  |==========================================================================================                           |  77%, ETA 00:08
  |==========================================================================================                           |  77%, ETA 00:08
  |==========================================================================================                           |  77%, ETA 00:07
  |==========================================================================================                           |  77%, ETA 00:07
  |==========================================================================================                           |  77%, ETA 00:07
  |==========================================================================================                           |  77%, ETA 00:07
  |==========================================================================================                           |  77%, ETA 00:07
  |==========================================================================================                           |  77%, ETA 00:07
  |==========================================================================================                           |  77%, ETA 00:07
  |==========================================================================================                           |  77%, ETA 00:07
  |==========================================================================================                           |  77%, ETA 00:07
  |==========================================================================================                           |  77%, ETA 00:07
  |==========================================================================================                           |  77%, ETA 00:07
  |==========================================================================================                           |  77%, ETA 00:07
  |==========================================================================================                           |  77%, ETA 00:07
  |==========================================================================================                           |  77%, ETA 00:07
  |===========================================================================================                          |  77%, ETA 00:07
  |===========================================================================================                          |  77%, ETA 00:07
  |===========================================================================================                          |  78%, ETA 00:07
  |===========================================================================================                          |  78%, ETA 00:07
  |===========================================================================================                          |  78%, ETA 00:07
  |===========================================================================================                          |  78%, ETA 00:07
  |===========================================================================================                          |  78%, ETA 00:07
  |===========================================================================================                          |  78%, ETA 00:07
  |===========================================================================================                          |  78%, ETA 00:07
  |===========================================================================================                          |  78%, ETA 00:07
  |===========================================================================================                          |  78%, ETA 00:07
  |===========================================================================================                          |  78%, ETA 00:07
  |===========================================================================================                          |  78%, ETA 00:07
  |===========================================================================================                          |  78%, ETA 00:07
  |===========================================================================================                          |  78%, ETA 00:07
  |===========================================================================================                          |  78%, ETA 00:07
  |===========================================================================================                          |  78%, ETA 00:07
  |============================================================================================                         |  78%, ETA 00:07
  |============================================================================================                         |  78%, ETA 00:07
  |============================================================================================                         |  78%, ETA 00:07
  |============================================================================================                         |  78%, ETA 00:07
  |============================================================================================                         |  78%, ETA 00:07
  |============================================================================================                         |  78%, ETA 00:07
  |============================================================================================                         |  79%, ETA 00:07
  |============================================================================================                         |  79%, ETA 00:07
  |============================================================================================                         |  79%, ETA 00:07
  |============================================================================================                         |  79%, ETA 00:07
  |============================================================================================                         |  79%, ETA 00:07
  |============================================================================================                         |  79%, ETA 00:07
  |============================================================================================                         |  79%, ETA 00:07
  |============================================================================================                         |  79%, ETA 00:07
  |============================================================================================                         |  79%, ETA 00:07
  |============================================================================================                         |  79%, ETA 00:07
  |============================================================================================                         |  79%, ETA 00:07
  |=============================================================================================                        |  79%, ETA 00:07
  |=============================================================================================                        |  79%, ETA 00:07
  |=============================================================================================                        |  79%, ETA 00:07
  |=============================================================================================                        |  79%, ETA 00:07
  |=============================================================================================                        |  79%, ETA 00:07
  |=============================================================================================                        |  79%, ETA 00:07
  |=============================================================================================                        |  79%, ETA 00:07
  |=============================================================================================                        |  79%, ETA 00:07
  |=============================================================================================                        |  80%, ETA 00:07
  |=============================================================================================                        |  80%, ETA 00:07
  |=============================================================================================                        |  80%, ETA 00:07
  |=============================================================================================                        |  80%, ETA 00:07
  |=============================================================================================                        |  80%, ETA 00:07
  |=============================================================================================                        |  80%, ETA 00:06
  |=============================================================================================                        |  80%, ETA 00:06
  |=============================================================================================                        |  80%, ETA 00:06
  |=============================================================================================                        |  80%, ETA 00:06
  |==============================================================================================                       |  80%, ETA 00:06
  |==============================================================================================                       |  80%, ETA 00:06
  |==============================================================================================                       |  80%, ETA 00:06
  |==============================================================================================                       |  80%, ETA 00:06
  |==============================================================================================                       |  80%, ETA 00:06
  |==============================================================================================                       |  80%, ETA 00:06
  |==============================================================================================                       |  80%, ETA 00:06
  |==============================================================================================                       |  80%, ETA 00:06
  |==============================================================================================                       |  80%, ETA 00:06
  |==============================================================================================                       |  80%, ETA 00:06
  |==============================================================================================                       |  80%, ETA 00:06
  |==============================================================================================                       |  80%, ETA 00:06
  |==============================================================================================                       |  81%, ETA 00:06
  |==============================================================================================                       |  81%, ETA 00:06
  |==============================================================================================                       |  81%, ETA 00:06
  |==============================================================================================                       |  81%, ETA 00:06
  |==============================================================================================                       |  81%, ETA 00:06
  |===============================================================================================                      |  81%, ETA 00:06
  |===============================================================================================                      |  81%, ETA 00:06
  |===============================================================================================                      |  81%, ETA 00:06
  |===============================================================================================                      |  81%, ETA 00:06
  |===============================================================================================                      |  81%, ETA 00:06
  |===============================================================================================                      |  81%, ETA 00:06
  |===============================================================================================                      |  81%, ETA 00:06
  |===============================================================================================                      |  81%, ETA 00:06
  |===============================================================================================                      |  81%, ETA 00:06
  |===============================================================================================                      |  81%, ETA 00:06
  |===============================================================================================                      |  81%, ETA 00:06
  |===============================================================================================                      |  81%, ETA 00:06
  |===============================================================================================                      |  81%, ETA 00:06
  |===============================================================================================                      |  81%, ETA 00:06
  |===============================================================================================                      |  82%, ETA 00:06
  |===============================================================================================                      |  82%, ETA 00:06
  |===============================================================================================                      |  82%, ETA 00:06
  |================================================================================================                     |  82%, ETA 00:06
  |================================================================================================                     |  82%, ETA 00:06
  |================================================================================================                     |  82%, ETA 00:06
  |================================================================================================                     |  82%, ETA 00:06
  |================================================================================================                     |  82%, ETA 00:06
  |================================================================================================                     |  82%, ETA 00:06
  |================================================================================================                     |  82%, ETA 00:06
  |================================================================================================                     |  82%, ETA 00:06
  |================================================================================================                     |  82%, ETA 00:06
  |================================================================================================                     |  82%, ETA 00:06
  |================================================================================================                     |  82%, ETA 00:06
  |================================================================================================                     |  82%, ETA 00:06
  |================================================================================================                     |  82%, ETA 00:06
  |================================================================================================                     |  82%, ETA 00:06
  |================================================================================================                     |  82%, ETA 00:06
  |================================================================================================                     |  82%, ETA 00:06
  |================================================================================================                     |  82%, ETA 00:06
  |=================================================================================================                    |  82%, ETA 00:06
  |=================================================================================================                    |  83%, ETA 00:06
  |=================================================================================================                    |  83%, ETA 00:06
  |=================================================================================================                    |  83%, ETA 00:06
  |=================================================================================================                    |  83%, ETA 00:06
  |=================================================================================================                    |  83%, ETA 00:06
  |=================================================================================================                    |  83%, ETA 00:06
  |=================================================================================================                    |  83%, ETA 00:05
  |=================================================================================================                    |  83%, ETA 00:05
  |=================================================================================================                    |  83%, ETA 00:05
  |=================================================================================================                    |  83%, ETA 00:05
  |=================================================================================================                    |  83%, ETA 00:05
  |=================================================================================================                    |  83%, ETA 00:05
  |=================================================================================================                    |  83%, ETA 00:05
  |=================================================================================================                    |  83%, ETA 00:05
  |=================================================================================================                    |  83%, ETA 00:05
  |=================================================================================================                    |  83%, ETA 00:05
  |==================================================================================================                   |  83%, ETA 00:05
  |==================================================================================================                   |  83%, ETA 00:05
  |==================================================================================================                   |  83%, ETA 00:05
  |==================================================================================================                   |  84%, ETA 00:05
  |==================================================================================================                   |  84%, ETA 00:05
  |==================================================================================================                   |  84%, ETA 00:05
  |==================================================================================================                   |  84%, ETA 00:05
  |==================================================================================================                   |  84%, ETA 00:05
  |==================================================================================================                   |  84%, ETA 00:05
  |==================================================================================================                   |  84%, ETA 00:05
  |==================================================================================================                   |  84%, ETA 00:05
  |==================================================================================================                   |  84%, ETA 00:05
  |==================================================================================================                   |  84%, ETA 00:05
  |==================================================================================================                   |  84%, ETA 00:05
  |==================================================================================================                   |  84%, ETA 00:05
  |==================================================================================================                   |  84%, ETA 00:05
  |==================================================================================================                   |  84%, ETA 00:05
  |===================================================================================================                  |  84%, ETA 00:05
  |===================================================================================================                  |  84%, ETA 00:05
  |===================================================================================================                  |  84%, ETA 00:05
  |===================================================================================================                  |  84%, ETA 00:05
  |===================================================================================================                  |  84%, ETA 00:05
  |===================================================================================================                  |  84%, ETA 00:05
  |===================================================================================================                  |  84%, ETA 00:05
  |===================================================================================================                  |  85%, ETA 00:05
  |===================================================================================================                  |  85%, ETA 00:05
  |===================================================================================================                  |  85%, ETA 00:05
  |===================================================================================================                  |  85%, ETA 00:05
  |===================================================================================================                  |  85%, ETA 00:05
  |===================================================================================================                  |  85%, ETA 00:05
  |===================================================================================================                  |  85%, ETA 00:05
  |===================================================================================================                  |  85%, ETA 00:05
  |===================================================================================================                  |  85%, ETA 00:05
  |===================================================================================================                  |  85%, ETA 00:05
  |====================================================================================================                 |  85%, ETA 00:05
  |====================================================================================================                 |  85%, ETA 00:05
  |====================================================================================================                 |  85%, ETA 00:05
  |====================================================================================================                 |  85%, ETA 00:05
  |====================================================================================================                 |  85%, ETA 00:05
  |====================================================================================================                 |  85%, ETA 00:05
  |====================================================================================================                 |  85%, ETA 00:05
  |====================================================================================================                 |  85%, ETA 00:05
  |====================================================================================================                 |  85%, ETA 00:05
  |====================================================================================================                 |  86%, ETA 00:05
  |====================================================================================================                 |  86%, ETA 00:05
  |====================================================================================================                 |  86%, ETA 00:05
  |====================================================================================================                 |  86%, ETA 00:05
  |====================================================================================================                 |  86%, ETA 00:05
  |====================================================================================================                 |  86%, ETA 00:05
  |====================================================================================================                 |  86%, ETA 00:05
  |====================================================================================================                 |  86%, ETA 00:05
  |=====================================================================================================                |  86%, ETA 00:04
  |=====================================================================================================                |  86%, ETA 00:04
  |=====================================================================================================                |  86%, ETA 00:04
  |=====================================================================================================                |  86%, ETA 00:04
  |=====================================================================================================                |  86%, ETA 00:04
  |=====================================================================================================                |  86%, ETA 00:04
  |=====================================================================================================                |  86%, ETA 00:04
  |=====================================================================================================                |  86%, ETA 00:04
  |=====================================================================================================                |  86%, ETA 00:04
  |=====================================================================================================                |  86%, ETA 00:04
  |=====================================================================================================                |  86%, ETA 00:04
  |=====================================================================================================                |  86%, ETA 00:04
  |=====================================================================================================                |  86%, ETA 00:04
  |=====================================================================================================                |  87%, ETA 00:04
  |=====================================================================================================                |  87%, ETA 00:04
  |=====================================================================================================                |  87%, ETA 00:04
  |======================================================================================================               |  87%, ETA 00:04
  |======================================================================================================               |  87%, ETA 00:04
  |======================================================================================================               |  87%, ETA 00:04
  |======================================================================================================               |  87%, ETA 00:04
  |======================================================================================================               |  87%, ETA 00:04
  |======================================================================================================               |  87%, ETA 00:04
  |======================================================================================================               |  87%, ETA 00:04
  |======================================================================================================               |  87%, ETA 00:04
  |======================================================================================================               |  87%, ETA 00:04
  |======================================================================================================               |  87%, ETA 00:04
  |======================================================================================================               |  87%, ETA 00:04
  |======================================================================================================               |  87%, ETA 00:04
  |======================================================================================================               |  87%, ETA 00:04
  |======================================================================================================               |  87%, ETA 00:04
  |======================================================================================================               |  88%, ETA 00:04
  |======================================================================================================               |  88%, ETA 00:04
  |======================================================================================================               |  88%, ETA 00:04
  |=======================================================================================================              |  88%, ETA 00:04
  |=======================================================================================================              |  88%, ETA 00:04
  |=======================================================================================================              |  88%, ETA 00:04
  |=======================================================================================================              |  88%, ETA 00:04
  |=======================================================================================================              |  88%, ETA 00:04
  |=======================================================================================================              |  88%, ETA 00:04
  |=======================================================================================================              |  88%, ETA 00:04
  |=======================================================================================================              |  88%, ETA 00:04
  |=======================================================================================================              |  88%, ETA 00:04
  |=======================================================================================================              |  88%, ETA 00:04
  |=======================================================================================================              |  88%, ETA 00:04
  |=======================================================================================================              |  88%, ETA 00:04
  |=======================================================================================================              |  88%, ETA 00:04
  |=======================================================================================================              |  88%, ETA 00:04
  |=======================================================================================================              |  88%, ETA 00:04
  |=======================================================================================================              |  88%, ETA 00:04
  |=======================================================================================================              |  88%, ETA 00:04
  |========================================================================================================             |  88%, ETA 00:04
  |========================================================================================================             |  89%, ETA 00:04
  |========================================================================================================             |  89%, ETA 00:04
  |========================================================================================================             |  89%, ETA 00:04
  |========================================================================================================             |  89%, ETA 00:04
  |========================================================================================================             |  89%, ETA 00:04
  |========================================================================================================             |  89%, ETA 00:04
  |========================================================================================================             |  89%, ETA 00:04
  |========================================================================================================             |  89%, ETA 00:04
  |========================================================================================================             |  89%, ETA 00:04
  |========================================================================================================             |  89%, ETA 00:03
  |========================================================================================================             |  89%, ETA 00:03
  |========================================================================================================             |  89%, ETA 00:03
  |========================================================================================================             |  89%, ETA 00:03
  |========================================================================================================             |  89%, ETA 00:03
  |========================================================================================================             |  89%, ETA 00:03
  |========================================================================================================             |  89%, ETA 00:03
  |=========================================================================================================            |  89%, ETA 00:03
  |=========================================================================================================            |  89%, ETA 00:03
  |=========================================================================================================            |  89%, ETA 00:03
  |=========================================================================================================            |  90%, ETA 00:03
  |=========================================================================================================            |  90%, ETA 00:03
  |=========================================================================================================            |  90%, ETA 00:03
  |=========================================================================================================            |  90%, ETA 00:03
  |=========================================================================================================            |  90%, ETA 00:03
  |=========================================================================================================            |  90%, ETA 00:03
  |=========================================================================================================            |  90%, ETA 00:03
  |=========================================================================================================            |  90%, ETA 00:03
  |=========================================================================================================            |  90%, ETA 00:03
  |=========================================================================================================            |  90%, ETA 00:03
  |=========================================================================================================            |  90%, ETA 00:03
  |=========================================================================================================            |  90%, ETA 00:03
  |=========================================================================================================            |  90%, ETA 00:03
  |=========================================================================================================            |  90%, ETA 00:03
  |==========================================================================================================           |  90%, ETA 00:03
  |==========================================================================================================           |  90%, ETA 00:03
  |==========================================================================================================           |  90%, ETA 00:03
  |==========================================================================================================           |  90%, ETA 00:03
  |==========================================================================================================           |  90%, ETA 00:03
  |==========================================================================================================           |  90%, ETA 00:03
  |==========================================================================================================           |  90%, ETA 00:03
  |==========================================================================================================           |  91%, ETA 00:03
  |==========================================================================================================           |  91%, ETA 00:03
  |==========================================================================================================           |  91%, ETA 00:03
  |==========================================================================================================           |  91%, ETA 00:03
  |==========================================================================================================           |  91%, ETA 00:03
  |==========================================================================================================           |  91%, ETA 00:03
  |==========================================================================================================           |  91%, ETA 00:03
  |==========================================================================================================           |  91%, ETA 00:03
  |==========================================================================================================           |  91%, ETA 00:03
  |===========================================================================================================          |  91%, ETA 00:03
  |===========================================================================================================          |  91%, ETA 00:03
  |===========================================================================================================          |  91%, ETA 00:03
  |===========================================================================================================          |  91%, ETA 00:03
  |===========================================================================================================          |  91%, ETA 00:03
  |===========================================================================================================          |  92%, ETA 00:03
  |===========================================================================================================          |  92%, ETA 00:03
  |===========================================================================================================          |  92%, ETA 00:03
  |===========================================================================================================          |  92%, ETA 00:03
  |===========================================================================================================          |  92%, ETA 00:03
  |===========================================================================================================          |  92%, ETA 00:03
  |===========================================================================================================          |  92%, ETA 00:03
  |===========================================================================================================          |  92%, ETA 00:03
  |============================================================================================================         |  92%, ETA 00:03
  |============================================================================================================         |  92%, ETA 00:03
  |============================================================================================================         |  92%, ETA 00:03
  |============================================================================================================         |  92%, ETA 00:03
  |============================================================================================================         |  92%, ETA 00:03
  |============================================================================================================         |  92%, ETA 00:02
  |============================================================================================================         |  92%, ETA 00:02
  |============================================================================================================         |  92%, ETA 00:02
  |============================================================================================================         |  92%, ETA 00:02
  |============================================================================================================         |  92%, ETA 00:02
  |============================================================================================================         |  92%, ETA 00:02
  |============================================================================================================         |  92%, ETA 00:02
  |============================================================================================================         |  92%, ETA 00:02
  |============================================================================================================         |  93%, ETA 00:02
  |============================================================================================================         |  93%, ETA 00:02
  |============================================================================================================         |  93%, ETA 00:02
  |============================================================================================================         |  93%, ETA 00:02
  |=============================================================================================================        |  93%, ETA 00:02
  |=============================================================================================================        |  93%, ETA 00:02
  |=============================================================================================================        |  93%, ETA 00:02
  |=============================================================================================================        |  93%, ETA 00:02
  |=============================================================================================================        |  93%, ETA 00:02
  |=============================================================================================================        |  93%, ETA 00:02
  |=============================================================================================================        |  93%, ETA 00:02
  |=============================================================================================================        |  93%, ETA 00:02
  |=============================================================================================================        |  93%, ETA 00:02
  |=============================================================================================================        |  93%, ETA 00:02
  |=============================================================================================================        |  93%, ETA 00:02
  |=============================================================================================================        |  93%, ETA 00:02
  |=============================================================================================================        |  93%, ETA 00:02
  |=============================================================================================================        |  93%, ETA 00:02
  |=============================================================================================================        |  93%, ETA 00:02
  |=============================================================================================================        |  94%, ETA 00:02
  |=============================================================================================================        |  94%, ETA 00:02
  |==============================================================================================================       |  94%, ETA 00:02
  |==============================================================================================================       |  94%, ETA 00:02
  |==============================================================================================================       |  94%, ETA 00:02
  |==============================================================================================================       |  94%, ETA 00:02
  |==============================================================================================================       |  94%, ETA 00:02
  |==============================================================================================================       |  94%, ETA 00:02
  |==============================================================================================================       |  94%, ETA 00:02
  |==============================================================================================================       |  94%, ETA 00:02
  |==============================================================================================================       |  94%, ETA 00:02
  |==============================================================================================================       |  94%, ETA 00:02
  |==============================================================================================================       |  94%, ETA 00:02
  |==============================================================================================================       |  94%, ETA 00:02
  |==============================================================================================================       |  94%, ETA 00:02
  |==============================================================================================================       |  94%, ETA 00:02
  |==============================================================================================================       |  94%, ETA 00:02
  |==============================================================================================================       |  94%, ETA 00:02
  |===============================================================================================================      |  94%, ETA 00:02
  |===============================================================================================================      |  94%, ETA 00:02
  |===============================================================================================================      |  95%, ETA 00:02
  |===============================================================================================================      |  95%, ETA 00:02
  |===============================================================================================================      |  95%, ETA 00:02
  |===============================================================================================================      |  95%, ETA 00:02
  |===============================================================================================================      |  95%, ETA 00:02
  |===============================================================================================================      |  95%, ETA 00:02
  |===============================================================================================================      |  95%, ETA 00:02
  |===============================================================================================================      |  95%, ETA 00:02
  |===============================================================================================================      |  95%, ETA 00:02
  |===============================================================================================================      |  95%, ETA 00:02
  |===============================================================================================================      |  95%, ETA 00:02
  |===============================================================================================================      |  95%, ETA 00:02
  |===============================================================================================================      |  95%, ETA 00:02
  |===============================================================================================================      |  95%, ETA 00:02
  |===============================================================================================================      |  95%, ETA 00:02
  |================================================================================================================     |  95%, ETA 00:01
  |================================================================================================================     |  95%, ETA 00:01
  |================================================================================================================     |  95%, ETA 00:01
  |================================================================================================================     |  95%, ETA 00:01
  |================================================================================================================     |  96%, ETA 00:01
  |================================================================================================================     |  96%, ETA 00:01
  |================================================================================================================     |  96%, ETA 00:01
  |================================================================================================================     |  96%, ETA 00:01
  |================================================================================================================     |  96%, ETA 00:01
  |================================================================================================================     |  96%, ETA 00:01
  |================================================================================================================     |  96%, ETA 00:01
  |================================================================================================================     |  96%, ETA 00:01
  |================================================================================================================     |  96%, ETA 00:01
  |================================================================================================================     |  96%, ETA 00:01
  |================================================================================================================     |  96%, ETA 00:01
  |================================================================================================================     |  96%, ETA 00:01
  |================================================================================================================     |  96%, ETA 00:01
  |================================================================================================================     |  96%, ETA 00:01
  |=================================================================================================================    |  96%, ETA 00:01
  |=================================================================================================================    |  96%, ETA 00:01
  |=================================================================================================================    |  96%, ETA 00:01
  |=================================================================================================================    |  96%, ETA 00:01
  |=================================================================================================================    |  96%, ETA 00:01
  |=================================================================================================================    |  96%, ETA 00:01
  |=================================================================================================================    |  96%, ETA 00:01
  |=================================================================================================================    |  97%, ETA 00:01
  |=================================================================================================================    |  97%, ETA 00:01
  |=================================================================================================================    |  97%, ETA 00:01
  |=================================================================================================================    |  97%, ETA 00:01
  |=================================================================================================================    |  97%, ETA 00:01
  |=================================================================================================================    |  97%, ETA 00:01
  |=================================================================================================================    |  97%, ETA 00:01
  |=================================================================================================================    |  97%, ETA 00:01
  |=================================================================================================================    |  97%, ETA 00:01
  |=================================================================================================================    |  97%, ETA 00:01
  |==================================================================================================================   |  97%, ETA 00:01
  |==================================================================================================================   |  97%, ETA 00:01
  |==================================================================================================================   |  97%, ETA 00:01
  |==================================================================================================================   |  97%, ETA 00:01
  |==================================================================================================================   |  97%, ETA 00:01
  |==================================================================================================================   |  97%, ETA 00:01
  |==================================================================================================================   |  97%, ETA 00:01
  |==================================================================================================================   |  97%, ETA 00:01
  |==================================================================================================================   |  97%, ETA 00:01
  |==================================================================================================================   |  98%, ETA 00:01
  |==================================================================================================================   |  98%, ETA 00:01
  |==================================================================================================================   |  98%, ETA 00:01
  |==================================================================================================================   |  98%, ETA 00:01
  |==================================================================================================================   |  98%, ETA 00:01
  |==================================================================================================================   |  98%, ETA 00:01
  |==================================================================================================================   |  98%, ETA 00:01
  |==================================================================================================================   |  98%, ETA 00:01
  |===================================================================================================================  |  98%, ETA 00:01
  |===================================================================================================================  |  98%, ETA 00:01
  |===================================================================================================================  |  98%, ETA 00:01
  |===================================================================================================================  |  98%, ETA 00:01
  |===================================================================================================================  |  98%, ETA 00:01
  |===================================================================================================================  |  98%, ETA 00:01
  |===================================================================================================================  |  98%, ETA 00:01
  |===================================================================================================================  |  98%, ETA 00:01
  |===================================================================================================================  |  98%, ETA 00:01
  |===================================================================================================================  |  98%, ETA 00:01
  |===================================================================================================================  |  98%, ETA 00:01
  |===================================================================================================================  |  98%, ETA 00:00
  |===================================================================================================================  |  98%, ETA 00:00
  |===================================================================================================================  |  99%, ETA 00:00
  |===================================================================================================================  |  99%, ETA 00:00
  |===================================================================================================================  |  99%, ETA 00:00
  |===================================================================================================================  |  99%, ETA 00:00
  |==================================================================================================================== |  99%, ETA 00:00
  |==================================================================================================================== |  99%, ETA 00:00
  |==================================================================================================================== |  99%, ETA 00:00
  |==================================================================================================================== |  99%, ETA 00:00
  |==================================================================================================================== |  99%, ETA 00:00
  |==================================================================================================================== |  99%, ETA 00:00
  |==================================================================================================================== |  99%, ETA 00:00
  |==================================================================================================================== |  99%, ETA 00:00
  |==================================================================================================================== |  99%, ETA 00:00
  |==================================================================================================================== |  99%, ETA 00:00
  |==================================================================================================================== |  99%, ETA 00:00
  |==================================================================================================================== |  99%, ETA 00:00
  |==================================================================================================================== |  99%, ETA 00:00
  |==================================================================================================================== |  99%, ETA 00:00
  |==================================================================================================================== |  99%, ETA 00:00
  |==================================================================================================================== | 100%, ETA 00:00
  |==================================================================================================================== | 100%, ETA 00:00
  |=====================================================================================================================| 100%, ETA 00:00
  |=====================================================================================================================| 100%, ETA 00:00
  |=====================================================================================================================| 100%, ETA 00:00
  |=====================================================================================================================| 100%, ETA 00:00
  |=====================================================================================================================| 100%, ETA 00:00
  |=====================================================================================================================| 100%, ETA 00:00
  |=====================================================================================================================| 100%, ETA 00:00
  |=====================================================================================================================| 100%, ETA 00:00
  |=================================================================================================================| 100%, Elapsed 00:32
# Add gene name as column and filter significant hits
sig_traj_genes <- pr_test_res %>%
  tibble::rownames_to_column("gene") %>%
  filter(q_value < 0.05, status == "OK") %>%
  arrange(desc(morans_I))

cat(sprintf("%d trajectory-variable genes (q < 0.05)\n", nrow(sig_traj_genes)))
1851 trajectory-variable genes (q < 0.05)
# Define genes to exclude from dotplot — ribosomal, mitochondrial, housekeeping
# These are trajectory-variable due to technical reasons not biology
exclude_genes <- grep(
  "^RP[SL]|^MT-|^MALAT1|^NEAT1|^XIST|^ACTB|^GAPDH|^B2M|^EEF|^EIF",
  rownames(cd4_ref), value = TRUE
)
cat(sprintf("Genes to exclude (technical): %d\n", length(exclude_genes)))
Genes to exclude (technical): 199
kable(head(sig_traj_genes[, c("gene","morans_I","q_value")], 20),
      caption = "Top 20 trajectory-variable genes (Monocle3 graph_test)",
      digits  = 4) %>%
  kable_styling(bootstrap_options=c("striped","condensed"), full_width=FALSE)
Top 20 trajectory-variable genes (Monocle3 graph_test)
gene morans_I q_value
CCL5 0.6551 0
RPL32 0.5215 0
EEF1A1 0.5053 0
RPS14 0.5000 0
RPL10 0.4992 0
RPL30 0.4969 0
RPL41 0.4953 0
RPS3A 0.4940 0
RPL34 0.4790 0
RPS13 0.4789 0
RPL39 0.4763 0
RPL19 0.4637 0
RPS8 0.4579 0
RPS23 0.4571 0
RPS12 0.4545 0
RPS27A 0.4537 0
FOXP3 0.4198 0
RPLP1 0.4049 0
LGALS3 0.4027 0
RPS18 0.4008 0

# ── Ensure milestone_factor exists ────────────────────────────────────────
if (!"milestone_factor" %in% colnames(cd4_ref@meta.data)) {
  cd4_ref@meta.data$milestone_factor <- factor(
    cd4_ref@meta.data$milestone, levels = milestone_order
  )
}

# ── Filter technical genes and take top n ─────────────────────────────────
n_keep <- 100

clean_traj_genes <- sig_traj_genes %>%
  filter(!gene %in% exclude_genes) %>%        # use gene column not rownames
  slice_head(n = n_keep) %>%
  pull(gene)                                   # extract as character vector

cat(sprintf("Clean trajectory genes: %d (removed %d technical)\n",
            length(clean_traj_genes),
            nrow(sig_traj_genes) - length(clean_traj_genes)))
Clean trajectory genes: 100 (removed 1751 technical)
cat("First 10:", paste(head(clean_traj_genes, 10), collapse=", "), "\n")
First 10: CCL5, FOXP3, LGALS3, GZMK, ANXA2, S100A4, TPT1, ITGB1, AHNAK, TMSB4X 
# ── Confirm genes exist in object ─────────────────────────────────────────
clean_traj_genes <- intersect(clean_traj_genes, rownames(cd4_ref))
cat(sprintf("Genes found in cd4_ref: %d\n", length(clean_traj_genes)))
Genes found in cd4_ref: 100
# ── DotPlot ───────────────────────────────────────────────────────────────
DefaultAssay(cd4_ref) <- "RNA"
Idents(cd4_ref)       <- "milestone_factor"

p_dot <- DotPlot(
  cd4_ref,
  features  = clean_traj_genes,
  cols      = c("lightgrey", "#d62728"),
  dot.scale = 6,
  scale     = TRUE
) +
  RotatedAxis() +
  coord_flip() +
  ggtitle(sprintf("Top %d Monocle3 Trajectory Genes — Milestones M00–M07", n_keep)) +
  theme(axis.text.x = element_text(size = 8, face = "bold"),
        axis.text.y = element_text(size = 7),
        plot.title  = element_text(size = 13, face = "bold"))

print(p_dot)


7 Method Comparison

Key question: Do the two methods agree on cell ordering?

7.1 Pseudotime Correlation

compare_df <- data.frame(
  cell        = colnames(cd4_ref),
  state       = factor(cd4_ref@meta.data[[STATE_COL]], levels=STATE_ORDER),
  mst_pt      = cd4_ref@meta.data$mst_pseudotime_norm,
  monocle3_pt = cd4_ref@meta.data$monocle3_pseudotime_norm,
  milestone   = cd4_ref@meta.data$milestone
) %>% filter(!is.na(mst_pt), !is.na(monocle3_pt), state %in% STATE_ORDER)

overall_cor <- cor(compare_df$mst_pt, compare_df$monocle3_pt,
                   method = "spearman", use = "complete.obs")

per_state_cor <- compare_df %>%
  group_by(state) %>%
  summarise(
    n         = n(),
    spearman  = round(cor(mst_pt, monocle3_pt, method="spearman"), 3),
    mean_diff = round(mean(mst_pt - monocle3_pt), 1),
    sd_diff   = round(sd(mst_pt - monocle3_pt), 1),
    .groups   = "drop"
  )

p_scatter <- ggplot(
  compare_df[sample(nrow(compare_df), min(5000,nrow(compare_df))),],
  aes(x=mst_pt, y=monocle3_pt, colour=state)
) +
  geom_point(size=.6, alpha=.5) +
  geom_abline(slope=1, intercept=0, linetype="dashed", colour="grey40", linewidth=.8) +
  geom_smooth(method="lm", se=FALSE, colour="black", linewidth=.8) +
  scale_colour_manual(values=STATE_COLORS, name="State") +
  annotate("text", x=5, y=92,
           label=sprintf("Spearman ρ = %.3f", overall_cor),
           size=4.5, fontface="bold", hjust=0) +
  theme_classic() +
  labs(x="Custom MST pseudotime (0–100)", y="Monocle3 pseudotime (0–100)",
       title="Pseudotime correlation: Custom MST vs Monocle3",
       subtitle="Dashed line = perfect agreement | Solid line = linear fit") +
  theme(plot.title=element_text(size=13,face="bold"))

p_density <- ggplot(
  compare_df %>%
    pivot_longer(c(mst_pt, monocle3_pt), names_to="method", values_to="pseudotime") %>%
    mutate(method = recode(method, mst_pt="Custom MST", monocle3_pt="Monocle3")),
  aes(x=pseudotime, colour=method, fill=method)
) +
  geom_density(alpha=.35) +
  scale_colour_manual(values=METHOD_COLORS, name="Method") +
  scale_fill_manual(values=METHOD_COLORS, name="Method") +
  facet_wrap(~state, ncol=3, scales="free_y") +
  theme_classic() +
  labs(x="Pseudotime (0–100)", y="Density",
       title="Pseudotime distribution per state: method comparison") +
  theme(plot.title=element_text(size=13,face="bold"),
        strip.text=element_text(face="bold"))

print(p_scatter | p_density)

cat(sprintf("\nOverall Spearman ρ = %.3f\n\n", overall_cor))

Overall Spearman ρ = 0.733
kable(per_state_cor,
      caption = "Per-state pseudotime correlation (Spearman)",
      col.names = c("State","N cells","Spearman ρ","Mean diff","SD diff")) %>%
  kable_styling(bootstrap_options=c("striped","hover"), full_width=FALSE)
Per-state pseudotime correlation (Spearman)
State N cells Spearman ρ Mean diff SD diff
CD4 Naive 2037 0.179 -5.3 13.3
CD4 TCM 9067 0.663 0.0 24.5
CD4 TEM 145 0.395 -7.7 12.5
CD4 Temra/CTL 10 -0.190 0.1 1.8
Treg 207 0.912 39.5 22.9

7.2 Side-by-Side UMAP

umap_compare             <- umap_df
umap_compare$mst_pt      <- cd4_ref@meta.data$mst_pseudotime_norm
umap_compare$monocle3_pt <- cd4_ref@meta.data$monocle3_pseudotime_norm

pt_gradient <- scale_colour_gradientn(
  colours=c("#0D0887","#6A00A8","#B12A90","#E16462","#FCA636","#F0F921"),
  name="Pseudotime\n(0–100)", limits=c(0,100)
)

p_side_mst <- ggplot(umap_compare[sample(nrow(umap_compare)),],
                      aes(x=UMAP_1,y=UMAP_2,colour=mst_pt)) +
  geom_point(size=.35,alpha=.7) +
  geom_segment(data=mst_edge_df, aes(x=x1,y=y1,xend=x2,yend=y2),
               colour="black",linewidth=.7,alpha=.6,inherit.aes=FALSE) +
  pt_gradient + theme_classic() +
  labs(x="UMAP-1",y="UMAP-2",title="Custom MST") +
  theme(plot.title=element_text(size=13,face="bold",colour=METHOD_COLORS["Custom MST"]))

p_side_m3 <- ggplot(umap_compare[sample(nrow(umap_compare)),],
                     aes(x=UMAP_1,y=UMAP_2,colour=monocle3_pt)) +
  geom_point(size=.35,alpha=.7) +
  geom_segment(data=m3_edge_df, aes(x=x1,y=y1,xend=x2,yend=y2),
               colour="black",linewidth=.6,alpha=.6,inherit.aes=FALSE) +
  pt_gradient + theme_classic() +
  labs(x="UMAP-1",y="UMAP-2",title="Monocle3") +
  theme(plot.title=element_text(size=13,face="bold",colour=METHOD_COLORS["Monocle3"]))

print(p_side_mst | p_side_m3)

7.3 Discordant Cells

compare_df$abs_diff <- abs(compare_df$mst_pt - compare_df$monocle3_pt)
threshold <- quantile(compare_df$abs_diff, 0.90, na.rm=TRUE)

discordant <- compare_df %>% filter(abs_diff > threshold) %>% arrange(desc(abs_diff))

cat(sprintf("Top 10%% most discordant cells (|diff| > %.1f): %d cells\n",
            threshold, nrow(discordant)))
Top 10% most discordant cells (|diff| > 40.0): 1147 cells
umap_disc            <- umap_df
umap_disc$discordant <- rownames(umap_disc) %in% discordant$cell
umap_disc$abs_diff   <- compare_df$abs_diff[match(rownames(umap_disc), compare_df$cell)]

p_discordant <- ggplot(umap_disc[sample(nrow(umap_disc)),], aes(x=UMAP_1,y=UMAP_2)) +
  geom_point(data=~filter(., !discordant), colour="grey85", size=.3, alpha=.5) +
  geom_point(data=~filter(., discordant), aes(colour=abs_diff), size=.8, alpha=.85) +
  scale_colour_gradient(low="#FCA636", high="#C00000", name="|MST − M3|") +
  theme_classic() +
  labs(x="UMAP-1",y="UMAP-2",
       title="Discordant cells (top 10% disagreement)",
       subtitle="Boundary/transition cells — biologically expected") +
  theme(plot.title=element_text(size=13,face="bold"))

disc_states <- discordant %>% count(state) %>% mutate(pct=round(100*n/sum(n),1))

p_disc_bar <- ggplot(disc_states, aes(x=reorder(state,-n), y=pct, fill=state)) +
  geom_col(width=.7) +
  geom_text(aes(label=sprintf("%.0f%%",pct)), vjust=-.3, size=3.5) +
  scale_fill_manual(values=STATE_COLORS, guide="none") +
  theme_classic() +
  labs(x="State", y="% of discordant cells", title="State composition of discordant cells") +
  theme(plot.title=element_text(size=12,face="bold"))

print(p_discordant | p_disc_bar)

7.4 Which Method to Use?

if (overall_cor > 0.9) {
  rec <- "HIGH agreement (ρ > 0.9): either method valid. Use **Custom MST** for milestone labels; **Monocle3** for graph_test() trajectory genes."
} else if (overall_cor > 0.7) {
  rec <- "MODERATE agreement (ρ = 0.7–0.9): similar ordering, differ at boundaries. Use both as complementary evidence."
} else {
  rec <- "LOW agreement (ρ < 0.7): significant discordance. Check UMAP topology and milestone assignments."
}

8 Marker DotPlot per Milestone

DefaultAssay(cd4_ref) <- "RNA"

cd4_ref@meta.data$milestone_factor <- factor(
  cd4_ref@meta.data$milestone, levels = milestone_order
)
Idents(cd4_ref) <- "milestone_factor"

panel_genes <- c(
  # Naive
  "CCR7","LEF1","TCF7","SELL","KLF2","SATB1","IL7R","CD27","MAL",
  # TCM
  "S100A4","AQP3","LTB","ITGB1","CD44","CCR4",
  # Shared activation
  "CD69","LMNA",
  # TEM — effector memory and Th1 skewing
  "GZMK","CCL5","EOMES","CXCR3","HOPX","CXCR4","IFNG","TNF","CCR5",
  # Temra/CTL — terminal cytotoxic effector
  "GZMB","GZMA","PRF1","NKG7","CX3CR1","FGFBP2","GNLY","TBX21","ZEB2",
  "FCGR3A","KLRG1","NR4A2",
  # Treg — core identity
  "FOXP3","IL2RA","IKZF2","IKZF4","TIGIT","RTKN2","TNFRSF18","CTLA4",
  # Co-inhibitory receptors — shared between effector Treg and exhaustion
  # Expression here reflects Treg suppressive machinery, NOT dysfunction
  # Critical for Sézary interpretation: Treg-like vs exhausted identity
  "PDCD1","HAVCR2","LAG3"
)

panel_genes <- unique(intersect(panel_genes, rownames(cd4_ref)))

p_dotplot_ms <- DotPlot(
  cd4_ref,
  features  = panel_genes,
  group.by  = "milestone_factor",
  cols      = c("lightgrey","#d62728"),
  dot.scale = 4, scale = TRUE, col.min = -1.5, col.max = 2.5
) +
  RotatedAxis() + coord_flip() +
  theme(axis.text.x     = element_text(size=8, face="bold"),
        axis.text.y     = element_text(size=7),
        plot.title      = element_text(size=13,face="bold"),
        legend.position = "bottom") +
  ggtitle("Marker gene expression per milestone")

print(p_dotplot_ms)


saveRDS(cd4_ref,             "Objects/cd4_ref_dual_trajectory.rds")
saveRDS(cds,                 "Objects/monocle3_cds.rds")
saveRDS(mst_graph,           "Objects/mst_graph.rds")           # ← ADD
saveRDS(milestone_centroids, "Objects/milestone_centroids.rds") # ← ADD

write.csv(milestone_centroids, "Tables/milestone_centroids.csv",          row.names=FALSE)
write.csv(per_state_cor,       "Tables/method_comparison_per_state.csv",  row.names=FALSE)
write.csv(sig_traj_genes,      "Tables/monocle3_trajectory_genes.csv",    row.names=FALSE)

ggsave("Figures/fig_milestones_linear.pdf",  p_mst_linear,    width=14, height=4)
ggsave("Figures/fig_mst_umap.pdf",           p_mst_umap_ms,   width=10, height=8)
ggsave("Figures/fig_mst_pseudotime.pdf",     p_mst_pseudo,    width=10, height=8)
ggsave("Figures/fig_m3_pseudotime.pdf",      p_m3_pseudo,     width=10, height=8)
ggsave("Figures/fig_method_comparison.pdf",  p_scatter,       width=10, height=6)
ggsave("Figures/fig_dotplot_milestones.pdf", p_dotplot_ms,    width=9,  height=18)

cat("✅ All reference outputs saved\n")
✅ All reference outputs saved
LS0tCnRpdGxlOiAiQ0Q0IFQgQ2VsbCBSZWZlcmVuY2UgVHJhamVjdG9yeSDigJQgTW9ub2NsZTMgdnMgQ3VzdG9tIE1TVCIKc3VidGl0bGU6ICJEdWFsIHRyYWplY3RvcnkgY29tcGFyaXNvbiB8IE1pbGVzdG9uZSBhbm5vdGF0aW9uIHwgU8OpemFyeSBwcm9qZWN0aW9uIgphdXRob3I6ICJOQVNJUiBNQUhNT09EIEFCQkFTSSIKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6CiAgICAgIGNvbGxhcHNlZDogdHJ1ZQogICAgdGhlbWU6IGpvdXJuYWwKLS0tCgpgYGB7cn0KCmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICBlY2hvICAgICAgPSBUUlVFLAogIG1lc3NhZ2UgICA9IEZBTFNFLAogIHdhcm5pbmcgICA9IEZBTFNFLAogIGZpZy5hbGlnbiA9ICJjZW50ZXIiLAogIGRwaSAgICAgICA9IDE1MAopCmBgYAoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKIyBPdmVydmlldyAKCiMjIEFwcHJvYWNoCgpUaGlzIGRvY3VtZW50IGltcGxlbWVudHMgYW5kICoqY29tcGFyZXMgdHdvIHRyYWplY3RvcnkgbWV0aG9kcyoqIGZvciBub3JtYWwgQ0Q0IFQgY2VsbHMsIHRoZW4gcHJvamVjdHMgU8OpemFyeSBzeW5kcm9tZSBDRDQgVCBjZWxscyBvbnRvIGJvdGggcmVmZXJlbmNlIHRyYWplY3Rvcmllcy4KCiMjIyBNZXRob2QgMSDigJQgQ3VzdG9tIE1TVCAoQnVyZWwgKmV0IGFsLiogMjAyMiBhcHByb2FjaCkKCi0gICBPdmVyLWNsdXN0ZXIgd2l0aGluIGVhY2ggYW5ub3RhdGVkIHN0YXRlIOKGkiBkZWZpbmUgbWlsZXN0b25lcyAoTTAw4oCTTTA3KQotICAgQ29tcHV0ZSBNaW5pbXVtIFNwYW5uaW5nIFRyZWUgb24gbWlsZXN0b25lIGNlbnRyb2lkcyBpbiBVTUFQIHNwYWNlCi0gICBQcm9qZWN0IGVhY2ggY2VsbCBvbnRvIG5lYXJlc3QgTVNUIGVkZ2Ug4oaSIHBzZXVkb3RpbWUKCiMjIyBNZXRob2QgMiDigJQgTW9ub2NsZTMKCi0gICBDb252ZXJ0IFNldXJhdCBvYmplY3Qg4oaSIGBjZWxsX2RhdGFfc2V0YAotICAgYGxlYXJuX2dyYXBoKClgIGZpdHMgcHJpbmNpcGFsIGdyYXBoIHRvIGRhdGEgdG9wb2xvZ3kKLSAgIGBvcmRlcl9jZWxscygpYCByb290ZWQgYXQgQ0Q0IE5haXZlIGNlbnRyb2lkIOKGkiBwc2V1ZG90aW1lCi0gICBgZ3JhcGhfdGVzdCgpYCBpZGVudGlmaWVzIHRyYWplY3RvcnktdmFyaWFibGUgZ2VuZXMKCiMjIyBDb21wYXJpc29uCgotICAgU3BlYXJtYW4gY29ycmVsYXRpb24gYmV0d2VlbiBwc2V1ZG90aW1lcwotICAgQWdyZWVtZW50IG9uIGNlbGwgb3JkZXJpbmcgcGVyIHN0YXRlCi0gICBDb25jb3JkYW5jZSBvbiBTw6l6YXJ5IGNlbGwgcG9zaXRpb25pbmcKCiMjIEtleSBPYmplY3RzCgp8IE9iamVjdCB8IERlc2NyaXB0aW9uIHwgUmVxdWlyZWQgY29sdW1ucyB8CnwtLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CnwgYGNkNF9yZWZgIHwgQW5ub3RhdGVkIG5vcm1hbCBDRDQgVCBjZWxscyB8IGAkcHJlZGljdGVkLmNlbGx0eXBlLmwyYCwgVU1BUCwgUk5BIHwKfCBgc2V6YXJ5X29iamAgfCBTw6l6YXJ5IENENCBUIGNlbGxzIHwgUk5BIChub3JtYWxpc2VkKSwgb3B0aW9uYWwgQURUIHwKCiMjIFBhY2thZ2VzIFJlcXVpcmVkCgpgYGAgcgppbnN0YWxsLnBhY2thZ2VzKGMoImlncmFwaCIsIlJBTk4iLCJnZ3JlcGVsIiwicGF0Y2h3b3JrIiwicGhlYXRtYXAiLCJ2aXJpZGlzIikpCkJpb2NNYW5hZ2VyOjppbnN0YWxsKCJtb25vY2xlMyIpCnJlbW90ZXM6Omluc3RhbGxfZ2l0aHViKCJzYXRpamFsYWIvc2V1cmF0LXdyYXBwZXJzIikKYGBgCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMgU2V0dXAKCmBgYHtyIGxpYnJhcmllc30KCgpzdXBwcmVzc1BhY2thZ2VTdGFydHVwTWVzc2FnZXMoewogIGxpYnJhcnkoU2V1cmF0KQogIGxpYnJhcnkoU2V1cmF0V3JhcHBlcnMpCiAgbGlicmFyeShtb25vY2xlMykKICBsaWJyYXJ5KGlncmFwaCkKICBsaWJyYXJ5KFJBTk4pCiAgbGlicmFyeShnZ3Bsb3QyKQogIGxpYnJhcnkoZ2dyZXBlbCkKICBsaWJyYXJ5KGRwbHlyKQogIGxpYnJhcnkodGlkeXIpCiAgbGlicmFyeShwYXRjaHdvcmspCiAgbGlicmFyeShwaGVhdG1hcCkKICBsaWJyYXJ5KHZpcmlkaXMpCiAgbGlicmFyeShzY2FsZXMpCiAgbGlicmFyeShSQ29sb3JCcmV3ZXIpCiAgbGlicmFyeShrbml0cikKICBsaWJyYXJ5KGthYmxlRXh0cmEpCn0pCgpTVEFURV9DT0xPUlMgPC0gYygKICAiQ0Q0IE5haXZlIiAgICAgPSAiIzQ0NzJDNCIsCiAgIkNENCBUQ00iICAgICAgID0gIiM3MEFENDciLAogICJDRDQgVEVNIiAgICAgICA9ICIjRUQ3RDMxIiwKICAiQ0Q0IFRlbXJhL0NUTCIgPSAiI0MwMDAwMCIsCiAgIlRyZWciICAgICAgICAgID0gIiM3MDMwQTAiCikKCk1FVEhPRF9DT0xPUlMgPC0gYygKICAiTW9ub2NsZTMiICAgPSAiI2U3NGMzYyIsCiAgIkN1c3RvbSBNU1QiID0gIiMyOTgwYjkiCikKClNUQVRFX09SREVSIDwtIGMoIkNENCBOYWl2ZSIsIkNENCBUQ00iLCJDRDQgVEVNIiwiQ0Q0IFRlbXJhL0NUTCIsIlRyZWciKQoKVU1BUF9OQU1FIDwtICJ1bWFwIgpTVEFURV9DT0wgPC0gInByZWRpY3RlZC5jZWxsdHlwZS5sMiIKCiMgQklPSU5GT1JNQVRJQ0lBTiBOT1RFIG9uIHJlc29sdXRpb25zOgojIERvdHBsb3Qgc2hvd2VkIE0wMyB3YXMgVENNLWxpa2UgKExUQisvSUw3UissIG5vIGVmZmVjdG9yIG1hcmtlcnMpIOKAlAojIHRoaXMgbWVhbnMgcmVzb2x1dGlvbiAwLjA4IGZvciBUQ00gd2FzIHN0aWxsIHRvbyBoaWdoLCBwcm9kdWNpbmcgMyBUQ00KIyBtaWxlc3RvbmVzIGluc3RlYWQgb2YgMi4gUmVkdWNpbmcgdG8gMC4wNSBjb2xsYXBzZXMgdGhlIHRoaXJkIFRDTSBtaWxlc3RvbmUKIyBzbyB0aGUgc3ViLWNsdXN0ZXJpbmcgeWllbGRzIGV4YWN0bHkgMiBUQ00gbWlsZXN0b25lcyAoZWFybHkgYW5kIGxhdGUpLgojIFRFTSByZXNvbHV0aW9uIGluY3JlYXNlZCB0byAwLjMwIHRvIGJldHRlciBzZXBhcmF0ZSBURU0gZnJvbSBUZW1yYS4KTUlMRVNUT05FX1JFUyA8LSBjKAogICJDRDQgTmFpdmUiICAgICA9IDAuMDUsICAgIyBDSEFOR0VEIDAuMTDihpIwLjA1OiBzaW5nbGUgaG9tb2dlbmVvdXMgbWlsZXN0b25lCiAgIkNENCBUQ00iICAgICAgID0gMC4wNiwgICAjIENIQU5HRUQgMC4wOOKGkjAuMDU6IHdhcyBwcm9kdWNpbmcgMyBtaWxlc3RvbmVzLCBuZWVkIDIKICAiQ0Q0IFRFTSIgICAgICAgPSAwLjA1LCAgICMgQ0hBTkdFRCAwLjIw4oaSMC4zMDogYmV0dGVyIHNlcGFyYXRpb24gb2YgVEVNIHZzIFRlbXJhCiAgIkNENCBUZW1yYS9DVEwiID0gMC4xMCwgICAjIHVuY2hhbmdlZCDigJQgc2luZ2xlIG1pbGVzdG9uZSAob25seSAxMCBjZWxscykKICAiVHJlZyIgICAgICAgICAgPSAwLjIwICAgICMgdW5jaGFuZ2VkIOKAlCAyIG1pbGVzdG9uZXMgKG5haXZlICsgdGVybWluYWwpCikKCmNhdCgi4pyTIFNldHVwIGNvbXBsZXRlXG4iKQpjYXQoIlxuU3RhdGUgY29sb3VyczpcbiIpOyAgICAgICAgcHJpbnQoU1RBVEVfQ09MT1JTKQpjYXQoIlxuTWlsZXN0b25lIHJlc29sdXRpb25zOlxuIik7IHByaW50KE1JTEVTVE9ORV9SRVMpCmNhdCgiXG5TdGF0ZSBjb2x1bW46IiwgU1RBVEVfQ09MLCAiXG4iKQpjYXQoIlVNQVAgbmFtZTogICAiLCBVTUFQX05BTUUsICAiXG4iKQpgYGAKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKIyBMb2FkICYgVmFsaWRhdGUgT2JqZWN0cwoKYGBge3IgbG9hZC1vYmplY3RzfQpjZDRfcmVmICAgIDwtIHJlYWRSRFMoIi4uL0NENF9yZWZlcmVuY2VfY2xlYW5fQXppbXV0aF9yZWFkeV9mb3JfU2xpbmdzaG90LnJkcyIpCgpzZXphcnlfb2JqIDwtIHJlYWRSRFMoIi9ob21lL25hYmJhc2kvYXBvbGxvX2hvbWUvMS1TZXVyYXRfUkRTX09CSkVDVF9GSU5BTC9BbGxfc2FtcGxlc19NZXJnZWRfd2l0aF9SZW5hbWVkX0NsdXN0ZXJzX0NlbGxfc3RhdGUtMDMtMTItMjAyNS5yZHMucmRzIikKCmNhdCgiQ0Q0IHJlZmVyZW5jZSBsb2FkZWQ6IiwgbmNvbChjZDRfcmVmKSwgICAgImNlbGxzXG4iKQpjYXQoIlNlemFyeSBvYmplY3QgbG9hZGVkOiIsIG5jb2woc2V6YXJ5X29iaiksICJjZWxsc1xuIikKCmNhdCgiXG5BemltdXRoIGwyIGxhYmVscyBwcmVzZW50OlxuIikKcHJpbnQodGFibGUoY2Q0X3JlZkBtZXRhLmRhdGFbW1NUQVRFX0NPTF1dKSkKCnN0b3BpZm5vdCgKICAicHJlZGljdGVkLmNlbGx0eXBlLmwyIG1pc3NpbmcgZnJvbSBjZDRfcmVmIiA9IFNUQVRFX0NPTCAlaW4lIGNvbG5hbWVzKGNkNF9yZWZAbWV0YS5kYXRhKSwKICAiVU1BUCBtaXNzaW5nIGZyb20gY2Q0X3JlZiIgICAgICAgICAgICAgICAgICA9IFVNQVBfTkFNRSAlaW4lIG5hbWVzKGNkNF9yZWZAcmVkdWN0aW9ucyksCiAgIlJOQSBhc3NheSBtaXNzaW5nIGZyb20gY2Q0X3JlZiIgICAgICAgICAgICAgPSAiUk5BIiAlaW4lIG5hbWVzKGNkNF9yZWZAYXNzYXlzKSwKICAiUk5BIGFzc2F5IG1pc3NpbmcgZnJvbSBzZXphcnlfb2JqIiAgICAgICAgICA9ICJSTkEiICVpbiUgbmFtZXMoc2V6YXJ5X29iakBhc3NheXMpCikKY2F0KCLinIUgVmFsaWRhdGlvbiBwYXNzZWRcbiIpCgpEZWZhdWx0QXNzYXkoY2Q0X3JlZikgICAgPC0gIlJOQSIKRGVmYXVsdEFzc2F5KHNlemFyeV9vYmopIDwtICJSTkEiCgpjZDRfc3RhdGVzX2tlZXAgPC0gbmFtZXMoTUlMRVNUT05FX1JFUykKY2VsbHNfa2VlcCAgICAgIDwtIGNkNF9yZWZAbWV0YS5kYXRhW1tTVEFURV9DT0xdXSAlaW4lIGNkNF9zdGF0ZXNfa2VlcAppZiAoc3VtKCFjZWxsc19rZWVwKSA+IDApIHsKICBjZDRfcmVmIDwtIHN1YnNldChjZDRfcmVmLCBjZWxscyA9IGNvbG5hbWVzKGNkNF9yZWYpW2NlbGxzX2tlZXBdKQogIGNhdCgiU3Vic2V0dGVkIHRvIHRyYWplY3Rvcnkgc3RhdGVzOiIsIG5jb2woY2Q0X3JlZiksICJjZWxsc1xuIikKfQoKdW1hcF9kZiAgICAgICAgICAgPC0gYXMuZGF0YS5mcmFtZShFbWJlZGRpbmdzKGNkNF9yZWYsIFVNQVBfTkFNRSkpCmNvbG5hbWVzKHVtYXBfZGYpIDwtIGMoIlVNQVBfMSIsIlVNQVBfMiIpCnVtYXBfZGYkY2VsbCAgICAgIDwtIHJvd25hbWVzKHVtYXBfZGYpCnVtYXBfZGYkc3RhdGUgICAgIDwtIGNkNF9yZWZAbWV0YS5kYXRhW1tTVEFURV9DT0xdXQoKcmVmX3N1bW1hcnkgPC0gY2Q0X3JlZkBtZXRhLmRhdGEgJT4lCiAgY291bnQoISFzeW0oU1RBVEVfQ09MKSwgbmFtZSA9ICJuX2NlbGxzIikgJT4lCiAgcmVuYW1lKFN0YXRlID0gISFzeW0oU1RBVEVfQ09MKSkgJT4lCiAgbXV0YXRlKHBjdCA9IHJvdW5kKDEwMCAqIG5fY2VsbHMgLyBzdW0obl9jZWxscyksIDEpKSAlPiUKICBhcnJhbmdlKG1hdGNoKFN0YXRlLCBTVEFURV9PUkRFUikpCgprYWJsZShyZWZfc3VtbWFyeSwKICAgICAgY2FwdGlvbiA9IHNwcmludGYoIlJlZmVyZW5jZSBDRDQgVCBjZWxscyAobiA9ICVkIHRvdGFsKSIsIG5jb2woY2Q0X3JlZikpKSAlPiUKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsImhvdmVyIiksIGZ1bGxfd2lkdGggPSBGQUxTRSkKYGBgCgoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKIyBEZWZpbmUgTWlsZXN0b25lcyAoU2hhcmVkIGJ5IEJvdGggTWV0aG9kcykgCgojIyBTdWItY2x1c3RlcmluZwoKYGBge3IgZGVmaW5lLW1pbGVzdG9uZXN9CnNldC5zZWVkKDQyKQpjZDRfcmVmQG1ldGEuZGF0YSRtaWxlc3RvbmUgPC0gTkFfY2hhcmFjdGVyXwptaWxlc3RvbmVfY291bnRlciAgICAgICAgICAgPC0gMEwKbWlsZXN0b25lX3N0YXRlX21hcCAgICAgICAgIDwtIGxpc3QoKQoKc3RhdGVzX3ByZXNlbnQgPC0gaW50ZXJzZWN0KG5hbWVzKE1JTEVTVE9ORV9SRVMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZShjZDRfcmVmQG1ldGEuZGF0YVtbU1RBVEVfQ09MXV0pKQoKY2F0KCJEZWZpbmluZyBtaWxlc3RvbmVzIGJ5IHN1Yi1jbHVzdGVyaW5nIHdpdGhpbiBlYWNoIHN0YXRlOlxuXG4iKQoKZm9yIChzdCBpbiBzdGF0ZXNfcHJlc2VudCkgewogIGNlbGxzX3N0IDwtIGNvbG5hbWVzKGNkNF9yZWYpW2NkNF9yZWZAbWV0YS5kYXRhW1tTVEFURV9DT0xdXSA9PSBzdF0KCiAgaWYgKGxlbmd0aChjZWxsc19zdCkgPCA1MCkgewogICAgbV9pZCA8LSBzcHJpbnRmKCJNJTAyZCIsIG1pbGVzdG9uZV9jb3VudGVyKQogICAgY2Q0X3JlZkBtZXRhLmRhdGEkbWlsZXN0b25lW2NvbG5hbWVzKGNkNF9yZWYpICVpbiUgY2VsbHNfc3RdIDwtIG1faWQKICAgIG1pbGVzdG9uZV9zdGF0ZV9tYXBbW21faWRdXSA8LSBzdAogICAgbWlsZXN0b25lX2NvdW50ZXIgPC0gbWlsZXN0b25lX2NvdW50ZXIgKyAxTAogICAgY2F0KHNwcmludGYoIiAgJS0yMHMgICU0ZCBjZWxscyAg4oaSICAxIG1pbGVzdG9uZSAoJXMpIFt0b28gZmV3XVxuIiwKICAgICAgICAgICAgICAgIHN0LCBsZW5ndGgoY2VsbHNfc3QpLCBtX2lkKSkKICAgIG5leHQKICB9CgogIHN1Yl9vYmogPC0gc3Vic2V0KGNkNF9yZWYsIGNlbGxzID0gY2VsbHNfc3QpCgogIHN1Yl9vYmogPC0gRmluZE5laWdoYm9ycygKICAgIHN1Yl9vYmosCiAgICByZWR1Y3Rpb24gID0gInBjYSIsCiAgICBkaW1zICAgICAgID0gMToyMCwKICAgIGsucGFyYW0gICAgPSAyMCwKICAgIGdyYXBoLm5hbWUgPSBjKCJzdWJfbm4iLCJzdWJfc25uIiksCiAgICB2ZXJib3NlICAgID0gRkFMU0UKICApCgogIHN1Yl9vYmogPC0gRmluZENsdXN0ZXJzKAogICAgc3ViX29iaiwKICAgIGdyYXBoLm5hbWUgID0gInN1Yl9zbm4iLAogICAgcmVzb2x1dGlvbiAgPSBNSUxFU1RPTkVfUkVTW3N0XSwKICAgIHJhbmRvbS5zZWVkID0gNDIsCiAgICB2ZXJib3NlICAgICA9IEZBTFNFCiAgKQoKICBzdWJfY2x1c3RlcnMgPC0gYXMuY2hhcmFjdGVyKHN1Yl9vYmokc2V1cmF0X2NsdXN0ZXJzKQogIG5fc3ViICAgICAgICA8LSBsZW5ndGgodW5pcXVlKHN1Yl9jbHVzdGVycykpCgogIGZvciAoc2MgaW4gc29ydCh1bmlxdWUoc3ViX2NsdXN0ZXJzKSkpIHsKICAgIG1faWQgICAgIDwtIHNwcmludGYoIk0lMDJkIiwgbWlsZXN0b25lX2NvdW50ZXIpCiAgICBzY19jZWxscyA8LSBjZWxsc19zdFtzdWJfY2x1c3RlcnMgPT0gc2NdCiAgICBjZDRfcmVmQG1ldGEuZGF0YSRtaWxlc3RvbmVbY29sbmFtZXMoY2Q0X3JlZikgJWluJSBzY19jZWxsc10gPC0gbV9pZAogICAgbWlsZXN0b25lX3N0YXRlX21hcFtbbV9pZF1dIDwtIHN0CiAgICBtaWxlc3RvbmVfY291bnRlciA8LSBtaWxlc3RvbmVfY291bnRlciArIDFMCiAgfQoKICBjYXQoc3ByaW50ZigiICAlLTIwcyAgJTRkIGNlbGxzICDihpIgICVkIG1pbGVzdG9uZXMgKE0lMDJk4oCTTSUwMmQpXG4iLAogICAgICAgICAgICAgIHN0LCBsZW5ndGgoY2VsbHNfc3QpLCBuX3N1YiwKICAgICAgICAgICAgICBtaWxlc3RvbmVfY291bnRlciAtIG5fc3ViLCBtaWxlc3RvbmVfY291bnRlciAtIDEpKQp9CgpjYXQoc3ByaW50ZigiXG5Ub3RhbCBtaWxlc3RvbmVzOiAlZFxuIiwgbWlsZXN0b25lX2NvdW50ZXIpKQpjYXQoIlxuTWlsZXN0b25lIGRpc3RyaWJ1dGlvbjpcbiIpCnByaW50KHRhYmxlKGNkNF9yZWZAbWV0YS5kYXRhJG1pbGVzdG9uZSwgdXNlTkEgPSAiaWZhbnkiKSkKYGBgCgojIyBNaWxlc3RvbmUgQ2VudHJvaWRzCgpgYGB7ciBtaWxlc3RvbmUtY2VudHJvaWRzfQoKdW1hcF9kZiRtaWxlc3RvbmUgPC0gY2Q0X3JlZkBtZXRhLmRhdGEkbWlsZXN0b25lCgptaWxlc3RvbmVfY2VudHJvaWRzIDwtIHVtYXBfZGYgJT4lCiAgZmlsdGVyKCFpcy5uYShtaWxlc3RvbmUpKSAlPiUKICBncm91cF9ieShtaWxlc3RvbmUpICU+JQogIHN1bW1hcmlzZSgKICAgIFVNQVBfMSAgPSBtZWFuKFVNQVBfMSksCiAgICBVTUFQXzIgID0gbWVhbihVTUFQXzIpLAogICAgbl9jZWxscyA9IG4oKSwKICAgIHN0YXRlICAgPSBkcGx5cjo6Zmlyc3Qoc3RhdGUpLAogICAgLmdyb3VwcyA9ICJkcm9wIgogICkgJT4lCiAgbXV0YXRlKHN0YXRlID0gdW5saXN0KG1pbGVzdG9uZV9zdGF0ZV9tYXBbbWlsZXN0b25lXSkpICU+JQogIGFycmFuZ2UobWlsZXN0b25lKQoKY2F0KCJNaWxlc3RvbmUgY2VudHJvaWRzIOKAlCBpbnNwZWN0IGJlZm9yZSBzZXR0aW5nIG1hbnVhbCBlZGdlczpcbiIpCnByaW50KG1pbGVzdG9uZV9jZW50cm9pZHNbLCBjKCJtaWxlc3RvbmUiLCJzdGF0ZSIsIlVNQVBfMSIsIlVNQVBfMiIsIm5fY2VsbHMiKV0pCgprYWJsZShtaWxlc3RvbmVfY2VudHJvaWRzLAogICAgICBjYXB0aW9uID0gIk1pbGVzdG9uZSBjZW50cm9pZHMgaW4gVU1BUCBzcGFjZSIsCiAgICAgIGRpZ2l0cyAgPSAzKSAlPiUKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsImNvbmRlbnNlZCIpLCBmdWxsX3dpZHRoID0gRkFMU0UpCmBgYAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojIE1ldGhvZCAxIOKAlCBDdXN0b20gTVNUIFRyYWplY3Rvcnkgey50YWJzZXQgLm1ldGhvZC1tc3R9Cgo6Ojogey5zZWN0aW9uLWJveCAubWV0aG9kLW1zdH0KKipDdXN0b20gTVNUIGFwcHJvYWNoKiogKEJ1cmVsICpldCBhbC4qIDIwMjIpOiBjb25uZWN0cyBtaWxlc3RvbmUgY2VudHJvaWRzIHdpdGggYSBNaW5pbXVtIFNwYW5uaW5nIFRyZWU7IGNlbGxzIGdldCBwc2V1ZG90aW1lIGJ5IHByb2plY3Rpb24gb250byBuZWFyZXN0IGVkZ2UuCjo6OgoKIyMgTVNUIENvbXB1dGF0aW9uCgpgYGB7ciBtc3QtY29tcHV0ZX0KIyDilIDilIAgU3RlcCAxOiBEaXN0YW5jZSBtYXRyaXgg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmNlbnRyb2lkX21hdCA8LSBhcy5tYXRyaXgobWlsZXN0b25lX2NlbnRyb2lkc1ssIGMoIlVNQVBfMSIsIlVNQVBfMiIpXSkKcm93bmFtZXMoY2VudHJvaWRfbWF0KSA8LSBtaWxlc3RvbmVfY2VudHJvaWRzJG1pbGVzdG9uZQpkaXN0X21hdCA8LSBhcy5tYXRyaXgoZGlzdChjZW50cm9pZF9tYXQsIG1ldGhvZCA9ICJldWNsaWRlYW4iKSkKCiMg4pSA4pSAIFN0ZXAgMjogUm9vdCA9IENENCBOYWl2ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKdG5fbWlsZXN0b25lcyA8LSBtaWxlc3RvbmVfY2VudHJvaWRzJG1pbGVzdG9uZVttaWxlc3RvbmVfY2VudHJvaWRzJHN0YXRlID09ICJDRDQgTmFpdmUiXQpjYXQoIkNENCBOYWl2ZSBtaWxlc3RvbmVzOiIsIHRuX21pbGVzdG9uZXMsICJcbiIpCgppZiAobGVuZ3RoKHRuX21pbGVzdG9uZXMpID09IDEpIHsKICByb290X21zIDwtIHRuX21pbGVzdG9uZXMKfSBlbHNlIHsKICB0bl9jZW50cm9pZCA8LSBjb2xNZWFucyhjZW50cm9pZF9tYXRbdG5fbWlsZXN0b25lcywgLCBkcm9wID0gRkFMU0VdKQogIHRuX2Rpc3RzICAgIDwtIHJvd1N1bXMoKGNlbnRyb2lkX21hdFt0bl9taWxlc3RvbmVzLCAsIGRyb3AgPSBGQUxTRV0gLQogICAgICAgICAgICAgICAgICAgbWF0cml4KHRuX2NlbnRyb2lkLCBucm93PWxlbmd0aCh0bl9taWxlc3RvbmVzKSwgbmNvbD0yLCBieXJvdz1UUlVFKSleMikKICByb290X21zIDwtIHRuX21pbGVzdG9uZXNbd2hpY2gubWluKHRuX2Rpc3RzKV0KfQpjYXQoIlJvb3QgbWlsZXN0b25lOiIsIHJvb3RfbXMsICJcbiIpCgojIOKUgOKUgCBTdGVwIDM6IEF1dG9tYXRpYyBNU1Qg4oCUIGluc3BlY3Qgb25seSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZ19hdXRvICAgPC0gZ3JhcGhfZnJvbV9hZGphY2VuY3lfbWF0cml4KGRpc3RfbWF0LCBtb2RlPSJ1bmRpcmVjdGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodGVkPVRSVUUsIGRpYWc9RkFMU0UpCm1zdF9hdXRvIDwtIG1zdChnX2F1dG8sIGFsZ29yaXRobT0icHJpbSIpCmNhdCgiXG5BdXRvbWF0aWMgTVNUIChyZWZlcmVuY2Ugb25seSk6XG4iKQphdXRvX2VkZ2VzIDwtIGFzX2VkZ2VsaXN0KG1zdF9hdXRvKQpmb3IgKGkgaW4gc2VxX2xlbihucm93KGF1dG9fZWRnZXMpKSkgewogIHMxIDwtIG1pbGVzdG9uZV9jZW50cm9pZHMkc3RhdGVbbWlsZXN0b25lX2NlbnRyb2lkcyRtaWxlc3RvbmUgPT0gYXV0b19lZGdlc1tpLDFdXQogIHMyIDwtIG1pbGVzdG9uZV9jZW50cm9pZHMkc3RhdGVbbWlsZXN0b25lX2NlbnRyb2lkcyRtaWxlc3RvbmUgPT0gYXV0b19lZGdlc1tpLDJdXQogIGNhdChzcHJpbnRmKCIgICVzKCVzKSDigJQgJXMoJXMpXG4iLCBhdXRvX2VkZ2VzW2ksMV0sIHMxLCBhdXRvX2VkZ2VzW2ksMl0sIHMyKSkKfQoKIyDilIDilIAgU3RlcCA0OiBCdWlsZCBlZGdlbGlzdCB2aWEgc3RhdGUgbG9va3VwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAptc19ieV9zdGF0ZSA8LSBmdW5jdGlvbihzdGF0ZV9uYW1lLCByYW5rID0gMSkgewogIGNhbmRpZGF0ZXMgPC0gbWlsZXN0b25lX2NlbnRyb2lkc1ttaWxlc3RvbmVfY2VudHJvaWRzJHN0YXRlID09IHN0YXRlX25hbWUsIF0KICBpZiAobnJvdyhjYW5kaWRhdGVzKSA8IHJhbmspIHN0b3Aoc3ByaW50ZigKICAgICJTdGF0ZSAnJXMnIGhhcyBvbmx5ICVkIG1pbGVzdG9uZShzKSwgYnV0IHJhbms9JWQgd2FzIHJlcXVlc3RlZC4iLAogICAgc3RhdGVfbmFtZSwgbnJvdyhjYW5kaWRhdGVzKSwgcmFuaykpCiAgY2FuZGlkYXRlcyA8LSBjYW5kaWRhdGVzW29yZGVyKGNhbmRpZGF0ZXMkVU1BUF8xKSwgXQogIGNhbmRpZGF0ZXMkbWlsZXN0b25lW3JhbmtdCn0KCm5haXZlX21zICA8LSBtc19ieV9zdGF0ZSgiQ0Q0IE5haXZlIiwgICAgIDEpCnRjbV9lX21zICA8LSBtc19ieV9zdGF0ZSgiQ0Q0IFRDTSIsICAgICAgIDEpCnRjbV9sX21zICA8LSBtc19ieV9zdGF0ZSgiQ0Q0IFRDTSIsICAgICAgIDIpCnRlbV9tcyAgICA8LSBtc19ieV9zdGF0ZSgiQ0Q0IFRFTSIsICAgICAgIDEpICAjIHNpbmdsZSBURU0gbWlsZXN0b25lCnRlbXJhX21zICA8LSBtc19ieV9zdGF0ZSgiQ0Q0IFRlbXJhL0NUTCIsIDEpCnRyZWdfbl9tcyA8LSBtc19ieV9zdGF0ZSgiVHJlZyIsICAgICAgICAgIDEpCnRyZWdfdF9tcyA8LSBtc19ieV9zdGF0ZSgiVHJlZyIsICAgICAgICAgIDIpCgpjYXQoIlxuU3RhdGUtdG8tQ3VycmVudC1JRCBtYXBwaW5nOlxuIikKY2F0KHNwcmludGYoIiAgTmFpdmU6ICVzXG4gIFRDTTogICAlcyhlYXJseSksICVzKGxhdGUpXG4iLCBuYWl2ZV9tcywgdGNtX2VfbXMsIHRjbV9sX21zKSkKY2F0KHNwcmludGYoIiAgVEVNOiAgICVzXG4gIFRlbXJhOiAlc1xuIiwgdGVtX21zLCB0ZW1yYV9tcykpCmNhdChzcHJpbnRmKCIgIFRyZWc6ICAlcyhuYWl2ZSksICVzKHRlcm1pbmFsKVxuIiwgdHJlZ19uX21zLCB0cmVnX3RfbXMpKQoKZWRnZV9saXN0X29yZGVyZWQgPC0gbWF0cml4KGMoCiAgbmFpdmVfbXMsICB0Y21fZV9tcywKICB0Y21fZV9tcywgIHRjbV9sX21zLAogIHRjbV9sX21zLCAgdGVtX21zLAogIHRlbV9tcywgICAgdGVtcmFfbXMsCiAgdGNtX2xfbXMsICB0cmVnX25fbXMsCiAgdHJlZ19uX21zLCB0cmVnX3RfbXMKKSwgbmNvbCA9IDIsIGJ5cm93ID0gVFJVRSkKCiMg4pSA4pSAIFN0ZXAgNTogRXhwbGljaXQgdHJhdmVyc2FsIG9yZGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApiZnNfb3JkZXJfY2xlYW4gPC0gdW5pcXVlKGFzLnZlY3Rvcih0KGVkZ2VfbGlzdF9vcmRlcmVkKSkpCmNhdCgiXG5UcmF2ZXJzYWwgb3JkZXI6IiwgcGFzdGUoYmZzX29yZGVyX2NsZWFuLCBjb2xsYXBzZT0iIOKGkiAiKSwgIlxuIikKCnN0b3BpZm5vdCgKICAiTXVzdCBoYXZlIDcgbWlsZXN0b25lcyIgPSBsZW5ndGgoYmZzX29yZGVyX2NsZWFuKSA9PSA3LAogICJOYWl2ZSBtdXN0IGJlIHJvb3QiICAgICA9IGJmc19vcmRlcl9jbGVhblsxXSA9PSBuYWl2ZV9tcywKICAiVGVtcmEgYmVmb3JlIFRyZWciICAgICAgPSB3aGljaChiZnNfb3JkZXJfY2xlYW49PXRlbXJhX21zKSA8IHdoaWNoKGJmc19vcmRlcl9jbGVhbj09dHJlZ19uX21zKQopCmNhdCgi4pyFIFRyYXZlcnNhbCBvcmRlciB2YWxpZGF0ZWRcbiIpCgojIOKUgOKUgCBWYWxpZGF0ZSBlZGdlIHdlaWdodHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmVkZ2Vfd2VpZ2h0cyA8LSBhcHBseShlZGdlX2xpc3Rfb3JkZXJlZCwgMSwgZnVuY3Rpb24oZSkgZGlzdF9tYXRbZVsxXSwgZVsyXV0pCmlmIChhbnkoIWlzLmZpbml0ZShlZGdlX3dlaWdodHMpKSkgewogIGJhZCA8LSB3aGljaCghaXMuZmluaXRlKGVkZ2Vfd2VpZ2h0cykpCiAgcHJpbnQoZGF0YS5mcmFtZShmcm9tPWVkZ2VfbGlzdF9vcmRlcmVkW2JhZCwxXSwKICAgICAgICAgICAgICAgICAgIHRvICA9ZWRnZV9saXN0X29yZGVyZWRbYmFkLDJdLAogICAgICAgICAgICAgICAgICAgdyAgID1lZGdlX3dlaWdodHNbYmFkXSkpCiAgc3RvcCgiTmFOL05BL0luZiBlZGdlIHdlaWdodHMgZGV0ZWN0ZWQg4oCUIGNoZWNrIHN0YXRlIGxvb2t1cCBvciBkaXN0X21hdCByb3duYW1lcy4iKQp9Cgptc3RfZ3JhcGggPC0gZ3JhcGhfZnJvbV9lZGdlbGlzdChlZGdlX2xpc3Rfb3JkZXJlZCwgZGlyZWN0ZWQgPSBGQUxTRSkKRShtc3RfZ3JhcGgpJHdlaWdodCA8LSBlZGdlX3dlaWdodHMKCmNhdCgiXG5NYW51YWwgZWRnZXMgZGVmaW5lZDpcbiIpCmZvciAoaSBpbiBzZXFfbGVuKG5yb3coZWRnZV9saXN0X29yZGVyZWQpKSkgewogIHNmIDwtIG1pbGVzdG9uZV9jZW50cm9pZHMkc3RhdGVbbWlsZXN0b25lX2NlbnRyb2lkcyRtaWxlc3RvbmUgPT0gZWRnZV9saXN0X29yZGVyZWRbaSwxXV0KICBzdCA8LSBtaWxlc3RvbmVfY2VudHJvaWRzJHN0YXRlW21pbGVzdG9uZV9jZW50cm9pZHMkbWlsZXN0b25lID09IGVkZ2VfbGlzdF9vcmRlcmVkW2ksMl1dCiAgY2F0KHNwcmludGYoIiAgJXMoJXMpIOKGkiAlcyglcykgIHc9JS40ZlxuIiwKICAgICAgICAgICAgICBlZGdlX2xpc3Rfb3JkZXJlZFtpLDFdLCBzZiwgZWRnZV9saXN0X29yZGVyZWRbaSwyXSwgc3QsIGVkZ2Vfd2VpZ2h0c1tpXSkpCn0KCiMg4pSA4pSAIFN0ZXAgNjogUmVuYW1lIHRvIE0wMC1NMDYg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACm9sZF90b19uZXcgPC0gc2V0TmFtZXMoc3ByaW50ZigiTSUwMmQiLCBzZXFfYWxvbmcoYmZzX29yZGVyX2NsZWFuKSAtIDFMKSwgYmZzX29yZGVyX2NsZWFuKQoKY2F0KCJcblJlbmFtaW5nIG1hcDpcbiIpCmZvciAobyBpbiBuYW1lcyhvbGRfdG9fbmV3KSkgewogIHN0IDwtIG1pbGVzdG9uZV9jZW50cm9pZHMkc3RhdGVbbWlsZXN0b25lX2NlbnRyb2lkcyRtaWxlc3RvbmUgPT0gb10KICBjYXQoc3ByaW50ZigiICAlcyAoJXMpIOKGkiAlc1xuIiwgbywgc3QsIG9sZF90b19uZXdbb10pKQp9CgptaWxlc3RvbmVfY2VudHJvaWRzJG1pbGVzdG9uZSA8LSBvbGRfdG9fbmV3W21pbGVzdG9uZV9jZW50cm9pZHMkbWlsZXN0b25lXQpjZDRfcmVmQG1ldGEuZGF0YSRtaWxlc3RvbmUgICA8LSB1bm5hbWUob2xkX3RvX25ld1tjZDRfcmVmQG1ldGEuZGF0YSRtaWxlc3RvbmVdKQpuYW1lcyhtaWxlc3RvbmVfc3RhdGVfbWFwKSAgICA8LSBvbGRfdG9fbmV3W25hbWVzKG1pbGVzdG9uZV9zdGF0ZV9tYXApXQpyb3duYW1lcyhjZW50cm9pZF9tYXQpICAgICAgICA8LSBvbGRfdG9fbmV3W3Jvd25hbWVzKGNlbnRyb2lkX21hdCldCnJvd25hbWVzKGRpc3RfbWF0KSAgICAgICAgICAgIDwtIG9sZF90b19uZXdbcm93bmFtZXMoZGlzdF9tYXQpXQpjb2xuYW1lcyhkaXN0X21hdCkgICAgICAgICAgICA8LSBvbGRfdG9fbmV3W2NvbG5hbWVzKGRpc3RfbWF0KV0KVihtc3RfZ3JhcGgpJG5hbWUgICAgICAgICAgICAgPC0gdW5uYW1lKG9sZF90b19uZXdbVihtc3RfZ3JhcGgpJG5hbWVdKQpjYXQoIuKchSBSZW5hbWluZyBhcHBsaWVkXG4iKQoKIyDilIDilIAgU3RlcCA3OiBWZXJpZnkgZmluYWwgYmlvbG9neSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKbWlsZXN0b25lX29yZGVyIDwtIHNwcmludGYoIk0lMDJkIiwgc2VxX2xlbihucm93KG1pbGVzdG9uZV9jZW50cm9pZHMpKSAtIDFMKQpjYXQoIlxuRmluYWwgbWlsZXN0b25lIOKGkiBiaW9sb2d5OlxuIikKZm9yIChtIGluIG1pbGVzdG9uZV9vcmRlcikgewogIHN0IDwtIG1pbGVzdG9uZV9jZW50cm9pZHMkc3RhdGVbbWlsZXN0b25lX2NlbnRyb2lkcyRtaWxlc3RvbmUgPT0gbV0KICBuYyA8LSBtaWxlc3RvbmVfY2VudHJvaWRzJG5fY2VsbHNbbWlsZXN0b25lX2NlbnRyb2lkcyRtaWxlc3RvbmUgPT0gbV0KICBjYXQoc3ByaW50ZigiICAlcyA9ICUtMjBzICBuPSU0ZFxuIiwgbSwgc3QsIG5jKSkKfQpjYXQoIkV4cGVjdGVkOlxuICBNMDA9TmFpdmUgIE0wMS9NMDI9VENNICBNMDM9VEVNICBNMDQ9VGVtcmEgIE0wNS9NMDY9VHJlZ1xuIikKCiMg4pSA4pSAIFN3YXAgaGVscGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApzd2FwX21zIDwtIGZ1bmN0aW9uKGEsIGIpIHsKICB0bXAgPC0gIl9fVE1QX18iCiAgdm4gPC0gVihtc3RfZ3JhcGgpJG5hbWUKICB2blt2bj09YV0gPC0gdG1wOyB2blt2bj09Yl0gPC0gYTsgdm5bdm49PXRtcF0gPC0gYjsgVihtc3RfZ3JhcGgpJG5hbWUgPDwtIHZuCiAgbWMgPC0gbWlsZXN0b25lX2NlbnRyb2lkcyRtaWxlc3RvbmUKICBtY1ttYz09YV0gPC0gdG1wOyBtY1ttYz09Yl0gPC0gYTsgbWNbbWM9PXRtcF0gPC0gYjsgbWlsZXN0b25lX2NlbnRyb2lkcyRtaWxlc3RvbmUgPDwtIG1jCiAgbXYgPC0gY2Q0X3JlZkBtZXRhLmRhdGEkbWlsZXN0b25lCiAgbXZbIWlzLm5hKG12KSZtdj09YV0gPC0gdG1wOyBtdlshaXMubmEobXYpJm12PT1iXSA8LSBhCiAgbXZbIWlzLm5hKG12KSZtdj09dG1wXSA8LSBiOyBjZDRfcmVmQG1ldGEuZGF0YSRtaWxlc3RvbmUgPDwtIG12CiAgbm0gPC0gbmFtZXMobWlsZXN0b25lX3N0YXRlX21hcCkKICBubVtubT09YV0gPC0gdG1wOyBubVtubT09Yl0gPC0gYTsgbm1bbm09PXRtcF0gPC0gYjsgbmFtZXMobWlsZXN0b25lX3N0YXRlX21hcCkgPDwtIG5tCiAgcm4gPC0gcm93bmFtZXMoY2VudHJvaWRfbWF0KQogIHJuW3JuPT1hXSA8LSB0bXA7IHJuW3JuPT1iXSA8LSBhOyBybltybj09dG1wXSA8LSBiOyByb3duYW1lcyhjZW50cm9pZF9tYXQpIDw8LSBybgogIHJuIDwtIHJvd25hbWVzKGRpc3RfbWF0KTsgY24gPC0gY29sbmFtZXMoZGlzdF9tYXQpCiAgcm5bcm49PWFdIDwtIHRtcDsgcm5bcm49PWJdIDwtIGE7IHJuW3JuPT10bXBdIDwtIGI7IHJvd25hbWVzKGRpc3RfbWF0KSA8PC0gcm4KICBjbltjbj09YV0gPC0gdG1wOyBjbltjbj09Yl0gPC0gYTsgY25bY249PXRtcF0gPC0gYjsgY29sbmFtZXMoZGlzdF9tYXQpIDw8LSBjbgogIGNhdChzcHJpbnRmKCIgIFN3YXBwZWQgJXMgPC0+ICVzXG4iLCBhLCBiKSkKfQogI3N3YXBfbXMoIk0wMSIsIk0wMiIpICAjIFRDTSBlYXJseS9sYXRlIHJldmVyc2VkPwojIHN3YXBfbXMoIk0wNSIsIk0wNiIpICAjIFRyZWcgbmFpdmUvdGVybWluYWwgcmV2ZXJzZWQ/CgojIOKUgOKUgCBTdGVwIDg6IEdyYXBoIGRpc3RhbmNlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZ3JhcGhfZGlzdHMgPC0gZGlzdGFuY2VzKG1zdF9ncmFwaCwgdiA9ICJNMDAiLCB3ZWlnaHRzID0gTkEpCmdyYXBoX2Rpc3RzW2lzLmluZmluaXRlKGdyYXBoX2Rpc3RzKV0gPC0gbWF4KGdyYXBoX2Rpc3RzW2lzLmZpbml0ZShncmFwaF9kaXN0cyldKSArIDEKCm1pbGVzdG9uZV9jZW50cm9pZHMkZ3JhcGhfZGlzdCA8LSBhcy5udW1lcmljKGdyYXBoX2Rpc3RzWywgbWlsZXN0b25lX2NlbnRyb2lkcyRtaWxlc3RvbmVdKQptaWxlc3RvbmVfY2VudHJvaWRzJG9yZGVyX3BvcyAgPC0gbWF0Y2gobWlsZXN0b25lX2NlbnRyb2lkcyRtaWxlc3RvbmUsIG1pbGVzdG9uZV9vcmRlcikKbWlsZXN0b25lX2NlbnRyb2lkcyAgICAgICAgICAgICA8LSBhcnJhbmdlKG1pbGVzdG9uZV9jZW50cm9pZHMsIG9yZGVyX3BvcykKCiMg4pSA4pSAIFN0ZXAgOTogRWRnZSBkYXRhIGZyYW1lIGZvciBwbG90dGluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKbXN0X2VkZ2VzICAgPC0gYXNfZWRnZWxpc3QobXN0X2dyYXBoKQptc3RfZWRnZV9kZiA8LSBkby5jYWxsKHJiaW5kLCBsYXBwbHkoc2VxX2xlbihucm93KG1zdF9lZGdlcykpLCBmdW5jdGlvbihpKSB7CiAgbTEgPC0gbXN0X2VkZ2VzW2ksMV07IG0yIDwtIG1zdF9lZGdlc1tpLDJdCiAgcjEgPC0gbWlsZXN0b25lX2NlbnRyb2lkc1ttaWxlc3RvbmVfY2VudHJvaWRzJG1pbGVzdG9uZSA9PSBtMSwgXQogIHIyIDwtIG1pbGVzdG9uZV9jZW50cm9pZHNbbWlsZXN0b25lX2NlbnRyb2lkcyRtaWxlc3RvbmUgPT0gbTIsIF0KICBpZiAobnJvdyhyMSk9PTAgfHwgbnJvdyhyMik9PTApIHJldHVybihOVUxMKQogIGRhdGEuZnJhbWUoeDE9cjEkVU1BUF8xLCB5MT1yMSRVTUFQXzIsIHgyPXIyJFVNQVBfMSwgeTI9cjIkVU1BUF8yKQp9KSkKCiMg4pSA4pSAIEZpbmFsIHN1bW1hcnkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmNhdChzcHJpbnRmKCJcbkZpbmFsIE1TVDogJWQgbm9kZXMsICVkIGVkZ2VzIHwgUm9vdDogTTAwXG4iLAogICAgICAgICAgICB2Y291bnQobXN0X2dyYXBoKSwgZWNvdW50KG1zdF9ncmFwaCkpKQptc3RfZWRnZXNfZmluYWwgPC0gYXNfZWRnZWxpc3QobXN0X2dyYXBoKQpmb3IgKGkgaW4gc2VxX2xlbihucm93KG1zdF9lZGdlc19maW5hbCkpKSB7CiAgczEgPC0gbWlsZXN0b25lX2NlbnRyb2lkcyRzdGF0ZVttaWxlc3RvbmVfY2VudHJvaWRzJG1pbGVzdG9uZSA9PSBtc3RfZWRnZXNfZmluYWxbaSwxXV0KICBzMiA8LSBtaWxlc3RvbmVfY2VudHJvaWRzJHN0YXRlW21pbGVzdG9uZV9jZW50cm9pZHMkbWlsZXN0b25lID09IG1zdF9lZGdlc19maW5hbFtpLDJdXQogIGNhdChzcHJpbnRmKCIgICVzICglcykg4oaSICVzICglcylcbiIsIG1zdF9lZGdlc19maW5hbFtpLDFdLCBzMSwgbXN0X2VkZ2VzX2ZpbmFsW2ksMl0sIHMyKSkKfQpgYGAKCiMjIFBzZXVkb3RpbWUgUHJvamVjdGlvbgoKYGBge3IgbXN0LXBzZXVkb3RpbWV9CnByb2plY3Rfb250b19tc3QgPC0gZnVuY3Rpb24oY2VsbF9jb29yZHMsIGNlbnRyb2lkX21hdCwgbXN0X2dyYXBoLCBncmFwaF9kaXN0cykgewogIGVkZ2VzICAgICAgPC0gYXNfZWRnZWxpc3QobXN0X2dyYXBoKQogIG5fY2VsbHMgICAgPC0gbnJvdyhjZWxsX2Nvb3JkcykKICBwc2V1ZG90aW1lIDwtIG51bWVyaWMobl9jZWxscykKICBuZWFyZXN0X21zIDwtIGNoYXJhY3RlcihuX2NlbGxzKQoKICBmb3IgKGkgaW4gc2VxX2xlbihuX2NlbGxzKSkgewogICAgY3ggPC0gY2VsbF9jb29yZHNbaSwgMV07IGN5IDwtIGNlbGxfY29vcmRzW2ksIDJdCiAgICBiZXN0X2Rpc3QgPC0gSW5mOyBiZXN0X3B0IDwtIDA7IGJlc3RfbXMgPC0gTkFfY2hhcmFjdGVyXwoKICAgIGZvciAoZSBpbiBzZXFfbGVuKG5yb3coZWRnZXMpKSkgewogICAgICBtMSA8LSBlZGdlc1tlLDFdOyBtMiA8LSBlZGdlc1tlLDJdCiAgICAgIHAxIDwtIGNlbnRyb2lkX21hdFttMSxdOyBwMiA8LSBjZW50cm9pZF9tYXRbbTIsXQogICAgICBkeCA8LSBwMlsxXS1wMVsxXTsgZHkgPC0gcDJbMl0tcDFbMl0KICAgICAgbGVuMiA8LSBkeF4yICsgZHleMgogICAgICBpZiAobGVuMiA8IDFlLTEwKSBuZXh0CiAgICAgIHQgICAgPC0gbWF4KDAsIG1pbigxLCAoKGN4LXAxWzFdKSpkeCArIChjeS1wMVsyXSkqZHkpIC8gbGVuMikpCiAgICAgIHByb2ogPC0gYyhwMVsxXSt0KmR4LCBwMVsyXSt0KmR5KQogICAgICBkICAgIDwtIHNxcnQoKGN4LXByb2pbMV0pXjIgKyAoY3ktcHJvalsyXSleMikKICAgICAgaWYgKGQgPCBiZXN0X2Rpc3QpIHsKICAgICAgICBiZXN0X2Rpc3QgPC0gZAogICAgICAgIHB0X20xICAgICA8LSBncmFwaF9kaXN0c1ttMV0KICAgICAgICBwdF9tMiAgICAgPC0gZ3JhcGhfZGlzdHNbbTJdCiAgICAgICAgYmVzdF9wdCAgIDwtIHB0X20xICsgdCAqIChwdF9tMiAtIHB0X20xKQogICAgICAgIGJlc3RfbXMgICA8LSBpZiAodCA8IDAuNSkgbTEgZWxzZSBtMgogICAgICB9CiAgICB9CiAgICBwc2V1ZG90aW1lW2ldIDwtIGJlc3RfcHQKICAgIG5lYXJlc3RfbXNbaV0gPC0gYmVzdF9tcwogIH0KICBsaXN0KHBzZXVkb3RpbWUgPSBwc2V1ZG90aW1lLCBuZWFyZXN0X21zID0gbmVhcmVzdF9tcykKfQoKY2VsbF9jb29yZHMgPC0gYXMubWF0cml4KHVtYXBfZGZbY29sbmFtZXMoY2Q0X3JlZiksIGMoIlVNQVBfMSIsIlVNQVBfMiIpXSkKZ19kaXN0c192ZWMgPC0gc2V0TmFtZXMoYXMubnVtZXJpYyhncmFwaF9kaXN0cyksIGNvbG5hbWVzKGdyYXBoX2Rpc3RzKSkKCmNhdCgiUHJvamVjdGluZyByZWZlcmVuY2UgY2VsbHMgb250byBNU1QuLi5cbiIpCm1zdF9wcm9qIDwtIHByb2plY3Rfb250b19tc3QoY2VsbF9jb29yZHMsIGNlbnRyb2lkX21hdCwgbXN0X2dyYXBoLCBnX2Rpc3RzX3ZlYykKCm1zdF9wdF9yYXcgICA8LSBtc3RfcHJvaiRwc2V1ZG90aW1lCm1zdF9wdF9yYW5nZSA8LSByYW5nZShtc3RfcHRfcmF3LCBuYS5ybSA9IFRSVUUpCgptZXRhIDwtIGNkNF9yZWZAbWV0YS5kYXRhCm1ldGEkbXN0X3BzZXVkb3RpbWUgICAgICA8LSBtc3RfcHRfcmF3Cm1ldGEkbXN0X3BzZXVkb3RpbWVfbm9ybSA8LSAxMDAgKiAobXN0X3B0X3JhdyAtIG1zdF9wdF9yYW5nZVsxXSkgLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtc3RfcHRfcmFuZ2VbMl0gLSBtc3RfcHRfcmFuZ2VbMV0pCm1ldGEkbmVhcmVzdF9taWxlc3RvbmUgICA8LSBtc3RfcHJvaiRuZWFyZXN0X21zCmNkNF9yZWZAbWV0YS5kYXRhICAgICAgICA8LSBtZXRhCgpjYXQoc3ByaW50ZigiTVNUIHBzZXVkb3RpbWUgcmFuZ2U6ICUuM2Yg4oCTICUuM2ZcbiIsCiAgICAgICAgICAgIG1zdF9wdF9yYW5nZVsxXSwgbXN0X3B0X3JhbmdlWzJdKSkKCiMgVmFsaWRhdGU6IG1lZGlhbiBwc2V1ZG90aW1lIHNob3VsZCBpbmNyZWFzZSBhbG9uZyB0cmFqZWN0b3J5CmNhdCgiXG5NZWRpYW4gcHNldWRvdGltZSBwZXIgc3RhdGUgKHNob3VsZCBpbmNyZWFzZSBOYWl2ZeKGklRDTeKGklRFTeKGklRlbXJhKTpcbiIpCnB0X2NoZWNrIDwtIGNkNF9yZWZAbWV0YS5kYXRhICU+JQogIGdyb3VwX2J5KCEhc3ltKFNUQVRFX0NPTCkpICU+JQogIHN1bW1hcmlzZShtZWRpYW5fcHQgPSByb3VuZChtZWRpYW4obXN0X3BzZXVkb3RpbWVfbm9ybSwgbmEucm09VFJVRSksIDEpLAogICAgICAgICAgICAuZ3JvdXBzPSJkcm9wIikgJT4lCiAgYXJyYW5nZShtZWRpYW5fcHQpCnByaW50KHB0X2NoZWNrKQpgYGAKCiMjIFZpc3VhbGlzYXRpb24KCmBgYHtyIG1zdC1wbG90cywgZmlnLndpZHRoPTE0LCBmaWcuaGVpZ2h0PTEyfQptc19wbG90IDwtIG1pbGVzdG9uZV9jZW50cm9pZHMgJT4lIG11dGF0ZSh4ID0gb3JkZXJfcG9zLCB5ID0gMCkKCnN0YXRlX2JhbmRzIDwtIG1zX3Bsb3QgJT4lCiAgZ3JvdXBfYnkoc3RhdGUpICU+JQogIHN1bW1hcmlzZSh4bWluID0gbWluKHgpLS40LCB4bWF4ID0gbWF4KHgpKy40LCAuZ3JvdXBzPSJkcm9wIikgJT4lCiAgbXV0YXRlKHltaW49LS4zNSwgeW1heD0tLjE1LCBmaWxsPVNUQVRFX0NPTE9SU1tzdGF0ZV0pCgplZGdlX2xpbmVhciA8LSBkby5jYWxsKHJiaW5kLCBsYXBwbHkoc2VxX2xlbihucm93KG1zdF9lZGdlcykpLCBmdW5jdGlvbihpKSB7CiAgbTE8LW1zdF9lZGdlc1tpLDFdOyBtMjwtbXN0X2VkZ2VzW2ksMl0KICByMTwtbXNfcGxvdFttc19wbG90JG1pbGVzdG9uZT09bTEsXTsgcjI8LW1zX3Bsb3RbbXNfcGxvdCRtaWxlc3RvbmU9PW0yLF0KICBpZihucm93KHIxKT09MHx8bnJvdyhyMik9PTApIHJldHVybihOVUxMKQogIGRhdGEuZnJhbWUoeDE9cjEkeCx5MT1yMSR5LHgyPXIyJHgseTI9cjIkeSkKfSkpCgojIOKUgOKUgCBQYW5lbCBhOiBMaW5lYXIgbWlsZXN0b25lIHRyYWplY3Rvcnkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACnBfbXN0X2xpbmVhciA8LSBnZ3Bsb3QoKSArCiAgZ2VvbV9yZWN0KGRhdGE9c3RhdGVfYmFuZHMsCiAgICAgICAgICAgIGFlcyh4bWluPXhtaW4seG1heD14bWF4LHltaW49eW1pbix5bWF4PXltYXgsZmlsbD1zdGF0ZSksIGFscGhhPS44NSkgKwogIGdlb21fdGV4dChkYXRhPXN0YXRlX2JhbmRzLAogICAgICAgICAgICBhZXMoeD0oeG1pbit4bWF4KS8yLCB5PSh5bWluK3ltYXgpLzIsIGxhYmVsPXN0YXRlKSwKICAgICAgICAgICAgY29sb3VyPSJ3aGl0ZSIsIHNpemU9My41LCBmb250ZmFjZT0iYm9sZCIpICsKICBnZW9tX3NlZ21lbnQoZGF0YT1lZGdlX2xpbmVhciwKICAgICAgICAgICAgICAgYWVzKHg9eDEseT15MSx4ZW5kPXgyLHllbmQ9eTIpLAogICAgICAgICAgICAgICBjb2xvdXI9ImdyZXkzNSIsIGxpbmV3aWR0aD0xLjMsIGxpbmVlbmQ9InJvdW5kIikgKwogIGdlb21fdGV4dChkYXRhPW1zX3Bsb3QsCiAgICAgICAgICAgIGFlcyh4PXgsIHk9eSswLjE4LCBsYWJlbD1wYXN0ZTAoIm49Iiwgc2NhbGVzOjpjb21tYShuX2NlbGxzKSkpLAogICAgICAgICAgICBzaXplPTMsIGNvbG91cj0iZ3JleTEwIiwgZm9udGZhY2U9ImJvbGQiLCB2anVzdD0wKSArCiAgZ2VvbV9wb2ludChkYXRhPW1zX3Bsb3QsIGFlcyh4PXgsIHk9eSwgZmlsbD1zdGF0ZSksCiAgICAgICAgICAgICBzaGFwZT0yMSwgY29sb3VyPSJ3aGl0ZSIsIHN0cm9rZT0yLCBzaXplPTEyKSArCiAgZ2VvbV90ZXh0KGRhdGE9bXNfcGxvdCwgYWVzKHg9eCwgeT15LCBsYWJlbD1taWxlc3RvbmUpLAogICAgICAgICAgICBzaXplPTMuMiwgY29sb3VyPSJ3aGl0ZSIsIGZvbnRmYWNlPSJib2xkIikgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1TVEFURV9DT0xPUlMsIG5hbWU9IlN0YXRlIikgKwogIGNvb3JkX2NhcnRlc2lhbih5bGltPWMoLS41LCAwLjQ1KSkgKwogIHRoZW1lX3ZvaWQoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IiwKICAgICAgICBsZWdlbmQudGl0bGUgICAgPSBlbGVtZW50X3RleHQoc2l6ZT0xMCwgZmFjZT0iYm9sZCIpLAogICAgICAgIGxlZ2VuZC50ZXh0ICAgICA9IGVsZW1lbnRfdGV4dChzaXplPTkpLAogICAgICAgIHBsb3QudGl0bGUgICAgICA9IGVsZW1lbnRfdGV4dChzaXplPTEzLCBmYWNlPSJib2xkIiwgaGp1c3Q9LjUpLAogICAgICAgIHBsb3QubWFyZ2luICAgICA9IG1hcmdpbigxNSwgMTAsIDEwLCAxMCkpICsKICBnZ3RpdGxlKCJDdXN0b20gTVNUIOKAlCBNaWxlc3RvbmVzIFRyYWplY3RvcnkiKQoKIyDilIDilIAgUGFuZWwgYjogTWlsZXN0b25lcyBvbiBVTUFQIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApwX21zdF91bWFwX21zIDwtIGdncGxvdCgpICsKICBnZW9tX3BvaW50KGRhdGE9dW1hcF9kZltzYW1wbGUobnJvdyh1bWFwX2RmKSksXSwKICAgICAgICAgICAgIGFlcyh4PVVNQVBfMSx5PVVNQVBfMixjb2xvdXI9c3RhdGUpLCBzaXplPS4zNSwgYWxwaGE9LjUpICsKICBnZW9tX3NlZ21lbnQoZGF0YT1tc3RfZWRnZV9kZiwKICAgICAgICAgICAgICAgYWVzKHg9eDEseT15MSx4ZW5kPXgyLHllbmQ9eTIpLAogICAgICAgICAgICAgICBjb2xvdXI9ImJsYWNrIiwgbGluZXdpZHRoPTEsIGFscGhhPS44NSwgbGluZWVuZD0icm91bmQiKSArCiAgZ2VvbV9wb2ludChkYXRhPW1pbGVzdG9uZV9jZW50cm9pZHMsCiAgICAgICAgICAgICBhZXMoeD1VTUFQXzEseT1VTUFQXzIsZmlsbD1zdGF0ZSksCiAgICAgICAgICAgICBzaGFwZT0yMSwgc2l6ZT04LCBjb2xvdXI9IndoaXRlIiwgc3Ryb2tlPTIpICsKICBnZW9tX3RleHRfcmVwZWwoZGF0YT1taWxlc3RvbmVfY2VudHJvaWRzLAogICAgICAgICAgICAgICAgICBhZXMoeD1VTUFQXzEseT1VTUFQXzIsbGFiZWw9bWlsZXN0b25lKSwKICAgICAgICAgICAgICAgICAgc2l6ZT0zLCBjb2xvdXI9IndoaXRlIiwgZm9udGZhY2U9ImJvbGQiLAogICAgICAgICAgICAgICAgICBiZy5jb2xvcj0iZ3JleTIwIiwgYmcucj0uMTUsIG1heC5vdmVybGFwcz0yNSwKICAgICAgICAgICAgICAgICAgcG9pbnQucGFkZGluZz0wLjMsIGJveC5wYWRkaW5nPTAuNCkgKwogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzPVNUQVRFX0NPTE9SUywgZ3VpZGU9Im5vbmUiKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPVNUQVRFX0NPTE9SUywgbmFtZT0iU3RhdGUiKSArCiAgdGhlbWVfY2xhc3NpYygpICsKICBsYWJzKHg9IlVNQVAtMSIseT0iVU1BUC0yIix0aXRsZT0iQ3VzdG9tIE1TVCDigJQgTWlsZXN0b25lcyBvbiBVTUFQIikgKwogIHRoZW1lKHBsb3QudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9MTMsZmFjZT0iYm9sZCIpKQoKIyDilIDilIAgUGFuZWwgYzogUHNldWRvdGltZSBvbiBVTUFQIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApwdF91bWFwX2RmICAgICAgICAgICAgPC0gdW1hcF9kZgpwdF91bWFwX2RmJHBzZXVkb3RpbWUgPC0gY2Q0X3JlZkBtZXRhLmRhdGEkbXN0X3BzZXVkb3RpbWVfbm9ybQoKcF9tc3RfcHNldWRvIDwtIGdncGxvdChwdF91bWFwX2RmW3NhbXBsZShucm93KHB0X3VtYXBfZGYpKSxdLAogICAgICAgICAgICAgICAgICAgICAgICBhZXMoeD1VTUFQXzEseT1VTUFQXzIsY29sb3VyPXBzZXVkb3RpbWUpKSArCiAgZ2VvbV9wb2ludChzaXplPS4zNSwgYWxwaGE9LjcpICsKICBzY2FsZV9jb2xvdXJfZ3JhZGllbnRuKAogICAgY29sb3VycyA9IGMoIiMwRDA4ODciLCIjNkEwMEE4IiwiI0IxMkE5MCIsIiNFMTY0NjIiLCIjRkNBNjM2IiwiI0YwRjkyMSIpLAogICAgbmFtZSAgICA9ICJQc2V1ZG90aW1lXG4oMOKAkzEwMCkiLCBsaW1pdHM9YygwLDEwMCkpICsKICBnZW9tX3NlZ21lbnQoZGF0YT1tc3RfZWRnZV9kZiwKICAgICAgICAgICAgICAgYWVzKHg9eDEseT15MSx4ZW5kPXgyLHllbmQ9eTIpLAogICAgICAgICAgICAgICBjb2xvdXI9ImJsYWNrIiwgbGluZXdpZHRoPS43LCBhbHBoYT0uNiwgaW5oZXJpdC5hZXM9RkFMU0UpICsKICB0aGVtZV9jbGFzc2ljKCkgKwogIGxhYnMoeD0iVU1BUC0xIix5PSJVTUFQLTIiLHRpdGxlPSJDdXN0b20gTVNUIOKAlCBQc2V1ZG90aW1lIG9uIFVNQVAiKSArCiAgdGhlbWUocGxvdC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT0xMyxmYWNlPSJib2xkIikpCgpwcmludCgocF9tc3RfbGluZWFyKSAvIChwX21zdF91bWFwX21zIHwgcF9tc3RfcHNldWRvKSkKIyBQYW5lbCBBOiBMaW5lYXIgdHJhamVjdG9yeQpwcmludChwX21zdF9saW5lYXIpCgojIFBhbmVsIEI6IE1pbGVzdG9uZXMgb24gVU1BUCAgCnByaW50KHBfbXN0X3VtYXBfbXMpCgojIFBhbmVsIEM6IFBzZXVkb3RpbWUgb24gVU1BUApwcmludChwX21zdF9wc2V1ZG8pCgpgYGAKCgojIyBWaXN1YWxpc2F0aW9uCgpgYGB7ciAsIGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTR9CgoKIyBQYW5lbCBCOiBNaWxlc3RvbmVzIG9uIFVNQVAgIApwcmludChwX21zdF91bWFwX21zKQoKIyBQYW5lbCBDOiBQc2V1ZG90aW1lIG9uIFVNQVAKcHJpbnQocF9tc3RfcHNldWRvKQoKYGBgCgoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKIyBNZXRob2QgMiDigJQgTW9ub2NsZTMgVHJhamVjdG9yeSB7LnRhYnNldCAubWV0aG9kLW1vbm9jbGV9Cgo6Ojogey5zZWN0aW9uLWJveCAubWV0aG9kLW1vbm9jbGV9CioqTW9ub2NsZTMqKiBmaXRzIGEgcHJpbmNpcGFsIGdyYXBoIGRpcmVjdGx5IHRvIHRoZSBkYXRhIHRvcG9sb2d5IHVzaW5nIHJldmVyc2VkIGdyYXBoIGVtYmVkZGluZywgdGhlbiBhc3NpZ25zIHBzZXVkb3RpbWUgYnkgZ2VvZGVzaWMgZGlzdGFuY2UgZnJvbSB0aGUgcm9vdC4KOjo6CgojIyBDb252ZXJ0ICYgUHJlcHJvY2VzcwoKYGBge3IgbW9ub2NsZTMtY29udmVydH0KRGVmYXVsdEFzc2F5KGNkNF9yZWYpIDwtICJSTkEiCgpjZDRfcmVmX2pvaW5lZCA8LSBKb2luTGF5ZXJzKGNkNF9yZWYpCmNkcyA8LSBhcy5jZWxsX2RhdGFfc2V0KGNkNF9yZWZfam9pbmVkKQoKY29sRGF0YShjZHMpW1tTVEFURV9DT0xdXSA8LSBjZDRfcmVmQG1ldGEuZGF0YVtbU1RBVEVfQ09MXV0KY29sRGF0YShjZHMpJG1pbGVzdG9uZSAgICA8LSBjZDRfcmVmQG1ldGEuZGF0YSRtaWxlc3RvbmUKCnJlZHVjZWREaW1zKGNkcylbWyJQQ0EiXV0gIDwtIEVtYmVkZGluZ3MoY2Q0X3JlZiwgInBjYSIpCnJlZHVjZWREaW1zKGNkcylbWyJVTUFQIl1dIDwtIEVtYmVkZGluZ3MoY2Q0X3JlZiwgVU1BUF9OQU1FKQoKY2RzIDwtIGVzdGltYXRlX3NpemVfZmFjdG9ycyhjZHMpCmNkc0BjbHVzdGVycyRVTUFQJGNsdXN0ZXJzIDwtIGNkNF9yZWZAbWV0YS5kYXRhW1tTVEFURV9DT0xdXQoKY2F0KCJjZWxsX2RhdGFfc2V0IGNyZWF0ZWQ6XG4iKQpjYXQoc3ByaW50ZigiICAlZCBjZWxscyB8ICVkIGdlbmVzXG4iLCBuY29sKGNkcyksIG5yb3coY2RzKSkpCmBgYAoKIyMgTGVhcm4gR3JhcGggJiBTZXQgUm9vdAoKYGBge3IgbW9ub2NsZTMtZ3JhcGh9CnNldC5zZWVkKDQyKQpEZWZhdWx0QXNzYXkoY2Q0X3JlZikgPC0gIlJOQSIKY2Q0X3JlZl9qb2luZWQgPC0gSm9pbkxheWVycyhjZDRfcmVmKQpjZHMgPC0gYXMuY2VsbF9kYXRhX3NldChjZDRfcmVmX2pvaW5lZCkKCiMg4pSA4pSAIFRyYW5zZmVyIG1ldGFkYXRhIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApjb2xEYXRhKGNkcylbW1NUQVRFX0NPTF1dIDwtIGNkNF9yZWZAbWV0YS5kYXRhW1tTVEFURV9DT0xdXQpjb2xEYXRhKGNkcykkbWlsZXN0b25lICAgIDwtIGNkNF9yZWZAbWV0YS5kYXRhJG1pbGVzdG9uZQoKIyDilIDilIAgVHJhbnNmZXIgcmVkdWN0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKcmVkdWNlZERpbXMoY2RzKVtbIlBDQSJdXSAgPC0gRW1iZWRkaW5ncyhjZDRfcmVmLCAicGNhIikKcmVkdWNlZERpbXMoY2RzKVtbIlVNQVAiXV0gPC0gRW1iZWRkaW5ncyhjZDRfcmVmLCBVTUFQX05BTUUpCgpjZHMgPC0gZXN0aW1hdGVfc2l6ZV9mYWN0b3JzKGNkcykKCiMg4pSA4pSAIEZJWDogU2V0IEJPVEggY2x1c3RlcnMgQU5EIHBhcnRpdGlvbnMgd2l0aCBOQU1FRCBmYWN0b3JzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAojIGxlYXJuX2dyYXBoKCkgY2hlY2tzOiBuYW1lcyhjZHNAY2x1c3RlcnMkVU1BUCRwYXJ0aXRpb25zKSAhPSBOVUxMCmNlbGxfaWRzIDwtIGNvbG5hbWVzKGNkcykKCiMgQ2x1c3RlcnM6IG5hbWVkIGZhY3RvciBvZiBzdGF0ZSBsYWJlbHMKY2x1c3Rlcl92ZWMgPC0gc2V0TmFtZXMoCiAgZmFjdG9yKGNkNF9yZWZAbWV0YS5kYXRhW1tTVEFURV9DT0xdXSksCiAgY2VsbF9pZHMKKQoKIyBQYXJ0aXRpb25zOiBhbGwgY2VsbHMgaW4gb25lIHBhcnRpdGlvbiAocmVxdWlyZWQgc2xvdCwgdXNlX3BhcnRpdGlvbj1GQUxTRQojIGlnbm9yZXMgYm91bmRhcmllcyBidXQgdGhlIHNsb3QgbXVzdCBzdGlsbCBiZSBhIG5hbWVkIGZhY3RvcikKcGFydGl0aW9uX3ZlYyA8LSBzZXROYW1lcygKICBmYWN0b3IocmVwKDFMLCBsZW5ndGgoY2VsbF9pZHMpKSksCiAgY2VsbF9pZHMKKQoKY2RzQGNsdXN0ZXJzJFVNQVAkY2x1c3RlcnMgICA8LSBjbHVzdGVyX3ZlYwpjZHNAY2x1c3RlcnMkVU1BUCRwYXJ0aXRpb25zICA8LSBwYXJ0aXRpb25fdmVjCgojIFZlcmlmeSBuYW1lcyBhcmUgcHJlc2VudCBiZWZvcmUgY2FsbGluZyBsZWFybl9ncmFwaApzdG9waWZub3QoCiAgImNsdXN0ZXJzIG11c3QgYmUgbmFtZWQiICAgPSAhaXMubnVsbChuYW1lcyhjZHNAY2x1c3RlcnMkVU1BUCRjbHVzdGVycykpLAogICJwYXJ0aXRpb25zIG11c3QgYmUgbmFtZWQiID0gIWlzLm51bGwobmFtZXMoY2RzQGNsdXN0ZXJzJFVNQVAkcGFydGl0aW9ucykpLAogICJjbHVzdGVyIGxlbmd0aCBtYXRjaGVzIiAgID0gbGVuZ3RoKGNkc0BjbHVzdGVycyRVTUFQJGNsdXN0ZXJzKSA9PSBuY29sKGNkcyksCiAgInBhcnRpdGlvbiBsZW5ndGggbWF0Y2hlcyIgPSBsZW5ndGgoY2RzQGNsdXN0ZXJzJFVNQVAkcGFydGl0aW9ucykgPT0gbmNvbChjZHMpCikKY2F0KHNwcmludGYoIuKchSBjbHVzdGVycyBhbmQgcGFydGl0aW9ucyBzZXQ6ICVkIGNlbGxzXG4iLCBuY29sKGNkcykpKQoKY2F0KCJjZWxsX2RhdGFfc2V0IGNyZWF0ZWQ6XG4iKQpjYXQoc3ByaW50ZigiICAlZCBjZWxscyB8ICVkIGdlbmVzXG4iLCBuY29sKGNkcyksIG5yb3coY2RzKSkpCgojIOKUgOKUgCBsZWFybl9ncmFwaCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKc2V0LnNlZWQoNDIpCmNkcyA8LSBsZWFybl9ncmFwaCgKICBjZHMsCiAgdXNlX3BhcnRpdGlvbiAgICAgICA9IEZBTFNFLAogIGNsb3NlX2xvb3AgICAgICAgICAgPSBGQUxTRSwKICBsZWFybl9ncmFwaF9jb250cm9sID0gbGlzdChtaW5pbWFsX2JyYW5jaF9sZW4gPSA4LCBubi5rID0gMjApLAogIHZlcmJvc2UgICAgICAgICAgICAgPSBGQUxTRQopCmNhdCgi4pyFIGxlYXJuX2dyYXBoIGNvbXBsZXRlXG4iKQoKYGBgCgojIyBPcmRlciBDZWxscyAmIEFzc2lnbiBQc2V1ZG90aW1lCmBgYHtyIG1vbm9jbGUzLW9yZGVyLWNlbGxzfQojIFNldCByb290IGF0IENENCBOYWl2ZSBjZW50cm9pZCBhbmQgYXNzaWduIHBzZXVkb3RpbWUKdG5fY2VsbHMgICAgPC0gY29sbmFtZXMoY2RzKVtjb2xEYXRhKGNkcylbW1NUQVRFX0NPTF1dID09ICJDRDQgTmFpdmUiXQp0bl91bWFwICAgICA8LSByZWR1Y2VkRGltcyhjZHMpW1siVU1BUCJdXVt0bl9jZWxscywgLCBkcm9wID0gRkFMU0VdCnRuX2NlbnRyb2lkIDwtIGNvbE1lYW5zKHRuX3VtYXApCgpwcl9ub2RlcyAgICAgPC0gdChjZHNAcHJpbmNpcGFsX2dyYXBoX2F1eFtbIlVNQVAiXV0kZHBfbXN0KQpub2RlX2Rpc3RzICAgPC0gcm93U3VtcygocHJfbm9kZXMgLSBtYXRyaXgodG5fY2VudHJvaWQsIG5yb3c9bnJvdyhwcl9ub2RlcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbD0yLCBieXJvdz1UUlVFKSleMikKcm9vdF9wcl9ub2RlIDwtIG5hbWVzKHdoaWNoLm1pbihub2RlX2Rpc3RzKSkKY2F0KHNwcmludGYoIlJvb3QgcHJpbmNpcGFsIGdyYXBoIG5vZGU6ICVzXG4iLCByb290X3ByX25vZGUpKQoKY2RzIDwtIG9yZGVyX2NlbGxzKGNkcywgcm9vdF9wcl9ub2RlcyA9IHJvb3RfcHJfbm9kZSkKCnB0X3JhdyA8LSBwc2V1ZG90aW1lKGNkcykKY2F0KHNwcmludGYoIlBzZXVkb3RpbWU6ICVkIG5vbi1OQSB8ICVkIE5BXG4iLAogICAgICAgICAgICBzdW0oIWlzLm5hKHB0X3JhdykpLCBzdW0oaXMubmEocHRfcmF3KSkpKQpjYXQoc3ByaW50ZigiUmF3IHJhbmdlOiAlLjNmIOKAkyAlLjNmXG4iLAogICAgICAgICAgICBtaW4ocHRfcmF3LCBuYS5ybT1UUlVFKSwgbWF4KHB0X3JhdywgbmEucm09VFJVRSkpKQoKc3RvcGlmbm90KCJvcmRlcl9jZWxscyBwcm9kdWNlZCBhbGwgTkEg4oCUIGNoZWNrIHJvb3Qgbm9kZSIgPSBzdW0oIWlzLm5hKHB0X3JhdykpID4gMCkKCiMgTm9ybWFsaXNlIGFuZCB3cml0ZSB0byBjZDRfcmVmIG1ldGFkYXRhCnB0X21pbiA8LSBtaW4ocHRfcmF3LCBuYS5ybT1UUlVFKQpwdF9tYXggPC0gbWF4KHB0X3JhdywgbmEucm09VFJVRSkKCm1ldGEgPC0gY2Q0X3JlZkBtZXRhLmRhdGEKbWV0YSRtb25vY2xlM19wc2V1ZG90aW1lICAgICAgPC0gYXMubnVtZXJpYyhwdF9yYXcpCm1ldGEkbW9ub2NsZTNfcHNldWRvdGltZV9ub3JtIDwtIDEwMCAqIChhcy5udW1lcmljKHB0X3JhdykgLSBwdF9taW4pIC8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdF9tYXggLSBwdF9taW4pCmNkNF9yZWZAbWV0YS5kYXRhIDwtIG1ldGEKCmNhdChzcHJpbnRmKCJOb24tTkEgaW4gbWV0YWRhdGE6ICVkIC8gJWRcbiIsCiAgICAgICAgICAgIHN1bSghaXMubmEoY2Q0X3JlZkBtZXRhLmRhdGEkbW9ub2NsZTNfcHNldWRvdGltZV9ub3JtKSksCiAgICAgICAgICAgIG5jb2woY2Q0X3JlZikpKQoKY2F0KCJcbk1lZGlhbiBwc2V1ZG90aW1lIHBlciBzdGF0ZSAoTmFpdmUgPCBUQ00gPCBURU0gPCBUZW1yYSBleHBlY3RlZCk6XG4iKQpjZDRfcmVmQG1ldGEuZGF0YSAlPiUKICBncm91cF9ieSghIXN5bShTVEFURV9DT0wpKSAlPiUKICBzdW1tYXJpc2UobWVkaWFuX3B0ID0gcm91bmQobWVkaWFuKG1vbm9jbGUzX3BzZXVkb3RpbWVfbm9ybSwgbmEucm09VFJVRSksIDEpLAogICAgICAgICAgICAuZ3JvdXBzICAgPSAiZHJvcCIpICU+JQogIGFycmFuZ2UobWVkaWFuX3B0KSAlPiUKICBwcmludCgpCmBgYAoKCgojIyBWaXN1YWxpc2F0aW9uCgpgYGB7ciBtb25vY2xlMy1wbG90cywgZmlnLndpZHRoPTEyLCBmaWcuaGVpZ2h0PTh9Cgpwcl9ncmFwaF9vYmogPC0gcHJpbmNpcGFsX2dyYXBoKGNkcylbWyJVTUFQIl1dCnByX2xheW91dCAgICA8LSB0KGNkc0BwcmluY2lwYWxfZ3JhcGhfYXV4W1siVU1BUCJdXSRkcF9tc3QpCgptM19lZGdlX2xpc3QgPC0gaWdyYXBoOjphc19lZGdlbGlzdChwcl9ncmFwaF9vYmopCm0zX2VkZ2VfZGYgICA8LSBkby5jYWxsKHJiaW5kLCBsYXBwbHkoc2VxX2xlbihucm93KG0zX2VkZ2VfbGlzdCkpLCBmdW5jdGlvbihpKSB7CiAgbjEgPC0gbTNfZWRnZV9saXN0W2ksMV07IG4yIDwtIG0zX2VkZ2VfbGlzdFtpLDJdCiAgZGF0YS5mcmFtZSh4MT1wcl9sYXlvdXRbbjEsMV0sIHkxPXByX2xheW91dFtuMSwyXSwKICAgICAgICAgICAgIHgyPXByX2xheW91dFtuMiwxXSwgeTI9cHJfbGF5b3V0W24yLDJdKQp9KSkKCnVtYXBfbTMgICAgICAgICAgICA8LSB1bWFwX2RmCnVtYXBfbTMkcHNldWRvdGltZSA8LSBjZDRfcmVmQG1ldGEuZGF0YSRtb25vY2xlM19wc2V1ZG90aW1lX25vcm0KCnBfbTNfc3RhdGVzIDwtIGdncGxvdCgpICsKICBnZW9tX3BvaW50KGRhdGE9dW1hcF9tM1tzYW1wbGUobnJvdyh1bWFwX20zKSksXSwKICAgICAgICAgICAgIGFlcyh4PVVNQVBfMSwgeT1VTUFQXzIsIGNvbG91cj1zdGF0ZSksIHNpemU9LjM1LCBhbHBoYT0uNikgKwogIGdlb21fc2VnbWVudChkYXRhPW0zX2VkZ2VfZGYsCiAgICAgICAgICAgICAgIGFlcyh4PXgxLHk9eTEseGVuZD14Mix5ZW5kPXkyKSwKICAgICAgICAgICAgICAgY29sb3VyPSJibGFjayIsIGxpbmV3aWR0aD0uNiwgYWxwaGE9LjcsIGxpbmVlbmQ9InJvdW5kIikgKwogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzPVNUQVRFX0NPTE9SUywgbmFtZT0iU3RhdGUiKSArCiAgdGhlbWVfY2xhc3NpYygpICsKICBsYWJzKHg9IlVNQVAtMSIseT0iVU1BUC0yIiwgdGl0bGU9Ik1vbm9jbGUzIOKAlCBQcmluY2lwYWwgR3JhcGggJiBTdGF0ZXMiKSArCiAgdGhlbWUocGxvdC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT0xMyxmYWNlPSJib2xkIikpCgpwX20zX3BzZXVkbyA8LSBnZ3Bsb3QodW1hcF9tM1tzYW1wbGUobnJvdyh1bWFwX20zKSksXSwKICAgICAgICAgICAgICAgICAgICAgICBhZXMoeD1VTUFQXzEsIHk9VU1BUF8yLCBjb2xvdXI9cHNldWRvdGltZSkpICsKICBnZW9tX3BvaW50KHNpemU9LjM1LCBhbHBoYT0uNykgKwogIHNjYWxlX2NvbG91cl9ncmFkaWVudG4oCiAgICBjb2xvdXJzPWMoIiMwRDA4ODciLCIjNkEwMEE4IiwiI0IxMkE5MCIsIiNFMTY0NjIiLCIjRkNBNjM2IiwiI0YwRjkyMSIpLAogICAgbmFtZT0iUHNldWRvdGltZVxuKDDigJMxMDApIiwgbGltaXRzPWMoMCwxMDApKSArCiAgZ2VvbV9zZWdtZW50KGRhdGE9bTNfZWRnZV9kZiwKICAgICAgICAgICAgICAgYWVzKHg9eDEseT15MSx4ZW5kPXgyLHllbmQ9eTIpLAogICAgICAgICAgICAgICBjb2xvdXI9ImJsYWNrIiwgbGluZXdpZHRoPS42LCBhbHBoYT0uNiwgaW5oZXJpdC5hZXM9RkFMU0UpICsKICB0aGVtZV9jbGFzc2ljKCkgKwogIGxhYnMoeD0iVU1BUC0xIix5PSJVTUFQLTIiLCB0aXRsZT0iTW9ub2NsZTMg4oCUIFBzZXVkb3RpbWUgb24gVU1BUCIpICsKICB0aGVtZShwbG90LnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPTEzLGZhY2U9ImJvbGQiKSkKCm0zX3B0X2RmIDwtIGRhdGEuZnJhbWUoCiAgc3RhdGUgICAgICA9IGZhY3RvcihjZDRfcmVmQG1ldGEuZGF0YVtbU1RBVEVfQ09MXV0sIGxldmVscz1TVEFURV9PUkRFUiksCiAgcHNldWRvdGltZSA9IGNkNF9yZWZAbWV0YS5kYXRhJG1vbm9jbGUzX3BzZXVkb3RpbWVfbm9ybQopICU+JSBmaWx0ZXIoIWlzLm5hKHBzZXVkb3RpbWUpLCBzdGF0ZSAlaW4lIFNUQVRFX09SREVSKQoKcF9tM192aW9saW4gPC0gZ2dwbG90KG0zX3B0X2RmLCBhZXMoeD1zdGF0ZSwgeT1wc2V1ZG90aW1lLCBmaWxsPXN0YXRlKSkgKwogIGdlb21fdmlvbGluKHNjYWxlPSJ3aWR0aCIsIHRyaW09RkFMU0UsIGFscGhhPS44NSkgKwogIGdlb21fYm94cGxvdCh3aWR0aD0uMDgsIGZpbGw9IndoaXRlIiwgb3V0bGllci5zaXplPS4zLCBvdXRsaWVyLmFscGhhPS4zKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPVNUQVRFX0NPTE9SUywgZ3VpZGU9Im5vbmUiKSArCiAgdGhlbWVfY2xhc3NpYygpICsKICBsYWJzKHg9TlVMTCwgeT0iUHNldWRvdGltZSAoMOKAkzEwMCkiLCB0aXRsZT0iTW9ub2NsZTMg4oCUIFBzZXVkb3RpbWUgcGVyIFN0YXRlIikgKwogIHRoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChzaXplPTExLCBmYWNlPSJib2xkIiksCiAgICAgICAgcGxvdC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT0xMyxmYWNlPSJib2xkIikpCgpwcmludCgocF9tM19zdGF0ZXMgfCBwX20zX3BzZXVkbykgLyAocF9tM192aW9saW4gfCBwbG90X3NwYWNlcigpKSkKYGBgCmBgYHtyfQpwX20zX3N0YXRlcwpwX20zX3BzZXVkbwpwX20zX3Zpb2xpbiAKYGBgCgoKIyMgVHJhamVjdG9yeS1WYXJpYWJsZSBHZW5lcwoKYGBge3IgbW9ub2NsZTMtZ3JhcGgtdGVzdH0KdmFyX2dlbmVzX3VzZSA8LSBoZWFkKFZhcmlhYmxlRmVhdHVyZXMoY2Q0X3JlZiksIDIwMDApCnZhcl9nZW5lc191c2UgPC0gaW50ZXJzZWN0KHZhcl9nZW5lc191c2UsIHJvd25hbWVzKGNkcykpCmNhdChzcHJpbnRmKCJWYXJpYWJsZSBnZW5lcyBmb3IgZ3JhcGhfdGVzdDogJWRcbiIsIGxlbmd0aCh2YXJfZ2VuZXNfdXNlKSkpCgpjYXQoIlJ1bm5pbmcgZ3JhcGhfdGVzdCAoTW9yYW4ncyBJKS4uLlxuIikKcHJfdGVzdF9yZXMgPC0gZ3JhcGhfdGVzdCgKICBjZHNbdmFyX2dlbmVzX3VzZSwgXSwKICBuZWlnaGJvcl9ncmFwaCA9ICJwcmluY2lwYWxfZ3JhcGgiLAogIGNvcmVzICAgICAgICAgID0gMgopCgojIEFkZCBnZW5lIG5hbWUgYXMgY29sdW1uIGFuZCBmaWx0ZXIgc2lnbmlmaWNhbnQgaGl0cwpzaWdfdHJhal9nZW5lcyA8LSBwcl90ZXN0X3JlcyAlPiUKICB0aWJibGU6OnJvd25hbWVzX3RvX2NvbHVtbigiZ2VuZSIpICU+JQogIGZpbHRlcihxX3ZhbHVlIDwgMC4wNSwgc3RhdHVzID09ICJPSyIpICU+JQogIGFycmFuZ2UoZGVzYyhtb3JhbnNfSSkpCgpjYXQoc3ByaW50ZigiJWQgdHJhamVjdG9yeS12YXJpYWJsZSBnZW5lcyAocSA8IDAuMDUpXG4iLCBucm93KHNpZ190cmFqX2dlbmVzKSkpCgojIERlZmluZSBnZW5lcyB0byBleGNsdWRlIGZyb20gZG90cGxvdCDigJQgcmlib3NvbWFsLCBtaXRvY2hvbmRyaWFsLCBob3VzZWtlZXBpbmcKIyBUaGVzZSBhcmUgdHJhamVjdG9yeS12YXJpYWJsZSBkdWUgdG8gdGVjaG5pY2FsIHJlYXNvbnMgbm90IGJpb2xvZ3kKZXhjbHVkZV9nZW5lcyA8LSBncmVwKAogICJeUlBbU0xdfF5NVC18Xk1BTEFUMXxeTkVBVDF8XlhJU1R8XkFDVEJ8XkdBUERIfF5CMk18XkVFRnxeRUlGIiwKICByb3duYW1lcyhjZDRfcmVmKSwgdmFsdWUgPSBUUlVFCikKY2F0KHNwcmludGYoIkdlbmVzIHRvIGV4Y2x1ZGUgKHRlY2huaWNhbCk6ICVkXG4iLCBsZW5ndGgoZXhjbHVkZV9nZW5lcykpKQoKa2FibGUoaGVhZChzaWdfdHJhal9nZW5lc1ssIGMoImdlbmUiLCJtb3JhbnNfSSIsInFfdmFsdWUiKV0sIDIwKSwKICAgICAgY2FwdGlvbiA9ICJUb3AgMjAgdHJhamVjdG9yeS12YXJpYWJsZSBnZW5lcyAoTW9ub2NsZTMgZ3JhcGhfdGVzdCkiLAogICAgICBkaWdpdHMgID0gNCkgJT4lCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucz1jKCJzdHJpcGVkIiwiY29uZGVuc2VkIiksIGZ1bGxfd2lkdGg9RkFMU0UpCmBgYAoKYGBge3IsIGZpZy53aWR0aD04LCBmaWcuaGVpZ2h0PTIwIH0KCiMg4pSA4pSAIEVuc3VyZSBtaWxlc3RvbmVfZmFjdG9yIGV4aXN0cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKaWYgKCEibWlsZXN0b25lX2ZhY3RvciIgJWluJSBjb2xuYW1lcyhjZDRfcmVmQG1ldGEuZGF0YSkpIHsKICBjZDRfcmVmQG1ldGEuZGF0YSRtaWxlc3RvbmVfZmFjdG9yIDwtIGZhY3RvcigKICAgIGNkNF9yZWZAbWV0YS5kYXRhJG1pbGVzdG9uZSwgbGV2ZWxzID0gbWlsZXN0b25lX29yZGVyCiAgKQp9CgojIOKUgOKUgCBGaWx0ZXIgdGVjaG5pY2FsIGdlbmVzIGFuZCB0YWtlIHRvcCBuIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApuX2tlZXAgPC0gMTAwCgpjbGVhbl90cmFqX2dlbmVzIDwtIHNpZ190cmFqX2dlbmVzICU+JQogIGZpbHRlcighZ2VuZSAlaW4lIGV4Y2x1ZGVfZ2VuZXMpICU+JSAgICAgICAgIyB1c2UgZ2VuZSBjb2x1bW4gbm90IHJvd25hbWVzCiAgc2xpY2VfaGVhZChuID0gbl9rZWVwKSAlPiUKICBwdWxsKGdlbmUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGV4dHJhY3QgYXMgY2hhcmFjdGVyIHZlY3RvcgoKY2F0KHNwcmludGYoIkNsZWFuIHRyYWplY3RvcnkgZ2VuZXM6ICVkIChyZW1vdmVkICVkIHRlY2huaWNhbClcbiIsCiAgICAgICAgICAgIGxlbmd0aChjbGVhbl90cmFqX2dlbmVzKSwKICAgICAgICAgICAgbnJvdyhzaWdfdHJhal9nZW5lcykgLSBsZW5ndGgoY2xlYW5fdHJhal9nZW5lcykpKQpjYXQoIkZpcnN0IDEwOiIsIHBhc3RlKGhlYWQoY2xlYW5fdHJhal9nZW5lcywgMTApLCBjb2xsYXBzZT0iLCAiKSwgIlxuIikKCiMg4pSA4pSAIENvbmZpcm0gZ2VuZXMgZXhpc3QgaW4gb2JqZWN0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApjbGVhbl90cmFqX2dlbmVzIDwtIGludGVyc2VjdChjbGVhbl90cmFqX2dlbmVzLCByb3duYW1lcyhjZDRfcmVmKSkKY2F0KHNwcmludGYoIkdlbmVzIGZvdW5kIGluIGNkNF9yZWY6ICVkXG4iLCBsZW5ndGgoY2xlYW5fdHJhal9nZW5lcykpKQoKIyDilIDilIAgRG90UGxvdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKRGVmYXVsdEFzc2F5KGNkNF9yZWYpIDwtICJSTkEiCklkZW50cyhjZDRfcmVmKSAgICAgICA8LSAibWlsZXN0b25lX2ZhY3RvciIKCnBfZG90IDwtIERvdFBsb3QoCiAgY2Q0X3JlZiwKICBmZWF0dXJlcyAgPSBjbGVhbl90cmFqX2dlbmVzLAogIGNvbHMgICAgICA9IGMoImxpZ2h0Z3JleSIsICIjZDYyNzI4IiksCiAgZG90LnNjYWxlID0gNiwKICBzY2FsZSAgICAgPSBUUlVFCikgKwogIFJvdGF0ZWRBeGlzKCkgKwogIGNvb3JkX2ZsaXAoKSArCiAgZ2d0aXRsZShzcHJpbnRmKCJUb3AgJWQgTW9ub2NsZTMgVHJhamVjdG9yeSBHZW5lcyDigJQgTWlsZXN0b25lcyBNMDDigJNNMDciLCBuX2tlZXApKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDgsIGZhY2UgPSAiYm9sZCIpLAogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA3KSwKICAgICAgICBwbG90LnRpdGxlICA9IGVsZW1lbnRfdGV4dChzaXplID0gMTMsIGZhY2UgPSAiYm9sZCIpKQoKcHJpbnQocF9kb3QpCgpgYGAKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKIyBNZXRob2QgQ29tcGFyaXNvbiB7LnRhYnNldCAubWV0aG9kLWNvbXBhcmV9Cgo6Ojogey5zZWN0aW9uLWJveCAubWV0aG9kLWNvbXBhcmV9CioqS2V5IHF1ZXN0aW9uKio6IERvIHRoZSB0d28gbWV0aG9kcyBhZ3JlZSBvbiBjZWxsIG9yZGVyaW5nPwo6OjoKCiMjIFBzZXVkb3RpbWUgQ29ycmVsYXRpb24KCmBgYHtyIGNvbXBhcmUtY29ycmVsYXRpb24sIGZpZy53aWR0aD0xNCwgZmlnLmhlaWdodD01fQpjb21wYXJlX2RmIDwtIGRhdGEuZnJhbWUoCiAgY2VsbCAgICAgICAgPSBjb2xuYW1lcyhjZDRfcmVmKSwKICBzdGF0ZSAgICAgICA9IGZhY3RvcihjZDRfcmVmQG1ldGEuZGF0YVtbU1RBVEVfQ09MXV0sIGxldmVscz1TVEFURV9PUkRFUiksCiAgbXN0X3B0ICAgICAgPSBjZDRfcmVmQG1ldGEuZGF0YSRtc3RfcHNldWRvdGltZV9ub3JtLAogIG1vbm9jbGUzX3B0ID0gY2Q0X3JlZkBtZXRhLmRhdGEkbW9ub2NsZTNfcHNldWRvdGltZV9ub3JtLAogIG1pbGVzdG9uZSAgID0gY2Q0X3JlZkBtZXRhLmRhdGEkbWlsZXN0b25lCikgJT4lIGZpbHRlcighaXMubmEobXN0X3B0KSwgIWlzLm5hKG1vbm9jbGUzX3B0KSwgc3RhdGUgJWluJSBTVEFURV9PUkRFUikKCm92ZXJhbGxfY29yIDwtIGNvcihjb21wYXJlX2RmJG1zdF9wdCwgY29tcGFyZV9kZiRtb25vY2xlM19wdCwKICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJzcGVhcm1hbiIsIHVzZSA9ICJjb21wbGV0ZS5vYnMiKQoKcGVyX3N0YXRlX2NvciA8LSBjb21wYXJlX2RmICU+JQogIGdyb3VwX2J5KHN0YXRlKSAlPiUKICBzdW1tYXJpc2UoCiAgICBuICAgICAgICAgPSBuKCksCiAgICBzcGVhcm1hbiAgPSByb3VuZChjb3IobXN0X3B0LCBtb25vY2xlM19wdCwgbWV0aG9kPSJzcGVhcm1hbiIpLCAzKSwKICAgIG1lYW5fZGlmZiA9IHJvdW5kKG1lYW4obXN0X3B0IC0gbW9ub2NsZTNfcHQpLCAxKSwKICAgIHNkX2RpZmYgICA9IHJvdW5kKHNkKG1zdF9wdCAtIG1vbm9jbGUzX3B0KSwgMSksCiAgICAuZ3JvdXBzICAgPSAiZHJvcCIKICApCgpwX3NjYXR0ZXIgPC0gZ2dwbG90KAogIGNvbXBhcmVfZGZbc2FtcGxlKG5yb3coY29tcGFyZV9kZiksIG1pbig1MDAwLG5yb3coY29tcGFyZV9kZikpKSxdLAogIGFlcyh4PW1zdF9wdCwgeT1tb25vY2xlM19wdCwgY29sb3VyPXN0YXRlKQopICsKICBnZW9tX3BvaW50KHNpemU9LjYsIGFscGhhPS41KSArCiAgZ2VvbV9hYmxpbmUoc2xvcGU9MSwgaW50ZXJjZXB0PTAsIGxpbmV0eXBlPSJkYXNoZWQiLCBjb2xvdXI9ImdyZXk0MCIsIGxpbmV3aWR0aD0uOCkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0ibG0iLCBzZT1GQUxTRSwgY29sb3VyPSJibGFjayIsIGxpbmV3aWR0aD0uOCkgKwogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzPVNUQVRFX0NPTE9SUywgbmFtZT0iU3RhdGUiKSArCiAgYW5ub3RhdGUoInRleHQiLCB4PTUsIHk9OTIsCiAgICAgICAgICAgbGFiZWw9c3ByaW50ZigiU3BlYXJtYW4gz4EgPSAlLjNmIiwgb3ZlcmFsbF9jb3IpLAogICAgICAgICAgIHNpemU9NC41LCBmb250ZmFjZT0iYm9sZCIsIGhqdXN0PTApICsKICB0aGVtZV9jbGFzc2ljKCkgKwogIGxhYnMoeD0iQ3VzdG9tIE1TVCBwc2V1ZG90aW1lICgw4oCTMTAwKSIsIHk9Ik1vbm9jbGUzIHBzZXVkb3RpbWUgKDDigJMxMDApIiwKICAgICAgIHRpdGxlPSJQc2V1ZG90aW1lIGNvcnJlbGF0aW9uOiBDdXN0b20gTVNUIHZzIE1vbm9jbGUzIiwKICAgICAgIHN1YnRpdGxlPSJEYXNoZWQgbGluZSA9IHBlcmZlY3QgYWdyZWVtZW50IHwgU29saWQgbGluZSA9IGxpbmVhciBmaXQiKSArCiAgdGhlbWUocGxvdC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT0xMyxmYWNlPSJib2xkIikpCgpwX2RlbnNpdHkgPC0gZ2dwbG90KAogIGNvbXBhcmVfZGYgJT4lCiAgICBwaXZvdF9sb25nZXIoYyhtc3RfcHQsIG1vbm9jbGUzX3B0KSwgbmFtZXNfdG89Im1ldGhvZCIsIHZhbHVlc190bz0icHNldWRvdGltZSIpICU+JQogICAgbXV0YXRlKG1ldGhvZCA9IHJlY29kZShtZXRob2QsIG1zdF9wdD0iQ3VzdG9tIE1TVCIsIG1vbm9jbGUzX3B0PSJNb25vY2xlMyIpKSwKICBhZXMoeD1wc2V1ZG90aW1lLCBjb2xvdXI9bWV0aG9kLCBmaWxsPW1ldGhvZCkKKSArCiAgZ2VvbV9kZW5zaXR5KGFscGhhPS4zNSkgKwogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzPU1FVEhPRF9DT0xPUlMsIG5hbWU9Ik1ldGhvZCIpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9TUVUSE9EX0NPTE9SUywgbmFtZT0iTWV0aG9kIikgKwogIGZhY2V0X3dyYXAofnN0YXRlLCBuY29sPTMsIHNjYWxlcz0iZnJlZV95IikgKwogIHRoZW1lX2NsYXNzaWMoKSArCiAgbGFicyh4PSJQc2V1ZG90aW1lICgw4oCTMTAwKSIsIHk9IkRlbnNpdHkiLAogICAgICAgdGl0bGU9IlBzZXVkb3RpbWUgZGlzdHJpYnV0aW9uIHBlciBzdGF0ZTogbWV0aG9kIGNvbXBhcmlzb24iKSArCiAgdGhlbWUocGxvdC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT0xMyxmYWNlPSJib2xkIiksCiAgICAgICAgc3RyaXAudGV4dD1lbGVtZW50X3RleHQoZmFjZT0iYm9sZCIpKQoKcHJpbnQocF9zY2F0dGVyIHwgcF9kZW5zaXR5KQpjYXQoc3ByaW50ZigiXG5PdmVyYWxsIFNwZWFybWFuIM+BID0gJS4zZlxuXG4iLCBvdmVyYWxsX2NvcikpCmthYmxlKHBlcl9zdGF0ZV9jb3IsCiAgICAgIGNhcHRpb24gPSAiUGVyLXN0YXRlIHBzZXVkb3RpbWUgY29ycmVsYXRpb24gKFNwZWFybWFuKSIsCiAgICAgIGNvbC5uYW1lcyA9IGMoIlN0YXRlIiwiTiBjZWxscyIsIlNwZWFybWFuIM+BIiwiTWVhbiBkaWZmIiwiU0QgZGlmZiIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zPWMoInN0cmlwZWQiLCJob3ZlciIpLCBmdWxsX3dpZHRoPUZBTFNFKQpgYGAKCiMjIFNpZGUtYnktU2lkZSBVTUFQCgpgYGB7ciBjb21wYXJlLXVtYXAsIGZpZy53aWR0aD0xMywgZmlnLmhlaWdodD02fQp1bWFwX2NvbXBhcmUgICAgICAgICAgICAgPC0gdW1hcF9kZgp1bWFwX2NvbXBhcmUkbXN0X3B0ICAgICAgPC0gY2Q0X3JlZkBtZXRhLmRhdGEkbXN0X3BzZXVkb3RpbWVfbm9ybQp1bWFwX2NvbXBhcmUkbW9ub2NsZTNfcHQgPC0gY2Q0X3JlZkBtZXRhLmRhdGEkbW9ub2NsZTNfcHNldWRvdGltZV9ub3JtCgpwdF9ncmFkaWVudCA8LSBzY2FsZV9jb2xvdXJfZ3JhZGllbnRuKAogIGNvbG91cnM9YygiIzBEMDg4NyIsIiM2QTAwQTgiLCIjQjEyQTkwIiwiI0UxNjQ2MiIsIiNGQ0E2MzYiLCIjRjBGOTIxIiksCiAgbmFtZT0iUHNldWRvdGltZVxuKDDigJMxMDApIiwgbGltaXRzPWMoMCwxMDApCikKCnBfc2lkZV9tc3QgPC0gZ2dwbG90KHVtYXBfY29tcGFyZVtzYW1wbGUobnJvdyh1bWFwX2NvbXBhcmUpKSxdLAogICAgICAgICAgICAgICAgICAgICAgYWVzKHg9VU1BUF8xLHk9VU1BUF8yLGNvbG91cj1tc3RfcHQpKSArCiAgZ2VvbV9wb2ludChzaXplPS4zNSxhbHBoYT0uNykgKwogIGdlb21fc2VnbWVudChkYXRhPW1zdF9lZGdlX2RmLCBhZXMoeD14MSx5PXkxLHhlbmQ9eDIseWVuZD15MiksCiAgICAgICAgICAgICAgIGNvbG91cj0iYmxhY2siLGxpbmV3aWR0aD0uNyxhbHBoYT0uNixpbmhlcml0LmFlcz1GQUxTRSkgKwogIHB0X2dyYWRpZW50ICsgdGhlbWVfY2xhc3NpYygpICsKICBsYWJzKHg9IlVNQVAtMSIseT0iVU1BUC0yIix0aXRsZT0iQ3VzdG9tIE1TVCIpICsKICB0aGVtZShwbG90LnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPTEzLGZhY2U9ImJvbGQiLGNvbG91cj1NRVRIT0RfQ09MT1JTWyJDdXN0b20gTVNUIl0pKQoKcF9zaWRlX20zIDwtIGdncGxvdCh1bWFwX2NvbXBhcmVbc2FtcGxlKG5yb3codW1hcF9jb21wYXJlKSksXSwKICAgICAgICAgICAgICAgICAgICAgYWVzKHg9VU1BUF8xLHk9VU1BUF8yLGNvbG91cj1tb25vY2xlM19wdCkpICsKICBnZW9tX3BvaW50KHNpemU9LjM1LGFscGhhPS43KSArCiAgZ2VvbV9zZWdtZW50KGRhdGE9bTNfZWRnZV9kZiwgYWVzKHg9eDEseT15MSx4ZW5kPXgyLHllbmQ9eTIpLAogICAgICAgICAgICAgICBjb2xvdXI9ImJsYWNrIixsaW5ld2lkdGg9LjYsYWxwaGE9LjYsaW5oZXJpdC5hZXM9RkFMU0UpICsKICBwdF9ncmFkaWVudCArIHRoZW1lX2NsYXNzaWMoKSArCiAgbGFicyh4PSJVTUFQLTEiLHk9IlVNQVAtMiIsdGl0bGU9Ik1vbm9jbGUzIikgKwogIHRoZW1lKHBsb3QudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9MTMsZmFjZT0iYm9sZCIsY29sb3VyPU1FVEhPRF9DT0xPUlNbIk1vbm9jbGUzIl0pKQoKcHJpbnQocF9zaWRlX21zdCB8IHBfc2lkZV9tMykKYGBgCgojIyBEaXNjb3JkYW50IENlbGxzCgpgYGB7ciBjb21wYXJlLWRpc2NvcmRhbnQsIGZpZy53aWR0aD0xMiwgZmlnLmhlaWdodD02fQpjb21wYXJlX2RmJGFic19kaWZmIDwtIGFicyhjb21wYXJlX2RmJG1zdF9wdCAtIGNvbXBhcmVfZGYkbW9ub2NsZTNfcHQpCnRocmVzaG9sZCA8LSBxdWFudGlsZShjb21wYXJlX2RmJGFic19kaWZmLCAwLjkwLCBuYS5ybT1UUlVFKQoKZGlzY29yZGFudCA8LSBjb21wYXJlX2RmICU+JSBmaWx0ZXIoYWJzX2RpZmYgPiB0aHJlc2hvbGQpICU+JSBhcnJhbmdlKGRlc2MoYWJzX2RpZmYpKQoKY2F0KHNwcmludGYoIlRvcCAxMCUlIG1vc3QgZGlzY29yZGFudCBjZWxscyAofGRpZmZ8ID4gJS4xZik6ICVkIGNlbGxzXG4iLAogICAgICAgICAgICB0aHJlc2hvbGQsIG5yb3coZGlzY29yZGFudCkpKQoKdW1hcF9kaXNjICAgICAgICAgICAgPC0gdW1hcF9kZgp1bWFwX2Rpc2MkZGlzY29yZGFudCA8LSByb3duYW1lcyh1bWFwX2Rpc2MpICVpbiUgZGlzY29yZGFudCRjZWxsCnVtYXBfZGlzYyRhYnNfZGlmZiAgIDwtIGNvbXBhcmVfZGYkYWJzX2RpZmZbbWF0Y2gocm93bmFtZXModW1hcF9kaXNjKSwgY29tcGFyZV9kZiRjZWxsKV0KCnBfZGlzY29yZGFudCA8LSBnZ3Bsb3QodW1hcF9kaXNjW3NhbXBsZShucm93KHVtYXBfZGlzYykpLF0sIGFlcyh4PVVNQVBfMSx5PVVNQVBfMikpICsKICBnZW9tX3BvaW50KGRhdGE9fmZpbHRlciguLCAhZGlzY29yZGFudCksIGNvbG91cj0iZ3JleTg1Iiwgc2l6ZT0uMywgYWxwaGE9LjUpICsKICBnZW9tX3BvaW50KGRhdGE9fmZpbHRlciguLCBkaXNjb3JkYW50KSwgYWVzKGNvbG91cj1hYnNfZGlmZiksIHNpemU9LjgsIGFscGhhPS44NSkgKwogIHNjYWxlX2NvbG91cl9ncmFkaWVudChsb3c9IiNGQ0E2MzYiLCBoaWdoPSIjQzAwMDAwIiwgbmFtZT0ifE1TVCDiiJIgTTN8IikgKwogIHRoZW1lX2NsYXNzaWMoKSArCiAgbGFicyh4PSJVTUFQLTEiLHk9IlVNQVAtMiIsCiAgICAgICB0aXRsZT0iRGlzY29yZGFudCBjZWxscyAodG9wIDEwJSBkaXNhZ3JlZW1lbnQpIiwKICAgICAgIHN1YnRpdGxlPSJCb3VuZGFyeS90cmFuc2l0aW9uIGNlbGxzIOKAlCBiaW9sb2dpY2FsbHkgZXhwZWN0ZWQiKSArCiAgdGhlbWUocGxvdC50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT0xMyxmYWNlPSJib2xkIikpCgpkaXNjX3N0YXRlcyA8LSBkaXNjb3JkYW50ICU+JSBjb3VudChzdGF0ZSkgJT4lIG11dGF0ZShwY3Q9cm91bmQoMTAwKm4vc3VtKG4pLDEpKQoKcF9kaXNjX2JhciA8LSBnZ3Bsb3QoZGlzY19zdGF0ZXMsIGFlcyh4PXJlb3JkZXIoc3RhdGUsLW4pLCB5PXBjdCwgZmlsbD1zdGF0ZSkpICsKICBnZW9tX2NvbCh3aWR0aD0uNykgKwogIGdlb21fdGV4dChhZXMobGFiZWw9c3ByaW50ZigiJS4wZiUlIixwY3QpKSwgdmp1c3Q9LS4zLCBzaXplPTMuNSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1TVEFURV9DT0xPUlMsIGd1aWRlPSJub25lIikgKwogIHRoZW1lX2NsYXNzaWMoKSArCiAgbGFicyh4PSJTdGF0ZSIsIHk9IiUgb2YgZGlzY29yZGFudCBjZWxscyIsIHRpdGxlPSJTdGF0ZSBjb21wb3NpdGlvbiBvZiBkaXNjb3JkYW50IGNlbGxzIikgKwogIHRoZW1lKHBsb3QudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9MTIsZmFjZT0iYm9sZCIpKQoKcHJpbnQocF9kaXNjb3JkYW50IHwgcF9kaXNjX2JhcikKYGBgCgojIyBXaGljaCBNZXRob2QgdG8gVXNlPwoKYGBge3IgbWV0aG9kLXJlY29tbWVuZGF0aW9ufQppZiAob3ZlcmFsbF9jb3IgPiAwLjkpIHsKICByZWMgPC0gIkhJR0ggYWdyZWVtZW50ICjPgSA+IDAuOSk6IGVpdGhlciBtZXRob2QgdmFsaWQuIFVzZSAqKkN1c3RvbSBNU1QqKiBmb3IgbWlsZXN0b25lIGxhYmVsczsgKipNb25vY2xlMyoqIGZvciBncmFwaF90ZXN0KCkgdHJhamVjdG9yeSBnZW5lcy4iCn0gZWxzZSBpZiAob3ZlcmFsbF9jb3IgPiAwLjcpIHsKICByZWMgPC0gIk1PREVSQVRFIGFncmVlbWVudCAoz4EgPSAwLjfigJMwLjkpOiBzaW1pbGFyIG9yZGVyaW5nLCBkaWZmZXIgYXQgYm91bmRhcmllcy4gVXNlIGJvdGggYXMgY29tcGxlbWVudGFyeSBldmlkZW5jZS4iCn0gZWxzZSB7CiAgcmVjIDwtICJMT1cgYWdyZWVtZW50ICjPgSA8IDAuNyk6IHNpZ25pZmljYW50IGRpc2NvcmRhbmNlLiBDaGVjayBVTUFQIHRvcG9sb2d5IGFuZCBtaWxlc3RvbmUgYXNzaWdubWVudHMuIgp9CmBgYAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojIE1hcmtlciBEb3RQbG90IHBlciBNaWxlc3RvbmUKCmBgYHtyIHBhbmVsLWUtZG90cGxvdCwgZmlnLndpZHRoPTksIGZpZy5oZWlnaHQ9MTB9CkRlZmF1bHRBc3NheShjZDRfcmVmKSA8LSAiUk5BIgoKY2Q0X3JlZkBtZXRhLmRhdGEkbWlsZXN0b25lX2ZhY3RvciA8LSBmYWN0b3IoCiAgY2Q0X3JlZkBtZXRhLmRhdGEkbWlsZXN0b25lLCBsZXZlbHMgPSBtaWxlc3RvbmVfb3JkZXIKKQpJZGVudHMoY2Q0X3JlZikgPC0gIm1pbGVzdG9uZV9mYWN0b3IiCgpwYW5lbF9nZW5lcyA8LSBjKAogICMgTmFpdmUKICAiQ0NSNyIsIkxFRjEiLCJUQ0Y3IiwiU0VMTCIsIktMRjIiLCJTQVRCMSIsIklMN1IiLCJDRDI3IiwiTUFMIiwKICAjIFRDTQogICJTMTAwQTQiLCJBUVAzIiwiTFRCIiwiSVRHQjEiLCJDRDQ0IiwiQ0NSNCIsCiAgIyBTaGFyZWQgYWN0aXZhdGlvbgogICJDRDY5IiwiTE1OQSIsCiAgIyBURU0g4oCUIGVmZmVjdG9yIG1lbW9yeSBhbmQgVGgxIHNrZXdpbmcKICAiR1pNSyIsIkNDTDUiLCJFT01FUyIsIkNYQ1IzIiwiSE9QWCIsIkNYQ1I0IiwiSUZORyIsIlRORiIsIkNDUjUiLAogICMgVGVtcmEvQ1RMIOKAlCB0ZXJtaW5hbCBjeXRvdG94aWMgZWZmZWN0b3IKICAiR1pNQiIsIkdaTUEiLCJQUkYxIiwiTktHNyIsIkNYM0NSMSIsIkZHRkJQMiIsIkdOTFkiLCJUQlgyMSIsIlpFQjIiLAogICJGQ0dSM0EiLCJLTFJHMSIsIk5SNEEyIiwKICAjIFRyZWcg4oCUIGNvcmUgaWRlbnRpdHkKICAiRk9YUDMiLCJJTDJSQSIsIklLWkYyIiwiSUtaRjQiLCJUSUdJVCIsIlJUS04yIiwiVE5GUlNGMTgiLCJDVExBNCIsCiAgIyBDby1pbmhpYml0b3J5IHJlY2VwdG9ycyDigJQgc2hhcmVkIGJldHdlZW4gZWZmZWN0b3IgVHJlZyBhbmQgZXhoYXVzdGlvbgogICMgRXhwcmVzc2lvbiBoZXJlIHJlZmxlY3RzIFRyZWcgc3VwcHJlc3NpdmUgbWFjaGluZXJ5LCBOT1QgZHlzZnVuY3Rpb24KICAjIENyaXRpY2FsIGZvciBTw6l6YXJ5IGludGVycHJldGF0aW9uOiBUcmVnLWxpa2UgdnMgZXhoYXVzdGVkIGlkZW50aXR5CiAgIlBEQ0QxIiwiSEFWQ1IyIiwiTEFHMyIKKQoKcGFuZWxfZ2VuZXMgPC0gdW5pcXVlKGludGVyc2VjdChwYW5lbF9nZW5lcywgcm93bmFtZXMoY2Q0X3JlZikpKQoKcF9kb3RwbG90X21zIDwtIERvdFBsb3QoCiAgY2Q0X3JlZiwKICBmZWF0dXJlcyAgPSBwYW5lbF9nZW5lcywKICBncm91cC5ieSAgPSAibWlsZXN0b25lX2ZhY3RvciIsCiAgY29scyAgICAgID0gYygibGlnaHRncmV5IiwiI2Q2MjcyOCIpLAogIGRvdC5zY2FsZSA9IDQsIHNjYWxlID0gVFJVRSwgY29sLm1pbiA9IC0xLjUsIGNvbC5tYXggPSAyLjUKKSArCiAgUm90YXRlZEF4aXMoKSArIGNvb3JkX2ZsaXAoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggICAgID0gZWxlbWVudF90ZXh0KHNpemU9OCwgZmFjZT0iYm9sZCIpLAogICAgICAgIGF4aXMudGV4dC55ICAgICA9IGVsZW1lbnRfdGV4dChzaXplPTcpLAogICAgICAgIHBsb3QudGl0bGUgICAgICA9IGVsZW1lbnRfdGV4dChzaXplPTEzLGZhY2U9ImJvbGQiKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogIGdndGl0bGUoIk1hcmtlciBnZW5lIGV4cHJlc3Npb24gcGVyIG1pbGVzdG9uZSIpCgpwcmludChwX2RvdHBsb3RfbXMpCmBgYAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpgYGB7ciBzYXZlLXJlZmVyZW5jZX0Kc2F2ZVJEUyhjZDRfcmVmLCAgICAgICAgICAgICAiT2JqZWN0cy9jZDRfcmVmX2R1YWxfdHJhamVjdG9yeS5yZHMiKQpzYXZlUkRTKGNkcywgICAgICAgICAgICAgICAgICJPYmplY3RzL21vbm9jbGUzX2Nkcy5yZHMiKQpzYXZlUkRTKG1zdF9ncmFwaCwgICAgICAgICAgICJPYmplY3RzL21zdF9ncmFwaC5yZHMiKSAgICAgICAgICAgIyDihpAgQURECnNhdmVSRFMobWlsZXN0b25lX2NlbnRyb2lkcywgIk9iamVjdHMvbWlsZXN0b25lX2NlbnRyb2lkcy5yZHMiKSAjIOKGkCBBREQKCndyaXRlLmNzdihtaWxlc3RvbmVfY2VudHJvaWRzLCAiVGFibGVzL21pbGVzdG9uZV9jZW50cm9pZHMuY3N2IiwgICAgICAgICAgcm93Lm5hbWVzPUZBTFNFKQp3cml0ZS5jc3YocGVyX3N0YXRlX2NvciwgICAgICAgIlRhYmxlcy9tZXRob2RfY29tcGFyaXNvbl9wZXJfc3RhdGUuY3N2IiwgIHJvdy5uYW1lcz1GQUxTRSkKd3JpdGUuY3N2KHNpZ190cmFqX2dlbmVzLCAgICAgICJUYWJsZXMvbW9ub2NsZTNfdHJhamVjdG9yeV9nZW5lcy5jc3YiLCAgICByb3cubmFtZXM9RkFMU0UpCgpnZ3NhdmUoIkZpZ3VyZXMvZmlnX21pbGVzdG9uZXNfbGluZWFyLnBkZiIsICBwX21zdF9saW5lYXIsICAgIHdpZHRoPTE0LCBoZWlnaHQ9NCkKZ2dzYXZlKCJGaWd1cmVzL2ZpZ19tc3RfdW1hcC5wZGYiLCAgICAgICAgICAgcF9tc3RfdW1hcF9tcywgICB3aWR0aD0xMCwgaGVpZ2h0PTgpCmdnc2F2ZSgiRmlndXJlcy9maWdfbXN0X3BzZXVkb3RpbWUucGRmIiwgICAgIHBfbXN0X3BzZXVkbywgICAgd2lkdGg9MTAsIGhlaWdodD04KQpnZ3NhdmUoIkZpZ3VyZXMvZmlnX20zX3BzZXVkb3RpbWUucGRmIiwgICAgICBwX20zX3BzZXVkbywgICAgIHdpZHRoPTEwLCBoZWlnaHQ9OCkKZ2dzYXZlKCJGaWd1cmVzL2ZpZ19tZXRob2RfY29tcGFyaXNvbi5wZGYiLCAgcF9zY2F0dGVyLCAgICAgICB3aWR0aD0xMCwgaGVpZ2h0PTYpCmdnc2F2ZSgiRmlndXJlcy9maWdfZG90cGxvdF9taWxlc3RvbmVzLnBkZiIsIHBfZG90cGxvdF9tcywgICAgd2lkdGg9OSwgIGhlaWdodD0xOCkKCmNhdCgi4pyFIEFsbCByZWZlcmVuY2Ugb3V0cHV0cyBzYXZlZFxuIikKYGBgCg==