Pemusatan Data

Mean, Median, Modus

Latihan 1

Sebuah perusahaan ingin memahami karakteristik penyebaran data hasil penjualan dari empat cabang (A, B, C, dan D) selama satu bulan terakhir. Data penjualan (dalam juta rupiah) dari keempat cabang tersebut adalah sebagai berikut:

• Cabang A: 50, 55, 60, 65, 70

• Cabang B: 40, 50, 60, 70, 80

• Cabang C: 30, 30, 35, 40, 45

• Cabang D: 70, 75, 80, 85, 90

1. Hitunglah rata-rata, median, dan standar deviasi untuk masing-masing cabang.

Cabang A (50, 55, 60, 65, 70):

  • Mean (x): \[ \bar x = \frac{\sum x}{n}=\frac{50 + 55 + 60 + 65 + 70}{5}=\frac{300}{5}=60 \]

  • Median : Karena data nya ganjil dan sudah terurut, maka nilai mediannya adalah nilai tengah yaitu 60

  • Varians : \[ \bar x = \frac{\sqrt\sum (xi - x)^2}{n} \]

xi: Nilai individu.

x: Rata-rata sampel.

n: Jumlah data dalam sampel.

Hitung varians terlebih dahulu: \[ \bar varians = \frac {\sqrt (50-60)^2 + (55-60)^2 +...+(70-60)^2}{5-1} \]

\[ \bar varians = \frac {\sqrt 100 + 25 + 0 + 25 + 100}{5-1}=\frac {\sqrt 250}{4}=62.5 \]

  • Hitung standar deviasi :

\[ \bar standar deviasi = \sqrt{62.5}=7.91 \]

Cabang B (40, 50, 60, 70 ,80):

  • Mean (x): \[ \bar x = \frac{\sum x}{n}=\frac{40+50+60+70+80}{5}=\frac{300}{5}=60 \]

  • Median : 60

  • Varians : \[ \bar x = \frac{\sqrt\sum (xi - x)^2}{n} \]

xi: Nilai individu.

x: Rata-rata sampel.

n: Jumlah data dalam sampel.

Hitung varians terlebih dahulu: \[ \bar varians = \frac {\sqrt (40-60)^2 + (50-60)^2 +...+(80-60)^2}{5-1} \]

\[ \bar varians = \frac {\sqrt 400 + 100 + 0 + 100 + 400}{5-1}=\frac {\sqrt 100}{4}=250 \]

  • Hitung standar deviasi :

\[ \bar standar deviasi = \sqrt{250}=15.81 \]

Cabang C (30, 30, 35, 40, 45):

  • Mean (x): \[ \bar x = \frac{\sum x}{n}=\frac{30 + 30 + 35 + 40 + 45}{5}=\frac{185}{5}=37 \]

  • Median : 35

  • rumus varians : \[ \bar x = \frac{\sqrt\sum (xi - x)^2}{n} \]

xi: Nilai individu.

x: Rata-rata sampel.

n: Jumlah data dalam sampel.

Hitung varians terlebih dahulu: \[ \bar varians = \frac {\sqrt (30-37)^2 + (30-37)^2 +...+(45-37)^2}{5-1} \]

\[ \bar varians = \frac {\sqrt 49 + 49 + 4 + 64 + 64}{5-1}=\frac {\sqrt 230}{4}=57.5 \]

  • Hitung standar deviasi :

\[ \bar standar deviasi = \sqrt{57.5}=7.58 \]

Cabang D (70, 75, 80, 85, 90):

  • Mean (x): \[ \bar x = \frac{\sum x}{n}=\frac{70 + 75 + 80 + 85 + 90}{5}=\frac{400}{5}=80 \]

  • Median : 80

  • Varians : \[ \bar x = \frac{\sqrt\sum (xi - x)^2}{n} \]

xi: Nilai individu.

x: Rata-rata sampel.

n: Jumlah data dalam sampel.

Hitung varians terlebih dahulu: \[ \bar varians = \frac {\sqrt (70-80)^2 + (75-80)^2 +...+(90-80)^2}{5-1} \]

\[ \bar varians = \frac {\sqrt 100 + 25 + 0 + 25 + 100}{5-1}=\frac {\sqrt 250}{4}=62.5 \]

  • Hitung standar deviasi :

\[ \bar standar deviasi = \sqrt{62.5}=7.91 \]

2. Cabang mana yang memiliki penyebaran data paling kecil? Jelaskan alasannya.

Untuk penyebaran data yang paling kecil kita bisa melihat standar deviasi dari masing masing cabang

Cabang Standar Deviasi (s)
A 7.91
B 15.81
C 7.58
D 7.91

Bisa kita lihat di dalam tabel bahwa cabang c memiliki penyebaran data yang paling kecil jika dilihat dari standara deviasi yaitu 7.58, ini artinya cabang c tidak terlalu tersebar jauh dari rata rata nya.

3. Jika target penjualan minimum adalah 50 juta rupiah, cabang mana saja yang gagal mencapai target di semua datanya?

  • Cabang A (50, 55, 60, 65, 70) : Semua data memenuhi target

  • Cabang B (40, 50, 60, 70 ,80) : Ada satu data yang tidak memenuhi target yaitu 40

  • Cabang C (30, 30, 35, 40, 45) : Semua data tidak memenuhi target

  • Cabang D (70, 75, 80, 85, 90) : semua data memenuhi target

Cabang C adalah satu satu nya cabang yang gagal mencapat target di semua datanya

4. Buatlah diagram kotak (box plot) untuk memvisualisasikan penyebaran data setiap cabang.

5. Jika Anda adalah manajer perusahaan, bagaimana Anda akan menggunakan informasi ini untuk merencanakan strategi peningkatan penjualan?

Kita harus menganalisa dulu apa penyebabnya baru kita lakukan strategi di berbagai cabang

  1. Cabang C:

    • Semua penjualan di cabang c kurang dari target semua, hal ini menunjukkan performa yang sangat buruk di cabang c.

    • Strategi nya adalah kita harus investigasi kenapa penjualannya bisa sangat rendah seperti produk yang tidak laku, lokasi yang kurang strategis, atau kompetitor. jika sudah semua di lakukan dan tidak ada pembaikan sales dari cabang c akan melakukan daya tarik serta promosi kepada masyarakat lokal yang ada disana untuk meningkatkan daya tarik produk.

  2. Cabang B:

    • Disini kita liat bahwa ada satu data di bawah target yaitu 40 dan standar deviasi nya juga sangat tinggi yaitu 15.81 hal ini menunjukkan penyebaran data yang sangat besar.

    • strategi dalam cabang b adalah meningkatkan strategi pemasaran untuk menjaga stabilitas penjualan serta kontrol kualitas produk pada penjualan.

  3. Cabang A dan D

Cabang A dan D menjadi satu karena cabang ini sudah di atas target semua penjualannya dan standar deviasi nya juga sama yaitu 7.91

Strategi: Fokus pada inovasi agar bisa meningkatkan penjualan yang lebih tinggi lagi

Latihan 2

Perusahaan XYZ mengelola pengiriman barang ke berbagai wilayah dengan menggunakan berbaga jenis transportasi Setiap pengiriman melibatkan biaya transportasi, waktu yang dibutuhkan, dan jumlat barang yang dikının Berikut adalah dala terkait pengiriman barang berdasarkan wilayah dan jenis barang

Tabel Data Distribusi Barang
Wilayah Jenis Barang Jumlah (unit) Waktu (jam) Biaya per Unit (Rp)
Utara Elektronik 200 5 15000
Selatan Pakaian 150 8 8000
Timur Makanan 180 6 10000
Barat Peralatan 120 7 12000
Tengah Elektronik 250 4 14000
Utara Pakaian 300 9 8500
Selatan Makanan 220 7 9500
Timur Peralatan 140 5 11000
Barat Elektronik 180 6 14500
Tengah Pakaian 350 8 7800
Utara Peralatan 170 4 12000
Selatan Elektronik 250 6 16000
Timur Pakaian 190 7 8200
Barat Makanan 130 5 10500
Tengah Peralatan 180 5 11500

