YÊU CẦU VÀ HOẠT ĐỘNG TUẦN 3: Đào sâu Suy diễn Thống kê trong Bảng Ngẫu nhiên và Giới thiệu về Mối liên hệ Phức tạp.

A. Đọc và Chuẩn bị trước buổi học

2. Tìm hiểu về các nội dung sau của Chương 2

2.1 Cấu trúc xác suất của bảng ngẫu nhiên

Bảng ngẫu nhiên

Bảng ngẫu nhiên (contingency table) là cách tổ chức dữ liệu dùng để trình bày số đếm (frequencies) của các tổ hợp xảy ra giữa hai hay nhiều biến phân loại. Mỗi ô trong bảng thể hiện số quan sát tương ứng với một kết hợp cụ thể giữa các biến.

  • Ví dụ, một bảng 2 chiều giữa giới tính (nam/nữ) và tình trạng bệnh (có/không) sẽ có 4 ô tương ứng với từng kết hợp giữa các mức của hai biến.

Phân phối Poisson

  • Sẽ sử dụng khi:

    • Các số đếm là kết quả của các quá trình độc lập, số đếm từng ô không bị ràng buộc tổng hàng/cột.

    • Không cố định tổng số quan sát.

    • Thường dùng trong mô hình log-linear và dữ liệu đếm theo thời gian/không gian

  • Công thức:

\[ N_{ij} \sim \mathrm{Poisson}(\mu_{ij}) \]

  • Thành phần:
Ký hiệu Ý nghĩa
\(N_{ij}\) Số đếm ở ô hàng \(i\), cột \(j\), được sinh ra độc lập
\(\mu_{ij}\) Kỳ vọng của số đếm tại ô \((i,j)\) – trung bình lý thuyết của phân phối Poisson
  • Ý nghĩa

    • Mỗi ô trong bảng là một biến Poisson độc lập.

    • Dữ liệu thường đến từ quá trình đếm tự nhiên: tai nạn, ca bệnh, sự kiện,…

    • Không cần tổng số đếm phải cố định → các ô độc lập với nhau.

  • Hàm xác suất (PMF)

\[ P(N_{ij} = n_{ij}) = \frac{e^{-\mu_{ij}} \mu_{ij}^{n_{ij}}}{n_{ij}!} \]

  • Tổng xác suất liên hợp cho toàn bảng

\[ P(\{n_{ij}\}) = \prod_{i,j} \frac{e^{-\mu_{ij}} \mu_{ij}^{n_{ij}}}{n_{ij}!} \]


Phân phối Multinomial

  • Công thức

\[ (N_{11}, N_{12}, \ldots, N_{rc}) \sim \mathrm{Multinomial}\left(n, \{p_{ij}\}\right) \]

  • Thành phần
Ký hiệu Ý nghĩa
\(N_{ij}\) Số quan sát ở ô hàng \(i\), cột \(j\) của bảng ngẫu nhiên
\(n\) Tổng số mẫu: \(n = \sum_{i=1}^{r} \sum_{j=1}^{c} N_{ij}\)
\(p_{ij}\) Xác suất một quan sát rơi vào ô \((i,j)\), với \(\sum_{i,j} p_{ij} = 1\)
  • Ý nghĩa

    • Phù hợp với dữ liệu dạng lựa chọn phân loại, rút mẫu có tổng cố định.

    • Các ô trong bảng có phụ thuộc lẫn nhau, vì tổng \(n\) là cố định.

    • Mỗi mẫu quan sát rơi vào một trong các ô, với xác suất \(p_{ij}\).

  • Hàm xác suất (PMF)

\[ P(n_{ij}) = \frac{n!}{\prod_{i,j} n_{ij}!} \prod_{i,j} p_{ij}^{n_{ij}} \]


Mối liên hệ giữa Poisson và Multinomial

Nếu:

  • Mỗi ô \(N_{ij} \sim \mathrm{Poisson}(\mu_{ij})\)

  • Và tổng \(N = \sum_{i,j} N_{ij} = n\) được cố định

Thì:

\[ (N_{ij} \mid N = n) \sim \mathrm{Multinomial}\left(n, p_{ij} = \frac{\mu_{ij}}{\sum \mu_{ij}}\right) \]

  • Diễn giải

    • Nếu bạn lấy các đếm Poisson rồi điều kiện hóa theo tổng số đếm cố định, bạn thu được một phân phối Multinomial.

    • Tức là: Multinomial là trường hợp đặc biệt của Poisson khi tổng được ràng buộc.


Mô hình log-tuyến tính (log-linear model)

Dùng để mô hình hóa mối liên hệ giữa các biến phân loại:

  • Mô hình log tuyến tính

\[ \log(\mu_{ij}) = \lambda + \lambda^{(R)}_i + \lambda^{(C)}_j + \lambda^{(RC)}_{ij} \]

  • Thành phần:
Ký hiệu Ý nghĩa
\(\lambda\) Hằng số tổng quát (intercept)
\(\lambda^{(R)}_i\) Hiệu ứng biến hàng (ví dụ: giới tính)
\(\lambda^{(C)}_j\) Hiệu ứng biến cột (ví dụ: tình trạng bệnh)
\(\lambda^{(RC)}_{ij}\) Tương tác giữa hàng và cột (mức độ phụ thuộc giữa 2 biến)
  • Ý nghĩa

    • Cho phép kiểm định độc lập (khi bỏ \(\lambda^{(RC)}_{ij}\)).

    • Có thể mở rộng cho bảng 3 chiều, 4 chiều,…

    • Thường được ước lượng bằng mô hình GLM với link log.


Tổng kết bảng so sánh

Đặc điểm Multinomial Poisson
Tổng số đếm Cố định \(n\) Không cố định
Quan hệ giữa các ô Phụ thuộc Độc lập
Dữ liệu phù hợp Rút mẫu, khảo sát Dữ liệu đếm tự nhiên
Phân tích tương tác Giới hạn Linh hoạt với log-linear
Công thức mô hình \(\text{Multinomial}(n, \{p_{ij}\})\) \(\text{Poisson}(\mu_{ij})\)
Khi điều kiện hóa tổng Cho ra phân phối Multinomial

2.2 So sánh 2 tỷ lệ trong bảng ngẫu nhiên 2x2

Giả sử một bảng 2x2 được trình bày như sau:

Kết quả (+) Kết quả (–) Tổng
Nhóm 1 \(a\) \(b\) \(a+b\)
Nhóm 2 \(c\) \(d\) \(c+d\)
Tổng \(a+c\) \(b+d\) \(n\)

Đây là dạng bảng thường dùng để so sánh xác suất thành công, rủi ro, hoặc phản hồi tích cực giữa hai nhóm.


Hiệu hai tỷ lệ

  • Công thức:

\[ \Delta p = \frac{a}{a+b} - \frac{c}{c+d} \]

  • Ý nghĩa:

    • mức chênh lệch tuyệt đối giữa hai tỷ lệ thành công ở hai nhóm.

    • Nếu \(\Delta p > 0\), nhóm 1 có tỷ lệ thành công cao hơn nhóm 2.

    • Đơn giản và dễ diễn giải, thích hợp khi tập trung vào sự khác biệt thực tế (absolute difference), thay vì tỷ lệ tương đối.


Tỷ số nguy cơ - Relative Risk

  • Công thức:

\[ RR = \frac{a / (a+b)}{c / (c+d)} \]

  • Ý nghĩa:

    • Đo mức tăng (hoặc giảm) nguy cơ của nhóm 1 so với nhóm 2.

    • \(RR = 1\): Không có khác biệt nguy cơ.

    • \(RR > 1\): Nhóm 1 có nguy cơ cao hơn.

    • \(RR < 1\): Nhóm 1 có nguy cơ thấp hơn.


Tỷ số chênh - Odds Ratio

  • Công thức:

\[ OR = \frac{a/b}{c/d} = \frac{ad}{bc} \]

  • Ý nghĩa:

    • So sánh cơ hội xảy ra sự kiện giữa hai nhóm.

    • \(OR = 1\): Không có liên hệ.

    • \(OR > 1\): Nhóm 1 có cơ hội cao hơn.

    • \(OR < 1\): Nhóm 1 có cơ hội thấp hơn.

  • Lưu ý:

    • OR gần giống RR khi xác suất sự kiện thấp.

    • OR thường được sử dụng trong hồi quy logistic.


2.3 Khoảng tin cậy cho các tham số đo mối liên hệ

Công thức:

Tính trên log(OR):

\[ \log(OR) \pm Z_{\alpha/2} \cdot \sqrt{ \frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d} } \]

Sau đó lấy mũ để trở lại OR:

\[ CI_{OR} = \left( e^{L},\ e^{U} \right) \]

