
Foto Kelompok 3
📘 1. Mean (Rata-rata)
🟢 Definisi: Mean adalah nilai rata-rata dari sekumpulan
data. Dihitung dengan cara menjumlahkan seluruh data, lalu dibagi dengan
banyaknya data.
🔹 Rumus: [ = ]
🔹 Contoh: Data: 4, 6, 8 [ = = 6]
📏 Aturan penggunaan:
- Gunakan mean jika data bersifat numerik dan
tidak memiliki pencilan ekstrem (outlier).
- Cocok untuk data distribusi normal atau seimbang.
- Kurang tepat jika ada nilai yang terlalu besar atau kecil karena
bisa mempengaruhi rata-rata.
📘 2. Median (Nilai Tengah)
🟢 Definisi: Median adalah nilai tengah dari data
yang telah diurutkan dari kecil ke besar.
🔹 Cara menentukan:
- Urutkan data dari nilai terkecil ke terbesar.
- Jika jumlah data ganjil, median adalah nilai di
tengah.
- Jika jumlah data genap, median adalah rata-rata dari dua
nilai tengah.
🔹 Contoh: Data: 3, 5, 7 → Median = 5
Data: 2, 4, 6, 8 → Median = (4 + 6) / 2 = 5
📏 Aturan penggunaan:
- Gunakan median jika data memiliki pencilan
(outlier) atau distribusi tidak simetris.
- Median lebih tahan terhadap nilai ekstrem dibanding
mean.
📘 3. Modus (Mode)
🟢 Definisi: Modus adalah nilai yang paling sering
muncul dalam suatu kumpulan data.
🔹 Contoh: Data: 2, 3, 3, 4, 5 → Modus = 3
Jika semua nilai muncul sama banyak, data disebut tidak memiliki
modus. Jika ada dua nilai yang sama-sama paling sering muncul →
bimodal. Lebih dari dua → multimodal.
📏 Aturan penggunaan:
- Cocok digunakan untuk data kategorik (non-angka) atau
data diskrit. (misal: warna favorit, jenis produk paling
laku)
- Juga bisa digunakan untuk melihat nilai paling umum dalam
data numerik.
📊 Kesimpulan perbandingan
| Jenis data |
Numerik |
Numerik |
Kategorik/Numerik |
| Pengaruh outlier |
Terpengaruh |
Tidak terpengaruh |
Tidak terpengaruh |
| Kegunaan utama |
Rata-rata umum |
Nilai tengah |
Nilai paling sering muncul |
| Cocok untuk |
Data normal/seimbang |
Data tidak simetris |
Data kategorik atau frekuensi tinggi |
# --- 1. Load package yang dibutuhkan ---
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.2
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(modeest) # untuk menghitung modus
## Warning: package 'modeest' was built under R version 4.5.2
# --- 2. Import dataset ---
dataset <- read.csv("https://raw.githubusercontent.com/YanDraa/Dataweek6Statistika/main/4_Central_Tendency_Introduction_to_Statistics.csv")
# --- 3. Cek struktur data ---
str(dataset)
## 'data.frame': 200 obs. of 9 variables:
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ CustomerID : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Age : int 32 37 63 41 42 66 47 21 30 33 ...
## $ Gender : chr "M" "F" "M" "M" ...
## $ StoreLocation : chr "West" "South" "West" "North" ...
## $ ProductCategory: chr "Electronics" "Books" "Electronics" "Sports" ...
## $ TotalPurchase : int 528 72 327 391 514 381 510 102 559 27 ...
## $ NumberOfVisits : int 4 4 4 7 7 6 5 4 2 5 ...
## $ FeedbackScore : int 1 5 2 1 5 3 1 2 2 2 ...
## X CustomerID Age Gender
## Min. : 1.00 Min. : 1.00 Min. :18.00 Length:200
## 1st Qu.: 50.75 1st Qu.: 50.75 1st Qu.:31.00 Class :character
## Median :100.50 Median :100.50 Median :39.00 Mode :character
## Mean :100.50 Mean :100.50 Mean :39.99
## 3rd Qu.:150.25 3rd Qu.:150.25 3rd Qu.:48.25
## Max. :200.00 Max. :200.00 Max. :70.00
## StoreLocation ProductCategory TotalPurchase NumberOfVisits
## Length:200 Length:200 Min. : 11.0 Min. : 1.000
## Class :character Class :character 1st Qu.: 68.0 1st Qu.: 4.000
## Mode :character Mode :character Median : 108.5 Median : 5.000
## Mean : 211.8 Mean : 5.165
## 3rd Qu.: 381.2 3rd Qu.: 7.000
## Max. :1128.0 Max. :11.000
## FeedbackScore
## Min. :1.0
## 1st Qu.:1.0
## Median :3.0
## Mean :2.8
## 3rd Qu.:4.0
## Max. :5.0
# --- 4. Hitung ukuran tendensi sentral ---
# TotalPurchase
mean_total <- mean(dataset$TotalPurchase, na.rm = TRUE)
median_total <- median(dataset$TotalPurchase, na.rm = TRUE)
mode_total <- mfv(dataset$TotalPurchase, na_rm = TRUE)
# Age
mean_age <- mean(dataset$Age, na.rm = TRUE)
median_age <- median(dataset$Age, na.rm = TRUE)
mode_age <- mfv(dataset$Age, na_rm = TRUE)
# NumberOfVisits
mean_visit <- mean(dataset$NumberOfVisits, na.rm = TRUE)
median_visit <- median(dataset$NumberOfVisits, na.rm = TRUE)
mode_visit <- mfv(dataset$NumberOfVisits, na_rm = TRUE)
# --- 5. Tampilkan hasil ---
cat("===== Central Tendency =====\n")
## ===== Central Tendency =====
cat("TotalPurchase -> Mean:", mean_total, " | Median:", median_total, " | Mode:", mode_total, "\n")
## TotalPurchase -> Mean: 211.795 | Median: 108.5 | Mode: 33
cat("Age -> Mean:", mean_age, " | Median:", median_age, " | Mode:", mode_age, "\n")
## Age -> Mean: 39.99 | Median: 39 | Mode: 18
cat("NumberOfVisits -> Mean:", mean_visit, " | Median:", median_visit, " | Mode:", mode_visit, "\n")
## NumberOfVisits -> Mean: 5.165 | Median: 5 | Mode: 5
# --- 6. Visualisasi Data ---
## 6a. Histogram TotalPurchase
ggplot(dataset, aes(x = TotalPurchase)) +
geom_histogram(binwidth = 10, fill = "#4e79a7", color = "white") +
geom_vline(aes(xintercept = median_total), color = "red", linetype = "dashed", linewidth = 1) +
labs(title = "Distribusi TotalPurchase",
x = "Total Purchase",
y = "Frekuensi",
subtitle = "Garis merah menunjukkan median") +
theme_minimal()

