Innuttaasut


library("tidyverse")
library(statgl) # Info at www.stat.gl/SBE202003/o1
library("kableExtra")
library("glue")
library("rjson")


lang <- paste0("?lang=", language) 
select <- "&select"
json <- ".json_stat2"
csv <- ".csv"

first_blank <- c(" " = 1)

table <- "Tabel"
note   <- "Se Statistikbanken tabel: "

title1 <- "1.1. Befolkning i kommuner, distrikter og lokaliteter"

id1 <- "BEDST2"
id2 <- "BEDST3"
id3 <- "BEDST4"


link1 <- "https://bank.stat.gl:443/sq/be66e20d-950c-41fd-98be-0c81e0f19417"
link2 <- "https://bank.stat.gl:443/sq/45b2ccd0-17b0-476c-b7c1-7a92cd5c7a3c" 
link3 <- "https://bank.stat.gl:443/sq/1bb5507d-07ca-4f13-a800-eb873e7c4569"


table1 <- glue("**", table, " 1.** ", fromJSON(file = glue(link1, json, lang))$label)
table2 <- glue("**", table, " 2.** ", fromJSON(file = glue(link2, json, lang))$label)
table3 <- glue("**", table, " 3.** ", fromJSON(file = glue(link3, json, lang))$label)
Inuit amerlassusaat
table <- 
  read_csv(
    glue::glue(link1, csv, lang),
    locale = locale(encoding = "latin1"))

column_vector <- 1:8
names(column_vector) <- c(" ",
                          fromJSON(file = glue::glue(link1, json, lang))$dimension$`place of birth`$category$label$N,
                          fromJSON(file = glue::glue(link1, json, lang))$dimension$`place of birth`$category$label$S,
                          fromJSON(file = glue::glue(link1, json, lang))$dimension$`place of birth`$category$label$T,
                          glue(fromJSON(file = glue::glue(link1, json, lang))$dimension$`place of birth`$category$label$N, " "),
                          glue(fromJSON(file = glue::glue(link1, json, lang))$dimension$`place of birth`$category$label$S, " "),
                          glue(fromJSON(file = glue::glue(link1, json, lang))$dimension$`place of birth`$category$label$T, " "),
                          glue(fromJSON(file = glue::glue(link1, json, lang))$dimension$`place of birth`$category$label$T, "  "))

header_vector <- c(1, 3, 3, 1)
names(header_vector) <- c(" ",
                          fromJSON(file = glue::glue(link1, json, lang))$dimension$gender$category$label$M,
                          fromJSON(file = glue::glue(link1, json, lang))$dimension$gender$category$label$K,
                          fromJSON(file = glue::glue(link1, json, lang))$dimension$gender$category$label$T)

table %>% 
  select(-8, -9) %>% 
  rename(column_vector) %>% 
  statgl_table() %>% 
  row_spec(1, bold = T) %>% 
  add_header_above(header_vector)
Angutit
Arnat
Katillugit
Kalaallit Nunaat Kalaallit Nunaata avataani Katillugit Kalaallit Nunaat Kalaallit Nunaata avataani Katillugit Katillugit
Katillugit 25.568 4.353 29.921 24.389 2.389 26.778 56.699
Kommune Kujalleq 2.959 269 3.228 2.775 142 2.917 6.145
Kommuneqarfik Sermersooq 9.996 2.848 12.844 9.951 1.587 11.538 24.382
Qeqqata Kommunia 4.385 461 4.846 4.098 260 4.358 9.204
Kommune Qeqertalik 3.046 172 3.218 2.752 88 2.840 6.058
Avannaata Kommunia 5.167 568 5.735 4.804 307 5.111 10.846
Kommunit avataanni 15 35 50 9 5 14 64


Se Statistikbanken tabel: BEDST2

table <- 
  read_csv(
    glue::glue(link2, csv, lang),
    locale = locale(encoding = "latin1"))

column_vector <- 1:8
names(column_vector) <- c(" ",
                          fromJSON(file = glue::glue(link2, json, lang))$dimension$`place of birth`$category$label$N,
                          fromJSON(file = glue::glue(link2, json, lang))$dimension$`place of birth`$category$label$S,
                          fromJSON(file = glue::glue(link2, json, lang))$dimension$`place of birth`$category$label$T,
                          glue(fromJSON(file = glue::glue(link2, json, lang))$dimension$`place of birth`$category$label$N, " "),
                          glue(fromJSON(file = glue::glue(link2, json, lang))$dimension$`place of birth`$category$label$S, " "),
                          glue(fromJSON(file = glue::glue(link2, json, lang))$dimension$`place of birth`$category$label$T, " "),
                          glue(fromJSON(file = glue::glue(link2, json, lang))$dimension$`place of birth`$category$label$T, "  "))

header_vector <- c(1, 3, 3, 1)
names(header_vector) <- c(" ",
                          fromJSON(file = glue::glue(link2, json, lang))$dimension$gender$category$label$M,
                          fromJSON(file = glue::glue(link2, json, lang))$dimension$gender$category$label$K,
                          fromJSON(file = glue::glue(link2, json, lang))$dimension$gender$category$label$T)


table %>% 
  select(-8, -9) %>% 
  filter(table[,10] > 0) %>% 
  rename(column_vector) %>% 
  statgl_table() %>% 
  row_spec(1, bold = T) %>% 
  add_header_above(header_vector)
