<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://jogamp.org/bugzilla/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.2"
          urlbase="https://jogamp.org/bugzilla/"
          
          maintainer="sgothel@jausoft.com"
>

    <bug>
          <bug_id>128</bug_id>
          
          <creation_ts>2005-01-07 05:26:18 +0100</creation_ts>
          <short_desc>Two Animator threads controlling two GLCanvas objects deadlock, or one of the threads starve.</short_desc>
          <delta_ts>2010-03-24 07:47:15 +0100</delta_ts>
          <reporter_accessible>0</reporter_accessible>
          <cclist_accessible>0</cclist_accessible>
          <classification_id>3</classification_id>
          <classification>JogAmp</classification>
          <product>Jogl</product>
          <component>core</component>
          <version>1</version>
          <rep_platform>All</rep_platform>
          <op_sys>windows</op_sys>
          <bug_status>VERIFIED</bug_status>
          <resolution>WORKSFORME</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sven Gothel">sgothel</reporter>
          <assigned_to name="Sven Gothel">sgothel</assigned_to>
          
          
          <cf_type>DEFECT</cf_type>
          <cf_scm_refs></cf_scm_refs>
          <cf_workaround>---</cf_workaround>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>144</commentid>
    <comment_count>0</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2010-03-24 07:47:15 +0100</bug_when>
    <thetext>


---- Reported by direwolf 2005-01-07 17:26:18 ----

Problem:  
It appears that two Animator threads controlling two GLCanvas objects deadlock,
or one of the threads starve.

Description:
This problem occurs when a single JFrame contains two JPanel&apos;s that each contain
a GLCanvas controled by an Animator thread.  Three behaviors have been observed:
 Both threads will deadlock; One thread will run and the other will starve; Both
threads run.

When both threads run, no exceptions are thrown and both panels will render with
animation, but other bugs crop up.  I&apos;ve noticed that JMenuItem won&apos;t render
until it is highlighted.

When one of the animation threads is starved, the following exception is thrown:

Exception in thread &quot;Thread-3&quot; java.lang.NullPointerException
    at
net.java.games.jogl.impl.windows.WindowsGLContextFactory.getDummyGL(WindowsGLContextFactory.java:117)
    at
net.java.games.jogl.impl.windows.WindowsGLContext.choosePixelFormatAndCreateContext(WindowsGLContext.java:279)
    at
net.java.games.jogl.impl.windows.WindowsOnscreenGLContext.create(WindowsOnscreenGLContext.java:211)
    at
net.java.games.jogl.impl.windows.WindowsGLContext.makeCurrent(WindowsGLContext.java:135)
    at
net.java.games.jogl.impl.windows.WindowsOnscreenGLContext.makeCurrent(WindowsOnscreenGLContext.java:110)
    at net.java.games.jogl.impl.GLContext.invokeGL(GLContext.java:250)
    at net.java.games.jogl.GLCanvas.displayImpl(GLCanvas.java:208)
    at net.java.games.jogl.GLCanvas.display(GLCanvas.java:75)
    at net.java.games.jogl.Animator$1.run(Animator.java:107)
    at java.lang.Thread.run(Thread.java:595)


Code Example:
import net.java.games.jogl.*;
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
 
import javax.swing.*;
import javax.swing.event.*;
 
public class Main extends javax.swing.JFrame {
    private JMenuBar menubar;
    private JMenu fileMenu;
    private JMenuItem fileExit;
    private JPanel leftPanel, rightPanel;
    private JSplitPane splitPane;
    private TestPanel panel1, panel2;
     
    public static void main(String args[]) {
  EventQueue.invokeLater(new Runnable() {
  public void run() {
      new Main().setVisible(true);
  }
   });
    }
     
    public Main() {
        GLCapabilities cap=new GLCapabilities();
        cap.setHardwareAccelerated(true);
        cap.setDoubleBuffered(false);

   // This call ensures that the JMenuBar will render over the GLCanvas.
   JPopupMenu.setDefaultLightWeightPopupEnabled(false);
   
   // Create components.
   splitPane = new JSplitPane();
   leftPanel = new JPanel();
   rightPanel = new JPanel();
   menubar = new JMenuBar();
   fileMenu = new JMenu();
   fileExit = new JMenuItem();
   
   setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
   leftPanel.setLayout(new BorderLayout());    
   leftPanel.setPreferredSize(new Dimension(400, 600));
   splitPane.setLeftComponent(leftPanel);    
   rightPanel.setLayout(new BorderLayout());    
   splitPane.setRightComponent(rightPanel);
   
   getContentPane().add(splitPane, BorderLayout.CENTER);
   
   fileMenu.setText(&quot;File&quot;);
   fileExit.setText(&quot;Exit&quot;);
   fileExit.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent evt) {
      fileExitActionPerformed(evt);
  }
   });
   
   fileMenu.add(fileExit);    
   menubar.add(fileMenu);    
   setJMenuBar(menubar);
       
   panel1 = new TestPanel();
   panel2 = new TestPanel();
   leftPanel.add(panel1, BorderLayout.CENTER);    
   rightPanel.add(panel2, BorderLayout.CENTER);
   
   pack();
   
   setSize(800, 600);  
   
   // Start the animation on panel 1.
   panel1.start();
 
/******************************************************
// When we attempt to start the animation on panel 2, the
// program will either lock up or the program will run but  
// panel2 won&apos;t render.  It&apos;s clear that the two animator
// threads are competing for some resource, causing a  
// deadlock or causing the second thread to starve.
 ******************************************************/
   panel2.start();
 
    }
     
    private void fileExitActionPerformed(ActionEvent evt) {            
   System.exit(0);
    }
     
    public class TestPanel extends JPanel {
   GLCanvas canvas;
   Animator animator;
   
   public TestPanel() {
  // The JPanel must use the Border layout manager.
  setLayout(new java.awt.BorderLayout());
   
  // Create the GLCanvas.
  canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities());
  canvas.addGLEventListener(new TestRenderer());
   
  // Create an animator thread for the canvas.
  animator = new Animator(canvas);
   
  // Add the canvas to the center of the JPanel.
  add(canvas);
   
  // We need to create a Dimension object for the JPanel minimum size to fix a
GLCanvas resize bug.
  // The GLCanvas normally won&apos;t recieve resize events that shrink a JPanel
controled by a JSplitPane.  
  setMinimumSize(new Dimension());    
   }
   
   public void start(){
  animator.start();
   }
   
   public void stop(){
  animator.stop();
   }
   
   class TestRenderer implements GLEventListener {
  private GL gl;
  private GLDrawable gldrawable;
  float angle = 0;
   
  public void init(GLDrawable drawable) {    
      gl = drawable.getGL();
      this.gldrawable = drawable;
  }
   
  public void reshape(GLDrawable drawable, int x, int y, int width, int height) {
      gl. glViewport(0, 0, width, height);
  }
   
  public void display(GLDrawable drawable) {
      gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
       
      gl.glRotatef(angle, 0f, 0f, 1f);
      angle += 2;
       
      gl.glBegin(GL.GL_POLYGON);
      gl.glVertex2f(-0.5f, -0.5f);
      gl.glVertex2f(-0.5f, 0.5f);
      gl.glVertex2f(0.5f, 0.5f);
      gl.glVertex2f(0.5f, -0.5f);
      gl.glEnd();
  }
   
  public void displayChanged(GLDrawable drawable, boolean modeChanged, boolean
deviceChanged) {}
   }
    }
}



---- Additional Comments From direwolf 2005-01-07 19:48:02 ----

Created an attachment
Example program which renders two rotating squares in two JFrames contained in a JSplitPane.




---- Additional Comments From direwolf 2005-01-08 03:38:00 ----

Created an attachment
A better example.  This one creates two JSplitFrames and three JPanels.  The animator threads are started when the user selects the Test/Start All menu item.  Sometimes it works, sometimes it doesn&apos;t.




