Analytics of Amazon Prime Video
Case Study (Web Scraping)
1 Dataset
2 3 Tren / Poin Penting dari Data
library(tidyverse)
library(lubridate)
# 1. Tren jumlah konten berdasarkan 'type' (Movie vs TV Show)
type_trend <- data %>%
count(type) %>%
arrange(desc(n))
print(type_trend)## # A tibble: 2 × 2
## type n
## <chr> <int>
## 1 Movie 7814
## 2 TV Show 1854
# 2. Jumlah konten berdasarkan tahun rilis (release_year)
year_trend <- data %>%
count(release_year) %>%
arrange(desc(n))
print(year_trend)## # A tibble: 100 × 2
## release_year n
## <dbl> <int>
## 1 2021 1442
## 2 2020 962
## 3 2019 929
## 4 2018 623
## 5 2017 562
## 6 2016 521
## 7 2014 391
## 8 2015 378
## 9 2013 289
## 10 2011 252
## # ℹ 90 more rows
# 3. Top 5 negara dengan jumlah konten terbanyak (country)
country_trend <- data %>%
separate_rows(country, sep = ", ") %>%
count(country, sort = TRUE) %>%
top_n(5, n)
print(country_trend)## # A tibble: 5 × 2
## country n
## <chr> <int>
## 1 <NA> 8996
## 2 United States 334
## 3 India 246
## 4 United Kingdom 67
## 5 Canada 35
2.1 Interpretasi
2.1.1 1. Distribusi berdasarkan type (Movie vs TV Show):
- Movie: Terdapat 7.814 konten berupa film.
- TV Show: Terdapat 1.854 konten berupa acara TV.
Jumlah film (Movie) jauh lebih banyak dibandingkan dengan acara TV (TV Show). Ini menunjukkan bahwa platform (atau dataset) ini lebih banyak menyediakan film daripada serial atau acara TV.
2.1.2 2. Distribusi berdasarkan release_year (tahun rilis):
- Tahun dengan jumlah konten terbanyak adalah 2021 dengan 1.442 judul.
- Tahun 2020 dan 2019 juga menunjukkan jumlah yang cukup besar, masing-masing 962 dan 929 judul.
- Setelah itu, jumlah konten menurun secara bertahap ke tahun-tahun sebelumnya.
Tren menunjukkan peningkatan jumlah konten yang dirilis dalam beberapa tahun terakhir, khususnya di tahun 2020 dan 2021. Hal ini bisa mengindikasikan pertumbuhan produksi konten yang cukup pesat di platform tersebut.
2.1.3 3. Distribusi berdasarkan country (negara produksi):
- Banyak data country yang tidak terisi (NA) sebanyak 8.996, ini menunjukkan data negara produksi banyak yang kosong atau tidak tersedia.
- Dari data yang terisi, United States menjadi negara dengan jumlah konten terbanyak yaitu 334 judul.
- Diikuti oleh India (246), United Kingdom (67), dan Canada (35).
Meski banyak data yang kosong, terlihat bahwa sebagian besar konten berasal dari Amerika Serikat, India, dan Inggris. Ini mengindikasikan dominasi konten dari negara-negara tersebut di platform. Namun, banyak data yang tidak lengkap perlu diperhatikan untuk analisis lebih akurat.
3 Membersihkan dan Menyiapkan Data
library(DT)
data_clean <- data %>%
distinct() %>% # Hapus duplikat
drop_na(show_id, type, title, release_year) %>% # Hapus baris dengan NA di kolom penting
mutate(
date_added = mdy(date_added), # Ubah date_added ke format tanggal
type = as.factor(type), # Ubah ke faktor jika perlu
country = if_else(is.na(country), "Unknown", country), # Isi NA country dengan "Unknown"
duration_num = as.numeric(str_extract(duration, "\\d+")), # Ekstrak angka dari duration (misal "90 min" jadi 90)
release_year = as.integer(release_year)
) %>%
filter(!is.na(duration_num)) # Hapus baris yang gagal ekstrak duration
# Tampilkan tabel interaktif
datatable(data_clean,
options = list(pageLength = 5, # jumlah baris per halaman
autoWidth = TRUE),
rownames = FALSE)4 Visualisasi Data
library(tidyverse)
library(plotly)
# 1. Visualisasi jumlah konten berdasarkan 'type'
type_count <- data_clean %>%
count(type)
plot_type <- plot_ly(type_count, labels = ~type, values = ~n, type = 'pie') %>%
layout(title = 'Distribusi Tipe Konten',
legend = list(x = 0.1, y = 0.9))
plot_type# 2. Visualisasi jumlah konten berdasarkan 'release_year' (top 10 tahun terbesar)
top_years <- data_clean %>%
count(release_year) %>%
arrange(desc(n)) %>%
slice_max(n, n = 10) %>%
mutate(release_year = as.factor(release_year))
plot_year <- plot_ly(top_years, x = ~release_year, y = ~n, type = 'bar',
marker = list(color = 'royalblue')) %>%
layout(title = "Top 10 Tahun Rilis Terbanyak",
xaxis = list(title = "Tahun Rilis"),
yaxis = list(title = "Jumlah Konten"))
plot_year# 3. Visualisasi negara dengan jumlah konten terbanyak (top 10)
top_countries <- data_clean %>%
count(country) %>%
arrange(desc(n)) %>%
slice_max(n, n = 10) %>%
mutate(country = factor(country, levels = rev(unique(country))))
plot_country <- plot_ly(top_countries, x = ~n, y = ~country, type = 'bar', orientation = 'h',
marker = list(color = 'darkgreen')) %>%
layout(title = "Top 10 Negara Dengan Konten Terbanyak",
xaxis = list(title = "Jumlah Konten"),
yaxis = list(title = "Negara"))
plot_country4.1 Interpretasi
4.1.1 1. Distribusi Tipe Konten (Pie Chart)
- Insight: Sebagian besar konten yang tersedia adalah Movie (80.8%), sementara TV Show hanya 19.2%.
- Makna: Ini menunjukkan bahwa platform lebih fokus menyediakan konten dalam format film dibanding serial TV.
- Manfaat untuk stakeholder: Jika ingin memperluas pasar serial, maka perlu meningkatkan jumlah TV Show agar lebih seimbang.
4.1.2 2. Top 10 Tahun Rilis Terbanyak (Bar Chart)
- Insight: Terdapat tren peningkatan jumlah konten setiap tahun, terutama dari 2016 hingga puncaknya di 2021.
- Makna: Bisa jadi disebabkan oleh peningkatan produksi digital atau strategi platform untuk menambah konten baru secara agresif.
- Manfaat untuk stakeholder: Penting untuk mempertahankan tren positif ini dengan terus merilis konten baru secara konsisten setiap tahun.
4.1.3 3. Top 10 Negara dengan Konten Terbanyak (Horizontal Bar Chart)
- Insight: Sebagian besar data negara bertuliskan Unknown (tidak diketahui), namun dari data yang tersedia, United States, India, dan United Kingdom mendominasi.
- Makna: Ketidaktahuan asal negara bisa jadi disebabkan oleh data yang tidak lengkap. Sementara dominasi negara tertentu bisa menunjukkan preferensi produksi.
- Manfaat untuk stakeholder: Perlu perbaikan dalam pengisian metadata negara asal. Selain itu, bisa jadi peluang untuk meningkatkan konten dari negara lain agar lebih beragam.
LS0tDQp0aXRsZTogIkFuYWx5dGljcyBvZiBBbWF6b24gUHJpbWUgVmlkZW8iDQpzdWJ0aXRsZTogIkNhc2UgU3R1ZHkgKFdlYiBTY3JhcGluZykiDQphdXRob3I6IA0KICAiSXNuYWluaSBOdXIgSGFzYW5haCAoaXNuYWluaW5oYXNhbmFoMzlAZ21haWwuY29tKSINCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJvYm9ib29rOiAgICMgaHR0cHM6Ly9naXRodWIuY29tL2p1YmEvcm1kZm9ybWF0cw0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgdGh1bWJuYWlsczogdHJ1ZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgIGxpYl9kaXI6IGxpYnMNCiAgICBkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgY3NzOiAic3R5bGUgKDEpLmNzcyINCiAgICBwYXJhbXM6DQogIGVjaG86IGZhbHNlDQplZGl0b3Jfb3B0aW9uczogDQogIG1hcmtkb3duOiANCiAgICB3cmFwOiA3Mg0KLS0tDQoNCiMgRGF0YXNldA0KDQpgYGB7ciwgZWNobz1UUlVFLHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KHJlYWRyKQ0KDQojIEJhY2EgZGF0YQ0KZGF0YSA8LSByZWFkX2NzdigiZGF0YXNldC5jc3YiKQ0KDQojIFRhbXBpbGthbiB0YWJlbCBpbnRlcmFrdGlmDQpkYXRhdGFibGUoZGF0YSwgDQogICAgICAgICAgb3B0aW9ucyA9IGxpc3QocGFnZUxlbmd0aCA9IDUsIA0KICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9XaWR0aCA9IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoaW5nID0gVFJVRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxYID0gVFJVRSksDQogICAgICAgICAgY2FwdGlvbiA9ICdUYWJlbCBJbnRlcmFrdGlmIERhdGEgZGFyaSBkYXRhc2V0LmNzdicpDQpgYGANCg0KIyAzIFRyZW4gLyBQb2luIFBlbnRpbmcgZGFyaSBEYXRhDQoNCmBgYHtyLCBlY2hvPVRSVUUsd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCg0KIyAxLiBUcmVuIGp1bWxhaCBrb250ZW4gYmVyZGFzYXJrYW4gJ3R5cGUnIChNb3ZpZSB2cyBUViBTaG93KQ0KdHlwZV90cmVuZCA8LSBkYXRhICU+JQ0KICBjb3VudCh0eXBlKSAlPiUNCiAgYXJyYW5nZShkZXNjKG4pKQ0KDQpwcmludCh0eXBlX3RyZW5kKQ0KDQojIDIuIEp1bWxhaCBrb250ZW4gYmVyZGFzYXJrYW4gdGFodW4gcmlsaXMgKHJlbGVhc2VfeWVhcikNCnllYXJfdHJlbmQgPC0gZGF0YSAlPiUNCiAgY291bnQocmVsZWFzZV95ZWFyKSAlPiUNCiAgYXJyYW5nZShkZXNjKG4pKQ0KDQpwcmludCh5ZWFyX3RyZW5kKQ0KDQojIDMuIFRvcCA1IG5lZ2FyYSBkZW5nYW4ganVtbGFoIGtvbnRlbiB0ZXJiYW55YWsgKGNvdW50cnkpDQpjb3VudHJ5X3RyZW5kIDwtIGRhdGEgJT4lDQogIHNlcGFyYXRlX3Jvd3MoY291bnRyeSwgc2VwID0gIiwgIikgJT4lIA0KICBjb3VudChjb3VudHJ5LCBzb3J0ID0gVFJVRSkgJT4lDQogIHRvcF9uKDUsIG4pDQoNCnByaW50KGNvdW50cnlfdHJlbmQpDQpgYGANCg0KIyMgSW50ZXJwcmV0YXNpDQoNCg0KIyMjIDEuICoqRGlzdHJpYnVzaSBiZXJkYXNhcmthbiB0eXBlIChNb3ZpZSB2cyBUViBTaG93KToqKg0KDQoqICoqTW92aWU6KiogVGVyZGFwYXQgNy44MTQga29udGVuIGJlcnVwYSBmaWxtLg0KKiAqKlRWIFNob3c6KiogVGVyZGFwYXQgMS44NTQga29udGVuIGJlcnVwYSBhY2FyYSBUVi4NCg0KSnVtbGFoIGZpbG0gKE1vdmllKSBqYXVoIGxlYmloIGJhbnlhayBkaWJhbmRpbmdrYW4gZGVuZ2FuIGFjYXJhIFRWIChUViBTaG93KS4gSW5pIG1lbnVuanVra2FuIGJhaHdhIHBsYXRmb3JtIChhdGF1IGRhdGFzZXQpIGluaSBsZWJpaCBiYW55YWsgbWVueWVkaWFrYW4gZmlsbSBkYXJpcGFkYSBzZXJpYWwgYXRhdSBhY2FyYSBUVi4NCg0KIyMjIDIuICoqRGlzdHJpYnVzaSBiZXJkYXNhcmthbiByZWxlYXNlX3llYXIgKHRhaHVuIHJpbGlzKToqKg0KDQoqIFRhaHVuIGRlbmdhbiBqdW1sYWgga29udGVuIHRlcmJhbnlhayBhZGFsYWggMjAyMSBkZW5nYW4gMS40NDIganVkdWwuDQoqIFRhaHVuIDIwMjAgZGFuIDIwMTkganVnYSBtZW51bmp1a2thbiBqdW1sYWggeWFuZyBjdWt1cCBiZXNhciwgbWFzaW5nLW1hc2luZyA5NjIgZGFuIDkyOSBqdWR1bC4NCiogU2V0ZWxhaCBpdHUsIGp1bWxhaCBrb250ZW4gbWVudXJ1biBzZWNhcmEgYmVydGFoYXAga2UgdGFodW4tdGFodW4gc2ViZWx1bW55YS4NCg0KVHJlbiBtZW51bmp1a2thbiBwZW5pbmdrYXRhbiBqdW1sYWgga29udGVuIHlhbmcgZGlyaWxpcyBkYWxhbSBiZWJlcmFwYSB0YWh1biB0ZXJha2hpciwga2h1c3VzbnlhIGRpIHRhaHVuIDIwMjAgZGFuIDIwMjEuIEhhbCBpbmkgYmlzYSBtZW5naW5kaWthc2lrYW4gcGVydHVtYnVoYW4gcHJvZHVrc2kga29udGVuIHlhbmcgY3VrdXAgcGVzYXQgZGkgcGxhdGZvcm0gdGVyc2VidXQuDQoNCiMjIyAzLiAqKkRpc3RyaWJ1c2kgYmVyZGFzYXJrYW4gY291bnRyeSAobmVnYXJhIHByb2R1a3NpKToqKg0KDQoqIEJhbnlhayBkYXRhIGNvdW50cnkgeWFuZyB0aWRhayB0ZXJpc2kgKE5BKSBzZWJhbnlhayA4Ljk5NiwgaW5pIG1lbnVuanVra2FuIGRhdGEgbmVnYXJhIHByb2R1a3NpIGJhbnlhayB5YW5nIGtvc29uZyBhdGF1IHRpZGFrIHRlcnNlZGlhLg0KKiBEYXJpIGRhdGEgeWFuZyB0ZXJpc2ksIFVuaXRlZCBTdGF0ZXMgbWVuamFkaSBuZWdhcmEgZGVuZ2FuIGp1bWxhaCBrb250ZW4gdGVyYmFueWFrIHlhaXR1IDMzNCBqdWR1bC4NCiogRGlpa3V0aSBvbGVoIEluZGlhICgyNDYpLCBVbml0ZWQgS2luZ2RvbSAoNjcpLCBkYW4gQ2FuYWRhICgzNSkuDQoNCk1lc2tpIGJhbnlhayBkYXRhIHlhbmcga29zb25nLCB0ZXJsaWhhdCBiYWh3YSBzZWJhZ2lhbiBiZXNhciBrb250ZW4gYmVyYXNhbCBkYXJpIEFtZXJpa2EgU2VyaWthdCwgSW5kaWEsIGRhbiBJbmdncmlzLiBJbmkgbWVuZ2luZGlrYXNpa2FuIGRvbWluYXNpIGtvbnRlbiBkYXJpIG5lZ2FyYS1uZWdhcmEgdGVyc2VidXQgZGkgcGxhdGZvcm0uIE5hbXVuLCBiYW55YWsgZGF0YSB5YW5nIHRpZGFrIGxlbmdrYXAgcGVybHUgZGlwZXJoYXRpa2FuIHVudHVrIGFuYWxpc2lzIGxlYmloIGFrdXJhdC4NCg0KDQojIE1lbWJlcnNpaGthbiBkYW4gTWVueWlhcGthbiBEYXRhDQoNCmBgYHtyLCBlY2hvPVRSVUUsd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFfQ0KbGlicmFyeShEVCkNCg0KZGF0YV9jbGVhbiA8LSBkYXRhICU+JQ0KICBkaXN0aW5jdCgpICU+JSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSGFwdXMgZHVwbGlrYXQNCiAgZHJvcF9uYShzaG93X2lkLCB0eXBlLCB0aXRsZSwgcmVsZWFzZV95ZWFyKSAlPiUgICMgSGFwdXMgYmFyaXMgZGVuZ2FuIE5BIGRpIGtvbG9tIHBlbnRpbmcNCiAgbXV0YXRlKA0KICAgIGRhdGVfYWRkZWQgPSBtZHkoZGF0ZV9hZGRlZCksICAgICAgICAgICAgICMgVWJhaCBkYXRlX2FkZGVkIGtlIGZvcm1hdCB0YW5nZ2FsDQogICAgdHlwZSA9IGFzLmZhY3Rvcih0eXBlKSwgICAgICAgICAgICAgICAgICAgICMgVWJhaCBrZSBmYWt0b3IgamlrYSBwZXJsdQ0KICAgIGNvdW50cnkgPSBpZl9lbHNlKGlzLm5hKGNvdW50cnkpLCAiVW5rbm93biIsIGNvdW50cnkpLCAgIyBJc2kgTkEgY291bnRyeSBkZW5nYW4gIlVua25vd24iDQogICAgZHVyYXRpb25fbnVtID0gYXMubnVtZXJpYyhzdHJfZXh0cmFjdChkdXJhdGlvbiwgIlxcZCsiKSksICAjIEVrc3RyYWsgYW5na2EgZGFyaSBkdXJhdGlvbiAobWlzYWwgIjkwIG1pbiIgamFkaSA5MCkNCiAgICByZWxlYXNlX3llYXIgPSBhcy5pbnRlZ2VyKHJlbGVhc2VfeWVhcikNCiAgKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShkdXJhdGlvbl9udW0pKSAgICAgICAgICAgICAgICAgIyBIYXB1cyBiYXJpcyB5YW5nIGdhZ2FsIGVrc3RyYWsgZHVyYXRpb24gIA0KDQojIFRhbXBpbGthbiB0YWJlbCBpbnRlcmFrdGlmDQpkYXRhdGFibGUoZGF0YV9jbGVhbiwgDQogICAgICAgICAgb3B0aW9ucyA9IGxpc3QocGFnZUxlbmd0aCA9IDUsICAjIGp1bWxhaCBiYXJpcyBwZXIgaGFsYW1hbg0KICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9XaWR0aCA9IFRSVUUpLA0KICAgICAgICAgIHJvd25hbWVzID0gRkFMU0UpDQpgYGANCg0KIyBWaXN1YWxpc2FzaSBEYXRhDQoNCmBgYHtyLCBlY2hvPVRSVUUsd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHBsb3RseSkgDQoNCiMgMS4gVmlzdWFsaXNhc2kganVtbGFoIGtvbnRlbiBiZXJkYXNhcmthbiAndHlwZScNCnR5cGVfY291bnQgPC0gZGF0YV9jbGVhbiAlPiUNCiAgY291bnQodHlwZSkNCg0KcGxvdF90eXBlIDwtIHBsb3RfbHkodHlwZV9jb3VudCwgbGFiZWxzID0gfnR5cGUsIHZhbHVlcyA9IH5uLCB0eXBlID0gJ3BpZScpICU+JQ0KICBsYXlvdXQodGl0bGUgPSAnRGlzdHJpYnVzaSBUaXBlIEtvbnRlbicsDQogICAgICAgICBsZWdlbmQgPSBsaXN0KHggPSAwLjEsIHkgPSAwLjkpKQ0KcGxvdF90eXBlDQoNCiMgMi4gVmlzdWFsaXNhc2kganVtbGFoIGtvbnRlbiBiZXJkYXNhcmthbiAncmVsZWFzZV95ZWFyJyAodG9wIDEwIHRhaHVuIHRlcmJlc2FyKQ0KdG9wX3llYXJzIDwtIGRhdGFfY2xlYW4gJT4lDQogIGNvdW50KHJlbGVhc2VfeWVhcikgJT4lDQogIGFycmFuZ2UoZGVzYyhuKSkgJT4lDQogIHNsaWNlX21heChuLCBuID0gMTApICU+JQ0KICBtdXRhdGUocmVsZWFzZV95ZWFyID0gYXMuZmFjdG9yKHJlbGVhc2VfeWVhcikpDQoNCnBsb3RfeWVhciA8LSBwbG90X2x5KHRvcF95ZWFycywgeCA9IH5yZWxlYXNlX3llYXIsIHkgPSB+biwgdHlwZSA9ICdiYXInLA0KICAgICAgICAgICAgICAgICAgICAgbWFya2VyID0gbGlzdChjb2xvciA9ICdyb3lhbGJsdWUnKSkgJT4lDQogIGxheW91dCh0aXRsZSA9ICJUb3AgMTAgVGFodW4gUmlsaXMgVGVyYmFueWFrIiwNCiAgICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJUYWh1biBSaWxpcyIpLA0KICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIkp1bWxhaCBLb250ZW4iKSkNCnBsb3RfeWVhcg0KDQojIDMuIFZpc3VhbGlzYXNpIG5lZ2FyYSBkZW5nYW4ganVtbGFoIGtvbnRlbiB0ZXJiYW55YWsgKHRvcCAxMCkNCnRvcF9jb3VudHJpZXMgPC0gZGF0YV9jbGVhbiAlPiUNCiAgY291bnQoY291bnRyeSkgJT4lDQogIGFycmFuZ2UoZGVzYyhuKSkgJT4lDQogIHNsaWNlX21heChuLCBuID0gMTApICU+JQ0KICBtdXRhdGUoY291bnRyeSA9IGZhY3Rvcihjb3VudHJ5LCBsZXZlbHMgPSByZXYodW5pcXVlKGNvdW50cnkpKSkpDQoNCnBsb3RfY291bnRyeSA8LSBwbG90X2x5KHRvcF9jb3VudHJpZXMsIHggPSB+biwgeSA9IH5jb3VudHJ5LCB0eXBlID0gJ2JhcicsIG9yaWVudGF0aW9uID0gJ2gnLA0KICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyID0gbGlzdChjb2xvciA9ICdkYXJrZ3JlZW4nKSkgJT4lDQogIGxheW91dCh0aXRsZSA9ICJUb3AgMTAgTmVnYXJhIERlbmdhbiBLb250ZW4gVGVyYmFueWFrIiwNCiAgICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJKdW1sYWggS29udGVuIiksDQogICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiTmVnYXJhIikpDQpwbG90X2NvdW50cnkNCmBgYA0KDQojIyBJbnRlcnByZXRhc2kNCg0KIyMjICoqMS4gRGlzdHJpYnVzaSBUaXBlIEtvbnRlbiAoUGllIENoYXJ0KSoqDQoNCiogKipJbnNpZ2h0Kio6IFNlYmFnaWFuIGJlc2FyIGtvbnRlbiB5YW5nIHRlcnNlZGlhIGFkYWxhaCBNb3ZpZSAoODAuOCUpLCBzZW1lbnRhcmEgVFYgU2hvdyBoYW55YSAxOS4yJS4NCiogKipNYWtuYSoqOiBJbmkgbWVudW5qdWtrYW4gYmFod2EgcGxhdGZvcm0gbGViaWggZm9rdXMgbWVueWVkaWFrYW4ga29udGVuIGRhbGFtIGZvcm1hdCBmaWxtIGRpYmFuZGluZyBzZXJpYWwgVFYuDQoqICoqTWFuZmFhdCB1bnR1ayBzdGFrZWhvbGRlcioqOiBKaWthIGluZ2luIG1lbXBlcmx1YXMgcGFzYXIgc2VyaWFsLCBtYWthIHBlcmx1IG1lbmluZ2thdGthbiBqdW1sYWggVFYgU2hvdyBhZ2FyIGxlYmloIHNlaW1iYW5nLg0KDQojIyMgKioyLiBUb3AgMTAgVGFodW4gUmlsaXMgVGVyYmFueWFrIChCYXIgQ2hhcnQpKioNCg0KKiAqKkluc2lnaHQqKjogVGVyZGFwYXQgdHJlbiBwZW5pbmdrYXRhbiBqdW1sYWgga29udGVuIHNldGlhcCB0YWh1biwgdGVydXRhbWEgZGFyaSAyMDE2IGhpbmdnYSBwdW5jYWtueWEgZGkgMjAyMS4NCiogKipNYWtuYSoqOiBCaXNhIGphZGkgZGlzZWJhYmthbiBvbGVoIHBlbmluZ2thdGFuIHByb2R1a3NpIGRpZ2l0YWwgYXRhdSBzdHJhdGVnaSBwbGF0Zm9ybSB1bnR1ayBtZW5hbWJhaCBrb250ZW4gYmFydSBzZWNhcmEgYWdyZXNpZi4NCiogKipNYW5mYWF0IHVudHVrIHN0YWtlaG9sZGVyKio6IFBlbnRpbmcgdW50dWsgbWVtcGVydGFoYW5rYW4gdHJlbiBwb3NpdGlmIGluaSBkZW5nYW4gdGVydXMgbWVyaWxpcyBrb250ZW4gYmFydSBzZWNhcmEga29uc2lzdGVuIHNldGlhcCB0YWh1bi4NCg0KIyMjICoqMy4gVG9wIDEwIE5lZ2FyYSBkZW5nYW4gS29udGVuIFRlcmJhbnlhayAoSG9yaXpvbnRhbCBCYXIgQ2hhcnQpKioNCg0KKiAqKkluc2lnaHQqKjogU2ViYWdpYW4gYmVzYXIgZGF0YSBuZWdhcmEgYmVydHVsaXNrYW4gVW5rbm93biAodGlkYWsgZGlrZXRhaHVpKSwgbmFtdW4gZGFyaSBkYXRhIHlhbmcgdGVyc2VkaWEsIFVuaXRlZCBTdGF0ZXMsIEluZGlhLCBkYW4gVW5pdGVkIEtpbmdkb20gbWVuZG9taW5hc2kuDQoqICoqTWFrbmEqKjogS2V0aWRha3RhaHVhbiBhc2FsIG5lZ2FyYSBiaXNhIGphZGkgZGlzZWJhYmthbiBvbGVoIGRhdGEgeWFuZyB0aWRhayBsZW5na2FwLiBTZW1lbnRhcmEgZG9taW5hc2kgbmVnYXJhIHRlcnRlbnR1IGJpc2EgbWVudW5qdWtrYW4gcHJlZmVyZW5zaSBwcm9kdWtzaS4NCiogKipNYW5mYWF0IHVudHVrIHN0YWtlaG9sZGVyKio6IFBlcmx1IHBlcmJhaWthbiBkYWxhbSBwZW5naXNpYW4gbWV0YWRhdGEgbmVnYXJhIGFzYWwuIFNlbGFpbiBpdHUsIGJpc2EgamFkaSBwZWx1YW5nIHVudHVrIG1lbmluZ2thdGthbiBrb250ZW4gZGFyaSBuZWdhcmEgbGFpbiBhZ2FyIGxlYmloIGJlcmFnYW0uDQoNCg==