Nhiệm vụ 3.1

Nhiệm vụ 3.1 yêu cầu thực hiện các thao tác đã học trên bộ dữ liệu population-and-demography

1. Mô tả bộ dữ liệu population-and-demography

Các thông tin cơ bản về bộ dữ liệu

  • Bộ dư liệu cung cấp thông tin về Dân số và Nhân khẩu học của các quốc gia theo các năm và từng độ tuổi

Đọc bộ dữ liệu

  • population-and-demography là file csv, nên ta đọc từ file csv

  • Thao tác thực hiện : Ta gán bộ dữ liệu population-and-demography với tên là pp

pp <- read.csv(file.choose(), header = T)

Các thông tin tổng quan về bộ dữ liệu

Số quan sát và số biến

  • Bộ dữ liệu pp bao gồm 18288 obs (quan sát) và 24 variables (biến)

  • Có thể biết được số quan sát và số biến thông qua lệnh dim*, kết quả trả về gồm 2 giá trị số

    • Số 18288 đại diện cho tổng số quan sát

    • Số 24 đại diện cho tống số biến

dim(pp)
## [1] 18288    24

Độ dài

  • Độ dài của bộ dữ liệu pp24

  • Có thể biết được độ dài hay cũng có thể là số biến thông qua lệnh length, kết quả trả về giá trị số

    • Với bộ dữ liệu, kết quả là 24 - nghĩa là bộ dữ liệu có 24 biến (cột)
length(pp)
## [1] 24

Một số thông tin khác của bộ dữ liệu pp

  • skim - cho biết thêm các thông tin khác về bộ dữ liệu

Các thông tin được biết như : số lỗ hỏng/ bỏ trống (n_missing), số trung bình (mean), độ lệch chuẩn (sd) ,… Có thể xem thêm các thông tin khác bên dưới :

library(skimr)
skim(pp)
Data summary
Name pp
Number of rows 18288
Number of columns 24
_______________________
Column type frequency:
character 1
numeric 23
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
Country 0 1 4 59 0 254 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Year 0 1 1985.50 20.78 1950 1967.75 1985.5 2003.25 2021 ▇▇▇▇▇
Population 0 1 126470436.62 588851230.77 1363 291591.50 3833997.5 16785463.50 7909295000 ▇▁▁▁▁
Population.of.children.under.the.age.of.1 0 1 3133496.86 14167006.03 25 6663.75 88352.0 463000.50 139783730 ▇▁▁▁▁
Population.of.children.under.the.age.of.5 0 1 14825709.57 67384368.62 136 31995.25 423784.5 2160046.50 690360700 ▇▁▁▁▁
Population.of.children.under.the.age.of.15 0 1 41095227.11 188416973.54 416 89541.50 1186121.5 5905944.75 2015023400 ▇▁▁▁▁
Population.under.the.age.of.25 0 1 63762600.31 294251869.66 623 139541.50 1843099.5 9025129.75 3239281000 ▇▁▁▁▁
Population.aged.15.to.64.years 0 1 77429505.08 367651914.71 748 170263.50 2246772.0 9641250.00 5132999000 ▇▁▁▁▁
Population.older.than.15.years 0 1 85372101.76 404866940.61 849 186716.00 2482104.0 10354345.50 5893678600 ▇▁▁▁▁
Population.older.than.18.years 0 1 78196242.04 372017010.49 752 166417.50 2238130.5 9239904.00 5516283000 ▇▁▁▁▁
Population.at.age.1 0 1 3011212.81 13661998.41 26 6473.75 85824.0 440787.50 138478740 ▇▁▁▁▁
Population.aged.1.to.4.years 0 1 11692212.72 53238243.89 101 25269.25 334454.0 1697850.75 550970400 ▇▁▁▁▁
Population.aged.5.to.9.years 0 1 13598575.21 62534310.11 138 29406.25 392220.5 1947260.75 683611800 ▇▁▁▁▁
Population.aged.10.to.14.years 0 1 12670942.28 58775457.46 73 27879.50 363895.5 1796754.00 659934300 ▇▁▁▁▁
Population.aged.15.to.19.years 0 1 11782258.92 55126036.18 110 26296.50 336969.5 1626210.75 623576060 ▇▁▁▁▁
Population.aged.20.to.29.years 0 1 20872880.04 98860990.50 158 45050.75 609723.5 2758738.50 1210493200 ▇▁▁▁▁
Population.aged.30.to.39.years 0 1 17158704.11 82404600.95 137 36608.25 486290.5 2113149.00 1165207300 ▇▁▁▁▁
Population.aged.40.to.49.years 0 1 13622138.99 66008221.21 119 27440.25 364712.5 1556334.00 976407200 ▇▁▁▁▁
Population.aged.50.to.59.years 0 1 10177069.11 49288480.77 95 19649.75 264781.5 1203386.00 851356900 ▇▁▁▁▁
Population.aged.60.to.69.years 0 1 6801756.84 32712918.99 64 12603.00 168417.5 845242.75 598067140 ▇▁▁▁▁
Population.aged.70.to.79.years 0 1 3618710.03 17491538.61 31 6221.00 81824.0 436710.00 330491170 ▇▁▁▁▁
Population.aged.80.to.89.years 0 1 1195799.30 6238308.33 6 1818.75 20269.5 133380.50 131835590 ▇▁▁▁▁
Population.aged.90.to.99.years 0 1 142784.38 853350.39 0 154.75 1468.5 12499.00 22223974 ▇▁▁▁▁
Population.older.than.100.years 0 1 3107.72 20951.57 0 0.00 13.0 163.00 593166 ▇▁▁▁▁

Tên cụ thể của các biến

  • Bộ dữ liệu pp24 biến và tên tương ứng

  • Có thể biết được tên của từng biến cụ thể thông qua lệnh names

    • Với bộ dữ liệu, kết quả có 24 biến với các tên tương ứng, cụ thể như sau :
names(pp)
##  [1] "Country"                                   
##  [2] "Year"                                      
##  [3] "Population"                                
##  [4] "Population.of.children.under.the.age.of.1" 
##  [5] "Population.of.children.under.the.age.of.5" 
##  [6] "Population.of.children.under.the.age.of.15"
##  [7] "Population.under.the.age.of.25"            
##  [8] "Population.aged.15.to.64.years"            
##  [9] "Population.older.than.15.years"            
## [10] "Population.older.than.18.years"            
## [11] "Population.at.age.1"                       
## [12] "Population.aged.1.to.4.years"              
## [13] "Population.aged.5.to.9.years"              
## [14] "Population.aged.10.to.14.years"            
## [15] "Population.aged.15.to.19.years"            
## [16] "Population.aged.20.to.29.years"            
## [17] "Population.aged.30.to.39.years"            
## [18] "Population.aged.40.to.49.years"            
## [19] "Population.aged.50.to.59.years"            
## [20] "Population.aged.60.to.69.years"            
## [21] "Population.aged.70.to.79.years"            
## [22] "Population.aged.80.to.89.years"            
## [23] "Population.aged.90.to.99.years"            
## [24] "Population.older.than.100.years"

Đổi tên các biến

  • Với bộ dữ liệu pp, tên của các biến được đặt để người đọc của thể hiểu rõ về thông tin dân số cụ thể của từng độ tuổi, nhưng độ dài trong mỗi tên cũng gây khó khăn và mất thời gian trong việc rút trích dữ liệu

  • Thông qua lệnh names - giúp đổi tên các biến, từ đó dữ liệu trở nên ngắn gọn, dễ dàng thao tác và tiết kiệm thời gian

  • Với bộ dữ liệu pp ta tiến hành đổi :

names(pp) <- c('ten','year','popu','un1','un5','un15','un25','15to64','old15','old18','at1','a1to4','a5to9','a10to14','a15to19','a20to29','a30to39','a40to49','a50to59','a60to69','a70to79','a80to89','a90to99','old100')
names(pp)
##  [1] "ten"     "year"    "popu"    "un1"     "un5"     "un15"    "un25"   
##  [8] "15to64"  "old15"   "old18"   "at1"     "a1to4"   "a5to9"   "a10to14"
## [15] "a15to19" "a20to29" "a30to39" "a40to49" "a50to59" "a60to69" "a70to79"
## [22] "a80to89" "a90to99" "old100"

2. Phân tích các quốc gia, các độ tuổi và tổng dân số

Trong bộ dữ liệu pp, cung cấp rất nhiều thông tin của nhiều quốc gia và vùng lãnh thổ trên thế giới về dân số và nhân khẩu học của nước đó. Ta có thể tiến hành một trong số đó để tiến hành phân tích

  • Ta chọn 6 trong số các quốc gia và vùng lãnh thổ có trong bộ dữ liệu để phân tích, 6 quốc gia được chọn thuộc khu vực** East Asia - Đông Á ,trong đó gồm :

    1. China - Trung Quốc

    2. Hong Kong - Hồng Kong

    3. Taiwan - Đài Loan

    4. South Korea - Hàn Quốc

    5. North Korea - Triều Tiên

    6. Japan - Nhật Bản

Trong bộ dữ liệu pp cũng đã tổng hợp số liệu về tổng dân số cũng như số dân ở các độ tuổi khác nhau theo từng năm (bắt đầu từ năm 1950 - đến năm 2021) của các quốc gia và vùng lãnh thổ đã nêu trên

  • Ta tiến hành chọn 5 trong các mức độ tuổi đã có trong bộ dữ liệu, 5 mức độ tuổi gồm :

    1. Population of children under the age of 15 - Dân số về trẻ em dưới 15 tuổi

    2. Population aged 20 to 29 years - Dân số độ tuổi từ 20 - 29 tuổi

    3. Population aged 50 to 59 years - Dân số độ tuổi từ 50 - 59 tuổi

    4. Population aged 80 to 89 years - Dân số độ tuổi từ 80 - 89 tuổi

    5. Population older than 100 years - Dân số trên 100 tuổi

Trung Quốc

Trung Quốc - quốc hiệu là Cộng hòa Nhân dân Trung Hoa là một quốc gia nằm ở khu vực Đông Á. Là một trong hai quốc gia tỷ dân và là quốc gia có số dân đông thứ 2 thế giới, nên ta sẽ phân tích nó ở phần tổng dân số - population

Tổng dân số


  • Trước tiên trong 18,288 quan sát có trong bộ dữ liệu, sẽ có rất nhiều quốc gia và vùng lãnh thổ khác nhau, hiện tại ta đang muốn phân tích về dân số của Trung Quốc

  • Ta tiến hành kiểm tra trong 18288 quan sát, có bao nhiêu quan sát của của Trung Quốc

CN <- pp
CN$ten.Coded <- ifelse(CN$ten == 'China', 'Trung Quốc', 'Nước khác')
table(CN$ten.Coded)
## 
##  Nước khác Trung Quốc 
##      18216         72

Kết quả thu được có 72 quan sát là của Trung Quốc, 18,216 quan sát là của quốc gia khác trong bộ dữ liệu pp

Và không chỉ riêng Trung Quốc, mỗi quốc gia khác đều có số liệu tính trong 72 năm (1950-2021)


  • Thông tin cung cấp của bộ dữ liệu pp là của nhiều quốc gia, nên ta tiến hành lọc các thông tin/ quan sát của China - Trung Quốc để phân tích được thuận tiện hơn

  • Sau đó, ta tiếp tục tiến hành xem xét trong hơn 72 năm (1950-2021), với mệnh danh là đất nước tỷ dân - Trung Quốc đã có bao nhiêu năm có tổng số dân vượt quá 1 tỷ người

China <- CN[CN$ten == 'China',]
CN1 <- China

CN1$popu.Coded1 <- ifelse(CN1$popu >= 1000000000, 'More1B', 'Under1B')
table(CN1$popu.Coded1)
## 
##  More1B Under1B 
##      40      32

Với dữ liệu đã lọc/ rút tríc từ dữ liệu gốc, ta có 1 bộ dữ liệu mang tên China - bao gồm 72 obs quan sát, 26 variables biến

Và trong 72 năm (1950-2021), Trung Quốc đã có 40 năm hơn 1 tỷ dân - More1B32 năm dưới 1 tỷ dân - Under1B


Đài Loan Taiwan - Hong Kong

Đài Loan là đảo quốc và là một quốc gia có chủ quyền thuộc khu vực Đông Á

Hong Kong là một vùng đô thị đặc biệt, cũng như một trong hai đặc khu hành chính của Cộng hòa Nhân dân Trung Hoa (cùng với Ma Cao)

  • Dân số của Đài Loan - Taiwan và Hong Kong sẽ có phần khiêm tốn hơn so với đất nước tỷ dân Trung Quốc và cả trên thế giới. Mặc dù vậy, nhưng quốc gia và vùng lãnh thổ này lại có nền kinh tế không hề khiêm tốn như vậy

  • Với 2 quốc gia/vùng lãnh thổ đặc biệt này, ta sẽ tiến hành phân tích Dân số dưới 15 tuổi

Dân số dưới 15 tuổi - Population of children under the age of 15


  • Ta sẽ tiến hành phân tích dân số dưới 15 tuổi - Population of children under the age of 15 của Đài Loan và Hong Kong
TK <- pp
Taikong <- TK[TK$ten =='Taiwan' | TK$ten =='Hong Kong',]

table(cut(Taikong$un15,3))
## 
## (5.89e+05,2.48e+06] (2.48e+06,4.36e+06] (4.36e+06,6.25e+06] 
##                  72                  24                  48
Taikong$un15.c <- cut(Taikong$un15,3, labels = c('Ít','Vừa','Nhiều'))
  • Đầu tiên ta tiến hành rút dữ liệu chỉ còn có biến của Đài Loan và Hong Kong, dữ liệu đó mang tên TaiKong

  • Sau đó ta dùng lệnh cut để chia thông tin dân số dưới 15 tuổi thành 3 khoảng, bao gồm :

    • Khoảng thứ nhất được gọi là Ít với dân số khoảng 500 ngàn người - đến hơn 2 triệu người

    • Khoảng thứ hai được gọi là Vừa với dân số khoảng 2 triệu người - đến hơn 4 triệu người

    • Khoảng thứ ba được gọi là Nhiều với dân số khoảng 4 triệu người - đến hơn 6 triệu người

    • Người ở đây là tổng dân số dưới 15 tuổi ở Hong Kong và Taiwan

table(Taikong$un15.c)
## 
##    Ít   Vừa Nhiều 
##    72    24    48
table(Taikong$un15.c,Taikong$ten)
##        
##         Hong Kong Taiwan
##   Ít           72      0
##   Vừa           0     24
##   Nhiều         0     48
  • Sau đó ta tiến hành lập bảng tần số cho khoảng mà ta đã chia ở phía trên, và thu được kết quả :

    • Hong Kong có 72 năm có số dân dưới 15 tuổi rơi vào khoảng 500 ngàn người - đến hơn 2 triệu người

    • Đài Loan có 24 năm có số dân dưới 15 tuổi rơi vào khoảng 2 triệu người - đến hơn 4 triệu người48 năm có số dân dưới 15 tuổi rơi vào khoảng 4 triệu người - đến hơn 6 triệu người


Hàn Quốc và Triều Tiên

Hàn Quốc là một quốc gia ở Đông Á, cấu thành nửa phía nam của bán đảo Triều Tiên và ngăn cách với Triều Tiên qua Khu phi quân sự vĩ tuyến 38

Triều Tiên là một quốc gia cũng ở Đông Á trên nửa phía Bắc của Bán đảo Triều Tiên, tách biệt với Hàn Quốc ở miền Nam

  • Hàn Quốc và Triều Tiên luôn là 2 quốc gia làm tốn không ít giấy mực của các tờ báo quốc tế không chỉ về mặt kinh tế, quân sự, dân số,….

  • Với bài phân tích hiện tại, ta sẽ phân tích về dân số của 2 quốc gia này với 2 độ tuổi :

    • Dân số từ 20 - 29 tuổi (Population aged 20 to 29 years)

    • Dân số từ 50 - 59 tuổi (Population aged 50 to 59 years)


Dân số từ 20 - 29 tuổi - Population aged 20 to 29 years

