Latihan Ukuran Penyebaran Data

Statistika Dasar

Logo

1 Latihan 1

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

  • Cabang A: 50, 55, 60, 65, 70
  • Cabang B: 40, 50, 60, 70, 80
  • Cabang C: 30, 30, 35, 40, 45
  • Cabang D: 70, 75, 80, 85, 90

1.1 Hitunglah rata-rata, median, dan standar deviasi untuk masing-masing cabang!

Jawab:

1.1.1 Cabang A

Data: 50, 55, 60, 65, 70
1. Rata-rata: \[ \text{Rata-rata} = \frac{\sum \text{data}}{\text{jumlah data}} = \frac{50 + 55 + 60 + 65 + 70}{5} = \frac{300}{5} = 60 \]

  1. Median:
    \[ \text{Median} = 60 \]

  2. Standar Deviasi:

    \[ \text{Std Dev} = \sqrt{\frac{\sum (x_i - \bar{x})^2}{n}} \\ = \sqrt{\frac { (50 - 60)^2 + (55 - 60)^2 + (60 - 60)^2 + (65 - 60)^2 + (70 - 60)^2} {5}} \\ = \sqrt{\frac { 100 + 25 + 0 + 25 + 100} {5}} \\ = \sqrt{\frac {250}{5}} \\ = \sqrt{50} = 7.7071 \]

1.1.2 Cabang B

Data: 40, 50, 60, 70, 80
1. Rata-rata: \[ \text{Rata-rata} = \frac{\sum \text{data}}{\text{jumlah data}} = \frac{40 + 50 + 60 + 70 + 80}{5} = \frac{300}{5} = 60 \]

  1. Median:
    \[ \text{Median} = 60 \]

  2. Standar Deviasi:

    \[ \text{Std Dev} = \sqrt{\frac{\sum (x_i - \bar{x})^2}{n}} \\ = \sqrt{\frac { (40 - 60)^2 + (50 - 60)^2 + (60 - 60)^2 + (70 - 60)^2 + (80 - 60)^2} {5}} \\ = \sqrt{\frac {400 + 100 + 0 + 100 + 400} {5}} \\ = \sqrt{\frac {1000} {5}} \\ = \sqrt {200} = 14.142 \]

1.1.3 Cabang C

Data: 30, 30, 35, 40, 45
1. Rata-rata: \[ \text{Rata-rata} = \frac{\sum \text{data}}{\text{jumlah data}} = \frac{30 + 30 + 35 + 40 + 45}{5} = \frac{180}{5} = 36 \]

  1. Median:
    \[ \text{Median} = 35 \]

  2. Standar Deviasi:

    \[ \text{Std Dev} = \sqrt{\frac{\sum (x_i - \bar{x})^2}{n}} \\ = \sqrt{\frac {(30 - 36)^2 + (30 - 36)^2 + (35 - 36)^2 + (40 - 36)^2 + (45 - 36)^2} {5}} \\ = \sqrt{\frac { 36 + 36 + 1 + 16 + 81} {5}} \\ = \sqrt{\frac {170} {5}} \\ = \sqrt {34} = 5.831 \]

1.1.4 Cabang D

Data: 70, 75, 80, 85, 90
1. Rata-rata: \[ \text{Rata-rata} = \frac{\sum \text{data}}{\text{jumlah data}} = \frac{70 + 75 + 80 + 85 + 90}{5} = \frac{400}{5} = 80 \]

  1. Median:
    \[ \text{Median} = 80 \]

  2. Standar Deviasi:

    \[ \text{Std Dev} = \sqrt{\frac{\sum (x_i - \bar{x})^2}{n}} \\ = \sqrt{\frac {(70 - 80)^2 + (75 - 80)^2 + (80 - 80)^2 + (85 - 80)^2 + (90 - 80)^2} {5}} \\ = \sqrt{\frac { 100 + 25 + 0 + 25 + 100 } {5}} \\ = \sqrt{\frac {250} {5}} \\ = \sqrt {50} = 7.071 \]


1.2 Cabang mana yang memiliki penyebaran yang paling kecil? Jelaskan alasannya!

Jawab:

Cabang yang memiliki penyebaran yang paling kecil adalah Cabang C. Hal ini dapat diketahui melalui nilai standar deviasi dari Cabang C merupakan nilai standar deviasi yang terkecil, standar deviasi adalah ukuran yang menunjukkan seberapa jauh data menyebar dari rata-rata. Nilai yang lebih kecil menunjukkan penyebaran data yang lebih kecil (lebih terkonsentrasi di sekitar rata-rata). Dari hasil perhitungan pada soal nomor 1, dapat diperoleh:

  • Cabang A: Standar deviasi = 7,07 juta

  • Cabang B: Standar deviasi = 14,14 juta

  • Cabang C: Standar deviasi = 5,83 juta

  • Cabang D: Standar deviasi = 7,07 juta

Dari hasil tersebut sudah dapat diketahui bahwa cabang yang memiliki penyebaran yang paling kecil adalah Cabang C yaitu sebesar 5,83 juta. Selain itu, penyebaran data Cabang C lebih kecil karena nilai-nilai penjualan relatif dekat satu sama lain, dengan rentang dari 30 hingga 45 juta, yang merupakan rentang terkecil dibandingkan cabang lain.


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

Jawab:

Cabang yang gagal mencapai target penjualan minimum sebesar 50 juta rupiah di semua datanya adalah Cabang C. Hal ini terlihat dari data penjualan Cabang C yang terdiri dari 30 juta, 30 juta, 35 juta, 40 juta, dan 45 juta, di mana seluruh angkanya berada di bawah target 50 juta rupiah. Sebaliknya, cabang lainnya memiliki setidaknya satu data penjualan yang memenuhi atau melampaui target. Misalnya, Cabang A memiliki data penjualan 50 juta hingga 70 juta, Cabang B memiliki rentang penjualan dari 40 juta hingga 80 juta, dan Cabang D berada pada kisaran 70 juta hingga 90 juta, semuanya mencakup angka di atas 50 juta. Dengan demikian, Cabang C adalah satu-satunya yang gagal mencapai target penjualan minimum di seluruh data penjualannya, menunjukkan kinerja yang paling tidak sesuai dengan target dibandingkan cabang lainnya.


1.4 Buatlah diagram kotak (box plot) untuk memvisualisasikan penyebaran data setiap cabang!

Jawab:


1.5 Jika anda adalah manajer perusahaan, bagaimana anda menggunakan informasi ini untuk merencanakan strategi peningkatan penjualan?

Jawab:

Sebagai seorang manajer perusahaan, saya akan menggunakan informasi ini untuk:

  1. Mengidentifikasi Cabang dengan Kinerja Rendah
    Cabang C menunjukkan kinerja yang paling rendah karena tidak ada satupun data penjualannya yang mencapai target minimum. Fokus perlu diberikan untuk menganalisis lebih dalam penyebab kinerja rendah ini, seperti kurangnya permintaan di wilayah tersebut, kualitas layanan, strategi pemasaran, atau faktor eksternal seperti kompetisi atau daya beli masyarakat.

  2. Mengoptimalisasi Cabang dengan Penyebaran Kecil
    Cabang C juga memiliki penyebaran penjualan terkecil, yang menunjukkan pola konsisten tetapi dalam angka yang rendah. Untuk meningkatkan penjualan, perusahaan dapat menerapkan strategi seperti promosi lokal, pelatihan staf untuk meningkatkan keterampilan penjualan, atau memperluas penawaran produk yang lebih relevan dengan kebutuhan pasar lokal.

  3. Memanfaatkan Cabang dengan Penyebaran Lebar
    Cabang B memiliki penyebaran penjualan yang terbesar, menunjukkan adanya potensi pasar yang signifikan tetapi kurang konsisten. Strategi untuk Cabang B dapat melibatkan segmentasi pelanggan yang lebih terfokus, memperkuat hubungan dengan pelanggan yang menyumbang angka penjualan tinggi, atau menstabilkan performa melalui program loyalitas.

  4. Meningkatkan Performa Cabang Stabil
    Cabang A dan D menunjukkan konsistensi yang baik, dengan rata-rata dan median penjualan berada di sekitar target. Untuk kedua cabang ini, strategi dapat difokuskan pada ekspansi pasar, seperti memperluas jangkauan wilayah pemasaran atau mengintegrasikan teknologi untuk meningkatkan efisiensi operasional.

  5. Mengevaluasi dan Memonitoring Berkelanjutan
    Penting untuk terus memantau kinerja setiap cabang dengan menggunakan data penjualan secara berkala. Dengan evaluasi rutin, perusahaan dapat mengidentifikasi tren lebih awal dan menyesuaikan strategi sesuai kebutuhan.

  6. Meningkatkan Sinergi Antar Cabang
    Cabang dengan kinerja baik dapat dijadikan contoh atau mentor bagi cabang dengan performa rendah. Program berbagi pengetahuan, seperti pelatihan bersama atau rotasi staf, dapat membantu meningkatkan kemampuan dan efektivitas tim di seluruh cabang.



2 Latihan 2

Perusahaan XYZ mengelola pengiriman barang ke berbagai wilayah dengan menggunakan berbagai jenis transportasi. Setiap pengiriman melibatkan biaya transportasi, waktu yang dibutuhkan, dan jumlah barang yang dikirim. Berikut adalah data terkait pengiriman barang berdasarkan wilayah dan jenis barang:

Wilayah Jenis Barang Jumlah (unit) Waktu (jam) Biaya per Unit (Rp)
Utara Elektronik 200 5 15,000
Selatan Pakaian 150 8 8,000
Timur Makanan 180 6 10,000
Barat Peralatan 120 7 12,000
Tengah Elektronik 250 4 14,000
Utara Pakaian 300 9 8,500
Selatan Makanan 220 7 9,500
Timur Peralatan 140 5 11,000
Barat Elektronik 180 6 14,500
Tengah Pakaian 350 8 7,800
Utara Peralatan 170 4 12,000
Selatan Elektronik 250 6 16,000
Timur Pakaian 190 7 8,200
Barat Makanan 130 5 10,500
Tengah Peralatan 180 5 11,500

2.1 Analisis Efisiensi Pengiriman:

2.1.1 Visualisakan pengiriman barang berdasarkan jumlah barang, waktu pengiriman, dan biaya per unit dengan menggunakan plot 3D.

Jawab:


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

Jawab:

Untuk menentukan wilayah dengan efisiensi pengiriman terendah berdasarkan biaya per unit dan waktu pengiriman, kita akan menghitung rasio efisiensi untuk setiap wilayah. Rasio efisiensi dihitung dengan membagi biaya per unit dengan waktu pengiriman. Semakin besar rasio ini, semakin rendah efisiensi pengirimannya, karena biaya lebih tinggi dibandingkan dengan waktu yang dibutuhkan.

Rumus Rasio Efisiensi: \[ \text{Rasio Efisiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}} \]

Data yang digunakan:

Wilayah Biaya per Unit (Rp) Waktu Pengiriman (jam)
Utara 15,000 5
Selatan 8,000 8
Timur 10,000 6
Barat 12,000 7
Tengah 14,000 4
Utara 8,500 9
Selatan 9,500 7
Timur 11,000 5
Barat 14,500 6
Tengah 7,800 8
Utara 12,000 4
Selatan 16,000 6
Timur 8,200 7
Barat 10,500 5
Tengah 11,500 5

Langkah-Langkah

