Link: https://docs.google.com/document/d/1Z_gk9QcrWzWBEB9pTso4e1XyTSmHWZbB/edit?usp=sharing&ouid=112984052592042481194&rtpof=true&sd=true

ND <- read.csv("D:/MPNN/Nasdaq.csv")
str(ND)
## 'data.frame':    1055 obs. of  6 variables:
##  $ ND100: num  6913 6892 6949 7062 6795 ...
##  $ FS100: num  7005 7039 6980 7062 7023 ...
##  $ DOLLA: num  96.2 96.2 96.7 96.4 96.3 ...
##  $ BIT  : num  4265 4296 4040 3898 3958 ...
##  $ WTI  : num  50.3 51.5 50.9 53 53.2 ...
##  $ GOLD : num  1224 1230 1226 1240 1247 ...

2 Nhiệm vụ 5 + 6:

2.1 Mô phỏng các biến

Để mô phỏng các biến đầu vào, tác giả sử dụng hàm ‘sample’ để tạo ra một mẫu ngẫu nhiên từ chuỗi dữ liệu gốc với kích thước mẫu là 10000 quan sát.

2.1.1 Mô phỏng biến FS100

set.seed(123)
# Tạo bảng tần suất
FS <- table(cut(ND$FS100, 40, include.lowest = TRUE))

a1 <- runif(1, 4.99e+03,5.07e+03)
a2 <- runif(1, 5.07e+03,5.14e+03)
a3 <- runif(1, 5.14e+03,5.22e+03)
a4 <- runif(1, 5.22e+03,5.3e+03)
a5 <- runif(1, 5.3e+03,5.37e+03)
a6 <- runif(1, 5.37e+03,5.45e+03)
a7 <- runif(1, 5.45e+03,5.52e+03)
a8 <- runif(1, 5.52e+03,5.6e+03)
a9 <- runif(1, 5.6e+03,5.67e+03)
a10 <- runif(1, 5.67e+03,5.75e+03)
a11 <- runif(1, 5.75e+03,5.82e+03)
a12 <- runif(1, 5.82e+03,5.9e+03)
a13 <- runif(1, 5.9e+03,5.97e+03)
a14 <- runif(1, 5.97e+03,6.05e+03)
a15 <- runif(1, 6.05e+03,6.13e+03)
a16 <- runif(1, 6.13e+03,6.2e+03)
a17 <- runif(1, 6.2e+03,6.28e+03)
a18 <- runif(1, 6.28e+03,6.35e+03)
a19 <- runif(1, 6.35e+03,6.43e+03)
a20 <- runif(1, 6.43e+03,6.5e+03)
a21 <- runif(1, 6.5e+03,6.58e+03)
a22 <- runif(1, 6.58e+03,6.65e+03)
a23 <- runif(1, 6.65e+03,6.73e+03)
a24 <- runif(1, 6.73e+03,6.81e+03)
a25 <- runif(1, 6.81e+03,6.88e+03)
a26 <- runif(1, 6.88e+03,6.96e+03)
a27 <- runif(1, 6.96e+03,7.03e+03)
a28 <- runif(1, 7.03e+03,7.11e+03)
a29 <- runif(1, 7.11e+03,7.18e+03)
a30 <- runif(1, 7.18e+03,7.26e+03)
a31 <- runif(1, 7.26e+03,7.33e+03)
a32 <- runif(1, 7.33e+03,7.41e+03)
a33 <- runif(1, 7.41e+03,7.48e+03)
a34 <- runif(1, 7.48e+03,7.56e+03)
a35 <- runif(1, 7.56e+03,7.64e+03)
a36 <- runif(1, 7.64e+03,7.71e+03)
a37 <- runif(1, 7.71e+03,7.79e+03)
a38 <- runif(1, 7.79e+03,7.86e+03)
a39 <- runif(1, 7.86e+03,7.94e+03)
a40 <- runif(1, 7.94e+03,8.02e+03)

FTSE <- c(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35,a36,a37,a38,a39,a40)

# Mô phỏng dữ liệu mới dựa trên bảng tần suất
FS100 <- sample(as.numeric(FTSE), size = 10000, replace = TRUE, prob = prop.table(FTSE))
hist(FS100)

2.1.2 Mô phỏng biến BIT

set.seed(123)
# Tạo bảng tần suất
BC <- table(cut(ND$BIT, 40, include.lowest = TRUE))

b1 <- runif(1, 3.18e+03,4.85e+03)
b2 <- runif(1, 4.85e+03,6.46e+03)
b3 <- runif(1, 6.46e+03,8.07e+03)
b4 <- runif(1, 8.07e+03,9.68e+03)
b5 <- runif(1, 9.68e+03,1.13e+04)
b6 <- runif(1, 1.13e+04,1.29e+04)
b7 <- runif(1, 1.29e+04,1.45e+04)
b8 <- runif(1, 1.45e+04,1.61e+04)
b9 <- runif(1, 1.61e+04,1.77e+04)
b10 <- runif(1, 1.77e+04,1.93e+04)
b11 <- runif(1, 1.93e+04,2.09e+04)
b12 <- runif(1, 2.09e+04,2.25e+04)
b13 <- runif(1, 2.25e+04,2.41e+04)
b14 <- runif(1, 2.41e+04,2.57e+04)
b15 <- runif(1, 2.57e+04,2.74e+04)
b16 <- runif(1, 2.74e+04,2.9e+04)
b17 <- runif(1, 2.9e+04,3.06e+04)
b18 <- runif(1, 3.06e+04,3.22e+04)
b19 <- runif(1, 3.22e+04,3.38e+04)
b20 <- runif(1, 3.38e+04,3.54e+04)
b21 <- runif(1, 3.54e+04,3.7e+04)
b22 <- runif(1, 3.7e+04,3.86e+04)
b23 <- runif(1, 3.86e+04,4.02e+04)
b24 <- runif(1, 4.02e+04,4.18e+04)
b25 <- runif(1, 4.18e+04,4.34e+04)
b26 <- runif(1, 4.34e+04,4.5e+04)
b27 <- runif(1, 4.5e+04,4.66e+04)
b28 <- runif(1, 4.66e+04,4.82e+04)
b29 <- runif(1, 4.82e+04,4.99e+04)
b30 <- runif(1, 4.99e+04,5.15e+04)
b31 <- runif(1, 5.15e+04,5.31e+04)
b32 <- runif(1, 5.31e+04,5.47e+04)
b33 <- runif(1, 5.47e+04,5.63e+04)
b34 <- runif(1, 5.63e+04,5.79e+04)
b35 <- runif(1, 5.79e+04,5.95e+04)
b36 <- runif(1, 5.95e+04,6.11e+04)
b37 <- runif(1, 6.11e+04,6.27e+04)
b38 <- runif(1, 6.27e+04,6.43e+04)
b39 <- runif(1, 6.43e+04,6.59e+04)
b40 <- runif(1, 6.59e+04,6.76e+04)

BT <- c(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25,b26,b27,b28,b29,b30,b31,b32,b33,b34,b35,b36,b37,b38,b39,b40)

# Mô phỏng dữ liệu mới dựa trên bảng tần suất
BIT <- sample(as.numeric(BT), size = 10000, replace = TRUE, prob = prop.table(BT))
hist(BIT)

2.1.3 Mô phỏng biến GOLD

set.seed(123)
# Tạo bảng tần suất
VANG <- table(cut(ND$GOLD, 40, include.lowest = TRUE))

e1 <- runif(1, 1.22e+03,1.24e+03)
e2 <- runif(1, 1.24e+03,1.27e+03)
e3 <- runif(1, 1.27e+03,1.29e+03)
e4 <- runif(1, 1.29e+03,1.31e+03)
e5 <- runif(1, 1.31e+03,1.33e+03)
e6 <- runif(1, 1.33e+03,1.35e+03)
e7 <- runif(1, 1.35e+03,1.37e+03)
e8 <- runif(1, 1.37e+03,1.39e+03)
e9 <- runif(1, 1.39e+03,1.41e+03)
e10 <- runif(1, 1.41e+03,1.44e+03)
e11 <- runif(1, 1.44e+03,1.46e+03)
e12 <- runif(1, 1.46e+03,1.48e+03)
e13 <- runif(1, 1.48e+03,1.5e+03)
e14 <- runif(1, 1.5e+03,1.52e+03)
e15 <- runif(1, 1.52e+03,1.54e+03)
e16 <- runif(1, 1.54e+03,1.56e+03)
e17 <- runif(1, 1.56e+03,1.58e+03)
e18 <- runif(1, 1.58e+03,1.6e+03)
e19 <- runif(1, 1.6e+03,1.63e+03)
e20 <- runif(1, 1.63e+03,1.65e+03)
e21 <- runif(1, 1.65e+03,1.67e+03)
e22 <- runif(1, 1.67e+03,1.69e+03)
e23 <- runif(1, 1.69e+03,1.71e+03)
e24 <- runif(1, 1.71e+03,1.73e+03)
e25 <- runif(1, 1.73e+03,1.75e+03)
e26 <- runif(1, 1.75e+03,1.77e+03)
e27 <- runif(1, 1.77e+03,1.79e+03)
e28 <- runif(1, 1.79e+03,1.82e+03)
e29 <- runif(1, 1.82e+03,1.84e+03)
e30 <- runif(1, 1.84e+03,1.86e+03)
e31 <- runif(1, 1.86e+03,1.88e+03)
e32 <- runif(1, 1.88e+03,1.9e+03)
e33 <- runif(1, 1.9e+03,1.92e+03)
e34 <- runif(1, 1.92e+03,1.94e+03)
e35 <- runif(1, 1.94e+03,1.96e+03)
e36 <- runif(1, 1.96e+03,1.98e+03)
e37 <- runif(1, 1.98e+03,2.01e+03)
e38 <- runif(1, 2.01e+03,2.03e+03)
e39 <- runif(1, 2.03e+03,2.05e+03)
e40 <- runif(1, 2.05e+03,2.07e+03)

V <- c(e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12,e13,e14,e15,e16,e17,e18,e19,e20,e21,e22,e23,e24,e25,e26,e27,e28,e29,e30,e31,e32,e33,e34,e35,e36,e37,e38,e39,e40)

# Mô phỏng dữ liệu mới dựa trên bảng tần suất
GOLD <- sample(as.numeric(V), size = 10000, replace = TRUE, prob = prop.table(V))
hist(GOLD)

2.1.4 Mô phỏng biến WTI

set.seed(123)
# Tạo bảng tần suất
DT <- table(cut(ND$WTI, 40, include.lowest = TRUE))

f1 <- runif(1, 9.9,12.9)
f2 <- runif(1, 12.9,15.7)
f3 <- runif(1, 15.7,18.5)
f4 <- runif(1, 18.5,21.4)
f5 <- runif(1, 21.4,24.2)
f6 <- runif(1, 24.2,27.1)
f7 <- runif(1, 27.1,29.9)
f8 <- runif(1, 29.9,32.7)
f9 <- runif(1, 32.7,35.6)
f10 <- runif(1, 35.6,38.4)
f11 <- runif(1, 38.4,41.3)
f12 <- runif(1, 41.3,44.1)
f13 <- runif(1, 44.1,47)
f14 <- runif(1, 47,49.8)
f15 <- runif(1, 49.8,52.6)
f16 <- runif(1, 52.6,55.5)
f17 <- runif(1, 55.5,58.3)
f18 <- runif(1, 58.3,61.2)
f19 <- runif(1, 61.2,64)
f20 <- runif(1, 64,66.9)
f21 <- runif(1, 66.9,69.7)
f22 <- runif(1, 69.7,72.5)
f23 <- runif(1, 72.5,75.4)
f24 <- runif(1, 75.4,78.2)
f25 <- runif(1, 78.2,81.1)
f26 <- runif(1, 81.1,83.9)
f27 <- runif(1, 83.9,86.8)
f28 <- runif(1, 86.8,89.6)
f29 <- runif(1, 89.6,92.4)
f30 <- runif(1, 92.4,95.3)
f31 <- runif(1, 95.3,98.1)
f32 <- runif(1, 98.1,101)
f33 <- runif(1, 101,104)
f34 <- runif(1, 104,107)
f35 <- runif(1, 107,109)
f36 <- runif(1, 109,112)
f37 <- runif(1, 112,115)
f38 <- runif(1, 115,118)
f39 <- runif(1, 118,121)
f40 <- runif(1, 121,124)

DAU <- c(f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34,f35,f36,f37,f38,f39,f40)

# Mô phỏng dữ liệu mới dựa trên bảng tần suất
WTI <- sample(as.numeric(DAU), size = 10000, replace = TRUE, prob = prop.table(DAU))
hist(WTI)

2.2 Chạy mô phỏng

Giả sử ta sẽ mô phỏng chỉ số Nasdaq 100 trong 10000 phiên giao dịch mới. Ta có mô hình mô phỏng ND100 với các hệ số hồi quy như sau:

\[ND100= (-3.923e+03) + (2.500e-01)FS100 + (9.694e-02)BIT + (6.308e+00)GOLD + (7.160e+00)WTI\]

ND100 <- (-3.923e+03) + (2.500e-01)*FS100 + (9.694e-02)*BIT + (6.308e+00)*GOLD + (7.160e+00)*WTI
hist(ND100)

summary(ND100)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    5494   10855   13737   13365   16284   18325

Dựa vào kết quả thống kê mô tả của dữ liệu mô phỏng chỉ số Nasdaq 100 với 10000 quan sát ta thấy chỉ số Nasdaq 100 được mô phỏng dao động từ 5494 điểm đến 18325 điểm, giá trung bình là 13365 điểm.

2.2.1 Kết quả phân bố BIT

