library(readr)
library(data.table)
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:data.table':
## 
##     between, first, last
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(skimr)
## Warning: package 'skimr' was built under R version 4.3.3
library(psych)
## Warning: package 'psych' was built under R version 4.3.3
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
library(csv)
## Warning: package 'csv' was built under R version 4.3.3
library(DT)
## Warning: package 'DT' was built under R version 4.3.3
library(pander)
## Warning: package 'pander' was built under R version 4.3.3
library(formattable)
## Warning: package 'formattable' was built under R version 4.3.3
library(htmltools)
## 
## Attaching package: 'htmltools'
## The following object is masked from 'package:pander':
## 
##     p
library(DescTools)
## Warning: package 'DescTools' was built under R version 4.3.3
## 
## Attaching package: 'DescTools'
## The following objects are masked from 'package:psych':
## 
##     AUC, ICC, SD
## The following object is masked from 'package:data.table':
## 
##     %like%
library(epitools)
library(pscl)
## Warning: package 'pscl' was built under R version 4.3.3
## Classes and Methods for R originally developed in the
## Political Science Computational Laboratory
## Department of Political Science
## Stanford University (2002-2015),
## by and under the direction of Simon Jackman.
## hurdle and zeroinfl functions by Achim Zeileis.
library(car)
## Warning: package 'car' was built under R version 4.3.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.3.3
## 
## Attaching package: 'car'
## The following object is masked from 'package:DescTools':
## 
##     Recode
## The following object is masked from 'package:psych':
## 
##     logit
## The following object is masked from 'package:dplyr':
## 
##     recode

PHÂN TÍCH CÁC YẾU TỐ ẢNH HƯỞNG ĐẾN NGUY CƠ RỐI LOẠN GIẤC NGỦ DO TIÊU THỤ CAFFEINE

Bộ dữ liệu “Caffeine Intake Tracker” cung cấp thông tin chi tiết về thói quen tiêu thụ caffeine của người dùng và tác động của nó đến giấc ngủ. Dữ liệu không chỉ tập trung vào lượng caffeine tiêu thụ mà còn bao gồm các yếu tố liên quan như loại đồ uống sử dụng (cà phê, trà, nước tăng lực), thời điểm tiêu thụ trong ngày (sáng, chiều, tối), giới tính, và mức độ ảnh hưởng đến giấc ngủ sau khi sử dụng. Mục tiêu của nghiên cứu là tìm hiểu mối liên hệ giữa hành vi tiêu dùng caffeine và nguy cơ rối loạn giấc ngủ. Dữ liệu được thu thập dưới dạng khảo sát giả lập, gồm 500 quan sát và 13 biến, tạo điều kiện thuận lợi cho việc phân tích định lượng và đánh giá tác động của các yếu tố lối sống đến chất lượng giấc ngủ của người tiêu dùng caffeine.

CHƯƠNG 1: TỔNG QUAN NGHIÊN CỨU

1.1. Lý do chọn đề tài

Hiện nay, tiêu thụ caffeine là một hành vi phổ biến trong giới trẻ, đặc biệt là những người thường xuyên đối mặt với áp lực công việc, học tập và lịch sinh hoạt thất thường. Caffeine được tìm thấy nhiều trong các loại đồ uống quen thuộc như cà phê, trà, nước tăng lực hay nước ngọt có ga. Đây đều là những sản phẩm dễ dàng tiếp cận trong đời sống hàng ngày, và thường được người tiêu thụ sử dụng với mục đích giúp duy trì sự tỉnh táo, nâng cao khả năng tập trung và kéo dài thời gian làm việc hoặc học tập. Đặc biệt trong những thời điểm căng thẳng như kỳ thi, deadline công việc hay những ngày làm việc cường độ cao, caffeine gần như trở thành một “trợ thủ đắc lực” được sử dụng rộng rãi. Tuy nhiên, mặt trái của việc lạm dụng caffeine, hoặc tiêu thụ không đúng thời điểm, đang dần trở thành một vấn đề đáng lo ngại. Một trong những hệ quả tiêu biểu, thường bị đánh giá thấp, chính là rối loạn giấc ngủ.

Rối loạn giấc ngủ không chỉ ảnh hưởng đến sức khỏe thể chất, tinh thần mà còn làm giảm hiệu quả làm việc, học tập và chất lượng cuộc sống nói chung. Thực tế cho thấy nhiều người tiêu thụ không ý thức được ảnh hưởng tiêu cực tiềm ẩn của caffeine đối với giấc ngủ, và hành vi này đang dần trở thành một vấn đề đáng báo động trong xã hội hiện đại. Không giống như các chất kích thích bị kiểm soát chặt chẽ, caffeine rất dễ tiếp cận và được sử dụng một cách tự do, thậm chí bị xem nhẹ về mức độ rủi ro đối với sức khỏe.

Bộ dữ liệu “Caffeine Intake Tracker” ghi lại thói quen tiêu thụ caffeine của từng cá nhân, bao gồm loại thức uống, thời điểm sử dụng và trạng thái giấc ngủ tương ứng. Điều này tạo điều kiện thuận lợi để phân tích mối quan hệ giữa hành vi tiêu dùng caffeine và nguy cơ rối loạn giấc ngủ, đồng thời xem xét ảnh hưởng của các yếu tố liên quan như thời gian, loại thức uống hay thói quen sinh hoạt trong ngày. Nghiên cứu đề tài “Phân tích các yếu tố ảnh hưởng đến nguy cơ rối loạn giấc ngủ do tiêu thụ caffeine” nhằm mục đích tìm hiểu sâu hơn về thực trạng tiêu thụ caffeine cũng như đánh giá ảnh hưởng của nó đến chất lượng giấc ngủ.

Không chỉ dừng lại ở việc xác định mối tương quan giữa lượng caffeine tiêu thụ và giấc ngủ, nghiên cứu còn xem xét vai trò của các yếu tố đi kèm như thời điểm sử dụng, loại thức uống, thời gian làm việc hoặc học tập, thói quen sinh hoạt và các đặc điểm nhân khẩu học khác (giới tính, độ tuổi, nghề nghiệp…). Thông qua đó, nghiên cứu hướng đến việc xây dựng một cái nhìn toàn diện hơn về hành vi sử dụng caffeine trong đời sống hằng ngày của người tiêu thụ hiện nay.

1.2. Mục tiêu nghiên cứu

1.2.1. Mục tiêu chung

Nghiên cứu nhằm phân tích mối quan hệ giữa hành vi tiêu thụ caffeine và nguy cơ rối loạn giấc ngủ ở người tiêu thụ, từ đó xác định các yếu tố tác động chính và đề xuất một số khuyến nghị góp phần nâng cao nhận thức cũng như điều chỉnh thói quen sử dụng caffeine một cách hợp lý trong cộng đồng.

1.2.2. Mục tiêu cụ thể

Khảo sát mức độ tiêu thụ caffeine của người tiêu thụ thông qua các loại thức uống phổ biến như cà phê, trà, nước tăng lực,…

Đánh giá tình trạng giấc ngủ của người tiêu thụ theo các tiêu chí như: thời gian ngủ, chất lượng giấc ngủ, tần suất mất ngủ hoặc khó ngủ.

Phân tích mối quan hệ giữa lượng caffeine tiêu thụ và nguy cơ rối loạn giấc ngủ.

Xác định ảnh hưởng của các yếu tố khác như thời điểm sử dụng caffeine, thói quen sinh hoạt, thời gian học tập hoặc làm việc, giới tính, độ tuổi,… đến mức độ rối loạn giấc ngủ.

Đề xuất một số giải pháp nhằm hạn chế tác động tiêu cực của việc tiêu thụ caffeine đến giấc ngủ, đồng thời nâng cao ý thức sử dụng caffeine hợp lý trong cộng đồng người tiêu dùng.

1.3. Đối tượng và phạm vi nghiên cứu

Tập dữ liệu được sử dụng trong nghiên cứu này là kết quả từ một cuộc khảo sát hành vi tiêu thụ caffeine, chủ yếu ở nhóm người tiêu thụ. Bộ dữ liệu có tên “Caffeine Intake Tracker”, ghi nhận thông tin liên quan đến loại thức uống chứa caffeine, thời điểm sử dụng, tổng lượng caffeine tiêu thụ trong ngày (tính bằng mg), cùng với trạng thái giấc ngủ của người tham gia.

Dữ liệu bao gồm 500 quan sát với nhiều biến số phản ánh thói quen tiêu dùng và chất lượng giấc ngủ, trong đó đáng chú ý là các biến về loại đồ uống (cà phê, trà, nước tăng lực), khung giờ tiêu thụ,… Các biến này cho phép nghiên cứu một cách định lượng mối liên hệ giữa hành vi tiêu thụ caffeine và nguy cơ rối loạn giấc ngủ trong thực tế.

1.4. Phương pháp nghiên cứu

Bài nghiên cứu sử dụng phương pháp thống kê mô tả kết hợp với các mô hình hồi quy nhị phân để phân tích dữ liệu, nhằm xác định mức độ ảnh hưởng của các yếu tố liên quan đến hành vi tiêu thụ caffeine và khả năng xảy ra rối loạn giấc ngủ ở sinh viên.

1.5. Kết cấu đề tài

Chương 1: Tổng quan nghiên cứu.

Chương 2: Lý thuyết nghiên cứu

Chương 3: Dữ liệu nghiên cứu.

Chương 4: Phân tích và đưa ra kết quả.

Chương 5: Kết luận và kiến nghị.

CHƯƠNG 2: LÝ THUYẾT NGHIÊN CỨU

2.1. Bảng ngẫu nhiên

2.1.1. Cấu trúc

Bảng ngẫu nhiên hai chiều là công cụ dùng để phân loại các đối tượng trong mẫu (hoặc tổng thể) dựa theo hai biến định tính: một biến dòng (row variable) và một biến cột (column variable).

Giả sử:

  • Biến dòng \(X\)\(I\) mức (levels),

  • Biến cột \(Y\)\(J\) mức,

Khi đó, bảng ngẫu nhiên \(I \times J\) có dạng như sau:

\[ \begin{array}{c|cccc|c} \text{Biến X / Biến Y} & y_1 & y_2 & \cdots & y_J & \text{Tổng dòng} \\ \hline x_1 & n_{11} & n_{12} & \cdots & n_{1J} & n_{1.} \\ x_2 & n_{21} & n_{22} & \cdots & n_{2J} & n_{2.} \\ \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \\ x_I & n_{I1} & n_{I2} & \cdots & n_{IJ} & n_{I.} \\ \hline \text{Tổng cột} & n_{.1} & n_{.2} & \cdots & n_{.J} & \end{array} \]

Trong đó:

  • \(n_{ij}\): số lượng quan sát rơi vào hàng \(i\) và cột \(j\),

  • \(n_{i.}\): tổng số quan sát ở hàng \(i\),

  • \(n_{.j}\): tổng số quan sát ở cột \(j\),

  • Tổng tất cả các ô là kích thước mẫu:

    \[ n = \sum_{i=1}^{I} \sum_{j=1}^{J} n_{ij} \]

2.1.2. Tần số và tỷ lệ

Để mô tả mối quan hệ giữa hai biến định tính trong bảng ngẫu nhiên, ta cần phân biệt và tính toán các loại tần số và tỷ lệ sau:

1. Tần số tương đối (Tỷ lệ chung - Joint Proportions)

Tỷ lệ chung được tính theo công thức:

\[ p_{ij} = \frac{n_{ij}}{n} \]

Đây là tỷ lệ các quan sát rơi vào ô \((i, j)\) trong toàn bộ mẫu. Tổng tất cả các tỷ lệ này bằng 1:

\[ \sum_i \sum_j p_{ij} = 1 \]

Ví dụ: Nếu \(p_{11} = \frac{60}{200} = 0.3\), tức là 30% khách hàng là người trẻ và sử dụng Mobile Banking.

2. Phân phối biên (Marginal Distributions)

  • Tỷ lệ tổng biên của dòng (Row Marginal Proportions):

\[ p_{i.} = \frac{n_{i.}}{n} = \sum_j p_{ij} \]

Đây là phân phối xác suất của biến \(X\).

Ví dụ: \(p_{1.} = \frac{120}{200} = 0.6\).

  • Tỷ lệ tổng biên của cột (Column Marginal Proportions):

\[ p_{.j} = \frac{n_{.j}}{n} = \sum_i p_{ij} \]

Đây là phân phối xác suất của biến \(Y\).

Ví dụ: \(p_{.1} = \frac{75}{200} = 0.375\).

3. Phân phối có điều kiện (Conditional Distributions)

  • Phân phối có điều kiện của Y theo X:

\[ p_{j|i} = P(Y = Y_j | X = X_i) = \frac{n_{ij}}{n_{i.}} \]

Ví dụ: Tỷ lệ người trẻ trong số người sử dụng Mobile Banking là \(\frac{60}{120} = 0.5\).

  • Phân phối có điều kiện của X theo Y:

\[ p_{i|j} = P(X = X_i | Y = Y_j) = \frac{n_{ij}}{n_{.j}} \]

Ví dụ: Trong số người trẻ, tỷ lệ dùng Mobile Banking là \(\frac{60}{75} = 0.8\).

Lưu ý: Nếu hai biến \(X\)\(Y\) độc lập thống kê (statistically independent), thì:

\[ p_{j|i} = p_j \quad \text{với mọi } i, \quad \text{và } \quad p_{i|j} = p_i \quad \text{với mọi } j \]

4. Tần số kỳ vọng (Expected Frequencies)

Nếu giả định \(X\)\(Y\) độc lập, thì tần số kỳ vọng tại ô \((i, j)\) là:

\[ m_{ij} = \frac{n_{i.} \cdot n_{.j}}{n} \]

2.1.3. Các phân phối xác suất liên quan

Việc lựa chọn mô hình xác suất phù hợp cho các tần số ô \(n_{ij}\) phụ thuộc vào cách dữ liệu được thu thập. Trong phân tích bảng ngẫu nhiên, chúng ta thường sử dụng các mô hình xác suất sau:

1. Phân phối Poisson

Được áp dụng khi tổng hàng và tổng cột không cố định (tức \(n, n_{i.}, n_{.j}\) đều là ngẫu nhiên), và các ô \(n_{ij}\) là các biến ngẫu nhiên Poisson độc lập với tham số (kỳ vọng) \(\mu_{ij}\). Khi đó tổng \(n = \sum n_{ij}\) cũng tuân theo phân phối Poisson. Đây là cơ sở để xây dựng mô hình Log-linear.

Ví dụ: Một trung tâm thương mại ghi nhận các sự cố an ninh xảy ra trong khuôn viên chia theo khu vực và loại sự cố.

2. Phân phối Multinomial (Đa thức)

Áp dụng khi cỡ mẫu \(n\) được cố định, và các đối tượng được phân loại ngẫu nhiên vào \(I \times J\) ô với xác suất \(p_{ij}\) cho mỗi ô (\(\sum p_{ij} = 1\)). Khi đó, vector tần số các ô tuân theo phân phối Multinomial với tổng số \(n\) và xác suất \((p_{11}, p_{12}, \dots, p_{IJ})\).

Ví dụ: Khảo sát \(n = 200\) khách hàng và phân loại họ theo hai biến.

3. Phân phối Product Multinomial (Tích các phân phối Đa thức)

  • Nếu tổng các dòng \(n_{i.}\) được cố định trước (Row marginals fixed): Khi đó, từng hàng \(i\) trong bảng là ngẫu nhiên theo phân phối Multinomial với kích thước mẫu \(n_i.\) và xác suất \((p_{i1}, p_{i2}, \dots, p_{iJ})\). Toàn bộ bảng là tích của \(I\) phân phối Multinomial độc lập.

Ví dụ: Chọn 120 người sử dụng Mobile Banking và phân chia theo độ tuổi.

  • Nếu tổng các cột \(n_{.j}\) được cố định trước (Column marginals fixed): Tương tự, mỗi cột \(j\) là một phân phối Multinomial theo biến dòng \(X\) với kích thước mẫu \(n_{.j}\) và xác suất \((p_{1j}, p_{2j}, \dots, p_{Ij})\).

Ví dụ: Chọn 75 người trẻ, 75 người trung niên, 50 người cao tuổi, rồi phân tích theo việc có dùng Mobile Banking hay không.

2.2. Bảng ngẫu nhiên 2X2

Bảng ngẫu nhiên \(2 \times 2\) là công cụ đơn giản nhưng rất hiệu quả để so sánh tỷ lệ giữa hai nhóm trong các nghiên cứu với biến kết quả nhị phân (ví dụ: thành công/thất bại).

Giả sử bảng có dạng:

Nhóm Thành công (\(y_1\)) Thất bại (\(y_2\)) Tổng cộng
Nhóm 1 (\(x_1\)) \(n_{11}\) \(n_{12}\) \(n_{1.}\)
Nhóm 2 (\(x_2\)) \(n_{21}\) \(n_{22}\) \(n_{2.}\)

Khi đó:

  • Tỷ lệ thành công nhóm 1: \(\hat{p}_1 = \frac{n_{11}}{n_{1.}}\)

  • Tỷ lệ thành công nhóm 2: \(\hat{p}_2 = \frac{n_{21}}{n_{2.}}\)

So sánh hai tỷ lệ này giúp đánh giá sự khác biệt giữa các nhóm trong nghiên cứu.

2.2.1. Hiệu hai tỷ lệ

Hiệu số tỷ lệ được định nghĩa là \(D = p_1 - p_2\), phản ánh mức chênh lệch về xác suất thành công giữa hai nhóm. Nếu \(D > 0\), nhóm 1 có tỷ lệ thành công cao hơn nhóm 2; nếu \(D < 0\), ngược lại; còn nếu \(D = 0\), không có sự khác biệt rõ ràng. Sai số chuẩn của \(\hat{D}\) được tính bằng:

\[ SE(\hat{D}) = \sqrt{\frac{\hat{p}_1(1-\hat{p}_1)}{n_1} + \frac{\hat{p}_2(1-\hat{p}_2)}{n_2}} \]

Khoảng tin cậy 95%:

\[ \hat{D} \pm z_{\alpha/2} \times SE(\hat{D}) \]

2.2.2. Tỷ số nguy cơ (Relative Risk - RR)

Tỷ số nguy cơ đo lường mức độ rủi ro giữa hai nhóm: \(RR = \frac{p_1}{p_2}\). Nếu \(RR > 1\), nhóm 1 có nguy cơ cao hơn nhóm 2; nếu \(RR < 1\), nhóm 1 có nguy cơ thấp hơn. Do phân phối \(RR\) không đối xứng, ta thường dùng \(\log(RR)\) với sai số chuẩn:

\[ SE(\log(\hat{RR})) = \sqrt{ \frac{1-\hat{p}_1}{n_{11}} + \frac{1-\hat{p}_2}{n_{21}} } \]

Khoảng tin cậy 95% cho \(\log(RR)\):

\[ \log(\hat{RR}) \pm z_{\alpha/2} \times SE(\log(\hat{RR})) \]

2.2.3. Tỷ số chênh (Odds Ratio - OR)

Tỷ số chênh đo lường mức độ xảy ra của sự kiện so với không xảy ra, được tính là:

\[ OR = \frac{n_{11}n_{22}}{n_{12}n_{21}} \]

  • Nếu \(OR > 1\), odds ở nhóm 1 cao hơn nhóm 2;

  • Nếu \(OR < 1\), odds ở nhóm 1 thấp hơn; \(OR = 1\) cho thấy hai biến độc lập.

Ý nghĩa của Odds Ratio (OR):

Odds Ratio (OR) là thước đo quan trọng trong các mô hình hồi quy logistic và nghiên cứu bệnh chứng. OR có các đặc điểm đáng chú ý:

  • Tính đối xứng: OR không đổi khi hoán đổi nhóm hoặc kết quả (OR mới = 1 / OR cũ).

  • Không bị ảnh hưởng bởi tổng biên: OR ổn định khi nhân các hàng/cột với một hằng số.

  • Xấp xỉ RR khi sự kiện hiếm: Khi xác suất nhỏ, OR ≈ RR.

  • Là nền tảng cho hồi quy logistic: Vì mô hình này dựa trên logit (log-odds).

Công thức sai số chuẩn và khoảng tin cậy 95% của \(\log(\widehat{OR})\):

\[ SE(\log(\widehat{OR})) = \sqrt{ \frac{1}{n_{11}} + \frac{1}{n_{12}} + \frac{1}{n_{21}} + \frac{1}{n_{22}} } \]

\[ \log(\widehat{OR}) \pm z_{\alpha/2} \times SE(\log(\widehat{OR})) \]

So sánh các thước đo:

  • Hiệu số tỷ lệ (D): Dễ hiểu, đo lường khác biệt tuyệt đối.

  • Tỷ số nguy cơ (RR): Phù hợp trong nghiên cứu thuần tập hoặc thử nghiệm ngẫu nhiên.

  • Tỷ số chênh (OR): Phổ biến trong nghiên cứu bệnh chứng và mô hình GLM, nhưng cần diễn giải thận trọng khi sự kiện phổ biến.

2.3. Kiểm định Chi-bình phương Pearson

Kiểm định Chi-bình phương Pearson thường được dùng để đánh giá mối quan hệ giữa hai biến định tính. Thống kê kiểm định được tính bằng:

\[ \chi^2 = \sum_{i=1}^I \sum_{j=1}^J \frac{(n_{ij} - \hat{m}_{ij})^2}{\hat{m}_{ij}} \]

Trong đó, \(n_{ij}\) là tần số quan sát và \(\hat{m}_{ij}\) là tần số kỳ vọng nếu hai biến độc lập.

  • Giả thuyết H₀: Hai biến độc lập.

  • Bậc tự do: \(df = (I - 1)(J - 1)\)

  • Quy tắc: Bác bỏ H₀ nếu:

    • \(\chi^2 > \chi^2_{\alpha, df}\)

    • \(p < \alpha\)

Điều kiện áp dụng:

  • Mọi tần số kỳ vọng ≥ 1

  • Không quá 20% số ô có \(\hat{m}_{ij} < 5\)

Nếu điều kiện không thỏa mãn (ví dụ bảng thưa hoặc cỡ mẫu nhỏ), nên dùng kiểm định chính xác Fisher.

2.4. Mô hình hồi quy

2.4.1. Mô hình Logistic (Logistic Regression Model)

Mô hình hồi quy logistic được sử dụng để dự đoán xác suất xảy ra của một biến nhị phân (có/không, 1/0, đỗ/trượt…).

Thay vì mô hình hóa trực tiếp kết quả, mô hình logistic mô hình hóa xác suất thông qua hàm logistic (sigmoid) – giúp đảm bảo giá trị dự đoán luôn nằm trong khoảng (0, 1).

  • Tỷ số chênh (Odds): \[ \text{Odds} = \frac{p}{1 - p} \]

  • Hàm logit (log-odds): \[ \log\left(\frac{p}{1 - p}\right) = \beta_0 + \beta_1 X_1 + \cdots + \beta_p X_p \]

  • Hàm dự đoán (sigmoid): \[ p = \frac{1}{1 + e^{-(\beta_0 + \beta_1 X_1 + \cdots + \beta_p X_p)}} \]

  • Odds Ratio (OR): \[ OR = e^{\beta} \]

Ý nghĩa:

  • OR > 1: odds tăng → xác suất tăng.

  • OR < 1: odds giảm → xác suất giảm.

  • OR = 1: không ảnh hưởng.

Ưu điểm:

  • Diễn giải trực quan bằng xác suất hoặc odds ratio.

  • Tính toán hiệu quả, không yêu cầu tài nguyên cao.

  • Là nền tảng của nhiều mô hình thống kê hiện đại.

2.4.2. Mô hình Probit

Mô hình Probit được sử dụng để phân tích và dự đoán xác suất xảy ra của một biến phản hồi nhị phân (0/1), tương tự như mô hình Logit. Tuy nhiên, thay vì sử dụng hàm logistic, Probit dùng hàm phân phối tích lũy chuẩn (CDF) để ánh xạ đầu vào thành xác suất.

Gọi \(Y\) là biến nhị phân (nhận giá trị 0 hoặc 1), mô hình Probit giả định rằng:

\[ P(Y = 1 \mid X) = \Phi(X\beta) \]

Trong đó:

  • \(\Phi(\cdot)\) là hàm phân phối tích lũy chuẩn (CDF) của phân phối chuẩn chuẩn hóa.

  • \(X\beta = \beta_0 + \beta_1 X_1 + \cdots + \beta_p X_p\)

Hàm liên kết trong mô hình Probit là nghịch đảo của hàm phân phối chuẩn:

\[ \Phi^{-1}(P(Y=1)) = X\beta \]

Điều này cho thấy mối quan hệ tuyến tính giữa các biến độc lập và z-score (giá trị chuẩn hóa theo phân phối chuẩn).

Diễn giải hệ số

  • Các hệ số \(\beta\) không thể diễn giải trực tiếp như trong mô hình Logit.

  • Tuy nhiên, dấu của \(\beta\) vẫn cho biết chiều hướng ảnh hưởng của biến độc lập đến xác suất xảy ra biến phụ thuộc.

  • Có thể tính hiệu ứng cận biên (marginal effects) để giải thích ý nghĩa thực tế.

So sánh với Logit

Đặc điểm Logit Probit
Hàm liên kết Logit: \(\log(\frac{p}{1-p})\) Chuẩn hóa: \(\Phi^{-1}(p)\)
Phân phối ngầm Logistic Chuẩn chuẩn hóa (Normal)
Diễn giải hệ số OR (dễ hiểu hơn) Phức tạp hơn, cần hiệu ứng cận biên
Ứng dụng Phổ biến Dùng khi dữ liệu có tính chuẩn hóa

Ưu điểm

  • Phù hợp khi giả định rằng sai số có phân phối chuẩn.

  • Kết quả ổn định trong nhiều trường hợp có phân phối xác suất chuẩn ngầm.

2.4.3. Mô hình Cloglog

Mô hình Cloglog là một dạng của hồi quy nhị phân, trong đó hàm liên kết là:

\[ \log(-\log(1 - p)) = \eta = \beta_0 + \beta_1 x_1 + \cdots + \beta_k x_k \]

Từ đó, xác suất xảy ra sự kiện là:

\[ p = 1 - \exp(-\exp(\eta)) \]

Để ước lượng các tham số \(\beta\), mô hình sử dụng phương pháp ước lượng hợp lý tối đa (MLE), thông qua việc cực đại hóa hàm log-likelihood:

\[ \ell(\beta) = \sum_{i=1}^{n} \left[ y_i \log(1 - \exp(-\exp(\eta_i))) + (1 - y_i)( -\exp(\eta_i)) \right] \]

Phương pháp này đặc biệt phù hợp khi xác suất xảy ra sự kiện không đối xứng hoặc sự kiện hiếm. Hàm liên kết cloglog giúp mô hình phản ánh tốt hơn sự thay đổi nhanh chóng về xác suất gần ngưỡng 1.

2.5. Kiểm định sự phù hợp của mô hình

Để đánh giá mức độ phù hợp của mô hình hồi quy nhị phân (logit, probit, cloglog), một số chỉ số đánh giá phổ biến được sử dụng:

2.5.1. Chỉ số AIC (Akaike Information Criterion)

  • Công thức:

    \[ AIC = -2 \cdot \log(L) + 2k \]

    Trong đó:

    • \(L\) là giá trị hàm hợp lý tối đa (likelihood),

    • \(k\) là số lượng tham số ước lượng trong mô hình.

  • Ý nghĩa: AIC là thước đo cân bằng giữa độ phù hợp của mô hình và độ phức tạp của nó. Mô hình có AIC thấp hơn được xem là phù hợp hơn, tránh được hiện tượng overfitting.

2.5.2. Chỉ số BIC (Bayesian Information Criterion)

BIC là một tiêu chí đánh giá mức độ phù hợp của mô hình, đặc biệt hữu ích khi so sánh nhiều mô hình khác nhau. BIC được tính theo công thức:

\[ \text{BIC} = -2 \cdot \log(L) + k \cdot \log(n) \]

Trong đó:

  • \(L\): Log-likelihood của mô hình

  • \(k\): Số tham số ước lượng trong mô hình

  • \(n\): Kích thước mẫu

Ý nghĩa:

  • BIC phạt mạnh các mô hình có quá nhiều tham số (để tránh overfitting).

  • Mô hình có BIC nhỏ hơn được xem là phù hợp hơn.

2.5.3. Log-Likelihood (Giá trị log của hàm hợp lý)

  • Công thức: \[ \log L = \sum_{i=1}^{n} \log f(y_i \mid x_i; \beta) \]
    • \(\log L\) càng lớn (ít âm hơn) thì mô hình càng phù hợp với dữ liệu quan sát.
  • Ý nghĩa: So sánh các mô hình dựa trên log-likelihood giúp xác định mô hình nào mô tả dữ liệu tốt hơn. Tuy nhiên, vì giá trị này thường âm và phụ thuộc vào số lượng tham số, cần kết hợp với AIC để đưa ra đánh giá toàn diện.

2.5.4. Chỉ số McFadden’s \(R^2\) (Pseudo R-squared)

Trong mô hình hồi quy logistic hoặc các mô hình hồi quy nhị phân phi tuyến khác như Probit, Cloglog, việc đánh giá mức độ phù hợp của mô hình không thể sử dụng chỉ số \(R^2\) truyền thống như trong hồi quy tuyến tính. Thay vào đó, ta sử dụng Pseudo \(R^2\), với phiên bản phổ biến nhất là McFadden’s \(R^2\).

Chỉ số này được tính theo công thức:

\[ R^2_{\text{McFadden}} = 1 - \frac{\log L_{\text{model}}}{\log L_{\text{null}}} \]

Trong đó:

  • \(\log L_{\text{model}}\) là log-likelihood của mô hình đầy đủ (có các biến giải thích),

  • \(\log L_{\text{null}}\) là log-likelihood của mô hình rỗng (chỉ có hằng số).

Ý nghĩa:

  • \(R^2_{\text{McFadden}}\) càng cao thì mô hình càng phù hợp với dữ liệu.

  • Giá trị thường nằm trong khoảng từ 0 đến 1, nhưng trong thực tế, các giá trị từ 0.2 đến 0.4 đã được coi là phù hợp tốt đối với dữ liệu nhị phân.

2.6. Dự báo

Sau khi xây dựng mô hình hồi quy nhị phân (như logit, probit hoặc cloglog), ta có thể sử dụng hàm predict() để dự báo kết quả cho các quan sát mới. Hàm này có hai lựa chọn phổ biến thông qua đối số type, bao gồm:

2.6.2. type = “response”

  • Trả về xác suất xảy ra của sự kiện \(Y = 1\), được tính thông qua hàm liên kết nghịch đảo:

    • Với logit: \(\hat{p} = \frac{1}{1 + e^{-\eta}}\)

    • Với probit: \(\hat{p} = \Phi(\eta)\)

    • Với cloglog: \(\hat{p} = 1 - \exp(-\exp(\eta))\)

  • Đây là cách dự báo phù hợp khi cần đưa ra xác suất trực tiếp cho từng trường hợp mới.

CHƯƠNG 3: DỮ LIỆU NGHIÊN CỨU

3.1. Giới thiệu bộ dữ liệu

Bộ dữ liệu bao gồm 500 quan sát trên tổng 13 biến (gồm 4 biến định lượng và 9 biến định tính), phản ánh thông tin về thói quen tiêu thụ caffeine của người dùng và mức độ ảnh hưởng đến giấc ngủ. Các biến trong dữ liệu thể hiện nhiều khía cạnh khác nhau như loại đồ uống chứa caffeine được sử dụng (cà phê, trà, nước tăng lực), thời điểm tiêu thụ trong ngày (sáng, chiều, tối), giới tính, cũng như mức độ tập trung và chất lượng giấc ngủ sau khi tiêu thụ. Dưới đây là bảng chi tiết mô tả từng biến trong dữ liệu, tương ứng với từng đối tượng được khảo sát.

d <- read.csv("D:/PTDLDT/caffeine_intake_tracker.csv")
data.table(d)
dldt <- c("sleep_impacted", 
          "beverage_coffee", "beverage_energy_drink", "beverage_tea",
          "time_of_day_afternoon", "time_of_day_evening", "time_of_day_morning",
          "gender_female", "gender_male")
dt <- d[, dldt]
dt <- data.frame(lapply(dt, as.factor))

3.2. Mô tả các biến trong bộ dữ liệu

  • caffeine_mg: Lượng caffeine tiêu thụ trong ngày, đã chuẩn hóa về thang từ 0 đến 1.

  • age: Độ tuổi của người tham gia khảo sát, chuẩn hóa từ nhỏ nhất đến lớn nhất.

  • focus_level: Mức độ tập trung của người tham gia sau khi tiêu thụ caffeine, theo thang điểm từ 0 đến 1 (1 là tập trung tối đa).

  • sleep_quality: Mức độ chất lượng giấc ngủ của người tham gia, tự đánh giá theo thang điểm từ 0 đến 1 (1 là ngủ tốt nhất).

  • sleep_impacted: Giấc ngủ có bị ảnh hưởng bởi caffeine hay không (0 = không bị ảnh hưởng, 1 = bị ảnh hưởng).

  • beverage_coffee: Người tham gia có tiêu thụ cà phê hay không (True = có, False = không).

  • beverage_energy_drink: Người tham gia có tiêu thụ nước tăng lực hay không (True = có, False = không).

  • beverage_tea: Người tham gia có tiêu thụ trà hay không (True = có, False = không).

  • time_of_day_morning: Caffeine được tiêu thụ vào buổi sáng hay không (True = có, False = không).

  • time_of_day_afternoon: Caffeine được tiêu thụ vào buổi chiều hay không (True = có, False = không).

  • time_of_day_evening: Caffeine được tiêu thụ vào buổi tối hay không (True = có, False = không).

  • gender_female: Người tham gia là nữ hay không (True = nữ, False = không phải nữ).

  • gender_male: Người tham gia là nam hay không (True = nam, False = không phải nam).

CHƯƠNG 4: PHÂN TÍCH VÀ ĐƯA RA KẾT QUẢ

Trong bài luận này, biến phụ thuộc được lựa chọn là sleep_impacted, phản ánh việc giấc ngủ có bị ảnh hưởng bởi caffeine hay không. Các biến định tính còn lại sẽ được phân tích và kiểm định nhằm xác định liệu chúng có mối liên hệ thống kê với biến phụ thuộc, từ đó góp phần làm sáng tỏ những yếu tố có thể tác động đến chất lượng giấc ngủ của người tiêu dùng caffeine.

data.table(dt)

4.1. Thống kê mô tả biến phụ thuộc

Lập bảng tần số và bảng tần suất

table(factor(dt$sleep_impacted,
             levels = c(0, 1),
             labels = c("Không bị ảnh hưởng", "Bị ảnh hưởng")))
## 
## Không bị ảnh hưởng       Bị ảnh hưởng 
##                297                203
table(factor(dt$sleep_impacted,
             levels = c(0, 1),
             labels = c("Không bị ảnh hưởng", "Bị ảnh hưởng"))) / length(dt$sleep_impacted)
## 
## Không bị ảnh hưởng       Bị ảnh hưởng 
##              0.594              0.406

Lập biểu đồ

# Gán nhãn rõ ràng cho biến sleep_impacted
dt$sleep_label <- factor(dt$sleep_impacted,
                         levels = c(0, 1),
                         labels = c("Không bị ảnh hưởng", "Bị ảnh hưởng"))

# Tính tỷ lệ
df_tyle <- as.data.frame(prop.table(table(dt$sleep_label)))
colnames(df_tyle) <- c("sleep_label", "tyle")

# Vẽ biểu đồ
ggplot(df_tyle, aes(x = sleep_label, y = tyle, fill = sleep_label)) +
  geom_col(width = 0.6) +
  geom_text(aes(label = scales::percent(tyle, accuracy = 0.1)),
            vjust = -0.5, size = 5) +
  scale_y_continuous(labels = scales::percent_format()) +
  scale_fill_manual(values = c("Không bị ảnh hưởng" = "#81D4FA",  # xanh lá
                               "Bị ảnh hưởng" = "#64B5F6")) +      # đỏ
  labs(title = "Biểu đồ 4.1. Tỷ lệ giấc ngủ bị ảnh hưởng bởi caffeine",
       x = "Tình trạng ảnh hưởng",
       y = "Tỷ lệ") +
  theme_minimal(base_size = 14) +
  theme(legend.position = "none")

Nhận xét

  • Biểu đồ cột và bảng ở trên thể hiện tỷ lệ người tham gia khảo sát có giấc ngủ bị ảnh hưởng bởi việc tiêu thụ caffeine. Theo kết quả thu được, có 203 người (chiếm 40.6%) cho biết giấc ngủ của họ bị ảnh hưởng, trong khi 297 người còn lại (chiếm 59.4%) cho biết không bị ảnh hưởng.

  • Như vậy, phần lớn người tham gia không cảm nhận thấy tác động tiêu cực rõ rệt của caffeine đến giấc ngủ, tuy nhiên tỷ lệ bị ảnh hưởng vẫn chiếm một phần đáng kể, cho thấy cần cân nhắc thời điểm và loại đồ uống khi sử dụng caffeine, đặc biệt là với những người nhạy cảm về giấc ngủ.

4.2. Thống kê suy diễn

4.2.1. Kiểm định tính độc lập

Kiểm định Chi bình phương là một phương pháp thống kê phổ biến dùng để kiểm tra mức độ độc lập giữa hai biến phân loại. Phương pháp này giúp xác định liệu có mối quan hệ đáng kể nào giữa các biến hay không thông qua so sánh giữa tần số quan sát và tần số kỳ vọng trong bảng chéo.

Công thức tính giá trị thống kê Chi bình phương được thể hiện như sau:

\[\chi^2 = \sum_{i,j} \frac{(n_{ij} -\hat{\mu}_{ij})^2}{\hat{\mu}_{ij}}\]

4.2.2. Biến sleep_impacted và beverage_coffee

Giả thuyết kiểm định:

  • H₀: Tình trạng giấc ngủ bị ảnh hưởng và việc tiêu thụ cà phê là hai biến độc lập.

  • H₁: Tình trạng giấc ngủ bị ảnh hưởng và việc tiêu thụ cà phê có mối liên hệ với nhau.

mtht <- table(dt$sleep_impacted, dt$beverage_coffee)
chisq.test(mtht)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  mtht
## X-squared = 36.058, df = 1, p-value = 1.915e-09

Nhận xét: Qua kết quả kiểm định cho thấy p-value = 1.915 × 10⁻⁹ < 0.05, do đó ta bác bỏ giả thuyết \(H_0\). Điều này đồng nghĩa với việc tình trạng giấc ngủ bị ảnh hưởng và việc tiêu thụ cà phê có mối liên hệ với nhau.

Nói cách khác, việc uống cà phê có thể ảnh hưởng đến chất lượng giấc ngủ của người tham gia khảo sát. Kết quả này góp phần củng cố giả thuyết rằng caffeine trong cà phê là một yếu tố có thể làm suy giảm chất lượng giấc ngủ ở một bộ phận người dùng.

4.2.3. Biến sleep_impacted và beverage_energy_drink

Giả thuyết kiểm định:

  • H₀: Tình trạng giấc ngủ bị ảnh hưởng và việc tiêu thụ nước tăng lực là hai biến độc lập.

  • H₁: Tình trạng giấc ngủ bị ảnh hưởng và việc tiêu thụ nước tăng lực có mối liên hệ với nhau.

mtht1 <- table(dt$sleep_impacted, dt$beverage_energy_drink)
chisq.test(mtht1)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  mtht1
## X-squared = 10.569, df = 1, p-value = 0.00115

Nhận xét:

Qua kết quả kiểm định cho thấy p-value = 0.00115 < 0.05, do đó ta bác bỏ giả thuyết \(H_0\). Điều này đồng nghĩa với việc tình trạng giấc ngủ bị ảnh hưởng và việc tiêu thụ nước tăng lực có mối liên hệ với nhau.

Nói cách khác, việc uống nước tăng lực có thể ảnh hưởng đến chất lượng giấc ngủ của người tham gia khảo sát. Kết quả này củng cố nhận định rằng caffeine trong nước tăng lực là một yếu tố tiềm ẩn có thể làm suy giảm chất lượng giấc ngủ, đặc biệt với những người nhạy cảm với chất kích thích.

4.2.4. Biến sleep_impacted và beverage_tea

Giả thuyết kiểm định:

  • H₀: Tình trạng giấc ngủ bị ảnh hưởng và việc tiêu thụ trà là hai biến độc lập.

  • H₁: Tình trạng giấc ngủ bị ảnh hưởng và việc tiêu thụ trà có mối liên hệ với nhau.

mtht2 <- table(dt$sleep_impacted, dt$beverage_tea)
chisq.test(mtht2)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  mtht2
## X-squared = 67.897, df = 1, p-value < 2.2e-16

Qua kết quả kiểm định cho thấy p-value < 2.2 × 10⁻¹⁶ < 0.05, do đó ta bác bỏ giả thuyết \(H_0\). Điều này có nghĩa là tình trạng giấc ngủ bị ảnh hưởng và việc tiêu thụ trà có mối liên hệ với nhau. Nói cách khác, việc uống trà có thể ảnh hưởng đến chất lượng giấc ngủ của người tham gia khảo sát.

4.2.5. Biến sleep_impacted và time_of_day_afternoon

Giả thuyết kiểm định:

  • H₀: Tình trạng giấc ngủ bị ảnh hưởng và việc tiêu thụ caffeine vào buổi chiều là hai biến độc lập.

  • H₁: Tình trạng giấc ngủ bị ảnh hưởng và việc tiêu thụ caffeine vào buổi chiều có mối liên hệ với nhau.

mtht3 <- table(dt$sleep_impacted, dt$time_of_day_afternoon)
chisq.test(mtht3)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  mtht3
## X-squared = 3.5886, df = 1, p-value = 0.05818

Nhận xét:

Kết quả kiểm định cho thấy p-value = 0.05818 > 0.05, do đó ta không đủ bằng chứng để bác bỏ giả thuyết \(H_0\) ở mức ý nghĩa 5%.

Điều này cho thấy không có mối liên hệ thống kê có ý nghĩa giữa việc tiêu thụ caffeine vào buổi chiềutình trạng giấc ngủ bị ảnh hưởng. Nói cách khác, dữ liệu khảo sát hiện tại chưa chỉ ra được rằng tiêu thụ caffeine vào buổi chiều có ảnh hưởng rõ rệt đến chất lượng giấc ngủ của người tham gia.

4.2.6. Biến sleep_impacted và time_of_day_evening

Giả thuyết kiểm định:

  • H₀: Tình trạng giấc ngủ bị ảnh hưởng và việc tiêu thụ caffeine vào buổi tối là hai biến độc lập.

  • H₁: Tình trạng giấc ngủ bị ảnh hưởng và việc tiêu thụ caffeine vào buổi tối có mối liên hệ với nhau.

mtht4 <- table(dt$sleep_impacted, dt$time_of_day_evening)
chisq.test(mtht4)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  mtht4
## X-squared = 166.26, df = 1, p-value < 2.2e-16

Nhận xét:

Kết quả kiểm định cho thấy p-value < 2.2 × 10⁻¹⁶ < 0.05, do đó ta bác bỏ giả thuyết \(H_0\). Điều này cho thấy tình trạng giấc ngủ bị ảnh hưởng và việc tiêu thụ caffeine vào buổi tối có mối liên hệ với nhau. Nói cách khác, việc uống caffeine vào buổi tối có khả năng làm suy giảm chất lượng giấc ngủ của người tham gia khảo sát.

4.2.7. Biến sleep_impacted và time_of_day_morning

Giả thuyết kiểm định:

  • H₀: Tình trạng giấc ngủ bị ảnh hưởng và việc tiêu thụ caffeine vào buổi sáng là hai biến độc lập.

  • H₁: Tình trạng giấc ngủ bị ảnh hưởng và việc tiêu thụ caffeine vào buổi sáng có mối liên hệ với nhau.

mtht5 <- table(dt$sleep_impacted, dt$time_of_day_morning)
chisq.test(mtht5)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  mtht5
## X-squared = 0.008461, df = 1, p-value = 0.9267

Nhận xét:

Kết quả kiểm định cho thấy p-value = 0.9267 > 0.05, do đó ta không bác bỏ giả thuyết \(H_0\). Điều này có nghĩa là chưa có bằng chứng thống kê đủ mạnh để khẳng định mối liên hệ giữa việc tiêu thụ caffeine vào buổi sáng và tình trạng giấc ngủ bị ảnh hưởng. Nói cách khác, việc uống caffeine vào buổi sáng dường như không ảnh hưởng đáng kể đến chất lượng giấc ngủ của người tham gia khảo sát.

4.2.8. Biến sleep_impacted và gender_female

Giả thuyết kiểm định:

  • H₀: Tình trạng giấc ngủ bị ảnh hưởng và giới tính nữ là hai biến độc lậ.

  • H₁: Tình trạng giấc ngủ bị ảnh hưởng và giới tính nữ có mối liên hệ với nhau.

mtht6 <- table(dt$sleep_impacted, dt$gender_female)
chisq.test(mtht6)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  mtht6
## X-squared = 0, df = 1, p-value = 1

Nhận xét:

Kết quả kiểm định cho thấy p-value = 1 > 0.05, do đó ta không bác bỏ giả thuyết \(H_0\). Điều này có nghĩa là không có bằng chứng thống kê nào cho thấy mối liên hệ giữa giới tính nữ và việc giấc ngủ bị ảnh hưởng bởi caffeine. Nói cách khác, giới tính nữ không phải là yếu tố có ảnh hưởng rõ rệt đến chất lượng giấc ngủ trong bối cảnh tiêu thụ caffeine theo dữ liệu khảo sát hiện có.

4.2.9. Biến sleep_impacted và gender_male

Giả thuyết kiểm định:

  • H₀: Tình trạng giấc ngủ bị ảnh hưởng và giới tính nam là hai biến độc lập.

  • H₁: Tình trạng giấc ngủ bị ảnh hưởng và giới tính nam có mối liên hệ với nhau.

mtht7 <- table(dt$sleep_impacted, dt$gender_male)
chisq.test(mtht7)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  mtht7
## X-squared = 0, df = 1, p-value = 1

Nhận xét:

Kết quả kiểm định cho thấy p-value = 1 > 0.05, do đó ta không bác bỏ giả thuyết \(H_0\). Điều này cho thấy không có mối liên hệ thống kê có ý nghĩa giữa giới tính nam và việc giấc ngủ bị ảnh hưởng bởi caffeine. Nói cách khác, nam giới không có khả năng bị ảnh hưởng đến giấc ngủ khác biệt rõ rệt so với các nhóm còn lại trong khảo sát này.

Kết luận:

  • Qua các kiểm định Chi bình phương, chỉ có các biến như loại đồ uống caffeine (cà phê, trà, nước tăng lực) và thời điểm tiêu thụ trong ngày (đặc biệt là buổi tối) cho thấy có mối liên hệ rõ ràng với biến sleep_impacted (giấc ngủ bị ảnh hưởng).

  • Ngược lại, các biến liên quan đến giới tính hoặc việc tiêu thụ vào buổi sáng không có ý nghĩa thống kê trong bộ dữ liệu này.

  • Tiếp theo, tác giả sẽ tiến hành mô tả chi tiết các biến có ảnh hưởng, từ đó đưa ra cái nhìn khái quát hơn về mức độ tác động của từng yếu tố đến chất lượng giấc ngủ khi tiêu thụ caffeine.

4.3. Thống kê mô tả 2 biến

4.3.1. Biến Biến sleep_impacted và beverage_coffee

Lập bảng tần số và bảng tần suất

# Gán nhãn rõ ràng cho các biến
dt$sleep_impacted <- factor(dt$sleep_impacted,
                         levels = c(0, 1),
                         labels = c("Không bị ảnh hưởng", "Bị ảnh hưởng"))

dt$beverage_coffee <- factor(dt$beverage_coffee,
                          levels = c(FALSE, TRUE),
                          labels = c("Không uống cà phê", "Có uống cà phê"))

tkmt<- table(dt$sleep_impacted, dt$beverage_coffee)
addmargins(tkmt)
##                     
##                      Không uống cà phê Có uống cà phê Sum
##   Không bị ảnh hưởng               173            124 297
##   Bị ảnh hưởng                      62            141 203
##   Sum                              235            265 500
ptkmt <- prop.table(tkmt)
addmargins(ptkmt)
##                     
##                      Không uống cà phê Có uống cà phê   Sum
##   Không bị ảnh hưởng             0.346          0.248 0.594
##   Bị ảnh hưởng                   0.124          0.282 0.406
##   Sum                            0.470          0.530 1.000

Lập biểu đồ

# Chuyển bảng tần số thành data frame
df_plot <- as.data.frame(tkmt)
colnames(df_plot) <- c("Sleep_Impacted", "Beverage_Coffee", "Count")

# Vẽ biểu đồ tần số
library(ggplot2)
ggplot(df_plot, aes(x = Beverage_Coffee, y = Count, fill = Sleep_Impacted)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.7), width = 0.6) +
  geom_text(aes(label = Count),
            position = position_dodge(width = 0.7),
            vjust = -0.3, size = 3.5) +
  scale_fill_manual(values = c("#6BAED6", "#2171B5")) +
  labs(
    title = "Biểu đồ 4.2. Tác động của cà phê đến giấc ngủ",
    x = "Tình trạng tiêu thụ cà phê",
    y = "Số người",
    fill = "Tình trạng giấc ngủ"
  ) +
  theme_minimal()

Nhận xét:

Bảng và biểu đồ trên cho thấy trong nhóm không uống cà phê, có 173 người không bị ảnh hưởng đến giấc ngủ (chiếm khoảng 34.6%) và 62 người bị ảnh hưởng (chiếm 12.4%). Trong khi đó, ở nhóm có uống cà phê, có 124 người không bị ảnh hưởng (chiếm 24.8%) và 141 người bị ảnh hưởng (chiếm 28.2%).

Tổng quan, ta thấy rằng tỷ lệ người bị ảnh hưởng đến giấc ngủ cao hơn rõ rệt trong nhóm có uống cà phê so với nhóm không uống. Điều này củng cố thêm kết luận từ kiểm định thống kê, cho thấy việc tiêu thụ cà phê có thể là yếu tố làm suy giảm chất lượng giấc ngủ ở một bộ phận người tham gia khảo sát.

4.3.2. Biến Biến sleep_impacted và beverage_energy_drink

Lập bảng tần số và bảng tần suất

dt$beverage_energy_drink <- factor(dt$beverage_energy_drink,
                                   levels = c(FALSE, TRUE),
                                   labels = c("Không uống energy drink", "Có uống energy drink"))
tkmt1 <- table(dt$sleep_impacted, dt$beverage_energy_drink)
addmargins(tkmt1)
##                     
##                      Không uống energy drink Có uống energy drink Sum
##   Không bị ảnh hưởng                     280                   17 297
##   Bị ảnh hưởng                           173                   30 203
##   Sum                                    453                   47 500
ptkmt1 <- prop.table(tkmt1)
addmargins(ptkmt1)
##                     
##                      Không uống energy drink Có uống energy drink   Sum
##   Không bị ảnh hưởng                   0.560                0.034 0.594
##   Bị ảnh hưởng                         0.346                0.060 0.406
##   Sum                                  0.906                0.094 1.000

Lập biểu đồ

# Chuyển bảng tần số thành data frame
df_plot1 <- as.data.frame(tkmt1)
colnames(df_plot1) <- c("Sleep_Impacted", "Beverage_Energy", "Count")

# Vẽ biểu đồ
library(ggplot2)
ggplot(df_plot1, aes(x = Beverage_Energy, y = Count, fill = Sleep_Impacted)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.7), width = 0.6) +
  geom_text(aes(label = Count),
            position = position_dodge(width = 0.7),
            vjust = -0.3, size = 3.5) +
  scale_fill_manual(values = c("#6BAED6", "#2171B5")) +
  labs(
    title = "Biểu đồ 4.3. Tác động của energy drink đến giấc ngủ",
    x = "Tình trạng tiêu thụ energy drink",
    y = "Số người",
    fill = "Tình trạng giấc ngủ"
  ) +
  theme_minimal()

Nhận xét:

Bảng và biểu đồ trên cho thấy trong nhóm không uống nước tăng lực, có 280 người không bị ảnh hưởng đến giấc ngủ (chiếm khoảng 56.0%) và 173 người bị ảnh hưởng (chiếm 34.6%). Trong khi đó, ở nhóm có uống nước tăng lực, chỉ có 17 người không bị ảnh hưởng (chiếm 3.4%), trong khi có 30 người bị ảnh hưởng (chiếm 6.0%).

Tổng quan, ta thấy rằng tỷ lệ người bị ảnh hưởng đến giấc ngủ cao hơn rõ rệt trong nhóm có uống nước tăng lực, trong khi phần lớn những người không bị ảnh hưởng lại thuộc nhóm không uống.

4.3.3. Biến Biến sleep_impacted và beverage_tea

Lập bảng tần số và bảng tần suất

dt$beverage_tea <- factor(dt$beverage_tea,
                          levels = c(FALSE, TRUE),
                          labels = c("Không uống trà", "Có uống trà"))
# Lập bảng tần số chéo
tkmt2 <- table(dt$sleep_impacted, dt$beverage_tea)
addmargins(tkmt2)
##                     
##                      Không uống trà Có uống trà Sum
##   Không bị ảnh hưởng            141         156 297
##   Bị ảnh hưởng                  171          32 203
##   Sum                           312         188 500
ptkmt2 <- prop.table(tkmt2)
addmargins(ptkmt2)
##                     
##                      Không uống trà Có uống trà   Sum
##   Không bị ảnh hưởng          0.282       0.312 0.594
##   Bị ảnh hưởng                0.342       0.064 0.406
##   Sum                         0.624       0.376 1.000

Lập biểu đồ

# Chuyển sang dạng data frame để vẽ
df_plot2 <- as.data.frame(tkmt2)
colnames(df_plot2) <- c("Sleep_Impacted", "Beverage_Tea", "Count")

# Vẽ biểu đồ
library(ggplot2)
ggplot(df_plot2, aes(x = Beverage_Tea, y = Count, fill = Sleep_Impacted)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.7), width = 0.6) +
  geom_text(aes(label = Count),
            position = position_dodge(width = 0.7),
            vjust = -0.3, size = 3.5) +
  scale_fill_manual(values = c("#6BAED6", "#2171B5")) +
  labs(
    title = "Biểu đồ 4.4. Ảnh hưởng của việc uống trà đến giấc ngủ",
    x = "Tình trạng tiêu thụ trà",
    y = "Số người",
    fill = "Tình trạng giấc ngủ"
  ) +
  theme_minimal()

Nhận xét:

Bảng và biểu đồ trên cho thấy trong nhóm không uống trà, có 141 người không bị ảnh hưởng đến giấc ngủ (chiếm khoảng 28.2%) và 171 người bị ảnh hưởng (chiếm 34.2%). Trong khi đó, ở nhóm có uống trà, có 156 người không bị ảnh hưởng (chiếm 31.2%) và chỉ có 32 người bị ảnh hưởng (chiếm 6.4%).

Tổng quan, ta nhận thấy rằng tỷ lệ người bị ảnh hưởng đến giấc ngủ thấp hơn rõ rệt trong nhóm có uống trà, trong khi phần lớn những người bị ảnh hưởng lại thuộc nhóm không uống. Điều này cho thấy việc uống trà có thể không phải là nguyên nhân chính gây rối loạn giấc ngủ, hoặc thậm chí có thể liên quan đến một lối sống giúp cải thiện giấc ngủ ở một số người.

4.3.4. Biến sleep_impacted và time_of_day_evening

Lập bảng tần số và bảng tần suất

dt$time_of_day_evening <- factor(dt$time_of_day_evening,
                                 levels = c(FALSE, TRUE),
                                 labels = c("Không uống buổi tối", "Có uống buổi tối"))
tkmt3 <- table(dt$sleep_impacted, dt$time_of_day_evening)
addmargins(tkmt3)
##                     
##                      Không uống buổi tối Có uống buổi tối Sum
##   Không bị ảnh hưởng                 228               69 297
##   Bị ảnh hưởng                        36              167 203
##   Sum                                264              236 500
ptkmt3 <- prop.table(tkmt3)
addmargins(ptkmt3)
##                     
##                      Không uống buổi tối Có uống buổi tối   Sum
##   Không bị ảnh hưởng               0.456            0.138 0.594
##   Bị ảnh hưởng                     0.072            0.334 0.406
##   Sum                              0.528            0.472 1.000

Lập biểu đồ

# Tạo bảng dữ liệu từ bảng tần số
df_evening <- as.data.frame(table(dt$sleep_impacted, dt$time_of_day_evening))

# Đặt tên cột cho rõ ràng
colnames(df_evening) <- c("Sleep_Impacted", "Evening_Intake", "Count")

# Vẽ biểu đồ cột
library(ggplot2)
ggplot(df_evening, aes(x = Evening_Intake, y = Count, fill = Sleep_Impacted)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.7), width = 0.6) +
  geom_text(aes(label = Count),
            position = position_dodge(width = 0.7),
            vjust = -0.3, size = 3.5) +
  scale_fill_manual(values = c("#6BAED6", "#2171B5")) +
  labs(
    title = "Biểu đồ 4.5. Ảnh hưởng giấc ngủ theo việc uống caffeine buổi tối",
    x = "Trạng thái tiêu thụ caffeine buổi tối",
    y = "Số người",
    fill = "Tình trạng giấc ngủ"
  ) +
  theme_minimal()

Nhận xét:

Bảng và biểu đồ trên cho thấy trong nhóm có uống caffeine vào buổi tối, có 167 người bị ảnh hưởng đến giấc ngủ (chiếm khoảng 33.4%) và chỉ có 69 người không bị ảnh hưởng (chiếm 13.8%). Trong khi đó, ở nhóm không uống buổi tối, có 228 người không bị ảnh hưởng (chiếm 45.6%) và chỉ có 36 người bị ảnh hưởng (chiếm 7.2%).

Tổng thể, có thể thấy rằng tỷ lệ người bị ảnh hưởng giấc ngủ cao hơn đáng kể trong nhóm có uống caffeine vào buổi tối, trong khi tỷ lệ không bị ảnh hưởng lại tập trung ở nhóm không uống. Điều này cho thấy rằng việc tiêu thụ caffeine vào buổi tối có thể là yếu tố làm tăng nguy cơ rối loạn giấc ngủ, và người sử dụng nên cân nhắc thời điểm uống để đảm bảo chất lượng giấc ngủ.

4.4. Kiểm định hiệu tỷ lệ

4.4.1. Biến Biến sleep_impacted và beverage_coffee

addmargins(tkmt)
##                     
##                      Không uống cà phê Có uống cà phê Sum
##   Không bị ảnh hưởng               173            124 297
##   Bị ảnh hưởng                      62            141 203
##   Sum                              235            265 500

\[ p_1 = P(\text{Bị ảnh hưởng giấc ngủ} \mid \text{Không uống cà phê}) \quad \text{(Tỷ lệ bị ảnh hưởng ở nhóm không uống cà phê)} \]

\[ p_2 = P(\text{Bị ảnh hưởng giấc ngủ} \mid \text{Có uống cà phê}) \quad \text{(Tỷ lệ bị ảnh hưởng ở nhóm có uống cà phê)} \]

Giả thuyết kiểm định:

\[ H_0: p_1 - p_2 = 0 \quad \text{(Tỷ lệ bị ảnh hưởng giấc ngủ ở hai nhóm bằng nhau)} \]

\[ H_1: p_1 - p_2 < 0 \quad \text{(Tỷ lệ bị ảnh hưởng ở nhóm không uống cà phê thấp hơn nhóm có uống cà phê)} \]

# Số người bị ảnh hưởng giấc ngủ trong từng nhóm uống cà phê
counts_coffee <- c(tkmt["Bị ảnh hưởng", "Không uống cà phê"],
                   tkmt["Bị ảnh hưởng", "Có uống cà phê"])

# Tổng số người trong từng nhóm uống cà phê
totals_coffee <- c(sum(tkmt[, "Không uống cà phê"]),
                   sum(tkmt[, "Có uống cà phê"]))

# Kiểm định tỉ lệ một phía: p1 < p2
test_coffee_less <- prop.test(counts_coffee, totals_coffee,
                              alternative = "less", correct = FALSE)

# Hiển thị kết quả
test_coffee_less
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  counts_coffee out of totals_coffee
## X-squared = 37.162, df = 1, p-value = 5.436e-10
## alternative hypothesis: less
## 95 percent confidence interval:
##  -1.0000000 -0.1991227
## sample estimates:
##    prop 1    prop 2 
## 0.2638298 0.5320755

Nhận xét

Với mức ý nghĩa \(\alpha = 5\%\), ta bác bỏ giả thuyết không (\(H_0\)) vì giá trị p-value rất nhỏ (\(\ll 0.05\)). Điều này cho thấy có bằng chứng thống kê để khẳng định rằng tỷ lệ bị ảnh hưởng giấc ngủ ở nhóm không uống cà phê thấp hơn đáng kể so với nhóm có uống cà phê.

4.4.2. Biến Biến sleep_impacted và beverage_energy_drink

# Lập bảng tần số chéo
tkmt1 <- table(dt$sleep_impacted, dt$beverage_energy_drink)
addmargins(tkmt1)
##                     
##                      Không uống energy drink Có uống energy drink Sum
##   Không bị ảnh hưởng                     280                   17 297
##   Bị ảnh hưởng                           173                   30 203
##   Sum                                    453                   47 500

\[ p_1 = P(\text{Bị ảnh hưởng giấc ngủ} \mid \text{Không uống nước tăng lực}) \quad \text{(Tỷ lệ bị ảnh hưởng ở nhóm không uống)} \]

\[ p_2 = P(\text{Bị ảnh hưởng giấc ngủ} \mid \text{Có uống nước tăng lực}) \quad \text{(Tỷ lệ bị ảnh hưởng ở nhóm có uống)} \]

Giả thuyết kiểm định: \[ H_0: p_1 - p_2 = 0 \quad \text{(Tỷ lệ bị ảnh hưởng giấc ngủ ở hai nhóm bằng nhau)} \]

\[ H_1: p_1 - p_2 < 0 \quad \text{(Tỷ lệ bị ảnh hưởng ở nhóm không uống nước tăng lực thấp hơn nhóm có uống)} \]

# Số người bị ảnh hưởng giấc ngủ trong từng nhóm
counts_energy <- c(tkmt1["Bị ảnh hưởng", "Không uống energy drink"],
                   tkmt1["Bị ảnh hưởng", "Có uống energy drink"])

# Tổng số người trong từng nhóm
totals_energy <- c(sum(tkmt1[, "Không uống energy drink"]),
                   sum(tkmt1[, "Có uống energy drink"]))

# Kiểm định tỉ lệ một phía: p1 < p2
test_energy_less <- prop.test(counts_energy, totals_energy,
                              alternative = "less", correct = FALSE)

# Hiển thị kết quả kiểm định
test_energy_less
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  counts_energy out of totals_energy
## X-squared = 11.608, df = 1, p-value = 0.0003284
## alternative hypothesis: less
## 95 percent confidence interval:
##  -1.0000000 -0.1351558
## sample estimates:
##    prop 1    prop 2 
## 0.3818985 0.6382979

Nhận xét

Với mức ý nghĩa \(\alpha = 5\%\) và giá trị p-value = 0.0003284 (rất nhỏ hơn 0.05), ta bác bỏ giả thuyết không \(H_0\). Điều này cho thấy có bằng chứng thống kê để khẳng định rằng tỷ lệ bị ảnh hưởng giấc ngủ ở nhóm không uống nước tăng lực (38.19%) thấp hơn đáng kể so với nhóm có uống nước tăng lực (63.83%).

4.4.3. Biến Biến sleep_impacted và beverage_tea

# Lập bảng tần số chéo
tkmt2 <- table(dt$sleep_impacted, dt$beverage_tea)
addmargins(tkmt2)
##                     
##                      Không uống trà Có uống trà Sum
##   Không bị ảnh hưởng            141         156 297
##   Bị ảnh hưởng                  171          32 203
##   Sum                           312         188 500

\[ p_1 = P(\text{Bị ảnh hưởng giấc ngủ} \mid \text{Không uống trà}) \]

\[ p_2 = P(\text{Bị ảnh hưởng giấc ngủ} \mid \text{Có uống trà}) \]

Giả thuyết kiểm định: \[ H_0: p_1 - p_2 = 0 \quad \text{(Tỷ lệ bị ảnh hưởng giấc ngủ ở hai nhóm bằng nhau)} \]

\[ H_1: p_1 - p_2 > 0 \quad \text{(Tỷ lệ bị ảnh hưởng ở nhóm không uống trà cao hơn nhóm có uống trà)} \]

# Số người bị ảnh hưởng giấc ngủ trong từng nhóm uống trà
counts_tea <- c(tkmt2["Bị ảnh hưởng", "Không uống trà"],
                tkmt2["Bị ảnh hưởng", "Có uống trà"])

# Tổng số người trong từng nhóm uống trà
totals_tea <- c(sum(tkmt2[, "Không uống trà"]),
                sum(tkmt2[, "Có uống trà"]))

# Kiểm định tỉ lệ một phía: p1 > p2
test_tea_greater <- prop.test(counts_tea, totals_tea,
                              alternative = "greater", correct = FALSE)

# Hiển thị kết quả kiểm định
test_tea_greater
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  counts_tea out of totals_tea
## X-squared = 69.455, df = 1, p-value < 2.2e-16
## alternative hypothesis: greater
## 95 percent confidence interval:
##  0.3132075 1.0000000
## sample estimates:
##    prop 1    prop 2 
## 0.5480769 0.1702128

Nhận xét

Với mức ý nghĩa \(\alpha = 5\%\)p-value rất nhỏ (< 2.2e-16), ta bác bỏ giả thuyết không (\(H_0\)). Điều này cho thấy: Có bằng chứng thống kê để khẳng định rằng tỷ lệ bị ảnh hưởng giấc ngủ ở nhóm không uống trà cao hơn đáng kể so với nhóm có uống trà.

4.4.4. Biến sleep_impacted và time_of_day_evening

addmargins(tkmt3)
##                     
##                      Không uống buổi tối Có uống buổi tối Sum
##   Không bị ảnh hưởng                 228               69 297
##   Bị ảnh hưởng                        36              167 203
##   Sum                                264              236 500
  • \(p_1 = P(\text{Bị ảnh hưởng giấc ngủ} \mid \text{Không uống buổi tối})\)

  • \(p_2 = P(\text{Bị ảnh hưởng giấc ngủ} \mid \text{Có uống buổi tối})\)

Giả thuyết kiểm định:

  • \(H_0: p_1 - p_2 = 0\) (Tỷ lệ bị ảnh hưởng bằng nhau giữa hai nhóm)

  • \(H_1: p_1 - p_2 < 0\) (Tỷ lệ bị ảnh hưởng ở nhóm không uống buổi tối thấp hơn)

# Số người bị ảnh hưởng giấc ngủ trong từng nhóm
counts_evening <- c(tkmt3["Bị ảnh hưởng", "Không uống buổi tối"],
                    tkmt3["Bị ảnh hưởng", "Có uống buổi tối"])

# Tổng số người trong từng nhóm
totals_evening <- c(sum(tkmt3[, "Không uống buổi tối"]),
                    sum(tkmt3[, "Có uống buổi tối"]))

# Kiểm định tỉ lệ một phía: p1 < p2
test_evening_less <- prop.test(counts_evening, totals_evening,
                               alternative = "less", correct = FALSE)

# Hiển thị kết quả kiểm định
test_evening_less
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  counts_evening out of totals_evening
## X-squared = 168.62, df = 1, p-value < 2.2e-16
## alternative hypothesis: less
## 95 percent confidence interval:
##  -1.0000000 -0.5114408
## sample estimates:
##    prop 1    prop 2 
## 0.1363636 0.7076271

Nhận xét

Với p-value < 2.2e-16, nhỏ hơn rất nhiều so với mức ý nghĩa alpha = 5%, ta bác bỏ giả thuyết không (H0). Có bằng chứng thống kê cho thấy rằng tỷ lệ bị ảnh hưởng giấc ngủ ở nhóm không uống buổi tối thấp hơn đáng kể so với nhóm có uống buổi tối

4.5.Relative Risk và khoảng ước lượng cho Relative Risk

4.5.1. Biến Biến sleep_impacted và beverage_coffee

rr <- table(dt$beverage_coffee,dt$sleep_impacted)
rr<- rr[, c("Bị ảnh hưởng", "Không bị ảnh hưởng")]
addmargins(rr)
##                    
##                     Bị ảnh hưởng Không bị ảnh hưởng Sum
##   Không uống cà phê           62                173 235
##   Có uống cà phê             141                124 265
##   Sum                        203                297 500
RelRisk(rr, conf.level = .95)
## rel. risk    lwr.ci    upr.ci 
## 0.4958503 0.3878239 0.6280792

Nhận xét:

  • Relative Risk giữa biến sleep_impactedbeverage_coffee0.4958503, nhỏ hơn 1. Điều này cho thấy rằng người không uống cà phê có nguy cơ bị ảnh hưởng đến giấc ngủ thấp hơn so với người có uống cà phê (chỉ bằng khoảng 49.6% so với nhóm có uống cà phê).

  • Khoảng tin cậy 95% của RR là từ 0.3878 đến 0.6281. Điều này chứng minh rằng mối liên hệ giữa việc uống cà phê và tình trạng ảnh hưởng đến giấc ngủ là có ý nghĩa thống kê.

  • Kết quả củng cố giả thuyết rằng tiêu thụ cà phê có thể làm suy giảm chất lượng giấc ngủ, và những người không uống cà phê có xu hướng ít bị ảnh hưởng hơn về giấc ngủ.

4.5.2. Biến Biến sleep_impacted và beverage_energy_drink

rr1 <- table(dt$beverage_energy_drink,dt$sleep_impacted)
rr1 <- rr1[, c("Bị ảnh hưởng", "Không bị ảnh hưởng")]
addmargins(rr1)
##                          
##                           Bị ảnh hưởng Không bị ảnh hưởng Sum
##   Không uống energy drink          173                280 453
##   Có uống energy drink              30                 17  47
##   Sum                              203                297 500
RelRisk(rr1, conf.level = .95)
## rel. risk    lwr.ci    upr.ci 
## 0.5983076 0.4811892 0.7884799

Nhận xét:

  • Relative Risk giữa biến sleep_impactedbeverage_energy_drink0.5983, tức là người không uống nước tăng lực có nguy cơ bị ảnh hưởng đến giấc ngủ chỉ bằng khoảng 59.8% so với người có uống nước tăng lực.

  • Khoảng tin cậy 95% của RR là từ 0.4812 đến 0.7885 cho thấy rằng mối liên hệ này có ý nghĩa thống kê.

  • Điều này đồng nghĩa với việc việc tiêu thụ nước tăng lực có thể làm tăng nguy cơ bị ảnh hưởng đến giấc ngủ. Những người không tiêu thụ nước tăng lực có xu hướng ít bị rối loạn giấc ngủ hơn so với nhóm có sử dụng.

4.5.3. Biến Biến sleep_impacted và beverage_tea

rr2 <- table(dt$beverage_tea,dt$sleep_impacted)
rr2 <- rr2[, c("Bị ảnh hưởng", "Không bị ảnh hưởng")]
addmargins(rr2)
##                 
##                  Bị ảnh hưởng Không bị ảnh hưởng Sum
##   Không uống trà          171                141 312
##   Có uống trà              32                156 188
##   Sum                     203                297 500
RelRisk(rr2, conf.level = .95)
## rel. risk    lwr.ci    upr.ci 
##  3.219952  2.337169  4.512233

Nhận xét:

  • Relative Risk giữa biến sleep_impactedbeverage_tea3.220, tức là nguy cơ bị ảnh hưởng đến giấc ngủ ở nhóm không uống trà cao gấp khoảng 3.22 lần so với nhóm có uống trà.

  • Khoảng tin cậy 95% là từ 2.337 đến 4.512 cho thấy rằng mối liên hệ giữa việc uống trà và tình trạng ảnh hưởng giấc ngủ là có ý nghĩa thống kê.

  • Điều này ngụ ý rằng những người không uống trà có nguy cơ cao hơn đáng kể bị ảnh hưởng đến giấc ngủ, trong khi việc uống trà có thể liên quan đến chất lượng giấc ngủ tốt hơn ở một số đối tượng.

4.5.4. Biến sleep_impacted và time_of_day_evening

rr3 <- table(dt$time_of_day_evening,dt$sleep_impacted)
rr3 <- rr3[, c("Bị ảnh hưởng", "Không bị ảnh hưởng")]
addmargins(rr3)
##                      
##                       Bị ảnh hưởng Không bị ảnh hưởng Sum
##   Không uống buổi tối           36                228 264
##   Có uống buổi tối             167                 69 236
##   Sum                          203                297 500
RelRisk(rr3, conf.level = .95)
## rel. risk    lwr.ci    upr.ci 
## 0.1927055 0.1401257 0.2617947

Nhận xét:

  • Relative Risk giữa biến sleep_impactedtime_of_day_evening0.193, tức là những người không tiêu thụ caffeine vào buổi tối có nguy cơ bị ảnh hưởng đến giấc ngủ chỉ bằng khoảng 19.3% so với những người có tiêu thụ vào buổi tối.

  • Khoảng tin cậy 95% từ 0.1401 đến 0.2618 cho thấy kết quả này có ý nghĩa thống kê.

  • Điều này cho thấy rằng việc tiêu thụ caffeine vào buổi tối có liên quan chặt chẽ đến việc bị ảnh hưởng đến giấc ngủ. Những người uống caffeine vào buổi tối có khả năng bị ảnh hưởng giấc ngủ cao hơn đáng kể so với những người không uống vào thời điểm này.

4.6. Odds ratio và khoảng ước lượng cho Odds ratio

4.6.1. Biến Biến sleep_impacted và beverage_coffee

or <- table(dt$beverage_coffee,dt$sleep_impacted)
or <- or[, c("Bị ảnh hưởng", "Không bị ảnh hưởng")]
addmargins(or)
##                    
##                     Bị ảnh hưởng Không bị ảnh hưởng Sum
##   Không uống cà phê           62                173 235
##   Có uống cà phê             141                124 265
##   Sum                        203                297 500
OddsRatio(or, conf.level = .95)
## odds ratio     lwr.ci     upr.ci 
##  0.3151724  0.2161076  0.4596489

Nhận xét:

  • Odds của việc bị ảnh hưởng giấc ngủ ở nhóm không uống cà phê chỉ bằng 31.5% so với odds ở nhóm có uống cà phê. Điều này cho thấy rằng người không uống cà phê có khả năng bị ảnh hưởng giấc ngủ thấp hơn đáng kể so với người uống cà phê.

  • Khoảng tin cậy 95% của Odds Ratio nằm trong khoảng từ 0.2161 đến 0.4596. Điều này cho thấy kết quả là có ý nghĩa thống kê, và việc tiêu thụ cà phê có mối liên hệ đáng kể với chất lượng giấc ngủ.

4.6.2. Biến Biến sleep_impacted và beverage_energy_drink

or1 <- table(dt$beverage_energy_drink,dt$sleep_impacted)
or1 <- or1[, c("Bị ảnh hưởng", "Không bị ảnh hưởng")]
addmargins(or1)
##                          
##                           Bị ảnh hưởng Không bị ảnh hưởng Sum
##   Không uống energy drink          173                280 453
##   Có uống energy drink              30                 17  47
##   Sum                              203                297 500
OddsRatio(or1, conf.level = .95)
## odds ratio     lwr.ci     upr.ci 
##  0.3501190  0.1875078  0.6537506

Nhận xét:

  • Odds của việc bị ảnh hưởng giấc ngủ ở nhóm không uống nước tăng lực chỉ bằng 35% so với odds ở nhóm có uống nước tăng lực. Hay nói cách khác, người có uống energy drink có nguy cơ bị ảnh hưởng giấc ngủ cao hơn gần 3 lần so với người không uống.

  • Khoảng tin cậy 95% của Odds Ratio nằm trong khoảng từ 0.1875 đến 0.6538. Điều này cho thấy kết quả là có ý nghĩa thống kê, và có thể kết luận rằng việc uống nước tăng lực có liên quan đến việc làm giảm chất lượng giấc ngủ của người dùng.

4.6.3. Biến Biến sleep_impacted và beverage_tea

or2 <- table(dt$beverage_tea,dt$sleep_impacted)
or2 <- or2[, c("Bị ảnh hưởng", "Không bị ảnh hưởng")]
addmargins(or2)
##                 
##                  Bị ảnh hưởng Không bị ảnh hưởng Sum
##   Không uống trà          171                141 312
##   Có uống trà              32                156 188
##   Sum                     203                297 500
OddsRatio(or2, conf.level = .95)
## odds ratio     lwr.ci     upr.ci 
##   5.912234   3.804327   9.188094

Nhận xét:

  • Odds của việc bị ảnh hưởng giấc ngủ ở nhóm không uống trà cao gấp 5.91 lần so với odds của nhóm có uống trà.. Điều này có nghĩa là khả năng bị ảnh hưởng đến giấc ngủ ở nhóm không uống trà cao gấp gần 6 lần so với nhóm có uống trà.

  • Khoảng tin cậy 95% của Odds Ratio là [3.80; 9.19]. Điều này cho thấy rằng kết quả là có ý nghĩa thống kê, và có thể kết luận rằng việc không uống trà có liên quan đáng kể đến việc tăng khả năng bị ảnh hưởng giấc ngủ.

4.6.4. Biến sleep_impacted và time_of_day_evening

or3 <- table(dt$time_of_day_evening,dt$sleep_impacted)
or3 <- or3[, c("Bị ảnh hưởng", "Không bị ảnh hưởng")]
addmargins(or3)
##                      
##                       Bị ảnh hưởng Không bị ảnh hưởng Sum
##   Không uống buổi tối           36                228 264
##   Có uống buổi tối             167                 69 236
##   Sum                          203                297 500
OddsRatio(or3, conf.level = .95)
## odds ratio     lwr.ci     upr.ci 
## 0.06523795 0.04160995 0.10228296

Nhận xét:

  • Odds của việc bị ảnh hưởng giấc ngủ ở nhóm không uống vào buổi tối chỉ bằng 6.5% so với odds của nhóm có uống vào buổi tối. Nói cách khác, người có uống đồ uống chứa caffeine vào buổi tối có nguy cơ bị ảnh hưởng giấc ngủ cao gấp khoảng 15.3 lần so với người không uống.

  • Khoảng tin cậy 95% cho Odds Ratio là [0.042; 0.102] cho thấy kết quả này là có ý nghĩa thống kê.

  • Kết quả này cho thấy có mối liên hệ chặt chẽ giữa việc uống caffeine vào buổi tối và nguy cơ bị ảnh hưởng đến giấc ngủ. Cụ thể, những người uống caffeine vào buổi tối có nguy cơ bị ảnh hưởng giấc ngủ cao hơn đáng kể so với những người không uống vào thời điểm này.

4.7. Mô hình hồi quy đơn

4.7.1. Mô hình Logit

\[ H_0: \text{Biến không có ảnh hưởng đến xác suất giấc ngủ bị ảnh hưởng} \] \[ H_1: \text{Biến có ảnh hưởng đến xác suất giấc ngủ bị ảnh hưởng} \] Trước tiên, tác giả thực hiện các mô hình hồi quy logistic đơn biến, mỗi mô hình chỉ bao gồm một biến giải thích nhằm phân tích riêng lẻ ảnh hưởng của từng yếu tố đến khả năng ảnh hưởng đến giấc ngủ.

4.7.1.1. Biến beverage_coffee

# Tạo biến nhị phân mới cho mô hình
dt$sleep_binary <- ifelse(dt$sleep_impacted == "Bị ảnh hưởng", 1, 0)

# Chạy mô hình logistic
xstt.ML <- glm(sleep_binary ~ beverage_coffee, data = dt, family = binomial)
summary(xstt.ML)
## 
## Call:
## glm(formula = sleep_binary ~ beverage_coffee, family = binomial, 
##     data = dt)
## 
## Coefficients:
##                               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                    -1.0262     0.1480  -6.933 4.13e-12 ***
## beverage_coffeeCó uống cà phê   1.1546     0.1925   5.997 2.01e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 675.37  on 499  degrees of freedom
## Residual deviance: 637.48  on 498  degrees of freedom
## AIC: 641.48
## 
## Number of Fisher Scoring iterations: 4
# Mô hình hồi quy logistic với biến beverage_coffee
reglogit_coffee <- glm(sleep_binary ~ beverage_coffee, data = dt, family = binomial(link = 'logit'))
summary(reglogit_coffee)
## 
## Call:
## glm(formula = sleep_binary ~ beverage_coffee, family = binomial(link = "logit"), 
##     data = dt)
## 
## Coefficients:
##                               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                    -1.0262     0.1480  -6.933 4.13e-12 ***
## beverage_coffeeCó uống cà phê   1.1546     0.1925   5.997 2.01e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 675.37  on 499  degrees of freedom
## Residual deviance: 637.48  on 498  degrees of freedom
## AIC: 641.48
## 
## Number of Fisher Scoring iterations: 4

Nhận xét:

Hàm hồi quy logistic được ước lượng như sau:

\[ \ln\left(\frac{\hat{\pi}}{1 - \hat{\pi}}\right) = -1.0262 + 1.1546 \cdot \text{beverage_coffee} \]

Biến Nhóm so sánh Hệ số (β) p-value Odds Ratio (e^β) Diễn giải
Có uống cà phê Không uống cà phê 1.15 2.01e-09 3.16 Người có uống cà phê có odds bị ảnh hưởng giấc ngủ cao gấp 3 lần so với người không uống cà phê (có ý nghĩa thống kê mạnh).

Kết luận:

Kết quả hồi quy logistic cho thấy biến thói quen uống cà phê (beverage_coffee) có ảnh hưởng đáng kể đến khả năng bị ảnh hưởng giấc ngủ. Cụ thể, những người có uống cà phê có odds bị ảnh hưởng giấc ngủ cao hơn khoảng 3.16 lần so với những người không uống cà phê. Hệ số hồi quy là 1.15 với p-value = 2.01e-09, nhỏ hơn mức ý nghĩa 5%, cho thấy kết quả này có ý nghĩa thống kê rất mạnh. Điều này đồng nghĩa với việc thói quen uống cà phê là một yếu tố có liên quan rõ rệt đến chất lượng giấc ngủ và cần được xem xét trong các phân tích liên quan đến sức khỏe giấc ngủ.

Khoảng tin cậy cho các hệ số của mô hình:

confint(reglogit_coffee)
## Waiting for profiling to be done...
##                                    2.5 %     97.5 %
## (Intercept)                   -1.3234637 -0.7421469
## beverage_coffeeCó uống cà phê  0.7811067  1.5365395

Nhận xét:

Khoảng tin cậy 95% cho hệ số hồi quy của biến beverage_coffee là từ 0.7811 đến 1.5365. Vì toàn bộ khoảng này đều lớn hơn 0, điều này cho thấy rằng biến beverage_coffee có ảnh hưởng dương và có ý nghĩa thống kê đến khả năng bị ảnh hưởng giấc ngủ. Nói cách khác, những người có uống cà phê có xu hướng dễ bị ảnh hưởng đến giấc ngủ hơn so với những người không uống.

4.7.1.2. Biến beverage_energy_drink

# Mô hình hồi quy logistic với biến beverage_energy_drink
reglogit_energy <- glm(sleep_binary ~ beverage_energy_drink, 
                       family = binomial(link = "logit"), 
                       data = dt)
summary(reglogit_energy)
## 
## Call:
## glm(formula = sleep_binary ~ beverage_energy_drink, family = binomial(link = "logit"), 
##     data = dt)
## 
## Coefficients:
##                                           Estimate Std. Error z value Pr(>|z|)
## (Intercept)                                -0.4815     0.0967  -4.979 6.39e-07
## beverage_energy_drinkCó uống energy drink   1.0495     0.3186   3.294 0.000988
##                                              
## (Intercept)                               ***
## beverage_energy_drinkCó uống energy drink ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 675.37  on 499  degrees of freedom
## Residual deviance: 663.99  on 498  degrees of freedom
## AIC: 667.99
## 
## Number of Fisher Scoring iterations: 4

Nhận xét:

Phương trình hồi quy:

\[ \ln\left(\frac{\hat{\pi}}{1 - \hat{\pi}}\right) = -0.4815 + 1.0495 \cdot \text{beverage_energy_drink} \]

Biến Nhóm so sánh Hệ số (β) p-value Odds Ratio (e^β) Diễn giải
Có uống energy drink Không uống 1.05 0.000988 2.86 Người có uống nước tăng lực có odds bị ảnh hưởng giấc ngủ cao gấp gần 3 lần so với người không uống (có ý nghĩa thống kê).

Kết quả hồi quy logistic cho thấy biến thói quen sử dụng nước tăng lực (beverage_energy_drink) có ảnh hưởng đáng kể đến khả năng bị ảnh hưởng giấc ngủ. Cụ thể, người có uống nước tăng lực có odds bị ảnh hưởng giấc ngủ cao hơn khoảng 2.86 lần so với người không uống . Hệ số hồi quy là 1.05, với p-value = 0.000988, nhỏ hơn mức ý nghĩa 5%, cho thấy mối liên hệ này có ý nghĩa thống kê mạnh. Điều này cho thấy việc sử dụng nước tăng lực là một yếu tố quan trọng cần được lưu ý khi nghiên cứu các vấn đề liên quan đến chất lượng giấc ngủ.

Nhận xét:

Khoảng tin cậy cho các hệ số của mô hình:

confint(reglogit_energy)
## Waiting for profiling to be done...
##                                                2.5 %     97.5 %
## (Intercept)                               -0.6725984 -0.2932331
## beverage_energy_drinkCó uống energy drink  0.4361736  1.6930492

Nhận xét:

Khoảng tin cậy 95% cho hệ số hồi quy của biến beverage_energy_drink là từ 0.4362 đến 1.6930. Vì toàn bộ khoảng này đều lớn hơn 0, ta kết luận rằng việc uống nước tăng lực có ảnh hưởng dương và có ý nghĩa thống kê đến khả năng bị ảnh hưởng giấc ngủ. Nói cách khác, những người có uống nước tăng lực có khả năng bị ảnh hưởng đến giấc ngủ cao hơn so với người không uống.

4.7.1.3. Biến beverage_tea

# Mô hình hồi quy logistic với biến beverage_tea
reglogit_tea <- glm(sleep_binary ~ beverage_tea, 
                    data = dt, 
                    family = binomial(link = "logit"))
summary(reglogit_tea)
## 
## Call:
## glm(formula = sleep_binary ~ beverage_tea, family = binomial(link = "logit"), 
##     data = dt)
## 
## Coefficients:
##                         Estimate Std. Error z value Pr(>|z|)    
## (Intercept)               0.1929     0.1138   1.696   0.0899 .  
## beverage_teaCó uống trà  -1.7770     0.2249  -7.900 2.79e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 675.37  on 499  degrees of freedom
## Residual deviance: 601.17  on 498  degrees of freedom
## AIC: 605.17
## 
## Number of Fisher Scoring iterations: 3

Nhận xét:

Ta có hàm hồi quy logistic:

\[ \ln\left(\frac{\hat{\pi}}{1 - \hat{\pi}}\right) = 0.1929 - 1.7770 \cdot \text{beverage_tea} \]

Biến Nhóm so sánh Hệ số (β) p-value Odds Ratio (e^β) Diễn giải
Có uống trà Không uống trà -1.78 2.79e-15 0.17 Người có uống trà có odds bị ảnh hưởng giấc ngủ thấp hơn 83% so với người không uống trà (có ý nghĩa thống kê rất mạnh).

Kết luận:

Kết quả hồi quy logistic cho thấy biến thói quen sử dụng trà (beverage_tea) có ảnh hưởng đáng kể đến khả năng bị ảnh hưởng giấc ngủ. Cụ thể, người có uống trà có odds bị ảnh hưởng giấc ngủ thấp hơn khoảng 83% so với người không uống trà. Hệ số hồi quy là -1.78, với p-value ≈ 2.79e-15, nhỏ hơn rất nhiều so với mức ý nghĩa 5%, cho thấy mối liên hệ này có ý nghĩa thống kê rất mạnh. Điều này gợi ý rằng việc sử dụng trà có thể là một yếu tố bảo vệ, giúp giảm nguy cơ bị ảnh hưởng giấc ngủ.

Khoảng tin cậy cho các hệ số của mô hình:

confint(reglogit_tea)
## Waiting for profiling to be done...
##                               2.5 %     97.5 %
## (Intercept)             -0.02948552  0.4168906
## beverage_teaCó uống trà -2.23110122 -1.3471822

Nhận xét:

Khoảng tin cậy 95% cho hệ số hồi quy của biến beverage_tea là từ -2.2311 đến -1.3472. Vì toàn bộ khoảng này đều nhỏ hơn 0, ta kết luận rằng việc uống trà có ảnh hưởng âm và có ý nghĩa thống kê đến khả năng bị ảnh hưởng giấc ngủ. Nói cách khác, những người có uống trà có khả năng bị ảnh hưởng đến giấc ngủ thấp hơn so với người không uống.

4.7.1.4. Biến time_of_day_evening

# Mô hình hồi quy logistic với biến time_of_day_evening
reglogit_evening <- glm(sleep_binary ~ time_of_day_evening, 
                        data = dt, 
                        family = binomial(link = "logit"))
summary(reglogit_evening)
## 
## Call:
## glm(formula = sleep_binary ~ time_of_day_evening, family = binomial(link = "logit"), 
##     data = dt)
## 
## Coefficients:
##                                     Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                          -1.8458     0.1793  -10.29   <2e-16 ***
## time_of_day_eveningCó uống buổi tối   2.7297     0.2294   11.90   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 675.37  on 499  degrees of freedom
## Residual deviance: 495.52  on 498  degrees of freedom
## AIC: 499.52
## 
## Number of Fisher Scoring iterations: 4

Nhận xét:

Ta có hàm hồi quy:

\[ \ln\left(\frac{\hat\pi}{1 - \hat\pi}\right) = -1.8458 + 2.7297 \cdot \text{time_of_day_evening} \]

Biến Nhóm so sánh Hệ số (β) p-value Odds Ratio (e^β) Diễn giải
Có uống buổi tối Không uống buổi tối 2.73 < 2e-16 15.33 Người có uống buổi tối có odds bị ảnh hưởng giấc ngủ cao hơn khoảng 15 lần so với người không uống buổi tối (có ý nghĩa thống kê rất mạnh).

Kết luận:

Kết quả hồi quy logistic cho thấy thời điểm uống buổi tối có ảnh hưởng rất đáng kể đến khả năng bị ảnh hưởng giấc ngủ. Cụ thể, người có uống vào buổi tối có odds bị ảnh hưởng giấc ngủ cao hơn khoảng 15.33 lần so với người không uống buổi tối. Hệ số hồi quy là 2.73, với p-value < 2e-16, nhỏ hơn rất nhiều so với mức ý nghĩa 5%, cho thấy mối liên hệ này có ý nghĩa thống kê rất mạnh. Điều này nhấn mạnh rằng việc tiêu thụ các loại thức uống vào buổi tối là yếu tố có tác động mạnh đến chất lượng giấc ngủ, cần được xem xét kỹ trong các nghiên cứu liên quan đến sức khỏe giấc ngủ.

Khoảng tin cậy cho các hệ số của mô hình:

confint(reglogit_evening)
## Waiting for profiling to be done...
##                                         2.5 %    97.5 %
## (Intercept)                         -2.213420 -1.508283
## time_of_day_eveningCó uống buổi tối  2.290603  3.191457

Nhận xét:

Khoảng tin cậy 95% cho hệ số hồi quy của biến time_of_day_evening nằm trong khoảng từ 2.2906 đến 3.1915. Vì toàn bộ khoảng tin cậy này lớn hơn 0, ta kết luận rằng việc uống đồ uống vào buổi tối có ảnh hưởng dương và có ý nghĩa thống kê đến khả năng bị ảnh hưởng giấc ngủ. Cụ thể, những người uống vào buổi tối có xác suất bị ảnh hưởng giấc ngủ cao hơn rõ rệt so với những người không uống.

4.7.2. Mô hình Probit

\[ H_0: \text{Biến không có ảnh hưởng đến xác suất giấc ngủ bị ảnh hưởng} \]

\[ H_1: \text{Biến có ảnh hưởng đến xác suất giấc ngủ bị ảnh hưởng} \]

Tác giả thực hiện hồi quy Probit đơn biến, mỗi mô hình chỉ bao gồm một biến giải thích nhằm phân tích riêng lẻ ảnh hưởng của từng yếu tố đến khả năng ảnh hưởng đến giấc ngủ.

4.7.2.1. Biến beverage_coffee

# Mô hình Probit với biến beverage_coffee
probit_coffee <- glm(sleep_binary ~ beverage_coffee, data = dt, family = binomial(link = "probit"))
summary(probit_coffee)
## 
## Call:
## glm(formula = sleep_binary ~ beverage_coffee, family = binomial(link = "probit"), 
##     data = dt)
## 
## Coefficients:
##                               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                   -0.63158    0.08797  -7.180 6.99e-13 ***
## beverage_coffeeCó uống cà phê  0.71207    0.11696   6.088 1.14e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 675.37  on 499  degrees of freedom
## Residual deviance: 637.48  on 498  degrees of freedom
## AIC: 641.48
## 
## Number of Fisher Scoring iterations: 4

Nhận xét:

Ta có hàm Probit ước lượng:

\[ \Phi^{-1}(\hat{\pi}) = -0.63158 + 0.71207 \cdot \text{beverage_coffee} \]

Kết quả hồi quy Probit cho thấy thói quen uống cà phê có ảnh hưởng đáng kể đến xác suất bị ảnh hưởng giấc ngủ. Hệ số ước lượng cho biến “Có uống cà phê” là 0.712 với p-value = 1.14e-09, cho thấy mối quan hệ này có ý nghĩa thống kê rất mạnh. Điều này đồng nghĩa với việc những người có uống cà phê có xác suất bị ảnh hưởng giấc ngủ cao hơn so với những người không uống cà phê. Kết quả này củng cố giả thuyết rằng caffeine trong cà phê là một yếu tố đáng chú ý khi xem xét đến chất lượng giấc ngủ.

Khoảng tin cậy cho các hệ số của mô hình:

confint(probit_coffee)
## Waiting for profiling to be done...
##                                    2.5 %     97.5 %
## (Intercept)                   -0.8055766 -0.4606198
## beverage_coffeeCó uống cà phê  0.4837101  0.9422671

Nhận xét:

Với độ tin cậy 95%, hệ số Intercept có khoảng tin cậy từ -0.8056 đến -0.4606, cho thấy xác suất bị ảnh hưởng giấc ngủ ở nhóm không uống cà phê là tương đối thấp.

Hệ số của biến beverage_coffee nằm trong khoảng từ 0.4837 đến 0.9423, đều dương và không chứa 0. Điều này cho thấy việc uống cà phê làm tăng xác suất bị ảnh hưởng đến giấc ngủ một cách có ý nghĩa thống kê.

4.7.2.2. Biến beverage_energy_drink

probit_energy <- glm(sleep_binary ~ beverage_energy_drink, 
                     family = binomial(link = "probit"), data = dt)
summary(probit_energy)
## 
## Call:
## glm(formula = sleep_binary ~ beverage_energy_drink, family = binomial(link = "probit"), 
##     data = dt)
## 
## Coefficients:
##                                           Estimate Std. Error z value Pr(>|z|)
## (Intercept)                               -0.30050    0.05986  -5.020 5.17e-07
## beverage_energy_drinkCó uống energy drink  0.65441    0.19638   3.332 0.000861
##                                              
## (Intercept)                               ***
## beverage_energy_drinkCó uống energy drink ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 675.37  on 499  degrees of freedom
## Residual deviance: 663.99  on 498  degrees of freedom
## AIC: 667.99
## 
## Number of Fisher Scoring iterations: 4

Nhận xét:

Ta có hàm hồi quy Probit:

\[ \Phi^{-1}(\hat{\pi}) = -0.30050 + 0.65441 \cdot \text{beverage_energy_drink} \]

Kết quả hồi quy Probit cho thấy việc uống nước tăng lực (energy drink) có ảnh hưởng đáng kể đến xác suất bị ảnh hưởng giấc ngủ. Cụ thể, hệ số ước lượng cho biến “Có uống energy drink” là 0.654 với p-value = 0.000861, nhỏ hơn mức ý nghĩa 1%, cho thấy mối quan hệ này có ý nghĩa thống kê mạnh. Điều này cho thấy những người có thói quen sử dụng nước tăng lực có xác suất bị ảnh hưởng giấc ngủ cao hơn so với những người không sử dụng. Kết quả này gợi ý rằng nước tăng lực là một yếu tố cần được lưu ý trong các nghiên cứu về chất lượng giấc ngủ.

Khoảng tin cậy cho các hệ số của mô hình:

confint(probit_energy )
## Waiting for profiling to be done...
##                                                2.5 %     97.5 %
## (Intercept)                               -0.4181583 -0.1834748
## beverage_energy_drinkCó uống energy drink  0.2724920  1.0430772

Nhận xét:

Với độ tin cậy 95%, giá trị thực của Intercept nằm trong khoảng từ -0.4182 đến -0.1835, trong khi đó giá trị thực của tham số beverage_energy_drink (ứng với nhóm “Có uống energy drink”) nằm trong khoảng từ 0.2725 đến 1.0431.

Khoảng tin cậy của tham số beverage_energy_drink hoàn toàn nằm phía dương, cho thấy biến này có ảnh hưởng đáng kể và có ý nghĩa thống kê trong mô hình. Nói cách khác, việc uống nước tăng lực có khả năng làm tăng xác suất bị ảnh hưởng đến giấc ngủ một cách có ý nghĩa thống kê, so với nhóm không uống.

4.7.2.3. Biến beverage_tea

probit_tea <- glm(sleep_binary ~ beverage_tea, 
                  family = binomial(link = "probit"), data = dt)
summary(probit_tea)
## 
## Call:
## glm(formula = sleep_binary ~ beverage_tea, family = binomial(link = "probit"), 
##     data = dt)
## 
## Coefficients:
##                         Estimate Std. Error z value Pr(>|z|)    
## (Intercept)              0.12080    0.07114   1.698   0.0895 .  
## beverage_teaCó uống trà -1.07413    0.12952  -8.293   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 675.37  on 499  degrees of freedom
## Residual deviance: 601.17  on 498  degrees of freedom
## AIC: 605.17
## 
## Number of Fisher Scoring iterations: 3

Nhận xét:

Ta có hàm hồi quy Probit:

\[ \Phi^{-1}(\hat{\pi}) = 0.12080 - 1.07413 \cdot \text{beverage_tea} \]

Kết quả hồi quy Probit cho thấy việc uống trà có ảnh hưởng đáng kể đến xác suất bị ảnh hưởng giấc ngủ. Biến “Có uống trà” có hệ số ước lượng là -1.074, với p-value < 2e-16, cho thấy mối liên hệ âm này có ý nghĩa thống kê rất mạnh. Nghĩa là, những người có thói quen uống trà có xác suất bị ảnh hưởng giấc ngủ thấp hơn so với người không uống. Điều này gợi ý rằng uống trà có thể có tác động tích cực đến giấc ngủ, hoặc ít nhất là không gây ảnh hưởng tiêu cực như một số loại thức uống chứa caffeine khác.

Khoảng tin cậy cho các hệ số của mô hình:

confint(probit_tea)
## Waiting for profiling to be done...
##                               2.5 %     97.5 %
## (Intercept)             -0.01847695  0.2604419
## beverage_teaCó uống trà -1.33076128 -0.8228012

Nhận xét:

Với độ tin cậy 95%, khoảng tin cậy cho hệ số chặn (Intercept) nằm trong khoảng từ -0.0185 đến 0.2604, nghĩa là không có ý nghĩa thống kê vì khoảng này chứa 0.

Tuy nhiên, hệ số của biến beverage_tea nằm trong khoảng từ -1.331 đến -0.823, không chứa 0, cho thấy việc uống trà có ảnh hưởng tiêu cực đáng kể đến xác suất bị ảnh hưởng giấc ngủ trong mô hình Probit, và ảnh hưởng này là có ý nghĩa thống kê ở mức 5%.

4.7.2.4. Biến time_of_day_evening

# Mô hình Probit với biến time_of_day_evening
probit_evening <- glm(sleep_binary ~ time_of_day_evening, 
                      family = binomial(link = "probit"), 
                      data = dt)
summary(probit_evening)
## 
## Call:
## glm(formula = sleep_binary ~ time_of_day_evening, family = binomial(link = "probit"), 
##     data = dt)
## 
## Coefficients:
##                                     Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                         -1.09680    0.09661  -11.35   <2e-16 ***
## time_of_day_eveningCó uống buổi tối  1.64327    0.12946   12.69   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 675.37  on 499  degrees of freedom
## Residual deviance: 495.52  on 498  degrees of freedom
## AIC: 499.52
## 
## Number of Fisher Scoring iterations: 4

Nhận xét:

Ta có phương trình hồi quy Probit:

\[ \Phi^{-1}(\hat{\pi}) = -1.0968 + 1.6433 \cdot \text{time_of_day_evening} \]

Kết quả hồi quy Probit cho thấy thời điểm tiêu thụ đồ uống vào buổi tối có ảnh hưởng rất rõ rệt đến xác suất bị ảnh hưởng giấc ngủ. Cụ thể, biến “Có uống buổi tối” có hệ số ước lượng là 1.643, với p-value < 2e-16, cho thấy đây là một yếu tố có ý nghĩa thống kê cực kỳ mạnh. Điều này cho thấy những người uống đồ uống vào buổi tối có xác suất bị ảnh hưởng giấc ngủ cao hơn đáng kể so với những người không uống vào thời điểm này. Như vậy, thời điểm tiêu thụ thức uống – đặc biệt là buổi tối – là yếu tố quan trọng cần lưu ý khi nghiên cứu các vấn đề liên quan đến chất lượng giấc ngủ.

Khoảng tin cậy cho các hệ số của mô hình:

confint(probit_evening)
## Waiting for profiling to be done...
##                                         2.5 %     97.5 %
## (Intercept)                         -1.289851 -0.9108277
## time_of_day_eveningCó uống buổi tối  1.391968  1.8996081

Nhận xét:

Với độ tin cậy 95%:

Giá trị thực của Intercept nằm trong khoảng từ -1.29 đến -0.91, cho thấy ở nhóm không uống vào buổi tối, xác suất bị ảnh hưởng đến giấc ngủ là tương đối thấp.

Hệ số của biến time_of_day_evening nằm trong khoảng từ 1.39 đến 1.90, điều này khẳng định rằng việc uống vào buổi tối làm tăng đáng kể xác suất bị ảnh hưởng đến giấc ngủ.

4.7.3. Mô hình Cloglog

4.7.3.1. Biến beverage_coffee

# Mô hình Cloglog với biến beverage_coffee
cloglog_coffee <- glm(sleep_binary ~ beverage_coffee, data = dt, family = binomial(link = "cloglog"))
summary(cloglog_coffee)
## 
## Call:
## glm(formula = sleep_binary ~ beverage_coffee, family = binomial(link = "cloglog"), 
##     data = dt)
## 
## Coefficients:
##                               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                    -1.1832     0.1275  -9.280  < 2e-16 ***
## beverage_coffeeCó uống cà phê   0.9080     0.1539   5.899 3.66e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 675.37  on 499  degrees of freedom
## Residual deviance: 637.48  on 498  degrees of freedom
## AIC: 641.48
## 
## Number of Fisher Scoring iterations: 5

Dựa trên kết quả mô hình hồi quy với hàm liên kết cloglog, ta có phương trình:

\[ \log\left(-\log\left(1 - P(\text{sleep} = 1)\right)\right) = -1.1832 + 0.9080 \cdot \text{beverage_coffee} \] Nhận xét:

Kết quả hồi quy Cloglog đơn biến cho thấy việc uống cà phê có ảnh hưởng có ý nghĩa thống kê đến khả năng có giấc ngủ, với giá trị p = 3.66e-09, nhỏ hơn mức ý nghĩa 5%. Cụ thể, hệ số ước lượng là 0.908, cho thấy nhóm người có uống cà phê có giá trị cloglog cao hơn, đồng nghĩa với việc xác suất có giấc ngủ cũng cao hơn so với nhóm không uống cà phê. Điều này cho thấy, theo mô hình Cloglog, việc tiêu thụ cà phê có mối liên hệ đáng kể với khả năng có giấc ngủ, và mối liên hệ này mang ý nghĩa thống kê rõ rệt.

4.7.3.2. Biến beverage_energy_drink

# Mô hình Cloglog với biến beverage_energy_drink
cloglog_energy <- glm(sleep_binary ~ beverage_energy_drink, data = dt, family = binomial(link = "cloglog"))
summary(cloglog_energy)
## 
## Call:
## glm(formula = sleep_binary ~ beverage_energy_drink, family = binomial(link = "cloglog"), 
##     data = dt)
## 
## Coefficients:
##                                           Estimate Std. Error z value Pr(>|z|)
## (Intercept)                               -0.73167    0.07676  -9.531  < 2e-16
## beverage_energy_drinkCó uống energy drink  0.74847    0.20543   3.644 0.000269
##                                              
## (Intercept)                               ***
## beverage_energy_drinkCó uống energy drink ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 675.37  on 499  degrees of freedom
## Residual deviance: 663.99  on 498  degrees of freedom
## AIC: 667.99
## 
## Number of Fisher Scoring iterations: 5

Dựa trên kết quả mô hình hồi quy với hàm liên kết cloglog, ta có phương trình hồi quy như sau:

\[ \log\left(-\log\left(1 - P(\text{sleep} = 1)\right)\right) = -0.73167 + 0.74847 \cdot \text{beverage_energy_drink} \] Nhận xét:

Kết quả hồi quy Cloglog đơn biến cho thấy việc uống nước tăng lực có ảnh hưởng có ý nghĩa thống kê đến khả năng có giấc ngủ, với giá trị p = 0.000269, nhỏ hơn mức ý nghĩa 5%. Cụ thể, hệ số ước lượng là 0.74847, cho thấy nhóm người có uống nước tăng lực có giá trị cloglog cao hơn, đồng nghĩa với việc xác suất có giấc ngủ cũng cao hơn so với nhóm không uống. Điều này cho thấy, theo mô hình Cloglog, việc tiêu thụ nước tăng lực có mối liên hệ đáng kể với khả năng có giấc ngủ, và mối liên hệ này mang ý nghĩa thống kê rõ rệt.

4.7.3.3. Biến beverage_tea

# Mô hình Cloglog với biến beverage_tea
cloglog_tea <- glm(sleep_binary ~ beverage_tea, data = dt, family = binomial(link = "cloglog"))
summary(cloglog_tea)
## 
## Call:
## glm(formula = sleep_binary ~ beverage_tea, family = binomial(link = "cloglog"), 
##     data = dt)
## 
## Coefficients:
##                         Estimate Std. Error z value Pr(>|z|)    
## (Intercept)              -0.2304     0.0785  -2.935  0.00334 ** 
## beverage_teaCó uống trà  -1.4485     0.1937  -7.480 7.45e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 675.37  on 499  degrees of freedom
## Residual deviance: 601.17  on 498  degrees of freedom
## AIC: 605.17
## 
## Number of Fisher Scoring iterations: 5

Phương trình hồi quy được xây dựng từ mô hình Cloglog đơn biến có dạng:

\[ \log\left(-\log\left(1 - P(\text{sleep} = 1)\right)\right) = -0.2304 - 1.4485 \cdot \text{beverage_tea} \] Nhận xét:

Kết quả hồi quy Cloglog đơn biến cho thấy việc uống trà có ảnh hưởng có ý nghĩa thống kê đến khả năng có giấc ngủ, với giá trị p = 7.45e-14, nhỏ hơn mức ý nghĩa 5%. Hệ số ước lượng là -1.4485, mang dấu âm, cho thấy nhóm người có uống trà có giá trị cloglog thấp hơn, đồng nghĩa với việc xác suất có giấc ngủ cũng thấp hơn so với nhóm không uống trà. Điều này phản ánh rằng, theo mô hình Cloglog, việc tiêu thụ trà có mối liên hệ ngược chiều và đáng kể về mặt thống kê với khả năng có giấc ngủ.

4.7.3.4. Biến time_of_day_evening

# Mô hình Cloglog với biến time_of_day_evening
cloglog_evening <- glm(sleep_binary ~ time_of_day_evening, 
                       data = dt, 
                       family = binomial(link = "cloglog"))
summary(cloglog_evening)
## 
## Call:
## glm(formula = sleep_binary ~ time_of_day_evening, family = binomial(link = "cloglog"), 
##     data = dt)
## 
## Coefficients:
##                                     Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                          -1.9200     0.1668  -11.51   <2e-16 ***
## time_of_day_eveningCó uống buổi tối   2.1268     0.1860   11.43   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 675.37  on 499  degrees of freedom
## Residual deviance: 495.52  on 498  degrees of freedom
## AIC: 499.52
## 
## Number of Fisher Scoring iterations: 5

Dựa trên kết quả hồi quy, phương trình mô hình có dạng:

\[ \log\left(-\log\left(1 - P(\text{sleep} = 1)\right)\right) = -1.9200 + 2.1268 \cdot \text{time_of_day_evening} \]

Nhận xét:

Kết quả hồi quy Cloglog đơn biến cho thấy việc uống vào buổi tối có ảnh hưởng có ý nghĩa thống kê đến khả năng có giấc ngủ, với giá trị p < 2e-16, nhỏ hơn mức ý nghĩa 5%. Cụ thể, hệ số ước lượng là 2.1268, cho thấy nhóm người có uống vào buổi tối có giá trị cloglog cao hơn đáng kể so với nhóm không uống vào buổi tối, tức là xác suất có giấc ngủ cũng cao hơn. Điều này cho thấy mối liên hệ tích cực và có ý nghĩa thống kê rõ rệt giữa việc uống vào buổi tối và khả năng có giấc ngủ.

4.8. Mô hình hồi quy bội

alias(lm(sleep_binary ~ beverage_coffee + beverage_energy_drink + beverage_tea + time_of_day_evening, data = dt))
## Model :
## sleep_binary ~ beverage_coffee + beverage_energy_drink + beverage_tea + 
##     time_of_day_evening
## 
## Complete :
##                         (Intercept) beverage_coffeeCó uống cà phê
## beverage_teaCó uống trà  1          -1                           
##                         beverage_energy_drinkCó uống energy drink
## beverage_teaCó uống trà -1                                       
##                         time_of_day_eveningCó uống buổi tối
## beverage_teaCó uống trà  0

Kết quả từ hàm alias() cho thấy biến beverage_tea có mối quan hệ tuyến tính chính xác với các biến giải thích khác trong mô hình, cụ thể là:

\[ \text{beverage_tea} = 1 \times \text{Intercept} - 1 \times \text{beverage_coffee} - 1 \times \text{beverage_energy_drink} \]

Điều này phản ánh hiện tượng đa cộng tuyến hoàn toàn (perfect multicollinearity), tức là một biến có thể được biểu diễn chính xác bằng tổ hợp tuyến tính của các biến còn lại. Trong trường hợp này, hệ số của biến beverage_tea không thể được ước lượng một cách duy nhất, dẫn đến giá trị NA trong kết quả hồi quy.

Vì lý do đó, biến beverage_tea sẽ được loại khỏi mô hình hồi quy bội để đảm bảo tính xác định của mô hình và tránh sai lệch trong phân tích.

4.8.1. Mô hình Logit

mhhq_logit <- glm(sleep_binary ~ beverage_coffee + beverage_energy_drink + time_of_day_evening,
                  data = dt, family = binomial(link = "logit"))
summary(mhhq_logit)
## 
## Call:
## glm(formula = sleep_binary ~ beverage_coffee + beverage_energy_drink + 
##     time_of_day_evening, family = binomial(link = "logit"), data = dt)
## 
## Coefficients:
##                                           Estimate Std. Error z value Pr(>|z|)
## (Intercept)                                -3.0623     0.2862 -10.699  < 2e-16
## beverage_coffeeCó uống cà phê               1.7330     0.2728   6.352 2.13e-10
## beverage_energy_drinkCó uống energy drink   2.1320     0.4379   4.869 1.12e-06
## time_of_day_eveningCó uống buổi tối         2.7365     0.2469  11.082  < 2e-16
##                                              
## (Intercept)                               ***
## beverage_coffeeCó uống cà phê             ***
## beverage_energy_drinkCó uống energy drink ***
## time_of_day_eveningCó uống buổi tối       ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 675.37  on 499  degrees of freedom
## Residual deviance: 443.30  on 496  degrees of freedom
## AIC: 451.3
## 
## Number of Fisher Scoring iterations: 5

Nhận xét:

Phương trình hồi quy logit có dạng:

\[ \log\left( \frac{\hat{\pi}}{1 - \hat{\pi}} \right) = -3.0623 + 1.7330 \cdot \text{beverage_coffee} + 2.1320 \cdot \text{beverage_energy_drink} + 2.7365 \cdot \text{time_of_day_evening} \]

Biến Nhóm so sánh Hệ số (β) p-value Odds Ratio (e^β) Diễn giải chi tiết
beverage_coffee So với không uống 1.733 2.13e-10 5.65 Người uống cà phê có xác suất buồn ngủ cao gấp 5.65 lần so với người không uống.
beverage_energy_drink So với không uống 2.132 1.12e-06 8.43 Việc sử dụng nước tăng lực làm tăng xác suất buồn ngủ gấp 8.43 lần.
time_of_day_evening So với ban ngày 2.737 < 2e-16 15.45 Uống vào buổi tối làm tăng xác suất buồn ngủ gấp 15.45 lần so với uống ban ngày.

Kết luận:

Dựa trên kết quả mô hình hồi quy Logit, các yếu tố có ảnh hưởng đáng kể đến xác suất buồn ngủ bao gồm việc uống cà phê, sử dụng nước tăng lực và thời điểm uống vào buổi tối. Cụ thể, người có uống cà phê có xác suất buồn ngủ cao gấp khoảng 5.65 lần so với người không uống. Việc sử dụng nước tăng lực làm tăng xác suất buồn ngủ lên 8.43 lần, trong khi uống vào buổi tối làm tăng xác suất này lên đến 15.45 lần so với uống ban ngày. Tất cả các biến này đều có ý nghĩa thống kê cao (p-value < 0.001), cho thấy mối liên hệ chặt chẽ giữa các loại đồ uống, thời điểm tiêu thụ và tình trạng buồn ngủ. Điều này gợi ý rằng việc sử dụng các loại đồ uống kích thích vào buổi tối có thể làm thay đổi trạng thái sinh lý, làm tăng nguy cơ buồn ngủ ngoài ý muốn.

4.8.2. Mô hình Probit

mhhq_probit <- glm(sleep_binary ~ beverage_coffee + beverage_energy_drink +  time_of_day_evening,
                   data = dt,
                   family = binomial(link = "probit"))
summary(mhhq_probit)
## 
## Call:
## glm(formula = sleep_binary ~ beverage_coffee + beverage_energy_drink + 
##     time_of_day_evening, family = binomial(link = "probit"), 
##     data = dt)
## 
## Coefficients:
##                                           Estimate Std. Error z value Pr(>|z|)
## (Intercept)                                -1.7792     0.1530 -11.631  < 2e-16
## beverage_coffeeCó uống cà phê               0.9948     0.1537   6.473 9.61e-11
## beverage_energy_drinkCó uống energy drink   1.2319     0.2467   4.993 5.94e-07
## time_of_day_eveningCó uống buổi tối         1.6163     0.1372  11.778  < 2e-16
##                                              
## (Intercept)                               ***
## beverage_coffeeCó uống cà phê             ***
## beverage_energy_drinkCó uống energy drink ***
## time_of_day_eveningCó uống buổi tối       ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 675.37  on 499  degrees of freedom
## Residual deviance: 443.17  on 496  degrees of freedom
## AIC: 451.17
## 
## Number of Fisher Scoring iterations: 5

Nhận xét:

Phương trình hồi quy Probit có dạng:

\[ \Phi^{-1}(\hat{\pi}) = -1.7792 + 0.9948 \cdot \text{beverage_coffee} + 1.2319 \cdot \text{beverage_energy_drink} + 1.6163 \cdot \text{time_of_day_evening} \]

Biến Nhóm so sánh Hệ số (β) p-value Diễn giải chi tiết
beverage_coffee So với không uống cà phê 0.9948 9.61e-11 Người uống cà phê có xác suất buồn ngủ cao hơn đáng kể.
beverage_energy_drink So với không uống energy drink 1.2319 5.94e-07 Người uống nước tăng lực có xác suất buồn ngủ cao hơn đáng kể.
time_of_day_evening So với ban ngày 1.6163 < 2e-16 Uống vào buổi tối làm tăng xác suất buồn ngủ so với ban ngày.

Kết luận:

Dựa trên kết quả mô hình hồi quy Probit, các yếu tố có ảnh hưởng đáng kể đến xác suất buồn ngủ sau khi uống gồm: uống cà phê, uống nước tăng lực, và thời điểm uống vào buổi tối. Cụ thể, những người uống cà phê hoặc nước tăng lực có xác suất buồn ngủ cao hơn đáng kể so với người không sử dụng các loại đồ uống này. Đặc biệt, thời điểm uống vào buổi tối làm tăng xác suất buồn ngủ mạnh nhất trong số các yếu tố, cho thấy vai trò quan trọng của thời gian tiêu thụ đồ uống. Kết quả này gợi ý rằng, dù các loại đồ uống trên thường được xem là giúp tỉnh táo, nhưng trong thực tế có thể gây tác dụng ngược tùy vào thời điểm và cơ địa người sử dụng.

4.8.3. Mô hình Cloglog

mhhq_cloglog <- glm(sleep_binary ~ beverage_coffee + beverage_energy_drink +  time_of_day_evening,
                    data = dt,
                    family = binomial(link = "cloglog"))
summary(mhhq_cloglog)
## 
## Call:
## glm(formula = sleep_binary ~ beverage_coffee + beverage_energy_drink + 
##     time_of_day_evening, family = binomial(link = "cloglog"), 
##     data = dt)
## 
## Coefficients:
##                                           Estimate Std. Error z value Pr(>|z|)
## (Intercept)                                -2.7190     0.2260 -12.032  < 2e-16
## beverage_coffeeCó uống cà phê               1.1940     0.1996   5.982 2.20e-09
## beverage_energy_drinkCó uống energy drink   1.4865     0.2767   5.371 7.81e-08
## time_of_day_eveningCó uống buổi tối         2.0146     0.1877  10.736  < 2e-16
##                                              
## (Intercept)                               ***
## beverage_coffeeCó uống cà phê             ***
## beverage_energy_drinkCó uống energy drink ***
## time_of_day_eveningCó uống buổi tối       ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 675.37  on 499  degrees of freedom
## Residual deviance: 444.81  on 496  degrees of freedom
## AIC: 452.81
## 
## Number of Fisher Scoring iterations: 5

Bảng: Các biến có ý nghĩa thống kê trong mô hình Cloglog

Biến Nhóm so sánh Hệ số (β) p-value exp(β) (hazard ratio) Diễn giải chi tiết
beverage_coffee So với không uống cà phê 1.194 2.20e-09 3.30 Người uống cà phê có xác suất có giấc ngủ cao hơn khoảng 3.3 lần so với người không uống cà phê.
beverage_energy_drink So với không uống energy drink 1.487 7.81e-08 4.42 Người uống nước tăng lực có xác suất có giấc ngủ cao hơn khoảng 4.42 lần so với người không uống.
time_of_day_evening So với không uống buổi tối 2.015 < 2e-16 7.50 Người uống vào buổi tối có xác suất có giấc ngủ cao hơn khoảng 7.5 lần so với người không uống vào buổi tối.

Phương trình hồi quy Cloglog được ước lượng như sau:

\[ \log(-\log(1 - \hat{\pi})) = -2.7190 + 1.1940 \cdot \text{Coffee} + 1.4865 \cdot \text{Energy} + 2.0146 \cdot \text{Evening} \]

Kết luận:

Kết quả hồi quy từ mô hình Cloglog tổng quát cho thấy các biến beverage_coffee, beverage_energy_drink và time_of_day_evening đều có ảnh hưởng có ý nghĩa thống kê đến xác suất mất ngủ, với p-value đều nhỏ hơn 0.01 (nhỏ hơn mức ý nghĩa 5%). Cụ thể, các hệ số ước lượng đều dương, cho thấy việc uống cà phê, uống nước tăng lực hoặc tiêu thụ các loại đồ uống này vào buổi tối đều làm tăng xác suất mất ngủ. Chẳng hạn, hệ số ước lượng của biến “có uống cà phê” là 1.194, tương ứng với xác suất mất ngủ cao hơn khoảng 3.3 lần so với người không uống cà phê, khi các yếu tố khác không đổi. Biến “beverage_tea” bị loại khỏi mô hình do hiện tượng đa cộng tuyến.

Nhìn chung, mô hình cho thấy các loại đồ uống chứa caffeine và thời điểm tiêu thụ chúng là những yếu tố rủi ro quan trọng ảnh hưởng tiêu cực đến khả năng có được giấc ngủ trong mẫu nghiên cứu này.

4.9 Đánh giá mô hình hồi quy bội

Chỉ số AIC

AIC(mhhq_logit)
## [1] 451.3008
AIC(mhhq_probit)
## [1] 451.1743
AIC(mhhq_cloglog)
## [1] 452.8134

Chỉ số BIC

BIC(mhhq_logit)
## [1] 468.1592
BIC(mhhq_probit)
## [1] 468.0328
BIC(mhhq_cloglog)
## [1] 469.6718

Chỉ số Log-Likelihood

# So sánh Log-Likelihood
logLik(mhhq_logit)
## 'log Lik.' -221.6504 (df=4)
logLik(mhhq_probit)
## 'log Lik.' -221.5872 (df=4)
logLik(mhhq_cloglog)
## 'log Lik.' -222.4067 (df=4)

Chỉ số McFadden_R2

pR2(mhhq_logit)["McFadden"]
## fitting null model for pseudo-r2
##  McFadden 
## 0.3436174
pR2(mhhq_probit)["McFadden"]
## fitting null model for pseudo-r2
##  McFadden 
## 0.3438047
pR2(mhhq_cloglog)["McFadden"]
## fitting null model for pseudo-r2
##  McFadden 
## 0.3413778

So sánh các mô hình

Mô hình AIC BIC Log-Likelihood R² / McFadden R²
Logit 451.3008 468.1592 -221.6504 0.3436
Probit 451.1743 468.0328 -221.5872 0.3438
Cloglog 452.8134 469.6718 -222.4067 0.3414

Dựa trên bảng so sánh các mô hình, ta có thể đưa ra nhận xét như sau:

  • Dựa trên bảng so sánh các mô hình hồi quy, có thể thấy rằng mô hình Probit mang lại kết quả phù hợp nhất. Mô hình này có giá trị AIC thấp nhất (451.1743) và BIC thấp nhất (468.0328), đồng thời đạt Log-Likelihood cao nhất (–221.5872) và hệ số McFadden R² lớn nhất (0.3438). Những chỉ số này cho thấy khả năng giải thích biến phụ thuộc tốt hơn so với các mô hình còn lại, bao gồm cả Logit và Cloglog.

  • Từ các tiêu chí thống kê và mức độ phù hợp mô hình, có thể kết luận rằng mô hình Probit là lựa chọn ưu việt nhất để dự đoán xác suất mất ngủ dựa trên các yếu tố liên quan đến đồ uống và thời điểm tiêu thụ.

4.10. Dự báo

new_person <- data.frame(
  beverage_coffee = factor("Có uống cà phê", levels = levels(dt$beverage_coffee)),
  beverage_energy_drink = factor("Có uống energy drink", levels = levels(dt$beverage_energy_drink)),
  time_of_day_evening = factor("Có uống buổi tối", levels = levels(dt$time_of_day_evening))
)
predict(mhhq_probit, newdata = new_person, type = "response")
##         1 
## 0.9804849
predict(mhhq_probit, newdata = new_person, type = "link")
##        1 
## 2.063868

Kết luận:

Dựa trên kết quả dự báo từ mô hình hồi quy Probit (mhhq_probit), giá trị tuyến tính (linear predictor) thu được là 2.0639 và xác suất tương ứng là 0.9805. Giá trị tuyến tính này là kết quả của việc kết hợp các hệ số ước lượng với giá trị của các biến giải thích, thông qua hàm liên kết Probit. Khi áp dụng hàm phân phối tích lũy chuẩn (CDF) lên giá trị này, ta thu được xác suất rằng cá nhân có đặc điểm như trong new_person sẽ thuộc nhóm bị ảnh hưởng đến giấc ngủ là khoảng 98.05%.

Điều này cho thấy tổ hợp các yếu tố như có uống cà phê, có sử dụng nước tăng lực, và dùng vào buổi tối đều góp phần làm tăng mạnh khả năng bị ảnh hưởng giấc ngủ. Giá trị tuyến tính dương lớn (khoảng 2.06) cũng phản ánh tác động cộng hưởng rõ rệt từ các biến giải thích lên xác suất xảy ra hiện tượng.

Từ đó, có thể nhận định rằng mô hình Probit không chỉ phù hợp về mặt thống kê mà còn cho thấy khả năng dự báo hiệu quả, giúp xác định rõ những yếu tố nguy cơ làm giảm chất lượng giấc ngủ ở những người có hành vi tiêu dùng tương tự.

CHƯƠNG 5: KẾT LUẬN VÀ KIẾN NGHỊ

5.1. Kết luận

Trong tiểu luận này, tác giả đã tiến hành một phân tích định lượng toàn diện trên bộ dữ liệu gồm 500 quan sát với 9 biến, nhằm đánh giá mối liên hệ giữa hành vi tiêu thụ đồ uống chứa caffeine và khả năng giấc ngủ bị ảnh hưởng. Biến phụ thuộc là một biến nhị phân phản ánh liệu giấc ngủ của cá nhân có bị tác động tiêu cực bởi các yếu tố liên quan đến caffeine hay không. Các biến độc lập bao gồm loại đồ uống (cà phê, nước tăng lực, trà) và thời điểm sử dụng (ban đêm hay không).

Phân tích thống kê mô tả ban đầu giúp xác định đặc điểm phân bố của từng biến và nhận diện các yếu tố tiềm năng ảnh hưởng đến giấc ngủ. Tiếp theo, ba mô hình hồi quy nhị phân gồm Logit, Probit và Cloglog được sử dụng để kiểm định mức độ ảnh hưởng của các biến độc lập. Việc so sánh các mô hình dựa trên các tiêu chí như AIC, log-likelihood và chỉ số McFadden R². Kết quả cho thấy mô hình Probit là phù hợp nhất, với AIC thấp nhất (451.17) và McFadden R² cao nhất (0.3653), phản ánh năng lực giải thích tốt nhất.

Kết quả hồi quy cho thấy ba yếu tố có ảnh hưởng đáng kể đến khả năng giấc ngủ bị ảnh hưởng gồm: uống cà phê, uống nước tăng lực và tiêu thụ vào buổi tối. Trong đó, yếu tố thời điểm sử dụng vào buổi tối có tác động mạnh nhất. Ngược lại, việc uống trà có xu hướng làm giảm xác suất bị ảnh hưởng giấc ngủ, tuy nhiên biến này bị loại khỏi mô hình do tồn tại hiện tượng đa cộng tuyến hoàn toàn.

Dự báo từ mô hình Probit cho thấy, một người có uống cà phê, sử dụng nước tăng lực và tiêu thụ vào buổi tối có xác suất bị ảnh hưởng giấc ngủ lên tới 98%. Kết quả này nhấn mạnh mối liên hệ chặt chẽ giữa hành vi tiêu dùng caffeine và chất lượng giấc ngủ, qua đó cung cấp những gợi ý thiết thực trong giáo dục sức khỏe và điều chỉnh thói quen tiêu dùng, đặc biệt đối với giới trẻ.

5.2. Hạn chế của đề tài

Mặc dù nghiên cứu đã cung cấp một cái nhìn có giá trị về mối quan hệ giữa hành vi tiêu dùng đồ uống và khả năng có giấc ngủ, đề tài vẫn tồn tại một số hạn chế nhất định.

Thứ nhất, bộ dữ liệu sử dụng trong nghiên cứu có quy mô giới hạn với 500 quan sát, và không phản ánh đầy đủ các đặc điểm nhân khẩu học hay yếu tố sinh lý của người tham gia, do đó khả năng khái quát hóa kết quả còn hạn chế.

Thứ hai, các biến độc lập chủ yếu là định tính và được mã hóa dạng nhị phân, điều này có thể làm mất đi một phần tính đa dạng và chi tiết của dữ liệu thực tế. Thứ ba, nghiên cứu chỉ sử dụng các mô hình hồi quy nhị phân cổ điển (Logit, Probit, Cloglog), chưa xét đến các phương pháp hiện đại như hồi quy phi tuyến, kỹ thuật học máy, hoặc xử lý dữ liệu mất cân bằng – những yếu tố có thể cải thiện độ chính xác và tính ứng dụng của mô hình.

Cuối cùng, do sử dụng dữ liệu quan sát, nghiên cứu chưa thể xác định quan hệ nhân quả giữa các biến, mà chỉ dừng lại ở mức độ tương quan, do đó cần cẩn trọng trong việc diễn giải và ứng dụng kết quả.

5.3. Kiến nghị

Đối với cá nhân người tiêu dùng: Cần có sự điều chỉnh hành vi tiêu dùng đồ uống chứa caffein, đặc biệt là không nên sử dụng vào buổi tối để tránh tác động tiêu cực đến chất lượng giấc ngủ.

Đối với truyền thông và y tế cộng đồng: Nên triển khai các chiến dịch nâng cao nhận thức về ảnh hưởng của đồ uống caffein đối với giấc ngủ, nhấn mạnh đến yếu tố thời điểm và liều lượng tiêu thụ.

Đối với nghiên cứu tương lai: Có thể mở rộng dữ liệu với nhiều biến định lượng hơn như thời gian ngủ thực tế, mức độ stress hoặc đặc điểm sức khỏe tổng thể để hoàn thiện mô hình và có đánh giá toàn diện hơn.

LS0tDQp0aXRsZTogIlBURExEVCINCmF1dGhvcjogIkzDqiBUaOG7iyBOZ+G7jWMgw4FuaCINCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVIOiVNOiVTLCAlZCAtICVtIC0gJVknKWAiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICBwZGZfZG9jdW1lbnQ6DQogICAgZXh0cmFfZGVwZW5kZW5jaWVzOg0KICAgICAgdmlldG5hbTogdXRmOA0KICAgIHRvYzogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgd29yZF9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQpnZW9tZXRyeToNCiAgICAgIC0gaW5uZXI9M2NtDQogICAgICAtIG91dGVyPTRjbQ0KICAgICAgLSB0b3A9M2NtDQogICAgICAtIGJvdHRvbT00Y20NCiAgICAgIC0gaGVhZHNlcD0yMnB0DQogICAgICAtIGhlYWRoZWlnaHQ9MTFwdA0KICAgICAgLSBmb290c2tpcD0zM3B0DQogICAgICAtIGlnbm9yZWhlYWQNCiAgICAgIC0gaWdub3JlZm9vdA0KICAgICAgLSBoZWlnaHRyb3VuZGVkDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KPHN0eWxlPg0KYm9keSB7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgc2Fucy1zZXJpZjsNCiAgZm9udC1zaXplOiAxNnB4Ow0KICB0ZXh0LWFsaWduOiBqdXN0aWZ5Ow0KICBsaW5lLWhlaWdodDogMS41Ow0KfQ0KaDIgew0KICBjb2xvcjogcmVkOw0KfQ0KaDMgew0KICBjb2xvcjogZGFya2JsdWU7DQp9DQo8L3N0eWxlPg0KDQpgYGB7cn0NCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KGRhdGEudGFibGUpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShza2ltcikNCmxpYnJhcnkocHN5Y2gpDQpsaWJyYXJ5KGNzdikNCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KHBhbmRlcikNCmxpYnJhcnkoZm9ybWF0dGFibGUpDQpsaWJyYXJ5KGh0bWx0b29scykNCmxpYnJhcnkoRGVzY1Rvb2xzKQ0KbGlicmFyeShlcGl0b29scykNCmxpYnJhcnkocHNjbCkNCmxpYnJhcnkoY2FyKQ0KYGBgDQoNCiMgKipQSMOCTiBUw41DSCBDw4FDIFnhur5VIFThu5Ag4bqiTkggSMav4bueTkcgxJDhur5OIE5HVVkgQ8agIFLhu5BJIExP4bqgTiBHSeG6pEMgTkfhu6YgRE8gVEnDilUgVEjhu6QgQ0FGRkVJTkUqKg0KDQpC4buZIGThu68gbGnhu4d1ICJDYWZmZWluZSBJbnRha2UgVHJhY2tlciIgY3VuZyBj4bqlcCB0aMO0bmcgdGluIGNoaSB0aeG6v3QgduG7gSB0aMOzaSBxdWVuIHRpw6p1IHRo4bulIGNhZmZlaW5lIGPhu6dhIG5nxrDhu51pIGTDuW5nIHbDoCB0w6FjIMSR4buZbmcgY+G7p2EgbsOzIMSR4bq/biBnaeG6pWMgbmfhu6cuIEThu68gbGnhu4d1IGtow7RuZyBjaOG7iSB04bqtcCB0cnVuZyB2w6BvIGzGsOG7o25nIGNhZmZlaW5lIHRpw6p1IHRo4bulIG3DoCBjw7JuIGJhbyBn4buTbSBjw6FjIHnhur91IHThu5EgbGnDqm4gcXVhbiBuaMawIGxv4bqhaSDEkeG7kyB14buRbmcgc+G7rSBk4bulbmcgKGPDoCBwaMOqLCB0csOgLCBuxrDhu5tjIHTEg25nIGzhu7FjKSwgdGjhu51pIMSRaeG7g20gdGnDqnUgdGjhu6UgdHJvbmcgbmfDoHkgKHPDoW5nLCBjaGnhu4F1LCB04buRaSksIGdp4bubaSB0w61uaCwgdsOgIG3hu6ljIMSR4buZIOG6o25oIGjGsOG7n25nIMSR4bq/biBnaeG6pWMgbmfhu6cgc2F1IGtoaSBz4butIGThu6VuZy4gTeG7pWMgdGnDqnUgY+G7p2EgbmdoacOqbiBj4bupdSBsw6AgdMOsbSBoaeG7g3UgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgaMOgbmggdmkgdGnDqnUgZMO5bmcgY2FmZmVpbmUgdsOgIG5ndXkgY8ahIHLhu5FpIGxv4bqhbiBnaeG6pWMgbmfhu6cuIEThu68gbGnhu4d1IMSRxrDhu6NjIHRodSB0aOG6rXAgZMaw4bubaSBk4bqhbmcga2jhuqNvIHPDoXQgZ2nhuqMgbOG6rXAsIGfhu5NtIDUwMCBxdWFuIHPDoXQgdsOgIDEzIGJp4bq/biwgdOG6oW8gxJFp4buBdSBraeG7h24gdGh14bqtbiBs4bujaSBjaG8gdmnhu4djIHBow6JuIHTDrWNoIMSR4buLbmggbMaw4bujbmcgdsOgIMSRw6FuaCBnacOhIHTDoWMgxJHhu5luZyBj4bunYSBjw6FjIHnhur91IHThu5EgbOG7kWkgc+G7kW5nIMSR4bq/biBjaOG6pXQgbMaw4bujbmcgZ2nhuqVjIG5n4bunIGPhu6dhIG5nxrDhu51pIHRpw6p1IGTDuW5nIGNhZmZlaW5lLg0KDQojICoqQ0jGr8agTkcgMTogVOG7lE5HIFFVQU4gTkdIScOKTiBD4buoVSoqDQoNCiMjICoqMS4xLiBMw70gZG8gY2jhu41uIMSR4buBIHTDoGkqKg0KDQogIEhp4buHbiBuYXksIHRpw6p1IHRo4bulIGNhZmZlaW5lIGzDoCBt4buZdCBow6BuaCB2aSBwaOG7lSBiaeG6v24gdHJvbmcgZ2nhu5tpIHRy4bq7LCDEkeG6t2MgYmnhu4d0IGzDoCBuaOG7r25nIG5nxrDhu51pIHRoxrDhu51uZyB4dXnDqm4gxJHhu5FpIG3hurd0IHbhu5tpIMOhcCBs4buxYyBjw7RuZyB2aeG7h2MsIGjhu41jIHThuq1wIHbDoCBs4buLY2ggc2luaCBob+G6oXQgdGjhuqV0IHRoxrDhu51uZy4gQ2FmZmVpbmUgxJHGsOG7o2MgdMOsbSB0aOG6pXkgbmhp4buBdSB0cm9uZyBjw6FjIGxv4bqhaSDEkeG7kyB14buRbmcgcXVlbiB0aHXhu5ljIG5oxrAgY8OgIHBow6osIHRyw6AsIG7GsOG7m2MgdMSDbmcgbOG7sWMgaGF5IG7GsOG7m2Mgbmfhu410IGPDsyBnYS4gxJDDonkgxJHhu4F1IGzDoCBuaOG7r25nIHPhuqNuIHBo4bqpbSBk4buFIGTDoG5nIHRp4bq/cCBj4bqtbiB0cm9uZyDEkeG7nWkgc+G7kW5nIGjDoG5nIG5nw6B5LCB2w6AgdGjGsOG7nW5nIMSRxrDhu6NjIG5nxrDhu51pIHRpw6p1IHRo4bulIHPhu60gZOG7pW5nIHbhu5tpIG3hu6VjIMSRw61jaCBnacO6cCBkdXkgdHLDrCBz4buxIHThu4luaCB0w6FvLCBuw6JuZyBjYW8ga2jhuqMgbsSDbmcgdOG6rXAgdHJ1bmcgdsOgIGvDqW8gZMOgaSB0aOG7nWkgZ2lhbiBsw6BtIHZp4buHYyBob+G6t2MgaOG7jWMgdOG6rXAuIMSQ4bq3YyBiaeG7h3QgdHJvbmcgbmjhu69uZyB0aOG7nWkgxJFp4buDbSBjxINuZyB0aOG6s25nIG5oxrAga+G7syB0aGksIGRlYWRsaW5lIGPDtG5nIHZp4buHYyBoYXkgbmjhu69uZyBuZ8OgeSBsw6BtIHZp4buHYyBjxrDhu51uZyDEkeG7mSBjYW8sIGNhZmZlaW5lIGfhuqduIG5oxrAgdHLhu58gdGjDoG5oIG3hu5l0IOKAnHRy4bujIHRo4bunIMSR4bqvYyBs4buxY+KAnSDEkcaw4bujYyBz4butIGThu6VuZyBy4buZbmcgcsOjaS4gVHV5IG5oacOqbiwgbeG6t3QgdHLDoWkgY+G7p2Egdmnhu4djIGzhuqFtIGThu6VuZyBjYWZmZWluZSwgaG/hurdjIHRpw6p1IHRo4bulIGtow7RuZyDEkcO6bmcgdGjhu51pIMSRaeG7g20sIMSRYW5nIGThuqduIHRy4bufIHRow6BuaCBt4buZdCB24bqlbiDEkeG7gSDEkcOhbmcgbG8gbmfhuqFpLiBN4buZdCB0cm9uZyBuaOG7r25nIGjhu4cgcXXhuqMgdGnDqnUgYmnhu4N1LCB0aMaw4budbmcgYuG7iyDEkcOhbmggZ2nDoSB0aOG6pXAsIGNow61uaCBsw6AgcuG7kWkgbG/huqFuIGdp4bqlYyBuZ+G7py4NCg0KICBS4buRaSBsb+G6oW4gZ2nhuqVjIG5n4bunIGtow7RuZyBjaOG7iSDhuqNuaCBoxrDhu59uZyDEkeG6v24gc+G7qWMga2jhu49lIHRo4buDIGNo4bqldCwgdGluaCB0aOG6p24gbcOgIGPDsm4gbMOgbSBnaeG6o20gaGnhu4d1IHF14bqjIGzDoG0gdmnhu4djLCBo4buNYyB04bqtcCB2w6AgY2jhuqV0IGzGsOG7o25nIGN14buZYyBz4buRbmcgbsOzaSBjaHVuZy4gVGjhu7FjIHThur8gY2hvIHRo4bqleSBuaGnhu4F1IG5nxrDhu51pIHRpw6p1IHRo4bulIGtow7RuZyDDvSB0aOG7qWMgxJHGsOG7o2Mg4bqjbmggaMaw4bufbmcgdGnDqnUgY+G7sWMgdGnhu4FtIOG6qW4gY+G7p2EgY2FmZmVpbmUgxJHhu5FpIHbhu5tpIGdp4bqlYyBuZ+G7pywgdsOgIGjDoG5oIHZpIG7DoHkgxJFhbmcgZOG6p24gdHLhu58gdGjDoG5oIG3hu5l0IHbhuqVuIMSR4buBIMSRw6FuZyBiw6FvIMSR4buZbmcgdHJvbmcgeMOjIGjhu5lpIGhp4buHbiDEkeG6oWkuIEtow7RuZyBnaeG7kW5nIG5oxrAgY8OhYyBjaOG6pXQga8OtY2ggdGjDrWNoIGLhu4sga2nhu4NtIHNvw6F0IGNo4bq3dCBjaOG6vSwgY2FmZmVpbmUgcuG6pXQgZOG7hSB0aeG6v3AgY+G6rW4gdsOgIMSRxrDhu6NjIHPhu60gZOG7pW5nIG3hu5l0IGPDoWNoIHThu7EgZG8sIHRo4bqtbSBjaMOtIGLhu4sgeGVtIG5o4bq5IHbhu4EgbeG7qWMgxJHhu5kgcuG7p2kgcm8gxJHhu5FpIHbhu5tpIHPhu6ljIGto4buPZS4NCiAgDQogIELhu5kgZOG7ryBsaeG7h3Ug4oCcQ2FmZmVpbmUgSW50YWtlIFRyYWNrZXLigJ0gZ2hpIGzhuqFpIHRow7NpIHF1ZW4gdGnDqnUgdGjhu6UgY2FmZmVpbmUgY+G7p2EgdOG7q25nIGPDoSBuaMOibiwgYmFvIGfhu5NtIGxv4bqhaSB0aOG7qWMgdeG7kW5nLCB0aOG7nWkgxJFp4buDbSBz4butIGThu6VuZyB2w6AgdHLhuqFuZyB0aMOhaSBnaeG6pWMgbmfhu6cgdMawxqFuZyDhu6luZy4gxJBp4buBdSBuw6B5IHThuqFvIMSRaeG7gXUga2nhu4duIHRodeG6rW4gbOG7o2kgxJHhu4MgcGjDom4gdMOtY2ggbeG7kWkgcXVhbiBo4buHIGdp4buvYSBow6BuaCB2aSB0acOqdSBkw7luZyBjYWZmZWluZSB2w6Agbmd1eSBjxqEgcuG7kWkgbG/huqFuIGdp4bqlYyBuZ+G7pywgxJHhu5NuZyB0aOG7nWkgeGVtIHjDqXQg4bqjbmggaMaw4bufbmcgY+G7p2EgY8OhYyB54bq/dSB04buRIGxpw6puIHF1YW4gbmjGsCB0aOG7nWkgZ2lhbiwgbG/huqFpIHRo4bupYyB14buRbmcgaGF5IHRow7NpIHF1ZW4gc2luaCBob+G6oXQgdHJvbmcgbmfDoHkuIE5naGnDqm4gY+G7qXUgxJHhu4EgdMOgaSDigJxQaMOibiB0w61jaCBjw6FjIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHhur9uIG5ndXkgY8ahIHLhu5FpIGxv4bqhbiBnaeG6pWMgbmfhu6cgZG8gdGnDqnUgdGjhu6UgY2FmZmVpbmXigJ0gbmjhurFtIG3hu6VjIMSRw61jaCB0w6xtIGhp4buDdSBzw6J1IGjGoW4gduG7gSB0aOG7sWMgdHLhuqFuZyB0acOqdSB0aOG7pSBjYWZmZWluZSBjxaluZyBuaMawIMSRw6FuaCBnacOhIOG6o25oIGjGsOG7n25nIGPhu6dhIG7DsyDEkeG6v24gY2jhuqV0IGzGsOG7o25nIGdp4bqlYyBuZ+G7py4NCiAgDQogIEtow7RuZyBjaOG7iSBk4burbmcgbOG6oWkg4bufIHZp4buHYyB4w6FjIMSR4buLbmggbeG7kWkgdMawxqFuZyBxdWFuIGdp4buvYSBsxrDhu6NuZyBjYWZmZWluZSB0acOqdSB0aOG7pSB2w6AgZ2nhuqVjIG5n4bunLCBuZ2hpw6puIGPhu6l1IGPDsm4geGVtIHjDqXQgdmFpIHRyw7IgY+G7p2EgY8OhYyB54bq/dSB04buRIMSRaSBrw6htIG5oxrAgdGjhu51pIMSRaeG7g20gc+G7rSBk4bulbmcsIGxv4bqhaSB0aOG7qWMgdeG7kW5nLCB0aOG7nWkgZ2lhbiBsw6BtIHZp4buHYyBob+G6t2MgaOG7jWMgdOG6rXAsIHRow7NpIHF1ZW4gc2luaCBob+G6oXQgdsOgIGPDoWMgxJHhurdjIMSRaeG7g20gbmjDom4ga2jhuql1IGjhu41jIGtow6FjIChnaeG7m2kgdMOtbmgsIMSR4buZIHR14buVaSwgbmdo4buBIG5naGnhu4dwLi4uKS4gVGjDtG5nIHF1YSDEkcOzLCBuZ2hpw6puIGPhu6l1IGjGsOG7m25nIMSR4bq/biB2aeG7h2MgeMOieSBk4buxbmcgbeG7mXQgY8OhaSBuaMOsbiB0b8OgbiBkaeG7h24gaMahbiB24buBIGjDoG5oIHZpIHPhu60gZOG7pW5nIGNhZmZlaW5lIHRyb25nIMSR4budaSBz4buRbmcgaOG6sW5nIG5nw6B5IGPhu6dhIG5nxrDhu51pIHRpw6p1IHRo4bulIGhp4buHbiBuYXkuDQoNCiMjICoqMS4yLiBN4bulYyB0acOqdSBuZ2hpw6puIGPhu6l1KioNCg0KIyMjICoqMS4yLjEuICBN4bulYyB0acOqdSBjaHVuZyoqDQoNCiAgTmdoacOqbiBj4bupdSBuaOG6sW0gcGjDom4gdMOtY2ggbeG7kWkgcXVhbiBo4buHIGdp4buvYSBow6BuaCB2aSB0acOqdSB0aOG7pSBjYWZmZWluZSB2w6Agbmd1eSBjxqEgcuG7kWkgbG/huqFuIGdp4bqlYyBuZ+G7pyDhu58gbmfGsOG7nWkgdGnDqnUgdGjhu6UsIHThu6sgxJHDsyB4w6FjIMSR4buLbmggY8OhYyB54bq/dSB04buRIHTDoWMgxJHhu5luZyBjaMOtbmggdsOgIMSR4buBIHh14bqldCBt4buZdCBz4buRIGtodXnhur9uIG5naOG7iyBnw7NwIHBo4bqnbiBuw6JuZyBjYW8gbmjhuq1uIHRo4bupYyBjxaluZyBuaMawIMSRaeG7gXUgY2jhu4luaCB0aMOzaSBxdWVuIHPhu60gZOG7pW5nIGNhZmZlaW5lIG3hu5l0IGPDoWNoIGjhu6NwIGzDvSB0cm9uZyBj4buZbmcgxJHhu5NuZy4NCg0KIyMjICoqMS4yLjIuICBN4bulYyB0acOqdSBj4bulIHRo4buDKioNCg0KICBLaOG6o28gc8OhdCBt4bupYyDEkeG7mSB0acOqdSB0aOG7pSBjYWZmZWluZSBj4bunYSBuZ8aw4budaSB0acOqdSB0aOG7pSB0aMO0bmcgcXVhIGPDoWMgbG/huqFpIHRo4bupYyB14buRbmcgcGjhu5UgYmnhur9uIG5oxrAgY8OgIHBow6osIHRyw6AsIG7GsOG7m2MgdMSDbmcgbOG7sWMsLi4uDQoNCiAgxJDDoW5oIGdpw6EgdMOsbmggdHLhuqFuZyBnaeG6pWMgbmfhu6cgY+G7p2EgbmfGsOG7nWkgdGnDqnUgdGjhu6UgdGhlbyBjw6FjIHRpw6p1IGNow60gbmjGsDogdGjhu51pIGdpYW4gbmfhu6csIGNo4bqldCBsxrDhu6NuZyBnaeG6pWMgbmfhu6csIHThuqduIHN14bqldCBt4bqldCBuZ+G7pyBob+G6t2Mga2jDsyBuZ+G7py4NCg0KICBQaMOibiB0w61jaCBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIGzGsOG7o25nIGNhZmZlaW5lIHRpw6p1IHRo4bulIHbDoCBuZ3V5IGPGoSBy4buRaSBsb+G6oW4gZ2nhuqVjIG5n4bunLg0KDQogIFjDoWMgxJHhu4tuaCDhuqNuaCBoxrDhu59uZyBj4bunYSBjw6FjIHnhur91IHThu5Ega2jDoWMgbmjGsCB0aOG7nWkgxJFp4buDbSBz4butIGThu6VuZyBjYWZmZWluZSwgdGjDs2kgcXVlbiBzaW5oIGhv4bqhdCwgdGjhu51pIGdpYW4gaOG7jWMgdOG6rXAgaG/hurdjIGzDoG0gdmnhu4djLCBnaeG7m2kgdMOtbmgsIMSR4buZIHR14buVaSwuLi4gxJHhur9uIG3hu6ljIMSR4buZIHLhu5FpIGxv4bqhbiBnaeG6pWMgbmfhu6cuDQoNCiAgxJDhu4EgeHXhuqV0IG3hu5l0IHPhu5EgZ2nhuqNpIHBow6FwIG5o4bqxbSBo4bqhbiBjaOG6vyB0w6FjIMSR4buZbmcgdGnDqnUgY+G7sWMgY+G7p2Egdmnhu4djIHRpw6p1IHRo4bulIGNhZmZlaW5lIMSR4bq/biBnaeG6pWMgbmfhu6csIMSR4buTbmcgdGjhu51pIG7Dom5nIGNhbyDDvSB0aOG7qWMgc+G7rSBk4bulbmcgY2FmZmVpbmUgaOG7o3AgbMO9IHRyb25nIGPhu5luZyDEkeG7k25nIG5nxrDhu51pIHRpw6p1IGTDuW5nLg0KDQojIyAqKjEuMy4gxJDhu5FpIHTGsOG7o25nIHbDoCBwaOG6oW0gdmkgbmdoacOqbiBj4bupdSoqDQoNCiAgVOG6rXAgZOG7ryBsaeG7h3UgxJHGsOG7o2Mgc+G7rSBk4bulbmcgdHJvbmcgbmdoacOqbiBj4bupdSBuw6B5IGzDoCBr4bq/dCBxdeG6oyB04burIG3hu5l0IGN14buZYyBraOG6o28gc8OhdCBow6BuaCB2aSB0acOqdSB0aOG7pSBjYWZmZWluZSwgY2jhu6cgeeG6v3Ug4bufIG5ow7NtIG5nxrDhu51pIHRpw6p1IHRo4bulLiBC4buZIGThu68gbGnhu4d1IGPDsyB0w6puIOKAnENhZmZlaW5lIEludGFrZSBUcmFja2Vy4oCdLCBnaGkgbmjhuq1uIHRow7RuZyB0aW4gbGnDqm4gcXVhbiDEkeG6v24gbG/huqFpIHRo4bupYyB14buRbmcgY2jhu6lhIGNhZmZlaW5lLCB0aOG7nWkgxJFp4buDbSBz4butIGThu6VuZywgdOG7lW5nIGzGsOG7o25nIGNhZmZlaW5lIHRpw6p1IHRo4bulIHRyb25nIG5nw6B5ICh0w61uaCBi4bqxbmcgbWcpLCBjw7luZyB24bubaSB0cuG6oW5nIHRow6FpIGdp4bqlYyBuZ+G7pyBj4bunYSBuZ8aw4budaSB0aGFtIGdpYS4NCg0KICBE4buvIGxp4buHdSBiYW8gZ+G7k20gNTAwIHF1YW4gc8OhdCB24bubaSBuaGnhu4F1IGJp4bq/biBz4buRIHBo4bqjbiDDoW5oIHRow7NpIHF1ZW4gdGnDqnUgZMO5bmcgdsOgIGNo4bqldCBsxrDhu6NuZyBnaeG6pWMgbmfhu6csIHRyb25nIMSRw7MgxJHDoW5nIGNow7ogw70gbMOgIGPDoWMgYmnhur9uIHbhu4EgbG/huqFpIMSR4buTIHXhu5FuZyAoY8OgIHBow6osIHRyw6AsIG7GsOG7m2MgdMSDbmcgbOG7sWMpLCBraHVuZyBnaeG7nSB0acOqdSB0aOG7pSzigKYgQ8OhYyBiaeG6v24gbsOgeSBjaG8gcGjDqXAgbmdoacOqbiBj4bupdSBt4buZdCBjw6FjaCDEkeG7i25oIGzGsOG7o25nIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIGjDoG5oIHZpIHRpw6p1IHRo4bulIGNhZmZlaW5lIHbDoCBuZ3V5IGPGoSBy4buRaSBsb+G6oW4gZ2nhuqVjIG5n4bunIHRyb25nIHRo4buxYyB04bq/Lg0KDQojIyAqKjEuNC4gUGjGsMahbmcgcGjDoXAgbmdoacOqbiBj4bupdSoqDQoNCiAgQsOgaSBuZ2hpw6puIGPhu6l1IHPhu60gZOG7pW5nIHBoxrDGoW5nIHBow6FwIHRo4buRbmcga8OqIG3DtCB04bqjIGvhur90IGjhu6NwIHbhu5tpIGPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibiDEkeG7gyBwaMOibiB0w61jaCBk4buvIGxp4buHdSwgbmjhurFtIHjDoWMgxJHhu4tuaCBt4bupYyDEkeG7mSDhuqNuaCBoxrDhu59uZyBj4bunYSBjw6FjIHnhur91IHThu5EgbGnDqm4gcXVhbiDEkeG6v24gaMOgbmggdmkgdGnDqnUgdGjhu6UgY2FmZmVpbmUgdsOgIGto4bqjIG7Eg25nIHjhuqN5IHJhIHLhu5FpIGxv4bqhbiBnaeG6pWMgbmfhu6cg4bufIHNpbmggdmnDqm4uIA0KDQojIyAqKjEuNS4gS+G6v3QgY+G6pXUgxJHhu4EgdMOgaSoqDQoNCkNoxrDGoW5nIDE6IFThu5VuZyBxdWFuIG5naGnDqm4gY+G7qXUuIA0KDQpDaMawxqFuZyAyOiBMw70gdGh1eeG6v3QgbmdoacOqbiBj4bupdQ0KDQpDaMawxqFuZyAzOiBE4buvIGxp4buHdSBuZ2hpw6puIGPhu6l1LiANCg0KQ2jGsMahbmcgNDogUGjDom4gdMOtY2ggdsOgIMSRxrBhIHJhIGvhur90IHF14bqjLg0KDQpDaMawxqFuZyA1OiBL4bq/dCBsdeG6rW4gdsOgIGtp4bq/biBuZ2jhu4suDQoNCiMgKipDSMavxqBORyAyOiBMw50gVEhVWeG6vlQgTkdIScOKTiBD4buoVSoqDQoNCiMjICoqMi4xLiBC4bqjbmcgbmfhuqt1IG5oacOqbioqDQoNCiMjIyAqKjIuMS4xLiAgQ+G6pXUgdHLDumMqKg0KDQpC4bqjbmcgbmfhuqt1IG5oacOqbiBoYWkgY2hp4buBdSBsw6AgY8O0bmcgY+G7pSBkw7luZyDEkeG7gyBwaMOibiBsb+G6oWkgY8OhYyDEkeG7kWkgdMaw4bujbmcgdHJvbmcgbeG6q3UgKGhv4bq3YyB04buVbmcgdGjhu4MpIGThu7FhIHRoZW8gaGFpIGJp4bq/biDEkeG7i25oIHTDrW5oOiBt4buZdCBiaeG6v24gZMOybmcgKF9yb3cgdmFyaWFibGVfKSB2w6AgbeG7mXQgYmnhur9uIGPhu5l0IChfY29sdW1uIHZhcmlhYmxlXykuDQoNCkdp4bqjIHPhu606DQoNCi0gQmnhur9uIGTDsm5nIFwoIFggXCkgY8OzIFwoIEkgXCkgbeG7qWMgKGxldmVscyksDQoNCi0gQmnhur9uIGPhu5l0IFwoIFkgXCkgY8OzIFwoIEogXCkgbeG7qWMsDQoNCktoaSDEkcOzLCBi4bqjbmcgbmfhuqt1IG5oacOqbiBcKCBJIFx0aW1lcyBKIFwpIGPDsyBk4bqhbmcgbmjGsCBzYXU6DQoNCiQkDQpcYmVnaW57YXJyYXl9e2N8Y2NjY3xjfQ0KXHRleHR7Qmnhur9uIFggLyBCaeG6v24gWX0gJiB5XzEgJiB5XzIgJiBcY2RvdHMgJiB5X0ogJiBcdGV4dHtU4buVbmcgZMOybmd9IFxcDQpcaGxpbmUNCnhfMSAmIG5fezExfSAmIG5fezEyfSAmIFxjZG90cyAmIG5fezFKfSAmIG5fezEufSBcXA0KeF8yICYgbl97MjF9ICYgbl97MjJ9ICYgXGNkb3RzICYgbl97Mkp9ICYgbl97Mi59IFxcDQpcdmRvdHMgJiBcdmRvdHMgJiBcdmRvdHMgJiBcZGRvdHMgJiBcdmRvdHMgJiBcdmRvdHMgXFwNCnhfSSAmIG5fe0kxfSAmIG5fe0kyfSAmIFxjZG90cyAmIG5fe0lKfSAmIG5fe0kufSBcXA0KXGhsaW5lDQpcdGV4dHtU4buVbmcgY+G7mXR9ICYgbl97LjF9ICYgbl97LjJ9ICYgXGNkb3RzICYgbl97Lkp9ICYNClxlbmR7YXJyYXl9DQokJA0KDQpUcm9uZyDEkcOzOg0KDQotIFwoIG5fe2lqfSBcKTogc+G7kSBsxrDhu6NuZyBxdWFuIHPDoXQgcsahaSB2w6BvIGjDoG5nIFwoIGkgXCkgdsOgIGPhu5l0IFwoIGogXCksDQoNCi0gXCggbl97aS59IFwpOiB04buVbmcgc+G7kSBxdWFuIHPDoXQg4bufIGjDoG5nIFwoIGkgXCksDQoNCi0gXCggbl97Lmp9IFwpOiB04buVbmcgc+G7kSBxdWFuIHPDoXQg4bufIGPhu5l0IFwoIGogXCksDQoNCi0gVOG7lW5nIHThuqV0IGPhuqMgY8OhYyDDtCBsw6Aga8OtY2ggdGjGsOG7m2MgbeG6q3U6ICANCg0KICBcWw0KICBuID0gXHN1bV97aT0xfV57SX0gXHN1bV97aj0xfV57Sn0gbl97aWp9DQogIFxdDQoNCiMjIyAqKjIuMS4yLiBU4bqnbiBz4buRIHbDoCB04bu3IGzhu4cqKg0KDQrEkOG7gyBtw7QgdOG6oyBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIGhhaSBiaeG6v24gxJHhu4tuaCB0w61uaCB0cm9uZyBi4bqjbmcgbmfhuqt1IG5oacOqbiwgdGEgY+G6p24gcGjDom4gYmnhu4d0IHbDoCB0w61uaCB0b8OhbiBjw6FjIGxv4bqhaSB04bqnbiBz4buRIHbDoCB04bu3IGzhu4cgc2F1Og0KDQoqKjEuIFThuqduIHPhu5EgdMawxqFuZyDEkeG7kWkgKFThu7cgbOG7hyBjaHVuZyAtICpKb2ludCBQcm9wb3J0aW9ucyopKioNCg0KVOG7tyBs4buHIGNodW5nIMSRxrDhu6NjIHTDrW5oIHRoZW8gY8O0bmcgdGjhu6ljOg0KDQokJA0KcF97aWp9ID0gXGZyYWN7bl97aWp9fXtufQ0KJCQNCg0KxJDDonkgbMOgIHThu7cgbOG7hyBjw6FjIHF1YW4gc8OhdCByxqFpIHbDoG8gw7QgJChpLCBqKSQgdHJvbmcgdG/DoG4gYuG7mSBt4bqrdS4gVOG7lW5nIHThuqV0IGPhuqMgY8OhYyB04bu3IGzhu4cgbsOgeSBi4bqxbmcgMToNCg0KJCQNClxzdW1faSBcc3VtX2ogcF97aWp9ID0gMQ0KJCQNCg0KKipWw60gZOG7pToqKiBO4bq/dSAkcF97MTF9ID0gXGZyYWN7NjB9ezIwMH0gPSAwLjMkLCB04bupYyBsw6AgMzAlIGtow6FjaCBow6BuZyBsw6AgbmfGsOG7nWkgdHLhursgdsOgIHPhu60gZOG7pW5nIE1vYmlsZSBCYW5raW5nLg0KDQoqKjIuIFBow6JuIHBo4buRaSBiacOqbiAoKk1hcmdpbmFsIERpc3RyaWJ1dGlvbnMqKSoqDQoNCi0gKipU4bu3IGzhu4cgdOG7lW5nIGJpw6puIGPhu6dhIGTDsm5nIChSb3cgTWFyZ2luYWwgUHJvcG9ydGlvbnMpOioqDQoNCiQkDQpwX3tpLn0gPSBcZnJhY3tuX3tpLn19e259ID0gXHN1bV9qIHBfe2lqfQ0KJCQNCg0KxJDDonkgbMOgIHBow6JuIHBo4buRaSB4w6FjIHN14bqldCBj4bunYSBiaeG6v24gJFgkLiANCg0KKipWw60gZOG7pToqKiAkcF97MS59ID0gXGZyYWN7MTIwfXsyMDB9ID0gMC42JC4NCg0KLSAqKlThu7cgbOG7hyB04buVbmcgYmnDqm4gY+G7p2EgY+G7mXQgKENvbHVtbiBNYXJnaW5hbCBQcm9wb3J0aW9ucyk6KioNCg0KJCQNCnBfey5qfSA9IFxmcmFje25fey5qfX17bn0gPSBcc3VtX2kgcF97aWp9DQokJA0KDQrEkMOieSBsw6AgcGjDom4gcGjhu5FpIHjDoWMgc3XhuqV0IGPhu6dhIGJp4bq/biAkWSQuICANCg0KKipWw60gZOG7pToqKiAkcF97LjF9ID0gXGZyYWN7NzV9ezIwMH0gPSAwLjM3NSQuDQoNCioqMy4gUGjDom4gcGjhu5FpIGPDsyDEkWnhu4F1IGtp4buHbiAoKkNvbmRpdGlvbmFsIERpc3RyaWJ1dGlvbnMqKSoqDQoNCi0gKipQaMOibiBwaOG7kWkgY8OzIMSRaeG7gXUga2nhu4duIGPhu6dhIFkgdGhlbyBYOioqDQoNCiQkDQpwX3tqfGl9ID0gUChZID0gWV9qIHwgWCA9IFhfaSkgPSBcZnJhY3tuX3tpan19e25fe2kufX0NCiQkDQoNCioqVsOtIGThu6U6KiogVOG7tyBs4buHIG5nxrDhu51pIHRy4bq7IHRyb25nIHPhu5EgbmfGsOG7nWkgc+G7rSBk4bulbmcgTW9iaWxlIEJhbmtpbmcgbMOgICRcZnJhY3s2MH17MTIwfSA9IDAuNSQuDQoNCi0gKipQaMOibiBwaOG7kWkgY8OzIMSRaeG7gXUga2nhu4duIGPhu6dhIFggdGhlbyBZOioqDQoNCiQkDQpwX3tpfGp9ID0gUChYID0gWF9pIHwgWSA9IFlfaikgPSBcZnJhY3tuX3tpan19e25fey5qfX0NCiQkDQoNCioqVsOtIGThu6U6KiogVHJvbmcgc+G7kSBuZ8aw4budaSB0cuG6uywgdOG7tyBs4buHIGTDuW5nIE1vYmlsZSBCYW5raW5nIGzDoCAkXGZyYWN7NjB9ezc1fSA9IDAuOCQuDQoNCioqTMawdSDDvToqKiBO4bq/dSBoYWkgYmnhur9uICRYJCB2w6AgJFkkIMSR4buZYyBs4bqtcCB0aOG7kW5nIGvDqiAoKnN0YXRpc3RpY2FsbHkgaW5kZXBlbmRlbnQqKSwgdGjDrDoNCg0KJCQNCnBfe2p8aX0gPSBwX2ogXHF1YWQgXHRleHR7duG7m2kgbeG7jWkgfSBpLCBccXVhZCBcdGV4dHt2w6AgfSBccXVhZCBwX3tpfGp9ID0gcF9pIFxxdWFkIFx0ZXh0e3bhu5tpIG3hu41pIH0gag0KJCQNCg0KKio0LiBU4bqnbiBz4buRIGvhu7MgduG7jW5nICgqRXhwZWN0ZWQgRnJlcXVlbmNpZXMqKSoqDQoNCk7hur91IGdp4bqjIMSR4buLbmggJFgkIHbDoCAkWSQgxJHhu5ljIGzhuq1wLCB0aMOsIHThuqduIHPhu5Ega+G7syB24buNbmcgdOG6oWkgw7QgJChpLCBqKSQgbMOgOg0KDQokJA0KbV97aWp9ID0gXGZyYWN7bl97aS59IFxjZG90IG5fey5qfX17bn0NCiQkDQoNCiMjIyAqKjIuMS4zLiBDw6FjIHBow6JuIHBo4buRaSB4w6FjIHN14bqldCBsacOqbiBxdWFuKioNCg0KVmnhu4djIGzhu7FhIGNo4buNbiBtw7QgaMOsbmggeMOhYyBzdeG6pXQgcGjDuSBo4bujcCBjaG8gY8OhYyB04bqnbiBz4buRIMO0IFwoIG5fe2lqfSBcKSBwaOG7pSB0aHXhu5ljIHbDoG8gY8OhY2ggZOG7ryBsaeG7h3UgxJHGsOG7o2MgdGh1IHRo4bqtcC4gVHJvbmcgcGjDom4gdMOtY2ggYuG6o25nIG5n4bqrdSBuaGnDqm4sIGNow7puZyB0YSB0aMaw4budbmcgc+G7rSBk4bulbmcgY8OhYyBtw7QgaMOsbmggeMOhYyBzdeG6pXQgc2F1Og0KDQoqKjEuIFBow6JuIHBo4buRaSBQb2lzc29uKioNCg0KxJDGsOG7o2Mgw6FwIGThu6VuZyBraGkgdOG7lW5nIGjDoG5nIHbDoCB04buVbmcgY+G7mXQga2jDtG5nIGPhu5EgxJHhu4tuaCAodOG7qWMgXCggbiwgbl97aS59LCBuX3suan0gXCkgxJHhu4F1IGzDoCBuZ+G6q3Ugbmhpw6puKSwgdsOgIGPDoWMgw7QgXCggbl97aWp9IFwpIGzDoCBjw6FjIGJp4bq/biBuZ+G6q3Ugbmhpw6puIFBvaXNzb24gxJHhu5ljIGzhuq1wIHbhu5tpIHRoYW0gc+G7kSAoa+G7syB24buNbmcpIFwoIFxtdV97aWp9IFwpLiBLaGkgxJHDsyB04buVbmcgXCggbiA9IFxzdW0gbl97aWp9IFwpIGPFqW5nIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIFBvaXNzb24uIMSQw6J5IGzDoCBjxqEgc+G7nyDEkeG7gyB4w6J5IGThu7FuZyBtw7QgaMOsbmggTG9nLWxpbmVhci4gIA0KDQoqVsOtIGThu6U6KiBN4buZdCB0cnVuZyB0w6JtIHRoxrDGoW5nIG3huqFpIGdoaSBuaOG6rW4gY8OhYyBz4buxIGPhu5EgYW4gbmluaCB44bqjeSByYSB0cm9uZyBraHXDtG4gdmnDqm4gY2hpYSB0aGVvIGtodSB24buxYyB2w6AgbG/huqFpIHPhu7EgY+G7kS4NCg0KKioyLiBQaMOibiBwaOG7kWkgTXVsdGlub21pYWwgKMSQYSB0aOG7qWMpKioNCg0Kw4FwIGThu6VuZyBraGkgY+G7oSBt4bqrdSBcKCBuIFwpIMSRxrDhu6NjIGPhu5EgxJHhu4tuaCwgdsOgIGPDoWMgxJHhu5FpIHTGsOG7o25nIMSRxrDhu6NjIHBow6JuIGxv4bqhaSBuZ+G6q3Ugbmhpw6puIHbDoG8gXCggSSBcdGltZXMgSiBcKSDDtCB24bubaSB4w6FjIHN14bqldCBcKCBwX3tpan0gXCkgY2hvIG3hu5dpIMO0IChcKCBcc3VtIHBfe2lqfSA9IDEgXCkpLiBLaGkgxJHDsywgdmVjdG9yIHThuqduIHPhu5EgY8OhYyDDtCB0dcOibiB0aGVvIHBow6JuIHBo4buRaSBNdWx0aW5vbWlhbCB24bubaSB04buVbmcgc+G7kSBcKCBuIFwpIHbDoCB4w6FjIHN14bqldCBcKCAocF97MTF9LCBwX3sxMn0sIFxkb3RzLCBwX3tJSn0pIFwpLiAgDQoNCipWw60gZOG7pToqIEto4bqjbyBzw6F0IFwoIG4gPSAyMDAgXCkga2jDoWNoIGjDoG5nIHbDoCBwaMOibiBsb+G6oWkgaOG7jSB0aGVvIGhhaSBiaeG6v24uDQoNCioqMy4gUGjDom4gcGjhu5FpIFByb2R1Y3QgTXVsdGlub21pYWwgKFTDrWNoIGPDoWMgcGjDom4gcGjhu5FpIMSQYSB0aOG7qWMpKioNCg0KLSBO4bq/dSB04buVbmcgY8OhYyBkw7JuZyBcKCBuX3tpLn0gXCkgxJHGsOG7o2MgY+G7kSDEkeG7i25oIHRyxrDhu5tjIChSb3cgbWFyZ2luYWxzIGZpeGVkKTogS2hpIMSRw7MsIHThu6tuZyBow6BuZyBcKCBpIFwpIHRyb25nIGLhuqNuZyBsw6Agbmfhuqt1IG5oacOqbiB0aGVvIHBow6JuIHBo4buRaSBNdWx0aW5vbWlhbCB24bubaSBrw61jaCB0aMaw4bubYyBt4bqrdSBcKCBuX2kuIFwpIHbDoCB4w6FjIHN14bqldCBcKCAocF97aTF9LCBwX3tpMn0sIFxkb3RzLCBwX3tpSn0pIFwpLiBUb8OgbiBi4buZIGLhuqNuZyBsw6AgdMOtY2ggY+G7p2EgXCggSSBcKSBwaMOibiBwaOG7kWkgTXVsdGlub21pYWwgxJHhu5ljIGzhuq1wLiAgDQoNCipWw60gZOG7pToqIENo4buNbiAxMjAgbmfGsOG7nWkgc+G7rSBk4bulbmcgTW9iaWxlIEJhbmtpbmcgdsOgIHBow6JuIGNoaWEgdGhlbyDEkeG7mSB0deG7lWkuDQoNCi0gTuG6v3UgdOG7lW5nIGPDoWMgY+G7mXQgXCggbl97Lmp9IFwpIMSRxrDhu6NjIGPhu5EgxJHhu4tuaCB0csaw4bubYyAoQ29sdW1uIG1hcmdpbmFscyBmaXhlZCk6IFTGsMahbmcgdOG7sSwgbeG7l2kgY+G7mXQgXCggaiBcKSBsw6AgbeG7mXQgcGjDom4gcGjhu5FpIE11bHRpbm9taWFsIHRoZW8gYmnhur9uIGTDsm5nIFwoIFggXCkgduG7m2kga8OtY2ggdGjGsOG7m2MgbeG6q3UgXCggbl97Lmp9IFwpIHbDoCB4w6FjIHN14bqldCBcKCAocF97MWp9LCBwX3syan0sIFxkb3RzLCBwX3tJan0pIFwpLiAgDQoNCipWw60gZOG7pToqIENo4buNbiA3NSBuZ8aw4budaSB0cuG6uywgNzUgbmfGsOG7nWkgdHJ1bmcgbmnDqm4sIDUwIG5nxrDhu51pIGNhbyB0deG7lWksIHLhu5NpIHBow6JuIHTDrWNoIHRoZW8gdmnhu4djIGPDsyBkw7luZyBNb2JpbGUgQmFua2luZyBoYXkga2jDtG5nLg0KDQojIyAqKjIuMi4gQuG6o25nIG5n4bqrdSBuaGnDqm4gMlgyKioNCg0KQuG6o25nIG5n4bqrdSBuaGnDqm4gXCgyIFx0aW1lcyAyXCkgbMOgIGPDtG5nIGPhu6UgxJHGoW4gZ2nhuqNuIG5oxrBuZyBy4bqldCBoaeG7h3UgcXXhuqMgxJHhu4Mgc28gc8OhbmggdOG7tyBs4buHIGdp4buvYSBoYWkgbmjDs20gdHJvbmcgY8OhYyBuZ2hpw6puIGPhu6l1IHbhu5tpIGJp4bq/biBr4bq/dCBxdeG6oyBuaOG7iyBwaMOibiAodsOtIGThu6U6IHRow6BuaCBjw7RuZy90aOG6pXQgYuG6oWkpLg0KDQpHaeG6oyBz4butIGLhuqNuZyBjw7MgZOG6oW5nOg0KDQp8IE5ow7NtICAgICAgIHwgVGjDoG5oIGPDtG5nIChcKHlfMVwpKSB8IFRo4bqldCBi4bqhaSAoXCh5XzJcKSkgfCBU4buVbmcgY+G7mW5nIHwNCnwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfA0KfCBOaMOzbSAxIChcKHhfMVwpKSB8IFwobl97MTF9XCkgICAgICAgICAgICAgfCBcKG5fezEyfVwpICAgICAgICAgICB8IFwobl97MS59XCkgICB8DQp8IE5ow7NtIDIgKFwoeF8yXCkpIHwgXChuX3syMX1cKSAgICAgICAgICAgICB8IFwobl97MjJ9XCkgICAgICAgICAgIHwgXChuX3syLn1cKSAgIHwNCg0KS2hpIMSRw7M6DQoNCi0gVOG7tyBs4buHIHRow6BuaCBjw7RuZyBuaMOzbSAxOiBcKCBcaGF0e3B9XzEgPSBcZnJhY3tuX3sxMX19e25fezEufX0gXCkNCg0KLSBU4bu3IGzhu4cgdGjDoG5oIGPDtG5nIG5ow7NtIDI6IFwoIFxoYXR7cH1fMiA9IFxmcmFje25fezIxfX17bl97Mi59fSBcKQ0KDQpTbyBzw6FuaCBoYWkgdOG7tyBs4buHIG7DoHkgZ2nDunAgxJHDoW5oIGdpw6Egc+G7sSBraMOhYyBiaeG7h3QgZ2nhu69hIGPDoWMgbmjDs20gdHJvbmcgbmdoacOqbiBj4bupdS4NCg0KIyMjICoqMi4yLjEuIEhp4buHdSBoYWkgdOG7tyBs4buHKioNCg0KSGnhu4d1IHPhu5EgdOG7tyBs4buHIMSRxrDhu6NjIMSR4buLbmggbmdoxKlhIGzDoCBcKCBEID0gcF8xIC0gcF8yIFwpLCBwaOG6o24gw6FuaCBt4bupYyBjaMOqbmggbOG7h2NoIHbhu4EgeMOhYyBzdeG6pXQgdGjDoG5oIGPDtG5nIGdp4buvYSBoYWkgbmjDs20uIE7hur91IFwoIEQgPiAwIFwpLCBuaMOzbSAxIGPDsyB04bu3IGzhu4cgdGjDoG5oIGPDtG5nIGNhbyBoxqFuIG5ow7NtIDI7IG7hur91IFwoIEQgPCAwIFwpLCBuZ8aw4bujYyBs4bqhaTsgY8OybiBu4bq/dSBcKCBEID0gMCBcKSwga2jDtG5nIGPDsyBz4buxIGtow6FjIGJp4buHdCByw7UgcsOgbmcuIFNhaSBz4buRIGNodeG6qW4gY+G7p2EgXCggXGhhdHtEfSBcKSDEkcaw4bujYyB0w61uaCBi4bqxbmc6DQoNClxbDQpTRShcaGF0e0R9KSA9IFxzcXJ0e1xmcmFje1xoYXR7cH1fMSgxLVxoYXR7cH1fMSl9e25fMX0gKyBcZnJhY3tcaGF0e3B9XzIoMS1caGF0e3B9XzIpfXtuXzJ9fQ0KXF0NCg0KS2hv4bqjbmcgdGluIGPhuq15IDk1JToNCg0KXFsNClxoYXR7RH0gXHBtIHpfe1xhbHBoYS8yfSBcdGltZXMgU0UoXGhhdHtEfSkNClxdDQoNCiMjIyAqKjIuMi4yLiBU4bu3IHPhu5Egbmd1eSBjxqEgKFJlbGF0aXZlIFJpc2sgLSBSUikqKg0KDQpU4bu3IHPhu5Egbmd1eSBjxqEgxJFvIGzGsOG7nW5nIG3hu6ljIMSR4buZIHLhu6dpIHJvIGdp4buvYSBoYWkgbmjDs206IFwoIFJSID0gXGZyYWN7cF8xfXtwXzJ9IFwpLiBO4bq/dSBcKCBSUiA+IDEgXCksIG5ow7NtIDEgY8OzIG5ndXkgY8ahIGNhbyBoxqFuIG5ow7NtIDI7IG7hur91IFwoIFJSIDwgMSBcKSwgbmjDs20gMSBjw7Mgbmd1eSBjxqEgdGjhuqVwIGjGoW4uIERvIHBow6JuIHBo4buRaSBcKCBSUiBcKSBraMO0bmcgxJHhu5FpIHjhu6luZywgdGEgdGjGsOG7nW5nIGTDuW5nIFwoIFxsb2coUlIpIFwpIHbhu5tpIHNhaSBz4buRIGNodeG6qW46DQoNClxbDQpTRShcbG9nKFxoYXR7UlJ9KSkgPSBcc3FydHsgXGZyYWN7MS1caGF0e3B9XzF9e25fezExfX0gKyBcZnJhY3sxLVxoYXR7cH1fMn17bl97MjF9fSB9DQpcXQ0KDQpLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyBcKCBcbG9nKFJSKSBcKToNCg0KXFsNClxsb2coXGhhdHtSUn0pIFxwbSB6X3tcYWxwaGEvMn0gXHRpbWVzIFNFKFxsb2coXGhhdHtSUn0pKQ0KXF0NCg0KIyMjICoqMi4yLjMuIFThu7cgc+G7kSBjaMOqbmggKE9kZHMgUmF0aW8gLSBPUikqKg0KDQpU4bu3IHPhu5EgY2jDqm5oIMSRbyBsxrDhu51uZyBt4bupYyDEkeG7mSB44bqjeSByYSBj4bunYSBz4buxIGtp4buHbiBzbyB24bubaSBraMO0bmcgeOG6o3kgcmEsIMSRxrDhu6NjIHTDrW5oIGzDoDoNCg0KXFsNCk9SID0gXGZyYWN7bl97MTF9bl97MjJ9fXtuX3sxMn1uX3syMX19DQpcXQ0KDQotIE7hur91IFwoIE9SID4gMSBcKSwgb2RkcyDhu58gbmjDs20gMSBjYW8gaMahbiBuaMOzbSAyOyANCg0KLSBO4bq/dSBcKCBPUiA8IDEgXCksIG9kZHMg4bufIG5ow7NtIDEgdGjhuqVwIGjGoW47IFwoIE9SID0gMSBcKSBjaG8gdGjhuqV5IGhhaSBiaeG6v24gxJHhu5ljIGzhuq1wLg0KDQoqKsOdIG5naMSpYSBj4bunYSBPZGRzIFJhdGlvIChPUik6KioNCg0KT2RkcyBSYXRpbyAoT1IpIGzDoCB0aMaw4bubYyDEkW8gcXVhbiB0cuG7jW5nIHRyb25nIGPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyB2w6AgbmdoacOqbiBj4bupdSBi4buHbmggY2jhu6luZy4gT1IgY8OzIGPDoWMgxJHhurdjIMSRaeG7g20gxJHDoW5nIGNow7ogw706DQoNCi0gKipUw61uaCDEkeG7kWkgeOG7qW5nKio6IE9SIGtow7RuZyDEkeG7lWkga2hpIGhvw6FuIMSR4buVaSBuaMOzbSBob+G6t2Mga+G6v3QgcXXhuqMgKE9SIG3hu5tpID0gMSAvIE9SIGPFqSkuDQoNCi0gKipLaMO0bmcgYuG7iyDhuqNuaCBoxrDhu59uZyBi4bufaSB04buVbmcgYmnDqm4qKjogT1Ig4buVbiDEkeG7i25oIGtoaSBuaMOibiBjw6FjIGjDoG5nL2Phu5l0IHbhu5tpIG3hu5l0IGjhurFuZyBz4buRLg0KDQotICoqWOG6pXAgeOG7iSBSUiBraGkgc+G7sSBraeG7h24gaGnhur9tKio6IEtoaSB4w6FjIHN14bqldCBuaOG7jywgT1Ig4omIIFJSLg0KDQotICoqTMOgIG7hu4FuIHThuqNuZyBjaG8gaOG7k2kgcXV5IGxvZ2lzdGljKio6IFbDrCBtw7QgaMOsbmggbsOgeSBk4buxYSB0csOqbiBsb2dpdCAobG9nLW9kZHMpLg0KDQpDw7RuZyB0aOG7qWMgc2FpIHPhu5EgY2h14bqpbiB2w6Aga2hv4bqjbmcgdGluIGPhuq15IDk1JSBj4bunYSBcKCBcbG9nKFx3aWRlaGF0e09SfSkgXCk6DQoNClxbDQpTRShcbG9nKFx3aWRlaGF0e09SfSkpID0gXHNxcnR7IFxmcmFjezF9e25fezExfX0gKyBcZnJhY3sxfXtuX3sxMn19ICsgXGZyYWN7MX17bl97MjF9fSArIFxmcmFjezF9e25fezIyfX0gfQ0KXF0NCg0KXFsNClxsb2coXHdpZGVoYXR7T1J9KSBccG0gel97XGFscGhhLzJ9IFx0aW1lcyBTRShcbG9nKFx3aWRlaGF0e09SfSkpDQpcXQ0KDQoNCioqU28gc8OhbmggY8OhYyB0aMaw4bubYyDEkW86KioNCg0KLSAqKkhp4buHdSBz4buRIHThu7cgbOG7hyAoRCkqKjogROG7hSBoaeG7g3UsIMSRbyBsxrDhu51uZyBraMOhYyBiaeG7h3QgdHV54buHdCDEkeG7kWkuDQoNCi0gKipU4bu3IHPhu5Egbmd1eSBjxqEgKFJSKSoqOiBQaMO5IGjhu6NwIHRyb25nIG5naGnDqm4gY+G7qXUgdGh14bqnbiB04bqtcCBob+G6t2MgdGjhu60gbmdoaeG7h20gbmfhuqt1IG5oacOqbi4NCg0KLSAqKlThu7cgc+G7kSBjaMOqbmggKE9SKSoqOiBQaOG7lSBiaeG6v24gdHJvbmcgbmdoacOqbiBj4bupdSBi4buHbmggY2jhu6luZyB2w6AgbcO0IGjDrG5oIEdMTSwgbmjGsG5nIGPhuqduIGRp4buFbiBnaeG6o2kgdGjhuq1uIHRy4buNbmcga2hpIHPhu7Ega2nhu4duIHBo4buVIGJp4bq/bi4NCg0KIyMgKioyLjMuIEtp4buDbSDEkeG7i25oIENoaS1iw6xuaCBwaMawxqFuZyBQZWFyc29uKioNCg0KS2nhu4NtIMSR4buLbmggQ2hpLWLDrG5oIHBoxrDGoW5nIFBlYXJzb24gdGjGsOG7nW5nIMSRxrDhu6NjIGTDuW5nIMSR4buDIMSRw6FuaCBnacOhIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgaGFpIGJp4bq/biDEkeG7i25oIHTDrW5oLiBUaOG7kW5nIGvDqiBraeG7g20gxJHhu4tuaCDEkcaw4bujYyB0w61uaCBi4bqxbmc6DQoNClxbDQpcY2hpXjIgPSBcc3VtX3tpPTF9XkkgXHN1bV97aj0xfV5KIFxmcmFjeyhuX3tpan0gLSBcaGF0e219X3tpan0pXjJ9e1xoYXR7bX1fe2lqfX0NClxdDQoNClRyb25nIMSRw7MsIFwobl97aWp9XCkgbMOgIHThuqduIHPhu5EgcXVhbiBzw6F0IHbDoCBcKFxoYXR7bX1fe2lqfVwpIGzDoCB04bqnbiBz4buRIGvhu7MgduG7jW5nIG7hur91IGhhaSBiaeG6v24gxJHhu5ljIGzhuq1wLg0KDQotICoqR2nhuqMgdGh1eeG6v3QgSOKCgCoqOiBIYWkgYmnhur9uIMSR4buZYyBs4bqtcC4NCg0KLSAqKkLhuq1jIHThu7EgZG8qKjogXChkZiA9IChJIC0gMSkoSiAtIDEpXCkNCg0KLSAqKlF1eSB04bqvYyoqOiBCw6FjIGLhu48gSOKCgCBu4bq/dToNCg0KICAtIFwoXGNoaV4yID4gXGNoaV4yX3tcYWxwaGEsIGRmfVwpDQogIA0KICAtIFwocCA8IFxhbHBoYVwpDQoNCioqxJBp4buBdSBraeG7h24gw6FwIGThu6VuZyoqOg0KDQotIE3hu41pIHThuqduIHPhu5Ega+G7syB24buNbmcg4omlIDENCg0KLSBLaMO0bmcgcXXDoSAyMCUgc+G7kSDDtCBjw7MgXChcaGF0e219X3tpan0gPCA1XCkNCg0KTuG6v3UgxJFp4buBdSBraeG7h24ga2jDtG5nIHRo4buPYSBtw6NuICh2w60gZOG7pSBi4bqjbmcgdGjGsGEgaG/hurdjIGPhu6EgbeG6q3Ugbmjhu48pLCBuw6puIGTDuW5nIGtp4buDbSDEkeG7i25oIGNow61uaCB4w6FjIEZpc2hlci4NCg0KIyMgKioyLjQuIE3DtCBow6xuaCBo4buTaSBxdXkqKg0KDQojIyMgKioyLjQuMS4gTcO0IGjDrG5oIExvZ2lzdGljIChMb2dpc3RpYyBSZWdyZXNzaW9uIE1vZGVsKSoqDQoNCk3DtCBow6xuaCBo4buTaSBxdXkgbG9naXN0aWMgxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4MgZOG7sSDEkW/DoW4geMOhYyBzdeG6pXQgeOG6o3kgcmEgY+G7p2EgbeG7mXQgYmnhur9uIG5o4buLIHBow6JuIChjw7Mva2jDtG5nLCAxLzAsIMSR4buXL3RyxrDhu6N0Li4uKS4NCg0KVGhheSB2w6wgbcO0IGjDrG5oIGjDs2EgdHLhu7FjIHRp4bq/cCBr4bq/dCBxdeG6oywgbcO0IGjDrG5oIGxvZ2lzdGljIG3DtCBow6xuaCBow7NhIHjDoWMgc3XhuqV0IHRow7RuZyBxdWEgaMOgbSBsb2dpc3RpYyAoc2lnbW9pZCkg4oCTIGdpw7pwIMSR4bqjbSBi4bqjbyBnacOhIHRy4buLIGThu7EgxJFvw6FuIGx1w7RuIG7hurFtIHRyb25nIGtob+G6o25nICgwLCAxKS4NCg0KLSAqKlThu7cgc+G7kSBjaMOqbmggKE9kZHMpKio6IA0KXFsNClx0ZXh0e09kZHN9ID0gXGZyYWN7cH17MSAtIHB9DQpcXQ0KDQotICoqSMOgbSBsb2dpdCAobG9nLW9kZHMpKio6DQpcWw0KXGxvZ1xsZWZ0KFxmcmFje3B9ezEgLSBwfVxyaWdodCkgPSBcYmV0YV8wICsgXGJldGFfMSBYXzEgKyBcY2RvdHMgKyBcYmV0YV9wIFhfcA0KXF0NCg0KLSAqKkjDoG0gZOG7sSDEkW/DoW4gKHNpZ21vaWQpKio6DQpcWw0KcCA9IFxmcmFjezF9ezEgKyBlXnstKFxiZXRhXzAgKyBcYmV0YV8xIFhfMSArIFxjZG90cyArIFxiZXRhX3AgWF9wKX19DQpcXQ0KDQotICoqT2RkcyBSYXRpbyAoT1IpKio6DQpcWw0KT1IgPSBlXntcYmV0YX0NClxdDQoNCioqw50gbmdoxKlhOioqDQoNCi0gT1IgPiAxOiBvZGRzIHTEg25nIOKGkiB4w6FjIHN14bqldCB0xINuZy4NCg0KLSBPUiA8IDE6IG9kZHMgZ2nhuqNtIOKGkiB4w6FjIHN14bqldCBnaeG6o20uDQoNCi0gT1IgPSAxOiBraMO0bmcg4bqjbmggaMaw4bufbmcuDQoNCioqxq91IMSRaeG7g206KioNCg0KLSBEaeG7hW4gZ2nhuqNpIHRy4buxYyBxdWFuIGLhurFuZyB4w6FjIHN14bqldCBob+G6t2Mgb2RkcyByYXRpby4NCg0KLSBUw61uaCB0b8OhbiBoaeG7h3UgcXXhuqMsIGtow7RuZyB5w6p1IGPhuqd1IHTDoGkgbmd1ecOqbiBjYW8uDQoNCi0gTMOgIG7hu4FuIHThuqNuZyBj4bunYSBuaGnhu4F1IG3DtCBow6xuaCB0aOG7kW5nIGvDqiBoaeG7h24gxJHhuqFpLg0KDQojIyMgKioyLjQuMi4gTcO0IGjDrG5oIFByb2JpdCoqDQoNCk3DtCBow6xuaCBQcm9iaXQgxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4MgcGjDom4gdMOtY2ggdsOgIGThu7EgxJFvw6FuIHjDoWMgc3XhuqV0IHjhuqN5IHJhIGPhu6dhIG3hu5l0IGJp4bq/biBwaOG6o24gaOG7k2kgbmjhu4sgcGjDom4gKDAvMSksIHTGsMahbmcgdOG7sSBuaMawIG3DtCBow6xuaCBMb2dpdC4gVHV5IG5oacOqbiwgdGhheSB2w6wgc+G7rSBk4bulbmcgaMOgbSBsb2dpc3RpYywgUHJvYml0IGTDuW5nIGjDoG0gcGjDom4gcGjhu5FpIHTDrWNoIGzFqXkgY2h14bqpbiAoQ0RGKSDEkeG7gyDDoW5oIHjhuqEgxJHhuqd1IHbDoG8gdGjDoG5oIHjDoWMgc3XhuqV0Lg0KDQpH4buNaSBcKCBZIFwpIGzDoCBiaeG6v24gbmjhu4sgcGjDom4gKG5o4bqtbiBnacOhIHRy4buLIDAgaG/hurdjIDEpLCBtw7QgaMOsbmggUHJvYml0IGdp4bqjIMSR4buLbmggcuG6sW5nOg0KDQpcWw0KUChZID0gMSBcbWlkIFgpID0gXFBoaShYXGJldGEpDQpcXQ0KDQpUcm9uZyDEkcOzOg0KDQotIFwoIFxQaGkoXGNkb3QpIFwpIGzDoCBow6BtIHBow6JuIHBo4buRaSB0w61jaCBsxal5IGNodeG6qW4gKENERikgY+G7p2EgcGjDom4gcGjhu5FpIGNodeG6qW4gY2h14bqpbiBow7NhLg0KDQotIFwoIFhcYmV0YSA9IFxiZXRhXzAgKyBcYmV0YV8xIFhfMSArIFxjZG90cyArIFxiZXRhX3AgWF9wIFwpDQoNCkjDoG0gbGnDqm4ga+G6v3QgdHJvbmcgbcO0IGjDrG5oIFByb2JpdCBsw6Agbmdo4buLY2ggxJHhuqNvIGPhu6dhIGjDoG0gcGjDom4gcGjhu5FpIGNodeG6qW46DQoNClxbDQpcUGhpXnstMX0oUChZPTEpKSA9IFhcYmV0YQ0KXF0NCg0KxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgbeG7kWkgcXVhbiBo4buHIHR1eeG6v24gdMOtbmggZ2nhu69hIGPDoWMgYmnhur9uIMSR4buZYyBs4bqtcCB2w6AgKip6LXNjb3JlKiogKGdpw6EgdHLhu4sgY2h14bqpbiBow7NhIHRoZW8gcGjDom4gcGjhu5FpIGNodeG6qW4pLg0KDQoqKkRp4buFbiBnaeG6o2kgaOG7hyBz4buRKioNCg0KLSBDw6FjIGjhu4cgc+G7kSBcKCBcYmV0YSBcKSBraMO0bmcgdGjhu4MgZGnhu4VuIGdp4bqjaSB0cuG7sWMgdGnhur9wIG5oxrAgdHJvbmcgbcO0IGjDrG5oIExvZ2l0Lg0KDQotIFR1eSBuaGnDqm4sIGThuqV1IGPhu6dhIFwoIFxiZXRhIFwpIHbhuqtuIGNobyBiaeG6v3QgY2hp4buBdSBoxrDhu5tuZyDhuqNuaCBoxrDhu59uZyBj4bunYSBiaeG6v24gxJHhu5ljIGzhuq1wIMSR4bq/biB4w6FjIHN14bqldCB44bqjeSByYSBiaeG6v24gcGjhu6UgdGh14buZYy4NCg0KLSBDw7MgdGjhu4MgdMOtbmggKipoaeG7h3Ug4bupbmcgY+G6rW4gYmnDqm4qKiAobWFyZ2luYWwgZWZmZWN0cykgxJHhu4MgZ2nhuqNpIHRow61jaCDDvSBuZ2jEqWEgdGjhu7FjIHThur8uDQoNCioqU28gc8OhbmggduG7m2kgTG9naXQqKg0KDQp8IMSQ4bq3YyDEkWnhu4NtICAgICAgICAgfCBMb2dpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQcm9iaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IEjDoG0gbGnDqm4ga+G6v3QgICAgIHwgTG9naXQ6IFwoIFxsb2coXGZyYWN7cH17MS1wfSkgXCkgfCBDaHXhuqluIGjDs2E6IFwoIFxQaGleey0xfShwKSBcKSAgICAgfA0KfCBQaMOibiBwaOG7kWkgbmfhuqdtICAgfCBMb2dpc3RpYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDaHXhuqluIGNodeG6qW4gaMOzYSAoTm9ybWFsKSAgICAgICAgICB8DQp8IERp4buFbiBnaeG6o2kgaOG7hyBz4buRICB8IE9SIChk4buFIGhp4buDdSBoxqFuKSAgICAgICAgICAgICAgICAgIHwgUGjhu6ljIHThuqFwIGjGoW4sIGPhuqduIGhp4buHdSDhu6luZyBj4bqtbiBiacOqbiB8DQp8IOG7qG5nIGThu6VuZyAgICAgICAgIHwgUGjhu5UgYmnhur9uICAgICAgICAgICAgICAgICAgICAgICAgICB8IETDuW5nIGtoaSBk4buvIGxp4buHdSBjw7MgdMOtbmggY2h14bqpbiBow7NhIHwNCg0KKirGr3UgxJFp4buDbSoqICAgDQoNCi0gUGjDuSBo4bujcCBraGkgZ2nhuqMgxJHhu4tuaCBy4bqxbmcgc2FpIHPhu5EgY8OzIHBow6JuIHBo4buRaSBjaHXhuqluLg0KDQotIEvhur90IHF14bqjIOG7lW4gxJHhu4tuaCB0cm9uZyBuaGnhu4F1IHRyxrDhu51uZyBo4bujcCBjw7MgcGjDom4gcGjhu5FpIHjDoWMgc3XhuqV0IGNodeG6qW4gbmfhuqdtLg0KDQojIyMgKioyLjQuMy4gTcO0IGjDrG5oIENsb2dsb2cqKg0KDQpNw7QgaMOsbmggQ2xvZ2xvZyBsw6AgbeG7mXQgZOG6oW5nIGPhu6dhIGjhu5NpIHF1eSBuaOG7iyBwaMOibiwgdHJvbmcgxJHDsyBow6BtIGxpw6puIGvhur90IGzDoDoNCg0KJCQNClxsb2coLVxsb2coMSAtIHApKSA9IFxldGEgPSBcYmV0YV8wICsgXGJldGFfMSB4XzEgKyBcY2RvdHMgKyBcYmV0YV9rIHhfaw0KJCQNCg0KVOG7qyDEkcOzLCB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiBsw6A6DQoNCiQkDQpwID0gMSAtIFxleHAoLVxleHAoXGV0YSkpDQokJA0KDQrEkOG7gyDGsOG7m2MgbMaw4bujbmcgY8OhYyB0aGFtIHPhu5EgXCggXGJldGEgXCksIG3DtCBow6xuaCBz4butIGThu6VuZyAqKnBoxrDGoW5nIHBow6FwIMaw4bubYyBsxrDhu6NuZyBo4bujcCBsw70gdOG7kWkgxJFhIChNTEUpKiosIHRow7RuZyBxdWEgdmnhu4djIGPhu7FjIMSR4bqhaSBow7NhIGjDoG0gbG9nLWxpa2VsaWhvb2Q6DQoNCiQkDQpcZWxsKFxiZXRhKSA9IFxzdW1fe2k9MX1ee259IFxsZWZ0WyB5X2kgXGxvZygxIC0gXGV4cCgtXGV4cChcZXRhX2kpKSkgKyAoMSAtIHlfaSkoIC1cZXhwKFxldGFfaSkpIFxyaWdodF0NCiQkDQoNClBoxrDGoW5nIHBow6FwIG7DoHkgxJHhurdjIGJp4buHdCBwaMO5IGjhu6NwIGtoaSB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiBraMO0bmcgxJHhu5FpIHjhu6luZyBob+G6t2Mgc+G7sSBraeG7h24gaGnhur9tLiBIw6BtIGxpw6puIGvhur90IGNsb2dsb2cgZ2nDunAgbcO0IGjDrG5oIHBo4bqjbiDDoW5oIHThu5F0IGjGoW4gc+G7sSB0aGF5IMSR4buVaSBuaGFuaCBjaMOzbmcgduG7gSB4w6FjIHN14bqldCBn4bqnbiBuZ8aw4buhbmcgMS4NCg0KIyMgKioyLjUuIEtp4buDbSDEkeG7i25oIHPhu7EgcGjDuSBo4bujcCBj4bunYSBtw7QgaMOsbmgqKg0KDQrEkOG7gyDEkcOhbmggZ2nDoSBt4bupYyDEkeG7mSBwaMO5IGjhu6NwIGPhu6dhIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gKGxvZ2l0LCBwcm9iaXQsIGNsb2dsb2cpLCBt4buZdCBz4buRIGNo4buJIHPhu5EgxJHDoW5oIGdpw6EgcGjhu5UgYmnhur9uIMSRxrDhu6NjIHPhu60gZOG7pW5nOg0KDQojIyMgKioyLjUuMS4gQ2jhu4kgc+G7kSBBSUMgKEFrYWlrZSBJbmZvcm1hdGlvbiBDcml0ZXJpb24pKioNCg0KLSAqKkPDtG5nIHRo4bupYyoqOg0KDQogICQkDQogIEFJQyA9IC0yIFxjZG90IFxsb2coTCkgKyAyaw0KICAkJA0KICANCiAgVHJvbmcgxJHDszoNCiAgDQogIC0gXCggTCBcKSBsw6AgZ2nDoSB0cuG7iyBow6BtIGjhu6NwIGzDvSB04buRaSDEkWEgKGxpa2VsaWhvb2QpLA0KICANCiAgLSBcKCBrIFwpIGzDoCBz4buRIGzGsOG7o25nIHRoYW0gc+G7kSDGsOG7m2MgbMaw4bujbmcgdHJvbmcgbcO0IGjDrG5oLg0KDQotICoqw50gbmdoxKlhKio6IEFJQyBsw6AgdGjGsOG7m2MgxJFvIGPDom4gYuG6sW5nIGdp4buvYSDEkeG7mSBwaMO5IGjhu6NwIGPhu6dhIG3DtCBow6xuaCB2w6AgxJHhu5kgcGjhu6ljIHThuqFwIGPhu6dhIG7Dsy4gTcO0IGjDrG5oIGPDsyBBSUMgKip0aOG6pXAgaMahbioqIMSRxrDhu6NjIHhlbSBsw6AgKipwaMO5IGjhu6NwIGjGoW4qKiwgdHLDoW5oIMSRxrDhu6NjIGhp4buHbiB0xrDhu6NuZyBvdmVyZml0dGluZy4NCg0KIyMjICoqMi41LjIuIENo4buJIHPhu5EgQklDIChCYXllc2lhbiBJbmZvcm1hdGlvbiBDcml0ZXJpb24pKioNCg0KQklDIGzDoCBt4buZdCB0acOqdSBjaMOtIMSRw6FuaCBnacOhIG3hu6ljIMSR4buZIHBow7kgaOG7o3AgY+G7p2EgbcO0IGjDrG5oLCDEkeG6t2MgYmnhu4d0IGjhu691IMOtY2gga2hpIHNvIHPDoW5oIG5oaeG7gXUgbcO0IGjDrG5oIGtow6FjIG5oYXUuIEJJQyDEkcaw4bujYyB0w61uaCB0aGVvIGPDtG5nIHRo4bupYzoNCg0KJCQNClx0ZXh0e0JJQ30gPSAtMiBcY2RvdCBcbG9nKEwpICsgayBcY2RvdCBcbG9nKG4pDQokJA0KDQpUcm9uZyDEkcOzOg0KDQotIFwoIEwgXCk6IExvZy1saWtlbGlob29kIGPhu6dhIG3DtCBow6xuaA0KDQotIFwoIGsgXCk6IFPhu5EgdGhhbSBz4buRIMaw4bubYyBsxrDhu6NuZyB0cm9uZyBtw7QgaMOsbmgNCg0KLSBcKCBuIFwpOiBLw61jaCB0aMaw4bubYyBt4bqrdQ0KDQoqKsOdIG5naMSpYToqKg0KDQotIEJJQyBwaOG6oXQgbeG6oW5oIGPDoWMgbcO0IGjDrG5oIGPDsyBxdcOhIG5oaeG7gXUgdGhhbSBz4buRICjEkeG7gyB0csOhbmggb3ZlcmZpdHRpbmcpLg0KDQotIE3DtCBow6xuaCBjw7MgKipCSUMgbmjhu48gaMahbioqIMSRxrDhu6NjIHhlbSBsw6AgKipwaMO5IGjhu6NwIGjGoW4qKi4NCg0KIyMjICoqMi41LjMuIExvZy1MaWtlbGlob29kIChHacOhIHRy4buLIGxvZyBj4bunYSBow6BtIGjhu6NwIGzDvSkqKg0KDQotICoqQ8O0bmcgdGjhu6ljKio6DQogICQkDQogIFxsb2cgTCA9IFxzdW1fe2k9MX1ee259IFxsb2cgZih5X2kgXG1pZCB4X2k7IFxiZXRhKQ0KICAkJA0KICAtIFwoIFxsb2cgTCBcKSBjw6BuZyBs4bubbiAow610IMOibSBoxqFuKSB0aMOsIG3DtCBow6xuaCBjw6BuZyBwaMO5IGjhu6NwIHbhu5tpIGThu68gbGnhu4d1IHF1YW4gc8OhdC4NCg0KLSAqKsOdIG5naMSpYSoqOiBTbyBzw6FuaCBjw6FjIG3DtCBow6xuaCBk4buxYSB0csOqbiBsb2ctbGlrZWxpaG9vZCBnacO6cCB4w6FjIMSR4buLbmggbcO0IGjDrG5oIG7DoG8gbcO0IHThuqMgZOG7ryBsaeG7h3UgdOG7kXQgaMahbi4gVHV5IG5oacOqbiwgdsOsIGdpw6EgdHLhu4sgbsOgeSB0aMaw4budbmcgw6JtIHbDoCBwaOG7pSB0aHXhu5ljIHbDoG8gc+G7kSBsxrDhu6NuZyB0aGFtIHPhu5EsIGPhuqduIGvhur90IGjhu6NwIHbhu5tpIEFJQyDEkeG7gyDEkcawYSByYSDEkcOhbmggZ2nDoSB0b8OgbiBkaeG7h24uDQoNCiMjIyAqKjIuNS40LiBDaOG7iSBz4buRIE1jRmFkZGVuJ3MgXCggUl4yIFwpIChQc2V1ZG8gUi1zcXVhcmVkKSoqDQoNClRyb25nIG3DtCBow6xuaCBo4buTaSBxdXkgbG9naXN0aWMgaG/hurdjIGPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibiBwaGkgdHV54bq/biBraMOhYyBuaMawIFByb2JpdCwgQ2xvZ2xvZywgdmnhu4djIMSRw6FuaCBnacOhIG3hu6ljIMSR4buZIHBow7kgaOG7o3AgY+G7p2EgbcO0IGjDrG5oIGtow7RuZyB0aOG7gyBz4butIGThu6VuZyBjaOG7iSBz4buRIFwoIFJeMiBcKSB0cnV54buBbiB0aOG7kW5nIG5oxrAgdHJvbmcgaOG7k2kgcXV5IHR1eeG6v24gdMOtbmguIFRoYXkgdsOgbyDEkcOzLCB0YSBz4butIGThu6VuZyAqKlBzZXVkbyBcKCBSXjIgXCkqKiwgduG7m2kgcGhpw6puIGLhuqNuIHBo4buVIGJp4bq/biBuaOG6pXQgbMOgICoqTWNGYWRkZW7igJlzIFwoIFJeMiBcKSoqLg0KDQpDaOG7iSBz4buRIG7DoHkgxJHGsOG7o2MgdMOtbmggdGhlbyBjw7RuZyB0aOG7qWM6DQoNClxbDQpSXjJfe1x0ZXh0e01jRmFkZGVufX0gPSAxIC0gXGZyYWN7XGxvZyBMX3tcdGV4dHttb2RlbH19fXtcbG9nIExfe1x0ZXh0e251bGx9fX0NClxdDQoNClRyb25nIMSRw7M6DQoNCi0gXCggXGxvZyBMX3tcdGV4dHttb2RlbH19IFwpIGzDoCBsb2ctbGlrZWxpaG9vZCBj4bunYSBtw7QgaMOsbmggxJHhuqd5IMSR4bunIChjw7MgY8OhYyBiaeG6v24gZ2nhuqNpIHRow61jaCksDQogIA0KLSBcKCBcbG9nIExfe1x0ZXh0e251bGx9fSBcKSBsw6AgbG9nLWxpa2VsaWhvb2QgY+G7p2EgbcO0IGjDrG5oIHLhu5duZyAoY2jhu4kgY8OzIGjhurFuZyBz4buRKS4NCg0KKirDnSBuZ2jEqWE6KioNCg0KLSBcKCBSXjJfe1x0ZXh0e01jRmFkZGVufX0gXCkgY8OgbmcgY2FvIHRow6wgbcO0IGjDrG5oIGPDoG5nIHBow7kgaOG7o3AgduG7m2kgZOG7ryBsaeG7h3UuDQoNCi0gR2nDoSB0cuG7iyB0aMaw4budbmcgbuG6sW0gdHJvbmcga2hv4bqjbmcgdOG7qyAwIMSR4bq/biAxLCBuaMawbmcgdHJvbmcgdGjhu7FjIHThur8sIGPDoWMgZ2nDoSB0cuG7iyB04burICoqMC4yIMSR4bq/biAwLjQqKiDEkcOjIMSRxrDhu6NjIGNvaSBsw6AgcGjDuSBo4bujcCB04buRdCDEkeG7kWkgduG7m2kgZOG7ryBsaeG7h3Ugbmjhu4sgcGjDom4uDQogIA0KIyMgKioyLjYuIEThu7EgYsOhbyoqDQoNClNhdSBraGkgeMOieSBk4buxbmcgbcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibiAobmjGsCBsb2dpdCwgcHJvYml0IGhv4bq3YyBjbG9nbG9nKSwgdGEgY8OzIHRo4buDIHPhu60gZOG7pW5nIGjDoG0gYHByZWRpY3QoKWAgxJHhu4MgZOG7sSBiw6FvIGvhur90IHF14bqjIGNobyBjw6FjIHF1YW4gc8OhdCBt4bubaS4gSMOgbSBuw6B5IGPDsyBoYWkgbOG7sWEgY2jhu41uIHBo4buVIGJp4bq/biB0aMO0bmcgcXVhIMSR4buRaSBz4buRIGB0eXBlYCwgYmFvIGfhu5NtOg0KDQojIyMgKioyLjYuMS4gdHlwZSA9ICJsaW5rIioqDQoNCi0gVHLhuqMgduG7gSBnacOhIHRy4buLIHR1eeG6v24gdMOtbmggXCggXGV0YSA9IFxiZXRhXzAgKyBcYmV0YV8xIFhfMSArIFxjZG90cyArIFxiZXRhX2sgWF9rIFwpLCBn4buNaSBsw6AgKipiaeG6v24gbGnDqm4ga+G6v3QqKi4NCg0KLSDEkMOieSBsw6AgxJHhuqd1IHJhIGPhu6dhIG3DtCBow6xuaCB0csaw4bubYyBraGkgY2h1eeG7g24gdGjDoG5oIHjDoWMgc3XhuqV0Lg0KDQotIFRow61jaCBo4bujcCBraGkgbXXhu5FuIHBow6JuIHTDrWNoIG7hu5lpIHThuqFpIG3DtCBow6xuaCBob+G6t2Mga2nhu4NtIHRyYSBt4bupYyDEkeG7mSDhuqNuaCBoxrDhu59uZyBj4bunYSBjw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAuDQoNCiMjIyAqKjIuNi4yLiB0eXBlID0gInJlc3BvbnNlIioqDQoNCi0gVHLhuqMgduG7gSAqKnjDoWMgc3XhuqV0KiogeOG6o3kgcmEgY+G7p2Egc+G7sSBraeG7h24gXCggWSA9IDEgXCksIMSRxrDhu6NjIHTDrW5oIHRow7RuZyBxdWEgaMOgbSBsacOqbiBr4bq/dCBuZ2jhu4tjaCDEkeG6o286DQoNCiAgLSBW4bubaSBsb2dpdDogXCggXGhhdHtwfSA9IFxmcmFjezF9ezEgKyBlXnstXGV0YX19IFwpDQogIA0KICAtIFbhu5tpIHByb2JpdDogXCggXGhhdHtwfSA9IFxQaGkoXGV0YSkgXCkNCiAgDQogIC0gVuG7m2kgY2xvZ2xvZzogXCggXGhhdHtwfSA9IDEgLSBcZXhwKC1cZXhwKFxldGEpKSBcKQ0KICANCi0gxJDDonkgbMOgIGPDoWNoIGThu7EgYsOhbyBwaMO5IGjhu6NwIGtoaSBj4bqnbiDEkcawYSByYSB4w6FjIHN14bqldCB0cuG7sWMgdGnhur9wIGNobyB04burbmcgdHLGsOG7nW5nIGjhu6NwIG3hu5tpLg0KDQogIA0KIyAqKkNIxq/GoE5HIDM6IEThu64gTEnhu4ZVIE5HSEnDik4gQ+G7qFUqKg0KDQojIyAqKjMuMS4gR2nhu5tpIHRoaeG7h3UgYuG7mSBk4buvIGxp4buHdSoqDQoNCiAgQuG7mSBk4buvIGxp4buHdSBiYW8gZ+G7k20gNTAwIHF1YW4gc8OhdCB0csOqbiB04buVbmcgMTMgYmnhur9uIChn4buTbSA0IGJp4bq/biDEkeG7i25oIGzGsOG7o25nIHbDoCA5IGJp4bq/biDEkeG7i25oIHTDrW5oKSwgcGjhuqNuIMOhbmggdGjDtG5nIHRpbiB24buBIHRow7NpIHF1ZW4gdGnDqnUgdGjhu6UgY2FmZmVpbmUgY+G7p2EgbmfGsOG7nWkgZMO5bmcgdsOgIG3hu6ljIMSR4buZIOG6o25oIGjGsOG7n25nIMSR4bq/biBnaeG6pWMgbmfhu6cuIEPDoWMgYmnhur9uIHRyb25nIGThu68gbGnhu4d1IHRo4buDIGhp4buHbiBuaGnhu4F1IGtow61hIGPhuqFuaCBraMOhYyBuaGF1IG5oxrAgbG/huqFpIMSR4buTIHXhu5FuZyBjaOG7qWEgY2FmZmVpbmUgxJHGsOG7o2Mgc+G7rSBk4bulbmcgKGPDoCBwaMOqLCB0csOgLCBuxrDhu5tjIHTEg25nIGzhu7FjKSwgdGjhu51pIMSRaeG7g20gdGnDqnUgdGjhu6UgdHJvbmcgbmfDoHkgKHPDoW5nLCBjaGnhu4F1LCB04buRaSksIGdp4bubaSB0w61uaCwgY8WpbmcgbmjGsCBt4bupYyDEkeG7mSB04bqtcCB0cnVuZyB2w6AgY2jhuqV0IGzGsOG7o25nIGdp4bqlYyBuZ+G7pyBzYXUga2hpIHRpw6p1IHRo4bulLiBExrDhu5tpIMSRw6J5IGzDoCBi4bqjbmcgY2hpIHRp4bq/dCBtw7QgdOG6oyB04burbmcgYmnhur9uIHRyb25nIGThu68gbGnhu4d1LCB0xrDGoW5nIOG7qW5nIHbhu5tpIHThu6tuZyDEkeG7kWkgdMaw4bujbmcgxJHGsOG7o2Mga2jhuqNvIHPDoXQuDQoNCmBgYHtyfQ0KZCA8LSByZWFkLmNzdigiRDovUFRETERUL2NhZmZlaW5lX2ludGFrZV90cmFja2VyLmNzdiIpDQpkYXRhLnRhYmxlKGQpDQpgYGANCg0KDQpgYGB7cn0NCmRsZHQgPC0gYygic2xlZXBfaW1wYWN0ZWQiLCANCiAgICAgICAgICAiYmV2ZXJhZ2VfY29mZmVlIiwgImJldmVyYWdlX2VuZXJneV9kcmluayIsICJiZXZlcmFnZV90ZWEiLA0KICAgICAgICAgICJ0aW1lX29mX2RheV9hZnRlcm5vb24iLCAidGltZV9vZl9kYXlfZXZlbmluZyIsICJ0aW1lX29mX2RheV9tb3JuaW5nIiwNCiAgICAgICAgICAiZ2VuZGVyX2ZlbWFsZSIsICJnZW5kZXJfbWFsZSIpDQpkdCA8LSBkWywgZGxkdF0NCmBgYA0KDQpgYGB7cn0NCmR0IDwtIGRhdGEuZnJhbWUobGFwcGx5KGR0LCBhcy5mYWN0b3IpKQ0KYGBgDQoNCiMjICoqMy4yLiBNw7QgdOG6oyBjw6FjIGJp4bq/biB0cm9uZyBi4buZIGThu68gbGnhu4d1KioNCg0KLSAqKmNhZmZlaW5lX21nKio6IEzGsOG7o25nIGNhZmZlaW5lIHRpw6p1IHRo4bulIHRyb25nIG5nw6B5LCDEkcOjIGNodeG6qW4gaMOzYSB24buBIHRoYW5nIHThu6sgMCDEkeG6v24gMS4gIA0KDQotICoqYWdlKio6IMSQ4buZIHR14buVaSBj4bunYSBuZ8aw4budaSB0aGFtIGdpYSBraOG6o28gc8OhdCwgY2h14bqpbiBow7NhIHThu6sgbmjhu48gbmjhuqV0IMSR4bq/biBs4bubbiBuaOG6pXQuICANCg0KLSAqKmZvY3VzX2xldmVsKio6IE3hu6ljIMSR4buZIHThuq1wIHRydW5nIGPhu6dhIG5nxrDhu51pIHRoYW0gZ2lhIHNhdSBraGkgdGnDqnUgdGjhu6UgY2FmZmVpbmUsIHRoZW8gdGhhbmcgxJFp4buDbSB04burIDAgxJHhur9uIDEgKDEgbMOgIHThuq1wIHRydW5nIHThu5FpIMSRYSkuICANCg0KLSAqKnNsZWVwX3F1YWxpdHkqKjogTeG7qWMgxJHhu5kgY2jhuqV0IGzGsOG7o25nIGdp4bqlYyBuZ+G7pyBj4bunYSBuZ8aw4budaSB0aGFtIGdpYSwgdOG7sSDEkcOhbmggZ2nDoSB0aGVvIHRoYW5nIMSRaeG7g20gdOG7qyAwIMSR4bq/biAxICgxIGzDoCBuZ+G7pyB04buRdCBuaOG6pXQpLiAgDQoNCi0gKipzbGVlcF9pbXBhY3RlZCoqOiBHaeG6pWMgbmfhu6cgY8OzIGLhu4sg4bqjbmggaMaw4bufbmcgYuG7n2kgY2FmZmVpbmUgaGF5IGtow7RuZyAoMCA9IGtow7RuZyBi4buLIOG6o25oIGjGsOG7n25nLCAxID0gYuG7iyDhuqNuaCBoxrDhu59uZykuICANCg0KLSAqKmJldmVyYWdlX2NvZmZlZSoqOiBOZ8aw4budaSB0aGFtIGdpYSBjw7MgdGnDqnUgdGjhu6UgY8OgIHBow6ogaGF5IGtow7RuZyAoVHJ1ZSA9IGPDsywgRmFsc2UgPSBraMO0bmcpLiAgDQoNCi0gKipiZXZlcmFnZV9lbmVyZ3lfZHJpbmsqKjogTmfGsOG7nWkgdGhhbSBnaWEgY8OzIHRpw6p1IHRo4bulIG7GsOG7m2MgdMSDbmcgbOG7sWMgaGF5IGtow7RuZyAoVHJ1ZSA9IGPDsywgRmFsc2UgPSBraMO0bmcpLiAgDQotICoqYmV2ZXJhZ2VfdGVhKio6IE5nxrDhu51pIHRoYW0gZ2lhIGPDsyB0acOqdSB0aOG7pSB0csOgIGhheSBraMO0bmcgKFRydWUgPSBjw7MsIEZhbHNlID0ga2jDtG5nKS4gIA0KDQotICoqdGltZV9vZl9kYXlfbW9ybmluZyoqOiBDYWZmZWluZSDEkcaw4bujYyB0acOqdSB0aOG7pSB2w6BvIGJ14buVaSBzw6FuZyBoYXkga2jDtG5nIChUcnVlID0gY8OzLCBGYWxzZSA9IGtow7RuZykuICANCg0KLSAqKnRpbWVfb2ZfZGF5X2FmdGVybm9vbioqOiBDYWZmZWluZSDEkcaw4bujYyB0acOqdSB0aOG7pSB2w6BvIGJ14buVaSBjaGnhu4F1IGhheSBraMO0bmcgKFRydWUgPSBjw7MsIEZhbHNlID0ga2jDtG5nKS4gIA0KDQotICoqdGltZV9vZl9kYXlfZXZlbmluZyoqOiBDYWZmZWluZSDEkcaw4bujYyB0acOqdSB0aOG7pSB2w6BvIGJ14buVaSB04buRaSBoYXkga2jDtG5nIChUcnVlID0gY8OzLCBGYWxzZSA9IGtow7RuZykuICANCg0KLSAqKmdlbmRlcl9mZW1hbGUqKjogTmfGsOG7nWkgdGhhbSBnaWEgbMOgIG7hu68gaGF5IGtow7RuZyAoVHJ1ZSA9IG7hu68sIEZhbHNlID0ga2jDtG5nIHBo4bqjaSBu4buvKS4gIA0KDQotICoqZ2VuZGVyX21hbGUqKjogTmfGsOG7nWkgdGhhbSBnaWEgbMOgIG5hbSBoYXkga2jDtG5nIChUcnVlID0gbmFtLCBGYWxzZSA9IGtow7RuZyBwaOG6o2kgbmFtKS4NCg0KIyAqKkNIxq/GoE5HIDQ6IFBIw4JOIFTDjUNIIFbDgCDEkMavQSBSQSBL4bq+VCBRVeG6oioqDQoNClRyb25nIGLDoGkgbHXhuq1uIG7DoHksIGJp4bq/biBwaOG7pSB0aHXhu5ljIMSRxrDhu6NjIGzhu7FhIGNo4buNbiBsw6Agc2xlZXBfaW1wYWN0ZWQsIHBo4bqjbiDDoW5oIHZp4buHYyBnaeG6pWMgbmfhu6cgY8OzIGLhu4sg4bqjbmggaMaw4bufbmcgYuG7n2kgY2FmZmVpbmUgaGF5IGtow7RuZy4gQ8OhYyBiaeG6v24gxJHhu4tuaCB0w61uaCBjw7JuIGzhuqFpIHPhur0gxJHGsOG7o2MgcGjDom4gdMOtY2ggdsOgIGtp4buDbSDEkeG7i25oIG5o4bqxbSB4w6FjIMSR4buLbmggbGnhu4d1IGNow7puZyBjw7MgbeG7kWkgbGnDqm4gaOG7hyB0aOG7kW5nIGvDqiB24bubaSBiaeG6v24gcGjhu6UgdGh14buZYywgdOG7qyDEkcOzIGfDs3AgcGjhuqduIGzDoG0gc8OhbmcgdOG7jyBuaOG7r25nIHnhur91IHThu5EgY8OzIHRo4buDIHTDoWMgxJHhu5luZyDEkeG6v24gY2jhuqV0IGzGsOG7o25nIGdp4bqlYyBuZ+G7pyBj4bunYSBuZ8aw4budaSB0acOqdSBkw7luZyBjYWZmZWluZS4NCg0KYGBge3J9DQpkYXRhLnRhYmxlKGR0KQ0KYGBgDQoNCiMjICoqNC4xLiBUaOG7kW5nIGvDqiBtw7QgdOG6oyBiaeG6v24gcGjhu6UgdGh14buZYyoqDQoNCl8qKkzhuq1wIGLhuqNuZyB04bqnbiBz4buRIHbDoCBi4bqjbmcgdOG6p24gc3XhuqV0KipfDQoNCmBgYHtyfQ0KdGFibGUoZmFjdG9yKGR0JHNsZWVwX2ltcGFjdGVkLA0KICAgICAgICAgICAgIGxldmVscyA9IGMoMCwgMSksDQogICAgICAgICAgICAgbGFiZWxzID0gYygiS2jDtG5nIGLhu4sg4bqjbmggaMaw4bufbmciLCAiQuG7iyDhuqNuaCBoxrDhu59uZyIpKSkNCnRhYmxlKGZhY3RvcihkdCRzbGVlcF9pbXBhY3RlZCwNCiAgICAgICAgICAgICBsZXZlbHMgPSBjKDAsIDEpLA0KICAgICAgICAgICAgIGxhYmVscyA9IGMoIktow7RuZyBi4buLIOG6o25oIGjGsOG7n25nIiwgIkLhu4sg4bqjbmggaMaw4bufbmciKSkpIC8gbGVuZ3RoKGR0JHNsZWVwX2ltcGFjdGVkKQ0KYGBgDQoNCl8qKkzhuq1wIGJp4buDdSDEkeG7kyoqXw0KDQpgYGB7cn0NCiMgR8OhbiBuaMOjbiByw7UgcsOgbmcgY2hvIGJp4bq/biBzbGVlcF9pbXBhY3RlZA0KZHQkc2xlZXBfbGFiZWwgPC0gZmFjdG9yKGR0JHNsZWVwX2ltcGFjdGVkLA0KICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiS2jDtG5nIGLhu4sg4bqjbmggaMaw4bufbmciLCAiQuG7iyDhuqNuaCBoxrDhu59uZyIpKQ0KDQojIFTDrW5oIHThu7cgbOG7hw0KZGZfdHlsZSA8LSBhcy5kYXRhLmZyYW1lKHByb3AudGFibGUodGFibGUoZHQkc2xlZXBfbGFiZWwpKSkNCmNvbG5hbWVzKGRmX3R5bGUpIDwtIGMoInNsZWVwX2xhYmVsIiwgInR5bGUiKQ0KDQojIFbhur0gYmnhu4N1IMSR4buTDQpnZ3Bsb3QoZGZfdHlsZSwgYWVzKHggPSBzbGVlcF9sYWJlbCwgeSA9IHR5bGUsIGZpbGwgPSBzbGVlcF9sYWJlbCkpICsNCiAgZ2VvbV9jb2wod2lkdGggPSAwLjYpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHNjYWxlczo6cGVyY2VudCh0eWxlLCBhY2N1cmFjeSA9IDAuMSkpLA0KICAgICAgICAgICAgdmp1c3QgPSAtMC41LCBzaXplID0gNSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdCgpKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIktow7RuZyBi4buLIOG6o25oIGjGsOG7n25nIiA9ICIjODFENEZBIiwgICMgeGFuaCBsw6ENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQuG7iyDhuqNuaCBoxrDhu59uZyIgPSAiIzY0QjVGNiIpKSArICAgICAgIyDEkeG7jw0KICBsYWJzKHRpdGxlID0gIkJp4buDdSDEkeG7kyA0LjEuIFThu7cgbOG7hyBnaeG6pWMgbmfhu6cgYuG7iyDhuqNuaCBoxrDhu59uZyBi4bufaSBjYWZmZWluZSIsDQogICAgICAgeCA9ICJUw6xuaCB0cuG6oW5nIOG6o25oIGjGsOG7n25nIiwNCiAgICAgICB5ID0gIlThu7cgbOG7hyIpICsNCiAgdGhlbWVfbWluaW1hbChiYXNlX3NpemUgPSAxNCkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQpgYGANCg0KXyoqTmjhuq1uIHjDqXQqKl8NCg0KLSBCaeG7g3UgxJHhu5MgY+G7mXQgdsOgIGLhuqNuZyDhu58gdHLDqm4gdGjhu4MgaGnhu4duIHThu7cgbOG7hyBuZ8aw4budaSB0aGFtIGdpYSBraOG6o28gc8OhdCBjw7MgZ2nhuqVjIG5n4bunIGLhu4sg4bqjbmggaMaw4bufbmcgYuG7n2kgdmnhu4djIHRpw6p1IHRo4bulIGNhZmZlaW5lLiBUaGVvIGvhur90IHF14bqjIHRodSDEkcaw4bujYywgY8OzICoqMjAzIG5nxrDhu51pKiogKGNoaeG6v20gKio0MC42JSoqKSBjaG8gYmnhur90IGdp4bqlYyBuZ+G7pyBj4bunYSBo4buNICoqYuG7iyDhuqNuaCBoxrDhu59uZyoqLCB0cm9uZyBraGkgKioyOTcgbmfGsOG7nWkgY8OybiBs4bqhaSoqIChjaGnhur9tICoqNTkuNCUqKikgY2hvIGJp4bq/dCAqKmtow7RuZyBi4buLIOG6o25oIGjGsOG7n25nKiouICANCg0KLSBOaMawIHbhuq15LCBwaOG6p24gbOG7m24gbmfGsOG7nWkgdGhhbSBnaWEga2jDtG5nIGPhuqNtIG5o4bqtbiB0aOG6pXkgdMOhYyDEkeG7mW5nIHRpw6p1IGPhu7FjIHLDtSBy4buHdCBj4bunYSBjYWZmZWluZSDEkeG6v24gZ2nhuqVjIG5n4bunLCB0dXkgbmhpw6puIHThu7cgbOG7hyBi4buLIOG6o25oIGjGsOG7n25nIHbhuqtuIGNoaeG6v20gbeG7mXQgcGjhuqduIMSRw6FuZyBr4buDLCBjaG8gdGjhuqV5IGPhuqduIGPDom4gbmjhuq9jIHRo4budaSDEkWnhu4NtIHbDoCBsb+G6oWkgxJHhu5MgdeG7kW5nIGtoaSBz4butIGThu6VuZyBjYWZmZWluZSwgxJHhurdjIGJp4buHdCBsw6AgduG7m2kgbmjhu69uZyBuZ8aw4budaSBuaOG6oXkgY+G6o20gduG7gSBnaeG6pWMgbmfhu6cuDQoNCiMjICoqNC4yLiBUaOG7kW5nIGvDqiBzdXkgZGnhu4VuKioNCg0KIyMjICoqNC4yLjEuIEtp4buDbSDEkeG7i25oIHTDrW5oIMSR4buZYyBs4bqtcCoqDQoNCktp4buDbSDEkeG7i25oIENoaSBiw6xuaCBwaMawxqFuZyBsw6AgbeG7mXQgcGjGsMahbmcgcGjDoXAgdGjhu5FuZyBrw6ogcGjhu5UgYmnhur9uIGTDuW5nIMSR4buDIGtp4buDbSB0cmEgbeG7qWMgxJHhu5kgxJHhu5ljIGzhuq1wIGdp4buvYSBoYWkgYmnhur9uIHBow6JuIGxv4bqhaS4gUGjGsMahbmcgcGjDoXAgbsOgeSBnacO6cCB4w6FjIMSR4buLbmggbGnhu4d1IGPDsyBt4buRaSBxdWFuIGjhu4cgxJHDoW5nIGvhu4MgbsOgbyBnaeG7r2EgY8OhYyBiaeG6v24gaGF5IGtow7RuZyB0aMO0bmcgcXVhIHNvIHPDoW5oIGdp4buvYSB04bqnbiBz4buRIHF1YW4gc8OhdCB2w6AgdOG6p24gc+G7kSBr4buzIHbhu41uZyB0cm9uZyBi4bqjbmcgY2jDqW8uDQoNCkPDtG5nIHRo4bupYyB0w61uaCBnacOhIHRy4buLIHRo4buRbmcga8OqIENoaSBiw6xuaCBwaMawxqFuZyDEkcaw4bujYyB0aOG7gyBoaeG7h24gbmjGsCBzYXU6DQoNCiQkXGNoaV4yID0gXHN1bV97aSxqfSBcZnJhY3sobl97aWp9IC1caGF0e1xtdX1fe2lqfSleMn17XGhhdHtcbXV9X3tpan19JCQNCg0KIyMjICoqNC4yLjIuIEJp4bq/biBzbGVlcF9pbXBhY3RlZCB2w6AgYmV2ZXJhZ2VfY29mZmVlKioNCg0KKipHaeG6oyB0aHV54bq/dCBraeG7g20gxJHhu4tuaDoqKg0KDQotICoqSOKCgCoqOiBUw6xuaCB0cuG6oW5nIGdp4bqlYyBuZ+G7pyBi4buLIOG6o25oIGjGsOG7n25nIHbDoCB2aeG7h2MgdGnDqnUgdGjhu6UgY8OgIHBow6ogbMOgIGhhaSBiaeG6v24gxJHhu5ljIGzhuq1wLg0KDQotICoqSOKCgSoqOiBUw6xuaCB0cuG6oW5nIGdp4bqlYyBuZ+G7pyBi4buLIOG6o25oIGjGsOG7n25nIHbDoCB2aeG7h2MgdGnDqnUgdGjhu6UgY8OgIHBow6ogY8OzIG3hu5FpIGxpw6puIGjhu4cgduG7m2kgbmhhdS4NCg0KYGBge3J9DQptdGh0IDwtIHRhYmxlKGR0JHNsZWVwX2ltcGFjdGVkLCBkdCRiZXZlcmFnZV9jb2ZmZWUpDQpjaGlzcS50ZXN0KG10aHQpDQpgYGANCg0KXyoqTmjhuq1uIHjDqXQ6KipfDQpRdWEga+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggY2hvIHRo4bqleSAqKnAtdmFsdWUgPSAxLjkxNSDDlyAxMOKBu+KBuSA8IDAuMDUqKiwgZG8gxJHDsyB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgKipcKEhfMFwpKiouIMSQaeG7gXUgbsOgeSDEkeG7k25nIG5naMSpYSB24bubaSB2aeG7h2MgKip0w6xuaCB0cuG6oW5nIGdp4bqlYyBuZ+G7pyBi4buLIOG6o25oIGjGsOG7n25nIHbDoCB2aeG7h2MgdGnDqnUgdGjhu6UgY8OgIHBow6ogY8OzIG3hu5FpIGxpw6puIGjhu4cgduG7m2kgbmhhdSoqLg0KDQpOw7NpIGPDoWNoIGtow6FjLCAqKnZp4buHYyB14buRbmcgY8OgIHBow6ogY8OzIHRo4buDIOG6o25oIGjGsOG7n25nIMSR4bq/biBjaOG6pXQgbMaw4bujbmcgZ2nhuqVjIG5n4bunKiogY+G7p2EgbmfGsOG7nWkgdGhhbSBnaWEga2jhuqNvIHPDoXQuIEvhur90IHF14bqjIG7DoHkgZ8OzcCBwaOG6p24gY+G7p25nIGPhu5EgZ2nhuqMgdGh1eeG6v3QgcuG6sW5nIGNhZmZlaW5lIHRyb25nIGPDoCBwaMOqIGzDoCBt4buZdCB54bq/dSB04buRIGPDsyB0aOG7gyBsw6BtIHN1eSBnaeG6o20gY2jhuqV0IGzGsOG7o25nIGdp4bqlYyBuZ+G7pyDhu58gbeG7mXQgYuG7mSBwaOG6rW4gbmfGsOG7nWkgZMO5bmcuDQoNCiMjIyAqKjQuMi4zLiBCaeG6v24gc2xlZXBfaW1wYWN0ZWQgdsOgIGJldmVyYWdlX2VuZXJneV9kcmluayoqDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6KioNCg0KLSAqKkjigoAqKjogVMOsbmggdHLhuqFuZyBnaeG6pWMgbmfhu6cgYuG7iyDhuqNuaCBoxrDhu59uZyB2w6Agdmnhu4djIHRpw6p1IHRo4bulIG7GsOG7m2MgdMSDbmcgbOG7sWMgbMOgIGhhaSBiaeG6v24gxJHhu5ljIGzhuq1wLg0KDQotICoqSOKCgSoqOiBUw6xuaCB0cuG6oW5nIGdp4bqlYyBuZ+G7pyBi4buLIOG6o25oIGjGsOG7n25nIHbDoCB2aeG7h2MgdGnDqnUgdGjhu6Ugbsaw4bubYyB0xINuZyBs4buxYyBjw7MgbeG7kWkgbGnDqm4gaOG7hyB24bubaSBuaGF1Lg0KDQpgYGB7cn0NCm10aHQxIDwtIHRhYmxlKGR0JHNsZWVwX2ltcGFjdGVkLCBkdCRiZXZlcmFnZV9lbmVyZ3lfZHJpbmspDQpjaGlzcS50ZXN0KG10aHQxKQ0KYGBgDQoNCl8qKk5o4bqtbiB4w6l0OioqXyAgDQoNClF1YSBr4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBjaG8gdGjhuqV5ICoqcC12YWx1ZSA9IDAuMDAxMTUgPCAwLjA1KiosIGRvIMSRw7MgdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90ICoqXChIXzBcKSoqLiDEkGnhu4F1IG7DoHkgxJHhu5NuZyBuZ2jEqWEgduG7m2kgdmnhu4djICoqdMOsbmggdHLhuqFuZyBnaeG6pWMgbmfhu6cgYuG7iyDhuqNuaCBoxrDhu59uZyB2w6Agdmnhu4djIHRpw6p1IHRo4bulIG7GsOG7m2MgdMSDbmcgbOG7sWMgY8OzIG3hu5FpIGxpw6puIGjhu4cgduG7m2kgbmhhdSoqLg0KDQpOw7NpIGPDoWNoIGtow6FjLCAqKnZp4buHYyB14buRbmcgbsaw4bubYyB0xINuZyBs4buxYyBjw7MgdGjhu4Mg4bqjbmggaMaw4bufbmcgxJHhur9uIGNo4bqldCBsxrDhu6NuZyBnaeG6pWMgbmfhu6cqKiBj4bunYSBuZ8aw4budaSB0aGFtIGdpYSBraOG6o28gc8OhdC4gS+G6v3QgcXXhuqMgbsOgeSBj4bunbmcgY+G7kSBuaOG6rW4gxJHhu4tuaCBy4bqxbmcgY2FmZmVpbmUgdHJvbmcgbsaw4bubYyB0xINuZyBs4buxYyBsw6AgbeG7mXQgeeG6v3UgdOG7kSB0aeG7gW0g4bqpbiBjw7MgdGjhu4MgbMOgbSBzdXkgZ2nhuqNtIGNo4bqldCBsxrDhu6NuZyBnaeG6pWMgbmfhu6csIMSR4bq3YyBiaeG7h3QgduG7m2kgbmjhu69uZyBuZ8aw4budaSBuaOG6oXkgY+G6o20gduG7m2kgY2jhuqV0IGvDrWNoIHRow61jaC4NCg0KIyMjICoqNC4yLjQuIEJp4bq/biBzbGVlcF9pbXBhY3RlZCB2w6AgYmV2ZXJhZ2VfdGVhKioNCg0KKipHaeG6oyB0aHV54bq/dCBraeG7g20gxJHhu4tuaDoqKg0KDQotICoqSOKCgCoqOiBUw6xuaCB0cuG6oW5nIGdp4bqlYyBuZ+G7pyBi4buLIOG6o25oIGjGsOG7n25nIHbDoCB2aeG7h2MgdGnDqnUgdGjhu6UgdHLDoCBsw6AgaGFpIGJp4bq/biDEkeG7mWMgbOG6rXAuDQoNCi0gKipI4oKBKio6IFTDrG5oIHRy4bqhbmcgZ2nhuqVjIG5n4bunIGLhu4sg4bqjbmggaMaw4bufbmcgdsOgIHZp4buHYyB0acOqdSB0aOG7pSB0csOgIGPDsyBt4buRaSBsacOqbiBo4buHIHbhu5tpIG5oYXUuDQoNCmBgYHtyfQ0KbXRodDIgPC0gdGFibGUoZHQkc2xlZXBfaW1wYWN0ZWQsIGR0JGJldmVyYWdlX3RlYSkNCmNoaXNxLnRlc3QobXRodDIpDQpgYGANCg0KUXVhIGvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGNobyB0aOG6pXkgKipwLXZhbHVlIDwgMi4yIMOXIDEw4oG7wrnigbYgPCAwLjA1KiosIGRvIMSRw7MgdGEgKipiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgXChIXzBcKSoqLiDEkGnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6AgKip0w6xuaCB0cuG6oW5nIGdp4bqlYyBuZ+G7pyBi4buLIOG6o25oIGjGsOG7n25nIHbDoCB2aeG7h2MgdGnDqnUgdGjhu6UgdHLDoCBjw7MgbeG7kWkgbGnDqm4gaOG7hyB24bubaSBuaGF1KiouIE7Ds2kgY8OhY2gga2jDoWMsICoqdmnhu4djIHXhu5FuZyB0csOgIGPDsyB0aOG7gyDhuqNuaCBoxrDhu59uZyDEkeG6v24gY2jhuqV0IGzGsOG7o25nIGdp4bqlYyBuZ+G7pyoqIGPhu6dhIG5nxrDhu51pIHRoYW0gZ2lhIGto4bqjbyBzw6F0LiANCg0KIyMjICoqNC4yLjUuIEJp4bq/biBzbGVlcF9pbXBhY3RlZCB2w6AgdGltZV9vZl9kYXlfYWZ0ZXJub29uKioNCg0KKipHaeG6oyB0aHV54bq/dCBraeG7g20gxJHhu4tuaDoqKg0KDQotICoqSOKCgCoqOiBUw6xuaCB0cuG6oW5nIGdp4bqlYyBuZ+G7pyBi4buLIOG6o25oIGjGsOG7n25nIHbDoCB2aeG7h2MgdGnDqnUgdGjhu6UgY2FmZmVpbmUgdsOgbyBideG7lWkgY2hp4buBdSBsw6AgaGFpIGJp4bq/biDEkeG7mWMgbOG6rXAuDQoNCi0gKipI4oKBKio6IFTDrG5oIHRy4bqhbmcgZ2nhuqVjIG5n4bunIGLhu4sg4bqjbmggaMaw4bufbmcgdsOgIHZp4buHYyB0acOqdSB0aOG7pSBjYWZmZWluZSB2w6BvIGJ14buVaSBjaGnhu4F1IGPDsyBt4buRaSBsacOqbiBo4buHIHbhu5tpIG5oYXUuDQoNCmBgYHtyfQ0KbXRodDMgPC0gdGFibGUoZHQkc2xlZXBfaW1wYWN0ZWQsIGR0JHRpbWVfb2ZfZGF5X2FmdGVybm9vbikNCmNoaXNxLnRlc3QobXRodDMpDQpgYGANCg0KXyoqTmjhuq1uIHjDqXQ6KipfICANCg0KS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggY2hvIHRo4bqleSAqKnAtdmFsdWUgPSAwLjA1ODE4ID4gMC4wNSoqLCBkbyDEkcOzIHRhICoqa2jDtG5nIMSR4bunIGLhurFuZyBjaOG7qW5nIMSR4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBcKEhfMFwpKiog4bufIG3hu6ljIMO9IG5naMSpYSA1JS4NCg0KxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgKipraMO0bmcgY8OzIG3hu5FpIGxpw6puIGjhu4cgdGjhu5FuZyBrw6ogY8OzIMO9IG5naMSpYSoqIGdp4buvYSAqKnZp4buHYyB0acOqdSB0aOG7pSBjYWZmZWluZSB2w6BvIGJ14buVaSBjaGnhu4F1KiogdsOgICoqdMOsbmggdHLhuqFuZyBnaeG6pWMgbmfhu6cgYuG7iyDhuqNuaCBoxrDhu59uZyoqLiBOw7NpIGPDoWNoIGtow6FjLCBk4buvIGxp4buHdSBraOG6o28gc8OhdCBoaeG7h24gdOG6oWkgY2jGsGEgY2jhu4kgcmEgxJHGsOG7o2MgcuG6sW5nIHRpw6p1IHRo4bulIGNhZmZlaW5lIHbDoG8gYnXhu5VpIGNoaeG7gXUgY8OzIOG6o25oIGjGsOG7n25nIHLDtSBy4buHdCDEkeG6v24gY2jhuqV0IGzGsOG7o25nIGdp4bqlYyBuZ+G7pyBj4bunYSBuZ8aw4budaSB0aGFtIGdpYS4NCg0KIyMjICoqNC4yLjYuIEJp4bq/biBzbGVlcF9pbXBhY3RlZCB2w6AgdGltZV9vZl9kYXlfZXZlbmluZyoqDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6KioNCg0KLSAqKkjigoAqKjogVMOsbmggdHLhuqFuZyBnaeG6pWMgbmfhu6cgYuG7iyDhuqNuaCBoxrDhu59uZyB2w6Agdmnhu4djIHRpw6p1IHRo4bulIGNhZmZlaW5lIHbDoG8gYnXhu5VpIHThu5FpIGzDoCBoYWkgYmnhur9uIMSR4buZYyBs4bqtcC4NCg0KLSAqKkjigoEqKjogVMOsbmggdHLhuqFuZyBnaeG6pWMgbmfhu6cgYuG7iyDhuqNuaCBoxrDhu59uZyB2w6Agdmnhu4djIHRpw6p1IHRo4bulIGNhZmZlaW5lIHbDoG8gYnXhu5VpIHThu5FpIGPDsyBt4buRaSBsacOqbiBo4buHIHbhu5tpIG5oYXUuDQoNCmBgYHtyfQ0KbXRodDQgPC0gdGFibGUoZHQkc2xlZXBfaW1wYWN0ZWQsIGR0JHRpbWVfb2ZfZGF5X2V2ZW5pbmcpDQpjaGlzcS50ZXN0KG10aHQ0KQ0KYGBgDQoNCl8qKk5o4bqtbiB4w6l0OioqXyAgDQoNCkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGNobyB0aOG6pXkgKipwLXZhbHVlIDwgMi4yIMOXIDEw4oG7wrnigbYgPCAwLjA1KiosIGRvIMSRw7MgdGEgKipiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgXChIXzBcKSoqLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSAqKnTDrG5oIHRy4bqhbmcgZ2nhuqVjIG5n4bunIGLhu4sg4bqjbmggaMaw4bufbmcgdsOgIHZp4buHYyB0acOqdSB0aOG7pSBjYWZmZWluZSB2w6BvIGJ14buVaSB04buRaSBjw7MgbeG7kWkgbGnDqm4gaOG7hyB24bubaSBuaGF1KiouIE7Ds2kgY8OhY2gga2jDoWMsICoqdmnhu4djIHXhu5FuZyBjYWZmZWluZSB2w6BvIGJ14buVaSB04buRaSBjw7Mga2jhuqMgbsSDbmcgbMOgbSBzdXkgZ2nhuqNtIGNo4bqldCBsxrDhu6NuZyBnaeG6pWMgbmfhu6cqKiBj4bunYSBuZ8aw4budaSB0aGFtIGdpYSBraOG6o28gc8OhdC4NCg0KIyMjICoqNC4yLjcuIEJp4bq/biBzbGVlcF9pbXBhY3RlZCB2w6AgdGltZV9vZl9kYXlfbW9ybmluZyoqDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6KioNCg0KLSAqKkjigoAqKjogVMOsbmggdHLhuqFuZyBnaeG6pWMgbmfhu6cgYuG7iyDhuqNuaCBoxrDhu59uZyB2w6Agdmnhu4djIHRpw6p1IHRo4bulIGNhZmZlaW5lIHbDoG8gYnXhu5VpIHPDoW5nIGzDoCBoYWkgYmnhur9uIMSR4buZYyBs4bqtcC4NCg0KLSAqKkjigoEqKjogVMOsbmggdHLhuqFuZyBnaeG6pWMgbmfhu6cgYuG7iyDhuqNuaCBoxrDhu59uZyB2w6Agdmnhu4djIHRpw6p1IHRo4bulIGNhZmZlaW5lIHbDoG8gYnXhu5VpIHPDoW5nIGPDsyBt4buRaSBsacOqbiBo4buHIHbhu5tpIG5oYXUuDQoNCmBgYHtyfQ0KbXRodDUgPC0gdGFibGUoZHQkc2xlZXBfaW1wYWN0ZWQsIGR0JHRpbWVfb2ZfZGF5X21vcm5pbmcpDQpjaGlzcS50ZXN0KG10aHQ1KQ0KYGBgDQoNCl8qKk5o4bqtbiB4w6l0OioqXyAgDQoNCkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGNobyB0aOG6pXkgKipwLXZhbHVlID0gMC45MjY3ID4gMC4wNSoqLCBkbyDEkcOzIHRhICoqa2jDtG5nIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBcKEhfMFwpKiouIMSQaeG7gXUgbsOgeSBjw7MgbmdoxKlhIGzDoCAqKmNoxrBhIGPDsyBi4bqxbmcgY2jhu6luZyB0aOG7kW5nIGvDqiDEkeG7pyBt4bqhbmggxJHhu4Mga2jhurNuZyDEkeG7i25oIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIHZp4buHYyB0acOqdSB0aOG7pSBjYWZmZWluZSB2w6BvIGJ14buVaSBzw6FuZyB2w6AgdMOsbmggdHLhuqFuZyBnaeG6pWMgbmfhu6cgYuG7iyDhuqNuaCBoxrDhu59uZyoqLiBOw7NpIGPDoWNoIGtow6FjLCAqKnZp4buHYyB14buRbmcgY2FmZmVpbmUgdsOgbyBideG7lWkgc8OhbmcgZMaw4budbmcgbmjGsCBraMO0bmcg4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MgxJHhur9uIGNo4bqldCBsxrDhu6NuZyBnaeG6pWMgbmfhu6cqKiBj4bunYSBuZ8aw4budaSB0aGFtIGdpYSBraOG6o28gc8OhdC4NCg0KIyMjICoqNC4yLjguIEJp4bq/biBzbGVlcF9pbXBhY3RlZCB2w6AgZ2VuZGVyX2ZlbWFsZSoqDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6KioNCg0KLSAqKkjigoAqKjogVMOsbmggdHLhuqFuZyBnaeG6pWMgbmfhu6cgYuG7iyDhuqNuaCBoxrDhu59uZyB2w6AgZ2nhu5tpIHTDrW5oIG7hu68gbMOgIGhhaSBiaeG6v24gxJHhu5ljIGzhuq0uDQoNCi0gKipI4oKBKio6IFTDrG5oIHRy4bqhbmcgZ2nhuqVjIG5n4bunIGLhu4sg4bqjbmggaMaw4bufbmcgdsOgIGdp4bubaSB0w61uaCBu4buvIGPDsyBt4buRaSBsacOqbiBo4buHIHbhu5tpIG5oYXUuDQoNCmBgYHtyfQ0KbXRodDYgPC0gdGFibGUoZHQkc2xlZXBfaW1wYWN0ZWQsIGR0JGdlbmRlcl9mZW1hbGUpDQpjaGlzcS50ZXN0KG10aHQ2KQ0KYGBgDQoNCl8qKk5o4bqtbiB4w6l0OioqXyAgDQoNCkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGNobyB0aOG6pXkgKipwLXZhbHVlID0gMSA+IDAuMDUqKiwgZG8gxJHDsyB0YSAqKmtow7RuZyBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgXChIXzBcKSoqLiDEkGnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6AgKipraMO0bmcgY8OzIGLhurFuZyBjaOG7qW5nIHRo4buRbmcga8OqIG7DoG8gY2hvIHRo4bqleSBt4buRaSBsacOqbiBo4buHIGdp4buvYSBnaeG7m2kgdMOtbmggbuG7ryB2w6Agdmnhu4djIGdp4bqlYyBuZ+G7pyBi4buLIOG6o25oIGjGsOG7n25nIGLhu59pIGNhZmZlaW5lKiouIE7Ds2kgY8OhY2gga2jDoWMsICoqZ2nhu5tpIHTDrW5oIG7hu68ga2jDtG5nIHBo4bqjaSBsw6AgeeG6v3UgdOG7kSBjw7Mg4bqjbmggaMaw4bufbmcgcsO1IHLhu4d0IMSR4bq/biBjaOG6pXQgbMaw4bujbmcgZ2nhuqVjIG5n4bunIHRyb25nIGLhu5FpIGPhuqNuaCB0acOqdSB0aOG7pSBjYWZmZWluZSoqIHRoZW8gZOG7ryBsaeG7h3Uga2jhuqNvIHPDoXQgaGnhu4duIGPDsy4NCg0KIyMjICoqNC4yLjkuIEJp4bq/biBzbGVlcF9pbXBhY3RlZCB2w6AgZ2VuZGVyX21hbGUqKg0KDQoqKkdp4bqjIHRodXnhur90IGtp4buDbSDEkeG7i25oOioqDQoNCi0gKipI4oKAKio6IFTDrG5oIHRy4bqhbmcgZ2nhuqVjIG5n4bunIGLhu4sg4bqjbmggaMaw4bufbmcgdsOgIGdp4bubaSB0w61uaCBuYW0gbMOgIGhhaSBiaeG6v24gxJHhu5ljIGzhuq1wLg0KDQotICoqSOKCgSoqOiBUw6xuaCB0cuG6oW5nIGdp4bqlYyBuZ+G7pyBi4buLIOG6o25oIGjGsOG7n25nIHbDoCBnaeG7m2kgdMOtbmggbmFtIGPDsyBt4buRaSBsacOqbiBo4buHIHbhu5tpIG5oYXUuDQoNCmBgYHtyfQ0KbXRodDcgPC0gdGFibGUoZHQkc2xlZXBfaW1wYWN0ZWQsIGR0JGdlbmRlcl9tYWxlKQ0KY2hpc3EudGVzdChtdGh0NykNCmBgYA0KDQpfKipOaOG6rW4geMOpdDoqKl8gIA0KDQpL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBjaG8gdGjhuqV5ICoqcC12YWx1ZSA9IDEgPiAwLjA1KiosIGRvIMSRw7MgdGEgKipraMO0bmcgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IFwoSF8wXCkqKi4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgKipraMO0bmcgY8OzIG3hu5FpIGxpw6puIGjhu4cgdGjhu5FuZyBrw6ogY8OzIMO9IG5naMSpYSBnaeG7r2EgZ2nhu5tpIHTDrW5oIG5hbSB2w6Agdmnhu4djIGdp4bqlYyBuZ+G7pyBi4buLIOG6o25oIGjGsOG7n25nIGLhu59pIGNhZmZlaW5lKiouIE7Ds2kgY8OhY2gga2jDoWMsICoqbmFtIGdp4bubaSBraMO0bmcgY8OzIGto4bqjIG7Eg25nIGLhu4sg4bqjbmggaMaw4bufbmcgxJHhur9uIGdp4bqlYyBuZ+G7pyBraMOhYyBiaeG7h3QgcsO1IHLhu4d0IHNvIHbhu5tpIGPDoWMgbmjDs20gY8OybiBs4bqhaSoqIHRyb25nIGto4bqjbyBzw6F0IG7DoHkuDQoNCl8qKkvhur90IGx14bqtbjoqKl8NCg0KLSBRdWEgY8OhYyBraeG7g20gxJHhu4tuaCBDaGkgYsOsbmggcGjGsMahbmcsIGNo4buJIGPDsyBjw6FjIGJp4bq/biBuaMawICoqbG/huqFpIMSR4buTIHXhu5FuZyBjYWZmZWluZSoqIChjw6AgcGjDqiwgdHLDoCwgbsaw4bubYyB0xINuZyBs4buxYykgdsOgICoqdGjhu51pIMSRaeG7g20gdGnDqnUgdGjhu6UgdHJvbmcgbmfDoHkqKiAoxJHhurdjIGJp4buHdCBsw6AgYnXhu5VpIHThu5FpKSBjaG8gdGjhuqV5IGPDsyBt4buRaSBsacOqbiBo4buHIHLDtSByw6BuZyB24bubaSBiaeG6v24gKipgc2xlZXBfaW1wYWN0ZWRgKiogKGdp4bqlYyBuZ+G7pyBi4buLIOG6o25oIGjGsOG7n25nKS4gDQoNCi0gTmfGsOG7o2MgbOG6oWksIGPDoWMgYmnhur9uIGxpw6puIHF1YW4gxJHhur9uICoqZ2nhu5tpIHTDrW5oKiogaG/hurdjICoqdmnhu4djIHRpw6p1IHRo4bulIHbDoG8gYnXhu5VpIHPDoW5nKioga2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogdHJvbmcgYuG7mSBk4buvIGxp4buHdSBuw6B5Lg0KDQotIFRp4bq/cCB0aGVvLCB0w6FjIGdp4bqjIHPhur0gdGnhur9uIGjDoG5oIG3DtCB04bqjIGNoaSB0aeG6v3QgY8OhYyBiaeG6v24gY8OzIOG6o25oIGjGsOG7n25nLCB04burIMSRw7MgxJHGsGEgcmEgY8OhaSBuaMOsbiBraMOhaSBxdcOhdCBoxqFuIHbhu4EgbeG7qWMgxJHhu5kgdMOhYyDEkeG7mW5nIGPhu6dhIHThu6tuZyB54bq/dSB04buRIMSR4bq/biBjaOG6pXQgbMaw4bujbmcgZ2nhuqVjIG5n4bunIGtoaSB0acOqdSB0aOG7pSBjYWZmZWluZS4NCg0KIyMgKio0LjMuIFRo4buRbmcga8OqIG3DtCB04bqjIDIgYmnhur9uKioNCg0KIyMjICoqNC4zLjEuIEJp4bq/biBCaeG6v24gc2xlZXBfaW1wYWN0ZWQgdsOgIGJldmVyYWdlX2NvZmZlZSoqDQoNCl8qKkzhuq1wIGLhuqNuZyB04bqnbiBz4buRIHbDoCBi4bqjbmcgdOG6p24gc3XhuqV0KipfDQoNCmBgYHtyfQ0KIyBHw6FuIG5ow6NuIHLDtSByw6BuZyBjaG8gY8OhYyBiaeG6v24NCmR0JHNsZWVwX2ltcGFjdGVkIDwtIGZhY3RvcihkdCRzbGVlcF9pbXBhY3RlZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIktow7RuZyBi4buLIOG6o25oIGjGsOG7n25nIiwgIkLhu4sg4bqjbmggaMaw4bufbmciKSkNCg0KZHQkYmV2ZXJhZ2VfY29mZmVlIDwtIGZhY3RvcihkdCRiZXZlcmFnZV9jb2ZmZWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoRkFMU0UsIFRSVUUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJLaMO0bmcgdeG7kW5nIGPDoCBwaMOqIiwgIkPDsyB14buRbmcgY8OgIHBow6oiKSkNCg0KdGttdDwtIHRhYmxlKGR0JHNsZWVwX2ltcGFjdGVkLCBkdCRiZXZlcmFnZV9jb2ZmZWUpDQphZGRtYXJnaW5zKHRrbXQpDQpwdGttdCA8LSBwcm9wLnRhYmxlKHRrbXQpDQphZGRtYXJnaW5zKHB0a210KQ0KYGBgDQoNCl8qKkzhuq1wIGJp4buDdSDEkeG7kyoqXw0KDQpgYGB7cn0NCiMgQ2h1eeG7g24gYuG6o25nIHThuqduIHPhu5EgdGjDoG5oIGRhdGEgZnJhbWUNCmRmX3Bsb3QgPC0gYXMuZGF0YS5mcmFtZSh0a210KQ0KY29sbmFtZXMoZGZfcGxvdCkgPC0gYygiU2xlZXBfSW1wYWN0ZWQiLCAiQmV2ZXJhZ2VfQ29mZmVlIiwgIkNvdW50IikNCg0KIyBW4bq9IGJp4buDdSDEkeG7kyB04bqnbiBz4buRDQpsaWJyYXJ5KGdncGxvdDIpDQpnZ3Bsb3QoZGZfcGxvdCwgYWVzKHggPSBCZXZlcmFnZV9Db2ZmZWUsIHkgPSBDb3VudCwgZmlsbCA9IFNsZWVwX0ltcGFjdGVkKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNyksIHdpZHRoID0gMC42KSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBDb3VudCksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC43KSwNCiAgICAgICAgICAgIHZqdXN0ID0gLTAuMywgc2l6ZSA9IDMuNSkgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjNkJBRUQ2IiwgIiMyMTcxQjUiKSkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIkJp4buDdSDEkeG7kyA0LjIuIFTDoWMgxJHhu5luZyBj4bunYSBjw6AgcGjDqiDEkeG6v24gZ2nhuqVjIG5n4bunIiwNCiAgICB4ID0gIlTDrG5oIHRy4bqhbmcgdGnDqnUgdGjhu6UgY8OgIHBow6oiLA0KICAgIHkgPSAiU+G7kSBuZ8aw4budaSIsDQogICAgZmlsbCA9ICJUw6xuaCB0cuG6oW5nIGdp4bqlYyBuZ+G7pyINCiAgKSArDQogIHRoZW1lX21pbmltYWwoKQ0KYGBgDQoNCl8qKk5o4bqtbiB4w6l0OioqXyANCg0KQuG6o25nIHbDoCBiaeG7g3UgxJHhu5MgdHLDqm4gY2hvIHRo4bqleSB0cm9uZyBuaMOzbSAqKmtow7RuZyB14buRbmcgY8OgIHBow6oqKiwgY8OzICoqMTczIG5nxrDhu51pIGtow7RuZyBi4buLIOG6o25oIGjGsOG7n25nIMSR4bq/biBnaeG6pWMgbmfhu6cqKiAoY2hp4bq/bSBraG/huqNuZyAqKjM0LjYlKiopIHbDoCAqKjYyIG5nxrDhu51pIGLhu4sg4bqjbmggaMaw4bufbmcqKiAoY2hp4bq/bSAqKjEyLjQlKiopLiBUcm9uZyBraGkgxJHDsywg4bufIG5ow7NtICoqY8OzIHXhu5FuZyBjw6AgcGjDqioqLCBjw7MgKioxMjQgbmfGsOG7nWkga2jDtG5nIGLhu4sg4bqjbmggaMaw4bufbmcqKiAoY2hp4bq/bSAqKjI0LjglKiopIHbDoCAqKjE0MSBuZ8aw4budaSBi4buLIOG6o25oIGjGsOG7n25nKiogKGNoaeG6v20gKioyOC4yJSoqKS4NCg0KVOG7lW5nIHF1YW4sIHRhIHRo4bqleSBy4bqxbmcgKip04bu3IGzhu4cgbmfGsOG7nWkgYuG7iyDhuqNuaCBoxrDhu59uZyDEkeG6v24gZ2nhuqVjIG5n4bunIGNhbyBoxqFuIHLDtSBy4buHdCB0cm9uZyBuaMOzbSBjw7MgdeG7kW5nIGPDoCBwaMOqKiogc28gduG7m2kgbmjDs20ga2jDtG5nIHXhu5FuZy4gxJBp4buBdSBuw6B5IGPhu6duZyBj4buRIHRow6ptIGvhur90IGx14bqtbiB04burIGtp4buDbSDEkeG7i25oIHRo4buRbmcga8OqLCBjaG8gdGjhuqV5ICoqdmnhu4djIHRpw6p1IHRo4bulIGPDoCBwaMOqIGPDsyB0aOG7gyBsw6AgeeG6v3UgdOG7kSBsw6BtIHN1eSBnaeG6o20gY2jhuqV0IGzGsOG7o25nIGdp4bqlYyBuZ+G7pyoqIOG7nyBt4buZdCBi4buZIHBo4bqtbiBuZ8aw4budaSB0aGFtIGdpYSBraOG6o28gc8OhdC4NCg0KIyMjICoqNC4zLjIuIEJp4bq/biBCaeG6v24gc2xlZXBfaW1wYWN0ZWQgdsOgIGJldmVyYWdlX2VuZXJneV9kcmluayoqDQoNCl8qKkzhuq1wIGLhuqNuZyB04bqnbiBz4buRIHbDoCBi4bqjbmcgdOG6p24gc3XhuqV0KipfDQoNCmBgYHtyfQ0KZHQkYmV2ZXJhZ2VfZW5lcmd5X2RyaW5rIDwtIGZhY3RvcihkdCRiZXZlcmFnZV9lbmVyZ3lfZHJpbmssDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoRkFMU0UsIFRSVUUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJLaMO0bmcgdeG7kW5nIGVuZXJneSBkcmluayIsICJDw7MgdeG7kW5nIGVuZXJneSBkcmluayIpKQ0KdGttdDEgPC0gdGFibGUoZHQkc2xlZXBfaW1wYWN0ZWQsIGR0JGJldmVyYWdlX2VuZXJneV9kcmluaykNCmFkZG1hcmdpbnModGttdDEpDQpwdGttdDEgPC0gcHJvcC50YWJsZSh0a210MSkNCmFkZG1hcmdpbnMocHRrbXQxKQ0KYGBgDQoNCl8qKkzhuq1wIGJp4buDdSDEkeG7kyoqXw0KDQpgYGB7cn0NCiMgQ2h1eeG7g24gYuG6o25nIHThuqduIHPhu5EgdGjDoG5oIGRhdGEgZnJhbWUNCmRmX3Bsb3QxIDwtIGFzLmRhdGEuZnJhbWUodGttdDEpDQpjb2xuYW1lcyhkZl9wbG90MSkgPC0gYygiU2xlZXBfSW1wYWN0ZWQiLCAiQmV2ZXJhZ2VfRW5lcmd5IiwgIkNvdW50IikNCg0KIyBW4bq9IGJp4buDdSDEkeG7kw0KbGlicmFyeShnZ3Bsb3QyKQ0KZ2dwbG90KGRmX3Bsb3QxLCBhZXMoeCA9IEJldmVyYWdlX0VuZXJneSwgeSA9IENvdW50LCBmaWxsID0gU2xlZXBfSW1wYWN0ZWQpKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC43KSwgd2lkdGggPSAwLjYpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IENvdW50KSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjcpLA0KICAgICAgICAgICAgdmp1c3QgPSAtMC4zLCBzaXplID0gMy41KSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiM2QkFFRDYiLCAiIzIxNzFCNSIpKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiQmnhu4N1IMSR4buTIDQuMy4gVMOhYyDEkeG7mW5nIGPhu6dhIGVuZXJneSBkcmluayDEkeG6v24gZ2nhuqVjIG5n4bunIiwNCiAgICB4ID0gIlTDrG5oIHRy4bqhbmcgdGnDqnUgdGjhu6UgZW5lcmd5IGRyaW5rIiwNCiAgICB5ID0gIlPhu5EgbmfGsOG7nWkiLA0KICAgIGZpbGwgPSAiVMOsbmggdHLhuqFuZyBnaeG6pWMgbmfhu6ciDQogICkgKw0KICB0aGVtZV9taW5pbWFsKCkNCmBgYA0KDQpfKipOaOG6rW4geMOpdDoqKl8gDQoNCkLhuqNuZyB2w6AgYmnhu4N1IMSR4buTIHRyw6puIGNobyB0aOG6pXkgdHJvbmcgbmjDs20gKipraMO0bmcgdeG7kW5nIG7GsOG7m2MgdMSDbmcgbOG7sWMqKiwgY8OzICoqMjgwIG5nxrDhu51pIGtow7RuZyBi4buLIOG6o25oIGjGsOG7n25nIMSR4bq/biBnaeG6pWMgbmfhu6cqKiAoY2hp4bq/bSBraG/huqNuZyAqKjU2LjAlKiopIHbDoCAqKjE3MyBuZ8aw4budaSBi4buLIOG6o25oIGjGsOG7n25nKiogKGNoaeG6v20gKiozNC42JSoqKS4gVHJvbmcga2hpIMSRw7MsIOG7nyBuaMOzbSAqKmPDsyB14buRbmcgbsaw4bubYyB0xINuZyBs4buxYyoqLCBjaOG7iSBjw7MgKioxNyBuZ8aw4budaSBraMO0bmcgYuG7iyDhuqNuaCBoxrDhu59uZyoqIChjaGnhur9tICoqMy40JSoqKSwgdHJvbmcga2hpIGPDsyAqKjMwIG5nxrDhu51pIGLhu4sg4bqjbmggaMaw4bufbmcqKiAoY2hp4bq/bSAqKjYuMCUqKikuDQoNClThu5VuZyBxdWFuLCB0YSB0aOG6pXkgcuG6sW5nICoqdOG7tyBs4buHIG5nxrDhu51pIGLhu4sg4bqjbmggaMaw4bufbmcgxJHhur9uIGdp4bqlYyBuZ+G7pyBjYW8gaMahbiByw7UgcuG7h3QgdHJvbmcgbmjDs20gY8OzIHXhu5FuZyBuxrDhu5tjIHTEg25nIGzhu7FjKiosIHRyb25nIGtoaSBwaOG6p24gbOG7m24gbmjhu69uZyBuZ8aw4budaSBraMO0bmcgYuG7iyDhuqNuaCBoxrDhu59uZyBs4bqhaSB0aHXhu5ljIG5ow7NtIGtow7RuZyB14buRbmcuIA0KDQojIyMgKio0LjMuMy4gQmnhur9uIEJp4bq/biBzbGVlcF9pbXBhY3RlZCB2w6AgYmV2ZXJhZ2VfdGVhKioNCg0KXyoqTOG6rXAgYuG6o25nIHThuqduIHPhu5EgdsOgIGLhuqNuZyB04bqnbiBzdeG6pXQqKl8NCg0KYGBge3J9DQpkdCRiZXZlcmFnZV90ZWEgPC0gZmFjdG9yKGR0JGJldmVyYWdlX3RlYSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYyhGQUxTRSwgVFJVRSksDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIktow7RuZyB14buRbmcgdHLDoCIsICJDw7MgdeG7kW5nIHRyw6AiKSkNCiMgTOG6rXAgYuG6o25nIHThuqduIHPhu5EgY2jDqW8NCnRrbXQyIDwtIHRhYmxlKGR0JHNsZWVwX2ltcGFjdGVkLCBkdCRiZXZlcmFnZV90ZWEpDQphZGRtYXJnaW5zKHRrbXQyKQ0KcHRrbXQyIDwtIHByb3AudGFibGUodGttdDIpDQphZGRtYXJnaW5zKHB0a210MikNCmBgYA0KDQpfKipM4bqtcCBiaeG7g3UgxJHhu5MqKl8NCg0KYGBge3J9DQojIENodXnhu4NuIHNhbmcgZOG6oW5nIGRhdGEgZnJhbWUgxJHhu4MgduG6vQ0KZGZfcGxvdDIgPC0gYXMuZGF0YS5mcmFtZSh0a210MikNCmNvbG5hbWVzKGRmX3Bsb3QyKSA8LSBjKCJTbGVlcF9JbXBhY3RlZCIsICJCZXZlcmFnZV9UZWEiLCAiQ291bnQiKQ0KDQojIFbhur0gYmnhu4N1IMSR4buTDQpsaWJyYXJ5KGdncGxvdDIpDQpnZ3Bsb3QoZGZfcGxvdDIsIGFlcyh4ID0gQmV2ZXJhZ2VfVGVhLCB5ID0gQ291bnQsIGZpbGwgPSBTbGVlcF9JbXBhY3RlZCkpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjcpLCB3aWR0aCA9IDAuNikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gQ291bnQpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNyksDQogICAgICAgICAgICB2anVzdCA9IC0wLjMsIHNpemUgPSAzLjUpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzZCQUVENiIsICIjMjE3MUI1IikpICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJCaeG7g3UgxJHhu5MgNC40LiDhuqJuaCBoxrDhu59uZyBj4bunYSB2aeG7h2MgdeG7kW5nIHRyw6AgxJHhur9uIGdp4bqlYyBuZ+G7pyIsDQogICAgeCA9ICJUw6xuaCB0cuG6oW5nIHRpw6p1IHRo4bulIHRyw6AiLA0KICAgIHkgPSAiU+G7kSBuZ8aw4budaSIsDQogICAgZmlsbCA9ICJUw6xuaCB0cuG6oW5nIGdp4bqlYyBuZ+G7pyINCiAgKSArDQogIHRoZW1lX21pbmltYWwoKQ0KYGBgDQoNCl8qKk5o4bqtbiB4w6l0OioqXyANCg0KQuG6o25nIHbDoCBiaeG7g3UgxJHhu5MgdHLDqm4gY2hvIHRo4bqleSB0cm9uZyBuaMOzbSAqKmtow7RuZyB14buRbmcgdHLDoCoqLCBjw7MgKioxNDEgbmfGsOG7nWkga2jDtG5nIGLhu4sg4bqjbmggaMaw4bufbmcgxJHhur9uIGdp4bqlYyBuZ+G7pyoqIChjaGnhur9tIGtob+G6o25nICoqMjguMiUqKikgdsOgICoqMTcxIG5nxrDhu51pIGLhu4sg4bqjbmggaMaw4bufbmcqKiAoY2hp4bq/bSAqKjM0LjIlKiopLiBUcm9uZyBraGkgxJHDsywg4bufIG5ow7NtICoqY8OzIHXhu5FuZyB0csOgKiosIGPDsyAqKjE1NiBuZ8aw4budaSBraMO0bmcgYuG7iyDhuqNuaCBoxrDhu59uZyoqIChjaGnhur9tICoqMzEuMiUqKikgdsOgIGNo4buJIGPDsyAqKjMyIG5nxrDhu51pIGLhu4sg4bqjbmggaMaw4bufbmcqKiAoY2hp4bq/bSAqKjYuNCUqKikuDQoNClThu5VuZyBxdWFuLCB0YSBuaOG6rW4gdGjhuqV5IHLhurFuZyAqKnThu7cgbOG7hyBuZ8aw4budaSBi4buLIOG6o25oIGjGsOG7n25nIMSR4bq/biBnaeG6pWMgbmfhu6cgdGjhuqVwIGjGoW4gcsO1IHLhu4d0IHRyb25nIG5ow7NtIGPDsyB14buRbmcgdHLDoCoqLCB0cm9uZyBraGkgcGjhuqduIGzhu5tuIG5o4buvbmcgbmfGsOG7nWkgYuG7iyDhuqNuaCBoxrDhu59uZyBs4bqhaSB0aHXhu5ljIG5ow7NtIGtow7RuZyB14buRbmcuIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5ICoqdmnhu4djIHXhu5FuZyB0csOgIGPDsyB0aOG7gyBraMO0bmcgcGjhuqNpIGzDoCBuZ3V5w6puIG5ow6JuIGNow61uaCBnw6J5IHLhu5FpIGxv4bqhbiBnaeG6pWMgbmfhu6cqKiwgaG/hurdjIHRo4bqtbSBjaMOtIGPDsyB0aOG7gyBsacOqbiBxdWFuIMSR4bq/biAqKm3hu5l0IGzhu5FpIHPhu5FuZyBnacO6cCBj4bqjaSB0aGnhu4duIGdp4bqlYyBuZ+G7pyoqIOG7nyBt4buZdCBz4buRIG5nxrDhu51pLg0KDQojIyMgKio0LjMuNC4gQmnhur9uIHNsZWVwX2ltcGFjdGVkIHbDoCB0aW1lX29mX2RheV9ldmVuaW5nKioNCg0KXyoqTOG6rXAgYuG6o25nIHThuqduIHPhu5EgdsOgIGLhuqNuZyB04bqnbiBzdeG6pXQqKl8NCg0KYGBge3J9DQpkdCR0aW1lX29mX2RheV9ldmVuaW5nIDwtIGZhY3RvcihkdCR0aW1lX29mX2RheV9ldmVuaW5nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYyhGQUxTRSwgVFJVRSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJLaMO0bmcgdeG7kW5nIGJ14buVaSB04buRaSIsICJDw7MgdeG7kW5nIGJ14buVaSB04buRaSIpKQ0KdGttdDMgPC0gdGFibGUoZHQkc2xlZXBfaW1wYWN0ZWQsIGR0JHRpbWVfb2ZfZGF5X2V2ZW5pbmcpDQphZGRtYXJnaW5zKHRrbXQzKQ0KDQpwdGttdDMgPC0gcHJvcC50YWJsZSh0a210MykNCmFkZG1hcmdpbnMocHRrbXQzKQ0KYGBgDQoNCl8qKkzhuq1wIGJp4buDdSDEkeG7kyoqXw0KDQpgYGB7cn0NCiMgVOG6oW8gYuG6o25nIGThu68gbGnhu4d1IHThu6sgYuG6o25nIHThuqduIHPhu5ENCmRmX2V2ZW5pbmcgPC0gYXMuZGF0YS5mcmFtZSh0YWJsZShkdCRzbGVlcF9pbXBhY3RlZCwgZHQkdGltZV9vZl9kYXlfZXZlbmluZykpDQoNCiMgxJDhurd0IHTDqm4gY+G7mXQgY2hvIHLDtSByw6BuZw0KY29sbmFtZXMoZGZfZXZlbmluZykgPC0gYygiU2xlZXBfSW1wYWN0ZWQiLCAiRXZlbmluZ19JbnRha2UiLCAiQ291bnQiKQ0KDQojIFbhur0gYmnhu4N1IMSR4buTIGPhu5l0DQpsaWJyYXJ5KGdncGxvdDIpDQpnZ3Bsb3QoZGZfZXZlbmluZywgYWVzKHggPSBFdmVuaW5nX0ludGFrZSwgeSA9IENvdW50LCBmaWxsID0gU2xlZXBfSW1wYWN0ZWQpKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC43KSwgd2lkdGggPSAwLjYpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IENvdW50KSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjcpLA0KICAgICAgICAgICAgdmp1c3QgPSAtMC4zLCBzaXplID0gMy41KSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiM2QkFFRDYiLCAiIzIxNzFCNSIpKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiQmnhu4N1IMSR4buTIDQuNS4g4bqibmggaMaw4bufbmcgZ2nhuqVjIG5n4bunIHRoZW8gdmnhu4djIHXhu5FuZyBjYWZmZWluZSBideG7lWkgdOG7kWkiLA0KICAgIHggPSAiVHLhuqFuZyB0aMOhaSB0acOqdSB0aOG7pSBjYWZmZWluZSBideG7lWkgdOG7kWkiLA0KICAgIHkgPSAiU+G7kSBuZ8aw4budaSIsDQogICAgZmlsbCA9ICJUw6xuaCB0cuG6oW5nIGdp4bqlYyBuZ+G7pyINCiAgKSArDQogIHRoZW1lX21pbmltYWwoKQ0KYGBgDQoNCl8qKk5o4bqtbiB4w6l0OioqXyANCg0KQuG6o25nIHbDoCBiaeG7g3UgxJHhu5MgdHLDqm4gY2hvIHRo4bqleSB0cm9uZyBuaMOzbSAqKmPDsyB14buRbmcgY2FmZmVpbmUgdsOgbyBideG7lWkgdOG7kWkqKiwgY8OzICoqMTY3IG5nxrDhu51pIGLhu4sg4bqjbmggaMaw4bufbmcgxJHhur9uIGdp4bqlYyBuZ+G7pyoqIChjaGnhur9tIGtob+G6o25nICoqMzMuNCUqKikgdsOgIGNo4buJIGPDsyAqKjY5IG5nxrDhu51pIGtow7RuZyBi4buLIOG6o25oIGjGsOG7n25nKiogKGNoaeG6v20gKioxMy44JSoqKS4gVHJvbmcga2hpIMSRw7MsIOG7nyBuaMOzbSAqKmtow7RuZyB14buRbmcgYnXhu5VpIHThu5FpKiosIGPDsyAqKjIyOCBuZ8aw4budaSBraMO0bmcgYuG7iyDhuqNuaCBoxrDhu59uZyoqIChjaGnhur9tICoqNDUuNiUqKikgdsOgIGNo4buJIGPDsyAqKjM2IG5nxrDhu51pIGLhu4sg4bqjbmggaMaw4bufbmcqKiAoY2hp4bq/bSAqKjcuMiUqKikuDQoNClThu5VuZyB0aOG7gywgY8OzIHRo4buDIHRo4bqleSBy4bqxbmcgKip04bu3IGzhu4cgbmfGsOG7nWkgYuG7iyDhuqNuaCBoxrDhu59uZyBnaeG6pWMgbmfhu6cgY2FvIGjGoW4gxJHDoW5nIGvhu4MgdHJvbmcgbmjDs20gY8OzIHXhu5FuZyBjYWZmZWluZSB2w6BvIGJ14buVaSB04buRaSoqLCB0cm9uZyBraGkgdOG7tyBs4buHIGtow7RuZyBi4buLIOG6o25oIGjGsOG7n25nIGzhuqFpIHThuq1wIHRydW5nIOG7nyBuaMOzbSBraMO0bmcgdeG7kW5nLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBy4bqxbmcgKip2aeG7h2MgdGnDqnUgdGjhu6UgY2FmZmVpbmUgdsOgbyBideG7lWkgdOG7kWkgY8OzIHRo4buDIGzDoCB54bq/dSB04buRIGzDoG0gdMSDbmcgbmd1eSBjxqEgcuG7kWkgbG/huqFuIGdp4bqlYyBuZ+G7pyoqLCB2w6AgbmfGsOG7nWkgc+G7rSBk4bulbmcgbsOqbiBjw6JuIG5o4bqvYyB0aOG7nWkgxJFp4buDbSB14buRbmcgxJHhu4MgxJHhuqNtIGLhuqNvIGNo4bqldCBsxrDhu6NuZyBnaeG6pWMgbmfhu6cuDQoNCiMjICoqNC40LiBLaeG7g20gxJHhu4tuaCBoaeG7h3UgdOG7tyBs4buHKioNCg0KIyMjICoqNC40LjEuIEJp4bq/biBCaeG6v24gc2xlZXBfaW1wYWN0ZWQgdsOgIGJldmVyYWdlX2NvZmZlZSoqDQoNCmBgYHtyfQ0KYWRkbWFyZ2lucyh0a210KQ0KYGBgDQokJA0KcF8xID0gUChcdGV4dHtC4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7p30gXG1pZCBcdGV4dHtLaMO0bmcgdeG7kW5nIGPDoCBwaMOqfSkgXHF1YWQgXHRleHR7KFThu7cgbOG7hyBi4buLIOG6o25oIGjGsOG7n25nIOG7nyBuaMOzbSBraMO0bmcgdeG7kW5nIGPDoCBwaMOqKX0NCiQkDQoNCiQkDQpwXzIgPSBQKFx0ZXh0e0Lhu4sg4bqjbmggaMaw4bufbmcgZ2nhuqVjIG5n4bunfSBcbWlkIFx0ZXh0e0PDsyB14buRbmcgY8OgIHBow6p9KSBccXVhZCBcdGV4dHsoVOG7tyBs4buHIGLhu4sg4bqjbmggaMaw4bufbmcg4bufIG5ow7NtIGPDsyB14buRbmcgY8OgIHBow6opfQ0KJCQNCg0KKipHaeG6oyB0aHV54bq/dCBraeG7g20gxJHhu4tuaDoqKg0KDQokJA0KSF8wOiBwXzEgLSBwXzIgPSAwIFxxdWFkIFx0ZXh0eyhU4bu3IGzhu4cgYuG7iyDhuqNuaCBoxrDhu59uZyBnaeG6pWMgbmfhu6cg4bufIGhhaSBuaMOzbSBi4bqxbmcgbmhhdSl9DQokJA0KDQokJA0KSF8xOiBwXzEgLSBwXzIgPCAwIFxxdWFkIFx0ZXh0eyhU4bu3IGzhu4cgYuG7iyDhuqNuaCBoxrDhu59uZyDhu58gbmjDs20ga2jDtG5nIHXhu5FuZyBjw6AgcGjDqiB0aOG6pXAgaMahbiBuaMOzbSBjw7MgdeG7kW5nIGPDoCBwaMOqKX0NCiQkDQoNCmBgYHtyfQ0KIyBT4buRIG5nxrDhu51pIGLhu4sg4bqjbmggaMaw4bufbmcgZ2nhuqVjIG5n4bunIHRyb25nIHThu6tuZyBuaMOzbSB14buRbmcgY8OgIHBow6oNCmNvdW50c19jb2ZmZWUgPC0gYyh0a210WyJC4buLIOG6o25oIGjGsOG7n25nIiwgIktow7RuZyB14buRbmcgY8OgIHBow6oiXSwNCiAgICAgICAgICAgICAgICAgICB0a210WyJC4buLIOG6o25oIGjGsOG7n25nIiwgIkPDsyB14buRbmcgY8OgIHBow6oiXSkNCg0KIyBU4buVbmcgc+G7kSBuZ8aw4budaSB0cm9uZyB04burbmcgbmjDs20gdeG7kW5nIGPDoCBwaMOqDQp0b3RhbHNfY29mZmVlIDwtIGMoc3VtKHRrbXRbLCAiS2jDtG5nIHXhu5FuZyBjw6AgcGjDqiJdKSwNCiAgICAgICAgICAgICAgICAgICBzdW0odGttdFssICJDw7MgdeG7kW5nIGPDoCBwaMOqIl0pKQ0KDQojIEtp4buDbSDEkeG7i25oIHThu4kgbOG7hyBt4buZdCBwaMOtYTogcDEgPCBwMg0KdGVzdF9jb2ZmZWVfbGVzcyA8LSBwcm9wLnRlc3QoY291bnRzX2NvZmZlZSwgdG90YWxzX2NvZmZlZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlID0gImxlc3MiLCBjb3JyZWN0ID0gRkFMU0UpDQoNCiMgSGnhu4NuIHRo4buLIGvhur90IHF14bqjDQp0ZXN0X2NvZmZlZV9sZXNzDQpgYGANCioqTmjhuq1uIHjDqXQqKg0KDQpW4bubaSBt4bupYyDDvSBuZ2jEqWEgJFxhbHBoYSA9IDVcJSQsIHRhIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBraMO0bmcgKCRIXzAkKSB2w6wgZ2nDoSB0cuG7iyBwLXZhbHVlIHLhuqV0IG5o4buPICgkXGxsIDAuMDUkKS4gKirEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBjw7MgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogxJHhu4Mga2jhurNuZyDEkeG7i25oIHLhurFuZyB04bu3IGzhu4cgYuG7iyDhuqNuaCBoxrDhu59uZyBnaeG6pWMgbmfhu6cg4bufIG5ow7NtIGtow7RuZyB14buRbmcgY8OgIHBow6ogdGjhuqVwIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgbmjDs20gY8OzIHXhu5FuZyBjw6AgcGjDqi4qKg0KDQojIyMgKio0LjQuMi4gQmnhur9uIEJp4bq/biBzbGVlcF9pbXBhY3RlZCB2w6AgYmV2ZXJhZ2VfZW5lcmd5X2RyaW5rKioNCg0KYGBge3J9DQojIEzhuq1wIGLhuqNuZyB04bqnbiBz4buRIGNow6lvDQp0a210MSA8LSB0YWJsZShkdCRzbGVlcF9pbXBhY3RlZCwgZHQkYmV2ZXJhZ2VfZW5lcmd5X2RyaW5rKQ0KYWRkbWFyZ2lucyh0a210MSkNCmBgYA0KDQokJA0KcF8xID0gUChcdGV4dHtC4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7p30gXG1pZCBcdGV4dHtLaMO0bmcgdeG7kW5nIG7GsOG7m2MgdMSDbmcgbOG7sWN9KSBccXVhZCBcdGV4dHsoVOG7tyBs4buHIGLhu4sg4bqjbmggaMaw4bufbmcg4bufIG5ow7NtIGtow7RuZyB14buRbmcpfQ0KJCQNCg0KJCQNCnBfMiA9IFAoXHRleHR7QuG7iyDhuqNuaCBoxrDhu59uZyBnaeG6pWMgbmfhu6d9IFxtaWQgXHRleHR7Q8OzIHXhu5FuZyBuxrDhu5tjIHTEg25nIGzhu7FjfSkgXHF1YWQgXHRleHR7KFThu7cgbOG7hyBi4buLIOG6o25oIGjGsOG7n25nIOG7nyBuaMOzbSBjw7MgdeG7kW5nKX0NCiQkDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6KioNCiQkDQpIXzA6IHBfMSAtIHBfMiA9IDAgXHF1YWQgXHRleHR7KFThu7cgbOG7hyBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7pyDhu58gaGFpIG5ow7NtIGLhurFuZyBuaGF1KX0NCiQkDQoNCiQkDQpIXzE6IHBfMSAtIHBfMiA8IDAgXHF1YWQgXHRleHR7KFThu7cgbOG7hyBi4buLIOG6o25oIGjGsOG7n25nIOG7nyBuaMOzbSBraMO0bmcgdeG7kW5nIG7GsOG7m2MgdMSDbmcgbOG7sWMgdGjhuqVwIGjGoW4gbmjDs20gY8OzIHXhu5FuZyl9DQokJA0KDQpgYGB7cn0NCiMgU+G7kSBuZ8aw4budaSBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7pyB0cm9uZyB04burbmcgbmjDs20NCmNvdW50c19lbmVyZ3kgPC0gYyh0a210MVsiQuG7iyDhuqNuaCBoxrDhu59uZyIsICJLaMO0bmcgdeG7kW5nIGVuZXJneSBkcmluayJdLA0KICAgICAgICAgICAgICAgICAgIHRrbXQxWyJC4buLIOG6o25oIGjGsOG7n25nIiwgIkPDsyB14buRbmcgZW5lcmd5IGRyaW5rIl0pDQoNCiMgVOG7lW5nIHPhu5EgbmfGsOG7nWkgdHJvbmcgdOG7q25nIG5ow7NtDQp0b3RhbHNfZW5lcmd5IDwtIGMoc3VtKHRrbXQxWywgIktow7RuZyB14buRbmcgZW5lcmd5IGRyaW5rIl0pLA0KICAgICAgICAgICAgICAgICAgIHN1bSh0a210MVssICJDw7MgdeG7kW5nIGVuZXJneSBkcmluayJdKSkNCg0KIyBLaeG7g20gxJHhu4tuaCB04buJIGzhu4cgbeG7mXQgcGjDrWE6IHAxIDwgcDINCnRlc3RfZW5lcmd5X2xlc3MgPC0gcHJvcC50ZXN0KGNvdW50c19lbmVyZ3ksIHRvdGFsc19lbmVyZ3ksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZSA9ICJsZXNzIiwgY29ycmVjdCA9IEZBTFNFKQ0KDQojIEhp4buDbiB0aOG7iyBr4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaA0KdGVzdF9lbmVyZ3lfbGVzcw0KYGBgDQoqKk5o4bqtbiB4w6l0KioNCg0KVuG7m2kgbeG7qWMgw70gbmdoxKlhICRcYWxwaGEgPSA1XCUkIHbDoCBnacOhIHRy4buLIHAtdmFsdWUgPSAwLjAwMDMyODQgKHLhuqV0IG5o4buPIGjGoW4gMC4wNSksIHRhICoqYsOhYyBi4buPIGdp4bqjIHRodXnhur90IGtow7RuZyAkSF8wJCoqLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBjw7MgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogxJHhu4Mga2jhurNuZyDEkeG7i25oIHLhurFuZyAqKnThu7cgbOG7hyBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7pyDhu58gbmjDs20ga2jDtG5nIHXhu5FuZyBuxrDhu5tjIHTEg25nIGzhu7FjICgzOC4xOSUpIHRo4bqlcCBoxqFuIMSRw6FuZyBr4buDIHNvIHbhu5tpIG5ow7NtIGPDsyB14buRbmcgbsaw4bubYyB0xINuZyBs4buxYyAoNjMuODMlKSoqLg0KDQojIyMgKio0LjQuMy4gQmnhur9uIEJp4bq/biBzbGVlcF9pbXBhY3RlZCB2w6AgYmV2ZXJhZ2VfdGVhKioNCg0KYGBge3J9DQojIEzhuq1wIGLhuqNuZyB04bqnbiBz4buRIGNow6lvDQp0a210MiA8LSB0YWJsZShkdCRzbGVlcF9pbXBhY3RlZCwgZHQkYmV2ZXJhZ2VfdGVhKQ0KYWRkbWFyZ2lucyh0a210MikNCmBgYA0KDQokJA0KcF8xID0gUChcdGV4dHtC4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7p30gXG1pZCBcdGV4dHtLaMO0bmcgdeG7kW5nIHRyw6B9KQ0KJCQNCg0KJCQNCnBfMiA9IFAoXHRleHR7QuG7iyDhuqNuaCBoxrDhu59uZyBnaeG6pWMgbmfhu6d9IFxtaWQgXHRleHR7Q8OzIHXhu5FuZyB0csOgfSkNCiQkDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6KioNCiQkDQpIXzA6IHBfMSAtIHBfMiA9IDAgXHF1YWQgXHRleHR7KFThu7cgbOG7hyBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7pyDhu58gaGFpIG5ow7NtIGLhurFuZyBuaGF1KX0NCiQkDQoNCg0KJCQNCkhfMTogcF8xIC0gcF8yID4gMCBccXVhZCBcdGV4dHsoVOG7tyBs4buHIGLhu4sg4bqjbmggaMaw4bufbmcg4bufIG5ow7NtIGtow7RuZyB14buRbmcgdHLDoCBjYW8gaMahbiBuaMOzbSBjw7MgdeG7kW5nIHRyw6ApfQ0KJCQNCg0KYGBge3J9DQojIFPhu5EgbmfGsOG7nWkgYuG7iyDhuqNuaCBoxrDhu59uZyBnaeG6pWMgbmfhu6cgdHJvbmcgdOG7q25nIG5ow7NtIHXhu5FuZyB0csOgDQpjb3VudHNfdGVhIDwtIGModGttdDJbIkLhu4sg4bqjbmggaMaw4bufbmciLCAiS2jDtG5nIHXhu5FuZyB0csOgIl0sDQogICAgICAgICAgICAgICAgdGttdDJbIkLhu4sg4bqjbmggaMaw4bufbmciLCAiQ8OzIHXhu5FuZyB0csOgIl0pDQoNCiMgVOG7lW5nIHPhu5EgbmfGsOG7nWkgdHJvbmcgdOG7q25nIG5ow7NtIHXhu5FuZyB0csOgDQp0b3RhbHNfdGVhIDwtIGMoc3VtKHRrbXQyWywgIktow7RuZyB14buRbmcgdHLDoCJdKSwNCiAgICAgICAgICAgICAgICBzdW0odGttdDJbLCAiQ8OzIHXhu5FuZyB0csOgIl0pKQ0KDQojIEtp4buDbSDEkeG7i25oIHThu4kgbOG7hyBt4buZdCBwaMOtYTogcDEgPiBwMg0KdGVzdF90ZWFfZ3JlYXRlciA8LSBwcm9wLnRlc3QoY291bnRzX3RlYSwgdG90YWxzX3RlYSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlID0gImdyZWF0ZXIiLCBjb3JyZWN0ID0gRkFMU0UpDQoNCiMgSGnhu4NuIHRo4buLIGvhur90IHF14bqjIGtp4buDbSDEkeG7i25oDQp0ZXN0X3RlYV9ncmVhdGVyDQpgYGANCioqTmjhuq1uIHjDqXQqKg0KDQpW4bubaSAqKm3hu6ljIMO9IG5naMSpYSAkXGFscGhhID0gNVwlJCoqIHbDoCAqKnAtdmFsdWUgcuG6pXQgbmjhu48gKDwgMi4yZS0xNikqKiwgdGEgKipiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3Qga2jDtG5nICgkSF8wJCkqKi4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXk6ICoqQ8OzIGLhurFuZyBjaOG7qW5nIHRo4buRbmcga8OqIMSR4buDIGto4bqzbmcgxJHhu4tuaCBy4bqxbmcgdOG7tyBs4buHIGLhu4sg4bqjbmggaMaw4bufbmcgZ2nhuqVjIG5n4bunIOG7nyBuaMOzbSBraMO0bmcgdeG7kW5nIHRyw6AgY2FvIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgbmjDs20gY8OzIHXhu5FuZyB0csOgLioqDQoNCiMjIyAqKjQuNC40LiBCaeG6v24gc2xlZXBfaW1wYWN0ZWQgdsOgIHRpbWVfb2ZfZGF5X2V2ZW5pbmcqKg0KDQpgYGB7cn0NCmFkZG1hcmdpbnModGttdDMpDQpgYGANCi0gXCggcF8xID0gUChcdGV4dHtC4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7p30gXG1pZCBcdGV4dHtLaMO0bmcgdeG7kW5nIGJ14buVaSB04buRaX0pIFwpDQoNCi0gXCggcF8yID0gUChcdGV4dHtC4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7p30gXG1pZCBcdGV4dHtDw7MgdeG7kW5nIGJ14buVaSB04buRaX0pIFwpDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6KioNCg0KLSBcKCBIXzA6IHBfMSAtIHBfMiA9IDAgXCkgKFThu7cgbOG7hyBi4buLIOG6o25oIGjGsOG7n25nIGLhurFuZyBuaGF1IGdp4buvYSBoYWkgbmjDs20pDQoNCi0gXCggSF8xOiBwXzEgLSBwXzIgPCAwIFwpIChU4bu3IGzhu4cgYuG7iyDhuqNuaCBoxrDhu59uZyDhu58gbmjDs20ga2jDtG5nIHXhu5FuZyBideG7lWkgdOG7kWkgdGjhuqVwIGjGoW4pDQoNCmBgYHtyfQ0KIyBT4buRIG5nxrDhu51pIGLhu4sg4bqjbmggaMaw4bufbmcgZ2nhuqVjIG5n4bunIHRyb25nIHThu6tuZyBuaMOzbQ0KY291bnRzX2V2ZW5pbmcgPC0gYyh0a210M1siQuG7iyDhuqNuaCBoxrDhu59uZyIsICJLaMO0bmcgdeG7kW5nIGJ14buVaSB04buRaSJdLA0KICAgICAgICAgICAgICAgICAgICB0a210M1siQuG7iyDhuqNuaCBoxrDhu59uZyIsICJDw7MgdeG7kW5nIGJ14buVaSB04buRaSJdKQ0KDQojIFThu5VuZyBz4buRIG5nxrDhu51pIHRyb25nIHThu6tuZyBuaMOzbQ0KdG90YWxzX2V2ZW5pbmcgPC0gYyhzdW0odGttdDNbLCAiS2jDtG5nIHXhu5FuZyBideG7lWkgdOG7kWkiXSksDQogICAgICAgICAgICAgICAgICAgIHN1bSh0a210M1ssICJDw7MgdeG7kW5nIGJ14buVaSB04buRaSJdKSkNCg0KIyBLaeG7g20gxJHhu4tuaCB04buJIGzhu4cgbeG7mXQgcGjDrWE6IHAxIDwgcDINCnRlc3RfZXZlbmluZ19sZXNzIDwtIHByb3AudGVzdChjb3VudHNfZXZlbmluZywgdG90YWxzX2V2ZW5pbmcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmUgPSAibGVzcyIsIGNvcnJlY3QgPSBGQUxTRSkNCg0KIyBIaeG7g24gdGjhu4sga+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmgNCnRlc3RfZXZlbmluZ19sZXNzDQpgYGANCioqTmjhuq1uIHjDqXQqKg0KDQpW4bubaSBwLXZhbHVlIDwgMi4yZS0xNiwgbmjhu48gaMahbiBy4bqldCBuaGnhu4F1IHNvIHbhu5tpIG3hu6ljIMO9IG5naMSpYSBhbHBoYSA9IDUlLCB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3Qga2jDtG5nIChIMCkuIEPDsyBi4bqxbmcgY2jhu6luZyB0aOG7kW5nIGvDqiBjaG8gdGjhuqV5IHLhurFuZyB04bu3IGzhu4cgYuG7iyDhuqNuaCBoxrDhu59uZyBnaeG6pWMgbmfhu6cg4bufIG5ow7NtIGtow7RuZyB14buRbmcgYnXhu5VpIHThu5FpIHRo4bqlcCBoxqFuIMSRw6FuZyBr4buDIHNvIHbhu5tpIG5ow7NtIGPDsyB14buRbmcgYnXhu5VpIHThu5FpDQoNCg0KIyMgKio0LjUuUmVsYXRpdmUgUmlzayB2w6Aga2hv4bqjbmcgxrDhu5tjIGzGsOG7o25nIGNobyBSZWxhdGl2ZSBSaXNrKioNCg0KIyMjICoqNC41LjEuIEJp4bq/biBCaeG6v24gc2xlZXBfaW1wYWN0ZWQgdsOgIGJldmVyYWdlX2NvZmZlZSoqDQoNCmBgYHtyfQ0KcnIgPC0gdGFibGUoZHQkYmV2ZXJhZ2VfY29mZmVlLGR0JHNsZWVwX2ltcGFjdGVkKQ0KcnI8LSByclssIGMoIkLhu4sg4bqjbmggaMaw4bufbmciLCAiS2jDtG5nIGLhu4sg4bqjbmggaMaw4bufbmciKV0NCmFkZG1hcmdpbnMocnIpDQpSZWxSaXNrKHJyLCBjb25mLmxldmVsID0gLjk1KQ0KYGBgDQpfKipOaOG6rW4geMOpdDoqKl8gDQoNCi0gUmVsYXRpdmUgUmlzayBnaeG7r2EgYmnhur9uIGBzbGVlcF9pbXBhY3RlZGAgdsOgIGBiZXZlcmFnZV9jb2ZmZWVgIGzDoCAqKjAuNDk1ODUwMyoqLCBuaOG7jyBoxqFuIDEuIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IHLhurFuZyAqKm5nxrDhu51pIGtow7RuZyB14buRbmcgY8OgIHBow6ogY8OzIG5ndXkgY8ahIGLhu4sg4bqjbmggaMaw4bufbmcgxJHhur9uIGdp4bqlYyBuZ+G7pyB0aOG6pXAgaMahbioqIHNvIHbhu5tpIG5nxrDhu51pIGPDsyB14buRbmcgY8OgIHBow6ogKGNo4buJIGLhurFuZyBraG/huqNuZyAqKjQ5LjYlKiogc28gduG7m2kgbmjDs20gY8OzIHXhu5FuZyBjw6AgcGjDqikuDQoNCi0gS2hv4bqjbmcgdGluIGPhuq15IDk1JSBj4bunYSBSUiBsw6AgdOG7qyAqKjAuMzg3OCoqIMSR4bq/biAqKjAuNjI4MSoqLiDEkGnhu4F1IG7DoHkgY2jhu6luZyBtaW5oIHLhurFuZyAqKm3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIHZp4buHYyB14buRbmcgY8OgIHBow6ogdsOgIHTDrG5oIHRy4bqhbmcg4bqjbmggaMaw4bufbmcgxJHhur9uIGdp4bqlYyBuZ+G7pyBsw6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqioqLg0KDQotIEvhur90IHF14bqjIGPhu6duZyBj4buRIGdp4bqjIHRodXnhur90IHLhurFuZyAqKnRpw6p1IHRo4bulIGPDoCBwaMOqIGPDsyB0aOG7gyBsw6BtIHN1eSBnaeG6o20gY2jhuqV0IGzGsOG7o25nIGdp4bqlYyBuZ+G7pyoqLCB2w6Agbmjhu69uZyBuZ8aw4budaSAqKmtow7RuZyB14buRbmcgY8OgIHBow6oqKiBjw7MgeHUgaMaw4bubbmcgKirDrXQgYuG7iyDhuqNuaCBoxrDhu59uZyBoxqFuKiogduG7gSBnaeG6pWMgbmfhu6cuDQoNCiMjIyAqKjQuNS4yLiBCaeG6v24gQmnhur9uIHNsZWVwX2ltcGFjdGVkIHbDoCBiZXZlcmFnZV9lbmVyZ3lfZHJpbmsqKg0KDQpgYGB7cn0NCnJyMSA8LSB0YWJsZShkdCRiZXZlcmFnZV9lbmVyZ3lfZHJpbmssZHQkc2xlZXBfaW1wYWN0ZWQpDQpycjEgPC0gcnIxWywgYygiQuG7iyDhuqNuaCBoxrDhu59uZyIsICJLaMO0bmcgYuG7iyDhuqNuaCBoxrDhu59uZyIpXQ0KYWRkbWFyZ2lucyhycjEpDQpSZWxSaXNrKHJyMSwgY29uZi5sZXZlbCA9IC45NSkNCmBgYA0KDQpfKipOaOG6rW4geMOpdDoqKl8gDQoNCi0gKipSZWxhdGl2ZSBSaXNrKiogZ2nhu69hIGJp4bq/biBgc2xlZXBfaW1wYWN0ZWRgIHbDoCBgYmV2ZXJhZ2VfZW5lcmd5X2RyaW5rYCBsw6AgKiowLjU5ODMqKiwgdOG7qWMgbMOgICoqbmfGsOG7nWkga2jDtG5nIHXhu5FuZyBuxrDhu5tjIHTEg25nIGzhu7FjIGPDsyBuZ3V5IGPGoSBi4buLIOG6o25oIGjGsOG7n25nIMSR4bq/biBnaeG6pWMgbmfhu6cgY2jhu4kgYuG6sW5nIGtob+G6o25nIDU5LjglIHNvIHbhu5tpIG5nxrDhu51pIGPDsyB14buRbmcgbsaw4bubYyB0xINuZyBs4buxYyoqLg0KDQotICoqS2hv4bqjbmcgdGluIGPhuq15IDk1JSoqIGPhu6dhIFJSIGzDoCB04burICoqMC40ODEyKiogxJHhur9uICoqMC43ODg1KiogIGNobyB0aOG6pXkgcuG6sW5nICoqbeG7kWkgbGnDqm4gaOG7hyBuw6B5IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6oqKi4NCg0KLSDEkGnhu4F1IG7DoHkgxJHhu5NuZyBuZ2jEqWEgduG7m2kgdmnhu4djICoqdmnhu4djIHRpw6p1IHRo4bulIG7GsOG7m2MgdMSDbmcgbOG7sWMgY8OzIHRo4buDIGzDoG0gdMSDbmcgbmd1eSBjxqEgYuG7iyDhuqNuaCBoxrDhu59uZyDEkeG6v24gZ2nhuqVjIG5n4bunKiouIE5o4buvbmcgbmfGsOG7nWkgKipraMO0bmcgdGnDqnUgdGjhu6Ugbsaw4bubYyB0xINuZyBs4buxYyBjw7MgeHUgaMaw4bubbmcgw610IGLhu4sgcuG7kWkgbG/huqFuIGdp4bqlYyBuZ+G7pyBoxqFuKiogc28gduG7m2kgbmjDs20gY8OzIHPhu60gZOG7pW5nLg0KDQojIyMgKio0LjUuMy4gQmnhur9uIEJp4bq/biBzbGVlcF9pbXBhY3RlZCB2w6AgYmV2ZXJhZ2VfdGVhKioNCg0KYGBge3J9DQpycjIgPC0gdGFibGUoZHQkYmV2ZXJhZ2VfdGVhLGR0JHNsZWVwX2ltcGFjdGVkKQ0KcnIyIDwtIHJyMlssIGMoIkLhu4sg4bqjbmggaMaw4bufbmciLCAiS2jDtG5nIGLhu4sg4bqjbmggaMaw4bufbmciKV0NCmFkZG1hcmdpbnMocnIyKQ0KUmVsUmlzayhycjIsIGNvbmYubGV2ZWwgPSAuOTUpDQpgYGANCg0KXyoqTmjhuq1uIHjDqXQ6KipfIA0KDQotICoqUmVsYXRpdmUgUmlzayoqIGdp4buvYSBiaeG6v24gYHNsZWVwX2ltcGFjdGVkYCB2w6AgYGJldmVyYWdlX3RlYWAgbMOgICoqMy4yMjAqKiwgdOG7qWMgbMOgICoqbmd1eSBjxqEgYuG7iyDhuqNuaCBoxrDhu59uZyDEkeG6v24gZ2nhuqVjIG5n4bunIOG7nyBuaMOzbSBraMO0bmcgdeG7kW5nIHRyw6AgY2FvIGfhuqVwIGtob+G6o25nIDMuMjIgbOG6p24gc28gduG7m2kgbmjDs20gY8OzIHXhu5FuZyB0csOgKiouDQoNCi0gKipLaG/huqNuZyB0aW4gY+G6rXkgOTUlKiogbMOgIHThu6sgKioyLjMzNyoqIMSR4bq/biAqKjQuNTEyKiogY2hvIHRo4bqleSBy4bqxbmcgKipt4buRaSBsacOqbiBo4buHIGdp4buvYSB2aeG7h2MgdeG7kW5nIHRyw6AgdsOgIHTDrG5oIHRy4bqhbmcg4bqjbmggaMaw4bufbmcgZ2nhuqVjIG5n4bunIGzDoCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqKiouDQoNCi0gxJBp4buBdSBuw6B5IG5n4bulIMO9IHLhurFuZyAqKm5o4buvbmcgbmfGsOG7nWkga2jDtG5nIHXhu5FuZyB0csOgIGPDsyBuZ3V5IGPGoSBjYW8gaMahbiDEkcOhbmcga+G7gyBi4buLIOG6o25oIGjGsOG7n25nIMSR4bq/biBnaeG6pWMgbmfhu6cqKiwgdHJvbmcga2hpICoqdmnhu4djIHXhu5FuZyB0csOgIGPDsyB0aOG7gyBsacOqbiBxdWFuIMSR4bq/biBjaOG6pXQgbMaw4bujbmcgZ2nhuqVjIG5n4bunIHThu5F0IGjGoW4qKiDhu58gbeG7mXQgc+G7kSDEkeG7kWkgdMaw4bujbmcuDQoNCiMjIyAqKjQuNS40LiBCaeG6v24gc2xlZXBfaW1wYWN0ZWQgdsOgIHRpbWVfb2ZfZGF5X2V2ZW5pbmcqKg0KDQpgYGB7cn0NCnJyMyA8LSB0YWJsZShkdCR0aW1lX29mX2RheV9ldmVuaW5nLGR0JHNsZWVwX2ltcGFjdGVkKQ0KcnIzIDwtIHJyM1ssIGMoIkLhu4sg4bqjbmggaMaw4bufbmciLCAiS2jDtG5nIGLhu4sg4bqjbmggaMaw4bufbmciKV0NCmFkZG1hcmdpbnMocnIzKQ0KUmVsUmlzayhycjMsIGNvbmYubGV2ZWwgPSAuOTUpDQpgYGANCg0KXyoqTmjhuq1uIHjDqXQ6KipfIA0KDQotICoqUmVsYXRpdmUgUmlzayoqIGdp4buvYSBiaeG6v24gYHNsZWVwX2ltcGFjdGVkYCB2w6AgYHRpbWVfb2ZfZGF5X2V2ZW5pbmdgIGzDoCAqKjAuMTkzKiosIHThu6ljIGzDoCAqKm5o4buvbmcgbmfGsOG7nWkga2jDtG5nIHRpw6p1IHRo4bulIGNhZmZlaW5lIHbDoG8gYnXhu5VpIHThu5FpIGPDsyBuZ3V5IGPGoSBi4buLIOG6o25oIGjGsOG7n25nIMSR4bq/biBnaeG6pWMgbmfhu6cgY2jhu4kgYuG6sW5nIGtob+G6o25nIDE5LjMlIHNvIHbhu5tpIG5o4buvbmcgbmfGsOG7nWkgY8OzIHRpw6p1IHRo4bulIHbDoG8gYnXhu5VpIHThu5FpKiouDQoNCi0gKipLaG/huqNuZyB0aW4gY+G6rXkgOTUlKiogdOG7qyAqKjAuMTQwMSoqIMSR4bq/biAqKjAuMjYxOCoqIGNobyB0aOG6pXkgKipr4bq/dCBxdeG6oyBuw6B5IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6oqKi4NCg0KLSDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBy4bqxbmcgKip2aeG7h2MgdGnDqnUgdGjhu6UgY2FmZmVpbmUgdsOgbyBideG7lWkgdOG7kWkgY8OzIGxpw6puIHF1YW4gY2jhurd0IGNo4bq9IMSR4bq/biB2aeG7h2MgYuG7iyDhuqNuaCBoxrDhu59uZyDEkeG6v24gZ2nhuqVjIG5n4bunKiouIE5o4buvbmcgbmfGsOG7nWkgdeG7kW5nIGNhZmZlaW5lIHbDoG8gYnXhu5VpIHThu5FpICoqY8OzIGto4bqjIG7Eg25nIGLhu4sg4bqjbmggaMaw4bufbmcgZ2nhuqVjIG5n4bunIGNhbyBoxqFuIMSRw6FuZyBr4buDKiogc28gduG7m2kgbmjhu69uZyBuZ8aw4budaSBraMO0bmcgdeG7kW5nIHbDoG8gdGjhu51pIMSRaeG7g20gbsOgeS4NCg0KIyMgKio0LjYuIE9kZHMgcmF0aW8gdsOgIGtob+G6o25nIMaw4bubYyBsxrDhu6NuZyBjaG8gT2RkcyByYXRpbyoqDQoNCiMjIyAqKjQuNi4xLiBCaeG6v24gQmnhur9uIHNsZWVwX2ltcGFjdGVkIHbDoCBiZXZlcmFnZV9jb2ZmZWUqKg0KDQpgYGB7cn0NCm9yIDwtIHRhYmxlKGR0JGJldmVyYWdlX2NvZmZlZSxkdCRzbGVlcF9pbXBhY3RlZCkNCm9yIDwtIG9yWywgYygiQuG7iyDhuqNuaCBoxrDhu59uZyIsICJLaMO0bmcgYuG7iyDhuqNuaCBoxrDhu59uZyIpXQ0KYWRkbWFyZ2lucyhvcikNCk9kZHNSYXRpbyhvciwgY29uZi5sZXZlbCA9IC45NSkNCmBgYA0KDQpfKipOaOG6rW4geMOpdDoqKl8gDQoNCi0gT2RkcyBj4bunYSB2aeG7h2MgYuG7iyDhuqNuaCBoxrDhu59uZyBnaeG6pWMgbmfhu6cg4bufIG5ow7NtIGtow7RuZyB14buRbmcgY8OgIHBow6ogY2jhu4kgYuG6sW5nIDMxLjUlIHNvIHbhu5tpIG9kZHMg4bufIG5ow7NtIGPDsyB14buRbmcgY8OgIHBow6ouIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IHLhurFuZyBuZ8aw4budaSBraMO0bmcgdeG7kW5nIGPDoCBwaMOqIGPDsyBraOG6oyBuxINuZyBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7pyB0aOG6pXAgaMahbiDEkcOhbmcga+G7gyBzbyB24bubaSBuZ8aw4budaSB14buRbmcgY8OgIHBow6ouDQoNCi0gKipLaG/huqNuZyB0aW4gY+G6rXkgOTUlKiogY+G7p2EgT2RkcyBSYXRpbyBu4bqxbSB0cm9uZyBraG/huqNuZyB04burICoqMC4yMTYxIMSR4bq/biAwLjQ1OTYqKi4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkga+G6v3QgcXXhuqMgbMOgICoqY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqioqLCB2w6AgKip2aeG7h2MgdGnDqnUgdGjhu6UgY8OgIHBow6ogY8OzIG3hu5FpIGxpw6puIGjhu4cgxJHDoW5nIGvhu4MgduG7m2kgY2jhuqV0IGzGsOG7o25nIGdp4bqlYyBuZ+G7pyoqLg0KDQojIyMgKio0LjYuMi4gQmnhur9uIEJp4bq/biBzbGVlcF9pbXBhY3RlZCB2w6AgYmV2ZXJhZ2VfZW5lcmd5X2RyaW5rKioNCg0KYGBge3J9DQpvcjEgPC0gdGFibGUoZHQkYmV2ZXJhZ2VfZW5lcmd5X2RyaW5rLGR0JHNsZWVwX2ltcGFjdGVkKQ0Kb3IxIDwtIG9yMVssIGMoIkLhu4sg4bqjbmggaMaw4bufbmciLCAiS2jDtG5nIGLhu4sg4bqjbmggaMaw4bufbmciKV0NCmFkZG1hcmdpbnMob3IxKQ0KT2Rkc1JhdGlvKG9yMSwgY29uZi5sZXZlbCA9IC45NSkNCmBgYA0KDQpfKipOaOG6rW4geMOpdDoqKl8NCg0KLSBPZGRzIGPhu6dhIHZp4buHYyBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7pyDhu58gbmjDs20ga2jDtG5nIHXhu5FuZyBuxrDhu5tjIHTEg25nIGzhu7FjIGNo4buJIGLhurFuZyAzNSUgc28gduG7m2kgb2RkcyDhu58gbmjDs20gY8OzIHXhu5FuZyBuxrDhu5tjIHTEg25nIGzhu7FjLiBIYXkgbsOzaSBjw6FjaCBraMOhYywgbmfGsOG7nWkgY8OzIHXhu5FuZyBlbmVyZ3kgZHJpbmsgY8OzIG5ndXkgY8ahIGLhu4sg4bqjbmggaMaw4bufbmcgZ2nhuqVjIG5n4bunIGNhbyBoxqFuIGfhuqduIDMgbOG6p24gc28gduG7m2kgbmfGsOG7nWkga2jDtG5nIHXhu5FuZy4NCg0KLSAqKktob+G6o25nIHRpbiBj4bqteSA5NSUqKiBj4bunYSBPZGRzIFJhdGlvIG7hurFtIHRyb25nIGtob+G6o25nIHThu6sgKiowLjE4NzUgxJHhur9uIDAuNjUzOCoqLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBr4bq/dCBxdeG6oyBsw6AgKipjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqKiosIHbDoCBjw7MgdGjhu4MgKipr4bq/dCBsdeG6rW4gcuG6sW5nIHZp4buHYyB14buRbmcgbsaw4bubYyB0xINuZyBs4buxYyBjw7MgbGnDqm4gcXVhbiDEkeG6v24gdmnhu4djIGzDoG0gZ2nhuqNtIGNo4bqldCBsxrDhu6NuZyBnaeG6pWMgbmfhu6cqKiBj4bunYSBuZ8aw4budaSBkw7luZy4NCg0KIyMjICoqNC42LjMuIEJp4bq/biBCaeG6v24gc2xlZXBfaW1wYWN0ZWQgdsOgIGJldmVyYWdlX3RlYSoqDQoNCmBgYHtyfQ0Kb3IyIDwtIHRhYmxlKGR0JGJldmVyYWdlX3RlYSxkdCRzbGVlcF9pbXBhY3RlZCkNCm9yMiA8LSBvcjJbLCBjKCJC4buLIOG6o25oIGjGsOG7n25nIiwgIktow7RuZyBi4buLIOG6o25oIGjGsOG7n25nIildDQphZGRtYXJnaW5zKG9yMikNCk9kZHNSYXRpbyhvcjIsIGNvbmYubGV2ZWwgPSAuOTUpDQpgYGANCg0KXyoqTmjhuq1uIHjDqXQ6KipfDQoNCi0gT2RkcyBj4bunYSB2aeG7h2MgYuG7iyDhuqNuaCBoxrDhu59uZyBnaeG6pWMgbmfhu6cg4bufIG5ow7NtIGtow7RuZyB14buRbmcgdHLDoCBjYW8gZ+G6pXAgNS45MSBs4bqnbiBzbyB24bubaSBvZGRzIGPhu6dhIG5ow7NtIGPDsyB14buRbmcgdHLDoC4uIMSQaeG7gXUgbsOgeSBjw7MgbmdoxKlhIGzDoCAqKmto4bqjIG7Eg25nIGLhu4sg4bqjbmggaMaw4bufbmcgxJHhur9uIGdp4bqlYyBuZ+G7pyDhu58gbmjDs20ga2jDtG5nIHXhu5FuZyB0csOgIGNhbyBn4bqlcCBn4bqnbiA2IGzhuqduKiogc28gduG7m2kgbmjDs20gY8OzIHXhu5FuZyB0csOgLg0KDQotICoqS2hv4bqjbmcgdGluIGPhuq15IDk1JSoqIGPhu6dhIE9kZHMgUmF0aW8gbMOgICoqWzMuODA7IDkuMTldKiouIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IHLhurFuZyBr4bq/dCBxdeG6oyBsw6AgKipjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqKiosIHbDoCBjw7MgdGjhu4Mga+G6v3QgbHXhuq1uIHLhurFuZyAqKnZp4buHYyBraMO0bmcgdeG7kW5nIHRyw6AgY8OzIGxpw6puIHF1YW4gxJHDoW5nIGvhu4MgxJHhur9uIHZp4buHYyB0xINuZyBraOG6oyBuxINuZyBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7pyoqLg0KDQojIyMgKio0LjYuNC4gQmnhur9uIHNsZWVwX2ltcGFjdGVkIHbDoCB0aW1lX29mX2RheV9ldmVuaW5nKioNCg0KYGBge3J9DQpvcjMgPC0gdGFibGUoZHQkdGltZV9vZl9kYXlfZXZlbmluZyxkdCRzbGVlcF9pbXBhY3RlZCkNCm9yMyA8LSBvcjNbLCBjKCJC4buLIOG6o25oIGjGsOG7n25nIiwgIktow7RuZyBi4buLIOG6o25oIGjGsOG7n25nIildDQphZGRtYXJnaW5zKG9yMykNCk9kZHNSYXRpbyhvcjMsIGNvbmYubGV2ZWwgPSAuOTUpDQpgYGANCl8qKk5o4bqtbiB4w6l0OioqXw0KDQotIE9kZHMgY+G7p2Egdmnhu4djIGLhu4sg4bqjbmggaMaw4bufbmcgZ2nhuqVjIG5n4bunIOG7nyBuaMOzbSBraMO0bmcgdeG7kW5nIHbDoG8gYnXhu5VpIHThu5FpIGNo4buJIGLhurFuZyA2LjUlIHNvIHbhu5tpIG9kZHMgY+G7p2EgbmjDs20gY8OzIHXhu5FuZyB2w6BvIGJ14buVaSB04buRaS4gTsOzaSBjw6FjaCBraMOhYywgbmfGsOG7nWkgY8OzIHXhu5FuZyDEkeG7kyB14buRbmcgY2jhu6lhIGNhZmZlaW5lIHbDoG8gYnXhu5VpIHThu5FpIGPDsyBuZ3V5IGPGoSBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7pyBjYW8gZ+G6pXAga2hv4bqjbmcgMTUuMyBs4bqnbiBzbyB24bubaSBuZ8aw4budaSBraMO0bmcgdeG7kW5nLg0KDQotICoqS2hv4bqjbmcgdGluIGPhuq15IDk1JSoqIGNobyBPZGRzIFJhdGlvIGzDoCAqKlswLjA0MjsgMC4xMDJdKiogY2hvIHRo4bqleSBr4bq/dCBxdeG6oyBuw6B5IGzDoCAqKmPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6oqKi4NCg0KLSBL4bq/dCBxdeG6oyBuw6B5IGNobyB0aOG6pXkgY8OzIG3hu5FpIGxpw6puIGjhu4cgY2jhurd0IGNo4bq9IGdp4buvYSAqKnZp4buHYyB14buRbmcgY2FmZmVpbmUgdsOgbyBideG7lWkgdOG7kWkgdsOgIG5ndXkgY8ahIGLhu4sg4bqjbmggaMaw4bufbmcgxJHhur9uIGdp4bqlYyBuZ+G7pyoqLiBD4bulIHRo4buDLCBuaOG7r25nIG5nxrDhu51pIHXhu5FuZyBjYWZmZWluZSB2w6BvIGJ14buVaSB04buRaSBjw7MgKipuZ3V5IGPGoSBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7pyBjYW8gaMahbiDEkcOhbmcga+G7gyoqIHNvIHbhu5tpIG5o4buvbmcgbmfGsOG7nWkga2jDtG5nIHXhu5FuZyB2w6BvIHRo4budaSDEkWnhu4NtIG7DoHkuDQoNCiMjICoqNC43LiBNw7QgaMOsbmggaOG7k2kgcXV5IMSRxqFuKioNCg0KIyMjICoqNC43LjEuIE3DtCBow6xuaCBMb2dpdCoqDQoNCiQkDQpIXzA6IFx0ZXh0e0Jp4bq/biBraMO0bmcgY8OzIOG6o25oIGjGsOG7n25nIMSR4bq/biB4w6FjIHN14bqldCBnaeG6pWMgbmfhu6cgYuG7iyDhuqNuaCBoxrDhu59uZ30NCiQkDQokJA0KSF8xOiBcdGV4dHtCaeG6v24gY8OzIOG6o25oIGjGsOG7n25nIMSR4bq/biB4w6FjIHN14bqldCBnaeG6pWMgbmfhu6cgYuG7iyDhuqNuaCBoxrDhu59uZ30NCiQkDQpUcsaw4bubYyB0acOqbiwgdMOhYyBnaeG6oyB0aOG7sWMgaGnhu4duIGPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyDEkcahbiBiaeG6v24sIG3hu5dpIG3DtCBow6xuaCBjaOG7iSBiYW8gZ+G7k20gbeG7mXQgYmnhur9uIGdp4bqjaSB0aMOtY2ggbmjhurFtIHBow6JuIHTDrWNoIHJpw6puZyBs4bq7IOG6o25oIGjGsOG7n25nIGPhu6dhIHThu6tuZyB54bq/dSB04buRIMSR4bq/biBraOG6oyBuxINuZyDhuqNuaCBoxrDhu59uZyDEkeG6v24gZ2nhuqVjIG5n4bunLiANCg0KIyMjIyAqKio0LjcuMS4xLiBCaeG6v24gYmV2ZXJhZ2VfY29mZmVlKioqDQoNCmBgYHtyfQ0KIyBU4bqhbyBiaeG6v24gbmjhu4sgcGjDom4gbeG7m2kgY2hvIG3DtCBow6xuaA0KZHQkc2xlZXBfYmluYXJ5IDwtIGlmZWxzZShkdCRzbGVlcF9pbXBhY3RlZCA9PSAiQuG7iyDhuqNuaCBoxrDhu59uZyIsIDEsIDApDQoNCiMgQ2jhuqF5IG3DtCBow6xuaCBsb2dpc3RpYw0KeHN0dC5NTCA8LSBnbG0oc2xlZXBfYmluYXJ5IH4gYmV2ZXJhZ2VfY29mZmVlLCBkYXRhID0gZHQsIGZhbWlseSA9IGJpbm9taWFsKQ0Kc3VtbWFyeSh4c3R0Lk1MKQ0KYGBgDQoNCmBgYHtyfQ0KIyBNw7QgaMOsbmggaOG7k2kgcXV5IGxvZ2lzdGljIHbhu5tpIGJp4bq/biBiZXZlcmFnZV9jb2ZmZWUNCnJlZ2xvZ2l0X2NvZmZlZSA8LSBnbG0oc2xlZXBfYmluYXJ5IH4gYmV2ZXJhZ2VfY29mZmVlLCBkYXRhID0gZHQsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAnbG9naXQnKSkNCnN1bW1hcnkocmVnbG9naXRfY29mZmVlKQ0KYGBgDQoNCl8qKk5o4bqtbiB4w6l0OioqXw0KDQpIw6BtIGjhu5NpIHF1eSBsb2dpc3RpYyDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcgbmjGsCBzYXU6DQoNCiQkDQpcbG5cbGVmdChcZnJhY3tcaGF0e1xwaX19ezEgLSBcaGF0e1xwaX19XHJpZ2h0KSA9IC0xLjAyNjIgKyAxLjE1NDYgXGNkb3QgXHRleHR7YmV2ZXJhZ2VfY29mZmVlfQ0KJCQNCg0KDQp8IEJp4bq/biAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOaMOzbSBzbyBzw6FuaCAgICAgICAgICAgICAgfCBI4buHIHPhu5EgKM6yKSB8IHAtdmFsdWUgICB8IE9kZHMgUmF0aW8gKGVezrIpIHwgRGnhu4VuIGdp4bqjaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgQ8OzIHXhu5FuZyBjw6AgcGjDqiB8S2jDtG5nIHXhu5FuZyBjw6AgcGjDqiB8IDEuMTUgICAgICB8IDIuMDFlLTA5ICB8IDMuMTYgICAgICAgICAgICAgfCBOZ8aw4budaSAqKmPDsyB14buRbmcgY8OgIHBow6oqKiBjw7Mgb2RkcyBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7pyBjYW8gZ+G6pXAgMyBs4bqnbiBzbyB24bubaSBuZ8aw4budaSAqKmtow7RuZyB14buRbmcgY8OgIHBow6oqKiAoKmPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogbeG6oW5oKikuIHwNCg0KXyoqS+G6v3QgbHXhuq1uOioqXw0KDQpL4bq/dCBxdeG6oyBo4buTaSBxdXkgbG9naXN0aWMgY2hvIHRo4bqleSBiaeG6v24gdGjDs2kgcXVlbiB14buRbmcgY8OgIHBow6ogKGJldmVyYWdlX2NvZmZlZSkgY8OzIOG6o25oIGjGsOG7n25nIMSRw6FuZyBr4buDIMSR4bq/biBraOG6oyBuxINuZyBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7py4gQ+G7pSB0aOG7gywgbmjhu69uZyBuZ8aw4budaSBjw7MgdeG7kW5nIGPDoCBwaMOqIGPDsyBvZGRzIGLhu4sg4bqjbmggaMaw4bufbmcgZ2nhuqVjIG5n4bunIGNhbyBoxqFuIGtob+G6o25nIDMuMTYgbOG6p24gc28gduG7m2kgbmjhu69uZyBuZ8aw4budaSBraMO0bmcgdeG7kW5nIGPDoCBwaMOqLiBI4buHIHPhu5EgaOG7k2kgcXV5IGzDoCAxLjE1IHbhu5tpIHAtdmFsdWUgPSAyLjAxZS0wOSwgbmjhu48gaMahbiBt4bupYyDDvSBuZ2jEqWEgNSUsIGNobyB0aOG6pXkga+G6v3QgcXXhuqMgbsOgeSBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHLhuqV0IG3huqFuaC4gxJBp4buBdSBuw6B5IMSR4buTbmcgbmdoxKlhIHbhu5tpIHZp4buHYyB0aMOzaSBxdWVuIHXhu5FuZyBjw6AgcGjDqiBsw6AgbeG7mXQgeeG6v3UgdOG7kSBjw7MgbGnDqm4gcXVhbiByw7UgcuG7h3QgxJHhur9uIGNo4bqldCBsxrDhu6NuZyBnaeG6pWMgbmfhu6cgdsOgIGPhuqduIMSRxrDhu6NjIHhlbSB4w6l0IHRyb25nIGPDoWMgcGjDom4gdMOtY2ggbGnDqm4gcXVhbiDEkeG6v24gc+G7qWMga2jhu49lIGdp4bqlYyBuZ+G7py4NCg0KS2hv4bqjbmcgdGluIGPhuq15IGNobyBjw6FjIGjhu4cgc+G7kSBj4bunYSBtw7QgaMOsbmg6DQoNCmBgYHtyfQ0KY29uZmludChyZWdsb2dpdF9jb2ZmZWUpDQpgYGANCg0KXyoqTmjhuq1uIHjDqXQ6KipfDQoNCktob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIGjhu4cgc+G7kSBo4buTaSBxdXkgY+G7p2EgKipiaeG6v24gYmV2ZXJhZ2VfY29mZmVlKiogbMOgIHThu6sgMC43ODExIMSR4bq/biAxLjUzNjUuIFbDrCB0b8OgbiBi4buZIGtob+G6o25nIG7DoHkgxJHhu4F1IGzhu5tuIGjGoW4gMCwgxJFp4buBdSBuw6B5IGNobyB0aOG6pXkgcuG6sW5nIGJp4bq/biBiZXZlcmFnZV9jb2ZmZWUgY8OzIOG6o25oIGjGsOG7n25nIGTGsMahbmcgdsOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogxJHhur9uIGto4bqjIG7Eg25nIGLhu4sg4bqjbmggaMaw4bufbmcgZ2nhuqVjIG5n4bunLiBOw7NpIGPDoWNoIGtow6FjLCBuaOG7r25nIG5nxrDhu51pIGPDsyB14buRbmcgY8OgIHBow6ogY8OzIHh1IGjGsOG7m25nIGThu4UgYuG7iyDhuqNuaCBoxrDhu59uZyDEkeG6v24gZ2nhuqVjIG5n4bunIGjGoW4gc28gduG7m2kgbmjhu69uZyBuZ8aw4budaSBraMO0bmcgdeG7kW5nLg0KDQojIyMjICoqKjQuNy4xLjIuIEJp4bq/biBiZXZlcmFnZV9lbmVyZ3lfZHJpbmsqKioNCg0KYGBge3J9DQojIE3DtCBow6xuaCBo4buTaSBxdXkgbG9naXN0aWMgduG7m2kgYmnhur9uIGJldmVyYWdlX2VuZXJneV9kcmluaw0KcmVnbG9naXRfZW5lcmd5IDwtIGdsbShzbGVlcF9iaW5hcnkgfiBiZXZlcmFnZV9lbmVyZ3lfZHJpbmssIA0KICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImxvZ2l0IiksIA0KICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZHQpDQpzdW1tYXJ5KHJlZ2xvZ2l0X2VuZXJneSkNCmBgYA0KDQpfKipOaOG6rW4geMOpdDoqKl8NCg0KKipQaMawxqFuZyB0csOsbmggaOG7k2kgcXV5OioqDQoNCiQkDQpcbG5cbGVmdChcZnJhY3tcaGF0e1xwaX19ezEgLSBcaGF0e1xwaX19XHJpZ2h0KSA9IC0wLjQ4MTUgKyAxLjA0OTUgXGNkb3QgXHRleHR7YmV2ZXJhZ2VfZW5lcmd5X2RyaW5rfQ0KJCQNCg0KfCBCaeG6v24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5ow7NtIHNvIHPDoW5oICAgICAgICAgICAgICAgfCBI4buHIHPhu5EgKM6yKSB8IHAtdmFsdWUgICB8IE9kZHMgUmF0aW8gKGVezrIpIHwgRGnhu4VuIGdp4bqjaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCBDw7MgdeG7kW5nIGVuZXJneSBkcmluayB8IEtow7RuZyB14buRbmcgICAgICAgICB8IDEuMDUgICAgICB8IDAuMDAwOTg4ICB8IDIuODYgICAgICAgICAgICAgfCBOZ8aw4budaSAqKmPDsyB14buRbmcgbsaw4bubYyB0xINuZyBs4buxYyoqIGPDsyBvZGRzIGLhu4sg4bqjbmggaMaw4bufbmcgZ2nhuqVjIG5n4bunIGNhbyBn4bqlcCBn4bqnbiAzIGzhuqduIHNvIHbhu5tpIG5nxrDhu51pICoqa2jDtG5nIHXhu5FuZyoqICgqY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiopLiB8DQoNCkvhur90IHF14bqjIGjhu5NpIHF1eSBsb2dpc3RpYyBjaG8gdGjhuqV5IGJp4bq/biB0aMOzaSBxdWVuIHPhu60gZOG7pW5nIG7GsOG7m2MgdMSDbmcgbOG7sWMgKGJldmVyYWdlX2VuZXJneV9kcmluaykgY8OzIOG6o25oIGjGsOG7n25nIMSRw6FuZyBr4buDIMSR4bq/biBraOG6oyBuxINuZyBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7py4gQ+G7pSB0aOG7gywgbmfGsOG7nWkgY8OzIHXhu5FuZyBuxrDhu5tjIHTEg25nIGzhu7FjIGPDsyBvZGRzIGLhu4sg4bqjbmggaMaw4bufbmcgZ2nhuqVjIG5n4bunIGNhbyBoxqFuIGtob+G6o25nIDIuODYgbOG6p24gc28gduG7m2kgbmfGsOG7nWkga2jDtG5nIHXhu5FuZyAuIEjhu4cgc+G7kSBo4buTaSBxdXkgbMOgIDEuMDUsIHbhu5tpIHAtdmFsdWUgPSAwLjAwMDk4OCwgbmjhu48gaMahbiBt4bupYyDDvSBuZ2jEqWEgNSUsIGNobyB0aOG6pXkgbeG7kWkgbGnDqm4gaOG7hyBuw6B5IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogbeG6oW5oLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSB2aeG7h2Mgc+G7rSBk4bulbmcgbsaw4bubYyB0xINuZyBs4buxYyBsw6AgbeG7mXQgeeG6v3UgdOG7kSBxdWFuIHRy4buNbmcgY+G6p24gxJHGsOG7o2MgbMawdSDDvSBraGkgbmdoacOqbiBj4bupdSBjw6FjIHbhuqVuIMSR4buBIGxpw6puIHF1YW4gxJHhur9uIGNo4bqldCBsxrDhu6NuZyBnaeG6pWMgbmfhu6cuDQoNCl8qKk5o4bqtbiB4w6l0OioqXw0KDQpLaG/huqNuZyB0aW4gY+G6rXkgY2hvIGPDoWMgaOG7hyBz4buRIGPhu6dhIG3DtCBow6xuaDoNCg0KYGBge3J9DQpjb25maW50KHJlZ2xvZ2l0X2VuZXJneSkNCmBgYA0KXyoqTmjhuq1uIHjDqXQ6KipfDQoNCktob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIGjhu4cgc+G7kSBo4buTaSBxdXkgY+G7p2EgKipiaeG6v24gYmV2ZXJhZ2VfZW5lcmd5X2RyaW5rKiogbMOgIHThu6sgMC40MzYyIMSR4bq/biAxLjY5MzAuIFbDrCB0b8OgbiBi4buZIGtob+G6o25nIG7DoHkgxJHhu4F1IGzhu5tuIGjGoW4gMCwgdGEga+G6v3QgbHXhuq1uIHLhurFuZyB2aeG7h2MgdeG7kW5nIG7GsOG7m2MgdMSDbmcgbOG7sWMgY8OzIOG6o25oIGjGsOG7n25nIGTGsMahbmcgdsOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogxJHhur9uIGto4bqjIG7Eg25nIGLhu4sg4bqjbmggaMaw4bufbmcgZ2nhuqVjIG5n4bunLiBOw7NpIGPDoWNoIGtow6FjLCBuaOG7r25nIG5nxrDhu51pIGPDsyB14buRbmcgbsaw4bubYyB0xINuZyBs4buxYyBjw7Mga2jhuqMgbsSDbmcgYuG7iyDhuqNuaCBoxrDhu59uZyDEkeG6v24gZ2nhuqVjIG5n4bunIGNhbyBoxqFuIHNvIHbhu5tpIG5nxrDhu51pIGtow7RuZyB14buRbmcuDQoNCiMjIyMgKioqNC43LjEuMy4gQmnhur9uIGJldmVyYWdlX3RlYSoqKg0KDQpgYGB7cn0NCiMgTcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyB24bubaSBiaeG6v24gYmV2ZXJhZ2VfdGVhDQpyZWdsb2dpdF90ZWEgPC0gZ2xtKHNsZWVwX2JpbmFyeSB+IGJldmVyYWdlX3RlYSwgDQogICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkdCwgDQogICAgICAgICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSkNCnN1bW1hcnkocmVnbG9naXRfdGVhKQ0KYGBgDQoNCl8qKk5o4bqtbiB4w6l0OioqXw0KDQpUYSBjw7MgaMOgbSBo4buTaSBxdXkgbG9naXN0aWM6DQoNCiQkDQpcbG5cbGVmdChcZnJhY3tcaGF0e1xwaX19ezEgLSBcaGF0e1xwaX19XHJpZ2h0KSA9IDAuMTkyOSAtIDEuNzc3MCBcY2RvdCBcdGV4dHtiZXZlcmFnZV90ZWF9DQokJA0KDQp8IEJp4bq/biAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOaMOzbSBzbyBzw6FuaCAgICAgICAgICAgfCBI4buHIHPhu5EgKM6yKSB8IHAtdmFsdWUgICB8IE9kZHMgUmF0aW8gKGVezrIpIHwgRGnhu4VuIGdp4bqjaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgQ8OzIHXhu5FuZyB0csOgICAgICAgIHwgS2jDtG5nIHXhu5FuZyB0csOgIHwgLTEuNzggICAgIHwgMi43OWUtMTUgIHwgMC4xNyAgICAgICAgICAgICB8IE5nxrDhu51pICoqY8OzIHXhu5FuZyB0csOgKiogY8OzIG9kZHMgYuG7iyDhuqNuaCBoxrDhu59uZyBnaeG6pWMgbmfhu6cgKip0aOG6pXAgaMahbiA4MyUqKiBzbyB24bubaSBuZ8aw4budaSAqKmtow7RuZyB14buRbmcgdHLDoCoqICgqY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBt4bqhbmgqKS4gfA0KDQoqKkvhur90IGx14bqtbjoqKiANCg0KS+G6v3QgcXXhuqMgaOG7k2kgcXV5IGxvZ2lzdGljIGNobyB0aOG6pXkgYmnhur9uIHRow7NpIHF1ZW4gc+G7rSBk4bulbmcgdHLDoCAoYmV2ZXJhZ2VfdGVhKSBjw7Mg4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MgxJHhur9uIGto4bqjIG7Eg25nIGLhu4sg4bqjbmggaMaw4bufbmcgZ2nhuqVjIG5n4bunLiBD4bulIHRo4buDLCBuZ8aw4budaSBjw7MgdeG7kW5nIHRyw6AgY8OzIG9kZHMgYuG7iyDhuqNuaCBoxrDhu59uZyBnaeG6pWMgbmfhu6cgdGjhuqVwIGjGoW4ga2hv4bqjbmcgODMlIHNvIHbhu5tpIG5nxrDhu51pIGtow7RuZyB14buRbmcgdHLDoC4gSOG7hyBz4buRIGjhu5NpIHF1eSBsw6AgLTEuNzgsIHbhu5tpIHAtdmFsdWUg4omIIDIuNzllLTE1LCBuaOG7jyBoxqFuIHLhuqV0IG5oaeG7gXUgc28gduG7m2kgbeG7qWMgw70gbmdoxKlhIDUlLCBjaG8gdGjhuqV5IG3hu5FpIGxpw6puIGjhu4cgbsOgeSBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHLhuqV0IG3huqFuaC4gxJBp4buBdSBuw6B5IGfhu6NpIMO9IHLhurFuZyB2aeG7h2Mgc+G7rSBk4bulbmcgdHLDoCBjw7MgdGjhu4MgbMOgIG3hu5l0IHnhur91IHThu5EgYuG6o28gduG7hywgZ2nDunAgZ2nhuqNtIG5ndXkgY8ahIGLhu4sg4bqjbmggaMaw4bufbmcgZ2nhuqVjIG5n4bunLg0KDQpLaG/huqNuZyB0aW4gY+G6rXkgY2hvIGPDoWMgaOG7hyBz4buRIGPhu6dhIG3DtCBow6xuaDoNCg0KYGBge3J9DQpjb25maW50KHJlZ2xvZ2l0X3RlYSkNCmBgYA0KXyoqTmjhuq1uIHjDqXQ6KipfDQoNCktob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIGjhu4cgc+G7kSBo4buTaSBxdXkgY+G7p2EgYmnhur9uIGJldmVyYWdlX3RlYSBsw6AgdOG7qyAtMi4yMzExIMSR4bq/biAtMS4zNDcyLiBWw6wgdG/DoG4gYuG7mSBraG/huqNuZyBuw6B5IMSR4buBdSBuaOG7jyBoxqFuIDAsIHRhIGvhur90IGx14bqtbiBy4bqxbmcgdmnhu4djIHXhu5FuZyB0csOgIGPDsyDhuqNuaCBoxrDhu59uZyDDom0gdsOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogxJHhur9uIGto4bqjIG7Eg25nIGLhu4sg4bqjbmggaMaw4bufbmcgZ2nhuqVjIG5n4bunLiBOw7NpIGPDoWNoIGtow6FjLCBuaOG7r25nIG5nxrDhu51pIGPDsyB14buRbmcgdHLDoCBjw7Mga2jhuqMgbsSDbmcgYuG7iyDhuqNuaCBoxrDhu59uZyDEkeG6v24gZ2nhuqVjIG5n4bunIHRo4bqlcCBoxqFuIHNvIHbhu5tpIG5nxrDhu51pIGtow7RuZyB14buRbmcuDQoNCiMjIyMgKioqNC43LjEuNC4gQmnhur9uIHRpbWVfb2ZfZGF5X2V2ZW5pbmcqKioNCg0KYGBge3J9DQojIE3DtCBow6xuaCBo4buTaSBxdXkgbG9naXN0aWMgduG7m2kgYmnhur9uIHRpbWVfb2ZfZGF5X2V2ZW5pbmcNCnJlZ2xvZ2l0X2V2ZW5pbmcgPC0gZ2xtKHNsZWVwX2JpbmFyeSB+IHRpbWVfb2ZfZGF5X2V2ZW5pbmcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGR0LCANCiAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSkNCnN1bW1hcnkocmVnbG9naXRfZXZlbmluZykNCmBgYA0KDQpfKipOaOG6rW4geMOpdDoqKl8NCg0KVGEgY8OzIGjDoG0gaOG7k2kgcXV5Og0KDQokJA0KXGxuXGxlZnQoXGZyYWN7XGhhdFxwaX17MSAtIFxoYXRccGl9XHJpZ2h0KSA9IC0xLjg0NTggKyAyLjcyOTcgXGNkb3QgXHRleHR7dGltZV9vZl9kYXlfZXZlbmluZ30NCiQkDQoNCnwgQmnhur9uICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5ow7NtIHNvIHPDoW5oICAgICAgICAgICB8IEjhu4cgc+G7kSAozrIpIHwgcC12YWx1ZSAgfCBPZGRzIFJhdGlvIChlXs6yKSB8IERp4buFbiBnaeG6o2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgQ8OzIHXhu5FuZyBideG7lWkgdOG7kWkgfCBLaMO0bmcgdeG7kW5nIGJ14buVaSB04buRaSB8IDIuNzMgICAgICB8IDwgMmUtMTYgIHwgMTUuMzMgICAgICAgICAgICB8IE5nxrDhu51pICoqY8OzIHXhu5FuZyBideG7lWkgdOG7kWkqKiBjw7Mgb2RkcyBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7pyBjYW8gaMahbiBraG/huqNuZyAqKjE1IGzhuqduKiogc28gduG7m2kgbmfGsOG7nWkgKipraMO0bmcgdeG7kW5nIGJ14buVaSB04buRaSoqICgqY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBt4bqhbmgqKS4gfA0KDQpfKipL4bq/dCBsdeG6rW46KipfDQoNCkvhur90IHF14bqjIGjhu5NpIHF1eSBsb2dpc3RpYyBjaG8gdGjhuqV5IHRo4budaSDEkWnhu4NtIHXhu5FuZyBideG7lWkgdOG7kWkgY8OzIOG6o25oIGjGsOG7n25nIHLhuqV0IMSRw6FuZyBr4buDIMSR4bq/biBraOG6oyBuxINuZyBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7py4gQ+G7pSB0aOG7gywgbmfGsOG7nWkgY8OzIHXhu5FuZyB2w6BvIGJ14buVaSB04buRaSBjw7Mgb2RkcyBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7pyBjYW8gaMahbiBraG/huqNuZyAxNS4zMyBs4bqnbiBzbyB24bubaSBuZ8aw4budaSBraMO0bmcgdeG7kW5nIGJ14buVaSB04buRaS4gSOG7hyBz4buRIGjhu5NpIHF1eSBsw6AgMi43MywgduG7m2kgcC12YWx1ZSA8IDJlLTE2LCBuaOG7jyBoxqFuIHLhuqV0IG5oaeG7gXUgc28gduG7m2kgbeG7qWMgw70gbmdoxKlhIDUlLCBjaG8gdGjhuqV5IG3hu5FpIGxpw6puIGjhu4cgbsOgeSBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHLhuqV0IG3huqFuaC4gxJBp4buBdSBuw6B5IG5o4bqlbiBt4bqhbmggcuG6sW5nIHZp4buHYyB0acOqdSB0aOG7pSBjw6FjIGxv4bqhaSB0aOG7qWMgdeG7kW5nIHbDoG8gYnXhu5VpIHThu5FpIGzDoCB54bq/dSB04buRIGPDsyB0w6FjIMSR4buZbmcgbeG6oW5oIMSR4bq/biBjaOG6pXQgbMaw4bujbmcgZ2nhuqVjIG5n4bunLCBj4bqnbiDEkcaw4bujYyB4ZW0geMOpdCBr4bu5IHRyb25nIGPDoWMgbmdoacOqbiBj4bupdSBsacOqbiBxdWFuIMSR4bq/biBz4bupYyBraOG7j2UgZ2nhuqVjIG5n4bunLg0KDQpLaG/huqNuZyB0aW4gY+G6rXkgY2hvIGPDoWMgaOG7hyBz4buRIGPhu6dhIG3DtCBow6xuaDoNCg0KYGBge3J9DQpjb25maW50KHJlZ2xvZ2l0X2V2ZW5pbmcpDQpgYGANCl8qKk5o4bqtbiB4w6l0OioqXw0KDQpLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyBo4buHIHPhu5EgaOG7k2kgcXV5IGPhu6dhICoqYmnhur9uIHRpbWVfb2ZfZGF5X2V2ZW5pbmcqKiBu4bqxbSB0cm9uZyBraG/huqNuZyB04burIDIuMjkwNiDEkeG6v24gMy4xOTE1LiBWw6wgdG/DoG4gYuG7mSBraG/huqNuZyB0aW4gY+G6rXkgbsOgeSBs4bubbiBoxqFuIDAsIHRhIGvhur90IGx14bqtbiBy4bqxbmcgdmnhu4djIHXhu5FuZyDEkeG7kyB14buRbmcgdsOgbyBideG7lWkgdOG7kWkgY8OzIOG6o25oIGjGsOG7n25nIGTGsMahbmcgdsOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogxJHhur9uIGto4bqjIG7Eg25nIGLhu4sg4bqjbmggaMaw4bufbmcgZ2nhuqVjIG5n4bunLiBD4bulIHRo4buDLCBuaOG7r25nIG5nxrDhu51pIHXhu5FuZyB2w6BvIGJ14buVaSB04buRaSBjw7MgeMOhYyBzdeG6pXQgYuG7iyDhuqNuaCBoxrDhu59uZyBnaeG6pWMgbmfhu6cgY2FvIGjGoW4gcsO1IHLhu4d0IHNvIHbhu5tpIG5o4buvbmcgbmfGsOG7nWkga2jDtG5nIHXhu5FuZy4NCg0KIyMjICoqNC43LjIuIE3DtCBow6xuaCBQcm9iaXQqKg0KDQokJA0KSF8wOiBcdGV4dHtCaeG6v24ga2jDtG5nIGPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24geMOhYyBzdeG6pXQgZ2nhuqVjIG5n4bunIGLhu4sg4bqjbmggaMaw4bufbmd9DQokJA0KDQokJA0KSF8xOiBcdGV4dHtCaeG6v24gY8OzIOG6o25oIGjGsOG7n25nIMSR4bq/biB4w6FjIHN14bqldCBnaeG6pWMgbmfhu6cgYuG7iyDhuqNuaCBoxrDhu59uZ30NCiQkDQoNClTDoWMgZ2nhuqMgdGjhu7FjIGhp4buHbiBo4buTaSBxdXkgUHJvYml0IMSRxqFuIGJp4bq/biwgbeG7l2kgbcO0IGjDrG5oIGNo4buJIGJhbyBn4buTbSBt4buZdCBiaeG6v24gZ2nhuqNpIHRow61jaCBuaOG6sW0gcGjDom4gdMOtY2ggcmnDqm5nIGzhursg4bqjbmggaMaw4bufbmcgY+G7p2EgdOG7q25nIHnhur91IHThu5EgxJHhur9uIGto4bqjIG7Eg25nIOG6o25oIGjGsOG7n25nIMSR4bq/biBnaeG6pWMgbmfhu6cuIA0KDQojIyMjICoqKjQuNy4yLjEuIEJp4bq/biBiZXZlcmFnZV9jb2ZmZWUqKioNCg0KYGBge3J9DQojIE3DtCBow6xuaCBQcm9iaXQgduG7m2kgYmnhur9uIGJldmVyYWdlX2NvZmZlZQ0KcHJvYml0X2NvZmZlZSA8LSBnbG0oc2xlZXBfYmluYXJ5IH4gYmV2ZXJhZ2VfY29mZmVlLCBkYXRhID0gZHQsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAicHJvYml0IikpDQpzdW1tYXJ5KHByb2JpdF9jb2ZmZWUpDQoNCmBgYA0KXyoqTmjhuq1uIHjDqXQ6KipfDQoNClRhIGPDsyBow6BtIFByb2JpdCDGsOG7m2MgbMaw4bujbmc6DQoNCiQkDQpcUGhpXnstMX0oXGhhdHtccGl9KSA9IC0wLjYzMTU4ICsgMC43MTIwNyBcY2RvdCBcdGV4dHtiZXZlcmFnZV9jb2ZmZWV9DQokJA0KDQpL4bq/dCBxdeG6oyBo4buTaSBxdXkgUHJvYml0IGNobyB0aOG6pXkgdGjDs2kgcXVlbiB14buRbmcgY8OgIHBow6ogY8OzIOG6o25oIGjGsOG7n25nIMSRw6FuZyBr4buDIMSR4bq/biB4w6FjIHN14bqldCBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7py4gSOG7hyBz4buRIMaw4bubYyBsxrDhu6NuZyBjaG8gYmnhur9uICJDw7MgdeG7kW5nIGPDoCBwaMOqIiBsw6AgMC43MTIgduG7m2kgcC12YWx1ZSA9IDEuMTRlLTA5LCBjaG8gdGjhuqV5IG3hu5FpIHF1YW4gaOG7hyBuw6B5IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogcuG6pXQgbeG6oW5oLiDEkGnhu4F1IG7DoHkgxJHhu5NuZyBuZ2jEqWEgduG7m2kgdmnhu4djIG5o4buvbmcgbmfGsOG7nWkgY8OzIHXhu5FuZyBjw6AgcGjDqiBjw7MgeMOhYyBzdeG6pXQgYuG7iyDhuqNuaCBoxrDhu59uZyBnaeG6pWMgbmfhu6cgY2FvIGjGoW4gc28gduG7m2kgbmjhu69uZyBuZ8aw4budaSBraMO0bmcgdeG7kW5nIGPDoCBwaMOqLiBL4bq/dCBxdeG6oyBuw6B5IGPhu6duZyBj4buRIGdp4bqjIHRodXnhur90IHLhurFuZyBjYWZmZWluZSB0cm9uZyBjw6AgcGjDqiBsw6AgbeG7mXQgeeG6v3UgdOG7kSDEkcOhbmcgY2jDuiDDvSBraGkgeGVtIHjDqXQgxJHhur9uIGNo4bqldCBsxrDhu6NuZyBnaeG6pWMgbmfhu6cuDQoNCktob+G6o25nIHRpbiBj4bqteSBjaG8gY8OhYyBo4buHIHPhu5EgY+G7p2EgbcO0IGjDrG5oOg0KDQpgYGB7cn0NCmNvbmZpbnQocHJvYml0X2NvZmZlZSkNCmBgYA0KXyoqTmjhuq1uIHjDqXQ6KipfDQoNClbhu5tpIMSR4buZIHRpbiBj4bqteSA5NSUsIGjhu4cgc+G7kSBJbnRlcmNlcHQgY8OzIGtob+G6o25nIHRpbiBj4bqteSB04burIC0wLjgwNTYgxJHhur9uIC0wLjQ2MDYsIGNobyB0aOG6pXkgeMOhYyBzdeG6pXQgYuG7iyDhuqNuaCBoxrDhu59uZyBnaeG6pWMgbmfhu6cg4bufIG5ow7NtIGtow7RuZyB14buRbmcgY8OgIHBow6ogbMOgIHTGsMahbmcgxJHhu5FpIHRo4bqlcC4NCg0KSOG7hyBz4buRIGPhu6dhIGJp4bq/biBiZXZlcmFnZV9jb2ZmZWUgbuG6sW0gdHJvbmcga2hv4bqjbmcgdOG7qyAwLjQ4MzcgxJHhur9uIDAuOTQyMywgxJHhu4F1IGTGsMahbmcgdsOgIGtow7RuZyBjaOG7qWEgMC4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgdmnhu4djIHXhu5FuZyBjw6AgcGjDqiBsw6BtIHTEg25nIHjDoWMgc3XhuqV0IGLhu4sg4bqjbmggaMaw4bufbmcgxJHhur9uIGdp4bqlYyBuZ+G7pyBt4buZdCBjw6FjaCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLg0KDQojIyMjICoqKjQuNy4yLjIuIEJp4bq/biBiZXZlcmFnZV9lbmVyZ3lfZHJpbmsqKioNCg0KYGBge3J9DQpwcm9iaXRfZW5lcmd5IDwtIGdsbShzbGVlcF9iaW5hcnkgfiBiZXZlcmFnZV9lbmVyZ3lfZHJpbmssIA0KICAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJwcm9iaXQiKSwgZGF0YSA9IGR0KQ0Kc3VtbWFyeShwcm9iaXRfZW5lcmd5KQ0KYGBgDQpfKipOaOG6rW4geMOpdDoqKl8NCg0KVGEgY8OzIGjDoG0gaOG7k2kgcXV5IFByb2JpdDoNCg0KJCQNClxQaGleey0xfShcaGF0e1xwaX0pID0gLTAuMzAwNTAgKyAwLjY1NDQxIFxjZG90IFx0ZXh0e2JldmVyYWdlX2VuZXJneV9kcmlua30NCiQkDQoNCkvhur90IHF14bqjIGjhu5NpIHF1eSBQcm9iaXQgY2hvIHRo4bqleSB2aeG7h2MgdeG7kW5nIG7GsOG7m2MgdMSDbmcgbOG7sWMgKGVuZXJneSBkcmluaykgY8OzIOG6o25oIGjGsOG7n25nIMSRw6FuZyBr4buDIMSR4bq/biB4w6FjIHN14bqldCBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7py4gQ+G7pSB0aOG7gywgaOG7hyBz4buRIMaw4bubYyBsxrDhu6NuZyBjaG8gYmnhur9uICJDw7MgdeG7kW5nIGVuZXJneSBkcmluayIgbMOgIDAuNjU0IHbhu5tpIHAtdmFsdWUgPSAwLjAwMDg2MSwgbmjhu48gaMahbiBt4bupYyDDvSBuZ2jEqWEgMSUsIGNobyB0aOG6pXkgbeG7kWkgcXVhbiBo4buHIG7DoHkgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBt4bqhbmguIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IG5o4buvbmcgbmfGsOG7nWkgY8OzIHRow7NpIHF1ZW4gc+G7rSBk4bulbmcgbsaw4bubYyB0xINuZyBs4buxYyBjw7MgeMOhYyBzdeG6pXQgYuG7iyDhuqNuaCBoxrDhu59uZyBnaeG6pWMgbmfhu6cgY2FvIGjGoW4gc28gduG7m2kgbmjhu69uZyBuZ8aw4budaSBraMO0bmcgc+G7rSBk4bulbmcuIEvhur90IHF14bqjIG7DoHkgZ+G7o2kgw70gcuG6sW5nIG7GsOG7m2MgdMSDbmcgbOG7sWMgbMOgIG3hu5l0IHnhur91IHThu5EgY+G6p24gxJHGsOG7o2MgbMawdSDDvSB0cm9uZyBjw6FjIG5naGnDqm4gY+G7qXUgduG7gSBjaOG6pXQgbMaw4bujbmcgZ2nhuqVjIG5n4bunLg0KDQpLaG/huqNuZyB0aW4gY+G6rXkgY2hvIGPDoWMgaOG7hyBz4buRIGPhu6dhIG3DtCBow6xuaDoNCg0KYGBge3J9DQpjb25maW50KHByb2JpdF9lbmVyZ3kgKQ0KYGBgDQoNCl8qKk5o4bqtbiB4w6l0OioqXw0KDQpW4bubaSDEkeG7mSB0aW4gY+G6rXkgOTUlLCBnacOhIHRy4buLIHRo4buxYyBj4bunYSAqKkludGVyY2VwdCoqIG7hurFtIHRyb25nIGtob+G6o25nIHThu6sgKiotMC40MTgyKiogxJHhur9uICoqLTAuMTgzNSoqLCB0cm9uZyBraGkgxJHDsyBnacOhIHRy4buLIHRo4buxYyBj4bunYSAqKnRoYW0gc+G7kSBiZXZlcmFnZV9lbmVyZ3lfZHJpbmsqKiAo4bupbmcgduG7m2kgbmjDs20gIkPDsyB14buRbmcgZW5lcmd5IGRyaW5rIikgbuG6sW0gdHJvbmcga2hv4bqjbmcgdOG7qyAqKjAuMjcyNSoqIMSR4bq/biAqKjEuMDQzMSoqLg0KDQpLaG/huqNuZyB0aW4gY+G6rXkgY+G7p2EgdGhhbSBz4buRICoqYmV2ZXJhZ2VfZW5lcmd5X2RyaW5rKiogaG/DoG4gdG/DoG4gbuG6sW0gcGjDrWEgZMawxqFuZywgY2hvIHRo4bqleSAqKmJp4bq/biBuw6B5IGPDsyDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gyB2w6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqioqIHRyb25nIG3DtCBow6xuaC4gTsOzaSBjw6FjaCBraMOhYywgdmnhu4djICoqdeG7kW5nIG7GsOG7m2MgdMSDbmcgbOG7sWMgY8OzIGto4bqjIG7Eg25nIGzDoG0gdMSDbmcgeMOhYyBzdeG6pXQgYuG7iyDhuqNuaCBoxrDhu59uZyDEkeG6v24gZ2nhuqVjIG5n4bunKiogbeG7mXQgY8OhY2ggY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiwgc28gduG7m2kgbmjDs20ga2jDtG5nIHXhu5FuZy4NCg0KIyMjIyAqKio0LjcuMi4zLiBCaeG6v24gYmV2ZXJhZ2VfdGVhKioqDQoNCmBgYHtyfQ0KcHJvYml0X3RlYSA8LSBnbG0oc2xlZXBfYmluYXJ5IH4gYmV2ZXJhZ2VfdGVhLCANCiAgICAgICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAicHJvYml0IiksIGRhdGEgPSBkdCkNCnN1bW1hcnkocHJvYml0X3RlYSkNCmBgYA0KXyoqTmjhuq1uIHjDqXQ6KipfDQoNClRhIGPDsyBow6BtIGjhu5NpIHF1eSBQcm9iaXQ6DQoNCiQkDQpcUGhpXnstMX0oXGhhdHtccGl9KSA9IDAuMTIwODAgLSAxLjA3NDEzIFxjZG90IFx0ZXh0e2JldmVyYWdlX3RlYX0NCiQkDQoNCkvhur90IHF14bqjIGjhu5NpIHF1eSBQcm9iaXQgY2hvIHRo4bqleSB2aeG7h2MgdeG7kW5nIHRyw6AgY8OzIOG6o25oIGjGsOG7n25nIMSRw6FuZyBr4buDIMSR4bq/biB4w6FjIHN14bqldCBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7py4gQmnhur9uIOKAnEPDsyB14buRbmcgdHLDoOKAnSBjw7MgaOG7hyBz4buRIMaw4bubYyBsxrDhu6NuZyBsw6AgLTEuMDc0LCB24bubaSBwLXZhbHVlIDwgMmUtMTYsIGNobyB0aOG6pXkgbeG7kWkgbGnDqm4gaOG7hyDDom0gbsOgeSBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHLhuqV0IG3huqFuaC4gTmdoxKlhIGzDoCwgbmjhu69uZyBuZ8aw4budaSBjw7MgdGjDs2kgcXVlbiB14buRbmcgdHLDoCBjw7MgeMOhYyBzdeG6pXQgYuG7iyDhuqNuaCBoxrDhu59uZyBnaeG6pWMgbmfhu6cgdGjhuqVwIGjGoW4gc28gduG7m2kgbmfGsOG7nWkga2jDtG5nIHXhu5FuZy4gxJBp4buBdSBuw6B5IGfhu6NpIMO9IHLhurFuZyB14buRbmcgdHLDoCBjw7MgdGjhu4MgY8OzIHTDoWMgxJHhu5luZyB0w61jaCBj4buxYyDEkeG6v24gZ2nhuqVjIG5n4bunLCBob+G6t2Mgw610IG5o4bqldCBsw6Aga2jDtG5nIGfDonkg4bqjbmggaMaw4bufbmcgdGnDqnUgY+G7sWMgbmjGsCBt4buZdCBz4buRIGxv4bqhaSB0aOG7qWMgdeG7kW5nIGNo4bupYSBjYWZmZWluZSBraMOhYy4NCg0KS2hv4bqjbmcgdGluIGPhuq15IGNobyBjw6FjIGjhu4cgc+G7kSBj4bunYSBtw7QgaMOsbmg6DQoNCmBgYHtyfQ0KY29uZmludChwcm9iaXRfdGVhKQ0KYGBgDQoNCl8qKk5o4bqtbiB4w6l0OioqXw0KDQpW4bubaSDEkeG7mSB0aW4gY+G6rXkgOTUlLCBraG/huqNuZyB0aW4gY+G6rXkgY2hvIGjhu4cgc+G7kSBjaOG6t24gKEludGVyY2VwdCkgbuG6sW0gdHJvbmcga2hv4bqjbmcgdOG7qyAtMC4wMTg1IMSR4bq/biAwLjI2MDQsIG5naMSpYSBsw6Aga2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogdsOsIGtob+G6o25nIG7DoHkgY2jhu6lhIDAuDQoNClR1eSBuaGnDqm4sIGjhu4cgc+G7kSBj4bunYSBiaeG6v24gYmV2ZXJhZ2VfdGVhIG7hurFtIHRyb25nIGtob+G6o25nIHThu6sgLTEuMzMxIMSR4bq/biAtMC44MjMsIGtow7RuZyBjaOG7qWEgMCwgY2hvIHRo4bqleSB2aeG7h2MgdeG7kW5nIHRyw6AgY8OzIOG6o25oIGjGsOG7n25nIHRpw6p1IGPhu7FjIMSRw6FuZyBr4buDIMSR4bq/biB4w6FjIHN14bqldCBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7pyB0cm9uZyBtw7QgaMOsbmggUHJvYml0LCB2w6Ag4bqjbmggaMaw4bufbmcgbsOgeSBsw6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiDhu58gbeG7qWMgNSUuDQoNCiMjIyMgKioqNC43LjIuNC4gQmnhur9uIHRpbWVfb2ZfZGF5X2V2ZW5pbmcqKioNCg0KYGBge3J9DQojIE3DtCBow6xuaCBQcm9iaXQgduG7m2kgYmnhur9uIHRpbWVfb2ZfZGF5X2V2ZW5pbmcNCnByb2JpdF9ldmVuaW5nIDwtIGdsbShzbGVlcF9iaW5hcnkgfiB0aW1lX29mX2RheV9ldmVuaW5nLCANCiAgICAgICAgICAgICAgICAgICAgICBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gInByb2JpdCIpLCANCiAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZHQpDQpzdW1tYXJ5KHByb2JpdF9ldmVuaW5nKQ0KYGBgDQpfKipOaOG6rW4geMOpdDoqKl8NCg0KVGEgY8OzIHBoxrDGoW5nIHRyw6xuaCBo4buTaSBxdXkgUHJvYml0Og0KDQokJA0KXFBoaV57LTF9KFxoYXR7XHBpfSkgPSAtMS4wOTY4ICsgMS42NDMzIFxjZG90IFx0ZXh0e3RpbWVfb2ZfZGF5X2V2ZW5pbmd9DQokJA0KDQpL4bq/dCBxdeG6oyBo4buTaSBxdXkgUHJvYml0IGNobyB0aOG6pXkgdGjhu51pIMSRaeG7g20gdGnDqnUgdGjhu6UgxJHhu5MgdeG7kW5nIHbDoG8gYnXhu5VpIHThu5FpIGPDsyDhuqNuaCBoxrDhu59uZyBy4bqldCByw7UgcuG7h3QgxJHhur9uIHjDoWMgc3XhuqV0IGLhu4sg4bqjbmggaMaw4bufbmcgZ2nhuqVjIG5n4bunLiBD4bulIHRo4buDLCBiaeG6v24g4oCcQ8OzIHXhu5FuZyBideG7lWkgdOG7kWnigJ0gY8OzIGjhu4cgc+G7kSDGsOG7m2MgbMaw4bujbmcgbMOgIDEuNjQzLCB24bubaSBwLXZhbHVlIDwgMmUtMTYsIGNobyB0aOG6pXkgxJHDonkgbMOgIG3hu5l0IHnhur91IHThu5EgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBj4buxYyBr4buzIG3huqFuaC4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgbmjhu69uZyBuZ8aw4budaSB14buRbmcgxJHhu5MgdeG7kW5nIHbDoG8gYnXhu5VpIHThu5FpIGPDsyB4w6FjIHN14bqldCBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7pyBjYW8gaMahbiDEkcOhbmcga+G7gyBzbyB24bubaSBuaOG7r25nIG5nxrDhu51pIGtow7RuZyB14buRbmcgdsOgbyB0aOG7nWkgxJFp4buDbSBuw6B5LiBOaMawIHbhuq15LCB0aOG7nWkgxJFp4buDbSB0acOqdSB0aOG7pSB0aOG7qWMgdeG7kW5nIOKAkyDEkeG6t2MgYmnhu4d0IGzDoCBideG7lWkgdOG7kWkg4oCTIGzDoCB54bq/dSB04buRIHF1YW4gdHLhu41uZyBj4bqnbiBsxrB1IMO9IGtoaSBuZ2hpw6puIGPhu6l1IGPDoWMgduG6pW4gxJHhu4EgbGnDqm4gcXVhbiDEkeG6v24gY2jhuqV0IGzGsOG7o25nIGdp4bqlYyBuZ+G7py4NCg0KS2hv4bqjbmcgdGluIGPhuq15IGNobyBjw6FjIGjhu4cgc+G7kSBj4bunYSBtw7QgaMOsbmg6DQoNCmBgYHtyfQ0KY29uZmludChwcm9iaXRfZXZlbmluZykNCmBgYA0KXyoqTmjhuq1uIHjDqXQ6KipfDQoNClbhu5tpIMSR4buZIHRpbiBj4bqteSA5NSU6DQoNCkdpw6EgdHLhu4sgdGjhu7FjIGPhu6dhIEludGVyY2VwdCBu4bqxbSB0cm9uZyBraG/huqNuZyB04burIC0xLjI5IMSR4bq/biAtMC45MSwgY2hvIHRo4bqleSDhu58gbmjDs20ga2jDtG5nIHXhu5FuZyB2w6BvIGJ14buVaSB04buRaSwgeMOhYyBzdeG6pXQgYuG7iyDhuqNuaCBoxrDhu59uZyDEkeG6v24gZ2nhuqVjIG5n4bunIGzDoCB0xrDGoW5nIMSR4buRaSB0aOG6pXAuDQoNCkjhu4cgc+G7kSBj4bunYSBiaeG6v24gdGltZV9vZl9kYXlfZXZlbmluZyBu4bqxbSB0cm9uZyBraG/huqNuZyB04burIDEuMzkgxJHhur9uIDEuOTAsIMSRaeG7gXUgbsOgeSBraOG6s25nIMSR4buLbmggcuG6sW5nIHZp4buHYyB14buRbmcgdsOgbyBideG7lWkgdOG7kWkgbMOgbSB0xINuZyDEkcOhbmcga+G7gyB4w6FjIHN14bqldCBi4buLIOG6o25oIGjGsOG7n25nIMSR4bq/biBnaeG6pWMgbmfhu6cuDQoNCiMjIyAqKjQuNy4zLiBNw7QgaMOsbmggQ2xvZ2xvZyoqDQoNCiMjIyMgKioqNC43LjMuMS4gQmnhur9uIGJldmVyYWdlX2NvZmZlZSoqKg0KDQpgYGB7cn0NCiMgTcO0IGjDrG5oIENsb2dsb2cgduG7m2kgYmnhur9uIGJldmVyYWdlX2NvZmZlZQ0KY2xvZ2xvZ19jb2ZmZWUgPC0gZ2xtKHNsZWVwX2JpbmFyeSB+IGJldmVyYWdlX2NvZmZlZSwgZGF0YSA9IGR0LCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImNsb2dsb2ciKSkNCnN1bW1hcnkoY2xvZ2xvZ19jb2ZmZWUpDQpgYGANCg0KROG7sWEgdHLDqm4ga+G6v3QgcXXhuqMgbcO0IGjDrG5oIGjhu5NpIHF1eSB24bubaSBow6BtIGxpw6puIGvhur90IGNsb2dsb2csIHRhIGPDsyBwaMawxqFuZyB0csOsbmg6DQoNCiQkDQpcbG9nXGxlZnQoLVxsb2dcbGVmdCgxIC0gUChcdGV4dHtzbGVlcH0gPSAxKVxyaWdodClccmlnaHQpID0gLTEuMTgzMiArIDAuOTA4MCBcY2RvdCBcdGV4dHtiZXZlcmFnZV9jb2ZmZWV9DQokJA0KXyoqTmjhuq1uIHjDqXQ6KipfDQoNCkvhur90IHF14bqjIGjhu5NpIHF1eSBDbG9nbG9nIMSRxqFuIGJp4bq/biBjaG8gdGjhuqV5IHZp4buHYyB14buRbmcgY8OgIHBow6ogY8OzIOG6o25oIGjGsOG7n25nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogxJHhur9uIGto4bqjIG7Eg25nIGPDsyBnaeG6pWMgbmfhu6csIHbhu5tpIGdpw6EgdHLhu4sgcCA9IDMuNjZlLTA5LCBuaOG7jyBoxqFuIG3hu6ljIMO9IG5naMSpYSA1JS4gQ+G7pSB0aOG7gywgaOG7hyBz4buRIMaw4bubYyBsxrDhu6NuZyBsw6AgMC45MDgsIGNobyB0aOG6pXkgbmjDs20gbmfGsOG7nWkgY8OzIHXhu5FuZyBjw6AgcGjDqiBjw7MgZ2nDoSB0cuG7iyBjbG9nbG9nIGNhbyBoxqFuLCDEkeG7k25nIG5naMSpYSB24bubaSB2aeG7h2MgeMOhYyBzdeG6pXQgY8OzIGdp4bqlYyBuZ+G7pyBjxaluZyBjYW8gaMahbiBzbyB24bubaSBuaMOzbSBraMO0bmcgdeG7kW5nIGPDoCBwaMOqLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSwgdGhlbyBtw7QgaMOsbmggQ2xvZ2xvZywgdmnhu4djIHRpw6p1IHRo4bulIGPDoCBwaMOqIGPDsyBt4buRaSBsacOqbiBo4buHIMSRw6FuZyBr4buDIHbhu5tpIGto4bqjIG7Eg25nIGPDsyBnaeG6pWMgbmfhu6csIHbDoCBt4buRaSBsacOqbiBo4buHIG7DoHkgbWFuZyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogcsO1IHLhu4d0Lg0KDQojIyMjICoqKjQuNy4zLjIuIEJp4bq/biBiZXZlcmFnZV9lbmVyZ3lfZHJpbmsqKioNCg0KYGBge3J9DQojIE3DtCBow6xuaCBDbG9nbG9nIHbhu5tpIGJp4bq/biBiZXZlcmFnZV9lbmVyZ3lfZHJpbmsNCmNsb2dsb2dfZW5lcmd5IDwtIGdsbShzbGVlcF9iaW5hcnkgfiBiZXZlcmFnZV9lbmVyZ3lfZHJpbmssIGRhdGEgPSBkdCwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJjbG9nbG9nIikpDQpzdW1tYXJ5KGNsb2dsb2dfZW5lcmd5KQ0KYGBgDQoNCkThu7FhIHRyw6puIGvhur90IHF14bqjIG3DtCBow6xuaCBo4buTaSBxdXkgduG7m2kgaMOgbSBsacOqbiBr4bq/dCAqKmNsb2dsb2cqKiwgdGEgY8OzIHBoxrDGoW5nIHRyw6xuaCBo4buTaSBxdXkgbmjGsCBzYXU6DQoNCiQkDQpcbG9nXGxlZnQoLVxsb2dcbGVmdCgxIC0gUChcdGV4dHtzbGVlcH0gPSAxKVxyaWdodClccmlnaHQpID0gLTAuNzMxNjcgKyAwLjc0ODQ3IFxjZG90IFx0ZXh0e2JldmVyYWdlX2VuZXJneV9kcmlua30NCiQkDQpfKipOaOG6rW4geMOpdDoqKl8NCg0KS+G6v3QgcXXhuqMgaOG7k2kgcXV5IENsb2dsb2cgxJHGoW4gYmnhur9uIGNobyB0aOG6pXkgdmnhu4djIHXhu5FuZyBuxrDhu5tjIHTEg25nIGzhu7FjIGPDsyDhuqNuaCBoxrDhu59uZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIMSR4bq/biBraOG6oyBuxINuZyBjw7MgZ2nhuqVjIG5n4bunLCB24bubaSBnacOhIHRy4buLIHAgPSAwLjAwMDI2OSwgbmjhu48gaMahbiBt4bupYyDDvSBuZ2jEqWEgNSUuIEPhu6UgdGjhu4MsIGjhu4cgc+G7kSDGsOG7m2MgbMaw4bujbmcgbMOgIDAuNzQ4NDcsIGNobyB0aOG6pXkgbmjDs20gbmfGsOG7nWkgY8OzIHXhu5FuZyBuxrDhu5tjIHTEg25nIGzhu7FjIGPDsyBnacOhIHRy4buLIGNsb2dsb2cgY2FvIGjGoW4sIMSR4buTbmcgbmdoxKlhIHbhu5tpIHZp4buHYyB4w6FjIHN14bqldCBjw7MgZ2nhuqVjIG5n4bunIGPFqW5nIGNhbyBoxqFuIHNvIHbhu5tpIG5ow7NtIGtow7RuZyB14buRbmcuIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5LCB0aGVvIG3DtCBow6xuaCBDbG9nbG9nLCB2aeG7h2MgdGnDqnUgdGjhu6Ugbsaw4bubYyB0xINuZyBs4buxYyBjw7MgbeG7kWkgbGnDqm4gaOG7hyDEkcOhbmcga+G7gyB24bubaSBraOG6oyBuxINuZyBjw7MgZ2nhuqVjIG5n4bunLCB2w6AgbeG7kWkgbGnDqm4gaOG7hyBuw6B5IG1hbmcgw70gbmdoxKlhIHRo4buRbmcga8OqIHLDtSBy4buHdC4NCg0KIyMjIyAqKio0LjcuMy4zLiBCaeG6v24gYmV2ZXJhZ2VfdGVhKioqDQoNCmBgYHtyfQ0KIyBNw7QgaMOsbmggQ2xvZ2xvZyB24bubaSBiaeG6v24gYmV2ZXJhZ2VfdGVhDQpjbG9nbG9nX3RlYSA8LSBnbG0oc2xlZXBfYmluYXJ5IH4gYmV2ZXJhZ2VfdGVhLCBkYXRhID0gZHQsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAiY2xvZ2xvZyIpKQ0Kc3VtbWFyeShjbG9nbG9nX3RlYSkNCmBgYA0KDQpQaMawxqFuZyB0csOsbmggaOG7k2kgcXV5IMSRxrDhu6NjIHjDonkgZOG7sW5nIHThu6sgbcO0IGjDrG5oIENsb2dsb2cgxJHGoW4gYmnhur9uIGPDsyBk4bqhbmc6DQoNCiQkDQpcbG9nXGxlZnQoLVxsb2dcbGVmdCgxIC0gUChcdGV4dHtzbGVlcH0gPSAxKVxyaWdodClccmlnaHQpID0gLTAuMjMwNCAtIDEuNDQ4NSBcY2RvdCBcdGV4dHtiZXZlcmFnZV90ZWF9DQokJA0KXyoqTmjhuq1uIHjDqXQ6KipfDQoNCkvhur90IHF14bqjIGjhu5NpIHF1eSBDbG9nbG9nIMSRxqFuIGJp4bq/biBjaG8gdGjhuqV5IHZp4buHYyB14buRbmcgdHLDoCBjw7Mg4bqjbmggaMaw4bufbmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiDEkeG6v24ga2jhuqMgbsSDbmcgY8OzIGdp4bqlYyBuZ+G7pywgduG7m2kgZ2nDoSB0cuG7iyBwID0gNy40NWUtMTQsIG5o4buPIGjGoW4gbeG7qWMgw70gbmdoxKlhIDUlLiBI4buHIHPhu5EgxrDhu5tjIGzGsOG7o25nIGzDoCAtMS40NDg1LCBtYW5nIGThuqV1IMOibSwgY2hvIHRo4bqleSBuaMOzbSBuZ8aw4budaSBjw7MgdeG7kW5nIHRyw6AgY8OzIGdpw6EgdHLhu4sgY2xvZ2xvZyB0aOG6pXAgaMahbiwgxJHhu5NuZyBuZ2jEqWEgduG7m2kgdmnhu4djIHjDoWMgc3XhuqV0IGPDsyBnaeG6pWMgbmfhu6cgY8WpbmcgdGjhuqVwIGjGoW4gc28gduG7m2kgbmjDs20ga2jDtG5nIHXhu5FuZyB0csOgLiDEkGnhu4F1IG7DoHkgcGjhuqNuIMOhbmggcuG6sW5nLCB0aGVvIG3DtCBow6xuaCBDbG9nbG9nLCB2aeG7h2MgdGnDqnUgdGjhu6UgdHLDoCBjw7MgbeG7kWkgbGnDqm4gaOG7hyBuZ8aw4bujYyBjaGnhu4F1IHbDoCDEkcOhbmcga+G7gyB24buBIG3hurd0IHRo4buRbmcga8OqIHbhu5tpIGto4bqjIG7Eg25nIGPDsyBnaeG6pWMgbmfhu6cuDQoNCiMjIyMgKioqNC43LjMuNC4gQmnhur9uIHRpbWVfb2ZfZGF5X2V2ZW5pbmcqKioNCg0KYGBge3J9DQojIE3DtCBow6xuaCBDbG9nbG9nIHbhu5tpIGJp4bq/biB0aW1lX29mX2RheV9ldmVuaW5nDQpjbG9nbG9nX2V2ZW5pbmcgPC0gZ2xtKHNsZWVwX2JpbmFyeSB+IHRpbWVfb2ZfZGF5X2V2ZW5pbmcsIA0KICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZHQsIA0KICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImNsb2dsb2ciKSkNCnN1bW1hcnkoY2xvZ2xvZ19ldmVuaW5nKQ0KYGBgDQoNCkThu7FhIHRyw6puIGvhur90IHF14bqjIGjhu5NpIHF1eSwgcGjGsMahbmcgdHLDrG5oIG3DtCBow6xuaCBjw7MgZOG6oW5nOg0KDQokJA0KXGxvZ1xsZWZ0KC1cbG9nXGxlZnQoMSAtIFAoXHRleHR7c2xlZXB9ID0gMSlccmlnaHQpXHJpZ2h0KSA9IC0xLjkyMDAgKyAyLjEyNjggXGNkb3QgXHRleHR7dGltZV9vZl9kYXlfZXZlbmluZ30NCiQkDQoNCl8qKk5o4bqtbiB4w6l0OioqXw0KDQpL4bq/dCBxdeG6oyBo4buTaSBxdXkgQ2xvZ2xvZyDEkcahbiBiaeG6v24gY2hvIHRo4bqleSB2aeG7h2MgdeG7kW5nIHbDoG8gYnXhu5VpIHThu5FpIGPDsyDhuqNuaCBoxrDhu59uZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIMSR4bq/biBraOG6oyBuxINuZyBjw7MgZ2nhuqVjIG5n4bunLCB24bubaSBnacOhIHRy4buLIHAgPCAyZS0xNiwgbmjhu48gaMahbiBt4bupYyDDvSBuZ2jEqWEgNSUuIEPhu6UgdGjhu4MsIGjhu4cgc+G7kSDGsOG7m2MgbMaw4bujbmcgbMOgIDIuMTI2OCwgY2hvIHRo4bqleSBuaMOzbSBuZ8aw4budaSBjw7MgdeG7kW5nIHbDoG8gYnXhu5VpIHThu5FpIGPDsyBnacOhIHRy4buLIGNsb2dsb2cgY2FvIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgbmjDs20ga2jDtG5nIHXhu5FuZyB2w6BvIGJ14buVaSB04buRaSwgdOG7qWMgbMOgIHjDoWMgc3XhuqV0IGPDsyBnaeG6pWMgbmfhu6cgY8WpbmcgY2FvIGjGoW4uIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IG3hu5FpIGxpw6puIGjhu4cgdMOtY2ggY+G7sWMgdsOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogcsO1IHLhu4d0IGdp4buvYSB2aeG7h2MgdeG7kW5nIHbDoG8gYnXhu5VpIHThu5FpIHbDoCBraOG6oyBuxINuZyBjw7MgZ2nhuqVjIG5n4bunLg0KDQojIyAqKjQuOC4gTcO0IGjDrG5oIGjhu5NpIHF1eSBi4buZaSoqDQoNCmBgYHtyfQ0KYWxpYXMobG0oc2xlZXBfYmluYXJ5IH4gYmV2ZXJhZ2VfY29mZmVlICsgYmV2ZXJhZ2VfZW5lcmd5X2RyaW5rICsgYmV2ZXJhZ2VfdGVhICsgdGltZV9vZl9kYXlfZXZlbmluZywgZGF0YSA9IGR0KSkNCmBgYA0KDQpL4bq/dCBxdeG6oyB04burIGjDoG0gYWxpYXMoKSBjaG8gdGjhuqV5IGJp4bq/biBiZXZlcmFnZV90ZWEgY8OzIG3hu5FpIHF1YW4gaOG7hyB0dXnhur9uIHTDrW5oIGNow61uaCB4w6FjIHbhu5tpIGPDoWMgYmnhur9uIGdp4bqjaSB0aMOtY2gga2jDoWMgdHJvbmcgbcO0IGjDrG5oLCBj4bulIHRo4buDIGzDoDoNCg0KJCQNClx0ZXh0e2JldmVyYWdlX3RlYX0gPSAxIFx0aW1lcyBcdGV4dHtJbnRlcmNlcHR9IC0gMSBcdGltZXMgXHRleHR7YmV2ZXJhZ2VfY29mZmVlfSAtIDEgXHRpbWVzIFx0ZXh0e2JldmVyYWdlX2VuZXJneV9kcmlua30NCiQkDQoNCsSQaeG7gXUgbsOgeSBwaOG6o24gw6FuaCBoaeG7h24gdMaw4bujbmcgKirEkWEgY+G7mW5nIHR1eeG6v24gaG/DoG4gdG/DoG4qKiAoKnBlcmZlY3QgbXVsdGljb2xsaW5lYXJpdHkqKSwgdOG7qWMgbMOgIG3hu5l0IGJp4bq/biBjw7MgdGjhu4MgxJHGsOG7o2MgYmnhu4N1IGRp4buFbiBjaMOtbmggeMOhYyBi4bqxbmcgdOG7lSBo4bujcCB0dXnhur9uIHTDrW5oIGPhu6dhIGPDoWMgYmnhur9uIGPDsm4gbOG6oWkuIFRyb25nIHRyxrDhu51uZyBo4bujcCBuw6B5LCBo4buHIHPhu5EgY+G7p2EgYmnhur9uIGBiZXZlcmFnZV90ZWFgIGtow7RuZyB0aOG7gyDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcgbeG7mXQgY8OhY2ggZHV5IG5o4bqldCwgZOG6q24gxJHhur9uIGdpw6EgdHLhu4sgYE5BYCB0cm9uZyBr4bq/dCBxdeG6oyBo4buTaSBxdXkuDQoNClbDrCBsw70gZG8gxJHDsywgYmnhur9uIGJldmVyYWdlX3RlYSBz4bq9IMSRxrDhu6NjIGxv4bqhaSBraOG7j2kgbcO0IGjDrG5oIGjhu5NpIHF1eSBi4buZaSDEkeG7gyDEkeG6o20gYuG6o28gdMOtbmggeMOhYyDEkeG7i25oIGPhu6dhIG3DtCBow6xuaCB2w6AgdHLDoW5oIHNhaSBs4buHY2ggdHJvbmcgcGjDom4gdMOtY2guDQoNCiMjIyAqKjQuOC4xLiBNw7QgaMOsbmggTG9naXQqKg0KDQpgYGB7cn0NCm1oaHFfbG9naXQgPC0gZ2xtKHNsZWVwX2JpbmFyeSB+IGJldmVyYWdlX2NvZmZlZSArIGJldmVyYWdlX2VuZXJneV9kcmluayArIHRpbWVfb2ZfZGF5X2V2ZW5pbmcsDQogICAgICAgICAgICAgICAgICBkYXRhID0gZHQsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSkNCnN1bW1hcnkobWhocV9sb2dpdCkNCmBgYA0KDQpfKipOaOG6rW4geMOpdDoqKl8NCg0KUGjGsMahbmcgdHLDrG5oIGjhu5NpIHF1eSBsb2dpdCBjw7MgZOG6oW5nOg0KDQokJA0KXGxvZ1xsZWZ0KCBcZnJhY3tcaGF0e1xwaX19ezEgLSBcaGF0e1xwaX19IFxyaWdodCkgPSAtMy4wNjIzICsgMS43MzMwIFxjZG90IFx0ZXh0e2JldmVyYWdlX2NvZmZlZX0gKyAyLjEzMjAgXGNkb3QgXHRleHR7YmV2ZXJhZ2VfZW5lcmd5X2RyaW5rfSArIDIuNzM2NSBcY2RvdCBcdGV4dHt0aW1lX29mX2RheV9ldmVuaW5nfQ0KJCQNCg0KfCBCaeG6v24gICAgICAgICAgICAgICAgICAgICAgICAgfCBOaMOzbSBzbyBzw6FuaCAgICAgICAgIHwgSOG7hyBz4buRICjOsikgfCBwLXZhbHVlICAgfCBPZGRzIFJhdGlvIChlXs6yKSB8IERp4buFbiBnaeG6o2kgY2hpIHRp4bq/dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IGJldmVyYWdlX2NvZmZlZSAgICAgICAgICAgICB8IFNvIHbhu5tpIGtow7RuZyB14buRbmcgICAgfCAxLjczMyAgICAgfCAyLjEzZS0xMCAgfCA1LjY1ICAgICAgICAgICAgIHwgTmfGsOG7nWkgdeG7kW5nIGPDoCBwaMOqIGPDsyB4w6FjIHN14bqldCBideG7k24gbmfhu6cgY2FvIGfhuqVwIDUuNjUgbOG6p24gc28gduG7m2kgbmfGsOG7nWkga2jDtG5nIHXhu5FuZy4gIHwNCnwgYmV2ZXJhZ2VfZW5lcmd5X2RyaW5rICAgICAgIHwgU28gduG7m2kga2jDtG5nIHXhu5FuZyAgICB8IDIuMTMyICAgICB8IDEuMTJlLTA2ICB8IDguNDMgICAgICAgICAgICAgfCBWaeG7h2Mgc+G7rSBk4bulbmcgbsaw4bubYyB0xINuZyBs4buxYyBsw6BtIHTEg25nIHjDoWMgc3XhuqV0IGJ14buTbiBuZ+G7pyBn4bqlcCA4LjQzIGzhuqduLiAgICAgICAgICAgICAgIHwNCnwgdGltZV9vZl9kYXlfZXZlbmluZyAgICAgICAgIHwgU28gduG7m2kgYmFuIG5nw6B5ICAgICAgfCAyLjczNyAgICAgfCA8IDJlLTE2ICAgfCAxNS40NSAgICAgICAgICAgIHwgVeG7kW5nIHbDoG8gYnXhu5VpIHThu5FpIGzDoG0gdMSDbmcgeMOhYyBzdeG6pXQgYnXhu5NuIG5n4bunIGfhuqVwIDE1LjQ1IGzhuqduIHNvIHbhu5tpIHXhu5FuZyBiYW4gbmfDoHkuICB8DQoNCioqS+G6v3QgbHXhuq1uOioqDQoNCkThu7FhIHRyw6puIGvhur90IHF14bqjIG3DtCBow6xuaCBo4buTaSBxdXkgTG9naXQsIGPDoWMgeeG6v3UgdOG7kSBjw7Mg4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MgxJHhur9uIHjDoWMgc3XhuqV0IGJ14buTbiBuZ+G7pyBiYW8gZ+G7k20gdmnhu4djIHXhu5FuZyBjw6AgcGjDqiwgc+G7rSBk4bulbmcgbsaw4bubYyB0xINuZyBs4buxYyB2w6AgdGjhu51pIMSRaeG7g20gdeG7kW5nIHbDoG8gYnXhu5VpIHThu5FpLiBD4bulIHRo4buDLCBuZ8aw4budaSBjw7MgdeG7kW5nIGPDoCBwaMOqIGPDsyB4w6FjIHN14bqldCBideG7k24gbmfhu6cgY2FvIGfhuqVwIGtob+G6o25nIDUuNjUgbOG6p24gc28gduG7m2kgbmfGsOG7nWkga2jDtG5nIHXhu5FuZy4gVmnhu4djIHPhu60gZOG7pW5nIG7GsOG7m2MgdMSDbmcgbOG7sWMgbMOgbSB0xINuZyB4w6FjIHN14bqldCBideG7k24gbmfhu6cgbMOqbiA4LjQzIGzhuqduLCB0cm9uZyBraGkgdeG7kW5nIHbDoG8gYnXhu5VpIHThu5FpIGzDoG0gdMSDbmcgeMOhYyBzdeG6pXQgbsOgeSBsw6puIMSR4bq/biAxNS40NSBs4bqnbiBzbyB24bubaSB14buRbmcgYmFuIG5nw6B5LiBU4bqldCBj4bqjIGPDoWMgYmnhur9uIG7DoHkgxJHhu4F1IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogY2FvIChwLXZhbHVlIDwgMC4wMDEpLCBjaG8gdGjhuqV5IG3hu5FpIGxpw6puIGjhu4cgY2jhurd0IGNo4bq9IGdp4buvYSBjw6FjIGxv4bqhaSDEkeG7kyB14buRbmcsIHRo4budaSDEkWnhu4NtIHRpw6p1IHRo4bulIHbDoCB0w6xuaCB0cuG6oW5nIGJ14buTbiBuZ+G7py4gxJBp4buBdSBuw6B5IGfhu6NpIMO9IHLhurFuZyB2aeG7h2Mgc+G7rSBk4bulbmcgY8OhYyBsb+G6oWkgxJHhu5MgdeG7kW5nIGvDrWNoIHRow61jaCB2w6BvIGJ14buVaSB04buRaSBjw7MgdGjhu4MgbMOgbSB0aGF5IMSR4buVaSB0cuG6oW5nIHRow6FpIHNpbmggbMO9LCBsw6BtIHTEg25nIG5ndXkgY8ahIGJ14buTbiBuZ+G7pyBuZ2/DoGkgw70gbXXhu5FuLg0KDQojIyMgKio0LjguMi4gTcO0IGjDrG5oIFByb2JpdCoqDQoNCmBgYHtyfQ0KbWhocV9wcm9iaXQgPC0gZ2xtKHNsZWVwX2JpbmFyeSB+IGJldmVyYWdlX2NvZmZlZSArIGJldmVyYWdlX2VuZXJneV9kcmluayArICB0aW1lX29mX2RheV9ldmVuaW5nLA0KICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkdCwNCiAgICAgICAgICAgICAgICAgICBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gInByb2JpdCIpKQ0Kc3VtbWFyeShtaGhxX3Byb2JpdCkNCmBgYA0KXyoqTmjhuq1uIHjDqXQ6KipfDQoNClBoxrDGoW5nIHRyw6xuaCBo4buTaSBxdXkgUHJvYml0IGPDsyBk4bqhbmc6DQoNCiQkDQpcUGhpXnstMX0oXGhhdHtccGl9KSA9IC0xLjc3OTIgKyAwLjk5NDggXGNkb3QgXHRleHR7YmV2ZXJhZ2VfY29mZmVlfSArIDEuMjMxOSBcY2RvdCBcdGV4dHtiZXZlcmFnZV9lbmVyZ3lfZHJpbmt9ICsgMS42MTYzIFxjZG90IFx0ZXh0e3RpbWVfb2ZfZGF5X2V2ZW5pbmd9DQokJA0KDQp8IEJp4bq/biAgICAgICAgICAgICAgICAgICAgICAgICB8IE5ow7NtIHNvIHPDoW5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgSOG7hyBz4buRICjOsikgfCBwLXZhbHVlICAgIHwgRGnhu4VuIGdp4bqjaSBjaGkgdGnhur90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCBiZXZlcmFnZV9jb2ZmZWUgICAgICAgICAgICAgfCBTbyB24bubaSBraMO0bmcgdeG7kW5nIGPDoCBwaMOqICAgICAgICAgICAgIHwgMC45OTQ4ICAgIHwgOS42MWUtMTEgICB8IE5nxrDhu51pIHXhu5FuZyBjw6AgcGjDqiBjw7MgeMOhYyBzdeG6pXQgYnXhu5NuIG5n4bunIGNhbyBoxqFuIMSRw6FuZyBr4buDLiAgICAgICAgICAgICB8DQp8IGJldmVyYWdlX2VuZXJneV9kcmluayAgICAgICB8IFNvIHbhu5tpIGtow7RuZyB14buRbmcgZW5lcmd5IGRyaW5rICAgICAgIHwgMS4yMzE5ICAgIHwgNS45NGUtMDcgICB8IE5nxrDhu51pIHXhu5FuZyBuxrDhu5tjIHTEg25nIGzhu7FjIGPDsyB4w6FjIHN14bqldCBideG7k24gbmfhu6cgY2FvIGjGoW4gxJHDoW5nIGvhu4MuICAgICB8DQp8IHRpbWVfb2ZfZGF5X2V2ZW5pbmcgICAgICAgICB8IFNvIHbhu5tpIGJhbiBuZ8OgeSAgICAgICAgICAgICAgICAgICAgICB8IDEuNjE2MyAgICB8IDwgMmUtMTYgICAgfCBV4buRbmcgdsOgbyBideG7lWkgdOG7kWkgbMOgbSB0xINuZyB4w6FjIHN14bqldCBideG7k24gbmfhu6cgc28gduG7m2kgYmFuIG5nw6B5LiAgICAgICB8DQoNCioqS+G6v3QgbHXhuq1uOioqDQoNCkThu7FhIHRyw6puIGvhur90IHF14bqjIG3DtCBow6xuaCBo4buTaSBxdXkgUHJvYml0LCBjw6FjIHnhur91IHThu5EgY8OzIOG6o25oIGjGsOG7n25nIMSRw6FuZyBr4buDIMSR4bq/biB4w6FjIHN14bqldCBideG7k24gbmfhu6cgc2F1IGtoaSB14buRbmcgZ+G7k206IHXhu5FuZyBjw6AgcGjDqiwgdeG7kW5nIG7GsOG7m2MgdMSDbmcgbOG7sWMsIHbDoCB0aOG7nWkgxJFp4buDbSB14buRbmcgdsOgbyBideG7lWkgdOG7kWkuIEPhu6UgdGjhu4MsIG5o4buvbmcgbmfGsOG7nWkgdeG7kW5nIGPDoCBwaMOqIGhv4bq3YyBuxrDhu5tjIHTEg25nIGzhu7FjIGPDsyB4w6FjIHN14bqldCBideG7k24gbmfhu6cgY2FvIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgbmfGsOG7nWkga2jDtG5nIHPhu60gZOG7pW5nIGPDoWMgbG/huqFpIMSR4buTIHXhu5FuZyBuw6B5LiDEkOG6t2MgYmnhu4d0LCB0aOG7nWkgxJFp4buDbSB14buRbmcgdsOgbyBideG7lWkgdOG7kWkgbMOgbSB0xINuZyB4w6FjIHN14bqldCBideG7k24gbmfhu6cgbeG6oW5oIG5o4bqldCB0cm9uZyBz4buRIGPDoWMgeeG6v3UgdOG7kSwgY2hvIHRo4bqleSB2YWkgdHLDsiBxdWFuIHRy4buNbmcgY+G7p2EgdGjhu51pIGdpYW4gdGnDqnUgdGjhu6UgxJHhu5MgdeG7kW5nLiBL4bq/dCBxdeG6oyBuw6B5IGfhu6NpIMO9IHLhurFuZywgZMO5IGPDoWMgbG/huqFpIMSR4buTIHXhu5FuZyB0csOqbiB0aMaw4budbmcgxJHGsOG7o2MgeGVtIGzDoCBnacO6cCB04buJbmggdMOhbywgbmjGsG5nIHRyb25nIHRo4buxYyB04bq/IGPDsyB0aOG7gyBnw6J5IHTDoWMgZOG7pW5nIG5nxrDhu6NjIHTDuXkgdsOgbyB0aOG7nWkgxJFp4buDbSB2w6AgY8ahIMSR4buLYSBuZ8aw4budaSBz4butIGThu6VuZy4NCg0KIyMjICoqNC44LjMuIE3DtCBow6xuaCBDbG9nbG9nKioNCg0KYGBge3J9DQptaGhxX2Nsb2dsb2cgPC0gZ2xtKHNsZWVwX2JpbmFyeSB+IGJldmVyYWdlX2NvZmZlZSArIGJldmVyYWdlX2VuZXJneV9kcmluayArICB0aW1lX29mX2RheV9ldmVuaW5nLA0KICAgICAgICAgICAgICAgICAgICBkYXRhID0gZHQsDQogICAgICAgICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAiY2xvZ2xvZyIpKQ0Kc3VtbWFyeShtaGhxX2Nsb2dsb2cpDQpgYGANCg0KQuG6o25nOiBDw6FjIGJp4bq/biBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHRyb25nIG3DtCBow6xuaCBDbG9nbG9nDQoNCnwgQmnhur9uICAgICAgICAgICAgICAgICAgICAgICAgIHwgTmjDs20gc28gc8OhbmggICAgICAgICAgICAgfCBI4buHIHPhu5EgKM6yKSB8IHAtdmFsdWUgICAgIHwgZXhwKM6yKSAoaGF6YXJkIHJhdGlvKSB8IERp4buFbiBnaeG6o2kgY2hpIHRp4bq/dCB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgYmV2ZXJhZ2VfY29mZmVlICAgICAgICAgICAgIHwgU28gduG7m2kga2jDtG5nIHXhu5FuZyBjw6AgcGjDqiAgfCAxLjE5NCAgICAgfCAyLjIwZS0wOSAgICB8IDMuMzAgICAgICAgICAgICAgICAgICAgfCBOZ8aw4budaSB14buRbmcgY8OgIHBow6ogY8OzIHjDoWMgc3XhuqV0IGPDsyBnaeG6pWMgbmfhu6cgY2FvIGjGoW4ga2hv4bqjbmcgMy4zIGzhuqduIHNvIHbhu5tpIG5nxrDhu51pIGtow7RuZyB14buRbmcgY8OgIHBow6ouIHwNCnwgYmV2ZXJhZ2VfZW5lcmd5X2RyaW5rICAgICAgIHwgU28gduG7m2kga2jDtG5nIHXhu5FuZyBlbmVyZ3kgZHJpbmsgfCAxLjQ4NyAgICAgfCA3LjgxZS0wOCAgICB8IDQuNDIgICAgICAgICAgICAgICAgICAgfCBOZ8aw4budaSB14buRbmcgbsaw4bubYyB0xINuZyBs4buxYyBjw7MgeMOhYyBzdeG6pXQgY8OzIGdp4bqlYyBuZ+G7pyBjYW8gaMahbiBraG/huqNuZyA0LjQyIGzhuqduIHNvIHbhu5tpIG5nxrDhu51pIGtow7RuZyB14buRbmcuIHwNCnwgdGltZV9vZl9kYXlfZXZlbmluZyAgICAgICAgIHwgU28gduG7m2kga2jDtG5nIHXhu5FuZyBideG7lWkgdOG7kWkgfCAyLjAxNSAgICAgfCA8IDJlLTE2ICAgICB8IDcuNTAgICAgICAgICAgICAgICAgICAgfCBOZ8aw4budaSB14buRbmcgdsOgbyBideG7lWkgdOG7kWkgY8OzIHjDoWMgc3XhuqV0IGPDsyBnaeG6pWMgbmfhu6cgY2FvIGjGoW4ga2hv4bqjbmcgNy41IGzhuqduIHNvIHbhu5tpIG5nxrDhu51pIGtow7RuZyB14buRbmcgdsOgbyBideG7lWkgdOG7kWkuIHwNCg0KUGjGsMahbmcgdHLDrG5oIGjhu5NpIHF1eSBDbG9nbG9nIMSRxrDhu6NjIMaw4bubYyBsxrDhu6NuZyBuaMawIHNhdToNCg0KJCQNClxsb2coLVxsb2coMSAtIFxoYXR7XHBpfSkpID0gLTIuNzE5MCArIDEuMTk0MCBcY2RvdCBcdGV4dHtDb2ZmZWV9ICsgMS40ODY1IFxjZG90IFx0ZXh0e0VuZXJneX0gKyAyLjAxNDYgXGNkb3QgXHRleHR7RXZlbmluZ30NCiQkDQoNCioqS+G6v3QgbHXhuq1uOioqDQoNCkvhur90IHF14bqjIGjhu5NpIHF1eSB04burIG3DtCBow6xuaCBDbG9nbG9nIHThu5VuZyBxdcOhdCBjaG8gdGjhuqV5IGPDoWMgYmnhur9uIGJldmVyYWdlX2NvZmZlZSwgYmV2ZXJhZ2VfZW5lcmd5X2RyaW5rIHbDoCB0aW1lX29mX2RheV9ldmVuaW5nIMSR4buBdSBjw7Mg4bqjbmggaMaw4bufbmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiDEkeG6v24geMOhYyBzdeG6pXQgbeG6pXQgbmfhu6csIHbhu5tpIHAtdmFsdWUgxJHhu4F1IG5o4buPIGjGoW4gMC4wMSAobmjhu48gaMahbiBt4bupYyDDvSBuZ2jEqWEgNSUpLiBD4bulIHRo4buDLCBjw6FjIGjhu4cgc+G7kSDGsOG7m2MgbMaw4bujbmcgxJHhu4F1IGTGsMahbmcsIGNobyB0aOG6pXkgdmnhu4djIHXhu5FuZyBjw6AgcGjDqiwgdeG7kW5nIG7GsOG7m2MgdMSDbmcgbOG7sWMgaG/hurdjIHRpw6p1IHRo4bulIGPDoWMgbG/huqFpIMSR4buTIHXhu5FuZyBuw6B5IHbDoG8gYnXhu5VpIHThu5FpIMSR4buBdSBsw6BtIHTEg25nIHjDoWMgc3XhuqV0IG3huqV0IG5n4bunLiBDaOG6s25nIGjhuqFuLCBo4buHIHPhu5EgxrDhu5tjIGzGsOG7o25nIGPhu6dhIGJp4bq/biAiY8OzIHXhu5FuZyBjw6AgcGjDqiIgbMOgIDEuMTk0LCB0xrDGoW5nIOG7qW5nIHbhu5tpIHjDoWMgc3XhuqV0IG3huqV0IG5n4bunIGNhbyBoxqFuIGtob+G6o25nIDMuMyBs4bqnbiBzbyB24bubaSBuZ8aw4budaSBraMO0bmcgdeG7kW5nIGPDoCBwaMOqLCBraGkgY8OhYyB54bq/dSB04buRIGtow6FjIGtow7RuZyDEkeG7lWkuIEJp4bq/biAiYmV2ZXJhZ2VfdGVhIiBi4buLIGxv4bqhaSBraOG7j2kgbcO0IGjDrG5oIGRvIGhp4buHbiB0xrDhu6NuZyDEkWEgY+G7mW5nIHR1eeG6v24uIA0KDQpOaMOsbiBjaHVuZywgbcO0IGjDrG5oIGNobyB0aOG6pXkgY8OhYyBsb+G6oWkgxJHhu5MgdeG7kW5nIGNo4bupYSBjYWZmZWluZSB2w6AgdGjhu51pIMSRaeG7g20gdGnDqnUgdGjhu6UgY2jDum5nIGzDoCBuaOG7r25nIHnhur91IHThu5EgcuG7p2kgcm8gcXVhbiB0cuG7jW5nIOG6o25oIGjGsOG7n25nIHRpw6p1IGPhu7FjIMSR4bq/biBraOG6oyBuxINuZyBjw7MgxJHGsOG7o2MgZ2nhuqVjIG5n4bunIHRyb25nIG3huqt1IG5naGnDqm4gY+G7qXUgbsOgeS4NCg0KIyMgKio0LjkgxJDDoW5oIGdpw6EgbcO0IGjDrG5oIGjhu5NpIHF1eSBi4buZaSoqDQoNCioqQ2jhu4kgc+G7kSBBSUMqKg0KDQpgYGB7cn0NCkFJQyhtaGhxX2xvZ2l0KQ0KQUlDKG1oaHFfcHJvYml0KQ0KQUlDKG1oaHFfY2xvZ2xvZykNCmBgYA0KKipDaOG7iSBz4buRIEJJQyoqDQoNCmBgYHtyfQ0KQklDKG1oaHFfbG9naXQpDQpCSUMobWhocV9wcm9iaXQpDQpCSUMobWhocV9jbG9nbG9nKQ0KYGBgDQoNCioqQ2jhu4kgc+G7kSBMb2ctTGlrZWxpaG9vZCoqDQoNCmBgYHtyfQ0KIyBTbyBzw6FuaCBMb2ctTGlrZWxpaG9vZA0KbG9nTGlrKG1oaHFfbG9naXQpDQpsb2dMaWsobWhocV9wcm9iaXQpDQpsb2dMaWsobWhocV9jbG9nbG9nKQ0KYGBgDQoqKkNo4buJIHPhu5EgTWNGYWRkZW5fUjIqKg0KDQpgYGB7cn0NCnBSMihtaGhxX2xvZ2l0KVsiTWNGYWRkZW4iXQ0KcFIyKG1oaHFfcHJvYml0KVsiTWNGYWRkZW4iXQ0KcFIyKG1oaHFfY2xvZ2xvZylbIk1jRmFkZGVuIl0NCmBgYA0KDQoqKlNvIHPDoW5oIGPDoWMgbcO0IGjDrG5oKioNCg0KfCBNw7QgaMOsbmggICAgICAgICAgICB8ICAgIEFJQyAgICB8ICAgICBCSUMgICAgIHwgTG9nLUxpa2VsaWhvb2QgfCBSwrIgLyBNY0ZhZGRlbiBSwrIgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18DQp8IExvZ2l0ICAgICAgICAgICAgICB8IDQ1MS4zMDA4ICB8IDQ2OC4xNTkyICAgIHwgLTIyMS42NTA0ICAgICAgfCAwLjM0MzYgICAgICAgICAgIHwNCnwgUHJvYml0ICAgICAgICAgICAgIHwgNDUxLjE3NDMgIHwgNDY4LjAzMjggICAgfCAtMjIxLjU4NzIgICAgICB8IDAuMzQzOCAgICAgICAgICAgfA0KfCBDbG9nbG9nICAgICAgICAgICAgfCA0NTIuODEzNCAgfCA0NjkuNjcxOCAgICB8IC0yMjIuNDA2NyAgICAgIHwgMC4zNDE0ICAgICAgICAgICB8DQoNCg0KROG7sWEgdHLDqm4gYuG6o25nIHNvIHPDoW5oIGPDoWMgbcO0IGjDrG5oLCB0YSBjw7MgdGjhu4MgxJHGsGEgcmEgbmjhuq1uIHjDqXQgbmjGsCBzYXU6DQoNCi0gROG7sWEgdHLDqm4gYuG6o25nIHNvIHPDoW5oIGPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSwgY8OzIHRo4buDIHRo4bqleSBy4bqxbmcgbcO0IGjDrG5oICoqUHJvYml0KiogbWFuZyBs4bqhaSBr4bq/dCBxdeG6oyBwaMO5IGjhu6NwIG5o4bqldC4gTcO0IGjDrG5oIG7DoHkgY8OzIGdpw6EgdHLhu4sgKipBSUMgdGjhuqVwIG5o4bqldCoqICg0NTEuMTc0MykgdsOgICoqQklDIHRo4bqlcCBuaOG6pXQqKiAoNDY4LjAzMjgpLCDEkeG7k25nIHRo4budaSDEkeG6oXQgKipMb2ctTGlrZWxpaG9vZCBjYW8gbmjhuqV0KiogKOKAkzIyMS41ODcyKSB2w6AgKipo4buHIHPhu5EgTWNGYWRkZW4gUsKyIGzhu5tuIG5o4bqldCoqICgwLjM0MzgpLiBOaOG7r25nIGNo4buJIHPhu5EgbsOgeSBjaG8gdGjhuqV5IGto4bqjIG7Eg25nIGdp4bqjaSB0aMOtY2ggYmnhur9uIHBo4bulIHRodeG7mWMgdOG7kXQgaMahbiBzbyB24bubaSBjw6FjIG3DtCBow6xuaCBjw7JuIGzhuqFpLCBiYW8gZ+G7k20gY+G6oyBMb2dpdCB2w6AgQ2xvZ2xvZy4NCg0KLSBU4burIGPDoWMgdGnDqnUgY2jDrSB0aOG7kW5nIGvDqiB2w6AgbeG7qWMgxJHhu5kgcGjDuSBo4bujcCBtw7QgaMOsbmgsIGPDsyB0aOG7gyBr4bq/dCBsdeG6rW4gcuG6sW5nIG3DtCBow6xuaCBQcm9iaXQgbMOgIGzhu7FhIGNo4buNbiDGsHUgdmnhu4d0IG5o4bqldCDEkeG7gyBk4buxIMSRb8OhbiB4w6FjIHN14bqldCBt4bqldCBuZ+G7pyBk4buxYSB0csOqbiBjw6FjIHnhur91IHThu5EgbGnDqm4gcXVhbiDEkeG6v24gxJHhu5MgdeG7kW5nIHbDoCB0aOG7nWkgxJFp4buDbSB0acOqdSB0aOG7pS4NCg0KIyMgKio0LjEwLiBE4buxIGLDoW8qKg0KDQpgYGB7cn0NCm5ld19wZXJzb24gPC0gZGF0YS5mcmFtZSgNCiAgYmV2ZXJhZ2VfY29mZmVlID0gZmFjdG9yKCJDw7MgdeG7kW5nIGPDoCBwaMOqIiwgbGV2ZWxzID0gbGV2ZWxzKGR0JGJldmVyYWdlX2NvZmZlZSkpLA0KICBiZXZlcmFnZV9lbmVyZ3lfZHJpbmsgPSBmYWN0b3IoIkPDsyB14buRbmcgZW5lcmd5IGRyaW5rIiwgbGV2ZWxzID0gbGV2ZWxzKGR0JGJldmVyYWdlX2VuZXJneV9kcmluaykpLA0KICB0aW1lX29mX2RheV9ldmVuaW5nID0gZmFjdG9yKCJDw7MgdeG7kW5nIGJ14buVaSB04buRaSIsIGxldmVscyA9IGxldmVscyhkdCR0aW1lX29mX2RheV9ldmVuaW5nKSkNCikNCmBgYA0KDQoNCmBgYHtyfQ0KcHJlZGljdChtaGhxX3Byb2JpdCwgbmV3ZGF0YSA9IG5ld19wZXJzb24sIHR5cGUgPSAicmVzcG9uc2UiKQ0KYGBgDQoNCmBgYHtyfQ0KcHJlZGljdChtaGhxX3Byb2JpdCwgbmV3ZGF0YSA9IG5ld19wZXJzb24sIHR5cGUgPSAibGluayIpDQpgYGANCioqS+G6v3QgbHXhuq1uOioqDQoNCkThu7FhIHRyw6puIGvhur90IHF14bqjIGThu7EgYsOhbyB04burIG3DtCBow6xuaCBo4buTaSBxdXkgUHJvYml0IChtaGhxX3Byb2JpdCksIGdpw6EgdHLhu4sgdHV54bq/biB0w61uaCAobGluZWFyIHByZWRpY3RvcikgdGh1IMSRxrDhu6NjIGzDoCAyLjA2MzkgdsOgIHjDoWMgc3XhuqV0IHTGsMahbmcg4bupbmcgbMOgIDAuOTgwNS4gR2nDoSB0cuG7iyB0dXnhur9uIHTDrW5oIG7DoHkgbMOgIGvhur90IHF14bqjIGPhu6dhIHZp4buHYyBr4bq/dCBo4bujcCBjw6FjIGjhu4cgc+G7kSDGsOG7m2MgbMaw4bujbmcgduG7m2kgZ2nDoSB0cuG7iyBj4bunYSBjw6FjIGJp4bq/biBnaeG6o2kgdGjDrWNoLCB0aMO0bmcgcXVhIGjDoG0gbGnDqm4ga+G6v3QgUHJvYml0LiBLaGkgw6FwIGThu6VuZyBow6BtIHBow6JuIHBo4buRaSB0w61jaCBsxal5IGNodeG6qW4gKENERikgbMOqbiBnacOhIHRy4buLIG7DoHksIHRhIHRodSDEkcaw4bujYyB4w6FjIHN14bqldCBy4bqxbmcgY8OhIG5ow6JuIGPDsyDEkeG6t2MgxJFp4buDbSBuaMawIHRyb25nIG5ld19wZXJzb24gc+G6vSB0aHXhu5ljIG5ow7NtIGLhu4sg4bqjbmggaMaw4bufbmcgxJHhur9uIGdp4bqlYyBuZ+G7pyBsw6Aga2hv4bqjbmcgOTguMDUlLg0KDQrEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSB04buVIGjhu6NwIGPDoWMgeeG6v3UgdOG7kSBuaMawIGPDsyB14buRbmcgY8OgIHBow6osIGPDsyBz4butIGThu6VuZyBuxrDhu5tjIHTEg25nIGzhu7FjLCB2w6AgZMO5bmcgdsOgbyBideG7lWkgdOG7kWkgxJHhu4F1IGfDs3AgcGjhuqduIGzDoG0gdMSDbmcgbeG6oW5oIGto4bqjIG7Eg25nIGLhu4sg4bqjbmggaMaw4bufbmcgZ2nhuqVjIG5n4bunLiBHacOhIHRy4buLIHR1eeG6v24gdMOtbmggZMawxqFuZyBs4bubbiAoa2hv4bqjbmcgMi4wNikgY8WpbmcgcGjhuqNuIMOhbmggdMOhYyDEkeG7mW5nIGPhu5luZyBoxrDhu59uZyByw7UgcuG7h3QgdOG7qyBjw6FjIGJp4bq/biBnaeG6o2kgdGjDrWNoIGzDqm4geMOhYyBzdeG6pXQgeOG6o3kgcmEgaGnhu4duIHTGsOG7o25nLg0KDQpU4burIMSRw7MsIGPDsyB0aOG7gyBuaOG6rW4gxJHhu4tuaCBy4bqxbmcgbcO0IGjDrG5oIFByb2JpdCBraMO0bmcgY2jhu4kgcGjDuSBo4bujcCB24buBIG3hurd0IHRo4buRbmcga8OqIG3DoCBjw7JuIGNobyB0aOG6pXkga2jhuqMgbsSDbmcgZOG7sSBiw6FvIGhp4buHdSBxdeG6oywgZ2nDunAgeMOhYyDEkeG7i25oIHLDtSBuaOG7r25nIHnhur91IHThu5Egbmd1eSBjxqEgbMOgbSBnaeG6o20gY2jhuqV0IGzGsOG7o25nIGdp4bqlYyBuZ+G7pyDhu58gbmjhu69uZyBuZ8aw4budaSBjw7MgaMOgbmggdmkgdGnDqnUgZMO5bmcgdMawxqFuZyB04buxLg0KDQojICoqQ0jGr8agTkcgNTogS+G6vlQgTFXhuqxOIFbDgCBLSeG6vk4gTkdI4buKKioNCg0KIyMgKio1LjEuIEvhur90IGx14bqtbioqDQoNClRyb25nIHRp4buDdSBsdeG6rW4gbsOgeSwgdMOhYyBnaeG6oyDEkcOjIHRp4bq/biBow6BuaCBt4buZdCBwaMOibiB0w61jaCDEkeG7i25oIGzGsOG7o25nIHRvw6BuIGRp4buHbiB0csOqbiBi4buZIGThu68gbGnhu4d1IGfhu5NtIDUwMCBxdWFuIHPDoXQgduG7m2kgOSBiaeG6v24sIG5o4bqxbSDEkcOhbmggZ2nDoSBt4buRaSBsacOqbiBo4buHIGdp4buvYSBow6BuaCB2aSB0acOqdSB0aOG7pSDEkeG7kyB14buRbmcgY2jhu6lhIGNhZmZlaW5lIHbDoCBraOG6oyBuxINuZyBnaeG6pWMgbmfhu6cgYuG7iyDhuqNuaCBoxrDhu59uZy4gQmnhur9uIHBo4bulIHRodeG7mWMgbMOgIG3hu5l0IGJp4bq/biBuaOG7iyBwaMOibiBwaOG6o24gw6FuaCBsaeG7h3UgZ2nhuqVjIG5n4bunIGPhu6dhIGPDoSBuaMOibiBjw7MgYuG7iyB0w6FjIMSR4buZbmcgdGnDqnUgY+G7sWMgYuG7n2kgY8OhYyB54bq/dSB04buRIGxpw6puIHF1YW4gxJHhur9uIGNhZmZlaW5lIGhheSBraMO0bmcuIEPDoWMgYmnhur9uIMSR4buZYyBs4bqtcCBiYW8gZ+G7k20gbG/huqFpIMSR4buTIHXhu5FuZyAoY8OgIHBow6osIG7GsOG7m2MgdMSDbmcgbOG7sWMsIHRyw6ApIHbDoCB0aOG7nWkgxJFp4buDbSBz4butIGThu6VuZyAoYmFuIMSRw6ptIGhheSBraMO0bmcpLg0KDQpQaMOibiB0w61jaCB0aOG7kW5nIGvDqiBtw7QgdOG6oyBiYW4gxJHhuqd1IGdpw7pwIHjDoWMgxJHhu4tuaCDEkeG6t2MgxJFp4buDbSBwaMOibiBi4buRIGPhu6dhIHThu6tuZyBiaeG6v24gdsOgIG5o4bqtbiBkaeG7h24gY8OhYyB54bq/dSB04buRIHRp4buBbSBuxINuZyDhuqNuaCBoxrDhu59uZyDEkeG6v24gZ2nhuqVjIG5n4bunLiBUaeG6v3AgdGhlbywgYmEgbcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibiBn4buTbSBMb2dpdCwgUHJvYml0IHbDoCBDbG9nbG9nIMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIGtp4buDbSDEkeG7i25oIG3hu6ljIMSR4buZIOG6o25oIGjGsOG7n25nIGPhu6dhIGPDoWMgYmnhur9uIMSR4buZYyBs4bqtcC4gVmnhu4djIHNvIHPDoW5oIGPDoWMgbcO0IGjDrG5oIGThu7FhIHRyw6puIGPDoWMgdGnDqnUgY2jDrSBuaMawIEFJQywgbG9nLWxpa2VsaWhvb2QgdsOgIGNo4buJIHPhu5EgTWNGYWRkZW4gUsKyLiBL4bq/dCBxdeG6oyBjaG8gdGjhuqV5IG3DtCBow6xuaCBQcm9iaXQgbMOgIHBow7kgaOG7o3AgbmjhuqV0LCB24bubaSBBSUMgdGjhuqVwIG5o4bqldCAoNDUxLjE3KSB2w6AgTWNGYWRkZW4gUsKyIGNhbyBuaOG6pXQgKDAuMzY1MyksIHBo4bqjbiDDoW5oIG7Eg25nIGzhu7FjIGdp4bqjaSB0aMOtY2ggdOG7kXQgbmjhuqV0Lg0KDQpL4bq/dCBxdeG6oyBo4buTaSBxdXkgY2hvIHRo4bqleSBiYSB54bq/dSB04buRIGPDsyDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gyDEkeG6v24ga2jhuqMgbsSDbmcgZ2nhuqVjIG5n4bunIGLhu4sg4bqjbmggaMaw4bufbmcgZ+G7k206IHXhu5FuZyBjw6AgcGjDqiwgdeG7kW5nIG7GsOG7m2MgdMSDbmcgbOG7sWMgdsOgIHRpw6p1IHRo4bulIHbDoG8gYnXhu5VpIHThu5FpLiBUcm9uZyDEkcOzLCB54bq/dSB04buRIHRo4budaSDEkWnhu4NtIHPhu60gZOG7pW5nIHbDoG8gYnXhu5VpIHThu5FpIGPDsyB0w6FjIMSR4buZbmcgbeG6oW5oIG5o4bqldC4gTmfGsOG7o2MgbOG6oWksIHZp4buHYyB14buRbmcgdHLDoCBjw7MgeHUgaMaw4bubbmcgbMOgbSBnaeG6o20geMOhYyBzdeG6pXQgYuG7iyDhuqNuaCBoxrDhu59uZyBnaeG6pWMgbmfhu6csIHR1eSBuaGnDqm4gYmnhur9uIG7DoHkgYuG7iyBsb+G6oWkga2jhu49pIG3DtCBow6xuaCBkbyB04buTbiB04bqhaSBoaeG7h24gdMaw4bujbmcgxJFhIGPhu5luZyB0dXnhur9uIGhvw6BuIHRvw6BuLg0KDQpE4buxIGLDoW8gdOG7qyBtw7QgaMOsbmggUHJvYml0IGNobyB0aOG6pXksIG3hu5l0IG5nxrDhu51pIGPDsyB14buRbmcgY8OgIHBow6osIHPhu60gZOG7pW5nIG7GsOG7m2MgdMSDbmcgbOG7sWMgdsOgIHRpw6p1IHRo4bulIHbDoG8gYnXhu5VpIHThu5FpIGPDsyB4w6FjIHN14bqldCBi4buLIOG6o25oIGjGsOG7n25nIGdp4bqlYyBuZ+G7pyBsw6puIHThu5tpIDk4JS4gS+G6v3QgcXXhuqMgbsOgeSBuaOG6pW4gbeG6oW5oIG3hu5FpIGxpw6puIGjhu4cgY2jhurd0IGNo4bq9IGdp4buvYSBow6BuaCB2aSB0acOqdSBkw7luZyBjYWZmZWluZSB2w6AgY2jhuqV0IGzGsOG7o25nIGdp4bqlYyBuZ+G7pywgcXVhIMSRw7MgY3VuZyBj4bqlcCBuaOG7r25nIGfhu6NpIMO9IHRoaeG6v3QgdGjhu7FjIHRyb25nIGdpw6FvIGThu6VjIHPhu6ljIGto4buPZSB2w6AgxJFp4buBdSBjaOG7iW5oIHRow7NpIHF1ZW4gdGnDqnUgZMO5bmcsIMSR4bq3YyBiaeG7h3QgxJHhu5FpIHbhu5tpIGdp4bubaSB0cuG6uy4NCg0KIyMgKio1LjIuIEjhuqFuIGNo4bq/IGPhu6dhIMSR4buBIHTDoGkqKg0KDQpN4bq3YyBkw7kgbmdoacOqbiBj4bupdSDEkcOjIGN1bmcgY+G6pXAgbeG7mXQgY8OhaSBuaMOsbiBjw7MgZ2nDoSB0cuG7iyB24buBIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgaMOgbmggdmkgdGnDqnUgZMO5bmcgxJHhu5MgdeG7kW5nIHbDoCBraOG6oyBuxINuZyBjw7MgZ2nhuqVjIG5n4bunLCDEkeG7gSB0w6BpIHbhuqtuIHThu5NuIHThuqFpIG3hu5l0IHPhu5EgaOG6oW4gY2jhur8gbmjhuqV0IMSR4buLbmguIA0KDQpUaOG7qSBuaOG6pXQsIGLhu5kgZOG7ryBsaeG7h3Ugc+G7rSBk4bulbmcgdHJvbmcgbmdoacOqbiBj4bupdSBjw7MgcXV5IG3DtCBnaeG7m2kgaOG6oW4gduG7m2kgNTAwIHF1YW4gc8OhdCwgdsOgIGtow7RuZyBwaOG6o24gw6FuaCDEkeG6p3kgxJHhu6cgY8OhYyDEkeG6t2MgxJFp4buDbSBuaMOibiBraOG6qXUgaOG7jWMgaGF5IHnhur91IHThu5Egc2luaCBsw70gY+G7p2EgbmfGsOG7nWkgdGhhbSBnaWEsIGRvIMSRw7Mga2jhuqMgbsSDbmcga2jDoWkgcXXDoXQgaMOzYSBr4bq/dCBxdeG6oyBjw7JuIGjhuqFuIGNo4bq/LiANCg0KVGjhu6kgaGFpLCBjw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAgY2jhu6cgeeG6v3UgbMOgIMSR4buLbmggdMOtbmggdsOgIMSRxrDhu6NjIG3DoyBow7NhIGThuqFuZyBuaOG7iyBwaMOibiwgxJFp4buBdSBuw6B5IGPDsyB0aOG7gyBsw6BtIG3huqV0IMSRaSBt4buZdCBwaOG6p24gdMOtbmggxJFhIGThuqFuZyB2w6AgY2hpIHRp4bq/dCBj4bunYSBk4buvIGxp4buHdSB0aOG7sWMgdOG6vy4gVGjhu6kgYmEsIG5naGnDqm4gY+G7qXUgY2jhu4kgc+G7rSBk4bulbmcgY8OhYyBtw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuIGPhu5UgxJFp4buDbiAoTG9naXQsIFByb2JpdCwgQ2xvZ2xvZyksIGNoxrBhIHjDqXQgxJHhur9uIGPDoWMgcGjGsMahbmcgcGjDoXAgaGnhu4duIMSR4bqhaSBuaMawIGjhu5NpIHF1eSBwaGkgdHV54bq/biwga+G7uSB0aHXhuq10IGjhu41jIG3DoXksIGhv4bq3YyB44butIGzDvSBk4buvIGxp4buHdSBt4bqldCBjw6JuIGLhurFuZyDigJMgbmjhu69uZyB54bq/dSB04buRIGPDsyB0aOG7gyBj4bqjaSB0aGnhu4duIMSR4buZIGNow61uaCB4w6FjIHbDoCB0w61uaCDhu6luZyBk4bulbmcgY+G7p2EgbcO0IGjDrG5oLiANCg0KQ3Xhu5FpIGPDuW5nLCBkbyBz4butIGThu6VuZyBk4buvIGxp4buHdSBxdWFuIHPDoXQsIG5naGnDqm4gY+G7qXUgY2jGsGEgdGjhu4MgeMOhYyDEkeG7i25oIHF1YW4gaOG7hyBuaMOibiBxdeG6oyBnaeG7r2EgY8OhYyBiaeG6v24sIG3DoCBjaOG7iSBk4burbmcgbOG6oWkg4bufIG3hu6ljIMSR4buZIHTGsMahbmcgcXVhbiwgZG8gxJHDsyBj4bqnbiBj4bqpbiB0cuG7jW5nIHRyb25nIHZp4buHYyBkaeG7hW4gZ2nhuqNpIHbDoCDhu6luZyBk4bulbmcga+G6v3QgcXXhuqMuDQoNCiMjICoqNS4zLiBLaeG6v24gbmdo4buLKioNCg0KxJDhu5FpIHbhu5tpIGPDoSBuaMOibiBuZ8aw4budaSB0acOqdSBkw7luZzogQ+G6p24gY8OzIHPhu7EgxJFp4buBdSBjaOG7iW5oIGjDoG5oIHZpIHRpw6p1IGTDuW5nIMSR4buTIHXhu5FuZyBjaOG7qWEgY2FmZmVpbiwgxJHhurdjIGJp4buHdCBsw6Aga2jDtG5nIG7Dqm4gc+G7rSBk4bulbmcgdsOgbyBideG7lWkgdOG7kWkgxJHhu4MgdHLDoW5oIHTDoWMgxJHhu5luZyB0acOqdSBj4buxYyDEkeG6v24gY2jhuqV0IGzGsOG7o25nIGdp4bqlYyBuZ+G7py4NCg0KxJDhu5FpIHbhu5tpIHRydXnhu4FuIHRow7RuZyB2w6AgeSB04bq/IGPhu5luZyDEkeG7k25nOiBOw6puIHRyaeG7g24ga2hhaSBjw6FjIGNoaeG6v24gZOG7i2NoIG7Dom5nIGNhbyBuaOG6rW4gdGjhu6ljIHbhu4Eg4bqjbmggaMaw4bufbmcgY+G7p2EgxJHhu5MgdeG7kW5nIGNhZmZlaW4gxJHhu5FpIHbhu5tpIGdp4bqlYyBuZ+G7pywgbmjhuqVuIG3huqFuaCDEkeG6v24geeG6v3UgdOG7kSB0aOG7nWkgxJFp4buDbSB2w6AgbGnhu4F1IGzGsOG7o25nIHRpw6p1IHRo4bulLg0KDQrEkOG7kWkgduG7m2kgbmdoacOqbiBj4bupdSB0xrDGoW5nIGxhaTogQ8OzIHRo4buDIG3hu58gcuG7mW5nIGThu68gbGnhu4d1IHbhu5tpIG5oaeG7gXUgYmnhur9uIMSR4buLbmggbMaw4bujbmcgaMahbiBuaMawIHRo4budaSBnaWFuIG5n4bunIHRo4buxYyB04bq/LCBt4bupYyDEkeG7mSBzdHJlc3MgaG/hurdjIMSR4bq3YyDEkWnhu4NtIHPhu6ljIGto4buPZSB04buVbmcgdGjhu4MgxJHhu4MgaG/DoG4gdGhp4buHbiBtw7QgaMOsbmggdsOgIGPDsyDEkcOhbmggZ2nDoSB0b8OgbiBkaeG7h24gaMahbi4NCg0KDQoNCg0KDQoNCg==