Angutit
Arnat
Katillugit
Kalaallit Nunaat Kalaallit Nunaata avataani Katillugit Kalaallit Nunaat Kalaallit Nunaata avataani Katillugit Katillugit
Katillugit 25.568 4.353 29.921 24.389 2.389 26.778 56.699
Nanortalik 766 31 797 656 9 665 1.462
Qaqortoq 1.464 185 1.649 1.406 104 1.510 3.159
Narsaq 729 53 782 713 29 742 1.524
Paamiut 652 29 681 562 19 581 1.262
Nuuk 7.870 2.733 10.603 7.970 1.518 9.488 20.091
Maniitsoq 1.552 113 1.665 1.378 49 1.427 3.092
Sisimiut 2.833 348 3.181 2.720 211 2.931 6.112
Kangaatsiaq 570 5 575 476 4 480 1.055
Aasiaat 1.496 146 1.642 1.351 71 1.422 3.064
Qasigiannguit 559 9 568 516 8 524 1.092
Ilulissat 2.342 450 2.792 2.269 238 2.507 5.299
Qeqertarsuaq 421 12 433 409 5 414 847
Uummannaq 1.066 70 1.136 988 45 1.033 2.169
Upernavik 1.394 37 1.431 1.224 16 1.240 2.671
Qaanaaq 365 11 376 323 8 331 707
Tasiilaq 1.289 77 1.366 1.258 41 1.299 2.665
Ittoqqortoormiit 185 9 194 161 9 170 364


Se Statistikbanken tabel: BEDST3

table <- 
  read_csv(
    glue(link3, csv, lang),
    locale = locale(encoding = "latin1"))

column_vector <- 1:8
names(column_vector) <- c(" ",
                          fromJSON(file = glue::glue(link3, json, lang))$dimension$`place of birth`$category$label$N,
                          fromJSON(file = glue::glue(link3, json, lang))$dimension$`place of birth`$category$label$S,
                          fromJSON(file = glue::glue(link3, json, lang))$dimension$`place of birth`$category$label$T,
                          glue(fromJSON(file = glue::glue(link3, json, lang))$dimension$`place of birth`$category$label$N, " "),
                          glue(fromJSON(file = glue::glue(link3, json, lang))$dimension$`place of birth`$category$label$S, " "),
                          glue(fromJSON(file = glue::glue(link3, json, lang))$dimension$`place of birth`$category$label$T, " "),
                          glue(fromJSON(file = glue::glue(link3, json, lang))$dimension$`place of birth`$category$label$T, "  "))

header_vector <- c(1, 3, 3, 1)
names(header_vector) <- c(" ",
                          fromJSON(file = glue::glue(link3, json, lang))$dimension$gender$category$label$M,
                          fromJSON(file = glue::glue(link3, json, lang))$dimension$gender$category$label$K,
                          fromJSON(file = glue::glue(link3, json, lang))$dimension$gender$category$label$T)

table %>% 
    select(-8, -9) %>% 
    filter(table[,10] > 0) %>% 
    rename(column_vector) %>% 
    statgl_table() %>% 
    row_spec(1, bold = T) %>% 
    add_header_above(header_vector)
