1 Đọc dữ liệu

library(readxl)
data <- read_excel("C:/Users/ATC/Documents/Zalo Received Files/dl1.xlsx")
colnames(data) <- c("Date", "BID", "MBB", "ACB", "CTG", "SHB", "VNI") 

2 Tính log return

returns <- as.data.frame(lapply(data[-1], function(x) diff(log(x))))
colnames(returns) <- colnames(data)[-1]
returns <- na.omit(returns)

3 Kết quả nghiên cứu và phân tích

3.1 Kiểm định tính dừng chuỗi lợi suất

Trước khi tiến hành ước lượng mô hình CAPM, nghiên cứu đã sử dụng kiểm định Augmented Dickey-Fuller (ADF) để kiểm tra tính dừng của các chuỗi lợi suất log của năm cổ phiếu: BID, MBB, ACB, CTG, SHB, cùng với chỉ số thị trường VNI.

Kiểm định tính dừng cho chuỗi BID

adf_results <- lapply(returns, function(x) summary(ur.df(x, type = "drift", selectlags = "AIC")))
print(adf_results$BID)
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression drift 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.073948 -0.007662 -0.000569  0.006908  0.067783 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  2.153e-05  7.866e-04   0.027    0.978    
## z.lag.1     -9.419e-01  7.073e-02 -13.317   <2e-16 ***
## z.diff.lag   2.700e-02  5.215e-02   0.518    0.605    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.01511 on 366 degrees of freedom
## Multiple R-squared:  0.459,  Adjusted R-squared:  0.456 
## F-statistic: 155.3 on 2 and 366 DF,  p-value: < 2.2e-16
## 
## 
## Value of test-statistic is: -13.317 88.6714 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau2 -3.44 -2.87 -2.57
## phi1  6.47  4.61  3.79

Kết quả kiểm định ADF cho cổ phiếu BID như sau:

  • Giá trị thống kê kiểm định: –13.317

  • Ngưỡng tới hạn tại mức ý nghĩa 5%: –2.87

  • Vì –13.317 < –2.87, chuỗi lợi suất log của cổ phiếu BID là dừng tại mức ý nghĩa 5%.

Kiểm định tính dừng cho chuỗi MBB

print(adf_results$MBB)
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression drift 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.073090 -0.007440 -0.000723  0.006646  0.064228 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.001079   0.000792   1.363    0.174    
## z.lag.1     -0.959857   0.070715 -13.574   <2e-16 ***
## z.diff.lag   0.012987   0.051550   0.252    0.801    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.01511 on 366 degrees of freedom
## Multiple R-squared:  0.4804, Adjusted R-squared:  0.4776 
## F-statistic: 169.2 on 2 and 366 DF,  p-value: < 2.2e-16
## 
## 
## Value of test-statistic is: -13.5736 92.1422 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau2 -3.44 -2.87 -2.57
## phi1  6.47  4.61  3.79

Kết quả kiểm định ADF cho cổ phiếu MBB như sau:

  • Giá trị thống kê kiểm định: –13.574

  • Ngưỡng tới hạn tại mức ý nghĩa 5%: –2.87

  • Vì –13.574 < –2.87, chuỗi lợi suất log của cổ phiếu MBB là dừng tại mức ý nghĩa 5%.

Kiểm định tính dừng cho chuỗi ACB

print(adf_results$ACB)
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression drift 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.177697 -0.004760  0.000090  0.005669  0.063812 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -7.484e-05  8.224e-04  -0.091    0.928    
## z.lag.1     -1.058e+00  7.367e-02 -14.366   <2e-16 ***
## z.diff.lag   5.513e-02  5.202e-02   1.060    0.290    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.0158 on 366 degrees of freedom
## Multiple R-squared:  0.5034, Adjusted R-squared:  0.5007 
## F-statistic: 185.5 on 2 and 366 DF,  p-value: < 2.2e-16
## 
## 
## Value of test-statistic is: -14.3656 103.1864 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau2 -3.44 -2.87 -2.57
## phi1  6.47  4.61  3.79

Kết quả kiểm định ADF cho cổ phiếu ACB như sau:

  • Giá trị thống kê kiểm định: –14.366

  • Ngưỡng tới hạn tại mức ý nghĩa 5%: –2.87

  • Vì –14.366 < –2.87, chuỗi lợi suất log của cổ phiếu ACB là dừng tại mức ý nghĩa 5%.

Kiểm định tính dừng cho chuỗi CTG

print(adf_results$CTG)
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression drift 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.073150 -0.007290  0.000316  0.007115  0.070429 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.0009888  0.0008731   1.133    0.258    
## z.lag.1     -0.9412139  0.0729932 -12.895   <2e-16 ***
## z.diff.lag  -0.0534138  0.0518643  -1.030    0.304    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.01669 on 366 degrees of freedom
## Multiple R-squared:  0.5012, Adjusted R-squared:  0.4985 
## F-statistic: 183.9 on 2 and 366 DF,  p-value: < 2.2e-16
## 
## 
## Value of test-statistic is: -12.8945 83.1406 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau2 -3.44 -2.87 -2.57
## phi1  6.47  4.61  3.79

Kết quả kiểm định ADF cho cổ phiếu CTG như sau:

  • Giá trị thống kê kiểm định: –12.895

  • Ngưỡng tới hạn tại mức ý nghĩa 5%: –2.87

  • Vì –12.895 < –2.87, chuỗi lợi suất log của cổ phiếu CTG là dừng tại mức ý nghĩa 5%.

Kiểm định tính dừng cho chuỗi SHB

print(adf_results$SHB)
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression drift 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.100207 -0.005366 -0.000443  0.007203  0.067206 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.0004713  0.0008205   0.574    0.566    
## z.lag.1     -1.0200797  0.0739730 -13.790   <2e-16 ***
## z.diff.lag   0.0070456  0.0520003   0.135    0.892    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.01574 on 366 degrees of freedom
## Multiple R-squared:  0.5073, Adjusted R-squared:  0.5046 
## F-statistic: 188.4 on 2 and 366 DF,  p-value: < 2.2e-16
## 
## 
## Value of test-statistic is: -13.7899 95.0835 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau2 -3.44 -2.87 -2.57
## phi1  6.47  4.61  3.79

Kết quả kiểm định ADF cho cổ phiếu SHB như sau:

  • Giá trị thống kê kiểm định: –13.790

  • Ngưỡng tới hạn tại mức ý nghĩa 5%: –2.87

  • Vì –13.790 < –2.87, chuỗi lợi suất log của cổ phiếu SHB là dừng tại mức ý nghĩa 5%.

Kiểm định tính dừng cho chuỗi VNI

print(adf_results$VNI)
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression drift 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.069514 -0.003709  0.000218  0.004592  0.068587 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.0004385  0.0005432   0.807    0.420    
## z.lag.1     -0.8887485  0.0692700 -12.830   <2e-16 ***
## z.diff.lag   0.0090806  0.0522067   0.174    0.862    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.01041 on 366 degrees of freedom
## Multiple R-squared:  0.4406, Adjusted R-squared:  0.4375 
## F-statistic: 144.1 on 2 and 366 DF,  p-value: < 2.2e-16
## 
## 
## Value of test-statistic is: -12.8302 82.3085 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau2 -3.44 -2.87 -2.57
## phi1  6.47  4.61  3.79

Kết quả kiểm định ADF cho chỉ số VNI như sau:

  • Giá trị thống kê kiểm định: –12.830

  • Ngưỡng tới hạn tại mức ý nghĩa 5%: –2.87

  • Vì –12.830 < –2.87, chuỗi lợi suất log của chỉ số VNI là dừng tại mức ý nghĩa 5%

3.2 Ước lượng mô hình CAPM

Mô hình CAPM được ước lượng cho từng cổ phiếu theo phương trình:

\[ R_{it} - R_f = \alpha_i + \beta_i (R_{mt} - R_f) + \varepsilon_{it} \]

Trong đó:

  • \(R_{it}\): lợi suất của cổ phiếu \(i\)

  • \(R_f\): lãi suất phi rủi ro (giả định 3%/năm, tương đương 0.03/252 mỗi ngày)

  • \(R_{mt}\): lợi suất của thị trường (sử dụng chỉ số VNI)

  • \(\beta_i\): hệ số đo lường mức độ nhạy cảm với thị trường

rf <- 0.03 / 252  # lãi suất phi rủi ro theo ngày
stocks <- colnames(returns)[colnames(returns) != "VNI"]

