Udenrigsøkonomi


Udenrigsøkonomi
IEX2PROD_raw <- 
  statgl_url("IEX2PROD", lang = language) %>% 
  statgl_fetch(
    branch = px_all(),
    quarter = 1:4,
    time = px_top(1),
    .col_code = TRUE
  ) %>% 
  as_tibble()

IEX2PROD <- 
  IEX2PROD_raw %>% 
  mutate(branch = branch %>% fct_inorder()) %>% 
  filter(branch %>% str_detect("-[:digit:]")) %>% 
  mutate(
    quarter = quarter %>% fct_inorder(),
    branch = branch %>% str_remove_all("[:digit:]|[:punct:]") %>% trimws(),
    branch = branch %>% fct_inorder()
    ) %>% 
  filter(value != "Na") %>% 
  spread(quarter, value)

IEX2PROD %>% 
  select(-time) %>% 
  rename(" " = 1) %>% 
  statgl_table() %>% 
  pack_rows(index = IEX2PROD[["time"]] %>% table()) %>% 
  row_spec(1, bold = TRUE)
kvartal 1 kvartal 2 kvartal 3 kvartal 4
2023
Eksport i alt 1.070.761.570 1.491.901.632 1.963.571.249 1.485.223.302
Animalske landbrugsprodukter i alt 25.123 76.303 103.020 56.754
Vegetabilske landbrugsprodukter i alt NA NA 5.029 NA
Industriprodukter i alt undt kød og mælkekonserves skibe mv 206.595.114 330.165.655 353.558.676 275.617.223
Skibe over brt fly bore og produktionsplatforme i alt NA NA 260.500 NA
Fisk krebsdyr og bløddyr ikke tilberedt eller konserveret i alt 863.792.549 1.144.397.182 1.608.211.599 1.208.980.012
Brændselsstoffer smørestof og elektrisk strøm i alt 2.179 1.605 10.160 2.753
Andre varer i alt 346.605 17.260.887 1.422.265 566.560


Se Statistikbankens tabel: IEX2PROD

IEXANV_raw <- 
  statgl_url("IEXANV", lang = language) %>%
  statgl_fetch(
    quarter   = 1:4,
    time      = px_top(1),
    "end-use" = px_all(),
    .col_code = TRUE
  ) %>% 
  as_tibble()

IEXANV <- 
  IEXANV_raw %>% 
  filter(`end-use` %>% word(1) %>% str_detect("-")) %>% 
  mutate(
    `end-use` = `end-use` %>% str_remove_all("[:digit:]|[:punct:]") %>% trimws(),
    `end-use` = `end-use` %>% fct_inorder()
  ) %>% 
  filter(value != "Na") %>% 
  spread(quarter, value)
  
IEXANV %>% 
  select(-time) %>% 
  rename(" " = 1) %>% 
  statgl_table() %>% 
  pack_rows(index = IEXANV[["time"]] %>% table()) %>% 
  row_spec(1, bold = TRUE)
kvartal 1 kvartal 2 kvartal 3 kvartal 4
2023
Indførsel i alt 1.098.101.623 1.993.478.311 1.460.991.973 1.686.377.300
Landbrug og gartneri i alt 11.479.086 12.860.143 23.605.406 22.101.887
Bygge og anlægsvirksomhed i alt 173.161.848 282.152.923 200.127.923 161.592.051
Øvrige byerhverv i alt 263.428.312 380.866.390 371.512.583 329.639.197
Brændstoffer smørstoffer og elektrisk strøm i alt 27.068.937 461.614.960 14.647.444 237.513.718
Maskiner og andet kapitaludstyr i alt 121.218.387 179.381.568 137.565.023 188.830.941
Transportmidler i alt 33.119.002 76.145.552 45.741.542 83.019.274
Direkte forbrug i alt 444.686.187 558.153.857 643.938.547 648.029.145
Varer ikke andetsteds medtaget 23.939.865 42.302.919 23.853.504 15.651.087