1 Analisis Efisiensi Pengiriman

Visualisasikan pengiriman barang berdasarkan jumlah barang, waktu pengiriman, dan biaya per unit dengan menggunakan plot 3D

Elektronik

Wilayah dan Data:

Wilayah Utara:

Jumlah barang = 200 unit

Waktu = 5 jam

Biaya per unit = Rp15,000

Wilayah Tengah:

Jumlah barang = 250 unit

Waktu = 4 jam

Biaya per unit = Rp14,000

Wilayah Barat:

Jumlah barang = 180 unit

Waktu = 6 jam

Biaya per unit = Rp12,000

Wilayah Selatan:

Jumlah barang = 250 unit

Waktu = 6 jam

Biaya per unit = Rp16,000

Pakaian

Wilayah dan Data:

Wilayah Utara:

Jumlah barang = 300 unit

Waktu = 9 jam

Biaya per unit = Rp8,500

Wilayah Tengah:

Jumlah barang = 350 unit

Waktu = 8 jam

Biaya per unit = Rp7,800

Wilayah Barat:

Jumlah barang = 190 unit

Waktu = 7 jam

Biaya per unit = Rp8,200

Wilayah Selatan:

Jumlah barang = 150 unit

Waktu = 8 jam

Biaya per unit = Rp8,000

Makanan

Wilayah dan Data:

Wilayah Utara:

Jumlah barang = 180 unit

Waktu = 6 jam

Biaya per unit = Rp10,000

Wilayah Tengah:

Jumlah barang = 220 unit

Waktu = 7 jam

Biaya per unit = Rp9,500

Wilayah Barat:

Jumlah barang = 130 unit

Waktu = 5 jam

Biaya per unit = Rp10,500

Peralatan

Wilayah dan Data:

Wilayah Utara:

Jumlah barang = 170 unit

Waktu = 5 jam

Biaya per unit = Rp12,000

Wilayah Tengah:

Jumlah barang = 180 unit

Waktu = 5 jam

Biaya per unit = Rp11,500

Wilayah Barat:

Jumlah barang = 120 unit

Waktu = 7 jam

Biaya per unit = Rp12,000

Wilayah Timur:

Jumlah barang = 140 unit

Waktu = 5 jam

Biaya per unit = Rp11,000

Tentukan wilayah mana yang memiliki efisiensi pengiriman terendah berdasarkan biaya per unit dan waktu pengiriman

## # A tibble: 5 × 4
##   Wilayah Total_Pengiriman Jumlah_Lambat Persentase_Lambat
##   <chr>              <int>         <int>             <dbl>
## 1 Barat                  3             1              33.3
## 2 Selatan                3             2              66.7
## 3 Tengah                 3             1              33.3
## 4 Timur                  3             1              33.3
## 5 Utara                  3             1              33.3

2 Rekomendasi Operasional

Berdasarkan hasıl analisis, wilayah mana yang memerlukan perhatian khusus untuk meningkatkan efisiensi pengiriman?

Jawaban:

Berdasarkan hasil analisa di atas yang memerlukan perhatian khusus ada di wilayah selatan, karena efisiensi pengiriman di selatan mencapai 2 dari 3 total pengiriman yang lambat dalam pengirimannya.

Apa rekomendasi untuk mengurangi biaya dan waktu pengiriman di wilayah tersebut?

Jawaban:

  1. Peningkatan Sistem Rute Pengiriman: Menggunakan teknologi route optimization untuk menghindari kemacetan atau memilih jalur yang lebih efisien dapat mengurangi waktu pengiriman secara signifikan.

  2. Jadwal Pengiriman yang Lebih Fleksibel: Menyesuaikan jadwal pengiriman dengan kondisi lalu lintas atau menggunakan model pengiriman 24 jam bisa membantu mengurangi penundaan, terutama pada jam sibuk.

  3. Sistem Pelacakan Real-Time: Implementasi sistem pelacakan pengiriman secara real-time dapat membantu untuk mengetahui posisi pengiriman kapan saja. Hal ini dapat mempercepat respons ketika terjadi keterlambatan atau masalah lainnya.

  4. Peringatan Dini untuk Pengiriman Lambat: Sistem berbasis AI dapat memprediksi keterlambatan pengiriman dengan menganalisis pola lalu lintas dan kondisi cuaca, serta memberi peringatan dini untuk mencegah pengiriman terlambat.

3 Kinerja Berdasarkan Jenis Barang

Analısıs kinerja pengiriman berdasarkan jenis barang dan wilayah Mana yang memiliki waktu pengiriman lebih cepat dan biaya per unit lebih rendah?

Waktu Pengiriman (Rata-rata)

Untuk menganalisis kinerja pengiriman berdasarkan jenis barang, mari kita lihat waktu rata-rata pengiriman untuk setiap jenis barang di setiap wilayah:

Jenis barang Wilayah utara Wilayah selatan Wilayah Timur Wilayah barat Wilayah tengah
Elektronik 5 6 - 6 4
Pakaian 9 8 7 - 8
Makanan - 7 6 5 -
Peralatan 4 - 5 7 5

Biaya Per Unit (Rata-rata) Untuk biaya per unit:

Jenis barang Wilayah utara Wilayah selatan Wilayah Timur Wilayah barat Wilayah tengah
Elektronik 15.000 16.000 - 14.500 14.000
Pakaian 8.500 8.000 8.200 - 7.800
Makanan - 9.500 10.000 10.500 -
Peralatan 12.000 - 11.000 12.000 11.500

Waktu Pengiriman Cepat: Wilayah Tengah dan Utara memiliki waktu pengiriman tercepat untuk masing masing barang, yaitu barang elektronik di wilayah tengah dan peralatan di wilayah utara.

Biaya Per Unit Rendah: Wilayah Tengah memiliki biaya pengiriman yang cukup rendah yaitu pakaian

Kesimpulannya Wilayah tengah memiilki Waktu pengiriman cepat dalam waktu 4 jam untuk mengirim barang elektronik lalu wilayah tengah juga mempunyai biaya yang sangat rendah di banding biaya per unit di wilayah lain yaitu 7.800 untuk barang pakaian.

Referensi

https://bookdown.org/dsciencelabs/statistika_dasar/_book/Ukuran_Penyebaran_Data.html

agar tidak salah paham referensi yang saya gunakan itu menggunakan data dari tugas yang ada di dalam buku tersebut, saya tidak mengambil data dari luar karena data nya sudah lengkap di buku itu terimakasih.

