<?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>163</bug_id>
          
          <creation_ts>2005-06-05 01:00:44 +0200</creation_ts>
          <short_desc>Extend Render-to-Texture functionality to include Render-to-Depth-Texture</short_desc>
          <delta_ts>2015-09-27 03:09:32 +0200</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>all</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc>http://www.cs.rutgers.edu/~tedmunds/jogl/renderToDepthTexture.zip</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</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>179</commentid>
    <comment_count>0</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2010-03-24 07:47:51 +0100</bug_when>
    <thetext>


---- Reported by tedmunds 2005-06-05 13:00:44 ----

The current render-to-texture functionality makes use of the
WGL_ARB_render_texture extension to allow a Pbuffer&apos;s colour buffer to be bound
to a texture.  It would also be useful to be able to use the
WGL_NV_render_depth_texture extension to allow binding of the Pbuffer&apos;s depth
buffer to a depth texture.  The implementation of such a feature (on Windows)
could parallel the already present render-to-texture functionality.  An example
of such an implementation is available at
http://www.cs.rutgers.edu/~tedmunds/jogl/renderToDepthTexture.zip.

The implementation makes the following modifications to the JOGL code base:
net.java.games.jogl.GLCapabilities:
  * Add a boolean field offscreenRenderToDepthTexture (similar to
    offscreenRenderToTexture) that indicates whether the created Pbuffer should
    allow render-to-depth-texture.
  * Add accessors (getOffscreenRenderToDepthTexture(),
    setOffscreenRenderToDepthTexture(boolean onOrOff) for the above field.
net.java.games.jogl.GLPbuffer:
  * Add a method bindDepthTexture() (similar to bindTexture()) that calls for
    the Pbuffer&apos;s depth buffer to be bound to GL_TEXTURE_2D or
    GL_TEXTURE_RECTANGLE_NV.
  * Add a method releaseDepthTexture() that parallel&apos;s depthTexture().
net.java.games.jogl.impl.GLPbufferImpl:
  * Implement the added GLPbuffer interface methods (above) by calling the
    corresponding methods on the context (below)
net.java.games.jogl.impl.GLContext:
  * Add an abstract method bindPbufferToDepthTexture() (similar to
    bindPbufferToTexture()).
  * Add an abstract method releasePbufferFromDepthTexture() (similar to
    releasePbufferFromTexture()).
net.java.games.jogl.impl.windows.OffscreenGLContext/OnscreenGLContext:
  * Implement the added GLContext abstract methods (above) with versions that
    throw exceptions indicating that they should not be called.
net.java.games.jogl.impl.windows.WindowsPbufferGLContext:
  * Add a field rtdt (similar to rtt) indicating whether render-to-depth-texture
    is enabled.
  * Add a field hasRTDT (similar to RTDT) indicating whether the
    render-to-depth-texture extension is available.
  * Add a field depthTexture (similar to texture) that holds the texture object
    ID of the depth texture.
  * Modify the constructor&apos;s DEBUG output to include rtdt.
  * Implement bindPbufferToDepthTexture() in a manner similar to
    bindPbufferToTexture(), except that the wglBindTexImageARB() call binds to
    WGL_DEPTH_COMPONENT_NV instead of WGL_FRONT_LEFT_ARB.
  * Implement releasePbufferFromDepthTexture() (with the same relationship to
    releasePbufferFromTexture()).
  * Modify createPbuffer(long, long):
    * Initialize rtdt from the capabilities.
    * On many of the tests that check whether rtt == true, modify to check
      whether (rtt || rtdt) == true.
    * If rtdt, add to the iattributes array the pair:
      WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV or
      WGL_BIND_TO_TEXTURE_DEPTH_NV (depending on rect) and GL_TRUE (to enable
      binding of the depth buffer to a texture).
    * In the NVidia work-around loop, if rtdt, add the
      WGL_DEPTH_TEXTURE_FORMAT_NV and WGL_TEXTURE_DEPTH_COMPONENT_NV pair to the
      iattributes array.
  * Modify makeCurrent(Runnable):
    * Initialize rtdt from the capabilities.
    * Determine the render-to-texture-rectangle settings if rtt or rtdt is true.
    * If rtdt:
      * Determine whether the render-to-depth-texture extension is available.
      * Generate a texture to be bound to the depth buffer.
      * Bind the generated texture to the texture target.
      * Configure the texture lookup parameters.
      * Choose the internal format of the texture (one of the depth formats)
      * Create the texture with null contents.
  * Modify swapBuffers():
    * If render-to-depth-texture is enabled (rtdt), but the extension is not
      available (!hasRTDT), copy the depth buffer to the depth texture.
    * In both the new copying case and the existing colour buffer copy, bind the
      appropriate texture to the texture target before copying.
net.java.games.jogl.impl.macosx.MacOSX*GLContext:
net.java.games.jogl.impl.x11.X11*GLContext:
  * Not yet implemented (methods added with comments/exceptions to that effect)
  
Design decisions:
  * By paralleling render-to-depth-texture alongside render-to-texture, it is
    possible to bind both the colour buffer and the depth buffer of a Pbuffer to
    (different) textures.
  * For simplicity, the existing render-to-texture-rect settings are made to
    apply to both the colour and depth textures.  It should be possible to allow
    (eg.) the colour buffer to be bound to GL_TEXTURE_RECTANGLE_NV, and the
    depth buffer to be bound to GL_TEXTURE_2D, but it doesn&apos;t seem that useful.

Notes:
  * The example patch was created against the latest source from CVS as of
    June 4, 2005.
  * As well as implementing the described render-to-depth-texture functionality,
    the example patch implements the exposure of the texture target (i.e.
    allowing the API programmer to determine whether the buffers are bound to
    GL_TEXTURE_2D or GL_TEXTURE_RECTANGLE_NV.
  * Also included in the source archive is and example application
    (RenderToTexture.java) that demonstrates the combined use of
    render-to-texture and render-to-depth-texture.



---- Additional Comments From kbr 2005-06-22 01:14:32 ----

Thanks for the suggestion and patch. However, the OpenGL community is moving
away from pbuffers and toward the frame buffer object extension, which is a more
portable and higher-performance solution for offscreen rendering than pbuffers.
I&apos;m therefore reluctant to enhance JOGL&apos;s pbuffer implementation significantly
at this time, because we&apos;re trying to stabilize the final release of the current
JOGL APIs. Your patch will be considered for a future version of JOGL
implementing the JSR-231 APIs.




---- Additional Comments From tedmunds 2006-02-07 14:27:13 ----

Created an attachment
Framebuffer object implementation of the desired functionality.




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

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

Bug has invalid status, setting status to &quot;NEW&quot;.
   Previous status was &quot;STARTED&quot;.
The original submitter of attachment 57 is unknown.
   Reassigning to the person who moved it here: sgothel@jausoft.com.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>57</attachid>
            <date>2006-02-07 14:27:00 +0100</date>
            <delta_ts>2006-02-07 14:27:00 +0100</delta_ts>
            <desc>Framebuffer object implementation of the desired functionality.</desc>
            <filename>RenderToTextureFBO.java</filename>
            <type>text/plain</type>
            <size>18693</size>
            <attacher name="Sven Gothel">sgothel</attacher>
            
              <data encoding="base64">cGFja2FnZSBkZW1vcy5yZW5kZXJUb1RleHR1cmU7DQoNCmltcG9ydCBqYXZhLmF3dC5ldmVudC5X
aW5kb3dBZGFwdGVyOw0KaW1wb3J0IGphdmEuYXd0LmV2ZW50LldpbmRvd0V2ZW50Ow0KDQppbXBv
cnQgamF2YXgubWVkaWEub3BlbmdsLkRlYnVnR0w7DQppbXBvcnQgamF2YXgubWVkaWEub3Blbmds
LkdMOw0KaW1wb3J0IGphdmF4Lm1lZGlhLm9wZW5nbC5HTEF1dG9EcmF3YWJsZTsNCmltcG9ydCBq
YXZheC5tZWRpYS5vcGVuZ2wuR0xDYW52YXM7DQppbXBvcnQgamF2YXgubWVkaWEub3BlbmdsLkdM
RXZlbnRMaXN0ZW5lcjsNCmltcG9ydCBqYXZheC5tZWRpYS5vcGVuZ2wuR0xFeGNlcHRpb247DQpp
bXBvcnQgamF2YXguc3dpbmcuSkZyYW1lOw0KDQppbXBvcnQgY29tLnN1bi5vcGVuZ2wudXRpbHMu
R0xVVDsNCg0KcHVibGljIGNsYXNzIFJlbmRlclRvVGV4dHVyZUZCTyBpbXBsZW1lbnRzIEdMRXZl
bnRMaXN0ZW5lcg0Kew0KICAgIHByaXZhdGUgc3RhdGljIEdMVVQgZ2x1dCA9IG5ldyBHTFVUKCk7
DQoNCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQ0KICAgIHsNCiAg
ICAgICAgUmVuZGVyVG9UZXh0dXJlRkJPIHJlbmRlcmVyID0gbmV3IFJlbmRlclRvVGV4dHVyZUZC
TygpOw0KDQogICAgICAgIEdMQ2FudmFzIGNhbnZhcyA9IG5ldyBHTENhbnZhcygpOw0KDQogICAg
ICAgIGNhbnZhcy5hZGRHTEV2ZW50TGlzdGVuZXIocmVuZGVyZXIpOw0KDQogICAgICAgIEpGcmFt
ZSBmcmFtZSA9IG5ldyBKRnJhbWUoIlJlbmRlciBUbyBUZXh0dXJlIERlbW8iKTsNCg0KICAgICAg
ICBmcmFtZS5hZGRXaW5kb3dMaXN0ZW5lcihuZXcgV2luZG93QWRhcHRlcigpDQogICAgICAgIHsN
CiAgICAgICAgICAgIHB1YmxpYyB2b2lkIHdpbmRvd0Nsb3NpbmcoV2luZG93RXZlbnQgZXZ0KQ0K
ICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOw0KICAgICAgICAg
ICAgfQ0KICAgICAgICB9KTsNCg0KICAgICAgICBmcmFtZS5nZXRDb250ZW50UGFuZSgpLmFkZChj
YW52YXMpOw0KICAgICAgICBjYW52YXMuc2V0U2l6ZSgzMDAsIDMwMCk7DQoNCiAgICAgICAgZnJh
bWUucGFjaygpOw0KICAgICAgICBmcmFtZS5zZXRWaXNpYmxlKHRydWUpOw0KICAgIH0NCg0KICAg
IHByaXZhdGUgc3RhdGljIGZsb2F0W10gbGlnaHRQb3NpdGlvbiA9IG5ldyBmbG9hdFtdDQogICAg
ew0KICAgICAgICAxLCAwLCAxMCwgMQ0KICAgIH07DQoNCiAgICBwcml2YXRlIEZyYW1lYnVmZmVy
T2JqZWN0UmVuZGVyZXIgZnJhbWVidWZmZXJSZW5kZXJlcjsNCg0KICAgIHByaXZhdGUgYm9vbGVh
biBpc0ZyYW1lYnVmZmVyUmVuZGVyZXJDcmVhdGVkID0gZmFsc2U7DQoNCiAgICBwdWJsaWMgdm9p
ZCBpbml0KEdMQXV0b0RyYXdhYmxlIGRyYXdhYmxlKQ0KICAgIHsNCiAgICAgICAgZHJhd2FibGUu
c2V0R0wobmV3IERlYnVnR0woZHJhd2FibGUuZ2V0R0woKSkpOw0KDQogICAgICAgIEdMIGdsID0g
ZHJhd2FibGUuZ2V0R0woKTsNCg0KICAgICAgICBnbC5nbEVuYWJsZShHTC5HTF9ERVBUSF9URVNU
KTsNCiAgICAgICAgZ2wuZ2xFbmFibGUoR0wuR0xfTk9STUFMSVpFKTsNCiAgICAgICAgZ2wuZ2xF
bmFibGUoR0wuR0xfTElHSFRJTkcpOw0KDQogICAgICAgIGdsLmdsQ2xlYXJDb2xvcigwLjVmLCAw
LjVmLCAwLjVmLCAwKTsNCg0KICAgICAgICAvLyBQbGFjZSB0aGUgY2FtZXJhDQogICAgICAgIGds
LmdsTWF0cml4TW9kZShHTC5HTF9QUk9KRUNUSU9OKTsNCiAgICAgICAgZ2wuZ2xMb2FkSWRlbnRp
dHkoKTsNCiAgICAgICAgZ2wuZ2xGcnVzdHVtKC0yLjAgLyAxMCwgMi4wIC8gMTAsIC0yLjAgLyAx
MCwgMi4wIC8gMTAsIDEsIDExKTsNCg0KICAgICAgICBnbC5nbE1hdHJpeE1vZGUoR0wuR0xfTU9E
RUxWSUVXKTsNCiAgICAgICAgZ2wuZ2xMb2FkSWRlbnRpdHkoKTsNCiAgICAgICAgZ2wuZ2xUcmFu
c2xhdGVkKDAsIDAsIC0xMCk7DQoNCiAgICAgICAgLy8gQ29uZmlndXJlIHRoZSBsaWdodA0KICAg
ICAgICBnbC5nbEVuYWJsZShHTC5HTF9MSUdIVDApOw0KICAgICAgICBnbC5nbExpZ2h0ZnYoR0wu
R0xfTElHSFQwLCBHTC5HTF9QT1NJVElPTiwgbGlnaHRQb3NpdGlvbiwgMCk7DQoNCiAgICAgICAg
aWYgKCFpc0ZyYW1lYnVmZmVyUmVuZGVyZXJDcmVhdGVkKQ0KICAgICAgICB7DQogICAgICAgICAg
ICBmcmFtZWJ1ZmZlclJlbmRlcmVyID0gbmV3IEZyYW1lYnVmZmVyT2JqZWN0UmVuZGVyZXIoMjU2
KTsNCiAgICAgICAgICAgIGZyYW1lYnVmZmVyUmVuZGVyZXIuaW5pdChkcmF3YWJsZSk7DQogICAg
ICAgICAgICBpc0ZyYW1lYnVmZmVyUmVuZGVyZXJDcmVhdGVkID0gdHJ1ZTsNCiAgICAgICAgfQ0K
ICAgIH0NCg0KICAgIHB1YmxpYyB2b2lkIGRpc3BsYXkoR0xBdXRvRHJhd2FibGUgZHJhd2FibGUp
DQogICAgew0KICAgICAgICBHTCBnbCA9IGRyYXdhYmxlLmdldEdMKCk7DQoNCiAgICAgICAgZ2wu
Z2xDbGVhcihHTC5HTF9DT0xPUl9CVUZGRVJfQklUIHwgR0wuR0xfREVQVEhfQlVGRkVSX0JJVCk7
DQoNCiAgICAgICAgZnJhbWVidWZmZXJSZW5kZXJlci5yZW5kZXJUb0ZyYW1lQnVmZmVyKGRyYXdh
YmxlKTsNCg0KICAgICAgICAvLyBEcmF3IHRoZSB0ZWFwb3QgY2FzdGluZyBhIHNoYWRvdyBvbiBh
IHJlcGVhdGVkIHBpY3R1cmUgb2YgdGhlDQogICAgICAgIC8vIG9mZnNjcmVlbiBjb2xvdXIgYnVm
ZmVyLg0KICAgICAgICAvLyBXZSdsbCB1c2UgbXVsdGktdGV4dHVyZSB1bml0IDEgZm9yIHRoZSBz
aGFkb3dpbmcuLi4NCiAgICAgICAgZnJhbWVidWZmZXJSZW5kZXJlci5wcmVwYXJlRm9yU2hhZG93
ZWRSZW5kZXJpbmcoZHJhd2FibGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMLkdMX1RFWFRVUkUxKTsNCiAgICAgICAgLy8gLi4uIGFu
ZCBtdWx0aS10ZXh0dXJlIHVuaXQgMCBmb3IgdGhlIHBpY3R1cmUNCiAgICAgICAgZnJhbWVidWZm
ZXJSZW5kZXJlci5wcmVwYXJlRm9yQ29sb3VyZWRSZW5kZXJpbmcoZHJhd2FibGUsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMLkdMX1RF
WFRVUkUwKTsNCiAgICAgICAgZHJhd1NxdWFyZShkcmF3YWJsZSk7DQogICAgICAgIGZyYW1lYnVm
ZmVyUmVuZGVyZXIuc3RvcENvbG91cmVkUmVuZGVyaW5nKGRyYXdhYmxlKTsNCiAgICAgICAgZHJh
d0Zsb2F0aW5nVGVhcG90KGRyYXdhYmxlKTsNCiAgICAgICAgZnJhbWVidWZmZXJSZW5kZXJlci5z
dG9wU2hhZG93ZWRSZW5kZXJpbmcoZHJhd2FibGUsIEdMLkdMX1RFWFRVUkUxKTsNCiAgICB9DQoN
CiAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGRyYXdGbG9hdGluZ1RlYXBvdChHTEF1dG9EcmF3YWJs
ZSBkcmF3YWJsZSkNCiAgICB7DQogICAgICAgIEdMIGdsID0gZHJhd2FibGUuZ2V0R0woKTsNCg0K
ICAgICAgICBnbC5nbFB1c2hBdHRyaWIoR0wuR0xfVFJBTlNGT1JNX0JJVCk7DQogICAgICAgIHsN
CiAgICAgICAgICAgIGdsLmdsTWF0cml4TW9kZShHTC5HTF9NT0RFTFZJRVcpOw0KICAgICAgICAg
ICAgZ2wuZ2xQdXNoTWF0cml4KCk7DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgZ2wu
Z2xUcmFuc2xhdGVkKDAuNSwgMCwgMyk7DQogICAgICAgICAgICAgICAgZ2x1dC5nbHV0U29saWRU
ZWFwb3QoMC4yNSwgdHJ1ZSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBnbC5nbFBvcE1h
dHJpeCgpOw0KICAgICAgICB9DQogICAgICAgIGdsLmdsUG9wQXR0cmliKCk7DQogICAgfQ0KDQog
ICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkcmF3U3F1YXJlKEdMQXV0b0RyYXdhYmxlIGRyYXdhYmxl
KQ0KICAgIHsNCiAgICAgICAgR0wgZ2wgPSBkcmF3YWJsZS5nZXRHTCgpOw0KDQogICAgICAgIGds
LmdsQmVnaW4oR0wuR0xfUVVBRFMpOw0KICAgICAgICB7DQogICAgICAgICAgICBnbC5nbE5vcm1h
bDNkKDAsIDAsIDEpOw0KICAgICAgICAgICAgZ2wuZ2xNdWx0aVRleENvb3JkMmQoR0wuR0xfVEVY
VFVSRTAsIDAsIDApOw0KICAgICAgICAgICAgZ2wuZ2xWZXJ0ZXgzZCgtMSwgLTEsIDApOw0KICAg
ICAgICAgICAgZ2wuZ2xNdWx0aVRleENvb3JkMmQoR0wuR0xfVEVYVFVSRTAsIDIsIDApOw0KICAg
ICAgICAgICAgZ2wuZ2xWZXJ0ZXgzZCgxLCAtMSwgMCk7DQogICAgICAgICAgICBnbC5nbE11bHRp
VGV4Q29vcmQyZChHTC5HTF9URVhUVVJFMCwgMiwgMik7DQogICAgICAgICAgICBnbC5nbFZlcnRl
eDNkKDEsIDEsIDApOw0KICAgICAgICAgICAgZ2wuZ2xNdWx0aVRleENvb3JkMmQoR0wuR0xfVEVY
VFVSRTAsIDAsIDIpOw0KICAgICAgICAgICAgZ2wuZ2xWZXJ0ZXgzZCgtMSwgMSwgMCk7DQogICAg
ICAgIH0NCiAgICAgICAgZ2wuZ2xFbmQoKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgdm9pZCBkaXNw
bGF5Q2hhbmdlZChHTEF1dG9EcmF3YWJsZSBkcmF3YWJsZSwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sZWFuIG1vZGVDaGFuZ2VkLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2xlYW4gZGV2aWNlQ2hhbmdlZCkNCiAgICB7DQogICAgICAgIC8vIE5vdGhpbmcg
dG8gZG8NCiAgICB9DQoNCiAgICBwdWJsaWMgdm9pZCByZXNoYXBlKEdMQXV0b0RyYXdhYmxlIGRy
YXdhYmxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsDQogICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgeSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQpDQogICAgew0KICAgICAgICAvLyBOb3RoaW5n
IHRvIGRvDQogICAgfQ0KDQogICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRnJhbWVidWZmZXJPYmpl
Y3RSZW5kZXJlcg0KICAgIHsNCiAgICAgICAgcHJpdmF0ZSBpbnQgdGV4dHVyZURpbWVuc2lvbjsN
Cg0KICAgICAgICBwcml2YXRlIGludCBmcmFtZUJ1ZmZlcklEOw0KICAgICAgICBwcml2YXRlIGlu
dCBjb2xvdXJUZXh0dXJlSUQ7DQogICAgICAgIHByaXZhdGUgaW50IGRlcHRoVGV4dHVyZUlEOw0K
DQogICAgICAgIHB1YmxpYyBGcmFtZWJ1ZmZlck9iamVjdFJlbmRlcmVyKGludCB0ZXh0dXJlRGlt
ZW5zaW9uKQ0KICAgICAgICB7DQogICAgICAgICAgICBzdXBlcigpOw0KDQogICAgICAgICAgICB0
aGlzLnRleHR1cmVEaW1lbnNpb24gPSB0ZXh0dXJlRGltZW5zaW9uOw0KICAgICAgICB9DQoNCiAg
ICAgICAgcHVibGljIHZvaWQgaW5pdChHTEF1dG9EcmF3YWJsZSBkcmF3YWJsZSkNCiAgICAgICAg
ew0KICAgICAgICAgICAgR0wgZ2wgPSBkcmF3YWJsZS5nZXRHTCgpOw0KDQogICAgICAgICAgICAv
LyBBbGxvY2F0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0DQogICAgICAgICAgICBpbnRbXSByZXN1
bHQgPSBuZXcgaW50WzFdOw0KICAgICAgICAgICAgZ2wuZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwg
cmVzdWx0LCAwKTsNCiAgICAgICAgICAgIGZyYW1lQnVmZmVySUQgPSByZXN1bHRbMF07DQogICAg
ICAgICAgICBnbC5nbEJpbmRGcmFtZWJ1ZmZlckVYVChHTC5HTF9GUkFNRUJVRkZFUl9FWFQsIGZy
YW1lQnVmZmVySUQpOw0KDQogICAgICAgICAgICAvLyBBbGxvY2F0ZSB0aGUgY29sb3VyIHRleHR1
cmUNCiAgICAgICAgICAgIGdsLmdsR2VuVGV4dHVyZXMoMSwgcmVzdWx0LCAwKTsNCiAgICAgICAg
ICAgIGNvbG91clRleHR1cmVJRCA9IHJlc3VsdFswXTsNCiAgICAgICAgICAgIGdsLmdsQmluZFRl
eHR1cmUoR0wuR0xfVEVYVFVSRV8yRCwgY29sb3VyVGV4dHVyZUlEKTsNCiAgICAgICAgICAgIGds
LmdsVGV4UGFyYW1ldGVyaShHTC5HTF9URVhUVVJFXzJELA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMLkdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTC5HTF9ORUFSRVNUKTsNCiAgICAgICAgICAgIGdsLmdsVGV4UGFyYW1ldGVy
aShHTC5HTF9URVhUVVJFXzJELA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMLkdM
X1RFWFRVUkVfTUFHX0ZJTFRFUiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTC5H
TF9ORUFSRVNUKTsNCiAgICAgICAgICAgIGdsLmdsVGV4UGFyYW1ldGVyaShHTC5HTF9URVhUVVJF
XzJELA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMLkdMX1RFWFRVUkVfV1JBUF9T
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMLkdMX0NMQU1QX1RPX0VER0UpOw0K
ICAgICAgICAgICAgZ2wuZ2xUZXhQYXJhbWV0ZXJpKEdMLkdMX1RFWFRVUkVfMkQsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0wuR0xfVEVYVFVSRV9XUkFQX1QsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0wuR0xfQ0xBTVBfVE9fRURHRSk7DQogICAgICAgICAgICBn
bC5nbFRleEltYWdlMkQoR0wuR0xfVEVYVFVSRV8yRCwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMLkdMX1JHQkE4LA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVEaW1lbnNpb24sDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZURpbWVuc2lvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMLkdMX1JHQkEsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0wuR0xfVU5TSUdORURfQllURSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBudWxsKTsNCg0KICAgICAgICAgICAgLy8gQWxsb2NhdGUgdGhlIGRlcHRoIHRl
eHR1cmUNCiAgICAgICAgICAgIGdsLmdsR2VuVGV4dHVyZXMoMSwgcmVzdWx0LCAwKTsNCiAgICAg
ICAgICAgIGRlcHRoVGV4dHVyZUlEID0gcmVzdWx0WzBdOw0KICAgICAgICAgICAgZ2wuZ2xCaW5k
VGV4dHVyZShHTC5HTF9URVhUVVJFXzJELCBkZXB0aFRleHR1cmVJRCk7DQogICAgICAgICAgICBn
bC5nbFRleFBhcmFtZXRlcmkoR0wuR0xfVEVYVFVSRV8yRCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTC5HTF9URVhUVVJFX01JTl9GSUxURVIsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0wuR0xfTkVBUkVTVCk7DQogICAgICAgICAgICBnbC5nbFRleFBhcmFtZXRl
cmkoR0wuR0xfVEVYVFVSRV8yRCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTC5H
TF9URVhUVVJFX01BR19GSUxURVIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0wu
R0xfTkVBUkVTVCk7DQogICAgICAgICAgICBnbC5nbFRleFBhcmFtZXRlcmkoR0wuR0xfVEVYVFVS
RV8yRCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTC5HTF9URVhUVVJFX1dSQVBf
UywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTC5HTF9DTEFNUF9UT19FREdFKTsN
CiAgICAgICAgICAgIGdsLmdsVGV4UGFyYW1ldGVyaShHTC5HTF9URVhUVVJFXzJELA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMLkdMX1RFWFRVUkVfV1JBUF9ULA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMLkdMX0NMQU1QX1RPX0VER0UpOw0KICAgICAgICAgICAg
Z2wuZ2xHZXRJbnRlZ2VydihHTC5HTF9ERVBUSF9CSVRTLCByZXN1bHQsIDApOw0KICAgICAgICAg
ICAgaW50IGRlcHRoRm9ybWF0Ow0KICAgICAgICAgICAgc3dpdGNoIChyZXN1bHRbMF0pDQogICAg
ICAgICAgICB7DQogICAgICAgICAgICAgICAgY2FzZSAxNjoNCiAgICAgICAgICAgICAgICAgICAg
ZGVwdGhGb3JtYXQgPSBHTC5HTF9ERVBUSF9DT01QT05FTlQxNjsNCiAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAyNDoNCiAgICAgICAgICAgICAgICAgICAg
ZGVwdGhGb3JtYXQgPSBHTC5HTF9ERVBUSF9DT01QT05FTlQyNDsNCiAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAzMjoNCiAgICAgICAgICAgICAgICAgICAg
ZGVwdGhGb3JtYXQgPSBHTC5HTF9ERVBUSF9DT01QT05FTlQzMjsNCiAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7DQogICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IEdMRXhjZXB0aW9uKCJVbmV4cGVjdGVkIG51bWJlciBvZiBkZXB0aCBiaXRzOiAi
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHJlc3VsdFswXSk7
DQogICAgICAgICAgICB9DQogICAgICAgICAgICBnbC5nbFRleEltYWdlMkQoR0wuR0xfVEVYVFVS
RV8yRCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlcHRoRm9ybWF0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVEaW1lbnNpb24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZURpbWVuc2lv
biwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMLkdMX0RFUFRIX0NPTVBPTkVOVCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTC5HTF9VTlNJR05FRF9JTlQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCk7
DQoNCiAgICAgICAgICAgIC8vIEF0dGFjaCB0aGUgdGV4dHVyZXMgdG8gdGhlIGZyYW1lYnVmZmVy
DQogICAgICAgICAgICBnbC5nbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMLkdMX0ZSQU1FQlVG
RkVSX0VYVCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0wuR0xf
Q09MT1JfQVRUQUNITUVOVDBfRVhULA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTC5HTF9URVhUVVJFXzJELA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb2xvdXJUZXh0dXJlSUQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDApOw0KICAgICAgICAgICAgZ2wuZ2xGcmFtZWJ1ZmZlclRleHR1cmUyREVY
VChHTC5HTF9GUkFNRUJVRkZFUl9FWFQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMLkdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTC5HTF9URVhUVVJFXzJELA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aFRleHR1cmVJRCwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7DQogICAgICAgICAgICANCiAgICAgICAgICAg
IGdsLmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMLkdMX0ZSQU1FQlVGRkVSX0VYVCwgMCk7DQogICAg
ICAgIH0NCg0KICAgICAgICBwcml2YXRlIGludCBjb3VudGVyID0gMDsNCg0KICAgICAgICBwdWJs
aWMgdm9pZCByZW5kZXJUb0ZyYW1lQnVmZmVyKEdMQXV0b0RyYXdhYmxlIGRyYXdhYmxlKQ0KICAg
ICAgICB7DQogICAgICAgICAgICBHTCBnbCA9IGRyYXdhYmxlLmdldEdMKCk7DQoNCiAgICAgICAg
ICAgIGdsLmdsUHVzaEF0dHJpYihHTC5HTF9UUkFOU0ZPUk1fQklUIHwgR0wuR0xfRU5BQkxFX0JJ
VA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0wuR0xfQ09MT1JfQlVGRkVSX0JJVCk7
DQoNCiAgICAgICAgICAgIGdsLmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMLkdMX0ZSQU1FQlVGRkVS
X0VYVCwgZnJhbWVCdWZmZXJJRCk7DQoNCiAgICAgICAgICAgIGdsLmdsRW5hYmxlKEdMLkdMX0RF
UFRIX1RFU1QpOw0KICAgICAgICAgICAgZ2wuZ2xFbmFibGUoR0wuR0xfTk9STUFMSVpFKTsNCiAg
ICAgICAgICAgIGdsLmdsRGlzYWJsZShHTC5HTF9MSUdIVElORyk7DQoNCiAgICAgICAgICAgIGds
LmdsQ2xlYXJDb2xvcigwLCAwLCAxLCAwKTsNCg0KICAgICAgICAgICAgLy8gUGxhY2UgdGhlIG9m
ZnNjcmVlbiBjYW1lcmEgYXQgdGhlIGxpZ2h0IHBvc2l0aW9uDQogICAgICAgICAgICBnbC5nbE1h
dHJpeE1vZGUoR0wuR0xfUFJPSkVDVElPTik7DQogICAgICAgICAgICBnbC5nbFB1c2hNYXRyaXgo
KTsNCiAgICAgICAgICAgIGdsLmdsTG9hZElkZW50aXR5KCk7DQogICAgICAgICAgICBhcHBseUxp
Z2h0RnJ1c3R1bShnbCk7DQoNCiAgICAgICAgICAgIGdsLmdsTWF0cml4TW9kZShHTC5HTF9NT0RF
TFZJRVcpOw0KICAgICAgICAgICAgZ2wuZ2xQdXNoTWF0cml4KCk7DQogICAgICAgICAgICBnbC5n
bExvYWRJZGVudGl0eSgpOw0KICAgICAgICAgICAgYXBwbHlMaWdodFRyYW5zZm9ybWF0aW9uKGds
KTsNCg0KICAgICAgICAgICAgZ2wuZ2xDbGVhcihHTC5HTF9DT0xPUl9CVUZGRVJfQklUIHwgR0wu
R0xfREVQVEhfQlVGRkVSX0JJVCk7DQoNCiAgICAgICAgICAgIC8vIERyYXcgdGhlIHRlYXBvdCBh
cyBhIHJlZCBzaWxob3VldHRlDQogICAgICAgICAgICBpZiAoY291bnRlcisrICUgMiA9PSAwKQ0K
ICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGdsLmdsQ29sb3IzZCgxLCAwLCAwKTsNCiAg
ICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg
ICAgICBnbC5nbENvbG9yM2QoMCwgMSwgMCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBk
cmF3RmxvYXRpbmdUZWFwb3QoZHJhd2FibGUpOw0KICAgICAgICAgICAgLy8gRG9uJ3QgZHJhdyB0
aGUgc3F1YXJlIChiZWNhdXNlIHdlIGRvbid0IHdhbnQgaXQgdG8gY2FzdCBhIHNoYWRvdykNCg0K
ICAgICAgICAgICAgLy8gVW5iaW5kIHRoZSBmcmFtZWJ1ZmZlcg0KICAgICAgICAgICAgZ2wuZ2xC
aW5kRnJhbWVidWZmZXJFWFQoR0wuR0xfRlJBTUVCVUZGRVJfRVhULCAwKTsNCg0KICAgICAgICAg
ICAgZ2wuZ2xNYXRyaXhNb2RlKEdMLkdMX1BST0pFQ1RJT04pOw0KICAgICAgICAgICAgZ2wuZ2xQ
b3BNYXRyaXgoKTsNCiAgICAgICAgICAgIGdsLmdsTWF0cml4TW9kZShHTC5HTF9NT0RFTFZJRVcp
Ow0KICAgICAgICAgICAgZ2wuZ2xQb3BNYXRyaXgoKTsNCiAgICAgICAgICAgIGdsLmdsUG9wQXR0
cmliKCk7DQogICAgICAgIH0NCg0KICAgICAgICBwcml2YXRlIHZvaWQgYXBwbHlMaWdodEZydXN0
dW0oR0wgZ2wpDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIFNldCB1cCB0aGUgdmlld2luZyBm
cnVzdHVtIHNvIHRoYXQgdGhlIGxpZ2h0IG9ubHkgc2VlcyB0aGUNCiAgICAgICAgICAgIC8vIHZv
bHVtZSBiZXR3ZWVuIGl0c2VsZiBhbmQgdGhlIHVuaXQgWC1ZIHNxdWFyZSBhdCB0aGUgb3JpZ2lu
DQogICAgICAgICAgICAvLyAoYmVjYXVzZSB0aGF0IGlzIHRoZSBvbmx5IHZvbHVtZSBpbiB3aGlj
aCB3ZSB3aWxsIGJlIGNhc3RpbmcNCiAgICAgICAgICAgIC8vIHNoYWRvd3MpLg0KICAgICAgICAg
ICAgZ2wuZ2xGcnVzdHVtKC0yLjAgLyAxMCwgMCwgLTEuMCAvIDEwLCAxLjAgLyAxMCwgMSwgMTAp
Ow0KICAgICAgICB9DQoNCiAgICAgICAgcHJpdmF0ZSB2b2lkIGFwcGx5TGlnaHRUcmFuc2Zvcm1h
dGlvbihHTCBnbCkNCiAgICAgICAgew0KICAgICAgICAgICAgZ2wuZ2xUcmFuc2xhdGVkKC1saWdo
dFBvc2l0aW9uWzBdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1saWdodFBvc2l0aW9u
WzFdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1saWdodFBvc2l0aW9uWzJdKTsNCiAg
ICAgICAgfQ0KDQogICAgICAgIHB1YmxpYyB2b2lkIHByZXBhcmVGb3JTaGFkb3dlZFJlbmRlcmlu
ZyhHTEF1dG9EcmF3YWJsZSB0YXJnZXREcmF3YWJsZSwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0ZXh0dXJlVW5pdElEKQ0KICAgICAgICB7DQog
ICAgICAgICAgICBHTCBnbCA9IHRhcmdldERyYXdhYmxlLmdldEdMKCk7DQoNCiAgICAgICAgICAg
IC8vIFRoZSBzdGF0ZSBtb2RpZmllZCBieSB0aGlzIHByZXBhcmF0aW9uIHdpbGwgYmUgcmVzdG9y
ZWQgYnkgYSBjYWxsDQogICAgICAgICAgICAvLyB0byBmaW5pc2hTaGFkb3dlZFJlbmRlcmluZygp
DQogICAgICAgICAgICBnbC5nbFB1c2hBdHRyaWIoR0wuR0xfVEVYVFVSRV9CSVQpOw0KDQogICAg
ICAgICAgICBnbC5nbEFjdGl2ZVRleHR1cmUodGV4dHVyZVVuaXRJRCk7DQogICAgICAgICAgICBn
bC5nbEJpbmRUZXh0dXJlKEdMLkdMX1RFWFRVUkVfMkQsIGRlcHRoVGV4dHVyZUlEKTsNCiAgICAg
ICAgICAgIGdsLmdsUHVzaEF0dHJpYihHTC5HTF9URVhUVVJFX0JJVCk7DQogICAgICAgICAgICAv
LyBHZW5lcmF0ZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIC0gYW4gb2JqZWN0LWxpbmVhciB0ZXh0dXJl
DQogICAgICAgICAgICAvLyBnZW5lcmF0aW9uIHRoYXQgc2V0cyB0aGUgdGV4dHVyZSBjb29yZGlu
YXRlcyB0byBiZSB0aGUNCiAgICAgICAgICAgIC8vIG9iamVjdC1zcGFjZSB2ZXJ0ZXggY29vcmRp
bmF0ZXMgKHdlIHdpbGwgdXNlIHRoZSB0ZXh0dXJlIG1hdHJpeA0KICAgICAgICAgICAgLy8gdG8g
dHJhbnNmb3JtIGZyb20gb2JqZWN0LXNwYWNlIHRvIGxpZ2h0LXNwYWNlKQ0KICAgICAgICAgICAg
Z2wuZ2xFbmFibGUoR0wuR0xfVEVYVFVSRV9HRU5fUyk7DQogICAgICAgICAgICBnbC5nbEVuYWJs
ZShHTC5HTF9URVhUVVJFX0dFTl9UKTsNCiAgICAgICAgICAgIGdsLmdsRW5hYmxlKEdMLkdMX1RF
WFRVUkVfR0VOX1IpOw0KICAgICAgICAgICAgZ2wuZ2xFbmFibGUoR0wuR0xfVEVYVFVSRV9HRU5f
USk7DQogICAgICAgICAgICBnbC5nbFRleEdlbmkoR0wuR0xfUywgR0wuR0xfVEVYVFVSRV9HRU5f
TU9ERSwgR0wuR0xfT0JKRUNUX0xJTkVBUik7DQogICAgICAgICAgICBnbC5nbFRleEdlbmkoR0wu
R0xfVCwgR0wuR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0wuR0xfT0JKRUNUX0xJTkVBUik7DQogICAg
ICAgICAgICBnbC5nbFRleEdlbmkoR0wuR0xfUiwgR0wuR0xfVEVYVFVSRV9HRU5fTU9ERSwgR0wu
R0xfT0JKRUNUX0xJTkVBUik7DQogICAgICAgICAgICBnbC5nbFRleEdlbmkoR0wuR0xfUSwgR0wu
R0xfVEVYVFVSRV9HRU5fTU9ERSwgR0wuR0xfT0JKRUNUX0xJTkVBUik7DQogICAgICAgICAgICBn
bC5nbFB1c2hBdHRyaWIoR0wuR0xfVFJBTlNGT1JNX0JJVCk7DQogICAgICAgICAgICB7DQogICAg
ICAgICAgICAgICAgZ2wuZ2xNYXRyaXhNb2RlKEdMLkdMX01PREVMVklFVyk7DQogICAgICAgICAg
ICAgICAgZ2wuZ2xQdXNoTWF0cml4KCk7DQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAg
ICAgICAgICBnbC5nbExvYWRJZGVudGl0eSgpOw0KICAgICAgICAgICAgICAgICAgICBmbG9hdFtd
IG9iamVjdFBsYW5lID0gbmV3IGZsb2F0W10NCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAg
ICAgICAgICAgICAgICAgICAgMSwgMCwgMCwgMA0KICAgICAgICAgICAgICAgICAgICB9Ow0KICAg
ICAgICAgICAgICAgICAgICBnbC5nbFRleEdlbmZ2KEdMLkdMX1MsIEdMLkdMX09CSkVDVF9QTEFO
RSwgb2JqZWN0UGxhbmUsIDApOw0KICAgICAgICAgICAgICAgICAgICBvYmplY3RQbGFuZVswXSA9
IDA7DQogICAgICAgICAgICAgICAgICAgIG9iamVjdFBsYW5lWzFdID0gMTsNCiAgICAgICAgICAg
ICAgICAgICAgZ2wuZ2xUZXhHZW5mdihHTC5HTF9ULCBHTC5HTF9PQkpFQ1RfUExBTkUsIG9iamVj
dFBsYW5lLCAwKTsNCiAgICAgICAgICAgICAgICAgICAgb2JqZWN0UGxhbmVbMV0gPSAwOw0KICAg
ICAgICAgICAgICAgICAgICBvYmplY3RQbGFuZVsyXSA9IDE7DQogICAgICAgICAgICAgICAgICAg
IGdsLmdsVGV4R2VuZnYoR0wuR0xfUiwgR0wuR0xfT0JKRUNUX1BMQU5FLCBvYmplY3RQbGFuZSwg
MCk7DQogICAgICAgICAgICAgICAgICAgIG9iamVjdFBsYW5lWzJdID0gMDsNCiAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0UGxhbmVbM10gPSAxOw0KICAgICAgICAgICAgICAgICAgICBnbC5nbFRl
eEdlbmZ2KEdMLkdMX1EsIEdMLkdMX09CSkVDVF9QTEFORSwgb2JqZWN0UGxhbmUsIDApOw0KICAg
ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBnbC5nbFBvcE1hdHJpeCgpOw0KDQogICAg
ICAgICAgICAgICAgLy8gTW9kaWZ5IHRleHR1cmUgbWF0cml4IC0gdGhlIHRleHR1cmUgbWF0cml4
IHdpbGwgdHJhbnNmb3JtDQogICAgICAgICAgICAgICAgLy8gZnJvbSBvYmplY3Qtc3BhY2UgY29v
cmRpbmF0ZXMgdG8gbGlnaHQtc3BhY2UgKGkuZS4gdGhlIHNhbWUNCiAgICAgICAgICAgICAgICAv
LyB0cmFuc2Zvcm1hdGlvbiB0aGF0IHdhcyBhcHBsaWVkIHdoZW4gcmVuZGVyaW5nIHRoZSBzaGFk
b3cNCiAgICAgICAgICAgICAgICAvLyB0ZXh0dXJlKQ0KICAgICAgICAgICAgICAgIGdsLmdsTWF0
cml4TW9kZShHTC5HTF9URVhUVVJFKTsNCiAgICAgICAgICAgICAgICAvLyBUaGUgdGV4dHVyZSBt
YXRyaXggd2lsbCBiZSByZXN0b3JlZCBieQ0KICAgICAgICAgICAgICAgIC8vIHN0b3BTaGFkb3dl
ZFJlbmRlcmluZygpDQogICAgICAgICAgICAgICAgZ2wuZ2xQdXNoTWF0cml4KCk7DQogICAgICAg
ICAgICAgICAgZ2wuZ2xMb2FkSWRlbnRpdHkoKTsNCiAgICAgICAgICAgICAgICAvLyBHbyBmcm9t
IHRoZSB1bml0IHNxdWFyZSB0byB0aGUgdXBwZXIgcXVhZHJhbnQgKGJlY2F1c2UNCiAgICAgICAg
ICAgICAgICAvLyB0ZXh0dXJlIGNvb3JkcyBydW4gZnJvbSAwIHRvIDEpDQogICAgICAgICAgICAg
ICAgZ2wuZ2xTY2FsZWYoMC41ZiwgMC41ZiwgMC41Zik7DQogICAgICAgICAgICAgICAgZ2wuZ2xU
cmFuc2xhdGVmKDEsIDEsIDEpOw0KICAgICAgICAgICAgICAgIC8vIEFwcGx5IHRoZSB0cmFuc2Zv
cm1hdGlvbiB0byBsaWdodC1zcGFjZQ0KICAgICAgICAgICAgICAgIGFwcGx5TGlnaHRGcnVzdHVt
KGdsKTsNCiAgICAgICAgICAgICAgICBhcHBseUxpZ2h0VHJhbnNmb3JtYXRpb24oZ2wpOw0KICAg
ICAgICAgICAgfQ0KICAgICAgICAgICAgZ2wuZ2xQb3BBdHRyaWIoKTsNCg0KICAgICAgICAgICAg
Ly8gU2V0IHRoZSB0ZXh0dXJlIHVwIHRvIGJlIHVzZWQgYXMgYSBkZXB0aCBjb21wYXJpc29uDQog
ICAgICAgICAgICBpbnQgdGV4dHVyZVRhcmdldCA9IEdMLkdMX1RFWFRVUkVfMkQ7DQogICAgICAg
ICAgICBnbC5nbEVuYWJsZSh0ZXh0dXJlVGFyZ2V0KTsNCiAgICAgICAgICAgIGdsLmdsVGV4RW52
aShHTC5HTF9URVhUVVJFX0VOViwNCiAgICAgICAgICAgICAgICAgICAgICAgICBHTC5HTF9URVhU
VVJFX0VOVl9NT0RFLA0KICAgICAgICAgICAgICAgICAgICAgICAgIEdMLkdMX01PRFVMQVRFKTsN
CiAgICAgICAgICAgIGdsLmdsVGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMLkdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTC5HTF9MSU5FQVIpOw0KICAgICAgICAgICAgZ2wuZ2xU
ZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0wuR0xfVEVYVFVSRV9NQUdfRklMVEVSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMLkdMX0xJTkVBUik7DQogICAgICAgICAgICBnbC5nbFRleFBhcmFtZXRlcmkodGV4dHVy
ZVRhcmdldCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTC5HTF9URVhUVVJFX1dS
QVBfUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTC5HTF9DTEFNUF9UT19FREdF
KTsNCiAgICAgICAgICAgIGdsLmdsVGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMLkdMX1RFWFRVUkVfV1JBUF9ULA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMLkdMX0NMQU1QX1RPX0VER0UpOw0KICAgICAgICAgICAg
Z2wuZ2xUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0wuR0xfVEVYVFVSRV9DT01QQVJFX01PREUsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0wuR0xfQ09NUEFSRV9SX1RPX1RFWFRVUkUpOw0KICAgICAgICAgICAgZ2wu
Z2xUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0wuR0xfVEVYVFVSRV9DT01QQVJFX0ZVTkMsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0wuR0xfTEVRVUFMKTsNCiAgICAgICAgICAgIGdsLmdsVGV4UGFyYW1ldGVyaSh0
ZXh0dXJlVGFyZ2V0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMLkdMX0RFUFRI
X1RFWFRVUkVfTU9ERSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTC5HTF9MVU1J
TkFOQ0UpOw0KICAgICAgICB9DQoNCiAgICAgICAgcHVibGljIHZvaWQgc3RvcFNoYWRvd2VkUmVu
ZGVyaW5nKEdMQXV0b0RyYXdhYmxlIHRhcmdldERyYXdhYmxlLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRleHR1cmVVbml0SUQpDQogICAgICAgIHsNCiAg
ICAgICAgICAgIEdMIGdsID0gdGFyZ2V0RHJhd2FibGUuZ2V0R0woKTsNCiAgICAgICAgICAgIGds
LmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlVW5pdElEKTsNCiAgICAgICAgICAgIGdsLmdsUHVzaEF0
dHJpYihHTC5HTF9UUkFOU0ZPUk1fQklUKTsNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg
ICBnbC5nbE1hdHJpeE1vZGUoR0wuR0xfVEVYVFVSRSk7DQogICAgICAgICAgICAgICAgZ2wuZ2xQ
b3BNYXRyaXgoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGdsLmdsUG9wQXR0cmliKCk7
DQoNCiAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIHRleHR1cmUgYXR0cmlidXRlcyBmb3IgdGhl
IHRleHR1cmVVbml0aCB0ZXh0dXJlDQogICAgICAgICAgICBnbC5nbFBvcEF0dHJpYigpOw0KDQog
ICAgICAgICAgICAvLyBVbmJpbmQgdGhlIGRlcHRoIHRleHR1cmUNCiAgICAgICAgICAgIGdsLmds
QmluZFRleHR1cmUoR0wuR0xfVEVYVFVSRV8yRCwgMCk7DQoNCiAgICAgICAgICAgIC8vIFJlc3Rv
cmUgdGhlIGFjdGl2ZSB0ZXh0dXJlDQogICAgICAgICAgICBnbC5nbFBvcEF0dHJpYigpOw0KICAg
ICAgICB9DQoNCiAgICAgICAgcHVibGljIHZvaWQgcHJlcGFyZUZvckNvbG91cmVkUmVuZGVyaW5n
KEdMQXV0b0RyYXdhYmxlIHRhcmdldERyYXdhYmxlLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRleHR1cmVVbml0SUQpDQogICAgICAgIHsNCiAg
ICAgICAgICAgIEdMIGdsID0gdGFyZ2V0RHJhd2FibGUuZ2V0R0woKTsNCg0KICAgICAgICAgICAg
Ly8gVGhlIHN0YXRlIG1vZGlmaWVkIGJ5IHRoaXMgcHJlcGFyYXRpb24gd2lsbCBiZSByZXN0b3Jl
ZCBieSBhIGNhbGwNCiAgICAgICAgICAgIC8vIHRvIGZpbmlzaFNoYWRvd2VkUmVuZGVyaW5nKCkN
CiAgICAgICAgICAgIGdsLmdsUHVzaEF0dHJpYihHTC5HTF9URVhUVVJFX0JJVCk7DQoNCiAgICAg
ICAgICAgIGdsLmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlVW5pdElEKTsNCiAgICAgICAgICAgIGds
LmdsQmluZFRleHR1cmUoR0wuR0xfVEVYVFVSRV8yRCwgY29sb3VyVGV4dHVyZUlEKTsNCg0KICAg
ICAgICAgICAgLy8gU2V0IHRoZSB0ZXh0dXJlIHVwIHRvIGJlIHVzZWQgZm9yIHBhaW50aW5nIGEg
c3VyZmFjZQ0KICAgICAgICAgICAgaW50IHRleHR1cmVUYXJnZXQgPSBHTC5HTF9URVhUVVJFXzJE
Ow0KICAgICAgICAgICAgZ2wuZ2xFbmFibGUodGV4dHVyZVRhcmdldCk7DQogICAgICAgICAgICBn
bC5nbFRleEVudmkoR0wuR0xfVEVYVFVSRV9FTlYsDQogICAgICAgICAgICAgICAgICAgICAgICAg
R0wuR0xfVEVYVFVSRV9FTlZfTU9ERSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBHTC5HTF9N
T0RVTEFURSk7DQogICAgICAgICAgICBnbC5nbFRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTC5HTF9URVhUVVJFX01JTl9GSUxURVIs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0wuR0xfTElORUFSKTsNCiAgICAgICAg
ICAgIGdsLmdsVGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMLkdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTC5HTF9MSU5FQVIpOw0KICAgICAgICAgICAgZ2wuZ2xUZXhQYXJhbWV0
ZXJpKHRleHR1cmVUYXJnZXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0wuR0xf
VEVYVFVSRV9XUkFQX1MsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0wuR0xfUkVQ
RUFUKTsNCiAgICAgICAgICAgIGdsLmdsVGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMLkdMX1RFWFRVUkVfV1JBUF9ULA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMLkdMX1JFUEVBVCk7DQogICAgICAgIH0NCg0KICAg
ICAgICBwdWJsaWMgdm9pZCBzdG9wQ29sb3VyZWRSZW5kZXJpbmcoR0xBdXRvRHJhd2FibGUgdGFy
Z2V0RHJhd2FibGUpDQogICAgICAgIHsNCiAgICAgICAgICAgIEdMIGdsID0gdGFyZ2V0RHJhd2Fi
bGUuZ2V0R0woKTsNCg0KICAgICAgICAgICAgZ2wuZ2xCaW5kVGV4dHVyZShHTC5HTF9URVhUVVJF
XzJELCAwKTsNCg0KICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgYWN0aXZlIHRleHR1cmUNCiAg
ICAgICAgICAgIGdsLmdsUG9wQXR0cmliKCk7DQogICAgICAgIH0NCg0KICAgIH0NCg0KfQ0K
</data>

          </attachment>
      

    </bug>

</bugzilla>