1. Giới thiệu về khái quát về GDP và INDICATOR
- GDP là thước đo để đánh giá sức khỏe của một nền kinh tế và đại diện
cho tổng giá trị của hàng hóa và dịch vụ được sản xuất trong một nền
kinh tế. Mục đích của nhiệm vụ này là phân tích GDP theo quốc gia và dữ
liệu trước khi xử lý bằng cách sử dụng kiến thức thu được trong suốt
mô-đun tiền xử lý dữ liệu.
1.1 Giới thiệu về BX.KLT.DINV.WD.GD.ZS trích xuất từ WorldBank
Sử dụng hàm WDIsearch để tìm kiếm các chỉ báo liên quan đến “Tổng
vốn đầu tư nước ngoài” (Total) trong cơ sở dữ liệu World Development
Indicators (WDI).
Bộ dữ liệu được lưu trữ trong biến ind.
Sử dụng hàm WDI để truy xuất dữ liệu cho một chỉ báo cụ thể từ cơ
sở dữ liệu WDI.
Indicator: Mã định danh của chỉ số bạn muốn tải
xuống. Trong trường hợp này, mã là “BX.KLT.DINV.WD.GD.ZS”.
Country: Một vectơ chứa tên các quốc gia bạn
muốn lấy dữ liệu. Trong trường hợp này, vectơ chỉ chứa một phần tử “VNM”
là Việt Nam
Hàm WDI sẽ trả về một data frame chứa dữ liệu thực tế cho chỉ số
được chỉ định và quốc gia được chọn.
library(tidyverse)
library(WDI)
library(data.table)
pxh <- WDI(indicator = 'BX.KLT.DINV.WD.GD.ZS',country = c('VNM'))
data.table(pxh)
Viet Nam |
VN |
VNM |
2022 |
4.3786438 |
Viet Nam |
VN |
VNM |
2021 |
4.2770809 |
Viet Nam |
VN |
VNM |
2020 |
4.5583620 |
Viet Nam |
VN |
VNM |
2019 |
4.8210749 |
Viet Nam |
VN |
VNM |
2018 |
4.9982832 |
Viet Nam |
VN |
VNM |
2017 |
5.0114872 |
Viet Nam |
VN |
VNM |
2016 |
4.9008930 |
Viet Nam |
VN |
VNM |
2015 |
4.9319077 |
Viet Nam |
VN |
VNM |
2014 |
3.9408619 |
Viet Nam |
VN |
VNM |
2013 |
4.1645452 |
Viet Nam |
VN |
VNM |
2012 |
4.2783229 |
Viet Nam |
VN |
VNM |
2011 |
4.3048743 |
Viet Nam |
VN |
VNM |
2010 |
5.4347393 |
Viet Nam |
VN |
VNM |
2009 |
7.1688199 |
Viet Nam |
VN |
VNM |
2008 |
9.6630391 |
Viet Nam |
VN |
VNM |
2007 |
8.6547177 |
Viet Nam |
VN |
VNM |
2006 |
3.6160009 |
Viet Nam |
VN |
VNM |
2005 |
3.3904036 |
Viet Nam |
VN |
VNM |
2004 |
3.5440811 |
Viet Nam |
VN |
VNM |
2003 |
3.6660123 |
Viet Nam |
VN |
VNM |
2002 |
3.9926871 |
Viet Nam |
VN |
VNM |
2001 |
3.9773355 |
Viet Nam |
VN |
VNM |
2000 |
4.1639241 |
Viet Nam |
VN |
VNM |
1999 |
4.9226635 |
Viet Nam |
VN |
VNM |
1998 |
6.1412144 |
Viet Nam |
VN |
VNM |
1997 |
8.2700968 |
Viet Nam |
VN |
VNM |
1996 |
9.7130806 |
Viet Nam |
VN |
VNM |
1995 |
8.5859659 |
Viet Nam |
VN |
VNM |
1994 |
11.9394828 |
Viet Nam |
VN |
VNM |
1993 |
7.0275926 |
Viet Nam |
VN |
VNM |
1992 |
4.8033478 |
Viet Nam |
VN |
VNM |
1991 |
3.9027968 |
Viet Nam |
VN |
VNM |
1990 |
2.7813228 |
Viet Nam |
VN |
VNM |
1989 |
0.0646719 |
Viet Nam |
VN |
VNM |
1988 |
0.0302079 |
Viet Nam |
VN |
VNM |
1987 |
0.0282712 |
Viet Nam |
VN |
VNM |
1986 |
0.0001519 |
Viet Nam |
VN |
VNM |
1985 |
-0.0005676 |
Viet Nam |
VN |
VNM |
1984 |
NA |
Viet Nam |
VN |
VNM |
1983 |
NA |
Viet Nam |
VN |
VNM |
1982 |
NA |
Viet Nam |
VN |
VNM |
1981 |
NA |
Viet Nam |
VN |
VNM |
1980 |
NA |
Viet Nam |
VN |
VNM |
1979 |
NA |
Viet Nam |
VN |
VNM |
1978 |
NA |
Viet Nam |
VN |
VNM |
1977 |
NA |
Viet Nam |
VN |
VNM |
1976 |
NA |
Viet Nam |
VN |
VNM |
1975 |
NA |
Viet Nam |
VN |
VNM |
1974 |
NA |
Viet Nam |
VN |
VNM |
1973 |
NA |
Viet Nam |
VN |
VNM |
1972 |
NA |
Viet Nam |
VN |
VNM |
1971 |
NA |
Viet Nam |
VN |
VNM |
1970 |
NA |
Viet Nam |
VN |
VNM |
1969 |
NA |
Viet Nam |
VN |
VNM |
1968 |
NA |
Viet Nam |
VN |
VNM |
1967 |
NA |
Viet Nam |
VN |
VNM |
1966 |
NA |
Viet Nam |
VN |
VNM |
1965 |
NA |
Viet Nam |
VN |
VNM |
1964 |
NA |
Viet Nam |
VN |
VNM |
1963 |
NA |
Viet Nam |
VN |
VNM |
1962 |
NA |
Viet Nam |
VN |
VNM |
1961 |
NA |
Viet Nam |
VN |
VNM |
1960 |
NA |
- Đoạn mã “BX.KLT.DINV.WD.GD.ZS” là mã chỉ báo cho
Tổng vốn đầu tư trực tiếp nước ngoài (FDI) ròng, theo giá trị hiện
tại
(USD) trong bộ dữ liệu World Development Indicators (WDI).
Phân tích:
BX: Mã khu vực (Bank code) - “BX” đại diện cho “East Asia &
Pacific” (Đông Á & Thái Bình Dương).
KLT: Nhóm chủ đề (Indicator group) - “KLT” đại diện cho “National
Accounts”.
DINV: Chủ đề (Topic) - “DINV” đại diện cho “Direct investment,
net inflows”.
WD: Loại dữ liệu (Data type) - “WD” đại diện cho “Current
US”. - GD: Biến thể (Variant)
- “GD” đại diện cho “Gross”. - ZS: Loại giá trị (Value
type) - “ZS” đại diện cho “Z-scores”. Ý nghĩa: Mã này
cho biết dữ liệu
được yêu cầu là: - Tổng vốn đầu tư trực tiếp nước ngoài (FDI) ròng
(Net inflows) - Được tính theo giá trị hiện tại (Current US)
1.2 Giới thiệu về INDICATOR PCPIO_IX từ IFM
library(tidyverse)
library(imf.data)
tmp <- load_datasets('CPI')
cpi <- tmp$get_series(freq = 'M', ref_area = 'VN', indicator = 'PCPIO_IX')
cpi <- na.omit(cpi)
names(cpi) <- c('ThoiGian','NamGoc','CPI')
cpi <- head(cpi,20)
- Giải thích các câu lệnh:
- library(tidyverse): Tải gói tidyverse, bao gồm nhiều gói hữu ích cho
phân tích và trực quan hóa dữ liệu trong R.
- library(imf.data): Tải gói imf.data để truy cập và tải dữ liệu từ
Quỹ Tiền tệ Quốc tế (IMF).
- tmp <- load_datasets(‘CPI’): Tải bộ dữ liệu chỉ số giá tiêu dùng
(CPI) từ IMF và lưu tạm thời vào biến tmp.
- cpi <- tmp$get_series(freq = ‘M’, ref_area = ‘VN’, indicator =
‘NGDPNPI_EUR’): Trích xuất chuỗi dữ liệu cụ thể từ tmp với các tiêu
chí:
- freq = ‘M’: Tần suất dữ liệu theo tháng (Monthly).
- ref_area = ‘VN’: Khu vực tham chiếu là Việt Nam.
- indicator = ‘NGDPNPI_EUR’: Chỉ số giá tiêu dùng với đồng tiền cơ sở
là Euro.
- Lưu kết quả vào biến cpi.
- cpi <- na.omit(cpi): Xóa các dòng chứa giá trị thiếu (NA) trong
bảng dữ liệu cpi.
- names(cpi) <- c(‘ThoiGian’,‘NamGoc’,‘CPI’): Đổi tên các cột trong
bảng dữ liệu cpi:
- Cột thứ nhất: ThoiGian (có thể chứa thời gian hoặc mã thời
gian).
- Cột thứ hai: NamGoc (năm gốc của chỉ số CPI).
- Cột thứ ba: CPI (giá trị CPI).
- head(cpi): Hiển thị 6 dòng đầu tiên của bảng dữ liệu cpi để xem tổng
quan dữ liệu đã được xử lý.
2. Phân tích về BX.KLT.DINV.WD.GD.ZS theo giai đoạn
2.1 Lượt bỏ các số liệu thiếu ra khỏi dữ liệu để phân tích
library(ggplot2)
pxh <- na.omit(pxh)
data.table(pxh)
Viet Nam |
VN |
VNM |
2022 |
4.3786438 |
Viet Nam |
VN |
VNM |
2021 |
4.2770809 |
Viet Nam |
VN |
VNM |
2020 |
4.5583620 |
Viet Nam |
VN |
VNM |
2019 |
4.8210749 |
Viet Nam |
VN |
VNM |
2018 |
4.9982832 |
Viet Nam |
VN |
VNM |
2017 |
5.0114872 |
Viet Nam |
VN |
VNM |
2016 |
4.9008930 |
Viet Nam |
VN |
VNM |
2015 |
4.9319077 |
Viet Nam |
VN |
VNM |
2014 |
3.9408619 |
Viet Nam |
VN |
VNM |
2013 |
4.1645452 |
Viet Nam |
VN |
VNM |
2012 |
4.2783229 |
Viet Nam |
VN |
VNM |
2011 |
4.3048743 |
Viet Nam |
VN |
VNM |
2010 |
5.4347393 |
Viet Nam |
VN |
VNM |
2009 |
7.1688199 |
Viet Nam |
VN |
VNM |
2008 |
9.6630391 |
Viet Nam |
VN |
VNM |
2007 |
8.6547177 |
Viet Nam |
VN |
VNM |
2006 |
3.6160009 |
Viet Nam |
VN |
VNM |
2005 |
3.3904036 |
Viet Nam |
VN |
VNM |
2004 |
3.5440811 |
Viet Nam |
VN |
VNM |
2003 |
3.6660123 |
Viet Nam |
VN |
VNM |
2002 |
3.9926871 |
Viet Nam |
VN |
VNM |
2001 |
3.9773355 |
Viet Nam |
VN |
VNM |
2000 |
4.1639241 |
Viet Nam |
VN |
VNM |
1999 |
4.9226635 |
Viet Nam |
VN |
VNM |
1998 |
6.1412144 |
Viet Nam |
VN |
VNM |
1997 |
8.2700968 |
Viet Nam |
VN |
VNM |
1996 |
9.7130806 |
Viet Nam |
VN |
VNM |
1995 |
8.5859659 |
Viet Nam |
VN |
VNM |
1994 |
11.9394828 |
Viet Nam |
VN |
VNM |
1993 |
7.0275926 |
Viet Nam |
VN |
VNM |
1992 |
4.8033478 |
Viet Nam |
VN |
VNM |
1991 |
3.9027968 |
Viet Nam |
VN |
VNM |
1990 |
2.7813228 |
Viet Nam |
VN |
VNM |
1989 |
0.0646719 |
Viet Nam |
VN |
VNM |
1988 |
0.0302079 |
Viet Nam |
VN |
VNM |
1987 |
0.0282712 |
Viet Nam |
VN |
VNM |
1986 |
0.0001519 |
Viet Nam |
VN |
VNM |
1985 |
-0.0005676 |
- na.omit(d): Hàm na.omit được sử dụng để loại bỏ các giá trị thiếu
(NA) khỏi data frame pmc.
2.1 Phân tích giai đoạn 1885- 2000
pxh %>% filter(year >= 1885 & year <= 2000) %>%
ggplot(aes(x=year, y=BX.KLT.DINV.WD.GD.ZS)) +
geom_line(color='red', linewidth =1) +
labs(title = 'Biểu đồ thể hiện tốc độ tăng trưởng vốn đầu tư nước ngoài từ 1885- 2000')

