Confidence Interval

Profil Mahasiswa - Anindya Kristianingputri
Foto Profil Anindya Kristianingputri

Anindya Kristianingputri

NIM: 52250025

Student Major Data Science

Institut Teknologi Sains Bandung

Dosen: Bakti Siregar, M.Sc., CDS

R Programming Statistics Confidence Interval

1 Studi Kasus 1

Rentang Kepercayaan untuk Rata-rata, \(\sigma\) Diketahui: Sebuah Platform Aplikasi Belanja Online ingin memperkirakan Rata-rata jumlah transaksi harian per pengguna Setelah Meluncurkan Fitur baru. Berdasarkan dari data historis berskala besar, populasi Simpangan Baku Sudah dketahui.

\[ \begin{eqnarray*} \sigma &=& 3.2 \quad \text{(Populasi Simpangan Baku)} \\ n &=& 100 \quad \text{(Ukuran/jumlah sampel)} \\ \bar{x} &=& 12.6 \quad \text{(rata rata sampel)} \end{eqnarray*} \]

Tugas

  1. Identifkasi Uji Satatistik yang sesuai dan jelaskan alasanmu.

  2. Hitung Rentang Kepercayaan Untuk:

    • \(90\%\)
    • \(95\%\)
    • \(99\%\)
  3. Buat Sebuah Visualisasi Perbandingan dari ketiga Interval Kepercayaan tersebut.

  4. Interpretasikan Hasilnya dalam Konteks Analisis Bisnis.

Penyelesaian Studi Kasus 1

  1. Identifkasi Uji Statistik

Uji Z digunakan pada penelitian ini karena seluruh parameter yang diperlukan telah diketahui, yaitu simpangan baku populasi sebesar 3,2, rata-rata sampel 12,6, dan ukuran sampel yang besar (n = 100). Dengan jumlah sampel yang besar, distribusi rata-rata sampel dapat diasumsikan mendekati distribusi normal sesuai Teorema Limit Tengah, sehingga penggunaan distribusi Z menjadi tepat. Oleh karena itu, karena semua informasi utama telah tersedia dan n ≥ 30, uji Z merupakan pilihan yang paling tepat untuk menguji rata-rata populasi pada kasus ini.

Rumus Distribusi Z dalam Rentang Kepercayaan

\[ \text{CI} = \bar{x} \pm z_{\alpha/2} \frac{\sigma}{\sqrt{n}} \]

\(\bar{x}\) : Rata-rata sampel
\(\sigma\) : Standar deviasi populasi
\(n\) : Ukuran sampel
\(z_{\alpha/2}\) : Nilai kritis distribusi normal standar (\(1-\alpha\))
\(\pm\) : Menunjukkan batas bawah dan batas atas interval kepercayaan

  1. Hitung Rentang Kepercayaan
Rentang Kepercayaan
Data yang digunakan:
Rata-rata sampel (\(\bar{x}\)) = 12.6
Standar deviasi populasi (\(\sigma\)) = 3.2
Ukuran sampel (\(n\)) = 100
Rentang Kepercayaan 90%

1. Menghitung \(z_{\alpha/2}\)

Tingkat keyakinan = 90% = 0.90
\[ \alpha = 1 - 0.90 = 0.10 \]
\[ \alpha/2 = 0.10/2 = 0.05 \]
\[ z_{\alpha/2} = z_{0.05} = 1.645 \]

2. Menghitung Margin of Error (ME)

Rumus: \[ ME = z_{\alpha/2} \times \frac{\sigma}{\sqrt{n}} \]
\[ ME = 1.645 \times \frac{3.2}{\sqrt{100}} \]
\[ ME = 1.645 \times 0.32 \]
\[ ME = 0.5264 \]

3. Menghitung Rentang Kepercayaan

Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 12.6 + 0.5264 = 13.1264
Batas Bawah = 12.6 - 0.5264 = 12.0736
Rentang Kepercayaan 90%:
(12.0736, 13.1264)
Rentang Kepercayaan 95%

1. Menghitung \(z_{\alpha/2}\)

Tingkat keyakinan = 95% = 0.95
\[ \alpha = 1 - 0.95 = 0.05 \]
\[ \alpha/2 = 0.05/2 = 0.025 \]
\[ z_{\alpha/2} = z_{0.025} = 1.96 \]

2. Menghitung Margin of Error (ME)

Rumus: \[ ME = z_{\alpha/2} \times \frac{\sigma}{\sqrt{n}} \]
\[ ME = 1.96 \times \frac{3.2}{\sqrt{100}} \]
\[ ME = 1.96 \times 0.32 \]
\[ ME = 0.6272 \]

3. Menghitung Rentang Kepercayaan

Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 12.6 + 0.6272 = 13.2272
Batas Bawah = 12.6 - 0.6272 = 11.9728
Rentang Kepercayaan 95%:
(11.9728, 13.2272)
Rentang Kepercayaan 99%

1. Menghitung \(z_{\alpha/2}\)

Tingkat keyakinan = 99% = 0.99
\[ \alpha = 1 - 0.99 = 0.01 \]
\[ \alpha/2 = 0.01/2 = 0.005 \]
\[ z_{\alpha/2} = z_{0.005} = 2.576 \]

2. Menghitung Margin of Error (ME)

Rumus: \[ ME = z_{\alpha/2} \times \frac{\sigma}{\sqrt{n}} \]
\[ ME = 2.576 \times \frac{3.2}{\sqrt{100}} \]
\[ ME = 2.576 \times 0.32 \]
\[ ME = 0.82432 \]

3. Menghitung Rentang Kepercayaan

Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 12.6 + 0.82432 = 13.42432
Batas Bawah = 12.6 - 0.82432 = 11.77568
Rentang Kepercayaan 99%:
(11.77568, 13.42432)
  1. Visualisasi Perbandingan dari ketiga Interval Kepercayaan
library(ggplot2)

ci_data <- data.frame(
  CI = factor(c("90%", "95%", "99%"), levels = c("90%", "95%", "99%")),
  mean = c(12.6, 12.6, 12.6),
  lower = c(12.0736, 11.9728, 11.77568),
  upper = c(13.1264, 13.2272, 13.42432)
)
ggplot(ci_data, aes(x = CI, y = mean, color = CI)) +

  geom_point(size = 4) +

  geom_errorbar(
    aes(ymin = lower, ymax = upper),
    width = 0.18,
    linewidth = 1.3
  ) +

  # Label CI tepat di tengah titik mean
  geom_text(
    aes(
      x = CI,
      y = mean,
      label = paste0("(", round(lower,2), ", ", round(upper,2), ")")
    ),
    hjust = 0.5,
    vjust = 0.5,
    size = 3.8,
    color = "black",
    inherit.aes = FALSE
  ) +

  scale_color_manual(
    values = c(
      "90%" = "#2CB1A6",
      "95%" = "#1E8F8B",
      "99%" = "#166E6A"
    )
  ) +

  labs(
    title = "Visualisasi Rentang Kepercayaan Mean",
    subtitle = "Perbandingan Rentang Kepercayaan 90%, 95%, dan 99% terhadap Mean Sampel",
    x = "Tingkat Kepercayaan",
    y = "Nilai Mean"
  ) +

  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5),
    axis.title.x = element_text(face = "bold", hjust = 0.5),
    axis.title.y = element_text(face = "bold", hjust = 0.5),
    axis.text.x = element_text(hjust = 0.5),
    axis.text.y = element_text(hjust = 0.5),
    legend.position = "none"
  )

  1. Interpretasikan dalam Konteks Analisis Bisnis.

    Estimasi rata-rata sekitar 12,6 transaksi harian per pengguna menunjukkan indikasi peningkatan aktivitas pengguna setelah fitur diluncurkan. Rentang kepercayaan 90% dapat dimanfaatkan sebagai dasar keputusan awal untuk uji operasional dan optimalisasi fitur karena intervalnya lebih sempit dan cepat memberikan sinyal performa. Rentang kepercayaan 95% memberikan tingkat keyakinan yang lebih seimbang dan paling tepat digunakan sebagai dasar keputusan manajerial utama, yaitu melanjutkan atau mempertahankan fitur dalam jangka menengah. Sementara itu, rentang kepercayaan 99% memberikan keyakinan tertinggi bahwa peningkatan transaksi benar-benar terjadi, sehingga lebih aman digunakan sebagai dasar keputusan strategis bernilai besar, seperti alokasi anggaran pengembangan lanjutan dan penerapan fitur secara menyeluruh.


2 Studi Kasus 2

Rentang Kepercayaan rata rata, \(\sigma\) tidak diketahui: Sebuah Tim Penelitian AX menganalisis Waktu Penyelesaian Tugas (dalam hitungan menit) untuk aplikasi seluler. Data ini dikumpulkan dari 12 pengguna:

\[ 8.4,\; 7.9,\; 9.1,\; 8.7,\; 8.2,\; 9.0,\; 7.8,\; 8.5,\; 8.9,\; 8.1,\; 8.6,\; 8.3 \]

Tugas:

  1. Identifkasi Uji Satatistik yang sesuai dan jelaskan alasanmu.
  2. Hitung Interval Kepercayaan Untuk:
    • \(90\%\)
    • \(95\%\)
    • \(99\%\)
  3. Visualisasikan ketiga interval tersebut pada satu plot.
  4. Jelaskan bagaimana ukuran sampel dan tingkat kepercayaan memengaruhi lebar interval.

Penyelesaian Studi Kasus 2

  1. Identifkasi Uji Statistik

    Kasus ini dianalisis menggunakan rentang kepercayaan rata-rata dengan distribusi t karena simpangan baku populasi (σ) tidak diketahui dan jumlah sampel relatif kecil (n = 12). Data yang dianalisis berupa waktu penyelesaian tugas dalam satuan menit, sehingga sesuai untuk analisis rata-rata. Dalam kondisi tersebut, distribusi t lebih tepat digunakan dibandingkan distribusi normal karena mampu memperhitungkan ketidakpastian akibat estimasi simpangan baku dari sampel.

  2. Hitung Rentang Kepercayaan
Rentang Kepercayaan dengan Distribusi t
Data Waktu Penyelesaian Tugas (menit):
8.4, 7.9, 9.1, 8.7, 8.2, 9.0, 7.8, 8.5, 8.9, 8.1, 8.6, 8.3
n = 12 (ukuran sampel)
Rentang Kepercayaan 90%

1. Hitung Mean (Rata-rata)

Data: 8.4, 7.9, 9.1, 8.7, 8.2, 9.0, 7.8, 8.5, 8.9, 8.1, 8.6, 8.3
\[ \bar{x} = \frac{8.4 + 7.9 + 9.1 + 8.7 + .......+ 8.3}{12} \]
\[ \bar{x} = \frac{102.5}{12} = 8.5417 \]

2. Hitung Standar Deviasi Sampel (s)

Rumus: \[ s = \sqrt{\frac{\sum (x_i - \bar{x})^2}{n-1}} \]
\[ \begin{aligned} (8.4-8.5417)^2 &= 0.0201 \\ (7.9-8.5417)^2 &= 0.4115 \\ (9.1-8.5417)^2 &= 0.3115 \\ (8.7-8.5417)^2 &= 0.0251 \\ (8.2-8.5417)^2 &= 0.1167 \\ (9.0-8.5417)^2 &= 0.2100 \\ (7.8-8.5417)^2 &= 0.5503 \\ (8.5-8.5417)^2 &= 0.0017 \\ (8.9-8.5417)^2 &= 0.1285 \\ (8.1-8.5417)^2 &= 0.1951 \\ (8.6-8.5417)^2 &= 0.0034 \\ (8.3-8.5417)^2 &= 0.0584 \\ \end{aligned} \]
\[ \sum (x_i - \bar{x})^2 = 0.0201 + 0.4115 + 0.3115 + .......+ 0.0584 \]
\[ \sum (x_i - \bar{x})^2 = 2.0323 \]
\[ s = \sqrt{\frac{2.0323}{12-1}} = \sqrt{\frac{2.0323}{11}} = \sqrt{0.1848} = 0.4299 \]

3. Menentukan \( t_{\alpha/2} \)

Tingkat keyakinan = 90% = 0.90
\[ \alpha = 1 - 0.90 = 0.10 \]
\[ \alpha/2 = 0.10/2 = 0.05 \]
Derajat kebebasan: \( df = n - 1 = 12 - 1 = 11 \)
\[ t_{\alpha/2} = t_{0.05, 11} = 1.796 \]

4. Menghitung Margin of Error (ME)

Rumus: \[ ME = t_{\alpha/2} \times \frac{s}{\sqrt{n}} \]
\[ ME = 1.796 \times \frac{0.4299}{\sqrt{12}} \]
\[ ME = 1.796 \times \frac{0.4299}{3.4641} \]
\[ ME = 1.796 \times 0.1241 = 0.2229 \]

5. Menghitung Rentang Kepercayaan

Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 8.5417 + 0.2229 = 8.7646
Batas Bawah = 8.5417 - 0.2229 = 8.3188
Rentang Kepercayaan 90%:
(8.3188, 8.7646)
Rentang Kepercayaan 95%

1. Mean dan Standar Deviasi

\[ \bar{x} = 8.5417 \]
\[ s = 0.4299 \]

2. Menentukan \( t_{\alpha/2} \)

Tingkat keyakinan = 95% = 0.95
\[ \alpha = 1 - 0.95 = 0.05 \]
\[ \alpha/2 = 0.05/2 = 0.025 \]
Derajat kebebasan: \( df = n - 1 = 12 - 1 = 11 \)
\[ t_{\alpha/2} = t_{0.025, 11} = 2.201 \]

3. Menghitung Margin of Error (ME)

Rumus: \[ ME = t_{\alpha/2} \times \frac{s}{\sqrt{n}} \]
\[ ME = 2.201 \times \frac{0.4299}{\sqrt{12}} \]
\[ ME = 2.201 \times 0.1241 = 0.2731 \]

4. Menghitung Rentang Kepercayaan

Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 8.5417 + 0.2731 = 8.8148
Batas Bawah = 8.5417 - 0.2731 = 8.2686
Rentang Kepercayaan 95%:
(8.2686, 8.8148)
Rentang Kepercayaan 99%

1. Mean dan Standar Deviasi

\[ \bar{x} = 8.5417 \]
\[ s = 0.4299 \]

2. Menentukan \( t_{\alpha/2} \)

Tingkat keyakinan = 99% = 0.99
\[ \alpha = 1 - 0.99 = 0.01 \]
\[ \alpha/2 = 0.01/2 = 0.005 \]
Derajat kebebasan: \( df = n - 1 = 12 - 1 = 11 \)
\[ t_{\alpha/2} = t_{0.005, 11} = 3.106 \]

3. Menghitung Margin of Error (ME)

Rumus: \[ ME = t_{\alpha/2} \times \frac{s}{\sqrt{n}} \]
\[ ME = 3.106 \times \frac{0.4299}{\sqrt{12}} \]
\[ ME = 3.106 \times 0.1241 = 0.3854 \]

4. Menghitung Rentang Kepercayaan

Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 8.5417 + 0.3854 = 8.9271
Batas Bawah = 8.5417 - 0.3854 = 8.1563
Rentang Kepercayaan 99%:
(8.1563, 8.9271)
  1. Visualisasi Perbandingan dari ketiga Interval Kepercayaan
library(ggplot2)

ci_data <- data.frame(
  CI = factor(c("90%", "95%", "99%"), levels = c("90%", "95%", "99%")),
  lower = c(8.3188, 8.2686, 8.1563),
  upper = c(8.7646, 8.8148, 8.9271),
  mean  = 8.5417
)

ggplot(ci_data, aes(y = CI)) +
  geom_errorbar(
    aes(xmin = lower, xmax = upper, color = CI),
    width = 0.25,
    linewidth = 1.4,
    orientation = "y"
  ) +
  geom_text(
    aes(x = lower, label = round(lower, 3)),
    hjust = 1.1,
    size = 4,
    fontface = "bold"
  ) +
  geom_text(
    aes(x = upper, label = round(upper, 3)),
    hjust = -0.1,
    size = 4,
    fontface = "bold"
  ) +
  scale_color_manual(
    values = c("90%" = "#008080",
               "95%" = "#20b2aa",
               "99%" = "#48d1cc")
  ) +
  labs(
    title = "Perbandingan Rentang Kepercayaan",
    x = "Waktu (menit)",
    y = NULL
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold"),
    plot.subtitle = element_text(hjust = 0.5),
    axis.text.y = element_text(hjust = 0.5),
    legend.position = "none"
  )

4.Penjelasan bagaimana ukuran sampel dan tingkat kepercayaan memengaruhi lebar interval.

Lebar rentang kepercayaan dipengaruhi langsung oleh ukuran sampel dan tingkat kepercayaan. Semakin besar ukuran sampel, estimasi rata-rata menjadi lebih stabil sehingga standar error (\(\frac{\sigma}{\sqrt{n}}\)) mengecil dan interval kepercayaan menjadi lebih sempit, sedangkan sampel kecil menyebabkan ketidakpastian lebih besar sehingga interval melebar. Sebaliknya, tingkat kepercayaan yang lebih tinggi (misalnya dari 90% ke 99%) memerlukan nilai kritis Z atau t yang lebih besar, memperbesar margin of error dan membuat interval semakin lebar untuk menjamin keyakinan yang lebih kuat. Dengan demikian, interval sempit mencerminkan estimasi presisi dari sampel besar dan kepercayaan moderat seperti 95%, sementara interval lebar menunjukkan kehati-hatian lebih besar dalam pengambilan keputusan.

3 Studi Kasus 3

Rentang Kepercayaan untuk Sebuah Proporsi, Pengujian A/B: Tim Data Sience menjalankan pengujian A/B pada desain tombol Call-To-Action (CTA) baru. Eksperimen tersebut menghasilkan:

\[ \begin{eqnarray*} n &=& 400 \quad \text{(Keseluruhan Jumlah Pengguna)} \\ x &=& 156 \quad \text{(Pengguna yang memencet CTA)} \end{eqnarray*} \]

Tugas:

  1. Hitung sample proporsi \(\hat{p}\).
  2. Hitung Rentang Kepercayaan Untuk Proporsi pada :
    • \(90\%\)
    • \(95\%\)
    • \(99\%\)
  3. Visualisasikan dan Bandingkan ketiga interval tersebut.
  4. Jelaskan bagaimana tingkat kepercayaan memengaruhi pengambilan keputusan dalam eksperimen produk..

Penyelesaian Studi Kasus 3

  1. Hitung sample proporsi \(\hat{p}\) dan Hitung Rentang Kepercayaan Untuk Proporsi
Rentang Kepercayaan Proporsi
Data Pengujian A/B:
n = 400 (jumlah pengguna)
x = 156 (pengguna yang memencet CTA)
Hitung Sample Proporsi \(\hat{p}\)

Perhitungan Sample Proporsi

Rumus: \[ \hat{p} = \frac{x}{n} \]
\[ \hat{p} = \frac{156}{400} \]
\[ \hat{p} = 0.39 \]
Hasil Perhitungan:
\(\hat{p} = 0.39\)
Rentang Kepercayaan 90%

1. Menentukan \( z_{\alpha/2} \)

Tingkat keyakinan = 90% = 0.90
\[ \alpha = 1 - 0.90 = 0.10 \]
\[ \alpha/2 = 0.10/2 = 0.05 \]
\[ z_{\alpha/2} = z_{0.05} = 1.645 \]

2. Menghitung Margin of Error (ME)

Rumus: \[ ME = z_{\alpha/2} \times \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \]
\[ ME = 1.645 \times \sqrt{\frac{0.39 \times (1-0.39)}{400}} \]
\[ ME = 1.645 \times \sqrt{\frac{0.39 \times 0.61}{400}} \]
\[ ME = 1.645 \times \sqrt{\frac{0.2379}{400}} \]
\[ ME = 1.645 \times \sqrt{0.00059475} \]
\[ ME = 1.645 \times 0.02439 \]
\[ ME = 0.04012 \]

3. Menghitung Rentang Kepercayaan

Rumus: \[ \hat{p} \pm ME \]
Batas Atas = 0.39 + 0.04012 = 0.43012
Batas Bawah = 0.39 - 0.04012 = 0.34988
Rentang Kepercayaan 90% untuk proporsi:
(0.3499, 0.4301)
atau (34.99%, 43.01%)
Rentang Kepercayaan 95%

1. Menentukan \( z_{\alpha/2} \)

Tingkat keyakinan = 95% = 0.95
\[ \alpha = 1 - 0.95 = 0.05 \]
\[ \alpha/2 = 0.05/2 = 0.025 \]
\[ z_{\alpha/2} = z_{0.025} = 1.96 \]

2. Menghitung Margin of Error (ME)

Rumus: \[ ME = z_{\alpha/2} \times \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \]
\[ ME = 1.96 \times \sqrt{\frac{0.39 \times (1-0.39)}{400}} \]
\[ ME = 1.96 \times \sqrt{\frac{0.39 \times 0.61}{400}} \]
\[ ME = 1.96 \times 0.02439 \]
\[ ME = 0.04780 \]

3. Menghitung Rentang Kepercayaan

Rumus: \[ \hat{p} \pm ME \]
Batas Atas = 0.39 + 0.04780 = 0.43780
Batas Bawah = 0.39 - 0.04780 = 0.34220
Rentang Kepercayaan 95% untuk proporsi:
(0.3422, 0.4378)
atau (34.22%, 43.78%)
Rentang Kepercayaan 99%

1. Menentukan \( z_{\alpha/2} \)

Tingkat keyakinan = 99% = 0.99
\[ \alpha = 1 - 0.99 = 0.01 \]
\[ \alpha/2 = 0.01/2 = 0.005 \]
\[ z_{\alpha/2} = z_{0.005} = 2.576 \]

2. Menghitung Margin of Error (ME)

Rumus: \[ ME = z_{\alpha/2} \times \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \]
\[ ME = 2.576 \times \sqrt{\frac{0.39 \times (1-0.39)}{400}} \]
\[ ME = 2.576 \times \sqrt{\frac{0.39 \times 0.61}{400}} \]
\[ ME = 2.576 \times 0.02439 \]
\[ ME = 0.06283 \]

3. Menghitung Rentang Kepercayaan

Rumus: \[ \hat{p} \pm ME \]
Batas Atas = 0.39 + 0.06283 = 0.45283
Batas Bawah = 0.39 - 0.06283 = 0.32717
Rentang Kepercayaan 99% untuk proporsi:
(0.3272, 0.4528)
atau (32.72%, 45.28%)
  1. Visualisasi dan Perbandingan ketiga interval tersebut.
library(ggplot2)

# Data CI proporsi
ci_proporsi <- data.frame(
  CI = factor(c("90%", "95%", "99%"), levels = c("90%", "95%", "99%")),
  lower = c(0.3499, 0.3422, 0.3272),
  upper = c(0.4301, 0.4378, 0.4528)
)

