
Adinda Adelia Futri
Institut Teknologi Sains Bandung (ITSB)
Program Studi Data Science
📘 Case Study 1
One-Sample Z-Test
(Statistical Hypotheses)
1️⃣ Deskripsi
Masalah
Sebuah platform pembelajaran digital mengklaim bahwa
rata-rata waktu belajar harian pengguna adalah
120 menit.
Berdasarkan data historis dan pengambilan sampel, diperoleh informasi
berikut:
Rata-rata populasi (klaim perusahaan):
\[
\mu_0 = 120
\]
Standar deviasi populasi (diketahui):
\[
\sigma = 15
\]
Ukuran sampel:
\[
n = 64
\]
Rata-rata sampel:
\[
\bar{x} = 116
\]
Tingkat signifikansi:
\[
\alpha = 0.05
\]
Tujuan analisis adalah menguji secara statistik apakah
rata-rata waktu belajar pengguna berbeda dari klaim
perusahaan.
3️⃣ Pemilihan Uji
Statistik
Uji statistik yang digunakan adalah One-Sample
Z-Test, dengan pertimbangan:
- Standar deviasi populasi (\(\sigma\)) diketahui
- Ukuran sampel cukup besar (\(n \geq
30\))
- Parameter yang diuji adalah rata-rata populasi
Dengan kondisi tersebut, One-Sample Z-Test merupakan
uji yang paling tepat sesuai materi Statistical Inference.
4️⃣ Perhitungan Manual
(Step-by-Step)
✏️ Step 1 –
Menghitung Standard Error (SE)
Rumus Standard Error:
\[
SE = \frac{\sigma}{\sqrt{n}}
\]
Substitusi nilai:
\[
SE = \frac{15}{\sqrt{64}} = \frac{15}{8} = 1.875
\]
Artinya, rata-rata sampel diperkirakan menyimpang sekitar
1.875 menit dari rata-rata populasi.
✏️ Step 2 –
Menghitung Statistik Uji (Z-Score)
Rumus statistik uji Z:
\[
Z = \frac{\bar{x} - \mu_0}{SE}
\]
Substitusi nilai:
\[
Z = \frac{116 - 120}{1.875} = \frac{-4}{1.875} = -2.13
\]
5️⃣ Menentukan
p-value
Karena pengujian yang dilakukan adalah uji dua sisi,
maka p-value dihitung menggunakan nilai absolut dari statistik
uji Z, sesuai dengan standar pada materi Statistical
Inference:
\[
p\text{-value} = 2 \times P(Z < -|Z|)
\]
atau secara ekuivalen:
\[
p\text{-value} = 2 \times (1 - \Phi(|Z|))
\]
Dengan nilai statistik uji:
\[
Z = -2.13
\]
maka:
\[
p\text{-value} = 2 \times P(Z < -2.13)
\]
Berdasarkan tabel distribusi normal standar:
\[
P(Z < -2.13) \approx 0.0166
\]
Sehingga:
\[
p\text{-value} = 2 \times 0.0166 = 0.0332
\]
6️⃣ Keputusan
Statistik
Bandingkan p-value dengan tingkat signifikansi:
\[
p\text{-value} = 0.0332
\]
\[
\alpha = 0.05
\]
Karena:
\[
p\text{-value} < \alpha
\]
Keputusan:
Tolak \(H_0\)
7️⃣ Interpretasi
Hasil
📌 Interpretasi
Statistik
Pada tingkat signifikansi 5%, terdapat bukti statistik yang
signifikan bahwa rata-rata waktu belajar harian
pengguna berbeda dari 120 menit.
📌 Interpretasi
Bisnis (Business Analytics)
Hasil ini menunjukkan bahwa klaim perusahaan mengenai rata-rata waktu
belajar 120 menit per hari tidak sepenuhnya didukung oleh
data.
Rata-rata aktual yang teramati (116 menit) secara
statistik lebih rendah dari klaim perusahaan.
Implikasi bisnis:
8️⃣ Verifikasi
Perhitungan Menggunakan R
# ======================
# DATA DAN PARAMETER
# ======================
mu_0 <- 120
x_bar <- 116
sigma <- 15
n <- 64
alpha <- 0.05
# ======================
# PERHITUNGAN
# ======================
SE <- sigma / sqrt(n) # Standard Error
Z <- (x_bar - mu_0) / SE # Statistik uji Z
# p-value dua sisi (sesuai standar buku)
p_value <- 2 * (1 - pnorm(abs(Z)))
# ======================
# OUTPUT
# ======================
Z
## [1] -2.133333
## [1] 0.03289739
📘 Case Study 2
One-Sample t-Test (σ
Tidak Diketahui, Sampel Kecil)
1️⃣ Latar Belakang
Masalah
Tim UX Research ingin mengevaluasi apakah
rata-rata waktu penyelesaian tugas pada aplikasi baru
berbeda dari 10 menit, yang selama ini digunakan
sebagai standar (benchmark).
Data dikumpulkan dari 10 pengguna dan diperoleh
waktu penyelesaian tugas (dalam menit) sebagai berikut:
9.2, 10.5, 9.8, 10.1, 9.6, 10.3, 9.9, 9.7, 10.0, 9.5
Karena:
- standar deviasi populasi tidak diketahui, dan
- ukuran sampel kecil (n < 30),
maka pengujian hipotesis dilakukan menggunakan distribusi
t.
3️⃣ Pemilihan Uji
Statistik
Uji statistik yang digunakan adalah One-Sample
t-Test, dengan alasan:
- Data berskala numerik (waktu dalam menit)
- Parameter yang diuji adalah rata-rata populasi
- Standar deviasi populasi tidak diketahui
- Ukuran sampel kecil (n = 10)
Kondisi ini sesuai dengan asumsi penggunaan distribusi
t pada materi Statistical Inference.
4️⃣ Perhitungan Manual
(Step-by-Step)
✏️ Step 1 – Ukuran
Sampel dan Derajat Kebebasan
Ukuran sampel: \[
n = 10
\]
Derajat kebebasan: \[
df = n - 1 = 9
\]
✏️ Step 2 –
Menghitung Rata-rata Sampel (\(\bar{x}\))
\[
\bar{x} = \frac{\sum x_i}{n}
\]
Jumlah seluruh data: \[
\sum x_i = 98.6
\]
\[
\bar{x} = \frac{98.6}{10} = 9.86
\]
Artinya, rata-rata waktu penyelesaian tugas pada sampel adalah
9.86 menit.
✏️ Step 3 –
Menghitung Standar Deviasi Sampel (s)
Rumus standar deviasi sampel:
\[
s = \sqrt{\frac{\sum (x_i - \bar{x})^2}{n - 1}}
\]
Hasil perhitungan manual:
\[
s \approx 0.39
\]
Nilai ini menunjukkan bahwa variasi waktu penyelesaian tugas antar
pengguna relatif kecil.
✏️ Step 4 –
Menghitung Standard Error (SE)
\[
SE = \frac{s}{\sqrt{n}}
\]
\[
SE = \frac{0.39}{\sqrt{10}} = \frac{0.39}{3.162} \approx 0.123
\]
✏️ Step 5 –
Menghitung Statistik Uji t
Rumus statistik uji t:
\[
t = \frac{\bar{x} - \mu_0}{SE}
\]
Substitusi nilai:
\[
t = \frac{9.86 - 10}{0.123} = \frac{-0.14}{0.123} \approx -1.14
\]
✏️ Step 6 –
Menentukan p-value
Dengan: - Statistik uji: \(t =
-1.14\) - Derajat kebebasan: \(df =
9\) - Jenis uji: dua sisi
Berdasarkan tabel distribusi t:
\[
p\text{-value} \approx 0.28
\]
Nilai ini merupakan pendekatan menggunakan tabel
distribusi t.
5️⃣ Keputusan
Statistik (α = 0.05)
Kriteria keputusan: - Jika \(p\text{-value}
\le 0.05\) → Tolak \(H_0\) -
Jika \(p\text{-value} > 0.05\) →
Gagal menolak \(H_0\)
Karena: \[
0.28 > 0.05
\]
Keputusan:
Gagal menolak \(H_0\)
6️⃣ Tabel Ringkasan
Hasil Uji
| Rata-rata sampel (\(\bar{x}\)) |
9.86 |
| Nilai hipotesis (\(\mu_0\)) |
10 |
| Standar deviasi sampel (s) |
0.39 |
| Standard Error (SE) |
0.123 |
| t-statistic |
-1.14 |
| p-value |
0.28 |
| Keputusan |
Gagal menolak \(H_0\) |
7️⃣ Interpretasi
Hasil
📌 Interpretasi
Statistik
Pada tingkat signifikansi 5%, tidak terdapat bukti statistik
yang cukup untuk menyatakan bahwa rata-rata waktu
penyelesaian tugas berbeda dari 10 menit.
📌 Interpretasi UX
/ Produk
Hasil pengujian menunjukkan bahwa performa aplikasi baru
belum berbeda secara signifikan dibandingkan standar
waktu penyelesaian 10 menit.
Dengan kata lain, waktu penyelesaian tugas pengguna masih berada pada
tingkat yang sebanding dengan benchmark yang
digunakan.
8️⃣ Pengaruh Ukuran
Sampel terhadap Inferensi
Karena ukuran sampel relatif kecil (\(n =
10\)):
- Estimasi rata-rata menjadi kurang stabil
- Standard error relatif lebih besar
- Kekuatan uji (power) rendah
- Perbedaan kecil sulit terdeteksi secara statistik
📌 Rekomendasi:
Menambah jumlah pengguna uji akan meningkatkan keandalan inferensi dan
sensitivitas pengujian statistik.
9️⃣ Verifikasi
Menggunakan R
# Data
x <- c(9.2, 10.5, 9.8, 10.1, 9.6, 10.3, 9.9, 9.7, 10.0, 9.5)
# One-Sample t-Test (dua sisi)
t.test(x, mu = 10)
##
## One Sample t-test
##
## data: x
## t = -1.1456, df = 9, p-value = 0.2815
## alternative hypothesis: true mean is not equal to 10
## 95 percent confidence interval:
## 9.58356 10.13644
## sample estimates:
## mean of x
## 9.86
📘 Case Study 3
Two-Sample t-Test
(A/B Testing – Welch’s Test)
1️⃣ Latar Belakang
Masalah
Tim Product Analytics melakukan A/B
Testing untuk membandingkan rata-rata durasi sesi
pengguna (dalam menit) antara dua versi landing page:
- Versi A: desain lama
- Versi B: desain baru
Ringkasan data hasil eksperimen:
| A |
25 |
4.8 |
1.2 |
| B |
25 |
5.4 |
1.4 |
Tujuan analisis adalah menentukan apakah terdapat perbedaan
rata-rata durasi sesi pengguna yang signifikan secara statistik
antara kedua versi landing page.
3️⃣ Pemilihan Uji
Statistik
Uji statistik yang digunakan adalah Two-Sample t-Test
(Welch’s t-Test).
Alasan pemilihan uji:
- Data berasal dari dua kelompok independen
- Variabel yang dianalisis berskala numerik (durasi sesi)
- Standar deviasi populasi tidak diketahui
- Tidak ada asumsi bahwa varians kedua kelompok sama
- Welch’s t-Test bersifat lebih robust dan
direkomendasikan dalam praktik A/B testing modern
Dengan pertimbangan tersebut, Welch’s Two-Sample
t-Test merupakan uji yang paling sesuai.
4️⃣ Perhitungan Manual
(Pendekatan Konseptual)
✏️ Step 1 –
Parameter Dasar
Diketahui:
\[
\bar{x}_A = 4.8, \quad \bar{x}_B = 5.4
\]
\[
s_A = 1.2, \quad s_B = 1.4
\]
\[
n_A = n_B = 25
\]
✏️ Step 2 –
Menghitung Standard Error (Welch)
Rumus Standard Error untuk Welch’s t-Test:
\[
SE = \sqrt{\frac{s_A^2}{n_A} + \frac{s_B^2}{n_B}}
\]
Substitusi nilai:
\[
SE = \sqrt{\frac{1.2^2}{25} + \frac{1.4^2}{25}}
\]
\[
SE = \sqrt{\frac{1.44}{25} + \frac{1.96}{25}}
\]
\[
SE = \sqrt{0.0576 + 0.0784}
\]
\[
SE = \sqrt{0.136} = 0.369
\]
✏️ Step 3 –
Menghitung Statistik Uji t
Rumus statistik uji:
\[
t = \frac{\bar{x}_A - \bar{x}_B}{SE}
\]
\[
t = \frac{4.8 - 5.4}{0.369}
\]
\[
t = \frac{-0.6}{0.369} \approx -1.63
\]
✏️ Step 4 – Derajat
Kebebasan (Welch Approximation)
Derajat kebebasan pada Welch’s t-Test dihitung menggunakan pendekatan
Satterthwaite dan menghasilkan nilai sekitar:
\[
df \approx 46
\]
✏️ Step 5 –
Menentukan p-value
Dengan:
- Statistik uji: \(t = -1.63\)
- Derajat kebebasan: \(df \approx
46\)
- Jenis uji: dua sisi
Berdasarkan distribusi t:
\[
p\text{-value} \approx 0.11
\]
5️⃣ Keputusan
Statistik (α = 0.05)
Kriteria keputusan:
- Jika \(p\text{-value} \le 0.05\) →
Tolak \(H_0\)
- Jika \(p\text{-value} > 0.05\) →
Gagal menolak \(H_0\)
Karena:
\[
0.11 > 0.05
\]
Keputusan:
Gagal menolak \(H_0\)
6️⃣ Tabel Ringkasan
Hasil Uji
| Mean Versi A |
4.8 |
| Mean Versi B |
5.4 |
| Selisih Mean (A − B) |
-0.6 |
| Standard Error |
0.369 |
| t-statistic |
-1.63 |
| Derajat Kebebasan |
≈ 46 |
| p-value |
0.11 |
| Keputusan |
Gagal menolak \(H_0\) |
7️⃣ Interpretasi
Hasil
📌 Interpretasi
Statistik
Pada tingkat signifikansi 5%, tidak terdapat bukti statistik
yang cukup untuk menyatakan bahwa rata-rata durasi sesi
pengguna berbeda secara signifikan antara versi A dan versi
B.
📌 Interpretasi
Bisnis / Produk
Meskipun versi B menunjukkan rata-rata durasi sesi yang lebih
tinggi, perbedaan tersebut belum cukup kuat secara
statistik untuk dijadikan dasar pengambilan keputusan produk
secara penuh.
📌 Implikasi Produk:
- Versi B belum terbukti unggul secara
signifikan
- Disarankan untuk:
- menambah ukuran sampel
- menjalankan eksperimen lebih lama
- mengevaluasi metrik tambahan (CTR, conversion rate, bounce
rate)
8️⃣ Verifikasi
Menggunakan R
# Ringkasan data
mean_A <- 4.8
sd_A <- 1.2
n_A <- 25
mean_B <- 5.4
sd_B <- 1.4
n_B <- 25
# Contoh simulasi data (untuk ilustrasi)
set.seed(123)
A <- rnorm(n_A, mean_A, sd_A)
B <- rnorm(n_B, mean_B, sd_B)
# Welch Two-Sample t-Test
t.test(A, B)
##
## Welch Two Sample t-test
##
## data: A and B
## t = -2.2811, df = 47.277, p-value = 0.02709
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -1.47341701 -0.09256043
## sample estimates:
## mean of x mean of y
## 4.760004 5.542992
📘 Case Study 4
Chi-Square Test of
Independence
4️⃣ Soal
Sebuah perusahaan e-commerce ingin mengetahui apakah
jenis perangkat (device type) berhubungan dengan
preferensi metode pembayaran pengguna.
Data hasil observasi:
| Mobile |
120 |
80 |
50 |
| Desktop |
60 |
90 |
40 |
4.2 Tasks &
Penyelesaian
1️⃣ Perumusan
Hipotesis
Hipotesis Nol
(H₀)
Tidak terdapat hubungan antara jenis perangkat dan
preferensi metode pembayaran.
(Device type dan payment method independen)
\[
H_0 : \text{Device type ⟂ Payment method}
\]
Hipotesis
Alternatif (H₁)
Terdapat hubungan antara jenis perangkat dan
preferensi metode pembayaran.
\[
H_1 : \text{Device type tidak independen terhadap Payment method}
\]
2️⃣ Uji Statistik yang
Digunakan
Uji yang tepat adalah:
✅
Chi-Square Test of Independence
Alasan pemilihan uji (sesuai kondisi soal):
- Data berbentuk frekuensi (count)
- Variabel bersifat kategorik
- Tujuan analisis: menguji hubungan antar dua variabel
kategorik
3️⃣ Perhitungan Manual
Chi-Square (Step-by-Step)
✏️ Step 1 – Hitung
Total Baris, Kolom, dan Total Keseluruhan
Total per baris:
- Mobile = 120 + 80 + 50 = 250
- Desktop = 60 + 90 + 40 = 190
Total per kolom:
- E-Wallet = 120 + 60 = 180
- Credit Card = 80 + 90 = 170
- Cash on Delivery = 50 + 40 = 90
Total keseluruhan: \[
N = 250 + 190 = 440
\]
✏️ Step 2 – Hitung
Frekuensi Harapan (Expected Frequency)
Rumus frekuensi harapan:
\[
E_{ij} = \frac{(\text{Total Baris}) \times (\text{Total Kolom})}{N}
\]
Baris:
Mobile
- Mobile–E-Wallet: \[
E = \frac{250 \times 180}{440} = 102.27
\]
- Mobile–Credit Card: \[
E = \frac{250 \times 170}{440} = 96.59
\]
- Mobile–COD: \[
E = \frac{250 \times 90}{440} = 51.14
\]
Baris:
Desktop
- Desktop–E-Wallet: \[
E = \frac{190 \times 180}{440} = 77.73
\]
- Desktop–Credit Card: \[
E = \frac{190 \times 170}{440} = 73.41
\]
- Desktop–COD: \[
E = \frac{190 \times 90}{440} = 38.86
\]
✏️ Step 3 – Hitung
Nilai Chi-Square (χ²)
Rumus statistik Chi-Square:
\[
\chi^2 = \sum \frac{(O - E)^2}{E}
\]
| Mobile–E-Wallet |
120 |
102.27 |
3.07 |
| Mobile–Credit Card |
80 |
96.59 |
2.85 |
| Mobile–COD |
50 |
51.14 |
0.03 |
| Desktop–E-Wallet |
60 |
77.73 |
4.05 |
| Desktop–Credit Card |
90 |
73.41 |
3.75 |
| Desktop–COD |
40 |
38.86 |
0.03 |
\[
\chi^2 = 3.07 + 2.85 + 0.03 + 4.05 + 3.75 + 0.03 = 13.78
\]
✏️ Step 4 – Derajat
Kebebasan (df)
Rumus:
\[
df = (r - 1)(c - 1)
\]
\[
df = (2 - 1)(3 - 1) = 2
\]
✏️ Step 5 –
Menentukan p-value dan Keputusan
Pada: - \(\alpha = 0.05\) - \(df = 2\)
Nilai kritis Chi-Square tabel: \[
\chi^2_{0.05,2} = 5.991
\]
Karena: \[
13.78 > 5.991
\]
Keputusan
Statistik:
Tolak H₀
(p-value < 0.05)
4️⃣ Kesimpulan
Statistik
Terdapat hubungan yang signifikan secara statistik
antara: - Jenis perangkat (Mobile vs Desktop) -
Preferensi metode pembayaran
5️⃣ Interpretasi dalam
Konteks Strategi Pembayaran Digital
📊 Interpretasi
Bisnis
- Pengguna Mobile cenderung lebih memilih
E-Wallet
- Pengguna Desktop relatif lebih banyak menggunakan
Credit Card
- Preferensi pembayaran tidak acak, tetapi
dipengaruhi oleh perangkat
💡 Implikasi
Strategi:
- Optimalkan E-Wallet UX di mobile
- Tonjolkan Credit Card checkout di desktop
- Personalisasi metode pembayaran berdasarkan device pengguna
📌 Tabel Ringkasan
Akhir
| Jenis Uji |
Chi-Square Test of Independence |
| χ² hitung |
13.78 |
| df |
2 |
| α |
0.05 |
| Keputusan |
Tolak H₀ |
| Kesimpulan |
Device & Payment Method berhubungan |
📘 Case Study 5
Type I and Type II
Errors (Conceptual)
5.1 Konteks
Masalah
Sebuah fintech startup menguji apakah
algoritma deteksi fraud baru mampu mengurangi jumlah
transaksi fraud dibandingkan sistem lama.
Hipotesis yang digunakan:
- H₀ (Null Hypothesis): Algoritma baru tidak
mengurangi fraud
- H₁ (Alternative Hypothesis): Algoritma baru
mengurangi fraud
Studi ini bersifat konseptual, sehingga fokus pada
pemahaman kesalahan pengambilan keputusan statistik.
5.2 Penjelasan Type I
Error (α)
Definisi
Type I Error (α) terjadi ketika H₀ ditolak
padahal H₀ benar.
Dalam konteks studi
ini
Perusahaan menyimpulkan bahwa algoritma baru berhasil
mengurangi fraud,
padahal pada kenyataannya algoritma tersebut tidak lebih
efektif dari sistem lama.
Dampak bisnis
- Perusahaan merasa aman secara keliru
- Algoritma yang tidak efektif tetap digunakan
- Risiko kerugian finansial akibat fraud tetap tinggi
- Potensi penurunan kepercayaan pengguna
5.3 Penjelasan Type
II Error (β)
Definisi
Type II Error (β) terjadi ketika H₀ tidak
ditolak padahal H₁ benar.
Dalam konteks studi
ini
Perusahaan menyimpulkan bahwa algoritma baru tidak
efektif,
padahal sebenarnya algoritma tersebut mampu menurunkan
fraud.
Dampak bisnis
- Inovasi yang efektif dihentikan
- Kesempatan menekan kerugian fraud terlewat
- Keunggulan kompetitif tidak dimanfaatkan
5.4 Error Mana yang
Lebih Mahal dari Perspektif Bisnis?
Dari sudut pandang bisnis, Type I Error lebih mahal dan
berisiko, karena:
- Memberikan rasa aman palsu
- Sistem keamanan tetap lemah
- Fraud tetap terjadi dalam skala besar
- Berpotensi menimbulkan masalah regulasi dan reputasi
Dalam konteks keamanan finansial, lebih baik berhati-hati
daripada terlalu percaya diri.
5.5 Pengaruh Ukuran
Sampel terhadap Type II Error
Ukuran sampel memiliki pengaruh langsung terhadap Type II
Error (β):
- Sampel kecil → β besar → sulit mendeteksi efek nyata
- Sampel besar → β kecil → lebih mudah mendeteksi penurunan fraud
Dengan memperbesar ukuran sampel, perusahaan dapat:
- Mengurangi risiko gagal mendeteksi algoritma yang efektif
- Meningkatkan keandalan kesimpulan statistik
5.6 Hubungan antara
α, β, dan Statistical Power
Konsep utama
- Statistical Power = 1 − β
Artinya, power menunjukkan kemampuan uji statistik untuk
mendeteksi efek yang benar-benar ada.
Hubungan antar
komponen
- Menurunkan α → mengurangi Type I Error
- Namun, jika ukuran sampel tetap, β bisa meningkat
- Cara paling efektif meningkatkan power adalah menambah
ukuran sampel
Ringkasan
hubungan
- α: Risiko salah menyatakan algoritma efektif
- β: Risiko gagal mendeteksi algoritma efektif
- Power: Kemampuan mendeteksi efek nyata
5.7 Tabel Kesimpulan
Case Study 5
| Type I Error (α) |
Menganggap algoritma efektif padahal tidak |
| Type II Error (β) |
Gagal mendeteksi algoritma yang sebenarnya efektif |
| Error paling mahal |
Type I Error |
| Pengaruh sample size |
Sample besar menurunkan β |
| Statistical Power |
Kemampuan mendeteksi efek nyata (1 − β) |
5.8 Kesimpulan
Akhir
Dalam pengujian algoritma deteksi fraud, pemahaman terhadap
Type I Error, Type II Error, dan statistical power
sangat penting untuk pengambilan keputusan bisnis yang tepat.
Kesalahan statistik dapat berdampak langsung pada keamanan,
keuangan, dan reputasi perusahaan.
📘 Case Study 6
P-Value dan
Pengambilan Keputusan Statistik
📌 6.1 Deskripsi
Kasus
Sebuah model prediksi churn dievaluasi untuk
mengetahui apakah performanya menunjukkan hasil yang signifikan secara
statistik.
Diketahui:
- Statistik uji = 2.31
- p-value = 0.021
- Tingkat signifikansi (α) = 0.05
📌 6.2 Tasks dan
Pembahasan
1️⃣ Penjelasan Makna
p-value
Nilai p-value = 0.021 menyatakan
probabilitas memperoleh hasil statistik setidaknya se-ekstrem
ini, dengan asumsi bahwa hipotesis nol (H₀) adalah
benar.
Dengan kata lain:
- Jika model sebenarnya tidak memberikan perbedaan
nyata, maka kemungkinan memperoleh statistik uji sebesar
2.31 atau lebih ekstrem hanyalah
2.1%.
- Karena nilai ini kecil, hasil yang diperoleh tidak mungkin
terjadi secara kebetulan semata.
2️⃣ Keputusan
Statistik
Aturan keputusan:
- Jika p-value ≤ α, maka tolak
H₀
- Jika p-value > α, maka gagal menolak
H₀
Karena: \[
p\text{-value} = 0.021 < \alpha = 0.05
\]
Keputusan statistik:
Hipotesis nol (H₀) ditolak
3️⃣ Interpretasi
Non-Teknis untuk Manajemen
Dalam bahasa non-teknis:
“Hasil evaluasi menunjukkan bahwa performa model churn cukup
kuat dan bukan kebetulan.
Model ini memberikan indikasi yang dapat dipercaya untuk membedakan
pelanggan yang berpotensi churn.”
Artinya:
- Model layak dipertimbangkan untuk pengambilan
keputusan bisnis
- Ada bukti statistik bahwa model bekerja lebih baik
dari sekadar tebakan acak
4️⃣ Risiko Jika
Sampel Tidak Representatif
Jika data yang digunakan tidak mewakili populasi pelanggan
secara keseluruhan, maka:
- p-value yang kecil bisa menyesatkan
- Model mungkin:
- Terlalu optimis
- Tidak bekerja baik di kondisi nyata
- Keputusan bisnis berisiko:
- Salah strategi retensi
- Salah alokasi biaya pemasaran
📌 Kesimpulan penting:
Signifikansi statistik tidak menjamin validitas bisnis
jika sampel bias.
5️⃣ Mengapa p-value
Tidak Mengukur Besarnya Efek
p-value hanya mengukur tingkat keyakinan statistik,
bukan:
- Seberapa besar dampak model
- Seberapa signifikan manfaat bisnisnya
Contoh:
- p-value kecil bisa muncul dari:
- Efek yang sangat kecil
- Ukuran sampel yang besar
Untuk mengetahui besarnya dampak, diperlukan:
- Effect size
- Perbedaan rata-rata
- Lift, AUC, atau metrik bisnis lainnya
📌 Kesimpulan
Akhir
| p-value |
Mengukur kekuatan bukti terhadap H₀ |
| Keputusan |
H₀ ditolak |
| Makna bisnis |
Model menunjukkan performa yang signifikan |
| Risiko |
Sampel tidak representatif dapat menyesatkan |
| Catatan penting |
p-value ≠ besarnya efek |
LS0tDQp0aXRsZTogIlN0YXRpc3RpY2FsIEluZmVyZW5jZXMiICMgTWFpbiB0aXRsZSBvZiB0aGUgZG9jdW1lbnQNCnN1YnRpdGxlOiAiU3R1ZHkgQ2FzZXMgfiB3ZWVrIDE0IiAjIFN1YnRpdGxlIG9yIHRvcGljIGZvciB3ZWVrIDINCmF1dGhvcjogIkFkaW5kYSBBZGVsaWEgRnV0cmkiICAgICAgICAjIFJlcGxhY2Ugd2l0aCB5b3VyIGZ1bGwgbmFtZQ0KZGF0ZTogICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVCICVkLCAlWScpYCIgIyBBdXRvIGRpc3BsYXlzIHRoZSBjdXJyZW50IGRhdGUNCm91dHB1dDogICAgICAgICAgICAgICAgICAgICAgICAgIyBPdXRwdXQgc2VjdGlvbiBkZWZpbmVzIHRoZSBmb3JtYXQgYW5kIGxheW91dCANCiAgcm1kZm9ybWF0czo6cmVhZHRoZWRvd246ICAgICAgIyBodHRwczovL2dpdGh1Yi5jb20vanViYS9ybWRmb3JtYXRzDQogICAgc2VsZl9jb250YWluZWQ6IHRydWUgICAgICAgICMgRW1iZWRzIGFsbCByZXNvdXJjZXMgKENTUywgSlMsIGltYWdlcykgDQogICAgdGh1bWJuYWlsczogdHJ1ZSAgICAgICAgICAgICMgRGlzcGxheXMgaW1hZ2UgdGh1bWJuYWlscyBpbiB0aGUgZG9jDQogICAgbGlnaHRib3g6IHRydWUgICAgICAgICAgICAgICMgRW5hYmxlcyBjbGljayB0byBlbmxhcmdlIGltYWdlcw0KICAgIGdhbGxlcnk6IHRydWUgICAgICAgICAgICAgICAjIEdyb3VwcyBpbWFnZXMgaW50byBhbiBpbnRlcmFjdGl2ZSBnYWxsZXJ5DQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlICAgICAgICMgQXV0b21hdGljYWxseSBudW1iZXJzIGFsbCBzZWN0aW9ucw0KICAgIGxpYl9kaXI6IGxpYnMgICAgICAgICAgICAgICAjIERpcmVjdG9yeSB3aGVyZSBKYXZhU2NyaXB0L0NTUyBsaWJyYXJpZXMNCiAgICBkZl9wcmludDogInBhZ2VkIiAgICAgICAgICAgIyBEaXNwbGF5cyBkYXRhIGZyYW1lcyBhcyBpbnRlcmFjdGl2ZSBwYWdlZCANCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93IiAgICAgICAgIyBBbGxvd3MgZm9sZGluZy91bmZvbGRpbmcgUiBjb2RlIGJsb2NrcyANCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMgICAgICAgICAgIyBBZGRzIGEgYnV0dG9uIHRvIGRvd25sb2FkIGFsbCBSIGNvZGUNCi0tLQ0KDQoNCmBgYHs9aHRtbH0NCjxzdHlsZT4NCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICBFTEVHQU5UIEdSQVkgVEhFTUUg4oCTIENPTkZJREVOQ0UgSU5URVJWQUwNCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQoNCmJvZHkgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhOw0KICBjb2xvcjogIzMzMzMzMzsNCiAgZm9udC1mYW1pbHk6ICJTZWdvZSBVSSIsICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7DQogIGxpbmUtaGVpZ2h0OiAxLjY7DQp9DQoNCi8qID09PT09IEhFQURJTkdTID09PT09ICovDQpoMSwgaDIsIGgzIHsNCiAgY29sb3I6ICM0YTU1Njg7DQogIGZvbnQtd2VpZ2h0OiA2MDA7DQogIGxldHRlci1zcGFjaW5nOiAtMC4zcHg7DQp9DQoNCmgyIHsNCiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNjYmQ1ZTA7DQogIHBhZGRpbmctYm90dG9tOiA4cHg7DQogIG1hcmdpbi10b3A6IDM1cHg7DQp9DQoNCi8qID09PT09IFRPT0xUSVAgPT09PT0gKi8NCi50b29sdGlwIHsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICBjdXJzb3I6IGhlbHA7DQogIGNvbG9yOiAjNzE4MDk2Ow0KICBmb250LXdlaWdodDogNTAwOw0KICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkICNhMGFlYzA7DQp9DQoNCi50b29sdGlwOjphZnRlciB7DQogIGNvbnRlbnQ6IGF0dHIoZGF0YS10aXApOw0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIGJvdHRvbTogMTM1JTsNCiAgbGVmdDogNTAlOw0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7DQogIGJhY2tncm91bmQtY29sb3I6ICM0YTU1Njg7DQogIGNvbG9yOiAjZjdmYWZjOw0KICBwYWRkaW5nOiAxMHB4IDE0cHg7DQogIGJvcmRlci1yYWRpdXM6IDhweDsNCiAgZm9udC1zaXplOiAxM3B4Ow0KICBvcGFjaXR5OiAwOw0KICBwb2ludGVyLWV2ZW50czogbm9uZTsNCiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsNCiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2U7DQogIGJveC1zaGFkb3c6IDAgNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMSk7DQp9DQoNCi50b29sdGlwOmhvdmVyOjphZnRlciB7DQogIG9wYWNpdHk6IDE7DQp9DQoNCi8qID09PT09IERJU1RSSUJVVElPTiBJTUFHRSA9PT09PSAqLw0KLmRpc3RyaWJ1dGlvbi1ib3ggew0KICBiYWNrZ3JvdW5kOiAjZmZmZmZmOw0KICBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwOw0KICBib3JkZXItcmFkaXVzOiAxMnB4Ow0KICBwYWRkaW5nOiAyMHB4Ow0KICBtYXJnaW46IDMwcHggYXV0bzsNCiAgbWF4LXdpZHRoOiA3NTBweDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBib3gtc2hhZG93OiAwIDRweCA2cHggcmdiYSgwLCAwLCAwLCAwLjA1KTsNCn0NCg0KLmRpc3RyaWJ1dGlvbi1ib3ggaW1nIHsNCiAgbWF4LXdpZHRoOiAxMDAlOw0KICBib3JkZXItcmFkaXVzOiA4cHg7DQogIGJveC1zaGFkb3c6IDAgNnB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjA4KTsNCn0NCg0KLmRpc3RyaWJ1dGlvbi1jYXB0aW9uIHsNCiAgZm9udC1zaXplOiAxNHB4Ow0KICBjb2xvcjogIzcxODA5NjsNCiAgbWFyZ2luLXRvcDogMTBweDsNCiAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQovKiA9PT09PT09PT09PT09PT09PT09PT0gTUFJTiBDT05UQUlORVIgPT09PT09PT09PT09PT09PT09PT09ICovDQoubWFpbi1jb250YWluZXIgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7DQogIHBhZGRpbmc6IDMwcHg7DQogIGJvcmRlci1yYWRpdXM6IDEycHg7DQogIGJveC1zaGFkb3c6IDAgMnB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjA0KTsNCn0NCg0KLyogPT09PT09PT09PT09PT09PT09PT09IEhFQURFUiBBVEFTID09PT09PT09PT09PT09PT09PT09PSAqLw0KI2hlYWRlciwgLnRpdGxlLCAuc3VidGl0bGUgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7DQogIGNvbG9yOiAjNGE1NTY4ICFpbXBvcnRhbnQ7DQogIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZTJlOGYwICFpbXBvcnRhbnQ7DQp9DQoNCi8qID09PT09PT09PT09PT09PT09PT09PSBKVURVTCA9PT09PT09PT09PT09PT09PT09PT0gKi8NCmgxLCBoMiwgaDMsIGg0IHsNCiAgY29sb3I6ICMyZDM3NDggIWltcG9ydGFudDsNCn0NCg0KLyogPT09PT09PT09PT09PT09PT09PT09IExJTksgPT09PT09PT09PT09PT09PT09PT09ICovDQphIHsNCiAgY29sb3I6ICM0YzUxYmYgIWltcG9ydGFudDsNCiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzIGVhc2U7DQp9DQphOmhvdmVyIHsNCiAgY29sb3I6ICM2NjdlZWEgIWltcG9ydGFudDsNCiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQp9DQoNCi8qID09PT09PT09PT09PT09PT09PT09PSBDT0RFIENIVU5LID09PT09PT09PT09PT09PT09PT09PSAqLw0KcHJlIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2VkZjJmNyAhaW1wb3J0YW50Ow0KICBib3JkZXItbGVmdDogNHB4IHNvbGlkICNhMGFlYzAgIWltcG9ydGFudDsNCiAgYm9yZGVyLXJhZGl1czogOHB4Ow0KICBwYWRkaW5nOiAxNXB4ICFpbXBvcnRhbnQ7DQp9DQoNCmNvZGUgew0KICBjb2xvcjogIzRhNTU2OCAhaW1wb3J0YW50Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmYWZjOw0KICBwYWRkaW5nOiAycHggNnB4Ow0KICBib3JkZXItcmFkaXVzOiA0cHg7DQp9DQoNCi8qID09PT09PT09PT09PT09PT09PT09PSBPVVRQVVQgPT09PT09PT09PT09PT09PT09PT09ICovDQpkaXYuci1vdXRwdXQgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmYWZjICFpbXBvcnRhbnQ7DQogIGJvcmRlci1yYWRpdXM6IDhweDsNCiAgYm9yZGVyOiAxcHggc29saWQgI2UyZThmMDsNCiAgcGFkZGluZzogMTVweDsNCn0NCg0KLyogPT09PT09PT09PT09PT09PT09PT09IFRBQkVMID09PT09PT09PT09PT09PT09PT09PSAqLw0KdGFibGUgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7DQogIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7DQogIHdpZHRoOiAxMDAlOw0KfQ0KDQp0aCB7DQogIGJhY2tncm91bmQtY29sb3I6ICNlMmU4ZjAgIWltcG9ydGFudDsNCiAgY29sb3I6ICMyZDM3NDggIWltcG9ydGFudDsNCiAgZm9udC13ZWlnaHQ6IDYwMDsNCiAgcGFkZGluZzogMTBweDsNCn0NCg0KdGQgew0KICBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwICFpbXBvcnRhbnQ7DQogIHBhZGRpbmc6IDhweCAxMHB4Ow0KfQ0KDQovKiA9PT09PT09PT09PT09PT09PT09PT0gTkFWSUdBVElPTiA9PT09PT09PT09PT09PT09PT09PT0gKi8NCi5uYXZiYXIsDQoubmF2YmFyLWRlZmF1bHQgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7DQogIGJvcmRlci1jb2xvcjogI2UyZThmMCAhaW1wb3J0YW50Ow0KfQ0KDQoubmF2YmFyIGEgew0KICBjb2xvcjogIzRhNTU2OCAhaW1wb3J0YW50Ow0KfQ0KDQovKiA9PT09PT09PT09PT09PT09PT09PT0gSFIgTElORVMgPT09PT09PT09PT09PT09PT09PT09ICovDQpociB7DQogIGJvcmRlcjogbm9uZTsNCiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlMmU4ZjA7DQogIG1hcmdpbjogMjVweCAwOw0KfQ0KDQovKiA9PT09PT09PT09PT09PT09PT09PT0gQkxPQ0tRVU9URVMgPT09PT09PT09PT09PT09PT09PT09ICovDQpibG9ja3F1b3RlIHsNCiAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjY2JkNWUwOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmYWZjOw0KICBwYWRkaW5nOiAxNXB4IDIwcHg7DQogIGNvbG9yOiAjNGE1NTY4Ow0KICBmb250LXN0eWxlOiBpdGFsaWM7DQogIG1hcmdpbjogMjBweCAwOw0KICBib3JkZXItcmFkaXVzOiAwIDhweCA4cHggMDsNCn0NCg0KLyogPT09PT09PT09PT09PT09PT09PT09IEJVVFRPTlMgPT09PT09PT09PT09PT09PT09PT09ICovDQpidXR0b24sIC5idG4gew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTJlOGYwOw0KICBjb2xvcjogIzRhNTU2ODsNCiAgYm9yZGVyOiAxcHggc29saWQgI2NiZDVlMDsNCiAgcGFkZGluZzogOHB4IDE2cHg7DQogIGJvcmRlci1yYWRpdXM6IDZweDsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOw0KfQ0KDQpidXR0b246aG92ZXIsIC5idG46aG92ZXIgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2JkNWUwOw0KICBjb2xvcjogIzJkMzc0ODsNCn0NCjwvc3R5bGU+DQpgYGANCg0KPGRpdiBzdHlsZT0iDQogIHRleHQtYWxpZ246Y2VudGVyOyANCiAgbWFyZ2luLXRvcDozMHB4OyANCiAgbWFyZ2luLWJvdHRvbTo0MHB4Ow0KICBmb250LWZhbWlseTogJ1NlZ29lIFVJJywgQXJpYWwsIHNhbnMtc2VyaWY7DQogIGNvbG9yOiMzNzQxNTE7DQoiPg0KDQogIDxpbWcgDQogICAgc3JjPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYWRpbmRhYWRlbGlhZnV0cmk2LWdpZi9hZGluZGFhZGVsaWEvbWFpbi9hZGluZGFhZGVsaWEuanBlZyIgDQogICAgYWx0PSJGb3RvIE1haGFzaXN3YSINCiAgICBzdHlsZT0iDQogICAgICB3aWR0aDoxODBweDsgDQogICAgICBib3JkZXItcmFkaXVzOjEwcHg7IA0KICAgICAgYm9yZGVyOjJweCBzb2xpZCAjOWNhM2FmOyANCiAgICAgIGJveC1zaGFkb3c6MCA0cHggMTBweCByZ2JhKDAsMCwwLDAuMTUpOw0KICAgICAgbWFyZ2luLWJvdHRvbToxMnB4Ow0KICAgICINCiAgPg0KDQogIDxwIHN0eWxlPSINCiAgICBtYXJnaW46MDsgDQogICAgZm9udC1zaXplOjE1cHg7IA0KICAgIGZvbnQtd2VpZ2h0OjYwMDsgDQogICAgY29sb3I6IzExMTgyNzsNCiAgIj4NCiAgICBBZGluZGEgQWRlbGlhIEZ1dHJpDQogIDwvcD4NCg0KICA8cCBzdHlsZT0iDQogICAgbWFyZ2luOjJweCAwIDAgMDsgDQogICAgZm9udC1zaXplOjEzcHg7IA0KICAgIGNvbG9yOiM0YjU1NjM7DQogICI+DQogICAgSW5zdGl0dXQgVGVrbm9sb2dpIFNhaW5zIEJhbmR1bmcgKElUU0IpDQogIDwvcD4NCg0KICA8cCBzdHlsZT0iDQogICAgbWFyZ2luOjA7IA0KICAgIGZvbnQtc2l6ZToxM3B4OyANCiAgICBjb2xvcjojNmI3MjgwOw0KICAiPg0KICAgIFByb2dyYW0gU3R1ZGkgRGF0YSBTY2llbmNlDQogIDwvcD4NCg0KPC9kaXY+DQoNCjxociBzdHlsZT0iDQogIGJvcmRlcjpub25lOyANCiAgaGVpZ2h0OjFweDsgDQogIGJhY2tncm91bmQtY29sb3I6I2QxZDVkYjsgDQogIHdpZHRoOjYwJTsgDQogIG1hcmdpbjphdXRvOyANCiAgbWFyZ2luLWJvdHRvbTo0MHB4Ow0KIj4NCg0KDQoNCiMg8J+TmCBDYXNlIFN0dWR5IDEgIA0KIyMgT25lLVNhbXBsZSBaLVRlc3QgKFN0YXRpc3RpY2FsIEh5cG90aGVzZXMpDQoNCi0tLQ0KDQojIyAx77iP4oOjIERlc2tyaXBzaSBNYXNhbGFoDQoNClNlYnVhaCBwbGF0Zm9ybSBwZW1iZWxhamFyYW4gZGlnaXRhbCBtZW5na2xhaW0gYmFod2EgKipyYXRhLXJhdGEgd2FrdHUgYmVsYWphciBoYXJpYW4gcGVuZ2d1bmEqKiBhZGFsYWggKioxMjAgbWVuaXQqKi4NCg0KQmVyZGFzYXJrYW4gZGF0YSBoaXN0b3JpcyBkYW4gcGVuZ2FtYmlsYW4gc2FtcGVsLCBkaXBlcm9sZWggaW5mb3JtYXNpIGJlcmlrdXQ6DQoNCi0gUmF0YS1yYXRhIHBvcHVsYXNpIChrbGFpbSBwZXJ1c2FoYWFuKTogIA0KICBcWw0KICBcbXVfMCA9IDEyMA0KICBcXQ0KDQotIFN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaSAoZGlrZXRhaHVpKTogIA0KICBcWw0KICBcc2lnbWEgPSAxNQ0KICBcXQ0KDQotIFVrdXJhbiBzYW1wZWw6ICANCiAgXFsNCiAgbiA9IDY0DQogIFxdDQoNCi0gUmF0YS1yYXRhIHNhbXBlbDogIA0KICBcWw0KICBcYmFye3h9ID0gMTE2DQogIFxdDQoNCi0gVGluZ2thdCBzaWduaWZpa2Fuc2k6ICANCiAgXFsNCiAgXGFscGhhID0gMC4wNQ0KICBcXQ0KDQpUdWp1YW4gYW5hbGlzaXMgYWRhbGFoICoqbWVuZ3VqaSBzZWNhcmEgc3RhdGlzdGlrIGFwYWthaCByYXRhLXJhdGEgd2FrdHUgYmVsYWphciBwZW5nZ3VuYSBiZXJiZWRhIGRhcmkga2xhaW0gcGVydXNhaGFhbioqLg0KDQotLS0NCg0KIyMgMu+4j+KDoyBGb3JtdWxhc2kgSGlwb3Rlc2lzDQoNCkthcmVuYSBrbGFpbSBwZXJ1c2FoYWFuIG1lbnlhdGFrYW4gKipuaWxhaSByYXRhLXJhdGEgdGVydGVudHUqKiBkYW4gYW5hbGlzaXMgaW5naW4gbWVuZ2V0YWh1aSBhcGFrYWggZGF0YSAqKmJlcmJlZGEgZGFyaSBuaWxhaSB0ZXJzZWJ1dCoqLCBtYWthIGRpZ3VuYWthbiAqKnVqaSBkdWEgc2lzaSoqLg0KDQojIyMgSGlwb3Rlc2lzIFN0YXRpc3Rpaw0KDQpcWw0KSF8wIDogXG11ID0gMTIwDQpcXQ0KDQpcWw0KSF8xIDogXG11IFxuZXEgMTIwDQpcXQ0KDQotLS0NCg0KIyMgM++4j+KDoyBQZW1pbGloYW4gVWppIFN0YXRpc3Rpaw0KDQpVamkgc3RhdGlzdGlrIHlhbmcgZGlndW5ha2FuIGFkYWxhaCAqKk9uZS1TYW1wbGUgWi1UZXN0KiosIGRlbmdhbiBwZXJ0aW1iYW5nYW46DQoNCjEuIFN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaSAoXChcc2lnbWFcKSkgKipkaWtldGFodWkqKg0KMi4gVWt1cmFuIHNhbXBlbCBjdWt1cCBiZXNhciAoXChuIFxnZXEgMzBcKSkNCjMuIFBhcmFtZXRlciB5YW5nIGRpdWppIGFkYWxhaCAqKnJhdGEtcmF0YSBwb3B1bGFzaSoqDQoNCkRlbmdhbiBrb25kaXNpIHRlcnNlYnV0LCAqKk9uZS1TYW1wbGUgWi1UZXN0KiogbWVydXBha2FuIHVqaSB5YW5nIHBhbGluZyB0ZXBhdCBzZXN1YWkgbWF0ZXJpICpTdGF0aXN0aWNhbCBJbmZlcmVuY2UqLg0KDQotLS0NCg0KIyMgNO+4j+KDoyBQZXJoaXR1bmdhbiBNYW51YWwgKFN0ZXAtYnktU3RlcCkNCg0KIyMjIOKcj++4jyBTdGVwIDEg4oCTIE1lbmdoaXR1bmcgU3RhbmRhcmQgRXJyb3IgKFNFKQ0KDQpSdW11cyBTdGFuZGFyZCBFcnJvcjoNCg0KXFsNClNFID0gXGZyYWN7XHNpZ21hfXtcc3FydHtufX0NClxdDQoNClN1YnN0aXR1c2kgbmlsYWk6DQoNClxbDQpTRSA9IFxmcmFjezE1fXtcc3FydHs2NH19ID0gXGZyYWN7MTV9ezh9ID0gMS44NzUNClxdDQoNCkFydGlueWEsIHJhdGEtcmF0YSBzYW1wZWwgZGlwZXJraXJha2FuIG1lbnlpbXBhbmcgc2VraXRhciAqKjEuODc1IG1lbml0KiogZGFyaSByYXRhLXJhdGEgcG9wdWxhc2kuDQoNCi0tLQ0KDQojIyMg4pyP77iPIFN0ZXAgMiDigJMgTWVuZ2hpdHVuZyBTdGF0aXN0aWsgVWppIChaLVNjb3JlKQ0KDQpSdW11cyBzdGF0aXN0aWsgdWppIFo6DQoNClxbDQpaID0gXGZyYWN7XGJhcnt4fSAtIFxtdV8wfXtTRX0NClxdDQoNClN1YnN0aXR1c2kgbmlsYWk6DQoNClxbDQpaID0gXGZyYWN7MTE2IC0gMTIwfXsxLjg3NX0gPSBcZnJhY3stNH17MS44NzV9ID0gLTIuMTMNClxdDQoNCi0tLQ0KDQojIyA177iP4oOjIE1lbmVudHVrYW4gcC12YWx1ZQ0KDQpLYXJlbmEgcGVuZ3VqaWFuIHlhbmcgZGlsYWt1a2FuIGFkYWxhaCAqKnVqaSBkdWEgc2lzaSoqLCBtYWthIHAtdmFsdWUgZGloaXR1bmcgbWVuZ2d1bmFrYW4gKipuaWxhaSBhYnNvbHV0IGRhcmkgc3RhdGlzdGlrIHVqaSBaKiosIHNlc3VhaSBkZW5nYW4gc3RhbmRhciBwYWRhIG1hdGVyaSAqU3RhdGlzdGljYWwgSW5mZXJlbmNlKjoNCg0KXFsNCnBcdGV4dHstdmFsdWV9ID0gMiBcdGltZXMgUChaIDwgLXxafCkNClxdDQoNCmF0YXUgc2VjYXJhIGVrdWl2YWxlbjoNCg0KXFsNCnBcdGV4dHstdmFsdWV9ID0gMiBcdGltZXMgKDEgLSBcUGhpKHxafCkpDQpcXQ0KDQpEZW5nYW4gbmlsYWkgc3RhdGlzdGlrIHVqaToNCg0KXFsNClogPSAtMi4xMw0KXF0NCg0KbWFrYToNCg0KXFsNCnBcdGV4dHstdmFsdWV9ID0gMiBcdGltZXMgUChaIDwgLTIuMTMpDQpcXQ0KDQpCZXJkYXNhcmthbiB0YWJlbCBkaXN0cmlidXNpIG5vcm1hbCBzdGFuZGFyOg0KDQpcWw0KUChaIDwgLTIuMTMpIFxhcHByb3ggMC4wMTY2DQpcXQ0KDQpTZWhpbmdnYToNCg0KXFsNCnBcdGV4dHstdmFsdWV9ID0gMiBcdGltZXMgMC4wMTY2ID0gMC4wMzMyDQpcXQ0KDQotLS0NCg0KIyMgNu+4j+KDoyBLZXB1dHVzYW4gU3RhdGlzdGlrDQoNCkJhbmRpbmdrYW4gcC12YWx1ZSBkZW5nYW4gdGluZ2thdCBzaWduaWZpa2Fuc2k6DQoNClxbDQpwXHRleHR7LXZhbHVlfSA9IDAuMDMzMg0KXF0NCg0KXFsNClxhbHBoYSA9IDAuMDUNClxdDQoNCkthcmVuYToNCg0KXFsNCnBcdGV4dHstdmFsdWV9IDwgXGFscGhhDQpcXQ0KDQojIyMgKipLZXB1dHVzYW46IFRvbGFrIFwoSF8wXCkqKg0KDQotLS0NCg0KIyMgN++4j+KDoyBJbnRlcnByZXRhc2kgSGFzaWwNCg0KIyMjIPCfk4wgSW50ZXJwcmV0YXNpIFN0YXRpc3Rpaw0KDQpQYWRhIHRpbmdrYXQgc2lnbmlmaWthbnNpIDUlLCB0ZXJkYXBhdCAqKmJ1a3RpIHN0YXRpc3RpayB5YW5nIHNpZ25pZmlrYW4qKiBiYWh3YSAqKnJhdGEtcmF0YSB3YWt0dSBiZWxhamFyIGhhcmlhbiBwZW5nZ3VuYSBiZXJiZWRhIGRhcmkgMTIwIG1lbml0KiouDQoNCi0tLQ0KDQojIyMg8J+TjCBJbnRlcnByZXRhc2kgQmlzbmlzIChCdXNpbmVzcyBBbmFseXRpY3MpDQoNCkhhc2lsIGluaSBtZW51bmp1a2thbiBiYWh3YSBrbGFpbSBwZXJ1c2FoYWFuIG1lbmdlbmFpIHJhdGEtcmF0YSB3YWt0dSBiZWxhamFyICoqMTIwIG1lbml0IHBlciBoYXJpIHRpZGFrIHNlcGVudWhueWEgZGlkdWt1bmcgb2xlaCBkYXRhKiouDQoNClJhdGEtcmF0YSBha3R1YWwgeWFuZyB0ZXJhbWF0aSAoKioxMTYgbWVuaXQqKikgc2VjYXJhIHN0YXRpc3RpayAqKmxlYmloIHJlbmRhaCBkYXJpIGtsYWltIHBlcnVzYWhhYW4qKi4NCg0KSW1wbGlrYXNpIGJpc25pczoNCg0KLSBLbGFpbSBwZXJmb3JtYSBwbGF0Zm9ybSBwZXJsdSAqKmRpZXZhbHVhc2kgdWxhbmcqKg0KLSBQZXJ1c2FoYWFuIGRhcGF0Og0KDQogIC0gbWVuaW5na2F0a2FuIGVuZ2FnZW1lbnQgcGVuZ2d1bmENCiAgLSBtZW5nb3B0aW1hbGthbiBmaXR1ciBwZW1iZWxhamFyYW4NCiAgLSBtZW55ZXN1YWlrYW4gc3RyYXRlZ2kgcHJvZHVrIGRhbiBwZW1hc2FyYW4NCg0KLS0tDQoNCiMjIDjvuI/ig6MgVmVyaWZpa2FzaSBQZXJoaXR1bmdhbiBNZW5nZ3VuYWthbiBSDQoNCmBgYHtyfQ0KIyA9PT09PT09PT09PT09PT09PT09PT09DQojIERBVEEgREFOIFBBUkFNRVRFUg0KIyA9PT09PT09PT09PT09PT09PT09PT09DQptdV8wICA8LSAxMjANCnhfYmFyIDwtIDExNg0Kc2lnbWEgPC0gMTUNCm4gICAgIDwtIDY0DQphbHBoYSA8LSAwLjA1DQoNCiMgPT09PT09PT09PT09PT09PT09PT09PQ0KIyBQRVJISVRVTkdBTg0KIyA9PT09PT09PT09PT09PT09PT09PT09DQpTRSA8LSBzaWdtYSAvIHNxcnQobikgICAgICAgICAgIyBTdGFuZGFyZCBFcnJvcg0KWiAgPC0gKHhfYmFyIC0gbXVfMCkgLyBTRSAgICAgICMgU3RhdGlzdGlrIHVqaSBaDQoNCiMgcC12YWx1ZSBkdWEgc2lzaSAoc2VzdWFpIHN0YW5kYXIgYnVrdSkNCnBfdmFsdWUgPC0gMiAqICgxIC0gcG5vcm0oYWJzKFopKSkNCg0KIyA9PT09PT09PT09PT09PT09PT09PT09DQojIE9VVFBVVA0KIyA9PT09PT09PT09PT09PT09PT09PT09DQpaDQpwX3ZhbHVlDQpgYGANCi0tLQ0KDQojIPCfk5ggQ2FzZSBTdHVkeSAyICANCiMjIE9uZS1TYW1wbGUgdC1UZXN0ICjPgyBUaWRhayBEaWtldGFodWksIFNhbXBlbCBLZWNpbCkNCg0KLS0tDQoNCiMjIDHvuI/ig6MgTGF0YXIgQmVsYWthbmcgTWFzYWxhaA0KDQpUaW0gKipVWCBSZXNlYXJjaCoqIGluZ2luIG1lbmdldmFsdWFzaSBhcGFrYWggKipyYXRhLXJhdGEgd2FrdHUgcGVueWVsZXNhaWFuIHR1Z2FzKiogcGFkYSBhcGxpa2FzaSBiYXJ1ICoqYmVyYmVkYSBkYXJpIDEwIG1lbml0KiosIHlhbmcgc2VsYW1hIGluaSBkaWd1bmFrYW4gc2ViYWdhaSBzdGFuZGFyIChiZW5jaG1hcmspLg0KDQpEYXRhIGRpa3VtcHVsa2FuIGRhcmkgKioxMCBwZW5nZ3VuYSoqIGRhbiBkaXBlcm9sZWggd2FrdHUgcGVueWVsZXNhaWFuIHR1Z2FzIChkYWxhbSBtZW5pdCkgc2ViYWdhaSBiZXJpa3V0Og0KDQo5LjIsIDEwLjUsIDkuOCwgMTAuMSwgOS42LCAxMC4zLCA5LjksIDkuNywgMTAuMCwgOS41DQoNCkthcmVuYToNCg0KLSBzdGFuZGFyIGRldmlhc2kgcG9wdWxhc2kgKip0aWRhayBkaWtldGFodWkqKiwgZGFuDQotIHVrdXJhbiBzYW1wZWwgKiprZWNpbCAobiA8IDMwKSoqLA0KDQptYWthIHBlbmd1amlhbiBoaXBvdGVzaXMgZGlsYWt1a2FuIG1lbmdndW5ha2FuICoqZGlzdHJpYnVzaSB0KiouDQoNCi0tLQ0KDQojIyAy77iP4oOjIEZvcm11bGFzaSBIaXBvdGVzaXMgKFVqaSBEdWEgU2lzaSkNCg0KUGVydGFueWFhbiBwZW5lbGl0aWFuIGJlcmJ1bnlpICrigJxhcGFrYWggcmF0YS1yYXRhIHdha3R1IHBlbnllbGVzYWlhbiB0dWdhcyBiZXJiZWRhIGRhcmkgMTAgbWVuaXTigJ0qLCBzZWhpbmdnYSBkaWd1bmFrYW4gKip1amkgZHVhIHNpc2kgKHR3by10YWlsZWQgdGVzdCkqKi4NCg0KXFsNCkhfMCA6IFxtdSA9IDEwDQpcXQ0KDQpcWw0KSF8xIDogXG11IFxuZXEgMTANClxdDQoNCi0tLQ0KDQojIyAz77iP4oOjIFBlbWlsaWhhbiBVamkgU3RhdGlzdGlrDQoNClVqaSBzdGF0aXN0aWsgeWFuZyBkaWd1bmFrYW4gYWRhbGFoICoqT25lLVNhbXBsZSB0LVRlc3QqKiwgZGVuZ2FuIGFsYXNhbjoNCg0KMS4gRGF0YSBiZXJza2FsYSBudW1lcmlrICh3YWt0dSBkYWxhbSBtZW5pdCkNCjIuIFBhcmFtZXRlciB5YW5nIGRpdWppIGFkYWxhaCAqKnJhdGEtcmF0YSBwb3B1bGFzaSoqDQozLiBTdGFuZGFyIGRldmlhc2kgcG9wdWxhc2kgKip0aWRhayBkaWtldGFodWkqKg0KNC4gVWt1cmFuIHNhbXBlbCAqKmtlY2lsIChuID0gMTApKioNCg0KS29uZGlzaSBpbmkgc2VzdWFpIGRlbmdhbiBhc3Vtc2kgcGVuZ2d1bmFhbiAqKmRpc3RyaWJ1c2kgdCoqIHBhZGEgbWF0ZXJpICpTdGF0aXN0aWNhbCBJbmZlcmVuY2UqLg0KDQotLS0NCg0KIyMgNO+4j+KDoyBQZXJoaXR1bmdhbiBNYW51YWwgKFN0ZXAtYnktU3RlcCkNCg0KIyMjIOKcj++4jyBTdGVwIDEg4oCTIFVrdXJhbiBTYW1wZWwgZGFuIERlcmFqYXQgS2ViZWJhc2FuDQoNClVrdXJhbiBzYW1wZWw6DQpcWw0KbiA9IDEwDQpcXQ0KDQpEZXJhamF0IGtlYmViYXNhbjoNClxbDQpkZiA9IG4gLSAxID0gOQ0KXF0NCg0KLS0tDQoNCiMjIyDinI/vuI8gU3RlcCAyIOKAkyBNZW5naGl0dW5nIFJhdGEtcmF0YSBTYW1wZWwgKFwoXGJhcnt4fVwpKQ0KDQpcWw0KXGJhcnt4fSA9IFxmcmFje1xzdW0geF9pfXtufQ0KXF0NCg0KSnVtbGFoIHNlbHVydWggZGF0YToNClxbDQpcc3VtIHhfaSA9IDk4LjYNClxdDQoNClxbDQpcYmFye3h9ID0gXGZyYWN7OTguNn17MTB9ID0gOS44Ng0KXF0NCg0KQXJ0aW55YSwgcmF0YS1yYXRhIHdha3R1IHBlbnllbGVzYWlhbiB0dWdhcyBwYWRhIHNhbXBlbCBhZGFsYWggKio5Ljg2IG1lbml0KiouDQoNCi0tLQ0KDQojIyMg4pyP77iPIFN0ZXAgMyDigJMgTWVuZ2hpdHVuZyBTdGFuZGFyIERldmlhc2kgU2FtcGVsIChzKQ0KDQpSdW11cyBzdGFuZGFyIGRldmlhc2kgc2FtcGVsOg0KDQpcWw0KcyA9IFxzcXJ0e1xmcmFje1xzdW0gKHhfaSAtIFxiYXJ7eH0pXjJ9e24gLSAxfX0NClxdDQoNCkhhc2lsIHBlcmhpdHVuZ2FuIG1hbnVhbDoNCg0KXFsNCnMgXGFwcHJveCAwLjM5DQpcXQ0KDQpOaWxhaSBpbmkgbWVudW5qdWtrYW4gYmFod2EgdmFyaWFzaSB3YWt0dSBwZW55ZWxlc2FpYW4gdHVnYXMgYW50YXIgcGVuZ2d1bmEgcmVsYXRpZiBrZWNpbC4NCg0KLS0tDQoNCiMjIyDinI/vuI8gU3RlcCA0IOKAkyBNZW5naGl0dW5nIFN0YW5kYXJkIEVycm9yIChTRSkNCg0KXFsNClNFID0gXGZyYWN7c317XHNxcnR7bn19DQpcXQ0KDQpcWw0KU0UgPSBcZnJhY3swLjM5fXtcc3FydHsxMH19ID0gXGZyYWN7MC4zOX17My4xNjJ9IFxhcHByb3ggMC4xMjMNClxdDQoNCi0tLQ0KDQojIyMg4pyP77iPIFN0ZXAgNSDigJMgTWVuZ2hpdHVuZyBTdGF0aXN0aWsgVWppIHQNCg0KUnVtdXMgc3RhdGlzdGlrIHVqaSB0Og0KDQpcWw0KdCA9IFxmcmFje1xiYXJ7eH0gLSBcbXVfMH17U0V9DQpcXQ0KDQpTdWJzdGl0dXNpIG5pbGFpOg0KDQpcWw0KdCA9IFxmcmFjezkuODYgLSAxMH17MC4xMjN9ID0gXGZyYWN7LTAuMTR9ezAuMTIzfSBcYXBwcm94IC0xLjE0DQpcXQ0KDQotLS0NCg0KIyMjIOKcj++4jyBTdGVwIDYg4oCTIE1lbmVudHVrYW4gcC12YWx1ZQ0KDQpEZW5nYW46DQotIFN0YXRpc3RpayB1amk6IFwoIHQgPSAtMS4xNCBcKQ0KLSBEZXJhamF0IGtlYmViYXNhbjogXCggZGYgPSA5IFwpDQotIEplbmlzIHVqaTogKipkdWEgc2lzaSoqDQoNCkJlcmRhc2Fya2FuIHRhYmVsIGRpc3RyaWJ1c2kgdDoNCg0KXFsNCnBcdGV4dHstdmFsdWV9IFxhcHByb3ggMC4yOA0KXF0NCg0KTmlsYWkgaW5pIG1lcnVwYWthbiAqKnBlbmRla2F0YW4qKiBtZW5nZ3VuYWthbiB0YWJlbCBkaXN0cmlidXNpIHQuDQoNCi0tLQ0KDQojIyA177iP4oOjIEtlcHV0dXNhbiBTdGF0aXN0aWsgKM6xID0gMC4wNSkNCg0KS3JpdGVyaWEga2VwdXR1c2FuOg0KLSBKaWthIFwoIHBcdGV4dHstdmFsdWV9IFxsZSAwLjA1IFwpIOKGkiBUb2xhayBcKEhfMFwpDQotIEppa2EgXCggcFx0ZXh0ey12YWx1ZX0gPiAwLjA1IFwpIOKGkiBHYWdhbCBtZW5vbGFrIFwoSF8wXCkNCg0KS2FyZW5hOg0KXFsNCjAuMjggPiAwLjA1DQpcXQ0KDQojIyMgKipLZXB1dHVzYW46IEdhZ2FsIG1lbm9sYWsgXChIXzBcKSoqDQoNCi0tLQ0KDQojIyA277iP4oOjIFRhYmVsIFJpbmdrYXNhbiBIYXNpbCBVamkNCg0KfCBLb21wb25lbiB8IE5pbGFpIHwNCnwtLS0tLS0tLXwtLS0tLS18DQp8IFJhdGEtcmF0YSBzYW1wZWwgKFwoXGJhcnt4fVwpKSB8IDkuODYgfA0KfCBOaWxhaSBoaXBvdGVzaXMgKFwoXG11XzBcKSkgfCAxMCB8DQp8IFN0YW5kYXIgZGV2aWFzaSBzYW1wZWwgKHMpIHwgMC4zOSB8DQp8IFN0YW5kYXJkIEVycm9yIChTRSkgfCAwLjEyMyB8DQp8IHQtc3RhdGlzdGljIHwgLTEuMTQgfA0KfCBwLXZhbHVlIHwgMC4yOCB8DQp8IEtlcHV0dXNhbiB8IEdhZ2FsIG1lbm9sYWsgXChIXzBcKSB8DQoNCi0tLQ0KDQojIyA377iP4oOjIEludGVycHJldGFzaSBIYXNpbA0KDQojIyMg8J+TjCBJbnRlcnByZXRhc2kgU3RhdGlzdGlrDQoNClBhZGEgdGluZ2thdCBzaWduaWZpa2Fuc2kgNSUsICoqdGlkYWsgdGVyZGFwYXQgYnVrdGkgc3RhdGlzdGlrIHlhbmcgY3VrdXAqKiB1bnR1ayBtZW55YXRha2FuIGJhaHdhICoqcmF0YS1yYXRhIHdha3R1IHBlbnllbGVzYWlhbiB0dWdhcyBiZXJiZWRhIGRhcmkgMTAgbWVuaXQqKi4NCg0KLS0tDQoNCiMjIyDwn5OMIEludGVycHJldGFzaSBVWCAvIFByb2R1aw0KDQpIYXNpbCBwZW5ndWppYW4gbWVudW5qdWtrYW4gYmFod2EgcGVyZm9ybWEgYXBsaWthc2kgYmFydSAqKmJlbHVtIGJlcmJlZGEgc2VjYXJhIHNpZ25pZmlrYW4qKiBkaWJhbmRpbmdrYW4gc3RhbmRhciB3YWt0dSBwZW55ZWxlc2FpYW4gMTAgbWVuaXQuDQoNCkRlbmdhbiBrYXRhIGxhaW4sIHdha3R1IHBlbnllbGVzYWlhbiB0dWdhcyBwZW5nZ3VuYSBtYXNpaCBiZXJhZGEgcGFkYSB0aW5na2F0IHlhbmcgKipzZWJhbmRpbmcgZGVuZ2FuIGJlbmNobWFyayoqIHlhbmcgZGlndW5ha2FuLg0KDQotLS0NCg0KIyMgOO+4j+KDoyBQZW5nYXJ1aCBVa3VyYW4gU2FtcGVsIHRlcmhhZGFwIEluZmVyZW5zaQ0KDQpLYXJlbmEgdWt1cmFuIHNhbXBlbCByZWxhdGlmIGtlY2lsIChcKG4gPSAxMFwpKToNCg0KLSBFc3RpbWFzaSByYXRhLXJhdGEgbWVuamFkaSAqKmt1cmFuZyBzdGFiaWwqKg0KLSBTdGFuZGFyZCBlcnJvciByZWxhdGlmIGxlYmloIGJlc2FyDQotICoqS2VrdWF0YW4gdWppIChwb3dlcikgcmVuZGFoKioNCi0gUGVyYmVkYWFuIGtlY2lsIHN1bGl0IHRlcmRldGVrc2kgc2VjYXJhIHN0YXRpc3Rpaw0KDQrwn5OMICoqUmVrb21lbmRhc2k6KiogIA0KTWVuYW1iYWgganVtbGFoIHBlbmdndW5hIHVqaSBha2FuIG1lbmluZ2thdGthbiBrZWFuZGFsYW4gaW5mZXJlbnNpIGRhbiBzZW5zaXRpdml0YXMgcGVuZ3VqaWFuIHN0YXRpc3Rpay4NCg0KLS0tDQoNCiMjIDnvuI/ig6MgVmVyaWZpa2FzaSBNZW5nZ3VuYWthbiBSDQoNCmBgYHtyfQ0KIyBEYXRhDQp4IDwtIGMoOS4yLCAxMC41LCA5LjgsIDEwLjEsIDkuNiwgMTAuMywgOS45LCA5LjcsIDEwLjAsIDkuNSkNCg0KIyBPbmUtU2FtcGxlIHQtVGVzdCAoZHVhIHNpc2kpDQp0LnRlc3QoeCwgbXUgPSAxMCkNCmBgYA0KDQoNCi0tLQ0KDQojIPCfk5ggQ2FzZSBTdHVkeSAzICANCiMjIFR3by1TYW1wbGUgdC1UZXN0IChBL0IgVGVzdGluZyDigJMgV2VsY2jigJlzIFRlc3QpDQoNCi0tLQ0KDQojIyAx77iP4oOjIExhdGFyIEJlbGFrYW5nIE1hc2FsYWgNCg0KVGltICoqUHJvZHVjdCBBbmFseXRpY3MqKiBtZWxha3VrYW4gKipBL0IgVGVzdGluZyoqIHVudHVrIG1lbWJhbmRpbmdrYW4gKipyYXRhLXJhdGEgZHVyYXNpIHNlc2kgcGVuZ2d1bmEgKGRhbGFtIG1lbml0KSoqIGFudGFyYSBkdWEgdmVyc2kgbGFuZGluZyBwYWdlOg0KDQotICoqVmVyc2kgQSoqOiBkZXNhaW4gbGFtYSAgDQotICoqVmVyc2kgQioqOiBkZXNhaW4gYmFydSAgDQoNClJpbmdrYXNhbiBkYXRhIGhhc2lsIGVrc3BlcmltZW46DQoNCnwgVmVyc2kgfCBVa3VyYW4gU2FtcGVsIChuKSB8IFJhdGEtcmF0YSAobWVhbikgfCBTdGFuZGFyIERldmlhc2kgfA0KfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18DQp8IEEgfCAyNSB8IDQuOCB8IDEuMiB8DQp8IEIgfCAyNSB8IDUuNCB8IDEuNCB8DQoNClR1anVhbiBhbmFsaXNpcyBhZGFsYWggbWVuZW50dWthbiBhcGFrYWggdGVyZGFwYXQgKipwZXJiZWRhYW4gcmF0YS1yYXRhIGR1cmFzaSBzZXNpIHBlbmdndW5hKiogeWFuZyBzaWduaWZpa2FuIHNlY2FyYSBzdGF0aXN0aWsgYW50YXJhIGtlZHVhIHZlcnNpIGxhbmRpbmcgcGFnZS4NCg0KLS0tDQoNCiMjIDLvuI/ig6MgRm9ybXVsYXNpIEhpcG90ZXNpcyAoVWppIER1YSBTaXNpKQ0KDQpLYXJlbmEgdHVqdWFuIGFuYWxpc2lzIGFkYWxhaCBtZW5ndWppIGFwYWthaCAqKmR1YSByYXRhLXJhdGEgcG9wdWxhc2kgYmVyYmVkYSoqLCBtYWthIGRpZ3VuYWthbiAqKnVqaSBkdWEgc2lzaSAodHdvLXRhaWxlZCB0ZXN0KSoqLg0KDQpcWw0KSF8wIDogXG11X0EgPSBcbXVfQg0KXF0NCg0KXFsNCkhfMSA6IFxtdV9BIFxuZXEgXG11X0INClxdDQoNCi0tLQ0KDQojIyAz77iP4oOjIFBlbWlsaWhhbiBVamkgU3RhdGlzdGlrDQoNClVqaSBzdGF0aXN0aWsgeWFuZyBkaWd1bmFrYW4gYWRhbGFoICoqVHdvLVNhbXBsZSB0LVRlc3QgKFdlbGNo4oCZcyB0LVRlc3QpKiouDQoNCioqQWxhc2FuIHBlbWlsaWhhbiB1amk6KioNCg0KMS4gRGF0YSBiZXJhc2FsIGRhcmkgKipkdWEga2Vsb21wb2sgaW5kZXBlbmRlbioqDQoyLiBWYXJpYWJlbCB5YW5nIGRpYW5hbGlzaXMgYmVyc2thbGEgbnVtZXJpayAoZHVyYXNpIHNlc2kpDQozLiBTdGFuZGFyIGRldmlhc2kgcG9wdWxhc2kgKip0aWRhayBkaWtldGFodWkqKg0KNC4gVGlkYWsgYWRhIGFzdW1zaSBiYWh3YSB2YXJpYW5zIGtlZHVhIGtlbG9tcG9rIHNhbWENCjUuIFdlbGNo4oCZcyB0LVRlc3QgYmVyc2lmYXQgKipsZWJpaCByb2J1c3QqKiBkYW4gZGlyZWtvbWVuZGFzaWthbiBkYWxhbSBwcmFrdGlrIEEvQiB0ZXN0aW5nIG1vZGVybg0KDQpEZW5nYW4gcGVydGltYmFuZ2FuIHRlcnNlYnV0LCAqKldlbGNo4oCZcyBUd28tU2FtcGxlIHQtVGVzdCoqIG1lcnVwYWthbiB1amkgeWFuZyBwYWxpbmcgc2VzdWFpLg0KDQotLS0NCg0KIyMgNO+4j+KDoyBQZXJoaXR1bmdhbiBNYW51YWwgKFBlbmRla2F0YW4gS29uc2VwdHVhbCkNCg0KIyMjIOKcj++4jyBTdGVwIDEg4oCTIFBhcmFtZXRlciBEYXNhcg0KDQpEaWtldGFodWk6DQoNClxbDQpcYmFye3h9X0EgPSA0LjgsIFxxdWFkIFxiYXJ7eH1fQiA9IDUuNA0KXF0NCg0KXFsNCnNfQSA9IDEuMiwgXHF1YWQgc19CID0gMS40DQpcXQ0KDQpcWw0Kbl9BID0gbl9CID0gMjUNClxdDQoNCi0tLQ0KDQojIyMg4pyP77iPIFN0ZXAgMiDigJMgTWVuZ2hpdHVuZyBTdGFuZGFyZCBFcnJvciAoV2VsY2gpDQoNClJ1bXVzIFN0YW5kYXJkIEVycm9yIHVudHVrIFdlbGNo4oCZcyB0LVRlc3Q6DQoNClxbDQpTRSA9IFxzcXJ0e1xmcmFje3NfQV4yfXtuX0F9ICsgXGZyYWN7c19CXjJ9e25fQn19DQpcXQ0KDQpTdWJzdGl0dXNpIG5pbGFpOg0KDQpcWw0KU0UgPSBcc3FydHtcZnJhY3sxLjJeMn17MjV9ICsgXGZyYWN7MS40XjJ9ezI1fX0NClxdDQoNClxbDQpTRSA9IFxzcXJ0e1xmcmFjezEuNDR9ezI1fSArIFxmcmFjezEuOTZ9ezI1fX0NClxdDQoNClxbDQpTRSA9IFxzcXJ0ezAuMDU3NiArIDAuMDc4NH0NClxdDQoNClxbDQpTRSA9IFxzcXJ0ezAuMTM2fSA9IDAuMzY5DQpcXQ0KDQotLS0NCg0KIyMjIOKcj++4jyBTdGVwIDMg4oCTIE1lbmdoaXR1bmcgU3RhdGlzdGlrIFVqaSB0DQoNClJ1bXVzIHN0YXRpc3RpayB1amk6DQoNClxbDQp0ID0gXGZyYWN7XGJhcnt4fV9BIC0gXGJhcnt4fV9CfXtTRX0NClxdDQoNClxbDQp0ID0gXGZyYWN7NC44IC0gNS40fXswLjM2OX0NClxdDQoNClxbDQp0ID0gXGZyYWN7LTAuNn17MC4zNjl9IFxhcHByb3ggLTEuNjMNClxdDQoNCi0tLQ0KDQojIyMg4pyP77iPIFN0ZXAgNCDigJMgRGVyYWphdCBLZWJlYmFzYW4gKFdlbGNoIEFwcHJveGltYXRpb24pDQoNCkRlcmFqYXQga2ViZWJhc2FuIHBhZGEgV2VsY2jigJlzIHQtVGVzdCBkaWhpdHVuZyBtZW5nZ3VuYWthbiBwZW5kZWthdGFuIFNhdHRlcnRod2FpdGUgZGFuIG1lbmdoYXNpbGthbiBuaWxhaSBzZWtpdGFyOg0KDQpcWw0KZGYgXGFwcHJveCA0Ng0KXF0NCg0KLS0tDQoNCiMjIyDinI/vuI8gU3RlcCA1IOKAkyBNZW5lbnR1a2FuIHAtdmFsdWUNCg0KRGVuZ2FuOg0KDQotIFN0YXRpc3RpayB1amk6IFwoIHQgPSAtMS42MyBcKQ0KLSBEZXJhamF0IGtlYmViYXNhbjogXCggZGYgXGFwcHJveCA0NiBcKQ0KLSBKZW5pcyB1amk6ICoqZHVhIHNpc2kqKg0KDQpCZXJkYXNhcmthbiBkaXN0cmlidXNpIHQ6DQoNClxbDQpwXHRleHR7LXZhbHVlfSBcYXBwcm94IDAuMTENClxdDQoNCi0tLQ0KDQojIyA177iP4oOjIEtlcHV0dXNhbiBTdGF0aXN0aWsgKM6xID0gMC4wNSkNCg0KS3JpdGVyaWEga2VwdXR1c2FuOg0KDQotIEppa2EgXCggcFx0ZXh0ey12YWx1ZX0gXGxlIDAuMDUgXCkg4oaSIFRvbGFrIFwoSF8wXCkNCi0gSmlrYSBcKCBwXHRleHR7LXZhbHVlfSA+IDAuMDUgXCkg4oaSIEdhZ2FsIG1lbm9sYWsgXChIXzBcKQ0KDQpLYXJlbmE6DQoNClxbDQowLjExID4gMC4wNQ0KXF0NCg0KIyMjICoqS2VwdXR1c2FuOiBHYWdhbCBtZW5vbGFrIFwoSF8wXCkqKg0KDQotLS0NCg0KIyMgNu+4j+KDoyBUYWJlbCBSaW5na2FzYW4gSGFzaWwgVWppDQoNCnwgS29tcG9uZW4gfCBOaWxhaSB8DQp8LS0tLS0tLS18LS0tLS0tfA0KfCBNZWFuIFZlcnNpIEEgfCA0LjggfA0KfCBNZWFuIFZlcnNpIEIgfCA1LjQgfA0KfCBTZWxpc2loIE1lYW4gKEEg4oiSIEIpIHwgLTAuNiB8DQp8IFN0YW5kYXJkIEVycm9yIHwgMC4zNjkgfA0KfCB0LXN0YXRpc3RpYyB8IC0xLjYzIHwNCnwgRGVyYWphdCBLZWJlYmFzYW4gfCDiiYggNDYgfA0KfCBwLXZhbHVlIHwgMC4xMSB8DQp8IEtlcHV0dXNhbiB8IEdhZ2FsIG1lbm9sYWsgXChIXzBcKSB8DQoNCi0tLQ0KDQojIyA377iP4oOjIEludGVycHJldGFzaSBIYXNpbA0KDQojIyMg8J+TjCBJbnRlcnByZXRhc2kgU3RhdGlzdGlrDQoNClBhZGEgdGluZ2thdCBzaWduaWZpa2Fuc2kgNSUsICoqdGlkYWsgdGVyZGFwYXQgYnVrdGkgc3RhdGlzdGlrIHlhbmcgY3VrdXAqKiB1bnR1ayBtZW55YXRha2FuIGJhaHdhICoqcmF0YS1yYXRhIGR1cmFzaSBzZXNpIHBlbmdndW5hIGJlcmJlZGEgc2VjYXJhIHNpZ25pZmlrYW4qKiBhbnRhcmEgdmVyc2kgQSBkYW4gdmVyc2kgQi4NCg0KLS0tDQoNCiMjIyDwn5OMIEludGVycHJldGFzaSBCaXNuaXMgLyBQcm9kdWsNCg0KTWVza2lwdW4gdmVyc2kgQiBtZW51bmp1a2thbiAqKnJhdGEtcmF0YSBkdXJhc2kgc2VzaSB5YW5nIGxlYmloIHRpbmdnaSoqLCBwZXJiZWRhYW4gdGVyc2VidXQgKipiZWx1bSBjdWt1cCBrdWF0IHNlY2FyYSBzdGF0aXN0aWsqKiB1bnR1ayBkaWphZGlrYW4gZGFzYXIgcGVuZ2FtYmlsYW4ga2VwdXR1c2FuIHByb2R1ayBzZWNhcmEgcGVudWguDQoNCvCfk4wgKipJbXBsaWthc2kgUHJvZHVrOioqDQoNCi0gVmVyc2kgQiAqKmJlbHVtIHRlcmJ1a3RpIHVuZ2d1bCBzZWNhcmEgc2lnbmlmaWthbioqDQotIERpc2FyYW5rYW4gdW50dWs6DQogIC0gbWVuYW1iYWggdWt1cmFuIHNhbXBlbA0KICAtIG1lbmphbGFua2FuIGVrc3BlcmltZW4gbGViaWggbGFtYQ0KICAtIG1lbmdldmFsdWFzaSBtZXRyaWsgdGFtYmFoYW4gKENUUiwgY29udmVyc2lvbiByYXRlLCBib3VuY2UgcmF0ZSkNCg0KLS0tDQoNCiMjIDjvuI/ig6MgVmVyaWZpa2FzaSBNZW5nZ3VuYWthbiBSDQoNCmBgYHtyfQ0KIyBSaW5na2FzYW4gZGF0YQ0KbWVhbl9BIDwtIDQuOA0Kc2RfQSAgIDwtIDEuMg0Kbl9BICAgIDwtIDI1DQoNCm1lYW5fQiA8LSA1LjQNCnNkX0IgICA8LSAxLjQNCm5fQiAgICA8LSAyNQ0KDQojIENvbnRvaCBzaW11bGFzaSBkYXRhICh1bnR1ayBpbHVzdHJhc2kpDQpzZXQuc2VlZCgxMjMpDQpBIDwtIHJub3JtKG5fQSwgbWVhbl9BLCBzZF9BKQ0KQiA8LSBybm9ybShuX0IsIG1lYW5fQiwgc2RfQikNCg0KIyBXZWxjaCBUd28tU2FtcGxlIHQtVGVzdA0KdC50ZXN0KEEsIEIpDQpgYGANCg0KDQotLS0NCg0KIyDwn5OYIENhc2UgU3R1ZHkgNCAgDQojIyBDaGktU3F1YXJlIFRlc3Qgb2YgSW5kZXBlbmRlbmNlDQoNCi0tLQ0KDQojIyA077iP4oOjIFNvYWwNCg0KU2VidWFoIHBlcnVzYWhhYW4gKiplLWNvbW1lcmNlKiogaW5naW4gbWVuZ2V0YWh1aSBhcGFrYWggKipqZW5pcyBwZXJhbmdrYXQgKGRldmljZSB0eXBlKSoqIGJlcmh1YnVuZ2FuIGRlbmdhbiAqKnByZWZlcmVuc2kgbWV0b2RlIHBlbWJheWFyYW4qKiBwZW5nZ3VuYS4NCg0KRGF0YSBoYXNpbCBvYnNlcnZhc2k6DQoNCnwgRGV2aWNlIC8gUGF5bWVudCB8IEUtV2FsbGV0IHwgQ3JlZGl0IENhcmQgfCBDYXNoIG9uIERlbGl2ZXJ5IHwNCnwtLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgTW9iaWxlICAgICAgICAgICB8IDEyMCAgICAgIHwgODAgICAgICAgICAgfCA1MCAgICAgICAgICAgICAgIHwNCnwgRGVza3RvcCAgICAgICAgICB8IDYwICAgICAgIHwgOTAgICAgICAgICAgfCA0MCAgICAgICAgICAgICAgIHwNCg0KLS0tDQoNCiMjIDQuMiBUYXNrcyAmIFBlbnllbGVzYWlhbg0KDQotLS0NCg0KIyMgMe+4j+KDoyBQZXJ1bXVzYW4gSGlwb3Rlc2lzDQoNCiMjIyBIaXBvdGVzaXMgTm9sIChI4oKAKQ0KVGlkYWsgdGVyZGFwYXQgaHVidW5nYW4gYW50YXJhICoqamVuaXMgcGVyYW5na2F0KiogZGFuICoqcHJlZmVyZW5zaSBtZXRvZGUgcGVtYmF5YXJhbioqLiAgDQooRGV2aWNlIHR5cGUgZGFuIHBheW1lbnQgbWV0aG9kICoqaW5kZXBlbmRlbioqKQ0KDQpcWw0KSF8wIDogXHRleHR7RGV2aWNlIHR5cGUg4p+CIFBheW1lbnQgbWV0aG9kfQ0KXF0NCg0KIyMjIEhpcG90ZXNpcyBBbHRlcm5hdGlmIChI4oKBKQ0KVGVyZGFwYXQgaHVidW5nYW4gYW50YXJhICoqamVuaXMgcGVyYW5na2F0KiogZGFuICoqcHJlZmVyZW5zaSBtZXRvZGUgcGVtYmF5YXJhbioqLg0KDQpcWw0KSF8xIDogXHRleHR7RGV2aWNlIHR5cGUgdGlkYWsgaW5kZXBlbmRlbiB0ZXJoYWRhcCBQYXltZW50IG1ldGhvZH0NClxdDQoNCi0tLQ0KDQojIyAy77iP4oOjIFVqaSBTdGF0aXN0aWsgeWFuZyBEaWd1bmFrYW4NCg0KVWppIHlhbmcgdGVwYXQgYWRhbGFoOg0KDQojIyMg4pyFICoqQ2hpLVNxdWFyZSBUZXN0IG9mIEluZGVwZW5kZW5jZSoqDQoNCioqQWxhc2FuIHBlbWlsaWhhbiB1amkgKHNlc3VhaSBrb25kaXNpIHNvYWwpOioqDQoNCi0gRGF0YSBiZXJiZW50dWsgKipmcmVrdWVuc2kgKGNvdW50KSoqDQotIFZhcmlhYmVsIGJlcnNpZmF0ICoqa2F0ZWdvcmlrKioNCi0gVHVqdWFuIGFuYWxpc2lzOiBtZW5ndWppICoqaHVidW5nYW4gYW50YXIgZHVhIHZhcmlhYmVsIGthdGVnb3JpayoqDQoNCi0tLQ0KDQojIyAz77iP4oOjIFBlcmhpdHVuZ2FuIE1hbnVhbCBDaGktU3F1YXJlIChTdGVwLWJ5LVN0ZXApDQoNCiMjIyDinI/vuI8gU3RlcCAxIOKAkyBIaXR1bmcgVG90YWwgQmFyaXMsIEtvbG9tLCBkYW4gVG90YWwgS2VzZWx1cnVoYW4NCg0KKipUb3RhbCBwZXIgYmFyaXM6KioNCg0KLSBNb2JpbGUgPSAxMjAgKyA4MCArIDUwID0gKioyNTAqKg0KLSBEZXNrdG9wID0gNjAgKyA5MCArIDQwID0gKioxOTAqKg0KDQoqKlRvdGFsIHBlciBrb2xvbToqKg0KDQotIEUtV2FsbGV0ID0gMTIwICsgNjAgPSAqKjE4MCoqDQotIENyZWRpdCBDYXJkID0gODAgKyA5MCA9ICoqMTcwKioNCi0gQ2FzaCBvbiBEZWxpdmVyeSA9IDUwICsgNDAgPSAqKjkwKioNCg0KKipUb3RhbCBrZXNlbHVydWhhbjoqKg0KXFsNCk4gPSAyNTAgKyAxOTAgPSA0NDANClxdDQoNCi0tLQ0KDQojIyMg4pyP77iPIFN0ZXAgMiDigJMgSGl0dW5nIEZyZWt1ZW5zaSBIYXJhcGFuIChFeHBlY3RlZCBGcmVxdWVuY3kpDQoNClJ1bXVzIGZyZWt1ZW5zaSBoYXJhcGFuOg0KDQpcWw0KRV97aWp9ID0gXGZyYWN7KFx0ZXh0e1RvdGFsIEJhcmlzfSkgXHRpbWVzIChcdGV4dHtUb3RhbCBLb2xvbX0pfXtOfQ0KXF0NCg0KIyMjIyBCYXJpczogTW9iaWxlDQotIE1vYmlsZeKAk0UtV2FsbGV0Og0KXFsNCkUgPSBcZnJhY3syNTAgXHRpbWVzIDE4MH17NDQwfSA9IDEwMi4yNw0KXF0NCi0gTW9iaWxl4oCTQ3JlZGl0IENhcmQ6DQpcWw0KRSA9IFxmcmFjezI1MCBcdGltZXMgMTcwfXs0NDB9ID0gOTYuNTkNClxdDQotIE1vYmlsZeKAk0NPRDoNClxbDQpFID0gXGZyYWN7MjUwIFx0aW1lcyA5MH17NDQwfSA9IDUxLjE0DQpcXQ0KDQojIyMjIEJhcmlzOiBEZXNrdG9wDQotIERlc2t0b3DigJNFLVdhbGxldDoNClxbDQpFID0gXGZyYWN7MTkwIFx0aW1lcyAxODB9ezQ0MH0gPSA3Ny43Mw0KXF0NCi0gRGVza3RvcOKAk0NyZWRpdCBDYXJkOg0KXFsNCkUgPSBcZnJhY3sxOTAgXHRpbWVzIDE3MH17NDQwfSA9IDczLjQxDQpcXQ0KLSBEZXNrdG9w4oCTQ09EOg0KXFsNCkUgPSBcZnJhY3sxOTAgXHRpbWVzIDkwfXs0NDB9ID0gMzguODYNClxdDQoNCi0tLQ0KDQojIyMg4pyP77iPIFN0ZXAgMyDigJMgSGl0dW5nIE5pbGFpIENoaS1TcXVhcmUgKM+HwrIpDQoNClJ1bXVzIHN0YXRpc3RpayBDaGktU3F1YXJlOg0KDQpcWw0KXGNoaV4yID0gXHN1bSBcZnJhY3soTyAtIEUpXjJ9e0V9DQpcXQ0KDQp8IFNlbCB8IE8gfCBFIHwgKE/iiJJFKcKyIC8gRSB8DQp8LS0tLXwtLS0tfC0tLS18LS0tLS0tLS0tLS18DQp8IE1vYmlsZeKAk0UtV2FsbGV0IHwgMTIwIHwgMTAyLjI3IHwgMy4wNyB8DQp8IE1vYmlsZeKAk0NyZWRpdCBDYXJkIHwgODAgfCA5Ni41OSB8IDIuODUgfA0KfCBNb2JpbGXigJNDT0QgfCA1MCB8IDUxLjE0IHwgMC4wMyB8DQp8IERlc2t0b3DigJNFLVdhbGxldCB8IDYwIHwgNzcuNzMgfCA0LjA1IHwNCnwgRGVza3RvcOKAk0NyZWRpdCBDYXJkIHwgOTAgfCA3My40MSB8IDMuNzUgfA0KfCBEZXNrdG9w4oCTQ09EIHwgNDAgfCAzOC44NiB8IDAuMDMgfA0KDQpcWw0KXGNoaV4yID0gMy4wNyArIDIuODUgKyAwLjAzICsgNC4wNSArIDMuNzUgKyAwLjAzID0gMTMuNzgNClxdDQoNCi0tLQ0KDQojIyMg4pyP77iPIFN0ZXAgNCDigJMgRGVyYWphdCBLZWJlYmFzYW4gKGRmKQ0KDQpSdW11czoNCg0KXFsNCmRmID0gKHIgLSAxKShjIC0gMSkNClxdDQoNClxbDQpkZiA9ICgyIC0gMSkoMyAtIDEpID0gMg0KXF0NCg0KLS0tDQoNCiMjIyDinI/vuI8gU3RlcCA1IOKAkyBNZW5lbnR1a2FuIHAtdmFsdWUgZGFuIEtlcHV0dXNhbg0KDQpQYWRhOg0KLSBcKFxhbHBoYSA9IDAuMDVcKQ0KLSBcKGRmID0gMlwpDQoNCk5pbGFpIGtyaXRpcyBDaGktU3F1YXJlIHRhYmVsOg0KXFsNClxjaGleMl97MC4wNSwyfSA9IDUuOTkxDQpcXQ0KDQpLYXJlbmE6DQpcWw0KMTMuNzggPiA1Ljk5MQ0KXF0NCg0KIyMjIEtlcHV0dXNhbiBTdGF0aXN0aWs6DQoqKlRvbGFrIEjigoAqKg0KDQoocC12YWx1ZSA8IDAuMDUpDQoNCi0tLQ0KDQojIyA077iP4oOjIEtlc2ltcHVsYW4gU3RhdGlzdGlrDQoNClRlcmRhcGF0ICoqaHVidW5nYW4geWFuZyBzaWduaWZpa2FuIHNlY2FyYSBzdGF0aXN0aWsqKiBhbnRhcmE6DQotICoqSmVuaXMgcGVyYW5na2F0IChNb2JpbGUgdnMgRGVza3RvcCkqKg0KLSAqKlByZWZlcmVuc2kgbWV0b2RlIHBlbWJheWFyYW4qKg0KDQotLS0NCg0KIyMgNe+4j+KDoyBJbnRlcnByZXRhc2kgZGFsYW0gS29udGVrcyBTdHJhdGVnaSBQZW1iYXlhcmFuIERpZ2l0YWwNCg0KIyMjIPCfk4ogSW50ZXJwcmV0YXNpIEJpc25pcw0KDQotIFBlbmdndW5hICoqTW9iaWxlKiogY2VuZGVydW5nIGxlYmloIG1lbWlsaWggKipFLVdhbGxldCoqDQotIFBlbmdndW5hICoqRGVza3RvcCoqIHJlbGF0aWYgbGViaWggYmFueWFrIG1lbmdndW5ha2FuICoqQ3JlZGl0IENhcmQqKg0KLSBQcmVmZXJlbnNpIHBlbWJheWFyYW4gKip0aWRhayBhY2FrKiosIHRldGFwaSBkaXBlbmdhcnVoaSBvbGVoIHBlcmFuZ2thdA0KDQojIyMg8J+SoSBJbXBsaWthc2kgU3RyYXRlZ2k6DQoNCi0gT3B0aW1hbGthbiAqKkUtV2FsbGV0IFVYKiogZGkgbW9iaWxlDQotIFRvbmpvbGthbiAqKkNyZWRpdCBDYXJkIGNoZWNrb3V0KiogZGkgZGVza3RvcA0KLSBQZXJzb25hbGlzYXNpIG1ldG9kZSBwZW1iYXlhcmFuIGJlcmRhc2Fya2FuIGRldmljZSBwZW5nZ3VuYQ0KDQotLS0NCg0KIyMg8J+TjCBUYWJlbCBSaW5na2FzYW4gQWtoaXINCg0KfCBLb21wb25lbiB8IEhhc2lsIHwNCnwtLS0tLS0tLXwtLS0tLS18DQp8IEplbmlzIFVqaSB8IENoaS1TcXVhcmUgVGVzdCBvZiBJbmRlcGVuZGVuY2UgfA0KfCDPh8KyIGhpdHVuZyB8IDEzLjc4IHwNCnwgZGYgfCAyIHwNCnwgzrEgfCAwLjA1IHwNCnwgS2VwdXR1c2FuIHwgVG9sYWsgSOKCgCB8DQp8IEtlc2ltcHVsYW4gfCBEZXZpY2UgJiBQYXltZW50IE1ldGhvZCBiZXJodWJ1bmdhbiB8DQoNCi0tLQ0KDQojIPCfk5ggQ2FzZSBTdHVkeSA1ICANCiMjIFR5cGUgSSBhbmQgVHlwZSBJSSBFcnJvcnMgKENvbmNlcHR1YWwpDQoNCi0tLQ0KDQojIyA1LjEgS29udGVrcyBNYXNhbGFoDQoNClNlYnVhaCAqKmZpbnRlY2ggc3RhcnR1cCoqIG1lbmd1amkgYXBha2FoICoqYWxnb3JpdG1hIGRldGVrc2kgZnJhdWQgYmFydSoqIG1hbXB1IG1lbmd1cmFuZ2kganVtbGFoIHRyYW5zYWtzaSBmcmF1ZCBkaWJhbmRpbmdrYW4gc2lzdGVtIGxhbWEuDQoNCkhpcG90ZXNpcyB5YW5nIGRpZ3VuYWthbjoNCg0KLSAqKkjigoAgKE51bGwgSHlwb3RoZXNpcyk6KiogQWxnb3JpdG1hIGJhcnUgKip0aWRhayBtZW5ndXJhbmdpKiogZnJhdWQgIA0KLSAqKkjigoEgKEFsdGVybmF0aXZlIEh5cG90aGVzaXMpOioqIEFsZ29yaXRtYSBiYXJ1ICoqbWVuZ3VyYW5naSoqIGZyYXVkICANCg0KU3R1ZGkgaW5pIGJlcnNpZmF0ICoqa29uc2VwdHVhbCoqLCBzZWhpbmdnYSBmb2t1cyBwYWRhIHBlbWFoYW1hbiBrZXNhbGFoYW4gcGVuZ2FtYmlsYW4ga2VwdXR1c2FuIHN0YXRpc3Rpay4NCg0KLS0tDQoNCiMjIDUuMiBQZW5qZWxhc2FuIFR5cGUgSSBFcnJvciAozrEpDQoNCiMjIyBEZWZpbmlzaSAgDQoqKlR5cGUgSSBFcnJvciAozrEpKiogdGVyamFkaSBrZXRpa2EgKipI4oKAIGRpdG9sYWsgcGFkYWhhbCBI4oKAIGJlbmFyKiouDQoNCiMjIyBEYWxhbSBrb250ZWtzIHN0dWRpIGluaSAgDQpQZXJ1c2FoYWFuIG1lbnlpbXB1bGthbiBiYWh3YSAqKmFsZ29yaXRtYSBiYXJ1IGJlcmhhc2lsIG1lbmd1cmFuZ2kgZnJhdWQqKiwgIA0KcGFkYWhhbCBwYWRhIGtlbnlhdGFhbm55YSAqKmFsZ29yaXRtYSB0ZXJzZWJ1dCB0aWRhayBsZWJpaCBlZmVrdGlmKiogZGFyaSBzaXN0ZW0gbGFtYS4NCg0KIyMjIERhbXBhayBiaXNuaXMgDQoNCi0gUGVydXNhaGFhbiBtZXJhc2EgYW1hbiBzZWNhcmEga2VsaXJ1ICANCi0gQWxnb3JpdG1hIHlhbmcgdGlkYWsgZWZla3RpZiB0ZXRhcCBkaWd1bmFrYW4gIA0KLSBSaXNpa28ga2VydWdpYW4gZmluYW5zaWFsIGFraWJhdCBmcmF1ZCB0ZXRhcCB0aW5nZ2kgIA0KLSBQb3RlbnNpIHBlbnVydW5hbiBrZXBlcmNheWFhbiBwZW5nZ3VuYQ0KDQotLS0NCg0KIyMgNS4zIFBlbmplbGFzYW4gVHlwZSBJSSBFcnJvciAozrIpDQoNCiMjIyBEZWZpbmlzaSAgDQoqKlR5cGUgSUkgRXJyb3IgKM6yKSoqIHRlcmphZGkga2V0aWthICoqSOKCgCB0aWRhayBkaXRvbGFrIHBhZGFoYWwgSOKCgSBiZW5hcioqLg0KDQojIyMgRGFsYW0ga29udGVrcyBzdHVkaSBpbmkgIA0KUGVydXNhaGFhbiBtZW55aW1wdWxrYW4gYmFod2EgKiphbGdvcml0bWEgYmFydSB0aWRhayBlZmVrdGlmKiosICANCnBhZGFoYWwgc2ViZW5hcm55YSAqKmFsZ29yaXRtYSB0ZXJzZWJ1dCBtYW1wdSBtZW51cnVua2FuIGZyYXVkKiouDQoNCiMjIyBEYW1wYWsgYmlzbmlzICANCi0gSW5vdmFzaSB5YW5nIGVmZWt0aWYgZGloZW50aWthbiAgDQotIEtlc2VtcGF0YW4gbWVuZWthbiBrZXJ1Z2lhbiBmcmF1ZCB0ZXJsZXdhdCAgDQotIEtldW5nZ3VsYW4ga29tcGV0aXRpZiB0aWRhayBkaW1hbmZhYXRrYW4NCg0KLS0tDQoNCiMjIDUuNCBFcnJvciBNYW5hIHlhbmcgTGViaWggTWFoYWwgZGFyaSBQZXJzcGVrdGlmIEJpc25pcz8NCg0KRGFyaSBzdWR1dCBwYW5kYW5nIGJpc25pcywgKipUeXBlIEkgRXJyb3IgbGViaWggbWFoYWwgZGFuIGJlcmlzaWtvKiosIGthcmVuYToNCg0KLSBNZW1iZXJpa2FuICoqcmFzYSBhbWFuIHBhbHN1KioNCi0gU2lzdGVtIGtlYW1hbmFuIHRldGFwIGxlbWFoDQotIEZyYXVkIHRldGFwIHRlcmphZGkgZGFsYW0gc2thbGEgYmVzYXINCi0gQmVycG90ZW5zaSBtZW5pbWJ1bGthbiBtYXNhbGFoIHJlZ3VsYXNpIGRhbiByZXB1dGFzaQ0KDQpEYWxhbSBrb250ZWtzIGtlYW1hbmFuIGZpbmFuc2lhbCwgKipsZWJpaCBiYWlrIGJlcmhhdGktaGF0aSBkYXJpcGFkYSB0ZXJsYWx1IHBlcmNheWEgZGlyaSoqLg0KDQotLS0NCg0KIyMgNS41IFBlbmdhcnVoIFVrdXJhbiBTYW1wZWwgdGVyaGFkYXAgVHlwZSBJSSBFcnJvcg0KDQpVa3VyYW4gc2FtcGVsIG1lbWlsaWtpIHBlbmdhcnVoIGxhbmdzdW5nIHRlcmhhZGFwICoqVHlwZSBJSSBFcnJvciAozrIpKio6DQoNCi0gU2FtcGVsIGtlY2lsIOKGkiDOsiBiZXNhciDihpIgc3VsaXQgbWVuZGV0ZWtzaSBlZmVrIG55YXRhICANCi0gU2FtcGVsIGJlc2FyIOKGkiDOsiBrZWNpbCDihpIgbGViaWggbXVkYWggbWVuZGV0ZWtzaSBwZW51cnVuYW4gZnJhdWQgIA0KDQpEZW5nYW4gbWVtcGVyYmVzYXIgdWt1cmFuIHNhbXBlbCwgcGVydXNhaGFhbiBkYXBhdDoNCg0KLSBNZW5ndXJhbmdpIHJpc2lrbyBnYWdhbCBtZW5kZXRla3NpIGFsZ29yaXRtYSB5YW5nIGVmZWt0aWYNCi0gTWVuaW5na2F0a2FuIGtlYW5kYWxhbiBrZXNpbXB1bGFuIHN0YXRpc3Rpaw0KDQotLS0NCg0KIyMgNS42IEh1YnVuZ2FuIGFudGFyYSDOsSwgzrIsIGRhbiBTdGF0aXN0aWNhbCBQb3dlcg0KDQojIyMgS29uc2VwIHV0YW1hDQotICoqU3RhdGlzdGljYWwgUG93ZXIgPSAxIOKIkiDOsioqDQoNCkFydGlueWEsIHBvd2VyIG1lbnVuanVra2FuICoqa2VtYW1wdWFuIHVqaSBzdGF0aXN0aWsgdW50dWsgbWVuZGV0ZWtzaSBlZmVrIHlhbmcgYmVuYXItYmVuYXIgYWRhKiouDQoNCiMjIyBIdWJ1bmdhbiBhbnRhciBrb21wb25lbg0KLSBNZW51cnVua2FuIM6xIOKGkiBtZW5ndXJhbmdpIFR5cGUgSSBFcnJvciAgDQotIE5hbXVuLCBqaWthIHVrdXJhbiBzYW1wZWwgdGV0YXAsIM6yIGJpc2EgbWVuaW5na2F0ICANCi0gQ2FyYSBwYWxpbmcgZWZla3RpZiBtZW5pbmdrYXRrYW4gcG93ZXIgYWRhbGFoICoqbWVuYW1iYWggdWt1cmFuIHNhbXBlbCoqDQoNCiMjIyBSaW5na2FzYW4gaHVidW5nYW4NCi0gzrE6IFJpc2lrbyBzYWxhaCBtZW55YXRha2FuIGFsZ29yaXRtYSBlZmVrdGlmICANCi0gzrI6IFJpc2lrbyBnYWdhbCBtZW5kZXRla3NpIGFsZ29yaXRtYSBlZmVrdGlmICANCi0gUG93ZXI6IEtlbWFtcHVhbiBtZW5kZXRla3NpIGVmZWsgbnlhdGENCg0KLS0tDQoNCiMjIDUuNyBUYWJlbCBLZXNpbXB1bGFuIENhc2UgU3R1ZHkgNQ0KDQp8IEtvbXBvbmVuIHwgUGVuamVsYXNhbiB8DQp8LS0tLS0tLS18LS0tLS0tLS0tLS18DQp8IFR5cGUgSSBFcnJvciAozrEpIHwgTWVuZ2FuZ2dhcCBhbGdvcml0bWEgZWZla3RpZiBwYWRhaGFsIHRpZGFrIHwNCnwgVHlwZSBJSSBFcnJvciAozrIpIHwgR2FnYWwgbWVuZGV0ZWtzaSBhbGdvcml0bWEgeWFuZyBzZWJlbmFybnlhIGVmZWt0aWYgfA0KfCBFcnJvciBwYWxpbmcgbWFoYWwgfCBUeXBlIEkgRXJyb3IgfA0KfCBQZW5nYXJ1aCBzYW1wbGUgc2l6ZSB8IFNhbXBsZSBiZXNhciBtZW51cnVua2FuIM6yIHwNCnwgU3RhdGlzdGljYWwgUG93ZXIgfCBLZW1hbXB1YW4gbWVuZGV0ZWtzaSBlZmVrIG55YXRhICgxIOKIkiDOsikgfA0KDQotLS0NCg0KIyMgNS44IEtlc2ltcHVsYW4gQWtoaXINCg0KRGFsYW0gcGVuZ3VqaWFuIGFsZ29yaXRtYSBkZXRla3NpIGZyYXVkLCBwZW1haGFtYW4gdGVyaGFkYXAgKipUeXBlIEkgRXJyb3IsIFR5cGUgSUkgRXJyb3IsIGRhbiBzdGF0aXN0aWNhbCBwb3dlcioqIHNhbmdhdCBwZW50aW5nIHVudHVrIHBlbmdhbWJpbGFuIGtlcHV0dXNhbiBiaXNuaXMgeWFuZyB0ZXBhdC4gIA0KS2VzYWxhaGFuIHN0YXRpc3RpayBkYXBhdCBiZXJkYW1wYWsgbGFuZ3N1bmcgcGFkYSAqKmtlYW1hbmFuLCBrZXVhbmdhbiwgZGFuIHJlcHV0YXNpIHBlcnVzYWhhYW4qKi4NCg0KLS0tDQoNCiMg8J+TmCBDYXNlIFN0dWR5IDYgIA0KIyMgUC1WYWx1ZSBkYW4gUGVuZ2FtYmlsYW4gS2VwdXR1c2FuIFN0YXRpc3Rpaw0KDQotLS0NCg0KIyMjIPCfk4wgNi4xIERlc2tyaXBzaSBLYXN1cw0KDQpTZWJ1YWggKiptb2RlbCBwcmVkaWtzaSBjaHVybioqIGRpZXZhbHVhc2kgdW50dWsgbWVuZ2V0YWh1aSBhcGFrYWggcGVyZm9ybWFueWEgbWVudW5qdWtrYW4gaGFzaWwgeWFuZyBzaWduaWZpa2FuIHNlY2FyYSBzdGF0aXN0aWsuDQoNCkRpa2V0YWh1aToNCg0KLSBTdGF0aXN0aWsgdWppID0gMi4zMSAgDQotIHAtdmFsdWUgPSAwLjAyMSAgDQotIFRpbmdrYXQgc2lnbmlmaWthbnNpICjOsSkgPSAwLjA1ICANCg0KLS0tDQoNCiMjIyDwn5OMIDYuMiBUYXNrcyBkYW4gUGVtYmFoYXNhbg0KDQotLS0NCg0KIyMjIDHvuI/ig6MgUGVuamVsYXNhbiBNYWtuYSBwLXZhbHVlDQoNCk5pbGFpICoqcC12YWx1ZSA9IDAuMDIxKiogbWVueWF0YWthbiAqKnByb2JhYmlsaXRhcyBtZW1wZXJvbGVoIGhhc2lsIHN0YXRpc3RpayBzZXRpZGFrbnlhIHNlLWVrc3RyZW0gaW5pKiosICoqZGVuZ2FuIGFzdW1zaSBiYWh3YSBoaXBvdGVzaXMgbm9sIChI4oKAKSBhZGFsYWggYmVuYXIqKi4NCg0KRGVuZ2FuIGthdGEgbGFpbjoNCg0KLSBKaWthIG1vZGVsICoqc2ViZW5hcm55YSB0aWRhayBtZW1iZXJpa2FuIHBlcmJlZGFhbiBueWF0YSoqLCBtYWthIGtlbXVuZ2tpbmFuIG1lbXBlcm9sZWggc3RhdGlzdGlrIHVqaSBzZWJlc2FyICoqMi4zMSoqIGF0YXUgbGViaWggZWtzdHJlbSBoYW55YWxhaCAqKjIuMSUqKi4NCi0gS2FyZW5hIG5pbGFpIGluaSBrZWNpbCwgaGFzaWwgeWFuZyBkaXBlcm9sZWggKip0aWRhayBtdW5na2luIHRlcmphZGkgc2VjYXJhIGtlYmV0dWxhbiBzZW1hdGEqKi4NCg0KLS0tDQoNCiMjIyAy77iP4oOjIEtlcHV0dXNhbiBTdGF0aXN0aWsNCg0KQXR1cmFuIGtlcHV0dXNhbjoNCg0KLSBKaWthICoqcC12YWx1ZSDiiaQgzrEqKiwgbWFrYSAqKnRvbGFrIEjigoAqKg0KLSBKaWthICoqcC12YWx1ZSA+IM6xKiosIG1ha2EgKipnYWdhbCBtZW5vbGFrIEjigoAqKg0KDQpLYXJlbmE6DQpcWw0KcFx0ZXh0ey12YWx1ZX0gPSAwLjAyMSA8IFxhbHBoYSA9IDAuMDUNClxdDQoNCioqS2VwdXR1c2FuIHN0YXRpc3RpazoqKiANCg0KKipIaXBvdGVzaXMgbm9sIChI4oKAKSBkaXRvbGFrKioNCg0KLS0tDQoNCiMjIyAz77iP4oOjIEludGVycHJldGFzaSBOb24tVGVrbmlzIHVudHVrIE1hbmFqZW1lbg0KDQpEYWxhbSBiYWhhc2Egbm9uLXRla25pczoNCg0KPiDigJxIYXNpbCBldmFsdWFzaSBtZW51bmp1a2thbiBiYWh3YSBwZXJmb3JtYSBtb2RlbCBjaHVybiAqKmN1a3VwIGt1YXQgZGFuIGJ1a2FuIGtlYmV0dWxhbioqLiAgDQo+IE1vZGVsIGluaSBtZW1iZXJpa2FuIGluZGlrYXNpIHlhbmcgZGFwYXQgZGlwZXJjYXlhIHVudHVrIG1lbWJlZGFrYW4gcGVsYW5nZ2FuIHlhbmcgYmVycG90ZW5zaSBjaHVybi7igJ0NCg0KQXJ0aW55YToNCg0KLSBNb2RlbCAqKmxheWFrIGRpcGVydGltYmFuZ2thbioqIHVudHVrIHBlbmdhbWJpbGFuIGtlcHV0dXNhbiBiaXNuaXMNCi0gQWRhICoqYnVrdGkgc3RhdGlzdGlrKiogYmFod2EgbW9kZWwgYmVrZXJqYSBsZWJpaCBiYWlrIGRhcmkgc2VrYWRhciB0ZWJha2FuIGFjYWsNCg0KLS0tDQoNCiMjIyA077iP4oOjIFJpc2lrbyBKaWthIFNhbXBlbCBUaWRhayBSZXByZXNlbnRhdGlmDQoNCkppa2EgZGF0YSB5YW5nIGRpZ3VuYWthbiAqKnRpZGFrIG1ld2FraWxpIHBvcHVsYXNpIHBlbGFuZ2dhbiBzZWNhcmEga2VzZWx1cnVoYW4qKiwgbWFrYToNCg0KLSBwLXZhbHVlIHlhbmcga2VjaWwgKipiaXNhIG1lbnllc2F0a2FuKioNCi0gTW9kZWwgbXVuZ2tpbjoNCiAgLSBUZXJsYWx1IG9wdGltaXMNCiAgLSBUaWRhayBiZWtlcmphIGJhaWsgZGkga29uZGlzaSBueWF0YQ0KLSBLZXB1dHVzYW4gYmlzbmlzIGJlcmlzaWtvOg0KICAtIFNhbGFoIHN0cmF0ZWdpIHJldGVuc2kNCiAgLSBTYWxhaCBhbG9rYXNpIGJpYXlhIHBlbWFzYXJhbg0KDQrwn5OMICoqS2VzaW1wdWxhbiBwZW50aW5nOioqICANClNpZ25pZmlrYW5zaSBzdGF0aXN0aWsgKip0aWRhayBtZW5qYW1pbiB2YWxpZGl0YXMgYmlzbmlzKiogamlrYSBzYW1wZWwgYmlhcy4NCg0KLS0tDQoNCiMjIyA177iP4oOjIE1lbmdhcGEgcC12YWx1ZSBUaWRhayBNZW5ndWt1ciBCZXNhcm55YSBFZmVrDQoNCnAtdmFsdWUgKipoYW55YSBtZW5ndWt1ciB0aW5na2F0IGtleWFraW5hbiBzdGF0aXN0aWsqKiwgYnVrYW46DQoNCi0gU2ViZXJhcGEgYmVzYXIgZGFtcGFrIG1vZGVsDQotIFNlYmVyYXBhIHNpZ25pZmlrYW4gbWFuZmFhdCBiaXNuaXNueWENCg0KQ29udG9oOg0KDQotIHAtdmFsdWUga2VjaWwgYmlzYSBtdW5jdWwgZGFyaToNCiAgLSBFZmVrIHlhbmcgc2FuZ2F0IGtlY2lsDQogIC0gVWt1cmFuIHNhbXBlbCB5YW5nIGJlc2FyDQoNClVudHVrIG1lbmdldGFodWkgKipiZXNhcm55YSBkYW1wYWsqKiwgZGlwZXJsdWthbjoNCg0KLSBFZmZlY3Qgc2l6ZQ0KLSBQZXJiZWRhYW4gcmF0YS1yYXRhDQotIExpZnQsIEFVQywgYXRhdSBtZXRyaWsgYmlzbmlzIGxhaW5ueWENCg0KLS0tDQoNCiMjIyDwn5OMIEtlc2ltcHVsYW4gQWtoaXINCg0KfCBBc3BlayB8IFBlbmplbGFzYW4gfA0KfC0tLS0tfC0tLS0tLS0tLS0tfA0KfCBwLXZhbHVlIHwgTWVuZ3VrdXIga2VrdWF0YW4gYnVrdGkgdGVyaGFkYXAgSOKCgCB8DQp8IEtlcHV0dXNhbiB8IEjigoAgZGl0b2xhayB8DQp8IE1ha25hIGJpc25pcyB8IE1vZGVsIG1lbnVuanVra2FuIHBlcmZvcm1hIHlhbmcgc2lnbmlmaWthbiB8DQp8IFJpc2lrbyB8IFNhbXBlbCB0aWRhayByZXByZXNlbnRhdGlmIGRhcGF0IG1lbnllc2F0a2FuIHwNCnwgQ2F0YXRhbiBwZW50aW5nIHwgcC12YWx1ZSDiiaAgYmVzYXJueWEgZWZlayB8DQoNCi0tLQ==