Education


Population by status of education


UDXISCPROF_raw <- 
  statgl_url("UDXISCPROF", lang = language) |> 
  statgl_fetch(
    "place of birth"     = px_all(),
    `level of education` = px_all(),
    time                 = px_top(),
    .col_code            = T
  ) |> 
  as_tibble()

UDXISCPROF <- 
  UDXISCPROF_raw |> 
  select(-time) |> 
  mutate(`level of education` = `level of education` |> fct_inorder()) |> 
  spread(`place of birth`, value)

UDXISCPROF |> 
  rename(" " = 1) |> 
  statgl_table() |> 
  row_spec(1, bold = T)
In Greenland Outside Greenland
In total 37.028 5.649
Lower secondary education 22.345 2.905
Upper secondary education 1.896 219
Vocational education and training 7.636 872
Supplementary examination courses 1.442 34
Short-cycle higher education 980 250
Bachelors programme 223 93
Professional bachelors programme 2.079 573
Masters programme 411 665
Phd. Programmes 16 38


See the table in our Statbank: UDXISCPROF

UDXUMG3_raw <- 
  statgl_url("UDXUMG3", lang = language) |> 
  statgl_fetch(
    registrering = px_all(),
    HFU          = px_all(),
    aar          = px_top(),
    .col_code    = T
  ) |> 
  as_tibble()

UDXUMG3 <- 
  UDXUMG3_raw |> 
  mutate(HFU = HFU |> fct_inorder() |>  fct_rev()) |>
  select(aar, registrering, HFU, value) |> 
  spread(HFU, value)

UDXUMG3 |> 
  select(-1) |> 
  rename(" " = 1) |> 
  statgl_table() |> 
  row_spec(1, bold = T) |> 
  column_spec(2, bold = T)
In total Without completed education With completed higher education With vocational upper secondary education completed With general upper secondary education completed
Continuation school 289 289 0 0 0
Higher education 406 76 25 15 290
In employment 3.068 2.403 56 252 357
In total 7.557 6.281 103 356 817
NEET 2.304 2.122 11 68 103
Upper secondary education 1.015 1.000 0 6 9
Vocational education and training 475 391 11 15 58


See the table in our Statbank: UDXUMG3

Primary and lower secondary education


UDXESG_raw <- 
  statgl_url("UDXESG", lang = language) |> 
  statgl_fetch(
    unit                  = "Andel",
    sex                   = px_all(),
    `continuation school` = px_all(),
    status                = px_all(),
    `school year`         = px_all(),
    .col_code             = T
  ) |> 
  as_tibble()


UDXESG <- 
  UDXESG_raw |> 
  filter(`school year` == max(`school year`)) |> 
  mutate(`continuation school` = `continuation school` |> fct_inorder() |> fct_rev(),
         sex = sex |> fct_inorder() |> fct_rev()) |> 
  unite(combi, unit, `school year`, sep = "-")

UDXESG |> 
  select(-combi) |> 
  spread(`continuation school`, value) |> 
  rename(" " = 1) |> 
  statgl_table() |> 
  row_spec(1:3, bold = T) |> 
  column_spec(3, bold = T) |> 
  add_footnote(UDXESG[[1]][1], notation = "symbol")
status In total Danish continuation schools Maniitsumi Efterskoli Efterskole Villads Villadsen
In total Completed 69 75 59 55
In total Dropped out 31 25 41 45
In total Enrolled in total 100 100 100 100
Girls Completed 71 78 63 54
Girls Dropped out 29 22 37 46
Girls Enrolled in total 100 100 100 100
Boys Completed 67 72 56 58
Boys Dropped out 34 28 44 42
Boys Enrolled in total 100 100 100 100
* share in percent-2022/20


See the table in our Statbank: UDXESG

UDXTKK_raw <- 
  statgl_url("UDXTKK", lang = language) |> 
  statgl_fetch(
    subject      = px_all(),
    grade        = px_all(),
    municipality = px_all(),
    unit         = "B",
    time         = px_top(),
    .col_code    = T
  ) |> 
  as_tibble()

UDXTKK <- 
  UDXTKK_raw |> 
  unite(combi, unit, time, sep = " ") |>
  mutate(municipality = municipality |> fct_inorder()) |> 
  spread(subject, value)

UDXTKK |> 
  select(-3) |> 
  rename(" " = 1) |> 
  statgl_table() |> 
  row_spec(c(1, 7), bold = T) |> 
  pack_rows(index = table(UDXTKK[[3]]))
municipality Danish English Greenlandic Mathematics
Problem-solving proficiency (pct. correct) 2023
3rd grade Total 48 NA 48 52
3rd grade Kommune Kujalleq 55 NA 57 56
3rd grade Kommuneqarfik Sermersooq 50 NA 39 53
3rd grade Qeqqata Kommunia 49 NA 59 57
3rd grade Kommune Qeqertalik 40 NA 52 44
3rd grade Avannaata Kommunia 43 NA 44 49
7th grade Total 45 86 59 41
7th grade Kommune Kujalleq 40 81 52 33
7th grade Kommuneqarfik Sermersooq 53 92 51 45
7th grade Qeqqata Kommunia 48 86 67 45
7th grade Kommune Qeqertalik 40 86 67 44
7th grade Avannaata Kommunia 41 75 62 40


