Tugas Individu

Ukuran Penyebaran Data

Foto Diri

Latihan 1

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

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

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

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

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

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

1.1 Menghitung rata-rata untuk masing-masing Cabang.

Rumus Mean (Rata-rata):

\[ {Mean} = \frac{\sum x}{n} \]

Dimana:

(\(ΣX\))=Jumlah dari semua nilai data

(\(n\))= Jumlah data


Mean (Rata-rata) untuk Cabang A:

Data Cabang A sebagai berikut: 50, 55, 60, 65, 70

• Menjumlahkan semua nilai (\(ΣX\)):

\[ \sum X =50+ 55+ 60+ 65+ 70=300 \]

• Jumlah data (\(n\)): 5

\[ {Mean(Cabang A)}= \frac{300}{5} = 60 \]


Mean (Rata-rata) untuk Cabang B:

Data Cabang B sebagai berikut: 40, 50, 60, 70, 80

• Menjumlahkan semua nilai (\(ΣX\)):

\[ \sum X =40+ 50+ 60+ 70+ 80=300 \]

• Jumlah data (\(n\)): 5

\[ {Mean(Cabang B)}= \frac{300}{5} = 60 \]


Mean (Rata-rata) untuk Cabang C:

Data Cabang C sebagai berikut: 30, 30, 35, 40, 45

• Menjumlahkan semua nilai (\(ΣX\)):

\[ \sum X =30+ 30+ 35+ 40+ 45=180 \] • Jumlah data (\(n\)): 5

\[ {Mean(Cabang C)}= \frac{180}{5} = 36 \]


Mean (Rata-rata) untuk Cabang D:

Data Cabang D sebagai berikut: 70, 75, 80, 85, 90

• Menjumlahkan semua nilai (\(ΣX\)):

\[ \sum X =70+ 75+ 80+ 85+ 90=400 \] • Jumlah data (\(n\)): 5

\[ {Mean(Cabang D)}= \frac{400}{5} = 80 \]

1.2 Menghitung median untuk masing-masing Cabang .

Rumus Posisi Median (Nilai Tengah):

Untuk Menentukan nilai median pada suatu data adapun langkah yang harus di kerjakan yaitu dengan mengurutkan terlebih dahulu data yang ada,lalu nilai tengah ditentukan berdasarkan urutan posisi nilai median, pada data soal latihan 1 ini kebetulan semua jumlah datanya bernilai ganjil maka menggunakan rumus posisi median sebagai berikut.

\[ {Posisi Median} = \frac{n+1}{2} \] Dimana:

(\(n\))= Jumlah data


Median (Nilai Tengah) untuk Cabang A:

Data Cabang A sebagai berikut: 50, 55, 60, 65, 70

• Urutan Data:

\[ 50, 55, 60, 65, 70 \]

• Jumlah data (\(n\)): 5 (ganjil)

• Posisi Median:

\[ {Posisi Median} = \frac{5+1}{2}=3 \]

• Jadi, median adalah nilai ke-3 pada Cabang A, yaitu 60


Median (Nilai Tengah) untuk Cabang B:

Data Cabang B sebagai berikut: 40, 50, 60, 70, 80

• Urutan Data:

\[ 40, 50, 60, 70, 80 \]

• Jumlah data (\(n\)): 5 (ganjil)

• Posisi Median:

\[ {Posisi Median} = \frac{5+1}{2}=3 \]

• Jadi, median adalah nilai ke-3 pada Cabang B, yaitu 60


Median (Nilai Tengah) untuk Cabang C:

Data Cabang C sebagai berikut: 30, 30, 35, 40, 45

• Urutan Data:

\[ 30, 30, 35, 40, 45 \]

• Jumlah data (\(n\)): 5 (ganjil)

• Posisi Median:

\[ {Posisi Median} = \frac{5+1}{2}=3 \]

• Jadi, median adalah nilai ke-3 pada Cabang C, yaitu 35


Median (Nilai Tengah) untuk Cabang D:

Data Cabang D sebagai berikut: 70, 75, 80, 85, 90

• Urutan Data:

\[ 70, 75, 80, 85, 90 \]

• Jumlah data (\(n\)): 5 (ganjil)

• Posisi Median:

\[ {Posisi Median} = \frac{5+1}{2}=3 \]

• Jadi, median adalah nilai ke-3 pada Cabang D, yaitu 80

1.3 Menghitung standar deviasi untuk masing-masing Cabang .

Rumus standar deviasi:

Standar deviasi (\(\sigma\)) untuk data populasi dihitung menggunakan rumus:

\[ \sigma = \sqrt{\frac{\sum (x_i - \mu)^2}{n}} \]

Di mana:
- \(\sigma\) = standar deviasi
- \(x_i\) = nilai data individu
- \(\mu\) = rata-rata data
- \(n\) = jumlah data


Berikut adalah perhitungan standar deviasi untuk keempat cabang:

Standar deviasi Cabang A: \(50, 55, 60, 65, 70\)

1. Hitung Rata-rata (\(\mu\)):

\[ \mu = \frac{\sum x_i}{n} = \frac{50 + 55 + 60 + 65 + 70}{5} = \frac{300}{5} = 60 \]

2. Hitung Selisih Tiap Data dengan Rata-rata (\(x_i - \mu\)):

\[ 50 - 60 = -10 \\ 55 - 60 = -5 \\ 60 - 60 = 0 \\ 65 - 60 = 5 \\ 70 - 60 = 10 \]

3. Kuadratkan Selisih (\((x_i - \mu)^2\)):

\[ (-10)^2 = 100 \\ (-5)^2 = 25 \\ 0^2 = 0 \\ 5^2 = 25 \\ 10^2 = 100 \]

4. Hitung Jumlah Kuadrat Selisih (\(\sum (x_i - \mu)^2\)):

\[ \sum (x_i - \mu)^2 = 100 + 25 + 0 + 25 + 100 = 250 \]

5. Hitung Varians (\(\sigma^2\)):

\[ \sigma^2 = \frac{\sum (x_i - \mu)^2}{n} = \frac{250}{5} = 50 \]

6. Hitung Standar Deviasi (\(\sigma\)):

\[ \sigma = \sqrt{\sigma^2} = \sqrt{50} \approx 7.07 \]

Hasil Cabang A: Standar deviasi adalah \(\sigma \approx 7.07\).


Standar deviasi Cabang B: \(40, 50, 60, 70, 80\)

1. Hitung Rata-rata (\(\mu\)):

\[ \mu = \frac{\sum x_i}{n} = \frac{40 + 50 + 60 + 70 + 80}{5} = \frac{300}{5} = 60 \]

2. Hitung Selisih Tiap Data dengan Rata-rata (\(x_i - \mu\)):

\[ 40 - 60 = -20 \\ 50 - 60 = -10 \\ 60 - 60 = 0 \\ 70 - 60 = 10 \\ 80 - 60 = 20 \]

3. Kuadratkan Selisih (\((x_i - \mu)^2\)):

\[ (-20)^2 = 400 \\ (-10)^2 = 100 \\ 0^2 = 0 \\ 10^2 = 100 \\ 20^2 = 400 \]

4. Hitung Jumlah Kuadrat Selisih (\(\sum (x_i - \mu)^2\)):

\[ \sum (x_i - \mu)^2 = 400 + 100 + 0 + 100 + 400 = 1000 \]

5. Hitung Varians (\(\sigma^2\)):

\[ \sigma^2 = \frac{\sum (x_i - \mu)^2}{n} = \frac{1000}{5} = 200 \]

6. Hitung Standar Deviasi (\(\sigma\)):

\[ \sigma = \sqrt{\sigma^2} = \sqrt{200} \approx 14.14 \]

Hasil Cabang B: Standar deviasi adalah \(\sigma \approx 14.14\).


Standar deviasi Cabang C: \(30, 30, 35, 40, 45\)

1. Hitung Rata-rata (\(\mu\)):

\[ \mu = \frac{\sum x_i}{n} = \frac{30 + 30 + 35 + 40 + 45}{5} = \frac{180}{5} = 36 \]

2. Hitung Selisih Tiap Data dengan Rata-rata (\(x_i - \mu\)):

\[ 30 - 36 = -6 \\ 30 - 36 = -6 \\ 35 - 36 = -1 \\ 40 - 36 = 4 \\ 45 - 36 = 9 \]

3. Kuadratkan Selisih (\((x_i - \mu)^2\)):

\[ (-6)^2 = 36 \\ (-6)^2 = 36 \\ (-1)^2 = 1 \\ 4^2 = 16 \\ 9^2 = 81 \]

4. Hitung Jumlah Kuadrat Selisih (\(\sum (x_i - \mu)^2\)):

\[ \sum (x_i - \mu)^2 = 36 + 36 + 1 + 16 + 81 = 170 \]

5. Hitung Varians (\(\sigma^2\)):

\[ \sigma^2 = \frac{\sum (x_i - \mu)^2}{n} = \frac{170}{5} = 34 \]

6. Hitung Standar Deviasi (\(\sigma\)):

\[ \sigma = \sqrt{\sigma^2} = \sqrt{34} \approx 5.83 \]

Hasil Cabang C: Standar deviasi adalah \(\sigma \approx 5.83\).


Standar deviasi Cabang D: \(70, 75, 80, 85, 90\)

1. Hitung Rata-rata (\(\mu\)):

\[ \mu = \frac{\sum x_i}{n} = \frac{70 + 75 + 80 + 85 + 90}{5} = \frac{400}{5} = 80 \]

2. Hitung Selisih Tiap Data dengan Rata-rata (\(x_i - \mu\)):

\[ 70 - 80 = -10 \\ 75 - 80 = -5 \\ 80 - 80 = 0 \\ 85 - 80 = 5 \\ 90 - 80 = 10 \]

3. Kuadratkan Selisih (\((x_i - \mu)^2\)):

\[ (-10)^2 = 100 \\ (-5)^2 = 25 \\ 0^2 = 0 \\ 5^2 = 25 \\ 10^2 = 100 \]

4. Hitung Jumlah Kuadrat Selisih (\(\sum (x_i - \mu)^2\)):

\[ \sum (x_i - \mu)^2 = 100 + 25 + 0 + 25 + 100 = 250 \]

5. Hitung Varians (\(\sigma^2\)):

\[ \sigma^2 = \frac{\sum (x_i - \mu)^2}{n} = \frac{250}{5} = 50 \]

6. Hitung Standar Deviasi (\(\sigma\)):

\[ \sigma = \sqrt{\sigma^2} = \sqrt{50} \approx 7.07 \]

Hasil Cabang D: Standar deviasi adalah \(\sigma \approx 7.07\).


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

Standar deviasi menunjukkan seberapa jauh data tersebar dari rata-ratanya. Semakin kecil nilai standar deviasi, semakin dekat nilai-nilai data terhadap rata-rata, artinya penyebaran datanya lebih kecil.

Hasil Standar Deviasi untuk Keempat Cabang:

  • Cabang A: \(\sigma \approx 7.07\)

  • Cabang B: \(\sigma \approx 14.14\)

  • Cabang C: \(\sigma \approx 5.83\)

  • Cabang D: \(\sigma \approx 7.07\)

Analisis:

  1. Cabang C memiliki standar deviasi terkecil, yaitu \(\sigma \approx 5.83\).
    • Artinya, data penjualan Cabang C memiliki variasi terkecil, dan nilai-nilai penjualannya paling mendekati rata-rata \(\mu = 36\).
    • Penyebaran yang kecil ini terjadi karena sebagian besar nilai data berdekatan, seperti \(30, 30, 35, 40, 45\).
  2. Sebaliknya, Cabang B memiliki standar deviasi terbesar, yaitu \(\sigma \approx 14.14\).
    • Data Cabang B memiliki penyebaran paling besar karena nilai-nilainya lebih berjauhan, dengan rentang \(40 - 80\) yang lebar.
  3. Cabang A dan D memiliki standar deviasi yang sama, \(\sigma \approx 7.07\).
    • Kedua cabang ini memiliki penyebaran yang sedang karena rentang data mereka relatif seragam (\(50 - 70\) untuk A dan \(70 - 90\) untuk D).

Kesimpulan Jawaban no 2: - Cabang dengan Penyebaran Terkecil: Cabang C.
Penyebaran data Cabang C paling kecil karena memiliki standar deviasi terkecil \(\sigma \approx 5.83\). Ini menunjukkan bahwa nilai-nilai data penjualannya lebih konsisten dan dekat dengan rata-rata dibandingkan cabang lainnya.

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

Cabang yang gagal mencapai target penjualan minimum sebesar 50 juta rupiah di semua datanya adalah:

Cabang C.

Target penjualan minimum: \(50\) juta rupiah.

  1. Cabang A :
    • Rata-rata \(60 > 50\), yang berarti secara umum kinerja cabang ini baik.
    • Namun, semua data \((50, 55, 60, 65, 70)\) harus diperiksa.
    • Hasil: Semua nilai \(\geq 50\), sehingga Cabang A memenuhi target.
  2. Cabang B:
    • Rata-rata \(60 > 50\), menunjukkan kinerja rata-rata baik.
    • Namun, berdasarkan data Cabang B 0,50,60,70,80 ada nilai \(40\), yang \(< 50\).
    • Hasil: Tidak semua data memenuhi target, tetapi rata-rata di atas target menunjukkan hanya sebagian data gagal. Cabang B tidak gagal di semua datanya.
  3. Cabang C :
    • Rata-rata \(36 < 50\), artinya kinerja cabang ini sangat rendah secara keseluruhan.
    • Semua data \((30, 30, 35, 40, 45)\) diperiksa, dan semuanya \(< 50\).
    • Hasil: Semua nilai gagal mencapai target. Cabang C gagal di semua datanya.
  4. Cabang D :
    • Rata-rata \(80 > 50\), menunjukkan kinerja sangat baik.
    • Semua data \((70, 75, 80, 85, 90)\) diperiksa, dan semuanya \(\geq 50\).
    • Hasil: Semua nilai memenuhi target. Cabang D memenuhi target.

Kesimpulan Jawaban no 3:

Rata-rata memberikan gambaran kinerja keseluruhan, tetapi tidak cukup untuk menentukan apakah sebuah cabang gagal di semua datanya. Misalnya:

  • Cabang B memiliki rata-rata \(60\) (di atas target), tetapi salah satu datanya (\(40\)) gagal.

  • Cabang C memiliki rata-rata \(36\), yang juga konsisten dengan semua data yang gagal.

Cabang yang gagal mencapai target di semua datanya adalah: Cabang C.
Rata-rata \(\mu = 36\) memperkuat analisis bahwa penjualan Cabang C jauh di bawah target secara konsisten.

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

Tujuan pembuatan boxplot adalah untuk memberikan gambaran visual penyebaran data penjualan dari setiap cabang, termasuk nilai minimum, maksimum, median, dan variasi data melalui kuartil. Boxplot juga membantu mendeteksi pencilan (outlier) dan memudahkan perbandingan distribusi penjualan antar cabang, sehingga perusahaan dapat memahami pola dan karakteristik data untuk mendukung pengambilan keputusan bisnis.

  • Outlier didefinisikan sebagai data yang terletak di luar rentang: \[ \text{Lower Bound} = Q1 - 1.5 \times IQR \] \[ \text{Upper Bound} = Q3 + 1.5 \times IQR \] Di mana:
    • \(Q1\) adalah kuartil pertama (nilai di bawah median),
    • \(Q3\) adalah kuartil ketiga (nilai di atas median),
    • \(IQR\) adalah interquartile range, yaitu selisih antara \(Q3\) dan \(Q1\).

Jika data berada di luar rentang tersebut, maka data tersebut dianggap sebagai outlier.

Mari kita hitung apakah ada outlier pada setiap cabang berdasarkan data yang telah diberikan.

Berikut langkah-langkahnya:

  1. Hitung Q1, Q3, dan IQR untuk setiap cabang.
  2. Tentukan Lower Bound dan Upper Bound untuk mendeteksi apakah ada data yang termasuk outlier.

Saya akan lakukan perhitungan ini untuk setiap cabang.

