Identitas Penulis:

Keterangan Informasi
Nama Sri Yuliana
NPM 140720250003
Program Studi Magister Statistika Terapan
Mata Kuliah Analisis Spasial


ABSTRAK

Tuberkulosis (TB) masih menjadi salah satu masalah kesehatan masyarakat di Provinsi Jawa Barat dengan jumlah kasus yang relatif tinggi. Penelitian ini bertujuan menganalisis faktor-faktor yang memengaruhi Incidence Rate (IR) TB tahun 2025 menggunakan pendekatan spasial Spatial Lag of X (SLX). Data yang digunakan mencakup 27 kabupaten/kota di Jawa Barat dengan variabel jumlah fasilitas kesehatan, persentase penduduk miskin, kepadatan penduduk, akses air minum layak, akses sanitasi layak, dan jumlah kasus HIV. Analisis dilakukan melalui statistik deskriptif, pemetaan spasial, uji autokorelasi spasial Moran’s I, regresi OLS, dan model SLX. Hasil menunjukkan bahwa model SLX memberikan kinerja yang lebih baik dibandingkan model OLS dengan nilai R² sebesar 0,6913 dan RMSE sebesar 123,49. Temuan ini mengindikasikan bahwa faktor-faktor yang memengaruhi kejadian TB tidak hanya berasal dari karakteristik wilayah itu sendiri, tetapi juga dipengaruhi oleh kondisi wilayah sekitarnya. Oleh karena itu, pendekatan spasial perlu dipertimbangkan dalam perencanaan program pengendalian TB di Jawa Barat.

Kata Kunci: Tuberkulosis, Incidence Rate, Analisis Spasial, Moran’s I, Spatial Lag of X (SLX), Jawa Barat.


1. Pendahuluan

1.1 Latar Belakang

Tuberkulosis (TB) merupakan salah satu penyakit menular yang masih menjadi permasalahan kesehatan masyarakat di dunia. Penyakit yang disebabkan oleh Mycobacterium tuberculosis ini menyebar melalui udara dan menjadi salah satu penyebab utama kematian akibat penyakit infeksi (WHO, 2025). Upaya pengendalian TB merupakan salah satu target dalam Sustainable Development Goals (SDGs), khususnya pada Tujuan ke-3 yaitu Kehidupan Sehat dan Sejahtera, dengan target 3.3 yang menargetkan pengakhiran epidemi TB pada tahun 2030. Hal ini menunjukkan bahwa penanggulangan TB bukan hanya prioritas nasional, tetapi juga bagian dari komitmen global yang harus didukung melalui upaya berbasis data dan wilayah. Indonesia termasuk negara dengan beban TB tertinggi di dunia dan menyumbang sekitar 10% dari total kasus TB global (WHO, 2025).

Di Indonesia, Tuberkulosis (TB) masih menjadi salah satu masalah kesehatan masyarakat yang utama. Jumlah kasus TB yang dilaporkan menunjukkan tren peningkatan dari tahun ke tahun. Berdasarkan Profil Kesehatan Indonesia 2024, terdapat 229.683 kasus TB yang dilaporkan pada tahun 2024, meningkat dibandingkan tahun sebelumnya. Jawa Barat merupakan provinsi dengan beban TB tertinggi di Indonesia, dengan jumlah kasus mencapai 225.389 kasus pada tahun 2025. Tingginya jumlah kasus tersebut menunjukkan bahwa TB masih menjadi tantangan serius dalam upaya pengendalian penyakit menular di Jawa Barat dan memerlukan perhatian khusus dalam perencanaan program kesehatan berbasis wilayah (Kementerian Kesehatan Republik Indonesia, 2025; Dinas Kesehatan Provinsi Jawa Barat, 2025).

Tingginya kasus TB dipengaruhi oleh berbagai faktor sosial, ekonomi, dan lingkungan. Beberapa penelitian menunjukkan bahwa kepadatan penduduk, tingkat kemiskinan, kualitas sanitasi, akses air minum layak, ketersediaan fasilitas kesehatan, serta kasus HIV berhubungan dengan kejadian TB (Sihaloho et al., 2021; Laoli et al., 2024; Handayani et al., 2024). Selain itu, karakteristik wilayah yang berbeda menyebabkan distribusi kasus TB tidak merata antar daerah.

Perbedaan distribusi kasus antarwilayah menunjukkan pentingnya pendekatan spasial dalam analisis epidemiologi. Analisis spasial memungkinkan identifikasi pola persebaran penyakit berdasarkan lokasi geografis sehingga dapat membantu menentukan wilayah prioritas pengendalian TB. Dalam penelitian ini, analisis dilakukan melalui pemetaan Incidence Rate (IR), pemodelan faktor-faktor yang berhubungan dengan tingkat penularan TB menggunakan regresi Ordinary Least Squares (OLS), serta pengujian efek ketergantungan spasial.

Model OLS konvensional mengasumsikan bahwa pengamatan di suatu wilayah bersifat independen dan tidak dipengaruhi oleh wilayah sekitarnya. Namun, penyakit menular seperti TB memiliki karakteristik bawaan berupa efek limpahan (spillover effect) akibat mobilitas penduduk lintas batas administratif. Oleh karena itu, jika terdapat ketergantungan spasial pada variabel penjelas, model Spatial Lag X (SLX) diterapkan untuk menghasilkan estimasi yang lebih akurat melalui pembobotan matriks ketetanggaan (spatial weight matrix). Hasil penelitian ini diharapkan dapat memberikan gambaran mengenai faktor lokal dan faktor lingkungan tetangga yang berhubungan dengan kejadian TB di Provinsi Jawa Barat sebagai dasar perencanaan program pengendalian berbasis wilayah.

1.2 Rumusan Masalah

  1. Bagaimana karakteristik dan distribusi spasial kasus TB di Jawa Barat?

  2. Bagaimana pola persebaran Incidence Rate TB?

  3. Bagaimana pengaruh faktor sosial-ekonomi dan kesehatan terhadap TB menggunakan OLS?

  4. Apakah terdapat efek spasial yang lebih baik dijelaskan dengan model SLX?

1.3 Tujuan Penelitian

  1. Mendeskripsikan karakteristik kasus TB di Jawa Barat.
  2. Memetakan distribusi Incidence Rate TB.
  3. Menganalisis faktor yang memengaruhi TB menggunakan OLS.
  4. Menguji dan membandingkan model OLS dan SLX.

2. Data dan Metode

2.1 Data Penelitian

Data yang digunakan merupakan data sekunder yang mencakup 27 kabupaten/kota di Provinsi Jawa Barat pada tahun 2025. Data atribut diperoleh dari Badan Pusat Statistik (BPS) Provinsi Jawa Barat serta Portal Open Data Jabar, sedangkan data spasial berupa batas administrasi kabupaten/kota dalam format shapefile (SHP) diperoleh dari Portal Open Data Jabar. Data spasial tersebut digunakan untuk membangun matriks pembobot spasial dan memvisualisasikan sebaran kasus Tuberkulosis (TB) antarwilayah. Variabel penelitian terdiri atas satu variabel respon yaitu IR Tuberkulosis (TB), enam variabel penjelas yang mencerminkan faktor sosial, ekonomi, dan kesehatan, serta jumlah penduduk yang digunakan sebagai dasar perhitungan Incidence Rate (IR). Definisi operasional variabel yang digunakan disajikan pada Tabel 1.

Tabel 1. Variabel Penelitian

Variabel Definisi Operasional Dasar Teori dan Empiris Arah Hubungan yang Diharapkan
IR Tuberkulosis (Y) Jumlah kasus TB per 100.000 penduduk pada setiap kabupaten/kota di Jawa Barat tahun 2025. Digunakan sebagai ukuran risiko kejadian TB yang memungkinkan perbandingan antarwilayah dengan jumlah penduduk berbeda. -
Fasilitas Kesehata (\(X_1\)) Jumlah fasilitas kesehatan pada setiap kabupaten/kota. Akses terhadap pelayanan kesehatan berperan penting dalam penemuan kasus, diagnosis, dan pengobatan TB. Rahmawati et al. (2026) menunjukkan bahwa indikator infrastruktur kesehatan berupa jumlah dokter dan kepesertaan JKN berasosiasi dengan kasus TB yang terlaporkan. Dengan demikian, fasilitas kesehatan dipandang sebagai proksi kapasitas sistem kesehatan dalam pengendalian TB. Positif (+). Semakin banyak fasilitas kesehatan, semakin tinggi kemampuan penemuan dan pelaporan kasus TB (case detection).
Penduduk Miskin (\(X_2\)) Persentase penduduk miskin pada setiap kabupaten/kota. Faktor sosial ekonomi merupakan determinan utama TB. Studi spasial di Jawa menemukan bahwa kemiskinan termasuk faktor yang dianalisis bersama prevalensi TB. Selain itu, analisis nasional Indonesia menunjukkan bahwa faktor sosial ekonomi berasosiasi dengan variasi spasial kejadian TB. Oleh karena itu, wilayah dengan proporsi penduduk miskin yang lebih tinggi cenderung memiliki risiko TB yang lebih besar. Positif (+). Semakin tinggi proporsi penduduk miskin, semakin tinggi risiko kejadian TB akibat keterbatasan akses kesehatan, gizi, dan kondisi hunian yang kurang layak.
Kepadatan Penduduk (\(X_3\)) Jumlah penduduk per km² pada setiap kabupaten/kota. Putra et al. (2022) menemukan bahwa kepadatan rumah tangga berhubungan dengan prevalensi TB di Pulau Jawa. Rahmawati et al. (2026) juga menunjukkan bahwa kepadatan penduduk memiliki pengaruh positif terhadap kasus TB dan menghasilkan efek limpahan spasial (spatial spillover). Penelitian di Kabupaten Bekasi juga menunjukkan adanya hubungan spasial antara kepadatan penduduk dan persebaran kasus TB. Positif (+). Semakin padat suatu wilayah, semakin tinggi peluang kontak antarindividu sehingga meningkatkan risiko penularan TB.
Air Minum Layak (\(X_4\)) Persentase rumah tangga yang memiliki akses terhadap air minum layak. Rahmawati et al. (2026) menggunakan akses air minum sebagai salah satu indikator infrastruktur kesehatan dalam model spasial TB. Variabel ini dipertimbangkan sebagai indikator kualitas lingkungan dan kesehatan masyarakat yang dapat memengaruhi risiko penyakit menular. Negatif (-). Semakin tinggi akses air minum layak, semakin baik kondisi kesehatan lingkungan sehingga risiko TB cenderung menurun.
Sanitasi Layak (\(X_5\)) Persentase rumah tangga yang memiliki akses terhadap sanitasi layak. Rahmawati et al. (2026) memasukkan sanitasi sebagai indikator infrastruktur kesehatan. Selain itu, studi spasial TB di Jawa Barat menggunakan indikator sanitasi lingkungan sebagai faktor yang dianalisis bersama distribusi spasial TB. Sanitasi yang baik dapat mengurangi kerentanan masyarakat terhadap berbagai penyakit infeksi dan mencerminkan kualitas lingkungan yang lebih sehat. Negatif (-). Semakin tinggi cakupan sanitasi layak, semakin rendah risiko kejadian TB karena kualitas lingkungan yang lebih baik.
HIV (\(X_6\)) Jumlah kasus HIV pada setiap kabupaten/kota. HIV merupakan faktor risiko utama TB karena menyebabkan penurunan sistem imun sehingga meningkatkan risiko berkembangnya infeksi TB aktif. Kajian sistematis metode analisis spasial TB menunjukkan bahwa banyak penelitian telah menganalisis hubungan spasial antara TB dan HIV. Oleh karena itu, wilayah dengan jumlah kasus HIV yang lebih tinggi berpotensi memiliki beban TB yang lebih besar. Positif (+). Semakin tinggi jumlah kasus HIV, semakin tinggi risiko TB karena meningkatnya kerentanan terhadap infeksi oportunistik.
Jumlah Penduduk Jumlah penduduk pada setiap kabupaten/kota. Digunakan sebagai populasi berisiko (population at risk) dalam perhitungan incidence rate TB. Tidak dianalisis sebagai variabel prediktor.

Sumber Data: Badan Pusat Statistik Provinsi Jawa Barat dan Portal Open Data Jabar.

2.2 Metode Analisis

2.2.1 Analisis Deskriptif dan Incidance Rate

Analisis deskriptif dilakukan untuk memberikan gambaran umum mengenai distribusi kasus Tuberkulosis (TB) pada setiap kabupaten/kota di Provinsi Jawa Barat Tahun 2025. Incidance Rate sebagai ukuran epidemiologi digunakan untuk mengukur frekuensi kasus baru TB yang terjadi dalam populasi berisiko selama periode waktu tertentu di wilayah tertentu. Formula penghitungan IR dalam penelitian ini dengan per 100.000 penduduk dirumuskan sebagai berikut:

\[ IR_i = \frac{TB_i}{\text{Jumlah Penduduk}_i} \times 100.000 \]

Dengan:

\(IR_i\) : jumlah kasus TB pada kabupaten/kota i.

\({\text{Jumlah Penduduk}_i}\) : jumlah populasi di wilayah i.

2.2.3 Matrik Pembobot Spasial

nb <- poly2nb(
  jabar_tb,
  queen = TRUE
)

lw <- nb2listw(
  nb,
  style = "W",
  zero.policy = TRUE
)

Berdasarkan kriteria Queen Contiguity, dua wilayah spasial i dan j dinyatakan saling bertetangga jika keduanya berbagi batas wilayah bersama, baik berupa persinggungan garis (edge) maupun titik sudut (vertex). Secara matematis, elemen matriks ketetanggaan awal \(w_{ij}\) didefinisikan sebagai berikut:

\[ w_{ij} = \begin{cases} 1, & \text{jika wilayah } i \text{ dan } j \text{ berbagi batas garis atau titik}, \\ 0, & \text{jika wilayah } i \text{ dan } j \text{ tidak berbagi batas langsung atau } i=j. \end{cases} \] Dimana elemen pembobot spasial terstandardisasi baris \(w_{ij}\) dihitung dengan membagi setiap elemen biner dengan total jumlah tetangga pada baris tersebut. Transformasi ini mengubah interpretasi efek spasial menjadi nilai rata-rata spasial (spatial lag) dari karakteristik wilayah-wilayah tetangganya:

\[ W_{ij} = \frac{w_{ij}}{\sum_{j=1}^{n} w_{ij}} \]

2.2.3 Model OLS

Model OLS digunakan sebagai model baseline untuk mengestimasi hubungan linear global antara variabel independen dan Incidence Rate TB tanpa memperhitungkan aspek lokasi. Persamaan regresi linear berganda OLS dalam penelitian ini dirumuskan sebagai berikut:

\[Yi=β_0 +β_1 X_1i +β_2 X_{2i} +β_3 X_{3i} +β_4 X_{4i}+β_5 X_{5i} +β_6 X_{6i} +ε_i \] Dengan:

\(Y_i\) : Incidance Rate kasus TB

\(β_0\) : Konstanta (nilai parameter intercept).

\(β_1,…,β_6\) : Koefisien regresi masing-masing variabel independen lokal.

\(X\) : Variabel Prediktor

\(ε_i\) : galat yang diasumsikan berdistribusi normal

2.2.4 Spasial Lag X

Model Spatial Lag X (SLX) merupakan pengembangan dari model OLS konvensional dengan menambahkan variabel penjelas yang telah ditransformasikan menggunakan matriks pembobot spasial (spatial lag of exogenous variables). Model ini digunakan untuk menangkap efek limpahan (spillover effect), yaitu kondisi di mana variabel terikat (Y) di suatu wilayah tidak hanya dipengaruhi oleh karakteristik internal wilayah itu sendiri (X), melainkan juga dipengaruhi oleh karakteristik wilayah-wilayah tetangga yang berbatasan langsung (WX).

Secara matematis, persamaan model SLX untuk Incidence Rate kasus TB di 27 kabupaten/kota Provinsi Jawa Barat dirumuskan sebagai berikut:

\[ Y_i = \beta_0 + \sum_{k=1}^{6} \beta_k X_{ki} + \sum_{k=1}^{6} \gamma_k \sum_{j=1}^{n} W_{ij} X_{kj} + \varepsilon_i \]

Dengan:

\(Y_i\) : Incidence Rate TB pada wilayah ke-i.

\(X_{ki}\) : variabel independen lokal.

\(WX)_{ki}\): Variabel bebas yang telah diberi bobot spasial (Spasial Lag X).

\(β_k\) : Parameter koefisien regresi untuk variabel bebas lokal

\(\gamma_k\): Pengaruh tidak langsung (spillover effect) dari wilayah tetangga.

\(\epsilon_i\) : galat model.

3. Hasil Analisis

3.1 Analisis Deskriptif dan Peta IR

Tabel 2. Statistik Deskriptif

vars <- jabar_tb %>%
  st_drop_geometry() %>%
  dplyr::select(
    TB,
    incidence_rate_TB,
    faskes,
    penduduk_miskin,
    kepadatan,
    air_minum,
    sanitasi,
    hiv
  ) %>%
  mutate(across(everything(), as.numeric))

desc_table <- data.frame(
  Variabel = c(
    "TB",
    "Incidence Rate TB",
    "Faskes",
    "Penduduk Miskin",
    "Kepadatan",
    "Air Minum Layak",
    "Sanitasi Layak",
    "HIV"
  ),
  Mean = sapply(vars, mean, na.rm = TRUE),
  SD = sapply(vars, sd, na.rm = TRUE),
  Varians = sapply(vars, var, na.rm = TRUE),
  Min = sapply(vars, min, na.rm = TRUE),
  Max = sapply(vars, max, na.rm = TRUE)
)


knitr::kable( desc_table, digits = 4)
Variabel Mean SD Varians Min Max
TB TB 8347.7407 6046.3174 3.655795e+07 1024.0000 28134.000
incidence_rate_TB Incidence Rate TB 486.7945 226.4968 5.130079e+04 230.8394 1077.861
faskes Faskes 2185.3704 1387.9867 1.926507e+06 241.0000 5588.000
penduduk_miskin Penduduk Miskin 7.5956 2.4999 6.249300e+00 2.3100 11.020
kepadatan Kepadatan 3941.3333 4701.5895 2.210494e+07 387.0000 15300.000
air_minum Air Minum Layak 95.7793 4.5879 2.104910e+01 84.7900 100.000
sanitasi Sanitasi Layak 9.2563 6.5311 4.265500e+01 1.8700 22.830
hiv HIV 94.1852 100.4253 1.008523e+04 7.0000 389.000

Berdasarkan hasil statistik deskriptif, terlihat bahwa jumlah kasus Tuberkulosis (TB) di Jawa Barat memiliki nilai rata-rata sebesar 8.347,74 kasus dengan variasi yang cukup tinggi antar wilayah, yang ditunjukkan oleh standar deviasi sebesar 6.046,32. Sementara itu, incidence rate TB memiliki rata-rata 486,79 per 100.000 penduduk dengan rentang nilai yang cukup lebar, menunjukkan adanya ketimpangan beban penyakit antar kabupaten/kota.

Untuk variabel independen, kondisi sosial ekonomi dan kesehatan juga menunjukkan variasi antar wilayah. Variabel kepadatan penduduk memiliki sebaran yang paling tinggi dibanding variabel lain, sedangkan variabel seperti akses air minum layak relatif lebih homogen dengan nilai yang mendekati 100% di sebagian besar wilayah. Secara umum, hasil ini menunjukkan adanya heterogenitas kondisi antar wilayah di Jawa Barat, yang mengindikasikan potensi adanya perbedaan risiko Tuberkulosis antar daerah.

tm_shape(jabar_tb) +
  tm_polygons(
    "incidence_rate_TB",
    palette = "Reds",
    title = "Incidence Rate TB"
  ) +
  tm_text(
    text = "WADMKK",
    size = 0.5
  ) +
  tm_layout(
    legend.outside = TRUE
  )

Gambar 1. Visualisasi Peta Incidance Rate TB

Sebagian besar wilayah di Jawa Barat berada pada kategori incidence rate (IR) rendah hingga sedang (200–599 per 100.000 penduduk) yang tersebar di berbagai wilayah barat, selatan, dan timur. Sementara itu, wilayah dengan IR tinggi hingga sangat tinggi (>600 per 100.000 penduduk) cenderung membentuk pola terlokalisasi pada beberapa wilayah perkotaan yang padat penduduk. Hal ini menunjukkan adanya konsentrasi kasus TB pada wilayah dengan karakteristik urban dan kepadatan tinggi.

3.2 Uji Autokorelasi Spasial

Tabel 3. Hasil Uji Autokorelasi Spasial

var_list <- c( "incidence_rate_TB", "faskes", "penduduk_miskin", "kepadatan", "air_minum", "sanitasi", "hiv" )

nama_variabel <- c( "Incidence Rate (TB)", "Faskes", "Penduduk Miskin", "Kepadatan Penduduk", "Air Minum Layak", "Sanitasi Layak", "HIV" )

moran_summary <- data.frame( Variabel = nama_variabel, Moran_I = NA, Expectation = NA, Variance = NA, Z_score = NA, p_value = NA )

for(i in seq_along(var_list)) { x <- scale(jabar_tb[[var_list[i]]])[,1] 

moran_result <- moran.test( x, lw, zero.policy = TRUE ) 

moran_summary$Moran_I[i] <- moran_result$estimate[1] 

moran_summary$Expectation[i] <- moran_result$estimate[2] 

moran_summary$Variance[i] <- moran_result$estimate[3] 

moran_summary$Z_score[i] <- unname(moran_result$statistic) 

moran_summary$p_value[i] <- moran_result$p.value} 

knitr::kable( moran_summary, digits = 4)
Variabel Moran_I Expectation Variance Z_score p_value
Incidence Rate (TB) 0.0500 -0.0385 0.0187 0.6473 0.2587
Faskes -0.0392 -0.0385 0.0194 -0.0050 0.5020
Penduduk Miskin 0.5076 -0.0385 0.0201 3.8553 0.0001
Kepadatan Penduduk 0.2580 -0.0385 0.0191 2.1437 0.0160
Air Minum Layak 0.2847 -0.0385 0.0194 2.3232 0.0101
Sanitasi Layak 0.3514 -0.0385 0.0200 2.7573 0.0029
HIV 0.2562 -0.0385 0.0174 2.2316 0.0128

Berdasarkan hasil uji Moran’s I pada masing-masing variabel, ditemukan bahwa sebagian besar variabel independen menunjukkan adanya autokorelasi spasial yang signifikan. Variabel penduduk miskin, kepadatan penduduk, akses air minum layak, sanitasi layak, dan jumlah kasus HIV memiliki nilai Moran’s I positif dan signifikan (p < 0,05), yang menunjukkan adanya pola pengelompokan spasial (clustered) antar wilayah di Jawa Barat. Sebaliknya, variabel incidence rate Tuberkulosis dan jumlah fasilitas kesehatan (faskes) tidak menunjukkan autokorelasi spasial yang signifikan (p > 0,05), sehingga distribusinya cenderung acak secara spasial dan tidak membentuk pola pengelompokan yang jelas antar wilayah.

3.3 Model OLS

Hasil estimasi parameter menggunakan metode Ordinary Least Squares (OLS) disajikan pada Tabel 5 berikut:

Tabel 4. Hasil Estimasi Model OLS

ols_model <- lm(
  incidence_rate_TB ~
    faskes +
    penduduk_miskin +
    kepadatan +
    air_minum +
    sanitasi +
    hiv,
  data = jabar_tb
)

ols_coef <- summary(ols_model)$coefficients

ols_table <- data.frame(
  Variabel = rownames(ols_coef),
  Koefisien = ols_coef[, 1],
  Std_Error = ols_coef[, 2],
  t_value = ols_coef[, 3],
  p_value = ols_coef[, 4]
)

knitr::kable(
  ols_table,
  digits = 4, row.names = FALSE)
Variabel Koefisien Std_Error t_value p_value
(Intercept) -177.6495 957.9636 -0.1854 0.8547
faskes -0.0603 0.0431 -1.4002 0.1768
penduduk_miskin 14.6376 20.6729 0.7081 0.4871
kepadatan 0.0211 0.0145 1.4580 0.1604
air_minum 5.4803 9.8547 0.5561 0.5843
sanitasi 1.9850 8.4556 0.2348 0.8168
hiv 0.6230 0.5724 1.0883 0.2894

Berdasarkan hasil OLS, variabel independen secara simultan berpengaruh signifikan terhadap incidence rate TB (p = 0,02078), namun secara parsial tidak ditemukan pengaruh yang signifikan (p > 0,05). Model mampu menjelaskan sekitar 49,55% variasi incidence rate (R² = 0,4955), dengan nilai Adjusted R² sebesar 0,3442. Secara umum, hasil ini menunjukkan bahwa model masih terbatas dalam menjelaskan variasi TB sehingga diperlukan pendekatan spasial untuk menangkap keterkaitan antar wilayah.

