void gotData(Object key0, String error, byte[] data) {
        String key = (String)key0;
        ImageIcon result = blank;
        if (error == null) {       
            try {
                BufferedImage img = ImageIO.read(new ByteArrayInputStream(data));
                int s = size * scale;
                if (img.getWidth() == s && img.getHeight() == s) {
                    result = toImageIcon(img);
                } else {
                    error = "Wrong Size";
                }     
            } catch (IOException err) {
                error = "Image Read Error: " + err.getMessage();
            }    
        }        
        HashSet<Callback> set;
        synchronized (guard) {
            iconMap.put(key, result);
            set = cbMap.remove(key);
        }
        if (set != null) {
            //System.out.println(key0 + ":"  + set.size());
            for (Callback x: set) {
                x.got(key, error, result);
            }
        }        
    }