## 6b. Boxplot TotalPurchase
ggplot(dataset, aes(y = TotalPurchase)) +
geom_boxplot(fill = "#f28e2b", color = "black") +
labs(title = "Boxplot TotalPurchase",
y = "Total Purchase") +
theme_minimal()

## 6c. Histogram Age
ggplot(dataset, aes(x = Age)) +
geom_histogram(binwidth = 2, fill = "#59a14f", color = "white") +
geom_vline(aes(xintercept = mean_age), color = "blue", linetype = "dashed", linewidth = 1) +
labs(title = "Distribusi Usia Pelanggan (Age)",
x = "Usia",
y = "Frekuensi",
subtitle = "Garis biru menunjukkan mean") +
theme_minimal()

## 6d. Boxplot Age
ggplot(dataset, aes(y = Age)) +
geom_boxplot(fill = "#edc948", color = "black") +
labs(title = "Boxplot Usia Pelanggan",
y = "Age") +
theme_minimal()

## 6e. Histogram NumberOfVisits
ggplot(dataset, aes(x = NumberOfVisits)) +
geom_histogram(binwidth = 1, fill = "#e15759", color = "white") +
geom_vline(aes(xintercept = mean_visit), color = "blue", linetype = "dashed", linewidth = 1) +
labs(title = "Distribusi Jumlah Kunjungan (NumberOfVisits)",
x = "Jumlah Kunjungan",
y = "Frekuensi",
subtitle = "Garis biru menunjukkan mean") +
theme_minimal()