KR <- pp
HanTrieu <- KR[KR$ten =='North Korea' | KR$ten =='South Korea',]
table(cut(HanTrieu$a20to29,3))
## 
##  (1.64e+06,4.1e+06]  (4.1e+06,6.56e+06] (6.56e+06,9.02e+06] 
##                  72                  28                  44
HanTrieu$a20to29.c <- cut(HanTrieu$a20to29,3, labels = c('Còn ít','Trung bình','Nhiều'))
  • Ta dùng lệnh cut để chia thông tin Dân số từ 20 - 29 tuổi thành 3 khoảng, bao gồm :

    • Khoảng thứ nhất được gọi là Còn ít với dân số khoảng hơn 1 triệu ngàn người - đến hơn 4 triệu người

    • Khoảng thứ hai được gọi là Trung bình với dân số khoảng hơn 4 triệu người - đến hơn 6 triệu người

    • Khoảng thứ ba được gọi là Nhiều với dân số khoảng hơn 4 triệu người - đến hơn 9 triệu người

table(HanTrieu$a20to29.c,HanTrieu$ten)
##             
##              North Korea South Korea
##   Còn ít              63           9
##   Trung bình           9          19
##   Nhiều                0          44
  • Sau đó ta tiến hành lập bảng tần số cho khoảng mà ta đã chia ở phía trên, và thu được kết quả :

  • Triều tiên - North Korea có :

    • 63 năm có số dân từ 20-29 tuổi rơi vào khoảng Còn ít

    • 9 năm có số dân từ 20-29 tuổi rơi vào khoảng Trung bình

  • Hàn Quốc - South Korea có :

    • 9 năm có số dân từ 20-29 tuổi rơi vào khoảng Còn ít

    • 19 năm có số dân từ 20-29 tuổi rơi vào khoảng Trung bình

    • 44 năm có số dân từ 20-29 tuổi rơi vào khoảng Nhiều

Từ đó, ta có thể so sánh dễ dàng, số người trẻ ở Hàn Quốc nhiều hơn hẳn so với Triều Tiên


Dân số từ 50 - 59 tuổi - Population aged 50 to 59 years

HanTrieu$a50to59.c <- cut(HanTrieu$a50to59,3)
table(cut(HanTrieu$a50to59,3))
## 
## (5.51e+05,3.24e+06] (3.24e+06,5.91e+06]  (5.91e+06,8.6e+06] 
##                 104                  27                  13
HanTrieu$a50to59.c <- cut(HanTrieu$a50to59,3, labels = c('Ít','Vừa','Đông'))

Với cách hiểu giống như độ tuổi 20-29, thì ở độ tuổi 50-59 cũng giống như vậy

Ta cũng dùng lệnh cut để chia thông tin Dân số từ 50 - 59 tuổi thành 3 khoảng Ít, Vừa, Đông

table(HanTrieu$a50to59.c,HanTrieu$ten)
##       
##        North Korea South Korea
##   Ít            66          38
##   Vừa            6          21
##   Đông           0          13

Kết Quả ta có thể thấy như phía trên - ta phân tích và đưa ra so sánh tương tự như ở độ tuổi 20-29


Nhật Bản

Nhật Bản là một quốc gia và đảo quốc có chủ quyền nằm ở khu vực Đông Á

  • Nhật Bản nổi tiếng với tuổi thọ cao nhất thế giới, vì họ có bí quyết và chế độ ăn rất lành mạnh

  • Nên ta sẽ tiến hành phân tích Dân số của Nhật Bản trên 100 tuổi - Population older than 100 years


Dân số trên 100 tuổi - Population older than 100 years

  • Ngoài ra ta cũng sẽ tiến hành so sánh Nhật Bản so với các nước trong khu vực Đông Á

  • Đấu tiên ta tiến hành rút dữ liệu của 6 quốc gia khu vực Đông Á đã nêu trên, với tên DongA gồm 432 quan sát và 24 biến

EA <- pp
DongA <- EA[EA$ten == 'China'| EA$ten == 'Hong Kong'| EA$ten == 'Taiwan'| EA$ten =='North Korea'| EA$ten =='South Korea'| EA$ten =='Japan',]
  • Sau đó ta lại tiến hành cut/chia số dân có tuổi trên 100 thành 4 khoảng

    • Khoảng thứ nhất : từ 0 - hơn 30 ngàn người

    • Khoảng thứ hai : từ 30 ngàn - hơn 60 ngàn người

    • Khoảng thứ ba : từ 60 ngàn - hơn 90 ngàn người

    • Khoảng thứ tư : từ 90 ngàn - 100 ngàn người

  • Khác với các bảng tần số phía trên, ta sẽ ghi số liệu người cụ thể thay vì là Ít Vừa Nhiều như các so sánh phía trên

DongA$old100.C <- cut(DongA$old100,4)
table(cut(DongA$old100,4))
## 
##     (-132,3.29e+04] (3.29e+04,6.59e+04] (6.59e+04,9.88e+04] (9.88e+04,1.32e+05] 
##                 411                   9                   6                   6
DongA$old100.c <- cut(DongA$old100,4, labels = c('ít hơn 30k người','Từ 30k-60k người','Từ 60k-90k người','Từ 90k-100k người'))
table(DongA$old100.c,DongA$ten)
##                    
##                     China Hong Kong Japan North Korea South Korea Taiwan
##   ít hơn 30k người     70        72    53          72          72     72
##   Từ 30k-60k người      2         0     7           0           0      0
##   Từ 60k-90k người      0         0     6           0           0      0
##   Từ 90k-100k người     0         0     6           0           0      0

Kết quả cho ta thấy được sự khác biệt rõ rệt của Nhật Bản so với các nước còn lại

  • Trong khi nhật bản có tới 12 năm có số dân trên 100 tuổi từ 60 ngàn tới 100 ngàn người, thì các nước khác lại số năm lại bằng 0

  • Các nước khác như Hàn Quốc, Triều Tiên,… thì 72 năm, số dân trên 100 tuổi chỉ ít hơn 30 ngàn người


3. Tính toán các đặc trưng đo lường theo nhóm

Tóm tắt các giá trị đo lường

1. Mean - số trung bình hay là một điểm giữa của một tập hợp/ đối tượng được yêu cầu

2. Median - sô trung vị hay là một điểm trung tâm trong một danh sách được sắp xếp tăng hoặc giảm dần (nó khác trung bình ở chỗ nó chia đối tượng ra làm đôi và chưa chắc 2 bên đó sẽ cân bằng nhau)

3. Variance - phương sai là phép đo mức chênh lệch giữa các số liệu trong một tập dữ liệu được yêu cầu so với giá trị trung bình

4. Standard deviation - Sd - độ lệch chuẩn là độ lệch so với tiêu chuẩn, dữ liệu nào cũng sẽ có sai số nhất định. Nên nếu sự chênh lệch không đáng kể thì độ lệch chuẩn cũng như tính biến động ở mức thấp và ngược lại

5. Ngoài ra còn có đặc trưng khác : Max - giá trị lớn nhất, Min - giá trị nhỏ nhất, 1st Qu.,3rd Qu. - phân vị thứ 1, thứ 3,….

Ta sẽ đa số tiến hành tính toán 2 trong số các giá trị phía trên là Mean và Med

Theo quốc gia

Ta tính các giá trị đặc trưng đo lường của tổng dân số của Trung Quốc trong 72 năm


Summary - Bản tóm tắt các đặc trưng

  • Lệnh summary() như một bản tóm tắt các giá trị đặc trưng đã nêu bên trên về một đối tượng nào đó mà ta yêu cầu, ta có thể tính từng đặc trưng riêng hoặc có thể xem chỉ trong summary

  • Với lệnh summary(China$popu) - biểu thị các đặc trưng về tổng dân số của Trung Quốc trong 72 năm, ta có thể xem :

summary(China$popu)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## 5.440e+08 7.755e+08 1.069e+09 1.036e+09 1.291e+09 1.426e+09

Kết quả có ý nghĩa như sau :

  • Min - Giá trị nhỏ nhất : Tổng dân số ít nhất của Trung Quốc từng ghi nhận trong 72 năm là khoảng 543 triệu người

  • 1st Qu. - Phân vị thứ nhất :là con số chia tách dữ liệu thành 2 phần bằng nhau, trong đó 25% dữ liệu thấp hơn và 75% dữ liệu cao hơn số phân vị

    • Cụ thể - Số phân vị thứ nhất 775 triệu chia tách tổng dân số TQ lúc này làm 2, trong đó :

    • 25% tổng dân số sẽ thấp hơn 775 triệu người

    • 75% tổng dân số sẽ cao hơn 775 triệu

  • Median - Trung vị : là khoảng 1,06 tỷ, nó giống tứ phân vị thứ nhất nhưng khác ở chỗ chia tổng dân số làm 50%-50%

    • 50% tổng dân số sẽ thấp hơn 1,06 tỷ

    • 50% tổng dân số sẽ cao hơn 1,06 tỷ

  • Mean - Gía trị trung bình : là khoảng 1,03 tỷ, con số này là giá trị trung bình mỗi năm tổng dân số Trung Quốc là khoảng 1,03 tỷ người

  • 3rd Qu. - Phân vị thứ ba : là 1.03 tỷ, nó giống tứ phân vị thứ nhất nhưng khác ở chỗ chia tổng dân số làm 75%-25%

    • 75% tổng dân số sẽ thấp hơn 1.03 tỷ người

    • 25% tổng dân số sẽ cao hơn 1,03 tỷ người

  • Max - Gía trị lớn nhất : ổng dân số đông nhất của Trung Quốc từng ghi nhận trong 72 năm là khoảng 1,4 tỷ người


Theo nhóm quốc gia

Mean - Số trung bình

Ta sẽ tiến hành tính Tổng trung bình dân số của các quốc gia tại Đông Á đã nêu trên trong 72 năm

  • Cụ thể tính trung bình tổng dân số của 6 nước Đông Á trong 72 năm bằng lệnh mean(popu)

    • ten - là tên các quốc gia cụ thể

    • n - là số năm, kết quả của mỗi nước là 72, có nghĩa là tổng trung bình được tính trong 72 năm

    • meanofAE - là tên ta đặt cho lệnh mean(popu), có nghĩa là trung bình dân số của quốc gia Đông Á #### Mean - Số trung bình

  • Ta có thể xem tóm tắt trong bảng summary hoặc tính riêng bằng lệnh mean()

  • Lệnh mean() cho biết số trung bình của đối tượng được yêu cầu

    • Cụ thể tính trung bình tổng dân số của Trung Quốc trong 72 năm bằng lệnh mean(China$popu)

    • Kết quả thu được là : 1,035,531,645 người

    • Ý nghĩa : trung bình mỗi năm tổng dân số ghi nhận được của Trung Quốc là 1,035,531,645 người

mean(China$popu,na.rm = T)
## [1] 1035531645

Med - Số trung vị

  • Ta có thể xem tóm tắt trong bảng summary hoặc tính riêng bằng lệnh median()

  • Lệnh median() cho biết số trung vị của đối tượng được yêu cầu

    • Cụ thể tính trung vị của tổng dân số của Trung Quốc trong 72 năm bằng lệnh median(China$popu)

    • Kết quả thu được là : 1,069,005,250 người

    • Ý nghĩa : con số 1,069,005,250 chia tổng dân số Trung Quốc làm 2, một nửa sẽ trên 1 tỷ người và một nửa sẽ dưới 1 tỷ người đó

median(China$popu)
## [1] 1069005250

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
trungbinhpp <- DongA %>% group_by(ten) %>% summarise(n = n(),meanofAE = mean(popu))
trungbinhpp
ten n meanofAE
China 72 1035531645
Hong Kong 72 5244305
Japan 72 114649992
North Korea 72 18871336
South Korea 72 39063442
Taiwan 72 18042708

Med - Số trung vị

Ta sẽ tiến hành tính Trung vị của các quốc gia tại Đông Á đã nêu trên trong 72 năm

  • Cụ thể tính trung vị dân số dưới 1 tuổi của 6 nước Đông Á bằng lệnh mmedian(un1)

    • ten - là tên các quốc gia cụ thể

    • trungviQG - là tên ta đặt cho lệnh med(un1)

    • Kết quả trả về có ý nghĩa : Ví dụ về Trung Quốc Trong tổng dân số dưới 1 tuổi của Trung Quốc, số trung vị là 20,224,508, chính là số chính giữa/ chia làm đôi tổng dân số 1 tuổi đó, nó không phải là trung bình mà chỉ là số ngăn giữa các giá trị (Các nước còn lại tương tự như vậy)

trungviQG <- DongA %>% group_by(ten) %>% summarise(medTQ = median(un1))
trungviQG
ten medTQ
China 20224508.0
Hong Kong 74874.0
Japan 1384374.0
North Korea 377300.5
South Korea 706925.0
Taiwan 337925.5

Theo thời gian - năm

Ta sẽ tiến hành tính trung bình tổng dân số của các quốc gia tại Đông Á - cụ thể là 6 nước đã nêu trên tại năm 2004

  • Lệnh mean() cho biết số trung bình của đối tượng được yêu cầu, ngoài ra ta có yêu cầu cụ thể về năm cho lệnh group_by(year=2004) là năm 2004

  • Kết quả thu được tổng dân số trong năm 2004 của 6 quốc gia là 205,233,905 người

trungbinhtheonam <- DongA %>% group_by(year=2004) %>% summarise(meankhoang = mean(popu))
trungbinhtheonam
year meankhoang
2004 205233905

Nhiệm vụ 3.2

1. Tóm tắt

Bộ dữ liệu phân tích dân số của hơn 100 quốc gia qua các năm từ 1950 - 2021 theo từng độ tuổi, từ đó ta sẽ thấy được tốc độ gia tăng dân số, sự già hóa dân số và các quốc gia có số dân đông nhất.

Chi tiết các biến có trong bộ dữ liệu:

Bộ dữ liệu có 18288 quan sát và 24 biến

  • Country name (Na): Tên quốc gia
  • Year (Y): năm
  • Population: dân số
  • Population of children under the age of 1 (U1): dân số trẻ em dưới 1 tuổi
  • Population of children under the age of 5 (U5): dân số trẻ em dưới 5 tuổi
  • Population of children under the age of 15 (U15): dân số trẻ em dưới 15 tuổi
  • Population under the age of 25 (U25): dân số dưới 25 tuổi
  • Population aged 15 to 64 years (15T64): số dân từ 15 đến 64 tuổi
  • Population older than 15 years (O15): dân số trên 15 tuổi
  • Population older than 18 years (O18): dân số trên 18 tuổi
  • Population at age 1 (1): dân số 1 tuổi
  • Population aged 1 to 4 years (1T): dân số 1 đến 4 tuổi
  • Population aged 5 to 9 years (5T9): dân số 5 đến 9 tuổi
  • Population aged 10 to 14 years (10T14): dân số 10 đến 14 tuổi
  • Population aged 15 to 19 years (15T19): dân số 15 đến 19 tuổi
  • Population aged 20 to 29 years (20T9): dân số 20 đến 29 tuổi
  • Population aged 30 to 39 years (30T39): dân số 30 đến 39 tuổi
  • Population aged 40 to 49 years (40T49): dân số 40 đến 49 tuổi
  • Population aged 50 to 59 years (50T59): dân số 50 đến 59 tuổi
  • Population aged 60 to 69 years (60T69): dân số 60 đến 69 tuổi
  • Population aged 70 to 79 years (70T79): dân số 70 đến 79 tuổi
  • Population aged 80 to 89 years (80T89): dân số 80 đến 89 tuổi
  • Population aged 90 to 99 years (90T99): dân số 90 đến 99 tuổi
  • Population older than 100 years (O100): dân số hơn 100 tuổi
na <- read.csv(file.choose(), header = T)

2. Phân tích dữ liệu

  • Quan sát dữ liệu 5 quốc gia có số dân đông: China, India, United States, Indonesia, Brazil từ năm 1951 - 2021 theo từng độ tuổi (dưới 15 tuổi, dưới 25 tuổi, từ 15 đến 19 tuổi, từ 20 đến 29 tuổi, từ 30 đến 39 tuổi, từ 60 đến 69 tuối,từ 15 đến 64 tuổi, hơn 100 tuổi)
names(na) <- c('Na','Y','Pop','U1','U5','U15','U25','15T64','O15','O18','1','1T4','5T9','10T14','15T19','20T29','30T39','40T49','50T59','60T69','70T79','80T89','90T99','O100')
d <- na %>% filter(Na %in% c('China','India','United States', 'Indonesia', 'Brazil'))%>%select(Na,Y,Pop,U15,U25,'15T19','20T29','30T39','60T69','15T64','O100')

