1 ,LỜI CẢM ƠN

Trong quá trình học tập và nghiên cứu môn Mô phỏng ngẫu nhiên cũng như trong quá trình hoàn thiện bài tiểu luận “Mô phỏng danh mục đầu tư chứng khoán 6 cổ phiếu lớn trong nhóm VN30”, tôi xin chân thành cảm ơn đến thầy Th.S Trần Mạnh Tường giảng viên bộ môn Mô phỏng ngẫu nhiên đã dạy dỗ, truyền đạt những kiến thức quý báu cho chúng tôi trong suốt thời gian học tập vừa qua, đồng thời thầy cũng đã gợi ý, hỗ trợ và hướng dẫn chúng tôi trong quá trình làm bài để có được một bài tiểu luận tốt nhất. Do vốn kiến thức còn nhiều hạn chế nên trong bài tiểu luận chắc chắn sẽ không tránh khỏi những thiếu sót. Rất mong nhận được sự nhận xét, ý kiến đóng góp, phê bình từ phía thầy để bài tiểu luận được hoàn thiện hơn.

2 ,PHẦN MỞ ĐẦU

2.1 ,Lý do chọn đề tài

Thị trường chứng khoán Việt Nam hiện đang là kênh đầu tư khá hấp dẫn và nhiều tiềm năng. Trong những năm gần đây, thị trường hoạt động cực kì sôi động và đã có những bước tiến vượt bậc. Hàng loạt các công ty chứng khoán ra đời, các nhà đầu tư trong và ngoài nước rót vốn ồ ạt, các chỉ số thị trường liên tục phá kỷ lục. Việc lựa chọn kênh đầu tư để sinh lời bằng việc đầu tư vào cổ phiếu đã được rất nhiều người lựa chọn hiện nay. Việc xây dựng một danh mục đầu tư cổ phiếu an toàn và mang lại lợi nhuận vẫn là vấn đề mà giới đầu tư quan tâm đến hàng đầu.

Với nhiều nhà đầu tư nhóm cổ phiếu VN30 là thuật ngữ quen thuộc, mô tả tập hợp các cổ phiếu dẫn đầu ngành, lĩnh vực và thị trường. Nhóm cổ phiếu VN30 là tập hợp 30 mã cổ phiếu đạt các tiêu chuẩn giá trị vốn hóa lớn, tính thanh khoản cao, tỷ lệ free-float thấp hơn 5%.Rổ VN30 được coi là nhóm cổ phiếu blue chip, có tính thanh khoản cao, giá trị vốn hóa lớn, thường được nhà đầu tư lựa chọn đầu tư vì có tính an toàn cao, biến động cổ phiếu thấp. Các cổ phiếu bên trong rổ VN30 cho thấy xu hướng thị trường đang nghiêng về lĩnh vực nào … Tạo nên sức hấp dẫn lớn với nhiều nhà đầu tư bởi khả năng tăng trưởng ổn định. Các cổ phiếu bên trong rổ VN30 cho thấy xu hướng thị trường đang nghiêng về lĩnh vực nào. Từ đó giúp nhà đầu tư đánh giá được tổng quan thị trường, lựa chọn cổ phiếu đầu tư trong lĩnh vực phù hợp.

Với những đặc điểm về giá trị vốn hóa và tính thanh khoản cao, có nên đầu tư cổ phiếu VN30 không là mối quan tâm của nhiều người. Thị trường chứng khoán có hàng nghìn mã cổ phiếu, việc lựa chọn mã cổ phiếu phù hợp với mục đích sinh lời không hề đơn giản. Vì vậy trong bài mô phỏng này, tác giả sẽ thực hiện “Mô phỏng danh mục đầu tư và tỷ suất sinh lợi của 6 cổ phiếu thuộc nhóm VN30”.

2.2 ,Đối tượng và mục tiêu nghiên cứu

Đề tài mô phỏng giá trị của danh mục đầu tư bao gồm 6 cổ phiếu lớn thuộc nhóm VN30 là ACB, FPT, GVR, NVL, SSI, VNM trong 10000 ngày kể từ ngày 30/06/2023 từ đó có thể mô phỏng được giá trị của danh mục đầu tư gồm 6 cổ phiếu trên với số lượng đầu tư cổ phiếu là 1000 cp mỗi mã.

ACB: là mã cổ phiếu của ngân hàng TMCP Á Châu, ACB là lã cổ phiếu thứ 10 của ngành ngân hàng có mặt trong rổ chỉ số VN30, mã cổ phiếu ACB chính thức được niêm yết trên Sở giao dịch chứng khoán Hồ Chí Minh (Ho Chi Minh Stock Exchange - Hose) từ ngày 09/12/2020 với giá tham chiếu 26.400 đồng/cp. 

FPT: là mã cổ phiếu Công ty Cổ phần FPT.Ngày 13/12/2006 mã cổ phiếu FPT được niêm trên trên sàn Hose. Mã cổ phiếu FPT là một trong những cổ phiếu đầu ngành công nghệ thông tin trên thị trường chứng khoán Việt Nam.

GVR: là mã cổ phiếu của Tập đoàn công nghiệp cao su Việt Nam. Lĩnh vực kinh doanh chính là sản xuất plastic và cao su tổng hợp. Tháng 2/2018, GVR tiến hành phát hành cổ phiếu lần đầu ra công chúng (IPO), cổ phiếu GVR nằm trong rổ VN30, tuy có tuổi đời gia nhập sàn chứng khoán thấp hơn những cổ phiếu khác trong VN30 nhưng vẫn là cổ phiếu thu hút được nhiều nhà đầu tư chứng khoán.

NVL: là mã cổ phiếu của CTCP Tập đoàn Đầu tư Địa ốc No Va (NovaLand), Tập đoàn Nova hoạt động trong lĩnh vực sản xuất kinh doanh thuốc thú y, thuốc thủy sản, xây biệt thự cho thuê nhưng thế mạnh, mũi nhọn là kinh doanh bất động sản. Ngày 28/12/2016 mã cổ phiếu NVL của Tập đoàn NovaLand chính thức được niêm yết trên sàn Hose và là một trong những mã cổ phiếu thuộc ngành bất động sản lớn trong rổ VN30.

SSI: là mã cổ phiếu của CTCP Chứng khoán SSI. SSI hoạt động trên các lĩnh vực dịch vụ tài chính lớn bao gồm Dịch vụ Chứng khoán Khách hàng Cá nhân, Quản lý quỹ đầu tư, Dịch vụ Ngân hàng đầu tư,…và là một trong những công ty chứng khoán lớn nhất Việt Nam được niêm yết trên sàn Hose và lọt vào danh sách VN30.

VNM: là mã cổ phiếu nổi tiếng được Công ty cổ phần Sữa Việt Nam (Vinamilk) phát hành. Nhiều năm nay, Vinamilk luôn giữ vị trí số 1 trong ngành sữa Việt Nam đặc biệt trong nhóm ngành tiêu dùng. VNM là một trong những mã cổ phiếu lớn được niêm yết từ khá lâu trên sàn Hose (ngày 19/01/2006) và là mã cổ phiếu có giá trị lớn trong nhóm VN30.