CAPM_models <- lapply(stocks, function(stock) {
  Ri_excess <- returns[[stock]] - rf
  Rm_excess <- returns$VNI - rf
  df <- na.omit(data.frame(Ri_excess, Rm_excess))
  if (nrow(df) == 0) {
    return(NA)
  } else {
    return(summary(lm(Ri_excess ~ Rm_excess, data = df)))
  }
})
names(CAPM_models) <- stocks
# Trích xuất kết quả từ CAPM_models hợp lệ
valid_CAPM <- CAPM_models[!sapply(CAPM_models, function(x) any(is.na(x)))]

# Tính các đại lượng
beta_vals <- sapply(valid_CAPM, function(x) coef(x)[2])
alpha_vals <- sapply(valid_CAPM, function(x) coef(x)[1])
rsq_vals <- sapply(valid_CAPM, function(x) x$r.squared)

# Lợi suất thực tế trung bình (%/năm)
mean_returns <- colMeans(returns[, names(valid_CAPM)], na.rm = TRUE) * 252 * 100

# Lợi suất kỳ vọng theo CAPM (%/năm)
market_return <- mean(returns$VNI, na.rm = TRUE) * 252
expected_returns <- (rf * 252 + beta_vals * (market_return - rf * 252)) * 100

# Tạo bảng kết quả
CAPM_results <- data.frame(
  Stock = names(valid_CAPM),
  Alpha = round(alpha_vals * 252 * 100, 4),            
  Beta = round(beta_vals, 4),
  R_Squared = round(rsq_vals, 4),
  Return_Actual = round(mean_returns, 2),
  Return_CAPM = round(expected_returns, 2)
)

# In kết quả
print(CAPM_results)
##     Stock    Alpha   Beta R_Squared Return_Actual Return_CAPM
## BID   BID -12.6728 1.0616    0.5384          1.54       14.21
## MBB   MBB  17.9963 1.1071    0.5737         32.69       14.69
## ACB   ACB -12.7868 0.9688    0.4109          0.44       13.23
## CTG   CTG  13.9585 1.2269    0.5865         29.91       15.95
## SHB   SHB   2.7264 0.8390    0.3099         14.58       11.86

Giải thích

Cột Ý nghĩa
Stock Mã cổ phiếu
Alpha Sai số lợi suất (alpha), phản ánh hiệu suất vượt trội nếu > 0
Beta Hệ số nhạy cảm với thị trường – càng cao, càng biến động mạnh
R_Squared Độ phù hợp của mô hình (giải thích bao nhiêu % biến thiên lợi suất)
Return_Actual Lợi suất trung bình thực tế (%/năm)
Return_CAPM Lợi suất kỳ vọng theo mô hình CAPM (%/năm)

Nhận xét kết quả ước lượng CAPM

Dựa vào bảng kết quả trên, ta có thể rút ra các điểm chính như sau:

  • Hệ số Beta:

    • Các cổ phiếu đều có Beta dao động quanh mức 1, thể hiện mức độ biến động gần tương đương hoặc cao hơn thị trường.

    • CTG có Beta cao nhất (1.2269), cho thấy mức độ nhạy cảm với thị trường mạnh nhất.

    • SHB có Beta thấp nhất (0.8390), biến động thấp hơn thị trường.

  • Alpha:

    • MBB (18.1034) và CTG (14.1854) có Alpha dương lớn, cho thấy lợi suất vượt mức kỳ vọng theo CAPM, đây có thể là dấu hiệu định giá thấp — tiềm năng sinh lợi cao.

    • BID (–12.6112) và ACB (–12.8180) có Alpha âm khá lớn, cho thấy lợi suất thực tế kém hơn kỳ vọng, có thể đang bị định giá cao hơn giá trị hợp lý.

    • SHB có Alpha dương nhẹ (2.5653), gần mức trung bình, cho thấy mức sinh lợi vừa phải so với rủi ro hệ thống.

  • R-squared:

    • Các giá trị R² dao động từ ~0.3 đến ~0.58, nghĩa là mô hình CAPM giải thích được từ 30%–58% biến động lợi suất các cổ phiếu.

    • MBB (0.5737) và CTG (0.5865) có R² cao nhất, mô hình phù hợp tốt.

    • SHB (0.3099) có R² thấp nhất, cho thấy CAPM giải thích chưa tốt toàn bộ biến động — có thể bị ảnh hưởng bởi yếu tố phi hệ thống.

  • So sánh lợi suất thực tế và kỳ vọng:

    • MBB (32.69% thực tế > 14.58% kỳ vọng)CTG (29.91% > 15.73%): sinh lời cao hơn CAPM dự báo, phù hợp với Alpha dương — dấu hiệu hấp dẫn đầu tư.

    • BID (1.54% thực tế < 14.15% kỳ vọng)ACB (0.44% < 13.26%): sinh lời thấp hơn, phù hợp Alpha âm — nhà đầu tư nên thận trọng.

    • SHB (14.58% thực tế > 12.02% kỳ vọng): chênh lệch nhẹ, không quá khác biệt, mức định giá khá cân bằng.

Kết luận lựa chọn

  • Theo lý thuyết CAPM, cổ phiếu có Alpha dương, lợi suất thực tế vượt kỳ vọng là có tiềm năng, ví dụ MBB và CTG.

  • Để giảm thiểu rủi ro phi hệ thống, nhà đầu tư nên kết hợp các cổ phiếu Beta khác nhau thành một danh mục đa dạng hóa, thay vì nắm riêng lẻ.

  • Trong trường hợp này, MBB và CTG nên được ưu tiên tỷ trọng cao hơn trong danh mục.

  • Danh mục cổ phiếu tối ưu nên ưu tiên MBB & CTG, có thể bổ sung SHB, đồng thời giảm tỷ trọng ACB & BID nếu mục tiêu là tối đa hóa lợi suất theo mô hình CAPM.**

# Lọc mô hình hợp lệ
valid_CAPM <- CAPM_models[!sapply(CAPM_models, function(x) any(is.na(x)))]
betas <- sapply(valid_CAPM, function(x) coef(x)[2])
means <- colMeans(returns[, names(betas)], na.rm = TRUE) * 252
market_return <- mean(returns$VNI, na.rm = TRUE) * 252
expected_return_CAPM <- rf * 252 + betas * (market_return - rf * 252)

3.3 Phân tích đường thị trường chứng khoán (SML)

Dựa trên kết quả mô hình CAPM, nghiên cứu tiến hành xây dựng đường thị trường chứng khoán (Security Market Line – SML), thể hiện mối quan hệ giữa beta và lợi suất kỳ vọng của các cổ phiếu.

Đường SML được xác định theo công thức:

\[ E(R_i) = R_f + \beta_i (E(R_m) - R_f) \]

Các điểm dữ liệu đại diện cho các cổ phiếu được vẽ trên hệ tọa độ \((\beta, E(R))\), với đường SML được thể hiện bằng đường thẳng. So sánh giữa lợi suất trung bình thực tế và lợi suất theo mô hình giúp xác định:

  • Nếu một cổ phiếu nằm trên đường SML: cổ phiếu có thể đang định giá thấp.

  • Nếu nằm dưới đường SML: cổ phiếu có thể đang định giá cao.

# Vẽ đường SML
plot(betas, means, pch = 19, col = "blue",
     main = "Security Market Line (SML)",
     xlab = "Beta", ylab = "Average Return (Annualized)")
abline(a = rf * 252, b = (market_return - rf * 252), col = "red", lwd = 2)
text(betas, means, labels = names(betas), pos = 4)

Nhận xét đường thị trường chứng khoán (SML)

Quan sát đồ thị SML trên, ta thấy:

  • Đường SML (màu đỏ) biểu diễn mối quan hệ lý thuyết giữa Betalợi suất kỳ vọng theo mô hình CAPM.

  • Các điểm màu xanh là vị trí lợi suất thực tế của từng cổ phiếu.

Diễn giải cụ thể:

  • MBBCTG nằm trên đường SML, thậm chí cao hơn rõ rệt so với lợi suất kỳ vọng. Điều này cho thấy chúng có thể đang được định giá thấp, lợi suất thực tế vượt kỳ vọng, phù hợp với Alpha dương trong bảng kết quả → có tiềm năng đầu tư.

  • SHB nằm gần đường SML, hơi cao hơn một chút, cho thấy cổ phiếu này được định giá tương đối hợp lý, lợi suất thực tế xấp xỉ lợi suất kỳ vọng.

  • BIDACB nằm dưới đường SML, nghĩa là lợi suất thực tế thấp hơn so với lợi suất lý thuyết → có thể đang được định giá cao hơn giá trị hợp lý, ít hấp dẫn hơn trong ngắn hạn.

