PRAKTIKUM STATISTIKA DASAR

Ukuran Pemusatan Data

awokwowk

Praktikum 1

Buatkanlah secara manual dan visualisasi ukuran pemusatan untuk data kelompok.

Ukuran Pemusatan Untuk Data Kelompok

ukuran pemusatan data kelompok adalah nilai yang mewakili seluruh data yang disusun dalam kelompok-kelompok. ukuran ini yang membantu dalam memahami nilai rata-rata, Nilai yang sering muncul dan nilai tengah. Ukuran ini digunakan untuk memperjelas gambaran mengenai sekumpulan data.

A. Mean (Rata-Rata)

Mean (Rata-rata) merupakan perhitungan untuk mencari nilai rata-rata pada data kelompok. Nilai ini dihitung dengan cara mengalikan jumlah data (frekuensi) di setiap kelas dengan nilai tengah kelas itu, lalu menjumlahkan hasilnya untuk semua kelas. Setelah itu, totalnya dibagi dengan jumlah seluruh data.yang dimana kelas tersebut merupakan kelompok atau rentang nilai yang digunakan untuk mengelompokkan data dalam tabel distribusi frekuensi.

Contoh Tabel Distribusi Frekuensi

- Data Dengan Outliers

No Interval Kelas Frekuensi \((f)\)
1 0 - 10 1
2 11 - 20 0
3 21 - 30 5
4 31 - 40 4
5 41 - 50 10
6 51 - 60 5
7 61 - 70 3
8 71 - 80 0
9 81 - 90 0
10 91 - 100 0
11 101 - 110 1

-Data Tanpa Outliers

No Interval Kelas Frekuensi \((f)\)
1 11 - 20 1
2 21 - 30 5
3 31 - 40 4
4 41 - 50 10
5 51 - 60 5
6 61 - 70 3
7 71 - 80 1

Contoh Tabel di atas merupakan tabel distribusi frekuensi dari nilai kelas A.

Berikut merupakan langkah-langkah menghitung mean untuk data kelompok :

1. Cari nilai tengah tiap kelas

Gunakan Rumus : \[ \text{Nilai Tengah} = \dfrac{\text{Tepi bawah kelas} + \text{Tepi atas kelas}}{2} \]

Contoh :

\[ \begin{split} \text{Nilai Tengah} &= \frac{0 + 10}{2} &= 5 \\ \text{Nilai Tengah} &= \frac{11 + 20}{2} &= 15,5 \\ \text{Nilai Tengah} &= \frac{21 + 30}{2} &= 25,5 \\ \text{Nilai Tengah} &= \frac{31 + 40}{2} &= 35,5 \\ \text{Nilai Tengah} &= \frac{41 + 50}{2} &= 45,5 \\ \text{Nilai Tengah} &= \frac{51 + 60}{2} &= 55,5 \\ \text{Nilai Tengah} &= \frac{61 + 70}{2} &= 65,5 \\ \text{Nilai Tengah} &= \frac{71 + 80}{2} &= 75,5 \\ \text{Nilai Tengah} &= \frac{81 + 90}{2} &= 85,5 \\ \text{Nilai Tengah} &= \frac{91 + 100}{2} &= 95,5 \\ \text{Nilai Tengah} &= \frac{101 + 110}{2} &= 105,5 \end{split} \]

- Data Dengan Outliers

No Interval Kelas Frekuensi \((f)\) Nilai Tengah\(x\)
1 0 - 10 1 5
2 11 - 20 0 15,5
3 21 - 30 5 25,5
4 31 - 40 4 35,5
5 41 - 50 10 45,5
6 51 - 60 5 55,5
7 61 - 70 3 65,5
8 71 - 80 0 75,5
9 81 - 90 0 85,5
10 91 - 100 0 95,5
11 101 - 110 1 105,5

- Data Tanpa Outliers

No Interval Kelas Frekuensi \((f)\) Nilai Tengah\(x\)
1 11 - 20 1 15,5
2 21 - 30 5 25,5
3 31 - 40 4 35,5
4 41 - 50 10 45,5
5 51 - 60 5 55,5
6 61 - 70 3 65,5
7 71 - 80 1 75,5

2. Kalikan Frekuensi dengan Nilai Tengah

Di setiap Kelasnya, kalikan frekuensi dengan nilai tengah

Rumus : \[ f \cdot x \]

  • \(f\) = Frekuensi
  • \(x\) = Nilai Tengah

Contoh :

- Data Tanpa Outliers \[ \begin{split} f \cdot x &= 1 \cdot 15,5 &= 15,5 \\ f \cdot x &= 5 \cdot 25,5 &= 127,5 \\ f \cdot x &= 4 \cdot 35,5 &= 142 \\ f \cdot x &= 10 \cdot 45,5 &= 455 \\ f \cdot x &= 5 \cdot 55,5 &= 277,5 \\ f \cdot x &= 3 \cdot 65,5 &= 196,5 \\ f \cdot x &= 1 \cdot 75,5 &= 75,5 \\ \end{split} \]

No Interval Kelas Frekuensi \((f)\) Nilai Tengah\(x\) \[ f \cdot x \]
1 11 - 20 1 15,5 15,5
2 21 - 30 5 25,5 127,5
3 31 - 40 4 35,5 142
4 41 - 50 10 45,5 455
5 51 - 60 5 55,5 277,5
6 61 - 70 3 65,5 196,5
7 71 - 80 1 75,5 75,5

- Data dengan Outliers \[ \begin{split} f \cdot x &= 1 \cdot 5 &= 5 \\ f \cdot x &= 0 \cdot 15,5 &= 0 \\ f \cdot x &= 5 \cdot 25,5 &= 127,5 \\ f \cdot x &= 4 \cdot 35,5 &= 142 \\ f \cdot x &= 10 \cdot 45,5 &= 455 \\ f \cdot x &= 5 \cdot 55,5 &= 277,5 \\ f \cdot x &= 3 \cdot 65,5 &= 196,5 \\ f \cdot x &= 0 \cdot 75,5 &= 0 \\ f \cdot x &= 0 \cdot 85,5 &= 0 \\ f \cdot x &= 0 \cdot 95,5 &= 0 \\ f \cdot x &= 1 \cdot 105,5 &= 105,5 \end{split} \]

Ditambahkan dalam tabel seperti ini

No Interval Kelas Frekuensi \((f)\) Nilai Tengah\(x\) \[ f \cdot x \]
1 0 - 10 1 5 5
2 11 - 20 0 15,5 0
3 21 - 30 5 25,5 127,5
4 31 - 40 4 35,5 142
5 41 - 50 10 45,5 455
6 51 - 60 5 55,5 277,5
7 61 - 70 3 65,5 196,5
8 71 - 80 0 75,5 0
9 81 - 90 0 85,5 0
10 91 - 100 0 95,5 0
11 101 - 110 1 105,5 105,5

3. Jumlahkan Hasil Perkalian

Hasil perkalian dari setiap kelasnya dijumlahkan

\[ \sum f \cdot x \]

Contoh :

- Data Tanpa Outlier \[ \begin{split} \sum f \cdot x &= 15,5 + 127,5 + 142 + 455 + 277,5 + 196,5 + 75,5 \\ &= 1.289,5 \end{split} \]

- Data Dengan Outlier \[ \begin{split} \sum f \cdot x &= 5 + 127,5 + 142 + 455 + 277,5 + 196,5 + 105,5 \\ &= 1.309 \end{split} \]

4. Jumlahkan Frekuensi

frekuensi dari setiap kelasnya dijumlahkan \[ \sum f = f_1 + f_2 + .... + f_n \]

Contoh :

- Tanpa Outlier \[ \begin{split} \sum f&= f_1 + f_2 + f_3 + f_4 + f_5 + f_6 + f_7 \\ &= 1 + 5 + 4 + 10 + 5 + 3 + 1 \\ &= 29 \end{split} \]

- Dengan Outlier \[ \begin{split} \sum f&= f_1 + f_2 + f_3 + f_4 + f_5 + f_6 + f_7 + f_8 + f_9 + f_10 + f_11 \\ &= 1 + + 0 + 5 + 4 + 10 + 5 + 3 + 0 + 0 + 0 + 1 \\ &= 29 \end{split} \]

5. Menghitung Mean Data Kelompok

Bagikan total hasil perkalian dengan total frekuensi \[ \text{Mean} = \frac{\sum f \cdot x}{\sum f} \]

Contoh : - Tanpa Outlier \[ \text{Mean} = \frac{1.289,5}{29} = 44,47 \]

- Dengan Outlier \[ \text{Mean} = \frac{1.309}{29} = 45,14 \]

Visualisasi Mean Data Kelompok

Visualisasi menggunakan Boxplot

VIsualisasi Menggunakan Histogram

B. Median (Nilai Tengah)

Median (Me) adalah nilai yang ada di tengah-tengah kumpulan data ketika data tersebut diurutkan, baik dari yang terkecil hingga terbesar atau sebaliknya. Jika jumlah data ganjil, median adalah angka yang tepat di tengah. Jika jumlah data genap, median adalah rata-rata dari dua angka yang ada di tengah. Median juga dikenal sebagai kuartil 2 Q2.

Berikut merupakan langkah-langkah menghitung median untuk data kelompok :

1. Menentukan Posisi Median

  • Jumlahkan Frekuensi

frekuensi dari setiap kelasnya dijumlahkan \[ \sum f = f_1 + f_2 + .... + f_n \]

Contoh :

- Data Tanpa Outlier

No Interval Kelas Frekuensi \((f)\)
1 11 - 20 1
2 21 - 30 5
3 31 - 40 4
4 41 - 50 10
5 51 - 60 5
6 61 - 70 3
7 71 - 80 1

\[ \begin{split} \sum f&= f_1 + f_2 + f_3 + f_4 + f_5 + f_6 + f_7 + f_8 + f_9 \\ &= 1 + 5 + 4 + 10 + 5 + 3 + 1 \\ &= 29 \end{split} \]

- Data Dengan Outlier

No Interval Kelas Frekuensi \((f)\)
1 0 - 10 1
2 11 - 20 0
3 21 - 30 5
4 31 - 40 8
5 41 - 50 10
6 51 - 60 4
7 61 - 70 3
8 71 - 80 0
9 81 - 90 0
10 91 - 100 0
11 101 - 110 1

\[ \begin{split} \sum f&= f_1 + f_2 + f_3 + f_4 + f_5 + f_6 + f_7 + f_8 + f_9 + f_10 + f_11 \\ &= 1 + 0 + 5 + 4 + 10 + 5 + 3 + 0 + 0 + 0 + 1 \\ &= 29 \end{split} \]

  • Tentukan Posisi

Jika total nya bilangan genap maka gunakan rumus \[ \frac{n}{2} \] Dan \[ \frac{n}{2} + 1 \] Jika totalnya bilangan ganjil maka gunakan rumus \[ \frac{n + 1}{2} \]

  • \(n\) = Total Frekuensi

Contoh :

\[ \frac{29 + 1}{2} = 15 \]

jadi posisi median ada di urutan 15

2. Cari Interval Kelas yang Mengandung Nilai Median

  • Jumlahkan Frekuensi Kumulatif

tambahkan frekuensi dari yang pertama sampai akhir secara beberutan untuk mengetahui tempat median di interval kelas yang mana.

Setelah menghitung posisi median dan menjumlahkan frekuensi secara berurutan (frekuensi kumulatif), cari kelas di mana jumlah frekuensi ini mencapai atau melebihi posisi median.

Contoh :

- Data Dengan Outliers

No Interval Kelas Frekuensi \((f)\) Frekuensi kumulatif
1 0 - 10 1 1
2 11 - 20 0 1
3 21 - 30 5 6
4 31 - 40 4 10
5 41 - 50 10 20
6 51 - 60 5 25
7 61 - 70 3 28
8 71 - 80 0 28
9 81 - 90 0 28
10 91 - 100 0 28
11 101 - 110 1 29

-Data Tanpa Outliers

No Interval Kelas Frekuensi \((f)\) Frekuensi kumulatif
1 11 - 20 1 1
2 21 - 30 5 6
3 31 - 40 4 10
4 41 - 50 10 20
5 51 - 60 5 25
6 61 - 70 3 28
7 71 - 80 1 29

3. Hitung Median

rumus : \[ \text{Median} = L + (\frac{\frac{n}{2} - F}{f}) \cdot h \] dimana :

  • \(L\) = Batas bawah interval kelas yang mengandung median
  • \(n\) = Total Frekuensi
  • \(F\) = Frekuensi kumulatif sebelum kelas yang mengandung median.
  • \(f\) = Frekuensi kelas median
  • \(h\) = panjang interval kelas (lebar interval).

Rumus cari Lebar Kelas \[ \text{Lebar Kelas} = \text{Batas Atas} - \text{Batas Bawah} \] Catatan : Batas atas dan batas bawah dalam interval kelas

Contoh :

\[ \begin{split} \text{Median} &= 41 + (\frac{\frac{29}{2} - 10}{10}) \cdot 10 \\ &= 41 + (\frac{14,5 - 10}{10}) \cdot 10 \\ &= 41 + (0,45) \cdot 10 \\ &= 41 + 4,5 &= 45,5 \end{split} \]

Visualisasi Median Data Kelompok

Visualisasi menggunakan Boxplot

Visualisasi Menggunakan Histogram

C. Modus (Nilai yang sering muncul)

Modus data kelompok adalah nilai yang paling sering muncul, tapi karena datanya sudah dikelompokkan dalam interval, kita nggak bisa langsung lihat angkanya. Jadi, untuk mencari modus, kita pakai rumus khusus. Intinya, kita cari kelas yang frekuensinya paling tinggi dari kelas, lalu hitung pakai rumus untuk memperkirakan nilai tepatnya.

Berikut merupakan langkah-langkah menghitung modus untuk data kelompok :

1. Identifikasi Kelas Modus

Mencari kelas yang frekuensinya paling besar dari interval kelas.

Contoh :

- Data Dengan Outliers

No Interval Kelas Frekuensi \((f)\)
1 0 - 10 1
2 11 - 20 0
3 21 - 30 5
4 31 - 40 4
5 41 - 50 10
6 51 - 60 5
7 61 - 70 3
8 71 - 80 0
9 81 - 90 0
10 91 - 100 0
11 101 - 110 1

frekuensi paling banyak 10 di kelas 41- 50

-Data Tanpa Outliers

No Interval Kelas Frekuensi \((f)\)
1 11 - 20 1
2 21 - 30 5
3 31 - 40 4
4 41 - 50 10
5 51 - 60 5
6 61 - 70 3
7 71 - 80 1

frekuensi paling banyak 10 di kelas 41- 50

2. Mencari L (Tepi bawah kelas modus)

Jika Data Diskrit : \[ \text{Tepi Bawah} = \text{Batas Bawah Kelas} - 0,5 \]

No Interval Kelas Frekuensi \((f)\)
1 10 - 19 a
2 20 - 29 b

Jika data Kontinu : \[ \text{Tepi Bawah Kelas} = \text{Batas Bawah} \]

No Interval Kelas Frekuensi \((f)\)
1 10 - 20 a
2 20 - 30 b

Contoh :

dari tabel diatas merupakan Data Diskrit : \[ \begin{split} \text{Tepi Bawah} &= \text{Batas Bawah Kelas} - 0,5 \\ &= 41 - 0,5 \\ &= 40,5 \end{split} \]

3. Cari \(d_1\) dan \(d_2\)

\[ \begin{split} d_1 = \text{Frekuensi Kelas Modus} - \text{Frekuensi Kelas Sebelumnya} \\ d_2 = \text{Frekuensi Kelas Modus} - \text{Frekuensi Kelas Setelahnya} \end{split} \]

Contoh :

\[ \begin{split} d_1 &= \text{Frekuensi Kelas Modus} - \text{Frekuensi Kelas Sebelumnya} \\ &= 10 - 4 \\ &= 6 \\ d_2 &= \text{Frekuensi Kelas Modus} - \text{Frekuensi Kelas Setelahnya} \\ &= 10 - 5 \\ &= 5 \end{split} \]

4. Tentukan Panjang Kelas

Dihitung dengan cara mengambil selisih antara batas bawah dua kelas yang berurutan. Jadi, lihat batas bawah kelas satu dan batas bawah kelas berikutnya, lalu menghitung selisihnya.

\[ \text{Panjang Kelas} = \text{Batas Bawah Kelas 2} - \text{Batas Bawah Kelas 1} \]

Contoh : \[ \text{Panjang Kelas} = 21 - 11 = 10 \]

5. Menghitung Modus

Rumus : \[ M = L + (\frac{d_1}{d_1 + d_2}) \cdot p \]

  • \(M\) = modus
  • \(L\) = batas bawah kelas modus
  • \(d_1\) = selisih antara frekuensi kelas modus dan frekuensi kelas sebelumnya
  • \(d_2\) = selisih antara frekuensi kelas modus dan frekuensi kelas setelahnya
  • \(p\) = panjang kelas (lebar kelas)

Contoh :

\[ \begin{split} M &= L + (\frac{d_1}{d_1 + d_2}) \cdot p &= 41 + (\frac{6}{6 + 5}) \cdot 10 \\ &= 41 + (0,54) \cdot 10 \\ &= 41 + 5,4 \\ &= 46,4 \end{split} \]

Visualisasi Median Data Kelompok

Visualisasi menggunakan Boxplot

Praktikum 2

Carilah contoh sederhana yang menggunakan ukuran pemusatan dalam studi kasus

Contoh sederhana dalam ukuran pemusatan data kelompok

A. Bisnis

Analisis Distribusi Kinerja Saham Berdasarkan Kelompok Interval Harga pada November 2013. dengan data sebagai berikut :

No Interval Harga Saham Frekuensi \((f)\)
1 70,0 - 84,4 3
2 84,5 - 91,9 4
3 92,0 - 99,4 7
4 99,5 - 106,9 4
5 107,0 - 114,4 4

Mean (Rata - Rata)

1. Cari nilai tengah tiap kelas

\[ \begin{split} \text{Nilai Tengah} &= \dfrac{70,0 + 84,4}{2} &= 77,2 \\ \text{Nilai Tengah} &= \dfrac{84,5 + 91,9}{2} &= 88,2 \\ \text{Nilai Tengah} &= \dfrac{92,0 + 99,4}{2} &= 95,7 \\ \text{Nilai Tengah} &= \dfrac{99,5 + 106,9}{2} &= 103,2 \\ \text{Nilai Tengah} &= \dfrac{107,0 + 114,4}{2} &= 110,7 \end{split} \]

2. Kalikan Frekuensi dengan Nilai Tengah

\[ \begin{split} f \cdot x &= 3 \cdot 77,2 &= 231,6 \\ f \cdot x &= 4 \cdot 88,2 &= 352,8 \\ f \cdot x &= 7 \cdot 95,7 &= 669,9 \\ f \cdot x &= 4 \cdot 103,2 &= 412,8 \\ f \cdot x &= 4 \cdot 110,7 &= 442,8 \end{split} \]

