import java.awt.*;
public class K 
 {
  static M parent;
  static Te te=M.te0;
  Color c;
  float h,s,v;
  float[] hsva=new float[3];
  int i,r,g,b,a;
  String kh,rh,gh,bh,ah;
  boolean hsv=true;
  public K()
   {
    c=new Color(0,233,0,255);
    c2all();
   }
  public K(K k)
   {
    r=k.r;
    g=k.g;
    b=k.b;
    a=k.a;
    h=k.h;
    s=k.s;
    v=k.v;
    c=new Color(r,g,b,a);
    i=a<<24 | r<<16 | g<<8 | b;
   }
  public K(Color c)
   {
    //System.out.println("Using c");
    this.c=c;
    c2all();
   }
  public K(int i) { si(i); }
  public K(int w,int x,int y,int a) { comm(w,x,y,a); }
  public K(int w,int x,int y) { comm(w,x,y,255); }
  public K(double w,double x,double y,double a) { comm(w,x,y,a); }
  public K(double w,double x,double y) { comm(w,x,y,255); }
  void comm(double w,double x,double y,double a)
   {
    this.a=(int)a;
    if(w<=255 &&(x>1 || y>1))
     {
      hsv=false;
      r=(int)w;
      g=(int)x;
      b=(int)y;
      checkrgb();
      rgb2all();
     }
    else
     {
      hsv=true;
      h=(float)w;
      s=(float)x;
      v=(float)y;
      checkhsv();
      hsv2all();
     }
   }
  void rgb2all()
   {
    c=new Color(r,g,b,a);
    hsva=Color.RGBtoHSB(r,g,b,hsva=new float[3]);
    h=hsva[0]*360;
    s=hsva[1];
    v=hsva[2];
    i=a<<24 | r<<16 | g<<8 | b;
    rh=tohex(r);
    gh=tohex(g);
    bh=tohex(b);
    ah=tohex(a);
    kh=rh+gh+bh;
   }
  void hsv2all()
   {
    while (h>360) h-=360;
    while (h<0) h+=360;
    c= Color.getHSBColor(h/360,s,v);
    r=c.getRed();
    g=c.getGreen();
    b=c.getBlue();
    c=new Color(r,g,b,a);
    i=a<<24 | r<<16 | g<<8 | b;
    rh=tohex(r);
    gh=tohex(g);
    bh=tohex(b);
    ah=tohex(a);
    kh=rh+gh+bh;
   }
  void c2all()
   {
    if(c==null) 
     {
      System.out.println("Null Color for c2all");
      return;
     }
    r=c.getRed();
    g=c.getGreen();
    b=c.getBlue();
    a=c.getAlpha();
    hsva=Color.RGBtoHSB(r,g,b,hsva=new float[3]);
    h=hsva[0]*360;
    s=hsva[1];
    v=hsva[2];
    i=a<<24 | r<<16 | g<<8 | b;
    rh=tohex(r);
    gh=tohex(g);
    bh=tohex(b);
    ah=tohex(a);
    kh=rh+gh+bh;
   }
  void checkrgb() 
   {
    r=r&0xff;
    g=g&0xff;
    b=b&0xff;
    a=a&0xff;
    //else if(b<1) b=1;
    i=a<<24 | r<<16 | g<<8 | b;
   }
  void checkhsv()
   {
    while(h>360) h -= 360;
    while(h<0) h+=360;
    if(s<0) s=0;
    if(s>=1) s=(float).999999;
    if(v<0) v=0;
    if(v>=1) v=(float).999999;
    a=a&0xff;
   }
  K is() { return is(1); }
  K is(double hi)
   {
    s+=hi;
    hsv2all();
    return this;
   }
  K iv() { return iv(1); }
  K iv(double hi)
   {
    v+=hi;
    hsv2all();
    return this;
   }
  K ih() { return ih(1); }
  K ih(double hi)
   {
    h+=hi;
    hsv2all();
    return this;
   }
  void sk(K nk)
   {
    r=nk.r;
    g=nk.g;
    b=nk.b;
    a=nk.a;
    h=nk.h;
    s=nk.s;
    v=nk.v;
    c=new Color(r,g,b,a);
    i=a<<24 | r<<16 | g<<8 | b;
   }
  void sh(double w)
   {
    h=(float)w;
    hsv2all(); 
   }
  void ss(double w)
   {
    s=(float)w;
    hsv2all();
   }
  void sv(double w)
   {
    v=(float)w;
    hsv2all();
   }
  void sa(double w)
   {
    a=(int)w;
    rgb2all();
   }
  void si(int j)
   {
    a=j&0xff000000;
    a>>>=24;
    r=j&0xff0000;
    r>>>=16;
    g=j&0xff00;
    g>>>=8;
    b=j&0xff;
    rgb2all();
   }
  void sr(double w)
   {
    r=(int)w;
    rgb2all();
   }
  void sg(double w)
   {
    g=(int)w;
    rgb2all();
   }
  void sb(double w)
   {
    b=(int)w;
    rgb2all();
   }
  Color darker(K w) { return w.c.darker(); }
  Color darker(Color w) { return w.darker(); }
  public void dofin()
   {
    try { finalize(); }
    catch (Throwable e) {}
   }
  public boolean eq(K kay)
   {
    if(h==kay.h && s==kay.s && v==kay.v && a== kay.a) return true;
    return false;
   }
  void ed(String name)
   {
    tta1(name+".k "+Te.Svo(this));
    tta1(name+".h "+Te.Svo(h));
    tta1(name+".s "+Te.Svo(s));
    tta1(name+".v "+Te.Svo(v));
    tta1(name+".r "+Te.Svo(r));
    tta1(name+".g "+Te.Svo(g));
    tta1(name+".b "+Te.Svo(b));
    tta1(name+".a "+Te.Svo(a));
    tta1(name+".i "+Te.Svo(i));
    tta1(name+".c "+Te.Svo(c));
   }
  static void tta1(String s) { parent.tta1(s); }
  static void tta(String s) { parent.tta(s); }
  static String tohex(double d)
   {
    return tohexa((int)(d/16))+tohexa((int)(d-16*(int)(d/16)));
   }
  static String tohexa(int i)
   {
    String s="";
    if(i<10) s=Te.Svo(i);  
    else if(i==10) s="a";
    else if(i==11) s="b";
    else if(i==12) s="c";
    else if(i==13) s="d";
    else if(i==14) s="e";
    else if(i==15) s="f";
    return s;
   }
  // static K avK(K k1,K k2,double havf,double savf,double vavf,double aavf) { }
  static boolean eq(K k1,K k2) { return eq(k1,k2,0,0,0,0); }
  static boolean eq(K k1,K k2,double dh,double ds,double dv,double da)
   {
    return eq(k1,k2,new K(dh,ds,dv,da)); 
   }
  static boolean eq(K k1,K k2,K k3) 
   {
    double dha=Math.abs(k1.h -k2.h);
    if(dha>180) dha-=180;
    if(dha>k3.h) return false;
    if(Math.abs(k1.s-k2.s)>k3.s) return false;
    if(Math.abs(k1.v-k2.v)>k3.v) return false;
    if(Math.abs(k1.a-k2.a)>k3.a) return false;
    return true;
   }
  static int ezmixi(K k1,K k2,int ki)
   {
    return k1.i;
   }
  static int mixi5(K ka,K kb,int kci)
   {
    K kc=new K(kci); // ka
    double mh=ka.h-kb.h+kc.h;
    while(mh<0) mh+=360;
    while(mh>360) mh-=360;
    double ms=ka.s-kb.s+kc.s;
    if(ms<0) ms=0;
    else if(ms>1) ms=1;
    double mv=ka.v-kb.v+kc.v;
    if(mv<0) mv=0;
    else if(mv>1) mv=1;
    K kr=new K(mh,ms,mv,kc.a);
    return kr.i;
   }
  static int oldmixi6(K ka,K kb,int kci)
   {
    K kc=new K(kci); // ka 
    double mh=ka.h-kb.h+kc.h;
    while(mh<0) mh+=360;
    while(mh>360) mh-=360;
    double ms=ka.s-kb.s+kc.s;
    if(ms<0) ms=0;
    if(ms>1) ms=1;
    double mv=ka.v-kb.v+kc.v;
    if(mv<0) mv=0;
    if(mv>1) mv=1;
    K kr=new K(mh,ms,mv,kc.a);
    return kr.i;
   }
  static int mixi6(K ka,K kb,int kci)
   {
    int a=(kci&0xff000000)>>24;
    int r=(kci&0xff0000)>>16;
    int g=(kci&0xff00)>>8;
    int b=kci&0xff;
    float[] hsva=Color.RGBtoHSB(r,g,b,hsva=new float[3]);
    hsva[0]*=360;
    double mh=ka.h-kb.h+hsva[0];
    while(mh<0) mh+=360;
    while(mh>360) mh-=360;
    double ms=ka.s-kb.s+hsva[1];
    if(ms<0) ms=0;
    else if(ms>1) ms=1;
    double mv=ka.v-kb.v+hsva[2];
    if(mv<0) mv=0;
    else if(mv>1) mv=1;
    K kr=new K(mh,ms,mv,a);
    return kr.i;
   }
  static int devmixi6(K ka,K kb,int kci)
   {
    int a=(kci&0xff000000)>>24;
    float[] fa=Color.RGBtoHSB((kci&0xff0000)>>16,(kci&0xff00)>>8,kci&0xff,fa=new float[3]);
    fa[0]*=360;
    float mh=(float)(ka.h-kb.h+fa[0]);
    while(mh<0) mh+=360;
    while(mh>360) mh-=360;
    float ms=(float)(ka.s-kb.s+fa[1]);
    if(ms<0) ms=0;
    else if(ms>1) ms=1;
    float mv=(float)(ka.v-kb.v+fa[2]);
    if(mv<0) mv=0;
    else if(mv>1) mv=1;
    Color c= Color.getHSBColor(mh/360,ms,mv);
    int r=c.getRed();
    int g=c.getGreen();
    int b=c.getBlue();
    return a<<24 | c.getRed()<<16 | c.getGreen()<<8 | c.getBlue();
    //K kr=new K(mh,ms,mv,a);
    //return kr.i;
   }
 }