Se Statistikbankens tabel: IEXANV

IEXBALMND_raw <- 
  statgl_url("IEXBALMND", lang = language) %>%
  statgl_fetch(
    month       = px_all(),
    transaction = px_all(),
    time        = px_top(1),
    .col_code   = TRUE
  ) %>% 
  as_tibble()

IEXBALMND <- 
  IEXBALMND_raw %>% 
  mutate(
    month = month %>% str_to_sentence(),
    month = month %>% fct_inorder(),
    transaction = transaction %>% fct_inorder()
  ) %>% 
  filter(value != "Na") %>% 
  spread(transaction, value)

IEXBALMND %>% 
  select(-time) %>% 
  rename(" " = 1) %>% 
  statgl_table() %>% 
  pack_rows(index = IEXBALMND[["time"]] %>% table()) %>% 
  row_spec(1, bold = TRUE)
Handelsbalance Udførsel Indførsel
2023
Hele året -227.491 6.011.458 6.238.949
Januar 15.380 338.317 322.936
Februar 2.895 346.400 343.504
Marts -45.616 386.045 431.661
April -308.853 302.821 611.673
Maj 45.493 665.180 619.688
Juni -238.217 523.901 762.117
Juli 124.410 643.644 519.234
August 317.304 767.949 450.645
September 60.865 551.979 491.113
Oktober -354.770 493.649 848.418
November 64.395 559.330 494.935
December 89.220 432.245 343.024


Se Statistikbankens tabel: IEXBALMND

IEXSITC_raw <- 
  statgl_url("IEXSITC", lang = language) %>% 
  statgl_fetch(
    processing  = px_all(),
    transaction = 1:2,
    time        = px_top(2),
    .col_code   = TRUE
  ) %>% 
  as_tibble() %>% 
  filter(time != max(time))

IEXSITC <- 
  IEXSITC_raw %>% 
  filter(processing %>% str_detect("I alt|i alt|Katillugit|katillugit|total|Total")) %>%
  mutate(
      processing = processing %>% 
      str_remove_all("[:digit:]|\\-") %>% 
      trimws() %>% 
      fct_inorder(),
      value = value |> prettyNum(big.mark = ".", decimal.mark = ",")
    ) %>% 
  spread(transaction, value) %>% 
  mutate_if(is.numeric, ~replace(., is.na(.), 0)) %>%
  gather(var, val, -c(processing, time)) %>% 
  mutate(var = var %>% str_to_title()) %>% 
  spread(var, val)


IEXSITC %>% 
  select(-time) %>% 
  rename(" " = 1) %>% 
  statgl_table(replace_0s = TRUE) %>% 
  pack_rows(index = table(paste0("Kroner, ", IEXSITC %>% pull(time)))) %>% 
  row_spec(1, bold = TRUE)
Eksport Import
Kroner, 2022
I alt 6.074.965.766 7.340.662.485
Næringsmidler og levende dyr i alt 5.836.940.972 1.056.407.397
Drikkevarer og tobak i alt 308.746 203.629.659
Råstoffer, ikke spiselige (undt. Brændsel) i alt 11.906.983 55.249.242
Mineral, brændsels og smørestoffer o.l. i alt 4.120 1.450.555.164
Anim. Og veg. olier, fedtstoffer og voks i alt 3.298.396 8.080.838
Kemikalier og kemiske produkter i alt 1.082.966 440.611.951
Bearb. Varer, hovedsagelig halvfabrikata i alt 16.419.591 1.065.683.956
Maskiner og transportmidler i alt 179.201.166 2.346.499.594
Bearbejdede varer i.a.n. i alt 16.185.340 635.428.213
Diverse varer og transaktioner i.a.n. i alt 9.617.486 78.516.470


Se Statistikbankens tabel: IEXSITC


