[
  {
    "path": ".gitignore",
    "content": "out\n.idea\n*.iml\n*.jar\n.DS_Store\n.gradle\nbuild\n"
  },
  {
    "path": "README.md",
    "content": "# Name That Color - Android Studio Plugin\n\n## Introduction\n\nWhen I get a new color to set in my Android app, I never know how to call it. \n\nI used the website [Name That Color](http://chir.ag/projects/ntc/) for years, and I wanted to have it integrated inside Android Studio, so I ported its JS library to Kotlin and built this IntelliJ plugin around it.\n\nBesides its long [list of colors](https://github.com/galex/name-that-color-intellij-plugin/blob/master/namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/core/util/Colors.kt), users requested to add the material colors names, so we can now name our colors as [material colors](https://github.com/galex/name-that-color-intellij-plugin/blob/master/namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/core/util/MaterialColors.kt) as well. \n\nThis plugin lets you insert a name for a color you copy-paste or type in an android resource file.\n\n# Usage\n\nTwo options are available: Clipboard and Quick Fix.\n\n### Clipboard\n\nWhen you copy your color to add it in your app, you can use **CONTROL+SPACE** instead of pasting it to insert directly the right `<color>` tag. \n\n![after entering CONTROL+SPACE](/screenshots/clipboard.png)\n\n### Quick Fix\n\nYou can insert \"aaa\" and an error warning in the form of a Quick Fix will show up so you can replace \"aaa\" with its own `<color name=\"silver_chalice\">#aaa</color> ` tag by using **ALT+ENTER**.\n\n![after entering ALT+ENTER](/screenshots/quick-fix.png)\n\n# Color Input \n\nThe Plugin accepts all formats of colors allowed in Android (lowercase or uppercase), and you don't need to prefix your color with \"#\":\n* Color\n  * **abc** -> **#abc**\n  * **#abc** -> **#abc**\n  * **aBc** -> **#aBc**\n  * **ab12dc** -> **#ab12dc**\n  * **#ab12dc** -> **#ab12dc** \n* Alpha + Color \n  * **6abc** -> **#6abc**\n  * **#6abc** -> **#6abc**\n  * **60ab12dc** -> **#60ab12dc**\n  * **#60ab12dc** -> **#60ab12dc**\n    \n# Names\n\n### Name that color\n\nIf you chose to use \"Name that color\", this [list of colors](https://github.com/galex/name-that-color-intellij-plugin/blob/master/namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/core/util/Colors.kt) is used. If the exact color is not found, the algorithm will find the closest match, if possible. \n\n##### Examples\n\n* Color\n  * **abc** -> `<color name=\"casper\">#abc</color>`\n  * **ab12dc** -> `<color name=\"electric_violet\">#ab12dc</color>`\n* Alpha + Color \n  * **6abc** -> `<color name=\"casper_alpha_40\">#6abc</color>`\n  * **60ab12dc** -> `<color name=\"electric_violet_alpha_38\">#60ab12dc</color>`\n* Alpha(%) + Color\n  * **40%abc** -> `<color name=\"casper_alpha_40\">#66AABBCC</color>`\n  * **38%ab12dc** -> `<color name=\"electric_violet_alpha_38\">#61AB12DC</color>`\n\n### Name that material color\n\nIf you chose to use \"Name that material color\", this [list of material colors](https://github.com/galex/name-that-color-intellij-plugin/blob/master/namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/core/util/MaterialColors.kt) is used. If the exact color is not found, the algorithm will find the closest match, if possible.\n\n##### Examples\n\n* Color\n  * **abc** -> `<color name=\"blue_grey_200\">#abc</color>`\n  * **ab12dc** -> `<color name=\"purple_a700\">#ab12dc</color>`\n* Alpha + Color \n  * **6abc** -> `<color name=\"blue_grey_200_alpha_40\">#6abc</color>`\n  * **60ab12dc** -> `<color name=\"purple_a700_alpha_38\">#60ab12dc</color>`\n* Alpha(%) + Color\n  * **40%abc** -> `<color name=\"blue_grey_200_alpha_40\">#66AABBCC</color>`\n  * **38%ab12dc** -> `<color name=\"purple_a700_alpha_38\">#61AB12DC</color>`\n  \n## Install\n\nIn Android Studio, open **Settings** > **Plugins** > **Browse Plugins** and type \"**name that color**\".\n\n## Thanks\n\nI'd like to thank [aednlaxer](https://github.com/aednlaxer) for submitting bugs and ideas!\n\n## License \n\nThis plugin is released under the: Creative Commons License:\nAttribution 2.5 http://creativecommons.org/licenses/by/2.5/"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Fri Jan 04 09:52:12 IST 2019\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.0-all.zip\n"
  },
  {
    "path": "gradlew",
    "content": "#!/usr/bin/env sh\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=$(save \"$@\")\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\n# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong\nif [ \"$(uname)\" = \"Darwin\" ] && [ \"$HOME\" = \"$PWD\" ]; then\n  cd \"$(dirname \"$0\")\"\nfi\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@rem  Gradle startup script for Windows\r\n@rem\r\n@rem ##########################################################################\r\n\r\n@rem Set local scope for the variables with windows NT shell\r\nif \"%OS%\"==\"Windows_NT\" setlocal\r\n\r\nset DIRNAME=%~dp0\r\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\r\nset APP_BASE_NAME=%~n0\r\nset APP_HOME=%DIRNAME%\r\n\r\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\r\nset DEFAULT_JVM_OPTS=\r\n\r\n@rem Find java.exe\r\nif defined JAVA_HOME goto findJavaFromJavaHome\r\n\r\nset JAVA_EXE=java.exe\r\n%JAVA_EXE% -version >NUL 2>&1\r\nif \"%ERRORLEVEL%\" == \"0\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:findJavaFromJavaHome\r\nset JAVA_HOME=%JAVA_HOME:\"=%\r\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\r\n\r\nif exist \"%JAVA_EXE%\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:init\r\n@rem Get command-line arguments, handling Windows variants\r\n\r\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\r\n\r\n:win9xME_args\r\n@rem Slurp the command line arguments.\r\nset CMD_LINE_ARGS=\r\nset _SKIP=2\r\n\r\n:win9xME_args_slurp\r\nif \"x%~1\" == \"x\" goto execute\r\n\r\nset CMD_LINE_ARGS=%*\r\n\r\n:execute\r\n@rem Setup the command line\r\n\r\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n\r\n@rem Execute Gradle\r\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\r\n\r\n:end\r\n@rem End local scope for the variables with windows NT shell\r\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\r\n\r\n:fail\r\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\r\nrem the _cmd.exe /c_ return code!\r\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\r\nexit /b 1\r\n\r\n:mainEnd\r\nif \"%OS%\"==\"Windows_NT\" endlocal\r\n\r\n:omega\r\n"
  },
  {
    "path": "namethatcolor/build.gradle",
    "content": "buildscript {\n    repositories {\n        mavenCentral()\n        jcenter()\n    }\n}\n\nplugins {\n    id \"org.jetbrains.intellij\" version \"0.6.5\"\n    id \"org.jetbrains.kotlin.jvm\" version \"1.4.30-RC\"\n}\n\nrepositories {\n    mavenCentral()\n    jcenter()\n}\n\nintellij {\n    version '2020.3.2'\n    pluginName 'NameThatColor'\n    type 'AI'\n}\n\npublishPlugin {\n    token pluginsDevToken\n}\n\npatchPluginXml {\n    version \"1.7.1\"\n    sinceBuild '201.6668.113'\n}"
  },
  {
    "path": "namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/core/exception/ColorNotFoundException.kt",
    "content": "package il.co.galex.namethatcolor.core.exception\n\nclass ColorNotFoundException: Exception()"
  },
  {
    "path": "namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/core/manager/ColorNameFinder.kt",
    "content": "package il.co.galex.namethatcolor.core.manager\n\nimport il.co.galex.namethatcolor.core.exception.ColorNotFoundException\nimport il.co.galex.namethatcolor.core.model.Color\nimport il.co.galex.namethatcolor.core.model.HexColor\nimport il.co.galex.namethatcolor.core.util.colorsMaterialNames\nimport il.co.galex.namethatcolor.core.util.colorsNames\nimport il.co.galex.namethatcolor.core.util.hsl\nimport il.co.galex.namethatcolor.core.util.rgb\nimport kotlin.math.pow\n\n/**\n * Class which loads all the hex codes and names and prepare the RGB and HSL values to be searched for an exact or closest match\n * Based on http://chir.ag/projects/ntc/ntc.js\n */\nobject ColorNameFinder {\n\n    private var colors: List<Color> = colorsNames.map { entry -> Color(entry.key, entry.value, entry.key.rgb(), entry.key.hsl()) }\n    private var materialColors: List<Color> = colorsMaterialNames.map { entry -> Color(entry.key, entry.value, entry.key.rgb(), entry.key.hsl()) }\n\n    /**\n     * look for the Color of an hexadecimal color\n     */\n    fun findColor(color: HexColor) = find(color, colors)\n\n    /**\n     * look for the Color of an hexadecimal material color\n     */\n    fun findMaterialColor(color: HexColor) = find(color, materialColors)\n\n    /**\n     * look for the Color of an hexadecimal color\n     */\n    private fun find(color: HexColor, colors: List<Color>): Pair<HexColor, Color> {\n\n        val (r, g, b) = color.rgb()\n        val (h, s, l) = color.hsl()\n\n        var cl = -1\n        var df = -1\n\n        colors.forEachIndexed { index, col ->\n\n            if (color.value == col.hexCode) return color to col\n            else {\n                val ndf1 = (r - col.rgb.r).toDouble().pow(2.0).toInt() + (g - col.rgb.g).toDouble().pow(2.0).toInt() + (b - col.rgb.b).toDouble().pow(2.0).toInt()\n                val ndf2 = (h - col.hsl.h).toDouble().pow(2.0).toInt() + (s - col.hsl.s).toDouble().pow(2.0).toInt() + (l - col.hsl.l).toDouble().pow(2.0).toInt()\n                val ndf = ndf1 + ndf2 * 2\n                if (df < 0 || df > ndf) {\n                    df = ndf\n                    cl = index\n                }\n            }\n        }\n\n        // if not found a close by one, we return an error\n        if (cl < 0) throw ColorNotFoundException()\n        // if found, return the name\n        return color to colors[cl]\n    }\n}\n"
  },
  {
    "path": "namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/core/model/Color.kt",
    "content": "package il.co.galex.namethatcolor.core.model\n\ndata class Color(val hexCode: String, val name: String, val rgb: Rgb, val hsl: Hsl)"
  },
  {
    "path": "namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/core/model/HexColor.kt",
    "content": "package il.co.galex.namethatcolor.core.model\n\nimport il.co.galex.namethatcolor.core.util.hsl\nimport il.co.galex.namethatcolor.core.util.rgb\nimport il.co.galex.namethatcolor.core.util.roundTo2Decimal\nimport il.co.galex.namethatcolor.core.util.roundTo2HexString\n\nclass HexColor(val input: String) {\n\n    private var alpha: String? = null\n    private var hasPercent = false\n    var percentAlpha: Int? = null\n    val value: String\n\n    init {\n        var cup = input.toUpperCase()\n\n        if (cup.isEmpty()) {\n            throw IllegalArgumentException(\"The input cannot be an empty string\")\n        }\n\n        if (cup.startsWith(\"#\")) {\n            cup = cup.substringAfter(\"#\")\n        }\n\n        // Add support for Alpha format of percentage : 10%\n        if (cup.contains(\"%\")) {\n            hasPercent = true\n            val alphaValueText = cup.substringBefore(\"%\").trim()\n            if (alphaValueText.isNotEmpty()) {\n                val alphaValue = alphaValueText.toInt()\n                alpha = (alphaValue / 100.0 * 255).roundTo2HexString().toUpperCase()\n                percentAlpha = alphaValue\n            }\n            cup = cup.substringAfter(\"%\")\n        }\n\n        when (cup.length) {\n            3 -> {\n                this.value = cup[0] + cup[0] + cup[1] + cup[1] + cup[2] + cup[2]\n            }\n\n            4 -> {\n                if (hasPercent) {\n                    throw IllegalArgumentException(\"Length is weird\")\n                }\n                this.value = cup[1] + cup[1] + cup[2] + cup[2] + cup[3] + cup[3]\n                this.alpha = cup[0] + cup[0]\n            }\n\n            6 -> {\n                this.value = cup\n            }\n\n            8 -> {\n                if (hasPercent) {\n                    throw IllegalArgumentException(\"Length is weird\")\n                }\n                this.value = cup.substring(2)\n                this.alpha = cup.substring(0, 2)\n            }\n\n            else -> throw IllegalArgumentException(\"Length is weird\")\n        }\n        // if we survived till here, let's now check the format of the value itself\n        if (!VALUE_REGEX.matches(value)) {\n            throw IllegalArgumentException(\"The value $value is not of a correct format\")\n        }\n\n        alpha?.let {\n            if (!ALPHA_REGEX.matches(it)) {\n                throw IllegalArgumentException(\"The alpha $alpha is not of a correct format\")\n            }\n            if (!hasPercent) {\n                percentAlpha = (it.toInt(16) / 255.0).roundTo2Decimal()\n            }\n        }\n    }\n\n    fun rgb() = value.rgb()\n    fun hsl() = value.hsl()\n\n    override fun toString(): String = PREFIX + if (alpha == null) value else \"$alpha$value\"\n\n    companion object {\n        private const val PREFIX = \"#\"\n        private val VALUE_REGEX = Regex(\"[0-9a-fA-F]{6}$\")\n        private val ALPHA_REGEX = Regex(\"[0-9a-fA-F]{2}$\")\n    }\n\n    private operator fun Char.plus(c: Char): String {\n        return \"$this$c\"\n    }\n}\n\n\n"
  },
  {
    "path": "namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/core/model/Hsl.kt",
    "content": "package il.co.galex.namethatcolor.core.model\n\ndata class Hsl(val h: Int, val s: Int, val l: Int)"
  },
  {
    "path": "namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/core/model/Rgb.kt",
    "content": "package il.co.galex.namethatcolor.core.model\n\ndata class Rgb(val r: Int, val g: Int, val b: Int) {\n\n    fun percent(): Triple<Double, Double, Double> = Triple(r / 255.0, g / 255.0, b / 255.0)\n}"
  },
  {
    "path": "namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/core/util/ColorExtensions.kt",
    "content": "package il.co.galex.namethatcolor.core.util\n\nimport il.co.galex.namethatcolor.core.model.Hsl\nimport il.co.galex.namethatcolor.core.model.Rgb\nimport il.co.galex.namethatcolor.plugin.util.ALPHA_SEPARATOR\nimport kotlin.math.roundToInt\n\n/**\n * Transforms a hexadecimal color like \"8D90A1\" to an Rgb(141, 144, 161)\n */\nfun String.rgb() = Rgb(\n        r = this.substring(0, 2).toInt(16),\n        g = this.substring(2, 4).toInt(16),\n        b = this.substring(4, 6).toInt(16)\n)\n\n/**\n * Transforms an hexadecimal color like \"#8D90A1\" to an Hsl(231, 10, 59)\n * Based on http://www.niwa.nu/2013/05/math-behind-colorspace-conversions-rgb-hsl/\n */\nfun String.hsl(): Hsl {\n\n    val (r, g, b) = this.rgb().percent()\n\n    val min = minOf(r, b, g)\n    val max = maxOf(r, b, g)\n\n    val l = (min + max) / 2\n\n    if (min == max) {\n        return Hsl(0, 0, l.roundTo2Decimal())\n    } else {\n\n        //If Luminance is smaller then 0.5, then Saturation = (max-min)/(max+min)\n        //If Luminance is bigger then 0.5. then Saturation = ( max-min)/(2.0-max-min)\n        val s = if (l < 0.5) (max - min) / (max + min) else (max - min) / (2.0 - max - min)\n\n        //If Red is max, then Hue = (G-B)/(max-min)\n        //If Green is max, then Hue = 2.0 + (B-R)/(max-min)\n        //If Blue is max, then Hue = 4.0 + (R-G)/(max-min)\n        var h = when (max) {\n            r -> (g - b) / (max - min)\n            g -> 2.0 + (b - r) / (max - min)\n            b -> 4.0 + (r - g) / (max - min)\n            else -> throw IllegalStateException(\"no way\")\n        }\n\n        h *= 60\n        if (h < 0) h += 360\n\n        return Hsl(h.roundToInt(), s.roundTo2Decimal(), l.roundTo2Decimal())\n    }\n}\n\n\nfun String.toXmlName(percentAlpha: Int?): String {\n    var name = this.toLowerCase().replace(\" \", \"_\")\n    if (percentAlpha != null) {\n        name += \"$ALPHA_SEPARATOR$percentAlpha\"\n    }\n    return name\n}"
  },
  {
    "path": "namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/core/util/Colors.kt",
    "content": "package il.co.galex.namethatcolor.core.util\n\nimport il.co.galex.namethatcolor.core.model.Color\n\n/**\n * List of colors\n * Based on http://chir.ag/projects/ntc/ntc.js\n */\nval colorsNames = mapOf(\n        \"000000\" to \"Black\",\n        \"000080\" to \"Navy Blue\",\n        \"0000C8\" to \"Dark Blue\",\n        \"0000FF\" to \"Blue\",\n        \"000741\" to \"Stratos\",\n        \"001B1C\" to \"Swamp\",\n        \"002387\" to \"Resolution Blue\",\n        \"002900\" to \"Deep Fir\",\n        \"002E20\" to \"Burnham\",\n        \"002FA7\" to \"International Klein Blue\",\n        \"003153\" to \"Prussian Blue\",\n        \"003366\" to \"Midnight Blue\",\n        \"003399\" to \"Smalt\",\n        \"003532\" to \"Deep Teal\",\n        \"003E40\" to \"Cyprus\",\n        \"004620\" to \"Kaitoke Green\",\n        \"0047AB\" to \"Cobalt\",\n        \"004816\" to \"Crusoe\",\n        \"004950\" to \"Sherpa Blue\",\n        \"0056A7\" to \"Endeavour\",\n        \"00581A\" to \"Camarone\",\n        \"0066CC\" to \"Science Blue\",\n        \"0066FF\" to \"Blue Ribbon\",\n        \"00755E\" to \"Tropical Rain Forest\",\n        \"0076A3\" to \"Allports\",\n        \"007BA7\" to \"Deep Cerulean\",\n        \"007EC7\" to \"Lochmara\",\n        \"007FFF\" to \"Azure Radiance\",\n        \"008080\" to \"Teal\",\n        \"0095B6\" to \"Bondi Blue\",\n        \"009DC4\" to \"Pacific Blue\",\n        \"00A693\" to \"Persian Green\",\n        \"00A86B\" to \"Jade\",\n        \"00CC99\" to \"Caribbean Green\",\n        \"00CCCC\" to \"Robins Egg Blue\",\n        \"00FF00\" to \"Green\",\n        \"00FF7F\" to \"Spring Green\",\n        \"00FFFF\" to \"Cyan Aqua\",\n        \"010D1A\" to \"Blue Charcoal\",\n        \"011635\" to \"Midnight\",\n        \"011D13\" to \"Holly\",\n        \"012731\" to \"Daintree\",\n        \"01361C\" to \"Cardin Green\",\n        \"01371A\" to \"County Green\",\n        \"013E62\" to \"Astronaut Blue\",\n        \"013F6A\" to \"Regal Blue\",\n        \"014B43\" to \"Aqua Deep\",\n        \"015E85\" to \"Orient\",\n        \"016162\" to \"Blue Stone\",\n        \"016D39\" to \"Fun Green\",\n        \"01796F\" to \"Pine Green\",\n        \"017987\" to \"Blue Lagoon\",\n        \"01826B\" to \"Deep Sea\",\n        \"01A368\" to \"Green Haze\",\n        \"022D15\" to \"English Holly\",\n        \"02402C\" to \"Sherwood Green\",\n        \"02478E\" to \"Congress Blue\",\n        \"024E46\" to \"Evening Sea\",\n        \"026395\" to \"Bahama Blue\",\n        \"02866F\" to \"Observatory\",\n        \"02A4D3\" to \"Cerulean\",\n        \"03163C\" to \"Tangaroa\",\n        \"032B52\" to \"Green Vogue\",\n        \"036A6E\" to \"Mosque\",\n        \"041004\" to \"Midnight Moss\",\n        \"041322\" to \"Black Pearl\",\n        \"042E4C\" to \"Blue Whale\",\n        \"044022\" to \"Zuccini\",\n        \"044259\" to \"Teal Blue\",\n        \"051040\" to \"Deep Cove\",\n        \"051657\" to \"Gulf Blue\",\n        \"055989\" to \"Venice Blue\",\n        \"056F57\" to \"Watercourse\",\n        \"062A78\" to \"Catalina Blue\",\n        \"063537\" to \"Tiber\",\n        \"069B81\" to \"Gossamer\",\n        \"06A189\" to \"Niagara\",\n        \"073A50\" to \"Tarawera\",\n        \"080110\" to \"Jaguar\",\n        \"081910\" to \"Black Bean\",\n        \"082567\" to \"Deep Sapphire\",\n        \"088370\" to \"Elf Green\",\n        \"08E8DE\" to \"Bright Turquoise\",\n        \"092256\" to \"Downriver\",\n        \"09230F\" to \"Palm Green\",\n        \"09255D\" to \"Madison\",\n        \"093624\" to \"Bottle Green\",\n        \"095859\" to \"Deep Sea Green\",\n        \"097F4B\" to \"Salem\",\n        \"0A001C\" to \"Black Russian\",\n        \"0A480D\" to \"Dark Fern\",\n        \"0A6906\" to \"Japanese Laurel\",\n        \"0A6F75\" to \"Atoll\",\n        \"0B0B0B\" to \"Cod Gray\",\n        \"0B0F08\" to \"Marshland\",\n        \"0B1107\" to \"Gordons Green\",\n        \"0B1304\" to \"Black Forest\",\n        \"0B6207\" to \"San Felix\",\n        \"0BDA51\" to \"Malachite\",\n        \"0C0B1D\" to \"Ebony\",\n        \"0C0D0F\" to \"Woodsmoke\",\n        \"0C1911\" to \"Racing Green\",\n        \"0C7A79\" to \"Surfie Green\",\n        \"0C8990\" to \"Blue Chill\",\n        \"0D0332\" to \"Black Rock\",\n        \"0D1117\" to \"Bunker\",\n        \"0D1C19\" to \"Aztec\",\n        \"0D2E1C\" to \"Bush\",\n        \"0E0E18\" to \"Cinder\",\n        \"0E2A30\" to \"Firefly\",\n        \"0F2D9E\" to \"Torea Bay\",\n        \"10121D\" to \"Vulcan\",\n        \"101405\" to \"Green Waterloo\",\n        \"105852\" to \"Eden\",\n        \"110C6C\" to \"Arapawa\",\n        \"120A8F\" to \"Ultramarine\",\n        \"123447\" to \"Elephant\",\n        \"126B40\" to \"Jewel\",\n        \"130000\" to \"Diesel\",\n        \"130A06\" to \"Asphalt\",\n        \"13264D\" to \"Blue Zodiac\",\n        \"134F19\" to \"Parsley\",\n        \"140600\" to \"Nero\",\n        \"1450AA\" to \"Tory Blue\",\n        \"151F4C\" to \"Bunting\",\n        \"1560BD\" to \"Denim\",\n        \"15736B\" to \"Genoa\",\n        \"161928\" to \"Mirage\",\n        \"161D10\" to \"Hunter Green\",\n        \"162A40\" to \"Big Stone\",\n        \"163222\" to \"Celtic\",\n        \"16322C\" to \"Timber Green\",\n        \"163531\" to \"Gable Green\",\n        \"171F04\" to \"Pine Tree\",\n        \"175579\" to \"Chathams Blue\",\n        \"182D09\" to \"Deep Forest Green\",\n        \"18587A\" to \"Blumine\",\n        \"19330E\" to \"Palm Leaf\",\n        \"193751\" to \"Nile Blue\",\n        \"1959A8\" to \"Fun Blue\",\n        \"1A1A68\" to \"Lucky Point\",\n        \"1AB385\" to \"Mountain Meadow\",\n        \"1B0245\" to \"Tolopea\",\n        \"1B1035\" to \"Haiti\",\n        \"1B127B\" to \"Deep Koamaru\",\n        \"1B1404\" to \"Acadia\",\n        \"1B2F11\" to \"Seaweed\",\n        \"1B3162\" to \"Biscay\",\n        \"1B659D\" to \"Matisse\",\n        \"1C1208\" to \"Crowshead\",\n        \"1C1E13\" to \"Rangoon Green\",\n        \"1C39BB\" to \"Persian Blue\",\n        \"1C402E\" to \"Everglade\",\n        \"1C7C7D\" to \"Elm\",\n        \"1D6142\" to \"Green Pea\",\n        \"1E0F04\" to \"Creole\",\n        \"1E1609\" to \"Karaka\",\n        \"1E1708\" to \"El Paso\",\n        \"1E385B\" to \"Cello\",\n        \"1E433C\" to \"Te Papa Green\",\n        \"1E90FF\" to \"Dodger Blue\",\n        \"1E9AB0\" to \"Eastern Blue\",\n        \"1F120F\" to \"Night Rider\",\n        \"1FC2C2\" to \"Java\",\n        \"20208D\" to \"Jacksons Purple\",\n        \"202E54\" to \"Cloud Burst\",\n        \"204852\" to \"Blue Dianne\",\n        \"211A0E\" to \"Eternity\",\n        \"220878\" to \"Deep Blue\",\n        \"228B22\" to \"Forest Green\",\n        \"233418\" to \"Mallard\",\n        \"240A40\" to \"Violet\",\n        \"240C02\" to \"Kilamanjaro\",\n        \"242A1D\" to \"Log Cabin\",\n        \"242E16\" to \"Black Olive\",\n        \"24500F\" to \"Green House\",\n        \"251607\" to \"Graphite\",\n        \"251706\" to \"Cannon Black\",\n        \"251F4F\" to \"Port Gore\",\n        \"25272C\" to \"Shark\",\n        \"25311C\" to \"Green Kelp\",\n        \"2596D1\" to \"Curious Blue\",\n        \"260368\" to \"Paua\",\n        \"26056A\" to \"Paris M\",\n        \"261105\" to \"Wood Bark\",\n        \"261414\" to \"Gondola\",\n        \"262335\" to \"Steel Gray\",\n        \"26283B\" to \"Ebony Clay\",\n        \"273A81\" to \"Bay of Many\",\n        \"27504B\" to \"Plantation\",\n        \"278A5B\" to \"Eucalyptus\",\n        \"281E15\" to \"Oil\",\n        \"283A77\" to \"Astronaut\",\n        \"286ACD\" to \"Mariner\",\n        \"290C5E\" to \"Violent Violet\",\n        \"292130\" to \"Bastille\",\n        \"292319\" to \"Zeus\",\n        \"292937\" to \"Charade\",\n        \"297B9A\" to \"Jelly Bean\",\n        \"29AB87\" to \"Jungle Green\",\n        \"2A0359\" to \"Cherry Pie\",\n        \"2A140E\" to \"Coffee Bean\",\n        \"2A2630\" to \"Baltic Sea\",\n        \"2A380B\" to \"Turtle Green\",\n        \"2A52BE\" to \"Cerulean Blue\",\n        \"2B0202\" to \"Sepia Black\",\n        \"2B194F\" to \"Valhalla\",\n        \"2B3228\" to \"Heavy Metal\",\n        \"2C0E8C\" to \"Blue Gem\",\n        \"2C1632\" to \"Revolver\",\n        \"2C2133\" to \"Bleached Cedar\",\n        \"2C8C84\" to \"Lochinvar\",\n        \"2D2510\" to \"Mikado\",\n        \"2D383A\" to \"Outer Space\",\n        \"2D569B\" to \"St Tropaz\",\n        \"2E0329\" to \"Jacaranda\",\n        \"2E1905\" to \"Jacko Bean\",\n        \"2E3222\" to \"Rangitoto\",\n        \"2E3F62\" to \"Rhino\",\n        \"2E8B57\" to \"Sea Green\",\n        \"2EBFD4\" to \"Scooter\",\n        \"2F270E\" to \"Onion\",\n        \"2F3CB3\" to \"Governor Bay\",\n        \"2F519E\" to \"Sapphire\",\n        \"2F5A57\" to \"Spectra\",\n        \"2F6168\" to \"Casal\",\n        \"300529\" to \"Melanzane\",\n        \"301F1E\" to \"Cocoa Brown\",\n        \"302A0F\" to \"Woodrush\",\n        \"304B6A\" to \"San Juan\",\n        \"30D5C8\" to \"Turquoise\",\n        \"311C17\" to \"Eclipse\",\n        \"314459\" to \"Pickled Bluewood\",\n        \"315BA1\" to \"Azure\",\n        \"31728D\" to \"Calypso\",\n        \"317D82\" to \"Paradiso\",\n        \"32127A\" to \"Persian Indigo\",\n        \"32293A\" to \"Blackcurrant\",\n        \"323232\" to \"Mine Shaft\",\n        \"325D52\" to \"Stromboli\",\n        \"327C14\" to \"Bilbao\",\n        \"327DA0\" to \"Astral\",\n        \"33036B\" to \"Christalle\",\n        \"33292F\" to \"Thunder\",\n        \"33CC99\" to \"Shamrock\",\n        \"341515\" to \"Tamarind\",\n        \"350036\" to \"Mardi Gras\",\n        \"350E42\" to \"Valentino\",\n        \"350E57\" to \"Jagger\",\n        \"353542\" to \"Tuna\",\n        \"354E8C\" to \"Chambray\",\n        \"363050\" to \"Martinique\",\n        \"363534\" to \"Tuatara\",\n        \"363C0D\" to \"Waiouru\",\n        \"36747D\" to \"Ming\",\n        \"368716\" to \"La Palma\",\n        \"370202\" to \"Chocolate\",\n        \"371D09\" to \"Clinker\",\n        \"37290E\" to \"Brown Tumbleweed\",\n        \"373021\" to \"Birch\",\n        \"377475\" to \"Oracle\",\n        \"380474\" to \"Blue Diamond\",\n        \"381A51\" to \"Grape\",\n        \"383533\" to \"Dune\",\n        \"384555\" to \"Oxford Blue\",\n        \"384910\" to \"Clover\",\n        \"394851\" to \"Limed Spruce\",\n        \"396413\" to \"Dell\",\n        \"3A0020\" to \"Toledo\",\n        \"3A2010\" to \"Sambuca\",\n        \"3A2A6A\" to \"Jacarta\",\n        \"3A686C\" to \"William\",\n        \"3A6A47\" to \"Killarney\",\n        \"3AB09E\" to \"Keppel\",\n        \"3B000B\" to \"Temptress\",\n        \"3B0910\" to \"Aubergine\",\n        \"3B1F1F\" to \"Jon\",\n        \"3B2820\" to \"Treehouse\",\n        \"3B7A57\" to \"Amazon\",\n        \"3B91B4\" to \"Boston Blue\",\n        \"3C0878\" to \"Windsor\",\n        \"3C1206\" to \"Rebel\",\n        \"3C1F76\" to \"Meteorite\",\n        \"3C2005\" to \"Dark Ebony\",\n        \"3C3910\" to \"Camouflage\",\n        \"3C4151\" to \"Bright Gray\",\n        \"3C4443\" to \"Cape Cod\",\n        \"3C493A\" to \"Lunar Green\",\n        \"3D0C02\" to \"Bean  \",\n        \"3D2B1F\" to \"Bistre\",\n        \"3D7D52\" to \"Goblin\",\n        \"3E0480\" to \"Kingfisher Daisy\",\n        \"3E1C14\" to \"Cedar\",\n        \"3E2B23\" to \"English Walnut\",\n        \"3E2C1C\" to \"Black Marlin\",\n        \"3E3A44\" to \"Ship Gray\",\n        \"3EABBF\" to \"Pelorous\",\n        \"3F2109\" to \"Bronze\",\n        \"3F2500\" to \"Cola\",\n        \"3F3002\" to \"Madras\",\n        \"3F307F\" to \"Minsk\",\n        \"3F4C3A\" to \"Cabbage Pont\",\n        \"3F583B\" to \"Tom Thumb\",\n        \"3F5D53\" to \"Mineral Green\",\n        \"3FC1AA\" to \"Puerto Rico\",\n        \"3FFF00\" to \"Harlequin\",\n        \"401801\" to \"Brown Pod\",\n        \"40291D\" to \"Cork\",\n        \"403B38\" to \"Masala\",\n        \"403D19\" to \"Thatch Green\",\n        \"405169\" to \"Fiord\",\n        \"40826D\" to \"Viridian\",\n        \"40A860\" to \"Chateau Green\",\n        \"410056\" to \"Ripe Plum\",\n        \"411F10\" to \"Paco\",\n        \"412010\" to \"Deep Oak\",\n        \"413C37\" to \"Merlin\",\n        \"414257\" to \"Gun Powder\",\n        \"414C7D\" to \"East Bay\",\n        \"4169E1\" to \"Royal Blue\",\n        \"41AA78\" to \"Ocean Green\",\n        \"420303\" to \"Burnt Maroon\",\n        \"423921\" to \"Lisbon Brown\",\n        \"427977\" to \"Faded Jade\",\n        \"431560\" to \"Scarlet Gum\",\n        \"433120\" to \"Iroko\",\n        \"433E37\" to \"Armadillo\",\n        \"434C59\" to \"River Bed\",\n        \"436A0D\" to \"Green Leaf\",\n        \"44012D\" to \"Barossa\",\n        \"441D00\" to \"Morocco Brown\",\n        \"444954\" to \"Mako\",\n        \"454936\" to \"Kelp\",\n        \"456CAC\" to \"San Marino\",\n        \"45B1E8\" to \"Picton Blue\",\n        \"460B41\" to \"Loulou\",\n        \"462425\" to \"Crater Brown\",\n        \"465945\" to \"Gray Asparagus\",\n        \"4682B4\" to \"Steel Blue\",\n        \"480404\" to \"Rustic Red\",\n        \"480607\" to \"Bulgarian Rose\",\n        \"480656\" to \"Clairvoyant\",\n        \"481C1C\" to \"Cocoa Bean\",\n        \"483131\" to \"Woody Brown\",\n        \"483C32\" to \"Taupe\",\n        \"49170C\" to \"Van Cleef\",\n        \"492615\" to \"Brown Derby\",\n        \"49371B\" to \"Metallic Bronze\",\n        \"495400\" to \"Verdun Green\",\n        \"496679\" to \"Blue Bayoux\",\n        \"497183\" to \"Bismark\",\n        \"4A2A04\" to \"Bracken\",\n        \"4A3004\" to \"Deep Bronze\",\n        \"4A3C30\" to \"Mondo\",\n        \"4A4244\" to \"Tundora\",\n        \"4A444B\" to \"Gravel\",\n        \"4A4E5A\" to \"Trout\",\n        \"4B0082\" to \"Pigment Indigo\",\n        \"4B5D52\" to \"Nandor\",\n        \"4C3024\" to \"Saddle\",\n        \"4C4F56\" to \"Abbey\",\n        \"4D0135\" to \"Blackberry\",\n        \"4D0A18\" to \"Cab Sav\",\n        \"4D1E01\" to \"Indian Tan\",\n        \"4D282D\" to \"Cowboy\",\n        \"4D282E\" to \"Livid Brown\",\n        \"4D3833\" to \"Rock\",\n        \"4D3D14\" to \"Punga\",\n        \"4D400F\" to \"Bronzetone\",\n        \"4D5328\" to \"Woodland\",\n        \"4E0606\" to \"Mahogany\",\n        \"4E2A5A\" to \"Bossanova\",\n        \"4E3B41\" to \"Matterhorn\",\n        \"4E420C\" to \"Bronze Olive\",\n        \"4E4562\" to \"Mulled Wine\",\n        \"4E6649\" to \"Axolotl\",\n        \"4E7F9E\" to \"Wedgewood\",\n        \"4EABD1\" to \"Shakespeare\",\n        \"4F1C70\" to \"Honey Flower\",\n        \"4F2398\" to \"Daisy Bush\",\n        \"4F69C6\" to \"Indigo\",\n        \"4F7942\" to \"Fern Green\",\n        \"4F9D5D\" to \"Fruit Salad\",\n        \"4FA83D\" to \"Apple\",\n        \"504351\" to \"Mortar\",\n        \"507096\" to \"Kashmir Blue\",\n        \"507672\" to \"Cutty Sark\",\n        \"50C878\" to \"Emerald\",\n        \"514649\" to \"Emperor\",\n        \"516E3D\" to \"Chalet Green\",\n        \"517C66\" to \"Como\",\n        \"51808F\" to \"Smalt Blue\",\n        \"52001F\" to \"Castro\",\n        \"520C17\" to \"Maroon Oak\",\n        \"523C94\" to \"Gigas\",\n        \"533455\" to \"Voodoo\",\n        \"534491\" to \"Victoria\",\n        \"53824B\" to \"Hippie Green\",\n        \"541012\" to \"Heath\",\n        \"544333\" to \"Judge Gray\",\n        \"54534D\" to \"Fuscous Gray\",\n        \"549019\" to \"Vida Loca\",\n        \"55280C\" to \"Cioccolato\",\n        \"555B10\" to \"Saratoga\",\n        \"556D56\" to \"Finlandia\",\n        \"5590D9\" to \"Havelock Blue\",\n        \"56B4BE\" to \"Fountain Blue\",\n        \"578363\" to \"Spring Leaves\",\n        \"583401\" to \"Saddle Brown\",\n        \"585562\" to \"Scarpa Flow\",\n        \"587156\" to \"Cactus\",\n        \"589AAF\" to \"Hippie Blue\",\n        \"591D35\" to \"Wine Berry\",\n        \"592804\" to \"Brown Bramble\",\n        \"593737\" to \"Congo Brown\",\n        \"594433\" to \"Millbrook\",\n        \"5A6E9C\" to \"Waikawa Gray\",\n        \"5A87A0\" to \"Horizon\",\n        \"5B3013\" to \"Jambalaya\",\n        \"5C0120\" to \"Bordeaux\",\n        \"5C0536\" to \"Mulberry Wood\",\n        \"5C2E01\" to \"Carnaby Tan\",\n        \"5C5D75\" to \"Comet\",\n        \"5D1E0F\" to \"Redwood\",\n        \"5D4C51\" to \"Don Juan\",\n        \"5D5C58\" to \"Chicago\",\n        \"5D5E37\" to \"Verdigris\",\n        \"5D7747\" to \"Dingley\",\n        \"5DA19F\" to \"Breaker Bay\",\n        \"5E483E\" to \"Kabul\",\n        \"5E5D3B\" to \"Hemlock\",\n        \"5F3D26\" to \"Irish Coffee\",\n        \"5F5F6E\" to \"Mid Gray\",\n        \"5F6672\" to \"Shuttle Gray\",\n        \"5FA777\" to \"Aqua Forest\",\n        \"5FB3AC\" to \"Tradewind\",\n        \"604913\" to \"Horses Neck\",\n        \"605B73\" to \"Smoky\",\n        \"606E68\" to \"Corduroy\",\n        \"6093D1\" to \"Danube\",\n        \"612718\" to \"Espresso\",\n        \"614051\" to \"Eggplant\",\n        \"615D30\" to \"Costa Del Sol\",\n        \"61845F\" to \"Glade Green\",\n        \"622F30\" to \"Buccaneer\",\n        \"623F2D\" to \"Quincy\",\n        \"624E9A\" to \"Butterfly Bush\",\n        \"625119\" to \"West Coast\",\n        \"626649\" to \"Finch\",\n        \"639A8F\" to \"Patina\",\n        \"63B76C\" to \"Fern\",\n        \"6456B7\" to \"Blue Violet\",\n        \"646077\" to \"Dolphin\",\n        \"646463\" to \"Storm Dust\",\n        \"646A54\" to \"Siam\",\n        \"646E75\" to \"Nevada\",\n        \"6495ED\" to \"Cornflower Blue\",\n        \"64CCDB\" to \"Viking\",\n        \"65000B\" to \"Rosewood\",\n        \"651A14\" to \"Cherrywood\",\n        \"652DC1\" to \"Purple Heart\",\n        \"657220\" to \"Fern Frond\",\n        \"65745D\" to \"Willow Grove\",\n        \"65869F\" to \"Hoki\",\n        \"660045\" to \"Pompadour\",\n        \"660099\" to \"Purple\",\n        \"66023C\" to \"Tyrian Purple\",\n        \"661010\" to \"Dark Tan\",\n        \"66B58F\" to \"Silver Tree\",\n        \"66FF00\" to \"Bright Green\",\n        \"66FF66\" to \"Screamin Green\",\n        \"67032D\" to \"Black Rose\",\n        \"675FA6\" to \"Scampi\",\n        \"676662\" to \"Ironside Gray\",\n        \"678975\" to \"Viridian Green\",\n        \"67A712\" to \"Christi\",\n        \"683600\" to \"Nutmeg Wood Finish\",\n        \"685558\" to \"Zambezi\",\n        \"685E6E\" to \"Salt Box\",\n        \"692545\" to \"Tawny Port\",\n        \"692D54\" to \"Finn\",\n        \"695F62\" to \"Scorpion\",\n        \"697E9A\" to \"Lynch\",\n        \"6A442E\" to \"Spice\",\n        \"6A5D1B\" to \"Himalaya\",\n        \"6A6051\" to \"Soya Bean\",\n        \"6B2A14\" to \"Hairy Heath\",\n        \"6B3FA0\" to \"Royal Purple\",\n        \"6B4E31\" to \"Shingle Fawn\",\n        \"6B5755\" to \"Dorado\",\n        \"6B8BA2\" to \"Bermuda Gray\",\n        \"6B8E23\" to \"Olive Drab\",\n        \"6C3082\" to \"Eminence\",\n        \"6CDAE7\" to \"Turquoise Blue\",\n        \"6D0101\" to \"Lonestar\",\n        \"6D5E54\" to \"Pine Cone\",\n        \"6D6C6C\" to \"Dove Gray\",\n        \"6D9292\" to \"Juniper\",\n        \"6D92A1\" to \"Gothic\",\n        \"6E0902\" to \"Red Oxide\",\n        \"6E1D14\" to \"Moccaccino\",\n        \"6E4826\" to \"Pickled Bean\",\n        \"6E4B26\" to \"Dallas\",\n        \"6E6D57\" to \"Kokoda\",\n        \"6E7783\" to \"Pale Sky\",\n        \"6F440C\" to \"Cafe Royale\",\n        \"6F6A61\" to \"Flint\",\n        \"6F8E63\" to \"Highland\",\n        \"6F9D02\" to \"Limeade\",\n        \"6FD0C5\" to \"Downy\",\n        \"701C1C\" to \"Persian Plum\",\n        \"704214\" to \"Sepia\",\n        \"704A07\" to \"Antique Bronze\",\n        \"704F50\" to \"Ferra\",\n        \"706555\" to \"Coffee\",\n        \"708090\" to \"Slate Gray\",\n        \"711A00\" to \"Cedar Wood Finish\",\n        \"71291D\" to \"Metallic Copper\",\n        \"714693\" to \"Affair\",\n        \"714AB2\" to \"Studio\",\n        \"715D47\" to \"Tobacco Brown\",\n        \"716338\" to \"Yellow Metal\",\n        \"716B56\" to \"Peat\",\n        \"716E10\" to \"Olivetone\",\n        \"717486\" to \"Storm Gray\",\n        \"718080\" to \"Sirocco\",\n        \"71D9E2\" to \"Aquamarine Blue\",\n        \"72010F\" to \"Venetian Red\",\n        \"724A2F\" to \"Old Copper\",\n        \"726D4E\" to \"Go Ben\",\n        \"727B89\" to \"Raven\",\n        \"731E8F\" to \"Seance\",\n        \"734A12\" to \"Raw Umber\",\n        \"736C9F\" to \"Kimberly\",\n        \"736D58\" to \"Crocodile\",\n        \"737829\" to \"Crete\",\n        \"738678\" to \"Xanadu\",\n        \"74640D\" to \"Spicy Mustard\",\n        \"747D63\" to \"Limed Ash\",\n        \"747D83\" to \"Rolling Stone\",\n        \"748881\" to \"Blue Smoke\",\n        \"749378\" to \"Laurel\",\n        \"74C365\" to \"Mantis\",\n        \"755A57\" to \"Russett\",\n        \"7563A8\" to \"Deluge\",\n        \"76395D\" to \"Cosmic\",\n        \"7666C6\" to \"Blue Marguerite\",\n        \"76BD17\" to \"Lima\",\n        \"76D7EA\" to \"Sky Blue\",\n        \"770F05\" to \"Dark Burgundy\",\n        \"771F1F\" to \"Crown of Thorns\",\n        \"773F1A\" to \"Walnut\",\n        \"776F61\" to \"Pablo\",\n        \"778120\" to \"Pacifika\",\n        \"779E86\" to \"Oxley\",\n        \"77DD77\" to \"Pastel Green\",\n        \"780109\" to \"Japanese Maple\",\n        \"782D19\" to \"Mocha\",\n        \"782F16\" to \"Peanut\",\n        \"78866B\" to \"Camouflage Green\",\n        \"788A25\" to \"Wasabi\",\n        \"788BBA\" to \"Ship Cove\",\n        \"78A39C\" to \"Sea Nymph\",\n        \"795D4C\" to \"Roman Coffee\",\n        \"796878\" to \"Old Lavender\",\n        \"796989\" to \"Rum\",\n        \"796A78\" to \"Fedora\",\n        \"796D62\" to \"Sandstone\",\n        \"79DEEC\" to \"Spray\",\n        \"7A013A\" to \"Siren\",\n        \"7A58C1\" to \"Fuchsia Blue\",\n        \"7A7A7A\" to \"Boulder\",\n        \"7A89B8\" to \"Wild Blue Yonder\",\n        \"7AC488\" to \"De York\",\n        \"7B3801\" to \"Red Beech\",\n        \"7B3F00\" to \"Cinnamon\",\n        \"7B6608\" to \"Yukon Gold\",\n        \"7B7874\" to \"Tapa\",\n        \"7B7C94\" to \"Waterloo \",\n        \"7B8265\" to \"Flax Smoke\",\n        \"7B9F80\" to \"Amulet\",\n        \"7BA05B\" to \"Asparagus\",\n        \"7C1C05\" to \"Kenyan Copper\",\n        \"7C7631\" to \"Pesto\",\n        \"7C778A\" to \"Topaz\",\n        \"7C7B7A\" to \"Concord\",\n        \"7C7B82\" to \"Jumbo\",\n        \"7C881A\" to \"Trendy Green\",\n        \"7CA1A6\" to \"Gumbo\",\n        \"7CB0A1\" to \"Acapulco\",\n        \"7CB7BB\" to \"Neptune\",\n        \"7D2C14\" to \"Pueblo\",\n        \"7DA98D\" to \"Bay Leaf\",\n        \"7DC8F7\" to \"Malibu\",\n        \"7DD8C6\" to \"Bermuda\",\n        \"7E3A15\" to \"Copper Canyon\",\n        \"7F1734\" to \"Claret\",\n        \"7F3A02\" to \"Peru Tan\",\n        \"7F626D\" to \"Falcon\",\n        \"7F7589\" to \"Mobster\",\n        \"7F76D3\" to \"Moody Blue\",\n        \"7FFF00\" to \"Chartreuse\",\n        \"7FFFD4\" to \"Aquamarine\",\n        \"800000\" to \"Maroon\",\n        \"800B47\" to \"Rose Bud Cherry\",\n        \"801818\" to \"Falu Red\",\n        \"80341F\" to \"Red Robin\",\n        \"803790\" to \"Vivid Violet\",\n        \"80461B\" to \"Russet\",\n        \"807E79\" to \"Friar Gray\",\n        \"808000\" to \"Olive\",\n        \"808080\" to \"Gray\",\n        \"80B3AE\" to \"Gulf Stream\",\n        \"80B3C4\" to \"Glacier\",\n        \"80CCEA\" to \"Seagull\",\n        \"81422C\" to \"Nutmeg\",\n        \"816E71\" to \"Spicy Pink\",\n        \"817377\" to \"Empress\",\n        \"819885\" to \"Spanish Green\",\n        \"826F65\" to \"Sand Dune\",\n        \"828685\" to \"Gunsmoke\",\n        \"828F72\" to \"Battleship Gray\",\n        \"831923\" to \"Merlot\",\n        \"837050\" to \"Shadow\",\n        \"83AA5D\" to \"Chelsea Cucumber\",\n        \"83D0C6\" to \"Monte Carlo\",\n        \"843179\" to \"Plum\",\n        \"84A0A0\" to \"Granny Smith\",\n        \"8581D9\" to \"Chetwode Blue\",\n        \"858470\" to \"Bandicoot\",\n        \"859FAF\" to \"Bali Hai\",\n        \"85C4CC\" to \"Half Baked\",\n        \"860111\" to \"Red Devil\",\n        \"863C3C\" to \"Lotus\",\n        \"86483C\" to \"Ironstone\",\n        \"864D1E\" to \"Bull Shot\",\n        \"86560A\" to \"Rusty Nail\",\n        \"868974\" to \"Bitter\",\n        \"86949F\" to \"Regent Gray\",\n        \"871550\" to \"Disco\",\n        \"87756E\" to \"Americano\",\n        \"877C7B\" to \"Hurricane\",\n        \"878D91\" to \"Oslo Gray\",\n        \"87AB39\" to \"Sushi\",\n        \"885342\" to \"Spicy Mix\",\n        \"886221\" to \"Kumera\",\n        \"888387\" to \"Suva Gray\",\n        \"888D65\" to \"Avocado\",\n        \"893456\" to \"Camelot\",\n        \"893843\" to \"Solid Pink\",\n        \"894367\" to \"Cannon Pink\",\n        \"897D6D\" to \"Makara\",\n        \"8A3324\" to \"Burnt Umber\",\n        \"8A73D6\" to \"True V\",\n        \"8A8360\" to \"Clay Creek\",\n        \"8A8389\" to \"Monsoon\",\n        \"8A8F8A\" to \"Stack\",\n        \"8AB9F1\" to \"Jordy Blue\",\n        \"8B00FF\" to \"Electric Violet\",\n        \"8B0723\" to \"Monarch\",\n        \"8B6B0B\" to \"Corn Harvest\",\n        \"8B8470\" to \"Olive Haze\",\n        \"8B847E\" to \"Schooner\",\n        \"8B8680\" to \"Natural Gray\",\n        \"8B9C90\" to \"Mantle\",\n        \"8B9FEE\" to \"Portage\",\n        \"8BA690\" to \"Envy\",\n        \"8BA9A5\" to \"Cascade\",\n        \"8BE6D8\" to \"Riptide\",\n        \"8C055E\" to \"Cardinal Pink\",\n        \"8C472F\" to \"Mule Fawn\",\n        \"8C5738\" to \"Potters Clay\",\n        \"8C6495\" to \"Trendy Pink\",\n        \"8D0226\" to \"Paprika\",\n        \"8D3D38\" to \"Sanguine Brown\",\n        \"8D3F3F\" to \"Tosca\",\n        \"8D7662\" to \"Cement\",\n        \"8D8974\" to \"Granite Green\",\n        \"8D90A1\" to \"Manatee\",\n        \"8DA8CC\" to \"Polo Blue\",\n        \"8E0000\" to \"Red Berry\",\n        \"8E4D1E\" to \"Rope\",\n        \"8E6F70\" to \"Opium\",\n        \"8E775E\" to \"Domino\",\n        \"8E8190\" to \"Mamba\",\n        \"8EABC1\" to \"Nepal\",\n        \"8F021C\" to \"Pohutukawa\",\n        \"8F3E33\" to \"El Salva\",\n        \"8F4B0E\" to \"Korma\",\n        \"8F8176\" to \"Squirrel\",\n        \"8FD6B4\" to \"Vista Blue\",\n        \"900020\" to \"Burgundy\",\n        \"901E1E\" to \"Old Brick\",\n        \"907874\" to \"Hemp\",\n        \"907B71\" to \"Almond Frost\",\n        \"908D39\" to \"Sycamore\",\n        \"92000A\" to \"Sangria\",\n        \"924321\" to \"Cumin\",\n        \"926F5B\" to \"Beaver\",\n        \"928573\" to \"Stonewall\",\n        \"928590\" to \"Venus\",\n        \"9370DB\" to \"Medium Purple\",\n        \"93CCEA\" to \"Cornflower\",\n        \"93DFB8\" to \"Algae Green\",\n        \"944747\" to \"Copper Rust\",\n        \"948771\" to \"Arrowtown\",\n        \"950015\" to \"Scarlett\",\n        \"956387\" to \"Strikemaster\",\n        \"959396\" to \"Mountain Mist\",\n        \"960018\" to \"Carmine\",\n        \"964B00\" to \"Brown\",\n        \"967059\" to \"Leather\",\n        \"9678B6\" to \"Purple Mountains Majesty\",\n        \"967BB6\" to \"Lavender Purple\",\n        \"96A8A1\" to \"Pewter\",\n        \"96BBAB\" to \"Summer Green\",\n        \"97605D\" to \"Au Chico\",\n        \"9771B5\" to \"Wisteria\",\n        \"97CD2D\" to \"Atlantis\",\n        \"983D61\" to \"Vin Rouge\",\n        \"9874D3\" to \"Lilac Bush\",\n        \"98777B\" to \"Bazaar\",\n        \"98811B\" to \"Hacienda\",\n        \"988D77\" to \"Pale Oyster\",\n        \"98FF98\" to \"Mint Green\",\n        \"990066\" to \"Fresh Eggplant\",\n        \"991199\" to \"Violet Eggplant\",\n        \"991613\" to \"Tamarillo\",\n        \"991B07\" to \"Totem Pole\",\n        \"996666\" to \"Copper Rose\",\n        \"9966CC\" to \"Amethyst\",\n        \"997A8D\" to \"Mountbatten Pink\",\n        \"9999CC\" to \"Blue Bell\",\n        \"9A3820\" to \"Prairie Sand\",\n        \"9A6E61\" to \"Toast\",\n        \"9A9577\" to \"Gurkha\",\n        \"9AB973\" to \"Olivine\",\n        \"9AC2B8\" to \"Shadow Green\",\n        \"9B4703\" to \"Oregon\",\n        \"9B9E8F\" to \"Lemon Grass\",\n        \"9C3336\" to \"Stiletto\",\n        \"9D5616\" to \"Hawaiian Tan\",\n        \"9DACB7\" to \"Gull Gray\",\n        \"9DC209\" to \"Pistachio\",\n        \"9DE093\" to \"Granny Smith Apple\",\n        \"9DE5FF\" to \"Anakiwa\",\n        \"9E5302\" to \"Chelsea Gem\",\n        \"9E5B40\" to \"Sepia Skin\",\n        \"9EA587\" to \"Sage\",\n        \"9EA91F\" to \"Citron\",\n        \"9EB1CD\" to \"Rock Blue\",\n        \"9EDEE0\" to \"Morning Glory\",\n        \"9F381D\" to \"Cognac\",\n        \"9F821C\" to \"Reef Gold\",\n        \"9F9F9C\" to \"Star Dust\",\n        \"9FA0B1\" to \"Santas Gray\",\n        \"9FD7D3\" to \"Sinbad\",\n        \"9FDD8C\" to \"Feijoa\",\n        \"A02712\" to \"Tabasco\",\n        \"A1750D\" to \"Buttered Rum\",\n        \"A1ADB5\" to \"Hit Gray\",\n        \"A1C50A\" to \"Citrus\",\n        \"A1DAD7\" to \"Aqua Island\",\n        \"A1E9DE\" to \"Water Leaf\",\n        \"A2006D\" to \"Flirt\",\n        \"A23B6C\" to \"Rouge\",\n        \"A26645\" to \"Cape Palliser\",\n        \"A2AAB3\" to \"Gray Chateau\",\n        \"A2AEAB\" to \"Edward\",\n        \"A3807B\" to \"Pharlap\",\n        \"A397B4\" to \"Amethyst Smoke\",\n        \"A3E3ED\" to \"Blizzard Blue\",\n        \"A4A49D\" to \"Delta\",\n        \"A4A6D3\" to \"Wistful\",\n        \"A4AF6E\" to \"Green Smoke\",\n        \"A50B5E\" to \"Jazzberry Jam\",\n        \"A59B91\" to \"Zorba\",\n        \"A5CB0C\" to \"Bahia\",\n        \"A62F20\" to \"Roof Terracotta\",\n        \"A65529\" to \"Paarl\",\n        \"A68B5B\" to \"Barley Corn\",\n        \"A69279\" to \"Donkey Brown\",\n        \"A6A29A\" to \"Dawn\",\n        \"A72525\" to \"Mexican Red\",\n        \"A7882C\" to \"Luxor Gold\",\n        \"A85307\" to \"Rich Gold\",\n        \"A86515\" to \"Reno Sand\",\n        \"A86B6B\" to \"Coral Tree\",\n        \"A8989B\" to \"Dusty Gray\",\n        \"A899E6\" to \"Dull Lavender\",\n        \"A8A589\" to \"Tallow\",\n        \"A8AE9C\" to \"Bud\",\n        \"A8AF8E\" to \"Locust\",\n        \"A8BD9F\" to \"Norway\",\n        \"A8E3BD\" to \"Chinook\",\n        \"A9A491\" to \"Gray Olive\",\n        \"A9ACB6\" to \"Aluminium\",\n        \"A9B2C3\" to \"Cadet Blue\",\n        \"A9B497\" to \"Schist\",\n        \"A9BDBF\" to \"Tower Gray\",\n        \"A9BEF2\" to \"Perano\",\n        \"A9C6C2\" to \"Opal\",\n        \"AA375A\" to \"Night Shadz\",\n        \"AA4203\" to \"Fire\",\n        \"AA8B5B\" to \"Muesli\",\n        \"AA8D6F\" to \"Sandal\",\n        \"AAA5A9\" to \"Shady Lady\",\n        \"AAA9CD\" to \"Logan\",\n        \"AAABB7\" to \"Spun Pearl\",\n        \"AAD6E6\" to \"Regent St Blue\",\n        \"AAF0D1\" to \"Magic Mint\",\n        \"AB0563\" to \"Lipstick\",\n        \"AB3472\" to \"Royal Heath\",\n        \"AB917A\" to \"Sandrift\",\n        \"ABA0D9\" to \"Cold Purple\",\n        \"ABA196\" to \"Bronco\",\n        \"AC8A56\" to \"Limed Oak\",\n        \"AC91CE\" to \"East Side\",\n        \"AC9E22\" to \"Lemon Ginger\",\n        \"ACA494\" to \"Napa\",\n        \"ACA586\" to \"Hillary\",\n        \"ACA59F\" to \"Cloudy\",\n        \"ACACAC\" to \"Silver Chalice\",\n        \"ACB78E\" to \"Swamp Green\",\n        \"ACCBB1\" to \"Spring Rain\",\n        \"ACDD4D\" to \"Conifer\",\n        \"ACE1AF\" to \"Celadon\",\n        \"AD781B\" to \"Mandalay\",\n        \"ADBED1\" to \"Casper\",\n        \"ADDFAD\" to \"Moss Green\",\n        \"ADE6C4\" to \"Padua\",\n        \"ADFF2F\" to \"Green Yellow\",\n        \"AE4560\" to \"Hippie Pink\",\n        \"AE6020\" to \"Desert\",\n        \"AE809E\" to \"Bouquet\",\n        \"AF4035\" to \"Medium Carmine\",\n        \"AF4D43\" to \"Apple Blossom\",\n        \"AF593E\" to \"Brown Rust\",\n        \"AF8751\" to \"Driftwood\",\n        \"AF8F2C\" to \"Alpine\",\n        \"AF9F1C\" to \"Lucky\",\n        \"AFA09E\" to \"Martini\",\n        \"AFB1B8\" to \"Bombay\",\n        \"AFBDD9\" to \"Pigeon Post\",\n        \"B04C6A\" to \"Cadillac\",\n        \"B05D54\" to \"Matrix\",\n        \"B05E81\" to \"Tapestry\",\n        \"B06608\" to \"Mai Tai\",\n        \"B09A95\" to \"Del Rio\",\n        \"B0E0E6\" to \"Powder Blue\",\n        \"B0E313\" to \"Inch Worm\",\n        \"B10000\" to \"Bright Red\",\n        \"B14A0B\" to \"Vesuvius\",\n        \"B1610B\" to \"Pumpkin Skin\",\n        \"B16D52\" to \"Santa Fe\",\n        \"B19461\" to \"Teak\",\n        \"B1E2C1\" to \"Fringy Flower\",\n        \"B1F4E7\" to \"Ice Cold\",\n        \"B20931\" to \"Shiraz\",\n        \"B2A1EA\" to \"Biloba Flower\",\n        \"B32D29\" to \"Tall Poppy\",\n        \"B35213\" to \"Fiery Orange\",\n        \"B38007\" to \"Hot Toddy\",\n        \"B3AF95\" to \"Taupe Gray\",\n        \"B3C110\" to \"La Rioja\",\n        \"B43332\" to \"Well Read\",\n        \"B44668\" to \"Blush\",\n        \"B4CFD3\" to \"Jungle Mist\",\n        \"B57281\" to \"Turkish Rose\",\n        \"B57EDC\" to \"Lavender\",\n        \"B5A27F\" to \"Mongoose\",\n        \"B5B35C\" to \"Olive Green\",\n        \"B5D2CE\" to \"Jet Stream\",\n        \"B5ECDF\" to \"Cruise\",\n        \"B6316C\" to \"Hibiscus\",\n        \"B69D98\" to \"Thatch\",\n        \"B6B095\" to \"Heathered Gray\",\n        \"B6BAA4\" to \"Eagle\",\n        \"B6D1EA\" to \"Spindle\",\n        \"B6D3BF\" to \"Gum Leaf\",\n        \"B7410E\" to \"Rust\",\n        \"B78E5C\" to \"Muddy Waters\",\n        \"B7A214\" to \"Sahara\",\n        \"B7A458\" to \"Husk\",\n        \"B7B1B1\" to \"Nobel\",\n        \"B7C3D0\" to \"Heather\",\n        \"B7F0BE\" to \"Madang\",\n        \"B81104\" to \"Milano Red\",\n        \"B87333\" to \"Copper\",\n        \"B8B56A\" to \"Gimblet\",\n        \"B8C1B1\" to \"Green Spring\",\n        \"B8C25D\" to \"Celery\",\n        \"B8E0F9\" to \"Sail\",\n        \"B94E48\" to \"Chestnut\",\n        \"B95140\" to \"Crail\",\n        \"B98D28\" to \"Marigold\",\n        \"B9C46A\" to \"Wild Willow\",\n        \"B9C8AC\" to \"Rainee\",\n        \"BA0101\" to \"Guardsman Red\",\n        \"BA450C\" to \"Rock Spray\",\n        \"BA6F1E\" to \"Bourbon\",\n        \"BA7F03\" to \"Pirate Gold\",\n        \"BAB1A2\" to \"Nomad\",\n        \"BAC7C9\" to \"Submarine\",\n        \"BAEEF9\" to \"Charlotte\",\n        \"BB3385\" to \"Medium Red Violet\",\n        \"BB8983\" to \"Brandy Rose\",\n        \"BBD009\" to \"Rio Grande\",\n        \"BBD7C1\" to \"Surf\",\n        \"BCC9C2\" to \"Powder Ash\",\n        \"BD5E2E\" to \"Tuscany\",\n        \"BD978E\" to \"Quicksand\",\n        \"BDB1A8\" to \"Silk\",\n        \"BDB2A1\" to \"Malta\",\n        \"BDB3C7\" to \"Chatelle\",\n        \"BDBBD7\" to \"Lavender Gray\",\n        \"BDBDC6\" to \"French Gray\",\n        \"BDC8B3\" to \"Clay Ash\",\n        \"BDC9CE\" to \"Loblolly\",\n        \"BDEDFD\" to \"French Pass\",\n        \"BEA6C3\" to \"London Hue\",\n        \"BEB5B7\" to \"Pink Swan\",\n        \"BEDE0D\" to \"Fuego\",\n        \"BF5500\" to \"Rose of Sharon\",\n        \"BFB8B0\" to \"Tide\",\n        \"BFBED8\" to \"Blue Haze\",\n        \"BFC1C2\" to \"Silver Sand\",\n        \"BFC921\" to \"Key Lime Pie\",\n        \"BFDBE2\" to \"Ziggurat\",\n        \"BFFF00\" to \"Lime\",\n        \"C02B18\" to \"Thunderbird\",\n        \"C04737\" to \"Mojo\",\n        \"C08081\" to \"Old Rose\",\n        \"C0C0C0\" to \"Silver\",\n        \"C0D3B9\" to \"Pale Leaf\",\n        \"C0D8B6\" to \"Pixie Green\",\n        \"C1440E\" to \"Tia Maria\",\n        \"C154C1\" to \"Fuchsia Pink\",\n        \"C1A004\" to \"Buddha Gold\",\n        \"C1B7A4\" to \"Bison Hide\",\n        \"C1BAB0\" to \"Tea\",\n        \"C1BECD\" to \"Gray Suit\",\n        \"C1D7B0\" to \"Sprout\",\n        \"C1F07C\" to \"Sulu\",\n        \"C26B03\" to \"Indochine\",\n        \"C2955D\" to \"Twine\",\n        \"C2BDB6\" to \"Cotton Seed\",\n        \"C2CAC4\" to \"Pumice\",\n        \"C2E8E5\" to \"Jagged Ice\",\n        \"C32148\" to \"Maroon Flush\",\n        \"C3B091\" to \"Indian Khaki\",\n        \"C3BFC1\" to \"Pale Slate\",\n        \"C3C3BD\" to \"Gray Nickel\",\n        \"C3CDE6\" to \"Periwinkle Gray\",\n        \"C3D1D1\" to \"Tiara\",\n        \"C3DDF9\" to \"Tropical Blue\",\n        \"C41E3A\" to \"Cardinal\",\n        \"C45655\" to \"Fuzzy Wuzzy Brown\",\n        \"C45719\" to \"Orange Roughy\",\n        \"C4C4BC\" to \"Mist Gray\",\n        \"C4D0B0\" to \"Coriander\",\n        \"C4F4EB\" to \"Mint Tulip\",\n        \"C54B8C\" to \"Mulberry\",\n        \"C59922\" to \"Nugget\",\n        \"C5994B\" to \"Tussock\",\n        \"C5DBCA\" to \"Sea Mist\",\n        \"C5E17A\" to \"Yellow Green\",\n        \"C62D42\" to \"Brick Red\",\n        \"C6726B\" to \"Contessa\",\n        \"C69191\" to \"Oriental Pink\",\n        \"C6A84B\" to \"Roti\",\n        \"C6C3B5\" to \"Ash\",\n        \"C6C8BD\" to \"Kangaroo\",\n        \"C6E610\" to \"Las Palmas\",\n        \"C7031E\" to \"Monza\",\n        \"C71585\" to \"Red Violet\",\n        \"C7BCA2\" to \"Coral Reef\",\n        \"C7C1FF\" to \"Melrose\",\n        \"C7C4BF\" to \"Cloud\",\n        \"C7C9D5\" to \"Ghost\",\n        \"C7CD90\" to \"Pine Glade\",\n        \"C7DDE5\" to \"Botticelli\",\n        \"C88A65\" to \"Antique Brass\",\n        \"C8A2C8\" to \"Lilac\",\n        \"C8A528\" to \"Hokey Pokey\",\n        \"C8AABF\" to \"Lily\",\n        \"C8B568\" to \"Laser\",\n        \"C8E3D7\" to \"Edgewater\",\n        \"C96323\" to \"Piper\",\n        \"C99415\" to \"Pizza\",\n        \"C9A0DC\" to \"Light Wisteria\",\n        \"C9B29B\" to \"Rodeo Dust\",\n        \"C9B35B\" to \"Sundance\",\n        \"C9B93B\" to \"Earls Green\",\n        \"C9C0BB\" to \"Silver Rust\",\n        \"C9D9D2\" to \"Conch\",\n        \"C9FFA2\" to \"Reef\",\n        \"C9FFE5\" to \"Aero Blue\",\n        \"CA3435\" to \"Flush Mahogany\",\n        \"CABB48\" to \"Turmeric\",\n        \"CADCD4\" to \"Paris White\",\n        \"CAE00D\" to \"Bitter Lemon\",\n        \"CAE6DA\" to \"Skeptic\",\n        \"CB8FA9\" to \"Viola\",\n        \"CBCAB6\" to \"Foggy Gray\",\n        \"CBD3B0\" to \"Green Mist\",\n        \"CBDBD6\" to \"Nebula\",\n        \"CC3333\" to \"Persian Red\",\n        \"CC5500\" to \"Burnt Orange\",\n        \"CC7722\" to \"Ochre\",\n        \"CC8899\" to \"Puce\",\n        \"CCCAA8\" to \"Thistle Green\",\n        \"CCCCFF\" to \"Periwinkle\",\n        \"CCFF00\" to \"Electric Lime\",\n        \"CD5700\" to \"Tenn\",\n        \"CD5C5C\" to \"Chestnut Rose\",\n        \"CD8429\" to \"Brandy Punch\",\n        \"CDF4FF\" to \"Onahau\",\n        \"CEB98F\" to \"Sorrell Brown\",\n        \"CEBABA\" to \"Cold Turkey\",\n        \"CEC291\" to \"Yuma\",\n        \"CEC7A7\" to \"Chino\",\n        \"CFA39D\" to \"Eunry\",\n        \"CFB53B\" to \"Old Gold\",\n        \"CFDCCF\" to \"Tasman\",\n        \"CFE5D2\" to \"Surf Crest\",\n        \"CFF9F3\" to \"Humming Bird\",\n        \"CFFAF4\" to \"Scandal\",\n        \"D05F04\" to \"Red Stage\",\n        \"D06DA1\" to \"Hopbush\",\n        \"D07D12\" to \"Meteor\",\n        \"D0BEF8\" to \"Perfume\",\n        \"D0C0E5\" to \"Prelude\",\n        \"D0F0C0\" to \"Tea Green\",\n        \"D18F1B\" to \"Geebung\",\n        \"D1BEA8\" to \"Vanilla\",\n        \"D1C6B4\" to \"Soft Amber\",\n        \"D1D2CA\" to \"Celeste\",\n        \"D1D2DD\" to \"Mischka\",\n        \"D1E231\" to \"Pear\",\n        \"D2691E\" to \"Hot Cinnamon\",\n        \"D27D46\" to \"Raw Sienna\",\n        \"D29EAA\" to \"Careys Pink\",\n        \"D2B48C\" to \"Tan\",\n        \"D2DA97\" to \"Deco\",\n        \"D2F6DE\" to \"Blue Romance\",\n        \"D2F8B0\" to \"Gossip\",\n        \"D3CBBA\" to \"Sisal\",\n        \"D3CDC5\" to \"Swirl\",\n        \"D47494\" to \"Charm\",\n        \"D4B6AF\" to \"Clam Shell\",\n        \"D4BF8D\" to \"Straw\",\n        \"D4C4A8\" to \"Akaroa\",\n        \"D4CD16\" to \"Bird Flower\",\n        \"D4D7D9\" to \"Iron\",\n        \"D4DFE2\" to \"Geyser\",\n        \"D4E2FC\" to \"Hawkes Blue\",\n        \"D54600\" to \"Grenadier\",\n        \"D591A4\" to \"Can Can\",\n        \"D59A6F\" to \"Whiskey\",\n        \"D5D195\" to \"Winter Hazel\",\n        \"D5F6E3\" to \"Granny Apple\",\n        \"D69188\" to \"My Pink\",\n        \"D6C562\" to \"Tacha\",\n        \"D6CEF6\" to \"Moon Raker\",\n        \"D6D6D1\" to \"Quill Gray\",\n        \"D6FFDB\" to \"Snowy Mint\",\n        \"D7837F\" to \"New York Pink\",\n        \"D7C498\" to \"Pavlova\",\n        \"D7D0FF\" to \"Fog\",\n        \"D84437\" to \"Valencia\",\n        \"D87C63\" to \"Japonica\",\n        \"D8BFD8\" to \"Thistle\",\n        \"D8C2D5\" to \"Maverick\",\n        \"D8FCFA\" to \"Foam\",\n        \"D94972\" to \"Cabaret\",\n        \"D99376\" to \"Burning Sand\",\n        \"D9B99B\" to \"Cameo\",\n        \"D9D6CF\" to \"Timberwolf\",\n        \"D9DCC1\" to \"Tana\",\n        \"D9E4F5\" to \"Link Water\",\n        \"D9F7FF\" to \"Mabel\",\n        \"DA3287\" to \"Cerise\",\n        \"DA5B38\" to \"Flame Pea\",\n        \"DA6304\" to \"Bamboo\",\n        \"DA6A41\" to \"Red Damask\",\n        \"DA70D6\" to \"Orchid\",\n        \"DA8A67\" to \"Copperfield\",\n        \"DAA520\" to \"Golden Grass\",\n        \"DAECD6\" to \"Zanah\",\n        \"DAF4F0\" to \"Iceberg\",\n        \"DAFAFF\" to \"Oyster Bay\",\n        \"DB5079\" to \"Cranberry\",\n        \"DB9690\" to \"Petite Orchid\",\n        \"DB995E\" to \"Di Serria\",\n        \"DBDBDB\" to \"Alto\",\n        \"DBFFF8\" to \"Frosted Mint\",\n        \"DC143C\" to \"Crimson\",\n        \"DC4333\" to \"Punch\",\n        \"DCB20C\" to \"Galliano\",\n        \"DCB4BC\" to \"Blossom\",\n        \"DCD747\" to \"Wattle\",\n        \"DCD9D2\" to \"Westar\",\n        \"DCDDCC\" to \"Moon Mist\",\n        \"DCEDB4\" to \"Caper\",\n        \"DCF0EA\" to \"Swans Down\",\n        \"DDD6D5\" to \"Swiss Coffee\",\n        \"DDF9F1\" to \"White Ice\",\n        \"DE3163\" to \"Cerise Red\",\n        \"DE6360\" to \"Roman\",\n        \"DEA681\" to \"Tumbleweed\",\n        \"DEBA13\" to \"Gold Tips\",\n        \"DEC196\" to \"Brandy\",\n        \"DECBC6\" to \"Wafer\",\n        \"DED4A4\" to \"Sapling\",\n        \"DED717\" to \"Barberry\",\n        \"DEE5C0\" to \"Beryl Green\",\n        \"DEF5FF\" to \"Pattens Blue\",\n        \"DF73FF\" to \"Heliotrope\",\n        \"DFBE6F\" to \"Apache\",\n        \"DFCD6F\" to \"Chenin\",\n        \"DFCFDB\" to \"Lola\",\n        \"DFECDA\" to \"Willow Brook\",\n        \"DFFF00\" to \"Chartreuse Yellow\",\n        \"E0B0FF\" to \"Mauve\",\n        \"E0B646\" to \"Anzac\",\n        \"E0B974\" to \"Harvest Gold\",\n        \"E0C095\" to \"Calico\",\n        \"E0FFFF\" to \"Baby Blue\",\n        \"E16865\" to \"Sunglo\",\n        \"E1BC64\" to \"Equator\",\n        \"E1C0C8\" to \"Pink Flare\",\n        \"E1E6D6\" to \"Periglacial Blue\",\n        \"E1EAD4\" to \"Kidnapper\",\n        \"E1F6E8\" to \"Tara\",\n        \"E25465\" to \"Mandy\",\n        \"E2725B\" to \"Terracotta\",\n        \"E28913\" to \"Golden Bell\",\n        \"E292C0\" to \"Shocking\",\n        \"E29418\" to \"Dixie\",\n        \"E29CD2\" to \"Light Orchid\",\n        \"E2D8ED\" to \"Snuff\",\n        \"E2EBED\" to \"Mystic\",\n        \"E2F3EC\" to \"Apple Green\",\n        \"E30B5C\" to \"Razzmatazz\",\n        \"E32636\" to \"Alizarin Crimson\",\n        \"E34234\" to \"Cinnabar\",\n        \"E3BEBE\" to \"Cavern Pink\",\n        \"E3F5E1\" to \"Peppermint\",\n        \"E3F988\" to \"Mindaro\",\n        \"E47698\" to \"Deep Blush\",\n        \"E49B0F\" to \"Gamboge\",\n        \"E4C2D5\" to \"Melanie\",\n        \"E4CFDE\" to \"Twilight\",\n        \"E4D1C0\" to \"Bone\",\n        \"E4D422\" to \"Sunflower\",\n        \"E4D5B7\" to \"Grain Brown\",\n        \"E4D69B\" to \"Zombie\",\n        \"E4F6E7\" to \"Frostee\",\n        \"E4FFD1\" to \"Snow Flurry\",\n        \"E52B50\" to \"Amaranth\",\n        \"E5841B\" to \"Zest\",\n        \"E5CCC9\" to \"Dust Storm\",\n        \"E5D7BD\" to \"Stark White\",\n        \"E5D8AF\" to \"Hampton\",\n        \"E5E0E1\" to \"Bon Jour\",\n        \"E5E5E5\" to \"Mercury\",\n        \"E5F9F6\" to \"Polar\",\n        \"E64E03\" to \"Trinidad\",\n        \"E6BE8A\" to \"Gold Sand\",\n        \"E6BEA5\" to \"Cashmere\",\n        \"E6D7B9\" to \"Double Spanish White\",\n        \"E6E4D4\" to \"Satin Linen\",\n        \"E6F2EA\" to \"Harp\",\n        \"E6F8F3\" to \"Off Green\",\n        \"E6FFE9\" to \"Hint of Green\",\n        \"E6FFFF\" to \"Tranquil\",\n        \"E77200\" to \"Mango Tango\",\n        \"E7730A\" to \"Christine\",\n        \"E79F8C\" to \"Tonys Pink\",\n        \"E79FC4\" to \"Kobi\",\n        \"E7BCB4\" to \"Rose Fog\",\n        \"E7BF05\" to \"Corn\",\n        \"E7CD8C\" to \"Putty\",\n        \"E7ECE6\" to \"Gray Nurse\",\n        \"E7F8FF\" to \"Lily White\",\n        \"E7FEFF\" to \"Bubbles\",\n        \"E89928\" to \"Fire Bush\",\n        \"E8B9B3\" to \"Shilo\",\n        \"E8E0D5\" to \"Pearl Bush\",\n        \"E8EBE0\" to \"Green White\",\n        \"E8F1D4\" to \"Chrome White\",\n        \"E8F2EB\" to \"Gin\",\n        \"E8F5F2\" to \"Aqua Squeeze\",\n        \"E96E00\" to \"Clementine\",\n        \"E97451\" to \"Burnt Sienna\",\n        \"E97C07\" to \"Tahiti Gold\",\n        \"E9CECD\" to \"Oyster Pink\",\n        \"E9D75A\" to \"Confetti\",\n        \"E9E3E3\" to \"Ebb\",\n        \"E9F8ED\" to \"Ottoman\",\n        \"E9FFFD\" to \"Clear Day\",\n        \"EA88A8\" to \"Carissma\",\n        \"EAAE69\" to \"Porsche\",\n        \"EAB33B\" to \"Tulip Tree\",\n        \"EAC674\" to \"Rob Roy\",\n        \"EADAB8\" to \"Raffia\",\n        \"EAE8D4\" to \"White Rock\",\n        \"EAF6EE\" to \"Panache\",\n        \"EAF6FF\" to \"Solitude\",\n        \"EAF9F5\" to \"Aqua Spring\",\n        \"EAFFFE\" to \"Dew\",\n        \"EB9373\" to \"Apricot\",\n        \"EBC2AF\" to \"Zinnwaldite\",\n        \"ECA927\" to \"Fuel Yellow\",\n        \"ECC54E\" to \"Ronchi\",\n        \"ECC7EE\" to \"French Lilac\",\n        \"ECCDB9\" to \"Just Right\",\n        \"ECE090\" to \"Wild Rice\",\n        \"ECEBBD\" to \"Fall Green\",\n        \"ECEBCE\" to \"Aths Special\",\n        \"ECF245\" to \"Starship\",\n        \"ED0A3F\" to \"Red Ribbon\",\n        \"ED7A1C\" to \"Tango\",\n        \"ED9121\" to \"Carrot Orange\",\n        \"ED989E\" to \"Sea Pink\",\n        \"EDB381\" to \"Tacao\",\n        \"EDC9AF\" to \"Desert Sand\",\n        \"EDCDAB\" to \"Pancho\",\n        \"EDDCB1\" to \"Chamois\",\n        \"EDEA99\" to \"Primrose\",\n        \"EDF5DD\" to \"Frost\",\n        \"EDF5F5\" to \"Aqua Haze\",\n        \"EDF6FF\" to \"Zumthor\",\n        \"EDF9F1\" to \"Narvik\",\n        \"EDFC84\" to \"Honeysuckle\",\n        \"EE82EE\" to \"Lavender Magenta\",\n        \"EEC1BE\" to \"Beauty Bush\",\n        \"EED794\" to \"Chalky\",\n        \"EED9C4\" to \"Almond\",\n        \"EEDC82\" to \"Flax\",\n        \"EEDEDA\" to \"Bizarre\",\n        \"EEE3AD\" to \"Double Colonial White\",\n        \"EEEEE8\" to \"Cararra\",\n        \"EEEF78\" to \"Manz\",\n        \"EEF0C8\" to \"Tahuna Sands\",\n        \"EEF0F3\" to \"Athens Gray\",\n        \"EEF3C3\" to \"Tusk\",\n        \"EEF4DE\" to \"Loafer\",\n        \"EEF6F7\" to \"Catskill White\",\n        \"EEFDFF\" to \"Twilight Blue\",\n        \"EEFF9A\" to \"Jonquil\",\n        \"EEFFE2\" to \"Rice Flower\",\n        \"EF863F\" to \"Jaffa\",\n        \"EFEFEF\" to \"Gallery\",\n        \"EFF2F3\" to \"Porcelain\",\n        \"F091A9\" to \"Mauvelous\",\n        \"F0D52D\" to \"Golden Dream\",\n        \"F0DB7D\" to \"Golden Sand\",\n        \"F0DC82\" to \"Buff\",\n        \"F0E2EC\" to \"Prim\",\n        \"F0E68C\" to \"Khaki\",\n        \"F0EEFD\" to \"Selago\",\n        \"F0EEFF\" to \"Titan White\",\n        \"F0F8FF\" to \"Alice Blue\",\n        \"F0FCEA\" to \"Feta\",\n        \"F18200\" to \"Gold Drop\",\n        \"F19BAB\" to \"Wewak\",\n        \"F1E788\" to \"Sahara Sand\",\n        \"F1E9D2\" to \"Parchment\",\n        \"F1E9FF\" to \"Blue Chalk\",\n        \"F1EEC1\" to \"Mint Julep\",\n        \"F1F1F1\" to \"Seashell\",\n        \"F1F7F2\" to \"Saltpan\",\n        \"F1FFAD\" to \"Tidal\",\n        \"F1FFC8\" to \"Chiffon\",\n        \"F2552A\" to \"Flamingo\",\n        \"F28500\" to \"Tangerine\",\n        \"F2C3B2\" to \"Mandys Pink\",\n        \"F2F2F2\" to \"Concrete\",\n        \"F2FAFA\" to \"Black Squeeze\",\n        \"F34723\" to \"Pomegranate\",\n        \"F3AD16\" to \"Buttercup\",\n        \"F3D69D\" to \"New Orleans\",\n        \"F3D9DF\" to \"Vanilla Ice\",\n        \"F3E7BB\" to \"Sidecar\",\n        \"F3E9E5\" to \"Dawn Pink\",\n        \"F3EDCF\" to \"Wheatfield\",\n        \"F3FB62\" to \"Canary\",\n        \"F3FBD4\" to \"Orinoco\",\n        \"F3FFD8\" to \"Carla\",\n        \"F400A1\" to \"Hollywood Cerise\",\n        \"F4A460\" to \"Sandy brown\",\n        \"F4C430\" to \"Saffron\",\n        \"F4D81C\" to \"Ripe Lemon\",\n        \"F4EBD3\" to \"Janna\",\n        \"F4F2EE\" to \"Pampas\",\n        \"F4F4F4\" to \"Wild Sand\",\n        \"F4F8FF\" to \"Zircon\",\n        \"F57584\" to \"Froly\",\n        \"F5C85C\" to \"Cream Can\",\n        \"F5C999\" to \"Manhattan\",\n        \"F5D5A0\" to \"Maize\",\n        \"F5DEB3\" to \"Wheat\",\n        \"F5E7A2\" to \"Sandwisp\",\n        \"F5E7E2\" to \"Pot Pourri\",\n        \"F5E9D3\" to \"Albescent White\",\n        \"F5EDEF\" to \"Soft Peach\",\n        \"F5F3E5\" to \"Ecru White\",\n        \"F5F5DC\" to \"Beige\",\n        \"F5FB3D\" to \"Golden Fizz\",\n        \"F5FFBE\" to \"Australian Mint\",\n        \"F64A8A\" to \"French Rose\",\n        \"F653A6\" to \"Brilliant Rose\",\n        \"F6A4C9\" to \"Illusion\",\n        \"F6F0E6\" to \"Merino\",\n        \"F6F7F7\" to \"Black Haze\",\n        \"F6FFDC\" to \"Spring Sun\",\n        \"F7468A\" to \"Violet Red\",\n        \"F77703\" to \"Chilean Fire\",\n        \"F77FBE\" to \"Persian Pink\",\n        \"F7B668\" to \"Rajah\",\n        \"F7C8DA\" to \"Azalea\",\n        \"F7DBE6\" to \"We Peep\",\n        \"F7F2E1\" to \"Quarter Spanish White\",\n        \"F7F5FA\" to \"Whisper\",\n        \"F7FAF7\" to \"Snow Drift\",\n        \"F8B853\" to \"Casablanca\",\n        \"F8C3DF\" to \"Chantilly\",\n        \"F8D9E9\" to \"Cherub\",\n        \"F8DB9D\" to \"Marzipan\",\n        \"F8DD5C\" to \"Energy Yellow\",\n        \"F8E4BF\" to \"Givry\",\n        \"F8F0E8\" to \"White Linen\",\n        \"F8F4FF\" to \"Magnolia\",\n        \"F8F6F1\" to \"Spring Wood\",\n        \"F8F7DC\" to \"Coconut Cream\",\n        \"F8F7FC\" to \"White Lilac\",\n        \"F8F8F7\" to \"Desert Storm\",\n        \"F8F99C\" to \"Texas\",\n        \"F8FACD\" to \"Corn Field\",\n        \"F8FDD3\" to \"Mimosa\",\n        \"F95A61\" to \"Carnation\",\n        \"F9BF58\" to \"Saffron Mango\",\n        \"F9E0ED\" to \"Carousel Pink\",\n        \"F9E4BC\" to \"Dairy Cream\",\n        \"F9E663\" to \"Portica\",\n        \"F9EAF3\" to \"Amour\",\n        \"F9F8E4\" to \"Rum Swizzle\",\n        \"F9FF8B\" to \"Dolly\",\n        \"F9FFF6\" to \"Sugar Cane\",\n        \"FA7814\" to \"Ecstasy\",\n        \"FA9D5A\" to \"Tan Hide\",\n        \"FAD3A2\" to \"Corvette\",\n        \"FADFAD\" to \"Peach Yellow\",\n        \"FAE600\" to \"Turbo\",\n        \"FAEAB9\" to \"Astra\",\n        \"FAECCC\" to \"Champagne\",\n        \"FAF0E6\" to \"Linen\",\n        \"FAF3F0\" to \"Fantasy\",\n        \"FAF7D6\" to \"Citrine White\",\n        \"FAFAFA\" to \"Alabaster\",\n        \"FAFDE4\" to \"Hint of Yellow\",\n        \"FAFFA4\" to \"Milan\",\n        \"FB607F\" to \"Brink Pink\",\n        \"FB8989\" to \"Geraldine\",\n        \"FBA0E3\" to \"Lavender Rose\",\n        \"FBA129\" to \"Sea Buckthorn\",\n        \"FBAC13\" to \"Sun\",\n        \"FBAED2\" to \"Lavender Pink\",\n        \"FBB2A3\" to \"Rose Bud\",\n        \"FBBEDA\" to \"Cupid\",\n        \"FBCCE7\" to \"Classic Rose\",\n        \"FBCEB1\" to \"Apricot Peach\",\n        \"FBE7B2\" to \"Banana Mania\",\n        \"FBE870\" to \"Marigold Yellow\",\n        \"FBE96C\" to \"Festival\",\n        \"FBEA8C\" to \"Sweet Corn\",\n        \"FBEC5D\" to \"Candy Corn\",\n        \"FBF9F9\" to \"Hint of Red\",\n        \"FBFFBA\" to \"Shalimar\",\n        \"FC0FC0\" to \"Shocking Pink\",\n        \"FC80A5\" to \"Tickle Me Pink\",\n        \"FC9C1D\" to \"Tree Poppy\",\n        \"FCC01E\" to \"Lightning Yellow\",\n        \"FCD667\" to \"Goldenrod\",\n        \"FCD917\" to \"Candlelight\",\n        \"FCDA98\" to \"Cherokee\",\n        \"FCF4D0\" to \"Double Pearl Lusta\",\n        \"FCF4DC\" to \"Pearl Lusta\",\n        \"FCF8F7\" to \"Vista White\",\n        \"FCFBF3\" to \"Bianca\",\n        \"FCFEDA\" to \"Moon Glow\",\n        \"FCFFE7\" to \"China Ivory\",\n        \"FCFFF9\" to \"Ceramic\",\n        \"FD0E35\" to \"Torch Red\",\n        \"FD5B78\" to \"Wild Watermelon\",\n        \"FD7B33\" to \"Crusta\",\n        \"FD7C07\" to \"Sorbus\",\n        \"FD9FA2\" to \"Sweet Pink\",\n        \"FDD5B1\" to \"Light Apricot\",\n        \"FDD7E4\" to \"Pig Pink\",\n        \"FDE1DC\" to \"Cinderella\",\n        \"FDE295\" to \"Golden Glow\",\n        \"FDE910\" to \"Lemon\",\n        \"FDF5E6\" to \"Old Lace\",\n        \"FDF6D3\" to \"Half Colonial White\",\n        \"FDF7AD\" to \"Drover\",\n        \"FDFEB8\" to \"Pale Prim\",\n        \"FDFFD5\" to \"Cumulus\",\n        \"FE28A2\" to \"Persian Rose\",\n        \"FE4C40\" to \"Sunset Orange\",\n        \"FE6F5E\" to \"Bittersweet\",\n        \"FE9D04\" to \"California\",\n        \"FEA904\" to \"Yellow Sea\",\n        \"FEBAAD\" to \"Melon\",\n        \"FED33C\" to \"Bright Sun\",\n        \"FED85D\" to \"Dandelion\",\n        \"FEDB8D\" to \"Salomie\",\n        \"FEE5AC\" to \"Cape Honey\",\n        \"FEEBF3\" to \"Remy\",\n        \"FEEFCE\" to \"Oasis\",\n        \"FEF0EC\" to \"Bridesmaid\",\n        \"FEF2C7\" to \"Beeswax\",\n        \"FEF3D8\" to \"Bleach White\",\n        \"FEF4CC\" to \"Pipi\",\n        \"FEF4DB\" to \"Half Spanish White\",\n        \"FEF4F8\" to \"Wisp Pink\",\n        \"FEF5F1\" to \"Provincial Pink\",\n        \"FEF7DE\" to \"Half Dutch White\",\n        \"FEF8E2\" to \"Solitaire\",\n        \"FEF8FF\" to \"White Pointer\",\n        \"FEF9E3\" to \"Off Yellow\",\n        \"FEFCED\" to \"Orange White\",\n        \"FF0000\" to \"Red\",\n        \"FF007F\" to \"Rose\",\n        \"FF00CC\" to \"Purple Pizzazz\",\n        \"FF00FF\" to \"Magenta Fuchsia\",\n        \"FF2400\" to \"Scarlet\",\n        \"FF3399\" to \"Wild Strawberry\",\n        \"FF33CC\" to \"Razzle Dazzle Rose\",\n        \"FF355E\" to \"Radical Red\",\n        \"FF3F34\" to \"Red Orange\",\n        \"FF4040\" to \"Coral Red\",\n        \"FF4D00\" to \"Vermilion\",\n        \"FF4F00\" to \"International Orange\",\n        \"FF6037\" to \"Outrageous Orange\",\n        \"FF6600\" to \"Blaze Orange\",\n        \"FF66FF\" to \"Pink Flamingo\",\n        \"FF681F\" to \"Orange\",\n        \"FF69B4\" to \"Hot Pink\",\n        \"FF6B53\" to \"Persimmon\",\n        \"FF6FFF\" to \"Blush Pink\",\n        \"FF7034\" to \"Burning Orange\",\n        \"FF7518\" to \"Pumpkin\",\n        \"FF7D07\" to \"Flamenco\",\n        \"FF7F00\" to \"Flush Orange\",\n        \"FF7F50\" to \"Coral\",\n        \"FF8C69\" to \"Salmon\",\n        \"FF9000\" to \"Pizazz\",\n        \"FF910F\" to \"West Side\",\n        \"FF91A4\" to \"Pink Salmon\",\n        \"FF9933\" to \"Neon Carrot\",\n        \"FF9966\" to \"Atomic Tangerine\",\n        \"FF9980\" to \"Vivid Tangerine\",\n        \"FF9E2C\" to \"Sunshade\",\n        \"FFA000\" to \"Orange Peel\",\n        \"FFA194\" to \"Mona Lisa\",\n        \"FFA500\" to \"Web Orange\",\n        \"FFA6C9\" to \"Carnation Pink\",\n        \"FFAB81\" to \"Hit Pink\",\n        \"FFAE42\" to \"Yellow Orange\",\n        \"FFB0AC\" to \"Cornflower Lilac\",\n        \"FFB1B3\" to \"Sundown\",\n        \"FFB31F\" to \"My Sin\",\n        \"FFB555\" to \"Texas Rose\",\n        \"FFB7D5\" to \"Cotton Candy\",\n        \"FFB97B\" to \"Macaroni and Cheese\",\n        \"FFBA00\" to \"Selective Yellow\",\n        \"FFBD5F\" to \"Koromiko\",\n        \"FFBF00\" to \"Amber\",\n        \"FFC0A8\" to \"Wax Flower\",\n        \"FFC0CB\" to \"Pink\",\n        \"FFC3C0\" to \"Your Pink\",\n        \"FFC901\" to \"Supernova\",\n        \"FFCBA4\" to \"Flesh\",\n        \"FFCC33\" to \"Sunglow\",\n        \"FFCC5C\" to \"Golden Tainoi\",\n        \"FFCC99\" to \"Peach Orange\",\n        \"FFCD8C\" to \"Chardonnay\",\n        \"FFD1DC\" to \"Pastel Pink\",\n        \"FFD2B7\" to \"Romantic\",\n        \"FFD38C\" to \"Grandis\",\n        \"FFD700\" to \"Gold\",\n        \"FFD800\" to \"School bus Yellow\",\n        \"FFD8D9\" to \"Cosmos\",\n        \"FFDB58\" to \"Mustard\",\n        \"FFDCD6\" to \"Peach Schnapps\",\n        \"FFDDAF\" to \"Caramel\",\n        \"FFDDCD\" to \"Tuft Bush\",\n        \"FFDDCF\" to \"Watusi\",\n        \"FFDDF4\" to \"Pink Lace\",\n        \"FFDEAD\" to \"Navajo White\",\n        \"FFDEB3\" to \"Frangipani\",\n        \"FFE1DF\" to \"Pippin\",\n        \"FFE1F2\" to \"Pale Rose\",\n        \"FFE2C5\" to \"Negroni\",\n        \"FFE5A0\" to \"Cream Brulee\",\n        \"FFE5B4\" to \"Peach\",\n        \"FFE6C7\" to \"Tequila\",\n        \"FFE772\" to \"Kournikova\",\n        \"FFEAC8\" to \"Sandy Beach\",\n        \"FFEAD4\" to \"Karry\",\n        \"FFEC13\" to \"Broom\",\n        \"FFEDBC\" to \"Colonial White\",\n        \"FFEED8\" to \"Derby\",\n        \"FFEFA1\" to \"Vis Vis\",\n        \"FFEFC1\" to \"Egg White\",\n        \"FFEFD5\" to \"Papaya Whip\",\n        \"FFEFEC\" to \"Fair Pink\",\n        \"FFF0DB\" to \"Peach Cream\",\n        \"FFF0F5\" to \"Lavender blush\",\n        \"FFF14F\" to \"Gorse\",\n        \"FFF1B5\" to \"Buttermilk\",\n        \"FFF1D8\" to \"Pink Lady\",\n        \"FFF1EE\" to \"Forget Me Not\",\n        \"FFF1F9\" to \"Tutu\",\n        \"FFF39D\" to \"Picasso\",\n        \"FFF3F1\" to \"Chardon\",\n        \"FFF46E\" to \"Paris Daisy\",\n        \"FFF4CE\" to \"Barley White\",\n        \"FFF4DD\" to \"Egg Sour\",\n        \"FFF4E0\" to \"Sazerac\",\n        \"FFF4E8\" to \"Serenade\",\n        \"FFF4F3\" to \"Chablis\",\n        \"FFF5EE\" to \"Seashell Peach\",\n        \"FFF5F3\" to \"Sauvignon\",\n        \"FFF6D4\" to \"Milk Punch\",\n        \"FFF6DF\" to \"Varden\",\n        \"FFF6F5\" to \"Rose White\",\n        \"FFF8D1\" to \"Baja White\",\n        \"FFF9E2\" to \"Gin Fizz\",\n        \"FFF9E6\" to \"Early Dawn\",\n        \"FFFACD\" to \"Lemon Chiffon\",\n        \"FFFAF4\" to \"Bridal Heath\",\n        \"FFFBDC\" to \"Scotch Mist\",\n        \"FFFBF9\" to \"Soapstone\",\n        \"FFFC99\" to \"Witch Haze\",\n        \"FFFCEA\" to \"Buttery White\",\n        \"FFFCEE\" to \"Island Spice\",\n        \"FFFDD0\" to \"Cream\",\n        \"FFFDE6\" to \"Chilean Heath\",\n        \"FFFDE8\" to \"Travertine\",\n        \"FFFDF3\" to \"Orchid White\",\n        \"FFFDF4\" to \"Quarter Pearl Lusta\",\n        \"FFFEE1\" to \"Half and Half\",\n        \"FFFEEC\" to \"Apricot White\",\n        \"FFFEF0\" to \"Rice Cake\",\n        \"FFFEF6\" to \"Black White\",\n        \"FFFEFD\" to \"Romance\",\n        \"FFFF00\" to \"Yellow\",\n        \"FFFF66\" to \"Laser Lemon\",\n        \"FFFF99\" to \"Pale Canary\",\n        \"FFFFB4\" to \"Portafino\",\n        \"FFFFF0\" to \"Ivory\",\n        \"FFFFFF\" to \"White\")\n\n"
  },
  {
    "path": "namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/core/util/MaterialColors.kt",
    "content": "package il.co.galex.namethatcolor.core.util\n\nval colorsMaterialNames = mapOf(\n        \"000000\" to \"black\",\n        \"FFFFFF\" to \"white\",\n        \"FFEBEE\" to \"red_50\",\n        \"FFCDD2\" to \"red_100\",\n        \"EF9A9A\" to \"red_200\",\n        \"E57373\" to \"red_300\",\n        \"EF5350\" to \"red_400\",\n        \"F44336\" to \"red_500\",\n        \"E53935\" to \"red_600\",\n        \"D32F2F\" to \"red_700\",\n        \"C62828\" to \"red_800\",\n        \"B71C1C\" to \"red_900\",\n        \"FF8A80\" to \"red_A100\",\n        \"FF5252\" to \"red_A200\",\n        \"FF1744\" to \"red_A400\",\n        \"D50000\" to \"red_A700\",\n        \"EDE7F6\" to \"deep_purple_50\",\n        \"D1C4E9\" to \"deep_purple_100\",\n        \"B39DDB\" to \"deep_purple_200\",\n        \"9575CD\" to \"deep_purple_300\",\n        \"7E57C2\" to \"deep_purple_400\",\n        \"673AB7\" to \"deep_purple_500\",\n        \"5E35B1\" to \"deep_purple_600\",\n        \"512DA8\" to \"deep_purple_700\",\n        \"4527A0\" to \"deep_purple_800\",\n        \"311B92\" to \"deep_purple_900\",\n        \"B388FF\" to \"deep_purple_A100\",\n        \"7C4DFF\" to \"deep_purple_A200\",\n        \"651FFF\" to \"deep_purple_A400\",\n        \"6200EA\" to \"deep_purple_A700\",\n        \"E1F5FE\" to \"light_blue_50\",\n        \"B3E5FC\" to \"light_blue_100\",\n        \"81D4FA\" to \"light_blue_200\",\n        \"4FC3F7\" to \"light_blue_300\",\n        \"29B6F6\" to \"light_blue_400\",\n        \"03A9F4\" to \"light_blue_500\",\n        \"039BE5\" to \"light_blue_600\",\n        \"0288D1\" to \"light_blue_700\",\n        \"0277BD\" to \"light_blue_800\",\n        \"01579B\" to \"light_blue_900\",\n        \"80D8FF\" to \"light_blue_A100\",\n        \"40C4FF\" to \"light_blue_A200\",\n        \"00B0FF\" to \"light_blue_A400\",\n        \"0091EA\" to \"light_blue_A700\",\n        \"E8F5E9\" to \"green_50\",\n        \"C8E6C9\" to \"green_100\",\n        \"A5D6A7\" to \"green_200\",\n        \"81C784\" to \"green_300\",\n        \"66BB6A\" to \"green_400\",\n        \"4CAF50\" to \"green_500\",\n        \"43A047\" to \"green_600\",\n        \"388E3C\" to \"green_700\",\n        \"2E7D32\" to \"green_800\",\n        \"1B5E20\" to \"green_900\",\n        \"B9F6CA\" to \"green_A100\",\n        \"69F0AE\" to \"green_A200\",\n        \"00E676\" to \"green_A400\",\n        \"00C853\" to \"green_A700\",\n        \"FFFDE7\" to \"yellow_50\",\n        \"FFF9C4\" to \"yellow_100\",\n        \"FFF59D\" to \"yellow_200\",\n        \"FFF176\" to \"yellow_300\",\n        \"FFEE58\" to \"yellow_400\",\n        \"FFEB3B\" to \"yellow_500\",\n        \"FDD835\" to \"yellow_600\",\n        \"FBC02D\" to \"yellow_700\",\n        \"F9A825\" to \"yellow_800\",\n        \"F57F17\" to \"yellow_900\",\n        \"FFFF8D\" to \"yellow_A100\",\n        \"FFFF00\" to \"yellow_A200\",\n        \"FFEA00\" to \"yellow_A400\",\n        \"FFD600\" to \"yellow_A700\",\n        \"FBE9E7\" to \"deep_orange_50\",\n        \"FFCCBC\" to \"deep_orange_100\",\n        \"FFAB91\" to \"deep_orange_200\",\n        \"FF8A65\" to \"deep_orange_300\",\n        \"FF7043\" to \"deep_orange_400\",\n        \"FF5722\" to \"deep_orange_500\",\n        \"F4511E\" to \"deep_orange_600\",\n        \"E64A19\" to \"deep_orange_700\",\n        \"D84315\" to \"deep_orange_800\",\n        \"BF360C\" to \"deep_orange_900\",\n        \"FF9E80\" to \"deep_orange_A100\",\n        \"FF6E40\" to \"deep_orange_A200\",\n        \"FF3D00\" to \"deep_orange_A400\",\n        \"DD2C00\" to \"deep_orange_A700\",\n        \"ECEFF1\" to \"blue_grey_50\",\n        \"CFD8DC\" to \"blue_grey_100\",\n        \"B0BEC5\" to \"blue_grey_200\",\n        \"90A4AE\" to \"blue_grey_300\",\n        \"78909C\" to \"blue_grey_400\",\n        \"607D8B\" to \"blue_grey_500\",\n        \"546E7A\" to \"blue_grey_600\",\n        \"455A64\" to \"blue_grey_700\",\n        \"37474F\" to \"blue_grey_800\",\n        \"263238\" to \"blue_grey_900\",\n        \"FCE4EC\" to \"pink_50\",\n        \"F8BBD0\" to \"pink_100\",\n        \"F48FB1\" to \"pink_200\",\n        \"F06292\" to \"pink_300\",\n        \"EC407A\" to \"pink_400\",\n        \"E91E63\" to \"pink_500\",\n        \"D81B60\" to \"pink_600\",\n        \"C2185B\" to \"pink_700\",\n        \"AD1457\" to \"pink_800\",\n        \"880E4F\" to \"pink_900\",\n        \"FF80AB\" to \"pink_A100\",\n        \"FF4081\" to \"pink_A200\",\n        \"F50057\" to \"pink_A400\",\n        \"C51162\" to \"pink_A700\",\n        \"E8EAF6\" to \"indigo_50\",\n        \"C5CAE9\" to \"indigo_100\",\n        \"9FA8DA\" to \"indigo_200\",\n        \"7986CB\" to \"indigo_300\",\n        \"5C6BC0\" to \"indigo_400\",\n        \"3F51B5\" to \"indigo_500\",\n        \"3949AB\" to \"indigo_600\",\n        \"303F9F\" to \"indigo_700\",\n        \"283593\" to \"indigo_800\",\n        \"1A237E\" to \"indigo_900\",\n        \"8C9EFF\" to \"indigo_A100\",\n        \"536DFE\" to \"indigo_A200\",\n        \"3D5AFE\" to \"indigo_A400\",\n        \"304FFE\" to \"indigo_A700\",\n        \"E0F7FA\" to \"cyan_50\",\n        \"B2EBF2\" to \"cyan_100\",\n        \"80DEEA\" to \"cyan_200\",\n        \"4DD0E1\" to \"cyan_300\",\n        \"26C6DA\" to \"cyan_400\",\n        \"00BCD4\" to \"cyan_500\",\n        \"00ACC1\" to \"cyan_600\",\n        \"0097A7\" to \"cyan_700\",\n        \"00838F\" to \"cyan_800\",\n        \"006064\" to \"cyan_900\",\n        \"84FFFF\" to \"cyan_A100\",\n        \"18FFFF\" to \"cyan_A200\",\n        \"00E5FF\" to \"cyan_A400\",\n        \"00B8D4\" to \"cyan_A700\",\n        \"F1F8E9\" to \"light_green_50\",\n        \"DCEDC8\" to \"light_green_100\",\n        \"C5E1A5\" to \"light_green_200\",\n        \"AED581\" to \"light_green_300\",\n        \"9CCC65\" to \"light_green_400\",\n        \"8BC34A\" to \"light_green_500\",\n        \"7CB342\" to \"light_green_600\",\n        \"689F38\" to \"light_green_700\",\n        \"558B2F\" to \"light_green_800\",\n        \"33691E\" to \"light_green_900\",\n        \"CCFF90\" to \"light_green_A100\",\n        \"B2FF59\" to \"light_green_A200\",\n        \"76FF03\" to \"light_green_A400\",\n        \"64DD17\" to \"light_green_A700\",\n        \"FFF8E1\" to \"amber_50\",\n        \"FFECB3\" to \"amber_100\",\n        \"FFE082\" to \"amber_200\",\n        \"FFD54F\" to \"amber_300\",\n        \"FFCA28\" to \"amber_400\",\n        \"FFC107\" to \"amber_500\",\n        \"FFB300\" to \"amber_600\",\n        \"FFA000\" to \"amber_700\",\n        \"FF8F00\" to \"amber_800\",\n        \"FF6F00\" to \"amber_900\",\n        \"FFE57F\" to \"amber_A100\",\n        \"FFD740\" to \"amber_A200\",\n        \"FFC400\" to \"amber_A400\",\n        \"FFAB00\" to \"amber_A700\",\n        \"EFEBE9\" to \"brown_50\",\n        \"D7CCC8\" to \"brown_100\",\n        \"BCAAA4\" to \"brown_200\",\n        \"A1887F\" to \"brown_300\",\n        \"8D6E63\" to \"brown_400\",\n        \"795548\" to \"brown_500\",\n        \"6D4C41\" to \"brown_600\",\n        \"5D4037\" to \"brown_700\",\n        \"4E342E\" to \"brown_800\",\n        \"3E2723\" to \"brown_900\",\n        \"F3E5F5\" to \"purple_50\",\n        \"E1BEE7\" to \"purple_100\",\n        \"CE93D8\" to \"purple_200\",\n        \"BA68C8\" to \"purple_300\",\n        \"AB47BC\" to \"purple_400\",\n        \"9C27B0\" to \"purple_500\",\n        \"8E24AA\" to \"purple_600\",\n        \"7B1FA2\" to \"purple_700\",\n        \"6A1B9A\" to \"purple_800\",\n        \"4A148C\" to \"purple_900\",\n        \"EA80FC\" to \"purple_A100\",\n        \"E040FB\" to \"purple_A200\",\n        \"D500F9\" to \"purple_A400\",\n        \"AA00FF\" to \"purple_A700\",\n        \"E3F2FD\" to \"blue_50\",\n        \"BBDEFB\" to \"blue_100\",\n        \"90CAF9\" to \"blue_200\",\n        \"64B5F6\" to \"blue_300\",\n        \"42A5F5\" to \"blue_400\",\n        \"2196F3\" to \"blue_500\",\n        \"1E88E5\" to \"blue_600\",\n        \"1976D2\" to \"blue_700\",\n        \"1565C0\" to \"blue_800\",\n        \"0D47A1\" to \"blue_900\",\n        \"82B1FF\" to \"blue_A100\",\n        \"448AFF\" to \"blue_A200\",\n        \"2979FF\" to \"blue_A400\",\n        \"2962FF\" to \"blue_A700\",\n        \"E0F2F1\" to \"teal_50\",\n        \"B2DFDB\" to \"teal_100\",\n        \"80CBC4\" to \"teal_200\",\n        \"4DB6AC\" to \"teal_300\",\n        \"26A69A\" to \"teal_400\",\n        \"009688\" to \"teal_500\",\n        \"00897B\" to \"teal_600\",\n        \"00796B\" to \"teal_700\",\n        \"00695C\" to \"teal_800\",\n        \"004D40\" to \"teal_900\",\n        \"A7FFEB\" to \"teal_A100\",\n        \"64FFDA\" to \"teal_A200\",\n        \"1DE9B6\" to \"teal_A400\",\n        \"00BFA5\" to \"teal_A700\",\n        \"F9FBE7\" to \"lime_50\",\n        \"F0F4C3\" to \"lime_100\",\n        \"E6EE9C\" to \"lime_200\",\n        \"DCE775\" to \"lime_300\",\n        \"D4E157\" to \"lime_400\",\n        \"CDDC39\" to \"lime_500\",\n        \"C0CA33\" to \"lime_600\",\n        \"AFB42B\" to \"lime_700\",\n        \"9E9D24\" to \"lime_800\",\n        \"827717\" to \"lime_900\",\n        \"F4FF81\" to \"lime_A100\",\n        \"EEFF41\" to \"lime_A200\",\n        \"C6FF00\" to \"lime_A400\",\n        \"AEEA00\" to \"lime_A700\",\n        \"FFF3E0\" to \"orange_50\",\n        \"FFE0B2\" to \"orange_100\",\n        \"FFCC80\" to \"orange_200\",\n        \"FFB74D\" to \"orange_300\",\n        \"FFA726\" to \"orange_400\",\n        \"FF9800\" to \"orange_500\",\n        \"FB8C00\" to \"orange_600\",\n        \"F57C00\" to \"orange_700\",\n        \"EF6C00\" to \"orange_800\",\n        \"E65100\" to \"orange_900\",\n        \"FFD180\" to \"orange_A100\",\n        \"FFAB40\" to \"orange_A200\",\n        \"FF9100\" to \"orange_A400\",\n        \"FF6D00\" to \"orange_A700\",\n        \"FAFAFA\" to \"grey_50\",\n        \"F5F5F5\" to \"grey_100\",\n        \"EEEEEE\" to \"grey_200\",\n        \"E0E0E0\" to \"grey_300\",\n        \"BDBDBD\" to \"grey_400\",\n        \"9E9E9E\" to \"grey_500\",\n        \"757575\" to \"grey_600\",\n        \"616161\" to \"grey_700\",\n        \"424242\" to \"grey_800\",\n        \"212121\" to \"grey_900\"\n)"
  },
  {
    "path": "namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/core/util/Rounding.kt",
    "content": "package il.co.galex.namethatcolor.core.util\n\nimport kotlin.math.roundToInt\n\nfun Double.roundTo2Decimal() = (this * 100.0).roundToInt()\nfun Double.roundTo2HexString() = \"%02x\".format((this).roundToInt())"
  },
  {
    "path": "namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/plugin/annotator/ColorAnnotator.kt",
    "content": "package il.co.galex.namethatcolor.plugin.annotator\n\nimport com.intellij.lang.annotation.AnnotationHolder\nimport com.intellij.lang.annotation.Annotator\nimport com.intellij.lang.annotation.HighlightSeverity\nimport com.intellij.psi.PsiElement\nimport com.intellij.psi.impl.source.xml.XmlTextImpl\nimport il.co.galex.namethatcolor.core.manager.ColorNameFinder\nimport il.co.galex.namethatcolor.core.model.HexColor\nimport il.co.galex.namethatcolor.plugin.intention.NameColorIntention\nimport il.co.galex.namethatcolor.plugin.util.*\n\nclass ColorAnnotator : Annotator {\n\n    override fun annotate(element: PsiElement, holder: AnnotationHolder) {\n\n        try {\n            val color = HexColor(element.text)\n            // we found a value that is a valid color, checking that it is not already in a <color> tag\n            if ((element.parent as XmlTextImpl).parentTag?.name == RESOURCES_TAG_NAME) {\n\n                // color list from name that color\n                holder.newAnnotation(HighlightSeverity.ERROR, COLOR_ANNOTATION_MESSAGE)\n                        .newFix(NameColorIntention(NAME_THAT_COLOR, color, ColorNameFinder::findColor))\n                        .registerFix()\n                        .create()\n\n                // material color palette\n                holder.newAnnotation(HighlightSeverity.ERROR, MATERIAL_COLOR_ANNOTATION_MESSAGE)\n                        .newFix(NameColorIntention(NAME_THAT_MATERIAL_COLOR, color, ColorNameFinder::findMaterialColor))\n                        .registerFix()\n                        .create()\n            }\n        } catch (e: Exception) {\n            // found that a color is not valid for us, ignoring it\n        }\n    }\n}"
  },
  {
    "path": "namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/plugin/completion/CaretCompletionContributor.kt",
    "content": "package il.co.galex.namethatcolor.plugin.completion\n\nimport com.intellij.codeInsight.completion.*\nimport com.intellij.codeInsight.completion.CompletionUtilCore.DUMMY_IDENTIFIER_TRIMMED\nimport com.intellij.util.ProcessingContext\nimport il.co.galex.namethatcolor.core.manager.ColorNameFinder\nimport il.co.galex.namethatcolor.plugin.util.NAME_THAT_COLOR\nimport il.co.galex.namethatcolor.plugin.util.NAME_THAT_MATERIAL_COLOR\nimport il.co.galex.namethatcolor.plugin.util.PLACE\nimport il.co.galex.namethatcolor.plugin.util.addElement\n\n/**\n * Completes the color on the caret after the color was written\n * (For some reason this shows up in the IDE only for lowercase entered colors)\n */\nclass CaretCompletionContributor : CompletionContributor() {\n\n    init {\n        extend(CompletionType.BASIC, PLACE, object : CompletionProvider<CompletionParameters>() {\n\n            override fun addCompletions(parameters: CompletionParameters, context: ProcessingContext, resultSet: CompletionResultSet) {\n\n                val text = parameters.position.text.replace(DUMMY_IDENTIFIER_TRIMMED, \"\")\n\n                resultSet.addElement(NAME_THAT_COLOR, text, ColorNameFinder::findColor)\n                resultSet.addElement(NAME_THAT_MATERIAL_COLOR, text, ColorNameFinder::findMaterialColor)\n            }\n        })\n    }\n}\n"
  },
  {
    "path": "namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/plugin/completion/ClipboardCompletionContributor.kt",
    "content": "package il.co.galex.namethatcolor.plugin.completion\n\nimport com.intellij.codeInsight.completion.*\nimport com.intellij.openapi.application.ex.ClipboardUtil\nimport com.intellij.util.ProcessingContext\nimport il.co.galex.namethatcolor.core.manager.ColorNameFinder\nimport il.co.galex.namethatcolor.plugin.util.NAME_THAT_COLOR\nimport il.co.galex.namethatcolor.plugin.util.NAME_THAT_MATERIAL_COLOR\nimport il.co.galex.namethatcolor.plugin.util.PLACE\nimport il.co.galex.namethatcolor.plugin.util.addElement\n\n/**\n *  Completes the color from the clipboard\n */\nclass ClipboardCompletionContributor : CompletionContributor() {\n\n    init {\n        extend(CompletionType.BASIC, PLACE, object : CompletionProvider<CompletionParameters>() {\n\n            override fun addCompletions(parameters: CompletionParameters, context: ProcessingContext, resultSet: CompletionResultSet) {\n\n                ClipboardUtil.getTextInClipboard()?.let {\n                    resultSet.addElement(NAME_THAT_COLOR, it, ColorNameFinder::findColor)\n                    resultSet.addElement(NAME_THAT_MATERIAL_COLOR, it, ColorNameFinder::findMaterialColor)\n                }\n            }\n        })\n    }\n}\n"
  },
  {
    "path": "namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/plugin/intention/NameColorIntention.kt",
    "content": "package il.co.galex.namethatcolor.plugin.intention\n\nimport com.intellij.codeInsight.intention.IntentionAction\nimport com.intellij.lang.ASTFactory\nimport com.intellij.openapi.editor.Editor\nimport com.intellij.openapi.project.Project\nimport com.intellij.psi.PsiElement\nimport com.intellij.psi.PsiFile\nimport com.intellij.psi.XmlElementFactory\nimport com.intellij.psi.xml.XmlElementType\nimport com.intellij.psi.xml.XmlFile\nimport com.intellij.psi.xml.XmlText\nimport il.co.galex.namethatcolor.core.model.Color\nimport il.co.galex.namethatcolor.core.model.HexColor\nimport il.co.galex.namethatcolor.core.util.toXmlName\nimport il.co.galex.namethatcolor.plugin.util.xmlOutput\n\n@Suppress(\"DialogTitleCapitalization\")\nclass NameColorIntention(private val text: String, private val hexColor: HexColor, private val find: (color: HexColor) -> Pair<HexColor, Color>) : IntentionAction {\n\n    override fun getFamilyName(): String = \"Name That Color\"\n    override fun getText(): String = text\n    override fun startInWriteAction(): Boolean = true\n    override fun isAvailable(project: Project, editor: Editor?, file: PsiFile?): Boolean = true\n\n    override fun invoke(project: Project, editor: Editor?, file: PsiFile?) {\n\n        if (file is XmlFile) {\n            file.rootTag?.let { rootTag ->\n                val elements = rootTag.children.filterIsInstance<XmlText>()\n                elements.forEach { oldElement ->\n                    if (oldElement.text.contains(hexColor.input)) {\n\n                        val (hexColor, color) = find(HexColor(hexColor.input))\n                        val name = color.name.toXmlName(hexColor.percentAlpha)\n                        val insert = xmlOutput(name, hexColor.toString())\n\n                        var newElement: PsiElement = XmlElementFactory.getInstance(project).createTagFromText(insert)\n                        val split = oldElement.text.split(hexColor.input)\n                        newElement = oldElement.replace(newElement)\n                        // keep what was before and after the entered color\n                        if (split.isNotEmpty()) rootTag.addBefore(insert(project, split[0]), newElement)\n                        if (split.size > 1) rootTag.addAfter(insert(project, split[1]), newElement)\n\n                        // get out of our loop if we found one to replace\n                        return@forEach\n                    }\n                }\n            }\n        }\n    }\n\n    private fun insert(project: Project, text: String): XmlText {\n        val tagFromText = XmlElementFactory.getInstance(project).createTagFromText(\"<a>$text</a>\")\n        val textElements = tagFromText.value.textElements\n        return if (textElements.isEmpty()) ASTFactory.composite(XmlElementType.XML_TEXT) as XmlText else textElements[0]\n    }\n}"
  },
  {
    "path": "namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/plugin/util/CompletionResultSetExtensions.kt",
    "content": "package il.co.galex.namethatcolor.plugin.util\n\nimport com.intellij.codeInsight.completion.CompletionResultSet\nimport com.intellij.codeInsight.lookup.LookupElementBuilder\nimport il.co.galex.namethatcolor.core.exception.ColorNotFoundException\nimport il.co.galex.namethatcolor.core.model.Color\nimport il.co.galex.namethatcolor.core.model.HexColor\nimport il.co.galex.namethatcolor.core.util.toXmlName\n\ninline fun CompletionResultSet.addElement(message: String, clipboard: String, find: (color: HexColor) -> Pair<HexColor, Color>) {\n\n    try {\n        val (hexColor, color) = find(HexColor(clipboard))\n        val name = color.name.toXmlName(hexColor.percentAlpha)\n        val insert = xmlOutput(name, hexColor.toString())\n        addElement(LookupElementBuilder.create(insert).withPresentableText(message))\n\n    } catch (e: ColorNotFoundException) {\n        println(e.localizedMessage)\n    } catch (e: IllegalArgumentException) {\n        println(e.localizedMessage)\n    }\n}"
  },
  {
    "path": "namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/plugin/util/Constants.kt",
    "content": "package il.co.galex.namethatcolor.plugin.util\n\nimport com.intellij.codeInsight.completion.CompletionUtilCore\nimport com.intellij.patterns.XmlPatterns\nimport com.intellij.psi.xml.XmlTag\nimport com.intellij.psi.xml.XmlToken\n\nconst val NAME_THAT_COLOR = \"Name that color\"\nconst val NAME_THAT_MATERIAL_COLOR = \"Name that material color\"\n\nconst val COLOR_ANNOTATION_MESSAGE = \"Convert this automatically to an XML color tag named from a large set of colors\"\nconst val MATERIAL_COLOR_ANNOTATION_MESSAGE = \"Convert this automatically to an XML color tag named as a Material Color\"\n\nconst val ALPHA_SEPARATOR = \"_alpha_\"\n\nconst val RESOURCES_TAG_NAME = \"resources\"\n\nval PLACE = XmlPatterns.psiElement(XmlToken::class.java)\n        .withText(CompletionUtilCore.DUMMY_IDENTIFIER_TRIMMED)\n        .withParent(XmlPatterns.xmlText()\n                .withParent(XmlPatterns.psiElement(XmlTag::class.java)\n                        .withName(RESOURCES_TAG_NAME)\n                )\n        )"
  },
  {
    "path": "namethatcolor/src/main/kotlin/il/co/galex/namethatcolor/plugin/util/XmlOutput.kt",
    "content": "package il.co.galex.namethatcolor.plugin.util\n\nfun xmlOutput(name: String, hexColor: String) = \"<color name=\\\"$name\\\">$hexColor</color>\""
  },
  {
    "path": "namethatcolor/src/main/resources/META-INF/plugin.xml",
    "content": "<idea-plugin>\n    <id>il.co.galex.namethatcolor</id>\n    <name>Name That Color</name>\n    <version>1.7.1</version>\n    <vendor email=\"alexandre.gherschon@gmail.com\" url=\"http://galex.co.il/namethatcolor\">Alexander Gherschon</vendor>\n\n    <description><![CDATA[\n      Name the color you have in your clipboard directly inside your color resource file in Android Studio.<br>\n      Copy the color in your clipboard and go to your color resources files (usually colors.xml), then open the auto complete pop-up. You'll see there\n      two suggestions go generate the whole (material) color item, with the name of the (material swatch) color.\n    ]]></description>\n\n    <change-notes><![CDATA[\n    <b>1.7.1</b><br>\n     - Updated plugin to latest IntelliJ version (2020.3)<br>\n     ]]></change-notes>\n    <idea-version since-build=\"201.6668.113\"/>\n\n    <depends optional=\"true\" config-file=\"withKotlin.xml\">org.jetbrains.kotlin</depends>\n\n    <extensions defaultExtensionNs=\"com.intellij\">\n        <completion.contributor language=\"XML\" implementationClass=\"il.co.galex.namethatcolor.plugin.completion.ClipboardCompletionContributor\" />\n        <completion.contributor language=\"XML\" implementationClass=\"il.co.galex.namethatcolor.plugin.completion.CaretCompletionContributor\" />\n        <annotator language=\"XML\" implementationClass=\"il.co.galex.namethatcolor.plugin.annotator.ColorAnnotator\"/>\n\n    </extensions>\n</idea-plugin>"
  },
  {
    "path": "namethatcolor/src/main/resources/META-INF/withKotlin.xml",
    "content": "<idea-plugin>\n    <extensions defaultExtensionNs=\"com.intellij\">\n        <annotator language=\"kotlin\" implementationClass=\"com.example.MyKotlinAnnotator\"/>\n    </extensions>\n</idea-plugin>"
  },
  {
    "path": "namethatcolor/src/test/kotlin/il/co/galex/namethatcolor/core/manager/ColorExtensionsTest.kt",
    "content": "package il.co.galex.namethatcolor.core.manager\n\nimport il.co.galex.namethatcolor.core.model.Hsl\nimport il.co.galex.namethatcolor.core.model.Rgb\nimport il.co.galex.namethatcolor.core.util.hsl\nimport il.co.galex.namethatcolor.core.util.rgb\nimport org.junit.Assert.assertEquals\nimport org.junit.Test\n\nclass ColorExtensionsTest {\n\n    @Test\n    fun `color to rgb`() {\n        // black\n        assertEquals(Rgb(0, 0, 0), \"000000\".rgb())\n        // white\n        assertEquals(Rgb(255, 255, 255), \"FFFFFFF\".rgb())\n        // red\n        assertEquals(Rgb(255, 0, 0), \"FF0000\".rgb())\n        // green\n        assertEquals(Rgb(0, 255, 0), \"00FF00\".rgb())\n        // blue\n        assertEquals(Rgb(0, 0, 255), \"0000FF\".rgb())\n        // random color with different values\n        assertEquals(Rgb(141, 144, 161), \"8D90A1\".rgb())\n    }\n\n    @Test\n    fun `color input to hsl`() {\n        // black\n        assertEquals(Hsl(0, 0, 0), \"000000\".hsl())\n        // white\n        assertEquals(Hsl(0, 0, 100), \"FFFFFFF\".hsl())\n        // random color with different values\n        assertEquals(Hsl(231, 10, 59), \"8D90A1\".hsl())\n        // some other random color with different values\n        assertEquals(Hsl(35, 88, 51), \"f09414\".hsl())\n        // some other random color with different values\n        assertEquals(Hsl(254, 46, 11), \"150f29\".hsl())\n    }\n}\n"
  },
  {
    "path": "namethatcolor/src/test/kotlin/il/co/galex/namethatcolor/core/manager/ColorNameFinderTest.kt",
    "content": "package il.co.galex.namethatcolor.core.manager\n\nimport il.co.galex.namethatcolor.core.model.HexColor\nimport org.junit.Assert.assertEquals\nimport org.junit.Test\n\nclass ColorNameFinderTest {\n\n    @Test\n    fun `find a color`() {\n        // black exact match\n        assertEquals(\"Black\", ColorNameFinder.findColor(HexColor(\"#000000\")).second.name)\n        // non exact match\n        assertEquals(\"Black Russian\", ColorNameFinder.findColor(HexColor(\"#000010\")).second.name)\n        // white exact match\n        assertEquals(\"White\", ColorNameFinder.findColor(HexColor(\"#FFFFFF\")).second.name)\n        // white with 3 letters only\n        assertEquals(\"White\", ColorNameFinder.findColor(HexColor(\"#FFF\")).second.name)\n    }\n}\n"
  },
  {
    "path": "namethatcolor/src/test/kotlin/il/co/galex/namethatcolor/core/model/HexColorTest.kt",
    "content": "package il.co.galex.namethatcolor.core.model\n\nimport il.co.galex.namethatcolor.core.util.toXmlName\nimport org.junit.Assert.assertEquals\nimport org.junit.Test\n\nclass HexColorTest {\n\n    @Test\n    fun `input color of 3 chars`() {\n        assertEquals(\"#3322DD\", HexColor(\"32D\").toString())\n    }\n\n    @Test\n    fun `input color of 3 chars with lowercase letters`() {\n        assertEquals(\"#3322DD\", HexColor(\"32d\").toString())\n    }\n\n    @Test\n    fun `input color of 3 chars with #`() {\n        assertEquals(\"#3322DD\", HexColor(\"#32D\").toString())\n    }\n\n    @Test\n    fun `input color of 3 chars with # and lowercase letters`() {\n        assertEquals(\"#DDDDDD\", HexColor(\"#ddd\").toString())\n    }\n\n    @Test\n    fun `input color of 3 chars with alpha`() {\n        assertEquals(\"#003322DD\", HexColor(\"032D\").toString())\n    }\n\n    @Test\n    fun `input color of 3 chars with alpha and #`() {\n        assertEquals(\"#AA3322DD\", HexColor(\"#A32D\").toString())\n    }\n\n    @Test\n    fun `input color of 6 chars`() {\n        assertEquals(\"#32DAE1\", HexColor(\"32DAE1\").toString())\n    }\n\n    @Test\n    fun `input color of 6 chars with #`() {\n        assertEquals(\"#123456\", HexColor(\"#123456\").toString())\n    }\n\n    @Test\n    fun `input color of 6 chars with alpha`() {\n        assertEquals(\"#A1B1C1D1\", HexColor(\"A1B1C1D1\").toString())\n    }\n\n    @Test\n    fun `input color of 6 chars with alpha and #`() {\n        assertEquals(\"#AA93214F\", HexColor(\"#AA93214F\").toString())\n    }\n\n    @Test\n    fun `alpha of 0 percent`() {\n        assertEquals(0, HexColor(\"#0931\").percentAlpha)\n    }\n\n    @Test\n    fun `alpha of 0%`() {\n        assertEquals(0, HexColor(\"#0%931\").percentAlpha)\n        assertEquals(\"#00993311\", HexColor(\"#0%931\").toString())\n    }\n\n    @Test\n    fun `alpha of 5 percent`() {\n        assertEquals(5, HexColor(\"#0D93214F\").percentAlpha)\n    }\n\n    @Test\n    fun `alpha of 5%`() {\n        assertEquals(5, HexColor(\"#5%93214F\").percentAlpha)\n        assertEquals(\"#0D93214F\", HexColor(\"#5%93214F\").toString())\n    }\n\n    @Test\n    fun `alpha of 25 percent`() {\n        assertEquals(25, HexColor(\"#4093214F\").percentAlpha)\n    }\n\n    @Test\n    fun `alpha of 25%`() {\n        assertEquals(25, HexColor(\"#25%93214F\").percentAlpha)\n        assertEquals(\"#4093214F\", HexColor(\"#25%93214F\").toString())\n    }\n\n    @Test\n    fun `alpha of 50 percent`() {\n        assertEquals(50, HexColor(\"#8093214F\").percentAlpha)\n    }\n\n    @Test\n    fun `alpha of 50%`() {\n        assertEquals(50, HexColor(\"#50%93214F\").percentAlpha)\n        assertEquals(\"#8093214F\", HexColor(\"#50%93214F\").toString())\n    }\n\n    @Test\n    fun `alpha of 75 percent`() {\n        assertEquals(75, HexColor(\"#BF93214F\").percentAlpha)\n    }\n\n    @Test\n    fun `alpha of 75%`() {\n        assertEquals(75, HexColor(\"#75%93214F\").percentAlpha)\n        assertEquals(\"#BF93214F\", HexColor(\"#75%93214F\").toString())\n    }\n\n    @Test\n    fun `alpha of 100 percent`() {\n        assertEquals(100, HexColor(\"#FF93214F\").percentAlpha)\n    }\n\n    @Test\n    fun `alpha of 100%`() {\n        assertEquals(100, HexColor(\"#100%93214F\").percentAlpha)\n        assertEquals(\"#FF93214F\", HexColor(\"#100%93214F\").toString())\n    }\n\n    @Test\n    fun `ignore default alpha value`() {\n        assertEquals(\"black\", \"black\".toXmlName(HexColor(\"000000\").percentAlpha))\n        assertEquals(\"black\", \"black\".toXmlName(HexColor(\"%000000\").percentAlpha))\n        assertEquals(\"black_alpha_100\", \"black\".toXmlName(HexColor(\"100%000000\").percentAlpha))\n        assertEquals(\"black_alpha_0\", \"black\".toXmlName(HexColor(\"0%000000\").percentAlpha))\n        assertEquals(\"black_alpha_10\", \"black\".toXmlName(HexColor(\"10%000000\").percentAlpha))\n    }\n\n    @Test(expected = IllegalArgumentException::class)\n    fun `invalid color input of 3 chars`() {\n        HexColor(\"#3ZD\")\n    }\n\n    @Test(expected = IllegalArgumentException::class)\n    fun `invalid alpha input of 3 chars`() {\n        HexColor(\"P30D\")\n    }\n}"
  },
  {
    "path": "settings.gradle",
    "content": "include 'namethatcolor'"
  }
]