Pertama, mereka datang


29

"Pertama mereka datang ..." adalah sebuah puisi karya Martin Niemöller :

First they came for the Socialists, and I did not speak out-
Because I was not a Socialist.

Then they came for the Trade Unionists, and I did not speak out-
Because I was not a Trade Unionist.

Then they came for the Jews, and I did not speak out-
Because I was not a Jew.

Then they came for me-and there was no one left to speak for me.

Tugas Anda adalah menampilkan yang di atas. Ini adalah , jadi kode terpendek dalam byte menang!

Aturan

  • Anda dapat memasukkan ruang kosong ekstra yang tidak memengaruhi penampilan. Satu baris baru yang dibuntuti diizinkan.
  • Jika tidak, output harus sama persis, termasuk lokasi baris baru.
  • Sesuai standar meta, Anda dapat menampilkan daftar string. Namun, Anda harus memasukkan garis kosong.

Perhatikan bahwa saya pribadi percaya ini bukan penipuan karena bagaimana puisi itu diletakkan - perlu kreativitas untuk bermain golf. Diskusi meta tentang apakah ini adalah penipuan atau tidak dapat ditemukan di sini .


7
Saya tidak yakin apa ini menambah situs di atas dan di luar tantangan RickRoll.
AdmBorkBork

7
Saya tidak suka palu ricroll dupes di sini.
programmer5000


11
Untuk sekali ini, saya rasa ini bukan penipuan Rickroll. Ada struktur yang bermakna di sini. Paralelisme memungkinkan dari berbagai strategi. Pembukaan kembali.
xnor

3
Struktur adalah argumen yang mendukung menjadi penipu rickroll, bukan menentang.
Peter Taylor

Jawaban:


8

SOGL V0.12 , 103 102 101 byte

 →∑‘¾ο╤Ε9‘}ψ⁴‘¹"4¡‘Q°‘:¹¹I{ū_:¹"Eā/}l6⁸SÆ□⁴↔b⅜╬I℮;YΥηκ*█⅞F^Κ⅜⁸{x⅔⁵⅟╚?Z‘O}"Ι╚╬√⅔δηvΧχ⁷⁾Η<υL┼!Ο'μΠ⁵╝⁷‘⁾

Coba Di Sini!

Penjelasan (di sini saya mengganti string yang dikompresi dengan ..untuk menghemat ruang):

..‘.‘..‘                              push "socialist", "trade unionist" and "jew"
        ¹                             wrap in an array: ["socialist", "trade unionist", "jew"]
         "..‘..‘                      push "first" and "then"
                :                     duplicate the then
                 ¹                    wrap in an array: ["first","then","then"]
                  ¹                   wrap those two in an array: [["socialist", "trade unionist", "jew"], ["first","then","then"]]
                   I                  rotate clockwise: [[first,socialist], [then,trade unionist], [then,jew]]
                    {         }       for each do, pushing the array
                     ū                  uppercase the 1st letter of each word in the array - ["First", "Socialist"]
                      _                 splat the contents on the stack   "First", "Socialist"
                       :                duplicate the 2nd one             "First", "Socialist", "Socialist"
                        ¹               wrap in an array                  ["First", "Socialist", "Socialist"]
                         "..‘           push "ŗ they came for the ŗs, and I did not speak out-\nBecause I was not a ŗ." with ŗ replaced with its appropriate item in the array
                             O          output that
                               "..‘   push "then they came for me-and there was no one left to speak for me."
                                   ⁾  uppercase the 1st letter of it
                                      implicitly output it in a new line

Bisakah Anda menambahkan penjelasan?
Nzall

@Nzall Lupa untuk, menulis
dzaima

@Nzall Menambahkan penjelasan
dzaima

7

6502 kode mesin (C64), 229 byte

Jenis membosankan, masih bisa dilakukan pada C64 dengan agak jumlah yang layak byte :)

