PHẦN 1: TÌM HIỂU VÀ CHUẨN BỊ DỮ LIỆU
1.1 ĐỌC DỮ LIỆU
- Bộ dữ liệu với tiêu đề “Social Media Addiction vs Relationships” của
tác giả Adil Shamim, là một bộ dữ liệu nghiên cứu mối quan hệ giữa mức
độ nghiện mạng xã hội và chất lượng các mối quan hệ cá nhân. Bộ dữ liệu
này được thu thập từ 1.000 sinh viên tại Pakistan và có thể hữu ích cho
các nghiên cứu về tâm lý học, xã hội học và sức khỏe cộng đồng.
1.1.1 Đọc file dữ liệu gốc
data <- read.csv ("~/Downloads/Students Social Media Addiction.csv", header = T)
str(data)
## 'data.frame': 705 obs. of 13 variables:
## $ Student_ID : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Age : int 19 22 20 18 21 19 23 20 18 21 ...
## $ Gender : chr "Female" "Male" "Female" "Male" ...
## $ Academic_Level : chr "Undergraduate" "Graduate" "Undergraduate" "High School" ...
## $ Country : chr "Bangladesh" "India" "USA" "UK" ...
## $ Avg_Daily_Usage_Hours : num 5.2 2.1 6 3 4.5 7.2 1.5 5.8 4 3.3 ...
## $ Most_Used_Platform : chr "Instagram" "Twitter" "TikTok" "YouTube" ...
## $ Affects_Academic_Performance: chr "Yes" "No" "Yes" "No" ...
## $ Sleep_Hours_Per_Night : num 6.5 7.5 5 7 6 4.5 8 6 6.5 7 ...
## $ Mental_Health_Score : int 6 8 5 7 6 4 9 6 7 7 ...
## $ Relationship_Status : chr "In Relationship" "Single" "Complicated" "Single" ...
## $ Conflicts_Over_Social_Media : int 3 0 4 1 2 5 0 2 1 1 ...
## $ Addicted_Score : int 8 3 9 4 7 9 2 8 5 4 ...
1.1.2 Lựa chọn các biến định tính
Giải thích:
- c(““): tạo vecto
- dat <- data[, dldt]: lấy trong bộ dữ liệu data các cột trong dldt
vừa tạo ra (các biến định tính), và lấy tất cả các hàng (full quan
sát)
# Chọn các biến định tính
dldt <- c("Age", "Gender", "Academic_Level", "Country", "Most_Used_Platform", "Affects_Academic_Performance", "Relationship_Status")
# Tạo bộ dữ liệu mới chỉ chứa định tính
dat <- data[, dldt]
1.2. TỔNG QUAN VỀ DỮ LIỆU
1.2.1 Nội dung dữ liệu
Bộ dữ liệu Social Media Addiction này gồm 705 quan sát
tương ứng với từng học sinh, sinh viên bao gồm thông tin cá
nhân, tần suất sử dụng mạng xã hội,
chi tiết các nền tảng mạng xã hội, các thông
tin liên quan đến sức khoẻ, tình trạng hôn
nhân, mức độ nghiện mạng xã hội.
Bộ dữ liệu Social Media Addiction vs
Relationships cung cấp thông tin từ 705 sinh viên về hành vi sử
dụng mạng xã hội, đặc điểm nhân khẩu học, sức khỏe tâm thần và tình
trạng các mối quan hệ cá nhân. Bộ dữ liệu này có thể được sử dụng để
phân tích mối liên hệ giữa mức độ nghiện mạng xã hội và các yếu tố như
chất lượng mối quan hệ, giấc ngủ, kết quả học tập và sức khỏe tâm lý.
Ngoài ra, nó còn cho phép so sánh hành vi sử dụng mạng xã hội giữa các
nhóm theo giới tính, độ tuổi, quốc gia hoặc trình độ học vấn. Với dữ
liệu định lượng và định tính phong phú, bộ dữ liệu này rất phù hợp cho
các nghiên cứu trong lĩnh vực tâm lý học, xã hội học, giáo dục hoặc y tế
công cộng, đồng thời có thể hỗ trợ trong việc xây dựng các mô hình dự
đoán nguy cơ nghiện mạng xã hội và đề xuất các biện pháp can thiệp nhằm
cải thiện chất lượng cuộc sống và mối quan hệ cá nhân của giới
trẻ.
1.2.2 Danh sách các biến và mô tả
Cấu trúc bộ dữ liệu Supermarket Transactions
1.2.3 Kiểm tra dữ liệu
1.2.3.1 Kiểm tra số lượng NA trong cột định
tính
Giải thích:
sapply(dat, …): áp dụng hàm cho từng cột trong dữ liệu
dat.
sum(is.na(x)): đếm số lượng NA trong từng cột.
# Kiểm tra số lượng NA trong mỗi cột định tính
na_counts <- sapply(dat, function(x) sum(is.na(x)))
na_counts
## Age Gender
## 0 0
## Academic_Level Country
## 0 0
## Most_Used_Platform Affects_Academic_Performance
## 0 0
## Relationship_Status
## 0
Nhận xét - Kết quả thu được cho thấy rằng tất cả các
cột định tính đều không có giá trị thiếu (NA) vì số lượng NA trong các
cột đều hiển thị là 0
1.2.3.2 Chuyển đổi các biến định tính sang kiểu
factor
# Chuyển các biến định tính sang factor
dat$Gender <- as.factor(dat$Gender)
dat$Academic_Level <- as.factor(dat$Academic_Level)
dat$Country <- as.factor(dat$Country)
dat$Most_Used_Platform <- as.factor(dat$Most_Used_Platform)
dat$Affects_Academic_Performance <- as.factor(dat$Affects_Academic_Performance)
dat$Relationship_Status <- as.factor(dat$Relationship_Status)
Kiểm tra lại sau khi chuyển đổi
Giải thích:
sapply(dat, class): Áp dụng hàm class() cho từng cột để kiểm tra
kiểu dữ liệu. Kết quả trả về là một vector hiển thị tên cột và loại dữ
liệu tương ứng.
Nếu kết quả là “factor” cho tất cả các cột → chuyển đổi thành
công.
sapply(dat, class)
## Age Gender
## "integer" "factor"
## Academic_Level Country
## "factor" "factor"
## Most_Used_Platform Affects_Academic_Performance
## "factor" "factor"
## Relationship_Status
## "factor"
Nhận xét : Kết quả thu được toàn bộ các biến đã được
chuyển đổi thành dạng factor.
PHẦN 2: PHÂN TÍCH MÔ TẢ BIẾN ĐỊNH TÍNH
install.packages("ggplot2", repos = "https://cran.r-project.org")
##
## There is a binary version available but the source version is later:
## binary source needs_compilation
## ggplot2 3.4.4 3.5.2 FALSE
## installing the source package 'ggplot2'
library(ggplot2)
2.1. Age - Độ tuổi
2.1.1 Thống kê tần số, tần suất và trực quan
hóa
2.1.1.1 Tần số, tần suất
tab_age <- table(dat$Age)
tab_age
##
## 18 19 20 21 22 23 24
## 14 163 165 156 147 34 26
table(dat$Age)/sum(nrow(dat))
##
## 18 19 20 21 22 23 24
## 0.01985816 0.23120567 0.23404255 0.22127660 0.20851064 0.04822695 0.03687943
2.1.1.2 Trực quan hoá
ggplot(dat, aes(x = Age)) +
geom_bar(fill = "steelblue") +
theme_minimal() +
labs(title = "Tần suất theo độ tuổi", x = "Độ tuổi", y = "Số lượng")

2.1.2 Nhận xét
Độ tuổi của người tham gia khảo sát chủ yếu tập trung vào khoảng
từ 19 đến 22 tuổi, chiếm khoảng 89.5% tổng số mẫu. Cụ thể:
- Tuổi 20 là nhóm chiếm tỷ lệ cao nhất (23.4%), theo sát là tuổi 19
(23.1%) và tuổi 21 (22.1%).
- Điều này cho thấy phần lớn người tham gia đang trong độ tuổi sinh
viên đại học.
Các nhóm tuổi 23 và 24 có tỷ lệ thấp hơn đáng kể (chỉ khoảng 8.5%
tổng số mẫu), có thể là nhóm sinh viên năm cuối, học cao học hoặc đã tốt
nghiệp.
Tuổi 18 chiếm một phần rất nhỏ (1.99%), cho thấy người tham gia
khảo sát có độ tuổi bắt đầu từ giai đoạn mới vào đại học hoặc cuối trung
học phổ thông.
Phân bố độ tuổi khá tập trung và lệch trái nhẹ, cho thấy đối
tượng khảo sát tương đối đồng nhất về mặt độ tuổi – chủ yếu là thanh
niên, sinh viên.
Điều này phù hợp với mục tiêu nghiên cứu liên quan đến nghiện
mạng xã hội và các mối quan hệ, vì đây là nhóm tuổi sử dụng mạng xã hội
thường xuyên và dễ bị ảnh hưởng nhất.
2.1.3 Kết luận
Biến Age trong bộ dữ liệu thể hiện rõ rằng đối tượng
nghiên cứu chủ yếu là sinh viên trong độ tuổi từ 19 đến 22, với độ tuổi
20 là phổ biến nhất. Đây là nhóm tuổi quan trọng để nghiên cứu các vấn
đề liên quan đến hành vi sử dụng mạng xã hội, sức khỏe tâm thần và chất
lượng các mối quan hệ, do họ đang trong giai đoạn phát triển mạnh về mặt
xã hội và tâm lý.
2.2 Gender - Giới tính
2.2.1 Thống kê tần số, tần suất và trực quan
hóa
install.packages("dplyr", repos = "https://cloud.r-project.org")
##
## The downloaded binary packages are in
## /var/folders/r1/mpp_jg0902scdzcs9r73nnmr0000gn/T//RtmpVfOZRj/downloaded_packages
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
2.2.1.1 Tần số, tần suất
tab_gender <- table(dat$Gender)
tab_gender
##
## Female Male
## 353 352
table(dat$Gender)/sum(nrow(dat))
##
## Female Male
## 0.5007092 0.4992908
2.2.1.2 Trực quan hoá
# Tạo dataframe từ bảng tần số
gender_freq <- as.data.frame(tab_gender)
colnames(gender_freq) <- c("Gender", "Frequency")
# Tính phần trăm
gender_freq$Percentage <- gender_freq$Frequency / sum(gender_freq$Frequency) * 100
# Tạo nhãn chỉ gồm phần trăm
gender_freq$Label <- paste0(round(gender_freq$Percentage, 1), "%")
# Vẽ biểu đồ tròn với nhãn chỉ phần trăm
ggplot(gender_freq, aes(x = "", y = Percentage, fill = Gender)) +
geom_col(width = 1, color = "white") +
coord_polar(theta = "y") +
theme_void() +
geom_text(aes(label = Label), position = position_stack(vjust = 0.5), size = 5) +
labs(title = "Phân bố giới tính người tham gia khảo sát") +
scale_fill_brewer(palette = "Pastel1")

Giải thích code
tab_gender là bảng tần số kiểu table đếm số lượng từng nhóm trong
biến Gender.
as.data.frame(tab_gender) chuyển bảng tần số thành dạng data
frame để dễ xử lý.
Đổi tên cột thành “Gender” (nhóm giới tính) và “Frequency” (số
lượng).
Đổi tên cột thành “Gender” (nhóm giới tính) và “Frequency” (số
lượng).
tab_gender là bảng tần số kiểu table đếm số lượng từng nhóm trong
biến Gender.
as.data.frame(tab_gender) chuyển bảng tần số thành dạng data
frame để dễ xử lý.
Tạo cột Label để dùng làm nhãn trên biểu đồ.
Dùng round() làm tròn số phần trăm đến 1 chữ số thập
phân.
Kết hợp phần trăm với ký hiệu % thành chuỗi ký tự.
ggplot(gender_freq, aes(x = ““, y = Percentage, fill =
Gender)):
- Khởi tạo biểu đồ với dữ liệu gender_freq.
- x = ““: tạo 1 nhóm duy nhất (tạo cột trống), vì biểu đồ tròn không
phân theo trục X.
- y = Percentage: chiều cao cột (trước khi chuyển thành tròn) là phần
trăm.
- fill = Gender: tô màu theo nhóm giới tính.
geom_col(width = 1, color = “white”):
- Vẽ cột (bar chart) với chiều rộng bằng 1 (đầy đủ).
- color = “white” viền trắng giữa các múi giúp biểu đồ dễ nhìn
hơn.
coord_polar(theta = “y”):
- Biến biểu đồ cột thành biểu đồ tròn (polar coordinates).
- theta = “y” chuyển trục y thành góc trong biểu đồ tròn.
theme_void():
- Loại bỏ toàn bộ các trục, lưới, nhãn trục,… để biểu đồ gọn đẹp, phù
hợp với biểu đồ tròn.
geom_text(aes(label = Label), position = position_stack(vjust =
0.5), size = 5):
- Thêm chữ nhãn trên từng múi.
- position_stack(vjust = 0.5): đặt chữ ở giữa chiều dọc của từng
múi.
- size = 5: kích thước chữ.
labs(title = “Phân bố giới tính người tham gia khảo sát”):
- Thêm tiêu đề cho biểu đồ.
scale_fill_brewer(palette = “Pastel1”):
- Chọn bảng màu nhẹ nhàng (Pastel1) cho các múi biểu đồ, giúp màu sắc
hài hòa.
2.2.2 Nhận xét
- Tổng số quan sát trong bộ dữ liệu là 705, trong đó có 353 cá nhân
thuộc nhóm Female và 352 cá nhân thuộc nhóm Male.
- Tần số sử dụng mạng xã hội của hai nhóm gần như bằng nhau, với nữ
chiếm khoảng 50.07% và nam chiếm khoảng 49.93%.
- Sự phân bố giới tính trong mẫu nghiên cứu là khá cân bằng, không có
nhóm nào chiếm ưu thế vượt trội.
- Điều này rất quan trọng và tích cực vì:
- Giúp giảm sai lệch giới tính (gender bias) trong quá trình phân tích
dữ liệu.
- Cho phép so sánh khách quan giữa nam và nữ về:
- Mức độ nghiện mạng xã hội,
- Thời gian sử dụng trung bình mỗi ngày,
- Ảnh hưởng đến học tập, giấc ngủ, tâm lý, và đặc biệt là các xung đột
trong mối quan hệ.
2.2.3 Đánh giá
- Tỷ lệ giới tính cân bằng trong bộ dữ liệu giúp tăng tính đại diện và
độ tin cậy cho các phân tích tiếp theo về mối quan hệ giữa giới tính và
hành vi nghiện mạng xã hội, cũng như tác động của nó đến các mối quan hệ
cá nhân. Đây là một nền tảng tốt để khám phá sâu hơn các mẫu hành vi
khác biệt giữa nam và nữ trong bối cảnh xã hội hiện đại.
2.3 Academic Level - Trình độ học vấn
2.3.1 Thống kê mô tả tần số, tần suất, trực quan
hoá
2.3.1.1 Bảng tần số, tần suất
tab_academic <- table(dat$Academic_Level)
tab_academic
##
## Graduate High School Undergraduate
## 325 27 353
table(dat$Academic_Level)/sum(nrow(dat))
##
## Graduate High School Undergraduate
## 0.46099291 0.03829787 0.50070922
2.3.1.2 Trực quan hoá
# Tạo bảng tần số
tab_academic <- table(dat$Academic_Level)
# Chuyển sang data frame
academic_freq <- as.data.frame(tab_academic)
colnames(academic_freq) <- c("Academic_Level", "Frequency")
# Tính phần trăm
academic_freq$Percentage <- academic_freq$Frequency / sum(academic_freq$Frequency) * 100
# Tạo nhãn chỉ gồm phần trăm
academic_freq$Label <- paste0(round(academic_freq$Percentage, 1), "%")
ggplot(academic_freq, aes(x = "", y = Percentage, fill = Academic_Level)) +
geom_col(width = 1, color = "white") +
coord_polar(theta = "y") +
theme_void() +
geom_text(aes(label = Label),
position = position_stack(vjust = 0.5), size = 4) +
labs(title = "Phân bố trình độ học vấn của người tham gia") +
scale_fill_brewer(palette = "Set3")

2.3.2 Nhận xét
- Phân bố chủ yếu ở bậc đại học và sau đại học:
- Hơn 96% người tham gia thuộc hai nhóm: Undergraduate (50.07%) và
Graduate (46.10%).
- Chỉ có 3.83% là học sinh trung học (High School), cho thấy nhóm này
chiếm tỷ lệ rất nhỏ trong khảo sát.
- Phù hợp với chủ đề nghiên cứu:
- Vì bộ dữ liệu liên quan đến nghiện mạng xã hội và mối quan hệ cá
nhân, nhóm sinh viên và học viên sau đại học là đối tượng phù hợp để
nghiên cứu:
- Họ sử dụng mạng xã hội thường xuyên.
- Có thể đang trong độ tuổi dễ bị ảnh hưởng về mặt tâm lý, xã hội, học
tập và các mối quan hệ cá nhân.
- Tính đại diện:
- Sự phân bố này có thể phản ánh đối tượng mục tiêu của khảo sát là
sinh viên và người trẻ tuổi.
- Tuy nhiên, vì số lượng High School rất thấp, cần lưu ý nếu thực hiện
phân tích so sánh giữa các nhóm học vấn — nhóm này có thể không đủ số
liệu để đưa ra kết luận đáng tin cậy.
2.3.3 Kết luận
- Phân bố trình độ học vấn trong bộ dữ liệu tập trung chủ yếu vào sinh
viên đại học và sau đại học, phù hợp với mục tiêu nghiên cứu. Tuy nhiên,
cần cẩn trọng khi phân tích nhóm học sinh cấp ba do số lượng quá ít,
tránh đưa ra kết luận khái quát từ nhóm nhỏ này.
2.6 Relationship Status - Tình trạng mối quan
hệ
2.6.1 Thống kê mô tả tần số, tần suất, trực quan
hoá
2.6.1.1 Bảng tần số, tần suất
tab_relationship <- table(dat$Relationship_Status)
tab_relationship
##
## Complicated In Relationship Single
## 32 289 384
table(dat$Relationship_Status)/sum(nrow(dat))
##
## Complicated In Relationship Single
## 0.04539007 0.40992908 0.54468085
2.6.1.2 Trực quan hoá
# Chuyển thành data frame
relationship_freq <- as.data.frame(tab_relationship)
colnames(relationship_freq) <- c("Status", "Frequency")
# Tính phần trăm
relationship_freq$Percentage <- relationship_freq$Frequency / sum(relationship_freq$Frequency) * 100
# Tạo nhãn phần trăm
relationship_freq$Label <- paste0(round(relationship_freq$Percentage, 1), "%")
# Biểu đồ
ggplot(relationship_freq, aes(x = "", y = Percentage, fill = Status)) +
geom_col(width = 1, color = "white") +
coord_polar(theta = "y") +
theme_void() +
geom_text(aes(label = Label),
position = position_stack(vjust = 0.5), size = 5) +
labs(title = "Tình trạng mối quan hệ của người tham gia khảo sát") +
scale_fill_brewer(palette = "Set1")

