==============================================================================

Komputasi Statistika, Kelas D

Prodi S1 Statistika FSAD ITS - Semester Genap 2025/2026

==============================================================================

Nama : Sabrina Ownya Priyandi Istiqomah

NRP : 5003251132

Kelas : D

==============================================================================

==============================================================================

Soal 1 - Winsorized Mean

==============================================================================

# Data
x <- c(12, 45, 52, 58, 61, 63, 67, 70, 72, 75, 78, 82, 88, 95, 310)

— [a] Buatlah fungsi winsorized_mean(x, alpha) —

winsorized_mean <- function(x, alpha) {
  n <- length (x)
  k <- floor(n*alpha)
  jumlah <-  0
  
  for(i in 1:n){
   if(i<= k){
     jumlah <- jumlah + x[k+1]
   } else if (k<i && i<=(n-k)){
     jumlah <-  jumlah + x[i]
   } else {
     jumlah <-  jumlah +x[n-k]
   }
  }
  ratarata=jumlah/n
  return(ratarata)
}

— [b] Hitung ordinary mean (alpha=0) dan Winsorized mean 20% (alpha=0.2) —

# Ordinary mean
ordinary <- winsorized_mean (x, 0)
ordinary
[1] 81.86667
# Winsorized mean 20%
winsorized <- winsorized_mean (x, 0.2)
winsorized
[1] 69.73333

Data visualisasi dan Analisis serta interpretasi

Data Visualisasi Histogram

# Data Visualisasi Histogram
hist(x, main = "Histogram Data X", xlab = "x")

Interpretasi dan Analisis Histogram Data X

Sebagian besar data berada pada rentang 50–100 sehingga dapat dianggap sebagai pusat data. Namun, terdapat beberapa nilai yang jauh lebih besar di sisi kanan yang membuat distribusi tidak simetris dan cenderung miring ke kanan (right-skewed). Kemiringan ini menunjukkan adanya nilai ekstrem (outlier) yang jauh lebih besar dibandingkan data lainnya. Akibatnya, nilai ekstrem tersebut menyebabkan rata-rata (mean) menjadi lebih besar dan kurang mewakili pusat data yang sebenarnya.

Data Visualisasi Boxplot

# Data Visualisasi Boxplot
boxplot(x, main = "Boxplot Data x")

Interpretasi dan Analisis Boxplot Data X

Median berada pada kisaran 60–70 sehingga dapat mewakili pusat data. Bentuk boxplot yang lebih panjang ke arah atas menunjukkan adanya nilai yang lebih besar dibandingkan mayoritas data. Terdapat nilai ekstrem yang terlihat pada bagian atas boxplot, yaitu nilai yang jauh lebih besar dibandingkan data lainnya. Hal ini menyebabkan mean lebih mudah terpengaruh oleh nilai besar tersebut, sedangkan median cenderung lebih stabil dalam merepresentasikan pusat data.

==============================================================================

Soal 2 - Weighted Multivariate Descriptive Statistics

==============================================================================

# --- Baca data CSV ---
quiz <- read.csv("C:/Users/Ownya/Downloads/Quiz 1 Komstat/data_quiz1.csv")
X <- as.matrix(quiz[c("x1", "x2", "x3")])
w <- quiz$w

— [a] Buatlah fungsi weighted_corr(X, w) —

# fungsi weighted_corr
weighted_corr <- function(X, w) {
  n <- length(w)
  W <- diag(w)
  jumlah <- 0
  for(i in 1:n){
    jumlah <- jumlah + w[i]
  }
  n_w <- jumlah
  vect <- rep(1, n)
  x_bar_w <- (t(X) %*% W %*% vect) / n_w
  D <- X-(vect %*% t(x_bar_w))
  S_w <- (t(D) %*% W %*% D)/n_w
  s_w <- sqrt(diag(S_w))
  V <- diag(s_w)
  R_w <- solve(V) %*% S_w %*% solve(V)
  return(list(
    W = W,
    x_bar_w = x_bar_w,
    S_w = S_w,
    s_w = s_w,
    R_w = R_w
  ))
}

— [b] Aplikasikan fungsi pada data —

# Panggil fungsi
Panggil <- weighted_corr(X,w)
Panggil
$W
       [,1]  [,2]  [,3]  [,4]  [,5]
 [1,] 14.34  0.00  0.00  0.00  0.00
 [2,]  0.00 14.19  0.00  0.00  0.00
 [3,]  0.00  0.00 12.49  0.00  0.00
 [4,]  0.00  0.00  0.00 11.45  0.00
 [5,]  0.00  0.00  0.00  0.00 17.45
 [6,]  0.00  0.00  0.00  0.00  0.00
 [7,]  0.00  0.00  0.00  0.00  0.00
 [8,]  0.00  0.00  0.00  0.00  0.00
 [9,]  0.00  0.00  0.00  0.00  0.00