Kết luận SML

  • Những cổ phiếu nằm trên hoặc cao hơn đường SML (MBB, CTG) nên được ưu tiên trong danh mục nếu nhà đầu tư muốn tìm kiếm mức sinh lợi vượt trội so với mức rủi ro hệ thống đã chấp nhận.

  • Việc đa dạng hóa vẫn cần thiết để giảm rủi ro phi hệ thống, nên có thể bổ sung SHB, đồng thời cân nhắc tỷ trọng thấp cho ACB và BID.

3.3.1 Phân tích rủi ro danh mục đầu tư

Từ dữ liệu log-return, ma trận hiệp phương sai hàng năm giữa các cổ phiếu được tính toán, từ đó ước lượng rủi ro tổng thể của danh mục đầu tư gồm các cổ phiếu trên với tỷ trọng bằng nhau.

# Tính ma trận hiệp phương sai & VaR danh mục
cov_matrix <- cov(returns[, names(betas)]) * 252
w <- rep(1 / length(betas), length(betas))  # tỷ trọng đều
var_p <- as.numeric(t(w) %*% cov_matrix %*% w)
sd_p <- sqrt(var_p)
VaR_95 <- qnorm(0.95) * sd_p

list(Var = var_p, SD = sd_p, VaR_95 = VaR_95)
## $Var
## [1] 0.04128751
## 
## $SD
## [1] 0.2031933
## 
## $VaR_95
## [1] 0.3342232
  • Phương sai của danh mục (annualized): 0.0413

  • Độ lệch chuẩn (standard deviation): 20.3%

  • Giá trị rủi ro (Value at Risk - VaR) ở mức 95%: 33.42%

Ý nghĩa: Với mức độ tin cậy 95%, danh mục có thể lỗ tối đa khoảng 33.42% giá trị trong một năm trong điều kiện thị trường bình thường.

Phân tích cho thấy mô hình CAPM tương thích với dữ liệu cổ phiếu ngân hàng giai đoạn nghiên cứu. Các hệ số beta cho thấy sự khác biệt trong độ nhạy với thị trường giữa các mã cổ phiếu. Đồng thời, việc so sánh lợi suất thực tế và kỳ vọng cùng với VaR giúp nhà đầu tư có cái nhìn đầy đủ hơn về cả rủi ro và kỳ vọng lợi suất.

Nhận xét về rủi ro danh mục đầu tư

Dựa trên kết quả tính toán ma trận hiệp phương sai và phân tích rủi ro:

  • Phương sai hàng năm của danh mục (Var): ~0.0413

    ➔ Đây là mức biến động lợi suất bình phương — chỉ ra mức rủi ro tổng thể của danh mục khi các cổ phiếu được kết hợp với tỷ trọng bằng nhau.

  • Độ lệch chuẩn hàng năm (SD): ~0.2032

    ➔ Đây chính là rủi ro danh mục tính theo %, tương đương 20.32%/năm, phản ánh mức độ dao động lợi suất xung quanh lợi suất kỳ vọng.

  • Giá trị rủi ro VaR ở mức 95% (VaR_95): ~0.3342

    ➔ Với mức tin cậy 95%, nhà đầu tư có thể đối mặt mức lỗ tối đa khoảng 33.42% so với giá trị danh mục nếu biến động bất lợi xảy ra.

Kết luận về rủi ro

  • So với phương sai & độ lệch chuẩn của cổ phiếu đơn lẻ, danh mục này giảm thiểu rủi ro tổng thể nhờ hiệu ứng đa dạng hóa (Covariance giữa các cổ phiếu < 1).

  • Kết hợp nhiều cổ phiếu với tỷ trọng đều nhau giúp giảm thiểu rủi ro phi hệ thống, chỉ còn lại rủi ro hệ thống (Beta).

  • Trong bối cảnh thị trường ổn định, danh mục này có rủi ro ở mức chấp nhận được (SD ~ 20%/năm), phù hợp với khẩu vị nhà đầu tư ưa thích cân bằng giữa lợi suất và rủi ro.

Do đó, việc lựa chọn danh mục với tỷ trọng đều, ưu tiên các cổ phiếu có Alpha dương (MBB, CTG) kết hợp cùng các mã khác, sẽ đảm bảo danh mục vừa sinh lời tốt, vừa kiểm soát rủi ro hợp lý.

