__
                                  _/\ \
                                 /' \ \ \
          __      __    ___ ___ /\_, \ \ \/'\
        /'__`\  /'__`\/' __` __`\/_/\ \ \ , <
  ___  /\ \L\.\.\  __//\ \/\ \/\ \ \ \ \ \ \\`\____
/\___\ \ \__/.\_\\____\ \_\ \_\ \_\ \ \_\ \_\ \____\
\/___/  \/__/\/_//____/\/_/\/_/\/_/  \/_/\/_/\/____/

    

aem1k

JavaScript Hacks and Creative Coding

Created by Martin Kleppe aka @aemkei.

Projects

More Examples

Spin the globe - Hello World 1K
eval(z='p="<"+"pre>"/* ,.oq#+     ,._, */;for(y in n="zw24l6k\
4e3t4jnt4qj24xh2 x/* =<,m#F^    A W###q. */42kty24wrt413n243n\
9h243pdxt41csb yz/* #K       q##H######Am */43iyb6k43pk7243nm\
r24".split(4)){/* dP      cpq#q##########b, */for(a in t=pars\
eInt(n[y],36)+/*         p##@###YG=[#######y */(e=x=r=[]))for\
(r=!r,i=0;t[a/*         d#qg `*PWo##q#######D */]>i;i+=.05)wi\
th(Math)x-= /*        aem1k.com Q###KWR#### W[ */.05,0>cos(o=\
new Date/1e3/*      .Q#########Md#.###OP  A@ , */+x/PI)&&(e[~\
~(32*sin(o)*/* ,    (W#####Xx######.P^     T % */sin(.5+y/7))\
+60] =-~ r);/* #y    `^TqW####P###BP           */for(x=0;122>\
x;)p+="   *#"/* b.        OQ####x#K           */[e[x++]+e[x++\
]]||(S=("eval"/* l         `X#####D  ,       */+"(z=\'"+z.spl\
it(B = "\\\\")./*           G####B" #       */join(B+B).split\
(Q="\'").join(B+Q/*          VQBP`        */)+Q+")//m1k")[x/2\
+61*y-1]).fontcolor/*         TP         */(/\\w/.test(S)&&"#\
03B");document.body.innerHTML=p+=B+"\\n"}setTimeout(z)')//