Trong đó:

  • \(L = \log(OR) - Z_{\alpha/2} \cdot SE\)

  • \(U = \log(OR) + Z_{\alpha/2} \cdot SE\)

  • \(SE = \sqrt{ \frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d} }\)

  • Với mức tin cậy 95%, \(Z_{\alpha/2} = 1.96\)


2.4 Ví dụ

Một doanh nghiệp khảo sát tỷ lệ khách hàng gửi lại đánh giá sản phẩ (feedback)m. Kết quả:

Mua hàng Không mua Tổng
Nhóm đánh giá (Nhóm 1) 40 60 100
Nhóm không đánh giá (Nhóm 2) 20 80 100
  • Tính toán:

    • \(RR = \frac{40/100}{20/100} = 2.0\) → Đánh giá sản phẩm giúp tăng gấp đôi xác suất mua hàng.

    • \(OR = \frac{40 \cdot 80}{60 \cdot 20} = \frac{3200}{1200} = 2.67\) → Cơ hội mua hàng cao hơn 2.67 lần.

  • Khoảng tin cậy OR:

    • \(SE = \sqrt{1/40 + 1/60 + 1/20 + 1/80} \approx 0.329\)

    • \(\log(OR) \approx \log(2.67) = 0.981\)

    • \(CI_{log(OR)} = 0.981 \pm 1.96 \cdot 0.329 = (0.336,\ 1.626)\)

    • \(CI_{OR} = (e^{0.336},\ e^{1.626}) = (1.40,\ 5.08)\)

    OR có ý nghĩa thống kê, vì khoảng tin cậy không chứa 1.


2.5 Tổng kết

Chỉ số Công thức Ý nghĩa chính Ưu điểm Ứng dụng phổ biến
Hiệu tỷ lệ \(p_1 - p_2\) So sánh tuyệt đối giữa hai tỷ lệ Trực quan, dễ hiểu So sánh đơn giản
RR \(\frac{p_1}{p_2}\) So sánh xác suất giữa hai nhóm Diễn giải tự nhiên Nghiên cứu y học, marketing
OR \(\frac{ad}{bc}\) So sánh odds giữa hai nhóm Áp dụng linh hoạt trong hồi quy Hồi quy logistic, phân tích rủi ro

3. Suy nghĩ về bộ dữ liệu “Supermarket Transactions”

3.1 Đọc bộ dữ liệu

library(csv)
## Warning: package 'csv' was built under R version 4.3.3
data <- read.csv("C:/Users/HP/Downloads/Supermarket Transactions.csv", header = T)

3.2 Các bước thực hiện

B1: Tạo bảng chéo giữa Gender và Homeowner

table_gender_home <- table(data$Gender, data$Homeowner)
table_gender_home
##    
##        N    Y
##   F 2826 4344
##   M 2789 4100

B2: Tính Odds Ratio (tỷ số chênh)

a <- table_gender_home["F", "Y"]
b <- table_gender_home["F", "N"]
c <- table_gender_home["M", "Y"]
d <- table_gender_home["M", "N"]

OR <- (a * d) / (b * c)
OR
## [1] 1.04564

B3: Tính khoảng tin cậy cho OR

log_OR <- log(OR)
SE <- sqrt(1/a + 1/b + 1/c + 1/d)

# 95% CI
z <- 1.96
CI_lower <- exp(log_OR - z * SE)
CI_upper <- exp(log_OR + z * SE)

c(CI_lower, CI_upper)
## [1] 0.9773755 1.1186731

Diễn giải

  • OR = 1.045 > 1 cho thấy tỷ số chênh (odds ratio) về khả năng sở hữu nhà của Nữ cao hơn một chút so với Nam.

  • Nói cách khác, trong tập dữ liệu khách hàng này, là Nữ có liên quan đến việc tăng nhẹ odds sở hữu nhà so với Nam. Cụ thể, odds sở hữu nhà của Nữ cao hơn khoảng 4.5% so với Nam, nếu giữ các yếu tố khác không đổi.

  • Tuy nhiên, mức chênh lệch này là rất nhỏ và chưa đủ để kết luận chắc chắn về sự khác biệt giữa hai nhóm.

  • Khi xét đến khoảng tin cậy 95% của OR (khoảng từ ~0.977 đến ~1.118), ta thấy khoảng này chứa giá trị 1, điều đó có nghĩa là kết quả không có ý nghĩa thống kê ở mức tin cậy 95%.

  • Tóm lại, mặc dù OR > 1 cho thấy xu hướng odds sở hữu nhà của Nữ cao hơn Nam, kết luận này không có ý nghĩa thống kê. Sự khác biệt nhỏ có thể chỉ là do ngẫu nhiên trong mẫu quan sát. Do đó, không có bằng chứng đủ mạnh để khẳng định rằng việc là Nữ (so với Nam) làm tăng hoặc giảm odds của việc sở hữu nhà trong bộ dữ liệu này.

=> Kết luận: Trong phạm vi dữ liệu hiện tại, giới tính không phải là yếu tố quyết định đến việc sở hữu nhà — odds gần như tương đương nhau giữa Nam và Nữ.


3.3 GENDER VÀ MARITALSTATUS

Tạo bảng chéo

# Tạo bảng chéo giữa Gender và MaritalStatus
table_gender_marital <- table(data$Gender, data$MaritalStatus)
addmargins(table_gender_marital)  # Thêm hàng và cột tổng
##      
##           M     S   Sum
##   F    3602  3568  7170
##   M    3264  3625  6889
##   Sum  6866  7193 14059

Tính toán Relative Risk

# Trích xuất số liệu từ bảng chéo
A <- table_gender_marital["F","S"] # nữ độc thân
B <- table_gender_marital["F","M"] # nữ kết hôn
C <- table_gender_marital["M","S"] # nam độc thân
D <- table_gender_marital["M","M"] # nam kết hôn

# Tính RR
RR <- (A/(A+B))/(C/(C+D))
RR
## [1] 0.945701
# Trong đó: A/(A+B) là tỷ lệ phụ nữ độc thân trong tổng số nữ
# Và: C/(C+D) là tỷ lệ nam giới độc thân trong tổng số nam

Ý nghĩa

  • RR = 1: Không có sự khác biệt về tỷ lệ độc thân giữa hai giới tính.
  • RR > 1: Nam giới có tỷ lệ độc thân cao hơn phụ nữ.
  • RR < 1: Phụ nữ có tỷ lệ độc thân cao hơn nam giới.

Nhận xét

  • Tỷ lệ phụ nữ độc thân bằng khoảng 94.57% tỷ lệ nam giới độc thân. Điều này cho thấy không có sự khác biệt lớn về tỷ lệ độc thân giữa hai giới tính trong dữ liệu.
install.packages("epitools", repos = "https://cran.rstudio.com/")
## Installing package into 'C:/Users/HP/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\HP\AppData\Local\Temp\Rtmp6jFrrt\downloaded_packages
library(epitools)
riskratio(table_gender_marital, method="wald")
## $data
##        
##            M    S Total
##   F     3602 3568  7170
##   M     3264 3625  6889
##   Total 6866 7193 14059
## 
## $measure
##    risk ratio with 95% C.I.
##     estimate    lower    upper
##   F 1.000000       NA       NA
##   M 1.057417 1.023813 1.092123
## 
## $p.value
##    two-sided
##       midp.exact fisher.exact   chi.square
##   F           NA           NA           NA
##   M 0.0007045092 0.0007373895 0.0007038837
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
# Chỉ định phương pháp tính khoảng tin cậy (confidence interval) cho Risk Ratio.
# "wald" là phương pháp sử dụng ước lượng Wald, giả định phân phối chuẩn, để tính khoảng tin cậy.

