library(readxl)
library(DT)
## Warning: package 'DT' was built under R version 4.3.1
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.1

1 NHIỆM VỤ 2: CHỌN VÀ GIẢI THÍCH VẤN ĐỀ MÔ PHỎNG

1.1 Vấn đề cần mô phỏng

Ngân hàng được xem là huyết mạch của đất nước, là trung tâm kinh tế của một quốc gia. Ngân hàng có vai trò là trung gian trung chuyển dòng vốn, chuyển từ nơi thừa đến nơi thiếu thông qua hoạt động tín dụng. NHTM thu hút nguồn vốn nhàn rỗi từ các cá nhân và sử dụng nguồn vốn thực hiện nghiệp vụ tín dụng cho các tổ chức, công ty hay các dự án khác, nguồn thu lớn nhất của hầu hết ngân hàng cũng từ hoạt động tín dụng. Vì vậy hoạt động tín dụng tín dụng đóng vai trò rất lớn trong sự phát triển của ngân hàng. Việc tăng trưởng tín dụng là vấn đề mà các NHTM quan tâm, bởi vì khi tăng trưởng tín dụng hợp lý thì sẽ tạo ra được nguồn thu nhập ổn định, an toàn cho các NHTM.

Có nhiều yếu tố tác động đến tăng trưởng tín dụng, do đó việc tìm ra các yếu tố tác động mạnh đến tăng trưởng tín dụng là vấn đề cấp thiết nhằm cung cấp cơ sở cho các chính sách liên quan để cải thiện việc suy giảm tăng trưởng tín dụng.

Vậy nên em lựa chọn đề tài “ MÔ PHỎNG CÁC YẾU TỐ TÁC ĐỘNG ĐẾN TĂNG TRƯỞNG TÍN DỤNG CỦA NGÂN HÀNG THƯƠNG MẠI CỔ PHẦN QUÂN ĐỘI”

1.2 Mô hình đề xuất

Từ sự kết hợp có chọn lọc, tham khảo nhiều bài nghiên cứu, bài báo cáo này nghiên cứu các yếu tố: tỷ lệ thu nhập lãi thuần (NIM), tỷ lệ dư nợ tín dụng trên vốn huy động (LDR), chỉ số giá tiêu dùng (CPI), tỷ số lợi nhuận ròng trên tài sản (ROA), tỷ số lợi nhuận ròng trên vốn chủ sở hữu (ROE), Tổng sản phẩm trong nước (GDP) tác động đến tăng trưởng tín dụng của Ngân hàng thương mại cổ phần Quân đội. Mô hình nghiên cứu có dạng:

\(TTTD=β_0+β_1NIM+β_2LDR+β_3CPI+β_4ROA+β_5ROE+β_6GDP\)

Trong đó:

  • Biến phụ thuộc: TTTD

  • Biến độc lập: NIM, LDR, CPI, ROA, ROE, GDP

1.3 Giải thích các biến

Bao gồm 7 biến để tiến hành mô phỏng:

  • TTTD : tăng trưởng tín dụng là tỷ lệ phần trăm sự tăng lên hoặc giảm xuống của các khoản tiền do hệ thống ngân hàng cung cấp cho các cá nhân, tổ chức, doanh nghiệp trong nền kinh tế ở kì này so với kì trước đó.

  • NIM : tỷ lệ thu nhập lãi thuần được xem là thước đo tính toán hiệu quả cũng như khả năng sinh lời, chỉ ra năng lực của hội đồng quản trị trong việc duy trì tăng trưởng của các nguồn thu so với mức tăng trưởng của các chi phí. Tỷ lệ thu nhập lãi thuần được tính bằng tốc độ tăng trưởng thu từ lãi so với tốc độ tăng chi phí.

  • LDR : tỷ lệ dư nợ tín dụng trên vốn huy động là một trong những chỉ tiêu quan trọng, được sử dụng trong hoạt động quản lý hoạt động ngân hàng nhằm đánh giá được tính thanh khoản hay khả năng chi trả của một tổ chức. Tỷ lệ cấp tín dụng so với nguồn vốn huy động (LDR) được thể hiện dưới dạng phần trăm.

  • CPI : chỉ số giá tiêu dùng là chỉ số phản ánh xu hướng và mức độ biến động giá cả chung của hàng hóa, dịch vụ. Chỉ số giá tiêu dùng được tính theo phần trăm phản ánh mức thay đổi tương đối của giá hàng tiêu dùng theo thời gian.

  • ROA : tỷ số lợi nhuận ròng trên tài sản à chỉ tiêu đo lường khả năng sinh lợi trên mỗi đồng tài sản của công ty. ROA cung cấp cho nhà đầu tư thông tin về các khoản lãi được tạo ra từ lượng vốn đầu tư (hay lượng tài sản). ROA đối với các công ty cổ phần có sự khác biệt rất lớn và phụ thuộc nhiều vào ngành kinh doanh.

  • ROE : tỷ số lợi nhuận ròng trên vốn chủ sở hữu là tỷ số quan trọng nhất đối với các cổ đông, đo lường khả năng sinh lợi trên mỗi đồng vốn của cổ đông thường. Chỉ số này là thước đo chính xác để đánh giá một đồng vốn bỏ ra và tích lũy tạo ra bao nhiêu đồng lợi nhuận.

  • GDP : tổng sản phẩm trong nước là giá trị sản phẩm vật chất và dịch vụ cuối cùng được tạo ra của nền kinh tế trong một khoảng thời gian nhất định.

1.4 Dữ liệu nghiên cứu

Dữ liệu được thu thập từ các báo cáo tài chính của Ngân hàng thương mại cổ phần Quân đội (MB Bank) từ quý 1 năm 2011 đến quý 1 năm 2023. Dữ liệu được thu thập tổng hợp từ trang Vietstock.

library(readxl)
library(DT)
tttd <- read_excel("D:/THNN/data1.xlsx", 
    sheet = "Sheet7")
## New names:
## • `` -> `...8`
tttd

2 NHIỆM VỤ 3: XÁC ĐỊNH PHÂN PHỐI CÁC BIẾN

2.1 Thống kê dữ liệu nghiên cứu

summary(tttd)
##       ROA              LDR             ROE             TTTD       
##  Min.   :0.1000   Min.   :48.67   Min.   :1.030   Min.   :-2.279  
##  1st Qu.:0.3400   1st Qu.:55.50   1st Qu.:3.620   1st Qu.: 1.594  
##  Median :0.4300   Median :68.25   Median :4.730   Median : 4.213  
##  Mean   :0.4427   Mean   :64.65   Mean   :4.645   Mean   : 4.730  
##  3rd Qu.:0.5200   3rd Qu.:71.83   3rd Qu.:5.460   3rd Qu.: 7.417  
##  Max.   :0.7600   Max.   :78.62   Max.   :9.390   Max.   :14.956  
##       GDP               nim             cpi              ...8          
##  Min.   : 441707   Min.   :0.810   Min.   :-0.3033   Length:49         
##  1st Qu.: 906778   1st Qu.:0.980   1st Qu.: 0.1133   Class :character  
##  Median :1157955   Median :1.150   Median : 0.2700   Mode  :character  
##  Mean   :1314125   Mean   :1.149   Mean   : 0.3793                     
##  3rd Qu.:1676602   3rd Qu.:1.250   3rd Qu.: 0.5133                     
##  Max.   :2699131   Max.   :2.390   Max.   : 2.2067

2.2 Xác định phân phối các biến

2.2.1 Biến tăng trưởng tín dụng (TTTD)

#vẽ đồ thị histogram
hist(tttd$TTTD)

Kiểm định phân phối chuẩn

Giả thuyết:

\(H_0\): TTTD theo phân phối chuẩn

\(H_1\): TTTD không theo phân phối chuẩn

TTTDPP <- as.data.frame(tttd$TTTD)
shapiro.test(tttd$TTTD)
## 
##  Shapiro-Wilk normality test
## 
## data:  tttd$TTTD
## W = 0.94779, p-value = 0.03009

Vì p_value = 0.03009 < 0.05 nên ta bác bỏ giả thuyết H0. Vậy là biến TTTD không có phân phối chuẩn.

Kiểm định Phân phối t

Giả thuyết:

\(H_0\): TTTD tuân theo phân phối t

\(H_1\): TTTD không tuân theo phân phối t

t.test(tttd$TTTD)
## 
##  One Sample t-test
## 
## data:  tttd$TTTD
## t = 7.6461, df = 48, p-value = 7.575e-10
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  3.486517 5.974372
## sample estimates:
## mean of x 
##  4.730445

Vì p_value < 0.05 nên ta bác bỏ giả thuyết H0. Vậy là biến TTTD không có phân phối t.

Do sau khi kiểm định thì thấy biến TTTD chưa theo phân phối nào nên em tiến hành sẽ kiểm tra xem có theo phân phối chuẩn hay không bằng cách sử dụng phép kiểm định Shapiro-Wilk, với kích thước mẫu là 20.

TTTDC <-sample(tttd$TTTD, 20)
shapiro.test(TTTDC)
## 
##  Shapiro-Wilk normality test
## 
## data:  TTTDC
## W = 0.94983, p-value = 0.3646

Vậy p_value > 0.05 nên ta thừa nhận giả thuyết H0. Vậy là biến TTTD có phân phối t.

2.2.2 Biến tỷ lệ thu nhập lãi thuần (NIM)

#vẽ đồ thị histogram
hist(tttd$nim)

Kiểm định phân phối chuẩn

Giả thuyết:

\(H_0\): NIM theo phân phối chuẩn

\(H_1\): NIM không theo phân phối chuẩn

NIM <- as.data.frame(tttd$nim)
shapiro.test(tttd$nim)
## 
##  Shapiro-Wilk normality test
## 
## data:  tttd$nim
## W = 0.79553, p-value = 8.445e-07

Vì p_value < 0.05 nên ta bác bỏ giả thuyết H0. Vậy là biến NIM không có phân phối chuẩn.

Kiểm định phân phối loga

Giả thuyết:

\(H_0\): NIM theo phân phối loga chuẩn

\(H_1\): NIM không theo phân phối loga chuẩn

ks.test(tttd$nim, y = "plnorm")
## Warning in ks.test.default(tttd$nim, y = "plnorm"): ties should not be present
## for the Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  tttd$nim
## D = 0.41655, p-value = 8.242e-08
## alternative hypothesis: two-sided

Vì p_value < 0.05 nên ta bác bỏ giả thuyết H0. Vậy là biến NIM không có phân phối loga chuẩn

Kiểm định Phân phối t

Giả thuyết:

\(H_0\): NIM tuân theo phân phối t

\(H_1\): NIM không tuân theo phân phối t

t.test(tttd$nim)
## 
##  One Sample t-test
## 
## data:  tttd$nim
## t = 32.322, df = 48, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  1.077314 1.220237
## sample estimates:
## mean of x 
##  1.148776

Vì p_value < 0.05 nên ta bác bỏ giả thuyết H0. Vậy là biến NIM không có phân phối t

Do sau khi kiểm định thì thấy biến NIM chưa theo phân phối nào nên em tiến hành sẽ kiểm tra xem có theo phân phối chuẩn hay không bằng cách sử dụng phép kiểm định Shapiro-Wilk, với kích thước mẫu là 10.

NIMPP <-sample(tttd$nim, 10)
shapiro.test(NIMPP)
## 
##  Shapiro-Wilk normality test
## 
## data:  NIMPP
## W = 0.95362, p-value = 0.7114

Vì p_value > 0.05 nên ta chấp nhận giả thuyết H0. Vậy là biến NIM có phân phối chuẩn với kích thước mẫu là 10

2.2.3 Biến tỷ lệ dư nợ tín dụng trên vốn huy động (LDR)

#vẽ đồ thị histogram
hist(tttd$LDR)

Kiểm định phân phối chuẩn

Giả thuyết:

\(H_0\): LDR theo phân phối chuẩn

\(H_1\): LDR không theo phân phối chuẩn