JSFuck - Write JS with 6 Chars
(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])
[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+
[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[
]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(
!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!
+[]+!+[]+[+[]]]+[+!+[]]+(!![]+[][(![]+[])[+[]
]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!
+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]
+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]] // ()+[]!

ЗВЕЗДА СМЕРТИ - Death Star
                   Зв
                  езда
                 <bOdY
                 oNLOAd=
                "Я=[];Л=
               {};Ж=!Я;З=
              !Ж;Ч=!+Я;Д=
Ч+Ч;П=З+Я;Б=Д+Ч;Ю=Ж+Я;Ф=[Ж]+Я[Я];И=П[+Ч]
   Ы=Я[Ю[+Я]+Ф[+Ч+[+Я]]+Ю[Д]+П[+Я]+П[
      Б]+И];C=Я[Я]+Я;P=Я+Л;Ь=Д+Б;Ш
         =+Ч;X=+Я;Й='';К='Й'
           H=П[X];T=Д+[X];Ы[P
          [Ь]+P[Ш]+C[Ш]+Ю[Б]+H
         +И+C[X]+P[Ь]+H+P[Ш]+И
         ](Ю[Ш]+Ю[    Д]+П[Б]+И
        +H+(Ж+Ы          )[T]+К+
       (З+Ы)                [T])(
      )">                     смЕ
     р                          Ти


שלום-עולם - Hebrew JavaScript
// שלום עולם
א="",ב=!א+א,ג=!ב+א,ד=א+{},ה=ב[א++]
ו=ב[ח=א],ט=++ח+א,כ=ד[ח+ט],ב[כ+=ד[
א]+(ד.ד+ד)[א]+ג[ט]+ה+ו+ב[ח]+כ+ה+ד[א
]+ו][כ](ג[א]+ג[ח]+ב[ט]+ו+ה+"(א)")()

Katakana - Translate JS into Japanese
ウ=""   ,ア=     !ウ+     ウ,ネ     =!ア     +ウ,    ホ=ウ
+{},    ヌ=ア    [ウ++    ],セ=     ア[ミ    =ウ]    ,ハ=
++ミ    +ウ,     ヘ=ホ    [ミ+ハ    ],ア[    ヘ+=    ホ[ウ
]+(ホ  .ホ+ホ    )[ウ]    +ネ[ハ    ]+ヌ+    セ+ア   [ミ]+
ヘ+ヌ            +ホ[     ウ]+セ    ][ヘ]    (ネ[
ウ]+             ネ[ミ              ]+ア     [ハ]+
                 セ+ヌ+            "(ウ)"
                 )()   

Hieroglyphs.js - JavaScript from 2000 BC
𓅂='',𓂀=!𓅂+𓅂,𓁄=!𓂀+𓅂,𓊎=𓅂+{},𓆣=𓂀[𓅂++]

𓊝=𓂀[𓇎=𓅂],𓏢=++𓇎+𓅂,𓆗=𓊎[𓇎+𓏢],𓂀[𓆗+=𓊎[𓅂]+(

𓂀.𓁄+𓊎)[𓅂]+𓁄[𓏢]+𓆣+𓊝+𓂀[𓇎]+𓆗+𓆣+𓊎[𓅂]+𓊝]

[𓆗](𓁄[𓅂]+𓁄[𓇎]+𓂀[𓏢]+𓊝+𓆣+'`𓅂 𓂀 𓁄 𓆣 𓊝`')``

Confusables - All Vars are X
var  = ''
var  = !ⵝ+ⵝ
var  = !Ⲭ+ⵝ
var  = ⵝ+{}
var 𐊐 = Ⲭ[ⵝ++]
var 𐊴 = Ⲭ[Х=ⵝ]
var Χ = ++Х+ⵝ
var X = ꓫ[Х+Χ]

Ⲭ[X+=ꓫ[ⵝ]+(Ⲭ.ᚷ+ꓫ)
[ⵝ]+ᚷ[Χ]+𐊐+𐊴+Ⲭ[Х]+
X+𐊐+ꓫ[ⵝ]+𐊴][X](ᚷ[
ⵝ]+ᚷ[Х]+Ⲭ[Χ]+𐊴+𐊐+
"`XXX`")()

Mandelcode - Fractal Quine, Zooming into JavaScript
                                  E
                                 =  1
                              ,   z=1.07 ;
                             function s(       a)
                       {  for(a&&(E=!E),H="",z *=
                        .9,T*=.8,Y=0;2>Y;Y+=.1)  {
              for      (X=0;2>X;X+=.04){for(x=y=i
            =0;99>i   &&99>=x*x+y*y;i++)t=2*x*y,x
      =   x*x-y*y+z*X -z-Z/(1-T),y=t+z*Y-z-U;(/*
   MANDELCODE=A-QUINE-BY-AEMKEI=CLICK-TO-ZOOM*/
      H   )+="  .+#"[ i%5]}H+=n}!E&&setTimeout(s
            ,99),P[   I]=H}Z=1.74909351846789013,
              U  =     3.40220976e-7,onclick=s;n
                        ="\n";P.textContent="<"  +
                          "pre id=P>\n"+P[I= "i"+
                             "nnerHTML"       ]
                              T  /*aem1k*/
                                 =  -
                                  2

// VOID - Invisible Variables and Code
  <script>   //[   =""],='"',=   ==,===  ,=+,=+
   ,=+,=+,  ={},  =+,=+,=+,=+,=  .+,=[]  ,=[],=[]
    ,=[],=[ ],=[  ],=[],=[],=[]  ,="\\"  +")(",=[],
     =[],=[],=++  ++++" ",=++++  ++++++  ,=[][],((++(
      +(++++++++  (=++(+)+)++++  ++++++  "''"++"."+++
       ++++(+)++  +++"/"++".{"+  ((+))+  "}/"+++(+)+(
        +)+",'"+   "'"+++)())(   )+)())  ()</script>

const - The only Constant is Change
   const       cοnst =    'const';
([ cоnst ,     conѕt ]=    cοnst ,
 [ соnst ,     сonѕt ,     cоnѕt ,
   соnѕt ,     сοnѕt ,     сοnѕt ,
   cοnѕt ]=[!! cоnst ]+  ! cоnst +
   cоnst .     cоnst )[    cоnst =
   cοnst +     сonѕt +     cоnѕt +
   cоnst +     соnst +     conѕt +
   сonѕt ]   [ cоnst ]   ( сοnѕt +
   cοnѕt +     соnѕt +     сonѕt +
   соnst +'`'+ cοnst +'`')
   ``

$five - Write JS with Only 5 Different Characters
[$$=[+[]]]+[$$[++[[]][+[]]]=+[]]+[$$=[$$1[]][+[]][++[[]]
[+[]]]]+[$$$=[$[[[]+[][+[]]][+[]][++[++[++[++[[]][+[]]][
+[]]][+[]]][+[]]]+[[]+[][+[]]][+[]][++[++[++[++[++[[]][+
[]]][+[]]][+[]]][+[]]][+[]]]+[[]+[][+[]]][+[]][++[[]][+[
]]]+[[]+[][+[]]][+[]][++[++[[]][+[]]][+[]]]]+[]][+[]]]+[
$$$$=[$[[[]+[][+[]]][+[]][++[++[[]][+[]]][+[]]]+$$$[+[[+
+[++[++[++[++[[]][+[]]][+[]]][+[]]][+[]]][+[]]]+[++[++[+
...

sic - Encode JS with 2 Different Characters
[C=B=[]].__proto__[C.B]=T=new Proxy(B,{get:
(_,N)=>(B+=+!N,B[6]&&(+B||eval(C),C+=String.
fromCharCode(parseInt(B,2)),B=[]),T)});

[][[][[]] ][[]][[]][[ ][[]] ][[][[]]][[ ][[]]][[]
[[]]][[]] [[]][[]][[] [[]]] [[]][[]][[] [[]]][[][
[]]][     []][[]][[][ []]][ [][[] ]][[]     ][[][
[]]][     []][[             ]][[] ][[]]     [[][[
]]][[     ][[]]][[]][ [][[] ]][[] ][[]]     [[]][
[][[]     ]][[]][[][[ ]]][[ ][[]]           ][[][
[]]][           []][[ ][[]] ][[]] [[][[     ]]][[
][[]]     ][[][ []]][ [][[] ]][[] ][[]]     [[][[
]]][[     ][[]] ][[][ []]][ []][[ ][[]]     ][[]]
[[][[]]][ []][[][[]]] [[][[ ]]][[[]]][[ ][[]]][[]
[[]]][[][ []]][[][[]] ][[][ []]][[][[]] ][[][[]]]

- Encode JavaScript with Only One Symbol
with (())
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
...

l33t - Write Code Like a Hacker
with (l33t()) {
  c0ns0l3.w4rn('l33t');
  al3rt('w00t');
}

function l33t(p=this){return new Proxy(p
,{has:()=>!0,get:(t,n)=>(p=Reflect.get(t
,String(n).replace(/\d/g,a=>'oizeasGtBg'
[a])))?p.apply?p.bind(t):l33t(p):p})}

Filler - Hidden and almost Invisible Variables
/ㅤ/-[ㅤ=''],ᅠ=!ㅤ+ㅤ,ㅤㅤ=!ᅠ+ㅤ,ㅤᅠ=ㅤ+{}
ᅠㅤ=ᅠ[ㅤ++],ᅠᅠ=ᅠ[ᅠㅤㅤ=ㅤ],ᅠㅤᅠ=++ᅠㅤㅤ+ㅤ
ㅤㅤㅤ=ㅤᅠ[ᅠㅤㅤ+ᅠㅤᅠ],ᅠ[ㅤㅤㅤ+=ㅤᅠ[ㅤ]+(ᅠ.ㅤㅤ+ㅤᅠ)
[ㅤ]+ㅤㅤ[ᅠㅤᅠ]+ᅠㅤ+ᅠᅠ+ᅠ[ᅠㅤㅤ]+ㅤㅤㅤ+ᅠㅤ+ㅤᅠ[ㅤ]+ᅠᅠ]
[ㅤㅤㅤ](ㅤㅤ[ㅤ]+ㅤㅤ[ᅠㅤㅤ]+ᅠ[ᅠㅤᅠ]+ᅠᅠ+ᅠㅤ+"(ㅤ)")()

א The Aleph - Life out of a Single Symbol
                               א
                            <script>
                             א ='אֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲֲ֤֤֧֥֤֦֣֤֥֦֤֥֦֦֤֤֥֦֦֦֤֥֤֥֤֧֤֦֥֧֦֥֤֧֥֤֥֤֤֧֥֥֧֥֣֣֣֥֥֤֥֧֥֦֣֦֧֦֦֦֧֣֥֥֥֥֥֧֣֥֥֣֧֥֤֣֤֦֥֦֦֥֧֦֣֤֦֥֦֦֥֧֧֥֥֤֣֣֥֤֥֧֦֧֧֤֣֣֥֣֥֧֥֤֧֧֦֣֧֥֧֥֤֤֧֤֤֣֣֥֣֥֤֦֦֧֥֧֥֤֤֧֦֦֤֥֥֤֥֦֧֤֥֦֧֦֣֥֥֤֦֥֧֦֥֤֤֧֥֦֥֤֥֧֥֦֥֧֣֤֥֧֥֥֦֧֤֥֥֥֥֥֥֥֧֧֥֣֥֧֣֥֤֤֥֣֧֥֤֣֣֥֥֣֤֥֣֥֥֣֤֣֣֥֥֥֤֥֣֥֧֣֤֤֥֧֤֣֦֥֥֥֤֥֥֦֦֤֥֦֤֥֧֤֤֧֥֦֥֥֦֥֦֤֥֦֤֥֤֧֥֥֤֧֥֤֧֧֥֠֡֠֠֡֡֡֡֡֡֡֡֡֡֡֡֡֡֡֠֠֠֡֡֡֠֠֡֡֠֡֠֡֠֡֠֠֡֡֠֡֡֠֠֠֠֠֠֠֡֡֠֠֠֡֠֠֠֠֡֡֠֠֠֠֠֡֡֡֠֠֠֠֠֡֠֠֡֡֡֠֠֡֠֠֡֡֡֡֡֠֡֡֠֠֠֠֡֡֡֡֡֡֡֡֠֠֠֠֡֠֠֠֠֡֡֠֠֠֠֠֠֡֠֡֡֡֡֠֠֡֠֠֠֠֡֠֠֠֡֠֠֠֠֠֡֠֠֠֡֠֠֠֠֡֠֡֠֠֡֡֠֠֡֡֡֡֡֠֡֡֠֡֡֡֡֡֠֡֡֠֡֡֡֡֡֡֡֡֠֡֡֡֡֡֠֡֡֡֡֡֡֡֡֠֡֡֡֡֡֠֡֠֠֠֠֡֠֡֠֡'



   ב             =             ""             ,             ח
       =           !           ב           +           ב
    ,          ד          =          !          ח          +
  ב         ,         ו         =         ב         +         {
    }        ,        ה        =        '        "        '
,        ע        =        ח        [        0        ]        ,
נ       =       ח       [       1      ]       ,       ך       =
ו      [      5      ]      ,      ם      =      (      ח      .
  ד     +     ו     )     [     1     ]     ,     ף     =     ח
[    2    ]    ,    מ    =    ו   [    1    ]    ,    ס    =    ד
[   3   ]   ,   כ   =   ח   [   3   ]   ,   י   =   ד   [   1   ]
ג  =  נ  +  כ  +  ע  +  ף  +  נ  +  ם  +  " "  ,  ט  =  (  ז  =
ך + מ + ם + ס + ע + נ + ף + ך + ע + מ + נ ) [ ז ] [ ז ] , ט ( ט
(ג+ה+ט(ג+ט(ג+ה+כ+ס+ך+י+(ן="\\160")+כ+"(א)."+נ+כ+ן+"\\154"+י+ך+כ+
"(/"+(ל=".{5}(.)")+ל+ל+"/\\147,'\\\\\\\\$1$2$3')"+ה)())()+ה)())()

Theseus - A Maze Generator and Solver

S="\40\n";M="map";i=991;for(z
=       [                   ]
;   i   ;   )z[--i]=i%30?   8
:   S   [           1   ]   ;
F=d=>   [30,1,-30   ,   -   1
]       [           M   ]   (
(   f,g,h   )=>S[0]<z   [   f
=   d                   +   2
*   h[3&g+i]]&&(z[f]=z[(d   +
f   )       /               2
]   =   S   [   0],i--,F(   f
)       )       )           ,
F(32);z+=S[1]//aem1k.com/maze

Polyglot - CSS = JS = HTML
/** CSS **/
html * { color: red }
/** JS **/
var html, red;
document.write('<'+'link href="#" rel="stylesheet">');
/** HTML **/
// <script src="#">

Tweetris - Play Binary Tetris
function(a,b,c,d){d+
=c;return[d<0|a&b<<d    // .##..
?a=parseInt((a|b<<c)    // .....
.toString(d=32,b=new    // .....
Date&2|1).replace('v    // .##..
',''),d):a|b<<d,a,b,    // ###.#
d]}      // tweetris    // .####

ffconf - 2015 Animated Starfield

     <body text=#EE3 bgcolor=000 id=p
    style="perspective:4.0em;display:
   inline-block;padding:15%"><script>
  I=1/7;e          ='          I+=I<\
 30?I/30:          1,          p.inn\
erHTML="<          pr          e>"+B\
.replace(     /\\S/g,     function(a\
,b){retur     n\40z=I     *(1+b*b/50\
0%2)%130,     "<tt\\4     0style=dis\
play:i                        nline-\
block;                        transf\
orm:trans     late3d(     0,0,"+(z+b\
/17-50)+"     px)>.</     tt>"})';$$=
/\s\s+/g;     N=0;S="     ";!!+[];e=e
.replace(     $$,"");     setInterval
(e,30);B=     (S)+(p)     .outerHTML
.replace(/y.*"/,12);B=S[0]+B.substr
(0,36)+"\n"+B;'a-quine-by-@aemkei\
aem1k.com/ffconf'</script>-ffconf

Symmetry - Symmetric JavaScript
 {(.0-{}-0.)}      xXXx         =wYYw=
  ([]+!!+[])     [0.**.0]      +[([])]+
  (''+!!+'')   [0-~+!!+~-0]  +([]+[]+[])+
   (8+{}+8)    [0|8.**.8|0]   +([]||[])+
(""+(0==0)+"")   [0.**.0]     +[]+''+[]+
   (0+{}+0)      [8-!!-8]     +(''||'')+
 ("("+[]+")")    [0+~~+0]     +""+''+""+
  (["xXXx"])     [0+~~+0]      +([""])+
   (')YY(')     [""+~~+""]     //-!!-\\

Pac-Man - Play in < 512 Bytes
############# // <pre id=p><script>l="";for(i in L=[a=8191,b=
#     #    .# // 4161,c=5981,d=5125,5493,5397,5589,d,c,b,a])l
# ### # ###.# // +=L[i].toString(2).replace(/1/g,4).replace(/
# # X    .#.# // 0/g,2)+3;l=l.split(""),w=14,x=76,X=48,e=d=k=
# # # ###.#.# // D=!setInterval(onkeydown=function(a){if(a)k=
# # # o #.#.# // a.which;else if(!e){for(l[x]=0,l[x+=d=k-37>>
# # ### #.#.# // 2||4&l[x+(o=k%2?k-38:(k-39)*w)]?4&l[x+d]?0:d
# # ......#.# // :o],e|=8&l[x],l[x]=1,l[X]&=7,h=D%4,h=h%2?h-2
# ### #.###.# // :(h-1)*w,4&l[X+h]?D++:e|=1&l[X+=h],l[X]|=8,h
#.....#.....# // =i=0;153>i;)h+=" o.\n#   x"[8&l[++i]||l[i]];
############# // p.innerHTML=h}},250)

try        {
to         }
catch      (
me         ){

if         (`
you        `)
can        :'\
!          '}

Selected Talks

Photo

MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNdyssoooyNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMNy/..`  ``` ``..--/+/+yydNMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMNy-             `      `....+mMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMNs.`                    `` `...`/hNMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMN+`                               `-dMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMN:                           `     ``-dMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMN-                              `  ``.:/dMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMdo`                                   `.-/-hMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMNo`                                    .:/:/.:hMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMN/                                   `.../sms.:oNMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMo`                              ``..-//:yNMMm::shMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMy.                  ``..---.``.::///++oyNMMMMM+:soMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMN-                 ``..---::::/+ooosydmNMMMMMMN+//+NMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMy-               `....---:://+oyhdmNNNNMMMMMMmy/-+NMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMmo             `....----::/++ohmmNNNNMMMMMMMMN/./mMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMN/          `.....``````..-::/osyhddhhddddmNd..+NMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMy`         `.--...````````  ``-:/+++/:.``./hs`oNMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMNo+:.`      .---..```    `.`````.:+o:.`  `:+mNNMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMm:`  ```----...``````:-``.``-+mN+..``:NNMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMmh-..`..`-::--........---....-oNMNdyyhmMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMho:.   `-..``-:----..--::::::-...-+NMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMNo.         ` `.-------:://///:-....-/hMMMMMMMMMh`oMMMMMMMMMMMMMMMM
MMMMMMMMMMMMN-              .-:------:::::--.`..--/sMMMh+yNMMh  sMMMMMMMMMMMMMMM
MMMMMMMMMMMMo               `.-----..........`````.-+dNm+-/dN-  +MMMMMMMMMMMMMMM
MMMMMMMMMMMM.               `.--...````````````````.oNMMo:.o/   +MMMMMMMMMMMMMMM
MMMMMMMMMMMM/                `....`````    ````.-:/+hmmy-:/y    oMMMMMMMMMMMMMMM
MMMMMMMMMMMMs                ``..`````````     ```.-+shyydh.    dMMMMMMMMMMMMMMM
MMMMMMMMMMMMy                 ``````````..``````--:/yMMNmh.     /mMMMMMMMMMMMMMM
MMMMMMMMMMMMs                    `````` ``````````.-oNNh+.       .+oyhhmMMMMMMMM
MMMMMMMMMMMM.                  `    ````````....-:ohmNd/`                 `-:+sh
MMMMMMMMMMMs                                `...--/ydy:
MMMMMMMMmdy-                                      `.-.
MMMNy+-.
ms:                                          ```

    

Contact


20XX - Martin Kleppe Ubilabs