<?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>522</bug_id>
          
          <creation_ts>2011-11-03 02:04:10 +0100</creation_ts>
          <short_desc>Problem when starting jar which uses jogl from eclipse</short_desc>
          <delta_ts>2011-12-02 07:59:40 +0100</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>3</classification_id>
          <classification>JogAmp</classification>
          <product>Gluegen</product>
          <component>core</component>
          <version>2</version>
          <rep_platform>pc_x86_32</rep_platform>
          <op_sys>windows</op_sys>
          <bug_status>VERIFIED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>---</priority>
          <bug_severity>major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>peter.schauss</reporter>
          <assigned_to name="Sven Gothel">sgothel</assigned_to>
          <cc>wwalker3</cc>
          
          <cf_type>DEFECT</cf_type>
          <cf_scm_refs>04391a3f417e10e1b6dafbd8becc63659af633c3
c6091024864e0fc9069683534370306838eb371a</cf_scm_refs>
          <cf_workaround>---</cf_workaround>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1165</commentid>
    <comment_count>0</comment_count>
    <who name="">peter.schauss</who>
    <bug_when>2011-11-03 02:04:10 +0100</bug_when>
    <thetext>Maybe this is only a follow-up bug, but i keep on getting an error when trying to start a jar which is using jogl.
I tried to use the described library-technique from http://jogamp.org/wiki/index.php/Setting_up_a_JogAmp_project_in_your_favorite_IDE with eclipse.


Resource strings without directory path lead to crash:
For example:
IOUtil.getClassURL-&gt;jar:rsrc:gluegen.jar!/com/jogamp/common/util/cache/TempJarCa
che.class
getJarURL-&gt;jar:rsrc:gluegen.jar!/

getJarURLDirname fails on this URL at

final URL jarUrlRoot = JarUtil.getJarURLDirname

in

Platform.loadGlueGenRTImpl


Exception in thread &quot;main&quot; java.lang.ExceptionInInitializerError
        at javax.media.opengl.GLProfile.&lt;clinit&gt;(GLProfile.java:1155)
        at demos.jgears.JGears.&lt;clinit&gt;(JGears.java:47)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:56)
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range:
 -4
        at java.lang.String.substring(Unknown Source)
        at com.jogamp.common.util.JarUtil.getJarURLDirname(JarUtil.java:114)
        at com.jogamp.common.os.Platform$3.run(Platform.java:305)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.jogamp.common.os.Platform.loadGlueGenRTImpl(Platform.java:299)
        at com.jogamp.common.os.Platform.&lt;clinit&gt;(Platform.java:208)
        ... 5 more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166</commentid>
    <comment_count>1</comment_count>
    <who name="">peter.schauss</who>
    <bug_when>2011-11-04 10:11:10 +0100</bug_when>
    <thetext>Changing the directory of the jogl jar in the deployed jar is a workaround here.
The bug only occurs if the jogl and gluegen jars are in the root of the deployed jar.
This is the default for the eclipse jar export when using a library.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179</commentid>
    <comment_count>2</comment_count>
      <attachid>293</attachid>
    <who name="">peter.schauss</who>
    <bug_when>2011-11-13 15:46:25 +0100</bug_when>
    <thetext>Created attachment 293
Modified JarUtil.java which does not show the problem (not clean)

The are several problems in the old JarUtil class. 
On the one hand and empty directory in the URL leads to an String-Error. The other problem is that the URL could have another protocol, e.g. if one uses onejar, then the protocol would look different, at the moment it is hard-coded length and it is not even checked if the first chars are what expected.
The attached file is not a clean fix but a proposal in which direction to change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218</commentid>
    <comment_count>3</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2011-11-28 05:55:37 +0100</bug_when>
    <thetext>Hi Peter, I have troubles to reproduce your case.

Here is what I have done:

1) Set up a vanilla eclipse (3.7.0) workspace

2) Add the JOGL User Library:
  - Window.Preference
   - Java.Build_Path.User_Libraries:
     + JOGL
        + gluegen-rt.jar
        + jogl.all.jar
        + gluegen-rt-natives-linux-amd64.jar
        + jogl-all-natives-linux-amd64.jar
        (you may add all other native JARs here)

3) New test project 
  -  Right-click your project in the Package Explorer and click &quot;Properties&quot;.
       - Select &quot;Java Build Path&quot; and click the &quot;Libraries&quot; tab. 
          + JOGL
  - Add some simple code ..
  - Run as Java Application ..

4)  Export
  - Right-click your project in the Package Explorer and click &quot;Export&quot;
    - Select Java.Runnable_JAR_file
      + Launch configuration
      + some destination path
      + Library handling: Copy required libraries into a sub-folder next to the generated JAR

Result:

./lala01.jar
./lala01_lib/jogl.all.jar
./lala01_lib/jogl-all-natives-linux-amd64.jar
./lala01_lib/... etc ..

The libs are all in the resulting classpath (of the JAR&apos;s MANIFEST), well .. it doesn&apos;t hurt.