ggplot(ci_proporsi, aes(y = CI)) +
  geom_errorbar(
    aes(xmin = lower, xmax = upper, color = CI),
    width = 0.25,
    linewidth = 1.4,
    orientation = "y"
  ) +
  geom_text(
    aes(x = lower, label = scales::percent(lower, accuracy = 0.01)),
    hjust = 1.1,
    size = 4,
    fontface = "bold"
  ) +
  geom_text(
    aes(x = upper, label = scales::percent(upper, accuracy = 0.01)),
    hjust = -0.1,
    size = 4,
    fontface = "bold"
  ) +
  scale_color_manual(
    values = c("90%" = "#008080",
               "95%" = "#20b2aa",
               "99%" = "#48d1cc")
  ) +
  scale_x_continuous(
    labels = scales::percent_format(accuracy = 1)
  ) +
  labs(
    title = "Perbandingan Rentang Kepercayaan",
    subtitle = "n = 400,  x = 156,  p̂ = 0.39",
    x = "Proporsi Pengguna",
    y = NULL
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold"),
    plot.subtitle = element_text(hjust = 0.5),
    axis.text.y = element_text(hjust = 0.5),
    legend.position = "none"
  )

  1. Penjelasan bagaimana tingkat kepercayaan memengaruhi pengambilan keputusan dalam eksperimen produk.

Tingkat kepercayaan memengaruhi pengambilan keputusan dalam eksperimen produk karena menentukan seberapa yakin tim terhadap hasil yang diperoleh. Tingkat kepercayaan yang lebih tinggi (misalnya 99%) memberikan keyakinan yang lebih kuat bahwa hasil eksperimen mencerminkan kondisi sebenarnya, namun konsekuensinya adalah rentang kepercayaan menjadi lebih lebar, sehingga keputusan yang diambil cenderung lebih konservatif. Sebaliknya, tingkat kepercayaan yang lebih rendah (misalnya 90%) menghasilkan rentang yang lebih sempit dan keputusan bisa diambil lebih cepat, tetapi dengan risiko kesalahan yang lebih besar. Oleh karena itu, pemilihan tingkat kepercayaan harus disesuaikan dengan konteks bisnis: eksperimen berisiko tinggi biasanya memerlukan tingkat kepercayaan yang lebih tinggi

4 Studi Kasus 4

Perbandingan Presisi (Uji-Z vs Uji-t): Dua tim data mengukur latensi API (dalam milidetik) di bawah kondisi yang berbeda.

\[\begin{eqnarray*} \text{Tim A:} \\ n &=& 36 \quad \text{(Ukuran/jumlah sampel)} \\ \bar{x} &=& 210 \quad \text{(Rata Rata Sampel)} \\ \sigma &=& 24 \quad \text{(Diketahui Simpangan Baku)} \\[6pt] \text{Tim B:} \\ n &=& 36 \quad \text{(Ukuran/jumlah sampel)} \\ \bar{x} &=& 210 \quad \text{(Rata Rata Sampel)} \\ s &=& 24 \quad \text{(Simpangan Baku Sampel)} \end{eqnarray*}\]

Tugas

  1. Identifikasi uji statistik yang digunakan oleh setiap tim.
  2. Hitung Rentang Kepercayaan Untuk 90%, 95%, and 99%.
  3. Buat visualisasi yang membandingkan seluruh interval.
  4. Jelaskan mengapa lebar interval berbeda, meskipun datanya mirip mendekati sama/ serupa.

Penyelesaian Studi Kasus 4

  1. uji statistik yang digunakan oleh setiap tim
  • Tim A menggunakan uji Z (Z-test), karena simpangan baku populasi (σ) diketahui. Dalam kondisi ini, ketidakpastian hanya berasal dari variasi sampel, sehingga distribusi normal sudah memadai untuk melakukan inferensi terhadap rata-rata populasi. Dengan ukuran sampel yang relatif cukup (n = 36), pendekatan ini memberikan estimasi yang stabil dan efisien.

  • Tim B menggunakan uji t, karena simpangan baku populasi tidak diketahui dan digantikan oleh simpangan baku sampel (s). Penggunaan distribusi t diperlukan untuk memperhitungkan tambahan ketidakpastian akibat estimasi simpangan baku dari data sampel, sehingga hasil inferensi menjadi lebih valid dan sesuai dengan kondisi data yang tersedia.

  1. Hitung Rentang Kepercayaan
Rentang Kepercayaan - Distribusi z dan t
Data Tim:
Tim A:
n = 36 (ukuran sampel)
\(\bar{x}\) = 210 (rata-rata sampel)
\(\sigma\) = 24 (diketahui simpangan baku populasi)
Tim B:
n = 36 (ukuran sampel)
\(\bar{x}\) = 210 (rata-rata sampel)
s = 24 (simpangan baku sampel)
Tim A: Distribusi z (σ diketahui)
Rentang Kepercayaan 90%

1. Menentukan \( z_{\alpha/2} \)

Tingkat keyakinan = 90% = 0.90
\[ \alpha = 1 - 0.90 = 0.10 \]
\[ \alpha/2 = 0.10/2 = 0.05 \]
\[ z_{\alpha/2} = z_{0.05} = 1.645 \]

2. Menghitung Margin of Error (ME)

Rumus: \[ ME = z_{\alpha/2} \times \frac{\sigma}{\sqrt{n}} \]
\[ ME = 1.645 \times \frac{24}{\sqrt{36}} \]
\[ ME = 1.645 \times \frac{24}{6} \]
\[ ME = 1.645 \times 4 \]
\[ ME = 6.58 \]

3. Menghitung Rentang Kepercayaan

Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 210 + 6.58 = 216.58
Batas Bawah = 210 - 6.58 = 203.42
Rentang Kepercayaan 90%:
(203.42, 216.58)
Rentang Kepercayaan 95%

1. Menentukan \( z_{\alpha/2} \)

Tingkat keyakinan = 95% = 0.95
\[ \alpha = 1 - 0.95 = 0.05 \]
\[ \alpha/2 = 0.05/2 = 0.025 \]
\[ z_{\alpha/2} = z_{0.025} = 1.96 \]

2. Menghitung Margin of Error (ME)

Rumus: \[ ME = z_{\alpha/2} \times \frac{\sigma}{\sqrt{n}} \]
\[ ME = 1.96 \times \frac{24}{\sqrt{36}} \]
\[ ME = 1.96 \times 4 \]
\[ ME = 7.84 \]

3. Menghitung Rentang Kepercayaan

Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 210 + 7.84 = 217.84
Batas Bawah = 210 - 7.84 = 202.16
Rentang Kepercayaan 95%:
(202.16, 217.84)
Rentang Kepercayaan 99%

1. Menentukan \( z_{\alpha/2} \)

Tingkat keyakinan = 99% = 0.99
\[ \alpha = 1 - 0.99 = 0.01 \]
\[ \alpha/2 = 0.01/2 = 0.005 \]
\[ z_{\alpha/2} = z_{0.005} = 2.576 \]

2. Menghitung Margin of Error (ME)

Rumus: \[ ME = z_{\alpha/2} \times \frac{\sigma}{\sqrt{n}} \]
\[ ME = 2.576 \times \frac{24}{\sqrt{36}} \]
\[ ME = 2.576 \times 4 \]
\[ ME = 10.304 \]

3. Menghitung Rentang Kepercayaan

Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 210 + 10.304 = 220.304
Batas Bawah = 210 - 10.304 = 199.696
Rentang Kepercayaan 99%:
(199.70, 220.30)
Tim B: Distribusi t (σ tidak diketahui)
Rentang Kepercayaan 90%

1. Menentukan \( t_{\alpha/2} \)

Tingkat keyakinan = 90% = 0.90
\[ \alpha = 1 - 0.90 = 0.10 \]
\[ \alpha/2 = 0.10/2 = 0.05 \]
Derajat kebebasan: \( df = n - 1 = 36 - 1 = 35 \)
\[ t_{\alpha/2} = t_{0.05, 35} = 1.690 \]

2. Menghitung Margin of Error (ME)

Rumus: \[ ME = t_{\alpha/2} \times \frac{s}{\sqrt{n}} \]
\[ ME = 1.690 \times \frac{24}{\sqrt{36}} \]
\[ ME = 1.690 \times \frac{24}{6} \]
\[ ME = 1.690 \times 4 \]
\[ ME = 6.76 \]

3. Menghitung Rentang Kepercayaan

Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 210 + 6.76 = 216.76
Batas Bawah = 210 - 6.76 = 203.24
Rentang Kepercayaan 90%:
(203.24, 216.76)
Rentang Kepercayaan 95%

1. Menentukan \( t_{\alpha/2} \)

Tingkat keyakinan = 95% = 0.95
\[ \alpha = 1 - 0.95 = 0.05 \]
\[ \alpha/2 = 0.05/2 = 0.025 \]
Derajat kebebasan: \( df = n - 1 = 36 - 1 = 35 \)
\[ t_{\alpha/2} = t_{0.025, 35} = 2.030 \]

2. Menghitung Margin of Error (ME)

Rumus: \[ ME = t_{\alpha/2} \times \frac{s}{\sqrt{n}} \]
\[ ME = 2.030 \times \frac{24}{\sqrt{36}} \]
\[ ME = 2.030 \times 4 \]
\[ ME = 8.12 \]

3. Menghitung Rentang Kepercayaan

Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 210 + 8.12 = 218.12
Batas Bawah = 210 - 8.12 = 201.88
Rentang Kepercayaan 95%:
(201.88, 218.12)
Rentang Kepercayaan 99%

1. Menentukan \( t_{\alpha/2} \)

Tingkat keyakinan = 99% = 0.99
\[ \alpha = 1 - 0.99 = 0.01 \]
\[ \alpha/2 = 0.01/2 = 0.005 \]
Derajat kebebasan: \( df = n - 1 = 36 - 1 = 35 \)
\[ t_{\alpha/2} = t_{0.005, 35} = 2.724 \]

2. Menghitung Margin of Error (ME)

Rumus: \[ ME = t_{\alpha/2} \times \frac{s}{\sqrt{n}} \]
\[ ME = 2.724 \times \frac{24}{\sqrt{36}} \]
\[ ME = 2.724 \times 4 \]
\[ ME = 10.896 \]

3. Menghitung Rentang Kepercayaan

Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 210 + 10.896 = 220.896
Batas Bawah = 210 - 10.896 = 199.104
Rentang Kepercayaan 99%:
(199.10, 220.90)
  1. Visualisasi yang membandingkan seluruh interval
library(ggplot2)

ci_data <- data.frame(
  CI = factor(rep(c("90%", "95%", "99%"), each = 2),
              levels = c("90%", "95%", "99%")),
  Tim = factor(rep(c("Tim A (z)", "Tim B (t)"), times = 3),
               levels = c("Tim A (z)", "Tim B (t)")),
  lower = c(
    203.42, 203.24,
    202.16, 201.88,
    199.70, 199.10
  ),
  upper = c(
    216.58, 216.76,
    217.84, 218.12,
    220.30, 220.90
  )
)

ci_data$mid <- (ci_data$lower + ci_data$upper)/2

ggplot(ci_data, aes(y = Tim, color = Tim)) +
  
  geom_errorbar(
    aes(xmin = lower, xmax = upper),
    orientation = "y",
    width = 0.25,
    linewidth = 1.4
  ) +
  
  geom_point(aes(x = mid), size = 3.5) +
  
  geom_label(
    aes(x = mid, label = paste0(round(lower,2), " – ", round(upper,2))),
    size = 5.2,
    fontface = "bold",
    fill = "white",
    alpha = 0.85,
    linewidth = 0,
    show.legend = FALSE
  ) +
  
  scale_color_manual(values = c("Tim A (z)" = "#e75480", "Tim B (t)" = "#4d4d4d")) +
  
  facet_wrap(~ CI, ncol = 1) +
  
  labs(
    title = "Perbandingan Rentang Kepercayaan Tim A dan Tim B",
    subtitle = "Interval kepercayaan 90%, 95%, dan 99%",
    x = "Nilai Estimasi",
    y = NULL
  ) +
  
  theme_minimal(base_size = 14) +
  theme(
    legend.position = "none",
    plot.title = element_text(hjust = 0.5, face = "bold", size = 16),
    plot.subtitle = element_text(hjust = 0.5, size = 13),
    strip.text = element_text(face = "bold", size = 14)
  )

  1. Penjelasan mengapa lebar interval berbeda, meskipun datanya mirip mendekati sama/ serupa

Meskipun data dari dua tim terlihat mirip dan rata-ratanya hampir sama, lebar interval kepercayaan bisa berbeda. Hal ini karena beberapa faktor. Pertama, tingkat kepercayaan yang dipilih, misalnya 90%, 95%, atau 99% menentukan seberapa yakin kita bahwa interval tersebut mencakup parameter populasi. Semakin tinggi tingkat kepercayaan, semakin lebar intervalnya. Kedua, metode perhitungan juga berpengaruh; Tim A menggunakan distribusi z, sedangkan Tim B menggunakan distribusi t. Distribusi t memiliki ekor lebih tebal sehingga CI cenderung lebih panjang, terutama untuk sampel kecil. Ketiga, variabilitas data dan ukuran sampel memengaruhi standar error data yang lebih tersebar atau sampel lebih kecil menghasilkan interval yang lebih lebar. Jadi, walaupun datanya hampir sama, kombinasi tingkat kepercayaan, jenis distribusi, dan karakteristik sampel menyebabkan lebar interval terlihat berbeda.

5 Studi Kasus 5

Interval Kepercayaan Satu Sisi: Perusahaan Software as a Service (SaaS) ingin memastikan bahwa setidaknya 70% pengguna aktif mingguan menggunakan fitur premium.

Untuk sebuah percobbaan:

\[ \begin{eqnarray*} n &=& 250 \quad \text{(Keseluruhan pengguna)} \\ x &=& 185 \quad \text{(Pengguna "Premium" yang Aktif)} \end{eqnarray*} \]

Manajemen hanya tertarik pada batas bawah dari perkiraan tersebut.

Tugas:

  1. Identifikasi jenis Rentang Kepercayaan Diri dan uji yang sesuai.
  2. Hitung Interval Kepercayaan satu sisi bawah pada :
    • \(90\%\)
    • \(95\%\)
    • \(99\%\)
  3. Visualisasikan batas bawah untuk semua tingkat kepercayaan.
  4. Tentukan apakah target 70% secara statistik terpenuhi.

Penyelesaian Studi Kasus 5

  1. uji statistik yang digunakan oleh Kasus ini

Kasus ini memerlukan Interval Kepercayaan Satu Sisi (One-Sided Confidence Interval), khususnya batas bawah (Lower Bound), karena tujuannya adalah memastikan nilai minimum “setidaknya 70%” dari populasi, bukan mencari rentang dua sisi. Dengan data berupa proporsi kategorikal (pengguna premium vs. non-premium) dan ukuran sampel yang besar (n=250), uji statistik yang tepat untuk digunakan adalah Uji-Z untuk Satu Proporsi (One-Sample Z-Test for a Proportion), di mana proporsi sampel dihitung sebesar 185/250 = 0.74 atau 74%.

2.Hitung Interval Kepercayaan satu sisi bawah

Interval Kepercayaan Satu Sisi Bawah
Data SaaS - Pengguna Fitur Premium:
n = 250 (total pengguna)
x = 185 (pengguna premium aktif)

Hitung Sample Proporsi \(\hat{p}\)

Rumus: \[ \hat{p} = \frac{x}{n} \]
\[ \hat{p} = \frac{185}{250} \]
\[ \hat{p} = 0.74 \]
Proporsi pengguna premium aktif: 74%
Interval Kepercayaan Satu Sisi Bawah 90%

1. Menentukan \( z_{\alpha} \)

Tingkat keyakinan = 90% = 0.90
\[ \alpha = 1 - 0.90 = 0.10 \]
(Untuk satu sisi bawah, gunakan seluruh α di satu sisi)
\[ z_{\alpha} = z_{0.10} = 1.282 \]

2. Menghitung Margin of Error (ME)

Rumus: \[ ME = z_{\alpha} \times \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \]
\[ ME = 1.282 \times \sqrt{\frac{0.74 \times (1-0.74)}{250}} \]
\[ ME = 1.282 \times \sqrt{\frac{0.74 \times 0.26}{250}} \]
\[ ME = 1.282 \times \sqrt{\frac{0.1924}{250}} \]
\[ ME = 1.282 \times \sqrt{0.0007696} \]
\[ ME = 1.282 \times 0.02774 \]
\[ ME = 0.03557 \]

3. Menghitung Batas Bawah Satu Sisi

Rumus: \[ \text{Batas Bawah} = \hat{p} - ME \]
Batas Bawah = 0.74 - 0.03557 = 0.70443
Interval Kepercayaan Satu Sisi Bawah 90%:
Proporsi ≥ 0.7044
atau ≥ 70.44%
Interpretasi: Dengan keyakinan 90%, kita dapat mengatakan bahwa minimal 70.44% pengguna aktif menggunakan fitur premium.
Interval Kepercayaan Satu Sisi Bawah 95%

1. Menentukan \( z_{\alpha} \)

Tingkat keyakinan = 95% = 0.95
\[ \alpha = 1 - 0.95 = 0.05 \]
\[ z_{\alpha} = z_{0.05} = 1.645 \]

2. Menghitung Margin of Error (ME)

Rumus: \[ ME = z_{\alpha} \times \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \]
\[ ME = 1.645 \times \sqrt{\frac{0.74 \times 0.26}{250}} \]
\[ ME = 1.645 \times 0.02774 \]
\[ ME = 0.04564 \]

3. Menghitung Batas Bawah Satu Sisi

Rumus: \[ \text{Batas Bawah} = \hat{p} - ME \]
Batas Bawah = 0.74 - 0.04564 = 0.69436
Interval Kepercayaan Satu Sisi Bawah 95%:
Proporsi ≥ 0.6944
atau ≥ 69.44%
Interpretasi: Dengan keyakinan 95%, kita dapat mengatakan bahwa minimal 69.44% pengguna aktif menggunakan fitur premium.
Interval Kepercayaan Satu Sisi Bawah 99%

1. Menentukan \( z_{\alpha} \)

Tingkat keyakinan = 99% = 0.99
\[ \alpha = 1 - 0.99 = 0.01 \]
\[ z_{\alpha} = z_{0.01} = 2.326 \]

2. Menghitung Margin of Error (ME)

Rumus: \[ ME = z_{\alpha} \times \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \]
\[ ME = 2.326 \times \sqrt{\frac{0.74 \times 0.26}{250}} \]
\[ ME = 2.326 \times 0.02774 \]
\[ ME = 0.06452 \]

3. Menghitung Batas Bawah Satu Sisi

Rumus: \[ \text{Batas Bawah} = \hat{p} - ME \]
Batas Bawah = 0.74 - 0.06452 = 0.67548
Interval Kepercayaan Satu Sisi Bawah 99%:
Proporsi ≥ 0.6755
atau ≥ 67.55%
Interpretasi: Dengan keyakinan 99%, kita dapat mengatakan bahwa minimal 67.55% pengguna aktif menggunakan fitur premium.
  1. Visualisasikan batas bawah untuk semua tingkat kepercayaan
library(ggplot2)

# Data
confidence <- c(0.90, 0.95, 0.99)
z_alpha <- c(1.282, 1.645, 2.326)
p_hat <- 185 / 250
n <- 250

# Hitung Margin of Error dan Batas Bawah
ME <- z_alpha * sqrt(p_hat * (1 - p_hat) / n)
lower_bound <- p_hat - ME

df <- data.frame(
  Confidence = confidence * 100,
  LowerBound = lower_bound
)

# Buat ggplot dengan posisi label disesuaikan
ggplot(df, aes(x = Confidence, y = LowerBound)) +
  geom_point(size = 4, color = "#008080") +
  geom_line(group = 1, color = "#20b2aa", linetype = "dashed") +
  geom_hline(yintercept = 0.7, color = "red", linetype = "dotted", size = 1) +
  geom_text(aes(label = sprintf("%.3f", LowerBound)),
            vjust = -0.8,  
            color = "#006666",
            size = 5) +
  scale_x_continuous(breaks = df$Confidence) +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1), limits = c(0.65, 0.75)) +
  labs(
    title = "Batas Bawah Interval",
    x = "Tingkat Kepercayaan (%)",
    y = "Batas Bawah Proporsi",
    caption = "Garis merah = target minimal 70%"
  ) +
  theme_minimal(base_size = 14)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

  1. Tentukan apakah target 70% secara statistik terpenuhi.

Berdasarkan data dari 250 pengguna dengan 185 pengguna aktif fitur premium, diperoleh proporsi sampel sebesar 74%. Hasil ini menunjukkan angka yang melebihi target perusahaan sebesar 70%. Namun, setelah dilakukan perhitungan interval kepercayaan satu sisi bawah, ditemukan bahwa pencapaian target bergantung pada tingkat keyakinan statistik yang diterapkan. Pada tingkat keyakinan 90%, batas bawah interval sebesar 70,44% mengindikasikan target terpenuhi, sedangkan pada tingkat keyakinan 95% dan 99% dengan batas bawah masing-masing 69,44% dan 67,55%, target dinyatakan tidak tercapai.Target 70% pengguna fitur premium hanya terpenuhi pada tingkat keyakinan 90%, namun tidak pada tingkat keyakinan yang lebih tinggi (95% dan 99%). Perlu dipertimbangkan bahwa meskipun data sampel menunjukkan angka positif, ketidakpastian statistik pada tingkat keyakinan tinggi menyebabkan target belum dapat dikatakan tercapai secara meyakinkan.

6 Reference

[1] T. Tony Cai, “One-sided confidence intervals in discrete distributions,”Journal of Statistical Planning and Inference, vol. 131, no. 1, pp. 63–88, 2005.

[2] A.-M. Simundic, “Confidence interval,” Biochemia Medica, vol. 18, no. 2, pp. 154–161, 2008.

[3] O. Barndorff-Nielsen, J. Kent, and M. Sørensen, “Normal variance-mean mixtures and z distributions,” International Statistical Review / Revue Internationale de Statistique, pp. 145–159, 1982.