Angutit
Arnat
Katillugit
Kalaallit Nunaat Kalaallit Nunaata avataani Katillugit Kalaallit Nunaat Kalaallit Nunaata avataani Katillugit Katillugit
Nuna tamakkerlugu 25.568 4.353 29.921 24.389 2.389 26.778 56.699
Nanortalik (illoqarfik) 555 21 576 511 8 519 1.095
Aappilattoq (Kujallermi nunaqarfik) 49 1 50 32 1 33 83
Narsarmijit (2018-ip naanerani taajuut allanngorpoq) 32 1 33 25 0 25 58
Tasiusaq (Kujallermi nunaqarfik) 31 0 31 16 0 16 47
Ammassivik (nunaqarfik) 17 0 17 15 0 15 32
Alluitsup Paa (nunaqarfik) 81 6 87 54 0 54 141
Uoplyst i Nanortalik distrikt 1 2 3 3 0 3 6
Qaqortoq (illoqarfik) 1.397 181 1.578 1.366 103 1.469 3.047
Saarloq (nunaqarfik) 16 0 16 9 0 9 25
Eqalugaarsuit (nunaqarfik) 42 3 45 27 1 28 73
Qassimiut (nunaqarfik) 9 1 10 4 0 4 14
Narsaq (illoqarfik) 616 33 649 611 18 629 1.278
Igaliku (nunaqarfik) 19 2 21 12 0 12 33
Qassiarsuk (nunaqarfik) 30 2 32 29 4 33 65
Narsarsuaq (nunaqarfik) 58 16 74 60 7 67 141
Uoplyst i Narsaq distrikt 6 0 6 1 0 1 7
Paamiut (illoqarfik) 615 29 644 533 16 549 1.193
Arsuk (nunaqarfik) 37 0 37 29 3 32 69
Nuuk (illoqarfik) 7.742 2.730 10.472 7.885 1.515 9.400 19.872
Qeqertarsuatsiaat (nunaqarfik) 98 2 100 68 2 70 170
Kapisillit (nunaqarfik) 25 1 26 14 1 15 41
Uoplyst i Nuuk distrikt 5 0 5 3 0 3 8
Tasiilaq (illoqarfik) 861 62 923 873 33 906 1.829
Sermiligaaq (nunaqarfik) 105 0 105 92 1 93 198
Isertoq (nunaqarfik) 23 0 23 25 0 25 48
Kulusuk (nunaqarfik) 118 9 127 93 7 100 227
Tiilerilaaq (nunaqarfik) 43 2 45 49 0 49 94
Kuummiit (nunaqarfik) 139 4 143 126 0 126 269
Ittoqqortoormiit (illoqarfik) 185 8 193 161 9 170 363
Uoplyst i Illoqqortoormiut distrikt 0 1 1 0 0 0 1
Maniitsoq (illoqarfik) 1.253 110 1.363 1.135 49 1.184 2.547
Atammik (nunaqarfik) 102 2 104 85 0 85 189
Napasoq (nunaqarfik) 38 0 38 33 0 33 71
Kangaamiut (nunaqarfik) 159 1 160 125 0 125 285
Sisimiut (illoqarfik) 2.530 265 2.795 2.439 178 2.617 5.412
Itilleq (nunaqarfik) 43 0 43 43 0 43 86
Sarfannguit (nunaqarfik) 52 0 52 45 0 45 97
Kangerlussuaq (nunaqarfik) 208 83 291 193 33 226 517
Kangaatsiaq (illoqarfik) 252 4 256 223 4 227 483
Attu (nunaqarfik) 112 1 113 82 0 82 195
Iginniarfik (nunaqarfik) 37 0 37 31 0 31 68
Niaqornaarsuk (nunaqarfik) 124 0 124 99 0 99 223
Ikerasaarsuk (KAN)(nunaqarfik) 45 0 45 41 0 41 86
Aasiaat (illoqarfik) 1.428 146 1.574 1.306 71 1.377 2.951
Akunnaaq (nunaqarfik) 37 0 37 20 0 20 57
Kitsissuarsuit (nunaqarfik) 31 0 31 25 0 25 56
Qasigiannguit (illoqarfik) 520 9 529 479 7 486 1.015
Ikamiut (nunaqarfik) 39 0 39 37 1 38 77
Qeqertarsuaq (illoqarfik) 416 12 428 405 5 410 838
Kangerluk (nunaqarfik) 5 0 5 4 0 4 9
Ilulissat (illoqarfik) 2.170 445 2.615 2.113 235 2.348 4.963
Oqaatsut (nunaqarfik) 21 3 24 14 0 14 38
Qeqertaq (nunaqarfik) 47 0 47 50 0 50 97
Saqqaq (nunaqarfik) 83 1 84 62 2 64 148
Ilimanaq (nunaqarfik) 21 1 22 30 1 31 53
Uummannaq (illoqarfik) 660 58 718 627 38 665 1.383
Niaqornat (nunaqarfik) 13 0 13 16 0 16 29
Qaarsut (nunaqarfik) 83 3 86 80 1 81 167
Ikerasak (nunaqarfik) 117 0 117 99 0 99 216
Saattut (nunaqarfik) 121 6 127 99 5 104 231
Ukkusissat (nunaqarfik) 72 3 75 67 1 68 143
Upernavik (illoqarfik) 543 26 569 486 9 495 1.064
Upernavik Kujalleq (nunaqarfik) 105 0 105 92 0 92 197
Kangersuatsiaq (nunaqarfik) 79 0 79 45 0 45 124
Aappilattoq (Avannaani nunaqarfik) 83 0 83 74 0 74 157
Tasiusaq (Avannaani nunaqarfik) 136 3 139 118 4 122 261
Nuussuaq (nunaqarfik) 87 0 87 89 0 89 176
Kullorsuaq (nunaqarfik) 230 5 235 231 2 233 468
Naajaat (nunaqarfik) 25 0 25 18 0 18 43
Innaarsuit (nunaqarfik) 86 3 89 59 1 60 149
Nutaarmiut (nunaqarfik) 19 0 19 11 0 11 30
Ikerasaarsuk (UPE)(nunaqarfik) 1 0 1 1 0 1 2
Qaanaaq (illoqarfik) 293 10 303 279 8 287 590
Savissivik (nunaqarfik) 32 0 32 19 0 19 51
Siorapaluk (nunaqarfik) 22 1 23 12 0 12 35
Qeqertat (nunaqarfik) 17 0 17 13 0 13 30
Uoplyst i Qaanaaq distrikt 1 0 1 0 0 0 1
Pituffik (stationi) 15 27 42 8 2 10 52
Uoplyst udenfor kommunerne 0 8 8 1 3 4 12


Se Statistikbanken tabel: BEDST4