Langkah-langkah untuk Menentukan Outlier:

  1. Cabang A:
    • Data: \(50, 55, 60, 65, 70\)
    • Urutan Data: \(50, 55, 60, 65, 70\)
    • Median (Q2): 60
    • Q1 (Kuartil pertama): 55
    • Q3 (Kuartil ketiga): 65
    • IQR (Interquartile Range): \(Q3 - Q1 = 65 - 55 = 10\)
    • Lower Bound: \(Q1 - 1.5 \times IQR = 55 - 1.5 \times 10 = 40\)
    • Upper Bound: \(Q3 + 1.5 \times IQR = 65 + 1.5 \times 10 = 80\)
    • Rentang Data (40 - 80): Semua data berada dalam rentang ini, jadi tidak ada outlier.
  1. Cabang B:
    • Data: \(40, 50, 60, 70, 80\)
    • Urutan Data: \(40, 50, 60, 70, 80\)
    • Median (Q2): 60
    • Q1 (Kuartil pertama): 50
    • Q3 (Kuartil ketiga): 70
    • IQR: \(Q3 - Q1 = 70 - 50 = 20\)
    • Lower Bound: \(Q1 - 1.5 \times IQR = 50 - 1.5 \times 20 = 20\)
    • Upper Bound: \(Q3 + 1.5 \times IQR = 70 + 1.5 \times 20 = 100\)
    • Rentang Data (20 - 100): Semua data berada dalam rentang ini, jadi tidak ada outlier.
  1. Cabang C:
    • Data: \(30, 30, 35, 40, 45\)
    • Urutan Data: \(30, 30, 35, 40, 45\)
    • Median (Q2): 35
    • Q1 (Kuartil pertama): 30
    • Q3 (Kuartil ketiga): 40
    • IQR: \(Q3 - Q1 = 40 - 30 = 10\)
    • Lower Bound: \(Q1 - 1.5 \times IQR = 30 - 1.5 \times 10 = 15\)
    • Upper Bound: \(Q3 + 1.5 \times IQR = 40 + 1.5 \times 10 = 55\)
    • Rentang Data (15 - 55): Semua data berada dalam rentang ini, jadi tidak ada outlier.
  1. Cabang D:
    • Data: \(70, 75, 80, 85, 90\)
    • Urutan Data: \(70, 75, 80, 85, 90\)
    • Median (Q2): 80
    • Q1 (Kuartil pertama): 75
    • Q3 (Kuartil ketiga): 85
    • IQR: \(Q3 - Q1 = 85 - 75 = 10\)
    • Lower Bound: \(Q1 - 1.5 \times IQR = 75 - 1.5 \times 10 = 60\)
    • Upper Bound: \(Q3 + 1.5 \times IQR = 85 + 1.5 \times 10 = 100\)
    • Rentang Data (60 - 100): Semua data berada dalam rentang ini, jadi tidak ada outlier.

Berikut ini merupakan data keseluruhan

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