---- Additional Comments From kbr 2005-04-30 07:46:25 ----

Created an attachment
Working version of test case




---- Additional Comments From kbr 2005-04-30 07:50:07 ----

I can&apos;t reproduce any deadlock with JOGL 1.1 b10 but can see the other reported
behavior like the menus not repainting. The latter appears to be due solely to
the CPU being starved. Creating a custom animation thread and drawing the three
canvases in turn works, and has the added side effect that the start and stop
menu items work all the time and don&apos;t throw any exceptions.




--- Bug imported by sgothel@jausoft.com 2010-03-24 07:47 EDT  ---

This bug was previously known as _bug_ 128 at https://jogl.dev.java.net/bugs/show_bug.cgi?id=128
Imported an attachment (id=33)
Imported an attachment (id=34)
Imported an attachment (id=35)

The original submitter of attachment 33 is unknown.
   Reassigning to the person who moved it here: sgothel@jausoft.com.
The original submitter of attachment 34 is unknown.
   Reassigning to the person who moved it here: sgothel@jausoft.com.
The original submitter of attachment 35 is unknown.
   Reassigning to the person who moved it here: sgothel@jausoft.com.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>33</attachid>
            <date>2005-01-07 19:48:00 +0100</date>
            <delta_ts>2005-01-07 19:48:00 +0100</delta_ts>
            <desc>Example program which renders two rotating squares in two JFrames contained in a JSplitPane.</desc>
            <filename>Main.java</filename>
            <type>text/plain</type>
            <size>5701</size>
            <attacher name="Sven Gothel">sgothel</attacher>
            
              <data encoding="base64">cGFja2FnZSBqb2dsc3dpbmd0ZXN0NTsKCmltcG9ydCBuZXQuamF2YS5nYW1lcy5qb2dsLio7Cmlt
