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 ("C:/Users/ADMIN/Desktop/PTDL DINH TINH/Students Social Media Addiction.csv", header = T)
  • Cấu trúc bộ dữ liệu
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

  • Nhưng với yêu cầu chỉ sử dụng các biến định tính để phân tính nên chúng ta chỉ quan tâm đến các biến như sau :

    • Student_ID (int): Dù là số nhưng dùng để định danh – biến định danh (identifier)
    • Gender (chr): Giới tính – định tính danh mục (categorical)
    • Academic_Level (chr): Trình độ học vấn – định tính danh mục
    • Country (chr): Quốc gia – định tính danh mục
    • Most_Used_Platform (chr): Mạng xã hội chính – định tính danh mục
    • Affects_Academic_Performance (chr): Có ảnh hưởng đến học tập hay không – định tính nhị phân (Yes/No)
    • Relationship_Status (chr): Tình trạng quan hệ – định tính danh mục

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://cloud.r-project.org")
## Installing package into 'C:/Users/ADMIN/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## 
##   There is a binary version available but the source version is later:
##         binary source needs_compilation
## ggplot2  3.5.1  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")
## Installing package into 'C:/Users/ADMIN/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'dplyr' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'dplyr'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problem copying
## C:\Users\ADMIN\AppData\Local\R\win-library\4.3\00LOCK\dplyr\libs\x64\dplyr.dll
## to C:\Users\ADMIN\AppData\Local\R\win-library\4.3\dplyr\libs\x64\dplyr.dll:
## Permission denied
## Warning: restored 'dplyr'
## 
## The downloaded binary packages are in
##  C:\Users\ADMIN\AppData\Local\Temp\RtmpqQTDwM\downloaded_packages
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
## 
## 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.4 Most used platform - nền tảng mạng xã hội

2.4.1 Thống kê mô tả tần số, tần suất, trực quan hoá

2.4.1.1 Bảng tần số, tần suất
tab_platform <- table(dat$Most_Used_Platform)
tab_platform
## 
##  Facebook Instagram KakaoTalk      LINE  LinkedIn  Snapchat    TikTok   Twitter 
##       123       249        12        12        21        13       154        30 
## VKontakte    WeChat  WhatsApp   YouTube 
##        12        15        54        10
table(dat$Most_Used_Platform)/sum(nrow(dat))
## 
##   Facebook  Instagram  KakaoTalk       LINE   LinkedIn   Snapchat     TikTok 
## 0.17446809 0.35319149 0.01702128 0.01702128 0.02978723 0.01843972 0.21843972 
##    Twitter  VKontakte     WeChat   WhatsApp    YouTube 
## 0.04255319 0.01702128 0.02127660 0.07659574 0.01418440

2.4.1.2 Trực quan hoá

# Chuyển sang data frame
platform_freq <- as.data.frame(tab_platform)
colnames(platform_freq) <- c("Platform", "Frequency")

# Vẽ biểu đồ 
ggplot(platform_freq, aes(x = reorder(Platform, -Frequency), y = Frequency, fill = Platform)) +
  geom_bar(stat = "identity", width = 0.7) +
  labs(title = "Nền tảng mạng xã hội được sử dụng nhiều nhất",
       x = "Nền tảng",
       y = "Số lượng người dùng") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Giải thích code

🔹 ggplot(…): hàm khởi tạo biểu đồ từ gói ggplot2.

🔹 platform_freq: là data frame chứa hai cột: Platform (tên nền tảng) và Frequency (tần số người dùng).

🔹 aes(…): khai báo “thẩm mỹ” – nghĩa là bạn chỉ định các biến nào dùng cho trục và màu:

  • x = reorder(Platform, -Frequency): trục X là tên các nền tảng, được sắp xếp giảm dần theo tần số (giúp biểu đồ dễ đọc hơn).
  • y = Frequency: trục Y là số lượng người chọn nền tảng đó.
  • fill = Platform: tô màu từng cột theo nền tảng tương ứng.

🔹 geom_bar(): hàm vẽ biểu đồ cột.

🔹 stat = “identity”: báo rằng bạn đã cung cấp sẵn giá trị tần số, không cần ggplot tự đếm lại.

🔹 width = 0.7: độ rộng của các cột (0.7 là vừa đẹp).

2.4.2 Nhận xét

🔹 Instagram là nền tảng phổ biến nhất:

Được sử dụng bởi hơn 35% người tham gia khảo sát. Điều này phù hợp với thực tế khi Instagram là mạng xã hội phổ biến nhất trong giới trẻ, đặc biệt là sinh viên – nhóm chiếm tỷ lệ lớn trong bộ dữ liệu. 🔹 TikTok và Facebook giữ vị trí tiếp theo:

TikTok: 21.84% – một tỷ lệ cao, phản ánh xu hướng tiêu thụ nội dung ngắn, nhanh và giải trí. Facebook: tuy là nền tảng lâu đời hơn nhưng vẫn được 17.45% người dùng chọn là nền tảng chính. 🔹 Các nền tảng còn lại có tỷ lệ rất thấp:

WhatsApp, Twitter, LinkedIn, WeChat, Snapchat, LINE, KakaoTalk, VKontakte,… đều dưới 10%. Điều này cho thấy nhóm khảo sát tập trung sử dụng mạng xã hội để xem nội dung, giải trí, hơn là nhắn tin chuyên nghiệp hay mạng lưới nghề nghiệp.

2.4.3 Kết luận

  • Cấu trúc hành vi sử dụng mạng xã hội thiên về thị giác và giải trí, với Instagram và TikTok là lựa chọn chủ đạo.
  • Facebook vẫn duy trì được mức độ sử dụng cao nhưng có thể đang nhường chỗ cho các nền tảng trẻ trung hơn.
  • Các nền tảng có tính chất trò chuyện cá nhân hoặc chuyên môn (như WhatsApp, LinkedIn) có tỷ lệ thấp hơn, phản ánh mục tiêu sử dụng mạng xã hội trong nhóm này chủ yếu là giải trí và tương tác xã hội công khai.

2.5 Affects acadamic performance - Ảnh hưởng đến học tập

2.5.1 Thống kê mô tả tần số, tần suất, trực quan hoá

2.5.1.1 Bảng tần số, tần suất
tab_affect <- table(dat$Affects_Academic_Performance)
tab_affect
## 
##  No Yes 
## 252 453
table(dat$Affects_Academic_Performance)/sum(nrow(dat))
## 
##        No       Yes 
## 0.3574468 0.6425532
2.5.1.2 Trực quan hoá
# Chuyển sang data frame
affect_freq <- as.data.frame(tab_affect)
colnames(affect_freq) <- c("Response", "Frequency")

# Tính phần trăm
affect_freq$Percentage <- affect_freq$Frequency / sum(affect_freq$Frequency) * 100

# Tạo nhãn hiển thị phần trăm
affect_freq$Label <- paste0(round(affect_freq$Percentage, 1), "%")

# Biểu đồ 
ggplot(affect_freq, aes(x = "", y = Percentage, fill = Response)) +
  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 = "Mạng xã hội ảnh hưởng đến kết quả học tập") +
  scale_fill_manual(values = c("#66c2a5", "#fc8d62"))  # Chọn màu tùy

2.5.2 Nhận xét

  • Đa số người tham gia khảo sát (64.3%) cho biết việc sử dụng mạng xã hội ảnh hưởng đến kết quả học tập của họ.
  • Trong khi đó, 35.7% còn lại cho rằng không bị ảnh hưởng.
  • Biểu đồ tròn và dữ liệu tần suất cho thấy gần 2/3 người tham gia khảo sát thừa nhận mạng xã hội ảnh hưởng tiêu cực đến kết quả học tập. Đây là một tín hiệu đáng chú ý, phản ánh mối quan tâm thực tế và là nền tảng tốt cho các phân tích chuyên sâu hơn hoặc đề xuất giải pháp sử dụng mạng xã hội hợp lý trong môi trường học đường.

2.5.3 Đánh giá

  • Tác động tiêu cực tương đối phổ biến:
    • Kết quả cho thấy mối liên hệ khá rõ giữa việc sử dụng mạng xã hội và ảnh hưởng đến học tập, ít nhất là từ nhận thức chủ quan của người dùng.
    • Điều này hỗ trợ giả thuyết nghiên cứu ban đầu: mạng xã hội có thể gây sao nhãng hoặc chiếm thời gian học tập của người trẻ.

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.1.2 Bài toán kiểm định

  • Giả thuyết:

    • H₀: p = 0.5 (tỷ lệ nam bằng 50%)
    • H₁: p ≠ 0.5 (tỷ lệ nam khác 50%)
  • Nhận xét

    • Tỷ lệ nam giới trong mẫu khảo sát là 49.9%, gần bằng 50%.
    • Khoảng tin cậy 95% cho tỷ lệ này là từ 46.2% đến 53.7%, bao gồm giá trị 0.5.
  • Giá trị p-value = 1 > 0.05 cho thấy không có bất kỳ bằng chứng thống kê nào để cho rằng tỷ lệ nam khác 50%.

  • Kết luận.

    • Không có đủ bằng chứng để bác bỏ giả thuyết rằng tỷ lệ nam trong tổng thể là 50%. Tỷ lệ quan sát phù hợp với giả thuyết.

3.2 Most used platform - Tiktok

3.2.1 Ước lượng khoảng tin cậy 95% cho tỷ lệ người dùng nền tảng Tiktok

prop.test(x = sum(dat$Most_Used_Platform == "TikTok"),
          n = nrow(dat),
          p = 0.8,   # Giả thuyết: 80% dùng TikTok
          conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  sum(dat$Most_Used_Platform == "TikTok") out of nrow(dat), null probability 0.8
## X-squared = 1486.6, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.8
## 95 percent confidence interval:
##  0.1888401 0.2511618
## sample estimates:
##         p 
## 0.2184397

3.2.2 Bài toán kiểm định

  • Giả thuyết kiểm định:

    • H₀: p = 0.8 (giả định rằng 80% người dùng chọn TikTok)
    • H₁: p ≠ 0.8 (tỷ lệ người chọn TikTok khác 80%)
  • Nhận xét

  • Tỷ lệ người chọn TikTok là 21.8%, rất thấp so với giả thuyết ban đầu là 80%.

  • Khoảng tin cậy 95% nằm trong khoảng [18.9%, 25.1%], không bao gồm 80%.

  • p-value cực kỳ nhỏ (< 2.2e-16), cho thấy sự khác biệt là có ý nghĩa thống kê rất cao.

  • Kết luận

    • Có bằng chứng thống kê rất mạnh để bác bỏ giả thuyết rằng 80% người khảo sát chọn TikTok là nền tảng sử dụng chính. Thực tế, chỉ khoảng 22% người tham gia khảo sát cho biết họ sử dụng TikTok nhiều nhất.

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

  • Mục tiêu:

  • So sánh tỷ lệ người bị ảnh hưởng học tập do dùng mạng xã hội giữa 2 nhóm:

    • Graduate
    • Undergraduate
  • Tỷ lệ Undergraduate bị ảnh hưởng học tập có nhỏ hơn Graduate không?

# 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

  • H₀: p₁ - p₂ = 0 (tỷ lệ Undergraduate bằng Graduate)

  • H₁: p₁ - p₂ < 0 (tỷ lệ Undergraduate nhỏ hơn Graduate)

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

4.1 Gender và Most used platform

  • Lý. do:
    • Giới tính có thể ảnh hưởng đến việc lựa chọn mạng xã hội chính. Ví dụ, nữ có thể ưu tiên Instagram hoặc TikTok, trong khi nam có thể dùng nhiều Facebook hoặc Twitter hơn.
  • Phân tích:
    • So sánh tỷ lệ từng nền tảng theo từng giới tính để xem có sự khác biệt trong thói quen sử dụng mạng xã hội không.

4.1.1 Bảng tần suất chéo

# Tạo bảng tần số chéo
cross_gp <- table(dat$Gender, dat$Most_Used_Platform)

# Chuyển sang bảng tần suất theo phần trăm
cross_percent_gp <- prop.table(cross_gp) * 100

# Làm tròn và hiển thị
print(round(cross_percent_gp, 2))
##         
##          Facebook Instagram KakaoTalk  LINE LinkedIn Snapchat TikTok Twitter
##   Female     3.40     24.40      1.70  1.70     1.13     1.13  12.20    2.27
##   Male      14.04     10.92      0.00  0.00     1.84     0.71   9.65    1.99
##         
##          VKontakte WeChat WhatsApp YouTube
##   Female      0.00   0.57     1.56    0.00
##   Male        1.70   1.56     6.10    1.42

4.1.2 Trực quan hoá

# Chuyển sang data frame
cross_dfgp <- as.data.frame(cross_gp)
colnames(cross_dfgp) <- c("Gender", "Platform", "Percentage")

# Biểu đồ
ggplot(cross_dfgp, aes(x = Platform, y = Percentage, fill = Gender)) +
  geom_col(position = "dodge") +
  labs(title = "Tỷ lệ sử dụng mạng xã hội theo giới tính",
       x = "Nền tảng mạng xã hội",
       y = "Tỷ lệ (%)") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_fill_brewer(palette = "Set2")

4.1.3 Nhận xét

🔹 1. Instagram vượt trội ở nữ giới

  • Instagram là nền tảng phổ biến nhất ở nữ giới (24.4%), cao hơn gấp 2.2 lần so với nam giới (10.92%).
  • Điều này phù hợp với xu hướng chung: Instagram hấp dẫn hơn với người dùng nữ do thiên về hình ảnh, thẩm mỹ, và nội dung cá nhân.

🔹 2. Facebook ngược lại – phổ biến hơn ở nam giới

  • Facebook được sử dụng nhiều hơn ở nam (14.04%) so với nữ (chỉ 3.4%).
  • Có thể do nam giới giữ thói quen dùng nền tảng truyền thống này lâu hơn, hoặc dùng để theo dõi tin tức, nhóm nghề nghiệp,…

🔹 3. TikTok phổ biến ở cả hai giới

  • TikTok là nền tảng được cả nam (9.65%) và nữ (12.2%) ưa chuộng – nhưng nữ vẫn chiếm tỷ lệ cao hơn.
  • Cho thấy TikTok là một nền tảng đang chiếm ưu thế ở người trẻ nói chung, nhất là nữ.

🔹 4. Một số nền tảng có tính giới tính hóa cao

  • LINE, KakaoTalk: chỉ có ở nữ, nam hoàn toàn không dùng → có thể là người nữ từ các quốc gia/khu vực đặc thù (Hàn, Nhật…).
  • VKontakte, YouTube: chỉ có ở nam – tuy tỷ lệ không cao, nhưng phản ánh sự lựa chọn đặc biệt theo giới tính hoặc vùng văn hóa.

🔹 5. WhatsApp, WeChat, LinkedIn, Twitter…: được cả 2 giới dùng nhưng nam thường chiếm tỷ lệ cao hơn.

4.1.4 Đánh giá

  • Giới tính có ảnh hưởng rõ rệt đến việc lựa chọn nền tảng mạng xã hội chính.
  • Nữ giới thiên về nền tảng hình ảnh và tương tác nhẹ nhàng (Instagram, TikTok), trong khi nam giới có xu hướng giữ các nền tảng truyền thống hoặc chuyên nghiệp hơn (Facebook, LinkedIn, WhatsApp).
  • Đây là một cơ sở quan trọng để làm phân tích sâu hơn về mối quan hệ giữa hành vi mạng xã hội và giới tính, hoặc mức độ nghiện mạng xã hội (Addicted_Score).

4.1.5 Kiểm định chi bình phương

# Tạo bảng tần số chéo
cross_gp <- table(dat$Gender, dat$Most_Used_Platform)
# Kiểm định 
chisq.test(cross_gp, simulate.p.value = TRUE, B = 10000)
## 
##  Pearson's Chi-squared test with simulated p-value (based on 10000
##  replicates)
## 
## data:  cross_gp
## X-squared = 154.33, df = NA, p-value = 9.999e-05

Các giả thuyết

  • Giả thuyết không (H₀): Giới tính và nền tảng mạng xã hội sử dụng nhiều nhất là độc lập với nhau.
  • Giả thuyết đối (H₁): Giới tính và nền tảng mạng xã hội sử dụng nhiều nhất có mối quan hệ phụ thuộc.

Phương pháp

  • Sử dụng kiểm định Chi bình phương độc lập với mô phỏng Monte Carlo (simulate.p.value = TRUE, 10000 lần) để xử lý trường hợp tần suất nhỏ trong bảng chéo.

Kết quả

  • Giá trị thống kê chi bình phương: X-squared = 154.33
  • Giá trị p-value mô phỏng: p-value = 9.999e-05
  • Bậc tự do không xác định do dùng mô phỏng (df = NA).

Nhận xét

  • Với mức ý nghĩa α = 0.05, giá trị p-value rất nhỏ (p-value ≈ 0.0001 < 0.05) nên bác bỏ giả thuyết không H₀.

  • Điều này cho thấy có bằng chứng thống kê mạnh mẽ để kết luận rằng:

    • Giới tính ảnh hưởng đến lựa chọn nền tảng mạng xã hội được sử dụng nhiều nhất trong nhóm khảo sát.
  • Nghĩa là, sở thích sử dụng các nền tảng mạng xã hội khác nhau phụ thuộc vào giới tính, không phải ngẫu nhiên.

4.2 Academic Level và Affects academic performance

  • Lý do
    • Trình độ học vấn có thể liên quan đến việc mạng xã hội có ảnh hưởng đến học tập hay không. Sinh viên đại học, cao học có thể nhận thức rõ hơn hoặc có mức ảnh hưởng khác nhau so với học sinh phổ thông.
  • Phân tích
    • Xem tỷ lệ trả lời “Yes” hoặc “No” về ảnh hưởng học tập trong từng nhóm trình độ học vấn.

4.2.1 Bảng tần suất chéo

# Tạo bảng tần số chéo
cross_lp <- table(dat$Academic_Level, dat$Affects_Academic_Performance)

# Chuyển sang bảng tần suất theo phần trăm
cross_percent_lp <- prop.table(cross_lp) * 100

# Làm tròn và hiển thị
print(round(cross_percent_lp, 2))
##                
##                    No   Yes
##   Graduate      17.87 28.23
##   High School    0.28  3.55
##   Undergraduate 17.59 32.48

4.2.2 Trực quan hoá

# Chuyển sang data frame để vẽ
cross_dflp <- as.data.frame(cross_percent_lp)
colnames(cross_dflp) <- c("Academic_Level", "Affects", "Percentage")

# Biểu đồ
ggplot(cross_dflp, aes(x = Academic_Level, y = Percentage, fill = Affects)) +
  geom_col(position = "dodge") +
  labs(title = "Ảnh hưởng của mạng xã hội đến kết quả học tập theo trình độ học vấn",
       x = "Trình độ học vấn",
       y = "Tỷ lệ (%)") +
  scale_fill_brewer(palette = "Set1", name = "Ảnh hưởng") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 30, hjust = 1))

4.2.3 Nhận xét

🔹 1. Người học đại học (Undergraduate) bị ảnh hưởng nhiều nhất

  • Tỷ lệ người học đại học trả lời “Yes” – có ảnh hưởng đến học tập chiếm tới 32.4% toàn bộ mẫu.
  • Đây cũng là nhóm đông đảo nhất trong khảo sát, chiếm gần 50% tổng mẫu → phản ánh trung thực hành vi mạng xã hội ở sinh viên đại học.

🔹 2. Người học sau đại học (Graduate) cũng bị ảnh hưởng đáng kể

  • Có 28.23% người học cao học thừa nhận mạng xã hội ảnh hưởng đến việc học của họ. Tuy thấp hơn nhóm undergraduate nhưng vẫn khá cao → cho thấy cả những người có trình độ cao cũng chưa kiểm soát tốt ảnh hưởng từ mạng xã hội.

🔹 3. Học sinh phổ thông (High School) chiếm tỷ lệ rất nhỏ

  • Chỉ chiếm 3.83% toàn bộ mẫu khảo sát, với 3.55% trả lời “Yes”.
  • Số liệu này có thể phản ánh 2 điều:
    • Mẫu khảo sát có ít học sinh phổ thông.
    • Hoặc học sinh chưa có nhận thức rõ về ảnh hưởng của mạng xã hội đến học tập, hoặc họ ít sử dụng hơn.

4.2.3 Kiểm định chi bình phương

# Tạo bảng tần số chéo
cross_lp <- table(dat$Academic_Level, dat$Affects_Academic_Performance)
# Kiểm định 
chisq.test(cross_lp)
## 
##  Pearson's Chi-squared test
## 
## data:  cross_lp
## X-squared = 10.793, df = 2, p-value = 0.004533

Các giả thuyết:

  • Giả thuyết không (H₀): Trình độ học vấn và ảnh hưởng của mạng xã hội đến học tập là độc lập với nhau.
  • Giả thuyết đối (H₁): Trình độ học vấn và ảnh hưởng của mạng xã hội đến học tập có mối quan hệ phụ thuộc.

Phương pháp: - Sử dụng kiểm định Chi bình phương độc lập dựa trên bảng tần số chéo giữa Academic_Level và Affects_Academic_Performance.

Kết quả: - Giá trị thống kê chi bình phương: X-squared = 10.793 - Bậc tự do: df = 2 - Giá trị p-value: p-value = 0.004533

Nhận xét: - Với mức ý nghĩa α = 0.05, p-value = 0.004533 < 0.05, nên bác bỏ giả thuyết không H₀. - Điều này cho thấy có bằng chứng thống kê để kết luận rằng: - Trình độ học vấn có ảnh hưởng đến việc mạng xã hội có làm ảnh hưởng đến hiệu quả học tập hay không. - Nói cách khác, mức độ ảnh hưởng của mạng xã hội đến học tập khác nhau ở các nhóm trình độ học vấn khác nhau.

4.3 Relationship Status và Most used platform

  • Lý do
    • Tình trạng mối quan hệ có thể liên quan đến nền tảng mạng xã hội được sử dụng nhiều nhất, do mỗi nền tảng có đặc điểm giao tiếp và tương tác xã hội khác nhau.
  • Phân tích
    • So sánh phân bố nền tảng chính giữa các nhóm: Single, In Relationship, Complicated.

4.3.1 Bảng tần suất chéo

# Tạo bảng tần số chéo
cross_sp <- table(dat$Relationship_Status, dat$Most_Used_Platform)

# Chuyển sang bảng tần suất theo phần trăm
cross_percent_sp <- prop.table(cross_sp) * 100

# Làm tròn và hiển thị
print(round(cross_percent_sp, 2))
##                  
##                   Facebook Instagram KakaoTalk  LINE LinkedIn Snapchat TikTok
##   Complicated         0.14      1.42      0.00  0.00     0.71     0.57   1.13
##   In Relationship    10.07     13.33      0.85  0.00     1.13     0.57   6.38
##   Single              7.23     20.57      0.85  1.70     1.13     0.71  14.33
##                  
##                   Twitter VKontakte WeChat WhatsApp YouTube
##   Complicated        0.00      0.00   0.00     0.00    0.57
##   In Relationship    1.99      0.85   2.13     3.55    0.14
##   Single             2.27      0.85   0.00     4.11    0.71

4.3.2 Trực quan hoá

# Chuyển sang data frame để vẽ
df_cross_sp <- as.data.frame(cross_percent_sp)
colnames(df_cross_sp) <- c("Relationship_Status", "Platform", "Percentage")

# Biểu đồ
ggplot(df_cross_sp, aes(x = Platform, y = Percentage, fill = Relationship_Status)) +
  geom_col(position = "dodge") +
  labs(title = "Nền tảng mạng xã hội phổ biến theo tình trạng quan hệ",
       x = "Nền tảng mạng xã hội",
       y = "Tỷ lệ (%)") +
  theme_minimal() +
  scale_fill_brewer(palette = "Set2") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

4.3.3 Nhận xét

🔹 1. Instagram và TikTok – phổ biến nhất ở người độc thân

  • Instagram: Người độc thân dùng nhiều nhất (20.57%), gần gấp đôi so với người đang yêu (13.33%).

  • TikTok: Cũng được ưa chuộng bởi người độc thân (14.33%), vượt trội so với người đang trong mối quan hệ (6.38%).

  • → Cho thấy người độc thân có xu hướng dùng nền tảng giải trí, chia sẻ hình ảnh nhiều hơn – có thể để kết nối xã hội, thể hiện bản thân, hoặc giải tỏa cảm xúc.

🔹 2. Facebook – được dùng nhiều hơn ở người đang yêu

  • Người đang yêu có tỷ lệ dùng Facebook cao nhất (10.07%), có thể do họ thích chia sẻ khoảnh khắc với người yêu hoặc theo dõi các mối quan hệ.

  • Người độc thân dùng ít hơn (7.23%), còn nhóm “complicated” gần như không dùng (0.14%).

🔹 3. Nền tảng nhắn tin (WhatsApp, WeChat, LINE):

  • WhatsApp: Thịnh hành ở cả 2 nhóm chính, nhưng cao hơn ở người độc thân (4.11%) và người đang yêu (3.55%).

  • WeChat: Chủ yếu xuất hiện ở người đang yêu (2.13%), cho thấy một nhóm người dùng có thể đến từ khu vực như Trung Quốc, Đài Loan.

  • LINE: Chỉ xuất hiện đáng kể ở người độc thân (1.70%) – có thể do đặc điểm vùng văn hóa hoặc dân số mẫu khảo sát.

🔹 4. Nhóm “Complicated” có tần suất sử dụng mạng xã hội khá thấp

  • Tất cả các nền tảng đều có tỷ lệ rất thấp ở nhóm này.

  • Có thể do số lượng người thuộc nhóm này trong khảo sát ít, hoặc họ có xu hướng thu mình, ít hoạt động mạng xã hội khi tình cảm không rõ ràng.

4.3.4 Đánh giá

  • Tình trạng quan hệ có ảnh hưởng rõ đến việc chọn nền tảng mạng xã hội.
  • Người độc thân ưu tiên các nền tảng thiên về kết nối xã hội, giải trí (Instagram, TikTok).
  • Người đang yêu dùng mạng xã hội “ổn định” hơn như Facebook hoặc ứng dụng nhắn tin (WhatsApp, WeChat).
  • Dữ liệu cũng phản ánh được yếu tố văn hóa, quốc gia (WeChat, LINE, KakaoTalk, VKontakte).

4.3.5 Kiểm định chi bình phương

# Tạo bảng tần số chéo
cross_sp <- table(dat$Relationship_Status, dat$Most_Used_Platform)
# Kiểm định 
chisq.test(cross_sp, simulate.p.value = TRUE, B = 10000)
## 
##  Pearson's Chi-squared test with simulated p-value (based on 10000
##  replicates)
## 
## data:  cross_sp
## X-squared = 132.96, df = NA, p-value = 9.999e-05