[10,]  0.00  0.00  0.00  0.00  0.00
[11,]  0.00  0.00  0.00  0.00  0.00
[12,]  0.00  0.00  0.00  0.00  0.00
[13,]  0.00  0.00  0.00  0.00  0.00
[14,]  0.00  0.00  0.00  0.00  0.00
[15,]  0.00  0.00  0.00  0.00  0.00
[16,]  0.00  0.00  0.00  0.00  0.00
[17,]  0.00  0.00  0.00  0.00  0.00
[18,]  0.00  0.00  0.00  0.00  0.00
[19,]  0.00  0.00  0.00  0.00  0.00
[20,]  0.00  0.00  0.00  0.00  0.00
[21,]  0.00  0.00  0.00  0.00  0.00
[22,]  0.00  0.00  0.00  0.00  0.00
[23,]  0.00  0.00  0.00  0.00  0.00
[24,]  0.00  0.00  0.00  0.00  0.00
[25,]  0.00  0.00  0.00  0.00  0.00
[26,]  0.00  0.00  0.00  0.00  0.00
       [,6]  [,7]  [,8]  [,9] [,10]
 [1,]  0.00  0.00  0.00  0.00  0.00
 [2,]  0.00  0.00  0.00  0.00  0.00
 [3,]  0.00  0.00  0.00  0.00  0.00
 [4,]  0.00  0.00  0.00  0.00  0.00
 [5,]  0.00  0.00  0.00  0.00  0.00
 [6,] 15.24  0.00  0.00  0.00  0.00
 [7,]  0.00 34.73  0.00  0.00  0.00
 [8,]  0.00  0.00 17.97  0.00  0.00
 [9,]  0.00  0.00  0.00 33.13  0.00
[10,]  0.00  0.00  0.00  0.00 35.93
[11,]  0.00  0.00  0.00  0.00  0.00
[12,]  0.00  0.00  0.00  0.00  0.00
[13,]  0.00  0.00  0.00  0.00  0.00
[14,]  0.00  0.00  0.00  0.00  0.00
[15,]  0.00  0.00  0.00  0.00  0.00
[16,]  0.00  0.00  0.00  0.00  0.00
[17,]  0.00  0.00  0.00  0.00  0.00
[18,]  0.00  0.00  0.00  0.00  0.00
[19,]  0.00  0.00  0.00  0.00  0.00
[20,]  0.00  0.00  0.00  0.00  0.00
[21,]  0.00  0.00  0.00  0.00  0.00
[22,]  0.00  0.00  0.00  0.00  0.00
[23,]  0.00  0.00  0.00  0.00  0.00
[24,]  0.00  0.00  0.00  0.00  0.00
[25,]  0.00  0.00  0.00  0.00  0.00
[26,]  0.00  0.00  0.00  0.00  0.00
      [,11] [,12] [,13] [,14] [,15]
 [1,]  0.00  0.00  0.00  0.00  0.00
 [2,]  0.00  0.00  0.00  0.00  0.00
 [3,]  0.00  0.00  0.00  0.00  0.00
 [4,]  0.00  0.00  0.00  0.00  0.00
 [5,]  0.00  0.00  0.00  0.00  0.00
 [6,]  0.00  0.00  0.00  0.00  0.00
 [7,]  0.00  0.00  0.00  0.00  0.00
 [8,]  0.00  0.00  0.00  0.00  0.00
 [9,]  0.00  0.00  0.00  0.00  0.00
[10,]  0.00  0.00  0.00  0.00  0.00
[11,] 15.55  0.00  0.00  0.00  0.00
[12,]  0.00 16.54  0.00  0.00  0.00
[13,]  0.00  0.00 17.25  0.00  0.00
[14,]  0.00  0.00  0.00 14.93  0.00
[15,]  0.00  0.00  0.00  0.00  7.24
[16,]  0.00  0.00  0.00  0.00  0.00
[17,]  0.00  0.00  0.00  0.00  0.00
[18,]  0.00  0.00  0.00  0.00  0.00
[19,]  0.00  0.00  0.00  0.00  0.00
[20,]  0.00  0.00  0.00  0.00  0.00
[21,]  0.00  0.00  0.00  0.00  0.00
[22,]  0.00  0.00  0.00  0.00  0.00
[23,]  0.00  0.00  0.00  0.00  0.00
[24,]  0.00  0.00  0.00  0.00  0.00
[25,]  0.00  0.00  0.00  0.00  0.00
[26,]  0.00  0.00  0.00  0.00  0.00
      [,16] [,17] [,18] [,19] [,20]
 [1,]  0.00   0.0  0.00  0.00  0.00
 [2,]  0.00   0.0  0.00  0.00  0.00
 [3,]  0.00   0.0  0.00  0.00  0.00
 [4,]  0.00   0.0  0.00  0.00  0.00
 [5,]  0.00   0.0  0.00  0.00  0.00
 [6,]  0.00   0.0  0.00  0.00  0.00
 [7,]  0.00   0.0  0.00  0.00  0.00
 [8,]  0.00   0.0  0.00  0.00  0.00
 [9,]  0.00   0.0  0.00  0.00  0.00
