<?php
header('Content-Type: image/png'); "pink" => "FFC0CB",
"lightpink" => "FFB6C1",
"hotpink" => "FF69B4",
"deeppink" => "FF1493",
"palevioletred" => "DB7093",
"mediumvioletred" => "C71585",
"lightsalmon" => "FFA07A",
"salmon" => "FA8072",
"darksalmon" => "E9967A",
"lightcoral" => "F08080",
"indianred" => "CD5C5C",
"crimson" => "DC143C",
"firebrick" => "B22222",
"darkred" => "8B0000",
"red" => "FF0000",
"rlemon" => "C40C0C",
"orangered" => "FF4500",
"tomato" => "FF6347",
"coral" => "FF7F50",
"darkorange" => "FF8C00",
"orange" => "FFA500",
"gold" => "FFD700",
"yellow" => "FFFF00",
"lightyellow" => "FFFFE0",
"lemonchiffon" => "FFFACD",
"lightgoldenrodyellow" => "FAFAD2",
"papayawhip" => "FFEFD5",
"moccasin" => "FFE4B5",
"peachpuff" => "FFDAB9",
"palegoldenrod" => "EEE8AA",
"khaki" => "F0E68C",
"darkkhaki" => "BDB76B",
"cornsilk" => "FFF8DC",
"blanchedalmond" => "FFEBCD",
"bisque" => "FFE4C4",
"navajowhite" => "FFDEAD",
"wheat" => "F5DEB3",
"burlywood" => "DEB887",
"tan" => "D2B48C",
"rosybrown" => "BC8F8F",
"sandybrown" => "F4A460",
"goldenrod" => "DAA520",
"darkgoldenrod" => "B8860B",
"peru" => "CD853F",
"chocolate" => "D2691E",
"saddlebrown" => "8B4513",
"sienna" => "A0522D",
"brown" => "A52A2A",
"maroon" => "800000",
"darkolivegreen" => "556B2F",
"olive" => "808000",
"olivedrab" => "6B8E23",
"yellowgreen" => "9ACD32",
"limegreen" => "32CD32",
"lime" => "00FF00",
"lawngreen" => "7CFC00",
"chartreuse" => "7FFF00",
"greenyellow" => "ADFF2F",
"springgreen" => "00FF7F",
"mediumspringgreen" => "00FA9A",
"lightgreen" => "90EE90",
"palegreen" => "98FB98",
"darkseagreen" => "8FBC8F",
"mediumseagreen" => "3CB371",
"seagreen" => "2E8B57",
"forestgreen" => "228B22",
"green" => "008000",
"darkgreen" => "006400",
"mediumaquamarine" => "66CDAA",
"aqua" => "00FFFF",
"cyan" => "00FFFF",
"lightcyan" => "E0FFFF",
"paleturquoise" => "AFEEEE",
"aquamarine" => "7FFFD4",
"turquoise" => "40E0D0",
"mediumturquoise" => "48D1CC",
"darkturquoise" => "00CED1",
"lightseagreen" => "20B2AA",
"cadetblue" => "5F9EA0",
"darkcyan" => "008B8B",
"teal" => "008080",
"lightsteelblue" => "B0C4DE",
"powderblue" => "B0E0E6",
"lightblue" => "ADD8E6",
"skyblue" => "87CEEB",
"lightskyblue" => "87CEFA",
"deepskyblue" => "00BFFF",
"dodgerblue" => "1E90FF",
"cornflowerblue" => "6495ED",
"steelblue" => "4682B4",
"royalblue" => "4169E1",
"blue" => "0000FF",
"mediumblue" => "0000CD",
"darkblue" => "00008B",
"navy" => "000080",
"midnightblue" => "191970",
"lavender" => "E6E6FA",
"thistle" => "D8BFD8",
"plum" => "DDA0DD",
"violet" => "EE82EE",
"orchid" => "DA70D6",
"fuchsia" => "FF00FF",
"magenta" => "FF00FF",
"mediumorchid" => "BA55D3",
"mediumpurple" => "9370DB",
"blueviolet" => "8A2BE2",
"darkviolet" => "9400D3",
"darkorchid" => "9932CC",
"darkmagenta" => "8B008B",
"purple" => "800080",
"indigo" => "4B0082",
"darkslateblue" => "483D8B",
"slateblue" => "6A5ACD",
"mediumslateblue" => "7B68EE",
"white" => "FFFFFF",
"snow" => "FFFAFA",
"poop" => "825D1E",
"okok" => "825D1E",
"honeydew" => "F0FFF0",
"mintcream" => "F5FFFA",
"azure" => "F0FFFF",
"aliceblue" => "F0F8FF",
"ghostwhite" => "F8F8FF",
"whitesmoke" => "F5F5F5",
"seashell" => "FFF5EE",
"beige" => "F5F5DC",
"oldlace" => "FDF5E6",
"floralwhite" => "FFFAF0",
"ivory" => "FFFFF0",
"antiquewhite" => "FAEBD7",
"linen" => "FAF0E6",
"lavenderblush" => "FFF0F5",
"mistyrose" => "FFE4E1",
"gainsboro" => "DCDCDC",
"lightgray" => "D3D3D3",
"lightgrey" => "D3D3D3",
"silver" => "C0C0C0",
"darkgray" => "A9A9A9",
"darkgrey" => "A9A9A9",
"gray" => "808080",
"grey" => "808080",
"dimgray" => "696969",
"dimgrey" => "696969",
"lightslategray" => "778899",
"lightslategrey" => "778899",
"slategray" => "708090",
"slategrey" => "708090",
"darkslategray" => "2F4F4F",
"darkslategrey" => "2F4F4F",
"black" => "000000",
"roygbiv" => "red,orange,yellow,green,blue,indigo,violet"
);
function rgbFromHex($hexValue)
{
if (strlen($hexValue) == 3) { //shorthand check }
else if (strlen($hexValue) == 6){ //standard hex color }
else{
$r = 0;
$g = 0;
$b = 0;
}
$r,
$g,
$b
);
return $rgb;
}
function getHexByName($name)
{
global $colornames;
if (isset($colornames[$name])) { return $colornames[$name];
}
else {
return null;
}
}
/*
* $input - a string, possibly comma-separated list of HexValues and/or color names
*
* returns an array of [r, g, b] arrays
*/
function parseColors($input){
foreach($parts as $color){
$byName = getHexByName($color);
} else{
if (strpos($byName, ",") !== FALSE){ // we're dealing with a multi-part name, eg: roygbiv
foreach(parseColors($byName) as $col){
}
} else{
}
}
}
return $colorArray;
}
/*
* $colorArray - an array of [r, g, b] arrays.
*
* returns an array of [r, g, b] arrays.
*/
function interpolateGradient($colorArray){
$arrLen = count($colorArray); $gradWidth = 200 / $arrLen;
for($index = 0;$index < $arrLen - 1; $index++){
$curr = $colorArray[$index];
$next = $colorArray[$index+1];
for($step = 0; $step < $gradWidth; $step++){
$curr[0] + $step / $gradWidth * ($next[0] - $curr[0]),
$curr[1] + $step / $gradWidth * ($next[1] - $curr[1]),
$curr[2] + $step / $gradWidth * ($next[2] - $curr[2])
));
}
}
return $output;
}
/*
* $colorArray - an array of [r, g, b] arrays.
*
* returns an image.
*/
function createSwatch($colorArray)
{
$colWidth = 200 / count($colorArray); $x = 0;
foreach($colorArray as $rgb) {
$x += $colWidth;
}
}
/*
$colors = $_GET['color'];
$gradient = $_GET['gradient'];
if (isset($colors)) {
$colorArray = parseColors(strtolower($colors));
} else if (isset($gradient)){
$colorArray = interpolateGradient(parseColors(strtolower($gradient)));
}
if (isset($colorArray)){
createSwatch($colorArray);
}
*/
createSwatch(interpolateGradient(parseColors("aqua,poop,roygbiv,poop,aqua")));
?>
PD9waHAKaGVhZGVyKCdDb250ZW50LVR5cGU6IGltYWdlL3BuZycpOwokY29sb3JuYW1lcyA9IGFycmF5KAogICAgInBpbmsiID0+ICJGRkMwQ0IiLAoJImxpZ2h0cGluayIgPT4gIkZGQjZDMSIsCgkiaG90cGluayIgPT4gIkZGNjlCNCIsCgkiZGVlcHBpbmsiID0+ICJGRjE0OTMiLAoJInBhbGV2aW9sZXRyZWQiID0+ICJEQjcwOTMiLAoJIm1lZGl1bXZpb2xldHJlZCIgPT4gIkM3MTU4NSIsCgkibGlnaHRzYWxtb24iID0+ICJGRkEwN0EiLAoJInNhbG1vbiIgPT4gIkZBODA3MiIsCgkiZGFya3NhbG1vbiIgPT4gIkU5OTY3QSIsCgkibGlnaHRjb3JhbCIgPT4gIkYwODA4MCIsCgkiaW5kaWFucmVkIiA9PiAiQ0Q1QzVDIiwKCSJjcmltc29uIiA9PiAiREMxNDNDIiwKCSJmaXJlYnJpY2siID0+ICJCMjIyMjIiLAoJImRhcmtyZWQiID0+ICI4QjAwMDAiLAoJInJlZCIgPT4gIkZGMDAwMCIsCgkicmxlbW9uIiA9PiAiQzQwQzBDIiwKCSJvcmFuZ2VyZWQiID0+ICJGRjQ1MDAiLAoJInRvbWF0byIgPT4gIkZGNjM0NyIsCgkiY29yYWwiID0+ICJGRjdGNTAiLAoJImRhcmtvcmFuZ2UiID0+ICJGRjhDMDAiLAoJIm9yYW5nZSIgPT4gIkZGQTUwMCIsCgkiZ29sZCIgPT4gIkZGRDcwMCIsCgkieWVsbG93IiA9PiAiRkZGRjAwIiwKCSJsaWdodHllbGxvdyIgPT4gIkZGRkZFMCIsCgkibGVtb25jaGlmZm9uIiA9PiAiRkZGQUNEIiwKCSJsaWdodGdvbGRlbnJvZHllbGxvdyIgPT4gIkZBRkFEMiIsCgkicGFwYXlhd2hpcCIgPT4gIkZGRUZENSIsCgkibW9jY2FzaW4iID0+ICJGRkU0QjUiLAoJInBlYWNocHVmZiIgPT4gIkZGREFCOSIsCgkicGFsZWdvbGRlbnJvZCIgPT4gIkVFRThBQSIsCgkia2hha2kiID0+ICJGMEU2OEMiLAoJImRhcmtraGFraSIgPT4gIkJEQjc2QiIsCgkiY29ybnNpbGsiID0+ICJGRkY4REMiLAoJImJsYW5jaGVkYWxtb25kIiA9PiAiRkZFQkNEIiwKCSJiaXNxdWUiID0+ICJGRkU0QzQiLAoJIm5hdmFqb3doaXRlIiA9PiAiRkZERUFEIiwKCSJ3aGVhdCIgPT4gIkY1REVCMyIsCgkiYnVybHl3b29kIiA9PiAiREVCODg3IiwKCSJ0YW4iID0+ICJEMkI0OEMiLAoJInJvc3licm93biIgPT4gIkJDOEY4RiIsCgkic2FuZHlicm93biIgPT4gIkY0QTQ2MCIsCgkiZ29sZGVucm9kIiA9PiAiREFBNTIwIiwKCSJkYXJrZ29sZGVucm9kIiA9PiAiQjg4NjBCIiwKCSJwZXJ1IiA9PiAiQ0Q4NTNGIiwKCSJjaG9jb2xhdGUiID0+ICJEMjY5MUUiLAoJInNhZGRsZWJyb3duIiA9PiAiOEI0NTEzIiwKCSJzaWVubmEiID0+ICJBMDUyMkQiLAoJImJyb3duIiA9PiAiQTUyQTJBIiwKCSJtYXJvb24iID0+ICI4MDAwMDAiLAoJImRhcmtvbGl2ZWdyZWVuIiA9PiAiNTU2QjJGIiwKCSJvbGl2ZSIgPT4gIjgwODAwMCIsCgkib2xpdmVkcmFiIiA9PiAiNkI4RTIzIiwKCSJ5ZWxsb3dncmVlbiIgPT4gIjlBQ0QzMiIsCgkibGltZWdyZWVuIiA9PiAiMzJDRDMyIiwKCSJsaW1lIiA9PiAiMDBGRjAwIiwKCSJsYXduZ3JlZW4iID0+ICI3Q0ZDMDAiLAoJImNoYXJ0cmV1c2UiID0+ICI3RkZGMDAiLAoJImdyZWVueWVsbG93IiA9PiAiQURGRjJGIiwKCSJzcHJpbmdncmVlbiIgPT4gIjAwRkY3RiIsCgkibWVkaXVtc3ByaW5nZ3JlZW4iID0+ICIwMEZBOUEiLAoJImxpZ2h0Z3JlZW4iID0+ICI5MEVFOTAiLAoJInBhbGVncmVlbiIgPT4gIjk4RkI5OCIsCgkiZGFya3NlYWdyZWVuIiA9PiAiOEZCQzhGIiwKCSJtZWRpdW1zZWFncmVlbiIgPT4gIjNDQjM3MSIsCgkic2VhZ3JlZW4iID0+ICIyRThCNTciLAoJImZvcmVzdGdyZWVuIiA9PiAiMjI4QjIyIiwKCSJncmVlbiIgPT4gIjAwODAwMCIsCgkiZGFya2dyZWVuIiA9PiAiMDA2NDAwIiwKCSJtZWRpdW1hcXVhbWFyaW5lIiA9PiAiNjZDREFBIiwKCSJhcXVhIiA9PiAiMDBGRkZGIiwKCSJjeWFuIiA9PiAiMDBGRkZGIiwKCSJsaWdodGN5YW4iID0+ICJFMEZGRkYiLAoJInBhbGV0dXJxdW9pc2UiID0+ICJBRkVFRUUiLAoJImFxdWFtYXJpbmUiID0+ICI3RkZGRDQiLAoJInR1cnF1b2lzZSIgPT4gIjQwRTBEMCIsCgkibWVkaXVtdHVycXVvaXNlIiA9PiAiNDhEMUNDIiwKCSJkYXJrdHVycXVvaXNlIiA9PiAiMDBDRUQxIiwKCSJsaWdodHNlYWdyZWVuIiA9PiAiMjBCMkFBIiwKCSJjYWRldGJsdWUiID0+ICI1RjlFQTAiLAoJImRhcmtjeWFuIiA9PiAiMDA4QjhCIiwKCSJ0ZWFsIiA9PiAiMDA4MDgwIiwKCSJsaWdodHN0ZWVsYmx1ZSIgPT4gIkIwQzRERSIsCgkicG93ZGVyYmx1ZSIgPT4gIkIwRTBFNiIsCgkibGlnaHRibHVlIiA9PiAiQUREOEU2IiwKCSJza3libHVlIiA9PiAiODdDRUVCIiwKCSJsaWdodHNreWJsdWUiID0+ICI4N0NFRkEiLAoJImRlZXBza3libHVlIiA9PiAiMDBCRkZGIiwKCSJkb2RnZXJibHVlIiA9PiAiMUU5MEZGIiwKCSJjb3JuZmxvd2VyYmx1ZSIgPT4gIjY0OTVFRCIsCgkic3RlZWxibHVlIiA9PiAiNDY4MkI0IiwKCSJyb3lhbGJsdWUiID0+ICI0MTY5RTEiLAoJImJsdWUiID0+ICIwMDAwRkYiLAoJIm1lZGl1bWJsdWUiID0+ICIwMDAwQ0QiLAoJImRhcmtibHVlIiA9PiAiMDAwMDhCIiwKCSJuYXZ5IiA9PiAiMDAwMDgwIiwKCSJtaWRuaWdodGJsdWUiID0+ICIxOTE5NzAiLAoJImxhdmVuZGVyIiA9PiAiRTZFNkZBIiwKCSJ0aGlzdGxlIiA9PiAiRDhCRkQ4IiwKCSJwbHVtIiA9PiAiRERBMEREIiwKCSJ2aW9sZXQiID0+ICJFRTgyRUUiLAoJIm9yY2hpZCIgPT4gIkRBNzBENiIsCgkiZnVjaHNpYSIgPT4gIkZGMDBGRiIsCgkibWFnZW50YSIgPT4gIkZGMDBGRiIsCgkibWVkaXVtb3JjaGlkIiA9PiAiQkE1NUQzIiwKCSJtZWRpdW1wdXJwbGUiID0+ICI5MzcwREIiLAoJImJsdWV2aW9sZXQiID0+ICI4QTJCRTIiLAoJImRhcmt2aW9sZXQiID0+ICI5NDAwRDMiLAoJImRhcmtvcmNoaWQiID0+ICI5OTMyQ0MiLAoJImRhcmttYWdlbnRhIiA9PiAiOEIwMDhCIiwKCSJwdXJwbGUiID0+ICI4MDAwODAiLAoJImluZGlnbyIgPT4gIjRCMDA4MiIsCgkiZGFya3NsYXRlYmx1ZSIgPT4gIjQ4M0Q4QiIsCgkic2xhdGVibHVlIiA9PiAiNkE1QUNEIiwKCSJtZWRpdW1zbGF0ZWJsdWUiID0+ICI3QjY4RUUiLAoJIndoaXRlIiA9PiAiRkZGRkZGIiwKCSJzbm93IiA9PiAiRkZGQUZBIiwKCSJwb29wIiA9PiAiODI1RDFFIiwKCSJva29rIiA9PiAiODI1RDFFIiwKCSJob25leWRldyIgPT4gIkYwRkZGMCIsCgkibWludGNyZWFtIiA9PiAiRjVGRkZBIiwKCSJhenVyZSIgPT4gIkYwRkZGRiIsCgkiYWxpY2VibHVlIiA9PiAiRjBGOEZGIiwKCSJnaG9zdHdoaXRlIiA9PiAiRjhGOEZGIiwKCSJ3aGl0ZXNtb2tlIiA9PiAiRjVGNUY1IiwKCSJzZWFzaGVsbCIgPT4gIkZGRjVFRSIsCgkiYmVpZ2UiID0+ICJGNUY1REMiLAoJIm9sZGxhY2UiID0+ICJGREY1RTYiLAoJImZsb3JhbHdoaXRlIiA9PiAiRkZGQUYwIiwKCSJpdm9yeSIgPT4gIkZGRkZGMCIsCgkiYW50aXF1ZXdoaXRlIiA9PiAiRkFFQkQ3IiwKCSJsaW5lbiIgPT4gIkZBRjBFNiIsCgkibGF2ZW5kZXJibHVzaCIgPT4gIkZGRjBGNSIsCgkibWlzdHlyb3NlIiA9PiAiRkZFNEUxIiwKCSJnYWluc2Jvcm8iID0+ICJEQ0RDREMiLAoJImxpZ2h0Z3JheSIgPT4gIkQzRDNEMyIsCgkibGlnaHRncmV5IiA9PiAiRDNEM0QzIiwKCSJzaWx2ZXIiID0+ICJDMEMwQzAiLAoJImRhcmtncmF5IiA9PiAiQTlBOUE5IiwKCSJkYXJrZ3JleSIgPT4gIkE5QTlBOSIsCgkiZ3JheSIgPT4gIjgwODA4MCIsCgkiZ3JleSIgPT4gIjgwODA4MCIsCgkiZGltZ3JheSIgPT4gIjY5Njk2OSIsCgkiZGltZ3JleSIgPT4gIjY5Njk2OSIsCgkibGlnaHRzbGF0ZWdyYXkiID0+ICI3Nzg4OTkiLAoJImxpZ2h0c2xhdGVncmV5IiA9PiAiNzc4ODk5IiwKCSJzbGF0ZWdyYXkiID0+ICI3MDgwOTAiLAoJInNsYXRlZ3JleSIgPT4gIjcwODA5MCIsCgkiZGFya3NsYXRlZ3JheSIgPT4gIjJGNEY0RiIsCgkiZGFya3NsYXRlZ3JleSIgPT4gIjJGNEY0RiIsCgkiYmxhY2siID0+ICIwMDAwMDAiLAoJInJveWdiaXYiID0+ICJyZWQsb3JhbmdlLHllbGxvdyxncmVlbixibHVlLGluZGlnbyx2aW9sZXQiCik7CgoKZnVuY3Rpb24gcmdiRnJvbUhleCgkaGV4VmFsdWUpCnsKCWlmIChzdHJsZW4oJGhleFZhbHVlKSA9PSAzKSB7IC8vc2hvcnRoYW5kIGNoZWNrCgkJJHIgPSBoZXhkZWMoc3RyX3JlcGVhdCgkaGV4VmFsdWVbMF0sIDIpKTsKCQkkZyA9IGhleGRlYyhzdHJfcmVwZWF0KCRoZXhWYWx1ZVsxXSwgMikpOwoJCSRiID0gaGV4ZGVjKHN0cl9yZXBlYXQoJGhleFZhbHVlWzJdLCAyKSk7Cgl9CgllbHNlIGlmIChzdHJsZW4oJGhleFZhbHVlKSA9PSA2KXsgLy9zdGFuZGFyZCBoZXggY29sb3IKCQkkciA9IGhleGRlYyhzdWJzdHIoJGhleFZhbHVlLCAwLCAyKSk7CgkJJGcgPSBoZXhkZWMoc3Vic3RyKCRoZXhWYWx1ZSwgMiwgMikpOwoJCSRiID0gaGV4ZGVjKHN1YnN0cigkaGV4VmFsdWUsIDQsIDIpKTsKCX0KCWVsc2V7CgkJJHIgPSAwOwoJCSRnID0gMDsKCQkkYiA9IDA7Cgl9CgoJJHJnYiA9IGFycmF5KAoJCSRyLAoJCSRnLAoJCSRiCgkpOwoJcmV0dXJuICRyZ2I7Cn0KCmZ1bmN0aW9uIGdldEhleEJ5TmFtZSgkbmFtZSkKewoJZ2xvYmFsICRjb2xvcm5hbWVzOwoJaWYgKGlzc2V0KCRjb2xvcm5hbWVzWyRuYW1lXSkpIHsKCQlyZXR1cm4gJGNvbG9ybmFtZXNbJG5hbWVdOwoJfQoJZWxzZSB7CgkJcmV0dXJuIG51bGw7Cgl9Cn0KCi8qCiAqICRpbnB1dCAtIGEgc3RyaW5nLCBwb3NzaWJseSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBIZXhWYWx1ZXMgYW5kL29yIGNvbG9yIG5hbWVzCiAqCiAqIHJldHVybnMgYW4gYXJyYXkgb2YgW3IsIGcsIGJdIGFycmF5cwogKi8KZnVuY3Rpb24gcGFyc2VDb2xvcnMoJGlucHV0KXsKCSRjb2xvckFycmF5ID0gYXJyYXkoKTsKCSRwYXJ0cyA9IGV4cGxvZGUoIiwiLCAkaW5wdXQpOwoJCglmb3JlYWNoKCRwYXJ0cyBhcyAkY29sb3IpewoJCSRieU5hbWUgPSBnZXRIZXhCeU5hbWUoJGNvbG9yKTsKCQlpZighaXNzZXQoJGJ5TmFtZSkpewoJCQlhcnJheV9wdXNoKCRjb2xvckFycmF5LCByZ2JGcm9tSGV4KCRjb2xvcikpOwoJCX0gZWxzZXsKCQkJaWYgKHN0cnBvcygkYnlOYW1lLCAiLCIpICE9PSBGQUxTRSl7CgkJCQkvLyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBtdWx0aS1wYXJ0IG5hbWUsIGVnOiByb3lnYml2CgkJCQlmb3JlYWNoKHBhcnNlQ29sb3JzKCRieU5hbWUpIGFzICRjb2wpewoJCQkJCWFycmF5X3B1c2goJGNvbG9yQXJyYXksICRjb2wpOwoJCQkJfQoJCQl9IGVsc2V7CgkJCQlhcnJheV9wdXNoKCRjb2xvckFycmF5LCByZ2JGcm9tSGV4KCRieU5hbWUpKTsKCQkJfQoJCX0KCX0KCQoJcmV0dXJuICRjb2xvckFycmF5Owp9CgovKiAKICogJGNvbG9yQXJyYXkgLSBhbiBhcnJheSBvZiBbciwgZywgYl0gYXJyYXlzLiAKICoKICogcmV0dXJucyBhbiBhcnJheSBvZiBbciwgZywgYl0gYXJyYXlzLiAKICovCmZ1bmN0aW9uIGludGVycG9sYXRlR3JhZGllbnQoJGNvbG9yQXJyYXkpewoJJG91dHB1dCA9IGFycmF5KCk7CgkkYXJyTGVuID0gY291bnQoJGNvbG9yQXJyYXkpOwoJJGdyYWRXaWR0aCA9IDIwMCAvICRhcnJMZW47CgkKCQoJZm9yKCRpbmRleCA9IDA7JGluZGV4IDwgJGFyckxlbiAtIDE7ICRpbmRleCsrKXsKCQkkY3VyciA9ICRjb2xvckFycmF5WyRpbmRleF07CgkJJG5leHQgPSAkY29sb3JBcnJheVskaW5kZXgrMV07CgkJCgkJZm9yKCRzdGVwID0gMDsgJHN0ZXAgPCAkZ3JhZFdpZHRoOyAkc3RlcCsrKXsKCQkJYXJyYXlfcHVzaCgkb3V0cHV0LCBhcnJheSgKCQkJCSRjdXJyWzBdICsgJHN0ZXAgLyAkZ3JhZFdpZHRoICogKCRuZXh0WzBdIC0gJGN1cnJbMF0pLAoJCQkJJGN1cnJbMV0gKyAkc3RlcCAvICRncmFkV2lkdGggKiAoJG5leHRbMV0gLSAkY3VyclsxXSksCgkJCQkkY3VyclsyXSArICRzdGVwIC8gJGdyYWRXaWR0aCAqICgkbmV4dFsyXSAtICRjdXJyWzJdKQoJCQkpKTsKCQl9Cgl9CgkKCQoJcmV0dXJuICRvdXRwdXQ7Cn0KCi8qIAogKiAkY29sb3JBcnJheSAtIGFuIGFycmF5IG9mIFtyLCBnLCBiXSBhcnJheXMuIAogKgogKiByZXR1cm5zIGFuIGltYWdlLiAKICovCmZ1bmN0aW9uIGNyZWF0ZVN3YXRjaCgkY29sb3JBcnJheSkKewoJJGltZyA9IGltYWdlY3JlYXRlKDIwMCwgNDApOwoJJGNvbFdpZHRoID0gMjAwIC8gY291bnQoJGNvbG9yQXJyYXkpOwoJJHggPSAwOwoJZm9yZWFjaCgkY29sb3JBcnJheSBhcyAkcmdiKSB7CgkJJGNvbG9yID0gaW1hZ2Vjb2xvcmFsbG9jYXRlKCRpbWcsICRyZ2JbMF0sICRyZ2JbMV0sICRyZ2JbMl0pOwoJCWltYWdlZmlsbGVkcmVjdGFuZ2xlKCRpbWcsICR4LCAwLCAkeCArICRjb2xXaWR0aCwgNDAsICRjb2xvcik7CgkJJHggKz0gJGNvbFdpZHRoOwoJfQoJcmV0dXJuIGltYWdlcG5nKCRpbWcpOwp9CgovKgokY29sb3JzID0gJF9HRVRbJ2NvbG9yJ107CiRncmFkaWVudCA9ICRfR0VUWydncmFkaWVudCddOwoKaWYgKGlzc2V0KCRjb2xvcnMpKSB7CgkkY29sb3JBcnJheSA9IHBhcnNlQ29sb3JzKHN0cnRvbG93ZXIoJGNvbG9ycykpOwp9IGVsc2UgaWYgKGlzc2V0KCRncmFkaWVudCkpewoJJGNvbG9yQXJyYXkgPSBpbnRlcnBvbGF0ZUdyYWRpZW50KHBhcnNlQ29sb3JzKHN0cnRvbG93ZXIoJGdyYWRpZW50KSkpOwp9CgppZiAoaXNzZXQoJGNvbG9yQXJyYXkpKXsKCWNyZWF0ZVN3YXRjaCgkY29sb3JBcnJheSk7Cn0KKi8KCmNyZWF0ZVN3YXRjaChpbnRlcnBvbGF0ZUdyYWRpZW50KHBhcnNlQ29sb3JzKCJhcXVhLHBvb3Ascm95Z2Jpdixwb29wLGFxdWEiKSkpOwoKPz4=