Các giả thuyết

  • Giả thuyết không (H₀): Tình trạng quan hệ và nền tảng mạng xã hội được sử dụng nhiều nhất là độc lập với nhau.
  • Giả thuyết đối (H₁): Tình trạng quan hệ và nền tảng mạng xã hội được sử dụng nhiều nhất có mối quan hệ phụ thuộc.

Phương pháp

  • Sử dụng kiểm định Chi bình phương với mô phỏng p-value Monte Carlo (10000 lần lặp) để xử lý trường hợp tần suất thấp trong bảng tần số.

Kết quả

  • Giá trị thống kê chi bình phương: X-squared = 132.96
  • Bậc tự do không xác định do dùng mô phỏng (df = NA).
  • Giá trị p-value mô phỏng: p-value = 9.999e-05 (rất nhỏ, gần bằng 0).

Nhận xét

  • Với mức ý nghĩa α = 0.05, p-value ≈ 0.0001 < 0.05 nên bác bỏ giả thuyết không H₀.
  • Kết luận:
    • Có mối quan hệ phụ thuộc giữa tình trạng quan hệ và nền tảng mạng xã hội được sử dụng nhiều nhất.
  • Điều này cho thấy lựa chọn nền tảng mạng xã hội có sự khác biệt đáng kể tùy theo tình trạng quan hệ của người dùng.

PHẦN 5: RELATIVE RISK - Tỷ số nguy cơ

install.packages("epitools", repos = "https://cloud.r-project.org")
## Installing package into 'C:/Users/ADMIN/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'epitools' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\ADMIN\AppData\Local\Temp\RtmpqQTDwM\downloaded_packages
library(epitools)

5.1 Gender và Affect acadamic performence

  • So sánh nguy cơ bị ảnh hưởng học tập giữa nam và nữ → Tính RR (Male vs Female)

5.1.1 Bảng dữ liệu chéo

# Tạo bảng 2x2
tab1 <- table(dat$Gender, dat$Affects_Academic_Performance)
print(tab1)
##         
##           No Yes
##   Female 122 231
##   Male   130 222

5.1.2 Tính RR

riskratio(tab1)
## $data
##         
##           No Yes Total
##   Female 122 231   353
##   Male   130 222   352
##   Total  252 453   705
## 
## $measure
##         risk ratio with 95% C.I.
##           estimate     lower   upper
##   Female 1.0000000        NA      NA
##   Male   0.9637692 0.8632283 1.07602
## 
## $p.value
##         two-sided
##          midp.exact fisher.exact chi.square
##   Female         NA           NA         NA
##   Male    0.5126596     0.530117   0.511323
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Cặp biến

  • Phân nhóm (Exposure): Gender (so sánh Male với Female)
  • Kết quả (Outcome): Affects_Academic_Performance (Yes = bị ảnh hưởng học tập)

Diễn giải

  • Tỷ số nguy cơ (RR) = 0.96 → Nam giới có nguy cơ bị ảnh hưởng học tập thấp hơn một chút so với nữ (chỉ khoảng 96% nguy cơ so với nữ).
  • Khoảng tin cậy 95% = [0.86, 1.08] → Bao gồm 1 → không có ý nghĩa thống kê.
  • p-value ≈ 0.51 > 0.05 → Không có bằng chứng để kết luận sự khác biệt giữa nam và nữ về ảnh hưởng học tập.

Kết luận

  • Dựa trên kết quả phân tích, không có sự khác biệt có ý nghĩa thống kê về nguy cơ bị ảnh hưởng học tập giữa nam và nữ. Tỷ lệ ảnh hưởng học tập giữa hai giới là gần tương đương, với nam giới thậm chí có nguy cơ thấp hơn một chút, nhưng sự khác biệt là không đáng kể về mặt thống kê.

5.2 Most used platform và Affect acadamic performence

  • Tính Relative Risk (RR) của việc bị ảnh hưởng học tập khi TikTok là nền tảng chính, so với người không dùng TikTok làm nền tảng chính.

5.2.1 Bảng dữ liệu chéo

# Các nền tảng có ảnh hưởng đến học tập của người dùng hay không?
tab_tiktok <- table(dat$Most_Used_Platform, dat$Affects_Academic_Performance)
addmargins(tab_tiktok)
##            
##              No Yes Sum
##   Facebook   86  37 123
##   Instagram  77 172 249
##   KakaoTalk   0  12  12
##   LINE       12   0  12
##   LinkedIn   21   0  21
##   Snapchat    1  12  13
##   TikTok     10 144 154
##   Twitter    19  11  30
##   VKontakte  12   0  12
##   WeChat      7   8  15
##   WhatsApp    0  54  54
##   YouTube     7   3  10
##   Sum       252 453 705

5.2.2 Tạo ma trận và tính RR

# Tạo ma trận 2×2
matrix_tiktok <- matrix(c(144, 309, 10, 242), nrow = 2, byrow = FALSE)
colnames(matrix_tiktok) <- c("Yes", "No")
rownames(matrix_tiktok) <- c("TikTok", "Others")
# Tính RR
riskratio(matrix_tiktok)
## $data
##        Yes  No Total
## TikTok 144  10   154
## Others 309 242   551
## Total  453 252   705
## 
## $measure
##                         NA
## risk ratio with 95% C.I. estimate    lower    upper
##                   TikTok 1.000000       NA       NA
##                   Others 6.763702 3.687155 12.40731
## 
## $p.value
##          NA
## two-sided midp.exact fisher.exact chi.square
##    TikTok         NA           NA         NA
##    Others          0 7.412727e-21 1.0561e-17
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Kết quả Relative Risk (RR)

  • RR của nhóm “Others” so với TikTok = 6.76
  • 95% CI: [3.69, 12.41]
  • p-value (mid-p exact) = 7.41 × 10⁻²¹ → rất nhỏ
    • Lưu ý: RR luôn được tính tương đối với nhóm tham chiếu, ở đây TikTok là nhóm gốc nên RR = 1.00 ở dòng TikTok, và giá trị RR được tính cho nhóm “Others”.

Diển giải kết quả

  • Người không sử dụng TikTok (tức là dùng các nền tảng khác) có nguy cơ KHÔNG bị ảnh hưởng học tập cao hơn 6.76 lần so với người dùng TikTok.
  • Hay ngược lại, người dùng TikTok có nguy cơ bị ảnh hưởng học tập cao hơn đáng kể so với những người dùng nền tảng khác.
  • Vì khoảng tin cậy không chứa 1 và p-value rất nhỏ, nên sự khác biệt là có ý nghĩa thống kê.

Kết luận

  • Kết quả cho thấy người dùng TikTok có nguy cơ bị ảnh hưởng học tập cao hơn rõ rệt so với người không dùng TikTok. Tỷ số nguy cơ (RR) của nhóm không dùng TikTok so với TikTok là 6.76, với khoảng tin cậy 95%: [3.69 – 12.41], p-value < 0.001. Như vậy, sự khác biệt có ý nghĩa thống kê, và có thể kết luận rằng TikTok là một yếu tố rủi ro liên quan đến ảnh hưởng học tập trong bộ dữ liệu này.

5.3 Academic Level và Affects academic performance

  • Học sinh phổ thông có bị ảnh hưởng học tập nhiều hơn không?

5.3.1 Bảng dữ liệu chéo

# Đối tượng là sinh viên tốt nghiệp dùng mạng xã hội có bị ảnh hưởng đến học tập hay không?
tab_graduate <- table(dat$Academic_Level, dat$Affects_Academic_Performance)
addmargins(tab_graduate)
##                
##                  No Yes Sum
##   Graduate      126 199 325
##   High School     2  25  27
##   Undergraduate 124 229 353
##   Sum           252 453 705

5.3.1 Tạo ma trận và tính RR

# Tạo ma trận 2×2
matrix_graduate <- matrix(c(199, 254, 126, 126), nrow = 2, byrow = FALSE)
colnames(matrix_graduate) <- c("Yes", "No")
rownames(matrix_graduate) <- c("Graduate", "Others")
# Tính RR
riskratio(matrix_graduate)
## $data
##          Yes  No Total
## Graduate 199 126   325
## Others   254 126   380
## Total    453 252   705
## 
## $measure
##                         NA
## risk ratio with 95% C.I.  estimate     lower    upper
##                 Graduate 1.0000000        NA       NA
##                 Others   0.8552632 0.7019114 1.042119
## 
## $p.value
##           NA
## two-sided  midp.exact fisher.exact chi.square
##   Graduate         NA           NA         NA
##   Others    0.1224822    0.1342683  0.1212158
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Kết quả Relative Risk (RR)

  • RR của nhóm “Others” so với Graduate = 0.86
  • 95% CI: [0.70, 1.04]
  • p-value (mid-p exact) = 0.122
    • Lưu ý: RR luôn được tính tương đối với nhóm tham chiếu, ở đây Graduate là nhóm gốc nên RR = 1.00 ở dòng Graduate, và giá trị RR được tính cho nhóm “Others”.

Diễn giải kết quả

  • Nhóm “Others” (gồm học sinh phổ thông và sinh viên đại học) có nguy cơ bị ảnh hưởng học tập do mạng xã hội thấp hơn khoảng 14% so với nhóm Graduate.
  • Tuy nhiên, vì khoảng tin cậy chứa giá trị 1, và p-value > 0.05, nên sự khác biệt không có ý nghĩa thống kê.
  • Nói cách khác, không có đủ bằng chứng để khẳng định sinh viên tốt nghiệp bị ảnh hưởng học tập nhiều hơn so với các nhóm học vấn còn lại.

Kết luận

  • Tỷ số nguy cơ (RR) của nhóm “Others” so với Graduate là 0.86, với khoảng tin cậy 95%: [0.70 – 1.04], p-value = 0.122.
  • Sự khác biệt không có ý nghĩa thống kê, do đó không thể kết luận rằng trình độ học vấn là yếu tố ảnh hưởng rõ rệt đến việc bị tác động học tập từ mạng xã hội trong bộ dữ liệu này.

PHẦN 6: ODDS RATIO - Tỷ số chênh

6.1 Gender và Affect acadamic performence

# Bảng chéo giữa Gender và Affects Academic Performance
tab1 <- table(dat$Gender, dat$Affects_Academic_Performance)
# Tính Odds Ratio
oddsratio(tab1)
## $data
##         
##           No Yes Total
##   Female 122 231   353
##   Male   130 222   352
##   Total  252 453   705
## 
## $measure
##         odds ratio with 95% C.I.
##           estimate     lower    upper
##   Female 1.0000000        NA       NA
##   Male   0.9021089 0.6623095 1.228053
## 
## $p.value
##         two-sided
##          midp.exact fisher.exact chi.square
##   Female         NA           NA         NA
##   Male    0.5126596     0.530117   0.511323
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Kết quả Odds Ratio (OR)

  • OR của nhóm “Male” so với “Female” = 0.90
  • 95% CI (khoảng tin cậy): [0.66, 1.23]
  • p-value (mid-p exact) = 0.513
    • Lưu ý: “Female” là nhóm tham chiếu, nên OR của nhóm Female = 1.00 (mặc định), và kết quả OR thể hiện mức so sánh của nhóm “Male” với “Female”.

Diễn giải kết quả

  • Odds bị ảnh hưởng học tập ở nam giới thấp hơn khoảng 10% so với nữ giới (OR = 0.90).
  • Tuy nhiên, vì khoảng tin cậy chứa giá trị 1 và p-value > 0.05, nên không có ý nghĩa thống kê.
  • Nói cách khác, không có đủ bằng chứng để khẳng định giới tính có ảnh hưởng đến khả năng bị ảnh hưởng học tập.

Kết luận

  • Tỷ số odds (OR) của nam giới so với nữ giới là 0.90, với khoảng tin cậy 95%: [0.66 – 1.23], p-value = 0.513.
  • Do khoảng tin cậy chứa 1 và p-value > 0.05, không có sự khác biệt đáng kể về odds bị ảnh hưởng học tập giữa nam và nữ trong bộ dữ liệu này.
  • Giới tính không phải là yếu tố có ý nghĩa thống kê ảnh hưởng đến khả năng bị tác động bởi mạng xã hội đối với học tập.

6.2 Most used platform và Affect acadamic performence

# Các nền tảng có ảnh hưởng đến học tập của người dùng hay không?
tab_tiktok <- table(dat$Most_Used_Platform, dat$Affects_Academic_Performance)
# Tạo ma trận 2×2
matrix_tiktok <- matrix(c(144, 309, 10, 242), nrow = 2, byrow = FALSE)
colnames(matrix_tiktok) <- c("Yes", "No")
rownames(matrix_tiktok) <- c("TikTok", "Others")
# Tính Odds Ratio
oddsratio(matrix_tiktok)
## $data
##        Yes  No Total
## TikTok 144  10   154
## Others 309 242   551
## Total  453 252   705
## 
## $measure
##                         NA
## odds ratio with 95% C.I. estimate    lower    upper
##                   TikTok  1.00000       NA       NA
##                   Others 11.09053 5.998239 23.02663
## 
## $p.value
##          NA
## two-sided midp.exact fisher.exact chi.square
##    TikTok         NA           NA         NA
##    Others          0 7.412727e-21 1.0561e-17
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Kết quả Odds Ratio (OR)

  • OR của nhóm “Others” so với TikTok = 11.09
  • 95% khoảng tin cậy (CI): [6.00, 23.03]
  • p-value (mid-p exact) = 7.41 × 10⁻²¹ → Rất nhỏ
  • Ghi chú:
    • TikTok là nhóm tham chiếu, nên OR = 1 tại dòng TikTok (mặc định).
    • Giá trị OR > 1 ở dòng “Others” thể hiện mức độ so sánh odds bị ảnh hưởng học tập giữa người không dùng TikTok và người dùng TikTok.

Diễn giải kết quả

  • Người dùng các nền tảng khác (không phải TikTok) có odds không bị ảnh hưởng học tập cao hơn 11.09 lần so với người dùng TikTok.
  • Điều này tương đương với việc người dùng TikTok có odds bị ảnh hưởng học tập cao hơn rất đáng kể.
  • Vì khoảng tin cậy không chứa giá trị 1 và p-value < 0.001, nên sự khác biệt là có ý nghĩa thống kê.

Kết luận

  • Tỷ số odds (OR) của nhóm không dùng TikTok là 11.09, CI: [6.00 – 23.03], p-value < 0.001.
  • Điều này cho thấy rằng người dùng TikTok có nguy cơ bị ảnh hưởng học tập cao hơn đáng kể so với người sử dụng nền tảng mạng xã hội khác.
  • TikTok có thể được coi là một yếu tố rủi ro tiềm năng ảnh hưởng tiêu cực đến học tập trong bộ dữ liệu này.

6.3 Academic Level và Affects academic performance

# Đối tượng là sinh viên tốt nghiệp dùng mạng xã hội có bị ảnh hưởng đến học tập hay không?
tab_graduate <- table(dat$Academic_Level, dat$Affects_Academic_Performance)
# Tạo ma trận 2×2
matrix_graduate <- matrix(c(199, 254, 126, 126), nrow = 2, byrow = FALSE)
colnames(matrix_graduate) <- c("Yes", "No")
rownames(matrix_graduate) <- c("Graduate", "Others")
# Tính RR
oddsratio(matrix_graduate)
## $data
##          Yes  No Total
## Graduate 199 126   325
## Others   254 126   380
## Total    453 252   705
## 
## $measure
##                         NA
## odds ratio with 95% C.I.  estimate     lower    upper
##                 Graduate 1.0000000        NA       NA
##                 Others   0.7837873 0.5750241 1.067746
## 
## $p.value
##           NA
## two-sided  midp.exact fisher.exact chi.square
##   Graduate         NA           NA         NA
##   Others    0.1224822    0.1342683  0.1212158
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Kết quả Odds Ratio (OR)

  • OR của nhóm “Others” so với nhóm Graduate = 0.78
  • 95% CI: [0.58, 1.07]
  • P-value (mid-p exact) = 0.134

Diễn giải kết quả

  • Odds bị ảnh hưởng học tập của nhóm “Others” (High school + Undergraduate) thấp hơn 0.78 lần so với nhóm Graduate.
  • Khoảng tin cậy 95% của OR là [0.58 – 1.07], bao gồm giá trị 1, tức là không thể loại trừ khả năng không có sự khác biệt về odds giữa 2 nhóm.
  • P-value > 0.05 → không có ý nghĩa thống kê, ta không thể bác bỏ giả thuyết rằng hai nhóm có odds bằng nhau.

Kết luận

  • Không có đủ bằng chứng thống kê để khẳng định rằng học sinh/sinh viên nhóm “Others” có odds bị ảnh hưởng học tập khác so với nhóm “Graduate”.
  • Dù OR < 1 cho thấy xu hướng nhóm Others ít bị ảnh hưởng học tập hơn, nhưng vì khoảng tin cậy bao gồm 1 và p-value > 0.05 → kết luận này chưa chắc chắn về mặt thống kê.
