Statistical Inferences

Study Cases ~ week 14

Foto Mahasiswa

Adinda Adelia Futri

Institut Teknologi Sains Bandung (ITSB)

Program Studi Data Science


1 📘 Case Study 1

1.1 One-Sample Z-Test (Statistical Hypotheses)


1.2 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.


1.3 2️⃣ Formulasi Hipotesis

Karena klaim perusahaan menyatakan nilai rata-rata tertentu dan analisis ingin mengetahui apakah data berbeda dari nilai tersebut, maka digunakan uji dua sisi.

1.3.1 Hipotesis Statistik

\[ H_0 : \mu = 120 \]

\[ H_1 : \mu \neq 120 \]


1.4 3️⃣ Pemilihan Uji Statistik

Uji statistik yang digunakan adalah One-Sample Z-Test, dengan pertimbangan:

  1. Standar deviasi populasi (\(\sigma\)) diketahui
  2. Ukuran sampel cukup besar (\(n \geq 30\))
  3. Parameter yang diuji adalah rata-rata populasi

Dengan kondisi tersebut, One-Sample Z-Test merupakan uji yang paling tepat sesuai materi Statistical Inference.


1.5 4️⃣ Perhitungan Manual (Step-by-Step)

1.5.1 ✏️ 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.


1.5.2 ✏️ 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 \]


1.6 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 \]


1.7 6️⃣ Keputusan Statistik

Bandingkan p-value dengan tingkat signifikansi:

\[ p\text{-value} = 0.0332 \]

\[ \alpha = 0.05 \]

Karena:

\[ p\text{-value} < \alpha \]

1.7.1 Keputusan: Tolak \(H_0\)


1.8 7️⃣ Interpretasi Hasil

1.8.1 📌 Interpretasi Statistik

Pada tingkat signifikansi 5%, terdapat bukti statistik yang signifikan bahwa rata-rata waktu belajar harian pengguna berbeda dari 120 menit.


1.8.2 📌 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:

  • Klaim performa platform perlu dievaluasi ulang

  • Perusahaan dapat:

    • meningkatkan engagement pengguna
    • mengoptimalkan fitur pembelajaran
    • menyesuaikan strategi produk dan pemasaran

1.9 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
p_value
## [1] 0.03289739

2 📘 Case Study 2

2.1 One-Sample t-Test (σ Tidak Diketahui, Sampel Kecil)


2.2 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.


2.3 2️⃣ Formulasi Hipotesis (Uji Dua Sisi)

Pertanyaan penelitian berbunyi “apakah rata-rata waktu penyelesaian tugas berbeda dari 10 menit”, sehingga digunakan uji dua sisi (two-tailed test).

\[ H_0 : \mu = 10 \]

\[ H_1 : \mu \neq 10 \]


2.4 3️⃣ Pemilihan Uji Statistik

Uji statistik yang digunakan adalah One-Sample t-Test, dengan alasan:

  1. Data berskala numerik (waktu dalam menit)
  2. Parameter yang diuji adalah rata-rata populasi
  3. Standar deviasi populasi tidak diketahui
  4. Ukuran sampel kecil (n = 10)

Kondisi ini sesuai dengan asumsi penggunaan distribusi t pada materi Statistical Inference.


2.5 4️⃣ Perhitungan Manual (Step-by-Step)

2.5.1 ✏️ Step 1 – Ukuran Sampel dan Derajat Kebebasan

Ukuran sampel: \[ n = 10 \]

Derajat kebebasan: \[ df = n - 1 = 9 \]


2.5.2 ✏️ 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.


2.5.3 ✏️ 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.


2.5.4 ✏️ 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 \]


2.5.5 ✏️ 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 \]


2.5.6 ✏️ 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.


2.6 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 \]

2.6.1 Keputusan: Gagal menolak \(H_0\)


2.7 6️⃣ Tabel Ringkasan Hasil Uji

Komponen Nilai
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\)

2.8 7️⃣ Interpretasi Hasil

2.8.1 📌 Interpretasi Statistik

Pada tingkat signifikansi 5%, tidak terdapat bukti statistik yang cukup untuk menyatakan bahwa rata-rata waktu penyelesaian tugas berbeda dari 10 menit.


2.8.2 📌 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.


2.9 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.


2.10 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

3 📘 Case Study 3

3.1 Two-Sample t-Test (A/B Testing – Welch’s Test)


3.2 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:

Versi Ukuran Sampel (n) Rata-rata (mean) Standar Deviasi
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.3 2️⃣ Formulasi Hipotesis (Uji Dua Sisi)

Karena tujuan analisis adalah menguji apakah dua rata-rata populasi berbeda, maka digunakan uji dua sisi (two-tailed test).

\[ H_0 : \mu_A = \mu_B \]

\[ H_1 : \mu_A \neq \mu_B \]


3.4 3️⃣ Pemilihan Uji Statistik

Uji statistik yang digunakan adalah Two-Sample t-Test (Welch’s t-Test).

Alasan pemilihan uji:

  1. Data berasal dari dua kelompok independen
  2. Variabel yang dianalisis berskala numerik (durasi sesi)
  3. Standar deviasi populasi tidak diketahui
  4. Tidak ada asumsi bahwa varians kedua kelompok sama
  5. 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.


3.5 4️⃣ Perhitungan Manual (Pendekatan Konseptual)

3.5.1 ✏️ 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 \]


3.5.2 ✏️ 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 \]


3.5.3 ✏️ 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 \]


3.5.4 ✏️ Step 4 – Derajat Kebebasan (Welch Approximation)

