
UKURAN PEMUSATAN UNTUK DATA KELOMPOK
Pemusatan data adalah salah satu konsep penting dalam statistik yang
mengacu pada upaya untuk menentukan titik atau nilai tertentu yang dapat
mewakili seluruh data yang diamati dalam suatu kumpulan data. Dengan
kata lain, pemusatan data berfokus pada nilai yang dianggap sebagai
“pusat” atau “wakil” dari data tersebut. Nilai pusat ini bertujuan untuk
memberikan gambaran umum yang dapat menyederhanakan kumpulan data
sehingga lebih mudah dipahami dan dianalisis.
Konsep pemusatan data sangat berguna karena memungkinkan kita untuk
meringkas informasi yang kompleks menjadi satu nilai yang mewakili
seluruh dataset. Hal ini penting dalam banyak situasi, seperti
pengambilan keputusan, analisis tren, atau perbandingan antar kelompok
data. Pemusatan data membantu mengungkap pola umum dalam data,
memungkinkan kita untuk mengenali apakah data memiliki kecenderungan
tertentu atau apakah distribusi data tersebut menyimpang dari norma.
Beberapa ukuran pemusatan data yang umum digunakan meliputi mean
(rata-rata), median, dan modus. Mean menghitung rata-rata dari semua
nilai dalam dataset dengan membagi jumlah total nilai dengan banyaknya
data. Median adalah nilai tengah dalam dataset ketika data disusun
secara berurutan, sehingga lebih tahan terhadap pengaruh nilai ekstrem
(outlier). Modus, di sisi lain, adalah nilai yang paling sering muncul
dalam dataset.
Secara keseluruhan, pemusatan data merupakan alat statistik yang
sangat penting karena memberikan dasar untuk memahami dan
menginterpretasikan data dengan lebih efisien. Tanpa ukuran pemusatan,
analisis data sering kali menjadi lebih sulit dan memakan waktu karena
sifat data yang kompleks dan bervariasi.
Tujuan Pemusatan Data
Meringkas Data: Mempermudah penyajian dan interpretasi kumpulan
data yang besar dengan memberikan satu nilai yang mewakili.
Membandingkan Data: Membantu membandingkan dua atau lebih
kumpulan data melalui nilai pusatnya. Menentukan Karakteristik Data:
Memberikan gambaran umum tentang bagaimana data terdistribusi di sekitar
nilai pusat.
Membantu Prediksi: Dalam beberapa kasus, pemusatan data bisa
menjadi dasar untuk membuat prediksi atau keputusan berdasarkan data
masa lalu.
Jenis Jenis Ukuran Pemusatan Data
Tiga ukuran utama pemusatan data adalah mean, median, dan modus.
Setiap ukuran memiliki karakteristik dan kegunaan khusus, tergantung
pada jenis data dan tujuan analisis.
1. MEAN
Mean atau rata-rata adalah salah satu ukuran pemusatan data yang
paling umum digunakan dalam statistik. Mean menggambarkan nilai
rata-rata yang diperoleh dengan menjumlahkan semua nilai dalam suatu
kelompok data, kemudian membaginya dengan jumlah data tersebut. Mean
sering digunakan untuk mewakili data secara keseluruhan dan memberikan
gambaran umum tentang kecenderungan nilai dalam kumpulan data. Untuk
menghitung mean dari kelompok data, digunakan rumus berikut:
a. Rumus Mean
\[
\begin{equation}
\begin{split}
\text{Mean} \, (\bar{x}) &= \frac{\sum_{i=1}^n x_i}{n}
\end{split}
\end{equation}
\]
• ∑ 𝑋 adalah jumlah dari semua nilai data.
• 𝑛 adalah jumlah data.
1.2 Langkah-langkah untuk menghitung mean:
• Jumlahkan semua nilai dalam data.
• Bagi hasil jumlah dengan banyaknya data.
Misalkan kita memiliki data sebagai berikut: 11, 12, 13, 14, 15.
• Jumlahkan semua nilai:
11 + 12 + 13 + 14 + 15 = 65
• Bagi dengan jumlah data (𝑛 = 5):
\[
\text{Mean} = \frac{11 + 12 + 13 + 14 + 15}{5} = \frac{65}{5} = 13
\]
Jadi, mean dari data tersebut adalah 13.
1.3 Kelemahan
Salah satu kelemahan utama dari mean (rata-rata) adalah
sensitivitasnya terhadap nilai ekstrem atau outlier dalam dataset.
Outlier adalah nilai yang secara signifikan lebih tinggi atau lebih
rendah dibandingkan dengan nilai-nilai lainnya dalam data. Kehadiran
outlier dapat memengaruhi perhitungan mean secara substansial, sehingga
nilai mean menjadi tidak lagi representatif terhadap distribusi data
yang sebenarnya.
1.4 Pengoprasian dan Visualisasi Mean Menggunakan Boxplot dan
Histogram
1.4.1 Data
a. Import data csv
| Budi |
90 |
| Siti |
85 |
| Andi |
88 |
| Randi |
90 |
| Satya |
86 |
| Sokeh |
83 |
| Bayu |
92 |
| Fahim |
88 |
| Darman |
83 |
| Seno |
90 |
| Jamal |
81 |
| Romo |
84 |
Table data
| Budi |
90 |
| Siti |
85 |
| Andi |
88 |
| Randi |
90 |
| Satya |
86 |
| Sokeh |
83 |
| Bayu |
92 |
| Fahim |
88 |
| Darman |
83 |
| Seno |
90 |
| Jamal |
81 |
| Romo |
84 |
b. Pengoprasian dan Visualisasi Mean Menggunakan Boxplot
## Loading required package: ggplot2
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
c. Pengoprasian dan Visualisasi Mean Menggunakan Histogram
3. MODUS
Modus adalah salah satu ukuran pemusatan data yang digunakan untuk
menunjukkan nilai atau angka yang paling sering muncul dalam sebuah
kumpulan data. Dalam banyak kasus, modus dapat memberikan informasi yang
sangat berguna tentang kecenderungan umum atau kebiasaan yang ada dalam
data tersebut. Modus seringkali digunakan dalam berbagai bidang, seperti
statistik, pemasaran, dan sosiologi, untuk menggambarkan elemen yang
dominan atau sering muncul dalam suatu kelompok.
a. Rumus Modus
\[
\begin{equation}
\begin{split}
\text{Modus} &= L + \left( \frac{f_1 - f_0}{2f_1 - f_0 - f_2}
\right) \times h
\end{split}
\end{equation}
\]
$$ \[\begin{equation}
\begin{aligned}
L & : \text{Tepi bawah kelas modal (kelas dengan frekuensi
tertinggi)} \\
f_1 & : \text{Frekuensi kelas modal} \\
f_0 & : \text{Frekuensi kelas sebelum kelas modal} \\
f_2 & : \text{Frekuensi kelas setelah kelas modal} \\
h & : \text{Panjang interval kelas}
\end{aligned}
\end{equation}\]
$$ ###### b. Contoh
Misalnya, kita memiliki data nilai ujian berikut:
Di sini, ada dua nilai yang sering muncul, yaitu 80 dan 90, sehingga
data ini bimodal.
Jika data adalah:
Karena tidak ada nilai yang berulang, maka data ini tidak memiliki
modus.
c. Kelebihan Modus
Modus memiliki berbagai kelebihan yang menjadikannya ukuran pemusatan
data yang sangat berguna dalam berbagai jenis analisis, terutama yang
berhubungan dengan frekuensi kemunculan nilai tertentu dalam dataset.
Salah satu kegunaannya yang paling utama adalah untuk mengetahui nilai
yang paling sering terjadi, yang dapat memberikan wawasan penting
tentang pola atau kecenderungan dalam data.
3.1 Pengoprasian dan Visualisasi Modus Menggunakan Boxplot dan
Histogram
Table data
| Budi |
90 |
| Siti |
85 |
| Andi |
88 |
| Randi |
90 |
| Satya |
86 |
| Sokeh |
83 |
| Bayu |
92 |
| Fahim |
88 |
| Darman |
83 |
| Seno |
90 |
| Jamal |
81 |
| Romo |
84 |
3.1.1 Pengoprasian dan Visualisasi Modus Menggunakan Boxplot
3.1.2 Pengoprasian dan Visualisasi Modus Menggunakan Histogram
PEMUSATAN DATA DALAM BERBAGAI BIDANG
Ukuran pemusatan data, seperti mean, median, dan modus, sering
digunakan dalam berbagai bidang untuk menganalisis data dan mengambil
keputusan. Berikut adalah bagaimana ukuran pemusatan data diterapkan
dalam Bisnis, Kesehatan, dan Pendidikan.
1. Bisnis
Dalam dunia bisnis, ukuran pemusatan data digunakan untuk
menganalisis berbagai aspek operasi dan kinerja perusahaan. Berikut
adalah contoh penerapan pemusatan data dalam bisnis:
1.1 Mengukur Rata-Rata Penjualan Perusahaan
sering menggunakan rata-rata (mean) untuk menghitung rata-rata
penjualan dalam periode tertentu, seperti per bulan atau per tahun. Hal
ini membantu perusahaan memahami tren penjualan dan merencanakan
strategi masa depan.
- Contoh:Jika sebuah perusahaan ingin mengetahui rata-rata penjualan bulanan, mereka dapat menjumlahkan penjualan bulanan selama setahun dan membaginya dengan 12. Ini memberikan gambaran umum tentang kinerja perusahaan dalam periode tersebut.
Ekseskusi Kasus
Sebuah perusahaan e-commerce ingin mengetahui rata-rata penjualan
bulanan selama setengah tahun. Misalnya, penjualan bulanannya
adalah:
| Januari |
10.000 |
| Februari |
12.000 |
| Maret |
11.000 |
| April |
15.000 |
| Mei |
13.000 |
| Juni |
10.000 |
- Menghitung Rata-Rata: \[
\text{Rata-rata Penjualan} = \frac{10.000 + 12.000 + 11.000 + 15.000 +
13.000 + 10.000}{6} = 11.833 \, \text{unit}
\]




Kesimpulan
Rata-rata ini memberi perusahaan gambaran tentang volume penjualan
bulanan yang stabil dan dapat digunakan untuk merencanakan strategi
bisnis berikutnya.
1.2 Analisis Harga Saham Di pasar saham
investor sering menggunakan nilai tengah (median) untuk memahami
pergerakan harga saham yang lebih stabil, karena median tidak
terpengaruh oleh fluktuasi ekstrem yang dapat menyebabkan nilai
rata-rata menjadi bias.
- Contoh: Jika sebuah saham mengalami lonjakan harga yang sangat tinggi atau rendah dalam periode tertentu, median dapat memberikan gambaran yang lebih akurat tentang harga tengah saham tersebut.
Eksekusi Kasus
| Senin |
Rp50.000,00 |
| Selasa |
Rp48.000,00 |
| Rabu |
Rp51.000,00 |
| Kamis |
Rp53.000,00 |
| Jumat |
Rp50.500,00 |
| Sabtu |
Rp70.000,00 |
| Minggu |
Rp55.000,00 |
Urutkan harga saham: 48.000, 50.000, 50.500, 51.000, 53.000, 55.000,
70.000.
## [1] "Median Harga Saham (Dengan Outlier): 51000"
## [1] "Median Harga Saham (Tanpa Outlier): 50750"




Kesimpulan
Nilai tengah (median) adalah 51.000, yang menunjukkan harga saham
yang paling representatif, mengurangi pengaruh fluktuasi ekstrem.
1.3 Identifikasi Tren dalam Preferensi Konsumen Bisnis dengan
Modus
sering menggunakan modus untuk mengetahui produk atau layanan yang
paling sering dipilih oleh konsumen. Ini membantu dalam pengembangan
produk atau kampanye pemasaran yang lebih sesuai dengan preferensi
pelanggan.
- Contoh:Jika sebuah toko ingin mengetahui produk mana yang paling sering dibeli, mereka dapat menghitung modus berdasarkan data penjualan.
Kesimpulan
Modus: Modus dari data ini adalah produk B dan C, karena keduanya
memiliki jumlah pembelian terbanyak (60), yang membantu toko fokus pada
pemasaran kedua produk tersebut.
2. Kesehatan
Di bidang kesehatan, ukuran pemusatan data sangat penting untuk
menganalisis pola penyakit, efisiensi perawatan kesehatan, dan
distribusi variabel kesehatan lainnya. Berikut adalah contoh penerapan
ukuran pemusatan data dalam kesehatan:
2.1 Pengukuran Rata-Rata Usia Pasien
Dalam analisis demografis rumah sakit atau klinik, rata-rata usia
pasien digunakan untuk memahami profil usia populasi yang dilayani, yang
penting untuk perencanaan layanan kesehatan.
- Contoh: Rumah sakit dapat menghitung rata-rata usia pasien untuk merencanakan fasilitas atau perawatan yang lebih sesuai dengan kelompok usia tertentu.
Ekseskusi Kasus
Sebuah rumah sakit ingin mengetahui rata-rata usia pasien yang datang
selama seminggu. Data usia pasien adalah:
25 tahun
30 tahun
35 tahun
40 tahun
45 tahun
\[
\text{Rata-rata Usia} = \frac{25 + 30 + 35 + 40 + 45}{5} = 35 \,
\text{tahun}
\]




Penjelasan
Dengan rata-rata usia 35 tahun, rumah sakit dapat merencanakan
layanan yang lebih tepat, seperti fasilitas medis atau pengobatan yang
sesuai dengan kelompok usia ini.
2.3 Frekuensi Penyakit atau Gejala Modus
digunakan untuk mengetahui gejala atau penyakit yang paling sering
terjadi dalam populasi tertentu. Ini sangat penting dalam epidemiologi
untuk menentukan pola penyebaran penyakit.
- Contoh: Jika banyak pasien yang datang dengan gejala demam dan batuk, modus akan menunjukkan bahwa ini adalah gejala yang paling sering dilaporkan dalam periode tertentu.
Eksekusi Kasus
Di rumah sakit, dokter ingin mengetahui gejala yang paling umum dari
pasien flu. Data gejala yang tercatat adalah:
Demam = 30 pasien Batuk = 50 pasien Sakit kepala = 40 pasien
\[
\text{Demam: 30 pasien, Batuk: 50 pasien, Sakit kepala: 40 pasien} \\
\text{Modus: Batuk (paling sering dilaporkan)}
\]
## [1] "Modus (Dengan Outlier): Batuk"
## [1] "Modus (Tanpa Outlier): Sakit Kepala"



#### Menghitung Modus:
Modus dalam data ini adalah Batuk, karena batuk dilaporkan oleh 50
pasien, lebih banyak dibandingkan gejala lainnya.
Kesimpulan
Dengan mengetahui gejala yang paling sering dilaporkan (batuk), rumah
sakit dapat lebih fokus dalam memberikan penanganan yang tepat, seperti
persediaan obat atau vaksinasi yang lebih banyak.
3. Pendidikan
Dalam bidang pendidikan, ukuran pemusatan data digunakan untuk
mengevaluasi kinerja siswa, menganalisis hasil ujian, dan merancang
kebijakan pendidikan. Berikut adalah contoh penerapan ukuran pemusatan
data dalam pendidikan:
3.1 Rata-Rata Nilai Ujian Rata-rata nilai ujian
sering digunakan untuk mengevaluasi kinerja siswa dalam suatu ujian
atau tugas besar. Ini memberikan gambaran umum tentang sejauh mana siswa
memahami materi yang diuji.
- Contoh: Jika sekolah ingin mengetahui rata-rata nilai ujian matematika untuk seluruh kelas, mereka dapat menjumlahkan nilai ujian dan membaginya dengan jumlah siswa.
Eksekusi Kasus
Dalam ujian matematika kelas 12, berikut adalah nilai yang diperoleh
oleh siswa:
\[
\text{Rata-rata Nilai} = \frac{80 + 85 + 90 + 70 + 95}{5} = 84 \,
\text{poin}
\]
## [1] "Mean Nilai (Dengan Outlier): 84"
## [1] "Mean Nilai (Tanpa Outlier): 87.5"




Penjelasan
Dengan rata-rata nilai 84 poin, guru dapat mengetahui kinerja
rata-rata siswa dan menentukan apakah materi perlu penyesuaian atau ada
area yang perlu diperbaiki.
3.3 Frekuensi Tingkat Keterampilan Modus
Digunakan untuk mengetahui tingkat keterampilan atau pengetahuan yang
paling sering dimiliki oleh siswa dalam suatu kelompok. Ini dapat
membantu pendidik dalam merancang kurikulum yang lebih efektif.
- Contoh: Jika sebagian besar siswa memiliki pemahaman yang baik dalam topik tertentu, maka modus akan menunjukkan tingkat penguasaan yang paling umum di kelas tersebut.
Eksekusi Kasus
Seorang guru ingin mengetahui nilai tengah dari ujian akhir siswa.
Nilai yang diperoleh adalah:
A = 10 Siswa
B = 20 Siswa
C = 5 Siswa
\[
\text{Nilai A: 10 siswa, Nilai B: 20 siswa, Nilai C: 5 siswa} \\
\text{Modus: Nilai B (paling sering muncul)}
\]
## [1] "Modus: B"
## [1] "Modus (Tanpa Outlier): A"