00 C0 A9 17 8D 18 D0 A2 2C 86 FE A6 FE A0 C0 BD B6 C0 20 1E AB C6 FE 10 F2 60
C6 49 52 53 54 20 00 D4 48 45 4E 20 00 54 48 45 20 00 54 48 45 59 20 43 41 4D
45 20 00 46 4F 52 20 00 53 50 45 41 4B 20 00 41 4E 44 20 C9 20 44 49 44 20 4E
4F 54 20 00 4F 55 54 2D 0D 00 C2 45 43 41 55 53 45 20 C9 20 57 41 53 20 4E 4F
54 20 41 20 00 4D 45 2D 41 4E 44 20 54 48 45 52 45 20 57 41 53 20 4E 4F 20 4F
4E 45 20 4C 45 46 54 20 54 4F 20 00 4D 45 2E 00 2E 0D 00 53 2C 20 00 D3 4F 43
49 41 4C 49 53 54 00 D4 52 41 44 45 20 D5 4E 49 4F 4E 49 53 54 00 CA 45 57 00
0D 00 8C 35 3A 6B 2A 1F B4 90 B0 56 50 3A 41 93 B0 25 35 2A 1F B4 90 A1 56 50
3A 41 93 A1 25 35 2A 1F B4 90 97 56 50 3A 41 93 97 25 35 2A 18

Demo online

Pemakaian: SYS49152

Penjelasan:

Karena ini sebagian besar berisi data, alih-alih daftar pembongkaran yang tidak berarti, inilah ca65sumber rakitan-gaya yang membuat kode mesin ini:

.segment "LDADDR"
                .word   $c000           ; load address
.code
                lda     #$17            ; upper/lower mode
                sta     $d018           ; store in VIC register
                ldx     #revpoemsize    ; initialize ...
                stx     $fe             ; ... counter
loop:           ldx     $fe             ; load current position
                ldy     #$c0            ; highbyte of strings always same
                lda     revpoem,x       ; load lowbyte from table
                jsr     $ab1e           ; output 0-terminated string
                dec     $fe             ; decrement position
                bpl     loop            ; >=0 ? -> repeat
                rts                     ; done

first:          .byte   "First ", 0
then:           .byte   "Then ", 0
the:            .byte   "the ", 0
came:           .byte   "they came ", 0
for:            .byte   "for ", 0
speak:          .byte   "speak ", 0
didnot:         .byte   "and I did not ", 0
out:            .byte   "out-", $d, 0
wasnot:         .byte   "Because I was not a ", 0
noone:          .byte   "me-and there was no one left to ", 0
me:             .byte   "me.", 0
period:         .byte   ".", $d, 0
comma:          .byte   "s, ", 0
socialist:      .byte   "Socialist", 0
unionist:       .byte   "Trade Unionist", 0
jew:            .byte   "Jew", 0
p:              .byte   $d, 0

revpoem:        .byte   <me, <for, <speak, <noone, <came, <then, <p
                .byte   <period, <jew, <wasnot, <out, <speak, <didnot
                .byte   <comma, <jew, <the, <for, <came, <then, <p, <period
                .byte   <unionist, <wasnot, <out, <speak, <didnot, <comma
                .byte   <unionist, <the, <for, <came, <then, <p, <period
                .byte   <socialist, <wasnot, <out, <speak, <didnot, <comma
                .byte   <socialist, <the, <for, <came, <first
revpoemsize     = * - revpoem - 1


4

Perl 6 , 193 byte