[10,]  0.00   0.0  0.00  0.00  0.00
[11,]  0.00   0.0  0.00  0.00  0.00
[12,]  0.00   0.0  0.00  0.00  0.00
[13,]  0.00   0.0  0.00  0.00  0.00
[14,]  0.00   0.0  0.00  0.00  0.00
[15,]  0.00   0.0  0.00  0.00  0.00
[16,]  9.85   0.0  0.00  0.00  0.00
[17,]  0.00  11.1  0.00  0.00  0.00
[18,]  0.00   0.0 12.89  0.00  0.00
[19,]  0.00   0.0  0.00 11.14  0.00
[20,]  0.00   0.0  0.00  0.00  7.06
[21,]  0.00   0.0  0.00  0.00  0.00
[22,]  0.00   0.0  0.00  0.00  0.00
[23,]  0.00   0.0  0.00  0.00  0.00
[24,]  0.00   0.0  0.00  0.00  0.00
[25,]  0.00   0.0  0.00  0.00  0.00
[26,]  0.00   0.0  0.00  0.00  0.00
      [,21] [,22] [,23] [,24] [,25]
 [1,]  0.00  0.00  0.00  0.00  0.00
 [2,]  0.00  0.00  0.00  0.00  0.00
 [3,]  0.00  0.00  0.00  0.00  0.00
 [4,]  0.00  0.00  0.00  0.00  0.00
 [5,]  0.00  0.00  0.00  0.00  0.00
 [6,]  0.00  0.00  0.00  0.00  0.00
 [7,]  0.00  0.00  0.00  0.00  0.00
 [8,]  0.00  0.00  0.00  0.00  0.00
 [9,]  0.00  0.00  0.00  0.00  0.00
[10,]  0.00  0.00  0.00  0.00  0.00
[11,]  0.00  0.00  0.00  0.00  0.00
[12,]  0.00  0.00  0.00  0.00  0.00
[13,]  0.00  0.00  0.00  0.00  0.00
[14,]  0.00  0.00  0.00  0.00  0.00
[15,]  0.00  0.00  0.00  0.00  0.00
[16,]  0.00  0.00  0.00  0.00  0.00
[17,]  0.00  0.00  0.00  0.00  0.00
[18,]  0.00  0.00  0.00  0.00  0.00
[19,]  0.00  0.00  0.00  0.00  0.00
[20,]  0.00  0.00  0.00  0.00  0.00
[21,] 13.96  0.00  0.00  0.00  0.00
[22,]  0.00 23.13  0.00  0.00  0.00
[23,]  0.00  0.00 19.74  0.00  0.00
[24,]  0.00  0.00  0.00 17.53  0.00
[25,]  0.00  0.00  0.00  0.00 12.56
[26,]  0.00  0.00  0.00  0.00  0.00
      [,26] [,27] [,28] [,29] [,30]
 [1,]  0.00  0.00  0.00  0.00  0.00
 [2,]  0.00  0.00  0.00  0.00  0.00
 [3,]  0.00  0.00  0.00  0.00  0.00
 [4,]  0.00  0.00  0.00  0.00  0.00
 [5,]  0.00  0.00  0.00  0.00  0.00
 [6,]  0.00  0.00  0.00  0.00  0.00
 [7,]  0.00  0.00  0.00  0.00  0.00
 [8,]  0.00  0.00  0.00  0.00  0.00
 [9,]  0.00  0.00  0.00  0.00  0.00
[10,]  0.00  0.00  0.00  0.00  0.00
[11,]  0.00  0.00  0.00  0.00  0.00
[12,]  0.00  0.00  0.00  0.00  0.00
[13,]  0.00  0.00  0.00  0.00  0.00
[14,]  0.00  0.00  0.00  0.00  0.00
[15,]  0.00  0.00  0.00  0.00  0.00
[16,]  0.00  0.00  0.00  0.00  0.00
[17,]  0.00  0.00  0.00  0.00  0.00
[18,]  0.00  0.00  0.00  0.00  0.00
[19,]  0.00  0.00  0.00  0.00  0.00
[20,]  0.00  0.00  0.00  0.00  0.00
[21,]  0.00  0.00  0.00  0.00  0.00
[22,]  0.00  0.00  0.00  0.00  0.00
[23,]  0.00  0.00  0.00  0.00  0.00
[24,]  0.00  0.00  0.00  0.00  0.00
[25,]  0.00  0.00  0.00  0.00  0.00
[26,] 13.01  0.00  0.00  0.00  0.00
      [,31] [,32] [,33] [,34] [,35]
 [1,]  0.00  0.00  0.00  0.00   0.0
 [2,]  0.00  0.00  0.00  0.00   0.0
 [3,]  0.00  0.00  0.00  0.00   0.0
 [4,]  0.00  0.00  0.00  0.00   0.0
 [5,]  0.00  0.00  0.00  0.00   0.0
 [6,]  0.00  0.00  0.00  0.00   0.0
 [7,]  0.00  0.00  0.00  0.00   0.0
 [8,]  0.00  0.00  0.00  0.00   0.0
 [9,]  0.00  0.00  0.00  0.00   0.0