Menghitung Modus:
Modus adalah Nilai B, karena 20 siswa mendapatkan nilai ini, yang
merupakan jumlah terbanyak.
Kesimpulan
Dengan mengetahui bahwa nilai B adalah yang paling sering muncul,
guru dapat mengevaluasi lebih lanjut kemampuan menulis siswa dan
menyesuaikan cara pengajaran untuk meningkatkan keterampilan siswa.
LS0tDQp0aXRsZTogIlByYWt0aWt1bSBQZW11c2F0YW4gRGF0YSINCnN1YnRpdGxlOiAiU3RhdGlzdGlrYSBEYXNhciINCmF1dGhvcjogIkRhZGFuIFJhbWRhbiBIaWRheWF0ICg1MjI0MDAyOCkiDQpkYXRlOiAgImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjogICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9qdWJhL3JtZGZvcm1hdHMNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNzczogInN0eWxlLmNzcyINCi0tLQ0KDQo8aW1nIHNyYz0ic3RhdGlzdGlrYS5qcGciIHdpZHRoPSI5MDAiIHN0eWxlPSJkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyIgYWx0PSIiPg0KDQoNCiMgVUtVUkFOIFBFTVVTQVRBTiBVTlRVSyBEQVRBIEtFTE9NUE9LDQoNClBlbXVzYXRhbiBkYXRhIGFkYWxhaCBzYWxhaCBzYXR1IGtvbnNlcCBwZW50aW5nIGRhbGFtIHN0YXRpc3RpayB5YW5nIG1lbmdhY3UgcGFkYSB1cGF5YSB1bnR1ayBtZW5lbnR1a2FuIHRpdGlrIGF0YXUgbmlsYWkgdGVydGVudHUgeWFuZyBkYXBhdCBtZXdha2lsaSBzZWx1cnVoIGRhdGEgeWFuZyBkaWFtYXRpIGRhbGFtIHN1YXR1IGt1bXB1bGFuIGRhdGEuIERlbmdhbiBrYXRhIGxhaW4sIHBlbXVzYXRhbiBkYXRhIGJlcmZva3VzIHBhZGEgbmlsYWkgeWFuZyBkaWFuZ2dhcCBzZWJhZ2FpICJwdXNhdCIgYXRhdSAid2FraWwiIGRhcmkgZGF0YSB0ZXJzZWJ1dC4gTmlsYWkgcHVzYXQgaW5pIGJlcnR1anVhbiB1bnR1ayBtZW1iZXJpa2FuIGdhbWJhcmFuIHVtdW0geWFuZyBkYXBhdCBtZW55ZWRlcmhhbmFrYW4ga3VtcHVsYW4gZGF0YSBzZWhpbmdnYSBsZWJpaCBtdWRhaCBkaXBhaGFtaSBkYW4gZGlhbmFsaXNpcy4NCg0KS29uc2VwIHBlbXVzYXRhbiBkYXRhIHNhbmdhdCBiZXJndW5hIGthcmVuYSBtZW11bmdraW5rYW4ga2l0YSB1bnR1ayBtZXJpbmdrYXMgaW5mb3JtYXNpIHlhbmcga29tcGxla3MgbWVuamFkaSBzYXR1IG5pbGFpIHlhbmcgbWV3YWtpbGkgc2VsdXJ1aCBkYXRhc2V0LiBIYWwgaW5pIHBlbnRpbmcgZGFsYW0gYmFueWFrIHNpdHVhc2ksIHNlcGVydGkgcGVuZ2FtYmlsYW4ga2VwdXR1c2FuLCBhbmFsaXNpcyB0cmVuLCBhdGF1IHBlcmJhbmRpbmdhbiBhbnRhciBrZWxvbXBvayBkYXRhLiBQZW11c2F0YW4gZGF0YSBtZW1iYW50dSBtZW5ndW5na2FwIHBvbGEgdW11bSBkYWxhbSBkYXRhLCBtZW11bmdraW5rYW4ga2l0YSB1bnR1ayBtZW5nZW5hbGkgYXBha2FoIGRhdGEgbWVtaWxpa2kga2VjZW5kZXJ1bmdhbiB0ZXJ0ZW50dSBhdGF1IGFwYWthaCBkaXN0cmlidXNpIGRhdGEgdGVyc2VidXQgbWVueWltcGFuZyBkYXJpIG5vcm1hLg0KDQpCZWJlcmFwYSB1a3VyYW4gcGVtdXNhdGFuIGRhdGEgeWFuZyB1bXVtIGRpZ3VuYWthbiBtZWxpcHV0aSBtZWFuIChyYXRhLXJhdGEpLCBtZWRpYW4sIGRhbiBtb2R1cy4gTWVhbiBtZW5naGl0dW5nIHJhdGEtcmF0YSBkYXJpIHNlbXVhIG5pbGFpIGRhbGFtIGRhdGFzZXQgZGVuZ2FuIG1lbWJhZ2kganVtbGFoIHRvdGFsIG5pbGFpIGRlbmdhbiBiYW55YWtueWEgZGF0YS4gTWVkaWFuIGFkYWxhaCBuaWxhaSB0ZW5nYWggZGFsYW0gZGF0YXNldCBrZXRpa2EgZGF0YSBkaXN1c3VuIHNlY2FyYSBiZXJ1cnV0YW4sIHNlaGluZ2dhIGxlYmloIHRhaGFuIHRlcmhhZGFwIHBlbmdhcnVoIG5pbGFpIGVrc3RyZW0gKG91dGxpZXIpLiBNb2R1cywgZGkgc2lzaSBsYWluLCBhZGFsYWggbmlsYWkgeWFuZyBwYWxpbmcgc2VyaW5nIG11bmN1bCBkYWxhbSBkYXRhc2V0Lg0KDQpTZWNhcmEga2VzZWx1cnVoYW4sIHBlbXVzYXRhbiBkYXRhIG1lcnVwYWthbiBhbGF0IHN0YXRpc3RpayB5YW5nIHNhbmdhdCBwZW50aW5nIGthcmVuYSBtZW1iZXJpa2FuIGRhc2FyIHVudHVrIG1lbWFoYW1pIGRhbiBtZW5naW50ZXJwcmV0YXNpa2FuIGRhdGEgZGVuZ2FuIGxlYmloIGVmaXNpZW4uIFRhbnBhIHVrdXJhbiBwZW11c2F0YW4sIGFuYWxpc2lzIGRhdGEgc2VyaW5nIGthbGkgbWVuamFkaSBsZWJpaCBzdWxpdCBkYW4gbWVtYWthbiB3YWt0dSBrYXJlbmEgc2lmYXQgZGF0YSB5YW5nIGtvbXBsZWtzIGRhbiBiZXJ2YXJpYXNpLg0KDQojIyBUdWp1YW4gUGVtdXNhdGFuIERhdGENCg0KMS4gTWVyaW5na2FzIERhdGE6IE1lbXBlcm11ZGFoIHBlbnlhamlhbiBkYW4gaW50ZXJwcmV0YXNpIGt1bXB1bGFuIGRhdGEgeWFuZyBiZXNhciBkZW5nYW4gbWVtYmVyaWthbiBzYXR1IG5pbGFpIHlhbmcgbWV3YWtpbGkuDQoNCjIuIE1lbWJhbmRpbmdrYW4gRGF0YTogTWVtYmFudHUgbWVtYmFuZGluZ2thbiBkdWEgYXRhdSBsZWJpaCBrdW1wdWxhbiBkYXRhIG1lbGFsdWkgbmlsYWkgcHVzYXRueWEuDQpNZW5lbnR1a2FuIEthcmFrdGVyaXN0aWsgRGF0YTogTWVtYmVyaWthbiBnYW1iYXJhbiB1bXVtIHRlbnRhbmcgYmFnYWltYW5hIGRhdGEgdGVyZGlzdHJpYnVzaSBkaSBzZWtpdGFyIG5pbGFpIHB1c2F0Lg0KDQozLiBNZW1iYW50dSBQcmVkaWtzaTogRGFsYW0gYmViZXJhcGEga2FzdXMsIHBlbXVzYXRhbiBkYXRhIGJpc2EgbWVuamFkaSBkYXNhciB1bnR1ayBtZW1idWF0IHByZWRpa3NpIGF0YXUga2VwdXR1c2FuIGJlcmRhc2Fya2FuIGRhdGEgbWFzYSBsYWx1Lg0KDQojIyBKZW5pcyBKZW5pcyBVa3VyYW4gUGVtdXNhdGFuIERhdGEgDQoNClRpZ2EgdWt1cmFuIHV0YW1hIHBlbXVzYXRhbiBkYXRhIGFkYWxhaCBtZWFuLCBtZWRpYW4sIGRhbiBtb2R1cy4gU2V0aWFwIHVrdXJhbiBtZW1pbGlraSBrYXJha3RlcmlzdGlrIGRhbiBrZWd1bmFhbiBraHVzdXMsIHRlcmdhbnR1bmcgcGFkYSBqZW5pcyBkYXRhIGRhbiB0dWp1YW4gYW5hbGlzaXMuDQoNCg0KIyMjIDEuIE1FQU4gDQoNCk1lYW4gYXRhdSByYXRhLXJhdGEgYWRhbGFoIHNhbGFoIHNhdHUgdWt1cmFuIHBlbXVzYXRhbiBkYXRhIHlhbmcgcGFsaW5nIHVtdW0gZGlndW5ha2FuIGRhbGFtIHN0YXRpc3Rpay4gTWVhbiBtZW5nZ2FtYmFya2FuIG5pbGFpIHJhdGEtcmF0YSB5YW5nIGRpcGVyb2xlaCBkZW5nYW4gbWVuanVtbGFoa2FuIHNlbXVhIG5pbGFpIGRhbGFtIHN1YXR1IGtlbG9tcG9rIGRhdGEsIGtlbXVkaWFuIG1lbWJhZ2lueWEgZGVuZ2FuIGp1bWxhaCBkYXRhIHRlcnNlYnV0LiBNZWFuIHNlcmluZyBkaWd1bmFrYW4gdW50dWsgbWV3YWtpbGkgZGF0YSBzZWNhcmEga2VzZWx1cnVoYW4gZGFuIG1lbWJlcmlrYW4gZ2FtYmFyYW4gdW11bSB0ZW50YW5nIGtlY2VuZGVydW5nYW4gbmlsYWkgZGFsYW0ga3VtcHVsYW4gZGF0YS4gVW50dWsgbWVuZ2hpdHVuZyBtZWFuIGRhcmkga2Vsb21wb2sgZGF0YSwgZGlndW5ha2FuIHJ1bXVzIGJlcmlrdXQ6DQoNCiMjIyMjIyBhLiBSdW11cyBNZWFuDQoNCiQkIA0KXGJlZ2lue2VxdWF0aW9ufQ0KXGJlZ2lue3NwbGl0fQ0KXHRleHR7TWVhbn0gXCwgKFxiYXJ7eH0pICY9IFxmcmFje1xzdW1fe2k9MX1ebiB4X2l9e259DQpcZW5ke3NwbGl0fQ0KXGVuZHtlcXVhdGlvbn0NCiQkDQogICANCiAgICDigKIg4oiRIPCdkYsgYWRhbGFoIGp1bWxhaCBkYXJpIHNlbXVhIG5pbGFpIGRhdGEuDQoNCiAgICDigKIg8J2RmyBhZGFsYWgganVtbGFoIGRhdGEuDQoNCg0KIyMjIyAxLjIgTGFuZ2thaC1sYW5na2FoIHVudHVrIG1lbmdoaXR1bmcgbWVhbjoNCg0KICAgIOKAoiBKdW1sYWhrYW4gc2VtdWEgbmlsYWkgZGFsYW0gZGF0YS4NCg0KICAgIOKAoiBCYWdpIGhhc2lsIGp1bWxhaCBkZW5nYW4gYmFueWFrbnlhIGRhdGEuDQoNCg0KICBNaXNhbGthbiBraXRhIG1lbWlsaWtpIGRhdGEgc2ViYWdhaSBiZXJpa3V0OiAxMSwgMTIsIDEzLCAxNCwgMTUuDQoNCiAgICDigKIgSnVtbGFoa2FuIHNlbXVhIG5pbGFpOg0KICAgIDExICsgMTIgKyAxMyArIDE0ICsgMTUgPSA2NQ0KDQoNCiAgICDigKIgQmFnaSBkZW5nYW4ganVtbGFoIGRhdGEgKPCdkZsgPSA1KToNCg0KJCQNClx0ZXh0e01lYW59ID0gXGZyYWN7MTEgKyAxMiArIDEzICsgMTQgKyAxNX17NX0gPSBcZnJhY3s2NX17NX0gPSAxMw0KJCQNCg0KDQogIEphZGksIG1lYW4gZGFyaSBkYXRhIHRlcnNlYnV0IGFkYWxhaCAxMy4NCiAgDQojIyMjIDEuMyBLZWxlbWFoYW4gDQoNClNhbGFoIHNhdHUga2VsZW1haGFuIHV0YW1hIGRhcmkgbWVhbiAocmF0YS1yYXRhKSBhZGFsYWggc2Vuc2l0aXZpdGFzbnlhIHRlcmhhZGFwIG5pbGFpIGVrc3RyZW0gYXRhdSBvdXRsaWVyIGRhbGFtIGRhdGFzZXQuIE91dGxpZXIgYWRhbGFoIG5pbGFpIHlhbmcgc2VjYXJhIHNpZ25pZmlrYW4gbGViaWggdGluZ2dpIGF0YXUgbGViaWggcmVuZGFoIGRpYmFuZGluZ2thbiBkZW5nYW4gbmlsYWktbmlsYWkgbGFpbm55YSBkYWxhbSBkYXRhLiBLZWhhZGlyYW4gb3V0bGllciBkYXBhdCBtZW1lbmdhcnVoaSBwZXJoaXR1bmdhbiBtZWFuIHNlY2FyYSBzdWJzdGFuc2lhbCwgc2VoaW5nZ2EgbmlsYWkgbWVhbiBtZW5qYWRpIHRpZGFrIGxhZ2kgcmVwcmVzZW50YXRpZiB0ZXJoYWRhcCBkaXN0cmlidXNpIGRhdGEgeWFuZyBzZWJlbmFybnlhLg0KDQoNCiMjIyMgMS40IFBlbmdvcHJhc2lhbiBkYW4gVmlzdWFsaXNhc2kgTWVhbiBNZW5nZ3VuYWthbiBCb3hwbG90IGRhbiBIaXN0b2dyYW0NCg0KIyMjIyMgMS40LjEgRGF0YQ0KDQojIyMjIyMgYS4gSW1wb3J0IGRhdGEgY3N2DQoNCmBgYHtyLCBtYXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KIyBNZW11YXQgZGF0YXNldCBkYXJpIENTVg0KZGF0YSA8LSByZWFkLmNzdigiRGF0YSBTYW1wbGUgOS5jc3YiLCBzZXAgPSAiOyIpDQoNCiMgTWVuYW1waWxrYW4gZGF0YSBhd2FsIGRlbmdhbiBrYWJsZQ0KbGlicmFyeShrbml0cikgIA0Ka2FibGUoZGF0YSkgICMgTWVuZ2d1bmFrYW4gJ2RhdGEnIHNlYmFnYWkgbmFtYSB2YXJpYWJlbA0KYGBgDQoNClRhYmxlIGRhdGEgDQoNCnwgTmFtYSAgICAgIHwgIE5pbGFpIHwNCnwtLS0tLS0tLS0tLXwtLS0tLS0tLXwNCnwgQnVkaSAgICAgIHwgIDkwICAgIHwNCnwgU2l0aSAgICAgIHwgIDg1ICAgIHwNCnwgQW5kaSAgICAgIHwgIDg4ICAgIHwNCnwgUmFuZGkgICAgIHwgIDkwICAgIHwNCnwgU2F0eWEgICAgIHwgIDg2ICAgIHwNCnwgU29rZWggICAgIHwgIDgzICAgIHwNCnwgQmF5dSAgICAgIHwgIDkyICAgIHwNCnwgRmFoaW0gICAgIHwgIDg4ICAgIHwNCnwgRGFybWFuICAgIHwgIDgzICAgIHwNCnwgU2VubyAgICAgIHwgIDkwICAgIHwNCnwgSmFtYWwgICAgIHwgIDgxICAgIHwNCnwgUm9tbyAgICAgIHwgIDg0ICAgIHwNCg0KIyMjIyMgYi4gUGVuZ29wcmFzaWFuIGRhbiBWaXN1YWxpc2FzaSBNZWFuIE1lbmdndW5ha2FuIEJveHBsb3QgDQoNCmBgYHtyLCBtYXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQojIE1lbXVhdCBsaWJyYXJ5DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBEYXRhOiBuaWxhaSBtYWhhc2lzd2EgeWFuZyBkaWJlcmlrYW4NCm5hbWEgPC0gYygiQnVkaSIsICJTaXRpIiwgIkFuZGkiLCAiUmFuZGkiLCAiU2F0eWEiLCAiU29rZWgiLCAiQmF5dSIsICJGYWhpbSIsICJEYXJtYW4iLCAiU2VubyIsICJKYW1hbCIsICJSb21vIikNCm5pbGFpIDwtIGMoOTAsIDg1LCA4OCwgOTAsIDg2LCA4MywgOTIsIDg4LCA4MywgOTAsIDgxLCA4NCkNCg0KIyBVbnR1ayBrZXBlcmx1YW4gYm94cGxvdCwga2l0YSBidWF0IGR1YSBza2VuYXJpbzogZGVuZ2FuIG91dGxpZXJzIGRhbiB0YW5wYSBvdXRsaWVycw0KZGF0YV9kZW5nYW5fb3V0bGllcnMgPC0gYyhuaWxhaSwgNTUpICAjIE1lbmFtYmFoa2FuIG91dGxpZXINCmRhdGFfdGFucGFfb3V0bGllcnMgPC0gbmlsYWkgICMgVGFucGEgb3V0bGllcnMNCg0KIyBNZW5naGl0dW5nIHJhdGEtcmF0YSB1bnR1ayBrZWR1YSBkYXRhc2V0DQptZWFuX2Rlbmdhbl9vdXRsaWVycyA8LSBtZWFuKGRhdGFfZGVuZ2FuX291dGxpZXJzKQ0KbWVhbl90YW5wYV9vdXRsaWVycyA8LSBtZWFuKGRhdGFfdGFucGFfb3V0bGllcnMpDQoNCiMgTWVuZ2dhYnVuZ2thbiBkYXRhIGtlIGRhbGFtIHNhdHUgZGF0YSBmcmFtZSB1bnR1ayB2aXN1YWxpc2FzaQ0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBOaWxhaSA9IGMoZGF0YV9kZW5nYW5fb3V0bGllcnMsIGRhdGFfdGFucGFfb3V0bGllcnMpLA0KICBLZWxvbXBvayA9IHJlcChjKCJEZW5nYW4gT3V0bGllcnMiLCAiVGFucGEgT3V0bGllcnMiKSwNCiAgICAgICAgICAgICAgICAgdGltZXMgPSBjKGxlbmd0aChkYXRhX2Rlbmdhbl9vdXRsaWVycyksIGxlbmd0aChkYXRhX3RhbnBhX291dGxpZXJzKSkpDQopDQoNCiMgTWVtYnVhdCBib3hwbG90IG1lbmdndW5ha2FuIFBsb3RseSBkZW5nYW4gb3V0bGllcnMgZGl0YW1waWxrYW4NCnBsb3QgPC0gcGxvdF9seSgNCiAgZGF0YSwNCiAgeSA9IH5OaWxhaSwNCiAgY29sb3IgPSB+S2Vsb21wb2ssICAjIE1lbmdndW5ha2FuIGtlbG9tcG9rIHVudHVrIHdhcm5hDQogIGNvbG9ycyA9IGMoInNreWJsdWUiLCAibGlnaHRibHVlIiksICAjIFdhcm5hIHNvZnQgdmFyaWFuIGJpcnUNCiAgdHlwZSA9ICJib3giLA0KICBib3hwb2ludHMgPSAib3V0bGllcnMiICAjIE1lbmFtcGlsa2FuIHRpdGlrIG91dGxpZXJzDQopICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiUGVuZ2FydWggT3V0bGllcnMgdGVyaGFkYXAgTmlsYWkiLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJOaWxhaSIpLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJLZWxvbXBvayIpLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiRGVuZ2FuIE91dGxpZXJzIiwNCiAgICAgICAgeSA9IG1lYW5fZGVuZ2FuX291dGxpZXJzLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lYW46Iiwgcm91bmQobWVhbl9kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKSwNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiVGFucGEgT3V0bGllcnMiLA0KICAgICAgICB5ID0gbWVhbl90YW5wYV9vdXRsaWVycywNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWFuOiIsIHJvdW5kKG1lYW5fdGFucGFfb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKQ0KICAgICkNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3QNCg0KDQpgYGANCg0KIyMjIyMgYy4gUGVuZ29wcmFzaWFuIGRhbiBWaXN1YWxpc2FzaSBNZWFuIE1lbmdndW5ha2FuIEhpc3RvZ3JhbQ0KDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkgeWFuZyBkaXBlcmx1a2FuDQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBEYXRhOiBEdWEgc2tlbmFyaW8sIHNhdHUgZGVuZ2FuIG91dGxpZXJzIHlhbmcgYmFydSBkaXNlc3VhaWthbiwgc2F0dSB0YW5wYSBvdXRsaWVycw0KZGF0YV9kZW5nYW5fb3V0bGllcnMgPC0gYyg1LCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxOCwgMTgsIDE5LCAyMCwgMjIsIDIzLCAxNykgDQpkYXRhX3RhbnBhX291dGxpZXJzIDwtIGMoMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE4LCAxOCwgMTksIDIwLCAyMiwgMjMsIDI0KSANCg0KIyBEYXRhIHlhbmcgZGliZXJpa2FuDQpkYXRhX25pbGFpIDwtIGMoOTAsIDg1LCA4OCwgOTAsIDg2LCA4MywgOTIsIDg4LCA4MywgOTAsIDgxLCA4NCkNCg0KIyBNZW1idWF0IGRlbnNpdHkgcGxvdCB1bnR1ayBtYXNpbmctbWFzaW5nIGRhdGFzZXQNCmRlbnNpdHlfZGVuZ2FuX291dGxpZXJzIDwtIGRlbnNpdHkoZGF0YV9kZW5nYW5fb3V0bGllcnMpDQpkZW5zaXR5X3RhbnBhX291dGxpZXJzIDwtIGRlbnNpdHkoZGF0YV90YW5wYV9vdXRsaWVycykNCg0KIyBQYXN0aWthbiB0aWRhayBhZGEgbmlsYWkgbmVnYXRpZiBkaSB4IGRhbiB5DQpkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR4IDwtIHBtYXgoMCwgZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeCkNCmRlbnNpdHlfdGFucGFfb3V0bGllcnMkeCA8LSBwbWF4KDAsIGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeCkNCg0KIyBNZW5naGl0dW5nIHJhdGEtcmF0YSAoTWVhbikNCm1lYW5fZGVuZ2FuX291dGxpZXJzIDwtIG1lYW4oZGF0YV9kZW5nYW5fb3V0bGllcnMpDQptZWFuX3RhbnBhX291dGxpZXJzIDwtIG1lYW4oZGF0YV90YW5wYV9vdXRsaWVycykNCm1lYW5fbmlsYWkgPC0gbWVhbihkYXRhX25pbGFpKQ0KDQojIE1lbWJ1YXQgcGxvdCBtZW5nZ3VuYWthbiBQbG90bHkNCnBsb3QgPC0gcGxvdF9seSgpICU+JQ0KICAjIE1lbmFtYmFoa2FuIGRlbnNpdHkgcGxvdCB1bnR1ayBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IH5kZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR4LA0KICAgIHkgPSB+ZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSwNCiAgICB0eXBlID0gJ3NjYXR0ZXInLA0KICAgIG1vZGUgPSAnbGluZXMnLA0KICAgIG5hbWUgPSAiRGVuZ2FuIE91dGxpZXJzIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjgpJywgd2lkdGggPSAyKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGRlbnNpdHkgcGxvdCB1bnR1ayBkYXRhc2V0IHRhbnBhIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gfmRlbnNpdHlfdGFucGFfb3V0bGllcnMkeCwNCiAgICB5ID0gfmRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSwNCiAgICB0eXBlID0gJ3NjYXR0ZXInLA0KICAgIG1vZGUgPSAnbGluZXMnLA0KICAgIG5hbWUgPSAiVGFucGEgT3V0bGllcnMiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMzgsIDE2NiwgOTEsIDAuOCknLCB3aWR0aCA9IDIpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZ2FyaXMgcmF0YS1yYXRhIHVudHVrIGRhdGFzZXQgZGVuZ2FuIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gYyhtZWFuX2Rlbmdhbl9vdXRsaWVycywgbWVhbl9kZW5nYW5fb3V0bGllcnMpLA0KICAgIHkgPSBjKDAsIG1heChkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5KSksDQogICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICBtb2RlID0gImxpbmVzIiwNCiAgICBuYW1lID0gIlJhdGEtcmF0YSAoRGVuZ2FuIE91dGxpZXJzKSIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC42KScsIGRhc2ggPSAnZGFzaCcpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZ2FyaXMgcmF0YS1yYXRhIHVudHVrIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSBjKG1lYW5fdGFucGFfb3V0bGllcnMsIG1lYW5fdGFucGFfb3V0bGllcnMpLA0KICAgIHkgPSBjKDAsIG1heChkZW5zaXR5X3RhbnBhX291dGxpZXJzJHkpKSwNCiAgICB0eXBlID0gInNjYXR0ZXIiLA0KICAgIG1vZGUgPSAibGluZXMiLA0KICAgIG5hbWUgPSAiUmF0YS1yYXRhIChUYW5wYSBPdXRsaWVycykiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMzgsIDE2NiwgOTEsIDAuNiknLCBkYXNoID0gJ2Rhc2gnKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIHJhdGEtcmF0YSB1bnR1ayBkYXRhIG5pbGFpIHlhbmcgZGliZXJpa2FuDQogIGFkZF90cmFjZSgNCiAgICB4ID0gYyhtZWFuX25pbGFpLCBtZWFuX25pbGFpKSwNCiAgICB5ID0gYygwLCBtYXgoZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5KSksICAjIEd1bmFrYW4gbmlsYWkgbWF4IGRhcmkgZGVuc2l0eV90YW5wYV9vdXRsaWVycyB1bnR1ayB5DQogICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICBtb2RlID0gImxpbmVzIiwNCiAgICBuYW1lID0gIlJhdGEtcmF0YSAoRGF0YSBOaWxhaSkiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjU1LCAxNjUsIDAsIDAuOCknLCBkYXNoID0gJ2RvdCcpDQogICkgJT4lDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJQZW5nYXJ1aCBPdXRsaWVycyB0ZXJoYWRhcCBNZWFuIHBhZGEgRGVuc2l0eSBQbG90IiwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiTmlsYWkiKSwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiS2VwYWRhdGFuIiksDQogICAgYW5ub3RhdGlvbnMgPSBsaXN0KA0KICAgICAgIyBBbm90YXNpIHVudHVrIHJhdGEtcmF0YSBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1lYW5fZGVuZ2FuX291dGxpZXJzLA0KICAgICAgICB5ID0gbWF4KGRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHkpICogMC45LA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lYW4gKERlbmdhbiBPdXRsaWVycyk6Iiwgcm91bmQobWVhbl9kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC0zMCwgIyBQb3Npc2kgdGVrcyBzZWRpa2l0IGxlYmloIHRpbmdnaSBkYXJpIGdhcmlzDQogICAgICAgIGZvbnQgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuOCknLCBzaXplID0gMTIpDQogICAgICApLA0KICAgICAgIyBBbm90YXNpIHVudHVrIHJhdGEtcmF0YSBkYXRhc2V0IHRhbnBhIG91dGxpZXJzDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gbWVhbl90YW5wYV9vdXRsaWVycywNCiAgICAgICAgeSA9IG1heChkZW5zaXR5X3RhbnBhX291dGxpZXJzJHkpICogMC45LA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lYW4gKFRhbnBhIE91dGxpZXJzKToiLCByb3VuZChtZWFuX3RhbnBhX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDIsDQogICAgICAgIGF4ID0gMCwNCiAgICAgICAgYXkgPSAtNDUsICMgUG9zaXNpIHRla3Mgc2VkaWtpdCBsZWJpaCB0aW5nZ2kgZGFyaSBnYXJpcw0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKSwNCiAgICAgICMgQW5vdGFzaSB1bnR1ayByYXRhLXJhdGEgZGF0YSBuaWxhaQ0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1lYW5fbmlsYWksDQogICAgICAgIHkgPSBtYXgoZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5KSAqIDAuOCwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWFuIChEYXRhIE5pbGFpKToiLCByb3VuZChtZWFuX25pbGFpLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDIsDQogICAgICAgIGF4ID0gMCwNCiAgICAgICAgYXkgPSAtNDUsICMgUG9zaXNpIHRla3Mgc2VkaWtpdCBsZWJpaCB0aW5nZ2kgZGFyaSBnYXJpcw0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDI1NSwgMTY1LCAwLCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKQ0KICAgICkNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3QNCg0KYGBgDQoNCiMjIyAyLiBNRURJQU4NCg0KTWVkaWFuIGFkYWxhaCBzYWxhaCBzYXR1IHVrdXJhbiBwZW11c2F0YW4gZGF0YSB5YW5nIG1lbnVuanVra2FuIG5pbGFpIHRlbmdhaCBkYXJpIHN1YXR1IGt1bXB1bGFuIGRhdGEgc2V0ZWxhaCBkYXRhIHRlcnNlYnV0IGRpdXJ1dGthbiBkYXJpIG5pbGFpIHRlcmtlY2lsIGhpbmdnYSBuaWxhaSB0ZXJiZXNhci4gTWVkaWFuIG1lbWJlcmlrYW4gaW5mb3JtYXNpIHRlbnRhbmcgdGl0aWsgdGVuZ2FoIGRhcmkgZGlzdHJpYnVzaSBkYXRhLCBtZW1iYWdpIGRhdGEgbWVuamFkaSBkdWEgYmFnaWFuIHlhbmcgc2FtYSBiZXNhciwgZGkgbWFuYSBzZXBhcnVoIGRhdGEgbWVtaWxpa2kgbmlsYWkgeWFuZyBsZWJpaCBrZWNpbCBkYXJpIG1lZGlhbiwgZGFuIHNlcGFydWggbGFpbm55YSBtZW1pbGlraSBuaWxhaSB5YW5nIGxlYmloIGJlc2FyLg0KDQojIyMjIDIuMSBMYW5na2FoIExhbmdrYWggTWVuZ2hpdHVuZyBNZWRpYW4NCg0KMS4gVXJ1dGthbiBkYXRhIGRhcmkgeWFuZyB0ZXJrZWNpbCBoaW5nZ2EgdGVyYmVzYXIuDQoNCjIuIEppa2EganVtbGFoIGRhdGEgZ2FuamlsLCBhbWJpbCBuaWxhaSB5YW5nIGJlcmFkYSBkaSB0ZW5nYWguDQoNCjMuIEppa2EganVtbGFoIGRhdGEgZ2VuYXAsIGFtYmlsIHJhdGEtcmF0YSBkdWEgbmlsYWkgdGVuZ2FoLg0KDQoNCiMjIyMjIyBydW11cyBtZWRpYW4gYWRhbGFoOg0KDQokJA0KXGJlZ2lue2VxdWF0aW9ufQ0KXGJlZ2lue3NwbGl0fQ0KXHRleHR7TWVkaWFufSAmPSBMICsgXGxlZnQoIFxmcmFje1xmcmFje259ezJ9IC0gRn17Zl9tfSBccmlnaHQpIFx0aW1lcyBoDQpcZW5ke3NwbGl0fQ0KXGVuZHtlcXVhdGlvbn0NCiQkDQoNCiMjIyMgS2V0ZXJhbmdhbiBWYXJpYWJlbA0KDQoNCiQkDQpcYmVnaW57YWxpZ25lZH0NCkwgJiA6IFx0ZXh0e1RlcGkgYmF3YWgga2VsYXMgbWVkaWFufSBcXA0KbiAmIDogXHRleHR7SnVtbGFoIHRvdGFsIGZyZWt1ZW5zaX0gXCAoXFNpZ21hIGYpIFxcDQpcZnJhY3tufXsyfSAmIDogXHRleHR7U2V0ZW5nYWgganVtbGFoIHRvdGFsIGZyZWt1ZW5zaSAocG9zaXNpIG1lZGlhbil9IFxcDQpGICYgOiBcdGV4dHtGcmVrdWVuc2kga3VtdWxhdGlmIHNlYmVsdW0ga2VsYXMgbWVkaWFufSBcXA0KZl9tICYgOiBcdGV4dHtGcmVrdWVuc2kgcGFkYSBrZWxhcyBtZWRpYW59IFxcDQpoICYgOiBcdGV4dHtQYW5qYW5nIGludGVydmFsIGtlbGFzfQ0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KDQoqQ29udG9oOioNCg0KIC0gTWlzYWxueWEsIGtpdGEgbWVtaWxpa2kgZGF0YSBiZXJpa3V0Og0KDQo3MCwgODAsIDkwLCA4NSwgOTUNCg0KIC0gTGFuZ2thaCBwZXJ0YW1hLCB1cnV0a2FuIGRhdGE6IDcwLCA4MCwgODUsIDkwLCA5NS4NCiANCkthcmVuYSBqdW1sYWggZGF0YSBnYW5qaWwgKDUgZGF0YSksIG5pbGFpIHRlbmdhaCBhZGFsYWggODUuIEphZGksIG1lZGlhbiBhZGFsYWggODUuDQoNCkppa2EganVtbGFoIGRhdGFueWEgZ2VuYXAsIG1pc2FsbnlhIGRhdGEgbmlsYWkgdWppYW46DQoNCjcwLCA4MCwgOTAsIDEwMA0KDQogLSBMYW5na2FoIHBlcnRhbWEsIHVydXRrYW4gZGF0YTogNzAsIDgwLCA5MCwgMTAwLiBLYXJlbmEganVtbGFoIGRhdGEgZ2VuYXAgKDQgZGF0YSksIGR1YSBuaWxhaSB0ZW5nYWggYWRhbGFoIDgwIGRhbiA5MC4gTWFrYSBtZWRpYW4gYWRhbGFoIHJhdGEtcmF0YSBkYXJpIGtlZHVhbnlhOg0KIA0KJCQNClx0ZXh0e01lZGlhbn0gPSBcZnJhY3s4MCArIDkwfXsyfSA9IDg1DQokJA0KDQpKYWRpLCBtZWRpYW4gYWRhbGFoIDg1Lg0KDQojIyMjICpLZWxlYmloYW4qDQoNCk1lZGlhbiBtZW1pbGlraSBiZWJlcmFwYSBrZWxlYmloYW4geWFuZyBtZW1idWF0bnlhIHNhbmdhdCBiZXJndW5hIGRhbGFtIGFuYWxpc2lzIGRhdGEsIHRlcnV0YW1hIGtldGlrYSBraXRhIGJla2VyamEgZGVuZ2FuIGRhdGEgeWFuZyB0aWRhayB0ZXJkaXN0cmlidXNpIHNlY2FyYSBzaW1ldHJpcyBhdGF1IG1lbmdhbmR1bmcgb3V0bGllciAobmlsYWkgZWtzdHJlbSkuDQoNCiMjIyMgMi4yIFBlbmdvcHJhc2lhbiBkYW4gVmlzdWFsaXNhc2kgTWVkaWFuIE1lbmdndW5ha2FuIEJveHBsb3QgZGFuIEhpc3RvZ3JhbQ0KDQoNClRhYmxlIGRhdGEgDQoNCnwgTmFtYSAgICAgIHwgIE5pbGFpIHwNCnwtLS0tLS0tLS0tLXwtLS0tLS0tLXwNCnwgQnVkaSAgICAgIHwgIDkwICAgIHwNCnwgU2l0aSAgICAgIHwgIDg1ICAgIHwNCnwgQW5kaSAgICAgIHwgIDg4ICAgIHwNCnwgUmFuZGkgICAgIHwgIDkwICAgIHwNCnwgU2F0eWEgICAgIHwgIDg2ICAgIHwNCnwgU29rZWggICAgIHwgIDgzICAgIHwNCnwgQmF5dSAgICAgIHwgIDkyICAgIHwNCnwgRmFoaW0gICAgIHwgIDg4ICAgIHwNCnwgRGFybWFuICAgIHwgIDgzICAgIHwNCnwgU2VubyAgICAgIHwgIDkwICAgIHwNCnwgSmFtYWwgICAgIHwgIDgxICAgIHwNCnwgUm9tbyAgICAgIHwgIDg0ICAgIHwNCg0KIyMjIyMgUGVuZ29wcmFzaWFuIGRhbiBWaXN1YWxpc2FzaSBNZWRpYW4gTWVuZ2d1bmFrYW4gQm94cGxvdA0KDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGE6IG5pbGFpIG1haGFzaXN3YSB5YW5nIGRpYmVyaWthbg0KbmFtYSA8LSBjKCJCdWRpIiwgIlNpdGkiLCAiQW5kaSIsICJSYW5kaSIsICJTYXR5YSIsICJTb2tlaCIsICJCYXl1IiwgIkZhaGltIiwgIkRhcm1hbiIsICJTZW5vIiwgIkphbWFsIiwgIlJvbW8iKQ0KbmlsYWkgPC0gYyg5MCwgODUsIDg4LCA5MCwgODYsIDgzLCA5MiwgODgsIDgzLCA5MCwgODEsIDg0KQ0KDQojIFVudHVrIGtlcGVybHVhbiBib3hwbG90LCBraXRhIGJ1YXQgZHVhIHNrZW5hcmlvOiBkZW5nYW4gb3V0bGllcnMgZGFuIHRhbnBhIG91dGxpZXJzDQpkYXRhX2Rlbmdhbl9vdXRsaWVycyA8LSBjKG5pbGFpLCA1NSkgICMgTWVuYW1iYWhrYW4gb3V0bGllcg0KZGF0YV90YW5wYV9vdXRsaWVycyA8LSBuaWxhaSAgIyBUYW5wYSBvdXRsaWVycw0KDQojIE1lbmdoaXR1bmcgbWVkaWFuIHVudHVrIGtlZHVhIGRhdGFzZXQNCm1lZGlhbl9kZW5nYW5fb3V0bGllcnMgPC0gbWVkaWFuKGRhdGFfZGVuZ2FuX291dGxpZXJzKQ0KbWVkaWFuX3RhbnBhX291dGxpZXJzIDwtIG1lZGlhbihkYXRhX3RhbnBhX291dGxpZXJzKQ0KDQojIE1lbmdnYWJ1bmdrYW4gZGF0YSBrZSBkYWxhbSBzYXR1IGRhdGEgZnJhbWUgdW50dWsgdmlzdWFsaXNhc2kNCmRhdGEgPC0gZGF0YS5mcmFtZSgNCiAgTmlsYWkgPSBjKGRhdGFfZGVuZ2FuX291dGxpZXJzLCBkYXRhX3RhbnBhX291dGxpZXJzKSwNCiAgS2Vsb21wb2sgPSByZXAoYygiRGVuZ2FuIE91dGxpZXJzIiwgIlRhbnBhIE91dGxpZXJzIiksDQogICAgICAgICAgICAgICAgIHRpbWVzID0gYyhsZW5ndGgoZGF0YV9kZW5nYW5fb3V0bGllcnMpLCBsZW5ndGgoZGF0YV90YW5wYV9vdXRsaWVycykpKQ0KKQ0KDQojIE1lbWJ1YXQgYm94cGxvdCB1bnR1ayBtZWRpYW4gbWVuZ2d1bmFrYW4gUGxvdGx5IGRlbmdhbiBvdXRsaWVycyBkaXRhbXBpbGthbg0KcGxvdF9tZWRpYW4gPC0gcGxvdF9seSgNCiAgZGF0YSwNCiAgeSA9IH5OaWxhaSwNCiAgY29sb3IgPSB+S2Vsb21wb2ssDQogIGNvbG9ycyA9IGMoImxpZ2h0Ymx1ZSIsICJza3libHVlIiksICMgTWVuZ2F0dXIgd2FybmEgbWFudWFsIHVudHVrIGR1YSBrZWxvbXBvaw0KICB0eXBlID0gImJveCIsDQogIGJveHBvaW50cyA9ICJvdXRsaWVycyIgICMgTWVuYW1waWxrYW4gdGl0aWsgb3V0bGllcnMNCikgJT4lDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJCb3hwbG90IE5pbGFpIEJlcmRhc2Fya2FuIE1lZGlhbiIsDQogICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIk5pbGFpIiksDQogICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIktlbG9tcG9rIiksDQogICAgYW5ub3RhdGlvbnMgPSBsaXN0KA0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9ICJEZW5nYW4gT3V0bGllcnMiLA0KICAgICAgICB5ID0gbWVkaWFuX2Rlbmdhbl9vdXRsaWVycywNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWRpYW46Iiwgcm91bmQobWVkaWFuX2Rlbmdhbl9vdXRsaWVycywgMikpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2hlYWQgPSAyDQogICAgICApLA0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9ICJUYW5wYSBPdXRsaWVycyIsDQogICAgICAgIHkgPSBtZWRpYW5fdGFucGFfb3V0bGllcnMsDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVkaWFuOiIsIHJvdW5kKG1lZGlhbl90YW5wYV9vdXRsaWVycywgMikpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2hlYWQgPSAyDQogICAgICApDQogICAgKQ0KICApDQoNCiMgTWVuYW1waWxrYW4gcGxvdCBtZWRpYW4NCnBsb3RfbWVkaWFuDQoNCmBgYA0KDQojIyMjIyBQZW5nb3ByYXNpYW4gZGFuIFZpc3VhbGlzYXNpIE1lZGlhbiBNZW5nZ3VuYWthbiBIaXN0b2dyYW0NCg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQojIE1lbXVhdCBsaWJyYXJ5IHlhbmcgZGlwZXJsdWthbg0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YTogRHVhIHNrZW5hcmlvLCBzYXR1IGRlbmdhbiBvdXRsaWVycyB5YW5nIGJhcnUgZGlzZXN1YWlrYW4sIHNhdHUgdGFucGEgb3V0bGllcnMNCmRhdGFfZGVuZ2FuX291dGxpZXJzIDwtIGMoNSwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTgsIDE4LCAxOSwgMjAsIDIyLCAyMywgMTcpIA0KZGF0YV90YW5wYV9vdXRsaWVycyA8LSBjKDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxOCwgMTgsIDE5LCAyMCwgMjIsIDIzLCAyNCkgDQoNCiMgRGF0YSB5YW5nIGRpYmVyaWthbg0KZGF0YV9uaWxhaSA8LSBjKDkwLCA4NSwgODgsIDkwLCA4NiwgODMsIDkyLCA4OCwgODMsIDkwLCA4MSwgODQpDQoNCiMgTWVtYnVhdCBkZW5zaXR5IHBsb3QgdW50dWsgbWFzaW5nLW1hc2luZyBkYXRhc2V0DQpkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyA8LSBkZW5zaXR5KGRhdGFfZGVuZ2FuX291dGxpZXJzKQ0KZGVuc2l0eV90YW5wYV9vdXRsaWVycyA8LSBkZW5zaXR5KGRhdGFfdGFucGFfb3V0bGllcnMpDQoNCiMgUGFzdGlrYW4gdGlkYWsgYWRhIG5pbGFpIG5lZ2F0aWYgZGkgeCBkYW4geQ0KZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeCA8LSBwbWF4KDAsIGRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHgpDQpkZW5zaXR5X3RhbnBhX291dGxpZXJzJHggPC0gcG1heCgwLCBkZW5zaXR5X3RhbnBhX291dGxpZXJzJHgpDQoNCiMgTWVuZ2hpdHVuZyBtZWRpYW4NCm1lZGlhbl9kZW5nYW5fb3V0bGllcnMgPC0gbWVkaWFuKGRhdGFfZGVuZ2FuX291dGxpZXJzKQ0KbWVkaWFuX3RhbnBhX291dGxpZXJzIDwtIG1lZGlhbihkYXRhX3RhbnBhX291dGxpZXJzKQ0KbWVkaWFuX25pbGFpIDwtIG1lZGlhbihkYXRhX25pbGFpKQ0KDQojIE1lbWJ1YXQgcGxvdCBtZW5nZ3VuYWthbiBQbG90bHkNCnBsb3QgPC0gcGxvdF9seSgpICU+JQ0KICAjIE1lbmFtYmFoa2FuIGRlbnNpdHkgcGxvdCB1bnR1ayBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IH5kZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR4LA0KICAgIHkgPSB+ZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSwNCiAgICB0eXBlID0gJ3NjYXR0ZXInLA0KICAgIG1vZGUgPSAnbGluZXMnLA0KICAgIG5hbWUgPSAiRGVuZ2FuIE91dGxpZXJzIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjgpJywgd2lkdGggPSAyKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGRlbnNpdHkgcGxvdCB1bnR1ayBkYXRhc2V0IHRhbnBhIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gfmRlbnNpdHlfdGFucGFfb3V0bGllcnMkeCwNCiAgICB5ID0gfmRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSwNCiAgICB0eXBlID0gJ3NjYXR0ZXInLA0KICAgIG1vZGUgPSAnbGluZXMnLA0KICAgIG5hbWUgPSAiVGFucGEgT3V0bGllcnMiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMzgsIDE2NiwgOTEsIDAuOCknLCB3aWR0aCA9IDIpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZ2FyaXMgbWVkaWFuIHVudHVrIGRhdGFzZXQgZGVuZ2FuIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gYyhtZWRpYW5fZGVuZ2FuX291dGxpZXJzLCBtZWRpYW5fZGVuZ2FuX291dGxpZXJzKSwNCiAgICB5ID0gYygwLCBtYXgoZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9ICJNZWRpYW4gKERlbmdhbiBPdXRsaWVycykiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuNiknLCBkYXNoID0gJ2Rhc2gnKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIG1lZGlhbiB1bnR1ayBkYXRhc2V0IHRhbnBhIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gYyhtZWRpYW5fdGFucGFfb3V0bGllcnMsIG1lZGlhbl90YW5wYV9vdXRsaWVycyksDQogICAgeSA9IGMoMCwgbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9ICJNZWRpYW4gKFRhbnBhIE91dGxpZXJzKSIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC42KScsIGRhc2ggPSAnZGFzaCcpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZ2FyaXMgbWVkaWFuIHVudHVrIGRhdGEgbmlsYWkgeWFuZyBkaWJlcmlrYW4NCiAgYWRkX3RyYWNlKA0KICAgIHggPSBjKG1lZGlhbl9uaWxhaSwgbWVkaWFuX25pbGFpKSwNCiAgICB5ID0gYygwLCBtYXgoZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5KSksICAjIEd1bmFrYW4gbmlsYWkgbWF4IGRhcmkgZGVuc2l0eV90YW5wYV9vdXRsaWVycyB1bnR1ayB5DQogICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICBtb2RlID0gImxpbmVzIiwNCiAgICBuYW1lID0gIk1lZGlhbiAoRGF0YSBOaWxhaSkiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjU1LCAxNjUsIDAsIDAuOCknLCBkYXNoID0gJ2RvdCcpDQogICkgJT4lDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJQZW5nYXJ1aCBPdXRsaWVycyB0ZXJoYWRhcCBNZWRpYW4gcGFkYSBEZW5zaXR5IFBsb3QiLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJOaWxhaSIpLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJLZXBhZGF0YW4iKSwNCiAgICBhbm5vdGF0aW9ucyA9IGxpc3QoDQogICAgICAjIEFub3Rhc2kgdW50dWsgbWVkaWFuIGRhdGFzZXQgZGVuZ2FuIG91dGxpZXJzDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gbWVkaWFuX2Rlbmdhbl9vdXRsaWVycywNCiAgICAgICAgeSA9IG1heChkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5KSAqIDAuOSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWRpYW4gKERlbmdhbiBPdXRsaWVycyk6Iiwgcm91bmQobWVkaWFuX2Rlbmdhbl9vdXRsaWVycywgMikpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2hlYWQgPSAyLA0KICAgICAgICBheCA9IDAsDQogICAgICAgIGF5ID0gLTMwLCAjIFBvc2lzaSB0ZWtzIHNlZGlraXQgbGViaWggdGluZ2dpIGRhcmkgZ2FyaXMNCiAgICAgICAgZm9udCA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC44KScsIHNpemUgPSAxMikNCiAgICAgICksDQogICAgICAjIEFub3Rhc2kgdW50dWsgbWVkaWFuIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSBtZWRpYW5fdGFucGFfb3V0bGllcnMsDQogICAgICAgIHkgPSBtYXgoZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5KSAqIDAuOSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWRpYW4gKFRhbnBhIE91dGxpZXJzKToiLCByb3VuZChtZWRpYW5fdGFucGFfb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC00NSwgIyBQb3Npc2kgdGVrcyBzZWRpa2l0IGxlYmloIHRpbmdnaSBkYXJpIGdhcmlzDQogICAgICAgIGZvbnQgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMzgsIDE2NiwgOTEsIDAuOCknLCBzaXplID0gMTIpDQogICAgICApLA0KICAgICAgIyBBbm90YXNpIHVudHVrIG1lZGlhbiBkYXRhIG5pbGFpDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gbWVkaWFuX25pbGFpLA0KICAgICAgICB5ID0gbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkgKiAwLjgsDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVkaWFuIChEYXRhIE5pbGFpKToiLCByb3VuZChtZWRpYW5fbmlsYWksIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC00NSwgIyBQb3Npc2kgdGVrcyBzZWRpa2l0IGxlYmloIHRpbmdnaSBkYXJpIGdhcmlzDQogICAgICAgIGZvbnQgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjU1LCAxNjUsIDAsIDAuOCknLCBzaXplID0gMTIpDQogICAgICApDQogICAgKQ0KICApDQoNCiMgTWVuYW1waWxrYW4gcGxvdA0KcGxvdA0KDQpgYGANCg0KIyMjIDMuIE1PRFVTDQoNCk1vZHVzIGFkYWxhaCBzYWxhaCBzYXR1IHVrdXJhbiBwZW11c2F0YW4gZGF0YSB5YW5nIGRpZ3VuYWthbiB1bnR1ayBtZW51bmp1a2thbiBuaWxhaSBhdGF1IGFuZ2thIHlhbmcgcGFsaW5nIHNlcmluZyBtdW5jdWwgZGFsYW0gc2VidWFoIGt1bXB1bGFuIGRhdGEuIERhbGFtIGJhbnlhayBrYXN1cywgbW9kdXMgZGFwYXQgbWVtYmVyaWthbiBpbmZvcm1hc2kgeWFuZyBzYW5nYXQgYmVyZ3VuYSB0ZW50YW5nIGtlY2VuZGVydW5nYW4gdW11bSBhdGF1IGtlYmlhc2FhbiB5YW5nIGFkYSBkYWxhbSBkYXRhIHRlcnNlYnV0LiBNb2R1cyBzZXJpbmdrYWxpIGRpZ3VuYWthbiBkYWxhbSBiZXJiYWdhaSBiaWRhbmcsIHNlcGVydGkgc3RhdGlzdGlrLCBwZW1hc2FyYW4sIGRhbiBzb3Npb2xvZ2ksIHVudHVrIG1lbmdnYW1iYXJrYW4gZWxlbWVuIHlhbmcgZG9taW5hbiBhdGF1IHNlcmluZyBtdW5jdWwgZGFsYW0gc3VhdHUga2Vsb21wb2suDQoNCiMjIyMjIyBhLiBSdW11cyBNb2R1cw0KDQokJA0KXGJlZ2lue2VxdWF0aW9ufQ0KXGJlZ2lue3NwbGl0fQ0KXHRleHR7TW9kdXN9ICY9IEwgKyBcbGVmdCggXGZyYWN7Zl8xIC0gZl8wfXsyZl8xIC0gZl8wIC0gZl8yfSBccmlnaHQpIFx0aW1lcyBoDQpcZW5ke3NwbGl0fQ0KXGVuZHtlcXVhdGlvbn0NCiQkDQoNCiQkDQpcYmVnaW57ZXF1YXRpb259DQpcYmVnaW57YWxpZ25lZH0NCkwgJiA6IFx0ZXh0e1RlcGkgYmF3YWgga2VsYXMgbW9kYWwgKGtlbGFzIGRlbmdhbiBmcmVrdWVuc2kgdGVydGluZ2dpKX0gXFwNCmZfMSAmIDogXHRleHR7RnJla3VlbnNpIGtlbGFzIG1vZGFsfSBcXA0KZl8wICYgOiBcdGV4dHtGcmVrdWVuc2kga2VsYXMgc2ViZWx1bSBrZWxhcyBtb2RhbH0gXFwNCmZfMiAmIDogXHRleHR7RnJla3VlbnNpIGtlbGFzIHNldGVsYWgga2VsYXMgbW9kYWx9IFxcDQpoICYgOiBcdGV4dHtQYW5qYW5nIGludGVydmFsIGtlbGFzfQ0KXGVuZHthbGlnbmVkfQ0KXGVuZHtlcXVhdGlvbn0NCg0KJCQNCiMjIyMjIyBiLiBDb250b2ggDQoNCk1pc2FsbnlhLCBraXRhIG1lbWlsaWtpIGRhdGEgbmlsYWkgdWppYW4gYmVyaWt1dDoNCg0KIC0gODAsIDg1LCA4MCwgOTAsIDk1DQoNCkRpIHNpbmksIGFkYSBkdWEgbmlsYWkgeWFuZyBzZXJpbmcgbXVuY3VsLCB5YWl0dSA4MCBkYW4gOTAsIHNlaGluZ2dhIGRhdGEgaW5pIGJpbW9kYWwuDQoNCkppa2EgZGF0YSBhZGFsYWg6DQoNCiAtIDcwLCA4MCwgOTAsIDEwMCwgMTEwDQogDQogS2FyZW5hIHRpZGFrIGFkYSBuaWxhaSB5YW5nIGJlcnVsYW5nLCBtYWthIGRhdGEgaW5pIHRpZGFrIG1lbWlsaWtpIG1vZHVzLg0KIA0KIyMjIyMjIGMuIEtlbGViaWhhbiBNb2R1cyANCg0KTW9kdXMgbWVtaWxpa2kgYmVyYmFnYWkga2VsZWJpaGFuIHlhbmcgbWVuamFkaWthbm55YSB1a3VyYW4gcGVtdXNhdGFuIGRhdGEgeWFuZyBzYW5nYXQgYmVyZ3VuYSBkYWxhbSBiZXJiYWdhaSBqZW5pcyBhbmFsaXNpcywgdGVydXRhbWEgeWFuZyBiZXJodWJ1bmdhbiBkZW5nYW4gZnJla3VlbnNpIGtlbXVuY3VsYW4gbmlsYWkgdGVydGVudHUgZGFsYW0gZGF0YXNldC4gU2FsYWggc2F0dSBrZWd1bmFhbm55YSB5YW5nIHBhbGluZyB1dGFtYSBhZGFsYWggdW50dWsgbWVuZ2V0YWh1aSBuaWxhaSB5YW5nIHBhbGluZyBzZXJpbmcgdGVyamFkaSwgeWFuZyBkYXBhdCBtZW1iZXJpa2FuIHdhd2FzYW4gcGVudGluZyB0ZW50YW5nIHBvbGEgYXRhdSBrZWNlbmRlcnVuZ2FuIGRhbGFtIGRhdGEuDQoNCg0KIyMjIyAzLjEgUGVuZ29wcmFzaWFuIGRhbiBWaXN1YWxpc2FzaSBNb2R1cyBNZW5nZ3VuYWthbiBCb3hwbG90IGRhbiBIaXN0b2dyYW0NCg0KDQpUYWJsZSBkYXRhIA0KDQp8IE5hbWEgICAgICB8ICBOaWxhaSB8DQp8LS0tLS0tLS0tLS18LS0tLS0tLS18DQp8IEJ1ZGkgICAgICB8ICA5MCAgICB8DQp8IFNpdGkgICAgICB8ICA4NSAgICB8DQp8IEFuZGkgICAgICB8ICA4OCAgICB8DQp8IFJhbmRpICAgICB8ICA5MCAgICB8DQp8IFNhdHlhICAgICB8ICA4NiAgICB8DQp8IFNva2VoICAgICB8ICA4MyAgICB8DQp8IEJheXUgICAgICB8ICA5MiAgICB8DQp8IEZhaGltICAgICB8ICA4OCAgICB8DQp8IERhcm1hbiAgICB8ICA4MyAgICB8DQp8IFNlbm8gICAgICB8ICA5MCAgICB8DQp8IEphbWFsICAgICB8ICA4MSAgICB8DQp8IFJvbW8gICAgICB8ICA4NCAgICB8DQoNCiMjIyMjIDMuMS4xIFBlbmdvcHJhc2lhbiBkYW4gVmlzdWFsaXNhc2kgTW9kdXMgTWVuZ2d1bmFrYW4gQm94cGxvdA0KDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCiMgRnVuZ3NpIHVudHVrIG1lbmdoaXR1bmcgbW9kdXMgKG1vZGUpDQptb2R1cyA8LSBmdW5jdGlvbih4KSB7DQogIHVuaXFfeCA8LSB1bmlxdWUoeCkNCiAgdGFiIDwtIHRhYnVsYXRlKG1hdGNoKHgsIHVuaXFfeCkpDQogIHVuaXFfeFt0YWIgPT0gbWF4KHRhYildDQp9DQoNCiMgRGF0YTogbmlsYWkgbWFoYXNpc3dhIHlhbmcgZGliZXJpa2FuDQpuYW1hIDwtIGMoIkJ1ZGkiLCAiU2l0aSIsICJBbmRpIiwgIlJhbmRpIiwgIlNhdHlhIiwgIlNva2VoIiwgIkJheXUiLCAiRmFoaW0iLCAiRGFybWFuIiwgIlNlbm8iLCAiSmFtYWwiLCAiUm9tbyIpDQpuaWxhaSA8LSBjKDkwLCA4NSwgODgsIDkwLCA4NiwgODMsIDkyLCA4OCwgODMsIDkwLCA4MSwgODQpDQoNCiMgVW50dWsga2VwZXJsdWFuIGJveHBsb3QsIGtpdGEgYnVhdCBkdWEgc2tlbmFyaW86IGRlbmdhbiBvdXRsaWVycyBkYW4gdGFucGEgb3V0bGllcnMNCmRhdGFfZGVuZ2FuX291dGxpZXJzIDwtIGMobmlsYWksIDU1KSAgIyBNZW5hbWJhaGthbiBvdXRsaWVyDQpkYXRhX3RhbnBhX291dGxpZXJzIDwtIG5pbGFpICAjIFRhbnBhIG91dGxpZXJzDQoNCiMgTWVuZ2hpdHVuZyBtb2R1cyAobW9kZSkgdW50dWsga2VkdWEgZGF0YXNldA0KbW9kdXNfZGVuZ2FuX291dGxpZXJzIDwtIG1vZHVzKGRhdGFfZGVuZ2FuX291dGxpZXJzKQ0KbW9kdXNfdGFucGFfb3V0bGllcnMgPC0gbW9kdXMoZGF0YV90YW5wYV9vdXRsaWVycykNCg0KIyBNZW5nZ2FidW5na2FuIGRhdGEga2UgZGFsYW0gc2F0dSBkYXRhIGZyYW1lIHVudHVrIHZpc3VhbGlzYXNpDQpkYXRhIDwtIGRhdGEuZnJhbWUoDQogIE5pbGFpID0gYyhkYXRhX2Rlbmdhbl9vdXRsaWVycywgZGF0YV90YW5wYV9vdXRsaWVycyksDQogIEtlbG9tcG9rID0gcmVwKGMoIkRlbmdhbiBPdXRsaWVycyIsICJUYW5wYSBPdXRsaWVycyIpLA0KICAgICAgICAgICAgICAgICB0aW1lcyA9IGMobGVuZ3RoKGRhdGFfZGVuZ2FuX291dGxpZXJzKSwgbGVuZ3RoKGRhdGFfdGFucGFfb3V0bGllcnMpKSkNCikNCg0KIyBNZW1idWF0IGJveHBsb3QgdW50dWsgbW9kdXMgKG1vZGUpIG1lbmdndW5ha2FuIFBsb3RseSBkZW5nYW4gb3V0bGllcnMgZGl0YW1waWxrYW4NCnBsb3RfbW9kdXMgPC0gcGxvdF9seSgNCiAgZGF0YSwNCiAgeSA9IH5OaWxhaSwNCiAgY29sb3IgPSB+S2Vsb21wb2ssDQogIGNvbG9ycyA9IGMoImxpZ2h0Ymx1ZSIsICJza3libHVlIiksICAjIE1lbmFtYmFoa2FuIGR1YSB3YXJuYSBsZW1idXQgYmlydQ0KICB0eXBlID0gImJveCIsDQogIGJveHBvaW50cyA9ICJvdXRsaWVycyIgICMgTWVuYW1waWxrYW4gdGl0aWsgb3V0bGllcnMNCikgJT4lDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJCb3hwbG90IE5pbGFpIEJlcmRhc2Fya2FuIE1vZHVzIiwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiTmlsYWkiKSwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiS2Vsb21wb2siKSwNCiAgICBhbm5vdGF0aW9ucyA9IGxpc3QoDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIkRlbmdhbiBPdXRsaWVycyIsDQogICAgICAgIHkgPSBtb2R1c19kZW5nYW5fb3V0bGllcnNbMV0sICAjIE1vZHVzIHVudHVrIGRlbmdhbiBvdXRsaWVycw0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1vZHVzOiIsIHBhc3RlKG1vZHVzX2Rlbmdhbl9vdXRsaWVycywgY29sbGFwc2UgPSAiLCAiKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDINCiAgICAgICksDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIlRhbnBhIE91dGxpZXJzIiwNCiAgICAgICAgeSA9IG1vZHVzX3RhbnBhX291dGxpZXJzWzFdLCAgIyBNb2R1cyB1bnR1ayB0YW5wYSBvdXRsaWVycw0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1vZHVzOiIsIHBhc3RlKG1vZHVzX3RhbnBhX291dGxpZXJzLCBjb2xsYXBzZSA9ICIsICIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMg0KICAgICAgKQ0KICAgICkNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QgbW9kdXMNCnBsb3RfbW9kdXMNCg0KYGBgDQoNCiMjIyMjIDMuMS4yIFBlbmdvcHJhc2lhbiBkYW4gVmlzdWFsaXNhc2kgTW9kdXMgTWVuZ2d1bmFrYW4gSGlzdG9ncmFtDQoNCmBgYHtyLCBtYXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KIyBNZW11YXQgbGlicmFyeSB5YW5nIGRpcGVybHVrYW4NCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGE6IER1YSBza2VuYXJpbywgc2F0dSBkZW5nYW4gb3V0bGllcnMgeWFuZyBiYXJ1IGRpc2VzdWFpa2FuLCBzYXR1IHRhbnBhIG91dGxpZXJzDQpkYXRhX2Rlbmdhbl9vdXRsaWVycyA8LSBjKDUsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE4LCAxOCwgMTksIDIwLCAyMiwgMjMsIDE3KSANCmRhdGFfdGFucGFfb3V0bGllcnMgPC0gYygxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTgsIDE4LCAxOSwgMjAsIDIyLCAyMywgMjQpIA0KDQojIERhdGEgeWFuZyBkaWJlcmlrYW4NCmRhdGFfbmlsYWkgPC0gYyg5MCwgODUsIDg4LCA5MCwgODYsIDgzLCA5MiwgODgsIDgzLCA5MCwgODEsIDg0KQ0KDQojIEZ1bmdzaSB1bnR1ayBtZW5naGl0dW5nIG1vZHVzDQpnZXRfbW9kZSA8LSBmdW5jdGlvbih2KSB7DQogIHVuaXFfdiA8LSB1bmlxdWUodikNCiAgdW5pcV92W3doaWNoLm1heCh0YWJ1bGF0ZShtYXRjaCh2LCB1bmlxX3YpKSldDQp9DQoNCiMgTWVuZ2hpdHVuZyBtb2R1cw0KbW9kZV9kZW5nYW5fb3V0bGllcnMgPC0gZ2V0X21vZGUoZGF0YV9kZW5nYW5fb3V0bGllcnMpDQptb2RlX3RhbnBhX291dGxpZXJzIDwtIGdldF9tb2RlKGRhdGFfdGFucGFfb3V0bGllcnMpDQptb2RlX25pbGFpIDwtIGdldF9tb2RlKGRhdGFfbmlsYWkpDQoNCiMgTWVtYnVhdCBkZW5zaXR5IHBsb3QgdW50dWsgbWFzaW5nLW1hc2luZyBkYXRhc2V0DQpkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyA8LSBkZW5zaXR5KGRhdGFfZGVuZ2FuX291dGxpZXJzKQ0KZGVuc2l0eV90YW5wYV9vdXRsaWVycyA8LSBkZW5zaXR5KGRhdGFfdGFucGFfb3V0bGllcnMpDQoNCiMgUGFzdGlrYW4gdGlkYWsgYWRhIG5pbGFpIG5lZ2F0aWYgZGkgeCBkYW4geQ0KZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeCA8LSBwbWF4KDAsIGRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHgpDQpkZW5zaXR5X3RhbnBhX291dGxpZXJzJHggPC0gcG1heCgwLCBkZW5zaXR5X3RhbnBhX291dGxpZXJzJHgpDQoNCiMgTWVtYnVhdCBwbG90IG1lbmdndW5ha2FuIFBsb3RseQ0KcGxvdCA8LSBwbG90X2x5KCkgJT4lDQogICMgTWVuYW1iYWhrYW4gZGVuc2l0eSBwbG90IHVudHVrIGRhdGFzZXQgZGVuZ2FuIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gfmRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHgsDQogICAgeSA9IH5kZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5LA0KICAgIHR5cGUgPSAnc2NhdHRlcicsDQogICAgbW9kZSA9ICdsaW5lcycsDQogICAgbmFtZSA9ICJEZW5nYW4gT3V0bGllcnMiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuOCknLCB3aWR0aCA9IDIpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZGVuc2l0eSBwbG90IHVudHVrIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSB+ZGVuc2l0eV90YW5wYV9vdXRsaWVycyR4LA0KICAgIHkgPSB+ZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5LA0KICAgIHR5cGUgPSAnc2NhdHRlcicsDQogICAgbW9kZSA9ICdsaW5lcycsDQogICAgbmFtZSA9ICJUYW5wYSBPdXRsaWVycyIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScsIHdpZHRoID0gMikNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBnYXJpcyBtb2R1cyB1bnR1ayBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IGMobW9kZV9kZW5nYW5fb3V0bGllcnMsIG1vZGVfZGVuZ2FuX291dGxpZXJzKSwNCiAgICB5ID0gYygwLCBtYXgoZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9ICJNb2R1cyAoRGVuZ2FuIE91dGxpZXJzKSIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC42KScsIGRhc2ggPSAnZGFzaCcpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZ2FyaXMgbW9kdXMgdW50dWsgZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IGMobW9kZV90YW5wYV9vdXRsaWVycywgbW9kZV90YW5wYV9vdXRsaWVycyksDQogICAgeSA9IGMoMCwgbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9ICJNb2R1cyAoVGFucGEgT3V0bGllcnMpIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjYpJywgZGFzaCA9ICdkYXNoJykNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBnYXJpcyBtb2R1cyB1bnR1ayBkYXRhIG5pbGFpIHlhbmcgZGliZXJpa2FuDQogIGFkZF90cmFjZSgNCiAgICB4ID0gYyhtb2RlX25pbGFpLCBtb2RlX25pbGFpKSwNCiAgICB5ID0gYygwLCBtYXgoZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5KSksICAjIEd1bmFrYW4gbmlsYWkgbWF4IGRhcmkgZGVuc2l0eV90YW5wYV9vdXRsaWVycyB1bnR1ayB5DQogICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICBtb2RlID0gImxpbmVzIiwNCiAgICBuYW1lID0gIk1vZHVzIChEYXRhIE5pbGFpKSIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgyNTUsIDE2NSwgMCwgMC44KScsIGRhc2ggPSAnZG90JykNCiAgKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIlBlbmdhcnVoIE91dGxpZXJzIHRlcmhhZGFwIE1vZHVzIHBhZGEgRGVuc2l0eSBQbG90IiwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiTmlsYWkiKSwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiS2VwYWRhdGFuIiksDQogICAgYW5ub3RhdGlvbnMgPSBsaXN0KA0KICAgICAgIyBBbm90YXNpIHVudHVrIG1vZHVzIGRhdGFzZXQgZGVuZ2FuIG91dGxpZXJzDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gbW9kZV9kZW5nYW5fb3V0bGllcnMsDQogICAgICAgIHkgPSBtYXgoZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSkgKiAwLjksDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTW9kdXMgKERlbmdhbiBPdXRsaWVycyk6Iiwgcm91bmQobW9kZV9kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC0zMCwgIyBQb3Npc2kgdGVrcyBzZWRpa2l0IGxlYmloIHRpbmdnaSBkYXJpIGdhcmlzDQogICAgICAgIGZvbnQgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuOCknLCBzaXplID0gMTIpDQogICAgICApLA0KICAgICAgIyBBbm90YXNpIHVudHVrIG1vZHVzIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSBtb2RlX3RhbnBhX291dGxpZXJzLA0KICAgICAgICB5ID0gbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkgKiAwLjksDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTW9kdXMgKFRhbnBhIE91dGxpZXJzKToiLCByb3VuZChtb2RlX3RhbnBhX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDIsDQogICAgICAgIGF4ID0gMCwNCiAgICAgICAgYXkgPSAtNDUsICMgUG9zaXNpIHRla3Mgc2VkaWtpdCBsZWJpaCB0aW5nZ2kgZGFyaSBnYXJpcw0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKSwNCiAgICAgICMgQW5vdGFzaSB1bnR1ayBtb2R1cyBkYXRhIG5pbGFpDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gbW9kZV9uaWxhaSwNCiAgICAgICAgeSA9IG1heChkZW5zaXR5X3RhbnBhX291dGxpZXJzJHkpICogMC44LA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1vZHVzIChEYXRhIE5pbGFpKToiLCByb3VuZChtb2RlX25pbGFpLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDIsDQogICAgICAgIGF4ID0gMCwNCiAgICAgICAgYXkgPSAtNDUsICMgUG9zaXNpIHRla3Mgc2VkaWtpdCBsZWJpaCB0aW5nZ2kgZGFyaSBnYXJpcw0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDI1NSwgMTY1LCAwLCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKQ0KICAgICkNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3QNCg0KYGBgDQoNCiMjIEtlc2ltcHVsYW4gTUVBTiwgTUVESUFOLCBNT0RVUyANCg0KS2VzaW1wdWxhbiBVbXVtOg0KDQotIE1lYW4gc2FuZ2F0IGJlcmd1bmEgdW50dWsgZGF0YSB5YW5nIHRlcmRpc3RyaWJ1c2kgbm9ybWFsIGRhbiB0aWRhayBtZW1pbGlraSBvdXRsaWVyLCBrYXJlbmEgbWVtYmVyaWthbiBnYW1iYXJhbiBrZXNlbHVydWhhbiBkYXJpIHNlbHVydWggZGF0YS4gTmFtdW4sIGtlaGFkaXJhbiBuaWxhaSBla3N0cmltIGJpc2EgbWVtYnVhdG55YSB0aWRhayByZXByZXNlbnRhdGlmLg0KDQotIE1lZGlhbiBsZWJpaCBiYWlrIGRpZ3VuYWthbiBrZXRpa2EgZGF0YSBtZW1pbGlraSBkaXN0cmlidXNpIHlhbmcgbWlyaW5nIGF0YXUgdGVyZGFwYXQgbmlsYWkgZWtzdHJpbSwga2FyZW5hIHRpZGFrIGRpcGVuZ2FydWhpIG9sZWggb3V0bGllci4NCg0KLSBNb2R1cyBzYW5nYXQgYmVyZ3VuYSB1bnR1ayBtZW5nZXRhaHVpIG5pbGFpIHlhbmcgcGFsaW5nIHNlcmluZyBtdW5jdWwgZGFsYW0gZGF0YSwgdGVydXRhbWEgcGFkYSBkYXRhIGthdGVnb3Jpa2FsIGF0YXUgbm9taW5hbC4gTmFtdW4sIGppa2EgZGF0YSB0aWRhayBtZW1pbGlraSBuaWxhaSB5YW5nIHNlcmluZyBtdW5jdWwsIG1vZHVzIGJpc2EgamFkaSB0aWRhayBhZGEgYXRhdSBrdXJhbmcgaW5mb3JtYXRpZi4NCg0KUGVtaWxpaGFuIGFudGFyYSBtZWFuLCBtZWRpYW4sIGRhbiBtb2R1cyB0ZXJnYW50dW5nIHBhZGEgamVuaXMgZGF0YSB5YW5nIGRpbWlsaWtpIGRhbiB0dWp1YW4gYW5hbGlzaXMuIEtldGlnYW55YSBzYWxpbmcgbWVsZW5na2FwaSBkYW4gbWVtYmVyaWthbiBwYW5kYW5nYW4geWFuZyBiZXJiZWRhIHRlbnRhbmcga3VtcHVsYW4gZGF0YSB5YW5nIGRpYW5hbGlzaXMuDQoNCiMgUEVNVVNBVEFOIERBVEEgREFMQU0gQkVSQkFHQUkgQklEQU5HIA0KDQpVa3VyYW4gcGVtdXNhdGFuIGRhdGEsIHNlcGVydGkgbWVhbiwgbWVkaWFuLCBkYW4gbW9kdXMsIHNlcmluZyBkaWd1bmFrYW4gZGFsYW0gYmVyYmFnYWkgYmlkYW5nIHVudHVrIG1lbmdhbmFsaXNpcyBkYXRhIGRhbiBtZW5nYW1iaWwga2VwdXR1c2FuLiBCZXJpa3V0IGFkYWxhaCBiYWdhaW1hbmEgdWt1cmFuIHBlbXVzYXRhbiBkYXRhIGRpdGVyYXBrYW4gZGFsYW0gQmlzbmlzLCBLZXNlaGF0YW4sIGRhbiBQZW5kaWRpa2FuLg0KDQojIyAxLiBCaXNuaXMNCg0KRGFsYW0gZHVuaWEgYmlzbmlzLCB1a3VyYW4gcGVtdXNhdGFuIGRhdGEgZGlndW5ha2FuIHVudHVrIG1lbmdhbmFsaXNpcyBiZXJiYWdhaSBhc3BlayBvcGVyYXNpIGRhbiBraW5lcmphIHBlcnVzYWhhYW4uIEJlcmlrdXQgYWRhbGFoIGNvbnRvaCBwZW5lcmFwYW4gcGVtdXNhdGFuIGRhdGEgZGFsYW0gYmlzbmlzOg0KDQojIyMgMS4xIE1lbmd1a3VyIFJhdGEtUmF0YSBQZW5qdWFsYW4gUGVydXNhaGFhbiANCg0Kc2VyaW5nIG1lbmdndW5ha2FuIHJhdGEtcmF0YSAobWVhbikgdW50dWsgbWVuZ2hpdHVuZyByYXRhLXJhdGEgcGVuanVhbGFuIGRhbGFtIHBlcmlvZGUgICAgICB0ZXJ0ZW50dSwgc2VwZXJ0aSBwZXIgYnVsYW4gYXRhdSBwZXIgdGFodW4uIEhhbCBpbmkgbWVtYmFudHUgcGVydXNhaGFhbiBtZW1haGFtaSB0cmVuIHBlbmp1YWxhbiBkYW4gbWVyZW5jYW5ha2FuIHN0cmF0ZWdpIG1hc2EgICAgICBkZXBhbi4NCg0KICAgIC0gQ29udG9oOkppa2Egc2VidWFoIHBlcnVzYWhhYW4gaW5naW4gbWVuZ2V0YWh1aSByYXRhLXJhdGEgcGVuanVhbGFuIGJ1bGFuYW4sIG1lcmVrYSBkYXBhdCBtZW5qdW1sYWhrYW4gcGVuanVhbGFuIGJ1bGFuYW4gICAgICAgICAgICAgICAgICAgIHNlbGFtYSBzZXRhaHVuIGRhbiBtZW1iYWdpbnlhIGRlbmdhbiAxMi4gSW5pIG1lbWJlcmlrYW4gZ2FtYmFyYW4gdW11bSB0ZW50YW5nIGtpbmVyamEgcGVydXNhaGFhbiBkYWxhbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmlvZGUgdGVyc2VidXQuIA0KICAgIA0KIyMjIyBFa3Nlc2t1c2kgS2FzdXMNCg0KU2VidWFoIHBlcnVzYWhhYW4gZS1jb21tZXJjZSBpbmdpbiBtZW5nZXRhaHVpIHJhdGEtcmF0YSBwZW5qdWFsYW4gYnVsYW5hbiBzZWxhbWEgc2V0ZW5nYWggdGFodW4uIE1pc2FsbnlhLCBwZW5qdWFsYW4gYnVsYW5hbm55YSBhZGFsYWg6DQoNCg0KDQp8IEJVTEFOICAgICB8ICBKVU1BTCBVTklUICAgIHwgDQp8LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwNCnwgSmFudWFyaSAgIHwgICAgMTAuMDAwICAgICAgfCANCnwgRmVicnVhcmkgIHwgICAgMTIuMDAwICAgICAgfCANCnwgTWFyZXQgICAgIHwgICAgMTEuMDAwICAgICAgfCANCnwgQXByaWwgICAgIHwgICAgMTUuMDAwICAgICAgfCANCnwgTWVpICAgICAgIHwgICAgMTMuMDAwICAgICAgfCANCnwgSnVuaSAgICAgIHwgICAgMTAuMDAwICAgICAgfCANCg0KLSBNZW5naGl0dW5nIFJhdGEtUmF0YToNCiQkDQpcdGV4dHtSYXRhLXJhdGEgUGVuanVhbGFufSA9IFxmcmFjezEwLjAwMCArIDEyLjAwMCArIDExLjAwMCArIDE1LjAwMCArIDEzLjAwMCArIDEwLjAwMH17Nn0gPSAxMS44MzMgXCwgXHRleHR7dW5pdH0NCiQkDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkgeWFuZyBkaXBlcmx1a2FuDQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBEYXRhIEp1bWxhaCBVbml0DQpidWxhbiA8LSBjKCJKYW51YXJpIiwgIkZlYnJ1YXJpIiwgIk1hcmV0IiwgIkFwcmlsIiwgIk1laSIsICJKdW5pIikNCmp1bWxhaF91bml0IDwtIGMoMTAwMDAsIDEyMDAwLCAxMTAwMCwgMTUwMDAsIDEzMDAwLCAxMDAwMCkNCg0KIyBEYXRhIFRhbnBhIE91dGxpZXIgKGFuZ2dhcCAxNTAwMCBhZGFsYWggb3V0bGllcikNCmp1bWxhaF91bml0X25vX291dGxpZXIgPC0ganVtbGFoX3VuaXRbanVtbGFoX3VuaXQgIT0gMTUwMDBdDQoNCiMgSGl0dW5nIE1lYW4NCm1lYW5fdW5pdCA8LSBtZWFuKGp1bWxhaF91bml0KQ0KbWVhbl9ub19vdXRsaWVyIDwtIG1lYW4oanVtbGFoX3VuaXRfbm9fb3V0bGllcikNCg0KIyBWaXN1YWxpc2FzaSBtZW5nZ3VuYWthbiBQbG90bHkNCg0KIyBEZW5zaXR5IHBsb3QgdW50dWsgZGF0YSBkZW5nYW4gZGFuIHRhbnBhIG91dGxpZXINCmRlbnNpdHlfZGVuZ2FuX291dGxpZXJzIDwtIGRlbnNpdHkoanVtbGFoX3VuaXQpDQpkZW5zaXR5X3RhbnBhX291dGxpZXJzIDwtIGRlbnNpdHkoanVtbGFoX3VuaXRfbm9fb3V0bGllcikNCg0KIyBNZW1idWF0IHBsb3QgbWVuZ2d1bmFrYW4gUGxvdGx5DQpwbG90IDwtIHBsb3RfbHkoKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBkZW5zaXR5IHBsb3QgdW50dWsgZGF0YXNldCBkZW5nYW4gb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSB+ZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeCwNCiAgICB5ID0gfmRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHksDQogICAgdHlwZSA9ICdzY2F0dGVyJywNCiAgICBtb2RlID0gJ2xpbmVzJywNCiAgICBuYW1lID0gIkRlbmdhbiBPdXRsaWVycyIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC44KScsIHdpZHRoID0gMikNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBkZW5zaXR5IHBsb3QgdW50dWsgZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IH5kZW5zaXR5X3RhbnBhX291dGxpZXJzJHgsDQogICAgeSA9IH5kZW5zaXR5X3RhbnBhX291dGxpZXJzJHksDQogICAgdHlwZSA9ICdzY2F0dGVyJywNCiAgICBtb2RlID0gJ2xpbmVzJywNCiAgICBuYW1lID0gIlRhbnBhIE91dGxpZXJzIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjgpJywgd2lkdGggPSAyKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIG1lYW4gdW50dWsgZGF0YXNldCBkZW5nYW4gb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSBjKG1lYW5fdW5pdCwgbWVhbl91bml0KSwNCiAgICB5ID0gYygwLCBtYXgoZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9ICJNZWFuIChEZW5nYW4gT3V0bGllcnMpIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjYpJywgZGFzaCA9ICdkYXNoJykNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBnYXJpcyBtZWFuIHVudHVrIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSBjKG1lYW5fbm9fb3V0bGllciwgbWVhbl9ub19vdXRsaWVyKSwNCiAgICB5ID0gYygwLCBtYXgoZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5KSksDQogICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICBtb2RlID0gImxpbmVzIiwNCiAgICBuYW1lID0gIk1lYW4gKFRhbnBhIE91dGxpZXJzKSIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC42KScsIGRhc2ggPSAnZGFzaCcpDQogICkgJT4lDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJQZW5nYXJ1aCBPdXRsaWVycyB0ZXJoYWRhcCBNZWFuIHBhZGEgRGVuc2l0eSBQbG90IiwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiSnVtbGFoIFVuaXQiKSwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiS2VwYWRhdGFuIiksDQogICAgYW5ub3RhdGlvbnMgPSBsaXN0KA0KICAgICAgIyBBbm90YXNpIHVudHVrIG1lYW4gZGF0YXNldCBkZW5nYW4gb3V0bGllcnMNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSBtZWFuX3VuaXQsDQogICAgICAgIHkgPSBtYXgoZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSkgKiAwLjksDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVhbiAoRGVuZ2FuIE91dGxpZXJzKToiLCByb3VuZChtZWFuX3VuaXQsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC0zMCwNCiAgICAgICAgZm9udCA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC44KScsIHNpemUgPSAxMikNCiAgICAgICksDQogICAgICAjIEFub3Rhc2kgdW50dWsgbWVhbiBkYXRhc2V0IHRhbnBhIG91dGxpZXJzDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gbWVhbl9ub19vdXRsaWVyLA0KICAgICAgICB5ID0gbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkgKiAwLjksDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVhbiAoVGFucGEgT3V0bGllcnMpOiIsIHJvdW5kKG1lYW5fbm9fb3V0bGllciwgMikpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2hlYWQgPSAyLA0KICAgICAgICBheCA9IDAsDQogICAgICAgIGF5ID0gLTQ1LA0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKQ0KICAgICkNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3QNCg0KIyBWaXN1YWxpc2FzaSBCb3hwbG90IChEZW5nYW4gT3V0bGllcikNCmJveHBsb3QoanVtbGFoX3VuaXQsDQogICAgICAgIG1haW4gPSAiQm94cGxvdCBKdW1sYWggVW5pdCAoRGVuZ2FuIE91dGxpZXIpIiwNCiAgICAgICAgeGxhYiA9ICJKdW1sYWggVW5pdCIsDQogICAgICAgIGNvbCA9ICJza3libHVlIiwNCiAgICAgICAgaG9yaXpvbnRhbCA9IFRSVUUpDQphYmxpbmUodiA9IG1lYW5fdW5pdCwgY29sID0gInJlZCIsIGx3ZCA9IDIsIGx0eSA9IDIpICAjIEdhcmlzIG1lYW4NCnRleHQobWVhbl91bml0LCAxLjIsIHBhc3RlKCJNZWFuID0iLCByb3VuZChtZWFuX3VuaXQsIDIpKSwgY29sID0gInJlZCIpICAjIFRhbWJhaGthbiB0ZWtzDQoNCiMgVmlzdWFsaXNhc2kgQm94cGxvdCAoVGFucGEgT3V0bGllcikNCmJveHBsb3QoanVtbGFoX3VuaXRfbm9fb3V0bGllciwNCiAgICAgICAgbWFpbiA9ICJCb3hwbG90IEp1bWxhaCBVbml0IChUYW5wYSBPdXRsaWVyKSIsDQogICAgICAgIHhsYWIgPSAiSnVtbGFoIFVuaXQiLA0KICAgICAgICBjb2wgPSAibGlnaHRncmVlbiIsDQogICAgICAgIGhvcml6b250YWwgPSBUUlVFKQ0KYWJsaW5lKHYgPSBtZWFuX25vX291dGxpZXIsIGNvbCA9ICJyZWQiLCBsd2QgPSAyLCBsdHkgPSAyKSAgIyBHYXJpcyBtZWFuDQp0ZXh0KG1lYW5fbm9fb3V0bGllciwgMS4yLCBwYXN0ZSgiTWVhbiA9Iiwgcm91bmQobWVhbl9ub19vdXRsaWVyLCAyKSksIGNvbCA9ICJyZWQiKQ0KDQojIFZpc3VhbGlzYXNpIEhpc3RvZ3JhbSAoRGVuZ2FuIE91dGxpZXIpDQpoaXN0KGp1bWxhaF91bml0LA0KICAgICBtYWluID0gIkhpc3RvZ3JhbSBKdW1sYWggVW5pdCAoRGVuZ2FuIE91dGxpZXIpIiwNCiAgICAgeGxhYiA9ICJKdW1sYWggVW5pdCIsDQogICAgIGNvbCA9ICJsaWdodGJsdWUiLA0KICAgICBib3JkZXIgPSAid2hpdGUiKQ0KYWJsaW5lKHYgPSBtZWFuX3VuaXQsIGNvbCA9ICJyZWQiLCBsd2QgPSAyLCBsdHkgPSAyKSAgIyBHYXJpcyBtZWFuDQpsZWdlbmQoInRvcHJpZ2h0IiwgbGVnZW5kID0gcGFzdGUoIk1lYW4gPSIsIHJvdW5kKG1lYW5fdW5pdCwgMikpLCBjb2wgPSAicmVkIiwgbHR5ID0gMiwgYnR5ID0gIm4iKQ0KDQojIFZpc3VhbGlzYXNpIEhpc3RvZ3JhbSAoVGFucGEgT3V0bGllcikNCmhpc3QoanVtbGFoX3VuaXRfbm9fb3V0bGllciwNCiAgICAgbWFpbiA9ICJIaXN0b2dyYW0gSnVtbGFoIFVuaXQgKFRhbnBhIE91dGxpZXIpIiwNCiAgICAgeGxhYiA9ICJKdW1sYWggVW5pdCIsDQogICAgIGNvbCA9ICJsaWdodGdyZWVuIiwNCiAgICAgYm9yZGVyID0gIndoaXRlIikNCmFibGluZSh2ID0gbWVhbl9ub19vdXRsaWVyLCBjb2wgPSAicmVkIiwgbHdkID0gMiwgbHR5ID0gMikgICMgR2FyaXMgbWVhbg0KbGVnZW5kKCJ0b3ByaWdodCIsIGxlZ2VuZCA9IHBhc3RlKCJNZWFuID0iLCByb3VuZChtZWFuX25vX291dGxpZXIsIDIpKSwgY29sID0gInJlZCIsIGx0eSA9IDIsIGJ0eSA9ICJuIikNCg0KDQpgYGANCg0KDQojIyMjIEtlc2ltcHVsYW4gDQoNClJhdGEtcmF0YSBpbmkgbWVtYmVyaSBwZXJ1c2FoYWFuIGdhbWJhcmFuIHRlbnRhbmcgdm9sdW1lIHBlbmp1YWxhbiBidWxhbmFuIHlhbmcgc3RhYmlsIGRhbiBkYXBhdCBkaWd1bmFrYW4gdW50dWsgbWVyZW5jYW5ha2FuIHN0cmF0ZWdpIGJpc25pcyBiZXJpa3V0bnlhLg0KDQogICAgDQogIA0KIyMjIDEuMiBBbmFsaXNpcyBIYXJnYSBTYWhhbSBEaSBwYXNhciBzYWhhbQ0KDQppbnZlc3RvciBzZXJpbmcgbWVuZ2d1bmFrYW4gbmlsYWkgdGVuZ2FoIChtZWRpYW4pIHVudHVrIG1lbWFoYW1pIHBlcmdlcmFrYW4gaGFyZ2Egc2FoYW0geWFuZyAgICBsZWJpaCBzdGFiaWwsIGthcmVuYSBtZWRpYW4gdGlkYWsgdGVycGVuZ2FydWggb2xlaCBmbHVrdHVhc2kgZWtzdHJlbSB5YW5nIGRhcGF0IG1lbnllYmFia2FuIG5pbGFpIHJhdGEtcmF0YSBtZW5qYWRpIGJpYXMuDQoNCiAgICAgLSBDb250b2g6IEppa2Egc2VidWFoIHNhaGFtIG1lbmdhbGFtaSBsb25qYWthbiBoYXJnYSB5YW5nIHNhbmdhdCB0aW5nZ2kgYXRhdSByZW5kYWggZGFsYW0gcGVyaW9kZSB0ZXJ0ZW50dSwgbWVkaWFuIGRhcGF0ICAgICAgICAgICAgICAgICAgICAgIG1lbWJlcmlrYW4gICAgZ2FtYmFyYW4geWFuZyBsZWJpaCBha3VyYXQgdGVudGFuZyBoYXJnYSB0ZW5nYWggc2FoYW0gdGVyc2VidXQuDQoNCiMjIyMgRWtzZWt1c2kgS2FzdXMNCg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQojIE1lbXVhdCBkYXRhc2V0IGRhcmkgQ1NWDQpkYXRhIDwtIHJlYWQuY3N2KCJIYXJnYVNhaGFtLi5jc3YiLCBzZXAgPSAiOyIpDQoNCiMgTWVuYW1waWxrYW4gZGF0YSBhd2FsIGRlbmdhbiBrYWJsZQ0KbGlicmFyeShrbml0cikgIA0Ka2FibGUoZGF0YSkgICMgTWVuZ2d1bmFrYW4gJ2RhdGEnIHNlYmFnYWkgbmFtYSB2YXJpYWJlbA0KYGBgDQpVcnV0a2FuIGhhcmdhIHNhaGFtOiA0OC4wMDAsIDUwLjAwMCwgNTAuNTAwLCA1MS4wMDAsIDUzLjAwMCwgNTUuMDAwLCA3MC4wMDAuIA0KDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCiMgRGF0YSBoYXJnYSBzYWhhbSB5YW5nIHN1ZGFoIGRpdXJ1dGthbg0KaGFyZ2EgPC0gYyg0ODAwMCwgNTAwMDAsIDUwNTAwLCA1MTAwMCwgNTMwMDAsIDU1MDAwLCA3MDAwMCkNCg0KIyBJZGVudGlmaWthc2kgb3V0bGllciAoYW5nZ2FwIGhhcmdhIHBhZGEgU2FidHUsIDcwLjAwMCwgYWRhbGFoIG91dGxpZXIpDQpoYXJnYV9ub19vdXRsaWVyIDwtIGhhcmdhW2hhcmdhICE9IDcwMDAwXSAgIyBIYXB1cyBvdXRsaWVyDQoNCiMgSGl0dW5nIE1lZGlhbiAoZGVuZ2FuIG91dGxpZXIpDQptZWRpYW5faGFyZ2EgPC0gbWVkaWFuKGhhcmdhKQ0KcHJpbnQocGFzdGUoIk1lZGlhbiBIYXJnYSBTYWhhbSAoRGVuZ2FuIE91dGxpZXIpOiIsIG1lZGlhbl9oYXJnYSkpDQoNCiMgSGl0dW5nIE1lZGlhbiAodGFucGEgb3V0bGllcikNCm1lZGlhbl9oYXJnYV9ub19vdXRsaWVyIDwtIG1lZGlhbihoYXJnYV9ub19vdXRsaWVyKQ0KcHJpbnQocGFzdGUoIk1lZGlhbiBIYXJnYSBTYWhhbSAoVGFucGEgT3V0bGllcik6IiwgbWVkaWFuX2hhcmdhX25vX291dGxpZXIpKQ0KDQojIFZpc3VhbGlzYXNpIG1lbmdndW5ha2FuIFBsb3RseQ0KDQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBEZW5zaXR5IHBsb3QgdW50dWsgZGF0YSBkZW5nYW4gZGFuIHRhbnBhIG91dGxpZXINCmRlbnNpdHlfZGVuZ2FuX291dGxpZXJzIDwtIGRlbnNpdHkoaGFyZ2EpDQpkZW5zaXR5X3RhbnBhX291dGxpZXJzIDwtIGRlbnNpdHkoaGFyZ2Ffbm9fb3V0bGllcikNCg0KIyBNZW1idWF0IHBsb3QgbWVuZ2d1bmFrYW4gUGxvdGx5DQpwbG90IDwtIHBsb3RfbHkoKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBkZW5zaXR5IHBsb3QgdW50dWsgZGF0YXNldCBkZW5nYW4gb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSB+ZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeCwNCiAgICB5ID0gfmRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHksDQogICAgdHlwZSA9ICdzY2F0dGVyJywNCiAgICBtb2RlID0gJ2xpbmVzJywNCiAgICBuYW1lID0gIkRlbmdhbiBPdXRsaWVycyIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC44KScsIHdpZHRoID0gMikNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBkZW5zaXR5IHBsb3QgdW50dWsgZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IH5kZW5zaXR5X3RhbnBhX291dGxpZXJzJHgsDQogICAgeSA9IH5kZW5zaXR5X3RhbnBhX291dGxpZXJzJHksDQogICAgdHlwZSA9ICdzY2F0dGVyJywNCiAgICBtb2RlID0gJ2xpbmVzJywNCiAgICBuYW1lID0gIlRhbnBhIE91dGxpZXJzIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjgpJywgd2lkdGggPSAyKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIG1lZGlhbiB1bnR1ayBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IGMobWVkaWFuX2hhcmdhLCBtZWRpYW5faGFyZ2EpLA0KICAgIHkgPSBjKDAsIG1heChkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5KSksDQogICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICBtb2RlID0gImxpbmVzIiwNCiAgICBuYW1lID0gIk1lZGlhbiAoRGVuZ2FuIE91dGxpZXJzKSIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC42KScsIGRhc2ggPSAnZGFzaCcpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZ2FyaXMgbWVkaWFuIHVudHVrIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSBjKG1lZGlhbl9oYXJnYV9ub19vdXRsaWVyLCBtZWRpYW5faGFyZ2Ffbm9fb3V0bGllciksDQogICAgeSA9IGMoMCwgbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9ICJNZWRpYW4gKFRhbnBhIE91dGxpZXJzKSIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC42KScsIGRhc2ggPSAnZGFzaCcpDQogICkgJT4lDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJQZW5nYXJ1aCBPdXRsaWVycyB0ZXJoYWRhcCBNZWRpYW4gcGFkYSBEZW5zaXR5IFBsb3QiLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJIYXJnYSBTYWhhbSAoUnApIiksDQogICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIktlcGFkYXRhbiIpLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgICMgQW5vdGFzaSB1bnR1ayBtZWRpYW4gZGF0YXNldCBkZW5nYW4gb3V0bGllcnMNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSBtZWRpYW5faGFyZ2EsDQogICAgICAgIHkgPSBtYXgoZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSkgKiAwLjksDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVkaWFuIChEZW5nYW4gT3V0bGllcnMpOiIsIHJvdW5kKG1lZGlhbl9oYXJnYSwgMikpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2hlYWQgPSAyLA0KICAgICAgICBheCA9IDAsDQogICAgICAgIGF5ID0gLTMwLA0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKSwNCiAgICAgICMgQW5vdGFzaSB1bnR1ayBtZWRpYW4gZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1lZGlhbl9oYXJnYV9ub19vdXRsaWVyLA0KICAgICAgICB5ID0gbWF4KGRlbnNpdHlfdGFucGFfb3V0bGllcnMkeSkgKiAwLjksDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVkaWFuIChUYW5wYSBPdXRsaWVycyk6Iiwgcm91bmQobWVkaWFuX2hhcmdhX25vX291dGxpZXIsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC00NSwNCiAgICAgICAgZm9udCA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScsIHNpemUgPSAxMikNCiAgICAgICkNCiAgICApDQogICkNCg0KIyBNZW5hbXBpbGthbiBwbG90DQpwbG90DQoNCiMgVmlzdWFsaXNhc2kgQm94cGxvdCAoRGVuZ2FuIE91dGxpZXIpDQpib3hwbG90KGhhcmdhLA0KICAgICAgICBtYWluID0gIkJveHBsb3QgSGFyZ2EgU2FoYW0gKERlbmdhbiBPdXRsaWVyKSIsDQogICAgICAgIHhsYWIgPSAiSGFyZ2EgU2FoYW0gKFJwKSIsDQogICAgICAgIGNvbCA9ICJza3libHVlIiwNCiAgICAgICAgaG9yaXpvbnRhbCA9IFRSVUUpDQphYmxpbmUodiA9IG1lZGlhbl9oYXJnYSwgY29sID0gInJlZCIsIGx3ZCA9IDIsIGx0eSA9IDIpICAjIEdhcmlzIG1lZGlhbg0KdGV4dChtZWRpYW5faGFyZ2EsIDEuMiwgcGFzdGUoIk1lZGlhbiA9IiwgbWVkaWFuX2hhcmdhKSwgY29sID0gInJlZCIpICAjIFRhbWJhaGthbiB0ZWtzDQoNCiMgVmlzdWFsaXNhc2kgQm94cGxvdCAoVGFucGEgT3V0bGllcikNCmJveHBsb3QoaGFyZ2Ffbm9fb3V0bGllciwNCiAgICAgICAgbWFpbiA9ICJCb3hwbG90IEhhcmdhIFNhaGFtIChUYW5wYSBPdXRsaWVyKSIsDQogICAgICAgIHhsYWIgPSAiSGFyZ2EgU2FoYW0gKFJwKSIsDQogICAgICAgIGNvbCA9ICJsaWdodGdyZWVuIiwNCiAgICAgICAgaG9yaXpvbnRhbCA9IFRSVUUpDQphYmxpbmUodiA9IG1lZGlhbl9oYXJnYV9ub19vdXRsaWVyLCBjb2wgPSAicmVkIiwgbHdkID0gMiwgbHR5ID0gMikgICMgR2FyaXMgbWVkaWFuDQp0ZXh0KG1lZGlhbl9oYXJnYV9ub19vdXRsaWVyLCAxLjIsIHBhc3RlKCJNZWRpYW4gPSIsIG1lZGlhbl9oYXJnYV9ub19vdXRsaWVyKSwgY29sID0gInJlZCIpDQoNCiMgVmlzdWFsaXNhc2kgSGlzdG9ncmFtIChEZW5nYW4gT3V0bGllcikNCmhpc3QoaGFyZ2EsDQogICAgIG1haW4gPSAiSGlzdG9ncmFtIEhhcmdhIFNhaGFtIChEZW5nYW4gT3V0bGllcikiLA0KICAgICB4bGFiID0gIkhhcmdhIFNhaGFtIChScCkiLA0KICAgICBjb2wgPSAibGlnaHRibHVlIiwNCiAgICAgYm9yZGVyID0gIndoaXRlIikNCmFibGluZSh2ID0gbWVkaWFuX2hhcmdhLCBjb2wgPSAicmVkIiwgbHdkID0gMiwgbHR5ID0gMikgICMgR2FyaXMgbWVkaWFuDQpsZWdlbmQoInRvcHJpZ2h0IiwgbGVnZW5kID0gcGFzdGUoIk1lZGlhbiA9IiwgbWVkaWFuX2hhcmdhKSwgY29sID0gInJlZCIsIGx0eSA9IDIsIGJ0eSA9ICJuIikNCg0KIyBWaXN1YWxpc2FzaSBIaXN0b2dyYW0gKFRhbnBhIE91dGxpZXIpDQpoaXN0KGhhcmdhX25vX291dGxpZXIsDQogICAgIG1haW4gPSAiSGlzdG9ncmFtIEhhcmdhIFNhaGFtIChUYW5wYSBPdXRsaWVyKSIsDQogICAgIHhsYWIgPSAiSGFyZ2EgU2FoYW0gKFJwKSIsDQogICAgIGNvbCA9ICJsaWdodGdyZWVuIiwNCiAgICAgYm9yZGVyID0gIndoaXRlIikNCmFibGluZSh2ID0gbWVkaWFuX2hhcmdhX25vX291dGxpZXIsIGNvbCA9ICJyZWQiLCBsd2QgPSAyLCBsdHkgPSAyKSAgIyBHYXJpcyBtZWRpYW4NCmxlZ2VuZCgidG9wcmlnaHQiLCBsZWdlbmQgPSBwYXN0ZSgiTWVkaWFuID0iLCBtZWRpYW5faGFyZ2Ffbm9fb3V0bGllciksIGNvbCA9ICJyZWQiLCBsdHkgPSAyLCBidHkgPSAibiIpDQpgYGANCg0KIyMjIyBLZXNpbXB1bGFuDQoNCk5pbGFpIHRlbmdhaCAobWVkaWFuKSBhZGFsYWggNTEuMDAwLCB5YW5nIG1lbnVuanVra2FuIGhhcmdhIHNhaGFtIHlhbmcgcGFsaW5nIHJlcHJlc2VudGF0aWYsIG1lbmd1cmFuZ2kgcGVuZ2FydWggZmx1a3R1YXNpIGVrc3RyZW0uDQogIA0KIyMjIDEuMyBJZGVudGlmaWthc2kgVHJlbiBkYWxhbSBQcmVmZXJlbnNpIEtvbnN1bWVuIEJpc25pcyBkZW5nYW4gTW9kdXMNCg0Kc2VyaW5nIG1lbmdndW5ha2FuIG1vZHVzIHVudHVrIG1lbmdldGFodWkgcHJvZHVrIGF0YXUgbGF5YW5hbiB5YW5nIHBhbGluZyAgICAgICAgc2VyaW5nIGRpcGlsaWggb2xlaCBrb25zdW1lbi4gSW5pIG1lbWJhbnR1IGRhbGFtIHBlbmdlbWJhbmdhbiBwcm9kdWsgYXRhdSBrYW1wYW55ZSBwZW1hc2FyYW4geWFuZyBsZWJpaCBzZXN1YWkgZGVuZ2FuIHByZWZlcmVuc2kgICAgcGVsYW5nZ2FuLg0KDQogICAgLSBDb250b2g6SmlrYSBzZWJ1YWggdG9rbyBpbmdpbiBtZW5nZXRhaHVpIHByb2R1ayBtYW5hIHlhbmcgcGFsaW5nIHNlcmluZyBkaWJlbGksIG1lcmVrYSBkYXBhdCBtZW5naGl0dW5nIG1vZHVzIGJlcmRhc2Fya2FuICAgICAgICAgICAgICAgICAgZGF0YSBwZW5qdWFsYW4uDQoNCiMjIyMgRWtzZXNrdXNpIEthc3VzDQoNClRva28gcml0ZWwgaW5naW4gbWVuZ2V0YWh1aSBwcm9kdWsgbWFuYSB5YW5nIHBhbGluZyBzZXJpbmcgZGliZWxpIG9sZWggcGVsYW5nZ2FuLiBCZXJpa3V0IGFkYWxhaCBqdW1sYWggcGVtYmVsaWFuIHByb2R1ayBBLCBCLCBkYW4gQyBkYWxhbSBzYXR1IG1pbmdndToNCg0KfCAgUFJPRFVLICAgfCBUT1RBTCBQRU1CRUxJQU4gfCANCnwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwNCnwgICAgQSAgICAgIHwgICAgICAgNDAgICAgICAgIHwgDQp8ICAgIEIgICAgICB8ICAgICAgIDYwICAgICAgICB8IA0KfCAgICBDICAgICAgfCAgICAgICA2MCAgICAgICAgfCANCnwgICAgRCAgICAgIHwgICAgICAgMzAgICAgICAgIHwgDQp8ICAgIEUgICAgICB8ICAgICAgIDIwICAgICAgICB8IA0KDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCiMgRGF0YSBUb3RhbCBQZW1iZWxpYW4NCnByb2R1ayA8LSBjKCJBIiwgIkIiLCAiQyIsICJEIiwgIkUiKQ0KdG90YWxfcGVtYmVsaWFuIDwtIGMoNDAsIDYwLCA2MCwgMzAsIDIwKQ0KDQojIEZ1bmdzaSB1bnR1ayBtZW5naGl0dW5nIG1vZHVzDQptb2R1cyA8LSBmdW5jdGlvbih4KSB7DQogIHVuaXFfeCA8LSB1bmlxdWUoeCkgICMgTmlsYWkgdW5paw0KICBmcmVxIDwtIHRhYnVsYXRlKG1hdGNoKHgsIHVuaXFfeCkpICAjIEZyZWt1ZW5zaSBtYXNpbmctbWFzaW5nIG5pbGFpDQogIHVuaXFfeFt3aGljaChmcmVxID09IG1heChmcmVxKSldICAjIE5pbGFpIGRlbmdhbiBmcmVrdWVuc2kgdGVydGluZ2dpDQp9DQoNCiMgSGl0dW5nIE1vZHVzDQptb2R1c19wZW1iZWxpYW4gPC0gbW9kdXModG90YWxfcGVtYmVsaWFuKQ0KcHJpbnQocGFzdGUoIk1vZHVzIFRvdGFsIFBlbWJlbGlhbjoiLCBtb2R1c19wZW1iZWxpYW4pKQ0KDQojIElkZW50aWZpa2FzaSBPdXRsaWVyIChhbmdnYXAgbmlsYWkgNjAgc2ViYWdhaSBvdXRsaWVyKQ0KdG90YWxfcGVtYmVsaWFuX25vX291dGxpZXIgPC0gdG90YWxfcGVtYmVsaWFuW3RvdGFsX3BlbWJlbGlhbiAhPSA2MF0gICMgSGFwdXMgb3V0bGllcg0KDQojIEJveHBsb3QgZGVuZ2FuIE91dGxpZXINCmJveHBsb3QodG90YWxfcGVtYmVsaWFuLA0KICAgICAgICBtYWluID0gIkJveHBsb3QgVG90YWwgUGVtYmVsaWFuIChEZW5nYW4gT3V0bGllcikiLA0KICAgICAgICB5bGFiID0gIlRvdGFsIFBlbWJlbGlhbiIsDQogICAgICAgIGNvbCA9ICJza3libHVlIiwNCiAgICAgICAgaG9yaXpvbnRhbCA9IFRSVUUpDQphYmxpbmUodiA9IG1vZHVzX3BlbWJlbGlhbiwgY29sID0gInJlZCIsIGx3ZCA9IDIsIGx0eSA9IDIpICAjIEdhcmlzIG1vZHVzDQp0ZXh0KG1vZHVzX3BlbWJlbGlhbiwgMS4yLCBwYXN0ZSgiTW9kdXMgPSIsIG1vZHVzX3BlbWJlbGlhbiksIGNvbCA9ICJyZWQiKSAgIyBUYW1iYWhrYW4gdGVrcw0KDQojIEJveHBsb3QgdGFucGEgT3V0bGllcg0KYm94cGxvdCh0b3RhbF9wZW1iZWxpYW5fbm9fb3V0bGllciwNCiAgICAgICAgbWFpbiA9ICJCb3hwbG90IFRvdGFsIFBlbWJlbGlhbiAoVGFucGEgT3V0bGllcikiLA0KICAgICAgICB5bGFiID0gIlRvdGFsIFBlbWJlbGlhbiIsDQogICAgICAgIGNvbCA9ICJsaWdodGdyZWVuIiwNCiAgICAgICAgaG9yaXpvbnRhbCA9IFRSVUUpDQptb2R1c19ub19vdXRsaWVyIDwtIG1vZHVzKHRvdGFsX3BlbWJlbGlhbl9ub19vdXRsaWVyKQ0KYWJsaW5lKHYgPSBtb2R1c19ub19vdXRsaWVyLCBjb2wgPSAicmVkIiwgbHdkID0gMiwgbHR5ID0gMikgICMgR2FyaXMgbW9kdXMNCnRleHQobW9kdXNfbm9fb3V0bGllciwgMS4yLCBwYXN0ZSgiTW9kdXMgPSIsIG1vZHVzX25vX291dGxpZXIpLCBjb2wgPSAicmVkIikNCg0KIyBIaXN0b2dyYW0gZGVuZ2FuIE91dGxpZXINCmhpc3QodG90YWxfcGVtYmVsaWFuLA0KICAgICBtYWluID0gIkhpc3RvZ3JhbSBUb3RhbCBQZW1iZWxpYW4gKERlbmdhbiBPdXRsaWVyKSIsDQogICAgIHhsYWIgPSAiVG90YWwgUGVtYmVsaWFuIiwNCiAgICAgY29sID0gImxpZ2h0Ymx1ZSIsDQogICAgIGJvcmRlciA9ICJ3aGl0ZSIpDQphYmxpbmUodiA9IG1vZHVzX3BlbWJlbGlhbiwgY29sID0gInJlZCIsIGx3ZCA9IDIsIGx0eSA9IDIpICAjIEdhcmlzIG1vZHVzDQpsZWdlbmQoInRvcHJpZ2h0IiwgbGVnZW5kID0gcGFzdGUoIk1vZHVzID0iLCBtb2R1c19wZW1iZWxpYW4pLCBjb2wgPSAicmVkIiwgbHR5ID0gMiwgYnR5ID0gIm4iKQ0KDQojIEhpc3RvZ3JhbSB0YW5wYSBPdXRsaWVyDQpoaXN0KHRvdGFsX3BlbWJlbGlhbl9ub19vdXRsaWVyLA0KICAgICBtYWluID0gIkhpc3RvZ3JhbSBUb3RhbCBQZW1iZWxpYW4gKFRhbnBhIE91dGxpZXIpIiwNCiAgICAgeGxhYiA9ICJUb3RhbCBQZW1iZWxpYW4iLA0KICAgICBjb2wgPSAibGlnaHRncmVlbiIsDQogICAgIGJvcmRlciA9ICJ3aGl0ZSIpDQphYmxpbmUodiA9IG1vZHVzX25vX291dGxpZXIsIGNvbCA9ICJyZWQiLCBsd2QgPSAyLCBsdHkgPSAyKSAgIyBHYXJpcyBtb2R1cw0KbGVnZW5kKCJ0b3ByaWdodCIsIGxlZ2VuZCA9IHBhc3RlKCJNb2R1cyA9IiwgbW9kdXNfbm9fb3V0bGllciksIGNvbCA9ICJyZWQiLCBsdHkgPSAyLCBidHkgPSAibiIpDQoNCiMgVmlzdWFsaXNhc2kgQmFyIFBsb3QgKERlbmdhbiBPdXRsaWVyKQ0KYmFycGxvdCh0b3RhbF9wZW1iZWxpYW4sDQogICAgICAgIG5hbWVzLmFyZyA9IHByb2R1aywNCiAgICAgICAgbWFpbiA9ICJWaXN1YWxpc2FzaSBNb2R1cyBUb3RhbCBQZW1iZWxpYW4gKERlbmdhbiBPdXRsaWVyKSIsDQogICAgICAgIHhsYWIgPSAiUHJvZHVrIiwNCiAgICAgICAgeWxhYiA9ICJUb3RhbCBQZW1iZWxpYW4iLA0KICAgICAgICBjb2wgPSBpZmVsc2UodG90YWxfcGVtYmVsaWFuID09IG1vZHVzX3BlbWJlbGlhbiwgInJlZCIsICJza3libHVlIiksDQogICAgICAgIGJvcmRlciA9ICJ3aGl0ZSIpDQpsZWdlbmQoInRvcHJpZ2h0IiwNCiAgICAgICBsZWdlbmQgPSBwYXN0ZSgiTW9kdXMgPSIsIG1vZHVzX3BlbWJlbGlhbiksDQogICAgICAgZmlsbCA9ICJyZWQiLA0KICAgICAgIGJ0eSA9ICJuIikgICMgVGFtYmFoa2FuIGxlZ2VuZGEgdW50dWsgbW9kdXMNCg0KIyBWaXN1YWxpc2FzaSBCYXIgUGxvdCAoVGFucGEgT3V0bGllcikNCmJhcnBsb3QodG90YWxfcGVtYmVsaWFuX25vX291dGxpZXIsDQogICAgICAgIG5hbWVzLmFyZyA9IHByb2R1a1t0b3RhbF9wZW1iZWxpYW4gIT0gNjBdLA0KICAgICAgICBtYWluID0gIlZpc3VhbGlzYXNpIE1vZHVzIFRvdGFsIFBlbWJlbGlhbiAoVGFucGEgT3V0bGllcikiLA0KICAgICAgICB4bGFiID0gIlByb2R1ayIsDQogICAgICAgIHlsYWIgPSAiVG90YWwgUGVtYmVsaWFuIiwNCiAgICAgICAgY29sID0gaWZlbHNlKHRvdGFsX3BlbWJlbGlhbl9ub19vdXRsaWVyID09IG1vZHVzX25vX291dGxpZXIsICJyZWQiLCAibGlnaHRncmVlbiIpLA0KICAgICAgICBib3JkZXIgPSAid2hpdGUiKQ0KbGVnZW5kKCJ0b3ByaWdodCIsDQogICAgICAgbGVnZW5kID0gcGFzdGUoIk1vZHVzID0iLCBtb2R1c19ub19vdXRsaWVyKSwNCiAgICAgICBmaWxsID0gInJlZCIsDQogICAgICAgYnR5ID0gIm4iKQ0KDQpgYGANCg0KIyMjIyBLZXNpbXB1bGFuDQoNCk1vZHVzOiBNb2R1cyBkYXJpIGRhdGEgaW5pIGFkYWxhaCBwcm9kdWsgQiBkYW4gQywga2FyZW5hIGtlZHVhbnlhIG1lbWlsaWtpIGp1bWxhaCBwZW1iZWxpYW4gdGVyYmFueWFrICg2MCksIHlhbmcgbWVtYmFudHUgdG9rbyBmb2t1cyBwYWRhIHBlbWFzYXJhbiBrZWR1YSBwcm9kdWsgdGVyc2VidXQuDQoNCiAgICAgDQoNCiMjIDIuIEtlc2VoYXRhbg0KDQpEaSBiaWRhbmcga2VzZWhhdGFuLCB1a3VyYW4gcGVtdXNhdGFuIGRhdGEgc2FuZ2F0IHBlbnRpbmcgdW50dWsgbWVuZ2FuYWxpc2lzIHBvbGEgcGVueWFraXQsIGVmaXNpZW5zaSBwZXJhd2F0YW4ga2VzZWhhdGFuLCBkYW4gZGlzdHJpYnVzaSB2YXJpYWJlbCBrZXNlaGF0YW4gbGFpbm55YS4gQmVyaWt1dCBhZGFsYWggY29udG9oIHBlbmVyYXBhbiB1a3VyYW4gcGVtdXNhdGFuIGRhdGEgZGFsYW0ga2VzZWhhdGFuOg0KDQojIyMgMi4xIFBlbmd1a3VyYW4gUmF0YS1SYXRhIFVzaWEgUGFzaWVuIA0KDQpEYWxhbSBhbmFsaXNpcyBkZW1vZ3JhZmlzIHJ1bWFoIHNha2l0IGF0YXUga2xpbmlrLCByYXRhLXJhdGEgdXNpYSBwYXNpZW4gZGlndW5ha2FuIHVudHVrIG1lbWFoYW1pIHByb2ZpbCB1c2lhIHBvcHVsYXNpIHlhbmcgZGlsYXlhbmksIHlhbmcgcGVudGluZyB1bnR1ayBwZXJlbmNhbmFhbiBsYXlhbmFuIGtlc2VoYXRhbi4NCg0KICAgIC0gQ29udG9oOiBSdW1haCBzYWtpdCBkYXBhdCBtZW5naGl0dW5nIHJhdGEtcmF0YSB1c2lhIHBhc2llbiB1bnR1ayBtZXJlbmNhbmFrYW4gZmFzaWxpdGFzIGF0YXUgcGVyYXdhdGFuIHlhbmcgbGViaWggc2VzdWFpIGRlbmdhbiBrZWxvbXBvayB1c2lhIHRlcnRlbnR1Lg0KICAgIA0KIyMjIyBFa3Nlc2t1c2kgS2FzdXMNCg0KU2VidWFoIHJ1bWFoIHNha2l0IGluZ2luIG1lbmdldGFodWkgcmF0YS1yYXRhIHVzaWEgcGFzaWVuIHlhbmcgZGF0YW5nIHNlbGFtYSBzZW1pbmdndS4gRGF0YSB1c2lhIHBhc2llbiBhZGFsYWg6DQoNCi0gMjUgdGFodW4NCg0KLSAzMCB0YWh1bg0KDQotIDM1IHRhaHVuDQoNCi0gNDAgdGFodW4NCg0KLSA0NSB0YWh1bg0KDQokJA0KXHRleHR7UmF0YS1yYXRhIFVzaWF9ID0gXGZyYWN7MjUgKyAzMCArIDM1ICsgNDAgKyA0NX17NX0gPSAzNSBcLCBcdGV4dHt0YWh1bn0NCiQkDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkgeWFuZyBkaXBlcmx1a2FuDQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBEYXRhIFVzaWEgUGFzaWVuDQp1c2lhIDwtIGMoMjUsIDMwLCAzNSwgNDAsIDQ1KSAgIyBEYXRhIGRlbmdhbiBvdXRsaWVyICg0NSkNCg0KIyBBbmdnYXAgdXNpYSA0NSBhZGFsYWggb3V0bGllciwgbWFrYSBraXRhIGJ1YXQgZGF0YSB0YW5wYSBvdXRsaWVyDQp1c2lhX25vX291dGxpZXIgPC0gdXNpYVt1c2lhICE9IDQ1XQ0KDQojIEhpdHVuZyBNZWFuIHVudHVrIGRhdGEgZGVuZ2FuIGRhbiB0YW5wYSBvdXRsaWVyDQptZWFuX3VzaWEgPC0gbWVhbih1c2lhKQ0KbWVhbl91c2lhX25vX291dGxpZXIgPC0gbWVhbih1c2lhX25vX291dGxpZXIpDQoNCiMgVmlzdWFsaXNhc2kgbWVuZ2d1bmFrYW4gUGxvdGx5DQoNCiMgRGVuc2l0eSBwbG90IHVudHVrIGRhdGEgdXNpYSBkZW5nYW4gb3V0bGllcg0KZGVuc2l0eV91c2lhIDwtIGRlbnNpdHkodXNpYSkNCiMgRGVuc2l0eSBwbG90IHVudHVrIGRhdGEgdXNpYSB0YW5wYSBvdXRsaWVyDQpkZW5zaXR5X3VzaWFfbm9fb3V0bGllciA8LSBkZW5zaXR5KHVzaWFfbm9fb3V0bGllcikNCg0KIyBNZW1idWF0IHBsb3QgbWVuZ2d1bmFrYW4gUGxvdGx5DQpwbG90IDwtIHBsb3RfbHkoKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBkZW5zaXR5IHBsb3QgdW50dWsgZGF0YSB1c2lhIGRlbmdhbiBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IH5kZW5zaXR5X3VzaWEkeCwNCiAgICB5ID0gfmRlbnNpdHlfdXNpYSR5LA0KICAgIHR5cGUgPSAnc2NhdHRlcicsDQogICAgbW9kZSA9ICdsaW5lcycsDQogICAgbmFtZSA9ICJEZW5nYW4gT3V0bGllcnMiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuOCknLCB3aWR0aCA9IDIpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZGVuc2l0eSBwbG90IHVudHVrIGRhdGEgdXNpYSB0YW5wYSBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IH5kZW5zaXR5X3VzaWFfbm9fb3V0bGllciR4LA0KICAgIHkgPSB+ZGVuc2l0eV91c2lhX25vX291dGxpZXIkeSwNCiAgICB0eXBlID0gJ3NjYXR0ZXInLA0KICAgIG1vZGUgPSAnbGluZXMnLA0KICAgIG5hbWUgPSAiVGFucGEgT3V0bGllcnMiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMzgsIDE2NiwgOTEsIDAuOCknLCB3aWR0aCA9IDIpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZ2FyaXMgbWVhbiB1bnR1ayBkYXRhIHVzaWEgZGVuZ2FuIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gYyhtZWFuX3VzaWEsIG1lYW5fdXNpYSksDQogICAgeSA9IGMoMCwgbWF4KGRlbnNpdHlfdXNpYSR5KSksDQogICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICBtb2RlID0gImxpbmVzIiwNCiAgICBuYW1lID0gIk1lYW4gKERlbmdhbiBPdXRsaWVycykiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuNiknLCBkYXNoID0gJ2Rhc2gnKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIG1lYW4gdW50dWsgZGF0YSB1c2lhIHRhbnBhIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gYyhtZWFuX3VzaWFfbm9fb3V0bGllciwgbWVhbl91c2lhX25vX291dGxpZXIpLA0KICAgIHkgPSBjKDAsIG1heChkZW5zaXR5X3VzaWFfbm9fb3V0bGllciR5KSksDQogICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICBtb2RlID0gImxpbmVzIiwNCiAgICBuYW1lID0gIk1lYW4gKFRhbnBhIE91dGxpZXJzKSIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC42KScsIGRhc2ggPSAnZGFzaCcpDQogICkgJT4lDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJWaXN1YWxpc2FzaSBSYXRhLVJhdGEgVXNpYSBQYXNpZW4gKERlbmdhbiBkYW4gVGFucGEgT3V0bGllcnMpIiwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiVXNpYSAoVGFodW4pIiksDQogICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIktlcGFkYXRhbiIpLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgICMgQW5vdGFzaSB1bnR1ayBtZWFuIHVzaWEgZGVuZ2FuIG91dGxpZXJzDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gbWVhbl91c2lhLA0KICAgICAgICB5ID0gbWF4KGRlbnNpdHlfdXNpYSR5KSAqIDAuOSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWFuIChEZW5nYW4gT3V0bGllcnMpOiIsIHJvdW5kKG1lYW5fdXNpYSwgMikpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2hlYWQgPSAyLA0KICAgICAgICBheCA9IDAsDQogICAgICAgIGF5ID0gLTMwLA0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKSwNCiAgICAgICMgQW5vdGFzaSB1bnR1ayBtZWFuIHVzaWEgdGFucGEgb3V0bGllcnMNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSBtZWFuX3VzaWFfbm9fb3V0bGllciwNCiAgICAgICAgeSA9IG1heChkZW5zaXR5X3VzaWFfbm9fb3V0bGllciR5KSAqIDAuOSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWFuIChUYW5wYSBPdXRsaWVycyk6Iiwgcm91bmQobWVhbl91c2lhX25vX291dGxpZXIsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC00NSwNCiAgICAgICAgZm9udCA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScsIHNpemUgPSAxMikNCiAgICAgICkNCiAgICApDQogICkNCg0KIyBNZW5hbXBpbGthbiBwbG90DQpwbG90DQoNCiMgVmlzdWFsaXNhc2kgQm94cGxvdCAoRGVuZ2FuIE91dGxpZXIpDQpib3hwbG90KHVzaWEsDQogICAgICAgIG1haW4gPSAiQm94cGxvdCBVc2lhIFBhc2llbiAoRGVuZ2FuIE91dGxpZXIpIiwNCiAgICAgICAgeGxhYiA9ICJVc2lhIFBhc2llbiIsDQogICAgICAgIGNvbCA9ICJsaWdodGJsdWUiLA0KICAgICAgICBob3Jpem9udGFsID0gVFJVRSkNCmFibGluZSh2ID0gbWVhbl91c2lhLCBjb2wgPSAicmVkIiwgbHdkID0gMiwgbHR5ID0gMikgICMgR2FyaXMgbWVhbg0KdGV4dChtZWFuX3VzaWEsIDEuMiwgcGFzdGUoIk1lYW4gPSIsIHJvdW5kKG1lYW5fdXNpYSwgMikpLCBjb2wgPSAicmVkIikgICMgVGFtYmFoa2FuIHRla3MNCg0KIyBWaXN1YWxpc2FzaSBCb3hwbG90IChUYW5wYSBPdXRsaWVyKQ0KYm94cGxvdCh1c2lhX25vX291dGxpZXIsDQogICAgICAgIG1haW4gPSAiQm94cGxvdCBVc2lhIFBhc2llbiAoVGFucGEgT3V0bGllcikiLA0KICAgICAgICB4bGFiID0gIlVzaWEgUGFzaWVuIiwNCiAgICAgICAgY29sID0gImxpZ2h0Z3JlZW4iLA0KICAgICAgICBob3Jpem9udGFsID0gVFJVRSkNCmFibGluZSh2ID0gbWVhbl91c2lhX25vX291dGxpZXIsIGNvbCA9ICJyZWQiLCBsd2QgPSAyLCBsdHkgPSAyKSAgIyBHYXJpcyBtZWFuDQp0ZXh0KG1lYW5fdXNpYV9ub19vdXRsaWVyLCAxLjIsIHBhc3RlKCJNZWFuID0iLCByb3VuZChtZWFuX3VzaWFfbm9fb3V0bGllciwgMikpLCBjb2wgPSAicmVkIikNCg0KIyBWaXN1YWxpc2FzaSBIaXN0b2dyYW0gKERlbmdhbiBPdXRsaWVyKQ0KaGlzdCh1c2lhLA0KICAgICBtYWluID0gIkhpc3RvZ3JhbSBVc2lhIFBhc2llbiAoRGVuZ2FuIE91dGxpZXIpIiwNCiAgICAgeGxhYiA9ICJVc2lhIFBhc2llbiIsDQogICAgIGNvbCA9ICJsaWdodGJsdWUiLA0KICAgICBib3JkZXIgPSAid2hpdGUiKQ0KYWJsaW5lKHYgPSBtZWFuX3VzaWEsIGNvbCA9ICJyZWQiLCBsd2QgPSAyLCBsdHkgPSAyKSAgIyBHYXJpcyBtZWFuDQpsZWdlbmQoInRvcHJpZ2h0IiwgbGVnZW5kID0gcGFzdGUoIk1lYW4gPSIsIHJvdW5kKG1lYW5fdXNpYSwgMikpLCBjb2wgPSAicmVkIiwgbHR5ID0gMiwgYnR5ID0gIm4iKQ0KDQojIFZpc3VhbGlzYXNpIEhpc3RvZ3JhbSAoVGFucGEgT3V0bGllcikNCmhpc3QodXNpYV9ub19vdXRsaWVyLA0KICAgICBtYWluID0gIkhpc3RvZ3JhbSBVc2lhIFBhc2llbiAoVGFucGEgT3V0bGllcikiLA0KICAgICB4bGFiID0gIlVzaWEgUGFzaWVuIiwNCiAgICAgY29sID0gImxpZ2h0Z3JlZW4iLA0KICAgICBib3JkZXIgPSAid2hpdGUiKQ0KYWJsaW5lKHYgPSBtZWFuX3VzaWFfbm9fb3V0bGllciwgY29sID0gInJlZCIsIGx3ZCA9IDIsIGx0eSA9IDIpICAjIEdhcmlzIG1lYW4NCmxlZ2VuZCgidG9wcmlnaHQiLCBsZWdlbmQgPSBwYXN0ZSgiTWVhbiA9Iiwgcm91bmQobWVhbl91c2lhX25vX291dGxpZXIsIDIpKSwgY29sID0gInJlZCIsIGx0eSA9IDIsIGJ0eSA9ICJuIikNCg0KYGBgDQoNCg0KIyMjIyBQZW5qZWxhc2FuIA0KDQpEZW5nYW4gcmF0YS1yYXRhIHVzaWEgMzUgdGFodW4sIHJ1bWFoIHNha2l0IGRhcGF0IG1lcmVuY2FuYWthbiBsYXlhbmFuIHlhbmcgbGViaWggdGVwYXQsIHNlcGVydGkgZmFzaWxpdGFzIG1lZGlzIGF0YXUgcGVuZ29iYXRhbiB5YW5nIHNlc3VhaSBkZW5nYW4ga2Vsb21wb2sgdXNpYSBpbmkuDQoNCiMjIyAyLjIgU3RhdGlzdGlrIFBlbnlha2l0IE1lZGlhbiANCg0KU2VyaW5nIGRpZ3VuYWthbiBkYWxhbSBlcGlkZW1pb2xvZ2kgdW50dWsgbWVuZ2dhbWJhcmthbiBkaXN0cmlidXNpIGRhdGEgcGVueWFraXQsIHNlcGVydGkgd2FrdHUgYmVydGFoYW4gaGlkdXAgcGFzaWVuIGF0YXUgdXNpYSBkaWFnbm9zaXMgcGVueWFraXQgdGVydGVudHUuIE1lZGlhbiBsZWJpaCBkaXN1a2FpIGthcmVuYSB0aWRhayB0ZXJwZW5nYXJ1aCBvbGVoIGRhdGEgZWtzdHJlbS4NCg0KICAgIC0gQ29udG9oOiBEYWxhbSBwZW5lbGl0aWFuIGthbmtlciwgbWVkaWFuIHVtdXIgcGFzaWVuIHNhYXQgZGlkaWFnbm9zaXMgZGFwYXQgZGlndW5ha2FuIHVudHVrIG1lbmdpbmZvcm1hc2lrYW4ga2ViaWpha2FuIGtlc2VoYXRhbiBhdGF1IHBlbmVsaXRpYW4gbGViaWggbGFuanV0Lg0KICAgIA0KIyMjI0Vrc2VrdXNpIEthc3VzDQoNCkRhbGFtIHNlYnVhaCBwZW5lbGl0aWFuIG1lbmdlbmFpIHdha3R1IGJlcnRhaGFuIGhpZHVwIHBhc2llbiBrYW5rZXIsIGRhdGEgd2FrdHUgYmVydGFoYW4gaGlkdXAgKGRhbGFtIGJ1bGFuKSBhZGFsYWg6DQoNCi0JMyBidWxhbg0KDQotIDYgYnVsYW4NCg0KLSA5IGJ1bGFuDQoNCi0gMTIgYnVsYW4NCg0KLSAyMCBidWxhbg0KDQokJA0KXHRleHR7RGF0YTogfSAzLCA2LCA5LCAxMiwgMjAgXFwNClx0ZXh0e01lZGlhbn0gPSA5IFwsIFx0ZXh0e2J1bGFufQ0KJCQNCmBgYHtyLCBtYXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KIyBNZW11YXQgbGlicmFyeSB5YW5nIGRpcGVybHVrYW4NCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGEgVXNpYSBQYXNpZW4NCnVzaWEgPC0gYygyNSwgMzAsIDM1LCA0MCwgNDUpICAjIERhdGEgZGVuZ2FuIG91dGxpZXIgKDQ1KQ0KDQojIEFuZ2dhcCB1c2lhIDQ1IGFkYWxhaCBvdXRsaWVyLCBtYWthIGtpdGEgYnVhdCBkYXRhIHRhbnBhIG91dGxpZXINCnVzaWFfbm9fb3V0bGllciA8LSB1c2lhW3VzaWEgIT0gNDVdDQoNCiMgRGF0YSB3YWt0dSAoZGFsYW0gYnVsYW4pDQpwZXJpb2RlX3dha3R1IDwtIGMoMywgNiwgOSwgMTIsIDIwKQ0KDQojIE1lbmdoaXR1bmcgTWVkaWFuIHVudHVrIGRhdGEgdXNpYSBiZXJkYXNhcmthbiBwZXJpb2RlIHdha3R1DQptZWRpYW5fdXNpYSA8LSBzYXBwbHkocGVyaW9kZV93YWt0dSwgZnVuY3Rpb24odCkgbWVkaWFuKHVzaWEpKSAgIyBNZWRpYW4gdW50dWsgdXNpYSBkZW5nYW4gb3V0bGllcnMNCm1lZGlhbl91c2lhX25vX291dGxpZXIgPC0gc2FwcGx5KHBlcmlvZGVfd2FrdHUsIGZ1bmN0aW9uKHQpIG1lZGlhbih1c2lhX25vX291dGxpZXIpKSAgIyBNZWRpYW4gdW50dWsgdXNpYSB0YW5wYSBvdXRsaWVycw0KDQojIFZpc3VhbGlzYXNpIG1lbmdndW5ha2FuIFBsb3RseQ0KDQojIE1lbWJ1YXQgcGxvdCBtZW5nZ3VuYWthbiBQbG90bHkNCnBsb3QgPC0gcGxvdF9seSgpICU+JQ0KICAjIE1lbmFtYmFoa2FuIHRyYWNlIHVudHVrIG1lZGlhbiB1c2lhIGRlbmdhbiBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IHBlcmlvZGVfd2FrdHUsDQogICAgeSA9IG1lZGlhbl91c2lhLA0KICAgIHR5cGUgPSAnc2NhdHRlcicsDQogICAgbW9kZSA9ICdsaW5lcyttYXJrZXJzJywNCiAgICBuYW1lID0gIk1lZGlhbiAoRGVuZ2FuIE91dGxpZXJzKSIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC44KScsIHdpZHRoID0gMiksDQogICAgbWFya2VyID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjgpJywgc2l6ZSA9IDgpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gdHJhY2UgdW50dWsgbWVkaWFuIHVzaWEgdGFucGEgb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSBwZXJpb2RlX3dha3R1LA0KICAgIHkgPSBtZWRpYW5fdXNpYV9ub19vdXRsaWVyLA0KICAgIHR5cGUgPSAnc2NhdHRlcicsDQogICAgbW9kZSA9ICdsaW5lcyttYXJrZXJzJywNCiAgICBuYW1lID0gIk1lZGlhbiAoVGFucGEgT3V0bGllcnMpIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjgpJywgd2lkdGggPSAyKSwNCiAgICBtYXJrZXIgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMzgsIDE2NiwgOTEsIDAuOCknLCBzaXplID0gOCkNCiAgKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIlZpc3VhbGlzYXNpIE1lZGlhbiBVc2lhIFBhc2llbiBCZXJkYXNhcmthbiBQZXJpb2RlIFdha3R1IiwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiUGVyaW9kZSBXYWt0dSAoQnVsYW4pIiksDQogICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIk1lZGlhbiBVc2lhIChUYWh1bikiKSwNCiAgICBhbm5vdGF0aW9ucyA9IGxpc3QoDQogICAgICAjIEFub3Rhc2kgdW50dWsgbWVkaWFuIHVzaWEgZGVuZ2FuIG91dGxpZXJzDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gcGVyaW9kZV93YWt0dSwNCiAgICAgICAgeSA9IG1lZGlhbl91c2lhLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lZGlhbiAoRGVuZ2FuIE91dGxpZXJzKToiLCByb3VuZChtZWRpYW5fdXNpYSwgMikpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2hlYWQgPSAyLA0KICAgICAgICBheCA9IDAsDQogICAgICAgIGF5ID0gLTMwLA0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKSwNCiAgICAgICMgQW5vdGFzaSB1bnR1ayBtZWRpYW4gdXNpYSB0YW5wYSBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IHBlcmlvZGVfd2FrdHUsDQogICAgICAgIHkgPSBtZWRpYW5fdXNpYV9ub19vdXRsaWVyLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lZGlhbiAoVGFucGEgT3V0bGllcnMpOiIsIHJvdW5kKG1lZGlhbl91c2lhX25vX291dGxpZXIsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC00NSwNCiAgICAgICAgZm9udCA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScsIHNpemUgPSAxMikNCiAgICAgICkNCiAgICApDQogICkNCg0KIyBNZW5hbXBpbGthbiBwbG90DQpwbG90DQoNCiMgVmlzdWFsaXNhc2kgQm94cGxvdCAoRGVuZ2FuIE91dGxpZXIpDQpib3hwbG90KHVzaWEsDQogICAgICAgIG1haW4gPSAiQm94cGxvdCBVc2lhIFBhc2llbiAoRGVuZ2FuIE91dGxpZXIpIiwNCiAgICAgICAgeGxhYiA9ICJVc2lhIFBhc2llbiIsDQogICAgICAgIGNvbCA9ICJsaWdodGJsdWUiLA0KICAgICAgICBob3Jpem9udGFsID0gVFJVRSkNCmFibGluZShoID0gbWVkaWFuX3VzaWEsIGNvbCA9ICJyZWQiLCBsd2QgPSAyLCBsdHkgPSAyKSAgIyBHYXJpcyBtZWRpYW4NCnRleHQobWVkaWFuX3VzaWEsIDEuMiwgcGFzdGUoIk1lZGlhbiA9Iiwgcm91bmQobWVkaWFuX3VzaWEsIDIpKSwgY29sID0gInJlZCIpICAjIFRhbWJhaGthbiB0ZWtzDQoNCiMgVmlzdWFsaXNhc2kgQm94cGxvdCAoVGFucGEgT3V0bGllcikNCmJveHBsb3QodXNpYV9ub19vdXRsaWVyLA0KICAgICAgICBtYWluID0gIkJveHBsb3QgVXNpYSBQYXNpZW4gKFRhbnBhIE91dGxpZXIpIiwNCiAgICAgICAgeGxhYiA9ICJVc2lhIFBhc2llbiIsDQogICAgICAgIGNvbCA9ICJsaWdodGdyZWVuIiwNCiAgICAgICAgaG9yaXpvbnRhbCA9IFRSVUUpDQphYmxpbmUoaCA9IG1lZGlhbl91c2lhX25vX291dGxpZXIsIGNvbCA9ICJyZWQiLCBsd2QgPSAyLCBsdHkgPSAyKSAgIyBHYXJpcyBtZWRpYW4NCnRleHQobWVkaWFuX3VzaWFfbm9fb3V0bGllciwgMS4yLCBwYXN0ZSgiTWVkaWFuID0iLCByb3VuZChtZWRpYW5fdXNpYV9ub19vdXRsaWVyLCAyKSksIGNvbCA9ICJyZWQiKQ0KDQojIFZpc3VhbGlzYXNpIEhpc3RvZ3JhbSAoRGVuZ2FuIE91dGxpZXIpDQpoaXN0KHVzaWEsDQogICAgIG1haW4gPSAiSGlzdG9ncmFtIFVzaWEgUGFzaWVuIChEZW5nYW4gT3V0bGllcikiLA0KICAgICB4bGFiID0gIlVzaWEgUGFzaWVuIiwNCiAgICAgY29sID0gImxpZ2h0Ymx1ZSIsDQogICAgIGJvcmRlciA9ICJ3aGl0ZSIpDQphYmxpbmUodiA9IG1lZGlhbl91c2lhLCBjb2wgPSAicmVkIiwgbHdkID0gMiwgbHR5ID0gMikgICMgR2FyaXMgbWVkaWFuDQpsZWdlbmQoInRvcHJpZ2h0IiwgbGVnZW5kID0gcGFzdGUoIk1lZGlhbiA9Iiwgcm91bmQobWVkaWFuX3VzaWEsIDIpKSwgY29sID0gInJlZCIsIGx0eSA9IDIsIGJ0eSA9ICJuIikNCg0KIyBWaXN1YWxpc2FzaSBIaXN0b2dyYW0gKFRhbnBhIE91dGxpZXIpDQpoaXN0KHVzaWFfbm9fb3V0bGllciwNCiAgICAgbWFpbiA9ICJIaXN0b2dyYW0gVXNpYSBQYXNpZW4gKFRhbnBhIE91dGxpZXIpIiwNCiAgICAgeGxhYiA9ICJVc2lhIFBhc2llbiIsDQogICAgIGNvbCA9ICJsaWdodGdyZWVuIiwNCiAgICAgYm9yZGVyID0gIndoaXRlIikNCmFibGluZSh2ID0gbWVkaWFuX3VzaWFfbm9fb3V0bGllciwgY29sID0gInJlZCIsIGx3ZCA9IDIsIGx0eSA9IDIpICAjIEdhcmlzIG1lZGlhbg0KbGVnZW5kKCJ0b3ByaWdodCIsIGxlZ2VuZCA9IHBhc3RlKCJNZWRpYW4gPSIsIHJvdW5kKG1lZGlhbl91c2lhX25vX291dGxpZXIsIDIpKSwgY29sID0gInJlZCIsIGx0eSA9IDIsIGJ0eSA9ICJuIikNCg0KYGBgDQojIyMjIE1lbmdoaXR1bmcgTWVkaWFuOiANCg0KVXJ1dGthbiBkYXRhOiAzLCA2LCA5LCAxMiwgMjAuIE5pbGFpIHRlbmdhaCAobWVkaWFuKSBhZGFsYWggOSBidWxhbiwgeWFuZyBtZW1iZXJpa2FuIGdhbWJhcmFuIHlhbmcgbGViaWggc3RhYmlsIGRhbiB0aWRhayB0ZXJwZW5nYXJ1aCBvbGVoIGRhdGEgZWtzdHJlbSAobWlzYWxueWEsIHBhc2llbiB5YW5nIGJlcnRhaGFuIGhpZHVwIHNhbmdhdCBsYW1hKS4NCg0KIyMjIDIuMyBGcmVrdWVuc2kgUGVueWFraXQgYXRhdSBHZWphbGEgTW9kdXMgDQoNCmRpZ3VuYWthbiB1bnR1ayBtZW5nZXRhaHVpIGdlamFsYSBhdGF1IHBlbnlha2l0IHlhbmcgcGFsaW5nIHNlcmluZyB0ZXJqYWRpIGRhbGFtIHBvcHVsYXNpIHRlcnRlbnR1LiBJbmkgc2FuZ2F0IHBlbnRpbmcgZGFsYW0gZXBpZGVtaW9sb2dpIHVudHVrIG1lbmVudHVrYW4gcG9sYSBwZW55ZWJhcmFuIHBlbnlha2l0Lg0KDQogICAgLSBDb250b2g6IEppa2EgYmFueWFrIHBhc2llbiB5YW5nIGRhdGFuZyBkZW5nYW4gZ2VqYWxhIGRlbWFtIGRhbiBiYXR1aywgbW9kdXMgYWthbiBtZW51bmp1a2thbiBiYWh3YSBpbmkgYWRhbGFoIGdlamFsYSB5YW5nIHBhbGluZyBzZXJpbmcgZGlsYXBvcmthbiBkYWxhbSBwZXJpb2RlIHRlcnRlbnR1Lg0KICAgIA0KIyMjIyBFa3Nla3VzaSBLYXN1cw0KDQpEaSBydW1haCBzYWtpdCwgZG9rdGVyIGluZ2luIG1lbmdldGFodWkgZ2VqYWxhIHlhbmcgcGFsaW5nIHVtdW0gZGFyaSBwYXNpZW4gZmx1LiBEYXRhIGdlamFsYSB5YW5nIHRlcmNhdGF0IGFkYWxhaDoNCg0KRGVtYW0gPSAzMCBwYXNpZW4NCkJhdHVrID0gNTAgcGFzaWVuDQpTYWtpdCBrZXBhbGEgPSA0MCBwYXNpZW4NCg0KJCQNClx0ZXh0e0RlbWFtOiAzMCBwYXNpZW4sIEJhdHVrOiA1MCBwYXNpZW4sIFNha2l0IGtlcGFsYTogNDAgcGFzaWVufSBcXA0KXHRleHR7TW9kdXM6IEJhdHVrIChwYWxpbmcgc2VyaW5nIGRpbGFwb3JrYW4pfQ0KJCQNCg0KDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCiMgRGF0YSBqdW1sYWggcGFzaWVuIHVudHVrIHNldGlhcCBrYXRlZ29yaQ0Ka2F0ZWdvcmkgPC0gYygiRGVtYW0iLCAiQmF0dWsiLCAiU2FraXQgS2VwYWxhIikNCmp1bWxhaF9wYXNpZW4gPC0gYygzMCwgNTAsIDQwKSAgIyBEYXRhIGRlbmdhbiBvdXRsaWVyDQoNCiMgSWRlbnRpZmlrYXNpIG91dGxpZXIgKGFuZ2dhcCAiQmF0dWsiIGFkYWxhaCBvdXRsaWVyIGthcmVuYSBqdW1sYWhueWEgdGVybGFsdSB0aW5nZ2kpDQpqdW1sYWhfcGFzaWVuX25vX291dGxpZXIgPC0ganVtbGFoX3Bhc2llbltqdW1sYWhfcGFzaWVuICE9IG1heChqdW1sYWhfcGFzaWVuKV0gICMgRGF0YSB0YW5wYSBvdXRsaWVyDQprYXRlZ29yaV9ub19vdXRsaWVyIDwtIGthdGVnb3JpW2p1bWxhaF9wYXNpZW4gIT0gbWF4KGp1bWxhaF9wYXNpZW4pXQ0KDQojIE1vZHVzIChrYXRlZ29yaSBkZW5nYW4ganVtbGFoIHBhc2llbiB0ZXJiYW55YWspDQptb2R1cyA8LSBrYXRlZ29yaVt3aGljaC5tYXgoanVtbGFoX3Bhc2llbildDQpwcmludChwYXN0ZSgiTW9kdXMgKERlbmdhbiBPdXRsaWVyKToiLCBtb2R1cykpDQoNCiMgTW9kdXMgdGFucGEgb3V0bGllcg0KbW9kdXNfbm9fb3V0bGllciA8LSBrYXRlZ29yaV9ub19vdXRsaWVyW3doaWNoLm1heChqdW1sYWhfcGFzaWVuX25vX291dGxpZXIpXQ0KcHJpbnQocGFzdGUoIk1vZHVzIChUYW5wYSBPdXRsaWVyKToiLCBtb2R1c19ub19vdXRsaWVyKSkNCg0KIyBWaXN1YWxpc2FzaSBtZW5nZ3VuYWthbiBQbG90bHkNCg0KbGlicmFyeShwbG90bHkpDQoNCiMgTWVtYnVhdCBwbG90IEhpc3RvZ3JhbQ0KcGxvdCA8LSBwbG90X2x5KCkgJT4lDQogICMgSGlzdG9ncmFtIGRlbmdhbiBvdXRsaWVyDQogIGFkZF90cmFjZSgNCiAgICB4ID0ga2F0ZWdvcmksDQogICAgeSA9IGp1bWxhaF9wYXNpZW4sDQogICAgdHlwZSA9ICdiYXInLA0KICAgIG5hbWUgPSAiRGVuZ2FuIE91dGxpZXIiLA0KICAgIG1hcmtlciA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC44KScpDQogICkgJT4lDQogICMgSGlzdG9ncmFtIHRhbnBhIG91dGxpZXINCiAgYWRkX3RyYWNlKA0KICAgIHggPSBrYXRlZ29yaV9ub19vdXRsaWVyLA0KICAgIHkgPSBqdW1sYWhfcGFzaWVuX25vX291dGxpZXIsDQogICAgdHlwZSA9ICdiYXInLA0KICAgIG5hbWUgPSAiVGFucGEgT3V0bGllciIsDQogICAgbWFya2VyID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjgpJykNCiAgKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIlZpc3VhbGlzYXNpIE1vZHVzIEp1bWxhaCBQYXNpZW4gKERlbmdhbiBkYW4gVGFucGEgT3V0bGllcikiLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJLYXRlZ29yaSIpLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJKdW1sYWggUGFzaWVuIiksDQogICAgYW5ub3RhdGlvbnMgPSBsaXN0KA0KICAgICAgIyBBbm90YXNpIHVudHVrIG1vZHVzIGRhdGFzZXQgZGVuZ2FuIG91dGxpZXJzDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gbW9kdXMsDQogICAgICAgIHkgPSBtYXgoanVtbGFoX3Bhc2llbikgKyA1LA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1vZHVzOiIsIG1vZHVzKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC0zMCwNCiAgICAgICAgZm9udCA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC44KScsIHNpemUgPSAxMikNCiAgICAgICksDQogICAgICAjIEFub3Rhc2kgdW50dWsgbW9kdXMgZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1vZHVzX25vX291dGxpZXIsDQogICAgICAgIHkgPSBtYXgoanVtbGFoX3Bhc2llbl9ub19vdXRsaWVyKSArIDUsDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTW9kdXMgKFRhbnBhIE91dGxpZXIpOiIsIG1vZHVzX25vX291dGxpZXIpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2hlYWQgPSAyLA0KICAgICAgICBheCA9IDAsDQogICAgICAgIGF5ID0gLTMwLA0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKQ0KICAgICkNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QgSGlzdG9ncmFtDQpwbG90DQoNCiMgVmlzdWFsaXNhc2kgQm94cGxvdCAoRGVuZ2FuIE91dGxpZXIpDQpib3hwbG90KGp1bWxhaF9wYXNpZW4sDQogICAgICAgIG1haW4gPSAiQm94cGxvdCBKdW1sYWggUGFzaWVuIChEZW5nYW4gT3V0bGllcikiLA0KICAgICAgICB4bGFiID0gIkp1bWxhaCBQYXNpZW4iLA0KICAgICAgICBjb2wgPSAic2t5Ymx1ZSIsDQogICAgICAgIGhvcml6b250YWwgPSBUUlVFKQ0KYWJsaW5lKHYgPSBtYXgoanVtbGFoX3Bhc2llbiksIGNvbCA9ICJyZWQiLCBsd2QgPSAyLCBsdHkgPSAyKSAgIyBHYXJpcyBtb2R1cw0KdGV4dChtYXgoanVtbGFoX3Bhc2llbiksIDEuMiwgcGFzdGUoIk1vZHVzID0iLCBtb2R1cyksIGNvbCA9ICJyZWQiKSAgIyBUYW1iYWhrYW4gdGVrcw0KDQojIFZpc3VhbGlzYXNpIEJveHBsb3QgKFRhbnBhIE91dGxpZXIpDQpib3hwbG90KGp1bWxhaF9wYXNpZW5fbm9fb3V0bGllciwNCiAgICAgICAgbWFpbiA9ICJCb3hwbG90IEp1bWxhaCBQYXNpZW4gKFRhbnBhIE91dGxpZXIpIiwNCiAgICAgICAgeGxhYiA9ICJKdW1sYWggUGFzaWVuIiwNCiAgICAgICAgY29sID0gImxpZ2h0Z3JlZW4iLA0KICAgICAgICBob3Jpem9udGFsID0gVFJVRSkNCmFibGluZSh2ID0gbWF4KGp1bWxhaF9wYXNpZW5fbm9fb3V0bGllciksIGNvbCA9ICJyZWQiLCBsd2QgPSAyLCBsdHkgPSAyKSAgIyBHYXJpcyBtb2R1cw0KdGV4dChtYXgoanVtbGFoX3Bhc2llbl9ub19vdXRsaWVyKSwgMS4yLCBwYXN0ZSgiTW9kdXMgPSIsIG1vZHVzX25vX291dGxpZXIpLCBjb2wgPSAicmVkIikNCg0KIyBWaXN1YWxpc2FzaSBIaXN0b2dyYW0gKERlbmdhbiBPdXRsaWVyKQ0KaGlzdChqdW1sYWhfcGFzaWVuLA0KICAgICBtYWluID0gIkhpc3RvZ3JhbSBKdW1sYWggUGFzaWVuIChEZW5nYW4gT3V0bGllcikiLA0KICAgICB4bGFiID0gIkp1bWxhaCBQYXNpZW4iLA0KICAgICBjb2wgPSAibGlnaHRibHVlIiwNCiAgICAgYm9yZGVyID0gIndoaXRlIikNCmFibGluZSh2ID0gbWF4KGp1bWxhaF9wYXNpZW4pLCBjb2wgPSAicmVkIiwgbHdkID0gMiwgbHR5ID0gMikgICMgR2FyaXMgbW9kdXMNCmxlZ2VuZCgidG9wcmlnaHQiLCBsZWdlbmQgPSBwYXN0ZSgiTW9kdXMgPSIsIG1vZHVzKSwgY29sID0gInJlZCIsIGx0eSA9IDIsIGJ0eSA9ICJuIikNCg0KIyBWaXN1YWxpc2FzaSBIaXN0b2dyYW0gKFRhbnBhIE91dGxpZXIpDQpoaXN0KGp1bWxhaF9wYXNpZW5fbm9fb3V0bGllciwNCiAgICAgbWFpbiA9ICJIaXN0b2dyYW0gSnVtbGFoIFBhc2llbiAoVGFucGEgT3V0bGllcikiLA0KICAgICB4bGFiID0gIkp1bWxhaCBQYXNpZW4iLA0KICAgICBjb2wgPSAibGlnaHRncmVlbiIsDQogICAgIGJvcmRlciA9ICJ3aGl0ZSIpDQphYmxpbmUodiA9IG1heChqdW1sYWhfcGFzaWVuX25vX291dGxpZXIpLCBjb2wgPSAicmVkIiwgbHdkID0gMiwgbHR5ID0gMikgICMgR2FyaXMgbW9kdXMNCmxlZ2VuZCgidG9wcmlnaHQiLCBsZWdlbmQgPSBwYXN0ZSgiTW9kdXMgPSIsIG1vZHVzX25vX291dGxpZXIpLCBjb2wgPSAicmVkIiwgbHR5ID0gMiwgYnR5ID0gIm4iKQ0KDQoNCmBgYA0KIyMjIyBNZW5naGl0dW5nIE1vZHVzOiANCg0KTW9kdXMgZGFsYW0gZGF0YSBpbmkgYWRhbGFoIEJhdHVrLCBrYXJlbmEgYmF0dWsgZGlsYXBvcmthbiBvbGVoIDUwIHBhc2llbiwgbGViaWggYmFueWFrIGRpYmFuZGluZ2thbiBnZWphbGEgbGFpbm55YS4NCg0KIyMjIyBLZXNpbXB1bGFuDQoNCkRlbmdhbiBtZW5nZXRhaHVpIGdlamFsYSB5YW5nIHBhbGluZyBzZXJpbmcgZGlsYXBvcmthbiAoYmF0dWspLCBydW1haCBzYWtpdCBkYXBhdCBsZWJpaCBmb2t1cyBkYWxhbSBtZW1iZXJpa2FuIHBlbmFuZ2FuYW4geWFuZyB0ZXBhdCwgc2VwZXJ0aSBwZXJzZWRpYWFuIG9iYXQgYXRhdSB2YWtzaW5hc2kgeWFuZyBsZWJpaCBiYW55YWsuDQoNCg0KDQojIyAzLiBQZW5kaWRpa2FuIA0KDQpEYWxhbSBiaWRhbmcgcGVuZGlkaWthbiwgdWt1cmFuIHBlbXVzYXRhbiBkYXRhIGRpZ3VuYWthbiB1bnR1ayBtZW5nZXZhbHVhc2kga2luZXJqYSBzaXN3YSwgbWVuZ2FuYWxpc2lzIGhhc2lsIHVqaWFuLCBkYW4gbWVyYW5jYW5nIGtlYmlqYWthbiBwZW5kaWRpa2FuLiBCZXJpa3V0IGFkYWxhaCBjb250b2ggcGVuZXJhcGFuIHVrdXJhbiBwZW11c2F0YW4gZGF0YSBkYWxhbSBwZW5kaWRpa2FuOg0KDQojIyMgMy4xIFJhdGEtUmF0YSBOaWxhaSBVamlhbiBSYXRhLXJhdGEgbmlsYWkgdWppYW4gDQoNCnNlcmluZyBkaWd1bmFrYW4gdW50dWsgbWVuZ2V2YWx1YXNpIGtpbmVyamEgc2lzd2EgZGFsYW0gc3VhdHUgdWppYW4gYXRhdSB0dWdhcyBiZXNhci4gSW5pIG1lbWJlcmlrYW4gZ2FtYmFyYW4gdW11bSB0ZW50YW5nIHNlamF1aCBtYW5hIHNpc3dhIG1lbWFoYW1pIG1hdGVyaSB5YW5nIGRpdWppLg0KDQogICAgLSBDb250b2g6IEppa2Egc2Vrb2xhaCBpbmdpbiBtZW5nZXRhaHVpIHJhdGEtcmF0YSBuaWxhaSB1amlhbiBtYXRlbWF0aWthIHVudHVrIHNlbHVydWgga2VsYXMsIG1lcmVrYSBkYXBhdCBtZW5qdW1sYWhrYW4gbmlsYWkgdWppYW4gZGFuIG1lbWJhZ2lueWEgZGVuZ2FuIGp1bWxhaCBzaXN3YS4NCiAgICANCiMjIyMgRWtzZWt1c2kgS2FzdXMgDQoNCkRhbGFtIHVqaWFuIG1hdGVtYXRpa2Ega2VsYXMgMTIsIGJlcmlrdXQgYWRhbGFoIG5pbGFpIHlhbmcgZGlwZXJvbGVoIG9sZWggc2lzd2E6DQoNCi0gODANCg0KLSA4NQ0KDQotIDkwDQoNCi0JNzANCg0KLQk5NQ0KDQokJA0KXHRleHR7UmF0YS1yYXRhIE5pbGFpfSA9IFxmcmFjezgwICsgODUgKyA5MCArIDcwICsgOTV9ezV9ID0gODQgXCwgXHRleHR7cG9pbn0NCiQkDQoNCg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQojIERhdGEgbmlsYWkgdWppYW4gbWF0ZW1hdGlrYSBrZWxhcyAxMg0KbmlsYWkgPC0gYyg4MCwgODUsIDkwLCA3MCwgOTUpICAjIERhdGEgZGVuZ2FuIG91dGxpZXINCm5pbGFpX25vX291dGxpZXIgPC0gbmlsYWlbbmlsYWkgIT0gNzBdICAjIERhdGEgdGFucGEgb3V0bGllcg0KDQojIEhpdHVuZyBNZWFuIChkZW5nYW4gb3V0bGllcikNCm1lYW5fbmlsYWkgPC0gbWVhbihuaWxhaSkNCnByaW50KHBhc3RlKCJNZWFuIE5pbGFpIChEZW5nYW4gT3V0bGllcik6IiwgbWVhbl9uaWxhaSkpDQoNCiMgSGl0dW5nIE1lYW4gKHRhbnBhIG91dGxpZXIpDQptZWFuX25pbGFpX25vX291dGxpZXIgPC0gbWVhbihuaWxhaV9ub19vdXRsaWVyKQ0KcHJpbnQocGFzdGUoIk1lYW4gTmlsYWkgKFRhbnBhIE91dGxpZXIpOiIsIG1lYW5fbmlsYWlfbm9fb3V0bGllcikpDQoNCiMgVmlzdWFsaXNhc2kgbWVuZ2d1bmFrYW4gUGxvdGx5DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBEZW5zaXR5IHBsb3QgdW50dWsgZGF0YSBkZW5nYW4gZGFuIHRhbnBhIG91dGxpZXINCmRlbnNpdHlfZGVuZ2FuX291dGxpZXJzIDwtIGRlbnNpdHkobmlsYWkpDQpkZW5zaXR5X3RhbnBhX291dGxpZXJzIDwtIGRlbnNpdHkobmlsYWlfbm9fb3V0bGllcikNCg0KIyBNZW1idWF0IHBsb3QgbWVuZ2d1bmFrYW4gUGxvdGx5DQpwbG90IDwtIHBsb3RfbHkoKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBkZW5zaXR5IHBsb3QgdW50dWsgZGF0YXNldCBkZW5nYW4gb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSB+ZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeCwNCiAgICB5ID0gfmRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHksDQogICAgdHlwZSA9ICdzY2F0dGVyJywNCiAgICBtb2RlID0gJ2xpbmVzJywNCiAgICBuYW1lID0gIkRlbmdhbiBPdXRsaWVycyIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC44KScsIHdpZHRoID0gMikNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBkZW5zaXR5IHBsb3QgdW50dWsgZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IH5kZW5zaXR5X3RhbnBhX291dGxpZXJzJHgsDQogICAgeSA9IH5kZW5zaXR5X3RhbnBhX291dGxpZXJzJHksDQogICAgdHlwZSA9ICdzY2F0dGVyJywNCiAgICBtb2RlID0gJ2xpbmVzJywNCiAgICBuYW1lID0gIlRhbnBhIE91dGxpZXJzIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjgpJywgd2lkdGggPSAyKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIG1lYW4gdW50dWsgZGF0YXNldCBkZW5nYW4gb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSBjKG1lYW5fbmlsYWksIG1lYW5fbmlsYWkpLA0KICAgIHkgPSBjKDAsIG1heChkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5KSksDQogICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICBtb2RlID0gImxpbmVzIiwNCiAgICBuYW1lID0gIk1lYW4gKERlbmdhbiBPdXRsaWVycykiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuNiknLCBkYXNoID0gJ2Rhc2gnKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIG1lYW4gdW50dWsgZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICBhZGRfdHJhY2UoDQogICAgeCA9IGMobWVhbl9uaWxhaV9ub19vdXRsaWVyLCBtZWFuX25pbGFpX25vX291dGxpZXIpLA0KICAgIHkgPSBjKDAsIG1heChkZW5zaXR5X3RhbnBhX291dGxpZXJzJHkpKSwNCiAgICB0eXBlID0gInNjYXR0ZXIiLA0KICAgIG1vZGUgPSAibGluZXMiLA0KICAgIG5hbWUgPSAiTWVhbiAoVGFucGEgT3V0bGllcnMpIiwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjYpJywgZGFzaCA9ICdkYXNoJykNCiAgKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIlBlbmdhcnVoIE91dGxpZXJzIHRlcmhhZGFwIE1lYW4gcGFkYSBEZW5zaXR5IFBsb3QiLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJOaWxhaSBVamlhbiIpLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJLZXBhZGF0YW4iKSwNCiAgICBhbm5vdGF0aW9ucyA9IGxpc3QoDQogICAgICAjIEFub3Rhc2kgdW50dWsgbWVhbiBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1lYW5fbmlsYWksDQogICAgICAgIHkgPSBtYXgoZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSkgKiAwLjksDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVhbiAoRGVuZ2FuIE91dGxpZXJzKToiLCByb3VuZChtZWFuX25pbGFpLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDIsDQogICAgICAgIGF4ID0gMCwNCiAgICAgICAgYXkgPSAtMzAsDQogICAgICAgIGZvbnQgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuOCknLCBzaXplID0gMTIpDQogICAgICApLA0KICAgICAgIyBBbm90YXNpIHVudHVrIG1lYW4gZGF0YXNldCB0YW5wYSBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1lYW5fbmlsYWlfbm9fb3V0bGllciwNCiAgICAgICAgeSA9IG1heChkZW5zaXR5X3RhbnBhX291dGxpZXJzJHkpICogMC45LA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1lYW4gKFRhbnBhIE91dGxpZXJzKToiLCByb3VuZChtZWFuX25pbGFpX25vX291dGxpZXIsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC00NSwNCiAgICAgICAgZm9udCA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScsIHNpemUgPSAxMikNCiAgICAgICkNCiAgICApDQogICkNCg0KIyBNZW5hbXBpbGthbiBwbG90DQpwbG90DQoNCiMgVmlzdWFsaXNhc2kgQm94cGxvdCAoRGVuZ2FuIE91dGxpZXIpDQpib3hwbG90KG5pbGFpLA0KICAgICAgICBtYWluID0gIkJveHBsb3QgTmlsYWkgVWppYW4gKERlbmdhbiBPdXRsaWVyKSIsDQogICAgICAgIHhsYWIgPSAiTmlsYWkgVWppYW4iLA0KICAgICAgICBjb2wgPSAic2t5Ymx1ZSIsDQogICAgICAgIGhvcml6b250YWwgPSBUUlVFKQ0KYWJsaW5lKHYgPSBtZWFuX25pbGFpLCBjb2wgPSAicmVkIiwgbHdkID0gMiwgbHR5ID0gMikgICMgR2FyaXMgbWVhbg0KdGV4dChtZWFuX25pbGFpLCAxLjIsIHBhc3RlKCJNZWFuID0iLCBtZWFuX25pbGFpKSwgY29sID0gInJlZCIpICAjIFRhbWJhaGthbiB0ZWtzDQoNCiMgVmlzdWFsaXNhc2kgQm94cGxvdCAoVGFucGEgT3V0bGllcikNCmJveHBsb3QobmlsYWlfbm9fb3V0bGllciwNCiAgICAgICAgbWFpbiA9ICJCb3hwbG90IE5pbGFpIFVqaWFuIChUYW5wYSBPdXRsaWVyKSIsDQogICAgICAgIHhsYWIgPSAiTmlsYWkgVWppYW4iLA0KICAgICAgICBjb2wgPSAibGlnaHRncmVlbiIsDQogICAgICAgIGhvcml6b250YWwgPSBUUlVFKQ0KYWJsaW5lKHYgPSBtZWFuX25pbGFpX25vX291dGxpZXIsIGNvbCA9ICJyZWQiLCBsd2QgPSAyLCBsdHkgPSAyKSAgIyBHYXJpcyBtZWFuDQp0ZXh0KG1lYW5fbmlsYWlfbm9fb3V0bGllciwgMS4yLCBwYXN0ZSgiTWVhbiA9IiwgbWVhbl9uaWxhaV9ub19vdXRsaWVyKSwgY29sID0gInJlZCIpDQoNCiMgVmlzdWFsaXNhc2kgSGlzdG9ncmFtIChEZW5nYW4gT3V0bGllcikNCmhpc3QobmlsYWksDQogICAgIG1haW4gPSAiSGlzdG9ncmFtIE5pbGFpIFVqaWFuIChEZW5nYW4gT3V0bGllcikiLA0KICAgICB4bGFiID0gIk5pbGFpIFVqaWFuIiwNCiAgICAgY29sID0gImxpZ2h0Ymx1ZSIsDQogICAgIGJvcmRlciA9ICJ3aGl0ZSIpDQphYmxpbmUodiA9IG1lYW5fbmlsYWksIGNvbCA9ICJyZWQiLCBsd2QgPSAyLCBsdHkgPSAyKSAgIyBHYXJpcyBtZWFuDQpsZWdlbmQoInRvcHJpZ2h0IiwgbGVnZW5kID0gcGFzdGUoIk1lYW4gPSIsIG1lYW5fbmlsYWkpLCBjb2wgPSAicmVkIiwgbHR5ID0gMiwgYnR5ID0gIm4iKQ0KDQojIFZpc3VhbGlzYXNpIEhpc3RvZ3JhbSAoVGFucGEgT3V0bGllcikNCmhpc3QobmlsYWlfbm9fb3V0bGllciwNCiAgICAgbWFpbiA9ICJIaXN0b2dyYW0gTmlsYWkgVWppYW4gKFRhbnBhIE91dGxpZXIpIiwNCiAgICAgeGxhYiA9ICJOaWxhaSBVamlhbiIsDQogICAgIGNvbCA9ICJsaWdodGdyZWVuIiwNCiAgICAgYm9yZGVyID0gIndoaXRlIikNCmFibGluZSh2ID0gbWVhbl9uaWxhaV9ub19vdXRsaWVyLCBjb2wgPSAicmVkIiwgbHdkID0gMiwgbHR5ID0gMikgICMgR2FyaXMgbWVhbg0KbGVnZW5kKCJ0b3ByaWdodCIsIGxlZ2VuZCA9IHBhc3RlKCJNZWFuID0iLCBtZWFuX25pbGFpX25vX291dGxpZXIpLCBjb2wgPSAicmVkIiwgbHR5ID0gMiwgYnR5ID0gIm4iKQ0KDQpgYGANCg0KUGVuamVsYXNhbg0KDQpEZW5nYW4gcmF0YS1yYXRhIG5pbGFpIDg0IHBvaW4sIGd1cnUgZGFwYXQgbWVuZ2V0YWh1aSBraW5lcmphIHJhdGEtcmF0YSBzaXN3YSBkYW4gbWVuZW50dWthbiBhcGFrYWggbWF0ZXJpIHBlcmx1IHBlbnllc3VhaWFuIGF0YXUgYWRhIGFyZWEgeWFuZyBwZXJsdSBkaXBlcmJhaWtpLg0KDQoNCiMjIyAzLjIgUGVuaWxhaWFuIEtpbmVyamEgU2lzd2EgTWVkaWFuIA0KDQpEaWd1bmFrYW4gdW50dWsgbWVuZ2V0YWh1aSBuaWxhaSB0ZW5nYWggZGFsYW0gaGFzaWwgdWppYW4gYXRhdSB0ZXMsIHlhbmcgdGlkYWsgdGVycGVuZ2FydWggb2xlaCBuaWxhaSBla3N0cmVtLiBJbmkgbWVtYmVyaWthbiBwZW1haGFtYW4geWFuZyBsZWJpaCBhZGlsIHRlbnRhbmcga2luZXJqYSBtYXlvcml0YXMgc2lzd2EuDQoNCiAgICAtIENvbnRvaDogSmlrYSBhZGEgYmViZXJhcGEgc2lzd2EgeWFuZyBtZW5kYXBhdGthbiBuaWxhaSBzYW5nYXQgdGluZ2dpIGF0YXUgcmVuZGFoLCBtZWRpYW4gZGFwYXQgbWVtYmVyaWthbiBnYW1iYXJhbiBsZWJpaCBha3VyYXQgdGVudGFuZyBraW5lcmphIHNpc3dhIHNlY2FyYSBrZXNlbHVydWhhbi4NCiAgICANCiMjIyMgRWtzZWt1c2kgS2FzdXMgDQoNClNlb3JhbmcgZ3VydSBpbmdpbiBtZW5nZXRhaHVpIG5pbGFpIHRlbmdhaCBkYXJpIHVqaWFuIGFraGlyIHlhbmcgZGlpa3V0aSBvbGVoIDEwIHNpc3dhLiBOaWxhaSB5YW5nIGRpcGVyb2xlaCBhZGFsYWg6DQoNCi0gNTAsIDU1LCA2MCwgNzAsIDgwLCA4MCwgODUsIDkwLCA5MCwgOTUNCg0KIyMjIyBNZW5naGl0dW5nIE1lZGlhbjogDQoNClVydXRrYW4gZGF0YTogNTAsIDU1LCA2MCwgNzAsIDgwLCA4MCwgODUsIDkwLCA5MCwgOTUuIEthcmVuYSBhZGEgMTAgZGF0YSwgbWVkaWFuIGFkYWxhaCByYXRhLXJhdGEgZGFyaSBkYXRhIGtlLTUgZGFuIGtlLTYsIHlhaXR1Og0KDQokJA0KXHRleHR7RGF0YTogfSA1MCwgNTUsIDYwLCA3MCwgODAsIDgwLCA4NSwgOTAsIDkwLCA5NSBcXA0KXHRleHR7TWVkaWFufSA9IFxmcmFjezgwICsgODB9ezJ9ID0gODANCiQkDQoNCg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQojIERhdGEgbmlsYWkgdWppYW4gYWtoaXIgc2lzd2ENCm5pbGFpIDwtIGMoNTAsIDU1LCA2MCwgNzAsIDgwLCA4MCwgODUsIDkwLCA5MCwgOTUpDQoNCiMgSWRlbnRpZmlrYXNpIG91dGxpZXIgKGFuZ2dhcCBuaWxhaSA1MCBkYW4gOTUgYWRhbGFoIG91dGxpZXIpDQpuaWxhaV9ub19vdXRsaWVyIDwtIG5pbGFpW25pbGFpICE9IDUwICYgbmlsYWkgIT0gOTVdICAjIE1lbmdoYXB1cyBvdXRsaWVyDQoNCiMgSGl0dW5nIE1lZGlhbiAoZGVuZ2FuIG91dGxpZXIpDQptZWRpYW5fbmlsYWkgPC0gbWVkaWFuKG5pbGFpKQ0KcHJpbnQocGFzdGUoIk1lZGlhbiBOaWxhaSBVamlhbiAoRGVuZ2FuIE91dGxpZXIpOiIsIG1lZGlhbl9uaWxhaSkpDQoNCiMgSGl0dW5nIE1lZGlhbiAodGFucGEgb3V0bGllcikNCm1lZGlhbl9uaWxhaV9ub19vdXRsaWVyIDwtIG1lZGlhbihuaWxhaV9ub19vdXRsaWVyKQ0KcHJpbnQocGFzdGUoIk1lZGlhbiBOaWxhaSBVamlhbiAoVGFucGEgT3V0bGllcik6IiwgbWVkaWFuX25pbGFpX25vX291dGxpZXIpKQ0KDQojIFZpc3VhbGlzYXNpIG1lbmdndW5ha2FuIFBsb3RseQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGVuc2l0eSBwbG90IHVudHVrIGRhdGEgZGVuZ2FuIGRhbiB0YW5wYSBvdXRsaWVyDQpkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyA8LSBkZW5zaXR5KG5pbGFpKQ0KZGVuc2l0eV90YW5wYV9vdXRsaWVycyA8LSBkZW5zaXR5KG5pbGFpX25vX291dGxpZXIpDQoNCiMgTWVtYnVhdCBwbG90IG1lbmdndW5ha2FuIFBsb3RseQ0KcGxvdCA8LSBwbG90X2x5KCkgJT4lDQogICMgTWVuYW1iYWhrYW4gZGVuc2l0eSBwbG90IHVudHVrIGRhdGFzZXQgZGVuZ2FuIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gfmRlbnNpdHlfZGVuZ2FuX291dGxpZXJzJHgsDQogICAgeSA9IH5kZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5LA0KICAgIHR5cGUgPSAnc2NhdHRlcicsDQogICAgbW9kZSA9ICdsaW5lcycsDQogICAgbmFtZSA9ICJEZW5nYW4gT3V0bGllcnMiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuOCknLCB3aWR0aCA9IDIpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gZGVuc2l0eSBwbG90IHVudHVrIGRhdGFzZXQgdGFucGEgb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSB+ZGVuc2l0eV90YW5wYV9vdXRsaWVycyR4LA0KICAgIHkgPSB+ZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5LA0KICAgIHR5cGUgPSAnc2NhdHRlcicsDQogICAgbW9kZSA9ICdsaW5lcycsDQogICAgbmFtZSA9ICJUYW5wYSBPdXRsaWVycyIsDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScsIHdpZHRoID0gMikNCiAgKSAlPiUNCiAgIyBNZW5hbWJhaGthbiBnYXJpcyBtZWRpYW4gdW50dWsgZGF0YXNldCBkZW5nYW4gb3V0bGllcnMNCiAgYWRkX3RyYWNlKA0KICAgIHggPSBjKG1lZGlhbl9uaWxhaSwgbWVkaWFuX25pbGFpKSwNCiAgICB5ID0gYygwLCBtYXgoZGVuc2l0eV9kZW5nYW5fb3V0bGllcnMkeSkpLA0KICAgIHR5cGUgPSAic2NhdHRlciIsDQogICAgbW9kZSA9ICJsaW5lcyIsDQogICAgbmFtZSA9ICJNZWRpYW4gKERlbmdhbiBPdXRsaWVycykiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuNiknLCBkYXNoID0gJ2Rhc2gnKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIGdhcmlzIG1lZGlhbiB1bnR1ayBkYXRhc2V0IHRhbnBhIG91dGxpZXJzDQogIGFkZF90cmFjZSgNCiAgICB4ID0gYyhtZWRpYW5fbmlsYWlfbm9fb3V0bGllciwgbWVkaWFuX25pbGFpX25vX291dGxpZXIpLA0KICAgIHkgPSBjKDAsIG1heChkZW5zaXR5X3RhbnBhX291dGxpZXJzJHkpKSwNCiAgICB0eXBlID0gInNjYXR0ZXIiLA0KICAgIG1vZGUgPSAibGluZXMiLA0KICAgIG5hbWUgPSAiTWVkaWFuIChUYW5wYSBPdXRsaWVycykiLA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMzgsIDE2NiwgOTEsIDAuNiknLCBkYXNoID0gJ2Rhc2gnKQ0KICApICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiUGVuZ2FydWggT3V0bGllcnMgdGVyaGFkYXAgTWVkaWFuIHBhZGEgRGVuc2l0eSBQbG90IiwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiTmlsYWkgVWppYW4iKSwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiS2VwYWRhdGFuIiksDQogICAgYW5ub3RhdGlvbnMgPSBsaXN0KA0KICAgICAgIyBBbm90YXNpIHVudHVrIG1lZGlhbiBkYXRhc2V0IGRlbmdhbiBvdXRsaWVycw0KICAgICAgbGlzdCgNCiAgICAgICAgeCA9IG1lZGlhbl9uaWxhaSwNCiAgICAgICAgeSA9IG1heChkZW5zaXR5X2Rlbmdhbl9vdXRsaWVycyR5KSAqIDAuOSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWRpYW4gKERlbmdhbiBPdXRsaWVycyk6Iiwgcm91bmQobWVkaWFuX25pbGFpLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDIsDQogICAgICAgIGF4ID0gMCwNCiAgICAgICAgYXkgPSAtMzAsDQogICAgICAgIGZvbnQgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMjIyLCA0NSwgMzgsIDAuOCknLCBzaXplID0gMTIpDQogICAgICApLA0KICAgICAgIyBBbm90YXNpIHVudHVrIG1lZGlhbiBkYXRhc2V0IHRhbnBhIG91dGxpZXJzDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gbWVkaWFuX25pbGFpX25vX291dGxpZXIsDQogICAgICAgIHkgPSBtYXgoZGVuc2l0eV90YW5wYV9vdXRsaWVycyR5KSAqIDAuOSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWRpYW4gKFRhbnBhIE91dGxpZXJzKToiLCByb3VuZChtZWRpYW5fbmlsYWlfbm9fb3V0bGllciwgMikpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2hlYWQgPSAyLA0KICAgICAgICBheCA9IDAsDQogICAgICAgIGF5ID0gLTQ1LA0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDM4LCAxNjYsIDkxLCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKQ0KICAgICkNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3QNCg0KIyBWaXN1YWxpc2FzaSBCb3hwbG90IChEZW5nYW4gT3V0bGllcikNCmJveHBsb3QobmlsYWksDQogICAgICAgIG1haW4gPSAiQm94cGxvdCBOaWxhaSBVamlhbiAoRGVuZ2FuIE91dGxpZXIpIiwNCiAgICAgICAgeGxhYiA9ICJOaWxhaSBVamlhbiIsDQogICAgICAgIGNvbCA9ICJza3libHVlIiwNCiAgICAgICAgaG9yaXpvbnRhbCA9IFRSVUUpDQphYmxpbmUodiA9IG1lZGlhbl9uaWxhaSwgY29sID0gInJlZCIsIGx3ZCA9IDIsIGx0eSA9IDIpICAjIEdhcmlzIG1lZGlhbg0KdGV4dChtZWRpYW5fbmlsYWksIDEuMiwgcGFzdGUoIk1lZGlhbiA9IiwgbWVkaWFuX25pbGFpKSwgY29sID0gInJlZCIpICAjIFRhbWJhaGthbiB0ZWtzDQoNCiMgVmlzdWFsaXNhc2kgQm94cGxvdCAoVGFucGEgT3V0bGllcikNCmJveHBsb3QobmlsYWlfbm9fb3V0bGllciwNCiAgICAgICAgbWFpbiA9ICJCb3hwbG90IE5pbGFpIFVqaWFuIChUYW5wYSBPdXRsaWVyKSIsDQogICAgICAgIHhsYWIgPSAiTmlsYWkgVWppYW4iLA0KICAgICAgICBjb2wgPSAibGlnaHRncmVlbiIsDQogICAgICAgIGhvcml6b250YWwgPSBUUlVFKQ0KYWJsaW5lKHYgPSBtZWRpYW5fbmlsYWlfbm9fb3V0bGllciwgY29sID0gInJlZCIsIGx3ZCA9IDIsIGx0eSA9IDIpICAjIEdhcmlzIG1lZGlhbg0KdGV4dChtZWRpYW5fbmlsYWlfbm9fb3V0bGllciwgMS4yLCBwYXN0ZSgiTWVkaWFuID0iLCBtZWRpYW5fbmlsYWlfbm9fb3V0bGllciksIGNvbCA9ICJyZWQiKQ0KDQojIFZpc3VhbGlzYXNpIEhpc3RvZ3JhbSAoRGVuZ2FuIE91dGxpZXIpDQpoaXN0KG5pbGFpLA0KICAgICBtYWluID0gIkhpc3RvZ3JhbSBOaWxhaSBVamlhbiAoRGVuZ2FuIE91dGxpZXIpIiwNCiAgICAgeGxhYiA9ICJOaWxhaSBVamlhbiIsDQogICAgIGNvbCA9ICJsaWdodGJsdWUiLA0KICAgICBib3JkZXIgPSAid2hpdGUiKQ0KYWJsaW5lKHYgPSBtZWRpYW5fbmlsYWksIGNvbCA9ICJyZWQiLCBsd2QgPSAyLCBsdHkgPSAyKSAgIyBHYXJpcyBtZWRpYW4NCmxlZ2VuZCgidG9wcmlnaHQiLCBsZWdlbmQgPSBwYXN0ZSgiTWVkaWFuID0iLCByb3VuZChtZWRpYW5fbmlsYWksIDIpKSwgY29sID0gInJlZCIsIGx0eSA9IDIsIGJ0eSA9ICJuIikNCg0KIyBWaXN1YWxpc2FzaSBIaXN0b2dyYW0gKFRhbnBhIE91dGxpZXIpDQpoaXN0KG5pbGFpX25vX291dGxpZXIsDQogICAgIG1haW4gPSAiSGlzdG9ncmFtIE5pbGFpIFVqaWFuIChUYW5wYSBPdXRsaWVyKSIsDQogICAgIHhsYWIgPSAiTmlsYWkgVWppYW4iLA0KICAgICBjb2wgPSAibGlnaHRncmVlbiIsDQogICAgIGJvcmRlciA9ICJ3aGl0ZSIpDQphYmxpbmUodiA9IG1lZGlhbl9uaWxhaV9ub19vdXRsaWVyLCBjb2wgPSAicmVkIiwgbHdkID0gMiwgbHR5ID0gMikgICMgR2FyaXMgbWVkaWFuDQpsZWdlbmQoInRvcHJpZ2h0IiwgbGVnZW5kID0gcGFzdGUoIk1lZGlhbiA9Iiwgcm91bmQobWVkaWFuX25pbGFpX25vX291dGxpZXIsIDIpKSwgY29sID0gInJlZCIsIGx0eSA9IDIsIGJ0eSA9ICJuIikNCg0KYGBgDQoNCiMjIyMgS2VzaW1wdWxhbg0KDQpNZWRpYW4gbmlsYWkgYWRhbGFoIDgwLiBJbmkgbWVudW5qdWtrYW4gYmFod2Egc2ViYWdpYW4gYmVzYXIgc2lzd2EgbWVuZGFwYXRrYW4gbmlsYWkgc2VraXRhciA4MCwgbWVtYmVyaSBnYW1iYXJhbiB5YW5nIGxlYmloIHJlcHJlc2VudGF0aWYgdGVudGFuZyBkaXN0cmlidXNpIG5pbGFpIGRpIGtlbGFzLg0KDQojIyMgMy4zIEZyZWt1ZW5zaSBUaW5na2F0IEtldGVyYW1waWxhbiBNb2R1cyANCg0KRGlndW5ha2FuIHVudHVrIG1lbmdldGFodWkgdGluZ2thdCBrZXRlcmFtcGlsYW4gYXRhdSBwZW5nZXRhaHVhbiB5YW5nIHBhbGluZyBzZXJpbmcgZGltaWxpa2kgb2xlaCBzaXN3YSBkYWxhbSBzdWF0dSBrZWxvbXBvay4gSW5pIGRhcGF0IG1lbWJhbnR1IHBlbmRpZGlrIGRhbGFtIG1lcmFuY2FuZyBrdXJpa3VsdW0geWFuZyBsZWJpaCBlZmVrdGlmLg0KDQogICAgLSBDb250b2g6IEppa2Egc2ViYWdpYW4gYmVzYXIgc2lzd2EgbWVtaWxpa2kgcGVtYWhhbWFuIHlhbmcgYmFpayBkYWxhbSB0b3BpayB0ZXJ0ZW50dSwgbWFrYSBtb2R1cyBha2FuIG1lbnVuanVra2FuIHRpbmdrYXQgcGVuZ3Vhc2FhbiB5YW5nIHBhbGluZyB1bXVtIGRpIGtlbGFzIHRlcnNlYnV0Lg0KICAgIA0KIyMjIyBFa3Nla3VzaSBLYXN1cw0KDQpTZW9yYW5nIGd1cnUgaW5naW4gbWVuZ2V0YWh1aSBuaWxhaSB0ZW5nYWggZGFyaSB1amlhbiBha2hpciBzaXN3YS4gTmlsYWkgeWFuZyBkaXBlcm9sZWggYWRhbGFoOg0KDQotIEEgPSAxMCBTaXN3YSANCg0KLSBCID0gMjAgU2lzd2EgDQoNCi0gQyA9IDUgU2lzd2ENCg0KDQokJA0KXHRleHR7TmlsYWkgQTogMTAgc2lzd2EsIE5pbGFpIEI6IDIwIHNpc3dhLCBOaWxhaSBDOiA1IHNpc3dhfSBcXA0KXHRleHR7TW9kdXM6IE5pbGFpIEIgKHBhbGluZyBzZXJpbmcgbXVuY3VsKX0NCiQkDQoNCg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQojIERhdGEganVtbGFoIHNpc3dhIHVudHVrIHNldGlhcCBuaWxhaQ0Ka2F0ZWdvcmkgPC0gYygiQSIsICJCIiwgIkMiKQ0KanVtbGFoX3Npc3dhIDwtIGMoMTAsIDIwLCA1KSAgIyBEYXRhDQoNCiMgSWRlbnRpZmlrYXNpIG91dGxpZXIgKGFuZ2dhcCBuaWxhaSAiQSIgZGFuICJDIiBzZWJhZ2FpIG91dGxpZXIga2FyZW5hIGp1bWxhaCBzaXN3YSBzZWRpa2l0KQ0KanVtbGFoX3Npc3dhX25vX291dGxpZXIgPC0ganVtbGFoX3Npc3dhW2p1bWxhaF9zaXN3YSAhPSBtaW4oanVtbGFoX3Npc3dhKSAmIGp1bWxhaF9zaXN3YSAhPSBtYXgoanVtbGFoX3Npc3dhKV0gICMgTWVuZ2hhcHVzIG91dGxpZXINCmthdGVnb3JpX25vX291dGxpZXIgPC0ga2F0ZWdvcmlbanVtbGFoX3Npc3dhICE9IG1pbihqdW1sYWhfc2lzd2EpICYganVtbGFoX3Npc3dhICE9IG1heChqdW1sYWhfc2lzd2EpXQ0KDQojIE1vZHVzIChrYXRlZ29yaSBkZW5nYW4ganVtbGFoIHNpc3dhIHRlcmJhbnlhaykNCm1vZHVzIDwtIGthdGVnb3JpW3doaWNoLm1heChqdW1sYWhfc2lzd2EpXQ0KcHJpbnQocGFzdGUoIk1vZHVzOiIsIG1vZHVzKSkNCg0KIyBNb2R1cyB0YW5wYSBvdXRsaWVyDQptb2R1c19ub19vdXRsaWVyIDwtIGthdGVnb3JpX25vX291dGxpZXJbd2hpY2gubWF4KGp1bWxhaF9zaXN3YV9ub19vdXRsaWVyKV0NCnByaW50KHBhc3RlKCJNb2R1cyAoVGFucGEgT3V0bGllcik6IiwgbW9kdXNfbm9fb3V0bGllcikpDQoNCiMgVmlzdWFsaXNhc2kgbWVuZ2d1bmFrYW4gUGxvdGx5DQoNCmxpYnJhcnkocGxvdGx5KQ0KDQojIE1lbWJ1YXQgcGxvdCBIaXN0b2dyYW0NCnBsb3QgPC0gcGxvdF9seSgpICU+JQ0KICAjIEhpc3RvZ3JhbSBkZW5nYW4gb3V0bGllcg0KICBhZGRfdHJhY2UoDQogICAgeCA9IGthdGVnb3JpLA0KICAgIHkgPSBqdW1sYWhfc2lzd2EsDQogICAgdHlwZSA9ICdiYXInLA0KICAgIG5hbWUgPSAiRGVuZ2FuIE91dGxpZXIiLA0KICAgIG1hcmtlciA9IGxpc3QoY29sb3IgPSAncmdiYSgyMjIsIDQ1LCAzOCwgMC44KScpDQogICkgJT4lDQogICMgSGlzdG9ncmFtIHRhbnBhIG91dGxpZXINCiAgYWRkX3RyYWNlKA0KICAgIHggPSBrYXRlZ29yaV9ub19vdXRsaWVyLA0KICAgIHkgPSBqdW1sYWhfc2lzd2Ffbm9fb3V0bGllciwNCiAgICB0eXBlID0gJ2JhcicsDQogICAgbmFtZSA9ICJUYW5wYSBPdXRsaWVyIiwNCiAgICBtYXJrZXIgPSBsaXN0KGNvbG9yID0gJ3JnYmEoMzgsIDE2NiwgOTEsIDAuOCknKQ0KICApICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiVmlzdWFsaXNhc2kgTW9kdXMgSnVtbGFoIFNpc3dhIChEZW5nYW4gZGFuIFRhbnBhIE91dGxpZXIpIiwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiS2F0ZWdvcmkgTmlsYWkiKSwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiSnVtbGFoIFNpc3dhIiksDQogICAgYW5ub3RhdGlvbnMgPSBsaXN0KA0KICAgICAgIyBBbm90YXNpIHVudHVrIG1vZHVzIGRhdGFzZXQgZGVuZ2FuIG91dGxpZXJzDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gbW9kdXMsDQogICAgICAgIHkgPSBtYXgoanVtbGFoX3Npc3dhKSArIDIsDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTW9kdXM6IiwgbW9kdXMpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2hlYWQgPSAyLA0KICAgICAgICBheCA9IDAsDQogICAgICAgIGF5ID0gLTMwLA0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICdyZ2JhKDIyMiwgNDUsIDM4LCAwLjgpJywgc2l6ZSA9IDEyKQ0KICAgICAgKSwNCiAgICAgICMgQW5vdGFzaSB1bnR1ayBtb2R1cyBkYXRhc2V0IHRhbnBhIG91dGxpZXJzDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gbW9kdXNfbm9fb3V0bGllciwNCiAgICAgICAgeSA9IG1heChqdW1sYWhfc2lzd2Ffbm9fb3V0bGllcikgKyAyLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1vZHVzIChUYW5wYSBPdXRsaWVyKToiLCBtb2R1c19ub19vdXRsaWVyKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXggPSAwLA0KICAgICAgICBheSA9IC0zMCwNCiAgICAgICAgZm9udCA9IGxpc3QoY29sb3IgPSAncmdiYSgzOCwgMTY2LCA5MSwgMC44KScsIHNpemUgPSAxMikNCiAgICAgICkNCiAgICApDQogICkNCg0KIyBNZW5hbXBpbGthbiBwbG90IEhpc3RvZ3JhbQ0KcGxvdA0KDQojIFZpc3VhbGlzYXNpIEJveHBsb3QgKERlbmdhbiBPdXRsaWVyKQ0KYm94cGxvdChqdW1sYWhfc2lzd2EsDQogICAgICAgIG1haW4gPSAiQm94cGxvdCBKdW1sYWggU2lzd2EgKERlbmdhbiBPdXRsaWVyKSIsDQogICAgICAgIHhsYWIgPSAiSnVtbGFoIFNpc3dhIiwNCiAgICAgICAgY29sID0gInNreWJsdWUiLA0KICAgICAgICBob3Jpem9udGFsID0gVFJVRSkNCmFibGluZSh2ID0gbWF4KGp1bWxhaF9zaXN3YSksIGNvbCA9ICJyZWQiLCBsd2QgPSAyLCBsdHkgPSAyKSAgIyBHYXJpcyBtb2R1cw0KdGV4dChtYXgoanVtbGFoX3Npc3dhKSwgMS4yLCBwYXN0ZSgiTW9kdXMgPSIsIG1vZHVzKSwgY29sID0gInJlZCIpICAjIFRhbWJhaGthbiB0ZWtzDQoNCiMgVmlzdWFsaXNhc2kgQm94cGxvdCAoVGFucGEgT3V0bGllcikNCmJveHBsb3QoanVtbGFoX3Npc3dhX25vX291dGxpZXIsDQogICAgICAgIG1haW4gPSAiQm94cGxvdCBKdW1sYWggU2lzd2EgKFRhbnBhIE91dGxpZXIpIiwNCiAgICAgICAgeGxhYiA9ICJKdW1sYWggU2lzd2EiLA0KICAgICAgICBjb2wgPSAibGlnaHRncmVlbiIsDQogICAgICAgIGhvcml6b250YWwgPSBUUlVFKQ0KYWJsaW5lKHYgPSBtYXgoanVtbGFoX3Npc3dhX25vX291dGxpZXIpLCBjb2wgPSAicmVkIiwgbHdkID0gMiwgbHR5ID0gMikgICMgR2FyaXMgbW9kdXMNCnRleHQobWF4KGp1bWxhaF9zaXN3YV9ub19vdXRsaWVyKSwgMS4yLCBwYXN0ZSgiTW9kdXMgPSIsIG1vZHVzX25vX291dGxpZXIpLCBjb2wgPSAicmVkIikNCg0KIyBWaXN1YWxpc2FzaSBIaXN0b2dyYW0gKERlbmdhbiBPdXRsaWVyKQ0KaGlzdChqdW1sYWhfc2lzd2EsDQogICAgIG1haW4gPSAiSGlzdG9ncmFtIEp1bWxhaCBTaXN3YSAoRGVuZ2FuIE91dGxpZXIpIiwNCiAgICAgeGxhYiA9ICJKdW1sYWggU2lzd2EiLA0KICAgICBjb2wgPSAibGlnaHRibHVlIiwNCiAgICAgYm9yZGVyID0gIndoaXRlIikNCmFibGluZSh2ID0gbWF4KGp1bWxhaF9zaXN3YSksIGNvbCA9ICJyZWQiLCBsd2QgPSAyLCBsdHkgPSAyKSAgIyBHYXJpcyBtb2R1cw0KbGVnZW5kKCJ0b3ByaWdodCIsIGxlZ2VuZCA9IHBhc3RlKCJNb2R1cyA9IiwgbW9kdXMpLCBjb2wgPSAicmVkIiwgbHR5ID0gMiwgYnR5ID0gIm4iKQ0KDQojIFZpc3VhbGlzYXNpIEhpc3RvZ3JhbSAoVGFucGEgT3V0bGllcikNCmhpc3QoanVtbGFoX3Npc3dhX25vX291dGxpZXIsDQogICAgIG1haW4gPSAiSGlzdG9ncmFtIEp1bWxhaCBTaXN3YSAoVGFucGEgT3V0bGllcikiLA0KICAgICB4bGFiID0gIkp1bWxhaCBTaXN3YSIsDQogICAgIGNvbCA9ICJsaWdodGdyZWVuIiwNCiAgICAgYm9yZGVyID0gIndoaXRlIikNCmFibGluZSh2ID0gbWF4KGp1bWxhaF9zaXN3YV9ub19vdXRsaWVyKSwgY29sID0gInJlZCIsIGx3ZCA9IDIsIGx0eSA9IDIpICAjIEdhcmlzIG1vZHVzDQpsZWdlbmQoInRvcHJpZ2h0IiwgbGVnZW5kID0gcGFzdGUoIk1vZHVzID0iLCBtb2R1c19ub19vdXRsaWVyKSwgY29sID0gInJlZCIsIGx0eSA9IDIsIGJ0eSA9ICJuIikNCg0KDQpgYGANCg0KIyMjIyBNZW5naGl0dW5nIE1vZHVzOiANCg0KTW9kdXMgYWRhbGFoIE5pbGFpIEIsIGthcmVuYSAyMCBzaXN3YSBtZW5kYXBhdGthbiBuaWxhaSBpbmksIHlhbmcgbWVydXBha2FuIGp1bWxhaCB0ZXJiYW55YWsuDQoNCiMjIyMgS2VzaW1wdWxhbiANCg0KRGVuZ2FuIG1lbmdldGFodWkgYmFod2EgbmlsYWkgQiBhZGFsYWggeWFuZyBwYWxpbmcgc2VyaW5nIG11bmN1bCwgZ3VydSBkYXBhdCBtZW5nZXZhbHVhc2kgbGViaWggbGFuanV0IGtlbWFtcHVhbiBtZW51bGlzIHNpc3dhIGRhbiBtZW55ZXN1YWlrYW4gY2FyYSBwZW5nYWphcmFuIHVudHVrIG1lbmluZ2thdGthbiBrZXRlcmFtcGlsYW4gc2lzd2Eu