See the table in our Statbank: UDXTKK

Upper secondary and tertiary education


UDXISC11A_raw <- 
  statgl_url("UDXISC11A", lang = language) |> 
  statgl_fetch(
    "level of education" = px_all(),
    country              = px_all(),
    time                 = px_top(1),
    .col_code            = T
  ) |> 
  as_tibble()

UDXISC11A <- 
  UDXISC11A_raw |> 
  mutate(time = time |> fct_inorder(),
         country = country |> fct_inorder()) |> 
  spread(country, value)

UDXISC11A |> 
  select(-time) |> 
  rename(" " = 1) |> 
  statgl_table() |> 
  pack_rows(index = table(UDXISC11A[[2]]))
Schools in Greenland Schools in Denmark Schools abroad
2022
Bachelors programme 67 56 5
Masters programme 15 29 2
Professional bachelors programme 129 67 0
Short-cycle higher education 85 39 3
Supplementary examination courses 191 7 0
Upper secondary education 416 27 2
Vocational education and training 655 38 2


See the table in our Statbank: UDXISC11A

UDXISC11L_raw <- 
  statgl_url("UDXISC11L", lang = language) |> 
  statgl_fetch(
    "number of years after enrollment" = 2,
    "level of education"               = px_all(),
    status                             = px_all(),
    time                               = px_top(3),
    .col_code                          = T
  ) |> 
  as_tibble()

UDXISC11L <- 
  UDXISC11L_raw |> 
  filter(value > 0) |> 
  mutate(status = status |> fct_inorder()) |> 
  spread(status, value) |> 
  unite(combi, `number of years after enrollment`, time, sep = " ")

UDXISC11L |> 
  select(-1) |> 
  rename(" " = 1) |> 
  statgl_table() |> 
  add_footnote(UDXISC11L[[1]][1], notation = "symbol")
Still in education Graduated Dropped out New entrants in total
Bachelors programme 87 2 75 164
Masters programme 24 12 9 45
Professional bachelors programme 97 5 86 188
Short-cycle higher education 9 50 45 104
Upper secondary education 302 2 166 470
Vocational education and training, general 163 77 247 487
Vocational education and training, short 6 182 88 276
* 2 years 2020


See the table in our Statbank: UDXISC11L

Educational progress


UDXTRFA1_raw <- 
  statgl_url("UDXTRFA1", lang = language) |> 
  statgl_fetch(
    "number of years after lower secondary education" = 0,
    "level of education"                              = px_all(),
    "educational status"                              = px_all(),
    "graduation year"                                 = px_top(),
    .col_code                                         = T
  ) |> 
  as_tibble()

UDXTRFA1 <- 
  UDXTRFA1_raw |> 
  unite(combi, `number of years after lower secondary education`, `graduation year`, sep = " ") |> 
  mutate(`level of education` = `level of education` |> fct_inorder(),
         `educational status` = `educational status` |> fct_inorder())

UDXTRFA1 |> 
  select(-1) |> 
  spread(`level of education`, value) |> 
  rename(" " = 1) |> 
  statgl_table() |> 
  add_footnote(UDXTRFA1[[1]][1], notation = "symbol")
Upper secondary education Vocational education and training No registration
In education 88 8 0
Graduated 0 0 0
Dropped out 10 1 0
Not enrolled in education 0 0 571
* Directly 2022


See the table in our Statbank: UDXTRFA1