3.4 Diagnostik Model OLS

Tabel 5. Diagnostik Model OLS

Tabel 5. Diagnostik Model

jabar_tb$residual_ols <- residuals(ols_model)

# VIF
vif_values <- vif(ols_model)

# Uji diagnostik
shapiro_res <- shapiro.test(jabar_tb$residual_ols)
bp_res <- bptest(ols_model)
dw_res <- dwtest(ols_model)

moran_residual <- moran.test(
  jabar_tb$residual_ols,
  lw,
  zero.policy = TRUE
)

diagnostic_table <- data.frame(
  Uji = c(
    paste("VIF –", names(vif_values)),
    "Normalitas Residual (Shapiro-Wilk)",
    "Heteroskedastisitas (Breusch-Pagan)",
    "Autokorelasi (Durbin-Watson)",
    "Autokorelasi Spasial Residual (Moran's I)"
  ),
  Nilai = c(
    as.numeric(vif_values),
    shapiro_res$statistic,
    bp_res$statistic,
    dw_res$statistic,
    moran_residual$estimate[1]
  ),
  p_value = c(
    rep(NA, length(vif_values)),
    shapiro_res$p.value,
    bp_res$p.value,
    dw_res$p.value,
    moran_residual$p.value
  )
)

knitr::kable(
  diagnostic_table,
  digits = 4
)
Uji Nilai p_value
VIF – faskes 2.7618 NA
VIF – penduduk_miskin 2.0639 NA
VIF – kepadatan 3.5732 NA
VIF – air_minum 1.5797 NA
VIF – sanitasi 2.3568 NA
VIF – hiv 2.5539 NA
Normalitas Residual (Shapiro-Wilk) 0.9547 0.2787
Heteroskedastisitas (Breusch-Pagan) 8.4930 0.2042
Autokorelasi (Durbin-Watson) 3.0128 0.9971
Autokorelasi Spasial Residual (Moran’s I) 0.2573 0.0176

Hasil diagnostik model OLS menunjukkan bahwa seluruh asumsi klasik terpenuhi, yaitu tidak terdapat multikolinearitas, heteroskedastisitas, maupun autokorelasi residual secara temporal. Namun, uji Moran’s I pada residual menunjukkan adanya autokorelasi spasial yang signifikan (I = 0,2573; p = 0,0176), yang mengindikasikan bahwa residual masih memiliki pola ketergantungan antar wilayah. Temuan ini menunjukkan bahwa model OLS belum mampu menangkap efek spasial, sehingga diperlukan pendekatan model spasial seperti SLX untuk mengakomodasi keterkaitan antar wilayah.

3.5 Model SLX

Tabel 5. Hasil Estimasi Model SLX

jabar_tb$lag_faskes <- lag.listw(
  lw, jabar_tb$faskes,
  zero.policy = TRUE
)

jabar_tb$lag_penduduk_miskin <- lag.listw(
  lw, jabar_tb$penduduk_miskin,
  zero.policy = TRUE
)

jabar_tb$lag_kepadatan <- lag.listw(
  lw, jabar_tb$kepadatan,
  zero.policy = TRUE
)

jabar_tb$lag_air_minum <- lag.listw(
  lw, jabar_tb$air_minum,
  zero.policy = TRUE
)

jabar_tb$lag_sanitasi <- lag.listw(
  lw, jabar_tb$sanitasi,
  zero.policy = TRUE
)

jabar_tb$lag_hiv <- lag.listw(
  lw, jabar_tb$hiv,
  zero.policy = TRUE
)

slx_model <- lm(
  incidence_rate_TB ~
    faskes +
    penduduk_miskin +
    kepadatan +
    air_minum +
    sanitasi +
    hiv +
    lag_faskes +
    lag_penduduk_miskin +
    lag_kepadatan +
    lag_air_minum +
    lag_sanitasi +
    lag_hiv,
  data = jabar_tb
)

slx_coef <- summary(slx_model)$coefficients

slx_table <- data.frame(
  Variabel = c(
    "(Intercept)",
    "Faskes",
    "Penduduk Miskin",
    "Kepadatan Penduduk",
    "Air Minum Layak",
    "Sanitasi Layak",
    "HIV",
    "Lag Faskes",
    "Lag Penduduk Miskin",
    "Lag Kepadatan",
    "Lag Air Minum Layak",
    "Lag Sanitasi Layak",
    "Lag HIV"
  ),
  Koefisien = slx_coef[, 1],
  Std_Error = slx_coef[, 2],
  t_value = slx_coef[, 3],
  p_value = slx_coef[, 4]
)

knitr::kable(
  slx_table,
  digits = 4,  row.names = FALSE)
Variabel Koefisien Std_Error t_value p_value
(Intercept) 617.9421 2184.4884 0.2829 0.7814
Faskes -0.0307 0.0512 -0.5992 0.5586
Penduduk Miskin -7.8117 29.5788 -0.2641 0.7956
Kepadatan Penduduk 0.0228 0.0185 1.2328 0.2379
Air Minum Layak 8.6532 10.3198 0.8385 0.4158
Sanitasi Layak 3.7075 9.7746 0.3793 0.7102
HIV 0.6005 0.5896 1.0184 0.3258
Lag Faskes 0.0769 0.1117 0.6878 0.5028
Lag Penduduk Miskin 32.5588 51.2840 0.6349 0.5357
Lag Kepadatan -0.0464 0.0446 -1.0391 0.3164
Lag Air Minum Layak -15.1076 25.1085 -0.6017 0.5570
Lag Sanitasi Layak 9.2671 21.2031 0.4371 0.6687
Lag HIV 0.0116 1.1733 0.0099 0.9923

Hasil estimasi model SLX menunjukkan bahwa model secara simultan signifikan dalam menjelaskan variasi incidence rate Tuberkulosis (p = 0,04483). Nilai R² sebesar 0,6913 menunjukkan bahwa model mampu menjelaskan sekitar 69,13% variasi data, yang lebih tinggi dibandingkan model OLS. Namun demikian, secara parsial seluruh variabel baik variabel lokal maupun efek spasial (lag) tidak menunjukkan pengaruh yang signifikan (p > 0,05). Hal ini mengindikasikan bahwa pengaruh faktor risiko terhadap incidence rate TB tersebar secara spasial dan tidak terpusat pada satu variabel tertentu. Secara keseluruhan, model SLX menunjukkan adanya peningkatan kemampuan dalam menangkap variasi data dibandingkan OLS, sehingga mendukung adanya efek keterkaitan spasial antar wilayah dalam penyebaran Tuberkulosis. Tidak signifikannya variabel secara parsial dapat disebabkan oleh adanya pengaruh faktor lain yang belum dimasukkan dalam model seperti kualitas hunian, kepatuhan pengobatan, dan mobilitas penduduk.

Selain mengestimasi koefisien regresi, model SLX memungkinkan identifikasi pengaruh langsung (direct effect) dan pengaruh tidak langsung (indirect effect) yang berasal dari wilayah tetangga. Analisis ini penting untuk mengetahui sejauh mana faktor-faktor sosial, ekonomi, dan kesehatan memengaruhi Incidence Rate Tuberkulosis (TB), baik melalui karakteristik wilayah itu sendiri maupun melalui efek limpahan spasial (spillover effect). Hasil estimasi efek langsung, efek tidak langsung, dan efek total disajikan pada Tabel 6.

Tabel 6. Direct and Indirect Effects Model SLX

slx_coef <- summary(slx_model)$coefficients

impact_table <- data.frame(
  Variable = c(
    "faskes",
    "penduduk_miskin",
    "kepadatan",
    "air_minum",
    "sanitasi",
    "hiv"
  ),

  Direct = slx_coef[c(
    "faskes",
    "penduduk_miskin",
    "kepadatan",
    "air_minum",
    "sanitasi",
    "hiv"
  ), 1],

  SE_Direct = slx_coef[c(
    "faskes",
    "penduduk_miskin",
    "kepadatan",
    "air_minum",
    "sanitasi",
    "hiv"
  ), 2],

  p_Direct = slx_coef[c(
    "faskes",
    "penduduk_miskin",
    "kepadatan",
    "air_minum",
    "sanitasi",
    "hiv"
  ), 4],

  Indirect = slx_coef[c(
    "lag_faskes",
    "lag_penduduk_miskin",
    "lag_kepadatan",
    "lag_air_minum",
    "lag_sanitasi",
    "lag_hiv"
  ), 1],

  SE_Indirect = slx_coef[c(
    "lag_faskes",
    "lag_penduduk_miskin",
    "lag_kepadatan",
    "lag_air_minum",
    "lag_sanitasi",
    "lag_hiv"
  ), 2],

  p_Indirect = slx_coef[c(
    "lag_faskes",
    "lag_penduduk_miskin",
    "lag_kepadatan",
    "lag_air_minum",
    "lag_sanitasi",
    "lag_hiv"
  ), 4]
)

impact_table$Total <-
  impact_table$Direct +
  impact_table$Indirect

knitr::kable(
  impact_table,
  digits = 4,
  row.names = FALSE
)
Variable Direct SE_Direct p_Direct Indirect SE_Indirect p_Indirect Total
faskes -0.0307 0.0512 0.5586 0.0769 0.1117 0.5028 0.0462
penduduk_miskin -7.8117 29.5788 0.7956 32.5588 51.2840 0.5357 24.7471
kepadatan 0.0228 0.0185 0.2379 -0.0464 0.0446 0.3164 -0.0236
air_minum 8.6532 10.3198 0.4158 -15.1076 25.1085 0.5570 -6.4544
sanitasi 3.7075 9.7746 0.7102 9.2671 21.2031 0.6687 12.9747
hiv 0.6005 0.5896 0.3258 0.0116 1.1733 0.9923 0.6121

Hasil estimasi direct effect, indirect effect, dan total effect pada model Spatial Lag of X (SLX) disajikan pada Tabel 6. Seluruh variabel memiliki nilai p-value lebih besar dari 0,05 baik pada pengaruh langsung maupun pengaruh tidak langsung, sehingga tidak terdapat bukti statistik yang cukup untuk menyatakan bahwa fasilitas kesehatan, penduduk miskin, kepadatan penduduk, akses air minum layak, sanitasi layak, maupun jumlah kasus HIV berpengaruh signifikan terhadap Incidence Rate (IR) Tuberkulosis (TB) di Jawa Barat.

Meskipun tidak signifikan, arah koefisien menunjukkan beberapa kecenderungan hubungan. Variabel fasilitas kesehatan, penduduk miskin, sanitasi layak, dan HIV memiliki total effect positif, sedangkan kepadatan penduduk dan akses air minum layak memiliki total effect negatif. Selain itu, beberapa variabel menunjukkan perbedaan arah antara direct effect dan indirect effect, seperti penduduk miskin, kepadatan penduduk, dan akses air minum layak, yang mengindikasikan adanya kemungkinan pengaruh karakteristik wilayah tetangga terhadap kondisi TB di suatu wilayah.

Secara umum, hasil direct effect dan indirect effect menunjukkan bahwa tidak terdapat pengaruh signifikan secara parsial dari seluruh variabel yang diteliti. Namun, keberadaan koefisien indirect effect yang tidak bernilai nol menunjukkan bahwa model SLX mampu mengakomodasi potensi keterkaitan antarwilayah (spatial spillover), meskipun efek tersebut belum terbukti signifikan secara statistik pada data penelitian ini.

3.6 Perbandingan Model

Tabel 7. Perbandingan Model

model_comparison <- data.frame(
  Model = c("OLS", "SLX"),
  
  AIC = round(
    c(
      AIC(ols_model),
      AIC(slx_model)
    ),
    2
  ),
  
  R_squared = round(
    c(
      summary(ols_model)$r.squared,
      summary(slx_model)$r.squared
    ),
    4
  ),
  
  LogLik = round(
    c(
      as.numeric(logLik(ols_model)),
      as.numeric(logLik(slx_model))
    ),
    2
  ),
  
  RMSE = round(
    c(
      sqrt(mean(ols_model$residuals^2)),
      sqrt(mean(slx_model$residuals^2))
    ),
    2
  )
)

comparison_table <- data.frame(
  Model = c("OLS", "SLX"),

  AIC = round(
    c(
      AIC(ols_model),
      AIC(slx_model)
    ),
    2
  ),

  R_squared = round(
    c(
      summary(ols_model)$r.squared,
      summary(slx_model)$r.squared
    ),
    4
  ),

  Log_Likelihood = round(
    c(
      as.numeric(logLik(ols_model)),
      as.numeric(logLik(slx_model))
    ),
    2
  ),

  RMSE = round(
    c(
      sqrt(mean(residuals(ols_model)^2)),
      sqrt(mean(residuals(slx_model)^2))
    ),
    2
  )
)

knitr::kable(
  comparison_table,
  digits = 4
)
Model AIC R_squared Log_Likelihood RMSE
OLS 365.96 0.4955 -174.98 157.87
SLX 364.69 0.6913 -168.35 123.49

Hasil perbandingan kinerja model menunjukkan bahwa model SLX memiliki performa yang lebih baik dibandingkan model OLS. Hal ini terlihat dari penurunan nilai AIC dan RMSE, serta peningkatan nilai R-squared dan log-likelihood. Peningkatan tersebut menunjukkan bahwa model SLX lebih mampu menjelaskan variasi incidence rate Tuberkulosis dengan mempertimbangkan efek spasial antar wilayah. Dengan demikian, model SLX lebih sesuai digunakan dalam analisis ini karena mampu menangkap keterkaitan spasial yang tidak dapat dijelaskan oleh model OLS.

4. Pembahasan

4.1 Pembahasan

Penelitian ini bertujuan menganalisis faktor-faktor yang berhubungan dengan Incidence Rate (IR) Tuberkulosis (TB) di Provinsi Jawa Barat menggunakan pendekatan spasial Spatial Lag of X (SLX). Hasil analisis menunjukkan bahwa distribusi TB di Jawa Barat tidak merata antar kabupaten/kota. Peta Incidence Rate memperlihatkan bahwa wilayah dengan tingkat kejadian TB tinggi cenderung terkonsentrasi pada beberapa wilayah perkotaan yang memiliki aktivitas sosial dan mobilitas penduduk yang tinggi. Kondisi ini sejalan dengan karakteristik penyakit TB yang penularannya dipengaruhi oleh intensitas kontak antarindividu dalam suatu populasi.

Hasil uji Moran’s I menunjukkan bahwa sebagian besar variabel penjelas, yaitu penduduk miskin, kepadatan penduduk, akses air minum layak, sanitasi layak, dan jumlah kasus HIV memiliki pola pengelompokan spasial yang signifikan. Temuan ini menunjukkan bahwa karakteristik sosial, ekonomi, dan kesehatan masyarakat di Jawa Barat tidak tersebar secara acak, melainkan cenderung membentuk kelompok wilayah dengan karakteristik yang serupa. Adanya pola pengelompokan tersebut mengindikasikan bahwa pendekatan spasial relevan digunakan dalam analisis faktor-faktor yang berkaitan dengan kejadian TB.

Model OLS menunjukkan bahwa secara simultan variabel-variabel yang digunakan mampu menjelaskan variasi Incidence Rate TB. Namun demikian, tidak terdapat variabel yang signifikan secara parsial. Selain itu, uji Moran’s I terhadap residual model menunjukkan adanya autokorelasi spasial yang signifikan. Hasil tersebut mengindikasikan bahwa masih terdapat informasi spasial yang belum dapat dijelaskan oleh model OLS sehingga asumsi independensi antarwilayah tidak sepenuhnya terpenuhi. Oleh karena itu, penggunaan model spasial menjadi penting untuk mengakomodasi keterkaitan geografis antar kabupaten/kota.

Penerapan model SLX menghasilkan peningkatan kinerja model dibandingkan OLS, yang ditunjukkan oleh peningkatan nilai koefisien determinasi (R²) dari 0,4955 menjadi 0,6913 serta penurunan nilai RMSE. Temuan ini menunjukkan bahwa penambahan komponen spasial pada variabel independen mampu meningkatkan kemampuan model dalam menjelaskan variasi Incidence Rate TB. Dengan kata lain, informasi mengenai kondisi wilayah tetangga memberikan kontribusi dalam menjelaskan variasi kejadian TB di Jawa Barat.

Meskipun demikian, hasil estimasi parameter model SLX menunjukkan bahwa seluruh variabel lokal maupun variabel lag spasial memiliki nilai p-value lebih besar dari 0,05. Hasil analisis direct effect dan indirect effect juga menunjukkan bahwa tidak terdapat pengaruh yang signifikan secara statistik baik dari karakteristik wilayah itu sendiri maupun dari karakteristik wilayah tetangga. Temuan ini menunjukkan bahwa variabel fasilitas kesehatan, persentase penduduk miskin, kepadatan penduduk, akses air minum layak, sanitasi layak, dan jumlah kasus HIV belum mampu menjelaskan variasi Incidence Rate TB secara parsial pada data yang digunakan dalam penelitian ini.

Ketidaksignifikanan seluruh variabel dapat disebabkan oleh beberapa faktor. Pertama, jumlah observasi yang relatif terbatas, yaitu hanya 27 kabupaten/kota, dapat mengurangi kekuatan statistik model dalam mendeteksi pengaruh variabel. Kedua, kejadian TB merupakan fenomena yang kompleks dan dipengaruhi oleh berbagai faktor lain yang belum dimasukkan ke dalam model, seperti kondisi hunian, kepadatan rumah tangga, status gizi, perilaku pencarian pengobatan, keberhasilan pengobatan, mobilitas penduduk, dan faktor lingkungan. Ketiga, penggunaan data agregat pada tingkat kabupaten/kota berpotensi menimbulkan efek heterogenitas internal wilayah yang tidak dapat ditangkap oleh model.

Secara keseluruhan, penelitian ini menunjukkan bahwa pendekatan spasial memberikan peningkatan kemampuan model dalam menjelaskan variasi kejadian TB dibandingkan pendekatan nonspasial. Namun demikian, belum ditemukan bukti statistik yang cukup untuk menyatakan bahwa faktor fasilitas kesehatan, kemiskinan, kepadatan penduduk, akses air minum layak, sanitasi layak, maupun HIV berpengaruh secara langsung maupun tidak langsung terhadap Incidence Rate TB di Jawa Barat pada tahun 2025. Temuan ini mengindikasikan perlunya pengembangan model dengan variabel yang lebih komprehensif serta penggunaan data spasio-temporal untuk memperoleh pemahaman yang lebih baik mengenai faktor-faktor yang memengaruhi persebaran TB.

4.2 Keterbatasan Penelitian

Penelitian ini memiliki beberapa keterbatasan yaitu sebagai berikut:

  1. Jumlah unit observasi relatif terbatas, yaitu hanya 27 kabupaten/kota di Provinsi Jawa Barat. Jumlah observasi yang kecil dapat mengurangi kekuatan statistik (statistical power) model dalam mendeteksi pengaruh variabel secara parsial.
  2. Data yang digunakan bersifat cross-sectional pada tahun 2025 sehingga belum mampu menggambarkan dinamika perubahan kejadian Tuberkulosis (TB) dari waktu ke waktu maupun mengidentifikasi pola temporal penyebaran penyakit.
  3. Variabel penjelas yang digunakan masih terbatas pada faktor sosial, ekonomi, dan kesehatan tertentu. Beberapa faktor yang secara teoritis berhubungan dengan TB, seperti kepadatan hunian, status gizi, tingkat pendidikan, perilaku kesehatan, cakupan pengobatan TB, mobilitas penduduk, dan kondisi lingkungan fisik belum dimasukkan ke dalam model.
  4. Analisis dilakukan pada tingkat agregat kabupaten/kota, sehingga belum mampu menangkap variasi karakteristik dan risiko TB pada tingkat wilayah yang lebih rinci, seperti kecamatan atau desa/kelurahan. Kondisi ini berpotensi menimbulkan ecological fallacy, yaitu kesimpulan pada tingkat kelompok yang belum tentu berlaku pada tingkat individu.
  5. Model SLX hanya mempertimbangkan efek spasial pada variabel penjelas (X) dan belum mengakomodasi kemungkinan ketergantungan spasial yang lebih kompleks pada variabel respon maupun galat model. Oleh karena itu, model spasial lain seperti SAR, SEM, SDM, atau pendekatan Bayesian spasial dapat dipertimbangkan pada penelitian selanjutnya.
  6. Tidak ditemukannya pengaruh yang signifikan secara parsial pada seluruh variabel penelitian mengindikasikan bahwa masih terdapat faktor-faktor lain yang belum terakomodasi dalam model dan berpotensi memengaruhi variasi Incidence Rate TB di Jawa Barat.

5. Kesimpulan dan Saran

5.1 Kesimpulan

Berdasarkan hasil analisis spasial terhadap Incidence Rate (IR) Tuberkulosis (TB) di Provinsi Jawa Barat tahun 2025 menggunakan pendekatan Spatial Lag of X (SLX), diperoleh beberapa kesimpulan sebagai berikut:

  1. Distribusi Incidence Rate TB di Jawa Barat menunjukkan variasi antar kabupaten/kota. Wilayah dengan IR tinggi cenderung terkonsentrasi pada beberapa wilayah perkotaan yang memiliki karakteristik kepadatan dan aktivitas penduduk yang tinggi.
  2. Hasil uji Moran’s I menunjukkan bahwa sebagian besar variabel penjelas, yaitu penduduk miskin, kepadatan penduduk, akses air minum layak, sanitasi layak, dan jumlah kasus HIV memiliki pola pengelompokan spasial (spatial clustering) yang signifikan, sehingga pendekatan spasial relevan digunakan dalam analisis.
  3. Model OLS menunjukkan bahwa variabel-variabel penelitian secara simultan mampu menjelaskan variasi Incidence Rate TB, namun residual model masih mengandung autokorelasi spasial sehingga belum mampu menangkap keterkaitan antarwilayah secara memadai.
  4. Model SLX memberikan performa yang lebih baik dibandingkan model OLS dengan nilai koefisien determinasi (R²) yang lebih tinggi dan nilai RMSE yang lebih rendah. Hal ini menunjukkan bahwa informasi spasial antarwilayah memberikan tambahan kemampuan dalam menjelaskan variasi kejadian TB.
  5. Meskipun demikian, seluruh variabel lokal maupun variabel lag spasial tidak menunjukkan pengaruh yang signifikan secara parsial terhadap Incidence Rate TB. Hasil analisis direct effect dan indirect effect juga tidak menunjukkan adanya efek limpahan spasial (spillover effect) yang signifikan pada taraf signifikansi 5%. Secara keseluruhan, penelitian ini menunjukkan bahwa pendekatan spasial penting dalam pemodelan kejadian TB di Jawa Barat, namun variabel yang digunakan dalam penelitian ini belum mampu menjelaskan faktor-faktor yang memengaruhi Incidence Rate TB secara parsial.

5.2 Saran

Berdasarkan hasil penelitian yang diperoleh, beberapa saran yang dapat diberikan adalah sebagai berikut:

  1. Pemerintah daerah dan instansi kesehatan perlu tetap memprioritaskan program pengendalian TB pada wilayah dengan Incidence Rate tinggi melalui peningkatan deteksi dini, pengobatan, dan pemantauan kasus secara berkelanjutan.
  2. Penelitian selanjutnya disarankan menambahkan variabel yang lebih spesifik terkait faktor risiko TB, seperti kondisi hunian, kepadatan rumah tangga, tingkat pendidikan, status gizi, mobilitas penduduk, cakupan pengobatan TB, dan faktor lingkungan lainnya.
  3. Penggunaan data spasio-temporal atau data panel spasial perlu dipertimbangkan agar dapat menangkap dinamika penyebaran TB dari waktu ke waktu dan mengidentifikasi perubahan pola spasial secara lebih akurat.
  4. Model spasial yang lebih kompleks seperti Spatial Durbin Model (SDM), Spatial Error Model (SEM), Spatial Autoregressive Model (SAR), atau pendekatan Bayesian spasial seperti BYM dan BYM2 dapat digunakan untuk memperoleh pemahaman yang lebih komprehensif mengenai faktor-faktor yang memengaruhi kejadian TB.
  5. Analisis pada tingkat wilayah yang lebih rinci, seperti kecamatan atau desa/kelurahan, perlu dilakukan untuk mengurangi heterogenitas dalam satu wilayah administrasi dan menghasilkan informasi yang lebih spesifik bagi perencanaan program kesehatan.