say join ' they came for ','First'Socialist "Trade Unionist" Jew».map({"the {$_}s, but I did not speak out-
because I was not a $_.

Then"}),'me- and there was no one left to speak for me.'

Cobalah online!


4

Perl 5 , 185 byte

print join" they came for ",First,(map"the ${_}s, and I did not speak out-
Because I was not a $_.

Then",Socialist,"Trade Unionist",Jew),"me-and there was no one left to speak for me."

Cobalah online!

Terima kasih kepada @ Massa untuk -3 byte!


Gunakan Gabung dan Anda dapat memotong sekitar lima kursi atau lebih
Massa

@Massa tidak yakin saya melihat caranya! Ada petunjuk lagi?
Dom Hastings

Saya di ponsel saya sekarang, tetapi lihat jawaban perl6 saya di bawah ini!
Massa

@Massa Ahhh, bagus! Terima kasih! -3 pada akhirnya :)
Dom Hastings

3

C, 248 byte

Terima kasih kepada @ Zacharý karena telah menghemat 9 byte.

p(x,y){printf("%s they came for the %ss, and I did not speak out-\nBecause I was not a %s.\n\n",x,y,y);}f(){p("First","Socialist");p("Then","Trade Unionist");p("Then","Jew");puts("Then they came for me-and there was no one left to speak for me.");}

Cobalah online!


Bisakah Anda pindah slangsung ke printfpernyataan itu?
Zacharý

@ Zacharya Ya, tentu saja.
Steadybox

3

C # (.NET Core) , 248 246 242 byte

a=>{string b=@", and I did not speak out-
Because I was not a ",c=" they came for ",d="Socialist",e="Trade Unionist";return$@"First{c+d}s{b+d}.

Then{c+e}s{b+e}.

Then{c}the Jews{b}Jew.

Then{c}me-and there was no one left to speak for me.";}

Baris baru yang sebenarnya menyelamatkan saya beberapa byte.

Cobalah online!

Disimpan 2 byte berkat Business Cat


3

Python 3 , 203 byte

print('First',*[f'the {s}s, and I did not speak out-\nBecause I was not a {s}.\n\nThen'for s in['Socialist','Trade Unionist','Jew']],'me-and there was no one left to speak for me.',sep=' they came for ')

Cobalah online!


September = adalah langkah jenius! :-)
Massa

3

Befunge-93 , 348 byte

".em rof kaeps ot tfel eno on saw ereht dna-em rof emac yeht nehT"52*:v
v"d not speak out-"*25"Because I was not a "<   p5-2*89p1-2*89"vvJew."<
> "id I dna ">",sweJ>v"67+2p66+5p     v     ^p2-2*89"vTrade Unionist."<
>"tsriF">:#,v>",stsinoinU edarTv"67+3pv     ^   p3+66p40"^_Socialist."<
>"nehT"52*: v>",stsilaicoS@"67+3p     >" eht rof emac yeht "

Cobalah online!


3

Befunge, 293 274 270 bytes

62574732594932584832001v_@#:\0\!<
0-*84g+3/"P"\%"P"::+p00<_|#:-1g0
84!-"*":g+3/"P"\%"P"::+1\<+1_$#:^#-2\,-**
&First0 they came for %the Qs, and I did not speak out-*Because I was not a (.**
ThenOme-and there was no one left to speak for me.*$Jew*Socialist/Trade Unionist

Cobalah online!

Ini adalah pendekatan yang berbeda dengan solusi Befunge yang ada. Ini menggunakan semacam daftar tertaut untuk menyimpan kamus dari frasa umum, dan kemudian hanya memiliki daftar sederhana nilai-nilai pada tumpukan yang mewakili urutan di mana frasa tersebut harus dikeluarkan.


2

Retina , 176 byte


 Socialists, Trade Unionists, Jews,1me-and there was no one left to2for me.
( .+?)s,
1the$& and I did not2out-¶Because I was not a$1.¶¶Then
^
First
1
 they came for 
2
 speak 

Cobalah online! Penjelasan: 1dan 2hanya diulang string yang cukup lama untuk menjadi layak deduplicating. Kemudian Firstditambahkan untuk memudahkan memilih placeholder untuk porsi berulang, "mereka datang untuk [grup], dan saya tidak berbicara-Karena saya bukan [grup]. Lalu", yang diperluas oleh tahap kedua.


2

JavaScript (ES6), 231 227 223 221 byte

_=>`First${t=" they came for "}the Socialist${a=`s, and I did not speak out-
Because I was not a `}Socialist${t=`.

Then`+t}the ${(u="Trade Unionist")+a+u+t}the Jew${a}Jew${t}me-and there was no one left to speak for me.`

Cobalah

o.innerText=(
_=>`First${t=" they came for "}the Socialist${a=`s, and I did not speak out-
Because I was not a `}Socialist${t=`.

Then`+t}the ${(u="Trade Unionist")+a+u+t}the Jew${a}Jew${t}me-and there was no one left to speak for me.`
)()
<pre id=o>


2

Java 8, 250 236 byte

o->{String t=" they came for ",r="First";for(String s:"Socialist,Trade Unionist,Jew".split(","))r+=t+"the "+s+"s, and I did not speak out-\nBecause I was not a "+s+".\n\nThen";return r+t+"me-and there was no one left to speak for me.";}

Coba di sini.


2

JavaScript (ES6), 210 207 206 203 byte

Pendekatan yang berbeda untuk solusi saya yang lain jadi saya pikir itu layak untuk diedit ke jawabannya sendiri sekarang karena tantangan telah dibuka kembali.

_=>`First${["Socialist","Trade Unionist","Jew"].map(x=>t+`the ${x}s, and I did not speak out-
Because I was not a ${x}.

Then`,t=` they came for `).join``+t}me-and there was no one left to speak for me.`

Cobalah

o.innerText=(
_=>`First${["Socialist","Trade Unionist","Jew"].map(x=>t+`the ${x}s, and I did not speak out-
Because I was not a ${x}.

Then`,t=` they came for `).join``+t}me-and there was no one left to speak for me.`
)()
<pre id=o>


2

Gaia , 179 175 byte

⇓“the ”3ṁ“s, and I did not speak out-¶Because I was not a ”2ṃ“.¶¶Then
“ they came for 
First”“Socialist“Trade Unionist“Jew”↓¦⇑“me-and there was no one left to speak for me.”]$

Cobalah online!

Penjelasan

3 fungsi didefinisikan di sini (1 per baris). Yang bawah disebut pertama. digantikan oleh baris baru.

⇓“the ”3ṁ“...”2ṃ“.¶¶Then  First helper function. Argument: s
⇓                         Push "Then they came for "
 “the ”                   Push "the "
       3ṁ                 Bring s to the top
         “...”            Push "s, and I did not speak out-¶Because I was not a "
              2ṃ          Push a copy of s
                “.¶¶Then  Push ".¶¶Then"


“ they came for   Helper function. No arguments.
“ they came for   Push " they came for "


First”“..“..“..”↓¦⇑“...”]$  Main function.
First”                      Push "First"
      “..“..“..”            Push the list ["Socialist" "Trade Unionist" "Jew"]
                ↓¦          Call the first helper function on each.
                  ⇑         Push "Then they came for "
                   “...”    Push "me-and there was no one left to speak for me."
                        ]$  Wrap the stack in a list and join with no separator.

