Click here to Skip to main content
15,885,810 members
Articles / Multimedia / Image Processing

Colorspaces and Conversions

Rate me:
Please Sign up or sign in to vote.
4.98/5 (32 votes)
24 Nov 2013GPL36 min read 134.6K   4.7K   62  
A library for colormodels and spaces, correct color-conversions and color-difference calculation.
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    
    Example:
    
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
                
    There are any number of "resheader" rows that contain simple 
    name/value pairs.
    
    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.
    
    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:
    
    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.
    
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <metadata name="MainToolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>300, 8</value>
  </metadata>
  <metadata name="ColorSelectDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>20, 8</value>
  </metadata>
  <metadata name="iccOpenDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>169, 8</value>
  </metadata>
  <data name="DescriptionBox.Text" xml:space="preserve">
    <value>GUI to convert between various color models

Range of channels:
  CIE XYZ: 	All: 0-1
  CIE Lab:  	L: 0-100 a/b: n.def.
  CIE Luv:  	L: 0-100 a/b: n.def.
  CIE Yxy:	 	All: 0-1
  LCH:		L: 0-100 C: n.def. H: 0-360
  RGB:		All: 0-1
  HSV:		H: 0-360 S/V: 0-1
  HSL:		H: 0-360 S/L: 0-1
  CMYK:		All: 0-100
  CMY:		All: 0-100
  YCbCr:		All: 0-1
  Gray:		All: 0-1
  ColorX:		All: n.def.
  DEF:		All: n.def.
  Bef:		B: 0-100 e/f: n.def.
  BCH:		B: 0-100 C: n.def. H: 0-360</value>
  </data>
  <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>39</value>
  </metadata>
  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        AAABAAEAQEAAAAEAGAAoMgAAFgAAACgAAABAAAAAgAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAD///////8sKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
        KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
        KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
        KysrKysrKyv///////////8oKCgSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIS
        EhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIS
        EhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIS
        EhISEhISEhISEhISEhISEhISEhIbGxv///89PT0fHx8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwuLi49PT0fHx8AAAAAAAAEAgMEAgMEAQME
        AQIEAgMFAgQEAgMEAgMEAgMDAQIEAgMEAgMEAgMFAgMFAgMDAQMBAQUBAgUAAQQBAgUBAgUCAwYBAgUB
        AgYBAgUAAQUAAAQAAQUAAQUBAgUBAgYBAgUBAgYAAgQBBAIAAwAAAwABBQEABAABBQIBBAEBBAEABAEB
        BAEABAEAAwAAAwABBAEBBQIABAEBBAEBBAEAAwEAAAMAAAMAAAMAAAAAAAAMDAwuLi49PT0fHx8AAAAE
        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
        wL1V49xQ3ddG1tFi+fpY8vZK5OhC3OA/2d1C3OBA2t41z9M/2Ntd29Pa5aj05ZvezoTQwHbv35XdzYPg
        0IbUxHrw4JbYyH7SwnjZyoDHzH5JpkQPgBollzAJexQDdQ4BbAUDcgsRgxwQgRoDcAkgkisLfBYYiiMU
        hh8klS8klC4DbAUCcw4KaScABVkCAngyMpoAAAQAAAAMDAwuLi49PT0fHx8AAAADBQSKt49zqHlil2hz
        qHllm2tmnW1zrn1ftICA2qRoxI5s0qRA0MpU7fFF3+Nb9flQ6u5K5Og61NhN5+ti+vpR0MfF0ZPYyX/c
        zILYyH7Wxnzby4HWxnzVxXvZyX/Tw3nNvXPu35XBxnc0kC0QgBkYiiMrnTYUhR4OfxkjlC0EdQ8FdxAN
        fhcMfBYEaAUUhh8YiSMCZgQEcQwVhiAjlTAbezkEFW0CA3pAQKcBAQUAAAAMDAwuLi49PT0fHx8AAAAD
        BgSHyJJisG9ltHNisXBVpGNYpmZ8yop5yIhZqWhKmVlnw4xF08xD3OBL5elB299N5+tO6Ow509cwys5F
        3uBp59/U4KLi04rGtmzMvHLayoDh0YfTw3nezoTn143WxnzVxXvLu3Gws2VRnD1Dnzw0kC5CnjxAnToq
        hyQmgyA0kC45lTMqhiQtiidDnz06lzUtii0EXRYlhEEObSsdfDsDSygAB2YCAnorK30AAAMAAAAMDAwu
        Li49PT0fHx8AAAADBgSFx5Bhr291xIN1xINSoWB5yId8y4ppuHdYp2ZtvXxct4FW5N1Z8vZC3OBc9vpV
        7/NA2t5Q6u5M5uo2z9NX1s2yvYDPwHfXx33MvHLfz4XXx33w4JbayoDQwHbTw3nr25HezoTSxnumqFm0
        umvL0ILX3I6/xXe2vG3Izn/L0ILJz4CmrF2jqVrP1IbT2IunrXoVJGISJHwaLIQfMYkXJ4QDA3kaGpY5
        OaEBAQQAAAAMDAwuLi49PT0fHx8AAAADBQOAwox7yoluvXx2xYRaqWhhsG9puHeAz45puHdquXltyJJV
        4tw919tb9flE3uI30dVP6e1Z8/dF3+NV7vJc2tLG0pTo2Y/Tw3nKunDKunDUxHrPv3XSwnjh0Yfi0ojY
        yH7dzYPQwHa9rmT36J7czYPl14369qvn2I705ZvdzoTIuW/v35XSwnjWxnzm147Juo8yKXsoIJAZEYEW
        Dn4fFocbE4MPB3ZSS6kBAQUAAAAMDAwuLi49PT0fHx8AAAAEBgSQ0pxsunpjsnFjsnFzwYF2xIRToWFu
        vHx+zIxhr3CL5bBZ5eBJ4uZU7fJK4+g40NVS6u9T7PFQ6O1A2N1KyMDX4qXg0YfIuG7g0IbWxnzk1Iri
        0oi0pFrPv3XXx33YyH7r25Hby4Hx4Zfx4ZfUxHrDs2nczILczILSwnjx4Zfby4Hg0Ibv35XQwHbdzIPN
        uISpfqyQYKOKWp+UZal3R4t6S4+UZairg7wFAwUAAAAMDAwuLi49PT0fHx8AAAADBgSFx5Fxv39ks3JZ
        qGdqs3mQv6B1noaUvKSVvaVvmIGFuKptyeNdxOdWveBbweRq0fNu1fhfxuhw1/ps0/R4zNy9wYfk1IvV
        xXvx4Zfw4JbWxnzZyX/VxXvHt23l1Yvl1YvUxHrx4ZfdzYPezoTg0IbOvnTn143VxXvNvXPPv3Xq2pDN
        vXPl1Yvj04ngz4bSu4arep6iaaKxeLKgZ6GtdK2YYJmqcaupeakFAwUAAAAMDAwuLi49PT0fHx8AAAAE
        BgSMzpdtvHtbqmlJl1h4poevU8fTV+62OdHbXvbVWPC+Q9zDUPDGVffCUvTLW/y3R+jEU/bSYf7JWfm0
        Q+TIaOTmxqLs25Lp2Y/OvnTg0Ibfz4XPv3Xk1IrezoTOvnTWxnzRwXfYyH7t3ZPm1ozn143OvnTs3JLZ
        yX/Xx33r25HIuG7Xx33IuG7t3ZPayoDaxI6da4+pcKmlbKWjaqOjaqOiaaKLUou3iLcFAwUAAAAMDAwu
        Li49PT0fHx8AAAADBQN+wIlvvXx3xoVsunqAqZDGSuDuTP3YNfXgPf3dOvrgPfzTMfHZNvbRL+7xT/3u
        S/3NK+rVM/H6YP/uTP3qX/TrxKPl1Ivr25HZyX/JuW/RwXfayoDr25Hg0IbXx33n143by4Ho2I7r25HX
        x33VxXvby4HXx33czILYyH7dzYPVxXvNvXPh0YfUxHrXx37fyJOseZ6fZp+qcaqOVY6gZ6Cob6iuda6/
        kL8FBAUAAAAMDAwuLi49PT0fHx8AAAADBQN4uoNmtHSC0ZBvvX15oYnQU+vaN/bhPf3cOPjhPf7GIuHq
        Rv3jP/7lQf3RLezlQf7VMfC6FtfoRP3SL+3QRNvctJTKuXHUxHrZyX/IuG7Swnji0ojk1Irj04nczILj
        04n56Z/87KLn143by4Hj04ni0oji0ojezoTp2Y/g0IbWxnzw4JbWxnzRwXfLu3LQuYSzgaWiaaLAh8CQ
        V5CfZp+UW5SrcquqeqoFAwUAAAAMDAwuLi49PT0fHx8AAAADBQN7vYeV5KNMm1pjsXF/p4/kZ/rbOPjR
        Le3XM/TgPP3rR/7cOPj5Vf7dOfjsSP3XM/LsSP3SLu35Vf7tSv3cUObRqYnbyoH46J7fz4Xn143k1IrJ
        uW/czILp2Y/ezoTw4Jbz45nWxnzWxnzczILIuG7ayoDm1oz77KLfz4Xx4Zfby4HVxXu4qF7Xx33Qv3bW
        v4rEkbaqcarAh8CcY5yuda6XXpePV4/DlMMGBAYAAAAMDAwuLi49PT0fHx8AAAADBQNytH5zwoFjsnFS
        oGB7o4zgY/nQLezqRv3ZNfboRP3fO/rkQP/cOPjnQ//iPv3wTP/dOfnrR/7mQv/oRf7eUunbs5TFtGzg
        0IbSwnjKunDk1Irh0Yfn143fz4Xt3ZPNvXPu3pTo2I6/r2XLu3HQwHbVxXv05Jri0ojZyX/fz4XVxXvd
        zYPWxnzczIK/rmXex5Kxf6Osc6yYX5ircqucY5yBSIGtdK2peakFAwUAAAAMDAwuLi49PT0fHx8AAAAD
        BQN9v4l3xoV2xYRhr2+KsprNUOjaN/fmQv/hPf3TL+/1Uf7nQ//mQv7jP//rR//jP/7VMfLqRv/hPf7m
        Q//rX/Xnv6Dn147by4HFtWvs3JLq2pDZyX/l1YvXx33o2I7ezoTayoDXx3347KLWx33s3JLPv3XNvXPj
        04nh0Yfq2pDUxHro2I7o2I7WxnzHt23q056gbpKPVo+ZYJmXXpercqunbqeqcaqcbJwEAgQAAAAMDAwu
        Li49PT0fHx8AAAADBQN2t4F1xINXpmVjsXGAqJHVWPDpRv7bN/faNvfXM/PiPv7qRv7PK+veOvroRP7L
        J+jRLe7gPPzLJ+jkQP7zZ/vft5ffzobj04nfz4Xr25Hr25Hj04nWxnzby4HCsmjk1IrZyX/p2Y/UxHrg
        0Ibi0ojVxXvczILezoT3553ZyX/m1ozl1YvYyH7l1YvQwHfcxZDCkLStdKy+hb6+hb6uda6yebKgZ6DC
        k8IGBAYAAAAMDAwuLi49PT0fHx8AAAADBQN+wImE0pFwv35YpmZ4oIjRVOziP/7RLe7lQf72Uv/iPv37
        V//7Wf7mQv/cOPnYNPXLJ+jOKurbN/jpRv74bPvetpbj0orp2Y/j04nLu3Hq2pDp2Y/fz4XRwXfPv3Xe
        zoTLu3HWxnzayoDn143t3ZPy4pjt3ZPo2I7m1ozby4HZyX/VxXvIuG7Csmjl1YvYwYyvfKGVXJWuda61
        fLWqcaqvdq+8g7y2hrYFAwUAAAAMDAwuLi49PT0fHx8AAAAEBgSLzZdks3JltHN7yYqMtJzIS+LhP/3V
        MfHcOPjtSf7ZNfbgPPzoRP/nQ/7RLe7ZNfblQf7pRf3JJebIJeXlWfDpwaL045r25pzy4pjWxnzayoDU
        xHrczILUxHrq2pDu3pTm1ozJuW/k1Ir05JrJuW/MvHLayoDOvnTh0YfSwnjBsWfHt23Xx33RwXfdzYTW
        v4qte5+0e7OhaKGfZp+7gru0e7S6gbqldaUEAwQAAAAMDAwuLi49PT0fHx8AAAADBQSBwo14x4ZtvHtg
        rm96oovRU+vRL+7tSf3iPv/XM/PnQ//kQP/ZNfbrR//hPf3XM/ToRP/lQf7FIeLdOvroW/LlvJ3ezYXg
        z4bu3ZT045vZyH/It2/Yx37cy4Lv3pXk1Yzg0Yjg0oji04nXyH7ezoXm1ozfz4Xq2pHVxXzdzYPczIPo
        147WxnzVxXvq2ZHbxZCndJmZYJidZJ2wd7Cob6iRWJGtdK2+j74FBAUAAAAMDAwuLi49PT0fHx8AAAAE
        BgSP0Zp3xYV4x4ZzwYGMtJ3LTuXOLOrWMvPfO/zwTP/mQv/cOPjsSP/gPPvsSP/uSv7cOPjaNvbfO/zb
        OPjhUO3anqPetZbXsJDOpobkvJzUrI3Xr5DpwaHYsZHOsI2/zJSht3qxyIu60ZPE1JnazJbiy5bcxZDX
        wIvs1Z/jzJfo0ZvKs37RuoTTvIfkzJjQtJC0gamhaKGOVY6bYpuiaaKgZ6Crc6ucbZwEAgQAAAAMDAwu
        Li49PT0fHx8AAAAEBgSLzZdpt3disXBsunqNtZ25PNP5V/zfO/rdOfrpRf/4VP7MKOfyTv7xTf/pRf/f
        O/roRP/dOfjgPP3fO/zmR/3gUOz1afreUufZTeTpXfPVSeDTR93xZfrfVOvEbOk/xNc88+8g2tUo4NtI
        292Viaa6ia24hqqvfaGpd5ucao60gqbLmb2pdpvLmb3Cj7SxfqWgaJ6nbqelbKW+hb7FjMWtdK2mbaa6
        i7oFBAUAAAAMDAwuLi49PT0fHx8AAAADBgSExo9wvn53xoWM2ZqFrZXiZfnrSP/1Uf/hPf3jP//tSf7m
        Qv30UP7iPv3vS//cOPjnQ//6V/7RLe3bN/jeO/n1Uv73U/70UfzSLuz7WP7fPPrkQP37WP/aOfbBXP41
        1fkG4+oc+/wC2+MMvc19caKeZp+wd7ClbaWiaaKaYZmvdq6xeLDDisOwd7CxeLCyebKlbKW2fbalbKW2
        fbaMU4yfZp+nbqezg7MFAwUAAAAMDAwuLi49PT0fHx8AAAAEBgSKy5d4xodntnZksnN2noflafnXNfTo
        RP7WM/PuSv29GtnIJOXMKOjgPPzXM/TnQ//rR//wTP/lQf7gPPz3U/7cOPjUMPHBHd3ZNfbpRf/rR/7T
        L+/tSf7qSP6+Wfwoye4C3uca+v0D3OQj1eWOgrOgaKGvdq+nbqehaKGnbqe9hL2ka6StdK2zerOyebKa
        YZqyebKlbKWnbqexeLGhaKG5gLm1fLWufq4FAwUAAAAMDAwuLi49PT0fHx8AAAACBANun4xYkn1gmoR4
        sZxwiZW2ReXMO/zMO/26KOvZR/3AL/G4JeXjQv3yTv/dOfjwTP/fO/vjP//uSv/ZNfbQLOzPK+zYNPXS
        Lu/YNPXnQ//oRP/dOfjiPv7VM/KfOdxA4fwD3uYL6fIq+/0o2eqmm8yncamVXJW7g7yeZp+iaqOze7S0
        fLWgZ6G0fLWmbqeiaaOtdK6pcKmaYZq+hb6tdK2uda6sc6y/kL8FBAUAAAAMDAwuLi49PT0fHx8AAAAC
        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
        AQAAAAAAAAAMDAwuLi49PT0fHx8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwuLi7///8uLi4fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f
        Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f
        Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f
        Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8lJSX///////////89PT09PT09PT09PT09PT09
        PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
        PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
        PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT3///////8AAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
</value>
  </data>
</root>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The GNU General Public License (GPLv3)


Written By
Software Developer
Austria Austria
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions