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

TEMPLATE JAWABAN KUIS

Komputasi Statistika, Kelas D

Prodi S1 Statistika FSAD ITS - Semester Genap 2025/2026

Kamis, 12 Maret 2026

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

Nama : RAYYA MAULIDYA

NRP : 5003251136

Kelas : Komputasi Statistika D

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

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

Soal 1 [TOTAL 50 poin] - Winsorized Mean

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

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

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

winsorized_mean <- function(x, alpha) {
  n <- length(x)
  k <- floor(n*alpha)
  SUM <- 0
  
  for(i in 1:n){
    if(i<=k){
      Y = x[k+1]
    }
    else if(k < i && i <= n-k){
      Y = x[i]
    }
    else if( i > n-k){
      Y = x[n-k]
    }
    SUM = SUM + Y
  }
  return(SUM/n)
}
— [b] Hitung ordinary mean (alpha=0) dan Winsorized mean 20% (alpha=0.2) —
Ordinary mean
winsorized_mean(x, 0)
[1] 81.86667
Winsorized mean 20%
winsorized_mean(x, 0.2)
[1] 69.73333
Visualisasi Data Soal 1

#Interpretasi
#Data menunjukkan pola meningkat secara bertahap, di mana sebagian besar nilai berada pada kisaran yang relatif dekat dan stabil. Namun, terdapat satu nilai terakhir yang sangat tinggi (outlier) dibandingkan data lainnya. Akibatnya, distribusi data menjadi tidak merata, dan nilai ekstrem tersebut dapat memengaruhi rata-rata secara signifikan.

#Interpretasi
#Penyebaran data terlihat tidak merata, di mana sebagian besar titik terkumpul pada rentang nilai yang relatif sempit (sekitar 40–100) sehingga menunjukkan variabilitas yang rendah dan data yang saling berdekatan, namun adanya satu nilai yang sangat tinggi menyebabkan penyebaran menjadi jauh lebih luas, sehingga secara keseluruhan data tampak memiliki variansi yang besar meskipun hal tersebut terutama dipengaruhi oleh satu titik ekstrem (outlier).

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

Soal 2 [TOTAL 60 poin] - Weighted Multivariate Descriptive Statistics

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

— Baca data CSV —

df <- read.csv("C:/Users/ASUS/Downloads/Quiz 1 Komstat (1)/data_quiz1.csv")
X <- as.matrix(df[, c("x1", "x2", "x3")])
w <- df$w
— [a] Buatlah fungsi weighted_corr(X, w) —