LS0tDQp0aXRsZTogIlVudGl0bGVkIg0KYXV0aG9yOiAiVHLhu4tuaCBUaOG7iyBUaHUgSMOgIg0KZGF0ZTogIjIwMjUtMDctMDMiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50Og0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIGVuY29kaW5nOiBVVEYtOA0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiAzDQogICAgdG9jX2Zsb2F0Og0KICAgICAgY29sbGFwc2VkOiB5ZXMNCiAgICAgIHNtb290aF9zY3JvbGw6IHllcw0KLS0tDQoNCjxzdHlsZT4NCi8qIEluIMSR4bqtbSB0b8OgbiBi4buZIHRpw6p1IMSR4buBICovDQpoMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQp9DQo8L3N0eWxlPg0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KHVyY2EpDQpsaWJyYXJ5KFBlcmZvcm1hbmNlQW5hbHl0aWNzKQ0KYGBgDQojICoqxJDhu41jIGThu68gbGnhu4d1KioNCg0KYGBge3J9DQpsaWJyYXJ5KHJlYWR4bCkNCmRhdGEgPC0gcmVhZF9leGNlbCgiQzovVXNlcnMvQVRDL0RvY3VtZW50cy9aYWxvIFJlY2VpdmVkIEZpbGVzL2RsMS54bHN4IikNCmNvbG5hbWVzKGRhdGEpIDwtIGMoIkRhdGUiLCAiQklEIiwgIk1CQiIsICJBQ0IiLCAiQ1RHIiwgIlNIQiIsICJWTkkiKSANCmBgYA0KDQojICoqVMOtbmggbG9nIHJldHVybioqDQoNCmBgYHtyfQ0KcmV0dXJucyA8LSBhcy5kYXRhLmZyYW1lKGxhcHBseShkYXRhWy0xXSwgZnVuY3Rpb24oeCkgZGlmZihsb2coeCkpKSkNCmNvbG5hbWVzKHJldHVybnMpIDwtIGNvbG5hbWVzKGRhdGEpWy0xXQ0KcmV0dXJucyA8LSBuYS5vbWl0KHJldHVybnMpDQpgYGANCg0KIyAqKkvhur90IHF14bqjIG5naGnDqm4gY+G7qXUgdsOgIHBow6JuIHTDrWNoKioNCg0KIyMgKipLaeG7g20gxJHhu4tuaCB0w61uaCBk4burbmcgY2h14buXaSBs4bujaSBzdeG6pXQqKg0KDQpUcsaw4bubYyBraGkgdGnhur9uIGjDoG5oIMaw4bubYyBsxrDhu6NuZyBtw7QgaMOsbmggQ0FQTSwgbmdoacOqbiBj4bupdSDEkcOjIHPhu60gZOG7pW5nIGtp4buDbSDEkeG7i25oIEF1Z21lbnRlZCBEaWNrZXktRnVsbGVyIChBREYpIMSR4buDIGtp4buDbSB0cmEgdMOtbmggZOG7q25nIGPhu6dhIGPDoWMgY2h14buXaSBs4bujaSBzdeG6pXQgbG9nIGPhu6dhIG7Eg20gY+G7lSBwaGnhur91OiBCSUQsIE1CQiwgQUNCLCBDVEcsIFNIQiwgY8O5bmcgduG7m2kgY2jhu4kgc+G7kSB0aOG7iyB0csaw4budbmcgVk5JLg0KDQoqKktp4buDbSDEkeG7i25oIHTDrW5oIGThu6tuZyBjaG8gY2h14buXaSBCSUQqKg0KDQpgYGB7cn0NCmFkZl9yZXN1bHRzIDwtIGxhcHBseShyZXR1cm5zLCBmdW5jdGlvbih4KSBzdW1tYXJ5KHVyLmRmKHgsIHR5cGUgPSAiZHJpZnQiLCBzZWxlY3RsYWdzID0gIkFJQyIpKSkNCnByaW50KGFkZl9yZXN1bHRzJEJJRCkNCmBgYA0KDQoqKkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIEFERiBjaG8gY+G7lSBwaGnhur91IEJJRCBuaMawIHNhdToqKg0KDQotIEdpw6EgdHLhu4sgdGjhu5FuZyBrw6oga2nhu4NtIMSR4buLbmg6ICoq4oCTMTMuMzE3KioNCg0KLSBOZ8aw4buhbmcgdOG7m2kgaOG6oW4gdOG6oWkgbeG7qWMgw70gbmdoxKlhIDUlOiAqKuKAkzIuODcqKg0KDQotIFbDrCDigJMxMy4zMTcgPCDigJMyLjg3LCBjaHXhu5dpIGzhu6NpIHN14bqldCBsb2cgY+G7p2EgY+G7lSBwaGnhur91IEJJRCBsw6AgKipk4burbmcqKiB04bqhaSBt4bupYyDDvSBuZ2jEqWEgNSUuDQoNCioqS2nhu4NtIMSR4buLbmggdMOtbmggZOG7q25nIGNobyBjaHXhu5dpIE1CQioqDQoNCmBgYHtyfQ0KcHJpbnQoYWRmX3Jlc3VsdHMkTUJCKQ0KYGBgDQoqKkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIEFERiBjaG8gY+G7lSBwaGnhur91IE1CQiBuaMawIHNhdToqKg0KDQotIEdpw6EgdHLhu4sgdGjhu5FuZyBrw6oga2nhu4NtIMSR4buLbmg6IOKAkzEzLjU3NA0KDQotIE5nxrDhu6FuZyB04bubaSBo4bqhbiB04bqhaSBt4bupYyDDvSBuZ2jEqWEgNSU6IOKAkzIuODcNCg0KLSBWw6wg4oCTMTMuNTc0IDwg4oCTMi44NywgY2h14buXaSBs4bujaSBzdeG6pXQgbG9nIGPhu6dhIGPhu5UgcGhp4bq/dSBNQkIgbMOgICoqZOG7q25nKiogdOG6oWkgbeG7qWMgw70gbmdoxKlhIDUlLg0KDQoqKktp4buDbSDEkeG7i25oIHTDrW5oIGThu6tuZyBjaG8gY2h14buXaSBBQ0IqKg0KDQpgYGB7cn0NCnByaW50KGFkZl9yZXN1bHRzJEFDQikNCmBgYA0KKipL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBBREYgY2hvIGPhu5UgcGhp4bq/dSBBQ0IgbmjGsCBzYXU6KioNCg0KLSBHacOhIHRy4buLIHRo4buRbmcga8OqIGtp4buDbSDEkeG7i25oOiDigJMxNC4zNjYNCg0KLSBOZ8aw4buhbmcgdOG7m2kgaOG6oW4gdOG6oWkgbeG7qWMgw70gbmdoxKlhIDUlOiDigJMyLjg3DQoNCi0gVsOsIOKAkzE0LjM2NiA8IOKAkzIuODcsIGNodeG7l2kgbOG7o2kgc3XhuqV0IGxvZyBj4bunYSBj4buVIHBoaeG6v3UgQUNCIGzDoCAqKmThu6tuZyoqIHThuqFpIG3hu6ljIMO9IG5naMSpYSA1JS4NCg0KKipLaeG7g20gxJHhu4tuaCB0w61uaCBk4burbmcgY2hvIGNodeG7l2kgQ1RHKioNCg0KYGBge3J9DQpwcmludChhZGZfcmVzdWx0cyRDVEcpDQpgYGANCg0KKipL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBBREYgY2hvIGPhu5UgcGhp4bq/dSBDVEcgbmjGsCBzYXU6KioNCg0KLSBHacOhIHRy4buLIHRo4buRbmcga8OqIGtp4buDbSDEkeG7i25oOiDigJMxMi44OTUNCg0KLSBOZ8aw4buhbmcgdOG7m2kgaOG6oW4gdOG6oWkgbeG7qWMgw70gbmdoxKlhIDUlOiDigJMyLjg3DQoNCi0gVsOsIOKAkzEyLjg5NSA8IOKAkzIuODcsIGNodeG7l2kgbOG7o2kgc3XhuqV0IGxvZyBj4bunYSBj4buVIHBoaeG6v3UgQ1RHIGzDoCAqKmThu6tuZyoqIHThuqFpIG3hu6ljIMO9IG5naMSpYSA1JS4NCg0KKipLaeG7g20gxJHhu4tuaCB0w61uaCBk4burbmcgY2hvIGNodeG7l2kgU0hCKioNCg0KYGBge3J9DQpwcmludChhZGZfcmVzdWx0cyRTSEIpDQpgYGANCg0KKipL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBBREYgY2hvIGPhu5UgcGhp4bq/dSBTSEIgbmjGsCBzYXU6KioNCg0KLSBHacOhIHRy4buLIHRo4buRbmcga8OqIGtp4buDbSDEkeG7i25oOiDigJMxMy43OTANCg0KLSBOZ8aw4buhbmcgdOG7m2kgaOG6oW4gdOG6oWkgbeG7qWMgw70gbmdoxKlhIDUlOiDigJMyLjg3DQoNCi0gVsOsIOKAkzEzLjc5MCA8IOKAkzIuODcsIGNodeG7l2kgbOG7o2kgc3XhuqV0IGxvZyBj4bunYSBj4buVIHBoaeG6v3UgU0hCIGzDoCAqKmThu6tuZyoqIHThuqFpIG3hu6ljIMO9IG5naMSpYSA1JS4NCg0KKipLaeG7g20gxJHhu4tuaCB0w61uaCBk4burbmcgY2hvIGNodeG7l2kgVk5JKioNCg0KYGBge3J9DQpwcmludChhZGZfcmVzdWx0cyRWTkkpDQpgYGANCg0KKipL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBBREYgY2hvIGNo4buJIHPhu5EgVk5JIG5oxrAgc2F1OioqDQoNCi0gR2nDoSB0cuG7iyB0aOG7kW5nIGvDqiBraeG7g20gxJHhu4tuaDog4oCTMTIuODMwDQoNCi0gTmfGsOG7oW5nIHThu5tpIGjhuqFuIHThuqFpIG3hu6ljIMO9IG5naMSpYSA1JTog4oCTMi44Nw0KDQotIFbDrCDigJMxMi44MzAgPCDigJMyLjg3LCBjaHXhu5dpIGzhu6NpIHN14bqldCBsb2cgY+G7p2EgY2jhu4kgc+G7kSBWTkkgbMOgICoqZOG7q25nKiogdOG6oWkgbeG7qWMgw70gbmdoxKlhIDUlDQoNCiMjICoqxq/hu5tjIGzGsOG7o25nIG3DtCBow6xuaCBDQVBNKioNCg0KTcO0IGjDrG5oIENBUE0gxJHGsOG7o2MgxrDhu5tjIGzGsOG7o25nIGNobyB04burbmcgY+G7lSBwaGnhur91IHRoZW8gcGjGsMahbmcgdHLDrG5oOg0KDQokJA0KUl97aXR9IC0gUl9mID0gXGFscGhhX2kgKyBcYmV0YV9pIChSX3ttdH0gLSBSX2YpICsgXHZhcmVwc2lsb25fe2l0fQ0KJCQNCg0KVHJvbmcgxJHDszoNCg0KLSAkUl97aXR9JDogbOG7o2kgc3XhuqV0IGPhu6dhIGPhu5UgcGhp4bq/dSAkaSQNCg0KLSAkUl9mJDogbMOjaSBzdeG6pXQgcGhpIHLhu6dpIHJvIChnaeG6oyDEkeG7i25oIDMlL27Eg20sIHTGsMahbmcgxJHGsMahbmcgMC4wMy8yNTIgbeG7l2kgbmfDoHkpDQoNCi0gJFJfe210fSQ6IGzhu6NpIHN14bqldCBj4bunYSB0aOG7iyB0csaw4budbmcgKHPhu60gZOG7pW5nIGNo4buJIHPhu5EgVk5JKQ0KDQotICRcYmV0YV9pJDogaOG7hyBz4buRIMSRbyBsxrDhu51uZyBt4bupYyDEkeG7mSBuaOG6oXkgY+G6o20gduG7m2kgdGjhu4sgdHLGsOG7nW5nDQoNCmBgYHtyfQ0KcmYgPC0gMC4wMyAvIDI1MiAgIyBsw6NpIHN14bqldCBwaGkgcuG7p2kgcm8gdGhlbyBuZ8OgeQ0Kc3RvY2tzIDwtIGNvbG5hbWVzKHJldHVybnMpW2NvbG5hbWVzKHJldHVybnMpICE9ICJWTkkiXQ0KDQpDQVBNX21vZGVscyA8LSBsYXBwbHkoc3RvY2tzLCBmdW5jdGlvbihzdG9jaykgew0KICBSaV9leGNlc3MgPC0gcmV0dXJuc1tbc3RvY2tdXSAtIHJmDQogIFJtX2V4Y2VzcyA8LSByZXR1cm5zJFZOSSAtIHJmDQogIGRmIDwtIG5hLm9taXQoZGF0YS5mcmFtZShSaV9leGNlc3MsIFJtX2V4Y2VzcykpDQogIGlmIChucm93KGRmKSA9PSAwKSB7DQogICAgcmV0dXJuKE5BKQ0KICB9IGVsc2Ugew0KICAgIHJldHVybihzdW1tYXJ5KGxtKFJpX2V4Y2VzcyB+IFJtX2V4Y2VzcywgZGF0YSA9IGRmKSkpDQogIH0NCn0pDQpuYW1lcyhDQVBNX21vZGVscykgPC0gc3RvY2tzDQpgYGANCg0KDQpgYGB7cn0NCiMgVHLDrWNoIHh14bqldCBr4bq/dCBxdeG6oyB04burIENBUE1fbW9kZWxzIGjhu6NwIGzhu4cNCnZhbGlkX0NBUE0gPC0gQ0FQTV9tb2RlbHNbIXNhcHBseShDQVBNX21vZGVscywgZnVuY3Rpb24oeCkgYW55KGlzLm5hKHgpKSldDQoNCiMgVMOtbmggY8OhYyDEkeG6oWkgbMaw4bujbmcNCmJldGFfdmFscyA8LSBzYXBwbHkodmFsaWRfQ0FQTSwgZnVuY3Rpb24oeCkgY29lZih4KVsyXSkNCmFscGhhX3ZhbHMgPC0gc2FwcGx5KHZhbGlkX0NBUE0sIGZ1bmN0aW9uKHgpIGNvZWYoeClbMV0pDQpyc3FfdmFscyA8LSBzYXBwbHkodmFsaWRfQ0FQTSwgZnVuY3Rpb24oeCkgeCRyLnNxdWFyZWQpDQoNCiMgTOG7o2kgc3XhuqV0IHRo4buxYyB04bq/IHRydW5nIGLDrG5oICglL27Eg20pDQptZWFuX3JldHVybnMgPC0gY29sTWVhbnMocmV0dXJuc1ssIG5hbWVzKHZhbGlkX0NBUE0pXSwgbmEucm0gPSBUUlVFKSAqIDI1MiAqIDEwMA0KDQojIEzhu6NpIHN14bqldCBr4buzIHbhu41uZyB0aGVvIENBUE0gKCUvbsSDbSkNCm1hcmtldF9yZXR1cm4gPC0gbWVhbihyZXR1cm5zJFZOSSwgbmEucm0gPSBUUlVFKSAqIDI1Mg0KZXhwZWN0ZWRfcmV0dXJucyA8LSAocmYgKiAyNTIgKyBiZXRhX3ZhbHMgKiAobWFya2V0X3JldHVybiAtIHJmICogMjUyKSkgKiAxMDANCg0KIyBU4bqhbyBi4bqjbmcga+G6v3QgcXXhuqMNCkNBUE1fcmVzdWx0cyA8LSBkYXRhLmZyYW1lKA0KICBTdG9jayA9IG5hbWVzKHZhbGlkX0NBUE0pLA0KICBBbHBoYSA9IHJvdW5kKGFscGhhX3ZhbHMgKiAyNTIgKiAxMDAsIDQpLCAgICAgICAgICAgIA0KICBCZXRhID0gcm91bmQoYmV0YV92YWxzLCA0KSwNCiAgUl9TcXVhcmVkID0gcm91bmQocnNxX3ZhbHMsIDQpLA0KICBSZXR1cm5fQWN0dWFsID0gcm91bmQobWVhbl9yZXR1cm5zLCAyKSwNCiAgUmV0dXJuX0NBUE0gPSByb3VuZChleHBlY3RlZF9yZXR1cm5zLCAyKQ0KKQ0KDQojIEluIGvhur90IHF14bqjDQpwcmludChDQVBNX3Jlc3VsdHMpDQoNCmBgYA0KDQoqKkdp4bqjaSB0aMOtY2gqKg0KDQp8IEPhu5l0ICAgICAgICAgICAgICAgIHwgw50gbmdoxKlhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8DQp8ICoqU3RvY2sqKiAgICAgICAgICB8IE3DoyBj4buVIHBoaeG6v3UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICoqQWxwaGEqKiAgICAgICAgICB8IFNhaSBz4buRIGzhu6NpIHN14bqldCAoYWxwaGEpLCBwaOG6o24gw6FuaCBoaeG7h3Ugc3XhuqV0IHbGsOG7o3QgdHLhu5lpIG7hur91ID4gMCAgICAgICB8DQp8ICoqQmV0YSoqICAgICAgICAgICB8IEjhu4cgc+G7kSBuaOG6oXkgY+G6o20gduG7m2kgdGjhu4sgdHLGsOG7nW5nIOKAkyBjw6BuZyBjYW8sIGPDoG5nIGJp4bq/biDEkeG7mW5nIG3huqFuaCAgICAgICB8DQp8ICoqUlxfU3F1YXJlZCoqICAgICB8IMSQ4buZIHBow7kgaOG7o3AgY+G7p2EgbcO0IGjDrG5oIChnaeG6o2kgdGjDrWNoIGJhbyBuaGnDqnUgJSBiaeG6v24gdGhpw6puIGzhu6NpIHN14bqldCkgfA0KfCAqKlJldHVyblxfQWN0dWFsKiogfCBM4bujaSBzdeG6pXQgdHJ1bmcgYsOsbmggdGjhu7FjIHThur8gKCUvbsSDbSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICoqUmV0dXJuXF9DQVBNKiogICB8IEzhu6NpIHN14bqldCBr4buzIHbhu41uZyB0aGVvIG3DtCBow6xuaCBDQVBNICglL27Eg20pICAgICAgICAgICAgICAgICAgICAgICAgICB8DQoNCioqTmjhuq1uIHjDqXQga+G6v3QgcXXhuqMgxrDhu5tjIGzGsOG7o25nIENBUE0qKg0KDQpE4buxYSB2w6BvIGLhuqNuZyBr4bq/dCBxdeG6oyB0csOqbiwgdGEgY8OzIHRo4buDIHLDunQgcmEgY8OhYyDEkWnhu4NtIGNow61uaCBuaMawIHNhdToNCg0KLSAqKkjhu4cgc+G7kSBCZXRhKio6ICANCg0KICAtIEPDoWMgY+G7lSBwaGnhur91IMSR4buBdSBjw7MgQmV0YSBkYW8gxJHhu5luZyBxdWFuaCBt4bupYyAxLCB0aOG7gyBoaeG7h24gbeG7qWMgxJHhu5kgYmnhur9uIMSR4buZbmcgZ+G6p24gdMawxqFuZyDEkcawxqFuZyBob+G6t2MgY2FvIGjGoW4gdGjhu4sgdHLGsOG7nW5nLg0KICANCiAgLSBDVEcgY8OzIEJldGEgY2FvIG5o4bqldCAoKioxLjIyNjkqKiksIGNobyB0aOG6pXkgbeG7qWMgxJHhu5kgbmjhuqF5IGPhuqNtIHbhu5tpIHRo4buLIHRyxrDhu51uZyBt4bqhbmggbmjhuqV0LiANCiAgDQogIC0gU0hCIGPDsyBCZXRhIHRo4bqlcCBuaOG6pXQgKCoqMC44MzkwKiopLCBiaeG6v24gxJHhu5luZyB0aOG6pXAgaMahbiB0aOG7iyB0csaw4budbmcuDQoNCi0gKipBbHBoYSoqOiAgDQoNCiAgLSBNQkIgKCoqMTguMTAzNCoqKSB2w6AgQ1RHICgqKjE0LjE4NTQqKikgY8OzIEFscGhhIGTGsMahbmcgbOG7m24sIGNobyB0aOG6pXkgbOG7o2kgc3XhuqV0IHbGsOG7o3QgbeG7qWMga+G7syB24buNbmcgdGhlbyBDQVBNLCDEkcOieSBjw7MgdGjhu4MgbMOgIGThuqV1IGhp4buHdSAqKsSR4buLbmggZ2nDoSB0aOG6pXAqKiDigJQgdGnhu4FtIG7Eg25nIHNpbmggbOG7o2kgY2FvLiAgDQogIA0KICAtIEJJRCAoKirigJMxMi42MTEyKiopIHbDoCBBQ0IgKCoq4oCTMTIuODE4MCoqKSBjw7MgQWxwaGEgw6JtIGtow6EgbOG7m24sIGNobyB0aOG6pXkgbOG7o2kgc3XhuqV0IHRo4buxYyB04bq/IGvDqW0gaMahbiBr4buzIHbhu41uZywgY8OzIHRo4buDIMSRYW5nIGLhu4sgKirEkeG7i25oIGdpw6EgY2FvIGjGoW4gZ2nDoSB0cuG7iyBo4bujcCBsw70qKi4gIA0KICANCiAgLSBTSEIgY8OzIEFscGhhIGTGsMahbmcgbmjhurkgKCoqMi41NjUzKiopLCBn4bqnbiBt4bupYyB0cnVuZyBiw6xuaCwgY2hvIHRo4bqleSBt4bupYyBzaW5oIGzhu6NpIHbhu6thIHBo4bqjaSBzbyB24bubaSBy4bunaSBybyBo4buHIHRo4buRbmcuDQoNCi0gKipSLXNxdWFyZWQqKjogIA0KDQogIC0gQ8OhYyBnacOhIHRy4buLIFLCsiBkYW8gxJHhu5luZyB04burIH4wLjMgxJHhur9uIH4wLjU4LCBuZ2jEqWEgbMOgIG3DtCBow6xuaCBDQVBNIGdp4bqjaSB0aMOtY2ggxJHGsOG7o2MgdOG7qyAqKjMwJeKAkzU4JSoqIGJp4bq/biDEkeG7mW5nIGzhu6NpIHN14bqldCBjw6FjIGPhu5UgcGhp4bq/dS4gIA0KICAtIE1CQiAoKiowLjU3MzcqKikgdsOgIENURyAoKiowLjU4NjUqKikgY8OzIFLCsiBjYW8gbmjhuqV0LCBtw7QgaMOsbmggcGjDuSBo4bujcCB04buRdC4gIA0KICANCiAgLSBTSEIgKCoqMC4zMDk5KiopIGPDsyBSwrIgdGjhuqVwIG5o4bqldCwgY2hvIHRo4bqleSBDQVBNIGdp4bqjaSB0aMOtY2ggY2jGsGEgdOG7kXQgdG/DoG4gYuG7mSBiaeG6v24gxJHhu5luZyDigJQgY8OzIHRo4buDIGLhu4sg4bqjbmggaMaw4bufbmcgYuG7n2kgeeG6v3UgdOG7kSBwaGkgaOG7hyB0aOG7kW5nLg0KDQotICoqU28gc8OhbmggbOG7o2kgc3XhuqV0IHRo4buxYyB04bq/IHbDoCBr4buzIHbhu41uZyoqOiAgDQoNCiAgLSAqKk1CQiAoMzIuNjklIHRo4buxYyB04bq/ID4gMTQuNTglIGvhu7MgduG7jW5nKSoqIHbDoCAqKkNURyAoMjkuOTElID4gMTUuNzMlKSoqOiBzaW5oIGzhu51pIGNhbyBoxqFuIENBUE0gZOG7sSBiw6FvLCBwaMO5IGjhu6NwIHbhu5tpIEFscGhhIGTGsMahbmcg4oCUIGThuqV1IGhp4buHdSBo4bqlcCBk4bqrbiDEkeG6p3UgdMawLiAgDQogIA0KICAtICoqQklEICgxLjU0JSB0aOG7sWMgdOG6vyA8IDE0LjE1JSBr4buzIHbhu41uZykqKiB2w6AgKipBQ0IgKDAuNDQlIDwgMTMuMjYlKSoqOiBzaW5oIGzhu51pIHRo4bqlcCBoxqFuLCBwaMO5IGjhu6NwIEFscGhhIMOibSDigJQgbmjDoCDEkeG6p3UgdMawIG7Dqm4gdGjhuq1uIHRy4buNbmcuICANCiAgDQogIC0gKipTSEIgKDE0LjU4JSB0aOG7sWMgdOG6vyA+IDEyLjAyJSBr4buzIHbhu41uZykqKjogY2jDqm5oIGzhu4djaCBuaOG6uSwga2jDtG5nIHF1w6Ega2jDoWMgYmnhu4d0LCBt4bupYyDEkeG7i25oIGdpw6Ega2jDoSBjw6JuIGLhurFuZy4NCg0KKipL4bq/dCBsdeG6rW4gbOG7sWEgY2jhu41uKioNCg0KLSBUaGVvIGzDvSB0aHV54bq/dCBDQVBNLCBj4buVIHBoaeG6v3UgY8OzIEFscGhhIGTGsMahbmcsIGzhu6NpIHN14bqldCB0aOG7sWMgdOG6vyB2xrDhu6N0IGvhu7MgduG7jW5nIGzDoCAqKmPDsyB0aeG7gW0gbsSDbmcqKiwgdsOtIGThu6UgKipNQkIgdsOgIENURyoqLg0KDQotIMSQ4buDIGdp4bqjbSB0aGnhu4N1IHLhu6dpIHJvIHBoaSBo4buHIHRo4buRbmcsIG5ow6AgxJHhuqd1IHTGsCBuw6puICoqa+G6v3QgaOG7o3AgY8OhYyBj4buVIHBoaeG6v3UgQmV0YSBraMOhYyBuaGF1KiogdGjDoG5oICoqbeG7mXQgZGFuaCBt4bulYyDEkWEgZOG6oW5nIGjDs2EqKiwgdGhheSB2w6wgbuG6r20gcmnDqm5nIGzhursuDQoNCi0gVHJvbmcgdHLGsOG7nW5nIGjhu6NwIG7DoHksICoqTUJCIHbDoCBDVEcqKiBuw6puIMSRxrDhu6NjIMawdSB0acOqbiB04bu3IHRy4buNbmcgY2FvIGjGoW4gdHJvbmcgZGFuaCBt4bulYy4NCg0KLSBEYW5oIG3hu6VjIGPhu5UgcGhp4bq/dSB04buRaSDGsHUgbsOqbiDGsHUgdGnDqm4gTUJCICYgQ1RHLCBjw7MgdGjhu4MgYuG7lSBzdW5nIFNIQiwgxJHhu5NuZyB0aOG7nWkgZ2nhuqNtIHThu7cgdHLhu41uZyBBQ0IgJiBCSUQgbuG6v3UgbeG7pWMgdGnDqnUgbMOgIHThu5FpIMSRYSBow7NhIGzhu6NpIHN14bqldCB0aGVvIG3DtCBow6xuaCBDQVBNLioqDQoNCg0KYGBge3J9DQojIEzhu41jIG3DtCBow6xuaCBo4bujcCBs4buHDQp2YWxpZF9DQVBNIDwtIENBUE1fbW9kZWxzWyFzYXBwbHkoQ0FQTV9tb2RlbHMsIGZ1bmN0aW9uKHgpIGFueShpcy5uYSh4KSkpXQ0KYmV0YXMgPC0gc2FwcGx5KHZhbGlkX0NBUE0sIGZ1bmN0aW9uKHgpIGNvZWYoeClbMl0pDQptZWFucyA8LSBjb2xNZWFucyhyZXR1cm5zWywgbmFtZXMoYmV0YXMpXSwgbmEucm0gPSBUUlVFKSAqIDI1Mg0KbWFya2V0X3JldHVybiA8LSBtZWFuKHJldHVybnMkVk5JLCBuYS5ybSA9IFRSVUUpICogMjUyDQpleHBlY3RlZF9yZXR1cm5fQ0FQTSA8LSByZiAqIDI1MiArIGJldGFzICogKG1hcmtldF9yZXR1cm4gLSByZiAqIDI1MikNCmBgYA0KDQojIyAqKlBow6JuIHTDrWNoIMSRxrDhu51uZyB0aOG7iyB0csaw4budbmcgY2jhu6luZyBraG/DoW4gKFNNTCkqKg0KDQpE4buxYSB0csOqbiBr4bq/dCBxdeG6oyBtw7QgaMOsbmggQ0FQTSwgbmdoacOqbiBj4bupdSB0aeG6v24gaMOgbmggeMOieSBk4buxbmcgxJHGsOG7nW5nIHRo4buLIHRyxrDhu51uZyBjaOG7qW5nIGtob8OhbiAoU2VjdXJpdHkgTWFya2V0IExpbmUg4oCTIFNNTCksIHRo4buDIGhp4buHbiBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIGJldGEgdsOgIGzhu6NpIHN14bqldCBr4buzIHbhu41uZyBj4bunYSBjw6FjIGPhu5UgcGhp4bq/dS4NCg0KxJDGsOG7nW5nIFNNTCDEkcaw4bujYyB4w6FjIMSR4buLbmggdGhlbyBjw7RuZyB0aOG7qWM6DQoNCiQkDQpFKFJfaSkgPSBSX2YgKyBcYmV0YV9pIChFKFJfbSkgLSBSX2YpDQokJA0KDQpDw6FjIMSRaeG7g20gZOG7ryBsaeG7h3UgxJHhuqFpIGRp4buHbiBjaG8gY8OhYyBj4buVIHBoaeG6v3UgxJHGsOG7o2MgduG6vSB0csOqbiBo4buHIHThu41hIMSR4buZICQoXGJldGEsIEUoUikpJCwgduG7m2kgxJHGsOG7nW5nIFNNTCDEkcaw4bujYyB0aOG7gyBoaeG7h24gYuG6sW5nIMSRxrDhu51uZyB0aOG6s25nLiBTbyBzw6FuaCBnaeG7r2EgbOG7o2kgc3XhuqV0IHRydW5nIGLDrG5oIHRo4buxYyB04bq/IHbDoCBs4bujaSBzdeG6pXQgdGhlbyBtw7QgaMOsbmggZ2nDunAgeMOhYyDEkeG7i25oOg0KDQotIE7hur91IG3hu5l0IGPhu5UgcGhp4bq/dSBu4bqxbSAqKnRyw6puIMSRxrDhu51uZyBTTUwqKjogY+G7lSBwaGnhur91IGPDsyB0aOG7gyDEkWFuZyAqKsSR4buLbmggZ2nDoSB0aOG6pXAqKi4NCg0KLSBO4bq/dSBu4bqxbSAqKmTGsOG7m2kgxJHGsOG7nW5nIFNNTCoqOiBj4buVIHBoaeG6v3UgY8OzIHRo4buDIMSRYW5nICoqxJHhu4tuaCBnacOhIGNhbyoqLg0KDQpgYGB7cn0NCiMgVuG6vSDEkcaw4budbmcgU01MDQpwbG90KGJldGFzLCBtZWFucywgcGNoID0gMTksIGNvbCA9ICJibHVlIiwNCiAgICAgbWFpbiA9ICJTZWN1cml0eSBNYXJrZXQgTGluZSAoU01MKSIsDQogICAgIHhsYWIgPSAiQmV0YSIsIHlsYWIgPSAiQXZlcmFnZSBSZXR1cm4gKEFubnVhbGl6ZWQpIikNCmFibGluZShhID0gcmYgKiAyNTIsIGIgPSAobWFya2V0X3JldHVybiAtIHJmICogMjUyKSwgY29sID0gInJlZCIsIGx3ZCA9IDIpDQp0ZXh0KGJldGFzLCBtZWFucywgbGFiZWxzID0gbmFtZXMoYmV0YXMpLCBwb3MgPSA0KQ0KYGBgDQoNCioqTmjhuq1uIHjDqXQgxJHGsOG7nW5nIHRo4buLIHRyxrDhu51uZyBjaOG7qW5nIGtob8OhbiAoU01MKSoqDQoNClF1YW4gc8OhdCDEkeG7kyB0aOG7iyBTTUwgdHLDqm4sIHRhIHRo4bqleToNCg0KLSAqKsSQxrDhu51uZyBTTUwgKG3DoHUgxJHhu48pKiogYmnhu4N1IGRp4buFbiBt4buRaSBxdWFuIGjhu4cgbMO9IHRodXnhur90IGdp4buvYSAqKkJldGEqKiB2w6AgKips4bujaSBzdeG6pXQga+G7syB24buNbmcqKiB0aGVvIG3DtCBow6xuaCBDQVBNLg0KDQotIEPDoWMgKirEkWnhu4NtIG3DoHUgeGFuaCoqIGzDoCB24buLIHRyw60gbOG7o2kgc3XhuqV0IHRo4buxYyB04bq/IGPhu6dhIHThu6tuZyBj4buVIHBoaeG6v3UuDQoNCioqRGnhu4VuIGdp4bqjaSBj4bulIHRo4buDOioqDQoNCi0gKipNQkIqKiB2w6AgKipDVEcqKiBu4bqxbSAqKnRyw6puIMSRxrDhu51uZyBTTUwqKiwgdGjhuq1tIGNow60gKipjYW8gaMahbiByw7UgcuG7h3QqKiBzbyB24bubaSBs4bujaSBzdeG6pXQga+G7syB24buNbmcuIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IGNow7puZyAqKmPDsyB0aOG7gyDEkWFuZyDEkcaw4bujYyDEkeG7i25oIGdpw6EgdGjhuqVwKiosIGzhu6NpIHN14bqldCB0aOG7sWMgdOG6vyB2xrDhu6N0IGvhu7MgduG7jW5nLCAqKnBow7kgaOG7o3AgduG7m2kgQWxwaGEgZMawxqFuZyoqIHRyb25nIGLhuqNuZyBr4bq/dCBxdeG6oyDihpIgKipjw7MgdGnhu4FtIG7Eg25nIMSR4bqndSB0xrAqKi4NCg0KLSAqKlNIQioqIG7hurFtIGfhuqduIMSRxrDhu51uZyBTTUwsIGjGoWkgY2FvIGjGoW4gbeG7mXQgY2jDunQsIGNobyB0aOG6pXkgY+G7lSBwaGnhur91IG7DoHkgKirEkcaw4bujYyDEkeG7i25oIGdpw6EgdMawxqFuZyDEkeG7kWkgaOG7o3AgbMO9KiosIGzhu6NpIHN14bqldCB0aOG7sWMgdOG6vyB44bqlcCB44buJIGzhu6NpIHN14bqldCBr4buzIHbhu41uZy4NCg0KLSAqKkJJRCoqIHbDoCAqKkFDQioqIG7hurFtICoqZMaw4bubaSDEkcaw4budbmcgU01MKiosIG5naMSpYSBsw6AgbOG7o2kgc3XhuqV0IHRo4buxYyB04bq/IHRo4bqlcCBoxqFuIHNvIHbhu5tpIGzhu6NpIHN14bqldCBsw70gdGh1eeG6v3Qg4oaSICoqY8OzIHRo4buDIMSRYW5nIMSRxrDhu6NjIMSR4buLbmggZ2nDoSBjYW8gaMahbiBnacOhIHRy4buLIGjhu6NwIGzDvSoqLCDDrXQgaOG6pXAgZOG6q24gaMahbiB0cm9uZyBuZ+G6r24gaOG6oW4uDQoNCioqS+G6v3QgbHXhuq1uIFNNTCoqDQoNCi0gTmjhu69uZyBj4buVIHBoaeG6v3UgKipu4bqxbSB0csOqbiBob+G6t2MgY2FvIGjGoW4gxJHGsOG7nW5nIFNNTCoqIChNQkIsIENURykgbsOqbiDEkcaw4bujYyDGsHUgdGnDqm4gdHJvbmcgZGFuaCBt4bulYyBu4bq/dSBuaMOgIMSR4bqndSB0xrAgbXXhu5FuIHTDrG0ga2nhur9tICoqbeG7qWMgc2luaCBs4bujaSB2xrDhu6N0IHRy4buZaSoqIHNvIHbhu5tpIG3hu6ljIHLhu6dpIHJvIGjhu4cgdGjhu5FuZyDEkcOjIGNo4bqlcCBuaOG6rW4uDQoNCi0gVmnhu4djIMSRYSBk4bqhbmcgaMOzYSB24bqrbiBj4bqnbiB0aGnhur90IMSR4buDIGdp4bqjbSBy4bunaSBybyBwaGkgaOG7hyB0aOG7kW5nLCBuw6puIGPDsyB0aOG7gyBi4buVIHN1bmcgU0hCLCDEkeG7k25nIHRo4budaSBjw6JuIG5o4bqvYyB04bu3IHRy4buNbmcgdGjhuqVwIGNobyBBQ0IgdsOgIEJJRC4NCg0KIyMjICoqUGjDom4gdMOtY2ggcuG7p2kgcm8gZGFuaCBt4bulYyDEkeG6p3UgdMawKioNCg0KVOG7qyBk4buvIGxp4buHdSBsb2ctcmV0dXJuLCBtYSB0cuG6rW4gaGnhu4dwIHBoxrDGoW5nIHNhaSBow6BuZyBuxINtIGdp4buvYSBjw6FjIGPhu5UgcGhp4bq/dSDEkcaw4bujYyB0w61uaCB0b8OhbiwgdOG7qyDEkcOzIMaw4bubYyBsxrDhu6NuZyBy4bunaSBybyB04buVbmcgdGjhu4MgY+G7p2EgZGFuaCBt4bulYyDEkeG6p3UgdMawIGfhu5NtIGPDoWMgY+G7lSBwaGnhur91IHRyw6puIHbhu5tpIHThu7cgdHLhu41uZyBi4bqxbmcgbmhhdS4NCg0KDQpgYGB7cn0NCiMgVMOtbmggbWEgdHLhuq1uIGhp4buHcCBwaMawxqFuZyBzYWkgJiBWYVIgZGFuaCBt4bulYw0KY292X21hdHJpeCA8LSBjb3YocmV0dXJuc1ssIG5hbWVzKGJldGFzKV0pICogMjUyDQp3IDwtIHJlcCgxIC8gbGVuZ3RoKGJldGFzKSwgbGVuZ3RoKGJldGFzKSkgICMgdOG7tyB0cuG7jW5nIMSR4buBdQ0KdmFyX3AgPC0gYXMubnVtZXJpYyh0KHcpICUqJSBjb3ZfbWF0cml4ICUqJSB3KQ0Kc2RfcCA8LSBzcXJ0KHZhcl9wKQ0KVmFSXzk1IDwtIHFub3JtKDAuOTUpICogc2RfcA0KDQpsaXN0KFZhciA9IHZhcl9wLCBTRCA9IHNkX3AsIFZhUl85NSA9IFZhUl85NSkNCg0KYGBgDQoNCi0gKipQaMawxqFuZyBzYWkgY+G7p2EgZGFuaCBt4bulYyAoYW5udWFsaXplZCkqKjogMC4wNDEzDQoNCi0gKirEkOG7mSBs4buHY2ggY2h14bqpbiAoc3RhbmRhcmQgZGV2aWF0aW9uKSoqOiAyMC4zJQ0KDQotICoqR2nDoSB0cuG7iyBy4bunaSBybyAoVmFsdWUgYXQgUmlzayAtIFZhUikg4bufIG3hu6ljIDk1JSoqOiAqKjMzLjQyJSoqDQoNCioqw50gbmdoxKlhKio6IFbhu5tpIG3hu6ljIMSR4buZIHRpbiBj4bqteSA5NSUsICoqZGFuaCBt4bulYyBjw7MgdGjhu4MgbOG7lyB04buRaSDEkWEga2hv4bqjbmcgMzMuNDIlIGdpw6EgdHLhu4sgdHJvbmcgbeG7mXQgbsSDbSoqIHRyb25nIMSRaeG7gXUga2nhu4duIHRo4buLIHRyxrDhu51uZyBiw6xuaCB0aMaw4budbmcuDQoNClBow6JuIHTDrWNoIGNobyB0aOG6pXkgbcO0IGjDrG5oIENBUE0gdMawxqFuZyB0aMOtY2ggduG7m2kgZOG7ryBsaeG7h3UgY+G7lSBwaGnhur91IG5nw6JuIGjDoG5nIGdpYWkgxJFv4bqhbiBuZ2hpw6puIGPhu6l1LiBDw6FjIGjhu4cgc+G7kSBiZXRhIGNobyB0aOG6pXkgc+G7sSBraMOhYyBiaeG7h3QgdHJvbmcgxJHhu5kgbmjhuqF5IHbhu5tpIHRo4buLIHRyxrDhu51uZyBnaeG7r2EgY8OhYyBtw6MgY+G7lSBwaGnhur91LiDEkOG7k25nIHRo4budaSwgdmnhu4djIHNvIHPDoW5oIGzhu6NpIHN14bqldCB0aOG7sWMgdOG6vyB2w6Aga+G7syB24buNbmcgY8O5bmcgduG7m2kgVmFSIGdpw7pwIG5ow6AgxJHhuqd1IHTGsCBjw7MgY8OhaSBuaMOsbiDEkeG6p3kgxJHhu6cgaMahbiB24buBIGPhuqMgcuG7p2kgcm8gdsOgIGvhu7MgduG7jW5nIGzhu6NpIHN14bqldC4NCg0KKipOaOG6rW4geMOpdCB24buBIHLhu6dpIHJvIGRhbmggbeG7pWMgxJHhuqd1IHTGsCoqDQoNCkThu7FhIHRyw6puIGvhur90IHF14bqjIHTDrW5oIHRvw6FuIG1hIHRy4bqtbiBoaeG7h3AgcGjGsMahbmcgc2FpIHbDoCBwaMOibiB0w61jaCBy4bunaSBybzoNCg0KLSAqKlBoxrDGoW5nIHNhaSBow6BuZyBuxINtIGPhu6dhIGRhbmggbeG7pWMgKFZhcikqKjogfjAuMDQxMyAgDQoNCiAg4p6UIMSQw6J5IGzDoCBt4bupYyBiaeG6v24gxJHhu5luZyBs4bujaSBzdeG6pXQgYsOsbmggcGjGsMahbmcg4oCUIGNo4buJIHJhICoqbeG7qWMgcuG7p2kgcm8gdOG7lW5nIHRo4buDKiogY+G7p2EgZGFuaCBt4bulYyBraGkgY8OhYyBj4buVIHBoaeG6v3UgxJHGsOG7o2Mga+G6v3QgaOG7o3AgduG7m2kgdOG7tyB0cuG7jW5nIGLhurFuZyBuaGF1Lg0KDQotICoqxJDhu5kgbOG7h2NoIGNodeG6qW4gaMOgbmcgbsSDbSAoU0QpKio6IH4wLjIwMzIgIA0KDQogIOKelCDEkMOieSBjaMOtbmggbMOgICoqcuG7p2kgcm8gZGFuaCBt4bulYyB0w61uaCB0aGVvICUqKiwgdMawxqFuZyDEkcawxqFuZyAqKjIwLjMyJS9uxINtKiosIHBo4bqjbiDDoW5oIG3hu6ljIMSR4buZIGRhbyDEkeG7mW5nIGzhu6NpIHN14bqldCB4dW5nIHF1YW5oIGzhu6NpIHN14bqldCBr4buzIHbhu41uZy4NCg0KLSAqKkdpw6EgdHLhu4sgcuG7p2kgcm8gVmFSIOG7nyBt4bupYyA5NSUgKFZhUl85NSkqKjogfjAuMzM0MiAgDQoNCiAg4p6UIFbhu5tpIG3hu6ljIHRpbiBj4bqteSA5NSUsIG5ow6AgxJHhuqd1IHTGsCBjw7MgdGjhu4MgxJHhu5FpIG3hurd0ICoqbeG7qWMgbOG7lyB04buRaSDEkWEga2hv4bqjbmcgMzMuNDIlKiogc28gduG7m2kgZ2nDoSB0cuG7iyBkYW5oIG3hu6VjIG7hur91IGJp4bq/biDEkeG7mW5nIGLhuqV0IGzhu6NpIHjhuqN5IHJhLg0KDQoqKkvhur90IGx14bqtbiB24buBIHLhu6dpIHJvKioNCg0KLSBTbyB24bubaSBwaMawxqFuZyBzYWkgJiDEkeG7mSBs4buHY2ggY2h14bqpbiBj4bunYSAqKmPhu5UgcGhp4bq/dSDEkcahbiBs4bq7KiosIGRhbmggbeG7pWMgbsOgeSAqKmdp4bqjbSB0aGnhu4N1IHLhu6dpIHJvIHThu5VuZyB0aOG7gyoqIG5o4budIGhp4buHdSDhu6luZyDEkWEgZOG6oW5nIGjDs2EgKENvdmFyaWFuY2UgZ2nhu69hIGPDoWMgY+G7lSBwaGnhur91IDwgMSkuDQoNCi0gS+G6v3QgaOG7o3Agbmhp4buBdSBj4buVIHBoaeG6v3UgduG7m2kgKip04bu3IHRy4buNbmcgxJHhu4F1IG5oYXUqKiBnacO6cCBnaeG6o20gdGhp4buDdSAqKnLhu6dpIHJvIHBoaSBo4buHIHRo4buRbmcqKiwgY2jhu4kgY8OybiBs4bqhaSBy4bunaSBybyBo4buHIHRo4buRbmcgKEJldGEpLg0KDQotIFRyb25nIGLhu5FpIGPhuqNuaCB0aOG7iyB0csaw4budbmcg4buVbiDEkeG7i25oLCBkYW5oIG3hu6VjIG7DoHkgY8OzICoqcuG7p2kgcm8g4bufIG3hu6ljIGNo4bqlcCBuaOG6rW4gxJHGsOG7o2MqKiAoU0QgfiAyMCUvbsSDbSksIHBow7kgaOG7o3AgduG7m2kga2jhuql1IHbhu4sgbmjDoCDEkeG6p3UgdMawIMawYSB0aMOtY2ggY8OibiBi4bqxbmcgZ2nhu69hICoqbOG7o2kgc3XhuqV0IHbDoCBy4bunaSBybyoqLg0KDQpEbyDEkcOzLCB2aeG7h2MgbOG7sWEgY2jhu41uIGRhbmggbeG7pWMgduG7m2kgdOG7tyB0cuG7jW5nIMSR4buBdSwgxrB1IHRpw6puIGPDoWMgY+G7lSBwaGnhur91IGPDsyBBbHBoYSBkxrDGoW5nIChNQkIsIENURykga+G6v3QgaOG7o3AgY8O5bmcgY8OhYyBtw6Mga2jDoWMsIHPhur0gxJHhuqNtIGLhuqNvIGRhbmggbeG7pWMgduG7q2Egc2luaCBs4budaSB04buRdCwgduG7q2Ega2nhu4NtIHNvw6F0IHLhu6dpIHJvIGjhu6NwIGzDvS4NCg==