NIM <- as.data.frame(tttd$LDR)
shapiro.test(tttd$LDR)
## 
##  Shapiro-Wilk normality test
## 
## data:  tttd$LDR
## W = 0.90842, p-value = 0.001047

Vì p_value < 0.05 nên ta bác bỏ giả thuyết H0. Vậy là biến LDR không có phân phối chuẩn.

Kiểm định phân phối loga

Giả thuyết:

\(H_0\): LDR theo phân phối loga chuẩn

\(H_1\): LDR không theo phân phối loga chuẩn

ks.test(tttd$LDR, y = "plnorm")
## Warning in ks.test.default(tttd$LDR, y = "plnorm"): ties should not be present
## for the Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  tttd$LDR
## D = 0.99995, p-value < 2.2e-16
## alternative hypothesis: two-sided

Vì p_value < 0.05 nên ta bác bỏ giả thuyết H0. Vậy là biến LDR không có phân phối loga chuẩn

Kiểm định Phân phối t

Giả thuyết:

\(H_0\): LDR tuân theo phân phối t

\(H_1\): LDR không tuân theo phân phối t

t.test(tttd$LDR)
## 
##  One Sample t-test
## 
## data:  tttd$LDR
## t = 48.41, df = 48, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  61.96292 67.33300
## sample estimates:
## mean of x 
##  64.64796

Vì p_value < 0.05 nên ta bác bỏ giả thuyết H0. Vậy là biến LDR không có phân phối t

Do sau khi kiểm định thì thấy biến LDR chưa theo phân phối nào nên em tiến hành sẽ kiểm tra xem có theo phân phối chuẩn hay không bằng cách sử dụng phép kiểm định Shapiro-Wilk, với kích thước mẫu là 20.

LDRPP <-sample(tttd$LDR, 20)
shapiro.test(LDRPP)
## 
##  Shapiro-Wilk normality test
## 
## data:  LDRPP
## W = 0.85769, p-value = 0.00719

Vì p_value > 0.05 nên ta chấp nhận giả thuyết H0. Vậy là biến LDR có phân phối chuẩn với kích thước mẫu là 20

###Biến chỉ số giá tiêu dùng (CPI)

#vẽ đồ thị histogram
hist(tttd$cpi)

Kiểm định phân phối chuẩn

Giả thuyết:

\(H_0\): CPI theo phân phối chuẩn

\(H_1\): CPI không theo phân phối chuẩn

NIM <- as.data.frame(tttd$cpi)
shapiro.test(tttd$cpi)
## 
##  Shapiro-Wilk normality test
## 
## data:  tttd$cpi
## W = 0.8089, p-value = 1.713e-06

Vì p_value < 0.05 nên ta bác bỏ giả thuyết H0. Vậy là biến CPI không có phân phối chuẩn.

Kiểm định phân phối loga

Giả thuyết:

\(H_0\): CPI theo phân phối loga chuẩn

\(H_1\): CPI không theo phân phối loga chuẩn

ks.test(tttd$cpi, y = "plnorm")
## 
##  Exact one-sample Kolmogorov-Smirnov test
## 
## data:  tttd$cpi
## D = 0.53933, p-value = 7.25e-14
## alternative hypothesis: two-sided

Vì p_value < 0.05 nên ta bác bỏ giả thuyết H0. Vậy là biến CPI không có phân phối loga chuẩn

Kiểm định Phân phối t

Giả thuyết:

\(H_0\): CPI tuân theo phân phối t

\(H_1\): CPI không tuân theo phân phối t

t.test(tttd$cpi)
## 
##  One Sample t-test
## 
## data:  tttd$cpi
## t = 5.7322, df = 48, p-value = 6.415e-07
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  0.2462682 0.5123713
## sample estimates:
## mean of x 
## 0.3793197

Vì p_value < 0.05 nên ta bác bỏ giả thuyết H0. Vậy là biến CPI không có phân phối t

Do sau khi kiểm định thì thấy biến CPI chưa theo phân phối nào nên em tiến hành sẽ kiểm tra xem có theo phân phối chuẩn hay không bằng cách sử dụng phép kiểm định Shapiro-Wilk, với kích thước mẫu là 10.

CPIPP <-sample(tttd$cpi, 10)
shapiro.test(CPIPP)
## 
##  Shapiro-Wilk normality test
## 
## data:  CPIPP
## W = 0.95724, p-value = 0.754

Vì p_value > 0.05 nên ta chấp nhận giả thuyết H0. Vậy là biến CPI có phân phối chuẩn với kích thước mẫu là 10

2.2.4 Biến tỷ số lợi nhuận ròng trên tài sản (ROA)

#vẽ đồ thị histogram
hist(tttd$ROA)

Kiểm định phân phối chuẩn

Giả thuyết:

\(H_0\): ROA theo phân phối chuẩn

\(H_1\): ROA không theo phân phối chuẩn

NIM <- as.data.frame(tttd$ROA)
shapiro.test(tttd$ROA)
## 
##  Shapiro-Wilk normality test
## 
## data:  tttd$ROA
## W = 0.98149, p-value = 0.6289

Vì p_value > 0.05 nên ta chấp nhận giả thuyết H0. Vậy là biến ROA có phân phối chuẩn.

2.2.5 Biến tỷ số lợi nhuận ròng trên vốn chủ sở hữu (ROE)

#vẽ đồ thị histogram
hist(tttd$ROE)

Kiểm định phân phối chuẩn

Giả thuyết:

\(H_0\): ROE theo phân phối chuẩn

\(H_1\): ROE không theo phân phối chuẩn

NIM <- as.data.frame(tttd$ROE)
shapiro.test(tttd$ROE)
## 
##  Shapiro-Wilk normality test
## 
## data:  tttd$ROE
## W = 0.98517, p-value = 0.7884

Vì p_value > 0.05 nên ta chấp nhận giả thuyết H0. Vậy là biến ROE có phân phối chuẩn.

2.2.6 Biến tổng sản phẩm trong nước (GDP)

#vẽ đồ thị histogram
hist(tttd$GDP)

Kiểm định phân phối chuẩn

Giả thuyết:

\(H_0\): GDP theo phân phối chuẩn

\(H_1\): GDP không theo phân phối chuẩn

NIM <- as.data.frame(tttd$GDP)
shapiro.test(tttd$GDP)
## 
##  Shapiro-Wilk normality test
## 
## data:  tttd$GDP
## W = 0.92751, p-value = 0.00496

Vì p_value < 0.05 nên ta bác bỏ giả thuyết H0. Vậy là biến GDP không có phân phối chuẩn.

Kiểm định phân phối loga

Giả thuyết:

\(H_0\): GDP theo phân phối loga chuẩn

\(H_1\): GDP không theo phân phối loga chuẩn

ks.test(tttd$GDP, y = "plnorm")
## Warning in ks.test.default(tttd$GDP, y = "plnorm"): ties should not be present
## for the Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  tttd$GDP
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided

Vì p_value < 0.05 nên ta bác bỏ giả thuyết H0. Vậy là biến GDP không có phân phối loga chuẩn

Kiểm định Phân phối t

Giả thuyết:

\(H_0\): GDP tuân theo phân phối t

\(H_1\): GDP không tuân theo phân phối t

t.test(tttd$GDP)
## 
##  One Sample t-test
## 
## data:  tttd$GDP
## t = 16.063, df = 48, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  1149629 1478621
## sample estimates:
## mean of x 
##   1314125

Vì p_value < 0.05 nên ta bác bỏ giả thuyết H0. Vậy là biến GDP không có phân phối t

Do sau khi kiểm định thì thấy biến CPI chưa theo phân phối nào nên em tiến hành sẽ kiểm tra xem có theo phân phối chuẩn hay không bằng cách sử dụng phép kiểm định Shapiro-Wilk, với kích thước mẫu là 10.

GDPPP <-sample(tttd$GDP, 10)
shapiro.test(GDPPP)
## 
##  Shapiro-Wilk normality test
## 
## data:  GDPPP
## W = 0.9803, p-value = 0.9668

Vì p_value > 0.05 nên ta chấp nhận giả thuyết H0. Vậy là biến GDP có phân phối chuẩn với cỡ mẫu là 10

3 NHIỆM VỤ 4,5: XÂY DỰNG VÀ CHẠY MÔ HÌNH

3.1 Mô hình nghiên cứu

Từ sự kết hợp có chọn lọc, tham khảo nhiều bài nghiên cứu, bài báo cáo này nghiên cứu các yếu tố: tỷ lệ thu nhập lãi thuần (NIM), tỷ lệ dư nợ tín dụng trên vốn huy động (LDR), chỉ số giá tiêu dùng (CPI), tỷ số lợi nhuận ròng trên tài sản (ROA), tỷ số lợi nhuận ròng trên vốn chủ sở hữu (ROE), Tổng sản phẩm trong nước (GDP) tác động đến tăng trưởng tín dụng của Ngân hàng thương mại cổ phần Quân đội. Mô hình nghiên cứu có dạng:

\(TTTD=β_0+β_1NIM+β_2LDR+β_3CPI+β_4ROA+β_5ROE+β_6GDP\)

Trong đó:

  • Biến phụ thuộc: TTTD

  • Biến độc lập: NIM, LDR, CPI, ROA, ROE, GDP

3.2 Mô hình hồi quy

tttd <- read_excel("D:/THNN/data1.xlsx",  sheet = "Sheet7")
## New names:
## • `` -> `...8`
MH <- lm(tttd$TTTD ~ tttd$nim + tttd$LDR + tttd$cpi + tttd$ROA + tttd$ROE + tttd$GDP)
MH
## 
## Call:
## lm(formula = tttd$TTTD ~ tttd$nim + tttd$LDR + tttd$cpi + tttd$ROA + 
##     tttd$ROE + tttd$GDP)
## 
## Coefficients:
## (Intercept)     tttd$nim     tttd$LDR     tttd$cpi     tttd$ROA     tttd$ROE  
##   7.902e+00   -1.990e+00   -5.615e-02   -1.059e+00   -8.321e+00    7.092e-01  
##    tttd$GDP  
##   2.691e-06

Kết quả mô hình hồi quy có dạng như sau:

\(TTTD=7.902e+00-1.990eNIM+(-5.615e-02)LDR-1.059eCPI-8.321eROA+(7.092e-01)ROE+(2.691e- 06)GDP\)

#NHIỆM VỤ 6: MÔ PHỎNG MÔ HÌNH

3.3 Mô phỏng các biến đầu vào

3.3.1 Mô phỏng biến tăng trưởng tín dụng (TTTD)

  • Cắt dữ liệu và tạo bảng tần suất
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.1
## 
## 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
a <- 10
breaks <- quantile(tttd$TTTD, probs = seq(0, 1, length.out = a + 1), type = 1, na.rm = TRUE)

td <- sapply(2:length(breaks), function(i) sample(tttd$TTTD[tttd$TTTD >= breaks[i-1] & tttd$TTTD <= breaks[i]], 10, replace = TRUE))


A <- table(td)

AA <- as.data.frame(A) %>%
  mutate(Tansuat = Freq / sum(Freq))
AA
  • Mô phỏng theo bảng tần suất
prob1 <- AA$Tansuat
TD1 <- sample(AA$td, 10000, replace = TRUE, prob = prob1)
TD2 <- as.character(TD1)
TD <- as.numeric(TD2)
hist(TD)

3.3.2 Mô phỏng biến tỷ lệ thu nhập lãi thuần (NIM)

library(dplyr)
b <- 10
breaks <- quantile(tttd$nim, probs = seq(0, 1, length.out = b + 1), type = 1, na.rm = TRUE)

nim <- sapply(2:length(breaks), function(i) sample(tttd$nim[tttd$nim >= breaks[i-1] & tttd$nim <= breaks[i]], 10, replace = TRUE))


B <- table(nim)

BB <- as.data.frame(B) %>%
  mutate(Tansuat = Freq / sum(Freq))