Daftar Pustaka

  1. Alma, L. R., Olivionita, V., & Wardani, H. E. (2024). An ecological study of determinants of the incidence of tuberculosis in Malang Raya area. Preventia: The Indonesian Journal of Public Health, 9(1), 112-120. https://doi.org/10.17977/um044v9i12024p112-120

  2. Anselin, L. (1995). Local indicators of spatial association LISA. Geographical Analysis, 27(2), 93-115. https://doi.org/10.1111/j.1538-4632.1995.tb00338.x

  3. Atillah, C. N., Wulandari, R. A., & Kurniasari, F. (2023). Environmental factors and pulmonary tuberculosis cases in Bandung City. Jurnal Ilmiah Kesehatan Masyarakat, 15(4), 167-175. https://doi.org/10.52022/jikm.v15i4.566

  4. Bivand, R. S., Pebesma, E., & Gómez-Rubio, V. (2013). Applied spatial data analysis with R (2nd ed.). Springer.

  5. Cliff, A. D., & Ord, J. K. (1981). Spatial processes: Models and applications. Pion.

  6. Dinas Kesehatan Provinsi Jawa Barat. (2025). Jumlah kasus penyakit tuberkulosis berdasarkan kabupaten/kota di Jawa Barat. Open Data Jabar. https://opendata.jabarprov.go.id/id/dataset/jumlah-kasus-penyakit-tuberkulosis-berdasarkan-kabupatenkota-di-jawa-barat

  7. Dzakiyah, R. N., Karima, U. Q., Simanjorang, C., & Apriningsih. (2023). Determinan kejadian tuberkulosis paru pada usia dewasa. Jurnal Penelitian Kesehatan Suara Forikes.

  8. Farkhan, A., Pakasi, T. T., Sulistyo, S., Salsabila, A., Maude, R. J., & Rotejanaprasert, C. (2026). Spatiotemporal epidemiology and associated risk factors of tuberculosis incidence and mortality in Indonesia 2017-2022: A nationwide space-time hierarchical analysis. Population Health Metrics, 24, 12. https://doi.org/10.1186/s12963-026-00458-5

  9. Handayani, S., Musfirah, M., & Apriana, A. (2024). Determinants of pulmonary tuberculosis. Jurnal Ilmiah Kesehatan, 6(1), 45-54. https://doi.org/10.36590/jika.v6i1.374

  10. Haq, A., Achmadi, U. F., & Susanna, D. (2020). Analisis spasial TB paru. Jurnal Ekologi Kesehatan, 18(3). https://doi.org/10.22435/jek.v3i18.80

  11. Inggarputri, Y. R., Trihandini, I., Novitasari, P. D., & Makful, M. R. (2023). Spatial analysis of tuberculosis cases diffusion based on population density in Bekasi Regency in 2017-2021. Berita Kedokteran Masyarakat, 39(1), e6462. https://doi.org/10.22146/bkm.v39i01.6462

  12. Kementerian Kesehatan Republik Indonesia. (2025). Profil kesehatan Indonesia 2024.

  13. Kristianingrum, E. N. (2024). Kepadatan penduduk dan TB paru (Skripsi). Universitas Duta Bangsa.

  14. Laoli, H. A., Nazira, A., Faleria, I., Tarigan, B., & Girsang, V. I. (2024). Cases of pulmonary tuberculosis and population density. MIHHICo Conference Proceedings.

  15. Madao, E. P., Hermawati, E., Putri, N. A. A., & Makful, M. R. (2024). Evaluating spatial analysis of tuberculosis prevalence to identify priority districts or municipalities that need policy attention in West Java. Berita Kedokteran Masyarakat, 40(4). https://doi.org/10.22146/bkm.v40i04.12160

  16. Montgomery, D. C., Peck, E. A., & Vining, G. G. (2021). Introduction to linear regression analysis (6th ed.). Wiley.

  17. Nurdin, A., et al. (2025). Analisis faktor risiko TB. Jurnal Kesehatan Yamasi Makassar, 9(2), 1-9.

  18. Putra, I. G. N. E., Rahmaniati, M., Eryando, T., & Sipahutar, T. (2022). Modeling the prevalence of tuberculosis in Java, Indonesia: An ecological study using geographically weighted regression. Journal of Population and Social Studies. https://so03.tci-thaijo.org/index.php/jpss/article/view/257477

  19. Rahmawati, Y., Jamil, I. R., Hidayah, I., Kusumawardani, D., & Wibowo, W. (2026). Spatial econometric analysis of the impact of health infrastructure on TBC patients: Study case in Indonesia provinces level. International Review for Spatial Planning and Sustainable Development, 14(1), 96-117. https://doi.org/10.14246/irspsd.14.1_96

  20. Rosady, D. S., Zulfa, N. R. A., & Pratama, S. B. (2024). Spatial analysis TB Bandung. Global Medical & Health Communication, 12(1). https://doi.org/10.29313/gmhc.v12i1.12410

  21. Sasmita, S., Junaid, J., & Ainurafiq, A. (2017). Pola spasial TB paru. Jurnal Ilmiah Mahasiswa Kesehatan Masyarakat.

  22. Shah, S. A., Velarde, R., Amini, H., et al. (2018). Methods used in the spatial analysis of tuberculosis epidemiology: A systematic review. BMC Public Health. https://doi.org/10.1186/s12889-018-5558-4

  23. Sihaloho, E. D., et al. (2021). Pengaruh kemiskinan terhadap TB. Journal of Applied Business and Economic, 7(3). https://doi.org/10.30998/jabe.v7i3.6470

  24. Suryani, F. T., & Ibad, M. (2022). Faktor kepadatan dan sanitasi terhadap TB. Jurnal Sosial Sains, 2(10). https://doi.org/10.36418/jurnalsosains.v2i10.468

  25. Turner, R. D., et al. (2017). Tuberculosis infectiousness and host susceptibility. Journal of Infectious Diseases, 216. https://doi.org/10.1093/infdis/jix361

  26. World Health Organization. (2025). Global tuberculosis report 2025. WHO.


Link Data dan SHP : https://drive.google.com/drive/folders/1eAKXGwwBw7KiSh8qYoQjdU5bXe8nixBg?usp=sharing

Link Rshiny : https://sriyuliana.shinyapps.io/DASHBOARD_ANALISIS_SPASIAL/