Tác giả sẽ mô phỏng ngẫu nhiên giá đóng cửa của các mã cổ phiếu trên trong vòng 10000 ngày tiếp theo kể từ ngày 30/06/2023 thông qua giá đóng cửa lịch sử của từng mã cổ phiếu từ ngày 01/03/2023 đến ngày 30/06/2023. Dữ liệu lịch sử của từng mã Cổ phiếu được tổng hợp từ nguồn investing.com (https://www.investing.com/)

2.3 ,Mô hình nghiên cứu

Để mô phỏng được tổng giá trị của danh mục đầu tư 6 cổ phiếu lớn thuộc nhóm VN30, tác giả xin đề xuất mô hình như sau:

    TGTDMĐT = 1000.ACB+1000.FPT+1000.GVR+1000.NVL+1000.SSI+1000.VNM

Trong đó:

Biến phụ thuộc:

TGTDMĐT: Tổng giá trị danh mục đầu tư 6 cổ phiếu thuộc nhóm VN30 (đơn vị: VNĐ)

Biến độc lập:

ACB: Giá đóng cửa cổ phiếu ACB (đơn vị: VNĐ)

FPT: Giá đóng cửa cổ phiếu FPT (đơn vị: VNĐ)

GVR: Giá đóng cửa cổ phiếu GVR (đơn vị: VNĐ)

NVL: Giá đóng cửa cổ phiếu NVL (đơn vị: VNĐ)

SSI: Giá đóng cửa cổ phiếu SSI (đơn vị: VNĐ)

VNM: Giá đóng cửa cổ phiếu VNM (đơn vị: VNĐ)

3 ,KẾT QUẢ NGHIÊN CỨU

3.1 Thống kê mô tả các biến

rm(list=ls()) # clear environment
setwd("C:/PTDLDT")
library(readxl)
## Warning: package 'readxl' was built under R version 4.2.3
library(xlsx)
data <- read.xlsx("dulieucp.xlsx", sheetIndex = 1)
str(data)
## 'data.frame':    121 obs. of  7 variables:
##  $ Date: chr  "01/03/2023" "01/04/2023" "01/05/2023" "01/06/2023" ...
##  $ ACB : num  22700 22650 22850 23150 23100 ...
##  $ FPT : num  80000 80000 80600 80300 80300 80400 80900 80700 80000 80800 ...
##  $ GVR : num  14600 14850 14900 14400 14400 ...
##  $ NVL : num  14650 14000 13700 13600 13850 ...
##  $ SSI : num  18900 19000 19300 18900 19000 18900 19300 19300 19200 19400 ...
##  $ VNM : num  78500 79300 81200 79800 80700 81000 79400 80000 80600 79400 ...
summary(data)
##      Date                ACB             FPT             GVR       
##  Length:121         Min.   :21400   Min.   :77500   Min.   :13950  
##  Class :character   1st Qu.:24000   1st Qu.:79400   1st Qu.:14800  
##  Mode  :character   Median :24550   Median :80700   Median :15500  
##                     Mean   :24157   Mean   :81295   Mean   :15974  
##                     3rd Qu.:25000   3rd Qu.:83100   3rd Qu.:16700  
##                     Max.   :26350   Max.   :87300   Max.   :19600  
##       NVL             SSI             VNM       
##  Min.   :10250   Min.   :18250   Min.   :65500  
##  1st Qu.:12700   1st Qu.:19650   1st Qu.:69200  
##  Median :13600   Median :21200   Median :74400  
##  Mean   :13307   Mean   :21584   Mean   :73100  
##  3rd Qu.:14300   3rd Qu.:22850   3rd Qu.:76400  
##  Max.   :15600   Max.   :26600   Max.   :81300
sd(data$ACB)
## [1] 1269.64

Biến ACB có giá trị trung bình là 24157 tức giá đóng cửa trung bình của cổ phiếu ACB trong giai đoạn 01/03/2023 đến 30/06/2023 là 24.157 VNĐ. Bên cạnh đó giá trị cao nhất của cổ phiếu ACB là 26.350 VNĐ và thấp nhất là 21400 VNĐ, độ lệch chuẩn của mã ACB là xấp xỉ 1270 VNĐ.

sd(data$FPT)
## [1] 2358.737

Biến FPT có giá trị trung bình là 81295 tức giá đóng cửa trung bình của cổ phiếu FPT trong giai đoạn 01/03/2023 đến 30/06/2023 là 81.295 VNĐ. Bên cạnh đó giá trị cao nhất của cổ phiếu FPT là 87.300 VNĐ và thấp nhất là 77.500 VNĐ, độ lệch chuẩn của mã ACB là xấp xỉ 2359 VNĐ.

sd(data$GVR)
## [1] 1561.824

Biến GVR có giá trị trung bình là 15974 tức giá đóng cửa trung bình của cổ phiếu GVR trong giai đoạn 01/03/2023 đến 30/06/2023 là 15.974 VNĐ. Bên cạnh đó giá trị cao nhất của cổ phiếu GVR là 19.600 VNĐ và thấp nhất là 13.950 VNĐ, độ lệch chuẩn của mã GVR là xấp xỉ 1562 VNĐ.

sd(data$NVL)
## [1] 1373.665

Biến NVL có giá trị trung bình là 13307 tức giá đóng cửa trung bình của cổ phiếu NVL trong giai đoạn 01/03/2023 đến 30/06/2023 là 13.307 VNĐ. Bên cạnh đó giá trị cao nhất của cổ phiếu GVR là 15.600 VNĐ và thấp nhất là 10.250 VNĐ, độ lệch chuẩn của mã GVR là xấp xỉ 1374 VNĐ.

sd(data$SSI)
## [1] 2275.744

Biến SSI có giá trị trung bình là 21584 tức giá đóng cửa trung bình của cổ phiếu SSI trong giai đoạn 01/03/2023 đến 30/06/2023 là 21.584 VNĐ. Bên cạnh đó giá trị cao nhất của cổ phiếu SSI là 26.600 VNĐ và thấp nhất là 18.250 VNĐ, độ lệch chuẩn của mã SSI là xấp xỉ 2276 VNĐ.

sd(data$VNM)
## [1] 4505.238

Biến VNM có giá trị trung bình là 73100 tức giá đóng cửa trung bình của cổ phiếu VNM trong giai đoạn 01/03/2023 đến 30/06/2023 là 73.100 VNĐ. Bên cạnh đó giá trị cao nhất của cổ phiếu VNM là 81.300 VNĐ và thấp nhất là 65.500 VNĐ, độ lệch chuẩn của mã VNM là xấp xỉ 4505 VNĐ. Chứng tỏ rằng trong thời gian này biến động giá cổ phiếu VNM là khá đáng kể.

3.2 Xác định phân phối các biến đầu vào

3.2.1 Mã chứng khoán ACB

Đồ thị Histogram:

hist(data$ACB)

Đồ thị QQ plot:

library(stats)
qqnorm(data$ACB)
qqline(data$ACB)

Kiểm định Shapiro-Wilk Test:

Với giả thuyết H0: Dãy số liệu có phân phối Chuẩn

shapiro.test(data$ACB)
## 
##  Shapiro-Wilk normality test
## 
## data:  data$ACB
## W = 0.83704, p-value = 3.103e-10

Kết quả cho thấy giá trị tới hạn P_value = 3.103e-10 < 5% nên chưa có cơ sở để chấp nhận giả thuyết Ho tức giá cổ phiếu ACB không có tuân theo phân phối chuẩn.

Kiểm định phân phối đều:

Giả thuyết Ho: Dữ liệu tuân theo quy luật phân phối đều

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

Kết quả trên cho thấy giá trị tới hạn P_value = 2.2e-16 < 5% nên chưa có cơ sở chấp nhận giả thuyết Ho vậy giá cổ phiếu ACB không tuân theo quy luật phân phối đều

Thông qua các kiểm định Shapiro-Wilk và Kolmogorov-Smirnov, tác giả vẫn chưa thể xác định được phân phối cụ thể của biến ACB nên tác giả tiến hành mô phỏng biến ACB theo chuyển động Brown:

Chuyển động Brown: Tính tỷ suất sinh lời của giá

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
data <- data %>%
  mutate(r_acb = (data$ACB - lag(data$ACB))/lag(data$ACB)) %>%
  mutate(r_fpt = (data$FPT - lag(data$FPT))/lag(data$FPT)) %>%
  mutate(r_gvr = (data$GVR - lag(data$GVR))/lag(data$GVR)) %>% 
  mutate(r_nvl = (data$NVL - lag(data$NVL))/lag(data$NVL)) %>%
  mutate(r_ssi = (data$SSI - lag(data$SSI))/lag(data$SSI)) %>%
  mutate(r_vnm = (data$VNM - lag(data$VNM))/lag(data$VNM))

#Loại bỏ hàng có NA
data <- na.omit(data)
data
##           Date   ACB   FPT   GVR   NVL   SSI   VNM        r_acb        r_fpt
## 2   01/04/2023 22650 80000 14850 14000 19000 79300 -0.002202643  0.000000000
## 3   01/05/2023 22850 80600 14900 13700 19300 81200  0.008830022  0.007500000
## 4   01/06/2023 23150 80300 14400 13600 18900 79800  0.013129103 -0.003722084
## 5   01/09/2023 23100 80300 14400 13850 19000 80700 -0.002159827  0.000000000
## 6   01/10/2023 23450 80400 14400 13950 18900 81000  0.015151515  0.001245330
## 7   01/11/2023 24200 80900 14500 14900 19300 79400  0.031982942  0.006218905
## 8   01/12/2023 24500 80700 14800 14950 19300 80000  0.012396694 -0.002472188
## 9   01/13/2023 24150 80000 14550 14300 19200 80600 -0.014285714 -0.008674102
## 10  01/16/2023 25000 80800 15200 13650 19400 79400  0.035196687  0.010000000
## 11  01/17/2023 25300 82000 15750 14000 20400 80900  0.012000000  0.014851485
## 12  01/18/2023 25500 83400 16000 14150 20550 81300  0.007905138  0.017073171
## 13  01/19/2023 26000 83900 16300 14050 21200 81300  0.019607843  0.005995204
## 14  01/27/2023 26350 84000 16850 13950 20950 80000  0.013461538  0.001191895
## 15  01/30/2023 25400 83700 16500 13950 21000 79400 -0.036053131 -0.003571429
## 16  01/31/2023 26050 83500 16700 14200 21600 77100  0.025590551 -0.002389486
## 17  02/01/2023 25200 82000 15550 14550 20150 77200 -0.032629559 -0.017964072
## 18  02/02/2023 25000 81900 15250 14200 20150 76700 -0.007936508 -0.001219512
## 19  02/03/2023 24500 80100 15400 14950 19750 76000 -0.020000000 -0.021978022
## 20  02/06/2023 24900 80500 15600 15400 20000 77400  0.016326531  0.004993758
## 21  02/07/2023 24600 80700 14800 14600 19050 76100 -0.012048193  0.002484472
## 22  02/08/2023 24650 81200 14750 14300 19500 75800  0.002032520  0.006195787
## 23  02/09/2023 24500 80700 14950 14150 19350 75000 -0.006085193 -0.006157635
## 24  02/10/2023 24200 80700 14650 13750 19000 75900 -0.012244898  0.000000000
## 25  02/13/2023 23900 80700 14000 12800 18500 75300 -0.012396694  0.000000000
## 26  02/14/2023 23850 80800 14150 11950 18900 74700 -0.002092050  0.001239157
## 27  02/15/2023 24550 81600 14500 11150 19100 76000  0.029350105  0.009900990
## 28  02/16/2023 24800 81600 14750 11500 19500 76500  0.010183299  0.000000000
## 29  02/17/2023 24800 81600 14700 11650 19450 76000  0.000000000  0.000000000
## 30  02/20/2023 25800 82800 15450 12450 20750 77500  0.040322581  0.014705882
## 31  02/21/2023 25500 82800 15350 12850 20450 77200 -0.011627907  0.000000000
## 32  02/22/2023 24850 81800 14550 12000 19300 75500 -0.025490196 -0.012077295
## 33  02/23/2023 25400 81400 14800 11800 19700 75700  0.022132797 -0.004889976
## 34  02/24/2023 24600 80800 14300 11400 19000 74700 -0.031496063 -0.007371007
## 35  02/27/2023 24250 80300 13950 10750 18250 75200 -0.014227642 -0.006188119
## 36  02/28/2023 24400 80500 13950 10600 18250 75500  0.006185567  0.002490660
## 37  03/01/2023 25150 80500 14400 10250 18950 76900  0.030737705  0.000000000
## 38  03/02/2023 25050 80000 14250 10350 18650 76500 -0.003976143 -0.006211180
## 39  03/03/2023 24500 78500 14100 10350 18450 76000 -0.021956088 -0.018750000
## 40  03/06/2023 24300 78200 14200 11050 18750 75000 -0.008163265 -0.003821656
## 41  03/07/2023 24500 78800 14400 10850 19400 75800  0.008230453  0.007672634
## 42  03/08/2023 25000 79500 14500 11050 19800 76500  0.020408163  0.008883249
## 43  03/09/2023 25350 80600 15150 10950 19800 76500  0.014000000  0.013836478
## 44  03/10/2023 24900 79500 15000 10650 19800 76900 -0.017751479 -0.013647643
## 45  03/13/2023 24500 78900 14950 11000 19650 76900 -0.016064257 -0.007547170
## 46  03/14/2023 24050 78700 14300 10700 19050 76600 -0.018367347 -0.002534854
## 47  03/15/2023 24800 80500 15200 11350 20350 77100  0.031185031  0.022871665
## 48  03/16/2023 24400 79200 14850 11150 20150 76400 -0.016129032 -0.016149068
## 49  03/17/2023 24350 79000 14900 11500 20300 74500 -0.002049180 -0.002525253
## 50  03/20/2023 24000 77600 14350 11100 19500 74300 -0.014373717 -0.017721519
## 51  03/21/2023 24200 78100 14450 11050 20000 74400  0.008333333  0.006443299
## 52  03/22/2023 24150 78500 14500 11100 19850 74400 -0.002066116  0.005121639
## 53  03/23/2023 24500 78000 14500 11150 20350 75300  0.014492754 -0.006369427
## 54  03/24/2023 24550 78600 14800 11900 20450 75000  0.002040816  0.007692308
## 55  03/27/2023 24450 79100 14900 12700 21000 74600 -0.004073320  0.006361323
## 56  03/28/2023 24450 79200 14800 12600 20800 74400  0.000000000  0.001264223
## 57  03/29/2023 24400 79000 14750 12550 21050 74900 -0.002044990 -0.002525253
## 58  03/30/2023 24600 79100 14700 12800 20950 75000  0.008196721  0.001265823
## 59  03/31/2023 25000 79100 15500 12700 21500 74400  0.016260163  0.000000000
## 60  04/03/2023 25250 80900 15950 12850 22000 74400  0.010000000  0.022756005
## 61  04/04/2023 25150 80500 15950 12750 22500 74200 -0.003960396 -0.004944376
## 62  04/05/2023 25300 80600 16200 12850 22500 74500  0.005964215  0.001242236
## 63  04/06/2023 24900 80300 15600 13250 21850 74300 -0.015810277 -0.003722084
## 64  04/07/2023 25050 80500 15900 13400 22500 74700  0.006024096  0.002490660
## 65  04/10/2023 25000 80300 15900 13300 22400 74400 -0.001996008 -0.002484472
## 66  04/11/2023 24950 80300 16250 14200 22600 74400 -0.002000000  0.000000000
## 67  04/12/2023 24850 80300 16350 15050 22000 74300 -0.004008016  0.000000000
## 68  04/13/2023 24950 79600 15950 14500 21750 73500  0.004024145 -0.008717310
## 69  04/14/2023 24950 79600 15300 14200 21200 72800  0.000000000  0.000000000
## 70  04/17/2023 25000 79600 15400 14800 21350 71700  0.002004008  0.000000000
## 71  04/18/2023 24750 79400 15500 14850 21750 73000 -0.010000000 -0.002512563
## 72  04/19/2023 24400 79300 15050 14550 21300 72000 -0.014141414 -0.001259446
## 73  04/20/2023 24250 79400 15150 14400 21100 71900 -0.006147541  0.001261034
## 74  04/21/2023 24250 79300 15100 13600 21650 70900  0.000000000 -0.001259446
## 75  04/24/2023 24200 79100 15300 14050 21500 70500 -0.002061856 -0.002522068
## 76  04/25/2023 24150 78400 15100 13750 21100 69900 -0.002066116 -0.008849558
## 77  04/26/2023 24150 78300 15350 13950 21350 71000  0.000000000 -0.001275510
## 78  04/27/2023 24150 78300 15450 14100 21150 69500  0.000000000  0.000000000
## 79  04/28/2023 24200 77500 15550 14300 21550 70000  0.002070393 -0.010217114
## 80  05/04/2023 24700 78500 15700 13550 21750 68600  0.020661157  0.012903226
## 81  05/05/2023 24650 78400 15500 13550 21450 68800 -0.002024291 -0.001273885
## 82  05/08/2023 24950 78500 16200 12950 22300 70400  0.012170385  0.001275510
## 83  05/09/2023 24900 78900 16150 13000 22250 70700 -0.002004008  0.005095541
## 84  05/10/2023 24900 79000 16850 13300 22500 70500  0.000000000  0.001267427
## 85  05/11/2023 24900 79100 16700 13800 22400 70000  0.000000000  0.001265823
## 86  05/12/2023 25000 80500 16800 13700 23250 69600  0.004016064  0.017699115
## 87  05/15/2023 25000 81000 16150 13500 22900 69000  0.000000000  0.006211180
## 88  05/16/2023 25000 81500 16000 13650 22900 69700  0.000000000  0.006172840
## 89  05/17/2023 24900 81500 15850 13300 22450 69000 -0.004000000  0.000000000
## 90  05/18/2023 25000 82900 15850 13300 22800 69200  0.004016064  0.017177914
## 91  05/19/2023 24950 82800 16250 13200 22900 68600 -0.002000000 -0.001206273
## 92  05/22/2023 25050 82500 16500 13350 22900 68200  0.004008016 -0.003623188
## 93  05/23/2023 25350 82000 16400 13200 22850 67000  0.011976048 -0.006060606
## 94  05/24/2023 25150 81300 16100 13250 22700 66300 -0.007889546 -0.008536585
## 95  05/25/2023 25100 83200 16750 13200 22500 67100 -0.001988072  0.023370234
## 96  05/26/2023 25000 83100 17200 12950 22550 67100 -0.003984064 -0.001201923
## 97  05/29/2023 25150 83100 18200 13050 23400 67100  0.006000000  0.000000000
## 98  05/30/2023 25200 84000 18400 13350 23350 66500  0.001988072  0.010830325
## 99  05/31/2023 25400 84100 18200 13500 23150 66100  0.007936508  0.001190476
## 100 06/01/2023 21400 83500 18800 13900 23450 66100 -0.157480315 -0.007134364
## 101 06/02/2023 21800 83800 18900 13850 24100 65900  0.018691589  0.003592814
## 102 06/05/2023 21750 85000 18350 13500 24100 66500 -0.002293578  0.014319809
## 103 06/06/2023 21800 85300 18750 13600 25150 66400  0.002298851  0.003529412
## 104 06/07/2023 21850 85000 18550 14550 25100 66200  0.002293578 -0.003516999
## 105 06/08/2023 21600 83600 18000 14200 24300 65500 -0.011441648 -0.016470588
## 106 06/09/2023 21550 84600 18050 14600 25250 65800 -0.002314815  0.011961722
## 107 06/12/2023 21450 84900 18150 14600 25350 67900 -0.004640371  0.003546099
## 108 06/13/2023 21600 84400 18400 15600 25350 67600  0.006993007 -0.005889282
## 109 06/14/2023 21650 84200 17900 15200 25400 67100  0.002314815 -0.002369668
## 110 06/15/2023 21700 84100 18050 15250 25700 66300  0.002309469 -0.001187648
## 111 06/16/2023 21800 84500 17800 14900 26100 66100  0.004608295  0.004756243
## 112 06/19/2023 21650 84700 17900 14000 26400 65800 -0.006880734  0.002366864
## 113 06/20/2023 21650 85500 18800 14500 25700 65500  0.000000000  0.009445100
## 114 06/21/2023 21700 85800 19500 14500 26000 66300  0.002309469  0.003508772
## 115 06/22/2023 21650 85500 19350 14650 26100 66900 -0.002304147 -0.003496503
## 116 06/23/2023 21900 85100 19000 14500 26000 69100  0.011547344 -0.004678363
## 117 06/26/2023 22250 85800 19600 14900 25800 70600  0.015981735  0.008225617
## 118 06/27/2023 22200 87300 19600 15000 26600 70500 -0.002247191  0.017482517
## 119 06/28/2023 22300 87000 19300 15600 26550 70600  0.004504505 -0.003436426
## 120 06/29/2023 21900 86500 19050 15000 25450 71900 -0.017937220 -0.005747126
## 121 06/30/2023 22050 86000 19400 14850 25800 71000  0.006849315 -0.005780347
##            r_gvr        r_nvl        r_ssi        r_vnm
## 2    0.017123288 -0.044368601  0.005291005  0.010191083
## 3    0.003367003 -0.021428571  0.015789474  0.023959647
## 4   -0.033557047 -0.007299270 -0.020725389 -0.017241379
## 5    0.000000000  0.018382353  0.005291005  0.011278195
## 6    0.000000000  0.007220217 -0.005263158  0.003717472
## 7    0.006944444  0.068100358  0.021164021 -0.019753086
## 8    0.020689655  0.003355705  0.000000000  0.007556675
## 9   -0.016891892 -0.043478261 -0.005181347  0.007500000
## 10   0.044673540 -0.045454545  0.010416667 -0.014888337
## 11   0.036184211  0.025641026  0.051546392  0.018891688
## 12   0.015873016  0.010714286  0.007352941  0.004944376
## 13   0.018750000 -0.007067138  0.031630170  0.000000000
## 14   0.033742331 -0.007117438 -0.011792453 -0.015990160
## 15  -0.020771513  0.000000000  0.002386635 -0.007500000
## 16   0.012121212  0.017921147  0.028571429 -0.028967254
## 17  -0.068862275  0.024647887 -0.067129630  0.001297017
## 18  -0.019292605 -0.024054983  0.000000000 -0.006476684
## 19   0.009836066  0.052816901 -0.019851117 -0.009126467
## 20   0.012987013  0.030100334  0.012658228  0.018421053
## 21  -0.051282051 -0.051948052 -0.047500000 -0.016795866
## 22  -0.003378378 -0.020547945  0.023622047 -0.003942181
## 23   0.013559322 -0.010489510 -0.007692308 -0.010554090
## 24  -0.020066890 -0.028268551 -0.018087855  0.012000000
## 25  -0.044368601 -0.069090909 -0.026315789 -0.007905138
## 26   0.010714286 -0.066406250  0.021621622 -0.007968127
## 27   0.024734982 -0.066945607  0.010582011  0.017402945
## 28   0.017241379  0.031390135  0.020942408  0.006578947
## 29  -0.003389831  0.013043478 -0.002564103 -0.006535948
## 30   0.051020408  0.068669528  0.066838046  0.019736842
## 31  -0.006472492  0.032128514 -0.014457831 -0.003870968
## 32  -0.052117264 -0.066147860 -0.056234719 -0.022020725
## 33   0.017182131 -0.016666667  0.020725389  0.002649007
## 34  -0.033783784 -0.033898305 -0.035532995 -0.013210040
## 35  -0.024475524 -0.057017544 -0.039473684  0.006693440
## 36   0.000000000 -0.013953488  0.000000000  0.003989362
## 37   0.032258065 -0.033018868  0.038356164  0.018543046
## 38  -0.010416667  0.009756098 -0.015831135 -0.005201560
## 39  -0.010526316  0.000000000 -0.010723861 -0.006535948
## 40   0.007092199  0.067632850  0.016260163 -0.013157895
## 41   0.014084507 -0.018099548  0.034666667  0.010666667
## 42   0.006944444  0.018433180  0.020618557  0.009234828
## 43   0.044827586 -0.009049774  0.000000000  0.000000000
## 44  -0.009900990 -0.027397260  0.000000000  0.005228758
## 45  -0.003333333  0.032863850 -0.007575758  0.000000000
## 46  -0.043478261 -0.027272727 -0.030534351 -0.003901170
## 47   0.062937063  0.060747664  0.068241470  0.006527415
## 48  -0.023026316 -0.017621145 -0.009828010 -0.009079118
## 49   0.003367003  0.031390135  0.007444169 -0.024869110
## 50  -0.036912752 -0.034782609 -0.039408867 -0.002684564
## 51   0.006968641 -0.004504505  0.025641026  0.001345895
## 52   0.003460208  0.004524887 -0.007500000  0.000000000
## 53   0.000000000  0.004504505  0.025188917  0.012096774
## 54   0.020689655  0.067264574  0.004914005 -0.003984064
## 55   0.006756757  0.067226891  0.026894866 -0.005333333
## 56  -0.006711409 -0.007874016 -0.009523810 -0.002680965
## 57  -0.003378378 -0.003968254  0.012019231  0.006720430
## 58  -0.003389831  0.019920319 -0.004750594  0.001335113
## 59   0.054421769 -0.007812500  0.026252983 -0.008000000
## 60   0.029032258  0.011811024  0.023255814  0.000000000
## 61   0.000000000 -0.007782101  0.022727273 -0.002688172
## 62   0.015673981  0.007843137  0.000000000  0.004043127
## 63  -0.037037037  0.031128405 -0.028888889 -0.002684564
## 64   0.019230769  0.011320755  0.029748284  0.005383580
## 65   0.000000000 -0.007462687 -0.004444444 -0.004016064
## 66   0.022012579  0.067669173  0.008928571  0.000000000
## 67   0.006153846  0.059859155 -0.026548673 -0.001344086
## 68  -0.024464832 -0.036544850 -0.011363636 -0.010767160
## 69  -0.040752351 -0.020689655 -0.025287356 -0.009523810
## 70   0.006535948  0.042253521  0.007075472 -0.015109890
## 71   0.006493506  0.003378378  0.018735363  0.018131102
## 72  -0.029032258 -0.020202020 -0.020689655 -0.013698630
## 73   0.006644518 -0.010309278 -0.009389671 -0.001388889
## 74  -0.003300330 -0.055555556  0.026066351 -0.013908206
## 75   0.013245033  0.033088235 -0.006928406 -0.005641749
## 76  -0.013071895 -0.021352313 -0.018604651 -0.008510638
## 77   0.016556291  0.014545455  0.011848341  0.015736767
## 78   0.006514658  0.010752688 -0.009367681 -0.021126761
## 79   0.006472492  0.014184397  0.018912530  0.007194245
## 80   0.009646302 -0.052447552  0.009280742 -0.020000000
## 81  -0.012738854  0.000000000 -0.013793103  0.002915452
## 82   0.045161290 -0.044280443  0.039627040  0.023255814
## 83  -0.003086420  0.003861004 -0.002242152  0.004261364
## 84   0.043343653  0.023076923  0.011235955 -0.002828854
## 85  -0.008902077  0.037593985 -0.004444444 -0.007092199
## 86   0.005988024 -0.007246377  0.037946429 -0.005714286
## 87  -0.038690476 -0.014598540 -0.015053763 -0.008620690
## 88  -0.009287926  0.011111111  0.000000000  0.010144928
## 89  -0.009375000 -0.025641026 -0.019650655 -0.010043042
## 90   0.000000000  0.000000000  0.015590200  0.002898551
## 91   0.025236593 -0.007518797  0.004385965 -0.008670520
## 92   0.015384615  0.011363636  0.000000000 -0.005830904
## 93  -0.006060606 -0.011235955 -0.002183406 -0.017595308
## 94  -0.018292683  0.003787879 -0.006564551 -0.010447761
## 95   0.040372671 -0.003773585 -0.008810573  0.012066365
## 96   0.026865672 -0.018939394  0.002222222  0.000000000
## 97   0.058139535  0.007722008  0.037694013  0.000000000
## 98   0.010989011  0.022988506 -0.002136752 -0.008941878
## 99  -0.010869565  0.011235955 -0.008565310 -0.006015038
## 100  0.032967033  0.029629630  0.012958963  0.000000000
## 101  0.005319149 -0.003597122  0.027718550 -0.003025719
## 102 -0.029100529 -0.025270758  0.000000000  0.009104704
## 103  0.021798365  0.007407407  0.043568465 -0.001503759
## 104 -0.010666667  0.069852941 -0.001988072 -0.003012048
## 105 -0.029649596 -0.024054983 -0.031872510 -0.010574018
## 106  0.002777778  0.028169014  0.039094650  0.004580153
## 107  0.005540166  0.000000000  0.003960396  0.031914894
## 108  0.013774105  0.068493151  0.000000000 -0.004418262
## 109 -0.027173913 -0.025641026  0.001972387 -0.007396450
## 110  0.008379888  0.003289474  0.011811024 -0.011922504
## 111 -0.013850416 -0.022950820  0.015564202 -0.003016591
## 112  0.005617978 -0.060402685  0.011494253 -0.004538578
## 113  0.050279330  0.035714286 -0.026515152 -0.004559271
## 114  0.037234043  0.000000000  0.011673152  0.012213740
## 115 -0.007692308  0.010344828  0.003846154  0.009049774
## 116 -0.018087855 -0.010238908 -0.003831418  0.032884903
## 117  0.031578947  0.027586207 -0.007692308  0.021707670
## 118  0.000000000  0.006711409  0.031007752 -0.001416431
## 119 -0.015306122  0.040000000 -0.001879699  0.001418440
## 120 -0.012953368 -0.038461538 -0.041431262  0.018413598
## 121  0.018372703 -0.010000000  0.013752456 -0.012517385
set.seed(100)

gbm.f = function(n,S0,mu,sigma){
  t = 1
  t.s = seq(0,t,length = n)
  dt = t/n
  Bt = sqrt(t)*cumsum(rnorm((n),0,1))
  St = S0*exp((mu-sigma^2/2)*t.s + sigma*Bt)
  St # Kết quả của GBM
}
n <- 10000
S0 <- data$ACB[1]
mu <- (1/(n*(1/n)))*sum(data$r_acb) #tính lợi nhuận kỳ vọng giá
sigma <- sqrt((sum((data$r_acb-mu)^2))*(1/(n-1)*(1/n))) #tính độ biến động giá
ACB <- gbm.f(n,S0,mu,sigma)
plot(ACB, type = 'l', col = 'blue', main = "Giá cổ phiếu ACB", ylab = "VNĐ", xlab = "Ngày")

3.2.2 Mã chứng khoán FPT

Đồ thị Histogram:

hist(data$FPT)

Đồ thị QQ plot:

library(stats)
qqnorm(data$FPT)
qqline(data$FPT)

Kiểm định Shapiro-Wilk Test:

Với giả thuyết H0: Dãy số liệu có phân phối Chuẩn

shapiro.test(data$FPT)
## 
##  Shapiro-Wilk normality test
## 
## data:  data$FPT
## W = 0.94185, p-value = 5.721e-05

Kết quả cho thấy giá trị tới hạn P_value = 4.646e-05 < 5% nên chưa có cơ sở để chấp nhận giả thuyết Ho tức giá cổ phiếu FPT không có tuân theo phân phối chuẩn.

Kiểm định phân phối đều:

Giả thuyết Ho: Dữ liệu tuân theo quy luật phân phối đều

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

Kết quả trên cho thấy giá trị tới hạn P_value = 2.2e-16 < 5% nên chưa có cơ sở chấp nhận giả thuyết Ho vậy giá cổ phiếu FPT không tuân theo quy luật phân phối đều

Thông qua các kiểm định Shapiro-Wilk và Kolmogorov-Smirnov, tác giả vẫn chưa thể xác định được phân phối cụ thể của biến FPT nên tác giả tiến hành mô phỏng biến FPT theo chuyển động Brown:

Chuyển động Brown:

set.seed(100)

gbm.f = function(n,S0,mu,sigma){
  t = 1
  t.s = seq(0,t,length = n)
  dt = t/n
  Bt = sqrt(t)*cumsum(rnorm((n),0,1))
  St = S0*exp((mu-sigma^2/2)*t.s + sigma*Bt)
  St # Kết quả của GBM
}
n <- 10000
S0 <- data$FPT[1]
mu <- (1/(n*(1/n)))*sum(data$r_fpt) #tính lợi nhuận kỳ vọng giá
sigma <- sqrt((sum((data$r_fpt-mu)^2))*(1/(n-1)*(1/n))) #tính độ biến động giá
FPT <- gbm.f(n,S0,mu,sigma)
plot(FPT, type = 'l', col = 'blue', main = "Giá cổ phiếu FPT", ylab = "VNĐ", xlab = "Ngày")

3.2.3 Mã chứng khoán GVR

Đồ thị Histogram:

hist(data$GVR)

Đồ thị QQ plot:

library(stats)
qqnorm(data$GVR)
qqline(data$GVR)

Kiểm định Shapiro-Wilk Test:

Với giả thuyết H0: Dãy số liệu có phân phối Chuẩn

shapiro.test(data$GVR)
## 
##  Shapiro-Wilk normality test
## 
## data:  data$GVR
## W = 0.88969, p-value = 6.033e-08

Kết quả cho thấy giá trị tới hạn P_value = 4.452e-08 < 5% nên chưa có cơ sở để chấp nhận giả thuyết Ho tức giá cổ phiếu GVR không có tuân theo phân phối chuẩn.

Kiểm định phân phối đều:

Giả thuyết Ho: Dữ liệu tuân theo quy luật phân phối đều

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

Kết quả trên cho thấy giá trị tới hạn P_value = 2.2e-16 < 5% nên chưa có cơ sở chấp nhận giả thuyết Ho vậy giá cổ phiếu GVR không tuân theo quy luật phân phối đều

Thông qua các kiểm định Shapiro-Wilk và Kolmogorov-Smirnov, tác giả vẫn chưa thể xác định được phân phối cụ thể của biến GVR nên tác giả tiến hành mô phỏng biến GVR theo chuyển động Brown:

Chuyển động Brown:

set.seed(100)

gbm.f = function(n,S0,mu,sigma){
  t = 1
  t.s = seq(0,t,length = n)
  dt = t/n
  Bt = sqrt(t)*cumsum(rnorm((n),0,1))
  St = S0*exp((mu-sigma^2/2)*t.s + sigma*Bt)
  St # Kết quả của GBM
}
n <- 10000
S0 <- data$GVR[1]
mu <- (1/(n*(1/n)))*sum(data$r_gvr) #tính lợi nhuận kỳ vọng giá
sigma <- sqrt((sum((data$r_gvr-mu)^2))*(1/(n-1)*(1/n))) #tính độ biến động giá
GVR <- gbm.f(n,S0,mu,sigma)
plot(GVR, type = 'l', col = 'blue', main = "Giá cổ phiếu GVR", ylab = "VNĐ", xlab = "Ngày")

3.2.4 Mã chứng khoán NVL

Đồ thị Histogram:

hist(data$NVL)

  Đồ thị QQ plot:
library(stats)
qqnorm(data$NVL)
qqline(data$NVL)

Kiểm định Shapiro-Wilk Test:

Với giả thuyết H0: Dãy số liệu có phân phối Chuẩn

shapiro.test(data$NVL)
## 
##  Shapiro-Wilk normality test
## 
## data:  data$NVL
## W = 0.9339, p-value = 1.698e-05

Kết quả cho thấy giá trị tới hạn P_value = 1.305e-05 < 5% nên chưa có cơ sở để chấp nhận giả thuyết Ho tức giá cổ phiếu NVL không có tuân theo phân phối chuẩn.

Kiểm định phân phối đều:

Giả thuyết Ho: Dữ liệu tuân theo quy luật phân phối đều

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

Kết quả trên cho thấy giá trị tới hạn P_value = 2.2e-16 < 5% nên chưa có cơ sở chấp nhận giả thuyết Ho vậy giá cổ phiếu NVL không tuân theo quy luật phân phối đều

Thông qua các kiểm định Shapiro-Wilk và Kolmogorov-Smirnov, tác giả vẫn chưa thể xác định được phân phối cụ thể của biến NVL nên tác giả tiến hành mô phỏng biến NVL theo chuyển động Brown:

Chuyển động Brown:

set.seed(100)

gbm.f = function(n,S0,mu,sigma){
  t = 1
  t.s = seq(0,t,length = n)
  dt = t/n
  Bt = sqrt(t)*cumsum(rnorm((n),0,1))
  St = S0*exp((mu-sigma^2/2)*t.s + sigma*Bt)
  St # Kết quả của GBM
}
n <- 10000
S0 <- data$GVR[1]
mu <- (1/(n*(1/n)))*sum(data$r_nvl) #tính lợi nhuận kỳ vọng giá
sigma <- sqrt((sum((data$r_nvl-mu)^2))*(1/(n-1)*(1/n))) #tính độ biến động giá
NVL <- gbm.f(n,S0,mu,sigma)
plot(NVL, type = 'l', col = 'blue', main = "Giá cổ phiếu NVL", ylab = "VNĐ", xlab = "Ngày")

3.2.5 Mã chứng khoán SSI

Đồ thị Histogram:

hist(data$SSI)

Đồ thị QQ plot:

library(stats)
qqnorm(data$SSI)
qqline(data$SSI)

Kiểm định Shapiro-Wilk Test:

Với giả thuyết H0: Dãy số liệu có phân phối Chuẩn

shapiro.test(data$SSI)
## 
##  Shapiro-Wilk normality test
## 
## data:  data$SSI
## W = 0.93119, p-value = 1.143e-05

Kết quả cho thấy giá trị tới hạn P_value = 8.555e-06 < 5% nên chưa có cơ sở để chấp nhận giả thuyết Ho tức giá cổ phiếu SSI không có tuân theo phân phối chuẩn.

Kiểm định phân phối đều:

Giả thuyết Ho: Dữ liệu tuân theo quy luật phân phối đều

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

Kết quả trên cho thấy giá trị tới hạn P_value = 2.2e-16 < 5% nên chưa có cơ sở chấp nhận giả thuyết Ho vậy giá cổ phiếu SSI không tuân theo quy luật phân phối đều

Thông qua các kiểm định Shapiro-Wilk và Kolmogorov-Smirnov, tác giả vẫn chưa thể xác định được phân phối cụ thể của biến SSI nên tác giả tiến hành mô phỏng biến SSI theo chuyển động Brown:

Chuyển động Brown:

set.seed(100)

gbm.f = function(n,S0,mu,sigma){
  t = 1
  t.s = seq(0,t,length = n)
  dt = t/n
  Bt = sqrt(t)*cumsum(rnorm((n),0,1))
  St = S0*exp((mu-sigma^2/2)*t.s + sigma*Bt)
  St # Kết quả của GBM
}
n <- 10000
S0 <- data$SSI[1]
mu <- (1/(n*(1/n)))*sum(data$r_ssi) #tính lợi nhuận kỳ vọng giá
sigma <- sqrt((sum((data$r_ssi-mu)^2))*(1/(n-1)*(1/n))) #tính độ biến động giá
SSI <- gbm.f(n,S0,mu,sigma)
plot(SSI, type = 'l', col = 'blue', main = "Giá cổ phiếu SSI", ylab = "VNĐ", xlab = "Ngày")

3.2.6 Mã chứng khoán VNM

Đồ thị Histogram:

hist(data$VNM)

Đồ thị QQ plot:

library(stats)
qqnorm(data$VNM)
qqline(data$VNM)

Kiểm định Shapiro-Wilk Test:

Với giả thuyết H0: Dãy số liệu có phân phối Chuẩn

shapiro.test(data$VNM)
## 
##  Shapiro-Wilk normality test
## 
## data:  data$VNM
## W = 0.94726, p-value = 0.0001368

Kết quả cho thấy giá trị tới hạn P_value = 0.000133 < 5% nên chưa có cơ sở để chấp nhận giả thuyết Ho tức giá cổ phiếu VNM không có tuân theo phân phối chuẩn.

Kiểm định phân phối đều:

Giả thuyết Ho: Dữ liệu tuân theo quy luật phân phối đều

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

Kết quả trên cho thấy giá trị tới hạn P_value = 2.2e-16 < 5% nên chưa có cơ sở chấp nhận giả thuyết Ho vậy giá cổ phiếu VNM không tuân theo quy luật phân phối đều.

Thông qua các kiểm định Shapiro-Wilk và Kolmogorov-Smirnov, tác giả vẫn chưa thể xác định được phân phối cụ thể của biến VNM nên tác giả tiến hành mô phỏng biến VNM theo chuyển động Brown:

Chuyển động Brown:

set.seed(100)

gbm.f = function(n,S0,mu,sigma){
  t = 1
  t.s = seq(0,t,length = n)
  dt = t/n
  Bt = sqrt(t)*cumsum(rnorm((n),0,1))
  St = S0*exp((mu-sigma^2/2)*t.s + sigma*Bt)
  St # Kết quả của GBM
}
n <- 10000
S0 <- data$GVR[1]
mu <- (1/(n*(1/n)))*sum(data$r_vnm) #tính lợi nhuận kỳ vọng giá
sigma <- sqrt((sum((data$r_vnm-mu)^2))*(1/(n-1)*(1/n))) #tính độ biến động giá
VNM <- gbm.f(n,S0,mu,sigma)
plot(VNM, type = 'l', col = 'blue', main = "Giá cổ phiếu VNM", ylab = "VNĐ", xlab = "Ngày")

3.3 Mô phỏng Tổng giá trị danh mục đầu tư

TGTDMĐT <- 1000*ACB + 1000*FPT + 1000*GVR + 1000*NVL + 1000*SSI + 1000*VNM

Biểu đồ :

plot(TGTDMĐT, type = 'l', col = 'red', main = "Tổng giá trị danh mục đầu tư 6 cổ phiếu trong rổ VN30", ylab = "VNĐ", xlab = "Ngày")

summary(TGTDMĐT)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## 166188785 170961827 175423769 175911504 180796072 186812185

Sau khi mô phỏng giá trị danh mục đầu tư gồm 6 cổ phiếu lớn trong rổ VN30 trong vòng 10000 ngày tới kể từ ngày 30/06/2023, ta thấy Tổng giá trị danh mục đầu tư có giá trị trung bình là 175.911.504 VND và có giá trị trung vị là 175.423.769 VND. Trong 10000 ngày tới, Tổng giá trị danh mục đầu tư đạt giá trị lớn nhất là 186.812.185 VND và nhỏ nhất là 166.188.785 VND. Thông qua biểu đồ, ta thấy sự biến động Tổng giá trị danh mục đầu tư có xu hướng tăng mạnh trong 10000 ngày tới.

3.4 Quy ước về Tổng giá trị danh mục đầu tư

Ta quy ước:

tại mức bằng 176000000 VNĐ là giá trị danh mục hoà vốn (danhmuchoavon = 176000000)

tại mức lớn hơn 176000000 VNĐ là danh mục có lời (danhmuccoloi > 176000000)

tại mức nhỏ hơn 176000000 VNĐ là danh mục bị lỗ (danhmucbilo < 176000000)

danhmuchoavon <- TGTDMĐT[TGTDMĐT = 176000000]

danhmuccoloi <- TGTDMĐT[TGTDMĐT > 176000000]

danhmucbilo <- TGTDMĐT[TGTDMĐT < 176000000]
table(cut(TGTDMĐT, 2, labels = c('coloi','bilo')))
## 
## coloi  bilo 
##  5305  4695
table(cut(TGTDMĐT/1000,2))
## 
## (1.66e+05,1.77e+05] (1.77e+05,1.87e+05] 
##                5305                4695

3.5 Xác suất để Tổng giá trị danh mục đầu tư nhận các giá trị quy ước

Xác suất để TGTDMĐT có lời:

length(danhmuccoloi)/length(TGTDMĐT)
## [1] 0.4779

Từ kết quả trên ta có xác suất để Tổng giá trị danh mục đầu tư có lời là 47,79% tức trong 10000 ngày tới kể từ ngày 30/06/2023 xác suất để tổng giá trị danh mục đầu tư lớn hơn là 176000000 VNĐ là 47,79%. Ta thấy đây là mức xác suất chưa thực sự lớn nên có thể nói nếu mô phỏng ngẫu nhiên giá đóng cửa của 6 cổ phiếu ACB, FPT, GVR, NVL, SSI, VNM trong 10000 ngày tói kể từ ngày 30/06/2023 thì tổng giá trị danh mục đầu tư sẽ có lời là chưa thực sự khả thi.

Xác suất để TGTDMĐT bị lỗ:

length(danhmucbilo)/length(TGTDMĐT)
## [1] 0.5221

Từ kết quả trên ta có xác suất để Tổng giá trị danh mục đầu tư bị lỗ là 52,21% tức trong 10000 ngày tới kể từ ngày 30/06/2023 xác suất để tổng giá trị danh mục đầu tư nhỏ hơn là 176000000 VNĐ là 52,21%. Có thể nói nếu mô phỏng ngẫu nhiên giá đóng cửa của 6 cổ phiếu ACB, FPT, GVR, NVL, SSI, VNM trong 10000 ngày tới kể từ ngày 30/06/2023 thì tổng giá trị danh mục đầu tư bị lỗ là có khả năng.

LS0tDQp0aXRsZTogIk3DlCBQSOG7jk5HIERBTkggTeG7pEMgxJDhuqZVIFTGryBDSOG7qE5HIEtIT8OBTiA2IEPhu5QgUEhJ4bq+VSBM4buaTiBUUk9ORyBOSMOTTSBWTjMwIg0KYXV0aG9yOiAiTmd1eeG7hW4gUGjGsMahbmcgTmh1bmciDQpkYXRlOiAiMjAyMy0wOC0wNiINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB0cnVlDQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIHRvY19mbG9hdDoNCiAgICAgIGNvbGxhcHNlZDogZmFsc2UNCiAgICBkZl9wcmludHM6IHBhZ2VkDQogICANCi0tLQ0KIyAsTOG7nEkgQ+G6ok0gxqBODQoNCiAgVHJvbmcgcXXDoSB0csOsbmggaOG7jWMgdOG6rXAgdsOgIG5naGnDqm4gY+G7qXUgbcO0biBNw7QgcGjhu49uZyBuZ+G6q3Ugbmhpw6puIGPFqW5nIG5oxrAgdHJvbmcgcXXDoSB0csOsbmggaG/DoG4gdGhp4buHbiBiw6BpIHRp4buDdSBsdeG6rW4gIk3DtCBwaOG7j25nIGRhbmggbeG7pWMgxJHhuqd1IHTGsCBjaOG7qW5nIGtob8OhbiA2IGPhu5UgcGhp4bq/dSBs4bubbiB0cm9uZyBuaMOzbSBWTjMwIiwgdMO0aSB4aW4gY2jDom4gdGjDoG5oIGPhuqNtIMahbiDEkeG6v24gdGjhuqd5IFRoLlMgVHLhuqduIE3huqFuaCBUxrDhu51uZyBnaeG6o25nIHZpw6puIGLhu5kgbcO0biBNw7QgcGjhu49uZyBuZ+G6q3Ugbmhpw6puIMSRw6MgZOG6oXkgZOG7lywgdHJ1eeG7gW4gxJHhuqF0IG5o4buvbmcga2nhur9uIHRo4bupYyBxdcO9IGLDoXUgY2hvIGNow7puZyB0w7RpIHRyb25nIHN14buRdCB0aOG7nWkgZ2lhbiBo4buNYyB04bqtcCB24burYSBxdWEsIMSR4buTbmcgdGjhu51pIHRo4bqneSBjxaluZyDEkcOjIGfhu6NpIMO9LCBo4buXIHRy4bujIHbDoCBoxrDhu5tuZyBk4bqrbiBjaMO6bmcgdMO0aSB0cm9uZyBxdcOhIHRyw6xuaCBsw6BtIGLDoGkgxJHhu4MgY8OzIMSRxrDhu6NjIG3hu5l0IGLDoGkgdGnhu4N1IGx14bqtbiB04buRdCBuaOG6pXQuIERvIHbhu5FuIGtp4bq/biB0aOG7qWMgY8OybiBuaGnhu4F1IGjhuqFuIGNo4bq/IG7Dqm4gdHJvbmcgYsOgaSB0aeG7g3UgbHXhuq1uIGNo4bqvYyBjaOG6r24gc+G6vSBraMO0bmcgdHLDoW5oIGto4buPaSBuaOG7r25nIHRoaeG6v3Ugc8OzdC4gUuG6pXQgbW9uZyBuaOG6rW4gxJHGsOG7o2Mgc+G7sSBuaOG6rW4geMOpdCwgw70ga2nhur9uIMSRw7NuZyBnw7NwLCBwaMOqIGLDrG5oIHThu6sgcGjDrWEgdGjhuqd5IMSR4buDIGLDoGkgdGnhu4N1IGx14bqtbiDEkcaw4bujYyBob8OgbiB0aGnhu4duIGjGoW4uDQogIA0KIyAsUEjhuqZOIE3hu54gxJDhuqZVDQoNCiMjICxMw70gZG8gY2jhu41uIMSR4buBIHTDoGkNCg0KICBUaOG7iyB0csaw4budbmcgY2jhu6luZyBraG/DoW4gVmnhu4d0IE5hbSBoaeG7h24gxJFhbmcgbMOgIGvDqm5oIMSR4bqndSB0xrAga2jDoSBo4bqlcCBk4bqrbiB2w6Agbmhp4buBdSB0aeG7gW0gbsSDbmcuIFRyb25nIG5o4buvbmcgbsSDbSBn4bqnbiDEkcOieSwgdGjhu4sgdHLGsOG7nW5nIGhv4bqhdCDEkeG7mW5nIGPhu7FjIGvDrCBzw7RpIMSR4buZbmcgdsOgIMSRw6MgY8OzIG5o4buvbmcgYsaw4bubYyB0aeG6v24gdsaw4bujdCBi4bqtYy4gSMOgbmcgbG/huqF0IGPDoWMgY8O0bmcgdHkgY2jhu6luZyBraG/DoW4gcmEgxJHhu51pLCBjw6FjIG5ow6AgxJHhuqd1IHTGsCB0cm9uZyB2w6Agbmdvw6BpIG7GsOG7m2MgcsOzdCB24buRbiDhu5Mg4bqhdCwgY8OhYyBjaOG7iSBz4buRIHRo4buLIHRyxrDhu51uZyBsacOqbiB04bulYyBwaMOhIGvhu7cgbOG7pWMuIFZp4buHYyBs4buxYSBjaOG7jW4ga8OqbmggxJHhuqd1IHTGsCDEkeG7gyBzaW5oIGzhu51pIGLhurFuZyB2aeG7h2MgxJHhuqd1IHTGsCB2w6BvIGPhu5UgcGhp4bq/dSDEkcOjIMSRxrDhu6NjIHLhuqV0IG5oaeG7gXUgbmfGsOG7nWkgbOG7sWEgY2jhu41uIGhp4buHbiBuYXkuIFZp4buHYyB4w6J5IGThu7FuZyBt4buZdCBkYW5oIG3hu6VjIMSR4bqndSB0xrAgY+G7lSBwaGnhur91IGFuIHRvw6BuIHbDoCBtYW5nIGzhuqFpIGzhu6NpIG5odeG6rW4gduG6q24gbMOgIHbhuqVuIMSR4buBIG3DoCBnaeG7m2kgxJHhuqd1IHTGsCBxdWFuIHTDom0gxJHhur9uIGjDoG5nIMSR4bqndS4NCiAgDQogIFbhu5tpIG5oaeG7gXUgbmjDoCDEkeG6p3UgdMawIG5ow7NtIGPhu5UgcGhp4bq/dSBWTjMwIGzDoCB0aHXhuq10IG5n4buvIHF1ZW4gdGh14buZYywgbcO0IHThuqMgdOG6rXAgaOG7o3AgY8OhYyBj4buVIHBoaeG6v3UgZOG6q24gxJHhuqd1IG5nw6BuaCwgbMSpbmggduG7sWMgdsOgIHRo4buLIHRyxrDhu51uZy4gTmjDs20gY+G7lSBwaGnhur91IFZOMzAgbMOgIHThuq1wIGjhu6NwIDMwIG3DoyBj4buVIHBoaeG6v3UgxJHhuqF0IGPDoWMgdGnDqnUgY2h14bqpbiBnacOhIHRy4buLIHbhu5FuIGjDs2EgbOG7m24sIHTDrW5oIHRoYW5oIGtob+G6o24gY2FvLCB04bu3IGzhu4cgZnJlZS1mbG9hdCB0aOG6pXAgaMahbiA1JS5S4buVIFZOMzAgxJHGsOG7o2MgY29pIGzDoCBuaMOzbSBj4buVIHBoaeG6v3UgYmx1ZSBjaGlwLCBjw7MgdMOtbmggdGhhbmgga2hv4bqjbiBjYW8sIGdpw6EgdHLhu4sgduG7kW4gaMOzYSBs4bubbiwgdGjGsOG7nW5nIMSRxrDhu6NjIG5ow6AgxJHhuqd1IHTGsCBs4buxYSBjaOG7jW4gxJHhuqd1IHTGsCB2w6wgY8OzIHTDrW5oIGFuIHRvw6BuIGNhbywgYmnhur9uIMSR4buZbmcgY+G7lSBwaGnhur91IHRo4bqlcC4gQ8OhYyBj4buVIHBoaeG6v3UgYsOqbiB0cm9uZyBy4buVIFZOMzAgY2hvIHRo4bqleSB4dSBoxrDhu5tuZyB0aOG7iyB0csaw4budbmcgxJFhbmcgbmdoacOqbmcgduG7gSBsxKluaCB24buxYyBuw6BvIOKApiBU4bqhbyBuw6puIHPhu6ljIGjhuqVwIGThuqtuIGzhu5tuIHbhu5tpIG5oaeG7gXUgbmjDoCDEkeG6p3UgdMawIGLhu59pIGto4bqjIG7Eg25nIHTEg25nIHRyxrDhu59uZyDhu5VuIMSR4buLbmguIEPDoWMgY+G7lSBwaGnhur91IGLDqm4gdHJvbmcgcuG7lSBWTjMwIGNobyB0aOG6pXkgeHUgaMaw4bubbmcgdGjhu4sgdHLGsOG7nW5nIMSRYW5nIG5naGnDqm5nIHbhu4EgbMSpbmggduG7sWMgbsOgby4gVOG7qyDEkcOzIGdpw7pwIG5ow6AgxJHhuqd1IHTGsCDEkcOhbmggZ2nDoSDEkcaw4bujYyB04buVbmcgcXVhbiB0aOG7iyB0csaw4budbmcsIGzhu7FhIGNo4buNbiBj4buVIHBoaeG6v3UgxJHhuqd1IHTGsCB0cm9uZyBsxKluaCB24buxYyBwaMO5IGjhu6NwLg0KICANCiAgVuG7m2kgbmjhu69uZyDEkeG6t2MgxJFp4buDbSB24buBIGdpw6EgdHLhu4sgduG7kW4gaMOzYSB2w6AgdMOtbmggdGhhbmgga2hv4bqjbiBjYW8sIGPDsyBuw6puIMSR4bqndSB0xrAgY+G7lSBwaGnhur91IFZOMzAga2jDtG5nIGzDoCBt4buRaSBxdWFuIHTDom0gY+G7p2Egbmhp4buBdSBuZ8aw4budaS4gVGjhu4sgdHLGsOG7nW5nIGNo4bupbmcga2hvw6FuIGPDsyBow6BuZyBuZ2jDrG4gbcOjIGPhu5UgcGhp4bq/dSwgdmnhu4djIGzhu7FhIGNo4buNbiBtw6MgY+G7lSBwaGnhur91IHBow7kgaOG7o3AgduG7m2kgbeG7pWMgxJHDrWNoIHNpbmggbOG7nWkga2jDtG5nIGjhu4EgxJHGoW4gZ2nhuqNuLiBWw6wgduG6rXkgdHJvbmcgYsOgaSBtw7QgcGjhu49uZyBuw6B5LCB0w6FjIGdp4bqjIHPhur0gdGjhu7FjIGhp4buHbiDigJxNw7QgcGjhu49uZyBkYW5oIG3hu6VjIMSR4bqndSB0xrAgdsOgIHThu7cgc3XhuqV0IHNpbmggbOG7o2kgY+G7p2EgNiBj4buVIHBoaeG6v3UgdGh14buZYyBuaMOzbSBWTjMw4oCdLg0KICANCiAgDQojIyAsxJDhu5FpIHTGsOG7o25nIHbDoCBt4bulYyB0acOqdSBuZ2hpw6puIGPhu6l1DQoNCiAgxJDhu4EgdMOgaSBtw7QgcGjhu49uZyBnacOhIHRy4buLIGPhu6dhIGRhbmggbeG7pWMgxJHhuqd1IHTGsCBiYW8gZ+G7k20gNiBj4buVIHBoaeG6v3UgbOG7m24gdGh14buZYyBuaMOzbSBWTjMwIGzDoCBBQ0IsIEZQVCwgR1ZSLCBOVkwsIFNTSSwgVk5NIHRyb25nIDEwMDAwIG5nw6B5IGvhu4MgdOG7qyBuZ8OgeSAzMC8wNi8yMDIzIHThu6sgxJHDsyBjw7MgdGjhu4MgbcO0IHBo4buPbmcgxJHGsOG7o2MgZ2nDoSB0cuG7iyBj4bunYSBkYW5oIG3hu6VjIMSR4bqndSB0xrAgZ+G7k20gNiBj4buVIHBoaeG6v3UgdHLDqm4gduG7m2kgc+G7kSBsxrDhu6NuZyDEkeG6p3UgdMawIGPhu5UgcGhp4bq/dSBsw6AgMTAwMCBjcCBt4buXaSBtw6MuDQogIA0KICBBQ0I6IGzDoCBtw6MgY+G7lSBwaGnhur91IGPhu6dhIG5nw6JuIGjDoG5nIFRNQ1Agw4EgQ2jDonUsIEFDQiBsw6AgbMOjIGPhu5UgcGhp4bq/dSB0aOG7qSAxMCBj4bunYSBuZ8OgbmggbmfDom4gaMOgbmcgY8OzIG3hurd0IHRyb25nIHLhu5UgY2jhu4kgc+G7kSBWTjMwLCBtw6MgY+G7lSBwaGnhur91IEFDQiBjaMOtbmggdGjhu6ljIMSRxrDhu6NjIG5pw6ptIHnhur90IHRyw6puIFPhu58gZ2lhbyBk4buLY2ggY2jhu6luZyBraG/DoW4gSOG7kyBDaMOtIE1pbmggKEhvIENoaSBNaW5oIFN0b2NrIEV4Y2hhbmdlIC0gSG9zZSkgdOG7qyBuZ8OgeSAwOS8xMi8yMDIwIHbhu5tpIGdpw6EgdGhhbSBjaGnhur91IDI2LjQwMCDEkeG7k25nL2NwLiANCg0KRlBUOiBsw6AgbcOjIGPhu5UgcGhp4bq/dSBDw7RuZyB0eSBD4buVIHBo4bqnbiBGUFQuTmfDoHkgMTMvMTIvMjAwNiBtw6MgY+G7lSBwaGnhur91IEZQVCDEkcaw4bujYyBuacOqbSB0csOqbiB0csOqbiBzw6BuIEhvc2UuIE3DoyBj4buVIHBoaeG6v3UgRlBUIGzDoCBt4buZdCB0cm9uZyBuaOG7r25nIGPhu5UgcGhp4bq/dSDEkeG6p3UgbmfDoG5oIGPDtG5nIG5naOG7hyB0aMO0bmcgdGluIHRyw6puIHRo4buLIHRyxrDhu51uZyBjaOG7qW5nIGtob8OhbiBWaeG7h3QgTmFtLg0KDQpHVlI6IGzDoCBtw6MgY+G7lSBwaGnhur91IGPhu6dhIFThuq1wIMSRb8OgbiBjw7RuZyBuZ2hp4buHcCBjYW8gc3UgVmnhu4d0IE5hbS4gTMSpbmggduG7sWMga2luaCBkb2FuaCBjaMOtbmggbMOgIHPhuqNuIHh14bqldCBwbGFzdGljIHbDoCBjYW8gc3UgdOG7lW5nIGjhu6NwLiBUaMOhbmcgMi8yMDE4LCBHVlIgdGnhur9uIGjDoG5oIHBow6F0IGjDoG5oIGPhu5UgcGhp4bq/dSBs4bqnbiDEkeG6p3UgcmEgY8O0bmcgY2jDum5nIChJUE8pLCBj4buVIHBoaeG6v3UgR1ZSIG7hurFtIHRyb25nIHLhu5UgVk4zMCwgdHV5IGPDsyB0deG7lWkgxJHhu51pIGdpYSBuaOG6rXAgc8OgbiBjaOG7qW5nIGtob8OhbiB0aOG6pXAgaMahbiBuaOG7r25nIGPhu5UgcGhp4bq/dSBraMOhYyB0cm9uZyBWTjMwIG5oxrBuZyB24bqrbiBsw6AgY+G7lSBwaGnhur91IHRodSBow7p0IMSRxrDhu6NjIG5oaeG7gXUgbmjDoCDEkeG6p3UgdMawIGNo4bupbmcga2hvw6FuLg0KDQpOVkw6IGzDoCBtw6MgY+G7lSBwaGnhur91IGPhu6dhIENUQ1AgVOG6rXAgxJFvw6BuIMSQ4bqndSB0xrAgxJDhu4thIOG7kWMgTm8gVmEgKE5vdmFMYW5kKSwgVOG6rXAgxJFvw6BuIE5vdmEgaG/huqF0IMSR4buZbmcgdHJvbmcgbMSpbmggduG7sWMgc+G6o24geHXhuqV0IGtpbmggZG9hbmggdGh14buRYyB0aMO6IHksIHRodeG7kWMgdGjhu6d5IHPhuqNuLCB4w6J5IGJp4buHdCB0aOG7sSBjaG8gdGh1w6ogbmjGsG5nIHRo4bq/IG3huqFuaCwgbcWpaSBuaOG7jW4gbMOgIGtpbmggZG9hbmggYuG6pXQgxJHhu5luZyBz4bqjbi4gTmfDoHkgMjgvMTIvMjAxNiBtw6MgY+G7lSBwaGnhur91IE5WTCBj4bunYSBU4bqtcCDEkW/DoG4gTm92YUxhbmQgY2jDrW5oIHRo4bupYyDEkcaw4bujYyBuacOqbSB54bq/dCB0csOqbiBzw6BuIEhvc2UgdsOgIGzDoCBt4buZdCB0cm9uZyBuaOG7r25nIG3DoyBj4buVIHBoaeG6v3UgdGh14buZYyBuZ8OgbmggYuG6pXQgxJHhu5luZyBz4bqjbiBs4bubbiB0cm9uZyBy4buVIFZOMzAuDQoNClNTSTogbMOgIG3DoyBj4buVIHBoaeG6v3UgY+G7p2EgQ1RDUCBDaOG7qW5nIGtob8OhbiBTU0kuIFNTSSBob+G6oXQgxJHhu5luZyB0csOqbiBjw6FjIGzEqW5oIHbhu7FjIGThu4tjaCB24bulIHTDoGkgY2jDrW5oIGzhu5tuIGJhbyBn4buTbSBE4buLY2ggduG7pSBDaOG7qW5nIGtob8OhbiBLaMOhY2ggaMOgbmcgQ8OhIG5ow6JuLCBRdeG6o24gbMO9IHF14bu5IMSR4bqndSB0xrAsIEThu4tjaCB24bulIE5nw6JuIGjDoG5nIMSR4bqndSB0xrAsLi4udsOgIGzDoCBt4buZdCB0cm9uZyBuaOG7r25nIGPDtG5nIHR5IGNo4bupbmcga2hvw6FuIGzhu5tuIG5o4bqldCBWaeG7h3QgTmFtIMSRxrDhu6NjIG5pw6ptIHnhur90IHRyw6puIHPDoG4gSG9zZSB2w6AgbOG7jXQgdsOgbyBkYW5oIHPDoWNoIFZOMzAuDQoNClZOTTogbMOgIG3DoyBj4buVIHBoaeG6v3UgbuG7lWkgdGnhur9uZyDEkcaw4bujYyBDw7RuZyB0eSBj4buVIHBo4bqnbiBT4buvYSBWaeG7h3QgTmFtIChWaW5hbWlsaykgcGjDoXQgaMOgbmguIE5oaeG7gXUgbsSDbSBuYXksIFZpbmFtaWxrIGx1w7RuIGdp4buvIHbhu4sgdHLDrSBz4buRIDEgdHJvbmcgbmfDoG5oIHPhu69hIFZp4buHdCBOYW0gxJHhurdjIGJp4buHdCB0cm9uZyBuaMOzbSBuZ8OgbmggdGnDqnUgZMO5bmcuIFZOTSBsw6AgbeG7mXQgdHJvbmcgbmjhu69uZyBtw6MgY+G7lSBwaGnhur91IGzhu5tuIMSRxrDhu6NjIG5pw6ptIHnhur90IHThu6sga2jDoSBsw6J1IHRyw6puIHPDoG4gSG9zZSAobmfDoHkgMTkvMDEvMjAwNikgdsOgIGzDoCBtw6MgY+G7lSBwaGnhur91IGPDsyBnacOhIHRy4buLIGzhu5tuIHRyb25nIG5ow7NtIFZOMzAuDQoNClTDoWMgZ2nhuqMgc+G6vSBtw7QgcGjhu49uZyBuZ+G6q3Ugbmhpw6puIGdpw6EgxJHDs25nIGPhu61hIGPhu6dhIGPDoWMgbcOjIGPhu5UgcGhp4bq/dSB0csOqbiB0cm9uZyB2w7JuZyAxMDAwMCBuZ8OgeSB0aeG6v3AgdGhlbyBr4buDIHThu6sgbmfDoHkgMzAvMDYvMjAyMyB0aMO0bmcgcXVhIGdpw6EgxJHDs25nIGPhu61hIGzhu4tjaCBz4butIGPhu6dhIHThu6tuZyBtw6MgY+G7lSBwaGnhur91IHThu6sgbmfDoHkgMDEvMDMvMjAyMyDEkeG6v24gbmfDoHkgMzAvMDYvMjAyMy4gROG7ryBsaeG7h3UgbOG7i2NoIHPhu60gY+G7p2EgdOG7q25nIG3DoyBD4buVIHBoaeG6v3UgxJHGsOG7o2MgdOG7lW5nIGjhu6NwIHThu6sgbmd14buTbiBpbnZlc3RpbmcuY29tIChodHRwczovL3d3dy5pbnZlc3RpbmcuY29tLykNCg0KIyMgLE3DtCBow6xuaCBuZ2hpw6puIGPhu6l1DQoNCiAgxJDhu4MgbcO0IHBo4buPbmcgxJHGsOG7o2MgdOG7lW5nIGdpw6EgdHLhu4sgY+G7p2EgZGFuaCBt4bulYyDEkeG6p3UgdMawIDYgY+G7lSBwaGnhur91IGzhu5tuIHRodeG7mWMgbmjDs20gVk4zMCwgdMOhYyBnaeG6oyB4aW4gxJHhu4EgeHXhuqV0IG3DtCBow6xuaCBuaMawIHNhdTogDQoNCiAgICAgICAgVEdURE3EkFQgPSAxMDAwLkFDQisxMDAwLkZQVCsxMDAwLkdWUisxMDAwLk5WTCsxMDAwLlNTSSsxMDAwLlZOTQ0KICAgIA0KICBUcm9uZyDEkcOzOg0KICANCipCaeG6v24gcGjhu6UgdGh14buZYzoqDQoNClRHVERNxJBUOiBU4buVbmcgZ2nDoSB0cuG7iyBkYW5oIG3hu6VjIMSR4bqndSB0xrAgNiBj4buVIHBoaeG6v3UgdGh14buZYyBuaMOzbSBWTjMwICAoxJHGoW4gduG7izogVk7EkCkNCg0KKkJp4bq/biDEkeG7mWMgbOG6rXA6Kg0KDQpBQ0I6IEdpw6EgxJHDs25nIGPhu61hIGPhu5UgcGhp4bq/dSBBQ0IgKMSRxqFuIHbhu4s6IFZOxJApDQoNCkZQVDogR2nDoSDEkcOzbmcgY+G7rWEgY+G7lSBwaGnhur91IEZQVCAoxJHGoW4gduG7izogVk7EkCkNCg0KR1ZSOiBHacOhIMSRw7NuZyBj4butYSBj4buVIHBoaeG6v3UgR1ZSICjEkcahbiB24buLOiBWTsSQKQ0KDQpOVkw6IEdpw6EgxJHDs25nIGPhu61hIGPhu5UgcGhp4bq/dSBOVkwgKMSRxqFuIHbhu4s6IFZOxJApDQoNClNTSTogR2nDoSDEkcOzbmcgY+G7rWEgY+G7lSBwaGnhur91IFNTSSAoxJHGoW4gduG7izogVk7EkCkNCg0KVk5NOiBHacOhIMSRw7NuZyBj4butYSBj4buVIHBoaeG6v3UgVk5NICjEkcahbiB24buLOiBWTsSQKQ0KDQojICxL4bq+VCBRVeG6oiBOR0hJw4pOIEPhu6hVDQoNCiMjIFRo4buRbmcga8OqIG3DtCB04bqjIGPDoWMgYmnhur9uDQoNCmBgYHtyfQ0Kcm0obGlzdD1scygpKSAjIGNsZWFyIGVudmlyb25tZW50DQpzZXR3ZCgiQzovUFRETERUIikNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeSh4bHN4KQ0KZGF0YSA8LSByZWFkLnhsc3goImR1bGlldWNwLnhsc3giLCBzaGVldEluZGV4ID0gMSkNCnN0cihkYXRhKQ0KYGBgDQpgYGB7cn0NCnN1bW1hcnkoZGF0YSkNCmBgYA0KYGBge3J9DQpzZChkYXRhJEFDQikNCmBgYA0KICBCaeG6v24gQUNCIGPDsyBnacOhIHRy4buLIHRydW5nIGLDrG5oIGzDoCAyNDE1NyB04bupYyBnacOhIMSRw7NuZyBj4butYSB0cnVuZyBiw6xuaCBj4bunYSBj4buVIHBoaeG6v3UgQUNCIHRyb25nIGdpYWkgxJFv4bqhbiAwMS8wMy8yMDIzIMSR4bq/biAzMC8wNi8yMDIzIGzDoCAyNC4xNTcgVk7EkC4gQsOqbiBj4bqhbmggxJHDsyBnacOhIHRy4buLIGNhbyBuaOG6pXQgY+G7p2EgY+G7lSBwaGnhur91IEFDQiBsw6AgMjYuMzUwIFZOxJAgdsOgIHRo4bqlcCBuaOG6pXQgbMOgIDIxNDAwIFZOxJAsIMSR4buZIGzhu4djaCBjaHXhuqluIGPhu6dhIG3DoyBBQ0IgbMOgIHjhuqVwIHjhu4kgMTI3MCBWTsSQLg0KICANCmBgYHtyfQ0Kc2QoZGF0YSRGUFQpDQpgYGANCiAgQmnhur9uIEZQVCBjw7MgZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaCBsw6AgODEyOTUgdOG7qWMgZ2nDoSDEkcOzbmcgY+G7rWEgdHJ1bmcgYsOsbmggY+G7p2EgY+G7lSBwaGnhur91IEZQVCB0cm9uZyBnaWFpIMSRb+G6oW4gMDEvMDMvMjAyMyDEkeG6v24gMzAvMDYvMjAyMyBsw6AgODEuMjk1IFZOxJAuIELDqm4gY+G6oW5oIMSRw7MgZ2nDoSB0cuG7iyBjYW8gbmjhuqV0IGPhu6dhIGPhu5UgcGhp4bq/dSBGUFQgbMOgIDg3LjMwMCBWTsSQIHbDoCB0aOG6pXAgbmjhuqV0IGzDoCA3Ny41MDAgVk7EkCwgxJHhu5kgbOG7h2NoIGNodeG6qW4gY+G7p2EgbcOjIEFDQiBsw6AgeOG6pXAgeOG7iSAyMzU5IFZOxJAuDQogIA0KYGBge3J9DQpzZChkYXRhJEdWUikNCmBgYA0KICBCaeG6v24gR1ZSIGPDsyBnacOhIHRy4buLIHRydW5nIGLDrG5oIGzDoCAxNTk3NCB04bupYyBnacOhIMSRw7NuZyBj4butYSB0cnVuZyBiw6xuaCBj4bunYSBj4buVIHBoaeG6v3UgR1ZSIHRyb25nIGdpYWkgxJFv4bqhbiAwMS8wMy8yMDIzIMSR4bq/biAzMC8wNi8yMDIzIGzDoCAxNS45NzQgVk7EkC4gQsOqbiBj4bqhbmggxJHDsyBnacOhIHRy4buLIGNhbyBuaOG6pXQgY+G7p2EgY+G7lSBwaGnhur91IEdWUiBsw6AgMTkuNjAwIFZOxJAgdsOgIHRo4bqlcCBuaOG6pXQgbMOgIDEzLjk1MCBWTsSQLCDEkeG7mSBs4buHY2ggY2h14bqpbiBj4bunYSBtw6MgR1ZSIGzDoCB44bqlcCB44buJIDE1NjIgVk7EkC4gDQogIA0KYGBge3J9DQpzZChkYXRhJE5WTCkNCmBgYA0KICBCaeG6v24gTlZMIGPDsyBnacOhIHRy4buLIHRydW5nIGLDrG5oIGzDoCAxMzMwNyB04bupYyBnacOhIMSRw7NuZyBj4butYSB0cnVuZyBiw6xuaCBj4bunYSBj4buVIHBoaeG6v3UgTlZMIHRyb25nIGdpYWkgxJFv4bqhbiAwMS8wMy8yMDIzIMSR4bq/biAzMC8wNi8yMDIzIGzDoCAxMy4zMDcgVk7EkC4gQsOqbiBj4bqhbmggxJHDsyBnacOhIHRy4buLIGNhbyBuaOG6pXQgY+G7p2EgY+G7lSBwaGnhur91IEdWUiBsw6AgMTUuNjAwIFZOxJAgdsOgIHRo4bqlcCBuaOG6pXQgbMOgIDEwLjI1MCBWTsSQLCDEkeG7mSBs4buHY2ggY2h14bqpbiBj4bunYSBtw6MgR1ZSIGzDoCB44bqlcCB44buJIDEzNzQgVk7EkC4NCiAgDQpgYGB7cn0NCnNkKGRhdGEkU1NJKQ0KYGBgDQogIEJp4bq/biBTU0kgY8OzIGdpw6EgdHLhu4sgdHJ1bmcgYsOsbmggbMOgIDIxNTg0IHThu6ljIGdpw6EgxJHDs25nIGPhu61hIHRydW5nIGLDrG5oIGPhu6dhIGPhu5UgcGhp4bq/dSBTU0kgdHJvbmcgZ2lhaSDEkW/huqFuIDAxLzAzLzIwMjMgxJHhur9uIDMwLzA2LzIwMjMgbMOgIDIxLjU4NCBWTsSQLiBCw6puIGPhuqFuaCDEkcOzIGdpw6EgdHLhu4sgY2FvIG5o4bqldCBj4bunYSBj4buVIHBoaeG6v3UgU1NJIGzDoCAyNi42MDAgVk7EkCB2w6AgdGjhuqVwIG5o4bqldCBsw6AgMTguMjUwIFZOxJAsIMSR4buZIGzhu4djaCBjaHXhuqluIGPhu6dhIG3DoyBTU0kgbMOgIHjhuqVwIHjhu4kgMjI3NiBWTsSQLiAgICANCiAgDQpgYGB7cn0NCnNkKGRhdGEkVk5NKQ0KYGBgDQogIEJp4bq/biBWTk0gY8OzIGdpw6EgdHLhu4sgdHJ1bmcgYsOsbmggbMOgIDczMTAwIHThu6ljIGdpw6EgxJHDs25nIGPhu61hIHRydW5nIGLDrG5oIGPhu6dhIGPhu5UgcGhp4bq/dSBWTk0gdHJvbmcgZ2lhaSDEkW/huqFuIDAxLzAzLzIwMjMgxJHhur9uIDMwLzA2LzIwMjMgbMOgIDczLjEwMCBWTsSQLiBCw6puIGPhuqFuaCDEkcOzIGdpw6EgdHLhu4sgY2FvIG5o4bqldCBj4bunYSBj4buVIHBoaeG6v3UgVk5NIGzDoCA4MS4zMDAgVk7EkCB2w6AgdGjhuqVwIG5o4bqldCBsw6AgNjUuNTAwIFZOxJAsIMSR4buZIGzhu4djaCBjaHXhuqluIGPhu6dhIG3DoyBWTk0gbMOgIHjhuqVwIHjhu4kgNDUwNSBWTsSQLiBDaOG7qW5nIHThu48gcuG6sW5nIHRyb25nIHRo4budaSBnaWFuIG7DoHkgYmnhur9uIMSR4buZbmcgZ2nDoSBj4buVIHBoaeG6v3UgVk5NIGzDoCBraMOhIMSRw6FuZyBr4buDLg0KICANCiMjIFjDoWMgxJHhu4tuaCBwaMOibiBwaOG7kWkgY8OhYyBiaeG6v24gxJHhuqd1IHbDoG8NCg0KIyMjIE3DoyBjaOG7qW5nIGtob8OhbiBBQ0INCg0KxJDhu5MgdGjhu4sgSGlzdG9ncmFtOg0KYGBge3J9DQpoaXN0KGRhdGEkQUNCKQ0KYGBgDQrEkOG7kyB0aOG7iyBRUSBwbG90Og0KYGBge3J9DQpsaWJyYXJ5KHN0YXRzKQ0KcXFub3JtKGRhdGEkQUNCKQ0KcXFsaW5lKGRhdGEkQUNCKQ0KYGBgDQoNCipLaeG7g20gxJHhu4tuaCBTaGFwaXJvLVdpbGsgVGVzdDoqDQoNClbhu5tpIGdp4bqjIHRodXnhur90IEgwOiBEw6N5IHPhu5EgbGnhu4d1IGPDsyBwaMOibiBwaOG7kWkgQ2h14bqpbg0KDQpgYGB7cn0NCnNoYXBpcm8udGVzdChkYXRhJEFDQikNCmBgYA0KICBL4bq/dCBxdeG6oyBjaG8gdGjhuqV5IGdpw6EgdHLhu4sgdOG7m2kgaOG6oW4gUF92YWx1ZSA9IDMuMTAzZS0xMCA8IDUlIG7Dqm4gY2jGsGEgY8OzIGPGoSBz4bufIMSR4buDIGNo4bqlcCBuaOG6rW4gZ2nhuqMgdGh1eeG6v3QgSG8gdOG7qWMgZ2nDoSBj4buVIHBoaeG6v3UgQUNCIGtow7RuZyBjw7MgdHXDom4gdGhlbyBwaMOibiBwaOG7kWkgY2h14bqpbi4NCiAgDQoqS2nhu4NtIMSR4buLbmggcGjDom4gcGjhu5FpIMSR4buBdToqDQoNCkdp4bqjIHRodXnhur90IEhvOiBE4buvIGxp4buHdSB0dcOibiB0aGVvIHF1eSBsdeG6rXQgcGjDom4gcGjhu5FpIMSR4buBdQ0KDQpgYGB7cn0NCmtzLnRlc3QoZGF0YSRBQ0IsIHkgPSAicHVuaWYiKQ0KYGBgDQogIEvhur90IHF14bqjIHRyw6puIGNobyB0aOG6pXkgZ2nDoSB0cuG7iyB04bubaSBo4bqhbiBQX3ZhbHVlID0gMi4yZS0xNiA8IDUlIG7Dqm4gY2jGsGEgY8OzIGPGoSBz4bufIGNo4bqlcCBuaOG6rW4gZ2nhuqMgdGh1eeG6v3QgSG8gduG6rXkgZ2nDoSBj4buVIHBoaeG6v3UgQUNCIGtow7RuZyB0dcOibiB0aGVvIHF1eSBsdeG6rXQgcGjDom4gcGjhu5FpIMSR4buBdQ0KICANCiAgVGjDtG5nIHF1YSBjw6FjIGtp4buDbSDEkeG7i25oIFNoYXBpcm8tV2lsayB2w6AgS29sbW9nb3Jvdi1TbWlybm92LCB0w6FjIGdp4bqjIHbhuqtuIGNoxrBhIHRo4buDIHjDoWMgxJHhu4tuaCDEkcaw4bujYyBwaMOibiBwaOG7kWkgY+G7pSB0aOG7gyBj4bunYSBiaeG6v24gQUNCIG7Dqm4gdMOhYyBnaeG6oyB0aeG6v24gaMOgbmggbcO0IHBo4buPbmcgYmnhur9uIEFDQiB0aGVvIGNodXnhu4NuIMSR4buZbmcgQnJvd246DQogIA0KKkNodXnhu4NuIMSR4buZbmcgQnJvd246Kg0KICBUw61uaCB04bu3IHN14bqldCBzaW5oIGzhu51pIGPhu6dhIGdpw6ENCiAgDQpgYGB7cn0NCmxpYnJhcnkoZHBseXIpDQpkYXRhIDwtIGRhdGEgJT4lDQogIG11dGF0ZShyX2FjYiA9IChkYXRhJEFDQiAtIGxhZyhkYXRhJEFDQikpL2xhZyhkYXRhJEFDQikpICU+JQ0KICBtdXRhdGUocl9mcHQgPSAoZGF0YSRGUFQgLSBsYWcoZGF0YSRGUFQpKS9sYWcoZGF0YSRGUFQpKSAlPiUNCiAgbXV0YXRlKHJfZ3ZyID0gKGRhdGEkR1ZSIC0gbGFnKGRhdGEkR1ZSKSkvbGFnKGRhdGEkR1ZSKSkgJT4lIA0KICBtdXRhdGUocl9udmwgPSAoZGF0YSROVkwgLSBsYWcoZGF0YSROVkwpKS9sYWcoZGF0YSROVkwpKSAlPiUNCiAgbXV0YXRlKHJfc3NpID0gKGRhdGEkU1NJIC0gbGFnKGRhdGEkU1NJKSkvbGFnKGRhdGEkU1NJKSkgJT4lDQogIG11dGF0ZShyX3ZubSA9IChkYXRhJFZOTSAtIGxhZyhkYXRhJFZOTSkpL2xhZyhkYXRhJFZOTSkpDQoNCiNMb+G6oWkgYuG7jyBow6BuZyBjw7MgTkENCmRhdGEgPC0gbmEub21pdChkYXRhKQ0KZGF0YQ0KYGBgDQoNCg0KYGBge3J9DQpzZXQuc2VlZCgxMDApDQoNCmdibS5mID0gZnVuY3Rpb24obixTMCxtdSxzaWdtYSl7DQogIHQgPSAxDQogIHQucyA9IHNlcSgwLHQsbGVuZ3RoID0gbikNCiAgZHQgPSB0L24NCiAgQnQgPSBzcXJ0KHQpKmN1bXN1bShybm9ybSgobiksMCwxKSkNCiAgU3QgPSBTMCpleHAoKG11LXNpZ21hXjIvMikqdC5zICsgc2lnbWEqQnQpDQogIFN0ICMgS+G6v3QgcXXhuqMgY+G7p2EgR0JNDQp9DQpuIDwtIDEwMDAwDQpTMCA8LSBkYXRhJEFDQlsxXQ0KbXUgPC0gKDEvKG4qKDEvbikpKSpzdW0oZGF0YSRyX2FjYikgI3TDrW5oIGzhu6NpIG5odeG6rW4ga+G7syB24buNbmcgZ2nDoQ0Kc2lnbWEgPC0gc3FydCgoc3VtKChkYXRhJHJfYWNiLW11KV4yKSkqKDEvKG4tMSkqKDEvbikpKSAjdMOtbmggxJHhu5kgYmnhur9uIMSR4buZbmcgZ2nDoQ0KQUNCIDwtIGdibS5mKG4sUzAsbXUsc2lnbWEpDQpwbG90KEFDQiwgdHlwZSA9ICdsJywgY29sID0gJ2JsdWUnLCBtYWluID0gIkdpw6EgY+G7lSBwaGnhur91IEFDQiIsIHlsYWIgPSAiVk7EkCIsIHhsYWIgPSAiTmfDoHkiKQ0KYGBgDQoNCiMjIyBNw6MgY2jhu6luZyBraG/DoW4gRlBUDQoNCsSQ4buTIHRo4buLIEhpc3RvZ3JhbToNCmBgYHtyfQ0KaGlzdChkYXRhJEZQVCkNCmBgYA0KICDEkOG7kyB0aOG7iyBRUSBwbG90Og0KYGBge3J9DQpsaWJyYXJ5KHN0YXRzKQ0KcXFub3JtKGRhdGEkRlBUKQ0KcXFsaW5lKGRhdGEkRlBUKQ0KYGBgDQoqS2nhu4NtIMSR4buLbmggU2hhcGlyby1XaWxrIFRlc3Q6Kg0KICANClbhu5tpIGdp4bqjIHRodXnhur90IEgwOiBEw6N5IHPhu5EgbGnhu4d1IGPDsyBwaMOibiBwaOG7kWkgQ2h14bqpbg0KDQpgYGB7cn0NCnNoYXBpcm8udGVzdChkYXRhJEZQVCkNCmBgYA0KICBL4bq/dCBxdeG6oyBjaG8gdGjhuqV5IGdpw6EgdHLhu4sgdOG7m2kgaOG6oW4gUF92YWx1ZSA9IDQuNjQ2ZS0wNSA8IDUlIG7Dqm4gY2jGsGEgY8OzIGPGoSBz4bufIMSR4buDIGNo4bqlcCBuaOG6rW4gZ2nhuqMgdGh1eeG6v3QgSG8gdOG7qWMgZ2nDoSBj4buVIHBoaeG6v3UgRlBUIGtow7RuZyBjw7MgdHXDom4gdGhlbyBwaMOibiBwaOG7kWkgY2h14bqpbi4NCg0KKktp4buDbSDEkeG7i25oIHBow6JuIHBo4buRaSDEkeG7gXU6Kg0KDQpHaeG6oyB0aHV54bq/dCBIbzogROG7ryBsaeG7h3UgdHXDom4gdGhlbyBxdXkgbHXhuq10IHBow6JuIHBo4buRaSDEkeG7gXUNCg0KYGBge3J9DQprcy50ZXN0KGRhdGEkRlBULCB5ID0gInB1bmlmIikNCmBgYA0KICBL4bq/dCBxdeG6oyB0csOqbiBjaG8gdGjhuqV5IGdpw6EgdHLhu4sgdOG7m2kgaOG6oW4gUF92YWx1ZSA9IDIuMmUtMTYgPCA1JSBuw6puIGNoxrBhIGPDsyBjxqEgc+G7nyBjaOG6pXAgbmjhuq1uIGdp4bqjIHRodXnhur90IEhvIHbhuq15IGdpw6EgY+G7lSBwaGnhur91IEZQVCBraMO0bmcgdHXDom4gdGhlbyBxdXkgbHXhuq10IHBow6JuIHBo4buRaSDEkeG7gXUNCiAgDQogIFRow7RuZyBxdWEgY8OhYyBraeG7g20gxJHhu4tuaCBTaGFwaXJvLVdpbGsgdsOgIEtvbG1vZ29yb3YtU21pcm5vdiwgdMOhYyBnaeG6oyB24bqrbiBjaMawYSB0aOG7gyB4w6FjIMSR4buLbmggxJHGsOG7o2MgcGjDom4gcGjhu5FpIGPhu6UgdGjhu4MgY+G7p2EgYmnhur9uIEZQVCBuw6puIHTDoWMgZ2nhuqMgdGnhur9uIGjDoG5oIG3DtCBwaOG7j25nIGJp4bq/biBGUFQgdGhlbyBjaHV54buDbiDEkeG7mW5nIEJyb3duOg0KICANCipDaHV54buDbiDEkeG7mW5nIEJyb3duOioNCg0KYGBge3J9DQpzZXQuc2VlZCgxMDApDQoNCmdibS5mID0gZnVuY3Rpb24obixTMCxtdSxzaWdtYSl7DQogIHQgPSAxDQogIHQucyA9IHNlcSgwLHQsbGVuZ3RoID0gbikNCiAgZHQgPSB0L24NCiAgQnQgPSBzcXJ0KHQpKmN1bXN1bShybm9ybSgobiksMCwxKSkNCiAgU3QgPSBTMCpleHAoKG11LXNpZ21hXjIvMikqdC5zICsgc2lnbWEqQnQpDQogIFN0ICMgS+G6v3QgcXXhuqMgY+G7p2EgR0JNDQp9DQpuIDwtIDEwMDAwDQpTMCA8LSBkYXRhJEZQVFsxXQ0KbXUgPC0gKDEvKG4qKDEvbikpKSpzdW0oZGF0YSRyX2ZwdCkgI3TDrW5oIGzhu6NpIG5odeG6rW4ga+G7syB24buNbmcgZ2nDoQ0Kc2lnbWEgPC0gc3FydCgoc3VtKChkYXRhJHJfZnB0LW11KV4yKSkqKDEvKG4tMSkqKDEvbikpKSAjdMOtbmggxJHhu5kgYmnhur9uIMSR4buZbmcgZ2nDoQ0KRlBUIDwtIGdibS5mKG4sUzAsbXUsc2lnbWEpDQpwbG90KEZQVCwgdHlwZSA9ICdsJywgY29sID0gJ2JsdWUnLCBtYWluID0gIkdpw6EgY+G7lSBwaGnhur91IEZQVCIsIHlsYWIgPSAiVk7EkCIsIHhsYWIgPSAiTmfDoHkiKQ0KYGBgDQoNCiMjIyBNw6MgY2jhu6luZyBraG/DoW4gR1ZSDQoNCsSQ4buTIHRo4buLIEhpc3RvZ3JhbToNCmBgYHtyfQ0KaGlzdChkYXRhJEdWUikNCmBgYA0KICAgIMSQ4buTIHRo4buLIFFRIHBsb3Q6DQogICAgDQpgYGB7cn0NCmxpYnJhcnkoc3RhdHMpDQpxcW5vcm0oZGF0YSRHVlIpDQpxcWxpbmUoZGF0YSRHVlIpDQpgYGANCipLaeG7g20gxJHhu4tuaCBTaGFwaXJvLVdpbGsgVGVzdDoqDQogIA0KVuG7m2kgZ2nhuqMgdGh1eeG6v3QgSDA6IETDo3kgc+G7kSBsaeG7h3UgY8OzIHBow6JuIHBo4buRaSBDaHXhuqluDQoNCmBgYHtyfQ0Kc2hhcGlyby50ZXN0KGRhdGEkR1ZSKQ0KYGBgDQogIEvhur90IHF14bqjIGNobyB0aOG6pXkgZ2nDoSB0cuG7iyB04bubaSBo4bqhbiBQX3ZhbHVlID0gNC40NTJlLTA4IDwgNSUgbsOqbiBjaMawYSBjw7MgY8ahIHPhu58gxJHhu4MgY2jhuqVwIG5o4bqtbiBnaeG6oyB0aHV54bq/dCBIbyB04bupYyBnacOhIGPhu5UgcGhp4bq/dSBHVlIga2jDtG5nIGPDsyB0dcOibiB0aGVvIHBow6JuIHBo4buRaSBjaHXhuqluLg0KICANCipLaeG7g20gxJHhu4tuaCBwaMOibiBwaOG7kWkgxJHhu4F1OioNCg0KR2nhuqMgdGh1eeG6v3QgSG86IEThu68gbGnhu4d1IHR1w6JuIHRoZW8gcXV5IGx14bqtdCBwaMOibiBwaOG7kWkgxJHhu4F1DQoNCmBgYHtyfQ0Ka3MudGVzdChkYXRhJEdWUiwgeSA9ICJwdW5pZiIpDQpgYGANCiAgS+G6v3QgcXXhuqMgdHLDqm4gY2hvIHRo4bqleSBnacOhIHRy4buLIHThu5tpIGjhuqFuIFBfdmFsdWUgPSAyLjJlLTE2IDwgNSUgbsOqbiBjaMawYSBjw7MgY8ahIHPhu58gY2jhuqVwIG5o4bqtbiBnaeG6oyB0aHV54bq/dCBIbyB24bqteSBnacOhIGPhu5UgcGhp4bq/dSBHVlIga2jDtG5nIHR1w6JuIHRoZW8gcXV5IGx14bqtdCBwaMOibiBwaOG7kWkgxJHhu4F1DQogIA0KIFRow7RuZyBxdWEgY8OhYyBraeG7g20gxJHhu4tuaCBTaGFwaXJvLVdpbGsgdsOgIEtvbG1vZ29yb3YtU21pcm5vdiwgdMOhYyBnaeG6oyB24bqrbiBjaMawYSB0aOG7gyB4w6FjIMSR4buLbmggxJHGsOG7o2MgcGjDom4gcGjhu5FpIGPhu6UgdGjhu4MgY+G7p2EgYmnhur9uIEdWUiBuw6puIHTDoWMgZ2nhuqMgdGnhur9uIGjDoG5oIG3DtCBwaOG7j25nIGJp4bq/biBHVlIgdGhlbyBjaHV54buDbiDEkeG7mW5nIEJyb3duOg0KICANCipDaHV54buDbiDEkeG7mW5nIEJyb3duOioNCg0KYGBge3J9DQpzZXQuc2VlZCgxMDApDQoNCmdibS5mID0gZnVuY3Rpb24obixTMCxtdSxzaWdtYSl7DQogIHQgPSAxDQogIHQucyA9IHNlcSgwLHQsbGVuZ3RoID0gbikNCiAgZHQgPSB0L24NCiAgQnQgPSBzcXJ0KHQpKmN1bXN1bShybm9ybSgobiksMCwxKSkNCiAgU3QgPSBTMCpleHAoKG11LXNpZ21hXjIvMikqdC5zICsgc2lnbWEqQnQpDQogIFN0ICMgS+G6v3QgcXXhuqMgY+G7p2EgR0JNDQp9DQpuIDwtIDEwMDAwDQpTMCA8LSBkYXRhJEdWUlsxXQ0KbXUgPC0gKDEvKG4qKDEvbikpKSpzdW0oZGF0YSRyX2d2cikgI3TDrW5oIGzhu6NpIG5odeG6rW4ga+G7syB24buNbmcgZ2nDoQ0Kc2lnbWEgPC0gc3FydCgoc3VtKChkYXRhJHJfZ3ZyLW11KV4yKSkqKDEvKG4tMSkqKDEvbikpKSAjdMOtbmggxJHhu5kgYmnhur9uIMSR4buZbmcgZ2nDoQ0KR1ZSIDwtIGdibS5mKG4sUzAsbXUsc2lnbWEpDQpwbG90KEdWUiwgdHlwZSA9ICdsJywgY29sID0gJ2JsdWUnLCBtYWluID0gIkdpw6EgY+G7lSBwaGnhur91IEdWUiIsIHlsYWIgPSAiVk7EkCIsIHhsYWIgPSAiTmfDoHkiKQ0KYGBgDQogIA0KICANCiMjIyBNw6MgY2jhu6luZyBraG/DoW4gTlZMDQoNCsSQ4buTIHRo4buLIEhpc3RvZ3JhbToNCmBgYHtyfQ0KaGlzdChkYXRhJE5WTCkNCmBgYA0KDQogICAgICDEkOG7kyB0aOG7iyBRUSBwbG90Og0KYGBge3J9DQpsaWJyYXJ5KHN0YXRzKQ0KcXFub3JtKGRhdGEkTlZMKQ0KcXFsaW5lKGRhdGEkTlZMKQ0KYGBgDQoqS2nhu4NtIMSR4buLbmggU2hhcGlyby1XaWxrIFRlc3Q6Kg0KICANClbhu5tpIGdp4bqjIHRodXnhur90IEgwOiBEw6N5IHPhu5EgbGnhu4d1IGPDsyBwaMOibiBwaOG7kWkgQ2h14bqpbg0KDQpgYGB7cn0NCnNoYXBpcm8udGVzdChkYXRhJE5WTCkNCmBgYA0KICBL4bq/dCBxdeG6oyBjaG8gdGjhuqV5IGdpw6EgdHLhu4sgdOG7m2kgaOG6oW4gUF92YWx1ZSA9IDEuMzA1ZS0wNSA8IDUlIG7Dqm4gY2jGsGEgY8OzIGPGoSBz4bufIMSR4buDIGNo4bqlcCBuaOG6rW4gZ2nhuqMgdGh1eeG6v3QgSG8gdOG7qWMgZ2nDoSBj4buVIHBoaeG6v3UgTlZMIGtow7RuZyBjw7MgdHXDom4gdGhlbyBwaMOibiBwaOG7kWkgY2h14bqpbi4NCg0KKktp4buDbSDEkeG7i25oIHBow6JuIHBo4buRaSDEkeG7gXU6Kg0KDQpHaeG6oyB0aHV54bq/dCBIbzogROG7ryBsaeG7h3UgdHXDom4gdGhlbyBxdXkgbHXhuq10IHBow6JuIHBo4buRaSDEkeG7gXUNCg0KYGBge3J9DQprcy50ZXN0KGRhdGEkTlZMLCB5ID0gInB1bmlmIikNCmBgYA0KICBL4bq/dCBxdeG6oyB0csOqbiBjaG8gdGjhuqV5IGdpw6EgdHLhu4sgdOG7m2kgaOG6oW4gUF92YWx1ZSA9IDIuMmUtMTYgPCA1JSBuw6puIGNoxrBhIGPDsyBjxqEgc+G7nyBjaOG6pXAgbmjhuq1uIGdp4bqjIHRodXnhur90IEhvIHbhuq15IGdpw6EgY+G7lSBwaGnhur91IE5WTCBraMO0bmcgdHXDom4gdGhlbyBxdXkgbHXhuq10IHBow6JuIHBo4buRaSDEkeG7gXUNCiAgDQogICBUaMO0bmcgcXVhIGPDoWMga2nhu4NtIMSR4buLbmggU2hhcGlyby1XaWxrIHbDoCBLb2xtb2dvcm92LVNtaXJub3YsIHTDoWMgZ2nhuqMgduG6q24gY2jGsGEgdGjhu4MgeMOhYyDEkeG7i25oIMSRxrDhu6NjIHBow6JuIHBo4buRaSBj4bulIHRo4buDIGPhu6dhIGJp4bq/biBOVkwgbsOqbiB0w6FjIGdp4bqjIHRp4bq/biBow6BuaCBtw7QgcGjhu49uZyBiaeG6v24gTlZMIHRoZW8gY2h1eeG7g24gxJHhu5luZyBCcm93bjoNCiAgDQoqQ2h1eeG7g24gxJHhu5luZyBCcm93bjoqDQoNCmBgYHtyfQ0Kc2V0LnNlZWQoMTAwKQ0KDQpnYm0uZiA9IGZ1bmN0aW9uKG4sUzAsbXUsc2lnbWEpew0KICB0ID0gMQ0KICB0LnMgPSBzZXEoMCx0LGxlbmd0aCA9IG4pDQogIGR0ID0gdC9uDQogIEJ0ID0gc3FydCh0KSpjdW1zdW0ocm5vcm0oKG4pLDAsMSkpDQogIFN0ID0gUzAqZXhwKChtdS1zaWdtYV4yLzIpKnQucyArIHNpZ21hKkJ0KQ0KICBTdCAjIEvhur90IHF14bqjIGPhu6dhIEdCTQ0KfQ0KbiA8LSAxMDAwMA0KUzAgPC0gZGF0YSRHVlJbMV0NCm11IDwtICgxLyhuKigxL24pKSkqc3VtKGRhdGEkcl9udmwpICN0w61uaCBs4bujaSBuaHXhuq1uIGvhu7MgduG7jW5nIGdpw6ENCnNpZ21hIDwtIHNxcnQoKHN1bSgoZGF0YSRyX252bC1tdSleMikpKigxLyhuLTEpKigxL24pKSkgI3TDrW5oIMSR4buZIGJp4bq/biDEkeG7mW5nIGdpw6ENCk5WTCA8LSBnYm0uZihuLFMwLG11LHNpZ21hKQ0KcGxvdChOVkwsIHR5cGUgPSAnbCcsIGNvbCA9ICdibHVlJywgbWFpbiA9ICJHacOhIGPhu5UgcGhp4bq/dSBOVkwiLCB5bGFiID0gIlZOxJAiLCB4bGFiID0gIk5nw6B5IikNCmBgYA0KICANCiMjIyBNw6MgY2jhu6luZyBraG/DoW4gU1NJDQoNCsSQ4buTIHRo4buLIEhpc3RvZ3JhbToNCmBgYHtyfQ0KaGlzdChkYXRhJFNTSSkNCmBgYA0KICDEkOG7kyB0aOG7iyBRUSBwbG90Og0KYGBge3J9DQpsaWJyYXJ5KHN0YXRzKQ0KcXFub3JtKGRhdGEkU1NJKQ0KcXFsaW5lKGRhdGEkU1NJKQ0KYGBgDQoqS2nhu4NtIMSR4buLbmggU2hhcGlyby1XaWxrIFRlc3Q6Kg0KICANClbhu5tpIGdp4bqjIHRodXnhur90IEgwOiBEw6N5IHPhu5EgbGnhu4d1IGPDsyBwaMOibiBwaOG7kWkgQ2h14bqpbg0KDQpgYGB7cn0NCnNoYXBpcm8udGVzdChkYXRhJFNTSSkNCmBgYA0KICBL4bq/dCBxdeG6oyBjaG8gdGjhuqV5IGdpw6EgdHLhu4sgdOG7m2kgaOG6oW4gUF92YWx1ZSA9IDguNTU1ZS0wNiA8IDUlIG7Dqm4gY2jGsGEgY8OzIGPGoSBz4bufIMSR4buDIGNo4bqlcCBuaOG6rW4gZ2nhuqMgdGh1eeG6v3QgSG8gdOG7qWMgZ2nDoSBj4buVIHBoaeG6v3UgU1NJIGtow7RuZyBjw7MgdHXDom4gdGhlbyBwaMOibiBwaOG7kWkgY2h14bqpbi4NCiAgDQoqS2nhu4NtIMSR4buLbmggcGjDom4gcGjhu5FpIMSR4buBdToqDQoNCkdp4bqjIHRodXnhur90IEhvOiBE4buvIGxp4buHdSB0dcOibiB0aGVvIHF1eSBsdeG6rXQgcGjDom4gcGjhu5FpIMSR4buBdQ0KDQpgYGB7cn0NCmtzLnRlc3QoZGF0YSRTU0ksIHkgPSAicHVuaWYiKQ0KYGBgDQogIEvhur90IHF14bqjIHRyw6puIGNobyB0aOG6pXkgZ2nDoSB0cuG7iyB04bubaSBo4bqhbiBQX3ZhbHVlID0gMi4yZS0xNiA8IDUlIG7Dqm4gY2jGsGEgY8OzIGPGoSBz4bufIGNo4bqlcCBuaOG6rW4gZ2nhuqMgdGh1eeG6v3QgSG8gduG6rXkgZ2nDoSBj4buVIHBoaeG6v3UgU1NJIGtow7RuZyB0dcOibiB0aGVvIHF1eSBsdeG6rXQgcGjDom4gcGjhu5FpIMSR4buBdQ0KICANCiAgVGjDtG5nIHF1YSBjw6FjIGtp4buDbSDEkeG7i25oIFNoYXBpcm8tV2lsayB2w6AgS29sbW9nb3Jvdi1TbWlybm92LCB0w6FjIGdp4bqjIHbhuqtuIGNoxrBhIHRo4buDIHjDoWMgxJHhu4tuaCDEkcaw4bujYyBwaMOibiBwaOG7kWkgY+G7pSB0aOG7gyBj4bunYSBiaeG6v24gU1NJIG7Dqm4gdMOhYyBnaeG6oyB0aeG6v24gaMOgbmggbcO0IHBo4buPbmcgYmnhur9uIFNTSSB0aGVvIGNodXnhu4NuIMSR4buZbmcgQnJvd246DQogIA0KKkNodXnhu4NuIMSR4buZbmcgQnJvd246Kg0KDQpgYGB7cn0NCnNldC5zZWVkKDEwMCkNCg0KZ2JtLmYgPSBmdW5jdGlvbihuLFMwLG11LHNpZ21hKXsNCiAgdCA9IDENCiAgdC5zID0gc2VxKDAsdCxsZW5ndGggPSBuKQ0KICBkdCA9IHQvbg0KICBCdCA9IHNxcnQodCkqY3Vtc3VtKHJub3JtKChuKSwwLDEpKQ0KICBTdCA9IFMwKmV4cCgobXUtc2lnbWFeMi8yKSp0LnMgKyBzaWdtYSpCdCkNCiAgU3QgIyBL4bq/dCBxdeG6oyBj4bunYSBHQk0NCn0NCm4gPC0gMTAwMDANClMwIDwtIGRhdGEkU1NJWzFdDQptdSA8LSAoMS8obiooMS9uKSkpKnN1bShkYXRhJHJfc3NpKSAjdMOtbmggbOG7o2kgbmh14bqtbiBr4buzIHbhu41uZyBnacOhDQpzaWdtYSA8LSBzcXJ0KChzdW0oKGRhdGEkcl9zc2ktbXUpXjIpKSooMS8obi0xKSooMS9uKSkpICN0w61uaCDEkeG7mSBiaeG6v24gxJHhu5luZyBnacOhDQpTU0kgPC0gZ2JtLmYobixTMCxtdSxzaWdtYSkNCnBsb3QoU1NJLCB0eXBlID0gJ2wnLCBjb2wgPSAnYmx1ZScsIG1haW4gPSAiR2nDoSBj4buVIHBoaeG6v3UgU1NJIiwgeWxhYiA9ICJWTsSQIiwgeGxhYiA9ICJOZ8OgeSIpDQpgYGANCiAgDQogIA0KIyMjIE3DoyBjaOG7qW5nIGtob8OhbiBWTk0NCg0KxJDhu5MgdGjhu4sgSGlzdG9ncmFtOg0KYGBge3J9DQpoaXN0KGRhdGEkVk5NKQ0KYGBgDQogIMSQ4buTIHRo4buLIFFRIHBsb3Q6DQpgYGB7cn0NCmxpYnJhcnkoc3RhdHMpDQpxcW5vcm0oZGF0YSRWTk0pDQpxcWxpbmUoZGF0YSRWTk0pDQpgYGANCipLaeG7g20gxJHhu4tuaCBTaGFwaXJvLVdpbGsgVGVzdDoqDQogIA0KVuG7m2kgZ2nhuqMgdGh1eeG6v3QgSDA6IETDo3kgc+G7kSBsaeG7h3UgY8OzIHBow6JuIHBo4buRaSBDaHXhuqluDQoNCmBgYHtyfQ0Kc2hhcGlyby50ZXN0KGRhdGEkVk5NKQ0KYGBgDQogIEvhur90IHF14bqjIGNobyB0aOG6pXkgZ2nDoSB0cuG7iyB04bubaSBo4bqhbiBQX3ZhbHVlID0gMC4wMDAxMzMgPCA1JSBuw6puIGNoxrBhIGPDsyBjxqEgc+G7nyDEkeG7gyBjaOG6pXAgbmjhuq1uIGdp4bqjIHRodXnhur90IEhvIHThu6ljIGdpw6EgY+G7lSBwaGnhur91IFZOTSBraMO0bmcgY8OzIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIGNodeG6qW4uDQogIA0KKktp4buDbSDEkeG7i25oIHBow6JuIHBo4buRaSDEkeG7gXU6Kg0KDQpHaeG6oyB0aHV54bq/dCBIbzogROG7ryBsaeG7h3UgdHXDom4gdGhlbyBxdXkgbHXhuq10IHBow6JuIHBo4buRaSDEkeG7gXUNCg0KYGBge3J9DQprcy50ZXN0KGRhdGEkVk5NLCB5ID0gInB1bmlmIikNCmBgYA0KICBL4bq/dCBxdeG6oyB0csOqbiBjaG8gdGjhuqV5IGdpw6EgdHLhu4sgdOG7m2kgaOG6oW4gUF92YWx1ZSA9IDIuMmUtMTYgPCA1JSBuw6puIGNoxrBhIGPDsyBjxqEgc+G7nyBjaOG6pXAgbmjhuq1uIGdp4bqjIHRodXnhur90IEhvIHbhuq15IGdpw6EgY+G7lSBwaGnhur91IFZOTSBraMO0bmcgdHXDom4gdGhlbyBxdXkgbHXhuq10IHBow6JuIHBo4buRaSDEkeG7gXUuDQogIA0KICBUaMO0bmcgcXVhIGPDoWMga2nhu4NtIMSR4buLbmggU2hhcGlyby1XaWxrIHbDoCBLb2xtb2dvcm92LVNtaXJub3YsIHTDoWMgZ2nhuqMgduG6q24gY2jGsGEgdGjhu4MgeMOhYyDEkeG7i25oIMSRxrDhu6NjIHBow6JuIHBo4buRaSBj4bulIHRo4buDIGPhu6dhIGJp4bq/biBWTk0gbsOqbiB0w6FjIGdp4bqjIHRp4bq/biBow6BuaCBtw7QgcGjhu49uZyBiaeG6v24gVk5NIHRoZW8gY2h1eeG7g24gxJHhu5luZyBCcm93bjoNCiAgDQoqQ2h1eeG7g24gxJHhu5luZyBCcm93bjoqDQoNCmBgYHtyfQ0Kc2V0LnNlZWQoMTAwKQ0KDQpnYm0uZiA9IGZ1bmN0aW9uKG4sUzAsbXUsc2lnbWEpew0KICB0ID0gMQ0KICB0LnMgPSBzZXEoMCx0LGxlbmd0aCA9IG4pDQogIGR0ID0gdC9uDQogIEJ0ID0gc3FydCh0KSpjdW1zdW0ocm5vcm0oKG4pLDAsMSkpDQogIFN0ID0gUzAqZXhwKChtdS1zaWdtYV4yLzIpKnQucyArIHNpZ21hKkJ0KQ0KICBTdCAjIEvhur90IHF14bqjIGPhu6dhIEdCTQ0KfQ0KbiA8LSAxMDAwMA0KUzAgPC0gZGF0YSRHVlJbMV0NCm11IDwtICgxLyhuKigxL24pKSkqc3VtKGRhdGEkcl92bm0pICN0w61uaCBs4bujaSBuaHXhuq1uIGvhu7MgduG7jW5nIGdpw6ENCnNpZ21hIDwtIHNxcnQoKHN1bSgoZGF0YSRyX3ZubS1tdSleMikpKigxLyhuLTEpKigxL24pKSkgI3TDrW5oIMSR4buZIGJp4bq/biDEkeG7mW5nIGdpw6ENClZOTSA8LSBnYm0uZihuLFMwLG11LHNpZ21hKQ0KcGxvdChWTk0sIHR5cGUgPSAnbCcsIGNvbCA9ICdibHVlJywgbWFpbiA9ICJHacOhIGPhu5UgcGhp4bq/dSBWTk0iLCB5bGFiID0gIlZOxJAiLCB4bGFiID0gIk5nw6B5IikNCmBgYA0KICANCiMjIE3DtCBwaOG7j25nIFThu5VuZyBnacOhIHRy4buLIGRhbmggbeG7pWMgxJHhuqd1IHTGsA0KDQpgYGB7cn0NClRHVERNxJBUIDwtIDEwMDAqQUNCICsgMTAwMCpGUFQgKyAxMDAwKkdWUiArIDEwMDAqTlZMICsgMTAwMCpTU0kgKyAxMDAwKlZOTQ0KYGBgDQoqQmnhu4N1IMSR4buTIDoqDQoNCmBgYHtyfQ0KcGxvdChUR1RETcSQVCwgdHlwZSA9ICdsJywgY29sID0gJ3JlZCcsIG1haW4gPSAiVOG7lW5nIGdpw6EgdHLhu4sgZGFuaCBt4bulYyDEkeG6p3UgdMawIDYgY+G7lSBwaGnhur91IHRyb25nIHLhu5UgVk4zMCIsIHlsYWIgPSAiVk7EkCIsIHhsYWIgPSAiTmfDoHkiKQ0KYGBgDQoNCg0KYGBge3J9DQpzdW1tYXJ5KFRHVERNxJBUKQ0KYGBgDQpTYXUga2hpIG3DtCBwaOG7j25nIGdpw6EgdHLhu4sgZGFuaCBt4bulYyDEkeG6p3UgdMawIGfhu5NtIDYgY+G7lSBwaGnhur91IGzhu5tuIHRyb25nIHLhu5UgVk4zMCB0cm9uZyB2w7JuZyAxMDAwMCBuZ8OgeSB04bubaSBr4buDIHThu6sgbmfDoHkgMzAvMDYvMjAyMywgdGEgdGjhuqV5IFThu5VuZyBnacOhIHRy4buLIGRhbmggbeG7pWMgxJHhuqd1IHTGsCBjw7MgZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaCBsw6AgMTc1LjkxMS41MDQgVk5EIHbDoCBjw7MgZ2nDoSB0cuG7iyB0cnVuZyB24buLIGzDoCAxNzUuNDIzLjc2OSBWTkQuIFRyb25nIDEwMDAwIG5nw6B5IHThu5tpLCBU4buVbmcgZ2nDoSB0cuG7iyBkYW5oIG3hu6VjIMSR4bqndSB0xrAgxJHhuqF0IGdpw6EgdHLhu4sgbOG7m24gbmjhuqV0IGzDoCAxODYuODEyLjE4NSBWTkQgdsOgIG5o4buPIG5o4bqldCBsw6AgMTY2LjE4OC43ODUgVk5ELiBUaMO0bmcgcXVhIGJp4buDdSDEkeG7kywgdGEgdGjhuqV5IHPhu7EgYmnhur9uIMSR4buZbmcgVOG7lW5nIGdpw6EgdHLhu4sgZGFuaCBt4bulYyDEkeG6p3UgdMawIGPDsyB4dSBoxrDhu5tuZyB0xINuZyBt4bqhbmggdHJvbmcgMTAwMDAgbmfDoHkgdOG7m2kuDQoNCg0KIyMgUXV5IMaw4bubYyB24buBIFThu5VuZyBnacOhIHRy4buLIGRhbmggbeG7pWMgxJHhuqd1IHTGsA0KICANClRhIHF1eSDGsOG7m2M6DQoNCiAgdOG6oWkgbeG7qWMgYuG6sW5nIDE3NjAwMDAwMCBWTsSQIGzDoCBnacOhIHRy4buLIGRhbmggbeG7pWMgaG/DoCB24buRbiAoZGFuaG11Y2hvYXZvbiA9IDE3NjAwMDAwMCkNCiAgICAgICAgICAgIA0KICB04bqhaSBt4bupYyBs4bubbiBoxqFuIDE3NjAwMDAwMCBWTsSQIGzDoCAgZGFuaCBt4bulYyBjw7MgbOG7nWkgKGRhbmhtdWNjb2xvaSA+IDE3NjAwMDAwMCkNCiAgICAgICAgICAgIA0KICB04bqhaSBt4bupYyBuaOG7jyBoxqFuIDE3NjAwMDAwMCBWTsSQIGzDoCAgZGFuaCBt4bulYyBi4buLIGzhu5cgKGRhbmhtdWNiaWxvIDwgMTc2MDAwMDAwKQ0KICAgICAgICAgICAgICANCmBgYHtyfQ0KZGFuaG11Y2hvYXZvbiA8LSBUR1RETcSQVFtUR1RETcSQVCA9IDE3NjAwMDAwMF0NCg0KZGFuaG11Y2NvbG9pIDwtIFRHVERNxJBUW1RHVERNxJBUID4gMTc2MDAwMDAwXQ0KDQpkYW5obXVjYmlsbyA8LSBUR1RETcSQVFtUR1RETcSQVCA8IDE3NjAwMDAwMF0NCmBgYA0KDQpgYGB7cn0NCg0KdGFibGUoY3V0KFRHVERNxJBULCAyLCBsYWJlbHMgPSBjKCdjb2xvaScsJ2JpbG8nKSkpDQpgYGANCmBgYHtyfQ0KdGFibGUoY3V0KFRHVERNxJBULzEwMDAsMikpDQpgYGANCg0KIyMgWMOhYyBzdeG6pXQgxJHhu4MgVOG7lW5nIGdpw6EgdHLhu4sgZGFuaCBt4bulYyDEkeG6p3UgdMawIG5o4bqtbiBjw6FjIGdpw6EgdHLhu4sgcXV5IMaw4bubYw0KDQoqWMOhYyBzdeG6pXQgxJHhu4MgVEdURE3EkFQgY8OzIGzhu51pOioNCg0KYGBge3J9DQpsZW5ndGgoZGFuaG11Y2NvbG9pKS9sZW5ndGgoVEdURE3EkFQpDQpgYGANCiAgDQogIFThu6sga+G6v3QgcXXhuqMgdHLDqm4gdGEgY8OzIHjDoWMgc3XhuqV0IMSR4buDIFThu5VuZyBnacOhIHRy4buLIGRhbmggbeG7pWMgxJHhuqd1IHTGsCBjw7MgbOG7nWkgbMOgIDQ3LDc5JSB04bupYyB0cm9uZyAxMDAwMCBuZ8OgeSB04bubaSBr4buDIHThu6sgbmfDoHkgMzAvMDYvMjAyMyB4w6FjIHN14bqldCDEkeG7gyB04buVbmcgZ2nDoSB0cuG7iyBkYW5oIG3hu6VjIMSR4bqndSB0xrAgbOG7m24gaMahbiBsw6AgMTc2MDAwMDAwIFZOxJAgbMOgIDQ3LDc5JS4gVGEgdGjhuqV5IMSRw6J5IGzDoCBt4bupYyB4w6FjIHN14bqldCBjaMawYSB0aOG7sWMgc+G7sSBs4bubbiBuw6puIGPDsyB0aOG7gyBuw7NpIG7hur91IG3DtCBwaOG7j25nIG5n4bqrdSBuaGnDqm4gZ2nDoSDEkcOzbmcgY+G7rWEgY+G7p2EgNiBj4buVIHBoaeG6v3UgQUNCLCBGUFQsIEdWUiwgTlZMLCBTU0ksIFZOTSB0cm9uZyAxMDAwMCBuZ8OgeSB0w7NpIGvhu4MgdOG7qyBuZ8OgeSAzMC8wNi8yMDIzIHRow6wgdOG7lW5nIGdpw6EgdHLhu4sgZGFuaCBt4bulYyDEkeG6p3UgdMawIHPhur0gY8OzIGzhu51pIGzDoCBjaMawYSB0aOG7sWMgc+G7sSBraOG6oyB0aGkuDQogIA0KKljDoWMgc3XhuqV0IMSR4buDIFRHVERNxJBUIGLhu4sgbOG7lzoqDQoNCmBgYHtyfQ0KbGVuZ3RoKGRhbmhtdWNiaWxvKS9sZW5ndGgoVEdURE3EkFQpDQpgYGANCiAgVOG7qyBr4bq/dCBxdeG6oyB0csOqbiB0YSBjw7MgeMOhYyBzdeG6pXQgxJHhu4MgVOG7lW5nIGdpw6EgdHLhu4sgZGFuaCBt4bulYyDEkeG6p3UgdMawIGLhu4sgbOG7lyBsw6AgNTIsMjElIHThu6ljIHRyb25nIDEwMDAwIG5nw6B5IHThu5tpIGvhu4MgdOG7qyBuZ8OgeSAzMC8wNi8yMDIzIHjDoWMgc3XhuqV0IMSR4buDIHThu5VuZyBnacOhIHRy4buLIGRhbmggbeG7pWMgxJHhuqd1IHTGsCBuaOG7jyBoxqFuIGzDoCAxNzYwMDAwMDAgVk7EkCBsw6AgNTIsMjElLiBDw7MgdGjhu4MgbsOzaSBu4bq/dSBtw7QgcGjhu49uZyBuZ+G6q3Ugbmhpw6puIGdpw6EgxJHDs25nIGPhu61hIGPhu6dhIDYgY+G7lSBwaGnhur91IEFDQiwgRlBULCBHVlIsIE5WTCwgU1NJLCBWTk0gdHJvbmcgMTAwMDAgbmfDoHkgdOG7m2kga+G7gyB04burIG5nw6B5IDMwLzA2LzIwMjMgdGjDrCB04buVbmcgZ2nDoSB0cuG7iyBkYW5oIG3hu6VjIMSR4bqndSB0xrAgYuG7iyBs4buXIGzDoCBjw7Mga2jhuqMgbsSDbmcuDQogIA0K