[10,]  0.00  0.00  0.00  0.00   0.0
[11,]  0.00  0.00  0.00  0.00   0.0
[12,]  0.00  0.00  0.00  0.00   0.0
[13,]  0.00  0.00  0.00  0.00   0.0
[14,]  0.00  0.00  0.00  0.00   0.0
[15,]  0.00  0.00  0.00  0.00   0.0
[16,]  0.00  0.00  0.00  0.00   0.0
[17,]  0.00  0.00  0.00  0.00   0.0
[18,]  0.00  0.00  0.00  0.00   0.0
[19,]  0.00  0.00  0.00  0.00   0.0
[20,]  0.00  0.00  0.00  0.00   0.0
[21,]  0.00  0.00  0.00  0.00   0.0
[22,]  0.00  0.00  0.00  0.00   0.0
[23,]  0.00  0.00  0.00  0.00   0.0
[24,]  0.00  0.00  0.00  0.00   0.0
[25,]  0.00  0.00  0.00  0.00   0.0
[26,]  0.00  0.00  0.00  0.00   0.0
      [,36] [,37] [,38]
 [1,]  0.00  0.00  0.00
 [2,]  0.00  0.00  0.00
 [3,]  0.00  0.00  0.00
 [4,]  0.00  0.00  0.00
 [5,]  0.00  0.00  0.00
 [6,]  0.00  0.00  0.00
 [7,]  0.00  0.00  0.00
 [8,]  0.00  0.00  0.00
 [9,]  0.00  0.00  0.00
[10,]  0.00  0.00  0.00
[11,]  0.00  0.00  0.00
[12,]  0.00  0.00  0.00
[13,]  0.00  0.00  0.00
[14,]  0.00  0.00  0.00
[15,]  0.00  0.00  0.00
[16,]  0.00  0.00  0.00
[17,]  0.00  0.00  0.00
[18,]  0.00  0.00  0.00
[19,]  0.00  0.00  0.00
[20,]  0.00  0.00  0.00
[21,]  0.00  0.00  0.00
[22,]  0.00  0.00  0.00
[23,]  0.00  0.00  0.00
[24,]  0.00  0.00  0.00
[25,]  0.00  0.00  0.00
[26,]  0.00  0.00  0.00
 [ reached 'max' / getOption("max.print") -- omitted 12 rows ]

$x_bar_w
       [,1]
x1 73.88530
x2 65.39059
x3 17.00938

$S_w
          x1        x2        x3
x1  38.16362 -37.75105 -27.15386
x2 -37.75105  41.10767  29.16587
x3 -27.15386  29.16587  21.14757

$s_w
      x1       x2       x3 
6.177671 6.411527 4.598649 

$R_w
           [,1]       [,2]       [,3]
[1,]  1.0000000 -0.9531095 -0.9558207
[2,] -0.9531095  1.0000000  0.9891979
[3,] -0.9558207  0.9891979  1.0000000

Tampilkan vektor mean tertimbang

Panggil$x_bar_w
       [,1]
x1 73.88530
x2 65.39059
x3 17.00938

Tampilkan matriks varians-kovarians tertimbang

Panggil$S_w
          x1        x2        x3
x1  38.16362 -37.75105 -27.15386
x2 -37.75105  41.10767  29.16587
x3 -27.15386  29.16587  21.14757

Tampilkan vektor standar deviasi tertimbang

Panggil$s_w
      x1       x2       x3 
6.177671 6.411527 4.598649 

Tampilkan matriks korelasi tertimbang

Panggil$R_w
           [,1]       [,2]       [,3]
[1,]  1.0000000 -0.9531095 -0.9558207
[2,] -0.9531095  1.0000000  0.9891979
[3,] -0.9558207  0.9891979  1.0000000

Data visualisasi dan Analisis serta interpretasi

Visualisasi Data Scatter Plot

Variabel x1 dan x2

plot(df$x1, df$x2, main = "Antara x1 dan x2", xlab = "x1", ylab = "x2")

Variabel x1 dan x3

plot(df$x1, df$x3, main = "Antara x1 dan x3", xlab = "x1", ylab = "x3")

Variabel x2 dan x3

plot(df$x2, df$x3, main = "Antara x2 dan x3", xlab = "x2", ylab = "x3")

Interpretasi dan Analisis Scatter Plot

Scatter plot menunjukkan hubungan antara pasangan variabel x1 dengan x2, x1 dengan x3, dan x2 dengan x3. Setiap titik pada grafik merepresentasikan satu observasi data. Jika titik-titik membentuk pola tertentu, misalnya cenderung naik, maka hal tersebut menunjukkan adanya hubungan (korelasi) antar variabel. Sebaliknya, jika titik-titik tersebar secara acak, maka hubungan antar variabel cenderung lemah atau bahkan tidak ada. Dari pola sebaran titik tersebut, dapat dilihat bahwa kekuatan hubungan antar variabel bisa berbeda-beda.

Analisis x1 dan x2 :

Pola ini membentuk kecenderungan menurun (dari kiri atas ke kanan bawah), sehingga menunjukkan adanya hubungan negatif (korelasi negatif) antara x1 dan x2. Artinya, jika x1 meningkat maka x2 cenderung menurun, dan sebaliknya.

Analisis x1 dan x3 :

Pola titik membentuk kecenderungan menurun secara cukup jelas yang menunjukkan adanya hubungan negatif antara x1 dan x3.

Analisis x2 dan x3 :

Pola titik membentuk kecenderungan menaik (dari kiri bawah ke kanan atas), sehingga hal ini menunjukkan adanya hubungan positif antara x2 dan x3.

Boxplot

