Email             :
RPubs            : https://rpubs.com/noviaanita/
Jurusan          : Fisika Medis
Address         : ARA Center, Matana University Tower
                         Jl. CBD Barat Kav, RT.1, Curug Sangereng, Kelapa Dua, Tangerang, Banten 15810.


1 Membuat Program dengan List R

1.1 Buat sebuah list untuk menyimpan 5 orang teman dekatmu

list0 = list()
list1 = list("Dhira","Rika","Meme","Sita","Dewi")
print(c(list0,list1))
## [[1]]
## [1] "Dhira"
## 
## [[2]]
## [1] "Rika"
## 
## [[3]]
## [1] "Meme"
## 
## [[4]]
## [1] "Sita"
## 
## [[5]]
## [1] "Dewi"

1.2 Pilihlah satu orang dari list tersebut yang menjadi teman paling dekatmu dengan menggunakan index

list2 = list("Dhira","Rika","Meme","Sita","Dewi")
print(list2[1])
## [[1]]
## [1] "Dhira"

1.3 Gantilah satu orang yang tidak begitu dekat denganmu dengan teman baru yang kamu temui baru-baru ini

list3 = list("Dhira","Rika","Dewi","Sita","Meme")
list3[3] = "Selena"

print(list3)
## [[1]]
## [1] "Dhira"
## 
## [[2]]
## [1] "Rika"
## 
## [[3]]
## [1] "Selena"
## 
## [[4]]
## [1] "Sita"
## 
## [[5]]
## [1] "Meme"

1.4 Bagaimana caranya anda menghitung banyak teman yang ada dalam list tersebut

length(list3)
## [1] 5

2 Buatlah contoh menyimpan sekumpulan tuple dengan R dengan mengikuti instruksi berikut:

2.1 Buatlah Tuple dengan 5 item didalamnya

library(sets)
tuple = tuple("Buku" , "Pulpen" , "Stip x" , "Pensil" , "Penghapus")

print(tuple)
## ("Buku", "Pulpen", "Stip x", "Pensil", "Penghapus")
tuple1 = tuple("Jam tangan", "Anting", "Kalung", "kacamata", "Dompet")

print(tuple1)
## ("Jam tangan", "Anting", "Kalung", "kacamata", "Dompet")

2.2 Perlihatkan cara Mengakses Nilai Tuple

library(sets
        )
tuple = tuple("Buku","Pulpen","Stip x","Pensil","Penghapus")

print(c(tuple[3]))
## ("Stip x")
library(sets)

tuple1 = tuple("Jam tangan", "Anting", "Kalung", "kacamata", "Dompet")

print(c(tuple1[2]))
## ("Anting")

2.3 Bagaimana anda melakukan Slicing Nilai Tuple

tuple = tuple("Buku", "Pulpen", "Stip x", "Pensil", "Penghapus")

print(tuple[3:5])
## ("Stip x", "Pensil", "Penghapus")
tuple1 = tuple("Jam tangan", "Anting", "Kalung", "kacamata", "Dompet")

print(tuple1[4:5])
## ("kacamata", "Dompet")

2.4 Nested Tuple

tuple = tuple("Buku", "Pulpen", "Stip x", "Pensil", "Penghapus")
tuple1 = tuple("Jam tangan", "Anting", "Kalung", "kacamata", "Dompet")
tuple2 = c(tuple, tuple1) 

print(tuple2)
## ("Buku", "Pulpen", "Stip x", "Pensil", "Penghapus", "Jam tangan",
##  "Anting", "Kalung", "kacamata", "Dompet")
tuple3 = rep(tuple, 2)
print(tuple3)
## ("Buku", "Pulpen", "Stip x", "Pensil", "Penghapus", "Buku", "Pulpen",
##  "Stip x", "Pensil", "Penghapus")

2.5 Unpacking Sequence

tuple = tuple("Buku", "Pulpen", "Stip x", "Pensil", "Penghapus")
names (tuple) = c("index1", "index2", "index3", "index4", "index5") 

print(tuple)
## (index1 = "Buku", index2 = "Pulpen", index3 = "Stip x", index4 =
##  "Pensil", index5 = "Penghapus")
tuple1 = tuple("Jam tangan", "Anting", "Kalung", "kacamata", "Dompet")
names (tuple1) = c("index1", "index2", "index3", "index4", "index5")

print(tuple1)
## (index1 = "Jam tangan", index2 = "Anting", index3 = "Kalung", index4 =
##  "kacamata", index5 = "Dompet")

3 Buatlah contoh menyimpan sekumpulan Dictionary dengan R, yang memuat type data float, integer, character, dan logical, list, tuple, dictionary dengan mengikuti instruksi berikut:

3.1 Akses suatu nilai Item dari Dictionary

library(Dict)
## 
## Attaching package: 'Dict'
## The following object is masked from 'package:sets':
## 
##     %>%
library(Dict)
Biodata = dict(
  nama = "Novia Anita",
  umur = as.integer(19),
  hobi = list("makan","baca wattpad","tidur"),
  Single = FALSE,
  sosmed = tuple(facebook = "novia labola",
                 instagram = "novia_labola"))

print(Biodata$get('sosmed')['instagram'])
## (instagram = "novia_labola")
cat("Nama saya adalah :", Biodata$get('nama'))
## Nama saya adalah : Novia Anita

3.2 Ubah suatu Nilai Item pada Dictionary

Biodata['nama'] = "Calon Istri Idaman"
print(Biodata$get('nama'))
## [1] "Calon Istri Idaman"

3.3 Menambahkan Item ke Dictionary

Biodata$add(umur=18L)
print(Biodata)
## # A tibble: 5 x 2
##   key    value     
##   <chr>  <list>    
## 1 hobi   <list [3]>
## 2 nama   <chr [1]> 
## 3 Single <lgl [1]> 
## 4 sosmed <tuple>   
## 5 umur   <int [1]>

3.4 Menghapus Item dari Dictionary

Biodata$remove('hobi')
print(Biodata)
## # A tibble: 4 x 2
##   key    value    
##   <chr>  <list>   
## 1 nama   <chr [1]>
## 2 Single <lgl [1]>
## 3 sosmed <tuple>  
## 4 umur   <int [1]>

4 Silahkan untuk menemukan operasi Pengindeksan, Pengirisan, dan Subsetting Data Frame dengan Menggunkan R.

# Membentuk Data Frame 1
df1_R = data.frame(kode = c (1:5), 
                   'Nama' = c ("Dhira", "Dewi", "Meme", "Rica", "Naufal"), 
                   'Angkatan Sekolah' = c ("2021", "2021", "2021", "2020", "2020"), 
                   'Jurusan' = c ("Keperawatan", "Keperawatan", "Teklabmed", "Farmasi", "Tkj"), 
                   'Kampus' = c ("ITKES WHS", "UNMUL", "UMKT", "UNMUL", "POLTEKKES KALTIM")
                   )
# Membentuk Data Frame 2 
df2_R = data.frame(kode = c (6:10),
                   'Nama' = c ("Novia", "Indah", "Maulida", "Nia", "Vindy"),
                   'Angkatan Sekolah' = c ("2021", "2021", "2021", "2021", "2021"),
                   'Jurusan' = c ("Keperawatan", "Keperawatan", "Keperawatan", "Keperawatan", "Keperawatan"),
                   'Kampus' = c ("Matana University","STIK Budi Kemuliaan","POLTEKKES KALTIM","STIKSAM Samarinda","UNMUL")
 
                    )
print(df1_R)   
##   kode   Nama Angkatan.Sekolah     Jurusan           Kampus
## 1    1  Dhira             2021 Keperawatan        ITKES WHS
## 2    2   Dewi             2021 Keperawatan            UNMUL
## 3    3   Meme             2021   Teklabmed             UMKT
## 4    4   Rica             2020     Farmasi            UNMUL
## 5    5 Naufal             2020         Tkj POLTEKKES KALTIM
print(df2_R)
##   kode    Nama Angkatan.Sekolah     Jurusan              Kampus
## 1    6   Novia             2021 Keperawatan   Matana University
## 2    7   Indah             2021 Keperawatan STIK Budi Kemuliaan
## 3    8 Maulida             2021 Keperawatan    POLTEKKES KALTIM
## 4    9     Nia             2021 Keperawatan   STIKSAM Samarinda
## 5   10   Vindy             2021 Keperawatan               UNMUL

4.1 Menggabungkan dua data frame