weighted_corr <- function(X, w) {
  W = diag(w)
  n = length(w)
  SUM = 0
  
  for(i in 1:n){
    SUM = SUM + w[i]
  }
  
  nw <- SUM
  
  satu <- rep(1,n)
  
  xbarW = (t(X)%*%W%*%satu)/nw
  
  D = X - (satu%*%t(xbarW))
  
  Sw = (t(D)%*%W%*%D)/nw
  
  sw = sqrt(diag(Sw))
  
  V = diag(sw)
  
  Rw = solve(V)%*%Sw%*%solve(V)
  
  return(list(
    W = W,
    xbarW = xbarW,
    Sw = Sw,
    sw = sw,
    Rw = Rw
  ))
}
— [b] Aplikasikan fungsi pada data —
weighted_corr(X, w)
$W
       [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]
 [1,] 14.34  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [2,]  0.00 14.19  0.00  0.00  0.00  0.00  0.00  0.00
 [3,]  0.00  0.00 12.49  0.00  0.00  0.00  0.00  0.00
 [4,]  0.00  0.00  0.00 11.45  0.00  0.00  0.00  0.00
 [5,]  0.00  0.00  0.00  0.00 17.45  0.00  0.00  0.00
 [6,]  0.00  0.00  0.00  0.00  0.00 15.24  0.00  0.00
 [7,]  0.00  0.00  0.00  0.00  0.00  0.00 34.73  0.00
 [8,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00 17.97
 [9,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[10,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[11,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[12,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[13,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[14,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[15,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[16,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[17,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[18,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[19,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[20,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[21,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[22,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[23,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[24,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[25,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[26,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
       [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16]
 [1,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [2,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [3,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [4,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [5,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [6,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [7,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [8,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [9,] 33.13  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[10,]  0.00 35.93  0.00  0.00  0.00  0.00  0.00  0.00
[11,]  0.00  0.00 15.55  0.00  0.00  0.00  0.00  0.00
[12,]  0.00  0.00  0.00 16.54  0.00  0.00  0.00  0.00
[13,]  0.00  0.00  0.00  0.00 17.25  0.00  0.00  0.00
[14,]  0.00  0.00  0.00  0.00  0.00 14.93  0.00  0.00
[15,]  0.00  0.00  0.00  0.00  0.00  0.00  7.24  0.00
[16,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  9.85
[17,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[18,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[19,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[20,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[21,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[22,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[23,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[24,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[25,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[26,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
      [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24]
 [1,]   0.0  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [2,]   0.0  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [3,]   0.0  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [4,]   0.0  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [5,]   0.0  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [6,]   0.0  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [7,]   0.0  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [8,]   0.0  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [9,]   0.0  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[10,]   0.0  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[11,]   0.0  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[12,]   0.0  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[13,]   0.0  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[14,]   0.0  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[15,]   0.0  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[16,]   0.0  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[17,]  11.1  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[18,]   0.0 12.89  0.00  0.00  0.00  0.00  0.00  0.00
[19,]   0.0  0.00 11.14  0.00  0.00  0.00  0.00  0.00
[20,]   0.0  0.00  0.00  7.06  0.00  0.00  0.00  0.00
[21,]   0.0  0.00  0.00  0.00 13.96  0.00  0.00  0.00
[22,]   0.0  0.00  0.00  0.00  0.00 23.13  0.00  0.00
[23,]   0.0  0.00  0.00  0.00  0.00  0.00 19.74  0.00
[24,]   0.0  0.00  0.00  0.00  0.00  0.00  0.00 17.53
[25,]   0.0  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[26,]   0.0  0.00  0.00  0.00  0.00  0.00  0.00  0.00
      [,25] [,26] [,27] [,28] [,29] [,30] [,31] [,32]
 [1,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [2,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [3,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [4,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [5,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [6,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [7,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [8,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 [9,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[10,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[11,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[12,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[13,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[14,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[15,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[16,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[17,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[18,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[19,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[20,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[21,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[22,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[23,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[24,]  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[25,] 12.56  0.00  0.00  0.00  0.00  0.00  0.00  0.00
[26,]  0.00 13.01  0.00  0.00  0.00  0.00  0.00  0.00
      [,33] [,34] [,35] [,36] [,37] [,38]
 [1,]  0.00  0.00   0.0  0.00  0.00  0.00
 [2,]  0.00  0.00   0.0  0.00  0.00  0.00
 [3,]  0.00  0.00   0.0  0.00  0.00  0.00
 [4,]  0.00  0.00   0.0  0.00  0.00  0.00
 [5,]  0.00  0.00   0.0  0.00  0.00  0.00
 [6,]  0.00  0.00   0.0  0.00  0.00  0.00
 [7,]  0.00  0.00   0.0  0.00  0.00  0.00
 [8,]  0.00  0.00   0.0  0.00  0.00  0.00
 [9,]  0.00  0.00   0.0  0.00  0.00  0.00
[10,]  0.00  0.00   0.0  0.00  0.00  0.00
[11,]  0.00  0.00   0.0  0.00  0.00  0.00
[12,]  0.00  0.00   0.0  0.00  0.00  0.00
[13,]  0.00  0.00   0.0  0.00  0.00  0.00
[14,]  0.00  0.00   0.0  0.00  0.00  0.00
[15,]  0.00  0.00   0.0  0.00  0.00  0.00
[16,]  0.00  0.00   0.0  0.00  0.00  0.00
[17,]  0.00  0.00   0.0  0.00  0.00  0.00
[18,]  0.00  0.00   0.0  0.00  0.00  0.00
[19,]  0.00  0.00   0.0  0.00  0.00  0.00
[20,]  0.00  0.00   0.0  0.00  0.00  0.00
[21,]  0.00  0.00   0.0  0.00  0.00  0.00
[22,]  0.00  0.00   0.0  0.00  0.00  0.00
[23,]  0.00  0.00   0.0  0.00  0.00  0.00
[24,]  0.00  0.00   0.0  0.00  0.00  0.00
[25,]  0.00  0.00   0.0  0.00  0.00  0.00
[26,]  0.00  0.00   0.0  0.00  0.00  0.00
 [ reached 'max' / getOption("max.print") -- omitted 12 rows ]

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

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

$sw
      x1       x2       x3 
6.177671 6.411527 4.598649 

$Rw
           [,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
xbarW
       [,1]
x1 73.88530
x2 65.39059
x3 17.00938
Tampilkan matriks varians-kovarians tertimbang
Sw
          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
sw
      x1       x2       x3 
6.177671 6.411527 4.598649 
Tampilkan matriks korelasi tertimbang
Rw
           [,1]       [,2]       [,3]
[1,]  1.0000000 -0.9531095 -0.9558207
[2,] -0.9531095  1.0000000  0.9891979
[3,] -0.9558207  0.9891979  1.0000000
Visualisasi Data dari Soal 2
X1 = df$x1
X2 = df$x2
X3 = df$x3

min(X1) #54
max(X1) #86

min(X2) #55
max(X2) #85

min(X3) #10
max(X3) #32.5

mean(X1) #71.73684
median(X1) #73.5
as.numeric(names(which.max(table(X1)))) #74

mean(X2) #67.31579
median(X2) #66
as.numeric(names(which.max(table(X2)))) #55

mean(X3) #18.67105
median(X3) #16.65
as.numeric(names(which.max(table(X3)))) #10
Visualisasi Data X1 dan X2 Menggunakan Boxplot

Visualisasi Data X3 menggunakan Boxplot

#Interpretasi
#Berdasarkan visualisasi boxplot, variabel X1 memiliki median yang lebih tinggi dibandingkan X2, yang menunjukkan bahwa secara umum nilai pada X1 cenderung lebih besar daripada X2, meskipun rentang data keduanya relatif mirip dan tidak terlihat adanya outlier. Sementara itu, variabel X3 memiliki rentang nilai yang jauh lebih kecil dibandingkan X1 dan X2, dengan median sekitar 16–17 serta sebagian besar data berada pada kisaran nilai yang lebih rendah. Oleh karena itu, X3 divisualisasikan secara terpisah agar distribusi datanya dapat terlihat dengan lebih jelas dan tidak terdistorsi oleh skala yang lebih besar pada X1 dan X2. Secara keseluruhan, dapat disimpulkan bahwa X1 memiliki kecenderungan nilai tertinggi, diikuti oleh X2, sedangkan X3 memiliki skala nilai yang paling rendah di antara ketiga variabel tersebut.

#Interpretasi
#Visualisasi tersebut merupakan heatmap korelasi antara variabel X1, X2, dan X3. Nilai korelasi berkisar antara -1 sampai 1, di mana warna biru menunjukkan korelasi positif kuat dan warna merah menunjukkan korelasi negatif kuat. Terlihat bahwa X1 memiliki korelasi negatif yang sangat kuat dengan X2 (-0,97) dan X3 (-0,98), yang berarti ketika nilai X1 meningkat maka nilai X2 dan X3 cenderung menurun. Sementara itu, X2 dan X3 memiliki korelasi positif yang sangat kuat (0,99), yang menunjukkan bahwa kedua variabel tersebut bergerak searah, sehingga ketika X2 meningkat maka X3 juga cenderung meningkat. Secara keseluruhan, hubungan antar variabel sangat kuat karena nilai korelasinya mendekati 1.
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KIyMjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyMjIFRFTVBMQVRFIEpBV0FCQU4gS1VJUw0KIyMjIEtvbXB1dGFzaSBTdGF0aXN0aWthLCBLZWxhcyBEDQojIyMgUHJvZGkgUzEgU3RhdGlzdGlrYSBGU0FEIElUUyAtIFNlbWVzdGVyIEdlbmFwIDIwMjUvMjAyNg0KIyMjIEthbWlzLCAxMiBNYXJldCAyMDI2DQojIyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIyMgTmFtYSAgOiBSQVlZQSBNQVVMSURZQQ0KIyMjIE5SUCAgIDogNTAwMzI1MTEzNg0KIyMjIEtlbGFzIDogS29tcHV0YXNpIFN0YXRpc3Rpa2EgRA0KIyMjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQojIyMjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyMjIyBTb2FsIDEgW1RPVEFMIDUwIHBvaW5dIC0gV2luc29yaXplZCBNZWFuDQojIyMjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQojIyMjIyAtLS0gW2FdIEJ1YXRsYWggZnVuZ3NpIHdpbnNvcml6ZWRfbWVhbih4LCBhbHBoYSkgLS0tDQpgYGB7cn0NCg0KIyBEYXRhDQp4IDwtIGMoMTIsIDQ1LCA1MiwgNTgsIDYxLCA2MywgNjcsIDcwLCA3MiwgNzUsIDc4LCA4MiwgODgsIDk1LCAzMTApDQoNCndpbnNvcml6ZWRfbWVhbiA8LSBmdW5jdGlvbih4LCBhbHBoYSkgew0KICBuIDwtIGxlbmd0aCh4KQ0KICBrIDwtIGZsb29yKG4qYWxwaGEpDQogIFNVTSA8LSAwDQogIA0KICBmb3IoaSBpbiAxOm4pew0KICAgIGlmKGk8PWspew0KICAgICAgWSA9IHhbaysxXQ0KICAgIH0NCiAgICBlbHNlIGlmKGsgPCBpICYmIGkgPD0gbi1rKXsNCiAgICAgIFkgPSB4W2ldDQogICAgfQ0KICAgIGVsc2UgaWYoIGkgPiBuLWspew0KICAgICAgWSA9IHhbbi1rXQ0KICAgIH0NCiAgICBTVU0gPSBTVU0gKyBZDQogIH0NCiAgcmV0dXJuKFNVTS9uKQ0KfQ0KDQpgYGANCg0KDQojIyMjIyAtLS0gW2JdIEhpdHVuZyBvcmRpbmFyeSBtZWFuIChhbHBoYT0wKSBkYW4gV2luc29yaXplZCBtZWFuIDIwJSAoYWxwaGE9MC4yKSAtLS0NCiMjIyMjIE9yZGluYXJ5IG1lYW4NCmBgYHtyfQ0KDQp3aW5zb3JpemVkX21lYW4oeCwgMCkNCg0KYGBgDQoNCg0KIyMjIyMgV2luc29yaXplZCBtZWFuIDIwJQ0KYGBge3J9DQoNCndpbnNvcml6ZWRfbWVhbih4LCAwLjIpDQoNCmBgYA0KDQoNCiMjIyMjIFZpc3VhbGlzYXNpIERhdGEgU29hbCAxDQpgYGB7cn0NCmJhcnBsb3QoeCwNCiAgICAgICAgY29sID0gInBpbmsiLA0KKQ0KYGBgDQpgYGB7cn0NCiNJbnRlcnByZXRhc2kNCiNEYXRhIG1lbnVuanVra2FuIHBvbGEgbWVuaW5na2F0IHNlY2FyYSBiZXJ0YWhhcCwgZGkgbWFuYSBzZWJhZ2lhbiBiZXNhciBuaWxhaSBiZXJhZGEgcGFkYSBraXNhcmFuIHlhbmcgcmVsYXRpZiBkZWthdCBkYW4gc3RhYmlsLiBOYW11biwgdGVyZGFwYXQgc2F0dSBuaWxhaSB0ZXJha2hpciB5YW5nIHNhbmdhdCB0aW5nZ2kgKG91dGxpZXIpIGRpYmFuZGluZ2thbiBkYXRhIGxhaW5ueWEuIEFraWJhdG55YSwgZGlzdHJpYnVzaSBkYXRhIG1lbmphZGkgdGlkYWsgbWVyYXRhLCBkYW4gbmlsYWkgZWtzdHJlbSB0ZXJzZWJ1dCBkYXBhdCBtZW1lbmdhcnVoaSByYXRhLXJhdGEgc2VjYXJhIHNpZ25pZmlrYW4uDQpgYGANCg0KYGBge3J9DQpwbG90KHgsDQogICAgIGNvbCA9ICJtYXJvb24iDQopDQpgYGANCmBgYHtyfQ0KI0ludGVycHJldGFzaQ0KI1BlbnllYmFyYW4gZGF0YSB0ZXJsaWhhdCB0aWRhayBtZXJhdGEsIGRpIG1hbmEgc2ViYWdpYW4gYmVzYXIgdGl0aWsgdGVya3VtcHVsIHBhZGEgcmVudGFuZyBuaWxhaSB5YW5nIHJlbGF0aWYgc2VtcGl0IChzZWtpdGFyIDQw4oCTMTAwKSBzZWhpbmdnYSBtZW51bmp1a2thbiB2YXJpYWJpbGl0YXMgeWFuZyByZW5kYWggZGFuIGRhdGEgeWFuZyBzYWxpbmcgYmVyZGVrYXRhbiwgbmFtdW4gYWRhbnlhIHNhdHUgbmlsYWkgeWFuZyBzYW5nYXQgdGluZ2dpIG1lbnllYmFia2FuIHBlbnllYmFyYW4gbWVuamFkaSBqYXVoIGxlYmloIGx1YXMsIHNlaGluZ2dhIHNlY2FyYSBrZXNlbHVydWhhbiBkYXRhIHRhbXBhayBtZW1pbGlraSB2YXJpYW5zaSB5YW5nIGJlc2FyIG1lc2tpcHVuIGhhbCB0ZXJzZWJ1dCB0ZXJ1dGFtYSBkaXBlbmdhcnVoaSBvbGVoIHNhdHUgdGl0aWsgZWtzdHJlbSAob3V0bGllcikuDQpgYGANCg0KDQoNCiMjIyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIyMjIFNvYWwgMiBbVE9UQUwgNjAgcG9pbl0gLSBXZWlnaHRlZCBNdWx0aXZhcmlhdGUgRGVzY3JpcHRpdmUgU3RhdGlzdGljcw0KIyMjIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KIyMjIyMgLS0tIEJhY2EgZGF0YSBDU1YgLS0tDQpgYGB7cn0NCg0KZGYgPC0gcmVhZC5jc3YoIkM6L1VzZXJzL0FTVVMvRG93bmxvYWRzL1F1aXogMSBLb21zdGF0ICgxKS9kYXRhX3F1aXoxLmNzdiIpDQpYIDwtIGFzLm1hdHJpeChkZlssIGMoIngxIiwgIngyIiwgIngzIildKQ0KdyA8LSBkZiR3DQoNCmBgYA0KDQoNCiMjIyMjIC0tLSBbYV0gQnVhdGxhaCBmdW5nc2kgd2VpZ2h0ZWRfY29ycihYLCB3KSAtLS0NCmBgYHtyfQ0KDQp3ZWlnaHRlZF9jb3JyIDwtIGZ1bmN0aW9uKFgsIHcpIHsNCiAgVyA9IGRpYWcodykNCiAgbiA9IGxlbmd0aCh3KQ0KICBTVU0gPSAwDQogIA0KICBmb3IoaSBpbiAxOm4pew0KICAgIFNVTSA9IFNVTSArIHdbaV0NCiAgfQ0KICANCiAgbncgPC0gU1VNDQogIA0KICBzYXR1IDwtIHJlcCgxLG4pDQogIA0KICB4YmFyVyA9ICh0KFgpJSolVyUqJXNhdHUpL253DQogIA0KICBEID0gWCAtIChzYXR1JSoldCh4YmFyVykpDQogIA0KICBTdyA9ICh0KEQpJSolVyUqJUQpL253DQogIA0KICBzdyA9IHNxcnQoZGlhZyhTdykpDQogIA0KICBWID0gZGlhZyhzdykNCiAgDQogIFJ3ID0gc29sdmUoViklKiVTdyUqJXNvbHZlKFYpDQogIA0KICByZXR1cm4obGlzdCgNCiAgICBXID0gVywNCiAgICB4YmFyVyA9IHhiYXJXLA0KICAgIFN3ID0gU3csDQogICAgc3cgPSBzdywNCiAgICBSdyA9IFJ3DQogICkpDQp9DQpgYGANCg0KDQojIyMjIyAtLS0gW2JdIEFwbGlrYXNpa2FuIGZ1bmdzaSBwYWRhIGRhdGEgLS0tDQpgYGB7cn0NCg0Kd2VpZ2h0ZWRfY29ycihYLCB3KQ0KDQpgYGANCg0KDQojIyMjIyBUYW1waWxrYW4gdmVrdG9yIG1lYW4gdGVydGltYmFuZw0KYGBge3J9DQoNCnhiYXJXDQoNCmBgYA0KDQoNCiMjIyMjIFRhbXBpbGthbiBtYXRyaWtzIHZhcmlhbnMta292YXJpYW5zIHRlcnRpbWJhbmcNCmBgYHtyfQ0KDQpTdw0KDQpgYGANCg0KDQojIyMjIyBUYW1waWxrYW4gdmVrdG9yIHN0YW5kYXIgZGV2aWFzaSB0ZXJ0aW1iYW5nDQpgYGB7cn0NCg0Kc3cNCg0KYGBgDQoNCg0KIyMjIyMgVGFtcGlsa2FuIG1hdHJpa3Mga29yZWxhc2kgdGVydGltYmFuZw0KYGBge3J9DQoNClJ3DQoNCmBgYA0KDQoNCiMjIyMjIFZpc3VhbGlzYXNpIERhdGEgZGFyaSBTb2FsIDINCmBgYHtyfQ0KWDEgPSBkZiR4MQ0KWDIgPSBkZiR4Mg0KWDMgPSBkZiR4Mw0KDQptaW4oWDEpICM1NA0KbWF4KFgxKSAjODYNCg0KbWluKFgyKSAjNTUNCm1heChYMikgIzg1DQoNCm1pbihYMykgIzEwDQptYXgoWDMpICMzMi41DQoNCm1lYW4oWDEpICM3MS43MzY4NA0KbWVkaWFuKFgxKSAjNzMuNQ0KYXMubnVtZXJpYyhuYW1lcyh3aGljaC5tYXgodGFibGUoWDEpKSkpICM3NA0KDQptZWFuKFgyKSAjNjcuMzE1NzkNCm1lZGlhbihYMikgIzY2DQphcy5udW1lcmljKG5hbWVzKHdoaWNoLm1heCh0YWJsZShYMikpKSkgIzU1DQoNCm1lYW4oWDMpICMxOC42NzEwNQ0KbWVkaWFuKFgzKSAjMTYuNjUNCmFzLm51bWVyaWMobmFtZXMod2hpY2gubWF4KHRhYmxlKFgzKSkpKSAjMTANCmBgYA0KDQojIyMjIyBWaXN1YWxpc2FzaSBEYXRhIFgxIGRhbiBYMiBNZW5nZ3VuYWthbiBCb3hwbG90DQpgYGB7cn0NCmJveHBsb3QoWDEsIFgyLA0KICAgICAgICBjb2wgPSAic2t5Ymx1ZSINCiAgICAgICAgKQ0KYGBgDQojIyMjIyBWaXN1YWxpc2FzaSBEYXRhIFgzIG1lbmdndW5ha2FuIEJveHBsb3QNCmBgYHtyfQ0KYm94cGxvdChYMywNCiAgICAgICAgY29sID0gInNreWJsdWUiDQogICAgICAgICkNCmBgYA0KYGBge3J9DQojSW50ZXJwcmV0YXNpDQojQmVyZGFzYXJrYW4gdmlzdWFsaXNhc2kgYm94cGxvdCwgdmFyaWFiZWwgWDEgbWVtaWxpa2kgbWVkaWFuIHlhbmcgbGViaWggdGluZ2dpIGRpYmFuZGluZ2thbiBYMiwgeWFuZyBtZW51bmp1a2thbiBiYWh3YSBzZWNhcmEgdW11bSBuaWxhaSBwYWRhIFgxIGNlbmRlcnVuZyBsZWJpaCBiZXNhciBkYXJpcGFkYSBYMiwgbWVza2lwdW4gcmVudGFuZyBkYXRhIGtlZHVhbnlhIHJlbGF0aWYgbWlyaXAgZGFuIHRpZGFrIHRlcmxpaGF0IGFkYW55YSBvdXRsaWVyLiBTZW1lbnRhcmEgaXR1LCB2YXJpYWJlbCBYMyBtZW1pbGlraSByZW50YW5nIG5pbGFpIHlhbmcgamF1aCBsZWJpaCBrZWNpbCBkaWJhbmRpbmdrYW4gWDEgZGFuIFgyLCBkZW5nYW4gbWVkaWFuIHNla2l0YXIgMTbigJMxNyBzZXJ0YSBzZWJhZ2lhbiBiZXNhciBkYXRhIGJlcmFkYSBwYWRhIGtpc2FyYW4gbmlsYWkgeWFuZyBsZWJpaCByZW5kYWguIE9sZWgga2FyZW5hIGl0dSwgWDMgZGl2aXN1YWxpc2FzaWthbiBzZWNhcmEgdGVycGlzYWggYWdhciBkaXN0cmlidXNpIGRhdGFueWEgZGFwYXQgdGVybGloYXQgZGVuZ2FuIGxlYmloIGplbGFzIGRhbiB0aWRhayB0ZXJkaXN0b3JzaSBvbGVoIHNrYWxhIHlhbmcgbGViaWggYmVzYXIgcGFkYSBYMSBkYW4gWDIuIFNlY2FyYSBrZXNlbHVydWhhbiwgZGFwYXQgZGlzaW1wdWxrYW4gYmFod2EgWDEgbWVtaWxpa2kga2VjZW5kZXJ1bmdhbiBuaWxhaSB0ZXJ0aW5nZ2ksIGRpaWt1dGkgb2xlaCBYMiwgc2VkYW5na2FuIFgzIG1lbWlsaWtpIHNrYWxhIG5pbGFpIHlhbmcgcGFsaW5nIHJlbmRhaCBkaSBhbnRhcmEga2V0aWdhIHZhcmlhYmVsIHRlcnNlYnV0Lg0KYGBgDQoNCmBgYHtyfQ0KaW5zdGFsbC5wYWNrYWdlcygiY29ycnBsb3QiKQ0KbGlicmFyeShjb3JycGxvdCkNCg0KY29yX21hdHJpeCA8LSBjb3IoWCkNCmNvcnJwbG90KGNvcl9tYXRyaXgsIA0KICAgICAgICAgbWV0aG9kID0gImNvbG9yIiwgDQogICAgICAgICB0eXBlID0gInVwcGVyIiwgDQogICAgICAgICBhZGRDb2VmLmNvbCA9ICJibGFjayIpDQpgYGANCmBgYHtyfQ0KI0ludGVycHJldGFzaQ0KI1Zpc3VhbGlzYXNpIHRlcnNlYnV0IG1lcnVwYWthbiBoZWF0bWFwIGtvcmVsYXNpIGFudGFyYSB2YXJpYWJlbCBYMSwgWDIsIGRhbiBYMy4gTmlsYWkga29yZWxhc2kgYmVya2lzYXIgYW50YXJhIC0xIHNhbXBhaSAxLCBkaSBtYW5hIHdhcm5hIGJpcnUgbWVudW5qdWtrYW4ga29yZWxhc2kgcG9zaXRpZiBrdWF0IGRhbiB3YXJuYSBtZXJhaCBtZW51bmp1a2thbiBrb3JlbGFzaSBuZWdhdGlmIGt1YXQuIFRlcmxpaGF0IGJhaHdhIFgxIG1lbWlsaWtpIGtvcmVsYXNpIG5lZ2F0aWYgeWFuZyBzYW5nYXQga3VhdCBkZW5nYW4gWDIgKC0wLDk3KSBkYW4gWDMgKC0wLDk4KSwgeWFuZyBiZXJhcnRpIGtldGlrYSBuaWxhaSBYMSBtZW5pbmdrYXQgbWFrYSBuaWxhaSBYMiBkYW4gWDMgY2VuZGVydW5nIG1lbnVydW4uIFNlbWVudGFyYSBpdHUsIFgyIGRhbiBYMyBtZW1pbGlraSBrb3JlbGFzaSBwb3NpdGlmIHlhbmcgc2FuZ2F0IGt1YXQgKDAsOTkpLCB5YW5nIG1lbnVuanVra2FuIGJhaHdhIGtlZHVhIHZhcmlhYmVsIHRlcnNlYnV0IGJlcmdlcmFrIHNlYXJhaCwgc2VoaW5nZ2Ega2V0aWthIFgyIG1lbmluZ2thdCBtYWthIFgzIGp1Z2EgY2VuZGVydW5nIG1lbmluZ2thdC4gU2VjYXJhIGtlc2VsdXJ1aGFuLCBodWJ1bmdhbiBhbnRhciB2YXJpYWJlbCBzYW5nYXQga3VhdCBrYXJlbmEgbmlsYWkga29yZWxhc2lueWEgbWVuZGVrYXRpIDEuDQpgYGANCg0KDQo=