2.2 Phân tích giai đoạn 2001- 2011
pxh %>% filter(year >= 2001 & year <= 2011) %>%
ggplot(aes(x=year, y=BX.KLT.DINV.WD.GD.ZS)) +
geom_line(color='green', linewidth =1) +
labs(title = 'Biểu đồ thể hiện tốc độ tăng trưởng vốn đầu tư nước ngoài từ 2001- 2011')

2.3 Phân tích giai đoạn 2012-2022
pxh %>% filter(year >= 2012 & year <= 2022) %>%
ggplot(aes(x=year, y=BX.KLT.DINV.WD.GD.ZS)) +
geom_line(color='purple', linewidth =1) +
labs(title = 'Biểu đồ thể hiện tốc độ tăng trưởng vốn đầu tư nước ngoàitừ 2001- 2011')

2.4 Các yếu tố ảnh hưởng tới quyết định chi tiêu của chính phủ ở
nước ta ảnh hưởng tới nguồn đầu tư nước ngoài:
Môi trường đầu tư:
Chính sách đầu tư:
Mức độ ưu đãi thuế, chính sách hỗ trợ nhà đầu tư.
Hệ thống pháp luật minh bạch, ổn định và dễ dự đoán.
Thủ tục hành chính đơn giản, nhanh chóng.
Cơ sở hạ tầng:
Hệ thống giao thông, thông tin liên lạc, năng lượng phát
triển.
Khu công nghiệp, khu chế xuất được quy hoạch bài bản.
Chất lượng nguồn nhân lực:
Lực lượng lao động trẻ, dồi dào, có trình độ học vấn và kỹ năng
ngày càng cao.
Chi phí lao động cạnh tranh.
Thị trường:
Quy mô thị trường:
Dân số Việt Nam đông, trẻ và đang tăng trưởng.
Nhu cầu tiêu dùng ngày càng cao.
Mức độ hội nhập kinh tế quốc tế:
Việt Nam tham gia nhiều Hiệp định thương mại tự do (FTA), tạo
điều kiện thuận lợi cho xuất nhập khẩu.
Thị trường Việt Nam được kết nối với thị trường của các nước khác
trong khu vực và trên thế giới.
Yếu tố bên ngoài:
Văn hóa và phong tục tập quán:
-Văn hóa thân thiện, cởi mở, chào đón nhà đầu tư nước ngoài.
3. Phân tích về PCPIO_IX từ IMF
- PCPIO_IX là viết tắt của Personal Consumption Expenditures Price
Index, Excluding Food and Energy, hay Chỉ số giá chi tiêu tiêu
dùng cá nhân, loại trừ thực phẩm và năng lượng.
ggplot(data = cpi, aes(x = `ThoiGian`, y = CPI)) +
geom_col(fill = "orange", color = "black") +
labs(x = "ThoiGian",y = "Chỉ số giá tiêu dùng (CPI)") +
ggtitle("Biểu đồ chỉ số giá tiêu dùng (CPI) so với năm 2019 (2002 - 2005)") +
theme_minimal() + theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))
- Nhận xét: - Chỉ số gía tiêu dùng của các tháng qua từng năm là không
đồng đều - Từ đây các doanh nghiệp có thể phân tích hành vi người tiêu
dùng để có thể đưa ra các chiế lược sản xuất phù hợp với thị trường
3.2 Phân tích chỉ số giá tiêu dùng (CPI) của tất cả các mặt hàng của
nước ta
Để phân tích chi tiết chỉ số giá tiêu dùng (CPI) của tất cả các
mặt hàng tại Việt Nam, chúng ta cần dựa vào các đặc điểm sau:
Biểu hiện chung:
- Mức tăng/giảm của CPI: So sánh CPI của tháng/quý/năm hiện tại với
tháng/quý/năm trước để đánh giá mức độ tăng/giảm chung của giá cả hàng
hóa và dịch vụ.
- So sánh với mục tiêu lạm phát: Xem xét mức tăng/giảm của CPI so với
mục tiêu lạm phát do Chính phủ đề ra để đánh giá mức độ kiểm soát lạm
phát.
- Xu hướng biến động: Phân tích xu hướng biến động của CPI trong thời
gian qua để dự đoán xu hướng trong tương lai.
- Phân tích theo nhóm hàng hóa và dịch vụ:
- Mức tăng/giảm của từng nhóm: So sánh mức tăng/giảm của từng nhóm
hàng hóa và dịch vụ để xác định nhóm nào có mức tăng/giảm cao nhất, thấp
nhất.
- So sánh mức tăng/giảm giữa các nhóm: Phân tích mức tăng/giảm của các
nhóm hàng hóa và dịch vụ để đánh giá mức độ ảnh hưởng của từng nhóm đến
CPI chung.
- Phân tích nguyên nhân: Xác định nguyên nhân dẫn đến mức tăng/giảm
của từng nhóm hàng hóa và dịch vụ.
- Phân tích theo khu vực: Mức tăng/giảm của từng khu vực: So sánh mức
tăng/giảm của CPI giữa các khu vực (thành thị, nông thôn, vùng miền) để
đánh giá mức độ chênh lệch giá cả giữa các khu vực. Phân tích nguyên
nhân: Xác định nguyên nhân dẫn đến mức tăng/giảm của CPI giữa các khu
vực.
- Phân tích theo đối tượng: Mức tăng/giảm theo nhóm thu nhập: So sánh
mức tăng/giảm của CPI giữa các nhóm thu nhập (cao, trung bình, thấp) để
đánh giá mức độ ảnh hưởng của lạm phát đến từng nhóm thu nhập.
- Phân tích nguyên nhân: Xác định nguyên nhân dẫn đến mức tăng/giảm
của CPI giữa các nhóm thu nhập.
Ngoài ra, cần lưu ý một số điểm sau:
- Dữ liệu CPI: Sử dụng dữ liệu CPI chính thức được công bố bởi Tổng
cục Thống kê.
- Cập nhật thông tin: Theo dõi cập nhật thông tin về giá cả thị
trường, các yếu tố ảnh hưởng đến CPI để có phân tích chính xác.
- Phân tích khách quan: Tránh đưa ra những nhận định chủ quan, thiếu
cơ sở.
LS0tCnRpdGxlOiAiTmhp4buHbSB24bulIDYiCmF1dGhvcjogIlBo4bqhbSBYdcOibiBIb2FuIgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OiAKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICBkZl9wcmludDoga2FibGUKICAgIGhpZ2hsaWdodDogdGFuZ28KICBwZGZfZG9jdW1lbnQ6CiAgICBleHRyYV9kZXBlbmRlbmNpZXM6CiAgICAgIHZpZXRuYW06IHV0ZjgKICAgIHRvYzogdHJ1ZQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICBjbGFzcy5zb3VyY2UgPSAibnVtYmVyTGluZXMgbGluZUFuY2hvcnMiLCAKICBjbGFzcy5vdXRwdXQgPSBjKCJudW1iZXJMaW5lcyBsaW5lQW5jaG9ycyBjaHVua291dCIpIAopCmBgYAoKYGBge2NzcywgZWNobyA9IEZBTFNFfQpkaXYuc291cmNlQ29kZSBwcmUuY2h1bmtvdXQgewogIGJhY2tncm91bmQ6IHdoaXRlOwp9CmBgYAoKIyAxLiBHaeG7m2kgdGhp4buHdSB24buBIGtow6FpIHF1w6F0IHbhu4EgR0RQIHbDoCBJTkRJQ0FUT1IgCi0gR0RQIGzDoCB0aMaw4bubYyDEkW8gxJHhu4MgxJHDoW5oIGdpw6Egc+G7qWMga2jhu49lIGPhu6dhIG3hu5l0IG7hu4FuIGtpbmggdOG6vyB2w6AgxJHhuqFpIGRp4buHbiBjaG8gdOG7lW5nIGdpw6EgdHLhu4sgY+G7p2EgaMOgbmcgaMOzYSB2w6AgZOG7i2NoIHbhu6UgxJHGsOG7o2Mgc+G6o24geHXhuqV0IHRyb25nIG3hu5l0IG7hu4FuIGtpbmggdOG6vy4gTeG7pWMgxJHDrWNoIGPhu6dhIG5oaeG7h20gduG7pSBuw6B5IGzDoCBwaMOibiB0w61jaCBHRFAgdGhlbyBxdeG7kWMgZ2lhIHbDoCBk4buvIGxp4buHdSB0csaw4bubYyBraGkgeOG7rSBsw70gYuG6sW5nIGPDoWNoIHPhu60gZOG7pW5nIGtp4bq/biB0aOG7qWMgdGh1IMSRxrDhu6NjIHRyb25nIHN14buRdCBtw7QtxJF1biB0aeG7gW4geOG7rSBsw70gZOG7ryBsaeG7h3UuCgojIyAxLjEgR2nhu5tpIHRoaeG7h3UgduG7gSBCWC5LTFQuRElOVi5XRC5HRC5aUyB0csOtY2ggeHXhuqV0IHThu6sgV29ybGRCYW5rCgotIFPhu60gZOG7pW5nIGjDoG0gV0RJc2VhcmNoIMSR4buDIHTDrG0ga2nhur9tIGPDoWMgY2jhu4kgYsOhbyBsacOqbiBxdWFuIMSR4bq/biDigJxU4buVbmcgduG7kW4gxJHhuqd1IHTGsCBuxrDhu5tjIG5nb8OgaeKAnSAoVG90YWwpIHRyb25nIGPGoSBz4bufIGThu68gbGnhu4d1IFdvcmxkIERldmVsb3BtZW50IEluZGljYXRvcnMgKFdESSkuCgotIELhu5kgZOG7ryBsaeG7h3UgxJHGsOG7o2MgbMawdSB0cuG7ryB0cm9uZyBiaeG6v24gaW5kLgoKLSBT4butIGThu6VuZyBow6BtIFdESSDEkeG7gyB0cnV5IHh14bqldCBk4buvIGxp4buHdSBjaG8gbeG7mXQgY2jhu4kgYsOhbyBj4bulIHRo4buDIHThu6sgY8ahIHPhu58gZOG7ryBsaeG7h3UgV0RJLgoKICAtICoqSW5kaWNhdG9yKio6IE3DoyDEkeG7i25oIGRhbmggY+G7p2EgY2jhu4kgc+G7kSBi4bqhbiBtdeG7kW4gdOG6o2kgeHXhu5FuZy4gVHJvbmcgdHLGsOG7nW5nIGjhu6NwIG7DoHksIG3DoyBsw6Ag4oCcQlguS0xULkRJTlYuV0QuR0QuWlPigJ0uCgogIC0gKipDb3VudHJ5Kio6IE3hu5l0IHZlY3TGoSBjaOG7qWEgdMOqbiBjw6FjIHF14buRYyBnaWEgYuG6oW4gbXXhu5FuIGzhuqV5IGThu68gbGnhu4d1LiBUcm9uZyB0csaw4budbmcgaOG7o3AgbsOgeSwgdmVjdMahIGNo4buJIGNo4bupYSBt4buZdCBwaOG6p24gdOG7rSAiVk5NIiBsw6AgVmnhu4d0IE5hbQoKLSBIw6BtIFdESSBz4bq9IHRy4bqjIHbhu4EgbeG7mXQgZGF0YSBmcmFtZSBjaOG7qWEgZOG7ryBsaeG7h3UgdGjhu7FjIHThur8gY2hvIGNo4buJIHPhu5EgxJHGsOG7o2MgY2jhu4kgxJHhu4tuaCB2w6AgcXXhu5FjIGdpYSDEkcaw4bujYyBjaOG7jW4uCgogIApgYGB7ciBtZXNzYWdlPUZBTFNFLCAsIHdhcm5pbmc9RkFMU0V9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KFdESSkKbGlicmFyeShkYXRhLnRhYmxlKQpweGggPC0gV0RJKGluZGljYXRvciA9ICdCWC5LTFQuRElOVi5XRC5HRC5aUycsY291bnRyeSA9IGMoJ1ZOTScpKQpkYXRhLnRhYmxlKHB4aCkKYGBgCgotIMSQb+G6oW4gbcOjICoqIkJYLktMVC5ESU5WLldELkdELlpTIioqIGzDoCBtw6MgY2jhu4kgYsOhbyBjaG8gVOG7lW5nIHbhu5FuIMSR4bqndSB0xrAgdHLhu7FjIHRp4bq/cCBuxrDhu5tjIG5nb8OgaSAoRkRJKSByw7JuZywgdGhlbyBnacOhIHRy4buLIGhp4buHbiB04bqhaSAKCihVU0QpIHRyb25nIGLhu5kgZOG7ryBsaeG7h3UgV29ybGQgRGV2ZWxvcG1lbnQgSW5kaWNhdG9ycyAoV0RJKS4KCi0gUGjDom4gdMOtY2g6CiAKICAtIEJYOiBNw6Mga2h1IHbhu7FjIChCYW5rIGNvZGUpIC0gIkJYIiDEkeG6oWkgZGnhu4duIGNobyAiRWFzdCBBc2lhICYgUGFjaWZpYyIgKMSQw7RuZyDDgSAmIFRow6FpIELDrG5oIETGsMahbmcpLgogCiAgLSBLTFQ6IE5ow7NtIGNo4bunIMSR4buBIChJbmRpY2F0b3IgZ3JvdXApIC0gIktMVCIgxJHhuqFpIGRp4buHbiBjaG8gIk5hdGlvbmFsIEFjY291bnRzIi4KIAogIC0gRElOVjogQ2jhu6cgxJHhu4EgKFRvcGljKSAtICJESU5WIiDEkeG6oWkgZGnhu4duIGNobyAiRGlyZWN0IGludmVzdG1lbnQsIG5ldCBpbmZsb3dzIi4KIAogIC0gV0Q6IExv4bqhaSBk4buvIGxp4buHdSAoRGF0YSB0eXBlKSAtICJXRCIgxJHhuqFpIGRp4buHbiBjaG8gIkN1cnJlbnQgVVM8c3BhbiBjbGFzcz0ibWF0aC1pbmxpbmUiPiIuIC0gKipHRCoqOiBCaeG6v24gdGjhu4MgKFZhcmlhbnQpIC0gIkdEIiAKxJHhuqFpIGRp4buHbiBjaG8gIkdyb3NzIi4gLSAqKlpTKio6IExv4bqhaSBnacOhIHRy4buLIChWYWx1ZSB0eXBlKSAtICJaUyIgxJHhuqFpIGRp4buHbiBjaG8gIlotc2NvcmVzIi4gKirDnSBuZ2jEqWE6KiogTcOjIG7DoHkgY2hvIGJp4bq/dCBk4buvIGxp4buHdSAKCsSRxrDhu6NjIHnDqnUgY+G6p3UgbMOgOiAtIFThu5VuZyB24buRbiDEkeG6p3UgdMawIHRy4buxYyB0aeG6v3Agbsaw4bubYyBuZ2/DoGkgKEZESSkgcsOybmcgKE5ldCBpbmZsb3dzKSAtIMSQxrDhu6NjIHTDrW5oIHRoZW8gZ2nDoSB0cuG7iyBoaeG7h24gdOG6oWkgKEN1cnJlbnQgVVMpCgotIELhu5kgZOG7ryBsaeG7h3UgY8OzIDYzIHF1YW4gc8OhdCB2w6AgNSBiaeG6v246CgogIC0gKipDb3VudHJ5Kio6IGtodSB24buxYwoKICAtICoqaXNvMmMqKjogbcOjIHF14buRYyBnaWEgdHJvbmcgYuG7mSBk4buvIGxp4buHdS4KCiAgLSAqKmlzbzNjKio6IHTDqm4gcXXhu5FjIGdpYS4KCiAgLSAqKnllYXIqKjogbsSDbSBj4bunYSBt4buXaSBxdWFuIHPDoXQuCgogIC0gKipCWC5LTFQuRElOVi5XRC5HRC5aUyoqOiBU4buVbmcgduG7kW4gxJHhuqd1IHTGsCBuxrDhu5tjIG5nb8OgaShVU0QpCgojIyAxLjIgR2nhu5tpIHRoaeG7h3UgduG7gSBJTkRJQ0FUT1IgUENQSU9fSVggdOG7qyBJRk0KYGBge3IgbWVzc2FnZT1GQUxTRSwgLCB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShpbWYuZGF0YSkKdG1wIDwtIGxvYWRfZGF0YXNldHMoJ0NQSScpCmNwaSA8LSB0bXAkZ2V0X3NlcmllcyhmcmVxID0gJ00nLCByZWZfYXJlYSA9ICdWTicsIGluZGljYXRvciA9ICdQQ1BJT19JWCcpCmNwaSA8LSBuYS5vbWl0KGNwaSkKbmFtZXMoY3BpKSA8LSBjKCdUaG9pR2lhbicsJ05hbUdvYycsJ0NQSScpCmNwaSA8LSBoZWFkKGNwaSwyMCkKYGBgCi0gR2nhuqNpIHRow61jaCBjw6FjIGPDonUgbOG7h25oOgogIC0gbGlicmFyeSh0aWR5dmVyc2UpOiBU4bqjaSBnw7NpIHRpZHl2ZXJzZSwgYmFvIGfhu5NtIG5oaeG7gXUgZ8OzaSBo4buvdSDDrWNoIGNobyBwaMOibiB0w61jaCB2w6AgdHLhu7FjIHF1YW4gaMOzYSBk4buvIGxp4buHdSB0cm9uZyBSLgogIC0gbGlicmFyeShpbWYuZGF0YSk6IFThuqNpIGfDs2kgaW1mLmRhdGEgxJHhu4MgdHJ1eSBj4bqtcCB2w6AgdOG6o2kgZOG7ryBsaeG7h3UgdOG7qyBRdeG7uSBUaeG7gW4gdOG7hyBRdeG7kWMgdOG6vyAoSU1GKS4KICAtIHRtcCA8LSBsb2FkX2RhdGFzZXRzKCdDUEknKTogVOG6o2kgYuG7mSBk4buvIGxp4buHdSBjaOG7iSBz4buRIGdpw6EgdGnDqnUgZMO5bmcgKENQSSkgdOG7qyBJTUYgdsOgIGzGsHUgdOG6oW0gdGjhu51pIHbDoG8gYmnhur9uIHRtcC4KICAtIGNwaSA8LSB0bXAkZ2V0X3NlcmllcyhmcmVxID0gJ00nLCByZWZfYXJlYSA9ICdWTicsIGluZGljYXRvciA9ICdOR0RQTlBJX0VVUicpOiBUcsOtY2ggeHXhuqV0IGNodeG7l2kgZOG7ryBsaeG7h3UgY+G7pSB0aOG7gyB04burIHRtcCB24bubaSBjw6FjIHRpw6p1IGNow606CiAgIC0gZnJlcSA9ICdNJzogVOG6p24gc3XhuqV0IGThu68gbGnhu4d1IHRoZW8gdGjDoW5nIChNb250aGx5KS4KICAgLSByZWZfYXJlYSA9ICdWTic6IEtodSB24buxYyB0aGFtIGNoaeG6v3UgbMOgIFZp4buHdCBOYW0uCiAgIC0gaW5kaWNhdG9yID0gJ05HRFBOUElfRVVSJzogQ2jhu4kgc+G7kSBnacOhIHRpw6p1IGTDuW5nIHbhu5tpIMSR4buTbmcgdGnhu4FuIGPGoSBz4bufIGzDoCBFdXJvLgogICAtIEzGsHUga+G6v3QgcXXhuqMgdsOgbyBiaeG6v24gY3BpLgogIC0gY3BpIDwtIG5hLm9taXQoY3BpKTogWMOzYSBjw6FjIGTDsm5nIGNo4bupYSBnacOhIHRy4buLIHRoaeG6v3UgKE5BKSB0cm9uZyBi4bqjbmcgZOG7ryBsaeG7h3UgY3BpLgogIC0gbmFtZXMoY3BpKSA8LSBjKCdUaG9pR2lhbicsJ05hbUdvYycsJ0NQSScpOiDEkOG7lWkgdMOqbiBjw6FjIGPhu5l0IHRyb25nIGLhuqNuZyBk4buvIGxp4buHdSBjcGk6CiAgIC0gQ+G7mXQgdGjhu6kgbmjhuqV0OiBUaG9pR2lhbiAoY8OzIHRo4buDIGNo4bupYSB0aOG7nWkgZ2lhbiBob+G6t2MgbcOjIHRo4budaSBnaWFuKS4KICAgLSBD4buZdCB0aOG7qSBoYWk6IE5hbUdvYyAobsSDbSBn4buRYyBj4bunYSBjaOG7iSBz4buRIENQSSkuCiAgIC0gQ+G7mXQgdGjhu6kgYmE6IENQSSAoZ2nDoSB0cuG7iyBDUEkpLgogIC0gaGVhZChjcGkpOiBIaeG7g24gdGjhu4sgNiBkw7JuZyDEkeG6p3UgdGnDqm4gY+G7p2EgYuG6o25nIGThu68gbGnhu4d1IGNwaSDEkeG7gyB4ZW0gdOG7lW5nIHF1YW4gZOG7ryBsaeG7h3UgxJHDoyDEkcaw4bujYyB44butIGzDvS4KCgojIDIuIFBow6JuIHTDrWNoIHbhu4EgQlguS0xULkRJTlYuV0QuR0QuWlMgdGhlbyBnaWFpIMSRb+G6oW4gCiMjIDIuMSBMxrDhu6N0IGLhu48gY8OhYyBz4buRIGxp4buHdSB0aGnhur91IHJhIGto4buPaSBk4buvIGxp4buHdSDEkeG7gyBwaMOibiB0w61jaCAKYGBge3IgZWNobz1UUlVFLCB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KGdncGxvdDIpCnB4aCA8LSBuYS5vbWl0KHB4aCkKZGF0YS50YWJsZShweGgpCmBgYAoKLSBuYS5vbWl0KGQpOiBIw6BtIG5hLm9taXQgxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4MgbG/huqFpIGLhu48gY8OhYyBnacOhIHRy4buLIHRoaeG6v3UgKE5BKSBraOG7j2kgZGF0YSBmcmFtZSBwbWMuCgojIyAyLjEgUGjDom4gdMOtY2ggZ2lhaSDEkW/huqFuIDE4ODUtIDIwMDAKYGBge3IgZWNobz1UUlVFLCB3YXJuaW5nPUZBTFNFfQpweGggJT4lIGZpbHRlcih5ZWFyID49IDE4ODUgJiB5ZWFyIDw9IDIwMDApICU+JQogIGdncGxvdChhZXMoeD15ZWFyLCB5PUJYLktMVC5ESU5WLldELkdELlpTKSkgKwogIGdlb21fbGluZShjb2xvcj0ncmVkJywgbGluZXdpZHRoID0xKSArCiAgbGFicyh0aXRsZSA9ICdCaeG7g3UgxJHhu5MgdGjhu4MgaGnhu4duIHThu5FjIMSR4buZIHTEg25nIHRyxrDhu59uZyB24buRbiDEkeG6p3UgdMawIG7GsOG7m2Mgbmdvw6BpIHThu6sgMTg4NS0gMjAwMCcpCmBgYAoKLSBCaeG7g3UgxJHhu5MgxJHGsOG7nW5nIHRo4buDIGhp4buHbiB04buRYyDEkeG7mSB0xINuZyB0csaw4bufbmcgY+G7p2EgdOG7lW5nIHbhu5FuIMSR4bqndSB0xrAgZ2lhaSDEkW/huqFuIDE4ODUtMjAwMCB0YSB0aOG6pXk6CgogIC0gVHLhu6VjIHR1bmcgdGjhu4MgaGnhu4duIHPhu5EgbGnhu4d1IHThu5VuZyB24buRbiDEkeG6p3UgdMawCiAgIAogIC0gVHLhu6VjIGhvw6BuaCB0aOG7gyBoaeG7h24gbsSDbQogIAogIC0gTsSDbSAxOTkwLTE5OTMgY8OzIHPhu7EgcGjDoXQgdHJp4buDbiB2xrDhu6N0IGLhuq10IHRyb25nIGdpYWkgxJFv4bqhbiBuw6B5IGNobyB0aOG6pXkgY8OhYyBuxrDhu5tjIGNow7ogdHLhu41uZyDEkeG6p3UgdMawIHbDoG8gbuG7gW4ga2luaCB04bq/IGPhu6dhIFZp4buHdCBOYW0gCmNobyB0aOG6pXkgdGnhu4FtIGzhu7FjIHBow6F0IHRyaeG7g24gY+G7p2EgVmnhu4d0IE5hbQogIAogIC0gTsSDbSAxOTk0LSAyMDAwIGzDoCBnaWFpIMSRb+G6oW4gY8OzIG3hu6ljIMSR4buZIHBow6F0IHRyaeG7g24gY2jhuq1tIHbDoCB0xrDGoWduIMSR4buRaSBnaeG6o20gc28gduG7m2kgZ2lhaSDEkW/huqFuIHRyxrDhu5tjCiAgCiMjIDIuMiBQaMOibiB0w61jaCBnaWFpIMSRb+G6oW4gMjAwMS0gMjAxMQoKYGBge3IgZWNobz1UUlVFLCB3YXJuaW5nPUZBTFNFfQpweGggJT4lIGZpbHRlcih5ZWFyID49IDIwMDEgJiB5ZWFyIDw9IDIwMTEpICU+JQogIGdncGxvdChhZXMoeD15ZWFyLCB5PUJYLktMVC5ESU5WLldELkdELlpTKSkgKwogIGdlb21fbGluZShjb2xvcj0nZ3JlZW4nLCBsaW5ld2lkdGggPTEpICsKICBsYWJzKHRpdGxlID0gJ0Jp4buDdSDEkeG7kyB0aOG7gyBoaeG7h24gdOG7kWMgxJHhu5kgdMSDbmcgdHLGsOG7n25nIHbhu5FuIMSR4bqndSB0xrAgbsaw4bubYyBuZ2/DoGkgdOG7qyAyMDAxLSAyMDExJykKYGBgCgotIEJp4buDdSDEkeG7kyDEkcaw4budbmcgdGjhu4MgaGnhu4duIHThu5FjIMSR4buZIHTEg25nIHRyxrDhu59uZyBj4bunYSB04buVbmcgduG7kW4gxJHhuqd1IHTGsCBnaWFpIMSRb+G6oW4gMjAwMS0yMDExIHRhIHRo4bqleToKCiAgLSBUcuG7pWMgdHVuZyB0aOG7gyBoaeG7h24gc+G7kSBsaeG7h3UgdOG7lW5nIHbhu5FuIMSR4bqndSB0xrAKICAgCiAgLSBUcuG7pWMgaG/DoG5oIHRo4buDIGhp4buHbiBuxINtCiAgCiAgLSBOxINtIDIwMDYtMjAwOCBjw7Mgc+G7sSBwaMOhdCB0cmnhu4NuIHbGsOG7o3QgYuG6rXQgdHJvbmcgZ2lhaSDEkW/huqFuIG7DoHkgY2hvIHRo4bqleSBjw6FjIG7GsOG7m2MgY2jDuiB0cuG7jW5nIMSR4bqndSB0xrAgdsOgbyBu4buBbiBraW5oIHThur8gY+G7p2EgVmnhu4d0IE5hbSAKY2hvIHRo4bqleSB0aeG7gW0gbOG7sWMgcGjDoXQgdHJp4buDbiBj4bunYSBWaeG7h3QgTmFtCiAgCiAgLSBOxINtIDIwMDgtIDIwMTEgbMOgIGdpYWkgxJFv4bqhbiBjw7MgbeG7qWMgxJHhu5kgcGjDoXQgdHJp4buDbiBjaOG6rW0gdsOgIHTGsMahbmcgxJHhu5FpIGdp4bqjbSBzbyB24bubaSBnaWFpIMSRb+G6oW4gdHLGsOG7m2MKICAKICAtIE7Eg20gMjAwMS0gMjAwNiBsw6AgZ2lhaSDEkW/huqFuIG3hu6ljIMSR4buZIMSR4bqndSB0xrAgY+G7p2Egbsaw4bubYyBuZ2/DoGkgbuG6sW0g4bufIG3hu6ljIOG7lW4gxJHhu4tuaCBrbyBjw7Mgc+G7sSBi4bupdCBwaMOhIGhheSBz4buldCBnaeG6o20gCiAgCiMjIDIuMyBQaMOibiB0w61jaCBnaWFpIMSRb+G6oW4gMjAxMi0yMDIyCmBgYHtyIGVjaG89VFJVRSwgd2FybmluZz1GQUxTRX0KcHhoICU+JSBmaWx0ZXIoeWVhciA+PSAyMDEyICYgeWVhciA8PSAyMDIyKSAlPiUKICBnZ3Bsb3QoYWVzKHg9eWVhciwgeT1CWC5LTFQuRElOVi5XRC5HRC5aUykpICsKICBnZW9tX2xpbmUoY29sb3I9J3B1cnBsZScsIGxpbmV3aWR0aCA9MSkgKwogIGxhYnModGl0bGUgPSAnQmnhu4N1IMSR4buTIHRo4buDIGhp4buHbiB04buRYyDEkeG7mSB0xINuZyB0csaw4bufbmcgduG7kW4gxJHhuqd1IHTGsCBuxrDhu5tjIG5nb8OgaXThu6sgMjAwMS0gMjAxMScpCmBgYAoKLSBCaeG7g3UgxJHhu5MgxJHGsOG7nW5nIHRo4buDIGhp4buHbiB04buRYyDEkeG7mSB0xINuZyB0csaw4bufbmcgY+G7p2EgdOG7lW5nIHbhu5FuIMSR4bqndSB0xrAgZ2lhaSDEkW/huqFuIDIwMTItMjAyMiB0YSB0aOG6pXk6CgogIC0gVHLhu6VjIHR1bmcgdGjhu4MgaGnhu4duIHPhu5EgbGnhu4d1IHThu5VuZyB24buRbiDEkeG6p3UgdMawCiAgIAogIC0gVHLhu6VjIGhvw6BuaCB0aOG7gyBoaeG7h24gbsSDbQogIAogIC0gTsSDbSAyMDE0LTIwMTggY8OzIHPhu7EgcGjDoXQgdHJp4buDbiB2xrDhu6N0IGLhuq10IHRyb25nIGdpYWkgxJFv4bqhbiBuw6B5IGNobyB0aOG6pXkgY8OhYyBuxrDhu5tjIGNow7ogdHLhu41uZyDEkeG6p3UgdMawIHbDoG8gbuG7gW4ga2luaCB04bq/IGPhu6dhIFZp4buHdCBOYW0gCmNobyB0aOG6pXkgdGnhu4FtIGzhu7FjIHBow6F0IHRyaeG7g24gY+G7p2EgVmnhu4d0IE5hbQogIAogIC0gTsSDbSAyMDEyLSAyMDE0IGzDoCBnaWFpIMSRb+G6oW4gY8OzIG3hu6ljIMSR4buZIHBow6F0IHRyaeG7g24gY2jhuq1tIHbDoCB0xrDGoW5nIMSR4buRaSBnaeG6o20gc28gduG7m2kgZ2lhaSDEkW/huqFuIHRyxrDhu5tjCiAgCiAgLSBOxINtIDIwMTgtIDIwMjIgbMOgIGdpYWkgxJFv4bqhbiBt4bupYyDEkeG7mSDEkeG6p3UgdMawIGPhu6dhIG7GsOG7m2Mgbmdvw6BpIG7hurFtIGdp4bqjbSBt4bqhbmggc28gduG7m2kgZ2lhaSDEkW/huqFuIHRyxrDhu5tjCgojIyAyLjQgQ8OhYyB54bq/dSB04buRIOG6o25oIGjGsOG7n25nIHThu5tpIHF1eeG6v3QgxJHhu4tuaCBjaGkgdGnDqnUgY+G7p2EgY2jDrW5oIHBo4bunIOG7nyBuxrDhu5tjIHRhIOG6o25oIGjGsOG7n25nIHThu5tpIG5ndeG7k24gxJHhuqd1IHTGsCBuxrDhu5tjIG5nb8OgaToKLSBNw7RpIHRyxrDhu51uZyDEkeG6p3UgdMawOgoKLSBDaMOtbmggc8OhY2ggxJHhuqd1IHTGsDoKCiAgLSBN4bupYyDEkeG7mSDGsHUgxJHDo2kgdGh14bq/LCBjaMOtbmggc8OhY2ggaOG7lyB0cuG7oyBuaMOgIMSR4bqndSB0xrAuCiAgCiAgLSBI4buHIHRo4buRbmcgcGjDoXAgbHXhuq10IG1pbmggYuG6oWNoLCDhu5VuIMSR4buLbmggdsOgIGThu4UgZOG7sSDEkW/DoW4uCiAgCiAgLSBUaOG7pyB04bulYyBow6BuaCBjaMOtbmggxJHGoW4gZ2nhuqNuLCBuaGFuaCBjaMOzbmcuCiAgCi0gQ8ahIHPhu58gaOG6oSB04bqnbmc6CgogIC0gSOG7hyB0aOG7kW5nIGdpYW8gdGjDtG5nLCB0aMO0bmcgdGluIGxpw6puIGzhuqFjLCBuxINuZyBsxrDhu6NuZyBwaMOhdCB0cmnhu4NuLgogIAogIC0gS2h1IGPDtG5nIG5naGnhu4dwLCBraHUgY2jhur8geHXhuqV0IMSRxrDhu6NjIHF1eSBob+G6oWNoIGLDoGkgYuG6o24uCiAgCi0gQ2jhuqV0IGzGsOG7o25nIG5ndeG7k24gbmjDom4gbOG7sWM6CgogIC0gTOG7sWMgbMaw4bujbmcgbGFvIMSR4buZbmcgdHLhurssIGThu5NpIGTDoG8sIGPDsyB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gdsOgIGvhu7kgbsSDbmcgbmfDoHkgY8OgbmcgY2FvLgogIAogIC0gQ2hpIHBow60gbGFvIMSR4buZbmcgY+G6oW5oIHRyYW5oLgogIAotIFRo4buLIHRyxrDhu51uZzoKCi0gUXV5IG3DtCB0aOG7iyB0csaw4budbmc6CgogIC0gRMOibiBz4buRIFZp4buHdCBOYW0gxJHDtG5nLCB0cuG6uyB2w6AgxJFhbmcgdMSDbmcgdHLGsOG7n25nLgogIAogIC0gTmh1IGPhuqd1IHRpw6p1IGTDuW5nIG5nw6B5IGPDoG5nIGNhby4KICAKICAtIE3hu6ljIMSR4buZIGjhu5lpIG5o4bqtcCBraW5oIHThur8gcXXhu5FjIHThur86Ci0gVmnhu4d0IE5hbSB0aGFtIGdpYSBuaGnhu4F1IEhp4buHcCDEkeG7i25oIHRoxrDGoW5nIG3huqFpIHThu7EgZG8gKEZUQSksIHThuqFvIMSRaeG7gXUga2nhu4duIHRodeG6rW4gbOG7o2kgY2hvIHh14bqldCBuaOG6rXAga2jhuql1LgoKLSBUaOG7iyB0csaw4budbmcgVmnhu4d0IE5hbSDEkcaw4bujYyBr4bq/dCBu4buRaSB24bubaSB0aOG7iyB0csaw4budbmcgY+G7p2EgY8OhYyBuxrDhu5tjIGtow6FjIHRyb25nIGtodSB24buxYyB2w6AgdHLDqm4gdGjhur8gZ2nhu5tpLgoKLSBZ4bq/dSB04buRIGLDqm4gbmdvw6BpOgoKICAtIFPhu7Eg4buVbiDEkeG7i25oIGNow61uaCB0cuG7izoKICAKICAtIE3DtGkgdHLGsOG7nW5nIGNow61uaCB0cuG7iyDhu5VuIMSR4buLbmgsIGFuIG5pbmggxJHhuqNtIGLhuqNvLgogIAotIFbEg24gaMOzYSB2w6AgcGhvbmcgdOG7pWMgdOG6rXAgcXXDoW46CgogIC1WxINuIGjDs2EgdGjDom4gdGhp4buHbiwgY+G7n2kgbeG7nywgY2jDoG8gxJHDs24gbmjDoCDEkeG6p3UgdMawIG7GsOG7m2Mgbmdvw6BpLgogIAogIAojIDMuIFBow6JuIHTDrWNoIHbhu4EgUENQSU9fSVggdOG7qyBJTUYgCgotIFBDUElPX0lYIGzDoCB2aeG6v3QgdOG6r3QgY+G7p2EgUGVyc29uYWwgQ29uc3VtcHRpb24gRXhwZW5kaXR1cmVzIFByaWNlIEluZGV4LCBFeGNsdWRpbmcgRm9vZCBhbmQgRW5lcmd5LCBoYXkgKipDaOG7iSBz4buRIGdpw6EgY2hpIHRpw6p1IHRpw6p1IGTDuW5nIGPDoSBuaMOibiwgbG/huqFpIHRy4burIHRo4buxYyBwaOG6qW0gdsOgIG7Eg25nIGzGsOG7o25nLioqCmBgYHtyIGVjaG89VFJVRSwgd2FybmluZz1GQUxTRX0KZ2dwbG90KGRhdGEgPSBjcGksIGFlcyh4ID0gYFRob2lHaWFuYCwgeSA9IENQSSkpICsKICBnZW9tX2NvbChmaWxsID0gIm9yYW5nZSIsIGNvbG9yID0gImJsYWNrIikgKwogIGxhYnMoeCA9ICJUaG9pR2lhbiIseSA9ICJDaOG7iSBz4buRIGdpw6EgdGnDqnUgZMO5bmcgKENQSSkiKSArCiAgZ2d0aXRsZSgiQmnhu4N1IMSR4buTIGNo4buJIHPhu5EgZ2nDoSB0acOqdSBkw7luZyAoQ1BJKSBzbyB24bubaSBuxINtIDIwMTkgKDIwMDIgLSAyMDA1KSIpICsKICB0aGVtZV9taW5pbWFsKCkgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCB2anVzdCA9IDEsIGhqdXN0PTEpKQpgYGAKLSBOaOG6rW4geMOpdDoKICAtIENo4buJIHPhu5EgZ8OtYSB0acOqdSBkw7luZyBj4bunYSBjw6FjIHRow6FuZyBxdWEgdOG7q25nIG7Eg20gbMOgIGtow7RuZyDEkeG7k25nIMSR4buBdSAKICAtIFThu6sgxJHDonkgY8OhYyBkb2FuaCBuZ2hp4buHcCBjw7MgdGjhu4MgcGjDom4gdMOtY2ggaMOgbmggdmkgbmfGsOG7nWkgdGnDqnUgZMO5bmcgxJHhu4MgY8OzIHRo4buDIMSRxrBhIHJhIGPDoWMgY2hp4bq/IGzGsOG7o2Mgc+G6o24geHXhuqV0IHBow7kgaOG7o3AgduG7m2kgdGjhu4sgdHLGsOG7nW5nIAoKIyMgMy4yIFBow6JuIHTDrWNoIGNo4buJIHPhu5EgZ2nDoSB0acOqdSBkw7luZyAoQ1BJKSBj4bunYSB04bqldCBj4bqjIGPDoWMgbeG6t3QgaMOgbmcgY+G7p2Egbsaw4bubYyB0YQotIMSQ4buDIHBow6JuIHTDrWNoIGNoaSB0aeG6v3QgY2jhu4kgc+G7kSBnacOhIHRpw6p1IGTDuW5nIChDUEkpIGPhu6dhIHThuqV0IGPhuqMgY8OhYyBt4bq3dCBow6BuZyB04bqhaSBWaeG7h3QgTmFtLCBjaMO6bmcgdGEgY+G6p24gZOG7sWEgdsOgbyBjw6FjIMSR4bq3YyDEkWnhu4NtIHNhdToKCi0gQmnhu4N1IGhp4buHbiBjaHVuZzogCiAgLSBN4bupYyB0xINuZy9naeG6o20gY+G7p2EgQ1BJOiBTbyBzw6FuaCBDUEkgY+G7p2EgdGjDoW5nL3F1w70vbsSDbSBoaeG7h24gdOG6oWkgduG7m2kgdGjDoW5nL3F1w70vbsSDbSB0csaw4bubYyDEkeG7gyDEkcOhbmggZ2nDoSBt4bupYyDEkeG7mSB0xINuZy9naeG6o20gY2h1bmcgY+G7p2EgZ2nDoSBj4bqjIGjDoG5nIGjDs2EgdsOgIGThu4tjaCB24bulLgogIC0gU28gc8OhbmggduG7m2kgbeG7pWMgdGnDqnUgbOG6oW0gcGjDoXQ6IFhlbSB4w6l0IG3hu6ljIHTEg25nL2dp4bqjbSBj4bunYSBDUEkgc28gduG7m2kgbeG7pWMgdGnDqnUgbOG6oW0gcGjDoXQgZG8gQ2jDrW5oIHBo4bunIMSR4buBIHJhIMSR4buDIMSRw6FuaCBnacOhIG3hu6ljIMSR4buZIGtp4buDbSBzb8OhdCBs4bqhbSBwaMOhdC4KICAtIFh1IGjGsOG7m25nIGJp4bq/biDEkeG7mW5nOiBQaMOibiB0w61jaCB4dSBoxrDhu5tuZyBiaeG6v24gxJHhu5luZyBj4bunYSBDUEkgdHJvbmcgdGjhu51pIGdpYW4gcXVhIMSR4buDIGThu7EgxJFvw6FuIHh1IGjGsOG7m25nIHRyb25nIHTGsMahbmcgbGFpLgogIC0gUGjDom4gdMOtY2ggdGhlbyBuaMOzbSBow6BuZyBow7NhIHbDoCBk4buLY2ggduG7pToKICAtIE3hu6ljIHTEg25nL2dp4bqjbSBj4bunYSB04burbmcgbmjDs206IFNvIHPDoW5oIG3hu6ljIHTEg25nL2dp4bqjbSBj4bunYSB04burbmcgbmjDs20gaMOgbmcgaMOzYSB2w6AgZOG7i2NoIHbhu6UgxJHhu4MgeMOhYyDEkeG7i25oIG5ow7NtIG7DoG8gY8OzIG3hu6ljIHTEg25nL2dp4bqjbSBjYW8gbmjhuqV0LCB0aOG6pXAgbmjhuqV0LgogIC0gU28gc8OhbmggbeG7qWMgdMSDbmcvZ2nhuqNtIGdp4buvYSBjw6FjIG5ow7NtOiBQaMOibiB0w61jaCBt4bupYyB0xINuZy9naeG6o20gY+G7p2EgY8OhYyBuaMOzbSBow6BuZyBow7NhIHbDoCBk4buLY2ggduG7pSDEkeG7gyDEkcOhbmggZ2nDoSBt4bupYyDEkeG7mSDhuqNuaCBoxrDhu59uZyBj4bunYSB04burbmcgbmjDs20gxJHhur9uIENQSSBjaHVuZy4KICAtIFBow6JuIHTDrWNoIG5ndXnDqm4gbmjDom46IFjDoWMgxJHhu4tuaCBuZ3V5w6puIG5ow6JuIGThuqtuIMSR4bq/biBt4bupYyB0xINuZy9naeG6o20gY+G7p2EgdOG7q25nIG5ow7NtIGjDoG5nIGjDs2EgdsOgIGThu4tjaCB24bulLgogIC0gUGjDom4gdMOtY2ggdGhlbyBraHUgduG7sWM6IE3hu6ljIHTEg25nL2dp4bqjbSBj4bunYSB04burbmcga2h1IHbhu7FjOiBTbyBzw6FuaCBt4bupYyB0xINuZy9naeG6o20gY+G7p2EgQ1BJIGdp4buvYSBjw6FjIGtodSB24buxYyAodGjDoG5oIHRo4buLLCBuw7RuZyB0aMO0biwgdsO5bmcgbWnhu4FuKSDEkeG7gyDEkcOhbmggZ2nDoSBt4bupYyDEkeG7mSBjaMOqbmggbOG7h2NoIGdpw6EgY+G6oyBnaeG7r2EgY8OhYyBraHUgduG7sWMuClBow6JuIHTDrWNoIG5ndXnDqm4gbmjDom46IFjDoWMgxJHhu4tuaCBuZ3V5w6puIG5ow6JuIGThuqtuIMSR4bq/biBt4bupYyB0xINuZy9naeG6o20gY+G7p2EgQ1BJIGdp4buvYSBjw6FjIGtodSB24buxYy4KICAtIFBow6JuIHTDrWNoIHRoZW8gxJHhu5FpIHTGsOG7o25nOiBN4bupYyB0xINuZy9naeG6o20gdGhlbyBuaMOzbSB0aHUgbmjhuq1wOiBTbyBzw6FuaCBt4bupYyB0xINuZy9naeG6o20gY+G7p2EgQ1BJIGdp4buvYSBjw6FjIG5ow7NtIHRodSBuaOG6rXAgKGNhbywgdHJ1bmcgYsOsbmgsIHRo4bqlcCkgxJHhu4MgxJHDoW5oIGdpw6EgbeG7qWMgxJHhu5kg4bqjbmggaMaw4bufbmcgY+G7p2EgbOG6oW0gcGjDoXQgxJHhur9uIHThu6tuZyBuaMOzbSB0aHUgbmjhuq1wLgogIC0gUGjDom4gdMOtY2ggbmd1ecOqbiBuaMOibjogWMOhYyDEkeG7i25oIG5ndXnDqm4gbmjDom4gZOG6q24gxJHhur9uIG3hu6ljIHTEg25nL2dp4bqjbSBj4bunYSBDUEkgZ2nhu69hIGPDoWMgbmjDs20gdGh1IG5o4bqtcC4KLSBOZ2/DoGkgcmEsIGPhuqduIGzGsHUgw70gbeG7mXQgc+G7kSDEkWnhu4NtIHNhdToKIAogIC0gROG7ryBsaeG7h3UgQ1BJOiBT4butIGThu6VuZyBk4buvIGxp4buHdSBDUEkgY2jDrW5oIHRo4bupYyDEkcaw4bujYyBjw7RuZyBi4buRIGLhu59pIFThu5VuZyBj4bulYyBUaOG7kW5nIGvDqi4KICAtIEPhuq1wIG5o4bqtdCB0aMO0bmcgdGluOiBUaGVvIGTDtWkgY+G6rXAgbmjhuq10IHRow7RuZyB0aW4gduG7gSBnacOhIGPhuqMgdGjhu4sgdHLGsOG7nW5nLCBjw6FjIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHhur9uIENQSSDEkeG7gyBjw7MgcGjDom4gdMOtY2ggY2jDrW5oIHjDoWMuCiAgLSBQaMOibiB0w61jaCBraMOhY2ggcXVhbjogVHLDoW5oIMSRxrBhIHJhIG5o4buvbmcgbmjhuq1uIMSR4buLbmggY2jhu6cgcXVhbiwgdGhp4bq/dSBjxqEgc+G7ny4K