boxplot(df[c("x1","x2","x3")], 
        main = "Boxplot Antara Variabel",
        xlab = "Variabel",
        ylab = "Nilai")

Interpretasi dan Analisis Boxplot

Variabel x1 memiliki distribusi yang paling stabil, ditunjukkan oleh rentang data yang relatif sempit dan median yang berada di sekitar nilai tengah. Hal ini menunjukkan bahwa nilai x1 antar wilayah tidak terlalu bervariasi dan cenderung konsisten.

Variabel x2 memiliki sebaran yang lebih luas dibanding x1, dengan rentang nilai yang lebih besar. Hal ini menunjukkan bahwa nilai x2 lebih beragam dibanding x1.

Variabel x3 memiliki sebaran paling besar, dengan rentang nilai yang cukup lebar. Median berada di sekitar 20, namun terdapat beberapa nilai yang jauh lebih tinggi dari sebagian besar data. Ini menunjukkan bahwa variabel x3 memiliki variabilitas paling tinggi dan cenderung memiliki nilai ekstrem.

Secara keseluruhan, perbandingan boxplot menunjukkan bahwa: x1 → paling stabil, x2 → variasi sedang, x3 → paling heterogen (paling bervariasi)

LS0tDQp0aXRsZTogIlNhYnJpbmEgT3dueWEgUHJpeWFuZGkgSXN0aXFvbWFoIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQoNCi0tLQ0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgS29tcHV0YXNpIFN0YXRpc3Rpa2EsIEtlbGFzIEQNCiMgUHJvZGkgUzEgU3RhdGlzdGlrYSBGU0FEIElUUyAtIFNlbWVzdGVyIEdlbmFwIDIwMjUvMjAyNg0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgTmFtYSAgOiBTYWJyaW5hIE93bnlhIFByaXlhbmRpIElzdGlxb21haA0KIyBOUlAgICA6IDUwMDMyNTExMzINCiMgS2VsYXMgOiBEDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyBTb2FsIDEgLSBXaW5zb3JpemVkIE1lYW4NCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCmBgYHtyfQ0KIyBEYXRhDQp4IDwtIGMoMTIsIDQ1LCA1MiwgNTgsIDYxLCA2MywgNjcsIDcwLCA3MiwgNzUsIDc4LCA4MiwgODgsIDk1LCAzMTApDQpgYGANCg0KIyAtLS0gW2FdIEJ1YXRsYWggZnVuZ3NpIHdpbnNvcml6ZWRfbWVhbih4LCBhbHBoYSkgLS0tDQpgYGB7cn0NCndpbnNvcml6ZWRfbWVhbiA8LSBmdW5jdGlvbih4LCBhbHBoYSkgew0KICBuIDwtIGxlbmd0aCAoeCkNCiAgayA8LSBmbG9vcihuKmFscGhhKQ0KICBqdW1sYWggPC0gIDANCiAgDQogIGZvcihpIGluIDE6bil7DQogICBpZihpPD0gayl7DQogICAgIGp1bWxhaCA8LSBqdW1sYWggKyB4W2srMV0NCiAgIH0gZWxzZSBpZiAoazxpICYmIGk8PShuLWspKXsNCiAgICAganVtbGFoIDwtICBqdW1sYWggKyB4W2ldDQogICB9IGVsc2Ugew0KICAgICBqdW1sYWggPC0gIGp1bWxhaCAreFtuLWtdDQogICB9DQogIH0NCiAgcmF0YXJhdGE9anVtbGFoL24NCiAgcmV0dXJuKHJhdGFyYXRhKQ0KfQ0KYGBgDQojIC0tLSBbYl0gSGl0dW5nIG9yZGluYXJ5IG1lYW4gKGFscGhhPTApIGRhbiBXaW5zb3JpemVkIG1lYW4gMjAlIChhbHBoYT0wLjIpIC0tLQ0KYGBge3J9DQojIE9yZGluYXJ5IG1lYW4NCm9yZGluYXJ5IDwtIHdpbnNvcml6ZWRfbWVhbiAoeCwgMCkNCm9yZGluYXJ5DQpgYGANCg0KYGBge3J9DQojIFdpbnNvcml6ZWQgbWVhbiAyMCUNCndpbnNvcml6ZWQgPC0gd2luc29yaXplZF9tZWFuICh4LCAwLjIpDQp3aW5zb3JpemVkDQpgYGANCiMjIERhdGEgdmlzdWFsaXNhc2kgZGFuIEFuYWxpc2lzIHNlcnRhIGludGVycHJldGFzaQ0KIyBEYXRhIFZpc3VhbGlzYXNpIEhpc3RvZ3JhbQ0KYGBge3J9DQojIERhdGEgVmlzdWFsaXNhc2kgSGlzdG9ncmFtDQpoaXN0KHgsIG1haW4gPSAiSGlzdG9ncmFtIERhdGEgWCIsIHhsYWIgPSAieCIpDQpgYGANCiMgSW50ZXJwcmV0YXNpIGRhbiBBbmFsaXNpcyBIaXN0b2dyYW0gRGF0YSBYDQpTZWJhZ2lhbiBiZXNhciBkYXRhIGJlcmFkYSBwYWRhIHJlbnRhbmcgNTDigJMxMDAgc2VoaW5nZ2EgZGFwYXQgZGlhbmdnYXAgc2ViYWdhaSBwdXNhdCBkYXRhLiBOYW11biwgdGVyZGFwYXQgYmViZXJhcGEgbmlsYWkgeWFuZyBqYXVoIGxlYmloIGJlc2FyIGRpIHNpc2kga2FuYW4geWFuZyBtZW1idWF0IGRpc3RyaWJ1c2kgdGlkYWsgc2ltZXRyaXMgZGFuIGNlbmRlcnVuZyBtaXJpbmcga2Uga2FuYW4gKHJpZ2h0LXNrZXdlZCkuIEtlbWlyaW5nYW4gaW5pIG1lbnVuanVra2FuIGFkYW55YSBuaWxhaSBla3N0cmVtIChvdXRsaWVyKSB5YW5nIGphdWggbGViaWggYmVzYXIgZGliYW5kaW5na2FuIGRhdGEgbGFpbm55YS4gQWtpYmF0bnlhLCBuaWxhaSBla3N0cmVtIHRlcnNlYnV0IG1lbnllYmFia2FuIHJhdGEtcmF0YSAobWVhbikgbWVuamFkaSBsZWJpaCBiZXNhciBkYW4ga3VyYW5nIG1ld2FraWxpIHB1c2F0IGRhdGEgeWFuZyBzZWJlbmFybnlhLg0KDQojIERhdGEgVmlzdWFsaXNhc2kgQm94cGxvdA0KYGBge3J9DQojIERhdGEgVmlzdWFsaXNhc2kgQm94cGxvdA0KYm94cGxvdCh4LCBtYWluID0gIkJveHBsb3QgRGF0YSB4IikNCmBgYA0KIyBJbnRlcnByZXRhc2kgZGFuIEFuYWxpc2lzIEJveHBsb3QgRGF0YSBYDQpNZWRpYW4gYmVyYWRhIHBhZGEga2lzYXJhbiA2MOKAkzcwIHNlaGluZ2dhIGRhcGF0IG1ld2FraWxpIHB1c2F0IGRhdGEuIEJlbnR1ayBib3hwbG90IHlhbmcgbGViaWggcGFuamFuZyBrZSBhcmFoIGF0YXMgbWVudW5qdWtrYW4gYWRhbnlhIG5pbGFpIHlhbmcgbGViaWggYmVzYXIgZGliYW5kaW5na2FuIG1heW9yaXRhcyBkYXRhLiBUZXJkYXBhdCBuaWxhaSBla3N0cmVtIHlhbmcgdGVybGloYXQgcGFkYSBiYWdpYW4gYXRhcyBib3hwbG90LCB5YWl0dSBuaWxhaSB5YW5nIGphdWggbGViaWggYmVzYXIgZGliYW5kaW5na2FuIGRhdGEgbGFpbm55YS4gSGFsIGluaSBtZW55ZWJhYmthbiBtZWFuIGxlYmloIG11ZGFoIHRlcnBlbmdhcnVoIG9sZWggbmlsYWkgYmVzYXIgdGVyc2VidXQsIHNlZGFuZ2thbiBtZWRpYW4gY2VuZGVydW5nIGxlYmloIHN0YWJpbCBkYWxhbSBtZXJlcHJlc2VudGFzaWthbiBwdXNhdCBkYXRhLg0KDQoNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIFNvYWwgMiAtIFdlaWdodGVkIE11bHRpdmFyaWF0ZSBEZXNjcmlwdGl2ZSBTdGF0aXN0aWNzDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KYGBge3J9DQojIC0tLSBCYWNhIGRhdGEgQ1NWIC0tLQ0KcXVpeiA8LSByZWFkLmNzdigiQzovVXNlcnMvT3dueWEvRG93bmxvYWRzL1F1aXogMSBLb21zdGF0L2RhdGFfcXVpejEuY3N2IikNClggPC0gYXMubWF0cml4KHF1aXpbYygieDEiLCAieDIiLCAieDMiKV0pDQp3IDwtIHF1aXokdw0KYGBgDQojIC0tLSBbYV0gQnVhdGxhaCBmdW5nc2kgd2VpZ2h0ZWRfY29ycihYLCB3KSAtLS0NCmBgYHtyfQ0KIyBmdW5nc2kgd2VpZ2h0ZWRfY29ycg0Kd2VpZ2h0ZWRfY29yciA8LSBmdW5jdGlvbihYLCB3KSB7DQogIG4gPC0gbGVuZ3RoKHcpDQogIFcgPC0gZGlhZyh3KQ0KICBqdW1sYWggPC0gMA0KICBmb3IoaSBpbiAxOm4pew0KICAgIGp1bWxhaCA8LSBqdW1sYWggKyB3W2ldDQogIH0NCiAgbl93IDwtIGp1bWxhaA0KICB2ZWN0IDwtIHJlcCgxLCBuKQ0KICB4X2Jhcl93IDwtICh0KFgpICUqJSBXICUqJSB2ZWN0KSAvIG5fdw0KICBEIDwtIFgtKHZlY3QgJSolIHQoeF9iYXJfdykpDQogIFNfdyA8LSAodChEKSAlKiUgVyAlKiUgRCkvbl93DQogIHNfdyA8LSBzcXJ0KGRpYWcoU193KSkNCiAgViA8LSBkaWFnKHNfdykNCiAgUl93IDwtIHNvbHZlKFYpICUqJSBTX3cgJSolIHNvbHZlKFYpDQogIHJldHVybihsaXN0KA0KICAgIFcgPSBXLA0KICAgIHhfYmFyX3cgPSB4X2Jhcl93LA0KICAgIFNfdyA9IFNfdywNCiAgICBzX3cgPSBzX3csDQogICAgUl93ID0gUl93DQogICkpDQp9DQpgYGANCiMgLS0tIFtiXSBBcGxpa2FzaWthbiBmdW5nc2kgcGFkYSBkYXRhIC0tLQ0KYGBge3J9DQojIFBhbmdnaWwgZnVuZ3NpDQpQYW5nZ2lsIDwtIHdlaWdodGVkX2NvcnIoWCx3KQ0KUGFuZ2dpbA0KYGBgDQojIFRhbXBpbGthbiB2ZWt0b3IgbWVhbiB0ZXJ0aW1iYW5nDQpgYGB7cn0NClBhbmdnaWwkeF9iYXJfdw0KYGBgDQojIFRhbXBpbGthbiBtYXRyaWtzIHZhcmlhbnMta292YXJpYW5zIHRlcnRpbWJhbmcNCmBgYHtyfQ0KUGFuZ2dpbCRTX3cNCmBgYA0KIyBUYW1waWxrYW4gdmVrdG9yIHN0YW5kYXIgZGV2aWFzaSB0ZXJ0aW1iYW5nDQpgYGB7cn0NClBhbmdnaWwkc193DQpgYGANCiMgVGFtcGlsa2FuIG1hdHJpa3Mga29yZWxhc2kgdGVydGltYmFuZw0KYGBge3J9DQpQYW5nZ2lsJFJfdw0KYGBgDQojICBEYXRhIHZpc3VhbGlzYXNpIGRhbiBBbmFsaXNpcyBzZXJ0YSBpbnRlcnByZXRhc2kNCiMgVmlzdWFsaXNhc2kgRGF0YSBTY2F0dGVyIFBsb3QNCiMgVmFyaWFiZWwgeDEgZGFuIHgyDQpgYGB7cn0NCnBsb3QoZGYkeDEsIGRmJHgyLCBtYWluID0gIkFudGFyYSB4MSBkYW4geDIiLCB4bGFiID0gIngxIiwgeWxhYiA9ICJ4MiIpDQpgYGANCiMgVmFyaWFiZWwgeDEgZGFuIHgzDQpgYGB7cn0NCnBsb3QoZGYkeDEsIGRmJHgzLCBtYWluID0gIkFudGFyYSB4MSBkYW4geDMiLCB4bGFiID0gIngxIiwgeWxhYiA9ICJ4MyIpDQpgYGANCiMgVmFyaWFiZWwgeDIgZGFuIHgzDQpgYGB7cn0NCnBsb3QoZGYkeDIsIGRmJHgzLCBtYWluID0gIkFudGFyYSB4MiBkYW4geDMiLCB4bGFiID0gIngyIiwgeWxhYiA9ICJ4MyIpDQpgYGANCiMgSW50ZXJwcmV0YXNpIGRhbiBBbmFsaXNpcyBTY2F0dGVyIFBsb3QNClNjYXR0ZXIgcGxvdCBtZW51bmp1a2thbiBodWJ1bmdhbiBhbnRhcmEgcGFzYW5nYW4gdmFyaWFiZWwgeDEgZGVuZ2FuIHgyLCB4MSBkZW5nYW4geDMsIGRhbiB4MiBkZW5nYW4geDMuIFNldGlhcCB0aXRpayBwYWRhIGdyYWZpayBtZXJlcHJlc2VudGFzaWthbiBzYXR1IG9ic2VydmFzaSBkYXRhLiBKaWthIHRpdGlrLXRpdGlrIG1lbWJlbnR1ayBwb2xhIHRlcnRlbnR1LCBtaXNhbG55YSBjZW5kZXJ1bmcgbmFpaywgbWFrYSBoYWwgdGVyc2VidXQgbWVudW5qdWtrYW4gYWRhbnlhIGh1YnVuZ2FuIChrb3JlbGFzaSkgYW50YXIgdmFyaWFiZWwuIFNlYmFsaWtueWEsIGppa2EgdGl0aWstdGl0aWsgdGVyc2ViYXIgc2VjYXJhIGFjYWssIG1ha2EgaHVidW5nYW4gYW50YXIgdmFyaWFiZWwgY2VuZGVydW5nIGxlbWFoIGF0YXUgYmFoa2FuIHRpZGFrIGFkYS4gRGFyaSBwb2xhIHNlYmFyYW4gdGl0aWsgdGVyc2VidXQsIGRhcGF0IGRpbGloYXQgYmFod2Ega2VrdWF0YW4gaHVidW5nYW4gYW50YXIgdmFyaWFiZWwgYmlzYSBiZXJiZWRhLWJlZGEuDQoNCiMgQW5hbGlzaXMgeDEgZGFuIHgyIDogDQpQb2xhIGluaSBtZW1iZW50dWsga2VjZW5kZXJ1bmdhbiBtZW51cnVuIChkYXJpIGtpcmkgYXRhcyBrZSBrYW5hbiBiYXdhaCksIHNlaGluZ2dhIG1lbnVuanVra2FuIGFkYW55YSBodWJ1bmdhbiBuZWdhdGlmIChrb3JlbGFzaSBuZWdhdGlmKSBhbnRhcmEgeDEgZGFuIHgyLiBBcnRpbnlhLCBqaWthIHgxIG1lbmluZ2thdCBtYWthIHgyIGNlbmRlcnVuZyBtZW51cnVuLCBkYW4gc2ViYWxpa255YS4NCg0KIyBBbmFsaXNpcyB4MSBkYW4geDMgOiANClBvbGEgdGl0aWsgbWVtYmVudHVrIGtlY2VuZGVydW5nYW4gbWVudXJ1biBzZWNhcmEgY3VrdXAgamVsYXMgeWFuZyBtZW51bmp1a2thbiBhZGFueWEgaHVidW5nYW4gbmVnYXRpZiBhbnRhcmEgeDEgZGFuIHgzLg0KDQojIEFuYWxpc2lzIHgyIGRhbiB4MyA6IA0KUG9sYSB0aXRpayBtZW1iZW50dWsga2VjZW5kZXJ1bmdhbiBtZW5haWsgKGRhcmkga2lyaSBiYXdhaCBrZSBrYW5hbiBhdGFzKSwgc2VoaW5nZ2EgaGFsIGluaSBtZW51bmp1a2thbiBhZGFueWEgaHVidW5nYW4gcG9zaXRpZiBhbnRhcmEgeDIgZGFuIHgzLg0KDQojIEJveHBsb3QNCmBgYHtyfQ0KYm94cGxvdChkZltjKCJ4MSIsIngyIiwieDMiKV0sIA0KICAgICAgICBtYWluID0gIkJveHBsb3QgQW50YXJhIFZhcmlhYmVsIiwNCiAgICAgICAgeGxhYiA9ICJWYXJpYWJlbCIsDQogICAgICAgIHlsYWIgPSAiTmlsYWkiKQ0KYGBgDQojIEludGVycHJldGFzaSBkYW4gQW5hbGlzaXMgQm94cGxvdA0KVmFyaWFiZWwgeDEgbWVtaWxpa2kgZGlzdHJpYnVzaSB5YW5nIHBhbGluZyBzdGFiaWwsIGRpdHVuanVra2FuIG9sZWggcmVudGFuZyBkYXRhIHlhbmcgcmVsYXRpZiBzZW1waXQgZGFuIG1lZGlhbiB5YW5nIGJlcmFkYSBkaSBzZWtpdGFyIG5pbGFpIHRlbmdhaC4gSGFsIGluaSBtZW51bmp1a2thbiBiYWh3YSBuaWxhaSB4MSBhbnRhciB3aWxheWFoIHRpZGFrIHRlcmxhbHUgYmVydmFyaWFzaSBkYW4gY2VuZGVydW5nIGtvbnNpc3Rlbi4NCg0KVmFyaWFiZWwgeDIgbWVtaWxpa2kgc2ViYXJhbiB5YW5nIGxlYmloIGx1YXMgZGliYW5kaW5nIHgxLCBkZW5nYW4gcmVudGFuZyBuaWxhaSB5YW5nIGxlYmloIGJlc2FyLiBIYWwgaW5pIG1lbnVuanVra2FuIGJhaHdhIG5pbGFpIHgyIGxlYmloIGJlcmFnYW0gZGliYW5kaW5nIHgxLg0KDQpWYXJpYWJlbCB4MyBtZW1pbGlraSBzZWJhcmFuIHBhbGluZyBiZXNhciwgZGVuZ2FuIHJlbnRhbmcgbmlsYWkgeWFuZyBjdWt1cCBsZWJhci4gTWVkaWFuIGJlcmFkYSBkaSBzZWtpdGFyIDIwLCBuYW11biB0ZXJkYXBhdCBiZWJlcmFwYSBuaWxhaSB5YW5nIGphdWggbGViaWggdGluZ2dpIGRhcmkgc2ViYWdpYW4gYmVzYXIgZGF0YS4gSW5pIG1lbnVuanVra2FuIGJhaHdhIHZhcmlhYmVsIHgzIG1lbWlsaWtpIHZhcmlhYmlsaXRhcyBwYWxpbmcgdGluZ2dpIGRhbiBjZW5kZXJ1bmcgbWVtaWxpa2kgbmlsYWkgZWtzdHJlbS4NCg0KU2VjYXJhIGtlc2VsdXJ1aGFuLCBwZXJiYW5kaW5nYW4gYm94cGxvdCBtZW51bmp1a2thbiBiYWh3YToNCngxIOKGkiBwYWxpbmcgc3RhYmlsLA0KeDIg4oaSIHZhcmlhc2kgc2VkYW5nLA0KeDMg4oaSIHBhbGluZyBoZXRlcm9nZW4gKHBhbGluZyBiZXJ2YXJpYXNpKQ0K