cG9ydCBqYXZhLmF3dC4qOwppbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKaW1wb3J0IGphdmEuYmVh
bnMuKjsKCmltcG9ydCBqYXZheC5zd2luZy4qOwppbXBvcnQgamF2YXguc3dpbmcuZXZlbnQuKjsK
CnB1YmxpYyBjbGFzcyBNYWluIGV4dGVuZHMgamF2YXguc3dpbmcuSkZyYW1lIHsKICAgIHByaXZh
dGUgSk1lbnVCYXIgbWVudWJhcjsKICAgIHByaXZhdGUgSk1lbnUgZmlsZU1lbnU7CiAgICBwcml2
YXRlIEpNZW51SXRlbSBmaWxlRXhpdCwgZmlsZU9wZW4sIGZpbGVDbG9zZSwgZmlsZVNhdmUsIGZp
bGVTYXZlQXM7CiAgICBwcml2YXRlIEpQYW5lbCBsZWZ0UGFuZWwsIHJpZ2h0UGFuZWw7CiAgICBw
cml2YXRlIEpTcGxpdFBhbmUgc3BsaXRQYW5lOwogICAgcHJpdmF0ZSBUZXN0UGFuZWwgcGFuZWwx
LCBwYW5lbDI7CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10p
IHsKICAgICAgICAgICAgRXZlbnRRdWV1ZS5pbnZva2VMYXRlcihuZXcgUnVubmFibGUoKSB7CiAg
ICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgICAgICAgIG5ldyBNYWluKCku
c2V0VmlzaWJsZSh0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQogICAgCiAg
ICBwdWJsaWMgTWFpbigpIHsKICAgICAgICAvL0dMQ2FwYWJpbGl0aWVzIGNhcD1uZXcgR0xDYXBh
YmlsaXRpZXMoKTsKICAgICAgICAvL2NhcC5zZXRIYXJkd2FyZUFjY2VsZXJhdGVkKHRydWUpOwog
ICAgICAgIC8vY2FwLnNldERvdWJsZUJ1ZmZlcmVkKGZhbHNlKTsKICAgICAgICAKICAgICAgICAv
LyBUaGlzIGNhbGwgZW5zdXJlcyB0aGF0IHRoZSBKTWVudUJhciB3aWxsIHJlbmRlciBvdmVyIHRo
ZSBHTENhbnZhcy4KICAgICAgICBKUG9wdXBNZW51LnNldERlZmF1bHRMaWdodFdlaWdodFBvcHVw
RW5hYmxlZChmYWxzZSk7CiAgICAgICAgCiAgICAgICAgLy8gQ3JlYXRlIGNvbXBvbmVudHMuCiAg
ICAgICAgc3BsaXRQYW5lID0gbmV3IEpTcGxpdFBhbmUoKTsKICAgICAgICBsZWZ0UGFuZWwgPSBu
ZXcgSlBhbmVsKCk7CiAgICAgICAgcmlnaHRQYW5lbCA9IG5ldyBKUGFuZWwoKTsKICAgICAgICBt
ZW51YmFyID0gbmV3IEpNZW51QmFyKCk7CiAgICAgICAgZmlsZU1lbnUgPSBuZXcgSk1lbnUoKTsK
ICAgICAgICBmaWxlRXhpdCA9IG5ldyBKTWVudUl0ZW0oKTsKICAgICAgICAvL2ZpbGVPcGVuID0g
bmV3IEpNZW51SXRlbSgpOwogICAgICAgIC8vZmlsZUNsb3NlID0gbmV3IEpNZW51SXRlbSgpOwog
ICAgICAgIC8vZmlsZVNhdmUgPSBuZXcgSk1lbnVJdGVtKCk7CiAgICAgICAgLy9maWxlU2F2ZUFz
ID0gbmV3IEpNZW51SXRlbSgpOwogICAgICAgIAogICAgICAgIHNldERlZmF1bHRDbG9zZU9wZXJh
dGlvbihXaW5kb3dDb25zdGFudHMuRVhJVF9PTl9DTE9TRSk7CiAgICAgICAgbGVmdFBhbmVsLnNl
dExheW91dChuZXcgQm9yZGVyTGF5b3V0KCkpOyAgICAgICAgCiAgICAgICAgbGVmdFBhbmVsLnNl
dFByZWZlcnJlZFNpemUobmV3IERpbWVuc2lvbig0MDAsIDYwMCkpOwogICAgICAgIHNwbGl0UGFu
ZS5zZXRMZWZ0Q29tcG9uZW50KGxlZnRQYW5lbCk7ICAgICAgICAKICAgICAgICByaWdodFBhbmVs
LnNldExheW91dChuZXcgQm9yZGVyTGF5b3V0KCkpOyAgICAgICAgCiAgICAgICAgc3BsaXRQYW5l
LnNldFJpZ2h0Q29tcG9uZW50KHJpZ2h0UGFuZWwpOwogICAgICAgIAogICAgICAgIGdldENvbnRl
bnRQYW5lKCkuYWRkKHNwbGl0UGFuZSwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CiAgICAgICAgCiAg
ICAgICAgZmlsZU1lbnUuc2V0VGV4dCgiRmlsZSIpOwogICAgICAgIGZpbGVFeGl0LnNldFRleHQo
IkV4aXQiKTsKICAgICAgICBmaWxlRXhpdC5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlz
dGVuZXIoKSB7CiAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25F
dmVudCBldnQpIHsKICAgICAgICAgICAgICAgIGZpbGVFeGl0QWN0aW9uUGVyZm9ybWVkKGV2dCk7
CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAvL2ZpbGVPcGVuLnNldFRleHQoIk9w
ZW4iKTsKICAgICAgICAvL2ZpbGVDbG9zZS5zZXRUZXh0KCJDbG9zZSIpOwogICAgICAgIC8vZmls
ZVNhdmUuc2V0VGV4dCgiU2F2ZSIpOwogICAgICAgIC8vZmlsZVNhdmVBcy5zZXRUZXh0KCJTYXZl
IEFzIik7CiAgICAgICAgCiAgICAgICAgLy9maWxlTWVudS5hZGQoZmlsZU9wZW4pOyAgICAgICAg
CiAgICAgICAgLy9maWxlTWVudS5hZGQoZmlsZUNsb3NlKTsgICAgICAgIAogICAgICAgIC8vZmls
ZU1lbnUuYWRkKGZpbGVTYXZlKTsgICAgICAgIAogICAgICAgIC8vZmlsZU1lbnUuYWRkKGZpbGVT
YXZlQXMpOyAgICAgICAgCiAgICAgICAgZmlsZU1lbnUuYWRkKGZpbGVFeGl0KTsgICAgICAgIAog
ICAgICAgIG1lbnViYXIuYWRkKGZpbGVNZW51KTsgICAgICAgIAogICAgICAgIHNldEpNZW51QmFy
KG1lbnViYXIpOwogICAgICAgICAgICAgICAgCiAgICAgICAgcGFuZWwxID0gbmV3IFRlc3RQYW5l
bCgpOwogICAgICAgIHBhbmVsMiA9IG5ldyBUZXN0UGFuZWwoKTsKICAgICAgICBsZWZ0UGFuZWwu
YWRkKHBhbmVsMSwgQm9yZGVyTGF5b3V0LkNFTlRFUik7ICAgIAogICAgICAgIHJpZ2h0UGFuZWwu
YWRkKHBhbmVsMiwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CiAgICAgICAgCiAgICAgICAgcGFjaygp
OwogICAgICAgIAogICAgICAgIHNldFNpemUoODAwLCA2MDApOyAgCiAgICAgICAgCiAgICAgICAg
Ly8gU3RhcnQgdGhlIGFuaW1hdGlvbiBvbiBwYW5lbCAxLgogICAgICAgIHBhbmVsMS5zdGFydCgp
OwogICAgICAgIAovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqCi8vIFdoZW4gd2UgYXR0ZW1wdCB0byBzdGFydCB0aGUgYW5pbWF0aW9uIG9uIHBh
bmVsIDIsIHRoZQovLyBwcm9ncmFtIHdpbGwgZWl0aGVyIGxvY2sgdXAgb3IgdGhlIHByb2dyYW0g
d2lsbCBydW4gYnV0IAovLyBwYW5lbDIgd29uJ3QgcmVuZGVyLiAgSXQncyBjbGVhciB0aGF0IHRo
ZSB0d28gYW5pbWF0b3IKLy8gdGhyZWFkcyBhcmUgY29tcGV0aW5nIGZvciBzb21lIHJlc291cmNl
LCBjYXVzaW5nIGEgCi8vIGRlYWRsb2NrIG9yIGNhdXNpbmcgdGhlIHNlY29uZCB0aHJlYWQgdG8g
c3RhcnZlLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLwogICAgICAgIHBhbmVsMi5zdGFydCgpOwogICAgfQogICAgCiAgICBwcml2YXRlIHZv
aWQgZmlsZUV4aXRBY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXZ0KSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKICAg
IH0KICAgIAogICAgcHVibGljIGNsYXNzIFRlc3RQYW5lbCBleHRlbmRzIEpQYW5lbCB7CiAgICAg
ICAgR0xDYW52YXMgY2FudmFzOwogICAgICAgIEFuaW1hdG9yIGFuaW1hdG9yOwogICAgICAgIAog
ICAgICAgIHB1YmxpYyBUZXN0UGFuZWwoKSB7CiAgICAgICAgICAgIC8vIFRoZSBKUGFuZWwgbXVz
dCB1c2UgdGhlIEJvcmRlciBsYXlvdXQgbWFuYWdlci4KICAgICAgICAgICAgc2V0TGF5b3V0KG5l
dyBqYXZhLmF3dC5Cb3JkZXJMYXlvdXQoKSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBD
cmVhdGUgdGhlIEdMQ2FudmFzLgogICAgICAgICAgICBjYW52YXMgPSBHTERyYXdhYmxlRmFjdG9y
eS5nZXRGYWN0b3J5KCkuY3JlYXRlR0xDYW52YXMobmV3IEdMQ2FwYWJpbGl0aWVzKCkpOwogICAg
ICAgICAgICBjYW52YXMuYWRkR0xFdmVudExpc3RlbmVyKG5ldyBUZXN0UmVuZGVyZXIoKSk7CiAg
ICAgICAgICAgIAogICAgICAgICAgICAvLyBDcmVhdGUgYW4gYW5pbWF0b3IgdGhyZWFkIGZvciB0
aGUgY2FudmFzLgogICAgICAgICAgICBhbmltYXRvciA9IG5ldyBBbmltYXRvcihjYW52YXMpOwog
ICAgICAgICAgICAKICAgICAgICAgICAgLy8gQWRkIHRoZSBjYW52YXMgdG8gdGhlIGNlbnRlciBv
ZiB0aGUgSlBhbmVsLgogICAgICAgICAgICBhZGQoY2FudmFzKTsKICAgICAgICAgICAgCiAgICAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gY3JlYXRlIGEgRGltZW5zaW9uIG9iamVjdCBmb3IgdGhlIEpQ
YW5lbCBtaW5pbXVtIHNpemUgdG8gZml4IGEgR0xDYW52YXMgcmVzaXplIGJ1Zy4KICAgICAgICAg
ICAgLy8gVGhlIEdMQ2FudmFzIG5vcm1hbGx5IHdvbid0IHJlY2lldmUgcmVzaXplIGV2ZW50cyB0
aGF0IHNocmluayBhIEpQYW5lbCBjb250cm9sZWQgYnkgYSBKU3BsaXRQYW5lLiAgCiAgICAgICAg
ICAgIHNldE1pbmltdW1TaXplKG5ldyBEaW1lbnNpb24oKSk7ICAgICAgICAgICAgIAogICAgICAg
IH0KICAgICAgICAKICAgICAgICBwdWJsaWMgdm9pZCBzdGFydCgpewogICAgICAgICAgICBhbmlt
YXRvci5zdGFydCgpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBwdWJsaWMgdm9pZCBzdG9w
KCl7CiAgICAgICAgICAgIGFuaW1hdG9yLnN0b3AoKTsKICAgICAgICB9CiAgICAgICAgICAgICAg
ICAKICAgICAgICBjbGFzcyBUZXN0UmVuZGVyZXIgaW1wbGVtZW50cyBHTEV2ZW50TGlzdGVuZXIg
ewogICAgICAgICAgICBwcml2YXRlIEdMIGdsOwogICAgICAgICAgICBwcml2YXRlIEdMRHJhd2Fi
bGUgZ2xkcmF3YWJsZTsKICAgICAgICAgICAgZmxvYXQgYW5nbGUgPSAwOwogICAgICAgICAgICAK
ICAgICAgICAgICAgcHVibGljIHZvaWQgaW5pdChHTERyYXdhYmxlIGRyYXdhYmxlKSB7ICAgICAg
ICAKICAgICAgICAgICAgICAgIGdsID0gZHJhd2FibGUuZ2V0R0woKTsKICAgICAgICAgICAgICAg
IHRoaXMuZ2xkcmF3YWJsZSA9IGRyYXdhYmxlOyAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
fQogICAgICAgICAgICAKICAgICAgICAgICAgcHVibGljIHZvaWQgcmVzaGFwZShHTERyYXdhYmxl
IGRyYXdhYmxlLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkgewogICAgICAg
ICAgICAgICAgZ2wuIGdsVmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRpc3BsYXkoR0xEcmF3YWJs
ZSBkcmF3YWJsZSkgewogICAgICAgICAgICAgICAgZ2wuZ2xDbGVhcihHTC5HTF9DT0xPUl9CVUZG
RVJfQklUIHwgR0wuR0xfREVQVEhfQlVGRkVSX0JJVCk7CiAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgIGdsLmdsUm90YXRlZiguMWYsIDBmLCAwZiwgMWYpOwogICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICBnbC5nbEJlZ2luKEdMLkdMX1BPTFlHT04pOwogICAgICAgICAgICAg
ICAgZ2wuZ2xWZXJ0ZXgyZigtMC41ZiwgLTAuNWYpOwogICAgICAgICAgICAgICAgZ2wuZ2xWZXJ0
ZXgyZigtMC41ZiwgMC41Zik7CiAgICAgICAgICAgICAgICBnbC5nbFZlcnRleDJmKDAuNWYsIDAu
NWYpOwogICAgICAgICAgICAgICAgZ2wuZ2xWZXJ0ZXgyZigwLjVmLCAtMC41Zik7CiAgICAgICAg
ICAgICAgICBnbC5nbEVuZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAg
ICBwdWJsaWMgdm9pZCBkaXNwbGF5Q2hhbmdlZChHTERyYXdhYmxlIGRyYXdhYmxlLCBib29sZWFu
IG1vZGVDaGFuZ2VkLCBib29sZWFuIGRldmljZUNoYW5nZWQpIHt9CiAgICAgICAgfQogICAgfQp9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>34</attachid>
            <date>2005-01-08 03:38:00 +0100</date>
            <delta_ts>2005-01-08 03:38:00 +0100</delta_ts>
            <desc>A better example.  This one creates two JSplitFrames and three JPanels.  The animator threads are started when the user selects the Test/Start All menu item.  Sometimes it works, sometimes it doesn&apos;t.</desc>
            <filename>Main.java</filename>
            <type>text/plain</type>
            <size>6710</size>
            <attacher name="Sven Gothel">sgothel</attacher>
            
              <data encoding="base64">cGFja2FnZSBqb2dsc3dpbmd0ZXN0NTsKCmltcG9ydCBuZXQuamF2YS5nYW1lcy5qb2dsLio7Cmlt