Nhận xét

  • Relative Risk (RR)

    • F (Female): 1.000000
    • M (Male): 1.057417 (CI: 1.023813 - 1.092123)
  • Nhận xét về RR:

    • RR của nhóm F (Phụ nữ) là 1 vì nhóm này được lấy làm nhóm tham chiếu.
    • RR của nhóm M (Nam giới) là 1.0574, điều này cho thấy nam giới có tỷ lệ kết hôn (M) cao hơn một chút so với phụ nữ, với tỷ lệ 1.0574 lần so với nhóm phụ nữ. Sự khác biệt này có thể là không lớn, nhưng nó chỉ ra rằng nam giới có một khả năng kết hôn cao hơn phụ nữ trong mẫu nghiên cứu này.
    • Confidence Interval (CI) của RR cho nhóm M là [1.0238, 1.0921], nghĩa là khoảng tin cậy của RR không bao gồm giá trị 1. Điều này cho thấy sự khác biệt giữa hai nhóm F và M là có ý nghĩa thống kê và không phải ngẫu nhiên.
  • Kết luận về RR:

    • RR cho thấy nam giới có xu hướng kết hôn cao hơn so với phụ nữ, với RR = 1.0574.
    • Confidence Interval không bao gồm giá trị 1, điều này hỗ trợ cho giả thuyết rằng sự khác biệt giữa tỷ lệ kết hôn của nam và nữ có ý nghĩa thống kê.
  • p-value từ các kiểm định:

    • Chi-square test: p-value = 0.0007038837
    • Fisher’s exact test: p-value = 0.0007373895
    • Midpoint exact test: p-value = 0.0007045092
  • Nhận xét về p-value:

    • Các p-value từ các kiểm định đều nhỏ hơn mức ý nghĩa thông thường là 0.05, nghĩa là có đủ bằng chứng để bác bỏ giả thuyết null hypothesis (giả thuyết không có sự khác biệt giữa nam và nữ).
    • Điều này chỉ ra rằng có sự khác biệt có ý nghĩa thống kê giữa tỷ lệ kết hôn ở phụ nữ và nam giới.
  • Tóm tắt và nhận xét tổng quát

    • Relative Risk (RR): Tỷ lệ kết hôn của nam giới là 1.0574 lần so với phụ nữ, điều này cho thấy nam giới có khả năng kết hôn cao hơn phụ nữ trong mẫu nghiên cứu này.
    • Confidence Interval (C.I.): Khoảng tin cậy [1.0238, 1.0921] không bao gồm giá trị 1, điều này có nghĩa là sự khác biệt giữa tỷ lệ kết hôn của nam và nữ là có ý nghĩa thống kê.
    • p-value: Các p-value từ Chi-square, Fisher’s exact test và midp.exact đều nhỏ hơn 0.05, cho thấy có sự khác biệt đáng kể giữa tỷ lệ kết hôn của nam và nữ.
  • Kết luận

    • Tỷ lệ kết hôn giữa nam và nữ có sự khác biệt có ý nghĩa thống kê. Cụ thể, nam giới có tỷ lệ kết hôn cao hơn phụ nữ.
    • Relative Risk cho thấy nam giới có khả năng kết hôn cao hơn phụ nữ (với RR = 1.0574), và kết quả này có ý nghĩa thống kê rõ ràng, vì p-value đều rất nhỏ.
    • Khoảng tin cậy 95% của RR không bao gồm giá trị 1, điều này càng củng cố kết luận về sự khác biệt giữa tỷ lệ kết hôn của hai giới