Sidst opdateret: 17. april 2024
LS0tDQpwYXJhbXM6DQogIGxhbmc6ICJkYSINCm91dHB1dDoNCiAgc3RhdGdsOjpzdGF0Z2xfcmVwb3J0Og0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCmVkaXRvcl9vcHRpb25zOiANCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGNvbnNvbGUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KCWVjaG8gICAgPSBUUlVFLA0KCW1lc3NhZ2UgPSBGQUxTRSwNCgl3YXJuaW5nID0gRkFMU0UsDQoJY2xhc3Mub3V0cHV0ID0gInNjcm9sbC0xMDAiDQopDQoNCnsNCmxpYnJhcnkoInRpZHl2ZXJzZSIpDQpsaWJyYXJ5KCJzdGF0Z2wiKQ0KbGlicmFyeSgia2FibGVFeHRyYSIpDQpsaWJyYXJ5KCJsdWJyaWRhdGUiKQ0KbGlicmFyeSgieWFtbCIpDQp9DQoNCnsgIA0KbGFuZ3VhZ2UgIDwtIHBhcmFtcyRsYW5nDQpvcHRpb24gICAgPC0gcGFzdGUwKCI/bGFuZz0iLCBsYW5ndWFnZSwgIiZzZWxlY3QiKQ0KbG9nbyAgICAgIDwtIHBhc3RlMChnZXR3ZCgpLCIvYWRkL2xvZ28uZ2lmIikNCnR4dCAgICAgICA8LSByZWFkX3lhbWwocGFzdGUwKGdldHdkKCksICIvYWRkL3R4dC55bWwiKSwgZmlsZUVuY29kaW5nID0gIklTTy04ODU5LTEiKQ0Kc291cmNlICAgIDwtIHR4dCRzb3VyY2VbbGFuZ3VhZ2VdICU+JSB1bmxpc3QoKQ0KfQ0KDQp4YXJpbmdhbkV4dHJhOjp1c2VfY2xpcGJvYXJkKCkNCg0KYGBgDQoNCmBgYHtjc3MsIGVjaG8gPSBGQUxTRX0NCg0KLmFjY29yZGlvbiB7DQogIGJhY2tncm91bmQtY29sb3I6ICM5MTk5MDA7DQogIGNvbG9yOiB3aGl0ZTsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICBwYWRkaW5nOiAxOHB4Ow0KICB3aWR0aDogMTAwJTsNCiAgYm9yZGVyOiBub25lOw0KICBib3JkZXItcmFkaXVzOiA1cHg7DQogIHRleHQtYWxpZ246IGxlZnQ7DQogIG91dGxpbmU6IG5vbmU7DQogIGZvbnQtc2l6ZTogMTVweDsNCiAgdHJhbnNpdGlvbjogMC40czsNCn0NCg0KLmFjdGl2ZSwgLmFjY29yZGlvbjpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmOTcyNDI7DQp9DQoNCi5hY2NvcmRpb246YWZ0ZXIgew0KICBjb250ZW50OiAnXDAwMkInOw0KICBjb2xvcjogIzc3NzsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZsb2F0OiByaWdodDsNCiAgbWFyZ2luLWxlZnQ6IDVweDsNCn0NCg0KLmFjdGl2ZTphZnRlciB7DQogIGNvbnRlbnQ6ICJcMjIxMiI7DQp9DQoNCi5wYW5lbCB7DQogIHBhZGRpbmc6IDBweCA1cHggMHB4IDVweDsNCiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7DQogIG1heC1oZWlnaHQ6IDA7DQogIG92ZXJmbG93OiBoaWRkZW47DQogIHRyYW5zaXRpb246IG1heC1oZWlnaHQgMC4ycyBlYXNlLW91dDsNCn0NCg0KZGV0YWlscyB7DQogIHdpZHRoOiAxMDAlOw0KfQ0KDQpkZXRhaWxzID4gc3VtbWFyeSB7DQogIHBhZGRpbmc6IDRweCAxMnB4Ow0KICB3aWR0aDogMTAwJTsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2Y5OTsNCiAgYm9yZGVyOiBzb2xpZDsNCiAgYm9yZGVyLWNvbG9yOiB3aGl0ZTsNCiAgYm9yZGVyLXJhZGl1czogNXB4Ow0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGZvbnQtc2l6ZTogMTVweDsNCiAgY29sb3I6IHdoaXRlOw0KfQ0KDQpkZXRhaWxzW29wZW5dID4gc3VtbWFyeSB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmYWE0MWE7DQp9DQoNCg0KLnRpdGxlIHsNCiAgY29sb3I6ICMxYjU0NjM7DQogIGZvbnQtc2l6ZTogMzZweDsNCn0NCg0KDQoucGVyc29uZXIgew0KICBib3gtc2hhZG93OiAzcHggM3B4IDRweCBibGFjazsNCiAgYmFja2dyb3VuZDogIzAwNDQ1OTsNCiAgcGFkZGluZy1yaWdodDogMTVweDsNCiAgcGFkZGluZy1sZWZ0OiAxNnB4Ow0KICBwYWRkaW5nLXRvcDogMC4xcHg7DQogIHBhZGRpbmctYm90dG9tOiAxcHg7DQogIGZvbnQtc2l6ZTogMTFweDsNCiAgY29sb3I6IHdoaXRlOw0KICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KfQ0KDQouw7hrb25vbWkgew0KICBib3gtc2hhZG93OiAzcHggM3B4IDRweCBibGFjazsNCiAgYmFja2dyb3VuZDogIzAwN0Y5OTsNCiAgcGFkZGluZy1yaWdodDogMTVweDsNCiAgcGFkZGluZy1sZWZ0OiAxNnB4Ow0KICBwYWRkaW5nLXRvcDogMXB4Ow0KICBwYWRkaW5nLWJvdHRvbTogMC4xcHg7DQogIGZvbnQtc2l6ZTogMTFweDsNCiAgY29sb3I6IHdoaXRlOw0KICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KfQ0KDQoudHbDpnJnw6VlbmRlIHsNCiAgYm94LXNoYWRvdzogM3B4IDNweCA0cHggYmxhY2s7DQogIGJhY2tncm91bmQ6ICNmYWE0MWE7DQogIHBhZGRpbmctcmlnaHQ6IDE1cHg7DQogIHBhZGRpbmctbGVmdDogMTZweDsNCiAgcGFkZGluZy10b3A6IDAuMXB4Ow0KICBwYWRkaW5nLWJvdHRvbTogMXB4Ow0KICBmb250LXNpemU6IDExcHg7DQogIGNvbG9yOiB3aGl0ZTsNCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCn0NCg0KLmNvbnRhaW5lciB7DQogIHdpZHRoOiBpbmhlcml0Ow0KfQ0KDQouc2Nyb2xsLTEwMCB7DQogIG1heC1oZWlnaHQ6IDEwMDsNCiAgb3ZlcmZsb3cteTogYXV0bzsNCiAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsNCn0NCg0KDQpwcmUgew0KICBtYXgtaGVpZ2h0OiAzMDBweDsNCiAgb3ZlcmZsb3cteTogYXV0bzsNCn0NCg0KcHJlW2NsYXNzXSB7DQogIG1heC1oZWlnaHQ6IDMwMHB4Ow0KfQ0KDQpgYGANCg0KPGJyPg0KPGJyPg0KDQo8Y2VudGVyPg0KDQotLS0NCiANCiMgW2ByIHR4dCRCRSR0aXRsZVtsYW5ndWFnZV1gXXsudGl0bGV9DQogDQotLS0NCjwvY2VudGVyPg0KDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCmxpYnJhcnkoInRpZHl2ZXJzZSIpDQpsaWJyYXJ5KHN0YXRnbCkgIyBJbmZvIGF0IHd3dy5zdGF0LmdsL1NCRTIwMjAwMy9vMQ0KbGlicmFyeSgia2FibGVFeHRyYSIpDQpsaWJyYXJ5KCJnbHVlIikNCmxpYnJhcnkoInJqc29uIikNCg0KDQpsYW5nIDwtIHBhc3RlMCgiP2xhbmc9IiwgbGFuZ3VhZ2UpIA0Kc2VsZWN0IDwtICImc2VsZWN0Ig0KanNvbiA8LSAiLmpzb25fc3RhdDIiDQpjc3YgPC0gIi5jc3YiDQoNCmZpcnN0X2JsYW5rIDwtIGMoIiAiID0gMSkNCg0KdGFibGUgPC0gIlRhYmVsIg0Kbm90ZSAgIDwtICJTZSBTdGF0aXN0aWtiYW5rZW4gdGFiZWw6ICINCg0KdGl0bGUxIDwtICIxLjEuIEJlZm9sa25pbmcgaSBrb21tdW5lciwgZGlzdHJpa3RlciBvZyBsb2thbGl0ZXRlciINCg0KaWQxIDwtICJCRURTVDIiDQppZDIgPC0gIkJFRFNUMyINCmlkMyA8LSAiQkVEU1Q0Ig0KDQoNCmxpbmsxIDwtICJodHRwczovL2Jhbmsuc3RhdC5nbDo0NDMvc3EvYmU2NmUyMGQtOTUwYy00MWZkLTk4YmUtMGM4MWUwZjE5NDE3Ig0KbGluazIgPC0gImh0dHBzOi8vYmFuay5zdGF0LmdsOjQ0My9zcS80NWIyY2NkMC0xN2IwLTQ3NmMtYjdjMS03YTkyY2Q1YzdhM2MiIA0KbGluazMgPC0gImh0dHBzOi8vYmFuay5zdGF0LmdsOjQ0My9zcS8xYmI1NTA3ZC0wN2NhLTRmMTMtYTgwMC1lYjg3M2U3YzQ1NjkiDQoNCg0KdGFibGUxIDwtIGdsdWUoIioqIiwgdGFibGUsICIgMS4qKiAiLCBmcm9tSlNPTihmaWxlID0gZ2x1ZShsaW5rMSwganNvbiwgbGFuZykpJGxhYmVsKQ0KdGFibGUyIDwtIGdsdWUoIioqIiwgdGFibGUsICIgMi4qKiAiLCBmcm9tSlNPTihmaWxlID0gZ2x1ZShsaW5rMiwganNvbiwgbGFuZykpJGxhYmVsKQ0KdGFibGUzIDwtIGdsdWUoIioqIiwgdGFibGUsICIgMy4qKiAiLCBmcm9tSlNPTihmaWxlID0gZ2x1ZShsaW5rMywganNvbiwgbGFuZykpJGxhYmVsKQ0KDQoNCg0KDQoNCg0KYGBgDQoNCjxkZXRhaWxzIG9wZW4+IDxzdW1tYXJ5PiBgciB0eHQkQkUkc3ViMVtsYW5ndWFnZV1gIDwvc3VtbWFyeT4NCjxicj4NCjxidXR0b24gY2xhc3M9ImFjY29yZGlvbiI+IGByIHRhYmxlMSBgIDwvYnV0dG9uPiA8ZGl2IGNsYXNzPSJwYW5lbCI+DQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQp0YWJsZSA8LSANCiAgcmVhZF9jc3YoDQogICAgZ2x1ZTo6Z2x1ZShsaW5rMSwgY3N2LCBsYW5nKSwNCiAgICBsb2NhbGUgPSBsb2NhbGUoZW5jb2RpbmcgPSAibGF0aW4xIikpDQoNCmNvbHVtbl92ZWN0b3IgPC0gMTo4DQpuYW1lcyhjb2x1bW5fdmVjdG9yKSA8LSBjKCIgIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUpTT04oZmlsZSA9IGdsdWU6OmdsdWUobGluazEsIGpzb24sIGxhbmcpKSRkaW1lbnNpb24kYHBsYWNlIG9mIGJpcnRoYCRjYXRlZ29yeSRsYWJlbCROLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tSlNPTihmaWxlID0gZ2x1ZTo6Z2x1ZShsaW5rMSwganNvbiwgbGFuZykpJGRpbWVuc2lvbiRgcGxhY2Ugb2YgYmlydGhgJGNhdGVnb3J5JGxhYmVsJFMsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21KU09OKGZpbGUgPSBnbHVlOjpnbHVlKGxpbmsxLCBqc29uLCBsYW5nKSkkZGltZW5zaW9uJGBwbGFjZSBvZiBiaXJ0aGAkY2F0ZWdvcnkkbGFiZWwkVCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x1ZShmcm9tSlNPTihmaWxlID0gZ2x1ZTo6Z2x1ZShsaW5rMSwganNvbiwgbGFuZykpJGRpbWVuc2lvbiRgcGxhY2Ugb2YgYmlydGhgJGNhdGVnb3J5JGxhYmVsJE4sICIgIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgIGdsdWUoZnJvbUpTT04oZmlsZSA9IGdsdWU6OmdsdWUobGluazEsIGpzb24sIGxhbmcpKSRkaW1lbnNpb24kYHBsYWNlIG9mIGJpcnRoYCRjYXRlZ29yeSRsYWJlbCRTLCAiICIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBnbHVlKGZyb21KU09OKGZpbGUgPSBnbHVlOjpnbHVlKGxpbmsxLCBqc29uLCBsYW5nKSkkZGltZW5zaW9uJGBwbGFjZSBvZiBiaXJ0aGAkY2F0ZWdvcnkkbGFiZWwkVCwgIiAiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x1ZShmcm9tSlNPTihmaWxlID0gZ2x1ZTo6Z2x1ZShsaW5rMSwganNvbiwgbGFuZykpJGRpbWVuc2lvbiRgcGxhY2Ugb2YgYmlydGhgJGNhdGVnb3J5JGxhYmVsJFQsICIgICIpKQ0KDQpoZWFkZXJfdmVjdG9yIDwtIGMoMSwgMywgMywgMSkNCm5hbWVzKGhlYWRlcl92ZWN0b3IpIDwtIGMoIiAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tSlNPTihmaWxlID0gZ2x1ZTo6Z2x1ZShsaW5rMSwganNvbiwgbGFuZykpJGRpbWVuc2lvbiRnZW5kZXIkY2F0ZWdvcnkkbGFiZWwkTSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUpTT04oZmlsZSA9IGdsdWU6OmdsdWUobGluazEsIGpzb24sIGxhbmcpKSRkaW1lbnNpb24kZ2VuZGVyJGNhdGVnb3J5JGxhYmVsJEssDQogICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21KU09OKGZpbGUgPSBnbHVlOjpnbHVlKGxpbmsxLCBqc29uLCBsYW5nKSkkZGltZW5zaW9uJGdlbmRlciRjYXRlZ29yeSRsYWJlbCRUKQ0KDQp0YWJsZSAlPiUgDQogIHNlbGVjdCgtOCwgLTkpICU+JSANCiAgcmVuYW1lKGNvbHVtbl92ZWN0b3IpICU+JSANCiAgc3RhdGdsX3RhYmxlKCkgJT4lIA0KICByb3dfc3BlYygxLCBib2xkID0gVCkgJT4lIA0KICBhZGRfaGVhZGVyX2Fib3ZlKGhlYWRlcl92ZWN0b3IpDQoNCg0KDQpgYGANCjxicj4NClshW10oYHIgbG9nb2Ape3dpZHRoPTQwfWByIGdsdWU6OmdsdWUobm90ZSwgaWQxKWAgIF0oYHIgZ2x1ZTo6Z2x1ZShsaW5rMSwgbGFuZywgc2VsZWN0KWApe3RhcmdldD0iX2JsYW5rIn0NCjwvZGl2PiANCg0KDQo8YnV0dG9uIGNsYXNzPSJhY2NvcmRpb24iPiBgciB0YWJsZTIgYCA8L2J1dHRvbj4gPGRpdiBjbGFzcz0icGFuZWwiPg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KdGFibGUgPC0gDQogIHJlYWRfY3N2KA0KICAgIGdsdWU6OmdsdWUobGluazIsIGNzdiwgbGFuZyksDQogICAgbG9jYWxlID0gbG9jYWxlKGVuY29kaW5nID0gImxhdGluMSIpKQ0KDQpjb2x1bW5fdmVjdG9yIDwtIDE6OA0KbmFtZXMoY29sdW1uX3ZlY3RvcikgPC0gYygiICIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21KU09OKGZpbGUgPSBnbHVlOjpnbHVlKGxpbmsyLCBqc29uLCBsYW5nKSkkZGltZW5zaW9uJGBwbGFjZSBvZiBiaXJ0aGAkY2F0ZWdvcnkkbGFiZWwkTiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUpTT04oZmlsZSA9IGdsdWU6OmdsdWUobGluazIsIGpzb24sIGxhbmcpKSRkaW1lbnNpb24kYHBsYWNlIG9mIGJpcnRoYCRjYXRlZ29yeSRsYWJlbCRTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tSlNPTihmaWxlID0gZ2x1ZTo6Z2x1ZShsaW5rMiwganNvbiwgbGFuZykpJGRpbWVuc2lvbiRgcGxhY2Ugb2YgYmlydGhgJGNhdGVnb3J5JGxhYmVsJFQsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGdsdWUoZnJvbUpTT04oZmlsZSA9IGdsdWU6OmdsdWUobGluazIsIGpzb24sIGxhbmcpKSRkaW1lbnNpb24kYHBsYWNlIG9mIGJpcnRoYCRjYXRlZ29yeSRsYWJlbCROLCAiICIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBnbHVlKGZyb21KU09OKGZpbGUgPSBnbHVlOjpnbHVlKGxpbmsyLCBqc29uLCBsYW5nKSkkZGltZW5zaW9uJGBwbGFjZSBvZiBiaXJ0aGAkY2F0ZWdvcnkkbGFiZWwkUywgIiAiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x1ZShmcm9tSlNPTihmaWxlID0gZ2x1ZTo6Z2x1ZShsaW5rMiwganNvbiwgbGFuZykpJGRpbWVuc2lvbiRgcGxhY2Ugb2YgYmlydGhgJGNhdGVnb3J5JGxhYmVsJFQsICIgIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgIGdsdWUoZnJvbUpTT04oZmlsZSA9IGdsdWU6OmdsdWUobGluazIsIGpzb24sIGxhbmcpKSRkaW1lbnNpb24kYHBsYWNlIG9mIGJpcnRoYCRjYXRlZ29yeSRsYWJlbCRULCAiICAiKSkNCg0KaGVhZGVyX3ZlY3RvciA8LSBjKDEsIDMsIDMsIDEpDQpuYW1lcyhoZWFkZXJfdmVjdG9yKSA8LSBjKCIgIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUpTT04oZmlsZSA9IGdsdWU6OmdsdWUobGluazIsIGpzb24sIGxhbmcpKSRkaW1lbnNpb24kZ2VuZGVyJGNhdGVnb3J5JGxhYmVsJE0sDQogICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21KU09OKGZpbGUgPSBnbHVlOjpnbHVlKGxpbmsyLCBqc29uLCBsYW5nKSkkZGltZW5zaW9uJGdlbmRlciRjYXRlZ29yeSRsYWJlbCRLLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tSlNPTihmaWxlID0gZ2x1ZTo6Z2x1ZShsaW5rMiwganNvbiwgbGFuZykpJGRpbWVuc2lvbiRnZW5kZXIkY2F0ZWdvcnkkbGFiZWwkVCkNCg0KDQp0YWJsZSAlPiUgDQogIHNlbGVjdCgtOCwgLTkpICU+JSANCiAgZmlsdGVyKHRhYmxlWywxMF0gPiAwKSAlPiUgDQogIHJlbmFtZShjb2x1bW5fdmVjdG9yKSAlPiUgDQogIHN0YXRnbF90YWJsZSgpICU+JSANCiAgcm93X3NwZWMoMSwgYm9sZCA9IFQpICU+JSANCiAgYWRkX2hlYWRlcl9hYm92ZShoZWFkZXJfdmVjdG9yKQ0KDQoNCg0KYGBgDQo8YnI+DQpbIVtdKGByIGxvZ29gKXt3aWR0aD00MH1gciBnbHVlOjpnbHVlKG5vdGUsIGlkMilgICBdKGByIGdsdWU6OmdsdWUobGluazIsIGxhbmcsIHNlbGVjdClgKXt0YXJnZXQ9Il9ibGFuayJ9DQo8L2Rpdj4NCg0KPGJ1dHRvbiBjbGFzcz0iYWNjb3JkaW9uIj4gYHIgdGFibGUzIGAgPC9idXR0b24+IDxkaXYgY2xhc3M9InBhbmVsIj4NCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCnRhYmxlIDwtIA0KICByZWFkX2NzdigNCiAgICBnbHVlKGxpbmszLCBjc3YsIGxhbmcpLA0KICAgIGxvY2FsZSA9IGxvY2FsZShlbmNvZGluZyA9ICJsYXRpbjEiKSkNCg0KY29sdW1uX3ZlY3RvciA8LSAxOjgNCm5hbWVzKGNvbHVtbl92ZWN0b3IpIDwtIGMoIiAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tSlNPTihmaWxlID0gZ2x1ZTo6Z2x1ZShsaW5rMywganNvbiwgbGFuZykpJGRpbWVuc2lvbiRgcGxhY2Ugb2YgYmlydGhgJGNhdGVnb3J5JGxhYmVsJE4sDQogICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21KU09OKGZpbGUgPSBnbHVlOjpnbHVlKGxpbmszLCBqc29uLCBsYW5nKSkkZGltZW5zaW9uJGBwbGFjZSBvZiBiaXJ0aGAkY2F0ZWdvcnkkbGFiZWwkUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUpTT04oZmlsZSA9IGdsdWU6OmdsdWUobGluazMsIGpzb24sIGxhbmcpKSRkaW1lbnNpb24kYHBsYWNlIG9mIGJpcnRoYCRjYXRlZ29yeSRsYWJlbCRULA0KICAgICAgICAgICAgICAgICAgICAgICAgICBnbHVlKGZyb21KU09OKGZpbGUgPSBnbHVlOjpnbHVlKGxpbmszLCBqc29uLCBsYW5nKSkkZGltZW5zaW9uJGBwbGFjZSBvZiBiaXJ0aGAkY2F0ZWdvcnkkbGFiZWwkTiwgIiAiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x1ZShmcm9tSlNPTihmaWxlID0gZ2x1ZTo6Z2x1ZShsaW5rMywganNvbiwgbGFuZykpJGRpbWVuc2lvbiRgcGxhY2Ugb2YgYmlydGhgJGNhdGVnb3J5JGxhYmVsJFMsICIgIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgIGdsdWUoZnJvbUpTT04oZmlsZSA9IGdsdWU6OmdsdWUobGluazMsIGpzb24sIGxhbmcpKSRkaW1lbnNpb24kYHBsYWNlIG9mIGJpcnRoYCRjYXRlZ29yeSRsYWJlbCRULCAiICIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBnbHVlKGZyb21KU09OKGZpbGUgPSBnbHVlOjpnbHVlKGxpbmszLCBqc29uLCBsYW5nKSkkZGltZW5zaW9uJGBwbGFjZSBvZiBiaXJ0aGAkY2F0ZWdvcnkkbGFiZWwkVCwgIiAgIikpDQoNCmhlYWRlcl92ZWN0b3IgPC0gYygxLCAzLCAzLCAxKQ0KbmFtZXMoaGVhZGVyX3ZlY3RvcikgPC0gYygiICIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21KU09OKGZpbGUgPSBnbHVlOjpnbHVlKGxpbmszLCBqc29uLCBsYW5nKSkkZGltZW5zaW9uJGdlbmRlciRjYXRlZ29yeSRsYWJlbCRNLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tSlNPTihmaWxlID0gZ2x1ZTo6Z2x1ZShsaW5rMywganNvbiwgbGFuZykpJGRpbWVuc2lvbiRnZW5kZXIkY2F0ZWdvcnkkbGFiZWwkSywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUpTT04oZmlsZSA9IGdsdWU6OmdsdWUobGluazMsIGpzb24sIGxhbmcpKSRkaW1lbnNpb24kZ2VuZGVyJGNhdGVnb3J5JGxhYmVsJFQpDQoNCnRhYmxlICU+JSANCiAgICBzZWxlY3QoLTgsIC05KSAlPiUgDQogICAgZmlsdGVyKHRhYmxlWywxMF0gPiAwKSAlPiUgDQogICAgcmVuYW1lKGNvbHVtbl92ZWN0b3IpICU+JSANCiAgICBzdGF0Z2xfdGFibGUoKSAlPiUgDQogICAgcm93X3NwZWMoMSwgYm9sZCA9IFQpICU+JSANCiAgICBhZGRfaGVhZGVyX2Fib3ZlKGhlYWRlcl92ZWN0b3IpDQoNCmBgYA0KPGJyPg0KWyFbXSgpe3dpZHRoPTQwfWByIGdsdWU6OmdsdWUobm90ZSwgaWQzKWAgIF0oYHIgZ2x1ZTo6Z2x1ZShsaW5rMywgbGFuZywgc2VsZWN0KWApe3RhcmdldD0iX2JsYW5rIn0NCjwvZGl2PiANCg0KPC9kZXRhaWxzPg0KDQoNCg0KDQoNCg0KDQoNCg0KPGhyIHN0eWxlPSJib3JkZXI6MXB4IHJpZGdlIGxpZ2h0Z3JheSI+IDwvaHI+DQo8Y2VudGVyPiA8c3BhbiBzdHlsZT0nY29sb3I6I0QzRDNEMzsgZm9udC1zaXplOjkwJTsnPiBgciBwYXN0ZSh0eHQkdXBkYXRlW2xhbmd1YWdlXSwgZm9ybWF0KFN5cy5EYXRlKCksICIlZC4gJUIgJVkiKSlgIDwvc3Bhbj4gPC9jZW50ZXI+DQoNCg0KDQoNCjxzY3JpcHQ+DQp2YXIgYWNjID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiYWNjb3JkaW9uIik7DQp2YXIgaTsNCg0KZm9yIChpID0gMDsgaSA8IGFjYy5sZW5ndGg7IGkrKykgew0KICBhY2NbaV0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpIHsNCiAgICB0aGlzLmNsYXNzTGlzdC50b2dnbGUoImFjdGl2ZSIpOw0KICAgIHZhciBwYW5lbCA9IHRoaXMubmV4dEVsZW1lbnRTaWJsaW5nOw0KICAgIGlmIChwYW5lbC5zdHlsZS5tYXhIZWlnaHQpIHsNCiAgICAgIHBhbmVsLnN0eWxlLm1heEhlaWdodCA9IG51bGw7DQogICAgfSBlbHNlIHsNCiAgICAgIHBhbmVsLnN0eWxlLm1heEhlaWdodCA9IHBhbmVsLnNjcm9sbEhlaWdodCArICJweCI7DQogICAgfSANCiAgfSk7DQp9DQo8L3NjcmlwdD4NCg0K