df3_R <- rbind(df1_R,df2_R)
df3_R
##    kode    Nama Angkatan.Sekolah     Jurusan              Kampus
## 1     1   Dhira             2021 Keperawatan           ITKES WHS
## 2     2    Dewi             2021 Keperawatan               UNMUL
## 3     3    Meme             2021   Teklabmed                UMKT
## 4     4    Rica             2020     Farmasi               UNMUL
## 5     5  Naufal             2020         Tkj    POLTEKKES KALTIM
## 6     6   Novia             2021 Keperawatan   Matana University
## 7     7   Indah             2021 Keperawatan STIK Budi Kemuliaan
## 8     8 Maulida             2021 Keperawatan    POLTEKKES KALTIM
## 9     9     Nia             2021 Keperawatan   STIKSAM Samarinda
## 10   10   Vindy             2021 Keperawatan               UNMUL
head(df3_R)                                                # Mencetak enam baris pertama
##   kode   Nama Angkatan.Sekolah     Jurusan            Kampus
## 1    1  Dhira             2021 Keperawatan         ITKES WHS
## 2    2   Dewi             2021 Keperawatan             UNMUL
## 3    3   Meme             2021   Teklabmed              UMKT
## 4    4   Rica             2020     Farmasi             UNMUL
## 5    5 Naufal             2020         Tkj  POLTEKKES KALTIM
## 6    6  Novia             2021 Keperawatan Matana University
tail(df3_R)                                               # Mencetak enam baris terakhir
##    kode    Nama Angkatan.Sekolah     Jurusan              Kampus
## 5     5  Naufal             2020         Tkj    POLTEKKES KALTIM
## 6     6   Novia             2021 Keperawatan   Matana University
## 7     7   Indah             2021 Keperawatan STIK Budi Kemuliaan
## 8     8 Maulida             2021 Keperawatan    POLTEKKES KALTIM
## 9     9     Nia             2021 Keperawatan   STIKSAM Samarinda
## 10   10   Vindy             2021 Keperawatan               UNMUL

4.2 Ekstraksi Data Frame

typeof(df3_R)                                               # Cek tipe data
## [1] "list"
class(df3_R)                                                # Cek tipe data
## [1] "data.frame"
df3_R[1,5]                                                 # ekstrak elemen di baris ke-1 dan kolom ke-5 
## [1] "ITKES WHS"
df3_R$Nama                                                 # ekstrak spesifik kolom (`nama`)
##  [1] "Dhira"   "Dewi"    "Meme"    "Rica"    "Naufal"  "Novia"   "Indah"  
##  [8] "Maulida" "Nia"     "Vindy"
df3_R[,c('Nama','Jurusan')]                                # ekstrak spesifik kolom (`nama, jurusan`)
##       Nama     Jurusan
## 1    Dhira Keperawatan
## 2     Dewi Keperawatan
## 3     Meme   Teklabmed
## 4     Rica     Farmasi
## 5   Naufal         Tkj
## 6    Novia Keperawatan
## 7    Indah Keperawatan
## 8  Maulida Keperawatan
## 9      Nia Keperawatan
## 10   Vindy Keperawatan
df3_R[1:5,]                                                # ekstrak lima baris pertama df3_R 
##   kode   Nama Angkatan.Sekolah     Jurusan           Kampus
## 1    1  Dhira             2021 Keperawatan        ITKES WHS
## 2    2   Dewi             2021 Keperawatan            UNMUL
## 3    3   Meme             2021   Teklabmed             UMKT
## 4    4   Rica             2020     Farmasi            UNMUL
## 5    5 Naufal             2020         Tkj POLTEKKES KALTIM
df3_R[,1:4]                                                # ekstrak empat kolom pertama df3_R
##    kode    Nama Angkatan.Sekolah     Jurusan
## 1     1   Dhira             2021 Keperawatan
## 2     2    Dewi             2021 Keperawatan
## 3     3    Meme             2021   Teklabmed
## 4     4    Rica             2020     Farmasi
## 5     5  Naufal             2020         Tkj
## 6     6   Novia             2021 Keperawatan
## 7     7   Indah             2021 Keperawatan
## 8     8 Maulida             2021 Keperawatan
## 9     9     Nia             2021 Keperawatan
## 10   10   Vindy             2021 Keperawatan
subset(df3_R, select=5)                                   # ekstrak/subset spesifik kolom
##                 Kampus
## 1            ITKES WHS
## 2                UNMUL
## 3                 UMKT
## 4                UNMUL
## 5     POLTEKKES KALTIM
## 6    Matana University
## 7  STIK Budi Kemuliaan
## 8     POLTEKKES KALTIM
## 9    STIKSAM Samarinda
## 10               UNMUL
subset(df3_R, select= c(2,3))                              # ekstrak/subset kolom kedua dan ketiga 
##       Nama Angkatan.Sekolah
## 1    Dhira             2021
## 2     Dewi             2021
## 3     Meme             2021
## 4     Rica             2020
## 5   Naufal             2020
## 6    Novia             2021
## 7    Indah             2021
## 8  Maulida             2021
## 9      Nia             2021
## 10   Vindy             2021
subset(df3_R, select= c(4:5))                               # ekstrak/subset kolom tertentu
##        Jurusan              Kampus
## 1  Keperawatan           ITKES WHS
## 2  Keperawatan               UNMUL
## 3    Teklabmed                UMKT
## 4      Farmasi               UNMUL
## 5          Tkj    POLTEKKES KALTIM
## 6  Keperawatan   Matana University
## 7  Keperawatan STIK Budi Kemuliaan
## 8  Keperawatan    POLTEKKES KALTIM
## 9  Keperawatan   STIKSAM Samarinda
## 10 Keperawatan               UNMUL