cG9ydCBqYXZhLmF3dC4qOwppbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKaW1wb3J0IGphdmEuYmVh
bnMuKjsKaW1wb3J0IGphdmF4LnN3aW5nLio7CmltcG9ydCBqYXZheC5zd2luZy5ldmVudC4qOwoK
cHVibGljIGNsYXNzIE1haW4gZXh0ZW5kcyBKRnJhbWUgewogICAgcHJpdmF0ZSBKTWVudUJhciBt
ZW51YmFyOwogICAgcHJpdmF0ZSBKTWVudSBmaWxlTWVudSwgdGVzdE1lbnU7CiAgICBwcml2YXRl
IEpNZW51SXRlbSBmaWxlRXhpdDsKICAgIHByaXZhdGUgSk1lbnVJdGVtIHRlc3RTdGFydExlZnQs
IHRlc3RTdGFydFJpZ2h0OwogICAgcHJpdmF0ZSBKTWVudUl0ZW0gdGVzdFN0b3BMZWZ0LCB0ZXN0
U3RvcFJpZ2h0OwogICAgcHJpdmF0ZSBKTWVudUl0ZW0gdGVzdFN0YXJ0QWxsOwogICAgcHJpdmF0
ZSBKU3BsaXRQYW5lIHZlcnRpY2FsU3BsaXRQYW5lOwogICAgcHJpdmF0ZSBKU3BsaXRQYW5lIGhv
cml6b250YWxTcGxpdFBhbmU7CiAgICBwcml2YXRlIFRlc3RQYW5lbCBsZWZ0UGFuZWwsIHJpZ2h0
UGFuZWwsIGJvdHRvbVBhbmVsOwogICAgCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJp
bmcgYXJnc1tdKSB7CiAgICAgICAgICAgIEV2ZW50UXVldWUuaW52b2tlTGF0ZXIobmV3IFJ1bm5h
YmxlKCkgewogICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICAgICAgICAgICBu
ZXcgTWFpbigpLnNldFZpc2libGUodHJ1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAg
IH0KICAgIAogICAgcHVibGljIE1haW4oKSB7ICAgICAgICAKICAgICAgICAvLyBUaGlzIGNhbGwg
ZW5zdXJlcyB0aGF0IHRoZSBKTWVudUJhciB3aWxsIHJlbmRlciBvdmVyIHRoZSBHTENhbnZhcy4K
ICAgICAgICBKUG9wdXBNZW51LnNldERlZmF1bHRMaWdodFdlaWdodFBvcHVwRW5hYmxlZChmYWxz
ZSk7CiAgICAgICAgCiAgICAgICAgLy8gQ3JlYXRlIGNvbXBvbmVudHMuCiAgICAgICAgdmVydGlj
YWxTcGxpdFBhbmUgPSBuZXcgSlNwbGl0UGFuZSgpOwogICAgICAgIGhvcml6b250YWxTcGxpdFBh
bmUgPSBuZXcgSlNwbGl0UGFuZSgpOwogICAgICAgIG1lbnViYXIgPSBuZXcgSk1lbnVCYXIoKTsK
ICAgICAgICBmaWxlTWVudSA9IG5ldyBKTWVudSgpOwogICAgICAgIHRlc3RNZW51ID0gbmV3IEpN
ZW51KCk7CiAgICAgICAgZmlsZUV4aXQgPSBuZXcgSk1lbnVJdGVtKCk7CiAgICAgICAgdGVzdFN0
YXJ0TGVmdCA9IG5ldyBKTWVudUl0ZW0oKTsKICAgICAgICB0ZXN0U3RhcnRSaWdodCA9IG5ldyBK
TWVudUl0ZW0oKTsKICAgICAgICB0ZXN0U3RvcExlZnQgPSBuZXcgSk1lbnVJdGVtKCk7CiAgICAg
ICAgdGVzdFN0b3BSaWdodCA9IG5ldyBKTWVudUl0ZW0oKTsKICAgICAgICB0ZXN0U3RhcnRBbGwg
PSBuZXcgSk1lbnVJdGVtKCk7CiAgICAgICAgCiAgICAgICAgc2V0RGVmYXVsdENsb3NlT3BlcmF0
aW9uKFdpbmRvd0NvbnN0YW50cy5FWElUX09OX0NMT1NFKTsKICAgICAgICAKICAgICAgICB2ZXJ0
aWNhbFNwbGl0UGFuZS5zZXRPcmllbnRhdGlvbihKU3BsaXRQYW5lLlZFUlRJQ0FMX1NQTElUKTsK
ICAgICAgICBnZXRDb250ZW50UGFuZSgpLmFkZCh2ZXJ0aWNhbFNwbGl0UGFuZSwgQm9yZGVyTGF5
b3V0LkNFTlRFUik7CiAgICAgICAgdmVydGljYWxTcGxpdFBhbmUuc2V0VG9wQ29tcG9uZW50KGhv
cml6b250YWxTcGxpdFBhbmUpOwogICAgICAgIAogICAgICAgIGZpbGVNZW51LnNldFRleHQoIkZp
bGUiKTsKICAgICAgICB0ZXN0TWVudS5zZXRUZXh0KCJUZXN0Iik7CiAgICAgICAgCiAgICAgICAg
ZmlsZUV4aXQuc2V0VGV4dCgiRXhpdCIpOwogICAgICAgIGZpbGVFeGl0LmFkZEFjdGlvbkxpc3Rl
bmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKICAgICAgICAgICAgcHVibGljIHZvaWQgYWN0aW9u
UGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2dCkgewogICAgICAgICAgICAgICAgZmlsZUV4aXRBY3Rp
b25QZXJmb3JtZWQoZXZ0KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIAogICAg
ICAgIHRlc3RTdGFydExlZnQuc2V0VGV4dCgiU3RhcnQgTGVmdCBQYW5lIik7CiAgICAgICAgdGVz
dFN0YXJ0TGVmdC5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CiAgICAg
ICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldnQpIHsKICAg
ICAgICAgICAgICAgIGxlZnRQYW5lbC5zdGFydCgpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7
CiAgICAgICAgCiAgICAgICAgdGVzdFN0YXJ0UmlnaHQuc2V0VGV4dCgiU3RhcnQgUmlnaHQgUGFu
ZSIpOwogICAgICAgIHRlc3RTdGFydFJpZ2h0LmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25M
aXN0ZW5lcigpIHsKICAgICAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlv
bkV2ZW50IGV2dCkgewogICAgICAgICAgICAgICAgcmlnaHRQYW5lbC5zdGFydCgpOwogICAgICAg
ICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIHRlc3RTdG9wTGVmdC5zZXRUZXh0KCJTdG9wIExl
ZnQgUGFuZSIpOwogICAgICAgIHRlc3RTdG9wTGVmdC5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0
aW9uTGlzdGVuZXIoKSB7CiAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChB
Y3Rpb25FdmVudCBldnQpIHsKICAgICAgICAgICAgICAgIGxlZnRQYW5lbC5zdG9wKCk7CiAgICAg
ICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAKICAgICAgICB0ZXN0U3RvcFJpZ2h0LnNldFRl
eHQoIlN0b3AgUmlnaHQgUGFuZSIpOwogICAgICAgIHRlc3RTdG9wUmlnaHQuYWRkQWN0aW9uTGlz
dGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgewogICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rp
b25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXZ0KSB7CiAgICAgICAgICAgICAgICByaWdodFBhbmVs
LnN0b3AoKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIHRlc3RT
dGFydEFsbC5zZXRUZXh0KCJTdGFydCBBbGwiKTsKICAgICAgICB0ZXN0U3RhcnRBbGwuYWRkQWN0
aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgewogICAgICAgICAgICBwdWJsaWMgdm9p
ZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXZ0KSB7CiAgICAgICAgICAgICAgICByaWdo
dFBhbmVsLnN0YXJ0KCk7CiAgICAgICAgICAgICAgICBsZWZ0UGFuZWwuc3RhcnQoKTsKICAgICAg
ICAgICAgICAgIGJvdHRvbVBhbmVsLnN0YXJ0KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsK
ICAgICAgICAKICAgICAgICBmaWxlTWVudS5hZGQoZmlsZUV4aXQpOyAgICAgICAgCiAgICAgICAg
dGVzdE1lbnUuYWRkKHRlc3RTdGFydExlZnQpOwogICAgICAgIHRlc3RNZW51LmFkZCh0ZXN0U3Rv
cExlZnQpOwogICAgICAgIHRlc3RNZW51LmFkZCh0ZXN0U3RhcnRSaWdodCk7CiAgICAgICAgdGVz
dE1lbnUuYWRkKHRlc3RTdG9wUmlnaHQpOwogICAgICAgIHRlc3RNZW51LmFkZCh0ZXN0U3RhcnRB
bGwpOwogICAgICAgIG1lbnViYXIuYWRkKGZpbGVNZW51KTsgICAgICAgIAogICAgICAgIG1lbnVi
YXIuYWRkKHRlc3RNZW51KTsgICAgICAgIAogICAgICAgIHNldEpNZW51QmFyKG1lbnViYXIpOwog
ICAgICAgIAogICAgICAgIGxlZnRQYW5lbCA9IG5ldyBUZXN0UGFuZWwoKTsKICAgICAgICByaWdo
dFBhbmVsID0gbmV3IFRlc3RQYW5lbCgpOwogICAgICAgIGJvdHRvbVBhbmVsID0gbmV3IFRlc3RQ
YW5lbCgpOwogICAgICAgIGhvcml6b250YWxTcGxpdFBhbmUuc2V0TGVmdENvbXBvbmVudChsZWZ0
UGFuZWwpOwogICAgICAgIGhvcml6b250YWxTcGxpdFBhbmUuc2V0UmlnaHRDb21wb25lbnQocmln
aHRQYW5lbCk7CiAgICAgICAgdmVydGljYWxTcGxpdFBhbmUuc2V0Qm90dG9tQ29tcG9uZW50KGJv
dHRvbVBhbmVsKTsKICAgICAgICAKICAgICAgICBzZXRTaXplKDgwMCwgNjAwKTsKICAgICAgICAK
ICAgICAgICBob3Jpem9udGFsU3BsaXRQYW5lLnNldERpdmlkZXJMb2NhdGlvbig0MDApOwogICAg
ICAgIHZlcnRpY2FsU3BsaXRQYW5lLnNldERpdmlkZXJMb2NhdGlvbigzMDApOwogICAgfQogICAg
CiAgICBwcml2YXRlIHZvaWQgZmlsZUV4aXRBY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXZ0
KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICBTeXN0
ZW0uZXhpdCgwKTsKICAgIH0KICAgIAogICAgcHVibGljIGNsYXNzIFRlc3RQYW5lbCBleHRlbmRz
IEpQYW5lbCB7CiAgICAgICAgR0xDYW52YXMgY2FudmFzOwogICAgICAgIEFuaW1hdG9yIGFuaW1h
dG9yOwogICAgICAgIAogICAgICAgIHB1YmxpYyBUZXN0UGFuZWwoKSB7CiAgICAgICAgICAgIEdM
Q2FwYWJpbGl0aWVzIGNhcD1uZXcgR0xDYXBhYmlsaXRpZXMoKTsKICAgICAgICAgICAgY2FwLnNl
dEhhcmR3YXJlQWNjZWxlcmF0ZWQodHJ1ZSk7CiAgICAgICAgICAgIGNhcC5zZXREb3VibGVCdWZm
ZXJlZCh0cnVlKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFRoZSBKUGFuZWwgbXVzdCB1
c2UgdGhlIEJvcmRlciBsYXlvdXQgbWFuYWdlci4KICAgICAgICAgICAgc2V0TGF5b3V0KG5ldyBC
b3JkZXJMYXlvdXQoKSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBDcmVhdGUgdGhlIEdM
Q2FudmFzLgogICAgICAgICAgICBjYW52YXMgPSBHTERyYXdhYmxlRmFjdG9yeS5nZXRGYWN0b3J5
KCkuY3JlYXRlR0xDYW52YXMoY2FwKTsKICAgICAgICAgICAgY2FudmFzLmFkZEdMRXZlbnRMaXN0
ZW5lcihuZXcgVGVzdFJlbmRlcmVyKCkpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQ3Jl
YXRlIGFuIGFuaW1hdG9yIHRocmVhZCBmb3IgdGhlIGNhbnZhcy4KICAgICAgICAgICAgYW5pbWF0
b3IgPSBuZXcgQW5pbWF0b3IoY2FudmFzKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEFk
ZCB0aGUgY2FudmFzIHRvIHRoZSBjZW50ZXIgb2YgdGhlIEpQYW5lbC4KICAgICAgICAgICAgYWRk
KGNhbnZhcywgQm9yZGVyTGF5b3V0LkNFTlRFUik7CiAgICAgICAgICAgIAogICAgICAgICAgICAv
LyBXZSBuZWVkIHRvIGNyZWF0ZSBhIERpbWVuc2lvbiBvYmplY3QgZm9yIHRoZSBKUGFuZWwgbWlu
aW11bSBzaXplIHRvIGZpeCBhIEdMQ2FudmFzIHJlc2l6ZSBidWcuCiAgICAgICAgICAgIC8vIFRo
ZSBHTENhbnZhcyBub3JtYWxseSB3b24ndCByZWNpZXZlIHJlc2l6ZSBldmVudHMgdGhhdCBzaHJp
bmsgYSBKUGFuZWwgY29udHJvbGVkIGJ5IGEgSlNwbGl0UGFuZS4gIAogICAgICAgICAgICBzZXRN
aW5pbXVtU2l6ZShuZXcgRGltZW5zaW9uKCkpOyAgCiAgICAgICAgfQogICAgICAgIAogICAgICAg
IHB1YmxpYyB2b2lkIHN0YXJ0KCl7CiAgICAgICAgICAgIGFuaW1hdG9yLnN0YXJ0KCk7CiAgICAg
ICAgfQogICAgICAgIAogICAgICAgIHB1YmxpYyB2b2lkIHN0b3AoKXsKICAgICAgICAgICAgYW5p
bWF0b3Iuc3RvcCgpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBjbGFzcyBUZXN0UmVuZGVy
ZXIgaW1wbGVtZW50cyBHTEV2ZW50TGlzdGVuZXIgewogICAgICAgICAgICBwcml2YXRlIEdMIGds
OwogICAgICAgICAgICBwcml2YXRlIEdMRHJhd2FibGUgZ2xkcmF3YWJsZTsKICAgICAgICAgICAg
ZmxvYXQgYW5nbGUgPSAwOwogICAgICAgICAgICAKICAgICAgICAgICAgcHVibGljIHZvaWQgaW5p
dChHTERyYXdhYmxlIGRyYXdhYmxlKSB7ICAgICAgICAKICAgICAgICAgICAgICAgIGdsID0gZHJh
d2FibGUuZ2V0R0woKTsKICAgICAgICAgICAgICAgIHRoaXMuZ2xkcmF3YWJsZSA9IGRyYXdhYmxl
OyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAg
cHVibGljIHZvaWQgcmVzaGFwZShHTERyYXdhYmxlIGRyYXdhYmxlLCBpbnQgeCwgaW50IHksIGlu
dCB3aWR0aCwgaW50IGhlaWdodCkgewogICAgICAgICAgICAgICAgZ2wuZ2xWaWV3cG9ydCgwLCAw
LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAg
cHVibGljIHZvaWQgZGlzcGxheShHTERyYXdhYmxlIGRyYXdhYmxlKSB7CiAgICAgICAgICAgICAg
ICAvL2dsLmdsQ2xlYXIoR0wuR0xfQ09MT1JfQlVGRkVSX0JJVCB8IEdMLkdMX0RFUFRIX0JVRkZF
Ul9CSVQpOyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGdsLmdsQ2xlYXIoR0wuR0xf
Q09MT1JfQlVGRkVSX0JJVCk7ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZ2wuZ2xS
b3RhdGVmKC4xZiwgMGYsIDBmLCAxZik7ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
Z2wuZ2xCZWdpbihHTC5HTF9QT0xZR09OKTsKICAgICAgICAgICAgICAgIGdsLmdsVmVydGV4MmYo
LTAuNWYsIC0wLjVmKTsKICAgICAgICAgICAgICAgIGdsLmdsVmVydGV4MmYoLTAuNWYsIDAuNWYp
OwogICAgICAgICAgICAgICAgZ2wuZ2xWZXJ0ZXgyZigwLjVmLCAwLjVmKTsKICAgICAgICAgICAg
ICAgIGdsLmdsVmVydGV4MmYoMC41ZiwgLTAuNWYpOwogICAgICAgICAgICAgICAgZ2wuZ2xFbmQo
KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcHVibGljIHZvaWQgZGlz
cGxheUNoYW5nZWQoR0xEcmF3YWJsZSBkcmF3YWJsZSwgYm9vbGVhbiBtb2RlQ2hhbmdlZCwgYm9v
bGVhbiBkZXZpY2VDaGFuZ2VkKSB7fQogICAgICAgIH0KICAgIH0KfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>35</attachid>
            <date>2005-04-30 07:46:00 +0200</date>
            <delta_ts>2005-04-30 07:46:00 +0200</delta_ts>
            <desc>Working version of test case</desc>
            <filename>Main.java</filename>
            <type>text/plain</type>
            <size>7786</size>
            <attacher name="Sven Gothel">sgothel</attacher>
            
              <data encoding="base64">aW1wb3J0IG5ldC5qYXZhLmdhbWVzLmpvZ2wuKjsKaW1wb3J0IGphdmEuYXd0Lio7CmltcG9ydCBq