2

Bubblegum , 149 132 129 byte

00000000: 9d4d b515 0241 14cc af8a c991 1e70 0991  .M...A.......p..
00000010: 02fe bbfd e7b7 cb1a 523d ee0e d9f8 7453  ........R=....tS
00000020: 631d 5cc2 2b84 5432 2265 760c 6315 a654  c.\.+.T2"ev.c..T
00000030: a4d6 d92a 480a 0c20 5201 a91c ec8c 2987  ...*H.. R.....).
00000040: f2ae 1634 3924 6f79 6b2e c8ee 4dba 14eb  ...49$oyk...M...
00000050: 4130 4958 3ed9 9e18 128c a94c 95fc e3e0  A0IX>......L....
00000060: b6fd fa65 c88b 1fa7 7795 e77b 25d7 488a  ...e....w..{%.H.
00000070: 9d68 f898 8792 8c82 2307 a78e bb87 647d  .h......#.....d}
00000080: 03                                       .

Cobalah online!

Jawaban Bubblegum yang Membosankan. Sudah dikalahkan oleh SOGL, jadi itu bagus.

Kredit untuk -17 byte jatuh ke Dom Hastings

-3 byte demi ov


132 byte . Masih tidak bisa mengalahkan SOGL!
Dom Hastings

@HomHastings Saya tidak berpikir Anda akan pernah mengalahkan SOGL dengan Bubblegum ...
Erik the Outgolfer

@EriktheOutgolfer Saya sangat senang dengan fakta itu juga! Saya ingin menginvestasikan waktu untuk bermain dengannya, sangat ekspresif!
Dom Hastings


2

SQL 269 byte

declare @ char(18)='They came for the ',@a char(49)='s, and I did not speak out-
Because I was not a '
print'First '+@+'Socialist'+@a+'Socialist.

'+@+'Trade Unionist'+@a+'Trade Unionist.

'+@+'Jew'+@a+'Jew.

'+@+' me-and there was no one left to speak for me.'

1
Hai, selamat datang di PPCG! Saya telah mengedit posting Anda untuk menambahkan beberapa format. Adapun kode aktual, saya pikir kata "Then "- kata utama hilang dalam tiga kalimat terakhir, dan kalimat terakhir sekarang menyatakan "They came for the me-..."bukan "Then they came for me-...".
Kevin Cruijssen


1

Proton , 219 byte

t='they came for'for i:'Socialist','Trade Unionist','Jew'print(i[0]=='S'? 'First':'Then',t,'the',i+'s, and I did not speak out-
Because I was not a',i+'.
')print('Then',t,'me-and there was no one left to speak for me.')

Cobalah online!


1

Python 2, 246 byte

Pertama kali saya mencoba mengompresi string dan mengembalikannya. Tampaknya dibutuhkan lebih banyak byte daripada pendekatan lain. Apakah ada yang tersisa untuk golf?

import zlib,base64
print zlib.decompress(base64.b64decode('eJyd0DEOwjAMBdA9p/gHoD0EAxJdgQNYiatGtDaKU1XcvikUdSkDjLb/f4NPMVlG7vgJTwOj1bRMuKiP1EfLdgBJwBkhBohm2IPpDh1z5Y7saTQux4nsdaStWDt37Vh27JtElT/oT++73PD0K1oq+97A1QKVZeI1DxVGz215mK7uO1nPf1Zu5g=='))

Cobalah online!


1

Röda , 204 byte

{t="Then"c=" they came for";["First","Socialist",t,"Trade Unionist",t,"Jew"]|[`$_$c the ${_}s, and I did not speak out-
Because I was not a $_2.

`];[`$t$c me-and there was no one left to speak for me.`]}

Cobalah online!


1

PHP, 194 byte

First<?=$t=" they came for ";foreach([Socialist,"Trade Unionist",Jew]as$s)echo"the ${s}s, and I did not speak out-
Because I was not a $s.

Then$t"?>me-and there was no one left to speak for me.

Cobalah online .


1

C (gcc) , 244 byte

f(c){for(c=0;c<3;printf("%s they came for the %ss, and I did not speak out-\nBecause I was not a %2$s.\n\n",c++?"Then":"First",c^2?c?"Trade Unionist":"Socialist":"Jew"));puts("Then they came for me-and there was no one left to speak for me.");}

Cobalah online!


1

Python 3 , 208 byte

print(' they came for '.join(["First"]+[f"the {i}s, and I did not speak out-\nBecause I was not a {i}.\n\nThen"for i in['Socialist','Trade Unionist','Jew']]+['me-and there was no one left to speak for me.']))

Cobalah online!

-1 terima kasih kepada @Langkah Hen


1
Then "for-> Then"fordan Anda mengalahkan jawaban Python lainnya :)
Stephen

@StepHen Terima kasih telah memperhatikan ruang ekstra! :-)
Massa