5 Buatlah operasi Ganti Nama Variabel pada suatu Data Frame dengan menggunakan R

rename_1<-df3_R
names(rename_1)<-c("no",
                "Nama",
                "Angkatan Sekolah",
                "Jurusan",
                "Kampus") 
rename_1
##    no    Nama Angkatan Sekolah     Jurusan              Kampus
## 1   1   Dhira             2021 Keperawatan           ITKES WHS
## 2   2    Dewi             2021 Keperawatan               UNMUL
## 3   3    Meme             2021   Teklabmed                UMKT
## 4   4    Rica             2020     Farmasi               UNMUL
## 5   5  Naufal             2020         Tkj    POLTEKKES KALTIM
## 6   6   Novia             2021 Keperawatan   Matana University
## 7   7   Indah             2021 Keperawatan STIK Budi Kemuliaan
## 8   8 Maulida             2021 Keperawatan    POLTEKKES KALTIM
## 9   9     Nia             2021 Keperawatan   STIKSAM Samarinda
## 10 10   Vindy             2021 Keperawatan               UNMUL
LS0tDQp0aXRsZTogIkFsZ29yaXRtYSBkYW4gU3RydWt0dXIgRGF0YSINCnN1YnRpdGxlOiAiVHVnYXMgMyINCmF1dGhvcjogIk5vdmlhIEFuaXRhICgyMDIxNDUyMDAwOCkiDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50OiANCiAgICBodG1sX2RvY3VtZW50OiBudWxsDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6DQogICAgICBjb2xsYXBzZWQ6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgdGhlbWU6IHNhbmRzdG9uZQ0KICAgIGNzczogc3R5bGUxLmNzcw0KICAgIGhpZ2hsaWdodDogbW9ub2Nocm9tZQ0KLS0tDQoNCg0KPGltZyBzdHlsZT0iZmxvYXQ6IHJpZ2h0OyBtYXJnaW46IDBweCAxMDBweCAwcHggMHB4OyB3aWR0aDoyNSUiIHNyYz0ibm92aWEuSlBHIi8+IA0KDQpgYGB7ciBsb2dvLCBlY2hvPUZBTFNFLGZpZy5hbGlnbj0nY2VudGVyJywgb3V0LndpZHRoID0gJzMwJSd9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygibG9nb21hdGFuYS5wbmciKQ0KYGBgDQoNCkVtYWlsICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyZuYnNwOzogIG5vdmlhYWxibDAyQGdtYWlsLmNvbSA8YnI+DQpSUHVicyAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7OiBodHRwczovL3JwdWJzLmNvbS9ub3ZpYWFuaXRhLyA8YnI+DQpKdXJ1c2FuICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs6IFtGaXNpa2EgTWVkaXNdKGh0dHBzOi8vbWF0YW5hdW5pdmVyc2l0eS5hYy5pZC8/bHk9YWNhZGVtaWMmYz1zYikgPGJyPg0KQWRkcmVzcyAgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDogQVJBIENlbnRlciwgTWF0YW5hIFVuaXZlcnNpdHkgVG93ZXIgPGJyPg0KJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsmbmJzcDsgSmwuIENCRCBCYXJhdCBLYXYsIFJULjEsIEN1cnVnIFNhbmdlcmVuZywgS2VsYXBhIER1YSwgVGFuZ2VyYW5nLCBCYW50ZW4gMTU4MTAuDQoNCioqKioNCg0KDQoNCg0KDQojICBNZW1idWF0IFByb2dyYW0gZGVuZ2FuIExpc3QgUiANCg0KIyMgQnVhdCBzZWJ1YWggbGlzdCB1bnR1ayBtZW55aW1wYW4gNSBvcmFuZyB0ZW1hbiBkZWthdG11DQoNCmBgYHtyfQ0KbGlzdDAgPSBsaXN0KCkNCmxpc3QxID0gbGlzdCgiRGhpcmEiLCJSaWthIiwiTWVtZSIsIlNpdGEiLCJEZXdpIikNCnByaW50KGMobGlzdDAsbGlzdDEpKQ0KYGBgDQoNCg0KIyMgUGlsaWhsYWggc2F0dSBvcmFuZyBkYXJpIGxpc3QgdGVyc2VidXQgeWFuZyBtZW5qYWRpIHRlbWFuIHBhbGluZyBkZWthdG11ICBkZW5nYW4gbWVuZ2d1bmFrYW4gaW5kZXgNCg0KYGBge3J9DQpsaXN0MiA9IGxpc3QoIkRoaXJhIiwiUmlrYSIsIk1lbWUiLCJTaXRhIiwiRGV3aSIpDQpwcmludChsaXN0MlsxXSkNCmBgYA0KDQoNCiMjIEdhbnRpbGFoIHNhdHUgb3JhbmcgeWFuZyB0aWRhayBiZWdpdHUgZGVrYXQgZGVuZ2FubXUgZGVuZ2FuIHRlbWFuIGJhcnUgeWFuZyBrYW11IHRlbXVpIGJhcnUtYmFydSBpbmkNCg0KYGBge3J9DQpsaXN0MyA9IGxpc3QoIkRoaXJhIiwiUmlrYSIsIkRld2kiLCJTaXRhIiwiTWVtZSIpDQpsaXN0M1szXSA9ICJTZWxlbmEiDQoNCnByaW50KGxpc3QzKQ0KDQpgYGANCg0KDQojIyBCYWdhaW1hbmEgY2FyYW55YSBhbmRhIG1lbmdoaXR1bmcgYmFueWFrIHRlbWFuIHlhbmcgYWRhIGRhbGFtIGxpc3QgdGVyc2VidXQNCg0KYGBge3J9DQpsZW5ndGgobGlzdDMpDQpgYGANCg0KDQoNCiMgICBCdWF0bGFoIGNvbnRvaCBtZW55aW1wYW4gc2VrdW1wdWxhbiB0dXBsZSBkZW5nYW4gUiBkZW5nYW4gbWVuZ2lrdXRpIGluc3RydWtzaSBiZXJpa3V0Og0KDQoNCiMjIEJ1YXRsYWggVHVwbGUgZGVuZ2FuIDUgaXRlbSBkaWRhbGFtbnlhDQoNCmBgYHtyfQ0KbGlicmFyeShzZXRzKQ0KdHVwbGUgPSB0dXBsZSgiQnVrdSIgLCAiUHVscGVuIiAsICJTdGlwIHgiICwgIlBlbnNpbCIgLCAiUGVuZ2hhcHVzIikNCg0KcHJpbnQodHVwbGUpDQpgYGANCg0KYGBge3J9DQp0dXBsZTEgPSB0dXBsZSgiSmFtIHRhbmdhbiIsICJBbnRpbmciLCAiS2FsdW5nIiwgImthY2FtYXRhIiwgIkRvbXBldCIpDQoNCnByaW50KHR1cGxlMSkNCmBgYA0KDQoNCiMjIFBlcmxpaGF0a2FuIGNhcmEgTWVuZ2Frc2VzIE5pbGFpIFR1cGxlDQoNCmBgYHtyfQ0KbGlicmFyeShzZXRzDQogICAgICAgICkNCnR1cGxlID0gdHVwbGUoIkJ1a3UiLCJQdWxwZW4iLCJTdGlwIHgiLCJQZW5zaWwiLCJQZW5naGFwdXMiKQ0KDQpwcmludChjKHR1cGxlWzNdKSkNCg0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShzZXRzKQ0KDQp0dXBsZTEgPSB0dXBsZSgiSmFtIHRhbmdhbiIsICJBbnRpbmciLCAiS2FsdW5nIiwgImthY2FtYXRhIiwgIkRvbXBldCIpDQoNCnByaW50KGModHVwbGUxWzJdKSkNCmBgYA0KDQoNCiMjIEJhZ2FpbWFuYSBhbmRhIG1lbGFrdWthbiBTbGljaW5nIE5pbGFpIFR1cGxlDQoNCmBgYHtyfQ0KdHVwbGUgPSB0dXBsZSgiQnVrdSIsICJQdWxwZW4iLCAiU3RpcCB4IiwgIlBlbnNpbCIsICJQZW5naGFwdXMiKQ0KDQpwcmludCh0dXBsZVszOjVdKQ0KYGBgDQpgYGB7cn0NCnR1cGxlMSA9IHR1cGxlKCJKYW0gdGFuZ2FuIiwgIkFudGluZyIsICJLYWx1bmciLCAia2FjYW1hdGEiLCAiRG9tcGV0IikNCg0KcHJpbnQodHVwbGUxWzQ6NV0pDQpgYGANCg0KDQojIyBOZXN0ZWQgVHVwbGUNCg0KYGBge3J9DQp0dXBsZSA9IHR1cGxlKCJCdWt1IiwgIlB1bHBlbiIsICJTdGlwIHgiLCAiUGVuc2lsIiwgIlBlbmdoYXB1cyIpDQp0dXBsZTEgPSB0dXBsZSgiSmFtIHRhbmdhbiIsICJBbnRpbmciLCAiS2FsdW5nIiwgImthY2FtYXRhIiwgIkRvbXBldCIpDQp0dXBsZTIgPSBjKHR1cGxlLCB0dXBsZTEpIA0KDQpwcmludCh0dXBsZTIpDQpgYGANCg0KYGBge3J9DQp0dXBsZTMgPSByZXAodHVwbGUsIDIpDQpwcmludCh0dXBsZTMpDQpgYGANCg0KDQojIyBVbnBhY2tpbmcgU2VxdWVuY2UgDQoNCmBgYHtyfQ0KdHVwbGUgPSB0dXBsZSgiQnVrdSIsICJQdWxwZW4iLCAiU3RpcCB4IiwgIlBlbnNpbCIsICJQZW5naGFwdXMiKQ0KbmFtZXMgKHR1cGxlKSA9IGMoImluZGV4MSIsICJpbmRleDIiLCAiaW5kZXgzIiwgImluZGV4NCIsICJpbmRleDUiKSANCg0KcHJpbnQodHVwbGUpDQpgYGANCg0KYGBge3J9DQp0dXBsZTEgPSB0dXBsZSgiSmFtIHRhbmdhbiIsICJBbnRpbmciLCAiS2FsdW5nIiwgImthY2FtYXRhIiwgIkRvbXBldCIpDQpuYW1lcyAodHVwbGUxKSA9IGMoImluZGV4MSIsICJpbmRleDIiLCAiaW5kZXgzIiwgImluZGV4NCIsICJpbmRleDUiKQ0KDQpwcmludCh0dXBsZTEpDQpgYGANCg0KDQoNCiMgICBCdWF0bGFoIGNvbnRvaCBtZW55aW1wYW4gc2VrdW1wdWxhbiBEaWN0aW9uYXJ5IGRlbmdhbiBSLCB5YW5nIG1lbXVhdCB0eXBlIGRhdGEgZmxvYXQsIGludGVnZXIsIGNoYXJhY3RlciwgZGFuIGxvZ2ljYWwsIGxpc3QsIHR1cGxlLCBkaWN0aW9uYXJ5IGRlbmdhbiBtZW5naWt1dGkgaW5zdHJ1a3NpIGJlcmlrdXQ6DQoNCg0KIyMgQWtzZXMgc3VhdHUgbmlsYWkgSXRlbSBkYXJpIERpY3Rpb25hcnkgDQoNCg0KYGBge3J9DQpsaWJyYXJ5KERpY3QpDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KERpY3QpDQpCaW9kYXRhID0gZGljdCgNCiAgbmFtYSA9ICJOb3ZpYSBBbml0YSIsDQogIHVtdXIgPSBhcy5pbnRlZ2VyKDE5KSwNCiAgaG9iaSA9IGxpc3QoIm1ha2FuIiwiYmFjYSB3YXR0cGFkIiwidGlkdXIiKSwNCiAgU2luZ2xlID0gRkFMU0UsDQogIHNvc21lZCA9IHR1cGxlKGZhY2Vib29rID0gIm5vdmlhIGxhYm9sYSIsDQogICAgICAgICAgICAgICAgIGluc3RhZ3JhbSA9ICJub3ZpYV9sYWJvbGEiKSkNCg0KcHJpbnQoQmlvZGF0YSRnZXQoJ3Nvc21lZCcpWydpbnN0YWdyYW0nXSkNCg0KYGBgDQoNCmBgYHtyfQ0KY2F0KCJOYW1hIHNheWEgYWRhbGFoIDoiLCBCaW9kYXRhJGdldCgnbmFtYScpKQ0KYGBgDQoNCiMjIFViYWggc3VhdHUgTmlsYWkgSXRlbSBwYWRhIERpY3Rpb25hcnkNCg0KYGBge3J9DQpCaW9kYXRhWyduYW1hJ10gPSAiQ2Fsb24gSXN0cmkgSWRhbWFuIg0KcHJpbnQoQmlvZGF0YSRnZXQoJ25hbWEnKSkNCmBgYA0KDQoNCiMjIE1lbmFtYmFoa2FuIEl0ZW0ga2UgRGljdGlvbmFyeQ0KDQpgYGB7cn0NCkJpb2RhdGEkYWRkKHVtdXI9MThMKQ0KcHJpbnQoQmlvZGF0YSkNCmBgYA0KDQoNCiMjIE1lbmdoYXB1cyBJdGVtIGRhcmkgRGljdGlvbmFyeQ0KDQpgYGB7cn0NCkJpb2RhdGEkcmVtb3ZlKCdob2JpJykNCnByaW50KEJpb2RhdGEpDQpgYGANCg0KDQoNCiMgIFNpbGFoa2FuIHVudHVrIG1lbmVtdWthbiBvcGVyYXNpIFBlbmdpbmRla3NhbiwgUGVuZ2lyaXNhbiwgZGFuIFN1YnNldHRpbmcgRGF0YSBGcmFtZSBkZW5nYW4gTWVuZ2d1bmthbiBSLg0KDQoNCmBgYHtyfQ0KIyBNZW1iZW50dWsgRGF0YSBGcmFtZSAxDQpkZjFfUiA9IGRhdGEuZnJhbWUoa29kZSA9IGMgKDE6NSksIA0KICAgICAgICAgICAgICAgICAgICdOYW1hJyA9IGMgKCJEaGlyYSIsICJEZXdpIiwgIk1lbWUiLCAiUmljYSIsICJOYXVmYWwiKSwgDQogICAgICAgICAgICAgICAgICAgJ0FuZ2thdGFuIFNla29sYWgnID0gYyAoIjIwMjEiLCAiMjAyMSIsICIyMDIxIiwgIjIwMjAiLCAiMjAyMCIpLCANCiAgICAgICAgICAgICAgICAgICAnSnVydXNhbicgPSBjICgiS2VwZXJhd2F0YW4iLCAiS2VwZXJhd2F0YW4iLCAiVGVrbGFibWVkIiwgIkZhcm1hc2kiLCAiVGtqIiksIA0KICAgICAgICAgICAgICAgICAgICdLYW1wdXMnID0gYyAoIklUS0VTIFdIUyIsICJVTk1VTCIsICJVTUtUIiwgIlVOTVVMIiwgIlBPTFRFS0tFUyBLQUxUSU0iKQ0KICAgICAgICAgICAgICAgICAgICkNCiMgTWVtYmVudHVrIERhdGEgRnJhbWUgMiANCmRmMl9SID0gZGF0YS5mcmFtZShrb2RlID0gYyAoNjoxMCksDQogICAgICAgICAgICAgICAgICAgJ05hbWEnID0gYyAoIk5vdmlhIiwgIkluZGFoIiwgIk1hdWxpZGEiLCAiTmlhIiwgIlZpbmR5IiksDQogICAgICAgICAgICAgICAgICAgJ0FuZ2thdGFuIFNla29sYWgnID0gYyAoIjIwMjEiLCAiMjAyMSIsICIyMDIxIiwgIjIwMjEiLCAiMjAyMSIpLA0KICAgICAgICAgICAgICAgICAgICdKdXJ1c2FuJyA9IGMgKCJLZXBlcmF3YXRhbiIsICJLZXBlcmF3YXRhbiIsICJLZXBlcmF3YXRhbiIsICJLZXBlcmF3YXRhbiIsICJLZXBlcmF3YXRhbiIpLA0KICAgICAgICAgICAgICAgICAgICdLYW1wdXMnID0gYyAoIk1hdGFuYSBVbml2ZXJzaXR5IiwiU1RJSyBCdWRpIEtlbXVsaWFhbiIsIlBPTFRFS0tFUyBLQUxUSU0iLCJTVElLU0FNIFNhbWFyaW5kYSIsIlVOTVVMIikNCiANCiAgICAgICAgICAgICAgICAgICAgKQ0KcHJpbnQoZGYxX1IpICAgDQpwcmludChkZjJfUikNCmBgYA0KDQoNCiMjICBNZW5nZ2FidW5na2FuIGR1YSBkYXRhIGZyYW1lDQoNCmBgYHtyfQ0KZGYzX1IgPC0gcmJpbmQoZGYxX1IsZGYyX1IpDQpkZjNfUg0KYGBgDQoNCmBgYHtyfQ0KaGVhZChkZjNfUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1lbmNldGFrIGVuYW0gYmFyaXMgcGVydGFtYQ0KYGBgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KYGBge3J9DQp0YWlsKGRmM19SKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNZW5jZXRhayBlbmFtIGJhcmlzIHRlcmFraGlyDQpgYGANCg0KDQojIyBFa3N0cmFrc2kgRGF0YSBGcmFtZQ0KDQoNCmBgYHtyfQ0KdHlwZW9mKGRmM19SKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDZWsgdGlwZSBkYXRhDQoNCmNsYXNzKGRmM19SKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ2VrIHRpcGUgZGF0YQ0KYGBgDQoNCmBgYHtyfQ0KZGYzX1JbMSw1XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGVrc3RyYWsgZWxlbWVuIGRpIGJhcmlzIGtlLTEgZGFuIGtvbG9tIGtlLTUgDQpgYGANCg0KYGBge3J9DQpkZjNfUiROYW1hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZWtzdHJhayBzcGVzaWZpayBrb2xvbSAoYG5hbWFgKQ0KDQpkZjNfUlssYygnTmFtYScsJ0p1cnVzYW4nKV0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZWtzdHJhayBzcGVzaWZpayBrb2xvbSAoYG5hbWEsIGp1cnVzYW5gKQ0KYGBgDQoNCmBgYHtyfQ0KZGYzX1JbMTo1LF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGVrc3RyYWsgbGltYSBiYXJpcyBwZXJ0YW1hIGRmM19SIA0KDQpkZjNfUlssMTo0XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZWtzdHJhayBlbXBhdCBrb2xvbSBwZXJ0YW1hIGRmM19SDQpgYGANCg0KYGBge3J9DQpzdWJzZXQoZGYzX1IsIHNlbGVjdD01KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBla3N0cmFrL3N1YnNldCBzcGVzaWZpayBrb2xvbQ0KYGBgDQoNCmBgYHtyfQ0Kc3Vic2V0KGRmM19SLCBzZWxlY3Q9IGMoMiwzKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGVrc3RyYWsvc3Vic2V0IGtvbG9tIGtlZHVhIGRhbiBrZXRpZ2EgDQpgYGANCg0KYGBge3J9DQpzdWJzZXQoZGYzX1IsIHNlbGVjdD0gYyg0OjUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGVrc3RyYWsvc3Vic2V0IGtvbG9tIHRlcnRlbnR1DQpgYGANCg0KDQojIEJ1YXRsYWggb3BlcmFzaSBHYW50aSBOYW1hIFZhcmlhYmVsIHBhZGEgc3VhdHUgRGF0YSBGcmFtZSBkZW5nYW4gbWVuZ2d1bmFrYW4gUg0KDQoNCmBgYHtyfQ0KcmVuYW1lXzE8LWRmM19SDQpuYW1lcyhyZW5hbWVfMSk8LWMoIm5vIiwNCiAgICAgICAgICAgICAgICAiTmFtYSIsDQogICAgICAgICAgICAgICAgIkFuZ2thdGFuIFNla29sYWgiLA0KICAgICAgICAgICAgICAgICJKdXJ1c2FuIiwNCiAgICAgICAgICAgICAgICAiS2FtcHVzIikgDQpyZW5hbWVfMQ0KYGBgDQoNCg0KDQo=