LS0tDQp0aXRsZTogIk5ISeG7hk0gVuG7pCBUVeG6pk4gNCINCmF1dGhvcjogIlThuqEgQ8O0bmcgxJDhuqF0Ig0KZGF0ZTogIjIwMjUtMDYtMDYiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6IA0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICB0b2M6IHRydWUNCiAgcGRmX2RvY3VtZW50Og0KICAgIGxhdGV4X2VuZ2luZTogeGVsYXRleA0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCiMjICoqUEjhuqZOIDE6IFTDjE0gSEnhu4JVIFbDgCBDSFXhuqhOIELhu4ogROG7riBMSeG7hlUqKg0KDQojIyMgKioxLjEgxJDhu4xDIEThu64gTEnhu4ZVKioNCg0KLSBC4buZIGThu68gbGnhu4d1IHbhu5tpIHRpw6p1IMSR4buBICJTb2NpYWwgTWVkaWEgQWRkaWN0aW9uIHZzIFJlbGF0aW9uc2hpcHMiIGPhu6dhIHTDoWMgZ2nhuqMgQWRpbCBTaGFtaW0sIGzDoCBt4buZdCBi4buZIGThu68gbGnhu4d1IG5naGnDqm4gY+G7qXUgbeG7kWkgcXVhbiBo4buHIGdp4buvYSBt4bupYyDEkeG7mSBuZ2hp4buHbiBt4bqhbmcgeMOjIGjhu5lpIHbDoCBjaOG6pXQgbMaw4bujbmcgY8OhYyBt4buRaSBxdWFuIGjhu4cgY8OhIG5ow6JuLiBC4buZIGThu68gbGnhu4d1IG7DoHkgxJHGsOG7o2MgdGh1IHRo4bqtcCB04burIDEuMDAwIHNpbmggdmnDqm4gdOG6oWkgUGFraXN0YW4gdsOgIGPDsyB0aOG7gyBo4buvdSDDrWNoIGNobyBjw6FjIG5naGnDqm4gY+G7qXUgduG7gSB0w6JtIGzDvSBo4buNYywgeMOjIGjhu5lpIGjhu41jIHbDoCBz4bupYyBraOG7j2UgY+G7mW5nIMSR4buTbmcuDQoNCg0KIyMjIyAqKjEuMS4xIMSQ4buNYyBmaWxlIGThu68gbGnhu4d1IGfhu5FjKioNCg0KYGBge3J9DQpkYXRhIDwtIHJlYWQuY3N2ICgiQzovVXNlcnMvQURNSU4vRGVza3RvcC9QVERMIERJTkggVElOSC9TdHVkZW50cyBTb2NpYWwgTWVkaWEgQWRkaWN0aW9uLmNzdiIsIGhlYWRlciA9IFQpDQpgYGANCi0gKipD4bqldSB0csO6YyBi4buZIGThu68gbGnhu4d1KioNCg0KYGBge3J9DQpzdHIoZGF0YSkNCmBgYA0KDQoNCiMjIyMgKioxLjEuMiBM4buxYSBjaOG7jW4gY8OhYyBiaeG6v24gxJHhu4tuaCB0w61uaCoqDQoNCkdp4bqjaSB0aMOtY2g6DQoNCi0gYygiIik6IHThuqFvIHZlY3RvDQotIGRhdCA8LSBkYXRhWywgZGxkdF06IGzhuqV5IHRyb25nIGLhu5kgZOG7ryBsaeG7h3UgZGF0YSBjw6FjIGPhu5l0IHRyb25nIGRsZHQgduG7q2EgdOG6oW8gcmEgKGPDoWMgYmnhur9uIMSR4buLbmggdMOtbmgpLCB2w6AgbOG6pXkgdOG6pXQgY+G6oyBjw6FjIGjDoG5nIChmdWxsIHF1YW4gc8OhdCkNCg0KYGBge3J9DQojIENo4buNbiBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oDQpkbGR0IDwtIGMoIkFnZSIsICJHZW5kZXIiLCAiQWNhZGVtaWNfTGV2ZWwiLCAiQ291bnRyeSIsICJNb3N0X1VzZWRfUGxhdGZvcm0iLCAiQWZmZWN0c19BY2FkZW1pY19QZXJmb3JtYW5jZSIsICJSZWxhdGlvbnNoaXBfU3RhdHVzIikNCg0KIyBU4bqhbyBi4buZIGThu68gbGnhu4d1IG3hu5tpIGNo4buJIGNo4bupYSDEkeG7i25oIHTDrW5oDQpkYXQgPC0gZGF0YVssIGRsZHRdDQpgYGANCg0KIyMjICoqMS4yLiBU4buUTkcgUVVBTiBW4buAIEThu64gTEnhu4ZVKioNCg0KIyMjIyAqKjEuMi4xIE7hu5lpIGR1bmcgZOG7ryBsaeG7h3UqKg0KDQotIELhu5kgZOG7ryBsaeG7h3UgKlNvY2lhbCBNZWRpYSBBZGRpY3Rpb24qIG7DoHkgZ+G7k20gNzA1IHF1YW4gc8OhdCB0xrDGoW5nIOG7qW5nIHbhu5tpIHThu6tuZyBo4buNYyBzaW5oLCBzaW5oIHZpw6puIGJhbyBn4buTbSAqKnRow7RuZyB0aW4gY8OhIG5ow6JuKiosICoqdOG6p24gc3XhuqV0IHPhu60gZOG7pW5nIG3huqFuZyB4w6MgaOG7mWkqKiwgKipjaGkgdGnhur90IGPDoWMgbuG7gW4gdOG6o25nIG3huqFuZyB4w6MgaOG7mWkqKiwgKipjw6FjIHRow7RuZyB0aW4gbGnDqm4gcXVhbiDEkeG6v24gc+G7qWMga2hv4bq7KiosICoqdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuKiosICoqbeG7qWMgxJHhu5kgbmdoaeG7h24gbeG6oW5nIHjDoyBo4buZaSoqLg0KDQotIELhu5kgZOG7ryBsaeG7h3UgKipTb2NpYWwgTWVkaWEgQWRkaWN0aW9uIHZzIFJlbGF0aW9uc2hpcHMqKiBjdW5nIGPhuqVwIHRow7RuZyB0aW4gdOG7qyA3MDUgc2luaCB2acOqbiB24buBIGjDoG5oIHZpIHPhu60gZOG7pW5nIG3huqFuZyB4w6MgaOG7mWksIMSR4bq3YyDEkWnhu4NtIG5ow6JuIGto4bqpdSBo4buNYywgc+G7qWMga2jhu49lIHTDom0gdGjhuqduIHbDoCB0w6xuaCB0cuG6oW5nIGPDoWMgbeG7kWkgcXVhbiBo4buHIGPDoSBuaMOibi4gQuG7mSBk4buvIGxp4buHdSBuw6B5IGPDsyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyBwaMOibiB0w61jaCBt4buRaSBsacOqbiBo4buHIGdp4buvYSBt4bupYyDEkeG7mSBuZ2hp4buHbiBt4bqhbmcgeMOjIGjhu5lpIHbDoCBjw6FjIHnhur91IHThu5EgbmjGsCBjaOG6pXQgbMaw4bujbmcgbeG7kWkgcXVhbiBo4buHLCBnaeG6pWMgbmfhu6csIGvhur90IHF14bqjIGjhu41jIHThuq1wIHbDoCBz4bupYyBraOG7j2UgdMOibSBsw70uIE5nb8OgaSByYSwgbsOzIGPDsm4gY2hvIHBow6lwIHNvIHPDoW5oIGjDoG5oIHZpIHPhu60gZOG7pW5nIG3huqFuZyB4w6MgaOG7mWkgZ2nhu69hIGPDoWMgbmjDs20gdGhlbyBnaeG7m2kgdMOtbmgsIMSR4buZIHR14buVaSwgcXXhu5FjIGdpYSBob+G6t2MgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuLiBW4bubaSBk4buvIGxp4buHdSDEkeG7i25oIGzGsOG7o25nIHbDoCDEkeG7i25oIHTDrW5oIHBob25nIHBow7osIGLhu5kgZOG7ryBsaeG7h3UgbsOgeSBy4bqldCBwaMO5IGjhu6NwIGNobyBjw6FjIG5naGnDqm4gY+G7qXUgdHJvbmcgbMSpbmggduG7sWMgdMOibSBsw70gaOG7jWMsIHjDoyBo4buZaSBo4buNYywgZ2nDoW8gZOG7pWMgaG/hurdjIHkgdOG6vyBjw7RuZyBj4buZbmcsIMSR4buTbmcgdGjhu51pIGPDsyB0aOG7gyBo4buXIHRy4bujIHRyb25nIHZp4buHYyB4w6J5IGThu7FuZyBjw6FjIG3DtCBow6xuaCBk4buxIMSRb8OhbiBuZ3V5IGPGoSBuZ2hp4buHbiBt4bqhbmcgeMOjIGjhu5lpIHbDoCDEkeG7gSB4deG6pXQgY8OhYyBiaeG7h24gcGjDoXAgY2FuIHRoaeG7h3AgbmjhurFtIGPhuqNpIHRoaeG7h24gY2jhuqV0IGzGsOG7o25nIGN14buZYyBz4buRbmcgdsOgIG3hu5FpIHF1YW4gaOG7hyBjw6EgbmjDom4gY+G7p2EgZ2nhu5tpIHRy4bq7Lg0KDQojIyMjICoqMS4yLjIgRGFuaCBzw6FjaCBjw6FjIGJp4bq/biB2w6AgbcO0IHThuqMqKg0KDQoqKkPhuqV1IHRyw7pjIGLhu5kgZOG7ryBsaeG7h3UgU3VwZXJtYXJrZXQgVHJhbnNhY3Rpb25zKioNCg0KLSBOaMawbmcgduG7m2kgecOqdSBj4bqndSBjaOG7iSBz4butIGThu6VuZyBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oIMSR4buDIHBow6JuIHTDrW5oIG7Dqm4gY2jDum5nIHRhIGNo4buJIHF1YW4gdMOibSDEkeG6v24gY8OhYyBiaeG6v24gbmjGsCBzYXUgOg0KDQogIC0gU3R1ZGVudF9JRCAoaW50KToJRMO5IGzDoCBz4buRIG5oxrBuZyBkw7luZyDEkeG7gyDEkeG7i25oIGRhbmgg4oCTIGJp4bq/biDEkeG7i25oIGRhbmggKGlkZW50aWZpZXIpDQogIC0gR2VuZGVyIChjaHIpOglHaeG7m2kgdMOtbmgg4oCTIMSR4buLbmggdMOtbmggZGFuaCBt4bulYyAoY2F0ZWdvcmljYWwpDQogIC0gQWNhZGVtaWNfTGV2ZWwgKGNocik6CVRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiDigJMgxJHhu4tuaCB0w61uaCBkYW5oIG3hu6VjDQogIC0gQ291bnRyeQkoY2hyKToJUXXhu5FjIGdpYSDigJMgxJHhu4tuaCB0w61uaCBkYW5oIG3hu6VjDQogIC0gTW9zdF9Vc2VkX1BsYXRmb3JtIChjaHIpOglN4bqhbmcgeMOjIGjhu5lpIGNow61uaCDigJMgxJHhu4tuaCB0w61uaCBkYW5oIG3hu6VjDQogIC0gQWZmZWN0c19BY2FkZW1pY19QZXJmb3JtYW5jZSAoY2hyKToJQ8OzIOG6o25oIGjGsOG7n25nIMSR4bq/biBo4buNYyB04bqtcCBoYXkga2jDtG5nIOKAkyDEkeG7i25oIHTDrW5oIG5o4buLIHBow6JuIChZZXMvTm8pDQogIC0gUmVsYXRpb25zaGlwX1N0YXR1cyAoY2hyKToJVMOsbmggdHLhuqFuZyBxdWFuIGjhu4cg4oCTIMSR4buLbmggdMOtbmggZGFuaCBt4bulYw0KICANCiMjIyMgKioxLjIuMyBLaeG7g20gdHJhIGThu68gbGnhu4d1KioNCg0KIyMjIyMgKioxLjIuMy4xIEtp4buDbSB0cmEgc+G7kSBsxrDhu6NuZyBOQSB0cm9uZyBj4buZdCDEkeG7i25oIHTDrW5oKioNCg0KR2nhuqNpIHRow61jaDoNCg0Kc2FwcGx5KGRhdCwgLi4uKTogw6FwIGThu6VuZyBow6BtIGNobyB04burbmcgY+G7mXQgdHJvbmcgZOG7ryBsaeG7h3UgKipkYXQqKi4NCg0Kc3VtKGlzLm5hKHgpKTogxJHhur9tIHPhu5EgbMaw4bujbmcgTkEgdHJvbmcgdOG7q25nIGPhu5l0Lg0KDQpgYGB7cn0NCiMgS2nhu4NtIHRyYSBz4buRIGzGsOG7o25nIE5BIHRyb25nIG3hu5dpIGPhu5l0IMSR4buLbmggdMOtbmgNCm5hX2NvdW50cyA8LSBzYXBwbHkoZGF0LCBmdW5jdGlvbih4KSBzdW0oaXMubmEoeCkpKQ0KbmFfY291bnRzDQpgYGANCg0KKipOaOG6rW4geMOpdCoqIA0KLSBL4bq/dCBxdeG6oyB0aHUgxJHGsOG7o2MgY2hvIHRo4bqleSBy4bqxbmcgdOG6pXQgY+G6oyBjw6FjIGPhu5l0IMSR4buLbmggdMOtbmggxJHhu4F1IGtow7RuZyBjw7MgZ2nDoSB0cuG7iyB0aGnhur91IChOQSkgdsOsIHPhu5EgbMaw4bujbmcgTkEgdHJvbmcgY8OhYyBj4buZdCDEkeG7gXUgaGnhu4NuIHRo4buLIGzDoCAwDQoNCiMjIyMjICoqMS4yLjMuMiBDaHV54buDbiDEkeG7lWkgY8OhYyBiaeG6v24gxJHhu4tuaCB0w61uaCBzYW5nIGtp4buDdSBmYWN0b3IqKg0KYGBge3J9DQojIENodXnhu4NuIGPDoWMgYmnhur9uIMSR4buLbmggdMOtbmggc2FuZyBmYWN0b3INCmRhdCRHZW5kZXIgPC0gYXMuZmFjdG9yKGRhdCRHZW5kZXIpDQpkYXQkQWNhZGVtaWNfTGV2ZWwgPC0gYXMuZmFjdG9yKGRhdCRBY2FkZW1pY19MZXZlbCkNCmRhdCRDb3VudHJ5IDwtIGFzLmZhY3RvcihkYXQkQ291bnRyeSkNCmRhdCRNb3N0X1VzZWRfUGxhdGZvcm0gPC0gYXMuZmFjdG9yKGRhdCRNb3N0X1VzZWRfUGxhdGZvcm0pDQpkYXQkQWZmZWN0c19BY2FkZW1pY19QZXJmb3JtYW5jZSA8LSBhcy5mYWN0b3IoZGF0JEFmZmVjdHNfQWNhZGVtaWNfUGVyZm9ybWFuY2UpDQpkYXQkUmVsYXRpb25zaGlwX1N0YXR1cyA8LSBhcy5mYWN0b3IoZGF0JFJlbGF0aW9uc2hpcF9TdGF0dXMpDQpgYGANCg0KKipLaeG7g20gdHJhIGzhuqFpIHNhdSBraGkgY2h1eeG7g24gxJHhu5VpKioNCg0KR2nhuqNpIHRow61jaDoNCg0KLSBzYXBwbHkoZGF0LCBjbGFzcyk6IMOBcCBk4bulbmcgaMOgbSBjbGFzcygpIGNobyB04burbmcgY+G7mXQgxJHhu4Mga2nhu4NtIHRyYSBraeG7g3UgZOG7ryBsaeG7h3UuIEvhur90IHF14bqjIHRy4bqjIHbhu4EgbMOgIG3hu5l0IHZlY3RvciBoaeG7g24gdGjhu4sgdMOqbiBj4buZdCB2w6AgbG/huqFpIGThu68gbGnhu4d1IHTGsMahbmcg4bupbmcuDQoNCi0gTuG6v3Uga+G6v3QgcXXhuqMgbMOgICJmYWN0b3IiIGNobyB04bqldCBj4bqjIGPDoWMgY+G7mXQg4oaSIGNodXnhu4NuIMSR4buVaSB0aMOgbmggY8O0bmcuDQoNCmBgYHtyfQ0Kc2FwcGx5KGRhdCwgY2xhc3MpDQpgYGANCg0KKipOaOG6rW4geMOpdCoqIDogS+G6v3QgcXXhuqMgdGh1IMSRxrDhu6NjIHRvw6BuIGLhu5kgY8OhYyBiaeG6v24gxJHDoyDEkcaw4bujYyBjaHV54buDbiDEkeG7lWkgdGjDoG5oIGThuqFuZyBmYWN0b3IuDQoNCiMjICoqUEjhuqZOIDI6IFBIw4JOIFTDjUNIIE3DlCBU4bqiIEJJ4bq+TiDEkOG7ik5IIFTDjU5IKioNCg0KYGBge3J9DQppbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIiwgcmVwb3MgPSAiaHR0cHM6Ly9jbG91ZC5yLXByb2plY3Qub3JnIikNCmxpYnJhcnkoZ2dwbG90MikNCmBgYA0KDQoNCiMjIyAqKjIuMS4gQWdlIC0gxJDhu5kgdHXhu5VpKioNCg0KIyMjIyAqKjIuMS4xIFRo4buRbmcga8OqIHThuqduIHPhu5EsIHThuqduIHN14bqldCB2w6AgdHLhu7FjIHF1YW4gaMOzYSoqDQoNCiMjIyMjICoqMi4xLjEuMSBU4bqnbiBz4buRLCB04bqnbiBzdeG6pXQqKg0KYGBge3J9DQp0YWJfYWdlIDwtIHRhYmxlKGRhdCRBZ2UpDQp0YWJfYWdlDQp0YWJsZShkYXQkQWdlKS9zdW0obnJvdyhkYXQpKQ0KYGBgDQoNCiMjIyMjICoqMi4xLjEuMiBUcuG7sWMgcXVhbiBob8OhKioNCmBgYHtyfQ0KZ2dwbG90KGRhdCwgYWVzKHggPSBBZ2UpKSArDQogIGdlb21fYmFyKGZpbGwgPSAic3RlZWxibHVlIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICBsYWJzKHRpdGxlID0gIlThuqduIHN14bqldCB0aGVvIMSR4buZIHR14buVaSIsIHggPSAixJDhu5kgdHXhu5VpIiwgeSA9ICJT4buRIGzGsOG7o25nIikNCmBgYA0KDQojIyMjICoqMi4xLjIgTmjhuq1uIHjDqXQqKg0KDQotIMSQ4buZIHR14buVaSBj4bunYSBuZ8aw4budaSB0aGFtIGdpYSBraOG6o28gc8OhdCBjaOG7pyB54bq/dSB04bqtcCB0cnVuZyB2w6BvIGtob+G6o25nIHThu6sgMTkgxJHhur9uIDIyIHR14buVaSwgY2hp4bq/bSBraG/huqNuZyA4OS41JSB04buVbmcgc+G7kSBt4bqrdS4gQ+G7pSB0aOG7gzoNCiAgLSBUdeG7lWkgMjAgbMOgIG5ow7NtIGNoaeG6v20gdOG7tyBs4buHIGNhbyBuaOG6pXQgKDIzLjQlKSwgdGhlbyBzw6F0IGzDoCB0deG7lWkgMTkgKDIzLjElKSB2w6AgdHXhu5VpIDIxICgyMi4xJSkuDQogIC0gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgcGjhuqduIGzhu5tuIG5nxrDhu51pIHRoYW0gZ2lhIMSRYW5nIHRyb25nIMSR4buZIHR14buVaSBzaW5oIHZpw6puIMSR4bqhaSBo4buNYy4NCi0gQ8OhYyBuaMOzbSB0deG7lWkgMjMgdsOgIDI0IGPDsyB04bu3IGzhu4cgdGjhuqVwIGjGoW4gxJHDoW5nIGvhu4MgKGNo4buJIGtob+G6o25nIDguNSUgdOG7lW5nIHPhu5EgbeG6q3UpLCBjw7MgdGjhu4MgbMOgIG5ow7NtIHNpbmggdmnDqm4gbsSDbSBjdeG7kWksIGjhu41jIGNhbyBo4buNYyBob+G6t2MgxJHDoyB04buRdCBuZ2hp4buHcC4NCi0gVHXhu5VpIDE4IGNoaeG6v20gbeG7mXQgcGjhuqduIHLhuqV0IG5o4buPICgxLjk5JSksIGNobyB0aOG6pXkgbmfGsOG7nWkgdGhhbSBnaWEga2jhuqNvIHPDoXQgY8OzIMSR4buZIHR14buVaSBi4bqvdCDEkeG6p3UgdOG7qyBnaWFpIMSRb+G6oW4gbeG7m2kgdsOgbyDEkeG6oWkgaOG7jWMgaG/hurdjIGN14buRaSB0cnVuZyBo4buNYyBwaOG7lSB0aMO0bmcuDQoNCi0gUGjDom4gYuG7kSDEkeG7mSB0deG7lWkga2jDoSB04bqtcCB0cnVuZyB2w6AgbOG7h2NoIHRyw6FpIG5o4bq5LCBjaG8gdGjhuqV5IMSR4buRaSB0xrDhu6NuZyBraOG6o28gc8OhdCB0xrDGoW5nIMSR4buRaSDEkeG7k25nIG5o4bqldCB24buBIG3hurd0IMSR4buZIHR14buVaSDigJMgY2jhu6cgeeG6v3UgbMOgIHRoYW5oIG5pw6puLCBzaW5oIHZpw6puLg0KLSDEkGnhu4F1IG7DoHkgcGjDuSBo4bujcCB24bubaSBt4bulYyB0acOqdSBuZ2hpw6puIGPhu6l1IGxpw6puIHF1YW4gxJHhur9uIG5naGnhu4duIG3huqFuZyB4w6MgaOG7mWkgdsOgIGPDoWMgbeG7kWkgcXVhbiBo4buHLCB2w6wgxJHDonkgbMOgIG5ow7NtIHR14buVaSBz4butIGThu6VuZyBt4bqhbmcgeMOjIGjhu5lpIHRoxrDhu51uZyB4dXnDqm4gdsOgIGThu4UgYuG7iyDhuqNuaCBoxrDhu59uZyBuaOG6pXQuDQoNCiMjIyMgKioyLjEuMyBL4bq/dCBsdeG6rW4qKg0KDQpCaeG6v24gKipBZ2UqKiB0cm9uZyBi4buZIGThu68gbGnhu4d1IHRo4buDIGhp4buHbiByw7UgcuG6sW5nIMSR4buRaSB0xrDhu6NuZyBuZ2hpw6puIGPhu6l1IGNo4bunIHnhur91IGzDoCBzaW5oIHZpw6puIHRyb25nIMSR4buZIHR14buVaSB04burIDE5IMSR4bq/biAyMiwgduG7m2kgxJHhu5kgdHXhu5VpIDIwIGzDoCBwaOG7lSBiaeG6v24gbmjhuqV0LiDEkMOieSBsw6AgbmjDs20gdHXhu5VpIHF1YW4gdHLhu41uZyDEkeG7gyBuZ2hpw6puIGPhu6l1IGPDoWMgduG6pW4gxJHhu4EgbGnDqm4gcXVhbiDEkeG6v24gaMOgbmggdmkgc+G7rSBk4bulbmcgbeG6oW5nIHjDoyBo4buZaSwgc+G7qWMga2jhu49lIHTDom0gdGjhuqduIHbDoCBjaOG6pXQgbMaw4bujbmcgY8OhYyBt4buRaSBxdWFuIGjhu4csIGRvIGjhu40gxJFhbmcgdHJvbmcgZ2lhaSDEkW/huqFuIHBow6F0IHRyaeG7g24gbeG6oW5oIHbhu4EgbeG6t3QgeMOjIGjhu5lpIHbDoCB0w6JtIGzDvS4NCg0KIyMjICoqMi4yIEdlbmRlciAtIEdp4bubaSB0w61uaCoqDQoNCiMjIyMgKioyLjIuMSBUaOG7kW5nIGvDqiB04bqnbiBz4buRLCB04bqnbiBzdeG6pXQgdsOgIHRy4buxYyBxdWFuIGjDs2EqKg0KDQpgYGB7cn0NCmluc3RhbGwucGFja2FnZXMoImRwbHlyIiwgcmVwb3MgPSAiaHR0cHM6Ly9jbG91ZC5yLXByb2plY3Qub3JnIikNCmxpYnJhcnkoZHBseXIpDQpgYGANCg0KDQojIyMjIyAqKjIuMi4xLjEgVOG6p24gc+G7kSwgdOG6p24gc3XhuqV0KioNCmBgYHtyfQ0KdGFiX2dlbmRlciA8LSB0YWJsZShkYXQkR2VuZGVyKQ0KdGFiX2dlbmRlcg0KdGFibGUoZGF0JEdlbmRlcikvc3VtKG5yb3coZGF0KSkNCmBgYA0KDQojIyMjIyAqKjIuMi4xLjIgVHLhu7FjIHF1YW4gaG/DoSoqDQpgYGB7cn0NCiMgVOG6oW8gZGF0YWZyYW1lIHThu6sgYuG6o25nIHThuqduIHPhu5ENCmdlbmRlcl9mcmVxIDwtIGFzLmRhdGEuZnJhbWUodGFiX2dlbmRlcikNCmNvbG5hbWVzKGdlbmRlcl9mcmVxKSA8LSBjKCJHZW5kZXIiLCAiRnJlcXVlbmN5IikNCg0KIyBUw61uaCBwaOG6p24gdHLEg20NCmdlbmRlcl9mcmVxJFBlcmNlbnRhZ2UgPC0gZ2VuZGVyX2ZyZXEkRnJlcXVlbmN5IC8gc3VtKGdlbmRlcl9mcmVxJEZyZXF1ZW5jeSkgKiAxMDANCg0KIyBU4bqhbyBuaMOjbiBjaOG7iSBn4buTbSBwaOG6p24gdHLEg20NCmdlbmRlcl9mcmVxJExhYmVsIDwtIHBhc3RlMChyb3VuZChnZW5kZXJfZnJlcSRQZXJjZW50YWdlLCAxKSwgIiUiKQ0KDQojIFbhur0gYmnhu4N1IMSR4buTIHRyw7JuIHbhu5tpIG5ow6NuIGNo4buJIHBo4bqnbiB0csSDbQ0KZ2dwbG90KGdlbmRlcl9mcmVxLCBhZXMoeCA9ICIiLCB5ID0gUGVyY2VudGFnZSwgZmlsbCA9IEdlbmRlcikpICsNCiAgZ2VvbV9jb2wod2lkdGggPSAxLCBjb2xvciA9ICJ3aGl0ZSIpICsNCiAgY29vcmRfcG9sYXIodGhldGEgPSAieSIpICsNCiAgdGhlbWVfdm9pZCgpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IExhYmVsKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIHNpemUgPSA1KSArDQogIGxhYnModGl0bGUgPSAiUGjDom4gYuG7kSBnaeG7m2kgdMOtbmggbmfGsOG7nWkgdGhhbSBnaWEga2jhuqNvIHPDoXQiKSArDQogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiUGFzdGVsMSIpDQoNCmBgYA0KDQoqKkdp4bqjaSB0aMOtY2ggY29kZSoqDQoNCi0gdGFiX2dlbmRlciBsw6AgYuG6o25nIHThuqduIHPhu5Ega2nhu4N1IHRhYmxlIMSR4bq/bSBz4buRIGzGsOG7o25nIHThu6tuZyBuaMOzbSB0cm9uZyBiaeG6v24gR2VuZGVyLg0KLSBhcy5kYXRhLmZyYW1lKHRhYl9nZW5kZXIpIGNodXnhu4NuIGLhuqNuZyB04bqnbiBz4buRIHRow6BuaCBk4bqhbmcgZGF0YSBmcmFtZSDEkeG7gyBk4buFIHjhu60gbMO9Lg0KLSDEkOG7lWkgdMOqbiBj4buZdCB0aMOgbmggIkdlbmRlciIgKG5ow7NtIGdp4bubaSB0w61uaCkgdsOgICJGcmVxdWVuY3kiIChz4buRIGzGsOG7o25nKS4NCi0gxJDhu5VpIHTDqm4gY+G7mXQgdGjDoG5oICJHZW5kZXIiIChuaMOzbSBnaeG7m2kgdMOtbmgpIHbDoCAiRnJlcXVlbmN5IiAoc+G7kSBsxrDhu6NuZykuDQoNCi0gdGFiX2dlbmRlciBsw6AgYuG6o25nIHThuqduIHPhu5Ega2nhu4N1IHRhYmxlIMSR4bq/bSBz4buRIGzGsOG7o25nIHThu6tuZyBuaMOzbSB0cm9uZyBiaeG6v24gR2VuZGVyLg0KLSBhcy5kYXRhLmZyYW1lKHRhYl9nZW5kZXIpIGNodXnhu4NuIGLhuqNuZyB04bqnbiBz4buRIHRow6BuaCBk4bqhbmcgZGF0YSBmcmFtZSDEkeG7gyBk4buFIHjhu60gbMO9Lg0KDQotIFThuqFvIGPhu5l0IExhYmVsIMSR4buDIGTDuW5nIGzDoG0gbmjDo24gdHLDqm4gYmnhu4N1IMSR4buTLg0KLSBEw7luZyByb3VuZCgpIGzDoG0gdHLDsm4gc+G7kSBwaOG6p24gdHLEg20gxJHhur9uIDEgY2jhu68gc+G7kSB0aOG6rXAgcGjDom4uDQotIEvhur90IGjhu6NwIHBo4bqnbiB0csSDbSB24bubaSBrw70gaGnhu4d1ICUgdGjDoG5oIGNodeG7l2kga8O9IHThu7EuDQoNCi0gZ2dwbG90KGdlbmRlcl9mcmVxLCBhZXMoeCA9ICIiLCB5ID0gUGVyY2VudGFnZSwgZmlsbCA9IEdlbmRlcikpOg0KICAtIEto4bufaSB04bqhbyBiaeG7g3UgxJHhu5MgduG7m2kgZOG7ryBsaeG7h3UgZ2VuZGVyX2ZyZXEuDQogIC0geCA9ICIiOiB04bqhbyAxIG5ow7NtIGR1eSBuaOG6pXQgKHThuqFvIGPhu5l0IHRy4buRbmcpLCB2w6wgYmnhu4N1IMSR4buTIHRyw7JuIGtow7RuZyBwaMOibiB0aGVvIHRy4bulYyBYLg0KICAtIHkgPSBQZXJjZW50YWdlOiBjaGnhu4F1IGNhbyBj4buZdCAodHLGsOG7m2Mga2hpIGNodXnhu4NuIHRow6BuaCB0csOybikgbMOgIHBo4bqnbiB0csSDbS4NCiAgLSBmaWxsID0gR2VuZGVyOiB0w7QgbcOgdSB0aGVvIG5ow7NtIGdp4bubaSB0w61uaC4NCi0gZ2VvbV9jb2wod2lkdGggPSAxLCBjb2xvciA9ICJ3aGl0ZSIpOg0KICAtIFbhur0gY+G7mXQgKGJhciBjaGFydCkgduG7m2kgY2hp4buBdSBy4buZbmcgYuG6sW5nIDEgKMSR4bqneSDEkeG7pykuDQogIC0gY29sb3IgPSAid2hpdGUiIHZp4buBbiB0cuG6r25nIGdp4buvYSBjw6FjIG3DumkgZ2nDunAgYmnhu4N1IMSR4buTIGThu4UgbmjDrG4gaMahbi4NCi0gY29vcmRfcG9sYXIodGhldGEgPSAieSIpOg0KICAtIEJp4bq/biBiaeG7g3UgxJHhu5MgY+G7mXQgdGjDoG5oIGJp4buDdSDEkeG7kyB0csOybiAocG9sYXIgY29vcmRpbmF0ZXMpLg0KICAtIHRoZXRhID0gInkiIGNodXnhu4NuIHRy4bulYyB5IHRow6BuaCBnw7NjIHRyb25nIGJp4buDdSDEkeG7kyB0csOybi4NCi0gdGhlbWVfdm9pZCgpOg0KICAtIExv4bqhaSBi4buPIHRvw6BuIGLhu5kgY8OhYyB0cuG7pWMsIGzGsOG7m2ksIG5ow6NuIHRy4bulYywuLi4gxJHhu4MgYmnhu4N1IMSR4buTIGfhu41uIMSR4bq5cCwgcGjDuSBo4bujcCB24bubaSBiaeG7g3UgxJHhu5MgdHLDsm4uDQotIGdlb21fdGV4dChhZXMobGFiZWwgPSBMYWJlbCksIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLCBzaXplID0gNSk6DQogIC0gVGjDqm0gY2jhu68gbmjDo24gdHLDqm4gdOG7q25nIG3DumkuDQogIC0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpOiDEkeG6t3QgY2jhu68g4bufIGdp4buvYSBjaGnhu4F1IGThu41jIGPhu6dhIHThu6tuZyBtw7ppLg0KICAtIHNpemUgPSA1OiBrw61jaCB0aMaw4bubYyBjaOG7ry4NCi0gbGFicyh0aXRsZSA9ICJQaMOibiBi4buRIGdp4bubaSB0w61uaCBuZ8aw4budaSB0aGFtIGdpYSBraOG6o28gc8OhdCIpOg0KICAtIFRow6ptIHRpw6p1IMSR4buBIGNobyBiaeG7g3UgxJHhu5MuDQotIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiUGFzdGVsMSIpOg0KICAtIENo4buNbiBi4bqjbmcgbcOgdSBuaOG6uSBuaMOgbmcgKFBhc3RlbDEpIGNobyBjw6FjIG3DumkgYmnhu4N1IMSR4buTLCBnacO6cCBtw6B1IHPhuq9jIGjDoGkgaMOyYS4NCiAgDQojIyMjICoqMi4yLjIgTmjhuq1uIHjDqXQqKg0KDQotIFThu5VuZyBz4buRIHF1YW4gc8OhdCB0cm9uZyBi4buZIGThu68gbGnhu4d1IGzDoCA3MDUsIHRyb25nIMSRw7MgY8OzIDM1MyBjw6EgbmjDom4gdGh14buZYyBuaMOzbSBGZW1hbGUgdsOgIDM1MiBjw6EgbmjDom4gdGh14buZYyBuaMOzbSBNYWxlLg0KLSBU4bqnbiBz4buRIHPhu60gZOG7pW5nIG3huqFuZyB4w6MgaOG7mWkgY+G7p2EgaGFpIG5ow7NtIGfhuqduIG5oxrAgYuG6sW5nIG5oYXUsIHbhu5tpIG7hu68gY2hp4bq/bSBraG/huqNuZyA1MC4wNyUgdsOgIG5hbSBjaGnhur9tIGtob+G6o25nIDQ5LjkzJS4NCi0gU+G7sSBwaMOibiBi4buRIGdp4bubaSB0w61uaCB0cm9uZyBt4bqrdSBuZ2hpw6puIGPhu6l1IGzDoCBraMOhIGPDom4gYuG6sW5nLCBraMO0bmcgY8OzIG5ow7NtIG7DoG8gY2hp4bq/bSDGsHUgdGjhur8gdsaw4bujdCB0cuG7mWkuDQotIMSQaeG7gXUgbsOgeSBy4bqldCBxdWFuIHRy4buNbmcgdsOgIHTDrWNoIGPhu7FjIHbDrDoNCiAgLSBHacO6cCBnaeG6o20gc2FpIGzhu4djaCBnaeG7m2kgdMOtbmggKGdlbmRlciBiaWFzKSB0cm9uZyBxdcOhIHRyw6xuaCBwaMOibiB0w61jaCBk4buvIGxp4buHdS4NCi0gQ2hvIHBow6lwIHNvIHPDoW5oIGtow6FjaCBxdWFuIGdp4buvYSBuYW0gdsOgIG7hu68gduG7gToNCiAgLSBN4bupYyDEkeG7mSBuZ2hp4buHbiBt4bqhbmcgeMOjIGjhu5lpLA0KICAtIFRo4budaSBnaWFuIHPhu60gZOG7pW5nIHRydW5nIGLDrG5oIG3hu5dpIG5nw6B5LA0KICAtIOG6om5oIGjGsOG7n25nIMSR4bq/biBo4buNYyB04bqtcCwgZ2nhuqVjIG5n4bunLCB0w6JtIGzDvSwgdsOgIMSR4bq3YyBiaeG7h3QgbMOgIGPDoWMgeHVuZyDEkeG7mXQgdHJvbmcgbeG7kWkgcXVhbiBo4buHLg0KDQojIyMjICoqMi4yLjMgxJDDoW5oIGdpw6EqKg0KDQotIFThu7cgbOG7hyBnaeG7m2kgdMOtbmggY8OibiBi4bqxbmcgdHJvbmcgYuG7mSBk4buvIGxp4buHdSBnacO6cCB0xINuZyB0w61uaCDEkeG6oWkgZGnhu4duIHbDoCDEkeG7mSB0aW4gY+G6rXkgY2hvIGPDoWMgcGjDom4gdMOtY2ggdGnhur9wIHRoZW8gduG7gSBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIGdp4bubaSB0w61uaCB2w6AgaMOgbmggdmkgbmdoaeG7h24gbeG6oW5nIHjDoyBo4buZaSwgY8WpbmcgbmjGsCB0w6FjIMSR4buZbmcgY+G7p2EgbsOzIMSR4bq/biBjw6FjIG3hu5FpIHF1YW4gaOG7hyBjw6EgbmjDom4uIMSQw6J5IGzDoCBt4buZdCBu4buBbiB04bqjbmcgdOG7kXQgxJHhu4Mga2jDoW0gcGjDoSBzw6J1IGjGoW4gY8OhYyBt4bqrdSBow6BuaCB2aSBraMOhYyBiaeG7h3QgZ2nhu69hIG5hbSB2w6AgbuG7ryB0cm9uZyBi4buRaSBj4bqjbmggeMOjIGjhu5lpIGhp4buHbiDEkeG6oWkuDQoNCiMjIyAqKjIuMyBBY2FkZW1pYyBMZXZlbCAtIFRyw6xuaCDEkeG7mSBo4buNYyB24bqlbioqDQoNCiMjIyMgKioyLjMuMSBUaOG7kW5nIGvDqiBtw7QgdOG6oyB04bqnbiBz4buRLCB04bqnbiBzdeG6pXQsIHRy4buxYyBxdWFuIGhvw6EqKg0KDQojIyMjIyAqKjIuMy4xLjEgQuG6o25nIHThuqduIHPhu5EsIHThuqduIHN14bqldCoqDQoNCmBgYHtyfQ0KdGFiX2FjYWRlbWljIDwtIHRhYmxlKGRhdCRBY2FkZW1pY19MZXZlbCkNCnRhYl9hY2FkZW1pYw0KdGFibGUoZGF0JEFjYWRlbWljX0xldmVsKS9zdW0obnJvdyhkYXQpKQ0KYGBgDQoNCiMjIyMgKioyLjMuMS4yIFRy4buxYyBxdWFuIGhvw6EqKg0KDQpgYGB7cn0NCiMgVOG6oW8gYuG6o25nIHThuqduIHPhu5ENCnRhYl9hY2FkZW1pYyA8LSB0YWJsZShkYXQkQWNhZGVtaWNfTGV2ZWwpDQoNCiMgQ2h1eeG7g24gc2FuZyBkYXRhIGZyYW1lDQphY2FkZW1pY19mcmVxIDwtIGFzLmRhdGEuZnJhbWUodGFiX2FjYWRlbWljKQ0KY29sbmFtZXMoYWNhZGVtaWNfZnJlcSkgPC0gYygiQWNhZGVtaWNfTGV2ZWwiLCAiRnJlcXVlbmN5IikNCg0KIyBUw61uaCBwaOG6p24gdHLEg20NCmFjYWRlbWljX2ZyZXEkUGVyY2VudGFnZSA8LSBhY2FkZW1pY19mcmVxJEZyZXF1ZW5jeSAvIHN1bShhY2FkZW1pY19mcmVxJEZyZXF1ZW5jeSkgKiAxMDANCg0KIyBU4bqhbyBuaMOjbiBjaOG7iSBn4buTbSBwaOG6p24gdHLEg20NCmFjYWRlbWljX2ZyZXEkTGFiZWwgPC0gcGFzdGUwKHJvdW5kKGFjYWRlbWljX2ZyZXEkUGVyY2VudGFnZSwgMSksICIlIikNCg0KZ2dwbG90KGFjYWRlbWljX2ZyZXEsIGFlcyh4ID0gIiIsIHkgPSBQZXJjZW50YWdlLCBmaWxsID0gQWNhZGVtaWNfTGV2ZWwpKSArDQogIGdlb21fY29sKHdpZHRoID0gMSwgY29sb3IgPSAid2hpdGUiKSArDQogIGNvb3JkX3BvbGFyKHRoZXRhID0gInkiKSArDQogIHRoZW1lX3ZvaWQoKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBMYWJlbCksIA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIHNpemUgPSA0KSArDQogIGxhYnModGl0bGUgPSAiUGjDom4gYuG7kSB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gY+G7p2EgbmfGsOG7nWkgdGhhbSBnaWEiKSArDQogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiU2V0MyIpDQpgYGANCg0KIyMjIyAqKjIuMy4yIE5o4bqtbiB4w6l0KioNCg0KLSBQaMOibiBi4buRIGNo4bunIHnhur91IOG7nyBi4bqtYyDEkeG6oWkgaOG7jWMgdsOgIHNhdSDEkeG6oWkgaOG7jWM6DQogIC0gSMahbiA5NiUgbmfGsOG7nWkgdGhhbSBnaWEgdGh14buZYyBoYWkgbmjDs206IFVuZGVyZ3JhZHVhdGUgKDUwLjA3JSkgdsOgIEdyYWR1YXRlICg0Ni4xMCUpLg0KICAtIENo4buJIGPDsyAzLjgzJSBsw6AgaOG7jWMgc2luaCB0cnVuZyBo4buNYyAoSGlnaCBTY2hvb2wpLCBjaG8gdGjhuqV5IG5ow7NtIG7DoHkgY2hp4bq/bSB04bu3IGzhu4cgcuG6pXQgbmjhu48gdHJvbmcga2jhuqNvIHPDoXQuDQotIFBow7kgaOG7o3AgduG7m2kgY2jhu6cgxJHhu4EgbmdoacOqbiBj4bupdToNCiAgLSBWw6wgYuG7mSBk4buvIGxp4buHdSBsacOqbiBxdWFuIMSR4bq/biBuZ2hp4buHbiBt4bqhbmcgeMOjIGjhu5lpIHbDoCBt4buRaSBxdWFuIGjhu4cgY8OhIG5ow6JuLCBuaMOzbSBzaW5oIHZpw6puIHbDoCBo4buNYyB2acOqbiBzYXUgxJHhuqFpIGjhu41jIGzDoCDEkeG7kWkgdMaw4bujbmcgcGjDuSBo4bujcCDEkeG7gyBuZ2hpw6puIGPhu6l1Og0KICAtIEjhu40gc+G7rSBk4bulbmcgbeG6oW5nIHjDoyBo4buZaSB0aMaw4budbmcgeHV5w6puLg0KICAtIEPDsyB0aOG7gyDEkWFuZyB0cm9uZyDEkeG7mSB0deG7lWkgZOG7hSBi4buLIOG6o25oIGjGsOG7n25nIHbhu4EgbeG6t3QgdMOibSBsw70sIHjDoyBo4buZaSwgaOG7jWMgdOG6rXAgdsOgIGPDoWMgbeG7kWkgcXVhbiBo4buHIGPDoSBuaMOibi4NCi0gVMOtbmggxJHhuqFpIGRp4buHbjoNCiAgLSBT4buxIHBow6JuIGLhu5EgbsOgeSBjw7MgdGjhu4MgcGjhuqNuIMOhbmggxJHhu5FpIHTGsOG7o25nIG3hu6VjIHRpw6p1IGPhu6dhIGto4bqjbyBzw6F0IGzDoCBzaW5oIHZpw6puIHbDoCBuZ8aw4budaSB0cuG6uyB0deG7lWkuDQogIC0gVHV5IG5oacOqbiwgdsOsIHPhu5EgbMaw4bujbmcgSGlnaCBTY2hvb2wgcuG6pXQgdGjhuqVwLCBj4bqnbiBsxrB1IMO9IG7hur91IHRo4buxYyBoaeG7h24gcGjDom4gdMOtY2ggc28gc8OhbmggZ2nhu69hIGPDoWMgbmjDs20gaOG7jWMgduG6pW4g4oCUIG5ow7NtIG7DoHkgY8OzIHRo4buDIGtow7RuZyDEkeG7pyBz4buRIGxp4buHdSDEkeG7gyDEkcawYSByYSBr4bq/dCBsdeG6rW4gxJHDoW5nIHRpbiBj4bqteS4NCiAgDQojIyMjICoqMi4zLjMgS+G6v3QgbHXhuq1uKioNCg0KLSBQaMOibiBi4buRIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiB0cm9uZyBi4buZIGThu68gbGnhu4d1IHThuq1wIHRydW5nIGNo4bunIHnhur91IHbDoG8gc2luaCB2acOqbiDEkeG6oWkgaOG7jWMgdsOgIHNhdSDEkeG6oWkgaOG7jWMsIHBow7kgaOG7o3AgduG7m2kgbeG7pWMgdGnDqnUgbmdoacOqbiBj4bupdS4gVHV5IG5oacOqbiwgY+G6p24gY+G6qW4gdHLhu41uZyBraGkgcGjDom4gdMOtY2ggbmjDs20gaOG7jWMgc2luaCBj4bqlcCBiYSBkbyBz4buRIGzGsOG7o25nIHF1w6Egw610LCB0csOhbmggxJHGsGEgcmEga+G6v3QgbHXhuq1uIGtow6FpIHF1w6F0IHThu6sgbmjDs20gbmjhu48gbsOgeS4NCg0KIyMjICoqMi40IE1vc3QgdXNlZCBwbGF0Zm9ybSAtIG7hu4FuIHThuqNuZyBt4bqhbmcgeMOjIGjhu5lpKioNCg0KIyMjIyAqKjIuNC4xIFRo4buRbmcga8OqIG3DtCB04bqjIHThuqduIHPhu5EsIHThuqduIHN14bqldCwgdHLhu7FjIHF1YW4gaG/DoSoqDQoNCiMjIyMjICoqMi40LjEuMSBC4bqjbmcgdOG6p24gc+G7kSwgdOG6p24gc3XhuqV0KioNCg0KYGBge3J9DQp0YWJfcGxhdGZvcm0gPC0gdGFibGUoZGF0JE1vc3RfVXNlZF9QbGF0Zm9ybSkNCnRhYl9wbGF0Zm9ybQ0KdGFibGUoZGF0JE1vc3RfVXNlZF9QbGF0Zm9ybSkvc3VtKG5yb3coZGF0KSkNCmBgYA0KDQojIyMjICoqMi40LjEuMiBUcuG7sWMgcXVhbiBob8OhKioNCg0KYGBge3J9DQojIENodXnhu4NuIHNhbmcgZGF0YSBmcmFtZQ0KcGxhdGZvcm1fZnJlcSA8LSBhcy5kYXRhLmZyYW1lKHRhYl9wbGF0Zm9ybSkNCmNvbG5hbWVzKHBsYXRmb3JtX2ZyZXEpIDwtIGMoIlBsYXRmb3JtIiwgIkZyZXF1ZW5jeSIpDQoNCiMgVuG6vSBiaeG7g3UgxJHhu5MgDQpnZ3Bsb3QocGxhdGZvcm1fZnJlcSwgYWVzKHggPSByZW9yZGVyKFBsYXRmb3JtLCAtRnJlcXVlbmN5KSwgeSA9IEZyZXF1ZW5jeSwgZmlsbCA9IFBsYXRmb3JtKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAwLjcpICsNCiAgbGFicyh0aXRsZSA9ICJO4buBbiB04bqjbmcgbeG6oW5nIHjDoyBo4buZaSDEkcaw4bujYyBz4butIGThu6VuZyBuaGnhu4F1IG5o4bqldCIsDQogICAgICAgeCA9ICJO4buBbiB04bqjbmciLA0KICAgICAgIHkgPSAiU+G7kSBsxrDhu6NuZyBuZ8aw4budaSBkw7luZyIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkNCmBgYA0KDQoqKkdp4bqjaSB0aMOtY2ggY29kZSoqDQoNCvCflLkgZ2dwbG90KC4uLik6IGjDoG0ga2jhu59pIHThuqFvIGJp4buDdSDEkeG7kyB04burIGfDs2kgZ2dwbG90Mi4NCg0K8J+UuSBwbGF0Zm9ybV9mcmVxOiBsw6AgZGF0YSBmcmFtZSBjaOG7qWEgaGFpIGPhu5l0OiBQbGF0Zm9ybSAodMOqbiBu4buBbiB04bqjbmcpIHbDoCBGcmVxdWVuY3kgKHThuqduIHPhu5EgbmfGsOG7nWkgZMO5bmcpLg0KDQrwn5S5IGFlcyguLi4pOiBraGFpIGLDoW8gInRo4bqpbSBt4bu5IiDigJMgbmdoxKlhIGzDoCBi4bqhbiBjaOG7iSDEkeG7i25oIGPDoWMgYmnhur9uIG7DoG8gZMO5bmcgY2hvIHRy4bulYyB2w6AgbcOgdToNCg0KICAtIHggPSByZW9yZGVyKFBsYXRmb3JtLCAtRnJlcXVlbmN5KTogdHLhu6VjIFggbMOgIHTDqm4gY8OhYyBu4buBbiB04bqjbmcsIMSRxrDhu6NjIHPhuq9wIHjhur9wIGdp4bqjbSBk4bqnbiB0aGVvIHThuqduIHPhu5EgKGdpw7pwIGJp4buDdSDEkeG7kyBk4buFIMSR4buNYyBoxqFuKS4NCiAgLSB5ID0gRnJlcXVlbmN5OiB0cuG7pWMgWSBsw6Agc+G7kSBsxrDhu6NuZyBuZ8aw4budaSBjaOG7jW4gbuG7gW4gdOG6o25nIMSRw7MuDQogIC0gZmlsbCA9IFBsYXRmb3JtOiB0w7QgbcOgdSB04burbmcgY+G7mXQgdGhlbyBu4buBbiB04bqjbmcgdMawxqFuZyDhu6luZy4NCg0K8J+UuSBnZW9tX2JhcigpOiBow6BtIHbhur0gYmnhu4N1IMSR4buTIGPhu5l0Lg0KDQrwn5S5IHN0YXQgPSAiaWRlbnRpdHkiOiBiw6FvIHLhurFuZyBi4bqhbiDEkcOjIGN1bmcgY+G6pXAgc+G6tW4gZ2nDoSB0cuG7iyB04bqnbiBz4buRLCBraMO0bmcgY+G6p24gZ2dwbG90IHThu7EgxJHhur9tIGzhuqFpLg0KDQrwn5S5IHdpZHRoID0gMC43OiDEkeG7mSBy4buZbmcgY+G7p2EgY8OhYyBj4buZdCAoMC43IGzDoCB24burYSDEkeG6uXApLg0KDQojIyMjICoqMi40LjIgTmjhuq1uIHjDqXQqKg0KDQrwn5S5IEluc3RhZ3JhbSBsw6AgbuG7gW4gdOG6o25nIHBo4buVIGJp4bq/biBuaOG6pXQ6DQoNCsSQxrDhu6NjIHPhu60gZOG7pW5nIGLhu59pIGjGoW4gMzUlIG5nxrDhu51pIHRoYW0gZ2lhIGto4bqjbyBzw6F0Lg0KxJBp4buBdSBuw6B5IHBow7kgaOG7o3AgduG7m2kgdGjhu7FjIHThur8ga2hpIEluc3RhZ3JhbSBsw6AgbeG6oW5nIHjDoyBo4buZaSBwaOG7lSBiaeG6v24gbmjhuqV0IHRyb25nIGdp4bubaSB0cuG6uywgxJHhurdjIGJp4buHdCBsw6Agc2luaCB2acOqbiDigJMgbmjDs20gY2hp4bq/bSB04bu3IGzhu4cgbOG7m24gdHJvbmcgYuG7mSBk4buvIGxp4buHdS4NCvCflLkgVGlrVG9rIHbDoCBGYWNlYm9vayBnaeG7ryB24buLIHRyw60gdGnhur9wIHRoZW86DQoNClRpa1RvazogMjEuODQlIOKAkyBt4buZdCB04bu3IGzhu4cgY2FvLCBwaOG6o24gw6FuaCB4dSBoxrDhu5tuZyB0acOqdSB0aOG7pSBu4buZaSBkdW5nIG5n4bqvbiwgbmhhbmggdsOgIGdp4bqjaSB0csOtLg0KRmFjZWJvb2s6IHR1eSBsw6AgbuG7gW4gdOG6o25nIGzDonUgxJHhu51pIGjGoW4gbmjGsG5nIHbhuqtuIMSRxrDhu6NjIDE3LjQ1JSBuZ8aw4budaSBkw7luZyBjaOG7jW4gbMOgIG7hu4FuIHThuqNuZyBjaMOtbmguDQrwn5S5IEPDoWMgbuG7gW4gdOG6o25nIGPDsm4gbOG6oWkgY8OzIHThu7cgbOG7hyBy4bqldCB0aOG6pXA6DQoNCldoYXRzQXBwLCBUd2l0dGVyLCBMaW5rZWRJbiwgV2VDaGF0LCBTbmFwY2hhdCwgTElORSwgS2FrYW9UYWxrLCBWS29udGFrdGUsLi4uIMSR4buBdSBkxrDhu5tpIDEwJS4NCsSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IG5ow7NtIGto4bqjbyBzw6F0IHThuq1wIHRydW5nIHPhu60gZOG7pW5nIG3huqFuZyB4w6MgaOG7mWkgxJHhu4MgeGVtIG7hu5lpIGR1bmcsIGdp4bqjaSB0csOtLCBoxqFuIGzDoCBuaOG6r24gdGluIGNodXnDqm4gbmdoaeG7h3AgaGF5IG3huqFuZyBsxrDhu5tpIG5naOG7gSBuZ2hp4buHcC4NCg0KIyMjIyAqKjIuNC4zIEvhur90IGx14bqtbioqDQoNCi0gQ+G6pXUgdHLDumMgaMOgbmggdmkgc+G7rSBk4bulbmcgbeG6oW5nIHjDoyBo4buZaSB0aGnDqm4gduG7gSB0aOG7iyBnacOhYyB2w6AgZ2nhuqNpIHRyw60sIHbhu5tpIEluc3RhZ3JhbSB2w6AgVGlrVG9rIGzDoCBs4buxYSBjaOG7jW4gY2jhu6cgxJHhuqFvLg0KLSBGYWNlYm9vayB24bqrbiBkdXkgdHLDrCDEkcaw4bujYyBt4bupYyDEkeG7mSBz4butIGThu6VuZyBjYW8gbmjGsG5nIGPDsyB0aOG7gyDEkWFuZyBuaMaw4budbmcgY2jhu5cgY2hvIGPDoWMgbuG7gW4gdOG6o25nIHRy4bq7IHRydW5nIGjGoW4uDQotIEPDoWMgbuG7gW4gdOG6o25nIGPDsyB0w61uaCBjaOG6pXQgdHLDsiBjaHV54buHbiBjw6EgbmjDom4gaG/hurdjIGNodXnDqm4gbcO0biAobmjGsCBXaGF0c0FwcCwgTGlua2VkSW4pIGPDsyB04bu3IGzhu4cgdGjhuqVwIGjGoW4sIHBo4bqjbiDDoW5oIG3hu6VjIHRpw6p1IHPhu60gZOG7pW5nIG3huqFuZyB4w6MgaOG7mWkgdHJvbmcgbmjDs20gbsOgeSBjaOG7pyB54bq/dSBsw6AgZ2nhuqNpIHRyw60gdsOgIHTGsMahbmcgdMOhYyB4w6MgaOG7mWkgY8O0bmcga2hhaS4NCg0KIyMjICoqMi41IEFmZmVjdHMgYWNhZGFtaWMgcGVyZm9ybWFuY2UgLSDhuqJuaCBoxrDhu59uZyDEkeG6v24gaOG7jWMgdOG6rXAqKg0KDQojIyMjICoqMi41LjEgVGjhu5FuZyBrw6ogbcO0IHThuqMgdOG6p24gc+G7kSwgdOG6p24gc3XhuqV0LCB0cuG7sWMgcXVhbiBob8OhKioNCg0KIyMjIyMgKioyLjUuMS4xIELhuqNuZyB04bqnbiBz4buRLCB04bqnbiBzdeG6pXQqKg0KDQpgYGB7cn0NCnRhYl9hZmZlY3QgPC0gdGFibGUoZGF0JEFmZmVjdHNfQWNhZGVtaWNfUGVyZm9ybWFuY2UpDQp0YWJfYWZmZWN0DQp0YWJsZShkYXQkQWZmZWN0c19BY2FkZW1pY19QZXJmb3JtYW5jZSkvc3VtKG5yb3coZGF0KSkNCmBgYA0KDQojIyMjIyAqKjIuNS4xLjIgVHLhu7FjIHF1YW4gaG/DoSoqDQoNCmBgYHtyfQ0KIyBDaHV54buDbiBzYW5nIGRhdGEgZnJhbWUNCmFmZmVjdF9mcmVxIDwtIGFzLmRhdGEuZnJhbWUodGFiX2FmZmVjdCkNCmNvbG5hbWVzKGFmZmVjdF9mcmVxKSA8LSBjKCJSZXNwb25zZSIsICJGcmVxdWVuY3kiKQ0KDQojIFTDrW5oIHBo4bqnbiB0csSDbQ0KYWZmZWN0X2ZyZXEkUGVyY2VudGFnZSA8LSBhZmZlY3RfZnJlcSRGcmVxdWVuY3kgLyBzdW0oYWZmZWN0X2ZyZXEkRnJlcXVlbmN5KSAqIDEwMA0KDQojIFThuqFvIG5ow6NuIGhp4buDbiB0aOG7iyBwaOG6p24gdHLEg20NCmFmZmVjdF9mcmVxJExhYmVsIDwtIHBhc3RlMChyb3VuZChhZmZlY3RfZnJlcSRQZXJjZW50YWdlLCAxKSwgIiUiKQ0KDQojIEJp4buDdSDEkeG7kyANCmdncGxvdChhZmZlY3RfZnJlcSwgYWVzKHggPSAiIiwgeSA9IFBlcmNlbnRhZ2UsIGZpbGwgPSBSZXNwb25zZSkpICsNCiAgZ2VvbV9jb2wod2lkdGggPSAxLCBjb2xvciA9ICJ3aGl0ZSIpICsNCiAgY29vcmRfcG9sYXIodGhldGEgPSAieSIpICsNCiAgdGhlbWVfdm9pZCgpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IExhYmVsKSwgDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwgc2l6ZSA9IDUpICsNCiAgbGFicyh0aXRsZSA9ICJN4bqhbmcgeMOjIGjhu5lpIOG6o25oIGjGsOG7n25nIMSR4bq/biBr4bq/dCBxdeG6oyBo4buNYyB04bqtcCIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzY2YzJhNSIsICIjZmM4ZDYyIikpICAjIENo4buNbiBtw6B1IHTDuXkNCmBgYA0KDQojIyMjICoqMi41LjIgTmjhuq1uIHjDqXQqKg0KDQotIMSQYSBz4buRIG5nxrDhu51pIHRoYW0gZ2lhIGto4bqjbyBzw6F0ICg2NC4zJSkgY2hvIGJp4bq/dCB2aeG7h2Mgc+G7rSBk4bulbmcgbeG6oW5nIHjDoyBo4buZaSDhuqNuaCBoxrDhu59uZyDEkeG6v24ga+G6v3QgcXXhuqMgaOG7jWMgdOG6rXAgY+G7p2EgaOG7jS4NCi0gVHJvbmcga2hpIMSRw7MsIDM1LjclIGPDsm4gbOG6oWkgY2hvIHLhurFuZyBraMO0bmcgYuG7iyDhuqNuaCBoxrDhu59uZy4NCi0gQmnhu4N1IMSR4buTIHRyw7JuIHbDoCBk4buvIGxp4buHdSB04bqnbiBzdeG6pXQgY2hvIHRo4bqleSBn4bqnbiAyLzMgbmfGsOG7nWkgdGhhbSBnaWEga2jhuqNvIHPDoXQgdGjhu6thIG5o4bqtbiBt4bqhbmcgeMOjIGjhu5lpIOG6o25oIGjGsOG7n25nIHRpw6p1IGPhu7FjIMSR4bq/biBr4bq/dCBxdeG6oyBo4buNYyB04bqtcC4gxJDDonkgbMOgIG3hu5l0IHTDrW4gaGnhu4d1IMSRw6FuZyBjaMO6IMO9LCBwaOG6o24gw6FuaCBt4buRaSBxdWFuIHTDom0gdGjhu7FjIHThur8gdsOgIGzDoCBu4buBbiB04bqjbmcgdOG7kXQgY2hvIGPDoWMgcGjDom4gdMOtY2ggY2h1ecOqbiBzw6J1IGjGoW4gaG/hurdjIMSR4buBIHh14bqldCBnaeG6o2kgcGjDoXAgc+G7rSBk4bulbmcgbeG6oW5nIHjDoyBo4buZaSBo4bujcCBsw70gdHJvbmcgbcO0aSB0csaw4budbmcgaOG7jWMgxJHGsOG7nW5nLg0KDQojIyMjICoqMi41LjMgxJDDoW5oIGdpw6EqKg0KDQotIFTDoWMgxJHhu5luZyB0acOqdSBj4buxYyB0xrDGoW5nIMSR4buRaSBwaOG7lSBiaeG6v246DQogIC0gS+G6v3QgcXXhuqMgY2hvIHRo4bqleSBt4buRaSBsacOqbiBo4buHIGtow6EgcsO1IGdp4buvYSB2aeG7h2Mgc+G7rSBk4bulbmcgbeG6oW5nIHjDoyBo4buZaSB2w6Ag4bqjbmggaMaw4bufbmcgxJHhur9uIGjhu41jIHThuq1wLCDDrXQgbmjhuqV0IGzDoCB04burIG5o4bqtbiB0aOG7qWMgY2jhu6cgcXVhbiBj4bunYSBuZ8aw4budaSBkw7luZy4NCiAgLSDEkGnhu4F1IG7DoHkgaOG7lyB0cuG7oyBnaeG6oyB0aHV54bq/dCBuZ2hpw6puIGPhu6l1IGJhbiDEkeG6p3U6IG3huqFuZyB4w6MgaOG7mWkgY8OzIHRo4buDIGfDonkgc2FvIG5ow6NuZyBob+G6t2MgY2hp4bq/bSB0aOG7nWkgZ2lhbiBo4buNYyB04bqtcCBj4bunYSBuZ8aw4budaSB0cuG6uy4NCiAgDQojIyMgKioyLjYgUmVsYXRpb25zaGlwIFN0YXR1cyAtIFTDrG5oIHRy4bqhbmcgbeG7kWkgcXVhbiBo4buHKioNCg0KIyMjIyAqKjIuNi4xIFRo4buRbmcga8OqIG3DtCB04bqjIHThuqduIHPhu5EsIHThuqduIHN14bqldCwgdHLhu7FjIHF1YW4gaG/DoSoqDQoNCiMjIyMjICoqMi42LjEuMSBC4bqjbmcgdOG6p24gc+G7kSwgdOG6p24gc3XhuqV0KioNCg0KYGBge3J9DQp0YWJfcmVsYXRpb25zaGlwIDwtIHRhYmxlKGRhdCRSZWxhdGlvbnNoaXBfU3RhdHVzKQ0KdGFiX3JlbGF0aW9uc2hpcCANCnRhYmxlKGRhdCRSZWxhdGlvbnNoaXBfU3RhdHVzKS9zdW0obnJvdyhkYXQpKQ0KYGBgDQoNCiMjIyMjICoqMi42LjEuMiBUcuG7sWMgcXVhbiBob8OhKioNCg0KYGBge3J9DQojIENodXnhu4NuIHRow6BuaCBkYXRhIGZyYW1lDQpyZWxhdGlvbnNoaXBfZnJlcSA8LSBhcy5kYXRhLmZyYW1lKHRhYl9yZWxhdGlvbnNoaXApDQpjb2xuYW1lcyhyZWxhdGlvbnNoaXBfZnJlcSkgPC0gYygiU3RhdHVzIiwgIkZyZXF1ZW5jeSIpDQoNCiMgVMOtbmggcGjhuqduIHRyxINtDQpyZWxhdGlvbnNoaXBfZnJlcSRQZXJjZW50YWdlIDwtIHJlbGF0aW9uc2hpcF9mcmVxJEZyZXF1ZW5jeSAvIHN1bShyZWxhdGlvbnNoaXBfZnJlcSRGcmVxdWVuY3kpICogMTAwDQoNCiMgVOG6oW8gbmjDo24gcGjhuqduIHRyxINtDQpyZWxhdGlvbnNoaXBfZnJlcSRMYWJlbCA8LSBwYXN0ZTAocm91bmQocmVsYXRpb25zaGlwX2ZyZXEkUGVyY2VudGFnZSwgMSksICIlIikNCg0KIyBCaeG7g3UgxJHhu5MNCmdncGxvdChyZWxhdGlvbnNoaXBfZnJlcSwgYWVzKHggPSAiIiwgeSA9IFBlcmNlbnRhZ2UsIGZpbGwgPSBTdGF0dXMpKSArDQogIGdlb21fY29sKHdpZHRoID0gMSwgY29sb3IgPSAid2hpdGUiKSArDQogIGNvb3JkX3BvbGFyKHRoZXRhID0gInkiKSArDQogIHRoZW1lX3ZvaWQoKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBMYWJlbCksIA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIHNpemUgPSA1KSArDQogIGxhYnModGl0bGUgPSAiVMOsbmggdHLhuqFuZyBt4buRaSBxdWFuIGjhu4cgY+G7p2EgbmfGsOG7nWkgdGhhbSBnaWEga2jhuqNvIHPDoXQiKSArDQogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIpICANCmBgYA0KDQojIyMjICoqMi42LjIgTmjhuq1uIHjDqXQqKg0KDQotIMSQYSBz4buRIG5nxrDhu51pIHRoYW0gZ2lhIGto4bqjbyBzw6F0IMSRYW5nIOG7nyB0cuG6oW5nIHRow6FpIMSR4buZYyB0aMOibiAoU2luZ2xlKSwgY2hp4bq/bSBraG/huqNuZyA1NC41JSB04buVbmcgc+G7kS4NCi0gS2hv4bqjbmcgNDElIG5nxrDhu51pIHRoYW0gZ2lhIMSRYW5nIHRyb25nIG3hu5l0IG3hu5FpIHF1YW4gaOG7hyAoSW4gUmVsYXRpb25zaGlwKS4NCi0gTeG7mXQgcGjhuqduIG5o4buPIChraG/huqNuZyA0LjUlKSBtw7QgdOG6oyB0w6xuaCB0cuG6oW5nIG3hu5FpIHF1YW4gaOG7hyBj4bunYSBo4buNIGzDoCBwaOG7qWMgdOG6oXAgKENvbXBsaWNhdGVkKS4NCg0KIyMjIyAqKjIuNi4zIMSQw6FuaCBnacOhKioNCg0KLSBQaMOibiBi4buRIG7DoHkgcGjhuqNuIMOhbmggbmjDs20gxJHhu5FpIHTGsOG7o25nIGto4bqjbyBzw6F0IGNo4bunIHnhur91IGzDoCBuZ8aw4budaSB0cuG6uywgY8OzIHRo4buDIGzDoCBzaW5oIHZpw6puIGhv4bq3YyBuZ8aw4budaSBt4bubaSDEkWkgbMOgbSwgduG7m2kgxJFhIHPhu5EgduG6q24gY8OybiDEkeG7mWMgdGjDom4gaG/hurdjIG3hu5tpIGLhuq90IMSR4bqndSBjw6FjIG3hu5FpIHF1YW4gaOG7hy4NCi0gVOG7tyBs4buHIGtow6EgY2FvIG5nxrDhu51pIHRyb25nIG3hu5FpIHF1YW4gaOG7hyAoZ+G6p24gNDElKSBjaG8gdGjhuqV5IG3huqFuZyB4w6MgaOG7mWkgY8OzIHRo4buDIMSRw7NuZyB2YWkgdHLDsiBxdWFuIHRy4buNbmcgdHJvbmcgdmnhu4djIGR1eSB0csOsIHbDoCBwaMOhdCB0cmnhu4NuIGPDoWMgbeG7kWkgcXVhbiBo4buHIGPDoSBuaMOibiBj4bunYSBo4buNLg0KLSBU4bu3IGzhu4cg4oCcQ29tcGxpY2F0ZWTigJ0gdHV5IG5o4buPIG5oxrBuZyBjxaluZyBsw6AgZOG6pXUgaGnhu4d1IGNobyB0aOG6pXkgY8OzIG3hu5l0IHPhu5EgbMaw4bujbmcgbmfGsOG7nWkgdHLhuqNpIG5naGnhu4dtIGtow7Mga2jEg24sIG3DonUgdGh14bqrbiB0cm9uZyBjw6FjIG3hu5FpIHF1YW4gaOG7hyDigJMgY8OzIHRo4buDIGzDoCBkbyDhuqNuaCBoxrDhu59uZyBj4bunYSBt4bqhbmcgeMOjIGjhu5lpLCB2w60gZOG7pSBuaMawIGhp4buDdSBuaOG6p20sIHh1bmcgxJHhu5l0IHF1YSBt4bqhbmcuLi4NCg0KIyMgKipQSOG6pk4gMzogxq/hu5pDIEzGr+G7ok5HIEtIT+G6ok5HIFbDgCBLSeG7gk0gxJDhu4pOSCBHSeG6oiBUSFVZ4bq+VCBU4bu2IEzhu4YgQ0hPIDEgQknhur5OKioNCg0KIyMjICoqMy4xIEdlbmRlciAtIE1hbGUqKg0KDQojIyMjICoqMy4xLjEgxq/hu5tjIGzGsOG7o25nIGtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIHThu7cgbOG7hyBuYW0qKg0KDQpgYGB7cn0NCnByb3AudGVzdCh4ID0gc3VtKGRhdCRHZW5kZXIgPT0gIk1hbGUiKSwNCiAgICAgICAgICBuID0gbnJvdyhkYXQpLA0KICAgICAgICAgIHAgPSAwLjUsICAgICAgICAgICAgICMgR2nhuqMgdGh1eeG6v3QgSDA6IHAgPSAwLjUNCiAgICAgICAgICBjb25mLmxldmVsID0gMC45NSkNCmBgYA0KDQojIyMjICoqMy4xLjIgQsOgaSB0b8OhbiBraeG7g20gxJHhu4tuaCoqDQoNCi0gR2nhuqMgdGh1eeG6v3Q6DQoNCiAgLSBI4oKAOiBwID0gMC41ICh04bu3IGzhu4cgbmFtIGLhurFuZyA1MCUpDQogIC0gSOKCgTogcCDiiaAgMC41ICh04bu3IGzhu4cgbmFtIGtow6FjIDUwJSkNCg0KLSBOaOG6rW4geMOpdCANCg0KICAtIFThu7cgbOG7hyBuYW0gZ2nhu5tpIHRyb25nIG3huqt1IGto4bqjbyBzw6F0IGzDoCA0OS45JSwgZ+G6p24gYuG6sW5nIDUwJS4NCiAgLSBLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyB04bu3IGzhu4cgbsOgeSBsw6AgdOG7qyA0Ni4yJSDEkeG6v24gNTMuNyUsIGJhbyBn4buTbSBnacOhIHRy4buLIDAuNS4NCi0gR2nDoSB0cuG7iyBwLXZhbHVlID0gMSA+IDAuMDUgY2hvIHRo4bqleSBraMO0bmcgY8OzIGLhuqV0IGvhu7MgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogbsOgbyDEkeG7gyBjaG8gcuG6sW5nIHThu7cgbOG7hyBuYW0ga2jDoWMgNTAlLg0KDQotIEvhur90IGx14bqtbi4gDQoNCiAgLSBLaMO0bmcgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIMSR4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBy4bqxbmcgdOG7tyBs4buHIG5hbSB0cm9uZyB04buVbmcgdGjhu4MgbMOgIDUwJS4gVOG7tyBs4buHIHF1YW4gc8OhdCBwaMO5IGjhu6NwIHbhu5tpIGdp4bqjIHRodXnhur90Lg0KICANCiMjIyAqKjMuMiBNb3N0IHVzZWQgcGxhdGZvcm0gLSBUaWt0b2sqKg0KDQojIyMjICoqMy4yLjEgxq/hu5tjIGzGsOG7o25nIGtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIHThu7cgbOG7hyBuZ8aw4budaSBkw7luZyBu4buBbiB04bqjbmcgVGlrdG9rKioNCg0KYGBge3J9DQpwcm9wLnRlc3QoeCA9IHN1bShkYXQkTW9zdF9Vc2VkX1BsYXRmb3JtID09ICJUaWtUb2siKSwNCiAgICAgICAgICBuID0gbnJvdyhkYXQpLA0KICAgICAgICAgIHAgPSAwLjgsICAgIyBHaeG6oyB0aHV54bq/dDogODAlIGTDuW5nIFRpa1Rvaw0KICAgICAgICAgIGNvbmYubGV2ZWwgPSAwLjk1KQ0KYGBgDQoNCiMjIyMgKiozLjIuMiBCw6BpIHRvw6FuIGtp4buDbSDEkeG7i25oKioNCg0KLSBHaeG6oyB0aHV54bq/dCBraeG7g20gxJHhu4tuaDoNCg0KICAtIEjigoA6IHAgPSAwLjggKGdp4bqjIMSR4buLbmggcuG6sW5nIDgwJSBuZ8aw4budaSBkw7luZyBjaOG7jW4gVGlrVG9rKQ0KICAtIEjigoE6IHAg4omgIDAuOCAodOG7tyBs4buHIG5nxrDhu51pIGNo4buNbiBUaWtUb2sga2jDoWMgODAlKQ0KDQotIE5o4bqtbiB4w6l0IA0KDQotIFThu7cgbOG7hyBuZ8aw4budaSBjaOG7jW4gVGlrVG9rIGzDoCAyMS44JSwgcuG6pXQgdGjhuqVwIHNvIHbhu5tpIGdp4bqjIHRodXnhur90IGJhbiDEkeG6p3UgbMOgIDgwJS4NCi0gS2hv4bqjbmcgdGluIGPhuq15IDk1JSBu4bqxbSB0cm9uZyBraG/huqNuZyBbMTguOSUsIDI1LjElXSwga2jDtG5nIGJhbyBn4buTbSA4MCUuDQotIHAtdmFsdWUgY+G7sWMga+G7syBuaOG7jyAoPCAyLjJlLTE2KSwgY2hvIHRo4bqleSBz4buxIGtow6FjIGJp4buHdCBsw6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBjYW8uDQoNCi0gS+G6v3QgbHXhuq1uDQoNCiAgLSBDw7MgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogcuG6pXQgbeG6oW5oIMSR4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBy4bqxbmcgODAlIG5nxrDhu51pIGto4bqjbyBzw6F0IGNo4buNbiBUaWtUb2sgbMOgIG7hu4FuIHThuqNuZyBz4butIGThu6VuZyBjaMOtbmguDQpUaOG7sWMgdOG6vywgY2jhu4kga2hv4bqjbmcgMjIlIG5nxrDhu51pIHRoYW0gZ2lhIGto4bqjbyBzw6F0IGNobyBiaeG6v3QgaOG7jSBz4butIGThu6VuZyBUaWtUb2sgbmhp4buBdSBuaOG6pXQuDQoNCiMjIyAqKjMuMyBBY2FkZW1pYyBMZXZlbCAtIEhpZ2ggU2Nob29sKioNCg0KIyMjIyAqKjMuMy4xIMav4bubYyBsxrDhu6NuZyBraG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyB04bu3IGzhu4cgbmfGsOG7nWkgZMO5bmcgbMOgIGjhu41jIHNpbmggVEhQVCoqDQoNCmBgYHtyfQ0KcHJvcC50ZXN0KA0KICB4ID0gc3VtKGRhdCRBY2FkZW1pY19MZXZlbCA9PSAiSGlnaCBTY2hvb2wiKSwNCiAgbiA9IG5yb3coZGF0KSwNCiAgcCA9IDAuMDUsDQogIGFsdGVybmF0aXZlID0gImdyZWF0ZXIiLCAgIyBN4buZdCBwaMOtYToga2nhu4NtIMSR4buLbmggcCA+IDAuMDUNCiAgY29uZi5sZXZlbCA9IDAuOTUNCikNCg0KYGBgDQoNCiMjIyMgKiozLjMuMiBCw6BpIHRvw6FuIGtp4buDbSDEkeG7i25oKioNCg0KLSBHaeG6oyB0aHV54bq/dCBraeG7g20gxJHhu4tuaDoNCiAgLSBI4oKAOiBU4bu3IGzhu4cgaOG7jWMgc2luaCBUSFBUID0gNSUgKHAgPSAwLjA1KQ0KICAtIEjigoE6IFThu7cgbOG7hyBo4buNYyBzaW5oIFRIUFQgPiA1JSAocCA+IDAuMDUpDQogIA0KLSBL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaDoNCg0KLSBHacOhIHRy4buLIHRo4buRbmcga8OqIFgtc3F1YXJlZCA9IDEuNzkzNg0KLSBwLXZhbHVlID0gMC45MDk4DQotIFThu7cgbOG7hyBt4bqrdSAocMyCKSA9IDAuMDM4MyAoa2hv4bqjbmcgMy44JSkNCi0gS2hv4bqjbmcgdGluIGPhuq15IDk1JSAobeG7mXQgcGjDrWEpIGzDoCB04burIDIuNzUlIMSR4bq/biAxMDAlICjEkcaw4bujYyBoaeG7g24gdGjhu4sgbmjGsCB24bqteSBkbyBraeG7g20gxJHhu4tuaCAxIHBow61hKQ0KDQotIE5o4bqtbiB4w6l0DQoNCi0gcC12YWx1ZSA9IDAuOTA5OCA+IDAuMDUsIGRvIMSRw7Mga2jDtG5nIGPDsyDEkeG7pyBi4bqxbmcgY2jhu6luZyDEkeG7gyBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgSOKCgC4NCi0gVOG7tyBs4buHIGjhu41jIHNpbmggVEhQVCB0cm9uZyBt4bqrdSBraOG6o28gc8OhdCBsw6Aga2hv4bqjbmcgMy44JSwgdGjhuqVwIGjGoW4gNSUgZ2nhuqMgxJHhu4tuaCB0cm9uZyBI4oKALg0KLSBLaG/huqNuZyB0aW4gY+G6rXkgdGjhuqVwIGjGoW4gNSUsIGNo4bupbmcgdOG7jyB04bu3IGzhu4cgdGjhu7FjIHPhu7EgY8OzIHRo4buDIHRo4bqlcCBoxqFuIGhv4bq3YyBi4bqxbmcgNSUuDQotIE5oxrAgduG6rXksIGtow7RuZyBjw7MgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogxJHhu4Mga+G6v3QgbHXhuq1uIHLhurFuZyB04bu3IGzhu4cgaOG7jWMgc2luaCBUSFBUIHRyb25nIG3huqt1IGzhu5tuIGjGoW4gNSUuDQoNCi0gS+G6v3QgbHXhuq1uDQoNCiAgLSBE4buxYSB0csOqbiBr4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCwgdOG7tyBs4buHIGjhu41jIHNpbmggVEhQVCB0cm9uZyBraOG6o28gc8OhdCBraMO0bmcgdsaw4bujdCBxdcOhIDUlIG3hu5l0IGPDoWNoIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouIFThu7cgbOG7hyB0aOG7sWMgdOG6vyBjw7MgdGjhu4MgdGjhuqVwIGjGoW4gaG/hurdjIGLhurFuZyA1JS4NCg0KIyMjICoqMy40IEFjYWRlbWljIExldmVsIC0gVW5kZXJncmFkdWF0ZSB2w6AgR3JhZHVhdGUqKg0KDQotICoqTeG7pWMgdGnDqnU6KioNCg0KLSBTbyBzw6FuaCB04bu3IGzhu4cgbmfGsOG7nWkgYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCBkbyBkw7luZyBt4bqhbmcgeMOjIGjhu5lpIGdp4buvYSAyIG5ow7NtOg0KDQogIC0gR3JhZHVhdGUNCiAgLSBVbmRlcmdyYWR1YXRlDQoNCi0gVOG7tyBs4buHIFVuZGVyZ3JhZHVhdGUgYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCBjw7Mgbmjhu48gaMahbiBHcmFkdWF0ZSBraMO0bmc/DQoNCmBgYHtyfQ0KIyBU4bqhbyBi4bqjbmcgMiBjaGnhu4F1IGdp4buvYSBBY2FkZW1pY19MZXZlbCB2w6AgQWZmZWN0c19BY2FkZW1pY19QZXJmb3JtYW5jZQ0KdGFiX2FjYWRlbWljIDwtIHRhYmxlKGRhdCRBY2FkZW1pY19MZXZlbCwgZGF0JEFmZmVjdHNfQWNhZGVtaWNfUGVyZm9ybWFuY2UpDQoNCiMgQ2jhu4kgZ2nhu68gbOG6oWkgVW5kZXJncmFkdWF0ZSB2w6AgR3JhZHVhdGUNCnRhYl91Z19nIDwtIHRhYl9hY2FkZW1pY1tjKCJVbmRlcmdyYWR1YXRlIiwgIkdyYWR1YXRlIiksIF0NCnByb3AudGVzdCgNCiAgeCA9IGModGFiX3VnX2dbIlVuZGVyZ3JhZHVhdGUiLCAiWWVzIl0sIHRhYl91Z19nWyJHcmFkdWF0ZSIsICJZZXMiXSksDQogIG4gPSBjKHN1bSh0YWJfdWdfZ1siVW5kZXJncmFkdWF0ZSIsIF0pLCBzdW0odGFiX3VnX2dbIkdyYWR1YXRlIiwgXSkpLA0KICBhbHRlcm5hdGl2ZSA9ICJsZXNzIiwgICMga2nhu4NtIMSR4buLbmggMSBwaMOtYQ0KICBjb25mLmxldmVsID0gMC45NQ0KKQ0KYGBgDQoNCiMjIyMgKiozLjQuMSBCw6BpIHRvw6FuIGtp4buDbSDEkeG7i25oKioNCg0KLSBI4oKAOiBw4oKBIC0gcOKCgiA9IDAgKHThu7cgbOG7hyBVbmRlcmdyYWR1YXRlIGLhurFuZyBHcmFkdWF0ZSkNCg0KLSBI4oKBOiBw4oKBIC0gcOKCgiA8IDAgKHThu7cgbOG7hyBVbmRlcmdyYWR1YXRlIG5o4buPIGjGoW4gR3JhZHVhdGUpDQoNCioqTmjhuq1uIHjDqXQga+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmgqKg0KDQotIEdpw6EgdHLhu4sgdGjhu5FuZyBrw6ogY2hpIGLDrG5oIHBoxrDGoW5nIChYLXNxdWFyZWQpID0gMC44MTQ6IEdpw6EgdHLhu4sgbsOgeSBraMO0bmcgbOG7m24sIGNobyB0aOG6pXkgc+G7sSBraMOhYyBiaeG7h3QgZ2nhu69hIGhhaSB04bu3IGzhu4cgcXVhbiBzw6F0IMSRxrDhu6NjIGtow7RuZyBxdcOhIG7hu5VpIGLhuq10IGhv4bq3YyBraMO0bmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IHLDtSByw6BuZy4NCi0gU+G7kSBi4bqtYyB04buxIGRvIChkZikgPSAxOiBWw6wgc28gc8OhbmggZ2nhu69hIDIgbmjDs20gbsOqbiBi4bqtYyB04buxIGRvIGzDoCAxLCBwaMO5IGjhu6NwIHbhu5tpIGLDoGkgdG/DoW4ga2nhu4NtIMSR4buLbmggdOG7tyBs4buHIGdp4buvYSBoYWkgbmjDs20uDQotIFAtdmFsdWUgPSAwLjgxNjU6IMSQw6J5IGzDoCB4w6FjIHN14bqldCBxdWFuIHPDoXQgxJHGsOG7o2Mgc+G7sSBraMOhYyBiaeG7h3QgbmjGsCB24bqteSAoaG/hurdjIGzhu5tuIGjGoW4pIG7hur91IGdp4bqjIHRodXnhur90IGfhu5FjIChI4oKAOiB04buJIGzhu4cgdW5kZXJncmFkdWF0ZSBi4bqxbmcgdOG7iSBs4buHIGdyYWR1YXRlKSBsw6AgxJHDum5nLiBHacOhIHRy4buLIHAtdmFsdWUgbOG7m24gaMahbiBt4bupYyDDvSBuZ2jEqWEgMC4wNSBjaG8gdGjhuqV5IGtow7RuZyDEkeG7pyBi4bqxbmcgY2jhu6luZyDEkeG7gyBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgZ+G7kWMuDQotIEjGsOG7m25nIGtp4buDbSDEkeG7i25oIChhbHRlcm5hdGl2ZSBoeXBvdGhlc2lzOiBsZXNzKTogR2nhuqMgdGh1eeG6v3QgxJHhu5FpIOG7nyDEkcOieSBsw6AgdOG7iSBs4buHIHVuZGVyZ3JhZHVhdGUgbmjhu48gaMahbiB04buJIGzhu4cgZ3JhZHVhdGUuIFR1eSBuaGnDqm4sIGvhur90IHF14bqjIMaw4bubYyBsxrDhu6NuZyB04buJIGzhu4cgbeG6q3UgbOG6oWkgbMOgOg0KICAtIHByb3AgMSAoVW5kZXJncmFkdWF0ZSkgPSAwLjY0ODcgKDY0Ljg3JSkNCiAgLSBwcm9wIDIgKEdyYWR1YXRlKSA9IDAuNjEyMyAoNjEuMjMlKSDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSB04buJIGzhu4cgdW5kZXJncmFkdWF0ZSBjw7JuIGNhbyBoxqFuIG3hu5l0IGNow7p0IHNvIHbhu5tpIGdyYWR1YXRlLCB04bupYyBsw6AgZ2nhuqMgdGh1eeG6v3QgxJHhu5FpIOKAnHVuZGVyZ3JhZHVhdGUgPCBncmFkdWF0ZeKAnSBraMO0bmcgcGjDuSBo4bujcCB24bubaSBk4buvIGxp4buHdSBxdWFuIHPDoXQuDQotIEtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIGhp4buHdSB04buJIGzhu4cgKHByb3AxIC0gcHJvcDIpOiAoLTEuMDAwMCwgMC4xMDA0KTogS2hv4bqjbmcgbsOgeSBy4bqldCBy4buZbmcgdsOgIGJhbyBn4buTbSBj4bqjIHPhu5EgMCBjxaluZyBuaMawIGPDoWMgZ2nDoSB0cuG7iyBkxrDGoW5nLCDEkWnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6AgY8OzIHRo4buDIGtow7RuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgaG/hurdjIHThu4kgbOG7hyB1bmRlcmdyYWR1YXRlIGPDsyB0aOG7gyBjYW8gaMahbiBncmFkdWF0ZS4gRG8gxJHDsywgY2jGsGEgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIMSR4buDIGvhur90IGx14bqtbiB1bmRlcmdyYWR1YXRlIGPDsyB04buJIGzhu4cgZMO5bmcgbeG6oW5nIHjDoyBo4buZaSBuaOG7jyBoxqFuIGdyYWR1YXRlLg0KDQoqKkvhur90IGx14bqtbioqDQoNCi0gVuG7m2kgbeG7qWMgw70gbmdoxKlhIM6xID0gMC4wNSwgdsOsIHAtdmFsdWUgPSAwLjgxNjUgPiAwLjA1LCB0YSBraMO0bmcgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEjigoAuIEtow7RuZyBjw7MgxJHhu6cgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogxJHhu4Mga+G6v3QgbHXhuq1uIHLhurFuZyB04bu3IGzhu4cgZMO5bmcgbeG6oW5nIHjDoyBo4buZaSBj4bunYSBuaMOzbSB1bmRlcmdyYWR1YXRlIG5o4buPIGjGoW4gbmjDs20gZ3JhZHVhdGUuDQoNCiMjIyAqKjMuNSBSZWxhdGlvbnNoaXAgU3RhdHVzIC0gU2luZ2xlKioNCg0KLSBUcm9uZyBuaMOzbSBuZ8aw4budaSBjw7MgdHLhuqFuZyB0aMOhaSAiU2luZ2xlIiwgdOG7tyBs4buHIG5nxrDhu51pIGNobyBiaeG6v3QgbeG6oW5nIHjDoyBo4buZaSDhuqNuaCBoxrDhu59uZyDEkeG6v24gdmnhu4djIGjhu41jIG7hurFtIHRyb25nIGtob+G6o25nIG7DoG8gduG7m2kgxJHhu5kgdGluIGPhuq15IDk1JT8NCg0KDQpgYGB7cn0NCiMgxJDhur9tIHPhu5EgbmfGsOG7nWkgIlNpbmdsZSIgYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCAoWWVzKQ0KeCA8LSBzdW0oZGF0JFJlbGF0aW9uc2hpcF9TdGF0dXMgPT0gIlNpbmdsZSIgJiBkYXQkQWZmZWN0c19BY2FkZW1pY19QZXJmb3JtYW5jZSA9PSAiWWVzIikNCg0KIyBU4buVbmcgc+G7kSBuZ8aw4budaSAiU2luZ2xlIg0KbiA8LSBzdW0oZGF0JFJlbGF0aW9uc2hpcF9TdGF0dXMgPT0gIlNpbmdsZSIpDQoNCiMgxq/hu5tjIGzGsOG7o25nIGtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIHThu7cgbOG7hyBkw7luZyBt4bqhbmcgeMOjIGjhu5lpIOG6o25oIGjGsOG7n25nIGjhu41jIHThuq1wDQpwcm9wLnRlc3QoeCA9IHgsIG4gPSBuLCBjb25mLmxldmVsID0gMC45NSkNCmBgYA0KDQojIyMjICoqMy41LjEgQsOgaSB0b8OhbiBraeG7g20gxJHhu4tuaCoqDQoNCi0gR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6DQogIC0gSOKCgDogVOG7tyBs4buHIG5nxrDhu51pIMSR4buZYyB0aMOibiAoU2luZ2xlKSBi4buLIOG6o25oIGjGsOG7n25nIGLhu59pIG3huqFuZyB4w6MgaOG7mWkgbMOgIDUwJSAocCA9IDAuMDUpDQogIC0gSOKCgTogVOG7tyBs4buHIG5nxrDhu51pIMSR4buZYyB0aMOibiAoU2luZ2xlKSBi4buLIOG6o25oIGjGsOG7n25nIGLhu59pIG3huqFuZyB4w6MgaOG7mWkga2jDoWMgNTAlIChwIOKJoCAwLjUpDQoNCi0gS+G6v3QgcXXhuqMgdGjhu5FuZyBrw6o6DQogIC0gVOG7tyBs4buHIG3huqt1ICjGsOG7m2MgbMaw4bujbmcpIGzDoCAwLjcxMDkgdOG7qWMgbMOgIDcxLjElIG5nxrDhu51pIMSR4buZYyB0aMOibiBi4buLIOG6o25oIGjGsOG7n25nIGLhu59pIG3huqFuZyB4w6MgaOG7mWkuDQogIC0gS2hv4bqjbmcgdGluIGPhuq15IDk1JTogWzAuNjYyMywgMC43NTUyXQ0KICAtIEdpw6EgdHLhu4sga2nhu4NtIMSR4buLbmggQ2hpLXNxdWFyZWQ6IDY3LjUwMw0KICAtIHAtdmFsdWU6IDwgMi4yIMOXIDEw4oG7wrnigbYNCg0KLSAqKkRp4buFbiBnaeG6o2kga+G6v3QgcXXhuqMqKg0KDQotIFThu7cgbOG7hyBuZ8aw4budaSDEkeG7mWMgdGjDom4gYuG7iyDhuqNuaCBoxrDhu59uZyBi4bufaSBt4bqhbmcgeMOjIGjhu5lpIGzDoCBraG/huqNuZyA3MS4xJSwgdsOgIGtob+G6o25nIHRpbiBj4bqteSA5NSUgbuG6sW0gdOG7qyA2Ni4yJSDEkeG6v24gNzUuNSUuDQotIEtob+G6o25nIHRpbiBj4bqteSBuw6B5IGtow7RuZyBjaOG7qWEgMC41LCBuZ2jEqWEgbMOgIGNow7puZyB0YSBsb+G6oWkgYuG7jyBI4oKAIChraMO0bmcgY8OzIGLhurFuZyBjaOG7qW5nIHLhurFuZyB04bu3IGzhu4cgbMOgIDUwJSkuDQotIHAtdmFsdWUgPCAwLjAwMSwgY+G7sWMga+G7syBuaOG7jyDihpIgbmdoxKlhIGzDoCB4w6FjIHN14bqldCDEkeG7gyBxdWFuIHPDoXQgxJHGsOG7o2MgdOG7tyBs4buHIG7DoHkgbuG6v3UgcCA9IDAuNSBsw6AgcuG6pXQgdGjhuqVwLCBuw6puIHRhIGLDoWMgYuG7jyBI4oKALg0KDQojIyMjICoqMy41LjIgS+G6v3QgbHXhuq1uKioNCg0KLSBW4bubaSBt4bupYyDDvSBuZ2jEqWEgzrEgPSAwLjA1IHRhIGPDsyDEkeG7pyBi4bqxbmcgY2jhu6luZyDEkeG7gyBr4bq/dCBsdeG6rW4gcuG6sW5nOg0KICAtIFThu7cgbOG7hyBuZ8aw4budaSDEkeG7mWMgdGjDom4gYuG7iyDhuqNuaCBoxrDhu59uZyBi4bufaSBt4bqhbmcgeMOjIGjhu5lpIEtIw4FDIDUwJSBt4buZdCBjw6FjaCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLg0KICAtIEPhu6UgdGjhu4MsIGPDsyBoxqFuIDcwJSBuZ8aw4budaSDEkeG7mWMgdGjDom4gYuG7iyDhuqNuaCBoxrDhu59uZywgdsOgIMSRw6J5IGzDoCBt4buZdCB04bu3IGzhu4cgY2FvIMSRw6FuZyBr4buDLCBjaG8gdGjhuqV5IG3huqFuZyB4w6MgaOG7mWkgY8OzIHRo4buDIGPDsyB0w6FjIMSR4buZbmcgcsO1IHLhu4d0IMSR4bq/biBo4buNYyB04bqtcCBj4bunYSBuaMOzbSBuw6B5Lg0KICANCiMjICoqUEjhuqZOIDQ6IFBIw4JOIFTDjUNIIE3hu5BJIExJw4pOIEjhu4YgR0nhu65BIEhBSSBCSeG6vk4qKg0KDQojIyMgKio0LjEgR2VuZGVyIHbDoCBNb3N0IHVzZWQgcGxhdGZvcm0qKg0KDQotICoqTMO9LiBkbzoqKg0KICAtIEdp4bubaSB0w61uaCBjw7MgdGjhu4Mg4bqjbmggaMaw4bufbmcgxJHhur9uIHZp4buHYyBs4buxYSBjaOG7jW4gbeG6oW5nIHjDoyBo4buZaSBjaMOtbmguIFbDrSBk4bulLCBu4buvIGPDsyB0aOG7gyDGsHUgdGnDqm4gSW5zdGFncmFtIGhv4bq3YyBUaWtUb2ssIHRyb25nIGtoaSBuYW0gY8OzIHRo4buDIGTDuW5nIG5oaeG7gXUgRmFjZWJvb2sgaG/hurdjIFR3aXR0ZXIgaMahbi4NCiAgDQotICoqUGjDom4gdMOtY2g6KioNCiAgLSBTbyBzw6FuaCB04bu3IGzhu4cgdOG7q25nIG7hu4FuIHThuqNuZyB0aGVvIHThu6tuZyBnaeG7m2kgdMOtbmggxJHhu4MgeGVtIGPDsyBz4buxIGtow6FjIGJp4buHdCB0cm9uZyB0aMOzaSBxdWVuIHPhu60gZOG7pW5nIG3huqFuZyB4w6MgaOG7mWkga2jDtG5nLg0KICANCiMjIyMgKio0LjEuMSBC4bqjbmcgdOG6p24gc3XhuqV0IGNow6lvKioNCg0KDQpgYGB7cn0NCiMgVOG6oW8gYuG6o25nIHThuqduIHPhu5EgY2jDqW8NCmNyb3NzX2dwIDwtIHRhYmxlKGRhdCRHZW5kZXIsIGRhdCRNb3N0X1VzZWRfUGxhdGZvcm0pDQoNCiMgQ2h1eeG7g24gc2FuZyBi4bqjbmcgdOG6p24gc3XhuqV0IHRoZW8gcGjhuqduIHRyxINtDQpjcm9zc19wZXJjZW50X2dwIDwtIHByb3AudGFibGUoY3Jvc3NfZ3ApICogMTAwDQoNCiMgTMOgbSB0csOybiB2w6AgaGnhu4NuIHRo4buLDQpwcmludChyb3VuZChjcm9zc19wZXJjZW50X2dwLCAyKSkNCg0KYGBgDQoNCiMjIyMgKio0LjEuMiBUcuG7sWMgcXVhbiBob8OhKioNCg0KYGBge3J9DQojIENodXnhu4NuIHNhbmcgZGF0YSBmcmFtZQ0KY3Jvc3NfZGZncCA8LSBhcy5kYXRhLmZyYW1lKGNyb3NzX2dwKQ0KY29sbmFtZXMoY3Jvc3NfZGZncCkgPC0gYygiR2VuZGVyIiwgIlBsYXRmb3JtIiwgIlBlcmNlbnRhZ2UiKQ0KDQojIEJp4buDdSDEkeG7kw0KZ2dwbG90KGNyb3NzX2RmZ3AsIGFlcyh4ID0gUGxhdGZvcm0sIHkgPSBQZXJjZW50YWdlLCBmaWxsID0gR2VuZGVyKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpICsNCiAgbGFicyh0aXRsZSA9ICJU4bu3IGzhu4cgc+G7rSBk4bulbmcgbeG6oW5nIHjDoyBo4buZaSB0aGVvIGdp4bubaSB0w61uaCIsDQogICAgICAgeCA9ICJO4buBbiB04bqjbmcgbeG6oW5nIHjDoyBo4buZaSIsDQogICAgICAgeSA9ICJU4bu3IGzhu4cgKCUpIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKSArDQogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiU2V0MiIpDQoNCmBgYA0KDQojIyMjICoqNC4xLjMgTmjhuq1uIHjDqXQqKg0KDQrwn5S5IDEuIEluc3RhZ3JhbSB2xrDhu6N0IHRy4buZaSDhu58gbuG7ryBnaeG7m2kNCg0KLSBJbnN0YWdyYW0gbMOgIG7hu4FuIHThuqNuZyBwaOG7lSBiaeG6v24gbmjhuqV0IOG7nyBu4buvIGdp4bubaSAoMjQuNCUpLCBjYW8gaMahbiBn4bqlcCAyLjIgbOG6p24gc28gduG7m2kgbmFtIGdp4bubaSAoMTAuOTIlKS4NCi0gxJBp4buBdSBuw6B5IHBow7kgaOG7o3AgduG7m2kgeHUgaMaw4bubbmcgY2h1bmc6IEluc3RhZ3JhbSBo4bqlcCBk4bqrbiBoxqFuIHbhu5tpIG5nxrDhu51pIGTDuW5nIG7hu68gZG8gdGhpw6puIHbhu4EgaMOsbmgg4bqjbmgsIHRo4bqpbSBt4bu5LCB2w6AgbuG7mWkgZHVuZyBjw6EgbmjDom4uDQoNCvCflLkgMi4gRmFjZWJvb2sgbmfGsOG7o2MgbOG6oWkg4oCTIHBo4buVIGJp4bq/biBoxqFuIOG7nyBuYW0gZ2nhu5tpDQoNCi0gRmFjZWJvb2sgxJHGsOG7o2Mgc+G7rSBk4bulbmcgbmhp4buBdSBoxqFuIOG7nyBuYW0gKDE0LjA0JSkgc28gduG7m2kgbuG7ryAoY2jhu4kgMy40JSkuDQotIEPDsyB0aOG7gyBkbyBuYW0gZ2nhu5tpIGdp4buvIHRow7NpIHF1ZW4gZMO5bmcgbuG7gW4gdOG6o25nIHRydXnhu4FuIHRo4buRbmcgbsOgeSBsw6J1IGjGoW4sIGhv4bq3YyBkw7luZyDEkeG7gyB0aGVvIGTDtWkgdGluIHThu6ljLCBuaMOzbSBuZ2jhu4EgbmdoaeG7h3AsLi4uDQoNCvCflLkgMy4gVGlrVG9rIHBo4buVIGJp4bq/biDhu58gY+G6oyBoYWkgZ2nhu5tpDQoNCi0gVGlrVG9rIGzDoCBu4buBbiB04bqjbmcgxJHGsOG7o2MgY+G6oyBuYW0gKDkuNjUlKSB2w6AgbuG7ryAoMTIuMiUpIMawYSBjaHXhu5luZyDigJMgbmjGsG5nIG7hu68gduG6q24gY2hp4bq/bSB04bu3IGzhu4cgY2FvIGjGoW4uDQotIENobyB0aOG6pXkgVGlrVG9rIGzDoCBt4buZdCBu4buBbiB04bqjbmcgxJFhbmcgY2hp4bq/bSDGsHUgdGjhur8g4bufIG5nxrDhu51pIHRy4bq7IG7Ds2kgY2h1bmcsIG5o4bqldCBsw6AgbuG7ry4NCg0K8J+UuSA0LiBN4buZdCBz4buRIG7hu4FuIHThuqNuZyBjw7MgdMOtbmggZ2nhu5tpIHTDrW5oIGjDs2EgY2FvDQoNCi0gTElORSwgS2FrYW9UYWxrOiBjaOG7iSBjw7Mg4bufIG7hu68sIG5hbSBob8OgbiB0b8OgbiBraMO0bmcgZMO5bmcg4oaSIGPDsyB0aOG7gyBsw6AgbmfGsOG7nWkgbuG7ryB04burIGPDoWMgcXXhu5FjIGdpYS9raHUgduG7sWMgxJHhurdjIHRow7kgKEjDoG4sIE5o4bqtdC4uLikuDQotIFZLb250YWt0ZSwgWW91VHViZTogY2jhu4kgY8OzIOG7nyBuYW0g4oCTIHR1eSB04bu3IGzhu4cga2jDtG5nIGNhbywgbmjGsG5nIHBo4bqjbiDDoW5oIHPhu7EgbOG7sWEgY2jhu41uIMSR4bq3YyBiaeG7h3QgdGhlbyBnaeG7m2kgdMOtbmggaG/hurdjIHbDuW5nIHbEg24gaMOzYS4NCg0K8J+UuSA1LiBXaGF0c0FwcCwgV2VDaGF0LCBMaW5rZWRJbiwgVHdpdHRlci4uLjogxJHGsOG7o2MgY+G6oyAyIGdp4bubaSBkw7luZyBuaMawbmcgbmFtIHRoxrDhu51uZyBjaGnhur9tIHThu7cgbOG7hyBjYW8gaMahbi4NCg0KIyMjIyAqKjQuMS40IMSQw6FuaCBnacOhKioNCg0KLSBHaeG7m2kgdMOtbmggY8OzIOG6o25oIGjGsOG7n25nIHLDtSBy4buHdCDEkeG6v24gdmnhu4djIGzhu7FhIGNo4buNbiBu4buBbiB04bqjbmcgbeG6oW5nIHjDoyBo4buZaSBjaMOtbmguDQotIE7hu68gZ2nhu5tpIHRoacOqbiB24buBIG7hu4FuIHThuqNuZyBow6xuaCDhuqNuaCB2w6AgdMawxqFuZyB0w6FjIG5o4bq5IG5ow6BuZyAoSW5zdGFncmFtLCBUaWtUb2spLCB0cm9uZyBraGkgbmFtIGdp4bubaSBjw7MgeHUgaMaw4bubbmcgZ2nhu68gY8OhYyBu4buBbiB04bqjbmcgdHJ1eeG7gW4gdGjhu5FuZyBob+G6t2MgY2h1ecOqbiBuZ2hp4buHcCBoxqFuIChGYWNlYm9vaywgTGlua2VkSW4sIFdoYXRzQXBwKS4NCi0gxJDDonkgbMOgIG3hu5l0IGPGoSBz4bufIHF1YW4gdHLhu41uZyDEkeG7gyBsw6BtIHBow6JuIHTDrWNoIHPDonUgaMahbiB24buBIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgaMOgbmggdmkgbeG6oW5nIHjDoyBo4buZaSB2w6AgZ2nhu5tpIHTDrW5oLCBob+G6t2MgbeG7qWMgxJHhu5kgbmdoaeG7h24gbeG6oW5nIHjDoyBo4buZaSAoQWRkaWN0ZWRfU2NvcmUpLg0KDQojIyMjICoqNC4xLjUgS2nhu4NtIMSR4buLbmggY2hpIGLDrG5oIHBoxrDGoW5nKioNCg0KYGBge3J9DQojIFThuqFvIGLhuqNuZyB04bqnbiBz4buRIGNow6lvDQpjcm9zc19ncCA8LSB0YWJsZShkYXQkR2VuZGVyLCBkYXQkTW9zdF9Vc2VkX1BsYXRmb3JtKQ0KIyBLaeG7g20gxJHhu4tuaCANCmNoaXNxLnRlc3QoY3Jvc3NfZ3AsIHNpbXVsYXRlLnAudmFsdWUgPSBUUlVFLCBCID0gMTAwMDApDQoNCmBgYA0KKipDw6FjIGdp4bqjIHRodXnhur90KioNCg0KLSBHaeG6oyB0aHV54bq/dCBraMO0bmcgKEjigoApOiBHaeG7m2kgdMOtbmggdsOgIG7hu4FuIHThuqNuZyBt4bqhbmcgeMOjIGjhu5lpIHPhu60gZOG7pW5nIG5oaeG7gXUgbmjhuqV0IGzDoCDEkeG7mWMgbOG6rXAgduG7m2kgbmhhdS4NCi0gR2nhuqMgdGh1eeG6v3QgxJHhu5FpIChI4oKBKTogR2nhu5tpIHTDrW5oIHbDoCBu4buBbiB04bqjbmcgbeG6oW5nIHjDoyBo4buZaSBz4butIGThu6VuZyBuaGnhu4F1IG5o4bqldCBjw7MgbeG7kWkgcXVhbiBo4buHIHBo4bulIHRodeG7mWMuDQoNCioqUGjGsMahbmcgcGjDoXAqKg0KDQotIFPhu60gZOG7pW5nIGtp4buDbSDEkeG7i25oIENoaSBiw6xuaCBwaMawxqFuZyDEkeG7mWMgbOG6rXAgduG7m2kgbcO0IHBo4buPbmcgTW9udGUgQ2FybG8gKHNpbXVsYXRlLnAudmFsdWUgPSBUUlVFLCAxMDAwMCBs4bqnbikgxJHhu4MgeOG7rSBsw70gdHLGsOG7nW5nIGjhu6NwIHThuqduIHN14bqldCBuaOG7jyB0cm9uZyBi4bqjbmcgY2jDqW8uDQoNCioqS+G6v3QgcXXhuqMqKg0KDQotIEdpw6EgdHLhu4sgdGjhu5FuZyBrw6ogY2hpIGLDrG5oIHBoxrDGoW5nOiBYLXNxdWFyZWQgPSAxNTQuMzMNCi0gR2nDoSB0cuG7iyBwLXZhbHVlIG3DtCBwaOG7j25nOiBwLXZhbHVlID0gOS45OTllLTA1DQotIELhuq1jIHThu7EgZG8ga2jDtG5nIHjDoWMgxJHhu4tuaCBkbyBkw7luZyBtw7QgcGjhu49uZyAoZGYgPSBOQSkuDQoNCioqTmjhuq1uIHjDqXQqKg0KDQotIFbhu5tpIG3hu6ljIMO9IG5naMSpYSDOsSA9IDAuMDUsIGdpw6EgdHLhu4sgcC12YWx1ZSBy4bqldCBuaOG7jyAocC12YWx1ZSDiiYggMC4wMDAxIDwgMC4wNSkgbsOqbiBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3Qga2jDtG5nIEjigoAuDQoNCi0gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgY8OzIGLhurFuZyBjaOG7qW5nIHRo4buRbmcga8OqIG3huqFuaCBt4bq9IMSR4buDIGvhur90IGx14bqtbiBy4bqxbmc6DQogIC0gR2nhu5tpIHTDrW5oIOG6o25oIGjGsOG7n25nIMSR4bq/biBs4buxYSBjaOG7jW4gbuG7gW4gdOG6o25nIG3huqFuZyB4w6MgaOG7mWkgxJHGsOG7o2Mgc+G7rSBk4bulbmcgbmhp4buBdSBuaOG6pXQgdHJvbmcgbmjDs20ga2jhuqNvIHPDoXQuDQogIA0KLSBOZ2jEqWEgbMOgLCBz4bufIHRow61jaCBz4butIGThu6VuZyBjw6FjIG7hu4FuIHThuqNuZyBt4bqhbmcgeMOjIGjhu5lpIGtow6FjIG5oYXUgcGjhu6UgdGh14buZYyB2w6BvIGdp4bubaSB0w61uaCwga2jDtG5nIHBo4bqjaSBuZ+G6q3Ugbmhpw6puLg0KDQojIyMgKio0LjIgQWNhZGVtaWMgTGV2ZWwgdsOgIEFmZmVjdHMgYWNhZGVtaWMgcGVyZm9ybWFuY2UqKg0KDQotICoqTMO9IGRvKioNCiAgLSBUcsOsbmggxJHhu5kgaOG7jWMgduG6pW4gY8OzIHRo4buDIGxpw6puIHF1YW4gxJHhur9uIHZp4buHYyBt4bqhbmcgeMOjIGjhu5lpIGPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24gaOG7jWMgdOG6rXAgaGF5IGtow7RuZy4gU2luaCB2acOqbiDEkeG6oWkgaOG7jWMsIGNhbyBo4buNYyBjw7MgdGjhu4Mgbmjhuq1uIHRo4bupYyByw7UgaMahbiBob+G6t2MgY8OzIG3hu6ljIOG6o25oIGjGsOG7n25nIGtow6FjIG5oYXUgc28gduG7m2kgaOG7jWMgc2luaCBwaOG7lSB0aMO0bmcuDQoNCi0gKipQaMOibiB0w61jaCoqDQogIC0gWGVtIHThu7cgbOG7hyB0cuG6oyBs4budaSDigJxZZXPigJ0gaG/hurdjIOKAnE5v4oCdIHbhu4Eg4bqjbmggaMaw4bufbmcgaOG7jWMgdOG6rXAgdHJvbmcgdOG7q25nIG5ow7NtIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbi4NCg0KIyMjIyAqKjQuMi4xIELhuqNuZyB04bqnbiBzdeG6pXQgY2jDqW8qKg0KDQpgYGB7cn0NCiMgVOG6oW8gYuG6o25nIHThuqduIHPhu5EgY2jDqW8NCmNyb3NzX2xwIDwtIHRhYmxlKGRhdCRBY2FkZW1pY19MZXZlbCwgZGF0JEFmZmVjdHNfQWNhZGVtaWNfUGVyZm9ybWFuY2UpDQoNCiMgQ2h1eeG7g24gc2FuZyBi4bqjbmcgdOG6p24gc3XhuqV0IHRoZW8gcGjhuqduIHRyxINtDQpjcm9zc19wZXJjZW50X2xwIDwtIHByb3AudGFibGUoY3Jvc3NfbHApICogMTAwDQoNCiMgTMOgbSB0csOybiB2w6AgaGnhu4NuIHRo4buLDQpwcmludChyb3VuZChjcm9zc19wZXJjZW50X2xwLCAyKSkNCmBgYA0KDQojIyMjICoqNC4yLjIgVHLhu7FjIHF1YW4gaG/DoSoqDQoNCmBgYHtyfQ0KIyBDaHV54buDbiBzYW5nIGRhdGEgZnJhbWUgxJHhu4MgduG6vQ0KY3Jvc3NfZGZscCA8LSBhcy5kYXRhLmZyYW1lKGNyb3NzX3BlcmNlbnRfbHApDQpjb2xuYW1lcyhjcm9zc19kZmxwKSA8LSBjKCJBY2FkZW1pY19MZXZlbCIsICJBZmZlY3RzIiwgIlBlcmNlbnRhZ2UiKQ0KDQojIEJp4buDdSDEkeG7kw0KZ2dwbG90KGNyb3NzX2RmbHAsIGFlcyh4ID0gQWNhZGVtaWNfTGV2ZWwsIHkgPSBQZXJjZW50YWdlLCBmaWxsID0gQWZmZWN0cykpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiKSArDQogIGxhYnModGl0bGUgPSAi4bqibmggaMaw4bufbmcgY+G7p2EgbeG6oW5nIHjDoyBo4buZaSDEkeG6v24ga+G6v3QgcXXhuqMgaOG7jWMgdOG6rXAgdGhlbyB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4iLA0KICAgICAgIHggPSAiVHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIiwNCiAgICAgICB5ID0gIlThu7cgbOG7hyAoJSkiKSArDQogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIsIG5hbWUgPSAi4bqibmggaMaw4bufbmciKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMzAsIGhqdXN0ID0gMSkpDQpgYGANCg0KIyMjIyAqKjQuMi4zIE5o4bqtbiB4w6l0KioNCg0K8J+UuSAxLiBOZ8aw4budaSBo4buNYyDEkeG6oWkgaOG7jWMgKFVuZGVyZ3JhZHVhdGUpIGLhu4sg4bqjbmggaMaw4bufbmcgbmhp4buBdSBuaOG6pXQNCg0KLSBU4bu3IGzhu4cgbmfGsOG7nWkgaOG7jWMgxJHhuqFpIGjhu41jIHRy4bqjIGzhu51pIOKAnFllc+KAnSDigJMgY8OzIOG6o25oIGjGsOG7n25nIMSR4bq/biBo4buNYyB04bqtcCBjaGnhur9tIHThu5tpIDMyLjQlIHRvw6BuIGLhu5kgbeG6q3UuDQotIMSQw6J5IGPFqW5nIGzDoCBuaMOzbSDEkcO0bmcgxJHhuqNvIG5o4bqldCB0cm9uZyBraOG6o28gc8OhdCwgY2hp4bq/bSBn4bqnbiA1MCUgdOG7lW5nIG3huqt1IOKGkiBwaOG6o24gw6FuaCB0cnVuZyB0aOG7sWMgaMOgbmggdmkgbeG6oW5nIHjDoyBo4buZaSDhu58gc2luaCB2acOqbiDEkeG6oWkgaOG7jWMuDQoNCvCflLkgMi4gTmfGsOG7nWkgaOG7jWMgc2F1IMSR4bqhaSBo4buNYyAoR3JhZHVhdGUpIGPFqW5nIGLhu4sg4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MNCg0KLSBDw7MgMjguMjMlIG5nxrDhu51pIGjhu41jIGNhbyBo4buNYyB0aOG7q2Egbmjhuq1uIG3huqFuZyB4w6MgaOG7mWkg4bqjbmggaMaw4bufbmcgxJHhur9uIHZp4buHYyBo4buNYyBj4bunYSBo4buNLg0KVHV5IHRo4bqlcCBoxqFuIG5ow7NtIHVuZGVyZ3JhZHVhdGUgbmjGsG5nIHbhuqtuIGtow6EgY2FvIOKGkiBjaG8gdGjhuqV5IGPhuqMgbmjhu69uZyBuZ8aw4budaSBjw7MgdHLDrG5oIMSR4buZIGNhbyBjxaluZyBjaMawYSBraeG7g20gc2/DoXQgdOG7kXQg4bqjbmggaMaw4bufbmcgdOG7qyBt4bqhbmcgeMOjIGjhu5lpLg0KDQrwn5S5IDMuIEjhu41jIHNpbmggcGjhu5UgdGjDtG5nIChIaWdoIFNjaG9vbCkgY2hp4bq/bSB04bu3IGzhu4cgcuG6pXQgbmjhu48NCg0KLSBDaOG7iSBjaGnhur9tIDMuODMlIHRvw6BuIGLhu5kgbeG6q3Uga2jhuqNvIHPDoXQsIHbhu5tpIDMuNTUlIHRy4bqjIGzhu51pIOKAnFllc+KAnS4NCi0gU+G7kSBsaeG7h3UgbsOgeSBjw7MgdGjhu4MgcGjhuqNuIMOhbmggMiDEkWnhu4F1Og0KICAtIE3huqt1IGto4bqjbyBzw6F0IGPDsyDDrXQgaOG7jWMgc2luaCBwaOG7lSB0aMO0bmcuDQogIC0gSG/hurdjIGjhu41jIHNpbmggY2jGsGEgY8OzIG5o4bqtbiB0aOG7qWMgcsO1IHbhu4Eg4bqjbmggaMaw4bufbmcgY+G7p2EgbeG6oW5nIHjDoyBo4buZaSDEkeG6v24gaOG7jWMgdOG6rXAsIGhv4bq3YyBo4buNIMOtdCBz4butIGThu6VuZyBoxqFuLg0KICANCiMjIyMgKio0LjIuMyBLaeG7g20gxJHhu4tuaCBjaGkgYsOsbmggcGjGsMahbmcqKg0KDQpgYGB7cn0NCiMgVOG6oW8gYuG6o25nIHThuqduIHPhu5EgY2jDqW8NCmNyb3NzX2xwIDwtIHRhYmxlKGRhdCRBY2FkZW1pY19MZXZlbCwgZGF0JEFmZmVjdHNfQWNhZGVtaWNfUGVyZm9ybWFuY2UpDQojIEtp4buDbSDEkeG7i25oIA0KY2hpc3EudGVzdChjcm9zc19scCkNCg0KYGBgDQoNCioqQ8OhYyBnaeG6oyB0aHV54bq/dDoqKg0KDQotIEdp4bqjIHRodXnhur90IGtow7RuZyAoSOKCgCk6IFRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiB2w6Ag4bqjbmggaMaw4bufbmcgY+G7p2EgbeG6oW5nIHjDoyBo4buZaSDEkeG6v24gaOG7jWMgdOG6rXAgbMOgIMSR4buZYyBs4bqtcCB24bubaSBuaGF1Lg0KLSBHaeG6oyB0aHV54bq/dCDEkeG7kWkgKEjigoEpOiBUcsOsbmggxJHhu5kgaOG7jWMgduG6pW4gdsOgIOG6o25oIGjGsOG7n25nIGPhu6dhIG3huqFuZyB4w6MgaOG7mWkgxJHhur9uIGjhu41jIHThuq1wIGPDsyBt4buRaSBxdWFuIGjhu4cgcGjhu6UgdGh14buZYy4NCg0KKipQaMawxqFuZyBwaMOhcDoqKg0KLSBT4butIGThu6VuZyBraeG7g20gxJHhu4tuaCBDaGkgYsOsbmggcGjGsMahbmcgxJHhu5ljIGzhuq1wIGThu7FhIHRyw6puIGLhuqNuZyB04bqnbiBz4buRIGNow6lvIGdp4buvYSBBY2FkZW1pY19MZXZlbCB2w6AgQWZmZWN0c19BY2FkZW1pY19QZXJmb3JtYW5jZS4NCg0KKipL4bq/dCBxdeG6ozoqKg0KLSBHacOhIHRy4buLIHRo4buRbmcga8OqIGNoaSBiw6xuaCBwaMawxqFuZzogWC1zcXVhcmVkID0gMTAuNzkzDQotIELhuq1jIHThu7EgZG86IGRmID0gMg0KLSBHacOhIHRy4buLIHAtdmFsdWU6IHAtdmFsdWUgPSAwLjAwNDUzMw0KDQoqKk5o4bqtbiB4w6l0OioqDQotIFbhu5tpIG3hu6ljIMO9IG5naMSpYSDOsSA9IDAuMDUsIHAtdmFsdWUgPSAwLjAwNDUzMyA8IDAuMDUsIG7Dqm4gYsOhYyBi4buPIGdp4bqjIHRodXnhur90IGtow7RuZyBI4oKALg0KLSDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBjw7MgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogxJHhu4Mga+G6v3QgbHXhuq1uIHLhurFuZzoNCiAgLSBUcsOsbmggxJHhu5kgaOG7jWMgduG6pW4gY8OzIOG6o25oIGjGsOG7n25nIMSR4bq/biB2aeG7h2MgbeG6oW5nIHjDoyBo4buZaSBjw7MgbMOgbSDhuqNuaCBoxrDhu59uZyDEkeG6v24gaGnhu4d1IHF14bqjIGjhu41jIHThuq1wIGhheSBraMO0bmcuDQotIE7Ds2kgY8OhY2gga2jDoWMsIG3hu6ljIMSR4buZIOG6o25oIGjGsOG7n25nIGPhu6dhIG3huqFuZyB4w6MgaOG7mWkgxJHhur9uIGjhu41jIHThuq1wIGtow6FjIG5oYXUg4bufIGPDoWMgbmjDs20gdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIGtow6FjIG5oYXUuIA0KDQojIyMgKio0LjMgUmVsYXRpb25zaGlwIFN0YXR1cyB2w6AgTW9zdCB1c2VkIHBsYXRmb3JtKioNCg0KLSAqKkzDvSBkbyoqDQogIC0gVMOsbmggdHLhuqFuZyBt4buRaSBxdWFuIGjhu4cgY8OzIHRo4buDIGxpw6puIHF1YW4gxJHhur9uIG7hu4FuIHThuqNuZyBt4bqhbmcgeMOjIGjhu5lpIMSRxrDhu6NjIHPhu60gZOG7pW5nIG5oaeG7gXUgbmjhuqV0LCBkbyBt4buXaSBu4buBbiB04bqjbmcgY8OzIMSR4bq3YyDEkWnhu4NtIGdpYW8gdGnhur9wIHbDoCB0xrDGoW5nIHTDoWMgeMOjIGjhu5lpIGtow6FjIG5oYXUuDQogIA0KLSAqKlBow6JuIHTDrWNoKioNCiAgLSBTbyBzw6FuaCBwaMOibiBi4buRIG7hu4FuIHThuqNuZyBjaMOtbmggZ2nhu69hIGPDoWMgbmjDs206IFNpbmdsZSwgSW4gUmVsYXRpb25zaGlwLCBDb21wbGljYXRlZC4NCiAgDQojIyMjICoqNC4zLjEgQuG6o25nIHThuqduIHN14bqldCBjaMOpbyoqDQoNCmBgYHtyfQ0KIyBU4bqhbyBi4bqjbmcgdOG6p24gc+G7kSBjaMOpbw0KY3Jvc3Nfc3AgPC0gdGFibGUoZGF0JFJlbGF0aW9uc2hpcF9TdGF0dXMsIGRhdCRNb3N0X1VzZWRfUGxhdGZvcm0pDQoNCiMgQ2h1eeG7g24gc2FuZyBi4bqjbmcgdOG6p24gc3XhuqV0IHRoZW8gcGjhuqduIHRyxINtDQpjcm9zc19wZXJjZW50X3NwIDwtIHByb3AudGFibGUoY3Jvc3Nfc3ApICogMTAwDQoNCiMgTMOgbSB0csOybiB2w6AgaGnhu4NuIHRo4buLDQpwcmludChyb3VuZChjcm9zc19wZXJjZW50X3NwLCAyKSkNCmBgYA0KDQojIyMjICoqNC4zLjIgVHLhu7FjIHF1YW4gaG/DoSoqDQoNCmBgYHtyfQ0KIyBDaHV54buDbiBzYW5nIGRhdGEgZnJhbWUgxJHhu4MgduG6vQ0KZGZfY3Jvc3Nfc3AgPC0gYXMuZGF0YS5mcmFtZShjcm9zc19wZXJjZW50X3NwKQ0KY29sbmFtZXMoZGZfY3Jvc3Nfc3ApIDwtIGMoIlJlbGF0aW9uc2hpcF9TdGF0dXMiLCAiUGxhdGZvcm0iLCAiUGVyY2VudGFnZSIpDQoNCiMgQmnhu4N1IMSR4buTDQpnZ3Bsb3QoZGZfY3Jvc3Nfc3AsIGFlcyh4ID0gUGxhdGZvcm0sIHkgPSBQZXJjZW50YWdlLCBmaWxsID0gUmVsYXRpb25zaGlwX1N0YXR1cykpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiKSArDQogIGxhYnModGl0bGUgPSAiTuG7gW4gdOG6o25nIG3huqFuZyB4w6MgaOG7mWkgcGjhu5UgYmnhur9uIHRoZW8gdMOsbmggdHLhuqFuZyBxdWFuIGjhu4ciLA0KICAgICAgIHggPSAiTuG7gW4gdOG6o25nIG3huqFuZyB4w6MgaOG7mWkiLA0KICAgICAgIHkgPSAiVOG7tyBs4buHICglKSIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJTZXQyIikgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKQ0KYGBgDQoNCiMjIyMgKio0LjMuMyBOaOG6rW4geMOpdCoqDQoNCvCflLkgMS4gSW5zdGFncmFtIHbDoCBUaWtUb2sg4oCTIHBo4buVIGJp4bq/biBuaOG6pXQg4bufIG5nxrDhu51pIMSR4buZYyB0aMOibg0KDQotIEluc3RhZ3JhbTogTmfGsOG7nWkgxJHhu5ljIHRow6JuIGTDuW5nIG5oaeG7gXUgbmjhuqV0ICgyMC41NyUpLCBn4bqnbiBn4bqlcCDEkcO0aSBzbyB24bubaSBuZ8aw4budaSDEkWFuZyB5w6p1ICgxMy4zMyUpLg0KDQotIFRpa1RvazogQ8WpbmcgxJHGsOG7o2MgxrBhIGNodeG7mW5nIGLhu59pIG5nxrDhu51pIMSR4buZYyB0aMOibiAoMTQuMzMlKSwgdsaw4bujdCB0cuG7mWkgc28gduG7m2kgbmfGsOG7nWkgxJFhbmcgdHJvbmcgbeG7kWkgcXVhbiBo4buHICg2LjM4JSkuDQoNCi0g4oaSIENobyB0aOG6pXkgbmfGsOG7nWkgxJHhu5ljIHRow6JuIGPDsyB4dSBoxrDhu5tuZyBkw7luZyBu4buBbiB04bqjbmcgZ2nhuqNpIHRyw60sIGNoaWEgc+G6uyBow6xuaCDhuqNuaCBuaGnhu4F1IGjGoW4g4oCTIGPDsyB0aOG7gyDEkeG7gyBr4bq/dCBu4buRaSB4w6MgaOG7mWksIHRo4buDIGhp4buHbiBi4bqjbiB0aMOibiwgaG/hurdjIGdp4bqjaSB04buPYSBj4bqjbSB4w7pjLg0KDQrwn5S5IDIuIEZhY2Vib29rIOKAkyDEkcaw4bujYyBkw7luZyBuaGnhu4F1IGjGoW4g4bufIG5nxrDhu51pIMSRYW5nIHnDqnUNCg0KLSBOZ8aw4budaSDEkWFuZyB5w6p1IGPDsyB04bu3IGzhu4cgZMO5bmcgRmFjZWJvb2sgY2FvIG5o4bqldCAoMTAuMDclKSwgY8OzIHRo4buDIGRvIGjhu40gdGjDrWNoIGNoaWEgc+G6uyBraG/huqNuaCBraOG6r2MgduG7m2kgbmfGsOG7nWkgecOqdSBob+G6t2MgdGhlbyBkw7VpIGPDoWMgbeG7kWkgcXVhbiBo4buHLg0KDQotIE5nxrDhu51pIMSR4buZYyB0aMOibiBkw7luZyDDrXQgaMahbiAoNy4yMyUpLCBjw7JuIG5ow7NtIOKAnGNvbXBsaWNhdGVk4oCdIGfhuqduIG5oxrAga2jDtG5nIGTDuW5nICgwLjE0JSkuDQoNCvCflLkgMy4gTuG7gW4gdOG6o25nIG5o4bqvbiB0aW4gKFdoYXRzQXBwLCBXZUNoYXQsIExJTkUpOg0KDQotIFdoYXRzQXBwOiBUaOG7i25oIGjDoG5oIOG7nyBj4bqjIDIgbmjDs20gY2jDrW5oLCBuaMawbmcgY2FvIGjGoW4g4bufIG5nxrDhu51pIMSR4buZYyB0aMOibiAoNC4xMSUpIHbDoCBuZ8aw4budaSDEkWFuZyB5w6p1ICgzLjU1JSkuDQoNCi0gV2VDaGF0OiBDaOG7pyB54bq/dSB4deG6pXQgaGnhu4duIOG7nyBuZ8aw4budaSDEkWFuZyB5w6p1ICgyLjEzJSksIGNobyB0aOG6pXkgbeG7mXQgbmjDs20gbmfGsOG7nWkgZMO5bmcgY8OzIHRo4buDIMSR4bq/biB04burIGtodSB24buxYyBuaMawIFRydW5nIFF14buRYywgxJDDoGkgTG9hbi4NCg0KLSBMSU5FOiBDaOG7iSB4deG6pXQgaGnhu4duIMSRw6FuZyBr4buDIOG7nyBuZ8aw4budaSDEkeG7mWMgdGjDom4gKDEuNzAlKSDigJMgY8OzIHRo4buDIGRvIMSR4bq3YyDEkWnhu4NtIHbDuW5nIHbEg24gaMOzYSBob+G6t2MgZMOibiBz4buRIG3huqt1IGto4bqjbyBzw6F0Lg0KDQrwn5S5IDQuIE5ow7NtICJDb21wbGljYXRlZCIgY8OzIHThuqduIHN14bqldCBz4butIGThu6VuZyBt4bqhbmcgeMOjIGjhu5lpIGtow6EgdGjhuqVwDQoNCi0gVOG6pXQgY+G6oyBjw6FjIG7hu4FuIHThuqNuZyDEkeG7gXUgY8OzIHThu7cgbOG7hyBy4bqldCB0aOG6pXAg4bufIG5ow7NtIG7DoHkuDQoNCi0gQ8OzIHRo4buDIGRvIHPhu5EgbMaw4bujbmcgbmfGsOG7nWkgdGh14buZYyBuaMOzbSBuw6B5IHRyb25nIGto4bqjbyBzw6F0IMOtdCwgaG/hurdjIGjhu40gY8OzIHh1IGjGsOG7m25nIHRodSBtw6xuaCwgw610IGhv4bqhdCDEkeG7mW5nIG3huqFuZyB4w6MgaOG7mWkga2hpIHTDrG5oIGPhuqNtIGtow7RuZyByw7UgcsOgbmcuDQoNCiMjIyMgKio0LjMuNCDEkMOhbmggZ2nDoSoqDQoNCi0gVMOsbmggdHLhuqFuZyBxdWFuIGjhu4cgY8OzIOG6o25oIGjGsOG7n25nIHLDtSDEkeG6v24gdmnhu4djIGNo4buNbiBu4buBbiB04bqjbmcgbeG6oW5nIHjDoyBo4buZaS4NCi0gTmfGsOG7nWkgxJHhu5ljIHRow6JuIMawdSB0acOqbiBjw6FjIG7hu4FuIHThuqNuZyB0aGnDqm4gduG7gSBr4bq/dCBu4buRaSB4w6MgaOG7mWksIGdp4bqjaSB0csOtIChJbnN0YWdyYW0sIFRpa1RvaykuDQotIE5nxrDhu51pIMSRYW5nIHnDqnUgZMO5bmcgbeG6oW5nIHjDoyBo4buZaSDigJzhu5VuIMSR4buLbmjigJ0gaMahbiBuaMawIEZhY2Vib29rIGhv4bq3YyDhu6luZyBk4bulbmcgbmjhuq9uIHRpbiAoV2hhdHNBcHAsIFdlQ2hhdCkuDQotIEThu68gbGnhu4d1IGPFqW5nIHBo4bqjbiDDoW5oIMSRxrDhu6NjIHnhur91IHThu5EgdsSDbiBow7NhLCBxdeG7kWMgZ2lhIChXZUNoYXQsIExJTkUsIEtha2FvVGFsaywgVktvbnRha3RlKS4NCg0KIyMjIyAqKjQuMy41IEtp4buDbSDEkeG7i25oIGNoaSBiw6xuaCBwaMawxqFuZyoqDQoNCmBgYHtyfQ0KIyBU4bqhbyBi4bqjbmcgdOG6p24gc+G7kSBjaMOpbw0KY3Jvc3Nfc3AgPC0gdGFibGUoZGF0JFJlbGF0aW9uc2hpcF9TdGF0dXMsIGRhdCRNb3N0X1VzZWRfUGxhdGZvcm0pDQojIEtp4buDbSDEkeG7i25oIA0KY2hpc3EudGVzdChjcm9zc19zcCwgc2ltdWxhdGUucC52YWx1ZSA9IFRSVUUsIEIgPSAxMDAwMCkNCmBgYA0KDQoqKkPDoWMgZ2nhuqMgdGh1eeG6v3QqKg0KDQotIEdp4bqjIHRodXnhur90IGtow7RuZyAoSOKCgCk6IFTDrG5oIHRy4bqhbmcgcXVhbiBo4buHIHbDoCBu4buBbiB04bqjbmcgbeG6oW5nIHjDoyBo4buZaSDEkcaw4bujYyBz4butIGThu6VuZyBuaGnhu4F1IG5o4bqldCBsw6AgxJHhu5ljIGzhuq1wIHbhu5tpIG5oYXUuDQotIEdp4bqjIHRodXnhur90IMSR4buRaSAoSOKCgSk6IFTDrG5oIHRy4bqhbmcgcXVhbiBo4buHIHbDoCBu4buBbiB04bqjbmcgbeG6oW5nIHjDoyBo4buZaSDEkcaw4bujYyBz4butIGThu6VuZyBuaGnhu4F1IG5o4bqldCBjw7MgbeG7kWkgcXVhbiBo4buHIHBo4bulIHRodeG7mWMuDQoNCioqUGjGsMahbmcgcGjDoXAqKg0KDQotIFPhu60gZOG7pW5nIGtp4buDbSDEkeG7i25oIENoaSBiw6xuaCBwaMawxqFuZyB24bubaSBtw7QgcGjhu49uZyBwLXZhbHVlIE1vbnRlIENhcmxvICgxMDAwMCBs4bqnbiBs4bq3cCkgxJHhu4MgeOG7rSBsw70gdHLGsOG7nW5nIGjhu6NwIHThuqduIHN14bqldCB0aOG6pXAgdHJvbmcgYuG6o25nIHThuqduIHPhu5EuDQoNCioqS+G6v3QgcXXhuqMqKg0KDQotIEdpw6EgdHLhu4sgdGjhu5FuZyBrw6ogY2hpIGLDrG5oIHBoxrDGoW5nOiBYLXNxdWFyZWQgPSAxMzIuOTYNCi0gQuG6rWMgdOG7sSBkbyBraMO0bmcgeMOhYyDEkeG7i25oIGRvIGTDuW5nIG3DtCBwaOG7j25nIChkZiA9IE5BKS4NCi0gR2nDoSB0cuG7iyBwLXZhbHVlIG3DtCBwaOG7j25nOiBwLXZhbHVlID0gOS45OTllLTA1IChy4bqldCBuaOG7jywgZ+G6p24gYuG6sW5nIDApLg0KDQoqKk5o4bqtbiB4w6l0KioNCg0KLSBW4bubaSBt4bupYyDDvSBuZ2jEqWEgzrEgPSAwLjA1LCBwLXZhbHVlIOKJiCAwLjAwMDEgPCAwLjA1IG7Dqm4gYsOhYyBi4buPIGdp4bqjIHRodXnhur90IGtow7RuZyBI4oKALg0KLSBL4bq/dCBsdeG6rW46DQogIC0gQ8OzIG3hu5FpIHF1YW4gaOG7hyBwaOG7pSB0aHXhu5ljIGdp4buvYSB0w6xuaCB0cuG6oW5nIHF1YW4gaOG7hyB2w6AgbuG7gW4gdOG6o25nIG3huqFuZyB4w6MgaOG7mWkgxJHGsOG7o2Mgc+G7rSBk4bulbmcgbmhp4buBdSBuaOG6pXQuDQotIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IGzhu7FhIGNo4buNbiBu4buBbiB04bqjbmcgbeG6oW5nIHjDoyBo4buZaSBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgxJHDoW5nIGvhu4MgdMO5eSB0aGVvIHTDrG5oIHRy4bqhbmcgcXVhbiBo4buHIGPhu6dhIG5nxrDhu51pIGTDuW5nLg0KDQojIyAqKlBI4bqmTiA1OiBSRUxBVElWRSBSSVNLIC0gVOG7tyBz4buRIG5ndXkgY8ahKioNCg0KYGBge3J9DQppbnN0YWxsLnBhY2thZ2VzKCJlcGl0b29scyIsIHJlcG9zID0gImh0dHBzOi8vY2xvdWQuci1wcm9qZWN0Lm9yZyIpDQpsaWJyYXJ5KGVwaXRvb2xzKQ0KYGBgDQoNCg0KIyMjICoqNS4xIEdlbmRlciB2w6AgQWZmZWN0IGFjYWRhbWljIHBlcmZvcm1lbmNlKioNCg0KLSBTbyBzw6FuaCBuZ3V5IGPGoSBi4buLIOG6o25oIGjGsOG7n25nIGjhu41jIHThuq1wIGdp4buvYSBuYW0gdsOgIG7hu68g4oaSIFTDrW5oIFJSIChNYWxlIHZzIEZlbWFsZSkNCg0KIyMjIyAqKjUuMS4xIELhuqNuZyAgZOG7ryBsaeG7h3UgY2jDqW8qKg0KYGBge3J9DQojIFThuqFvIGLhuqNuZyAyeDINCnRhYjEgPC0gdGFibGUoZGF0JEdlbmRlciwgZGF0JEFmZmVjdHNfQWNhZGVtaWNfUGVyZm9ybWFuY2UpDQpwcmludCh0YWIxKQ0KYGBgDQoNCiMjIyMgKio1LjEuMiBUw61uaCBSUioqDQoNCmBgYHtyfQ0Kcmlza3JhdGlvKHRhYjEpDQpgYGANCg0KKipD4bq3cCBiaeG6v24qKg0KDQotIFBow6JuIG5ow7NtIChFeHBvc3VyZSk6IEdlbmRlciAoc28gc8OhbmggTWFsZSB24bubaSBGZW1hbGUpDQotIEvhur90IHF14bqjIChPdXRjb21lKTogQWZmZWN0c19BY2FkZW1pY19QZXJmb3JtYW5jZSAoWWVzID0gYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCkNCg0KKipEaeG7hW4gZ2nhuqNpKioNCg0KLSBU4bu3IHPhu5Egbmd1eSBjxqEgKFJSKSA9IDAuOTYg4oaSIE5hbSBnaeG7m2kgY8OzIG5ndXkgY8ahIGLhu4sg4bqjbmggaMaw4bufbmcgaOG7jWMgdOG6rXAgdGjhuqVwIGjGoW4gbeG7mXQgY2jDunQgc28gduG7m2kgbuG7ryAoY2jhu4kga2hv4bqjbmcgOTYlIG5ndXkgY8ahIHNvIHbhu5tpIG7hu68pLg0KLSBLaG/huqNuZyB0aW4gY+G6rXkgOTUlID0gWzAuODYsIDEuMDhdIOKGkiBCYW8gZ+G7k20gMSDihpIga2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouDQotIHAtdmFsdWUg4omIIDAuNTEgPiAwLjA1IOKGkiBLaMO0bmcgY8OzIGLhurFuZyBjaOG7qW5nIMSR4buDIGvhur90IGx14bqtbiBz4buxIGtow6FjIGJp4buHdCBnaeG7r2EgbmFtIHbDoCBu4buvIHbhu4Eg4bqjbmggaMaw4bufbmcgaOG7jWMgdOG6rXAuDQoNCioqS+G6v3QgbHXhuq1uKioNCg0KLSBE4buxYSB0csOqbiBr4bq/dCBxdeG6oyBwaMOibiB0w61jaCwga2jDtG5nIGPDsyBz4buxIGtow6FjIGJp4buHdCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHbhu4Egbmd1eSBjxqEgYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCBnaeG7r2EgbmFtIHbDoCBu4buvLg0KVOG7tyBs4buHIOG6o25oIGjGsOG7n25nIGjhu41jIHThuq1wIGdp4buvYSBoYWkgZ2nhu5tpIGzDoCBn4bqnbiB0xrDGoW5nIMSRxrDGoW5nLCB24bubaSBuYW0gZ2nhu5tpIHRo4bqtbSBjaMOtIGPDsyBuZ3V5IGPGoSB0aOG6pXAgaMahbiBt4buZdCBjaMO6dCwgbmjGsG5nIHPhu7Ega2jDoWMgYmnhu4d0IGzDoCBraMO0bmcgxJHDoW5nIGvhu4MgduG7gSBt4bq3dCB0aOG7kW5nIGvDqi4NCg0KIyMjICoqNS4yIE1vc3QgdXNlZCBwbGF0Zm9ybSB2w6AgQWZmZWN0IGFjYWRhbWljIHBlcmZvcm1lbmNlKioNCg0KLSBUw61uaCBSZWxhdGl2ZSBSaXNrIChSUikgY+G7p2Egdmnhu4djIGLhu4sg4bqjbmggaMaw4bufbmcgaOG7jWMgdOG6rXAga2hpIFRpa1RvayBsw6AgbuG7gW4gdOG6o25nIGNow61uaCwgc28gduG7m2kgbmfGsOG7nWkga2jDtG5nIGTDuW5nIFRpa1RvayBsw6BtIG7hu4FuIHThuqNuZyBjaMOtbmguDQoNCiMjIyMgKio1LjIuMSBC4bqjbmcgZOG7ryBsaeG7h3UgY2jDqW8qKg0KYGBge3J9DQojIEPDoWMgbuG7gW4gdOG6o25nIGPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24gaOG7jWMgdOG6rXAgY+G7p2EgbmfGsOG7nWkgZMO5bmcgaGF5IGtow7RuZz8NCnRhYl90aWt0b2sgPC0gdGFibGUoZGF0JE1vc3RfVXNlZF9QbGF0Zm9ybSwgZGF0JEFmZmVjdHNfQWNhZGVtaWNfUGVyZm9ybWFuY2UpDQphZGRtYXJnaW5zKHRhYl90aWt0b2spDQpgYGANCg0KIyMjIyAqKjUuMi4yIFThuqFvIG1hIHRy4bqtbiB2w6AgdMOtbmggUlIqKg0KYGBge3J9DQojIFThuqFvIG1hIHRy4bqtbiAyw5cyDQptYXRyaXhfdGlrdG9rIDwtIG1hdHJpeChjKDE0NCwgMzA5LCAxMCwgMjQyKSwgbnJvdyA9IDIsIGJ5cm93ID0gRkFMU0UpDQpjb2xuYW1lcyhtYXRyaXhfdGlrdG9rKSA8LSBjKCJZZXMiLCAiTm8iKQ0Kcm93bmFtZXMobWF0cml4X3Rpa3RvaykgPC0gYygiVGlrVG9rIiwgIk90aGVycyIpDQojIFTDrW5oIFJSDQpyaXNrcmF0aW8obWF0cml4X3Rpa3RvaykNCmBgYA0KDQoqKkvhur90IHF14bqjIFJlbGF0aXZlIFJpc2sgKFJSKSoqDQoNCi0gUlIgY+G7p2EgbmjDs20gIk90aGVycyIgc28gduG7m2kgVGlrVG9rID0gNi43Ng0KLSA5NSUgQ0k6IFszLjY5LCAxMi40MV0NCi0gcC12YWx1ZSAobWlkLXAgZXhhY3QpID0gNy40MSDDlyAxMOKBu8Kywrkg4oaSIHLhuqV0IG5o4buPDQogIC0gTMawdSDDvTogUlIgbHXDtG4gxJHGsOG7o2MgdMOtbmggdMawxqFuZyDEkeG7kWkgduG7m2kgbmjDs20gdGhhbSBjaGnhur91LCDhu58gxJHDonkgVGlrVG9rIGzDoCBuaMOzbSBn4buRYyBuw6puIFJSID0gMS4wMCDhu58gZMOybmcgVGlrVG9rLCB2w6AgZ2nDoSB0cuG7iyBSUiDEkcaw4bujYyB0w61uaCBjaG8gbmjDs20gIk90aGVycyIuDQogIA0KKipEaeG7g24gZ2nhuqNpIGvhur90IHF14bqjKioNCg0KLSBOZ8aw4budaSBraMO0bmcgc+G7rSBk4bulbmcgVGlrVG9rICh04bupYyBsw6AgZMO5bmcgY8OhYyBu4buBbiB04bqjbmcga2jDoWMpIGPDsyBuZ3V5IGPGoSBLSMOUTkcgYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCBjYW8gaMahbiA2Ljc2IGzhuqduIHNvIHbhu5tpIG5nxrDhu51pIGTDuW5nIFRpa1Rvay4NCi0gSGF5IG5nxrDhu6NjIGzhuqFpLCBuZ8aw4budaSBkw7luZyBUaWtUb2sgY8OzIG5ndXkgY8ahIGLhu4sg4bqjbmggaMaw4bufbmcgaOG7jWMgdOG6rXAgY2FvIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgbmjhu69uZyBuZ8aw4budaSBkw7luZyBu4buBbiB04bqjbmcga2jDoWMuDQotIFbDrCBraG/huqNuZyB0aW4gY+G6rXkga2jDtG5nIGNo4bupYSAxIHbDoCBwLXZhbHVlIHLhuqV0IG5o4buPLCBuw6puIHPhu7Ega2jDoWMgYmnhu4d0IGzDoCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLg0KDQoqKkvhur90IGx14bqtbioqDQoNCi0gS+G6v3QgcXXhuqMgY2hvIHRo4bqleSBuZ8aw4budaSBkw7luZyBUaWtUb2sgY8OzIG5ndXkgY8ahIGLhu4sg4bqjbmggaMaw4bufbmcgaOG7jWMgdOG6rXAgY2FvIGjGoW4gcsO1IHLhu4d0IHNvIHbhu5tpIG5nxrDhu51pIGtow7RuZyBkw7luZyBUaWtUb2suDQpU4bu3IHPhu5Egbmd1eSBjxqEgKFJSKSBj4bunYSBuaMOzbSBraMO0bmcgZMO5bmcgVGlrVG9rIHNvIHbhu5tpIFRpa1RvayBsw6AgNi43NiwgduG7m2kga2hv4bqjbmcgdGluIGPhuq15IDk1JTogWzMuNjkg4oCTIDEyLjQxXSwgcC12YWx1ZSA8IDAuMDAxLg0KTmjGsCB24bqteSwgc+G7sSBraMOhYyBiaeG7h3QgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiwgdsOgIGPDsyB0aOG7gyBr4bq/dCBsdeG6rW4gcuG6sW5nIFRpa1RvayBsw6AgbeG7mXQgeeG6v3UgdOG7kSBy4bunaSBybyBsacOqbiBxdWFuIMSR4bq/biDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCB0cm9uZyBi4buZIGThu68gbGnhu4d1IG7DoHkuDQoNCiMjIyAqKjUuMyBBY2FkZW1pYyBMZXZlbCB2w6AgQWZmZWN0cyBhY2FkZW1pYyBwZXJmb3JtYW5jZSoqDQoNCi0gSOG7jWMgc2luaCBwaOG7lSB0aMO0bmcgY8OzIGLhu4sg4bqjbmggaMaw4bufbmcgaOG7jWMgdOG6rXAgbmhp4buBdSBoxqFuIGtow7RuZz8NCg0KIyMjIyAqKjUuMy4xIELhuqNuZyBk4buvIGxp4buHdSBjaMOpbyoqDQpgYGB7cn0NCiMgxJDhu5FpIHTGsOG7o25nIGzDoCBzaW5oIHZpw6puIHThu5F0IG5naGnhu4dwIGTDuW5nIG3huqFuZyB4w6MgaOG7mWkgY8OzIGLhu4sg4bqjbmggaMaw4bufbmcgxJHhur9uIGjhu41jIHThuq1wIGhheSBraMO0bmc/DQp0YWJfZ3JhZHVhdGUgPC0gdGFibGUoZGF0JEFjYWRlbWljX0xldmVsLCBkYXQkQWZmZWN0c19BY2FkZW1pY19QZXJmb3JtYW5jZSkNCmFkZG1hcmdpbnModGFiX2dyYWR1YXRlKQ0KYGBgDQoNCiMjIyMgKio1LjMuMSBU4bqhbyBtYSB0cuG6rW4gdsOgIHTDrW5oIFJSKioNCmBgYHtyfQ0KIyBU4bqhbyBtYSB0cuG6rW4gMsOXMg0KbWF0cml4X2dyYWR1YXRlIDwtIG1hdHJpeChjKDE5OSwgMjU0LCAxMjYsIDEyNiksIG5yb3cgPSAyLCBieXJvdyA9IEZBTFNFKQ0KY29sbmFtZXMobWF0cml4X2dyYWR1YXRlKSA8LSBjKCJZZXMiLCAiTm8iKQ0Kcm93bmFtZXMobWF0cml4X2dyYWR1YXRlKSA8LSBjKCJHcmFkdWF0ZSIsICJPdGhlcnMiKQ0KIyBUw61uaCBSUg0Kcmlza3JhdGlvKG1hdHJpeF9ncmFkdWF0ZSkNCmBgYA0KDQoqKkvhur90IHF14bqjIFJlbGF0aXZlIFJpc2sgKFJSKSoqDQoNCi0gUlIgY+G7p2EgbmjDs20gIk90aGVycyIgc28gduG7m2kgR3JhZHVhdGUgPSAwLjg2DQotIDk1JSBDSTogWzAuNzAsIDEuMDRdDQotIHAtdmFsdWUgKG1pZC1wIGV4YWN0KSA9IDAuMTIyDQogIC0gTMawdSDDvTogUlIgbHXDtG4gxJHGsOG7o2MgdMOtbmggdMawxqFuZyDEkeG7kWkgduG7m2kgbmjDs20gdGhhbSBjaGnhur91LCDhu58gxJHDonkgR3JhZHVhdGUgbMOgIG5ow7NtIGfhu5FjIG7Dqm4gUlIgPSAxLjAwIOG7nyBkw7JuZyBHcmFkdWF0ZSwgdsOgIGdpw6EgdHLhu4sgUlIgxJHGsOG7o2MgdMOtbmggY2hvIG5ow7NtICJPdGhlcnMiLg0KICANCioqRGnhu4VuIGdp4bqjaSBr4bq/dCBxdeG6oyoqDQoNCi0gTmjDs20gIk90aGVycyIgKGfhu5NtIGjhu41jIHNpbmggcGjhu5UgdGjDtG5nIHbDoCBzaW5oIHZpw6puIMSR4bqhaSBo4buNYykgY8OzIG5ndXkgY8ahIGLhu4sg4bqjbmggaMaw4bufbmcgaOG7jWMgdOG6rXAgZG8gbeG6oW5nIHjDoyBo4buZaSB0aOG6pXAgaMahbiBraG/huqNuZyAxNCUgc28gduG7m2kgbmjDs20gR3JhZHVhdGUuDQotIFR1eSBuaGnDqm4sIHbDrCBraG/huqNuZyB0aW4gY+G6rXkgY2jhu6lhIGdpw6EgdHLhu4sgMSwgdsOgIHAtdmFsdWUgPiAwLjA1LCBuw6puIHPhu7Ega2jDoWMgYmnhu4d0IGtow7RuZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLg0KLSBOw7NpIGPDoWNoIGtow6FjLCBraMO0bmcgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIMSR4buDIGto4bqzbmcgxJHhu4tuaCBzaW5oIHZpw6puIHThu5F0IG5naGnhu4dwIGLhu4sg4bqjbmggaMaw4bufbmcgaOG7jWMgdOG6rXAgbmhp4buBdSBoxqFuIHNvIHbhu5tpIGPDoWMgbmjDs20gaOG7jWMgduG6pW4gY8OybiBs4bqhaS4NCg0KKipL4bq/dCBsdeG6rW4qKg0KDQotIFThu7cgc+G7kSBuZ3V5IGPGoSAoUlIpIGPhu6dhIG5ow7NtICJPdGhlcnMiIHNvIHbhu5tpIEdyYWR1YXRlIGzDoCAwLjg2LCB24bubaSBraG/huqNuZyB0aW4gY+G6rXkgOTUlOiBbMC43MCDigJMgMS4wNF0sIHAtdmFsdWUgPSAwLjEyMi4NCi0gU+G7sSBraMOhYyBiaeG7h3Qga2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6osIGRvIMSRw7Mga2jDtG5nIHRo4buDIGvhur90IGx14bqtbiBy4bqxbmcgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIGzDoCB54bq/dSB04buRIOG6o25oIGjGsOG7n25nIHLDtSBy4buHdCDEkeG6v24gdmnhu4djIGLhu4sgdMOhYyDEkeG7mW5nIGjhu41jIHThuq1wIHThu6sgbeG6oW5nIHjDoyBo4buZaSB0cm9uZyBi4buZIGThu68gbGnhu4d1IG7DoHkuDQoNCiMjICoqUEjhuqZOIDY6IE9ERFMgUkFUSU8gLSBU4bu3IHPhu5EgY2jDqm5oKioNCg0KIyMjICoqNi4xIEdlbmRlciB2w6AgQWZmZWN0IGFjYWRhbWljIHBlcmZvcm1lbmNlKioNCg0KYGBge3J9DQojIELhuqNuZyBjaMOpbyBnaeG7r2EgR2VuZGVyIHbDoCBBZmZlY3RzIEFjYWRlbWljIFBlcmZvcm1hbmNlDQp0YWIxIDwtIHRhYmxlKGRhdCRHZW5kZXIsIGRhdCRBZmZlY3RzX0FjYWRlbWljX1BlcmZvcm1hbmNlKQ0KIyBUw61uaCBPZGRzIFJhdGlvDQpvZGRzcmF0aW8odGFiMSkNCmBgYA0KDQoqKkvhur90IHF14bqjIE9kZHMgUmF0aW8gKE9SKSoqDQoNCi0gT1IgY+G7p2EgbmjDs20gIk1hbGUiIHNvIHbhu5tpICJGZW1hbGUiID0gMC45MA0KLSA5NSUgQ0kgKGtob+G6o25nIHRpbiBj4bqteSk6IFswLjY2LCAxLjIzXQ0KLSBwLXZhbHVlIChtaWQtcCBleGFjdCkgPSAwLjUxMw0KICAtIEzGsHUgw706ICJGZW1hbGUiIGzDoCBuaMOzbSB0aGFtIGNoaeG6v3UsIG7Dqm4gT1IgY+G7p2EgbmjDs20gRmVtYWxlID0gMS4wMCAobeG6t2MgxJHhu4tuaCksIHbDoCBr4bq/dCBxdeG6oyBPUiB0aOG7gyBoaeG7h24gbeG7qWMgc28gc8OhbmggY+G7p2EgbmjDs20gIk1hbGUiIHbhu5tpICJGZW1hbGUiLg0KICANCioqRGnhu4VuIGdp4bqjaSBr4bq/dCBxdeG6oyoqDQoNCi0gT2RkcyBi4buLIOG6o25oIGjGsOG7n25nIGjhu41jIHThuq1wIOG7nyBuYW0gZ2nhu5tpIHRo4bqlcCBoxqFuIGtob+G6o25nIDEwJSBzbyB24bubaSBu4buvIGdp4bubaSAoT1IgPSAwLjkwKS4NCi0gVHV5IG5oacOqbiwgdsOsIGtob+G6o25nIHRpbiBj4bqteSBjaOG7qWEgZ2nDoSB0cuG7iyAxIHbDoCBwLXZhbHVlID4gMC4wNSwgbsOqbiBraMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4NCi0gTsOzaSBjw6FjaCBraMOhYywga2jDtG5nIGPDsyDEkeG7pyBi4bqxbmcgY2jhu6luZyDEkeG7gyBraOG6s25nIMSR4buLbmggZ2nhu5tpIHTDrW5oIGPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24ga2jhuqMgbsSDbmcgYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcC4NCiAgDQoqKkvhur90IGx14bqtbioqDQoNCi0gVOG7tyBz4buRIG9kZHMgKE9SKSBj4bunYSBuYW0gZ2nhu5tpIHNvIHbhu5tpIG7hu68gZ2nhu5tpIGzDoCAwLjkwLCB24bubaSBraG/huqNuZyB0aW4gY+G6rXkgOTUlOiBbMC42NiDigJMgMS4yM10sIHAtdmFsdWUgPSAwLjUxMy4NCi0gRG8ga2hv4bqjbmcgdGluIGPhuq15IGNo4bupYSAxIHbDoCBwLXZhbHVlID4gMC4wNSwga2jDtG5nIGPDsyBz4buxIGtow6FjIGJp4buHdCDEkcOhbmcga+G7gyB24buBIG9kZHMgYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCBnaeG7r2EgbmFtIHbDoCBu4buvIHRyb25nIGLhu5kgZOG7ryBsaeG7h3UgbsOgeS4NCi0gR2nhu5tpIHTDrW5oIGtow7RuZyBwaOG6o2kgbMOgIHnhur91IHThu5EgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiDhuqNuaCBoxrDhu59uZyDEkeG6v24ga2jhuqMgbsSDbmcgYuG7iyB0w6FjIMSR4buZbmcgYuG7n2kgbeG6oW5nIHjDoyBo4buZaSDEkeG7kWkgduG7m2kgaOG7jWMgdOG6rXAuDQoNCiMjIyAqKjYuMiBNb3N0IHVzZWQgcGxhdGZvcm0gdsOgIEFmZmVjdCBhY2FkYW1pYyBwZXJmb3JtZW5jZSoqDQoNCmBgYHtyfQ0KIyBDw6FjIG7hu4FuIHThuqNuZyBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIGjhu41jIHThuq1wIGPhu6dhIG5nxrDhu51pIGTDuW5nIGhheSBraMO0bmc/DQp0YWJfdGlrdG9rIDwtIHRhYmxlKGRhdCRNb3N0X1VzZWRfUGxhdGZvcm0sIGRhdCRBZmZlY3RzX0FjYWRlbWljX1BlcmZvcm1hbmNlKQ0KIyBU4bqhbyBtYSB0cuG6rW4gMsOXMg0KbWF0cml4X3Rpa3RvayA8LSBtYXRyaXgoYygxNDQsIDMwOSwgMTAsIDI0MiksIG5yb3cgPSAyLCBieXJvdyA9IEZBTFNFKQ0KY29sbmFtZXMobWF0cml4X3Rpa3RvaykgPC0gYygiWWVzIiwgIk5vIikNCnJvd25hbWVzKG1hdHJpeF90aWt0b2spIDwtIGMoIlRpa1RvayIsICJPdGhlcnMiKQ0KIyBUw61uaCBPZGRzIFJhdGlvDQpvZGRzcmF0aW8obWF0cml4X3Rpa3RvaykNCmBgYA0KDQoqKkvhur90IHF14bqjIE9kZHMgUmF0aW8gKE9SKSoqDQoNCi0gT1IgY+G7p2EgbmjDs20gIk90aGVycyIgc28gduG7m2kgVGlrVG9rID0gMTEuMDkNCi0gOTUlIGtob+G6o25nIHRpbiBj4bqteSAoQ0kpOiBbNi4wMCwgMjMuMDNdDQotIHAtdmFsdWUgKG1pZC1wIGV4YWN0KSA9IDcuNDEgw5cgMTDigbvCssK5IOKGkiBS4bqldCBuaOG7jw0KLSBHaGkgY2jDujoNCiAgLSBUaWtUb2sgbMOgIG5ow7NtIHRoYW0gY2hp4bq/dSwgbsOqbiBPUiA9IDEgdOG6oWkgZMOybmcgVGlrVG9rICht4bq3YyDEkeG7i25oKS4NCiAgLSBHacOhIHRy4buLIE9SID4gMSDhu58gZMOybmcgIk90aGVycyIgdGjhu4MgaGnhu4duIG3hu6ljIMSR4buZIHNvIHPDoW5oIG9kZHMgYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCBnaeG7r2EgbmfGsOG7nWkga2jDtG5nIGTDuW5nIFRpa1RvayB2w6AgbmfGsOG7nWkgZMO5bmcgVGlrVG9rLg0KICANCioqRGnhu4VuIGdp4bqjaSBr4bq/dCBxdeG6oyoqDQoNCi0gTmfGsOG7nWkgZMO5bmcgY8OhYyBu4buBbiB04bqjbmcga2jDoWMgKGtow7RuZyBwaOG6o2kgVGlrVG9rKSBjw7Mgb2RkcyBraMO0bmcgYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCBjYW8gaMahbiAxMS4wOSBs4bqnbiBzbyB24bubaSBuZ8aw4budaSBkw7luZyBUaWtUb2suDQotIMSQaeG7gXUgbsOgeSB0xrDGoW5nIMSRxrDGoW5nIHbhu5tpIHZp4buHYyBuZ8aw4budaSBkw7luZyBUaWtUb2sgY8OzIG9kZHMgYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCBjYW8gaMahbiBy4bqldCDEkcOhbmcga+G7gy4NCi0gVsOsIGtob+G6o25nIHRpbiBj4bqteSBraMO0bmcgY2jhu6lhIGdpw6EgdHLhu4sgMSB2w6AgcC12YWx1ZSA8IDAuMDAxLCBuw6puIHPhu7Ega2jDoWMgYmnhu4d0IGzDoCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLg0KDQoqKkvhur90IGx14bqtbioqDQoNCi0gVOG7tyBz4buRIG9kZHMgKE9SKSBj4bunYSBuaMOzbSBraMO0bmcgZMO5bmcgVGlrVG9rIGzDoCAxMS4wOSwgQ0k6IFs2LjAwIOKAkyAyMy4wM10sIHAtdmFsdWUgPCAwLjAwMS4NCi0gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgcuG6sW5nIG5nxrDhu51pIGTDuW5nIFRpa1RvayBjw7Mgbmd1eSBjxqEgYuG7iyDhuqNuaCBoxrDhu59uZyBo4buNYyB04bqtcCBjYW8gaMahbiDEkcOhbmcga+G7gyBzbyB24bubaSBuZ8aw4budaSBz4butIGThu6VuZyBu4buBbiB04bqjbmcgbeG6oW5nIHjDoyBo4buZaSBraMOhYy4NCi0gVGlrVG9rIGPDsyB0aOG7gyDEkcaw4bujYyBjb2kgbMOgIG3hu5l0IHnhur91IHThu5EgcuG7p2kgcm8gdGnhu4FtIG7Eg25nIOG6o25oIGjGsOG7n25nIHRpw6p1IGPhu7FjIMSR4bq/biBo4buNYyB04bqtcCB0cm9uZyBi4buZIGThu68gbGnhu4d1IG7DoHkuDQoNCiMjIyAqKjYuMyBBY2FkZW1pYyBMZXZlbCB2w6AgQWZmZWN0cyBhY2FkZW1pYyBwZXJmb3JtYW5jZSoqDQoNCmBgYHtyfQ0KIyDEkOG7kWkgdMaw4bujbmcgbMOgIHNpbmggdmnDqm4gdOG7kXQgbmdoaeG7h3AgZMO5bmcgbeG6oW5nIHjDoyBo4buZaSBjw7MgYuG7iyDhuqNuaCBoxrDhu59uZyDEkeG6v24gaOG7jWMgdOG6rXAgaGF5IGtow7RuZz8NCnRhYl9ncmFkdWF0ZSA8LSB0YWJsZShkYXQkQWNhZGVtaWNfTGV2ZWwsIGRhdCRBZmZlY3RzX0FjYWRlbWljX1BlcmZvcm1hbmNlKQ0KIyBU4bqhbyBtYSB0cuG6rW4gMsOXMg0KbWF0cml4X2dyYWR1YXRlIDwtIG1hdHJpeChjKDE5OSwgMjU0LCAxMjYsIDEyNiksIG5yb3cgPSAyLCBieXJvdyA9IEZBTFNFKQ0KY29sbmFtZXMobWF0cml4X2dyYWR1YXRlKSA8LSBjKCJZZXMiLCAiTm8iKQ0Kcm93bmFtZXMobWF0cml4X2dyYWR1YXRlKSA8LSBjKCJHcmFkdWF0ZSIsICJPdGhlcnMiKQ0KIyBUw61uaCBSUg0Kb2Rkc3JhdGlvKG1hdHJpeF9ncmFkdWF0ZSkNCmBgYA0KDQoqKkvhur90IHF14bqjIE9kZHMgUmF0aW8gKE9SKSoqDQoNCi0gT1IgY+G7p2EgbmjDs20gIk90aGVycyIgc28gduG7m2kgbmjDs20gR3JhZHVhdGUgPSAwLjc4DQotIDk1JSBDSTogWzAuNTgsIDEuMDddDQotIFAtdmFsdWUgKG1pZC1wIGV4YWN0KSA9IDAuMTM0DQoNCioqRGnhu4VuIGdp4bqjaSBr4bq/dCBxdeG6oyoqDQoNCi0gT2RkcyBi4buLIOG6o25oIGjGsOG7n25nIGjhu41jIHThuq1wIGPhu6dhIG5ow7NtICJPdGhlcnMiIChIaWdoIHNjaG9vbCArIFVuZGVyZ3JhZHVhdGUpIHRo4bqlcCBoxqFuIDAuNzggbOG6p24gc28gduG7m2kgbmjDs20gR3JhZHVhdGUuDQotIEtob+G6o25nIHRpbiBj4bqteSA5NSUgY+G7p2EgT1IgbMOgIFswLjU4IOKAkyAxLjA3XSwgYmFvIGfhu5NtIGdpw6EgdHLhu4sgMSwgdOG7qWMgbMOgIGtow7RuZyB0aOG7gyBsb+G6oWkgdHLhu6sga2jhuqMgbsSDbmcga2jDtG5nIGPDsyBz4buxIGtow6FjIGJp4buHdCB24buBIG9kZHMgZ2nhu69hIDIgbmjDs20uDQotIFAtdmFsdWUgPiAwLjA1IOKGkiBraMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiwgdGEga2jDtG5nIHRo4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBy4bqxbmcgaGFpIG5ow7NtIGPDsyBvZGRzIGLhurFuZyBuaGF1Lg0KDQoqKkvhur90IGx14bqtbioqDQoNCi0gS2jDtG5nIGPDsyDEkeG7pyBi4bqxbmcgY2jhu6luZyB0aOG7kW5nIGvDqiDEkeG7gyBraOG6s25nIMSR4buLbmggcuG6sW5nIGjhu41jIHNpbmgvc2luaCB2acOqbiBuaMOzbSAiT3RoZXJzIiBjw7Mgb2RkcyBi4buLIOG6o25oIGjGsOG7n25nIGjhu41jIHThuq1wIGtow6FjIHNvIHbhu5tpIG5ow7NtICJHcmFkdWF0ZSIuDQotIETDuSBPUiA8IDEgY2hvIHRo4bqleSB4dSBoxrDhu5tuZyBuaMOzbSBPdGhlcnMgw610IGLhu4sg4bqjbmggaMaw4bufbmcgaOG7jWMgdOG6rXAgaMahbiwgbmjGsG5nIHbDrCBraG/huqNuZyB0aW4gY+G6rXkgYmFvIGfhu5NtIDEgdsOgIHAtdmFsdWUgPiAwLjA1IOKGkiBr4bq/dCBsdeG6rW4gbsOgeSBjaMawYSBjaOG6r2MgY2jhuq9uIHbhu4EgbeG6t3QgdGjhu5FuZyBrw6ouDQoNCg0K