BB
  • Mô phỏng theo bảng tần suất
prob2 <- BB$Tansuat
AP1 <- sample(BB$nim, 10000, replace = TRUE, prob = prob2)
AP2 <- as.character(AP1)
NIM <- as.numeric(AP2)
hist(NIM)

3.3.3 Mô phỏng biến tỷ lệ dư nợ tín dụng trên vốn huy động (LDR)

  • Cắt dữ liệu và tạo bảng tần suất
library(dplyr)
c <- 10
breaks <- quantile(tttd$LDR, probs = seq(0, 1, length.out = c + 1), type = 1, na.rm = TRUE)

ldr <- sapply(2:length(breaks), function(i) sample(tttd$LDR[tttd$LDR >= breaks[i-1] & tttd$LDR <= breaks[i]], 10, replace = TRUE))


C <- table(ldr)

CC <- as.data.frame(C) %>%
  mutate(Tansuat = Freq / sum(Freq))
CC
  • Mô phỏng theo bảng tần suất
prob3 <- CC$Tansuat
BS1 <- sample(CC$ldr, 10000, replace = TRUE, prob = prob3)
BS2 <- as.character(BS1)
LDR <- as.numeric(BS2)
hist(LDR)

3.3.4 Mô phỏng biến chỉ số giá tiêu dùng (CPI)

  • Cắt dữ liệu và tạo bảng tần suất
library(dplyr)
d <- 10
breaks <- quantile(tttd$cpi, probs = seq(0, 1, length.out = d + 1), type = 1, na.rm = TRUE)

cpi <- sapply(2:length(breaks), function(i) sample(tttd$cpi[tttd$cpi >= breaks[i-1] & tttd$cpi <= breaks[i]], 10, replace = TRUE))


D <- table(cpi)

DD <- as.data.frame(D) %>%
  mutate(Tansuat = Freq / sum(Freq))
DD
  • Mô phỏng theo bảng tần suất
prob4 <- DD$Tansuat
CT1 <- sample(DD$cpi, 10000, replace = TRUE, prob = prob4)
CT2 <- as.character(CT1)
CPI <- as.numeric(CT2)
hist(CPI)

3.3.5 Mô phỏng biến tỷ số lợi nhuận ròng trên tài sản (ROA)

  • Cắt dữ liệu và tạo bảng tần suất
library(dplyr)
e <- 10
breaks <- quantile(tttd$ROA, probs = seq(0, 1, length.out = e + 1), type = 1, na.rm = TRUE)

roa <- sapply(2:length(breaks), function(i) sample(tttd$ROA[tttd$ROA >= breaks[i-1] & tttd$ROA <= breaks[i]], 10, replace = TRUE))


E <- table(roa)

EE <- as.data.frame(E) %>%
  mutate(Tansuat = Freq / sum(Freq))
EE
  • Mô phỏng theo bảng tần suất
prob5 <- EE$Tansuat
FT1 <- sample(EE$roa, 10000, replace = TRUE, prob = prob5)
FT2 <- as.character(FT1)
ROA <- as.numeric(FT2)
hist(ROA)

3.3.6 Mô phỏng biến tỷ số lợi nhuận ròng trên vốn chủ sở hữu (ROE)

  • Cắt dữ liệu và tạo bảng tần suất
library(dplyr)
h <- 10
breaks <- quantile(tttd$ROE, probs = seq(0, 1, length.out = h + 1), type = 1, na.rm = TRUE)

roe <- sapply(2:length(breaks), function(i) sample(tttd$ROE[tttd$ROE >= breaks[i-1] & tttd$ROE <= breaks[i]], 10, replace = TRUE))


H <- table(roe)

HH <- as.data.frame(H) %>%
  mutate(Tansuat = Freq / sum(Freq))
HH
  • Mô phỏng theo bảng tần suất
prob6 <- HH$Tansuat
HC1 <- sample(HH$roe, 10000, replace = TRUE, prob = prob6)
HC2 <- as.character(HC1)
ROE <- as.numeric(HC2)
hist(ROE)

3.3.7 Mô phỏng biến tổng sản phẩm trong nước (GDP)

  • Cắt dữ liệu và tạo bảng tần suất
library(dplyr)
s <- 10
breaks <- quantile(tttd$GDP, probs = seq(0, 1, length.out = s + 1), type = 1, na.rm = TRUE)

gdp <- sapply(2:length(breaks), function(i) sample(tttd$GDP[tttd$GDP >= breaks[i-1] & tttd$GDP <= breaks[i]], 10, replace = TRUE))


S <- table(gdp)

SS <- as.data.frame(S) %>%
  mutate(Tansuat = Freq / sum(Freq))
SS
  • Mô phỏng theo bảng tần suất
prob7 <- SS$Tansuat
SS1 <- sample(SS$gdp, 10000, replace = TRUE, prob = prob7)
SS2 <- as.character(SS1)
GDP <- as.numeric(SS2)
hist(GDP)

3.4 Mô phỏng mô hình đề xuất

TTTD <- 7.902*e -1.990*e*NIM+(-5.615*e-02)*LDR-1.059*e*CPI-8.321*e*ROA+(7.092*e-01)*ROE+(2.691*e- 06)*GDP
hist(TTTD)

4 NHIỆM VỤ 1

MÔ PHỎNG ÍT NHẤT 5 BIẾN NGẪU NHIÊN (CÓ PHÂN PHỐI XÁC SUẤT KHÁC NHAU), MÔ PHỎNG, VẼ ĐỒ THỊ, TÍNH TOÁN CÁC ĐẶC TRƯNG ĐO LƯỜNG VÀ GIẢI THÍCH Ý NGHĨA

4.1 PHÂN PHỐI POSSION

a <- rpois(2000, 15)
hist(a, main= "phân phối possion", xlab = "a")

summary(a)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    4.00   12.00   15.00   15.04   17.00   30.00

4.2 PHÂN PHỐI CHUẨN

100 biến ngẫu nhiên có phân phối chuẩn với trung bình μ= 50 và độ lệch tiêu chuẩn σ= 10.

b <- rnorm(n = 100, mean = 50, sd = 10)
hist(b,main= "phân phối chuẩn", xlab = "b")

summary(b)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   26.75   44.13   53.40   51.76   57.79   77.14

4.3 PHÂN PHỐI STUDENT

c <- rt(2000,100,0.5)
hist(c, main= "phân phối student", xlab = "c")

summary(c)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -3.7413 -0.1571  0.4973  0.5298  1.2756  3.7007

4.4 PHÂN PHỐI NHỊ THỨC

d <- rbinom(n = 3000,size = 7,prob = 0.5)
hist(d, main = "phân phối nhị thức", xlab = "d")

summary(d)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   3.000   3.000   3.497   4.000   7.000

4.5 PHÂN PHỐI ĐỀU

e <- runif(1000,0,4)
hist(e, main = "phân phối đều", xlab = "e")