A. Untuk setiap baris, kita akan menghitung rasio Biaya per Unit dibagi dengan Waktu Pengiriman

  1. Wilayah Utara (Baris 1): \[ \text{Rasio Efisiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}}=\frac{15,000}{5} = 3,000 \]

  2. Wilayah Selatan (Baris 2): \[ \text{Rasio Efisiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}}= \frac{8,000}{8} = 1,000 \]

  3. Wilayah Timur (Baris 3): \[ \text{Rasio Efisiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}}= \frac{10,000}{6} \approx 1,667 \]

  4. Wilayah Barat (Baris 4): \[ \text{Rasio Efisiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}}= \frac{12,000}{7} \approx 1,714 \]

  5. Wilayah Tengah (Baris 5): \[ \text{Rasio Efisiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}}= \frac{14,000}{4} = 3,500 \]

  6. Wilayah Utara (Baris 6): \[ \text{Rasio Efisiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}}= \frac{8,500}{9} \approx 944.44 \]

  7. Wilayah Selatan (Baris 7): \[ \text{Rasio Efisiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}}= \frac{9,500}{7} \approx 1,357.14 \]

  8. Wilayah Timur (Baris 8): \[ \text{Rasio Efisiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}}= \frac{11,000}{5} = 2,200 \]

  9. Wilayah Barat (Baris 9): \[ \text{Rasio Efisiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}}= \frac{14,500}{6} \approx 2,417 \]

  10. Wilayah Tengah (Baris 10): \[ \text{Rasio Efisiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}}= \frac{7,800}{8} = 975 \]

  11. Wilayah Utara (Baris 11): \[ \text{Rasio Efisiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}}= \frac{12,000}{4} = 3,000 \]

  12. Wilayah Selatan (Baris 12): \[ \text{Rasio Efisiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}}= \frac{16,000}{6} \approx 2,667 \]

  13. Wilayah Timur (Baris 13): \[ \text{Rasio Efisiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}}= \frac{8,200}{7} \approx 1,171.43 \]

  14. Wilayah Barat (Baris 14): \[ \text{Rasio Efisiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}}= \frac{10,500}{5} = 2,100 \]

  15. Wilayah Tengah (Baris 15): \[ \text{Rasio Efisiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}}= \frac{11,500}{5} = 2,300 \]

Hasil Rasio Efisiensi:

Wilayah Rasio Efisiensi
Utara (1) 3,000
Selatan (2) 1,000
Timur (3) 1,667
Barat (4) 1,714
Tengah (5) 3,500
Utara (6) 944.44
Selatan (7) 1,357.14
Timur (8) 2,200
Barat (9) 2,417
Tengah (10) 975
Utara (11) 3,000
Selatan (12) 2,667
Timur (13) 1,171.43
Barat (14) 2,100
Tengah (15) 2,300

B. Rata-rata Rasio Efisiensi per Wilayah:

  1. Wilayah Utara:
    • Rasio efisiensi: 3,000, 944.44, 3,000
    • Rata-rata: \[ \text{Rata-rata Utara} = \frac{3,000 + 944.44 + 3,000}{3} = \frac{6,944.44}{3} \approx 2,314.81 \]
  2. Wilayah Selatan:
    • Rasio efisiensi: 1,000, 1,357.14, 2,667
    • Rata-rata: \[ \text{Rata-rata Selatan} = \frac{1,000 + 1,357.14 + 2,667}{3} = \frac{5,024.14}{3} \approx 1,674.71 \]
  3. Wilayah Timur:
    • Rasio efisiensi: 1,667, 2,200, 1,171.43
    • Rata-rata: \[ \text{Rata-rata Timur} = \frac{1,667 + 2,200 + 1,171.43}{3} = \frac{5,038.43}{3} \approx 1,679.48 \]
  4. Wilayah Barat:
    • Rasio efisiensi: 1,714, 2,417, 2,100
    • Rata-rata: \[ \text{Rata-rata Barat} = \frac{1,714 + 2,417 + 2,100}{3} = \frac{6,231}{3} = 2,077 \]
  5. Wilayah Tengah:
    • Rasio efisiensi: 3,500, 975, 2,300
    • Rata-rata: \[ \text{Rata-rata Tengah} = \frac{3,500 + 975 + 2,300}{3} = \frac{6,775}{3} \approx 2,258.33 \]

Hasil Rata-rata Rasio Efisiensi per Wilayah:

Wilayah Rata-rata Rasio Efisiensi
Utara 2,314.81
Selatan 1,674.71
Timur 1,679.48
Barat 2,077.00
Tengah 2,258.33

2.1.2.1 Kesimpulan:

Wilayah Selatan memiliki efisiensi pengiriman terendah berdasarkan biaya per unit dan waktu pengiriman karena rasio efisiensinya yang lebih rendah dibandingkan wilayah lainnya. Di wilayah Selatan, rasio efisiensi rata-rata adalah 1,674.71, lebih kecil dari wilayah lain seperti Tengah (2,258.33) dan Utara (2,314.81), yang menunjukkan biaya per unit yang lebih tinggi atau waktu pengiriman yang lebih lama. Wilayah Selatan memiliki biaya per unit yang lebih rendah dan waktu pengiriman yang relatif wajar, menciptakan keseimbangan antara biaya dan waktu. Dengan waktu pengiriman yang efisien, wilayah ini mampu mengoptimalkan pengeluaran tanpa mengorbankan waktu, yang membuatnya lebih efisien dalam pengiriman barang secara keseluruhan.


2.2 Rekomendasi Operasional:

2.2.1 Berdasarkan hasil analisis, wilayah mana yang memerlukan perhatian khusus untuk meningkatkan efisiensi pengiriman?

Jawab:

Berdasarkan hasil analisis, Wilayah Tengah memerlukan perhatian khusus untuk meningkatkan efisiensi pengiriman. Hal ini disebabkan oleh rasio efisiensi yang tertinggi di antara wilayah lainnya, yaitu 2,258.33. Rasio efisiensi yang tinggi menunjukkan bahwa wilayah ini mengeluarkan biaya per unit yang lebih tinggi dibandingkan dengan waktu pengiriman yang relatif lebih pendek. Meskipun waktu pengiriman di wilayah ini tidak terlalu lama, tingginya biaya per unit mengindikasikan adanya peluang untuk mengurangi biaya pengiriman. Oleh karena itu, untuk meningkatkan efisiensi, wilayah Tengah perlu fokus pada pengurangan biaya per unit dan optimalisasi proses pengiriman agar lebih efisien dalam hal biaya dan waktu.


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

Jawab:

  1. Optimalkan Rute Pengiriman: Gunakan teknologi GPS dan perangkat lunak perencanaan rute untuk memilih jalur yang lebih efisien dan menghindari kemacetan.
  2. Negosiasi Tarif Pengiriman: Tawar tarif lebih kompetitif dengan penyedia jasa logistik atau jalin kontrak jangka panjang untuk diskon.
  3. Pengelolaan Persediaan: Kelola persediaan secara real-time untuk menghindari pengiriman mendesak yang mahal.
  4. Gunakan Kendaraan Tepat Ukuran: Pastikan kendaraan digunakan secara maksimal untuk mengurangi pemborosan biaya bahan bakar.
  5. Efisiensikan Proses Pengiriman: Latih pengemudi untuk mengurangi pemborosan bahan bakar dan percepat pemrosesan barang di gudang.
  6. Pelacakan Pengiriman Real-Time: Gunakan sistem pelacakan untuk mengidentifikasi masalah dan menghindari keterlambatan.
  7. Koordinasi dan Kolaborasi: Tingkatkan komunikasi dengan pemasok dan pengirim serta konsolidasi pengiriman untuk mengurangi biaya.

2.3 Kinerja Berdasarkan Jenis Barang:

Analisis kinerja pengiriman berdasarkan jenis barang dan wilayah. Mana yang memiliki waktu pengiriman lebih cepat dan biaya per unit lebih rendah?

Jawab:

Untuk menganalisis kinerja pengiriman berdasarkan jenis barang dan wilayah, kita perlu melihat dua faktor utama: waktu pengiriman dan biaya per unit. Berdasarkan data yang ada, kita dapat menyimpulkan wilayah dan jenis barang mana yang lebih efisien dalam hal waktu dan biaya.

Langkah-langkah Analisis:

  1. Waktu Pengiriman: Membandingkan waktu pengiriman antar wilayah untuk jenis barang tertentu.

  2. Biaya per Unit: Membandingkan biaya per unit antar wilayah dan jenis barang.

Analisis Berdasarkan Data:

  1. Wilayah dengan Waktu Pengiriman Lebih Cepat:
    • Wilayah Selatan memiliki waktu pengiriman yang relatif lebih cepat dan stabil dibandingkan wilayah lain. Misalnya, waktu pengiriman untuk jenis barang di wilayah ini cenderung lebih singkat, yang berkontribusi pada efisiensi pengiriman.
  2. Wilayah dengan Biaya Per Unit Lebih Rendah:
    • Wilayah Selatan juga memiliki biaya per unit yang lebih rendah dibandingkan dengan wilayah lainnya. Hal ini menunjukkan bahwa wilayah ini lebih efisien dalam hal pengeluaran pengiriman per unit barang, yang menurunkan biaya secara keseluruhan.

2.3.1 Kesimpulan:

  • Wilayah Selatan menunjukkan kinerja pengiriman terbaik, karena memiliki waktu pengiriman yang lebih cepat dan biaya per unit yang lebih rendah, menjadikannya wilayah yang lebih efisien dalam hal pengiriman barang.
  • Wilayah lainnya, seperti Wilayah Tengah, mungkin memiliki waktu pengiriman yang lebih lama dan biaya per unit yang lebih tinggi, sehingga perlu perhatian khusus untuk mengoptimalkan efisiensi pengiriman di sana.

Jadi, jika tujuan utamanya adalah mengurangi waktu pengiriman dan biaya per unit, Wilayah Selatan adalah yang paling efisien dibandingkan dengan wilayah lainnya.



3 Referensi

  1. Pranoto, S. (2017). Analisis Strategi Peningkatan Penjualan. Jurnal Bisnis Strategi, 2(1), 1-16. Retrieved from https://ejournal.undip.ac.id/index.php/jbs/article/view/14469.

  2. Sugiyanti, L. (2022). Strategi Pemasaran Digital untuk Meningkatkan Penjualan UMKM. Jurnal Bima. Retrieved from https://jurnalbima.id.

  3. Agnezia, S. V., & Winarno, W. (2022). Rute perjalanan dan biaya ongkos: Algoritma Program Dinamis dengan Pendekatan Forward Recursive Equation. Proceeding Mercu Buana Conference on Industrial Engineering, 6, 396-405.

  4. Zein, M. N., Wibowo, P., Hidayatullah, I., Pahdian, M. F., Ramadhan, A., Gufron, N. S. A., & Ringo, E. E. S. (2022). Jalur pengiriman dan biaya pengiriman: Program Dinamis dalam pengiriman barang. Proceeding Mercu Buana Conference on Industrial Engineering, 6, 396-405.

  5. Kurnia, A., & Ernawati, D. (2021). Optimasi rute distribusi menggunakan algoritma Differential Evolution untuk penghematan jarak dan waktu tempuh. Jurnal Teknik Industri, 23(2), 114-130.