LS0tDQp0aXRsZTogIkFuYWxpc2lzIFNwYXNpYWwgRmFrdG9yLUZha3RvciB5YW5nIE1lbWVuZ2FydWhpIEluY2lkZW5jZSBSYXRlIFR1YmVya3Vsb3NpcyBkaSBQcm92aW5zaSBKYXdhIEJhcmF0IFRhaHVuIDIwMjUgTWVuZ2d1bmFrYW4gTW9kZWwgU3BhdGlhbCBMYWcgb2YgWCAoU0xYKSINCg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19mbG9hdDogdHJ1ZQ0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCmNzczogc3R5bGUuY3NzDQotLS0NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmBgYA0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShzZikNCmxpYnJhcnkoc3BkZXApDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkodG1hcCkNCmxpYnJhcnkoSU5MQSkNCmxpYnJhcnkoY2FyKQ0KbGlicmFyeShsbXRlc3QpDQp0bWFwX21vZGUoInBsb3QiKQ0KYGBgDQoNCg0KLS0tDQoNCioqSWRlbnRpdGFzIFBlbnVsaXM6KioNCg0KfCBLZXRlcmFuZ2FuIHwgSW5mb3JtYXNpIHwNCnwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS18DQp8IE5hbWEgfCBTcmkgWXVsaWFuYSB8DQp8IE5QTSB8IDE0MDcyMDI1MDAwMyB8DQp8IFByb2dyYW0gU3R1ZGkgfCBNYWdpc3RlciBTdGF0aXN0aWthIFRlcmFwYW4gfA0KfCBNYXRhIEt1bGlhaCB8IEFuYWxpc2lzIFNwYXNpYWwgfA0KDQotLS0NCg0KLS0tDQoNCjxkaXYgYWxpZ249ImNlbnRlciI+DQojICoqQUJTVFJBSyoqDQo8L2Rpdj4NCg0KVHViZXJrdWxvc2lzIChUQikgbWFzaWggbWVuamFkaSBzYWxhaCBzYXR1IG1hc2FsYWgga2VzZWhhdGFuIG1hc3lhcmFrYXQgZGkgUHJvdmluc2kgSmF3YSBCYXJhdCBkZW5nYW4ganVtbGFoIGthc3VzIHlhbmcgcmVsYXRpZiB0aW5nZ2kuIFBlbmVsaXRpYW4gaW5pIGJlcnR1anVhbiBtZW5nYW5hbGlzaXMgZmFrdG9yLWZha3RvciB5YW5nIG1lbWVuZ2FydWhpIEluY2lkZW5jZSBSYXRlIChJUikgVEIgdGFodW4gMjAyNSBtZW5nZ3VuYWthbiBwZW5kZWthdGFuIHNwYXNpYWwgU3BhdGlhbCBMYWcgb2YgWCAoU0xYKS4gRGF0YSB5YW5nIGRpZ3VuYWthbiBtZW5jYWt1cCAyNyBrYWJ1cGF0ZW4va290YSBkaSBKYXdhIEJhcmF0IGRlbmdhbiB2YXJpYWJlbCBqdW1sYWggZmFzaWxpdGFzIGtlc2VoYXRhbiwgcGVyc2VudGFzZSBwZW5kdWR1ayBtaXNraW4sIGtlcGFkYXRhbiBwZW5kdWR1aywgYWtzZXMgYWlyIG1pbnVtIGxheWFrLCBha3NlcyBzYW5pdGFzaSBsYXlhaywgZGFuIGp1bWxhaCBrYXN1cyBISVYuIEFuYWxpc2lzIGRpbGFrdWthbiBtZWxhbHVpIHN0YXRpc3RpayBkZXNrcmlwdGlmLCBwZW1ldGFhbiBzcGFzaWFsLCB1amkgYXV0b2tvcmVsYXNpIHNwYXNpYWwgTW9yYW7igJlzIEksIHJlZ3Jlc2kgT0xTLCBkYW4gbW9kZWwgU0xYLiBIYXNpbCBtZW51bmp1a2thbiBiYWh3YSBtb2RlbCBTTFggbWVtYmVyaWthbiBraW5lcmphIHlhbmcgbGViaWggYmFpayBkaWJhbmRpbmdrYW4gbW9kZWwgT0xTIGRlbmdhbiBuaWxhaSBSwrIgc2ViZXNhciAwLDY5MTMgZGFuIFJNU0Ugc2ViZXNhciAxMjMsNDkuIFRlbXVhbiBpbmkgbWVuZ2luZGlrYXNpa2FuIGJhaHdhIGZha3Rvci1mYWt0b3IgeWFuZyBtZW1lbmdhcnVoaSBrZWphZGlhbiBUQiB0aWRhayBoYW55YSBiZXJhc2FsIGRhcmkga2FyYWt0ZXJpc3RpayB3aWxheWFoIGl0dSBzZW5kaXJpLCB0ZXRhcGkganVnYSBkaXBlbmdhcnVoaSBvbGVoIGtvbmRpc2kgd2lsYXlhaCBzZWtpdGFybnlhLiBPbGVoIGthcmVuYSBpdHUsIHBlbmRla2F0YW4gc3Bhc2lhbCBwZXJsdSBkaXBlcnRpbWJhbmdrYW4gZGFsYW0gcGVyZW5jYW5hYW4gcHJvZ3JhbSBwZW5nZW5kYWxpYW4gVEIgZGkgSmF3YSBCYXJhdC4NCg0KKipLYXRhIEt1bmNpOioqIFR1YmVya3Vsb3NpcywgSW5jaWRlbmNlIFJhdGUsIEFuYWxpc2lzIFNwYXNpYWwsIE1vcmFuJ3MgSSwgU3BhdGlhbCBMYWcgb2YgWCAoU0xYKSwgSmF3YSBCYXJhdC4NCg0KDQotLS0NCg0KDQojIDEuIFBlbmRhaHVsdWFuDQoNCiMjIDEuMSBMYXRhciBCZWxha2FuZyANCg0KVHViZXJrdWxvc2lzIChUQikgbWVydXBha2FuIHNhbGFoIHNhdHUgcGVueWFraXQgbWVudWxhciB5YW5nIG1hc2loIG1lbmphZGkgcGVybWFzYWxhaGFuIGtlc2VoYXRhbiBtYXN5YXJha2F0IGRpIGR1bmlhLiBQZW55YWtpdCB5YW5nIGRpc2ViYWJrYW4gb2xlaCBNeWNvYmFjdGVyaXVtIHR1YmVyY3Vsb3NpcyBpbmkgbWVueWViYXIgbWVsYWx1aSB1ZGFyYSBkYW4gbWVuamFkaSBzYWxhaCBzYXR1IHBlbnllYmFiIHV0YW1hIGtlbWF0aWFuIGFraWJhdCBwZW55YWtpdCBpbmZla3NpIChXSE8sIDIwMjUpLiBVcGF5YSBwZW5nZW5kYWxpYW4gVEIgbWVydXBha2FuIHNhbGFoIHNhdHUgdGFyZ2V0IGRhbGFtIFN1c3RhaW5hYmxlIERldmVsb3BtZW50IEdvYWxzIChTREdzKSwga2h1c3VzbnlhIHBhZGEgVHVqdWFuIGtlLTMgeWFpdHUgS2VoaWR1cGFuIFNlaGF0IGRhbiBTZWphaHRlcmEsIGRlbmdhbiB0YXJnZXQgMy4zIHlhbmcgbWVuYXJnZXRrYW4gcGVuZ2FraGlyYW4gZXBpZGVtaSBUQiBwYWRhIHRhaHVuIDIwMzAuIEhhbCBpbmkgbWVudW5qdWtrYW4gYmFod2EgcGVuYW5nZ3VsYW5nYW4gVEIgYnVrYW4gaGFueWEgcHJpb3JpdGFzIG5hc2lvbmFsLCB0ZXRhcGkganVnYSBiYWdpYW4gZGFyaSBrb21pdG1lbiBnbG9iYWwgeWFuZyBoYXJ1cyBkaWR1a3VuZyBtZWxhbHVpIHVwYXlhIGJlcmJhc2lzIGRhdGEgZGFuIHdpbGF5YWguIEluZG9uZXNpYSB0ZXJtYXN1ayBuZWdhcmEgZGVuZ2FuIGJlYmFuIFRCIHRlcnRpbmdnaSBkaSBkdW5pYSBkYW4gbWVueXVtYmFuZyBzZWtpdGFyIDEwJSBkYXJpIHRvdGFsIGthc3VzIFRCIGdsb2JhbCAoV0hPLCAyMDI1KS4NCg0KRGkgSW5kb25lc2lhLCBUdWJlcmt1bG9zaXMgKFRCKSBtYXNpaCBtZW5qYWRpIHNhbGFoIHNhdHUgbWFzYWxhaCBrZXNlaGF0YW4gbWFzeWFyYWthdCB5YW5nIHV0YW1hLiBKdW1sYWgga2FzdXMgVEIgeWFuZyBkaWxhcG9ya2FuIG1lbnVuanVra2FuIHRyZW4gcGVuaW5na2F0YW4gZGFyaSB0YWh1biBrZSB0YWh1bi4gQmVyZGFzYXJrYW4gUHJvZmlsIEtlc2VoYXRhbiBJbmRvbmVzaWEgMjAyNCwgdGVyZGFwYXQgMjI5LjY4MyBrYXN1cyBUQiB5YW5nIGRpbGFwb3JrYW4gcGFkYSB0YWh1biAyMDI0LCBtZW5pbmdrYXQgZGliYW5kaW5na2FuIHRhaHVuIHNlYmVsdW1ueWEuIEphd2EgQmFyYXQgbWVydXBha2FuIHByb3ZpbnNpIGRlbmdhbiBiZWJhbiBUQiB0ZXJ0aW5nZ2kgZGkgSW5kb25lc2lhLCBkZW5nYW4ganVtbGFoIGthc3VzIG1lbmNhcGFpIDIyNS4zODkga2FzdXMgcGFkYSB0YWh1biAyMDI1LiBUaW5nZ2lueWEganVtbGFoIGthc3VzIHRlcnNlYnV0IG1lbnVuanVra2FuIGJhaHdhIFRCIG1hc2loIG1lbmphZGkgdGFudGFuZ2FuIHNlcml1cyBkYWxhbSB1cGF5YSBwZW5nZW5kYWxpYW4gcGVueWFraXQgbWVudWxhciBkaSBKYXdhIEJhcmF0IGRhbiBtZW1lcmx1a2FuIHBlcmhhdGlhbiBraHVzdXMgZGFsYW0gcGVyZW5jYW5hYW4gcHJvZ3JhbSBrZXNlaGF0YW4gYmVyYmFzaXMgd2lsYXlhaCAoS2VtZW50ZXJpYW4gS2VzZWhhdGFuIFJlcHVibGlrIEluZG9uZXNpYSwgMjAyNTsgRGluYXMgS2VzZWhhdGFuIFByb3ZpbnNpIEphd2EgQmFyYXQsIDIwMjUpLg0KDQpUaW5nZ2lueWEga2FzdXMgVEIgZGlwZW5nYXJ1aGkgb2xlaCBiZXJiYWdhaSBmYWt0b3Igc29zaWFsLCBla29ub21pLCBkYW4gbGluZ2t1bmdhbi4gQmViZXJhcGEgcGVuZWxpdGlhbiBtZW51bmp1a2thbiBiYWh3YSBrZXBhZGF0YW4gcGVuZHVkdWssIHRpbmdrYXQga2VtaXNraW5hbiwga3VhbGl0YXMgc2FuaXRhc2ksIGFrc2VzIGFpciBtaW51bSBsYXlhaywga2V0ZXJzZWRpYWFuIGZhc2lsaXRhcyBrZXNlaGF0YW4sIHNlcnRhIGthc3VzIEhJViBiZXJodWJ1bmdhbiBkZW5nYW4ga2VqYWRpYW4gVEIgKFNpaGFsb2hvIGV0IGFsLiwgMjAyMTsgTGFvbGkgZXQgYWwuLCAyMDI0OyBIYW5kYXlhbmkgZXQgYWwuLCAyMDI0KS4gU2VsYWluIGl0dSwga2FyYWt0ZXJpc3RpayB3aWxheWFoIHlhbmcgYmVyYmVkYSBtZW55ZWJhYmthbiBkaXN0cmlidXNpIGthc3VzIFRCIHRpZGFrIG1lcmF0YSBhbnRhciBkYWVyYWguDQoNClBlcmJlZGFhbiBkaXN0cmlidXNpIGthc3VzIGFudGFyd2lsYXlhaCBtZW51bmp1a2thbiBwZW50aW5nbnlhIHBlbmRla2F0YW4gc3Bhc2lhbCBkYWxhbSBhbmFsaXNpcyBlcGlkZW1pb2xvZ2kuIEFuYWxpc2lzIHNwYXNpYWwgbWVtdW5na2lua2FuIGlkZW50aWZpa2FzaSBwb2xhIHBlcnNlYmFyYW4gcGVueWFraXQgYmVyZGFzYXJrYW4gbG9rYXNpIGdlb2dyYWZpcyBzZWhpbmdnYSBkYXBhdCBtZW1iYW50dSBtZW5lbnR1a2FuIHdpbGF5YWggcHJpb3JpdGFzIHBlbmdlbmRhbGlhbiBUQi4gRGFsYW0gcGVuZWxpdGlhbiBpbmksIGFuYWxpc2lzIGRpbGFrdWthbiBtZWxhbHVpIHBlbWV0YWFuIEluY2lkZW5jZSBSYXRlIChJUiksIHBlbW9kZWxhbiBmYWt0b3ItZmFrdG9yIHlhbmcgYmVyaHVidW5nYW4gZGVuZ2FuIHRpbmdrYXQgcGVudWxhcmFuIFRCIG1lbmdndW5ha2FuIHJlZ3Jlc2kgT3JkaW5hcnkgTGVhc3QgU3F1YXJlcyAoT0xTKSwgc2VydGEgcGVuZ3VqaWFuIGVmZWsga2V0ZXJnYW50dW5nYW4gc3Bhc2lhbC4NCg0KTW9kZWwgT0xTIGtvbnZlbnNpb25hbCBtZW5nYXN1bXNpa2FuIGJhaHdhIHBlbmdhbWF0YW4gZGkgc3VhdHUgd2lsYXlhaCBiZXJzaWZhdCBpbmRlcGVuZGVuIGRhbiB0aWRhayBkaXBlbmdhcnVoaSBvbGVoIHdpbGF5YWggc2VraXRhcm55YS4gTmFtdW4sIHBlbnlha2l0IG1lbnVsYXIgc2VwZXJ0aSBUQiBtZW1pbGlraSBrYXJha3RlcmlzdGlrIGJhd2FhbiBiZXJ1cGEgZWZlayBsaW1wYWhhbiAoc3BpbGxvdmVyIGVmZmVjdCkgYWtpYmF0IG1vYmlsaXRhcyBwZW5kdWR1ayBsaW50YXMgYmF0YXMgYWRtaW5pc3RyYXRpZi4gT2xlaCBrYXJlbmEgaXR1LCBqaWthIHRlcmRhcGF0IGtldGVyZ2FudHVuZ2FuIHNwYXNpYWwgcGFkYSB2YXJpYWJlbCBwZW5qZWxhcywgbW9kZWwgU3BhdGlhbCBMYWcgWCAoU0xYKSBkaXRlcmFwa2FuIHVudHVrIG1lbmdoYXNpbGthbiBlc3RpbWFzaSB5YW5nIGxlYmloIGFrdXJhdCBtZWxhbHVpIHBlbWJvYm90YW4gbWF0cmlrcyBrZXRldGFuZ2dhYW4gKHNwYXRpYWwgd2VpZ2h0IG1hdHJpeCkuIEhhc2lsIHBlbmVsaXRpYW4gaW5pIGRpaGFyYXBrYW4gZGFwYXQgbWVtYmVyaWthbiBnYW1iYXJhbiBtZW5nZW5haSBmYWt0b3IgbG9rYWwgZGFuIGZha3RvciBsaW5na3VuZ2FuIHRldGFuZ2dhIHlhbmcgYmVyaHVidW5nYW4gZGVuZ2FuIGtlamFkaWFuIFRCIGRpIFByb3ZpbnNpIEphd2EgQmFyYXQgc2ViYWdhaSBkYXNhciBwZXJlbmNhbmFhbiBwcm9ncmFtIHBlbmdlbmRhbGlhbiBiZXJiYXNpcyB3aWxheWFoLg0KDQojIyAxLjIgUnVtdXNhbiBNYXNhbGFoDQoNCjEpIEJhZ2FpbWFuYSBrYXJha3RlcmlzdGlrIGRhbiBkaXN0cmlidXNpIHNwYXNpYWwga2FzdXMgVEIgZGkgSmF3YSBCYXJhdD8gDQoNCjIpIEJhZ2FpbWFuYSBwb2xhIHBlcnNlYmFyYW4gSW5jaWRlbmNlIFJhdGUgVEI/IA0KDQozKSBCYWdhaW1hbmEgcGVuZ2FydWggZmFrdG9yIHNvc2lhbC1la29ub21pIGRhbiBrZXNlaGF0YW4gdGVyaGFkYXAgVEIgbWVuZ2d1bmFrYW4gT0xTPyANCg0KNCkgQXBha2FoIHRlcmRhcGF0IGVmZWsgc3Bhc2lhbCB5YW5nIGxlYmloIGJhaWsgZGlqZWxhc2thbiBkZW5nYW4gbW9kZWwgU0xYPw0KDQoNCg0KIyMgMS4zIFR1anVhbiBQZW5lbGl0aWFuDQoNCjEpIE1lbmRlc2tyaXBzaWthbiBrYXJha3RlcmlzdGlrIGthc3VzIFRCIGRpIEphd2EgQmFyYXQuIA0KMikgTWVtZXRha2FuIGRpc3RyaWJ1c2kgSW5jaWRlbmNlIFJhdGUgVEIuIA0KMykgTWVuZ2FuYWxpc2lzIGZha3RvciB5YW5nIG1lbWVuZ2FydWhpIFRCIG1lbmdndW5ha2FuIE9MUy4gDQo0KSBNZW5ndWppIGRhbiBtZW1iYW5kaW5na2FuIG1vZGVsIE9MUyBkYW4gU0xYLg0KDQojIDIuIERhdGEgZGFuIE1ldG9kZSANCiMjIDIuMSBEYXRhIFBlbmVsaXRpYW4NCg0KRGF0YSB5YW5nIGRpZ3VuYWthbiBtZXJ1cGFrYW4gZGF0YSBzZWt1bmRlciB5YW5nIG1lbmNha3VwIDI3IGthYnVwYXRlbi9rb3RhIGRpIFByb3ZpbnNpIEphd2EgQmFyYXQgcGFkYSB0YWh1biAyMDI1LiBEYXRhIGF0cmlidXQgZGlwZXJvbGVoIGRhcmkgQmFkYW4gUHVzYXQgU3RhdGlzdGlrIChCUFMpIFByb3ZpbnNpIEphd2EgQmFyYXQgc2VydGEgUG9ydGFsIE9wZW4gRGF0YSBKYWJhciwgc2VkYW5na2FuIGRhdGEgc3Bhc2lhbCBiZXJ1cGEgYmF0YXMgYWRtaW5pc3RyYXNpIGthYnVwYXRlbi9rb3RhIGRhbGFtIGZvcm1hdCAqc2hhcGVmaWxlKiAoU0hQKSBkaXBlcm9sZWggZGFyaSBQb3J0YWwgT3BlbiBEYXRhIEphYmFyLiBEYXRhIHNwYXNpYWwgdGVyc2VidXQgZGlndW5ha2FuIHVudHVrIG1lbWJhbmd1biBtYXRyaWtzIHBlbWJvYm90IHNwYXNpYWwgZGFuIG1lbXZpc3VhbGlzYXNpa2FuIHNlYmFyYW4ga2FzdXMgVHViZXJrdWxvc2lzIChUQikgYW50YXJ3aWxheWFoLiBWYXJpYWJlbCBwZW5lbGl0aWFuIHRlcmRpcmkgYXRhcyBzYXR1IHZhcmlhYmVsIHJlc3BvbiB5YWl0dSBJUiBUdWJlcmt1bG9zaXMgKFRCKSwgZW5hbSB2YXJpYWJlbCBwZW5qZWxhcyB5YW5nIG1lbmNlcm1pbmthbiBmYWt0b3Igc29zaWFsLCBla29ub21pLCBkYW4ga2VzZWhhdGFuLCBzZXJ0YSBqdW1sYWggcGVuZHVkdWsgeWFuZyBkaWd1bmFrYW4gc2ViYWdhaSBkYXNhciBwZXJoaXR1bmdhbiAqSW5jaWRlbmNlIFJhdGUqIChJUikuIERlZmluaXNpIG9wZXJhc2lvbmFsIHZhcmlhYmVsIHlhbmcgZGlndW5ha2FuIGRpc2FqaWthbiBwYWRhIFRhYmVsIDEuDQoNCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCnNldHdkKCJEOi9NQUdJU1RFUi9TRU1FU1RFUiAyIikNCg0KZGF0YSA8LSByZWFkX2V4Y2VsKA0KICAiZGF0YXNldCBUQi54bHN4IiwNCiAgc2hlZXQgPSAic3Bhc2lhbCINCikNCg0KZGF0YSA8LSBkYXRhICU+JQ0KICByZW5hbWUoDQogICAgcGVuZHVkdWtfbWlza2luID0gYHBlcnNlbnRhc2UgcGVuZHVkdWsgbWlza2luYCwNCiAgICBrZXBhZGF0YW4gPSBga2VwYWRhdGFuIHBlbmR1ZHVrYCwNCiAgICBhaXJfbWludW0gPSBgYWlyIG1pbnVtIGxheWFrYCwNCiAgICBzYW5pdGFzaSA9IGBzYW5pdGFzaSBsYXlha2AsDQogICAgaGl2ID0gYGp1bWxhaCBrYXN1cyBISVZgLA0KICAgIGp1bWxhaF9wZW5kdWR1ayA9IGBKdW1sYWggUGVuZHVkdWtgDQogICkgJT4lDQogIG11dGF0ZSgNCiAgICBUQiAgICAgICAgICAgICAgICA9IGFzLm51bWVyaWMoVEIpLA0KICAgIGZhc2tlcyAgICAgICAgICAgID0gYXMubnVtZXJpYyhmYXNrZXMpLA0KICAgIHBlbmR1ZHVrX21pc2tpbiAgID0gYXMubnVtZXJpYyhwZW5kdWR1a19taXNraW4pLA0KICAgIGtlcGFkYXRhbiAgICAgICAgID0gYXMubnVtZXJpYyhrZXBhZGF0YW4pLA0KICAgIGFpcl9taW51bSAgICAgICAgID0gYXMubnVtZXJpYyhhaXJfbWludW0pLA0KICAgIHNhbml0YXNpICAgICAgICAgID0gYXMubnVtZXJpYyhzYW5pdGFzaSksDQogICAgaGl2ICAgICAgICAgICAgICAgPSBhcy5udW1lcmljKGhpdiksDQogICAganVtbGFoX3BlbmR1ZHVrICAgPSBhcy5udW1lcmljKGp1bWxhaF9wZW5kdWR1ayksDQoNCmluY2lkZW5jZV9yYXRlX1RCID0NCiAgICAgIChUQiAvIGp1bWxhaF9wZW5kdWR1aykgKiAxMDAwMDANCiAgKQ0KDQpzZXR3ZCgiRDovQmF0YXMvQmF0YXMiKQ0KDQpqYWJhciA8LSBzdF9yZWFkKA0KICAiQmF0YXNfS2FidXBhdGVuX0phd2FfQmFyYXQuc2hwIiwNCiAgcXVpZXQgPSBUUlVFDQopDQoNCmRhdGEka2FiX2NsZWFuIDwtIGRhdGEkbmFtYV9rYWJ1cGF0ZW5fa290YSAlPiUNCiAgdG91cHBlcigpICU+JQ0KICBnc3ViKCJLQUJVUEFURU4gIiwgIiIsIC4pDQoNCmphYmFyJGthYl9jbGVhbiA8LSB0b3VwcGVyKGphYmFyJFdBRE1LSykNCg0KamFiYXJfdGIgPC0gbWVyZ2UoDQogIGphYmFyLA0KICBkYXRhLA0KICBieSA9ICJrYWJfY2xlYW4iDQopDQoNCmBgYA0KDQo8ZGl2IGFsaWduPSJjZW50ZXIiPg0KKipUYWJlbCAxLioqIFZhcmlhYmVsIFBlbmVsaXRpYW4NCjwvZGl2Pg0KDQoNCnwgVmFyaWFiZWwgICAgICAgICAgICAgICAgICAgICB8IERlZmluaXNpIE9wZXJhc2lvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGFzYXIgVGVvcmkgZGFuIEVtcGlyaXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFyYWggSHVidW5nYW4geWFuZyBEaWhhcmFwa2FuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8DQp8ICoqSVIgVHViZXJrdWxvc2lzIChZKSoqICAgICAgfCBKdW1sYWgga2FzdXMgVEIgcGVyIDEwMC4wMDAgcGVuZHVkdWsgcGFkYSBzZXRpYXAga2FidXBhdGVuL2tvdGEgZGkgSmF3YSBCYXJhdCB0YWh1biAyMDI1LiB8IERpZ3VuYWthbiBzZWJhZ2FpIHVrdXJhbiByaXNpa28ga2VqYWRpYW4gVEIgeWFuZyBtZW11bmdraW5rYW4gcGVyYmFuZGluZ2FuIGFudGFyd2lsYXlhaCBkZW5nYW4ganVtbGFoIHBlbmR1ZHVrIGJlcmJlZGEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgKipGYXNpbGl0YXMgS2VzZWhhdGEgKCRYXzEkKSoqIHwgSnVtbGFoIGZhc2lsaXRhcyBrZXNlaGF0YW4gcGFkYSBzZXRpYXAga2FidXBhdGVuL2tvdGEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBa3NlcyB0ZXJoYWRhcCBwZWxheWFuYW4ga2VzZWhhdGFuIGJlcnBlcmFuIHBlbnRpbmcgZGFsYW0gcGVuZW11YW4ga2FzdXMsIGRpYWdub3NpcywgZGFuIHBlbmdvYmF0YW4gVEIuIFJhaG1hd2F0aSBldCBhbC4gKDIwMjYpIG1lbnVuanVra2FuIGJhaHdhIGluZGlrYXRvciBpbmZyYXN0cnVrdHVyIGtlc2VoYXRhbiBiZXJ1cGEganVtbGFoIGRva3RlciBkYW4ga2VwZXNlcnRhYW4gSktOIGJlcmFzb3NpYXNpIGRlbmdhbiBrYXN1cyBUQiB5YW5nIHRlcmxhcG9ya2FuLiBEZW5nYW4gZGVtaWtpYW4sIGZhc2lsaXRhcyBrZXNlaGF0YW4gZGlwYW5kYW5nIHNlYmFnYWkgcHJva3NpIGthcGFzaXRhcyBzaXN0ZW0ga2VzZWhhdGFuIGRhbGFtIHBlbmdlbmRhbGlhbiBUQi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKipQb3NpdGlmICgrKSoqLiBTZW1ha2luIGJhbnlhayBmYXNpbGl0YXMga2VzZWhhdGFuLCBzZW1ha2luIHRpbmdnaSBrZW1hbXB1YW4gcGVuZW11YW4gZGFuIHBlbGFwb3JhbiBrYXN1cyBUQiAoKmNhc2UgZGV0ZWN0aW9uKikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICoqUGVuZHVkdWsgTWlza2luICgkWF8yJCkqKiAgICAgfCBQZXJzZW50YXNlIHBlbmR1ZHVrIG1pc2tpbiBwYWRhIHNldGlhcCBrYWJ1cGF0ZW4va290YS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEZha3RvciBzb3NpYWwgZWtvbm9taSBtZXJ1cGFrYW4gZGV0ZXJtaW5hbiB1dGFtYSBUQi4gU3R1ZGkgc3Bhc2lhbCBkaSBKYXdhIG1lbmVtdWthbiBiYWh3YSBrZW1pc2tpbmFuIHRlcm1hc3VrIGZha3RvciB5YW5nIGRpYW5hbGlzaXMgYmVyc2FtYSBwcmV2YWxlbnNpIFRCLiBTZWxhaW4gaXR1LCBhbmFsaXNpcyBuYXNpb25hbCBJbmRvbmVzaWEgbWVudW5qdWtrYW4gYmFod2EgZmFrdG9yIHNvc2lhbCBla29ub21pIGJlcmFzb3NpYXNpIGRlbmdhbiB2YXJpYXNpIHNwYXNpYWwga2VqYWRpYW4gVEIuIE9sZWgga2FyZW5hIGl0dSwgd2lsYXlhaCBkZW5nYW4gcHJvcG9yc2kgcGVuZHVkdWsgbWlza2luIHlhbmcgbGViaWggdGluZ2dpIGNlbmRlcnVuZyBtZW1pbGlraSByaXNpa28gVEIgeWFuZyBsZWJpaCBiZXNhci4gfCAqKlBvc2l0aWYgKCspKiouIFNlbWFraW4gdGluZ2dpIHByb3BvcnNpIHBlbmR1ZHVrIG1pc2tpbiwgc2VtYWtpbiB0aW5nZ2kgcmlzaWtvIGtlamFkaWFuIFRCIGFraWJhdCBrZXRlcmJhdGFzYW4gYWtzZXMga2VzZWhhdGFuLCBnaXppLCBkYW4ga29uZGlzaSBodW5pYW4geWFuZyBrdXJhbmcgbGF5YWsuIHwNCnwgKipLZXBhZGF0YW4gUGVuZHVkdWsgKCRYXzMkKSoqICB8IEp1bWxhaCBwZW5kdWR1ayBwZXIga23CsiBwYWRhIHNldGlhcCBrYWJ1cGF0ZW4va290YS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFB1dHJhIGV0IGFsLiAoMjAyMikgbWVuZW11a2FuIGJhaHdhIGtlcGFkYXRhbiBydW1haCB0YW5nZ2EgYmVyaHVidW5nYW4gZGVuZ2FuIHByZXZhbGVuc2kgVEIgZGkgUHVsYXUgSmF3YS4gUmFobWF3YXRpIGV0IGFsLiAoMjAyNikganVnYSBtZW51bmp1a2thbiBiYWh3YSBrZXBhZGF0YW4gcGVuZHVkdWsgbWVtaWxpa2kgcGVuZ2FydWggcG9zaXRpZiB0ZXJoYWRhcCBrYXN1cyBUQiBkYW4gbWVuZ2hhc2lsa2FuIGVmZWsgbGltcGFoYW4gc3Bhc2lhbCAoKnNwYXRpYWwgc3BpbGxvdmVyKikuIFBlbmVsaXRpYW4gZGkgS2FidXBhdGVuIEJla2FzaSBqdWdhIG1lbnVuanVra2FuIGFkYW55YSBodWJ1bmdhbiBzcGFzaWFsIGFudGFyYSBrZXBhZGF0YW4gcGVuZHVkdWsgZGFuIHBlcnNlYmFyYW4ga2FzdXMgVEIuICAgICAgfCAqKlBvc2l0aWYgKCspKiouIFNlbWFraW4gcGFkYXQgc3VhdHUgd2lsYXlhaCwgc2VtYWtpbiB0aW5nZ2kgcGVsdWFuZyBrb250YWsgYW50YXJpbmRpdmlkdSBzZWhpbmdnYSBtZW5pbmdrYXRrYW4gcmlzaWtvIHBlbnVsYXJhbiBUQi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgKipBaXIgTWludW0gTGF5YWsgKCRYXzQkKSoqICAgICB8IFBlcnNlbnRhc2UgcnVtYWggdGFuZ2dhIHlhbmcgbWVtaWxpa2kgYWtzZXMgdGVyaGFkYXAgYWlyIG1pbnVtIGxheWFrLiAgICAgICAgICAgICAgICAgICAgIHwgUmFobWF3YXRpIGV0IGFsLiAoMjAyNikgbWVuZ2d1bmFrYW4gYWtzZXMgYWlyIG1pbnVtIHNlYmFnYWkgc2FsYWggc2F0dSBpbmRpa2F0b3IgaW5mcmFzdHJ1a3R1ciBrZXNlaGF0YW4gZGFsYW0gbW9kZWwgc3Bhc2lhbCBUQi4gVmFyaWFiZWwgaW5pIGRpcGVydGltYmFuZ2thbiBzZWJhZ2FpIGluZGlrYXRvciBrdWFsaXRhcyBsaW5na3VuZ2FuIGRhbiBrZXNlaGF0YW4gbWFzeWFyYWthdCB5YW5nIGRhcGF0IG1lbWVuZ2FydWhpIHJpc2lrbyBwZW55YWtpdCBtZW51bGFyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICoqTmVnYXRpZiAoLSkqKi4gU2VtYWtpbiB0aW5nZ2kgYWtzZXMgYWlyIG1pbnVtIGxheWFrLCBzZW1ha2luIGJhaWsga29uZGlzaSBrZXNlaGF0YW4gbGluZ2t1bmdhbiBzZWhpbmdnYSByaXNpa28gVEIgY2VuZGVydW5nIG1lbnVydW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAqKlNhbml0YXNpIExheWFrICgkWF81JCkqKiAgICAgIHwgUGVyc2VudGFzZSBydW1haCB0YW5nZ2EgeWFuZyBtZW1pbGlraSBha3NlcyB0ZXJoYWRhcCBzYW5pdGFzaSBsYXlhay4gICAgICAgICAgICAgICAgICAgICAgfCBSYWhtYXdhdGkgZXQgYWwuICgyMDI2KSBtZW1hc3Vra2FuIHNhbml0YXNpIHNlYmFnYWkgaW5kaWthdG9yIGluZnJhc3RydWt0dXIga2VzZWhhdGFuLiBTZWxhaW4gaXR1LCBzdHVkaSBzcGFzaWFsIFRCIGRpIEphd2EgQmFyYXQgbWVuZ2d1bmFrYW4gaW5kaWthdG9yIHNhbml0YXNpIGxpbmdrdW5nYW4gc2ViYWdhaSBmYWt0b3IgeWFuZyBkaWFuYWxpc2lzIGJlcnNhbWEgZGlzdHJpYnVzaSBzcGFzaWFsIFRCLiBTYW5pdGFzaSB5YW5nIGJhaWsgZGFwYXQgbWVuZ3VyYW5naSBrZXJlbnRhbmFuIG1hc3lhcmFrYXQgdGVyaGFkYXAgYmVyYmFnYWkgcGVueWFraXQgaW5mZWtzaSBkYW4gbWVuY2VybWlua2FuIGt1YWxpdGFzIGxpbmdrdW5nYW4geWFuZyBsZWJpaCBzZWhhdC4gICAgICAgICAgICAgICAgICAgICAgICAgIHwgKipOZWdhdGlmICgtKSoqLiBTZW1ha2luIHRpbmdnaSBjYWt1cGFuIHNhbml0YXNpIGxheWFrLCBzZW1ha2luIHJlbmRhaCByaXNpa28ga2VqYWRpYW4gVEIga2FyZW5hIGt1YWxpdGFzIGxpbmdrdW5nYW4geWFuZyBsZWJpaCBiYWlrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICoqSElWICgkWF82JCkqKiAgICAgICAgICAgICAgICAgfCBKdW1sYWgga2FzdXMgSElWIHBhZGEgc2V0aWFwIGthYnVwYXRlbi9rb3RhLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhJViBtZXJ1cGFrYW4gZmFrdG9yIHJpc2lrbyB1dGFtYSBUQiBrYXJlbmEgbWVueWViYWJrYW4gcGVudXJ1bmFuIHNpc3RlbSBpbXVuIHNlaGluZ2dhIG1lbmluZ2thdGthbiByaXNpa28gYmVya2VtYmFuZ255YSBpbmZla3NpIFRCIGFrdGlmLiBLYWppYW4gc2lzdGVtYXRpcyBtZXRvZGUgYW5hbGlzaXMgc3Bhc2lhbCBUQiBtZW51bmp1a2thbiBiYWh3YSBiYW55YWsgcGVuZWxpdGlhbiB0ZWxhaCBtZW5nYW5hbGlzaXMgaHVidW5nYW4gc3Bhc2lhbCBhbnRhcmEgVEIgZGFuIEhJVi4gT2xlaCBrYXJlbmEgaXR1LCB3aWxheWFoIGRlbmdhbiBqdW1sYWgga2FzdXMgSElWIHlhbmcgbGViaWggdGluZ2dpIGJlcnBvdGVuc2kgbWVtaWxpa2kgYmViYW4gVEIgeWFuZyBsZWJpaCBiZXNhci4gICAgICAgICAgICAgICAgICAgfCAqKlBvc2l0aWYgKCspKiouIFNlbWFraW4gdGluZ2dpIGp1bWxhaCBrYXN1cyBISVYsIHNlbWFraW4gdGluZ2dpIHJpc2lrbyBUQiBrYXJlbmEgbWVuaW5na2F0bnlhIGtlcmVudGFuYW4gdGVyaGFkYXAgaW5mZWtzaSBvcG9ydHVuaXN0aWsuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgKipKdW1sYWggUGVuZHVkdWsqKiAgICAgICAgICB8IEp1bWxhaCBwZW5kdWR1ayBwYWRhIHNldGlhcCBrYWJ1cGF0ZW4va290YS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGlndW5ha2FuIHNlYmFnYWkgcG9wdWxhc2kgYmVyaXNpa28gKCpwb3B1bGF0aW9uIGF0IHJpc2sqKSBkYWxhbSBwZXJoaXR1bmdhbiBpbmNpZGVuY2UgcmF0ZSBUQi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRpZGFrIGRpYW5hbGlzaXMgc2ViYWdhaSB2YXJpYWJlbCBwcmVkaWt0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KDQoqKlN1bWJlciBEYXRhOioqIEJhZGFuIFB1c2F0IFN0YXRpc3RpayBQcm92aW5zaSBKYXdhIEJhcmF0IGRhbiBQb3J0YWwgT3BlbiBEYXRhIEphYmFyLg0KDQoNCiMjIDIuMiBNZXRvZGUgQW5hbGlzaXMNCiMjIyAyLjIuMSBBbmFsaXNpcyBEZXNrcmlwdGlmIGRhbiBJbmNpZGFuY2UgUmF0ZQ0KDQpBbmFsaXNpcyBkZXNrcmlwdGlmIGRpbGFrdWthbiB1bnR1ayBtZW1iZXJpa2FuIGdhbWJhcmFuIHVtdW0gbWVuZ2VuYWkgZGlzdHJpYnVzaSBrYXN1cyBUdWJlcmt1bG9zaXMgKFRCKSBwYWRhIHNldGlhcCBrYWJ1cGF0ZW4va290YSBkaSBQcm92aW5zaSBKYXdhIEJhcmF0IFRhaHVuIDIwMjUuIEluY2lkYW5jZSBSYXRlIHNlYmFnYWkgdWt1cmFuIGVwaWRlbWlvbG9naSBkaWd1bmFrYW4gdW50dWsgbWVuZ3VrdXIgZnJla3VlbnNpIGthc3VzIGJhcnUgVEIgeWFuZyB0ZXJqYWRpIGRhbGFtIHBvcHVsYXNpIGJlcmlzaWtvIHNlbGFtYSBwZXJpb2RlIHdha3R1IHRlcnRlbnR1IGRpIHdpbGF5YWggdGVydGVudHUuIEZvcm11bGEgcGVuZ2hpdHVuZ2FuIElSIGRhbGFtIHBlbmVsaXRpYW4gaW5pIGRlbmdhbiBwZXIgMTAwLjAwMCBwZW5kdWR1ayBkaXJ1bXVza2FuIHNlYmFnYWkgYmVyaWt1dDoNCg0KJCQNCklSX2kgPSBcZnJhY3tUQl9pfXtcdGV4dHtKdW1sYWggUGVuZHVkdWt9X2l9IFx0aW1lcyAxMDAuMDAwDQokJA0KDQoNCkRlbmdhbjoNCg0KJElSX2kkCQkJOiAganVtbGFoIGthc3VzIFRCIHBhZGEga2FidXBhdGVuL2tvdGEgaS4NCg0KJHtcdGV4dHtKdW1sYWggUGVuZHVkdWt9X2l9JAk6IGp1bWxhaCBwb3B1bGFzaSBkaSB3aWxheWFoIGkuDQoNCg0KIyMjIDIuMi4zIE1hdHJpayBQZW1ib2JvdCBTcGFzaWFsDQoNCmBgYHtyIH0NCm5iIDwtIHBvbHkybmIoDQogIGphYmFyX3RiLA0KICBxdWVlbiA9IFRSVUUNCikNCg0KbHcgPC0gbmIybGlzdHcoDQogIG5iLA0KICBzdHlsZSA9ICJXIiwNCiAgemVyby5wb2xpY3kgPSBUUlVFDQopDQpgYGANCg0KQmVyZGFzYXJrYW4ga3JpdGVyaWEgUXVlZW4gQ29udGlndWl0eSwgZHVhIHdpbGF5YWggc3Bhc2lhbCBpIGRhbiBqIGRpbnlhdGFrYW4gc2FsaW5nIGJlcnRldGFuZ2dhIGppa2Ega2VkdWFueWEgYmVyYmFnaSBiYXRhcyB3aWxheWFoIGJlcnNhbWEsIGJhaWsgYmVydXBhIHBlcnNpbmdndW5nYW4gZ2FyaXMgKGVkZ2UpIG1hdXB1biB0aXRpayBzdWR1dCAodmVydGV4KS4gU2VjYXJhIG1hdGVtYXRpcywgZWxlbWVuIG1hdHJpa3Mga2V0ZXRhbmdnYWFuIGF3YWwgJHdfe2lqfSQgZGlkZWZpbmlzaWthbiBzZWJhZ2FpIGJlcmlrdXQ6DQoNCiQkDQp3X3tpan0gPQ0KXGJlZ2lue2Nhc2VzfQ0KMSwgJiBcdGV4dHtqaWthIHdpbGF5YWggfSBpIFx0ZXh0eyBkYW4gfSBqIFx0ZXh0eyBiZXJiYWdpIGJhdGFzIGdhcmlzIGF0YXUgdGl0aWt9LCBcXA0KMCwgJiBcdGV4dHtqaWthIHdpbGF5YWggfSBpIFx0ZXh0eyBkYW4gfSBqIFx0ZXh0eyB0aWRhayBiZXJiYWdpIGJhdGFzIGxhbmdzdW5nIGF0YXUgfSBpPWouDQpcZW5ke2Nhc2VzfQ0KJCQNCkRpbWFuYSBlbGVtZW4gcGVtYm9ib3Qgc3Bhc2lhbCB0ZXJzdGFuZGFyZGlzYXNpIGJhcmlzICR3X3tpan0kIGRpaGl0dW5nIGRlbmdhbiBtZW1iYWdpIHNldGlhcCBlbGVtZW4gYmluZXIgZGVuZ2FuIHRvdGFsIGp1bWxhaCB0ZXRhbmdnYSBwYWRhIGJhcmlzIHRlcnNlYnV0LiBUcmFuc2Zvcm1hc2kgaW5pIG1lbmd1YmFoIGludGVycHJldGFzaSBlZmVrIHNwYXNpYWwgbWVuamFkaSBuaWxhaSByYXRhLXJhdGEgc3Bhc2lhbCAoc3BhdGlhbCBsYWcpIGRhcmkga2FyYWt0ZXJpc3RpayB3aWxheWFoLXdpbGF5YWggdGV0YW5nZ2FueWE6DQoNCiQkDQpXX3tpan0gPSBcZnJhY3t3X3tpan19e1xzdW1fe2o9MX1ee259IHdfe2lqfX0NCiQkDQoJDQojIyMgMi4yLjMgTW9kZWwgT0xTDQpNb2RlbCBPTFMgZGlndW5ha2FuIHNlYmFnYWkgbW9kZWwgYmFzZWxpbmUgdW50dWsgbWVuZ2VzdGltYXNpIGh1YnVuZ2FuIGxpbmVhciBnbG9iYWwgYW50YXJhIHZhcmlhYmVsIGluZGVwZW5kZW4gZGFuIEluY2lkZW5jZSBSYXRlIFRCIHRhbnBhIG1lbXBlcmhpdHVuZ2thbiBhc3BlayBsb2thc2kuIFBlcnNhbWFhbiByZWdyZXNpIGxpbmVhciBiZXJnYW5kYSBPTFMgZGFsYW0gcGVuZWxpdGlhbiBpbmkgZGlydW11c2thbiBzZWJhZ2FpIGJlcmlrdXQ6DQoNCiQkWWk9zrJfMCArzrJfMSBYXzFpICvOsl8yIFhfezJpfSArzrJfMyBYX3szaX0gK86yXzQgWF97NGl9K86yXzUgWF97NWl9ICvOsl82IFhfezZpfSArzrVfaSAkJA0KRGVuZ2FuOg0KDQokWV9pJAk6IEluY2lkYW5jZSBSYXRlIGthc3VzIFRCIA0KDQokzrJfMCQJOiBLb25zdGFudGEgKG5pbGFpIHBhcmFtZXRlciBpbnRlcmNlcHQpLg0KDQokzrJfMSzigKYszrJfNiQgOiBLb2VmaXNpZW4gcmVncmVzaSBtYXNpbmctbWFzaW5nIHZhcmlhYmVsIGluZGVwZW5kZW4gbG9rYWwuDQoNCiRYJAk6IFZhcmlhYmVsIFByZWRpa3Rvcg0KDQokzrVfaSQJOiBnYWxhdCB5YW5nIGRpYXN1bXNpa2FuIGJlcmRpc3RyaWJ1c2kgbm9ybWFsDQoNCiMjIyAyLjIuNCBTcGFzaWFsIExhZyBYDQoNCk1vZGVsIFNwYXRpYWwgTGFnIFggKFNMWCkgbWVydXBha2FuIHBlbmdlbWJhbmdhbiBkYXJpIG1vZGVsIE9MUyBrb252ZW5zaW9uYWwgZGVuZ2FuIG1lbmFtYmFoa2FuIHZhcmlhYmVsIHBlbmplbGFzIHlhbmcgdGVsYWggZGl0cmFuc2Zvcm1hc2lrYW4gbWVuZ2d1bmFrYW4gbWF0cmlrcyBwZW1ib2JvdCBzcGFzaWFsIChzcGF0aWFsIGxhZyBvZiBleG9nZW5vdXMgdmFyaWFibGVzKS4gTW9kZWwgaW5pIGRpZ3VuYWthbiB1bnR1ayBtZW5hbmdrYXAgZWZlayBsaW1wYWhhbiAoc3BpbGxvdmVyIGVmZmVjdCksIHlhaXR1IGtvbmRpc2kgZGkgbWFuYSB2YXJpYWJlbCB0ZXJpa2F0IChZKSBkaSBzdWF0dSB3aWxheWFoIHRpZGFrIGhhbnlhIGRpcGVuZ2FydWhpIG9sZWgga2FyYWt0ZXJpc3RpayBpbnRlcm5hbCB3aWxheWFoIGl0dSBzZW5kaXJpIChYKSwgbWVsYWlua2FuIGp1Z2EgZGlwZW5nYXJ1aGkgb2xlaCBrYXJha3RlcmlzdGlrIHdpbGF5YWgtd2lsYXlhaCB0ZXRhbmdnYSB5YW5nIGJlcmJhdGFzYW4gbGFuZ3N1bmcgKFdYKS4NCg0KU2VjYXJhIG1hdGVtYXRpcywgcGVyc2FtYWFuIG1vZGVsIFNMWCB1bnR1ayBJbmNpZGVuY2UgUmF0ZSBrYXN1cyBUQiBkaSAyNyBrYWJ1cGF0ZW4va290YSBQcm92aW5zaSBKYXdhIEJhcmF0IGRpcnVtdXNrYW4gc2ViYWdhaSBiZXJpa3V0Og0KDQokJA0KWV9pID0gXGJldGFfMCArDQpcc3VtX3trPTF9Xns2fSBcYmV0YV9rIFhfe2tpfSArDQpcc3VtX3trPTF9Xns2fSBcZ2FtbWFfayBcc3VtX3tqPTF9XntufSBXX3tpan0gWF97a2p9DQorIFx2YXJlcHNpbG9uX2kNCiQkDQoNCkRlbmdhbjoNCg0KJFlfaSQJOiBJbmNpZGVuY2UgUmF0ZSBUQiBwYWRhIHdpbGF5YWgga2UtaS4NCg0KJFhfe2tpfSQJOiB2YXJpYWJlbCBpbmRlcGVuZGVuIGxva2FsLg0KDQokV1gpX3traX0kOiBWYXJpYWJlbCBiZWJhcyB5YW5nIHRlbGFoIGRpYmVyaSBib2JvdCBzcGFzaWFsIChTcGFzaWFsIExhZyBYKS4NCg0KJM6yX2skCTogUGFyYW1ldGVyIGtvZWZpc2llbiByZWdyZXNpIHVudHVrIHZhcmlhYmVsIGJlYmFzIGxva2FsDQoNCiRcZ2FtbWFfayQ6IFBlbmdhcnVoIHRpZGFrIGxhbmdzdW5nIChzcGlsbG92ZXIgZWZmZWN0KSBkYXJpIHdpbGF5YWggdGV0YW5nZ2EuIA0KDQokXGVwc2lsb25faSQJOiBnYWxhdCBtb2RlbC4NCg0KDQojIDMuIEhhc2lsIEFuYWxpc2lzIA0KIyMgMy4xIEFuYWxpc2lzIERlc2tyaXB0aWYgZGFuIFBldGEgSVINCg0KDQo8ZGl2IGFsaWduPSJjZW50ZXIiPg0KKipUYWJlbCAyLioqIFN0YXRpc3RpayBEZXNrcmlwdGlmIA0KPC9kaXY+DQoNCg0KDQpgYGB7cn0NCnZhcnMgPC0gamFiYXJfdGIgJT4lDQogIHN0X2Ryb3BfZ2VvbWV0cnkoKSAlPiUNCiAgZHBseXI6OnNlbGVjdCgNCiAgICBUQiwNCiAgICBpbmNpZGVuY2VfcmF0ZV9UQiwNCiAgICBmYXNrZXMsDQogICAgcGVuZHVkdWtfbWlza2luLA0KICAgIGtlcGFkYXRhbiwNCiAgICBhaXJfbWludW0sDQogICAgc2FuaXRhc2ksDQogICAgaGl2DQogICkgJT4lDQogIG11dGF0ZShhY3Jvc3MoZXZlcnl0aGluZygpLCBhcy5udW1lcmljKSkNCg0KZGVzY190YWJsZSA8LSBkYXRhLmZyYW1lKA0KICBWYXJpYWJlbCA9IGMoDQogICAgIlRCIiwNCiAgICAiSW5jaWRlbmNlIFJhdGUgVEIiLA0KICAgICJGYXNrZXMiLA0KICAgICJQZW5kdWR1ayBNaXNraW4iLA0KICAgICJLZXBhZGF0YW4iLA0KICAgICJBaXIgTWludW0gTGF5YWsiLA0KICAgICJTYW5pdGFzaSBMYXlhayIsDQogICAgIkhJViINCiAgKSwNCiAgTWVhbiA9IHNhcHBseSh2YXJzLCBtZWFuLCBuYS5ybSA9IFRSVUUpLA0KICBTRCA9IHNhcHBseSh2YXJzLCBzZCwgbmEucm0gPSBUUlVFKSwNCiAgVmFyaWFucyA9IHNhcHBseSh2YXJzLCB2YXIsIG5hLnJtID0gVFJVRSksDQogIE1pbiA9IHNhcHBseSh2YXJzLCBtaW4sIG5hLnJtID0gVFJVRSksDQogIE1heCA9IHNhcHBseSh2YXJzLCBtYXgsIG5hLnJtID0gVFJVRSkNCikNCg0KDQprbml0cjo6a2FibGUoIGRlc2NfdGFibGUsIGRpZ2l0cyA9IDQpDQpgYGANCg0KDQpCZXJkYXNhcmthbiBoYXNpbCBzdGF0aXN0aWsgZGVza3JpcHRpZiwgdGVybGloYXQgYmFod2EganVtbGFoIGthc3VzIFR1YmVya3Vsb3NpcyAoVEIpIGRpIEphd2EgQmFyYXQgbWVtaWxpa2kgbmlsYWkgcmF0YS1yYXRhIHNlYmVzYXIgOC4zNDcsNzQga2FzdXMgZGVuZ2FuIHZhcmlhc2kgeWFuZyBjdWt1cCB0aW5nZ2kgYW50YXIgd2lsYXlhaCwgeWFuZyBkaXR1bmp1a2thbiBvbGVoIHN0YW5kYXIgZGV2aWFzaSBzZWJlc2FyIDYuMDQ2LDMyLiBTZW1lbnRhcmEgaXR1LCBpbmNpZGVuY2UgcmF0ZSBUQiBtZW1pbGlraSByYXRhLXJhdGEgNDg2LDc5IHBlciAxMDAuMDAwIHBlbmR1ZHVrIGRlbmdhbiByZW50YW5nIG5pbGFpIHlhbmcgY3VrdXAgbGViYXIsIG1lbnVuanVra2FuIGFkYW55YSBrZXRpbXBhbmdhbiBiZWJhbiBwZW55YWtpdCBhbnRhciBrYWJ1cGF0ZW4va290YS4NCg0KVW50dWsgdmFyaWFiZWwgaW5kZXBlbmRlbiwga29uZGlzaSBzb3NpYWwgZWtvbm9taSBkYW4ga2VzZWhhdGFuIGp1Z2EgbWVudW5qdWtrYW4gdmFyaWFzaSBhbnRhciB3aWxheWFoLiBWYXJpYWJlbCBrZXBhZGF0YW4gcGVuZHVkdWsgbWVtaWxpa2kgc2ViYXJhbiB5YW5nIHBhbGluZyB0aW5nZ2kgZGliYW5kaW5nIHZhcmlhYmVsIGxhaW4sIHNlZGFuZ2thbiB2YXJpYWJlbCBzZXBlcnRpIGFrc2VzIGFpciBtaW51bSBsYXlhayByZWxhdGlmIGxlYmloIGhvbW9nZW4gZGVuZ2FuIG5pbGFpIHlhbmcgbWVuZGVrYXRpIDEwMCUgZGkgc2ViYWdpYW4gYmVzYXIgd2lsYXlhaC4gU2VjYXJhIHVtdW0sIGhhc2lsIGluaSBtZW51bmp1a2thbiBhZGFueWEgaGV0ZXJvZ2VuaXRhcyBrb25kaXNpIGFudGFyIHdpbGF5YWggZGkgSmF3YSBCYXJhdCwgeWFuZyBtZW5naW5kaWthc2lrYW4gcG90ZW5zaSBhZGFueWEgcGVyYmVkYWFuIHJpc2lrbyBUdWJlcmt1bG9zaXMgYW50YXIgZGFlcmFoLg0KDQoNCmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQoNCnRtX3NoYXBlKGphYmFyX3RiKSArDQogIHRtX3BvbHlnb25zKA0KICAgICJpbmNpZGVuY2VfcmF0ZV9UQiIsDQogICAgcGFsZXR0ZSA9ICJSZWRzIiwNCiAgICB0aXRsZSA9ICJJbmNpZGVuY2UgUmF0ZSBUQiINCiAgKSArDQogIHRtX3RleHQoDQogICAgdGV4dCA9ICJXQURNS0siLA0KICAgIHNpemUgPSAwLjUNCiAgKSArDQogIHRtX2xheW91dCgNCiAgICBsZWdlbmQub3V0c2lkZSA9IFRSVUUNCiAgKQ0KYGBgDQoNCg0KPGRpdiBhbGlnbj0iY2VudGVyIj4NCioqR2FtYmFyIDEuKiogVmlzdWFsaXNhc2kgUGV0YSBJbmNpZGFuY2UgUmF0ZSBUQiANCjwvZGl2Pg0KIA0KU2ViYWdpYW4gYmVzYXIgd2lsYXlhaCBkaSBKYXdhIEJhcmF0IGJlcmFkYSBwYWRhIGthdGVnb3JpIGluY2lkZW5jZSByYXRlIChJUikgcmVuZGFoIGhpbmdnYSBzZWRhbmcgKDIwMOKAkzU5OSBwZXIgMTAwLjAwMCBwZW5kdWR1aykgeWFuZyB0ZXJzZWJhciBkaSBiZXJiYWdhaSB3aWxheWFoIGJhcmF0LCBzZWxhdGFuLCBkYW4gdGltdXIuIFNlbWVudGFyYSBpdHUsIHdpbGF5YWggZGVuZ2FuIElSIHRpbmdnaSBoaW5nZ2Egc2FuZ2F0IHRpbmdnaSAoPjYwMCBwZXIgMTAwLjAwMCBwZW5kdWR1aykgY2VuZGVydW5nIG1lbWJlbnR1ayBwb2xhIHRlcmxva2FsaXNhc2kgcGFkYSBiZWJlcmFwYSB3aWxheWFoIHBlcmtvdGFhbiB5YW5nIHBhZGF0IHBlbmR1ZHVrLiBIYWwgaW5pIG1lbnVuanVra2FuIGFkYW55YSBrb25zZW50cmFzaSBrYXN1cyBUQiBwYWRhIHdpbGF5YWggZGVuZ2FuIGthcmFrdGVyaXN0aWsgdXJiYW4gZGFuIGtlcGFkYXRhbiB0aW5nZ2kuDQoNCiMjIDMuMiBVamkgQXV0b2tvcmVsYXNpIFNwYXNpYWwgDQoNCjxkaXYgYWxpZ249ImNlbnRlciI+DQoqKlRhYmVsIDMuKiogIEhhc2lsIFVqaSBBdXRva29yZWxhc2kgU3Bhc2lhbA0KPC9kaXY+DQoNCmBgYHtyfQ0KdmFyX2xpc3QgPC0gYyggImluY2lkZW5jZV9yYXRlX1RCIiwgImZhc2tlcyIsICJwZW5kdWR1a19taXNraW4iLCAia2VwYWRhdGFuIiwgImFpcl9taW51bSIsICJzYW5pdGFzaSIsICJoaXYiICkNCg0KbmFtYV92YXJpYWJlbCA8LSBjKCAiSW5jaWRlbmNlIFJhdGUgKFRCKSIsICJGYXNrZXMiLCAiUGVuZHVkdWsgTWlza2luIiwgIktlcGFkYXRhbiBQZW5kdWR1ayIsICJBaXIgTWludW0gTGF5YWsiLCAiU2FuaXRhc2kgTGF5YWsiLCAiSElWIiApDQoNCm1vcmFuX3N1bW1hcnkgPC0gZGF0YS5mcmFtZSggVmFyaWFiZWwgPSBuYW1hX3ZhcmlhYmVsLCBNb3Jhbl9JID0gTkEsIEV4cGVjdGF0aW9uID0gTkEsIFZhcmlhbmNlID0gTkEsIFpfc2NvcmUgPSBOQSwgcF92YWx1ZSA9IE5BICkNCg0KZm9yKGkgaW4gc2VxX2Fsb25nKHZhcl9saXN0KSkgeyB4IDwtIHNjYWxlKGphYmFyX3RiW1t2YXJfbGlzdFtpXV1dKVssMV0gDQoNCm1vcmFuX3Jlc3VsdCA8LSBtb3Jhbi50ZXN0KCB4LCBsdywgemVyby5wb2xpY3kgPSBUUlVFICkgDQoNCm1vcmFuX3N1bW1hcnkkTW9yYW5fSVtpXSA8LSBtb3Jhbl9yZXN1bHQkZXN0aW1hdGVbMV0gDQoNCm1vcmFuX3N1bW1hcnkkRXhwZWN0YXRpb25baV0gPC0gbW9yYW5fcmVzdWx0JGVzdGltYXRlWzJdIA0KDQptb3Jhbl9zdW1tYXJ5JFZhcmlhbmNlW2ldIDwtIG1vcmFuX3Jlc3VsdCRlc3RpbWF0ZVszXSANCg0KbW9yYW5fc3VtbWFyeSRaX3Njb3JlW2ldIDwtIHVubmFtZShtb3Jhbl9yZXN1bHQkc3RhdGlzdGljKSANCg0KbW9yYW5fc3VtbWFyeSRwX3ZhbHVlW2ldIDwtIG1vcmFuX3Jlc3VsdCRwLnZhbHVlfSANCg0Ka25pdHI6OmthYmxlKCBtb3Jhbl9zdW1tYXJ5LCBkaWdpdHMgPSA0KQ0KYGBgDQoNCg0KDQoNCkJlcmRhc2Fya2FuIGhhc2lsIHVqaSBNb3JhbuKAmXMgSSBwYWRhIG1hc2luZy1tYXNpbmcgdmFyaWFiZWwsIGRpdGVtdWthbiBiYWh3YSBzZWJhZ2lhbiBiZXNhciB2YXJpYWJlbCBpbmRlcGVuZGVuIG1lbnVuanVra2FuIGFkYW55YSBhdXRva29yZWxhc2kgc3Bhc2lhbCB5YW5nIHNpZ25pZmlrYW4uIFZhcmlhYmVsIHBlbmR1ZHVrIG1pc2tpbiwga2VwYWRhdGFuIHBlbmR1ZHVrLCBha3NlcyBhaXIgbWludW0gbGF5YWssIHNhbml0YXNpIGxheWFrLCBkYW4ganVtbGFoIGthc3VzIEhJViBtZW1pbGlraSBuaWxhaSBNb3JhbuKAmXMgSSBwb3NpdGlmIGRhbiBzaWduaWZpa2FuIChwIDwgMCwwNSksIHlhbmcgbWVudW5qdWtrYW4gYWRhbnlhIHBvbGEgcGVuZ2Vsb21wb2thbiBzcGFzaWFsIChjbHVzdGVyZWQpIGFudGFyIHdpbGF5YWggZGkgSmF3YSBCYXJhdC4gU2ViYWxpa255YSwgdmFyaWFiZWwgaW5jaWRlbmNlIHJhdGUgVHViZXJrdWxvc2lzIGRhbiBqdW1sYWggZmFzaWxpdGFzIGtlc2VoYXRhbiAoZmFza2VzKSB0aWRhayBtZW51bmp1a2thbiBhdXRva29yZWxhc2kgc3Bhc2lhbCB5YW5nIHNpZ25pZmlrYW4gKHAgPiAwLDA1KSwgc2VoaW5nZ2EgZGlzdHJpYnVzaW55YSBjZW5kZXJ1bmcgYWNhayBzZWNhcmEgc3Bhc2lhbCBkYW4gdGlkYWsgbWVtYmVudHVrIHBvbGEgcGVuZ2Vsb21wb2thbiB5YW5nIGplbGFzIGFudGFyIHdpbGF5YWguDQoNCiMjIDMuMyAgTW9kZWwgT0xTIA0KDQpIYXNpbCBlc3RpbWFzaSBwYXJhbWV0ZXIgbWVuZ2d1bmFrYW4gbWV0b2RlIE9yZGluYXJ5IExlYXN0IFNxdWFyZXMgKE9MUykgZGlzYWppa2FuIHBhZGEgVGFiZWwgNSBiZXJpa3V0Og0KDQoNCjxkaXYgYWxpZ249ImNlbnRlciI+DQoqKlRhYmVsIDQuKiogIEhhc2lsIEVzdGltYXNpIE1vZGVsIE9MUw0KPC9kaXY+DQoNCmBgYHtyfQ0Kb2xzX21vZGVsIDwtIGxtKA0KICBpbmNpZGVuY2VfcmF0ZV9UQiB+DQogICAgZmFza2VzICsNCiAgICBwZW5kdWR1a19taXNraW4gKw0KICAgIGtlcGFkYXRhbiArDQogICAgYWlyX21pbnVtICsNCiAgICBzYW5pdGFzaSArDQogICAgaGl2LA0KICBkYXRhID0gamFiYXJfdGINCikNCg0Kb2xzX2NvZWYgPC0gc3VtbWFyeShvbHNfbW9kZWwpJGNvZWZmaWNpZW50cw0KDQpvbHNfdGFibGUgPC0gZGF0YS5mcmFtZSgNCiAgVmFyaWFiZWwgPSByb3duYW1lcyhvbHNfY29lZiksDQogIEtvZWZpc2llbiA9IG9sc19jb2VmWywgMV0sDQogIFN0ZF9FcnJvciA9IG9sc19jb2VmWywgMl0sDQogIHRfdmFsdWUgPSBvbHNfY29lZlssIDNdLA0KICBwX3ZhbHVlID0gb2xzX2NvZWZbLCA0XQ0KKQ0KDQprbml0cjo6a2FibGUoDQogIG9sc190YWJsZSwNCiAgZGlnaXRzID0gNCwgcm93Lm5hbWVzID0gRkFMU0UpDQpgYGANCg0KQmVyZGFzYXJrYW4gaGFzaWwgT0xTLCB2YXJpYWJlbCBpbmRlcGVuZGVuIHNlY2FyYSBzaW11bHRhbiBiZXJwZW5nYXJ1aCBzaWduaWZpa2FuIHRlcmhhZGFwIGluY2lkZW5jZSByYXRlIFRCIChwID0gMCwwMjA3OCksIG5hbXVuIHNlY2FyYSBwYXJzaWFsIHRpZGFrIGRpdGVtdWthbiBwZW5nYXJ1aCB5YW5nIHNpZ25pZmlrYW4gKHAgPiAwLDA1KS4gTW9kZWwgbWFtcHUgbWVuamVsYXNrYW4gc2VraXRhciA0OSw1NSUgdmFyaWFzaSBpbmNpZGVuY2UgcmF0ZSAoUsKyID0gMCw0OTU1KSwgZGVuZ2FuIG5pbGFpIEFkanVzdGVkIFLCsiBzZWJlc2FyIDAsMzQ0Mi4gU2VjYXJhIHVtdW0sIGhhc2lsIGluaSBtZW51bmp1a2thbiBiYWh3YSBtb2RlbCBtYXNpaCB0ZXJiYXRhcyBkYWxhbSBtZW5qZWxhc2thbiB2YXJpYXNpIFRCIHNlaGluZ2dhIGRpcGVybHVrYW4gcGVuZGVrYXRhbiBzcGFzaWFsIHVudHVrIG1lbmFuZ2thcCBrZXRlcmthaXRhbiBhbnRhciB3aWxheWFoLg0KDQojIyAzLjQgRGlhZ25vc3RpayBNb2RlbCBPTFMNCg0KVGFiZWwgNS4gRGlhZ25vc3RpayBNb2RlbCBPTFMgDQo8ZGl2IGFsaWduPSJjZW50ZXIiPg0KKipUYWJlbCA1LioqICBEaWFnbm9zdGlrIE1vZGVsDQo8L2Rpdj4NCg0KYGBge3J9DQpqYWJhcl90YiRyZXNpZHVhbF9vbHMgPC0gcmVzaWR1YWxzKG9sc19tb2RlbCkNCg0KIyBWSUYNCnZpZl92YWx1ZXMgPC0gdmlmKG9sc19tb2RlbCkNCg0KIyBVamkgZGlhZ25vc3Rpaw0Kc2hhcGlyb19yZXMgPC0gc2hhcGlyby50ZXN0KGphYmFyX3RiJHJlc2lkdWFsX29scykNCmJwX3JlcyA8LSBicHRlc3Qob2xzX21vZGVsKQ0KZHdfcmVzIDwtIGR3dGVzdChvbHNfbW9kZWwpDQoNCm1vcmFuX3Jlc2lkdWFsIDwtIG1vcmFuLnRlc3QoDQogIGphYmFyX3RiJHJlc2lkdWFsX29scywNCiAgbHcsDQogIHplcm8ucG9saWN5ID0gVFJVRQ0KKQ0KDQpkaWFnbm9zdGljX3RhYmxlIDwtIGRhdGEuZnJhbWUoDQogIFVqaSA9IGMoDQogICAgcGFzdGUoIlZJRiDigJMiLCBuYW1lcyh2aWZfdmFsdWVzKSksDQogICAgIk5vcm1hbGl0YXMgUmVzaWR1YWwgKFNoYXBpcm8tV2lsaykiLA0KICAgICJIZXRlcm9za2VkYXN0aXNpdGFzIChCcmV1c2NoLVBhZ2FuKSIsDQogICAgIkF1dG9rb3JlbGFzaSAoRHVyYmluLVdhdHNvbikiLA0KICAgICJBdXRva29yZWxhc2kgU3Bhc2lhbCBSZXNpZHVhbCAoTW9yYW4ncyBJKSINCiAgKSwNCiAgTmlsYWkgPSBjKA0KICAgIGFzLm51bWVyaWModmlmX3ZhbHVlcyksDQogICAgc2hhcGlyb19yZXMkc3RhdGlzdGljLA0KICAgIGJwX3JlcyRzdGF0aXN0aWMsDQogICAgZHdfcmVzJHN0YXRpc3RpYywNCiAgICBtb3Jhbl9yZXNpZHVhbCRlc3RpbWF0ZVsxXQ0KICApLA0KICBwX3ZhbHVlID0gYygNCiAgICByZXAoTkEsIGxlbmd0aCh2aWZfdmFsdWVzKSksDQogICAgc2hhcGlyb19yZXMkcC52YWx1ZSwNCiAgICBicF9yZXMkcC52YWx1ZSwNCiAgICBkd19yZXMkcC52YWx1ZSwNCiAgICBtb3Jhbl9yZXNpZHVhbCRwLnZhbHVlDQogICkNCikNCg0Ka25pdHI6OmthYmxlKA0KICBkaWFnbm9zdGljX3RhYmxlLA0KICBkaWdpdHMgPSA0DQopDQpgYGANCg0KDQpIYXNpbCBkaWFnbm9zdGlrIG1vZGVsIE9MUyBtZW51bmp1a2thbiBiYWh3YSBzZWx1cnVoIGFzdW1zaSBrbGFzaWsgdGVycGVudWhpLCB5YWl0dSB0aWRhayB0ZXJkYXBhdCBtdWx0aWtvbGluZWFyaXRhcywgaGV0ZXJvc2tlZGFzdGlzaXRhcywgbWF1cHVuIGF1dG9rb3JlbGFzaSByZXNpZHVhbCBzZWNhcmEgdGVtcG9yYWwuIE5hbXVuLCB1amkgTW9yYW7igJlzIEkgcGFkYSByZXNpZHVhbCBtZW51bmp1a2thbiBhZGFueWEgYXV0b2tvcmVsYXNpIHNwYXNpYWwgeWFuZyBzaWduaWZpa2FuIChJID0gMCwyNTczOyBwID0gMCwwMTc2KSwgeWFuZyBtZW5naW5kaWthc2lrYW4gYmFod2EgcmVzaWR1YWwgbWFzaWggbWVtaWxpa2kgcG9sYSBrZXRlcmdhbnR1bmdhbiBhbnRhciB3aWxheWFoLiBUZW11YW4gaW5pIG1lbnVuanVra2FuIGJhaHdhIG1vZGVsIE9MUyBiZWx1bSBtYW1wdSBtZW5hbmdrYXAgZWZlayBzcGFzaWFsLCBzZWhpbmdnYSBkaXBlcmx1a2FuIHBlbmRla2F0YW4gbW9kZWwgc3Bhc2lhbCBzZXBlcnRpIFNMWCB1bnR1ayBtZW5nYWtvbW9kYXNpIGtldGVya2FpdGFuIGFudGFyIHdpbGF5YWguDQoNCg0KIyMgMy41IE1vZGVsIFNMWA0KDQoNCjxkaXYgYWxpZ249ImNlbnRlciI+DQoqKlRhYmVsIDUuKiogIEhhc2lsIEVzdGltYXNpIE1vZGVsIFNMWCANCjwvZGl2Pg0KDQpgYGB7cn0NCmphYmFyX3RiJGxhZ19mYXNrZXMgPC0gbGFnLmxpc3R3KA0KICBsdywgamFiYXJfdGIkZmFza2VzLA0KICB6ZXJvLnBvbGljeSA9IFRSVUUNCikNCg0KamFiYXJfdGIkbGFnX3BlbmR1ZHVrX21pc2tpbiA8LSBsYWcubGlzdHcoDQogIGx3LCBqYWJhcl90YiRwZW5kdWR1a19taXNraW4sDQogIHplcm8ucG9saWN5ID0gVFJVRQ0KKQ0KDQpqYWJhcl90YiRsYWdfa2VwYWRhdGFuIDwtIGxhZy5saXN0dygNCiAgbHcsIGphYmFyX3RiJGtlcGFkYXRhbiwNCiAgemVyby5wb2xpY3kgPSBUUlVFDQopDQoNCmphYmFyX3RiJGxhZ19haXJfbWludW0gPC0gbGFnLmxpc3R3KA0KICBsdywgamFiYXJfdGIkYWlyX21pbnVtLA0KICB6ZXJvLnBvbGljeSA9IFRSVUUNCikNCg0KamFiYXJfdGIkbGFnX3Nhbml0YXNpIDwtIGxhZy5saXN0dygNCiAgbHcsIGphYmFyX3RiJHNhbml0YXNpLA0KICB6ZXJvLnBvbGljeSA9IFRSVUUNCikNCg0KamFiYXJfdGIkbGFnX2hpdiA8LSBsYWcubGlzdHcoDQogIGx3LCBqYWJhcl90YiRoaXYsDQogIHplcm8ucG9saWN5ID0gVFJVRQ0KKQ0KDQpzbHhfbW9kZWwgPC0gbG0oDQogIGluY2lkZW5jZV9yYXRlX1RCIH4NCiAgICBmYXNrZXMgKw0KICAgIHBlbmR1ZHVrX21pc2tpbiArDQogICAga2VwYWRhdGFuICsNCiAgICBhaXJfbWludW0gKw0KICAgIHNhbml0YXNpICsNCiAgICBoaXYgKw0KICAgIGxhZ19mYXNrZXMgKw0KICAgIGxhZ19wZW5kdWR1a19taXNraW4gKw0KICAgIGxhZ19rZXBhZGF0YW4gKw0KICAgIGxhZ19haXJfbWludW0gKw0KICAgIGxhZ19zYW5pdGFzaSArDQogICAgbGFnX2hpdiwNCiAgZGF0YSA9IGphYmFyX3RiDQopDQoNCnNseF9jb2VmIDwtIHN1bW1hcnkoc2x4X21vZGVsKSRjb2VmZmljaWVudHMNCg0Kc2x4X3RhYmxlIDwtIGRhdGEuZnJhbWUoDQogIFZhcmlhYmVsID0gYygNCiAgICAiKEludGVyY2VwdCkiLA0KICAgICJGYXNrZXMiLA0KICAgICJQZW5kdWR1ayBNaXNraW4iLA0KICAgICJLZXBhZGF0YW4gUGVuZHVkdWsiLA0KICAgICJBaXIgTWludW0gTGF5YWsiLA0KICAgICJTYW5pdGFzaSBMYXlhayIsDQogICAgIkhJViIsDQogICAgIkxhZyBGYXNrZXMiLA0KICAgICJMYWcgUGVuZHVkdWsgTWlza2luIiwNCiAgICAiTGFnIEtlcGFkYXRhbiIsDQogICAgIkxhZyBBaXIgTWludW0gTGF5YWsiLA0KICAgICJMYWcgU2FuaXRhc2kgTGF5YWsiLA0KICAgICJMYWcgSElWIg0KICApLA0KICBLb2VmaXNpZW4gPSBzbHhfY29lZlssIDFdLA0KICBTdGRfRXJyb3IgPSBzbHhfY29lZlssIDJdLA0KICB0X3ZhbHVlID0gc2x4X2NvZWZbLCAzXSwNCiAgcF92YWx1ZSA9IHNseF9jb2VmWywgNF0NCikNCg0Ka25pdHI6OmthYmxlKA0KICBzbHhfdGFibGUsDQogIGRpZ2l0cyA9IDQsICByb3cubmFtZXMgPSBGQUxTRSkNCmBgYA0KDQpIYXNpbCBlc3RpbWFzaSBtb2RlbCBTTFggbWVudW5qdWtrYW4gYmFod2EgbW9kZWwgc2VjYXJhIHNpbXVsdGFuIHNpZ25pZmlrYW4gZGFsYW0gbWVuamVsYXNrYW4gdmFyaWFzaSBpbmNpZGVuY2UgcmF0ZSBUdWJlcmt1bG9zaXMgKHAgPSAwLDA0NDgzKS4gTmlsYWkgUsKyIHNlYmVzYXIgMCw2OTEzIG1lbnVuanVra2FuIGJhaHdhIG1vZGVsIG1hbXB1IG1lbmplbGFza2FuIHNla2l0YXIgNjksMTMlIHZhcmlhc2kgZGF0YSwgeWFuZyBsZWJpaCB0aW5nZ2kgZGliYW5kaW5na2FuIG1vZGVsIE9MUy4NCk5hbXVuIGRlbWlraWFuLCBzZWNhcmEgcGFyc2lhbCBzZWx1cnVoIHZhcmlhYmVsIGJhaWsgdmFyaWFiZWwgbG9rYWwgbWF1cHVuIGVmZWsgc3Bhc2lhbCAobGFnKSB0aWRhayBtZW51bmp1a2thbiBwZW5nYXJ1aCB5YW5nIHNpZ25pZmlrYW4gKHAgPiAwLDA1KS4gSGFsIGluaSBtZW5naW5kaWthc2lrYW4gYmFod2EgcGVuZ2FydWggZmFrdG9yIHJpc2lrbyB0ZXJoYWRhcCBpbmNpZGVuY2UgcmF0ZSBUQiB0ZXJzZWJhciBzZWNhcmEgc3Bhc2lhbCBkYW4gdGlkYWsgdGVycHVzYXQgcGFkYSBzYXR1IHZhcmlhYmVsIHRlcnRlbnR1LiBTZWNhcmEga2VzZWx1cnVoYW4sIG1vZGVsIFNMWCBtZW51bmp1a2thbiBhZGFueWEgcGVuaW5na2F0YW4ga2VtYW1wdWFuIGRhbGFtIG1lbmFuZ2thcCB2YXJpYXNpIGRhdGEgZGliYW5kaW5na2FuIE9MUywgc2VoaW5nZ2EgbWVuZHVrdW5nIGFkYW55YSBlZmVrIGtldGVya2FpdGFuIHNwYXNpYWwgYW50YXIgd2lsYXlhaCBkYWxhbSBwZW55ZWJhcmFuIFR1YmVya3Vsb3Npcy4gVGlkYWsgc2lnbmlmaWthbm55YSB2YXJpYWJlbCBzZWNhcmEgcGFyc2lhbCBkYXBhdCBkaXNlYmFia2FuIG9sZWggYWRhbnlhIHBlbmdhcnVoIGZha3RvciBsYWluIHlhbmcgYmVsdW0gZGltYXN1a2thbiBkYWxhbSBtb2RlbCBzZXBlcnRpIGt1YWxpdGFzIGh1bmlhbiwga2VwYXR1aGFuIHBlbmdvYmF0YW4sIGRhbiBtb2JpbGl0YXMgcGVuZHVkdWsuDQoNClNlbGFpbiBtZW5nZXN0aW1hc2kga29lZmlzaWVuIHJlZ3Jlc2ksIG1vZGVsIFNMWCBtZW11bmdraW5rYW4gaWRlbnRpZmlrYXNpIHBlbmdhcnVoIGxhbmdzdW5nIChkaXJlY3QgZWZmZWN0KSBkYW4gcGVuZ2FydWggdGlkYWsgbGFuZ3N1bmcgKGluZGlyZWN0IGVmZmVjdCkgeWFuZyBiZXJhc2FsIGRhcmkgd2lsYXlhaCB0ZXRhbmdnYS4gQW5hbGlzaXMgaW5pIHBlbnRpbmcgdW50dWsgbWVuZ2V0YWh1aSBzZWphdWggbWFuYSBmYWt0b3ItZmFrdG9yIHNvc2lhbCwgZWtvbm9taSwgZGFuIGtlc2VoYXRhbiBtZW1lbmdhcnVoaSBJbmNpZGVuY2UgUmF0ZSBUdWJlcmt1bG9zaXMgKFRCKSwgYmFpayBtZWxhbHVpIGthcmFrdGVyaXN0aWsgd2lsYXlhaCBpdHUgc2VuZGlyaSBtYXVwdW4gbWVsYWx1aSBlZmVrIGxpbXBhaGFuIHNwYXNpYWwgKHNwaWxsb3ZlciBlZmZlY3QpLiBIYXNpbCBlc3RpbWFzaSBlZmVrIGxhbmdzdW5nLCBlZmVrIHRpZGFrIGxhbmdzdW5nLCBkYW4gZWZlayB0b3RhbCBkaXNhamlrYW4gcGFkYSBUYWJlbCA2Lg0KDQo8ZGl2IGFsaWduPSJjZW50ZXIiPg0KKipUYWJlbCA2LioqIERpcmVjdCBhbmQgSW5kaXJlY3QgRWZmZWN0cyBNb2RlbCBTTFgNCjwvZGl2Pg0KDQpgYGB7cn0NCnNseF9jb2VmIDwtIHN1bW1hcnkoc2x4X21vZGVsKSRjb2VmZmljaWVudHMNCg0KaW1wYWN0X3RhYmxlIDwtIGRhdGEuZnJhbWUoDQogIFZhcmlhYmxlID0gYygNCiAgICAiZmFza2VzIiwNCiAgICAicGVuZHVkdWtfbWlza2luIiwNCiAgICAia2VwYWRhdGFuIiwNCiAgICAiYWlyX21pbnVtIiwNCiAgICAic2FuaXRhc2kiLA0KICAgICJoaXYiDQogICksDQoNCiAgRGlyZWN0ID0gc2x4X2NvZWZbYygNCiAgICAiZmFza2VzIiwNCiAgICAicGVuZHVkdWtfbWlza2luIiwNCiAgICAia2VwYWRhdGFuIiwNCiAgICAiYWlyX21pbnVtIiwNCiAgICAic2FuaXRhc2kiLA0KICAgICJoaXYiDQogICksIDFdLA0KDQogIFNFX0RpcmVjdCA9IHNseF9jb2VmW2MoDQogICAgImZhc2tlcyIsDQogICAgInBlbmR1ZHVrX21pc2tpbiIsDQogICAgImtlcGFkYXRhbiIsDQogICAgImFpcl9taW51bSIsDQogICAgInNhbml0YXNpIiwNCiAgICAiaGl2Ig0KICApLCAyXSwNCg0KICBwX0RpcmVjdCA9IHNseF9jb2VmW2MoDQogICAgImZhc2tlcyIsDQogICAgInBlbmR1ZHVrX21pc2tpbiIsDQogICAgImtlcGFkYXRhbiIsDQogICAgImFpcl9taW51bSIsDQogICAgInNhbml0YXNpIiwNCiAgICAiaGl2Ig0KICApLCA0XSwNCg0KICBJbmRpcmVjdCA9IHNseF9jb2VmW2MoDQogICAgImxhZ19mYXNrZXMiLA0KICAgICJsYWdfcGVuZHVkdWtfbWlza2luIiwNCiAgICAibGFnX2tlcGFkYXRhbiIsDQogICAgImxhZ19haXJfbWludW0iLA0KICAgICJsYWdfc2FuaXRhc2kiLA0KICAgICJsYWdfaGl2Ig0KICApLCAxXSwNCg0KICBTRV9JbmRpcmVjdCA9IHNseF9jb2VmW2MoDQogICAgImxhZ19mYXNrZXMiLA0KICAgICJsYWdfcGVuZHVkdWtfbWlza2luIiwNCiAgICAibGFnX2tlcGFkYXRhbiIsDQogICAgImxhZ19haXJfbWludW0iLA0KICAgICJsYWdfc2FuaXRhc2kiLA0KICAgICJsYWdfaGl2Ig0KICApLCAyXSwNCg0KICBwX0luZGlyZWN0ID0gc2x4X2NvZWZbYygNCiAgICAibGFnX2Zhc2tlcyIsDQogICAgImxhZ19wZW5kdWR1a19taXNraW4iLA0KICAgICJsYWdfa2VwYWRhdGFuIiwNCiAgICAibGFnX2Fpcl9taW51bSIsDQogICAgImxhZ19zYW5pdGFzaSIsDQogICAgImxhZ19oaXYiDQogICksIDRdDQopDQoNCmltcGFjdF90YWJsZSRUb3RhbCA8LQ0KICBpbXBhY3RfdGFibGUkRGlyZWN0ICsNCiAgaW1wYWN0X3RhYmxlJEluZGlyZWN0DQoNCmtuaXRyOjprYWJsZSgNCiAgaW1wYWN0X3RhYmxlLA0KICBkaWdpdHMgPSA0LA0KICByb3cubmFtZXMgPSBGQUxTRQ0KKQ0KYGBgDQoNCg0KSGFzaWwgZXN0aW1hc2kgZGlyZWN0IGVmZmVjdCwgaW5kaXJlY3QgZWZmZWN0LCBkYW4gdG90YWwgZWZmZWN0IHBhZGEgbW9kZWwgU3BhdGlhbCBMYWcgb2YgWCAoU0xYKSBkaXNhamlrYW4gcGFkYSBUYWJlbCA2LiBTZWx1cnVoIHZhcmlhYmVsIG1lbWlsaWtpIG5pbGFpIHAtdmFsdWUgbGViaWggYmVzYXIgZGFyaSAwLDA1IGJhaWsgcGFkYSBwZW5nYXJ1aCBsYW5nc3VuZyBtYXVwdW4gcGVuZ2FydWggdGlkYWsgbGFuZ3N1bmcsIHNlaGluZ2dhIHRpZGFrIHRlcmRhcGF0IGJ1a3RpIHN0YXRpc3RpayB5YW5nIGN1a3VwIHVudHVrIG1lbnlhdGFrYW4gYmFod2EgZmFzaWxpdGFzIGtlc2VoYXRhbiwgcGVuZHVkdWsgbWlza2luLCBrZXBhZGF0YW4gcGVuZHVkdWssIGFrc2VzIGFpciBtaW51bSBsYXlhaywgc2FuaXRhc2kgbGF5YWssIG1hdXB1biBqdW1sYWgga2FzdXMgSElWIGJlcnBlbmdhcnVoIHNpZ25pZmlrYW4gdGVyaGFkYXAgSW5jaWRlbmNlIFJhdGUgKElSKSBUdWJlcmt1bG9zaXMgKFRCKSBkaSBKYXdhIEJhcmF0Lg0KDQpNZXNraXB1biB0aWRhayBzaWduaWZpa2FuLCBhcmFoIGtvZWZpc2llbiBtZW51bmp1a2thbiBiZWJlcmFwYSBrZWNlbmRlcnVuZ2FuIGh1YnVuZ2FuLiBWYXJpYWJlbCBmYXNpbGl0YXMga2VzZWhhdGFuLCBwZW5kdWR1ayBtaXNraW4sIHNhbml0YXNpIGxheWFrLCBkYW4gSElWIG1lbWlsaWtpIHRvdGFsIGVmZmVjdCBwb3NpdGlmLCBzZWRhbmdrYW4ga2VwYWRhdGFuIHBlbmR1ZHVrIGRhbiBha3NlcyBhaXIgbWludW0gbGF5YWsgbWVtaWxpa2kgdG90YWwgZWZmZWN0IG5lZ2F0aWYuIFNlbGFpbiBpdHUsIGJlYmVyYXBhIHZhcmlhYmVsIG1lbnVuanVra2FuIHBlcmJlZGFhbiBhcmFoIGFudGFyYSBkaXJlY3QgZWZmZWN0IGRhbiBpbmRpcmVjdCBlZmZlY3QsIHNlcGVydGkgcGVuZHVkdWsgbWlza2luLCBrZXBhZGF0YW4gcGVuZHVkdWssIGRhbiBha3NlcyBhaXIgbWludW0gbGF5YWssIHlhbmcgbWVuZ2luZGlrYXNpa2FuIGFkYW55YSBrZW11bmdraW5hbiBwZW5nYXJ1aCBrYXJha3RlcmlzdGlrIHdpbGF5YWggdGV0YW5nZ2EgdGVyaGFkYXAga29uZGlzaSBUQiBkaSBzdWF0dSB3aWxheWFoLg0KDQpTZWNhcmEgdW11bSwgaGFzaWwgZGlyZWN0IGVmZmVjdCBkYW4gaW5kaXJlY3QgZWZmZWN0IG1lbnVuanVra2FuIGJhaHdhIHRpZGFrIHRlcmRhcGF0IHBlbmdhcnVoIHNpZ25pZmlrYW4gc2VjYXJhIHBhcnNpYWwgZGFyaSBzZWx1cnVoIHZhcmlhYmVsIHlhbmcgZGl0ZWxpdGkuIE5hbXVuLCBrZWJlcmFkYWFuIGtvZWZpc2llbiBpbmRpcmVjdCBlZmZlY3QgeWFuZyB0aWRhayBiZXJuaWxhaSBub2wgbWVudW5qdWtrYW4gYmFod2EgbW9kZWwgU0xYIG1hbXB1IG1lbmdha29tb2Rhc2kgcG90ZW5zaSBrZXRlcmthaXRhbiBhbnRhcndpbGF5YWggKHNwYXRpYWwgc3BpbGxvdmVyKSwgbWVza2lwdW4gZWZlayB0ZXJzZWJ1dCBiZWx1bSB0ZXJidWt0aSBzaWduaWZpa2FuIHNlY2FyYSBzdGF0aXN0aWsgcGFkYSBkYXRhIHBlbmVsaXRpYW4gaW5pLg0KDQoNCiMjIDMuNiBQZXJiYW5kaW5nYW4gTW9kZWwNCg0KDQo8ZGl2IGFsaWduPSJjZW50ZXIiPg0KKipUYWJlbCA3LioqIFBlcmJhbmRpbmdhbiBNb2RlbA0KPC9kaXY+DQoNCmBgYHtyfQ0KbW9kZWxfY29tcGFyaXNvbiA8LSBkYXRhLmZyYW1lKA0KICBNb2RlbCA9IGMoIk9MUyIsICJTTFgiKSwNCiAgDQogIEFJQyA9IHJvdW5kKA0KICAgIGMoDQogICAgICBBSUMob2xzX21vZGVsKSwNCiAgICAgIEFJQyhzbHhfbW9kZWwpDQogICAgKSwNCiAgICAyDQogICksDQogIA0KICBSX3NxdWFyZWQgPSByb3VuZCgNCiAgICBjKA0KICAgICAgc3VtbWFyeShvbHNfbW9kZWwpJHIuc3F1YXJlZCwNCiAgICAgIHN1bW1hcnkoc2x4X21vZGVsKSRyLnNxdWFyZWQNCiAgICApLA0KICAgIDQNCiAgKSwNCiAgDQogIExvZ0xpayA9IHJvdW5kKA0KICAgIGMoDQogICAgICBhcy5udW1lcmljKGxvZ0xpayhvbHNfbW9kZWwpKSwNCiAgICAgIGFzLm51bWVyaWMobG9nTGlrKHNseF9tb2RlbCkpDQogICAgKSwNCiAgICAyDQogICksDQogIA0KICBSTVNFID0gcm91bmQoDQogICAgYygNCiAgICAgIHNxcnQobWVhbihvbHNfbW9kZWwkcmVzaWR1YWxzXjIpKSwNCiAgICAgIHNxcnQobWVhbihzbHhfbW9kZWwkcmVzaWR1YWxzXjIpKQ0KICAgICksDQogICAgMg0KICApDQopDQoNCmNvbXBhcmlzb25fdGFibGUgPC0gZGF0YS5mcmFtZSgNCiAgTW9kZWwgPSBjKCJPTFMiLCAiU0xYIiksDQoNCiAgQUlDID0gcm91bmQoDQogICAgYygNCiAgICAgIEFJQyhvbHNfbW9kZWwpLA0KICAgICAgQUlDKHNseF9tb2RlbCkNCiAgICApLA0KICAgIDINCiAgKSwNCg0KICBSX3NxdWFyZWQgPSByb3VuZCgNCiAgICBjKA0KICAgICAgc3VtbWFyeShvbHNfbW9kZWwpJHIuc3F1YXJlZCwNCiAgICAgIHN1bW1hcnkoc2x4X21vZGVsKSRyLnNxdWFyZWQNCiAgICApLA0KICAgIDQNCiAgKSwNCg0KICBMb2dfTGlrZWxpaG9vZCA9IHJvdW5kKA0KICAgIGMoDQogICAgICBhcy5udW1lcmljKGxvZ0xpayhvbHNfbW9kZWwpKSwNCiAgICAgIGFzLm51bWVyaWMobG9nTGlrKHNseF9tb2RlbCkpDQogICAgKSwNCiAgICAyDQogICksDQoNCiAgUk1TRSA9IHJvdW5kKA0KICAgIGMoDQogICAgICBzcXJ0KG1lYW4ocmVzaWR1YWxzKG9sc19tb2RlbCleMikpLA0KICAgICAgc3FydChtZWFuKHJlc2lkdWFscyhzbHhfbW9kZWwpXjIpKQ0KICAgICksDQogICAgMg0KICApDQopDQoNCmtuaXRyOjprYWJsZSgNCiAgY29tcGFyaXNvbl90YWJsZSwNCiAgZGlnaXRzID0gNA0KKQ0KDQpgYGANCg0KSGFzaWwgcGVyYmFuZGluZ2FuIGtpbmVyamEgbW9kZWwgbWVudW5qdWtrYW4gYmFod2EgbW9kZWwgU0xYIG1lbWlsaWtpIHBlcmZvcm1hIHlhbmcgbGViaWggYmFpayBkaWJhbmRpbmdrYW4gbW9kZWwgT0xTLiBIYWwgaW5pIHRlcmxpaGF0IGRhcmkgcGVudXJ1bmFuIG5pbGFpIEFJQyBkYW4gUk1TRSwgc2VydGEgcGVuaW5na2F0YW4gbmlsYWkgUi1zcXVhcmVkIGRhbiBsb2ctbGlrZWxpaG9vZC4gUGVuaW5na2F0YW4gdGVyc2VidXQgbWVudW5qdWtrYW4gYmFod2EgbW9kZWwgU0xYIGxlYmloIG1hbXB1IG1lbmplbGFza2FuIHZhcmlhc2kgaW5jaWRlbmNlIHJhdGUgVHViZXJrdWxvc2lzIGRlbmdhbiBtZW1wZXJ0aW1iYW5na2FuIGVmZWsgc3Bhc2lhbCBhbnRhciB3aWxheWFoLiBEZW5nYW4gZGVtaWtpYW4sIG1vZGVsIFNMWCBsZWJpaCBzZXN1YWkgZGlndW5ha2FuIGRhbGFtIGFuYWxpc2lzIGluaSBrYXJlbmEgbWFtcHUgbWVuYW5na2FwIGtldGVya2FpdGFuIHNwYXNpYWwgeWFuZyB0aWRhayBkYXBhdCBkaWplbGFza2FuIG9sZWggbW9kZWwgT0xTLg0KDQoNCiMgNC4gUGVtYmFoYXNhbg0KDQojIyA0LjEgUGVtYmFoYXNhbg0KDQpQZW5lbGl0aWFuIGluaSBiZXJ0dWp1YW4gbWVuZ2FuYWxpc2lzIGZha3Rvci1mYWt0b3IgeWFuZyBiZXJodWJ1bmdhbiBkZW5nYW4gSW5jaWRlbmNlIFJhdGUgKElSKSBUdWJlcmt1bG9zaXMgKFRCKSBkaSBQcm92aW5zaSBKYXdhIEJhcmF0IG1lbmdndW5ha2FuIHBlbmRla2F0YW4gc3Bhc2lhbCBTcGF0aWFsIExhZyBvZiBYIChTTFgpLiBIYXNpbCBhbmFsaXNpcyBtZW51bmp1a2thbiBiYWh3YSBkaXN0cmlidXNpIFRCIGRpIEphd2EgQmFyYXQgdGlkYWsgbWVyYXRhIGFudGFyIGthYnVwYXRlbi9rb3RhLiBQZXRhIEluY2lkZW5jZSBSYXRlIG1lbXBlcmxpaGF0a2FuIGJhaHdhIHdpbGF5YWggZGVuZ2FuIHRpbmdrYXQga2VqYWRpYW4gVEIgdGluZ2dpIGNlbmRlcnVuZyB0ZXJrb25zZW50cmFzaSBwYWRhIGJlYmVyYXBhIHdpbGF5YWggcGVya290YWFuIHlhbmcgbWVtaWxpa2kgYWt0aXZpdGFzIHNvc2lhbCBkYW4gbW9iaWxpdGFzIHBlbmR1ZHVrIHlhbmcgdGluZ2dpLiBLb25kaXNpIGluaSBzZWphbGFuIGRlbmdhbiBrYXJha3RlcmlzdGlrIHBlbnlha2l0IFRCIHlhbmcgcGVudWxhcmFubnlhIGRpcGVuZ2FydWhpIG9sZWggaW50ZW5zaXRhcyBrb250YWsgYW50YXJpbmRpdmlkdSBkYWxhbSBzdWF0dSBwb3B1bGFzaS4NCg0KSGFzaWwgdWppIE1vcmFuJ3MgSSBtZW51bmp1a2thbiBiYWh3YSBzZWJhZ2lhbiBiZXNhciB2YXJpYWJlbCBwZW5qZWxhcywgeWFpdHUgcGVuZHVkdWsgbWlza2luLCBrZXBhZGF0YW4gcGVuZHVkdWssIGFrc2VzIGFpciBtaW51bSBsYXlhaywgc2FuaXRhc2kgbGF5YWssIGRhbiBqdW1sYWgga2FzdXMgSElWIG1lbWlsaWtpIHBvbGEgcGVuZ2Vsb21wb2thbiBzcGFzaWFsIHlhbmcgc2lnbmlmaWthbi4gVGVtdWFuIGluaSBtZW51bmp1a2thbiBiYWh3YSBrYXJha3RlcmlzdGlrIHNvc2lhbCwgZWtvbm9taSwgZGFuIGtlc2VoYXRhbiBtYXN5YXJha2F0IGRpIEphd2EgQmFyYXQgdGlkYWsgdGVyc2ViYXIgc2VjYXJhIGFjYWssIG1lbGFpbmthbiBjZW5kZXJ1bmcgbWVtYmVudHVrIGtlbG9tcG9rIHdpbGF5YWggZGVuZ2FuIGthcmFrdGVyaXN0aWsgeWFuZyBzZXJ1cGEuIEFkYW55YSBwb2xhIHBlbmdlbG9tcG9rYW4gdGVyc2VidXQgbWVuZ2luZGlrYXNpa2FuIGJhaHdhIHBlbmRla2F0YW4gc3Bhc2lhbCByZWxldmFuIGRpZ3VuYWthbiBkYWxhbSBhbmFsaXNpcyBmYWt0b3ItZmFrdG9yIHlhbmcgYmVya2FpdGFuIGRlbmdhbiBrZWphZGlhbiBUQi4NCg0KTW9kZWwgT0xTIG1lbnVuanVra2FuIGJhaHdhIHNlY2FyYSBzaW11bHRhbiB2YXJpYWJlbC12YXJpYWJlbCB5YW5nIGRpZ3VuYWthbiBtYW1wdSBtZW5qZWxhc2thbiB2YXJpYXNpIEluY2lkZW5jZSBSYXRlIFRCLiBOYW11biBkZW1pa2lhbiwgdGlkYWsgdGVyZGFwYXQgdmFyaWFiZWwgeWFuZyBzaWduaWZpa2FuIHNlY2FyYSBwYXJzaWFsLiBTZWxhaW4gaXR1LCB1amkgTW9yYW4ncyBJIHRlcmhhZGFwIHJlc2lkdWFsIG1vZGVsIG1lbnVuanVra2FuIGFkYW55YSBhdXRva29yZWxhc2kgc3Bhc2lhbCB5YW5nIHNpZ25pZmlrYW4uIEhhc2lsIHRlcnNlYnV0IG1lbmdpbmRpa2FzaWthbiBiYWh3YSBtYXNpaCB0ZXJkYXBhdCBpbmZvcm1hc2kgc3Bhc2lhbCB5YW5nIGJlbHVtIGRhcGF0IGRpamVsYXNrYW4gb2xlaCBtb2RlbCBPTFMgc2VoaW5nZ2EgYXN1bXNpIGluZGVwZW5kZW5zaSBhbnRhcndpbGF5YWggdGlkYWsgc2VwZW51aG55YSB0ZXJwZW51aGkuIE9sZWgga2FyZW5hIGl0dSwgcGVuZ2d1bmFhbiBtb2RlbCBzcGFzaWFsIG1lbmphZGkgcGVudGluZyB1bnR1ayBtZW5nYWtvbW9kYXNpIGtldGVya2FpdGFuIGdlb2dyYWZpcyBhbnRhciBrYWJ1cGF0ZW4va290YS4NCg0KUGVuZXJhcGFuIG1vZGVsIFNMWCBtZW5naGFzaWxrYW4gcGVuaW5na2F0YW4ga2luZXJqYSBtb2RlbCBkaWJhbmRpbmdrYW4gT0xTLCB5YW5nIGRpdHVuanVra2FuIG9sZWggcGVuaW5na2F0YW4gbmlsYWkga29lZmlzaWVuIGRldGVybWluYXNpIChSsikgZGFyaSAwLDQ5NTUgbWVuamFkaSAwLDY5MTMgc2VydGEgcGVudXJ1bmFuIG5pbGFpIFJNU0UuIFRlbXVhbiBpbmkgbWVudW5qdWtrYW4gYmFod2EgcGVuYW1iYWhhbiBrb21wb25lbiBzcGFzaWFsIHBhZGEgdmFyaWFiZWwgaW5kZXBlbmRlbiBtYW1wdSBtZW5pbmdrYXRrYW4ga2VtYW1wdWFuIG1vZGVsIGRhbGFtIG1lbmplbGFza2FuIHZhcmlhc2kgSW5jaWRlbmNlIFJhdGUgVEIuIERlbmdhbiBrYXRhIGxhaW4sIGluZm9ybWFzaSBtZW5nZW5haSBrb25kaXNpIHdpbGF5YWggdGV0YW5nZ2EgbWVtYmVyaWthbiBrb250cmlidXNpIGRhbGFtIG1lbmplbGFza2FuIHZhcmlhc2kga2VqYWRpYW4gVEIgZGkgSmF3YSBCYXJhdC4NCg0KTWVza2lwdW4gZGVtaWtpYW4sIGhhc2lsIGVzdGltYXNpIHBhcmFtZXRlciBtb2RlbCBTTFggbWVudW5qdWtrYW4gYmFod2Egc2VsdXJ1aCB2YXJpYWJlbCBsb2thbCBtYXVwdW4gdmFyaWFiZWwgbGFnIHNwYXNpYWwgbWVtaWxpa2kgbmlsYWkgcC12YWx1ZSBsZWJpaCBiZXNhciBkYXJpIDAsMDUuIEhhc2lsIGFuYWxpc2lzIGRpcmVjdCBlZmZlY3QgZGFuIGluZGlyZWN0IGVmZmVjdCBqdWdhIG1lbnVuanVra2FuIGJhaHdhIHRpZGFrIHRlcmRhcGF0IHBlbmdhcnVoIHlhbmcgc2lnbmlmaWthbiBzZWNhcmEgc3RhdGlzdGlrIGJhaWsgZGFyaSBrYXJha3RlcmlzdGlrIHdpbGF5YWggaXR1IHNlbmRpcmkgbWF1cHVuIGRhcmkga2FyYWt0ZXJpc3RpayB3aWxheWFoIHRldGFuZ2dhLiBUZW11YW4gaW5pIG1lbnVuanVra2FuIGJhaHdhIHZhcmlhYmVsIGZhc2lsaXRhcyBrZXNlaGF0YW4sIHBlcnNlbnRhc2UgcGVuZHVkdWsgbWlza2luLCBrZXBhZGF0YW4gcGVuZHVkdWssIGFrc2VzIGFpciBtaW51bSBsYXlhaywgc2FuaXRhc2kgbGF5YWssIGRhbiBqdW1sYWgga2FzdXMgSElWIGJlbHVtIG1hbXB1IG1lbmplbGFza2FuIHZhcmlhc2kgSW5jaWRlbmNlIFJhdGUgVEIgc2VjYXJhIHBhcnNpYWwgcGFkYSBkYXRhIHlhbmcgZGlndW5ha2FuIGRhbGFtIHBlbmVsaXRpYW4gaW5pLg0KDQpLZXRpZGFrc2lnbmlmaWthbmFuIHNlbHVydWggdmFyaWFiZWwgZGFwYXQgZGlzZWJhYmthbiBvbGVoIGJlYmVyYXBhIGZha3Rvci4gUGVydGFtYSwganVtbGFoIG9ic2VydmFzaSB5YW5nIHJlbGF0aWYgdGVyYmF0YXMsIHlhaXR1IGhhbnlhIDI3IGthYnVwYXRlbi9rb3RhLCBkYXBhdCBtZW5ndXJhbmdpIGtla3VhdGFuIHN0YXRpc3RpayBtb2RlbCBkYWxhbSBtZW5kZXRla3NpIHBlbmdhcnVoIHZhcmlhYmVsLiBLZWR1YSwga2VqYWRpYW4gVEIgbWVydXBha2FuIGZlbm9tZW5hIHlhbmcga29tcGxla3MgZGFuIGRpcGVuZ2FydWhpIG9sZWggYmVyYmFnYWkgZmFrdG9yIGxhaW4geWFuZyBiZWx1bSBkaW1hc3Vra2FuIGtlIGRhbGFtIG1vZGVsLCBzZXBlcnRpIGtvbmRpc2kgaHVuaWFuLCBrZXBhZGF0YW4gcnVtYWggdGFuZ2dhLCBzdGF0dXMgZ2l6aSwgcGVyaWxha3UgcGVuY2FyaWFuIHBlbmdvYmF0YW4sIGtlYmVyaGFzaWxhbiBwZW5nb2JhdGFuLCBtb2JpbGl0YXMgcGVuZHVkdWssIGRhbiBmYWt0b3IgbGluZ2t1bmdhbi4gS2V0aWdhLCBwZW5nZ3VuYWFuIGRhdGEgYWdyZWdhdCBwYWRhIHRpbmdrYXQga2FidXBhdGVuL2tvdGEgYmVycG90ZW5zaSBtZW5pbWJ1bGthbiBlZmVrIGhldGVyb2dlbml0YXMgaW50ZXJuYWwgd2lsYXlhaCB5YW5nIHRpZGFrIGRhcGF0IGRpdGFuZ2thcCBvbGVoIG1vZGVsLg0KDQpTZWNhcmEga2VzZWx1cnVoYW4sIHBlbmVsaXRpYW4gaW5pIG1lbnVuanVra2FuIGJhaHdhIHBlbmRla2F0YW4gc3Bhc2lhbCBtZW1iZXJpa2FuIHBlbmluZ2thdGFuIGtlbWFtcHVhbiBtb2RlbCBkYWxhbSBtZW5qZWxhc2thbiB2YXJpYXNpIGtlamFkaWFuIFRCIGRpYmFuZGluZ2thbiBwZW5kZWthdGFuIG5vbnNwYXNpYWwuIE5hbXVuIGRlbWlraWFuLCBiZWx1bSBkaXRlbXVrYW4gYnVrdGkgc3RhdGlzdGlrIHlhbmcgY3VrdXAgdW50dWsgbWVueWF0YWthbiBiYWh3YSBmYWt0b3IgZmFzaWxpdGFzIGtlc2VoYXRhbiwga2VtaXNraW5hbiwga2VwYWRhdGFuIHBlbmR1ZHVrLCBha3NlcyBhaXIgbWludW0gbGF5YWssIHNhbml0YXNpIGxheWFrLCBtYXVwdW4gSElWIGJlcnBlbmdhcnVoIHNlY2FyYSBsYW5nc3VuZyBtYXVwdW4gdGlkYWsgbGFuZ3N1bmcgdGVyaGFkYXAgSW5jaWRlbmNlIFJhdGUgVEIgZGkgSmF3YSBCYXJhdCBwYWRhIHRhaHVuIDIwMjUuIFRlbXVhbiBpbmkgbWVuZ2luZGlrYXNpa2FuIHBlcmx1bnlhIHBlbmdlbWJhbmdhbiBtb2RlbCBkZW5nYW4gdmFyaWFiZWwgeWFuZyBsZWJpaCBrb21wcmVoZW5zaWYgc2VydGEgcGVuZ2d1bmFhbiBkYXRhIHNwYXNpby10ZW1wb3JhbCB1bnR1ayBtZW1wZXJvbGVoIHBlbWFoYW1hbiB5YW5nIGxlYmloIGJhaWsgbWVuZ2VuYWkgZmFrdG9yLWZha3RvciB5YW5nIG1lbWVuZ2FydWhpIHBlcnNlYmFyYW4gVEIuDQoNCiMjIDQuMiBLZXRlcmJhdGFzYW4gUGVuZWxpdGlhbg0KDQpQZW5lbGl0aWFuIGluaSBtZW1pbGlraSBiZWJlcmFwYSBrZXRlcmJhdGFzYW4geWFpdHUgc2ViYWdhaSBiZXJpa3V0Og0KDQoxLiBKdW1sYWggdW5pdCBvYnNlcnZhc2kgcmVsYXRpZiB0ZXJiYXRhcywgeWFpdHUgaGFueWEgMjcga2FidXBhdGVuL2tvdGEgZGkgUHJvdmluc2kgSmF3YSBCYXJhdC4gSnVtbGFoIG9ic2VydmFzaSB5YW5nIGtlY2lsIGRhcGF0IG1lbmd1cmFuZ2kga2VrdWF0YW4gc3RhdGlzdGlrIChzdGF0aXN0aWNhbCBwb3dlcikgbW9kZWwgZGFsYW0gbWVuZGV0ZWtzaSBwZW5nYXJ1aCB2YXJpYWJlbCBzZWNhcmEgcGFyc2lhbC4NCjIuIERhdGEgeWFuZyBkaWd1bmFrYW4gYmVyc2lmYXQgY3Jvc3Mtc2VjdGlvbmFsIHBhZGEgdGFodW4gMjAyNSBzZWhpbmdnYSBiZWx1bSBtYW1wdSBtZW5nZ2FtYmFya2FuIGRpbmFtaWthIHBlcnViYWhhbiBrZWphZGlhbiBUdWJlcmt1bG9zaXMgKFRCKSBkYXJpIHdha3R1IGtlIHdha3R1IG1hdXB1biBtZW5naWRlbnRpZmlrYXNpIHBvbGEgdGVtcG9yYWwgcGVueWViYXJhbiBwZW55YWtpdC4NCjMuIFZhcmlhYmVsIHBlbmplbGFzIHlhbmcgZGlndW5ha2FuIG1hc2loIHRlcmJhdGFzIHBhZGEgZmFrdG9yIHNvc2lhbCwgZWtvbm9taSwgZGFuIGtlc2VoYXRhbiB0ZXJ0ZW50dS4gQmViZXJhcGEgZmFrdG9yIHlhbmcgc2VjYXJhIHRlb3JpdGlzIGJlcmh1YnVuZ2FuIGRlbmdhbiBUQiwgc2VwZXJ0aSBrZXBhZGF0YW4gaHVuaWFuLCBzdGF0dXMgZ2l6aSwgdGluZ2thdCBwZW5kaWRpa2FuLCBwZXJpbGFrdSBrZXNlaGF0YW4sIGNha3VwYW4gcGVuZ29iYXRhbiBUQiwgbW9iaWxpdGFzIHBlbmR1ZHVrLCBkYW4ga29uZGlzaSBsaW5na3VuZ2FuIGZpc2lrIGJlbHVtIGRpbWFzdWtrYW4ga2UgZGFsYW0gbW9kZWwuDQo0LiBBbmFsaXNpcyBkaWxha3VrYW4gcGFkYSB0aW5na2F0IGFncmVnYXQga2FidXBhdGVuL2tvdGEsIHNlaGluZ2dhIGJlbHVtIG1hbXB1IG1lbmFuZ2thcCB2YXJpYXNpIGthcmFrdGVyaXN0aWsgZGFuIHJpc2lrbyBUQiBwYWRhIHRpbmdrYXQgd2lsYXlhaCB5YW5nIGxlYmloIHJpbmNpLCBzZXBlcnRpIGtlY2FtYXRhbiBhdGF1IGRlc2Eva2VsdXJhaGFuLiBLb25kaXNpIGluaSBiZXJwb3RlbnNpIG1lbmltYnVsa2FuIGVjb2xvZ2ljYWwgZmFsbGFjeSwgeWFpdHUga2VzaW1wdWxhbiBwYWRhIHRpbmdrYXQga2Vsb21wb2sgeWFuZyBiZWx1bSB0ZW50dSBiZXJsYWt1IHBhZGEgdGluZ2thdCBpbmRpdmlkdS4NCjUuIE1vZGVsIFNMWCBoYW55YSBtZW1wZXJ0aW1iYW5na2FuIGVmZWsgc3Bhc2lhbCBwYWRhIHZhcmlhYmVsIHBlbmplbGFzIChYKSBkYW4gYmVsdW0gbWVuZ2Frb21vZGFzaSBrZW11bmdraW5hbiBrZXRlcmdhbnR1bmdhbiBzcGFzaWFsIHlhbmcgbGViaWgga29tcGxla3MgcGFkYSB2YXJpYWJlbCByZXNwb24gbWF1cHVuIGdhbGF0IG1vZGVsLiBPbGVoIGthcmVuYSBpdHUsIG1vZGVsIHNwYXNpYWwgbGFpbiBzZXBlcnRpIFNBUiwgU0VNLCBTRE0sIGF0YXUgcGVuZGVrYXRhbiBCYXllc2lhbiBzcGFzaWFsIGRhcGF0IGRpcGVydGltYmFuZ2thbiBwYWRhIHBlbmVsaXRpYW4gc2VsYW5qdXRueWEuDQo2LiBUaWRhayBkaXRlbXVrYW5ueWEgcGVuZ2FydWggeWFuZyBzaWduaWZpa2FuIHNlY2FyYSBwYXJzaWFsIHBhZGEgc2VsdXJ1aCB2YXJpYWJlbCBwZW5lbGl0aWFuIG1lbmdpbmRpa2FzaWthbiBiYWh3YSBtYXNpaCB0ZXJkYXBhdCBmYWt0b3ItZmFrdG9yIGxhaW4geWFuZyBiZWx1bSB0ZXJha29tb2Rhc2kgZGFsYW0gbW9kZWwgZGFuIGJlcnBvdGVuc2kgbWVtZW5nYXJ1aGkgdmFyaWFzaSBJbmNpZGVuY2UgUmF0ZSBUQiBkaSBKYXdhIEJhcmF0Lg0KDQoNCiMgNS4JS2VzaW1wdWxhbiBkYW4gU2FyYW4NCg0KIyMgNS4xIEtlc2ltcHVsYW4NCg0KQmVyZGFzYXJrYW4gaGFzaWwgYW5hbGlzaXMgc3Bhc2lhbCB0ZXJoYWRhcCBJbmNpZGVuY2UgUmF0ZSAoSVIpIFR1YmVya3Vsb3NpcyAoVEIpIGRpIFByb3ZpbnNpIEphd2EgQmFyYXQgdGFodW4gMjAyNSBtZW5nZ3VuYWthbiBwZW5kZWthdGFuIFNwYXRpYWwgTGFnIG9mIFggKFNMWCksIGRpcGVyb2xlaCBiZWJlcmFwYSBrZXNpbXB1bGFuIHNlYmFnYWkgYmVyaWt1dDoNCg0KMS4gRGlzdHJpYnVzaSBJbmNpZGVuY2UgUmF0ZSBUQiBkaSBKYXdhIEJhcmF0IG1lbnVuanVra2FuIHZhcmlhc2kgYW50YXIga2FidXBhdGVuL2tvdGEuIFdpbGF5YWggZGVuZ2FuIElSIHRpbmdnaSBjZW5kZXJ1bmcgdGVya29uc2VudHJhc2kgcGFkYSBiZWJlcmFwYSB3aWxheWFoIHBlcmtvdGFhbiB5YW5nIG1lbWlsaWtpIGthcmFrdGVyaXN0aWsga2VwYWRhdGFuIGRhbiBha3Rpdml0YXMgcGVuZHVkdWsgeWFuZyB0aW5nZ2kuDQoyLiBIYXNpbCB1amkgTW9yYW4ncyBJIG1lbnVuanVra2FuIGJhaHdhIHNlYmFnaWFuIGJlc2FyIHZhcmlhYmVsIHBlbmplbGFzLCB5YWl0dSBwZW5kdWR1ayBtaXNraW4sIGtlcGFkYXRhbiBwZW5kdWR1aywgYWtzZXMgYWlyIG1pbnVtIGxheWFrLCBzYW5pdGFzaSBsYXlhaywgZGFuIGp1bWxhaCBrYXN1cyBISVYgbWVtaWxpa2kgcG9sYSBwZW5nZWxvbXBva2FuIHNwYXNpYWwgKHNwYXRpYWwgY2x1c3RlcmluZykgeWFuZyBzaWduaWZpa2FuLCBzZWhpbmdnYSBwZW5kZWthdGFuIHNwYXNpYWwgcmVsZXZhbiBkaWd1bmFrYW4gZGFsYW0gYW5hbGlzaXMuDQozLiBNb2RlbCBPTFMgbWVudW5qdWtrYW4gYmFod2EgdmFyaWFiZWwtdmFyaWFiZWwgcGVuZWxpdGlhbiBzZWNhcmEgc2ltdWx0YW4gbWFtcHUgbWVuamVsYXNrYW4gdmFyaWFzaSBJbmNpZGVuY2UgUmF0ZSBUQiwgbmFtdW4gcmVzaWR1YWwgbW9kZWwgbWFzaWggbWVuZ2FuZHVuZyBhdXRva29yZWxhc2kgc3Bhc2lhbCBzZWhpbmdnYSBiZWx1bSBtYW1wdSBtZW5hbmdrYXAga2V0ZXJrYWl0YW4gYW50YXJ3aWxheWFoIHNlY2FyYSBtZW1hZGFpLg0KNC4gTW9kZWwgU0xYIG1lbWJlcmlrYW4gcGVyZm9ybWEgeWFuZyBsZWJpaCBiYWlrIGRpYmFuZGluZ2thbiBtb2RlbCBPTFMgZGVuZ2FuIG5pbGFpIGtvZWZpc2llbiBkZXRlcm1pbmFzaSAoUrIpIHlhbmcgbGViaWggdGluZ2dpIGRhbiBuaWxhaSBSTVNFIHlhbmcgbGViaWggcmVuZGFoLiBIYWwgaW5pIG1lbnVuanVra2FuIGJhaHdhIGluZm9ybWFzaSBzcGFzaWFsIGFudGFyd2lsYXlhaCBtZW1iZXJpa2FuIHRhbWJhaGFuIGtlbWFtcHVhbiBkYWxhbSBtZW5qZWxhc2thbiB2YXJpYXNpIGtlamFkaWFuIFRCLg0KNS4gTWVza2lwdW4gZGVtaWtpYW4sIHNlbHVydWggdmFyaWFiZWwgbG9rYWwgbWF1cHVuIHZhcmlhYmVsIGxhZyBzcGFzaWFsIHRpZGFrIG1lbnVuanVra2FuIHBlbmdhcnVoIHlhbmcgc2lnbmlmaWthbiBzZWNhcmEgcGFyc2lhbCB0ZXJoYWRhcCBJbmNpZGVuY2UgUmF0ZSBUQi4gSGFzaWwgYW5hbGlzaXMgZGlyZWN0IGVmZmVjdCBkYW4gaW5kaXJlY3QgZWZmZWN0IGp1Z2EgdGlkYWsgbWVudW5qdWtrYW4gYWRhbnlhIGVmZWsgbGltcGFoYW4gc3Bhc2lhbCAoc3BpbGxvdmVyIGVmZmVjdCkgeWFuZyBzaWduaWZpa2FuIHBhZGEgdGFyYWYgc2lnbmlmaWthbnNpIDUlLg0KU2VjYXJhIGtlc2VsdXJ1aGFuLCBwZW5lbGl0aWFuIGluaSBtZW51bmp1a2thbiBiYWh3YSBwZW5kZWthdGFuIHNwYXNpYWwgcGVudGluZyBkYWxhbSBwZW1vZGVsYW4ga2VqYWRpYW4gVEIgZGkgSmF3YSBCYXJhdCwgbmFtdW4gdmFyaWFiZWwgeWFuZyBkaWd1bmFrYW4gZGFsYW0gcGVuZWxpdGlhbiBpbmkgYmVsdW0gbWFtcHUgbWVuamVsYXNrYW4gZmFrdG9yLWZha3RvciB5YW5nIG1lbWVuZ2FydWhpIEluY2lkZW5jZSBSYXRlIFRCIHNlY2FyYSBwYXJzaWFsLg0KDQojIyA1LjIgU2FyYW4gDQoNCkJlcmRhc2Fya2FuIGhhc2lsIHBlbmVsaXRpYW4geWFuZyBkaXBlcm9sZWgsIGJlYmVyYXBhIHNhcmFuIHlhbmcgZGFwYXQgZGliZXJpa2FuIGFkYWxhaCBzZWJhZ2FpIGJlcmlrdXQ6DQoNCjEuICBQZW1lcmludGFoIGRhZXJhaCBkYW4gaW5zdGFuc2kga2VzZWhhdGFuIHBlcmx1IHRldGFwIG1lbXByaW9yaXRhc2thbiBwcm9ncmFtIHBlbmdlbmRhbGlhbiBUQiBwYWRhIHdpbGF5YWggZGVuZ2FuIEluY2lkZW5jZSBSYXRlIHRpbmdnaSBtZWxhbHVpIHBlbmluZ2thdGFuIGRldGVrc2kgZGluaSwgcGVuZ29iYXRhbiwgZGFuIHBlbWFudGF1YW4ga2FzdXMgc2VjYXJhIGJlcmtlbGFuanV0YW4uDQoyLiBQZW5lbGl0aWFuIHNlbGFuanV0bnlhIGRpc2FyYW5rYW4gbWVuYW1iYWhrYW4gdmFyaWFiZWwgeWFuZyBsZWJpaCBzcGVzaWZpayB0ZXJrYWl0IGZha3RvciByaXNpa28gVEIsIHNlcGVydGkga29uZGlzaSBodW5pYW4sIGtlcGFkYXRhbiBydW1haCB0YW5nZ2EsIHRpbmdrYXQgcGVuZGlkaWthbiwgc3RhdHVzIGdpemksIG1vYmlsaXRhcyBwZW5kdWR1aywgY2FrdXBhbiBwZW5nb2JhdGFuIFRCLCBkYW4gZmFrdG9yIGxpbmdrdW5nYW4gbGFpbm55YS4NCjMuIFBlbmdndW5hYW4gZGF0YSBzcGFzaW8tdGVtcG9yYWwgYXRhdSBkYXRhIHBhbmVsIHNwYXNpYWwgcGVybHUgZGlwZXJ0aW1iYW5na2FuIGFnYXIgZGFwYXQgbWVuYW5na2FwIGRpbmFtaWthIHBlbnllYmFyYW4gVEIgZGFyaSB3YWt0dSBrZSB3YWt0dSBkYW4gbWVuZ2lkZW50aWZpa2FzaSBwZXJ1YmFoYW4gcG9sYSBzcGFzaWFsIHNlY2FyYSBsZWJpaCBha3VyYXQuDQo0LiAgTW9kZWwgc3Bhc2lhbCB5YW5nIGxlYmloIGtvbXBsZWtzIHNlcGVydGkgU3BhdGlhbCBEdXJiaW4gTW9kZWwgKFNETSksIFNwYXRpYWwgRXJyb3IgTW9kZWwgKFNFTSksIFNwYXRpYWwgQXV0b3JlZ3Jlc3NpdmUgTW9kZWwgKFNBUiksIGF0YXUgcGVuZGVrYXRhbiBCYXllc2lhbiBzcGFzaWFsIHNlcGVydGkgQllNIGRhbiBCWU0yIGRhcGF0IGRpZ3VuYWthbiB1bnR1ayBtZW1wZXJvbGVoIHBlbWFoYW1hbiB5YW5nIGxlYmloIGtvbXByZWhlbnNpZiBtZW5nZW5haSBmYWt0b3ItZmFrdG9yIHlhbmcgbWVtZW5nYXJ1aGkga2VqYWRpYW4gVEIuDQo1LiBBbmFsaXNpcyBwYWRhIHRpbmdrYXQgd2lsYXlhaCB5YW5nIGxlYmloIHJpbmNpLCBzZXBlcnRpIGtlY2FtYXRhbiBhdGF1IGRlc2Eva2VsdXJhaGFuLCBwZXJsdSBkaWxha3VrYW4gdW50dWsgbWVuZ3VyYW5naSBoZXRlcm9nZW5pdGFzIGRhbGFtIHNhdHUgd2lsYXlhaCBhZG1pbmlzdHJhc2kgZGFuIG1lbmdoYXNpbGthbiBpbmZvcm1hc2kgeWFuZyBsZWJpaCBzcGVzaWZpayBiYWdpIHBlcmVuY2FuYWFuIHByb2dyYW0ga2VzZWhhdGFuLg0KDQojIERhZnRhciBQdXN0YWthIA0KDQoxLiBBbG1hLCBMLiBSLiwgT2xpdmlvbml0YSwgVi4sICYgV2FyZGFuaSwgSC4gRS4gKDIwMjQpLiAqQW4gZWNvbG9naWNhbCBzdHVkeSBvZiBkZXRlcm1pbmFudHMgb2YgdGhlIGluY2lkZW5jZSBvZiB0dWJlcmN1bG9zaXMgaW4gTWFsYW5nIFJheWEgYXJlYSouIFByZXZlbnRpYTogVGhlIEluZG9uZXNpYW4gSm91cm5hbCBvZiBQdWJsaWMgSGVhbHRoLCA5KDEpLCAxMTItMTIwLiBodHRwczovL2RvaS5vcmcvMTAuMTc5NzcvdW0wNDR2OWkxMjAyNHAxMTItMTIwDQoNCjIuIEFuc2VsaW4sIEwuICgxOTk1KS4gKkxvY2FsIGluZGljYXRvcnMgb2Ygc3BhdGlhbCBhc3NvY2lhdGlvbiBMSVNBKi4gR2VvZ3JhcGhpY2FsIEFuYWx5c2lzLCAyNygyKSwgOTMtMTE1LiBodHRwczovL2RvaS5vcmcvMTAuMTExMS9qLjE1MzgtNDYzMi4xOTk1LnRiMDAzMzgueA0KDQozLiBBdGlsbGFoLCBDLiBOLiwgV3VsYW5kYXJpLCBSLiBBLiwgJiBLdXJuaWFzYXJpLCBGLiAoMjAyMykuICpFbnZpcm9ubWVudGFsIGZhY3RvcnMgYW5kIHB1bG1vbmFyeSB0dWJlcmN1bG9zaXMgY2FzZXMgaW4gQmFuZHVuZyBDaXR5Ki4gSnVybmFsIElsbWlhaCBLZXNlaGF0YW4gTWFzeWFyYWthdCwgMTUoNCksIDE2Ny0xNzUuIGh0dHBzOi8vZG9pLm9yZy8xMC41MjAyMi9qaWttLnYxNWk0LjU2Ng0KDQo0LiBCaXZhbmQsIFIuIFMuLCBQZWJlc21hLCBFLiwgJiBH821lei1SdWJpbywgVi4gKDIwMTMpLiAqQXBwbGllZCBzcGF0aWFsIGRhdGEgYW5hbHlzaXMgd2l0aCBSKiAoMm5kIGVkLikuIFNwcmluZ2VyLg0KDQo1LiBDbGlmZiwgQS4gRC4sICYgT3JkLCBKLiBLLiAoMTk4MSkuICpTcGF0aWFsIHByb2Nlc3NlczogTW9kZWxzIGFuZCBhcHBsaWNhdGlvbnMqLiBQaW9uLg0KDQo2LiBEaW5hcyBLZXNlaGF0YW4gUHJvdmluc2kgSmF3YSBCYXJhdC4gKDIwMjUpLiAqSnVtbGFoIGthc3VzIHBlbnlha2l0IHR1YmVya3Vsb3NpcyBiZXJkYXNhcmthbiBrYWJ1cGF0ZW4va290YSBkaSBKYXdhIEJhcmF0Ki4gT3BlbiBEYXRhIEphYmFyLiBodHRwczovL29wZW5kYXRhLmphYmFycHJvdi5nby5pZC9pZC9kYXRhc2V0L2p1bWxhaC1rYXN1cy1wZW55YWtpdC10dWJlcmt1bG9zaXMtYmVyZGFzYXJrYW4ta2FidXBhdGVua290YS1kaS1qYXdhLWJhcmF0DQoNCjcuIER6YWtpeWFoLCBSLiBOLiwgS2FyaW1hLCBVLiBRLiwgU2ltYW5qb3JhbmcsIEMuLCAmIEFwcmluaW5nc2loLiAoMjAyMykuICpEZXRlcm1pbmFuIGtlamFkaWFuIHR1YmVya3Vsb3NpcyBwYXJ1IHBhZGEgdXNpYSBkZXdhc2EqLiBKdXJuYWwgUGVuZWxpdGlhbiBLZXNlaGF0YW4gU3VhcmEgRm9yaWtlcy4NCg0KOC4gRmFya2hhbiwgQS4sIFBha2FzaSwgVC4gVC4sIFN1bGlzdHlvLCBTLiwgU2Fsc2FiaWxhLCBBLiwgTWF1ZGUsIFIuIEouLCAmIFJvdGVqYW5hcHJhc2VydCwgQy4gKDIwMjYpLiAqU3BhdGlvdGVtcG9yYWwgZXBpZGVtaW9sb2d5IGFuZCBhc3NvY2lhdGVkIHJpc2sgZmFjdG9ycyBvZiB0dWJlcmN1bG9zaXMgaW5jaWRlbmNlIGFuZCBtb3J0YWxpdHkgaW4gSW5kb25lc2lhIDIwMTctMjAyMjogQSBuYXRpb253aWRlIHNwYWNlLXRpbWUgaGllcmFyY2hpY2FsIGFuYWx5c2lzKi4gUG9wdWxhdGlvbiBIZWFsdGggTWV0cmljcywgMjQsIDEyLiBodHRwczovL2RvaS5vcmcvMTAuMTE4Ni9zMTI5NjMtMDI2LTAwNDU4LTUNCg0KOS4gSGFuZGF5YW5pLCBTLiwgTXVzZmlyYWgsIE0uLCAmIEFwcmlhbmEsIEEuICgyMDI0KS4gKkRldGVybWluYW50cyBvZiBwdWxtb25hcnkgdHViZXJjdWxvc2lzKi4gSnVybmFsIElsbWlhaCBLZXNlaGF0YW4sIDYoMSksIDQ1LTU0LiBodHRwczovL2RvaS5vcmcvMTAuMzY1OTAvamlrYS52NmkxLjM3NA0KDQoxMC4gSGFxLCBBLiwgQWNobWFkaSwgVS4gRi4sICYgU3VzYW5uYSwgRC4gKDIwMjApLiAqQW5hbGlzaXMgc3Bhc2lhbCBUQiBwYXJ1Ki4gSnVybmFsIEVrb2xvZ2kgS2VzZWhhdGFuLCAxOCgzKS4gaHR0cHM6Ly9kb2kub3JnLzEwLjIyNDM1L2play52M2kxOC44MA0KDQoxMS4gSW5nZ2FycHV0cmksIFkuIFIuLCBUcmloYW5kaW5pLCBJLiwgTm92aXRhc2FyaSwgUC4gRC4sICYgTWFrZnVsLCBNLiBSLiAoMjAyMykuICpTcGF0aWFsIGFuYWx5c2lzIG9mIHR1YmVyY3Vsb3NpcyBjYXNlcyBkaWZmdXNpb24gYmFzZWQgb24gcG9wdWxhdGlvbiBkZW5zaXR5IGluIEJla2FzaSBSZWdlbmN5IGluIDIwMTctMjAyMSouIEJlcml0YSBLZWRva3RlcmFuIE1hc3lhcmFrYXQsIDM5KDEpLCBlNjQ2Mi4gaHR0cHM6Ly9kb2kub3JnLzEwLjIyMTQ2L2JrbS52MzlpMDEuNjQ2Mg0KDQoxMi4gS2VtZW50ZXJpYW4gS2VzZWhhdGFuIFJlcHVibGlrIEluZG9uZXNpYS4gKDIwMjUpLiAqUHJvZmlsIGtlc2VoYXRhbiBJbmRvbmVzaWEgMjAyNCouDQoNCjEzLiBLcmlzdGlhbmluZ3J1bSwgRS4gTi4gKDIwMjQpLiAqS2VwYWRhdGFuIHBlbmR1ZHVrIGRhbiBUQiBwYXJ1KiAoU2tyaXBzaSkuIFVuaXZlcnNpdGFzIER1dGEgQmFuZ3NhLg0KDQoxNC4gTGFvbGksIEguIEEuLCBOYXppcmEsIEEuLCBGYWxlcmlhLCBJLiwgVGFyaWdhbiwgQi4sICYgR2lyc2FuZywgVi4gSS4gKDIwMjQpLiAqQ2FzZXMgb2YgcHVsbW9uYXJ5IHR1YmVyY3Vsb3NpcyBhbmQgcG9wdWxhdGlvbiBkZW5zaXR5Ki4gTUlISElDbyBDb25mZXJlbmNlIFByb2NlZWRpbmdzLg0KDQoxNS4gTWFkYW8sIEUuIFAuLCBIZXJtYXdhdGksIEUuLCBQdXRyaSwgTi4gQS4gQS4sICYgTWFrZnVsLCBNLiBSLiAoMjAyNCkuICpFdmFsdWF0aW5nIHNwYXRpYWwgYW5hbHlzaXMgb2YgdHViZXJjdWxvc2lzIHByZXZhbGVuY2UgdG8gaWRlbnRpZnkgcHJpb3JpdHkgZGlzdHJpY3RzIG9yIG11bmljaXBhbGl0aWVzIHRoYXQgbmVlZCBwb2xpY3kgYXR0ZW50aW9uIGluIFdlc3QgSmF2YSouIEJlcml0YSBLZWRva3RlcmFuIE1hc3lhcmFrYXQsIDQwKDQpLiBodHRwczovL2RvaS5vcmcvMTAuMjIxNDYvYmttLnY0MGkwNC4xMjE2MA0KDQoxNi4gTW9udGdvbWVyeSwgRC4gQy4sIFBlY2ssIEUuIEEuLCAmIFZpbmluZywgRy4gRy4gKDIwMjEpLiAqSW50cm9kdWN0aW9uIHRvIGxpbmVhciByZWdyZXNzaW9uIGFuYWx5c2lzKiAoNnRoIGVkLikuIFdpbGV5Lg0KDQoxNy4gTnVyZGluLCBBLiwgZXQgYWwuICgyMDI1KS4gKkFuYWxpc2lzIGZha3RvciByaXNpa28gVEIqLiBKdXJuYWwgS2VzZWhhdGFuIFlhbWFzaSBNYWthc3NhciwgOSgyKSwgMS05Lg0KDQoxOC4gUHV0cmEsIEkuIEcuIE4uIEUuLCBSYWhtYW5pYXRpLCBNLiwgRXJ5YW5kbywgVC4sICYgU2lwYWh1dGFyLCBULiAoMjAyMikuICpNb2RlbGluZyB0aGUgcHJldmFsZW5jZSBvZiB0dWJlcmN1bG9zaXMgaW4gSmF2YSwgSW5kb25lc2lhOiBBbiBlY29sb2dpY2FsIHN0dWR5IHVzaW5nIGdlb2dyYXBoaWNhbGx5IHdlaWdodGVkIHJlZ3Jlc3Npb24qLiBKb3VybmFsIG9mIFBvcHVsYXRpb24gYW5kIFNvY2lhbCBTdHVkaWVzLiBodHRwczovL3NvMDMudGNpLXRoYWlqby5vcmcvaW5kZXgucGhwL2pwc3MvYXJ0aWNsZS92aWV3LzI1NzQ3Nw0KDQoxOS4gUmFobWF3YXRpLCBZLiwgSmFtaWwsIEkuIFIuLCBIaWRheWFoLCBJLiwgS3VzdW1hd2FyZGFuaSwgRC4sICYgV2lib3dvLCBXLiAoMjAyNikuICpTcGF0aWFsIGVjb25vbWV0cmljIGFuYWx5c2lzIG9mIHRoZSBpbXBhY3Qgb2YgaGVhbHRoIGluZnJhc3RydWN0dXJlIG9uIFRCQyBwYXRpZW50czogU3R1ZHkgY2FzZSBpbiBJbmRvbmVzaWEgcHJvdmluY2VzIGxldmVsKi4gSW50ZXJuYXRpb25hbCBSZXZpZXcgZm9yIFNwYXRpYWwgUGxhbm5pbmcgYW5kIFN1c3RhaW5hYmxlIERldmVsb3BtZW50LCAxNCgxKSwgOTYtMTE3LiBodHRwczovL2RvaS5vcmcvMTAuMTQyNDYvaXJzcHNkLjE0LjFfOTYNCg0KMjAuIFJvc2FkeSwgRC4gUy4sIFp1bGZhLCBOLiBSLiBBLiwgJiBQcmF0YW1hLCBTLiBCLiAoMjAyNCkuICpTcGF0aWFsIGFuYWx5c2lzIFRCIEJhbmR1bmcqLiBHbG9iYWwgTWVkaWNhbCAmIEhlYWx0aCBDb21tdW5pY2F0aW9uLCAxMigxKS4gaHR0cHM6Ly9kb2kub3JnLzEwLjI5MzEzL2dtaGMudjEyaTEuMTI0MTANCg0KMjEuIFNhc21pdGEsIFMuLCBKdW5haWQsIEouLCAmIEFpbnVyYWZpcSwgQS4gKDIwMTcpLiAqUG9sYSBzcGFzaWFsIFRCIHBhcnUqLiBKdXJuYWwgSWxtaWFoIE1haGFzaXN3YSBLZXNlaGF0YW4gTWFzeWFyYWthdC4NCg0KMjIuIFNoYWgsIFMuIEEuLCBWZWxhcmRlLCBSLiwgQW1pbmksIEguLCBldCBhbC4gKDIwMTgpLiAqTWV0aG9kcyB1c2VkIGluIHRoZSBzcGF0aWFsIGFuYWx5c2lzIG9mIHR1YmVyY3Vsb3NpcyBlcGlkZW1pb2xvZ3k6IEEgc3lzdGVtYXRpYyByZXZpZXcqLiBCTUMgUHVibGljIEhlYWx0aC4gaHR0cHM6Ly9kb2kub3JnLzEwLjExODYvczEyODg5LTAxOC01NTU4LTQNCg0KMjMuIFNpaGFsb2hvLCBFLiBELiwgZXQgYWwuICgyMDIxKS4gKlBlbmdhcnVoIGtlbWlza2luYW4gdGVyaGFkYXAgVEIqLiBKb3VybmFsIG9mIEFwcGxpZWQgQnVzaW5lc3MgYW5kIEVjb25vbWljLCA3KDMpLiBodHRwczovL2RvaS5vcmcvMTAuMzA5OTgvamFiZS52N2kzLjY0NzANCg0KMjQuIFN1cnlhbmksIEYuIFQuLCAmIEliYWQsIE0uICgyMDIyKS4gKkZha3RvciBrZXBhZGF0YW4gZGFuIHNhbml0YXNpIHRlcmhhZGFwIFRCKi4gSnVybmFsIFNvc2lhbCBTYWlucywgMigxMCkuIGh0dHBzOi8vZG9pLm9yZy8xMC4zNjQxOC9qdXJuYWxzb3NhaW5zLnYyaTEwLjQ2OA0KDQoyNS4gVHVybmVyLCBSLiBELiwgZXQgYWwuICgyMDE3KS4gKlR1YmVyY3Vsb3NpcyBpbmZlY3Rpb3VzbmVzcyBhbmQgaG9zdCBzdXNjZXB0aWJpbGl0eSouIEpvdXJuYWwgb2YgSW5mZWN0aW91cyBEaXNlYXNlcywgMjE2LiBodHRwczovL2RvaS5vcmcvMTAuMTA5My9pbmZkaXMvaml4MzYxDQoNCjI2LiBXb3JsZCBIZWFsdGggT3JnYW5pemF0aW9uLiAoMjAyNSkuICpHbG9iYWwgdHViZXJjdWxvc2lzIHJlcG9ydCAyMDI1Ki4gV0hPLg0KDQoNCi0tLQ0KDQpMaW5rIERhdGEgZGFuIFNIUCA6IGh0dHBzOi8vZHJpdmUuZ29vZ2xlLmNvbS9kcml2ZS9mb2xkZXJzLzFlQUtYR3d3Qnc3S2lTaDhxWW9RamRVNWJYZThuaXhCZz91c3A9c2hhcmluZw0KDQpMaW5rIFJzaGlueSA6IA0KaHR0cHM6Ly9zcml5dWxpYW5hLnNoaW55YXBwcy5pby9EQVNIQk9BUkRfQU5BTElTSVNfU1BBU0lBTC8NCg==