Code
Pemprogram Ilmu Data
Syntax & Control Flow
Objective
Tujuan
Memahami dan menerapkan pernyataan kondisional
(if , if-else , if-elif-else ).
Menerapkan perulangan (for loop , while
loop , break , continue ) untuk menganalisis sebuah
dataset.
Gunakan dataset dummy berikut:
1
Bagas
25
5000
Staf
Baik
2
Joan
30
7000
Supervisor
Sangat Baik
3
Alya
27
6500
Staf
Rata-rata
4
Dwi
35
10000
Manajer
Baik
5
Nabil
40
12000
Direktur
Sangat Baik
Conditional
Stantements
Tentukan tingkat bonus berdasarkan
performa karyawan:
Sangat Baik → 20% dari gaji
Baik → 10% dari gaji
Rata-rata → 5% dari gaji
Tugas:
Buat program dalam Python dan R untuk menghitung
bonus setiap karyawan.
Tampilkan output dalam format berikut:
"Nama: Bagas, Bonus: 500"
Jawaban:
Kode R untuk Menghitung Bonus setiap karyawan.
# Dataset karyawan
karyawan <- data.frame (
Nama = c ("Bagas" , "Joan" , "Alya" , "Dwi" , "Nabil" ),
Gaji = c (5000 , 7000 , 6500 , 10000 , 12000 ),
Performa = c ("Baik" , "Sangat Baik" , "Rata-rata" , "Baik" , "Sangat Baik" )
)
# Fungsi untuk menghitung bonus berdasarkan performa
hitung_bonus <- function (performa, gaji) {
if (performa == "Sangat Baik" ) {
return (gaji * 0.20 )
} else if (performa == "Baik" ) {
return (gaji * 0.10 )
} else if (performa == "Rata-rata" ) {
return (gaji * 0.05 )
} else {
return (0 )
}
}
# Menambahkan kolom bonus ke dataset
karyawan$ Bonus <- mapply (hitung_bonus, karyawan$ Performa, karyawan$ Gaji)
# Menampilkan output sesuai format yang diminta
for (i in 1 : nrow (karyawan)) {
cat (sprintf ('Nama: %s, Bonus: %d \n ' , karyawan$ Nama[i], karyawan$ Bonus[i]))
}
## Nama: Bagas, Bonus: 500
## Nama: Joan, Bonus: 1400
## Nama: Alya, Bonus: 325
## Nama: Dwi, Bonus: 1000
## Nama: Nabil, Bonus: 2400
Loops (For &
While)
for
loop
Untuk menampilkan karyawan dengan gaji lebih dari
6000 .
Output yang Diharapkan:
Nama: Joan, Gaji: 7000
Nama: Alya, Gaji: 6500
Nama: Dwi, Gaji: 10000
Nama: Nabil, Gaji: 12000
Jawaban:
Kode R untuk menampilkan karyawan dengan gaji lebih dari
6000 .
# Menggunakan for loop untuk menampilkan karyawan dengan gaji lebih dari 6000
karyawan_gaji_tinggi <- subset (karyawan, Gaji > 6000 )
# Menampilkan dalam format teks
for (i in 1 : nrow (karyawan_gaji_tinggi)) {
cat (sprintf ("Nama: %s, Gaji: %d \n " , karyawan_gaji_tinggi$ Nama[i], karyawan_gaji_tinggi$ Gaji[i]))
}
## Nama: Joan, Gaji: 7000
## Nama: Alya, Gaji: 6500
## Nama: Dwi, Gaji: 10000
## Nama: Nabil, Gaji: 12000
while
loop
Untuk menampilkan karyawan hingga menemukan
“Manajer” .
Nama: Bagas, Posisi: Staf
Nama: Joan, Posisi: Supervisor
Nama: Alya, Posisi: Staf
Nama: Dwi, Posisi: Manajer (Berhenti di sini)
Jawaban
Kode R untuk untuk menampilkan karyawan hingga menemukan
“Manajer” .
# Dataset karyawan
karyawan <- data.frame (
Nama = c ("Bagas" , "Joan" , "Alya" , "Dwi" , "Nabil" ),
Gaji = c (5000 , 7000 , 6500 , 10000 , 12000 ),
Posisi = c ("Staf" , "Supervisor" , "Staf" , "Manajer" , "Direktur" ),
Performa = c ("Good" , "Very Good" , "Average" , "Good" , "Very Good" )
)
# Menggunakan while loop untuk menampilkan karyawan hingga menemukan "Manajer"
i <- 1
while (i <= nrow (karyawan)) {
cat (sprintf ("Nama: %s, Posisi: %s \n " , karyawan$ Nama[i], karyawan$ Posisi[i]))
if (karyawan$ Posisi[i] == "Manajer" ) {
cat ("(Berhenti di sini) \n " )
break
}
i <- i + 1
}
## Nama: Bagas, Posisi: Staf
## Nama: Joan, Posisi: Supervisor
## Nama: Alya, Posisi: Staf
## Nama: Dwi, Posisi: Manajer
## (Berhenti di sini)
Break
Untuk menghentikan perulangan ketika menemukan karyawan dengan gaji
lebih dari 10.000.
Output yang Diharapkan:
Nama: Bagas, Gaji: 5000
Nama: Joan, Gaji: 7000
Nama: Alya, Gaji: 6500
Nama: Dwi, Gaji: 10000
(Berhenti karena Nabil memiliki gaji di atas 10.000)
Jawaban:
Kode R untuk menghentikan perulangan ketika menemukan karyawan dengan
gaji lebih dari 10.000.
# Menggunakan break untuk berhenti saat menemukan gaji lebih dari 10.000
for (i in 1 : nrow (karyawan)) {
cat (sprintf ("Nama: %s, Gaji: %d \n " , karyawan$ Nama[i], karyawan$ Gaji[i]))
# Jika gaji lebih dari 10.000, hentikan perulangan
if (karyawan$ Gaji[i] > 10000 ) {
cat (sprintf ("(Berhenti karena %s memiliki gaji di atas 10.000) \n " , karyawan$ Nama[i]))
break
}
}
## Nama: Bagas, Gaji: 5000
## Nama: Joan, Gaji: 7000
## Nama: Alya, Gaji: 6500
## Nama: Dwi, Gaji: 10000
## Nama: Nabil, Gaji: 12000
## (Berhenti karena Nabil memiliki gaji di atas 10.000)
Continue
Untuk melewati karyawan dengan performa
“Average” .
Output yang Diharapkan:
Nama: Bagas, Performa: Good
Nama: Joan, Performa: Very Good
Nama: Dwi, Performa: Good
Nama: Nabil, Performa: Very Good
(Alya dilewati karena performanya "Average")
Jawaban:
Kode R untuk melewati karyawan dengan performa
“Average” .
# Menggunakan continue untuk melewati karyawan dengan performa "Average"
for (i in 1 : nrow (karyawan)) {
if (karyawan$ Performa[i] == "Average" ) {
next # Lewati karyawan dengan performa "Average"
}
cat (sprintf ("Nama: %s, Performa: %s \n " , karyawan$ Nama[i], karyawan$ Performa[i]))
}
## Nama: Bagas, Performa: Good
## Nama: Joan, Performa: Very Good
## Nama: Dwi, Performa: Good
## Nama: Nabil, Performa: Very Good
LS0tDQp0aXRsZTogIlBlbXByb2dyYW0gSWxtdSBEYXRhIg0Kc3VidGl0bGU6ICJTeW50YXggJiBDb250cm9sIEZsb3ciDQphdXRob3I6IA0KICAtICJOb3ZhIFNpdG9ydXMgNTIyNDAwMjMiDQpkYXRlOiAgImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjogICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9qdWJhL3JtZGZvcm1hdHMNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNzczogInN0eWxlL3N0eWxlIGNzcy5jc3MiDQotLS0NCg0KPHN0eWxlPg0KICBib2R5IHsNCiAgICB0ZXh0LWFsaWduOiBqdXN0aWZ5Ow0KICB9DQo8L3N0eWxlPg0KDQo8aW1nIHNyYz0iTk9WQS5qcGciIGFsdD0iTG9nbyIgc3R5bGU9IndpZHRoOjUwMHB4OyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyIvPg0KDQoNCg0KIyBPYmplY3RpdmUgDQoNCiMjIFR1anVhbg0KDQoxLiBNZW1haGFtaSBkYW4gbWVuZXJhcGthbiAqKnBlcm55YXRhYW4ga29uZGlzaW9uYWwqKiAoKmlmKiwgKmlmLWVsc2UqLCAqaWYtZWxpZi1lbHNlKikuICANCjIuIE1lbmVyYXBrYW4gKipwZXJ1bGFuZ2FuKiogKCpmb3IgbG9vcCosICp3aGlsZSBsb29wKiwgKmJyZWFrKiwgKmNvbnRpbnVlKikgdW50dWsgbWVuZ2FuYWxpc2lzIHNlYnVhaCBkYXRhc2V0LiAgDQoNCkd1bmFrYW4gZGF0YXNldCAqKmR1bW15KiogYmVyaWt1dDogIA0KDQp8IElEICB8IE5hbWEgIHwgVXNpYSB8IEdhamkgIHwgUG9zaXNpICAgICAgIHwgUGVyZm9ybWEgICAgICB8ICANCnwtLS0tfC0tLS0tLXwtLS0tLXwtLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfCAgDQp8IDEgIHwgQmFnYXMgfCAyNSAgfCA1MDAwICB8IFN0YWYgICAgICAgfCBCYWlrICAgICAgICAgfCAgDQp8IDIgIHwgSm9hbiAgfCAzMCAgfCA3MDAwICB8IFN1cGVydmlzb3IgfCBTYW5nYXQgQmFpayAgfCAgDQp8IDMgIHwgQWx5YSAgfCAyNyAgfCA2NTAwICB8IFN0YWYgICAgICAgfCBSYXRhLXJhdGEgICAgfCAgDQp8IDQgIHwgRHdpICAgfCAzNSAgfCAxMDAwMCB8IE1hbmFqZXIgICAgfCBCYWlrICAgICAgICAgfCAgDQp8IDUgIHwgTmFiaWwgfCA0MCAgfCAxMjAwMCB8IERpcmVrdHVyICAgfCBTYW5nYXQgQmFpayAgfCAgDQoNCg0KIyBDb25kaXRpb25hbCBTdGFudGVtZW50cw0KDQpUZW50dWthbiAqKnRpbmdrYXQgYm9udXMqKiBiZXJkYXNhcmthbiAqKnBlcmZvcm1hKioga2FyeWF3YW46ICANCg0KLSAqKlNhbmdhdCBCYWlrKiog4oaSIDIwJSBkYXJpIGdhamkgIA0KLSAqKkJhaWsqKiDihpIgMTAlIGRhcmkgZ2FqaSAgDQotICoqUmF0YS1yYXRhKiog4oaSIDUlIGRhcmkgZ2FqaSAgDQoNCiMjIFR1Z2FzOiANCg0KLSBCdWF0IHByb2dyYW0gZGFsYW0gKipQeXRob24gZGFuIFIqKiB1bnR1ayBtZW5naGl0dW5nIGJvbnVzIHNldGlhcCBrYXJ5YXdhbi4gIA0KLSBUYW1waWxrYW4gb3V0cHV0IGRhbGFtIGZvcm1hdCBiZXJpa3V0OiAgDQogIGBgYHBsYWludGV4dA0KICAiTmFtYTogQmFnYXMsIEJvbnVzOiA1MDAiDQogIGBgYA0KICANCiMjIEphd2FiYW46DQoNCktvZGUgUiB1bnR1ayBNZW5naGl0dW5nIEJvbnVzIHNldGlhcCBrYXJ5YXdhbi4NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIERhdGFzZXQga2FyeWF3YW4NCmthcnlhd2FuIDwtIGRhdGEuZnJhbWUoDQogIE5hbWEgPSBjKCJCYWdhcyIsICJKb2FuIiwgIkFseWEiLCAiRHdpIiwgIk5hYmlsIiksDQogIEdhamkgPSBjKDUwMDAsIDcwMDAsIDY1MDAsIDEwMDAwLCAxMjAwMCksDQogIFBlcmZvcm1hID0gYygiQmFpayIsICJTYW5nYXQgQmFpayIsICJSYXRhLXJhdGEiLCAiQmFpayIsICJTYW5nYXQgQmFpayIpDQopDQoNCiMgRnVuZ3NpIHVudHVrIG1lbmdoaXR1bmcgYm9udXMgYmVyZGFzYXJrYW4gcGVyZm9ybWENCmhpdHVuZ19ib251cyA8LSBmdW5jdGlvbihwZXJmb3JtYSwgZ2FqaSkgew0KICBpZiAocGVyZm9ybWEgPT0gIlNhbmdhdCBCYWlrIikgew0KICAgIHJldHVybihnYWppICogMC4yMCkNCiAgfSBlbHNlIGlmIChwZXJmb3JtYSA9PSAiQmFpayIpIHsNCiAgICByZXR1cm4oZ2FqaSAqIDAuMTApDQogIH0gZWxzZSBpZiAocGVyZm9ybWEgPT0gIlJhdGEtcmF0YSIpIHsNCiAgICByZXR1cm4oZ2FqaSAqIDAuMDUpDQogIH0gZWxzZSB7DQogICAgcmV0dXJuKDApDQogIH0NCn0NCg0KIyBNZW5hbWJhaGthbiBrb2xvbSBib251cyBrZSBkYXRhc2V0DQprYXJ5YXdhbiRCb251cyA8LSBtYXBwbHkoaGl0dW5nX2JvbnVzLCBrYXJ5YXdhbiRQZXJmb3JtYSwga2FyeWF3YW4kR2FqaSkNCg0KIyBNZW5hbXBpbGthbiBvdXRwdXQgc2VzdWFpIGZvcm1hdCB5YW5nIGRpbWludGENCmZvciAoaSBpbiAxOm5yb3coa2FyeWF3YW4pKSB7DQogIGNhdChzcHJpbnRmKCdOYW1hOiAlcywgQm9udXM6ICVkXG4nLCBrYXJ5YXdhbiROYW1hW2ldLCBrYXJ5YXdhbiRCb251c1tpXSkpDQp9DQpgYGANCg0KIyBMb29wcyAoRm9yICYgV2hpbGUpDQoNCiMjICoqZm9yIGxvb3AqKg0KDQpVbnR1ayBtZW5hbXBpbGthbiBrYXJ5YXdhbiBkZW5nYW4gZ2FqaSBsZWJpaCBkYXJpICoqNjAwMCoqLg0KDQpPdXRwdXQgeWFuZyBEaWhhcmFwa2FuOg0KDQpgYGBwbGFpbnRleHQNCk5hbWE6IEpvYW4sIEdhamk6IDcwMDANCk5hbWE6IEFseWEsIEdhamk6IDY1MDANCk5hbWE6IER3aSwgR2FqaTogMTAwMDANCk5hbWE6IE5hYmlsLCBHYWppOiAxMjAwMA0KYGBgDQojIyMgSmF3YWJhbjoNCktvZGUgUiB1bnR1ayBtZW5hbXBpbGthbiBrYXJ5YXdhbiBkZW5nYW4gZ2FqaSBsZWJpaCBkYXJpICoqNjAwMCoqLg0KDQpgYGB7ciwgZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW5nZ3VuYWthbiBmb3IgbG9vcCB1bnR1ayBtZW5hbXBpbGthbiBrYXJ5YXdhbiBkZW5nYW4gZ2FqaSBsZWJpaCBkYXJpIDYwMDANCmthcnlhd2FuX2dhamlfdGluZ2dpIDwtIHN1YnNldChrYXJ5YXdhbiwgR2FqaSA+IDYwMDApDQoNCiMgTWVuYW1waWxrYW4gZGFsYW0gZm9ybWF0IHRla3MNCmZvciAoaSBpbiAxOm5yb3coa2FyeWF3YW5fZ2FqaV90aW5nZ2kpKSB7DQogIGNhdChzcHJpbnRmKCJOYW1hOiAlcywgR2FqaTogJWRcbiIsIGthcnlhd2FuX2dhamlfdGluZ2dpJE5hbWFbaV0sIGthcnlhd2FuX2dhamlfdGluZ2dpJEdhamlbaV0pKQ0KfQ0KDQpgYGANCg0KIyMgKip3aGlsZSBsb29wKiogDQoNClVudHVrIG1lbmFtcGlsa2FuIGthcnlhd2FuIGhpbmdnYSBtZW5lbXVrYW4gKioiTWFuYWplciIqKi4NCg0KYGBgcGxhaW50ZXh0DQpOYW1hOiBCYWdhcywgUG9zaXNpOiBTdGFmDQpOYW1hOiBKb2FuLCBQb3Npc2k6IFN1cGVydmlzb3INCk5hbWE6IEFseWEsIFBvc2lzaTogU3RhZg0KTmFtYTogRHdpLCBQb3Npc2k6IE1hbmFqZXIgKEJlcmhlbnRpIGRpIHNpbmkpDQpgYGANCg0KIyMjIEphd2FiYW4NCg0KS29kZSBSIHVudHVrIHVudHVrIG1lbmFtcGlsa2FuIGthcnlhd2FuIGhpbmdnYSBtZW5lbXVrYW4gKioiTWFuYWplciIqKi4NCg0KYGBge3IsIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgRGF0YXNldCBrYXJ5YXdhbg0Ka2FyeWF3YW4gPC0gZGF0YS5mcmFtZSgNCiAgTmFtYSA9IGMoIkJhZ2FzIiwgIkpvYW4iLCAiQWx5YSIsICJEd2kiLCAiTmFiaWwiKSwNCiAgR2FqaSA9IGMoNTAwMCwgNzAwMCwgNjUwMCwgMTAwMDAsIDEyMDAwKSwNCiAgUG9zaXNpID0gYygiU3RhZiIsICJTdXBlcnZpc29yIiwgIlN0YWYiLCAiTWFuYWplciIsICJEaXJla3R1ciIpLA0KICBQZXJmb3JtYSA9IGMoIkdvb2QiLCAiVmVyeSBHb29kIiwgIkF2ZXJhZ2UiLCAiR29vZCIsICJWZXJ5IEdvb2QiKQ0KKQ0KDQojIE1lbmdndW5ha2FuIHdoaWxlIGxvb3AgdW50dWsgbWVuYW1waWxrYW4ga2FyeWF3YW4gaGluZ2dhIG1lbmVtdWthbiAiTWFuYWplciINCmkgPC0gMQ0Kd2hpbGUgKGkgPD0gbnJvdyhrYXJ5YXdhbikpIHsNCiAgY2F0KHNwcmludGYoIk5hbWE6ICVzLCBQb3Npc2k6ICVzXG4iLCBrYXJ5YXdhbiROYW1hW2ldLCBrYXJ5YXdhbiRQb3Npc2lbaV0pKQ0KICBpZiAoa2FyeWF3YW4kUG9zaXNpW2ldID09ICJNYW5hamVyIikgew0KICAgIGNhdCgiKEJlcmhlbnRpIGRpIHNpbmkpXG4iKQ0KICAgIGJyZWFrDQogIH0NCiAgaSA8LSBpICsgMQ0KfQ0KDQoNCmBgYA0KDQojIyAqKkJyZWFrKiogDQoNClVudHVrIG1lbmdoZW50aWthbiBwZXJ1bGFuZ2FuIGtldGlrYSBtZW5lbXVrYW4ga2FyeWF3YW4gZGVuZ2FuIGdhamkgbGViaWggZGFyaSAqKjEwLjAwMC4qKg0KDQoqKk91dHB1dCB5YW5nIERpaGFyYXBrYW46KioNCmBgYHBsYWludGV4dA0KTmFtYTogQmFnYXMsIEdhamk6IDUwMDANCk5hbWE6IEpvYW4sIEdhamk6IDcwMDANCk5hbWE6IEFseWEsIEdhamk6IDY1MDANCk5hbWE6IER3aSwgR2FqaTogMTAwMDANCihCZXJoZW50aSBrYXJlbmEgTmFiaWwgbWVtaWxpa2kgZ2FqaSBkaSBhdGFzIDEwLjAwMCkNCmBgYA0KIyMjIEphd2FiYW46DQoNCktvZGUgUiB1bnR1ayBtZW5naGVudGlrYW4gcGVydWxhbmdhbiBrZXRpa2EgbWVuZW11a2FuIGthcnlhd2FuIGRlbmdhbiBnYWppIGxlYmloIGRhcmkgKioxMC4wMDAuKioNCg0KYGBge3IsIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgTWVuZ2d1bmFrYW4gYnJlYWsgdW50dWsgYmVyaGVudGkgc2FhdCBtZW5lbXVrYW4gZ2FqaSBsZWJpaCBkYXJpIDEwLjAwMA0KZm9yIChpIGluIDE6bnJvdyhrYXJ5YXdhbikpIHsNCiAgY2F0KHNwcmludGYoIk5hbWE6ICVzLCBHYWppOiAlZFxuIiwga2FyeWF3YW4kTmFtYVtpXSwga2FyeWF3YW4kR2FqaVtpXSkpDQogIA0KICAjIEppa2EgZ2FqaSBsZWJpaCBkYXJpIDEwLjAwMCwgaGVudGlrYW4gcGVydWxhbmdhbg0KICBpZiAoa2FyeWF3YW4kR2FqaVtpXSA+IDEwMDAwKSB7DQogICAgY2F0KHNwcmludGYoIihCZXJoZW50aSBrYXJlbmEgJXMgbWVtaWxpa2kgZ2FqaSBkaSBhdGFzIDEwLjAwMClcbiIsIGthcnlhd2FuJE5hbWFbaV0pKQ0KICAgIGJyZWFrDQogIH0NCn0NCg0KYGBgDQoNCiMjICoqQ29udGludWUqKiANCg0KVW50dWsgbWVsZXdhdGkga2FyeWF3YW4gZGVuZ2FuIHBlcmZvcm1hICoqIkF2ZXJhZ2UiKiouDQoNCioqT3V0cHV0IHlhbmcgRGloYXJhcGthbjoqKg0KDQpgYGBwbGFpbnRleHQNCk5hbWE6IEJhZ2FzLCBQZXJmb3JtYTogR29vZA0KTmFtYTogSm9hbiwgUGVyZm9ybWE6IFZlcnkgR29vZA0KTmFtYTogRHdpLCBQZXJmb3JtYTogR29vZA0KTmFtYTogTmFiaWwsIFBlcmZvcm1hOiBWZXJ5IEdvb2QNCihBbHlhIGRpbGV3YXRpIGthcmVuYSBwZXJmb3JtYW55YSAiQXZlcmFnZSIpDQpgYGANCg0KIyMjIEphd2FiYW46DQoNCktvZGUgUiAgdW50dWsgbWVsZXdhdGkga2FyeWF3YW4gZGVuZ2FuIHBlcmZvcm1hICoqIkF2ZXJhZ2UiKiouDQoNCmBgYHtyLCBlY2hvPVRSVUUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIE1lbmdndW5ha2FuIGNvbnRpbnVlIHVudHVrIG1lbGV3YXRpIGthcnlhd2FuIGRlbmdhbiBwZXJmb3JtYSAiQXZlcmFnZSINCmZvciAoaSBpbiAxOm5yb3coa2FyeWF3YW4pKSB7DQogIGlmIChrYXJ5YXdhbiRQZXJmb3JtYVtpXSA9PSAiQXZlcmFnZSIpIHsNCiAgICBuZXh0ICAjIExld2F0aSBrYXJ5YXdhbiBkZW5nYW4gcGVyZm9ybWEgIkF2ZXJhZ2UiDQogIH0NCiAgY2F0KHNwcmludGYoIk5hbWE6ICVzLCBQZXJmb3JtYTogJXNcbiIsIGthcnlhd2FuJE5hbWFbaV0sIGthcnlhd2FuJFBlcmZvcm1hW2ldKSkNCn0NCg0KYGBgDQoNCg==