LS0tDQp0aXRsZTogIk5oaWVtIFZ1IDMiDQphdXRob3I6ICJIaWV1IFZvIg0KZGF0ZTogImByIGZvcm1hdChTeXMudGltZSgpLCAnJUg6JU06JVMsICVkIC0gJW0gLSAlWScpYCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgdG9jOiB0cnVlDQogICAgZGZfcHJpbnQ6IGthYmxlDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KDQoqKlnDilUgQ+G6plUgVsOAIEhP4bqgVCDEkOG7mE5HIFRV4bqmTiAzOioqIMSQw6BvIHPDonUgU3V5IGRp4buFbiBUaOG7kW5nIGvDqiB0cm9uZyBC4bqjbmcgTmfhuqt1IG5oacOqbiB2w6AgR2nhu5tpIHRoaeG7h3UgduG7gSBN4buRaSBsacOqbiBo4buHIFBo4bupYyB04bqhcC4NCg0KDQojICoqKkEuIMSQ4buNYyB2w6AgQ2h14bqpbiBi4buLIHRyxrDhu5tjIGJ14buVaSBo4buNYyoqKg0KDQojIyAqKjIuIFTDrG0gaGnhu4N1IHbhu4EgY8OhYyBu4buZaSBkdW5nIHNhdSBj4bunYSBDaMawxqFuZyAyKioNCg0KIyMjICoqMi4xIEPhuqV1IHRyw7pjIHjDoWMgc3XhuqV0IGPhu6dhIGLhuqNuZyBuZ+G6q3Ugbmhpw6puKioNCg0KIyMjIyAqQuG6o25nIG5n4bqrdSBuaGnDqm4qDQoNCkLhuqNuZyBuZ+G6q3Ugbmhpw6puIChjb250aW5nZW5jeSB0YWJsZSkgbMOgIGPDoWNoIHThu5UgY2jhu6ljIGThu68gbGnhu4d1IGTDuW5nIMSR4buDIHRyw6xuaCBiw6B5IHPhu5EgxJHhur9tIChmcmVxdWVuY2llcykgY+G7p2EgY8OhYyB04buVIGjhu6NwIHjhuqN5IHJhIGdp4buvYSBoYWkgaGF5IG5oaeG7gXUgYmnhur9uIHBow6JuIGxv4bqhaS4gTeG7l2kgw7QgdHJvbmcgYuG6o25nIHRo4buDIGhp4buHbiBz4buRIHF1YW4gc8OhdCB0xrDGoW5nIOG7qW5nIHbhu5tpIG3hu5l0IGvhur90IGjhu6NwIGPhu6UgdGjhu4MgZ2nhu69hIGPDoWMgYmnhur9uLg0KDQotIFbDrSBk4bulLCBt4buZdCBi4bqjbmcgMiBjaGnhu4F1IGdp4buvYSBnaeG7m2kgdMOtbmggKG5hbS9u4buvKSB2w6AgdMOsbmggdHLhuqFuZyBi4buHbmggKGPDsy9raMO0bmcpIHPhur0gY8OzIDQgw7QgdMawxqFuZyDhu6luZyB24bubaSB04burbmcga+G6v3QgaOG7o3AgZ2nhu69hIGPDoWMgbeG7qWMgY+G7p2EgaGFpIGJp4bq/bi4NCg0KLS0tDQoNCiMjIyMgKlBow6JuIHBo4buRaSBQb2lzc29uKg0KDQotIFPhur0gc+G7rSBk4bulbmcga2hpOg0KDQogICAtIEPDoWMgc+G7kSDEkeG6v20gbMOgIGvhur90IHF14bqjIGPhu6dhIGPDoWMgcXXDoSB0csOsbmggxJHhu5ljIGzhuq1wLCBz4buRIMSR4bq/bSB04burbmcgw7Qga2jDtG5nIGLhu4sgcsOgbmcgYnXhu5ljIHThu5VuZyBow6BuZy9j4buZdC4NCg0KICAgLSBLaMO0bmcgY+G7kSDEkeG7i25oIHThu5VuZyBz4buRIHF1YW4gc8OhdC4NCg0KICAgLSBUaMaw4budbmcgZMO5bmcgdHJvbmcgbcO0IGjDrG5oIGxvZy1saW5lYXIgdsOgIGThu68gbGnhu4d1IMSR4bq/bSB0aGVvIHRo4budaSBnaWFuL2tow7RuZyBnaWFuDQoNCi0gQ8O0bmcgdGjhu6ljOg0KDQokJA0KTl97aWp9IFxzaW0gXG1hdGhybXtQb2lzc29ufShcbXVfe2lqfSkNCiQkDQoNCi0gKlRow6BuaCBwaOG6p246Kg0KDQp8IEvDvSBoaeG7h3UgfCDDnSBuZ2jEqWEgfA0KfC0tLS0tLS0tfC0tLS0tLS0tfA0KfCBcKE5fe2lqfVwpIHwgU+G7kSDEkeG6v20g4bufIMO0IGjDoG5nIFwoaVwpLCBj4buZdCBcKGpcKSwgxJHGsOG7o2Mgc2luaCByYSDEkeG7mWMgbOG6rXAgfA0KfCBcKFxtdV97aWp9XCkgfCBL4buzIHbhu41uZyBj4bunYSBz4buRIMSR4bq/bSB04bqhaSDDtCBcKCAoaSxqKSBcKSDigJMgdHJ1bmcgYsOsbmggbMO9IHRodXnhur90IGPhu6dhIHBow6JuIHBo4buRaSBQb2lzc29uIHwNCg0KLSDDnSBuZ2jEqWENCg0KICAgLSBN4buXaSDDtCB0cm9uZyBi4bqjbmcgbMOgIG3hu5l0ICpiaeG6v24gUG9pc3NvbiDEkeG7mWMgbOG6rXAqLg0KICAgDQogICAtIEThu68gbGnhu4d1IHRoxrDhu51uZyDEkeG6v24gdOG7qyAqcXXDoSB0csOsbmggxJHhur9tIHThu7Egbmhpw6puKjogdGFpIG7huqFuLCBjYSBi4buHbmgsIHPhu7Ega2nhu4duLC4uLg0KICAgDQogICAtIEtow7RuZyBj4bqnbiB04buVbmcgc+G7kSDEkeG6v20gcGjhuqNpIGPhu5EgxJHhu4tuaCDihpIgKmPDoWMgw7QgxJHhu5ljIGzhuq1wIHbhu5tpIG5oYXUqLg0KDQotIEjDoG0geMOhYyBzdeG6pXQgKFBNRikNCg0KJCQNClAoTl97aWp9ID0gbl97aWp9KSA9IFxmcmFje2Veey1cbXVfe2lqfX0gXG11X3tpan1ee25fe2lqfX19e25fe2lqfSF9DQokJA0KDQotICpU4buVbmcgeMOhYyBzdeG6pXQgbGnDqm4gaOG7o3AgY2hvIHRvw6BuIGLhuqNuZyoNCg0KJCQNClAoXHtuX3tpan1cfSkgPSBccHJvZF97aSxqfSBcZnJhY3tlXnstXG11X3tpan19IFxtdV97aWp9XntuX3tpan19fXtuX3tpan0hfQ0KJCQNCg0KLS0tDQoNCiMjIyMgKlBow6JuIHBo4buRaSBNdWx0aW5vbWlhbCoNCg0KLSAqQ8O0bmcgdGjhu6ljKg0KDQokJA0KKE5fezExfSwgTl97MTJ9LCBcbGRvdHMsIE5fe3JjfSkgXHNpbSBcbWF0aHJte011bHRpbm9taWFsfVxsZWZ0KG4sIFx7cF97aWp9XH1ccmlnaHQpDQokJA0KDQotIFRow6BuaCBwaOG6p24NCg0KfCBLw70gaGnhu4d1IHwgw50gbmdoxKlhIHwNCnwtLS0tLS0tLXwtLS0tLS0tLXwNCnwgXChOX3tpan1cKSB8IFPhu5EgcXVhbiBzw6F0IOG7nyDDtCBow6BuZyBcKGlcKSwgY+G7mXQgXChqXCkgY+G7p2EgYuG6o25nIG5n4bqrdSBuaGnDqm4gfA0KfCBcKG5cKSB8IFThu5VuZyBz4buRIG3huqt1OiBcKG4gPSBcc3VtX3tpPTF9XntyfSBcc3VtX3tqPTF9XntjfSBOX3tpan1cKSB8DQp8IFwocF97aWp9XCkgfCBYw6FjIHN14bqldCBt4buZdCBxdWFuIHPDoXQgcsahaSB2w6BvIMO0IFwoIChpLGopIFwpLCB24bubaSBcKCBcc3VtX3tpLGp9IHBfe2lqfSA9IDEgXCkgfA0KDQotIMOdIG5naMSpYQ0KDQogICAtIFBow7kgaOG7o3AgduG7m2kgZOG7ryBsaeG7h3UgZOG6oW5nIGzhu7FhIGNo4buNbiBwaMOibiBsb+G6oWksIHLDunQgbeG6q3UgY8OzIHThu5VuZyBj4buRIMSR4buLbmguDQoNCiAgIC0gQ8OhYyDDtCB0cm9uZyBi4bqjbmcgY8OzICpwaOG7pSB0aHXhu5ljIGzhuqtuIG5oYXUqLCB2w6wgdOG7lW5nIFwoblwpIGzDoCBj4buRIMSR4buLbmguDQoNCiAgIC0gTeG7l2kgbeG6q3UgcXVhbiBzw6F0IHLGoWkgdsOgbyBt4buZdCB0cm9uZyBjw6FjIMO0LCB24bubaSB4w6FjIHN14bqldCBcKHBfe2lqfVwpLg0KDQotIEjDoG0geMOhYyBzdeG6pXQgKFBNRikNCg0KJCQNClAobl97aWp9KSA9IFxmcmFje24hfXtccHJvZF97aSxqfSBuX3tpan0hfSBccHJvZF97aSxqfSBwX3tpan1ee25fe2lqfX0NCiQkDQoNCi0tLQ0KDQojIyMjICpN4buRaSBsacOqbiBo4buHIGdp4buvYSBQb2lzc29uIHbDoCBNdWx0aW5vbWlhbCoNCg0KTuG6v3U6DQoNCi0gTeG7l2kgw7QgXCggTl97aWp9IFxzaW0gXG1hdGhybXtQb2lzc29ufShcbXVfe2lqfSkgXCkNCg0KLSBWw6AgdOG7lW5nIFwoIE4gPSBcc3VtX3tpLGp9IE5fe2lqfSA9IG4gXCkgxJHGsOG7o2MgY+G7kSDEkeG7i25oDQoNClRow6w6DQoNCiQkDQooTl97aWp9IFxtaWQgTiA9IG4pIFxzaW0gXG1hdGhybXtNdWx0aW5vbWlhbH1cbGVmdChuLCBwX3tpan0gPSBcZnJhY3tcbXVfe2lqfX17XHN1bSBcbXVfe2lqfX1ccmlnaHQpDQokJA0KDQotIERp4buFbiBnaeG6o2kNCg0KICAgLSBO4bq/dSBi4bqhbiBs4bqleSBjw6FjIMSR4bq/bSBQb2lzc29uIHLhu5NpICrEkWnhu4F1IGtp4buHbiBow7NhKiB0aGVvIHThu5VuZyBz4buRIMSR4bq/bSBj4buRIMSR4buLbmgsIGLhuqFuIHRodSDEkcaw4bujYyBt4buZdCBwaMOibiBwaOG7kWkgTXVsdGlub21pYWwuDQogICANCiAgIC0gVOG7qWMgbMOgOiAqTXVsdGlub21pYWwgbMOgIHRyxrDhu51uZyBo4bujcCDEkeG6t2MgYmnhu4d0IGPhu6dhIFBvaXNzb24ga2hpIHThu5VuZyDEkcaw4bujYyByw6BuZyBideG7mWMqLg0KDQotLS0NCg0KIyMjIyAqTcO0IGjDrG5oIGxvZy10dXnhur9uIHTDrW5oIChsb2ctbGluZWFyIG1vZGVsKSoNCg0KRMO5bmcgxJHhu4MgKm3DtCBow6xuaCBow7NhIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIGPDoWMgYmnhur9uIHBow6JuIGxv4bqhaSo6DQoNCi0gTcO0IGjDrG5oIGxvZyB0dXnhur9uIHTDrW5oDQoNCiQkDQpcbG9nKFxtdV97aWp9KSA9IFxsYW1iZGEgKyBcbGFtYmRhXnsoUil9X2kgKyBcbGFtYmRhXnsoQyl9X2ogKyBcbGFtYmRhXnsoUkMpfV97aWp9DQokJA0KDQotIFRow6BuaCBwaOG6p246DQoNCnwgS8O9IGhp4buHdSB8IMOdIG5naMSpYSB8DQp8LS0tLS0tLS18LS0tLS0tLS18DQp8IFwoXGxhbWJkYVwpIHwgSOG6sW5nIHPhu5EgdOG7lW5nIHF1w6F0IChpbnRlcmNlcHQpIHwNCnwgXChcbGFtYmRhXnsoUil9X2lcKSB8IEhp4buHdSDhu6luZyBiaeG6v24gaMOgbmcgKHbDrSBk4bulOiBnaeG7m2kgdMOtbmgpIHwNCnwgXChcbGFtYmRhXnsoQyl9X2pcKSB8IEhp4buHdSDhu6luZyBiaeG6v24gY+G7mXQgKHbDrSBk4bulOiB0w6xuaCB0cuG6oW5nIGLhu4duaCkgfA0KfCBcKFxsYW1iZGFeeyhSQyl9X3tpan1cKSB8IFTGsMahbmcgdMOhYyBnaeG7r2EgaMOgbmcgdsOgIGPhu5l0ICht4bupYyDEkeG7mSBwaOG7pSB0aHXhu5ljIGdp4buvYSAyIGJp4bq/bikgfA0KDQotIMOdIG5naMSpYQ0KDQogICAtIENobyBwaMOpcCBraeG7g20gxJHhu4tuaCDEkeG7mWMgbOG6rXAgKGtoaSBi4buPIFwoIFxsYW1iZGFeeyhSQyl9X3tpan0gXCkpLg0KDQogICAtIEPDsyB0aOG7gyBt4bufIHLhu5luZyBjaG8gYuG6o25nIDMgY2hp4buBdSwgNCBjaGnhu4F1LC4uLg0KDQogICAtIFRoxrDhu51uZyDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcgYuG6sW5nIG3DtCBow6xuaCBHTE0gduG7m2kgbGluayBsb2cuDQoNCi0tLQ0KDQojIyMjIFThu5VuZyBr4bq/dCBi4bqjbmcgc28gc8OhbmgNCg0KfCDEkOG6t2MgxJFp4buDbSB8IE11bHRpbm9taWFsIHwgUG9pc3NvbiB8DQp8LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwNCnwgVOG7lW5nIHPhu5EgxJHhur9tIHwgQ+G7kSDEkeG7i25oIFwoblwpIHwgS2jDtG5nIGPhu5EgxJHhu4tuaCB8DQp8IFF1YW4gaOG7hyBnaeG7r2EgY8OhYyDDtCB8IFBo4bulIHRodeG7mWMgfCDEkOG7mWMgbOG6rXAgfA0KfCBE4buvIGxp4buHdSBwaMO5IGjhu6NwIHwgUsO6dCBt4bqrdSwga2jhuqNvIHPDoXQgfCBE4buvIGxp4buHdSDEkeG6v20gdOG7sSBuaGnDqm4gfA0KfCBQaMOibiB0w61jaCB0xrDGoW5nIHTDoWMgfCBHaeG7m2kgaOG6oW4gfCBMaW5oIGhv4bqhdCB24bubaSBsb2ctbGluZWFyIHwNCnwgQ8O0bmcgdGjhu6ljIG3DtCBow6xuaCB8IFwoXHRleHR7TXVsdGlub21pYWx9KG4sIFx7cF97aWp9XH0pXCkgfCBcKFx0ZXh0e1BvaXNzb259KFxtdV97aWp9KVwpIHwNCnwgS2hpIMSRaeG7gXUga2nhu4duIGjDs2EgdOG7lW5nIHwg4oCUIHwgQ2hvIHJhIHBow6JuIHBo4buRaSBNdWx0aW5vbWlhbCB8DQoNCi0tLQ0KDQojIyMgKjIuMiBTbyBzw6FuaCAyIHThu7cgbOG7hyB0cm9uZyBi4bqjbmcgbmfhuqt1IG5oacOqbiAyeDIqDQoNCkdp4bqjIHPhu60gbeG7mXQgYuG6o25nIDJ4MiDEkcaw4bujYyB0csOsbmggYsOgeSBuaMawIHNhdToNCg0KfCAgICAgICAgICAgICAgIHwgS+G6v3QgcXXhuqMgKCspIHwgS+G6v3QgcXXhuqMgKOKAkykgfCBU4buVbmcgICAgIHwNCnwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS18DQp8IE5ow7NtIDEgICAgICAgIHwgXChhXCkgICAgICAgfCBcKGJcKSAgICAgICB8IFwoYStiXCkgIHwNCnwgTmjDs20gMiAgICAgICAgfCBcKGNcKSAgICAgICB8IFwoZFwpICAgICAgIHwgXChjK2RcKSAgfA0KfCAqKlThu5VuZyoqICAgICAgfCBcKGErY1wpICAgICB8IFwoYitkXCkgICAgIHwgXChuXCkgICAgfA0KDQrEkMOieSBsw6AgZOG6oW5nIGLhuqNuZyB0aMaw4budbmcgZMO5bmcgxJHhu4Mgc28gc8OhbmggeMOhYyBzdeG6pXQgdGjDoG5oIGPDtG5nLCBy4bunaSBybywgaG/hurdjIHBo4bqjbiBo4buTaSB0w61jaCBj4buxYyBnaeG7r2EgaGFpIG5ow7NtLg0KDQotLS0NCg0KIyMjIyAqSGnhu4d1IGhhaSB04bu3IGzhu4cqDQoNCi0gQ8O0bmcgdGjhu6ljOg0KDQpcWw0KXERlbHRhIHAgPSBcZnJhY3thfXthK2J9IC0gXGZyYWN7Y317YytkfQ0KXF0NCg0KLSDDnSBuZ2jEqWE6DQoNCiAgIC0gTMOgICpt4bupYyBjaMOqbmggbOG7h2NoIHR1eeG7h3QgxJHhu5FpKiBnaeG7r2EgaGFpIHThu7cgbOG7hyB0aMOgbmggY8O0bmcg4bufIGhhaSBuaMOzbS4NCg0KICAgLSBO4bq/dSBcKFxEZWx0YSBwID4gMFwpLCBuaMOzbSAxIGPDsyB04bu3IGzhu4cgdGjDoG5oIGPDtG5nIGNhbyBoxqFuIG5ow7NtIDIuDQoNCiAgIC0gxJDGoW4gZ2nhuqNuIHbDoCBk4buFIGRp4buFbiBnaeG6o2ksIHRow61jaCBo4bujcCBraGkgdOG6rXAgdHJ1bmcgdsOgbyBz4buxICpraMOhYyBiaeG7h3QgdGjhu7FjIHThur8qIChhYnNvbHV0ZSBkaWZmZXJlbmNlKSwgdGhheSB2w6wgdOG7tyBs4buHIHTGsMahbmcgxJHhu5FpLg0KICAgDQotLS0NCg0KIyMjIyAqVOG7tyBz4buRIG5ndXkgY8ahIC0gUmVsYXRpdmUgUmlzayoNCg0KLSBDw7RuZyB0aOG7qWM6DQoNClxbDQpSUiA9IFxmcmFje2EgLyAoYStiKX17YyAvIChjK2QpfQ0KXF0NCg0KLSDDnSBuZ2jEqWE6DQoNCiAgIC0gxJBvIG3hu6ljIHTEg25nIChob+G6t2MgZ2nhuqNtKSAqbmd1eSBjxqEqIGPhu6dhIG5ow7NtIDEgc28gduG7m2kgbmjDs20gMi4NCg0KICAgLSBcKFJSID0gMVwpOiBLaMO0bmcgY8OzIGtow6FjIGJp4buHdCBuZ3V5IGPGoS4NCiAgDQogICAtIFwoUlIgPiAxXCk6IE5ow7NtIDEgY8OzIG5ndXkgY8ahIGNhbyBoxqFuLg0KICANCiAgIC0gXChSUiA8IDFcKTogTmjDs20gMSBjw7Mgbmd1eSBjxqEgdGjhuqVwIGjGoW4uDQogICANCi0tLQ0KDQojIyMjICpU4bu3IHPhu5EgY2jDqm5oIC0gT2RkcyBSYXRpbyoNCg0KLSBDw7RuZyB0aOG7qWM6DQoNClxbDQpPUiA9IFxmcmFje2EvYn17Yy9kfSA9IFxmcmFje2FkfXtiY30NClxdDQoNCi0gw50gbmdoxKlhOg0KDQogICAtIFNvIHPDoW5oICpjxqEgaOG7mWkgeOG6o3kgcmEgc+G7sSBraeG7h24qIGdp4buvYSBoYWkgbmjDs20uDQoNCiAgIC0gXChPUiA9IDFcKTogS2jDtG5nIGPDsyBsacOqbiBo4buHLg0KICANCiAgIC0gXChPUiA+IDFcKTogTmjDs20gMSBjw7MgY8ahIGjhu5lpIGNhbyBoxqFuLg0KICANCiAgIC0gXChPUiA8IDFcKTogTmjDs20gMSBjw7MgY8ahIGjhu5lpIHRo4bqlcCBoxqFuLg0KDQotIEzGsHUgw706DQoNCiAgIC0gT1IgZ+G6p24gZ2nhu5FuZyBSUiBraGkgeMOhYyBzdeG6pXQgc+G7sSBraeG7h24gdGjhuqVwLg0KDQogICAtIE9SIHRoxrDhu51uZyDEkcaw4bujYyBz4butIGThu6VuZyB0cm9uZyAqaOG7k2kgcXV5IGxvZ2lzdGljKi4NCiAgIA0KLS0tDQoNCiMjIyAqMi4zIEtob+G6o25nIHRpbiBj4bqteSBjaG8gY8OhYyB0aGFtIHPhu5EgxJFvIG3hu5FpIGxpw6puIGjhu4cqDQoNCiMjIyMgKkPDtG5nIHRo4bupYzoqDQoNClTDrW5oIHRyw6puIGxvZyhPUik6DQoNClxbDQpcbG9nKE9SKSBccG0gWl97XGFscGhhLzJ9IFxjZG90IFxzcXJ0eyBcZnJhY3sxfXthfSArIFxmcmFjezF9e2J9ICsgXGZyYWN7MX17Y30gKyBcZnJhY3sxfXtkfSB9DQpcXQ0KDQpTYXUgxJHDsyBs4bqleSBtxakgxJHhu4MgdHLhu58gbOG6oWkgT1I6DQoNClxbDQpDSV97T1J9ID0gXGxlZnQoIGVee0x9LFwgZV57VX0gXHJpZ2h0KQ0KXF0NCg0KVHJvbmcgxJHDszoNCg0KLSBcKEwgPSBcbG9nKE9SKSAtIFpfe1xhbHBoYS8yfSBcY2RvdCBTRVwpDQoNCi0gXChVID0gXGxvZyhPUikgKyBaX3tcYWxwaGEvMn0gXGNkb3QgU0VcKQ0KDQotIFwoU0UgPSBcc3FydHsgXGZyYWN7MX17YX0gKyBcZnJhY3sxfXtifSArIFxmcmFjezF9e2N9ICsgXGZyYWN7MX17ZH0gfVwpDQoNCi0gVuG7m2kgbeG7qWMgdGluIGPhuq15IDk1JSwgXChaX3tcYWxwaGEvMn0gPSAxLjk2XCkNCg0KLS0tDQoNCiMjIyAqMi40IFbDrSBk4bulKg0KDQpN4buZdCBkb2FuaCBuZ2hp4buHcCBraOG6o28gc8OhdCB04bu3IGzhu4cga2jDoWNoIGjDoG5nIGfhu61pIGzhuqFpIMSRw6FuaCBnacOhIHPhuqNuIHBo4bqpIChmZWVkYmFjayltLiBL4bq/dCBxdeG6ozoNCg0KfCAgICAgICAgICAgICAgICAgICAgICB8IE11YSBow6BuZyB8IEtow7RuZyBtdWEgfCBU4buVbmcgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tfA0KfCBOaMOzbSDEkcOhbmggZ2nDoSAoTmjDs20gMSkgIHwgNDAgICAgICAgfCA2MCAgICAgICAgfCAxMDAgICB8DQp8IE5ow7NtIGtow7RuZyDEkcOhbmggZ2nDoSAoTmjDs20gMikgIHwgMjAgICAgICAgfCA4MCAgICAgICAgfCAxMDAgICB8DQoNCi0gVMOtbmggdG/DoW46DQoNCiAgIC0gXChSUiA9IFxmcmFjezQwLzEwMH17MjAvMTAwfSA9IDIuMFwpIOKGkiDEkMOhbmggZ2nDoSBz4bqjbiBwaOG6qW0gZ2nDunAgKnTEg25nIGfhuqVwIMSRw7RpKiB4w6FjIHN14bqldCBtdWEgaMOgbmcuDQoNCiAgIC0gXChPUiA9IFxmcmFjezQwIFxjZG90IDgwfXs2MCBcY2RvdCAyMH0gPSBcZnJhY3szMjAwfXsxMjAwfSA9IDIuNjdcKSDihpIgQ8ahIGjhu5lpIG11YSBow6BuZyBjYW8gaMahbiAqMi42NyBs4bqnbiouDQoNCi0gS2hv4bqjbmcgdGluIGPhuq15IE9SOg0KDQogICAtIFwoU0UgPSBcc3FydHsxLzQwICsgMS82MCArIDEvMjAgKyAxLzgwfSBcYXBwcm94IDAuMzI5XCkNCg0KICAgLSBcKFxsb2coT1IpIFxhcHByb3ggXGxvZygyLjY3KSA9IDAuOTgxXCkNCg0KICAgLSBcKENJX3tsb2coT1IpfSA9IDAuOTgxIFxwbSAxLjk2IFxjZG90IDAuMzI5ID0gKDAuMzM2LFwgMS42MjYpXCkNCg0KICAgLSBcKENJX3tPUn0gPSAoZV57MC4zMzZ9LFwgZV57MS42MjZ9KSA9ICgxLjQwLFwgNS4wOClcKQ0KDQogICDihpIgKk9SIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6oqLCB2w6wga2hv4bqjbmcgdGluIGPhuq15IGtow7RuZyBjaOG7qWEgMS4NCg0KLS0tDQoNCiMjIyAqMi41IFThu5VuZyBr4bq/dCoNCg0KfCBDaOG7iSBz4buRICAgICAgfCBDw7RuZyB0aOG7qWMgICAgICAgICAgICAgICAgICAgICB8IMOdIG5naMSpYSBjaMOtbmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDGr3UgxJFp4buDbSAgICAgICAgICAgICAgICAgICAgICAgICB8IOG7qG5nIGThu6VuZyBwaOG7lSBiaeG6v24gICAgICAgICAgICAgIHwNCnwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCBIaeG7h3UgdOG7tyBs4buHICB8IFwocF8xIC0gcF8yXCkgICAgICAgICAgICAgICAgfCBTbyBzw6FuaCB0dXnhu4d0IMSR4buRaSBnaeG7r2EgaGFpIHThu7cgbOG7hyAgICAgICAgICAgICB8IFRy4buxYyBxdWFuLCBk4buFIGhp4buDdSAgICAgICAgICAgICAgfCBTbyBzw6FuaCDEkcahbiBnaeG6o24gICAgICAgICAgICAgICB8DQp8IFJSICAgICAgICAgIHwgXChcZnJhY3twXzF9e3BfMn1cKSAgICAgICAgICB8IFNvIHPDoW5oIHjDoWMgc3XhuqV0IGdp4buvYSBoYWkgbmjDs20gICAgICAgICAgICAgICB8IERp4buFbiBnaeG6o2kgdOG7sSBuaGnDqm4gICAgICAgICAgICAgIHwgTmdoacOqbiBj4bupdSB5IGjhu41jLCBtYXJrZXRpbmcgICAgfA0KfCBPUiAgICAgICAgICB8IFwoXGZyYWN7YWR9e2JjfVwpICAgICAgICAgICAgfCBTbyBzw6FuaCBvZGRzIGdp4buvYSBoYWkgbmjDs20gICAgICAgICAgICAgICAgICAgfCDDgXAgZOG7pW5nIGxpbmggaG/huqF0IHRyb25nIGjhu5NpIHF1eSB8IEjhu5NpIHF1eSBsb2dpc3RpYywgcGjDom4gdMOtY2ggcuG7p2kgcm8gfA0KDQotLS0NCg0KIyMgKiozLiBTdXkgbmdoxKkgduG7gSBi4buZIGThu68gbGnhu4d1IOKAnFN1cGVybWFya2V0IFRyYW5zYWN0aW9uc+KAnSoqDQoNCiMjIyAqMy4xIMSQ4buNYyBi4buZIGThu68gbGnhu4d1Kg0KDQpgYGB7cn0NCmxpYnJhcnkoY3N2KQ0KZGF0YSA8LSByZWFkLmNzdigiQzovVXNlcnMvSFAvRG93bmxvYWRzL1N1cGVybWFya2V0IFRyYW5zYWN0aW9ucy5jc3YiLCBoZWFkZXIgPSBUKQ0KYGBgDQoNCiMjIyAqMy4yIEPDoWMgYsaw4bubYyB0aOG7sWMgaGnhu4duKg0KDQojIyMjICpCMTogVOG6oW8gYuG6o25nIGNow6lvIGdp4buvYSBHZW5kZXIgdsOgIEhvbWVvd25lcioNCg0KYGBge3J9DQp0YWJsZV9nZW5kZXJfaG9tZSA8LSB0YWJsZShkYXRhJEdlbmRlciwgZGF0YSRIb21lb3duZXIpDQp0YWJsZV9nZW5kZXJfaG9tZQ0KYGBgDQojIyMjICpCMjogVMOtbmggT2RkcyBSYXRpbyAodOG7tyBz4buRIGNow6puaCkqDQoNCmBgYHtyfQ0KYSA8LSB0YWJsZV9nZW5kZXJfaG9tZVsiRiIsICJZIl0NCmIgPC0gdGFibGVfZ2VuZGVyX2hvbWVbIkYiLCAiTiJdDQpjIDwtIHRhYmxlX2dlbmRlcl9ob21lWyJNIiwgIlkiXQ0KZCA8LSB0YWJsZV9nZW5kZXJfaG9tZVsiTSIsICJOIl0NCg0KT1IgPC0gKGEgKiBkKSAvIChiICogYykNCk9SDQpgYGANCg0KIyMjIyAqQjM6IFTDrW5oIGtob+G6o25nIHRpbiBj4bqteSBjaG8gT1IqDQoNCmBgYHtyfQ0KbG9nX09SIDwtIGxvZyhPUikNClNFIDwtIHNxcnQoMS9hICsgMS9iICsgMS9jICsgMS9kKQ0KDQojIDk1JSBDSQ0KeiA8LSAxLjk2DQpDSV9sb3dlciA8LSBleHAobG9nX09SIC0geiAqIFNFKQ0KQ0lfdXBwZXIgPC0gZXhwKGxvZ19PUiArIHogKiBTRSkNCg0KYyhDSV9sb3dlciwgQ0lfdXBwZXIpDQpgYGANCg0KIyMjICpEaeG7hW4gZ2nhuqNpKg0KDQotIE9SID0gMS4wNDUgPiAxIGNobyB0aOG6pXkgdOG7tyBz4buRIGNow6puaCAob2RkcyByYXRpbykgduG7gSBraOG6oyBuxINuZyBz4bufIGjhu691IG5ow6AgY+G7p2EgTuG7ryBjYW8gaMahbiBt4buZdCBjaMO6dCBzbyB24bubaSBOYW0uDQoNCi0gTsOzaSBjw6FjaCBraMOhYywgdHJvbmcgdOG6rXAgZOG7ryBsaeG7h3Uga2jDoWNoIGjDoG5nIG7DoHksIGzDoCBO4buvIGPDsyBsacOqbiBxdWFuIMSR4bq/biB2aeG7h2MgdMSDbmcgbmjhurkgb2RkcyBz4bufIGjhu691IG5ow6Agc28gduG7m2kgTmFtLiBD4bulIHRo4buDLCBvZGRzIHPhu58gaOG7r3UgbmjDoCBj4bunYSBO4buvIGNhbyBoxqFuIGtob+G6o25nIDQuNSUgc28gduG7m2kgTmFtLCBu4bq/dSBnaeG7ryBjw6FjIHnhur91IHThu5Ega2jDoWMga2jDtG5nIMSR4buVaS4NCg0KLSBUdXkgbmhpw6puLCBt4bupYyBjaMOqbmggbOG7h2NoIG7DoHkgbMOgIHLhuqV0IG5o4buPIHbDoCBjaMawYSDEkeG7pyDEkeG7gyBr4bq/dCBsdeG6rW4gY2jhuq9jIGNo4bqvbiB24buBIHPhu7Ega2jDoWMgYmnhu4d0IGdp4buvYSBoYWkgbmjDs20uDQoNCi0gS2hpIHjDqXQgxJHhur9uIGtob+G6o25nIHRpbiBj4bqteSA5NSUgY+G7p2EgT1IgKGtob+G6o25nIHThu6sgfjAuOTc3IMSR4bq/biB+MS4xMTgpLCB0YSB0aOG6pXkga2hv4bqjbmcgbsOgeSBjaOG7qWEgZ2nDoSB0cuG7iyAxLCDEkWnhu4F1IMSRw7MgY8OzIG5naMSpYSBsw6Aga+G6v3QgcXXhuqMga2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6og4bufIG3hu6ljIHRpbiBj4bqteSA5NSUuDQoNCi0gVMOzbSBs4bqhaSwgbeG6t2MgZMO5IE9SID4gMSBjaG8gdGjhuqV5IHh1IGjGsOG7m25nIG9kZHMgc+G7nyBo4buvdSBuaMOgIGPhu6dhIE7hu68gY2FvIGjGoW4gTmFtLCBr4bq/dCBsdeG6rW4gbsOgeSBraMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4gU+G7sSBraMOhYyBiaeG7h3Qgbmjhu48gY8OzIHRo4buDIGNo4buJIGzDoCBkbyBuZ+G6q3Ugbmhpw6puIHRyb25nIG3huqt1IHF1YW4gc8OhdC4gRG8gxJHDsywga2jDtG5nIGPDsyBi4bqxbmcgY2jhu6luZyDEkeG7pyBt4bqhbmggxJHhu4Mga2jhurNuZyDEkeG7i25oIHLhurFuZyB2aeG7h2MgbMOgIE7hu68gKHNvIHbhu5tpIE5hbSkgbMOgbSB0xINuZyBob+G6t2MgZ2nhuqNtIG9kZHMgY+G7p2Egdmnhu4djIHPhu58gaOG7r3UgbmjDoCB0cm9uZyBi4buZIGThu68gbGnhu4d1IG7DoHkuDQoNCj0+IEvhur90IGx14bqtbjogVHJvbmcgcGjhuqFtIHZpIGThu68gbGnhu4d1IGhp4buHbiB04bqhaSwgZ2nhu5tpIHTDrW5oIGtow7RuZyBwaOG6o2kgbMOgIHnhur91IHThu5EgcXV54bq/dCDEkeG7i25oIMSR4bq/biB2aeG7h2Mgc+G7nyBo4buvdSBuaMOgIOKAlCBvZGRzIGfhuqduIG5oxrAgdMawxqFuZyDEkcawxqFuZyBuaGF1IGdp4buvYSBOYW0gdsOgIE7hu68uDQoNCi0tLQ0KDQoNCiMjICoqMy4zIEdFTkRFUiBWw4AgTUFSSVRBTFNUQVRVUyoqDQoNCiMjIyAqKlThuqFvIGLhuqNuZyBjaMOpbyoqDQoNCmBgYHtyfQ0KIyBU4bqhbyBi4bqjbmcgY2jDqW8gZ2nhu69hIEdlbmRlciB2w6AgTWFyaXRhbFN0YXR1cw0KdGFibGVfZ2VuZGVyX21hcml0YWwgPC0gdGFibGUoZGF0YSRHZW5kZXIsIGRhdGEkTWFyaXRhbFN0YXR1cykNCmFkZG1hcmdpbnModGFibGVfZ2VuZGVyX21hcml0YWwpICAjIFRow6ptIGjDoG5nIHbDoCBj4buZdCB04buVbmcNCmBgYA0KDQojIyMgKipUw61uaCB0b8OhbiBSZWxhdGl2ZSBSaXNrKioNCg0KYGBge3J9DQojIFRyw61jaCB4deG6pXQgc+G7kSBsaeG7h3UgdOG7qyBi4bqjbmcgY2jDqW8NCkEgPC0gdGFibGVfZ2VuZGVyX21hcml0YWxbIkYiLCJTIl0gIyBu4buvIMSR4buZYyB0aMOibg0KQiA8LSB0YWJsZV9nZW5kZXJfbWFyaXRhbFsiRiIsIk0iXSAjIG7hu68ga+G6v3QgaMO0bg0KQyA8LSB0YWJsZV9nZW5kZXJfbWFyaXRhbFsiTSIsIlMiXSAjIG5hbSDEkeG7mWMgdGjDom4NCkQgPC0gdGFibGVfZ2VuZGVyX21hcml0YWxbIk0iLCJNIl0gIyBuYW0ga+G6v3QgaMO0bg0KDQojIFTDrW5oIFJSDQpSUiA8LSAoQS8oQStCKSkvKEMvKEMrRCkpDQpSUg0KIyBUcm9uZyDEkcOzOiBBLyhBK0IpIGzDoCB04bu3IGzhu4cgcGjhu6UgbuG7ryDEkeG7mWMgdGjDom4gdHJvbmcgdOG7lW5nIHPhu5EgbuG7rw0KIyBWw6A6IEMvKEMrRCkgbMOgIHThu7cgbOG7hyBuYW0gZ2nhu5tpIMSR4buZYyB0aMOibiB0cm9uZyB04buVbmcgc+G7kSBuYW0NCmBgYA0KDQojIyMgKirDnSBuZ2jEqWEqKg0KDQotIFJSID0gMTogS2jDtG5nIGPDsyBz4buxIGtow6FjIGJp4buHdCB24buBIHThu7cgbOG7hyDEkeG7mWMgdGjDom4gZ2nhu69hIGhhaSBnaeG7m2kgdMOtbmguDQotIFJSID4gMTogTmFtIGdp4bubaSBjw7MgdOG7tyBs4buHIMSR4buZYyB0aMOibiBjYW8gaMahbiBwaOG7pSBu4buvLg0KLSBSUiA8IDE6IFBo4bulIG7hu68gY8OzIHThu7cgbOG7hyDEkeG7mWMgdGjDom4gY2FvIGjGoW4gbmFtIGdp4bubaS4NCg0KIyMjICoqTmjhuq1uIHjDqXQqKg0KDQotIFThu7cgbOG7hyBwaOG7pSBu4buvIMSR4buZYyB0aMOibiBi4bqxbmcga2hv4bqjbmcgOTQuNTclIHThu7cgbOG7hyBuYW0gZ2nhu5tpIMSR4buZYyB0aMOibi4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkga2jDtG5nIGPDsyBz4buxIGtow6FjIGJp4buHdCBs4bubbiB24buBIHThu7cgbOG7hyDEkeG7mWMgdGjDom4gZ2nhu69hIGhhaSBnaeG7m2kgdMOtbmggdHJvbmcgZOG7ryBsaeG7h3UuIA0KDQpgYGB7cn0NCmluc3RhbGwucGFja2FnZXMoImVwaXRvb2xzIiwgcmVwb3MgPSAiaHR0cHM6Ly9jcmFuLnJzdHVkaW8uY29tLyIpDQpsaWJyYXJ5KGVwaXRvb2xzKQ0Kcmlza3JhdGlvKHRhYmxlX2dlbmRlcl9tYXJpdGFsLCBtZXRob2Q9IndhbGQiKQ0KIyBDaOG7iSDEkeG7i25oIHBoxrDGoW5nIHBow6FwIHTDrW5oIGtob+G6o25nIHRpbiBj4bqteSAoY29uZmlkZW5jZSBpbnRlcnZhbCkgY2hvIFJpc2sgUmF0aW8uDQojICJ3YWxkIiBsw6AgcGjGsMahbmcgcGjDoXAgc+G7rSBk4bulbmcgxrDhu5tjIGzGsOG7o25nIFdhbGQsIGdp4bqjIMSR4buLbmggcGjDom4gcGjhu5FpIGNodeG6qW4sIMSR4buDIHTDrW5oIGtob+G6o25nIHRpbiBj4bqteS4NCmBgYA0KKipOaOG6rW4geMOpdCoqDQoNCi0gUmVsYXRpdmUgUmlzayAoUlIpDQoNCiAgLSBGIChGZW1hbGUpOiAxLjAwMDAwMA0KICAtIE0gKE1hbGUpOiAxLjA1NzQxNyAoQ0k6IDEuMDIzODEzIC0gMS4wOTIxMjMpDQogIA0KLSBOaOG6rW4geMOpdCB24buBIFJSOg0KDQogIC0gUlIgY+G7p2EgbmjDs20gRiAoUGjhu6UgbuG7rykgbMOgIDEgdsOsIG5ow7NtIG7DoHkgxJHGsOG7o2MgbOG6pXkgbMOgbSBuaMOzbSB0aGFtIGNoaeG6v3UuDQogIC0gUlIgY+G7p2EgbmjDs20gTSAoTmFtIGdp4bubaSkgbMOgIDEuMDU3NCwgxJFp4buBdSBuw6B5IGNobyB0aOG6pXkgbmFtIGdp4bubaSBjw7MgdOG7tyBs4buHIGvhur90IGjDtG4gKE0pIGNhbyBoxqFuIG3hu5l0IGNow7p0IHNvIHbhu5tpIHBo4bulIG7hu68sIHbhu5tpIHThu7cgbOG7hyAxLjA1NzQgbOG6p24gc28gduG7m2kgbmjDs20gcGjhu6UgbuG7ry4gU+G7sSBraMOhYyBiaeG7h3QgbsOgeSBjw7MgdGjhu4MgbMOgIGtow7RuZyBs4bubbiwgbmjGsG5nIG7DsyBjaOG7iSByYSBy4bqxbmcgbmFtIGdp4bubaSBjw7MgbeG7mXQga2jhuqMgbsSDbmcga+G6v3QgaMO0biBjYW8gaMahbiBwaOG7pSBu4buvIHRyb25nIG3huqt1IG5naGnDqm4gY+G7qXUgbsOgeS4NCiAgLSBDb25maWRlbmNlIEludGVydmFsIChDSSkgY+G7p2EgUlIgY2hvIG5ow7NtIE0gbMOgIFsxLjAyMzgsIDEuMDkyMV0sIG5naMSpYSBsw6Aga2hv4bqjbmcgdGluIGPhuq15IGPhu6dhIFJSIGtow7RuZyBiYW8gZ+G7k20gZ2nDoSB0cuG7iyAxLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBz4buxIGtow6FjIGJp4buHdCBnaeG7r2EgaGFpIG5ow7NtIEYgdsOgIE0gbMOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogdsOgIGtow7RuZyBwaOG6o2kgbmfhuqt1IG5oacOqbi4NCi0gS+G6v3QgbHXhuq1uIHbhu4EgUlI6DQoNCiAgLSBSUiBjaG8gdGjhuqV5IG5hbSBnaeG7m2kgY8OzIHh1IGjGsOG7m25nIGvhur90IGjDtG4gY2FvIGjGoW4gc28gduG7m2kgcGjhu6UgbuG7rywgduG7m2kgUlIgPSAxLjA1NzQuDQogIC0gQ29uZmlkZW5jZSBJbnRlcnZhbCBraMO0bmcgYmFvIGfhu5NtIGdpw6EgdHLhu4sgMSwgxJFp4buBdSBuw6B5IGjhu5cgdHLhu6MgY2hvIGdp4bqjIHRodXnhur90IHLhurFuZyBz4buxIGtow6FjIGJp4buHdCBnaeG7r2EgdOG7tyBs4buHIGvhur90IGjDtG4gY+G7p2EgbmFtIHbDoCBu4buvIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouDQogIA0KLSBwLXZhbHVlIHThu6sgY8OhYyBraeG7g20gxJHhu4tuaDoNCg0KICAtIENoaS1zcXVhcmUgdGVzdDogcC12YWx1ZSA9IDAuMDAwNzAzODgzNw0KICAtIEZpc2hlcidzIGV4YWN0IHRlc3Q6IHAtdmFsdWUgPSAwLjAwMDczNzM4OTUNCiAgLSBNaWRwb2ludCBleGFjdCB0ZXN0OiBwLXZhbHVlID0gMC4wMDA3MDQ1MDkyDQogIA0KLSBOaOG6rW4geMOpdCB24buBIHAtdmFsdWU6DQogIC0gQ8OhYyBwLXZhbHVlIHThu6sgY8OhYyBraeG7g20gxJHhu4tuaCDEkeG7gXUgbmjhu48gaMahbiBt4bupYyDDvSBuZ2jEqWEgdGjDtG5nIHRoxrDhu51uZyBsw6AgMC4wNSwgbmdoxKlhIGzDoCBjw7MgxJHhu6cgYuG6sW5nIGNo4bupbmcgxJHhu4MgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IG51bGwgaHlwb3RoZXNpcyAoZ2nhuqMgdGh1eeG6v3Qga2jDtG5nIGPDsyBz4buxIGtow6FjIGJp4buHdCBnaeG7r2EgbmFtIHbDoCBu4buvKS4NCiAgLSDEkGnhu4F1IG7DoHkgY2jhu4kgcmEgcuG6sW5nIGPDsyBz4buxIGtow6FjIGJp4buHdCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGdp4buvYSB04bu3IGzhu4cga+G6v3QgaMO0biDhu58gcGjhu6UgbuG7ryB2w6AgbmFtIGdp4bubaS4NCiAgDQotIFTDs20gdOG6r3QgdsOgIG5o4bqtbiB4w6l0IHThu5VuZyBxdcOhdA0KICAtIFJlbGF0aXZlIFJpc2sgKFJSKTogVOG7tyBs4buHIGvhur90IGjDtG4gY+G7p2EgbmFtIGdp4bubaSBsw6AgMS4wNTc0IGzhuqduIHNvIHbhu5tpIHBo4bulIG7hu68sIMSRaeG7gXUgbsOgeSBjaG8gdGjhuqV5IG5hbSBnaeG7m2kgY8OzIGto4bqjIG7Eg25nIGvhur90IGjDtG4gY2FvIGjGoW4gcGjhu6UgbuG7ryB0cm9uZyBt4bqrdSBuZ2hpw6puIGPhu6l1IG7DoHkuDQogIC0gQ29uZmlkZW5jZSBJbnRlcnZhbCAoQy5JLik6IEtob+G6o25nIHRpbiBj4bqteSBbMS4wMjM4LCAxLjA5MjFdIGtow7RuZyBiYW8gZ+G7k20gZ2nDoSB0cuG7iyAxLCDEkWnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6Agc+G7sSBraMOhYyBiaeG7h3QgZ2nhu69hIHThu7cgbOG7hyBr4bq/dCBow7RuIGPhu6dhIG5hbSB2w6AgbuG7ryBsw6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4NCiAgLSBwLXZhbHVlOiBDw6FjIHAtdmFsdWUgdOG7qyBDaGktc3F1YXJlLCBGaXNoZXIncyBleGFjdCB0ZXN0IHbDoCBtaWRwLmV4YWN0IMSR4buBdSBuaOG7jyBoxqFuIDAuMDUsIGNobyB0aOG6pXkgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IMSRw6FuZyBr4buDIGdp4buvYSB04bu3IGzhu4cga+G6v3QgaMO0biBj4bunYSBuYW0gdsOgIG7hu68uDQogIA0KLSBL4bq/dCBsdeG6rW4NCiAgLSBU4bu3IGzhu4cga+G6v3QgaMO0biBnaeG7r2EgbmFtIHbDoCBu4buvIGPDsyBz4buxIGtow6FjIGJp4buHdCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLiBD4bulIHRo4buDLCBuYW0gZ2nhu5tpIGPDsyB04bu3IGzhu4cga+G6v3QgaMO0biBjYW8gaMahbiBwaOG7pSBu4buvLg0KICAtIFJlbGF0aXZlIFJpc2sgY2hvIHRo4bqleSBuYW0gZ2nhu5tpIGPDsyBraOG6oyBuxINuZyBr4bq/dCBow7RuIGNhbyBoxqFuIHBo4bulIG7hu68gKHbhu5tpIFJSID0gMS4wNTc0KSwgdsOgIGvhur90IHF14bqjIG7DoHkgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiByw7UgcsOgbmcsIHbDrCBwLXZhbHVlIMSR4buBdSBy4bqldCBuaOG7jy4NCiAgLSBLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGPhu6dhIFJSIGtow7RuZyBiYW8gZ+G7k20gZ2nDoSB0cuG7iyAxLCDEkWnhu4F1IG7DoHkgY8OgbmcgY+G7p25nIGPhu5Ega+G6v3QgbHXhuq1uIHbhu4Egc+G7sSBraMOhYyBiaeG7h3QgZ2nhu69hIHThu7cgbOG7hyBr4bq/dCBow7RuIGPhu6dhIGhhaSBnaeG7m2kNCg0KDQo=