YXZhLmF3dC5ldmVudC4qOwppbXBvcnQgamF2YS5iZWFucy4qOwppbXBvcnQgamF2YXguc3dpbmcu
KjsKaW1wb3J0IGphdmF4LnN3aW5nLmV2ZW50Lio7CgpwdWJsaWMgY2xhc3MgTWFpbiBleHRlbmRz
IEpGcmFtZSB7CiAgICBwcml2YXRlIEpNZW51QmFyIG1lbnViYXI7CiAgICBwcml2YXRlIEpNZW51
IGZpbGVNZW51LCB0ZXN0TWVudTsKICAgIHByaXZhdGUgSk1lbnVJdGVtIGZpbGVFeGl0OwogICAg
cHJpdmF0ZSBKTWVudUl0ZW0gdGVzdFN0YXJ0TGVmdCwgdGVzdFN0YXJ0UmlnaHQ7CiAgICBwcml2
YXRlIEpNZW51SXRlbSB0ZXN0U3RvcExlZnQsIHRlc3RTdG9wUmlnaHQ7CiAgICBwcml2YXRlIEpN
ZW51SXRlbSB0ZXN0U3RhcnRBbGw7CiAgICBwcml2YXRlIEpTcGxpdFBhbmUgdmVydGljYWxTcGxp
dFBhbmU7CiAgICBwcml2YXRlIEpTcGxpdFBhbmUgaG9yaXpvbnRhbFNwbGl0UGFuZTsKICAgIHBy
aXZhdGUgVGVzdFBhbmVsIGxlZnRQYW5lbCwgcmlnaHRQYW5lbCwgYm90dG9tUGFuZWw7CiAgICAK
ICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKICAgICAgICAgICAg
RXZlbnRRdWV1ZS5pbnZva2VMYXRlcihuZXcgUnVubmFibGUoKSB7CiAgICAgICAgICAgIHB1Ymxp
YyB2b2lkIHJ1bigpIHsKICAgICAgICAgICAgICAgIE1haW4gbSA9IG5ldyBNYWluKCk7CiAgICAg
ICAgICAgICAgICBtLnNldFZpc2libGUodHJ1ZSk7CiAgICAgICAgICAgICAgICBNeUFuaW1hdG9y
IGFuaW0gPSBtLm5ldyBNeUFuaW1hdG9yKCk7CiAgICAgICAgICAgICAgICBhbmltLnN0YXJ0KCk7
CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KICAgIAogICAgcHVibGljIE1haW4oKSB7
ICAgICAgICAKICAgICAgICAvLyBUaGlzIGNhbGwgZW5zdXJlcyB0aGF0IHRoZSBKTWVudUJhciB3
aWxsIHJlbmRlciBvdmVyIHRoZSBHTENhbnZhcy4KICAgICAgICBKUG9wdXBNZW51LnNldERlZmF1
bHRMaWdodFdlaWdodFBvcHVwRW5hYmxlZChmYWxzZSk7CiAgICAgICAgCiAgICAgICAgLy8gQ3Jl
YXRlIGNvbXBvbmVudHMuCiAgICAgICAgdmVydGljYWxTcGxpdFBhbmUgPSBuZXcgSlNwbGl0UGFu
ZSgpOwogICAgICAgIGhvcml6b250YWxTcGxpdFBhbmUgPSBuZXcgSlNwbGl0UGFuZSgpOwogICAg
ICAgIG1lbnViYXIgPSBuZXcgSk1lbnVCYXIoKTsKICAgICAgICBmaWxlTWVudSA9IG5ldyBKTWVu
dSgpOwogICAgICAgIHRlc3RNZW51ID0gbmV3IEpNZW51KCk7CiAgICAgICAgZmlsZUV4aXQgPSBu
ZXcgSk1lbnVJdGVtKCk7CiAgICAgICAgdGVzdFN0YXJ0TGVmdCA9IG5ldyBKTWVudUl0ZW0oKTsK
ICAgICAgICB0ZXN0U3RhcnRSaWdodCA9IG5ldyBKTWVudUl0ZW0oKTsKICAgICAgICB0ZXN0U3Rv
cExlZnQgPSBuZXcgSk1lbnVJdGVtKCk7CiAgICAgICAgdGVzdFN0b3BSaWdodCA9IG5ldyBKTWVu
dUl0ZW0oKTsKICAgICAgICB0ZXN0U3RhcnRBbGwgPSBuZXcgSk1lbnVJdGVtKCk7CiAgICAgICAg
CiAgICAgICAgc2V0RGVmYXVsdENsb3NlT3BlcmF0aW9uKFdpbmRvd0NvbnN0YW50cy5FWElUX09O
X0NMT1NFKTsKICAgICAgICAKICAgICAgICB2ZXJ0aWNhbFNwbGl0UGFuZS5zZXRPcmllbnRhdGlv
bihKU3BsaXRQYW5lLlZFUlRJQ0FMX1NQTElUKTsKICAgICAgICBnZXRDb250ZW50UGFuZSgpLmFk
ZCh2ZXJ0aWNhbFNwbGl0UGFuZSwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CiAgICAgICAgdmVydGlj
YWxTcGxpdFBhbmUuc2V0VG9wQ29tcG9uZW50KGhvcml6b250YWxTcGxpdFBhbmUpOwogICAgICAg
IAogICAgICAgIGZpbGVNZW51LnNldFRleHQoIkZpbGUiKTsKICAgICAgICB0ZXN0TWVudS5zZXRU
ZXh0KCJUZXN0Iik7CiAgICAgICAgCiAgICAgICAgZmlsZUV4aXQuc2V0VGV4dCgiRXhpdCIpOwog
ICAgICAgIGZpbGVFeGl0LmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsK
ICAgICAgICAgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2dCkg
ewogICAgICAgICAgICAgICAgZmlsZUV4aXRBY3Rpb25QZXJmb3JtZWQoZXZ0KTsKICAgICAgICAg
ICAgfQogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIHRlc3RTdGFydExlZnQuc2V0VGV4dCgi
U3RhcnQgTGVmdCBQYW5lIik7CiAgICAgICAgdGVzdFN0YXJ0TGVmdC5hZGRBY3Rpb25MaXN0ZW5l
cihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CiAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBl
cmZvcm1lZChBY3Rpb25FdmVudCBldnQpIHsKICAgICAgICAgICAgICAgIGxlZnRQYW5lbC5zdGFy
dCgpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgdGVzdFN0YXJ0
UmlnaHQuc2V0VGV4dCgiU3RhcnQgUmlnaHQgUGFuZSIpOwogICAgICAgIHRlc3RTdGFydFJpZ2h0
LmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKICAgICAgICAgICAgcHVi
bGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2dCkgewogICAgICAgICAgICAg
ICAgcmlnaHRQYW5lbC5zdGFydCgpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAg
IHRlc3RTdG9wTGVmdC5zZXRUZXh0KCJTdG9wIExlZnQgUGFuZSIpOwogICAgICAgIHRlc3RTdG9w
TGVmdC5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CiAgICAgICAgICAg
IHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldnQpIHsKICAgICAgICAg
ICAgICAgIGxlZnRQYW5lbC5zdG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAg
ICAKICAgICAgICB0ZXN0U3RvcFJpZ2h0LnNldFRleHQoIlN0b3AgUmlnaHQgUGFuZSIpOwogICAg
ICAgIHRlc3RTdG9wUmlnaHQuYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkg
ewogICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXZ0
KSB7CiAgICAgICAgICAgICAgICByaWdodFBhbmVsLnN0b3AoKTsKICAgICAgICAgICAgfQogICAg
ICAgIH0pOwogICAgICAgIAogICAgICAgIHRlc3RTdGFydEFsbC5zZXRUZXh0KCJTdGFydCBBbGwi
KTsKICAgICAgICB0ZXN0U3RhcnRBbGwuYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3Rl
bmVyKCkgewogICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZl
bnQgZXZ0KSB7CiAgICAgICAgICAgICAgICByaWdodFBhbmVsLnN0YXJ0KCk7CiAgICAgICAgICAg
ICAgICBsZWZ0UGFuZWwuc3RhcnQoKTsKICAgICAgICAgICAgICAgIGJvdHRvbVBhbmVsLnN0YXJ0
KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAKICAgICAgICBmaWxlTWVudS5h
ZGQoZmlsZUV4aXQpOyAgICAgICAgCiAgICAgICAgdGVzdE1lbnUuYWRkKHRlc3RTdGFydExlZnQp
OwogICAgICAgIHRlc3RNZW51LmFkZCh0ZXN0U3RvcExlZnQpOwogICAgICAgIHRlc3RNZW51LmFk
ZCh0ZXN0U3RhcnRSaWdodCk7CiAgICAgICAgdGVzdE1lbnUuYWRkKHRlc3RTdG9wUmlnaHQpOwog
ICAgICAgIHRlc3RNZW51LmFkZCh0ZXN0U3RhcnRBbGwpOwogICAgICAgIG1lbnViYXIuYWRkKGZp
bGVNZW51KTsgICAgICAgIAogICAgICAgIG1lbnViYXIuYWRkKHRlc3RNZW51KTsgICAgICAgIAog
ICAgICAgIHNldEpNZW51QmFyKG1lbnViYXIpOwogICAgICAgIAogICAgICAgIGxlZnRQYW5lbCA9
IG5ldyBUZXN0UGFuZWwoKTsKICAgICAgICByaWdodFBhbmVsID0gbmV3IFRlc3RQYW5lbCgpOwog
ICAgICAgIGJvdHRvbVBhbmVsID0gbmV3IFRlc3RQYW5lbCgpOwogICAgICAgIGhvcml6b250YWxT
cGxpdFBhbmUuc2V0TGVmdENvbXBvbmVudChsZWZ0UGFuZWwpOwogICAgICAgIGhvcml6b250YWxT
cGxpdFBhbmUuc2V0UmlnaHRDb21wb25lbnQocmlnaHRQYW5lbCk7CiAgICAgICAgdmVydGljYWxT
cGxpdFBhbmUuc2V0Qm90dG9tQ29tcG9uZW50KGJvdHRvbVBhbmVsKTsKICAgICAgICAKICAgICAg
ICBzZXRTaXplKDgwMCwgNjAwKTsKICAgICAgICAKICAgICAgICBob3Jpem9udGFsU3BsaXRQYW5l
LnNldERpdmlkZXJMb2NhdGlvbig0MDApOwogICAgICAgIHZlcnRpY2FsU3BsaXRQYW5lLnNldERp
dmlkZXJMb2NhdGlvbigzMDApOwoKICAgIH0KICAgIAogICAgcHJpdmF0ZSB2b2lkIGZpbGVFeGl0
QWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2dCkgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgU3lzdGVtLmV4aXQoMCk7CiAgICB9CiAgICAKICAg
IHB1YmxpYyBjbGFzcyBUZXN0UGFuZWwgZXh0ZW5kcyBKUGFuZWwgewogICAgICAgIEdMQ2FudmFz
IGNhbnZhczsKICAgICAgICBBbmltYXRvciBhbmltYXRvcjsKICAgICAgICBib29sZWFuIHN0YXJ0
ZWQ7CiAgICAgICAgCiAgICAgICAgcHVibGljIFRlc3RQYW5lbCgpIHsKICAgICAgICAgICAgR0xD
YXBhYmlsaXRpZXMgY2FwPW5ldyBHTENhcGFiaWxpdGllcygpOwogICAgICAgICAgICBjYXAuc2V0
SGFyZHdhcmVBY2NlbGVyYXRlZCh0cnVlKTsKICAgICAgICAgICAgY2FwLnNldERvdWJsZUJ1ZmZl
cmVkKHRydWUpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gVGhlIEpQYW5lbCBtdXN0IHVz
ZSB0aGUgQm9yZGVyIGxheW91dCBtYW5hZ2VyLgogICAgICAgICAgICBzZXRMYXlvdXQobmV3IEJv
cmRlckxheW91dCgpKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgR0xD
YW52YXMuCiAgICAgICAgICAgIGNhbnZhcyA9IEdMRHJhd2FibGVGYWN0b3J5LmdldEZhY3Rvcnko
KS5jcmVhdGVHTENhbnZhcyhjYXApOwogICAgICAgICAgICBjYW52YXMuYWRkR0xFdmVudExpc3Rl
bmVyKG5ldyBUZXN0UmVuZGVyZXIoKSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBDcmVh
dGUgYW4gYW5pbWF0b3IgdGhyZWFkIGZvciB0aGUgY2FudmFzLgogICAgICAgICAgICAvLyAgICAg
ICAgICAgIGFuaW1hdG9yID0gbmV3IEFuaW1hdG9yKGNhbnZhcyk7CiAgICAgICAgICAgIAogICAg
ICAgICAgICAvLyBBZGQgdGhlIGNhbnZhcyB0byB0aGUgY2VudGVyIG9mIHRoZSBKUGFuZWwuCiAg
ICAgICAgICAgIGFkZChjYW52YXMsIEJvcmRlckxheW91dC5DRU5URVIpOwogICAgICAgICAgICAK
ICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjcmVhdGUgYSBEaW1lbnNpb24gb2JqZWN0IGZvciB0
aGUgSlBhbmVsIG1pbmltdW0gc2l6ZSB0byBmaXggYSBHTENhbnZhcyByZXNpemUgYnVnLgogICAg
ICAgICAgICAvLyBUaGUgR0xDYW52YXMgbm9ybWFsbHkgd29uJ3QgcmVjaWV2ZSByZXNpemUgZXZl
bnRzIHRoYXQgc2hyaW5rIGEgSlBhbmVsIGNvbnRyb2xlZCBieSBhIEpTcGxpdFBhbmUuICAKICAg
ICAgICAgICAgc2V0TWluaW11bVNpemUobmV3IERpbWVuc2lvbigpKTsgIAogICAgICAgIH0KICAg
ICAgICAKICAgICAgICBwdWJsaWMgdm9pZCBkcmF3KCkgewogICAgICAgICAgY2FudmFzLmRpc3Bs
YXkoKTsKICAgICAgICB9CgogICAgICAvLyAgICAgICAgcHVibGljIHZvaWQgc3RhcnQoKXsKICAg
ICAgLy8gICAgICAgICAgICBhbmltYXRvci5zdGFydCgpOwogICAgICAvLyAgICAgICAgfQogICAg
ICAgIAogICAgICAvLyAgICAgICAgcHVibGljIHZvaWQgc3RvcCgpewogICAgICAvLyAgICAgICAg
ICAgIGFuaW1hdG9yLnN0b3AoKTsKICAgICAgLy8gICAgICAgIH0KCiAgICAgIHB1YmxpYyB2b2lk
IHN0YXJ0KCl7CiAgICAgICAgc3RhcnRlZCA9IHRydWU7CiAgICAgIH0KICAgICAgICAKICAgICAg
cHVibGljIHZvaWQgc3RvcCgpewogICAgICAgIHN0YXJ0ZWQgPSBmYWxzZTsKICAgICAgfQoKICAg
ICAgcHVibGljIGJvb2xlYW4gaXNTdGFydGVkKCkgewogICAgICAgIHJldHVybiBzdGFydGVkOwog
ICAgICB9CiAgICAgICAgCiAgICAgICAgY2xhc3MgVGVzdFJlbmRlcmVyIGltcGxlbWVudHMgR0xF
dmVudExpc3RlbmVyIHsKICAgICAgICAgICAgcHJpdmF0ZSBHTCBnbDsKICAgICAgICAgICAgcHJp
dmF0ZSBHTERyYXdhYmxlIGdsZHJhd2FibGU7CiAgICAgICAgICAgIGZsb2F0IGFuZ2xlID0gMDsK
ICAgICAgICAgICAgCiAgICAgICAgICAgIHB1YmxpYyB2b2lkIGluaXQoR0xEcmF3YWJsZSBkcmF3
YWJsZSkgeyAgICAgICAgCiAgICAgICAgICAgICAgICBnbCA9IGRyYXdhYmxlLmdldEdMKCk7CiAg
ICAgICAgICAgICAgICB0aGlzLmdsZHJhd2FibGUgPSBkcmF3YWJsZTsgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlc2hh
cGUoR0xEcmF3YWJsZSBkcmF3YWJsZSwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWln
aHQpIHsKICAgICAgICAgICAgICAgIGdsLmdsVmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7
CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRpc3Bs
YXkoR0xEcmF3YWJsZSBkcmF3YWJsZSkgewogICAgICAgICAgICAgICAgLy9nbC5nbENsZWFyKEdM
LkdMX0NPTE9SX0JVRkZFUl9CSVQgfCBHTC5HTF9ERVBUSF9CVUZGRVJfQklUKTsgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICBnbC5nbENsZWFyKEdMLkdMX0NPTE9SX0JVRkZFUl9CSVQp
OyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGdsLmdsUm90YXRlZiguMWYsIDBmLCAw
ZiwgMWYpOyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGdsLmdsQmVnaW4oR0wuR0xf
UE9MWUdPTik7CiAgICAgICAgICAgICAgICBnbC5nbFZlcnRleDJmKC0wLjVmLCAtMC41Zik7CiAg
ICAgICAgICAgICAgICBnbC5nbFZlcnRleDJmKC0wLjVmLCAwLjVmKTsKICAgICAgICAgICAgICAg
IGdsLmdsVmVydGV4MmYoMC41ZiwgMC41Zik7CiAgICAgICAgICAgICAgICBnbC5nbFZlcnRleDJm
KDAuNWYsIC0wLjVmKTsKICAgICAgICAgICAgICAgIGdsLmdsRW5kKCk7CgogICAgICAgICAgICAg
ICAgLyoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgIFRocmVhZC5zbGVl
cCgxMCk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIAogICAgICAgICAgICBwdWJsaWMgdm9pZCBkaXNwbGF5Q2hhbmdlZChHTERyYXdhYmxl
IGRyYXdhYmxlLCBib29sZWFuIG1vZGVDaGFuZ2VkLCBib29sZWFuIGRldmljZUNoYW5nZWQpIHt9
CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBjbGFzcyBNeUFuaW1hdG9yIGV4dGVuZHMgVGhy
ZWFkIHsKICAgICAgcHVibGljIHZvaWQgcnVuKCkgewogICAgICAgIHdoaWxlICh0cnVlKSB7CiAg
ICAgICAgICBpZiAobGVmdFBhbmVsLmlzU3RhcnRlZCgpKSB7CiAgICAgICAgICAgIGxlZnRQYW5l
bC5kcmF3KCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAocmlnaHRQYW5lbC5pc1N0YXJ0ZWQo
KSkgewogICAgICAgICAgICByaWdodFBhbmVsLmRyYXcoKTsKICAgICAgICAgIH0KICAgICAgICAg
IGlmIChib3R0b21QYW5lbC5pc1N0YXJ0ZWQoKSkgewogICAgICAgICAgICBib3R0b21QYW5lbC5k
cmF3KCk7CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBUaHJlYWQuc2xl
ZXAoMTApOwogICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewogICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQp9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>