Obviously you are referring to a different process, please elaborate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219</commentid>
    <comment_count>4</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2011-11-28 05:56:44 +0100</bug_when>
    <thetext>Adding Wade to validate my trial @ comment 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223</commentid>
    <comment_count>5</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2011-11-28 21:37:30 +0100</bug_when>
    <thetext>Ok .. it&apos;s a jar in a jar (at root) .. I add a test case for this and use your ideas to better the JarUtil class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224</commentid>
    <comment_count>6</comment_count>
    <who name="Wade Walker">wwalker3</who>
    <bug_when>2011-11-29 04:17:59 +0100</bug_when>
    <thetext>(to Sven, regarding comment #3)

Let me know when (or if) I need to validate something here still.

When exporting a JAR from Eclipse, usually people either choose to put the library JARs inside the exported JAR, or to unpack the library JARs inside the exported JAR, so hopefully either case will work with JOGL. The one you chose (unpack in a directory beside the JAR) is not as common, though we should still support it. I guess people like their exported JARs to be self-contained :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225</commentid>
    <comment_count>7</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2011-11-29 05:29:55 +0100</bug_when>
    <thetext>JarUtil: Improve Robustness (Bug 522) and API doc, prepare for Jar-In-Jar. Add unit test.
  http://jogamp.org/git/?p=gluegen.git;a=commit;h=04391a3f417e10e1b6dafbd8becc63659af633c3

JarUtil (Fix Bug 522): Handle case where given URL doesn&apos;t contain any &apos;/&apos; (eg. Eclipse &apos;rsrc:&apos; case)
  http://jogamp.org/git/?p=gluegen.git;a=commit;h=c6091024864e0fc9069683534370306838eb371a

    Manual tested w/ Eclipse:
    
    Preparations:
    ===============
    
    1) Set up a vanilla eclipse (3.7.0) workspace
    
    2) Add the JOGL User Library:
      - Window.Preference
       - Java.Build_Path.User_Libraries:
         + JOGL
            + gluegen-rt.jar
            + jogl.all.jar
            + gluegen-rt-natives-linux-amd64.jar
            + jogl-all-natives-linux-amd64.jar
    
            You may add all other native JARs here.
            Note that these are not required in the CLASSPATH by JOGL,
            however, they are required by Eclipse to export your project as a Runnable JAR File.

    3) New test project
      -  Right-click your project in the Package Explorer and click &quot;Properties&quot;.
           - Select &quot;Java Build Path&quot; and click the &quot;Libraries&quot; tab.
              + JOGL
      - Add some simple code ..
      - Run as Java Application ..
    
    Test-1:
    =========
    
    Export
      - Right-click your project in the Package Explorer and click &quot;Export&quot;
        - Select Java.Runnable_JAR_file
          + Launch configuration
          + some destination path
          + Library handling:
            Copy required libraries into a sub-folder next to the generated JAR
    
    Result: Works!
    
    ./lala01.jar
    ./lala01_lib/jogl.all.jar
    ./lala01_lib/jogl-all-natives-linux-amd64.jar
    ./lala01_lib/... etc ..
    
    Test-2:
    =========
    
    Export
      - Right-click your project in the Package Explorer and click &quot;Export&quot;
        - Select Java.Runnable_JAR_file
          + Launch configuration
          + some destination path
          + Library handling:
            Package required libraries into generated JAR

    Result: Works!
    
    ./lala02.jar:
      Manifest-Version: 1.0
      Rsrc-Class-Path: ./ gluegen-rt-natives-linux-amd64.jar gluegen-rt.jar
                          jogl-all-natives-linux-amd64.jar jogl.all.jar
      Class-Path: .
      Rsrc-Main-Class: Test01
      Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>293</attachid>
            <date>2011-11-13 15:46:25 +0100</date>
            <delta_ts>2011-11-13 15:46:25 +0100</delta_ts>
            <desc>Modified JarUtil.java which does not show the problem (not clean)</desc>
            <filename>JarUtil.java</filename>
            <type>text/plain</type>
            <size>16124</size>
            <attacher>peter.schauss</attacher>
            
              <data encoding="base64">cGFja2FnZSBjb20uam9nYW1wLmNvbW1vbi51dGlsOwoKaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJ
bnB1dFN0cmVhbTsKaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRPdXRwdXRTdHJlYW07CmltcG9ydCBq
YXZhLmlvLkZpbGU7CmltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CmltcG9ydCBqYXZh
LmlvLklPRXhjZXB0aW9uOwppbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKaW1wb3J0IGphdmEu
aW8uT3V0cHV0U3RyZWFtOwppbXBvcnQgamF2YS5uZXQuSmFyVVJMQ29ubmVjdGlvbjsKaW1wb3J0
IGphdmEubmV0LlVSTDsKaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247CmltcG9ydCBqYXZh
LnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGU7CmltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247
CmltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKaW1wb3J0IGphdmEudXRpbC5NYXA7CmltcG9ydCBq
YXZhLnV0aWwuamFyLkphckVudHJ5OwppbXBvcnQgamF2YS51dGlsLmphci5KYXJGaWxlOwoKaW1w
b3J0IGNvbS5qb2dhbXAuY29tbW9uLm9zLk5hdGl2ZUxpYnJhcnk7CmltcG9ydCBjb20uam9nYW1w
LmNvbW1vbi51dGlsLklPVXRpbDsKCmltcG9ydCBqb2dhbXAuY29tbW9uLkRlYnVnOwoKcHVibGlj
IGNsYXNzIEphclV0aWwgewogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9
IERlYnVnLmRlYnVnKCJKYXJVdGlsIik7CgogICAgc3RhdGljIHsKICAgIAlTeXN0ZW0ub3V0LnBy
aW50bG4oInVzaW5nIG1vZGlmaWVkIEphclV0aWwiKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAg
KiBAcGFyYW0gY2xhenpCaW5OYW1lIGNvbS5qb2dhbXAuY29tbW9uLnV0aWwuY2FjaGUuVGVtcEph
ckNhY2hlIAogICAgICogQHBhcmFtIGNsCiAgICAgKiBAcmV0dXJuIGdsdWVnZW4tcnQuamFyCiAg
ICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uCiAgICAgKiBAc2VlIHtAbGluayBJT1V0aWwjZ2V0Q2xh
c3NVUkwoU3RyaW5nLCBDbGFzc0xvYWRlcil9CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgU3Ry
aW5nIGdldEphck5hbWUoU3RyaW5nIGNsYXp6QmluTmFtZSwgQ2xhc3NMb2FkZXIgY2wpIHRocm93
cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgVVJMIHVybCA9IElPVXRpbC5nZXRDbGFzc1VSTChjbGF6
ekJpbk5hbWUsIGNsKTsKICAgICAgICBpZihudWxsICE9IHVybCkgewogICAgICAgICAgICBTdHJp
bmcgdXJsUyA9IHVybC50b0V4dGVybmFsRm9ybSgpOwogICAgICAgICAgICAvLyBmcm9tIAogICAg
ICAgICAgICAvLyAgIGphcjpmaWxlOi91c3IvbG9jYWwvcHJvamVjdHMvSk9HTC9nbHVlZ2VuL2J1
aWxkLXg4Nl82NC9nbHVlZ2VuLXJ0LmphciEvY29tL2pvZ2FtcC9jb21tb24vdXRpbC9jYWNoZS9U
ZW1wSmFyQ2FjaGUuY2xhc3MKICAgICAgICAgICAgLy8gdG8KICAgICAgICAgICAgLy8gICBnbHVl
Z2VuLXJ0LmphcgogICAgICAgICAgICB1cmxTID0gdXJsUy5zdWJzdHJpbmcoMCwgdXJsUy5sYXN0
SW5kZXhPZignIScpKTsgLy8gZXhjbHVkZSAhLwogICAgICAgICAgICByZXR1cm4gdXJsUy5zdWJz
dHJpbmcodXJsUy5sYXN0SW5kZXhPZignLycpKzEpOyAvLyBqdXN0IHRoZSBqYXIgbmFtZQogICAg
ICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBj
bGF6ekJpbk5hbWUgY29tLmpvZ2FtcC5jb21tb24udXRpbC5jYWNoZS5UZW1wSmFyQ2FjaGUgCiAg
ICAgKiBAcGFyYW0gY2wKICAgICAqIEByZXR1cm4gamFyOmZpbGU6L3Vzci9sb2NhbC9wcm9qZWN0
cy9KT0dML2dsdWVnZW4vYnVpbGQteDg2XzY0L2dsdWVnZW4tcnQuamFyIS8KICAgICAqIEB0aHJv
d3MgSU9FeGNlcHRpb24KICAgICAqIEBzZWUge0BsaW5rIElPVXRpbCNnZXRDbGFzc1VSTChTdHJp
bmcsIENsYXNzTG9hZGVyKX0KICAgICAqLwovLyAgICBwdWJsaWMgc3RhdGljIFVSTCBnZXRKYXJV
UkwoU3RyaW5nIGNsYXp6QmluTmFtZSwgQ2xhc3NMb2FkZXIgY2wpIHRocm93cyBJT0V4Y2VwdGlv
biB7Ci8vICAgICAgICBVUkwgdXJsID0gSU9VdGlsLmdldENsYXNzVVJMKGNsYXp6QmluTmFtZSwg
Y2wpOwovLyAgICAgICAgaWYobnVsbCAhPSB1cmwpIHsKLy8gICAgICAgICAgICBTdHJpbmcgdXJs
UyA9IHVybC50b0V4dGVybmFsRm9ybSgpOwovLyAgICAgICAgICAgIC8vIGZyb20gCi8vICAgICAg
ICAgICAgLy8gICBqYXI6ZmlsZTovdXNyL2xvY2FsL3Byb2plY3RzL0pPR0wvZ2x1ZWdlbi9idWls
ZC14ODZfNjQvZ2x1ZWdlbi1ydC5qYXIhL2NvbS9qb2dhbXAvY29tbW9uL3V0aWwvY2FjaGUvVGVt
cEphckNhY2hlLmNsYXNzCi8vICAgICAgICAgICAgLy8gdG8KLy8gICAgICAgICAgICAvLyAgIGph
cjpmaWxlOi91c3IvbG9jYWwvcHJvamVjdHMvSk9HTC9nbHVlZ2VuL2J1aWxkLXg4Nl82NC9nbHVl
Z2VuLXJ0LmphciEvCi8vICAgICAgICAgICAgdXJsUyA9IHVybFMuc3Vic3RyaW5nKDAsIHVybFMu
bGFzdEluZGV4T2YoJyEnKSsyKTsgLy8gaW5jbHVkZSAhLwovLyAgICAgICAgICAgIHJldHVybiBu
ZXcgVVJMKHVybFMpOwovLyAgICAgICAgfQovLyAgICAgICAgcmV0dXJuIG51bGw7Ci8vICAgIH0K
ICAgIHB1YmxpYyBzdGF0aWMgVVJMIGdldEphclVSTChTdHJpbmcgY2xhenpCaW5OYW1lLCBDbGFz
c0xvYWRlciBjbCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICBVUkwgdXJsID0gSU9VdGls
LmdldENsYXNzVVJMKGNsYXp6QmluTmFtZSwgY2wpOwogICAgICAgIGlmKG51bGwgIT0gdXJsKSB7
CiAgICAgICAgICAgIFN0cmluZyB1cmxTID0gdXJsLnRvRXh0ZXJuYWxGb3JtKCk7CiAgICAgICAg
ICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXh0Rm9ybTogIit1cmxTKTsKICAgICAgICAgICAgLy8g
ZnJvbSAKICAgICAgICAgICAgLy8gICBqYXI6ZmlsZTovdXNyL2xvY2FsL3Byb2plY3RzL0pPR0wv
Z2x1ZWdlbi9idWlsZC14ODZfNjQvZ2x1ZWdlbi1ydC5qYXIhL2NvbS9qb2dhbXAvY29tbW9uL3V0
aWwvY2FjaGUvVGVtcEphckNhY2hlLmNsYXNzCiAgICAgICAgICAgIC8vIHRvCiAgICAgICAgICAg
IC8vICAgamFyOmZpbGU6L3Vzci9sb2NhbC9wcm9qZWN0cy9KT0dML2dsdWVnZW4vYnVpbGQteDg2
XzY0L2dsdWVnZW4tcnQuamFyIS8KICAgICAgICAgICAgaW50IGlkeCA9IHVybFMubGFzdEluZGV4
T2YoJyEnKTsKICAgICAgICAgICAgaWYgKGlkeCA9PSAtMSkgewogICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAJdXJsUyA9IHVybFMuc3Vic3RyaW5nKDAsIHVybFMubGFzdEluZGV4T2Yo
JyEnKSsyKTsgLy8gaW5jbHVkZSAhLwogICAgICAgICAgICB9CiAgICAgICAgICAgIFN5c3RlbS5v
dXQucHJpbnRsbih1cmxTKTsKICAgICAgICAgICAgcmV0dXJuIG5ldyBVUkwodXJsUyk7CiAgICAg
ICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogIAogICAgICog
QHBhcmFtIGphclVSTCBqYXI6ZmlsZTovdXNyL2xvY2FsL3Byb2plY3RzL0pPR0wvZ2x1ZWdlbi9i
dWlsZC14ODZfNjQvZ2x1ZWdlbi1ydC5qYXIhL2NvbS9qb2dhbXAvY29tbW9uL3V0aWwvY2FjaGUv
VGVtcEphckNhY2hlLmNsYXNzCiAgICAgKiBAcmV0dXJuIGZpbGU6L3Vzci9sb2NhbC9wcm9qZWN0
cy9KT0dML2dsdWVnZW4vYnVpbGQteDg2XzY0LwogICAgICogQHRocm93cyBJT0V4Y2VwdGlvbgog
ICAgICovCi8vICAgIHB1YmxpYyBzdGF0aWMgVVJMIGdldEphclVSTERpcm5hbWUoVVJMIGphclVS
TCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLy8gICAgICAgIFN0cmluZyB1cmxTID0gamFyVVJMLnRv
RXh0ZXJuYWxGb3JtKCk7Ci8vICAgICAgICAvLyBmcm9tIAovLyAgICAgICAgLy8gICBqYXI6Zmls
ZTovdXNyL2xvY2FsL3Byb2plY3RzL0pPR0wvZ2x1ZWdlbi9idWlsZC14ODZfNjQvZ2x1ZWdlbi1y
dC5qYXIhL2NvbS9qb2dhbXAvY29tbW9uL3V0aWwvY2FjaGUvVGVtcEphckNhY2hlLmNsYXNzCi8v
ICAgICAgICAvLyB0bwovLyAgICAgICAgLy8gICBqYXI6ZmlsZTovdXNyL2xvY2FsL3Byb2plY3Rz
L0pPR0wvZ2x1ZWdlbi9idWlsZC14ODZfNjQvZ2x1ZWdlbi1ydC5qYXIKLy8gICAgICAgIHVybFMg
PSB1cmxTLnN1YnN0cmluZygwLCB1cmxTLmxhc3RJbmRleE9mKCchJykpOyAvLyBleGNsdWRlICEv
Ci8vICAgICAgICAKLy8gICAgICAgIC8vIGZyb20gCi8vICAgICAgICAvLyAgIGphcjpmaWxlOi91
c3IvbG9jYWwvcHJvamVjdHMvSk9HTC9nbHVlZ2VuL2J1aWxkLXg4Nl82NC9nbHVlZ2VuLXJ0Lmph
cgovLyAgICAgICAgLy8gdG8KLy8gICAgICAgIC8vICAgZmlsZTovdXNyL2xvY2FsL3Byb2plY3Rz
L0pPR0wvZ2x1ZWdlbi9idWlsZC14ODZfNjQvICAgICAgICAKLy8gICAgICAgIHVybFMgPSB1cmxT
LnN1YnN0cmluZyg0LCB1cmxTLmxhc3RJbmRleE9mKCcvJykrMSk7IC8vIGluY2x1ZGUgLyBleGNs
dWRlIGphcjoKLy8gICAgICAgIHJldHVybiBuZXcgVVJMKHVybFMpOwovLyAgICB9CiAgICBwdWJs
aWMgc3RhdGljIFVSTCBnZXRKYXJVUkxEaXJuYW1lKFVSTCBqYXJVUkwpIHRocm93cyBJT0V4Y2Vw
dGlvbiB7CiAgICAgICAgU3RyaW5nIHVybFMgPSBqYXJVUkwudG9FeHRlcm5hbEZvcm0oKTsKICAg
ICAgICAvLyBmcm9tIAogICAgICAgIC8vICAgamFyOmZpbGU6L3Vzci9sb2NhbC9wcm9qZWN0cy9K
T0dML2dsdWVnZW4vYnVpbGQteDg2XzY0L2dsdWVnZW4tcnQuamFyIS9jb20vam9nYW1wL2NvbW1v
bi91dGlsL2NhY2hlL1RlbXBKYXJDYWNoZS5jbGFzcwogICAgICAgIC8vIHRvCiAgICAgICAgLy8g
ICBqYXI6ZmlsZTovdXNyL2xvY2FsL3Byb2plY3RzL0pPR0wvZ2x1ZWdlbi9idWlsZC14ODZfNjQv
Z2x1ZWdlbi1ydC5qYXIKICAgICAgICBpbnQgaWR4ID0gdXJsUy5sYXN0SW5kZXhPZignIScpOwog
ICAgICAgIGlmIChpZHggPT0gLTEpIHsKICAgICAgICAJCiAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAJdXJsUyA9IHVybFMuc3Vic3RyaW5nKDAsIGlkeCk7IC8vIGV4Y2x1ZGUgIS8KICAgICAgICB9
CiAgICAgICAgLy8gZnJvbSAKICAgICAgICAvLyAgIGphcjpmaWxlOi91c3IvbG9jYWwvcHJvamVj
dHMvSk9HTC9nbHVlZ2VuL2J1aWxkLXg4Nl82NC9nbHVlZ2VuLXJ0LmphcgogICAgICAgIC8vIHRv
CiAgICAgICAgLy8gICBmaWxlOi91c3IvbG9jYWwvcHJvamVjdHMvSk9HTC9nbHVlZ2VuL2J1aWxk
LXg4Nl82NC8gCiAgICAgICAgaWR4ID0gdXJsUy5sYXN0SW5kZXhPZignLycpOwogICAgICAgIGlm
IChpZHggPT0gLTEpIHsKICAgICAgICB9IGVsc2UgewogICAgICAgIAl1cmxTID0gdXJsUy5zdWJz
dHJpbmcoMCwgaWR4KzEpOyAvLyBpbmNsdWRlIC8gZXhjbHVkZSBqYXI6CiAgICAgICAgfQogICAg
ICAgIHVybFMucmVwbGFjZSgiamFyOmZpbGU6IiwgImZpbGU6Iik7CiAgICAgICAgCiAgICAgICAg
cmV0dXJuIG5ldyBVUkwodXJsUyk7CiAgICB9CiAgICAgICAgICAgIAogICAgLyoqCiAgICAgKiAK
ICAgICAqIEBwYXJhbSBiYXNlVXJsIGZpbGU6L3Vzci9sb2NhbC9wcm9qZWN0cy9KT0dML2dsdWVn
ZW4vYnVpbGQteDg2XzY0LwogICAgICogQHBhcmFtIGphckZpbGVOYW1lIGdsdWVnZW4tcnQuamFy
CiAgICAgKiBAcmV0dXJuIGphcjpmaWxlOi91c3IvbG9jYWwvcHJvamVjdHMvSk9HTC9nbHVlZ2Vu
L2J1aWxkLXg4Nl82NC9nbHVlZ2VuLXJ0LmphciEvCiAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9u
CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgVVJMIGdldEphclVSTChVUkwgYmFzZVVybCwgU3Ry
aW5nIGphckZpbGVOYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgIHJldHVybiBuZXcg
VVJMKCJqYXI6IitiYXNlVXJsLnRvRXh0ZXJuYWxGb3JtKCkramFyRmlsZU5hbWUrIiEvIik7CiAg
ICB9CiAgICAKICAgIC8qKgogICAgICogCiAgICAgKiBAcGFyYW0gY2xhenpCaW5OYW1lIGNvbS5q
b2dhbXAuY29tbW9uLnV0aWwuY2FjaGUuVGVtcEphckNhY2hlIAogICAgICogQHBhcmFtIGNsIGRv
bWFpbiAKICAgICAqIEByZXR1cm4gSmFyRmlsZSBjb250YWluaW5nIHRoZSBuYW1lZCBjbGFzcyB3
aXRoaW4gdGhlIGdpdmVuIENsYXNzTG9hZGVyCiAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uCiAg
ICAgKiBAc2VlIHtAbGluayAjZ2V0SmFyVVJMKFN0cmluZywgQ2xhc3NMb2FkZXIpfQogICAgICov
CiAgICBwdWJsaWMgc3RhdGljIEphckZpbGUgZ2V0SmFyRmlsZShTdHJpbmcgY2xhenpCaW5OYW1l
LCBDbGFzc0xvYWRlciBjbCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgICAgcmV0dXJu
IGdldEphckZpbGUoZ2V0SmFyVVJMKGNsYXp6QmluTmFtZSwgY2wpLCBjbCk7CiAgICB9CgogICAg
LyoqCiAgICAgKiAKICAgICAqIEBwYXJhbSBqYXJVUkwgamFyOmZpbGU6L3Vzci9sb2NhbC9wcm9q
ZWN0cy9KT0dML2dsdWVnZW4vYnVpbGQteDg2XzY0L2dsdWVnZW4tcnQuamFyIS8KICAgICAqIEBw
YXJhbSBjbCBkb21haW4KICAgICAqIEByZXR1cm4gSmFyRmlsZSBhcyBuYW1lZCBieSBVUkwgd2l0
aGluIHRoZSBnaXZlbiBDbGFzc0xvYWRlcgogICAgICogQHRocm93cyBJT0V4Y2VwdGlvbgogICAg
ICovCiAgICBwdWJsaWMgc3RhdGljIEphckZpbGUgZ2V0SmFyRmlsZShVUkwgamFyVXJsLCBDbGFz
c0xvYWRlciBjbCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICBpZihudWxsICE9IGphclVy
bCkgewogICAgICAgICAgICBVUkxDb25uZWN0aW9uIHVybGMgPSBqYXJVcmwub3BlbkNvbm5lY3Rp
b24oKTsKICAgICAgICAgICAgaWYodXJsYyBpbnN0YW5jZW9mIEphclVSTENvbm5lY3Rpb24pIHsK
ICAgICAgICAgICAgICAgIEphclVSTENvbm5lY3Rpb24gamFyQ29ubmVjdGlvbiA9IChKYXJVUkxD
b25uZWN0aW9uKWphclVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgICAgSmFyRmls
ZSBqYXJGaWxlID0gamFyQ29ubmVjdGlvbi5nZXRKYXJGaWxlKCk7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gamFyRmlsZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVs
bDsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBSZXR1cm4gYSBtYXAgZnJvbSBuYXRpdmUtbGli
LWJhc2UtbmFtZSB0byBlbnRyeS1uYW1lLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIE1hcDxT
dHJpbmcsIFN0cmluZz4gZ2V0TmF0aXZlTGliTmFtZXMoSmFyRmlsZSBqYXJGaWxlKSB7CiAgICAg
ICAgaWYgKERFQlVHKSB7CiAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiSmFyVXRpbDog
Z2V0TmF0aXZlTGliTmFtZXM6ICIramFyRmlsZSk7CiAgICAgICAgfQoKICAgICAgICBNYXA8U3Ry
aW5nLFN0cmluZz4gbmFtZU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwogICAg
ICAgIEVudW1lcmF0aW9uPEphckVudHJ5PiBlbnRyaWVzID0gamFyRmlsZS5lbnRyaWVzKCk7CiAg
ICAgICAgCiAgICAgICAgd2hpbGUgKGVudHJpZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKICAgICAg
ICAgICAgZmluYWwgSmFyRW50cnkgZW50cnkgPSBlbnRyaWVzLm5leHRFbGVtZW50KCk7CiAgICAg
ICAgICAgIGZpbmFsIFN0cmluZyBlbnRyeU5hbWUgPSBlbnRyeS5nZXROYW1lKCk7CiAgICAgICAg
ICAgIGZpbmFsIFN0cmluZyBiYXNlTmFtZSA9ICBOYXRpdmVMaWJyYXJ5LmlzVmFsaWROYXRpdmVM
aWJyYXJ5TmFtZShlbnRyeU5hbWUsIGZhbHNlKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlm
KG51bGwgIT0gYmFzZU5hbWUpIHsKICAgICAgICAgICAgICAgIG5hbWVNYXAucHV0KGJhc2VOYW1l
LCBlbnRyeU5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmFt
ZU1hcDsKICAgIH0KCiAgICAvKioKICAgICAqIEV4dHJhY3QgdGhlIGZpbGVzIG9mIHRoZSBnaXZl
biBqYXIgZmlsZS4KICAgICAqIDxwPgogICAgICogSWYgPGNvZGU+ZXh0cmFjdE5hdGl2ZUxpYnJh
cmllczwvY29kZT4gaXMgdHJ1ZSwKICAgICAqIG5hdGl2ZSBsaWJyYXJpZXMgYXJlIGFkZGVkIHRv
IHRoZSBnaXZlbiA8Y29kZT5uYXRpdmVMaWJNYXA8L2NvZGU+CiAgICAgKiB3aXRoIHRoZSBiYXNl
IG5hbWUgdG8gdGVtcCBmaWxlIGxvY2F0aW9uLjxicj4KICAgICAqIEEgZmlsZSBpcyBpZGVudGlm
aWVkIGFzIGEgbmF0aXZlIGxpYnJhcnksCiAgICAgKiBpZiBpdCdzIG5hbWUgY29tcGxpZXMgd2l0
aCB0aGUgcnVubmluZyBwbGF0Zm9ybSdzIG5hdGl2ZSBsaWJyYXJ5IG5hbWluZyBzY2hlbWUuPGJy
PgogICAgICogUm9vdCBlbnRyaWVzIGFyZSBmYXZvcmVkIG92ZXIgbm9uIHJvb3QgZW50cmllcyBp
biBjYXNlIG9mIG5hbWluZyBjb2xsaXNpb25zLjxicj4KICAgICAqIEV4YW1wbGUgb24gYSBVbml4
IGxpa2UgbWFjaGluZTo8YnI+CiAgICAgKiA8cHJlPgogICAgICogICBteWxpYi5qYXIhL3N1YjEv
bGlic291ci5zbyAgIC0+IHNvdXIgIChtYXBwZWQsIHVuaXF1ZSBuYW1lKSAgCiAgICAgKiAgIG15
bGliLmphciEvc3ViMS9saWJzd2VldC5zbyAgICAgICAgICAgKGRyb3BwZWQsIHJvb3QgZW50cnkg
ZmF2b3JlZCkKICAgICAqICAgbXlsaWIuamFyIS9saWJzd2VldC5zbyAgICAgICAtPiBzd2VldCAo
bWFwcGVkLCByb290IGVudHJ5IGZhdm9yZWQpCiAgICAgKiAgIG15bGliLmphciEvc3dlZXQuZGxs
ICAgICAgICAgLT4gICAgICAgKGRyb3BwZWQsIG5vdCBhIHVuaXggbGlicmFyeSBuYW1lKQogICAg
ICogPC9wcmU+CiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIEluIG9yZGVyIHRvIGJlIGNv
bXBhdGlibGUgd2l0aCBKYXZhIFdlYiBTdGFydCwgd2UgbmVlZAogICAgICogdG8gZXh0cmFjdCBh
bGwgcm9vdCBlbnRyaWVzIGZyb20gdGhlIGphciBmaWxlLjxicj4KICAgICAqIEluIHRoaXMgY2Fz
ZSwgc2V0IGFsbCBmbGFncyB0byB0cnVlIDxjb2RlPmV4dHJhY3ROYXRpdmVMaWJyYXJpZXMgPC9j
b2RlPi4KICAgICAqIDxjb2RlPmV4dHJhY3RDbGFzc0ZpbGVzPC9jb2RlPiwgPGNvZGU+ZXh0cmFj
dE90aGVyRmlsZXM8L2NvZGU+LgogICAgICogPC9wPgogICAgICogCiAgICAgKiBAcGFyYW0gZGVz
dAogICAgICogQHBhcmFtIG5hdGl2ZUxpYk1hcAogICAgICogQHBhcmFtIGphckZpbGUKICAgICAq
IEBwYXJhbSBkZWVwRGlyZWN0b3J5VHJhdmVyc2FsCiAgICAgKiBAcGFyYW0gZXh0cmFjdE5hdGl2
ZUxpYnJhcmllcwogICAgICogQHBhcmFtIGV4dHJhY3RDbGFzc0ZpbGVzCiAgICAgKiBAcGFyYW0g
ZXh0cmFjdE90aGVyRmlsZXMKICAgICAqIEByZXR1cm4KICAgICAqIEB0aHJvd3MgSU9FeGNlcHRp
b24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZXh0cmFjdChGaWxlIGRlc3Qs
IE1hcDxTdHJpbmcsIFN0cmluZz4gbmF0aXZlTGliTWFwLCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSmFyRmlsZSBqYXJGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sZWFuIGV4dHJhY3ROYXRpdmVMaWJyYXJpZXMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZXh0cmFjdENsYXNzRmlsZXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZXh0cmFjdE90aGVyRmlsZXMpIHRo
cm93cyBJT0V4Y2VwdGlvbiB7CgogICAgICAgIGlmIChERUJVRykgewogICAgICAgICAgICBTeXN0
ZW0uZXJyLnByaW50bG4oIkphclV0aWw6IGV4dHJhY3Q6ICIramFyRmlsZS5nZXROYW1lKCkrIiAt
PiAiK2Rlc3QrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBleHRyYWN0TmF0aXZl
TGlicmFyaWVzICIrZXh0cmFjdE5hdGl2ZUxpYnJhcmllcysKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICIsIGV4dHJhY3RDbGFzc0ZpbGVzICIrZXh0cmFjdENsYXNzRmlsZXMrCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBleHRyYWN0T3RoZXJGaWxlcyAiK2V4dHJhY3RP
dGhlckZpbGVzKTsKICAgICAgICB9CiAgICAgICAgaW50IG51bSA9IDA7CgogICAgICAgIEVudW1l
cmF0aW9uPEphckVudHJ5PiBlbnRyaWVzID0gamFyRmlsZS5lbnRyaWVzKCk7CiAgICAgICAgd2hp
bGUgKGVudHJpZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKICAgICAgICAgICAgSmFyRW50cnkgZW50
cnkgPSAoSmFyRW50cnkpIGVudHJpZXMubmV4dEVsZW1lbnQoKTsKICAgICAgICAgICAgU3RyaW5n
IGVudHJ5TmFtZSA9IGVudHJ5LmdldE5hbWUoKTsKCiAgICAgICAgICAgIC8vIE1hdGNoIGVudHJp
ZXMgd2l0aCBjb3JyZWN0IHByZWZpeCBhbmQgc3VmZml4IChpZ25vcmluZyBjYXNlKQogICAgICAg
ICAgICBmaW5hbCBTdHJpbmcgbGliQmFzZU5hbWUgPSBOYXRpdmVMaWJyYXJ5LmlzVmFsaWROYXRp
dmVMaWJyYXJ5TmFtZShlbnRyeU5hbWUsIGZhbHNlKTsKICAgICAgICAgICAgZmluYWwgYm9vbGVh
biBpc05hdGl2ZUxpYiA9IG51bGwgIT0gbGliQmFzZU5hbWU7CiAgICAgICAgICAgIGlmKGlzTmF0
aXZlTGliICYmICFleHRyYWN0TmF0aXZlTGlicmFyaWVzKSB7CiAgICAgICAgICAgICAgICBpZiAo
REVCVUcpIHsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkphclV0aWw6
IEphckVudHJ5IDogIiArIGVudHJ5TmFtZSArICIgbmF0aXZlLWxpYiBza2lwcGVkIik7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAg
ICAgICAgICAKICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc0NsYXNzRmlsZSA9IGVudHJ5TmFt
ZS5lbmRzV2l0aCgiLmNsYXNzIik7CiAgICAgICAgICAgIGlmKGlzQ2xhc3NGaWxlICYmICFleHRy
YWN0Q2xhc3NGaWxlcykgewogICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7CiAgICAgICAgICAg
ICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJKYXJVdGlsOiBKYXJFbnRyeSA6ICIgKyBlbnRy
eU5hbWUgKyAiIGNsYXNzLWZpbGUgc2tpcHBlZCIpOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAg
IGlmKCFpc05hdGl2ZUxpYiAmJiAhaXNDbGFzc0ZpbGUgJiYgIWV4dHJhY3RPdGhlckZpbGVzKSB7
CiAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0u
ZXJyLnByaW50bG4oIkphclV0aWw6IEphckVudHJ5IDogIiArIGVudHJ5TmFtZSArICIgb3RoZXIt
ZmlsZSBza2lwcGVkIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc0RpciA9IGVudHJ5
TmFtZS5lbmRzV2l0aCgiLyIpOwogICAgICAgICAgICAKICAgICAgICAgICAgZmluYWwgYm9vbGVh
biBpc1Jvb3RFbnRyeSA9IGVudHJ5TmFtZS5pbmRleE9mKCcvJykgPT0gLTEgJiYgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeU5hbWUuaW5kZXhPZihGaWxlLnNl
cGFyYXRvckNoYXIpID09IC0xOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKERFQlVHKSB7
CiAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkphclV0aWw6IEphckVudHJ5IDog
aXNOYXRpdmVMaWIgIiArIGlzTmF0aXZlTGliICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIiwgaXNDbGFzc0ZpbGUgIiArIGlzQ2xhc3NGaWxlICsgIiwgaXNEaXIgIiArIGlz
RGlyICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBpc1Jvb3RFbnRyeSAi
ICsgaXNSb290RW50cnkgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAg
ZmluYWwgRmlsZSBkZXN0RmlsZSA9IG5ldyBGaWxlKGRlc3QsIGVudHJ5TmFtZSk7CiAgICAgICAg
ICAgIGlmKGlzRGlyKSB7CiAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKICAgICAgICAgICAg
ICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkphclV0aWw6IE1LRElSOiAiICsgZW50cnlOYW1l
ICsgIiAtPiAiICsgZGVzdEZpbGUgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IGRlc3RGaWxlLm1rZGlyKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBm
aW5hbCBGaWxlIGRlc3RGb2xkZXIgPSBuZXcgRmlsZShkZXN0RmlsZS5nZXRQYXJlbnQoKSk7CiAg
ICAgICAgICAgICAgICBpZighZGVzdEZvbGRlci5leGlzdHMoKSkgewogICAgICAgICAgICAgICAg
ICAgIGlmIChERUJVRykgewogICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50
bG4oIkphclV0aWw6IE1LRElSIChwYXJlbnQpOiAiICsgZW50cnlOYW1lICsgIiAtPiAiICsgZGVz
dEZvbGRlciApOwogICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgIGRlc3RGb2xkZXIubWtkaXIoKTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIGZpbmFsIElucHV0U3RyZWFtIGluID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJl
YW0oamFyRmlsZS5nZXRJbnB1dFN0cmVhbShlbnRyeSkpOwogICAgICAgICAgICAgICAgZmluYWwg
T3V0cHV0U3RyZWFtIG91dCA9IG5ldyBCdWZmZXJlZE91dHB1dFN0cmVhbShuZXcgRmlsZU91dHB1
dFN0cmVhbShkZXN0RmlsZSkpOwogICAgICAgICAgICAgICAgaW50IG51bUJ5dGVzID0gLTE7IAog
ICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICBudW1CeXRlcyA9IElPVXRp
bC5jb3B5U3RyZWFtMlN0cmVhbShpbiwgb3V0LCAtMSk7CiAgICAgICAgICAgICAgICB9IGZpbmFs
bHkgewogICAgICAgICAgICAgICAgICAgIGluLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAg
b3V0LmNsb3NlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBib29sZWFuIGFk
ZGVkQXNOYXRpdmVMaWIgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGlmIChudW1CeXRlcz4wKSB7
CiAgICAgICAgICAgICAgICAgICAgbnVtKys7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmF0
aXZlTGliICYmICggaXNSb290RW50cnkgfHwgIW5hdGl2ZUxpYk1hcC5jb250YWluc0tleShsaWJC
YXNlTmFtZSkgKSApIHsgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICBuYXRpdmVMaWJNYXAucHV0KGxpYkJhc2VOYW1lLCBkZXN0RmlsZS5nZXRBYnNvbHV0ZVBhdGgo
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkQXNOYXRpdmVMaWIgPSB0cnVlOwogICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChE
RUJVRykgewogICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiSmFyVXRpbDog
RVhUUkFDVFsiK251bSsiXTogWyIgKyBsaWJCYXNlTmFtZSArICIgLT4gXSAiICsgZW50cnlOYW1l
ICsgIiAtPiAiICsgZGVzdEZpbGUgKyAiOiAiK251bUJ5dGVzKyIgYnl0ZXMsIGFkZGVkQXNOYXRp
dmVMaWI6ICIrYWRkZWRBc05hdGl2ZUxpYik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bTsKICAgIH0KCiAgICAvKioKICAgICAqIFZh
bGlkYXRlIHRoZSBjZXJ0aWZpY2F0ZXMgZm9yIGVhY2ggbmF0aXZlIExpYiBpbiB0aGUgamFyIGZp
bGUuCiAgICAgKiBUaHJvd3MgYW4gSU9FeGNlcHRpb24gaWYgYW55IGNlcnRpZmljYXRlIGlzIG5v
dCB2YWxpZC4KICAgICAqIDxwcmU+CiAgICAgICAgQ2VydGlmaWNhdGVbXSByb290Q2VydHMgPSBT
b21ldGhpbmcuY2xhc3MuZ2V0UHJvdGVjdGlvbkRvbWFpbigpLgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2V0Q29kZVNvdXJjZSgpLmdldENlcnRpZmljYXRlcygpOwog
ICAgICAgPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCB2YWxpZGF0
ZUNlcnRpZmljYXRlcyhDZXJ0aWZpY2F0ZVtdIHJvb3RDZXJ0cywgSmFyRmlsZSBqYXJGaWxlKSAK
ICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZWN1cml0eUV4Y2VwdGlvbiB7CgogICAg
ICAgIGlmIChERUJVRykgewogICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkphclV0aWw6
IHZhbGlkYXRlQ2VydGlmaWNhdGVzOiAiK2phckZpbGUuZ2V0TmFtZSgpKTsKICAgICAgICB9Cgog
ICAgICAgIGlmIChyb290Q2VydHMgPT0gbnVsbCB8fCByb290Q2VydHMubGVuZ3RoID09IDApIHsK
ICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTnVsbCBjZXJ0
aWZpY2F0ZXMgcGFzc2VkIik7CiAgICAgICAgfQoKICAgICAgICBieXRlW10gYnVmID0gbmV3IGJ5
dGVbMTAyNF07CiAgICAgICAgRW51bWVyYXRpb248SmFyRW50cnk+IGVudHJpZXMgPSBqYXJGaWxl
LmVudHJpZXMoKTsKICAgICAgICB3aGlsZSAoZW50cmllcy5oYXNNb3JlRWxlbWVudHMoKSkgewog
ICAgICAgICAgICBmaW5hbCBKYXJFbnRyeSBlbnRyeSA9IGVudHJpZXMubmV4dEVsZW1lbnQoKTsK
ICAgICAgICAgICAgaWYoICEgZW50cnkuaXNEaXJlY3RvcnkoKSAmJiAhIGVudHJ5LmdldE5hbWUo
KS5zdGFydHNXaXRoKCJNRVRBLUlORi8iKSApIHsKICAgICAgICAgICAgICAgIC8vIG9ubHkgdmFs
aWRhdGUgbm9uIE1FVEEtSU5GIGFuZCBub24gZGlyZWN0b3JpZXMKICAgICAgICAgICAgICAgIHZh
bGlkYXRlQ2VydGlmaWNhdGUocm9vdENlcnRzLCBqYXJGaWxlLCBlbnRyeSwgYnVmKTsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrIHRoZSBjZXJ0aWZp
Y2F0ZXMgd2l0aCB0aGUgb25lcyBpbiB0aGUgamFyIGZpbGUKICAgICAqIChhbGwgbXVzdCBtYXRj
aCkuCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHZvaWQgdmFsaWRhdGVDZXJ0aWZp
Y2F0ZShDZXJ0aWZpY2F0ZVtdIHJvb3RDZXJ0cywgCiAgICAgICAgICAgIEphckZpbGUgamFyLCBK
YXJFbnRyeSBlbnRyeSwgYnl0ZVtdIGJ1ZikgdGhyb3dzIElPRXhjZXB0aW9uLCBTZWN1cml0eUV4
Y2VwdGlvbiB7CgogICAgICAgIGlmIChERUJVRykgewogICAgICAgICAgICBTeXN0ZW0uZXJyLnBy
aW50bG4oIkphclV0aWw6IHZhbGlkYXRlIEphckVudHJ5IDogIiArIGVudHJ5LmdldE5hbWUoKSk7
CiAgICAgICAgfQoKICAgICAgICAvLyBBUEkgc3RhdGVzIHRoYXQgd2UgbXVzdCByZWFkIGFsbCBv
ZiB0aGUgZGF0YSBmcm9tIHRoZSBlbnRyeSdzCiAgICAgICAgLy8gSW5wdXRTdHJlYW0gaW4gb3Jk
ZXIgdG8gYmUgYWJsZSB0byBnZXQgaXRzIGNlcnRpZmljYXRlcwoKICAgICAgICBJbnB1dFN0cmVh
bSBpcyA9IGphci5nZXRJbnB1dFN0cmVhbShlbnRyeSk7CiAgICAgICAgd2hpbGUgKGlzLnJlYWQo
YnVmKSA+IDApIHsgfQogICAgICAgIGlzLmNsb3NlKCk7CgogICAgICAgIC8vIEdldCB0aGUgY2Vy
dGlmaWNhdGVzIGZvciB0aGUgSkFSIGVudHJ5CiAgICAgICAgQ2VydGlmaWNhdGVbXSBuYXRpdmVD
ZXJ0cyA9IGVudHJ5LmdldENlcnRpZmljYXRlcygpOwogICAgICAgIGlmIChuYXRpdmVDZXJ0cyA9
PSBudWxsIHx8IG5hdGl2ZUNlcnRzLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgIHRocm93IG5l
dyBTZWN1cml0eUV4Y2VwdGlvbigibm8gY2VydGlmaWNhdGUgZm9yICIgKyBlbnRyeS5nZXROYW1l
KCkgKyAiIGluICIgKyBqYXIuZ2V0TmFtZSgpKTsKICAgICAgICB9CgogICAgICAgIGludCBjaGVj
a2VkID0gMDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvb3RDZXJ0cy5sZW5ndGg7IGkr
KykgewogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG5hdGl2ZUNlcnRzLmxlbmd0aDsg
aisrKSB7CiAgICAgICAgICAgICAgICBpZiAobmF0aXZlQ2VydHNbal0uZXF1YWxzKHJvb3RDZXJ0
c1tpXSkpewogICAgICAgICAgICAgICAgICAgIGNoZWNrZWQrKzsKICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg
ICBpZiggY2hlY2tlZCAhPSByb290Q2VydHMubGVuZ3RoICkgewogICAgICAgICAgICB0aHJvdyBu
ZXcgU2VjdXJpdHlFeGNlcHRpb24oIm5vdCBhbGwgY2VydGlmaWNhdGVzIG1hdGNoLCBvbmx5ICIr
Y2hlY2tlZCsiIG91dCBvZiAiK3Jvb3RDZXJ0cy5sZW5ndGgrIiBmb3IgIiArIGVudHJ5LmdldE5h
bWUoKSArICIgaW4gIiArIGphci5nZXROYW1lKCkpOwogICAgICAgIH0KICAgIH0KfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>