1

Clojure, 285 byte

(fn[](doseq[i(range 4):let[c["Socialist""Trade Unionist""Jew"""]f #(if(< i 3)% %2)]](println(if(= i 0)"First""Then")"they came for"(str(f(str"the "(c i)"s, ")"me-")(f"and I did not speak out-\n""and there was no one left to speak for me.")(f(str"Because I was not a "(c i)".\n")"")))))

Ini adalah tantangan kecil yang menyenangkan. Saya akhirnya hampir seluruhnya menulis ulang sebagian besar beberapa kali karena saya menyadari saya melakukan sesuatu yang terlalu bundaran. Masih ada beberapa area yang mungkin bisa disentuh, tapi saya cukup senang dengan hasilnya, bahkan jika saya hanya "mengompresi" aslinya dengan 54 byte.

repl.io

Lihat kode pra-golf untuk penjelasan:

(defn ftc []
  ; Loop over the lines numbers for reference
  (doseq [i (range 4)
          :let [; Added a dummy last "class" since "me-" wasn't necessary,
                ;  and only having 3 elements was causing OOB errors.
                classes ["Socialist" "Trade Unionist" "Jew" ""]

                ; A helper function that executes either its first or second argument
                ;  depending on if the current line is one of the first 3 lines.
                if-first-three-lines #(if (< i 3) % %2)]]

    ; An implicit space is inserted between each of the args to println
    (println
      ; Decide on the opener
      (if (= i 0) "First" "Then")

      "they came for"

      ; Start string concatenation because the implicit space
      ;  begins complicating things.
      (str
        ; Decide which "class" the line belongs to
        (if-first-three-lines
          (str "the " (classes i) "s, ")
          "me-")

        ; Decide on the line ending
        (if-first-three-lines
          "and I did not speak out-\n"
          "and there was no one left to speak for me.")

        ; Then pick the trailer
        (if-first-three-lines
          (str "Because I was not a " (classes i) ".\n")
          "")))))

1

Japt , 153 150 149 147 byte

`{=` ey ¯´ f `}´-d tre °s no e ¤ft  speak f ´.`i`Sáû\E
TÎè UÍát
Jew`·rÈ+U+`e {Y}s, d I ¹d not speak t-
Be¯«e I °s not a {Y}.

Tn`}`Fir¡

Menguji

1 byte disimpan berkat Oliver


1

05AB1E , 124 119 byte

.•RYÁ Wö∍®Ø’áÅÚ)’Òü•'x¡™vy„€Û‚½#NĀ虓ÿ€»‹é€‡€€ ÿs,€ƒ Iƒ§€–¡´€Ä-“©¶y“ƒ« I€¥€–€… ÿ.“.ª¶¶}®19£“€á-and€Ç€¥€¸€µ…¸€„¡´€‡€á.“J

Cobalah online.

Penjelasan:

.•RYÁ Wö∍®Ø’áÅÚ)’Òü•
                  # Push compressed string "socialistxtrade unionistxjew"
 'x¡             '# Split it on "x": ["socialist","trade unionist","jew"]
                 # Convert each word to Titlecase: ["Socialist","Trade Unionist","Jew"]
v                 # Loop `y` over each of these strings:
 y                #  Push string `y`
 „€Û‚½            #  Push dictionary string "first then"
      #           #  Split on spaces: ["first","then"]
       N          #  Push the index of the loop
        Ā         #  Truthify it (0 remains 0; every other number becomes 1)
         è        #  Use it to index into the list
                 #  Titlecase it
 “ÿ€»‹é€‡€€ ÿs,€ƒ Iƒ§€–¡´€Ä-“
                  #  Push dictionary string "ÿ they came for the ÿs, and I did not speak out-"
                  #  where the "ÿ" are automatically filled with the strings at the top of the stack
  ©               #  Save it in the register (without popping)
                 #  Push a newline "\n"
 y                #  Push string `y` again
 “ƒ« I€¥€–€… ÿ.“  #  Push dictionary string "because I was not a ÿ."
                  #  where the "ÿ" is automatically filled again with the string
                #  Sentence case it: "because" becomes "Because"
 ¶¶               #  Push two newline characters "\n\n"
}                 # After the loop:
®                 # Push the string from the register:
                  #  "Then they came for the Jews, and I did not speak out-"
 19£              # Only leave the first 19 characters: "Then they came for "
“€á-and€Ç€¥€¸€µ…¸€„¡´€‡€á.“
                  # Push dictionary string "me-and there was no one left to speak for me."
J                 # Then join everything on the stack together (and output implicitly)

Lihat tip tambang 05AB1E ini (bagian Cara menggunakan kamus? Dan Cara mengompresi string bukan bagian dari kamus? ) Untuk memahami alasannya:

  • .•RYÁ Wö∍®Ø’áÅÚ)’Òü• aku s "socialistxtrade unionistxjew"
  • „€Û‚½ aku s "first then"
  • “ÿ€»‹é€‡€€ ÿs,€ƒ Iƒ§€–¡´€Ä-“ aku s "ÿ they came for the ÿs, and I did not speak out-"
  • “ƒ« I€¥€–€… ÿ.“ aku s "because I was not a ÿ."
  • “€á-and€Ç€¥€¸€µ…¸€„¡´€‡€á.“ aku s "me-and there was no one left to speak for me."

-4

Teks , 348 byte

First they came for the Socialists, and I did not speak out-
Because I was not a Socialist.

Then they came for the Trade Unionists, and I did not speak out-
Because I was not a Trade Unionist.

Then they came for the Jews, and I did not speak out-
Because I was not a Jew.

Then they came for me-and there was no one left to speak for me.

Ini adalah versi yang sesingkat mungkin dalam bahasanya, dan setara dengan jawaban Befunge-93 pada saat penulisan.


2
Seperti hampir semua jawaban "Teks", ini membosankan dan malas
Jo King

@ Jo King Sedikit yang terkenal adalah panjangnya sama dengan jawaban Befunge-93.
IFcoltransG
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.