<?xml version="1.0"  encoding="UTF-8"?><pmd-cpd>
<duplication lines="20" tokens="132">
<file line="51" path="/Users/curta/ls-svn/chainsaw/src/main/java/org/apache/log4j/chainsaw/icons/LineIconFactory.java"/>
<file line="83" path="/Users/curta/ls-svn/chainsaw/src/main/java/org/apache/log4j/chainsaw/icons/LineIconFactory.java"/>
<codefragment>
<![CDATA[
  public static final Icon createCollapseIcon() {
      int size = 8;
      int xOffSet = 0;
      int yOffSet = 0;
    try {
      GraphicsEnvironment environment =
        GraphicsEnvironment.getLocalGraphicsEnvironment();
        BufferedImage image = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);
      Graphics2D g2D =
        environment.createGraphics(
          image);
        g2D.setBackground(new Color(0,0,0,0));
        g2D.clearRect(0,0,size,size);
        g2D.setStroke(new BasicStroke(1.5f));
        g2D.setRenderingHint(
          RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
        g2D.setColor(Color.black);
        g2D.drawLine(
           xOffSet, (size / 2) + yOffSet, size - xOffSet,
           (size / 2) + yOffSet);
]]>
</codefragment>
</duplication>
</pmd-cpd>