3. Jumlahkan Hasil Perkalian

\[ \begin{split} \sum f \cdot x &= 231,6 + 352,8 + 669,9 + 412,8 + 442,8 \\ &= 2.109,9 \end{split} \]

4. Jumlahkan Frekuensi

\[ \begin{split} \sum f&= f_1 + f_2 + f_3 + f_4 + f_5 \\ &= 3 + 4 + 7 + 4 + 4 \\ &= 22 \end{split} \]

5. Menghitung Mean Data Kelompok

\[ \text{Mean} = \frac{2.109,9}{22} = 95,90 \\ \]

Median (Nilai Tengah)

1. Menentukan Posisi Median

  • Jumlahkan Frekuensi \[ \begin{split} \sum f&= f_1 + f_2 + f_3 + f_4 + f_5 \\ &= 3 + 4 + 7 + 4 + 4 \\ &= 22 \end{split} \]

  • Tentukan Posisi

Jika total nya bilangan genap maka gunakan rumus \[ \frac{22}{2} = 11 \] Dan \[ \frac{22}{2} + 1 = 12 \] Median di posisi antara urutan 11 dan 12

2. Cari Interval Kelas yang Mengandung Nilai Median

  • Jumlahkan Frekuensi Kumulatif
No Interval Harga Saham Frekuensi \((f)\) Frekuensi Kumulatif
1 70,0 - 84,4 3 3
2 84,5 - 91,9 4 7
3 92,0 - 99,4 7 14
4 99,5 - 106,9 4 18
5 107,0 - 114,4 4 22

3. Hitung Median

\[ \begin{split} \text{Median} &= 92,0 + (\frac{\frac{22}{2} -7}{7}) \cdot 7,4 \\ &= 92,0 + (0,57) \cdot 7,4 \\ &= 92,0 + 4,22 \\ &= 96,22 \end{split} \]

Modus (Nilai yang sering muncul)

1. Identifikasi Kelas Modus

No Interval Harga Saham Frekuensi \((f)\)
1 70,0 - 84,4 3
2 84,5 - 91,9 4
3 92,0 - 99,4 7
4 99,5 - 106,9 4
5 107,0 - 114,4 4

Frekuensi paling banyak yaitu 7 di kelas 92,0 - 99,4

2. Mencari L (Tepi bawah kelas modus)

Jika Data Diskrit : \[ \text{Tepi Bawah} = 92,0 - 0,5 = 91,5 \]

3. Cari \(d_1\) dan \(d_2\)

\[ \begin{split} d_1 &= \text{Frekuensi Kelas Modus} - \text{Frekuensi Kelas Sebelumnya} \\ &= 7 - 4 \\ &= 3 \\ d_2 &= \text{Frekuensi Kelas Modus} - \text{Frekuensi Kelas Setelahnya} \\ &= 7 - 4 \\ &= 3 \end{split} \]

4. Tentukan Panjang Kelas

\[ \begin{split} \text{Panjang Kelas} &= \text{Batas Bawah Kelas 2} - \text{Batas Bawah Kelas 1} \\ &= 92,0 - 84,5 \\ &= 7,5 \end{split} \]

5. Menghitung Modus

Rumus : \[ \begin{split} M &= L + (\frac{d_1}{d_1 + d_2}) \cdot p \\ &= 91,5 + (\frac{4}{4 + 4}) \cdot 7,5 \\ &= 91,5 + 0,5 \cdot 7,5 \\ &= 91,5 + 3,75 \\ &= 95,25 \end{split} \]

B. Kesehatan

Studi Kasus: Distribusi Tekanan Darah pada Kelompok Usia Dewasa Studi dilakukan pada 100 individu dewasa (usia 30–50 tahun) untuk mengetahui distribusi tekanan darah sistolik.

Interval Kelas Tekanan Darah Sistolik (mmHg): Data tekanan darah sistolik dikelompokkan ke dalam interval kelas dengan lebar kelas 10 mmHg.

Interval Kelas (mmHg) Frekuensi (f)
100–109 5
110–119 15
120–129 30
130–139 25
140–149 20
150–159 5

Mean (Rata - Rata)

1. Cari nilai tengah tiap kelas

\[ \begin{split} \text{Nilai Tengah} &= \dfrac{100 + 109}{2} &= 104,5 \\ \text{Nilai Tengah} &= \dfrac{110 + 119}{2} &= 114,5 \\ \text{Nilai Tengah} &= \dfrac{120 + 129}{2} &= 124,5 \\ \text{Nilai Tengah} &= \dfrac{130 + 139}{2} &= 134,4 \\ \text{Nilai Tengah} &= \dfrac{140 + 149}{2} &= 144,5 \\ \text{Nilai Tengah} &= \dfrac{150 + 159}{2} &= 154,5 \end{split} \]

2. Kalikan Frekuensi dengan Nilai Tengah

\[ \begin{split} f \cdot x &= 5 \cdot 104,5 &= 522,5 \\ f \cdot x &= 15 \cdot 114,5 &= 1.717,5 \\ f \cdot x &= 30 \cdot 124,5 &= 3.735 \\ f \cdot x &= 25 \cdot 134,5 &= 3.362,5 \\ f \cdot x &= 20 \cdot 144,5 &= 2.890 \\ f \cdot x &= 5 \cdot 154,5 &= 772,5 \end{split} \]

3. Jumlahkan Hasil Perkalian

\[ \begin{split} \sum f \cdot x &= 522,5 + 1.717,5 + 3.735 + 3.362,5 + 2.890 + 772,5 \\ &= 13.000 \end{split} \]

4. Jumlahkan Frekuensi

\[ \begin{split} \sum f&= f_1 + f_2 + f_3 + f_4 + f_5 + f_6 \\ &= 5 + 15 + 30 + 25 + 20 + 5 \\ &= 100 \end{split} \]

5. Menghitung Mean Data Kelompok

\[ \text{Mean} = \frac{13.000}{100} = 130 \\ \]

Median (Nilai Tengah)

1. Menentukan Posisi Median

  • Jumlahkan Frekuensi \[ \begin{split} \sum f&= f_1 + f_2 + f_3 + f_4 + f_5 + f_6 \\ &= 5 + 15 + 30 + 25 + 20 + 5 \\ &= 100 \end{split} \]

  • Tentukan Posisi

Jika total nya bilangan genap maka gunakan rumus \[ \frac{100}{2} = 50 \] Dan \[ \frac{100}{2} + 1 = 51 \] Median di posisi antara urutan 50 dan 51

2. Cari Interval Kelas yang Mengandung Nilai Median

  • Jumlahkan Frekuensi Kumulatif
Interval Kelas (mmHg) Frekuensi (f) Frekuensi Kumulatif
100–109 5 5
110–119 15 20
120–129 30 50
130–139 25 75
140–149 20 95
150–159 5 100

3. Hitung Median

\[ \begin{split} \text{Median} &= 120 + (\frac{\frac{100}{2} -20}{30}) \cdot 10 \\ &= 120 + (1) \cdot 10 \\ &= 120 + 10 \\ &= 130 \end{split} \]

Modus (Nilai yang sering muncul)

1. Identifikasi Kelas Modus

Interval Kelas (mmHg) Frekuensi (f)
100–109 5
110–119 15
120–129 30
130–139 25
140–149 20
150–159 5

Frekuensi paling banyak yaitu 30 di kelas 120 - 129

2. Mencari L (Tepi bawah kelas modus)

Jika Data Diskrit : \[ \text{Tepi Bawah} = 120 - 0,5 = 119,5 \]

3. Cari \(d_1\) dan \(d_2\)

\[ \begin{split} d_1 &= \text{Frekuensi Kelas Modus} - \text{Frekuensi Kelas Sebelumnya} \\ &= 30 - 15 \\ &= 15 \\ d_2 &= \text{Frekuensi Kelas Modus} - \text{Frekuensi Kelas Setelahnya} \\ &= 30 - 25 \\ &= 5 \end{split} \]

4. Tentukan Panjang Kelas

\[ \begin{split} \text{Panjang Kelas} &= \text{Batas Bawah Kelas 2} - \text{Batas Bawah Kelas 1} \\ &= 110 - 100 \\ &= 10 \end{split} \]

5. Menghitung Modus

Rumus : \[ \begin{split} M &= L + (\frac{d_1}{d_1 + d_2}) \cdot p \\ &= 120 + (\frac{15}{15 + 5}) \cdot 10 \\ &= 120 + (0,75) \cdot 10 \\ &= 120 + 7,5 \\ &= 127,5 \end{split} \]

C. Pendidikan

Studi Kasus: Distribusi Nilai Ujian

Data dari nilai ujian Tengah Semester 1 Mata Kuliah Kalkulus Program Studi Sains Data

No Interval Kelas Frekuensi \((f)\)
1 51 - 60 8
2 61 - 70 6
3 71 - 80 4
4 81 - 90 3
5 91 - 100 1

Mean (Rata - Rata)

1. Cari nilai tengah tiap kelas

\[ \begin{split} \text{Nilai Tengah} &= \dfrac{51 + 60}{2} &= 55,5 \\ \text{Nilai Tengah} &= \dfrac{61 + 70}{2} &= 65,5 \\ \text{Nilai Tengah} &= \dfrac{71 + 80}{2} &= 75,5 \\ \text{Nilai Tengah} &= \dfrac{81 + 90}{2} &= 85,5 \\ \text{Nilai Tengah} &= \dfrac{91 + 100}{2} &= 95,5 \end{split} \]

2. Kalikan Frekuensi dengan Nilai Tengah

\[ \begin{split} f \cdot x &= 8 \cdot 55,5 &= 444 \\ f \cdot x &= 6 \cdot 65,5 &= 393 \\ f \cdot x &= 4 \cdot 75,5 &= 302 \\ f \cdot x &= 3 \cdot 85,5 &= 256,5 \\ f \cdot x &= 1 \cdot 95,5 &= 95,5 \end{split} \]

3. Jumlahkan Hasil Perkalian

\[ \begin{split} \sum f \cdot x &= 444 + 393 + 302 + 256,5 + 95,5 \\ &= 1.491 \end{split} \]

4. Jumlahkan Frekuensi

\[ \begin{split} \sum f&= f_1 + f_2 + f_3 + f_4 + f_5 \\ &= 8 + 6 + 4 + 3 + 1 \\ &= 22 \end{split} \]

5. Menghitung Mean Data Kelompok

\[ \text{Mean} = \frac{1.491}{22} = 67,77 \\ \]

Median (Nilai Tengah)

1. Menentukan Posisi Median

  • Jumlahkan Frekuensi \[ \begin{split} \sum f&= f_1 + f_2 + f_3 + f_4 + f_5 \\ &= 8 + 6 + 4 + 3 + 1 \\ &= 22 \end{split} \]

  • Tentukan Posisi

Jika total nya bilangan genap maka gunakan rumus \[ \frac{22}{2} = 11 \] Dan \[ \frac{22}{2} + 1 = 12 \] Median di posisi antara urutan 11 dan 12

2. Cari Interval Kelas yang Mengandung Nilai Median

  • Jumlahkan Frekuensi Kumulatif
No Interval Kelas Frekuensi \((f)\) Frekuensi Kumulatif
1 51 - 60 8 8
2 61 - 70 6 14
3 71 - 80 4 18
4 81 - 90 3 21
5 91 - 100 1 22

3. Hitung Median

\[ \begin{split} \text{Median} &= 61 + (\frac{\frac{22}{2} -8}{6}) \cdot 10 \\ &= 61 + (0,5) \cdot 10 \\ &= 92,0 + 5 \\ &= 97 \end{split} \]

Modus (Nilai yang sering muncul)

1. Identifikasi Kelas Modus

No Interval Kelas Frekuensi \((f)\)
1 51 - 60 8
2 61 - 70 6
3 71 - 80 4
4 81 - 90 3
5 91 - 100 1

Frekuensi paling banyak yaitu 8 di kelas 51 - 60

2. Mencari L (Tepi bawah kelas modus)

Data Kontinu \[ \begin{split} \text{Tepi Bawah Kelas} &= \text{Batas Bawah} \\ &= 51 \end{split} \]

3. Cari \(d_1\) dan \(d_2\)

\[ \begin{split} d_1 &= \text{Frekuensi Kelas Modus} - \text{Frekuensi Kelas Sebelumnya} \\ &= 8 - 0 \\ &= 8 \\ d_2 &= \text{Frekuensi Kelas Modus} - \text{Frekuensi Kelas Setelahnya} \\ &= 8 - 6 \\ &= 2 \end{split} \]

4. Tentukan Panjang Kelas

\[ \begin{split} \text{Panjang Kelas} &= \text{Batas Bawah Kelas 2} - \text{Batas Bawah Kelas 1} \\ &= 61 - 51 \\ &= 10 \end{split} \]

5. Menghitung Modus

Rumus : \[ \begin{split} M &= L + (\frac{d_1}{d_1 + d_2}) \cdot p \\ &= 51 + (\frac{8}{8 + 2}) \cdot 10 \\ &= 51 + 0,8 \cdot 10 \\ &= 51 + 8 \\ &= 59 \end{split} \]

REFERENSI

  • Binus University. (2022, April). Ukuran pemusatan data. Diakses pada 19 November 2024, dari Klik Disini.

  • Kompas.com. (2020, Oktober 15). Ukuran pemusatan dan penyebaran data berkelompok. Diakses pada 19 November 2024, dari Klik Disini.

  • Kemdikbud. (n.d.). Bab 3: Ukuran pemusatan. Diakses pada 19 November 2024, dariKlik disini.

  • DSCiencelabs. (n.d.). Ukuran pemusatan data. Diakses pada 19 November 2024, dari Klik disini.

  • Katadata. (2023, January 16). Cara menghitung mean data kelompok serta contoh soal dan pembahasannya., dari Klik disini.

  • ResearchGate. (n.d.). TB-1 Statistik Kelompok 3: Studi Kasus Ukuran Pemusatan. Diakses dari Klik disini.