Sidst opdateret: 17. april 2024
LS0tDQpwYXJhbXM6DQogIGxhbmc6ICJkYSINCm91dHB1dDoNCiAgc3RhdGdsOjpzdGF0Z2xfcmVwb3J0Og0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCmVkaXRvcl9vcHRpb25zOiANCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGNvbnNvbGUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KCWVjaG8gICAgPSBUUlVFLA0KCW1lc3NhZ2UgPSBGQUxTRSwNCgl3YXJuaW5nID0gRkFMU0UsDQoJY2xhc3Mub3V0cHV0ID0gInNjcm9sbC0xMDAiDQopDQoNCnsNCmxpYnJhcnkoInRpZHl2ZXJzZSIpDQpsaWJyYXJ5KCJzdGF0Z2wiKQ0KbGlicmFyeSgia2FibGVFeHRyYSIpDQpsaWJyYXJ5KCJsdWJyaWRhdGUiKQ0KbGlicmFyeSgieWFtbCIpDQp9DQoNCnsgIA0KbGFuZ3VhZ2UgIDwtIHBhcmFtcyRsYW5nDQpvcHRpb24gICAgPC0gcGFzdGUwKCI/bGFuZz0iLCBsYW5ndWFnZSwgIiZzZWxlY3QiKQ0KbG9nbyAgICAgIDwtIHBhc3RlMChnZXR3ZCgpLCIvYWRkL2xvZ28uZ2lmIikNCnR4dCAgICAgICA8LSByZWFkX3lhbWwocGFzdGUwKGdldHdkKCksICIvYWRkL3R4dC55bWwiKSwgZmlsZUVuY29kaW5nID0gIklTTy04ODU5LTEiKQ0Kc291cmNlICAgIDwtIHR4dCRzb3VyY2VbbGFuZ3VhZ2VdICU+JSB1bmxpc3QoKQ0KfQ0KDQp4YXJpbmdhbkV4dHJhOjp1c2VfY2xpcGJvYXJkKCkNCg0KYGBgDQoNCmBgYHtjc3MsIGVjaG8gPSBGQUxTRX0NCg0KLmFjY29yZGlvbiB7DQogIGJhY2tncm91bmQtY29sb3I6ICM5MTk5MDA7DQogIGNvbG9yOiB3aGl0ZTsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICBwYWRkaW5nOiAxOHB4Ow0KICB3aWR0aDogMTAwJTsNCiAgYm9yZGVyOiBub25lOw0KICBib3JkZXItcmFkaXVzOiA1cHg7DQogIHRleHQtYWxpZ246IGxlZnQ7DQogIG91dGxpbmU6IG5vbmU7DQogIGZvbnQtc2l6ZTogMTVweDsNCiAgdHJhbnNpdGlvbjogMC40czsNCn0NCg0KLmFjdGl2ZSwgLmFjY29yZGlvbjpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmOTcyNDI7DQp9DQoNCi5hY2NvcmRpb246YWZ0ZXIgew0KICBjb250ZW50OiAnXDAwMkInOw0KICBjb2xvcjogIzc3NzsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZsb2F0OiByaWdodDsNCiAgbWFyZ2luLWxlZnQ6IDVweDsNCn0NCg0KLmFjdGl2ZTphZnRlciB7DQogIGNvbnRlbnQ6ICJcMjIxMiI7DQp9DQoNCi5wYW5lbCB7DQogIHBhZGRpbmc6IDBweCA1cHggMHB4IDVweDsNCiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7DQogIG1heC1oZWlnaHQ6IDA7DQogIG92ZXJmbG93OiBoaWRkZW47DQogIHRyYW5zaXRpb246IG1heC1oZWlnaHQgMC4ycyBlYXNlLW91dDsNCn0NCg0KZGV0YWlscyB7DQogIHdpZHRoOiAxMDAlOw0KfQ0KDQpkZXRhaWxzID4gc3VtbWFyeSB7DQogIHBhZGRpbmc6IDRweCAxMnB4Ow0KICB3aWR0aDogMTAwJTsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2Y5OTsNCiAgYm9yZGVyOiBzb2xpZDsNCiAgYm9yZGVyLWNvbG9yOiB3aGl0ZTsNCiAgYm9yZGVyLXJhZGl1czogNXB4Ow0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGZvbnQtc2l6ZTogMTVweDsNCiAgY29sb3I6IHdoaXRlOw0KfQ0KDQpkZXRhaWxzW29wZW5dID4gc3VtbWFyeSB7DQogIGJhY2tncm91bmQtY29sb3I6ICNmYWE0MWE7DQp9DQoNCg0KLnRpdGxlIHsNCiAgY29sb3I6ICMxYjU0NjM7DQogIGZvbnQtc2l6ZTogMzZweDsNCn0NCg0KDQoucGVyc29uZXIgew0KICBib3gtc2hhZG93OiAzcHggM3B4IDRweCBibGFjazsNCiAgYmFja2dyb3VuZDogIzAwNDQ1OTsNCiAgcGFkZGluZy1yaWdodDogMTVweDsNCiAgcGFkZGluZy1sZWZ0OiAxNnB4Ow0KICBwYWRkaW5nLXRvcDogMC4xcHg7DQogIHBhZGRpbmctYm90dG9tOiAxcHg7DQogIGZvbnQtc2l6ZTogMTFweDsNCiAgY29sb3I6IHdoaXRlOw0KICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KfQ0KDQouw7hrb25vbWkgew0KICBib3gtc2hhZG93OiAzcHggM3B4IDRweCBibGFjazsNCiAgYmFja2dyb3VuZDogIzAwN0Y5OTsNCiAgcGFkZGluZy1yaWdodDogMTVweDsNCiAgcGFkZGluZy1sZWZ0OiAxNnB4Ow0KICBwYWRkaW5nLXRvcDogMXB4Ow0KICBwYWRkaW5nLWJvdHRvbTogMC4xcHg7DQogIGZvbnQtc2l6ZTogMTFweDsNCiAgY29sb3I6IHdoaXRlOw0KICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KfQ0KDQoudHbDpnJnw6VlbmRlIHsNCiAgYm94LXNoYWRvdzogM3B4IDNweCA0cHggYmxhY2s7DQogIGJhY2tncm91bmQ6ICNmYWE0MWE7DQogIHBhZGRpbmctcmlnaHQ6IDE1cHg7DQogIHBhZGRpbmctbGVmdDogMTZweDsNCiAgcGFkZGluZy10b3A6IDAuMXB4Ow0KICBwYWRkaW5nLWJvdHRvbTogMXB4Ow0KICBmb250LXNpemU6IDExcHg7DQogIGNvbG9yOiB3aGl0ZTsNCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCn0NCg0KLmNvbnRhaW5lciB7DQogIHdpZHRoOiBpbmhlcml0Ow0KfQ0KDQouc2Nyb2xsLTEwMCB7DQogIG1heC1oZWlnaHQ6IDEwMDsNCiAgb3ZlcmZsb3cteTogYXV0bzsNCiAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsNCn0NCg0KDQpwcmUgew0KICBtYXgtaGVpZ2h0OiAzMDBweDsNCiAgb3ZlcmZsb3cteTogYXV0bzsNCn0NCg0KcHJlW2NsYXNzXSB7DQogIG1heC1oZWlnaHQ6IDMwMHB4Ow0KfQ0KDQpgYGANCg0KPGJyPg0KPGJyPg0KDQo8Y2VudGVyPg0KDQotLS0NCiANCiMgW2ByIHR4dCRJRSR0aXRsZVtsYW5ndWFnZV1gXXsudGl0bGV9DQogDQotLS0NCjwvY2VudGVyPg0KDQo8ZGV0YWlscyBvcGVuPiA8c3VtbWFyeT4gYHIgdHh0JElFJHRpdGxlW2xhbmd1YWdlXWAgPC9zdW1tYXJ5PiANCjxicj4NCjxidXR0b24gY2xhc3M9ImFjY29yZGlvbiI+IGByIHBhc3RlMCgiKipUYWJlbCAxOiAqKiIsIHN0YXRnbF9tZXRhKHN0YXRnbF91cmwoIklFWDJQUk9EIiwgbGFuZyA9IGxhbmd1YWdlKSlbMV0kdGl0bGUpIGAgPC9idXR0b24+IDxkaXYgY2xhc3M9InBhbmVsIj4NCmBgYHtyIElFWDJQUk9EfQ0KDQpJRVgyUFJPRF9yYXcgPC0gDQogIHN0YXRnbF91cmwoIklFWDJQUk9EIiwgbGFuZyA9IGxhbmd1YWdlKSAlPiUgDQogIHN0YXRnbF9mZXRjaCgNCiAgICBicmFuY2ggPSBweF9hbGwoKSwNCiAgICBxdWFydGVyID0gMTo0LA0KICAgIHRpbWUgPSBweF90b3AoMSksDQogICAgLmNvbF9jb2RlID0gVFJVRQ0KICApICU+JSANCiAgYXNfdGliYmxlKCkNCg0KSUVYMlBST0QgPC0gDQogIElFWDJQUk9EX3JhdyAlPiUgDQogIG11dGF0ZShicmFuY2ggPSBicmFuY2ggJT4lIGZjdF9pbm9yZGVyKCkpICU+JSANCiAgZmlsdGVyKGJyYW5jaCAlPiUgc3RyX2RldGVjdCgiLVs6ZGlnaXQ6XSIpKSAlPiUgDQogIG11dGF0ZSgNCiAgICBxdWFydGVyID0gcXVhcnRlciAlPiUgZmN0X2lub3JkZXIoKSwNCiAgICBicmFuY2ggPSBicmFuY2ggJT4lIHN0cl9yZW1vdmVfYWxsKCJbOmRpZ2l0Ol18WzpwdW5jdDpdIikgJT4lIHRyaW13cygpLA0KICAgIGJyYW5jaCA9IGJyYW5jaCAlPiUgZmN0X2lub3JkZXIoKQ0KICAgICkgJT4lIA0KICBmaWx0ZXIodmFsdWUgIT0gIk5hIikgJT4lIA0KICBzcHJlYWQocXVhcnRlciwgdmFsdWUpDQoNCklFWDJQUk9EICU+JSANCiAgc2VsZWN0KC10aW1lKSAlPiUgDQogIHJlbmFtZSgiICIgPSAxKSAlPiUgDQogIHN0YXRnbF90YWJsZSgpICU+JSANCiAgcGFja19yb3dzKGluZGV4ID0gSUVYMlBST0RbWyJ0aW1lIl1dICU+JSB0YWJsZSgpKSAlPiUgDQogIHJvd19zcGVjKDEsIGJvbGQgPSBUUlVFKQ0KDQoNCmBgYA0KPGJyPg0KWyFbXShgciBsb2dvYCl7d2lkdGg9NDB9YHIgcGFzdGUoc291cmNlLCAiSUVYMlBST0QiKWBdKGByIHBhc3RlMCgiaHR0cHM6Ly9iYW5rLnN0YXQuZ2w6NDQzL3NxLzI2YzE1NDA2LWRiN2EtNGM5NS05ZDBmLWQzZDYzYTkzZGEzZSIsIG9wdGlvbilgKXt0YXJnZXQ9Il9ibGFuayJ9DQo8L2Rpdj4gDQoNCg0KDQo8YnV0dG9uIGNsYXNzPSJhY2NvcmRpb24iPiBgciBwYXN0ZTAoIioqVGFiZWwgMjogKioiLCBzdGF0Z2xfbWV0YShzdGF0Z2xfdXJsKCJJRVhBTlYiLCBsYW5nID0gbGFuZ3VhZ2UpKVsxXSR0aXRsZSkgYCA8L2J1dHRvbj4gPGRpdiBjbGFzcz0icGFuZWwiPg0KDQpgYGB7ciBJRVhBTlZdfQ0KDQpJRVhBTlZfcmF3IDwtIA0KICBzdGF0Z2xfdXJsKCJJRVhBTlYiLCBsYW5nID0gbGFuZ3VhZ2UpICU+JQ0KICBzdGF0Z2xfZmV0Y2goDQogICAgcXVhcnRlciAgID0gMTo0LA0KICAgIHRpbWUgICAgICA9IHB4X3RvcCgxKSwNCiAgICAiZW5kLXVzZSIgPSBweF9hbGwoKSwNCiAgICAuY29sX2NvZGUgPSBUUlVFDQogICkgJT4lIA0KICBhc190aWJibGUoKQ0KDQpJRVhBTlYgPC0gDQogIElFWEFOVl9yYXcgJT4lIA0KICBmaWx0ZXIoYGVuZC11c2VgICU+JSB3b3JkKDEpICU+JSBzdHJfZGV0ZWN0KCItIikpICU+JSANCiAgbXV0YXRlKA0KICAgIGBlbmQtdXNlYCA9IGBlbmQtdXNlYCAlPiUgc3RyX3JlbW92ZV9hbGwoIls6ZGlnaXQ6XXxbOnB1bmN0Ol0iKSAlPiUgdHJpbXdzKCksDQogICAgYGVuZC11c2VgID0gYGVuZC11c2VgICU+JSBmY3RfaW5vcmRlcigpDQogICkgJT4lIA0KICBmaWx0ZXIodmFsdWUgIT0gIk5hIikgJT4lIA0KICBzcHJlYWQocXVhcnRlciwgdmFsdWUpDQogIA0KSUVYQU5WICU+JSANCiAgc2VsZWN0KC10aW1lKSAlPiUgDQogIHJlbmFtZSgiICIgPSAxKSAlPiUgDQogIHN0YXRnbF90YWJsZSgpICU+JSANCiAgcGFja19yb3dzKGluZGV4ID0gSUVYQU5WW1sidGltZSJdXSAlPiUgdGFibGUoKSkgJT4lIA0KICByb3dfc3BlYygxLCBib2xkID0gVFJVRSkNCiAgDQpgYGANCjxicj4NClshW10oYHIgbG9nb2Ape3dpZHRoPTQwfWByIHBhc3RlKHNvdXJjZSwgIklFWEFOViIpYF0oYHIgcGFzdGUwKCJodHRwczovL2Jhbmsuc3RhdC5nbDo0NDMvc3EvYjBiOTUyZDEtNmVhOS00MTNlLWE5YTMtZDNjN2ZhNWFlNjEzIiwgb3B0aW9uKWApe3RhcmdldD0iX2JsYW5rIn0NCjwvZGl2PiANCg0KDQo8YnV0dG9uIGNsYXNzPSJhY2NvcmRpb24iPiBgciBwYXN0ZTAoIioqVGFiZWwgMzogKioiLCBzdGF0Z2xfbWV0YShzdGF0Z2xfdXJsKCJJRVhCQUxNTkQiLCBsYW5nID0gbGFuZ3VhZ2UpKSR0aXRsZSlgIDwvYnV0dG9uPiA8ZGl2IGNsYXNzPSJwYW5lbCI+DQoNCmBgYHtyIElFWEJBTE1ORH0NCg0KSUVYQkFMTU5EX3JhdyA8LSANCiAgc3RhdGdsX3VybCgiSUVYQkFMTU5EIiwgbGFuZyA9IGxhbmd1YWdlKSAlPiUNCiAgc3RhdGdsX2ZldGNoKA0KICAgIG1vbnRoICAgICAgID0gcHhfYWxsKCksDQogICAgdHJhbnNhY3Rpb24gPSBweF9hbGwoKSwNCiAgICB0aW1lICAgICAgICA9IHB4X3RvcCgxKSwNCiAgICAuY29sX2NvZGUgICA9IFRSVUUNCiAgKSAlPiUgDQogIGFzX3RpYmJsZSgpDQoNCklFWEJBTE1ORCA8LSANCiAgSUVYQkFMTU5EX3JhdyAlPiUgDQogIG11dGF0ZSgNCiAgICBtb250aCA9IG1vbnRoICU+JSBzdHJfdG9fc2VudGVuY2UoKSwNCiAgICBtb250aCA9IG1vbnRoICU+JSBmY3RfaW5vcmRlcigpLA0KICAgIHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb24gJT4lIGZjdF9pbm9yZGVyKCkNCiAgKSAlPiUgDQogIGZpbHRlcih2YWx1ZSAhPSAiTmEiKSAlPiUgDQogIHNwcmVhZCh0cmFuc2FjdGlvbiwgdmFsdWUpDQoNCklFWEJBTE1ORCAlPiUgDQogIHNlbGVjdCgtdGltZSkgJT4lIA0KICByZW5hbWUoIiAiID0gMSkgJT4lIA0KICBzdGF0Z2xfdGFibGUoKSAlPiUgDQogIHBhY2tfcm93cyhpbmRleCA9IElFWEJBTE1ORFtbInRpbWUiXV0gJT4lIHRhYmxlKCkpICU+JSANCiAgcm93X3NwZWMoMSwgYm9sZCA9IFRSVUUpDQoNCmBgYA0KPGJyPg0KWyFbXShgciBsb2dvYCl7d2lkdGg9NDB9YHIgcGFzdGUoc291cmNlLCAiSUVYQkFMTU5EIilgXShgciBwYXN0ZTAoImh0dHBzOi8vYmFuay5zdGF0LmdsOjQ0My9zcS9hOGYxNjE4Ni03NGIzLTQyNGQtYWVmZi0xNjdhNjJkZTQ5ZWYiLCBvcHRpb24pYCl7dGFyZ2V0PSJfYmxhbmsifQ0KPC9kaXY+IA0KDQoNCg0KPGJ1dHRvbiBjbGFzcz0iYWNjb3JkaW9uIj4gYHIgcGFzdGUwKCIqKlRhYmVsIDQ6ICoqIiwgc3RhdGdsX21ldGEoc3RhdGdsX3VybCgiSUVYU0lUQyIsIGxhbmcgPSBsYW5ndWFnZSkpWzFdJHRpdGxlKSBgIDwvYnV0dG9uPiA8ZGl2IGNsYXNzPSJwYW5lbCI+DQoNCmBgYHtyIElFWFNJVEN9DQoNCklFWFNJVENfcmF3IDwtIA0KICBzdGF0Z2xfdXJsKCJJRVhTSVRDIiwgbGFuZyA9IGxhbmd1YWdlKSAlPiUgDQogIHN0YXRnbF9mZXRjaCgNCiAgICBwcm9jZXNzaW5nICA9IHB4X2FsbCgpLA0KICAgIHRyYW5zYWN0aW9uID0gMToyLA0KICAgIHRpbWUgICAgICAgID0gcHhfdG9wKDIpLA0KICAgIC5jb2xfY29kZSAgID0gVFJVRQ0KICApICU+JSANCiAgYXNfdGliYmxlKCkgJT4lIA0KICBmaWx0ZXIodGltZSAhPSBtYXgodGltZSkpDQoNCklFWFNJVEMgPC0gDQogIElFWFNJVENfcmF3ICU+JSANCiAgZmlsdGVyKHByb2Nlc3NpbmcgJT4lIHN0cl9kZXRlY3QoIkkgYWx0fGkgYWx0fEthdGlsbHVnaXR8a2F0aWxsdWdpdHx0b3RhbHxUb3RhbCIpKSAlPiUNCiAgbXV0YXRlKA0KICAgICAgcHJvY2Vzc2luZyA9IHByb2Nlc3NpbmcgJT4lIA0KICAgICAgc3RyX3JlbW92ZV9hbGwoIls6ZGlnaXQ6XXxcXC0iKSAlPiUgDQogICAgICB0cmltd3MoKSAlPiUgDQogICAgICBmY3RfaW5vcmRlcigpLA0KICAgICAgdmFsdWUgPSB2YWx1ZSB8PiBwcmV0dHlOdW0oYmlnLm1hcmsgPSAiLiIsIGRlY2ltYWwubWFyayA9ICIsIikNCiAgICApICU+JSANCiAgc3ByZWFkKHRyYW5zYWN0aW9uLCB2YWx1ZSkgJT4lIA0KICBtdXRhdGVfaWYoaXMubnVtZXJpYywgfnJlcGxhY2UoLiwgaXMubmEoLiksIDApKSAlPiUNCiAgZ2F0aGVyKHZhciwgdmFsLCAtYyhwcm9jZXNzaW5nLCB0aW1lKSkgJT4lIA0KICBtdXRhdGUodmFyID0gdmFyICU+JSBzdHJfdG9fdGl0bGUoKSkgJT4lIA0KICBzcHJlYWQodmFyLCB2YWwpDQoNCg0KSUVYU0lUQyAlPiUgDQogIHNlbGVjdCgtdGltZSkgJT4lIA0KICByZW5hbWUoIiAiID0gMSkgJT4lIA0KICBzdGF0Z2xfdGFibGUocmVwbGFjZV8wcyA9IFRSVUUpICU+JSANCiAgcGFja19yb3dzKGluZGV4ID0gdGFibGUocGFzdGUwKCJLcm9uZXIsICIsIElFWFNJVEMgJT4lIHB1bGwodGltZSkpKSkgJT4lIA0KICByb3dfc3BlYygxLCBib2xkID0gVFJVRSkNCiAgDQpgYGANCjxicj4NClshW10oYHIgbG9nb2Ape3dpZHRoPTQwfWByIHBhc3RlKHNvdXJjZSwgIklFWFNJVEMiKWBdKGByIHBhc3RlMCgiaHR0cHM6Ly9iYW5rLnN0YXQuZ2w6NDQzL3NxL2NlYjliNGEwLTNlZmQtNGQ2YS04NWQ1LTFhMjZmYWIxMmY4MyIsIG9wdGlvbilgKXt0YXJnZXQ9Il9ibGFuayJ9DQo8L2Rpdj4gDQo8L2RldGFpbHM+DQoNCg0KDQo8aHIgc3R5bGU9ImJvcmRlcjoxcHggcmlkZ2UgbGlnaHRncmF5Ij4gPC9ocj4NCjxjZW50ZXI+IDxzcGFuIHN0eWxlPSdjb2xvcjojRDNEM0QzOyBmb250LXNpemU6OTAlOyc+IGByIHBhc3RlKHR4dCR1cGRhdGVbbGFuZ3VhZ2VdLCBmb3JtYXQoU3lzLkRhdGUoKSwgIiVkLiAlQiAlWSIpKWAgPC9zcGFuPiA8L2NlbnRlcj4NCg0KDQo8c2NyaXB0Pg0KdmFyIGFjYyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImFjY29yZGlvbiIpOw0KdmFyIGk7DQoNCmZvciAoaSA9IDA7IGkgPCBhY2MubGVuZ3RoOyBpKyspIHsNCiAgYWNjW2ldLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oKSB7DQogICAgdGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiKTsNCiAgICB2YXIgcGFuZWwgPSB0aGlzLm5leHRFbGVtZW50U2libGluZzsNCiAgICBpZiAocGFuZWwuc3R5bGUubWF4SGVpZ2h0KSB7DQogICAgICBwYW5lbC5zdHlsZS5tYXhIZWlnaHQgPSBudWxsOw0KICAgIH0gZWxzZSB7DQogICAgICBwYW5lbC5zdHlsZS5tYXhIZWlnaHQgPSBwYW5lbC5zY3JvbGxIZWlnaHQgKyAicHgiOw0KICAgIH0gDQogIH0pOw0KfQ0KPC9zY3JpcHQ+DQoNCg0K