Tác giả đưa ra một chuỗi quy tắc để phân loại các quan sát được mô phỏng dựa trên giá trị của chúng. Cụ thể, nếu giá trị của một quan sát nhỏ hơn 10000 điểm thì sẽ được gán vào hạng “thấp”, các quan sát có giá trị từ 10000 điểm đến 15000 điểm sẽ được xem xét ở hạng “vừa”, các quan sát có giá trị lớn hơn 15000 điểm sẽ được phân loại vào hạng “cao”.

ND100 <- (-3.923e+03) + (2.500e-01)*FS100 + (9.694e-02)*BIT + (6.308e+00)*GOLD + (7.160e+00)*WTI
NDthap <- ND100[ND100 <= 10000]
length(NDthap) #ND100 thấp
## [1] 1984
NDvua <- ND100[ND100 > 10000 & ND100 < 16000]
length(NDvua) #ND100 vừa
## [1] 5026
NDcao <- ND100[ND100 >= 15000]
length(NDcao) #ND100 cao
## [1] 3805

Dựa trên kết quả của mô phỏng với 10000 quan sát, ta thấy rằng có tổng cộng 1984 quan sát thuộc hạng “thấp” về chỉ số Nasdaq 100, 5026 quan sát thuộc hạng “vừa”, và 3805 quan sát thuộc hạng “cao”.

2.2.2 Khả năng lời/lỗ khi đầu tư

Xét ở thời điểm hiện tại (ngày 03/07/2023) thì chỉ số Nasdaq 100 có giá trị là 15208.69 điểm. Giả sử ta đầu tư vào chỉ số Nasdaq 100, nếu chỉ số Nasdaq 100 tăng lên hơn 10% (16729.56 điểm) thì được tính là lời, giảm hơn 10% (13687.82 điểm) thì tính là lỗ và nằm trong biên độ giao động ±10% (từ 13687.82 điểm đến 16729.56 điểm) thì được tính là hoà vốn.

Đầu tư lỗ

DTlo <- ND100[ND100 < 13687.82]
length(DTlo)
## [1] 4815

Đầu tư hòa vốn

DThoa <- ND100[ND100 >= 13687.82 & ND100 <= 16729.56]
length(DThoa) 
## [1] 3078

Đầu tư lời

DTloi <- ND100[ND100 > 16729.56]
length(DTloi)
## [1] 2107
dt1<- data.frame(Category = c("lỗ", "hòa vốn", "lời"), Value = c(0.4815,0.3078,0.2107))

library('ggplot2')
ggplot(dt1, aes(x = Category, y = Value)) +
  geom_bar(stat = "identity") +
  labs(x = "Categories", y = "Values", title = "Đồ thị phân tích khả năng đầu tư lời/lỗ của chỉ số Nasdaq 100")

Dựa vào kết quả đã cung cấp, ta có thể thấy rằng tỷ lệ đầu tư dẫn đến lỗ là 48.15%, tỷ lệ đầu tư dẫn đến hoà vốn là 30.78%, và tỷ lệ đầu tư dẫn đến lời là 21.07%. Tuy nhiên, trong thực tế khi xem xét sự lợi/lỗ trong quá trình đầu tư trong một khoảng thời gian, ta thường coi các giá trị hoà vốn như là mất mát (do sự giảm giá). Vì vậy, ta có thể kết hợp kết quả của đầu tư dẫn đến lỗ và đầu tư dẫn đến hoà vốn lại với nhau. Kết quả cuối cùng cho việc đầu tư vào giá trị Nasdaq 100 sẽ là 78.93% lỗ và 21.07% lời. Sự chênh lệch rõ ràng giữa rủi ro và tiềm năng lợi nhuận được thể hiện trong con số này.

3 Nhiệm vụ 4: Xây dựng mô hình

3.1 Mô hình đề xuất nghiên cứu

Để mô phỏng các yếu tố tác động đến giá Bitcoin, mô hình hồi quy được xây dựng như sau:

\[ND100=\beta_{0}+\beta_{1}FS100+\beta_{2}DOLLA+\beta_{3}BIT+\beta_{4}GOLD+\beta_{5}WTI\]

Trong đó:

  • Biến phụ thuộc: ND100: Chỉ số Nasdaq 100 (điểm)

  • Biến độc lập:

FS100: Chỉ số FTSE 100 (điểm)

DOLLA: Chỉ số đô la (điểm)

BIT: giá Bitcoin (USD)

GOLD: giá vàng (USD)

WTI: giá dầu thô (USD)

3.2 Kết quả hồi quy

model <- lm(ND$ND100 ~ ND$FS100 + ND$DOLLA + ND$BIT + ND$GOLD + ND$WTI, data=ND)
summary(model)
## 
## Call:
## lm(formula = ND$ND100 ~ ND$FS100 + ND$DOLLA + ND$BIT + ND$GOLD + 
##     ND$WTI, data = ND)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2009.41  -599.44    -3.66   528.36  2147.45 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -3.338e+03  7.851e+02  -4.252 2.31e-05 ***
## ND$FS100     2.519e-01  6.777e-02   3.717 0.000212 ***
## ND$DOLLA    -7.332e+00  7.224e+00  -1.015 0.310360    
## ND$BIT       9.529e-02  2.586e-03  36.856  < 2e-16 ***
## ND$GOLD      6.349e+00  1.611e-01  39.401  < 2e-16 ***
## ND$WTI       8.481e+00  2.394e+00   3.543 0.000413 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 841.6 on 1049 degrees of freedom
## Multiple R-squared:  0.911,  Adjusted R-squared:  0.9106 
## F-statistic:  2148 on 5 and 1049 DF,  p-value: < 2.2e-16

Từ kết quả hồi quy, ta thấy các biến độc lập FS100, BIT, GOLD và WTI có ý nghĩa thống kê ở mức ý nghĩa 5%, nghĩa là các biến độc lập này có tác động đến biến phụ thuộc ND100. Biến độc lập DOLLA không có ý nghĩa thống kê ở mức ý nghĩa 5%

model1 <- lm(ND$ND100 ~ ND$FS100 + ND$BIT + ND$GOLD + ND$WTI, data=ND)
summary(model1)
## 
## Call:
## lm(formula = ND$ND100 ~ ND$FS100 + ND$BIT + ND$GOLD + ND$WTI, 
##     data = ND)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2004.80  -603.41     6.03   535.91  2136.32 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -3.923e+03  5.337e+02  -7.351 3.96e-13 ***
## ND$FS100     2.500e-01  6.774e-02   3.690 0.000236 ***
## ND$BIT       9.694e-02  2.014e-03  48.128  < 2e-16 ***
## ND$GOLD      6.308e+00  1.560e-01  40.444  < 2e-16 ***
## ND$WTI       7.160e+00  2.009e+00   3.564 0.000382 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 841.6 on 1050 degrees of freedom
## Multiple R-squared:  0.9109, Adjusted R-squared:  0.9106 
## F-statistic:  2685 on 4 and 1050 DF,  p-value: < 2.2e-16

Từ kết quả hồi quy, ta thấy các biến độc lập FS100, BIT, GOLD và WTI có ý nghĩa thống kê ở mức ý nghĩa 5%, nghĩa là các biến độc lập này có tác động đến biến phụ thuộc ND100. Kết quả nghiên cứu có phương trình như sau:

\[ND100= (-3.923e+03) + (2.500e-01)FS100 + (9.694e-02)BIT + (6.308e+00)GOLD + (7.160e+00)WTI\]

Ý nghĩa:

\(\beta_{0}\) = - 3.923e+03 là hệ số tự do, khi các yếu tố độc lập bằng 0 thì chỉ số Nasdaq 100 có giá trị bằng - 3.923e+03 điểm.

\(\beta_{1}\) = 2.500e-01, khi các yếu tố khác không đổi, chỉ số FTSE 100 tăng lên 1 điểm thì chỉ số Nasdaq 100 tăng 2.500e-01 điểm.

\(\beta_{1}\) = 9.694e-02, khi các yếu tố khác không đổi, giá Bitcoin tăng lên USD điểm thì chỉ số Nasdaq 100 tăng 9.694e-02 điểm.

\(\beta_{1}\) = 6.308e+00, khi các yếu tố khác không đổi, giá vàng tăng lên 1 USD thì chỉ số Nasdaq 100 tăng 6.308e+00 điểm.

\(\beta_{1}\) = 7.160e+00, khi các yếu tố khác không đổi, giá dầu thô tăng lên 1 USD thì chỉ số Nasdaq 100 tăng 7.160e+00 điểm.

Kiểm định mô hình

Từ kết quả trên, ta thấy giá trị Multiple R-squared (\(R^2\)) = 0.9109 cho biết mức độ phù hợp của mô hình là 91.09%.

Thống kê F-statistic có p-value < 0.05 nên có thể kết luận hàm hồi quy mẫu phù hợp hay có ít nhất một biến độc lập có tác động đến biến phụ thuộc.

4 Nhiệm Vụ 3: Xác định phân phối

4.1 Chỉ số chứng khoán Anh

Đồ thị phân phối chỉ số FS100

hist(ND$FS100, main="Đồ thị phân phối của chỉ số FS100", col = "pink")

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

Giả thuyết:

\(H_{0}\): Biến FS100 tuân theo phân phối chuẩn

\(H_{1}\): Biến FS100 không tuân theo phân phối chuẩn

shapiro.test(ND$FS100)
## 
##  Shapiro-Wilk normality test
## 
## data:  ND$FS100
## W = 0.91028, p-value < 2.2e-16

Vì p_value = 2.2e-16 < 0.05 nên ta bác bỏ giả thuyết \(H_{0}\). Nghĩa là chỉ số FS100 không có phân phối chuẩn.

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

Giả thuyết:

\(H_{0}\): Biến FS100 tuân theo phân phối t

\(H_{1}\): Biến FS100 không tuân theo phân phối t

t.test(ND$FS100)
## 
##  One Sample t-test
## 
## data:  ND$FS100
## t = 401.81, df = 1054, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  7014.609 7083.456
## sample estimates:
## mean of x 
##  7049.033

Vì p_value = 2.2e-16 < 0.05 nên ta bác bỏ giả thuyết \(H_{0}\). Nghĩa là chỉ số FS100 không có phân phối t.

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

Giả thuyết:

\(H_{0}\): Biến FS100 tuân theo phân phối Lognormal

\(H_{1}\): Biến FS100 không tuân theo phân phối Lognormal

ks.test(ND$FS100, "plnorm", meanlog = mean(log(ND$FS100)), sdlog = sd(log(ND$FS100)))
## Warning in ks.test.default(ND$FS100, "plnorm", meanlog = mean(log(ND$FS100)), :
## ties should not be present for the Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  ND$FS100
## D = 0.16871, p-value < 2.2e-16
## alternative hypothesis: two-sided

Vì p_value = 2.2e-16 < 0.05 nên ta bác bỏ giả thuyết \(H_{0}\). Nghĩa là chỉ số FS100 không có phân phối Lognormal.

4.2 Chỉ số đô la Hoa Hỳ

Đồ thị phân phối chỉ số đô la

hist(ND$DOLLA, main="Đồ thị phân phối của chỉ số đô la", col = "pink")

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

Giả thuyết:

\(H_{0}\): Biến DOLLA tuân theo phân phối chuẩn

\(H_{1}\): Biến DOLLA không tuân theo phân phối chuẩn

shapiro.test(ND$DOLLA)
## 
##  Shapiro-Wilk normality test
## 
## data:  ND$DOLLA
## W = 0.94453, p-value < 2.2e-16

Vì p_value = 2.2e-16 < 0.05 nên ta bác bỏ giả thuyết \(H_{0}\). Nghĩa là chỉ số DOLLA không có phân phối chuẩn.

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

Giả thuyết:

\(H_{0}\): Biến DOLLA tuân theo phân phối t

\(H_{1}\): Biến DOLLA không tuân theo phân phối t

t.test(ND$DOLLA)
## 
##  One Sample t-test
## 
## data:  ND$DOLLA
## t = 607.68, df = 1054, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  97.40570 98.03679
## sample estimates:
## mean of x 
##  97.72124

Vì p_value = 2.2e-16 < 0.05 nên ta bác bỏ giả thuyết \(H_{0}\). Nghĩa là chỉ số DOLLA không có phân phối t.

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

Giả thuyết:

\(H_{0}\): Biến DOLLA tuân theo phân phối Lognormal

\(H_{1}\): Biến DOLLA không tuân theo phân phối Lognormal

ks.test(ND$DOLLA, "plnorm", meanlog = mean(log(ND$DOLLA)), sdlog = sd(log(ND$DOLLA)))
## Warning in ks.test.default(ND$DOLLA, "plnorm", meanlog = mean(log(ND$DOLLA)), :
## ties should not be present for the Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  ND$DOLLA
## D = 0.11889, p-value = 2.236e-13
## alternative hypothesis: two-sided

Vì p_value = 2.236e-13 < 0.05 nên ta bác bỏ giả thuyết \(H_{0}\). Nghĩa là chỉ số DOLLA không có phân phối Lognormal.

4.3 Giá Bitcoin

Đồ thị phân phối giá Bitcoin

hist(ND$BIT, main="Đồ thị phân phối của giá Bitcoin", col = "pink")

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

Giả thuyết:

\(H_{0}\): Biến BIT tuân theo phân phối chuẩn

\(H_{1}\): Biến BIT không tuân theo phân phối chuẩn

shapiro.test(ND$BIT)
## 
##  Shapiro-Wilk normality test
## 
## data:  ND$BIT
## W = 0.90113, p-value < 2.2e-16

Vì p_value = 2.2e-16 < 0.05 nên ta bác bỏ giả thuyết \(H_{0}\). Nghĩa là giá Bitcoin không có phân phối chuẩn.

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