summary(e)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## 0.005241 1.076654 2.039782 2.043611 3.023542 3.999535
LS0tDQp0aXRsZTogIk3DlCBQSOG7jk5HIE5H4bqqVSBOSEnDik4iDQphdXRob3I6ICJOR1VZ4buETiBUSMOaWSBOR8OCTiINCmRhdGU6ICIyMDIzLTA3LTE2Ig0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIHRoZW1lOiBjZXJ1bGVhbg0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0Og0KICAgICAgY29sbGFwc2VkOiBubw0KICAgICAgc21vb3RoX3Njcm9sbDogbm8NCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICB3b3JkX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQotLS0NCmBgYHtyfQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KERUKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KYGBgDQoNCiMgKipOSEnhu4ZNIFbhu6QgMjogQ0jhu4xOIFbDgCBHSeG6okkgVEjDjUNIIFbhuqROIMSQ4buAIE3DlCBQSOG7jk5HKioNCg0KIyMgKipW4bqlbiDEkeG7gSBj4bqnbiBtw7QgcGjhu49uZyoqDQogIA0KICBOZ8OibiBow6BuZyDEkcaw4bujYyB4ZW0gbMOgIGh1eeG6v3QgbeG6oWNoIGPhu6dhIMSR4bqldCBuxrDhu5tjLCBsw6AgdHJ1bmcgdMOibSBraW5oIHThur8gY+G7p2EgbeG7mXQgcXXhu5FjIGdpYS4gTmfDom4gaMOgbmcgY8OzIHZhaSB0csOyIGzDoCB0cnVuZyBnaWFuIHRydW5nIGNodXnhu4NuIGTDsm5nIHbhu5FuLCBjaHV54buDbiB04burIG7GoWkgdGjhu6thIMSR4bq/biBuxqFpIHRoaeG6v3UgdGjDtG5nIHF1YSBob+G6oXQgxJHhu5luZyB0w61uIGThu6VuZy4gTkhUTSB0aHUgaMO6dCBuZ3Xhu5NuIHbhu5FuIG5ow6BuIHLhu5dpIHThu6sgY8OhYyBjw6EgbmjDom4gdsOgIHPhu60gZOG7pW5nIG5ndeG7k24gduG7kW4gdGjhu7FjIGhp4buHbiBuZ2hp4buHcCB24bulIHTDrW4gZOG7pW5nIGNobyBjw6FjIHThu5UgY2jhu6ljLCBjw7RuZyB0eSBoYXkgY8OhYyBk4buxIMOhbiBraMOhYywgbmd14buTbiB0aHUgbOG7m24gbmjhuqV0IGPhu6dhIGjhuqd1IGjhur90IG5nw6JuIGjDoG5nIGPFqW5nIHThu6sgaG/huqF0IMSR4buZbmcgdMOtbiBk4bulbmcuIFbDrCB24bqteSBob+G6oXQgxJHhu5luZyB0w61uIGThu6VuZyB0w61uIGThu6VuZyDEkcOzbmcgdmFpIHRyw7IgcuG6pXQgbOG7m24gdHJvbmcgc+G7sSBwaMOhdCB0cmnhu4NuIGPhu6dhIG5nw6JuIGjDoG5nLiBWaeG7h2MgdMSDbmcgdHLGsOG7n25nIHTDrW4gZOG7pW5nIGzDoCB24bqlbiDEkeG7gSBtw6AgY8OhYyBOSFRNIHF1YW4gdMOibSwgYuG7n2kgdsOsIGtoaSB0xINuZyB0csaw4bufbmcgdMOtbiBk4bulbmcgaOG7o3AgbMO9IHRow6wgc+G6vSB04bqhbyByYSDEkcaw4bujYyBuZ3Xhu5NuIHRodSBuaOG6rXAg4buVbiDEkeG7i25oLCBhbiB0b8OgbiBjaG8gY8OhYyBOSFRNLg0KICANCiAgQ8OzIG5oaeG7gXUgeeG6v3UgdOG7kSB0w6FjIMSR4buZbmcgxJHhur9uIHTEg25nIHRyxrDhu59uZyB0w61uIGThu6VuZywgZG8gxJHDsyB2aeG7h2MgdMOsbSByYSBjw6FjIHnhur91IHThu5EgdMOhYyDEkeG7mW5nIG3huqFuaCDEkeG6v24gdMSDbmcgdHLGsOG7n25nIHTDrW4gZOG7pW5nIGzDoCB24bqlbiDEkeG7gSBj4bqlcCB0aGnhur90IG5o4bqxbSBjdW5nIGPhuqVwIGPGoSBz4bufIGNobyBjw6FjIGNow61uaCBzw6FjaCBsacOqbiBxdWFuIMSR4buDIGPhuqNpIHRoaeG7h24gdmnhu4djIHN1eSBnaeG6o20gdMSDbmcgdHLGsOG7n25nIHTDrW4gZOG7pW5nLg0KDQogIFbhuq15IG7Dqm4gZW0gbOG7sWEgY2jhu41uIMSR4buBIHTDoGkg4oCcIE3DlCBQSOG7jk5HIEPDgUMgWeG6vlUgVOG7kCBUw4FDIMSQ4buYTkcgxJDhur5OIFTEgk5HIFRSxq/hu55ORyBUw41OIEThu6RORyBD4bumQSBOR8OCTiBIw4BORyBUSMavxqBORyBN4bqgSSBD4buUIFBI4bqmTiBRVcOCTiDEkOG7mEnigJ0NCg0KIyMgKipNw7QgaMOsbmggxJHhu4EgeHXhuqV0KioNCg0KICBU4burIHPhu7Ega+G6v3QgaOG7o3AgY8OzIGNo4buNbiBs4buNYywgdGhhbSBraOG6o28gbmhp4buBdSBiw6BpIG5naGnDqm4gY+G7qXUsIGLDoGkgYsOhbyBjw6FvIG7DoHkgbmdoacOqbiBj4bupdSBjw6FjIHnhur91IHThu5E6IHThu7cgbOG7hyB0aHUgbmjhuq1wIGzDo2kgdGh14bqnbiAoTklNKSwgdOG7tyBs4buHIGTGsCBu4bujIHTDrW4gZOG7pW5nIHRyw6puIHbhu5FuIGh1eSDEkeG7mW5nIChMRFIpLCBjaOG7iSBz4buRIGdpw6EgdGnDqnUgZMO5bmcgKENQSSksIHThu7cgc+G7kSBs4bujaSBuaHXhuq1uIHLDsm5nIHRyw6puIHTDoGkgc+G6o24gKFJPQSksIHThu7cgc+G7kSBs4bujaSBuaHXhuq1uIHLDsm5nIHRyw6puIHbhu5FuIGNo4bunIHPhu58gaOG7r3UgKFJPRSksIFThu5VuZyBz4bqjbiBwaOG6qW0gdHJvbmcgbsaw4bubYyAoR0RQKSB0w6FjIMSR4buZbmcgxJHhur9uIHTEg25nIHRyxrDhu59uZyB0w61uIGThu6VuZyBj4bunYSBOZ8OibiBow6BuZyB0aMawxqFuZyBt4bqhaSBj4buVIHBo4bqnbiBRdcOibiDEkeG7mWkuIE3DtCBow6xuaCBuZ2hpw6puIGPhu6l1IGPDsyBk4bqhbmc6DQogIA0KICAkVFRURD3Osl8wK86yXzFOSU0rzrJfMkxEUivOsl8zQ1BJK86yXzRST0ErzrJfNVJPRSvOsl82R0RQJA0KDQogIFRyb25nIMSRw7M6IA0KICAgDQogIC0gQmnhur9uIHBo4bulIHRodeG7mWM6IFRUVEQNCiAgIA0KICAtIEJp4bq/biDEkeG7mWMgbOG6rXA6IE5JTSwgTERSLCBDUEksIFJPQSwgUk9FLCBHRFANCiAgDQojIyAqKkdp4bqjaSB0aMOtY2ggY8OhYyBiaeG6v24qKg0KDQpCYW8gZ+G7k20gNyBiaeG6v24gxJHhu4MgdGnhur9uIGjDoG5oIG3DtCBwaOG7j25nOg0KDQoqIFRUVEQgOiB0xINuZyB0csaw4bufbmcgdMOtbiBk4bulbmcgbMOgIHThu7cgbOG7hyBwaOG6p24gdHLEg20gc+G7sSB0xINuZyBsw6puIGhv4bq3YyBnaeG6o20geHXhu5FuZyBj4bunYSBjw6FjIGtob+G6o24gdGnhu4FuIGRvIGjhu4cgdGjhu5FuZyBuZ8OibiBow6BuZyBjdW5nIGPhuqVwIGNobyBjw6FjIGPDoSBuaMOibiwgdOG7lSBjaOG7qWMsIGRvYW5oIG5naGnhu4dwIHRyb25nIG7hu4FuIGtpbmggdOG6vyDhu58ga8OsIG7DoHkgc28gduG7m2kga8OsIHRyxrDhu5tjIMSRw7MuIA0KDQoqIE5JTSA6IHThu7cgbOG7hyB0aHUgbmjhuq1wIGzDo2kgdGh14bqnbiDEkcaw4bujYyB4ZW0gbMOgIHRoxrDhu5tjIMSRbyB0w61uaCB0b8OhbiBoaeG7h3UgcXXhuqMgY8WpbmcgbmjGsCBraOG6oyBuxINuZyBzaW5oIGzhu51pLCBjaOG7iSByYSBuxINuZyBs4buxYyBj4bunYSBo4buZaSDEkeG7k25nIHF14bqjbiB0cuG7iyB0cm9uZyB2aeG7h2MgZHV5IHRyw6wgdMSDbmcgdHLGsOG7n25nIGPhu6dhIGPDoWMgbmd14buTbiB0aHUgc28gduG7m2kgbeG7qWMgdMSDbmcgdHLGsOG7n25nIGPhu6dhIGPDoWMgY2hpIHBow60uIFThu7cgbOG7hyB0aHUgbmjhuq1wIGzDo2kgdGh14bqnbiDEkcaw4bujYyB0w61uaCBi4bqxbmcgdOG7kWMgxJHhu5kgdMSDbmcgdHLGsOG7n25nIHRodSB04burIGzDo2kgc28gduG7m2kgdOG7kWMgxJHhu5kgdMSDbmcgY2hpIHBow60uDQoNCiogTERSIDogdOG7tyBs4buHIGTGsCBu4bujIHTDrW4gZOG7pW5nIHRyw6puIHbhu5FuIGh1eSDEkeG7mW5nIGzDoCBt4buZdCB0cm9uZyBuaOG7r25nIGNo4buJIHRpw6p1IHF1YW4gdHLhu41uZywgxJHGsOG7o2Mgc+G7rSBk4bulbmcgdHJvbmcgaG/huqF0IMSR4buZbmcgcXXhuqNuIGzDvSBob+G6oXQgxJHhu5luZyBuZ8OibiBow6BuZyBuaOG6sW0gxJHDoW5oIGdpw6EgxJHGsOG7o2MgdMOtbmggdGhhbmgga2hv4bqjbiBoYXkga2jhuqMgbsSDbmcgY2hpIHRy4bqjIGPhu6dhIG3hu5l0IHThu5UgY2jhu6ljLiBU4bu3IGzhu4cgY+G6pXAgdMOtbiBk4bulbmcgc28gduG7m2kgbmd14buTbiB24buRbiBodXkgxJHhu5luZyAoTERSKSDEkcaw4bujYyB0aOG7gyBoaeG7h24gZMaw4bubaSBk4bqhbmcgcGjhuqduIHRyxINtLiANCg0KKiBDUEkgOiBjaOG7iSBz4buRIGdpw6EgdGnDqnUgZMO5bmcgbMOgIGNo4buJIHPhu5EgcGjhuqNuIMOhbmggeHUgaMaw4bubbmcgdsOgIG3hu6ljIMSR4buZIGJp4bq/biDEkeG7mW5nIGdpw6EgY+G6oyBjaHVuZyBj4bunYSBow6BuZyBow7NhLCBk4buLY2ggduG7pS4gQ2jhu4kgc+G7kSBnacOhIHRpw6p1IGTDuW5nIMSRxrDhu6NjIHTDrW5oIHRoZW8gcGjhuqduIHRyxINtIHBo4bqjbiDDoW5oIG3hu6ljIHRoYXkgxJHhu5VpIHTGsMahbmcgxJHhu5FpIGPhu6dhIGdpw6EgaMOgbmcgdGnDqnUgZMO5bmcgdGhlbyB0aOG7nWkgZ2lhbi4NCg0KKiBST0EgOiB04bu3IHPhu5EgbOG7o2kgbmh14bqtbiByw7JuZyB0csOqbiB0w6BpIHPhuqNuIMOgIGNo4buJIHRpw6p1IMSRbyBsxrDhu51uZyBraOG6oyBuxINuZyBzaW5oIGzhu6NpIHRyw6puIG3hu5dpIMSR4buTbmcgdMOgaSBz4bqjbiBj4bunYSBjw7RuZyB0eS4gUk9BIGN1bmcgY+G6pXAgY2hvIG5ow6AgxJHhuqd1IHTGsCB0aMO0bmcgdGluIHbhu4EgY8OhYyBraG/huqNuIGzDo2kgxJHGsOG7o2MgdOG6oW8gcmEgdOG7qyBsxrDhu6NuZyB24buRbiDEkeG6p3UgdMawIChoYXkgbMaw4bujbmcgdMOgaSBz4bqjbikuIFJPQSDEkeG7kWkgduG7m2kgY8OhYyBjw7RuZyB0eSBj4buVIHBo4bqnbiBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgcuG6pXQgbOG7m24gdsOgIHBo4bulIHRodeG7mWMgbmhp4buBdSB2w6BvIG5nw6BuaCBraW5oIGRvYW5oLg0KDQoqIFJPRSA6IHThu7cgc+G7kSBs4bujaSBuaHXhuq1uIHLDsm5nIHRyw6puIHbhu5FuIGNo4bunIHPhu58gaOG7r3UgbMOgIHThu7cgc+G7kSBxdWFuIHRy4buNbmcgbmjhuqV0IMSR4buRaSB24bubaSBjw6FjIGPhu5UgxJHDtG5nLCDEkW8gbMaw4budbmcga2jhuqMgbsSDbmcgc2luaCBs4bujaSB0csOqbiBt4buXaSDEkeG7k25nIHbhu5FuIGPhu6dhIGPhu5UgxJHDtG5nIHRoxrDhu51uZy4gQ2jhu4kgc+G7kSBuw6B5IGzDoCB0aMaw4bubYyDEkW8gY2jDrW5oIHjDoWMgxJHhu4MgxJHDoW5oIGdpw6EgbeG7mXQgxJHhu5NuZyB24buRbiBi4buPIHJhIHbDoCB0w61jaCBsxal5IHThuqFvIHJhIGJhbyBuaGnDqnUgxJHhu5NuZyBs4bujaSBuaHXhuq1uLg0KDQoqIEdEUCA6IHThu5VuZyBz4bqjbiBwaOG6qW0gdHJvbmcgbsaw4bubYyBsw6AgZ2nDoSB0cuG7iyBz4bqjbiBwaOG6qW0gduG6rXQgY2jhuqV0IHbDoCBk4buLY2ggduG7pSBjdeG7kWkgY8O5bmcgxJHGsOG7o2MgdOG6oW8gcmEgY+G7p2EgbuG7gW4ga2luaCB04bq/IHRyb25nIG3hu5l0IGtob+G6o25nIHRo4budaSBnaWFuIG5o4bqldCDEkeG7i25oLg0KICANCiMjICoqROG7ryBsaeG7h3UgbmdoacOqbiBj4bupdSoqDQoNCiAgROG7ryBsaeG7h3UgxJHGsOG7o2MgdGh1IHRo4bqtcCB04burIGPDoWMgYsOhbyBjw6FvIHTDoGkgY2jDrW5oIGPhu6dhIE5nw6JuIGjDoG5nIHRoxrDGoW5nIG3huqFpIGPhu5UgcGjhuqduIFF1w6JuIMSR4buZaSAoTUIgQmFuaykgdOG7qyBxdcO9IDEgbsSDbSAyMDExIMSR4bq/biBxdcO9IDEgbsSDbSAyMDIzLiBE4buvIGxp4buHdSDEkcaw4bujYyB0aHUgdGjhuq1wIHThu5VuZyBo4bujcCB04burIHRyYW5nIFZpZXRzdG9jay4NCiAgDQpgYGB7cn0NCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShEVCkNCnR0dGQgPC0gcmVhZF9leGNlbCgiRDovVEhOTi9kYXRhMS54bHN4IiwgDQogICAgc2hlZXQgPSAiU2hlZXQ3IikNCnR0dGQNCmBgYA0KICANCg0KIyAqKk5ISeG7hk0gVuG7pCAzOiBYw4FDIMSQ4buKTkggUEjDgk4gUEjhu5BJIEPDgUMgQknhur5OKioNCg0KIyMgKipUaOG7kW5nIGvDqiBk4buvIGxp4buHdSBuZ2hpw6puIGPhu6l1KioNCg0KYGBge3J9DQpzdW1tYXJ5KHR0dGQpDQpgYGANCg0KIyMgKipYw6FjIMSR4buLbmggcGjDom4gcGjhu5FpIGPDoWMgYmnhur9uKioNCg0KIyMjIEJp4bq/biB0xINuZyB0csaw4bufbmcgdMOtbiBk4bulbmcgKFRUVEQpDQoNCmBgYHtyfQ0KI3bhur0gxJHhu5MgdGjhu4sgaGlzdG9ncmFtDQpoaXN0KHR0dGQkVFRURCkNCmBgYA0KDQoqKktp4buDbSDEkeG7i25oIHBow6JuIHBo4buRaSBjaHXhuqluKioNCg0KR2nhuqMgdGh1eeG6v3Q6DQoNCiRIXzAkOiBUVFREIHRoZW8gcGjDom4gcGjhu5FpIGNodeG6qW4NCg0KJEhfMSQ6IFRUVEQga2jDtG5nIHRoZW8gcGjDom4gcGjhu5FpIGNodeG6qW4NCg0KYGBge3J9DQpUVFREUFAgPC0gYXMuZGF0YS5mcmFtZSh0dHRkJFRUVEQpDQpzaGFwaXJvLnRlc3QodHR0ZCRUVFREKQ0KYGBgDQoNClbDrCBwX3ZhbHVlID0gMC4wMzAwOSA8IDAuMDUgbsOqbiB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgSDAuIFbhuq15IGzDoCBiaeG6v24gVFRURCBraMO0bmcgY8OzIHBow6JuIHBo4buRaSBjaHXhuqluLg0KDQoqKktp4buDbSDEkeG7i25oIFBow6JuIHBo4buRaSB0KioNCg0KR2nhuqMgdGh1eeG6v3Q6DQoNCiRIXzAkOiBUVFREIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIHQNCiANCiRIXzEkOiBUVFREIGtow7RuZyB0dcOibiB0aGVvIHBow6JuIHBo4buRaSB0DQoNCmBgYHtyfQ0KdC50ZXN0KHR0dGQkVFRURCkNCmBgYA0KDQpWw6wgcF92YWx1ZSA8IDAuMDUgbsOqbiB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgSDAuIFbhuq15IGzDoCBiaeG6v24gVFRURCBraMO0bmcgY8OzIHBow6JuIHBo4buRaSB0Lg0KDQpEbyBzYXUga2hpIGtp4buDbSDEkeG7i25oIHRow6wgdGjhuqV5IGJp4bq/biBUVFREIGNoxrBhIHRoZW8gcGjDom4gcGjhu5FpIG7DoG8gbsOqbiBlbSB0aeG6v24gaMOgbmggc+G6vSBraeG7g20gdHJhIHhlbSBjw7MgdGhlbyBwaMOibiBwaOG7kWkgY2h14bqpbiBoYXkga2jDtG5nIGLhurFuZyBjw6FjaCBz4butIGThu6VuZyBwaMOpcCBraeG7g20gxJHhu4tuaCBTaGFwaXJvLVdpbGssIHbhu5tpIGvDrWNoIHRoxrDhu5tjIG3huqt1IGzDoCAyMC4NCg0KYGBge3J9DQpUVFREQyA8LXNhbXBsZSh0dHRkJFRUVEQsIDIwKQ0Kc2hhcGlyby50ZXN0KFRUVERDKQ0KYGBgDQpW4bqteSBwX3ZhbHVlID4gMC4wNSBuw6puIHRhIHRo4burYSBuaOG6rW4gZ2nhuqMgdGh1eeG6v3QgSDAuIFbhuq15IGzDoCBiaeG6v24gVFRURCBjw7MgcGjDom4gcGjhu5FpIHQuDQoNCiMjIyBCaeG6v24gdOG7tyBs4buHIHRodSBuaOG6rXAgbMOjaSB0aHXhuqduIChOSU0pDQoNCmBgYHtyfQ0KI3bhur0gxJHhu5MgdGjhu4sgaGlzdG9ncmFtDQpoaXN0KHR0dGQkbmltKQ0KYGBgDQoNCioqS2nhu4NtIMSR4buLbmggcGjDom4gcGjhu5FpIGNodeG6qW4qKg0KDQpHaeG6oyB0aHV54bq/dDoNCg0KJEhfMCQ6IE5JTSB0aGVvIHBow6JuIHBo4buRaSBjaHXhuqluDQoNCiRIXzEkOiBOSU0ga2jDtG5nIHRoZW8gcGjDom4gcGjhu5FpIGNodeG6qW4NCg0KYGBge3J9DQpOSU0gPC0gYXMuZGF0YS5mcmFtZSh0dHRkJG5pbSkNCnNoYXBpcm8udGVzdCh0dHRkJG5pbSkNCmBgYA0KDQpWw6wgcF92YWx1ZSA8IDAuMDUgbsOqbiB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgSDAuIFbhuq15IGzDoCBiaeG6v24gTklNIGtow7RuZyBjw7MgcGjDom4gcGjhu5FpIGNodeG6qW4uDQoNCioqS2nhu4NtIMSR4buLbmggcGjDom4gcGjhu5FpIGxvZ2EqKg0KDQpHaeG6oyB0aHV54bq/dDoNCg0KJEhfMCQ6IE5JTSB0aGVvIHBow6JuIHBo4buRaSBsb2dhIGNodeG6qW4NCg0KJEhfMSQ6IE5JTSBraMO0bmcgdGhlbyBwaMOibiBwaOG7kWkgbG9nYSBjaHXhuqluDQoNCmBgYHtyfQ0Ka3MudGVzdCh0dHRkJG5pbSwgeSA9ICJwbG5vcm0iKQ0KYGBgDQoNClbDrCBwX3ZhbHVlIDwgMC4wNSBuw6puIHRhIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBIMC4gVuG6rXkgbMOgIGJp4bq/biBOSU0ga2jDtG5nIGPDsyBwaMOibiBwaOG7kWkgbG9nYSBjaHXhuqluDQoNCioqS2nhu4NtIMSR4buLbmggUGjDom4gcGjhu5FpIHQqKg0KDQpHaeG6oyB0aHV54bq/dDoNCg0KJEhfMCQ6IE5JTSB0dcOibiB0aGVvIHBow6JuIHBo4buRaSB0DQoNCiRIXzEkOiBOSU0ga2jDtG5nIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIHQNCg0KYGBge3J9DQp0LnRlc3QodHR0ZCRuaW0pDQpgYGANCg0KVsOsIHBfdmFsdWUgPCAwLjA1IG7Dqm4gdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEgwLiBW4bqteSBsw6AgYmnhur9uIE5JTSBraMO0bmcgY8OzIHBow6JuIHBo4buRaSB0DQoNCkRvIHNhdSBraGkga2nhu4NtIMSR4buLbmggdGjDrCB0aOG6pXkgYmnhur9uIE5JTSBjaMawYSB0aGVvIHBow6JuIHBo4buRaSBuw6BvIG7Dqm4gZW0gdGnhur9uIGjDoG5oIHPhur0ga2nhu4NtIHRyYSB4ZW0gY8OzIHRoZW8gcGjDom4gcGjhu5FpIGNodeG6qW4gaGF5IGtow7RuZyBi4bqxbmcgY8OhY2ggc+G7rSBk4bulbmcgcGjDqXAga2nhu4NtIMSR4buLbmggU2hhcGlyby1XaWxrLCB24bubaSBrw61jaCB0aMaw4bubYyBt4bqrdSBsw6AgMTAuDQoNCmBgYHtyfQ0KTklNUFAgPC1zYW1wbGUodHR0ZCRuaW0sIDEwKQ0Kc2hhcGlyby50ZXN0KE5JTVBQKQ0KYGBgDQoNClbDrCBwX3ZhbHVlID4gMC4wNSBuw6puIHRhIGNo4bqlcCBuaOG6rW4gZ2nhuqMgdGh1eeG6v3QgSDAuIFbhuq15IGzDoCBiaeG6v24gTklNIGPDsyBwaMOibiBwaOG7kWkgY2h14bqpbiB24bubaSBrw61jaCB0aMaw4bubYyBt4bqrdSBsw6AgMTANCg0KIyMjIEJp4bq/biB04bu3IGzhu4cgZMawIG7hu6MgdMOtbiBk4bulbmcgdHLDqm4gduG7kW4gaHV5IMSR4buZbmcgKExEUikNCg0KYGBge3J9DQojduG6vSDEkeG7kyB0aOG7iyBoaXN0b2dyYW0NCmhpc3QodHR0ZCRMRFIpDQpgYGANCg0KKipLaeG7g20gxJHhu4tuaCBwaMOibiBwaOG7kWkgY2h14bqpbioqDQoNCkdp4bqjIHRodXnhur90Og0KDQokSF8wJDogTERSIHRoZW8gcGjDom4gcGjhu5FpIGNodeG6qW4NCg0KJEhfMSQ6IExEUiBraMO0bmcgdGhlbyBwaMOibiBwaOG7kWkgY2h14bqpbg0KDQpgYGB7cn0NCk5JTSA8LSBhcy5kYXRhLmZyYW1lKHR0dGQkTERSKQ0Kc2hhcGlyby50ZXN0KHR0dGQkTERSKQ0KYGBgDQoNClbDrCBwX3ZhbHVlIDwgMC4wNSBuw6puIHRhIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBIMC4gVuG6rXkgbMOgIGJp4bq/biBMRFIga2jDtG5nIGPDsyBwaMOibiBwaOG7kWkgY2h14bqpbi4NCg0KKipLaeG7g20gxJHhu4tuaCBwaMOibiBwaOG7kWkgbG9nYSoqDQoNCkdp4bqjIHRodXnhur90Og0KDQokSF8wJDogTERSIHRoZW8gcGjDom4gcGjhu5FpIGxvZ2EgY2h14bqpbg0KDQokSF8xJDogTERSIGtow7RuZyB0aGVvIHBow6JuIHBo4buRaSBsb2dhIGNodeG6qW4NCg0KYGBge3J9DQprcy50ZXN0KHR0dGQkTERSLCB5ID0gInBsbm9ybSIpDQpgYGANCg0KVsOsIHBfdmFsdWUgPCAwLjA1IG7Dqm4gdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEgwLiBW4bqteSBsw6AgYmnhur9uIExEUiBraMO0bmcgY8OzIHBow6JuIHBo4buRaSBsb2dhIGNodeG6qW4NCg0KKipLaeG7g20gxJHhu4tuaCBQaMOibiBwaOG7kWkgdCoqDQoNCkdp4bqjIHRodXnhur90Og0KDQokSF8wJDogTERSIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIHQNCg0KJEhfMSQ6IExEUiBraMO0bmcgdHXDom4gdGhlbyBwaMOibiBwaOG7kWkgdA0KDQpgYGB7cn0NCnQudGVzdCh0dHRkJExEUikNCmBgYA0KDQpWw6wgcF92YWx1ZSA8IDAuMDUgbsOqbiB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgSDAuIFbhuq15IGzDoCBiaeG6v24gTERSIGtow7RuZyBjw7MgcGjDom4gcGjhu5FpIHQNCg0KRG8gc2F1IGtoaSBraeG7g20gxJHhu4tuaCB0aMOsIHRo4bqleSBiaeG6v24gTERSIGNoxrBhIHRoZW8gcGjDom4gcGjhu5FpIG7DoG8gbsOqbiBlbSB0aeG6v24gaMOgbmggc+G6vSBraeG7g20gdHJhIHhlbSBjw7MgdGhlbyBwaMOibiBwaOG7kWkgY2h14bqpbiBoYXkga2jDtG5nIGLhurFuZyBjw6FjaCBz4butIGThu6VuZyBwaMOpcCBraeG7g20gxJHhu4tuaCBTaGFwaXJvLVdpbGssIHbhu5tpIGvDrWNoIHRoxrDhu5tjIG3huqt1IGzDoCAyMC4NCg0KYGBge3J9DQpMRFJQUCA8LXNhbXBsZSh0dHRkJExEUiwgMjApDQpzaGFwaXJvLnRlc3QoTERSUFApDQpgYGANCg0KVsOsIHBfdmFsdWUgPiAwLjA1IG7Dqm4gdGEgY2jhuqVwIG5o4bqtbiBnaeG6oyB0aHV54bq/dCBIMC4gVuG6rXkgbMOgIGJp4bq/biBMRFIgY8OzIHBow6JuIHBo4buRaSBjaHXhuqluIHbhu5tpIGvDrWNoIHRoxrDhu5tjIG3huqt1IGzDoCAyMA0KDQojIyNCaeG6v24gY2jhu4kgc+G7kSBnacOhIHRpw6p1IGTDuW5nIChDUEkpDQoNCmBgYHtyfQ0KI3bhur0gxJHhu5MgdGjhu4sgaGlzdG9ncmFtDQpoaXN0KHR0dGQkY3BpKQ0KYGBgDQoNCioqS2nhu4NtIMSR4buLbmggcGjDom4gcGjhu5FpIGNodeG6qW4qKg0KDQpHaeG6oyB0aHV54bq/dDoNCg0KJEhfMCQ6IENQSSB0aGVvIHBow6JuIHBo4buRaSBjaHXhuqluDQoNCiRIXzEkOiBDUEkga2jDtG5nIHRoZW8gcGjDom4gcGjhu5FpIGNodeG6qW4NCg0KYGBge3J9DQpOSU0gPC0gYXMuZGF0YS5mcmFtZSh0dHRkJGNwaSkNCnNoYXBpcm8udGVzdCh0dHRkJGNwaSkNCmBgYA0KDQpWw6wgcF92YWx1ZSA8IDAuMDUgbsOqbiB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgSDAuIFbhuq15IGzDoCBiaeG6v24gQ1BJIGtow7RuZyBjw7MgcGjDom4gcGjhu5FpIGNodeG6qW4uDQoNCioqS2nhu4NtIMSR4buLbmggcGjDom4gcGjhu5FpIGxvZ2EqKg0KDQpHaeG6oyB0aHV54bq/dDoNCg0KJEhfMCQ6IENQSSB0aGVvIHBow6JuIHBo4buRaSBsb2dhIGNodeG6qW4NCg0KJEhfMSQ6IENQSSBraMO0bmcgdGhlbyBwaMOibiBwaOG7kWkgbG9nYSBjaHXhuqluDQoNCmBgYHtyfQ0Ka3MudGVzdCh0dHRkJGNwaSwgeSA9ICJwbG5vcm0iKQ0KYGBgDQoNClbDrCBwX3ZhbHVlIDwgMC4wNSBuw6puIHRhIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBIMC4gVuG6rXkgbMOgIGJp4bq/biBDUEkga2jDtG5nIGPDsyBwaMOibiBwaOG7kWkgbG9nYSBjaHXhuqluDQoNCioqS2nhu4NtIMSR4buLbmggUGjDom4gcGjhu5FpIHQqKg0KDQpHaeG6oyB0aHV54bq/dDoNCg0KJEhfMCQ6IENQSSB0dcOibiB0aGVvIHBow6JuIHBo4buRaSB0DQoNCiRIXzEkOiBDUEkga2jDtG5nIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIHQNCg0KYGBge3J9DQp0LnRlc3QodHR0ZCRjcGkpDQpgYGANCg0KVsOsIHBfdmFsdWUgPCAwLjA1IG7Dqm4gdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEgwLiBW4bqteSBsw6AgYmnhur9uIENQSSBraMO0bmcgY8OzIHBow6JuIHBo4buRaSB0DQoNCkRvIHNhdSBraGkga2nhu4NtIMSR4buLbmggdGjDrCB0aOG6pXkgYmnhur9uIENQSSBjaMawYSB0aGVvIHBow6JuIHBo4buRaSBuw6BvIG7Dqm4gZW0gdGnhur9uIGjDoG5oIHPhur0ga2nhu4NtIHRyYSB4ZW0gY8OzIHRoZW8gcGjDom4gcGjhu5FpIGNodeG6qW4gaGF5IGtow7RuZyBi4bqxbmcgY8OhY2ggc+G7rSBk4bulbmcgcGjDqXAga2nhu4NtIMSR4buLbmggU2hhcGlyby1XaWxrLCB24bubaSBrw61jaCB0aMaw4bubYyBt4bqrdSBsw6AgMTAuDQoNCmBgYHtyfQ0KQ1BJUFAgPC1zYW1wbGUodHR0ZCRjcGksIDEwKQ0Kc2hhcGlyby50ZXN0KENQSVBQKQ0KYGBgDQoNClbDrCBwX3ZhbHVlID4gMC4wNSBuw6puIHRhIGNo4bqlcCBuaOG6rW4gZ2nhuqMgdGh1eeG6v3QgSDAuIFbhuq15IGzDoCBiaeG6v24gQ1BJIGPDsyBwaMOibiBwaOG7kWkgY2h14bqpbiB24bubaSBrw61jaCB0aMaw4bubYyBt4bqrdSBsw6AgMTANCg0KIyMjIEJp4bq/biB04bu3IHPhu5EgbOG7o2kgbmh14bqtbiByw7JuZyB0csOqbiB0w6BpIHPhuqNuIChST0EpDQoNCmBgYHtyfQ0KI3bhur0gxJHhu5MgdGjhu4sgaGlzdG9ncmFtDQpoaXN0KHR0dGQkUk9BKQ0KYGBgDQoNCioqS2nhu4NtIMSR4buLbmggcGjDom4gcGjhu5FpIGNodeG6qW4qKg0KDQpHaeG6oyB0aHV54bq/dDoNCg0KJEhfMCQ6IFJPQSB0aGVvIHBow6JuIHBo4buRaSBjaHXhuqluDQoNCiRIXzEkOiBST0Ega2jDtG5nIHRoZW8gcGjDom4gcGjhu5FpIGNodeG6qW4NCg0KYGBge3J9DQpOSU0gPC0gYXMuZGF0YS5mcmFtZSh0dHRkJFJPQSkNCnNoYXBpcm8udGVzdCh0dHRkJFJPQSkNCmBgYA0KDQpWw6wgcF92YWx1ZSA+IDAuMDUgbsOqbiB0YSBjaOG6pXAgbmjhuq1uIGdp4bqjIHRodXnhur90IEgwLiBW4bqteSBsw6AgYmnhur9uIFJPQSBjw7MgcGjDom4gcGjhu5FpIGNodeG6qW4uDQoNCiMjIyBCaeG6v24gdOG7tyBz4buRIGzhu6NpIG5odeG6rW4gcsOybmcgdHLDqm4gduG7kW4gY2jhu6cgc+G7nyBo4buvdSAoUk9FKQ0KDQpgYGB7cn0NCiN24bq9IMSR4buTIHRo4buLIGhpc3RvZ3JhbQ0KaGlzdCh0dHRkJFJPRSkNCmBgYA0KDQoqKktp4buDbSDEkeG7i25oIHBow6JuIHBo4buRaSBjaHXhuqluKioNCg0KR2nhuqMgdGh1eeG6v3Q6DQoNCiRIXzAkOiBST0UgdGhlbyBwaMOibiBwaOG7kWkgY2h14bqpbg0KDQokSF8xJDogUk9FIGtow7RuZyB0aGVvIHBow6JuIHBo4buRaSBjaHXhuqluDQoNCmBgYHtyfQ0KTklNIDwtIGFzLmRhdGEuZnJhbWUodHR0ZCRST0UpDQpzaGFwaXJvLnRlc3QodHR0ZCRST0UpDQpgYGANCg0KVsOsIHBfdmFsdWUgPiAwLjA1IG7Dqm4gdGEgY2jhuqVwIG5o4bqtbiBnaeG6oyB0aHV54bq/dCBIMC4gVuG6rXkgbMOgIGJp4bq/biBST0UgY8OzIHBow6JuIHBo4buRaSBjaHXhuqluLg0KDQojIyMgQmnhur9uIHThu5VuZyBz4bqjbiBwaOG6qW0gdHJvbmcgbsaw4bubYyAoR0RQKQ0KDQpgYGB7cn0NCiN24bq9IMSR4buTIHRo4buLIGhpc3RvZ3JhbQ0KaGlzdCh0dHRkJEdEUCkNCmBgYA0KDQoqKktp4buDbSDEkeG7i25oIHBow6JuIHBo4buRaSBjaHXhuqluKioNCg0KR2nhuqMgdGh1eeG6v3Q6DQoNCiRIXzAkOiBHRFAgdGhlbyBwaMOibiBwaOG7kWkgY2h14bqpbg0KDQokSF8xJDogR0RQIGtow7RuZyB0aGVvIHBow6JuIHBo4buRaSBjaHXhuqluDQoNCmBgYHtyfQ0KTklNIDwtIGFzLmRhdGEuZnJhbWUodHR0ZCRHRFApDQpzaGFwaXJvLnRlc3QodHR0ZCRHRFApDQpgYGANCg0KVsOsIHBfdmFsdWUgPCAwLjA1IG7Dqm4gdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEgwLiBW4bqteSBsw6AgYmnhur9uIEdEUCBraMO0bmcgY8OzIHBow6JuIHBo4buRaSBjaHXhuqluLg0KDQoqKktp4buDbSDEkeG7i25oIHBow6JuIHBo4buRaSBsb2dhKioNCg0KR2nhuqMgdGh1eeG6v3Q6DQoNCiRIXzAkOiBHRFAgdGhlbyBwaMOibiBwaOG7kWkgbG9nYSBjaHXhuqluDQoNCiRIXzEkOiBHRFAga2jDtG5nIHRoZW8gcGjDom4gcGjhu5FpIGxvZ2EgY2h14bqpbg0KDQpgYGB7cn0NCmtzLnRlc3QodHR0ZCRHRFAsIHkgPSAicGxub3JtIikNCmBgYA0KDQpWw6wgcF92YWx1ZSA8IDAuMDUgbsOqbiB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgSDAuIFbhuq15IGzDoCBiaeG6v24gR0RQIGtow7RuZyBjw7MgcGjDom4gcGjhu5FpIGxvZ2EgY2h14bqpbg0KDQoqKktp4buDbSDEkeG7i25oIFBow6JuIHBo4buRaSB0KioNCg0KR2nhuqMgdGh1eeG6v3Q6DQoNCiRIXzAkOiBHRFAgdHXDom4gdGhlbyBwaMOibiBwaOG7kWkgdA0KDQokSF8xJDogR0RQIGtow7RuZyB0dcOibiB0aGVvIHBow6JuIHBo4buRaSB0DQoNCmBgYHtyfQ0KdC50ZXN0KHR0dGQkR0RQKQ0KYGBgDQoNClbDrCBwX3ZhbHVlIDwgMC4wNSBuw6puIHRhIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBIMC4gVuG6rXkgbMOgIGJp4bq/biBHRFAga2jDtG5nIGPDsyBwaMOibiBwaOG7kWkgdA0KDQpEbyBzYXUga2hpIGtp4buDbSDEkeG7i25oIHRow6wgdGjhuqV5IGJp4bq/biBDUEkgY2jGsGEgdGhlbyBwaMOibiBwaOG7kWkgbsOgbyBuw6puIGVtIHRp4bq/biBow6BuaCBz4bq9IGtp4buDbSB0cmEgeGVtIGPDsyB0aGVvIHBow6JuIHBo4buRaSBjaHXhuqluIGhheSBraMO0bmcgYuG6sW5nIGPDoWNoIHPhu60gZOG7pW5nIHBow6lwIGtp4buDbSDEkeG7i25oIFNoYXBpcm8tV2lsaywgduG7m2kga8OtY2ggdGjGsOG7m2MgbeG6q3UgbMOgIDEwLg0KDQpgYGB7cn0NCkdEUFBQIDwtc2FtcGxlKHR0dGQkR0RQLCAxMCkNCnNoYXBpcm8udGVzdChHRFBQUCkNCmBgYA0KDQpWw6wgcF92YWx1ZSA+IDAuMDUgbsOqbiB0YSBjaOG6pXAgbmjhuq1uIGdp4bqjIHRodXnhur90IEgwLiBW4bqteSBsw6AgYmnhur9uIEdEUCBjw7MgcGjDom4gcGjhu5FpIGNodeG6qW4gduG7m2kgY+G7oSBt4bqrdSBsw6AgMTANCg0KDQojICoqTkhJ4buGTSBW4bukIDQsNTogWMOCWSBE4buwTkcgVsOAIENI4bqgWSBNw5QgSMOMTkgqKg0KDQojIyAqKk3DtCBow6xuaCBuZ2hpw6puIGPhu6l1KioNCg0KVOG7qyBz4buxIGvhur90IGjhu6NwIGPDsyBjaOG7jW4gbOG7jWMsIHRoYW0ga2jhuqNvIG5oaeG7gXUgYsOgaSBuZ2hpw6puIGPhu6l1LCBiw6BpIGLDoW8gY8OhbyBuw6B5IG5naGnDqm4gY+G7qXUgY8OhYyB54bq/dSB04buROiB04bu3IGzhu4cgdGh1IG5o4bqtcCBsw6NpIHRodeG6p24gKE5JTSksIHThu7cgbOG7hyBkxrAgbuG7oyB0w61uIGThu6VuZyB0csOqbiB24buRbiBodXkgxJHhu5luZyAoTERSKSwgY2jhu4kgc+G7kSBnacOhIHRpw6p1IGTDuW5nIChDUEkpLCB04bu3IHPhu5EgbOG7o2kgbmh14bqtbiByw7JuZyB0csOqbiB0w6BpIHPhuqNuIChST0EpLCB04bu3IHPhu5EgbOG7o2kgbmh14bqtbiByw7JuZyB0csOqbiB24buRbiBjaOG7pyBz4bufIGjhu691IChST0UpLCBU4buVbmcgc+G6o24gcGjhuqltIHRyb25nIG7GsOG7m2MgKEdEUCkgdMOhYyDEkeG7mW5nIMSR4bq/biB0xINuZyB0csaw4bufbmcgdMOtbiBk4bulbmcgY+G7p2EgTmfDom4gaMOgbmcgdGjGsMahbmcgbeG6oWkgY+G7lSBwaOG6p24gUXXDom4gxJHhu5lpLiBNw7QgaMOsbmggbmdoacOqbiBj4bupdSBjw7MgZOG6oW5nOg0KDQogJFRUVEQ9zrJfMCvOsl8xTklNK86yXzJMRFIrzrJfM0NQSSvOsl80Uk9BK86yXzVST0UrzrJfNkdEUCQNCg0KICBUcm9uZyDEkcOzOiANCiAgIA0KICAtIEJp4bq/biBwaOG7pSB0aHXhu5ljOiBUVFREDQogICANCiAgLSBCaeG6v24gxJHhu5ljIGzhuq1wOiBOSU0sIExEUiwgQ1BJLCBST0EsIFJPRSwgR0RQDQoNCiMjICoqTcO0IGjDrG5oIGjhu5NpIHF1eSoqDQoNCmBgYHtyfQ0KdHR0ZCA8LSByZWFkX2V4Y2VsKCJEOi9USE5OL2RhdGExLnhsc3giLCAgc2hlZXQgPSAiU2hlZXQ3IikNCk1IIDwtIGxtKHR0dGQkVFRURCB+IHR0dGQkbmltICsgdHR0ZCRMRFIgKyB0dHRkJGNwaSArIHR0dGQkUk9BICsgdHR0ZCRST0UgKyB0dHRkJEdEUCkNCk1IDQpgYGANCg0KS+G6v3QgcXXhuqMgbcO0IGjDrG5oIGjhu5NpIHF1eSBjw7MgZOG6oW5nIG5oxrAgc2F1Og0KDQokVFRURD03LjkwMmUrMDAtMS45OTBlTklNKygtNS42MTVlLTAyKUxEUi0xLjA1OWVDUEktOC4zMjFlUk9BKyg3LjA5MmUtMDEpUk9FKygyLjY5MWUtIDA2KUdEUCQNCg0KIyoqTkhJ4buGTSBW4bukIDY6IE3DlCBQSOG7jk5HIE3DlCBIw4xOSCoqDQoNCiMjICoqTcO0IHBo4buPbmcgY8OhYyBiaeG6v24gxJHhuqd1IHbDoG8qKg0KDQojIyMgTcO0IHBo4buPbmcgYmnhur9uIHTEg25nIHRyxrDhu59uZyB0w61uIGThu6VuZyAoVFRURCkNCg0KKiAqKkPhuq90IGThu68gbGnhu4d1IHbDoCB04bqhbyBi4bqjbmcgdOG6p24gc3XhuqV0KioNCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KYSA8LSAxMA0KYnJlYWtzIDwtIHF1YW50aWxlKHR0dGQkVFRURCwgcHJvYnMgPSBzZXEoMCwgMSwgbGVuZ3RoLm91dCA9IGEgKyAxKSwgdHlwZSA9IDEsIG5hLnJtID0gVFJVRSkNCg0KdGQgPC0gc2FwcGx5KDI6bGVuZ3RoKGJyZWFrcyksIGZ1bmN0aW9uKGkpIHNhbXBsZSh0dHRkJFRUVERbdHR0ZCRUVFREID49IGJyZWFrc1tpLTFdICYgdHR0ZCRUVFREIDw9IGJyZWFrc1tpXV0sIDEwLCByZXBsYWNlID0gVFJVRSkpDQoNCg0KQSA8LSB0YWJsZSh0ZCkNCg0KQUEgPC0gYXMuZGF0YS5mcmFtZShBKSAlPiUNCiAgbXV0YXRlKFRhbnN1YXQgPSBGcmVxIC8gc3VtKEZyZXEpKQ0KQUENCg0KYGBgDQoNCiogKipNw7QgcGjhu49uZyB0aGVvIGLhuqNuZyB04bqnbiBzdeG6pXQqKg0KDQpgYGB7cn0NCnByb2IxIDwtIEFBJFRhbnN1YXQNClREMSA8LSBzYW1wbGUoQUEkdGQsIDEwMDAwLCByZXBsYWNlID0gVFJVRSwgcHJvYiA9IHByb2IxKQ0KVEQyIDwtIGFzLmNoYXJhY3RlcihURDEpDQpURCA8LSBhcy5udW1lcmljKFREMikNCmhpc3QoVEQpDQpgYGANCg0KIyMjIE3DtCBwaOG7j25nIGJp4bq/biB04bu3IGzhu4cgdGh1IG5o4bqtcCBsw6NpIHRodeG6p24gKE5JTSkNCg0KDQpgYGB7cn0NCmxpYnJhcnkoZHBseXIpDQpiIDwtIDEwDQpicmVha3MgPC0gcXVhbnRpbGUodHR0ZCRuaW0sIHByb2JzID0gc2VxKDAsIDEsIGxlbmd0aC5vdXQgPSBiICsgMSksIHR5cGUgPSAxLCBuYS5ybSA9IFRSVUUpDQoNCm5pbSA8LSBzYXBwbHkoMjpsZW5ndGgoYnJlYWtzKSwgZnVuY3Rpb24oaSkgc2FtcGxlKHR0dGQkbmltW3R0dGQkbmltID49IGJyZWFrc1tpLTFdICYgdHR0ZCRuaW0gPD0gYnJlYWtzW2ldXSwgMTAsIHJlcGxhY2UgPSBUUlVFKSkNCg0KDQpCIDwtIHRhYmxlKG5pbSkNCg0KQkIgPC0gYXMuZGF0YS5mcmFtZShCKSAlPiUNCiAgbXV0YXRlKFRhbnN1YXQgPSBGcmVxIC8gc3VtKEZyZXEpKQ0KQkINCg0KYGBgDQoNCiogKipNw7QgcGjhu49uZyB0aGVvIGLhuqNuZyB04bqnbiBzdeG6pXQqKg0KDQpgYGB7cn0NCnByb2IyIDwtIEJCJFRhbnN1YXQNCkFQMSA8LSBzYW1wbGUoQkIkbmltLCAxMDAwMCwgcmVwbGFjZSA9IFRSVUUsIHByb2IgPSBwcm9iMikNCkFQMiA8LSBhcy5jaGFyYWN0ZXIoQVAxKQ0KTklNIDwtIGFzLm51bWVyaWMoQVAyKQ0KaGlzdChOSU0pDQpgYGANCg0KDQojIyMgTcO0IHBo4buPbmcgYmnhur9uIHThu7cgbOG7hyBkxrAgbuG7oyB0w61uIGThu6VuZyB0csOqbiB24buRbiBodXkgxJHhu5luZyAoTERSKQ0KDQoqICoqQ+G6r3QgZOG7ryBsaeG7h3UgdsOgIHThuqFvIGLhuqNuZyB04bqnbiBzdeG6pXQqKg0KDQpgYGB7cn0NCmxpYnJhcnkoZHBseXIpDQpjIDwtIDEwDQpicmVha3MgPC0gcXVhbnRpbGUodHR0ZCRMRFIsIHByb2JzID0gc2VxKDAsIDEsIGxlbmd0aC5vdXQgPSBjICsgMSksIHR5cGUgPSAxLCBuYS5ybSA9IFRSVUUpDQoNCmxkciA8LSBzYXBwbHkoMjpsZW5ndGgoYnJlYWtzKSwgZnVuY3Rpb24oaSkgc2FtcGxlKHR0dGQkTERSW3R0dGQkTERSID49IGJyZWFrc1tpLTFdICYgdHR0ZCRMRFIgPD0gYnJlYWtzW2ldXSwgMTAsIHJlcGxhY2UgPSBUUlVFKSkNCg0KDQpDIDwtIHRhYmxlKGxkcikNCg0KQ0MgPC0gYXMuZGF0YS5mcmFtZShDKSAlPiUNCiAgbXV0YXRlKFRhbnN1YXQgPSBGcmVxIC8gc3VtKEZyZXEpKQ0KQ0MNCg0KYGBgDQoNCiogKipNw7QgcGjhu49uZyB0aGVvIGLhuqNuZyB04bqnbiBzdeG6pXQqKg0KDQpgYGB7cn0NCnByb2IzIDwtIENDJFRhbnN1YXQNCkJTMSA8LSBzYW1wbGUoQ0MkbGRyLCAxMDAwMCwgcmVwbGFjZSA9IFRSVUUsIHByb2IgPSBwcm9iMykNCkJTMiA8LSBhcy5jaGFyYWN0ZXIoQlMxKQ0KTERSIDwtIGFzLm51bWVyaWMoQlMyKQ0KaGlzdChMRFIpDQpgYGANCg0KIyMjIE3DtCBwaOG7j25nIGJp4bq/biBjaOG7iSBz4buRIGdpw6EgdGnDqnUgZMO5bmcgKENQSSkNCg0KKiAqKkPhuq90IGThu68gbGnhu4d1IHbDoCB04bqhbyBi4bqjbmcgdOG6p24gc3XhuqV0KioNCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KZCA8LSAxMA0KYnJlYWtzIDwtIHF1YW50aWxlKHR0dGQkY3BpLCBwcm9icyA9IHNlcSgwLCAxLCBsZW5ndGgub3V0ID0gZCArIDEpLCB0eXBlID0gMSwgbmEucm0gPSBUUlVFKQ0KDQpjcGkgPC0gc2FwcGx5KDI6bGVuZ3RoKGJyZWFrcyksIGZ1bmN0aW9uKGkpIHNhbXBsZSh0dHRkJGNwaVt0dHRkJGNwaSA+PSBicmVha3NbaS0xXSAmIHR0dGQkY3BpIDw9IGJyZWFrc1tpXV0sIDEwLCByZXBsYWNlID0gVFJVRSkpDQoNCg0KRCA8LSB0YWJsZShjcGkpDQoNCkREIDwtIGFzLmRhdGEuZnJhbWUoRCkgJT4lDQogIG11dGF0ZShUYW5zdWF0ID0gRnJlcSAvIHN1bShGcmVxKSkNCkREDQoNCmBgYA0KDQoqICoqTcO0IHBo4buPbmcgdGhlbyBi4bqjbmcgdOG6p24gc3XhuqV0KioNCg0KYGBge3J9DQpwcm9iNCA8LSBERCRUYW5zdWF0DQpDVDEgPC0gc2FtcGxlKEREJGNwaSwgMTAwMDAsIHJlcGxhY2UgPSBUUlVFLCBwcm9iID0gcHJvYjQpDQpDVDIgPC0gYXMuY2hhcmFjdGVyKENUMSkNCkNQSSA8LSBhcy5udW1lcmljKENUMikNCmhpc3QoQ1BJKQ0KYGBgDQoNCg0KIyMjIE3DtCBwaOG7j25nIGJp4bq/biB04bu3IHPhu5EgbOG7o2kgbmh14bqtbiByw7JuZyB0csOqbiB0w6BpIHPhuqNuIChST0EpDQoNCiogKipD4bqvdCBk4buvIGxp4buHdSB2w6AgdOG6oW8gYuG6o25nIHThuqduIHN14bqldCoqDQoNCmBgYHtyfQ0KbGlicmFyeShkcGx5cikNCmUgPC0gMTANCmJyZWFrcyA8LSBxdWFudGlsZSh0dHRkJFJPQSwgcHJvYnMgPSBzZXEoMCwgMSwgbGVuZ3RoLm91dCA9IGUgKyAxKSwgdHlwZSA9IDEsIG5hLnJtID0gVFJVRSkNCg0Kcm9hIDwtIHNhcHBseSgyOmxlbmd0aChicmVha3MpLCBmdW5jdGlvbihpKSBzYW1wbGUodHR0ZCRST0FbdHR0ZCRST0EgPj0gYnJlYWtzW2ktMV0gJiB0dHRkJFJPQSA8PSBicmVha3NbaV1dLCAxMCwgcmVwbGFjZSA9IFRSVUUpKQ0KDQoNCkUgPC0gdGFibGUocm9hKQ0KDQpFRSA8LSBhcy5kYXRhLmZyYW1lKEUpICU+JQ0KICBtdXRhdGUoVGFuc3VhdCA9IEZyZXEgLyBzdW0oRnJlcSkpDQpFRQ0KDQpgYGANCg0KKiAqKk3DtCBwaOG7j25nIHRoZW8gYuG6o25nIHThuqduIHN14bqldCoqDQoNCmBgYHtyfQ0KcHJvYjUgPC0gRUUkVGFuc3VhdA0KRlQxIDwtIHNhbXBsZShFRSRyb2EsIDEwMDAwLCByZXBsYWNlID0gVFJVRSwgcHJvYiA9IHByb2I1KQ0KRlQyIDwtIGFzLmNoYXJhY3RlcihGVDEpDQpST0EgPC0gYXMubnVtZXJpYyhGVDIpDQpoaXN0KFJPQSkNCmBgYA0KDQoNCiMjIyBNw7QgcGjhu49uZyBiaeG6v24gdOG7tyBz4buRIGzhu6NpIG5odeG6rW4gcsOybmcgdHLDqm4gduG7kW4gY2jhu6cgc+G7nyBo4buvdSAoUk9FKQ0KDQoqICoqQ+G6r3QgZOG7ryBsaeG7h3UgdsOgIHThuqFvIGLhuqNuZyB04bqnbiBzdeG6pXQqKg0KDQpgYGB7cn0NCmxpYnJhcnkoZHBseXIpDQpoIDwtIDEwDQpicmVha3MgPC0gcXVhbnRpbGUodHR0ZCRST0UsIHByb2JzID0gc2VxKDAsIDEsIGxlbmd0aC5vdXQgPSBoICsgMSksIHR5cGUgPSAxLCBuYS5ybSA9IFRSVUUpDQoNCnJvZSA8LSBzYXBwbHkoMjpsZW5ndGgoYnJlYWtzKSwgZnVuY3Rpb24oaSkgc2FtcGxlKHR0dGQkUk9FW3R0dGQkUk9FID49IGJyZWFrc1tpLTFdICYgdHR0ZCRST0UgPD0gYnJlYWtzW2ldXSwgMTAsIHJlcGxhY2UgPSBUUlVFKSkNCg0KDQpIIDwtIHRhYmxlKHJvZSkNCg0KSEggPC0gYXMuZGF0YS5mcmFtZShIKSAlPiUNCiAgbXV0YXRlKFRhbnN1YXQgPSBGcmVxIC8gc3VtKEZyZXEpKQ0KSEgNCg0KYGBgDQoNCiogKipNw7QgcGjhu49uZyB0aGVvIGLhuqNuZyB04bqnbiBzdeG6pXQqKg0KDQpgYGB7cn0NCnByb2I2IDwtIEhIJFRhbnN1YXQNCkhDMSA8LSBzYW1wbGUoSEgkcm9lLCAxMDAwMCwgcmVwbGFjZSA9IFRSVUUsIHByb2IgPSBwcm9iNikNCkhDMiA8LSBhcy5jaGFyYWN0ZXIoSEMxKQ0KUk9FIDwtIGFzLm51bWVyaWMoSEMyKQ0KaGlzdChST0UpDQpgYGANCg0KIyMjIE3DtCBwaOG7j25nIGJp4bq/biB04buVbmcgc+G6o24gcGjhuqltIHRyb25nIG7GsOG7m2MgKEdEUCkNCg0KKiAqKkPhuq90IGThu68gbGnhu4d1IHbDoCB04bqhbyBi4bqjbmcgdOG6p24gc3XhuqV0KioNCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KcyA8LSAxMA0KYnJlYWtzIDwtIHF1YW50aWxlKHR0dGQkR0RQLCBwcm9icyA9IHNlcSgwLCAxLCBsZW5ndGgub3V0ID0gcyArIDEpLCB0eXBlID0gMSwgbmEucm0gPSBUUlVFKQ0KDQpnZHAgPC0gc2FwcGx5KDI6bGVuZ3RoKGJyZWFrcyksIGZ1bmN0aW9uKGkpIHNhbXBsZSh0dHRkJEdEUFt0dHRkJEdEUCA+PSBicmVha3NbaS0xXSAmIHR0dGQkR0RQIDw9IGJyZWFrc1tpXV0sIDEwLCByZXBsYWNlID0gVFJVRSkpDQoNCg0KUyA8LSB0YWJsZShnZHApDQoNClNTIDwtIGFzLmRhdGEuZnJhbWUoUykgJT4lDQogIG11dGF0ZShUYW5zdWF0ID0gRnJlcSAvIHN1bShGcmVxKSkNClNTDQoNCmBgYA0KDQoqICoqTcO0IHBo4buPbmcgdGhlbyBi4bqjbmcgdOG6p24gc3XhuqV0KioNCg0KYGBge3J9DQpwcm9iNyA8LSBTUyRUYW5zdWF0DQpTUzEgPC0gc2FtcGxlKFNTJGdkcCwgMTAwMDAsIHJlcGxhY2UgPSBUUlVFLCBwcm9iID0gcHJvYjcpDQpTUzIgPC0gYXMuY2hhcmFjdGVyKFNTMSkNCkdEUCA8LSBhcy5udW1lcmljKFNTMikNCmhpc3QoR0RQKQ0KYGBgDQoNCg0KIyMgKipNw7QgcGjhu49uZyBtw7QgaMOsbmggxJHhu4EgeHXhuqV0KioNCg0KYGBge3J9DQpUVFREIDwtIDcuOTAyKmUgLTEuOTkwKmUqTklNKygtNS42MTUqZS0wMikqTERSLTEuMDU5KmUqQ1BJLTguMzIxKmUqUk9BKyg3LjA5MiplLTAxKSpST0UrKDIuNjkxKmUtIDA2KSpHRFANCmBgYA0KDQoNCmBgYHtyfQ0KaGlzdChUVFREKQ0KYGBgDQoNCg0KDQoNCg0KIyBOSEnhu4ZNIFbhu6QgMSANCg0KTcOUIFBI4buOTkcgw41UIE5I4bqkVCA1IEJJ4bq+TiBOR+G6qlUgTkhJw4pOIChDw5MgUEjDgk4gUEjhu5BJIFjDgUMgU1XhuqRUIEtIw4FDIE5IQVUpLCBNw5QgUEjhu45ORywgVuG6vCDEkOG7kiBUSOG7iiwgVMONTkggVE/DgU4gQ8OBQyDEkOG6tkMgVFLGr05HIMSQTyBMxq/hu5xORyBWw4AgR0nhuqJJIFRIw41DSCDDnSBOR0jEqEENCg0KDQojIyBQSMOCTiBQSOG7kEkgUE9TU0lPTg0KDQpgYGB7cn0NCmEgPC0gcnBvaXMoMjAwMCwgMTUpDQpoaXN0KGEsIG1haW49ICJwaMOibiBwaOG7kWkgcG9zc2lvbiIsIHhsYWIgPSAiYSIpDQpgYGANCg0KYGBge3J9DQpzdW1tYXJ5KGEpDQpgYGANCg0KIyMgUEjDgk4gUEjhu5BJIENIVeG6qE4NCg0KMTAwIGJp4bq/biBuZ+G6q3Ugbmhpw6puIGPDsyBwaMOibiBwaOG7kWkgY2h14bqpbiB24bubaSB0cnVuZyBiw6xuaCDOvD0gNTAgdsOgIMSR4buZIGzhu4djaCB0acOqdSBjaHXhuqluIM+DPSAxMC4NCg0KYGBge3J9DQpiIDwtIHJub3JtKG4gPSAxMDAsIG1lYW4gPSA1MCwgc2QgPSAxMCkNCmhpc3QoYixtYWluPSAicGjDom4gcGjhu5FpIGNodeG6qW4iLCB4bGFiID0gImIiKQ0KYGBgDQoNCmBgYHtyfQ0Kc3VtbWFyeShiKQ0KYGBgDQoNCiMjIFBIw4JOIFBI4buQSSBTVFVERU5UDQoNCmBgYHtyfQ0KYyA8LSBydCgyMDAwLDEwMCwwLjUpDQpoaXN0KGMsIG1haW49ICJwaMOibiBwaOG7kWkgc3R1ZGVudCIsIHhsYWIgPSAiYyIpDQpgYGANCmBgYHtyfQ0Kc3VtbWFyeShjKQ0KYGBgDQogDQogDQojIyBQSMOCTiBQSOG7kEkgTkjhu4ogVEjhu6hDDQpgYGB7cn0NCmQgPC0gcmJpbm9tKG4gPSAzMDAwLHNpemUgPSA3LHByb2IgPSAwLjUpDQpoaXN0KGQsIG1haW4gPSAicGjDom4gcGjhu5FpIG5o4buLIHRo4bupYyIsIHhsYWIgPSAiZCIpDQpgYGANCg0KYGBge3J9DQpzdW1tYXJ5KGQpDQpgYGANCiMjIFBIw4JOIFBI4buQSSDEkOG7gFUNCg0KYGBge3J9DQplIDwtIHJ1bmlmKDEwMDAsMCw0KQ0KaGlzdChlLCBtYWluID0gInBow6JuIHBo4buRaSDEkeG7gXUiLCB4bGFiID0gImUiKQ0KYGBgDQoNCmBgYHtyfQ0Kc3VtbWFyeShlKQ0KYGBgDQoNCg==