LS0tDQp0aXRsZTogIlBSQUtUSUtVTSBTVEFUSVNUSUtBIERBU0FSIg0Kc3VidGl0bGU6ICJVa3VyYW4gUGVtdXNhdGFuIERhdGEiDQphdXRob3I6IA0KICAtICJTeWlmYSBOdXJ1bGZhanJpIFJ1c3RpbiINCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOiAgICMgaHR0cHM6Ly9naXRodWIuY29tL2p1YmEvcm1kZm9ybWF0cw0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgdGh1bWJuYWlsczogdHJ1ZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIGxpYl9kaXI6IGxpYnMNCiAgICBkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgY3NzOiAiQ1NTL1N0eWxlX0NTUy5jc3MiDQotLS0NCg0KPGltZyBzcmM9ImltZy9wb3Rvby5qcGciIGFsdD0iYXdva3dvd2siIGlkPSJsb2dvLXV0YW1hIiBzdHlsZT0id2lkdGg6MjAwcHg7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IGF1dG87Ii8+DQoNCg0KIyBQcmFrdGlrdW0gMSAgDQoNCkJ1YXRrYW5sYWggc2VjYXJhIG1hbnVhbCBkYW4gdmlzdWFsaXNhc2kgdWt1cmFuIHBlbXVzYXRhbiB1bnR1ayBkYXRhIGtlbG9tcG9rLiANCg0KIyMgVWt1cmFuIFBlbXVzYXRhbiBVbnR1ayBEYXRhIEtlbG9tcG9rDQoNCnVrdXJhbiBwZW11c2F0YW4gZGF0YSBrZWxvbXBvayBhZGFsYWggbmlsYWkgeWFuZyBtZXdha2lsaSBzZWx1cnVoIGRhdGEgeWFuZyBkaXN1c3VuIGRhbGFtIGtlbG9tcG9rLWtlbG9tcG9rLiB1a3VyYW4gaW5pIHlhbmcgbWVtYmFudHUgZGFsYW0gbWVtYWhhbWkgbmlsYWkgcmF0YS1yYXRhLCBOaWxhaSB5YW5nIHNlcmluZyBtdW5jdWwgZGFuIG5pbGFpIHRlbmdhaC4gVWt1cmFuIGluaSBkaWd1bmFrYW4gdW50dWsgbWVtcGVyamVsYXMgZ2FtYmFyYW4gbWVuZ2VuYWkgc2VrdW1wdWxhbiBkYXRhLiANCg0KIyMgQS4gTWVhbiAoUmF0YS1SYXRhKQ0KDQpNZWFuICgqUmF0YS1yYXRhKikgbWVydXBha2FuIHBlcmhpdHVuZ2FuIHVudHVrIG1lbmNhcmkgbmlsYWkgcmF0YS1yYXRhIHBhZGEgZGF0YSBrZWxvbXBvay4gTmlsYWkgaW5pIGRpaGl0dW5nIGRlbmdhbiBjYXJhIG1lbmdhbGlrYW4ganVtbGFoIGRhdGEgKGZyZWt1ZW5zaSkgZGkgc2V0aWFwIGtlbGFzIGRlbmdhbiBuaWxhaSB0ZW5nYWgga2VsYXMgaXR1LCBsYWx1IG1lbmp1bWxhaGthbiBoYXNpbG55YSB1bnR1ayBzZW11YSBrZWxhcy4gU2V0ZWxhaCBpdHUsIHRvdGFsbnlhIGRpYmFnaSBkZW5nYW4ganVtbGFoIHNlbHVydWggZGF0YS55YW5nIGRpbWFuYSBrZWxhcyB0ZXJzZWJ1dCBtZXJ1cGFrYW4ga2Vsb21wb2sgYXRhdSByZW50YW5nIG5pbGFpIHlhbmcgZGlndW5ha2FuIHVudHVrIG1lbmdlbG9tcG9ra2FuIGRhdGEgZGFsYW0gdGFiZWwgZGlzdHJpYnVzaSBmcmVrdWVuc2kuIA0KDQpDb250b2ggVGFiZWwgRGlzdHJpYnVzaSBGcmVrdWVuc2kgDQoNCioqLSBEYXRhIERlbmdhbiBPdXRsaWVycyoqDQoNCnwgTm8gfCBJbnRlcnZhbCBLZWxhcyB8IEZyZWt1ZW5zaSBcKChmKVwpfCANCnw6LS06fDotLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tLS06fA0KfCAxICB8IDAgLSAxMCAgICAgICAgIHwgMSAgICAgICAgICAgICAgICB8DQp8IDIgIHwgMTEgLSAyMCAgICAgICAgfCAwICAgICAgICAgICAgICAgIHwNCnwgMyAgfCAyMSAtIDMwICAgICAgICB8IDUgICAgICAgICAgICAgICAgfA0KfCA0ICB8IDMxIC0gNDAgICAgICAgIHwgNCAgICAgICAgICAgICAgICB8DQp8IDUgIHwgNDEgLSA1MCAgICAgICAgfCAxMCAgICAgICAgICAgICAgIHwNCnwgNiAgfCA1MSAtIDYwICAgICAgICB8IDUgICAgICAgICAgICAgICAgfA0KfCA3ICB8IDYxIC0gNzAgICAgICAgIHwgMyAgICAgICAgICAgICAgICB8DQp8IDggIHwgNzEgLSA4MCAgICAgICAgfCAwICAgICAgICAgICAgICAgIHwNCnwgOSAgfCA4MSAtIDkwICAgICAgICB8IDAgICAgICAgICAgICAgICAgfA0KfCAxMCB8IDkxIC0gMTAwICAgICAgIHwgMCAgICAgICAgICAgICAgICB8DQp8IDExIHwgMTAxIC0gMTEwICAgICAgfCAxICAgICAgICAgICAgICAgIHwNCg0KKiotRGF0YSBUYW5wYSBPdXRsaWVycyoqDQoNCnwgTm8gfCBJbnRlcnZhbCBLZWxhcyB8IEZyZWt1ZW5zaSBcKChmKVwpfCANCnw6LS06fDotLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tLS06fA0KfCAxICB8IDExIC0gMjAgICAgICAgIHwgMSAgICAgICAgICAgICAgICB8DQp8IDIgIHwgMjEgLSAzMCAgICAgICAgfCA1ICAgICAgICAgICAgICAgIHwNCnwgMyAgfCAzMSAtIDQwICAgICAgICB8IDQgICAgICAgICAgICAgICAgfA0KfCA0ICB8IDQxIC0gNTAgICAgICAgIHwgMTAgICAgICAgICAgICAgICB8DQp8IDUgIHwgNTEgLSA2MCAgICAgICAgfCA1ICAgICAgICAgICAgICAgIHwNCnwgNiAgfCA2MSAtIDcwICAgICAgICB8IDMgICAgICAgICAgICAgICAgfA0KfCA3ICB8IDcxIC0gODAgICAgICAgIHwgMSAgICAgICAgICAgICAgICB8DQoNCkNvbnRvaCBUYWJlbCBkaSBhdGFzIG1lcnVwYWthbiB0YWJlbCBkaXN0cmlidXNpIGZyZWt1ZW5zaSBkYXJpIG5pbGFpIGtlbGFzIEEuDQoNCioqQmVyaWt1dCBtZXJ1cGFrYW4gbGFuZ2thaC1sYW5na2FoIG1lbmdoaXR1bmcgbWVhbiB1bnR1ayBkYXRhIGtlbG9tcG9rIDoqKg0KDQoqKjEuIENhcmkgbmlsYWkgdGVuZ2FoIHRpYXAga2VsYXMgKiogIA0KDQpHdW5ha2FuIFJ1bXVzIDoNCiQkDQpcdGV4dHtOaWxhaSBUZW5nYWh9ID0gXGRmcmFje1x0ZXh0e1RlcGkgYmF3YWgga2VsYXN9ICsgXHRleHR7VGVwaSBhdGFzIGtlbGFzfX17Mn0NCiQkDQoNCkNvbnRvaCA6DQoNCiQkDQpcYmVnaW57c3BsaXR9DQpcdGV4dHtOaWxhaSBUZW5nYWh9ICY9IFxmcmFjezAgKyAxMH17Mn0gJj0gNSBcXA0KXHRleHR7TmlsYWkgVGVuZ2FofSAmPSBcZnJhY3sxMSArIDIwfXsyfSAmPSAxNSw1IFxcDQpcdGV4dHtOaWxhaSBUZW5nYWh9ICY9IFxmcmFjezIxICsgMzB9ezJ9ICY9IDI1LDUgXFwNClx0ZXh0e05pbGFpIFRlbmdhaH0gJj0gXGZyYWN7MzEgKyA0MH17Mn0gJj0gMzUsNSBcXA0KXHRleHR7TmlsYWkgVGVuZ2FofSAmPSBcZnJhY3s0MSArIDUwfXsyfSAmPSA0NSw1IFxcDQpcdGV4dHtOaWxhaSBUZW5nYWh9ICY9IFxmcmFjezUxICsgNjB9ezJ9ICY9IDU1LDUgXFwNClx0ZXh0e05pbGFpIFRlbmdhaH0gJj0gXGZyYWN7NjEgKyA3MH17Mn0gJj0gNjUsNSBcXA0KXHRleHR7TmlsYWkgVGVuZ2FofSAmPSBcZnJhY3s3MSArIDgwfXsyfSAmPSA3NSw1IFxcDQpcdGV4dHtOaWxhaSBUZW5nYWh9ICY9IFxmcmFjezgxICsgOTB9ezJ9ICY9IDg1LDUgXFwNClx0ZXh0e05pbGFpIFRlbmdhaH0gJj0gXGZyYWN7OTEgKyAxMDB9ezJ9ICY9IDk1LDUgXFwNClx0ZXh0e05pbGFpIFRlbmdhaH0gJj0gXGZyYWN7MTAxICsgMTEwfXsyfSAmPSAxMDUsNSANClxlbmR7c3BsaXR9DQokJA0KDQoqKi0gRGF0YSBEZW5nYW4gT3V0bGllcnMqKg0KDQp8IE5vIHwgSW50ZXJ2YWwgS2VsYXMgfCBGcmVrdWVuc2kgXCgoZilcKXwgTmlsYWkgVGVuZ2FoXCh4XCkgfA0KfDotLTp8Oi0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tLS0tOnwNCnwgMSAgfCAwIC0gMTAgICAgICAgICB8IDEgICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICB8DQp8IDIgIHwgMTEgLSAyMCAgICAgICAgfCAwICAgICAgICAgICAgICAgIHwgMTUsNSAgICAgICAgICAgICAgfA0KfCAzICB8IDIxIC0gMzAgICAgICAgIHwgNSAgICAgICAgICAgICAgICB8IDI1LDUgICAgICAgICAgICAgIHwNCnwgNCAgfCAzMSAtIDQwICAgICAgICB8IDQgICAgICAgICAgICAgICAgfCAzNSw1ICAgICAgICAgICAgICB8DQp8IDUgIHwgNDEgLSA1MCAgICAgICAgfCAxMCAgICAgICAgICAgICAgIHwgNDUsNSAgICAgICAgICAgICAgfA0KfCA2ICB8IDUxIC0gNjAgICAgICAgIHwgNSAgICAgICAgICAgICAgICB8IDU1LDUgICAgICAgICAgICAgIHwNCnwgNyAgfCA2MSAtIDcwICAgICAgICB8IDMgICAgICAgICAgICAgICAgfCA2NSw1ICAgICAgICAgICAgICB8DQp8IDggIHwgNzEgLSA4MCAgICAgICAgfCAwICAgICAgICAgICAgICAgIHwgNzUsNSAgICAgICAgICAgICAgfA0KfCA5ICB8IDgxIC0gOTAgICAgICAgIHwgMCAgICAgICAgICAgICAgICB8IDg1LDUgICAgICAgICAgICAgIHwNCnwgMTAgfCA5MSAtIDEwMCAgICAgICB8IDAgICAgICAgICAgICAgICAgfCA5NSw1ICAgICAgICAgICAgICB8DQp8IDExIHwgMTAxIC0gMTEwICAgICAgfCAxICAgICAgICAgICAgICAgIHwgMTA1LDUgICAgICAgICAgICAgfA0KDQoqKi0gRGF0YSBUYW5wYSBPdXRsaWVycyoqDQoNCnwgTm8gfCBJbnRlcnZhbCBLZWxhcyB8IEZyZWt1ZW5zaSBcKChmKVwpfCBOaWxhaSBUZW5nYWhcKHhcKSB8DQp8Oi0tOnw6LS0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tLS06fA0KfCAxICB8IDExIC0gMjAgICAgICAgIHwgMSAgICAgICAgICAgICAgICB8IDE1LDUgICAgICAgICAgICAgIHwNCnwgMiAgfCAyMSAtIDMwICAgICAgICB8IDUgICAgICAgICAgICAgICAgfCAyNSw1ICAgICAgICAgICAgICB8DQp8IDMgIHwgMzEgLSA0MCAgICAgICAgfCA0ICAgICAgICAgICAgICAgIHwgMzUsNSAgICAgICAgICAgICAgfA0KfCA0ICB8IDQxIC0gNTAgICAgICAgIHwgMTAgICAgICAgICAgICAgICB8IDQ1LDUgICAgICAgICAgICAgIHwNCnwgNSAgfCA1MSAtIDYwICAgICAgICB8IDUgICAgICAgICAgICAgICAgfCA1NSw1ICAgICAgICAgICAgICB8DQp8IDYgIHwgNjEgLSA3MCAgICAgICAgfCAzICAgICAgICAgICAgICAgIHwgNjUsNSAgICAgICAgICAgICAgfA0KfCA3ICB8IDcxIC0gODAgICAgICAgIHwgMSAgICAgICAgICAgICAgICB8IDc1LDUgICAgICAgICAgICAgIHwNCg0KKioyLiBLYWxpa2FuIEZyZWt1ZW5zaSBkZW5nYW4gTmlsYWkgVGVuZ2FoICoqIA0KDQpEaSBzZXRpYXAgS2VsYXNueWEsIGthbGlrYW4gZnJla3VlbnNpIGRlbmdhbiBuaWxhaSB0ZW5nYWggDQoNClJ1bXVzIDoNCiQkIA0KZiBcY2RvdCB4IA0KJCQNCg0KLSBcKGZcKSA9IEZyZWt1ZW5zaQ0KLSBcKHhcKSA9IE5pbGFpIFRlbmdhaA0KDQpDb250b2ggOg0KDQoqKi0gRGF0YSBUYW5wYSBPdXRsaWVycyoqDQokJA0KXGJlZ2lue3NwbGl0fQ0KZiBcY2RvdCB4ICY9IDEgXGNkb3QgMTUsNSAmPSAxNSw1IFxcDQpmIFxjZG90IHggJj0gNSBcY2RvdCAyNSw1ICY9IDEyNyw1IFxcDQpmIFxjZG90IHggJj0gNCBcY2RvdCAzNSw1ICY9IDE0MiBcXA0KZiBcY2RvdCB4ICY9IDEwIFxjZG90IDQ1LDUgJj0gNDU1IFxcDQpmIFxjZG90IHggJj0gNSBcY2RvdCA1NSw1ICY9IDI3Nyw1IFxcDQpmIFxjZG90IHggJj0gMyBcY2RvdCA2NSw1ICY9IDE5Niw1IFxcDQpmIFxjZG90IHggJj0gMSBcY2RvdCA3NSw1ICY9IDc1LDUgXFwNClxlbmR7c3BsaXR9DQokJA0KDQp8IE5vIHwgSW50ZXJ2YWwgS2VsYXMgfCBGcmVrdWVuc2kgXCgoZilcKXwgTmlsYWkgVGVuZ2FoXCh4XCkgfCAkJCBmIFxjZG90IHggJCQgfA0KfDotLTp8Oi0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tOnwNCnwgMSAgfCAxMSAtIDIwICAgICAgICB8IDEgICAgICAgICAgICAgICAgfCAxNSw1ICAgICAgICAgICAgICB8IDE1LDUgICAgICAgICAgICB8DQp8IDIgIHwgMjEgLSAzMCAgICAgICAgfCA1ICAgICAgICAgICAgICAgIHwgMjUsNSAgICAgICAgICAgICAgfCAxMjcsNSAgICAgICAgICAgfA0KfCAzICB8IDMxIC0gNDAgICAgICAgIHwgNCAgICAgICAgICAgICAgICB8IDM1LDUgICAgICAgICAgICAgIHwgMTQyICAgICAgICAgICAgIHwNCnwgNCAgfCA0MSAtIDUwICAgICAgICB8IDEwICAgICAgICAgICAgICAgfCA0NSw1ICAgICAgICAgICAgICB8IDQ1NSAgICAgICAgICAgICB8DQp8IDUgIHwgNTEgLSA2MCAgICAgICAgfCA1ICAgICAgICAgICAgICAgIHwgNTUsNSAgICAgICAgICAgICAgfCAyNzcsNSAgICAgICAgICAgfA0KfCA2ICB8IDYxIC0gNzAgICAgICAgIHwgMyAgICAgICAgICAgICAgICB8IDY1LDUgICAgICAgICAgICAgIHwgMTk2LDUgICAgICAgICAgIHwNCnwgNyAgfCA3MSAtIDgwICAgICAgICB8IDEgICAgICAgICAgICAgICAgfCA3NSw1ICAgICAgICAgICAgICB8IDc1LDUgICAgICAgICAgICB8DQoNCioqLSBEYXRhIGRlbmdhbiBPdXRsaWVycyoqDQokJA0KXGJlZ2lue3NwbGl0fQ0KZiBcY2RvdCB4ICY9IDEgXGNkb3QgNSAmPSA1IFxcDQpmIFxjZG90IHggJj0gMCBcY2RvdCAxNSw1ICY9IDAgXFwNCmYgXGNkb3QgeCAmPSA1IFxjZG90IDI1LDUgJj0gMTI3LDUgXFwNCmYgXGNkb3QgeCAmPSA0IFxjZG90IDM1LDUgJj0gMTQyIFxcDQpmIFxjZG90IHggJj0gMTAgXGNkb3QgNDUsNSAmPSA0NTUgXFwNCmYgXGNkb3QgeCAmPSA1IFxjZG90IDU1LDUgJj0gMjc3LDUgXFwNCmYgXGNkb3QgeCAmPSAzIFxjZG90IDY1LDUgJj0gMTk2LDUgXFwNCmYgXGNkb3QgeCAmPSAwIFxjZG90IDc1LDUgJj0gMCBcXA0KZiBcY2RvdCB4ICY9IDAgXGNkb3QgODUsNSAmPSAwIFxcDQpmIFxjZG90IHggJj0gMCBcY2RvdCA5NSw1ICY9IDAgXFwNCmYgXGNkb3QgeCAmPSAxIFxjZG90IDEwNSw1ICY9IDEwNSw1IA0KXGVuZHtzcGxpdH0NCiQkDQoNCkRpdGFtYmFoa2FuIGRhbGFtIHRhYmVsIHNlcGVydGkgaW5pDQoNCnwgTm8gfCBJbnRlcnZhbCBLZWxhcyB8IEZyZWt1ZW5zaSBcKChmKVwpfCBOaWxhaSBUZW5nYWhcKHhcKSB8ICQkIGYgXGNkb3QgeCAkJCB8DQp8Oi0tOnw6LS0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLS06fA0KfCAxICB8IDAgLSAxMCAgICAgICAgIHwgMSAgICAgICAgICAgICAgICB8IDUgICAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgIHwNCnwgMiAgfCAxMSAtIDIwICAgICAgICB8IDAgICAgICAgICAgICAgICAgfCAxNSw1ICAgICAgICAgICAgICB8IDAgICAgICAgICAgICAgICB8DQp8IDMgIHwgMjEgLSAzMCAgICAgICAgfCA1ICAgICAgICAgICAgICAgIHwgMjUsNSAgICAgICAgICAgICAgfCAxMjcsNSAgICAgICAgICAgfA0KfCA0ICB8IDMxIC0gNDAgICAgICAgIHwgNCAgICAgICAgICAgICAgICB8IDM1LDUgICAgICAgICAgICAgIHwgMTQyICAgICAgICAgICAgIHwNCnwgNSAgfCA0MSAtIDUwICAgICAgICB8IDEwICAgICAgICAgICAgICAgfCA0NSw1ICAgICAgICAgICAgICB8IDQ1NSAgICAgICAgICAgICB8DQp8IDYgIHwgNTEgLSA2MCAgICAgICAgfCA1ICAgICAgICAgICAgICAgIHwgNTUsNSAgICAgICAgICAgICAgfCAyNzcsNSAgICAgICAgICAgfA0KfCA3ICB8IDYxIC0gNzAgICAgICAgIHwgMyAgICAgICAgICAgICAgICB8IDY1LDUgICAgICAgICAgICAgIHwgMTk2LDUgICAgICAgICAgIHwNCnwgOCAgfCA3MSAtIDgwICAgICAgICB8IDAgICAgICAgICAgICAgICAgfCA3NSw1ICAgICAgICAgICAgICB8IDAgICAgICAgICAgICAgICB8DQp8IDkgIHwgODEgLSA5MCAgICAgICAgfCAwICAgICAgICAgICAgICAgIHwgODUsNSAgICAgICAgICAgICAgfCAwICAgICAgICAgICAgICAgfA0KfCAxMCB8IDkxIC0gMTAwICAgICAgIHwgMCAgICAgICAgICAgICAgICB8IDk1LDUgICAgICAgICAgICAgIHwgMCAgICAgICAgICAgICAgIHwNCnwgMTEgfCAxMDEgLSAxMTAgICAgICB8IDEgICAgICAgICAgICAgICAgfCAxMDUsNSAgICAgICAgICAgICB8IDEwNSw1ICAgICAgICAgICB8DQoNCioqMy4gSnVtbGFoa2FuIEhhc2lsIFBlcmthbGlhbiAqKiANCg0KSGFzaWwgcGVya2FsaWFuIGRhcmkgc2V0aWFwIGtlbGFzbnlhIGRpanVtbGFoa2FuIA0KDQokJA0KXHN1bSBmIFxjZG90IHgNCiQkDQoNCkNvbnRvaCA6DQoNCioqLSBEYXRhIFRhbnBhIE91dGxpZXIqKg0KJCQNClxiZWdpbntzcGxpdH0NClxzdW0gZiBcY2RvdCB4ICY9IDE1LDUgKyAxMjcsNSArIDE0MiArIDQ1NSArIDI3Nyw1ICsgMTk2LDUgKyA3NSw1IFxcDQogICAgICAgICAgICAgICAmPSAxLjI4OSw1DQpcZW5ke3NwbGl0fQ0KJCQNCg0KKiotIERhdGEgRGVuZ2FuIE91dGxpZXIqKg0KJCQNClxiZWdpbntzcGxpdH0NClxzdW0gZiBcY2RvdCB4ICY9IDUgKyAxMjcsNSArIDE0MiArIDQ1NSArIDI3Nyw1ICsgMTk2LDUgKyAxMDUsNSBcXA0KICAgICAgICAgICAgICAgJj0gMS4zMDkNClxlbmR7c3BsaXR9DQokJA0KDQoqKjQuIEp1bWxhaGthbiBGcmVrdWVuc2kgKiogDQoNCmZyZWt1ZW5zaSBkYXJpIHNldGlhcCBrZWxhc255YSBkaWp1bWxhaGthbiANCiQkDQpcc3VtIGYgPSBmXzEgKyBmXzIgKyAuLi4uICsgZl9uDQokJA0KDQpDb250b2ggOg0KDQoqKi0gVGFucGEgT3V0bGllcioqDQokJA0KXGJlZ2lue3NwbGl0fQ0KXHN1bSBmJj0gZl8xICsgZl8yICsgZl8zICsgZl80ICsgZl81ICsgZl82ICsgZl83IFxcDQogICAgICAmPSAxICsgNSArIDQgKyAxMCArIDUgKyAzICsgMSBcXA0KICAgICAgJj0gMjkNClxlbmR7c3BsaXR9DQokJA0KDQoqKi0gRGVuZ2FuIE91dGxpZXIqKg0KJCQNClxiZWdpbntzcGxpdH0NClxzdW0gZiY9IGZfMSArIGZfMiArIGZfMyArIGZfNCArIGZfNSArIGZfNiArIGZfNyArIGZfOCArIGZfOSArIGZfMTAgKyBmXzExICBcXA0KICAgICAgJj0gMSArICsgMCArIDUgKyA0ICsgMTAgKyA1ICsgMyArIDAgKyAwICsgMCArIDEgXFwNCiAgICAgICY9IDI5DQpcZW5ke3NwbGl0fQ0KJCQNCg0KKio1LiBNZW5naGl0dW5nIE1lYW4gRGF0YSBLZWxvbXBvayAqKg0KDQpCYWdpa2FuIHRvdGFsIGhhc2lsIHBlcmthbGlhbiBkZW5nYW4gdG90YWwgZnJla3VlbnNpDQokJA0KXHRleHR7TWVhbn0gPSBcZnJhY3tcc3VtIGYgXGNkb3QgeH17XHN1bSBmfQ0KJCQNCg0KQ29udG9oIDoNCioqLSBUYW5wYSBPdXRsaWVyKioNCiQkDQpcdGV4dHtNZWFufSA9IFxmcmFjezEuMjg5LDV9ezI5fSA9IDQ0LDQ3DQokJA0KDQoqKi0gRGVuZ2FuIE91dGxpZXIqKg0KJCQNClx0ZXh0e01lYW59ID0gXGZyYWN7MS4zMDl9ezI5fSA9IDQ1LDE0DQokJA0KDQojIyMgVmlzdWFsaXNhc2kgTWVhbiBEYXRhIEtlbG9tcG9rDQoNCioqVmlzdWFsaXNhc2kgbWVuZ2d1bmFrYW4gQm94cGxvdCoqDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQojIEluc3RhbGwgZGFuIGxvYWQgbGlicmFyeQ0KbGlicmFyeShwbG90bHkpDQoNCmRhdGFfMSA8LSBjKDUsIHJlcCgyNS41LCA1KSwgcmVwKDM1LjUsIDQpLCByZXAoNDUuNSwgMTApLCByZXAoNTUuNSwgNSksIHJlcCg2NS41LCAzKSwgMTA1LjUpDQoNCmRhdGFfMiA8LSBjKDE1LjUsIHJlcCgyNS41LCA1KSwgcmVwKDM1LjUsIDQpLCByZXAoNDUuNSwgMTApLCByZXAoNTUuNSwgNSksIHJlcCg2NS41LCAzKSwgNzUuNSkNCg0KbWVhbl9kYXRhXzE8LSBtZWFuKGRhdGFfMSkNCm1lYW5fZGF0YV8yPC0gbWVhbihkYXRhXzIpDQoNCmRhdGEgPC0gZGF0YS5mcmFtZSgNCiAgTmlsYWkgPSBjKGRhdGFfMSwgZGF0YV8yKSwNCiAgS2Vsb21wb2sgPSByZXAoYygiRGVuZ2FuIE91dGxpZXJzIiwgIlRhbnBhIE91dGxpZXJzIiksIA0KICAgICAgICAgICAgICAgICB0aW1lcyA9IGMobGVuZ3RoKGRhdGFfMSksIGxlbmd0aChkYXRhXzIpKSkNCiAgICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgICANCiMgTWVtYnVhdCBib3hwbG90IG1lbmdndW5ha2FuIFBsb3RseSBkZW5nYW4gb3V0bGllcnMgZGl0YW1waWxrYW4NCnBsb3QgPC0gcGxvdF9seSgNCiAgZGF0YSwgDQogIHkgPSB+TmlsYWksIA0KICBjb2xvciA9IH5LZWxvbXBvaywNCiAgY29sb3JzID0gYygib3JjaGlkIiwgInNreWJsdWUiKSwNCiAgdHlwZSA9ICJib3giLCANCiAgYm94cG9pbnRzID0gIm91dGxpZXJzIiAgIyBNZW5hbXBpbGthbiB0aXRpayBvdXRsaWVycw0KKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIk1lYW4gRGF0YSBLZWxvbXBvayIsDQogICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIk5pbGFpIiksDQogICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIktlbG9tcG9rIiksDQogICAgYW5ub3RhdGlvbnMgPSBsaXN0KA0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9ICJEZW5nYW4gT3V0bGllcnMiLA0KICAgICAgICB5ID0gbWVhbl9kYXRhXzEsDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVhbjoiLCByb3VuZChtZWFuX2RhdGFfMSwgMikpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2hlYWQgPSAyDQogICAgICAgICksDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIlRhbnBhIE91dGxpZXJzIiwNCiAgICAgICAgeSA9IG1lYW5fZGF0YV8yLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lYW46Iiwgcm91bmQobWVhbl9kYXRhXzIsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKQ0KICAgICkNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3QNCmBgYA0KIA0KICoqVklzdWFsaXNhc2kgTWVuZ2d1bmFrYW4gSGlzdG9ncmFtICoqDQogDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KIyBJbnN0YWxsIGRhbiBsb2FkIGxpYnJhcnkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGE6IGR1YSBza2VuYXJpbywgc2F0dSBkZW5nYW4gb3V0bGllcnMsIHNhdHUgdGFucGEgb3V0bGllcnMNCmRhdGFfMSA8LSBjKDUsIHJlcCgyNS41LCA1KSwgcmVwKDM1LjUsIDQpLCByZXAoNDUuNSwgMTApLCByZXAoNTUuNSwgNSksIHJlcCg2NS41LCAzKSwgMTA1LjUpDQoNCmRhdGFfMiA8LSBjKDE1LjUsIHJlcCgyNS41LCA1KSwgcmVwKDM1LjUsIDQpLCByZXAoNDUuNSwgMTApLCByZXAoNTUuNSwgNSksIHJlcCg2NS41LCAzKSwgNzUuNSkNCg0KIyBNZW1idWF0IGRlbnNpdHkgcGxvdCB1bnR1ayBtYXNpbmctbWFzaW5nIGRhdGFzZXQNCmRlbnNpdHlfZGVuZ2FuX291dGxpZXJzIDwtIGRlbnNpdHkoZGF0YV8xKQ0KZGVuc2l0eV90YW5wYV9vdXRsaWVycyA8LSBkZW5zaXR5KGRhdGFfMikNCg0KIyBQYXN0aWthbiB0aWRhayBhZGEgbmlsYWkgbmVnYXRpZiBkaSB4IGRhbiB5DQpkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR4IDwtIHBtYXgoMCwgZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeCkNCmRlbnNpdHlfdGFucGFfb3V0bGllcnMkeCA8LSBwbWF4KDAsIGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeCkNCg0KIyBNZW5naGl0dW5nIHJhdGEtcmF0YQ0KbWVhbl9kZW5nYW5fb3V0bGllcnMgPC0gbWVhbihkYXRhXzEpDQptZWFuX3RhbnBhX291dGxpZXJzIDwtIG1lYW4oZGF0YV8yKQ0KDQojIE1lbWJ1YXQgcGxvdCBtZW5nZ3VuYWthbiBQbG90bHkNCnBsb3QgPC0gcGxvdF9seSgpICU+JQ0KICAjIE1lbmFtYmFoa2FuIGRlbnNpdHkgcGxvdCB1bnR1ayBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IH5kZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR4LA0KICAgIHkgPSB+ZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSwNCiAgICB0eXBlID0gJ3NjYXR0ZXInLA0KICAgIG1vZGUgPSAnbGluZXMnLA0KICAgIG5hbWUgPSAiRGVuZ2FuIE91dGxpZXJzIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjgpJywgd2lkdGggPSAyKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGRlbnNpdHkgcGxvdCB1bnR1ayBkYXRhc2V0IHRhbnBhIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gfmRlbnNpdHlfdGFucGFfb3V0bGllcnMkeCwNCiAgICB5ID0gfmRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSwNCiAgICB0eXBlID0gJ3NjYXR0ZXInLA0KICAgIG1vZGUgPSAnbGluZXMnLA0KICAgIG5hbWUgPSAiVGFucGEgT3V0bGllcnMiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMzgsIDE2NiwgOTEsIDAuOCknLCB3aWR0aCA9IDIpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZ2FyaXMgcmF0YS1yYXRhIHVudHVrIGRhdGFzZXQgZGVuZ2FuIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gYyhtZWFuX2Rlbmdhbl9vdXRsaWVycywgbWVhbl9kZW5nYW5fb3V0bGllcnMpLA0KICAgIHkgPSBjKDAsIG1heChkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5KSksDQogICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICBtb2RlID0gImxpbmVzIiwNCiAgICBuYW1lID0gIlJhdGEtcmF0YSAoRGVuZ2FuIE91dGxpZXJzKSIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC42KScsIGRhc2ggPSAnZGFzaCcpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZ2FyaXMgcmF0YS1yYXRhIHVudHVrIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSBjKG1lYW5fdGFucGFfb3V0bGllcnMsIG1lYW5fdGFucGFfb3V0bGllcnMpLA0KICAgIHkgPSBjKDAsIG1heChkZW5zaXR5X3RhbnBhX291dGxpZXJzJHkpKSwNCiAgICB0eXBlID0gInNjYXR0ZXIiLA0KICAgIG1vZGUgPSAibGluZXMiLA0KICAgIG5hbWUgPSAiUmF0YS1yYXRhIChUYW5wYSBPdXRsaWVycykiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMzgsIDE2NiwgOTEsIDAuNiknLCBkYXNoID0gJ2Rhc2gnKQ0KICApICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiUGVuZ2FydWggT3V0bGllcnMgdGVyaGFkYXAgTWVhbiBwYWRhIERlbnNpdHkgUGxvdCIsDQogICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIk5pbGFpIiksDQogICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIktlcGFkYXRhbiIpLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgICMgQW5vdGFzaSB1bnR1ayByYXRhLXJhdGEgZGF0YXNldCBkZW5nYW4gb3V0bGllcnMNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSBtZWFuX2Rlbmdhbl9vdXRsaWVycywNCiAgICAgICAgeSA9IG1heChkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5KSAqIDAuOSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWFuOiIsIHJvdW5kKG1lYW5fZGVuZ2FuX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDIsDQogICAgICAgIGF4ID0gMCwNCiAgICAgICAgYXkgPSAtMzAsICAjIFBvc2lzaSB0ZWtzIHNlZGlraXQgbGViaWggdGluZ2dpIGRhcmkgZ2FyaXMNCiAgICAgICAgZm9udCA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC44KScsIHNpemUgPSAxMikNCiAgICAgICksDQogICAgICAjIEFub3Rhc2kgdW50dWsgcmF0YS1yYXRhIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSBtZWFuX3RhbnBhX291dGxpZXJzLA0KICAgICAgICB5ID0gbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkgKiAwLjksDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVhbjoiLCByb3VuZChtZWFuX3RhbnBhX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDIsDQogICAgICAgIGF4ID0gMCwNCiAgICAgICAgYXkgPSAtNDUsICAjIFBvc2lzaSB0ZWtzIHNlZGlraXQgbGViaWggdGluZ2dpIGRhcmkgZ2FyaXMNCiAgICAgICAgZm9udCA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScsIHNpemUgPSAxMikNCiAgICAgICkNCiAgICApDQogICkNCg0KIyBNZW5hbXBpbGthbiBwbG90DQpwbG90DQpgYGANCiMjIEIuIE1lZGlhbiAoTmlsYWkgVGVuZ2FoKQ0KDQpNZWRpYW4gKE1lKSBhZGFsYWggbmlsYWkgeWFuZyBhZGEgZGkgdGVuZ2FoLXRlbmdhaCBrdW1wdWxhbiBkYXRhIGtldGlrYSBkYXRhIHRlcnNlYnV0IGRpdXJ1dGthbiwgYmFpayBkYXJpIHlhbmcgdGVya2VjaWwgaGluZ2dhIHRlcmJlc2FyIGF0YXUgc2ViYWxpa255YS4gSmlrYSBqdW1sYWggZGF0YSBnYW5qaWwsIG1lZGlhbiBhZGFsYWggYW5na2EgeWFuZyB0ZXBhdCBkaSB0ZW5nYWguIEppa2EganVtbGFoIGRhdGEgZ2VuYXAsIG1lZGlhbiBhZGFsYWggcmF0YS1yYXRhIGRhcmkgZHVhIGFuZ2thIHlhbmcgYWRhIGRpIHRlbmdhaC4gTWVkaWFuIGp1Z2EgZGlrZW5hbCBzZWJhZ2FpIGt1YXJ0aWwgMiBRMi4gDQoNCioqQmVyaWt1dCBtZXJ1cGFrYW4gbGFuZ2thaC1sYW5na2FoIG1lbmdoaXR1bmcgbWVkaWFuIHVudHVrIGRhdGEga2Vsb21wb2sgOioqDQoNCioqMS4gTWVuZW50dWthbiBQb3Npc2kgTWVkaWFuKioNCg0KLSBKdW1sYWhrYW4gRnJla3VlbnNpIA0KDQpmcmVrdWVuc2kgZGFyaSBzZXRpYXAga2VsYXNueWEgZGlqdW1sYWhrYW4gDQokJA0KXHN1bSBmID0gZl8xICsgZl8yICsgLi4uLiArIGZfbg0KJCQNCg0KQ29udG9oIDoNCg0KKiotIERhdGEgVGFucGEgT3V0bGllcioqDQoNCnwgTm8gfCBJbnRlcnZhbCBLZWxhcyB8IEZyZWt1ZW5zaSBcKChmKVwpfCANCnw6LS06fDotLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tLS06fA0KfCAxICB8IDExIC0gMjAgICAgICAgIHwgMSAgICAgICAgICAgICAgICB8DQp8IDIgIHwgMjEgLSAzMCAgICAgICAgfCA1ICAgICAgICAgICAgICAgIHwNCnwgMyAgfCAzMSAtIDQwICAgICAgICB8IDQgICAgICAgICAgICAgICAgfA0KfCA0ICB8IDQxIC0gNTAgICAgICAgIHwgMTAgICAgICAgICAgICAgICB8DQp8IDUgIHwgNTEgLSA2MCAgICAgICAgfCA1ICAgICAgICAgICAgICAgIHwNCnwgNiAgfCA2MSAtIDcwICAgICAgICB8IDMgICAgICAgICAgICAgICAgfA0KfCA3ICB8IDcxIC0gODAgICAgICAgIHwgMSAgICAgICAgICAgICAgICB8DQoNCg0KJCQNClxiZWdpbntzcGxpdH0NClxzdW0gZiY9IGZfMSArIGZfMiArIGZfMyArIGZfNCArIGZfNSArIGZfNiArIGZfNyArIGZfOCArIGZfOSBcXA0KICAgICAgJj0gMSArIDUgKyA0ICsgMTAgKyA1ICsgMyArIDEgXFwNCiAgICAgICY9IDI5DQpcZW5ke3NwbGl0fQ0KJCQNCg0KKiotIERhdGEgRGVuZ2FuIE91dGxpZXIqKg0KDQp8IE5vIHwgSW50ZXJ2YWwgS2VsYXMgfCBGcmVrdWVuc2kgXCgoZilcKXwgDQp8Oi0tOnw6LS0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLS0tOnwNCnwgMSAgfCAwIC0gMTAgICAgICAgICB8IDEgICAgICAgICAgICAgICAgfA0KfCAyICB8IDExIC0gMjAgICAgICAgIHwgMCAgICAgICAgICAgICAgICB8DQp8IDMgIHwgMjEgLSAzMCAgICAgICAgfCA1ICAgICAgICAgICAgICAgIHwNCnwgNCAgfCAzMSAtIDQwICAgICAgICB8IDggICAgICAgICAgICAgICAgfA0KfCA1ICB8IDQxIC0gNTAgICAgICAgIHwgMTAgICAgICAgICAgICAgICB8DQp8IDYgIHwgNTEgLSA2MCAgICAgICAgfCA0ICAgICAgICAgICAgICAgIHwNCnwgNyAgfCA2MSAtIDcwICAgICAgICB8IDMgICAgICAgICAgICAgICAgfA0KfCA4ICB8IDcxIC0gODAgICAgICAgIHwgMCAgICAgICAgICAgICAgICB8DQp8IDkgIHwgODEgLSA5MCAgICAgICAgfCAwICAgICAgICAgICAgICAgIHwNCnwgMTAgfCA5MSAtIDEwMCAgICAgICB8IDAgICAgICAgICAgICAgICAgfA0KfCAxMSB8IDEwMSAtIDExMCAgICAgIHwgMSAgICAgICAgICAgICAgICB8DQoNCiQkDQpcYmVnaW57c3BsaXR9DQpcc3VtIGYmPSBmXzEgKyBmXzIgKyBmXzMgKyBmXzQgKyBmXzUgKyBmXzYgKyBmXzcgKyBmXzggKyBmXzkgKyBmXzEwICsgZl8xMSBcXA0KICAgICAgJj0gMSArIDAgKyA1ICsgNCArIDEwICsgNSArIDMgKyAwICsgMCArIDAgKyAxIFxcDQogICAgICAmPSAyOQ0KXGVuZHtzcGxpdH0NCiQkDQoNCi0gVGVudHVrYW4gUG9zaXNpIA0KDQpKaWthIHRvdGFsIG55YSBiaWxhbmdhbiBnZW5hcCBtYWthIGd1bmFrYW4gcnVtdXMNCiQkDQpcZnJhY3tufXsyfSANCiQkDQpEYW4NCiQkDQpcZnJhY3tufXsyfSArIDENCiQkDQpKaWthIHRvdGFsbnlhIGJpbGFuZ2FuIGdhbmppbCBtYWthIGd1bmFrYW4gcnVtdXMNCiQkDQpcZnJhY3tuICsgMX17Mn0NCiQkDQoNCi0gXChuXCkgPSAgVG90YWwgRnJla3VlbnNpIA0KDQpDb250b2ggOg0KDQokJA0KXGZyYWN7MjkgKyAxfXsyfSA9IDE1DQokJA0KDQpqYWRpIHBvc2lzaSBtZWRpYW4gYWRhIGRpIHVydXRhbiAxNQ0KDQoqKjIuIENhcmkgSW50ZXJ2YWwgS2VsYXMgeWFuZyBNZW5nYW5kdW5nIE5pbGFpIE1lZGlhbioqDQoNCi0gSnVtbGFoa2FuIEZyZWt1ZW5zaSBLdW11bGF0aWYNCg0KdGFtYmFoa2FuIGZyZWt1ZW5zaSBkYXJpIHlhbmcgcGVydGFtYSBzYW1wYWkgYWtoaXIgc2VjYXJhIGJlYmVydXRhbiB1bnR1ayBtZW5nZXRhaHVpIHRlbXBhdCBtZWRpYW4gZGkgaW50ZXJ2YWwga2VsYXMgeWFuZyBtYW5hLiANCg0KU2V0ZWxhaCBtZW5naGl0dW5nIHBvc2lzaSBtZWRpYW4gZGFuIG1lbmp1bWxhaGthbiBmcmVrdWVuc2kgc2VjYXJhIGJlcnVydXRhbiAoZnJla3VlbnNpIGt1bXVsYXRpZiksIGNhcmkga2VsYXMgZGkgbWFuYSBqdW1sYWggZnJla3VlbnNpIGluaSBtZW5jYXBhaSBhdGF1IG1lbGViaWhpIHBvc2lzaSBtZWRpYW4uDQoNCkNvbnRvaCA6DQoNCioqLSBEYXRhIERlbmdhbiBPdXRsaWVycyoqDQoNCnwgTm8gfCBJbnRlcnZhbCBLZWxhcyB8IEZyZWt1ZW5zaSBcKChmKVwpfCBGcmVrdWVuc2kga3VtdWxhdGlmIHwNCnw6LS06fDotLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLS0tLS0tOnwNCnwgMSAgfCAwIC0gMTAgICAgICAgICB8IDEgICAgICAgICAgICAgICAgfCAxICAgICAgICAgICAgICAgICAgIHwNCnwgMiAgfCAxMSAtIDIwICAgICAgICB8IDAgICAgICAgICAgICAgICAgfCAxICAgICAgICAgICAgICAgICAgIHwNCnwgMyAgfCAyMSAtIDMwICAgICAgICB8IDUgICAgICAgICAgICAgICAgfCA2ICAgICAgICAgICAgICAgICAgIHwNCnwgNCAgfCAzMSAtIDQwICAgICAgICB8IDQgICAgICAgICAgICAgICAgfCAxMCAgICAgICAgICAgICAgICAgIHwNCnwgNSAgfCA0MSAtIDUwICAgICAgICB8IDEwICAgICAgICAgICAgICAgfCAyMCAgICAgICAgICAgICAgICAgIHwNCnwgNiAgfCA1MSAtIDYwICAgICAgICB8IDUgICAgICAgICAgICAgICAgfCAyNSAgICAgICAgICAgICAgICAgIHwNCnwgNyAgfCA2MSAtIDcwICAgICAgICB8IDMgICAgICAgICAgICAgICAgfCAyOCAgICAgICAgICAgICAgICAgIHwNCnwgOCAgfCA3MSAtIDgwICAgICAgICB8IDAgICAgICAgICAgICAgICAgfCAyOCAgICAgICAgICAgICAgICAgIHwNCnwgOSAgfCA4MSAtIDkwICAgICAgICB8IDAgICAgICAgICAgICAgICAgfCAyOCAgICAgICAgICAgICAgICAgIHwNCnwgMTAgfCA5MSAtIDEwMCAgICAgICB8IDAgICAgICAgICAgICAgICAgfCAyOCAgICAgICAgICAgICAgICAgIHwNCnwgMTEgfCAxMDEgLSAxMTAgICAgICB8IDEgICAgICAgICAgICAgICAgfCAyOSAgICAgICAgICAgICAgICAgIHwNCg0KKiotRGF0YSBUYW5wYSBPdXRsaWVycyoqDQoNCnwgTm8gfCBJbnRlcnZhbCBLZWxhcyB8IEZyZWt1ZW5zaSBcKChmKVwpfCBGcmVrdWVuc2kga3VtdWxhdGlmIHwNCnw6LS06fDotLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLS0tLS0tOnwNCnwgMSAgfCAxMSAtIDIwICAgICAgICB8IDEgICAgICAgICAgICAgICAgfCAxICAgICAgICAgICAgICAgICAgIHwNCnwgMiAgfCAyMSAtIDMwICAgICAgICB8IDUgICAgICAgICAgICAgICAgfCA2ICAgICAgICAgICAgICAgICAgIHwNCnwgMyAgfCAzMSAtIDQwICAgICAgICB8IDQgICAgICAgICAgICAgICAgfCAxMCAgICAgICAgICAgICAgICAgIHwNCnwgNCAgfCA0MSAtIDUwICAgICAgICB8IDEwICAgICAgICAgICAgICAgfCAyMCAgICAgICAgICAgICAgICAgIHwNCnwgNSAgfCA1MSAtIDYwICAgICAgICB8IDUgICAgICAgICAgICAgICAgfCAyNSAgICAgICAgICAgICAgICAgIHwNCnwgNiAgfCA2MSAtIDcwICAgICAgICB8IDMgICAgICAgICAgICAgICAgfCAyOCAgICAgICAgICAgICAgICAgIHwNCnwgNyAgfCA3MSAtIDgwICAgICAgICB8IDEgICAgICAgICAgICAgICAgfCAyOSAgICAgICAgICAgICAgICAgIHwNCg0KDQoqKjMuIEhpdHVuZyBNZWRpYW4qKg0KDQpydW11cyA6DQokJA0KXHRleHR7TWVkaWFufSA9IEwgKyAoXGZyYWN7XGZyYWN7bn17Mn0gLSBGfXtmfSkgXGNkb3QgIGgNCiQkDQpkaW1hbmEgOg0KDQotIFwoTFwpID0gQmF0YXMgYmF3YWggaW50ZXJ2YWwga2VsYXMgeWFuZyBtZW5nYW5kdW5nIG1lZGlhbg0KLSBcKG5cKSA9IFRvdGFsIEZyZWt1ZW5zaQ0KLSBcKEZcKSA9IEZyZWt1ZW5zaSBrdW11bGF0aWYgIHNlYmVsdW0ga2VsYXMgeWFuZyBtZW5nYW5kdW5nIG1lZGlhbi4NCi0gXChmXCkgPSBGcmVrdWVuc2kga2VsYXMgbWVkaWFuDQotIFwoaFwpID0gcGFuamFuZyBpbnRlcnZhbCBrZWxhcyAobGViYXIgaW50ZXJ2YWwpLg0KDQpSdW11cyBjYXJpIExlYmFyIEtlbGFzDQokJA0KXHRleHR7TGViYXIgS2VsYXN9ID0gXHRleHR7QmF0YXMgQXRhc30gLSBcdGV4dHtCYXRhcyBCYXdhaH0NCiQkDQoqQ2F0YXRhbiA6IEJhdGFzIGF0YXMgZGFuIGJhdGFzIGJhd2FoIGRhbGFtIGludGVydmFsIGtlbGFzKg0KDQpDb250b2ggOg0KDQokJA0KXGJlZ2lue3NwbGl0fQ0KXHRleHR7TWVkaWFufSAmPSA0MSArIChcZnJhY3tcZnJhY3syOX17Mn0gLSAxMH17MTB9KSBcY2RvdCAgMTAgIFxcDQogICAgICAgICAgICAgICY9IDQxICsgKFxmcmFjezE0LDUgLSAxMH17MTB9KSBcY2RvdCAxMCBcXA0KICAgICAgICAgICAgICAmPSA0MSArICgwLDQ1KSBcY2RvdCAxMCBcXA0KICAgICAgICAgICAgICAmPSA0MSArIDQsNQ0KICAgICAgICAgICAgICAmPSA0NSw1DQpcZW5ke3NwbGl0fQ0KJCQNCg0KIyMjIFZpc3VhbGlzYXNpIE1lZGlhbiBEYXRhIEtlbG9tcG9rDQoNCioqVmlzdWFsaXNhc2kgbWVuZ2d1bmFrYW4gQm94cGxvdCoqDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBJbnN0YWxsIGRhbiBsb2FkIGxpYnJhcnkNCmxpYnJhcnkocGxvdGx5KQ0KDQpkYXRhXzEgPC0gYyg1LCByZXAoMjUuNSwgNSksIHJlcCgzNS41LCA0KSwgcmVwKDQ1LjUsIDEwKSwgcmVwKDU1LjUsIDUpLCByZXAoNjUuNSwgMyksIDEwNS41KQ0KDQpkYXRhXzIgPC0gYygxNS41LCByZXAoMjUuNSwgNSksIHJlcCgzNS41LCA0KSwgcmVwKDQ1LjUsIDEwKSwgcmVwKDU1LjUsIDUpLCByZXAoNjUuNSwgMyksIDc1LjUpDQoNCm1lZGlhbl9kYXRhXzE8LSBtZWRpYW4oZGF0YV8xKQ0KbWVkaWFuX2RhdGFfMjwtIG1lZGlhbihkYXRhXzIpDQoNCmRhdGEgPC0gZGF0YS5mcmFtZSgNCiAgTmlsYWkgPSBjKGRhdGFfMSwgZGF0YV8yKSwNCiAgS2Vsb21wb2sgPSByZXAoYygiRGVuZ2FuIE91dGxpZXJzIiwgIlRhbnBhIE91dGxpZXJzIiksIA0KICAgICAgICAgICAgICAgICB0aW1lcyA9IGMobGVuZ3RoKGRhdGFfMSksIGxlbmd0aChkYXRhXzIpKSkNCiAgICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgICANCiMgTWVtYnVhdCBib3hwbG90IG1lbmdndW5ha2FuIFBsb3RseSBkZW5nYW4gb3V0bGllcnMgZGl0YW1waWxrYW4NCnBsb3QgPC0gcGxvdF9seSgNCiAgZGF0YSwgDQogIHkgPSB+TmlsYWksIA0KICBjb2xvciA9IH5LZWxvbXBvaywNCiAgY29sb3JzID0gYygib3JjaGlkIiwgInNreWJsdWUiKSwNCiAgdHlwZSA9ICJib3giLCANCiAgYm94cG9pbnRzID0gIm91dGxpZXJzIiAgIyBNZW5hbXBpbGthbiB0aXRpayBvdXRsaWVycw0KKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIk1lZGlhbiBEYXRhIEtlbG9tcG9rIiwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiTmlsYWkiKSwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiS2Vsb21wb2siKSwNCiAgICBhbm5vdGF0aW9ucyA9IGxpc3QoDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIkRlbmdhbiBPdXRsaWVycyIsDQogICAgICAgIHkgPSBtZWRpYW5fZGF0YV8xLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lZGlhbjoiLCByb3VuZChtZWRpYW5fZGF0YV8xLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDINCiAgICAgICAgKSwNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiVGFucGEgT3V0bGllcnMiLA0KICAgICAgICB5ID0gbWVkaWFuX2RhdGFfMiwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWRpYW46Iiwgcm91bmQobWVkaWFuX2RhdGFfMiwgMikpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2hlYWQgPSAyDQogICAgICApDQogICAgKQ0KICApDQoNCiMgTWVuYW1waWxrYW4gcGxvdA0KcGxvdA0KYGBgDQoNCioqVmlzdWFsaXNhc2kgTWVuZ2d1bmFrYW4gSGlzdG9ncmFtKioNCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCiMgSW5zdGFsbCBkYW4gbG9hZCBsaWJyYXJ5DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBEYXRhOiBkdWEgc2tlbmFyaW8sIHNhdHUgZGVuZ2FuIG91dGxpZXJzLCBzYXR1IHRhbnBhIG91dGxpZXJzDQpkYXRhXzEgPC0gYyg1LCByZXAoMjUuNSwgNSksIHJlcCgzNS41LCA0KSwgcmVwKDQ1LjUsIDEwKSwgcmVwKDU1LjUsIDUpLCByZXAoNjUuNSwgMyksIDEwNS41KQ0KDQpkYXRhXzIgPC0gYygxNS41LCByZXAoMjUuNSwgNSksIHJlcCgzNS41LCA0KSwgcmVwKDQ1LjUsIDEwKSwgcmVwKDU1LjUsIDUpLCByZXAoNjUuNSwgMyksIDc1LjUpDQoNCiMgTWVtYnVhdCBkZW5zaXR5IHBsb3QgdW50dWsgbWFzaW5nLW1hc2luZyBkYXRhc2V0DQpkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyA8LSBkZW5zaXR5KGRhdGFfMSkNCmRlbnNpdHlfdGFucGFfb3V0bGllcnMgPC0gZGVuc2l0eShkYXRhXzIpDQoNCiMgUGFzdGlrYW4gdGlkYWsgYWRhIG5pbGFpIG5lZ2F0aWYgZGkgeCBkYW4geQ0KZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeCA8LSBwbWF4KDAsIGRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHgpDQpkZW5zaXR5X3RhbnBhX291dGxpZXJzJHggPC0gcG1heCgwLCBkZW5zaXR5X3RhbnBhX291dGxpZXJzJHgpDQoNCiMgTWVuZ2hpdHVuZyByYXRhLXJhdGENCm1lZGlhbl9kZW5nYW5fb3V0bGllcnMgPC0gbWVkaWFuKGRhdGFfMSkNCm1lZGlhbl90YW5wYV9vdXRsaWVycyA8LSBtZWRpYW4oZGF0YV8yKQ0KDQojIE1lbWJ1YXQgcGxvdCBtZW5nZ3VuYWthbiBQbG90bHkNCnBsb3QgPC0gcGxvdF9seSgpICU+JQ0KICAjIE1lbmFtYmFoa2FuIGRlbnNpdHkgcGxvdCB1bnR1ayBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IH5kZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR4LA0KICAgIHkgPSB+ZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSwNCiAgICB0eXBlID0gJ3NjYXR0ZXInLA0KICAgIG1vZGUgPSAnbGluZXMnLA0KICAgIG5hbWUgPSAiRGVuZ2FuIE91dGxpZXJzIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjgpJywgd2lkdGggPSAyKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGRlbnNpdHkgcGxvdCB1bnR1ayBkYXRhc2V0IHRhbnBhIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gfmRlbnNpdHlfdGFucGFfb3V0bGllcnMkeCwNCiAgICB5ID0gfmRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSwNCiAgICB0eXBlID0gJ3NjYXR0ZXInLA0KICAgIG1vZGUgPSAnbGluZXMnLA0KICAgIG5hbWUgPSAiVGFucGEgT3V0bGllcnMiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMzgsIDE2NiwgOTEsIDAuOCknLCB3aWR0aCA9IDIpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZ2FyaXMgcmF0YS1yYXRhIHVudHVrIGRhdGFzZXQgZGVuZ2FuIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gYyhtZWRpYW5fZGVuZ2FuX291dGxpZXJzLCBtZWRpYW5fZGVuZ2FuX291dGxpZXJzKSwNCiAgICB5ID0gYygwLCBtYXgoZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9ICJSYXRhLXJhdGEgKERlbmdhbiBPdXRsaWVycykiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuNiknLCBkYXNoID0gJ2Rhc2gnKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIHJhdGEtcmF0YSB1bnR1ayBkYXRhc2V0IHRhbnBhIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gYyhtZWRpYW5fdGFucGFfb3V0bGllcnMsIG1lZGlhbl90YW5wYV9vdXRsaWVycyksDQogICAgeSA9IGMoMCwgbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9ICJSYXRhLXJhdGEgKFRhbnBhIE91dGxpZXJzKSIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC42KScsIGRhc2ggPSAnZGFzaCcpDQogICkgJT4lDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJQZW5nYXJ1aCBPdXRsaWVycyB0ZXJoYWRhcCBNZWFuIHBhZGEgRGVuc2l0eSBQbG90IiwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiTmlsYWkiKSwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiS2VwYWRhdGFuIiksDQogICAgYW5ub3RhdGlvbnMgPSBsaXN0KA0KICAgICAgIyBBbm90YXNpIHVudHVrIHJhdGEtcmF0YSBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1lZGlhbl9kZW5nYW5fb3V0bGllcnMsDQogICAgICAgIHkgPSBtYXgoZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSkgKiAwLjksDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVhbjoiLCByb3VuZChtZWRpYW5fZGVuZ2FuX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDIsDQogICAgICAgIGF4ID0gMCwNCiAgICAgICAgYXkgPSAtMzAsICAjIFBvc2lzaSB0ZWtzIHNlZGlraXQgbGViaWggdGluZ2dpIGRhcmkgZ2FyaXMNCiAgICAgICAgZm9udCA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC44KScsIHNpemUgPSAxMikNCiAgICAgICksDQogICAgICAjIEFub3Rhc2kgdW50dWsgcmF0YS1yYXRhIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSBtZWRpYW5fdGFucGFfb3V0bGllcnMsDQogICAgICAgIHkgPSBtYXgoZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5KSAqIDAuOSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWFuOiIsIHJvdW5kKG1lZGlhbl90YW5wYV9vdXRsaWVycywgMikpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2hlYWQgPSAyLA0KICAgICAgICBheCA9IDAsDQogICAgICAgIGF5ID0gLTQ1LCAgIyBQb3Npc2kgdGVrcyBzZWRpa2l0IGxlYmloIHRpbmdnaSBkYXJpIGdhcmlzDQogICAgICAgIGZvbnQgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMzgsIDE2NiwgOTEsIDAuOCknLCBzaXplID0gMTIpDQogICAgICApDQogICAgKQ0KICApDQoNCiMgTWVuYW1waWxrYW4gcGxvdA0KcGxvdA0KYGBgDQoNCiMjIEMuIE1vZHVzIChOaWxhaSB5YW5nIHNlcmluZyBtdW5jdWwpDQoNCk1vZHVzIGRhdGEga2Vsb21wb2sgYWRhbGFoIG5pbGFpIHlhbmcgcGFsaW5nIHNlcmluZyBtdW5jdWwsIHRhcGkga2FyZW5hIGRhdGFueWEgc3VkYWggZGlrZWxvbXBva2thbiBkYWxhbSBpbnRlcnZhbCwga2l0YSBuZ2dhayBiaXNhIGxhbmdzdW5nIGxpaGF0IGFuZ2thbnlhLiBKYWRpLCB1bnR1ayBtZW5jYXJpIG1vZHVzLCBraXRhIHBha2FpIHJ1bXVzIGtodXN1cy4gSW50aW55YSwga2l0YSBjYXJpIGtlbGFzIHlhbmcgZnJla3VlbnNpbnlhIHBhbGluZyB0aW5nZ2kgZGFyaSBrZWxhcywgbGFsdSBoaXR1bmcgcGFrYWkgcnVtdXMgdW50dWsgbWVtcGVya2lyYWthbiBuaWxhaSB0ZXBhdG55YS4NCg0KKipCZXJpa3V0IG1lcnVwYWthbiBsYW5na2FoLWxhbmdrYWggbWVuZ2hpdHVuZyBtb2R1cyB1bnR1ayBkYXRhIGtlbG9tcG9rIDoqKg0KDQoqKjEuIElkZW50aWZpa2FzaSBLZWxhcyBNb2R1cyoqDQoNCk1lbmNhcmkga2VsYXMgeWFuZyBmcmVrdWVuc2lueWEgcGFsaW5nIGJlc2FyIGRhcmkgaW50ZXJ2YWwga2VsYXMuIA0KDQpDb250b2ggOg0KDQoqKi0gRGF0YSBEZW5nYW4gT3V0bGllcnMqKg0KDQp8IE5vIHwgSW50ZXJ2YWwgS2VsYXMgfCBGcmVrdWVuc2kgXCgoZilcKXwgDQp8Oi0tOnw6LS0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLS0tOnwNCnwgMSAgfCAwIC0gMTAgICAgICAgICB8IDEgICAgICAgICAgICAgICAgfA0KfCAyICB8IDExIC0gMjAgICAgICAgIHwgMCAgICAgICAgICAgICAgICB8DQp8IDMgIHwgMjEgLSAzMCAgICAgICAgfCA1ICAgICAgICAgICAgICAgIHwNCnwgNCAgfCAzMSAtIDQwICAgICAgICB8IDQgICAgICAgICAgICAgICAgfA0KfCA1ICB8IDQxIC0gNTAgICAgICAgIHwgMTAgICAgICAgICAgICAgICB8DQp8IDYgIHwgNTEgLSA2MCAgICAgICAgfCA1ICAgICAgICAgICAgICAgIHwNCnwgNyAgfCA2MSAtIDcwICAgICAgICB8IDMgICAgICAgICAgICAgICAgfA0KfCA4ICB8IDcxIC0gODAgICAgICAgIHwgMCAgICAgICAgICAgICAgICB8DQp8IDkgIHwgODEgLSA5MCAgICAgICAgfCAwICAgICAgICAgICAgICAgIHwNCnwgMTAgfCA5MSAtIDEwMCAgICAgICB8IDAgICAgICAgICAgICAgICAgfA0KfCAxMSB8IDEwMSAtIDExMCAgICAgIHwgMSAgICAgICAgICAgICAgICB8DQoNCmZyZWt1ZW5zaSBwYWxpbmcgYmFueWFrIDEwIGRpIGtlbGFzIDQxLSA1MA0KDQoqKi1EYXRhIFRhbnBhIE91dGxpZXJzKioNCg0KfCBObyB8IEludGVydmFsIEtlbGFzIHwgRnJla3VlbnNpIFwoKGYpXCl8IA0KfDotLTp8Oi0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tLTp8DQp8IDEgIHwgMTEgLSAyMCAgICAgICAgfCAxICAgICAgICAgICAgICAgIHwNCnwgMiAgfCAyMSAtIDMwICAgICAgICB8IDUgICAgICAgICAgICAgICAgfA0KfCAzICB8IDMxIC0gNDAgICAgICAgIHwgNCAgICAgICAgICAgICAgICB8DQp8IDQgIHwgNDEgLSA1MCAgICAgICAgfCAxMCAgICAgICAgICAgICAgIHwNCnwgNSAgfCA1MSAtIDYwICAgICAgICB8IDUgICAgICAgICAgICAgICAgfA0KfCA2ICB8IDYxIC0gNzAgICAgICAgIHwgMyAgICAgICAgICAgICAgICB8DQp8IDcgIHwgNzEgLSA4MCAgICAgICAgfCAxICAgICAgICAgICAgICAgIHwNCg0KZnJla3VlbnNpIHBhbGluZyBiYW55YWsgMTAgZGkga2VsYXMgNDEtIDUwDQoNCioqMi4gTWVuY2FyaSBMIChUZXBpIGJhd2FoIGtlbGFzIG1vZHVzKSoqDQoNCkppa2EgRGF0YSBEaXNrcml0IDoNCiQkDQpcdGV4dHtUZXBpIEJhd2FofSA9IFx0ZXh0e0JhdGFzIEJhd2FoIEtlbGFzfSAtIDAsNQ0KJCQNCg0KfCBObyB8IEludGVydmFsIEtlbGFzIHwgRnJla3VlbnNpIFwoKGYpXCl8IA0KfDotLTp8Oi0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tLTp8DQp8IDEgIHwgMTAgLSAxOSAgICAgICAgfCBhICAgICAgICAgICAgICAgIHwNCnwgMiAgfCAyMCAtIDI5ICAgICAgICB8IGIgICAgICAgICAgICAgICAgfA0KDQpKaWthIGRhdGEgS29udGludSA6DQokJA0KXHRleHR7VGVwaSBCYXdhaCBLZWxhc30gPSBcdGV4dHtCYXRhcyBCYXdhaH0NCiQkDQoNCnwgTm8gfCBJbnRlcnZhbCBLZWxhcyB8IEZyZWt1ZW5zaSBcKChmKVwpfCANCnw6LS06fDotLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tLS06fA0KfCAxICB8IDEwIC0gMjAgICAgICAgIHwgYSAgICAgICAgICAgICAgICB8DQp8IDIgIHwgMjAgLSAzMCAgICAgICAgfCBiICAgICAgICAgICAgICAgIHwNCg0KQ29udG9oIDoNCg0KZGFyaSB0YWJlbCBkaWF0YXMgbWVydXBha2FuIERhdGEgRGlza3JpdCA6DQokJA0KXGJlZ2lue3NwbGl0fQ0KXHRleHR7VGVwaSBCYXdhaH0gJj0gXHRleHR7QmF0YXMgQmF3YWggS2VsYXN9IC0gMCw1IFxcDQogICAgICAgICAgICAgICAgICAmPSA0MSAtIDAsNSBcXA0KICAgICAgICAgICAgICAgICAgJj0gNDAsNQ0KXGVuZHtzcGxpdH0NCiQkDQoNCioqMy4gQ2FyaSBcKGRfMVwpIGRhbiBcKGRfMlwpKioNCg0KJCQNClxiZWdpbntzcGxpdH0NCmRfMSA9IFx0ZXh0e0ZyZWt1ZW5zaSBLZWxhcyBNb2R1c30gLSBcdGV4dHtGcmVrdWVuc2kgS2VsYXMgU2ViZWx1bW55YX0gXFwNCmRfMiA9IFx0ZXh0e0ZyZWt1ZW5zaSBLZWxhcyBNb2R1c30gLSBcdGV4dHtGcmVrdWVuc2kgS2VsYXMgU2V0ZWxhaG55YX0NClxlbmR7c3BsaXR9DQokJA0KDQpDb250b2ggOg0KDQokJA0KXGJlZ2lue3NwbGl0fQ0KZF8xICY9IFx0ZXh0e0ZyZWt1ZW5zaSBLZWxhcyBNb2R1c30gLSBcdGV4dHtGcmVrdWVuc2kgS2VsYXMgU2ViZWx1bW55YX0gXFwNCiAgICAmPSAxMCAtIDQgXFwNCiAgICAmPSA2IFxcDQpkXzIgJj0gXHRleHR7RnJla3VlbnNpIEtlbGFzIE1vZHVzfSAtIFx0ZXh0e0ZyZWt1ZW5zaSBLZWxhcyBTZXRlbGFobnlhfSBcXA0KICAgICY9IDEwIC0gNSBcXA0KICAgICY9IDUNClxlbmR7c3BsaXR9DQokJA0KDQoqKjQuIFRlbnR1a2FuIFBhbmphbmcgS2VsYXMqKg0KDQpEaWhpdHVuZyBkZW5nYW4gY2FyYSBtZW5nYW1iaWwgc2VsaXNpaCBhbnRhcmEgYmF0YXMgYmF3YWggZHVhIGtlbGFzIHlhbmcgYmVydXJ1dGFuLiBKYWRpLCBsaWhhdCBiYXRhcyBiYXdhaCBrZWxhcyBzYXR1IGRhbiBiYXRhcyBiYXdhaCBrZWxhcyBiZXJpa3V0bnlhLCBsYWx1IG1lbmdoaXR1bmcgc2VsaXNpaG55YS4NCg0KJCQNClx0ZXh0e1BhbmphbmcgS2VsYXN9ID0gXHRleHR7QmF0YXMgQmF3YWggS2VsYXMgMn0gLSBcdGV4dHtCYXRhcyBCYXdhaCBLZWxhcyAxfQ0KJCQNCg0KQ29udG9oIDogDQokJA0KXHRleHR7UGFuamFuZyBLZWxhc30gPSAyMSAtIDExID0gMTANCiQkDQoNCioqNS4gTWVuZ2hpdHVuZyBNb2R1cyoqDQoNClJ1bXVzIDoNCiQkDQpNID0gTCArIChcZnJhY3tkXzF9e2RfMSArIGRfMn0pIFxjZG90IHANCiQkDQoNCi0gXChNXCkgPSBtb2R1cw0KLSBcKExcKSA9IGJhdGFzIGJhd2FoIGtlbGFzIG1vZHVzDQotIFwoZF8xXCkgPSBzZWxpc2loIGFudGFyYSBmcmVrdWVuc2kga2VsYXMgbW9kdXMgZGFuIGZyZWt1ZW5zaSBrZWxhcyBzZWJlbHVtbnlhDQotIFwoZF8yXCkgPSBzZWxpc2loIGFudGFyYSBmcmVrdWVuc2kga2VsYXMgbW9kdXMgZGFuIGZyZWt1ZW5zaSBrZWxhcyBzZXRlbGFobnlhDQotIFwocFwpID0gcGFuamFuZyBrZWxhcyAobGViYXIga2VsYXMpDQoNCkNvbnRvaCA6DQoNCiQkDQpcYmVnaW57c3BsaXR9DQpNICY9IEwgKyAoXGZyYWN7ZF8xfXtkXzEgKyBkXzJ9KSBcY2RvdCBwDQogICY9IDQxICsgKFxmcmFjezZ9ezYgKyA1fSkgXGNkb3QgMTAgXFwNCiAgJj0gNDEgKyAoMCw1NCkgXGNkb3QgMTAgXFwNCiAgJj0gNDEgKyA1LDQgXFwNCiAgJj0gNDYsNA0KXGVuZHtzcGxpdH0NCiQkDQoNCiMjIyBWaXN1YWxpc2FzaSBNZWRpYW4gRGF0YSBLZWxvbXBvaw0KDQpWaXN1YWxpc2FzaSBtZW5nZ3VuYWthbiBCb3hwbG90DQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgSW5zdGFsbCBkYW4gbG9hZCBsaWJyYXJ5DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBGdW5nc2kgdW50dWsgbWVuZ2hpdHVuZyBtb2R1cw0KaGl0dW5nX21vZHVzIDwtIGZ1bmN0aW9uKHgpIHsNCiAgIyBIaXR1bmcgZnJla3VlbnNpIHNldGlhcCBlbGVtZW4NCiAgZnJla3VlbnNpIDwtIHRhYmxlKHgpDQogICMgQW1iaWwgZWxlbWVuIGRlbmdhbiBmcmVrdWVuc2kgbWFrc2ltdW0NCiAgbW9kdXMgPC0gbmFtZXMoZnJla3VlbnNpW2ZyZWt1ZW5zaSA9PSBtYXgoZnJla3VlbnNpKV0pDQogIA0KICAjIEtlbWJhbGlrYW4gaGFzaWwgc2ViYWdhaSBhbmdrYSBhdGF1IHN0cmluZyB0ZXJnYW50dW5nIHRpcGUgZGF0YQ0KICBpZiAoaXMubnVtZXJpYyh4KSkgew0KICAgIHJldHVybihhcy5udW1lcmljKG1vZHVzKSkNCiAgfSBlbHNlIHsNCiAgICByZXR1cm4obW9kdXMpDQogIH0NCn0NCg0KIyBEYXRhIGtlbG9tcG9rIERlbmdhbiBPdXRsaWVycw0KZGF0YV8xIDwtIGMoNSwgcmVwKDI1LjUsIDUpLCByZXAoMzUuNSwgNCksIHJlcCg0NS41LCAxMCksIHJlcCg1NS41LCA1KSwgcmVwKDY1LjUsIDMpLCAxMDUuNSkNCg0KIyBEYXRhIGtlbG9tcG9rIFRhbnBhIE91dGxpZXJzDQpkYXRhXzIgPC0gYygxNS41LCByZXAoMjUuNSwgNSksIHJlcCgzNS41LCA0KSwgcmVwKDQ1LjUsIDEwKSwgcmVwKDU1LjUsIDUpLCByZXAoNjUuNSwgMyksIDc1LjUpDQoNCiMgTWVuZ2hpdHVuZyBtb2R1cyB1bnR1ayBrZWR1YSBkYXRhDQptb2R1c19kYXRhXzEgPC0gaGl0dW5nX21vZHVzKGRhdGFfMSkNCm1vZHVzX2RhdGFfMiA8LSBoaXR1bmdfbW9kdXMoZGF0YV8yKQ0KDQpkYXRhIDwtIGRhdGEuZnJhbWUoDQogIE5pbGFpID0gYyhkYXRhXzEsIGRhdGFfMiksDQogIEtlbG9tcG9rID0gcmVwKGMoIkRlbmdhbiBPdXRsaWVycyIsICJUYW5wYSBPdXRsaWVycyIpLCANCiAgICAgICAgICAgICAgICAgdGltZXMgPSBjKGxlbmd0aChkYXRhXzEpLCBsZW5ndGgoZGF0YV8yKSkpDQogICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICAgDQojIE1lbWJ1YXQgYm94cGxvdCBtZW5nZ3VuYWthbiBQbG90bHkgZGl0YW1waWxrYW4NCnBsb3QgPC0gcGxvdF9seSgNCiAgZGF0YSwgDQogIHkgPSB+TmlsYWksIA0KICBjb2xvciA9IH5LZWxvbXBvaywNCiAgY29sb3JzID0gYygib3JjaGlkIiwgInNreWJsdWUiKSwNCiAgdHlwZSA9ICJib3giLCANCiAgYm94cG9pbnRzID0gIm91dGxpZXJzIiAgIyBNZW5hbXBpbGthbiB0aXRpayBvdXRsaWVycw0KKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIk1vZHVzIERhdGEgS2Vsb21wb2siLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJOaWxhaSIpLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJLZWxvbXBvayIpLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiRGVuZ2FuIE91dGxpZXJzIiwNCiAgICAgICAgeSA9IG1vZHVzX2RhdGFfMSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNb2R1czoiLCByb3VuZChtb2R1c19kYXRhXzEsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgICApLA0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9ICJUYW5wYSBPdXRsaWVycyIsDQogICAgICAgIHkgPSBtb2R1c19kYXRhXzIsDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTW9kdXM6Iiwgcm91bmQobW9kdXNfZGF0YV8yLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDINCiAgICAgICkNCiAgICApDQogICkNCg0KIyBNZW5hbXBpbGthbiBwbG90DQpwbG90DQpgYGANCiMgUHJha3Rpa3VtIDIgIA0KDQpDYXJpbGFoIGNvbnRvaCBzZWRlcmhhbmEgeWFuZyBtZW5nZ3VuYWthbiB1a3VyYW4gcGVtdXNhdGFuIGRhbGFtIHN0dWRpIGthc3VzDQoNCiMjIENvbnRvaCBzZWRlcmhhbmEgZGFsYW0gdWt1cmFuIHBlbXVzYXRhbiBkYXRhIGtlbG9tcG9rDQoNCiMjIEEuIEJpc25pcw0KDQpBbmFsaXNpcyBEaXN0cmlidXNpIEtpbmVyamEgU2FoYW0gQmVyZGFzYXJrYW4gS2Vsb21wb2sgSW50ZXJ2YWwgSGFyZ2EgcGFkYSBOb3ZlbWJlciAyMDEzLg0KZGVuZ2FuIGRhdGEgc2ViYWdhaSBiZXJpa3V0IDoNCg0KfCBObyB8IEludGVydmFsIEhhcmdhIFNhaGFtIHwgRnJla3VlbnNpIFwoKGYpXCl8IA0KfDotLTp8Oi0tLS0tLS0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tLTp8DQp8IDEgIHwgNzAsMCAtIDg0LDQgICAgICAgICAgfCAzICAgICAgICAgICAgICAgIHwNCnwgMiAgfCA4NCw1IC0gOTEsOSAgICAgICAgICB8IDQgICAgICAgICAgICAgICAgfA0KfCAzICB8IDkyLDAgLSA5OSw0ICAgICAgICAgIHwgNyAgICAgICAgICAgICAgICB8DQp8IDQgIHwgOTksNSAtIDEwNiw5ICAgICAgICAgfCA0ICAgICAgICAgICAgICAgIHwNCnwgNSAgfCAxMDcsMCAtIDExNCw0ICAgICAgICB8IDQgICAgICAgICAgICAgICAgfA0KDQojIyMgTWVhbiAoUmF0YSAtIFJhdGEpDQoNCioqMS4gQ2FyaSBuaWxhaSB0ZW5nYWggdGlhcCBrZWxhcyAqKiAgDQoNCiQkDQpcYmVnaW57c3BsaXR9DQpcdGV4dHtOaWxhaSBUZW5nYWh9ICY9IFxkZnJhY3s3MCwwICsgODQsNH17Mn0gJj0gNzcsMiBcXA0KXHRleHR7TmlsYWkgVGVuZ2FofSAmPSBcZGZyYWN7ODQsNSArIDkxLDl9ezJ9ICY9IDg4LDIgXFwNClx0ZXh0e05pbGFpIFRlbmdhaH0gJj0gXGRmcmFjezkyLDAgKyA5OSw0fXsyfSAmPSA5NSw3IFxcDQpcdGV4dHtOaWxhaSBUZW5nYWh9ICY9IFxkZnJhY3s5OSw1ICsgMTA2LDl9ezJ9ICY9IDEwMywyIFxcDQpcdGV4dHtOaWxhaSBUZW5nYWh9ICY9IFxkZnJhY3sxMDcsMCArIDExNCw0fXsyfSAmPSAxMTAsNyANClxlbmR7c3BsaXR9DQokJA0KDQoqKjIuIEthbGlrYW4gRnJla3VlbnNpIGRlbmdhbiBOaWxhaSBUZW5nYWggKiogDQoNCiQkDQpcYmVnaW57c3BsaXR9DQpmIFxjZG90IHggJj0gMyBcY2RvdCA3NywyICY9IDIzMSw2IFxcDQpmIFxjZG90IHggJj0gNCBcY2RvdCA4OCwyICY9IDM1Miw4IFxcDQpmIFxjZG90IHggJj0gNyBcY2RvdCA5NSw3ICY9IDY2OSw5IFxcDQpmIFxjZG90IHggJj0gNCBcY2RvdCAxMDMsMiAmPSA0MTIsOCBcXA0KZiBcY2RvdCB4ICY9IDQgXGNkb3QgMTEwLDcgJj0gNDQyLDgNClxlbmR7c3BsaXR9DQokJA0KDQoqKjMuIEp1bWxhaGthbiBIYXNpbCBQZXJrYWxpYW4gKiogDQoNCiQkDQpcYmVnaW57c3BsaXR9DQpcc3VtIGYgXGNkb3QgeCAmPSAyMzEsNiArIDM1Miw4ICsgNjY5LDkgKyA0MTIsOCArIDQ0Miw4IFxcDQogICAgICAgICAgICAgICAmPSAyLjEwOSw5DQpcZW5ke3NwbGl0fQ0KJCQNCg0KKio0LiBKdW1sYWhrYW4gRnJla3VlbnNpICoqIA0KDQokJA0KXGJlZ2lue3NwbGl0fQ0KXHN1bSBmJj0gZl8xICsgZl8yICsgZl8zICsgZl80ICsgZl81ICBcXA0KICAgICAgJj0gMyArIDQgKyA3ICsgNCArIDQgIFxcDQogICAgICAmPSAyMg0KXGVuZHtzcGxpdH0NCiQkDQoNCioqNS4gTWVuZ2hpdHVuZyBNZWFuIERhdGEgS2Vsb21wb2sgKioNCg0KJCQNClx0ZXh0e01lYW59ID0gXGZyYWN7Mi4xMDksOX17MjJ9ID0gOTUsOTAgIFxcDQokJA0KDQojIyMgTWVkaWFuIChOaWxhaSBUZW5nYWgpDQoNCioqMS4gTWVuZW50dWthbiBQb3Npc2kgTWVkaWFuKioNCg0KLSBKdW1sYWhrYW4gRnJla3VlbnNpIA0KJCQNClxiZWdpbntzcGxpdH0NClxzdW0gZiY9IGZfMSArIGZfMiArIGZfMyArIGZfNCArIGZfNSAgXFwNCiAgICAgICY9IDMgKyA0ICsgNyArIDQgKyA0ICBcXA0KICAgICAgJj0gMjINClxlbmR7c3BsaXR9DQokJA0KDQotIFRlbnR1a2FuIFBvc2lzaSANCg0KSmlrYSB0b3RhbCBueWEgYmlsYW5nYW4gZ2VuYXAgbWFrYSBndW5ha2FuIHJ1bXVzDQokJA0KXGZyYWN7MjJ9ezJ9ICA9IDExDQokJA0KRGFuDQokJA0KXGZyYWN7MjJ9ezJ9ICsgMSA9IDEyDQokJA0KTWVkaWFuIGRpIHBvc2lzaSBhbnRhcmEgdXJ1dGFuIDExIGRhbiAxMg0KDQoqKjIuIENhcmkgSW50ZXJ2YWwgS2VsYXMgeWFuZyBNZW5nYW5kdW5nIE5pbGFpIE1lZGlhbioqDQoNCi0gSnVtbGFoa2FuIEZyZWt1ZW5zaSBLdW11bGF0aWYNCg0KfCBObyB8IEludGVydmFsIEhhcmdhIFNhaGFtIHwgRnJla3VlbnNpIFwoKGYpXCl8IEZyZWt1ZW5zaSBLdW11bGF0aWYgfA0KfDotLTp8Oi0tLS0tLS0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tLS0tLS06fA0KfCAxICB8IDcwLDAgLSA4NCw0ICAgICAgICAgIHwgMyAgICAgICAgICAgICAgICB8IDMgICAgICAgICAgICAgICAgICAgfA0KfCAyICB8IDg0LDUgLSA5MSw5ICAgICAgICAgIHwgNCAgICAgICAgICAgICAgICB8IDcgICAgICAgICAgICAgICAgICAgfA0KfCAzICB8IDkyLDAgLSA5OSw0ICAgICAgICAgIHwgNyAgICAgICAgICAgICAgICB8IDE0ICAgICAgICAgICAgICAgICAgfA0KfCA0ICB8IDk5LDUgLSAxMDYsOSAgICAgICAgIHwgNCAgICAgICAgICAgICAgICB8IDE4ICAgICAgICAgICAgICAgICAgfA0KfCA1ICB8IDEwNywwIC0gMTE0LDQgICAgICAgIHwgNCAgICAgICAgICAgICAgICB8IDIyICAgICAgICAgICAgICAgICAgfA0KDQoqKjMuIEhpdHVuZyBNZWRpYW4qKg0KDQokJA0KXGJlZ2lue3NwbGl0fQ0KXHRleHR7TWVkaWFufSAmPSA5MiwwICsgKFxmcmFje1xmcmFjezIyfXsyfSAtN317N30pIFxjZG90ICA3LDQgIFxcDQogICAgICAgICAgICAgICY9IDkyLDAgKyAoMCw1NykgXGNkb3QgNyw0IFxcDQogICAgICAgICAgICAgICY9IDkyLDAgKyA0LDIyIFxcDQogICAgICAgICAgICAgICY9IDk2LDIyDQpcZW5ke3NwbGl0fQ0KJCQNCg0KIyMjIE1vZHVzIChOaWxhaSB5YW5nIHNlcmluZyBtdW5jdWwpDQoNCioqMS4gSWRlbnRpZmlrYXNpIEtlbGFzIE1vZHVzKioNCg0KfCBObyB8IEludGVydmFsIEhhcmdhIFNhaGFtIHwgRnJla3VlbnNpIFwoKGYpXCl8IA0KfDotLTp8Oi0tLS0tLS0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tLTp8DQp8IDEgIHwgNzAsMCAtIDg0LDQgICAgICAgICAgfCAzICAgICAgICAgICAgICAgIHwNCnwgMiAgfCA4NCw1IC0gOTEsOSAgICAgICAgICB8IDQgICAgICAgICAgICAgICAgfA0KfCAzICB8IDkyLDAgLSA5OSw0ICAgICAgICAgIHwgNyAgICAgICAgICAgICAgICB8DQp8IDQgIHwgOTksNSAtIDEwNiw5ICAgICAgICAgfCA0ICAgICAgICAgICAgICAgIHwNCnwgNSAgfCAxMDcsMCAtIDExNCw0ICAgICAgICB8IDQgICAgICAgICAgICAgICAgfA0KDQpGcmVrdWVuc2kgcGFsaW5nIGJhbnlhayB5YWl0dSA3IGRpIGtlbGFzIDkyLDAgLSA5OSw0DQoNCioqMi4gTWVuY2FyaSBMIChUZXBpIGJhd2FoIGtlbGFzIG1vZHVzKSoqDQoNCkppa2EgRGF0YSBEaXNrcml0IDoNCiQkDQpcdGV4dHtUZXBpIEJhd2FofSA9IDkyLDAgLSAwLDUgPSA5MSw1IA0KJCQNCg0KKiozLiBDYXJpIFwoZF8xXCkgZGFuIFwoZF8yXCkqKg0KDQokJA0KXGJlZ2lue3NwbGl0fQ0KZF8xICY9IFx0ZXh0e0ZyZWt1ZW5zaSBLZWxhcyBNb2R1c30gLSBcdGV4dHtGcmVrdWVuc2kgS2VsYXMgU2ViZWx1bW55YX0gXFwNCiAgICAmPSA3IC0gNCBcXA0KICAgICY9IDMgXFwNCmRfMiAmPSBcdGV4dHtGcmVrdWVuc2kgS2VsYXMgTW9kdXN9IC0gXHRleHR7RnJla3VlbnNpIEtlbGFzIFNldGVsYWhueWF9IFxcDQogICAgJj0gNyAtIDQgXFwNCiAgICAmPSAzDQpcZW5ke3NwbGl0fQ0KJCQNCg0KKio0LiBUZW50dWthbiBQYW5qYW5nIEtlbGFzKioNCg0KJCQNClxiZWdpbntzcGxpdH0NClx0ZXh0e1BhbmphbmcgS2VsYXN9ICY9IFx0ZXh0e0JhdGFzIEJhd2FoIEtlbGFzIDJ9IC0gXHRleHR7QmF0YXMgQmF3YWggS2VsYXMgMX0gXFwNCiAgICAgICAgICAgICAgICAgICAgICY9IDkyLDAgLSA4NCw1IFxcDQogICAgICAgICAgICAgICAgICAgICAmPSA3LDUgDQpcZW5ke3NwbGl0fQ0KJCQNCg0KKio1LiBNZW5naGl0dW5nIE1vZHVzKioNCg0KUnVtdXMgOg0KJCQNClxiZWdpbntzcGxpdH0NCk0gJj0gTCArIChcZnJhY3tkXzF9e2RfMSArIGRfMn0pIFxjZG90IHAgXFwNCiAgJj0gOTEsNSArIChcZnJhY3s0fXs0ICsgNH0pIFxjZG90IDcsNSBcXA0KICAmPSA5MSw1ICsgMCw1IFxjZG90IDcsNSBcXA0KICAmPSA5MSw1ICsgMyw3NSBcXA0KICAmPSA5NSwyNQ0KXGVuZHtzcGxpdH0NCiQkDQoNCiMjIEIuIEtlc2VoYXRhbg0KDQpTdHVkaSBLYXN1czogRGlzdHJpYnVzaSBUZWthbmFuIERhcmFoIHBhZGEgS2Vsb21wb2sgVXNpYSBEZXdhc2ENClN0dWRpIGRpbGFrdWthbiBwYWRhIDEwMCBpbmRpdmlkdSBkZXdhc2EgKHVzaWEgMzDigJM1MCB0YWh1bikgdW50dWsgbWVuZ2V0YWh1aSBkaXN0cmlidXNpIHRla2FuYW4gZGFyYWggc2lzdG9saWsuDQoNCkludGVydmFsIEtlbGFzIFRla2FuYW4gRGFyYWggU2lzdG9saWsgKG1tSGcpOg0KRGF0YSB0ZWthbmFuIGRhcmFoIHNpc3RvbGlrIGRpa2Vsb21wb2trYW4ga2UgZGFsYW0gaW50ZXJ2YWwga2VsYXMgZGVuZ2FuIGxlYmFyIGtlbGFzIDEwIG1tSGcuDQoNCnwgSW50ZXJ2YWwgS2VsYXMgKG1tSGcpCXwgRnJla3VlbnNpIChmKQl8DQp8Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS06fA0KfCAxMDDigJMxMDkgICAgICAgICAgICAgICB8IDUJICAgICAgICAgICAgfA0KfCAxMTDigJMxMTkgICAgICAgICAgICAgICB8CTE1ICAgICAgICAgICAgfAkNCnwgMTIw4oCTMTI5CSAgICAgICAgICAgICAgfCAzMCAgICAgICAgICAgIHwJDQp8IDEzMOKAkzEzOSAgICAgICAgICAgICAgIHwJMjUgICAgICAgICAgICB8CQ0KfCAxNDDigJMxNDkgICAgICAgICAgICAgICB8CTIwICAgICAgICAgICAgfAkNCnwgMTUw4oCTMTU5CSAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgIHwJDQoNCiMjIyBNZWFuIChSYXRhIC0gUmF0YSkNCg0KKioxLiBDYXJpIG5pbGFpIHRlbmdhaCB0aWFwIGtlbGFzICoqICANCg0KJCQNClxiZWdpbntzcGxpdH0NClx0ZXh0e05pbGFpIFRlbmdhaH0gJj0gXGRmcmFjezEwMCArIDEwOX17Mn0gJj0gMTA0LDUgXFwNClx0ZXh0e05pbGFpIFRlbmdhaH0gJj0gXGRmcmFjezExMCArIDExOX17Mn0gJj0gMTE0LDUgXFwNClx0ZXh0e05pbGFpIFRlbmdhaH0gJj0gXGRmcmFjezEyMCArIDEyOX17Mn0gJj0gMTI0LDUgXFwNClx0ZXh0e05pbGFpIFRlbmdhaH0gJj0gXGRmcmFjezEzMCArIDEzOX17Mn0gJj0gMTM0LDQgXFwNClx0ZXh0e05pbGFpIFRlbmdhaH0gJj0gXGRmcmFjezE0MCArIDE0OX17Mn0gJj0gMTQ0LDUgXFwNClx0ZXh0e05pbGFpIFRlbmdhaH0gJj0gXGRmcmFjezE1MCArIDE1OX17Mn0gJj0gMTU0LDUNClxlbmR7c3BsaXR9DQokJA0KDQoqKjIuIEthbGlrYW4gRnJla3VlbnNpIGRlbmdhbiBOaWxhaSBUZW5nYWggKiogDQoNCiQkDQpcYmVnaW57c3BsaXR9DQpmIFxjZG90IHggJj0gNSBcY2RvdCAxMDQsNSAmPSA1MjIsNSBcXA0KZiBcY2RvdCB4ICY9IDE1IFxjZG90IDExNCw1ICY9IDEuNzE3LDUgXFwNCmYgXGNkb3QgeCAmPSAzMCBcY2RvdCAxMjQsNSAmPSAzLjczNSBcXA0KZiBcY2RvdCB4ICY9IDI1IFxjZG90IDEzNCw1ICY9IDMuMzYyLDUgXFwNCmYgXGNkb3QgeCAmPSAyMCBcY2RvdCAxNDQsNSAmPSAyLjg5MCBcXA0KZiBcY2RvdCB4ICY9IDUgXGNkb3QgMTU0LDUgJj0gNzcyLDUNClxlbmR7c3BsaXR9DQokJA0KDQoqKjMuIEp1bWxhaGthbiBIYXNpbCBQZXJrYWxpYW4gKiogDQoNCiQkDQpcYmVnaW57c3BsaXR9DQpcc3VtIGYgXGNkb3QgeCAmPSA1MjIsNSArIDEuNzE3LDUgKyAzLjczNSArIDMuMzYyLDUgKyAyLjg5MCArICA3NzIsNSBcXA0KICAgICAgICAgICAgICAgJj0gMTMuMDAwDQpcZW5ke3NwbGl0fQ0KJCQNCg0KKio0LiBKdW1sYWhrYW4gRnJla3VlbnNpICoqIA0KDQokJA0KXGJlZ2lue3NwbGl0fQ0KXHN1bSBmJj0gZl8xICsgZl8yICsgZl8zICsgZl80ICsgZl81ICsgZl82IFxcDQogICAgICAmPSA1ICsgMTUgKyAzMCArIDI1ICsgMjAgKyA1ICBcXA0KICAgICAgJj0gMTAwDQpcZW5ke3NwbGl0fQ0KJCQNCg0KKio1LiBNZW5naGl0dW5nIE1lYW4gRGF0YSBLZWxvbXBvayAqKg0KDQokJA0KXHRleHR7TWVhbn0gPSBcZnJhY3sxMy4wMDB9ezEwMH0gPSAxMzAgIFxcDQokJA0KDQojIyMgTWVkaWFuIChOaWxhaSBUZW5nYWgpDQoNCioqMS4gTWVuZW50dWthbiBQb3Npc2kgTWVkaWFuKioNCg0KLSBKdW1sYWhrYW4gRnJla3VlbnNpIA0KJCQNClxiZWdpbntzcGxpdH0NClxzdW0gZiY9IGZfMSArIGZfMiArIGZfMyArIGZfNCArIGZfNSArIGZfNiAgXFwNCiAgICAgICY9IDUgKyAxNSArIDMwICsgMjUgKyAyMCArIDUgIFxcDQogICAgICAmPSAxMDANClxlbmR7c3BsaXR9DQokJA0KDQotIFRlbnR1a2FuIFBvc2lzaSANCg0KSmlrYSB0b3RhbCBueWEgYmlsYW5nYW4gZ2VuYXAgbWFrYSBndW5ha2FuIHJ1bXVzDQokJA0KXGZyYWN7MTAwfXsyfSAgPSA1MA0KJCQNCkRhbg0KJCQNClxmcmFjezEwMH17Mn0gKyAxID0gNTENCiQkDQpNZWRpYW4gZGkgcG9zaXNpIGFudGFyYSB1cnV0YW4gNTAgZGFuIDUxDQoNCioqMi4gQ2FyaSBJbnRlcnZhbCBLZWxhcyB5YW5nIE1lbmdhbmR1bmcgTmlsYWkgTWVkaWFuKioNCg0KLSBKdW1sYWhrYW4gRnJla3VlbnNpIEt1bXVsYXRpZg0KDQp8IEludGVydmFsIEtlbGFzIChtbUhnKQl8IEZyZWt1ZW5zaSAoZikJfCBGcmVrdWVuc2kgS3VtdWxhdGlmIHwNCnw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tLS0tLS06fA0KfCAxMDDigJMxMDkgICAgICAgICAgICAgICB8IDUJICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICAgIHwNCnwgMTEw4oCTMTE5ICAgICAgICAgICAgICAgfAkxNSAgICAgICAgICAgIHwJMjAgICAgICAgICAgICAgICAgICB8DQp8IDEyMOKAkzEyOQkgICAgICAgICAgICAgIHwgMzAgICAgICAgICAgICB8CTUwICAgICAgICAgICAgICAgICAgfA0KfCAxMzDigJMxMzkgICAgICAgICAgICAgICB8CTI1ICAgICAgICAgICAgfAk3NSAgICAgICAgICAgICAgICAgIHwNCnwgMTQw4oCTMTQ5ICAgICAgICAgICAgICAgfAkyMCAgICAgICAgICAgIHwJOTUgICAgICAgICAgICAgICAgICB8DQp8IDE1MOKAkzE1OQkgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICB8IDEwMCAgICAgICAgICAgICAgICAgfA0KDQoqKjMuIEhpdHVuZyBNZWRpYW4qKg0KDQokJA0KXGJlZ2lue3NwbGl0fQ0KXHRleHR7TWVkaWFufSAmPSAxMjAgKyAoXGZyYWN7XGZyYWN7MTAwfXsyfSAtMjB9ezMwfSkgXGNkb3QgIDEwICBcXA0KICAgICAgICAgICAgICAmPSAxMjAgKyAoMSkgXGNkb3QgMTAgXFwNCiAgICAgICAgICAgICAgJj0gMTIwICsgMTAgXFwNCiAgICAgICAgICAgICAgJj0gMTMwDQpcZW5ke3NwbGl0fQ0KJCQNCg0KIyMjIE1vZHVzIChOaWxhaSB5YW5nIHNlcmluZyBtdW5jdWwpDQoNCioqMS4gSWRlbnRpZmlrYXNpIEtlbGFzIE1vZHVzKioNCg0KfCBJbnRlcnZhbCBLZWxhcyAobW1IZykJfCBGcmVrdWVuc2kgKGYpCXwNCnw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLTp8DQp8IDEwMOKAkzEwOSAgICAgICAgICAgICAgIHwgNQkgICAgICAgICAgICB8DQp8IDExMOKAkzExOSAgICAgICAgICAgICAgIHwJMTUgICAgICAgICAgICB8CQ0KfCAxMjDigJMxMjkJICAgICAgICAgICAgICB8IDMwICAgICAgICAgICAgfAkNCnwgMTMw4oCTMTM5ICAgICAgICAgICAgICAgfAkyNSAgICAgICAgICAgIHwJDQp8IDE0MOKAkzE0OSAgICAgICAgICAgICAgIHwJMjAgICAgICAgICAgICB8CQ0KfCAxNTDigJMxNTkJICAgICAgICAgICAgICB8IDUgICAgICAgICAgICAgfAkNCg0KRnJla3VlbnNpIHBhbGluZyBiYW55YWsgeWFpdHUgMzAgZGkga2VsYXMgMTIwIC0gMTI5DQoNCioqMi4gTWVuY2FyaSBMIChUZXBpIGJhd2FoIGtlbGFzIG1vZHVzKSoqDQoNCkppa2EgRGF0YSBEaXNrcml0IDoNCiQkDQpcdGV4dHtUZXBpIEJhd2FofSA9IDEyMCAtIDAsNSA9IDExOSw1IA0KJCQNCg0KKiozLiBDYXJpIFwoZF8xXCkgZGFuIFwoZF8yXCkqKg0KDQokJA0KXGJlZ2lue3NwbGl0fQ0KZF8xICY9IFx0ZXh0e0ZyZWt1ZW5zaSBLZWxhcyBNb2R1c30gLSBcdGV4dHtGcmVrdWVuc2kgS2VsYXMgU2ViZWx1bW55YX0gXFwNCiAgICAmPSAzMCAtIDE1IFxcDQogICAgJj0gMTUgXFwNCmRfMiAmPSBcdGV4dHtGcmVrdWVuc2kgS2VsYXMgTW9kdXN9IC0gXHRleHR7RnJla3VlbnNpIEtlbGFzIFNldGVsYWhueWF9IFxcDQogICAgJj0gMzAgLSAyNSBcXA0KICAgICY9IDUNClxlbmR7c3BsaXR9DQokJA0KDQoqKjQuIFRlbnR1a2FuIFBhbmphbmcgS2VsYXMqKg0KDQokJA0KXGJlZ2lue3NwbGl0fQ0KXHRleHR7UGFuamFuZyBLZWxhc30gJj0gXHRleHR7QmF0YXMgQmF3YWggS2VsYXMgMn0gLSBcdGV4dHtCYXRhcyBCYXdhaCBLZWxhcyAxfSBcXA0KICAgICAgICAgICAgICAgICAgICAgJj0gMTEwIC0gMTAwIFxcDQogICAgICAgICAgICAgICAgICAgICAmPSAxMCANClxlbmR7c3BsaXR9DQokJA0KDQoqKjUuIE1lbmdoaXR1bmcgTW9kdXMqKg0KDQpSdW11cyA6DQokJA0KXGJlZ2lue3NwbGl0fQ0KTSAmPSBMICsgKFxmcmFje2RfMX17ZF8xICsgZF8yfSkgXGNkb3QgcCBcXA0KICAmPSAxMjAgKyAoXGZyYWN7MTV9ezE1ICsgNX0pIFxjZG90IDEwIFxcDQogICY9IDEyMCArICgwLDc1KSBcY2RvdCAxMCBcXA0KICAmPSAxMjAgKyA3LDUgXFwNCiAgJj0gMTI3LDUNClxlbmR7c3BsaXR9DQokJA0KDQojIyBDLiBQZW5kaWRpa2FuDQoNClN0dWRpIEthc3VzOiBEaXN0cmlidXNpIE5pbGFpIFVqaWFuIA0KDQpEYXRhIGRhcmkgbmlsYWkgdWppYW4gVGVuZ2FoIFNlbWVzdGVyIDEgTWF0YSBLdWxpYWggS2Fsa3VsdXMgUHJvZ3JhbSBTdHVkaSBTYWlucyBEYXRhDQoNCnwgTm8gfCBJbnRlcnZhbCBLZWxhcyB8IEZyZWt1ZW5zaSBcKChmKVwpfCANCnw6LS06fDotLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tLS06fA0KfCAxICB8IDUxIC0gNjAgICAgICAgIHwgOCAgICAgICAgICAgICAgICB8DQp8IDIgIHwgNjEgLSA3MCAgICAgICAgfCA2ICAgICAgICAgICAgICAgIHwNCnwgMyAgfCA3MSAtIDgwICAgICAgICB8IDQgICAgICAgICAgICAgICAgfA0KfCA0ICB8IDgxIC0gOTAgICAgICAgIHwgMyAgICAgICAgICAgICAgICB8DQp8IDUgIHwgOTEgLSAxMDAgICAgICAgfCAxICAgICAgICAgICAgICAgIHwNCg0KIyMjIE1lYW4gKFJhdGEgLSBSYXRhKQ0KDQoqKjEuIENhcmkgbmlsYWkgdGVuZ2FoIHRpYXAga2VsYXMgKiogIA0KDQokJA0KXGJlZ2lue3NwbGl0fQ0KXHRleHR7TmlsYWkgVGVuZ2FofSAmPSBcZGZyYWN7NTEgKyA2MH17Mn0gJj0gNTUsNSBcXA0KXHRleHR7TmlsYWkgVGVuZ2FofSAmPSBcZGZyYWN7NjEgKyA3MH17Mn0gJj0gNjUsNSBcXA0KXHRleHR7TmlsYWkgVGVuZ2FofSAmPSBcZGZyYWN7NzEgKyA4MH17Mn0gJj0gNzUsNSBcXA0KXHRleHR7TmlsYWkgVGVuZ2FofSAmPSBcZGZyYWN7ODEgKyA5MH17Mn0gJj0gODUsNSBcXA0KXHRleHR7TmlsYWkgVGVuZ2FofSAmPSBcZGZyYWN7OTEgKyAxMDB9ezJ9ICY9IDk1LDUgDQpcZW5ke3NwbGl0fQ0KJCQNCg0KKioyLiBLYWxpa2FuIEZyZWt1ZW5zaSBkZW5nYW4gTmlsYWkgVGVuZ2FoICoqIA0KDQokJA0KXGJlZ2lue3NwbGl0fQ0KZiBcY2RvdCB4ICY9IDggXGNkb3QgNTUsNSAmPSA0NDQgXFwNCmYgXGNkb3QgeCAmPSA2IFxjZG90IDY1LDUgJj0gMzkzIFxcDQpmIFxjZG90IHggJj0gNCBcY2RvdCA3NSw1ICY9IDMwMiBcXA0KZiBcY2RvdCB4ICY9IDMgXGNkb3QgODUsNSAmPSAyNTYsNSBcXA0KZiBcY2RvdCB4ICY9IDEgXGNkb3QgOTUsNSAmPSA5NSw1DQpcZW5ke3NwbGl0fQ0KJCQNCg0KKiozLiBKdW1sYWhrYW4gSGFzaWwgUGVya2FsaWFuICoqIA0KDQokJA0KXGJlZ2lue3NwbGl0fQ0KXHN1bSBmIFxjZG90IHggJj0gNDQ0ICsgMzkzICsgMzAyICsgMjU2LDUgKyA5NSw1IFxcDQogICAgICAgICAgICAgICAmPSAxLjQ5MQ0KXGVuZHtzcGxpdH0NCiQkDQoNCioqNC4gSnVtbGFoa2FuIEZyZWt1ZW5zaSAqKiANCg0KJCQNClxiZWdpbntzcGxpdH0NClxzdW0gZiY9IGZfMSArIGZfMiArIGZfMyArIGZfNCArIGZfNSAgXFwNCiAgICAgICY9IDggKyA2ICsgNCArIDMgKyAxICBcXA0KICAgICAgJj0gMjINClxlbmR7c3BsaXR9DQokJA0KDQoqKjUuIE1lbmdoaXR1bmcgTWVhbiBEYXRhIEtlbG9tcG9rICoqDQoNCiQkDQpcdGV4dHtNZWFufSA9IFxmcmFjezEuNDkxfXsyMn0gPSA2Nyw3NyAgXFwNCiQkDQoNCiMjIyBNZWRpYW4gKE5pbGFpIFRlbmdhaCkNCg0KKioxLiBNZW5lbnR1a2FuIFBvc2lzaSBNZWRpYW4qKg0KDQotIEp1bWxhaGthbiBGcmVrdWVuc2kgDQokJA0KXGJlZ2lue3NwbGl0fQ0KXHN1bSBmJj0gZl8xICsgZl8yICsgZl8zICsgZl80ICsgZl81ICBcXA0KICAgICAgJj0gOCArIDYgKyA0ICsgMyArIDEgIFxcDQogICAgICAmPSAyMg0KXGVuZHtzcGxpdH0NCiQkDQoNCi0gVGVudHVrYW4gUG9zaXNpIA0KDQpKaWthIHRvdGFsIG55YSBiaWxhbmdhbiBnZW5hcCBtYWthIGd1bmFrYW4gcnVtdXMNCiQkDQpcZnJhY3syMn17Mn0gID0gMTENCiQkDQpEYW4NCiQkDQpcZnJhY3syMn17Mn0gKyAxID0gMTINCiQkDQpNZWRpYW4gZGkgcG9zaXNpIGFudGFyYSB1cnV0YW4gMTEgZGFuIDEyDQoNCioqMi4gQ2FyaSBJbnRlcnZhbCBLZWxhcyB5YW5nIE1lbmdhbmR1bmcgTmlsYWkgTWVkaWFuKioNCg0KLSBKdW1sYWhrYW4gRnJla3VlbnNpIEt1bXVsYXRpZg0KDQp8IE5vIHwgSW50ZXJ2YWwgS2VsYXMgfCBGcmVrdWVuc2kgXCgoZilcKXwgRnJla3VlbnNpIEt1bXVsYXRpZiB8DQp8Oi0tOnw6LS0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tLS0tLTp8DQp8IDEgIHwgNTEgLSA2MCAgICAgICAgfCA4ICAgICAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgICAgICB8DQp8IDIgIHwgNjEgLSA3MCAgICAgICAgfCA2ICAgICAgICAgICAgICAgIHwgMTQgICAgICAgICAgICAgICAgICB8DQp8IDMgIHwgNzEgLSA4MCAgICAgICAgfCA0ICAgICAgICAgICAgICAgIHwgMTggICAgICAgICAgICAgICAgICB8DQp8IDQgIHwgODEgLSA5MCAgICAgICAgfCAzICAgICAgICAgICAgICAgIHwgMjEgICAgICAgICAgICAgICAgICB8DQp8IDUgIHwgOTEgLSAxMDAgICAgICAgfCAxICAgICAgICAgICAgICAgIHwgMjIgICAgICAgICAgICAgICAgICB8DQoNCioqMy4gSGl0dW5nIE1lZGlhbioqDQoNCiQkDQpcYmVnaW57c3BsaXR9DQpcdGV4dHtNZWRpYW59ICY9IDYxICsgKFxmcmFje1xmcmFjezIyfXsyfSAtOH17Nn0pIFxjZG90ICAxMCAgXFwNCiAgICAgICAgICAgICAgJj0gNjEgKyAoMCw1KSBcY2RvdCAxMCBcXA0KICAgICAgICAgICAgICAmPSA5MiwwICsgNSBcXA0KICAgICAgICAgICAgICAmPSA5Nw0KXGVuZHtzcGxpdH0NCiQkDQoNCiMjIyBNb2R1cyAoTmlsYWkgeWFuZyBzZXJpbmcgbXVuY3VsKQ0KDQoqKjEuIElkZW50aWZpa2FzaSBLZWxhcyBNb2R1cyoqDQoNCnwgTm8gfCBJbnRlcnZhbCBLZWxhcyB8IEZyZWt1ZW5zaSBcKChmKVwpfCANCnw6LS06fDotLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tLS06fA0KfCAxICB8IDUxIC0gNjAgICAgICAgIHwgOCAgICAgICAgICAgICAgICB8DQp8IDIgIHwgNjEgLSA3MCAgICAgICAgfCA2ICAgICAgICAgICAgICAgIHwNCnwgMyAgfCA3MSAtIDgwICAgICAgICB8IDQgICAgICAgICAgICAgICAgfA0KfCA0ICB8IDgxIC0gOTAgICAgICAgIHwgMyAgICAgICAgICAgICAgICB8DQp8IDUgIHwgOTEgLSAxMDAgICAgICAgfCAxICAgICAgICAgICAgICAgIHwNCg0KDQpGcmVrdWVuc2kgcGFsaW5nIGJhbnlhayB5YWl0dSA4IGRpIGtlbGFzIDUxIC0gNjANCg0KKioyLiBNZW5jYXJpIEwgKFRlcGkgYmF3YWgga2VsYXMgbW9kdXMpKioNCg0KRGF0YSBLb250aW51DQokJA0KXGJlZ2lue3NwbGl0fQ0KXHRleHR7VGVwaSBCYXdhaCBLZWxhc30gJj0gXHRleHR7QmF0YXMgQmF3YWh9IFxcDQogICAgICAgICAgICAgICAgICAgICAgICAmPSA1MQ0KXGVuZHtzcGxpdH0NCiQkDQoNCioqMy4gQ2FyaSBcKGRfMVwpIGRhbiBcKGRfMlwpKioNCg0KJCQNClxiZWdpbntzcGxpdH0NCmRfMSAmPSBcdGV4dHtGcmVrdWVuc2kgS2VsYXMgTW9kdXN9IC0gXHRleHR7RnJla3VlbnNpIEtlbGFzIFNlYmVsdW1ueWF9IFxcDQogICAgJj0gOCAtIDAgXFwNCiAgICAmPSA4IFxcDQpkXzIgJj0gXHRleHR7RnJla3VlbnNpIEtlbGFzIE1vZHVzfSAtIFx0ZXh0e0ZyZWt1ZW5zaSBLZWxhcyBTZXRlbGFobnlhfSBcXA0KICAgICY9IDggLSA2IFxcDQogICAgJj0gMg0KXGVuZHtzcGxpdH0NCiQkDQoNCioqNC4gVGVudHVrYW4gUGFuamFuZyBLZWxhcyoqDQoNCiQkDQpcYmVnaW57c3BsaXR9DQpcdGV4dHtQYW5qYW5nIEtlbGFzfSAmPSBcdGV4dHtCYXRhcyBCYXdhaCBLZWxhcyAyfSAtIFx0ZXh0e0JhdGFzIEJhd2FoIEtlbGFzIDF9IFxcDQogICAgICAgICAgICAgICAgICAgICAmPSA2MSAtIDUxIFxcDQogICAgICAgICAgICAgICAgICAgICAmPSAxMCANClxlbmR7c3BsaXR9DQokJA0KDQoqKjUuIE1lbmdoaXR1bmcgTW9kdXMqKg0KDQpSdW11cyA6DQokJA0KXGJlZ2lue3NwbGl0fQ0KTSAmPSBMICsgKFxmcmFje2RfMX17ZF8xICsgZF8yfSkgXGNkb3QgcCBcXA0KICAmPSA1MSArIChcZnJhY3s4fXs4ICsgMn0pIFxjZG90IDEwIFxcDQogICY9IDUxICsgMCw4IFxjZG90IDEwIFxcDQogICY9IDUxICsgOCBcXA0KICAmPSA1OQ0KXGVuZHtzcGxpdH0NCiQkDQoNCiMgUkVGRVJFTlNJDQotIEJpbnVzIFVuaXZlcnNpdHkuICgyMDIyLCBBcHJpbCkuIFVrdXJhbiBwZW11c2F0YW4gZGF0YS4gRGlha3NlcyBwYWRhIDE5IE5vdmVtYmVyIDIwMjQsIGRhcmkgPGEgaHJlZiA9ICIgaHR0cHM6Ly9iaW51cy5hYy5pZC9tYWxhbmcvMjAyMi8wNC91a3VyYW4tcGVtdXNhdGFuLWRhdGEvIzp+DQo9VWt1cmFuJTIwcGVtdXNhdGFuJTIwZGF0YSUyMHlhaXR1JTIwc3VhdHUsTWVhbiUyMChyYXRhJTJEcmF0YSUyMGhpdHVuZykiPktsaWsgRGlzaW5pPC9hPi4NCg0KLSBLb21wYXMuY29tLiAoMjAyMCwgT2t0b2JlciAxNSkuIFVrdXJhbiBwZW11c2F0YW4gZGFuIHBlbnllYmFyYW4gZGF0YSBiZXJrZWxvbXBvay4gRGlha3NlcyBwYWRhIDE5IE5vdmVtYmVyIDIwMjQsIGRhcmkgPGEgaHJlZiA9ICJodHRwczovL3d3dy5rb21wYXMuY29tL3Nrb2xhL3JlYWQvMjAyMC8xMC8xNS8xNzUxNTQ2NjkvdWt1cmFuLXBlbXVzYXRhbi1kYW4tcGVueWViYXJhbi1kYXRhLWJlcmtlbG9tcG9rP2xnbl9tZXRob2Q9Z29vZ2xlJmdvb2dsZV9idG49b25ldGFwIj5LbGlrIERpc2luaTwvYT4uDQoNCi0gS2VtZGlrYnVkLiAobi5kLikuIEJhYiAzOiBVa3VyYW4gcGVtdXNhdGFuLiBEaWFrc2VzIHBhZGEgMTkgTm92ZW1iZXIgMjAyNCwgZGFyaTxhIGhyZWYgPSAiaHR0cHM6Ly9sbXNzcGFkYS5rZW1kaWtidWQuZ28uaWQvcGx1Z2luZmlsZS5waHAvNTM4NjMwL21vZF9yZXNvdXJjZS9jb250ZW50LzIvQmFiJTIwMyUyMFVrdXJhbiUyMFBlbXVzYXRhbi5wZGYiPktsaWsgZGlzaW5pPC9hPi4NCg0KLSBEU0NpZW5jZWxhYnMuIChuLmQuKS4gVWt1cmFuIHBlbXVzYXRhbiBkYXRhLiBEaWFrc2VzIHBhZGEgMTkgTm92ZW1iZXIgMjAyNCwgZGFyaSAgPGEgaHJlZiA9ICJodHRwczovL2Jvb2tkb3duLm9yZy9kc2NpZW5jZWxhYnMvc3RhdGlzdGlrYV9kYXNhci9fYm9vay9Va3VyYW5fUGVtdXNhdGFuX0RhdGEuaHRtbCNwcmFrdGlrdW0tMSI+S2xpayBkaXNpbmk8L2E+Lg0KDQotIEthdGFkYXRhLiAoMjAyMywgSmFudWFyeSAxNikuIENhcmEgbWVuZ2hpdHVuZyBtZWFuIGRhdGEga2Vsb21wb2sgc2VydGEgY29udG9oIHNvYWwgZGFuIHBlbWJhaGFzYW5ueWEuLCBkYXJpICA8YSBocmVmID0gImh0dHBzOi8va2F0YWRhdGEuY28uaWQvYmVyaXRhL25hc2lvbmFsLzYzNWEyY2UxOGYzZWUvY2FyYS1tZW5naGl0dW5nLW1lYW4tZGF0YS1rZWxvbXBvay1zZXJ0YS1jb250b2gtc29hbC1kYW4tcGVtYmFoYXNhbm55YSI+S2xpayBkaXNpbmk8L2E+Lg0KDQotIFJlc2VhcmNoR2F0ZS4gKG4uZC4pLiBUQi0xIFN0YXRpc3RpayBLZWxvbXBvayAzOiBTdHVkaSBLYXN1cyBVa3VyYW4gUGVtdXNhdGFuLiBEaWFrc2VzIGRhcmkgPGEgaHJlZiA9ICIuaHR0cHM6Ly93d3cucmVzZWFyY2hnYXRlLm5ldC9wdWJsaWNhdGlvbi8zODQ3MzE4NDhfVEItMV9TVEFUSVNUSUtfS0VMT01QT0tfM19TVFVESV9LQVNVU19VS1VSQU5fUEVNVVNBVEFOIj5LbGlrIGRpc2luaTwvYT4uDQoNCg==