Uddannelse


Befolkningens uddannelsesstatus


UDXISCPROF_raw <- 
  statgl_url("UDXISCPROF", lang = language) |> 
  statgl_fetch(
    Fsted         = px_all(),
    ISCED11_level = px_all(),
    Aar           = px_top(),
    .col_code     = T
  ) |> 
  as_tibble()

UDXISCPROF <- 
  UDXISCPROF_raw |> 
  select(-Aar) |> 
  mutate(ISCED11_level = ISCED11_level |> fct_inorder()) |> 
  spread(Fsted, value)

UDXISCPROF |> 
  rename(" " = 1) |> 
  statgl_table() |> 
  row_spec(1, bold = T)
I Grønland Udenfor Grønland
I alt 36.905 5.947
Grundskole 10. klasses niveau 21.586 2.741
Gymnasial uddannelse 2.083 298
Erhvervsuddannelse 7.871 962
Suppleringskurser 1.409 32
Kort videregående uddannelse 1.051 306
Bacheloruddannelse 247 121
Professionsbacheloruddannelse 2.199 651
Kandidatuddannelse 443 788
Phd. og forskeruddannelse 16 48


Se Statistikbankens tabel: 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)
I alt Uden afsluttet uddannelse Med afsluttet videregående uddannelse Med afsluttet erhvervsuddannelse Med afsluttet gymnasial uddannelse
Efterskole 266 266 0 0 0
Erhvervsuddannelse 440 360 8 11 61
Gymnasial uddannelse 948 926 0 8 14
I alt 7.323 5.850 112 379 982
I beskæftigelse 3.048 2.211 63 285 489
Ikke i uddannelse eller beskæftigelse 2.235 2.038 8 54 135
Videregående uddannelse 386 49 33 21 283


Se Statistikbankens tabel: UDXUMG3

Grundskolen


UDXESG_raw <- 
  statgl_url("UDXESG", lang = language) |> 
  statgl_fetch(
    unit       = "andel",
    sex        = px_all(),
    efterskole = px_all(),
    status     = px_all(),
    skoleaar   = px_all(),
    .col_code  = T
  ) |> 
  as_tibble()


UDXESG <- 
  UDXESG_raw |> 
  filter(skoleaar == max(skoleaar)) |> 
  mutate(efterskole = efterskole |> fct_inorder() |> fct_rev(),
         sex = sex |> fct_inorder() |> fct_rev()) |> 
  unite(combi, unit, skoleaar, sep = "-")

UDXESG |> 
  select(-combi) |> 
  spread(efterskole, value) |> 
  select(sex, status, 3:6) |> 
  arrange(sex, desc(status)) |> 
  rename(" " = 1) |> 
  statgl_table() |> 
  row_spec(1:3, bold = T) |> 
  column_spec(3, bold = T) |> 
  add_footnote(UDXESG[[1]][1], notation = "symbol")
status I alt Danske efterskoler Maniitsumi Efterskoli Efterskole Villads Villadsen
I alt Påbegyndte i alt 100 100 100 100
I alt Gennemført 63 75 28 49
I alt Afbrudt 37 25 72 51
Piger Påbegyndte i alt 100 100 100 100
Piger Gennemført 60 69 21 57
Piger Afbrudt 40 31 79 43
Drenge Påbegyndte i alt 100 100 100 100
Drenge Gennemført 66 80 33 38
Drenge Afbrudt 34 20 67 62
* andel i procent-2023/2024


Se Statistikbankens tabel: 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 Dansk Engelsk Grønlandsk Matematik
Løsningssikkerhed (pct. rigtige) 2024
  1. klasse
I alt 41 NA 45 49
  1. klasse
Kommune Kujalleq 30 NA 38 43
  1. klasse
Kommuneqarfik Sermersooq 48 NA 43 44
  1. klasse
Qeqqata Kommunia 51 NA 59 63
  1. klasse
Kommune Qeqertalik 36 NA 51 51
  1. klasse
Avannaata Kommunia 41 NA 48 49
  1. klasse
I alt 42 84 56 40
  1. klasse
Kommune Kujalleq 36 53 49 34
  1. klasse
Kommuneqarfik Sermersooq 48 88 48 41
  1. klasse
Qeqqata Kommunia 42 88 64 40
  1. klasse
Kommune Qeqertalik 45 78 66 34
  1. klasse
Avannaata Kommunia 40 84 59 39

Se Statistikbankens tabel: UDXTKK
Ungdoms- og videregående uddannelser


UDXISC11A_raw <- 
  statgl_url("UDXISC11A", lang = language) |> 
  statgl_fetch(
    Isced     = px_all(),
    skoleomr  = px_all(),
    startaar  = px_top(1),
    .col_code = T
  ) |> 
  as_tibble()