Last updated: 17. april 2024
LS0tDQpwYXJhbXM6DQogIGxhbmc6ICJkYSINCm91dHB1dDoNCiAgc3RhdGdsOjpzdGF0Z2xfcmVwb3J0Og0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCmVkaXRvcl9vcHRpb25zOiANCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGNvbnNvbGUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KCWVjaG8gICAgPSBUUlVFLA0KCW1lc3NhZ2UgPSBGQUxTRSwNCgl3YXJuaW5nID0gRkFMU0UsDQoJY2xhc3Mub3V0cHV0ID0gInNjcm9sbC0xMDAiDQopDQoNCmxpYnJhcnkoInRpZHl2ZXJzZSIpDQpsaWJyYXJ5KCJzdGF0Z2wiKQ0KbGlicmFyeSgia2FibGVFeHRyYSIpDQpsaWJyYXJ5KCJsdWJyaWRhdGUiKQ0KbGlicmFyeSgieWFtbCIpDQoNCmxhbmd1YWdlICA8LSBwYXJhbXMkbGFuZw0Kb3B0aW9uICAgIDwtIHBhc3RlMCgiP2xhbmc9IiwgbGFuZ3VhZ2UsICImc2VsZWN0IikNCmxvZ28gICAgICA8LSBwYXN0ZTAoZ2V0d2QoKSwiL2FkZC9sb2dvLmdpZiIpDQp0eHQgICAgICAgPC0gcmVhZF95YW1sKHBhc3RlMChnZXR3ZCgpLCAiL2FkZC90eHQueW1sIiksIGZpbGVFbmNvZGluZyA9ICJJU08tODg1OS0xIikNCnNvdXJjZSAgICA8LSB0eHQkc291cmNlW2xhbmd1YWdlXSAlPiUgdW5saXN0KCkNCg0KeGFyaW5nYW5FeHRyYTo6dXNlX2NsaXBib2FyZCgpDQoNCmBgYA0KDQpgYGB7Y3NzLCBlY2hvID0gRkFMU0V9DQoNCi5hY2NvcmRpb24gew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTE5OTAwOw0KICBjb2xvcjogd2hpdGU7DQogIGN1cnNvcjogcG9pbnRlcjsNCiAgcGFkZGluZzogMThweDsNCiAgd2lkdGg6IDEwMCU7DQogIGJvcmRlcjogbm9uZTsNCiAgYm9yZGVyLXJhZGl1czogNXB4Ow0KICB0ZXh0LWFsaWduOiBsZWZ0Ow0KICBvdXRsaW5lOiBub25lOw0KICBmb250LXNpemU6IDE1cHg7DQogIHRyYW5zaXRpb246IDAuNHM7DQp9DQoNCi5hY3RpdmUsIC5hY2NvcmRpb246aG92ZXIgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjk3MjQyOw0KfQ0KDQouYWNjb3JkaW9uOmFmdGVyIHsNCiAgY29udGVudDogJ1wwMDJCJzsNCiAgY29sb3I6ICM3Nzc7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmbG9hdDogcmlnaHQ7DQogIG1hcmdpbi1sZWZ0OiA1cHg7DQp9DQoNCi5hY3RpdmU6YWZ0ZXIgew0KICBjb250ZW50OiAiXDIyMTIiOw0KfQ0KDQoucGFuZWwgew0KICBwYWRkaW5nOiAwcHggNXB4IDBweCA1cHg7DQogIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOw0KICBtYXgtaGVpZ2h0OiAwOw0KICBvdmVyZmxvdzogaGlkZGVuOw0KICB0cmFuc2l0aW9uOiBtYXgtaGVpZ2h0IDAuMnMgZWFzZS1vdXQ7DQp9DQoNCmRldGFpbHMgew0KICB3aWR0aDogMTAwJTsNCn0NCg0KZGV0YWlscyA+IHN1bW1hcnkgew0KICBwYWRkaW5nOiA0cHggMTJweDsNCiAgd2lkdGg6IDEwMCU7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMDdmOTk7DQogIGJvcmRlcjogc29saWQ7DQogIGJvcmRlci1jb2xvcjogd2hpdGU7DQogIGJvcmRlci1yYWRpdXM6IDVweDsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICBmb250LXNpemU6IDE1cHg7DQogIGNvbG9yOiB3aGl0ZTsNCn0NCg0KZGV0YWlsc1tvcGVuXSA+IHN1bW1hcnkgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFhNDFhOw0KfQ0KDQoNCi50aXRsZSB7DQogIGNvbG9yOiAjMWI1NDYzOw0KICBmb250LXNpemU6IDM2cHg7DQp9DQoNCg0KLnBlcnNvbmVyIHsNCiAgYm94LXNoYWRvdzogM3B4IDNweCA0cHggYmxhY2s7DQogIGJhY2tncm91bmQ6ICMwMDQ0NTk7DQogIHBhZGRpbmctcmlnaHQ6IDE1cHg7DQogIHBhZGRpbmctbGVmdDogMTZweDsNCiAgcGFkZGluZy10b3A6IDAuMXB4Ow0KICBwYWRkaW5nLWJvdHRvbTogMXB4Ow0KICBmb250LXNpemU6IDExcHg7DQogIGNvbG9yOiB3aGl0ZTsNCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCn0NCg0KLsO4a29ub21pIHsNCiAgYm94LXNoYWRvdzogM3B4IDNweCA0cHggYmxhY2s7DQogIGJhY2tncm91bmQ6ICMwMDdGOTk7DQogIHBhZGRpbmctcmlnaHQ6IDE1cHg7DQogIHBhZGRpbmctbGVmdDogMTZweDsNCiAgcGFkZGluZy10b3A6IDFweDsNCiAgcGFkZGluZy1ib3R0b206IDAuMXB4Ow0KICBmb250LXNpemU6IDExcHg7DQogIGNvbG9yOiB3aGl0ZTsNCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCn0NCg0KLnR2w6ZyZ8OlZW5kZSB7DQogIGJveC1zaGFkb3c6IDNweCAzcHggNHB4IGJsYWNrOw0KICBiYWNrZ3JvdW5kOiAjZmFhNDFhOw0KICBwYWRkaW5nLXJpZ2h0OiAxNXB4Ow0KICBwYWRkaW5nLWxlZnQ6IDE2cHg7DQogIHBhZGRpbmctdG9wOiAwLjFweDsNCiAgcGFkZGluZy1ib3R0b206IDFweDsNCiAgZm9udC1zaXplOiAxMXB4Ow0KICBjb2xvcjogd2hpdGU7DQogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7DQp9DQoNCi5jb250YWluZXIgew0KICB3aWR0aDogaW5oZXJpdDsNCn0NCg0KLnNjcm9sbC0xMDAgew0KICBtYXgtaGVpZ2h0OiAxMDA7DQogIG92ZXJmbG93LXk6IGF1dG87DQogIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7DQp9DQoNCg0KcHJlIHsNCiAgbWF4LWhlaWdodDogMzAwcHg7DQogIG92ZXJmbG93LXk6IGF1dG87DQp9DQoNCnByZVtjbGFzc10gew0KICBtYXgtaGVpZ2h0OiAzMDBweDsNCn0NCg0KYGBgDQoNCjxicj4NCjxicj4NCg0KPGNlbnRlcj4NCg0KLS0tDQogDQojIFtgciB0eHQkVUQkdGl0bGVbbGFuZ3VhZ2VdYF17LnRpdGxlfQ0KIA0KLS0tDQo8L2NlbnRlcj4NCg0KPGRldGFpbHM+IDxzdW1tYXJ5PiBgciB0eHQkVUQkc3ViMVtsYW5ndWFnZV1gIDwvc3VtbWFyeT4gDQo8YnI+DQoNCjxidXR0b24gY2xhc3M9ImFjY29yZGlvbiI+IGByIHBhc3RlMCgiKipUYWJlbCAxOiAqKiIsIHN0YXRnbF9tZXRhKHN0YXRnbF91cmwoIlVEWElTQ1BST0YiLCBsYW5nID0gbGFuZ3VhZ2UpKVsxXSR0aXRsZSkgYCA8L2J1dHRvbj4gPGRpdiBjbGFzcz0icGFuZWwiPg0KDQpgYGB7ciBVRFhJU0NQUk9GfQ0KDQpVRFhJU0NQUk9GX3JhdyA8LSANCiAgc3RhdGdsX3VybCgiVURYSVNDUFJPRiIsIGxhbmcgPSBsYW5ndWFnZSkgfD4gDQogIHN0YXRnbF9mZXRjaCgNCiAgICAicGxhY2Ugb2YgYmlydGgiICAgICA9IHB4X2FsbCgpLA0KICAgIGBsZXZlbCBvZiBlZHVjYXRpb25gID0gcHhfYWxsKCksDQogICAgdGltZSAgICAgICAgICAgICAgICAgPSBweF90b3AoKSwNCiAgICAuY29sX2NvZGUgICAgICAgICAgICA9IFQNCiAgKSB8PiANCiAgYXNfdGliYmxlKCkNCg0KVURYSVNDUFJPRiA8LSANCiAgVURYSVNDUFJPRl9yYXcgfD4gDQogIHNlbGVjdCgtdGltZSkgfD4gDQogIG11dGF0ZShgbGV2ZWwgb2YgZWR1Y2F0aW9uYCA9IGBsZXZlbCBvZiBlZHVjYXRpb25gIHw+IGZjdF9pbm9yZGVyKCkpIHw+IA0KICBzcHJlYWQoYHBsYWNlIG9mIGJpcnRoYCwgdmFsdWUpDQoNClVEWElTQ1BST0YgfD4gDQogIHJlbmFtZSgiICIgPSAxKSB8PiANCiAgc3RhdGdsX3RhYmxlKCkgfD4gDQogIHJvd19zcGVjKDEsIGJvbGQgPSBUKQ0KDQpgYGANCjxicj4NClshW10oYHIgbG9nb2Ape3dpZHRoPTQwfWByIHBhc3RlKHNvdXJjZSwgIlVEWElTQ1BST0YiKWBdKGByIHBhc3RlMCgiaHR0cHM6Ly9iYW5rLnN0YXQuZ2w6NDQzL3NxLzE3NmVhYTQxLTBiMDAtNGNjNC1iOGEzLTA4MmY5NWM0OWUwMiIsIG9wdGlvbilgKXt0YXJnZXQ9Il9ibGFuayJ9DQo8L2Rpdj4NCg0KPGJ1dHRvbiBjbGFzcz0iYWNjb3JkaW9uIj4gYHIgcGFzdGUwKCIqKlRhYmVsIDI6ICoqIiwgc3RhdGdsX21ldGEoc3RhdGdsX3VybCgiVURYVU1HMyIsIGxhbmcgPSBsYW5ndWFnZSkpWzFdJHRpdGxlKSBgIDwvYnV0dG9uPiA8ZGl2IGNsYXNzPSJwYW5lbCI+DQoNCmBgYHtyIFVEWFVNRzN9DQoNClVEWFVNRzNfcmF3IDwtIA0KICBzdGF0Z2xfdXJsKCJVRFhVTUczIiwgbGFuZyA9IGxhbmd1YWdlKSB8PiANCiAgc3RhdGdsX2ZldGNoKA0KICAgIHJlZ2lzdHJlcmluZyA9IHB4X2FsbCgpLA0KICAgIEhGVSAgICAgICAgICA9IHB4X2FsbCgpLA0KICAgIGFhciAgICAgICAgICA9IHB4X3RvcCgpLA0KICAgIC5jb2xfY29kZSAgICA9IFQNCiAgKSB8PiANCiAgYXNfdGliYmxlKCkNCg0KVURYVU1HMyA8LSANCiAgVURYVU1HM19yYXcgfD4gDQogIG11dGF0ZShIRlUgPSBIRlUgfD4gZmN0X2lub3JkZXIoKSB8PiAgZmN0X3JldigpKSB8Pg0KICBzZWxlY3QoYWFyLCByZWdpc3RyZXJpbmcsIEhGVSwgdmFsdWUpIHw+IA0KICBzcHJlYWQoSEZVLCB2YWx1ZSkNCg0KVURYVU1HMyB8PiANCiAgc2VsZWN0KC0xKSB8PiANCiAgcmVuYW1lKCIgIiA9IDEpIHw+IA0KICBzdGF0Z2xfdGFibGUoKSB8PiANCiAgcm93X3NwZWMoMSwgYm9sZCA9IFQpIHw+IA0KICBjb2x1bW5fc3BlYygyLCBib2xkID0gVCkNCg0KYGBgDQo8YnI+DQpbIVtdKGByIGxvZ29gKXt3aWR0aD00MH1gciBwYXN0ZShzb3VyY2UsICJVRFhVTUczIilgXShgciBwYXN0ZTAoImh0dHBzOi8vYmFuay5zdGF0LmdsOjQ0My9zcS8xNTAyMDM4Ni1kODIzLTRlMzEtYmZiNC0xNTBlYjkxZDA4NWEiLCBvcHRpb24pYCl7dGFyZ2V0PSJfYmxhbmsifQ0KPC9kaXY+DQoNCjwvZGV0YWlscz4NCg0KPGRldGFpbHM+IDxzdW1tYXJ5PiBgciB0eHQkVUQkc3ViMltsYW5ndWFnZV1gIDwvc3VtbWFyeT4gDQo8YnI+DQoNCjxidXR0b24gY2xhc3M9ImFjY29yZGlvbiI+IGByIHBhc3RlMCgiKipUYWJlbCAzOiAqKiIsIHN0YXRnbF9tZXRhKHN0YXRnbF91cmwoIlVEWEVTRyIsIGxhbmcgPSBsYW5ndWFnZSkpWzFdJHRpdGxlKSBgIDwvYnV0dG9uPiA8ZGl2IGNsYXNzPSJwYW5lbCI+DQoNCmBgYHtyIFVEWEVTR30NCg0KVURYRVNHX3JhdyA8LSANCiAgc3RhdGdsX3VybCgiVURYRVNHIiwgbGFuZyA9IGxhbmd1YWdlKSB8PiANCiAgc3RhdGdsX2ZldGNoKA0KICAgIHVuaXQgICAgICAgICAgICAgICAgICA9ICJBbmRlbCIsDQogICAgc2V4ICAgICAgICAgICAgICAgICAgID0gcHhfYWxsKCksDQogICAgYGNvbnRpbnVhdGlvbiBzY2hvb2xgID0gcHhfYWxsKCksDQogICAgc3RhdHVzICAgICAgICAgICAgICAgID0gcHhfYWxsKCksDQogICAgYHNjaG9vbCB5ZWFyYCAgICAgICAgID0gcHhfYWxsKCksDQogICAgLmNvbF9jb2RlICAgICAgICAgICAgID0gVA0KICApIHw+IA0KICBhc190aWJibGUoKQ0KDQoNClVEWEVTRyA8LSANCiAgVURYRVNHX3JhdyB8PiANCiAgZmlsdGVyKGBzY2hvb2wgeWVhcmAgPT0gbWF4KGBzY2hvb2wgeWVhcmApKSB8PiANCiAgbXV0YXRlKGBjb250aW51YXRpb24gc2Nob29sYCA9IGBjb250aW51YXRpb24gc2Nob29sYCB8PiBmY3RfaW5vcmRlcigpIHw+IGZjdF9yZXYoKSwNCiAgICAgICAgIHNleCA9IHNleCB8PiBmY3RfaW5vcmRlcigpIHw+IGZjdF9yZXYoKSkgfD4gDQogIHVuaXRlKGNvbWJpLCB1bml0LCBgc2Nob29sIHllYXJgLCBzZXAgPSAiLSIpDQoNClVEWEVTRyB8PiANCiAgc2VsZWN0KC1jb21iaSkgfD4gDQogIHNwcmVhZChgY29udGludWF0aW9uIHNjaG9vbGAsIHZhbHVlKSB8PiANCiAgcmVuYW1lKCIgIiA9IDEpIHw+IA0KICBzdGF0Z2xfdGFibGUoKSB8PiANCiAgcm93X3NwZWMoMTozLCBib2xkID0gVCkgfD4gDQogIGNvbHVtbl9zcGVjKDMsIGJvbGQgPSBUKSB8PiANCiAgYWRkX2Zvb3Rub3RlKFVEWEVTR1tbMV1dWzFdLCBub3RhdGlvbiA9ICJzeW1ib2wiKQ0KDQpgYGANCjxicj4NClshW10oYHIgbG9nb2Ape3dpZHRoPTQwfWByIHBhc3RlKHNvdXJjZSwgIlVEWEVTRyIpYF0oYHIgcGFzdGUwKCJodHRwczovL2Jhbmsuc3RhdC5nbDo0NDMvc3EvNjNmYTFmMjAtNzkzMi00YzdhLTg2ZTMtYmY2ZmY1OWRiN2QzIiwgb3B0aW9uKWApe3RhcmdldD0iX2JsYW5rIn0NCjwvZGl2Pg0KDQoNCjxidXR0b24gY2xhc3M9ImFjY29yZGlvbiI+IGByIHBhc3RlMCgiKipUYWJlbCA0OiAqKiIsIHN0YXRnbF9tZXRhKHN0YXRnbF91cmwoIlVEWFRLSyIsIGxhbmcgPSBsYW5ndWFnZSkpWzFdJHRpdGxlKSBgIDwvYnV0dG9uPiA8ZGl2IGNsYXNzPSJwYW5lbCI+DQpgYGB7ciBVRFhUS0t9DQoNClVEWFRLS19yYXcgPC0gDQogIHN0YXRnbF91cmwoIlVEWFRLSyIsIGxhbmcgPSBsYW5ndWFnZSkgfD4gDQogIHN0YXRnbF9mZXRjaCgNCiAgICBzdWJqZWN0ICAgICAgPSBweF9hbGwoKSwNCiAgICBncmFkZSAgICAgICAgPSBweF9hbGwoKSwNCiAgICBtdW5pY2lwYWxpdHkgPSBweF9hbGwoKSwNCiAgICB1bml0ICAgICAgICAgPSAiQiIsDQogICAgdGltZSAgICAgICAgID0gcHhfdG9wKCksDQogICAgLmNvbF9jb2RlICAgID0gVA0KICApIHw+IA0KICBhc190aWJibGUoKQ0KDQpVRFhUS0sgPC0gDQogIFVEWFRLS19yYXcgfD4gDQogIHVuaXRlKGNvbWJpLCB1bml0LCB0aW1lLCBzZXAgPSAiICIpIHw+DQogIG11dGF0ZShtdW5pY2lwYWxpdHkgPSBtdW5pY2lwYWxpdHkgfD4gZmN0X2lub3JkZXIoKSkgfD4gDQogIHNwcmVhZChzdWJqZWN0LCB2YWx1ZSkNCg0KVURYVEtLIHw+IA0KICBzZWxlY3QoLTMpIHw+IA0KICByZW5hbWUoIiAiID0gMSkgfD4gDQogIHN0YXRnbF90YWJsZSgpIHw+IA0KICByb3dfc3BlYyhjKDEsIDcpLCBib2xkID0gVCkgfD4gDQogIHBhY2tfcm93cyhpbmRleCA9IHRhYmxlKFVEWFRLS1tbM11dKSkNCg0KDQoNCg0KYGBgDQo8YnI+DQpbIVtdKGByIGxvZ29gKXt3aWR0aD00MH1gciBwYXN0ZShzb3VyY2UsICJVRFhUS0siKWBdKGByIHBhc3RlMCgiaHR0cHM6Ly9iYW5rLnN0YXQuZ2w6NDQzL3NxLzBiM2NlNWQzLTdlOTctNDQzZi05ODFmLWY3ZDEyM2ZjZmI0MCIsIG9wdGlvbilgKXt0YXJnZXQ9Il9ibGFuayJ9DQo8L2Rpdj4NCg0KDQo8L2RldGFpbHM+DQoNCg0KPGRldGFpbHM+IDxzdW1tYXJ5PiBgciB0eHQkVUQkc3ViM1tsYW5ndWFnZV1gIDwvc3VtbWFyeT4gDQo8YnI+DQoNCjxidXR0b24gY2xhc3M9ImFjY29yZGlvbiI+IGByIHBhc3RlMCgiKipUYWJlbCA1OiAqKiIsIHN0YXRnbF9tZXRhKHN0YXRnbF91cmwoIlVEWElTQzExQSIsIGxhbmcgPSBsYW5ndWFnZSkpWzFdJHRpdGxlKSBgIDwvYnV0dG9uPiA8ZGl2IGNsYXNzPSJwYW5lbCI+DQpgYGB7ciBVRFhJU0MxMUF9DQoNClVEWElTQzExQV9yYXcgPC0gDQogIHN0YXRnbF91cmwoIlVEWElTQzExQSIsIGxhbmcgPSBsYW5ndWFnZSkgfD4gDQogIHN0YXRnbF9mZXRjaCgNCiAgICAibGV2ZWwgb2YgZWR1Y2F0aW9uIiA9IHB4X2FsbCgpLA0KICAgIGNvdW50cnkgICAgICAgICAgICAgID0gcHhfYWxsKCksDQogICAgdGltZSAgICAgICAgICAgICAgICAgPSBweF90b3AoMSksDQogICAgLmNvbF9jb2RlICAgICAgICAgICAgPSBUDQogICkgfD4gDQogIGFzX3RpYmJsZSgpDQoNClVEWElTQzExQSA8LSANCiAgVURYSVNDMTFBX3JhdyB8PiANCiAgbXV0YXRlKHRpbWUgPSB0aW1lIHw+IGZjdF9pbm9yZGVyKCksDQogICAgICAgICBjb3VudHJ5ID0gY291bnRyeSB8PiBmY3RfaW5vcmRlcigpKSB8PiANCiAgc3ByZWFkKGNvdW50cnksIHZhbHVlKQ0KDQpVRFhJU0MxMUEgfD4gDQogIHNlbGVjdCgtdGltZSkgfD4gDQogIHJlbmFtZSgiICIgPSAxKSB8PiANCiAgc3RhdGdsX3RhYmxlKCkgfD4gDQogIHBhY2tfcm93cyhpbmRleCA9IHRhYmxlKFVEWElTQzExQVtbMl1dKSkNCg0KDQpgYGANCjxicj4NClshW10oYHIgbG9nb2Ape3dpZHRoPTQwfWByIHBhc3RlKHNvdXJjZSwgIlVEWElTQzExQSIpYF0oYHIgcGFzdGUwKCJodHRwczovL2Jhbmsuc3RhdC5nbDo0NDMvc3EvMTdlNjk1MjYtODg4NS00YTQ1LTkzNmUtMzNjNjBkY2JhOGI0Iiwgb3B0aW9uKWApe3RhcmdldD0iX2JsYW5rIn0NCjwvZGl2Pg0KDQoNCjxidXR0b24gY2xhc3M9ImFjY29yZGlvbiI+IGByIHBhc3RlMCgiKipUYWJlbCA2OiAqKiIsIHN0YXRnbF9tZXRhKHN0YXRnbF91cmwoIlVEWElTQzExTCIsIGxhbmcgPSBsYW5ndWFnZSkpWzFdJHRpdGxlKSBgIDwvYnV0dG9uPiA8ZGl2IGNsYXNzPSJwYW5lbCI+DQpgYGB7ciBVRFhJU0MxMUx9DQoNClVEWElTQzExTF9yYXcgPC0gDQogIHN0YXRnbF91cmwoIlVEWElTQzExTCIsIGxhbmcgPSBsYW5ndWFnZSkgfD4gDQogIHN0YXRnbF9mZXRjaCgNCiAgICAibnVtYmVyIG9mIHllYXJzIGFmdGVyIGVucm9sbG1lbnQiID0gMiwNCiAgICAibGV2ZWwgb2YgZWR1Y2F0aW9uIiAgICAgICAgICAgICAgID0gcHhfYWxsKCksDQogICAgc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHB4X2FsbCgpLA0KICAgIHRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBweF90b3AoMyksDQogICAgLmNvbF9jb2RlICAgICAgICAgICAgICAgICAgICAgICAgICA9IFQNCiAgKSB8PiANCiAgYXNfdGliYmxlKCkNCg0KVURYSVNDMTFMIDwtIA0KICBVRFhJU0MxMUxfcmF3IHw+IA0KICBmaWx0ZXIodmFsdWUgPiAwKSB8PiANCiAgbXV0YXRlKHN0YXR1cyA9IHN0YXR1cyB8PiBmY3RfaW5vcmRlcigpKSB8PiANCiAgc3ByZWFkKHN0YXR1cywgdmFsdWUpIHw+IA0KICB1bml0ZShjb21iaSwgYG51bWJlciBvZiB5ZWFycyBhZnRlciBlbnJvbGxtZW50YCwgdGltZSwgc2VwID0gIiAiKQ0KDQpVRFhJU0MxMUwgfD4gDQogIHNlbGVjdCgtMSkgfD4gDQogIHJlbmFtZSgiICIgPSAxKSB8PiANCiAgc3RhdGdsX3RhYmxlKCkgfD4gDQogIGFkZF9mb290bm90ZShVRFhJU0MxMUxbWzFdXVsxXSwgbm90YXRpb24gPSAic3ltYm9sIikNCg0KDQoNCmBgYA0KPGJyPg0KWyFbXShgciBsb2dvYCl7d2lkdGg9NDB9YHIgcGFzdGUoc291cmNlLCAiVURYSVNDMTFMIilgXShgciBwYXN0ZTAoImh0dHBzOi8vYmFuay5zdGF0LmdsOjQ0My9zcS9lNGIwNzZlOC1mNzAyLTQ2ZDgtYmZlYy1iZWRkNTYyMWM1ZGEiLCBvcHRpb24pYCl7dGFyZ2V0PSJfYmxhbmsifQ0KPC9kaXY+DQoNCjwvZGV0YWlscz4NCg0KDQoNCjxkZXRhaWxzPiA8c3VtbWFyeT4gYHIgdHh0JFVEJHN1YjRbbGFuZ3VhZ2VdYCA8L3N1bW1hcnk+IA0KPGJyPg0KDQo8YnV0dG9uIGNsYXNzPSJhY2NvcmRpb24iPiBgciBwYXN0ZTAoIioqVGFiZWwgNzogKioiLCBzdGF0Z2xfbWV0YShzdGF0Z2xfdXJsKCJVRFhUUkZBMSIsIGxhbmcgPSBsYW5ndWFnZSkpWzFdJHRpdGxlKSBgIDwvYnV0dG9uPiA8ZGl2IGNsYXNzPSJwYW5lbCI+DQpgYGB7ciBVRFhUUkZBMX0NCg0KVURYVFJGQTFfcmF3IDwtIA0KICBzdGF0Z2xfdXJsKCJVRFhUUkZBMSIsIGxhbmcgPSBsYW5ndWFnZSkgfD4gDQogIHN0YXRnbF9mZXRjaCgNCiAgICAibnVtYmVyIG9mIHllYXJzIGFmdGVyIGxvd2VyIHNlY29uZGFyeSBlZHVjYXRpb24iID0gMCwNCiAgICAibGV2ZWwgb2YgZWR1Y2F0aW9uIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gcHhfYWxsKCksDQogICAgImVkdWNhdGlvbmFsIHN0YXR1cyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHB4X2FsbCgpLA0KICAgICJncmFkdWF0aW9uIHllYXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBweF90b3AoKSwNCiAgICAuY29sX2NvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gVA0KICApIHw+IA0KICBhc190aWJibGUoKQ0KDQpVRFhUUkZBMSA8LSANCiAgVURYVFJGQTFfcmF3IHw+IA0KICB1bml0ZShjb21iaSwgYG51bWJlciBvZiB5ZWFycyBhZnRlciBsb3dlciBzZWNvbmRhcnkgZWR1Y2F0aW9uYCwgYGdyYWR1YXRpb24geWVhcmAsIHNlcCA9ICIgIikgfD4gDQogIG11dGF0ZShgbGV2ZWwgb2YgZWR1Y2F0aW9uYCA9IGBsZXZlbCBvZiBlZHVjYXRpb25gIHw+IGZjdF9pbm9yZGVyKCksDQogICAgICAgICBgZWR1Y2F0aW9uYWwgc3RhdHVzYCA9IGBlZHVjYXRpb25hbCBzdGF0dXNgIHw+IGZjdF9pbm9yZGVyKCkpDQoNClVEWFRSRkExIHw+IA0KICBzZWxlY3QoLTEpIHw+IA0KICBzcHJlYWQoYGxldmVsIG9mIGVkdWNhdGlvbmAsIHZhbHVlKSB8PiANCiAgcmVuYW1lKCIgIiA9IDEpIHw+IA0KICBzdGF0Z2xfdGFibGUoKSB8PiANCiAgYWRkX2Zvb3Rub3RlKFVEWFRSRkExW1sxXV1bMV0sIG5vdGF0aW9uID0gInN5bWJvbCIpDQoNCg0KDQpgYGANCjxicj4NClshW10oYHIgbG9nb2Ape3dpZHRoPTQwfWByIHBhc3RlKHNvdXJjZSwgIlVEWFRSRkExIilgXShgciBwYXN0ZTAoImh0dHBzOi8vYmFuay5zdGF0LmdsOjQ0My9zcS83ZWExNTZkZC01OWIxLTQxZTYtOWExMS05NGZmYzkxNTM4ZDIiLCBvcHRpb24pYCl7dGFyZ2V0PSJfYmxhbmsifQ0KPC9kaXY+DQoNCjwvZGV0YWlscz4NCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQo8aHIgc3R5bGU9ImJvcmRlcjoxcHggcmlkZ2UgbGlnaHRncmF5Ij4gPC9ocj4NCjxjZW50ZXI+IDxzcGFuIHN0eWxlPSdjb2xvcjojRDNEM0QzOyBmb250LXNpemU6OTAlOyc+IGByIHBhc3RlKHR4dCR1cGRhdGVbbGFuZ3VhZ2VdLCBmb3JtYXQoU3lzLkRhdGUoKSwgIiVkLiAlQiAlWSIpKWAgPC9zcGFuPiA8L2NlbnRlcj4NCg0KDQoNCg0KPHNjcmlwdD4NCnZhciBhY2MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJhY2NvcmRpb24iKTsNCnZhciBpOw0KDQpmb3IgKGkgPSAwOyBpIDwgYWNjLmxlbmd0aDsgaSsrKSB7DQogIGFjY1tpXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGZ1bmN0aW9uKCkgew0KICAgIHRoaXMuY2xhc3NMaXN0LnRvZ2dsZSgiYWN0aXZlIik7DQogICAgdmFyIHBhbmVsID0gdGhpcy5uZXh0RWxlbWVudFNpYmxpbmc7DQogICAgaWYgKHBhbmVsLnN0eWxlLm1heEhlaWdodCkgew0KICAgICAgcGFuZWwuc3R5bGUubWF4SGVpZ2h0ID0gbnVsbDsNCiAgICB9IGVsc2Ugew0KICAgICAgcGFuZWwuc3R5bGUubWF4SGVpZ2h0ID0gcGFuZWwuc2Nyb2xsSGVpZ2h0ICsgInB4IjsNCiAgICB9IA0KICB9KTsNCn0NCjwvc2NyaXB0Pg0KDQoNCg0KDQoNCg0K