## 6f. Boxplot NumberOfVisits
ggplot(dataset, aes(y = NumberOfVisits)) +
geom_boxplot(fill = "#b07aa1", color = "black") +
labs(title = "Boxplot Jumlah Kunjungan (NumberOfVisits)",
y = "Number of Visits") +
theme_minimal()

LS0tDQp0aXRsZTogIkNlbnRyYWwgVGVuZGVuY3kiDQphdXRob3I6DQotICJLZWxvbXBvayAzIiANCi0gIk5haWZhaCBFZHJpYSBBcnRhICg1MjI1MDA1NikiDQotICJMdWx1IE5hamxhIFNhbHNhYmlsYSAoNTIyNTAwNjkpIg0KLSAiTmFpbGEgU3lhaHJhbmkgUHV0cmkgKDUyMjUwMDcwKSINCi0gIk5pLiBNZCBBdXJvcmEgU2VrYXJuaW5ncnVtICg1MjI1MDA3MikiDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOg0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgdGh1bWJuYWlsczogdHJ1ZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgIGxpYl9kaXI6IGxpYnMNCiAgICBkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQotLS0NCg0KPGNlbnRlcj4NCjxpbWcgc3JjPSJDOi9Vc2Vycy9hY2VyL0RvY3VtZW50cy9XaGF0c0FwcCBJbWFnZSAyMDI1LTEwLTE2IGF0IDE4LjQyLjA2X2Y1NGNiNzliLmpwZyIgd2lkdGg9IjMwMCI+PGJyPg0KPGI+Rm90byBLZWxvbXBvayAzPC9iPg0KPC9jZW50ZXI+DQoNCg0KLS0tDQoNCvCfk5ggKjEuIE1lYW4gKFJhdGEtcmF0YSkqDQoNCirwn5+iIERlZmluaXNpOioNCk1lYW4gYWRhbGFoIG5pbGFpIHJhdGEtcmF0YSBkYXJpIHNla3VtcHVsYW4gZGF0YS4NCkRpaGl0dW5nIGRlbmdhbiBjYXJhIG1lbmp1bWxhaGthbiBzZWx1cnVoIGRhdGEsIGxhbHUgZGliYWdpIGRlbmdhbiBiYW55YWtueWEgZGF0YS4NCg0KKvCflLkgUnVtdXM6Kg0KWw0KXHRleHR7TWVhbn0gPSBcZnJhY3tcdGV4dHtKdW1sYWggc2VsdXJ1aCBkYXRhfX17XHRleHR7QmFueWFrbnlhIGRhdGF9fQ0KXQ0KDQoq8J+UuSBDb250b2g6Kg0KRGF0YTogNCwgNiwgOA0KWw0KXHRleHR7TWVhbn0gPSBcZnJhY3s0ICsgNiArIDh9ezN9ID0gNg0KXQ0KDQoq8J+TjyBBdHVyYW4gcGVuZ2d1bmFhbjoqDQoNCiogR3VuYWthbiAqbWVhbiogamlrYSBkYXRhIGJlcnNpZmF0ICpudW1lcmlrKiBkYW4gKnRpZGFrIG1lbWlsaWtpIHBlbmNpbGFuIGVrc3RyZW0qIChvdXRsaWVyKS4NCiogQ29jb2sgdW50dWsgZGF0YSAqZGlzdHJpYnVzaSBub3JtYWwqIGF0YXUgc2VpbWJhbmcuDQoqIEt1cmFuZyB0ZXBhdCBqaWthIGFkYSBuaWxhaSB5YW5nIHRlcmxhbHUgYmVzYXIgYXRhdSBrZWNpbCBrYXJlbmEgYmlzYSAqbWVtcGVuZ2FydWhpIHJhdGEtcmF0YSouDQoNCi0tLQ0KDQrwn5OYICoyLiBNZWRpYW4gKE5pbGFpIFRlbmdhaCkqDQoNCirwn5+iIERlZmluaXNpOioNCk1lZGlhbiBhZGFsYWggKm5pbGFpIHRlbmdhaCogZGFyaSBkYXRhIHlhbmcgdGVsYWggKmRpdXJ1dGthbiogZGFyaSBrZWNpbCBrZSBiZXNhci4NCg0KKvCflLkgQ2FyYSBtZW5lbnR1a2FuOioNCg0KMS4gVXJ1dGthbiBkYXRhIGRhcmkgbmlsYWkgdGVya2VjaWwga2UgdGVyYmVzYXIuDQoyLiBKaWthIGp1bWxhaCBkYXRhICpnYW5qaWwqLCBtZWRpYW4gYWRhbGFoIG5pbGFpIGRpIHRlbmdhaC4NCjMuIEppa2EganVtbGFoIGRhdGEgKmdlbmFwKiwgbWVkaWFuIGFkYWxhaCByYXRhLXJhdGEgZGFyaSBkdWEgbmlsYWkgdGVuZ2FoLg0KDQoq8J+UuSBDb250b2g6Kg0KRGF0YTogMywgNSwgNw0K4oaSIE1lZGlhbiA9IDUNCg0KRGF0YTogMiwgNCwgNiwgOA0K4oaSIE1lZGlhbiA9ICg0ICsgNikgLyAyID0gNQ0KDQoq8J+TjyBBdHVyYW4gcGVuZ2d1bmFhbjoqDQoNCiogR3VuYWthbiAqbWVkaWFuKiBqaWthIGRhdGEgbWVtaWxpa2kgKnBlbmNpbGFuIChvdXRsaWVyKSogYXRhdSBkaXN0cmlidXNpICp0aWRhayBzaW1ldHJpcyouDQoqIE1lZGlhbiBsZWJpaCAqdGFoYW4gdGVyaGFkYXAgbmlsYWkgZWtzdHJlbSogZGliYW5kaW5nIG1lYW4uDQoNCi0tLQ0KDQrwn5OYICozLiBNb2R1cyAoTW9kZSkqDQoNCirwn5+iIERlZmluaXNpOioNCk1vZHVzIGFkYWxhaCAqbmlsYWkgeWFuZyBwYWxpbmcgc2VyaW5nIG11bmN1bCogZGFsYW0gc3VhdHUga3VtcHVsYW4gZGF0YS4NCg0KKvCflLkgQ29udG9oOioNCkRhdGE6IDIsIDMsIDMsIDQsIDUNCuKGkiBNb2R1cyA9IDMNCg0KSmlrYSBzZW11YSBuaWxhaSBtdW5jdWwgc2FtYSBiYW55YWssIGRhdGEgZGlzZWJ1dCAqdGlkYWsgbWVtaWxpa2kgbW9kdXMqLg0KSmlrYSBhZGEgZHVhIG5pbGFpIHlhbmcgc2FtYS1zYW1hIHBhbGluZyBzZXJpbmcgbXVuY3VsIOKGkiAqYmltb2RhbCouDQpMZWJpaCBkYXJpIGR1YSDihpIgKm11bHRpbW9kYWwqLg0KDQoq8J+TjyBBdHVyYW4gcGVuZ2d1bmFhbjoqDQoNCiogQ29jb2sgZGlndW5ha2FuIHVudHVrICpkYXRhIGthdGVnb3JpayAobm9uLWFuZ2thKSogYXRhdSAqZGF0YSBkaXNrcml0Ki4NCiAgKG1pc2FsOiB3YXJuYSBmYXZvcml0LCBqZW5pcyBwcm9kdWsgcGFsaW5nIGxha3UpDQoqIEp1Z2EgYmlzYSBkaWd1bmFrYW4gdW50dWsgbWVsaWhhdCAqbmlsYWkgcGFsaW5nIHVtdW0qIGRhbGFtIGRhdGEgbnVtZXJpay4NCg0KLS0tDQoNCvCfk4ogKktlc2ltcHVsYW4gcGVyYmFuZGluZ2FuKg0KDQp8IEFzcGVrICAgICAgICAgICAgfCBNZWFuICAgICAgICAgICAgICAgICB8IE1lZGlhbiAgICAgICAgICAgICAgfCBNb2R1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAtLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwNCnwgSmVuaXMgZGF0YSAgICAgICB8IE51bWVyaWsgICAgICAgICAgICAgIHwgTnVtZXJpayAgICAgICAgICAgICB8IEthdGVnb3Jpay9OdW1lcmlrICAgICAgICAgICAgICAgICAgICB8DQp8IFBlbmdhcnVoIG91dGxpZXIgfCBUZXJwZW5nYXJ1aCAgICAgICAgICB8IFRpZGFrIHRlcnBlbmdhcnVoICAgfCBUaWRhayB0ZXJwZW5nYXJ1aCAgICAgICAgICAgICAgICAgICAgfA0KfCBLZWd1bmFhbiB1dGFtYSAgIHwgUmF0YS1yYXRhIHVtdW0gICAgICAgfCBOaWxhaSB0ZW5nYWggICAgICAgIHwgTmlsYWkgcGFsaW5nIHNlcmluZyBtdW5jdWwgICAgICAgICAgIHwNCnwgQ29jb2sgdW50dWsgICAgICB8IERhdGEgbm9ybWFsL3NlaW1iYW5nIHwgRGF0YSB0aWRhayBzaW1ldHJpcyB8IERhdGEga2F0ZWdvcmlrIGF0YXUgZnJla3VlbnNpIHRpbmdnaSB8DQoNCi0tLQ0KDQpgYGB7cn0NCiMgLS0tIDEuIExvYWQgcGFja2FnZSB5YW5nIGRpYnV0dWhrYW4gLS0tDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShtb2RlZXN0KSAjIHVudHVrIG1lbmdoaXR1bmcgbW9kdXMNCg0KIyAtLS0gMi4gSW1wb3J0IGRhdGFzZXQgLS0tDQpkYXRhc2V0IDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vWWFuRHJhYS9EYXRhd2VlazZTdGF0aXN0aWthL21haW4vNF9DZW50cmFsX1RlbmRlbmN5X0ludHJvZHVjdGlvbl90b19TdGF0aXN0aWNzLmNzdiIpDQoNCiMgLS0tIDMuIENlayBzdHJ1a3R1ciBkYXRhIC0tLQ0Kc3RyKGRhdGFzZXQpDQpzdW1tYXJ5KGRhdGFzZXQpDQoNCiMgLS0tIDQuIEhpdHVuZyB1a3VyYW4gdGVuZGVuc2kgc2VudHJhbCAtLS0NCg0KIyBUb3RhbFB1cmNoYXNlDQptZWFuX3RvdGFsIDwtIG1lYW4oZGF0YXNldCRUb3RhbFB1cmNoYXNlLCBuYS5ybSA9IFRSVUUpDQptZWRpYW5fdG90YWwgPC0gbWVkaWFuKGRhdGFzZXQkVG90YWxQdXJjaGFzZSwgbmEucm0gPSBUUlVFKQ0KbW9kZV90b3RhbCA8LSBtZnYoZGF0YXNldCRUb3RhbFB1cmNoYXNlLCBuYV9ybSA9IFRSVUUpDQoNCiMgQWdlDQptZWFuX2FnZSA8LSBtZWFuKGRhdGFzZXQkQWdlLCBuYS5ybSA9IFRSVUUpDQptZWRpYW5fYWdlIDwtIG1lZGlhbihkYXRhc2V0JEFnZSwgbmEucm0gPSBUUlVFKQ0KbW9kZV9hZ2UgPC0gbWZ2KGRhdGFzZXQkQWdlLCBuYV9ybSA9IFRSVUUpDQoNCiMgTnVtYmVyT2ZWaXNpdHMNCm1lYW5fdmlzaXQgPC0gbWVhbihkYXRhc2V0JE51bWJlck9mVmlzaXRzLCBuYS5ybSA9IFRSVUUpDQptZWRpYW5fdmlzaXQgPC0gbWVkaWFuKGRhdGFzZXQkTnVtYmVyT2ZWaXNpdHMsIG5hLnJtID0gVFJVRSkNCm1vZGVfdmlzaXQgPC0gbWZ2KGRhdGFzZXQkTnVtYmVyT2ZWaXNpdHMsIG5hX3JtID0gVFJVRSkNCg0KIyAtLS0gNS4gVGFtcGlsa2FuIGhhc2lsIC0tLQ0KY2F0KCI9PT09PSBDZW50cmFsIFRlbmRlbmN5ID09PT09XG4iKQ0KY2F0KCJUb3RhbFB1cmNoYXNlIC0+IE1lYW46IiwgbWVhbl90b3RhbCwgIiB8IE1lZGlhbjoiLCBtZWRpYW5fdG90YWwsICIgfCBNb2RlOiIsIG1vZGVfdG90YWwsICJcbiIpDQpjYXQoIkFnZSAtPiBNZWFuOiIsIG1lYW5fYWdlLCAiIHwgTWVkaWFuOiIsIG1lZGlhbl9hZ2UsICIgfCBNb2RlOiIsIG1vZGVfYWdlLCAiXG4iKQ0KY2F0KCJOdW1iZXJPZlZpc2l0cyAtPiBNZWFuOiIsIG1lYW5fdmlzaXQsICIgfCBNZWRpYW46IiwgbWVkaWFuX3Zpc2l0LCAiIHwgTW9kZToiLCBtb2RlX3Zpc2l0LCAiXG4iKQ0KDQojIC0tLSA2LiBWaXN1YWxpc2FzaSBEYXRhIC0tLQ0KDQojIyA2YS4gSGlzdG9ncmFtIFRvdGFsUHVyY2hhc2UNCmdncGxvdChkYXRhc2V0LCBhZXMoeCA9IFRvdGFsUHVyY2hhc2UpKSArDQogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gMTAsIGZpbGwgPSAiIzRlNzlhNyIsIGNvbG9yID0gIndoaXRlIikgKw0KICBnZW9tX3ZsaW5lKGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuX3RvdGFsKSwgY29sb3IgPSAicmVkIiwgbGluZXR5cGUgPSAiZGFzaGVkIiwgbGluZXdpZHRoID0gMSkgKw0KICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1c2kgVG90YWxQdXJjaGFzZSIsDQogICAgICAgeCA9ICJUb3RhbCBQdXJjaGFzZSIsDQogICAgICAgeSA9ICJGcmVrdWVuc2kiLA0KICAgICAgIHN1YnRpdGxlID0gIkdhcmlzIG1lcmFoIG1lbnVuanVra2FuIG1lZGlhbiIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCiMjIDZiLiBCb3hwbG90IFRvdGFsUHVyY2hhc2UNCmdncGxvdChkYXRhc2V0LCBhZXMoeSA9IFRvdGFsUHVyY2hhc2UpKSArDQogIGdlb21fYm94cGxvdChmaWxsID0gIiNmMjhlMmIiLCBjb2xvciA9ICJibGFjayIpICsNCiAgbGFicyh0aXRsZSA9ICJCb3hwbG90IFRvdGFsUHVyY2hhc2UiLA0KICAgICAgIHkgPSAiVG90YWwgUHVyY2hhc2UiKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQojIyA2Yy4gSGlzdG9ncmFtIEFnZQ0KZ2dwbG90KGRhdGFzZXQsIGFlcyh4ID0gQWdlKSkgKw0KICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IDIsIGZpbGwgPSAiIzU5YTE0ZiIsIGNvbG9yID0gIndoaXRlIikgKw0KICBnZW9tX3ZsaW5lKGFlcyh4aW50ZXJjZXB0ID0gbWVhbl9hZ2UpLCBjb2xvciA9ICJibHVlIiwgbGluZXR5cGUgPSAiZGFzaGVkIiwgbGluZXdpZHRoID0gMSkgKw0KICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1c2kgVXNpYSBQZWxhbmdnYW4gKEFnZSkiLA0KICAgICAgIHggPSAiVXNpYSIsDQogICAgICAgeSA9ICJGcmVrdWVuc2kiLA0KICAgICAgIHN1YnRpdGxlID0gIkdhcmlzIGJpcnUgbWVudW5qdWtrYW4gbWVhbiIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCiMjIDZkLiBCb3hwbG90IEFnZQ0KZ2dwbG90KGRhdGFzZXQsIGFlcyh5ID0gQWdlKSkgKw0KICBnZW9tX2JveHBsb3QoZmlsbCA9ICIjZWRjOTQ4IiwgY29sb3IgPSAiYmxhY2siKSArDQogIGxhYnModGl0bGUgPSAiQm94cGxvdCBVc2lhIFBlbGFuZ2dhbiIsDQogICAgICAgeSA9ICJBZ2UiKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQojIyA2ZS4gSGlzdG9ncmFtIE51bWJlck9mVmlzaXRzDQpnZ3Bsb3QoZGF0YXNldCwgYWVzKHggPSBOdW1iZXJPZlZpc2l0cykpICsNCiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAxLCBmaWxsID0gIiNlMTU3NTkiLCBjb2xvciA9ICJ3aGl0ZSIpICsNCiAgZ2VvbV92bGluZShhZXMoeGludGVyY2VwdCA9IG1lYW5fdmlzaXQpLCBjb2xvciA9ICJibHVlIiwgbGluZXR5cGUgPSAiZGFzaGVkIiwgbGluZXdpZHRoID0gMSkgKw0KICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1c2kgSnVtbGFoIEt1bmp1bmdhbiAoTnVtYmVyT2ZWaXNpdHMpIiwNCiAgICAgICB4ID0gIkp1bWxhaCBLdW5qdW5nYW4iLA0KICAgICAgIHkgPSAiRnJla3VlbnNpIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJHYXJpcyBiaXJ1IG1lbnVuanVra2FuIG1lYW4iKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQojIyA2Zi4gQm94cGxvdCBOdW1iZXJPZlZpc2l0cw0KZ2dwbG90KGRhdGFzZXQsIGFlcyh5ID0gTnVtYmVyT2ZWaXNpdHMpKSArDQogIGdlb21fYm94cGxvdChmaWxsID0gIiNiMDdhYTEiLCBjb2xvciA9ICJibGFjayIpICsNCiAgbGFicyh0aXRsZSA9ICJCb3hwbG90IEp1bWxhaCBLdW5qdW5nYW4gKE51bWJlck9mVmlzaXRzKSIsDQogICAgICAgeSA9ICJOdW1iZXIgb2YgVmlzaXRzIikgKw0KICB0aGVtZV9taW5pbWFsKCkNCmBgYA==