LS0tDQp0aXRsZTogIlBlbXVzYXRhbiBEYXRhIg0Kc3VidGl0bGU6ICJNZWFuLCBNZWRpYW4sIE1vZHVzIg0KYXV0aG9yOiANCiAgLSAiWmFpbiBJcWJhbCBTYXB1dHJhIg0KICAtICJOSU0gNTIyNDAwMjQiDQpkYXRlOiAgIk1pbmdndSwgOC8xMi8yMDI0Ig0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjoNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IGZhbHNlDQogICAgbGliX2RpcjogbGlicw0KICAgIDNkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgY3NzOiAic3R5bGUuY3NzIg0KLS0tDQoNCiMgTGF0aWhhbiAxDQoNClNlYnVhaCBwZXJ1c2FoYWFuIGluZ2luIG1lbWFoYW1pIGthcmFrdGVyaXN0aWsgcGVueWViYXJhbiBkYXRhIGhhc2lsIHBlbmp1YWxhbiBkYXJpIGVtcGF0IGNhYmFuZyAoQSwgQiwgQywgZGFuIEQpIHNlbGFtYSBzYXR1IGJ1bGFuIHRlcmFraGlyLiBEYXRhIHBlbmp1YWxhbiAoZGFsYW0ganV0YSBydXBpYWgpIGRhcmkga2VlbXBhdCBjYWJhbmcgdGVyc2VidXQgYWRhbGFoIHNlYmFnYWkgYmVyaWt1dDoNCg0K4oCiIENhYmFuZyBBOiA1MCwgNTUsIDYwLCA2NSwgNzANCg0K4oCiIENhYmFuZyBCOiA0MCwgNTAsIDYwLCA3MCwgODANCg0K4oCiIENhYmFuZyBDOiAzMCwgMzAsIDM1LCA0MCwgNDUNCg0K4oCiIENhYmFuZyBEOiA3MCwgNzUsIDgwLCA4NSwgOTANCg0KIyMgMS4gSGl0dW5nbGFoIHJhdGEtcmF0YSwgbWVkaWFuLCBkYW4gc3RhbmRhciBkZXZpYXNpIHVudHVrIG1hc2luZy1tYXNpbmcgY2FiYW5nLg0KDQojIyMjIENhYmFuZyBBICg1MCwgNTUsIDYwLCA2NSwgNzApOg0KDQotIE1lYW4gKHgpOg0KJCQNClxiYXIgeCA9IFxmcmFje1xzdW0geH17bn09XGZyYWN7NTAgKyA1NSArIDYwICsgNjUgKyA3MH17NX09XGZyYWN7MzAwfXs1fT02MA0KJCQNCi0gTWVkaWFuIDogS2FyZW5hIGRhdGEgbnlhIGdhbmppbCBkYW4gc3VkYWggdGVydXJ1dCwgbWFrYSBuaWxhaSBtZWRpYW5ueWEgYWRhbGFoIG5pbGFpIHRlbmdhaCB5YWl0dSA2MCANCg0KLSBWYXJpYW5zIDogDQokJA0KXGJhciB4ID0gXGZyYWN7XHNxcnRcc3VtICh4aSAtIHgpXjJ9e259DQokJA0KDQp4aTogTmlsYWkgaW5kaXZpZHUuDQoNCng6IFJhdGEtcmF0YSBzYW1wZWwuDQoNCm46IEp1bWxhaCBkYXRhIGRhbGFtIHNhbXBlbC4NCg0KDQpIaXR1bmcgdmFyaWFucyB0ZXJsZWJpaCBkYWh1bHU6DQokJA0KXGJhciB2YXJpYW5zID0gXGZyYWMge1xzcXJ0ICg1MC02MCleMiArICg1NS02MCleMiArLi4uKyg3MC02MCleMn17NS0xfQ0KJCQNCg0KJCQNClxiYXIgdmFyaWFucyA9IFxmcmFjIHtcc3FydCAxMDAgKyAyNSArIDAgKyAyNSArIDEwMH17NS0xfT1cZnJhYyB7XHNxcnQgMjUwfXs0fT02Mi41DQokJA0KDQotIEhpdHVuZyBzdGFuZGFyIGRldmlhc2kgOg0KDQokJA0KXGJhciBzdGFuZGFyIGRldmlhc2kgPSBcc3FydHs2Mi41fT03LjkxDQokJA0KDQojIyMjIENhYmFuZyBCICg0MCwgNTAsIDYwLCA3MCAsODApOg0KDQotIE1lYW4gKHgpOg0KJCQNClxiYXIgeCA9IFxmcmFje1xzdW0geH17bn09XGZyYWN7NDArNTArNjArNzArODB9ezV9PVxmcmFjezMwMH17NX09NjANCiQkDQotIE1lZGlhbiA6IDYwIA0KDQotIFZhcmlhbnMgOiANCiQkDQpcYmFyIHggPSBcZnJhY3tcc3FydFxzdW0gKHhpIC0geCleMn17bn0NCiQkDQoNCnhpOiBOaWxhaSBpbmRpdmlkdS4NCg0KeDogUmF0YS1yYXRhIHNhbXBlbC4NCg0KbjogSnVtbGFoIGRhdGEgZGFsYW0gc2FtcGVsLg0KDQoNCkhpdHVuZyB2YXJpYW5zIHRlcmxlYmloIGRhaHVsdToNCiQkDQpcYmFyIHZhcmlhbnMgPSBcZnJhYyB7XHNxcnQgKDQwLTYwKV4yICsgKDUwLTYwKV4yICsuLi4rKDgwLTYwKV4yfXs1LTF9DQokJA0KDQokJA0KXGJhciB2YXJpYW5zID0gXGZyYWMge1xzcXJ0IDQwMCArIDEwMCArIDAgKyAxMDAgKyA0MDB9ezUtMX09XGZyYWMge1xzcXJ0IDEwMH17NH09MjUwDQokJA0KDQotIEhpdHVuZyBzdGFuZGFyIGRldmlhc2kgOg0KDQokJA0KXGJhciBzdGFuZGFyIGRldmlhc2kgPSBcc3FydHsyNTB9PTE1LjgxDQokJA0KDQojIyMjIENhYmFuZyBDICgzMCwgMzAsIDM1LCA0MCwgNDUpOg0KDQotIE1lYW4gKHgpOg0KJCQNClxiYXIgeCA9IFxmcmFje1xzdW0geH17bn09XGZyYWN7MzAgKyAzMCArIDM1ICsgNDAgKyA0NX17NX09XGZyYWN7MTg1fXs1fT0zNw0KJCQNCi0gTWVkaWFuIDogMzUNCg0KLSBydW11cyB2YXJpYW5zIDogDQokJA0KXGJhciB4ID0gXGZyYWN7XHNxcnRcc3VtICh4aSAtIHgpXjJ9e259DQokJA0KDQp4aTogTmlsYWkgaW5kaXZpZHUuDQoNCng6IFJhdGEtcmF0YSBzYW1wZWwuDQoNCm46IEp1bWxhaCBkYXRhIGRhbGFtIHNhbXBlbC4NCg0KDQpIaXR1bmcgdmFyaWFucyB0ZXJsZWJpaCBkYWh1bHU6DQokJA0KXGJhciB2YXJpYW5zID0gXGZyYWMge1xzcXJ0ICgzMC0zNyleMiArICgzMC0zNyleMiArLi4uKyg0NS0zNyleMn17NS0xfQ0KJCQNCg0KJCQNClxiYXIgdmFyaWFucyA9IFxmcmFjIHtcc3FydCA0OSArIDQ5ICsgNCArIDY0ICsgNjR9ezUtMX09XGZyYWMge1xzcXJ0IDIzMH17NH09NTcuNQ0KJCQNCg0KLSBIaXR1bmcgc3RhbmRhciBkZXZpYXNpIDoNCg0KJCQNClxiYXIgc3RhbmRhciBkZXZpYXNpID0gXHNxcnR7NTcuNX09Ny41OA0KJCQNCg0KIyMjIyBDYWJhbmcgRCAoNzAsIDc1LCA4MCwgODUsIDkwKToNCg0KLSBNZWFuICh4KToNCiQkDQpcYmFyIHggPSBcZnJhY3tcc3VtIHh9e259PVxmcmFjezcwICsgNzUgKyA4MCArIDg1ICsgOTB9ezV9PVxmcmFjezQwMH17NX09ODANCiQkDQotIE1lZGlhbiA6IDgwDQoNCi0gVmFyaWFucyA6IA0KJCQNClxiYXIgeCA9IFxmcmFje1xzcXJ0XHN1bSAoeGkgLSB4KV4yfXtufQ0KJCQNCg0KeGk6IE5pbGFpIGluZGl2aWR1Lg0KDQp4OiBSYXRhLXJhdGEgc2FtcGVsLg0KDQpuOiBKdW1sYWggZGF0YSBkYWxhbSBzYW1wZWwuDQoNCg0KSGl0dW5nIHZhcmlhbnMgdGVybGViaWggZGFodWx1Og0KJCQNClxiYXIgdmFyaWFucyA9IFxmcmFjIHtcc3FydCAoNzAtODApXjIgKyAoNzUtODApXjIgKy4uLisoOTAtODApXjJ9ezUtMX0NCiQkDQoNCiQkDQpcYmFyIHZhcmlhbnMgPSBcZnJhYyB7XHNxcnQgMTAwICsgMjUgKyAwICsgMjUgKyAxMDB9ezUtMX09XGZyYWMge1xzcXJ0IDI1MH17NH09NjIuNQ0KJCQNCg0KLSBIaXR1bmcgc3RhbmRhciBkZXZpYXNpIDoNCg0KJCQNClxiYXIgc3RhbmRhciBkZXZpYXNpID0gXHNxcnR7NjIuNX09Ny45MQ0KJCQNCg0KIyMgMi4gQ2FiYW5nIG1hbmEgeWFuZyBtZW1pbGlraSBwZW55ZWJhcmFuIGRhdGEgcGFsaW5nIGtlY2lsPyBKZWxhc2thbiBhbGFzYW5ueWEuDQoNClVudHVrIHBlbnllYmFyYW4gZGF0YSB5YW5nIHBhbGluZyBrZWNpbCBraXRhIGJpc2EgbWVsaWhhdCBzdGFuZGFyIGRldmlhc2kgZGFyaSBtYXNpbmcgbWFzaW5nIGNhYmFuZw0KDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShrbml0cikNCg0KIyBEYXRhIGZyYW1lIHVudHVrIHRhYmVsDQpkYXRhIDwtIGRhdGEuZnJhbWUoDQogIGBDYWJhbmdgID0gYygiQSIsICJCIiwgIkMiLCAiRCIpLA0KICBgU3RhbmRhciBEZXZpYXNpIChzKWAgPSBjKDcuOTEsIDE1LjgxLCA3LjU4LCA3LjkxKQ0KKQ0KDQojIENldGFrIHRhYmVsDQprYWJsZShkYXRhLCBjb2wubmFtZXMgPSBjKCJDYWJhbmciLCAiU3RhbmRhciBEZXZpYXNpIChzKSIpKQ0KYGBgDQoNCkJpc2Ega2l0YSBsaWhhdCBkaSBkYWxhbSB0YWJlbCBiYWh3YSBjYWJhbmcgYyBtZW1pbGlraSBwZW55ZWJhcmFuIGRhdGEgeWFuZyBwYWxpbmcga2VjaWwgamlrYSBkaWxpaGF0IGRhcmkgc3RhbmRhcmEgZGV2aWFzaSB5YWl0dSA3LjU4LCBpbmkgYXJ0aW55YSBjYWJhbmcgYyB0aWRhayB0ZXJsYWx1IHRlcnNlYmFyIGphdWggZGFyaSByYXRhIHJhdGEgbnlhLg0KDQojIyAzLiBKaWthIHRhcmdldCBwZW5qdWFsYW4gbWluaW11bSBhZGFsYWggNTAganV0YSBydXBpYWgsIGNhYmFuZyBtYW5hIHNhamEgeWFuZyBnYWdhbCBtZW5jYXBhaSB0YXJnZXQgZGkgc2VtdWEgZGF0YW55YT8NCg0KLSBDYWJhbmcgQSAoNTAsIDU1LCA2MCwgNjUsIDcwKSA6IFNlbXVhIGRhdGEgbWVtZW51aGkgdGFyZ2V0DQoNCi0gQ2FiYW5nIEIgKDQwLCA1MCwgNjAsIDcwICw4MCkgOiBBZGEgc2F0dSBkYXRhIHlhbmcgdGlkYWsgbWVtZW51aGkgdGFyZ2V0IHlhaXR1IDQwDQoNCi0gQ2FiYW5nIEMgKDMwLCAzMCwgMzUsIDQwLCA0NSkgOiBTZW11YSBkYXRhIHRpZGFrIG1lbWVudWhpIHRhcmdldA0KDQotIENhYmFuZyBEICg3MCwgNzUsIDgwLCA4NSwgOTApIDogc2VtdWEgZGF0YSBtZW1lbnVoaSB0YXJnZXQNCg0KQ2FiYW5nIEMgYWRhbGFoIHNhdHUgc2F0dSBueWEgY2FiYW5nIHlhbmcgZ2FnYWwgbWVuY2FwYXQgdGFyZ2V0IGRpIHNlbXVhIGRhdGFueWENCiANCiMjIDQuIEJ1YXRsYWggZGlhZ3JhbSBrb3RhayAoYm94IHBsb3QpIHVudHVrIG1lbXZpc3VhbGlzYXNpa2FuIHBlbnllYmFyYW4gZGF0YSBzZXRpYXAgY2FiYW5nLg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGEgcGVuanVhbGFuIGRhcmkgc2V0aWFwIGNhYmFuZyAodGFucGEgb3V0bGllcnMpDQpkYXRhX0EgPC0gYyg1MCwgNTUsIDYwLCA2NSwgNzApDQpkYXRhX0IgPC0gYyg0MCwgNTAsIDYwLCA3MCwgODApDQpkYXRhX0MgPC0gYygzMCwgMzAsIDM1LCA0NSwgNDUpDQpkYXRhX0QgPC0gYyg3MCwgNzUsIDgwLCA4NSwgOTApDQoNCiMgTWVtYnVhdCBib3hwbG90IGRlbmdhbiBQbG90bHkNCnBsb3RfbHkoKSAlPiUNCiAgYWRkX3RyYWNlKA0KICAgIHkgPSBkYXRhX0EsIA0KICAgIHR5cGUgPSAiYm94IiwgDQogICAgbmFtZSA9ICJDYWJhbmcgQSIsIA0KICAgIGJveG1lYW4gPSBUUlVFLCANCiAgICBtYXJrZXIgPSBsaXN0KGNvbG9yID0gJ3NreWJsdWUnKSAgIyBXYXJuYSBib3hwbG90IHVudHVrIENhYmFuZyBBDQogICkgJT4lDQogIGFkZF90cmFjZSgNCiAgICB5ID0gZGF0YV9CLCANCiAgICB0eXBlID0gImJveCIsIA0KICAgIG5hbWUgPSAiQ2FiYW5nIEIiLCANCiAgICBib3htZWFuID0gVFJVRSwgDQogICAgbWFya2VyID0gbGlzdChjb2xvciA9ICdwaW5rJykgICMgV2FybmEgYm94cGxvdCB1bnR1ayBDYWJhbmcgQg0KICApICU+JQ0KICBhZGRfdHJhY2UoDQogICAgeSA9IGRhdGFfQywgDQogICAgdHlwZSA9ICJib3giLCANCiAgICBuYW1lID0gIkNhYmFuZyBDIiwgDQogICAgYm94bWVhbiA9IFRSVUUsIA0KICAgIG1hcmtlciA9IGxpc3QoY29sb3IgPSAnbGlnaHRncmVlbicpICAjIFdhcm5hIGJveHBsb3QgdW50dWsgQ2FiYW5nIEMNCiAgKSAlPiUNCiAgYWRkX3RyYWNlKA0KICAgIHkgPSBkYXRhX0QsIA0KICAgIHR5cGUgPSAiYm94IiwgDQogICAgbmFtZSA9ICJDYWJhbmcgRCIsIA0KICAgIGJveG1lYW4gPSBUUlVFLCANCiAgICBtYXJrZXIgPSBsaXN0KGNvbG9yID0gJ29yYW5nZScpICAjIFdhcm5hIGJveHBsb3QgdW50dWsgQ2FiYW5nIEQNCiAgKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIkJveCBQbG90IFBlbmp1YWxhbiBwZXIgQ2FiYW5nIChUYW5wYSBPdXRsaWVycykiLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJQZW5qdWFsYW4gKGp1dGEgcnVwaWFoKSIpLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJDYWJhbmciKQ0KICApDQoNCmBgYA0KDQojIyA1LiBKaWthIEFuZGEgYWRhbGFoIG1hbmFqZXIgcGVydXNhaGFhbiwgYmFnYWltYW5hIEFuZGEgYWthbiBtZW5nZ3VuYWthbiBpbmZvcm1hc2kgaW5pIHVudHVrIG1lcmVuY2FuYWthbiBzdHJhdGVnaSBwZW5pbmdrYXRhbiBwZW5qdWFsYW4/DQoNCktpdGEgaGFydXMgbWVuZ2FuYWxpc2EgZHVsdSBhcGEgcGVueWViYWJueWEgYmFydSBraXRhIGxha3VrYW4gc3RyYXRlZ2kgZGkgYmVyYmFnYWkgY2FiYW5nDQoNCjEuIENhYmFuZyBDOg0KDQogICAtIFNlbXVhIHBlbmp1YWxhbiBkaSBjYWJhbmcgYyBrdXJhbmcgZGFyaSB0YXJnZXQgc2VtdWEsIGhhbCBpbmkgbWVudW5qdWtrYW4gcGVyZm9ybWEgeWFuZyBzYW5nYXQgYnVydWsgZGkgY2FiYW5nIGMuDQogICANCiAgIC0gU3RyYXRlZ2kgbnlhIGFkYWxhaCBraXRhIGhhcnVzIGludmVzdGlnYXNpIGtlbmFwYSBwZW5qdWFsYW5ueWEgYmlzYSBzYW5nYXQgcmVuZGFoIHNlcGVydGkgcHJvZHVrIHlhbmcgdGlkYWsgbGFrdSwgbG9rYXNpIHlhbmcga3VyYW5nIHN0cmF0ZWdpcywgYXRhdSBrb21wZXRpdG9yLiBqaWthIHN1ZGFoIHNlbXVhIGRpIGxha3VrYW4gZGFuIHRpZGFrIGFkYSBwZW1iYWlrYW4gc2FsZXMgZGFyaSBjYWJhbmcgYyBha2FuIG1lbGFrdWthbiBkYXlhIHRhcmlrIHNlcnRhIHByb21vc2kga2VwYWRhIG1hc3lhcmFrYXQgbG9rYWwgeWFuZyBhZGEgZGlzYW5hIHVudHVrIG1lbmluZ2thdGthbiBkYXlhIHRhcmlrIHByb2R1ay4NCg0KDQoyLiBDYWJhbmcgQjoNCg0KICAgLSBEaXNpbmkga2l0YSBsaWF0IGJhaHdhIGFkYSBzYXR1IGRhdGEgZGkgYmF3YWggdGFyZ2V0IHlhaXR1IDQwIGRhbiBzdGFuZGFyIGRldmlhc2kgbnlhIGp1Z2Egc2FuZ2F0IHRpbmdnaSB5YWl0dSAxNS44MSBoYWwgaW5pIG1lbnVuanVra2FuIHBlbnllYmFyYW4gZGF0YSB5YW5nIHNhbmdhdCBiZXNhci4NCiAgIA0KICAgLSBzdHJhdGVnaSBkYWxhbSBjYWJhbmcgYiBhZGFsYWggbWVuaW5na2F0a2FuIHN0cmF0ZWdpIHBlbWFzYXJhbiB1bnR1ayBtZW5qYWdhIHN0YWJpbGl0YXMgcGVuanVhbGFuIHNlcnRhIGtvbnRyb2wga3VhbGl0YXMgcHJvZHVrIHBhZGEgcGVuanVhbGFuLg0KICAgDQogICANCjMuIENhYmFuZyBBIGRhbiBEDQoNCkNhYmFuZyBBIGRhbiBEIG1lbmphZGkgc2F0dSBrYXJlbmEgY2FiYW5nIGluaSBzdWRhaCBkaSBhdGFzIHRhcmdldCBzZW11YSBwZW5qdWFsYW5ueWEgZGFuIHN0YW5kYXIgZGV2aWFzaSBueWEganVnYSBzYW1hIHlhaXR1IDcuOTENCg0KU3RyYXRlZ2k6IEZva3VzIHBhZGEgaW5vdmFzaSBhZ2FyIGJpc2EgbWVuaW5na2F0a2FuIHBlbmp1YWxhbiB5YW5nIGxlYmloIHRpbmdnaSBsYWdpDQogICAgDQojIExhdGloYW4gMg0KDQpQZXJ1c2FoYWFuIFhZWiBtZW5nZWxvbGEgcGVuZ2lyaW1hbiBiYXJhbmcga2UgYmVyYmFnYWkgd2lsYXlhaCBkZW5nYW4gbWVuZ2d1bmFrYW4gYmVyYmFnYSBqZW5pcyB0cmFuc3BvcnRhc2kgU2V0aWFwIHBlbmdpcmltYW4gbWVsaWJhdGthbiBiaWF5YSB0cmFuc3BvcnRhc2ksIHdha3R1IHlhbmcgZGlidXR1aGthbiwgZGFuIGp1bWxhdCBiYXJhbmcgeWFuZyBkaWvEsW7EsW4gQmVyaWt1dCBhZGFsYWggZGFsYSB0ZXJrYWl0IHBlbmdpcmltYW4gYmFyYW5nIGJlcmRhc2Fya2FuIHdpbGF5YWggZGFuIGplbmlzIGJhcmFuZw0KDQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgTWVtYnVhdCBkYXRhIGZyYW1lDQpkYXRhIDwtIGRhdGEuZnJhbWUoDQogIFdpbGF5YWggPSBjKCJVdGFyYSIsICJTZWxhdGFuIiwgIlRpbXVyIiwgIkJhcmF0IiwgIlRlbmdhaCIsIA0KICAgICAgICAgICAgICAiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiLCANCiAgICAgICAgICAgICAgIlV0YXJhIiwgIlNlbGF0YW4iLCAiVGltdXIiLCAiQmFyYXQiLCAiVGVuZ2FoIiksDQogIEplbmlzX0JhcmFuZyA9IGMoIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwNCiAgICAgICAgICAgICAgICAgICAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgIlBha2FpYW4iLA0KICAgICAgICAgICAgICAgICAgICJQZXJhbGF0YW4iLCAiRWxla3Ryb25payIsICJQYWthaWFuIiwgIk1ha2FuYW4iLCAiUGVyYWxhdGFuIiksDQogIEp1bWxhaF9Vbml0ID0gYygyMDAsIDE1MCwgMTgwLCAxMjAsIDI1MCwgMzAwLCAyMjAsIDE0MCwgMTgwLCAzNTAsIDE3MCwgMjUwLCAxOTAsIDEzMCwgMTgwKSwNCiAgV2FrdHVfamFtID0gYyg1LCA4LCA2LCA3LCA0LCA5LCA3LCA1LCA2LCA4LCA0LCA2LCA3LCA1LCA1KSwNCiAgQmlheWFfcGVyX1VuaXRfUnAgPSBjKDE1MDAwLCA4MDAwLCAxMDAwMCwgMTIwMDAsIDE0MDAwLCANCiAgICAgICAgICAgICAgICAgICAgICAgIDg1MDAsIDk1MDAsIDExMDAwLCAxNDUwMCwgNzgwMCwgDQogICAgICAgICAgICAgICAgICAgICAgICAxMjAwMCwgMTYwMDAsIDgyMDAsIDEwNTAwLCAxMTUwMCkNCikNCg0KIyBNZW5hbXBpbGthbiB0YWJlbCBkZW5nYW4ga25pdHI6OmthYmxlDQprbml0cjo6a2FibGUoZGF0YSwgY29sLm5hbWVzID0gYygiV2lsYXlhaCIsICJKZW5pcyBCYXJhbmciLCAiSnVtbGFoICh1bml0KSIsICJXYWt0dSAoamFtKSIsICJCaWF5YSBwZXIgVW5pdCAoUnApIiksDQogICAgICAgICAgICAgY2FwdGlvbiA9ICJUYWJlbCBEYXRhIERpc3RyaWJ1c2kgQmFyYW5nIikNCg0KYGBgDQoNCiMjIDEgQW5hbGlzaXMgRWZpc2llbnNpIFBlbmdpcmltYW4NCg0KIyMjIFZpc3VhbGlzYXNpa2FuIHBlbmdpcmltYW4gYmFyYW5nIGJlcmRhc2Fya2FuIGp1bWxhaCBiYXJhbmcsIHdha3R1IHBlbmdpcmltYW4sIGRhbiBiaWF5YSBwZXIgdW5pdCBkZW5nYW4gbWVuZ2d1bmFrYW4gcGxvdCAzRA0KDQojIyMjIEVsZWt0cm9uaWsNCg0KKipXaWxheWFoIGRhbiBEYXRhOioqDQoNCioqV2lsYXlhaCBVdGFyYToqKg0KDQpKdW1sYWggYmFyYW5nID0gMjAwIHVuaXQNCg0KV2FrdHUgPSA1IGphbQ0KDQpCaWF5YSBwZXIgdW5pdCA9IFJwMTUsMDAwDQoNCioqV2lsYXlhaCBUZW5nYWg6KioNCg0KSnVtbGFoIGJhcmFuZyA9IDI1MCB1bml0DQoNCldha3R1ID0gNCBqYW0NCg0KQmlheWEgcGVyIHVuaXQgPSBScDE0LDAwMA0KDQoqKldpbGF5YWggQmFyYXQ6KioNCg0KSnVtbGFoIGJhcmFuZyA9IDE4MCB1bml0DQoNCldha3R1ID0gNiBqYW0NCg0KQmlheWEgcGVyIHVuaXQgPSBScDEyLDAwMA0KDQoqKldpbGF5YWggU2VsYXRhbjoqKg0KDQpKdW1sYWggYmFyYW5nID0gMjUwIHVuaXQNCg0KV2FrdHUgPSA2IGphbQ0KDQpCaWF5YSBwZXIgdW5pdCA9IFJwMTYsMDAwDQoNCg0KIyMjIyBQYWthaWFuDQoNCioqV2lsYXlhaCBkYW4gRGF0YToqKg0KDQoqKldpbGF5YWggVXRhcmE6KioNCg0KSnVtbGFoIGJhcmFuZyA9IDMwMCB1bml0DQoNCldha3R1ID0gOSBqYW0NCg0KQmlheWEgcGVyIHVuaXQgPSBScDgsNTAwDQoNCioqV2lsYXlhaCBUZW5nYWg6KioNCg0KSnVtbGFoIGJhcmFuZyA9IDM1MCB1bml0DQoNCldha3R1ID0gOCBqYW0NCg0KQmlheWEgcGVyIHVuaXQgPSBScDcsODAwDQoNCioqV2lsYXlhaCBCYXJhdDoqKg0KDQpKdW1sYWggYmFyYW5nID0gMTkwIHVuaXQNCg0KV2FrdHUgPSA3IGphbQ0KDQpCaWF5YSBwZXIgdW5pdCA9IFJwOCwyMDANCg0KKipXaWxheWFoIFNlbGF0YW46KioNCg0KSnVtbGFoIGJhcmFuZyA9IDE1MCB1bml0DQoNCldha3R1ID0gOCBqYW0NCg0KQmlheWEgcGVyIHVuaXQgPSBScDgsMDAwDQoNCiMjIyMgTWFrYW5hbg0KDQoqKldpbGF5YWggZGFuIERhdGE6KioNCg0KKipXaWxheWFoIFV0YXJhOioqDQoNCkp1bWxhaCBiYXJhbmcgPSAxODAgdW5pdA0KDQpXYWt0dSA9IDYgamFtDQoNCkJpYXlhIHBlciB1bml0ID0gUnAxMCwwMDANCg0KKipXaWxheWFoIFRlbmdhaDoqKg0KDQpKdW1sYWggYmFyYW5nID0gMjIwIHVuaXQNCg0KV2FrdHUgPSA3IGphbQ0KDQpCaWF5YSBwZXIgdW5pdCA9IFJwOSw1MDANCg0KKipXaWxheWFoIEJhcmF0OioqDQoNCkp1bWxhaCBiYXJhbmcgPSAxMzAgdW5pdA0KDQpXYWt0dSA9IDUgamFtDQoNCkJpYXlhIHBlciB1bml0ID0gUnAxMCw1MDANCg0KIyMjIyBQZXJhbGF0YW4NCg0KKipXaWxheWFoIGRhbiBEYXRhOioqDQoNCioqV2lsYXlhaCBVdGFyYToqKg0KDQpKdW1sYWggYmFyYW5nID0gMTcwIHVuaXQNCg0KV2FrdHUgPSA1IGphbQ0KDQpCaWF5YSBwZXIgdW5pdCA9IFJwMTIsMDAwDQoNCioqV2lsYXlhaCBUZW5nYWg6KioNCg0KSnVtbGFoIGJhcmFuZyA9IDE4MCB1bml0DQoNCldha3R1ID0gNSBqYW0NCg0KQmlheWEgcGVyIHVuaXQgPSBScDExLDUwMA0KDQoqKldpbGF5YWggQmFyYXQ6KioNCg0KSnVtbGFoIGJhcmFuZyA9IDEyMCB1bml0DQoNCldha3R1ID0gNyBqYW0NCg0KQmlheWEgcGVyIHVuaXQgPSBScDEyLDAwMA0KDQoqKldpbGF5YWggVGltdXI6KioNCg0KSnVtbGFoIGJhcmFuZyA9IDE0MCB1bml0DQoNCldha3R1ID0gNSBqYW0NCg0KQmlheWEgcGVyIHVuaXQgPSBScDExLDAwMA0KDQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCiMgSW5zdGFsbCBkYW4gbG9hZCBsaWJyYXJ5IHBsb3RseQ0KaWYgKCFyZXF1aXJlTmFtZXNwYWNlKCJwbG90bHkiLCBxdWlldGx5ID0gVFJVRSkpIHsNCiAgaW5zdGFsbC5wYWNrYWdlcygicGxvdGx5IikNCn0NCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGENCmRhdGEgPC0gZGF0YS5mcmFtZSgNCiAgV2lsYXlhaCA9IGMoIlV0YXJhIiwgIlNlbGF0YW4iLCAiVGltdXIiLCAiQmFyYXQiLCAiVGVuZ2FoIiwgDQogICAgICAgICAgICAgICJVdGFyYSIsICJTZWxhdGFuIiwgIlRpbXVyIiwgIkJhcmF0IiwgIlRlbmdhaCIsIA0KICAgICAgICAgICAgICAiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiKSwNCiAgSmVuaXNfQmFyYW5nID0gYygiRWxla3Ryb25payIsICJQYWthaWFuIiwgIk1ha2FuYW4iLCAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLCANCiAgICAgICAgICAgICAgICAgICAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgIlBha2FpYW4iLCANCiAgICAgICAgICAgICAgICAgICAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIpLA0KICBKdW1sYWhfVW5pdCA9IGMoMjAwLCAxNTAsIDE4MCwgMTIwLCAyNTAsIA0KICAgICAgICAgICAgICAgICAgMzAwLCAyMjAsIDE0MCwgMTgwLCAzNTAsIA0KICAgICAgICAgICAgICAgICAgMTcwLCAyNTAsIDE5MCwgMTMwLCAxODApLA0KICBXYWt0dV9qYW0gPSBjKDUsIDgsIDYsIDcsIDQsIA0KICAgICAgICAgICAgICAgIDksIDcsIDUsIDYsIDgsIA0KICAgICAgICAgICAgICAgIDQsIDYsIDcsIDUsIDUpLA0KICBCaWF5YV9wZXJfVW5pdF9ScCA9IGMoMTUwMDAsIDgwMDAsIDEwMDAwLCAxMjAwMCwgMTQwMDAsIA0KICAgICAgICAgICAgICAgICAgICAgICAgODUwMCwgOTUwMCwgMTEwMDAsIDE0NTAwLCA3ODAwLCANCiAgICAgICAgICAgICAgICAgICAgICAgIDEyMDAwLCAxNjAwMCwgODIwMCwgMTA1MDAsIDExNTAwKQ0KKQ0KDQojIE1lbWJ1YXQgM0Qgc2NhdHRlciBwbG90IGRlbmdhbiB0b29sdGlwIHRhbWJhaGFuDQpwbG90X2x5KGRhdGEsIA0KICAgICAgICB4ID0gfkp1bWxhaF9Vbml0LCANCiAgICAgICAgeSA9IH5XYWt0dV9qYW0sIA0KICAgICAgICB6ID0gfkJpYXlhX3Blcl9Vbml0X1JwLCANCiAgICAgICAgY29sb3IgPSB+V2lsYXlhaCwgDQogICAgICAgIGNvbG9ycyA9ICJTZXQxIiwgDQogICAgICAgIHR5cGUgPSAic2NhdHRlcjNkIiwgDQogICAgICAgIG1vZGUgPSAibWFya2VycyIsIA0KICAgICAgICB0ZXh0ID0gfnBhc3RlKCJXaWxheWFoOiAiLCBXaWxheWFoLCANCiAgICAgICAgICAgICAgICAgICAgICAiPGJyPkplbmlzIEJhcmFuZzogIiwgSmVuaXNfQmFyYW5nLCANCiAgICAgICAgICAgICAgICAgICAgICAiPGJyPkp1bWxhaCBVbml0OiAiLCBKdW1sYWhfVW5pdCwgDQogICAgICAgICAgICAgICAgICAgICAgIjxicj5XYWt0dTogIiwgV2FrdHVfamFtLCAiIGphbSIsIA0KICAgICAgICAgICAgICAgICAgICAgICI8YnI+QmlheWE6IFJwIiwgQmlheWFfcGVyX1VuaXRfUnApLA0KICAgICAgICBob3ZlcmluZm8gPSAidGV4dCIpICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiM0QgU2NhdHRlciBQbG90IFBlbmdpcmltYW4gQmFyYW5nIiwNCiAgICBzY2VuZSA9IGxpc3QoDQogICAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiSnVtbGFoIFVuaXQiKSwNCiAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJXYWt0dSBQZW5naXJpbWFuIChqYW0pIiksDQogICAgICB6YXhpcyA9IGxpc3QodGl0bGUgPSAiQmlheWEgcGVyIFVuaXQgKFJwKSIpDQogICAgKQ0KICApDQpgYGANCg0KIyMjIFRlbnR1a2FuIHdpbGF5YWggbWFuYSB5YW5nIG1lbWlsaWtpIGVmaXNpZW5zaSBwZW5naXJpbWFuIHRlcmVuZGFoIGJlcmRhc2Fya2FuIGJpYXlhIHBlciB1bml0IGRhbiB3YWt0dSBwZW5naXJpbWFuDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KIyBMb2FkIGxpYnJhcnkgZHBseXINCmxpYnJhcnkoZHBseXIpDQoNCiMgRGF0YQ0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBXaWxheWFoID0gYygiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiLA0KICAgICAgICAgICAgICAiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiLA0KICAgICAgICAgICAgICAiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiKSwNCiAgSmVuaXNfQmFyYW5nID0gYygiRWxla3Ryb25payIsICJQYWthaWFuIiwgIk1ha2FuYW4iLCAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLA0KICAgICAgICAgICAgICAgICAgICJQYWthaWFuIiwgIk1ha2FuYW4iLCAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsDQogICAgICAgICAgICAgICAgICAgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgIlBha2FpYW4iLCAiTWFrYW5hbiIsICJQZXJhbGF0YW4iKSwNCiAgSnVtbGFoX0JhcmFuZyA9IGMoMjAwLCAxNTAsIDE4MCwgMTIwLCAyNTAsIDMwMCwgMjIwLCAxNDAsIDE4MCwgMzUwLCAxNzAsIDI1MCwgMTkwLCAxMzAsIDE4MCksDQogIFdha3R1X1BlbmdpcmltYW4gPSBjKDUsIDgsIDYsIDcsIDQsIDksIDcsIDUsIDYsIDgsIDQsIDYsIDcsIDUsIDUpLA0KICBCaWF5YV9QZXJfVW5pdCA9IGMoMTUwMDAsIDgwMDAsIDEwMDAwLCAxMjAwMCwgMTQwMDAsIDg1MDAsIDk1MDAsIDExMDAwLCAxNDUwMCwgNzgwMCwgMTIwMDAsIDE2MDAwLCA4MjAwLCAxMDUwMCwgMTE1MDApDQopDQoNCiMgTWVuZ2hpdHVuZyBwZXJzZW50YXNlIHBlbmdpcmltYW4gbGFtYmF0ICg+PSA3IGphbSBzZWJhZ2FpIGJhdGFzKQ0KdGFyZ2V0IDwtIGRhdGEgJT4lDQogIGdyb3VwX2J5KFdpbGF5YWgpICU+JQ0KICBzdW1tYXJpc2UoDQogICAgVG90YWxfUGVuZ2lyaW1hbiA9IG4oKSwNCiAgICBKdW1sYWhfTGFtYmF0ID0gc3VtKFdha3R1X1BlbmdpcmltYW4gPj0gNyksDQogICAgUGVyc2VudGFzZV9MYW1iYXQgPSAoSnVtbGFoX0xhbWJhdCAvIFRvdGFsX1BlbmdpcmltYW4pICogMTAwDQogICkNCg0KIyBNZW5hbXBpbGthbiBoYXNpbA0KcHJpbnQodGFyZ2V0KQ0KYGBgDQoNCiMjIDIgUmVrb21lbmRhc2kgT3BlcmFzaW9uYWwNCg0KIyMjIEJlcmRhc2Fya2FuIGhhc8SxbCBhbmFsaXNpcywgd2lsYXlhaCBtYW5hIHlhbmcgbWVtZXJsdWthbiBwZXJoYXRpYW4ga2h1c3VzIHVudHVrIG1lbmluZ2thdGthbiBlZmlzaWVuc2kgcGVuZ2lyaW1hbj8NCg0KSmF3YWJhbjoNCg0KQmVyZGFzYXJrYW4gaGFzaWwgYW5hbGlzYSBkaSBhdGFzIHlhbmcgbWVtZXJsdWthbiBwZXJoYXRpYW4ga2h1c3VzIGFkYSBkaSB3aWxheWFoIHNlbGF0YW4sIGthcmVuYSBlZmlzaWVuc2kgcGVuZ2lyaW1hbiBkaSBzZWxhdGFuIG1lbmNhcGFpIDIgZGFyaSAzIHRvdGFsIHBlbmdpcmltYW4geWFuZyBsYW1iYXQgZGFsYW0gcGVuZ2lyaW1hbm55YS4NCg0KIyMjIEFwYSByZWtvbWVuZGFzaSB1bnR1ayBtZW5ndXJhbmdpIGJpYXlhIGRhbiB3YWt0dSBwZW5naXJpbWFuIGRpIHdpbGF5YWggdGVyc2VidXQ/DQoNCkphd2FiYW46DQoNCjEuIFBlbmluZ2thdGFuIFNpc3RlbSBSdXRlIFBlbmdpcmltYW46IE1lbmdndW5ha2FuIHRla25vbG9naSByb3V0ZSBvcHRpbWl6YXRpb24gdW50dWsgbWVuZ2hpbmRhcmkga2VtYWNldGFuIGF0YXUgbWVtaWxpaCBqYWx1ciB5YW5nIGxlYmloIGVmaXNpZW4gZGFwYXQgbWVuZ3VyYW5naSB3YWt0dSBwZW5naXJpbWFuIHNlY2FyYSBzaWduaWZpa2FuLg0KDQoyLiBKYWR3YWwgUGVuZ2lyaW1hbiB5YW5nIExlYmloIEZsZWtzaWJlbDogTWVueWVzdWFpa2FuIGphZHdhbCBwZW5naXJpbWFuIGRlbmdhbiBrb25kaXNpIGxhbHUgbGludGFzIGF0YXUgbWVuZ2d1bmFrYW4gbW9kZWwgcGVuZ2lyaW1hbiAyNCBqYW0gYmlzYSBtZW1iYW50dSBtZW5ndXJhbmdpIHBlbnVuZGFhbiwgdGVydXRhbWEgcGFkYSBqYW0gc2lidWsuDQoNCjMuIFNpc3RlbSBQZWxhY2FrYW4gUmVhbC1UaW1lOiBJbXBsZW1lbnRhc2kgc2lzdGVtIHBlbGFjYWthbiBwZW5naXJpbWFuIHNlY2FyYSByZWFsLXRpbWUgZGFwYXQgbWVtYmFudHUgdW50dWsgbWVuZ2V0YWh1aSBwb3Npc2kgcGVuZ2lyaW1hbiBrYXBhbiBzYWphLiBIYWwgaW5pIGRhcGF0IG1lbXBlcmNlcGF0IHJlc3BvbnMga2V0aWthIHRlcmphZGkga2V0ZXJsYW1iYXRhbiBhdGF1IG1hc2FsYWggbGFpbm55YS4NCg0KNC4gUGVyaW5nYXRhbiBEaW5pIHVudHVrIFBlbmdpcmltYW4gTGFtYmF0OiBTaXN0ZW0gYmVyYmFzaXMgQUkgZGFwYXQgbWVtcHJlZGlrc2kga2V0ZXJsYW1iYXRhbiBwZW5naXJpbWFuIGRlbmdhbiBtZW5nYW5hbGlzaXMgcG9sYSBsYWx1IGxpbnRhcyBkYW4ga29uZGlzaSBjdWFjYSwgc2VydGEgbWVtYmVyaSBwZXJpbmdhdGFuIGRpbmkgdW50dWsgbWVuY2VnYWggcGVuZ2lyaW1hbiB0ZXJsYW1iYXQuDQoNCiMjIDMgS2luZXJqYSBCZXJkYXNhcmthbiBKZW5pcyBCYXJhbmcNCg0KQW5hbMSxc8SxcyBraW5lcmphIHBlbmdpcmltYW4gYmVyZGFzYXJrYW4gamVuaXMgYmFyYW5nIGRhbiB3aWxheWFoIE1hbmEgeWFuZyBtZW1pbGlraSB3YWt0dSBwZW5naXJpbWFuIGxlYmloIGNlcGF0IGRhbiBiaWF5YSBwZXIgdW5pdCBsZWJpaCByZW5kYWg/DQoNCioqV2FrdHUgUGVuZ2lyaW1hbiAoUmF0YS1yYXRhKSoqDQoNClVudHVrIG1lbmdhbmFsaXNpcyBraW5lcmphIHBlbmdpcmltYW4gYmVyZGFzYXJrYW4gamVuaXMgYmFyYW5nLCBtYXJpIGtpdGEgbGloYXQgd2FrdHUgcmF0YS1yYXRhIHBlbmdpcmltYW4gdW50dWsgc2V0aWFwIGplbmlzIGJhcmFuZyBkaSBzZXRpYXAgd2lsYXlhaDoNCg0KYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGtuaXRyKQ0KDQojIERhdGEgZnJhbWUgdW50dWsgdGFiZWwNCmRhdGEgPC0gZGF0YS5mcmFtZSgNCiAgYEplbmlzIGJhcmFuZ2AgPSBjKCJFbGVrdHJvbmlrIiwgIlBha2FpYW4iLCAiTWFrYW5hbiIsICJQZXJhbGF0YW4iKSwNCiAgYHdpbGF5YWggdXRhcmFgID0gYyg1LCA5LCAiLSIsIDQpLA0KICBgd2lsYXlhaCBzZWxhdGFuYCA9IGMoNiwgOCwgNywgIi0iKSwNCiAgYHdpbGF5YWggdGltdXJgID0gYygiLSIgLCA3LCA2LCA1KSwNCiAgYHdpbGF5YWggYmFyYXRgID0gYyg2LCAiLSIsIDUsIDcpLA0KICBgd2lsYXlhaCB0ZW5nYWhgID0gYyg0LCA4LCAiLSIsIDUpDQopDQoNCiMgQ2V0YWsgdGFiZWwNCmthYmxlKGRhdGEsIGNvbC5uYW1lcyA9IGMoIkplbmlzIGJhcmFuZyIsICJXaWxheWFoIHV0YXJhIiwgIldpbGF5YWggc2VsYXRhbiIsICJXaWxheWFoIFRpbXVyIiwgIldpbGF5YWggYmFyYXQiLCAiV2lsYXlhaCB0ZW5nYWgiKSkNCmBgYA0KDQoqKkJpYXlhIFBlciBVbml0IChSYXRhLXJhdGEpKioNClVudHVrIGJpYXlhIHBlciB1bml0Og0KDQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQoNCiMgRGF0YSBmcmFtZSB1bnR1ayB0YWJlbA0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBgSmVuaXMgYmFyYW5nYCA9IGMoIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIpLA0KICBgd2lsYXlhaCB1dGFyYWAgPSBjKCIxNS4wMDAiICwgIjguNTAwIiAsICItIiwgIjEyLjAwMCIpLA0KICBgd2lsYXlhaCBzZWxhdGFuYCA9IGMoIjE2LjAwMCIgLCAiOC4wMDAiICwgIjkuNTAwIiAsICItIiksDQogIGB3aWxheWFoIHRpbXVyYCA9IGMoIi0iICwgIjguMjAwIiAsICIxMC4wMDAiICwgIjExLjAwMCIpLA0KICBgd2lsYXlhaCBiYXJhdGAgPSBjKCIxNC41MDAiICwgIi0iLCAiMTAuNTAwIiAsICIxMi4wMDAiKSwNCiAgYHdpbGF5YWggdGVuZ2FoYCA9IGMoIjE0LjAwMCIgLCAiNy44MDAiICwgIi0iLCAiMTEuNTAwIikNCikNCg0KIyBDZXRhayB0YWJlbA0Ka2FibGUoZGF0YSwgY29sLm5hbWVzID0gYygiSmVuaXMgYmFyYW5nIiwgIldpbGF5YWggdXRhcmEiLCAiV2lsYXlhaCBzZWxhdGFuIiwgIldpbGF5YWggVGltdXIiLCAiV2lsYXlhaCBiYXJhdCIsICJXaWxheWFoIHRlbmdhaCIpKQ0KYGBgDQoNCldha3R1IFBlbmdpcmltYW4gQ2VwYXQ6IFdpbGF5YWggVGVuZ2FoIGRhbiBVdGFyYSBtZW1pbGlraSB3YWt0dSBwZW5naXJpbWFuIHRlcmNlcGF0IHVudHVrIG1hc2luZyBtYXNpbmcgYmFyYW5nLCB5YWl0dSBiYXJhbmcgZWxla3Ryb25payBkaSB3aWxheWFoIHRlbmdhaCBkYW4gcGVyYWxhdGFuIGRpIHdpbGF5YWggdXRhcmEuDQoNCkJpYXlhIFBlciBVbml0IFJlbmRhaDogV2lsYXlhaCBUZW5nYWggbWVtaWxpa2kgYmlheWEgcGVuZ2lyaW1hbiB5YW5nIGN1a3VwIHJlbmRhaCB5YWl0dSBwYWthaWFuDQoNCktlc2ltcHVsYW5ueWEgV2lsYXlhaCB0ZW5nYWggbWVtaWlsa2kgV2FrdHUgcGVuZ2lyaW1hbiBjZXBhdCBkYWxhbSB3YWt0dSA0IGphbSB1bnR1ayBtZW5naXJpbSBiYXJhbmcgZWxla3Ryb25payBsYWx1IHdpbGF5YWggdGVuZ2FoIGp1Z2EgbWVtcHVueWFpIGJpYXlhIHlhbmcgc2FuZ2F0IHJlbmRhaCBkaSBiYW5kaW5nIGJpYXlhIHBlciB1bml0IGRpIHdpbGF5YWggbGFpbiB5YWl0dSA3LjgwMCB1bnR1ayBiYXJhbmcgcGFrYWlhbi4NCg0KIyBSZWZlcmVuc2kgDQoNCioqaHR0cHM6Ly9ib29rZG93bi5vcmcvZHNjaWVuY2VsYWJzL3N0YXRpc3Rpa2FfZGFzYXIvX2Jvb2svVWt1cmFuX1BlbnllYmFyYW5fRGF0YS5odG1sKioNCg0KYWdhciB0aWRhayBzYWxhaCBwYWhhbSByZWZlcmVuc2kgeWFuZyBzYXlhIGd1bmFrYW4gaXR1IG1lbmdndW5ha2FuIGRhdGEgZGFyaSB0dWdhcyB5YW5nIGFkYSBkaSBkYWxhbSBidWt1IHRlcnNlYnV0LCBzYXlhIHRpZGFrIG1lbmdhbWJpbCBkYXRhIGRhcmkgbHVhciBrYXJlbmEgZGF0YSBueWEgc3VkYWggbGVuZ2thcCBkaSBidWt1IGl0dSB0ZXJpbWFrYXNpaC4=