Giả thuyết:

\(H_{0}\): Biến BIT tuân theo phân phối Lognormal

\(H_{1}\): Biến BIT không tuân theo phân phối Lognormal

ks.test(ND$BIT, "plnorm", meanlog = mean(log(ND$BIT)), sdlog = sd(log(ND$BIT)))
## Warning in ks.test.default(ND$BIT, "plnorm", meanlog = mean(log(ND$BIT)), :
## ties should not be present for the Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  ND$BIT
## D = 0.084891, p-value = 4.981e-07
## alternative hypothesis: two-sided

Vì p_value = 4.981e-07 < 0.05 nên ta bác bỏ giả thuyết \(H_{0}\). Nghĩa là giá Bitcoin không có phân phối Lognormal.

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

Giả thuyết:

\(H_{0}\): Biến BIT tuân theo phân phối t

\(H_{1}\): Biến BIT không tuân theo phân phối t

t.test(ND$BIT)
## 
##  One Sample t-test
## 
## data:  ND$BIT
## t = 45.473, df = 1054, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  22362.41 24379.36
## sample estimates:
## mean of x 
##  23370.88

Vì p_value = 2.2e-16 < 0.05 nên ta bác bỏ giả thuyết \(H_{0}\). Nghĩa là giá Bitcoin không có phân phối t.

4.4 Giá vàng

Đồ thị phân phối giá vàng

hist(ND$GOLD, main="Đồ thị phân phối của giá vàng", col = "pink")

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

Giả thuyết:

\(H_{0}\): Biến GOLD tuân theo phân phối chuẩn

\(H_{1}\): Biến GOLD không tuân theo phân phối chuẩn

shapiro.test(ND$GOLD)
## 
##  Shapiro-Wilk normality test
## 
## data:  ND$GOLD
## W = 0.90723, p-value < 2.2e-16

Vì p_value = 2.2e-16 < 0.05 nên ta bác bỏ giả thuyết \(H_{0}\). Nghĩa là giá vàng không có phân phối chuẩn.

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

Giả thuyết:

\(H_{0}\): Biến GOLD tuân theo phân phối Lognormal

\(H_{1}\): Biến GOLD không tuân theo phân phối Lognormal

ks.test(ND$GOLD, "plnorm", meanlog = mean(log(ND$GOLD)), sdlog = sd(log(ND$GOLD)))
## Warning in ks.test.default(ND$GOLD, "plnorm", meanlog = mean(log(ND$GOLD)), :
## ties should not be present for the Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  ND$GOLD
## D = 0.18043, p-value < 2.2e-16
## alternative hypothesis: two-sided

Vì p_value = 2.2e-16 < 0.05 nên ta bác bỏ giả thuyết \(H_{0}\). Nghĩa là giá vàng không có phân phối Lognormal.

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

Giả thuyết:

\(H_{0}\): Biến GOLD tuân theo phân phối t

\(H_{1}\): Biến GOLD không tuân theo phân phối t

t.test(ND$GOLD)
## 
##  One Sample t-test
## 
## data:  ND$GOLD
## t = 263.62, df = 1054, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  1700.999 1726.511
## sample estimates:
## mean of x 
##  1713.755

Vì p_value = 2.2e-16 < 0.05 nên ta bác bỏ giả thuyết \(H_{0}\). Nghĩa là giá vàng không có phân phối t.

4.5 Giá dầu thô

Đồ thị phân phối giá dầu thô

hist(ND$WTI, main="Đồ thị phân phối của giá dầu", col = "pink")

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

Giả thuyết:

\(H_{0}\): Biến WTI tuân theo phân phối chuẩn

\(H_{1}\): Biến WTI không tuân theo phân phối chuẩn

shapiro.test(ND$WTI)
## 
##  Shapiro-Wilk normality test
## 
## data:  ND$WTI
## W = 0.98818, p-value = 1.632e-07

Vì p_value = 1.632e-07 < 0.05 nên ta bác bỏ giả thuyết \(H_{0}\). Nghĩa là giá dầu thô không có phân phối chuẩn.

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

Giả thuyết:

\(H_{0}\): Biến WTI tuân theo phân phối Lognormal

\(H_{1}\): Biến WTI không tuân theo phân phối Lognormal

ks.test(ND$WTI, "plnorm", meanlog = mean(log(ND$WTI)), sdlog = sd(log(ND$WTI)))
## Warning in ks.test.default(ND$WTI, "plnorm", meanlog = mean(log(ND$WTI)), :
## ties should not be present for the Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  ND$WTI
## D = 0.087137, p-value = 2.204e-07
## alternative hypothesis: two-sided

Vì p_value = 2.204e-07 < 0.05 nên ta bác bỏ giả thuyết \(H_{0}\). Nghĩa là giá dầu thô không có phân phối Lognormal.

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

Giả thuyết:

\(H_{0}\): Biến WTI tuân theo phân phối t

\(H_{1}\): Biến WTI không tuân theo phân phối t

t.test(ND$WTI)
## 
##  One Sample t-test
## 
## data:  ND$WTI
## t = 102.16, df = 1054, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  64.21591 66.73109
## sample estimates:
## mean of x 
##   65.4735

Vì p_value = 2.2e-16 < 0.05 nên ta bác bỏ giả thuyết \(H_{0}\). Nghĩa là giá dầu thô không có phân phối t.

5 Nhiệm vụ 2: Giải thích vấn đề cần mô phỏng

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

Mô phỏng chỉ số Nasdaq 100 trong khoảng 10000 phiên giao dịch

5.2 Mô tả dữ liệu nghiên cứu

  • Biến đầu vào:

FS100: là chỉ số FTSE 100 (Financial Times Stock Exchange 100) là một chỉ số thị trường chứng khoán của Anh được ra mắt vào năm 1984. FTSE 100 đại diện cho 100 công ty có vốn hóa lớn nhất niêm yết trên London Stock Exchange (LSE). Chỉ số này được sử dụng để đo lường sự biến động và hiệu suất của thị trường chứng khoán Anh.

DOLLA: là chỉ số đô la Hoa Kỳ thường được gọi là “US Dollar Index” (chỉ số đô la Mỹ). Đây là một chỉ số thể hiện giá trị của đô la Mỹ so với một loạt các đơn vị tiền tệ khác. Chỉ số này thường được sử dụng để đo lường sức mạnh hoặc yếu đi của đô la Mỹ trên thị trường thế giới.

BIT: Giá Bitcoin được tính bằng USD.

WTI: Giá dầu thô được tính bằng USD

GOLD: Giá vàng được tính bằng USD.

  • Biến đầu ra:

ND100: là chỉ số Nasdaq 100

Dữ liệu nghiên cứu được thu nhập trên trang web investing.com trong giai đoạn từ ngày 28/11/2018 đến ngày 30/07/2023 gồm 1055 quan sát, được sử dụng để phục vụ nghiên cứu.

5.3 Thống kê mô tả

summary(ND)
##      ND100           FS100          DOLLA             BIT       
##  Min.   : 5899   Min.   :4994   Min.   : 89.39   Min.   : 3248  
##  1st Qu.: 8453   1st Qu.:6803   1st Qu.: 93.67   1st Qu.: 9270  
##  Median :11830   Median :7191   Median : 96.72   Median :19380  
##  Mean   :11383   Mean   :7049   Mean   : 97.72   Mean   :23371  
##  3rd Qu.:13609   3rd Qu.:7452   3rd Qu.:101.26   3rd Qu.:36704  
##  Max.   :16573   Max.   :8013   Max.   :114.05   Max.   :67528  
##       WTI              GOLD     
##  Min.   : 10.01   Min.   :1224  
##  1st Qu.: 52.62   1st Qu.:1561  
##  Median : 63.08   Median :1780  
##  Mean   : 65.47   Mean   :1714  
##  3rd Qu.: 78.62   3rd Qu.:1862  
##  Max.   :123.70   Max.   :2069
sd(ND$FS100) #Độ lệch chuẩn biến FS100
## [1] 569.8106
sd(ND$DOLLA) #Độ lệch chuẩn biến DOLLA
## [1] 5.223261
sd(ND$BIT) #Độ lệch chuẩn biến BIT
## [1] 16693.43
sd(ND$WTI) #Độ lệch chuẩn biến WTI
## [1] 20.81699
sd(ND$GOLD) #Độ lệch chuẩn biến GOLD
## [1] 211.1542

Thông qua kế quả ta thấy:

  • Chỉ số NASDAQ 100 (ND100) có giá trị trung bình là 11383 điểm, giá trị nhỏ nhất là 5899 điểm và giá trị lớn nhất là 16573 điểm.

  • Chỉ số FTSE 100 (FS100) có giá trị trung bình là 7049 điểm, giá trị nhỏ nhất là 4994 điểm và giá trị lớn nhất là 8013 điểm. Độ lệch chuẩn là 569.8106 điểm

  • Chỉ số đô la Hoa Kỳ (DOLLA) có giá trị trung bình là 97.72 điểm, giá trị nhỏ nhất là 89.39 điểm và giá trị lớn nhất là 114.05 điểm. Độ lệch chuẩn là 5.223261 điểm

  • Giá Bitcoin (BIT) có giá trị trung bình là 23371 USD, giá trị nhỏ nhất là 3248 USD và giá trị lớn nhất là 67528 USD. Độ lệch chuẩn là 16693.43 USD

  • Giá dầu thô (WTI) có giá trị trung bình là 65.47 USD, giá trị nhỏ nhất là 10.01 USD và giá trị lớn nhất là 123.70 USD. Độ lệch chuẩn là 20.81699 USD

  • Giá vàng (GOLD) có giá trị trung bình là 1714 USD, giá trị nhỏ nhất là 1224 USD và giá trị lớn nhất là 2069 USD. Độ lệch chuẩn là 211.1542 USD