3. Giải thích

  • Các số liệu này cung cấp thông tin về sự phân bố dân số theo các độ tuổi khác nhau trong mỗi quốc gia. Chúng có thể được sử dụng để so sánh mức độ tuổi trẻ, mức độ già, và sự phân bố dân số của các quốc gia khác nhau.

4. Mã hóa dữ liệu

d2 <- d
  • Thêm một cột Na.Code để chia China với 4 nước còn lại
d2$Na.Code <- ifelse(d2$Na == 'China','China','Not China')
  • Thêm một cột Na.Code1 để chia năm thành thế kỷ 20 và thế kỷ 21
d2$Y.Code1 <- ifelse(d2$Y >= 2001,'TK21', 'TK20')
  • Thêm một cột Pop.Code để chia dân số thành 3 nhóm: nhóm 1 với số dân nhỏ hơn 100000000, nhóm 2 với số dân từ 100000000 đến 999999999 , nhóm 3 với số dân lớn hơn 1000000000
d2$Pop.Code <- case_when(d2$Pop < 100000000 ~ 'Nhóm 1', d2$Pop >= 100000000 & d2$Pop < 999999999  ~ 'Nhóm 2', d2$Pop >1000000000 ~ 'Nhóm 3')
  • Thêm một cột O100.Code để phân loại người lớn tuổi trên 100 tuổi thành 4 nhóm: nhóm 1 dưới 100, nhóm 2 từ 100 đến 999, nhóm 3 từ 1000 đến 9999, nhóm 4 lớn hơn 10000
d2$O100.Code <- case_when(d2$O100 < 100 ~ 'Nhóm 1', d2$O100 >= 100 & d2$O100 < 999  ~ 'Nhóm 2', d2$O100 >= 1000 & d2$O100 <9999 ~ 'Nhóm 3',d2$O100 >= 10000 ~ 'Nhóm 4')

Bảng số liệu mới mà ta nhận được sau khi mã hóa

5. Bảng tần số

  • Với tần suất xuất hiện 72 lần thì chúng ta thấy được bộ dữ liệu đang phân tích dân số của các nước trong thời gian 72 năm
table(d$Na)
## 
##        Brazil         China         India     Indonesia United States 
##            72            72            72            72            72
  • Lập bảng tần số về số người lớn tuổi có độ tuổi hơn 100 tuổi của 5 nước

Từ bảng tần số trên ta thấy người lớn tuổi ở nhóm số 2 có tần số xuất hiện nhiều nhất. Trong đó ta thấy Indonesia có số dân thuộc nhóm 2 ở độ tuổi hơn 100 nhiều nhất, sau đó là Brazil.

6. Phân tích số liệu

Tính toán đặc trưng đo lường theo Brazil

Br <- d%>% filter(Na=='Brazil')
  • Dân số trung bình ở độ tuổi dưới 15 tuổi
mean(Br$U15,na.rm = T)
## [1] 43998992
  • Từ số liệu bên dưới ta thấy dân số thấp nhất của Brazil là 53955360, cao nhất là 21326220
  • Phân vị thứ nhất bằng 91075260
  • Trung vị bằng 138213270
  • Dân số trung bình lad 136542332
  • Phân vị thứ ba bằng 183152472
summary(Br$Pop)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
##  53955360  91075260 138213270 136542332 183152472 214326220
  • Tổng số người dân hơn 100 qua các năm
sum(Br$O100)
## [1] 38468
  • Phương sai của các giá trị trong biến từ 15 đến 19
var(Br$'15T19')
## [1] 1.73329e+13
  • Giá trị ở vị trí trung vị của các giá trị trong độ tuổi 15 đến 64
median(Br$'15T64')
## [1] 81616995

Tính toán đặc trưng đo lường theo nhóm quốc gia

  • Dân số trung bình theo nhóm quốc gia: Từ bảng số liệu ta thấy dân số trung bình của China là cao nhất
moc <-  d%>% group_by(Na) %>% summarise(n = n(),mean_of_Pop = mean(Pop))
moc
Na n mean_of_Pop
Brazil 72 136542333
China 72 1035531645
India 72 829637465
Indonesia 72 167585644
United States 72 241932229
  • Tính trung vị theo nhóm quốc gia: Từ bảng số liệu ta thấy trung vị của China là cao nhất
medoc <- d %>% group_by(Na) %>% summarise(med_of_Pop = median(Pop))
medoc
Na med_of_Pop
Brazil 138213270
China 1069005250
India 789060550
Indonesia 167463490
United States 236329480
  • Tính dân số trung bình theo năm và quốc gia
moc2 <- d2%>% group_by(Na,Y.Code1) %>% summarise(n = n(),mean_of_Pop = mean(Pop),.groups = 'drop')
moc2
Na Y.Code1 n mean_of_Pop
Brazil TK20 51 111405843
Brazil TK21 21 197588093
China TK20 51 903556212
China TK21 21 1356043410
India TK20 51 655156644
India TK21 21 1253376600
Indonesia TK20 51 135039123
Indonesia TK21 21 246627196
United States TK20 51 212599363
United States TK21 21 313169189

Từ bảng số liệu ta có một số kết luận sau:

TK 20 thì dân số trung bình của China là cao nhất TK 21 thì dân số trung bình của China là cao nhất

Vậy China là nước có số dân cao nhất trong 5 nước

So sánh dân số 5 quốc gia ở 2 mốc thời gian 2000 và 2021

d5 <- d%>% filter(Y =="2000"| Y=='2021')%>% select(Na,Y,Pop)
  • Từ bảng số liệu trên ta thấy được dân số của 5 quốc gia đều tăng mạnh, trong đó dân số của China và India có sự tăng trưởng nhanh.

  • Trong năm 2000 Brazil là quốc gia có số dân thấp nhất so với 4 nước còn lại.

  • Trong năm 2021 Brazil là quốc gia có số dân thấp nhất.

  • Vậy từ đó tà thấy được China và India có sự tăng tưởng nhanh, Brazil tăng tưởng còn chậm hơn so với 4 quốc gia còn lại.