UDXISC11A <- 
  UDXISC11A_raw |> 
  mutate(startaar = startaar |> fct_inorder(),
         skoleomr = skoleomr |> fct_inorder()) |> 
  spread(skoleomr, value)

UDXISC11A |> 
  select(-startaar) |> 
  rename(" " = 1) |> 
  statgl_table() |> 
  pack_rows(index = table(UDXISC11A[[2]]))
Skoler i Grønland Skoler i Danmark Skoler i udlandet
2024
Bacheloruddannelse 101 48 2
Erhvervsuddannelse 601 73 0
Gymnasial uddannelse 471 39 2
Kandidatuddannelse 28 21 2
Kort videregående uddannelse 70 26 0
Professionsbacheloruddannelse 135 80 0
Suppleringskurser 123 2 1


Se Statistikbankens tabel: UDXISC11A

UDXISC11L_raw <- 
  statgl_url("UDXISC11L", lang = language) |> 
  statgl_fetch(
    aar       = 2,
    isced     = px_all(),
    status    = px_all(),
    startaar  = px_top(3),
    .col_code = T
  ) |> 
  as_tibble()

UDXISC11L <- 
  UDXISC11L_raw |> 
  filter(value > 0) |> 
  mutate(status = status |> fct_inorder()) |> 
  spread(status, value) |> 
  unite(combi, aar, startaar, sep = " ")

UDXISC11L |> 
  select(-1) |> 
  rename(" " = 1) |> 
  statgl_table() |> 
  add_footnote(UDXISC11L[[1]][1], notation = "symbol")
Aktiv Gennemført Afbrudt Nye påbegyndte i alt
Bacheloruddannelse 57 1 73 131
Erhvervsuddannelse, almen 135 68 265 468
Erhvervsuddannelse, kort 8 135 98 241
Gymnasial uddannelse 200 6 153 359
Kandidatuddannelse 20 12 12 44
Kort videregående uddannelse 8 51 50 109
Professionsbacheloruddannelse 104 13 94 211
* 2 år 2022


Se Statistikbankens tabel: UDXISC11L

Uddannelsesforløb


UDXTRFA1_raw <- 
  statgl_url("UDXTRFA1", lang = language) |> 
  statgl_fetch(
    aar       = 0,
    isced     = px_all(),
    status    = px_all(),
    dim_aar   = px_top(),
    .col_code = T
  ) |> 
  as_tibble()

UDXTRFA1 <- 
  UDXTRFA1_raw |> 
  unite(combi, aar, dim_aar, sep = " ") |> 
  mutate(isced = isced |> fct_inorder(),
         status = status |> fct_inorder())

UDXTRFA1 |> 
  select(-1) |> 
  spread(isced, value) |> 
  rename(" " = 1) |> 
  statgl_table() |> 
  add_footnote(UDXTRFA1[[1]][1], notation = "symbol")
Gymnasial uddannelse Erhvervsuddannelse Ingen registrering
Aktiv 69 6 0
Gennemført 0 0 0
Afbrudt 11 0 0
Ej påbegyndt 0 0 621
* Direkte 2024


Se Statistikbankens tabel: UDXTRFA1