LS0tDQp0aXRsZTogIkxhdGloYW4gVWt1cmFuIFBlbnllYmFyYW4gRGF0YSINCnN1YnRpdGxlOiAiU3RhdGlzdGlrYSBEYXNhciINCmF1dGhvcjogIklzbmFpbmkgTnVyIEhhc2FuYWggKDUyMjQwMDA1KSINCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6DQogICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjogICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9qdWJhL3JtZGZvcm1hdHMNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNzczogInN0eWxlICgxKS5jc3MiDQotLS0NCg0KPGltZyBpZD0iSXNuYSIgc3JjPSJDOlxVc2Vyc1xBU1VTXERlc2t0b3BcU3RhdGlzdGlrYSBEYXNhclxJc25hLnBuZyIgYWx0PSJMb2dvIiBzdHlsZT0id2lkdGg6MjAwcHg7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IGF1dG87Ij4NCg0KDQojIExhdGloYW4gMQ0KDQpTZWJ1YWggcGVydXNhaGFhbiBpbmdpbiBtZW1haGFtaSBrYXJha3RlcmlzdGlrIHBlbnllYmFyYW4gZGF0YSBoYXNpbCBwZW5qdWFsYW4gZGFyaSBlbXBhdCBjYWJhbmcgKEEsIEIsIEMsIGRhbiBEKSBzZWxhbWEgc2F0dSBidWxhbiB0ZXJha2hpci4gRGF0YSBwZW5qdWFsYW4gKGRhbGFtIGp1dGEgcnVwaWFoKSBkYXJpIGtlZW1wYXQgY2FiYW5nIHRlcnNlYnV0IGFkYWxhaCBzZWJhZ2FpIGJlcmlrdXQ6DQoNCiogQ2FiYW5nIEE6IDUwLCA1NSwgNjAsIDY1LCA3MA0KKiBDYWJhbmcgQjogNDAsIDUwLCA2MCwgNzAsIDgwDQoqIENhYmFuZyBDOiAzMCwgMzAsIDM1LCA0MCwgNDUNCiogQ2FiYW5nIEQ6IDcwLCA3NSwgODAsIDg1LCA5MCANCg0KLS0tDQoNCiMjICBIaXR1bmdsYWggcmF0YS1yYXRhLCBtZWRpYW4sIGRhbiBzdGFuZGFyIGRldmlhc2kgdW50dWsgbWFzaW5nLW1hc2luZyBjYWJhbmchDQoNCkphd2FiOg0KDQojIyMgKipDYWJhbmcgQSoqDQpEYXRhOiA1MCwgNTUsIDYwLCA2NSwgNzAgIA0KMS4gKipSYXRhLXJhdGEqKjoNCiAgIFxbDQogICBcdGV4dHtSYXRhLXJhdGF9ID0gXGZyYWN7XHN1bSBcdGV4dHtkYXRhfX17XHRleHR7anVtbGFoIGRhdGF9fSA9IFxmcmFjezUwICsgNTUgKyA2MCArIDY1ICsgNzB9ezV9ID0gXGZyYWN7MzAwfXs1fSA9IDYwDQogICBcXQ0KDQoyLiAqKk1lZGlhbioqOiAgDQogICBcWw0KICAgXHRleHR7TWVkaWFufSA9IDYwDQogICBcXQ0KDQozLiAqKlN0YW5kYXIgRGV2aWFzaSoqOiAgDQoNCiAgIFxbDQogICBcdGV4dHtTdGQgRGV2fSA9IFxzcXJ0e1xmcmFje1xzdW0gKHhfaSAtIFxiYXJ7eH0pXjJ9e259fSBcXCA9IFxzcXJ0e1xmcmFjIHsgKDUwIC0gNjApXjIgKyAoNTUgLSA2MCleMiArICg2MCAtIDYwKV4yICsgKDY1IC0gNjApXjIgKyAoNzAgLSA2MCleMn0gezV9fSBcXCA9IFxzcXJ0e1xmcmFjIHsgMTAwICsgMjUgKyAwICsgMjUgKyAxMDB9IHs1fX0gXFwgPSBcc3FydHtcZnJhYyB7MjUwfXs1fX0gXFwgPSBcc3FydHs1MH0gPSA3LjcwNzENCiAgIFxdDQoNCiMjIyAqKkNhYmFuZyBCKioNCkRhdGE6IDQwLCA1MCwgNjAsIDcwLCA4MCAgDQoxLiAqKlJhdGEtcmF0YSoqOg0KICAgXFsNCiAgIFx0ZXh0e1JhdGEtcmF0YX0gPSBcZnJhY3tcc3VtIFx0ZXh0e2RhdGF9fXtcdGV4dHtqdW1sYWggZGF0YX19ID0gXGZyYWN7NDAgKyA1MCArIDYwICsgNzAgKyA4MH17NX0gPSBcZnJhY3szMDB9ezV9ID0gNjANCiAgIFxdDQoNCjIuICoqTWVkaWFuKio6ICANCiAgIFxbDQogICBcdGV4dHtNZWRpYW59ID0gNjANCiAgIFxdDQoNCjMuICoqU3RhbmRhciBEZXZpYXNpKio6DQoNCiAgIFxbDQogICBcdGV4dHtTdGQgRGV2fSA9IFxzcXJ0e1xmcmFje1xzdW0gKHhfaSAtIFxiYXJ7eH0pXjJ9e259fSBcXCA9IFxzcXJ0e1xmcmFjIHsgKDQwIC0gNjApXjIgKyAoNTAgLSA2MCleMiArICg2MCAtIDYwKV4yICsgKDcwIC0gNjApXjIgKyAoODAgLSA2MCleMn0gezV9fSBcXCA9IFxzcXJ0e1xmcmFjIHs0MDAgKyAxMDAgKyAwICsgMTAwICsgNDAwfSB7NX19IFxcID0gXHNxcnR7XGZyYWMgezEwMDB9IHs1fX0gXFwgPSBcc3FydCB7MjAwfSA9IDE0LjE0Mg0KICAgXF0NCiAgIA0KDQojIyMgKipDYWJhbmcgQyoqDQpEYXRhOiAzMCwgMzAsIDM1LCA0MCwgNDUgIA0KMS4gKipSYXRhLXJhdGEqKjoNCiAgIFxbDQogICBcdGV4dHtSYXRhLXJhdGF9ID0gXGZyYWN7XHN1bSBcdGV4dHtkYXRhfX17XHRleHR7anVtbGFoIGRhdGF9fSA9IFxmcmFjezMwICsgMzAgKyAzNSArIDQwICsgNDV9ezV9ID0gXGZyYWN7MTgwfXs1fSA9IDM2DQogICBcXQ0KDQoyLiAqKk1lZGlhbioqOiAgDQogICBcWw0KICAgXHRleHR7TWVkaWFufSA9IDM1DQogICBcXQ0KDQozLiAqKlN0YW5kYXIgRGV2aWFzaSoqOg0KDQogICBcWw0KICAgXHRleHR7U3RkIERldn0gPSBcc3FydHtcZnJhY3tcc3VtICh4X2kgLSBcYmFye3h9KV4yfXtufX0gXFwgPSBcc3FydHtcZnJhYyB7KDMwIC0gMzYpXjIgKyAoMzAgLSAzNileMiArICgzNSAtIDM2KV4yICsgKDQwIC0gMzYpXjIgKyAoNDUgLSAzNileMn0gezV9fSBcXCA9IFxzcXJ0e1xmcmFjIHsgMzYgKyAzNiArIDEgKyAxNiArIDgxfSB7NX19IFxcID0gXHNxcnR7XGZyYWMgezE3MH0gezV9fSBcXCA9IFxzcXJ0IHszNH0gPSA1LjgzMQ0KICAgXF0NCg0KDQojIyMgKipDYWJhbmcgRCoqDQpEYXRhOiA3MCwgNzUsIDgwLCA4NSwgOTAgIA0KMS4gKipSYXRhLXJhdGEqKjoNCiAgIFxbDQogICBcdGV4dHtSYXRhLXJhdGF9ID0gXGZyYWN7XHN1bSBcdGV4dHtkYXRhfX17XHRleHR7anVtbGFoIGRhdGF9fSA9IFxmcmFjezcwICsgNzUgKyA4MCArIDg1ICsgOTB9ezV9ID0gXGZyYWN7NDAwfXs1fSA9IDgwDQogICBcXQ0KDQoyLiAqKk1lZGlhbioqOiAgDQogICBcWw0KICAgXHRleHR7TWVkaWFufSA9IDgwDQogICBcXQ0KDQozLiAqKlN0YW5kYXIgRGV2aWFzaSoqOg0KDQogICBcWw0KICAgXHRleHR7U3RkIERldn0gPSBcc3FydHtcZnJhY3tcc3VtICh4X2kgLSBcYmFye3h9KV4yfXtufX0gXFwgPSBcc3FydHtcZnJhYyB7KDcwIC0gODApXjIgKyAoNzUgLSA4MCleMiArICg4MCAtIDgwKV4yICsgKDg1IC0gODApXjIgKyAoOTAgLSA4MCleMn0gezV9fSBcXCA9IFxzcXJ0e1xmcmFjIHsgMTAwICsgMjUgKyAwICsgMjUgKyAxMDAgfSB7NX19IFxcID0gXHNxcnR7XGZyYWMgezI1MH0gezV9fSBcXCA9IFxzcXJ0IHs1MH0gPSA3LjA3MQ0KICAgXF0NCg0KLS0tDQoNCiMjIENhYmFuZyBtYW5hIHlhbmcgbWVtaWxpa2kgcGVueWViYXJhbiB5YW5nIHBhbGluZyBrZWNpbD8gSmVsYXNrYW4gYWxhc2FubnlhIQ0KDQpKYXdhYjoNCg0KQ2FiYW5nIHlhbmcgbWVtaWxpa2kgcGVueWViYXJhbiB5YW5nIHBhbGluZyBrZWNpbCBhZGFsYWggKipDYWJhbmcgQyoqLiBIYWwgaW5pIGRhcGF0IGRpa2V0YWh1aSBtZWxhbHVpIG5pbGFpIHN0YW5kYXIgZGV2aWFzaSBkYXJpIENhYmFuZyBDIG1lcnVwYWthbiBuaWxhaSBzdGFuZGFyIGRldmlhc2kgeWFuZyB0ZXJrZWNpbCwgc3RhbmRhciBkZXZpYXNpIGFkYWxhaCB1a3VyYW4geWFuZyBtZW51bmp1a2thbiBzZWJlcmFwYSBqYXVoIGRhdGEgbWVueWViYXIgZGFyaSByYXRhLXJhdGEuIE5pbGFpIHlhbmcgbGViaWgga2VjaWwgbWVudW5qdWtrYW4gcGVueWViYXJhbiBkYXRhIHlhbmcgbGViaWgga2VjaWwgKGxlYmloIHRlcmtvbnNlbnRyYXNpIGRpIHNla2l0YXIgcmF0YS1yYXRhKS4gRGFyaSBoYXNpbCBwZXJoaXR1bmdhbiBwYWRhIHNvYWwgbm9tb3IgMSwgZGFwYXQgZGlwZXJvbGVoOg0KDQoqIENhYmFuZyBBOiBTdGFuZGFyIGRldmlhc2kgPSA3LDA3IGp1dGENCg0KKiBDYWJhbmcgQjogU3RhbmRhciBkZXZpYXNpID0gMTQsMTQganV0YQ0KDQoqIENhYmFuZyBDOiBTdGFuZGFyIGRldmlhc2kgPSA1LDgzIGp1dGENCg0KKiBDYWJhbmcgRDogU3RhbmRhciBkZXZpYXNpID0gNywwNyBqdXRhDQoNCkRhcmkgaGFzaWwgdGVyc2VidXQgc3VkYWggZGFwYXQgZGlrZXRhaHVpIGJhaHdhIGNhYmFuZyB5YW5nIG1lbWlsaWtpIHBlbnllYmFyYW4geWFuZyBwYWxpbmcga2VjaWwgYWRhbGFoIENhYmFuZyBDIHlhaXR1IHNlYmVzYXIgNSw4MyBqdXRhLiBTZWxhaW4gaXR1LCBwZW55ZWJhcmFuIGRhdGEgQ2FiYW5nIEMgbGViaWgga2VjaWwga2FyZW5hIG5pbGFpLW5pbGFpIHBlbmp1YWxhbiByZWxhdGlmIGRla2F0IHNhdHUgc2FtYSBsYWluLCBkZW5nYW4gcmVudGFuZyBkYXJpIDMwIGhpbmdnYSA0NSBqdXRhLCB5YW5nIG1lcnVwYWthbiByZW50YW5nIHRlcmtlY2lsIGRpYmFuZGluZ2thbiBjYWJhbmcgbGFpbi4NCg0KLS0tDQoNCiMjIEppa2EgdGFyZ2V0IHBlbmp1YWxhbiBtaW5pbXVtIGFkYWxhaCA1MCBqdXRhIHJ1cGlhaCwgY2FiYW5nIG1hbmEgeWFuZyBnYWdhbCBtZW5jYXBhaSB0YXJnZXQgZGkgc2VtdWEgZGF0YW55YT8NCg0KSmF3YWI6DQoNCkNhYmFuZyB5YW5nIGdhZ2FsIG1lbmNhcGFpIHRhcmdldCBwZW5qdWFsYW4gbWluaW11bSBzZWJlc2FyIDUwIGp1dGEgcnVwaWFoIGRpIHNlbXVhIGRhdGFueWEgYWRhbGFoICoqQ2FiYW5nIEMqKi4gSGFsIGluaSB0ZXJsaWhhdCBkYXJpIGRhdGEgcGVuanVhbGFuIENhYmFuZyBDIHlhbmcgdGVyZGlyaSBkYXJpIDMwIGp1dGEsIDMwIGp1dGEsIDM1IGp1dGEsIDQwIGp1dGEsIGRhbiA0NSBqdXRhLCBkaSBtYW5hIHNlbHVydWggYW5na2FueWEgYmVyYWRhIGRpIGJhd2FoIHRhcmdldCA1MCBqdXRhIHJ1cGlhaC4gU2ViYWxpa255YSwgY2FiYW5nIGxhaW5ueWEgbWVtaWxpa2kgc2V0aWRha255YSBzYXR1IGRhdGEgcGVuanVhbGFuIHlhbmcgbWVtZW51aGkgYXRhdSBtZWxhbXBhdWkgdGFyZ2V0LiBNaXNhbG55YSwgQ2FiYW5nIEEgbWVtaWxpa2kgZGF0YSBwZW5qdWFsYW4gNTAganV0YSBoaW5nZ2EgNzAganV0YSwgQ2FiYW5nIEIgbWVtaWxpa2kgcmVudGFuZyBwZW5qdWFsYW4gZGFyaSA0MCBqdXRhIGhpbmdnYSA4MCBqdXRhLCBkYW4gQ2FiYW5nIEQgYmVyYWRhIHBhZGEga2lzYXJhbiA3MCBqdXRhIGhpbmdnYSA5MCBqdXRhLCBzZW11YW55YSBtZW5jYWt1cCBhbmdrYSBkaSBhdGFzIDUwIGp1dGEuIERlbmdhbiBkZW1pa2lhbiwgQ2FiYW5nIEMgYWRhbGFoIHNhdHUtc2F0dW55YSB5YW5nIGdhZ2FsIG1lbmNhcGFpIHRhcmdldCBwZW5qdWFsYW4gbWluaW11bSBkaSBzZWx1cnVoIGRhdGEgcGVuanVhbGFubnlhLCBtZW51bmp1a2thbiBraW5lcmphIHlhbmcgcGFsaW5nIHRpZGFrIHNlc3VhaSBkZW5nYW4gdGFyZ2V0IGRpYmFuZGluZ2thbiBjYWJhbmcgbGFpbm55YS4NCg0KLS0tDQoNCiMjIEJ1YXRsYWggZGlhZ3JhbSBrb3RhayAoYm94IHBsb3QpIHVudHVrIG1lbXZpc3VhbGlzYXNpa2FuIHBlbnllYmFyYW4gZGF0YSBzZXRpYXAgY2FiYW5nIQ0KDQpKYXdhYjogDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBEYXRhIHBlbmp1YWxhbg0KY2FiYW5nX0EgPC0gYyg1MCwgNTUsIDYwLCA2NSwgNzApDQpjYWJhbmdfQiA8LSBjKDQwLCA1MCwgNjAsIDcwLCA4MCkNCmNhYmFuZ19DIDwtIGMoMzAsIDMwLCAzNSwgNDAsIDQ1KQ0KY2FiYW5nX0QgPC0gYyg3MCwgNzUsIDgwLCA4NSwgOTApDQoNCiMgTWVtYnVhdCBCb3ggUGxvdCB1bnR1ayBzZXRpYXAgY2FiYW5nDQpwbG90X2x5KCkgJT4lDQogIGFkZF90cmFjZSgNCiAgICB5ID0gY2FiYW5nX0EsIA0KICAgIHR5cGUgPSAiYm94IiwgDQogICAgbmFtZSA9ICJDYWJhbmcgQSIsIA0KICAgIGJveG1lYW4gPSBUUlVFLA0KICAgIG1hcmtlciA9IGxpc3QoY29sb3IgPSAnbGlnaHRibHVlJykNCiAgKSAlPiUNCiAgYWRkX3RyYWNlKA0KICAgIHkgPSBjYWJhbmdfQiwgDQogICAgdHlwZSA9ICJib3giLCANCiAgICBuYW1lID0gIkNhYmFuZyBCIiwgDQogICAgYm94bWVhbiA9IFRSVUUsDQogICAgbWFya2VyID0gbGlzdChjb2xvciA9ICdsaWdodGdyZWVuJykNCiAgKSAlPiUNCiAgYWRkX3RyYWNlKA0KICAgIHkgPSBjYWJhbmdfQywgDQogICAgdHlwZSA9ICJib3giLCANCiAgICBuYW1lID0gIkNhYmFuZyBDIiwgDQogICAgYm94bWVhbiA9IFRSVUUsDQogICAgbWFya2VyID0gbGlzdChjb2xvciA9ICdsaWdodHBpbmsnKQ0KICApICU+JQ0KICBhZGRfdHJhY2UoDQogICAgeSA9IGNhYmFuZ19ELCANCiAgICB0eXBlID0gImJveCIsIA0KICAgIG5hbWUgPSAiQ2FiYW5nIEQiLCANCiAgICBib3htZWFuID0gVFJVRSwNCiAgICBtYXJrZXIgPSBsaXN0KGNvbG9yID0gJ2xpZ2h0eWVsbG93JykNCiAgKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIkJveCBQbG90IFBlbmp1YWxhbiBwZXIgQ2FiYW5nIiwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiUGVuanVhbGFuIChKdXRhIFJ1cGlhaCkiKSwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiQ2FiYW5nIikNCiAgKQ0KYGBgDQoNCi0tLQ0KDQojIyBKaWthIGFuZGEgYWRhbGFoIG1hbmFqZXIgcGVydXNhaGFhbiwgYmFnYWltYW5hIGFuZGEgbWVuZ2d1bmFrYW4gaW5mb3JtYXNpIGluaSB1bnR1ayBtZXJlbmNhbmFrYW4gc3RyYXRlZ2kgcGVuaW5na2F0YW4gcGVuanVhbGFuPw0KDQpKYXdhYjoNCg0KU2ViYWdhaSBzZW9yYW5nIG1hbmFqZXIgcGVydXNhaGFhbiwgc2F5YSBha2FuIG1lbmdndW5ha2FuIGluZm9ybWFzaSBpbmkgdW50dWs6DQoNCjEuICoqTWVuZ2lkZW50aWZpa2FzaSBDYWJhbmcgZGVuZ2FuIEtpbmVyamEgUmVuZGFoKiogIA0KICAgQ2FiYW5nIEMgbWVudW5qdWtrYW4ga2luZXJqYSB5YW5nIHBhbGluZyByZW5kYWgga2FyZW5hIHRpZGFrIGFkYSBzYXR1cHVuIGRhdGEgcGVuanVhbGFubnlhIHlhbmcgbWVuY2FwYWkgdGFyZ2V0IG1pbmltdW0uIEZva3VzIHBlcmx1IGRpYmVyaWthbiB1bnR1ayBtZW5nYW5hbGlzaXMgbGViaWggZGFsYW0gcGVueWViYWIga2luZXJqYSByZW5kYWggaW5pLCBzZXBlcnRpIGt1cmFuZ255YSBwZXJtaW50YWFuIGRpIHdpbGF5YWggdGVyc2VidXQsIGt1YWxpdGFzIGxheWFuYW4sIHN0cmF0ZWdpIHBlbWFzYXJhbiwgYXRhdSBmYWt0b3IgZWtzdGVybmFsIHNlcGVydGkga29tcGV0aXNpIGF0YXUgZGF5YSBiZWxpIG1hc3lhcmFrYXQuDQoNCjIuICoqTWVuZ29wdGltYWxpc2FzaSBDYWJhbmcgZGVuZ2FuIFBlbnllYmFyYW4gS2VjaWwqKiAgDQogICBDYWJhbmcgQyBqdWdhIG1lbWlsaWtpIHBlbnllYmFyYW4gcGVuanVhbGFuIHRlcmtlY2lsLCB5YW5nIG1lbnVuanVra2FuIHBvbGEga29uc2lzdGVuIHRldGFwaSBkYWxhbSBhbmdrYSB5YW5nIHJlbmRhaC4gVW50dWsgbWVuaW5na2F0a2FuIHBlbmp1YWxhbiwgcGVydXNhaGFhbiBkYXBhdCBtZW5lcmFwa2FuIHN0cmF0ZWdpIHNlcGVydGkgcHJvbW9zaSBsb2thbCwgcGVsYXRpaGFuIHN0YWYgdW50dWsgbWVuaW5na2F0a2FuIGtldGVyYW1waWxhbiBwZW5qdWFsYW4sIGF0YXUgbWVtcGVybHVhcyBwZW5hd2FyYW4gcHJvZHVrIHlhbmcgbGViaWggcmVsZXZhbiBkZW5nYW4ga2VidXR1aGFuIHBhc2FyIGxva2FsLg0KDQozLiAqKk1lbWFuZmFhdGthbiBDYWJhbmcgZGVuZ2FuIFBlbnllYmFyYW4gTGViYXIqKiAgDQogICBDYWJhbmcgQiBtZW1pbGlraSBwZW55ZWJhcmFuIHBlbmp1YWxhbiB5YW5nIHRlcmJlc2FyLCBtZW51bmp1a2thbiBhZGFueWEgcG90ZW5zaSBwYXNhciB5YW5nIHNpZ25pZmlrYW4gdGV0YXBpIGt1cmFuZyBrb25zaXN0ZW4uIFN0cmF0ZWdpIHVudHVrIENhYmFuZyBCIGRhcGF0IG1lbGliYXRrYW4gc2VnbWVudGFzaSBwZWxhbmdnYW4geWFuZyBsZWJpaCB0ZXJmb2t1cywgbWVtcGVya3VhdCBodWJ1bmdhbiBkZW5nYW4gcGVsYW5nZ2FuIHlhbmcgbWVueXVtYmFuZyBhbmdrYSBwZW5qdWFsYW4gdGluZ2dpLCBhdGF1IG1lbnN0YWJpbGthbiBwZXJmb3JtYSBtZWxhbHVpIHByb2dyYW0gbG95YWxpdGFzLg0KDQo0LiAqKk1lbmluZ2thdGthbiBQZXJmb3JtYSBDYWJhbmcgU3RhYmlsKiogIA0KICAgQ2FiYW5nIEEgZGFuIEQgbWVudW5qdWtrYW4ga29uc2lzdGVuc2kgeWFuZyBiYWlrLCBkZW5nYW4gcmF0YS1yYXRhIGRhbiBtZWRpYW4gcGVuanVhbGFuIGJlcmFkYSBkaSBzZWtpdGFyIHRhcmdldC4gVW50dWsga2VkdWEgY2FiYW5nIGluaSwgc3RyYXRlZ2kgZGFwYXQgZGlmb2t1c2thbiBwYWRhIGVrc3BhbnNpIHBhc2FyLCBzZXBlcnRpIG1lbXBlcmx1YXMgamFuZ2thdWFuIHdpbGF5YWggcGVtYXNhcmFuIGF0YXUgbWVuZ2ludGVncmFzaWthbiB0ZWtub2xvZ2kgdW50dWsgbWVuaW5na2F0a2FuIGVmaXNpZW5zaSBvcGVyYXNpb25hbC4NCg0KNS4gKipNZW5nZXZhbHVhc2kgZGFuIE1lbW9uaXRvcmluZyBCZXJrZWxhbmp1dGFuKiogIA0KICAgUGVudGluZyB1bnR1ayB0ZXJ1cyBtZW1hbnRhdSBraW5lcmphIHNldGlhcCBjYWJhbmcgZGVuZ2FuIG1lbmdndW5ha2FuIGRhdGEgcGVuanVhbGFuIHNlY2FyYSBiZXJrYWxhLiBEZW5nYW4gZXZhbHVhc2kgcnV0aW4sIHBlcnVzYWhhYW4gZGFwYXQgbWVuZ2lkZW50aWZpa2FzaSB0cmVuIGxlYmloIGF3YWwgZGFuIG1lbnllc3VhaWthbiBzdHJhdGVnaSBzZXN1YWkga2VidXR1aGFuLg0KDQo2LiAqKk1lbmluZ2thdGthbiBTaW5lcmdpIEFudGFyIENhYmFuZyoqICANCiAgIENhYmFuZyBkZW5nYW4ga2luZXJqYSBiYWlrIGRhcGF0IGRpamFkaWthbiBjb250b2ggYXRhdSBtZW50b3IgYmFnaSBjYWJhbmcgZGVuZ2FuIHBlcmZvcm1hIHJlbmRhaC4gUHJvZ3JhbSBiZXJiYWdpIHBlbmdldGFodWFuLCBzZXBlcnRpIHBlbGF0aWhhbiBiZXJzYW1hIGF0YXUgcm90YXNpIHN0YWYsIGRhcGF0IG1lbWJhbnR1IG1lbmluZ2thdGthbiBrZW1hbXB1YW4gZGFuIGVmZWt0aXZpdGFzIHRpbSBkaSBzZWx1cnVoIGNhYmFuZy4NCg0KLS0tDQoNCi0tLQ0KDQojIExhdGloYW4gMg0KDQpQZXJ1c2FoYWFuIFhZWiBtZW5nZWxvbGEgcGVuZ2lyaW1hbiBiYXJhbmcga2UgYmVyYmFnYWkgd2lsYXlhaCBkZW5nYW4gbWVuZ2d1bmFrYW4gYmVyYmFnYWkgamVuaXMgdHJhbnNwb3J0YXNpLiBTZXRpYXAgcGVuZ2lyaW1hbiBtZWxpYmF0a2FuIGJpYXlhIHRyYW5zcG9ydGFzaSwgd2FrdHUgeWFuZyBkaWJ1dHVoa2FuLCBkYW4ganVtbGFoIGJhcmFuZyB5YW5nIGRpa2lyaW0uIEJlcmlrdXQgYWRhbGFoIGRhdGEgdGVya2FpdCBwZW5naXJpbWFuIGJhcmFuZyBiZXJkYXNhcmthbiB3aWxheWFoIGRhbiBqZW5pcyBiYXJhbmc6DQoNCg0KfCAqKldpbGF5YWgqKiB8ICoqSmVuaXMgQmFyYW5nKiogfCAqKkp1bWxhaCAodW5pdCkqKiB8ICoqV2FrdHUgKGphbSkqKiB8ICoqQmlheWEgcGVyIFVuaXQgKFJwKSoqIHwNCnwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgVXRhcmEgICAgICAgfCBFbGVrdHJvbmlrICAgICAgIHwgMjAwICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgfCAxNSwwMDAgICAgICAgICAgICAgICAgIHwNCnwgU2VsYXRhbiAgICAgfCBQYWthaWFuICAgICAgICAgIHwgMTUwICAgICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICAgfCA4LDAwMCAgICAgICAgICAgICAgICAgIHwNCnwgVGltdXIgICAgICAgfCBNYWthbmFuICAgICAgICAgIHwgMTgwICAgICAgICAgICAgICAgfCA2ICAgICAgICAgICAgICAgfCAxMCwwMDAgICAgICAgICAgICAgICAgIHwNCnwgQmFyYXQgICAgICAgfCBQZXJhbGF0YW4gICAgICAgIHwgMTIwICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgfCAxMiwwMDAgICAgICAgICAgICAgICAgIHwNCnwgVGVuZ2FoICAgICAgfCBFbGVrdHJvbmlrICAgICAgIHwgMjUwICAgICAgICAgICAgICAgfCA0ICAgICAgICAgICAgICAgfCAxNCwwMDAgICAgICAgICAgICAgICAgIHwNCnwgVXRhcmEgICAgICAgfCBQYWthaWFuICAgICAgICAgIHwgMzAwICAgICAgICAgICAgICAgfCA5ICAgICAgICAgICAgICAgfCA4LDUwMCAgICAgICAgICAgICAgICAgIHwNCnwgU2VsYXRhbiAgICAgfCBNYWthbmFuICAgICAgICAgIHwgMjIwICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgfCA5LDUwMCAgICAgICAgICAgICAgICAgIHwNCnwgVGltdXIgICAgICAgfCBQZXJhbGF0YW4gICAgICAgIHwgMTQwICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgfCAxMSwwMDAgICAgICAgICAgICAgICAgIHwNCnwgQmFyYXQgICAgICAgfCBFbGVrdHJvbmlrICAgICAgIHwgMTgwICAgICAgICAgICAgICAgfCA2ICAgICAgICAgICAgICAgfCAxNCw1MDAgICAgICAgICAgICAgICAgIHwNCnwgVGVuZ2FoICAgICAgfCBQYWthaWFuICAgICAgICAgIHwgMzUwICAgICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICAgfCA3LDgwMCAgICAgICAgICAgICAgICAgIHwNCnwgVXRhcmEgICAgICAgfCBQZXJhbGF0YW4gICAgICAgIHwgMTcwICAgICAgICAgICAgICAgfCA0ICAgICAgICAgICAgICAgfCAxMiwwMDAgICAgICAgICAgICAgICAgIHwNCnwgU2VsYXRhbiAgICAgfCBFbGVrdHJvbmlrICAgICAgIHwgMjUwICAgICAgICAgICAgICAgfCA2ICAgICAgICAgICAgICAgfCAxNiwwMDAgICAgICAgICAgICAgICAgIHwNCnwgVGltdXIgICAgICAgfCBQYWthaWFuICAgICAgICAgIHwgMTkwICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgfCA4LDIwMCAgICAgICAgICAgICAgICAgIHwNCnwgQmFyYXQgICAgICAgfCBNYWthbmFuICAgICAgICAgIHwgMTMwICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgfCAxMCw1MDAgICAgICAgICAgICAgICAgIHwNCnwgVGVuZ2FoICAgICAgfCBQZXJhbGF0YW4gICAgICAgIHwgMTgwICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgfCAxMSw1MDAgICAgICAgICAgICAgICAgIHwNCg0KLS0tDQoNCiMjIEFuYWxpc2lzIEVmaXNpZW5zaSBQZW5naXJpbWFuOg0KIyMjIFZpc3VhbGlzYWthbiBwZW5naXJpbWFuIGJhcmFuZyBiZXJkYXNhcmthbiBqdW1sYWggYmFyYW5nLCB3YWt0dSBwZW5naXJpbWFuLCBkYW4gYmlheWEgcGVyIHVuaXQgZGVuZ2FuIG1lbmdndW5ha2FuIHBsb3QgM0QuDQoNCkphd2FiOg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YSB5YW5nIGRpZ3VuYWthbg0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBXaWxheWFoID0gYygiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiLCANCiAgICAgICAgICAgICAgIlV0YXJhIiwgIlNlbGF0YW4iLCAiVGltdXIiLCAiQmFyYXQiLCAiVGVuZ2FoIiwgDQogICAgICAgICAgICAgICJVdGFyYSIsICJTZWxhdGFuIiwgIlRpbXVyIiwgIkJhcmF0IiwgIlRlbmdhaCIpLA0KICBKZW5pc19CYXJhbmcgPSBjKCJFbGVrdHJvbmlrIiwgIlBha2FpYW4iLCAiTWFrYW5hbiIsICJQZXJhbGF0YW4iLCAiRWxla3Ryb25payIsIA0KICAgICAgICAgICAgICAgICAgICJQYWthaWFuIiwgIk1ha2FuYW4iLCAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsIA0KICAgICAgICAgICAgICAgICAgICJQZXJhbGF0YW4iLCAiRWxla3Ryb25payIsICJQYWthaWFuIiwgIk1ha2FuYW4iLCAiUGVyYWxhdGFuIiksDQogIEp1bWxhaF9CYXJhbmcgPSBjKDIwMCwgMTUwLCAxODAsIDEyMCwgMjUwLCANCiAgICAgICAgICAgICAgICAgICAgMzAwLCAyMjAsIDE0MCwgMTgwLCAzNTAsIA0KICAgICAgICAgICAgICAgICAgICAxNzAsIDI1MCwgMTkwLCAxMzAsIDE4MCksDQogIFdha3R1X1BlbmdpcmltYW4gPSBjKDUsIDgsIDYsIDcsIDQsIA0KICAgICAgICAgICAgICAgICAgICAgICA5LCA3LCA1LCA2LCA4LCANCiAgICAgICAgICAgICAgICAgICAgICAgNCwgNiwgNywgNSwgNSksDQogIEJpYXlhX1Blcl9Vbml0ID0gYygxNTAwMCwgODAwMCwgMTAwMDAsIDEyMDAwLCAxNDAwMCwgDQogICAgICAgICAgICAgICAgICAgICA4NTAwLCA5NTAwLCAxMTAwMCwgMTQ1MDAsIDc4MDAsIA0KICAgICAgICAgICAgICAgICAgICAgMTIwMDAsIDE2MDAwLCA4MjAwLCAxMDUwMCwgMTE1MDApDQopDQoNCiMgTWVtYnVhdCBwbG90IDNEIG1lbmdndW5ha2FuIHBsb3RseQ0KcGxvdF8zZCA8LSBwbG90X2x5KA0KICBkYXRhLA0KICB4ID0gfkp1bWxhaF9CYXJhbmcsDQogIHkgPSB+V2FrdHVfUGVuZ2lyaW1hbiwNCiAgeiA9IH5CaWF5YV9QZXJfVW5pdCwNCiAgdHlwZSA9ICdzY2F0dGVyM2QnLA0KICBtb2RlID0gJ21hcmtlcnMnLA0KICBjb2xvciA9IH5XaWxheWFoLA0KICBzaXplID0gfkJpYXlhX1Blcl9Vbml0ICogMC4wMDAxLCAgIyBNZW1wZXJiZXNhciB1a3VyYW4gYnViYmxlDQogIG1hcmtlciA9IGxpc3QoDQogICAgc2l6ZSA9IDEwLA0KICAgIG9wYWNpdHkgPSAxDQogICksDQogIHRleHQgPSB+cGFzdGUoDQogICAgIldpbGF5YWg6IiwgV2lsYXlhaCwNCiAgICAiPGJyPldha3R1IFBlbmdpcmltYW46IiwgV2FrdHVfUGVuZ2lyaW1hbiwgImphbSIsDQogICAgIjxicj5KdW1sYWggQmFyYW5nOiIsIEp1bWxhaF9CYXJhbmcsICJ1bml0IiwNCiAgICAiPGJyPkJpYXlhIHBlciBVbml0OiBScCIsIEJpYXlhX1Blcl9Vbml0DQogICkNCikgJT4lIGxheW91dCgNCiAgdGl0bGUgPSAiQW5hbGlzaXMgM0QgRWZpc2llbnNpIFBlbmdpcmltYW4gQmFyYW5nIiwNCiAgc2NlbmUgPSBsaXN0KA0KICAgIHhheGlzID0gbGlzdCgNCiAgICAgIHRpdGxlID0gIkp1bWxhaCBCYXJhbmciLA0KICAgICAgdGl0bGVmb250ID0gbGlzdChzaXplID0gMTIpLA0KICAgICAgdGlja2ZvbnQgPSBsaXN0KHNpemUgPSAxMCkNCiAgICApLA0KICAgIHlheGlzID0gbGlzdCgNCiAgICAgIHRpdGxlID0gIlBlbmdpcmltYW4gKGphbSkiLA0KICAgICAgdGl0bGVmb250ID0gbGlzdChzaXplID0gMTIpLA0KICAgICAgdGlja2ZvbnQgPSBsaXN0KHNpemUgPSAxMCkNCiAgICApLA0KICAgIHpheGlzID0gbGlzdCgNCiAgICAgIHRpdGxlID0gIkJpYXlhIChScCkiLA0KICAgICAgdGl0bGVmb250ID0gbGlzdChzaXplID0gMTIpLA0KICAgICAgdGlja2ZvbnQgPSBsaXN0KHNpemUgPSAxMCkNCiAgICApDQogICksDQogIGxlZ2VuZCA9IGxpc3QoDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiV2lsYXlhaCIpLA0KICAgIGJnY29sb3IgPSAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpIiwNCiAgICBib3JkZXJjb2xvciA9ICJyZ2JhKDAsIDAsIDAsIDAuNSkiLA0KICAgIGJvcmRlcndpZHRoID0gMQ0KICApDQopDQoNCnBsb3RfM2QNCmBgYA0KDQotLS0NCg0KIyMjIFRlbnR1a2FuIHdpbGF5YWggbWFuYSB5YW5nIG1lbWlsaWtpIGVmaXNpZW5zaSBwZW5naXJpbWFuIHRlcmVuZGFoIGJlcmRhc2Fya2FuIGJpYXlhIHBlciB1bml0IGRhbiB3YWt0dSBwZW5naXJpbWFuIQ0KDQpKYXdhYjoNCg0KVW50dWsgbWVuZW50dWthbiB3aWxheWFoIGRlbmdhbiBlZmlzaWVuc2kgcGVuZ2lyaW1hbiB0ZXJlbmRhaCBiZXJkYXNhcmthbiBiaWF5YSBwZXIgdW5pdCBkYW4gd2FrdHUgcGVuZ2lyaW1hbiwga2l0YSBha2FuIG1lbmdoaXR1bmcgcmFzaW8gZWZpc2llbnNpIHVudHVrIHNldGlhcCB3aWxheWFoLiBSYXNpbyBlZmlzaWVuc2kgZGloaXR1bmcgZGVuZ2FuIG1lbWJhZ2kgYmlheWEgcGVyIHVuaXQgZGVuZ2FuIHdha3R1IHBlbmdpcmltYW4uIFNlbWFraW4gYmVzYXIgcmFzaW8gaW5pLCBzZW1ha2luIHJlbmRhaCBlZmlzaWVuc2kgcGVuZ2lyaW1hbm55YSwga2FyZW5hIGJpYXlhIGxlYmloIHRpbmdnaSBkaWJhbmRpbmdrYW4gZGVuZ2FuIHdha3R1IHlhbmcgZGlidXR1aGthbi4NCg0KKipSdW11cyBSYXNpbyBFZmlzaWVuc2k6KioNClxbDQpcdGV4dHtSYXNpbyBFZmlzaWVuc2l9ID0gXGZyYWN7XHRleHR7QmlheWEgcGVyIFVuaXR9fXtcdGV4dHtXYWt0dSBQZW5naXJpbWFufX0NClxdDQoNCioqRGF0YSB5YW5nIGRpZ3VuYWthbjoqKg0KDQp8IFdpbGF5YWggfCBCaWF5YSBwZXIgVW5pdCAoUnApIHwgV2FrdHUgUGVuZ2lyaW1hbiAoamFtKSB8DQp8LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IFV0YXJhICAgfCAxNSwwMDAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgICAgICAgICB8DQp8IFNlbGF0YW4gfCA4LDAwMCAgICAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgICAgICAgICB8DQp8IFRpbXVyICAgfCAxMCwwMDAgICAgICAgICAgICAgIHwgNiAgICAgICAgICAgICAgICAgICAgICB8DQp8IEJhcmF0ICAgfCAxMiwwMDAgICAgICAgICAgICAgIHwgNyAgICAgICAgICAgICAgICAgICAgICB8DQp8IFRlbmdhaCAgfCAxNCwwMDAgICAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgICAgICB8DQp8IFV0YXJhICAgfCA4LDUwMCAgICAgICAgICAgICAgIHwgOSAgICAgICAgICAgICAgICAgICAgICB8DQp8IFNlbGF0YW4gfCA5LDUwMCAgICAgICAgICAgICAgIHwgNyAgICAgICAgICAgICAgICAgICAgICB8DQp8IFRpbXVyICAgfCAxMSwwMDAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgICAgICAgICB8DQp8IEJhcmF0ICAgfCAxNCw1MDAgICAgICAgICAgICAgIHwgNiAgICAgICAgICAgICAgICAgICAgICB8DQp8IFRlbmdhaCAgfCA3LDgwMCAgICAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgICAgICAgICB8DQp8IFV0YXJhICAgfCAxMiwwMDAgICAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgICAgICB8DQp8IFNlbGF0YW4gfCAxNiwwMDAgICAgICAgICAgICAgIHwgNiAgICAgICAgICAgICAgICAgICAgICB8DQp8IFRpbXVyICAgfCA4LDIwMCAgICAgICAgICAgICAgIHwgNyAgICAgICAgICAgICAgICAgICAgICB8DQp8IEJhcmF0ICAgfCAxMCw1MDAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgICAgICAgICB8DQp8IFRlbmdhaCAgfCAxMSw1MDAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgICAgICAgICB8DQoNCioqTGFuZ2thaC1MYW5na2FoKioNCg0KKipBLiBVbnR1ayBzZXRpYXAgYmFyaXMsIGtpdGEgYWthbiBtZW5naGl0dW5nIHJhc2lvIEJpYXlhIHBlciBVbml0IGRpYmFnaSBkZW5nYW4gV2FrdHUgUGVuZ2lyaW1hbioqDQoNCjEuICoqV2lsYXlhaCBVdGFyYSAoQmFyaXMgMSkqKjoNCiAgIFxbDQogICBcdGV4dHtSYXNpbyBFZmlzaWVuc2l9ID0gXGZyYWN7XHRleHR7QmlheWEgcGVyIFVuaXR9fXtcdGV4dHtXYWt0dSBQZW5naXJpbWFufX09XGZyYWN7MTUsMDAwfXs1fSA9IDMsMDAwDQogICBcXQ0KDQoyLiAqKldpbGF5YWggU2VsYXRhbiAoQmFyaXMgMikqKjoNCiAgIFxbDQogICBcdGV4dHtSYXNpbyBFZmlzaWVuc2l9ID0gXGZyYWN7XHRleHR7QmlheWEgcGVyIFVuaXR9fXtcdGV4dHtXYWt0dSBQZW5naXJpbWFufX09IFxmcmFjezgsMDAwfXs4fSA9IDEsMDAwDQogICBcXQ0KDQozLiAqKldpbGF5YWggVGltdXIgKEJhcmlzIDMpKio6DQogICBcWw0KICAgXHRleHR7UmFzaW8gRWZpc2llbnNpfSA9IFxmcmFje1x0ZXh0e0JpYXlhIHBlciBVbml0fX17XHRleHR7V2FrdHUgUGVuZ2lyaW1hbn19PSBcZnJhY3sxMCwwMDB9ezZ9IFxhcHByb3ggMSw2NjcNCiAgIFxdDQoNCjQuICoqV2lsYXlhaCBCYXJhdCAoQmFyaXMgNCkqKjoNCiAgIFxbDQogICBcdGV4dHtSYXNpbyBFZmlzaWVuc2l9ID0gXGZyYWN7XHRleHR7QmlheWEgcGVyIFVuaXR9fXtcdGV4dHtXYWt0dSBQZW5naXJpbWFufX09IFxmcmFjezEyLDAwMH17N30gXGFwcHJveCAxLDcxNA0KICAgXF0NCg0KNS4gKipXaWxheWFoIFRlbmdhaCAoQmFyaXMgNSkqKjoNCiAgIFxbDQogICBcdGV4dHtSYXNpbyBFZmlzaWVuc2l9ID0gXGZyYWN7XHRleHR7QmlheWEgcGVyIFVuaXR9fXtcdGV4dHtXYWt0dSBQZW5naXJpbWFufX09IFxmcmFjezE0LDAwMH17NH0gPSAzLDUwMA0KICAgXF0NCg0KNi4gKipXaWxheWFoIFV0YXJhIChCYXJpcyA2KSoqOg0KICAgXFsNCiAgIFx0ZXh0e1Jhc2lvIEVmaXNpZW5zaX0gPSBcZnJhY3tcdGV4dHtCaWF5YSBwZXIgVW5pdH19e1x0ZXh0e1dha3R1IFBlbmdpcmltYW59fT0gXGZyYWN7OCw1MDB9ezl9IFxhcHByb3ggOTQ0LjQ0DQogICBcXQ0KDQo3LiAqKldpbGF5YWggU2VsYXRhbiAoQmFyaXMgNykqKjoNCiAgIFxbDQogICBcdGV4dHtSYXNpbyBFZmlzaWVuc2l9ID0gXGZyYWN7XHRleHR7QmlheWEgcGVyIFVuaXR9fXtcdGV4dHtXYWt0dSBQZW5naXJpbWFufX09IFxmcmFjezksNTAwfXs3fSBcYXBwcm94IDEsMzU3LjE0DQogICBcXQ0KDQo4LiAqKldpbGF5YWggVGltdXIgKEJhcmlzIDgpKio6DQogICBcWw0KICAgXHRleHR7UmFzaW8gRWZpc2llbnNpfSA9IFxmcmFje1x0ZXh0e0JpYXlhIHBlciBVbml0fX17XHRleHR7V2FrdHUgUGVuZ2lyaW1hbn19PSBcZnJhY3sxMSwwMDB9ezV9ID0gMiwyMDANCiAgIFxdDQoNCjkuICoqV2lsYXlhaCBCYXJhdCAoQmFyaXMgOSkqKjoNCiAgIFxbDQogICBcdGV4dHtSYXNpbyBFZmlzaWVuc2l9ID0gXGZyYWN7XHRleHR7QmlheWEgcGVyIFVuaXR9fXtcdGV4dHtXYWt0dSBQZW5naXJpbWFufX09IFxmcmFjezE0LDUwMH17Nn0gXGFwcHJveCAyLDQxNw0KICAgXF0NCg0KMTAuICoqV2lsYXlhaCBUZW5nYWggKEJhcmlzIDEwKSoqOg0KICAgIFxbDQogICAgXHRleHR7UmFzaW8gRWZpc2llbnNpfSA9IFxmcmFje1x0ZXh0e0JpYXlhIHBlciBVbml0fX17XHRleHR7V2FrdHUgUGVuZ2lyaW1hbn19PSBcZnJhY3s3LDgwMH17OH0gPSA5NzUNCiAgICBcXQ0KDQoxMS4gKipXaWxheWFoIFV0YXJhIChCYXJpcyAxMSkqKjoNCiAgICBcWw0KICAgIFx0ZXh0e1Jhc2lvIEVmaXNpZW5zaX0gPSBcZnJhY3tcdGV4dHtCaWF5YSBwZXIgVW5pdH19e1x0ZXh0e1dha3R1IFBlbmdpcmltYW59fT0gXGZyYWN7MTIsMDAwfXs0fSA9IDMsMDAwDQogICAgXF0NCg0KMTIuICoqV2lsYXlhaCBTZWxhdGFuIChCYXJpcyAxMikqKjoNCiAgICBcWw0KICAgIFx0ZXh0e1Jhc2lvIEVmaXNpZW5zaX0gPSBcZnJhY3tcdGV4dHtCaWF5YSBwZXIgVW5pdH19e1x0ZXh0e1dha3R1IFBlbmdpcmltYW59fT0gXGZyYWN7MTYsMDAwfXs2fSBcYXBwcm94IDIsNjY3DQogICAgXF0NCg0KMTMuICoqV2lsYXlhaCBUaW11ciAoQmFyaXMgMTMpKio6DQogICAgXFsNCiAgICBcdGV4dHtSYXNpbyBFZmlzaWVuc2l9ID0gXGZyYWN7XHRleHR7QmlheWEgcGVyIFVuaXR9fXtcdGV4dHtXYWt0dSBQZW5naXJpbWFufX09IFxmcmFjezgsMjAwfXs3fSBcYXBwcm94IDEsMTcxLjQzDQogICAgXF0NCg0KMTQuICoqV2lsYXlhaCBCYXJhdCAoQmFyaXMgMTQpKio6DQogICAgXFsNCiAgICBcdGV4dHtSYXNpbyBFZmlzaWVuc2l9ID0gXGZyYWN7XHRleHR7QmlheWEgcGVyIFVuaXR9fXtcdGV4dHtXYWt0dSBQZW5naXJpbWFufX09IFxmcmFjezEwLDUwMH17NX0gPSAyLDEwMA0KICAgIFxdDQoNCjE1LiAqKldpbGF5YWggVGVuZ2FoIChCYXJpcyAxNSkqKjoNCiAgICBcWw0KICAgIFx0ZXh0e1Jhc2lvIEVmaXNpZW5zaX0gPSBcZnJhY3tcdGV4dHtCaWF5YSBwZXIgVW5pdH19e1x0ZXh0e1dha3R1IFBlbmdpcmltYW59fT0gXGZyYWN7MTEsNTAwfXs1fSA9IDIsMzAwDQogICAgXF0NCg0KKipIYXNpbCBSYXNpbyBFZmlzaWVuc2k6KioNCg0KfCBXaWxheWFoIHwgUmFzaW8gRWZpc2llbnNpIHwNCnwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfA0KfCBVdGFyYSAoMSkgICB8IDMsMDAwICAgICAgICAgICAgfA0KfCBTZWxhdGFuICgyKSB8IDEsMDAwICAgICAgICAgICAgfA0KfCBUaW11ciAoMykgICB8IDEsNjY3ICAgICAgICAgICAgfA0KfCBCYXJhdCAoNCkgICB8IDEsNzE0ICAgICAgICAgICAgfA0KfCBUZW5nYWggKDUpICB8IDMsNTAwICAgICAgICAgICAgfA0KfCBVdGFyYSAoNikgICB8IDk0NC40NCAgICAgICAgICAgfA0KfCBTZWxhdGFuICg3KSB8IDEsMzU3LjE0ICAgICAgICAgfA0KfCBUaW11ciAoOCkgICB8IDIsMjAwICAgICAgICAgICAgfA0KfCBCYXJhdCAoOSkgICB8IDIsNDE3ICAgICAgICAgICAgfA0KfCBUZW5nYWggKDEwKSB8IDk3NSAgICAgICAgICAgICAgfA0KfCBVdGFyYSAoMTEpICB8IDMsMDAwICAgICAgICAgICAgfA0KfCBTZWxhdGFuICgxMil8IDIsNjY3ICAgICAgICAgICAgfA0KfCBUaW11ciAoMTMpICB8IDEsMTcxLjQzICAgICAgICAgfA0KfCBCYXJhdCAoMTQpICB8IDIsMTAwICAgICAgICAgICAgfA0KfCBUZW5nYWggKDE1KSB8IDIsMzAwICAgICAgICAgICAgfA0KDQoNCioqQi4gUmF0YS1yYXRhIFJhc2lvIEVmaXNpZW5zaSBwZXIgV2lsYXlhaDoqKg0KDQoxLiAqKldpbGF5YWggVXRhcmEqKjoNCiAgIC0gUmFzaW8gZWZpc2llbnNpOiAzLDAwMCwgOTQ0LjQ0LCAzLDAwMA0KICAgLSBSYXRhLXJhdGE6DQogICBcWw0KICAgXHRleHR7UmF0YS1yYXRhIFV0YXJhfSA9IFxmcmFjezMsMDAwICsgOTQ0LjQ0ICsgMywwMDB9ezN9ID0gXGZyYWN7Niw5NDQuNDR9ezN9IFxhcHByb3ggMiwzMTQuODENCiAgIFxdDQoNCjIuICoqV2lsYXlhaCBTZWxhdGFuKio6DQogICAtIFJhc2lvIGVmaXNpZW5zaTogMSwwMDAsIDEsMzU3LjE0LCAyLDY2Nw0KICAgLSBSYXRhLXJhdGE6DQogICBcWw0KICAgXHRleHR7UmF0YS1yYXRhIFNlbGF0YW59ID0gXGZyYWN7MSwwMDAgKyAxLDM1Ny4xNCArIDIsNjY3fXszfSA9IFxmcmFjezUsMDI0LjE0fXszfSBcYXBwcm94IDEsNjc0LjcxDQogICBcXQ0KDQozLiAqKldpbGF5YWggVGltdXIqKjoNCiAgIC0gUmFzaW8gZWZpc2llbnNpOiAxLDY2NywgMiwyMDAsIDEsMTcxLjQzDQogICAtIFJhdGEtcmF0YToNCiAgIFxbDQogICBcdGV4dHtSYXRhLXJhdGEgVGltdXJ9ID0gXGZyYWN7MSw2NjcgKyAyLDIwMCArIDEsMTcxLjQzfXszfSA9IFxmcmFjezUsMDM4LjQzfXszfSBcYXBwcm94IDEsNjc5LjQ4DQogICBcXQ0KDQo0LiAqKldpbGF5YWggQmFyYXQqKjoNCiAgIC0gUmFzaW8gZWZpc2llbnNpOiAxLDcxNCwgMiw0MTcsIDIsMTAwDQogICAtIFJhdGEtcmF0YToNCiAgIFxbDQogICBcdGV4dHtSYXRhLXJhdGEgQmFyYXR9ID0gXGZyYWN7MSw3MTQgKyAyLDQxNyArIDIsMTAwfXszfSA9IFxmcmFjezYsMjMxfXszfSA9IDIsMDc3DQogICBcXQ0KDQo1LiAqKldpbGF5YWggVGVuZ2FoKio6DQogICAtIFJhc2lvIGVmaXNpZW5zaTogMyw1MDAsIDk3NSwgMiwzMDANCiAgIC0gUmF0YS1yYXRhOg0KICAgXFsNCiAgIFx0ZXh0e1JhdGEtcmF0YSBUZW5nYWh9ID0gXGZyYWN7Myw1MDAgKyA5NzUgKyAyLDMwMH17M30gPSBcZnJhY3s2LDc3NX17M30gXGFwcHJveCAyLDI1OC4zMw0KICAgXF0NCg0KKipIYXNpbCBSYXRhLXJhdGEgUmFzaW8gRWZpc2llbnNpIHBlciBXaWxheWFoOioqDQoNCnwgV2lsYXlhaCB8IFJhdGEtcmF0YSBSYXNpbyBFZmlzaWVuc2kgfA0KfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IFV0YXJhICAgfCAyLDMxNC44MSAgICAgICAgICAgICAgICAgIHwNCnwgU2VsYXRhbiB8IDEsNjc0LjcxICAgICAgICAgICAgICAgICAgfA0KfCBUaW11ciAgIHwgMSw2NzkuNDggICAgICAgICAgICAgICAgICB8DQp8IEJhcmF0ICAgfCAyLDA3Ny4wMCAgICAgICAgICAgICAgICAgIHwNCnwgVGVuZ2FoICB8IDIsMjU4LjMzICAgICAgICAgICAgICAgICAgfA0KDQojIyMjIEtlc2ltcHVsYW46DQoNCldpbGF5YWggU2VsYXRhbiBtZW1pbGlraSBlZmlzaWVuc2kgcGVuZ2lyaW1hbiB0ZXJlbmRhaCBiZXJkYXNhcmthbiBiaWF5YSBwZXIgdW5pdCBkYW4gd2FrdHUgcGVuZ2lyaW1hbiBrYXJlbmEgcmFzaW8gZWZpc2llbnNpbnlhIHlhbmcgbGViaWggcmVuZGFoIGRpYmFuZGluZ2thbiB3aWxheWFoIGxhaW5ueWEuIERpIHdpbGF5YWggU2VsYXRhbiwgcmFzaW8gZWZpc2llbnNpIHJhdGEtcmF0YSBhZGFsYWggMSw2NzQuNzEsIGxlYmloIGtlY2lsIGRhcmkgd2lsYXlhaCBsYWluIHNlcGVydGkgVGVuZ2FoICgyLDI1OC4zMykgZGFuIFV0YXJhICgyLDMxNC44MSksIHlhbmcgbWVudW5qdWtrYW4gYmlheWEgcGVyIHVuaXQgeWFuZyBsZWJpaCB0aW5nZ2kgYXRhdSB3YWt0dSBwZW5naXJpbWFuIHlhbmcgbGViaWggbGFtYS4gV2lsYXlhaCBTZWxhdGFuIG1lbWlsaWtpIGJpYXlhIHBlciB1bml0IHlhbmcgbGViaWggcmVuZGFoIGRhbiB3YWt0dSBwZW5naXJpbWFuIHlhbmcgcmVsYXRpZiB3YWphciwgbWVuY2lwdGFrYW4ga2VzZWltYmFuZ2FuIGFudGFyYSBiaWF5YSBkYW4gd2FrdHUuIERlbmdhbiB3YWt0dSBwZW5naXJpbWFuIHlhbmcgZWZpc2llbiwgd2lsYXlhaCBpbmkgbWFtcHUgbWVuZ29wdGltYWxrYW4gcGVuZ2VsdWFyYW4gdGFucGEgbWVuZ29yYmFua2FuIHdha3R1LCB5YW5nIG1lbWJ1YXRueWEgbGViaWggZWZpc2llbiBkYWxhbSBwZW5naXJpbWFuIGJhcmFuZyBzZWNhcmEga2VzZWx1cnVoYW4uDQoNCi0tLQ0KDQojIyBSZWtvbWVuZGFzaSBPcGVyYXNpb25hbDoNCiMjIyBCZXJkYXNhcmthbiBoYXNpbCBhbmFsaXNpcywgd2lsYXlhaCBtYW5hIHlhbmcgbWVtZXJsdWthbiBwZXJoYXRpYW4ga2h1c3VzIHVudHVrIG1lbmluZ2thdGthbiBlZmlzaWVuc2kgcGVuZ2lyaW1hbj8NCg0KSmF3YWI6DQoNCkJlcmRhc2Fya2FuIGhhc2lsIGFuYWxpc2lzLCAqKldpbGF5YWggVGVuZ2FoKiogbWVtZXJsdWthbiBwZXJoYXRpYW4ga2h1c3VzIHVudHVrIG1lbmluZ2thdGthbiBlZmlzaWVuc2kgcGVuZ2lyaW1hbi4gSGFsIGluaSBkaXNlYmFia2FuIG9sZWggcmFzaW8gZWZpc2llbnNpIHlhbmcgdGVydGluZ2dpIGRpIGFudGFyYSB3aWxheWFoIGxhaW5ueWEsIHlhaXR1ICoqMiwyNTguMzMqKi4gUmFzaW8gZWZpc2llbnNpIHlhbmcgdGluZ2dpIG1lbnVuanVra2FuIGJhaHdhIHdpbGF5YWggaW5pIG1lbmdlbHVhcmthbiBiaWF5YSBwZXIgdW5pdCB5YW5nIGxlYmloIHRpbmdnaSBkaWJhbmRpbmdrYW4gZGVuZ2FuIHdha3R1IHBlbmdpcmltYW4geWFuZyByZWxhdGlmIGxlYmloIHBlbmRlay4gTWVza2lwdW4gd2FrdHUgcGVuZ2lyaW1hbiBkaSB3aWxheWFoIGluaSB0aWRhayB0ZXJsYWx1IGxhbWEsIHRpbmdnaW55YSBiaWF5YSBwZXIgdW5pdCBtZW5naW5kaWthc2lrYW4gYWRhbnlhIHBlbHVhbmcgdW50dWsgbWVuZ3VyYW5naSBiaWF5YSBwZW5naXJpbWFuLiBPbGVoIGthcmVuYSBpdHUsIHVudHVrIG1lbmluZ2thdGthbiBlZmlzaWVuc2ksIHdpbGF5YWggVGVuZ2FoIHBlcmx1IGZva3VzIHBhZGEgcGVuZ3VyYW5nYW4gYmlheWEgcGVyIHVuaXQgZGFuIG9wdGltYWxpc2FzaSBwcm9zZXMgcGVuZ2lyaW1hbiBhZ2FyIGxlYmloIGVmaXNpZW4gZGFsYW0gaGFsIGJpYXlhIGRhbiB3YWt0dS4NCg0KLS0tDQoNCiMjIyBBcGEgcmVrb21lbmRhc2kgdW50dWsgbWVuZ3VyYW5naSBiaWF5YSBkYW4gd2FrdHUgcGVuZ2lyaW1hbiBkaSB3aWxheWFoIHRlcnNlYnV0Pw0KDQpKYXdhYjogDQoNCjEuICoqT3B0aW1hbGthbiBSdXRlIFBlbmdpcmltYW4qKjogR3VuYWthbiB0ZWtub2xvZ2kgR1BTIGRhbiBwZXJhbmdrYXQgbHVuYWsgcGVyZW5jYW5hYW4gcnV0ZSB1bnR1ayBtZW1pbGloIGphbHVyIHlhbmcgbGViaWggZWZpc2llbiBkYW4gbWVuZ2hpbmRhcmkga2VtYWNldGFuLg0KMi4gKipOZWdvc2lhc2kgVGFyaWYgUGVuZ2lyaW1hbioqOiBUYXdhciB0YXJpZiBsZWJpaCBrb21wZXRpdGlmIGRlbmdhbiBwZW55ZWRpYSBqYXNhIGxvZ2lzdGlrIGF0YXUgamFsaW4ga29udHJhayBqYW5na2EgcGFuamFuZyB1bnR1ayBkaXNrb24uDQozLiAqKlBlbmdlbG9sYWFuIFBlcnNlZGlhYW4qKjogS2Vsb2xhIHBlcnNlZGlhYW4gc2VjYXJhIHJlYWwtdGltZSB1bnR1ayBtZW5naGluZGFyaSBwZW5naXJpbWFuIG1lbmRlc2FrIHlhbmcgbWFoYWwuDQo0LiAqKkd1bmFrYW4gS2VuZGFyYWFuIFRlcGF0IFVrdXJhbioqOiBQYXN0aWthbiBrZW5kYXJhYW4gZGlndW5ha2FuIHNlY2FyYSBtYWtzaW1hbCB1bnR1ayBtZW5ndXJhbmdpIHBlbWJvcm9zYW4gYmlheWEgYmFoYW4gYmFrYXIuDQo1LiAqKkVmaXNpZW5zaWthbiBQcm9zZXMgUGVuZ2lyaW1hbioqOiBMYXRpaCBwZW5nZW11ZGkgdW50dWsgbWVuZ3VyYW5naSBwZW1ib3Jvc2FuIGJhaGFuIGJha2FyIGRhbiBwZXJjZXBhdCBwZW1yb3Nlc2FuIGJhcmFuZyBkaSBndWRhbmcuDQo2LiAqKlBlbGFjYWthbiBQZW5naXJpbWFuIFJlYWwtVGltZSoqOiBHdW5ha2FuIHNpc3RlbSBwZWxhY2FrYW4gdW50dWsgbWVuZ2lkZW50aWZpa2FzaSBtYXNhbGFoIGRhbiBtZW5naGluZGFyaSBrZXRlcmxhbWJhdGFuLg0KNy4gKipLb29yZGluYXNpIGRhbiBLb2xhYm9yYXNpKio6IFRpbmdrYXRrYW4ga29tdW5pa2FzaSBkZW5nYW4gcGVtYXNvayBkYW4gcGVuZ2lyaW0gc2VydGEga29uc29saWRhc2kgcGVuZ2lyaW1hbiB1bnR1ayBtZW5ndXJhbmdpIGJpYXlhLg0KDQoNCi0tLQ0KDQojIyBLaW5lcmphIEJlcmRhc2Fya2FuIEplbmlzIEJhcmFuZzoNCkFuYWxpc2lzIGtpbmVyamEgcGVuZ2lyaW1hbiBiZXJkYXNhcmthbiBqZW5pcyBiYXJhbmcgZGFuIHdpbGF5YWguIE1hbmEgeWFuZyBtZW1pbGlraSB3YWt0dSBwZW5naXJpbWFuIGxlYmloIGNlcGF0IGRhbiBiaWF5YSBwZXIgdW5pdCBsZWJpaCByZW5kYWg/DQoNCkphd2FiOg0KDQpVbnR1ayBtZW5nYW5hbGlzaXMga2luZXJqYSBwZW5naXJpbWFuIGJlcmRhc2Fya2FuIGplbmlzIGJhcmFuZyBkYW4gd2lsYXlhaCwga2l0YSBwZXJsdSBtZWxpaGF0IGR1YSBmYWt0b3IgdXRhbWE6IHdha3R1IHBlbmdpcmltYW4gZGFuIGJpYXlhIHBlciB1bml0LiBCZXJkYXNhcmthbiBkYXRhIHlhbmcgYWRhLCBraXRhIGRhcGF0IG1lbnlpbXB1bGthbiB3aWxheWFoIGRhbiBqZW5pcyBiYXJhbmcgbWFuYSB5YW5nIGxlYmloIGVmaXNpZW4gZGFsYW0gaGFsIHdha3R1IGRhbiBiaWF5YS4NCg0KKipMYW5na2FoLWxhbmdrYWggQW5hbGlzaXM6KioNCg0KMS4gKipXYWt0dSBQZW5naXJpbWFuKio6IE1lbWJhbmRpbmdrYW4gd2FrdHUgcGVuZ2lyaW1hbiBhbnRhciB3aWxheWFoIHVudHVrIGplbmlzIGJhcmFuZyB0ZXJ0ZW50dS4NCg0KMi4gKipCaWF5YSBwZXIgVW5pdCoqOiBNZW1iYW5kaW5na2FuIGJpYXlhIHBlciB1bml0IGFudGFyIHdpbGF5YWggZGFuIGplbmlzIGJhcmFuZy4NCg0KKipBbmFsaXNpcyBCZXJkYXNhcmthbiBEYXRhOioqDQoNCjEuICoqV2lsYXlhaCBkZW5nYW4gV2FrdHUgUGVuZ2lyaW1hbiBMZWJpaCBDZXBhdCoqOg0KICAgLSBXaWxheWFoIFNlbGF0YW4gbWVtaWxpa2kgd2FrdHUgcGVuZ2lyaW1hbiB5YW5nIHJlbGF0aWYgbGViaWggY2VwYXQgZGFuIHN0YWJpbCBkaWJhbmRpbmdrYW4gd2lsYXlhaCBsYWluLiBNaXNhbG55YSwgd2FrdHUgcGVuZ2lyaW1hbiB1bnR1ayBqZW5pcyBiYXJhbmcgZGkgd2lsYXlhaCBpbmkgY2VuZGVydW5nIGxlYmloIHNpbmdrYXQsIHlhbmcgYmVya29udHJpYnVzaSBwYWRhIGVmaXNpZW5zaSBwZW5naXJpbWFuLg0KDQoyLiAqKldpbGF5YWggZGVuZ2FuIEJpYXlhIFBlciBVbml0IExlYmloIFJlbmRhaCoqOg0KICAgLSBXaWxheWFoIFNlbGF0YW4ganVnYSBtZW1pbGlraSBiaWF5YSBwZXIgdW5pdCB5YW5nIGxlYmloIHJlbmRhaCBkaWJhbmRpbmdrYW4gZGVuZ2FuIHdpbGF5YWggbGFpbm55YS4gSGFsIGluaSBtZW51bmp1a2thbiBiYWh3YSB3aWxheWFoIGluaSBsZWJpaCBlZmlzaWVuIGRhbGFtIGhhbCBwZW5nZWx1YXJhbiBwZW5naXJpbWFuIHBlciB1bml0IGJhcmFuZywgeWFuZyBtZW51cnVua2FuIGJpYXlhIHNlY2FyYSBrZXNlbHVydWhhbi4NCg0KIyMjIEtlc2ltcHVsYW46DQotICoqV2lsYXlhaCBTZWxhdGFuKiogbWVudW5qdWtrYW4ga2luZXJqYSBwZW5naXJpbWFuIHRlcmJhaWssIGthcmVuYSBtZW1pbGlraSB3YWt0dSBwZW5naXJpbWFuIHlhbmcgbGViaWggY2VwYXQgZGFuIGJpYXlhIHBlciB1bml0IHlhbmcgbGViaWggcmVuZGFoLCBtZW5qYWRpa2FubnlhIHdpbGF5YWggeWFuZyBsZWJpaCBlZmlzaWVuIGRhbGFtIGhhbCBwZW5naXJpbWFuIGJhcmFuZy4NCi0gV2lsYXlhaCBsYWlubnlhLCBzZXBlcnRpICoqV2lsYXlhaCBUZW5nYWgqKiwgbXVuZ2tpbiBtZW1pbGlraSB3YWt0dSBwZW5naXJpbWFuIHlhbmcgbGViaWggbGFtYSBkYW4gYmlheWEgcGVyIHVuaXQgeWFuZyBsZWJpaCB0aW5nZ2ksIHNlaGluZ2dhIHBlcmx1IHBlcmhhdGlhbiBraHVzdXMgdW50dWsgbWVuZ29wdGltYWxrYW4gZWZpc2llbnNpIHBlbmdpcmltYW4gZGkgc2FuYS4NCg0KSmFkaSwgamlrYSB0dWp1YW4gdXRhbWFueWEgYWRhbGFoIG1lbmd1cmFuZ2kgd2FrdHUgcGVuZ2lyaW1hbiBkYW4gYmlheWEgcGVyIHVuaXQsIFdpbGF5YWggU2VsYXRhbiBhZGFsYWggeWFuZyBwYWxpbmcgZWZpc2llbiBkaWJhbmRpbmdrYW4gZGVuZ2FuIHdpbGF5YWggbGFpbm55YS4NCg0KLS0tDQoNCi0tLQ0KDQojIFJlZmVyZW5zaQ0KDQoxLiAqKlByYW5vdG8sIFMuKiogKDIwMTcpLiAqQW5hbGlzaXMgU3RyYXRlZ2kgUGVuaW5na2F0YW4gUGVuanVhbGFuKi4gSnVybmFsIEJpc25pcyBTdHJhdGVnaSwgMigxKSwgMS0xNi4gUmV0cmlldmVkIGZyb20gW2h0dHBzOi8vZWpvdXJuYWwudW5kaXAuYWMuaWQvaW5kZXgucGhwL2picy9hcnRpY2xlL3ZpZXcvMTQ0NjldKGh0dHBzOi8vZWpvdXJuYWwudW5kaXAuYWMuaWQvaW5kZXgucGhwL2picy9hcnRpY2xlL3ZpZXcvMTQ0NjkpLg0KDQoyLiAqKlN1Z2l5YW50aSwgTC4qKiAoMjAyMikuICpTdHJhdGVnaSBQZW1hc2FyYW4gRGlnaXRhbCB1bnR1ayBNZW5pbmdrYXRrYW4gUGVuanVhbGFuIFVNS00qLiBKdXJuYWwgQmltYS4gUmV0cmlldmVkIGZyb20gW2h0dHBzOi8vanVybmFsYmltYS5pZF0oaHR0cHM6Ly9qdXJuYWxiaW1hLmlkKS4NCg0KMy4gQWduZXppYSwgUy4gVi4sICYgV2luYXJubywgVy4gKDIwMjIpLiAqUnV0ZSBwZXJqYWxhbmFuIGRhbiBiaWF5YSBvbmdrb3M6IEFsZ29yaXRtYSBQcm9ncmFtIERpbmFtaXMgZGVuZ2FuIFBlbmRla2F0YW4gRm9yd2FyZCBSZWN1cnNpdmUgRXF1YXRpb24qLiBQcm9jZWVkaW5nIE1lcmN1IEJ1YW5hIENvbmZlcmVuY2Ugb24gSW5kdXN0cmlhbCBFbmdpbmVlcmluZywgNiwgMzk2LTQwNS4gDQoNCjQuIFplaW4sIE0uIE4uLCBXaWJvd28sIFAuLCBIaWRheWF0dWxsYWgsIEkuLCBQYWhkaWFuLCBNLiBGLiwgUmFtYWRoYW4sIEEuLCBHdWZyb24sIE4uIFMuIEEuLCAmIFJpbmdvLCBFLiBFLiBTLiAoMjAyMikuICpKYWx1ciBwZW5naXJpbWFuIGRhbiBiaWF5YSBwZW5naXJpbWFuOiBQcm9ncmFtIERpbmFtaXMgZGFsYW0gcGVuZ2lyaW1hbiBiYXJhbmcqLiBQcm9jZWVkaW5nIE1lcmN1IEJ1YW5hIENvbmZlcmVuY2Ugb24gSW5kdXN0cmlhbCBFbmdpbmVlcmluZywgNiwgMzk2LTQwNS4NCg0KNS4gS3VybmlhLCBBLiwgJiBFcm5hd2F0aSwgRC4gKDIwMjEpLiAqT3B0aW1hc2kgcnV0ZSBkaXN0cmlidXNpIG1lbmdndW5ha2FuIGFsZ29yaXRtYSBEaWZmZXJlbnRpYWwgRXZvbHV0aW9uIHVudHVrIHBlbmdoZW1hdGFuIGphcmFrIGRhbiB3YWt0dSB0ZW1wdWgqLiBKdXJuYWwgVGVrbmlrIEluZHVzdHJpLCAyMygyKSwgMTE0LTEzMC4NCg==