Sebagai manajer perusahaan, informasi yang diperoleh dari analisis data penjualan keempat cabang (A, B, C, dan D) sangat berharga untuk merencanakan strategi peningkatan penjualan. Berikut adalah langkah-langkah dan strategi yang dapat diambil berdasarkan hasil analisis:

  1. Identifikasi Kinerja Cabang Cabang C: Kinerja terendah dengan rata-rata penjualan \(( \mu = 36 )\) juta rupiah dan standar deviasi terkecil \(( \sigma \approx 5.83 )\). Ini menunjukkan penjualan yang konsisten di bawah target. Cabang B: Rata-rata penjualan \(( \mu = 60 )\) juta rupiah, tetapi terdapat nilai yang jauh di bawah target (yaitu \(( 40 )\) juta rupiah). Ini menunjukkan potensi untuk perbaikan. Cabang A dan D: Kinerja baik dengan rata-rata penjualan masing-masing \(( \mu = 60 )\) dan \(( \mu = 80 )\) juta rupiah.

  2. Fokus pada Cabang dengan Kinerja Terendah Strategi untuk Cabang C: Analisis Penyebab: Lakukan analisis mendalam untuk memahami penyebab rendahnya penjualan, seperti kurangnya promosi atau produk yang tidak sesuai. Pelatihan dan Pengembangan: Berikan pelatihan kepada staf untuk meningkatkan keterampilan penjualan dan pelayanan pelanggan. Promosi dan Diskon: Luncurkan kampanye promosi atau diskon untuk menarik lebih banyak pelanggan. Uji Coba Produk Baru: Perkenalkan produk baru yang lebih sesuai dengan kebutuhan pasar.

  3. Optimalkan Kinerja Cabang Lain Cabang A dan D: Analisis Pasar: Lakukan analisis untuk memahami faktor kesuksesan cabang ini. Replikasi Strategi Sukses: Terapkan strategi yang berhasil di Cabang A dan D ke Cabang C dan B. Peningkatan Layanan Pelanggan: Pastikan semua cabang memiliki standar layanan pelanggan yang tinggi.

  4. Monitoring dan Evaluasi Pengukuran Kinerja: Tetapkan KPI (Key Performance Indicators) untuk setiap cabang dan lakukan pemantauan secara berkala. Feedback Pelanggan: Kumpulkan umpan balik dari pelanggan untuk memahami kepuasan mereka. Penyesuaian Strategi: Lakukan penyesuaian strategi berdasarkan hasil monitoring.

  5. Diversifikasi dan Inovasi Diversifikasi Produk: Pertimbangkan untuk memperkenalkan produk baru atau layanan tambahan. Inovasi Pemasaran: Gunakan media sosial dan platform digital untuk meningkatkan visibilitas dan menarik pelanggan baru, terutama di Cabang C. Kesimpulan Dengan menggunakan informasi dari analisis data penjualan, perusahaan dapat merumuskan strategi yang lebih terarah dan efektif untuk meningkatkan penjualan di semua cabang. Fokus utama harus diberikan kepada Cabang C untuk meningkatkan kinerjanya, sementara juga mengoptimalkan kinerja cabang lain yang sudah baik. Melalui pendekatan yang terintegrasi dan berbasis data, perusahaan dapat meningkatkan kinerja penjualannya secara keseluruhan.


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 Barang (unit) Waktu Pengiriman (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

1. Analisis Efisiensi Pengiriman:

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

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

## # A tibble: 5 × 3
##   Wilayah Total_Biaya Efisiensi_Biaya
##   <chr>         <dbl>           <dbl>
## 1 Barat       5415000          12593.
## 2 Selatan     7290000          11758.
## 3 Tengah      8300000          10641.
## 4 Timur       4898000           9604.
## 5 Utara       7590000          11328.

wilayah Barat yang memiliki efisiensi pengiriman terendah berdasarkan biaya per unit dan waktu pengiriman.

Semakin mahal biaya per unit suatu wilayah, maka wilayah tersebut semakin tidak efisien dalam pengiriman barang. Hal ini dikarenakan tingginya biaya per unit menunjukkan bahwa perusahaan mengeluarkan lebih banyak biaya untuk setiap unit barang yang dikirimkan, sehingga efisiensi operasional menjadi rendah. Berdasarkan data:

Wilayah Efisiensi Biaya (Rp/unit) Keterangan
Barat 12,593 Paling tidak efisien (mahal)
Selatan 11,758 Kurang efisien
Utara 11,328 Relatif efisien
Tengah 10,641 Cukup efisien
Timur 9,604 Paling efisien (murah)

Wilayah Barat memiliki biaya rata-rata per unit tertinggi (Rp 12,593/unit), yang berarti wilayah ini membutuhkan perhatian khusus untuk pengoptimalan. Sebaliknya, wilayah Timur adalah yang paling efisien, dengan biaya rata-rata terendah (Rp 9,604/unit).

Implikasi

  1. Biaya yang lebih mahal di wilayah Barat berarti pengiriman lebih tidak efisien dibandingkan wilayah lain.
  2. Untuk meningkatkan efisiensi, perusahaan perlu menurunkan biaya per unit di wilayah Barat, seperti:
    • Mengurangi biaya transportasi dengan negosiasi harga atau mencari alternatif lebih murah.
    • Meningkatkan kapasitas pengiriman untuk memaksimalkan efisiensi logistik.

Kesimpulan

Efisiensi pengiriman sangat bergantung pada rendahnya biaya per unit. Wilayah dengan biaya per unit yang mahal (seperti Barat) cenderung menjadi tidak efisien, sehingga memerlukan optimalisasi strategi pengiriman.

2. Rekomendasi Operasional:

## # A tibble: 5 × 10
##   Wilayah Rata_Rata_Waktu Median_Waktu SD_Waktu Rata_Rata_Barang Median_Barang
##   <chr>             <dbl>        <dbl>    <dbl>            <dbl>         <dbl>
## 1 Barat              6               6     1                143.           130
## 2 Selatan            7               7     1                207.           220
## 3 Tengah             5.67            5     2.08             260            250
## 4 Timur              6               6     1                170            180
## 5 Utara              6               5     2.65             223.           200
## # ℹ 4 more variables: SD_Barang <dbl>, Rata_Rata_Biaya <dbl>,
## #   Median_Biaya <dbl>, SD_Biaya <dbl>

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

Berdasarkan Hasil Analisis

Wilayah yang Memerlukan Perhatian Khusus adalah Wilayah Selatan

  • Wilayah Selatan:

    • Rata-rata waktu pengiriman tertinggi di antara semua wilayah (7 jam).

    • Median jumlah barang yang dikirim cukup besar (220 unit), yang menunjukkan volume pengiriman tinggi.

    • Standard deviasi waktu pengiriman kecil (1 jam), menunjukkan waktu pengiriman yang cukup konsisten, namun tetap relatif lambat.

    • Rata-rata biaya per unit yang tidak disebutkan secara langsung dalam tabel, namun jika rata-rata biaya per unit tinggi, ini menjadi indikator tambahan.

Dari data ini, Wilayah Selatan memerlukan perhatian khusus karena waktu pengiriman lebih lama dibandingkan wilayah lain, meskipun volume barangnya tinggi. Efisiensi waktu pengiriman menjadi fokus perbaikan.

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

Rekomendasi untuk Wilayah Selatan

2.2.1. Pengoptimalan Waktu Pengiriman

  • Rancang Rute yang Lebih Pendek: Analisis ulang rute transportasi dengan menggunakan perangkat lunak optimisasi rute untuk mengurangi waktu perjalanan.
  • Gunakan Transportasi Cepat: Pilih moda transportasi yang lebih efisien, seperti kendaraan dengan kecepatan tinggi atau transportasi berbasis rel jika memungkinkan.
  • Penjadwalan yang Lebih Baik: Atur jadwal pengiriman pada waktu dengan lalu lintas yang lebih lancar untuk menghindari keterlambatan.

2.2.2. Efisiensi Biaya

  • Konsolidasi Pengiriman: Gabungkan beberapa pengiriman menjadi satu perjalanan untuk memanfaatkan kapasitas kendaraan secara penuh.
  • Negosiasi dengan Penyedia Logistik: Jika menggunakan layanan logistik pihak ketiga, lakukan negosiasi ulang tarif untuk mengurangi biaya per unit.
  • Evaluasi Infrastruktur Logistik: Perbaiki jalan atau akses ke titik distribusi di Wilayah Selatan untuk mengurangi biaya perjalanan.

2.2.3. Peningkatan Manajemen Logistik

  • Gudang Lebih Dekat: Jika jarak terlalu jauh, bangun gudang penyimpanan sementara di dekat Wilayah Selatan untuk memperpendek jarak pengiriman.
  • Penggunaan Teknologi: Implementasikan sistem pelacakan berbasis GPS untuk memantau dan memperbaiki waktu pengiriman secara real-time.
  • Peningkatan SDM: Latih karyawan logistik untuk mengelola proses pengiriman lebih cepat dan efisien.

2.2.4. Fokus pada Barang dengan Volume Tinggi

  • Pastikan barang dengan volume pengiriman tinggi (seperti pakaian dan makanan di Wilayah Selatan) diprioritaskan dalam transportasi untuk menghindari keterlambatan.

Dengan langkah-langkah ini, Wilayah Selatan dapat meningkatkan efisiensi pengiriman baik dari segi waktu maupun biaya, sekaligus mempertahankan kualitas layanan.

3. Kinerja Berdasarkan Jenis Barang:

## # A tibble: 15 × 5
##    Wilayah Jenis_Barang Rata_Rata_Waktu Rata_Rata_Biaya Total_Jumlah_Barang
##    <chr>   <chr>                  <dbl>           <dbl>               <dbl>
##  1 Barat   Makanan                    5           10500                 130
##  2 Barat   Elektronik                 6           14500                 180
##  3 Barat   Peralatan                  7           12000                 120
##  4 Selatan Elektronik                 6           16000                 250
##  5 Selatan Makanan                    7            9500                 220
##  6 Selatan Pakaian                    8            8000                 150
##  7 Tengah  Elektronik                 4           14000                 250
##  8 Tengah  Peralatan                  5           11500                 180
##  9 Tengah  Pakaian                    8            7800                 350
## 10 Timur   Peralatan                  5           11000                 140
## 11 Timur   Makanan                    6           10000                 180
## 12 Timur   Pakaian                    7            8200                 190
## 13 Utara   Peralatan                  4           12000                 170
## 14 Utara   Elektronik                 5           15000                 200
## 15 Utara   Pakaian                    9            8500                 300

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

3.1.1 Waktu Pengiriman Paling Cepat:

  1. Wilayah Tengah (Elektronik): 4 jam.
  2. Wilayah Utara (Peralatan): 4 jam.

3.1.2 Biaya Per Unit Paling Rendah:

  1. Wilayah Tengah (Pakaian): Rp 7,800/unit.
  2. Wilayah Selatan (Pakaian): Rp 8,000/unit.

3.1.3 Kombinasi Waktu Cepat dan Biaya Rendah:

  • Wilayah Tengah (Elektronik): Waktu 4 jam dengan biaya Rp 14,000/unit.
  • Wilayah Selatan (Pakaian): Waktu 8 jam dengan biaya Rp 8,000/unit (murah tetapi lebih lama).

3.1.4 Kesimpulan

  • Jika fokus pada waktu pengiriman tercepat, wilayah Tengah (Elektronik) dan Utara (Peralatan) unggul.
  • Jika fokus pada biaya per unit terendah, wilayah Tengah (Pakaian) menjadi pilihan terbaik.
  • Kombinasi waktu cepat dan biaya rendah tidak selalu tersedia secara optimal. Elektronik di wilayah Tengah memiliki performa terbaik dengan waktu cepat dan biaya relatif kompetitif.

Referensi

Bakti Siregar, M.Sc., CDS. (2024). Ukuran Pemusatan Data. Diambil dari https://bookdown.org/dsciencelabs/statistika_dasar/_book/Ukuran_Penyebaran_Data.html

Febriani, S. (2022). Analisis Deskriptif Standar Deviasi. Jurnal Pendidikan Tambusai, 6(1), 910-913.

Primandari, A. H., & Kesumawati, A. Ukuran Penyebaran Data.

Chyan, P., Hasniati, H., Marsisno, W., Athar, G. A., Wasito, N., Minggani, F., … & Asbanu, D. E. (2024). Statistika Pendidikan: Panduan Praktis Statistika untuk Pendidikan. Penerbit Mifandi Mandiri Digital, 1(01).

Sutisna, I. (2020). Statistika penelitian. Universitas Negeri Gorontalo, 1(1), 1-15.

LS0tDQp0aXRsZTogIlR1Z2FzIEluZGl2aWR1Ig0Kc3VidGl0bGU6ICJVa3VyYW4gUGVueWViYXJhbiBEYXRhIg0KYXV0aG9yOiAiT2xpdmlhIE1laWxpbmRhIERhdnRpbiBQZXNpcmVyb24iDQpkYXRlOiAgImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjogICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9qdWJhL3JtZGZvcm1hdHMNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNzczogInN0eWxlLmNzcyINCi0tLQ0KDQo8aW1nIHNyYz0iV2hhdHNBcHAgSW1hZ2UgMjAyNC0xMi0wOCBhdCAxMC40MC4xOV83MjJmYTZmNS5qcGciIHdpZHRoPSIzMDAiIHN0eWxlPSJkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyIgYWx0PSJGb3RvIERpcmkiPg0KDQoNCg0KIyAgTGF0aWhhbiAxDQoNClNlYnVhaCBwZXJ1c2FoYWFuIGluZ2luIG1lbWFoYW1pIGthcmFrdGVyaXN0aWsgcGVueWViYXJhbiBkYXRhIGhhc2lsIHBlbmp1YWxhbiBkYXJpIGVtcGF0IGNhYmFuZyAoQSwgQiwgQywgZGFuIEQpIHNlbGFtYSBzYXR1IGJ1bGFuIHRlcmFraGlyLiBEYXRhIHBlbmp1YWxhbiAoZGFsYW0ganV0YSBydXBpYWgpIGRhcmkga2VlbXBhdCBjYWJhbmcgdGVyc2VidXQgYWRhbGFoIHNlYmFnYWkgYmVyaWt1dDoNCg0K4oCiIENhYmFuZyBBOiA1MCwgNTUsIDYwLCA2NSwgNzANCg0K4oCiIENhYmFuZyBCOiA0MCwgNTAsIDYwLCA3MCwgODANCg0K4oCiIENhYmFuZyBDOiAzMCwgMzAsIDM1LCA0MCwgNDUNCg0K4oCiIENhYmFuZyBEOiA3MCwgNzUsIDgwLCA4NSwgOTANCg0KIyMgMS5IaXR1bmdsYWggcmF0YS1yYXRhLCBtZWRpYW4sIGRhbiBzdGFuZGFyIGRldmlhc2kgdW50dWsgbWFzaW5nLW1hc2luZyBjYWJhbmcuDQoNCg0KIyMjIDEuMSBNZW5naGl0dW5nIHJhdGEtcmF0YSB1bnR1ayBtYXNpbmctbWFzaW5nIENhYmFuZy4NCg0KIyMjICoqUnVtdXMgTWVhbiAoUmF0YS1yYXRhKSoqOg0KDQokJA0Ke01lYW59ID0gXGZyYWN7XHN1bSB4fXtufQ0KJCQNCg0KRGltYW5hOg0KDQooXCjOo1hcKSk9SnVtbGFoIGRhcmkgc2VtdWEgbmlsYWkgZGF0YSANCg0KKFwoblwpKT0gSnVtbGFoIGRhdGENCg0KLS0tDQoNCiMjIyBNZWFuIChSYXRhLXJhdGEpIHVudHVrIENhYmFuZyBBOg0KRGF0YSBDYWJhbmcgQSBzZWJhZ2FpIGJlcmlrdXQ6IDUwLCA1NSwgNjAsIDY1LCA3MA0KDQrigKIgTWVuanVtbGFoa2FuIHNlbXVhIG5pbGFpIChcKM6jWFwpKToNCg0KJCQNClxzdW0gWCA9NTArIDU1KyA2MCsgNjUrIDcwPTMwMA0KJCQNCg0K4oCiIEp1bWxhaCBkYXRhIChcKG5cKSk6IDUNCg0KJCQNCntNZWFuKENhYmFuZyBBKX09IFxmcmFjezMwMH17NX0gPSA2MA0KJCQNCg0KLS0tDQoNCiMjIyBNZWFuIChSYXRhLXJhdGEpIHVudHVrIENhYmFuZyBCOg0KRGF0YSBDYWJhbmcgQiBzZWJhZ2FpIGJlcmlrdXQ6IDQwLCA1MCwgNjAsIDcwLCA4MA0KDQrigKIgTWVuanVtbGFoa2FuIHNlbXVhIG5pbGFpIChcKM6jWFwpKToNCg0KJCQNClxzdW0gWCA9NDArIDUwKyA2MCsgNzArIDgwPTMwMA0KJCQNCg0K4oCiIEp1bWxhaCBkYXRhIChcKG5cKSk6IDUNCg0KJCQNCntNZWFuKENhYmFuZyBCKX09IFxmcmFjezMwMH17NX0gPSA2MA0KJCQNCg0KLS0tDQoNCiMjIyBNZWFuIChSYXRhLXJhdGEpIHVudHVrIENhYmFuZyBDOg0KRGF0YSBDYWJhbmcgQyBzZWJhZ2FpIGJlcmlrdXQ6IDMwLCAzMCwgMzUsIDQwLCA0NQ0KDQrigKIgTWVuanVtbGFoa2FuIHNlbXVhIG5pbGFpIChcKM6jWFwpKToNCg0KJCQNClxzdW0gWCA9MzArIDMwKyAzNSsgNDArIDQ1PTE4MA0KJCQNCuKAoiBKdW1sYWggZGF0YSAoXChuXCkpOiA1DQoNCiQkDQp7TWVhbihDYWJhbmcgQyl9PSBcZnJhY3sxODB9ezV9ID0gMzYNCiQkDQoNCi0tLQ0KDQojIyMgTWVhbiAoUmF0YS1yYXRhKSB1bnR1ayBDYWJhbmcgRDoNCkRhdGEgQ2FiYW5nIEQgc2ViYWdhaSBiZXJpa3V0OiA3MCwgNzUsIDgwLCA4NSwgOTANCg0K4oCiIE1lbmp1bWxhaGthbiBzZW11YSBuaWxhaSAoXCjOo1hcKSk6DQoNCiQkDQpcc3VtIFggPTcwKyA3NSsgODArIDg1KyA5MD00MDANCiQkDQrigKIgSnVtbGFoIGRhdGEgKFwoblwpKTogNQ0KDQokJA0Ke01lYW4oQ2FiYW5nIEQpfT0gXGZyYWN7NDAwfXs1fSA9IDgwDQokJA0KDQojIyMgMS4yIE1lbmdoaXR1bmcgbWVkaWFuIHVudHVrIG1hc2luZy1tYXNpbmcgQ2FiYW5nIC4NCg0KIyMjICoqUnVtdXMgUG9zaXNpIE1lZGlhbiAoTmlsYWkgVGVuZ2FoKSoqOg0KDQpVbnR1ayBNZW5lbnR1a2FuIG5pbGFpIG1lZGlhbiBwYWRhIHN1YXR1IGRhdGEgYWRhcHVuIGxhbmdrYWggeWFuZyBoYXJ1cyBkaSBrZXJqYWthbiB5YWl0dSBkZW5nYW4gbWVuZ3VydXRrYW4gdGVybGViaWggZGFodWx1IGRhdGEgeWFuZyBhZGEsbGFsdSBuaWxhaSB0ZW5nYWggZGl0ZW50dWthbiBiZXJkYXNhcmthbiB1cnV0YW4gcG9zaXNpIG5pbGFpIG1lZGlhbiwgcGFkYSBkYXRhIHNvYWwgbGF0aWhhbiAxIGluaSBrZWJldHVsYW4gc2VtdWEganVtbGFoIGRhdGFueWEgYmVybmlsYWkgZ2FuamlsIG1ha2EgbWVuZ2d1bmFrYW4gcnVtdXMgcG9zaXNpIG1lZGlhbiBzZWJhZ2FpIGJlcmlrdXQuDQoNCiQkDQp7UG9zaXNpIE1lZGlhbn0gPSBcZnJhY3tuKzF9ezJ9DQokJA0KRGltYW5hOg0KDQooXChuXCkpPSBKdW1sYWggZGF0YQ0KDQotLS0NCg0KIyMjIE1lZGlhbiAoTmlsYWkgVGVuZ2FoKSB1bnR1ayBDYWJhbmcgQToNCkRhdGEgQ2FiYW5nIEEgc2ViYWdhaSBiZXJpa3V0OiA1MCwgNTUsIDYwLCA2NSwgNzANCg0K4oCiIFVydXRhbiBEYXRhOg0KDQokJA0KNTAsIDU1LCA2MCwgNjUsIDcwDQokJA0KDQrigKIgSnVtbGFoIGRhdGEgKFwoblwpKTogNSAoZ2FuamlsKQ0KDQrigKIgUG9zaXNpIE1lZGlhbjoNCg0KJCQNCntQb3Npc2kgTWVkaWFufSA9IFxmcmFjezUrMX17Mn09Mw0KJCQNCg0K4oCiIEphZGksIG1lZGlhbiBhZGFsYWggbmlsYWkga2UtMyBwYWRhIENhYmFuZyBBLCB5YWl0dSA2MA0KDQotLS0NCg0KIyMjIE1lZGlhbiAoTmlsYWkgVGVuZ2FoKSB1bnR1ayBDYWJhbmcgQjoNCkRhdGEgQ2FiYW5nIEIgc2ViYWdhaSBiZXJpa3V0OiA0MCwgNTAsIDYwLCA3MCwgODANCg0K4oCiIFVydXRhbiBEYXRhOg0KDQokJA0KNDAsIDUwLCA2MCwgNzAsIDgwDQokJA0KDQrigKIgSnVtbGFoIGRhdGEgKFwoblwpKTogNSAoZ2FuamlsKQ0KDQrigKIgUG9zaXNpIE1lZGlhbjoNCg0KJCQNCntQb3Npc2kgTWVkaWFufSA9IFxmcmFjezUrMX17Mn09Mw0KJCQNCg0K4oCiIEphZGksIG1lZGlhbiBhZGFsYWggbmlsYWkga2UtMyBwYWRhIENhYmFuZyBCLCB5YWl0dSA2MA0KDQotLS0NCg0KIyMjIE1lZGlhbiAoTmlsYWkgVGVuZ2FoKSB1bnR1ayBDYWJhbmcgQzoNCkRhdGEgQ2FiYW5nIEMgc2ViYWdhaSBiZXJpa3V0OiAzMCwgMzAsIDM1LCA0MCwgNDUNCg0K4oCiIFVydXRhbiBEYXRhOg0KDQokJA0KMzAsIDMwLCAzNSwgNDAsIDQ1DQokJA0KDQrigKIgSnVtbGFoIGRhdGEgKFwoblwpKTogNSAoZ2FuamlsKQ0KDQrigKIgUG9zaXNpIE1lZGlhbjoNCg0KJCQNCntQb3Npc2kgTWVkaWFufSA9IFxmcmFjezUrMX17Mn09Mw0KJCQNCg0K4oCiIEphZGksIG1lZGlhbiBhZGFsYWggbmlsYWkga2UtMyBwYWRhIENhYmFuZyBDLCB5YWl0dSAzNQ0KDQotLS0NCg0KIyMjIE1lZGlhbiAoTmlsYWkgVGVuZ2FoKSB1bnR1ayBDYWJhbmcgRDoNCkRhdGEgQ2FiYW5nIEQgc2ViYWdhaSBiZXJpa3V0OiA3MCwgNzUsIDgwLCA4NSwgOTANCg0K4oCiIFVydXRhbiBEYXRhOg0KDQokJA0KNzAsIDc1LCA4MCwgODUsIDkwDQokJA0KDQrigKIgSnVtbGFoIGRhdGEgKFwoblwpKTogNSAoZ2FuamlsKQ0KDQrigKIgUG9zaXNpIE1lZGlhbjoNCg0KJCQNCntQb3Npc2kgTWVkaWFufSA9IFxmcmFjezUrMX17Mn09Mw0KJCQNCg0K4oCiIEphZGksIG1lZGlhbiBhZGFsYWggbmlsYWkga2UtMyBwYWRhIENhYmFuZyBELCB5YWl0dSA4MA0KDQoNCiMjIyAxLjMgTWVuZ2hpdHVuZyBzdGFuZGFyIGRldmlhc2kgdW50dWsgbWFzaW5nLW1hc2luZyBDYWJhbmcgLg0KDQojIyMgKipSdW11cyBzdGFuZGFyIGRldmlhc2kqKjoNCg0KU3RhbmRhciBkZXZpYXNpIChcKFxzaWdtYVwpKSB1bnR1ayBkYXRhIHBvcHVsYXNpIGRpaGl0dW5nIG1lbmdndW5ha2FuIHJ1bXVzOg0KDQpcWw0KXHNpZ21hID0gXHNxcnR7XGZyYWN7XHN1bSAoeF9pIC0gXG11KV4yfXtufX0NClxdDQoNCkRpIG1hbmE6ICANCi0gXChcc2lnbWFcKSA9IHN0YW5kYXIgZGV2aWFzaSAgDQotIFwoeF9pXCkgPSBuaWxhaSBkYXRhIGluZGl2aWR1ICANCi0gXChcbXVcKSA9IHJhdGEtcmF0YSBkYXRhICANCi0gXChuXCnCoD3CoGp1bWxhaMKgZGF0YQ0KDQotLS0NCg0KQmVyaWt1dCBhZGFsYWggcGVyaGl0dW5nYW4gc3RhbmRhciBkZXZpYXNpIHVudHVrIGtlZW1wYXQgY2FiYW5nOg0KDQoNCiMjIyAqKlN0YW5kYXIgZGV2aWFzaSBDYWJhbmcgQTogXCg1MCwgNTUsIDYwLCA2NSwgNzBcKSoqDQoNCiMjIyMgMS4gSGl0dW5nIFJhdGEtcmF0YSAoXChcbXVcKSk6DQpcWw0KXG11ID0gXGZyYWN7XHN1bSB4X2l9e259ID0gXGZyYWN7NTAgKyA1NSArIDYwICsgNjUgKyA3MH17NX0gPSBcZnJhY3szMDB9ezV9ID0gNjANClxdDQoNCiMjIyMgMi4gSGl0dW5nIFNlbGlzaWggVGlhcCBEYXRhIGRlbmdhbiBSYXRhLXJhdGEgKFwoeF9pIC0gXG11XCkpOg0KXFsNCjUwIC0gNjAgPSAtMTAgXFwNCjU1IC0gNjAgPSAtNSBcXA0KNjAgLSA2MCA9IDAgXFwNCjY1IC0gNjAgPSA1IFxcDQo3MCAtIDYwID0gMTANClxdDQoNCiMjIyMgMy4gS3VhZHJhdGthbiBTZWxpc2loIChcKCh4X2kgLSBcbXUpXjJcKSk6DQpcWw0KKC0xMCleMiA9IDEwMCBcXA0KKC01KV4yID0gMjUgXFwNCjBeMiA9IDAgXFwNCjVeMiA9IDI1IFxcDQoxMF4yID0gMTAwDQpcXQ0KDQojIyMjIDQuIEhpdHVuZyBKdW1sYWggS3VhZHJhdCBTZWxpc2loIChcKFxzdW0gKHhfaSAtIFxtdSleMlwpKToNClxbDQpcc3VtICh4X2kgLSBcbXUpXjIgPSAxMDAgKyAyNSArIDAgKyAyNSArIDEwMCA9IDI1MA0KXF0NCg0KIyMjIyA1LiBIaXR1bmcgVmFyaWFucyAoXChcc2lnbWFeMlwpKToNClxbDQpcc2lnbWFeMiA9IFxmcmFje1xzdW0gKHhfaSAtIFxtdSleMn17bn0gPSBcZnJhY3syNTB9ezV9ID0gNTANClxdDQoNCiMjIyMgNi4gSGl0dW5nIFN0YW5kYXIgRGV2aWFzaSAoXChcc2lnbWFcKSk6DQpcWw0KXHNpZ21hID0gXHNxcnR7XHNpZ21hXjJ9ID0gXHNxcnR7NTB9IFxhcHByb3ggNy4wNw0KXF0NCg0KKipIYXNpbCBDYWJhbmcgQTogU3RhbmRhciBkZXZpYXNpIGFkYWxhaCBcKCBcc2lnbWEgXGFwcHJveCA3LjA3IFwpLioqDQoNCg0KLS0tDQoNCiMjIyAqKlN0YW5kYXIgZGV2aWFzaSBDYWJhbmcgQjogXCg0MCwgNTAsIDYwLCA3MCwgODBcKSoqDQoNCiMjIyMgMS4gSGl0dW5nIFJhdGEtcmF0YSAoXChcbXVcKSk6DQpcWw0KXG11ID0gXGZyYWN7XHN1bSB4X2l9e259ID0gXGZyYWN7NDAgKyA1MCArIDYwICsgNzAgKyA4MH17NX0gPSBcZnJhY3szMDB9ezV9ID0gNjANClxdDQoNCiMjIyMgMi4gSGl0dW5nIFNlbGlzaWggVGlhcCBEYXRhIGRlbmdhbiBSYXRhLXJhdGEgKFwoeF9pIC0gXG11XCkpOg0KXFsNCjQwIC0gNjAgPSAtMjAgXFwNCjUwIC0gNjAgPSAtMTAgXFwNCjYwIC0gNjAgPSAwIFxcDQo3MCAtIDYwID0gMTAgXFwNCjgwIC0gNjAgPSAyMA0KXF0NCg0KIyMjIyAzLiBLdWFkcmF0a2FuIFNlbGlzaWggKFwoKHhfaSAtIFxtdSleMlwpKToNClxbDQooLTIwKV4yID0gNDAwIFxcDQooLTEwKV4yID0gMTAwIFxcDQowXjIgPSAwIFxcDQoxMF4yID0gMTAwIFxcDQoyMF4yID0gNDAwDQpcXQ0KDQojIyMjIDQuIEhpdHVuZyBKdW1sYWggS3VhZHJhdCBTZWxpc2loIChcKFxzdW0gKHhfaSAtIFxtdSleMlwpKToNClxbDQpcc3VtICh4X2kgLSBcbXUpXjIgPSA0MDAgKyAxMDAgKyAwICsgMTAwICsgNDAwID0gMTAwMA0KXF0NCg0KIyMjIyA1LiBIaXR1bmcgVmFyaWFucyAoXChcc2lnbWFeMlwpKToNClxbDQpcc2lnbWFeMiA9IFxmcmFje1xzdW0gKHhfaSAtIFxtdSleMn17bn0gPSBcZnJhY3sxMDAwfXs1fSA9IDIwMA0KXF0NCg0KIyMjIyA2LiBIaXR1bmcgU3RhbmRhciBEZXZpYXNpIChcKFxzaWdtYVwpKToNClxbDQpcc2lnbWEgPSBcc3FydHtcc2lnbWFeMn0gPSBcc3FydHsyMDB9IFxhcHByb3ggMTQuMTQNClxdDQoNCioqSGFzaWwgQ2FiYW5nIEI6IFN0YW5kYXIgZGV2aWFzaSBhZGFsYWggXCggXHNpZ21hIFxhcHByb3ggMTQuMTQgXCkuKioNCg0KDQotLS0NCg0KIyMjICoqU3RhbmRhciBkZXZpYXNpIENhYmFuZyBDOiBcKDMwLCAzMCwgMzUsIDQwLCA0NVwpKioNCg0KIyMjIyAxLiBIaXR1bmcgUmF0YS1yYXRhIChcKFxtdVwpKToNClxbDQpcbXUgPSBcZnJhY3tcc3VtIHhfaX17bn0gPSBcZnJhY3szMCArIDMwICsgMzUgKyA0MCArIDQ1fXs1fSA9IFxmcmFjezE4MH17NX0gPSAzNg0KXF0NCg0KIyMjIyAyLiBIaXR1bmcgU2VsaXNpaCBUaWFwIERhdGEgZGVuZ2FuIFJhdGEtcmF0YSAoXCh4X2kgLSBcbXVcKSk6DQpcWw0KMzAgLSAzNiA9IC02IFxcDQozMCAtIDM2ID0gLTYgXFwNCjM1IC0gMzYgPSAtMSBcXA0KNDAgLSAzNiA9IDQgXFwNCjQ1IC0gMzYgPSA5DQpcXQ0KDQojIyMjIDMuIEt1YWRyYXRrYW4gU2VsaXNpaCAoXCgoeF9pIC0gXG11KV4yXCkpOg0KXFsNCigtNileMiA9IDM2IFxcDQooLTYpXjIgPSAzNiBcXA0KKC0xKV4yID0gMSBcXA0KNF4yID0gMTYgXFwNCjleMiA9IDgxDQpcXQ0KDQojIyMjIDQuIEhpdHVuZyBKdW1sYWggS3VhZHJhdCBTZWxpc2loIChcKFxzdW0gKHhfaSAtIFxtdSleMlwpKToNClxbDQpcc3VtICh4X2kgLSBcbXUpXjIgPSAzNiArIDM2ICsgMSArIDE2ICsgODEgPSAxNzANClxdDQoNCiMjIyMgNS4gSGl0dW5nIFZhcmlhbnMgKFwoXHNpZ21hXjJcKSk6DQpcWw0KXHNpZ21hXjIgPSBcZnJhY3tcc3VtICh4X2kgLSBcbXUpXjJ9e259ID0gXGZyYWN7MTcwfXs1fSA9IDM0DQpcXQ0KDQojIyMjIDYuIEhpdHVuZyBTdGFuZGFyIERldmlhc2kgKFwoXHNpZ21hXCkpOg0KXFsNClxzaWdtYSA9IFxzcXJ0e1xzaWdtYV4yfSA9IFxzcXJ0ezM0fSBcYXBwcm94IDUuODMNClxdDQoNCioqSGFzaWwgQ2FiYW5nIEM6IFN0YW5kYXIgZGV2aWFzaSBhZGFsYWggXCggXHNpZ21hIFxhcHByb3ggNS44MyBcKS4qKg0KDQoNCi0tLQ0KDQojIyMgKipTdGFuZGFyIGRldmlhc2kgQ2FiYW5nIEQ6IFwoNzAsIDc1LCA4MCwgODUsIDkwXCkqKg0KDQojIyMjIDEuIEhpdHVuZyBSYXRhLXJhdGEgKFwoXG11XCkpOg0KXFsNClxtdSA9IFxmcmFje1xzdW0geF9pfXtufSA9IFxmcmFjezcwICsgNzUgKyA4MCArIDg1ICsgOTB9ezV9ID0gXGZyYWN7NDAwfXs1fSA9IDgwDQpcXQ0KDQojIyMjIDIuIEhpdHVuZyBTZWxpc2loIFRpYXAgRGF0YSBkZW5nYW4gUmF0YS1yYXRhIChcKHhfaSAtIFxtdVwpKToNClxbDQo3MCAtIDgwID0gLTEwIFxcDQo3NSAtIDgwID0gLTUgXFwNCjgwIC0gODAgPSAwIFxcDQo4NSAtIDgwID0gNSBcXA0KOTAgLSA4MCA9IDEwDQpcXQ0KDQojIyMjIDMuIEt1YWRyYXRrYW4gU2VsaXNpaCAoXCgoeF9pIC0gXG11KV4yXCkpOg0KXFsNCigtMTApXjIgPSAxMDAgXFwNCigtNSleMiA9IDI1IFxcDQowXjIgPSAwIFxcDQo1XjIgPSAyNSBcXA0KMTBeMiA9IDEwMA0KXF0NCg0KIyMjIyA0LiBIaXR1bmcgSnVtbGFoIEt1YWRyYXQgU2VsaXNpaCAoXChcc3VtICh4X2kgLSBcbXUpXjJcKSk6DQpcWw0KXHN1bSAoeF9pIC0gXG11KV4yID0gMTAwICsgMjUgKyAwICsgMjUgKyAxMDAgPSAyNTANClxdDQoNCiMjIyMgNS4gSGl0dW5nIFZhcmlhbnMgKFwoXHNpZ21hXjJcKSk6DQpcWw0KXHNpZ21hXjIgPSBcZnJhY3tcc3VtICh4X2kgLSBcbXUpXjJ9e259ID0gXGZyYWN7MjUwfXs1fSA9IDUwDQpcXQ0KDQojIyMjIDYuIEhpdHVuZyBTdGFuZGFyIERldmlhc2kgKFwoXHNpZ21hXCkpOg0KXFsNClxzaWdtYSA9IFxzcXJ0e1xzaWdtYV4yfSA9IFxzcXJ0ezUwfSBcYXBwcm94IDcuMDcNClxdDQoNCioqSGFzaWwgQ2FiYW5nIEQ6IFN0YW5kYXIgZGV2aWFzaSBhZGFsYWggXCggXHNpZ21hIFxhcHByb3ggNy4wNyBcKS4qKg0KDQoNCi0tLQ0KDQoNCiMjIDIuQ2FiYW5nIG1hbmEgeWFuZyBtZW1pbGlraSBwZW55ZWJhcmFuIGRhdGEgcGFsaW5nIGtlY2lsPyBKZWxhc2thbiBhbGFzYW5ueWEuDQoNClN0YW5kYXIgZGV2aWFzaSBtZW51bmp1a2thbiBzZWJlcmFwYSBqYXVoIGRhdGEgdGVyc2ViYXIgZGFyaSByYXRhLXJhdGFueWEuIFNlbWFraW4ga2VjaWwgbmlsYWkgc3RhbmRhciBkZXZpYXNpLCBzZW1ha2luIGRla2F0IG5pbGFpLW5pbGFpIGRhdGEgdGVyaGFkYXAgcmF0YS1yYXRhLCBhcnRpbnlhIHBlbnllYmFyYW4gZGF0YW55YSBsZWJpaCBrZWNpbC4NCg0KKipIYXNpbCBTdGFuZGFyIERldmlhc2kgdW50dWsgS2VlbXBhdCBDYWJhbmc6KioNCg0KLSBDYWJhbmcgQTogXCggXHNpZ21hIFxhcHByb3ggNy4wNyBcKQ0KDQotIENhYmFuZyBCOiBcKCBcc2lnbWEgXGFwcHJveCAxNC4xNCBcKQ0KDQotIENhYmFuZyBDOiBcKCBcc2lnbWEgXGFwcHJveCA1LjgzIFwpDQoNCi0gQ2FiYW5nIEQ6IFwoIFxzaWdtYSBcYXBwcm94IDcuMDcgXCkNCg0KKipBbmFsaXNpczoqKg0KDQoxLiBDYWJhbmcgQyBtZW1pbGlraSBzdGFuZGFyIGRldmlhc2kgdGVya2VjaWwsIHlhaXR1IFwoIFxzaWdtYSBcYXBwcm94IDUuODMgXCkuIA0KICAgLSBBcnRpbnlhLCBkYXRhIHBlbmp1YWxhbiBDYWJhbmcgQyBtZW1pbGlraSB2YXJpYXNpIHRlcmtlY2lsLCBkYW4gbmlsYWktbmlsYWkgcGVuanVhbGFubnlhIHBhbGluZyBtZW5kZWthdGkgcmF0YS1yYXRhIFwoIFxtdSA9IDM2IFwpLg0KICAgLSBQZW55ZWJhcmFuIHlhbmcga2VjaWwgaW5pIHRlcmphZGkga2FyZW5hIHNlYmFnaWFuIGJlc2FyIG5pbGFpIGRhdGEgYmVyZGVrYXRhbiwgc2VwZXJ0aSBcKCAzMCwgMzAsIDM1LCA0MCwgNDUgXCkuDQoNCjIuIFNlYmFsaWtueWEsIENhYmFuZyBCIG1lbWlsaWtpIHN0YW5kYXIgZGV2aWFzaSB0ZXJiZXNhciwgeWFpdHUgXCggXHNpZ21hIFxhcHByb3ggMTQuMTQgXCkuIA0KICAgLSBEYXRhIENhYmFuZyBCIG1lbWlsaWtpIHBlbnllYmFyYW4gcGFsaW5nIGJlc2FyIGthcmVuYSBuaWxhaS1uaWxhaW55YSBsZWJpaCBiZXJqYXVoYW4sIGRlbmdhbiByZW50YW5nIFwoIDQwIC0gODAgXCkgeWFuZyBsZWJhci4NCg0KMy4gQ2FiYW5nIEEgZGFuIEQgbWVtaWxpa2kgc3RhbmRhciBkZXZpYXNpIHlhbmcgc2FtYSwgXCggXHNpZ21hIFxhcHByb3ggNy4wNyBcKS4gDQogICAtIEtlZHVhIGNhYmFuZyBpbmkgbWVtaWxpa2kgcGVueWViYXJhbiB5YW5nIHNlZGFuZyBrYXJlbmEgcmVudGFuZyBkYXRhIG1lcmVrYSByZWxhdGlmIHNlcmFnYW0gKFwoIDUwIC0gNzAgXCkgdW50dWsgQSBkYW4gXCggNzAgLSA5MCBcKSB1bnR1ayBEKS4NCg0KKipLZXNpbXB1bGFuIEphd2FiYW4gbm8gMjoqKg0KLSAqKkNhYmFuZyBkZW5nYW4gUGVueWViYXJhbiBUZXJrZWNpbDogQ2FiYW5nIEMuKiogIA0KICBQZW55ZWJhcmFuIGRhdGEgQ2FiYW5nIEMgcGFsaW5nIGtlY2lsIGthcmVuYSBtZW1pbGlraSBzdGFuZGFyIGRldmlhc2kgdGVya2VjaWwgXCggXHNpZ21hIFxhcHByb3ggNS44MyBcKS4gSW5pIG1lbnVuanVra2FuIGJhaHdhIG5pbGFpLW5pbGFpIGRhdGEgcGVuanVhbGFubnlhIGxlYmloIGtvbnNpc3RlbiBkYW4gZGVrYXQgZGVuZ2FuIHJhdGEtcmF0YSBkaWJhbmRpbmdrYW4gY2FiYW5nIGxhaW5ueWEuIA0KDQoNCiMjIDMuSmlrYSB0YXJnZXQgcGVuanVhbGFuIG1pbmltdW0gYWRhbGFoIDUwIGp1dGEgcnVwaWFoLCBjYWJhbmcgbWFuYSBzYWphIHlhbmcgZ2FnYWwgbWVuY2FwYWkgdGFyZ2V0IGRpIHNlbXVhIGRhdGFueWE/DQoNCkNhYmFuZyB5YW5nIGdhZ2FsIG1lbmNhcGFpIHRhcmdldCBwZW5qdWFsYW4gbWluaW11bSBzZWJlc2FyIDUwIGp1dGEgcnVwaWFoIGRpIHNlbXVhIGRhdGFueWEgYWRhbGFoOg0KDQoqKkNhYmFuZyBDLioqDQoNCioqVGFyZ2V0IHBlbmp1YWxhbiBtaW5pbXVtOioqIFwoIDUwIFwpIGp1dGEgcnVwaWFoLiAgDQoNCg0KMS4gKipDYWJhbmcgQSA6KioNCiAgIC0gUmF0YS1yYXRhIFwoIDYwID4gNTAgXCksIHlhbmcgYmVyYXJ0aSBzZWNhcmEgdW11bSBraW5lcmphIGNhYmFuZyBpbmkgYmFpay4NCiAgIC0gTmFtdW4sIHNlbXVhIGRhdGEgXCggKDUwLCA1NSwgNjAsIDY1LCA3MCkgXCkgaGFydXMgZGlwZXJpa3NhLiAgDQogICAtICoqSGFzaWw6KiogU2VtdWEgbmlsYWkgXCggXGdlcSA1MCBcKSwgc2VoaW5nZ2EgKipDYWJhbmcgQSBtZW1lbnVoaSB0YXJnZXQuKioNCg0KMi4gKipDYWJhbmcgQjoqKg0KICAgLSBSYXRhLXJhdGEgXCggNjAgPiA1MCBcKSwgbWVudW5qdWtrYW4ga2luZXJqYSByYXRhLXJhdGEgYmFpay4NCiAgIC0gTmFtdW4sIGJlcmRhc2Fya2FuIGRhdGEgQ2FiYW5nIEIgMCw1MCw2MCw3MCw4MCBhZGEgbmlsYWkgXCggNDAgXCksIHlhbmcgXCggPCA1MCBcKS4gIA0KICAgLSAqKkhhc2lsOioqIFRpZGFrIHNlbXVhIGRhdGEgbWVtZW51aGkgdGFyZ2V0LCB0ZXRhcGkgcmF0YS1yYXRhIGRpIGF0YXMgdGFyZ2V0IG1lbnVuanVra2FuIGhhbnlhIHNlYmFnaWFuIGRhdGEgZ2FnYWwuICoqQ2FiYW5nIEIgdGlkYWsgZ2FnYWwgZGkgc2VtdWEgZGF0YW55YS4qKg0KDQozLiAqKkNhYmFuZyBDIDoqKg0KICAgLSBSYXRhLXJhdGEgXCggMzYgPCA1MCBcKSwgYXJ0aW55YSBraW5lcmphIGNhYmFuZyBpbmkgc2FuZ2F0IHJlbmRhaCBzZWNhcmEga2VzZWx1cnVoYW4uDQogICAtIFNlbXVhIGRhdGEgXCggKDMwLCAzMCwgMzUsIDQwLCA0NSkgXCkgZGlwZXJpa3NhLCBkYW4gc2VtdWFueWEgXCggPCA1MCBcKS4gIA0KICAgLSAqKkhhc2lsOioqIFNlbXVhIG5pbGFpIGdhZ2FsIG1lbmNhcGFpIHRhcmdldC4gKipDYWJhbmcgQyBnYWdhbCBkaSBzZW11YSBkYXRhbnlhLioqDQoNCjQuICoqQ2FiYW5nIEQgOioqDQogICAtIFJhdGEtcmF0YSBcKCA4MCA+IDUwIFwpLCBtZW51bmp1a2thbiBraW5lcmphIHNhbmdhdCBiYWlrLg0KICAgLSBTZW11YSBkYXRhIFwoICg3MCwgNzUsIDgwLCA4NSwgOTApIFwpIGRpcGVyaWtzYSwgZGFuIHNlbXVhbnlhIFwoIFxnZXEgNTAgXCkuICANCiAgIC0gKipIYXNpbDoqKiBTZW11YSBuaWxhaSBtZW1lbnVoaSB0YXJnZXQuICoqQ2FiYW5nIEQgbWVtZW51aGkgdGFyZ2V0LioqDQoNCg0KKipLZXNpbXB1bGFuIEphd2FiYW4gbm8gMzoqKg0KDQpSYXRhLXJhdGEgbWVtYmVyaWthbiBnYW1iYXJhbiBraW5lcmphIGtlc2VsdXJ1aGFuLCB0ZXRhcGkgKip0aWRhayBjdWt1cCB1bnR1ayBtZW5lbnR1a2FuIGFwYWthaCBzZWJ1YWggY2FiYW5nIGdhZ2FsIGRpIHNlbXVhIGRhdGFueWEqKi4gTWlzYWxueWE6DQoNCi0gQ2FiYW5nIEIgbWVtaWxpa2kgcmF0YS1yYXRhIFwoIDYwIFwpIChkaSBhdGFzIHRhcmdldCksIHRldGFwaSBzYWxhaCBzYXR1IGRhdGFueWEgKFwoIDQwIFwpKSBnYWdhbC4NCg0KLSBDYWJhbmcgQyBtZW1pbGlraSByYXRhLXJhdGEgXCggMzYgXCksIHlhbmcganVnYSBrb25zaXN0ZW4gZGVuZ2FuIHNlbXVhIGRhdGEgeWFuZyBnYWdhbC4NCg0KKipDYWJhbmcgeWFuZyBnYWdhbCBtZW5jYXBhaSB0YXJnZXQgZGkgc2VtdWEgZGF0YW55YSBhZGFsYWg6IF9DYWJhbmcgQ18uKiogIA0KUmF0YS1yYXRhIFwoIFxtdSA9IDM2IFwpIG1lbXBlcmt1YXQgYW5hbGlzaXMgYmFod2EgcGVuanVhbGFuIENhYmFuZyBDIGphdWggZGkgYmF3YWggdGFyZ2V0IHNlY2FyYSBrb25zaXN0ZW4uDQoNCiMjIDQuQnVhdGxhaCBkaWFncmFtIGtvdGFrIChib3ggcGxvdCkgdW50dWsgbWVtdmlzdWFsaXNhc2lrYW4gcGVueWViYXJhbiBkYXRhIHNldGlhcCBjYWJhbmcuDQoNClR1anVhbiBwZW1idWF0YW4gYm94cGxvdCBhZGFsYWggdW50dWsgbWVtYmVyaWthbiBnYW1iYXJhbiB2aXN1YWwgcGVueWViYXJhbiBkYXRhIHBlbmp1YWxhbiBkYXJpIHNldGlhcCBjYWJhbmcsIHRlcm1hc3VrIG5pbGFpIG1pbmltdW0sIG1ha3NpbXVtLCBtZWRpYW4sIGRhbiB2YXJpYXNpIGRhdGEgbWVsYWx1aSBrdWFydGlsLiBCb3hwbG90IGp1Z2EgbWVtYmFudHUgbWVuZGV0ZWtzaSBwZW5jaWxhbiAob3V0bGllcikgZGFuIG1lbXVkYWhrYW4gcGVyYmFuZGluZ2FuIGRpc3RyaWJ1c2kgcGVuanVhbGFuIGFudGFyIGNhYmFuZywgc2VoaW5nZ2EgcGVydXNhaGFhbiBkYXBhdCBtZW1haGFtaSBwb2xhIGRhbiBrYXJha3RlcmlzdGlrIGRhdGEgdW50dWsgbWVuZHVrdW5nIHBlbmdhbWJpbGFuIGtlcHV0dXNhbiBiaXNuaXMuDQoNCg0KLSAqKk91dGxpZXIqKiBkaWRlZmluaXNpa2FuIHNlYmFnYWkgZGF0YSB5YW5nIHRlcmxldGFrIGRpIGx1YXIgcmVudGFuZzoNCiAgXFsNCiAgXHRleHR7TG93ZXIgQm91bmR9ID0gUTEgLSAxLjUgXHRpbWVzIElRUg0KICBcXQ0KICBcWw0KICBcdGV4dHtVcHBlciBCb3VuZH0gPSBRMyArIDEuNSBcdGltZXMgSVFSDQogIFxdDQogIERpIG1hbmE6DQogIC0gXCggUTEgXCkgYWRhbGFoIGt1YXJ0aWwgcGVydGFtYSAobmlsYWkgZGkgYmF3YWggbWVkaWFuKSwNCiAgLSBcKCBRMyBcKSBhZGFsYWgga3VhcnRpbCBrZXRpZ2EgKG5pbGFpIGRpIGF0YXMgbWVkaWFuKSwNCiAgLSBcKCBJUVIgXCkgYWRhbGFoICoqaW50ZXJxdWFydGlsZSByYW5nZSoqLCB5YWl0dSBzZWxpc2loIGFudGFyYSBcKCBRMyBcKSBkYW4gXCggUTEgXCkuDQoNCkppa2EgZGF0YSBiZXJhZGEgZGkgbHVhciByZW50YW5nIHRlcnNlYnV0LCBtYWthIGRhdGEgdGVyc2VidXQgZGlhbmdnYXAgc2ViYWdhaSAqKm91dGxpZXIqKi4NCg0KIyMjIE1hcmkga2l0YSBoaXR1bmcgYXBha2FoIGFkYSBvdXRsaWVyIHBhZGEgc2V0aWFwIGNhYmFuZyBiZXJkYXNhcmthbiBkYXRhIHlhbmcgdGVsYWggZGliZXJpa2FuLg0KDQpCZXJpa3V0IGxhbmdrYWgtbGFuZ2thaG55YToNCg0KMS4gSGl0dW5nICoqUTEqKiwgKipRMyoqLCBkYW4gKipJUVIqKiB1bnR1ayBzZXRpYXAgY2FiYW5nLg0KMi4gVGVudHVrYW4gKipMb3dlciBCb3VuZCoqIGRhbiAqKlVwcGVyIEJvdW5kKiogdW50dWsgbWVuZGV0ZWtzaSBhcGFrYWggYWRhIGRhdGEgeWFuZyB0ZXJtYXN1ayBvdXRsaWVyLg0KDQpTYXlhIGFrYW4gbGFrdWthbiBwZXJoaXR1bmdhbiBpbmkgdW50dWsgc2V0aWFwIGNhYmFuZy4NCg0KIyMjIExhbmdrYWgtbGFuZ2thaCB1bnR1ayBNZW5lbnR1a2FuIE91dGxpZXI6DQoNCjEuICoqQ2FiYW5nIEE6KioNCiAgIC0gRGF0YTogXCggNTAsIDU1LCA2MCwgNjUsIDcwIFwpDQogICAtIFVydXRhbiBEYXRhOiBcKCA1MCwgNTUsIDYwLCA2NSwgNzAgXCkNCiAgIC0gKipNZWRpYW4gKFEyKToqKiA2MA0KICAgLSAqKlExIChLdWFydGlsIHBlcnRhbWEpOioqIDU1DQogICAtICoqUTMgKEt1YXJ0aWwga2V0aWdhKToqKiA2NQ0KICAgLSAqKklRUiAoSW50ZXJxdWFydGlsZSBSYW5nZSk6KiogXCggUTMgLSBRMSA9IDY1IC0gNTUgPSAxMCBcKQ0KICAgLSAqKkxvd2VyIEJvdW5kOioqIFwoIFExIC0gMS41IFx0aW1lcyBJUVIgPSA1NSAtIDEuNSBcdGltZXMgMTAgPSA0MCBcKQ0KICAgLSAqKlVwcGVyIEJvdW5kOioqIFwoIFEzICsgMS41IFx0aW1lcyBJUVIgPSA2NSArIDEuNSBcdGltZXMgMTAgPSA4MCBcKQ0KICAgLSAqKlJlbnRhbmcgRGF0YSAoNDAgLSA4MCk6KiogU2VtdWEgZGF0YSBiZXJhZGEgZGFsYW0gcmVudGFuZyBpbmksIGphZGkgKip0aWRhayBhZGEgb3V0bGllcioqLg0KICAgDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KIyBNZW11YXQgbGlicmFyeSBwbG90bHkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGENCmRhdGEgPC0gYyg1MCwgNTUsIDYwLCA2NSwgNzApDQoNCiMgTWVtYnVhdCBib3hwbG90IGludGVyYWt0aWYNCmZpZyA8LSBwbG90X2x5KHkgPSBkYXRhLCB0eXBlID0gImJveCIsIA0KICAgICAgICAgICAgICAgYm94cG9pbnRzID0gImFsbCIsIA0KICAgICAgICAgICAgICAgaml0dGVyID0gMC4zLCANCiAgICAgICAgICAgICAgIHBvaW50cG9zID0gLTEuOCkgJT4lDQogbGF5b3V0KHRpdGxlID0gIkJveHBsb3QgSW50ZXJha3RpZiB1bnR1ayBEYXRhIENhYmFuZyBBIiwNCiAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIk5pbGFpIiksDQogICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJDYWJhbmcgQSIpKQ0KDQojIE1lbmFtcGlsa2FuIGJveHBsb3QNCmZpZw0KDQpgYGANCg0KICAgDQoNCjIuICoqQ2FiYW5nIEI6KioNCiAgIC0gRGF0YTogXCggNDAsIDUwLCA2MCwgNzAsIDgwIFwpDQogICAtIFVydXRhbiBEYXRhOiBcKCA0MCwgNTAsIDYwLCA3MCwgODAgXCkNCiAgIC0gKipNZWRpYW4gKFEyKToqKiA2MA0KICAgLSAqKlExIChLdWFydGlsIHBlcnRhbWEpOioqIDUwDQogICAtICoqUTMgKEt1YXJ0aWwga2V0aWdhKToqKiA3MA0KICAgLSAqKklRUjoqKiBcKCBRMyAtIFExID0gNzAgLSA1MCA9IDIwIFwpDQogICAtICoqTG93ZXIgQm91bmQ6KiogXCggUTEgLSAxLjUgXHRpbWVzIElRUiA9IDUwIC0gMS41IFx0aW1lcyAyMCA9IDIwIFwpDQogICAtICoqVXBwZXIgQm91bmQ6KiogXCggUTMgKyAxLjUgXHRpbWVzIElRUiA9IDcwICsgMS41IFx0aW1lcyAyMCA9IDEwMCBcKQ0KICAgLSAqKlJlbnRhbmcgRGF0YSAoMjAgLSAxMDApOioqIFNlbXVhIGRhdGEgYmVyYWRhIGRhbGFtIHJlbnRhbmcgaW5pLCBqYWRpICoqdGlkYWsgYWRhIG91dGxpZXIqKi4NCiAgIA0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIE1lbXVhdCBsaWJyYXJ5IHBsb3RseQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YQ0KZGF0YSA8LSBjKDQwLCA1MCwgNjAsIDcwLCA4MCkNCg0KIyBNZW1idWF0IGJveHBsb3QgaW50ZXJha3RpZg0KZmlnIDwtIHBsb3RfbHkoeSA9IGRhdGEsIHR5cGUgPSAiYm94IiwgDQogICAgICAgICAgICAgICAgYm94cG9pbnRzID0gImFsbCIsIA0KICAgICAgICAgICAgICAgIGppdHRlciA9IDAuMywgDQogICAgICAgICAgICAgICAgcG9pbnRwb3MgPSAtMS44KSAlPiUNCiAgbGF5b3V0KHRpdGxlID0gIkJveHBsb3QgSW50ZXJha3RpZiB1bnR1ayBEYXRhIENhYmFuZyBCIiwNCiAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJOaWxhaSIpLA0KICAgICAgICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIkNhYmFuZyBCIikpDQoNCiMgTWVuYW1waWxrYW4gYm94cGxvdA0KZmlnDQoNCmBgYA0KICAgDQoNCjMuICoqQ2FiYW5nIEM6KioNCiAgIC0gRGF0YTogXCggMzAsIDMwLCAzNSwgNDAsIDQ1IFwpDQogICAtIFVydXRhbiBEYXRhOiBcKCAzMCwgMzAsIDM1LCA0MCwgNDUgXCkNCiAgIC0gKipNZWRpYW4gKFEyKToqKiAzNQ0KICAgLSAqKlExIChLdWFydGlsIHBlcnRhbWEpOioqIDMwDQogICAtICoqUTMgKEt1YXJ0aWwga2V0aWdhKToqKiA0MA0KICAgLSAqKklRUjoqKiBcKCBRMyAtIFExID0gNDAgLSAzMCA9IDEwIFwpDQogICAtICoqTG93ZXIgQm91bmQ6KiogXCggUTEgLSAxLjUgXHRpbWVzIElRUiA9IDMwIC0gMS41IFx0aW1lcyAxMCA9IDE1IFwpDQogICAtICoqVXBwZXIgQm91bmQ6KiogXCggUTMgKyAxLjUgXHRpbWVzIElRUiA9IDQwICsgMS41IFx0aW1lcyAxMCA9IDU1IFwpDQogICAtICoqUmVudGFuZyBEYXRhICgxNSAtIDU1KToqKiBTZW11YSBkYXRhIGJlcmFkYSBkYWxhbSByZW50YW5nIGluaSwgamFkaSAqKnRpZGFrIGFkYSBvdXRsaWVyKiouDQogICANCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW11YXQgbGlicmFyeSBwbG90bHkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGENCmRhdGEgPC0gYygzMCwgMzAsIDM1LCA0MCwgNDUpDQoNCiMgTWVtYnVhdCBib3hwbG90IGludGVyYWt0aWYNCmZpZyA8LSBwbG90X2x5KHkgPSBkYXRhLCB0eXBlID0gImJveCIsIA0KICAgICAgICAgICAgICAgIGJveHBvaW50cyA9ICJhbGwiLCANCiAgICAgICAgICAgICAgICBqaXR0ZXIgPSAwLjMsIA0KICAgICAgICAgICAgICAgIHBvaW50cG9zID0gLTEuOCkgJT4lDQogIGxheW91dCh0aXRsZSA9ICJCb3hwbG90IEludGVyYWt0aWYgdW50dWsgRGF0YSBDYWJhbmcgQyIsDQogICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiTmlsYWkiKSwNCiAgICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJDYWJhbmcgQyIpKQ0KDQojIE1lbmFtcGlsa2FuIGJveHBsb3QNCmZpZw0KYGBgDQogICANCg0KNC4gKipDYWJhbmcgRDoqKg0KICAgLSBEYXRhOiBcKCA3MCwgNzUsIDgwLCA4NSwgOTAgXCkNCiAgIC0gVXJ1dGFuIERhdGE6IFwoIDcwLCA3NSwgODAsIDg1LCA5MCBcKQ0KICAgLSAqKk1lZGlhbiAoUTIpOioqIDgwDQogICAtICoqUTEgKEt1YXJ0aWwgcGVydGFtYSk6KiogNzUNCiAgIC0gKipRMyAoS3VhcnRpbCBrZXRpZ2EpOioqIDg1DQogICAtICoqSVFSOioqIFwoIFEzIC0gUTEgPSA4NSAtIDc1ID0gMTAgXCkNCiAgIC0gKipMb3dlciBCb3VuZDoqKiBcKCBRMSAtIDEuNSBcdGltZXMgSVFSID0gNzUgLSAxLjUgXHRpbWVzIDEwID0gNjAgXCkNCiAgIC0gKipVcHBlciBCb3VuZDoqKiBcKCBRMyArIDEuNSBcdGltZXMgSVFSID0gODUgKyAxLjUgXHRpbWVzIDEwID0gMTAwIFwpDQogICAtICoqUmVudGFuZyBEYXRhICg2MCAtIDEwMCk6KiogU2VtdWEgZGF0YSBiZXJhZGEgZGFsYW0gcmVudGFuZyBpbmksIGphZGkgKip0aWRhayBhZGEgb3V0bGllcioqLg0KICAgDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGENCmRhdGFfY2FiYW5nX2QgPC0gYyg3MCwgNzUsIDgwLCA4NSwgOTApDQoNCiMgTWVtYnVhdCBib3hwbG90DQpmaWcgPC0gcGxvdF9seSh5ID0gZGF0YV9jYWJhbmdfZCwgdHlwZSA9ICJib3giLCANCiAgICAgICAgICAgICAgYm94cG9pbnRzID0gImFsbCIsIGppdHRlciA9IDAuMywgcG9pbnRwb3MgPSAtMS44KQ0KDQojIE1lbmFtYmFoa2FuIGxheW91dA0KZmlnIDwtIGZpZyAlPiUgbGF5b3V0KHRpdGxlID0gIkJveHBsb3QgQ2FiYW5nIEQiLA0KICAgICAgICAgICAgICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIk5pbGFpIiksDQogICAgICAgICAgICAgICAgICAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiQ2FiYW5nIEQiKSkNCg0KIyBNZW5hbXBpbGthbiBib3hwbG90DQpmaWcNCmBgYA0KICAgDQoNCkJlcmlrdXQgaW5pIG1lcnVwYWthbiBkYXRhIGtlc2VsdXJ1aGFuIA0KDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YSBwZW5qdWFsYW4NCmRhdGFfcGVuanVhbGFuIDwtIGRhdGEuZnJhbWUoDQogIENhYmFuZyA9IHJlcChjKCJBIiwgIkIiLCAiQyIsICJEIiksIGVhY2ggPSA1KSwNCiAgUGVuanVhbGFuID0gYyg1MCwgNTUsIDYwLCA2NSwgNzAsIA0KICAgICAgICAgICAgICAgIDQwLCA1MCwgNjAsIDcwLCA4MCwNCiAgICAgICAgICAgICAgICAzMCwgMzAsIDM1LCA0MCwgNDUsDQogICAgICAgICAgICAgICAgNzAsIDc1LCA4MCwgODUsIDkwKQ0KKQ0KDQojIE1lbWJ1YXQgYm94IHBsb3QNCmZpZyA8LSBwbG90X2x5KGRhdGFfcGVuanVhbGFuLCB5ID0gflBlbmp1YWxhbiwgY29sb3IgPSB+Q2FiYW5nLCB0eXBlID0gImJveCIsDQogICAgICAgICAgICAgICBib3hwb2ludHMgPSAiYWxsIiwgaml0dGVyID0gMC41LCBwb2ludHBvcyA9IC0xLjgpDQoNCmZpZyA8LSBmaWcgJT4lIGxheW91dCgNCiAgdGl0bGUgPSAiRGlhZ3JhbSBLb3RhayAoQm94IFBsb3QpIFBlbnllYmFyYW4gUGVuanVhbGFuIiwNCiAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIlBlbmp1YWxhbiAoSnV0YSBSdXBpYWgpIiksDQogIHhheGlzID0gbGlzdCh0aXRsZSA9ICJDYWJhbmciKQ0KKQ0KDQpmaWcNCg0KYGBgDQoNCg0KIyMgNS5KaWthIEFuZGEgYWRhbGFoIG1hbmFqZXIgcGVydXNhaGFhbiwgYmFnYWltYW5hIEFuZGEgYWthbiBtZW5nZ3VuYWthbiBpbmZvcm1hc2kgaW5pIHVudHVrIG1lcmVuY2FuYWthbiBzdHJhdGVnaSBwZW5pbmdrYXRhbiBwZW5qdWFsYW4/DQoNClNlYmFnYWkgbWFuYWplciBwZXJ1c2FoYWFuLCBpbmZvcm1hc2kgeWFuZyBkaXBlcm9sZWggZGFyaSBhbmFsaXNpcyBkYXRhIHBlbmp1YWxhbiBrZWVtcGF0IGNhYmFuZyAoQSwgQiwgQywgZGFuIEQpIHNhbmdhdCBiZXJoYXJnYSB1bnR1ayBtZXJlbmNhbmFrYW4gc3RyYXRlZ2kgcGVuaW5na2F0YW4gcGVuanVhbGFuLiBCZXJpa3V0IGFkYWxhaCBsYW5na2FoLWxhbmdrYWggZGFuIHN0cmF0ZWdpIHlhbmcgZGFwYXQgZGlhbWJpbCBiZXJkYXNhcmthbiBoYXNpbCBhbmFsaXNpczoNCg0KMS4gSWRlbnRpZmlrYXNpIEtpbmVyamEgQ2FiYW5nDQpDYWJhbmcgQzogS2luZXJqYSB0ZXJlbmRhaCBkZW5nYW4gcmF0YS1yYXRhIHBlbmp1YWxhbiAkKCBcbXUgPSAzNiApJCBqdXRhIHJ1cGlhaCBkYW4gc3RhbmRhciBkZXZpYXNpIHRlcmtlY2lsICQoIFxzaWdtYSBcYXBwcm94IDUuODMgKSQuIEluaSBtZW51bmp1a2thbiBwZW5qdWFsYW4geWFuZyBrb25zaXN0ZW4gZGkgYmF3YWggdGFyZ2V0Lg0KQ2FiYW5nIEI6IFJhdGEtcmF0YSBwZW5qdWFsYW4gJCggXG11ID0gNjAgKSQganV0YSBydXBpYWgsIHRldGFwaSB0ZXJkYXBhdCBuaWxhaSB5YW5nIGphdWggZGkgYmF3YWggdGFyZ2V0ICh5YWl0dSAkKCA0MCApJCBqdXRhIHJ1cGlhaCkuIEluaSBtZW51bmp1a2thbiBwb3RlbnNpIHVudHVrIHBlcmJhaWthbi4NCkNhYmFuZyBBIGRhbiBEOiBLaW5lcmphIGJhaWsgZGVuZ2FuIHJhdGEtcmF0YSBwZW5qdWFsYW4gbWFzaW5nLW1hc2luZyAkKCBcbXUgPSA2MCApJCBkYW4gJCggXG11ID0gODAgKSQganV0YSBydXBpYWguDQoNCjIuICoqRm9rdXMgcGFkYSBDYWJhbmcgZGVuZ2FuIEtpbmVyamEgVGVyZW5kYWgqKg0KU3RyYXRlZ2kgdW50dWsgQ2FiYW5nIEM6DQpBbmFsaXNpcyBQZW55ZWJhYjogTGFrdWthbiBhbmFsaXNpcyBtZW5kYWxhbSB1bnR1ayBtZW1haGFtaSBwZW55ZWJhYiByZW5kYWhueWEgcGVuanVhbGFuLCBzZXBlcnRpIGt1cmFuZ255YSBwcm9tb3NpIGF0YXUgcHJvZHVrIHlhbmcgdGlkYWsgc2VzdWFpLg0KUGVsYXRpaGFuIGRhbiBQZW5nZW1iYW5nYW46IEJlcmlrYW4gcGVsYXRpaGFuIGtlcGFkYSBzdGFmIHVudHVrIG1lbmluZ2thdGthbiBrZXRlcmFtcGlsYW4gcGVuanVhbGFuIGRhbiBwZWxheWFuYW4gcGVsYW5nZ2FuLg0KUHJvbW9zaSBkYW4gRGlza29uOiBMdW5jdXJrYW4ga2FtcGFueWUgcHJvbW9zaSBhdGF1IGRpc2tvbiB1bnR1ayBtZW5hcmlrIGxlYmloIGJhbnlhayBwZWxhbmdnYW4uDQpVamkgQ29iYSBQcm9kdWsgQmFydTogUGVya2VuYWxrYW4gcHJvZHVrIGJhcnUgeWFuZyBsZWJpaCBzZXN1YWkgZGVuZ2FuIGtlYnV0dWhhbiBwYXNhci4NCg0KMy4gKipPcHRpbWFsa2FuIEtpbmVyamEgQ2FiYW5nIExhaW4qKg0KQ2FiYW5nIEEgZGFuIEQ6DQpBbmFsaXNpcyBQYXNhcjogTGFrdWthbiBhbmFsaXNpcyB1bnR1ayBtZW1haGFtaSBmYWt0b3Iga2VzdWtzZXNhbiBjYWJhbmcgaW5pLg0KUmVwbGlrYXNpIFN0cmF0ZWdpIFN1a3NlczogVGVyYXBrYW4gc3RyYXRlZ2kgeWFuZyBiZXJoYXNpbCBkaSBDYWJhbmcgQSBkYW4gRCBrZSBDYWJhbmcgQyBkYW4gQi4NClBlbmluZ2thdGFuIExheWFuYW4gUGVsYW5nZ2FuOiBQYXN0aWthbiBzZW11YSBjYWJhbmcgbWVtaWxpa2kgc3RhbmRhciBsYXlhbmFuIHBlbGFuZ2dhbiB5YW5nIHRpbmdnaS4NCg0KNC4gKipNb25pdG9yaW5nIGRhbiBFdmFsdWFzaSoqDQpQZW5ndWt1cmFuIEtpbmVyamE6IFRldGFwa2FuIEtQSSAoS2V5IFBlcmZvcm1hbmNlIEluZGljYXRvcnMpIHVudHVrIHNldGlhcCBjYWJhbmcgZGFuIGxha3VrYW4gcGVtYW50YXVhbiBzZWNhcmEgYmVya2FsYS4NCkZlZWRiYWNrIFBlbGFuZ2dhbjogS3VtcHVsa2FuIHVtcGFuIGJhbGlrIGRhcmkgcGVsYW5nZ2FuIHVudHVrIG1lbWFoYW1pIGtlcHVhc2FuIG1lcmVrYS4NClBlbnllc3VhaWFuIFN0cmF0ZWdpOiBMYWt1a2FuIHBlbnllc3VhaWFuIHN0cmF0ZWdpIGJlcmRhc2Fya2FuIGhhc2lsIG1vbml0b3JpbmcuDQoNCjUuICoqRGl2ZXJzaWZpa2FzaSBkYW4gSW5vdmFzaSoqDQpEaXZlcnNpZmlrYXNpIFByb2R1azogUGVydGltYmFuZ2thbiB1bnR1ayBtZW1wZXJrZW5hbGthbiBwcm9kdWsgYmFydSBhdGF1IGxheWFuYW4gdGFtYmFoYW4uDQpJbm92YXNpIFBlbWFzYXJhbjogR3VuYWthbiBtZWRpYSBzb3NpYWwgZGFuIHBsYXRmb3JtIGRpZ2l0YWwgdW50dWsgbWVuaW5na2F0a2FuIHZpc2liaWxpdGFzIGRhbiBtZW5hcmlrIHBlbGFuZ2dhbiBiYXJ1LCB0ZXJ1dGFtYSBkaSBDYWJhbmcgQy4NCktlc2ltcHVsYW4NCkRlbmdhbiBtZW5nZ3VuYWthbiBpbmZvcm1hc2kgZGFyaSBhbmFsaXNpcyBkYXRhIHBlbmp1YWxhbiwgcGVydXNhaGFhbiBkYXBhdCBtZXJ1bXVza2FuIHN0cmF0ZWdpIHlhbmcgbGViaWggdGVyYXJhaCBkYW4gZWZla3RpZiB1bnR1ayBtZW5pbmdrYXRrYW4gcGVuanVhbGFuIGRpIHNlbXVhIGNhYmFuZy4gRm9rdXMgdXRhbWEgaGFydXMgZGliZXJpa2FuIGtlcGFkYSBDYWJhbmcgQyB1bnR1ayBtZW5pbmdrYXRrYW4ga2luZXJqYW55YSwgc2VtZW50YXJhIGp1Z2EgbWVuZ29wdGltYWxrYW4ga2luZXJqYSBjYWJhbmcgbGFpbiB5YW5nIHN1ZGFoIGJhaWsuIE1lbGFsdWkgcGVuZGVrYXRhbiB5YW5nIHRlcmludGVncmFzaSBkYW4gYmVyYmFzaXMgZGF0YSwgcGVydXNhaGFhbiBkYXBhdCBtZW5pbmdrYXRrYW4ga2luZXJqYSBwZW5qdWFsYW5ueWEgc2VjYXJhIGtlc2VsdXJ1aGFuLg0KDQoNCi0tLQ0KDQojIExhdGloYW4gMg0KDQpQZXJ1c2FoYWFuIFhZWiBtZW5nZWxvbGEgcGVuZ2lyaW1hbiBiYXJhbmcga2UgYmVyYmFnYWkgd2lsYXlhaCBkZW5nYW4gbWVuZ2d1bmFrYW4gYmVyYmFnYWkgamVuaXMgdHJhbnNwb3J0YXNpLiBTZXRpYXAgcGVuZ2lyaW1hbiBtZWxpYmF0a2FuIGJpYXlhIHRyYW5zcG9ydGFzaSwgd2FrdHUgeWFuZyBkaWJ1dHVoa2FuLCBkYW4ganVtbGFoIGJhcmFuZyB5YW5nIGRpa2lyaW0uIEJlcmlrdXQgYWRhbGFoIGRhdGEgdGVya2FpdCBwZW5naXJpbWFuIGJhcmFuZyBiZXJkYXNhcmthbiB3aWxheWFoIGRhbsKgamVuaXPCoGJhcmFuZzoNCg0KfCAqKldpbGF5YWgqKiB8ICoqSmVuaXMgQmFyYW5nKiogfCAqKkp1bWxhaCBCYXJhbmcgKHVuaXQpKiogfCAqKldha3R1IFBlbmdpcmltYW4gKGphbSkqKiB8ICoqQmlheWEgcGVyIFVuaXQgKFJwKSoqIHwNCnwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCBVdGFyYSAgICAgICB8IEVsZWt0cm9uaWsgICAgICAgfCAyMDAgICAgICAgICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1LDAwMCAgICAgICAgICAgICAgICAgIHwNCnwgU2VsYXRhbiAgICAgfCBQYWthaWFuICAgICAgICAgIHwgMTUwICAgICAgICAgICAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LDAwMCAgICAgICAgICAgICAgICAgICB8DQp8IFRpbXVyICAgICAgIHwgTWFrYW5hbiAgICAgICAgICB8IDE4MCAgICAgICAgICAgICAgICAgICAgICB8IDYgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAsMDAwICAgICAgICAgICAgICAgICAgfA0KfCBCYXJhdCAgICAgICB8IFBlcmFsYXRhbiAgICAgICAgfCAxMjAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyLDAwMCAgICAgICAgICAgICAgICAgIHwNCnwgVGVuZ2FoICAgICAgfCBFbGVrdHJvbmlrICAgICAgIHwgMjUwICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNCwwMDAgICAgICAgICAgICAgICAgICB8DQp8IFV0YXJhICAgICAgIHwgUGFrYWlhbiAgICAgICAgICB8IDMwMCAgICAgICAgICAgICAgICAgICAgICB8IDkgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOCw1MDAgICAgICAgICAgICAgICAgICAgfA0KfCBTZWxhdGFuICAgICB8IE1ha2FuYW4gICAgICAgICAgfCAyMjAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDksNTAwICAgICAgICAgICAgICAgICAgIHwNCnwgVGltdXIgICAgICAgfCBQZXJhbGF0YW4gICAgICAgIHwgMTQwICAgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMSwwMDAgICAgICAgICAgICAgICAgICB8DQp8IEJhcmF0ICAgICAgIHwgRWxla3Ryb25payAgICAgICB8IDE4MCAgICAgICAgICAgICAgICAgICAgICB8IDYgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQsNTAwICAgICAgICAgICAgICAgICAgfA0KfCBUZW5nYWggICAgICB8IFBha2FpYW4gICAgICAgICAgfCAzNTAgICAgICAgICAgICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcsODAwICAgICAgICAgICAgICAgICAgIHwNCnwgVXRhcmEgICAgICAgfCBQZXJhbGF0YW4gICAgICAgIHwgMTcwICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMiwwMDAgICAgICAgICAgICAgICAgICB8DQp8IFNlbGF0YW4gICAgIHwgRWxla3Ryb25payAgICAgICB8IDI1MCAgICAgICAgICAgICAgICAgICAgICB8IDYgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTYsMDAwICAgICAgICAgICAgICAgICAgfA0KfCBUaW11ciAgICAgICB8IFBha2FpYW4gICAgICAgICAgfCAxOTAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDgsMjAwICAgICAgICAgICAgICAgICAgIHwNCnwgQmFyYXQgICAgICAgfCBNYWthbmFuICAgICAgICAgIHwgMTMwICAgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMCw1MDAgICAgICAgICAgICAgICAgICB8DQp8IFRlbmdhaCAgICAgIHwgUGVyYWxhdGFuICAgICAgICB8IDE4MCAgICAgICAgICAgICAgICAgICAgICB8IDUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEsNTAwICAgICAgICAgICAgICAgICAgfA0KDQojIyAxLiBBbmFsaXNpcyBFZmlzaWVuc2kgUGVuZ2lyaW1hbjoNCg0KIyMjIDEuMeKAoiBWaXN1YWxpc2FzaWthbiBwZW5naXJpbWFuIGJhcmFuZyBiZXJkYXNhcmthbiBqdW1sYWggYmFyYW5nLCB3YWt0dSBwZW5naXJpbWFuLCBkYW4gYmlheWEgcGVyIHVuaXQgZGVuZ2FuIG1lbmdndW5ha2FuIHBsb3QgM0QuDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIEluc3RhbGFzaSBsaWJyYXJ5IGppa2EgYmVsdW0gdGVycGFzYW5nDQppZiAoIXJlcXVpcmVOYW1lc3BhY2UoInBsb3RseSIsIHF1aWV0bHkgPSBUUlVFKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKCJwbG90bHkiKQ0KfQ0KDQojIE1lbXVhdCBsaWJyYXJ5IHBsb3RseQ0KbGlicmFyeShwbG90bHkpDQoNCiMgTWVtYnVhdCBEYXRhIEZyYW1lIHVudHVrIHBlbmdpcmltYW4NCmRhdGFfcGVuZ2lyaW1hbiA8LSBkYXRhLmZyYW1lKA0KICBXaWxheWFoID0gYygiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiLCAiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiLCAiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiKSwNCiAgSmVuaXNfQmFyYW5nID0gYygiRWxla3Ryb25payIsICJQYWthaWFuIiwgIk1ha2FuYW4iLCAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgIlBha2FpYW4iLCAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIpLA0KICBKdW1sYWhfQmFyYW5nID0gYygyMDAsIDE1MCwgMTgwLCAxMjAsIDI1MCwgMzAwLCAyMjAsIDE0MCwgMTgwLCAzNTAsIDE3MCwgMjUwLCAxOTAsIDEzMCwgMTgwKSwNCiAgV2FrdHVfUGVuZ2lyaW1hbiA9IGMoNSwgOCwgNiwgNywgNCwgOSwgNywgNSwgNiwgOCwgNCwgNiwgNywgNSwgNSksDQogIEJpYXlhX1Blcl9Vbml0ID0gYygxNTAwMCwgODAwMCwgMTAwMDAsIDEyMDAwLCAxNDAwMCwgODUwMCwgOTUwMCwgMTEwMDAsIDE0NTAwLCA3ODAwLCAxMjAwMCwgMTYwMDAsIDgyMDAsIDEwNTAwLCAxMTUwMCkNCikNCg0KIyBNZW1idWF0IFBsb3QgM0QNCnBsb3RfbHkoDQogIGRhdGEgPSBkYXRhX3BlbmdpcmltYW4sDQogIHggPSB+SnVtbGFoX0JhcmFuZywNCiAgeSA9IH5XYWt0dV9QZW5naXJpbWFuLA0KICB6ID0gfkJpYXlhX1Blcl9Vbml0LA0KICBjb2xvciA9IH5XaWxheWFoLA0KICBzeW1ib2wgPSB+SmVuaXNfQmFyYW5nLA0KICB0eXBlID0gInNjYXR0ZXIzZCIsDQogIG1vZGUgPSAibWFya2VycyIsDQogIG1hcmtlciA9IGxpc3Qoc2l6ZSA9IDYpDQopICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiVmlzdWFsaXNhc2kgM0QgUGVuZ2lyaW1hbiBCYXJhbmciLA0KICAgIHNjZW5lID0gbGlzdCgNCiAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJKdW1sYWggQmFyYW5nICh1bml0KSIpLA0KICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIldha3R1IFBlbmdpcmltYW4gKGphbSkiKSwNCiAgICAgIHpheGlzID0gbGlzdCh0aXRsZSA9ICJCaWF5YSBwZXIgVW5pdCAoUnApIikNCiAgICApDQogICkNCg0KYGBgDQoNCg0KIyMjIDEuMuKAoiBUZW50dWthbiB3aWxheWFoIG1hbmEgeWFuZyBtZW1pbGlraSBlZmlzaWVuc2kgcGVuZ2lyaW1hbiB0ZXJlbmRhaCBiZXJkYXNhcmthbiBiaWF5YSBwZXIgdW5pdCBkYW4gd2FrdHUgcGVuZ2lyaW1hbi4NCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoZHBseXIpDQoNCiMgRGF0YQ0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBXaWxheWFoID0gYygiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiLCAiVXRhcmEiLCAiU2VsYXRhbiIsIA0KICAgICAgICAgICAgICAiVGltdXIiLCAiQmFyYXQiLCAiVGVuZ2FoIiwgIlV0YXJhIiwgIlNlbGF0YW4iLCAiVGltdXIiLCAiQmFyYXQiLCAiVGVuZ2FoIiksDQogIEplbmlzX0JhcmFuZyA9IGMoIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgDQogICAgICAgICAgICAgICAgICAgIlBha2FpYW4iLCAiTWFrYW5hbiIsICJQZXJhbGF0YW4iLCAiRWxla3Ryb25payIsICJQYWthaWFuIiwgDQogICAgICAgICAgICAgICAgICAgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgIlBha2FpYW4iLCAiTWFrYW5hbiIsICJQZXJhbGF0YW4iKSwNCiAgSnVtbGFoX0JhcmFuZyA9IGMoMjAwLCAxNTAsIDE4MCwgMTIwLCAyNTAsIDMwMCwgMjIwLCAxNDAsIDE4MCwgMzUwLCAxNzAsIDI1MCwgMTkwLCAxMzAsIDE4MCksDQogIFdha3R1X1BlbmdpcmltYW4gPSBjKDUsIDgsIDYsIDcsIDQsIDksIDcsIDUsIDYsIDgsIDQsIDYsIDcsIDUsIDUpLA0KICBCaWF5YV9QZXJfVW5pdCA9IGMoMTUwMDAsIDgwMDAsIDEwMDAwLCAxMjAwMCwgMTQwMDAsIDg1MDAsIDk1MDAsIDExMDAwLCAxNDUwMCwgDQogICAgICAgICAgICAgICAgICAgICA3ODAwLCAxMjAwMCwgMTYwMDAsIDgyMDAsIDEwNTAwLCAxMTUwMCkNCikNCg0KIyBNZW5hbWJhaGthbiBrb2xvbSBCaWF5YSBUb3RhbA0KZGF0YSA8LSBkYXRhICU+JQ0KICBtdXRhdGUoQmlheWFfVG90YWwgPSBKdW1sYWhfQmFyYW5nICogQmlheWFfUGVyX1VuaXQpDQoNCiMgTWVuZ2hpdHVuZyB0b3RhbCBiaWF5YSBkYW4gZWZpc2llbnNpIGJpYXlhIHBlciB3aWxheWFoDQplZmlzaWVuc2kgPC0gZGF0YSAlPiUNCiAgZ3JvdXBfYnkoV2lsYXlhaCkgJT4lDQogIHN1bW1hcmlzZSgNCiAgICBUb3RhbF9CaWF5YSA9IHN1bShCaWF5YV9Ub3RhbCksDQogICAgRWZpc2llbnNpX0JpYXlhID0gc3VtKEJpYXlhX1RvdGFsKSAvIHN1bShKdW1sYWhfQmFyYW5nKQ0KICApDQoNCiMgT3V0cHV0IGVmaXNpZW5zaQ0KcHJpbnQoZWZpc2llbnNpKQ0KDQpgYGANCg0KKip3aWxheWFoIEJhcmF0IHlhbmcgbWVtaWxpa2kgZWZpc2llbnNpIHBlbmdpcmltYW4gdGVyZW5kYWggYmVyZGFzYXJrYW4gYmlheWEgcGVyIHVuaXQgZGFuIHdha3R1IHBlbmdpcmltYW4uKioNCg0KU2VtYWtpbiBtYWhhbCBiaWF5YSBwZXIgdW5pdCBzdWF0dSB3aWxheWFoLCBtYWthIHdpbGF5YWggdGVyc2VidXQgc2VtYWtpbiAqKnRpZGFrIGVmaXNpZW4qKiBkYWxhbSBwZW5naXJpbWFuIGJhcmFuZy4gSGFsIGluaSBkaWthcmVuYWthbiB0aW5nZ2lueWEgYmlheWEgcGVyIHVuaXQgbWVudW5qdWtrYW4gYmFod2EgcGVydXNhaGFhbiBtZW5nZWx1YXJrYW4gbGViaWggYmFueWFrIGJpYXlhIHVudHVrIHNldGlhcCB1bml0IGJhcmFuZyB5YW5nIGRpa2lyaW1rYW4sIHNlaGluZ2dhIGVmaXNpZW5zaSBvcGVyYXNpb25hbCBtZW5qYWRpIHJlbmRhaC4gQmVyZGFzYXJrYW4gZGF0YToNCg0KfCAqKldpbGF5YWgqKiB8ICoqRWZpc2llbnNpIEJpYXlhIChScC91bml0KSoqIHwgKipLZXRlcmFuZ2FuKiogICAgICAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IEJhcmF0ICAgICAgIHwgMTIsNTkzICAgICAgICAgICAgICAgICAgICAgICAgfCAqKlBhbGluZyB0aWRhayBlZmlzaWVuKiogKG1haGFsKSAgICB8DQp8IFNlbGF0YW4gICAgIHwgMTEsNzU4ICAgICAgICAgICAgICAgICAgICAgICAgfCBLdXJhbmcgZWZpc2llbiAgICAgICAgICAgICAgICAgICAgIHwNCnwgVXRhcmEgICAgICAgfCAxMSwzMjggICAgICAgICAgICAgICAgICAgICAgICB8IFJlbGF0aWYgZWZpc2llbiAgICAgICAgICAgICAgICAgICAgfA0KfCBUZW5nYWggICAgICB8IDEwLDY0MSAgICAgICAgICAgICAgICAgICAgICAgIHwgQ3VrdXAgZWZpc2llbiAgICAgICAgICAgICAgICAgICAgICB8DQp8IFRpbXVyICAgICAgIHwgOSw2MDQgICAgICAgICAgICAgICAgICAgICAgICAgfCAqKlBhbGluZyBlZmlzaWVuKiogKG11cmFoKSAgICAgICAgIHwNCg0KV2lsYXlhaCAqKkJhcmF0KiogbWVtaWxpa2kgYmlheWEgcmF0YS1yYXRhIHBlciB1bml0IHRlcnRpbmdnaSAoKipScCAxMiw1OTMvdW5pdCoqKSwgeWFuZyBiZXJhcnRpIHdpbGF5YWggaW5pIG1lbWJ1dHVoa2FuIHBlcmhhdGlhbiBraHVzdXMgdW50dWsgcGVuZ29wdGltYWxhbi4gU2ViYWxpa255YSwgd2lsYXlhaCAqKlRpbXVyKiogYWRhbGFoIHlhbmcgcGFsaW5nIGVmaXNpZW4sIGRlbmdhbiBiaWF5YSByYXRhLXJhdGEgdGVyZW5kYWggKCoqUnAgOSw2MDQvdW5pdCoqKS4NCg0KIyMjIEltcGxpa2FzaQ0KDQoxLiBCaWF5YSB5YW5nIGxlYmloIG1haGFsIGRpIHdpbGF5YWggQmFyYXQgYmVyYXJ0aSBwZW5naXJpbWFuIGxlYmloIHRpZGFrIGVmaXNpZW4gZGliYW5kaW5na2FuIHdpbGF5YWggbGFpbi4NCjIuIFVudHVrIG1lbmluZ2thdGthbiBlZmlzaWVuc2ksIHBlcnVzYWhhYW4gcGVybHUgbWVudXJ1bmthbiBiaWF5YSBwZXIgdW5pdCBkaSB3aWxheWFoIEJhcmF0LCBzZXBlcnRpOg0KICAgLSAqKk1lbmd1cmFuZ2kgYmlheWEgdHJhbnNwb3J0YXNpKiogZGVuZ2FuIG5lZ29zaWFzaSBoYXJnYSBhdGF1IG1lbmNhcmkgYWx0ZXJuYXRpZiBsZWJpaCBtdXJhaC4NCiAgIC0gKipNZW5pbmdrYXRrYW4ga2FwYXNpdGFzIHBlbmdpcmltYW4qKiB1bnR1ayBtZW1ha3NpbWFsa2FuIGVmaXNpZW5zaSBsb2dpc3Rpay4NCg0KIyMjIEtlc2ltcHVsYW4NCkVmaXNpZW5zaSBwZW5naXJpbWFuIHNhbmdhdCBiZXJnYW50dW5nIHBhZGEgcmVuZGFobnlhIGJpYXlhIHBlciB1bml0LiBXaWxheWFoIGRlbmdhbiBiaWF5YSBwZXIgdW5pdCB5YW5nIG1haGFsIChzZXBlcnRpIEJhcmF0KSBjZW5kZXJ1bmcgbWVuamFkaSAqKnRpZGFrIGVmaXNpZW4qKiwgc2VoaW5nZ2EgbWVtZXJsdWthbiBvcHRpbWFsaXNhc2kgc3RyYXRlZ2kgcGVuZ2lyaW1hbi4NCg0KDQojIyAyLiBSZWtvbWVuZGFzaSBPcGVyYXNpb25hbDoNCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoZHBseXIpDQoNCiMgRGF0YQ0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBXaWxheWFoID0gYygiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiLCAiVXRhcmEiLCAiU2VsYXRhbiIsIA0KICAgICAgICAgICAgICAiVGltdXIiLCAiQmFyYXQiLCAiVGVuZ2FoIiwgIlV0YXJhIiwgIlNlbGF0YW4iLCAiVGltdXIiLCAiQmFyYXQiLCAiVGVuZ2FoIiksDQogIEplbmlzX0JhcmFuZyA9IGMoIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgDQogICAgICAgICAgICAgICAgICAgIlBha2FpYW4iLCAiTWFrYW5hbiIsICJQZXJhbGF0YW4iLCAiRWxla3Ryb25payIsICJQYWthaWFuIiwgDQogICAgICAgICAgICAgICAgICAgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgIlBha2FpYW4iLCAiTWFrYW5hbiIsICJQZXJhbGF0YW4iKSwNCiAgSnVtbGFoX0JhcmFuZyA9IGMoMjAwLCAxNTAsIDE4MCwgMTIwLCAyNTAsIDMwMCwgMjIwLCAxNDAsIDE4MCwgMzUwLCAxNzAsIDI1MCwgMTkwLCAxMzAsIDE4MCksDQogIFdha3R1X1BlbmdpcmltYW4gPSBjKDUsIDgsIDYsIDcsIDQsIDksIDcsIDUsIDYsIDgsIDQsIDYsIDcsIDUsIDUpLA0KICBCaWF5YV9QZXJfVW5pdCA9IGMoMTUwMDAsIDgwMDAsIDEwMDAwLCAxMjAwMCwgMTQwMDAsIDg1MDAsIDk1MDAsIDExMDAwLCAxNDUwMCwgDQogICAgICAgICAgICAgICAgICAgICA3ODAwLCAxMjAwMCwgMTYwMDAsIDgyMDAsIDEwNTAwLCAxMTUwMCkNCikNCg0KIyBTdGF0aXN0aWsgcGVyIFdpbGF5YWgNCnN0YXRzIDwtIGRhdGEgJT4lDQogIGdyb3VwX2J5KFdpbGF5YWgpICU+JQ0KICBzdW1tYXJpc2UoDQogICAgUmF0YV9SYXRhX1dha3R1ID0gbWVhbihXYWt0dV9QZW5naXJpbWFuKSwNCiAgICBNZWRpYW5fV2FrdHUgPSBtZWRpYW4oV2FrdHVfUGVuZ2lyaW1hbiksDQogICAgU0RfV2FrdHUgPSBzZChXYWt0dV9QZW5naXJpbWFuKSwNCiAgICBSYXRhX1JhdGFfQmFyYW5nID0gbWVhbihKdW1sYWhfQmFyYW5nKSwNCiAgICBNZWRpYW5fQmFyYW5nID0gbWVkaWFuKEp1bWxhaF9CYXJhbmcpLA0KICAgIFNEX0JhcmFuZyA9IHNkKEp1bWxhaF9CYXJhbmcpLA0KICAgIFJhdGFfUmF0YV9CaWF5YSA9IG1lYW4oQmlheWFfUGVyX1VuaXQpLA0KICAgIE1lZGlhbl9CaWF5YSA9IG1lZGlhbihCaWF5YV9QZXJfVW5pdCksDQogICAgU0RfQmlheWEgPSBzZChCaWF5YV9QZXJfVW5pdCkNCiAgKQ0KDQojIE91dHB1dCBoYXNpbA0KcHJpbnQoc3RhdHMpDQoNCmBgYA0KDQoNCiMjIyAyLjHigKIgQmVyZGFzYXJrYW4gaGFzaWwgYW5hbGlzaXMsIHdpbGF5YWggbWFuYSB5YW5nIG1lbWVybHVrYW4gcGVyaGF0aWFuIGtodXN1cyB1bnR1ayBtZW5pbmdrYXRrYW4gZWZpc2llbnNpIHBlbmdpcmltYW4/DQoNCiBCZXJkYXNhcmthbiBIYXNpbCBBbmFsaXNpcw0KDQogKldpbGF5YWggeWFuZyBNZW1lcmx1a2FuIFBlcmhhdGlhbiBLaHVzdXMgYWRhbGFoICoqV2lsYXlhaCBTZWxhdGFuKioqDQogDQogDQogICAtICpXaWxheWFoIFNlbGF0YW4qOg0KICAgDQogICAgIC0gUmF0YS1yYXRhIHdha3R1IHBlbmdpcmltYW4gdGVydGluZ2dpIGRpIGFudGFyYSBzZW11YSB3aWxheWFoICgqNyBqYW0qKS4NCiAgICAgDQogICAgIC0gTWVkaWFuIGp1bWxhaCBiYXJhbmcgeWFuZyBkaWtpcmltIGN1a3VwIGJlc2FyICgqMjIwIHVuaXQqKSwgeWFuZyBtZW51bmp1a2thbiB2b2x1bWUgcGVuZ2lyaW1hbiB0aW5nZ2kuDQogICAgIA0KICAgICAtIFN0YW5kYXJkIGRldmlhc2kgd2FrdHUgcGVuZ2lyaW1hbiBrZWNpbCAoKjEgamFtKiksIG1lbnVuanVra2FuIHdha3R1IHBlbmdpcmltYW4geWFuZyBjdWt1cCBrb25zaXN0ZW4sIG5hbXVuIHRldGFwIHJlbGF0aWYgbGFtYmF0Lg0KICAgICANCiAgICAgLSBSYXRhLXJhdGEgYmlheWEgcGVyIHVuaXQgeWFuZyB0aWRhayBkaXNlYnV0a2FuIHNlY2FyYSBsYW5nc3VuZyBkYWxhbSB0YWJlbCwgbmFtdW4gamlrYSByYXRhLXJhdGEgYmlheWEgcGVyIHVuaXQgdGluZ2dpLCBpbmkgbWVuamFkaSBpbmRpa2F0b3IgdGFtYmFoYW4uDQoNCiAgIERhcmkgZGF0YSBpbmksICpXaWxheWFoIFNlbGF0YW4qIG1lbWVybHVrYW4gcGVyaGF0aWFuIGtodXN1cyBrYXJlbmEgd2FrdHUgcGVuZ2lyaW1hbiBsZWJpaCBsYW1hIGRpYmFuZGluZ2thbiB3aWxheWFoIGxhaW4sIG1lc2tpcHVuIHZvbHVtZSBiYXJhbmdueWEgdGluZ2dpLiBFZmlzaWVuc2kgd2FrdHUgcGVuZ2lyaW1hbiBtZW5qYWRpIGZva3VzIHBlcmJhaWthbi4NCg0KDQojIyMgMi4y4oCiIEFwYSByZWtvbWVuZGFzaSB1bnR1ayBtZW5ndXJhbmdpIGJpYXlhIGRhbiB3YWt0dSBwZW5naXJpbWFuIGRpIHdpbGF5YWggdGVyc2VidXQ/DQoNCiBSZWtvbWVuZGFzaSB1bnR1ayBXaWxheWFoIFNlbGF0YW4NCg0KIyMjIyAyLjIuMS4gKlBlbmdvcHRpbWFsYW4gV2FrdHUgUGVuZ2lyaW1hbioNCiAgIC0gKlJhbmNhbmcgUnV0ZSB5YW5nIExlYmloIFBlbmRlayo6DQogICAgIEFuYWxpc2lzIHVsYW5nIHJ1dGUgdHJhbnNwb3J0YXNpIGRlbmdhbiBtZW5nZ3VuYWthbiBwZXJhbmdrYXQgbHVuYWsgb3B0aW1pc2FzaSBydXRlIHVudHVrIG1lbmd1cmFuZ2kgd2FrdHUgcGVyamFsYW5hbi4NCiAgIC0gKkd1bmFrYW4gVHJhbnNwb3J0YXNpIENlcGF0KjoNCiAgICAgUGlsaWggbW9kYSB0cmFuc3BvcnRhc2kgeWFuZyBsZWJpaCBlZmlzaWVuLCBzZXBlcnRpIGtlbmRhcmFhbiBkZW5nYW4ga2VjZXBhdGFuIHRpbmdnaSBhdGF1IHRyYW5zcG9ydGFzaSBiZXJiYXNpcyByZWwgamlrYSBtZW11bmdraW5rYW4uDQogICAtICpQZW5qYWR3YWxhbiB5YW5nIExlYmloIEJhaWsqOg0KICAgICBBdHVyIGphZHdhbCBwZW5naXJpbWFuIHBhZGEgd2FrdHUgZGVuZ2FuIGxhbHUgbGludGFzIHlhbmcgbGViaWggbGFuY2FyIHVudHVrIG1lbmdoaW5kYXJpIGtldGVybGFtYmF0YW4uDQoNCiMjIyMgMi4yLjIuICpFZmlzaWVuc2kgQmlheWEqDQogICAtICpLb25zb2xpZGFzaSBQZW5naXJpbWFuKjoNCiAgICAgR2FidW5na2FuIGJlYmVyYXBhIHBlbmdpcmltYW4gbWVuamFkaSBzYXR1IHBlcmphbGFuYW4gdW50dWsgbWVtYW5mYWF0a2FuIGthcGFzaXRhcyBrZW5kYXJhYW4gc2VjYXJhIHBlbnVoLg0KICAgLSAqTmVnb3NpYXNpIGRlbmdhbiBQZW55ZWRpYSBMb2dpc3Rpayo6DQogICAgIEppa2EgbWVuZ2d1bmFrYW4gbGF5YW5hbiBsb2dpc3RpayBwaWhhayBrZXRpZ2EsIGxha3VrYW4gbmVnb3NpYXNpIHVsYW5nIHRhcmlmIHVudHVrIG1lbmd1cmFuZ2kgYmlheWEgcGVyIHVuaXQuDQogICAtICpFdmFsdWFzaSBJbmZyYXN0cnVrdHVyIExvZ2lzdGlrKjoNCiAgICAgUGVyYmFpa2kgamFsYW4gYXRhdSBha3NlcyBrZSB0aXRpayBkaXN0cmlidXNpIGRpIFdpbGF5YWggU2VsYXRhbiB1bnR1ayBtZW5ndXJhbmdpIGJpYXlhIHBlcmphbGFuYW4uDQoNCiMjIyMgMi4yLjMuICpQZW5pbmdrYXRhbiBNYW5hamVtZW4gTG9naXN0aWsqDQogICAtICpHdWRhbmcgTGViaWggRGVrYXQqOg0KICAgICBKaWthIGphcmFrIHRlcmxhbHUgamF1aCwgYmFuZ3VuIGd1ZGFuZyBwZW55aW1wYW5hbiBzZW1lbnRhcmEgZGkgZGVrYXQgV2lsYXlhaCBTZWxhdGFuIHVudHVrIG1lbXBlcnBlbmRlayBqYXJhayBwZW5naXJpbWFuLg0KICAgLSAqUGVuZ2d1bmFhbiBUZWtub2xvZ2kqOg0KICAgICBJbXBsZW1lbnRhc2lrYW4gc2lzdGVtIHBlbGFjYWthbiBiZXJiYXNpcyBHUFMgdW50dWsgbWVtYW50YXUgZGFuIG1lbXBlcmJhaWtpIHdha3R1IHBlbmdpcmltYW4gc2VjYXJhIHJlYWwtdGltZS4NCiAgIC0gKlBlbmluZ2thdGFuIFNETSo6DQogICAgIExhdGloIGthcnlhd2FuIGxvZ2lzdGlrIHVudHVrIG1lbmdlbG9sYSBwcm9zZXMgcGVuZ2lyaW1hbiBsZWJpaCBjZXBhdCBkYW4gZWZpc2llbi4NCg0KIyMjIyAyLjIuNC4gKkZva3VzIHBhZGEgQmFyYW5nIGRlbmdhbiBWb2x1bWUgVGluZ2dpKg0KICAgLSBQYXN0aWthbiBiYXJhbmcgZGVuZ2FuIHZvbHVtZSBwZW5naXJpbWFuIHRpbmdnaSAoc2VwZXJ0aSBwYWthaWFuIGRhbiBtYWthbmFuIGRpIFdpbGF5YWggU2VsYXRhbikgZGlwcmlvcml0YXNrYW4gZGFsYW0gdHJhbnNwb3J0YXNpIHVudHVrIG1lbmdoaW5kYXJpIGtldGVybGFtYmF0YW4uDQoNCkRlbmdhbiBsYW5na2FoLWxhbmdrYWggaW5pLCBXaWxheWFoIFNlbGF0YW4gZGFwYXQgbWVuaW5na2F0a2FuIGVmaXNpZW5zaSBwZW5naXJpbWFuIGJhaWsgZGFyaSBzZWdpIHdha3R1IG1hdXB1biBiaWF5YSwgc2VrYWxpZ3VzIG1lbXBlcnRhaGFua2FuIGt1YWxpdGFzIGxheWFuYW4uDQoNCiMjIDMuIEtpbmVyamEgQmVyZGFzYXJrYW4gSmVuaXMgQmFyYW5nOg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBMb2FkIGxpYnJhcnkNCmxpYnJhcnkoZHBseXIpDQoNCiMgRGF0YQ0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBXaWxheWFoID0gYygiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiLCAiVXRhcmEiLCAiU2VsYXRhbiIsIA0KICAgICAgICAgICAgICAiVGltdXIiLCAiQmFyYXQiLCAiVGVuZ2FoIiwgIlV0YXJhIiwgIlNlbGF0YW4iLCAiVGltdXIiLCAiQmFyYXQiLCAiVGVuZ2FoIiksDQogIEplbmlzX0JhcmFuZyA9IGMoIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgDQogICAgICAgICAgICAgICAgICAgIlBha2FpYW4iLCAiTWFrYW5hbiIsICJQZXJhbGF0YW4iLCAiRWxla3Ryb25payIsICJQYWthaWFuIiwgDQogICAgICAgICAgICAgICAgICAgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgIlBha2FpYW4iLCAiTWFrYW5hbiIsICJQZXJhbGF0YW4iKSwNCiAgSnVtbGFoX0JhcmFuZyA9IGMoMjAwLCAxNTAsIDE4MCwgMTIwLCAyNTAsIDMwMCwgMjIwLCAxNDAsIDE4MCwgMzUwLCAxNzAsIDI1MCwgMTkwLCAxMzAsIDE4MCksDQogIFdha3R1X1BlbmdpcmltYW4gPSBjKDUsIDgsIDYsIDcsIDQsIDksIDcsIDUsIDYsIDgsIDQsIDYsIDcsIDUsIDUpLA0KICBCaWF5YV9QZXJfVW5pdCA9IGMoMTUwMDAsIDgwMDAsIDEwMDAwLCAxMjAwMCwgMTQwMDAsIDg1MDAsIDk1MDAsIDExMDAwLCAxNDUwMCwgDQogICAgICAgICAgICAgICAgICAgICA3ODAwLCAxMjAwMCwgMTYwMDAsIDgyMDAsIDEwNTAwLCAxMTUwMCkNCikNCg0KIyBLaW5lcmphIEJlcmRhc2Fya2FuIEplbmlzIEJhcmFuZyBkYW4gV2lsYXlhaA0Ka2luZXJqYV9iYXJhbmcgPC0gZGF0YSAlPiUNCiAgZ3JvdXBfYnkoV2lsYXlhaCwgSmVuaXNfQmFyYW5nKSAlPiUNCiAgc3VtbWFyaXNlKA0KICAgIFJhdGFfUmF0YV9XYWt0dSA9IG1lYW4oV2FrdHVfUGVuZ2lyaW1hbiksDQogICAgUmF0YV9SYXRhX0JpYXlhID0gbWVhbihCaWF5YV9QZXJfVW5pdCksDQogICAgVG90YWxfSnVtbGFoX0JhcmFuZyA9IHN1bShKdW1sYWhfQmFyYW5nKSwNCiAgICAuZ3JvdXBzID0gImRyb3AiICMgVW50dWsgbWVuZ2hpbmRhcmkgd2FybmluZyB0ZW50YW5nIGdyb3VwaW5nDQogICkgJT4lDQogIGFycmFuZ2UoV2lsYXlhaCwgUmF0YV9SYXRhX1dha3R1LCBSYXRhX1JhdGFfQmlheWEpDQoNCiMgT3V0cHV0IGhhc2lsDQpwcmludChraW5lcmphX2JhcmFuZykNCg0KYGBgDQoNCg0KIyMjIDMuMSBBbmFsaXNpcyBraW5lcmphIHBlbmdpcmltYW4gYmVyZGFzYXJrYW4gamVuaXMgYmFyYW5nIGRhbiB3aWxheWFoLiBNYW5hIHlhbmcgbWVtaWxpa2kgd2FrdHUgcGVuZ2lyaW1hbiBsZWJpaCBjZXBhdCBkYW4gYmlheWEgcGVyIHVuaXTCoGxlYmlowqByZW5kYWg/DQoNCiMjIyMgMy4xLjEgV2FrdHUgUGVuZ2lyaW1hbiBQYWxpbmcgQ2VwYXQ6DQoxLiAqKldpbGF5YWggVGVuZ2FoIChFbGVrdHJvbmlrKSoqOiA0IGphbS4NCjIuICoqV2lsYXlhaCBVdGFyYSAoUGVyYWxhdGFuKSoqOiA0IGphbS4NCg0KIyMjIyAzLjEuMiBCaWF5YSBQZXIgVW5pdCBQYWxpbmcgUmVuZGFoOg0KMS4gKipXaWxheWFoIFRlbmdhaCAoUGFrYWlhbikqKjogUnAgNyw4MDAvdW5pdC4NCjIuICoqV2lsYXlhaCBTZWxhdGFuIChQYWthaWFuKSoqOiBScCA4LDAwMC91bml0Lg0KDQojIyMjIDMuMS4zIEtvbWJpbmFzaSBXYWt0dSBDZXBhdCBkYW4gQmlheWEgUmVuZGFoOg0KLSAqKldpbGF5YWggVGVuZ2FoIChFbGVrdHJvbmlrKSoqOiBXYWt0dSA0IGphbSBkZW5nYW4gYmlheWEgUnAgMTQsMDAwL3VuaXQuDQotICoqV2lsYXlhaCBTZWxhdGFuIChQYWthaWFuKSoqOiBXYWt0dSA4IGphbSBkZW5nYW4gYmlheWEgUnAgOCwwMDAvdW5pdCAobXVyYWggdGV0YXBpIGxlYmloIGxhbWEpLg0KDQojIyMgMy4xLjQgS2VzaW1wdWxhbg0KLSBKaWthIGZva3VzIHBhZGEgKip3YWt0dSBwZW5naXJpbWFuIHRlcmNlcGF0KiosIHdpbGF5YWggKipUZW5nYWgqKiAoRWxla3Ryb25paykgZGFuICoqVXRhcmEqKiAoUGVyYWxhdGFuKSB1bmdndWwuDQotIEppa2EgZm9rdXMgcGFkYSAqKmJpYXlhIHBlciB1bml0IHRlcmVuZGFoKiosIHdpbGF5YWggKipUZW5nYWgqKiAoUGFrYWlhbikgbWVuamFkaSBwaWxpaGFuIHRlcmJhaWsuDQotIEtvbWJpbmFzaSB3YWt0dSBjZXBhdCBkYW4gYmlheWEgcmVuZGFoIHRpZGFrIHNlbGFsdSB0ZXJzZWRpYSBzZWNhcmEgb3B0aW1hbC4gRWxla3Ryb25payBkaSB3aWxheWFoICoqVGVuZ2FoKiogbWVtaWxpa2kgcGVyZm9ybWEgdGVyYmFpayBkZW5nYW4gd2FrdHUgY2VwYXQgZGFuIGJpYXlhIHJlbGF0aWYga29tcGV0aXRpZi4NCg0KDQojIFJlZmVyZW5zaQ0KDQpfQmFrdGkgU2lyZWdhciwgTS5TYy4sIENEUy4gKDIwMjQpLiBVa3VyYW4gUGVtdXNhdGFuIERhdGEuIERpYW1iaWwgZGFyaV8gaHR0cHM6Ly9ib29rZG93bi5vcmcvZHNjaWVuY2VsYWJzL3N0YXRpc3Rpa2FfZGFzYXIvX2Jvb2svVWt1cmFuX1BlbnllYmFyYW5fRGF0YS5odG1sDQoNCl9GZWJyaWFuaSwgUy4gKDIwMjIpLiBBbmFsaXNpcyBEZXNrcmlwdGlmIFN0YW5kYXIgRGV2aWFzaS4gSnVybmFsIFBlbmRpZGlrYW4gVGFtYnVzYWksIDYoMSksIDkxMC05MTMuXw0KDQpfUHJpbWFuZGFyaSwgQS4gSC4sICYgS2VzdW1hd2F0aSwgQS4gVWt1cmFuIFBlbnllYmFyYW4gRGF0YS5fDQoNCl9DaHlhbiwgUC4sIEhhc25pYXRpLCBILiwgTWFyc2lzbm8sIFcuLCBBdGhhciwgRy4gQS4sIFdhc2l0bywgTi4sIE1pbmdnYW5pLCBGLiwgLi4uICYgQXNiYW51LCBELiBFLiAoMjAyNCkuIFN0YXRpc3Rpa2EgUGVuZGlkaWthbjogUGFuZHVhbiBQcmFrdGlzIFN0YXRpc3Rpa2EgdW50dWsgUGVuZGlkaWthbi4gUGVuZXJiaXQgTWlmYW5kaSBNYW5kaXJpIERpZ2l0YWwsIDEoMDEpLl8NCg0KX1N1dGlzbmEsIEkuICgyMDIwKS4gU3RhdGlzdGlrYSBwZW5lbGl0aWFuLiBVbml2ZXJzaXRhcyBOZWdlcmkgR29yb250YWxvLCAxKDEpLCAxLTE1Ll8NCg0K