LS0tDQp0aXRsZTogIkNvbmZpZGVuY2UgSW50ZXJ2YWwiICAgICAgICAgICAgIyBNYWluIHRpdGxlIG9mIHRoZSBkb2N1bWVudA0KYXV0aG9yOiAiQW5pbmR5YSBLcmlzdGlhbmluZ3B1dHJpICg1MjI1MDAyNSkiICAgICAgIyBSZXBsYWNlIHdpdGggeW91ciBmdWxsIG5hbWUNCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiICMgQXV0byBkaXNwbGF5cyB0aGUgY3VycmVudCBkYXRlDQpvdXRwdXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICMgT3V0cHV0IHNlY3Rpb24gZGVmaW5lcyB0aGUgZm9ybWF0IGFuZCBsYXlvdXQgDQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOiAgICAgICMgaHR0cHM6Ly9naXRodWIuY29tL2p1YmEvcm1kZm9ybWF0cw0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlICAgICAgICAjIEVtYmVkcyBhbGwgcmVzb3VyY2VzIChDU1MsIEpTLCBpbWFnZXMpIA0KICAgIHRodW1ibmFpbHM6IHRydWUgICAgICAgICAgICAjIERpc3BsYXlzIGltYWdlIHRodW1ibmFpbHMgaW4gdGhlIGRvYw0KICAgIGxpZ2h0Ym94OiB0cnVlICAgICAgICAgICAgICAjIEVuYWJsZXMgY2xpY2sgdG8gZW5sYXJnZSBpbWFnZXMNCiAgICBnYWxsZXJ5OiB0cnVlICAgICAgICAgICAgICAgIyBHcm91cHMgaW1hZ2VzIGludG8gYW4gaW50ZXJhY3RpdmUgZ2FsbGVyeQ0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZSAgICAgICAjIEF1dG9tYXRpY2FsbHkgbnVtYmVycyBhbGwgc2VjdGlvbnMNCiAgICBsaWJfZGlyOiBsaWJzICAgICAgICAgICAgICAgIyBEaXJlY3Rvcnkgd2hlcmUgSmF2YVNjcmlwdC9DU1MgbGlicmFyaWVzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCIgICAgICAgICAgICMgRGlzcGxheXMgZGF0YSBmcmFtZXMgYXMgaW50ZXJhY3RpdmUgcGFnZWQgDQogICAgY29kZV9mb2xkaW5nOiAic2hvdyIgICAgICAgICMgQWxsb3dzIGZvbGRpbmcvdW5mb2xkaW5nIFIgY29kZSBibG9ja3MgDQogICAgY29kZV9kb3dubG9hZDogeWVzICAgICAgICAgICMgQWRkcyBhIGJ1dHRvbiB0byBkb3dubG9hZCBhbGwgUiBjb2RlDQotLS0NCg0KDQpgYGB7PWh0bWx9DQo8IURPQ1RZUEUgaHRtbD4NCjxodG1sIGxhbmc9ImlkIj4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+DQogICAgPHRpdGxlPlByb2ZpbCBNYWhhc2lzd2EgLSBBbmluZHlhIEtyaXN0aWFuaW5ncHV0cmk8L3RpdGxlPg0KICAgIDxzdHlsZT4NCiAgICAgICAgKiB7DQogICAgICAgICAgICBtYXJnaW46IDA7DQogICAgICAgICAgICBwYWRkaW5nOiAwOw0KICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsNCiAgICAgICAgfQ0KDQogICAgICAgIGJvZHkgew0KICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdTZWdvZSBVSScsIHN5c3RlbS11aSwgc2Fucy1zZXJpZjsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGY4Zjg7DQogICAgICAgICAgICBjb2xvcjogIzMzMzsNCiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7DQogICAgICAgICAgICBwYWRkaW5nOiAyMHB4Ow0KICAgICAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOw0KICAgICAgICB9DQoNCiAgICAgICAgLmNvbnRhaW5lciB7DQogICAgICAgICAgICBtYXgtd2lkdGg6IDkwMHB4Ow0KICAgICAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTVweDsNCiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAxMDUsIDEyMCwgMC4xKTsNCiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTBmMGYwOw0KICAgICAgICB9DQoNCiAgICAgICAgLmhlYWRlciB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4MDgwOw0KICAgICAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICAgICAgcGFkZGluZzogMzBweDsNCiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICAgICAgfQ0KDQogICAgICAgIC5wcm9maWxlLWNvbnRlbnQgew0KICAgICAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47DQogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAgZ2FwOiAyMHB4Ow0KICAgICAgICB9DQoNCiAgICAgICAgLnBob3RvLWNvbnRhaW5lciB7DQogICAgICAgICAgICB3aWR0aDogMTUwcHg7DQogICAgICAgICAgICBoZWlnaHQ6IDE1MHB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOw0KICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICAgICAgICAgIGJvcmRlcjogNHB4IHNvbGlkIHdoaXRlOw0KICAgICAgICB9DQoNCiAgICAgICAgLnByb2ZpbGUtcGhvdG8gew0KICAgICAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7DQogICAgICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsNCiAgICAgICAgfQ0KDQogICAgICAgIC5uYW1lIHsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMjhweDsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7DQogICAgICAgIH0NCg0KICAgICAgICAubmltIHsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsNCiAgICAgICAgICAgIHBhZGRpbmc6IDZweCAxNXB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMjBweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7DQogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgIH0NCg0KICAgICAgICAuc3R1ZHktaW5mbyB7DQogICAgICAgICAgICBmb250LXNpemU6IDE2cHg7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7DQogICAgICAgIH0NCg0KICAgICAgICAuZG9zZW4taW5mbyB7DQogICAgICAgICAgICBmb250LXNpemU6IDE2cHg7DQogICAgICAgICAgICBtYXJnaW4tdG9wOiAxMHB4Ow0KICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5za2lsbHMtc2VjdGlvbiB7DQogICAgICAgICAgICBwYWRkaW5nOiAzMHB4Ow0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZmRmZDsNCiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICAgICAgfQ0KDQogICAgICAgIC5za2lsbHMtbGlzdCB7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7DQogICAgICAgICAgICBnYXA6IDE1cHg7DQogICAgICAgIH0NCg0KICAgICAgICAuc2tpbGwtaXRlbSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZmNWY1Ow0KICAgICAgICAgICAgcGFkZGluZzogOHB4IDE1cHg7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICAgICAgICAgICAgZm9udC1zaXplOiAxNXB4Ow0KICAgICAgICAgICAgY29sb3I6ICMwMDY2NjY7DQogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzllNmU2Ow0KICAgICAgICB9DQoNCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7DQogICAgICAgICAgICAuaGVhZGVyIHsNCiAgICAgICAgICAgICAgICBwYWRkaW5nOiAyNXB4IDIwcHg7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIC5waG90by1jb250YWluZXIgew0KICAgICAgICAgICAgICAgIHdpZHRoOiAxMzBweDsNCiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEzMHB4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAubmFtZSB7DQogICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7DQogICAgICAgICAgICBib2R5IHsNCiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMHB4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAuaGVhZGVyIHsNCiAgICAgICAgICAgICAgICBwYWRkaW5nOiAyMHB4IDE1cHg7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIC5uYW1lIHsNCiAgICAgICAgICAgICAgICBmb250LXNpemU6IDIycHg7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIC5uaW0gew0KICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIDwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPg0KICAgICAgICA8aGVhZGVyIGNsYXNzPSJoZWFkZXIiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZmlsZS1jb250ZW50Ij4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwaG90by1jb250YWluZXIiPg0KICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0icHJvZmlsZS5wbmciIA0KICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD0iRm90byBQcm9maWwgQW5pbmR5YSBLcmlzdGlhbmluZ3B1dHJpIiANCiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icHJvZmlsZS1waG90byI+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZmlsZS1pbmZvIj4NCiAgICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzPSJuYW1lIj5BbmluZHlhIEtyaXN0aWFuaW5ncHV0cmk8L2gxPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJuaW0iPk5JTTogNTIyNTAwMjU8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3R1ZHktaW5mbyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8cD5TdHVkZW50IE1ham9yIERhdGEgU2NpZW5jZTwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxwPkluc3RpdHV0IFRla25vbG9naSBTYWlucyBCYW5kdW5nPC9wPg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG9zZW4taW5mbyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8cD5Eb3NlbjogQmFrdGkgU2lyZWdhciwgTS5TYy4sIENEUzwvcD4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9oZWFkZXI+DQoNCiAgICAgICAgPGRpdiBjbGFzcz0ic2tpbGxzLXNlY3Rpb24iPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2tpbGxzLWxpc3QiPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJza2lsbC1pdGVtIj5SIFByb2dyYW1taW5nPC9zcGFuPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJza2lsbC1pdGVtIj5TdGF0aXN0aWNzPC9zcGFuPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJza2lsbC1pdGVtIj5Db25maWRlbmNlIEludGVydmFsPC9zcGFuPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0KYGBgDQoNCi0tLQ0KDQojIyBTdHVkaSBLYXN1cyAxIA0KDQoqKlJlbnRhbmcgS2VwZXJjYXlhYW4gdW50dWsgUmF0YS1yYXRhLCAkXHNpZ21hJCBEaWtldGFodWk6KiogU2VidWFoICoqUGxhdGZvcm0gQXBsaWthc2kgQmVsYW5qYSBPbmxpbmUqKiBpbmdpbiBtZW1wZXJraXJha2FuICoqUmF0YS1yYXRhIGp1bWxhaCB0cmFuc2Frc2kgaGFyaWFuIHBlciBwZW5nZ3VuYSoqIFNldGVsYWggTWVsdW5jdXJrYW4gRml0dXIgYmFydS4gQmVyZGFzYXJrYW4gZGFyaSBkYXRhIGhpc3RvcmlzIGJlcnNrYWxhIGJlc2FyLCAqKnBvcHVsYXNpIFNpbXBhbmdhbiBCYWt1KiogU3VkYWggZGtldGFodWkuDQoNCiQkDQpcYmVnaW57ZXFuYXJyYXkqfQ0KXHNpZ21hICY9JiAzLjIgXHF1YWQgXHRleHR7KFBvcHVsYXNpIFNpbXBhbmdhbiBCYWt1KX0gXFwNCm4gJj0mIDEwMCBccXVhZCBcdGV4dHsoVWt1cmFuL2p1bWxhaCBzYW1wZWwpfSBcXA0KXGJhcnt4fSAmPSYgMTIuNiBccXVhZCBcdGV4dHsocmF0YSByYXRhIHNhbXBlbCl9DQpcZW5ke2VxbmFycmF5Kn0NCiQkDQoNCg0KOjo6IHtzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZTZmN2Y1OyBib3JkZXItbGVmdDo2cHggc29saWQgIzAwODA4MDsgcGFkZGluZzoxMnB4OyBib3JkZXItcmFkaXVzOjhweDsgbWFyZ2luOjIwcHggMDsifQ0KDQoqKlR1Z2FzKioNCg0KMS4gSWRlbnRpZmthc2kgKipVamkgU2F0YXRpc3RpayoqIHlhbmcgc2VzdWFpIGRhbiBqZWxhc2thbiBhbGFzYW5tdS4NCg0KMi4gSGl0dW5nIFJlbnRhbmcgS2VwZXJjYXlhYW4gVW50dWs6DQogICAtICQ5MFwlJA0KICAgLSAkOTVcJSQNCiAgIC0gJDk5XCUkDQogICANCjMuIEJ1YXQgU2VidWFoICoqVmlzdWFsaXNhc2kgUGVyYmFuZGluZ2FuKiogZGFyaSBrZXRpZ2EgSW50ZXJ2YWwgS2VwZXJjYXlhYW4gdGVyc2VidXQuDQoNCjQuIEludGVycHJldGFzaWthbiBIYXNpbG55YSBkYWxhbSBLb250ZWtzIEFuYWxpc2lzIEJpc25pcy4NCg0KOjo6DQoNCg0KOjo6IHtzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZjFlZmZhOyBib3JkZXItbGVmdDo2cHggc29saWQgIzNmNTFiNTsgcGFkZGluZzoxMnB4OyBib3JkZXItcmFkaXVzOjhweDsgbWFyZ2luOjIwcHggMDsifQ0KDQo8cCBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeTsgdGV4dC1qdXN0aWZ5OiBpbnRlci13b3JkOyI+IA0KKioqUGVueWVsZXNhaWFuIFN0dWRpIEthc3VzIDEqKiogDQo8L3A+DQoNCjEuICoqSWRlbnRpZmthc2kgVWppIFN0YXRpc3RpayoqDQoNCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5OyB0ZXh0LWp1c3RpZnk6IGludGVyLXdvcmQ7Ij4gDQpVamkgWiBkaWd1bmFrYW4gcGFkYSBwZW5lbGl0aWFuIGluaSBrYXJlbmEgKipzZWx1cnVoIHBhcmFtZXRlciB5YW5nIGRpcGVybHVrYW4gdGVsYWggZGlrZXRhaHVpKiosIHlhaXR1IHNpbXBhbmdhbiBiYWt1IHBvcHVsYXNpIHNlYmVzYXIgMywyLCByYXRhLXJhdGEgc2FtcGVsIDEyLDYsIGRhbiAqKnVrdXJhbiBzYW1wZWwgeWFuZyBiZXNhcioqIChuID0gMTAwKS4gRGVuZ2FuIGp1bWxhaCBzYW1wZWwgeWFuZyBiZXNhciwgZGlzdHJpYnVzaSByYXRhLXJhdGEgc2FtcGVsIGRhcGF0IGRpYXN1bXNpa2FuIG1lbmRla2F0aSBkaXN0cmlidXNpIG5vcm1hbCBzZXN1YWkgVGVvcmVtYSBMaW1pdCBUZW5nYWgsIHNlaGluZ2dhIHBlbmdndW5hYW4gZGlzdHJpYnVzaSBaIG1lbmphZGkgdGVwYXQuIE9sZWgga2FyZW5hIGl0dSwga2FyZW5hIHNlbXVhIGluZm9ybWFzaSB1dGFtYSB0ZWxhaCB0ZXJzZWRpYSBkYW4gbiDiiaUgMzAsIHVqaSBaIG1lcnVwYWthbiBwaWxpaGFuIHlhbmcgcGFsaW5nIHRlcGF0IHVudHVrIG1lbmd1amkgcmF0YS1yYXRhIHBvcHVsYXNpIHBhZGEga2FzdXMgaW5pLg0KPC9wPg0KDQo6Ojoge3N0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNmMWVmZmE7IGJvcmRlci1sZWZ0OjZweCBzb2xpZCAjMUU5MEZGOyBwYWRkaW5nOjEycHg7IGJvcmRlci1yYWRpdXM6OHB4OyBtYXJnaW46MjBweCAwOyJ9DQoNCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5OyB0ZXh0LWp1c3RpZnk6IGludGVyLXdvcmQ7Ij4gDQoqKlJ1bXVzIERpc3RyaWJ1c2kgWiBkYWxhbSBSZW50YW5nIEtlcGVyY2F5YWFuKioNCjwvcD4NCg0KDQokJA0KXHRleHR7Q0l9ID0gXGJhcnt4fSBccG0gel97XGFscGhhLzJ9IFxmcmFje1xzaWdtYX17XHNxcnR7bn19DQokJA0KDQpcdGV4dGJme0tldGVyYW5nYW46fQ0KICRcYmFye3h9JCA6IFJhdGEtcmF0YSBzYW1wZWwgIA0KICRcc2lnbWEkIDogU3RhbmRhciBkZXZpYXNpIHBvcHVsYXNpICANCiAkbiQgOiBVa3VyYW4gc2FtcGVsICANCiAkel97XGFscGhhLzJ9JCA6IE5pbGFpIGtyaXRpcyBkaXN0cmlidXNpIG5vcm1hbCBzdGFuZGFyICgkMS1cYWxwaGEkKSAgDQogJFxwbSQgOiBNZW51bmp1a2thbiBiYXRhcyBiYXdhaCBkYW4gYmF0YXMgYXRhcyBpbnRlcnZhbCBrZXBlcmNheWFhbg0KOjo6DQoNCg0KMi4gKipIaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbioqDQoNCmBgYHs9aHRtbH0NCjwhRE9DVFlQRSBodG1sPg0KPGh0bWwgbGFuZz0iaWQiPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPg0KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4NCiAgICA8dGl0bGU+UmVudGFuZyBLZXBlcmNheWFhbjwvdGl0bGU+DQogICAgPHN0eWxlPg0KICAgICAgICAqIHsNCiAgICAgICAgICAgIG1hcmdpbjogMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDA7DQogICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdTZWdvZSBVSScsIFRhaG9tYSwgR2VuZXZhLCBWZXJkYW5hLCBzYW5zLXNlcmlmOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBib2R5IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGZjZmM7DQogICAgICAgICAgICBjb2xvcjogIzMzMzsNCiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7DQogICAgICAgICAgICBwYWRkaW5nOiAyMHB4Ow0KICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAwcHg7DQogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmRhdGEtaW5mbyB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmOGY4Ow0KICAgICAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7DQogICAgICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkICMwMDgwODA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5jb25maWRlbmNlLWNvbnRhaW5lciB7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgICAgICAgICAgIGdhcDogNDBweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmNvbmZpZGVuY2Utc2VjdGlvbiB7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4MDgwOw0KICAgICAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICAgICAgcGFkZGluZzogOHB4IDIwcHg7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7DQogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOw0KICAgICAgICAgICAgZm9udC1zaXplOiAxLjJyZW07DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS05NSAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjBiMmFhOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS05OSAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDhkMWNjOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBoMyB7DQogICAgICAgICAgICBjb2xvcjogIzAwNjY2NjsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtOw0KICAgICAgICAgICAgbWFyZ2luOiAyNXB4IDAgMTBweCAwOw0KICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDVweDsNCiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBmMGYwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuc3RlcCB7DQogICAgICAgICAgICBtYXJnaW46IDE1cHggMDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmZvcm11bGEgew0KICAgICAgICAgICAgbWFyZ2luOiAxMHB4IDA7DQogICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5jYWxjdWxhdGlvbiB7DQogICAgICAgICAgICBtYXJnaW46IDhweCAwOw0KICAgICAgICAgICAgcGFkZGluZzogNXB4IDA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5pbnRlcnZhbC1yZXN1bHQgew0KICAgICAgICAgICAgbWFyZ2luOiAyNXB4IDA7DQogICAgICAgICAgICBwYWRkaW5nOiAxNXB4Ow0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZjVmNTsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsNCiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmludGVydmFsLXZhbHVlIHsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS40cmVtOw0KICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsNCiAgICAgICAgICAgIGNvbG9yOiAjMDA2NjY2Ow0KICAgICAgICAgICAgbWFyZ2luOiAxMHB4IDA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5wbGFpbi10ZXh0IHsNCiAgICAgICAgICAgIG1hcmdpbjogMTBweCAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsNCiAgICAgICAgICAgIGJvZHkgew0KICAgICAgICAgICAgICAgIHBhZGRpbmc6IDE1cHg7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIC5jb25maWRlbmNlLWNvbnRhaW5lciB7DQogICAgICAgICAgICAgICAgZ2FwOiAzMHB4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KICAgIDxkaXYgY2xhc3M9ImRhdGEtaW5mbyI+DQogICAgICAgIDxzdHJvbmc+RGF0YSB5YW5nIGRpZ3VuYWthbjo8L3N0cm9uZz4NCiAgICAgICAgPGRpdj5SYXRhLXJhdGEgc2FtcGVsIChcKFxiYXJ7eH1cKSkgPSAxMi42PC9kaXY+DQogICAgICAgIDxkaXY+U3RhbmRhciBkZXZpYXNpIHBvcHVsYXNpIChcKFxzaWdtYVwpKSA9IDMuMjwvZGl2Pg0KICAgICAgICA8ZGl2PlVrdXJhbiBzYW1wZWwgKFwoblwpKSA9IDEwMDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIA0KICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2UtY29udGFpbmVyIj4NCiAgICAgICAgDQogICAgICAgIDwhLS0gOTAlIENvbmZpZGVuY2UgSW50ZXJ2YWwgLS0+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2Utc2VjdGlvbiI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXRpdGxlIj5SZW50YW5nIEtlcGVyY2F5YWFuIDkwJTwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+MS4gTWVuZ2hpdHVuZyBcKHpfe1xhbHBoYS8yfVwpPC9oMz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgVGluZ2thdCBrZXlha2luYW4gPSA5MCUgPSAwLjkwDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBcYWxwaGEgPSAxIC0gMC45MCA9IDAuMTAgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIFxhbHBoYS8yID0gMC4xMC8yID0gMC4wNSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgel97XGFscGhhLzJ9ID0gel97MC4wNX0gPSAxLjY0NSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4yLiBNZW5naGl0dW5nIE1hcmdpbiBvZiBFcnJvciAoTUUpPC9oMz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm11bGEiPg0KICAgICAgICAgICAgICAgICAgICBSdW11czogXFsgTUUgPSB6X3tcYWxwaGEvMn0gXHRpbWVzIFxmcmFje1xzaWdtYX17XHNxcnR7bn19IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBNRSA9IDEuNjQ1IFx0aW1lcyBcZnJhY3szLjJ9e1xzcXJ0ezEwMH19IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBNRSA9IDEuNjQ1IFx0aW1lcyAwLjMyIFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBNRSA9IDAuNTI2NCBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4zLiBNZW5naGl0dW5nIFJlbnRhbmcgS2VwZXJjYXlhYW48L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybXVsYSI+DQogICAgICAgICAgICAgICAgICAgIFJ1bXVzOiBcWyBcYmFye3h9IFxwbSBNRSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYWluLXRleHQiPg0KICAgICAgICAgICAgICAgICAgICBCYXRhcyBBdGFzID0gMTIuNiArIDAuNTI2NCA9IDEzLjEyNjQNCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICAgICAgQmF0YXMgQmF3YWggPSAxMi42IC0gMC41MjY0ID0gMTIuMDczNg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXJlc3VsdCI+DQogICAgICAgICAgICAgICAgPGRpdj5SZW50YW5nIEtlcGVyY2F5YWFuIDkwJTo8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcnZhbC12YWx1ZSI+KDEyLjA3MzYsIDEzLjEyNjQpPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIA0KICAgICAgICA8IS0tIDk1JSBDb25maWRlbmNlIEludGVydmFsIC0tPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXNlY3Rpb24gY29uZmlkZW5jZS05NSI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXRpdGxlIj5SZW50YW5nIEtlcGVyY2F5YWFuIDk1JTwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+MS4gTWVuZ2hpdHVuZyBcKHpfe1xhbHBoYS8yfVwpPC9oMz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgVGluZ2thdCBrZXlha2luYW4gPSA5NSUgPSAwLjk1DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBcYWxwaGEgPSAxIC0gMC45NSA9IDAuMDUgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIFxhbHBoYS8yID0gMC4wNS8yID0gMC4wMjUgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIHpfe1xhbHBoYS8yfSA9IHpfezAuMDI1fSA9IDEuOTYgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+Mi4gTWVuZ2hpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1FKTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtdWxhIj4NCiAgICAgICAgICAgICAgICAgICAgUnVtdXM6IFxbIE1FID0gel97XGFscGhhLzJ9IFx0aW1lcyBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAxLjk2IFx0aW1lcyBcZnJhY3szLjJ9e1xzcXJ0ezEwMH19IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBNRSA9IDEuOTYgXHRpbWVzIDAuMzIgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIE1FID0gMC42MjcyIFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjMuIE1lbmdoaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbjwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtdWxhIj4NCiAgICAgICAgICAgICAgICAgICAgUnVtdXM6IFxbIFxiYXJ7eH0gXHBtIE1FIFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgICAgIEJhdGFzIEF0YXMgPSAxMi42ICsgMC42MjcyID0gMTMuMjI3Mg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYWluLXRleHQiPg0KICAgICAgICAgICAgICAgICAgICBCYXRhcyBCYXdhaCA9IDEyLjYgLSAwLjYyNzIgPSAxMS45NzI4DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtcmVzdWx0Ij4NCiAgICAgICAgICAgICAgICA8ZGl2PlJlbnRhbmcgS2VwZXJjYXlhYW4gOTUlOjwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXZhbHVlIj4oMTEuOTcyOCwgMTMuMjI3Mik8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgDQogICAgICAgIDwhLS0gOTklIENvbmZpZGVuY2UgSW50ZXJ2YWwgLS0+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2Utc2VjdGlvbiBjb25maWRlbmNlLTk5Ij4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2UtdGl0bGUiPlJlbnRhbmcgS2VwZXJjYXlhYW4gOTklPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4xLiBNZW5naGl0dW5nIFwoel97XGFscGhhLzJ9XCk8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBUaW5na2F0IGtleWFraW5hbiA9IDk5JSA9IDAuOTkNCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIFxhbHBoYSA9IDEgLSAwLjk5ID0gMC4wMSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgXGFscGhhLzIgPSAwLjAxLzIgPSAwLjAwNSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgel97XGFscGhhLzJ9ID0gel97MC4wMDV9ID0gMi41NzYgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+Mi4gTWVuZ2hpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1FKTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtdWxhIj4NCiAgICAgICAgICAgICAgICAgICAgUnVtdXM6IFxbIE1FID0gel97XGFscGhhLzJ9IFx0aW1lcyBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAyLjU3NiBcdGltZXMgXGZyYWN7My4yfXtcc3FydHsxMDB9fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAyLjU3NiBcdGltZXMgMC4zMiBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAwLjgyNDMyIFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjMuIE1lbmdoaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbjwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtdWxhIj4NCiAgICAgICAgICAgICAgICAgICAgUnVtdXM6IFxbIFxiYXJ7eH0gXHBtIE1FIFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgICAgIEJhdGFzIEF0YXMgPSAxMi42ICsgMC44MjQzMiA9IDEzLjQyNDMyDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgICAgIEJhdGFzIEJhd2FoID0gMTIuNiAtIDAuODI0MzIgPSAxMS43NzU2OA0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXJlc3VsdCI+DQogICAgICAgICAgICAgICAgPGRpdj5SZW50YW5nIEtlcGVyY2F5YWFuIDk5JTo8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcnZhbC12YWx1ZSI+KDExLjc3NTY4LCAxMy40MjQzMik8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCg0KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL3BvbHlmaWxsLmlvL3YzL3BvbHlmaWxsLm1pbi5qcz9mZWF0dXJlcz1lczYiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgaWQ9Ik1hdGhKYXgtc2NyaXB0IiBhc3luYyBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbWF0aGpheEAzL2VzNS90ZXgtbW1sLWNodG1sLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0Pg0KICAgICAgICB3aW5kb3cuTWF0aEpheCA9IHsNCiAgICAgICAgICAgIHRleDogew0KICAgICAgICAgICAgICAgIGlubGluZU1hdGg6IFtbJyQnLCAnJCddLCBbJ1xcKCcsICdcXCknXV0sDQogICAgICAgICAgICAgICAgZGlzcGxheU1hdGg6IFtbJyQkJywgJyQkJ10sIFsnXFxbJywgJ1xcXSddXQ0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIGNodG1sOiB7DQogICAgICAgICAgICAgICAgc2NhbGU6IDAuOQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9Ow0KICAgIDwvc2NyaXB0Pg0KPC9ib2R5Pg0KPC9odG1sPg0KYGBgDQoNCg0KMy4gKipWaXN1YWxpc2FzaSBQZXJiYW5kaW5nYW4gZGFyaSBrZXRpZ2EgSW50ZXJ2YWwgS2VwZXJjYXlhYW4qKg0KDQpgYGB7cn0NCg0KbGlicmFyeShnZ3Bsb3QyKQ0KDQpjaV9kYXRhIDwtIGRhdGEuZnJhbWUoDQogIENJID0gZmFjdG9yKGMoIjkwJSIsICI5NSUiLCAiOTklIiksIGxldmVscyA9IGMoIjkwJSIsICI5NSUiLCAiOTklIikpLA0KICBtZWFuID0gYygxMi42LCAxMi42LCAxMi42KSwNCiAgbG93ZXIgPSBjKDEyLjA3MzYsIDExLjk3MjgsIDExLjc3NTY4KSwNCiAgdXBwZXIgPSBjKDEzLjEyNjQsIDEzLjIyNzIsIDEzLjQyNDMyKQ0KKQ0KZ2dwbG90KGNpX2RhdGEsIGFlcyh4ID0gQ0ksIHkgPSBtZWFuLCBjb2xvciA9IENJKSkgKw0KDQogIGdlb21fcG9pbnQoc2l6ZSA9IDQpICsNCg0KICBnZW9tX2Vycm9yYmFyKA0KICAgIGFlcyh5bWluID0gbG93ZXIsIHltYXggPSB1cHBlciksDQogICAgd2lkdGggPSAwLjE4LA0KICAgIGxpbmV3aWR0aCA9IDEuMw0KICApICsNCg0KICAjIExhYmVsIENJIHRlcGF0IGRpIHRlbmdhaCB0aXRpayBtZWFuDQogIGdlb21fdGV4dCgNCiAgICBhZXMoDQogICAgICB4ID0gQ0ksDQogICAgICB5ID0gbWVhbiwNCiAgICAgIGxhYmVsID0gcGFzdGUwKCIoIiwgcm91bmQobG93ZXIsMiksICIsICIsIHJvdW5kKHVwcGVyLDIpLCAiKSIpDQogICAgKSwNCiAgICBoanVzdCA9IDAuNSwNCiAgICB2anVzdCA9IDAuNSwNCiAgICBzaXplID0gMy44LA0KICAgIGNvbG9yID0gImJsYWNrIiwNCiAgICBpbmhlcml0LmFlcyA9IEZBTFNFDQogICkgKw0KDQogIHNjYWxlX2NvbG9yX21hbnVhbCgNCiAgICB2YWx1ZXMgPSBjKA0KICAgICAgIjkwJSIgPSAiIzJDQjFBNiIsDQogICAgICAiOTUlIiA9ICIjMUU4RjhCIiwNCiAgICAgICI5OSUiID0gIiMxNjZFNkEiDQogICAgKQ0KICApICsNCg0KICBsYWJzKA0KICAgIHRpdGxlID0gIlZpc3VhbGlzYXNpIFJlbnRhbmcgS2VwZXJjYXlhYW4gTWVhbiIsDQogICAgc3VidGl0bGUgPSAiUGVyYmFuZGluZ2FuIFJlbnRhbmcgS2VwZXJjYXlhYW4gOTAlLCA5NSUsIGRhbiA5OSUgdGVyaGFkYXAgTWVhbiBTYW1wZWwiLA0KICAgIHggPSAiVGluZ2thdCBLZXBlcmNheWFhbiIsDQogICAgeSA9ICJOaWxhaSBNZWFuIg0KICApICsNCg0KICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDEzKSArDQogIHRoZW1lKA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgaGp1c3QgPSAwLjUpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLA0KICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBoanVzdCA9IDAuNSksDQogICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGhqdXN0ID0gMC41KSwNCiAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksDQogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIg0KICApDQpgYGANCg0KNC4gKipJbnRlcnByZXRhc2lrYW4gZGFsYW0gS29udGVrcyBBbmFsaXNpcyBCaXNuaXMuKioNCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5OyB0ZXh0LWp1c3RpZnk6IGludGVyLXdvcmQ7Ij4gDQpFc3RpbWFzaSByYXRhLXJhdGEgc2VraXRhciAxMiw2IHRyYW5zYWtzaSBoYXJpYW4gcGVyIHBlbmdndW5hIG1lbnVuanVra2FuIGluZGlrYXNpIHBlbmluZ2thdGFuIGFrdGl2aXRhcyBwZW5nZ3VuYSBzZXRlbGFoIGZpdHVyIGRpbHVuY3Vya2FuLiBSZW50YW5nIGtlcGVyY2F5YWFuIDkwJSBkYXBhdCBkaW1hbmZhYXRrYW4gc2ViYWdhaSBkYXNhciBrZXB1dHVzYW4gYXdhbCB1bnR1ayB1amkgb3BlcmFzaW9uYWwgZGFuIG9wdGltYWxpc2FzaSBmaXR1ciBrYXJlbmEgaW50ZXJ2YWxueWEgbGViaWggc2VtcGl0IGRhbiBjZXBhdCBtZW1iZXJpa2FuIHNpbnlhbCBwZXJmb3JtYS4gUmVudGFuZyBrZXBlcmNheWFhbiA5NSUgbWVtYmVyaWthbiB0aW5na2F0IGtleWFraW5hbiB5YW5nIGxlYmloIHNlaW1iYW5nIGRhbiBwYWxpbmcgdGVwYXQgZGlndW5ha2FuIHNlYmFnYWkgZGFzYXIga2VwdXR1c2FuIG1hbmFqZXJpYWwgdXRhbWEsIHlhaXR1IG1lbGFuanV0a2FuIGF0YXUgbWVtcGVydGFoYW5rYW4gZml0dXIgZGFsYW0gamFuZ2thIG1lbmVuZ2FoLiBTZW1lbnRhcmEgaXR1LCByZW50YW5nIGtlcGVyY2F5YWFuIDk5JSBtZW1iZXJpa2FuIGtleWFraW5hbiB0ZXJ0aW5nZ2kgYmFod2EgcGVuaW5na2F0YW4gdHJhbnNha3NpIGJlbmFyLWJlbmFyIHRlcmphZGksIHNlaGluZ2dhIGxlYmloIGFtYW4gZGlndW5ha2FuIHNlYmFnYWkgZGFzYXIga2VwdXR1c2FuIHN0cmF0ZWdpcyBiZXJuaWxhaSBiZXNhciwgc2VwZXJ0aSBhbG9rYXNpIGFuZ2dhcmFuIHBlbmdlbWJhbmdhbiBsYW5qdXRhbiBkYW4gcGVuZXJhcGFuIGZpdHVyIHNlY2FyYSBtZW55ZWx1cnVoLg0KPC9wPg0KDQo6OjoNCg0KDQotLS0NCg0KDQojIyBTdHVkaSBLYXN1cyAyIA0KDQoqKlJlbnRhbmcgS2VwZXJjYXlhYW4gcmF0YSByYXRhLCAkXHNpZ21hJCB0aWRhayBkaWtldGFodWk6KiogU2VidWFoICoqVGltIFBlbmVsaXRpYW4gQVgqKiBtZW5nYW5hbGlzaXMgKipXYWt0dSBQZW55ZWxlc2FpYW4gVHVnYXMgKGRhbGFtIGhpdHVuZ2FuIG1lbml0KSoqIHVudHVrIGFwbGlrYXNpIHNlbHVsZXIuIERhdGEgaW5pIGRpa3VtcHVsa2FuIGRhcmkgKioxMiBwZW5nZ3VuYSoqOg0KDQokJA0KOC40LFw7IDcuOSxcOyA5LjEsXDsgOC43LFw7IDguMixcOyA5LjAsXDsNCjcuOCxcOyA4LjUsXDsgOC45LFw7IDguMSxcOyA4LjYsXDsgOC4zDQokJA0KDQo6Ojoge3N0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNlNmY3ZjU7IGJvcmRlci1sZWZ0OjZweCBzb2xpZCAjMDA4MDgwOyBwYWRkaW5nOjEycHg7IGJvcmRlci1yYWRpdXM6OHB4OyBtYXJnaW46MjBweCAwOyJ9DQoNCioqVHVnYXM6KioNCg0KMS4gSWRlbnRpZmthc2kgKipVamkgU2F0YXRpc3RpayoqIHlhbmcgc2VzdWFpIGRhbiBqZWxhc2thbiBhbGFzYW5tdS4NCjIuIEhpdHVuZyBJbnRlcnZhbCBLZXBlcmNheWFhbiBVbnR1azoNCiAgIC0gJDkwXCUkDQogICAtICQ5NVwlJA0KICAgLSAkOTlcJSQNCjMuIFZpc3VhbGlzYXNpa2FuIGtldGlnYSBpbnRlcnZhbCB0ZXJzZWJ1dCBwYWRhIHNhdHUgcGxvdC4NCjQuIEplbGFza2FuIGJhZ2FpbWFuYSAqKnVrdXJhbiBzYW1wZWwgZGFuIHRpbmdrYXQga2VwZXJjYXlhYW4qKiBtZW1lbmdhcnVoaSBsZWJhciBpbnRlcnZhbC4NCg0KOjo6DQoNCg0KOjo6IHtzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZjFlZmZhOyBib3JkZXItbGVmdDo2cHggc29saWQgIzNmNTFiNTsgcGFkZGluZzoxMnB4OyBib3JkZXItcmFkaXVzOjhweDsgbWFyZ2luOjIwcHggMDsifQ0KDQo8cCBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeTsgdGV4dC1qdXN0aWZ5OiBpbnRlci13b3JkOyI+IA0KKipQZW55ZWxlc2FpYW4gU3R1ZGkgS2FzdXMgMiAqKg0KPC9wPg0KDQoNCjEuICAqKklkZW50aWZrYXNpIFVqaSBTdGF0aXN0aWsqKg0KPHAgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnk7IHRleHQtanVzdGlmeTogaW50ZXItd29yZDsiPiANCkthc3VzIGluaSBkaWFuYWxpc2lzIG1lbmdndW5ha2FuICoqcmVudGFuZyBrZXBlcmNheWFhbiByYXRhLXJhdGEgZGVuZ2FuIGRpc3RyaWJ1c2kgdCoqIGthcmVuYSAqKnNpbXBhbmdhbiBiYWt1IHBvcHVsYXNpICjPgykgdGlkYWsgZGlrZXRhaHVpKiogZGFuICoqanVtbGFoIHNhbXBlbCByZWxhdGlmIGtlY2lsIChuID0gMTIpKiouIERhdGEgeWFuZyBkaWFuYWxpc2lzIGJlcnVwYSAqKndha3R1IHBlbnllbGVzYWlhbiB0dWdhcyBkYWxhbSBzYXR1YW4gbWVuaXQqKiwgc2VoaW5nZ2Egc2VzdWFpIHVudHVrIGFuYWxpc2lzIHJhdGEtcmF0YS4gRGFsYW0ga29uZGlzaSB0ZXJzZWJ1dCwgZGlzdHJpYnVzaSB0IGxlYmloIHRlcGF0IGRpZ3VuYWthbiBkaWJhbmRpbmdrYW4gZGlzdHJpYnVzaSBub3JtYWwga2FyZW5hIG1hbXB1IG1lbXBlcmhpdHVuZ2thbiBrZXRpZGFrcGFzdGlhbiBha2liYXQgZXN0aW1hc2kgc2ltcGFuZ2FuIGJha3UgZGFyaSBzYW1wZWwuDQo8L3A+DQoNCjIuICoqSGl0dW5nIFJlbnRhbmcgS2VwZXJjYXlhYW4qKg0KDQpgYGB7PWh0bWx9DQo8IURPQ1RZUEUgaHRtbD4NCjxodG1sIGxhbmc9ImlkIj4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+DQogICAgPHRpdGxlPlJlbnRhbmcgS2VwZXJjYXlhYW4gZGVuZ2FuIERpc3RyaWJ1c2kgdDwvdGl0bGU+DQogICAgPHN0eWxlPg0KICAgICAgICAqIHsNCiAgICAgICAgICAgIG1hcmdpbjogMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDA7DQogICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdTZWdvZSBVSScsIFRhaG9tYSwgR2VuZXZhLCBWZXJkYW5hLCBzYW5zLXNlcmlmOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBib2R5IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGZjZmM7DQogICAgICAgICAgICBjb2xvcjogIzMzMzsNCiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7DQogICAgICAgICAgICBwYWRkaW5nOiAyMHB4Ow0KICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAwcHg7DQogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmRhdGEtaW5mbyB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmOGY4Ow0KICAgICAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7DQogICAgICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkICMwMDgwODA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5jb25maWRlbmNlLWNvbnRhaW5lciB7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgICAgICAgICAgIGdhcDogNDBweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmNvbmZpZGVuY2Utc2VjdGlvbiB7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4MDgwOw0KICAgICAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICAgICAgcGFkZGluZzogOHB4IDIwcHg7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7DQogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOw0KICAgICAgICAgICAgZm9udC1zaXplOiAxLjJyZW07DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS05NSAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjBiMmFhOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS05OSAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDhkMWNjOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBoMyB7DQogICAgICAgICAgICBjb2xvcjogIzAwNjY2NjsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtOw0KICAgICAgICAgICAgbWFyZ2luOiAyNXB4IDAgMTBweCAwOw0KICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDVweDsNCiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBmMGYwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY2FsY3VsYXRpb24gew0KICAgICAgICAgICAgbWFyZ2luOiA4cHggMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDVweCAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuaW50ZXJ2YWwtcmVzdWx0IHsNCiAgICAgICAgICAgIG1hcmdpbjogMjVweCAwOw0KICAgICAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNmY1ZjU7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7DQogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5pbnRlcnZhbC12YWx1ZSB7DQogICAgICAgICAgICBmb250LXNpemU6IDEuNHJlbTsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7DQogICAgICAgICAgICBjb2xvcjogIzAwNjY2NjsNCiAgICAgICAgICAgIG1hcmdpbjogMTBweCAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAucGxhaW4tdGV4dCB7DQogICAgICAgICAgICBtYXJnaW46IDEwcHggMDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7DQogICAgICAgICAgICBib2R5IHsNCiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNXB4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAuY29uZmlkZW5jZS1jb250YWluZXIgew0KICAgICAgICAgICAgICAgIGdhcDogMzBweDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIDwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCiAgICA8ZGl2IGNsYXNzPSJkYXRhLWluZm8iPg0KICAgICAgICA8c3Ryb25nPkRhdGEgV2FrdHUgUGVueWVsZXNhaWFuIFR1Z2FzIChtZW5pdCk6PC9zdHJvbmc+DQogICAgICAgIDxkaXY+OC40LCA3LjksIDkuMSwgOC43LCA4LjIsIDkuMCwgNy44LCA4LjUsIDguOSwgOC4xLCA4LjYsIDguMzwvZGl2Pg0KICAgICAgICA8ZGl2Pm4gPSAxMiAodWt1cmFuIHNhbXBlbCk8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICANCiAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLWNvbnRhaW5lciI+DQogICAgICAgIA0KICAgICAgICA8IS0tIDkwJSBDb25maWRlbmNlIEludGVydmFsIC0tPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXNlY3Rpb24iPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlkZW5jZS10aXRsZSI+UmVudGFuZyBLZXBlcmNheWFhbiA5MCU8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjEuIEhpdHVuZyBNZWFuIChSYXRhLXJhdGEpPC9oMz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBEYXRhOiA4LjQsIDcuOSwgOS4xLCA4LjcsIDguMiwgOS4wLCA3LjgsIDguNSwgOC45LCA4LjEsIDguNiwgOC4zDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBcYmFye3h9ID0gXGZyYWN7OC40ICsgNy45ICsgOS4xICsgOC43ICsgLi4uLi4uLisgOC4zfXsxMn0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIFxiYXJ7eH0gPSBcZnJhY3sxMDIuNX17MTJ9ID0gOC41NDE3IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjIuIEhpdHVuZyBTdGFuZGFyIERldmlhc2kgU2FtcGVsIChzKTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIHMgPSBcc3FydHtcZnJhY3tcc3VtICh4X2kgLSBcYmFye3h9KV4yfXtuLTF9fSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsNCiAgICAgICAgICAgICAgICBcYmVnaW57YWxpZ25lZH0NCiAgICAgICAgICAgICAgICAoOC40LTguNTQxNyleMiAmPSAwLjAyMDEgXFwNCiAgICAgICAgICAgICAgICAoNy45LTguNTQxNyleMiAmPSAwLjQxMTUgXFwNCiAgICAgICAgICAgICAgICAoOS4xLTguNTQxNyleMiAmPSAwLjMxMTUgXFwNCiAgICAgICAgICAgICAgICAoOC43LTguNTQxNyleMiAmPSAwLjAyNTEgXFwNCiAgICAgICAgICAgICAgICAoOC4yLTguNTQxNyleMiAmPSAwLjExNjcgXFwNCiAgICAgICAgICAgICAgICAoOS4wLTguNTQxNyleMiAmPSAwLjIxMDAgXFwNCiAgICAgICAgICAgICAgICAoNy44LTguNTQxNyleMiAmPSAwLjU1MDMgXFwNCiAgICAgICAgICAgICAgICAoOC41LTguNTQxNyleMiAmPSAwLjAwMTcgXFwNCiAgICAgICAgICAgICAgICAoOC45LTguNTQxNyleMiAmPSAwLjEyODUgXFwNCiAgICAgICAgICAgICAgICAoOC4xLTguNTQxNyleMiAmPSAwLjE5NTEgXFwNCiAgICAgICAgICAgICAgICAoOC42LTguNTQxNyleMiAmPSAwLjAwMzQgXFwNCiAgICAgICAgICAgICAgICAoOC4zLTguNTQxNyleMiAmPSAwLjA1ODQgXFwNCiAgICAgICAgICAgICAgICBcZW5ke2FsaWduZWR9DQogICAgICAgICAgICAgICAgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIFxzdW0gKHhfaSAtIFxiYXJ7eH0pXjIgPSAwLjAyMDEgKyAwLjQxMTUgKyAwLjMxMTUgKyAuLi4uLi4uKyAwLjA1ODQgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIFxzdW0gKHhfaSAtIFxiYXJ7eH0pXjIgPSAyLjAzMjMgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIHMgPSBcc3FydHtcZnJhY3syLjAzMjN9ezEyLTF9fSA9IFxzcXJ0e1xmcmFjezIuMDMyM317MTF9fSA9IFxzcXJ0ezAuMTg0OH0gPSAwLjQyOTkgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+My4gTWVuZW50dWthbiBcKCB0X3tcYWxwaGEvMn0gXCk8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFRpbmdrYXQga2V5YWtpbmFuID0gOTAlID0gMC45MA0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgXGFscGhhID0gMSAtIDAuOTAgPSAwLjEwIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBcYWxwaGEvMiA9IDAuMTAvMiA9IDAuMDUgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIERlcmFqYXQga2ViZWJhc2FuOiBcKCBkZiA9IG4gLSAxID0gMTIgLSAxID0gMTEgXCkNCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIHRfe1xhbHBoYS8yfSA9IHRfezAuMDUsIDExfSA9IDEuNzk2IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjQuIE1lbmdoaXR1bmcgTWFyZ2luIG9mIEVycm9yIChNRSk8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFJ1bXVzOiBcWyBNRSA9IHRfe1xhbHBoYS8yfSBcdGltZXMgXGZyYWN7c317XHNxcnR7bn19IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBNRSA9IDEuNzk2IFx0aW1lcyBcZnJhY3swLjQyOTl9e1xzcXJ0ezEyfX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS43OTYgXHRpbWVzIFxmcmFjezAuNDI5OX17My40NjQxfSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgTUUgPSAxLjc5NiBcdGltZXMgMC4xMjQxID0gMC4yMjI5IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjUuIE1lbmdoaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbjwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIFxiYXJ7eH0gXHBtIE1FIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYWluLXRleHQiPg0KICAgICAgICAgICAgICAgIEJhdGFzIEF0YXMgPSA4LjU0MTcgKyAwLjIyMjkgPSA4Ljc2NDYNCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgQmF0YXMgQmF3YWggPSA4LjU0MTcgLSAwLjIyMjkgPSA4LjMxODgNCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcnZhbC1yZXN1bHQiPg0KICAgICAgICAgICAgICAgIDxkaXY+UmVudGFuZyBLZXBlcmNheWFhbiA5MCU6PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtdmFsdWUiPig4LjMxODgsIDguNzY0Nik8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgDQogICAgICAgIDwhLS0gOTUlIENvbmZpZGVuY2UgSW50ZXJ2YWwgLS0+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2Utc2VjdGlvbiBjb25maWRlbmNlLTk1Ij4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2UtdGl0bGUiPlJlbnRhbmcgS2VwZXJjYXlhYW4gOTUlPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4xLiBNZWFuIGRhbiBTdGFuZGFyIERldmlhc2k8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIFxiYXJ7eH0gPSA4LjU0MTcgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIHMgPSAwLjQyOTkgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+Mi4gTWVuZW50dWthbiBcKCB0X3tcYWxwaGEvMn0gXCk8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFRpbmdrYXQga2V5YWtpbmFuID0gOTUlID0gMC45NQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgXGFscGhhID0gMSAtIDAuOTUgPSAwLjA1IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBcYWxwaGEvMiA9IDAuMDUvMiA9IDAuMDI1IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBEZXJhamF0IGtlYmViYXNhbjogXCggZGYgPSBuIC0gMSA9IDEyIC0gMSA9IDExIFwpDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyB0X3tcYWxwaGEvMn0gPSB0X3swLjAyNSwgMTF9ID0gMi4yMDEgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+My4gTWVuZ2hpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1FKTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIE1FID0gdF97XGFscGhhLzJ9IFx0aW1lcyBcZnJhY3tzfXtcc3FydHtufX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMi4yMDEgXHRpbWVzIFxmcmFjezAuNDI5OX17XHNxcnR7MTJ9fSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgTUUgPSAyLjIwMSBcdGltZXMgMC4xMjQxID0gMC4yNzMxIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjQuIE1lbmdoaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbjwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIFxiYXJ7eH0gXHBtIE1FIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYWluLXRleHQiPg0KICAgICAgICAgICAgICAgIEJhdGFzIEF0YXMgPSA4LjU0MTcgKyAwLjI3MzEgPSA4LjgxNDgNCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgQmF0YXMgQmF3YWggPSA4LjU0MTcgLSAwLjI3MzEgPSA4LjI2ODYNCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcnZhbC1yZXN1bHQiPg0KICAgICAgICAgICAgICAgIDxkaXY+UmVudGFuZyBLZXBlcmNheWFhbiA5NSU6PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtdmFsdWUiPig4LjI2ODYsIDguODE0OCk8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgDQogICAgICAgIDwhLS0gOTklIENvbmZpZGVuY2UgSW50ZXJ2YWwgLS0+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2Utc2VjdGlvbiBjb25maWRlbmNlLTk5Ij4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2UtdGl0bGUiPlJlbnRhbmcgS2VwZXJjYXlhYW4gOTklPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4xLiBNZWFuIGRhbiBTdGFuZGFyIERldmlhc2k8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIFxiYXJ7eH0gPSA4LjU0MTcgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIHMgPSAwLjQyOTkgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+Mi4gTWVuZW50dWthbiBcKCB0X3tcYWxwaGEvMn0gXCk8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFRpbmdrYXQga2V5YWtpbmFuID0gOTklID0gMC45OQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgXGFscGhhID0gMSAtIDAuOTkgPSAwLjAxIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBcYWxwaGEvMiA9IDAuMDEvMiA9IDAuMDA1IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBEZXJhamF0IGtlYmViYXNhbjogXCggZGYgPSBuIC0gMSA9IDEyIC0gMSA9IDExIFwpDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyB0X3tcYWxwaGEvMn0gPSB0X3swLjAwNSwgMTF9ID0gMy4xMDYgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+My4gTWVuZ2hpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1FKTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIE1FID0gdF97XGFscGhhLzJ9IFx0aW1lcyBcZnJhY3tzfXtcc3FydHtufX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMy4xMDYgXHRpbWVzIFxmcmFjezAuNDI5OX17XHNxcnR7MTJ9fSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgTUUgPSAzLjEwNiBcdGltZXMgMC4xMjQxID0gMC4zODU0IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjQuIE1lbmdoaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbjwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIFxiYXJ7eH0gXHBtIE1FIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYWluLXRleHQiPg0KICAgICAgICAgICAgICAgIEJhdGFzIEF0YXMgPSA4LjU0MTcgKyAwLjM4NTQgPSA4LjkyNzENCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgQmF0YXMgQmF3YWggPSA4LjU0MTcgLSAwLjM4NTQgPSA4LjE1NjMNCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcnZhbC1yZXN1bHQiPg0KICAgICAgICAgICAgICAgIDxkaXY+UmVudGFuZyBLZXBlcmNheWFhbiA5OSU6PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtdmFsdWUiPig4LjE1NjMsIDguOTI3MSk8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCg0KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL3BvbHlmaWxsLmlvL3YzL3BvbHlmaWxsLm1pbi5qcz9mZWF0dXJlcz1lczYiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgaWQ9Ik1hdGhKYXgtc2NyaXB0IiBhc3luYyBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbWF0aGpheEAzL2VzNS90ZXgtbW1sLWNodG1sLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0Pg0KICAgICAgICB3aW5kb3cuTWF0aEpheCA9IHsNCiAgICAgICAgICAgIHRleDogew0KICAgICAgICAgICAgICAgIGlubGluZU1hdGg6IFtbJyQnLCAnJCddLCBbJ1xcKCcsICdcXCknXV0sDQogICAgICAgICAgICAgICAgZGlzcGxheU1hdGg6IFtbJyQkJywgJyQkJ10sIFsnXFxbJywgJ1xcXSddXQ0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIGNodG1sOiB7DQogICAgICAgICAgICAgICAgc2NhbGU6IDAuOQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9Ow0KICAgIDwvc2NyaXB0Pg0KPC9ib2R5Pg0KPC9odG1sPg0KYGBgDQoNCjMuICAqKlZpc3VhbGlzYXNpIFBlcmJhbmRpbmdhbiBkYXJpIGtldGlnYSBJbnRlcnZhbCBLZXBlcmNheWFhbioqDQoNCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KDQpjaV9kYXRhIDwtIGRhdGEuZnJhbWUoDQogIENJID0gZmFjdG9yKGMoIjkwJSIsICI5NSUiLCAiOTklIiksIGxldmVscyA9IGMoIjkwJSIsICI5NSUiLCAiOTklIikpLA0KICBsb3dlciA9IGMoOC4zMTg4LCA4LjI2ODYsIDguMTU2MyksDQogIHVwcGVyID0gYyg4Ljc2NDYsIDguODE0OCwgOC45MjcxKSwNCiAgbWVhbiAgPSA4LjU0MTcNCikNCg0KZ2dwbG90KGNpX2RhdGEsIGFlcyh5ID0gQ0kpKSArDQogIGdlb21fZXJyb3JiYXIoDQogICAgYWVzKHhtaW4gPSBsb3dlciwgeG1heCA9IHVwcGVyLCBjb2xvciA9IENJKSwNCiAgICB3aWR0aCA9IDAuMjUsDQogICAgbGluZXdpZHRoID0gMS40LA0KICAgIG9yaWVudGF0aW9uID0gInkiDQogICkgKw0KICBnZW9tX3RleHQoDQogICAgYWVzKHggPSBsb3dlciwgbGFiZWwgPSByb3VuZChsb3dlciwgMykpLA0KICAgIGhqdXN0ID0gMS4xLA0KICAgIHNpemUgPSA0LA0KICAgIGZvbnRmYWNlID0gImJvbGQiDQogICkgKw0KICBnZW9tX3RleHQoDQogICAgYWVzKHggPSB1cHBlciwgbGFiZWwgPSByb3VuZCh1cHBlciwgMykpLA0KICAgIGhqdXN0ID0gLTAuMSwNCiAgICBzaXplID0gNCwNCiAgICBmb250ZmFjZSA9ICJib2xkIg0KICApICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKA0KICAgIHZhbHVlcyA9IGMoIjkwJSIgPSAiIzAwODA4MCIsDQogICAgICAgICAgICAgICAiOTUlIiA9ICIjMjBiMmFhIiwNCiAgICAgICAgICAgICAgICI5OSUiID0gIiM0OGQxY2MiKQ0KICApICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJQZXJiYW5kaW5nYW4gUmVudGFuZyBLZXBlcmNheWFhbiIsDQogICAgeCA9ICJXYWt0dSAobWVuaXQpIiwNCiAgICB5ID0gTlVMTA0KICApICsNCiAgdGhlbWVfbWluaW1hbChiYXNlX3NpemUgPSAxMykgKw0KICB0aGVtZSgNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwNCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiDQogICkNCmBgYA0KDQo0LlBlbmplbGFzYW4gYmFnYWltYW5hICoqdWt1cmFuIHNhbXBlbCBkYW4gdGluZ2thdCBrZXBlcmNheWFhbioqIG1lbWVuZ2FydWhpIGxlYmFyIGludGVydmFsLg0KDQo8cCBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeTsgdGV4dC1qdXN0aWZ5OiBpbnRlci13b3JkOyI+IA0KTGViYXIgcmVudGFuZyBrZXBlcmNheWFhbiBkaXBlbmdhcnVoaSBsYW5nc3VuZyBvbGVoIHVrdXJhbiBzYW1wZWwgZGFuIHRpbmdrYXQga2VwZXJjYXlhYW4uIFNlbWFraW4gYmVzYXIgdWt1cmFuIHNhbXBlbCwgZXN0aW1hc2kgcmF0YS1yYXRhIG1lbmphZGkgbGViaWggc3RhYmlsIHNlaGluZ2dhIHN0YW5kYXIgZXJyb3IgKFwoIFxmcmFje1xzaWdtYX17XHNxcnR7bn19IFwpKSBtZW5nZWNpbCBkYW4gaW50ZXJ2YWwga2VwZXJjYXlhYW4gbWVuamFkaSBsZWJpaCBzZW1waXQsIHNlZGFuZ2thbiBzYW1wZWwga2VjaWwgbWVueWViYWJrYW4ga2V0aWRha3Bhc3RpYW4gbGViaWggYmVzYXIgc2VoaW5nZ2EgaW50ZXJ2YWwgbWVsZWJhci4gU2ViYWxpa255YSwgdGluZ2thdCBrZXBlcmNheWFhbiB5YW5nIGxlYmloIHRpbmdnaSAobWlzYWxueWEgZGFyaSA5MCUga2UgOTklKSBtZW1lcmx1a2FuIG5pbGFpIGtyaXRpcyBaIGF0YXUgdCB5YW5nIGxlYmloIGJlc2FyLCBtZW1wZXJiZXNhciBtYXJnaW4gb2YgZXJyb3IgZGFuIG1lbWJ1YXQgaW50ZXJ2YWwgc2VtYWtpbiBsZWJhciB1bnR1ayBtZW5qYW1pbiBrZXlha2luYW4geWFuZyBsZWJpaCBrdWF0LiBEZW5nYW4gZGVtaWtpYW4sIGludGVydmFsIHNlbXBpdCBtZW5jZXJtaW5rYW4gZXN0aW1hc2kgcHJlc2lzaSBkYXJpIHNhbXBlbCBiZXNhciBkYW4ga2VwZXJjYXlhYW4gbW9kZXJhdCBzZXBlcnRpIDk1JSwgc2VtZW50YXJhIGludGVydmFsIGxlYmFyIG1lbnVuanVra2FuIGtlaGF0aS1oYXRpYW4gbGViaWggYmVzYXIgZGFsYW0gcGVuZ2FtYmlsYW4ga2VwdXR1c2FuLg0KPC9wPg0KDQo6OjoNCg0KDQojIyBTdHVkaSBLYXN1cyAzDQoNCioqUmVudGFuZyBLZXBlcmNheWFhbiB1bnR1ayBTZWJ1YWggUHJvcG9yc2ksIFBlbmd1amlhbiBBL0I6KiogVGltIERhdGEgU2llbmNlIG1lbmphbGFua2FuICoqcGVuZ3VqaWFuIEEvQioqIHBhZGEgZGVzYWluIHRvbWJvbCAqQ2FsbC1Uby1BY3Rpb24gKENUQSkqIGJhcnUuICBFa3NwZXJpbWVuIHRlcnNlYnV0IG1lbmdoYXNpbGthbjoNCg0KJCQNClxiZWdpbntlcW5hcnJheSp9DQpuICY9JiA0MDAgXHF1YWQgXHRleHR7KEtlc2VsdXJ1aGFuIEp1bWxhaCBQZW5nZ3VuYSl9IFxcDQp4ICY9JiAxNTYgXHF1YWQgXHRleHR7KFBlbmdndW5hIHlhbmcgbWVtZW5jZXQgQ1RBKX0NClxlbmR7ZXFuYXJyYXkqfQ0KJCQNCg0KDQo6Ojoge3N0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNlNmY3ZjU7IGJvcmRlci1sZWZ0OjZweCBzb2xpZCAjMDA4MDgwOyBwYWRkaW5nOjEycHg7IGJvcmRlci1yYWRpdXM6OHB4OyBtYXJnaW46MjBweCAwOyJ9DQoqKlR1Z2FzOioqDQoNCjEuIEhpdHVuZyAqKnNhbXBsZSBwcm9wb3JzaSoqICRcaGF0e3B9JC4NCjIuIEhpdHVuZyBSZW50YW5nIEtlcGVyY2F5YWFuIFVudHVrIFByb3BvcnNpIHBhZGEgOg0KICAgLSAkOTBcJSQNCiAgIC0gJDk1XCUkDQogICAtICQ5OVwlJA0KMy4gVmlzdWFsaXNhc2lrYW4gZGFuIEJhbmRpbmdrYW4ga2V0aWdhIGludGVydmFsIHRlcnNlYnV0Lg0KNC4gSmVsYXNrYW4gYmFnYWltYW5hIHRpbmdrYXQga2VwZXJjYXlhYW4gbWVtZW5nYXJ1aGkgcGVuZ2FtYmlsYW4ga2VwdXR1c2FuIGRhbGFtIGVrc3BlcmltZW4gcHJvZHVrLi4NCg0KOjo6DQoNCjo6OiB7c3R5bGU9ImJhY2tncm91bmQtY29sb3I6I2YxZWZmYTsgYm9yZGVyLWxlZnQ6NnB4IHNvbGlkICMzZjUxYjU7IHBhZGRpbmc6MTJweDsgYm9yZGVyLXJhZGl1czo4cHg7IG1hcmdpbjoyMHB4IDA7In0NCg0KKipQZW55ZWxlc2FpYW4gU3R1ZGkgS2FzdXMgMyoqDQoNCjEuICBIaXR1bmcgKipzYW1wbGUgcHJvcG9yc2kqKiAkXGhhdHtwfSQgZGFuICBIaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbiBVbnR1ayBQcm9wb3JzaQ0KDQpgYGB7PWh0bWx9DQo8IURPQ1RZUEUgaHRtbD4NCjxodG1sIGxhbmc9ImlkIj4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+DQogICAgPHRpdGxlPlJlbnRhbmcgS2VwZXJjYXlhYW4gUHJvcG9yc2k8L3RpdGxlPg0KICAgIDxzdHlsZT4NCiAgICAgICAgKiB7DQogICAgICAgICAgICBtYXJnaW46IDA7DQogICAgICAgICAgICBwYWRkaW5nOiAwOw0KICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsNCiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknLCBUYWhvbWEsIEdlbmV2YSwgVmVyZGFuYSwgc2Fucy1zZXJpZjsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgYm9keSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmY2ZjOw0KICAgICAgICAgICAgY29sb3I6ICMzMzM7DQogICAgICAgICAgICBsaW5lLWhlaWdodDogMS42Ow0KICAgICAgICAgICAgcGFkZGluZzogMjBweDsNCiAgICAgICAgICAgIG1heC13aWR0aDogMTAwMHB4Ow0KICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5kYXRhLWluZm8gew0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjhmODsNCiAgICAgICAgICAgIHBhZGRpbmc6IDE1cHg7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4Ow0KICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjMDA4MDgwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY2FsY3VsYXRpb24gew0KICAgICAgICAgICAgbWFyZ2luOiA4cHggMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDVweCAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS1jb250YWluZXIgew0KICAgICAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47DQogICAgICAgICAgICBnYXA6IDQwcHg7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5jb25maWRlbmNlLXNlY3Rpb24gew0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmNvbmZpZGVuY2UtdGl0bGUgew0KICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwODA4MDsNCiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsNCiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAyMHB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4Ow0KICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtOw0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmNvbmZpZGVuY2UtOTUgLmNvbmZpZGVuY2UtdGl0bGUgew0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzIwYjJhYTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmNvbmZpZGVuY2UtOTkgLmNvbmZpZGVuY2UtdGl0bGUgew0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzQ4ZDFjYzsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgaDMgew0KICAgICAgICAgICAgY29sb3I6ICMwMDY2NjY7DQogICAgICAgICAgICBmb250LXNpemU6IDEuMnJlbTsNCiAgICAgICAgICAgIG1hcmdpbjogMjVweCAwIDEwcHggMDsNCiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiA1cHg7DQogICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2UwZjBmMDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmludGVydmFsLXJlc3VsdCB7DQogICAgICAgICAgICBtYXJnaW46IDI1cHggMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDE1cHg7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZmNWY1Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4Ow0KICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuaW50ZXJ2YWwtdmFsdWUgew0KICAgICAgICAgICAgZm9udC1zaXplOiAxLjRyZW07DQogICAgICAgICAgICBmb250LXdlaWdodDogNzAwOw0KICAgICAgICAgICAgY29sb3I6ICMwMDY2NjY7DQogICAgICAgICAgICBtYXJnaW46IDEwcHggMDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnBsYWluLXRleHQgew0KICAgICAgICAgICAgbWFyZ2luOiAxMHB4IDA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgew0KICAgICAgICAgICAgYm9keSB7DQogICAgICAgICAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLmNvbmZpZGVuY2UtY29udGFpbmVyIHsNCiAgICAgICAgICAgICAgICBnYXA6IDMwcHg7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICA8L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQogICAgPGRpdiBjbGFzcz0iZGF0YS1pbmZvIj4NCiAgICAgICAgPHN0cm9uZz5EYXRhIFBlbmd1amlhbiBBL0I6PC9zdHJvbmc+DQogICAgICAgIDxkaXY+biA9IDQwMCAoanVtbGFoIHBlbmdndW5hKTwvZGl2Pg0KICAgICAgICA8ZGl2PnggPSAxNTYgKHBlbmdndW5hIHlhbmcgbWVtZW5jZXQgQ1RBKTwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIA0KICAgIDwhLS0gUEVSSElUVU5HQU4gcCBIQVQgKERJUElTQUgpIC0tPg0KICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2Utc2VjdGlvbiI+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2UtdGl0bGUiPkhpdHVuZyBTYW1wbGUgUHJvcG9yc2kgXChcaGF0e3B9XCk8L2Rpdj4NCiAgICAgICAgDQogICAgICAgIDxoMz5QZXJoaXR1bmdhbiBTYW1wbGUgUHJvcG9yc2k8L2gzPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICBSdW11czogXFsgXGhhdHtwfSA9IFxmcmFje3h9e259IFxdDQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICBcWyBcaGF0e3B9ID0gXGZyYWN7MTU2fXs0MDB9IFxdDQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICBcWyBcaGF0e3B9ID0gMC4zOSBcXQ0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgDQogICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXJlc3VsdCI+DQogICAgICAgICAgICA8ZGl2Pkhhc2lsIFBlcmhpdHVuZ2FuOjwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtdmFsdWUiPlwoXGhhdHtwfSA9IDAuMzlcKTwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICANCiAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLWNvbnRhaW5lciI+DQogICAgICAgIA0KICAgICAgICA8IS0tIDkwJSBDb25maWRlbmNlIEludGVydmFsIC0tPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXNlY3Rpb24iPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlkZW5jZS10aXRsZSI+UmVudGFuZyBLZXBlcmNheWFhbiA5MCU8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjEuIE1lbmVudHVrYW4gXCggel97XGFscGhhLzJ9IFwpPC9oMz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBUaW5na2F0IGtleWFraW5hbiA9IDkwJSA9IDAuOTANCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIFxhbHBoYSA9IDEgLSAwLjkwID0gMC4xMCBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgXGFscGhhLzIgPSAwLjEwLzIgPSAwLjA1IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyB6X3tcYWxwaGEvMn0gPSB6X3swLjA1fSA9IDEuNjQ1IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjIuIE1lbmdoaXR1bmcgTWFyZ2luIG9mIEVycm9yIChNRSk8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFJ1bXVzOiBcWyBNRSA9IHpfe1xhbHBoYS8yfSBcdGltZXMgXHNxcnR7XGZyYWN7XGhhdHtwfSgxLVxoYXR7cH0pfXtufX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS42NDUgXHRpbWVzIFxzcXJ0e1xmcmFjezAuMzkgXHRpbWVzICgxLTAuMzkpfXs0MDB9fSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgTUUgPSAxLjY0NSBcdGltZXMgXHNxcnR7XGZyYWN7MC4zOSBcdGltZXMgMC42MX17NDAwfX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS42NDUgXHRpbWVzIFxzcXJ0e1xmcmFjezAuMjM3OX17NDAwfX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS42NDUgXHRpbWVzIFxzcXJ0ezAuMDAwNTk0NzV9IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBNRSA9IDEuNjQ1IFx0aW1lcyAwLjAyNDM5IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBNRSA9IDAuMDQwMTIgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+My4gTWVuZ2hpdHVuZyBSZW50YW5nIEtlcGVyY2F5YWFuPC9oMz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBSdW11czogXFsgXGhhdHtwfSBccG0gTUUgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgQmF0YXMgQXRhcyA9IDAuMzkgKyAwLjA0MDEyID0gMC40MzAxMg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICBCYXRhcyBCYXdhaCA9IDAuMzkgLSAwLjA0MDEyID0gMC4zNDk4OA0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXJlc3VsdCI+DQogICAgICAgICAgICAgICAgPGRpdj5SZW50YW5nIEtlcGVyY2F5YWFuIDkwJSB1bnR1ayBwcm9wb3JzaTo8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcnZhbC12YWx1ZSI+KDAuMzQ5OSwgMC40MzAxKTwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij5hdGF1ICgzNC45OSUsIDQzLjAxJSk8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgDQogICAgICAgIDwhLS0gOTUlIENvbmZpZGVuY2UgSW50ZXJ2YWwgLS0+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2Utc2VjdGlvbiBjb25maWRlbmNlLTk1Ij4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2UtdGl0bGUiPlJlbnRhbmcgS2VwZXJjYXlhYW4gOTUlPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4xLiBNZW5lbnR1a2FuIFwoIHpfe1xhbHBoYS8yfSBcKTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgVGluZ2thdCBrZXlha2luYW4gPSA5NSUgPSAwLjk1DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBcYWxwaGEgPSAxIC0gMC45NSA9IDAuMDUgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIFxhbHBoYS8yID0gMC4wNS8yID0gMC4wMjUgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIHpfe1xhbHBoYS8yfSA9IHpfezAuMDI1fSA9IDEuOTYgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+Mi4gTWVuZ2hpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1FKTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIE1FID0gel97XGFscGhhLzJ9IFx0aW1lcyBcc3FydHtcZnJhY3tcaGF0e3B9KDEtXGhhdHtwfSl9e259fSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgTUUgPSAxLjk2IFx0aW1lcyBcc3FydHtcZnJhY3swLjM5IFx0aW1lcyAoMS0wLjM5KX17NDAwfX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS45NiBcdGltZXMgXHNxcnR7XGZyYWN7MC4zOSBcdGltZXMgMC42MX17NDAwfX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS45NiBcdGltZXMgMC4wMjQzOSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgTUUgPSAwLjA0NzgwIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjMuIE1lbmdoaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbjwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIFxoYXR7cH0gXHBtIE1FIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYWluLXRleHQiPg0KICAgICAgICAgICAgICAgIEJhdGFzIEF0YXMgPSAwLjM5ICsgMC4wNDc4MCA9IDAuNDM3ODANCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgQmF0YXMgQmF3YWggPSAwLjM5IC0gMC4wNDc4MCA9IDAuMzQyMjANCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcnZhbC1yZXN1bHQiPg0KICAgICAgICAgICAgICAgIDxkaXY+UmVudGFuZyBLZXBlcmNheWFhbiA5NSUgdW50dWsgcHJvcG9yc2k6PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtdmFsdWUiPigwLjM0MjIsIDAuNDM3OCk8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+YXRhdSAoMzQuMjIlLCA0My43OCUpPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIA0KICAgICAgICA8IS0tIDk5JSBDb25maWRlbmNlIEludGVydmFsIC0tPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXNlY3Rpb24gY29uZmlkZW5jZS05OSI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXRpdGxlIj5SZW50YW5nIEtlcGVyY2F5YWFuIDk5JTwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+MS4gTWVuZW50dWthbiBcKCB6X3tcYWxwaGEvMn0gXCk8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFRpbmdrYXQga2V5YWtpbmFuID0gOTklID0gMC45OQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgXGFscGhhID0gMSAtIDAuOTkgPSAwLjAxIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBcYWxwaGEvMiA9IDAuMDEvMiA9IDAuMDA1IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyB6X3tcYWxwaGEvMn0gPSB6X3swLjAwNX0gPSAyLjU3NiBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4yLiBNZW5naGl0dW5nIE1hcmdpbiBvZiBFcnJvciAoTUUpPC9oMz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBSdW11czogXFsgTUUgPSB6X3tcYWxwaGEvMn0gXHRpbWVzIFxzcXJ0e1xmcmFje1xoYXR7cH0oMS1caGF0e3B9KX17bn19IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBNRSA9IDIuNTc2IFx0aW1lcyBcc3FydHtcZnJhY3swLjM5IFx0aW1lcyAoMS0wLjM5KX17NDAwfX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMi41NzYgXHRpbWVzIFxzcXJ0e1xmcmFjezAuMzkgXHRpbWVzIDAuNjF9ezQwMH19IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBNRSA9IDIuNTc2IFx0aW1lcyAwLjAyNDM5IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBNRSA9IDAuMDYyODMgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+My4gTWVuZ2hpdHVuZyBSZW50YW5nIEtlcGVyY2F5YWFuPC9oMz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBSdW11czogXFsgXGhhdHtwfSBccG0gTUUgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgQmF0YXMgQXRhcyA9IDAuMzkgKyAwLjA2MjgzID0gMC40NTI4Mw0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICBCYXRhcyBCYXdhaCA9IDAuMzkgLSAwLjA2MjgzID0gMC4zMjcxNw0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXJlc3VsdCI+DQogICAgICAgICAgICAgICAgPGRpdj5SZW50YW5nIEtlcGVyY2F5YWFuIDk5JSB1bnR1ayBwcm9wb3JzaTo8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcnZhbC12YWx1ZSI+KDAuMzI3MiwgMC40NTI4KTwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij5hdGF1ICgzMi43MiUsIDQ1LjI4JSk8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCg0KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL3BvbHlmaWxsLmlvL3YzL3BvbHlmaWxsLm1pbi5qcz9mZWF0dXJlcz1lczYiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgaWQ9Ik1hdGhKYXgtc2NyaXB0IiBhc3luYyBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbWF0aGpheEAzL2VzNS90ZXgtbW1sLWNodG1sLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0Pg0KICAgICAgICB3aW5kb3cuTWF0aEpheCA9IHsNCiAgICAgICAgICAgIHRleDogew0KICAgICAgICAgICAgICAgIGlubGluZU1hdGg6IFtbJyQnLCAnJCddLCBbJ1xcKCcsICdcXCknXV0sDQogICAgICAgICAgICAgICAgZGlzcGxheU1hdGg6IFtbJyQkJywgJyQkJ10sIFsnXFxbJywgJ1xcXSddXQ0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIGNodG1sOiB7DQogICAgICAgICAgICAgICAgc2NhbGU6IDAuOQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9Ow0KICAgIDwvc2NyaXB0Pg0KPC9ib2R5Pg0KPC9odG1sPg0KYGBgDQoNCjMuICoqVmlzdWFsaXNhc2kgZGFuIFBlcmJhbmRpbmdhbiBrZXRpZ2EgaW50ZXJ2YWwgdGVyc2VidXQuKioNCg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQoNCiMgRGF0YSBDSSBwcm9wb3JzaQ0KY2lfcHJvcG9yc2kgPC0gZGF0YS5mcmFtZSgNCiAgQ0kgPSBmYWN0b3IoYygiOTAlIiwgIjk1JSIsICI5OSUiKSwgbGV2ZWxzID0gYygiOTAlIiwgIjk1JSIsICI5OSUiKSksDQogIGxvd2VyID0gYygwLjM0OTksIDAuMzQyMiwgMC4zMjcyKSwNCiAgdXBwZXIgPSBjKDAuNDMwMSwgMC40Mzc4LCAwLjQ1MjgpDQopDQoNCmdncGxvdChjaV9wcm9wb3JzaSwgYWVzKHkgPSBDSSkpICsNCiAgZ2VvbV9lcnJvcmJhcigNCiAgICBhZXMoeG1pbiA9IGxvd2VyLCB4bWF4ID0gdXBwZXIsIGNvbG9yID0gQ0kpLA0KICAgIHdpZHRoID0gMC4yNSwNCiAgICBsaW5ld2lkdGggPSAxLjQsDQogICAgb3JpZW50YXRpb24gPSAieSINCiAgKSArDQogIGdlb21fdGV4dCgNCiAgICBhZXMoeCA9IGxvd2VyLCBsYWJlbCA9IHNjYWxlczo6cGVyY2VudChsb3dlciwgYWNjdXJhY3kgPSAwLjAxKSksDQogICAgaGp1c3QgPSAxLjEsDQogICAgc2l6ZSA9IDQsDQogICAgZm9udGZhY2UgPSAiYm9sZCINCiAgKSArDQogIGdlb21fdGV4dCgNCiAgICBhZXMoeCA9IHVwcGVyLCBsYWJlbCA9IHNjYWxlczo6cGVyY2VudCh1cHBlciwgYWNjdXJhY3kgPSAwLjAxKSksDQogICAgaGp1c3QgPSAtMC4xLA0KICAgIHNpemUgPSA0LA0KICAgIGZvbnRmYWNlID0gImJvbGQiDQogICkgKw0KICBzY2FsZV9jb2xvcl9tYW51YWwoDQogICAgdmFsdWVzID0gYygiOTAlIiA9ICIjMDA4MDgwIiwNCiAgICAgICAgICAgICAgICI5NSUiID0gIiMyMGIyYWEiLA0KICAgICAgICAgICAgICAgIjk5JSIgPSAiIzQ4ZDFjYyIpDQogICkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoDQogICAgbGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDEpDQogICkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIlBlcmJhbmRpbmdhbiBSZW50YW5nIEtlcGVyY2F5YWFuIiwNCiAgICBzdWJ0aXRsZSA9ICJuID0gNDAwLCAgeCA9IDE1NiwgIHDMgiA9IDAuMzkiLA0KICAgIHggPSAiUHJvcG9yc2kgUGVuZ2d1bmEiLA0KICAgIHkgPSBOVUxMDQogICkgKw0KICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDEzKSArDQogIHRoZW1lKA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLA0KICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAibm9uZSINCiAgKQ0KYGBgDQoNCjQuICoqUGVuamVsYXNhbiBiYWdhaW1hbmEgdGluZ2thdCBrZXBlcmNheWFhbiBtZW1lbmdhcnVoaSBwZW5nYW1iaWxhbiBrZXB1dHVzYW4gZGFsYW0gZWtzcGVyaW1lbiBwcm9kdWsuKioNCg0KPHAgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnk7IHRleHQtanVzdGlmeTogaW50ZXItd29yZDsiPiANClRpbmdrYXQga2VwZXJjYXlhYW4gbWVtZW5nYXJ1aGkgcGVuZ2FtYmlsYW4ga2VwdXR1c2FuIGRhbGFtIGVrc3BlcmltZW4gcHJvZHVrIGthcmVuYSBtZW5lbnR1a2FuIHNlYmVyYXBhIHlha2luIHRpbSB0ZXJoYWRhcCBoYXNpbCB5YW5nIGRpcGVyb2xlaC4gVGluZ2thdCBrZXBlcmNheWFhbiB5YW5nIGxlYmloIHRpbmdnaSAobWlzYWxueWEgOTklKSBtZW1iZXJpa2FuIGtleWFraW5hbiB5YW5nIGxlYmloIGt1YXQgYmFod2EgaGFzaWwgZWtzcGVyaW1lbiBtZW5jZXJtaW5rYW4ga29uZGlzaSBzZWJlbmFybnlhLCBuYW11biBrb25zZWt1ZW5zaW55YSBhZGFsYWggcmVudGFuZyBrZXBlcmNheWFhbiBtZW5qYWRpIGxlYmloIGxlYmFyLCBzZWhpbmdnYSBrZXB1dHVzYW4geWFuZyBkaWFtYmlsIGNlbmRlcnVuZyBsZWJpaCBrb25zZXJ2YXRpZi4gU2ViYWxpa255YSwgdGluZ2thdCBrZXBlcmNheWFhbiB5YW5nIGxlYmloIHJlbmRhaCAobWlzYWxueWEgOTAlKSBtZW5naGFzaWxrYW4gcmVudGFuZyB5YW5nIGxlYmloIHNlbXBpdCBkYW4ga2VwdXR1c2FuIGJpc2EgZGlhbWJpbCBsZWJpaCBjZXBhdCwgdGV0YXBpIGRlbmdhbiByaXNpa28ga2VzYWxhaGFuIHlhbmcgbGViaWggYmVzYXIuIE9sZWgga2FyZW5hIGl0dSwgcGVtaWxpaGFuIHRpbmdrYXQga2VwZXJjYXlhYW4gaGFydXMgZGlzZXN1YWlrYW4gZGVuZ2FuIGtvbnRla3MgYmlzbmlzOiBla3NwZXJpbWVuIGJlcmlzaWtvIHRpbmdnaSBiaWFzYW55YSBtZW1lcmx1a2FuIHRpbmdrYXQga2VwZXJjYXlhYW4geWFuZyBsZWJpaCB0aW5nZ2kNCjwvcD4NCg0KOjo6DQoNCiMjIFN0dWRpIEthc3VzIDQgDQoNCioqUGVyYmFuZGluZ2FuIFByZXNpc2kgKFVqaS1aIHZzIFVqaS10KToqKiBEdWEgdGltIGRhdGEgbWVuZ3VrdXIgKipsYXRlbnNpIEFQSSAoZGFsYW0gbWlsaWRldGlrKSoqIGRpIGJhd2FoIGtvbmRpc2kgeWFuZyBiZXJiZWRhLg0KDQpcYmVnaW57ZXFuYXJyYXkqfQ0KXHRleHR7VGltIEE6fSBcXA0KbiAmPSYgMzYgXHF1YWQgXHRleHR7KFVrdXJhbi9qdW1sYWggc2FtcGVsKX0gXFwNClxiYXJ7eH0gJj0mIDIxMCBccXVhZCBcdGV4dHsoUmF0YSBSYXRhIFNhbXBlbCl9IFxcDQpcc2lnbWEgJj0mIDI0IFxxdWFkIFx0ZXh0eyhEaWtldGFodWkgU2ltcGFuZ2FuIEJha3UpfSBcXFs2cHRdDQoNClx0ZXh0e1RpbSBCOn0gXFwNCm4gJj0mIDM2IFxxdWFkIFx0ZXh0eyhVa3VyYW4vanVtbGFoIHNhbXBlbCl9IFxcDQpcYmFye3h9ICY9JiAyMTAgXHF1YWQgXHRleHR7KFJhdGEgUmF0YSBTYW1wZWwpfSBcXA0KcyAmPSYgMjQgXHF1YWQgXHRleHR7KFNpbXBhbmdhbiBCYWt1IFNhbXBlbCl9DQpcZW5ke2VxbmFycmF5Kn0NCg0KOjo6IHtzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZTZmN2Y1OyBib3JkZXItbGVmdDo2cHggc29saWQgIzAwODA4MDsgcGFkZGluZzoxMnB4OyBib3JkZXItcmFkaXVzOjhweDsgbWFyZ2luOjIwcHggMDsifQ0KKipUdWdhcyoqDQoNCjEuIElkZW50aWZpa2FzaSAqKnVqaSBzdGF0aXN0aWsqKiB5YW5nIGRpZ3VuYWthbiBvbGVoIHNldGlhcCB0aW0uDQoyLiBIaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbiBVbnR1ayAqKjkwJSwgOTUlLCBhbmQgOTklKiouDQozLiBCdWF0IHZpc3VhbGlzYXNpIHlhbmcgbWVtYmFuZGluZ2thbiBzZWx1cnVoIGludGVydmFsLg0KNC4gSmVsYXNrYW4gbWVuZ2FwYSAqKmxlYmFyIGludGVydmFsIGJlcmJlZGEqKiwgbWVza2lwdW4gZGF0YW55YSBtaXJpcCBtZW5kZWthdGkgc2FtYS8gc2VydXBhLiANCjo6Og0KDQoNCjo6OiB7c3R5bGU9ImJhY2tncm91bmQtY29sb3I6I2YxZWZmYTsgYm9yZGVyLWxlZnQ6NnB4IHNvbGlkICMzZjUxYjU7IHBhZGRpbmc6MTJweDsgYm9yZGVyLXJhZGl1czo4cHg7IG1hcmdpbjoyMHB4IDA7In0NCg0KKipQZW55ZWxlc2FpYW4gU3R1ZGkgS2FzdXMgNCoqDQoNCjEuICoqdWppIHN0YXRpc3RpayB5YW5nIGRpZ3VuYWthbiBvbGVoIHNldGlhcCB0aW0qKg0KDQotIFRpbSBBIG1lbmdndW5ha2FuIHVqaSBaIChaLXRlc3QpLCBrYXJlbmEgc2ltcGFuZ2FuIGJha3UgcG9wdWxhc2kgKM+DKSBkaWtldGFodWkuIERhbGFtIGtvbmRpc2kgaW5pLCBrZXRpZGFrcGFzdGlhbiBoYW55YSBiZXJhc2FsIGRhcmkgdmFyaWFzaSBzYW1wZWwsIHNlaGluZ2dhIGRpc3RyaWJ1c2kgbm9ybWFsIHN1ZGFoIG1lbWFkYWkgdW50dWsgbWVsYWt1a2FuIGluZmVyZW5zaSB0ZXJoYWRhcCByYXRhLXJhdGEgcG9wdWxhc2kuIERlbmdhbiB1a3VyYW4gc2FtcGVsIHlhbmcgcmVsYXRpZiBjdWt1cCAobiA9IDM2KSwgcGVuZGVrYXRhbiBpbmkgbWVtYmVyaWthbiBlc3RpbWFzaSB5YW5nIHN0YWJpbCBkYW4gZWZpc2llbi4NCg0KLSBUaW0gQiBtZW5nZ3VuYWthbiB1amkgdCwga2FyZW5hIHNpbXBhbmdhbiBiYWt1IHBvcHVsYXNpIHRpZGFrIGRpa2V0YWh1aSBkYW4gZGlnYW50aWthbiBvbGVoIHNpbXBhbmdhbiBiYWt1IHNhbXBlbCAocykuIFBlbmdndW5hYW4gZGlzdHJpYnVzaSB0IGRpcGVybHVrYW4gdW50dWsgbWVtcGVyaGl0dW5na2FuIHRhbWJhaGFuIGtldGlkYWtwYXN0aWFuIGFraWJhdCBlc3RpbWFzaSBzaW1wYW5nYW4gYmFrdSBkYXJpIGRhdGEgc2FtcGVsLCBzZWhpbmdnYSBoYXNpbCBpbmZlcmVuc2kgbWVuamFkaSBsZWJpaCB2YWxpZCBkYW4gc2VzdWFpIGRlbmdhbiBrb25kaXNpIGRhdGEgeWFuZyB0ZXJzZWRpYS4NCg0KMi4gKipIaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbioqDQoNCmBgYHs9aHRtbH0NCjwhRE9DVFlQRSBodG1sPg0KPGh0bWwgbGFuZz0iaWQiPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPg0KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4NCiAgICA8dGl0bGU+UmVudGFuZyBLZXBlcmNheWFhbiAtIERpc3RyaWJ1c2kgeiBkYW4gdDwvdGl0bGU+DQogICAgPHN0eWxlPg0KICAgICAgICAqIHsNCiAgICAgICAgICAgIG1hcmdpbjogMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDA7DQogICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdTZWdvZSBVSScsIFRhaG9tYSwgR2VuZXZhLCBWZXJkYW5hLCBzYW5zLXNlcmlmOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBib2R5IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGZjZmM7DQogICAgICAgICAgICBjb2xvcjogIzMzMzsNCiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7DQogICAgICAgICAgICBwYWRkaW5nOiAyMHB4Ow0KICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAwcHg7DQogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmRhdGEtaW5mbyB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmOGY4Ow0KICAgICAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7DQogICAgICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkICMwMDgwODA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC50ZWFtLXNlY3Rpb24gew0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNDBweDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmY2ZiOw0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4Ow0KICAgICAgICAgICAgYm9yZGVyOiAycHggc29saWQgIzAwODA4MDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnRlYW0tdGl0bGUgew0KICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwODA4MDsNCiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsNCiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAyMHB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4Ow0KICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtOw0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnRlYW0tYiB7DQogICAgICAgICAgICBib3JkZXItY29sb3I6ICMyMGIyYWE7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC50ZWFtLWIgLnRlYW0tdGl0bGUgew0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzIwYjJhYTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmNvbmZpZGVuY2UtY29udGFpbmVyIHsNCiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KICAgICAgICAgICAgZ2FwOiA0MHB4Ow0KICAgICAgICAgICAgbWFyZ2luLXRvcDogMjBweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmNvbmZpZGVuY2Utc2VjdGlvbiB7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4MDgwOw0KICAgICAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICAgICAgcGFkZGluZzogOHB4IDIwcHg7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7DQogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOw0KICAgICAgICAgICAgZm9udC1zaXplOiAxLjJyZW07DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS05NSAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjBiMmFhOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS05OSAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDhkMWNjOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBoMyB7DQogICAgICAgICAgICBjb2xvcjogIzAwNjY2NjsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtOw0KICAgICAgICAgICAgbWFyZ2luOiAyNXB4IDAgMTBweCAwOw0KICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDVweDsNCiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBmMGYwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY2FsY3VsYXRpb24gew0KICAgICAgICAgICAgbWFyZ2luOiA4cHggMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDVweCAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuaW50ZXJ2YWwtcmVzdWx0IHsNCiAgICAgICAgICAgIG1hcmdpbjogMjVweCAwOw0KICAgICAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNmY1ZjU7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7DQogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5pbnRlcnZhbC12YWx1ZSB7DQogICAgICAgICAgICBmb250LXNpemU6IDEuNHJlbTsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7DQogICAgICAgICAgICBjb2xvcjogIzAwNjY2NjsNCiAgICAgICAgICAgIG1hcmdpbjogMTBweCAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAucGxhaW4tdGV4dCB7DQogICAgICAgICAgICBtYXJnaW46IDEwcHggMDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7DQogICAgICAgICAgICBib2R5IHsNCiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNXB4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAuY29uZmlkZW5jZS1jb250YWluZXIgew0KICAgICAgICAgICAgICAgIGdhcDogMzBweDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIDwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCiAgICA8IS0tIERhdGEgVGltIEEgZGFuIFRpbSBCIC0tPg0KICAgIDxkaXYgY2xhc3M9ImRhdGEtaW5mbyI+DQogICAgICAgIDxzdHJvbmc+RGF0YSBUaW06PC9zdHJvbmc+DQogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206IDE1cHg7Ij4NCiAgICAgICAgICAgIDxzdHJvbmc+VGltIEE6PC9zdHJvbmc+PGJyPg0KICAgICAgICAgICAgbiA9IDM2ICh1a3VyYW4gc2FtcGVsKTxicj4NCiAgICAgICAgICAgIFwoXGJhcnt4fVwpID0gMjEwIChyYXRhLXJhdGEgc2FtcGVsKTxicj4NCiAgICAgICAgICAgIFwoXHNpZ21hXCkgPSAyNCAoZGlrZXRhaHVpIHNpbXBhbmdhbiBiYWt1IHBvcHVsYXNpKQ0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdj4NCiAgICAgICAgICAgIDxzdHJvbmc+VGltIEI6PC9zdHJvbmc+PGJyPg0KICAgICAgICAgICAgbiA9IDM2ICh1a3VyYW4gc2FtcGVsKTxicj4NCiAgICAgICAgICAgIFwoXGJhcnt4fVwpID0gMjEwIChyYXRhLXJhdGEgc2FtcGVsKTxicj4NCiAgICAgICAgICAgIHMgPSAyNCAoc2ltcGFuZ2FuIGJha3Ugc2FtcGVsKQ0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICANCiAgICA8IS0tIFRJTSBBOiBEaXN0cmlidXNpIHogLS0+DQogICAgPGRpdiBjbGFzcz0idGVhbS1zZWN0aW9uIj4NCiAgICAgICAgPGRpdiBjbGFzcz0idGVhbS10aXRsZSI+VGltIEE6IERpc3RyaWJ1c2kgeiAoz4MgZGlrZXRhaHVpKTwvZGl2Pg0KICAgICAgICANCiAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlkZW5jZS1jb250YWluZXIiPg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8IS0tIDkwJSBDb25maWRlbmNlIEludGVydmFsIC0tPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlkZW5jZS1zZWN0aW9uIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXRpdGxlIj5SZW50YW5nIEtlcGVyY2F5YWFuIDkwJTwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxoMz4xLiBNZW5lbnR1a2FuIFwoIHpfe1xhbHBoYS8yfSBcKTwvaDM+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBUaW5na2F0IGtleWFraW5hbiA9IDkwJSA9IDAuOTANCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIFxhbHBoYSA9IDEgLSAwLjkwID0gMC4xMCBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgXGFscGhhLzIgPSAwLjEwLzIgPSAwLjA1IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyB6X3tcYWxwaGEvMn0gPSB6X3swLjA1fSA9IDEuNjQ1IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGgzPjIuIE1lbmdoaXR1bmcgTWFyZ2luIG9mIEVycm9yIChNRSk8L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgUnVtdXM6IFxbIE1FID0gel97XGFscGhhLzJ9IFx0aW1lcyBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAxLjY0NSBcdGltZXMgXGZyYWN7MjR9e1xzcXJ0ezM2fX0gXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIE1FID0gMS42NDUgXHRpbWVzIFxmcmFjezI0fXs2fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAxLjY0NSBcdGltZXMgNCBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSA2LjU4IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGgzPjMuIE1lbmdoaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbjwvaDM+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBSdW11czogXFsgXGJhcnt4fSBccG0gTUUgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICAgICAgQmF0YXMgQXRhcyA9IDIxMCArIDYuNTggPSAyMTYuNTgNCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICAgICAgQmF0YXMgQmF3YWggPSAyMTAgLSA2LjU4ID0gMjAzLjQyDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtcmVzdWx0Ij4NCiAgICAgICAgICAgICAgICAgICAgPGRpdj5SZW50YW5nIEtlcGVyY2F5YWFuIDkwJTo8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtdmFsdWUiPigyMDMuNDIsIDIxNi41OCk8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8IS0tIDk1JSBDb25maWRlbmNlIEludGVydmFsIC0tPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlkZW5jZS1zZWN0aW9uIGNvbmZpZGVuY2UtOTUiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2UtdGl0bGUiPlJlbnRhbmcgS2VwZXJjYXlhYW4gOTUlPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGgzPjEuIE1lbmVudHVrYW4gXCggel97XGFscGhhLzJ9IFwpPC9oMz4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFRpbmdrYXQga2V5YWtpbmFuID0gOTUlID0gMC45NQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgXGFscGhhID0gMSAtIDAuOTUgPSAwLjA1IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBcYWxwaGEvMiA9IDAuMDUvMiA9IDAuMDI1IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyB6X3tcYWxwaGEvMn0gPSB6X3swLjAyNX0gPSAxLjk2IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGgzPjIuIE1lbmdoaXR1bmcgTWFyZ2luIG9mIEVycm9yIChNRSk8L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgUnVtdXM6IFxbIE1FID0gel97XGFscGhhLzJ9IFx0aW1lcyBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAxLjk2IFx0aW1lcyBcZnJhY3syNH17XHNxcnR7MzZ9fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAxLjk2IFx0aW1lcyA0IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBNRSA9IDcuODQgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8aDM+My4gTWVuZ2hpdHVuZyBSZW50YW5nIEtlcGVyY2F5YWFuPC9oMz4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFJ1bXVzOiBcWyBcYmFye3h9IFxwbSBNRSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYWluLXRleHQiPg0KICAgICAgICAgICAgICAgICAgICBCYXRhcyBBdGFzID0gMjEwICsgNy44NCA9IDIxNy44NA0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYWluLXRleHQiPg0KICAgICAgICAgICAgICAgICAgICBCYXRhcyBCYXdhaCA9IDIxMCAtIDcuODQgPSAyMDIuMTYNCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcnZhbC1yZXN1bHQiPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2PlJlbnRhbmcgS2VwZXJjYXlhYW4gOTUlOjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcnZhbC12YWx1ZSI+KDIwMi4xNiwgMjE3Ljg0KTwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDwhLS0gOTklIENvbmZpZGVuY2UgSW50ZXJ2YWwgLS0+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXNlY3Rpb24gY29uZmlkZW5jZS05OSI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlkZW5jZS10aXRsZSI+UmVudGFuZyBLZXBlcmNheWFhbiA5OSU8L2Rpdj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8aDM+MS4gTWVuZW50dWthbiBcKCB6X3tcYWxwaGEvMn0gXCk8L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgVGluZ2thdCBrZXlha2luYW4gPSA5OSUgPSAwLjk5DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBcYWxwaGEgPSAxIC0gMC45OSA9IDAuMDEgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIFxhbHBoYS8yID0gMC4wMS8yID0gMC4wMDUgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIHpfe1xhbHBoYS8yfSA9IHpfezAuMDA1fSA9IDIuNTc2IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGgzPjIuIE1lbmdoaXR1bmcgTWFyZ2luIG9mIEVycm9yIChNRSk8L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgUnVtdXM6IFxbIE1FID0gel97XGFscGhhLzJ9IFx0aW1lcyBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAyLjU3NiBcdGltZXMgXGZyYWN7MjR9e1xzcXJ0ezM2fX0gXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIE1FID0gMi41NzYgXHRpbWVzIDQgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIE1FID0gMTAuMzA0IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGgzPjMuIE1lbmdoaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbjwvaDM+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBSdW11czogXFsgXGJhcnt4fSBccG0gTUUgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICAgICAgQmF0YXMgQXRhcyA9IDIxMCArIDEwLjMwNCA9IDIyMC4zMDQNCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICAgICAgQmF0YXMgQmF3YWggPSAyMTAgLSAxMC4zMDQgPSAxOTkuNjk2DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtcmVzdWx0Ij4NCiAgICAgICAgICAgICAgICAgICAgPGRpdj5SZW50YW5nIEtlcGVyY2F5YWFuIDk5JTo8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtdmFsdWUiPigxOTkuNzAsIDIyMC4zMCk8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICANCiAgICA8IS0tIFRJTSBCOiBEaXN0cmlidXNpIHQgLS0+DQogICAgPGRpdiBjbGFzcz0idGVhbS1zZWN0aW9uIHRlYW0tYiI+DQogICAgICAgIDxkaXYgY2xhc3M9InRlYW0tdGl0bGUiPlRpbSBCOiBEaXN0cmlidXNpIHQgKM+DIHRpZGFrIGRpa2V0YWh1aSk8L2Rpdj4NCiAgICAgICAgDQogICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2UtY29udGFpbmVyIj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPCEtLSA5MCUgQ29uZmlkZW5jZSBJbnRlcnZhbCAtLT4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2Utc2VjdGlvbiI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlkZW5jZS10aXRsZSI+UmVudGFuZyBLZXBlcmNheWFhbiA5MCU8L2Rpdj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8aDM+MS4gTWVuZW50dWthbiBcKCB0X3tcYWxwaGEvMn0gXCk8L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgVGluZ2thdCBrZXlha2luYW4gPSA5MCUgPSAwLjkwDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBcYWxwaGEgPSAxIC0gMC45MCA9IDAuMTAgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIFxhbHBoYS8yID0gMC4xMC8yID0gMC4wNSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgRGVyYWphdCBrZWJlYmFzYW46IFwoIGRmID0gbiAtIDEgPSAzNiAtIDEgPSAzNSBcKQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgdF97XGFscGhhLzJ9ID0gdF97MC4wNSwgMzV9ID0gMS42OTAgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8aDM+Mi4gTWVuZ2hpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1FKTwvaDM+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBSdW11czogXFsgTUUgPSB0X3tcYWxwaGEvMn0gXHRpbWVzIFxmcmFje3N9e1xzcXJ0e259fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAxLjY5MCBcdGltZXMgXGZyYWN7MjR9e1xzcXJ0ezM2fX0gXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIE1FID0gMS42OTAgXHRpbWVzIFxmcmFjezI0fXs2fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAxLjY5MCBcdGltZXMgNCBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSA2Ljc2IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGgzPjMuIE1lbmdoaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbjwvaDM+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBSdW11czogXFsgXGJhcnt4fSBccG0gTUUgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICAgICAgQmF0YXMgQXRhcyA9IDIxMCArIDYuNzYgPSAyMTYuNzYNCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICAgICAgQmF0YXMgQmF3YWggPSAyMTAgLSA2Ljc2ID0gMjAzLjI0DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtcmVzdWx0Ij4NCiAgICAgICAgICAgICAgICAgICAgPGRpdj5SZW50YW5nIEtlcGVyY2F5YWFuIDkwJTo8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtdmFsdWUiPigyMDMuMjQsIDIxNi43Nik8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8IS0tIDk1JSBDb25maWRlbmNlIEludGVydmFsIC0tPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlkZW5jZS1zZWN0aW9uIGNvbmZpZGVuY2UtOTUiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2UtdGl0bGUiPlJlbnRhbmcgS2VwZXJjYXlhYW4gOTUlPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGgzPjEuIE1lbmVudHVrYW4gXCggdF97XGFscGhhLzJ9IFwpPC9oMz4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFRpbmdrYXQga2V5YWtpbmFuID0gOTUlID0gMC45NQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgXGFscGhhID0gMSAtIDAuOTUgPSAwLjA1IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBcYWxwaGEvMiA9IDAuMDUvMiA9IDAuMDI1IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBEZXJhamF0IGtlYmViYXNhbjogXCggZGYgPSBuIC0gMSA9IDM2IC0gMSA9IDM1IFwpDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyB0X3tcYWxwaGEvMn0gPSB0X3swLjAyNSwgMzV9ID0gMi4wMzAgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8aDM+Mi4gTWVuZ2hpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1FKTwvaDM+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBSdW11czogXFsgTUUgPSB0X3tcYWxwaGEvMn0gXHRpbWVzIFxmcmFje3N9e1xzcXJ0e259fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAyLjAzMCBcdGltZXMgXGZyYWN7MjR9e1xzcXJ0ezM2fX0gXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIE1FID0gMi4wMzAgXHRpbWVzIDQgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIE1FID0gOC4xMiBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxoMz4zLiBNZW5naGl0dW5nIFJlbnRhbmcgS2VwZXJjYXlhYW48L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgUnVtdXM6IFxbIFxiYXJ7eH0gXHBtIE1FIFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgICAgIEJhdGFzIEF0YXMgPSAyMTAgKyA4LjEyID0gMjE4LjEyDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgICAgIEJhdGFzIEJhd2FoID0gMjEwIC0gOC4xMiA9IDIwMS44OA0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXJlc3VsdCI+DQogICAgICAgICAgICAgICAgICAgIDxkaXY+UmVudGFuZyBLZXBlcmNheWFhbiA5NSU6PC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXZhbHVlIj4oMjAxLjg4LCAyMTguMTIpPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPCEtLSA5OSUgQ29uZmlkZW5jZSBJbnRlcnZhbCAtLT4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2Utc2VjdGlvbiBjb25maWRlbmNlLTk5Ij4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXRpdGxlIj5SZW50YW5nIEtlcGVyY2F5YWFuIDk5JTwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxoMz4xLiBNZW5lbnR1a2FuIFwoIHRfe1xhbHBoYS8yfSBcKTwvaDM+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBUaW5na2F0IGtleWFraW5hbiA9IDk5JSA9IDAuOTkNCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIFxhbHBoYSA9IDEgLSAwLjk5ID0gMC4wMSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgXGFscGhhLzIgPSAwLjAxLzIgPSAwLjAwNSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgRGVyYWphdCBrZWJlYmFzYW46IFwoIGRmID0gbiAtIDEgPSAzNiAtIDEgPSAzNSBcKQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgdF97XGFscGhhLzJ9ID0gdF97MC4wMDUsIDM1fSA9IDIuNzI0IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGgzPjIuIE1lbmdoaXR1bmcgTWFyZ2luIG9mIEVycm9yIChNRSk8L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgUnVtdXM6IFxbIE1FID0gdF97XGFscGhhLzJ9IFx0aW1lcyBcZnJhY3tzfXtcc3FydHtufX0gXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIE1FID0gMi43MjQgXHRpbWVzIFxmcmFjezI0fXtcc3FydHszNn19IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBNRSA9IDIuNzI0IFx0aW1lcyA0IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBNRSA9IDEwLjg5NiBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxoMz4zLiBNZW5naGl0dW5nIFJlbnRhbmcgS2VwZXJjYXlhYW48L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgUnVtdXM6IFxbIFxiYXJ7eH0gXHBtIE1FIFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgICAgIEJhdGFzIEF0YXMgPSAyMTAgKyAxMC44OTYgPSAyMjAuODk2DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgICAgIEJhdGFzIEJhd2FoID0gMjEwIC0gMTAuODk2ID0gMTk5LjEwNA0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXJlc3VsdCI+DQogICAgICAgICAgICAgICAgICAgIDxkaXY+UmVudGFuZyBLZXBlcmNheWFhbiA5OSU6PC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXZhbHVlIj4oMTk5LjEwLCAyMjAuOTApPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQoNCiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9wb2x5ZmlsbC5pby92My9wb2x5ZmlsbC5taW4uanM/ZmVhdHVyZXM9ZXM2Ij48L3NjcmlwdD4NCiAgICA8c2NyaXB0IGlkPSJNYXRoSmF4LXNjcmlwdCIgYXN5bmMgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL21hdGhqYXhAMy9lczUvdGV4LW1tbC1jaHRtbC5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdD4NCiAgICAgICAgd2luZG93Lk1hdGhKYXggPSB7DQogICAgICAgICAgICB0ZXg6IHsNCiAgICAgICAgICAgICAgICBpbmxpbmVNYXRoOiBbWyckJywgJyQnXSwgWydcXCgnLCAnXFwpJ11dLA0KICAgICAgICAgICAgICAgIGRpc3BsYXlNYXRoOiBbWyckJCcsICckJCddLCBbJ1xcWycsICdcXF0nXV0NCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICBjaHRtbDogew0KICAgICAgICAgICAgICAgIHNjYWxlOiAwLjkNCiAgICAgICAgICAgIH0NCiAgICAgICAgfTsNCiAgICA8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD4NCmBgYA0KDQozLiAqKlZpc3VhbGlzYXNpIHlhbmcgbWVtYmFuZGluZ2thbiBzZWx1cnVoIGludGVydmFsKioNCg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQoNCmNpX2RhdGEgPC0gZGF0YS5mcmFtZSgNCiAgQ0kgPSBmYWN0b3IocmVwKGMoIjkwJSIsICI5NSUiLCAiOTklIiksIGVhY2ggPSAyKSwNCiAgICAgICAgICAgICAgbGV2ZWxzID0gYygiOTAlIiwgIjk1JSIsICI5OSUiKSksDQogIFRpbSA9IGZhY3RvcihyZXAoYygiVGltIEEgKHopIiwgIlRpbSBCICh0KSIpLCB0aW1lcyA9IDMpLA0KICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiVGltIEEgKHopIiwgIlRpbSBCICh0KSIpKSwNCiAgbG93ZXIgPSBjKA0KICAgIDIwMy40MiwgMjAzLjI0LA0KICAgIDIwMi4xNiwgMjAxLjg4LA0KICAgIDE5OS43MCwgMTk5LjEwDQogICksDQogIHVwcGVyID0gYygNCiAgICAyMTYuNTgsIDIxNi43NiwNCiAgICAyMTcuODQsIDIxOC4xMiwNCiAgICAyMjAuMzAsIDIyMC45MA0KICApDQopDQoNCmNpX2RhdGEkbWlkIDwtIChjaV9kYXRhJGxvd2VyICsgY2lfZGF0YSR1cHBlcikvMg0KDQpnZ3Bsb3QoY2lfZGF0YSwgYWVzKHkgPSBUaW0sIGNvbG9yID0gVGltKSkgKw0KICANCiAgZ2VvbV9lcnJvcmJhcigNCiAgICBhZXMoeG1pbiA9IGxvd2VyLCB4bWF4ID0gdXBwZXIpLA0KICAgIG9yaWVudGF0aW9uID0gInkiLA0KICAgIHdpZHRoID0gMC4yNSwNCiAgICBsaW5ld2lkdGggPSAxLjQNCiAgKSArDQogIA0KICBnZW9tX3BvaW50KGFlcyh4ID0gbWlkKSwgc2l6ZSA9IDMuNSkgKw0KICANCiAgZ2VvbV9sYWJlbCgNCiAgICBhZXMoeCA9IG1pZCwgbGFiZWwgPSBwYXN0ZTAocm91bmQobG93ZXIsMiksICIg4oCTICIsIHJvdW5kKHVwcGVyLDIpKSksDQogICAgc2l6ZSA9IDUuMiwNCiAgICBmb250ZmFjZSA9ICJib2xkIiwNCiAgICBmaWxsID0gIndoaXRlIiwNCiAgICBhbHBoYSA9IDAuODUsDQogICAgbGluZXdpZHRoID0gMCwNCiAgICBzaG93LmxlZ2VuZCA9IEZBTFNFDQogICkgKw0KICANCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIlRpbSBBICh6KSIgPSAiI2U3NTQ4MCIsICJUaW0gQiAodCkiID0gIiM0ZDRkNGQiKSkgKw0KICANCiAgZmFjZXRfd3JhcCh+IENJLCBuY29sID0gMSkgKw0KICANCiAgbGFicygNCiAgICB0aXRsZSA9ICJQZXJiYW5kaW5nYW4gUmVudGFuZyBLZXBlcmNheWFhbiBUaW0gQSBkYW4gVGltIEIiLA0KICAgIHN1YnRpdGxlID0gIkludGVydmFsIGtlcGVyY2F5YWFuIDkwJSwgOTUlLCBkYW4gOTklIiwNCiAgICB4ID0gIk5pbGFpIEVzdGltYXNpIiwNCiAgICB5ID0gTlVMTA0KICApICsNCiAgDQogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTQpICsNCiAgdGhlbWUoDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxNiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgc2l6ZSA9IDEzKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxNCkNCiAgKQ0KYGBgDQoNCjQuICoqUGVuamVsYXNhbiBtZW5nYXBhIGxlYmFyIGludGVydmFsIGJlcmJlZGEsIG1lc2tpcHVuIGRhdGFueWEgbWlyaXAgbWVuZGVrYXRpIHNhbWEvIHNlcnVwYSoqDQoNCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5OyB0ZXh0LWp1c3RpZnk6IGludGVyLXdvcmQ7Ij4gDQpNZXNraXB1biBkYXRhIGRhcmkgZHVhIHRpbSB0ZXJsaWhhdCBtaXJpcCBkYW4gcmF0YS1yYXRhbnlhIGhhbXBpciBzYW1hLCBsZWJhciBpbnRlcnZhbCBrZXBlcmNheWFhbiBiaXNhIGJlcmJlZGEuIEhhbCBpbmkga2FyZW5hIGJlYmVyYXBhIGZha3Rvci4gUGVydGFtYSwgdGluZ2thdCBrZXBlcmNheWFhbiB5YW5nIGRpcGlsaWgsIG1pc2FsbnlhIDkwJSwgOTUlLCBhdGF1IDk5JSBtZW5lbnR1a2FuIHNlYmVyYXBhIHlha2luIGtpdGEgYmFod2EgaW50ZXJ2YWwgdGVyc2VidXQgbWVuY2FrdXAgcGFyYW1ldGVyIHBvcHVsYXNpLiBTZW1ha2luIHRpbmdnaSB0aW5na2F0IGtlcGVyY2F5YWFuLCBzZW1ha2luIGxlYmFyIGludGVydmFsbnlhLiBLZWR1YSwgbWV0b2RlIHBlcmhpdHVuZ2FuIGp1Z2EgYmVycGVuZ2FydWg7IFRpbSBBIG1lbmdndW5ha2FuIGRpc3RyaWJ1c2kgeiwgc2VkYW5na2FuIFRpbSBCIG1lbmdndW5ha2FuIGRpc3RyaWJ1c2kgdC4gRGlzdHJpYnVzaSB0IG1lbWlsaWtpIGVrb3IgbGViaWggdGViYWwgc2VoaW5nZ2EgQ0kgY2VuZGVydW5nIGxlYmloIHBhbmphbmcsIHRlcnV0YW1hIHVudHVrIHNhbXBlbCBrZWNpbC4gS2V0aWdhLCB2YXJpYWJpbGl0YXMgZGF0YSBkYW4gdWt1cmFuIHNhbXBlbCBtZW1lbmdhcnVoaSBzdGFuZGFyIGVycm9yIGRhdGEgeWFuZyBsZWJpaCB0ZXJzZWJhciBhdGF1IHNhbXBlbCBsZWJpaCBrZWNpbCBtZW5naGFzaWxrYW4gaW50ZXJ2YWwgeWFuZyBsZWJpaCBsZWJhci4gSmFkaSwgd2FsYXVwdW4gZGF0YW55YSBoYW1waXIgc2FtYSwga29tYmluYXNpIHRpbmdrYXQga2VwZXJjYXlhYW4sIGplbmlzIGRpc3RyaWJ1c2ksIGRhbiBrYXJha3RlcmlzdGlrIHNhbXBlbCBtZW55ZWJhYmthbiBsZWJhciBpbnRlcnZhbCB0ZXJsaWhhdCBiZXJiZWRhLg0KPC9wPg0KDQo6OjoNCg0KIyMgU3R1ZGkgS2FzdXMgNQ0KKipJbnRlcnZhbCBLZXBlcmNheWFhbiBTYXR1IFNpc2k6KiogUGVydXNhaGFhbiAqKlNvZnR3YXJlIGFzIGEgU2VydmljZSAoU2FhUykqKiBpbmdpbiBtZW1hc3Rpa2FuIGJhaHdhICoqc2V0aWRha255YSA3MCUgcGVuZ2d1bmEgYWt0aWYgbWluZ2d1YW4qKiBtZW5nZ3VuYWthbiBmaXR1ciBwcmVtaXVtLg0KDQpVbnR1ayBzZWJ1YWggcGVyY29iYmFhbjoNCg0KJCQNClxiZWdpbntlcW5hcnJheSp9DQpuICY9JiAyNTAgXHF1YWQgXHRleHR7KEtlc2VsdXJ1aGFuIHBlbmdndW5hKX0gXFwNCnggJj0mIDE4NSBccXVhZCBcdGV4dHsoUGVuZ2d1bmEgIlByZW1pdW0iIHlhbmcgQWt0aWYpfQ0KXGVuZHtlcW5hcnJheSp9DQokJA0KDQpNYW5hamVtZW4gaGFueWEgdGVydGFyaWsgcGFkYSAqKmJhdGFzIGJhd2FoKiogZGFyaSBwZXJraXJhYW4gdGVyc2VidXQuDQoNCjo6OiB7c3R5bGU9ImJhY2tncm91bmQtY29sb3I6I2U2ZjdmNTsgYm9yZGVyLWxlZnQ6NnB4IHNvbGlkICMwMDgwODA7IHBhZGRpbmc6MTJweDsgYm9yZGVyLXJhZGl1czo4cHg7IG1hcmdpbjoyMHB4IDA7In0NCioqVHVnYXM6KioNCg0KMS4gSWRlbnRpZmlrYXNpICoqamVuaXMgUmVudGFuZyBLZXBlcmNheWFhbiBEaXJpKiogZGFuIHVqaSB5YW5nIHNlc3VhaS4NCjIuIEhpdHVuZyAqKkludGVydmFsIEtlcGVyY2F5YWFuIHNhdHUgc2lzaSBiYXdhaCoqIHBhZGEgOg0KICAgLSAkOTBcJSQNCiAgIC0gJDk1XCUkDQogICAtICQ5OVwlJA0KMy4gVmlzdWFsaXNhc2lrYW4gYmF0YXMgYmF3YWggdW50dWsgc2VtdWEgdGluZ2thdCBrZXBlcmNheWFhbi4NCjQuIFRlbnR1a2FuIGFwYWthaCB0YXJnZXQgKio3MCUqKiBzZWNhcmEgc3RhdGlzdGlrIHRlcnBlbnVoaS4NCg0KOjo6DQoNCg0KOjo6IHtzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZjFlZmZhOyBib3JkZXItbGVmdDo2cHggc29saWQgIzNmNTFiNTsgcGFkZGluZzoxMnB4OyBib3JkZXItcmFkaXVzOjhweDsgbWFyZ2luOjIwcHggMDsifQ0KDQoqKlBlbnllbGVzYWlhbiBTdHVkaSBLYXN1cyA1KioNCg0KMS4gKip1amkgc3RhdGlzdGlrIHlhbmcgZGlndW5ha2FuIG9sZWggS2FzdXMgaW5pKioNCg0KPHAgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnk7IHRleHQtanVzdGlmeTogaW50ZXItd29yZDsiPiANCkthc3VzIGluaSBtZW1lcmx1a2FuIEludGVydmFsIEtlcGVyY2F5YWFuIFNhdHUgU2lzaSAoT25lLVNpZGVkIENvbmZpZGVuY2UgSW50ZXJ2YWwpLCBraHVzdXNueWEgYmF0YXMgYmF3YWggKExvd2VyIEJvdW5kKSwga2FyZW5hIHR1anVhbm55YSBhZGFsYWggbWVtYXN0aWthbiBuaWxhaSBtaW5pbXVtICJzZXRpZGFrbnlhIDcwJSIgZGFyaSBwb3B1bGFzaSwgYnVrYW4gbWVuY2FyaSByZW50YW5nIGR1YSBzaXNpLiBEZW5nYW4gZGF0YSBiZXJ1cGEgcHJvcG9yc2kga2F0ZWdvcmlrYWwgKHBlbmdndW5hIHByZW1pdW0gdnMuIG5vbi1wcmVtaXVtKSBkYW4gdWt1cmFuIHNhbXBlbCB5YW5nIGJlc2FyIChuPTI1MCksIHVqaSBzdGF0aXN0aWsgeWFuZyB0ZXBhdCB1bnR1ayBkaWd1bmFrYW4gYWRhbGFoIFVqaS1aIHVudHVrIFNhdHUgUHJvcG9yc2kgKE9uZS1TYW1wbGUgWi1UZXN0IGZvciBhIFByb3BvcnRpb24pLCBkaSBtYW5hIHByb3BvcnNpIHNhbXBlbCBkaWhpdHVuZyBzZWJlc2FyIDE4NS8yNTAgPSAwLjc0IGF0YXUgNzQlLg0KPC9wPg0KDQoyLioqSGl0dW5nIEludGVydmFsIEtlcGVyY2F5YWFuIHNhdHUgc2lzaSBiYXdhaCoqDQoNCmBgYHs9aHRtbH0NCjwhRE9DVFlQRSBodG1sPg0KPGh0bWwgbGFuZz0iaWQiPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPg0KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4NCiAgICA8dGl0bGU+SW50ZXJ2YWwgS2VwZXJjYXlhYW4gU2F0dSBTaXNpIEJhd2FoPC90aXRsZT4NCiAgICA8c3R5bGU+DQogICAgICAgICogew0KICAgICAgICAgICAgbWFyZ2luOiAwOw0KICAgICAgICAgICAgcGFkZGluZzogMDsNCiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7DQogICAgICAgICAgICBmb250LWZhbWlseTogJ1NlZ29lIFVJJywgVGFob21hLCBHZW5ldmEsIFZlcmRhbmEsIHNhbnMtc2VyaWY7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGJvZHkgew0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZmNmYzsNCiAgICAgICAgICAgIGNvbG9yOiAjMzMzOw0KICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsNCiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7DQogICAgICAgICAgICBtYXgtd2lkdGg6IDEwMDBweDsNCiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuZGF0YS1pbmZvIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGY4Zjg7DQogICAgICAgICAgICBwYWRkaW5nOiAxNXB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4Ow0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDsNCiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgIzAwODA4MDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmluZm8tYm94IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNmY1ZjU7DQogICAgICAgICAgICBwYWRkaW5nOiAxNXB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4Ow0KICAgICAgICAgICAgbWFyZ2luOiAyMHB4IDA7DQogICAgICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkICMyMGIyYWE7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5jYWxjdWxhdGlvbiB7DQogICAgICAgICAgICBtYXJnaW46IDhweCAwOw0KICAgICAgICAgICAgcGFkZGluZzogNXB4IDA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5jb25maWRlbmNlLWNvbnRhaW5lciB7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgICAgICAgICAgIGdhcDogNDBweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmNvbmZpZGVuY2Utc2VjdGlvbiB7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4MDgwOw0KICAgICAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICAgICAgcGFkZGluZzogOHB4IDIwcHg7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7DQogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOw0KICAgICAgICAgICAgZm9udC1zaXplOiAxLjJyZW07DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS05NSAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjBiMmFhOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS05OSAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDhkMWNjOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBoMyB7DQogICAgICAgICAgICBjb2xvcjogIzAwNjY2NjsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtOw0KICAgICAgICAgICAgbWFyZ2luOiAyNXB4IDAgMTBweCAwOw0KICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDVweDsNCiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBmMGYwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuaW50ZXJ2YWwtcmVzdWx0IHsNCiAgICAgICAgICAgIG1hcmdpbjogMjVweCAwOw0KICAgICAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNmY1ZjU7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7DQogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5pbnRlcnZhbC12YWx1ZSB7DQogICAgICAgICAgICBmb250LXNpemU6IDEuNHJlbTsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7DQogICAgICAgICAgICBjb2xvcjogIzAwNjY2NjsNCiAgICAgICAgICAgIG1hcmdpbjogMTBweCAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAucGxhaW4tdGV4dCB7DQogICAgICAgICAgICBtYXJnaW46IDEwcHggMDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmxvd2VyLWJvdW5kIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkNGYxZjE7DQogICAgICAgICAgICBwYWRkaW5nOiAxMnB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4Ow0KICAgICAgICAgICAgbWFyZ2luOiAxNXB4IDA7DQogICAgICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkICMwMDgwODA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgew0KICAgICAgICAgICAgYm9keSB7DQogICAgICAgICAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLmNvbmZpZGVuY2UtY29udGFpbmVyIHsNCiAgICAgICAgICAgICAgICBnYXA6IDMwcHg7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICA8L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQogICAgPGRpdiBjbGFzcz0iZGF0YS1pbmZvIj4NCiAgICAgICAgPHN0cm9uZz5EYXRhIFNhYVMgLSBQZW5nZ3VuYSBGaXR1ciBQcmVtaXVtOjwvc3Ryb25nPg0KICAgICAgICA8ZGl2Pm4gPSAyNTAgKHRvdGFsIHBlbmdndW5hKTwvZGl2Pg0KICAgICAgICA8ZGl2PnggPSAxODUgKHBlbmdndW5hIHByZW1pdW0gYWt0aWYpPC9kaXY+DQogICAgPC9kaXY+DQogICAgDQogICAgPCEtLSBISVRVTkcgU0FNUExFIFBST1BPUlNJIC0tPg0KICAgIDxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCiAgICAgICAgPGgzPkhpdHVuZyBTYW1wbGUgUHJvcG9yc2kgXChcaGF0e3B9XCk8L2gzPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICBSdW11czogXFsgXGhhdHtwfSA9IFxmcmFje3h9e259IFxdDQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICBcWyBcaGF0e3B9ID0gXGZyYWN7MTg1fXsyNTB9IFxdDQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICBcWyBcaGF0e3B9ID0gMC43NCBcXQ0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgUHJvcG9yc2kgcGVuZ2d1bmEgcHJlbWl1bSBha3RpZjogNzQlDQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIA0KICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2UtY29udGFpbmVyIj4NCiAgICAgICAgDQogICAgICAgIDwhLS0gOTAlIENvbmZpZGVuY2UgSW50ZXJ2YWwgLS0+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2Utc2VjdGlvbiI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXRpdGxlIj5JbnRlcnZhbCBLZXBlcmNheWFhbiBTYXR1IFNpc2kgQmF3YWggOTAlPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4xLiBNZW5lbnR1a2FuIFwoIHpfe1xhbHBoYX0gXCk8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFRpbmdrYXQga2V5YWtpbmFuID0gOTAlID0gMC45MA0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgXGFscGhhID0gMSAtIDAuOTAgPSAwLjEwIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAoVW50dWsgc2F0dSBzaXNpIGJhd2FoLCBndW5ha2FuIHNlbHVydWggzrEgZGkgc2F0dSBzaXNpKQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgel97XGFscGhhfSA9IHpfezAuMTB9ID0gMS4yODIgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+Mi4gTWVuZ2hpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1FKTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIE1FID0gel97XGFscGhhfSBcdGltZXMgXHNxcnR7XGZyYWN7XGhhdHtwfSgxLVxoYXR7cH0pfXtufX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS4yODIgXHRpbWVzIFxzcXJ0e1xmcmFjezAuNzQgXHRpbWVzICgxLTAuNzQpfXsyNTB9fSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgTUUgPSAxLjI4MiBcdGltZXMgXHNxcnR7XGZyYWN7MC43NCBcdGltZXMgMC4yNn17MjUwfX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS4yODIgXHRpbWVzIFxzcXJ0e1xmcmFjezAuMTkyNH17MjUwfX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS4yODIgXHRpbWVzIFxzcXJ0ezAuMDAwNzY5Nn0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS4yODIgXHRpbWVzIDAuMDI3NzQgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMC4wMzU1NyBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4zLiBNZW5naGl0dW5nIEJhdGFzIEJhd2FoIFNhdHUgU2lzaTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIFx0ZXh0e0JhdGFzIEJhd2FofSA9IFxoYXR7cH0gLSBNRSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICBCYXRhcyBCYXdhaCA9IDAuNzQgLSAwLjAzNTU3ID0gMC43MDQ0Mw0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXJlc3VsdCI+DQogICAgICAgICAgICAgICAgPGRpdj5JbnRlcnZhbCBLZXBlcmNheWFhbiBTYXR1IFNpc2kgQmF3YWggOTAlOjwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXZhbHVlIj5Qcm9wb3JzaSDiiaUgMC43MDQ0PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsiPmF0YXUg4omlIDcwLjQ0JTwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxvd2VyLWJvdW5kIj4NCiAgICAgICAgICAgICAgICA8c3Ryb25nPkludGVycHJldGFzaTo8L3N0cm9uZz4gRGVuZ2FuIGtleWFraW5hbiA5MCUsIGtpdGEgZGFwYXQgbWVuZ2F0YWthbiBiYWh3YSA8c3Ryb25nPm1pbmltYWwgNzAuNDQlPC9zdHJvbmc+IHBlbmdndW5hIGFrdGlmIG1lbmdndW5ha2FuIGZpdHVyIHByZW1pdW0uDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIA0KICAgICAgICA8IS0tIDk1JSBDb25maWRlbmNlIEludGVydmFsIC0tPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXNlY3Rpb24gY29uZmlkZW5jZS05NSI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXRpdGxlIj5JbnRlcnZhbCBLZXBlcmNheWFhbiBTYXR1IFNpc2kgQmF3YWggOTUlPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4xLiBNZW5lbnR1a2FuIFwoIHpfe1xhbHBoYX0gXCk8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFRpbmdrYXQga2V5YWtpbmFuID0gOTUlID0gMC45NQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgXGFscGhhID0gMSAtIDAuOTUgPSAwLjA1IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyB6X3tcYWxwaGF9ID0gel97MC4wNX0gPSAxLjY0NSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4yLiBNZW5naGl0dW5nIE1hcmdpbiBvZiBFcnJvciAoTUUpPC9oMz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBSdW11czogXFsgTUUgPSB6X3tcYWxwaGF9IFx0aW1lcyBcc3FydHtcZnJhY3tcaGF0e3B9KDEtXGhhdHtwfSl9e259fSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgTUUgPSAxLjY0NSBcdGltZXMgXHNxcnR7XGZyYWN7MC43NCBcdGltZXMgMC4yNn17MjUwfX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS42NDUgXHRpbWVzIDAuMDI3NzQgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMC4wNDU2NCBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4zLiBNZW5naGl0dW5nIEJhdGFzIEJhd2FoIFNhdHUgU2lzaTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIFx0ZXh0e0JhdGFzIEJhd2FofSA9IFxoYXR7cH0gLSBNRSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICBCYXRhcyBCYXdhaCA9IDAuNzQgLSAwLjA0NTY0ID0gMC42OTQzNg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXJlc3VsdCI+DQogICAgICAgICAgICAgICAgPGRpdj5JbnRlcnZhbCBLZXBlcmNheWFhbiBTYXR1IFNpc2kgQmF3YWggOTUlOjwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXZhbHVlIj5Qcm9wb3JzaSDiiaUgMC42OTQ0PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsiPmF0YXUg4omlIDY5LjQ0JTwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxvd2VyLWJvdW5kIj4NCiAgICAgICAgICAgICAgICA8c3Ryb25nPkludGVycHJldGFzaTo8L3N0cm9uZz4gRGVuZ2FuIGtleWFraW5hbiA5NSUsIGtpdGEgZGFwYXQgbWVuZ2F0YWthbiBiYWh3YSA8c3Ryb25nPm1pbmltYWwgNjkuNDQlPC9zdHJvbmc+IHBlbmdndW5hIGFrdGlmIG1lbmdndW5ha2FuIGZpdHVyIHByZW1pdW0uDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIA0KICAgICAgICA8IS0tIDk5JSBDb25maWRlbmNlIEludGVydmFsIC0tPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXNlY3Rpb24gY29uZmlkZW5jZS05OSI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXRpdGxlIj5JbnRlcnZhbCBLZXBlcmNheWFhbiBTYXR1IFNpc2kgQmF3YWggOTklPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4xLiBNZW5lbnR1a2FuIFwoIHpfe1xhbHBoYX0gXCk8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFRpbmdrYXQga2V5YWtpbmFuID0gOTklID0gMC45OQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgXGFscGhhID0gMSAtIDAuOTkgPSAwLjAxIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyB6X3tcYWxwaGF9ID0gel97MC4wMX0gPSAyLjMyNiBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4yLiBNZW5naGl0dW5nIE1hcmdpbiBvZiBFcnJvciAoTUUpPC9oMz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBSdW11czogXFsgTUUgPSB6X3tcYWxwaGF9IFx0aW1lcyBcc3FydHtcZnJhY3tcaGF0e3B9KDEtXGhhdHtwfSl9e259fSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgTUUgPSAyLjMyNiBcdGltZXMgXHNxcnR7XGZyYWN7MC43NCBcdGltZXMgMC4yNn17MjUwfX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMi4zMjYgXHRpbWVzIDAuMDI3NzQgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMC4wNjQ1MiBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4zLiBNZW5naGl0dW5nIEJhdGFzIEJhd2FoIFNhdHUgU2lzaTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIFx0ZXh0e0JhdGFzIEJhd2FofSA9IFxoYXR7cH0gLSBNRSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICBCYXRhcyBCYXdhaCA9IDAuNzQgLSAwLjA2NDUyID0gMC42NzU0OA0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXJlc3VsdCI+DQogICAgICAgICAgICAgICAgPGRpdj5JbnRlcnZhbCBLZXBlcmNheWFhbiBTYXR1IFNpc2kgQmF3YWggOTklOjwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXZhbHVlIj5Qcm9wb3JzaSDiiaUgMC42NzU1PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsiPmF0YXUg4omlIDY3LjU1JTwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxvd2VyLWJvdW5kIj4NCiAgICAgICAgICAgICAgICA8c3Ryb25nPkludGVycHJldGFzaTo8L3N0cm9uZz4gRGVuZ2FuIGtleWFraW5hbiA5OSUsIGtpdGEgZGFwYXQgbWVuZ2F0YWthbiBiYWh3YSA8c3Ryb25nPm1pbmltYWwgNjcuNTUlPC9zdHJvbmc+IHBlbmdndW5hIGFrdGlmIG1lbmdndW5ha2FuIGZpdHVyIHByZW1pdW0uDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQoNCiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9wb2x5ZmlsbC5pby92My9wb2x5ZmlsbC5taW4uanM/ZmVhdHVyZXM9ZXM2Ij48L3NjcmlwdD4NCiAgICA8c2NyaXB0IGlkPSJNYXRoSmF4LXNjcmlwdCIgYXN5bmMgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL21hdGhqYXhAMy9lczUvdGV4LW1tbC1jaHRtbC5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdD4NCiAgICAgICAgd2luZG93Lk1hdGhKYXggPSB7DQogICAgICAgICAgICB0ZXg6IHsNCiAgICAgICAgICAgICAgICBpbmxpbmVNYXRoOiBbWyckJywgJyQnXSwgWydcXCgnLCAnXFwpJ11dLA0KICAgICAgICAgICAgICAgIGRpc3BsYXlNYXRoOiBbWyckJCcsICckJCddLCBbJ1xcWycsICdcXF0nXV0NCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICBjaHRtbDogew0KICAgICAgICAgICAgICAgIHNjYWxlOiAwLjkNCiAgICAgICAgICAgIH0NCiAgICAgICAgfTsNCiAgICA8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD4NCmBgYA0KDQozLiAqKlZpc3VhbGlzYXNpa2FuIGJhdGFzIGJhd2FoIHVudHVrIHNlbXVhIHRpbmdrYXQga2VwZXJjYXlhYW4qKg0KDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCg0KIyBEYXRhDQpjb25maWRlbmNlIDwtIGMoMC45MCwgMC45NSwgMC45OSkNCnpfYWxwaGEgPC0gYygxLjI4MiwgMS42NDUsIDIuMzI2KQ0KcF9oYXQgPC0gMTg1IC8gMjUwDQpuIDwtIDI1MA0KDQojIEhpdHVuZyBNYXJnaW4gb2YgRXJyb3IgZGFuIEJhdGFzIEJhd2FoDQpNRSA8LSB6X2FscGhhICogc3FydChwX2hhdCAqICgxIC0gcF9oYXQpIC8gbikNCmxvd2VyX2JvdW5kIDwtIHBfaGF0IC0gTUUNCg0KZGYgPC0gZGF0YS5mcmFtZSgNCiAgQ29uZmlkZW5jZSA9IGNvbmZpZGVuY2UgKiAxMDAsDQogIExvd2VyQm91bmQgPSBsb3dlcl9ib3VuZA0KKQ0KDQojIEJ1YXQgZ2dwbG90IGRlbmdhbiBwb3Npc2kgbGFiZWwgZGlzZXN1YWlrYW4NCmdncGxvdChkZiwgYWVzKHggPSBDb25maWRlbmNlLCB5ID0gTG93ZXJCb3VuZCkpICsNCiAgZ2VvbV9wb2ludChzaXplID0gNCwgY29sb3IgPSAiIzAwODA4MCIpICsNCiAgZ2VvbV9saW5lKGdyb3VwID0gMSwgY29sb3IgPSAiIzIwYjJhYSIsIGxpbmV0eXBlID0gImRhc2hlZCIpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC43LCBjb2xvciA9ICJyZWQiLCBsaW5ldHlwZSA9ICJkb3R0ZWQiLCBzaXplID0gMSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gc3ByaW50ZigiJS4zZiIsIExvd2VyQm91bmQpKSwNCiAgICAgICAgICAgIHZqdXN0ID0gLTAuOCwgIA0KICAgICAgICAgICAgY29sb3IgPSAiIzAwNjY2NiIsDQogICAgICAgICAgICBzaXplID0gNSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gZGYkQ29uZmlkZW5jZSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDEpLCBsaW1pdHMgPSBjKDAuNjUsIDAuNzUpKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiQmF0YXMgQmF3YWggSW50ZXJ2YWwiLA0KICAgIHggPSAiVGluZ2thdCBLZXBlcmNheWFhbiAoJSkiLA0KICAgIHkgPSAiQmF0YXMgQmF3YWggUHJvcG9yc2kiLA0KICAgIGNhcHRpb24gPSAiR2FyaXMgbWVyYWggPSB0YXJnZXQgbWluaW1hbCA3MCUiDQogICkgKw0KICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDE0KQ0KYGBgDQoNCjQuICAqKlRlbnR1a2FuIGFwYWthaCB0YXJnZXQgNzAlIHNlY2FyYSBzdGF0aXN0aWsgdGVycGVudWhpLioqDQoNCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5OyB0ZXh0LWp1c3RpZnk6IGludGVyLXdvcmQ7Ij4gDQpCZXJkYXNhcmthbiBkYXRhIGRhcmkgMjUwIHBlbmdndW5hIGRlbmdhbiAxODUgcGVuZ2d1bmEgYWt0aWYgZml0dXIgcHJlbWl1bSwgZGlwZXJvbGVoIHByb3BvcnNpIHNhbXBlbCBzZWJlc2FyIDc0JS4gSGFzaWwgaW5pIG1lbnVuanVra2FuIGFuZ2thIHlhbmcgbWVsZWJpaGkgdGFyZ2V0IHBlcnVzYWhhYW4gc2ViZXNhciA3MCUuIE5hbXVuLCBzZXRlbGFoIGRpbGFrdWthbiBwZXJoaXR1bmdhbiBpbnRlcnZhbCBrZXBlcmNheWFhbiBzYXR1IHNpc2kgYmF3YWgsIGRpdGVtdWthbiBiYWh3YSBwZW5jYXBhaWFuIHRhcmdldCBiZXJnYW50dW5nIHBhZGEgdGluZ2thdCBrZXlha2luYW4gc3RhdGlzdGlrIHlhbmcgZGl0ZXJhcGthbi4gUGFkYSB0aW5na2F0IGtleWFraW5hbiA5MCUsIGJhdGFzIGJhd2FoIGludGVydmFsIHNlYmVzYXIgNzAsNDQlIG1lbmdpbmRpa2FzaWthbiB0YXJnZXQgdGVycGVudWhpLCBzZWRhbmdrYW4gcGFkYSB0aW5na2F0IGtleWFraW5hbiA5NSUgZGFuIDk5JSBkZW5nYW4gYmF0YXMgYmF3YWggbWFzaW5nLW1hc2luZyA2OSw0NCUgZGFuIDY3LDU1JSwgdGFyZ2V0IGRpbnlhdGFrYW4gdGlkYWsgdGVyY2FwYWkuVGFyZ2V0IDcwJSBwZW5nZ3VuYSBmaXR1ciBwcmVtaXVtIGhhbnlhIHRlcnBlbnVoaSBwYWRhIHRpbmdrYXQga2V5YWtpbmFuIDkwJSwgbmFtdW4gdGlkYWsgcGFkYSB0aW5na2F0IGtleWFraW5hbiB5YW5nIGxlYmloIHRpbmdnaSAoOTUlIGRhbiA5OSUpLiBQZXJsdSBkaXBlcnRpbWJhbmdrYW4gYmFod2EgbWVza2lwdW4gZGF0YSBzYW1wZWwgbWVudW5qdWtrYW4gYW5na2EgcG9zaXRpZiwga2V0aWRha3Bhc3RpYW4gc3RhdGlzdGlrIHBhZGEgdGluZ2thdCBrZXlha2luYW4gdGluZ2dpIG1lbnllYmFia2FuIHRhcmdldCBiZWx1bSBkYXBhdCBkaWthdGFrYW4gdGVyY2FwYWkgc2VjYXJhIG1leWFraW5rYW4uDQo8L3A+IA0KOjo6DQoNCg0KIyMgUmVmZXJlbmNlDQoNClsxXSBULiBUb255IENhaSwgIk9uZS1zaWRlZCBjb25maWRlbmNlIGludGVydmFscyBpbiBkaXNjcmV0ZSBkaXN0cmlidXRpb25zLCJKb3VybmFsIG9mIFN0YXRpc3RpY2FsIFBsYW5uaW5nIGFuZCBJbmZlcmVuY2UsIHZvbC4gMTMxLCBuby4gMSwgcHAuIDYz4oCTODgsIDIwMDUuDQoNClsyXSBBLi1NLiBTaW11bmRpYywgIkNvbmZpZGVuY2UgaW50ZXJ2YWwsIiBCaW9jaGVtaWEgTWVkaWNhLCB2b2wuIDE4LCBuby4gMiwgcHAuIDE1NOKAkzE2MSwgMjAwOC4NCg0KWzNdIE8uIEJhcm5kb3JmZi1OaWVsc2VuLCBKLiBLZW50LCBhbmQgTS4gU8O4cmVuc2VuLCAiTm9ybWFsIHZhcmlhbmNlLW1lYW4gbWl4dHVyZXMgYW5kIHogZGlzdHJpYnV0aW9ucywiIEludGVybmF0aW9uYWwgU3RhdGlzdGljYWwgUmV2aWV3IC8gUmV2dWUgSW50ZXJuYXRpb25hbGUgZGUgU3RhdGlzdGlxdWUsIHBwLiAxNDXigJMxNTksIDE5ODIuDQoNCg==