LS0tDQp0aXRsZTogIk5oaeG7h20gVuG7pSAzIg0KYXV0aG9yOiAibmhoYW8iDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclSDolTTolUywgJWQgLSAlbSAtICVZJylgIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICB0b2M6IHRydWUNCiAgICBkZl9wcmludDoga2FibGUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmBgYA0KDQoNCiMgKipOaGnhu4dtIHbhu6UgMy4xKioNCg0KTmhp4buHbSB24bulIDMuMSB5w6p1IGPhuqd1IHRo4buxYyBoaeG7h24gY8OhYyB0aGFvIHTDoWMgxJHDoyBo4buNYyB0csOqbiBi4buZIGThu68gbGnhu4d1ICoqcG9wdWxhdGlvbi1hbmQtZGVtb2dyYXBoeSoqDQoNCiMjIDEuIE3DtCB04bqjIGLhu5kgZOG7ryBsaeG7h3UgKioqcG9wdWxhdGlvbi1hbmQtZGVtb2dyYXBoeSoqKg0KDQojIyMgQ8OhYyB0aMO0bmcgdGluIGPGoSBi4bqjbiB24buBIGLhu5kgZOG7ryBsaeG7h3UNCg0KLSBC4buZIGTGsCBsaeG7h3UgY3VuZyBj4bqlcCB0aMO0bmcgdGluIHbhu4EgKioqRMOibiBz4buRIHbDoCBOaMOibiBraOG6qXUgaOG7jWMqKiogY+G7p2EgY8OhYyBxdeG7kWMgZ2lhIHRoZW8gY8OhYyBuxINtIHbDoCB04burbmcgxJHhu5kgdHXhu5VpDQoNCi0tLQ0KDQojIyMgKirEkOG7jWMgYuG7mSBk4buvIGxp4buHdSoqIA0KDQotICoqKnBvcHVsYXRpb24tYW5kLWRlbW9ncmFwaHkqKiogbMOgIGZpbGUgKipjc3YqKiwgbsOqbiB0YSDEkeG7jWMgdOG7qyBmaWxlIGNzdg0KDQotICoqVGhhbyB0w6FjIHRo4buxYyBoaeG7h24gOioqIFRhIGfDoW4gYuG7mSBk4buvIGxp4buHdSAqKipwb3B1bGF0aW9uLWFuZC1kZW1vZ3JhcGh5KioqIHbhu5tpIHTDqm4gbMOgICoqcHAqKg0KDQoNCmBgYHtyIGVjaG89VFJVRSwgd2FybmluZz1GQUxTRX0NCnBwIDwtIHJlYWQuY3N2KGZpbGUuY2hvb3NlKCksIGhlYWRlciA9IFQpDQpgYGAgDQoNCi0tLQ0KDQojIyMgKipDw6FjIHRow7RuZyB0aW4gdOG7lW5nIHF1YW4gduG7gSBi4buZIGThu68gbGnhu4d1KioNCg0KIyMjIyAqKlPhu5EgcXVhbiBzw6F0IHbDoCBz4buRIGJp4bq/bioqDQoNCi0gQuG7mSBk4buvIGxp4buHdSAqKnBwKiogYmFvIGfhu5NtICoqMTgyODggb2JzIChxdWFuIHPDoXQpIHbDoCAyNCB2YXJpYWJsZXMgKGJp4bq/bikqKg0KDQotIEPDsyB0aOG7gyBiaeG6v3QgxJHGsOG7o2MgKipz4buRIHF1YW4gc8OhdCB2w6Agc+G7kSBiaeG6v24gdGjDtG5nIHF1YSBs4buHbmgqKiAqKmRpbSoqKiwga+G6v3QgcXXhuqMgdHLhuqMgduG7gSBn4buTbSAyIGdpw6EgdHLhu4sgc+G7kQ0KDQogICAtIFPhu5EgMTgyODggxJHhuqFpIGRp4buHbiBjaG8gdOG7lW5nIHPhu5EgcXVhbiBzw6F0DQoNCiAgIC0gU+G7kSAyNCDEkeG6oWkgZGnhu4duIGNobyB04buRbmcgc+G7kSBiaeG6v24NCg0KYGBge3J9DQpkaW0ocHApDQpgYGANCg0KLS0tDQoNCiMjIyMgKirEkOG7mSBkw6BpKioNCg0KLSAqKsSQ4buZIGTDoGkqKiBj4bunYSBi4buZIGThu68gbGnhu4d1ICoqcHAqKiBsw6AgKioyNCoqIA0KDQotIEPDsyB0aOG7gyBiaeG6v3QgxJHGsOG7o2MgKirEkeG7mSBkw6BpKiogaGF5IGPFqW5nIGPDsyB0aOG7gyBsw6AgKipz4buRICpiaeG6v24qKiB0aMO0bmcgcXVhIGzhu4duaCAqKipsZW5ndGgqKiwga+G6v3QgcXXhuqMgdHLhuqMgduG7gSBnacOhIHRy4buLIHPhu5ENCg0KICAgLSBW4bubaSBi4buZIGThu68gbGnhu4d1LCBr4bq/dCBxdeG6oyBsw6AgKioqMjQqKiogLSBuZ2jEqWEgbMOgIGLhu5kgZOG7ryBsaeG7h3UgY8OzICoqMjQgYmnhur9uIChj4buZdCkqKg0KDQpgYGB7cn0NCmxlbmd0aChwcCkNCmBgYA0KDQotLS0NCg0KIyMjIyAqKk3hu5l0IHPhu5EgdGjDtG5nIHRpbiBraMOhYyBj4bunYSBi4buZIGThu68gbGnhu4d1IHBwKioNCg0KLSAqKnNraW0qKiAtIGNobyBiaeG6v3QgdGjDqm0gY8OhYyB0aMO0bmcgdGluIGtow6FjIHbhu4EgYuG7mSBk4buvIGxp4buHdSAgDQoNCkPDoWMgdGjDtG5nIHRpbiDEkcaw4bujYyBiaeG6v3QgbmjGsCA6ICoqKnPhu5EgbOG7lyBo4buPbmcvIGLhu48gdHLhu5FuZyAobl9taXNzaW5nKSwgc+G7kSB0cnVuZyBiw6xuaCAobWVhbiksIMSR4buZIGzhu4djaCBjaHXhuqluIChzZCkgLC4uLioqKg0KQ8OzIHRo4buDIHhlbSB0aMOqbSBjw6FjIHRow7RuZyB0aW4ga2jDoWMgYsOqbiBkxrDhu5tpIDoNCg0KYGBge3J9DQpsaWJyYXJ5KHNraW1yKQ0Kc2tpbShwcCkNCmBgYA0KDQoNCi0tLQ0KDQojIyMjICoqVMOqbiBj4bulIHRo4buDIGPhu6dhIGPDoWMgYmnhur9uKioNCg0KLSBC4buZIGThu68gbGnhu4d1ICoqcHAqKiBjw7MgKioyNCBiaeG6v24gdsOgIHTDqm4gdMawxqFuZyDhu6luZyoqIA0KDQotIEPDsyB0aOG7gyBiaeG6v3QgxJHGsOG7o2MgdMOqbiBj4bunYSB04burbmcgYmnhur9uIGPhu6UgdGjhu4MgdGjDtG5nIHF1YSBs4buHbmggKipuYW1lcyoqICANCg0KICAgLSBW4bubaSBi4buZIGThu68gbGnhu4d1LCBr4bq/dCBxdeG6oyBjw7MgKioqMjQgYmnhur9uKioqIHbhu5tpIGPDoWMgdMOqbiB0xrDGoW5nIOG7qW5nLCBj4bulIHRo4buDIG5oxrAgc2F1IDoNCg0KYGBge3J9DQpuYW1lcyhwcCkNCmBgYA0KDQotLS0NCg0KIyMjIyAqKsSQ4buVaSB0w6puIGPDoWMgYmnhur9uKioNCg0KLSBW4bubaSBi4buZIGThu68gbGnhu4d1ICoqcHAqKiwgdMOqbiBj4bunYSBjw6FjIGJp4bq/biDEkcaw4bujYyDEkeG6t3QgxJHhu4MgbmfGsOG7nWkgxJHhu41jIGPhu6dhIHRo4buDIGhp4buDdSByw7UgduG7gSB0aMO0bmcgdGluIGTDom4gc+G7kSBj4bulIHRo4buDIGPhu6dhIHThu6tuZyDEkeG7mSB0deG7lWksIG5oxrBuZyDEkeG7mSBkw6BpIHRyb25nIG3hu5dpIHTDqm4gY8WpbmcgZ8OieSBraMOzIGtoxINuIHbDoCBt4bqldCB0aOG7nWkgZ2lhbiB0cm9uZyB2aeG7h2MgcsO6dCB0csOtY2ggZOG7ryBsaeG7h3UNCg0KLSBUaMO0bmcgcXVhIGzhu4duaCAqKm5hbWVzKiogLSBnacO6cCAqKsSR4buVaSB0w6puKiogY8OhYyBiaeG6v24sIHThu6sgxJHDsyBk4buvIGxp4buHdSB0cuG7nyBuw6puIG5n4bqvbiBn4buNbiwgZOG7hSBkw6BuZyB0aGFvIHTDoWMgdsOgIHRp4bq/dCBraeG7h20gdGjhu51pIGdpYW4NCg0KLSBW4bubaSBi4buZIGThu68gbGnhu4d1ICoqcHAqKiB0YSB0aeG6v24gaMOgbmggxJHhu5VpIDogIA0KDQoNCmBgYHtyfQ0KbmFtZXMocHApIDwtIGMoJ3RlbicsJ3llYXInLCdwb3B1JywndW4xJywndW41JywndW4xNScsJ3VuMjUnLCcxNXRvNjQnLCdvbGQxNScsJ29sZDE4JywnYXQxJywnYTF0bzQnLCdhNXRvOScsJ2ExMHRvMTQnLCdhMTV0bzE5JywnYTIwdG8yOScsJ2EzMHRvMzknLCdhNDB0bzQ5JywnYTUwdG81OScsJ2E2MHRvNjknLCdhNzB0bzc5JywnYTgwdG84OScsJ2E5MHRvOTknLCdvbGQxMDAnKQ0KbmFtZXMocHApDQpgYGANCg0KDQoNCiMjICoqMi4gUGjDom4gdMOtY2ggY8OhYyBxdeG7kWMgZ2lhLCBjw6FjIMSR4buZIHR14buVaSB2w6AgdOG7lW5nIGTDom4gc+G7kSoqIA0KDQpUcm9uZyBi4buZIGThu68gbGnhu4d1ICoqcHAqKiwgY3VuZyBj4bqlcCBy4bqldCBuaGnhu4F1IHRow7RuZyB0aW4gY+G7p2Egbmhp4buBdSBxdeG7kWMgZ2lhIHbDoCB2w7luZyBsw6NuaCB0aOG7lSB0csOqbiB0aOG6vyBnaeG7m2kgduG7gSBkw6JuIHPhu5EgdsOgIG5ow6JuIGto4bqpdSBo4buNYyBj4bunYSBuxrDhu5tjIMSRw7MuIFRhIGPDsyB0aOG7gyB0aeG6v24gaMOgbmggbeG7mXQgdHJvbmcgc+G7kSDEkcOzIMSR4buDIHRp4bq/biBow6BuaCBwaMOibiB0w61jaA0KDQotIFRhIGNo4buNbiA2IHRyb25nIHPhu5EgY8OhYyAqKnF14buRYyBnaWEgdsOgIHbDuW5nIGzDo25oIHRo4buVKiogY8OzIHRyb25nIGLhu5kgZOG7ryBsaeG7h3UgxJHhu4MgcGjDom4gdMOtY2gsIDYgcXXhu5FjIGdpYSDEkcaw4bujYyBjaOG7jW4gdGh14buZYyBraHUgduG7sWMqKiAqKipFYXN0IEFzaWEgLSDEkMO0bmcgw4EqKiogLHRyb25nIMSRw7MgZ+G7k20gOiANCg0KICAgKioxLiBDaGluYSoqIC0gVHJ1bmcgUXXhu5FjDQogICANCiAgICoqMi4gSG9uZyBLb25nKiogLSBI4buTbmcgS29uZw0KICAgDQogICAqKjMuIFRhaXdhbioqIC0gxJDDoGkgTG9hbg0KICAgDQogICAqKjQuIFNvdXRoIEtvcmVhKiogLSBIw6BuIFF14buRYw0KICAgDQogICAqKjUuIE5vcnRoIEtvcmVhKiogLSBUcmnhu4F1IFRpw6puDQogICANCiAgICoqNi4gSmFwYW4qKiAtIE5o4bqtdCBC4bqjbg0KDQoNClRyb25nIGLhu5kgZOG7ryBsaeG7h3UgKipwcCoqIGPFqW5nIMSRw6MgdOG7lW5nIGjhu6NwIHPhu5EgbGnhu4d1IHbhu4EgKip04buVbmcgZMOibiBz4buRIGPFqW5nIG5oxrAgc+G7kSBkw6JuIOG7nyBjw6FjIMSR4buZIHR14buVaSBraMOhYyBuaGF1IHRoZW8gdOG7q25nIG7Eg20qKiAoYuG6r3QgxJHhuqd1IHThu6sgbsSDbSAxOTUwIC0gxJHhur9uIG7Eg20gMjAyMSkgY+G7p2EgY8OhYyBxdeG7kWMgZ2lhIHbDoCB2w7luZyBsw6NuaCB0aOG7lSDEkcOjIG7DqnUgdHLDqm4NCg0KLSBUYSB0aeG6v24gaMOgbmggY2jhu41uIDUgdHJvbmcgY8OhYyBt4bupYyDEkeG7mSB0deG7lWkgxJHDoyBjw7MgdHJvbmcgYuG7mSBk4buvIGxp4buHdSwgKio1IG3hu6ljIMSR4buZIHR14buVaSoqIGfhu5NtIDogDQoNCiAgICoqMS4gUG9wdWxhdGlvbiBvZiBjaGlsZHJlbiB1bmRlciB0aGUgYWdlIG9mIDE1KiogLSBEw6JuIHPhu5EgduG7gSB0cuG6uyBlbSBkxrDhu5tpIDE1IHR14buVaQ0KICAgDQogICAqKjIuIFBvcHVsYXRpb24gYWdlZCAyMCB0byAyOSB5ZWFycyoqIC0gRMOibiBz4buRIMSR4buZIHR14buVaSB04burIDIwIC0gMjkgdHXhu5VpDQogICANCiAgICoqMy4gUG9wdWxhdGlvbiBhZ2VkIDUwIHRvIDU5IHllYXJzKiogLSBEw6JuIHPhu5EgxJHhu5kgdHXhu5VpIHThu6sgNTAgLSA1OSB0deG7lWkNCiAgIA0KICAgKio0LiBQb3B1bGF0aW9uIGFnZWQgODAgdG8gODkgeWVhcnMqKiAtIETDom4gc+G7kSDEkeG7mSB0deG7lWkgdOG7qyA4MCAtIDg5IHR14buVaQ0KICAgDQogICAqKjUuIFBvcHVsYXRpb24gb2xkZXIgdGhhbiAxMDAgeWVhcnMqKiAtIETDom4gc+G7kSB0csOqbiAxMDAgdHXhu5VpDQogICANCg0KIyMjICoqVHJ1bmcgUXXhu5FjKioNCg0KKioqVHJ1bmcgUXXhu5FjKioqIC0gcXXhu5FjIGhp4buHdSBsw6AgQ+G7mW5nIGjDsmEgTmjDom4gZMOibiBUcnVuZyBIb2EgbMOgIG3hu5l0IHF14buRYyBnaWEgbuG6sW0g4bufIGtodSB24buxYyDEkMO0bmcgw4EuIEzDoCBt4buZdCB0cm9uZyBoYWkgcXXhu5FjIGdpYSB04bu3IGTDom4gdsOgIGzDoCBxdeG7kWMgZ2lhIGPDsyBz4buRIGTDom4gxJHDtG5nIHRo4bupIDIgdGjhur8gZ2nhu5tpLCBuw6puIHRhIHPhur0gcGjDom4gdMOtY2ggbsOzIOG7nyBwaOG6p24gKip04buVbmcgZMOibiBz4buRIC0gcG9wdWxhdGlvbioqDQoNCiMjIyMgKipU4buVbmcgZMOibiBz4buRKioNCg0KLS0tDQoNCi0gVHLGsOG7m2MgdGnDqm4gdHJvbmcgMTgsMjg4IHF1YW4gc8OhdCBjw7MgdHJvbmcgYuG7mSBk4buvIGxp4buHdSwgc+G6vSBjw7MgcuG6pXQgbmhp4buBdSBxdeG7kWMgZ2lhIHbDoCB2w7luZyBsw6NuaCB0aOG7lSBraMOhYyBuaGF1LCBoaeG7h24gdOG6oWkgdGEgxJFhbmcgbXXhu5FuIHBow6JuIHTDrWNoIHbhu4EgZMOibiBz4buRIGPhu6dhIFRydW5nIFF14buRYw0KDQotIFRhIHRp4bq/biBow6BuaCBraeG7g20gdHJhIHRyb25nIDE4Mjg4IHF1YW4gc8OhdCwgKipjw7MgYmFvIG5oacOqdSBxdWFuIHPDoXQgY+G7p2EgY+G7p2EgVHJ1bmcgUXXhu5FjKiogDQoNCg0KYGBge3J9DQpDTiA8LSBwcA0KQ04kdGVuLkNvZGVkIDwtIGlmZWxzZShDTiR0ZW4gPT0gJ0NoaW5hJywgJ1RydW5nIFF14buRYycsICdOxrDhu5tjIGtow6FjJykNCnRhYmxlKENOJHRlbi5Db2RlZCkNCmBgYA0KDQpL4bq/dCBxdeG6oyB0aHUgxJHGsOG7o2MgY8OzICoqNzIgcXVhbiBzw6F0IGzDoCBj4bunYSBUcnVuZyBRdeG7kWMqKiwgKioxOCwyMTYgcXVhbiBzw6F0IGzDoCBj4bunYSBxdeG7kWMgZ2lhIGtow6FjKiogdHJvbmcgYuG7mSBk4buvIGxp4buHdSAqKnBwKioNCg0KVsOgIGtow7RuZyBjaOG7iSByacOqbmcgVHJ1bmcgUXXhu5FjLCBt4buXaSBxdeG7kWMgZ2lhIGtow6FjIMSR4buBdSBjw7Mgc+G7kSBsaeG7h3UgdMOtbmggdHJvbmcgNzIgbsSDbSAoMTk1MC0yMDIxKQ0KDQotLS0NCg0KLSBUaMO0bmcgdGluIGN1bmcgY+G6pXAgY+G7p2EgYuG7mSBk4buvIGxp4buHdSAqKnBwKiogbMOgIGPhu6dhIG5oaeG7gXUgcXXhu5FjIGdpYSwgbsOqbiB0YSB0aeG6v24gaMOgbmggbOG7jWMgY8OhYyB0aMO0bmcgdGluLyBxdWFuIHPDoXQgY+G7p2EgKipDaGluYSAtIFRydW5nIFF14buRYyoqIMSR4buDIHBow6JuIHTDrWNoIMSRxrDhu6NjIHRodeG6rW4gdGnhu4duIGjGoW4NCg0KLSBTYXUgxJHDsywgdGEgdGnhur9wIHThu6VjIHRp4bq/biBow6BuaCB4ZW0geMOpdCB0cm9uZyBoxqFuIDcyIG7Eg20gKDE5NTAtMjAyMSksIHbhu5tpIG3hu4duaCBkYW5oIGzDoCDEkeG6pXQgbsaw4bubYyB04bu3IGTDom4gLSAqKlRydW5nIFF14buRYyDEkcOjIGPDsyBiYW8gbmhpw6p1IG7Eg20gY8OzIHThu5VuZyBz4buRIGTDom4gdsaw4bujdCBxdcOhIDEgdOG7tyBuZ8aw4budaSoqDQoNCg0KYGBge3J9DQpDaGluYSA8LSBDTltDTiR0ZW4gPT0gJ0NoaW5hJyxdDQpDTjEgPC0gQ2hpbmENCg0KQ04xJHBvcHUuQ29kZWQxIDwtIGlmZWxzZShDTjEkcG9wdSA+PSAxMDAwMDAwMDAwLCAnTW9yZTFCJywgJ1VuZGVyMUInKQ0KdGFibGUoQ04xJHBvcHUuQ29kZWQxKQ0KYGBgDQoNClbhu5tpIGThu68gbGnhu4d1IMSRw6MgbOG7jWMvIHLDunQgdHLDrWMgdOG7qyBk4buvIGxp4buHdSBn4buRYywgdGEgY8OzIDEgYuG7mSBk4buvIGxp4buHdSBtYW5nIHTDqm4gKipDaGluYSoqIC0gYmFvIGfhu5NtICoqNzIgb2JzIHF1YW4gc8OhdCwgMjYgdmFyaWFibGVzIGJp4bq/bioqDQoNClbDoCB0cm9uZyA3MiBuxINtICgxOTUwLTIwMjEpLCBUcnVuZyBRdeG7kWMgxJHDoyBjw7MgKio0MCBuxINtIGjGoW4gMSB04bu3IGTDom4gLSBNb3JlMUIqKiB2w6AgKiozMiBuxINtIGTGsOG7m2kgMSB04bu3IGTDom4gLSBVbmRlcjFCKioNCg0KLS0tDQoNCiMjIyAqKsSQw6BpIExvYW4gVGFpd2FuIC0gSG9uZyBLb25nKioNCg0KKioqxJDDoGkgTG9hbioqKiBsw6AgxJHhuqNvIHF14buRYyB2w6AgbMOgIG3hu5l0IHF14buRYyBnaWEgY8OzIGNo4bunIHF1eeG7gW4gdGh14buZYyBraHUgduG7sWMgxJDDtG5nIMOBDQoNCioqKkhvbmcgS29uZyoqKiBsw6AgbeG7mXQgdsO5bmcgxJHDtCB0aOG7iyDEkeG6t2MgYmnhu4d0LCBjxaluZyBuaMawIG3hu5l0IHRyb25nIGhhaSDEkeG6t2Mga2h1IGjDoG5oIGNow61uaCBj4bunYSBD4buZbmcgaMOyYSBOaMOibiBkw6JuIFRydW5nIEhvYSAoY8O5bmcgduG7m2kgTWEgQ2FvKQ0KDQotIETDom4gc+G7kSBj4bunYSAqKsSQw6BpIExvYW4gLSBUYWl3YW4gdsOgIEhvbmcgS29uZyoqIHPhur0gY8OzIHBo4bqnbiBraGnDqm0gdOG7kW4gaMahbiBzbyB24bubaSDEkeG6pXQgbsaw4bubYyB04bu3IGTDom4gVHJ1bmcgUXXhu5FjIHbDoCBj4bqjIHRyw6puIHRo4bq/IGdp4bubaS4gTeG6t2MgZMO5IHbhuq15LCBuaMawbmcgcXXhu5FjIGdpYSB2w6AgdsO5bmcgbMOjbmggdGjhu5UgbsOgeSBs4bqhaSBjw7MgbuG7gW4ga2luaCB04bq/IGtow7RuZyBo4buBIGtoacOqbSB04buRbiBuaMawIHbhuq15DQoNCi0gVuG7m2kgMiBxdeG7kWMgZ2lhL3bDuW5nIGzDo25oIHRo4buVIMSR4bq3YyBiaeG7h3QgbsOgeSwgdGEgc+G6vSB0aeG6v24gaMOgbmggcGjDom4gdMOtY2ggKipEw6JuIHPhu5EgZMaw4bubaSAxNSB0deG7lWkqKg0KDQojIyMjICoqRMOibiBz4buRIGTGsOG7m2kgMTUgdHXhu5VpIC0gUG9wdWxhdGlvbiBvZiBjaGlsZHJlbiB1bmRlciB0aGUgYWdlIG9mIDE1KioNCg0KLS0tDQoNCi0gVGEgc+G6vSB0aeG6v24gaMOgbmggcGjDom4gdMOtY2ggKipkw6JuIHPhu5EgZMaw4bubaSAxNSB0deG7lWkgLSBQb3B1bGF0aW9uIG9mIGNoaWxkcmVuIHVuZGVyIHRoZSBhZ2Ugb2YgMTUqKiBj4bunYSDEkMOgaSBMb2FuIHbDoCBIb25nIEtvbmcgDQoNCg0KYGBge3J9DQpUSyA8LSBwcA0KVGFpa29uZyA8LSBUS1tUSyR0ZW4gPT0nVGFpd2FuJyB8IFRLJHRlbiA9PSdIb25nIEtvbmcnLF0NCg0KdGFibGUoY3V0KFRhaWtvbmckdW4xNSwzKSkNClRhaWtvbmckdW4xNS5jIDwtIGN1dChUYWlrb25nJHVuMTUsMywgbGFiZWxzID0gYygnw410JywnVuG7q2EnLCdOaGnhu4F1JykpDQoNCmBgYA0KDQoNCi0gxJDhuqd1IHRpw6puIHRhIHRp4bq/biBow6BuaCByw7p0IGThu68gbGnhu4d1IGNo4buJIGPDsm4gY8OzIGJp4bq/biBj4bunYSDEkMOgaSBMb2FuIHbDoCBIb25nIEtvbmcsIGThu68gbGnhu4d1IMSRw7MgbWFuZyB0w6puICoqVGFpS29uZyoqDQoNCi0gU2F1IMSRw7MgdGEgZMO5bmcgbOG7h25oICoqY3V0KiogxJHhu4MgY2hpYSB0aMO0bmcgdGluICoqZMOibiBz4buRIGTGsOG7m2kgMTUgdHXhu5VpKiogdGjDoG5oIDMga2hv4bqjbmcsIGJhbyBn4buTbSA6DQoNCiAgIC0gKipLaG/huqNuZyB0aOG7qSBuaOG6pXQqKiDEkcaw4bujYyBn4buNaSBsw6AgKirDjXQqKiB24bubaSBkw6JuIHPhu5Ega2hv4bqjbmcgKio1MDAgbmfDoG4gbmfGsOG7nWkgLSDEkeG6v24gaMahbiAyIHRyaeG7h3UgbmfGsOG7nWkqKg0KICAgDQogICAtICoqS2hv4bqjbmcgdGjhu6kgaGFpKiogxJHGsOG7o2MgZ+G7jWkgbMOgICoqVuG7q2EqKiB24bubaSBkw6JuIHPhu5Ega2hv4bqjbmcgKioyIHRyaeG7h3UgbmfGsOG7nWkgLSDEkeG6v24gaMahbiA0IHRyaeG7h3UgbmfGsOG7nWkqKg0KICAgDQogICAtICoqS2hv4bqjbmcgdGjhu6kgYmEqKiDEkcaw4bujYyBn4buNaSBsw6AgKipOaGnhu4F1KiogduG7m2kgZMOibiBz4buRIGtob+G6o25nICoqNCB0cmnhu4d1IG5nxrDhu51pIC0gxJHhur9uIGjGoW4gNiB0cmnhu4d1IG5nxrDhu51pKioNCiAgIA0KICAgLSBOZ8aw4budaSDhu58gxJHDonkgbMOgICoqdOG7lW5nIGTDom4gc+G7kSBkxrDhu5tpIDE1IHR14buVaSoqIOG7nyBIb25nIEtvbmcgdsOgIFRhaXdhbg0KDQoNCmBgYHtyfQ0KdGFibGUoVGFpa29uZyR1bjE1LmMpDQp0YWJsZShUYWlrb25nJHVuMTUuYyxUYWlrb25nJHRlbikNCmBgYA0KDQotIFNhdSDEkcOzIHRhIHRp4bq/biBow6BuaCAqKmzhuq1wIGLhuqNuZyB04bqnbiBz4buRKiogY2hvIGtob+G6o25nIG3DoCB0YSDEkcOjIGNoaWEg4bufIHBow61hIHRyw6puLCB2w6AgdGh1IMSRxrDhu6NjIGvhur90IHF14bqjIDoNCg0KICAgLSBIb25nIEtvbmcgY8OzICoqNzIgbsSDbSoqIGPDsyBz4buRIGTDom4gZMaw4bubaSAxNSB0deG7lWkgcsahaSB2w6BvIGtob+G6o25nICoqNTAwIG5nw6BuIG5nxrDhu51pIC0gxJHhur9uIGjGoW4gMiB0cmnhu4d1IG5nxrDhu51pKioNCiAgIA0KICAgLSDEkMOgaSBMb2FuIGPDsyAqKjI0IG7Eg20qKiBjw7Mgc+G7kSBkw6JuIGTGsOG7m2kgMTUgdHXhu5VpIHLGoWkgdsOgbyBraG/huqNuZyAqKjIgdHJp4buHdSBuZ8aw4budaSAtIMSR4bq/biBoxqFuIDQgdHJp4buHdSBuZ8aw4budaSoqIHbDoCAqKjQ4IG7Eg20qKiBjw7Mgc+G7kSBkw6JuIGTGsOG7m2kgMTUgdHXhu5VpIHLGoWkgdsOgbyBraG/huqNuZyAqKjQgdHJp4buHdSBuZ8aw4budaSAtIMSR4bq/biBoxqFuIDYgdHJp4buHdSBuZ8aw4budaSoqDQogICAgDQotLS0NCg0KIyMjICoqSMOgbiBRdeG7kWMgdsOgIFRyaeG7gXUgVGnDqm4qKg0KDQoqKipIw6BuIFF14buRYyoqKiBsw6AgbeG7mXQgcXXhu5FjIGdpYSDhu58gxJDDtG5nIMOBLCBj4bqldSB0aMOgbmggbuG7rWEgcGjDrWEgbmFtIGPhu6dhIGLDoW4gxJHhuqNvIFRyaeG7gXUgVGnDqm4gdsOgIG5nxINuIGPDoWNoIHbhu5tpIFRyaeG7gXUgVGnDqm4gcXVhIEtodSBwaGkgcXXDom4gc+G7sSB2xKkgdHV54bq/biAzOA0KDQoqKipUcmnhu4F1IFRpw6puKioqIGzDoCBt4buZdCBxdeG7kWMgZ2lhIGPFqW5nIOG7nyDEkMO0bmcgw4EgdHLDqm4gbuG7rWEgcGjDrWEgQuG6r2MgY+G7p2EgQsOhbiDEkeG6o28gVHJp4buBdSBUacOqbiwgdMOhY2ggYmnhu4d0IHbhu5tpIEjDoG4gUXXhu5FjIOG7nyBtaeG7gW4gTmFtDQoNCi0gSMOgbiBRdeG7kWMgdsOgIFRyaeG7gXUgVGnDqm4gbHXDtG4gbMOgIDIgcXXhu5FjIGdpYSBsw6BtIHThu5FuIGtow7RuZyDDrXQgZ2nhuqV5IG3hu7FjIGPhu6dhIGPDoWMgdOG7nSBiw6FvIHF14buRYyB04bq/IGtow7RuZyBjaOG7iSB24buBIG3hurd0IGtpbmggdOG6vywgcXXDom4gc+G7sSwgZMOibiBz4buRLC4uLi4gDQoNCi0gVuG7m2kgYsOgaSBwaMOibiB0w61jaCBoaeG7h24gdOG6oWksIHRhIHPhur0gcGjDom4gdMOtY2ggduG7gSBkw6JuIHPhu5EgY+G7p2EgMiBxdeG7kWMgZ2lhIG7DoHkgduG7m2kgKioyIMSR4buZIHR14buVaSoqIDogDQoNCiAgIC0gRMOibiBz4buRIHThu6sgKioyMCAtIDI5IHR14buVaSAoUG9wdWxhdGlvbiBhZ2VkIDIwIHRvIDI5IHllYXJzKSoqDQogICANCiAgIC0gRMOibiBz4buRIHThu6sgKio1MCAtIDU5IHR14buVaSAoUG9wdWxhdGlvbiBhZ2VkIDUwIHRvIDU5IHllYXJzKSoqDQogICANCi0tLQ0KDQojIyMjICoqRMOibiBz4buRIHThu6sgMjAgLSAyOSB0deG7lWkgLSBQb3B1bGF0aW9uIGFnZWQgMjAgdG8gMjkgeWVhcnMqKg0KDQpgYGB7cn0NCktSIDwtIHBwDQpIYW5UcmlldSA8LSBLUltLUiR0ZW4gPT0nTm9ydGggS29yZWEnIHwgS1IkdGVuID09J1NvdXRoIEtvcmVhJyxdDQp0YWJsZShjdXQoSGFuVHJpZXUkYTIwdG8yOSwzKSkNCkhhblRyaWV1JGEyMHRvMjkuYyA8LSBjdXQoSGFuVHJpZXUkYTIwdG8yOSwzLCBsYWJlbHMgPSBjKCdDw7JuIMOtdCcsJ1RydW5nIGLDrG5oJywnTmhp4buBdScpKQ0KDQpgYGANCg0KLSBUYSBkw7luZyBs4buHbmggKipjdXQqKiDEkeG7gyBjaGlhIHRow7RuZyB0aW4gKipEw6JuIHPhu5EgdOG7qyAyMCAtIDI5IHR14buVaSoqIHRow6BuaCAzIGtob+G6o25nLCBiYW8gZ+G7k20gOg0KDQogICAtICoqS2hv4bqjbmcgdGjhu6kgbmjhuqV0KiogxJHGsOG7o2MgZ+G7jWkgbMOgICoqQ8OybiDDrXQqKiB24bubaSBkw6JuIHPhu5Ega2hv4bqjbmcgKipoxqFuIDEgdHJp4buHdSBuZ8OgbiBuZ8aw4budaSAtIMSR4bq/biBoxqFuIDQgdHJp4buHdSBuZ8aw4budaSoqDQogICANCiAgIC0gKipLaG/huqNuZyB0aOG7qSBoYWkqKiDEkcaw4bujYyBn4buNaSBsw6AgKipUcnVuZyBiw6xuaCoqIHbhu5tpIGTDom4gc+G7kSBraG/huqNuZyAqKmjGoW4gNCB0cmnhu4d1IG5nxrDhu51pIC0gxJHhur9uIGjGoW4gNiB0cmnhu4d1IG5nxrDhu51pKioNCiAgIA0KICAgLSAqKktob+G6o25nIHRo4bupIGJhKiogxJHGsOG7o2MgZ+G7jWkgbMOgICoqTmhp4buBdSoqIHbhu5tpIGTDom4gc+G7kSBraG/huqNuZyAqKmjGoW4gNCB0cmnhu4d1IG5nxrDhu51pIC0gxJHhur9uIGjGoW4gOSB0cmnhu4d1IG5nxrDhu51pKioNCiAgIA0KDQpgYGB7cn0NCnRhYmxlKEhhblRyaWV1JGEyMHRvMjkuYyxIYW5UcmlldSR0ZW4pDQpgYGANCg0KLSBTYXUgxJHDsyB0YSB0aeG6v24gaMOgbmggKips4bqtcCBi4bqjbmcgdOG6p24gc+G7kSoqIGNobyBraG/huqNuZyBtw6AgdGEgxJHDoyBjaGlhIOG7nyBwaMOtYSB0csOqbiwgdsOgIHRodSDEkcaw4bujYyBr4bq/dCBxdeG6oyA6DQoNCi0gKipUcmnhu4F1IHRpw6puIC0gTm9ydGggS29yZWEqKiBjw7MgOiANCg0KICAgLSAqKjYzIG7Eg20qKiBjw7Mgc+G7kSBkw6JuIHThu6sgMjAtMjkgdHXhu5VpIHLGoWkgdsOgbyAqKmtob+G6o25nIEPDsm4gw610KioNCiAgIA0KICAgLSAqKjkgbsSDbSoqIGPDsyBz4buRIGTDom4gdOG7qyAyMC0yOSB0deG7lWkgcsahaSB2w6BvICoqa2hv4bqjbmcgVHJ1bmcgYsOsbmgqKg0KICAgDQotICoqSMOgbiBRdeG7kWMgLSBTb3V0aCBLb3JlYSoqIGPDsyA6IA0KDQogICAtICoqOSBuxINtKiogY8OzIHPhu5EgZMOibiB04burIDIwLTI5IHR14buVaSByxqFpIHbDoG8gKipraG/huqNuZyBDw7JuIMOtdCoqDQogICANCiAgIC0gKioxOSBuxINtKiogY8OzIHPhu5EgZMOibiB04burIDIwLTI5IHR14buVaSByxqFpIHbDoG8gKipraG/huqNuZyBUcnVuZyBiw6xuaCoqDQogICANCiAgIC0gKio0NCBuxINtKiogY8OzIHPhu5EgZMOibiB04burIDIwLTI5IHR14buVaSByxqFpIHbDoG8gKipraG/huqNuZyBOaGnhu4F1KioNCg0KVOG7qyDEkcOzLCB0YSBjw7MgdGjhu4Mgc28gc8OhbmggZOG7hSBkw6BuZywgc+G7kSBuZ8aw4budaSB0cuG6uyDhu58gSMOgbiBRdeG7kWMgbmhp4buBdSBoxqFuIGjhurNuIHNvIHbhu5tpIFRyaeG7gXUgVGnDqm4NCg0KLS0tDQoNCiMjIyMgKipEw6JuIHPhu5EgdOG7qyA1MCAtIDU5IHR14buVaSAtIFBvcHVsYXRpb24gYWdlZCA1MCB0byA1OSB5ZWFycyoqDQoNCg0KYGBge3J9DQpIYW5UcmlldSRhNTB0bzU5LmMgPC0gY3V0KEhhblRyaWV1JGE1MHRvNTksMykNCnRhYmxlKGN1dChIYW5UcmlldSRhNTB0bzU5LDMpKQ0KSGFuVHJpZXUkYTUwdG81OS5jIDwtIGN1dChIYW5UcmlldSRhNTB0bzU5LDMsIGxhYmVscyA9IGMoJ8ONdCcsJ1bhu6thJywnxJDDtG5nJykpDQoNCmBgYA0KDQpW4bubaSBjw6FjaCBoaeG7g3UgZ2nhu5FuZyBuaMawIMSR4buZIHR14buVaSAyMC0yOSwgdGjDrCDhu58gxJHhu5kgdHXhu5VpIDUwLTU5IGPFqW5nIGdp4buRbmcgbmjGsCB24bqteQ0KDQpUYSBjxaluZyBkw7luZyBs4buHbmggKipjdXQqKiDEkeG7gyBjaGlhIHRow7RuZyB0aW4gKipEw6JuIHPhu5EgdOG7qyA1MCAtIDU5IHR14buVaSoqIHRow6BuaCAzIGtob+G6o25nICoqw410LCBW4burYSwgxJDDtG5nKioNCg0KDQpgYGB7cn0NCnRhYmxlKEhhblRyaWV1JGE1MHRvNTkuYyxIYW5UcmlldSR0ZW4pDQpgYGANCg0KS+G6v3QgUXXhuqMgdGEgY8OzIHRo4buDIHRo4bqleSBuaMawIHBow61hIHRyw6puIC0gdGEgcGjDom4gdMOtY2ggdsOgIMSRxrBhIHJhIHNvIHPDoW5oIHTGsMahbmcgdOG7sSBuaMawIOG7nyDEkeG7mSB0deG7lWkgMjAtMjkNCg0KLS0tDQoNCg0KIyMjICoqTmjhuq10IELhuqNuKioNCg0KKioqTmjhuq10IELhuqNuKioqIGzDoCBt4buZdCBxdeG7kWMgZ2lhIHbDoCDEkeG6o28gcXXhu5FjIGPDsyBjaOG7pyBxdXnhu4FuIG7hurFtIOG7nyBraHUgduG7sWMgxJDDtG5nIMOBDQoNCi0gTmjhuq10IELhuqNuIG7hu5VpIHRp4bq/bmcgduG7m2kgdHXhu5VpIHRo4buNIGNhbyBuaOG6pXQgdGjhur8gZ2nhu5tpLCB2w6wgaOG7jSBjw7MgYsOtIHF1eeG6v3QgdsOgIGNo4bq/IMSR4buZIMSDbiBy4bqldCBsw6BuaCBt4bqhbmgNCg0KLSBOw6puIHRhIHPhur0gdGnhur9uIGjDoG5oIHBow6JuIHTDrWNoICoqRMOibiBz4buRIGPhu6dhIE5o4bqtdCBC4bqjbiB0csOqbiAxMDAgdHXhu5VpIC0gUG9wdWxhdGlvbiBvbGRlciB0aGFuIDEwMCB5ZWFycyoqDQoNCi0tLQ0KDQojIyMjICoqRMOibiBz4buRIHRyw6puIDEwMCB0deG7lWkgLSBQb3B1bGF0aW9uIG9sZGVyIHRoYW4gMTAwIHllYXJzKioNCg0KLSBOZ2/DoGkgcmEgdGEgY8Wpbmcgc+G6vSB0aeG6v24gaMOgbmggKipzbyBzw6FuaCBOaOG6rXQgQuG6o24gc28gduG7m2kgY8OhYyBuxrDhu5tjIHRyb25nIGtodSB24buxYyDEkMO0bmcgw4EqKg0KDQotIMSQ4bqldSB0acOqbiB0YSB0aeG6v24gaMOgbmggKipyw7p0IGThu68gbGnhu4d1IGPhu6dhIDYgcXXhu5FjIGdpYSoqIGtodSB24buxYyDEkMO0bmcgw4EgxJHDoyBuw6p1IHRyw6puLCB24bubaSB0w6puICoqRG9uZ0EqKiBn4buTbSAqKjQzMiBxdWFuIHPDoXQgdsOgIDI0IGJp4bq/bioqDQoNCmBgYHtyfQ0KRUEgPC0gcHANCkRvbmdBIDwtIEVBW0VBJHRlbiA9PSAnQ2hpbmEnfCBFQSR0ZW4gPT0gJ0hvbmcgS29uZyd8IEVBJHRlbiA9PSAnVGFpd2FuJ3wgRUEkdGVuID09J05vcnRoIEtvcmVhJ3wgRUEkdGVuID09J1NvdXRoIEtvcmVhJ3wgRUEkdGVuID09J0phcGFuJyxdDQpgYGANCg0KLSBTYXUgxJHDsyB0YSBs4bqhaSB0aeG6v24gaMOgbmggKipjdXQvY2hpYSoqIHPhu5EgZMOibiBjw7MgdHXhu5VpIHRyw6puIDEwMCB0aMOgbmggNCBraG/huqNuZw0KDQogICAtIEtob+G6o25nIHRo4bupIG5o4bqldCA6IHThu6sgKiowIC0gaMahbiAzMCBuZ8OgbiBuZ8aw4budaSoqDQogICANCiAgIC0gS2hv4bqjbmcgdGjhu6kgaGFpIDogdOG7qyAqKjMwIG5nw6BuIC0gaMahbiA2MCBuZ8OgbiBuZ8aw4budaSoqDQogICANCiAgIC0gS2hv4bqjbmcgdGjhu6kgYmEgOiB04burICoqNjAgbmfDoG4gLSBoxqFuIDkwIG5nw6BuIG5nxrDhu51pKioNCiAgIA0KICAgLSBLaG/huqNuZyB0aOG7qSB0xrAgOiB04burICoqOTAgbmfDoG4gLSAxMDAgbmfDoG4gbmfGsOG7nWkqKg0KDQotIEtow6FjIHbhu5tpIGPDoWMgYuG6o25nIHThuqduIHPhu5EgcGjDrWEgdHLDqm4sIHRhIHPhur0gZ2hpICoqc+G7kSBsaeG7h3UgbmfGsOG7nWkgY+G7pSB0aOG7gyoqIHRoYXkgdsOsIGzDoCAqKsONdCBW4burYSBOaGnhu4F1KiogbmjGsCBjw6FjIHNvIHPDoW5oIHBow61hIHRyw6puDQoNCg0KYGBge3J9DQpEb25nQSRvbGQxMDAuQyA8LSBjdXQoRG9uZ0Ekb2xkMTAwLDQpDQp0YWJsZShjdXQoRG9uZ0Ekb2xkMTAwLDQpKQ0KYGBgDQoNCmBgYHtyfQ0KRG9uZ0Ekb2xkMTAwLmMgPC0gY3V0KERvbmdBJG9sZDEwMCw0LCBsYWJlbHMgPSBjKCfDrXQgaMahbiAzMGsgbmfGsOG7nWknLCdU4burIDMway02MGsgbmfGsOG7nWknLCdU4burIDYway05MGsgbmfGsOG7nWknLCdU4burIDkway0xMDBrIG5nxrDhu51pJykpDQp0YWJsZShEb25nQSRvbGQxMDAuYyxEb25nQSR0ZW4pDQpgYGANCg0KS+G6v3QgcXXhuqMgY2hvIHRhIHRo4bqleSDEkcaw4bujYyBz4buxIGtow6FjIGJp4buHdCByw7UgcuG7h3QgY+G7p2EgTmjhuq10IELhuqNuIHNvIHbhu5tpIGPDoWMgbsaw4bubYyBjw7JuIGzhuqFpDQoNCi0gVHJvbmcga2hpIG5o4bqtdCBi4bqjbiBjw7MgdOG7m2kgKioxMiBuxINtKiogY8OzIHPhu5EgZMOibiB0csOqbiAxMDAgdHXhu5VpIHThu6sgKio2MCBuZ8OgbiB04bubaSAxMDAgbmfDoG4gbmfGsOG7nWkqKiwgdGjDrCBjw6FjIG7GsOG7m2Mga2jDoWMgbOG6oWkgc+G7kSBuxINtIGzhuqFpIGLhurFuZyAwIA0KDQotIEPDoWMgbsaw4bubYyBraMOhYyBuaMawIEjDoG4gUXXhu5FjLCBUcmnhu4F1IFRpw6puLC4uLiB0aMOsICoqNzIgbsSDbSoqLCBz4buRIGTDom4gdHLDqm4gMTAwIHR14buVaSBjaOG7iSDDrXQgaMahbiAzMCBuZ8OgbiBuZ8aw4budaQ0KDQotLS0NCg0KIyMgKiozLiBUw61uaCB0b8OhbiBjw6FjIMSR4bq3YyB0csawbmcgxJFvIGzGsOG7nW5nIHRoZW8gbmjDs20qKg0KDQojIyMgKipUw7NtIHThuq90IGPDoWMgZ2nDoSB0cuG7iyDEkW8gbMaw4budbmcqKg0KDQogICAqKjEuIE1lYW4gLSBz4buRIHRydW5nIGLDrG5oKiogaGF5IGzDoCBt4buZdCDEkWnhu4NtIGdp4buvYSBj4bunYSBt4buZdCB04bqtcCBo4bujcC8gxJHhu5FpIHTGsOG7o25nIMSRxrDhu6NjIHnDqnUgY+G6p3UNCg0KICAgKioyLiBNZWRpYW4gLSBzw7QgdHJ1bmcgduG7iyoqIGhheSBsw6AgbeG7mXQgxJFp4buDbSB0cnVuZyB0w6JtIHRyb25nIG3hu5l0IGRhbmggc8OhY2ggxJHGsOG7o2Mgc+G6r3AgeOG6v3AgdMSDbmcgaG/hurdjIGdp4bqjbSBk4bqnbiAobsOzIGtow6FjIHRydW5nIGLDrG5oIOG7nyBjaOG7lyBuw7MgY2hpYSDEkeG7kWkgdMaw4bujbmcgcmEgbMOgbSDEkcO0aSB2w6AgY2jGsGEgY2jhuq9jIDIgYsOqbiDEkcOzIHPhur0gY8OibiBi4bqxbmcgbmhhdSkNCg0KICAgKiozLiBWYXJpYW5jZSAtIHBoxrDGoW5nIHNhaSoqIGzDoCBwaMOpcCDEkW8gbeG7qWMgY2jDqm5oIGzhu4djaCBnaeG7r2EgY8OhYyBz4buRIGxp4buHdSB0cm9uZyBt4buZdCB04bqtcCBk4buvIGxp4buHdSDEkcaw4bujYyB5w6p1IGPhuqd1IHNvIHbhu5tpIGdpw6EgdHLhu4sgdHJ1bmcgYsOsbmgNCg0KICAgKio0LiBTdGFuZGFyZCBkZXZpYXRpb24gLSBTZCAtIMSR4buZIGzhu4djaCBjaHXhuqluKiogbMOgIMSR4buZIGzhu4djaCBzbyB24bubaSB0acOqdSBjaHXhuqluLCBk4buvIGxp4buHdSBuw6BvIGPFqW5nIHPhur0gY8OzIHNhaSBz4buRIG5o4bqldCDEkeG7i25oLiBOw6puIG7hur91IHPhu7EgY2jDqm5oIGzhu4djaCBraMO0bmcgxJHDoW5nIGvhu4MgdGjDrCDEkeG7mSBs4buHY2ggY2h14bqpbiBjxaluZyBuaMawIHTDrW5oIGJp4bq/biDEkeG7mW5nIOG7nyBt4bupYyB0aOG6pXAgdsOgIG5nxrDhu6NjIGzhuqFpDQogICANCiAgICoqNS4gTmdvw6BpIHJhKiogY8OybiBjw7MgxJHhurdjIHRyxrBuZyBraMOhYyA6ICoqTWF4IC0gZ2nDoSB0cuG7iyBs4bubbiBuaOG6pXQqKiwgKipNaW4gLSBnacOhIHRy4buLIG5o4buPIG5o4bqldCoqLCAqKjFzdCBRdS4sM3JkIFF1LiAtIHBow6JuIHbhu4sgdGjhu6kgMSwgdGjhu6kgMyoqLC4uLi4NCg0KVGEgc+G6vSDEkWEgc+G7kSB0aeG6v24gaMOgbmggdMOtbmggdG/DoW4gMiB0cm9uZyBz4buRIGPDoWMgZ2nDoSB0cuG7iyBwaMOtYSB0csOqbiBsw6AgKipNZWFuIHbDoCBNZWQqKg0KDQoNCiMjIyAqKlRoZW8gcXXhu5FjIGdpYSoqDQoNClRhIHTDrW5oIGPDoWMgZ2nDoSB0cuG7iyDEkeG6t2MgdHLGsG5nIMSRbyBsxrDhu51uZyBj4bunYSAqKnThu5VuZyBkw6JuIHPhu5EgY+G7p2EgVHJ1bmcgUXXhu5FjKiogdHJvbmcgNzIgbsSDbSANCg0KLS0tDQoNCiMjIyMgKipTdW1tYXJ5IC0gQuG6o24gdMOzbSB04bqvdCBjw6FjIMSR4bq3YyB0csawbmcqKg0KDQotIEzhu4duaCAqKnN1bW1hcnkoKSoqIG5oxrAgbeG7mXQgYuG6o24gdMOzbSB04bqvdCBjw6FjIGdpw6EgdHLhu4sgxJHhurdjIHRyxrBuZyDEkcOjIG7DqnUgYsOqbiB0csOqbiB24buBIG3hu5l0IMSR4buRaSB0xrDhu6NuZyBuw6BvIMSRw7MgbcOgIHRhIHnDqnUgY+G6p3UsIHRhIGPDsyB0aOG7gyB0w61uaCB04burbmcgxJHhurdjIHRyxrBuZyByacOqbmcgaG/hurdjIGPDsyB0aOG7gyB4ZW0gY2jhu4kgdHJvbmcgc3VtbWFyeQ0KDQotIFbhu5tpIGzhu4duaCAqKnN1bW1hcnkoQ2hpbmEkcG9wdSkqKiAtIGJp4buDdSB0aOG7iyBjw6FjIMSR4bq3YyB0csawbmcgduG7gSAqKnThu5VuZyBkw6JuIHPhu5EgY+G7p2EgVHJ1bmcgUXXhu5FjKiogdHJvbmcgNzIgbsSDbSwgdGEgY8OzIHRo4buDIHhlbSA6DQoNCg0KYGBge3J9DQpzdW1tYXJ5KENoaW5hJHBvcHUpDQpgYGANCg0KS+G6v3QgcXXhuqMgY8OzIMO9IG5naMSpYSBuaMawIHNhdSA6IA0KDQotICoqTWluIC0gR2nDoSB0cuG7iyBuaOG7jyBuaOG6pXQqKiA6IFThu5VuZyBkw6JuIHPhu5Egw610IG5o4bqldCBj4bunYSBUcnVuZyBRdeG7kWMgdOG7q25nIGdoaSBuaOG6rW4gdHJvbmcgNzIgbsSDbSBsw6Aga2hv4bqjbmcgKio1NDMgdHJp4buHdSBuZ8aw4budaSoqDQoNCi0gKioxc3QgUXUuIC0gUGjDom4gduG7iyB0aOG7qSBuaOG6pXQqKiA6bMOgIGNvbiBz4buRIGNoaWEgdMOhY2ggZOG7ryBsaeG7h3UgdGjDoG5oIDIgcGjhuqduIGLhurFuZyBuaGF1LCB0cm9uZyDEkcOzIDI1JSBk4buvIGxp4buHdSB0aOG6pXAgaMahbiB2w6AgNzUlIGThu68gbGnhu4d1IGNhbyBoxqFuIHPhu5EgcGjDom4gduG7iw0KICAgDQogICAtIEPhu6UgdGjhu4MgLSBT4buRIHBow6JuIHbhu4sgdGjhu6kgbmjhuqV0ICoqNzc1IHRyaeG7h3UqKiBjaGlhIHTDoWNoIHThu5VuZyBkw6JuIHPhu5EgVFEgbMO6YyBuw6B5IGzDoG0gMiwgdHJvbmcgxJHDsyA6IA0KICAgDQogICAtIDI1JSB04buVbmcgZMOibiBz4buRIHPhur0gdGjhuqVwIGjGoW4gNzc1IHRyaeG7h3UgbmfGsOG7nWkNCiAgIA0KICAgLSA3NSUgdOG7lW5nIGTDom4gc+G7kSBz4bq9IGNhbyBoxqFuIDc3NSB0cmnhu4d1DQoNCi0gKipNZWRpYW4gLSBUcnVuZyB24buLKiogOiBsw6Aga2hv4bqjbmcgKioxLDA2IHThu7cqKiwgbsOzIGdp4buRbmcgdOG7qSBwaMOibiB24buLIHRo4bupIG5o4bqldCBuaMawbmcga2jDoWMg4bufIGNo4buXICoqY2hpYSB04buVbmcgZMOibiBz4buRIGzDoG0gNTAlLTUwJSoqDQoNCiAgIC0gNTAlIHThu5VuZyBkw6JuIHPhu5Egc+G6vSB0aOG6pXAgaMahbiAxLDA2IHThu7cNCiAgIA0KICAgLSA1MCUgdOG7lW5nIGTDom4gc+G7kSBz4bq9IGNhbyBoxqFuIDEsMDYgdOG7tw0KDQotICoqTWVhbiAtIEfDrWEgdHLhu4sgdHJ1bmcgYsOsbmgqKiA6IGzDoCBraG/huqNuZyAqKjEsMDMgdOG7tyoqLCBjb24gc+G7kSBuw6B5IGzDoCBnacOhIHRy4buLIHRydW5nIGLDrG5oIG3hu5dpIG7Eg20gdOG7lW5nIGTDom4gc+G7kSBUcnVuZyBRdeG7kWMgbMOgIGtob+G6o25nIDEsMDMgdOG7tyBuZ8aw4budaQ0KDQotICoqM3JkIFF1LiAtIFBow6JuIHbhu4sgdGjhu6kgYmEqKiA6IGzDoCAqKjEuMDMgdOG7tyoqLCBuw7MgZ2nhu5FuZyB04bupIHBow6JuIHbhu4sgdGjhu6kgbmjhuqV0IG5oxrBuZyBraMOhYyDhu58gY2jhu5cgKipjaGlhIHThu5VuZyBkw6JuIHPhu5EgbMOgbSA3NSUtMjUlKioNCg0KICAgLSA3NSUgdOG7lW5nIGTDom4gc+G7kSBz4bq9IHRo4bqlcCBoxqFuIDEuMDMgdOG7tyBuZ8aw4budaQ0KICAgDQogICAtIDI1JSB04buVbmcgZMOibiBz4buRIHPhur0gY2FvIGjGoW4gMSwwMyB04bu3IG5nxrDhu51pDQoNCi0gKipNYXggLSBHw61hIHRy4buLIGzhu5tuIG5o4bqldCoqIDog4buVbmcgZMOibiBz4buRIMSRw7RuZyBuaOG6pXQgY+G7p2EgVHJ1bmcgUXXhu5FjIHThu6tuZyBnaGkgbmjhuq1uIHRyb25nIDcyIG7Eg20gbMOgIGtob+G6o25nICoqMSw0IHThu7cgbmfGsOG7nWkqKg0KDQoNCi0tLQ0KDQoNCiMjIyAqKlRoZW8gbmjDs20gcXXhu5FjIGdpYSoqDQoNCiMjIyMgKipNZWFuIC0gU+G7kSB0cnVuZyBiw6xuaCoqDQoNClRhIHPhur0gdGnhur9uIGjDoG5oIHTDrW5oICoqVOG7lW5nIHRydW5nIGLDrG5oIGTDom4gc+G7kSoqIGPhu6dhIGPDoWMgcXXhu5FjIGdpYSB04bqhaSDEkMO0bmcgw4EgxJHDoyBuw6p1IHRyw6puIHRyb25nIDcyIG7Eg20NCg0KLSBD4bulIHRo4buDIHTDrW5oIHRydW5nIGLDrG5oIHThu5VuZyBkw6JuIHPhu5EgY+G7p2EgNiBuxrDhu5tjIMSQw7RuZyDDgSB0cm9uZyA3MiBuxINtIGLhurFuZyBs4buHbmggKioqbWVhbihwb3B1KSoqKg0KDQogICAtICoqdGVuKiogLSBsw6AgdMOqbiBjw6FjIHF14buRYyBnaWEgY+G7pSB0aOG7gw0KICAgDQogICAtICoqbioqIC0gbMOgIHPhu5EgbsSDbSwga+G6v3QgcXXhuqMgY+G7p2EgbeG7l2kgbsaw4bubYyBsw6AgKio3MioqLCBjw7MgbmdoxKlhIGzDoCB04buVbmcgdHJ1bmcgYsOsbmggxJHGsOG7o2MgdMOtbmggKip0cm9uZyA3MiBuxINtKioNCg0KICAgLSAqKm1lYW5vZkFFKiogLSBsw6AgdMOqbiB0YSDEkeG6t3QgY2hvIGzhu4duaCAqKm1lYW4ocG9wdSkqKiwgY8OzIG5naMSpYSBsw6AgdHJ1bmcgYsOsbmggZMOibiBz4buRIGPhu6dhIHF14buRYyBnaWEgxJDDtG5nIMOBDQojIyMjICoqTWVhbiAtIFPhu5EgdHJ1bmcgYsOsbmgqKg0KDQotIFRhIGPDsyB0aOG7gyB4ZW0gdMOzbSB04bqvdCB0cm9uZyBi4bqjbmcgc3VtbWFyeSBob+G6t2MgdMOtbmggcmnDqm5nIGLhurFuZyBs4buHbmggKiptZWFuKCkqKg0KDQotIEzhu4duaCAqKiptZWFuKCkqKiogY2hvIGJp4bq/dCAqKnPhu5EgdHJ1bmcgYsOsbmgqKiBj4bunYSDEkeG7kWkgdMaw4bujbmcgxJHGsOG7o2MgecOqdSBj4bqndQ0KDQogICAtIEPhu6UgdGjhu4MgdMOtbmggdHJ1bmcgYsOsbmggdOG7lW5nIGTDom4gc+G7kSBj4bunYSBUcnVuZyBRdeG7kWMgdHJvbmcgNzIgbsSDbSBi4bqxbmcgbOG7h25oICoqKm1lYW4oQ2hpbmEkcG9wdSkqKioNCiAgIA0KICAgLSBL4bq/dCBxdeG6oyB0aHUgxJHGsOG7o2MgbMOgIDogKioxLDAzNSw1MzEsNjQ1IG5nxrDhu51pKioNCiAgIA0KICAgLSAqKsOdIG5naMSpYSoqIDogdHJ1bmcgYsOsbmggbeG7l2kgbsSDbSB04buVbmcgZMOibiBz4buRIGdoaSBuaOG6rW4gxJHGsOG7o2MgY+G7p2EgVHJ1bmcgUXXhu5FjIGzDoCAxLDAzNSw1MzEsNjQ1IG5nxrDhu51pDQogICANCg0KYGBge3J9DQoNCm1lYW4oQ2hpbmEkcG9wdSxuYS5ybSA9IFQpDQoNCmBgYA0KDQojIyMjICoqTWVkIC0gU+G7kSB0cnVuZyB24buLKioNCg0KLSBUYSBjw7MgdGjhu4MgeGVtIHTDs20gdOG6r3QgdHJvbmcgYuG6o25nIHN1bW1hcnkgaG/hurdjIHTDrW5oIHJpw6puZyBi4bqxbmcgbOG7h25oICoqbWVkaWFuKCkqKg0KDQotIEzhu4duaCAqKiptZWRpYW4oKSoqKiBjaG8gYmnhur90ICoqc+G7kSB0cnVuZyB24buLKiogY+G7p2EgxJHhu5FpIHTGsOG7o25nIMSRxrDhu6NjIHnDqnUgY+G6p3UNCg0KICAgLSBD4bulIHRo4buDIHTDrW5oIHRydW5nIHbhu4sgY+G7p2EgdOG7lW5nIGTDom4gc+G7kSBj4bunYSBUcnVuZyBRdeG7kWMgdHJvbmcgNzIgbsSDbSBi4bqxbmcgbOG7h25oICoqKm1lZGlhbihDaGluYSRwb3B1KSoqKg0KICAgDQogICAtIEvhur90IHF14bqjIHRodSDEkcaw4bujYyBsw6AgOiAqKjEsMDY5LDAwNSwyNTAgbmfGsOG7nWkqKg0KICAgDQogICAtICoqw50gbmdoxKlhKiogOiBjb24gc+G7kSAqKjEsMDY5LDAwNSwyNTAqKiBjaGlhIHThu5VuZyBkw6JuIHPhu5EgVHJ1bmcgUXXhu5FjIGzDoG0gMiwgbeG7mXQgbuG7rWEgc+G6vSB0csOqbiAxIHThu7cgbmfGsOG7nWkgdsOgIG3hu5l0IG7hu61hIHPhur0gZMaw4bubaSAxIHThu7cgbmfGsOG7nWkgxJHDsw0KDQoNCmBgYHtyfQ0KbWVkaWFuKENoaW5hJHBvcHUpDQpgYGANCg0KLS0tDQoNCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KDQp0cnVuZ2JpbmhwcCA8LSBEb25nQSAlPiUgZ3JvdXBfYnkodGVuKSAlPiUgc3VtbWFyaXNlKG4gPSBuKCksbWVhbm9mQUUgPSBtZWFuKHBvcHUpKQ0KdHJ1bmdiaW5ocHANCmBgYA0KDQotLS0NCg0KIyMjIyAqKk1lZCAtIFPhu5EgdHJ1bmcgduG7iyoqDQoNClRhIHPhur0gdGnhur9uIGjDoG5oIHTDrW5oICoqVHJ1bmcgduG7iyoqIGPhu6dhIGPDoWMgcXXhu5FjIGdpYSB04bqhaSDEkMO0bmcgw4EgxJHDoyBuw6p1IHRyw6puIHRyb25nIDcyIG7Eg20NCg0KLSBD4bulIHRo4buDIHTDrW5oICoqdHJ1bmcgduG7iyBkw6JuIHPhu5EgZMaw4bubaSAxIHR14buVaSBj4bunYSA2IG7GsOG7m2MgxJDDtG5nIMOBKiogYuG6sW5nIGzhu4duaCAqKiptbWVkaWFuKHVuMSkqKioNCg0KICAgLSAqKnRlbioqIC0gbMOgIHTDqm4gY8OhYyBxdeG7kWMgZ2lhIGPhu6UgdGjhu4MNCg0KICAgLSAqKnRydW5ndmlRRyoqIC0gbMOgIHTDqm4gdGEgxJHhurd0IGNobyBs4buHbmggKiptZWQodW4xKSoqDQogICANCiAgIC0gS+G6v3QgcXXhuqMgdHLhuqMgduG7gSBjw7Mgw70gbmdoxKlhIDogVsOtIGThu6UgduG7gSBUcnVuZyBRdeG7kWMgVHJvbmcgdOG7lW5nIGTDom4gc+G7kSBkxrDhu5tpIDEgdHXhu5VpIGPhu6dhIFRydW5nIFF14buRYywgc+G7kSB0cnVuZyB24buLIGzDoCAqKjIwLDIyNCw1MDgqKiwgY2jDrW5oIGzDoCBz4buRIGNow61uaCBnaeG7r2EvIGNoaWEgbMOgbSDEkcO0aSB04buVbmcgZMOibiBz4buRIDEgdHXhu5VpIMSRw7MsIG7DsyBraMO0bmcgcGjhuqNpIGzDoCB0cnVuZyBiw6xuaCBtw6AgY2jhu4kgbMOgIHPhu5EgbmfEg24gZ2nhu69hIGPDoWMgZ2nDoSB0cuG7iyAoQ8OhYyBuxrDhu5tjIGPDsm4gbOG6oWkgdMawxqFuZyB04buxIG5oxrAgduG6rXkpDQoNCg0KYGBge3J9DQp0cnVuZ3ZpUUcgPC0gRG9uZ0EgJT4lIGdyb3VwX2J5KHRlbikgJT4lIHN1bW1hcmlzZShtZWRUUSA9IG1lZGlhbih1bjEpKQ0KdHJ1bmd2aVFHDQpgYGANCg0KIyMjICoqVGhlbyB0aOG7nWkgZ2lhbiAtIG7Eg20qKg0KDQpUYSBz4bq9IHRp4bq/biBow6BuaCB0w61uaCB0cnVuZyBiw6xuaCAqKnThu5VuZyBkw6JuIHPhu5EqKiBj4bunYSBjw6FjIHF14buRYyBnaWEgdOG6oWkgxJDDtG5nIMOBIC0gY+G7pSB0aOG7gyBsw6AgNiBuxrDhu5tjIMSRw6MgbsOqdSB0csOqbiAqKnThuqFpIG7Eg20gMjAwNCoqDQoNCi0gTOG7h25oICoqKm1lYW4oKSoqKiBjaG8gYmnhur90ICoqc+G7kSB0cnVuZyBiw6xuaCoqIGPhu6dhIMSR4buRaSB0xrDhu6NuZyDEkcaw4bujYyB5w6p1IGPhuqd1LCBuZ2/DoGkgcmEgdGEgY8OzIHnDqnUgY+G6p3UgY+G7pSB0aOG7gyB24buBIG7Eg20gY2hvIGzhu4duaCAqKmdyb3VwX2J5KHllYXI9MjAwNCkqKiBsw6AgbsSDbSAyMDA0DQoNCi0gS+G6v3QgcXXhuqMgdGh1IMSRxrDhu6NjIHThu5VuZyBkw6JuIHPhu5EgdHJvbmcgbsSDbSAyMDA0IGPhu6dhIDYgcXXhu5FjIGdpYSBsw6AgKioyMDUsMjMzLDkwNSoqIG5nxrDhu51pDQoNCg0KYGBge3J9DQp0cnVuZ2Jpbmh0aGVvbmFtIDwtIERvbmdBICU+JSBncm91cF9ieSh5ZWFyPTIwMDQpICU+JSBzdW1tYXJpc2UobWVhbmtob2FuZyA9IG1lYW4ocG9wdSkpDQp0cnVuZ2Jpbmh0aGVvbmFtDQpgYGANCg0KIyAqKk5oaeG7h20gduG7pSAzLjIqKg0KDQojIyAqKjEuIFTDs20gdOG6r3QqKg0KDQpC4buZIGThu68gbGnhu4d1IHBow6JuIHTDrWNoIGTDom4gc+G7kSBj4bunYSBoxqFuIDEwMCBxdeG7kWMgZ2lhIHF1YSBjw6FjIG7Eg20gdOG7qyAxOTUwIC0gMjAyMSB0aGVvIHThu6tuZyDEkeG7mSB0deG7lWksIHThu6sgxJHDsyB0YSBz4bq9IHRo4bqleSDEkcaw4bujYyB04buRYyDEkeG7mSBnaWEgdMSDbmcgZMOibiBz4buRLCBz4buxIGdpw6AgaMOzYSBkw6JuIHPhu5EgdsOgIGPDoWMgcXXhu5FjIGdpYSBjw7Mgc+G7kSBkw6JuIMSRw7RuZyBuaOG6pXQuDQogDQoqKipDaGkgdGnhur90IGPDoWMgYmnhur9uIGPDsyB0cm9uZyBi4buZIGThu68gbGnhu4d1OioqKg0KDQoqQuG7mSBk4buvIGxp4buHdSBjw7MgMTgyODggcXVhbiBzw6F0IHbDoCAyNCBiaeG6v24qDQoNCi0gQ291bnRyeSBuYW1lICoqKE5hKSoqOiBUw6puIHF14buRYyBnaWENCi0gWWVhciAqKihZKSoqOiBuxINtDQotIFBvcHVsYXRpb246IGTDom4gc+G7kQ0KLSBQb3B1bGF0aW9uIG9mIGNoaWxkcmVuIHVuZGVyIHRoZSBhZ2Ugb2YgMSAqKihVMSkqKjogZMOibiBz4buRIHRy4bq7IGVtIGTGsOG7m2kgMSB0deG7lWkNCi0gUG9wdWxhdGlvbiBvZiBjaGlsZHJlbiB1bmRlciB0aGUgYWdlIG9mIDUgKiooVTUpKio6IGTDom4gc+G7kSB0cuG6uyBlbSBkxrDhu5tpIDUgdHXhu5VpDQotIFBvcHVsYXRpb24gb2YgY2hpbGRyZW4gdW5kZXIgdGhlIGFnZSBvZiAxNSAqKihVMTUpKio6IGTDom4gc+G7kSB0cuG6uyBlbSBkxrDhu5tpIDE1IHR14buVaQ0KLSBQb3B1bGF0aW9uIHVuZGVyIHRoZSBhZ2Ugb2YgMjUgKiooVTI1KSoqOiBkw6JuIHPhu5EgZMaw4bubaSAyNSB0deG7lWkNCi0gUG9wdWxhdGlvbiBhZ2VkIDE1IHRvIDY0IHllYXJzICoqKDE1VDY0KSoqOiBz4buRIGTDom4gdOG7qyAxNSDEkeG6v24gNjQgdHXhu5VpDQotIFBvcHVsYXRpb24gb2xkZXIgdGhhbiAxNSB5ZWFycyAqKihPMTUpKio6IGTDom4gc+G7kSB0csOqbiAxNSB0deG7lWkNCi0gUG9wdWxhdGlvbiBvbGRlciB0aGFuIDE4IHllYXJzICoqKE8xOCkqKjogZMOibiBz4buRIHRyw6puIDE4IHR14buVaQ0KLSBQb3B1bGF0aW9uIGF0IGFnZSAxICoqKDEpKio6IGTDom4gc+G7kSAxIHR14buVaQ0KLSBQb3B1bGF0aW9uIGFnZWQgMSB0byA0IHllYXJzICoqKDFUKSoqOiBkw6JuIHPhu5EgMSDEkeG6v24gNCB0deG7lWkNCi0gUG9wdWxhdGlvbiBhZ2VkIDUgdG8gOSB5ZWFycyAqKig1VDkpKio6IGTDom4gc+G7kSA1IMSR4bq/biA5IHR14buVaQ0KLSBQb3B1bGF0aW9uIGFnZWQgMTAgdG8gMTQgeWVhcnMgKiooMTBUMTQpKio6IGTDom4gc+G7kSAxMCDEkeG6v24gMTQgdHXhu5VpDQotIFBvcHVsYXRpb24gYWdlZCAxNSB0byAxOSB5ZWFycyAqKigxNVQxOSkqKjogZMOibiBz4buRIDE1IMSR4bq/biAxOSB0deG7lWkNCi0gUG9wdWxhdGlvbiBhZ2VkIDIwIHRvIDI5IHllYXJzICoqKDIwVDkpKio6IGTDom4gc+G7kSAyMCDEkeG6v24gMjkgdHXhu5VpDQotIFBvcHVsYXRpb24gYWdlZCAzMCB0byAzOSB5ZWFycyAqKigzMFQzOSkqKjogZMOibiBz4buRIDMwIMSR4bq/biAzOSB0deG7lWkNCi0gUG9wdWxhdGlvbiBhZ2VkIDQwIHRvIDQ5IHllYXJzICoqKDQwVDQ5KSoqOiBkw6JuIHPhu5EgNDAgxJHhur9uIDQ5IHR14buVaQ0KLSBQb3B1bGF0aW9uIGFnZWQgNTAgdG8gNTkgeWVhcnMgKiooNTBUNTkpKio6IGTDom4gc+G7kSA1MCDEkeG6v24gNTkgdHXhu5VpDQotIFBvcHVsYXRpb24gYWdlZCA2MCB0byA2OSB5ZWFycyAqKig2MFQ2OSkqKjogZMOibiBz4buRIDYwIMSR4bq/biA2OSB0deG7lWkNCi0gUG9wdWxhdGlvbiBhZ2VkIDcwIHRvIDc5IHllYXJzICoqKDcwVDc5KSoqOiBkw6JuIHPhu5EgNzAgxJHhur9uIDc5IHR14buVaQ0KLSBQb3B1bGF0aW9uIGFnZWQgODAgdG8gODkgeWVhcnMgKiooODBUODkpKio6IGTDom4gc+G7kSA4MCDEkeG6v24gODkgdHXhu5VpDQotIFBvcHVsYXRpb24gYWdlZCA5MCB0byA5OSB5ZWFycyAqKig5MFQ5OSkqKjogZMOibiBz4buRIDkwIMSR4bq/biA5OSB0deG7lWkNCi0gUG9wdWxhdGlvbiBvbGRlciB0aGFuIDEwMCB5ZWFycyAqKihPMTAwKSoqOiBkw6JuIHPhu5EgaMahbiAxMDAgdHXhu5VpDQoNCmBgYHtyIGVjaG89VFJVRSwgd2FybmluZz1GQUxTRX0NCm5hIDwtIHJlYWQuY3N2KGZpbGUuY2hvb3NlKCksIGhlYWRlciA9IFQpDQpgYGANCiMjICoqMi4gUGjDom4gdMOtY2ggZOG7ryBsaeG7h3UqKg0KLSBRdWFuIHPDoXQgZOG7ryBsaeG7h3UgNSBxdeG7kWMgZ2lhIGPDsyBz4buRIGTDom4gxJHDtG5nOiAqQ2hpbmEsIEluZGlhLCBVbml0ZWQgU3RhdGVzLCBJbmRvbmVzaWEsIEJyYXppbCogdOG7qyBuxINtIDE5NTEgLSAyMDIxIHRoZW8gdOG7q25nIMSR4buZIHR14buVaSAoZMaw4bubaSAxNSB0deG7lWksIGTGsOG7m2kgMjUgdHXhu5VpLCB04burIDE1IMSR4bq/biAxOSB0deG7lWksIHThu6sgMjAgxJHhur9uIDI5IHR14buVaSwgdOG7qyAzMCDEkeG6v24gMzkgdHXhu5VpLCB04burIDYwIMSR4bq/biA2OSB0deG7kWksdOG7qyAxNSDEkeG6v24gNjQgdHXhu5VpLCBoxqFuIDEwMCB0deG7lWkpDQoNCmBgYHtyfQ0KbmFtZXMobmEpIDwtIGMoJ05hJywnWScsJ1BvcCcsJ1UxJywnVTUnLCdVMTUnLCdVMjUnLCcxNVQ2NCcsJ08xNScsJ08xOCcsJzEnLCcxVDQnLCc1VDknLCcxMFQxNCcsJzE1VDE5JywnMjBUMjknLCczMFQzOScsJzQwVDQ5JywnNTBUNTknLCc2MFQ2OScsJzcwVDc5JywnODBUODknLCc5MFQ5OScsJ08xMDAnKQ0KDQpgYGANCmBgYHtyfQ0KZCA8LSBuYSAlPiUgZmlsdGVyKE5hICVpbiUgYygnQ2hpbmEnLCdJbmRpYScsJ1VuaXRlZCBTdGF0ZXMnLCAnSW5kb25lc2lhJywgJ0JyYXppbCcpKSU+JXNlbGVjdChOYSxZLFBvcCxVMTUsVTI1LCcxNVQxOScsJzIwVDI5JywnMzBUMzknLCc2MFQ2OScsJzE1VDY0JywnTzEwMCcpDQpgYGANCg0KIyMgKiozLiBHaeG6o2kgdGjDrWNoKioNCg0KLSBDw6FjIHPhu5EgbGnhu4d1IG7DoHkgY3VuZyBj4bqlcCB0aMO0bmcgdGluIHbhu4Egc+G7sSBwaMOibiBi4buRIGTDom4gc+G7kSB0aGVvIGPDoWMgxJHhu5kgdHXhu5VpIGtow6FjIG5oYXUgdHJvbmcgbeG7l2kgcXXhu5FjIGdpYS4gQ2jDum5nIGPDsyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyBzbyBzw6FuaCBt4bupYyDEkeG7mSB0deG7lWkgdHLhurssIG3hu6ljIMSR4buZIGdpw6AsIHbDoCBz4buxIHBow6JuIGLhu5EgZMOibiBz4buRIGPhu6dhIGPDoWMgcXXhu5FjIGdpYSBraMOhYyBuaGF1Lg0KDQojIyAqKjQuIE3DoyBow7NhIGThu68gbGnhu4d1KioNCmBgYHtyfQ0KZDIgPC0gZA0KYGBgDQotIFRow6ptIG3hu5l0IGPhu5l0IE5hLkNvZGUgxJHhu4MgY2hpYSBDaGluYSB24bubaSA0IG7GsOG7m2MgY8OybiBs4bqhaQ0KYGBge3J9DQpkMiROYS5Db2RlIDwtIGlmZWxzZShkMiROYSA9PSAnQ2hpbmEnLCdDaGluYScsJ05vdCBDaGluYScpDQpgYGANCi0gVGjDqm0gbeG7mXQgY+G7mXQgTmEuQ29kZTEgxJHhu4MgY2hpYSBuxINtIHRow6BuaCB0aOG6vyBr4bu3IDIwIHbDoCB0aOG6vyBr4bu3IDIxDQpgYGB7cn0NCmQyJFkuQ29kZTEgPC0gaWZlbHNlKGQyJFkgPj0gMjAwMSwnVEsyMScsICdUSzIwJykNCmBgYA0KLSBUaMOqbSBt4buZdCBj4buZdCBQb3AuQ29kZSDEkeG7gyBjaGlhIGTDom4gc+G7kSB0aMOgbmggMyBuaMOzbTogbmjDs20gMSB24bubaSBz4buRIGTDom4gbmjhu48gaMahbiAxMDAwMDAwMDAsIG5ow7NtIDIgduG7m2kgc+G7kSBkw6JuIHThu6sgMTAwMDAwMDAwIMSR4bq/biA5OTk5OTk5OTkgLCBuaMOzbSAzIHbhu5tpIHPhu5EgZMOibiBs4bubbiBoxqFuIDEwMDAwMDAwMDANCmBgYHtyfQ0KZDIkUG9wLkNvZGUgPC0gY2FzZV93aGVuKGQyJFBvcCA8IDEwMDAwMDAwMCB+ICdOaMOzbSAxJywgZDIkUG9wID49IDEwMDAwMDAwMCAmIGQyJFBvcCA8IDk5OTk5OTk5OSAgfiAnTmjDs20gMicsIGQyJFBvcCA+MTAwMDAwMDAwMCB+ICdOaMOzbSAzJykNCmBgYA0KLSBUaMOqbSBt4buZdCBj4buZdCBPMTAwLkNvZGUgxJHhu4MgcGjDom4gbG/huqFpIG5nxrDhu51pIGzhu5tuIHR14buVaSB0csOqbiAxMDAgdHXhu5VpIHRow6BuaCA0IG5ow7NtOiBuaMOzbSAxIGTGsOG7m2kgMTAwLCBuaMOzbSAyIHThu6sgMTAwIMSR4bq/biA5OTksIG5ow7NtIDMgdOG7qyAxMDAwIMSR4bq/biA5OTk5LCBuaMOzbSA0IGzhu5tuIGjGoW4gMTAwMDAgDQpgYGB7cn0NCmQyJE8xMDAuQ29kZSA8LSBjYXNlX3doZW4oZDIkTzEwMCA8IDEwMCB+ICdOaMOzbSAxJywgZDIkTzEwMCA+PSAxMDAgJiBkMiRPMTAwIDwgOTk5ICB+ICdOaMOzbSAyJywgZDIkTzEwMCA+PSAxMDAwICYgZDIkTzEwMCA8OTk5OSB+ICdOaMOzbSAzJyxkMiRPMTAwID49IDEwMDAwIH4gJ05ow7NtIDQnKQ0KYGBgDQoNCioqKkLhuqNuZyBz4buRIGxp4buHdSBt4bubaSBtw6AgdGEgbmjhuq1uIMSRxrDhu6NjIHNhdSBraGkgbcOjIGjDs2EqKioNCg0KIyMgKio1LiBC4bqjbmcgdOG6p24gc+G7kSoqDQoNCi0gVuG7m2kgdOG6p24gc3XhuqV0IHh14bqldCBoaeG7h24gNzIgbOG6p24gdGjDrCBjaMO6bmcgdGEgdGjhuqV5IMSRxrDhu6NjIGLhu5kgZOG7ryBsaeG7h3UgxJFhbmcgcGjDom4gdMOtY2ggZMOibiBz4buRIGPhu6dhIGPDoWMgbsaw4bubYyB0cm9uZyB0aOG7nWkgZ2lhbiA3MiBuxINtIA0KYGBge3J9DQp0YWJsZShkJE5hKQ0KDQpgYGANCg0KLSBM4bqtcCBi4bqjbmcgdOG6p24gc+G7kSB24buBIHPhu5EgbmfGsOG7nWkgbOG7m24gdHXhu5VpIGPDsyDEkeG7mSB0deG7lWkgaMahbiAxMDAgdHXhu5VpIGPhu6dhIDUgbsaw4bubYw0KDQoqKlThu6sgYuG6o25nIHThuqduIHPhu5EgdHLDqm4gdGEgdGjhuqV5IG5nxrDhu51pIGzhu5tuIHR14buVaSDhu58gbmjDs20gc+G7kSAyIGPDsyB04bqnbiBz4buRIHh14bqldCBoaeG7h24gbmhp4buBdSBuaOG6pXQuIFRyb25nIMSRw7MgdGEgdGjhuqV5IEluZG9uZXNpYSBjw7Mgc+G7kSBkw6JuIHRodeG7mWMgbmjDs20gMiDhu58gxJHhu5kgdHXhu5VpIGjGoW4gMTAwIG5oaeG7gXUgbmjhuqV0LCBzYXUgxJHDsyBsw6AgQnJhemlsLioqDQoNCg0KIyMgKio2LiBQaMOibiB0w61jaCBz4buRIGxp4buHdSoqDQoNCiMjIyAqKlTDrW5oIHRvw6FuIMSR4bq3YyB0csawbmcgxJFvIGzGsOG7nW5nIHRoZW8gQnJhemlsKioNCmBgYHtyfQ0KQnIgPC0gZCU+JSBmaWx0ZXIoTmE9PSdCcmF6aWwnKQ0KYGBgDQotIETDom4gc+G7kSB0cnVuZyBiw6xuaCDhu58gxJHhu5kgdHXhu5VpIGTGsOG7m2kgMTUgdHXhu5VpDQpgYGB7cn0NCm1lYW4oQnIkVTE1LG5hLnJtID0gVCkNCmBgYA0KLSBU4burIHPhu5EgbGnhu4d1IGLDqm4gZMaw4bubaSB0YSB0aOG6pXkgZMOibiBz4buRIHRo4bqlcCBuaOG6pXQgY+G7p2EgQnJhemlsIGzDoCA1Mzk1NTM2MCwgY2FvIG5o4bqldCBsw6AgMjEzMjYyMjANCi0gUGjDom4gduG7iyB0aOG7qSBuaOG6pXQgYuG6sW5nIDkxMDc1MjYwDQotIFRydW5nIHbhu4sgYuG6sW5nIDEzODIxMzI3MA0KLSBEw6JuIHPhu5EgdHJ1bmcgYsOsbmggbGFkIDEzNjU0MjMzMg0KLSBQaMOibiB24buLIHRo4bupIGJhIGLhurFuZyAxODMxNTI0NzINCmBgYHtyfQ0Kc3VtbWFyeShCciRQb3ApDQpgYGANCi0gVOG7lW5nIHPhu5EgbmfGsOG7nWkgZMOibiBoxqFuIDEwMCBxdWEgY8OhYyBuxINtDQpgYGB7cn0NCnN1bShCciRPMTAwKQ0KYGBgDQotIFBoxrDGoW5nIHNhaSBj4bunYSBjw6FjIGdpw6EgdHLhu4sgdHJvbmcgYmnhur9uIHThu6sgMTUgxJHhur9uIDE5DQoNCmBgYHtyfQ0KdmFyKEJyJCcxNVQxOScpDQpgYGANCi0gR2nDoSB0cuG7iyDhu58gduG7iyB0csOtIHRydW5nIHbhu4sgY+G7p2EgY8OhYyBnacOhIHRy4buLIHRyb25nIMSR4buZIHR14buVaSAxNSDEkeG6v24gNjQNCmBgYHtyfQ0KbWVkaWFuKEJyJCcxNVQ2NCcpDQpgYGANCiMjIyAqKlTDrW5oIHRvw6FuIMSR4bq3YyB0csawbmcgxJFvIGzGsOG7nW5nIHRoZW8gbmjDs20gcXXhu5FjIGdpYSoqIyMjDQoNCi0gRMOibiBz4buRIHRydW5nIGLDrG5oIHRoZW8gbmjDs20gcXXhu5FjIGdpYTogVOG7qyBi4bqjbmcgc+G7kSBsaeG7h3UgdGEgdGjhuqV5IGTDom4gc+G7kSB0cnVuZyBiw6xuaCBj4bunYSBDaGluYSBsw6AgY2FvIG5o4bqldA0KYGBge3J9DQptb2MgPC0gIGQlPiUgZ3JvdXBfYnkoTmEpICU+JSBzdW1tYXJpc2UobiA9IG4oKSxtZWFuX29mX1BvcCA9IG1lYW4oUG9wKSkNCm1vYw0KDQpgYGANCi0gVMOtbmggdHJ1bmcgduG7iyB0aGVvIG5ow7NtIHF14buRYyBnaWE6IFThu6sgYuG6o25nIHPhu5EgbGnhu4d1IHRhIHRo4bqleSB0cnVuZyB24buLIGPhu6dhIENoaW5hIGzDoCBjYW8gbmjhuqV0DQpgYGB7cn0NCm1lZG9jIDwtIGQgJT4lIGdyb3VwX2J5KE5hKSAlPiUgc3VtbWFyaXNlKG1lZF9vZl9Qb3AgPSBtZWRpYW4oUG9wKSkNCm1lZG9jDQpgYGANCi0gVMOtbmggZMOibiBz4buRIHRydW5nIGLDrG5oIHRoZW8gbsSDbSB2w6AgcXXhu5FjIGdpYQ0KYGBge3J9DQptb2MyIDwtIGQyJT4lIGdyb3VwX2J5KE5hLFkuQ29kZTEpICU+JSBzdW1tYXJpc2UobiA9IG4oKSxtZWFuX29mX1BvcCA9IG1lYW4oUG9wKSwuZ3JvdXBzID0gJ2Ryb3AnKQ0KbW9jMg0KYGBgDQoNCioqVOG7qyBi4bqjbmcgc+G7kSBsaeG7h3UgdGEgY8OzIG3hu5l0IHPhu5Ega+G6v3QgbHXhuq1uIHNhdToqKg0KDQpUSyAyMCB0aMOsIGTDom4gc+G7kSB0cnVuZyBiw6xuaCBj4bunYSBDaGluYSBsw6AgY2FvIG5o4bqldA0KVEsgMjEgdGjDrCBkw6JuIHPhu5EgdHJ1bmcgYsOsbmggY+G7p2EgQ2hpbmEgbMOgIGNhbyBuaOG6pXQNCg0KKlbhuq15IENoaW5hIGzDoCBuxrDhu5tjIGPDsyBz4buRIGTDom4gY2FvIG5o4bqldCB0cm9uZyA1IG7GsOG7m2MqDQoNCiMjIyAqKlNvIHPDoW5oIGTDom4gc+G7kSA1IHF14buRYyBnaWEg4bufIDIgbeG7kWMgdGjhu51pIGdpYW4gMjAwMCB2w6AgMjAyMSoqICMjIw0KDQpgYGB7cn0NCmQ1IDwtIGQlPiUgZmlsdGVyKFkgPT0iMjAwMCJ8IFk9PScyMDIxJyklPiUgc2VsZWN0KE5hLFksUG9wKQ0KYGBgDQotIFThu6sgYuG6o25nIHPhu5EgbGnhu4d1IHRyw6puIHRhIHRo4bqleSDEkcaw4bujYyBkw6JuIHPhu5EgY+G7p2EgNSBxdeG7kWMgZ2lhIMSR4buBdSB0xINuZyBt4bqhbmgsIHRyb25nIMSRw7MgZMOibiBz4buRIGPhu6dhIENoaW5hIHbDoCBJbmRpYSBjw7Mgc+G7sSB0xINuZyB0csaw4bufbmcgbmhhbmguIA0KDQotIFRyb25nIG7Eg20gMjAwMCBCcmF6aWwgbMOgIHF14buRYyBnaWEgY8OzIHPhu5EgZMOibiB0aOG6pXAgbmjhuqV0IHNvIHbhu5tpIDQgbsaw4bubYyBjw7JuIGzhuqFpLg0KDQotIFRyb25nIG7Eg20gMjAyMSBCcmF6aWwgbMOgIHF14buRYyBnaWEgY8OzIHPhu5EgZMOibiB0aOG6pXAgbmjhuqV0Lg0KDQotIFbhuq15IHThu6sgxJHDsyB0w6AgdGjhuqV5IMSRxrDhu6NjIENoaW5hIHbDoCBJbmRpYSBjw7Mgc+G7sSB0xINuZyB0xrDhu59uZyBuaGFuaCwgQnJhemlsIHTEg25nIHTGsOG7n25nIGPDsm4gY2jhuq1tIGjGoW4gc28gduG7m2kgNCBxdeG7kWMgZ2lhIGPDsm4gbOG6oWkuDQo=