2.6.2 Nhận xét
- Đa số người tham gia khảo sát đang ở trạng thái độc thân (Single),
chiếm khoảng 54.5% tổng số.
- Khoảng 41% người tham gia đang trong một mối quan hệ (In
Relationship).
- Một phần nhỏ (khoảng 4.5%) mô tả tình trạng mối quan hệ của họ là
phức tạp (Complicated).
2.6.3 Đánh giá
- Phân bố này phản ánh nhóm đối tượng khảo sát chủ yếu là người trẻ,
có thể là sinh viên hoặc người mới đi làm, với đa số vẫn còn độc thân
hoặc mới bắt đầu các mối quan hệ.
- Tỷ lệ khá cao người trong mối quan hệ (gần 41%) cho thấy mạng xã hội
có thể đóng vai trò quan trọng trong việc duy trì và phát triển các mối
quan hệ cá nhân của họ.
- Tỷ lệ “Complicated” tuy nhỏ nhưng cũng là dấu hiệu cho thấy có một
số lượng người trải nghiệm khó khăn, mâu thuẫn trong các mối quan hệ –
có thể là do ảnh hưởng của mạng xã hội, ví dụ như hiểu nhầm, xung đột
qua mạng…
PHẦN 3: ƯỚC LƯỢNG KHOẢNG VÀ KIỂM ĐỊNH GIẢ THUYẾT TỶ LỆ CHO 1
BIẾN
3.1 Gender - Male
3.1.1 Ước lượng khoảng tin cậy 95% cho tỷ lệ
nam
prop.test(x = sum(dat$Gender == "Male"),
n = nrow(dat),
p = 0.5, # Giả thuyết H0: p = 0.5
conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: sum(dat$Gender == "Male") out of nrow(dat), null probability 0.5
## X-squared = 0, df = 1, p-value = 1
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.4617813 0.5368081
## sample estimates:
## p
## 0.4992908
3.3 Academic Level - High School
3.3.1 Ước lượng khoảng tin cậy 95% cho tỷ lệ người dùng là
học sinh THPT
prop.test(
x = sum(dat$Academic_Level == "High School"),
n = nrow(dat),
p = 0.05,
alternative = "greater", # Một phía: kiểm định p > 0.05
conf.level = 0.95
)
##
## 1-sample proportions test with continuity correction
##
## data: sum(dat$Academic_Level == "High School") out of nrow(dat), null probability 0.05
## X-squared = 1.7936, df = 1, p-value = 0.9098
## alternative hypothesis: true p is greater than 0.05
## 95 percent confidence interval:
## 0.02746425 1.00000000
## sample estimates:
## p
## 0.03829787
3.3.2 Bài toán kiểm định
Giả thuyết kiểm định:
- H₀: Tỷ lệ học sinh THPT = 5% (p = 0.05)
- H₁: Tỷ lệ học sinh THPT > 5% (p > 0.05)
Kết quả kiểm định:
Giá trị thống kê X-squared = 1.7936
p-value = 0.9098
Tỷ lệ mẫu (p̂) = 0.0383 (khoảng 3.8%)
Khoảng tin cậy 95% (một phía) là từ 2.75% đến 100% (được hiển thị
như vậy do kiểm định 1 phía)
Nhận xét
p-value = 0.9098 > 0.05, do đó không có đủ bằng chứng để bác
bỏ giả thuyết H₀.
Tỷ lệ học sinh THPT trong mẫu khảo sát là khoảng 3.8%, thấp hơn
5% giả định trong H₀.
Khoảng tin cậy thấp hơn 5%, chứng tỏ tỷ lệ thực sự có thể thấp
hơn hoặc bằng 5%.
Như vậy, không có bằng chứng thống kê để kết luận rằng tỷ lệ học
sinh THPT trong mẫu lớn hơn 5%.
Kết luận
- Dựa trên kết quả kiểm định, tỷ lệ học sinh THPT trong khảo sát không
vượt quá 5% một cách có ý nghĩa thống kê. Tỷ lệ thực tế có thể thấp hơn
hoặc bằng 5%.
3.4 Academic Level - Undergraduate và Graduate
# Tạo bảng 2 chiều giữa Academic_Level và Affects_Academic_Performance
tab_academic <- table(dat$Academic_Level, dat$Affects_Academic_Performance)
# Chỉ giữ lại Undergraduate và Graduate
tab_ug_g <- tab_academic[c("Undergraduate", "Graduate"), ]
prop.test(
x = c(tab_ug_g["Undergraduate", "Yes"], tab_ug_g["Graduate", "Yes"]),
n = c(sum(tab_ug_g["Undergraduate", ]), sum(tab_ug_g["Graduate", ])),
alternative = "less", # kiểm định 1 phía
conf.level = 0.95
)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: c(tab_ug_g["Undergraduate", "Yes"], tab_ug_g["Graduate", "Yes"]) out of c(sum(tab_ug_g["Undergraduate", ]), sum(tab_ug_g["Graduate", ]))
## X-squared = 0.814, df = 1, p-value = 0.8165
## alternative hypothesis: less
## 95 percent confidence interval:
## -1.0000000 0.1003869
## sample estimates:
## prop 1 prop 2
## 0.6487252 0.6123077
3.4.1 Bài toán kiểm định
Nhận xét kết quả kiểm định
- Giá trị thống kê chi bình phương (X-squared) = 0.814: Giá trị này
không lớn, cho thấy sự khác biệt giữa hai tỷ lệ quan sát được không quá
nổi bật hoặc không có sự khác biệt rõ ràng.
- Số bậc tự do (df) = 1: Vì so sánh giữa 2 nhóm nên bậc tự do là 1,
phù hợp với bài toán kiểm định tỷ lệ giữa hai nhóm.
- P-value = 0.8165: Đây là xác suất quan sát được sự khác biệt như vậy
(hoặc lớn hơn) nếu giả thuyết gốc (H₀: tỉ lệ undergraduate bằng tỉ lệ
graduate) là đúng. Giá trị p-value lớn hơn mức ý nghĩa 0.05 cho thấy
không đủ bằng chứng để bác bỏ giả thuyết gốc.
- Hướng kiểm định (alternative hypothesis: less): Giả thuyết đối ở đây
là tỉ lệ undergraduate nhỏ hơn tỉ lệ graduate. Tuy nhiên, kết quả ước
lượng tỉ lệ mẫu lại là:
- prop 1 (Undergraduate) = 0.6487 (64.87%)
- prop 2 (Graduate) = 0.6123 (61.23%) Điều này cho thấy tỉ lệ
undergraduate còn cao hơn một chút so với graduate, tức là giả thuyết
đối “undergraduate < graduate” không phù hợp với dữ liệu quan
sát.
- Khoảng tin cậy 95% cho hiệu tỉ lệ (prop1 - prop2): (-1.0000,
0.1004): Khoảng này rất rộng và bao gồm cả số 0 cũng như các giá trị
dương, điều này có nghĩa là có thể không có sự khác biệt hoặc tỉ lệ
undergraduate có thể cao hơn graduate. Do đó, chưa có đủ bằng chứng để
kết luận undergraduate có tỉ lệ dùng mạng xã hội nhỏ hơn graduate.
Kết luận
- Với mức ý nghĩa α = 0.05, vì p-value = 0.8165 > 0.05, ta không
bác bỏ giả thuyết H₀. Không có đủ bằng chứng thống kê để kết luận rằng
tỷ lệ dùng mạng xã hội của nhóm undergraduate nhỏ hơn nhóm
graduate.
3.5 Relationship Status - Single
- Trong nhóm người có trạng thái “Single”, tỷ lệ người cho biết mạng
xã hội ảnh hưởng đến việc học nằm trong khoảng nào với độ tin cậy
95%?
# Đếm số người "Single" bị ảnh hưởng học tập (Yes)
x <- sum(dat$Relationship_Status == "Single" & dat$Affects_Academic_Performance == "Yes")
# Tổng số người "Single"
n <- sum(dat$Relationship_Status == "Single")
# Ước lượng khoảng tin cậy 95% cho tỷ lệ dùng mạng xã hội ảnh hưởng học tập
prop.test(x = x, n = n, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: x out of n, null probability 0.5
## X-squared = 67.503, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.6623351 0.7552421
## sample estimates:
## p
## 0.7109375
3.5.1 Bài toán kiểm định
Giả thuyết kiểm định:
- H₀: Tỷ lệ người độc thân (Single) bị ảnh hưởng bởi mạng xã hội là
50% (p = 0.05)
- H₁: Tỷ lệ người độc thân (Single) bị ảnh hưởng bởi mạng xã hội khác
50% (p ≠ 0.5)
Kết quả thống kê:
- Tỷ lệ mẫu (ước lượng) là 0.7109 tức là 71.1% người độc thân bị ảnh
hưởng bởi mạng xã hội.
- Khoảng tin cậy 95%: [0.6623, 0.7552]
- Giá trị kiểm định Chi-squared: 67.503
- p-value: < 2.2 × 10⁻¹⁶
Diễn giải kết quả
Tỷ lệ người độc thân bị ảnh hưởng bởi mạng xã hội là khoảng
71.1%, và khoảng tin cậy 95% nằm từ 66.2% đến 75.5%.
Khoảng tin cậy này không chứa 0.5, nghĩa là chúng ta loại bỏ H₀
(không có bằng chứng rằng tỷ lệ là 50%).
p-value < 0.001, cực kỳ nhỏ → nghĩa là xác suất để quan sát
được tỷ lệ này nếu p = 0.5 là rất thấp, nên ta bác bỏ H₀.
3.5.2 Kết luận
- Với mức ý nghĩa α = 0.05 ta có đủ bằng chứng để kết luận rằng:
- Tỷ lệ người độc thân bị ảnh hưởng bởi mạng xã hội KHÁC 50% một cách
có ý nghĩa thống kê.
- Cụ thể, có hơn 70% người độc thân bị ảnh hưởng, và đây là một tỷ lệ
cao đáng kể, cho thấy mạng xã hội có thể có tác động rõ rệt đến học tập
của nhóm này.
PHẦN 4: PHÂN TÍCH MỐI LIÊN HỆ GIỮA HAI BIẾN
PHẦN 5: RELATIVE RISK
install.packages("epitools", repos = "https://cloud.r-project.org")
##
## The downloaded binary packages are in
## /var/folders/r1/mpp_jg0902scdzcs9r73nnmr0000gn/T//RtmpVfOZRj/downloaded_packages
library(epitools)
LS0tCnRpdGxlOiAiTkhJ4buGTSBW4bukIFRV4bqmTiA0IgphdXRob3I6ICJU4bqhIEPDtG5nIMSQ4bqhdCIKZGF0ZTogIjIwMjUtMDYtMDYiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OiAKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIHRvYzogdHJ1ZQogIHBkZl9kb2N1bWVudDoKICAgIGxhdGV4X2VuZ2luZTogeGVsYXRleAotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpCmBgYAoKIyMgKipQSOG6pk4gMTogVMOMTSBISeG7glUgVsOAIENIVeG6qE4gQuG7iiBE4buuIExJ4buGVSoqCgojIyMgKioxLjEgxJDhu4xDIEThu64gTEnhu4ZVKioKCi0gQuG7mSBk4buvIGxp4buHdSB24bubaSB0acOqdSDEkeG7gSAiU29jaWFsIE1lZGlhIEFkZGljdGlvbiB2cyBSZWxhdGlvbnNoaXBzIiBj4bunYSB0w6FjIGdp4bqjIEFkaWwgU2hhbWltLCBsw6AgbeG7mXQgYuG7mSBk4buvIGxp4buHdSBuZ2hpw6puIGPhu6l1IG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgbeG7qWMgxJHhu5kgbmdoaeG7h24gbeG6oW5nIHjDoyBo4buZaSB2w6AgY2jhuqV0IGzGsOG7o25nIGPDoWMgbeG7kWkgcXVhbiBo4buHIGPDoSBuaMOibi4gQuG7mSBk4buvIGxp4buHdSBuw6B5IMSRxrDhu6NjIHRodSB0aOG6rXAgdOG7qyAxLjAwMCBzaW5oIHZpw6puIHThuqFpIFBha2lzdGFuIHbDoCBjw7MgdGjhu4MgaOG7r3Ugw61jaCBjaG8gY8OhYyBuZ2hpw6puIGPhu6l1IHbhu4EgdMOibSBsw70gaOG7jWMsIHjDoyBo4buZaSBo4buNYyB2w6Agc+G7qWMga2jhu49lIGPhu5luZyDEkeG7k25nLgoKCiMjIyMgKioxLjEuMSDEkOG7jWMgZmlsZSBk4buvIGxp4buHdSBn4buRYyoqCgpgYGB7cn0KZGF0YSA8LSByZWFkLmNzdiAoIn4vRG93bmxvYWRzL1N0dWRlbnRzIFNvY2lhbCBNZWRpYSBBZGRpY3Rpb24uY3N2IiwgaGVhZGVyID0gVCkKYGBgCi0gKipD4bqldSB0csO6YyBi4buZIGThu68gbGnhu4d1KioKCmBgYHtyfQpzdHIoZGF0YSkKYGBgCgoKIyMjIyAqKjEuMS4yIEzhu7FhIGNo4buNbiBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oKioKCkdp4bqjaSB0aMOtY2g6CgotIGMoIiIpOiB04bqhbyB2ZWN0bwotIGRhdCA8LSBkYXRhWywgZGxkdF06IGzhuqV5IHRyb25nIGLhu5kgZOG7ryBsaeG7h3UgZGF0YSBjw6FjIGPhu5l0IHRyb25nIGRsZHQgduG7q2EgdOG6oW8gcmEgKGPDoWMgYmnhur9uIMSR4buLbmggdMOtbmgpLCB2w6AgbOG6pXkgdOG6pXQgY+G6oyBjw6FjIGjDoG5nIChmdWxsIHF1YW4gc8OhdCkKCmBgYHtyfQojIENo4buNbiBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oCmRsZHQgPC0gYygiQWdlIiwgIkdlbmRlciIsICJBY2FkZW1pY19MZXZlbCIsICJDb3VudHJ5IiwgIk1vc3RfVXNlZF9QbGF0Zm9ybSIsICJBZmZlY3RzX0FjYWRlbWljX1BlcmZvcm1hbmNlIiwgIlJlbGF0aW9uc2hpcF9TdGF0dXMiKQoKIyBU4bqhbyBi4buZIGThu68gbGnhu4d1IG3hu5tpIGNo4buJIGNo4bupYSDEkeG7i25oIHTDrW5oCmRhdCA8LSBkYXRhWywgZGxkdF0KYGBgCgojIyMgKioxLjIuIFThu5RORyBRVUFOIFbhu4AgROG7riBMSeG7hlUqKgoKIyMjIyAqKjEuMi4xIE7hu5lpIGR1bmcgZOG7ryBsaeG7h3UqKgoKLSBC4buZIGThu68gbGnhu4d1ICpTb2NpYWwgTWVkaWEgQWRkaWN0aW9uKiBuw6B5IGfhu5NtIDcwNSBxdWFuIHPDoXQgdMawxqFuZyDhu6luZyB24bubaSB04burbmcgaOG7jWMgc2luaCwgc2luaCB2acOqbiBiYW8gZ+G7k20gKip0aMO0bmcgdGluIGPDoSBuaMOibioqLCAqKnThuqduIHN14bqldCBz4butIGThu6VuZyBt4bqhbmcgeMOjIGjhu5lpKiosICoqY2hpIHRp4bq/dCBjw6FjIG7hu4FuIHThuqNuZyBt4bqhbmcgeMOjIGjhu5lpKiosICoqY8OhYyB0aMO0bmcgdGluIGxpw6puIHF1YW4gxJHhur9uIHPhu6ljIGtob+G6uyoqLCAqKnTDrG5oIHRy4bqhbmcgaMO0biBuaMOibioqLCAqKm3hu6ljIMSR4buZIG5naGnhu4duIG3huqFuZyB4w6MgaOG7mWkqKi4KCi0gQuG7mSBk4buvIGxp4buHdSAqKlNvY2lhbCBNZWRpYSBBZGRpY3Rpb24gdnMgUmVsYXRpb25zaGlwcyoqIGN1bmcgY+G6pXAgdGjDtG5nIHRpbiB04burIDcwNSBzaW5oIHZpw6puIHbhu4EgaMOgbmggdmkgc+G7rSBk4bulbmcgbeG6oW5nIHjDoyBo4buZaSwgxJHhurdjIMSRaeG7g20gbmjDom4ga2jhuql1IGjhu41jLCBz4bupYyBraOG7j2UgdMOibSB0aOG6p24gdsOgIHTDrG5oIHRy4bqhbmcgY8OhYyBt4buRaSBxdWFuIGjhu4cgY8OhIG5ow6JuLiBC4buZIGThu68gbGnhu4d1IG7DoHkgY8OzIHRo4buDIMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIHBow6JuIHTDrWNoIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIG3hu6ljIMSR4buZIG5naGnhu4duIG3huqFuZyB4w6MgaOG7mWkgdsOgIGPDoWMgeeG6v3UgdOG7kSBuaMawIGNo4bqldCBsxrDhu6NuZyBt4buRaSBxdWFuIGjhu4csIGdp4bqlYyBuZ+G7pywga+G6v3QgcXXhuqMgaOG7jWMgdOG6rXAgdsOgIHPhu6ljIGto4buPZSB0w6JtIGzDvS4gTmdvw6BpIHJhLCBuw7MgY8OybiBjaG8gcGjDqXAgc28gc8OhbmggaMOgbmggdmkgc+G7rSBk4bulbmcgbeG6oW5nIHjDoyBo4buZaSBnaeG7r2EgY8OhYyBuaMOzbSB0aGVvIGdp4bubaSB0w61uaCwgxJHhu5kgdHXhu5VpLCBxdeG7kWMgZ2lhIGhv4bq3YyB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4uIFbhu5tpIGThu68gbGnhu4d1IMSR4buLbmggbMaw4bujbmcgdsOgIMSR4buLbmggdMOtbmggcGhvbmcgcGjDuiwgYuG7mSBk4buvIGxp4buHdSBuw6B5IHLhuqV0IHBow7kgaOG7o3AgY2hvIGPDoWMgbmdoacOqbiBj4bupdSB0cm9uZyBsxKluaCB24buxYyB0w6JtIGzDvSBo4buNYywgeMOjIGjhu5lpIGjhu41jLCBnacOhbyBk4bulYyBob+G6t2MgeSB04bq/IGPDtG5nIGPhu5luZywgxJHhu5NuZyB0aOG7nWkgY8OzIHRo4buDIGjhu5cgdHLhu6MgdHJvbmcgdmnhu4djIHjDonkgZOG7sW5nIGPDoWMgbcO0IGjDrG5oIGThu7EgxJFvw6FuIG5ndXkgY8ahIG5naGnhu4duIG3huqFuZyB4w6MgaOG7mWkgdsOgIMSR4buBIHh14bqldCBjw6FjIGJp4buHbiBwaMOhcCBjYW4gdGhp4buHcCBuaOG6sW0gY+G6o2kgdGhp4buHbiBjaOG6pXQgbMaw4bujbmcgY3Xhu5ljIHPhu5FuZyB2w6AgbeG7kWkgcXVhbiBo4buHIGPDoSBuaMOibiBj4bunYSBnaeG7m2kgdHLhursuCgojIyMjICoqMS4yLjIgRGFuaCBzw6FjaCBjw6FjIGJp4bq/biB2w6AgbcO0IHThuqMqKgoKKipD4bqldSB0csO6YyBi4buZIGThu68gbGnhu4d1IFN1cGVybWFya2V0IFRyYW5zYWN0aW9ucyoqCgotIE5oxrBuZyB24bubaSB5w6p1IGPhuqd1IGNo4buJIHPhu60gZOG7pW5nIGPDoWMgYmnhur9uIMSR4buLbmggdMOtbmggxJHhu4MgcGjDom4gdMOtbmggbsOqbiBjaMO6bmcgdGEgY2jhu4kgcXVhbiB0w6JtIMSR4bq/biBjw6FjIGJp4bq/biBuaMawIHNhdSA6CgogIC0gU3R1ZGVudF9JRCAoaW50KToJRMO5IGzDoCBz4buRIG5oxrBuZyBkw7luZyDEkeG7gyDEkeG7i25oIGRhbmgg4oCTIGJp4bq/biDEkeG7i25oIGRhbmggKGlkZW50aWZpZXIpCiAgLSBHZW5kZXIgKGNocik6CUdp4bubaSB0w61uaCDigJMgxJHhu4tuaCB0w61uaCBkYW5oIG3hu6VjIChjYXRlZ29yaWNhbCkKICAtIEFjYWRlbWljX0xldmVsIChjaHIpOglUcsOsbmggxJHhu5kgaOG7jWMgduG6pW4g4oCTIMSR4buLbmggdMOtbmggZGFuaCBt4bulYwogIC0gQ291bnRyeQkoY2hyKToJUXXhu5FjIGdpYSDigJMgxJHhu4tuaCB0w61uaCBkYW5oIG3hu6VjCiAgLSBNb3N0X1VzZWRfUGxhdGZvcm0gKGNocik6CU3huqFuZyB4w6MgaOG7mWkgY2jDrW5oIOKAkyDEkeG7i25oIHTDrW5oIGRhbmggbeG7pWMKICAtIEFmZmVjdHNfQWNhZGVtaWNfUGVyZm9ybWFuY2UgKGNocik6CUPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24gaOG7jWMgdOG6rXAgaGF5IGtow7RuZyDigJMgxJHhu4tuaCB0w61uaCBuaOG7iyBwaMOibiAoWWVzL05vKQogIC0gUmVsYXRpb25zaGlwX1N0YXR1cyAoY2hyKToJVMOsbmggdHLhuqFuZyBxdWFuIGjhu4cg4oCTIMSR4buLbmggdMOtbmggZGFuaCBt4bulYwogIAojIyMjICoqMS4yLjMgS2nhu4NtIHRyYSBk4buvIGxp4buHdSoqCgojIyMjIyAqKjEuMi4zLjEgS2nhu4NtIHRyYSBz4buRIGzGsOG7o25nIE5BIHRyb25nIGPhu5l0IMSR4buLbmggdMOtbmgqKgoKR2nhuqNpIHRow61jaDoKCnNhcHBseShkYXQsIC4uLik6IMOhcCBk4bulbmcgaMOgbSBjaG8gdOG7q25nIGPhu5l0IHRyb25nIGThu68gbGnhu4d1ICoqZGF0KiouCgpzdW0oaXMubmEoeCkpOiDEkeG6v20gc+G7kSBsxrDhu6NuZyBOQSB0cm9uZyB04burbmcgY+G7mXQuCgpgYGB7cn0KIyBLaeG7g20gdHJhIHPhu5EgbMaw4bujbmcgTkEgdHJvbmcgbeG7l2kgY+G7mXQgxJHhu4tuaCB0w61uaApuYV9jb3VudHMgPC0gc2FwcGx5KGRhdCwgZnVuY3Rpb24oeCkgc3VtKGlzLm5hKHgpKSkKbmFfY291bnRzCmBgYAoKKipOaOG6rW4geMOpdCoqIAotIEvhur90IHF14bqjIHRodSDEkcaw4bujYyBjaG8gdGjhuqV5IHLhurFuZyB04bqldCBj4bqjIGPDoWMgY+G7mXQgxJHhu4tuaCB0w61uaCDEkeG7gXUga2jDtG5nIGPDsyBnacOhIHRy4buLIHRoaeG6v3UgKE5BKSB2w6wgc+G7kSBsxrDhu6NuZyBOQSB0cm9uZyBjw6FjIGPhu5l0IMSR4buBdSBoaeG7g24gdGjhu4sgbMOgIDAKCiMjIyMjICoqMS4yLjMuMiBDaHV54buDbiDEkeG7lWkgY8OhYyBiaeG6v24gxJHhu4tuaCB0w61uaCBzYW5nIGtp4buDdSBmYWN0b3IqKgpgYGB7cn0KIyBDaHV54buDbiBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oIHNhbmcgZmFjdG9yCmRhdCRHZW5kZXIgPC0gYXMuZmFjdG9yKGRhdCRHZW5kZXIpCmRhdCRBY2FkZW1pY19MZXZlbCA8LSBhcy5mYWN0b3IoZGF0JEFjYWRlbWljX0xldmVsKQpkYXQkQ291bnRyeSA8LSBhcy5mYWN0b3IoZGF0JENvdW50cnkpCmRhdCRNb3N0X1VzZWRfUGxhdGZvcm0gPC0gYXMuZmFjdG9yKGRhdCRNb3N0X1VzZWRfUGxhdGZvcm0pCmRhdCRBZmZlY3RzX0FjYWRlbWljX1BlcmZvcm1hbmNlIDwtIGFzLmZhY3RvcihkYXQkQWZmZWN0c19BY2FkZW1pY19QZXJmb3JtYW5jZSkKZGF0JFJlbGF0aW9uc2hpcF9TdGF0dXMgPC0gYXMuZmFjdG9yKGRhdCRSZWxhdGlvbnNoaXBfU3RhdHVzKQpgYGAKCioqS2nhu4NtIHRyYSBs4bqhaSBzYXUga2hpIGNodXnhu4NuIMSR4buVaSoqCgpHaeG6o2kgdGjDrWNoOgoKLSBzYXBwbHkoZGF0LCBjbGFzcyk6IMOBcCBk4bulbmcgaMOgbSBjbGFzcygpIGNobyB04burbmcgY+G7mXQgxJHhu4Mga2nhu4NtIHRyYSBraeG7g3UgZOG7ryBsaeG7h3UuIEvhur90IHF14bqjIHRy4bqjIHbhu4EgbMOgIG3hu5l0IHZlY3RvciBoaeG7g24gdGjhu4sgdMOqbiBj4buZdCB2w6AgbG/huqFpIGThu68gbGnhu4d1IHTGsMahbmcg4bupbmcuCgotIE7hur91IGvhur90IHF14bqjIGzDoCAiZmFjdG9yIiBjaG8gdOG6pXQgY+G6oyBjw6FjIGPhu5l0IOKGkiBjaHV54buDbiDEkeG7lWkgdGjDoG5oIGPDtG5nLgoKYGBge3J9CnNhcHBseShkYXQsIGNsYXNzKQpgYGAKCioqTmjhuq1uIHjDqXQqKiA6IEvhur90IHF14bqjIHRodSDEkcaw4bujYyB0b8OgbiBi4buZIGPDoWMgYmnhur9uIMSRw6MgxJHGsOG7o2MgY2h1eeG7g24gxJHhu5VpIHRow6BuaCBk4bqhbmcgZmFjdG9yLgoKIyMgKipQSOG6pk4gMjogUEjDgk4gVMONQ0ggTcOUIFThuqIgQknhur5OIMSQ4buKTkggVMONTkgqKgoKYGBge3J9Cmluc3RhbGwucGFja2FnZXMoImdncGxvdDIiLCByZXBvcyA9ICJodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZyIpCmxpYnJhcnkoZ2dwbG90MikKYGBgCgoKIyMjICoqMi4xLiBBZ2UgLSDEkOG7mSB0deG7lWkqKgoKIyMjIyAqKjIuMS4xIFRo4buRbmcga8OqIHThuqduIHPhu5EsIHThuqduIHN14bqldCB2w6AgdHLhu7FjIHF1YW4gaMOzYSoqCgojIyMjIyAqKjIuMS4xLjEgVOG6p24gc+G7kSwgdOG6p24gc3XhuqV0KioKYGBge3J9CnRhYl9hZ2UgPC0gdGFibGUoZGF0JEFnZSkKdGFiX2FnZQp0YWJsZShkYXQkQWdlKS9zdW0obnJvdyhkYXQpKQpgYGAKCiMjIyMjICoqMi4xLjEuMiBUcuG7sWMgcXVhbiBob8OhKioKYGBge3J9CmdncGxvdChkYXQsIGFlcyh4ID0gQWdlKSkgKwogIGdlb21fYmFyKGZpbGwgPSAic3RlZWxibHVlIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgbGFicyh0aXRsZSA9ICJU4bqnbiBzdeG6pXQgdGhlbyDEkeG7mSB0deG7lWkiLCB4ID0gIsSQ4buZIHR14buVaSIsIHkgPSAiU+G7kSBsxrDhu6NuZyIpCmBgYAoKIyMjIyAqKjIuMS4yIE5o4bqtbiB4w6l0KioKCi0gxJDhu5kgdHXhu5VpIGPhu6dhIG5nxrDhu51pIHRoYW0gZ2lhIGto4bqjbyBzw6F0IGNo4bunIHnhur91IHThuq1wIHRydW5nIHbDoG8ga2hv4bqjbmcgdOG7qyAxOSDEkeG6v24gMjIgdHXhu5VpLCBjaGnhur9tIGtob+G6o25nIDg5LjUlIHThu5VuZyBz4buRIG3huqt1LiBD4bulIHRo4buDOgogIC0gVHXhu5VpIDIwIGzDoCBuaMOzbSBjaGnhur9tIHThu7cgbOG7hyBjYW8gbmjhuqV0ICgyMy40JSksIHRoZW8gc8OhdCBsw6AgdHXhu5VpIDE5ICgyMy4xJSkgdsOgIHR14buVaSAyMSAoMjIuMSUpLgogIC0gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgcGjhuqduIGzhu5tuIG5nxrDhu51pIHRoYW0gZ2lhIMSRYW5nIHRyb25nIMSR4buZIHR14buVaSBzaW5oIHZpw6puIMSR4bqhaSBo4buNYy4KLSBDw6FjIG5ow7NtIHR14buVaSAyMyB2w6AgMjQgY8OzIHThu7cgbOG7hyB0aOG6pXAgaMahbiDEkcOhbmcga+G7gyAoY2jhu4kga2hv4bqjbmcgOC41JSB04buVbmcgc+G7kSBt4bqrdSksIGPDsyB0aOG7gyBsw6AgbmjDs20gc2luaCB2acOqbiBuxINtIGN14buRaSwgaOG7jWMgY2FvIGjhu41jIGhv4bq3YyDEkcOjIHThu5F0IG5naGnhu4dwLgotIFR14buVaSAxOCBjaGnhur9tIG3hu5l0IHBo4bqnbiBy4bqldCBuaOG7jyAoMS45OSUpLCBjaG8gdGjhuqV5IG5nxrDhu51pIHRoYW0gZ2lhIGto4bqjbyBzw6F0IGPDsyDEkeG7mSB0deG7lWkgYuG6r3QgxJHhuqd1IHThu6sgZ2lhaSDEkW/huqFuIG3hu5tpIHbDoG8gxJHhuqFpIGjhu41jIGhv4bq3YyBjdeG7kWkgdHJ1bmcgaOG7jWMgcGjhu5UgdGjDtG5nLgoKLSBQaMOibiBi4buRIMSR4buZIHR14buVaSBraMOhIHThuq1wIHRydW5nIHbDoCBs4buHY2ggdHLDoWkgbmjhurksIGNobyB0aOG6pXkgxJHhu5FpIHTGsOG7o25nIGto4bqjbyBzw6F0IHTGsMahbmcgxJHhu5FpIMSR4buTbmcgbmjhuqV0IHbhu4EgbeG6t3QgxJHhu5kgdHXhu5VpIOKAkyBjaOG7pyB54bq/dSBsw6AgdGhhbmggbmnDqm4sIHNpbmggdmnDqm4uCi0gxJBp4buBdSBuw6B5IHBow7kgaOG7o3AgduG7m2kgbeG7pWMgdGnDqnUgbmdoacOqbiBj4bupdSBsacOqbiBxdWFuIMSR4bq/biBuZ2hp4buHbiBt4bqhbmcgeMOjIGjhu5lpIHbDoCBjw6FjIG3hu5FpIHF1YW4gaOG7hywgdsOsIMSRw6J5IGzDoCBuaMOzbSB0deG7lWkgc+G7rSBk4bulbmcgbeG6oW5nIHjDoyBo4buZaSB0aMaw4budbmcgeHV5w6puIHbDoCBk4buFIGLhu4sg4bqjbmggaMaw4bufbmcgbmjhuqV0LgoKIyMjIyAqKjIuMS4zIEvhur90IGx14bqtbioqCgpCaeG6v24gKipBZ2UqKiB0cm9uZyBi4buZIGThu68gbGnhu4d1IHRo4buDIGhp4buHbiByw7UgcuG6sW5nIMSR4buRaSB0xrDhu6NuZyBuZ2hpw6puIGPhu6l1IGNo4bunIHnhur91IGzDoCBzaW5oIHZpw6puIHRyb25nIMSR4buZIHR14buVaSB04burIDE5IMSR4bq/biAyMiwgduG7m2kgxJHhu5kgdHXhu5VpIDIwIGzDoCBwaOG7lSBiaeG6v24gbmjhuqV0LiDEkMOieSBsw6AgbmjDs20gdHXhu5VpIHF1YW4gdHLhu41uZyDEkeG7gyBuZ2hpw6puIGPhu6l1IGPDoWMgduG6pW4gxJHhu4EgbGnDqm4gcXVhbiDEkeG6v24gaMOgbmggdmkgc+G7rSBk4bulbmcgbeG6oW5nIHjDoyBo4buZaSwgc+G7qWMga2jhu49lIHTDom0gdGjhuqduIHbDoCBjaOG6pXQgbMaw4bujbmcgY8OhYyBt4buRaSBxdWFuIGjhu4csIGRvIGjhu40gxJFhbmcgdHJvbmcgZ2lhaSDEkW/huqFuIHBow6F0IHRyaeG7g24gbeG6oW5oIHbhu4EgbeG6t3QgeMOjIGjhu5lpIHbDoCB0w6JtIGzDvS4KCiMjIyAqKjIuMiBHZW5kZXIgLSBHaeG7m2kgdMOtbmgqKgoKIyMjIyAqKjIuMi4xIFRo4buRbmcga8OqIHThuqduIHPhu5EsIHThuqduIHN14bqldCB2w6AgdHLhu7FjIHF1YW4gaMOzYSoqCgpgYGB7cn0KaW5zdGFsbC5wYWNrYWdlcygiZHBseXIiLCByZXBvcyA9ICJodHRwczovL2Nsb3VkLnItcHJvamVjdC5vcmciKQpsaWJyYXJ5KGRwbHlyKQpgYGAKCgojIyMjIyAqKjIuMi4xLjEgVOG6p24gc+G7kSwgdOG6p24gc3XhuqV0KioKYGBge3J9CnRhYl9nZW5kZXIgPC0gdGFibGUoZGF0JEdlbmRlcikKdGFiX2dlbmRlcgp0YWJsZShkYXQkR2VuZGVyKS9zdW0obnJvdyhkYXQpKQpgYGAKCiMjIyMjICoqMi4yLjEuMiBUcuG7sWMgcXVhbiBob8OhKioKYGBge3J9CiMgVOG6oW8gZGF0YWZyYW1lIHThu6sgYuG6o25nIHThuqduIHPhu5EKZ2VuZGVyX2ZyZXEgPC0gYXMuZGF0YS5mcmFtZSh0YWJfZ2VuZGVyKQpjb2xuYW1lcyhnZW5kZXJfZnJlcSkgPC0gYygiR2VuZGVyIiwgIkZyZXF1ZW5jeSIpCgojIFTDrW5oIHBo4bqnbiB0csSDbQpnZW5kZXJfZnJlcSRQZXJjZW50YWdlIDwtIGdlbmRlcl9mcmVxJEZyZXF1ZW5jeSAvIHN1bShnZW5kZXJfZnJlcSRGcmVxdWVuY3kpICogMTAwCgojIFThuqFvIG5ow6NuIGNo4buJIGfhu5NtIHBo4bqnbiB0csSDbQpnZW5kZXJfZnJlcSRMYWJlbCA8LSBwYXN0ZTAocm91bmQoZ2VuZGVyX2ZyZXEkUGVyY2VudGFnZSwgMSksICIlIikKCiMgVuG6vSBiaeG7g3UgxJHhu5MgdHLDsm4gduG7m2kgbmjDo24gY2jhu4kgcGjhuqduIHRyxINtCmdncGxvdChnZW5kZXJfZnJlcSwgYWVzKHggPSAiIiwgeSA9IFBlcmNlbnRhZ2UsIGZpbGwgPSBHZW5kZXIpKSArCiAgZ2VvbV9jb2wod2lkdGggPSAxLCBjb2xvciA9ICJ3aGl0ZSIpICsKICBjb29yZF9wb2xhcih0aGV0YSA9ICJ5IikgKwogIHRoZW1lX3ZvaWQoKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IExhYmVsKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIHNpemUgPSA1KSArCiAgbGFicyh0aXRsZSA9ICJQaMOibiBi4buRIGdp4bubaSB0w61uaCBuZ8aw4budaSB0aGFtIGdpYSBraOG6o28gc8OhdCIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlBhc3RlbDEiKQoKYGBgCgoqKkdp4bqjaSB0aMOtY2ggY29kZSoqCgotIHRhYl9nZW5kZXIgbMOgIGLhuqNuZyB04bqnbiBz4buRIGtp4buDdSB0YWJsZSDEkeG6v20gc+G7kSBsxrDhu6NuZyB04burbmcgbmjDs20gdHJvbmcgYmnhur9uIEdlbmRlci4KLSBhcy5kYXRhLmZyYW1lKHRhYl9nZW5kZXIpIGNodXnhu4NuIGLhuqNuZyB04bqnbiBz4buRIHRow6BuaCBk4bqhbmcgZGF0YSBmcmFtZSDEkeG7gyBk4buFIHjhu60gbMO9LgotIMSQ4buVaSB0w6puIGPhu5l0IHRow6BuaCAiR2VuZGVyIiAobmjDs20gZ2nhu5tpIHTDrW5oKSB2w6AgIkZyZXF1ZW5jeSIgKHPhu5EgbMaw4bujbmcpLgotIMSQ4buVaSB0w6puIGPhu5l0IHRow6BuaCAiR2VuZGVyIiAobmjDs20gZ2nhu5tpIHTDrW5oKSB2w6AgIkZyZXF1ZW5jeSIgKHPhu5EgbMaw4bujbmcpLgoKLSB0YWJfZ2VuZGVyIGzDoCBi4bqjbmcgdOG6p24gc+G7kSBraeG7g3UgdGFibGUgxJHhur9tIHPhu5EgbMaw4bujbmcgdOG7q25nIG5ow7NtIHRyb25nIGJp4bq/biBHZW5kZXIuCi0gYXMuZGF0YS5mcmFtZSh0YWJfZ2VuZGVyKSBjaHV54buDbiBi4bqjbmcgdOG6p24gc+G7kSB0aMOgbmggZOG6oW5nIGRhdGEgZnJhbWUgxJHhu4MgZOG7hSB44butIGzDvS4KCi0gVOG6oW8gY+G7mXQgTGFiZWwgxJHhu4MgZMO5bmcgbMOgbSBuaMOjbiB0csOqbiBiaeG7g3UgxJHhu5MuCi0gRMO5bmcgcm91bmQoKSBsw6BtIHRyw7JuIHPhu5EgcGjhuqduIHRyxINtIMSR4bq/biAxIGNo4buvIHPhu5EgdGjhuq1wIHBow6JuLgotIEvhur90IGjhu6NwIHBo4bqnbiB0csSDbSB24bubaSBrw70gaGnhu4d1ICUgdGjDoG5oIGNodeG7l2kga8O9IHThu7EuCgotIGdncGxvdChnZW5kZXJfZnJlcSwgYWVzKHggPSAiIiwgeSA9IFBlcmNlbnRhZ2UsIGZpbGwgPSBHZW5kZXIpKToKICAtIEto4bufaSB04bqhbyBiaeG7g3UgxJHhu5MgduG7m2kgZOG7ryBsaeG7h3UgZ2VuZGVyX2ZyZXEuCiAgLSB4ID0gIiI6IHThuqFvIDEgbmjDs20gZHV5IG5o4bqldCAodOG6oW8gY+G7mXQgdHLhu5FuZyksIHbDrCBiaeG7g3UgxJHhu5MgdHLDsm4ga2jDtG5nIHBow6JuIHRoZW8gdHLhu6VjIFguCiAgLSB5ID0gUGVyY2VudGFnZTogY2hp4buBdSBjYW8gY+G7mXQgKHRyxrDhu5tjIGtoaSBjaHV54buDbiB0aMOgbmggdHLDsm4pIGzDoCBwaOG6p24gdHLEg20uCiAgLSBmaWxsID0gR2VuZGVyOiB0w7QgbcOgdSB0aGVvIG5ow7NtIGdp4bubaSB0w61uaC4KLSBnZW9tX2NvbCh3aWR0aCA9IDEsIGNvbG9yID0gIndoaXRlIik6CiAgLSBW4bq9IGPhu5l0IChiYXIgY2hhcnQpIHbhu5tpIGNoaeG7gXUgcuG7mW5nIGLhurFuZyAxICjEkeG6p3kgxJHhu6cpLgogIC0gY29sb3IgPSAid2hpdGUiIHZp4buBbiB0cuG6r25nIGdp4buvYSBjw6FjIG3DumkgZ2nDunAgYmnhu4N1IMSR4buTIGThu4UgbmjDrG4gaMahbi4KLSBjb29yZF9wb2xhcih0aGV0YSA9ICJ5Iik6CiAgLSBCaeG6v24gYmnhu4N1IMSR4buTIGPhu5l0IHRow6BuaCBiaeG7g3UgxJHhu5MgdHLDsm4gKHBvbGFyIGNvb3JkaW5hdGVzKS4KICAtIHRoZXRhID0gInkiIGNodXnhu4NuIHRy4bulYyB5IHRow6BuaCBnw7NjIHRyb25nIGJp4buDdSDEkeG7kyB0csOybi4KLSB0aGVtZV92b2lkKCk6CiAgLSBMb+G6oWkgYuG7jyB0b8OgbiBi4buZIGPDoWMgdHLhu6VjLCBsxrDhu5tpLCBuaMOjbiB0cuG7pWMsLi4uIMSR4buDIGJp4buDdSDEkeG7kyBn4buNbiDEkeG6uXAsIHBow7kgaOG7o3AgduG7m2kgYmnhu4N1IMSR4buTIHRyw7JuLgotIGdlb21fdGV4dChhZXMobGFiZWwgPSBMYWJlbCksIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLCBzaXplID0gNSk6CiAgLSBUaMOqbSBjaOG7ryBuaMOjbiB0csOqbiB04burbmcgbcO6aS4KICAtIHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KTogxJHhurd0IGNo4buvIOG7nyBnaeG7r2EgY2hp4buBdSBk4buNYyBj4bunYSB04burbmcgbcO6aS4KICAtIHNpemUgPSA1OiBrw61jaCB0aMaw4bubYyBjaOG7ry4KLSBsYWJzKHRpdGxlID0gIlBow6JuIGLhu5EgZ2nhu5tpIHTDrW5oIG5nxrDhu51pIHRoYW0gZ2lhIGto4bqjbyBzw6F0Iik6CiAgLSBUaMOqbSB0acOqdSDEkeG7gSBjaG8gYmnhu4N1IMSR4buTLgotIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiUGFzdGVsMSIpOgogIC0gQ2jhu41uIGLhuqNuZyBtw6B1IG5o4bq5IG5ow6BuZyAoUGFzdGVsMSkgY2hvIGPDoWMgbcO6aSBiaeG7g3UgxJHhu5MsIGdpw7pwIG3DoHUgc+G6r2MgaMOgaSBow7JhLgogIAojIyMjICoqMi4yLjIgTmjhuq1uIHjDqXQqKgoKLSBU4buVbmcgc+G7kSBxdWFuIHPDoXQgdHJvbmcgYuG7mSBk4buvIGxp4buHdSBsw6AgNzA1LCB0cm9uZyDEkcOzIGPDsyAzNTMgY8OhIG5ow6JuIHRodeG7mWMgbmjDs20gRmVtYWxlIHbDoCAzNTIgY8OhIG5ow6JuIHRodeG7mWMgbmjDs20gTWFsZS4KLSBU4bqnbiBz4buRIHPhu60gZOG7pW5nIG3huqFuZyB4w6MgaOG7mWkgY+G7p2EgaGFpIG5ow7NtIGfhuqduIG5oxrAgYuG6sW5nIG5oYXUsIHbhu5tpIG7hu68gY2hp4bq/bSBraG/huqNuZyA1MC4wNyUgdsOgIG5hbSBjaGnhur9tIGtob+G6o25nIDQ5LjkzJS4KLSBT4buxIHBow6JuIGLhu5EgZ2nhu5tpIHTDrW5oIHRyb25nIG3huqt1IG5naGnDqm4gY+G7qXUgbMOgIGtow6EgY8OibiBi4bqxbmcsIGtow7RuZyBjw7MgbmjDs20gbsOgbyBjaGnhur9tIMawdSB0aOG6vyB2xrDhu6N0IHRy4buZaS4KLSDEkGnhu4F1IG7DoHkgcuG6pXQgcXVhbiB0cuG7jW5nIHbDoCB0w61jaCBj4buxYyB2w6w6CiAgLSBHacO6cCBnaeG6o20gc2FpIGzhu4djaCBnaeG7m2kgdMOtbmggKGdlbmRlciBiaWFzKSB0cm9uZyBxdcOhIHRyw6xuaCBwaMOibiB0w61jaCBk4buvIGxp4buHdS4KLSBDaG8gcGjDqXAgc28gc8Ohbmgga2jDoWNoIHF1YW4gZ2nhu69hIG5hbSB2w6AgbuG7ryB24buBOgogIC0gTeG7qWMgxJHhu5kgbmdoaeG7h24gbeG6oW5nIHjDoyBo4buZaSwKICAtIFRo4budaSBnaWFuIHPhu60gZOG7pW5nIHRydW5nIGLDrG5oIG3hu5dpIG5nw6B5LAogIC0g4bqibmggaMaw4bufbmcgxJHhur9uIGjhu41jIHThuq1wLCBnaeG6pWMgbmfhu6csIHTDom0gbMO9LCB2w6AgxJHhurdjIGJp4buHdCBsw6AgY8OhYyB4dW5nIMSR4buZdCB0cm9uZyBt4buRaSBxdWFuIGjhu4cuCgojIyMjICoqMi4yLjMgxJDDoW5oIGdpw6EqKgoKLSBU4bu3IGzhu4cgZ2nhu5tpIHTDrW5oIGPDom4gYuG6sW5nIHRyb25nIGLhu5kgZOG7ryBsaeG7h3UgZ2nDunAgdMSDbmcgdMOtbmggxJHhuqFpIGRp4buHbiB2w6AgxJHhu5kgdGluIGPhuq15IGNobyBjw6FjIHBow6JuIHTDrWNoIHRp4bq/cCB0aGVvIHbhu4EgbeG7kWkgcXVhbiBo4buHIGdp4buvYSBnaeG7m2kgdMOtbmggdsOgIGjDoG5oIHZpIG5naGnhu4duIG3huqFuZyB4w6MgaOG7mWksIGPFqW5nIG5oxrAgdMOhYyDEkeG7mW5nIGPhu6dhIG7DsyDEkeG6v24gY8OhYyBt4buRaSBxdWFuIGjhu4cgY8OhIG5ow6JuLiDEkMOieSBsw6AgbeG7mXQgbuG7gW4gdOG6o25nIHThu5F0IMSR4buDIGtow6FtIHBow6Egc8OidSBoxqFuIGPDoWMgbeG6q3UgaMOgbmggdmkga2jDoWMgYmnhu4d0IGdp4buvYSBuYW0gdsOgIG7hu68gdHJvbmcgYuG7kWkgY+G6o25oIHjDoyBo4buZaSBoaeG7h24gxJHhuqFpLgoKIyMjICoqMi4zIEFjYWRlbWljIExldmVsIC0gVHLDrG5oIMSR4buZIGjhu41jIHbhuqVuKioKCiMjIyMgKioyLjMuMSBUaOG7kW5nIGvDqiBtw7QgdOG6oyB04bqnbiBz4buRLCB04bqnbiBzdeG6pXQsIHRy4buxYyBxdWFuIGhvw6EqKgoKIyMjIyMgKioyLjMuMS4xIELhuqNuZyB04bqnbiBz4buRLCB04bqnbiBzdeG6pXQqKgoKYGBge3J9CnRhYl9hY2FkZW1pYyA8LSB0YWJsZShkYXQkQWNhZGVtaWNfTGV2ZWwpCnRhYl9hY2FkZW1pYwp0YWJsZShkYXQkQWNhZGVtaWNfTGV2ZWwpL3N1bShucm93KGRhdCkpCmBgYAoKIyMjIyAqKjIuMy4xLjIgVHLhu7FjIHF1YW4gaG/DoSoqCgpgYGB7cn0KIyBU4bqhbyBi4bqjbmcgdOG6p24gc+G7kQp0YWJfYWNhZGVtaWMgPC0gdGFibGUoZGF0JEFjYWRlbWljX0xldmVsKQoKIyBDaHV54buDbiBzYW5nIGRhdGEgZnJhbWUKYWNhZGVtaWNfZnJlcSA8LSBhcy5kYXRhLmZyYW1lKHRhYl9hY2FkZW1pYykKY29sbmFtZXMoYWNhZGVtaWNfZnJlcSkgPC0gYygiQWNhZGVtaWNfTGV2ZWwiLCAiRnJlcXVlbmN5IikKCiMgVMOtbmggcGjhuqduIHRyxINtCmFjYWRlbWljX2ZyZXEkUGVyY2VudGFnZSA8LSBhY2FkZW1pY19mcmVxJEZyZXF1ZW5jeSAvIHN1bShhY2FkZW1pY19mcmVxJEZyZXF1ZW5jeSkgKiAxMDAKCiMgVOG6oW8gbmjDo24gY2jhu4kgZ+G7k20gcGjhuqduIHRyxINtCmFjYWRlbWljX2ZyZXEkTGFiZWwgPC0gcGFzdGUwKHJvdW5kKGFjYWRlbWljX2ZyZXEkUGVyY2VudGFnZSwgMSksICIlIikKCmdncGxvdChhY2FkZW1pY19mcmVxLCBhZXMoeCA9ICIiLCB5ID0gUGVyY2VudGFnZSwgZmlsbCA9IEFjYWRlbWljX0xldmVsKSkgKwogIGdlb21fY29sKHdpZHRoID0gMSwgY29sb3IgPSAid2hpdGUiKSArCiAgY29vcmRfcG9sYXIodGhldGEgPSAieSIpICsKICB0aGVtZV92b2lkKCkgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBMYWJlbCksIAogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwgc2l6ZSA9IDQpICsKICBsYWJzKHRpdGxlID0gIlBow6JuIGLhu5EgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIGPhu6dhIG5nxrDhu51pIHRoYW0gZ2lhIikgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiU2V0MyIpCmBgYAoKIyMjIyAqKjIuMy4yIE5o4bqtbiB4w6l0KioKCi0gUGjDom4gYuG7kSBjaOG7pyB54bq/dSDhu58gYuG6rWMgxJHhuqFpIGjhu41jIHbDoCBzYXUgxJHhuqFpIGjhu41jOgogIC0gSMahbiA5NiUgbmfGsOG7nWkgdGhhbSBnaWEgdGh14buZYyBoYWkgbmjDs206IFVuZGVyZ3JhZHVhdGUgKDUwLjA3JSkgdsOgIEdyYWR1YXRlICg0Ni4xMCUpLgogIC0gQ2jhu4kgY8OzIDMuODMlIGzDoCBo4buNYyBzaW5oIHRydW5nIGjhu41jIChIaWdoIFNjaG9vbCksIGNobyB0aOG6pXkgbmjDs20gbsOgeSBjaGnhur9tIHThu7cgbOG7hyBy4bqldCBuaOG7jyB0cm9uZyBraOG6o28gc8OhdC4KLSBQaMO5IGjhu6NwIHbhu5tpIGNo4bunIMSR4buBIG5naGnDqm4gY+G7qXU6CiAgLSBWw6wgYuG7mSBk4buvIGxp4buHdSBsacOqbiBxdWFuIMSR4bq/biBuZ2hp4buHbiBt4bqhbmcgeMOjIGjhu5lpIHbDoCBt4buRaSBxdWFuIGjhu4cgY8OhIG5ow6JuLCBuaMOzbSBzaW5oIHZpw6puIHbDoCBo4buNYyB2acOqbiBzYXUgxJHhuqFpIGjhu41jIGzDoCDEkeG7kWkgdMaw4bujbmcgcGjDuSBo4bujcCDEkeG7gyBuZ2hpw6puIGPhu6l1OgogIC0gSOG7jSBz4butIGThu6VuZyBt4bqhbmcgeMOjIGjhu5lpIHRoxrDhu51uZyB4dXnDqm4uCiAgLSBDw7MgdGjhu4MgxJFhbmcgdHJvbmcgxJHhu5kgdHXhu5VpIGThu4UgYuG7iyDhuqNuaCBoxrDhu59uZyB24buBIG3hurd0IHTDom0gbMO9LCB4w6MgaOG7mWksIGjhu41jIHThuq1wIHbDoCBjw6FjIG3hu5FpIHF1YW4gaOG7hyBjw6EgbmjDom4uCi0gVMOtbmggxJHhuqFpIGRp4buHbjoKICAtIFPhu7EgcGjDom4gYuG7kSBuw6B5IGPDsyB0aOG7gyBwaOG6o24gw6FuaCDEkeG7kWkgdMaw4bujbmcgbeG7pWMgdGnDqnUgY+G7p2Ega2jhuqNvIHPDoXQgbMOgIHNpbmggdmnDqm4gdsOgIG5nxrDhu51pIHRy4bq7IHR14buVaS4KICAtIFR1eSBuaGnDqm4sIHbDrCBz4buRIGzGsOG7o25nIEhpZ2ggU2Nob29sIHLhuqV0IHRo4bqlcCwgY+G6p24gbMawdSDDvSBu4bq/dSB0aOG7sWMgaGnhu4duIHBow6JuIHTDrWNoIHNvIHPDoW5oIGdp4buvYSBjw6FjIG5ow7NtIGjhu41jIHbhuqVuIOKAlCBuaMOzbSBuw6B5IGPDsyB0aOG7gyBraMO0bmcgxJHhu6cgc+G7kSBsaeG7h3UgxJHhu4MgxJHGsGEgcmEga+G6v3QgbHXhuq1uIMSRw6FuZyB0aW4gY+G6rXkuCiAgCiMjIyMgKioyLjMuMyBL4bq/dCBsdeG6rW4qKgoKLSBQaMOibiBi4buRIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiB0cm9uZyBi4buZIGThu68gbGnhu4d1IHThuq1wIHRydW5nIGNo4bunIHnhur91IHbDoG8gc2luaCB2acOqbiDEkeG6oWkgaOG7jWMgdsOgIHNhdSDEkeG6oWkgaOG7jWMsIHBow7kgaOG7o3AgduG7m2kgbeG7pWMgdGnDqnUgbmdoacOqbiBj4bupdS4gVHV5IG5oacOqbiwgY+G6p24gY+G6qW4gdHLhu41uZyBraGkgcGjDom4gdMOtY2ggbmjDs20gaOG7jWMgc2luaCBj4bqlcCBiYSBkbyBz4buRIGzGsOG7o25nIHF1w6Egw610LCB0csOhbmggxJHGsGEgcmEga+G6v3QgbHXhuq1uIGtow6FpIHF1w6F0IHThu6sgbmjDs20gbmjhu48gbsOgeS4KCiMjIyAqKjIuNCBNb3N0IHVzZWQgcGxhdGZvcm0gLSBu4buBbiB04bqjbmcgbeG6oW5nIHjDoyBo4buZaSoqCgojIyMjICoqMi40LjEgVGjhu5FuZyBrw6ogbcO0IHThuqMgdOG6p24gc+G7kSwgdOG6p24gc3XhuqV0LCB0cuG7sWMgcXVhbiBob8OhKioKCiMjIyMjICoqMi40LjEuMSBC4bqjbmcgdOG6p24gc+G7kSwgdOG6p24gc3XhuqV0KioKCmBgYHtyfQp0YWJfcGxhdGZvcm0gPC0gdGFibGUoZGF0JE1vc3RfVXNlZF9QbGF0Zm9ybSkKdGFiX3BsYXRmb3JtCnRhYmxlKGRhdCRNb3N0X1VzZWRfUGxhdGZvcm0pL3N1bShucm93KGRhdCkpCmBgYAoKIyMjIyAqKjIuNC4xLjIgVHLhu7FjIHF1YW4gaG/DoSoqCgpgYGB7cn0KIyBDaHV54buDbiBzYW5nIGRhdGEgZnJhbWUKcGxhdGZvcm1fZnJlcSA8LSBhcy5kYXRhLmZyYW1lKHRhYl9wbGF0Zm9ybSkKY29sbmFtZXMocGxhdGZvcm1fZnJlcSkgPC0gYygiUGxhdGZvcm0iLCAiRnJlcXVlbmN5IikKCiMgVuG6vSBiaeG7g3UgxJHhu5MgCmdncGxvdChwbGF0Zm9ybV9mcmVxLCBhZXMoeCA9IHJlb3JkZXIoUGxhdGZvcm0sIC1GcmVxdWVuY3kpLCB5ID0gRnJlcXVlbmN5LCBmaWxsID0gUGxhdGZvcm0pKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC43KSArCiAgbGFicyh0aXRsZSA9ICJO4buBbiB04bqjbmcgbeG6oW5nIHjDoyBo4buZaSDEkcaw4bujYyBz4butIGThu6VuZyBuaGnhu4F1IG5o4bqldCIsCiAgICAgICB4ID0gIk7hu4FuIHThuqNuZyIsCiAgICAgICB5ID0gIlPhu5EgbMaw4bujbmcgbmfGsOG7nWkgZMO5bmciKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKQpgYGAKCioqR2nhuqNpIHRow61jaCBjb2RlKioKCvCflLkgZ2dwbG90KC4uLik6IGjDoG0ga2jhu59pIHThuqFvIGJp4buDdSDEkeG7kyB04burIGfDs2kgZ2dwbG90Mi4KCvCflLkgcGxhdGZvcm1fZnJlcTogbMOgIGRhdGEgZnJhbWUgY2jhu6lhIGhhaSBj4buZdDogUGxhdGZvcm0gKHTDqm4gbuG7gW4gdOG6o25nKSB2w6AgRnJlcXVlbmN5ICh04bqnbiBz4buRIG5nxrDhu51pIGTDuW5nKS4KCvCflLkgYWVzKC4uLik6IGtoYWkgYsOhbyAidGjhuqltIG3hu7kiIOKAkyBuZ2jEqWEgbMOgIGLhuqFuIGNo4buJIMSR4buLbmggY8OhYyBiaeG6v24gbsOgbyBkw7luZyBjaG8gdHLhu6VjIHbDoCBtw6B1OgoKICAtIHggPSByZW9yZGVyKFBsYXRmb3JtLCAtRnJlcXVlbmN5KTogdHLhu6VjIFggbMOgIHTDqm4gY8OhYyBu4buBbiB04bqjbmcsIMSRxrDhu6NjIHPhuq9wIHjhur9wIGdp4bqjbSBk4bqnbiB0aGVvIHThuqduIHPhu5EgKGdpw7pwIGJp4buDdSDEkeG7kyBk4buFIMSR4buNYyBoxqFuKS4KICAtIHkgPSBGcmVxdWVuY3k6IHRy4bulYyBZIGzDoCBz4buRIGzGsOG7o25nIG5nxrDhu51pIGNo4buNbiBu4buBbiB04bqjbmcgxJHDsy4KICAtIGZpbGwgPSBQbGF0Zm9ybTogdMO0IG3DoHUgdOG7q25nIGPhu5l0IHRoZW8gbuG7gW4gdOG6o25nIHTGsMahbmcg4bupbmcuCgrwn5S5IGdlb21fYmFyKCk6IGjDoG0gduG6vSBiaeG7g3UgxJHhu5MgY+G7mXQuCgrwn5S5IHN0YXQgPSAiaWRlbnRpdHkiOiBiw6FvIHLhurFuZyBi4bqhbiDEkcOjIGN1bmcgY+G6pXAgc+G6tW4gZ2nDoSB0cuG7iyB04bqnbiBz4buRLCBraMO0bmcgY+G6p24gZ2dwbG90IHThu7EgxJHhur9tIGzhuqFpLgoK8J+UuSB3aWR0aCA9IDAuNzogxJHhu5kgcuG7mW5nIGPhu6dhIGPDoWMgY+G7mXQgKDAuNyBsw6AgduG7q2EgxJHhurlwKS4KCiMjIyMgKioyLjQuMiBOaOG6rW4geMOpdCoqCgrwn5S5IEluc3RhZ3JhbSBsw6AgbuG7gW4gdOG6o25nIHBo4buVIGJp4bq/biBuaOG6pXQ6CgrEkMaw4bujYyBz4butIGThu6VuZyBi4bufaSBoxqFuIDM1JSBuZ8aw4budaSB0aGFtIGdpYSBraOG6o28gc8OhdC4KxJBp4buBdSBuw6B5IHBow7kgaOG7o3AgduG7m2kgdGjhu7FjIHThur8ga2hpIEluc3RhZ3JhbSBsw6AgbeG6oW5nIHjDoyBo4buZaSBwaOG7lSBiaeG6v24gbmjhuqV0IHRyb25nIGdp4bubaSB0cuG6uywgxJHhurdjIGJp4buHdCBsw6Agc2luaCB2acOqbiDigJMgbmjDs20gY2hp4bq/bSB04bu3IGzhu4cgbOG7m24gdHJvbmcgYuG7mSBk4buvIGxp4buHdS4K8J+UuSBUaWtUb2sgdsOgIEZhY2Vib29rIGdp4buvIHbhu4sgdHLDrSB0aeG6v3AgdGhlbzoKClRpa1RvazogMjEuODQlIOKAkyBt4buZdCB04bu3IGzhu4cgY2FvLCBwaOG6o24gw6FuaCB4dSBoxrDhu5tuZyB0acOqdSB0aOG7pSBu4buZaSBkdW5nIG5n4bqvbiwgbmhhbmggdsOgIGdp4bqjaSB0csOtLgpGYWNlYm9vazogdHV5IGzDoCBu4buBbiB04bqjbmcgbMOidSDEkeG7nWkgaMahbiBuaMawbmcgduG6q24gxJHGsOG7o2MgMTcuNDUlIG5nxrDhu51pIGTDuW5nIGNo4buNbiBsw6AgbuG7gW4gdOG6o25nIGNow61uaC4K8J+UuSBDw6FjIG7hu4FuIHThuqNuZyBjw7JuIGzhuqFpIGPDsyB04bu3IGzhu4cgcuG6pXQgdGjhuqVwOgoKV2hhdHNBcHAsIFR3aXR0ZXIsIExpbmtlZEluLCBXZUNoYXQsIFNuYXBjaGF0LCBMSU5FLCBLYWthb1RhbGssIFZLb250YWt0ZSwuLi4gxJHhu4F1IGTGsOG7m2kgMTAlLgrEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBuaMOzbSBraOG6o28gc8OhdCB04bqtcCB0cnVuZyBz4butIGThu6VuZyBt4bqhbmcgeMOjIGjhu5lpIMSR4buDIHhlbSBu4buZaSBkdW5nLCBnaeG6o2kgdHLDrSwgaMahbiBsw6Agbmjhuq9uIHRpbiBjaHV5w6puIG5naGnhu4dwIGhheSBt4bqhbmcgbMaw4bubaSBuZ2jhu4EgbmdoaeG7h3AuCgojIyMjICoqMi40LjMgS+G6v3QgbHXhuq1uKioKCi0gQ+G6pXUgdHLDumMgaMOgbmggdmkgc+G7rSBk4bulbmcgbeG6oW5nIHjDoyBo4buZaSB0aGnDqm4gduG7gSB0aOG7iyBnacOhYyB2w6AgZ2nhuqNpIHRyw60sIHbhu5tpIEluc3RhZ3JhbSB2w6AgVGlrVG9rIGzDoCBs4buxYSBjaOG7jW4gY2jhu6cgxJHhuqFvLgotIEZhY2Vib29rIHbhuqtuIGR1eSB0csOsIMSRxrDhu6NjIG3hu6ljIMSR4buZIHPhu60gZOG7pW5nIGNhbyBuaMawbmcgY8OzIHRo4buDIMSRYW5nIG5oxrDhu51uZyBjaOG7lyBjaG8gY8OhYyBu4buBbiB04bqjbmcgdHLhursgdHJ1bmcgaMahbi4KLSBDw6FjIG7hu4FuIHThuqNuZyBjw7MgdMOtbmggY2jhuqV0IHRyw7IgY2h1eeG7h24gY8OhIG5ow6JuIGhv4bq3YyBjaHV5w6puIG3DtG4gKG5oxrAgV2hhdHNBcHAsIExpbmtlZEluKSBjw7MgdOG7tyBs4buHIHRo4bqlcCBoxqFuLCBwaOG6o24gw6FuaCBt4bulYyB0acOqdSBz4butIGThu6VuZyBt4bqhbmcgeMOjIGjhu5lpIHRyb25nIG5ow7NtIG7DoHkgY2jhu6cgeeG6v3UgbMOgIGdp4bqjaSB0csOtIHbDoCB0xrDGoW5nIHTDoWMgeMOjIGjhu5lpIGPDtG5nIGtoYWkuCgojIyMgKioyLjUgQWZmZWN0cyBhY2FkYW1pYyBwZXJmb3JtYW5jZSAtIOG6om5oIGjGsOG7n25nIMSR4bq/biBo4buNYyB04bqtcCoqCgojIyMjICoqMi41LjEgVGjhu5FuZyBrw6ogbcO0IHThuqMgdOG6p24gc+G7kSwgdOG6p24gc3XhuqV0LCB0cuG7sWMgcXVhbiBob8OhKioKCiMjIyMjICoqMi41LjEuMSBC4bqjbmcgdOG6p24gc+G7kSwgdOG6p24gc3XhuqV0KioKCmBgYHtyfQp0YWJfYWZmZWN0IDwtIHRhYmxlKGRhdCRBZmZlY3RzX0FjYWRlbWljX1BlcmZvcm1hbmNlKQp0YWJfYWZmZWN0CnRhYmxlKGRhdCRBZmZlY3RzX0FjYWRlbWljX1BlcmZvcm1hbmNlKS9zdW0obnJvdyhkYXQpKQpgYGAKCiMjIyMjICoqMi41LjEuMiBUcuG7sWMgcXVhbiBob8OhKioKCmBgYHtyfQojIENodXnhu4NuIHNhbmcgZGF0YSBmcmFtZQphZmZlY3RfZnJlcSA8LSBhcy5kYXRhLmZyYW1lKHRhYl9hZmZlY3QpCmNvbG5hbWVzKGFmZmVjdF9mcmVxKSA8LSBjKCJSZXNwb25zZSIsICJGcmVxdWVuY3kiKQoKIyBUw61uaCBwaOG6p24gdHLEg20KYWZmZWN0X2ZyZXEkUGVyY2VudGFnZSA8LSBhZmZlY3RfZnJlcSRGcmVxdWVuY3kgLyBzdW0oYWZmZWN0X2ZyZXEkRnJlcXVlbmN5KSAqIDEwMAoKIyBU4bqhbyBuaMOjbiBoaeG7g24gdGjhu4sgcGjhuqduIHRyxINtCmFmZmVjdF9mcmVxJExhYmVsIDwtIHBhc3RlMChyb3VuZChhZmZlY3RfZnJlcSRQZXJjZW50YWdlLCAxKSwgIiUiKQoKIyBCaeG7g3UgxJHhu5MgCmdncGxvdChhZmZlY3RfZnJlcSwgYWVzKHggPSAiIiwgeSA9IFBlcmNlbnRhZ2UsIGZpbGwgPSBSZXNwb25zZSkpICsKICBnZW9tX2NvbCh3aWR0aCA9IDEsIGNvbG9yID0gIndoaXRlIikgKwogIGNvb3JkX3BvbGFyKHRoZXRhID0gInkiKSArCiAgdGhlbWVfdm9pZCgpICsKICBnZW9tX3RleHQoYWVzKGxhYmVsID0gTGFiZWwpLCAKICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIHNpemUgPSA1KSArCiAgbGFicyh0aXRsZSA9ICJN4bqhbmcgeMOjIGjhu5lpIOG6o25oIGjGsOG7n25nIMSR4bq/biBr4bq/dCBxdeG6oyBo4buNYyB04bqtcCIpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjNjZjMmE1IiwgIiNmYzhkNjIiKSkgICMgQ2jhu41uIG3DoHUgdMO5eQpgYGAKCiMjIyMgKioyLjUuMiBOaOG6rW4geMOpdCoqCgotIMSQYSBz4buRIG5nxrDhu51pIHRoYW0gZ2lhIGto4bqjbyBzw6F0ICg2NC4zJSkgY2hvIGJp4bq/dCB2aeG7h2Mgc+G7rSBk4bulbmcgbeG6oW5nIHjDoyBo4buZaSDhuqNuaCBoxrDhu59uZyDEkeG6v24ga+G6v3QgcXXhuqMgaOG7jWMgdOG6rXAgY+G7p2EgaOG7jS4KLSBUcm9uZyBraGkgxJHDsywgMzUuNyUgY8OybiBs4bqhaSBjaG8gcuG6sW5nIGtow7RuZyBi4buLIOG6o25oIGjGsOG7n25nLgotIEJp4buDdSDEkeG7kyB0csOybiB2w6AgZOG7ryBsaeG7h3UgdOG6p24gc3XhuqV0IGNobyB0aOG6pXkgZ+G6p24gMi8zIG5nxrDhu51pIHRoYW0gZ2lhIGto4bqjbyBzw6F0IHRo4burYSBuaOG6rW4gbeG6oW5nIHjDoyBo4buZaSDhuqNuaCBoxrDhu59uZyB0acOqdSBj4buxYyDEkeG6v24ga+G6v3QgcXXhuqMgaOG7jWMgdOG6rXAuIMSQw6J5IGzDoCBt4buZdCB0w61uIGhp4buHdSDEkcOhbmcgY2jDuiDDvSwgcGjhuqNuIMOhbmggbeG7kWkgcXVhbiB0w6JtIHRo4buxYyB04bq/IHbDoCBsw6AgbuG7gW4gdOG6o25nIHThu5F0IGNobyBjw6FjIHBow6JuIHTDrWNoIGNodXnDqm4gc8OidSBoxqFuIGhv4bq3YyDEkeG7gSB4deG6pXQgZ2nhuqNpIHBow6FwIHPhu60gZOG7pW5nIG3huqFuZyB4w6MgaOG7mWkgaOG7o3AgbMO9IHRyb25nIG3DtGkgdHLGsOG7nW5nIGjhu41jIMSRxrDhu51uZy4KCiMjIyMgKioyLjUuMyDEkMOhbmggZ2nDoSoqCgotIFTDoWMgxJHhu5luZyB0acOqdSBj4buxYyB0xrDGoW5nIMSR4buRaSBwaOG7lSBiaeG6v246CiAgLSBL4bq/dCBxdeG6oyBjaG8gdGjhuqV5IG3hu5FpIGxpw6puIGjhu4cga2jDoSByw7UgZ2nhu69hIHZp4buHYyBz4butIGThu6VuZyBt4bqhbmcgeMOjIGjhu5lpIHbDoCDhuqNuaCBoxrDhu59uZyDEkeG6v24gaOG7jWMgdOG6rXAsIMOtdCBuaOG6pXQgbMOgIHThu6sgbmjhuq1uIHRo4bupYyBjaOG7pyBxdWFuIGPhu6dhIG5nxrDhu51pIGTDuW5nLgogIC0gxJBp4buBdSBuw6B5IGjhu5cgdHLhu6MgZ2nhuqMgdGh1eeG6v3QgbmdoacOqbiBj4bupdSBiYW4gxJHhuqd1OiBt4bqhbmcgeMOjIGjhu5lpIGPDsyB0aOG7gyBnw6J5IHNhbyBuaMOjbmcgaG/hurdjIGNoaeG6v20gdGjhu51pIGdpYW4gaOG7jWMgdOG6rXAgY+G7p2EgbmfGsOG7nWkgdHLhursuCiAgCiMjIyAqKjIuNiBSZWxhdGlvbnNoaXAgU3RhdHVzIC0gVMOsbmggdHLhuqFuZyBt4buRaSBxdWFuIGjhu4cqKgoKIyMjIyAqKjIuNi4xIFRo4buRbmcga8OqIG3DtCB04bqjIHThuqduIHPhu5EsIHThuqduIHN14bqldCwgdHLhu7FjIHF1YW4gaG/DoSoqCgojIyMjIyAqKjIuNi4xLjEgQuG6o25nIHThuqduIHPhu5EsIHThuqduIHN14bqldCoqCgpgYGB7cn0KdGFiX3JlbGF0aW9uc2hpcCA8LSB0YWJsZShkYXQkUmVsYXRpb25zaGlwX1N0YXR1cykKdGFiX3JlbGF0aW9uc2hpcCAKdGFibGUoZGF0JFJlbGF0aW9uc2hpcF9TdGF0dXMpL3N1bShucm93KGRhdCkpCmBgYAoKIyMjIyMgKioyLjYuMS4yIFRy4buxYyBxdWFuIGhvw6EqKgoKYGBge3J9CiMgQ2h1eeG7g24gdGjDoG5oIGRhdGEgZnJhbWUKcmVsYXRpb25zaGlwX2ZyZXEgPC0gYXMuZGF0YS5mcmFtZSh0YWJfcmVsYXRpb25zaGlwKQpjb2xuYW1lcyhyZWxhdGlvbnNoaXBfZnJlcSkgPC0gYygiU3RhdHVzIiwgIkZyZXF1ZW5jeSIpCgojIFTDrW5oIHBo4bqnbiB0csSDbQpyZWxhdGlvbnNoaXBfZnJlcSRQZXJjZW50YWdlIDwtIHJlbGF0aW9uc2hpcF9mcmVxJEZyZXF1ZW5jeSAvIHN1bShyZWxhdGlvbnNoaXBfZnJlcSRGcmVxdWVuY3kpICogMTAwCgojIFThuqFvIG5ow6NuIHBo4bqnbiB0csSDbQpyZWxhdGlvbnNoaXBfZnJlcSRMYWJlbCA8LSBwYXN0ZTAocm91bmQocmVsYXRpb25zaGlwX2ZyZXEkUGVyY2VudGFnZSwgMSksICIlIikKCiMgQmnhu4N1IMSR4buTCmdncGxvdChyZWxhdGlvbnNoaXBfZnJlcSwgYWVzKHggPSAiIiwgeSA9IFBlcmNlbnRhZ2UsIGZpbGwgPSBTdGF0dXMpKSArCiAgZ2VvbV9jb2wod2lkdGggPSAxLCBjb2xvciA9ICJ3aGl0ZSIpICsKICBjb29yZF9wb2xhcih0aGV0YSA9ICJ5IikgKwogIHRoZW1lX3ZvaWQoKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IExhYmVsKSwgCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLCBzaXplID0gNSkgKwogIGxhYnModGl0bGUgPSAiVMOsbmggdHLhuqFuZyBt4buRaSBxdWFuIGjhu4cgY+G7p2EgbmfGsOG7nWkgdGhhbSBnaWEga2jhuqNvIHPDoXQiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIikgIApgYGAKCiMjIyMgKioyLjYuMiBOaOG6rW4geMOpdCoqCgotIMSQYSBz4buRIG5nxrDhu51pIHRoYW0gZ2lhIGto4bqjbyBzw6F0IMSRYW5nIOG7nyB0cuG6oW5nIHRow6FpIMSR4buZYyB0aMOibiAoU2luZ2xlKSwgY2hp4bq/bSBraG/huqNuZyA1NC41JSB04buVbmcgc+G7kS4KLSBLaG/huqNuZyA0MSUgbmfGsOG7nWkgdGhhbSBnaWEgxJFhbmcgdHJvbmcgbeG7mXQgbeG7kWkgcXVhbiBo4buHIChJbiBSZWxhdGlvbnNoaXApLgotIE3hu5l0IHBo4bqnbiBuaOG7jyAoa2hv4bqjbmcgNC41JSkgbcO0IHThuqMgdMOsbmggdHLhuqFuZyBt4buRaSBxdWFuIGjhu4cgY+G7p2EgaOG7jSBsw6AgcGjhu6ljIHThuqFwIChDb21wbGljYXRlZCkuCgojIyMjICoqMi42LjMgxJDDoW5oIGdpw6EqKgoKLSBQaMOibiBi4buRIG7DoHkgcGjhuqNuIMOhbmggbmjDs20gxJHhu5FpIHTGsOG7o25nIGto4bqjbyBzw6F0IGNo4bunIHnhur91IGzDoCBuZ8aw4budaSB0cuG6uywgY8OzIHRo4buDIGzDoCBzaW5oIHZpw6puIGhv4bq3YyBuZ8aw4budaSBt4bubaSDEkWkgbMOgbSwgduG7m2kgxJFhIHPhu5EgduG6q24gY8OybiDEkeG7mWMgdGjDom4gaG/hurdjIG3hu5tpIGLhuq90IMSR4bqndSBjw6FjIG3hu5FpIHF1YW4gaOG7hy4KLSBU4bu3IGzhu4cga2jDoSBjYW8gbmfGsOG7nWkgdHJvbmcgbeG7kWkgcXVhbiBo4buHIChn4bqnbiA0MSUpIGNobyB0aOG6pXkgbeG6oW5nIHjDoyBo4buZaSBjw7MgdGjhu4MgxJHDs25nIHZhaSB0csOyIHF1YW4gdHLhu41uZyB0cm9uZyB2aeG7h2MgZHV5IHRyw6wgdsOgIHBow6F0IHRyaeG7g24gY8OhYyBt4buRaSBxdWFuIGjhu4cgY8OhIG5ow6JuIGPhu6dhIGjhu40uCi0gVOG7tyBs4buHIOKAnENvbXBsaWNhdGVk4oCdIHR1eSBuaOG7jyBuaMawbmcgY8WpbmcgbMOgIGThuqV1IGhp4buHdSBjaG8gdGjhuqV5IGPDsyBt4buZdCBz4buRIGzGsOG7o25nIG5nxrDhu51pIHRy4bqjaSBuZ2hp4buHbSBraMOzIGtoxINuLCBtw6J1IHRodeG6q24gdHJvbmcgY8OhYyBt4buRaSBxdWFuIGjhu4cg4oCTIGPDsyB0aOG7gyBsw6AgZG8g4bqjbmggaMaw4bufbmcgY+G7p2EgbeG6oW5nIHjDoyBo4buZaSwgdsOtIGThu6UgbmjGsCBoaeG7g3UgbmjhuqdtLCB4dW5nIMSR4buZdCBxdWEgbeG6oW5nLi4uCgojIyAqKlBI4bqmTiAzOiDGr+G7mkMgTMav4buiTkcgS0hP4bqiTkcgVsOAIEtJ4buCTSDEkOG7ik5IIEdJ4bqiIFRIVVnhur5UIFThu7YgTOG7hiBDSE8gMSBCSeG6vk4qKgoKIyMjICoqMy4xIEdlbmRlciAtIE1hbGUqKgoKIyMjIyAqKjMuMS4xIMav4bubYyBsxrDhu6NuZyBraG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyB04bu3IGzhu4cgbmFtKioKCmBgYHtyfQpwcm9wLnRlc3QoeCA9IHN1bShkYXQkR2VuZGVyID09ICJNYWxlIiksCiAgICAgICAgICBuID0gbnJvdyhkYXQpLAogICAgICAgICAgcCA9IDAuNSwgICAgICAgICAgICAgIyBHaeG6oyB0aHV54bq/dCBIMDogcCA9IDAuNQogICAgICAgICAgY29uZi5sZXZlbCA9IDAuOTUpCmBgYAoKIyMjIyAqKjMuMS4yIELDoGkgdG/DoW4ga2nhu4NtIMSR4buLbmgqKgoKLSBHaeG6oyB0aHV54bq/dDoKCiAgLSBI4oKAOiBwID0gMC41ICh04bu3IGzhu4cgbmFtIGLhurFuZyA1MCUpCiAgLSBI4oKBOiBwIOKJoCAwLjUgKHThu7cgbOG7hyBuYW0ga2jDoWMgNTAlKQoKLSBOaOG6rW4geMOpdCAKCiAgLSBU4bu3IGzhu4cgbmFtIGdp4bubaSB0cm9uZyBt4bqrdSBraOG6o28gc8OhdCBsw6AgNDkuOSUsIGfhuqduIGLhurFuZyA1MCUuCiAgLSBLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyB04bu3IGzhu4cgbsOgeSBsw6AgdOG7qyA0Ni4yJSDEkeG6v24gNTMuNyUsIGJhbyBn4buTbSBnacOhIHRy4buLIDAuNS4KLSBHacOhIHRy4buLIHAtdmFsdWUgPSAxID4gMC4wNSBjaG8gdGjhuqV5IGtow7RuZyBjw7MgYuG6pXQga+G7syBi4bqxbmcgY2jhu6luZyB0aOG7kW5nIGvDqiBuw6BvIMSR4buDIGNobyBy4bqxbmcgdOG7tyBs4buHIG5hbSBraMOhYyA1MCUuCgotIEvhur90IGx14bqtbi4gCgogIC0gS2jDtG5nIGPDsyDEkeG7pyBi4bqxbmcgY2jhu6luZyDEkeG7gyBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgcuG6sW5nIHThu7cgbOG7hyBuYW0gdHJvbmcgdOG7lW5nIHRo4buDIGzDoCA1MCUuIFThu7cgbOG7hyBxdWFuIHPDoXQgcGjDuSBo4bujcCB24bubaSBnaeG6oyB0aHV54bq/dC4KICAKIyMjICoqMy4yIE1vc3QgdXNlZCBwbGF0Zm9ybSAtIFRpa3RvayoqCgojIyMjICoqMy4yLjEgxq/hu5tjIGzGsOG7o25nIGtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIHThu7cgbOG7hyBuZ8aw4budaSBkw7luZyBu4buBbiB04bqjbmcgVGlrdG9rKioKCmBgYHtyfQpwcm9wLnRlc3QoeCA9IHN1bShkYXQkTW9zdF9Vc2VkX1BsYXRmb3JtID09ICJUaWtUb2siKSwKICAgICAgICAgIG4gPSBucm93KGRhdCksCiAgICAgICAgICBwID0gMC44LCAgICMgR2nhuqMgdGh1eeG6v3Q6IDgwJSBkw7luZyBUaWtUb2sKICAgICAgICAgIGNvbmYubGV2ZWwgPSAwLjk1KQpgYGAKCiMjIyMgKiozLjIuMiBCw6BpIHRvw6FuIGtp4buDbSDEkeG7i25oKioKCi0gR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6CgogIC0gSOKCgDogcCA9IDAuOCAoZ2nhuqMgxJHhu4tuaCBy4bqxbmcgODAlIG5nxrDhu51pIGTDuW5nIGNo4buNbiBUaWtUb2spCiAgLSBI4oKBOiBwIOKJoCAwLjggKHThu7cgbOG7hyBuZ8aw4budaSBjaOG7jW4gVGlrVG9rIGtow6FjIDgwJSkKCi0gTmjhuq1uIHjDqXQgCgotIFThu7cgbOG7hyBuZ8aw4budaSBjaOG7jW4gVGlrVG9rIGzDoCAyMS44JSwgcuG6pXQgdGjhuqVwIHNvIHbhu5tpIGdp4bqjIHRodXnhur90IGJhbiDEkeG6p3UgbMOgIDgwJS4KLSBLaG/huqNuZyB0aW4gY+G6rXkgOTUlIG7hurFtIHRyb25nIGtob+G6o25nIFsxOC45JSwgMjUuMSVdLCBraMO0bmcgYmFvIGfhu5NtIDgwJS4KLSBwLXZhbHVlIGPhu7FjIGvhu7Mgbmjhu48gKDwgMi4yZS0xNiksIGNobyB0aOG6pXkgc+G7sSBraMOhYyBiaeG7h3QgbMOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogcuG6pXQgY2FvLgoKLSBL4bq/dCBsdeG6rW4KCiAgLSBDw7MgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogcuG6pXQgbeG6oW5oIMSR4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBy4bqxbmcgODAlIG5nxrDhu51pIGto4bqjbyBzw6F0IGNo4buNbiBUaWtUb2sgbMOgIG7hu4FuIHThuqNuZyBz4butIGThu6VuZyBjaMOtbmguClRo4buxYyB04bq/LCBjaOG7iSBraG/huqNuZyAyMiUgbmfGsOG7nWkgdGhhbSBnaWEga2jhuqNvIHPDoXQgY2hvIGJp4bq/dCBo4buNIHPhu60gZOG7pW5nIFRpa1RvayBuaGnhu4F1IG5o4bqldC4KCiMjIyAqKjMuMyBBY2FkZW1pYyBMZXZlbCAtIEhpZ2ggU2Nob29sKioKCiMjIyMgKiozLjMuMSDGr+G7m2MgbMaw4bujbmcga2hv4bqjbmcgdGluIGPhuq15IDk1JSBjaG8gdOG7tyBs4buHIG5nxrDhu51pIGTDuW5nIGzDoCBo4buNYyBzaW5oIFRIUFQqKgoKYGBge3J9CnByb3AudGVzdCgKICB4ID0gc3VtKGRhdCRBY2FkZW1pY19MZXZlbCA9PSAiSGlnaCBTY2hvb2wiKSwKICBuID0gbnJvdyhkYXQpLAogIHAgPSAwLjA1LAogIGFsdGVybmF0aXZlID0gImdyZWF0ZXIiLCAgIyBN4buZdCBwaMOtYToga2nhu4NtIMSR4buLbmggcCA+IDAuMDUKICBjb25mLmxldmVsID0gMC45NQopCgpgYGAKCiMjIyMgKiozLjMuMiBCw6BpIHRvw6FuIGtp4buDbSDEkeG7i25oKioKCi0gR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6CiAgLSBI4oKAOiBU4bu3IGzhu4cgaOG7jWMgc2luaCBUSFBUID0gNSUgKHAgPSAwLjA1KQogIC0gSOKCgTogVOG7tyBs4buHIGjhu41jIHNpbmggVEhQVCA+IDUlIChwID4gMC4wNSkKICAKLSBL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaDoKCi0gR2nDoSB0cuG7iyB0aOG7kW5nIGvDqiBYLXNxdWFyZWQgPSAxLjc5MzYKLSBwLXZhbHVlID0gMC45MDk4Ci0gVOG7tyBs4buHIG3huqt1IChwzIIpID0gMC4wMzgzIChraG/huqNuZyAzLjglKQotIEtob+G6o25nIHRpbiBj4bqteSA5NSUgKG3hu5l0IHBow61hKSBsw6AgdOG7qyAyLjc1JSDEkeG6v24gMTAwJSAoxJHGsOG7o2MgaGnhu4NuIHRo4buLIG5oxrAgduG6rXkgZG8ga2nhu4NtIMSR4buLbmggMSBwaMOtYSkKCi0gTmjhuq1uIHjDqXQKCi0gcC12YWx1ZSA9IDAuOTA5OCA+IDAuMDUsIGRvIMSRw7Mga2jDtG5nIGPDsyDEkeG7pyBi4bqxbmcgY2jhu6luZyDEkeG7gyBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgSOKCgC4KLSBU4bu3IGzhu4cgaOG7jWMgc2luaCBUSFBUIHRyb25nIG3huqt1IGto4bqjbyBzw6F0IGzDoCBraG/huqNuZyAzLjglLCB0aOG6pXAgaMahbiA1JSBnaeG6oyDEkeG7i25oIHRyb25nIEjigoAuCi0gS2hv4bqjbmcgdGluIGPhuq15IHRo4bqlcCBoxqFuIDUlLCBjaOG7qW5nIHThu48gdOG7tyBs4buHIHRo4buxYyBz4buxIGPDsyB0aOG7gyB0aOG6pXAgaMahbiBob+G6t2MgYuG6sW5nIDUlLgotIE5oxrAgduG6rXksIGtow7RuZyBjw7MgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogxJHhu4Mga+G6v3QgbHXhuq1uIHLhurFuZyB04bu3IGzhu4cgaOG7jWMgc2luaCBUSFBUIHRyb25nIG3huqt1IGzhu5tuIGjGoW4gNSUuCgotIEvhur90IGx14bqtbgoKICAtIEThu7FhIHRyw6puIGvhur90IHF14bqjIGtp4buDbSDEkeG7i25oLCB04bu3IGzhu4cgaOG7jWMgc2luaCBUSFBUIHRyb25nIGto4bqjbyBzw6F0IGtow7RuZyB2xrDhu6N0IHF1w6EgNSUgbeG7mXQgY8OhY2ggY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4gVOG7tyBs4buHIHRo4buxYyB04bq/IGPDsyB0aOG7gyB0aOG6pXAgaMahbiBob+G6t2MgYuG6sW5nIDUlLgoKIyMjICoqMy40IEFjYWRlbWljIExldmVsIC0gVW5kZXJncmFkdWF0ZSB2w6AgR3JhZHVhdGUqKgoKLSAqKk3hu6VjIHRpw6p1OioqCgotIFNvIHPDoW5oIHThu7cgbOG7hyBuZ8aw4budaSBi4buLIOG6o25oIGjGsOG7n25nIGjhu41jIHThuq1wIGRvIGTDuW5nIG3huqFuZyB4w6MgaOG7mWkgZ2nhu69hIDIgbmjDs206CgogIC0gR3JhZHVhdGUKICAtIFVuZGVyZ3JhZHVhdGUKCi0gVOG7tyBs4buHIFVuZGVyZ3JhZHVhdGUgYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCBjw7Mgbmjhu48gaMahbiBHcmFkdWF0ZSBraMO0bmc/CgpgYGB7cn0KIyBU4bqhbyBi4bqjbmcgMiBjaGnhu4F1IGdp4buvYSBBY2FkZW1pY19MZXZlbCB2w6AgQWZmZWN0c19BY2FkZW1pY19QZXJmb3JtYW5jZQp0YWJfYWNhZGVtaWMgPC0gdGFibGUoZGF0JEFjYWRlbWljX0xldmVsLCBkYXQkQWZmZWN0c19BY2FkZW1pY19QZXJmb3JtYW5jZSkKCiMgQ2jhu4kgZ2nhu68gbOG6oWkgVW5kZXJncmFkdWF0ZSB2w6AgR3JhZHVhdGUKdGFiX3VnX2cgPC0gdGFiX2FjYWRlbWljW2MoIlVuZGVyZ3JhZHVhdGUiLCAiR3JhZHVhdGUiKSwgXQpwcm9wLnRlc3QoCiAgeCA9IGModGFiX3VnX2dbIlVuZGVyZ3JhZHVhdGUiLCAiWWVzIl0sIHRhYl91Z19nWyJHcmFkdWF0ZSIsICJZZXMiXSksCiAgbiA9IGMoc3VtKHRhYl91Z19nWyJVbmRlcmdyYWR1YXRlIiwgXSksIHN1bSh0YWJfdWdfZ1siR3JhZHVhdGUiLCBdKSksCiAgYWx0ZXJuYXRpdmUgPSAibGVzcyIsICAjIGtp4buDbSDEkeG7i25oIDEgcGjDrWEKICBjb25mLmxldmVsID0gMC45NQopCmBgYAoKIyMjIyAqKjMuNC4xIELDoGkgdG/DoW4ga2nhu4NtIMSR4buLbmgqKgoKLSBI4oKAOiBw4oKBIC0gcOKCgiA9IDAgKHThu7cgbOG7hyBVbmRlcmdyYWR1YXRlIGLhurFuZyBHcmFkdWF0ZSkKCi0gSOKCgTogcOKCgSAtIHDigoIgPCAwICh04bu3IGzhu4cgVW5kZXJncmFkdWF0ZSBuaOG7jyBoxqFuIEdyYWR1YXRlKQoKKipOaOG6rW4geMOpdCBr4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCoqCgotIEdpw6EgdHLhu4sgdGjhu5FuZyBrw6ogY2hpIGLDrG5oIHBoxrDGoW5nIChYLXNxdWFyZWQpID0gMC44MTQ6IEdpw6EgdHLhu4sgbsOgeSBraMO0bmcgbOG7m24sIGNobyB0aOG6pXkgc+G7sSBraMOhYyBiaeG7h3QgZ2nhu69hIGhhaSB04bu3IGzhu4cgcXVhbiBzw6F0IMSRxrDhu6NjIGtow7RuZyBxdcOhIG7hu5VpIGLhuq10IGhv4bq3YyBraMO0bmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IHLDtSByw6BuZy4KLSBT4buRIGLhuq1jIHThu7EgZG8gKGRmKSA9IDE6IFbDrCBzbyBzw6FuaCBnaeG7r2EgMiBuaMOzbSBuw6puIGLhuq1jIHThu7EgZG8gbMOgIDEsIHBow7kgaOG7o3AgduG7m2kgYsOgaSB0b8OhbiBraeG7g20gxJHhu4tuaCB04bu3IGzhu4cgZ2nhu69hIGhhaSBuaMOzbS4KLSBQLXZhbHVlID0gMC44MTY1OiDEkMOieSBsw6AgeMOhYyBzdeG6pXQgcXVhbiBzw6F0IMSRxrDhu6NjIHPhu7Ega2jDoWMgYmnhu4d0IG5oxrAgduG6rXkgKGhv4bq3YyBs4bubbiBoxqFuKSBu4bq/dSBnaeG6oyB0aHV54bq/dCBn4buRYyAoSOKCgDogdOG7iSBs4buHIHVuZGVyZ3JhZHVhdGUgYuG6sW5nIHThu4kgbOG7hyBncmFkdWF0ZSkgbMOgIMSRw7puZy4gR2nDoSB0cuG7iyBwLXZhbHVlIGzhu5tuIGjGoW4gbeG7qWMgw70gbmdoxKlhIDAuMDUgY2hvIHRo4bqleSBraMO0bmcgxJHhu6cgYuG6sW5nIGNo4bupbmcgxJHhu4MgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IGfhu5FjLgotIEjGsOG7m25nIGtp4buDbSDEkeG7i25oIChhbHRlcm5hdGl2ZSBoeXBvdGhlc2lzOiBsZXNzKTogR2nhuqMgdGh1eeG6v3QgxJHhu5FpIOG7nyDEkcOieSBsw6AgdOG7iSBs4buHIHVuZGVyZ3JhZHVhdGUgbmjhu48gaMahbiB04buJIGzhu4cgZ3JhZHVhdGUuIFR1eSBuaGnDqm4sIGvhur90IHF14bqjIMaw4bubYyBsxrDhu6NuZyB04buJIGzhu4cgbeG6q3UgbOG6oWkgbMOgOgogIC0gcHJvcCAxIChVbmRlcmdyYWR1YXRlKSA9IDAuNjQ4NyAoNjQuODclKQogIC0gcHJvcCAyIChHcmFkdWF0ZSkgPSAwLjYxMjMgKDYxLjIzJSkgxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgdOG7iSBs4buHIHVuZGVyZ3JhZHVhdGUgY8OybiBjYW8gaMahbiBt4buZdCBjaMO6dCBzbyB24bubaSBncmFkdWF0ZSwgdOG7qWMgbMOgIGdp4bqjIHRodXnhur90IMSR4buRaSDigJx1bmRlcmdyYWR1YXRlIDwgZ3JhZHVhdGXigJ0ga2jDtG5nIHBow7kgaOG7o3AgduG7m2kgZOG7ryBsaeG7h3UgcXVhbiBzw6F0LgotIEtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIGhp4buHdSB04buJIGzhu4cgKHByb3AxIC0gcHJvcDIpOiAoLTEuMDAwMCwgMC4xMDA0KTogS2hv4bqjbmcgbsOgeSBy4bqldCBy4buZbmcgdsOgIGJhbyBn4buTbSBj4bqjIHPhu5EgMCBjxaluZyBuaMawIGPDoWMgZ2nDoSB0cuG7iyBkxrDGoW5nLCDEkWnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6AgY8OzIHRo4buDIGtow7RuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgaG/hurdjIHThu4kgbOG7hyB1bmRlcmdyYWR1YXRlIGPDsyB0aOG7gyBjYW8gaMahbiBncmFkdWF0ZS4gRG8gxJHDsywgY2jGsGEgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIMSR4buDIGvhur90IGx14bqtbiB1bmRlcmdyYWR1YXRlIGPDsyB04buJIGzhu4cgZMO5bmcgbeG6oW5nIHjDoyBo4buZaSBuaOG7jyBoxqFuIGdyYWR1YXRlLgoKKipL4bq/dCBsdeG6rW4qKgoKLSBW4bubaSBt4bupYyDDvSBuZ2jEqWEgzrEgPSAwLjA1LCB2w6wgcC12YWx1ZSA9IDAuODE2NSA+IDAuMDUsIHRhIGtow7RuZyBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgSOKCgC4gS2jDtG5nIGPDsyDEkeG7pyBi4bqxbmcgY2jhu6luZyB0aOG7kW5nIGvDqiDEkeG7gyBr4bq/dCBsdeG6rW4gcuG6sW5nIHThu7cgbOG7hyBkw7luZyBt4bqhbmcgeMOjIGjhu5lpIGPhu6dhIG5ow7NtIHVuZGVyZ3JhZHVhdGUgbmjhu48gaMahbiBuaMOzbSBncmFkdWF0ZS4KCiMjIyAqKjMuNSBSZWxhdGlvbnNoaXAgU3RhdHVzIC0gU2luZ2xlKioKCi0gVHJvbmcgbmjDs20gbmfGsOG7nWkgY8OzIHRy4bqhbmcgdGjDoWkgIlNpbmdsZSIsIHThu7cgbOG7hyBuZ8aw4budaSBjaG8gYmnhur90IG3huqFuZyB4w6MgaOG7mWkg4bqjbmggaMaw4bufbmcgxJHhur9uIHZp4buHYyBo4buNYyBu4bqxbSB0cm9uZyBraG/huqNuZyBuw6BvIHbhu5tpIMSR4buZIHRpbiBj4bqteSA5NSU/CgoKYGBge3J9CiMgxJDhur9tIHPhu5EgbmfGsOG7nWkgIlNpbmdsZSIgYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCAoWWVzKQp4IDwtIHN1bShkYXQkUmVsYXRpb25zaGlwX1N0YXR1cyA9PSAiU2luZ2xlIiAmIGRhdCRBZmZlY3RzX0FjYWRlbWljX1BlcmZvcm1hbmNlID09ICJZZXMiKQoKIyBU4buVbmcgc+G7kSBuZ8aw4budaSAiU2luZ2xlIgpuIDwtIHN1bShkYXQkUmVsYXRpb25zaGlwX1N0YXR1cyA9PSAiU2luZ2xlIikKCiMgxq/hu5tjIGzGsOG7o25nIGtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIHThu7cgbOG7hyBkw7luZyBt4bqhbmcgeMOjIGjhu5lpIOG6o25oIGjGsOG7n25nIGjhu41jIHThuq1wCnByb3AudGVzdCh4ID0geCwgbiA9IG4sIGNvbmYubGV2ZWwgPSAwLjk1KQpgYGAKCiMjIyMgKiozLjUuMSBCw6BpIHRvw6FuIGtp4buDbSDEkeG7i25oKioKCi0gR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6CiAgLSBI4oKAOiBU4bu3IGzhu4cgbmfGsOG7nWkgxJHhu5ljIHRow6JuIChTaW5nbGUpIGLhu4sg4bqjbmggaMaw4bufbmcgYuG7n2kgbeG6oW5nIHjDoyBo4buZaSBsw6AgNTAlIChwID0gMC4wNSkKICAtIEjigoE6IFThu7cgbOG7hyBuZ8aw4budaSDEkeG7mWMgdGjDom4gKFNpbmdsZSkgYuG7iyDhuqNuaCBoxrDhu59uZyBi4bufaSBt4bqhbmcgeMOjIGjhu5lpIGtow6FjIDUwJSAocCDiiaAgMC41KQoKLSBL4bq/dCBxdeG6oyB0aOG7kW5nIGvDqjoKICAtIFThu7cgbOG7hyBt4bqrdSAoxrDhu5tjIGzGsOG7o25nKSBsw6AgMC43MTA5IHThu6ljIGzDoCA3MS4xJSBuZ8aw4budaSDEkeG7mWMgdGjDom4gYuG7iyDhuqNuaCBoxrDhu59uZyBi4bufaSBt4bqhbmcgeMOjIGjhu5lpLgogIC0gS2hv4bqjbmcgdGluIGPhuq15IDk1JTogWzAuNjYyMywgMC43NTUyXQogIC0gR2nDoSB0cuG7iyBraeG7g20gxJHhu4tuaCBDaGktc3F1YXJlZDogNjcuNTAzCiAgLSBwLXZhbHVlOiA8IDIuMiDDlyAxMOKBu8K54oG2CgotICoqRGnhu4VuIGdp4bqjaSBr4bq/dCBxdeG6oyoqCgotIFThu7cgbOG7hyBuZ8aw4budaSDEkeG7mWMgdGjDom4gYuG7iyDhuqNuaCBoxrDhu59uZyBi4bufaSBt4bqhbmcgeMOjIGjhu5lpIGzDoCBraG/huqNuZyA3MS4xJSwgdsOgIGtob+G6o25nIHRpbiBj4bqteSA5NSUgbuG6sW0gdOG7qyA2Ni4yJSDEkeG6v24gNzUuNSUuCi0gS2hv4bqjbmcgdGluIGPhuq15IG7DoHkga2jDtG5nIGNo4bupYSAwLjUsIG5naMSpYSBsw6AgY2jDum5nIHRhIGxv4bqhaSBi4buPIEjigoAgKGtow7RuZyBjw7MgYuG6sW5nIGNo4bupbmcgcuG6sW5nIHThu7cgbOG7hyBsw6AgNTAlKS4KLSBwLXZhbHVlIDwgMC4wMDEsIGPhu7FjIGvhu7Mgbmjhu48g4oaSIG5naMSpYSBsw6AgeMOhYyBzdeG6pXQgxJHhu4MgcXVhbiBzw6F0IMSRxrDhu6NjIHThu7cgbOG7hyBuw6B5IG7hur91IHAgPSAwLjUgbMOgIHLhuqV0IHRo4bqlcCwgbsOqbiB0YSBiw6FjIGLhu48gSOKCgC4KCiMjIyMgKiozLjUuMiBL4bq/dCBsdeG6rW4qKgoKLSBW4bubaSBt4bupYyDDvSBuZ2jEqWEgzrEgPSAwLjA1IHRhIGPDsyDEkeG7pyBi4bqxbmcgY2jhu6luZyDEkeG7gyBr4bq/dCBsdeG6rW4gcuG6sW5nOgogIC0gVOG7tyBs4buHIG5nxrDhu51pIMSR4buZYyB0aMOibiBi4buLIOG6o25oIGjGsOG7n25nIGLhu59pIG3huqFuZyB4w6MgaOG7mWkgS0jDgUMgNTAlIG3hu5l0IGPDoWNoIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouCiAgLSBD4bulIHRo4buDLCBjw7MgaMahbiA3MCUgbmfGsOG7nWkgxJHhu5ljIHRow6JuIGLhu4sg4bqjbmggaMaw4bufbmcsIHbDoCDEkcOieSBsw6AgbeG7mXQgdOG7tyBs4buHIGNhbyDEkcOhbmcga+G7gywgY2hvIHRo4bqleSBt4bqhbmcgeMOjIGjhu5lpIGPDsyB0aOG7gyBjw7MgdMOhYyDEkeG7mW5nIHLDtSBy4buHdCDEkeG6v24gaOG7jWMgdOG6rXAgY+G7p2EgbmjDs20gbsOgeS4KICAKIyMgKipQSOG6pk4gNDogUEjDgk4gVMONQ0ggTeG7kEkgTEnDik4gSOG7hiBHSeG7rkEgSEFJIEJJ4bq+TioqCgojIyMgKio0LjEgR2VuZGVyIHbDoCBNb3N0IHVzZWQgcGxhdGZvcm0qKgoKLSAqKkzDvS4gZG86KioKICAtIEdp4bubaSB0w61uaCBjw7MgdGjhu4Mg4bqjbmggaMaw4bufbmcgxJHhur9uIHZp4buHYyBs4buxYSBjaOG7jW4gbeG6oW5nIHjDoyBo4buZaSBjaMOtbmguIFbDrSBk4bulLCBu4buvIGPDsyB0aOG7gyDGsHUgdGnDqm4gSW5zdGFncmFtIGhv4bq3YyBUaWtUb2ssIHRyb25nIGtoaSBuYW0gY8OzIHRo4buDIGTDuW5nIG5oaeG7gXUgRmFjZWJvb2sgaG/hurdjIFR3aXR0ZXIgaMahbi4KICAKLSAqKlBow6JuIHTDrWNoOioqCiAgLSBTbyBzw6FuaCB04bu3IGzhu4cgdOG7q25nIG7hu4FuIHThuqNuZyB0aGVvIHThu6tuZyBnaeG7m2kgdMOtbmggxJHhu4MgeGVtIGPDsyBz4buxIGtow6FjIGJp4buHdCB0cm9uZyB0aMOzaSBxdWVuIHPhu60gZOG7pW5nIG3huqFuZyB4w6MgaOG7mWkga2jDtG5nLgogIAojIyMjICoqNC4xLjEgQuG6o25nIHThuqduIHN14bqldCBjaMOpbyoqCgoKYGBge3J9CiMgVOG6oW8gYuG6o25nIHThuqduIHPhu5EgY2jDqW8KY3Jvc3NfZ3AgPC0gdGFibGUoZGF0JEdlbmRlciwgZGF0JE1vc3RfVXNlZF9QbGF0Zm9ybSkKCiMgQ2h1eeG7g24gc2FuZyBi4bqjbmcgdOG6p24gc3XhuqV0IHRoZW8gcGjhuqduIHRyxINtCmNyb3NzX3BlcmNlbnRfZ3AgPC0gcHJvcC50YWJsZShjcm9zc19ncCkgKiAxMDAKCiMgTMOgbSB0csOybiB2w6AgaGnhu4NuIHRo4buLCnByaW50KHJvdW5kKGNyb3NzX3BlcmNlbnRfZ3AsIDIpKQoKYGBgCgojIyMjICoqNC4xLjIgVHLhu7FjIHF1YW4gaG/DoSoqCgpgYGB7cn0KIyBDaHV54buDbiBzYW5nIGRhdGEgZnJhbWUKY3Jvc3NfZGZncCA8LSBhcy5kYXRhLmZyYW1lKGNyb3NzX2dwKQpjb2xuYW1lcyhjcm9zc19kZmdwKSA8LSBjKCJHZW5kZXIiLCAiUGxhdGZvcm0iLCAiUGVyY2VudGFnZSIpCgojIEJp4buDdSDEkeG7kwpnZ3Bsb3QoY3Jvc3NfZGZncCwgYWVzKHggPSBQbGF0Zm9ybSwgeSA9IFBlcmNlbnRhZ2UsIGZpbGwgPSBHZW5kZXIpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiKSArCiAgbGFicyh0aXRsZSA9ICJU4bu3IGzhu4cgc+G7rSBk4bulbmcgbeG6oW5nIHjDoyBo4buZaSB0aGVvIGdp4bubaSB0w61uaCIsCiAgICAgICB4ID0gIk7hu4FuIHThuqNuZyBt4bqhbmcgeMOjIGjhu5lpIiwKICAgICAgIHkgPSAiVOG7tyBs4buHICglKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDIiKQoKYGBgCgojIyMjICoqNC4xLjMgTmjhuq1uIHjDqXQqKgoK8J+UuSAxLiBJbnN0YWdyYW0gdsaw4bujdCB0cuG7mWkg4bufIG7hu68gZ2nhu5tpCgotIEluc3RhZ3JhbSBsw6AgbuG7gW4gdOG6o25nIHBo4buVIGJp4bq/biBuaOG6pXQg4bufIG7hu68gZ2nhu5tpICgyNC40JSksIGNhbyBoxqFuIGfhuqVwIDIuMiBs4bqnbiBzbyB24bubaSBuYW0gZ2nhu5tpICgxMC45MiUpLgotIMSQaeG7gXUgbsOgeSBwaMO5IGjhu6NwIHbhu5tpIHh1IGjGsOG7m25nIGNodW5nOiBJbnN0YWdyYW0gaOG6pXAgZOG6q24gaMahbiB24bubaSBuZ8aw4budaSBkw7luZyBu4buvIGRvIHRoacOqbiB24buBIGjDrG5oIOG6o25oLCB0aOG6qW0gbeG7uSwgdsOgIG7hu5lpIGR1bmcgY8OhIG5ow6JuLgoK8J+UuSAyLiBGYWNlYm9vayBuZ8aw4bujYyBs4bqhaSDigJMgcGjhu5UgYmnhur9uIGjGoW4g4bufIG5hbSBnaeG7m2kKCi0gRmFjZWJvb2sgxJHGsOG7o2Mgc+G7rSBk4bulbmcgbmhp4buBdSBoxqFuIOG7nyBuYW0gKDE0LjA0JSkgc28gduG7m2kgbuG7ryAoY2jhu4kgMy40JSkuCi0gQ8OzIHRo4buDIGRvIG5hbSBnaeG7m2kgZ2nhu68gdGjDs2kgcXVlbiBkw7luZyBu4buBbiB04bqjbmcgdHJ1eeG7gW4gdGjhu5FuZyBuw6B5IGzDonUgaMahbiwgaG/hurdjIGTDuW5nIMSR4buDIHRoZW8gZMO1aSB0aW4gdOG7qWMsIG5ow7NtIG5naOG7gSBuZ2hp4buHcCwuLi4KCvCflLkgMy4gVGlrVG9rIHBo4buVIGJp4bq/biDhu58gY+G6oyBoYWkgZ2nhu5tpCgotIFRpa1RvayBsw6AgbuG7gW4gdOG6o25nIMSRxrDhu6NjIGPhuqMgbmFtICg5LjY1JSkgdsOgIG7hu68gKDEyLjIlKSDGsGEgY2h14buZbmcg4oCTIG5oxrBuZyBu4buvIHbhuqtuIGNoaeG6v20gdOG7tyBs4buHIGNhbyBoxqFuLgotIENobyB0aOG6pXkgVGlrVG9rIGzDoCBt4buZdCBu4buBbiB04bqjbmcgxJFhbmcgY2hp4bq/bSDGsHUgdGjhur8g4bufIG5nxrDhu51pIHRy4bq7IG7Ds2kgY2h1bmcsIG5o4bqldCBsw6AgbuG7ry4KCvCflLkgNC4gTeG7mXQgc+G7kSBu4buBbiB04bqjbmcgY8OzIHTDrW5oIGdp4bubaSB0w61uaCBow7NhIGNhbwoKLSBMSU5FLCBLYWthb1RhbGs6IGNo4buJIGPDsyDhu58gbuG7rywgbmFtIGhvw6BuIHRvw6BuIGtow7RuZyBkw7luZyDihpIgY8OzIHRo4buDIGzDoCBuZ8aw4budaSBu4buvIHThu6sgY8OhYyBxdeG7kWMgZ2lhL2todSB24buxYyDEkeG6t2MgdGjDuSAoSMOgbiwgTmjhuq10Li4uKS4KLSBWS29udGFrdGUsIFlvdVR1YmU6IGNo4buJIGPDsyDhu58gbmFtIOKAkyB0dXkgdOG7tyBs4buHIGtow7RuZyBjYW8sIG5oxrBuZyBwaOG6o24gw6FuaCBz4buxIGzhu7FhIGNo4buNbiDEkeG6t2MgYmnhu4d0IHRoZW8gZ2nhu5tpIHTDrW5oIGhv4bq3YyB2w7luZyB2xINuIGjDs2EuCgrwn5S5IDUuIFdoYXRzQXBwLCBXZUNoYXQsIExpbmtlZEluLCBUd2l0dGVyLi4uOiDEkcaw4bujYyBj4bqjIDIgZ2nhu5tpIGTDuW5nIG5oxrBuZyBuYW0gdGjGsOG7nW5nIGNoaeG6v20gdOG7tyBs4buHIGNhbyBoxqFuLgoKIyMjIyAqKjQuMS40IMSQw6FuaCBnacOhKioKCi0gR2nhu5tpIHTDrW5oIGPDsyDhuqNuaCBoxrDhu59uZyByw7UgcuG7h3QgxJHhur9uIHZp4buHYyBs4buxYSBjaOG7jW4gbuG7gW4gdOG6o25nIG3huqFuZyB4w6MgaOG7mWkgY2jDrW5oLgotIE7hu68gZ2nhu5tpIHRoacOqbiB24buBIG7hu4FuIHThuqNuZyBow6xuaCDhuqNuaCB2w6AgdMawxqFuZyB0w6FjIG5o4bq5IG5ow6BuZyAoSW5zdGFncmFtLCBUaWtUb2spLCB0cm9uZyBraGkgbmFtIGdp4bubaSBjw7MgeHUgaMaw4bubbmcgZ2nhu68gY8OhYyBu4buBbiB04bqjbmcgdHJ1eeG7gW4gdGjhu5FuZyBob+G6t2MgY2h1ecOqbiBuZ2hp4buHcCBoxqFuIChGYWNlYm9vaywgTGlua2VkSW4sIFdoYXRzQXBwKS4KLSDEkMOieSBsw6AgbeG7mXQgY8ahIHPhu58gcXVhbiB0cuG7jW5nIMSR4buDIGzDoG0gcGjDom4gdMOtY2ggc8OidSBoxqFuIHbhu4EgbeG7kWkgcXVhbiBo4buHIGdp4buvYSBow6BuaCB2aSBt4bqhbmcgeMOjIGjhu5lpIHbDoCBnaeG7m2kgdMOtbmgsIGhv4bq3YyBt4bupYyDEkeG7mSBuZ2hp4buHbiBt4bqhbmcgeMOjIGjhu5lpIChBZGRpY3RlZF9TY29yZSkuCgojIyMjICoqNC4xLjUgS2nhu4NtIMSR4buLbmggY2hpIGLDrG5oIHBoxrDGoW5nKioKCmBgYHtyfQojIFThuqFvIGLhuqNuZyB04bqnbiBz4buRIGNow6lvCmNyb3NzX2dwIDwtIHRhYmxlKGRhdCRHZW5kZXIsIGRhdCRNb3N0X1VzZWRfUGxhdGZvcm0pCiMgS2nhu4NtIMSR4buLbmggCmNoaXNxLnRlc3QoY3Jvc3NfZ3AsIHNpbXVsYXRlLnAudmFsdWUgPSBUUlVFLCBCID0gMTAwMDApCgpgYGAKKipDw6FjIGdp4bqjIHRodXnhur90KioKCi0gR2nhuqMgdGh1eeG6v3Qga2jDtG5nIChI4oKAKTogR2nhu5tpIHTDrW5oIHbDoCBu4buBbiB04bqjbmcgbeG6oW5nIHjDoyBo4buZaSBz4butIGThu6VuZyBuaGnhu4F1IG5o4bqldCBsw6AgxJHhu5ljIGzhuq1wIHbhu5tpIG5oYXUuCi0gR2nhuqMgdGh1eeG6v3QgxJHhu5FpIChI4oKBKTogR2nhu5tpIHTDrW5oIHbDoCBu4buBbiB04bqjbmcgbeG6oW5nIHjDoyBo4buZaSBz4butIGThu6VuZyBuaGnhu4F1IG5o4bqldCBjw7MgbeG7kWkgcXVhbiBo4buHIHBo4bulIHRodeG7mWMuCgoqKlBoxrDGoW5nIHBow6FwKioKCi0gU+G7rSBk4bulbmcga2nhu4NtIMSR4buLbmggQ2hpIGLDrG5oIHBoxrDGoW5nIMSR4buZYyBs4bqtcCB24bubaSBtw7QgcGjhu49uZyBNb250ZSBDYXJsbyAoc2ltdWxhdGUucC52YWx1ZSA9IFRSVUUsIDEwMDAwIGzhuqduKSDEkeG7gyB44butIGzDvSB0csaw4budbmcgaOG7o3AgdOG6p24gc3XhuqV0IG5o4buPIHRyb25nIGLhuqNuZyBjaMOpby4KCioqS+G6v3QgcXXhuqMqKgoKLSBHacOhIHRy4buLIHRo4buRbmcga8OqIGNoaSBiw6xuaCBwaMawxqFuZzogWC1zcXVhcmVkID0gMTU0LjMzCi0gR2nDoSB0cuG7iyBwLXZhbHVlIG3DtCBwaOG7j25nOiBwLXZhbHVlID0gOS45OTllLTA1Ci0gQuG6rWMgdOG7sSBkbyBraMO0bmcgeMOhYyDEkeG7i25oIGRvIGTDuW5nIG3DtCBwaOG7j25nIChkZiA9IE5BKS4KCioqTmjhuq1uIHjDqXQqKgoKLSBW4bubaSBt4bupYyDDvSBuZ2jEqWEgzrEgPSAwLjA1LCBnacOhIHRy4buLIHAtdmFsdWUgcuG6pXQgbmjhu48gKHAtdmFsdWUg4omIIDAuMDAwMSA8IDAuMDUpIG7Dqm4gYsOhYyBi4buPIGdp4bqjIHRodXnhur90IGtow7RuZyBI4oKALgoKLSDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBjw7MgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogbeG6oW5oIG3hur0gxJHhu4Mga+G6v3QgbHXhuq1uIHLhurFuZzoKICAtIEdp4bubaSB0w61uaCDhuqNuaCBoxrDhu59uZyDEkeG6v24gbOG7sWEgY2jhu41uIG7hu4FuIHThuqNuZyBt4bqhbmcgeMOjIGjhu5lpIMSRxrDhu6NjIHPhu60gZOG7pW5nIG5oaeG7gXUgbmjhuqV0IHRyb25nIG5ow7NtIGto4bqjbyBzw6F0LgogIAotIE5naMSpYSBsw6AsIHPhu58gdGjDrWNoIHPhu60gZOG7pW5nIGPDoWMgbuG7gW4gdOG6o25nIG3huqFuZyB4w6MgaOG7mWkga2jDoWMgbmhhdSBwaOG7pSB0aHXhu5ljIHbDoG8gZ2nhu5tpIHTDrW5oLCBraMO0bmcgcGjhuqNpIG5n4bqrdSBuaGnDqm4uCgojIyMgKio0LjIgQWNhZGVtaWMgTGV2ZWwgdsOgIEFmZmVjdHMgYWNhZGVtaWMgcGVyZm9ybWFuY2UqKgoKLSAqKkzDvSBkbyoqCiAgLSBUcsOsbmggxJHhu5kgaOG7jWMgduG6pW4gY8OzIHRo4buDIGxpw6puIHF1YW4gxJHhur9uIHZp4buHYyBt4bqhbmcgeMOjIGjhu5lpIGPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24gaOG7jWMgdOG6rXAgaGF5IGtow7RuZy4gU2luaCB2acOqbiDEkeG6oWkgaOG7jWMsIGNhbyBo4buNYyBjw7MgdGjhu4Mgbmjhuq1uIHRo4bupYyByw7UgaMahbiBob+G6t2MgY8OzIG3hu6ljIOG6o25oIGjGsOG7n25nIGtow6FjIG5oYXUgc28gduG7m2kgaOG7jWMgc2luaCBwaOG7lSB0aMO0bmcuCgotICoqUGjDom4gdMOtY2gqKgogIC0gWGVtIHThu7cgbOG7hyB0cuG6oyBs4budaSDigJxZZXPigJ0gaG/hurdjIOKAnE5v4oCdIHbhu4Eg4bqjbmggaMaw4bufbmcgaOG7jWMgdOG6rXAgdHJvbmcgdOG7q25nIG5ow7NtIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbi4KCiMjIyMgKio0LjIuMSBC4bqjbmcgdOG6p24gc3XhuqV0IGNow6lvKioKCmBgYHtyfQojIFThuqFvIGLhuqNuZyB04bqnbiBz4buRIGNow6lvCmNyb3NzX2xwIDwtIHRhYmxlKGRhdCRBY2FkZW1pY19MZXZlbCwgZGF0JEFmZmVjdHNfQWNhZGVtaWNfUGVyZm9ybWFuY2UpCgojIENodXnhu4NuIHNhbmcgYuG6o25nIHThuqduIHN14bqldCB0aGVvIHBo4bqnbiB0csSDbQpjcm9zc19wZXJjZW50X2xwIDwtIHByb3AudGFibGUoY3Jvc3NfbHApICogMTAwCgojIEzDoG0gdHLDsm4gdsOgIGhp4buDbiB0aOG7iwpwcmludChyb3VuZChjcm9zc19wZXJjZW50X2xwLCAyKSkKYGBgCgojIyMjICoqNC4yLjIgVHLhu7FjIHF1YW4gaG/DoSoqCgpgYGB7cn0KIyBDaHV54buDbiBzYW5nIGRhdGEgZnJhbWUgxJHhu4MgduG6vQpjcm9zc19kZmxwIDwtIGFzLmRhdGEuZnJhbWUoY3Jvc3NfcGVyY2VudF9scCkKY29sbmFtZXMoY3Jvc3NfZGZscCkgPC0gYygiQWNhZGVtaWNfTGV2ZWwiLCAiQWZmZWN0cyIsICJQZXJjZW50YWdlIikKCiMgQmnhu4N1IMSR4buTCmdncGxvdChjcm9zc19kZmxwLCBhZXMoeCA9IEFjYWRlbWljX0xldmVsLCB5ID0gUGVyY2VudGFnZSwgZmlsbCA9IEFmZmVjdHMpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiKSArCiAgbGFicyh0aXRsZSA9ICLhuqJuaCBoxrDhu59uZyBj4bunYSBt4bqhbmcgeMOjIGjhu5lpIMSR4bq/biBr4bq/dCBxdeG6oyBo4buNYyB04bqtcCB0aGVvIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiIsCiAgICAgICB4ID0gIlRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiIsCiAgICAgICB5ID0gIlThu7cgbOG7hyAoJSkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIiwgbmFtZSA9ICLhuqJuaCBoxrDhu59uZyIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMzAsIGhqdXN0ID0gMSkpCmBgYAoKIyMjIyAqKjQuMi4zIE5o4bqtbiB4w6l0KioKCvCflLkgMS4gTmfGsOG7nWkgaOG7jWMgxJHhuqFpIGjhu41jIChVbmRlcmdyYWR1YXRlKSBi4buLIOG6o25oIGjGsOG7n25nIG5oaeG7gXUgbmjhuqV0CgotIFThu7cgbOG7hyBuZ8aw4budaSBo4buNYyDEkeG6oWkgaOG7jWMgdHLhuqMgbOG7nWkg4oCcWWVz4oCdIOKAkyBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIGjhu41jIHThuq1wIGNoaeG6v20gdOG7m2kgMzIuNCUgdG/DoG4gYuG7mSBt4bqrdS4KLSDEkMOieSBjxaluZyBsw6AgbmjDs20gxJHDtG5nIMSR4bqjbyBuaOG6pXQgdHJvbmcga2jhuqNvIHPDoXQsIGNoaeG6v20gZ+G6p24gNTAlIHThu5VuZyBt4bqrdSDihpIgcGjhuqNuIMOhbmggdHJ1bmcgdGjhu7FjIGjDoG5oIHZpIG3huqFuZyB4w6MgaOG7mWkg4bufIHNpbmggdmnDqm4gxJHhuqFpIGjhu41jLgoK8J+UuSAyLiBOZ8aw4budaSBo4buNYyBzYXUgxJHhuqFpIGjhu41jIChHcmFkdWF0ZSkgY8WpbmcgYuG7iyDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gwoKLSBDw7MgMjguMjMlIG5nxrDhu51pIGjhu41jIGNhbyBo4buNYyB0aOG7q2Egbmjhuq1uIG3huqFuZyB4w6MgaOG7mWkg4bqjbmggaMaw4bufbmcgxJHhur9uIHZp4buHYyBo4buNYyBj4bunYSBo4buNLgpUdXkgdGjhuqVwIGjGoW4gbmjDs20gdW5kZXJncmFkdWF0ZSBuaMawbmcgduG6q24ga2jDoSBjYW8g4oaSIGNobyB0aOG6pXkgY+G6oyBuaOG7r25nIG5nxrDhu51pIGPDsyB0csOsbmggxJHhu5kgY2FvIGPFqW5nIGNoxrBhIGtp4buDbSBzb8OhdCB04buRdCDhuqNuaCBoxrDhu59uZyB04burIG3huqFuZyB4w6MgaOG7mWkuCgrwn5S5IDMuIEjhu41jIHNpbmggcGjhu5UgdGjDtG5nIChIaWdoIFNjaG9vbCkgY2hp4bq/bSB04bu3IGzhu4cgcuG6pXQgbmjhu48KCi0gQ2jhu4kgY2hp4bq/bSAzLjgzJSB0b8OgbiBi4buZIG3huqt1IGto4bqjbyBzw6F0LCB24bubaSAzLjU1JSB0cuG6oyBs4budaSDigJxZZXPigJ0uCi0gU+G7kSBsaeG7h3UgbsOgeSBjw7MgdGjhu4MgcGjhuqNuIMOhbmggMiDEkWnhu4F1OgogIC0gTeG6q3Uga2jhuqNvIHPDoXQgY8OzIMOtdCBo4buNYyBzaW5oIHBo4buVIHRow7RuZy4KICAtIEhv4bq3YyBo4buNYyBzaW5oIGNoxrBhIGPDsyBuaOG6rW4gdGjhu6ljIHLDtSB24buBIOG6o25oIGjGsOG7n25nIGPhu6dhIG3huqFuZyB4w6MgaOG7mWkgxJHhur9uIGjhu41jIHThuq1wLCBob+G6t2MgaOG7jSDDrXQgc+G7rSBk4bulbmcgaMahbi4KICAKIyMjIyAqKjQuMi4zIEtp4buDbSDEkeG7i25oIGNoaSBiw6xuaCBwaMawxqFuZyoqCgpgYGB7cn0KIyBU4bqhbyBi4bqjbmcgdOG6p24gc+G7kSBjaMOpbwpjcm9zc19scCA8LSB0YWJsZShkYXQkQWNhZGVtaWNfTGV2ZWwsIGRhdCRBZmZlY3RzX0FjYWRlbWljX1BlcmZvcm1hbmNlKQojIEtp4buDbSDEkeG7i25oIApjaGlzcS50ZXN0KGNyb3NzX2xwKQoKYGBgCgoqKkPDoWMgZ2nhuqMgdGh1eeG6v3Q6KioKCi0gR2nhuqMgdGh1eeG6v3Qga2jDtG5nIChI4oKAKTogVHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIHbDoCDhuqNuaCBoxrDhu59uZyBj4bunYSBt4bqhbmcgeMOjIGjhu5lpIMSR4bq/biBo4buNYyB04bqtcCBsw6AgxJHhu5ljIGzhuq1wIHbhu5tpIG5oYXUuCi0gR2nhuqMgdGh1eeG6v3QgxJHhu5FpIChI4oKBKTogVHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIHbDoCDhuqNuaCBoxrDhu59uZyBj4bunYSBt4bqhbmcgeMOjIGjhu5lpIMSR4bq/biBo4buNYyB04bqtcCBjw7MgbeG7kWkgcXVhbiBo4buHIHBo4bulIHRodeG7mWMuCgoqKlBoxrDGoW5nIHBow6FwOioqCi0gU+G7rSBk4bulbmcga2nhu4NtIMSR4buLbmggQ2hpIGLDrG5oIHBoxrDGoW5nIMSR4buZYyBs4bqtcCBk4buxYSB0csOqbiBi4bqjbmcgdOG6p24gc+G7kSBjaMOpbyBnaeG7r2EgQWNhZGVtaWNfTGV2ZWwgdsOgIEFmZmVjdHNfQWNhZGVtaWNfUGVyZm9ybWFuY2UuCgoqKkvhur90IHF14bqjOioqCi0gR2nDoSB0cuG7iyB0aOG7kW5nIGvDqiBjaGkgYsOsbmggcGjGsMahbmc6IFgtc3F1YXJlZCA9IDEwLjc5MwotIELhuq1jIHThu7EgZG86IGRmID0gMgotIEdpw6EgdHLhu4sgcC12YWx1ZTogcC12YWx1ZSA9IDAuMDA0NTMzCgoqKk5o4bqtbiB4w6l0OioqCi0gVuG7m2kgbeG7qWMgw70gbmdoxKlhIM6xID0gMC4wNSwgcC12YWx1ZSA9IDAuMDA0NTMzIDwgMC4wNSwgbsOqbiBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3Qga2jDtG5nIEjigoAuCi0gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgY8OzIGLhurFuZyBjaOG7qW5nIHRo4buRbmcga8OqIMSR4buDIGvhur90IGx14bqtbiBy4bqxbmc6CiAgLSBUcsOsbmggxJHhu5kgaOG7jWMgduG6pW4gY8OzIOG6o25oIGjGsOG7n25nIMSR4bq/biB2aeG7h2MgbeG6oW5nIHjDoyBo4buZaSBjw7MgbMOgbSDhuqNuaCBoxrDhu59uZyDEkeG6v24gaGnhu4d1IHF14bqjIGjhu41jIHThuq1wIGhheSBraMO0bmcuCi0gTsOzaSBjw6FjaCBraMOhYywgbeG7qWMgxJHhu5kg4bqjbmggaMaw4bufbmcgY+G7p2EgbeG6oW5nIHjDoyBo4buZaSDEkeG6v24gaOG7jWMgdOG6rXAga2jDoWMgbmhhdSDhu58gY8OhYyBuaMOzbSB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4ga2jDoWMgbmhhdS4gCgojIyMgKio0LjMgUmVsYXRpb25zaGlwIFN0YXR1cyB2w6AgTW9zdCB1c2VkIHBsYXRmb3JtKioKCi0gKipMw70gZG8qKgogIC0gVMOsbmggdHLhuqFuZyBt4buRaSBxdWFuIGjhu4cgY8OzIHRo4buDIGxpw6puIHF1YW4gxJHhur9uIG7hu4FuIHThuqNuZyBt4bqhbmcgeMOjIGjhu5lpIMSRxrDhu6NjIHPhu60gZOG7pW5nIG5oaeG7gXUgbmjhuqV0LCBkbyBt4buXaSBu4buBbiB04bqjbmcgY8OzIMSR4bq3YyDEkWnhu4NtIGdpYW8gdGnhur9wIHbDoCB0xrDGoW5nIHTDoWMgeMOjIGjhu5lpIGtow6FjIG5oYXUuCiAgCi0gKipQaMOibiB0w61jaCoqCiAgLSBTbyBzw6FuaCBwaMOibiBi4buRIG7hu4FuIHThuqNuZyBjaMOtbmggZ2nhu69hIGPDoWMgbmjDs206IFNpbmdsZSwgSW4gUmVsYXRpb25zaGlwLCBDb21wbGljYXRlZC4KICAKIyMjIyAqKjQuMy4xIELhuqNuZyB04bqnbiBzdeG6pXQgY2jDqW8qKgoKYGBge3J9CiMgVOG6oW8gYuG6o25nIHThuqduIHPhu5EgY2jDqW8KY3Jvc3Nfc3AgPC0gdGFibGUoZGF0JFJlbGF0aW9uc2hpcF9TdGF0dXMsIGRhdCRNb3N0X1VzZWRfUGxhdGZvcm0pCgojIENodXnhu4NuIHNhbmcgYuG6o25nIHThuqduIHN14bqldCB0aGVvIHBo4bqnbiB0csSDbQpjcm9zc19wZXJjZW50X3NwIDwtIHByb3AudGFibGUoY3Jvc3Nfc3ApICogMTAwCgojIEzDoG0gdHLDsm4gdsOgIGhp4buDbiB0aOG7iwpwcmludChyb3VuZChjcm9zc19wZXJjZW50X3NwLCAyKSkKYGBgCgojIyMjICoqNC4zLjIgVHLhu7FjIHF1YW4gaG/DoSoqCgpgYGB7cn0KIyBDaHV54buDbiBzYW5nIGRhdGEgZnJhbWUgxJHhu4MgduG6vQpkZl9jcm9zc19zcCA8LSBhcy5kYXRhLmZyYW1lKGNyb3NzX3BlcmNlbnRfc3ApCmNvbG5hbWVzKGRmX2Nyb3NzX3NwKSA8LSBjKCJSZWxhdGlvbnNoaXBfU3RhdHVzIiwgIlBsYXRmb3JtIiwgIlBlcmNlbnRhZ2UiKQoKIyBCaeG7g3UgxJHhu5MKZ2dwbG90KGRmX2Nyb3NzX3NwLCBhZXMoeCA9IFBsYXRmb3JtLCB5ID0gUGVyY2VudGFnZSwgZmlsbCA9IFJlbGF0aW9uc2hpcF9TdGF0dXMpKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiKSArCiAgbGFicyh0aXRsZSA9ICJO4buBbiB04bqjbmcgbeG6oW5nIHjDoyBo4buZaSBwaOG7lSBiaeG6v24gdGhlbyB0w6xuaCB0cuG6oW5nIHF1YW4gaOG7hyIsCiAgICAgICB4ID0gIk7hu4FuIHThuqNuZyBt4bqhbmcgeMOjIGjhu5lpIiwKICAgICAgIHkgPSAiVOG7tyBs4buHICglKSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiU2V0MiIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKQpgYGAKCiMjIyMgKio0LjMuMyBOaOG6rW4geMOpdCoqCgrwn5S5IDEuIEluc3RhZ3JhbSB2w6AgVGlrVG9rIOKAkyBwaOG7lSBiaeG6v24gbmjhuqV0IOG7nyBuZ8aw4budaSDEkeG7mWMgdGjDom4KCi0gSW5zdGFncmFtOiBOZ8aw4budaSDEkeG7mWMgdGjDom4gZMO5bmcgbmhp4buBdSBuaOG6pXQgKDIwLjU3JSksIGfhuqduIGfhuqVwIMSRw7RpIHNvIHbhu5tpIG5nxrDhu51pIMSRYW5nIHnDqnUgKDEzLjMzJSkuCgotIFRpa1RvazogQ8WpbmcgxJHGsOG7o2MgxrBhIGNodeG7mW5nIGLhu59pIG5nxrDhu51pIMSR4buZYyB0aMOibiAoMTQuMzMlKSwgdsaw4bujdCB0cuG7mWkgc28gduG7m2kgbmfGsOG7nWkgxJFhbmcgdHJvbmcgbeG7kWkgcXVhbiBo4buHICg2LjM4JSkuCgotIOKGkiBDaG8gdGjhuqV5IG5nxrDhu51pIMSR4buZYyB0aMOibiBjw7MgeHUgaMaw4bubbmcgZMO5bmcgbuG7gW4gdOG6o25nIGdp4bqjaSB0csOtLCBjaGlhIHPhursgaMOsbmgg4bqjbmggbmhp4buBdSBoxqFuIOKAkyBjw7MgdGjhu4MgxJHhu4Mga+G6v3QgbuG7kWkgeMOjIGjhu5lpLCB0aOG7gyBoaeG7h24gYuG6o24gdGjDom4sIGhv4bq3YyBnaeG6o2kgdOG7j2EgY+G6o20geMO6Yy4KCvCflLkgMi4gRmFjZWJvb2sg4oCTIMSRxrDhu6NjIGTDuW5nIG5oaeG7gXUgaMahbiDhu58gbmfGsOG7nWkgxJFhbmcgecOqdQoKLSBOZ8aw4budaSDEkWFuZyB5w6p1IGPDsyB04bu3IGzhu4cgZMO5bmcgRmFjZWJvb2sgY2FvIG5o4bqldCAoMTAuMDclKSwgY8OzIHRo4buDIGRvIGjhu40gdGjDrWNoIGNoaWEgc+G6uyBraG/huqNuaCBraOG6r2MgduG7m2kgbmfGsOG7nWkgecOqdSBob+G6t2MgdGhlbyBkw7VpIGPDoWMgbeG7kWkgcXVhbiBo4buHLgoKLSBOZ8aw4budaSDEkeG7mWMgdGjDom4gZMO5bmcgw610IGjGoW4gKDcuMjMlKSwgY8OybiBuaMOzbSDigJxjb21wbGljYXRlZOKAnSBn4bqnbiBuaMawIGtow7RuZyBkw7luZyAoMC4xNCUpLgoK8J+UuSAzLiBO4buBbiB04bqjbmcgbmjhuq9uIHRpbiAoV2hhdHNBcHAsIFdlQ2hhdCwgTElORSk6CgotIFdoYXRzQXBwOiBUaOG7i25oIGjDoG5oIOG7nyBj4bqjIDIgbmjDs20gY2jDrW5oLCBuaMawbmcgY2FvIGjGoW4g4bufIG5nxrDhu51pIMSR4buZYyB0aMOibiAoNC4xMSUpIHbDoCBuZ8aw4budaSDEkWFuZyB5w6p1ICgzLjU1JSkuCgotIFdlQ2hhdDogQ2jhu6cgeeG6v3UgeHXhuqV0IGhp4buHbiDhu58gbmfGsOG7nWkgxJFhbmcgecOqdSAoMi4xMyUpLCBjaG8gdGjhuqV5IG3hu5l0IG5ow7NtIG5nxrDhu51pIGTDuW5nIGPDsyB0aOG7gyDEkeG6v24gdOG7qyBraHUgduG7sWMgbmjGsCBUcnVuZyBRdeG7kWMsIMSQw6BpIExvYW4uCgotIExJTkU6IENo4buJIHh14bqldCBoaeG7h24gxJHDoW5nIGvhu4Mg4bufIG5nxrDhu51pIMSR4buZYyB0aMOibiAoMS43MCUpIOKAkyBjw7MgdGjhu4MgZG8gxJHhurdjIMSRaeG7g20gdsO5bmcgdsSDbiBow7NhIGhv4bq3YyBkw6JuIHPhu5EgbeG6q3Uga2jhuqNvIHPDoXQuCgrwn5S5IDQuIE5ow7NtICJDb21wbGljYXRlZCIgY8OzIHThuqduIHN14bqldCBz4butIGThu6VuZyBt4bqhbmcgeMOjIGjhu5lpIGtow6EgdGjhuqVwCgotIFThuqV0IGPhuqMgY8OhYyBu4buBbiB04bqjbmcgxJHhu4F1IGPDsyB04bu3IGzhu4cgcuG6pXQgdGjhuqVwIOG7nyBuaMOzbSBuw6B5LgoKLSBDw7MgdGjhu4MgZG8gc+G7kSBsxrDhu6NuZyBuZ8aw4budaSB0aHXhu5ljIG5ow7NtIG7DoHkgdHJvbmcga2jhuqNvIHPDoXQgw610LCBob+G6t2MgaOG7jSBjw7MgeHUgaMaw4bubbmcgdGh1IG3DrG5oLCDDrXQgaG/huqF0IMSR4buZbmcgbeG6oW5nIHjDoyBo4buZaSBraGkgdMOsbmggY+G6o20ga2jDtG5nIHLDtSByw6BuZy4KCiMjIyMgKio0LjMuNCDEkMOhbmggZ2nDoSoqCgotIFTDrG5oIHRy4bqhbmcgcXVhbiBo4buHIGPDsyDhuqNuaCBoxrDhu59uZyByw7UgxJHhur9uIHZp4buHYyBjaOG7jW4gbuG7gW4gdOG6o25nIG3huqFuZyB4w6MgaOG7mWkuCi0gTmfGsOG7nWkgxJHhu5ljIHRow6JuIMawdSB0acOqbiBjw6FjIG7hu4FuIHThuqNuZyB0aGnDqm4gduG7gSBr4bq/dCBu4buRaSB4w6MgaOG7mWksIGdp4bqjaSB0csOtIChJbnN0YWdyYW0sIFRpa1RvaykuCi0gTmfGsOG7nWkgxJFhbmcgecOqdSBkw7luZyBt4bqhbmcgeMOjIGjhu5lpIOKAnOG7lW4gxJHhu4tuaOKAnSBoxqFuIG5oxrAgRmFjZWJvb2sgaG/hurdjIOG7qW5nIGThu6VuZyBuaOG6r24gdGluIChXaGF0c0FwcCwgV2VDaGF0KS4KLSBE4buvIGxp4buHdSBjxaluZyBwaOG6o24gw6FuaCDEkcaw4bujYyB54bq/dSB04buRIHbEg24gaMOzYSwgcXXhu5FjIGdpYSAoV2VDaGF0LCBMSU5FLCBLYWthb1RhbGssIFZLb250YWt0ZSkuCgojIyMjICoqNC4zLjUgS2nhu4NtIMSR4buLbmggY2hpIGLDrG5oIHBoxrDGoW5nKioKCmBgYHtyfQojIFThuqFvIGLhuqNuZyB04bqnbiBz4buRIGNow6lvCmNyb3NzX3NwIDwtIHRhYmxlKGRhdCRSZWxhdGlvbnNoaXBfU3RhdHVzLCBkYXQkTW9zdF9Vc2VkX1BsYXRmb3JtKQojIEtp4buDbSDEkeG7i25oIApjaGlzcS50ZXN0KGNyb3NzX3NwLCBzaW11bGF0ZS5wLnZhbHVlID0gVFJVRSwgQiA9IDEwMDAwKQpgYGAKCioqQ8OhYyBnaeG6oyB0aHV54bq/dCoqCgotIEdp4bqjIHRodXnhur90IGtow7RuZyAoSOKCgCk6IFTDrG5oIHRy4bqhbmcgcXVhbiBo4buHIHbDoCBu4buBbiB04bqjbmcgbeG6oW5nIHjDoyBo4buZaSDEkcaw4bujYyBz4butIGThu6VuZyBuaGnhu4F1IG5o4bqldCBsw6AgxJHhu5ljIGzhuq1wIHbhu5tpIG5oYXUuCi0gR2nhuqMgdGh1eeG6v3QgxJHhu5FpIChI4oKBKTogVMOsbmggdHLhuqFuZyBxdWFuIGjhu4cgdsOgIG7hu4FuIHThuqNuZyBt4bqhbmcgeMOjIGjhu5lpIMSRxrDhu6NjIHPhu60gZOG7pW5nIG5oaeG7gXUgbmjhuqV0IGPDsyBt4buRaSBxdWFuIGjhu4cgcGjhu6UgdGh14buZYy4KCioqUGjGsMahbmcgcGjDoXAqKgoKLSBT4butIGThu6VuZyBraeG7g20gxJHhu4tuaCBDaGkgYsOsbmggcGjGsMahbmcgduG7m2kgbcO0IHBo4buPbmcgcC12YWx1ZSBNb250ZSBDYXJsbyAoMTAwMDAgbOG6p24gbOG6t3ApIMSR4buDIHjhu60gbMO9IHRyxrDhu51uZyBo4bujcCB04bqnbiBzdeG6pXQgdGjhuqVwIHRyb25nIGLhuqNuZyB04bqnbiBz4buRLgoKKipL4bq/dCBxdeG6oyoqCgotIEdpw6EgdHLhu4sgdGjhu5FuZyBrw6ogY2hpIGLDrG5oIHBoxrDGoW5nOiBYLXNxdWFyZWQgPSAxMzIuOTYKLSBC4bqtYyB04buxIGRvIGtow7RuZyB4w6FjIMSR4buLbmggZG8gZMO5bmcgbcO0IHBo4buPbmcgKGRmID0gTkEpLgotIEdpw6EgdHLhu4sgcC12YWx1ZSBtw7QgcGjhu49uZzogcC12YWx1ZSA9IDkuOTk5ZS0wNSAocuG6pXQgbmjhu48sIGfhuqduIGLhurFuZyAwKS4KCioqTmjhuq1uIHjDqXQqKgoKLSBW4bubaSBt4bupYyDDvSBuZ2jEqWEgzrEgPSAwLjA1LCBwLXZhbHVlIOKJiCAwLjAwMDEgPCAwLjA1IG7Dqm4gYsOhYyBi4buPIGdp4bqjIHRodXnhur90IGtow7RuZyBI4oKALgotIEvhur90IGx14bqtbjoKICAtIEPDsyBt4buRaSBxdWFuIGjhu4cgcGjhu6UgdGh14buZYyBnaeG7r2EgdMOsbmggdHLhuqFuZyBxdWFuIGjhu4cgdsOgIG7hu4FuIHThuqNuZyBt4bqhbmcgeMOjIGjhu5lpIMSRxrDhu6NjIHPhu60gZOG7pW5nIG5oaeG7gXUgbmjhuqV0LgotIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IGzhu7FhIGNo4buNbiBu4buBbiB04bqjbmcgbeG6oW5nIHjDoyBo4buZaSBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgxJHDoW5nIGvhu4MgdMO5eSB0aGVvIHTDrG5oIHRy4bqhbmcgcXVhbiBo4buHIGPhu6dhIG5nxrDhu51pIGTDuW5nLgoKIyMgKipQSOG6pk4gNTogUkVMQVRJVkUgUklTSyoqCgpgYGB7cn0KaW5zdGFsbC5wYWNrYWdlcygiZXBpdG9vbHMiLCByZXBvcyA9ICJodHRwczovL2Nsb3VkLnItcHJvamVjdC5vcmciKQpsaWJyYXJ5KGVwaXRvb2xzKQpgYGAKCgojIyMgKio1LjEgR2VuZGVyIHbDoCBBZmZlY3QgYWNhZGFtaWMgcGVyZm9ybWVuY2UqKgoKLSBTbyBzw6FuaCBuZ3V5IGPGoSBi4buLIOG6o25oIGjGsOG7n25nIGjhu41jIHThuq1wIGdp4buvYSBuYW0gdsOgIG7hu68g4oaSIFTDrW5oIFJSIChNYWxlIHZzIEZlbWFsZSkKCiMjIyMgKio1LjEuMSBC4bqjbmcgIGThu68gbGnhu4d1IGNow6lvKioKYGBge3J9CiMgVOG6oW8gYuG6o25nIDJ4Mgp0YWIxIDwtIHRhYmxlKGRhdCRHZW5kZXIsIGRhdCRBZmZlY3RzX0FjYWRlbWljX1BlcmZvcm1hbmNlKQpwcmludCh0YWIxKQpgYGAKCiMjIyMgKio1LjEuMiBUw61uaCBSUioqCgpgYGB7cn0Kcmlza3JhdGlvKHRhYjEpCmBgYAoKKipD4bq3cCBiaeG6v24qKgoKLSBQaMOibiBuaMOzbSAoRXhwb3N1cmUpOiBHZW5kZXIgKHNvIHPDoW5oIE1hbGUgduG7m2kgRmVtYWxlKQotIEvhur90IHF14bqjIChPdXRjb21lKTogQWZmZWN0c19BY2FkZW1pY19QZXJmb3JtYW5jZSAoWWVzID0gYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCkKCioqRGnhu4VuIGdp4bqjaSoqCgotIFThu7cgc+G7kSBuZ3V5IGPGoSAoUlIpID0gMC45NiDihpIgTmFtIGdp4bubaSBjw7Mgbmd1eSBjxqEgYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCB0aOG6pXAgaMahbiBt4buZdCBjaMO6dCBzbyB24bubaSBu4buvIChjaOG7iSBraG/huqNuZyA5NiUgbmd1eSBjxqEgc28gduG7m2kgbuG7rykuCi0gS2hv4bqjbmcgdGluIGPhuq15IDk1JSA9IFswLjg2LCAxLjA4XSDihpIgQmFvIGfhu5NtIDEg4oaSIGtow7RuZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLgotIHAtdmFsdWUg4omIIDAuNTEgPiAwLjA1IOKGkiBLaMO0bmcgY8OzIGLhurFuZyBjaOG7qW5nIMSR4buDIGvhur90IGx14bqtbiBz4buxIGtow6FjIGJp4buHdCBnaeG7r2EgbmFtIHbDoCBu4buvIHbhu4Eg4bqjbmggaMaw4bufbmcgaOG7jWMgdOG6rXAuCgoqKkvhur90IGx14bqtbioqCgotIEThu7FhIHRyw6puIGvhur90IHF14bqjIHBow6JuIHTDrWNoLCBraMO0bmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogduG7gSBuZ3V5IGPGoSBi4buLIOG6o25oIGjGsOG7n25nIGjhu41jIHThuq1wIGdp4buvYSBuYW0gdsOgIG7hu68uClThu7cgbOG7hyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCBnaeG7r2EgaGFpIGdp4bubaSBsw6AgZ+G6p24gdMawxqFuZyDEkcawxqFuZywgduG7m2kgbmFtIGdp4bubaSB0aOG6rW0gY2jDrSBjw7Mgbmd1eSBjxqEgdGjhuqVwIGjGoW4gbeG7mXQgY2jDunQsIG5oxrBuZyBz4buxIGtow6FjIGJp4buHdCBsw6Aga2jDtG5nIMSRw6FuZyBr4buDIHbhu4EgbeG6t3QgdGjhu5FuZyBrw6ouCgojIyMgKio1LjIgTW9zdCB1c2VkIHBsYXRmb3JtIHbDoCBBZmZlY3QgYWNhZGFtaWMgcGVyZm9ybWVuY2UqKgoKLSBUw61uaCBSZWxhdGl2ZSBSaXNrIChSUikgY+G7p2Egdmnhu4djIGLhu4sg4bqjbmggaMaw4bufbmcgaOG7jWMgdOG6rXAga2hpIFRpa1RvayBsw6AgbuG7gW4gdOG6o25nIGNow61uaCwgc28gduG7m2kgbmfGsOG7nWkga2jDtG5nIGTDuW5nIFRpa1RvayBsw6BtIG7hu4FuIHThuqNuZyBjaMOtbmguCgojIyMjICoqNS4yLjEgQuG6o25nIGThu68gbGnhu4d1IGNow6lvKioKYGBge3J9CiMgQ8OhYyBu4buBbiB04bqjbmcgY8OzIOG6o25oIGjGsOG7n25nIMSR4bq/biBo4buNYyB04bqtcCBj4bunYSBuZ8aw4budaSBkw7luZyBoYXkga2jDtG5nPwp0YWJfdGlrdG9rIDwtIHRhYmxlKGRhdCRNb3N0X1VzZWRfUGxhdGZvcm0sIGRhdCRBZmZlY3RzX0FjYWRlbWljX1BlcmZvcm1hbmNlKQphZGRtYXJnaW5zKHRhYl90aWt0b2spCmBgYAoKIyMjIyAqKjUuMi4yIFThuqFvIG1hIHRy4bqtbiB2w6AgdMOtbmggUlIqKgpgYGB7cn0KIyBU4bqhbyBtYSB0cuG6rW4gMsOXMgptYXRyaXhfdGlrdG9rIDwtIG1hdHJpeChjKDE0NCwgMzA5LCAxMCwgMjQyKSwgbnJvdyA9IDIsIGJ5cm93ID0gRkFMU0UpCmNvbG5hbWVzKG1hdHJpeF90aWt0b2spIDwtIGMoIlllcyIsICJObyIpCnJvd25hbWVzKG1hdHJpeF90aWt0b2spIDwtIGMoIlRpa1RvayIsICJPdGhlcnMiKQojIFTDrW5oIFJSCnJpc2tyYXRpbyhtYXRyaXhfdGlrdG9rKQpgYGAKCioqS+G6v3QgcXXhuqMgUmVsYXRpdmUgUmlzayAoUlIpKioKCi0gUlIgY+G7p2EgbmjDs20gIk90aGVycyIgc28gduG7m2kgVGlrVG9rID0gNi43NgotIDk1JSBDSTogWzMuNjksIDEyLjQxXQotIHAtdmFsdWUgKG1pZC1wIGV4YWN0KSA9IDcuNDEgw5cgMTDigbvCssK5IOKGkiBy4bqldCBuaOG7jwogIC0gTMawdSDDvTogUlIgbHXDtG4gxJHGsOG7o2MgdMOtbmggdMawxqFuZyDEkeG7kWkgduG7m2kgbmjDs20gdGhhbSBjaGnhur91LCDhu58gxJHDonkgVGlrVG9rIGzDoCBuaMOzbSBn4buRYyBuw6puIFJSID0gMS4wMCDhu58gZMOybmcgVGlrVG9rLCB2w6AgZ2nDoSB0cuG7iyBSUiDEkcaw4bujYyB0w61uaCBjaG8gbmjDs20gIk90aGVycyIuCiAgCioqRGnhu4NuIGdp4bqjaSBr4bq/dCBxdeG6oyoqCgotIE5nxrDhu51pIGtow7RuZyBz4butIGThu6VuZyBUaWtUb2sgKHThu6ljIGzDoCBkw7luZyBjw6FjIG7hu4FuIHThuqNuZyBraMOhYykgY8OzIG5ndXkgY8ahIEtIw5RORyBi4buLIOG6o25oIGjGsOG7n25nIGjhu41jIHThuq1wIGNhbyBoxqFuIDYuNzYgbOG6p24gc28gduG7m2kgbmfGsOG7nWkgZMO5bmcgVGlrVG9rLgotIEhheSBuZ8aw4bujYyBs4bqhaSwgbmfGsOG7nWkgZMO5bmcgVGlrVG9rIGPDsyBuZ3V5IGPGoSBi4buLIOG6o25oIGjGsOG7n25nIGjhu41jIHThuq1wIGNhbyBoxqFuIMSRw6FuZyBr4buDIHNvIHbhu5tpIG5o4buvbmcgbmfGsOG7nWkgZMO5bmcgbuG7gW4gdOG6o25nIGtow6FjLgotIFbDrCBraG/huqNuZyB0aW4gY+G6rXkga2jDtG5nIGNo4bupYSAxIHbDoCBwLXZhbHVlIHLhuqV0IG5o4buPLCBuw6puIHPhu7Ega2jDoWMgYmnhu4d0IGzDoCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLgoKKipL4bq/dCBsdeG6rW4qKgoKLSBL4bq/dCBxdeG6oyBjaG8gdGjhuqV5IG5nxrDhu51pIGTDuW5nIFRpa1RvayBjw7Mgbmd1eSBjxqEgYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCBjYW8gaMahbiByw7UgcuG7h3Qgc28gduG7m2kgbmfGsOG7nWkga2jDtG5nIGTDuW5nIFRpa1Rvay4KVOG7tyBz4buRIG5ndXkgY8ahIChSUikgY+G7p2EgbmjDs20ga2jDtG5nIGTDuW5nIFRpa1RvayBzbyB24bubaSBUaWtUb2sgbMOgIDYuNzYsIHbhu5tpIGtob+G6o25nIHRpbiBj4bqteSA5NSU6IFszLjY5IOKAkyAxMi40MV0sIHAtdmFsdWUgPCAwLjAwMS4KTmjGsCB24bqteSwgc+G7sSBraMOhYyBiaeG7h3QgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiwgdsOgIGPDsyB0aOG7gyBr4bq/dCBsdeG6rW4gcuG6sW5nIFRpa1RvayBsw6AgbeG7mXQgeeG6v3UgdOG7kSBy4bunaSBybyBsacOqbiBxdWFuIMSR4bq/biDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCB0cm9uZyBi4buZIGThu68gbGnhu4d1IG7DoHkuCgojIyMgKio1LjMgQWNhZGVtaWMgTGV2ZWwgdsOgIEFmZmVjdHMgYWNhZGVtaWMgcGVyZm9ybWFuY2UqKgoKLSBI4buNYyBzaW5oIHBo4buVIHRow7RuZyBjw7MgYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCBuaGnhu4F1IGjGoW4ga2jDtG5nPwoKIyMjIyAqKjUuMy4xIELhuqNuZyBk4buvIGxp4buHdSBjaMOpbyoqCmBgYHtyfQojIMSQ4buRaSB0xrDhu6NuZyBsw6Agc2luaCB2acOqbiB04buRdCBuZ2hp4buHcCBkw7luZyBt4bqhbmcgeMOjIGjhu5lpIGPDsyBi4buLIOG6o25oIGjGsOG7n25nIMSR4bq/biBo4buNYyB04bqtcCBoYXkga2jDtG5nPwp0YWJfZ3JhZHVhdGUgPC0gdGFibGUoZGF0JEFjYWRlbWljX0xldmVsLCBkYXQkQWZmZWN0c19BY2FkZW1pY19QZXJmb3JtYW5jZSkKYWRkbWFyZ2lucyh0YWJfZ3JhZHVhdGUpCmBgYAoKIyMjIyAqKjUuMy4xIFThuqFvIG1hIHRy4bqtbiB2w6AgdMOtbmggUlIqKgpgYGB7cn0KIyBU4bqhbyBtYSB0cuG6rW4gMsOXMgptYXRyaXhfZ3JhZHVhdGUgPC0gbWF0cml4KGMoMTk5LCAyNTQsIDEyNiwgMTI2KSwgbnJvdyA9IDIsIGJ5cm93ID0gRkFMU0UpCmNvbG5hbWVzKG1hdHJpeF9ncmFkdWF0ZSkgPC0gYygiWWVzIiwgIk5vIikKcm93bmFtZXMobWF0cml4X2dyYWR1YXRlKSA8LSBjKCJHcmFkdWF0ZSIsICJPdGhlcnMiKQojIFTDrW5oIFJSCnJpc2tyYXRpbyhtYXRyaXhfZ3JhZHVhdGUpCmBgYAoKKipL4bq/dCBxdeG6oyBSZWxhdGl2ZSBSaXNrIChSUikqKgoKLSBSUiBj4bunYSBuaMOzbSAiT3RoZXJzIiBzbyB24bubaSBHcmFkdWF0ZSA9IDAuODYKLSA5NSUgQ0k6IFswLjcwLCAxLjA0XQotIHAtdmFsdWUgKG1pZC1wIGV4YWN0KSA9IDAuMTIyCiAgLSBMxrB1IMO9OiBSUiBsdcO0biDEkcaw4bujYyB0w61uaCB0xrDGoW5nIMSR4buRaSB24bubaSBuaMOzbSB0aGFtIGNoaeG6v3UsIOG7nyDEkcOieSBHcmFkdWF0ZSBsw6AgbmjDs20gZ+G7kWMgbsOqbiBSUiA9IDEuMDAg4bufIGTDsm5nIEdyYWR1YXRlLCB2w6AgZ2nDoSB0cuG7iyBSUiDEkcaw4bujYyB0w61uaCBjaG8gbmjDs20gIk90aGVycyIuCiAgCioqRGnhu4VuIGdp4bqjaSBr4bq/dCBxdeG6oyoqCgotIE5ow7NtICJPdGhlcnMiIChn4buTbSBo4buNYyBzaW5oIHBo4buVIHRow7RuZyB2w6Agc2luaCB2acOqbiDEkeG6oWkgaOG7jWMpIGPDsyBuZ3V5IGPGoSBi4buLIOG6o25oIGjGsOG7n25nIGjhu41jIHThuq1wIGRvIG3huqFuZyB4w6MgaOG7mWkgdGjhuqVwIGjGoW4ga2hv4bqjbmcgMTQlIHNvIHbhu5tpIG5ow7NtIEdyYWR1YXRlLgotIFR1eSBuaGnDqm4sIHbDrCBraG/huqNuZyB0aW4gY+G6rXkgY2jhu6lhIGdpw6EgdHLhu4sgMSwgdsOgIHAtdmFsdWUgPiAwLjA1LCBuw6puIHPhu7Ega2jDoWMgYmnhu4d0IGtow7RuZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLgotIE7Ds2kgY8OhY2gga2jDoWMsIGtow7RuZyBjw7MgxJHhu6cgYuG6sW5nIGNo4bupbmcgxJHhu4Mga2jhurNuZyDEkeG7i25oIHNpbmggdmnDqm4gdOG7kXQgbmdoaeG7h3AgYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCBuaGnhu4F1IGjGoW4gc28gduG7m2kgY8OhYyBuaMOzbSBo4buNYyB24bqlbiBjw7JuIGzhuqFpLgoKKipL4bq/dCBsdeG6rW4qKgoKLSBU4bu3IHPhu5Egbmd1eSBjxqEgKFJSKSBj4bunYSBuaMOzbSAiT3RoZXJzIiBzbyB24bubaSBHcmFkdWF0ZSBsw6AgMC44NiwgduG7m2kga2hv4bqjbmcgdGluIGPhuq15IDk1JTogWzAuNzAg4oCTIDEuMDRdLCBwLXZhbHVlID0gMC4xMjIuCi0gU+G7sSBraMOhYyBiaeG7h3Qga2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6osIGRvIMSRw7Mga2jDtG5nIHRo4buDIGvhur90IGx14bqtbiBy4bqxbmcgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIGzDoCB54bq/dSB04buRIOG6o25oIGjGsOG7n25nIHLDtSBy4buHdCDEkeG6v24gdmnhu4djIGLhu4sgdMOhYyDEkeG7mW5nIGjhu41jIHThuq1wIHThu6sgbeG6oW5nIHjDoyBo4buZaSB0cm9uZyBi4buZIGThu68gbGnhu4d1IG7DoHkuCgojIyAqKlBI4bqmTiA2OiBPRERTIFJBVElPKioKCiMjIyAqKjYuMSBHZW5kZXIgdsOgIEFmZmVjdCBhY2FkYW1pYyBwZXJmb3JtZW5jZSoqCgpgYGB7cn0KIyBC4bqjbmcgY2jDqW8gZ2nhu69hIEdlbmRlciB2w6AgQWZmZWN0cyBBY2FkZW1pYyBQZXJmb3JtYW5jZQp0YWIxIDwtIHRhYmxlKGRhdCRHZW5kZXIsIGRhdCRBZmZlY3RzX0FjYWRlbWljX1BlcmZvcm1hbmNlKQojIFTDrW5oIE9kZHMgUmF0aW8Kb2Rkc3JhdGlvKHRhYjEpCmBgYAoKKipL4bq/dCBxdeG6oyBPZGRzIFJhdGlvIChPUikqKgoKLSBPUiBj4bunYSBuaMOzbSAiTWFsZSIgc28gduG7m2kgIkZlbWFsZSIgPSAwLjkwCi0gOTUlIENJIChraG/huqNuZyB0aW4gY+G6rXkpOiBbMC42NiwgMS4yM10KLSBwLXZhbHVlIChtaWQtcCBleGFjdCkgPSAwLjUxMwogIC0gTMawdSDDvTogIkZlbWFsZSIgbMOgIG5ow7NtIHRoYW0gY2hp4bq/dSwgbsOqbiBPUiBj4bunYSBuaMOzbSBGZW1hbGUgPSAxLjAwICht4bq3YyDEkeG7i25oKSwgdsOgIGvhur90IHF14bqjIE9SIHRo4buDIGhp4buHbiBt4bupYyBzbyBzw6FuaCBj4bunYSBuaMOzbSAiTWFsZSIgduG7m2kgIkZlbWFsZSIuCiAgCioqRGnhu4VuIGdp4bqjaSBr4bq/dCBxdeG6oyoqCgotIE9kZHMgYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCDhu58gbmFtIGdp4bubaSB0aOG6pXAgaMahbiBraG/huqNuZyAxMCUgc28gduG7m2kgbuG7ryBnaeG7m2kgKE9SID0gMC45MCkuCi0gVHV5IG5oacOqbiwgdsOsIGtob+G6o25nIHRpbiBj4bqteSBjaOG7qWEgZ2nDoSB0cuG7iyAxIHbDoCBwLXZhbHVlID4gMC4wNSwgbsOqbiBraMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4KLSBOw7NpIGPDoWNoIGtow6FjLCBraMO0bmcgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIMSR4buDIGto4bqzbmcgxJHhu4tuaCBnaeG7m2kgdMOtbmggY8OzIOG6o25oIGjGsOG7n25nIMSR4bq/biBraOG6oyBuxINuZyBi4buLIOG6o25oIGjGsOG7n25nIGjhu41jIHThuq1wLgogIAoqKkvhur90IGx14bqtbioqCgotIFThu7cgc+G7kSBvZGRzIChPUikgY+G7p2EgbmFtIGdp4bubaSBzbyB24bubaSBu4buvIGdp4bubaSBsw6AgMC45MCwgduG7m2kga2hv4bqjbmcgdGluIGPhuq15IDk1JTogWzAuNjYg4oCTIDEuMjNdLCBwLXZhbHVlID0gMC41MTMuCi0gRG8ga2hv4bqjbmcgdGluIGPhuq15IGNo4bupYSAxIHbDoCBwLXZhbHVlID4gMC4wNSwga2jDtG5nIGPDsyBz4buxIGtow6FjIGJp4buHdCDEkcOhbmcga+G7gyB24buBIG9kZHMgYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCBnaeG7r2EgbmFtIHbDoCBu4buvIHRyb25nIGLhu5kgZOG7ryBsaeG7h3UgbsOgeS4KLSBHaeG7m2kgdMOtbmgga2jDtG5nIHBo4bqjaSBsw6AgeeG6v3UgdOG7kSBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIOG6o25oIGjGsOG7n25nIMSR4bq/biBraOG6oyBuxINuZyBi4buLIHTDoWMgxJHhu5luZyBi4bufaSBt4bqhbmcgeMOjIGjhu5lpIMSR4buRaSB24bubaSBo4buNYyB04bqtcC4KCiMjIyAqKjYuMiBNb3N0IHVzZWQgcGxhdGZvcm0gdsOgIEFmZmVjdCBhY2FkYW1pYyBwZXJmb3JtZW5jZSoqCgpgYGB7cn0KIyBDw6FjIG7hu4FuIHThuqNuZyBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIGjhu41jIHThuq1wIGPhu6dhIG5nxrDhu51pIGTDuW5nIGhheSBraMO0bmc/CnRhYl90aWt0b2sgPC0gdGFibGUoZGF0JE1vc3RfVXNlZF9QbGF0Zm9ybSwgZGF0JEFmZmVjdHNfQWNhZGVtaWNfUGVyZm9ybWFuY2UpCiMgVOG6oW8gbWEgdHLhuq1uIDLDlzIKbWF0cml4X3Rpa3RvayA8LSBtYXRyaXgoYygxNDQsIDMwOSwgMTAsIDI0MiksIG5yb3cgPSAyLCBieXJvdyA9IEZBTFNFKQpjb2xuYW1lcyhtYXRyaXhfdGlrdG9rKSA8LSBjKCJZZXMiLCAiTm8iKQpyb3duYW1lcyhtYXRyaXhfdGlrdG9rKSA8LSBjKCJUaWtUb2siLCAiT3RoZXJzIikKIyBUw61uaCBPZGRzIFJhdGlvCm9kZHNyYXRpbyhtYXRyaXhfdGlrdG9rKQpgYGAKCioqS+G6v3QgcXXhuqMgT2RkcyBSYXRpbyAoT1IpKioKCi0gT1IgY+G7p2EgbmjDs20gIk90aGVycyIgc28gduG7m2kgVGlrVG9rID0gMTEuMDkKLSA5NSUga2hv4bqjbmcgdGluIGPhuq15IChDSSk6IFs2LjAwLCAyMy4wM10KLSBwLXZhbHVlIChtaWQtcCBleGFjdCkgPSA3LjQxIMOXIDEw4oG7wrLCuSDihpIgUuG6pXQgbmjhu48KLSBHaGkgY2jDujoKICAtIFRpa1RvayBsw6AgbmjDs20gdGhhbSBjaGnhur91LCBuw6puIE9SID0gMSB04bqhaSBkw7JuZyBUaWtUb2sgKG3hurdjIMSR4buLbmgpLgogIC0gR2nDoSB0cuG7iyBPUiA+IDEg4bufIGTDsm5nICJPdGhlcnMiIHRo4buDIGhp4buHbiBt4bupYyDEkeG7mSBzbyBzw6FuaCBvZGRzIGLhu4sg4bqjbmggaMaw4bufbmcgaOG7jWMgdOG6rXAgZ2nhu69hIG5nxrDhu51pIGtow7RuZyBkw7luZyBUaWtUb2sgdsOgIG5nxrDhu51pIGTDuW5nIFRpa1Rvay4KICAKKipEaeG7hW4gZ2nhuqNpIGvhur90IHF14bqjKioKCi0gTmfGsOG7nWkgZMO5bmcgY8OhYyBu4buBbiB04bqjbmcga2jDoWMgKGtow7RuZyBwaOG6o2kgVGlrVG9rKSBjw7Mgb2RkcyBraMO0bmcgYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCBjYW8gaMahbiAxMS4wOSBs4bqnbiBzbyB24bubaSBuZ8aw4budaSBkw7luZyBUaWtUb2suCi0gxJBp4buBdSBuw6B5IHTGsMahbmcgxJHGsMahbmcgduG7m2kgdmnhu4djIG5nxrDhu51pIGTDuW5nIFRpa1RvayBjw7Mgb2RkcyBi4buLIOG6o25oIGjGsOG7n25nIGjhu41jIHThuq1wIGNhbyBoxqFuIHLhuqV0IMSRw6FuZyBr4buDLgotIFbDrCBraG/huqNuZyB0aW4gY+G6rXkga2jDtG5nIGNo4bupYSBnacOhIHRy4buLIDEgdsOgIHAtdmFsdWUgPCAwLjAwMSwgbsOqbiBz4buxIGtow6FjIGJp4buHdCBsw6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4KCioqS+G6v3QgbHXhuq1uKioKCi0gVOG7tyBz4buRIG9kZHMgKE9SKSBj4bunYSBuaMOzbSBraMO0bmcgZMO5bmcgVGlrVG9rIGzDoCAxMS4wOSwgQ0k6IFs2LjAwIOKAkyAyMy4wM10sIHAtdmFsdWUgPCAwLjAwMS4KLSDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBy4bqxbmcgbmfGsOG7nWkgZMO5bmcgVGlrVG9rIGPDsyBuZ3V5IGPGoSBi4buLIOG6o25oIGjGsOG7n25nIGjhu41jIHThuq1wIGNhbyBoxqFuIMSRw6FuZyBr4buDIHNvIHbhu5tpIG5nxrDhu51pIHPhu60gZOG7pW5nIG7hu4FuIHThuqNuZyBt4bqhbmcgeMOjIGjhu5lpIGtow6FjLgotIFRpa1RvayBjw7MgdGjhu4MgxJHGsOG7o2MgY29pIGzDoCBt4buZdCB54bq/dSB04buRIHLhu6dpIHJvIHRp4buBbSBuxINuZyDhuqNuaCBoxrDhu59uZyB0acOqdSBj4buxYyDEkeG6v24gaOG7jWMgdOG6rXAgdHJvbmcgYuG7mSBk4buvIGxp4buHdSBuw6B5LgoKIyMjICoqNi4zIEFjYWRlbWljIExldmVsIHbDoCBBZmZlY3RzIGFjYWRlbWljIHBlcmZvcm1hbmNlKioKCmBgYHtyfQojIMSQ4buRaSB0xrDhu6NuZyBsw6Agc2luaCB2acOqbiB04buRdCBuZ2hp4buHcCBkw7luZyBt4bqhbmcgeMOjIGjhu5lpIGPDsyBi4buLIOG6o25oIGjGsOG7n25nIMSR4bq/biBo4buNYyB04bqtcCBoYXkga2jDtG5nPwp0YWJfZ3JhZHVhdGUgPC0gdGFibGUoZGF0JEFjYWRlbWljX0xldmVsLCBkYXQkQWZmZWN0c19BY2FkZW1pY19QZXJmb3JtYW5jZSkKIyBU4bqhbyBtYSB0cuG6rW4gMsOXMgptYXRyaXhfZ3JhZHVhdGUgPC0gbWF0cml4KGMoMTk5LCAyNTQsIDEyNiwgMTI2KSwgbnJvdyA9IDIsIGJ5cm93ID0gRkFMU0UpCmNvbG5hbWVzKG1hdHJpeF9ncmFkdWF0ZSkgPC0gYygiWWVzIiwgIk5vIikKcm93bmFtZXMobWF0cml4X2dyYWR1YXRlKSA8LSBjKCJHcmFkdWF0ZSIsICJPdGhlcnMiKQojIFTDrW5oIFJSCm9kZHNyYXRpbyhtYXRyaXhfZ3JhZHVhdGUpCmBgYAoKKipL4bq/dCBxdeG6oyBPZGRzIFJhdGlvIChPUikqKgoKLSBPUiBj4bunYSBuaMOzbSAiT3RoZXJzIiBzbyB24bubaSBuaMOzbSBHcmFkdWF0ZSA9IDAuNzgKLSA5NSUgQ0k6IFswLjU4LCAxLjA3XQotIFAtdmFsdWUgKG1pZC1wIGV4YWN0KSA9IDAuMTM0CgoqKkRp4buFbiBnaeG6o2kga+G6v3QgcXXhuqMqKgoKLSBPZGRzIGLhu4sg4bqjbmggaMaw4bufbmcgaOG7jWMgdOG6rXAgY+G7p2EgbmjDs20gIk90aGVycyIgKEhpZ2ggc2Nob29sICsgVW5kZXJncmFkdWF0ZSkgdGjhuqVwIGjGoW4gMC43OCBs4bqnbiBzbyB24bubaSBuaMOzbSBHcmFkdWF0ZS4KLSBLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGPhu6dhIE9SIGzDoCBbMC41OCDigJMgMS4wN10sIGJhbyBn4buTbSBnacOhIHRy4buLIDEsIHThu6ljIGzDoCBraMO0bmcgdGjhu4MgbG/huqFpIHRy4burIGto4bqjIG7Eg25nIGtow7RuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgduG7gSBvZGRzIGdp4buvYSAyIG5ow7NtLgotIFAtdmFsdWUgPiAwLjA1IOKGkiBraMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiwgdGEga2jDtG5nIHRo4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBy4bqxbmcgaGFpIG5ow7NtIGPDsyBvZGRzIGLhurFuZyBuaGF1LgoKKipL4bq/dCBsdeG6rW4qKgoKLSBLaMO0bmcgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIHRo4buRbmcga8OqIMSR4buDIGto4bqzbmcgxJHhu4tuaCBy4bqxbmcgaOG7jWMgc2luaC9zaW5oIHZpw6puIG5ow7NtICJPdGhlcnMiIGPDsyBvZGRzIGLhu4sg4bqjbmggaMaw4bufbmcgaOG7jWMgdOG6rXAga2jDoWMgc28gduG7m2kgbmjDs20gIkdyYWR1YXRlIi4KLSBEw7kgT1IgPCAxIGNobyB0aOG6pXkgeHUgaMaw4bubbmcgbmjDs20gT3RoZXJzIMOtdCBi4buLIOG6o25oIGjGsOG7n25nIGjhu41jIHThuq1wIGjGoW4sIG5oxrBuZyB2w6wga2hv4bqjbmcgdGluIGPhuq15IGJhbyBn4buTbSAxIHbDoCBwLXZhbHVlID4gMC4wNSDihpIga+G6v3QgbHXhuq1uIG7DoHkgY2jGsGEgY2jhuq9jIGNo4bqvbiB24buBIG3hurd0IHRo4buRbmcga8OqLgoKCg==