Sidst opdateret: 22. juni 2025
LS0tDQpwYXJhbXM6DQogIGxhbmc6ICJkYSINCm91dHB1dDoNCiAgc3RhdGdsOjpzdGF0Z2xfcmVwb3J0Og0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCmVkaXRvcl9vcHRpb25zOiANCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGNvbnNvbGUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KCWVjaG8gICAgPSBUUlVFLA0KCW1lc3NhZ2UgPSBGQUxTRSwNCgl3YXJuaW5nID0gRkFMU0UsDQoJY2xhc3Mub3V0cHV0ID0gInNjcm9sbC0xMDAiDQopDQoNCmxpYnJhcnkoInRpZHl2ZXJzZSIpDQpsaWJyYXJ5KCJzdGF0Z2wiKQ0KbGlicmFyeSgia2FibGVFeHRyYSIpDQpsaWJyYXJ5KCJsdWJyaWRhdGUiKQ0KbGlicmFyeSgieWFtbCIpDQoNCmxhbmd1YWdlICA8LSBwYXJhbXMkbGFuZw0Kb3B0aW9uICAgIDwtIHBhc3RlMCgiP2xhbmc9IiwgbGFuZ3VhZ2UsICImc2VsZWN0IikNCmxvZ28gICAgICA8LSBwYXN0ZTAoZ2V0d2QoKSwiL2FkZC9sb2dvLmdpZiIpDQp0eHQgICAgICAgPC0gcmVhZF95YW1sKHBhc3RlMChnZXR3ZCgpLCAiL2FkZC90eHQueW1sIiksIGZpbGVFbmNvZGluZyA9ICJJU08tODg1OS0xIikNCnNvdXJjZSAgICA8LSB0eHQkc291cmNlW2xhbmd1YWdlXSAlPiUgdW5saXN0KCkNCg0KeGFyaW5nYW5FeHRyYTo6dXNlX2NsaXBib2FyZCgpDQoNCmBgYA0KDQpgYGB7Y3NzLCBlY2hvID0gRkFMU0V9DQoNCi5hY2NvcmRpb24gew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTE5OTAwOw0KICBjb2xvcjogd2hpdGU7DQogIGN1cnNvcjogcG9pbnRlcjsNCiAgcGFkZGluZzogMThweDsNCiAgd2lkdGg6IDEwMCU7DQogIGJvcmRlcjogbm9uZTsNCiAgYm9yZGVyLXJhZGl1czogNXB4Ow0KICB0ZXh0LWFsaWduOiBsZWZ0Ow0KICBvdXRsaW5lOiBub25lOw0KICBmb250LXNpemU6IDE1cHg7DQogIHRyYW5zaXRpb246IDAuNHM7DQp9DQoNCi5hY3RpdmUsIC5hY2NvcmRpb246aG92ZXIgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjk3MjQyOw0KfQ0KDQouYWNjb3JkaW9uOmFmdGVyIHsNCiAgY29udGVudDogJ1wwMDJCJzsNCiAgY29sb3I6ICM3Nzc7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmbG9hdDogcmlnaHQ7DQogIG1hcmdpbi1sZWZ0OiA1cHg7DQp9DQoNCi5hY3RpdmU6YWZ0ZXIgew0KICBjb250ZW50OiAiXDIyMTIiOw0KfQ0KDQoucGFuZWwgew0KICBwYWRkaW5nOiAwcHggNXB4IDBweCA1cHg7DQogIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOw0KICBtYXgtaGVpZ2h0OiAwOw0KICBvdmVyZmxvdzogaGlkZGVuOw0KICB0cmFuc2l0aW9uOiBtYXgtaGVpZ2h0IDAuMnMgZWFzZS1vdXQ7DQp9DQoNCmRldGFpbHMgew0KICB3aWR0aDogMTAwJTsNCn0NCg0KZGV0YWlscyA+IHN1bW1hcnkgew0KICBwYWRkaW5nOiA0cHggMTJweDsNCiAgd2lkdGg6IDEwMCU7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMDdmOTk7DQogIGJvcmRlcjogc29saWQ7DQogIGJvcmRlci1jb2xvcjogd2hpdGU7DQogIGJvcmRlci1yYWRpdXM6IDVweDsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICBmb250LXNpemU6IDE1cHg7DQogIGNvbG9yOiB3aGl0ZTsNCn0NCg0KZGV0YWlsc1tvcGVuXSA+IHN1bW1hcnkgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFhNDFhOw0KfQ0KDQoNCi50aXRsZSB7DQogIGNvbG9yOiAjMWI1NDYzOw0KICBmb250LXNpemU6IDM2cHg7DQp9DQoNCg0KLnBlcnNvbmVyIHsNCiAgYm94LXNoYWRvdzogM3B4IDNweCA0cHggYmxhY2s7DQogIGJhY2tncm91bmQ6ICMwMDQ0NTk7DQogIHBhZGRpbmctcmlnaHQ6IDE1cHg7DQogIHBhZGRpbmctbGVmdDogMTZweDsNCiAgcGFkZGluZy10b3A6IDAuMXB4Ow0KICBwYWRkaW5nLWJvdHRvbTogMXB4Ow0KICBmb250LXNpemU6IDExcHg7DQogIGNvbG9yOiB3aGl0ZTsNCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCn0NCg0KLsO4a29ub21pIHsNCiAgYm94LXNoYWRvdzogM3B4IDNweCA0cHggYmxhY2s7DQogIGJhY2tncm91bmQ6ICMwMDdGOTk7DQogIHBhZGRpbmctcmlnaHQ6IDE1cHg7DQogIHBhZGRpbmctbGVmdDogMTZweDsNCiAgcGFkZGluZy10b3A6IDFweDsNCiAgcGFkZGluZy1ib3R0b206IDAuMXB4Ow0KICBmb250LXNpemU6IDExcHg7DQogIGNvbG9yOiB3aGl0ZTsNCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCn0NCg0KLnR2w6ZyZ8OlZW5kZSB7DQogIGJveC1zaGFkb3c6IDNweCAzcHggNHB4IGJsYWNrOw0KICBiYWNrZ3JvdW5kOiAjZmFhNDFhOw0KICBwYWRkaW5nLXJpZ2h0OiAxNXB4Ow0KICBwYWRkaW5nLWxlZnQ6IDE2cHg7DQogIHBhZGRpbmctdG9wOiAwLjFweDsNCiAgcGFkZGluZy1ib3R0b206IDFweDsNCiAgZm9udC1zaXplOiAxMXB4Ow0KICBjb2xvcjogd2hpdGU7DQogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7DQp9DQoNCi5jb250YWluZXIgew0KICB3aWR0aDogaW5oZXJpdDsNCn0NCg0KLnNjcm9sbC0xMDAgew0KICBtYXgtaGVpZ2h0OiAxMDA7DQogIG92ZXJmbG93LXk6IGF1dG87DQogIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7DQp9DQoNCg0KcHJlIHsNCiAgbWF4LWhlaWdodDogMzAwcHg7DQogIG92ZXJmbG93LXk6IGF1dG87DQp9DQoNCnByZVtjbGFzc10gew0KICBtYXgtaGVpZ2h0OiAzMDBweDsNCn0NCg0KYGBgDQoNCjxicj4NCjxicj4NCg0KPGNlbnRlcj4NCg0KLS0tDQogDQojIFtgciB0eHQkVUQkdGl0bGVbbGFuZ3VhZ2VdYF17LnRpdGxlfQ0KIA0KLS0tDQo8L2NlbnRlcj4NCg0KPGRldGFpbHM+IDxzdW1tYXJ5PiBgciB0eHQkVUQkc3ViMVtsYW5ndWFnZV1gIDwvc3VtbWFyeT4gDQo8YnI+DQoNCjxidXR0b24gY2xhc3M9ImFjY29yZGlvbiI+IGByIHBhc3RlMCgiKipUYWJlbCAxOiAqKiIsIHN0YXRnbF9tZXRhKHN0YXRnbF91cmwoIlVEWElTQ1BST0YiLCBsYW5nID0gbGFuZ3VhZ2UpKVsxXSR0aXRsZSkgYCA8L2J1dHRvbj4gPGRpdiBjbGFzcz0icGFuZWwiPg0KDQpgYGB7ciBVRFhJU0NQUk9GfQ0KDQpVRFhJU0NQUk9GX3JhdyA8LSANCiAgc3RhdGdsX3VybCgiVURYSVNDUFJPRiIsIGxhbmcgPSBsYW5ndWFnZSkgfD4gDQogIHN0YXRnbF9mZXRjaCgNCiAgICBGc3RlZCAgICAgICAgID0gcHhfYWxsKCksDQogICAgSVNDRUQxMV9sZXZlbCA9IHB4X2FsbCgpLA0KICAgIEFhciAgICAgICAgICAgPSBweF90b3AoKSwNCiAgICAuY29sX2NvZGUgICAgID0gVA0KICApIHw+IA0KICBhc190aWJibGUoKQ0KDQpVRFhJU0NQUk9GIDwtIA0KICBVRFhJU0NQUk9GX3JhdyB8PiANCiAgc2VsZWN0KC1BYXIpIHw+IA0KICBtdXRhdGUoSVNDRUQxMV9sZXZlbCA9IElTQ0VEMTFfbGV2ZWwgfD4gZmN0X2lub3JkZXIoKSkgfD4gDQogIHNwcmVhZChGc3RlZCwgdmFsdWUpDQoNClVEWElTQ1BST0YgfD4gDQogIHJlbmFtZSgiICIgPSAxKSB8PiANCiAgc3RhdGdsX3RhYmxlKCkgfD4gDQogIHJvd19zcGVjKDEsIGJvbGQgPSBUKQ0KDQpgYGANCjxicj4NClshW10oYHIgbG9nb2Ape3dpZHRoPTQwfWByIHBhc3RlKHNvdXJjZSwgIlVEWElTQ1BST0YiKWBdKGByIHBhc3RlMCgiaHR0cHM6Ly9iYW5rLnN0YXQuZ2w6NDQzL3NxLzE3NmVhYTQxLTBiMDAtNGNjNC1iOGEzLTA4MmY5NWM0OWUwMiIsIG9wdGlvbilgKXt0YXJnZXQ9Il9ibGFuayJ9DQo8L2Rpdj4NCg0KPGJ1dHRvbiBjbGFzcz0iYWNjb3JkaW9uIj4gYHIgcGFzdGUwKCIqKlRhYmVsIDI6ICoqIiwgc3RhdGdsX21ldGEoc3RhdGdsX3VybCgiVURYVU1HMyIsIGxhbmcgPSBsYW5ndWFnZSkpWzFdJHRpdGxlKSBgIDwvYnV0dG9uPiA8ZGl2IGNsYXNzPSJwYW5lbCI+DQoNCmBgYHtyIFVEWFVNRzN9DQoNClVEWFVNRzNfcmF3IDwtIA0KICBzdGF0Z2xfdXJsKCJVRFhVTUczIiwgbGFuZyA9IGxhbmd1YWdlKSB8PiANCiAgc3RhdGdsX2ZldGNoKA0KICAgIHJlZ2lzdHJlcmluZyA9IHB4X2FsbCgpLA0KICAgIEhGVSAgICAgICAgICA9IHB4X2FsbCgpLA0KICAgIGFhciAgICAgICAgICA9IHB4X3RvcCgpLA0KICAgIC5jb2xfY29kZSAgICA9IFQNCiAgKSB8PiANCiAgYXNfdGliYmxlKCkNCg0KVURYVU1HMyA8LSANCiAgVURYVU1HM19yYXcgfD4gDQogIG11dGF0ZShIRlUgPSBIRlUgfD4gZmN0X2lub3JkZXIoKSB8PiAgZmN0X3JldigpKSB8Pg0KICBzZWxlY3QoYWFyLCByZWdpc3RyZXJpbmcsIEhGVSwgdmFsdWUpIHw+IA0KICBzcHJlYWQoSEZVLCB2YWx1ZSkNCg0KVURYVU1HMyB8PiANCiAgc2VsZWN0KC0xKSB8PiANCiAgcmVuYW1lKCIgIiA9IDEpIHw+IA0KICBzdGF0Z2xfdGFibGUoKSB8PiANCiAgcm93X3NwZWMoMSwgYm9sZCA9IFQpIHw+IA0KICBjb2x1bW5fc3BlYygyLCBib2xkID0gVCkNCg0KYGBgDQo8YnI+DQpbIVtdKGByIGxvZ29gKXt3aWR0aD00MH1gciBwYXN0ZShzb3VyY2UsICJVRFhVTUczIilgXShgciBwYXN0ZTAoImh0dHBzOi8vYmFuay5zdGF0LmdsOjQ0My9zcS8xNTAyMDM4Ni1kODIzLTRlMzEtYmZiNC0xNTBlYjkxZDA4NWEiLCBvcHRpb24pYCl7dGFyZ2V0PSJfYmxhbmsifQ0KPC9kaXY+DQoNCjwvZGV0YWlscz4NCg0KPGRldGFpbHM+IDxzdW1tYXJ5PiBgciB0eHQkVUQkc3ViMltsYW5ndWFnZV1gIDwvc3VtbWFyeT4gDQo8YnI+DQoNCjxidXR0b24gY2xhc3M9ImFjY29yZGlvbiI+IGByIHBhc3RlMCgiKipUYWJlbCAzOiAqKiIsIHN0YXRnbF9tZXRhKHN0YXRnbF91cmwoIlVEWEVTRyIsIGxhbmcgPSBsYW5ndWFnZSkpWzFdJHRpdGxlKSBgIDwvYnV0dG9uPiA8ZGl2IGNsYXNzPSJwYW5lbCI+DQoNCmBgYHtyIFVEWEVTR30NCg0KVURYRVNHX3JhdyA8LSANCiAgc3RhdGdsX3VybCgiVURYRVNHIiwgbGFuZyA9IGxhbmd1YWdlKSB8PiANCiAgc3RhdGdsX2ZldGNoKA0KICAgIHVuaXQgICAgICAgPSAiYW5kZWwiLA0KICAgIHNleCAgICAgICAgPSBweF9hbGwoKSwNCiAgICBlZnRlcnNrb2xlID0gcHhfYWxsKCksDQogICAgc3RhdHVzICAgICA9IHB4X2FsbCgpLA0KICAgIHNrb2xlYWFyICAgPSBweF9hbGwoKSwNCiAgICAuY29sX2NvZGUgID0gVA0KICApIHw+IA0KICBhc190aWJibGUoKQ0KDQoNClVEWEVTRyA8LSANCiAgVURYRVNHX3JhdyB8PiANCiAgZmlsdGVyKHNrb2xlYWFyID09IG1heChza29sZWFhcikpIHw+IA0KICBtdXRhdGUoZWZ0ZXJza29sZSA9IGVmdGVyc2tvbGUgfD4gZmN0X2lub3JkZXIoKSB8PiBmY3RfcmV2KCksDQogICAgICAgICBzZXggPSBzZXggfD4gZmN0X2lub3JkZXIoKSB8PiBmY3RfcmV2KCkpIHw+IA0KICB1bml0ZShjb21iaSwgdW5pdCwgc2tvbGVhYXIsIHNlcCA9ICItIikNCg0KVURYRVNHIHw+IA0KICBzZWxlY3QoLWNvbWJpKSB8PiANCiAgc3ByZWFkKGVmdGVyc2tvbGUsIHZhbHVlKSB8PiANCiAgc2VsZWN0KHNleCwgc3RhdHVzLCAzOjYpIHw+IA0KICBhcnJhbmdlKHNleCwgZGVzYyhzdGF0dXMpKSB8PiANCiAgcmVuYW1lKCIgIiA9IDEpIHw+IA0KICBzdGF0Z2xfdGFibGUoKSB8PiANCiAgcm93X3NwZWMoMTozLCBib2xkID0gVCkgfD4gDQogIGNvbHVtbl9zcGVjKDMsIGJvbGQgPSBUKSB8PiANCiAgYWRkX2Zvb3Rub3RlKFVEWEVTR1tbMV1dWzFdLCBub3RhdGlvbiA9ICJzeW1ib2wiKQ0KDQpgYGANCjxicj4NClshW10oYHIgbG9nb2Ape3dpZHRoPTQwfWByIHBhc3RlKHNvdXJjZSwgIlVEWEVTRyIpYF0oYHIgcGFzdGUwKCJodHRwczovL2Jhbmsuc3RhdC5nbDo0NDMvc3EvNjNmYTFmMjAtNzkzMi00YzdhLTg2ZTMtYmY2ZmY1OWRiN2QzIiwgb3B0aW9uKWApe3RhcmdldD0iX2JsYW5rIn0NCjwvZGl2Pg0KDQoNCjxidXR0b24gY2xhc3M9ImFjY29yZGlvbiI+IGByIHBhc3RlMCgiKipUYWJlbCA0OiAqKiIsIHN0YXRnbF9tZXRhKHN0YXRnbF91cmwoIlVEWFRLSyIsIGxhbmcgPSBsYW5ndWFnZSkpWzFdJHRpdGxlKSBgIDwvYnV0dG9uPiA8ZGl2IGNsYXNzPSJwYW5lbCI+DQpgYGB7ciBVRFhUS0t9DQoNClVEWFRLS19yYXcgPC0gDQogIHN0YXRnbF91cmwoIlVEWFRLSyIsIGxhbmcgPSBsYW5ndWFnZSkgfD4gDQogIHN0YXRnbF9mZXRjaCgNCiAgICBzdWJqZWN0ICAgICAgPSBweF9hbGwoKSwNCiAgICBncmFkZSAgICAgICAgPSBweF9hbGwoKSwNCiAgICBtdW5pY2lwYWxpdHkgPSBweF9hbGwoKSwNCiAgICB1bml0ICAgICAgICAgPSAiQiIsDQogICAgdGltZSAgICAgICAgID0gcHhfdG9wKCksDQogICAgLmNvbF9jb2RlICAgID0gVA0KICApIHw+IA0KICBhc190aWJibGUoKQ0KDQpVRFhUS0sgPC0gDQogIFVEWFRLS19yYXcgfD4gDQogIHVuaXRlKGNvbWJpLCB1bml0LCB0aW1lLCBzZXAgPSAiICIpIHw+DQogIG11dGF0ZShtdW5pY2lwYWxpdHkgPSBtdW5pY2lwYWxpdHkgfD4gZmN0X2lub3JkZXIoKSkgfD4gDQogIHNwcmVhZChzdWJqZWN0LCB2YWx1ZSkNCg0KVURYVEtLIHw+IA0KICBzZWxlY3QoLTMpIHw+IA0KICByZW5hbWUoIiAiID0gMSkgfD4gDQogIHN0YXRnbF90YWJsZSgpIHw+IA0KICByb3dfc3BlYyhjKDEsIDcpLCBib2xkID0gVCkgfD4gDQogIHBhY2tfcm93cyhpbmRleCA9IHRhYmxlKFVEWFRLS1tbM11dKSkNCg0KDQoNCg0KYGBgDQo8YnI+DQpbIVtdKGByIGxvZ29gKXt3aWR0aD00MH1gciBwYXN0ZShzb3VyY2UsICJVRFhUS0siKWBdKGByIHBhc3RlMCgiaHR0cHM6Ly9iYW5rLnN0YXQuZ2w6NDQzL3NxLzBiM2NlNWQzLTdlOTctNDQzZi05ODFmLWY3ZDEyM2ZjZmI0MCIsIG9wdGlvbilgKXt0YXJnZXQ9Il9ibGFuayJ9DQo8L2Rpdj4NCg0KDQo8L2RldGFpbHM+DQoNCg0KPGRldGFpbHM+IDxzdW1tYXJ5PiBgciB0eHQkVUQkc3ViM1tsYW5ndWFnZV1gIDwvc3VtbWFyeT4gDQo8YnI+DQoNCjxidXR0b24gY2xhc3M9ImFjY29yZGlvbiI+IGByIHBhc3RlMCgiKipUYWJlbCA1OiAqKiIsIHN0YXRnbF9tZXRhKHN0YXRnbF91cmwoIlVEWElTQzExQSIsIGxhbmcgPSBsYW5ndWFnZSkpWzFdJHRpdGxlKSBgIDwvYnV0dG9uPiA8ZGl2IGNsYXNzPSJwYW5lbCI+DQpgYGB7ciBVRFhJU0MxMUF9DQoNClVEWElTQzExQV9yYXcgPC0gDQogIHN0YXRnbF91cmwoIlVEWElTQzExQSIsIGxhbmcgPSBsYW5ndWFnZSkgfD4gDQogIHN0YXRnbF9mZXRjaCgNCiAgICBJc2NlZCAgICAgPSBweF9hbGwoKSwNCiAgICBza29sZW9tciAgPSBweF9hbGwoKSwNCiAgICBzdGFydGFhciAgPSBweF90b3AoMSksDQogICAgLmNvbF9jb2RlID0gVA0KICApIHw+IA0KICBhc190aWJibGUoKQ0KDQpVRFhJU0MxMUEgPC0gDQogIFVEWElTQzExQV9yYXcgfD4gDQogIG11dGF0ZShzdGFydGFhciA9IHN0YXJ0YWFyIHw+IGZjdF9pbm9yZGVyKCksDQogICAgICAgICBza29sZW9tciA9IHNrb2xlb21yIHw+IGZjdF9pbm9yZGVyKCkpIHw+IA0KICBzcHJlYWQoc2tvbGVvbXIsIHZhbHVlKQ0KDQpVRFhJU0MxMUEgfD4gDQogIHNlbGVjdCgtc3RhcnRhYXIpIHw+IA0KICByZW5hbWUoIiAiID0gMSkgfD4gDQogIHN0YXRnbF90YWJsZSgpIHw+IA0KICBwYWNrX3Jvd3MoaW5kZXggPSB0YWJsZShVRFhJU0MxMUFbWzJdXSkpDQoNCg0KYGBgDQo8YnI+DQpbIVtdKGByIGxvZ29gKXt3aWR0aD00MH1gciBwYXN0ZShzb3VyY2UsICJVRFhJU0MxMUEiKWBdKGByIHBhc3RlMCgiaHR0cHM6Ly9iYW5rLnN0YXQuZ2w6NDQzL3NxLzE3ZTY5NTI2LTg4ODUtNGE0NS05MzZlLTMzYzYwZGNiYThiNCIsIG9wdGlvbilgKXt0YXJnZXQ9Il9ibGFuayJ9DQo8L2Rpdj4NCg0KDQo8YnV0dG9uIGNsYXNzPSJhY2NvcmRpb24iPiBgciBwYXN0ZTAoIioqVGFiZWwgNjogKioiLCBzdGF0Z2xfbWV0YShzdGF0Z2xfdXJsKCJVRFhJU0MxMUwiLCBsYW5nID0gbGFuZ3VhZ2UpKVsxXSR0aXRsZSkgYCA8L2J1dHRvbj4gPGRpdiBjbGFzcz0icGFuZWwiPg0KYGBge3IgVURYSVNDMTFMfQ0KDQpVRFhJU0MxMUxfcmF3IDwtIA0KICBzdGF0Z2xfdXJsKCJVRFhJU0MxMUwiLCBsYW5nID0gbGFuZ3VhZ2UpIHw+IA0KICBzdGF0Z2xfZmV0Y2goDQogICAgYWFyICAgICAgID0gMiwNCiAgICBpc2NlZCAgICAgPSBweF9hbGwoKSwNCiAgICBzdGF0dXMgICAgPSBweF9hbGwoKSwNCiAgICBzdGFydGFhciAgPSBweF90b3AoMyksDQogICAgLmNvbF9jb2RlID0gVA0KICApIHw+IA0KICBhc190aWJibGUoKQ0KDQpVRFhJU0MxMUwgPC0gDQogIFVEWElTQzExTF9yYXcgfD4gDQogIGZpbHRlcih2YWx1ZSA+IDApIHw+IA0KICBtdXRhdGUoc3RhdHVzID0gc3RhdHVzIHw+IGZjdF9pbm9yZGVyKCkpIHw+IA0KICBzcHJlYWQoc3RhdHVzLCB2YWx1ZSkgfD4gDQogIHVuaXRlKGNvbWJpLCBhYXIsIHN0YXJ0YWFyLCBzZXAgPSAiICIpDQoNClVEWElTQzExTCB8PiANCiAgc2VsZWN0KC0xKSB8PiANCiAgcmVuYW1lKCIgIiA9IDEpIHw+IA0KICBzdGF0Z2xfdGFibGUoKSB8PiANCiAgYWRkX2Zvb3Rub3RlKFVEWElTQzExTFtbMV1dWzFdLCBub3RhdGlvbiA9ICJzeW1ib2wiKQ0KDQoNCg0KYGBgDQo8YnI+DQpbIVtdKGByIGxvZ29gKXt3aWR0aD00MH1gciBwYXN0ZShzb3VyY2UsICJVRFhJU0MxMUwiKWBdKGByIHBhc3RlMCgiaHR0cHM6Ly9iYW5rLnN0YXQuZ2w6NDQzL3NxL2U0YjA3NmU4LWY3MDItNDZkOC1iZmVjLWJlZGQ1NjIxYzVkYSIsIG9wdGlvbilgKXt0YXJnZXQ9Il9ibGFuayJ9DQo8L2Rpdj4NCg0KPC9kZXRhaWxzPg0KDQoNCg0KPGRldGFpbHM+IDxzdW1tYXJ5PiBgciB0eHQkVUQkc3ViNFtsYW5ndWFnZV1gIDwvc3VtbWFyeT4gDQo8YnI+DQoNCjxidXR0b24gY2xhc3M9ImFjY29yZGlvbiI+IGByIHBhc3RlMCgiKipUYWJlbCA3OiAqKiIsIHN0YXRnbF9tZXRhKHN0YXRnbF91cmwoIlVEWFRSRkExIiwgbGFuZyA9IGxhbmd1YWdlKSlbMV0kdGl0bGUpIGAgPC9idXR0b24+IDxkaXYgY2xhc3M9InBhbmVsIj4NCmBgYHtyIFVEWFRSRkExfQ0KDQpVRFhUUkZBMV9yYXcgPC0gDQogIHN0YXRnbF91cmwoIlVEWFRSRkExIiwgbGFuZyA9IGxhbmd1YWdlKSB8PiANCiAgc3RhdGdsX2ZldGNoKA0KICAgIGFhciAgICAgICA9IDAsDQogICAgaXNjZWQgICAgID0gcHhfYWxsKCksDQogICAgc3RhdHVzICAgID0gcHhfYWxsKCksDQogICAgZGltX2FhciAgID0gcHhfdG9wKCksDQogICAgLmNvbF9jb2RlID0gVA0KICApIHw+IA0KICBhc190aWJibGUoKQ0KDQpVRFhUUkZBMSA8LSANCiAgVURYVFJGQTFfcmF3IHw+IA0KICB1bml0ZShjb21iaSwgYWFyLCBkaW1fYWFyLCBzZXAgPSAiICIpIHw+IA0KICBtdXRhdGUoaXNjZWQgPSBpc2NlZCB8PiBmY3RfaW5vcmRlcigpLA0KICAgICAgICAgc3RhdHVzID0gc3RhdHVzIHw+IGZjdF9pbm9yZGVyKCkpDQoNClVEWFRSRkExIHw+IA0KICBzZWxlY3QoLTEpIHw+IA0KICBzcHJlYWQoaXNjZWQsIHZhbHVlKSB8PiANCiAgcmVuYW1lKCIgIiA9IDEpIHw+IA0KICBzdGF0Z2xfdGFibGUoKSB8PiANCiAgYWRkX2Zvb3Rub3RlKFVEWFRSRkExW1sxXV1bMV0sIG5vdGF0aW9uID0gInN5bWJvbCIpDQoNCg0KDQpgYGANCjxicj4NClshW10oYHIgbG9nb2Ape3dpZHRoPTQwfWByIHBhc3RlKHNvdXJjZSwgIlVEWFRSRkExIilgXShgciBwYXN0ZTAoImh0dHBzOi8vYmFuay5zdGF0LmdsOjQ0My9zcS83ZWExNTZkZC01OWIxLTQxZTYtOWExMS05NGZmYzkxNTM4ZDIiLCBvcHRpb24pYCl7dGFyZ2V0PSJfYmxhbmsifQ0KPC9kaXY+DQoNCjwvZGV0YWlscz4NCg0KDQoNCg0KPGhyIHN0eWxlPSJib3JkZXI6MXB4IHJpZGdlIGxpZ2h0Z3JheSI+IDwvaHI+DQo8Y2VudGVyPiA8c3BhbiBzdHlsZT0nY29sb3I6I0QzRDNEMzsgZm9udC1zaXplOjkwJTsnPiBgciBwYXN0ZSh0eHQkdXBkYXRlW2xhbmd1YWdlXSwgZm9ybWF0KFN5cy5EYXRlKCksICIlZC4gJUIgJVkiKSlgIDwvc3Bhbj4gPC9jZW50ZXI+DQoNCg0KDQoNCjxzY3JpcHQ+DQp2YXIgYWNjID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiYWNjb3JkaW9uIik7DQp2YXIgaTsNCg0KZm9yIChpID0gMDsgaSA8IGFjYy5sZW5ndGg7IGkrKykgew0KICBhY2NbaV0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpIHsNCiAgICB0aGlzLmNsYXNzTGlzdC50b2dnbGUoImFjdGl2ZSIpOw0KICAgIHZhciBwYW5lbCA9IHRoaXMubmV4dEVsZW1lbnRTaWJsaW5nOw0KICAgIGlmIChwYW5lbC5zdHlsZS5tYXhIZWlnaHQpIHsNCiAgICAgIHBhbmVsLnN0eWxlLm1heEhlaWdodCA9IG51bGw7DQogICAgfSBlbHNlIHsNCiAgICAgIHBhbmVsLnN0eWxlLm1heEhlaWdodCA9IHBhbmVsLnNjcm9sbEhlaWdodCArICJweCI7DQogICAgfSANCiAgfSk7DQp9DQo8L3NjcmlwdD4NCg0KDQoNCg0KDQoNCg==