LS0tDQp0aXRsZTogIk3DtCBQaOG7j25nIE5n4bqrdSBOaGnDqm4iDQphdXRob3I6ICJQaOG6oW0gVGjhu4sgTmfhu41jIg0KZGF0ZTogIjIwMjMtMDctMTMiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIHRvY19mbG9hdDoNCiAgICAgIGNvbGxhcHNlZDogbm8NCiAgICAgIGRmX3ByaW50OiBwYWdlZA0KICAgICAgaGlnaGxpZ2h0OiBrYXRlDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICB3b3JkX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQotLS0NCg0KTGluazogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xWl9nazlRY3JXeldCRUI5cFRzbzRlMVh5VFNtSFdaYkIvZWRpdD91c3A9c2hhcmluZyZvdWlkPTExMjk4NDA1MjU5MjA0MjQ4MTE5NCZydHBvZj10cnVlJnNkPXRydWUNCg0KYGBge3J9DQpORCA8LSByZWFkLmNzdigiRDovTVBOTi9OYXNkYXEuY3N2IikNCnN0cihORCkNCmBgYA0KIyBOaGnhu4dtIHbhu6UgNzoNCg0KbGluayBmaWxlIHdvcmQ6IGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVpfZ2s5UWNyV3pXQkVCOXBUc280ZTFYeVRTbUhXWmJCL2VkaXQ/dXNwPXNoYXJpbmcmb3VpZD0xMTI5ODQwNTI1OTIwNDI0ODExOTQmcnRwb2Y9dHJ1ZSZzZD10cnVlDQoNCiMgTmhp4buHbSB24bulIDUgKyA2Og0KDQojIyBNw7QgcGjhu49uZyBjw6FjIGJp4bq/bg0KDQrEkOG7gyBtw7QgcGjhu49uZyBjw6FjIGJp4bq/biDEkeG6p3UgdsOgbywgdMOhYyBnaeG6oyBz4butIGThu6VuZyBow6BtICdzYW1wbGUnIMSR4buDIHThuqFvIHJhIG3hu5l0IG3huqt1IG5n4bqrdSBuaGnDqm4gdOG7qyBjaHXhu5dpIGThu68gbGnhu4d1IGfhu5FjIHbhu5tpIGvDrWNoIHRoxrDhu5tjIG3huqt1IGzDoCAxMDAwMCBxdWFuIHPDoXQuDQoNCiMjIyBNw7QgcGjhu49uZyBiaeG6v24gRlMxMDANCg0KYGBge3J9DQpzZXQuc2VlZCgxMjMpDQojIFThuqFvIGLhuqNuZyB04bqnbiBzdeG6pXQNCkZTIDwtIHRhYmxlKGN1dChORCRGUzEwMCwgNDAsIGluY2x1ZGUubG93ZXN0ID0gVFJVRSkpDQoNCmExIDwtIHJ1bmlmKDEsIDQuOTllKzAzLDUuMDdlKzAzKQ0KYTIgPC0gcnVuaWYoMSwgNS4wN2UrMDMsNS4xNGUrMDMpDQphMyA8LSBydW5pZigxLCA1LjE0ZSswMyw1LjIyZSswMykNCmE0IDwtIHJ1bmlmKDEsIDUuMjJlKzAzLDUuM2UrMDMpDQphNSA8LSBydW5pZigxLCA1LjNlKzAzLDUuMzdlKzAzKQ0KYTYgPC0gcnVuaWYoMSwgNS4zN2UrMDMsNS40NWUrMDMpDQphNyA8LSBydW5pZigxLCA1LjQ1ZSswMyw1LjUyZSswMykNCmE4IDwtIHJ1bmlmKDEsIDUuNTJlKzAzLDUuNmUrMDMpDQphOSA8LSBydW5pZigxLCA1LjZlKzAzLDUuNjdlKzAzKQ0KYTEwIDwtIHJ1bmlmKDEsIDUuNjdlKzAzLDUuNzVlKzAzKQ0KYTExIDwtIHJ1bmlmKDEsIDUuNzVlKzAzLDUuODJlKzAzKQ0KYTEyIDwtIHJ1bmlmKDEsIDUuODJlKzAzLDUuOWUrMDMpDQphMTMgPC0gcnVuaWYoMSwgNS45ZSswMyw1Ljk3ZSswMykNCmExNCA8LSBydW5pZigxLCA1Ljk3ZSswMyw2LjA1ZSswMykNCmExNSA8LSBydW5pZigxLCA2LjA1ZSswMyw2LjEzZSswMykNCmExNiA8LSBydW5pZigxLCA2LjEzZSswMyw2LjJlKzAzKQ0KYTE3IDwtIHJ1bmlmKDEsIDYuMmUrMDMsNi4yOGUrMDMpDQphMTggPC0gcnVuaWYoMSwgNi4yOGUrMDMsNi4zNWUrMDMpDQphMTkgPC0gcnVuaWYoMSwgNi4zNWUrMDMsNi40M2UrMDMpDQphMjAgPC0gcnVuaWYoMSwgNi40M2UrMDMsNi41ZSswMykNCmEyMSA8LSBydW5pZigxLCA2LjVlKzAzLDYuNThlKzAzKQ0KYTIyIDwtIHJ1bmlmKDEsIDYuNThlKzAzLDYuNjVlKzAzKQ0KYTIzIDwtIHJ1bmlmKDEsIDYuNjVlKzAzLDYuNzNlKzAzKQ0KYTI0IDwtIHJ1bmlmKDEsIDYuNzNlKzAzLDYuODFlKzAzKQ0KYTI1IDwtIHJ1bmlmKDEsIDYuODFlKzAzLDYuODhlKzAzKQ0KYTI2IDwtIHJ1bmlmKDEsIDYuODhlKzAzLDYuOTZlKzAzKQ0KYTI3IDwtIHJ1bmlmKDEsIDYuOTZlKzAzLDcuMDNlKzAzKQ0KYTI4IDwtIHJ1bmlmKDEsIDcuMDNlKzAzLDcuMTFlKzAzKQ0KYTI5IDwtIHJ1bmlmKDEsIDcuMTFlKzAzLDcuMThlKzAzKQ0KYTMwIDwtIHJ1bmlmKDEsIDcuMThlKzAzLDcuMjZlKzAzKQ0KYTMxIDwtIHJ1bmlmKDEsIDcuMjZlKzAzLDcuMzNlKzAzKQ0KYTMyIDwtIHJ1bmlmKDEsIDcuMzNlKzAzLDcuNDFlKzAzKQ0KYTMzIDwtIHJ1bmlmKDEsIDcuNDFlKzAzLDcuNDhlKzAzKQ0KYTM0IDwtIHJ1bmlmKDEsIDcuNDhlKzAzLDcuNTZlKzAzKQ0KYTM1IDwtIHJ1bmlmKDEsIDcuNTZlKzAzLDcuNjRlKzAzKQ0KYTM2IDwtIHJ1bmlmKDEsIDcuNjRlKzAzLDcuNzFlKzAzKQ0KYTM3IDwtIHJ1bmlmKDEsIDcuNzFlKzAzLDcuNzllKzAzKQ0KYTM4IDwtIHJ1bmlmKDEsIDcuNzllKzAzLDcuODZlKzAzKQ0KYTM5IDwtIHJ1bmlmKDEsIDcuODZlKzAzLDcuOTRlKzAzKQ0KYTQwIDwtIHJ1bmlmKDEsIDcuOTRlKzAzLDguMDJlKzAzKQ0KDQpGVFNFIDwtIGMoYTEsYTIsYTMsYTQsYTUsYTYsYTcsYTgsYTksYTEwLGExMSxhMTIsYTEzLGExNCxhMTUsYTE2LGExNyxhMTgsYTE5LGEyMCxhMjEsYTIyLGEyMyxhMjQsYTI1LGEyNixhMjcsYTI4LGEyOSxhMzAsYTMxLGEzMixhMzMsYTM0LGEzNSxhMzYsYTM3LGEzOCxhMzksYTQwKQ0KDQojIE3DtCBwaOG7j25nIGThu68gbGnhu4d1IG3hu5tpIGThu7FhIHRyw6puIGLhuqNuZyB04bqnbiBzdeG6pXQNCkZTMTAwIDwtIHNhbXBsZShhcy5udW1lcmljKEZUU0UpLCBzaXplID0gMTAwMDAsIHJlcGxhY2UgPSBUUlVFLCBwcm9iID0gcHJvcC50YWJsZShGVFNFKSkNCmhpc3QoRlMxMDApDQpgYGANCg0KIyMjIE3DtCBwaOG7j25nIGJp4bq/biBCSVQNCg0KYGBge3J9DQpzZXQuc2VlZCgxMjMpDQojIFThuqFvIGLhuqNuZyB04bqnbiBzdeG6pXQNCkJDIDwtIHRhYmxlKGN1dChORCRCSVQsIDQwLCBpbmNsdWRlLmxvd2VzdCA9IFRSVUUpKQ0KDQpiMSA8LSBydW5pZigxLCAzLjE4ZSswMyw0Ljg1ZSswMykNCmIyIDwtIHJ1bmlmKDEsIDQuODVlKzAzLDYuNDZlKzAzKQ0KYjMgPC0gcnVuaWYoMSwgNi40NmUrMDMsOC4wN2UrMDMpDQpiNCA8LSBydW5pZigxLCA4LjA3ZSswMyw5LjY4ZSswMykNCmI1IDwtIHJ1bmlmKDEsIDkuNjhlKzAzLDEuMTNlKzA0KQ0KYjYgPC0gcnVuaWYoMSwgMS4xM2UrMDQsMS4yOWUrMDQpDQpiNyA8LSBydW5pZigxLCAxLjI5ZSswNCwxLjQ1ZSswNCkNCmI4IDwtIHJ1bmlmKDEsIDEuNDVlKzA0LDEuNjFlKzA0KQ0KYjkgPC0gcnVuaWYoMSwgMS42MWUrMDQsMS43N2UrMDQpDQpiMTAgPC0gcnVuaWYoMSwgMS43N2UrMDQsMS45M2UrMDQpDQpiMTEgPC0gcnVuaWYoMSwgMS45M2UrMDQsMi4wOWUrMDQpDQpiMTIgPC0gcnVuaWYoMSwgMi4wOWUrMDQsMi4yNWUrMDQpDQpiMTMgPC0gcnVuaWYoMSwgMi4yNWUrMDQsMi40MWUrMDQpDQpiMTQgPC0gcnVuaWYoMSwgMi40MWUrMDQsMi41N2UrMDQpDQpiMTUgPC0gcnVuaWYoMSwgMi41N2UrMDQsMi43NGUrMDQpDQpiMTYgPC0gcnVuaWYoMSwgMi43NGUrMDQsMi45ZSswNCkNCmIxNyA8LSBydW5pZigxLCAyLjllKzA0LDMuMDZlKzA0KQ0KYjE4IDwtIHJ1bmlmKDEsIDMuMDZlKzA0LDMuMjJlKzA0KQ0KYjE5IDwtIHJ1bmlmKDEsIDMuMjJlKzA0LDMuMzhlKzA0KQ0KYjIwIDwtIHJ1bmlmKDEsIDMuMzhlKzA0LDMuNTRlKzA0KQ0KYjIxIDwtIHJ1bmlmKDEsIDMuNTRlKzA0LDMuN2UrMDQpDQpiMjIgPC0gcnVuaWYoMSwgMy43ZSswNCwzLjg2ZSswNCkNCmIyMyA8LSBydW5pZigxLCAzLjg2ZSswNCw0LjAyZSswNCkNCmIyNCA8LSBydW5pZigxLCA0LjAyZSswNCw0LjE4ZSswNCkNCmIyNSA8LSBydW5pZigxLCA0LjE4ZSswNCw0LjM0ZSswNCkNCmIyNiA8LSBydW5pZigxLCA0LjM0ZSswNCw0LjVlKzA0KQ0KYjI3IDwtIHJ1bmlmKDEsIDQuNWUrMDQsNC42NmUrMDQpDQpiMjggPC0gcnVuaWYoMSwgNC42NmUrMDQsNC44MmUrMDQpDQpiMjkgPC0gcnVuaWYoMSwgNC44MmUrMDQsNC45OWUrMDQpDQpiMzAgPC0gcnVuaWYoMSwgNC45OWUrMDQsNS4xNWUrMDQpDQpiMzEgPC0gcnVuaWYoMSwgNS4xNWUrMDQsNS4zMWUrMDQpDQpiMzIgPC0gcnVuaWYoMSwgNS4zMWUrMDQsNS40N2UrMDQpDQpiMzMgPC0gcnVuaWYoMSwgNS40N2UrMDQsNS42M2UrMDQpDQpiMzQgPC0gcnVuaWYoMSwgNS42M2UrMDQsNS43OWUrMDQpDQpiMzUgPC0gcnVuaWYoMSwgNS43OWUrMDQsNS45NWUrMDQpDQpiMzYgPC0gcnVuaWYoMSwgNS45NWUrMDQsNi4xMWUrMDQpDQpiMzcgPC0gcnVuaWYoMSwgNi4xMWUrMDQsNi4yN2UrMDQpDQpiMzggPC0gcnVuaWYoMSwgNi4yN2UrMDQsNi40M2UrMDQpDQpiMzkgPC0gcnVuaWYoMSwgNi40M2UrMDQsNi41OWUrMDQpDQpiNDAgPC0gcnVuaWYoMSwgNi41OWUrMDQsNi43NmUrMDQpDQoNCkJUIDwtIGMoYjEsYjIsYjMsYjQsYjUsYjYsYjcsYjgsYjksYjEwLGIxMSxiMTIsYjEzLGIxNCxiMTUsYjE2LGIxNyxiMTgsYjE5LGIyMCxiMjEsYjIyLGIyMyxiMjQsYjI1LGIyNixiMjcsYjI4LGIyOSxiMzAsYjMxLGIzMixiMzMsYjM0LGIzNSxiMzYsYjM3LGIzOCxiMzksYjQwKQ0KDQojIE3DtCBwaOG7j25nIGThu68gbGnhu4d1IG3hu5tpIGThu7FhIHRyw6puIGLhuqNuZyB04bqnbiBzdeG6pXQNCkJJVCA8LSBzYW1wbGUoYXMubnVtZXJpYyhCVCksIHNpemUgPSAxMDAwMCwgcmVwbGFjZSA9IFRSVUUsIHByb2IgPSBwcm9wLnRhYmxlKEJUKSkNCmhpc3QoQklUKQ0KYGBgDQoNCiMjIyBNw7QgcGjhu49uZyBiaeG6v24gR09MRA0KDQpgYGB7cn0NCnNldC5zZWVkKDEyMykNCiMgVOG6oW8gYuG6o25nIHThuqduIHN14bqldA0KVkFORyA8LSB0YWJsZShjdXQoTkQkR09MRCwgNDAsIGluY2x1ZGUubG93ZXN0ID0gVFJVRSkpDQoNCmUxIDwtIHJ1bmlmKDEsIDEuMjJlKzAzLDEuMjRlKzAzKQ0KZTIgPC0gcnVuaWYoMSwgMS4yNGUrMDMsMS4yN2UrMDMpDQplMyA8LSBydW5pZigxLCAxLjI3ZSswMywxLjI5ZSswMykNCmU0IDwtIHJ1bmlmKDEsIDEuMjllKzAzLDEuMzFlKzAzKQ0KZTUgPC0gcnVuaWYoMSwgMS4zMWUrMDMsMS4zM2UrMDMpDQplNiA8LSBydW5pZigxLCAxLjMzZSswMywxLjM1ZSswMykNCmU3IDwtIHJ1bmlmKDEsIDEuMzVlKzAzLDEuMzdlKzAzKQ0KZTggPC0gcnVuaWYoMSwgMS4zN2UrMDMsMS4zOWUrMDMpDQplOSA8LSBydW5pZigxLCAxLjM5ZSswMywxLjQxZSswMykNCmUxMCA8LSBydW5pZigxLCAxLjQxZSswMywxLjQ0ZSswMykNCmUxMSA8LSBydW5pZigxLCAxLjQ0ZSswMywxLjQ2ZSswMykNCmUxMiA8LSBydW5pZigxLCAxLjQ2ZSswMywxLjQ4ZSswMykNCmUxMyA8LSBydW5pZigxLCAxLjQ4ZSswMywxLjVlKzAzKQ0KZTE0IDwtIHJ1bmlmKDEsIDEuNWUrMDMsMS41MmUrMDMpDQplMTUgPC0gcnVuaWYoMSwgMS41MmUrMDMsMS41NGUrMDMpDQplMTYgPC0gcnVuaWYoMSwgMS41NGUrMDMsMS41NmUrMDMpDQplMTcgPC0gcnVuaWYoMSwgMS41NmUrMDMsMS41OGUrMDMpDQplMTggPC0gcnVuaWYoMSwgMS41OGUrMDMsMS42ZSswMykNCmUxOSA8LSBydW5pZigxLCAxLjZlKzAzLDEuNjNlKzAzKQ0KZTIwIDwtIHJ1bmlmKDEsIDEuNjNlKzAzLDEuNjVlKzAzKQ0KZTIxIDwtIHJ1bmlmKDEsIDEuNjVlKzAzLDEuNjdlKzAzKQ0KZTIyIDwtIHJ1bmlmKDEsIDEuNjdlKzAzLDEuNjllKzAzKQ0KZTIzIDwtIHJ1bmlmKDEsIDEuNjllKzAzLDEuNzFlKzAzKQ0KZTI0IDwtIHJ1bmlmKDEsIDEuNzFlKzAzLDEuNzNlKzAzKQ0KZTI1IDwtIHJ1bmlmKDEsIDEuNzNlKzAzLDEuNzVlKzAzKQ0KZTI2IDwtIHJ1bmlmKDEsIDEuNzVlKzAzLDEuNzdlKzAzKQ0KZTI3IDwtIHJ1bmlmKDEsIDEuNzdlKzAzLDEuNzllKzAzKQ0KZTI4IDwtIHJ1bmlmKDEsIDEuNzllKzAzLDEuODJlKzAzKQ0KZTI5IDwtIHJ1bmlmKDEsIDEuODJlKzAzLDEuODRlKzAzKQ0KZTMwIDwtIHJ1bmlmKDEsIDEuODRlKzAzLDEuODZlKzAzKQ0KZTMxIDwtIHJ1bmlmKDEsIDEuODZlKzAzLDEuODhlKzAzKQ0KZTMyIDwtIHJ1bmlmKDEsIDEuODhlKzAzLDEuOWUrMDMpDQplMzMgPC0gcnVuaWYoMSwgMS45ZSswMywxLjkyZSswMykNCmUzNCA8LSBydW5pZigxLCAxLjkyZSswMywxLjk0ZSswMykNCmUzNSA8LSBydW5pZigxLCAxLjk0ZSswMywxLjk2ZSswMykNCmUzNiA8LSBydW5pZigxLCAxLjk2ZSswMywxLjk4ZSswMykNCmUzNyA8LSBydW5pZigxLCAxLjk4ZSswMywyLjAxZSswMykNCmUzOCA8LSBydW5pZigxLCAyLjAxZSswMywyLjAzZSswMykNCmUzOSA8LSBydW5pZigxLCAyLjAzZSswMywyLjA1ZSswMykNCmU0MCA8LSBydW5pZigxLCAyLjA1ZSswMywyLjA3ZSswMykNCg0KViA8LSBjKGUxLGUyLGUzLGU0LGU1LGU2LGU3LGU4LGU5LGUxMCxlMTEsZTEyLGUxMyxlMTQsZTE1LGUxNixlMTcsZTE4LGUxOSxlMjAsZTIxLGUyMixlMjMsZTI0LGUyNSxlMjYsZTI3LGUyOCxlMjksZTMwLGUzMSxlMzIsZTMzLGUzNCxlMzUsZTM2LGUzNyxlMzgsZTM5LGU0MCkNCg0KIyBNw7QgcGjhu49uZyBk4buvIGxp4buHdSBt4bubaSBk4buxYSB0csOqbiBi4bqjbmcgdOG6p24gc3XhuqV0DQpHT0xEIDwtIHNhbXBsZShhcy5udW1lcmljKFYpLCBzaXplID0gMTAwMDAsIHJlcGxhY2UgPSBUUlVFLCBwcm9iID0gcHJvcC50YWJsZShWKSkNCmhpc3QoR09MRCkNCmBgYA0KDQojIyMgTcO0IHBo4buPbmcgYmnhur9uIFdUSQ0KDQpgYGB7cn0NCnNldC5zZWVkKDEyMykNCiMgVOG6oW8gYuG6o25nIHThuqduIHN14bqldA0KRFQgPC0gdGFibGUoY3V0KE5EJFdUSSwgNDAsIGluY2x1ZGUubG93ZXN0ID0gVFJVRSkpDQoNCmYxIDwtIHJ1bmlmKDEsIDkuOSwxMi45KQ0KZjIgPC0gcnVuaWYoMSwgMTIuOSwxNS43KQ0KZjMgPC0gcnVuaWYoMSwgMTUuNywxOC41KQ0KZjQgPC0gcnVuaWYoMSwgMTguNSwyMS40KQ0KZjUgPC0gcnVuaWYoMSwgMjEuNCwyNC4yKQ0KZjYgPC0gcnVuaWYoMSwgMjQuMiwyNy4xKQ0KZjcgPC0gcnVuaWYoMSwgMjcuMSwyOS45KQ0KZjggPC0gcnVuaWYoMSwgMjkuOSwzMi43KQ0KZjkgPC0gcnVuaWYoMSwgMzIuNywzNS42KQ0KZjEwIDwtIHJ1bmlmKDEsIDM1LjYsMzguNCkNCmYxMSA8LSBydW5pZigxLCAzOC40LDQxLjMpDQpmMTIgPC0gcnVuaWYoMSwgNDEuMyw0NC4xKQ0KZjEzIDwtIHJ1bmlmKDEsIDQ0LjEsNDcpDQpmMTQgPC0gcnVuaWYoMSwgNDcsNDkuOCkNCmYxNSA8LSBydW5pZigxLCA0OS44LDUyLjYpDQpmMTYgPC0gcnVuaWYoMSwgNTIuNiw1NS41KQ0KZjE3IDwtIHJ1bmlmKDEsIDU1LjUsNTguMykNCmYxOCA8LSBydW5pZigxLCA1OC4zLDYxLjIpDQpmMTkgPC0gcnVuaWYoMSwgNjEuMiw2NCkNCmYyMCA8LSBydW5pZigxLCA2NCw2Ni45KQ0KZjIxIDwtIHJ1bmlmKDEsIDY2LjksNjkuNykNCmYyMiA8LSBydW5pZigxLCA2OS43LDcyLjUpDQpmMjMgPC0gcnVuaWYoMSwgNzIuNSw3NS40KQ0KZjI0IDwtIHJ1bmlmKDEsIDc1LjQsNzguMikNCmYyNSA8LSBydW5pZigxLCA3OC4yLDgxLjEpDQpmMjYgPC0gcnVuaWYoMSwgODEuMSw4My45KQ0KZjI3IDwtIHJ1bmlmKDEsIDgzLjksODYuOCkNCmYyOCA8LSBydW5pZigxLCA4Ni44LDg5LjYpDQpmMjkgPC0gcnVuaWYoMSwgODkuNiw5Mi40KQ0KZjMwIDwtIHJ1bmlmKDEsIDkyLjQsOTUuMykNCmYzMSA8LSBydW5pZigxLCA5NS4zLDk4LjEpDQpmMzIgPC0gcnVuaWYoMSwgOTguMSwxMDEpDQpmMzMgPC0gcnVuaWYoMSwgMTAxLDEwNCkNCmYzNCA8LSBydW5pZigxLCAxMDQsMTA3KQ0KZjM1IDwtIHJ1bmlmKDEsIDEwNywxMDkpDQpmMzYgPC0gcnVuaWYoMSwgMTA5LDExMikNCmYzNyA8LSBydW5pZigxLCAxMTIsMTE1KQ0KZjM4IDwtIHJ1bmlmKDEsIDExNSwxMTgpDQpmMzkgPC0gcnVuaWYoMSwgMTE4LDEyMSkNCmY0MCA8LSBydW5pZigxLCAxMjEsMTI0KQ0KDQpEQVUgPC0gYyhmMSxmMixmMyxmNCxmNSxmNixmNyxmOCxmOSxmMTAsZjExLGYxMixmMTMsZjE0LGYxNSxmMTYsZjE3LGYxOCxmMTksZjIwLGYyMSxmMjIsZjIzLGYyNCxmMjUsZjI2LGYyNyxmMjgsZjI5LGYzMCxmMzEsZjMyLGYzMyxmMzQsZjM1LGYzNixmMzcsZjM4LGYzOSxmNDApDQoNCiMgTcO0IHBo4buPbmcgZOG7ryBsaeG7h3UgbeG7m2kgZOG7sWEgdHLDqm4gYuG6o25nIHThuqduIHN14bqldA0KV1RJIDwtIHNhbXBsZShhcy5udW1lcmljKERBVSksIHNpemUgPSAxMDAwMCwgcmVwbGFjZSA9IFRSVUUsIHByb2IgPSBwcm9wLnRhYmxlKERBVSkpDQpoaXN0KFdUSSkNCg0KYGBgDQoNCg0KIyMgQ2jhuqF5IG3DtCBwaOG7j25nDQoNCkdp4bqjIHPhu60gdGEgc+G6vSBtw7QgcGjhu49uZyBjaOG7iSBz4buRIE5hc2RhcSAxMDAgdHJvbmcgMTAwMDAgcGhpw6puIGdpYW8gZOG7i2NoIG3hu5tpLiBUYSBjw7MgbcO0IGjDrG5oIG3DtCBwaOG7j25nIE5EMTAwIHbhu5tpIGPDoWMgaOG7hyBz4buRIGjhu5NpIHF1eSBuaMawIHNhdToNCg0KJCRORDEwMD0gKC0zLjkyM2UrMDMpICsgKDIuNTAwZS0wMSlGUzEwMCArICg5LjY5NGUtMDIpQklUICsgKDYuMzA4ZSswMClHT0xEICsgKDcuMTYwZSswMClXVEkkJA0KDQpgYGB7cn0NCk5EMTAwIDwtICgtMy45MjNlKzAzKSArICgyLjUwMGUtMDEpKkZTMTAwICsgKDkuNjk0ZS0wMikqQklUICsgKDYuMzA4ZSswMCkqR09MRCArICg3LjE2MGUrMDApKldUSQ0KaGlzdChORDEwMCkNCnN1bW1hcnkoTkQxMDApDQpgYGANCg0KROG7sWEgdsOgbyBr4bq/dCBxdeG6oyB0aOG7kW5nIGvDqiBtw7QgdOG6oyBj4bunYSBk4buvIGxp4buHdSBtw7QgcGjhu49uZyBjaOG7iSBz4buRIE5hc2RhcSAxMDAgduG7m2kgMTAwMDAgcXVhbiBzw6F0IHRhIHRo4bqleSBjaOG7iSBz4buRIE5hc2RhcSAxMDAgxJHGsOG7o2MgbcO0IHBo4buPbmcgZGFvIMSR4buZbmcgdOG7qyA1NDk0IMSRaeG7g20gxJHhur9uIDE4MzI1IMSRaeG7g20sIGdpw6EgdHJ1bmcgYsOsbmggbMOgIDEzMzY1IMSRaeG7g20uDQoNCiMjIyBL4bq/dCBxdeG6oyBwaMOibiBi4buRIEJJVA0KDQogIFTDoWMgZ2nhuqMgxJHGsGEgcmEgbeG7mXQgY2h14buXaSBxdXkgdOG6r2MgxJHhu4MgcGjDom4gbG/huqFpIGPDoWMgcXVhbiBzw6F0IMSRxrDhu6NjIG3DtCBwaOG7j25nIGThu7FhIHRyw6puIGdpw6EgdHLhu4sgY+G7p2EgY2jDum5nLiBD4bulIHRo4buDLCBu4bq/dSBnacOhIHRy4buLIGPhu6dhIG3hu5l0IHF1YW4gc8OhdCBuaOG7jyBoxqFuIDEwMDAwIMSRaeG7g20gdGjDrCBz4bq9IMSRxrDhu6NjIGfDoW4gdsOgbyBo4bqhbmcg4oCcdGjhuqVw4oCdLCBjw6FjIHF1YW4gc8OhdCBjw7MgZ2nDoSB0cuG7iyB04burIDEwMDAwIMSRaeG7g20gxJHhur9uIDE1MDAwIMSRaeG7g20gc+G6vSDEkcaw4bujYyB4ZW0geMOpdCDhu58gaOG6oW5nIOKAnHbhu6th4oCdLCBjw6FjIHF1YW4gc8OhdCBjw7MgZ2nDoSB0cuG7iyBs4bubbiBoxqFuIDE1MDAwIMSRaeG7g20gc+G6vSDEkcaw4bujYyBwaMOibiBsb+G6oWkgdsOgbyBo4bqhbmcg4oCcY2Fv4oCdLg0KDQpgYGB7cn0NCk5EMTAwIDwtICgtMy45MjNlKzAzKSArICgyLjUwMGUtMDEpKkZTMTAwICsgKDkuNjk0ZS0wMikqQklUICsgKDYuMzA4ZSswMCkqR09MRCArICg3LjE2MGUrMDApKldUSQ0KTkR0aGFwIDwtIE5EMTAwW05EMTAwIDw9IDEwMDAwXQ0KbGVuZ3RoKE5EdGhhcCkgI05EMTAwIHRo4bqlcA0KYGBgDQoNCg0KYGBge3J9DQpORHZ1YSA8LSBORDEwMFtORDEwMCA+IDEwMDAwICYgTkQxMDAgPCAxNjAwMF0NCmxlbmd0aChORHZ1YSkgI05EMTAwIHbhu6thDQpgYGANCg0KYGBge3J9DQpORGNhbyA8LSBORDEwMFtORDEwMCA+PSAxNTAwMF0NCmxlbmd0aChORGNhbykgI05EMTAwIGNhbw0KYGBgDQoNCkThu7FhIHRyw6puIGvhur90IHF14bqjIGPhu6dhIG3DtCBwaOG7j25nIHbhu5tpIDEwMDAwIHF1YW4gc8OhdCwgdGEgdGjhuqV5IHLhurFuZyBjw7MgdOG7lW5nIGPhu5luZyAxOTg0IHF1YW4gc8OhdCB0aHXhu5ljIGjhuqFuZyDigJx0aOG6pXDigJ0gduG7gSBjaOG7iSBz4buRIE5hc2RhcSAxMDAsIDUwMjYgcXVhbiBzw6F0IHRodeG7mWMgaOG6oW5nIOKAnHbhu6th4oCdLCB2w6AgMzgwNSBxdWFuIHPDoXQgdGh14buZYyBo4bqhbmcg4oCcY2Fv4oCdLg0KDQojIyMgS2jhuqMgbsSDbmcgbOG7nWkvbOG7lyBraGkgxJHhuqd1IHTGsA0KDQpYw6l0IOG7nyB0aOG7nWkgxJFp4buDbSBoaeG7h24gdOG6oWkgKG5nw6B5IDAzLzA3LzIwMjMpIHRow6wgY2jhu4kgc+G7kSBOYXNkYXEgMTAwIGPDsyBnacOhIHRy4buLIGzDoCAxNTIwOC42OSDEkWnhu4NtLiBHaeG6oyBz4butIHRhIMSR4bqndSB0xrAgdsOgbyBjaOG7iSBz4buRIE5hc2RhcSAxMDAsIG7hur91IGNo4buJIHPhu5EgTmFzZGFxIDEwMCB0xINuZyBsw6puIGjGoW4gMTAlICgxNjcyOS41NiDEkWnhu4NtKSB0aMOsIMSRxrDhu6NjIHTDrW5oIGzDoCBs4budaSwgZ2nhuqNtIGjGoW4gMTAlICgxMzY4Ny44MiDEkWnhu4NtKSB0aMOsIHTDrW5oIGzDoCBs4buXIHbDoCBu4bqxbSB0cm9uZyBiacOqbiDEkeG7mSBnaWFvIMSR4buZbmcgwrExMCUgKHThu6sgMTM2ODcuODIgxJFp4buDbSDEkeG6v24gMTY3MjkuNTYgxJFp4buDbSkgdGjDrCDEkcaw4bujYyB0w61uaCBsw6AgaG/DoCB24buRbi4NCg0KKsSQ4bqndSB0xrAgbOG7lyoNCg0KYGBge3J9DQpEVGxvIDwtIE5EMTAwW05EMTAwIDwgMTM2ODcuODJdDQpsZW5ndGgoRFRsbykNCmBgYA0KKsSQ4bqndSB0xrAgaMOyYSB24buRbioNCg0KYGBge3J9DQpEVGhvYSA8LSBORDEwMFtORDEwMCA+PSAxMzY4Ny44MiAmIE5EMTAwIDw9IDE2NzI5LjU2XQ0KbGVuZ3RoKERUaG9hKSANCmBgYA0KDQoqxJDhuqd1IHTGsCBs4budaSoNCg0KYGBge3J9DQpEVGxvaSA8LSBORDEwMFtORDEwMCA+IDE2NzI5LjU2XQ0KbGVuZ3RoKERUbG9pKQ0KYGBgDQoNCmBgYHtyfQ0KDQpkdDE8LSBkYXRhLmZyYW1lKENhdGVnb3J5ID0gYygibOG7lyIsICJow7JhIHbhu5FuIiwgImzhu51pIiksIFZhbHVlID0gYygwLjQ4MTUsMC4zMDc4LDAuMjEwNykpDQoNCmxpYnJhcnkoJ2dncGxvdDInKQ0KZ2dwbG90KGR0MSwgYWVzKHggPSBDYXRlZ29yeSwgeSA9IFZhbHVlKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKw0KICBsYWJzKHggPSAiQ2F0ZWdvcmllcyIsIHkgPSAiVmFsdWVzIiwgdGl0bGUgPSAixJDhu5MgdGjhu4sgcGjDom4gdMOtY2gga2jhuqMgbsSDbmcgxJHhuqd1IHTGsCBs4budaS9s4buXIGPhu6dhIGNo4buJIHPhu5EgTmFzZGFxIDEwMCIpDQpgYGANCg0KROG7sWEgdsOgbyBr4bq/dCBxdeG6oyDEkcOjIGN1bmcgY+G6pXAsIHRhIGPDsyB0aOG7gyB0aOG6pXkgcuG6sW5nIHThu7cgbOG7hyDEkeG6p3UgdMawIGThuqtuIMSR4bq/biBs4buXIGzDoCA0OC4xNSUsIHThu7cgbOG7hyDEkeG6p3UgdMawIGThuqtuIMSR4bq/biBob8OgIHbhu5FuIGzDoCAzMC43OCUsIHbDoCB04bu3IGzhu4cgxJHhuqd1IHTGsCBk4bqrbiDEkeG6v24gbOG7nWkgbMOgIDIxLjA3JS4gVHV5IG5oacOqbiwgdHJvbmcgdGjhu7FjIHThur8ga2hpIHhlbSB4w6l0IHPhu7EgbOG7o2kvbOG7lyB0cm9uZyBxdcOhIHRyw6xuaCDEkeG6p3UgdMawIHRyb25nIG3hu5l0IGtob+G6o25nIHRo4budaSBnaWFuLCB0YSB0aMaw4budbmcgY29pIGPDoWMgZ2nDoSB0cuG7iyBob8OgIHbhu5FuIG5oxrAgbMOgIG3huqV0IG3DoXQgKGRvIHPhu7EgZ2nhuqNtIGdpw6EpLiBWw6wgduG6rXksIHRhIGPDsyB0aOG7gyBr4bq/dCBo4bujcCBr4bq/dCBxdeG6oyBj4bunYSDEkeG6p3UgdMawIGThuqtuIMSR4bq/biBs4buXIHbDoCDEkeG6p3UgdMawIGThuqtuIMSR4bq/biBob8OgIHbhu5FuIGzhuqFpIHbhu5tpIG5oYXUuIEvhur90IHF14bqjIGN14buRaSBjw7luZyBjaG8gdmnhu4djIMSR4bqndSB0xrAgdsOgbyBnacOhIHRy4buLIE5hc2RhcSAxMDAgc+G6vSBsw6AgNzguOTMlIGzhu5cgdsOgIDIxLjA3JSBs4budaS4gU+G7sSBjaMOqbmggbOG7h2NoIHLDtSByw6BuZyBnaeG7r2EgcuG7p2kgcm8gdsOgIHRp4buBbSBuxINuZyBs4bujaSBuaHXhuq1uIMSRxrDhu6NjIHRo4buDIGhp4buHbiB0cm9uZyBjb24gc+G7kSBuw6B5Lg0KDQojIE5oaeG7h20gduG7pSA0OiAgWMOieSBk4buxbmcgbcO0IGjDrG5oDQoNCiMjIE3DtCBow6xuaCDEkeG7gSB4deG6pXQgbmdoacOqbiBj4bupdQ0KDQrEkOG7gyBtw7QgcGjhu49uZyBjw6FjIHnhur91IHThu5EgdMOhYyDEkeG7mW5nIMSR4bq/biBnacOhIEJpdGNvaW4sIG3DtCBow6xuaCBo4buTaSBxdXkgxJHGsOG7o2MgeMOieSBk4buxbmcgbmjGsCBzYXU6DQoNCiAgJCRORDEwMD1cYmV0YV97MH0rXGJldGFfezF9RlMxMDArXGJldGFfezJ9RE9MTEErXGJldGFfezN9QklUK1xiZXRhX3s0fUdPTEQrXGJldGFfezV9V1RJJCQNCiAgDQogIFRyb25nIMSRw7M6DQogIA0KICAtIEJp4bq/biBwaOG7pSB0aHXhu5ljOiBORDEwMDogQ2jhu4kgc+G7kSBOYXNkYXEgMTAwICjEkWnhu4NtKQ0KICANCiAgLSBCaeG6v24gxJHhu5ljIGzhuq1wOiANCiAgDQogIEZTMTAwOiBDaOG7iSBz4buRIEZUU0UgMTAwICjEkWnhu4NtKQ0KICAgIA0KICBET0xMQTogQ2jhu4kgc+G7kSDEkcO0IGxhICjEkWnhu4NtKQ0KICAgIA0KICBCSVQ6IGdpw6EgQml0Y29pbiAoVVNEKQ0KICAgIA0KICBHT0xEOiBnacOhIHbDoG5nIChVU0QpDQogICAgDQogIFdUSTogZ2nDoSBk4bqndSB0aMO0IChVU0QpDQogIA0KIyMgS+G6v3QgcXXhuqMgaOG7k2kgcXV5DQoNCmBgYHtyfQ0KbW9kZWwgPC0gbG0oTkQkTkQxMDAgfiBORCRGUzEwMCArIE5EJERPTExBICsgTkQkQklUICsgTkQkR09MRCArIE5EJFdUSSwgZGF0YT1ORCkNCnN1bW1hcnkobW9kZWwpDQpgYGANCg0KVOG7qyBr4bq/dCBxdeG6oyBo4buTaSBxdXksIHRhIHRo4bqleSBjw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAgRlMxMDAsIEJJVCwgR09MRCB2w6AgV1RJIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6og4bufIG3hu6ljIMO9IG5naMSpYSA1JSwgbmdoxKlhIGzDoCBjw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAgbsOgeSBjw7MgdMOhYyDEkeG7mW5nIMSR4bq/biBiaeG6v24gcGjhu6UgdGh14buZYyBORDEwMC4gQmnhur9uIMSR4buZYyBs4bqtcCBET0xMQSBraMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiDhu58gbeG7qWMgw70gbmdoxKlhIDUlDQoNCmBgYHtyfQ0KbW9kZWwxIDwtIGxtKE5EJE5EMTAwIH4gTkQkRlMxMDAgKyBORCRCSVQgKyBORCRHT0xEICsgTkQkV1RJLCBkYXRhPU5EKQ0Kc3VtbWFyeShtb2RlbDEpDQpgYGANCg0KVOG7qyBr4bq/dCBxdeG6oyBo4buTaSBxdXksIHRhIHRo4bqleSBjw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAgRlMxMDAsIEJJVCwgR09MRCB2w6AgV1RJIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6og4bufIG3hu6ljIMO9IG5naMSpYSA1JSwgbmdoxKlhIGzDoCBjw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAgbsOgeSBjw7MgdMOhYyDEkeG7mW5nIMSR4bq/biBiaeG6v24gcGjhu6UgdGh14buZYyBORDEwMC4gS+G6v3QgcXXhuqMgbmdoacOqbiBj4bupdSBjw7MgcGjGsMahbmcgdHLDrG5oIG5oxrAgc2F1Og0KDQokJE5EMTAwPSAoLTMuOTIzZSswMykgKyAoMi41MDBlLTAxKUZTMTAwICsgKDkuNjk0ZS0wMilCSVQgKyAoNi4zMDhlKzAwKUdPTEQgKyAoNy4xNjBlKzAwKVdUSSQkDQoNCsOdIG5naMSpYToNCg0KICAkXGJldGFfezB9JCA9IC0gMy45MjNlKzAzIGzDoCBo4buHIHPhu5EgdOG7sSBkbywga2hpIGPDoWMgeeG6v3UgdOG7kSDEkeG7mWMgbOG6rXAgYuG6sW5nIDAgdGjDrCBjaOG7iSBz4buRIE5hc2RhcSAxMDAgY8OzIGdpw6EgdHLhu4sgYuG6sW5nIC0gMy45MjNlKzAzIMSRaeG7g20uDQogIA0KICAkXGJldGFfezF9JCA9IDIuNTAwZS0wMSwga2hpIGPDoWMgeeG6v3UgdOG7kSBraMOhYyBraMO0bmcgxJHhu5VpLCBjaOG7iSBz4buRIEZUU0UgMTAwIHTEg25nIGzDqm4gMSDEkWnhu4NtIHRow6wgY2jhu4kgc+G7kSBOYXNkYXEgMTAwIHTEg25nIDIuNTAwZS0wMSDEkWnhu4NtLg0KICANCiAgJFxiZXRhX3sxfSQgPSA5LjY5NGUtMDIsIGtoaSBjw6FjIHnhur91IHThu5Ega2jDoWMga2jDtG5nIMSR4buVaSwgZ2nDoSBCaXRjb2luIHTEg25nIGzDqm4gVVNEIMSRaeG7g20gdGjDrCBjaOG7iSBz4buRIE5hc2RhcSAxMDAgdMSDbmcgOS42OTRlLTAyIMSRaeG7g20uDQogIA0KICAkXGJldGFfezF9JCA9IDYuMzA4ZSswMCwga2hpIGPDoWMgeeG6v3UgdOG7kSBraMOhYyBraMO0bmcgxJHhu5VpLCBnacOhIHbDoG5nIHTEg25nIGzDqm4gMSBVU0QgdGjDrCBjaOG7iSBz4buRIE5hc2RhcSAxMDAgdMSDbmcgNi4zMDhlKzAwIMSRaeG7g20uDQogIA0KICAkXGJldGFfezF9JCA9IDcuMTYwZSswMCwga2hpIGPDoWMgeeG6v3UgdOG7kSBraMOhYyBraMO0bmcgxJHhu5VpLCBnacOhIGThuqd1IHRow7QgdMSDbmcgbMOqbiAxIFVTRCB0aMOsIGNo4buJIHPhu5EgTmFzZGFxIDEwMCB0xINuZyA3LjE2MGUrMDAgxJFp4buDbS4NCiAgDQogICpLaeG7g20gxJHhu4tuaCBtw7QgaMOsbmgqDQogIA0KVOG7qyBr4bq/dCBxdeG6oyB0csOqbiwgdGEgdGjhuqV5IGdpw6EgdHLhu4sgTXVsdGlwbGUgUi1zcXVhcmVkICgkUl4yJCkgPSAwLjkxMDkgY2hvIGJp4bq/dCBt4bupYyDEkeG7mSBwaMO5IGjhu6NwIGPhu6dhIG3DtCBow6xuaCBsw6AgOTEuMDklLg0KIA0KIFRo4buRbmcga8OqIEYtc3RhdGlzdGljIGPDsyBwLXZhbHVlIDwgMC4wNSBuw6puIGPDsyB0aOG7gyBr4bq/dCBsdeG6rW4gaMOgbSBo4buTaSBxdXkgbeG6q3UgcGjDuSBo4bujcCBoYXkgY8OzIMOtdCBuaOG6pXQgbeG7mXQgYmnhur9uIMSR4buZYyBs4bqtcCBjw7MgdMOhYyDEkeG7mW5nIMSR4bq/biBiaeG6v24gcGjhu6UgdGh14buZYy4NCg0KIyBOaGnhu4dtIFbhu6UgMzogWMOhYyDEkeG7i25oIHBow6JuIHBo4buRaSANCg0KIyMgQ2jhu4kgc+G7kSBjaOG7qW5nIGtob8OhbiBBbmgNCg0KKioqxJDhu5MgdGjhu4sgcGjDom4gcGjhu5FpIGNo4buJIHPhu5EgRlMxMDAqKioNCg0KYGBge3J9DQpoaXN0KE5EJEZTMTAwLCBtYWluPSLEkOG7kyB0aOG7iyBwaMOibiBwaOG7kWkgY+G7p2EgY2jhu4kgc+G7kSBGUzEwMCIsIGNvbCA9ICJwaW5rIikNCmBgYA0KDQoqKipLaeG7g20gxJHhu4tuaCBwaMOibiBwaOG7kWkgY2h14bqpbioqKg0KDQoqR2nhuqMgdGh1eeG6v3Q6Kg0KDQogICRIX3swfSQ6IEJp4bq/biBGUzEwMCB0dcOibiB0aGVvIHBow6JuIHBo4buRaSBjaHXhuqluDQoNCiAgJEhfezF9JDogQmnhur9uIEZTMTAwIGtow7RuZyB0dcOibiB0aGVvIHBow6JuIHBo4buRaSBjaHXhuqluDQoNCmBgYHtyfQ0Kc2hhcGlyby50ZXN0KE5EJEZTMTAwKQ0KYGBgDQpWw6wgcF92YWx1ZSA9IDIuMmUtMTYgPCAwLjA1IG7Dqm4gdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90ICRIX3swfSQuIE5naMSpYSBsw6AgY2jhu4kgc+G7kSBGUzEwMCBraMO0bmcgY8OzIHBow6JuIHBo4buRaSBjaHXhuqluLg0KDQoqKipLaeG7g20gxJHhu4tuaCBwaMOibiBwaOG7kWkgdCoqKg0KDQoqR2nhuqMgdGh1eeG6v3Q6Kg0KDQogICRIX3swfSQ6IEJp4bq/biBGUzEwMCB0dcOibiB0aGVvIHBow6JuIHBo4buRaSB0DQoNCiAgJEhfezF9JDogQmnhur9uIEZTMTAwIGtow7RuZyB0dcOibiB0aGVvIHBow6JuIHBo4buRaSB0DQoNCmBgYHtyfQ0KdC50ZXN0KE5EJEZTMTAwKQ0KYGBgDQpWw6wgcF92YWx1ZSA9IDIuMmUtMTYgPCAwLjA1IG7Dqm4gdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90ICRIX3swfSQuIE5naMSpYSBsw6AgY2jhu4kgc+G7kSBGUzEwMCBraMO0bmcgY8OzIHBow6JuIHBo4buRaSB0Lg0KDQoqKipLaeG7g20gxJHhu4tuaCBwaMOibiBwaOG7kWkgTG9nbm9tYWwqKioNCg0KKkdp4bqjIHRodXnhur90OioNCg0KICAkSF97MH0kOiBCaeG6v24gRlMxMDAgdHXDom4gdGhlbyBwaMOibiBwaOG7kWkgTG9nbm9ybWFsDQoNCiAgJEhfezF9JDogQmnhur9uIEZTMTAwIGtow7RuZyB0dcOibiB0aGVvIHBow6JuIHBo4buRaSBMb2dub3JtYWwNCg0KYGBge3J9DQprcy50ZXN0KE5EJEZTMTAwLCAicGxub3JtIiwgbWVhbmxvZyA9IG1lYW4obG9nKE5EJEZTMTAwKSksIHNkbG9nID0gc2QobG9nKE5EJEZTMTAwKSkpDQpgYGANClbDrCBwX3ZhbHVlID0gMi4yZS0xNiA8IDAuMDUgbsOqbiB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgJEhfezB9JC4gTmdoxKlhIGzDoCBjaOG7iSBz4buRIEZTMTAwIGtow7RuZyBjw7MgcGjDom4gcGjhu5FpIExvZ25vcm1hbC4NCg0KIyMgQ2jhu4kgc+G7kSDEkcO0IGxhIEhvYSBI4buzDQoNCioqKsSQ4buTIHRo4buLIHBow6JuIHBo4buRaSBjaOG7iSBz4buRIMSRw7QgbGEqKioNCg0KYGBge3J9DQpoaXN0KE5EJERPTExBLCBtYWluPSLEkOG7kyB0aOG7iyBwaMOibiBwaOG7kWkgY+G7p2EgY2jhu4kgc+G7kSDEkcO0IGxhIiwgY29sID0gInBpbmsiKQ0KYGBgDQoNCioqKktp4buDbSDEkeG7i25oIHBow6JuIHBo4buRaSBjaHXhuqluKioqDQoNCipHaeG6oyB0aHV54bq/dDoqDQoNCiAgJEhfezB9JDogQmnhur9uIERPTExBIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIGNodeG6qW4NCg0KICAkSF97MX0kOiBCaeG6v24gRE9MTEEga2jDtG5nIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIGNodeG6qW4NCg0KYGBge3J9DQpzaGFwaXJvLnRlc3QoTkQkRE9MTEEpDQpgYGANClbDrCBwX3ZhbHVlID0gMi4yZS0xNiA8IDAuMDUgbsOqbiB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgJEhfezB9JC4gTmdoxKlhIGzDoCBjaOG7iSBz4buRIERPTExBIGtow7RuZyBjw7MgcGjDom4gcGjhu5FpIGNodeG6qW4uDQoNCioqKktp4buDbSDEkeG7i25oIHBow6JuIHBo4buRaSB0KioqDQoNCipHaeG6oyB0aHV54bq/dDoqDQoNCiAgJEhfezB9JDogQmnhur9uIERPTExBIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIHQNCg0KICAkSF97MX0kOiBCaeG6v24gRE9MTEEga2jDtG5nIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIHQNCg0KYGBge3J9DQp0LnRlc3QoTkQkRE9MTEEpDQpgYGANClbDrCBwX3ZhbHVlID0gMi4yZS0xNiA8IDAuMDUgbsOqbiB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgJEhfezB9JC4gTmdoxKlhIGzDoCBjaOG7iSBz4buRIERPTExBIGtow7RuZyBjw7MgcGjDom4gcGjhu5FpIHQuDQoNCioqKktp4buDbSDEkeG7i25oIHBow6JuIHBo4buRaSBMb2dub21hbCoqKg0KDQoqR2nhuqMgdGh1eeG6v3Q6Kg0KDQogICRIX3swfSQ6IEJp4bq/biBET0xMQSB0dcOibiB0aGVvIHBow6JuIHBo4buRaSBMb2dub3JtYWwNCg0KICAkSF97MX0kOiBCaeG6v24gRE9MTEEga2jDtG5nIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIExvZ25vcm1hbA0KDQpgYGB7cn0NCmtzLnRlc3QoTkQkRE9MTEEsICJwbG5vcm0iLCBtZWFubG9nID0gbWVhbihsb2coTkQkRE9MTEEpKSwgc2Rsb2cgPSBzZChsb2coTkQkRE9MTEEpKSkNCmBgYA0KVsOsIHBfdmFsdWUgPSAyLjIzNmUtMTMgPCAwLjA1IG7Dqm4gdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90ICRIX3swfSQuIE5naMSpYSBsw6AgY2jhu4kgc+G7kSBET0xMQSBraMO0bmcgY8OzIHBow6JuIHBo4buRaSBMb2dub3JtYWwuDQoNCg0KIyMgR2nDoSBCaXRjb2luDQoNCioqKsSQ4buTIHRo4buLIHBow6JuIHBo4buRaSBnacOhIEJpdGNvaW4qKioNCg0KYGBge3J9DQpoaXN0KE5EJEJJVCwgbWFpbj0ixJDhu5MgdGjhu4sgcGjDom4gcGjhu5FpIGPhu6dhIGdpw6EgQml0Y29pbiIsIGNvbCA9ICJwaW5rIikNCmBgYA0KDQoqKipLaeG7g20gxJHhu4tuaCBwaMOibiBwaOG7kWkgY2h14bqpbioqKg0KDQoqR2nhuqMgdGh1eeG6v3Q6Kg0KDQogICRIX3swfSQ6IEJp4bq/biBCSVQgdHXDom4gdGhlbyBwaMOibiBwaOG7kWkgY2h14bqpbg0KDQogICRIX3sxfSQ6IEJp4bq/biBCSVQga2jDtG5nIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIGNodeG6qW4NCg0KYGBge3J9DQpzaGFwaXJvLnRlc3QoTkQkQklUKQ0KYGBgDQpWw6wgcF92YWx1ZSA9IDIuMmUtMTYgPCAwLjA1IG7Dqm4gdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90ICRIX3swfSQuIE5naMSpYSBsw6AgZ2nDoSBCaXRjb2luIGtow7RuZyBjw7MgcGjDom4gcGjhu5FpIGNodeG6qW4uDQoNCioqKktp4buDbSDEkeG7i25oIHBow6JuIHBo4buRaSBMb2dub21hbCoqKg0KDQoqR2nhuqMgdGh1eeG6v3Q6Kg0KDQogICRIX3swfSQ6IEJp4bq/biBCSVQgdHXDom4gdGhlbyBwaMOibiBwaOG7kWkgTG9nbm9ybWFsDQoNCiAgJEhfezF9JDogQmnhur9uIEJJVCBraMO0bmcgdHXDom4gdGhlbyBwaMOibiBwaOG7kWkgTG9nbm9ybWFsDQoNCmBgYHtyfQ0Ka3MudGVzdChORCRCSVQsICJwbG5vcm0iLCBtZWFubG9nID0gbWVhbihsb2coTkQkQklUKSksIHNkbG9nID0gc2QobG9nKE5EJEJJVCkpKQ0KYGBgDQpWw6wgcF92YWx1ZSA9IDQuOTgxZS0wNyA8IDAuMDUgbsOqbiB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgJEhfezB9JC4gTmdoxKlhIGzDoCBnacOhIEJpdGNvaW4ga2jDtG5nIGPDsyBwaMOibiBwaOG7kWkgTG9nbm9ybWFsLg0KDQoqKipLaeG7g20gxJHhu4tuaCBwaMOibiBwaOG7kWkgdCoqKg0KDQoqR2nhuqMgdGh1eeG6v3Q6Kg0KDQogICRIX3swfSQ6IEJp4bq/biBCSVQgdHXDom4gdGhlbyBwaMOibiBwaOG7kWkgdA0KDQogICRIX3sxfSQ6IEJp4bq/biBCSVQga2jDtG5nIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIHQNCg0KYGBge3J9DQp0LnRlc3QoTkQkQklUKQ0KYGBgDQpWw6wgcF92YWx1ZSA9IDIuMmUtMTYgPCAwLjA1IG7Dqm4gdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90ICRIX3swfSQuIE5naMSpYSBsw6AgZ2nDoSBCaXRjb2luIGtow7RuZyBjw7MgcGjDom4gcGjhu5FpIHQuDQoNCg0KIyMgR2nDoSB2w6BuZw0KDQoqKirEkOG7kyB0aOG7iyBwaMOibiBwaOG7kWkgZ2nDoSB2w6BuZyoqKg0KDQpgYGB7cn0NCmhpc3QoTkQkR09MRCwgbWFpbj0ixJDhu5MgdGjhu4sgcGjDom4gcGjhu5FpIGPhu6dhIGdpw6EgdsOgbmciLCBjb2wgPSAicGluayIpDQpgYGANCg0KKioqS2nhu4NtIMSR4buLbmggcGjDom4gcGjhu5FpIGNodeG6qW4qKioNCg0KKkdp4bqjIHRodXnhur90OioNCg0KICAkSF97MH0kOiBCaeG6v24gR09MRCB0dcOibiB0aGVvIHBow6JuIHBo4buRaSBjaHXhuqluDQoNCiAgJEhfezF9JDogQmnhur9uIEdPTEQga2jDtG5nIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIGNodeG6qW4NCg0KYGBge3J9DQpzaGFwaXJvLnRlc3QoTkQkR09MRCkNCmBgYA0KVsOsIHBfdmFsdWUgPSAyLjJlLTE2IDwgMC4wNSBuw6puIHRhIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCAkSF97MH0kLiBOZ2jEqWEgbMOgIGdpw6EgdsOgbmcga2jDtG5nIGPDsyBwaMOibiBwaOG7kWkgY2h14bqpbi4NCg0KKioqS2nhu4NtIMSR4buLbmggcGjDom4gcGjhu5FpIExvZ25vbWFsKioqDQoNCipHaeG6oyB0aHV54bq/dDoqDQoNCiAgJEhfezB9JDogQmnhur9uIEdPTEQgdHXDom4gdGhlbyBwaMOibiBwaOG7kWkgTG9nbm9ybWFsDQoNCiAgJEhfezF9JDogQmnhur9uIEdPTEQga2jDtG5nIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIExvZ25vcm1hbA0KDQpgYGB7cn0NCmtzLnRlc3QoTkQkR09MRCwgInBsbm9ybSIsIG1lYW5sb2cgPSBtZWFuKGxvZyhORCRHT0xEKSksIHNkbG9nID0gc2QobG9nKE5EJEdPTEQpKSkNCmBgYA0KVsOsIHBfdmFsdWUgPSAyLjJlLTE2IDwgMC4wNSBuw6puIHRhIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCAkSF97MH0kLiBOZ2jEqWEgbMOgIGdpw6EgdsOgbmcga2jDtG5nIGPDsyBwaMOibiBwaOG7kWkgTG9nbm9ybWFsLg0KDQoqKipLaeG7g20gxJHhu4tuaCBwaMOibiBwaOG7kWkgdCoqKg0KDQoqR2nhuqMgdGh1eeG6v3Q6Kg0KDQogICRIX3swfSQ6IEJp4bq/biBHT0xEIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIHQNCg0KICAkSF97MX0kOiBCaeG6v24gR09MRCBraMO0bmcgdHXDom4gdGhlbyBwaMOibiBwaOG7kWkgdA0KDQpgYGB7cn0NCnQudGVzdChORCRHT0xEKQ0KYGBgDQpWw6wgcF92YWx1ZSA9IDIuMmUtMTYgPCAwLjA1IG7Dqm4gdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90ICRIX3swfSQuIE5naMSpYSBsw6AgZ2nDoSB2w6BuZyBraMO0bmcgY8OzIHBow6JuIHBo4buRaSB0Lg0KDQojIyBHacOhIGThuqd1IHRow7QNCg0KKioqxJDhu5MgdGjhu4sgcGjDom4gcGjhu5FpIGdpw6EgZOG6p3UgdGjDtCoqKg0KDQpgYGB7cn0NCmhpc3QoTkQkV1RJLCBtYWluPSLEkOG7kyB0aOG7iyBwaMOibiBwaOG7kWkgY+G7p2EgZ2nDoSBk4bqndSIsIGNvbCA9ICJwaW5rIikNCmBgYA0KDQoqKipLaeG7g20gxJHhu4tuaCBwaMOibiBwaOG7kWkgY2h14bqpbioqKg0KDQoqR2nhuqMgdGh1eeG6v3Q6Kg0KDQogICRIX3swfSQ6IEJp4bq/biBXVEkgdHXDom4gdGhlbyBwaMOibiBwaOG7kWkgY2h14bqpbg0KDQogICRIX3sxfSQ6IEJp4bq/biBXVEkga2jDtG5nIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIGNodeG6qW4NCg0KYGBge3J9DQpzaGFwaXJvLnRlc3QoTkQkV1RJKQ0KYGBgDQpWw6wgcF92YWx1ZSA9IDEuNjMyZS0wNyA8IDAuMDUgbsOqbiB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgJEhfezB9JC4gTmdoxKlhIGzDoCBnacOhIGThuqd1IHRow7Qga2jDtG5nIGPDsyBwaMOibiBwaOG7kWkgY2h14bqpbi4NCg0KKioqS2nhu4NtIMSR4buLbmggcGjDom4gcGjhu5FpIExvZ25vbWFsKioqDQoNCipHaeG6oyB0aHV54bq/dDoqDQoNCiAgJEhfezB9JDogQmnhur9uIFdUSSB0dcOibiB0aGVvIHBow6JuIHBo4buRaSBMb2dub3JtYWwNCg0KICAkSF97MX0kOiBCaeG6v24gV1RJIGtow7RuZyB0dcOibiB0aGVvIHBow6JuIHBo4buRaSBMb2dub3JtYWwNCg0KYGBge3J9DQprcy50ZXN0KE5EJFdUSSwgInBsbm9ybSIsIG1lYW5sb2cgPSBtZWFuKGxvZyhORCRXVEkpKSwgc2Rsb2cgPSBzZChsb2coTkQkV1RJKSkpDQpgYGANClbDrCBwX3ZhbHVlID0gMi4yMDRlLTA3IDwgMC4wNSBuw6puIHRhIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCAkSF97MH0kLiBOZ2jEqWEgbMOgIGdpw6EgZOG6p3UgdGjDtCBraMO0bmcgY8OzIHBow6JuIHBo4buRaSBMb2dub3JtYWwuDQoNCioqKktp4buDbSDEkeG7i25oIHBow6JuIHBo4buRaSB0KioqDQoNCipHaeG6oyB0aHV54bq/dDoqDQoNCiAgJEhfezB9JDogQmnhur9uIFdUSSB0dcOibiB0aGVvIHBow6JuIHBo4buRaSB0DQoNCiAgJEhfezF9JDogQmnhur9uIFdUSSBraMO0bmcgdHXDom4gdGhlbyBwaMOibiBwaOG7kWkgdA0KDQpgYGB7cn0NCnQudGVzdChORCRXVEkpDQpgYGANClbDrCBwX3ZhbHVlID0gMi4yZS0xNiA8IDAuMDUgbsOqbiB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgJEhfezB9JC4gTmdoxKlhIGzDoCBnacOhIGThuqd1IHRow7Qga2jDtG5nIGPDsyBwaMOibiBwaOG7kWkgdC4NCg0KDQojIE5oaeG7h20gduG7pSAyOiBHaeG6o2kgdGjDrWNoIHbhuqVuIMSR4buBIGPhuqduIG3DtCBwaOG7j25nDQoNCiMjIFbhuqVuIMSR4buBIGPhuqduIG3DtCBwaOG7j25nDQoNCk3DtCBwaOG7j25nIGNo4buJIHPhu5EgTmFzZGFxIDEwMCB0cm9uZyBraG/huqNuZyAxMDAwMCBwaGnDqm4gZ2lhbyBk4buLY2gNCg0KIyMgTcO0IHThuqMgZOG7ryBsaeG7h3UgbmdoacOqbiBj4bupdQ0KDQogLSBCaeG6v24gxJHhuqd1IHbDoG86DQogDQogICoqRlMxMDAqKjogbMOgIGNo4buJIHPhu5EgRlRTRSAxMDAgKEZpbmFuY2lhbCBUaW1lcyBTdG9jayBFeGNoYW5nZSAxMDApIGzDoCBt4buZdCBjaOG7iSBz4buRIHRo4buLIHRyxrDhu51uZyBjaOG7qW5nIGtob8OhbiBj4bunYSBBbmggxJHGsOG7o2MgcmEgbeG6r3QgdsOgbyBuxINtIDE5ODQuIEZUU0UgMTAwIMSR4bqhaSBkaeG7h24gY2hvIDEwMCBjw7RuZyB0eSBjw7MgduG7kW4gaMOzYSBs4bubbiBuaOG6pXQgbmnDqm0geeG6v3QgdHLDqm4gTG9uZG9uIFN0b2NrIEV4Y2hhbmdlIChMU0UpLiBDaOG7iSBz4buRIG7DoHkgxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4MgxJFvIGzGsOG7nW5nIHPhu7EgYmnhur9uIMSR4buZbmcgdsOgIGhp4buHdSBzdeG6pXQgY+G7p2EgdGjhu4sgdHLGsOG7nW5nIGNo4bupbmcga2hvw6FuIEFuaC4NCg0KICAqKkRPTExBKio6IGzDoCBjaOG7iSBz4buRIMSRw7QgbGEgSG9hIEvhu7MgdGjGsOG7nW5nIMSRxrDhu6NjIGfhu41pIGzDoCAiVVMgRG9sbGFyIEluZGV4IiAoY2jhu4kgc+G7kSDEkcO0IGxhIE3hu7kpLiDEkMOieSBsw6AgbeG7mXQgY2jhu4kgc+G7kSB0aOG7gyBoaeG7h24gZ2nDoSB0cuG7iyBj4bunYSDEkcO0IGxhIE3hu7kgc28gduG7m2kgbeG7mXQgbG/huqF0IGPDoWMgxJHGoW4gduG7iyB0aeG7gW4gdOG7hyBraMOhYy4gQ2jhu4kgc+G7kSBuw6B5IHRoxrDhu51uZyDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyDEkW8gbMaw4budbmcgc+G7qWMgbeG6oW5oIGhv4bq3YyB54bq/dSDEkWkgY+G7p2EgxJHDtCBsYSBN4bu5IHRyw6puIHRo4buLIHRyxrDhu51uZyB0aOG6vyBnaeG7m2kuICANCg0KICAqKkJJVCoqOiBHacOhIEJpdGNvaW4gxJHGsOG7o2MgdMOtbmggYuG6sW5nIFVTRC4gDQoNCiAgKipXVEkqKjogR2nDoSBk4bqndSB0aMO0IMSRxrDhu6NjIHTDrW5oIGLhurFuZyBVU0QNCg0KICAqKkdPTEQqKjogR2nDoSB2w6BuZyDEkcaw4bujYyB0w61uaCBi4bqxbmcgVVNELg0KDQogLSBCaeG6v24gxJHhuqd1IHJhOg0KIA0KICAqKk5EMTAwKio6IGzDoCBjaOG7iSBz4buRIE5hc2RhcSAxMDANCg0KROG7ryBsaeG7h3UgbmdoacOqbiBj4bupdSDEkcaw4bujYyB0aHUgbmjhuq1wIHRyw6puIHRyYW5nIHdlYiAqaW52ZXN0aW5nLmNvbSogdHJvbmcgZ2lhaSDEkW/huqFuIHThu6sgbmfDoHkgMjgvMTEvMjAxOCDEkeG6v24gbmfDoHkgMzAvMDcvMjAyMyBn4buTbSAxMDU1IHF1YW4gc8OhdCwgxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4MgcGjhu6VjIHbhu6UgbmdoacOqbiBj4bupdS4NCg0KIyMgVGjhu5FuZyBrw6ogbcO0IHThuqMNCg0KYGBge3J9DQpzdW1tYXJ5KE5EKQ0Kc2QoTkQkRlMxMDApICPEkOG7mSBs4buHY2ggY2h14bqpbiBiaeG6v24gRlMxMDANCnNkKE5EJERPTExBKSAjxJDhu5kgbOG7h2NoIGNodeG6qW4gYmnhur9uIERPTExBDQpzZChORCRCSVQpICPEkOG7mSBs4buHY2ggY2h14bqpbiBiaeG6v24gQklUDQpzZChORCRXVEkpICPEkOG7mSBs4buHY2ggY2h14bqpbiBiaeG6v24gV1RJDQpzZChORCRHT0xEKSAjxJDhu5kgbOG7h2NoIGNodeG6qW4gYmnhur9uIEdPTEQNCmBgYA0KVGjDtG5nIHF1YSBr4bq/IHF14bqjIHRhIHRo4bqleToNCiANCiAtIENo4buJIHPhu5EgTkFTREFRIDEwMCAoTkQxMDApIGPDsyBnacOhIHRy4buLIHRydW5nIGLDrG5oIGzDoCAxMTM4MyDEkWnhu4NtLCBnacOhIHRy4buLIG5o4buPIG5o4bqldCBsw6AgNTg5OSDEkWnhu4NtIHbDoCBnacOhIHRy4buLIGzhu5tuIG5o4bqldCBsw6AgMTY1NzMgxJFp4buDbS4NCiANCiAgLSBDaOG7iSBz4buRIEZUU0UgMTAwIChGUzEwMCkgY8OzIGdpw6EgdHLhu4sgdHJ1bmcgYsOsbmggbMOgIDcwNDkgxJFp4buDbSwgZ2nDoSB0cuG7iyBuaOG7jyBuaOG6pXQgbMOgIDQ5OTQgxJFp4buDbSB2w6AgZ2nDoSB0cuG7iyBs4bubbiBuaOG6pXQgbMOgIDgwMTMgxJFp4buDbS4gxJDhu5kgbOG7h2NoIGNodeG6qW4gbMOgIDU2OS44MTA2IMSRaeG7g20NCiANCiAgLSBDaOG7iSBz4buRIMSRw7QgbGEgSG9hIEvhu7MgKERPTExBKSBjw7MgZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaCBsw6AgOTcuNzIgxJFp4buDbSwgZ2nDoSB0cuG7iyBuaOG7jyBuaOG6pXQgbMOgIDg5LjM5IMSRaeG7g20gdsOgIGdpw6EgdHLhu4sgbOG7m24gbmjhuqV0IGzDoCAxMTQuMDUgxJFp4buDbS4gxJDhu5kgbOG7h2NoIGNodeG6qW4gbMOgIDUuMjIzMjYxIMSRaeG7g20NCiAgDQogIC0gR2nDoSBCaXRjb2luIChCSVQpIGPDsyBnacOhIHRy4buLIHRydW5nIGLDrG5oIGzDoCAyMzM3MSBVU0QsIGdpw6EgdHLhu4sgbmjhu48gbmjhuqV0IGzDoCAzMjQ4IFVTRCB2w6AgZ2nDoSB0cuG7iyBs4bubbiBuaOG6pXQgbMOgIDY3NTI4IFVTRC4gxJDhu5kgbOG7h2NoIGNodeG6qW4gbMOgIDE2NjkzLjQzIFVTRA0KICAgDQogIC0gR2nDoSBk4bqndSB0aMO0IChXVEkpIGPDsyBnacOhIHRy4buLIHRydW5nIGLDrG5oIGzDoCA2NS40NyBVU0QsIGdpw6EgdHLhu4sgbmjhu48gbmjhuqV0IGzDoCAxMC4wMSBVU0QgdsOgIGdpw6EgdHLhu4sgbOG7m24gbmjhuqV0IGzDoCAxMjMuNzAgVVNELiDEkOG7mSBs4buHY2ggY2h14bqpbiBsw6AgMjAuODE2OTkgVVNEDQogDQogLSBHacOhIHbDoG5nIChHT0xEKSBjw7MgZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaCBsw6AgMTcxNCBVU0QsIGdpw6EgdHLhu4sgbmjhu48gbmjhuqV0IGzDoCAxMjI0IFVTRCB2w6AgZ2nDoSB0cuG7iyBs4bubbiBuaOG6pXQgbMOgIDIwNjkgVVNELiDEkOG7mSBs4buHY2ggY2h14bqpbiBsw6AgMjExLjE1NDIgVVNEDQoNCg0KDQo=