Derajat kebebasan pada Welch’s t-Test dihitung menggunakan pendekatan Satterthwaite dan menghasilkan nilai sekitar:

\[ df \approx 46 \]


3.5.5 ✏️ 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 \]


3.6 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 \]

3.6.1 Keputusan: Gagal menolak \(H_0\)


3.7 6️⃣ Tabel Ringkasan Hasil Uji

Komponen Nilai
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\)

3.8 7️⃣ Interpretasi Hasil

3.8.1 📌 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.


3.8.2 📌 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)

3.9 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

4 📘 Case Study 4

4.1 Chi-Square Test of Independence


4.2 4️⃣ Soal

Sebuah perusahaan e-commerce ingin mengetahui apakah jenis perangkat (device type) berhubungan dengan preferensi metode pembayaran pengguna.

Data hasil observasi:

Device / Payment E-Wallet Credit Card Cash on Delivery
Mobile 120 80 50
Desktop 60 90 40

4.3 4.2 Tasks & Penyelesaian


4.4 1️⃣ Perumusan Hipotesis

4.4.1 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} \]

4.4.2 Hipotesis Alternatif (H₁)

Terdapat hubungan antara jenis perangkat dan preferensi metode pembayaran.

\[ H_1 : \text{Device type tidak independen terhadap Payment method} \]


4.5 2️⃣ Uji Statistik yang Digunakan

Uji yang tepat adalah:

4.5.1Chi-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

4.6 3️⃣ Perhitungan Manual Chi-Square (Step-by-Step)

4.6.1 ✏️ 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 \]


4.6.2 ✏️ Step 2 – Hitung Frekuensi Harapan (Expected Frequency)

Rumus frekuensi harapan:

\[ E_{ij} = \frac{(\text{Total Baris}) \times (\text{Total Kolom})}{N} \]

4.6.2.1 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 \]

4.6.2.2 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 \]

4.6.3 ✏️ Step 3 – Hitung Nilai Chi-Square (χ²)

Rumus statistik Chi-Square:

\[ \chi^2 = \sum \frac{(O - E)^2}{E} \]

Sel O E (O−E)² / 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 \]


4.6.4 ✏️ Step 4 – Derajat Kebebasan (df)

Rumus:

\[ df = (r - 1)(c - 1) \]

\[ df = (2 - 1)(3 - 1) = 2 \]


4.6.5 ✏️ 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 \]

4.6.6 Keputusan Statistik:

Tolak H₀

(p-value < 0.05)


4.7 4️⃣ Kesimpulan Statistik

Terdapat hubungan yang signifikan secara statistik antara: - Jenis perangkat (Mobile vs Desktop) - Preferensi metode pembayaran


4.8 5️⃣ Interpretasi dalam Konteks Strategi Pembayaran Digital

4.8.1 📊 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

4.8.2 💡 Implikasi Strategi:

  • Optimalkan E-Wallet UX di mobile
  • Tonjolkan Credit Card checkout di desktop
  • Personalisasi metode pembayaran berdasarkan device pengguna

4.9 📌 Tabel Ringkasan Akhir

Komponen Hasil
Jenis Uji Chi-Square Test of Independence
χ² hitung 13.78
df 2
α 0.05
Keputusan Tolak H₀
Kesimpulan Device & Payment Method berhubungan

5 📘 Case Study 5

5.1 Type I and Type II Errors (Conceptual)


5.2 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.3 5.2 Penjelasan Type I Error (α)

5.3.1 Definisi

Type I Error (α) terjadi ketika H₀ ditolak padahal H₀ benar.

5.3.2 Dalam konteks studi ini

Perusahaan menyimpulkan bahwa algoritma baru berhasil mengurangi fraud,
padahal pada kenyataannya algoritma tersebut tidak lebih efektif dari sistem lama.

5.3.3 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.4 5.3 Penjelasan Type II Error (β)

5.4.1 Definisi

Type II Error (β) terjadi ketika H₀ tidak ditolak padahal H₁ benar.

5.4.2 Dalam konteks studi ini

Perusahaan menyimpulkan bahwa algoritma baru tidak efektif,
padahal sebenarnya algoritma tersebut mampu menurunkan fraud.

5.4.3 Dampak bisnis

  • Inovasi yang efektif dihentikan
  • Kesempatan menekan kerugian fraud terlewat
  • Keunggulan kompetitif tidak dimanfaatkan

5.5 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.6 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.7 5.6 Hubungan antara α, β, dan Statistical Power

5.7.1 Konsep utama

  • Statistical Power = 1 − β

Artinya, power menunjukkan kemampuan uji statistik untuk mendeteksi efek yang benar-benar ada.

5.7.2 Hubungan antar komponen

  • Menurunkan α → mengurangi Type I Error
  • Namun, jika ukuran sampel tetap, β bisa meningkat
  • Cara paling efektif meningkatkan power adalah menambah ukuran sampel

5.7.3 Ringkasan hubungan

  • α: Risiko salah menyatakan algoritma efektif
  • β: Risiko gagal mendeteksi algoritma efektif
  • Power: Kemampuan mendeteksi efek nyata

5.8 5.7 Tabel Kesimpulan Case Study 5

Komponen Penjelasan
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.9 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.


6 📘 Case Study 6

6.1 P-Value dan Pengambilan Keputusan Statistik


6.1.1 📌 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.1.2 📌 6.2 Tasks dan Pembahasan


6.1.3 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.

6.1.4 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


6.1.5 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

6.1.6 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.


6.1.7 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

6.1.8 📌 Kesimpulan Akhir

Aspek Penjelasan
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==