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

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>94933</bug_id>
          
          <creation_ts>2012-08-24 06:46:33 -0700</creation_ts>
          <short_desc>Web Inspector: [WebGL] Implement serializing WebGL state and replaying it later</short_desc>
          <delta_ts>2012-08-27 05:28:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>94941</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Andrey Adaikin">aandrey</reporter>
          <assigned_to name="Andrey Adaikin">aandrey</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>caseq</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>704071</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-08-24 06:46:33 -0700</bug_when>
    <thetext>Patch to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704084</commentid>
    <comment_count>1</comment_count>
      <attachid>160417</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-08-24 07:12:59 -0700</bug_when>
    <thetext>Created attachment 160417
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704117</commentid>
    <comment_count>2</comment_count>
      <attachid>160417</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-24 08:15:13 -0700</bug_when>
    <thetext>Comment on attachment 160417
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=160417&amp;action=review

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:257
&gt; +        var thisObject = /** @type {ReplayableResource} */ (Resource.toReplayable(this._thisObject, cache));

No need for ( ) in case of assignment cast.

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:678
&gt; +    /** @inheritDoc */

We don&apos;t use @inheritDoc

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:782
&gt; +            switch (uniform.type) {

You could use a map here.

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:783
&gt; +                case gl.FLOAT:

Do not indent case

&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:979
&gt; +    &quot;ACTIVE_TEXTURE&quot;,

We need to add a test so that we could track changes to this set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704131</commentid>
    <comment_count>3</comment_count>
      <attachid>160417</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-08-24 08:45:55 -0700</bug_when>
    <thetext>Comment on attachment 160417
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=160417&amp;action=review

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:257
&gt;&gt; +        var thisObject = /** @type {ReplayableResource} */ (Resource.toReplayable(this._thisObject, cache));
&gt; 
&gt; No need for ( ) in case of assignment cast.

you&apos;re right. done.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:678
&gt;&gt; +    /** @inheritDoc */
&gt; 
&gt; We don&apos;t use @inheritDoc

done.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:782
&gt;&gt; +            switch (uniform.type) {
&gt; 
&gt; You could use a map here.

done.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:783
&gt;&gt; +                case gl.FLOAT:
&gt; 
&gt; Do not indent case

done.

&gt;&gt; Source/WebCore/inspector/InjectedScriptWebGLModuleSource.js:979
&gt;&gt; +    &quot;ACTIVE_TEXTURE&quot;,
&gt; 
&gt; We need to add a test so that we could track changes to this set.

Filed https://bugs.webkit.org/show_bug.cgi?id=94941</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704133</commentid>
    <comment_count>4</comment_count>
      <attachid>160427</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-08-24 08:47:18 -0700</bug_when>
    <thetext>Created attachment 160427
Patch to land</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704136</commentid>
    <comment_count>5</comment_count>
      <attachid>160430</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-08-24 08:57:22 -0700</bug_when>
    <thetext>Created attachment 160430
Patch to land</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705158</commentid>
    <comment_count>6</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-08-27 04:38:38 -0700</bug_when>
    <thetext>Committed r126747: &lt;http://trac.webkit.org/changeset/126747&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160417</attachid>
            <date>2012-08-24 07:12:59 -0700</date>
            <delta_ts>2012-08-27 05:28:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94933-20120824181254.patch</filename>
            <type>text/plain</type>
            <size>27732</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDJmNTNjMzA1YmRlNjg1
YmVmNDdjMGIzMTNmNWQxZTVmNDE1MWZkMS4uMjczMjU4ZGI1NjA4Zjg5YTg0ZmYzODNiZGIzNzMy
ZmM2MThlYTVmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMxIEBACiAyMDEyLTA4LTI0ICBBbmRy
ZXkgQWRhaWtpbiAgPGFhbmRyZXlAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFtXZWJHTF0gSW1wbGVtZW50IHNlcmlhbGl6aW5nIFdlYkdMIHN0YXRlIGFuZCByZXBsYXlp
bmcgaXQgbGF0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk0OTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyB3aWxsIGFsbG93IHVzIHRvIHNhdmUgdGhlIFdlYkdMIHN0YXRlIGF0IGFueSBhcmJp
dHJhcnkgcG9pbnQgaW4gb3JkZXIgdG8gcmVwbGF5IGEgdHJhY2UgbG9nIGxhdGVyIG9uIGFub3Ro
ZXIgY2FudmFzLgorICAgICAgICBNYWluIHBvaW50cyBvZiB0aGUgY2hhbmdlOgorICAgICAgICAt
IEFsbG93IGV2ZXJ5IFJlc291cmNlIGFuZCBDYWxsIGluc3RhbmNlcyBiZSBzZXJpYWxpemVkIHRv
IGEgUmVwbGF5YWJsZSwgYW5kIHJlc3VycmVjdGVkIGJhY2sgZHVyaW5nIGEgcmVwbGF5IG9uIGFu
b3RoZXIgY2FudmFzLgorCisgICAgICAgIC0gQmVmb3JlIGV4ZWN1dGluZyBhbiBvcmlnaW5hbCBX
ZWJHTCBjYWxsIGFuZCBzYXZpbmcgaXQgdG8gYSB0cmFjZSBsb2csIGZpcnN0IHNlcmlhbGl6ZSBh
bGwgdGhlIFJlc291cmNlcyB0aGF0IHdpbGwgYmUgaW52b2x2ZWQgaW4KKyAgICAgICAgICB0aGlz
IGNhbGwsIGlmIHRoZXkgYXJlIG5vdCB5ZXQgc2VyaWFsaXplZC4gVGhlIGxhdHRlciBwYXJ0IGlz
IGltcGxlbWVudGVkIHdpdGggYSBDYWNoZSBpbnN0YW5jZSwgY2hlY2tpbmcgdGhhdCB3ZSBjb252
ZXJ0IGEgUmVzb3VyY2UKKyAgICAgICAgICB0byBhIFJlcGxheWFibGUgb25seSBvbmNlOiB0aGUg
Zmlyc3QgdGltZSBpdCB3YXMgdXNlZCBpbiB0aGUgdHJhY2UgbG9nIGJlaW5nIGNvbGxlY3RlZC4g
V2UgZG8gbm90IG5lZWQgdG8gc2VyaWFsaXplIHRoZSBzdWJzZXF1ZW50CisgICAgICAgICAgY2hh
bmdlcyB0byB0aGlzIFJlc291cmNlJ3Mgc3RhdGUgKGlmIGFueSksIHNpbmNlIHRoZXkgd2lsbCBi
ZSBzYXZlZCBpbiB0aGUgdHJhY2UgbG9nIGJlaW5nIGNvbGxlY3RlZCBhbmQgcmVwbGF5ZWQgYXV0
b21hdGljYWxseS4KKworICAgICAgICAtIFNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFdlYkdM
IHN0YXRlIG1heSBiZSByZXF1ZXN0ZWQgaW4gdGhlIHJ1bnRpbWUgKGUuZy4gd2l0aCB0aGUgZ2wu
Z2V0UGFyYW1ldGVyIG1ldGhvZCkuIFdlIHVzZSB0aGlzIHdoZXJldmVyCisgICAgICAgICAgcG9z
c2libGUgaW5zdGVhZCBvZiBjb2xsZWN0aW5nIENhbGxzIGluIGEgUmVzb3VyY2UgbG9nLiBPdGhl
cndpc2UsIHdlIGhhdmUgdG8gY29sbGVjdCBXZWJHTCBjYWxscyAobGlrZSBnbC50ZXhJbWFnZTJE
KSBpbiBvcmRlciB0bworICAgICAgICAgIHJlcGxheSB0aGVtIGxhdGVyLgorCisgICAgICAgIC0g
TGF0ZXIgdGhlIFJlcGxheWFibGUgb2JqZWN0cyBoaWVyYXJjaHkgKHRoZSBUcmFjZUxvZykgbWF5
IGJlIHNlcmlhbGl6ZWQgZnVydGhlciBmb3IgY3Jvc3MtZGV2aWNlIHRyYW5zbWlzc2lvbiwgZm9y
IGV4YW1wbGUuCisgICAgICAgIAorCisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
V2ViR0xNb2R1bGVTb3VyY2UuanM6CisgICAgICAgICguKToKKworMjAxMi0wOC0yNCAgQW5kcmV5
IEFkYWlraW4gIDxhYW5kcmV5QGNocm9taXVtLm9yZz4KKwogICAgICAgICBXZWIgSW5zcGVjdG9y
OiBbV2ViR0xdIEltcGxlbWVudCBjdXN0b20gd3JhcCBmdW5jdGlvbnMgb24gR0wgY29udGV4dAog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ3OTkKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0V2ViR0xN
b2R1bGVTb3VyY2UuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRX
ZWJHTE1vZHVsZVNvdXJjZS5qcwppbmRleCBkYWEzNzJhZTU3OTRmYmRkOWNkMTZiZTBiODQ1ZTc4
ZTVjZDQzNWVlLi5mMTIxODc1MWI5MzdhZTAyNTYwZmFjNGJmZGQ0MWI3MzYyNzc2YzM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJHTE1vZHVs
ZVNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRX
ZWJHTE1vZHVsZVNvdXJjZS5qcwpAQCAtMjQ1LDYgKzI0NSw0OSBAQCBDYWxsLnByb3RvdHlwZSA9
IHsKICAgICAgICAgICAgIGlmICghUmVzb3VyY2UuZm9yT2JqZWN0KHRoaXMuX2FyZ3NbaV0pKQog
ICAgICAgICAgICAgICAgIHRoaXMuX2FyZ3NbaV0gPSBUeXBlVXRpbHMuY2xvbmUodGhpcy5fYXJn
c1tpXSk7CiAgICAgICAgIH0KKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtDYWNo
ZX0gY2FjaGUKKyAgICAgKiBAcmV0dXJuIHtSZXBsYXlhYmxlQ2FsbH0KKyAgICAgKi8KKyAgICB0
b1JlcGxheWFibGU6IGZ1bmN0aW9uKGNhY2hlKQorICAgIHsKKyAgICAgICAgdGhpcy5mcmVlemUo
KTsKKyAgICAgICAgdmFyIHRoaXNPYmplY3QgPSAvKiogQHR5cGUge1JlcGxheWFibGVSZXNvdXJj
ZX0gKi8gKFJlc291cmNlLnRvUmVwbGF5YWJsZSh0aGlzLl90aGlzT2JqZWN0LCBjYWNoZSkpOwor
ICAgICAgICB2YXIgcmVzdWx0ID0gUmVzb3VyY2UudG9SZXBsYXlhYmxlKHRoaXMuX3Jlc3VsdCwg
Y2FjaGUpOworICAgICAgICB2YXIgYXJncyA9IHRoaXMuX2FyZ3MubWFwKGZ1bmN0aW9uKG9iaikg
eworICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlLnRvUmVwbGF5YWJsZShvYmosIGNhY2hlKTsK
KyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBuZXcgUmVwbGF5YWJsZUNhbGwodGhpc09iamVj
dCwgdGhpcy5fZnVuY3Rpb25OYW1lLCBhcmdzLCByZXN1bHQpOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBAcGFyYW0ge1JlcGxheWFibGVDYWxsfSByZXBsYXlhYmxlQ2FsbAorICAgICAqIEBw
YXJhbSB7Q2FjaGV9IGNhY2hlCisgICAgICogQHJldHVybiB7Q2FsbH0KKyAgICAgKi8KKyAgICBy
ZXBsYXk6IGZ1bmN0aW9uKHJlcGxheWFibGVDYWxsLCBjYWNoZSkKKyAgICB7CisgICAgICAgIHZh
ciByZXBsYXlPYmplY3QgPSBSZXBsYXlhYmxlUmVzb3VyY2UucmVwbGF5KHJlcGxheWFibGVDYWxs
LnJlc291cmNlKCksIGNhY2hlKTsKKyAgICAgICAgdmFyIHJlcGxheUZ1bmN0aW9uID0gcmVwbGF5
T2JqZWN0W3JlcGxheWFibGVDYWxsLmZ1bmN0aW9uTmFtZSgpXTsKKyAgICAgICAgY29uc29sZS5h
c3NlcnQodHlwZW9mIHJlcGxheUZ1bmN0aW9uID09PSAiZnVuY3Rpb24iLCAiRXhwZWN0ZWQgYSBm
dW5jdGlvbiB0byByZXBsYXkiKTsKKyAgICAgICAgdmFyIHJlcGxheUFyZ3MgPSByZXBsYXlhYmxl
Q2FsbC5hcmdzKCkubWFwKGZ1bmN0aW9uKG9iaikgeworICAgICAgICAgICAgcmV0dXJuIFJlcGxh
eWFibGVSZXNvdXJjZS5yZXBsYXkob2JqLCBjYWNoZSk7CisgICAgICAgIH0pOworICAgICAgICB2
YXIgcmVwbGF5UmVzdWx0ID0gcmVwbGF5RnVuY3Rpb24uYXBwbHkocmVwbGF5T2JqZWN0LCByZXBs
YXlBcmdzKTsKKyAgICAgICAgaWYgKHJlcGxheWFibGVDYWxsLnJlc3VsdCgpIGluc3RhbmNlb2Yg
UmVwbGF5YWJsZVJlc291cmNlKSB7CisgICAgICAgICAgICB2YXIgcmVzb3VyY2UgPSByZXBsYXlh
YmxlQ2FsbC5yZXN1bHQoKS5yZXBsYXkoY2FjaGUpOworICAgICAgICAgICAgaWYgKCFyZXNvdXJj
ZS53cmFwcGVkT2JqZWN0KCkpCisgICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0V3JhcHBlZE9i
amVjdChyZXBsYXlSZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fdGhpc09iamVj
dCA9IHJlcGxheU9iamVjdDsKKyAgICAgICAgdGhpcy5fZnVuY3Rpb25OYW1lID0gcmVwbGF5YWJs
ZUNhbGwuZnVuY3Rpb25OYW1lKCk7CisgICAgICAgIHRoaXMuX2FyZ3MgPSByZXBsYXlBcmdzOwor
ICAgICAgICB0aGlzLl9yZXN1bHQgPSByZXBsYXlSZXN1bHQ7CisgICAgICAgIHRoaXMuX2ZyZWV6
ZWQgPSB0cnVlOworICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CiB9CiAKQEAgLTMwMiw3ICsz
NDUsOCBAQCBSZXBsYXlhYmxlQ2FsbC5wcm90b3R5cGUgPSB7CiAgICAgICovCiAgICAgcmVwbGF5
OiBmdW5jdGlvbihjYWNoZSkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBEbyB0aGUgcmVwbGF5
LgorICAgICAgICB2YXIgY2FsbCA9IE9iamVjdC5jcmVhdGUoQ2FsbC5wcm90b3R5cGUpOworICAg
ICAgICByZXR1cm4gY2FsbC5yZXBsYXkodGhpcywgY2FjaGUpOwogICAgIH0KIH0KIApAQCAtMzM4
LDYgKzM4MiwxNyBAQCBSZXNvdXJjZS5mb3JPYmplY3QgPSBmdW5jdGlvbihvYmopCiAgICAgcmV0
dXJuIG51bGw7CiB9CiAKKy8qKgorICogQHBhcmFtIHtSZXNvdXJjZXwqfSBvYmoKKyAqIEBwYXJh
bSB7Q2FjaGV9IGNhY2hlCisgKiBAcmV0dXJuIHtSZXBsYXlhYmxlUmVzb3VyY2V8Kn0KKyAqLwor
UmVzb3VyY2UudG9SZXBsYXlhYmxlID0gZnVuY3Rpb24ob2JqLCBjYWNoZSkKK3sKKyAgICB2YXIg
cmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3Qob2JqKTsKKyAgICByZXR1cm4gcmVzb3VyY2Ug
PyByZXNvdXJjZS50b1JlcGxheWFibGUoY2FjaGUpIDogb2JqOworfQorCiBSZXNvdXJjZS5wcm90
b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICogQHJldHVybiB7bnVtYmVyfQpAQCAtNDAwLDYgKzQ1
NSw2NiBAQCBSZXNvdXJjZS5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIC8qKgorICAgICAq
IEBwYXJhbSB7Q2FjaGV9IGNhY2hlCisgICAgICogQHJldHVybiB7UmVwbGF5YWJsZVJlc291cmNl
fQorICAgICAqLworICAgIHRvUmVwbGF5YWJsZTogZnVuY3Rpb24oY2FjaGUpCisgICAgeworICAg
ICAgICB2YXIgcmVzdWx0ID0gY2FjaGUuZ2V0KHRoaXMuX2lkKTsKKyAgICAgICAgaWYgKHJlc3Vs
dCkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHZhciBkYXRhID0geworICAg
ICAgICAgICAgaWQ6IHRoaXMuX2lkCisgICAgICAgIH07CisgICAgICAgIHJlc3VsdCA9IG5ldyBS
ZXBsYXlhYmxlUmVzb3VyY2UodGhpcywgZGF0YSk7CisgICAgICAgIGNhY2hlLnB1dCh0aGlzLl9p
ZCwgcmVzdWx0KTsgLy8gUHV0IGludG8gdGhlIGNhY2hlIGVhcmx5IHRvIGF2b2lkIGxvb3BzLgor
ICAgICAgICBkYXRhLmNhbGxzID0gdGhpcy5fY2FsbHMubWFwKGZ1bmN0aW9uKGNhbGwpIHsKKyAg
ICAgICAgICAgIHJldHVybiBjYWxsLnRvUmVwbGF5YWJsZShjYWNoZSk7CisgICAgICAgIH0pOwor
ICAgICAgICB0aGlzLl9wb3B1bGF0ZVJlcGxheWFibGVEYXRhKGRhdGEsIGNhY2hlKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtPYmpl
Y3R9IGRhdGEKKyAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQorICAgICAqLworICAgIF9wb3B1
bGF0ZVJlcGxheWFibGVEYXRhOiBmdW5jdGlvbihkYXRhLCBjYWNoZSkKKyAgICB7CisgICAgICAg
IC8vIERvIG5vdGhpbmcuIFNob3VsZCBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCisgICAg
fSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhCisgICAgICogQHBhcmFt
IHtDYWNoZX0gY2FjaGUKKyAgICAgKiBAcmV0dXJuIHtSZXNvdXJjZX0KKyAgICAgKi8KKyAgICBy
ZXBsYXk6IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQorICAgIHsKKyAgICAgICAgdmFyIHJlc291cmNl
ID0gY2FjaGUuZ2V0KGRhdGEuaWQpOworICAgICAgICBpZiAocmVzb3VyY2UpCisgICAgICAgICAg
ICByZXR1cm4gcmVzb3VyY2U7CisgICAgICAgIHRoaXMuX2lkID0gZGF0YS5pZDsKKyAgICAgICAg
dGhpcy5fcmVzb3VyY2VNYW5hZ2VyID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY2FsbHMgPSBbXTsK
KyAgICAgICAgdGhpcy5fd3JhcHBlZE9iamVjdCA9IG51bGw7CisgICAgICAgIGNhY2hlLnB1dChk
YXRhLmlkLCB0aGlzKTsgLy8gUHV0IGludG8gdGhlIGNhY2hlIGVhcmx5IHRvIGF2b2lkIGxvb3Bz
LgorICAgICAgICB0aGlzLl9kb1JlcGxheUNhbGxzKGRhdGEsIGNhY2hlKTsKKyAgICAgICAgY29u
c29sZS5hc3NlcnQodGhpcy5fd3JhcHBlZE9iamVjdCwgIlJlc291cmNlIHNob3VsZCBiZSByZWNv
bnN0cnVjdGVkISIpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEKKyAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQor
ICAgICAqLworICAgIF9kb1JlcGxheUNhbGxzOiBmdW5jdGlvbihkYXRhLCBjYWNoZSkKKyAgICB7
CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gZGF0YS5jYWxscy5sZW5ndGg7IGkgPCBuOyAr
K2kpCisgICAgICAgICAgICB0aGlzLl9jYWxscy5wdXNoKGRhdGEuY2FsbHNbaV0ucmVwbGF5KGNh
Y2hlKSk7CisgICAgfSwKKworICAgIC8qKgogICAgICAqIEBwYXJhbSB7Q2FsbH0gY2FsbAogICAg
ICAqLwogICAgIHB1c2hDYWxsOiBmdW5jdGlvbihjYWxsKQpAQCAtNDI0LDYgKzUzOSw4IEBAIFJl
c291cmNlLnByb3RvdHlwZSA9IHsKICAqLwogZnVuY3Rpb24gUmVwbGF5YWJsZVJlc291cmNlKG9y
aWdpbmFsUmVzb3VyY2UsIGRhdGEpCiB7CisgICAgdGhpcy5fcHJvdG8gPSBvcmlnaW5hbFJlc291
cmNlLl9fcHJvdG9fXzsKKyAgICB0aGlzLl9kYXRhID0gZGF0YTsKIH0KIAogUmVwbGF5YWJsZVJl
c291cmNlLnByb3RvdHlwZSA9IHsKQEAgLTQzMywxMSArNTUwLDI0IEBAIFJlcGxheWFibGVSZXNv
dXJjZS5wcm90b3R5cGUgPSB7CiAgICAgICovCiAgICAgcmVwbGF5OiBmdW5jdGlvbihjYWNoZSkK
ICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBEbyB0aGUgcmVwbGF5LgorICAgICAgICB2YXIgcmVz
dWx0ID0gT2JqZWN0LmNyZWF0ZSh0aGlzLl9wcm90byk7CisgICAgICAgIHJlc3VsdCA9IHJlc3Vs
dC5yZXBsYXkodGhpcy5fZGF0YSwgY2FjaGUpCisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHJlc3Vs
dC5fX3Byb3RvX18gPT09IHRoaXMuX3Byb3RvLCAiV3JvbmcgdHlwZSBvZiBhIHJlcGxheSByZXN1
bHQiKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiB9CiAKIC8qKgorICogQHBhcmFt
IHtSZXBsYXlhYmxlUmVzb3VyY2V8Kn0gb2JqCisgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQorICog
QHJldHVybiB7Kn0KKyAqLworUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheSA9IGZ1bmN0aW9uKG9i
aiwgY2FjaGUpCit7CisgICAgcmV0dXJuIChvYmogaW5zdGFuY2VvZiBSZXBsYXlhYmxlUmVzb3Vy
Y2UpID8gb2JqLnJlcGxheShjYWNoZSkud3JhcHBlZE9iamVjdCgpIDogb2JqOworfQorCisvKioK
ICAqIEBjb25zdHJ1Y3RvcgogICogQGV4dGVuZHMge1Jlc291cmNlfQogICovCkBAIC00NDgsNiAr
NTc4LDYxIEBAIGZ1bmN0aW9uIFdlYkdMQm91bmRSZXNvdXJjZSh3cmFwcGVkT2JqZWN0KQogfQog
CiBXZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90eXBlID0geworICAgIC8qKiBAaW5oZXJpdERvYyAq
LworICAgIF9wb3B1bGF0ZVJlcGxheWFibGVEYXRhOiBmdW5jdGlvbihkYXRhLCBjYWNoZSkKKyAg
ICB7CisgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlOworICAgICAgICBkYXRhLnN0YXRl
ID0ge307CisgICAgICAgIE9iamVjdC5rZXlzKHN0YXRlKS5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFt
ZXRlcikgeworICAgICAgICAgICAgZGF0YS5zdGF0ZVtwYXJhbWV0ZXJdID0gUmVzb3VyY2UudG9S
ZXBsYXlhYmxlKHN0YXRlW3BhcmFtZXRlcl0sIGNhY2hlKTsKKyAgICAgICAgfSk7CisgICAgfSwK
KworICAgIC8qKiBAaW5oZXJpdERvYyAqLworICAgIF9kb1JlcGxheUNhbGxzOiBmdW5jdGlvbihk
YXRhLCBjYWNoZSkKKyAgICB7CisgICAgICAgIHZhciBzdGF0ZSA9IHt9OworICAgICAgICBPYmpl
Y3Qua2V5cyhkYXRhLnN0YXRlKS5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtZXRlcikgeworICAgICAg
ICAgICAgc3RhdGVbcGFyYW1ldGVyXSA9IFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoZGF0YS5z
dGF0ZVtwYXJhbWV0ZXJdLCBjYWNoZSk7CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl9zdGF0
ZSA9IHN0YXRlOworCisgICAgICAgIHZhciBnbCA9IHRoaXMuX3JlcGxheUNvbnRleHRSZXNvdXJj
ZShkYXRhLCBjYWNoZSkud3JhcHBlZE9iamVjdCgpOworCisgICAgICAgIHZhciBiaW5kaW5nc0Rh
dGEgPSB7CisgICAgICAgICAgICBURVhUVVJFXzJEOiBbImJpbmRUZXh0dXJlIiwgIlRFWFRVUkVf
QklORElOR18yRCJdLAorICAgICAgICAgICAgVEVYVFVSRV9DVUJFX01BUDogWyJiaW5kVGV4dHVy
ZSIsICJURVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVAiXSwKKyAgICAgICAgICAgIEFSUkFZX0JVRkZF
UjogWyJiaW5kQnVmZmVyIiwgIkFSUkFZX0JVRkZFUl9CSU5ESU5HIl0sCisgICAgICAgICAgICBF
TEVNRU5UX0FSUkFZX0JVRkZFUjogWyJiaW5kQnVmZmVyIiwgIkVMRU1FTlRfQVJSQVlfQlVGRkVS
X0JJTkRJTkciXSwKKyAgICAgICAgICAgIEZSQU1FQlVGRkVSOiBbImJpbmRGcmFtZWJ1ZmZlciIs
ICJGUkFNRUJVRkZFUl9CSU5ESU5HIl0sCisgICAgICAgICAgICBSRU5ERVJCVUZGRVI6IFsiYmlu
ZFJlbmRlcmJ1ZmZlciIsICJSRU5ERVJCVUZGRVJfQklORElORyJdCisgICAgICAgIH07CisgICAg
ICAgIHZhciBvcmlnaW5hbEJpbmRpbmdzID0ge307CisgICAgICAgIE9iamVjdC5rZXlzKGJpbmRp
bmdzRGF0YSkuZm9yRWFjaChmdW5jdGlvbihiaW5kaW5nVGFyZ2V0KSB7CisgICAgICAgICAgICB2
YXIgYmluZGluZ1BhcmFtZXRlciA9IGJpbmRpbmdzRGF0YVtiaW5kaW5nVGFyZ2V0XVsxXTsKKyAg
ICAgICAgICAgIG9yaWdpbmFsQmluZGluZ3NbYmluZGluZ1RhcmdldF0gPSBnbC5nZXRQYXJhbWV0
ZXIoZ2xbYmluZGluZ1BhcmFtZXRlcl0pOworICAgICAgICB9KTsKKworICAgICAgICBSZXNvdXJj
ZS5wcm90b3R5cGUuX2RvUmVwbGF5Q2FsbHMuY2FsbCh0aGlzLCBkYXRhLCBjYWNoZSk7CisKKyAg
ICAgICAgT2JqZWN0LmtleXMoYmluZGluZ3NEYXRhKS5mb3JFYWNoKGZ1bmN0aW9uKGJpbmRpbmdU
YXJnZXQpIHsKKyAgICAgICAgICAgIHZhciBiaW5kTWV0aG9kTmFtZSA9IGJpbmRpbmdzRGF0YVti
aW5kaW5nVGFyZ2V0XVswXTsKKyAgICAgICAgICAgIGdsW2JpbmRNZXRob2ROYW1lXS5jYWxsKGds
LCBnbFtiaW5kaW5nVGFyZ2V0XSwgb3JpZ2luYWxCaW5kaW5nc1tiaW5kaW5nVGFyZ2V0XSk7Cisg
ICAgICAgIH0pOworICAgIH0sCisKKyAgICBfcmVwbGF5Q29udGV4dFJlc291cmNlOiBmdW5jdGlv
bihkYXRhLCBjYWNoZSkKKyAgICB7CisgICAgICAgIHZhciBjYWxscyA9IGRhdGEuY2FsbHM7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gY2FsbHMubGVuZ3RoOyBpIDwgbjsgKytpKSB7Cisg
ICAgICAgICAgICB2YXIgcmVzb3VyY2UgPSBSZXBsYXlhYmxlUmVzb3VyY2UucmVwbGF5KGNhbGxz
W2ldLnJlc291cmNlKCksIGNhY2hlKTsKKyAgICAgICAgICAgIHZhciBjb250ZXh0UmVzb3VyY2Ug
PSBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5mb3JPYmplY3QocmVzb3VyY2UpOworICAg
ICAgICAgICAgaWYgKGNvbnRleHRSZXNvdXJjZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY29u
dGV4dFJlc291cmNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0sCisK
ICAgICAvKioKICAgICAgKiBAcGFyYW0ge251bWJlcn0gdGFyZ2V0CiAgICAgICogQHBhcmFtIHtz
dHJpbmd9IGJpbmRNZXRob2ROYW1lCkBAIC00NzQsNiArNjU5LDIzIEBAIGZ1bmN0aW9uIFdlYkdM
VGV4dHVyZVJlc291cmNlKHdyYXBwZWRPYmplY3QpCiAKIFdlYkdMVGV4dHVyZVJlc291cmNlLnBy
b3RvdHlwZSA9IHsKICAgICAvKiogQGluaGVyaXREb2MgKi8KKyAgICBfZG9SZXBsYXlDYWxsczog
ZnVuY3Rpb24oZGF0YSwgY2FjaGUpCisgICAgeworICAgICAgICB2YXIgZ2wgPSB0aGlzLl9yZXBs
YXlDb250ZXh0UmVzb3VyY2UoZGF0YSwgY2FjaGUpLndyYXBwZWRPYmplY3QoKTsKKworICAgICAg
ICB2YXIgc3RhdGUgPSB7fTsKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2Uu
UGl4ZWxTdG9yZVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0ZXIpIHsKKyAgICAg
ICAgICAgIHN0YXRlW3BhcmFtZXRlcl0gPSBnbC5nZXRQYXJhbWV0ZXIoZ2xbcGFyYW1ldGVyXSk7
CisgICAgICAgIH0pOworCisgICAgICAgIFdlYkdMQm91bmRSZXNvdXJjZS5wcm90b3R5cGUuX2Rv
UmVwbGF5Q2FsbHMuY2FsbCh0aGlzLCBkYXRhLCBjYWNoZSk7CisKKyAgICAgICAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0UmVzb3VyY2UuUGl4ZWxTdG9yZVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlv
bihwYXJhbWV0ZXIpIHsKKyAgICAgICAgICAgIGdsLnBpeGVsU3RvcmVpKGdsW3BhcmFtZXRlcl0s
IHN0YXRlW3BhcmFtZXRlcl0pOworICAgICAgICB9KTsKKyAgICB9LAorCisgICAgLyoqIEBpbmhl
cml0RG9jICovCiAgICAgcHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCiAgICAgewogICAgICAgICB2
YXIgZ2wgPSBjYWxsLnJlc291cmNlKCkud3JhcHBlZE9iamVjdCgpOwpAQCAtNTM4LDYgKzc0MCwx
MDQgQEAgZnVuY3Rpb24gV2ViR0xQcm9ncmFtUmVzb3VyY2Uod3JhcHBlZE9iamVjdCkKIAogV2Vi
R0xQcm9ncmFtUmVzb3VyY2UucHJvdG90eXBlID0gewogICAgIC8qKiBAaW5oZXJpdERvYyAqLwor
ICAgIF9wb3B1bGF0ZVJlcGxheWFibGVEYXRhOiBmdW5jdGlvbihkYXRhLCBjYWNoZSkKKyAgICB7
CisgICAgICAgIHZhciBnbCA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLmZvck9iamVj
dCh0aGlzKS53cmFwcGVkT2JqZWN0KCk7CisgICAgICAgIHZhciBwcm9ncmFtID0gdGhpcy53cmFw
cGVkT2JqZWN0KCk7CisKKyAgICAgICAgdmFyIHVuaWZvcm1zID0gW107CisgICAgICAgIHZhciB1
bmlmb3Jtc0NvdW50ID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVf
VU5JRk9STVMpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1zQ291bnQ7ICsr
aSkgeworICAgICAgICAgICAgdmFyIGFjdGl2ZUluZm8gPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHBy
b2dyYW0sIGkpOworICAgICAgICAgICAgaWYgKCFhY3RpdmVJbmZvKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgdmFyIHVuaWZvcm1Mb2NhdGlvbiA9IGdsLmdldFVuaWZv
cm1Mb2NhdGlvbihwcm9ncmFtLCBhY3RpdmVJbmZvLm5hbWUpOworICAgICAgICAgICAgaWYgKCF1
bmlmb3JtTG9jYXRpb24pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB2
YXIgdmFsdWUgPSBnbC5nZXRVbmlmb3JtKHByb2dyYW0sIHVuaWZvcm1Mb2NhdGlvbik7CisgICAg
ICAgICAgICB1bmlmb3Jtcy5wdXNoKHsKKyAgICAgICAgICAgICAgICBuYW1lOiBhY3RpdmVJbmZv
Lm5hbWUsCisgICAgICAgICAgICAgICAgdHlwZTogYWN0aXZlSW5mby50eXBlLAorICAgICAgICAg
ICAgICAgIHZhbHVlOiB2YWx1ZQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAg
ZGF0YS51bmlmb3JtcyA9IHVuaWZvcm1zOworICAgIH0sCisKKyAgICAvKiogQGluaGVyaXREb2Mg
Ki8KKyAgICBfZG9SZXBsYXlDYWxsczogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCisgICAgeworICAg
ICAgICBSZXNvdXJjZS5wcm90b3R5cGUuX2RvUmVwbGF5Q2FsbHMuY2FsbCh0aGlzLCBkYXRhLCBj
YWNoZSk7CisgICAgICAgIHZhciBnbCA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLmZv
ck9iamVjdCh0aGlzKS53cmFwcGVkT2JqZWN0KCk7CisgICAgICAgIHZhciBwcm9ncmFtID0gdGhp
cy53cmFwcGVkT2JqZWN0KCk7CisKKyAgICAgICAgdmFyIG9yaWdpbmFsUHJvZ3JhbSA9IGdsLmdl
dFBhcmFtZXRlcihnbC5DVVJSRU5UX1BST0dSQU0pOworICAgICAgICB2YXIgY3VycmVudFByb2dy
YW0gPSBvcmlnaW5hbFByb2dyYW07CisgICAgICAgIAorICAgICAgICBkYXRhLnVuaWZvcm1zLmZv
ckVhY2goZnVuY3Rpb24odW5pZm9ybSkgeworICAgICAgICAgICAgdmFyIHVuaWZvcm1Mb2NhdGlv
biA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1bmlmb3JtLm5hbWUpOworICAgICAg
ICAgICAgaWYgKCF1bmlmb3JtTG9jYXRpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgdmFyIG1ldGhvZE5hbWUgPSAidW5pZm9ybSI7CisgICAgICAgICAgICBzd2l0Y2gg
KHVuaWZvcm0udHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgZ2wuRkxPQVQ6CisgICAgICAg
ICAgICAgICAgICAgIG1ldGhvZE5hbWUgKz0gIjFmIjsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBnbC5GTE9BVF9WRUMyOgorICAgICAgICAgICAgICAg
ICAgICBtZXRob2ROYW1lICs9ICIyZnYiOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIGdsLkZMT0FUX1ZFQzM6CisgICAgICAgICAgICAgICAgICAgIG1l
dGhvZE5hbWUgKz0gIjNmdiI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgZ2wuRkxPQVRfVkVDNDoKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kTmFt
ZSArPSAiNGZ2IjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBnbC5JTlQ6CisgICAgICAgICAgICAgICAgY2FzZSBnbC5CT09MOgorICAgICAgICAgICAg
ICAgIGNhc2UgZ2wuU0FNUExFUl8yRDoKKyAgICAgICAgICAgICAgICBjYXNlIGdsLlNBTVBMRVJf
Q1VCRToKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSArPSAiMWkiOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIGdsLklOVF9WRUMyOgorICAg
ICAgICAgICAgICAgIGNhc2UgZ2wuQk9PTF9WRUMyOgorICAgICAgICAgICAgICAgICAgICBtZXRo
b2ROYW1lICs9ICIyaXYiOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIGdsLklOVF9WRUMzOgorICAgICAgICAgICAgICAgIGNhc2UgZ2wuQk9PTF9WRUMz
OgorICAgICAgICAgICAgICAgICAgICBtZXRob2ROYW1lICs9ICIzaXYiOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIGdsLklOVF9WRUM0OgorICAgICAg
ICAgICAgICAgIGNhc2UgZ2wuQk9PTF9WRUM0OgorICAgICAgICAgICAgICAgICAgICBtZXRob2RO
YW1lICs9ICI0aXYiOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIGdsLkZMT0FUX01BVDI6CisgICAgICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgKz0g
Ik1hdHJpeDJmdiI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgZ2wuRkxPQVRfTUFUMzoKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSArPSAi
TWF0cml4M2Z2IjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBnbC5GTE9BVF9NQVQ0OgorICAgICAgICAgICAgICAgICAgICBtZXRob2ROYW1lICs9ICJN
YXRyaXg0ZnYiOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJBU1NFUlRfTk9UX1JF
QUNIRUQ6IHVua25vd24gdW5pZm9ybSB0eXBlICIgKyB1bmlmb3JtLnR5cGUpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjdXJyZW50
UHJvZ3JhbSAhPT0gcHJvZ3JhbSkgeworICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9ncmFtID0g
cHJvZ3JhbTsKKyAgICAgICAgICAgICAgICBnbC51c2VQcm9ncmFtKHByb2dyYW0pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKG1ldGhvZE5hbWUuaW5kZXhPZigiTWF0cml4IikgPT09
IC0xKQorICAgICAgICAgICAgICAgIGdsW21ldGhvZE5hbWVdLmNhbGwoZ2wsIHVuaWZvcm1Mb2Nh
dGlvbiwgdW5pZm9ybS52YWx1ZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
Z2xbbWV0aG9kTmFtZV0uY2FsbChnbCwgdW5pZm9ybUxvY2F0aW9uLCBmYWxzZSwgdW5pZm9ybS52
YWx1ZSk7CisgICAgICAgIH0pOworCisgICAgICAgIGlmIChjdXJyZW50UHJvZ3JhbSAhPT0gb3Jp
Z2luYWxQcm9ncmFtKQorICAgICAgICAgICAgZ2wudXNlUHJvZ3JhbShvcmlnaW5hbFByb2dyYW0p
OworICAgIH0sCisKKyAgICAvKiogQGluaGVyaXREb2MgKi8KICAgICBwdXNoQ2FsbDogZnVuY3Rp
b24oY2FsbCkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiByZW1vdmUgYW55IG9sZGVyIGNhbGxz
IHRoYXQgbm8gbG9uZ2VyIGNvbnRyaWJ1dGUgdG8gdGhlIHJlc291cmNlIHN0YXRlLgpAQCAtNjM0
LDE3ICs5MzQsMzUgQEAgV2ViR0xSZW5kZXJidWZmZXJSZXNvdXJjZS5wcm90b3R5cGUuX19wcm90
b19fID0gV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZTsKICAqIEBjb25zdHJ1Y3RvcgogICog
QGV4dGVuZHMge1Jlc291cmNlfQogICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGds
Q29udGV4dAorICogQHBhcmFtIHtGdW5jdGlvbn0gcmVwbGF5Q29udGV4dENhbGxiYWNrCiAgKi8K
LWZ1bmN0aW9uIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlKGdsQ29udGV4dCkKK2Z1bmN0
aW9uIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlKGdsQ29udGV4dCwgcmVwbGF5Q29udGV4
dENhbGxiYWNrKQogewogICAgIFJlc291cmNlLmNhbGwodGhpcywgZ2xDb250ZXh0KTsKICAgICB0
aGlzLl9wcm94eU9iamVjdCA9IG51bGw7CisgICAgdGhpcy5fcmVwbGF5Q29udGV4dENhbGxiYWNr
ID0gcmVwbGF5Q29udGV4dENhbGxiYWNrOwogfQogCiAvKioKICAqIEBjb25zdAogICogQHR5cGUg
e0FycmF5LjxzdHJpbmc+fQogICovCitXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5HTENh
cGFiaWxpdGllcyA9IFsKKyAgICAiQkxFTkQiLAorICAgICJDVUxMX0ZBQ0UiLAorICAgICJERVBU
SF9URVNUIiwKKyAgICAiRElUSEVSIiwKKyAgICAiUE9MWUdPTl9PRkZTRVRfRklMTCIsCisgICAg
IlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSIsCisgICAgIlNBTVBMRV9DT1ZFUkFHRSIsCisgICAg
IlNDSVNTT1JfVEVTVCIsCisgICAgIlNURU5DSUxfVEVTVCIKK107CisKKy8qKgorICogQGNvbnN0
CisgKiBAdHlwZSB7QXJyYXkuPHN0cmluZz59CisgKi8KIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJl
c291cmNlLlBpeGVsU3RvcmVQYXJhbWV0ZXJzID0gWwogICAgICJQQUNLX0FMSUdOTUVOVCIsCiAg
ICAgIlVOUEFDS19BTElHTk1FTlQiLApAQCAtNjU0LDYgKzk3Miw2MiBAQCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRSZXNvdXJjZS5QaXhlbFN0b3JlUGFyYW1ldGVycyA9IFsKIF07CiAKIC8qKgorICog
QGNvbnN0CisgKiBAdHlwZSB7QXJyYXkuPHN0cmluZz59CisgKi8KK1dlYkdMUmVuZGVyaW5nQ29u
dGV4dFJlc291cmNlLlN0YXRlUGFyYW1ldGVycyA9IFsKKyAgICAiQUNUSVZFX1RFWFRVUkUiLAor
ICAgICJBUlJBWV9CVUZGRVJfQklORElORyIsCisgICAgIkJMRU5EX0NPTE9SIiwKKyAgICAiQkxF
TkRfRFNUX0FMUEhBIiwKKyAgICAiQkxFTkRfRFNUX1JHQiIsCisgICAgIkJMRU5EX0VRVUFUSU9O
X0FMUEhBIiwKKyAgICAiQkxFTkRfRVFVQVRJT05fUkdCIiwKKyAgICAiQkxFTkRfU1JDX0FMUEhB
IiwKKyAgICAiQkxFTkRfU1JDX1JHQiIsCisgICAgIkNPTE9SX0NMRUFSX1ZBTFVFIiwKKyAgICAi
Q09MT1JfV1JJVEVNQVNLIiwKKyAgICAiQ1VMTF9GQUNFX01PREUiLAorICAgICJDVVJSRU5UX1BS
T0dSQU0iLAorICAgICJERVBUSF9DTEVBUl9WQUxVRSIsCisgICAgIkRFUFRIX0ZVTkMiLAorICAg
ICJERVBUSF9SQU5HRSIsCisgICAgIkRFUFRIX1dSSVRFTUFTSyIsCisgICAgIkVMRU1FTlRfQVJS
QVlfQlVGRkVSX0JJTkRJTkciLAorICAgICJGUkFNRUJVRkZFUl9CSU5ESU5HIiwKKyAgICAiRlJP
TlRfRkFDRSIsCisgICAgIkdFTkVSQVRFX01JUE1BUF9ISU5UIiwKKyAgICAiTElORV9XSURUSCIs
CisgICAgIlBBQ0tfQUxJR05NRU5UIiwKKyAgICAiUE9MWUdPTl9PRkZTRVRfRkFDVE9SIiwKKyAg
ICAiUE9MWUdPTl9PRkZTRVRfVU5JVFMiLAorICAgICJSRU5ERVJCVUZGRVJfQklORElORyIsCisg
ICAgIlNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQiLAorICAgICJTQU1QTEVfQ09WRVJBR0VfVkFMVUUi
LAorICAgICJTQ0lTU09SX0JPWCIsCisgICAgIlNURU5DSUxfQkFDS19GQUlMIiwKKyAgICAiU1RF
TkNJTF9CQUNLX0ZVTkMiLAorICAgICJTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMIiwKKyAg
ICAiU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyIsCisgICAgIlNURU5DSUxfQkFDS19SRUYi
LAorICAgICJTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyIsCisgICAgIlNURU5DSUxfQkFDS19XUklU
RU1BU0siLAorICAgICJTVEVOQ0lMX0NMRUFSX1ZBTFVFIiwKKyAgICAiU1RFTkNJTF9GQUlMIiwK
KyAgICAiU1RFTkNJTF9GVU5DIiwKKyAgICAiU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUwiLAorICAg
ICJTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUyIsCisgICAgIlNURU5DSUxfUkVGIiwKKyAgICAiU1RF
TkNJTF9WQUxVRV9NQVNLIiwKKyAgICAiU1RFTkNJTF9XUklURU1BU0siLAorICAgICJVTlBBQ0tf
QUxJR05NRU5UIiwKKyAgICAiVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCIsCisg
ICAgIlVOUEFDS19GTElQX1lfV0VCR0wiLAorICAgICJVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFf
V0VCR0wiLAorICAgICJWSUVXUE9SVCIKK107CisKKy8qKgogICogQHBhcmFtIHsqfSBvYmoKICAq
IEByZXR1cm4ge1dlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlfQogICovCkBAIC02ODAsNiAr
MTA1NCwxNDUgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UucHJvdG90eXBlID0gewog
ICAgICAgICByZXR1cm4gdGhpcy5fcHJveHlPYmplY3Q7CiAgICAgfSwKIAorICAgIC8qKiBAaW5o
ZXJpdERvYyAqLworICAgIF9wb3B1bGF0ZVJlcGxheWFibGVEYXRhOiBmdW5jdGlvbihkYXRhLCBj
YWNoZSkKKyAgICB7CisgICAgICAgIHZhciBnbCA9IHRoaXMud3JhcHBlZE9iamVjdCgpOworICAg
ICAgICBkYXRhLnJlcGxheUNvbnRleHRDYWxsYmFjayA9IHRoaXMuX3JlcGxheUNvbnRleHRDYWxs
YmFjazsKKworICAgICAgICAvLyBGSVhNRTogU2F2ZSB0aGUgZ2V0RXJyb3IoKSBzdGF0dXMgYW5k
IHJlc3RvcmUgaXQgYWZ0ZXIgdGFraW5nIHRoZSBHTCBzdGF0ZSBzbmFwc2hvdC4KKworICAgICAg
ICAvLyBUYWtlIGEgZnVsbCBHTCBzdGF0ZSBzbmFwc2hvdC4KKyAgICAgICAgdmFyIGdsU3RhdGUg
PSB7fTsKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuR0xDYXBhYmlsaXRp
ZXMuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0ZXIpIHsKKyAgICAgICAgICAgIGdsU3RhdGVbcGFy
YW1ldGVyXSA9IGdsLmlzRW5hYmxlZChnbFtwYXJhbWV0ZXJdKTsKKyAgICAgICAgfSk7CisgICAg
ICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLlN0YXRlUGFyYW1ldGVycy5mb3JFYWNo
KGZ1bmN0aW9uKHBhcmFtZXRlcikgeworICAgICAgICAgICAgZ2xTdGF0ZVtwYXJhbWV0ZXJdID0g
UmVzb3VyY2UudG9SZXBsYXlhYmxlKGdsLmdldFBhcmFtZXRlcihnbFtwYXJhbWV0ZXJdKSwgY2Fj
aGUpOworICAgICAgICAgICAgLy8gRklYTUU6IENhbGwgd2hpbGUoZ2wuZ2V0RXJyb3IoKSAhPSBn
bC5OT19FUlJPUikgey4uLn0gdG8gY2hlY2sgaWYgYSBwYXJ0aWN1bGFyIHBhcmFtZXRlciBpcyBz
dXBwb3J0ZWQuCisgICAgICAgIH0pOworCisgICAgICAgIC8vIFZFUlRFWF9BVFRSSUJfQVJSQVlT
CisgICAgICAgIHZhciBtYXhWZXJ0ZXhBdHRyaWJzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9W
RVJURVhfQVRUUklCUyk7CisgICAgICAgIHZhciB2ZXJ0ZXhBdHRyaWJQYXJhbWV0ZXJzID0gWyJW
RVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HIiwgIlZFUlRFWF9BVFRSSUJfQVJSQVlf
RU5BQkxFRCIsICJWRVJURVhfQVRUUklCX0FSUkFZX1NJWkUiLCAiVkVSVEVYX0FUVFJJQl9BUlJB
WV9TVFJJREUiLCAiVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFIiwgIlZFUlRFWF9BVFRSSUJfQVJS
QVlfTk9STUFMSVpFRCIsICJDVVJSRU5UX1ZFUlRFWF9BVFRSSUIiXTsKKyAgICAgICAgdmFyIHZl
cnRleEF0dHJpYlN0YXRlcyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFZl
cnRleEF0dHJpYnM7ICsraSkgeworICAgICAgICAgICAgdmFyIHN0YXRlID0ge307CisgICAgICAg
ICAgICB2ZXJ0ZXhBdHRyaWJQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24oYXR0cmliUGFyYW1l
dGVyKSB7CisgICAgICAgICAgICAgICAgc3RhdGVbYXR0cmliUGFyYW1ldGVyXSA9IFJlc291cmNl
LnRvUmVwbGF5YWJsZShnbC5nZXRWZXJ0ZXhBdHRyaWIoaSwgZ2xbYXR0cmliUGFyYW1ldGVyXSks
IGNhY2hlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgc3RhdGUuVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9QT0lOVEVSID0gZ2wuZ2V0VmVydGV4QXR0cmliT2Zmc2V0KGksIGdsLlZFUlRFWF9B
VFRSSUJfQVJSQVlfUE9JTlRFUik7CisgICAgICAgICAgICB2ZXJ0ZXhBdHRyaWJTdGF0ZXMucHVz
aChzdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZ2xTdGF0ZS52ZXJ0ZXhBdHRyaWJTdGF0ZXMg
PSB2ZXJ0ZXhBdHRyaWJTdGF0ZXM7CisKKyAgICAgICAgLy8gVEVYVFVSRVMKKyAgICAgICAgdmFy
IGN1cnJlbnRUZXh0dXJlQmluZGluZyA9IGdsLmdldFBhcmFtZXRlcihnbC5BQ1RJVkVfVEVYVFVS
RSk7CisgICAgICAgIHZhciBtYXhUZXh0dXJlSW1hZ2VVbml0cyA9IGdsLmdldFBhcmFtZXRlcihn
bC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7CisgICAgICAgIHZhciB0ZXh0dXJlQmluZGluZ3Mg
PSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlSW1hZ2VVbml0czsg
KytpKSB7CisgICAgICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgaSk7Cisg
ICAgICAgICAgICB2YXIgc3RhdGUgPSB7CisgICAgICAgICAgICAgICAgVEVYVFVSRV8yRDogUmVz
b3VyY2UudG9SZXBsYXlhYmxlKGdsLmdldFBhcmFtZXRlcihnbC5URVhUVVJFX0JJTkRJTkdfMkQp
LCBjYWNoZSksCisgICAgICAgICAgICAgICAgVEVYVFVSRV9DVUJFX01BUDogUmVzb3VyY2UudG9S
ZXBsYXlhYmxlKGdsLmdldFBhcmFtZXRlcihnbC5URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVApLCBj
YWNoZSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB0ZXh0dXJlQmluZGluZ3MucHVzaChz
dGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZ2xTdGF0ZS50ZXh0dXJlQmluZGluZ3MgPSB0ZXh0
dXJlQmluZGluZ3M7CisgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoY3VycmVudFRleHR1cmVCaW5k
aW5nKTsKKworICAgICAgICBkYXRhLmdsU3RhdGUgPSBnbFN0YXRlOworICAgIH0sCisKKyAgICAv
KiogQGluaGVyaXREb2MgKi8KKyAgICBfZG9SZXBsYXlDYWxsczogZnVuY3Rpb24oZGF0YSwgY2Fj
aGUpCisgICAgeworICAgICAgICB0aGlzLl9wcm94eU9iamVjdCA9IG51bGw7CisgICAgICAgIHRo
aXMuX3JlcGxheUNvbnRleHRDYWxsYmFjayA9IGRhdGEucmVwbGF5Q29udGV4dENhbGxiYWNrOwor
CisgICAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5fcmVwbGF5Q29udGV4dENhbGxiYWNrKCk7Cisg
ICAgICAgIHZhciBjb250ZXh0UmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3QoY29udGV4dCk7
CisgICAgICAgIHZhciBnbCA9IGNvbnRleHRSZXNvdXJjZSA/IGNvbnRleHRSZXNvdXJjZS53cmFw
cGVkT2JqZWN0KCkgOiBjb250ZXh0OworICAgICAgICB0aGlzLnNldFdyYXBwZWRPYmplY3QoZ2wp
OworCisgICAgICAgIHZhciBnbFN0YXRlID0gZGF0YS5nbFN0YXRlOworICAgICAgICBnbC5iaW5k
RnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoZ2xT
dGF0ZS5GUkFNRUJVRkZFUl9CSU5ESU5HLCBjYWNoZSkpOworICAgICAgICBnbC5iaW5kUmVuZGVy
YnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShnbFN0YXRl
LlJFTkRFUkJVRkZFUl9CSU5ESU5HLCBjYWNoZSkpOworCisgICAgICAgIC8vIEVuYWJsZSBvciBk
aXNhYmxlIHNlcnZlci1zaWRlIEdMIGNhcGFiaWxpdGllcy4KKyAgICAgICAgV2ViR0xSZW5kZXJp
bmdDb250ZXh0UmVzb3VyY2UuR0xDYXBhYmlsaXRpZXMuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0
ZXIpIHsKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHBhcmFtZXRlciBpbiBnbFN0YXRlKTsK
KyAgICAgICAgICAgIGlmIChnbFN0YXRlW3BhcmFtZXRlcl0pCisgICAgICAgICAgICAgICAgZ2wu
ZW5hYmxlKGdsW3BhcmFtZXRlcl0pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGdsLmRpc2FibGUoZ2xbcGFyYW1ldGVyXSk7CisgICAgICAgIH0pOworCisgICAgICAgIGdsLmJs
ZW5kQ29sb3IoZ2xTdGF0ZS5CTEVORF9DT0xPUlswXSwgZ2xTdGF0ZS5CTEVORF9DT0xPUlsxXSwg
Z2xTdGF0ZS5CTEVORF9DT0xPUlsyXSwgZ2xTdGF0ZS5CTEVORF9DT0xPUlszXSk7CisgICAgICAg
IGdsLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShnbFN0YXRlLkJMRU5EX0VRVUFUSU9OX1JHQiwgZ2xT
dGF0ZS5CTEVORF9FUVVBVElPTl9BTFBIQSk7CisgICAgICAgIGdsLmJsZW5kRnVuY1NlcGFyYXRl
KGdsU3RhdGUuQkxFTkRfU1JDX1JHQiwgZ2xTdGF0ZS5CTEVORF9EU1RfUkdCLCBnbFN0YXRlLkJM
RU5EX1NSQ19BTFBIQSwgZ2xTdGF0ZS5CTEVORF9EU1RfQUxQSEEpOworICAgICAgICBnbC5jbGVh
ckNvbG9yKGdsU3RhdGUuQ09MT1JfQ0xFQVJfVkFMVUVbMF0sIGdsU3RhdGUuQ09MT1JfQ0xFQVJf
VkFMVUVbMV0sIGdsU3RhdGUuQ09MT1JfQ0xFQVJfVkFMVUVbMl0sIGdsU3RhdGUuQ09MT1JfQ0xF
QVJfVkFMVUVbM10pOworICAgICAgICBnbC5jbGVhckRlcHRoKGdsU3RhdGUuREVQVEhfQ0xFQVJf
VkFMVUUpOworICAgICAgICBnbC5jbGVhclN0ZW5jaWwoZ2xTdGF0ZS5TVEVOQ0lMX0NMRUFSX1ZB
TFVFKTsKKyAgICAgICAgZ2wuY29sb3JNYXNrKGdsU3RhdGUuQ09MT1JfV1JJVEVNQVNLWzBdLCBn
bFN0YXRlLkNPTE9SX1dSSVRFTUFTS1sxXSwgZ2xTdGF0ZS5DT0xPUl9XUklURU1BU0tbMl0sIGds
U3RhdGUuQ09MT1JfV1JJVEVNQVNLWzNdKTsKKyAgICAgICAgZ2wuY3VsbEZhY2UoZ2xTdGF0ZS5D
VUxMX0ZBQ0VfTU9ERSk7CisgICAgICAgIGdsLmRlcHRoRnVuYyhnbFN0YXRlLkRFUFRIX0ZVTkMp
OworICAgICAgICBnbC5kZXB0aE1hc2soZ2xTdGF0ZS5ERVBUSF9XUklURU1BU0spOworICAgICAg
ICBnbC5kZXB0aFJhbmdlKGdsU3RhdGUuREVQVEhfUkFOR0VbMF0sIGdsU3RhdGUuREVQVEhfUkFO
R0VbMV0pOworICAgICAgICBnbC5mcm9udEZhY2UoZ2xTdGF0ZS5GUk9OVF9GQUNFKTsKKyAgICAg
ICAgZ2wuaGludChnbC5HRU5FUkFURV9NSVBNQVBfSElOVCwgZ2xTdGF0ZS5HRU5FUkFURV9NSVBN
QVBfSElOVCk7CisgICAgICAgIGdsLmxpbmVXaWR0aChnbFN0YXRlLkxJTkVfV0lEVEgpOworCisg
ICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLlBpeGVsU3RvcmVQYXJhbWV0ZXJz
LmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyKSB7CisgICAgICAgICAgICBnbC5waXhlbFN0b3Jl
aShnbFtwYXJhbWV0ZXJdLCBnbFN0YXRlW3BhcmFtZXRlcl0pOworICAgICAgICB9KTsKKworICAg
ICAgICBnbC5wb2x5Z29uT2Zmc2V0KGdsU3RhdGUuUE9MWUdPTl9PRkZTRVRfRkFDVE9SLCBnbFN0
YXRlLlBPTFlHT05fT0ZGU0VUX1VOSVRTKTsKKyAgICAgICAgZ2wuc2FtcGxlQ292ZXJhZ2UoZ2xT
dGF0ZS5TQU1QTEVfQ09WRVJBR0VfVkFMVUUsIGdsU3RhdGUuU0FNUExFX0NPVkVSQUdFX0lOVkVS
VCk7CisgICAgICAgIGdsLnN0ZW5jaWxGdW5jU2VwYXJhdGUoZ2wuRlJPTlQsIGdsU3RhdGUuU1RF
TkNJTF9GVU5DLCBnbFN0YXRlLlNURU5DSUxfUkVGLCBnbFN0YXRlLlNURU5DSUxfVkFMVUVfTUFT
Syk7CisgICAgICAgIGdsLnN0ZW5jaWxGdW5jU2VwYXJhdGUoZ2wuQkFDSywgZ2xTdGF0ZS5TVEVO
Q0lMX0JBQ0tfRlVOQywgZ2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfUkVGLCBnbFN0YXRlLlNURU5DSUxf
QkFDS19WQUxVRV9NQVNLKTsKKyAgICAgICAgZ2wuc3RlbmNpbE9wU2VwYXJhdGUoZ2wuRlJPTlQs
IGdsU3RhdGUuU1RFTkNJTF9GQUlMLCBnbFN0YXRlLlNURU5DSUxfUEFTU19ERVBUSF9GQUlMLCBn
bFN0YXRlLlNURU5DSUxfUEFTU19ERVBUSF9QQVNTKTsKKyAgICAgICAgZ2wuc3RlbmNpbE9wU2Vw
YXJhdGUoZ2wuQkFDSywgZ2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfRkFJTCwgZ2xTdGF0ZS5TVEVOQ0lM
X0JBQ0tfUEFTU19ERVBUSF9GQUlMLCBnbFN0YXRlLlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BB
U1MpOworICAgICAgICBnbC5zdGVuY2lsTWFza1NlcGFyYXRlKGdsLkZST05ULCBnbFN0YXRlLlNU
RU5DSUxfV1JJVEVNQVNLKTsKKyAgICAgICAgZ2wuc3RlbmNpbE1hc2tTZXBhcmF0ZShnbC5CQUNL
LCBnbFN0YXRlLlNURU5DSUxfQkFDS19XUklURU1BU0spOworCisgICAgICAgIGdsLnNjaXNzb3Io
Z2xTdGF0ZS5TQ0lTU09SX0JPWFswXSwgZ2xTdGF0ZS5TQ0lTU09SX0JPWFsxXSwgZ2xTdGF0ZS5T
Q0lTU09SX0JPWFsyXSwgZ2xTdGF0ZS5TQ0lTU09SX0JPWFszXSk7CisgICAgICAgIGdsLnZpZXdw
b3J0KGdsU3RhdGUuVklFV1BPUlRbMF0sIGdsU3RhdGUuVklFV1BPUlRbMV0sIGdsU3RhdGUuVklF
V1BPUlRbMl0sIGdsU3RhdGUuVklFV1BPUlRbM10pOworCisgICAgICAgIGdsLnVzZVByb2dyYW0o
UmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShnbFN0YXRlLkNVUlJFTlRfUFJPR1JBTSwgY2FjaGUp
KTsKKworICAgICAgICAvLyBWRVJURVhfQVRUUklCX0FSUkFZUworICAgICAgICB2YXIgbWF4VmVy
dGV4QXR0cmlicyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpOworICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFZlcnRleEF0dHJpYnM7ICsraSkgeworICAgICAg
ICAgICAgdmFyIHN0YXRlID0gZ2xTdGF0ZS52ZXJ0ZXhBdHRyaWJTdGF0ZXNbaV0gfHwge307Cisg
ICAgICAgICAgICBpZiAoc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEKQorICAgICAg
ICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTsKKyAgICAg
ICAgICAgIGlmIChzdGF0ZS5DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpCisgICAgICAgICAgICAgICAg
Z2wudmVydGV4QXR0cmliNGZ2KGksIHN0YXRlLkNVUlJFTlRfVkVSVEVYX0FUVFJJQik7CisgICAg
ICAgICAgICB2YXIgYnVmZmVyID0gUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShzdGF0ZS5WRVJU
RVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HLCBjYWNoZSk7CisgICAgICAgICAgICBpZiAo
YnVmZmVyKSB7CisgICAgICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIs
IGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihpLCBzdGF0
ZS5WRVJURVhfQVRUUklCX0FSUkFZX1NJWkUsIHN0YXRlLlZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQ
RSwgc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVELCBzdGF0ZS5WRVJURVhfQVRU
UklCX0FSUkFZX1NUUklERSwgc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JV
RkZFUiwgUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShnbFN0YXRlLkFSUkFZX0JVRkZFUl9CSU5E
SU5HLCBjYWNoZSkpOworICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVG
RkVSLCBSZXBsYXlhYmxlUmVzb3VyY2UucmVwbGF5KGdsU3RhdGUuRUxFTUVOVF9BUlJBWV9CVUZG
RVJfQklORElORywgY2FjaGUpKTsKKworICAgICAgICAvLyBURVhUVVJFUworICAgICAgICB2YXIg
bWF4VGV4dHVyZUltYWdlVW5pdHMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RFWFRVUkVfSU1B
R0VfVU5JVFMpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVJbWFnZVVu
aXRzOyArK2kpIHsKKyAgICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBp
KTsKKyAgICAgICAgICAgIHZhciBzdGF0ZSA9IGdsU3RhdGUudGV4dHVyZUJpbmRpbmdzW2ldIHx8
IHt9OworICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgUmVwbGF5YWJs
ZVJlc291cmNlLnJlcGxheShzdGF0ZS5URVhUVVJFXzJELCBjYWNoZSkpOworICAgICAgICAgICAg
Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV9DVUJFX01BUCwgUmVwbGF5YWJsZVJlc291cmNlLnJl
cGxheShzdGF0ZS5URVhUVVJFX0NVQkVfTUFQLCBjYWNoZSkpOworICAgICAgICB9CisgICAgICAg
IGdsLmFjdGl2ZVRleHR1cmUoZ2xTdGF0ZS5BQ1RJVkVfVEVYVFVSRSk7CisKKyAgICAgICAgcmV0
dXJuIFJlc291cmNlLnByb3RvdHlwZS5fZG9SZXBsYXlDYWxscy5jYWxsKHRoaXMsIGRhdGEsIGNh
Y2hlKTsKKyAgICB9LAorCiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtPYmplY3R8bnVtYmVyfSB0
YXJnZXQKICAgICAgKiBAcmV0dXJuIHtSZXNvdXJjZX0KQEAgLTk1OSw3ICsxNDcyLDcgQEAgVHJh
Y2VMb2cucHJvdG90eXBlID0gewogICAgICAqLwogICAgIGNhcHR1cmVSZXNvdXJjZTogZnVuY3Rp
b24ocmVzb3VyY2UpCiAgICAgewotICAgICAgICAvLyBGSVhNRTogQ2FwdHVyZSBjdXJyZW50IHJl
c291cmNlIHN0YXRlIHRvIHN0YXJ0IHRoZSByZXBsYXkgZnJvbS4KKyAgICAgICAgcmVzb3VyY2Uu
dG9SZXBsYXlhYmxlKHRoaXMuX3JlcGxheWFibGVzQ2FjaGUpOwogICAgIH0sCiAKICAgICAvKioK
QEAgLTk2Nyw3ICsxNDgwLDEyIEBAIFRyYWNlTG9nLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAg
ICBhZGRDYWxsOiBmdW5jdGlvbihjYWxsKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IENvbnZl
cnQgdGhlIGNhbGwgdG8gYSBSZXBsYXlhYmxlQ2FsbCBhbmQgcHVzaCBpdC4KKyAgICAgICAgdmFy
IHJlcyA9IFJlc291cmNlLmZvck9iamVjdChjYWxsLnJlc3VsdCgpKTsKKyAgICAgICAgaWYgKHJl
cykKKyAgICAgICAgICAgIHRoaXMuY2FwdHVyZVJlc291cmNlKHJlcyk7CisgICAgICAgIHZhciBz
aXplID0gdGhpcy5fcmVwbGF5YWJsZXNDYWNoZS5zaXplKCk7CisgICAgICAgIHRoaXMuX3JlcGxh
eWFibGVDYWxscy5wdXNoKGNhbGwudG9SZXBsYXlhYmxlKHRoaXMuX3JlcGxheWFibGVzQ2FjaGUp
KTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fcmVwbGF5YWJsZXNDYWNoZS5zaXplKCkg
PT09IHNpemUsICJJbnRlcm5hbCBlcnJvcjogV2Ugc2hvdWxkIGhhdmUgY2FwdHVyZWQgYWxsIHRo
ZSByZXNvdXJjZXMgYWxyZWFkeSBieSB0aGlzIHRpbWUuIik7CiAgICAgfQogfQogCkBAIC0xMTU2
LDcgKzE2NzQsNyBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICovCiAgICAg
d3JhcFdlYkdMQ29udGV4dDogZnVuY3Rpb24oZ2xDb250ZXh0KQogICAgIHsKLSAgICAgICAgdmFy
IHJlc291cmNlID0gUmVzb3VyY2UuZm9yT2JqZWN0KGdsQ29udGV4dCkgfHwgbmV3IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dFJlc291cmNlKGdsQ29udGV4dCk7CisgICAgICAgIHZhciByZXNvdXJjZSA9
IFJlc291cmNlLmZvck9iamVjdChnbENvbnRleHQpIHx8IG5ldyBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRSZXNvdXJjZShnbENvbnRleHQsIHRoaXMuX2NvbnN0cnVjdFJlcGxheUNvbnRleHQuYmluZCh0
aGlzLCBnbENvbnRleHQpKTsKICAgICAgICAgdGhpcy5fbWFuYWdlci5yZWdpc3RlclJlc291cmNl
KHJlc291cmNlKTsKICAgICAgICAgdmFyIHByb3h5ID0gcmVzb3VyY2UucHJveHlPYmplY3QoKTsK
ICAgICAgICAgcmV0dXJuIHByb3h5OwpAQCAtMTIyMSw2ICsxNzM5LDcgQEAgSW5qZWN0ZWRTY3Jp
cHQucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICB9CiAgICAg
ICAgIC8vIFJldHVybiBjdXJyZW50IHNjcmVlbnNob3QuCisgICAgICAgIC8vIEZJWE1FOiBTdXBw
b3J0IHJlcGxheWluZyBzZXZlcmFsIGNhbnZhc2VzIHNpbXVsdGFuZW91c2x5LgogICAgICAgICBy
ZXR1cm4gdGhpcy5fcmVwbGF5Q29udGV4dC5jYW52YXMudG9EYXRhVVJMKCk7CiAgICAgfSwKIApA
QCAtMTIzMCw2ICsxNzQ5LDI2IEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICBf
bWFrZVRyYWNlTG9nSWQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHJldHVybiAie1wiaW5q
ZWN0ZWRTY3JpcHRJZFwiOiIgKyBpbmplY3RlZFNjcmlwdElkICsgIixcInRyYWNlTG9nSWRcIjoi
ICsgKCsrdGhpcy5fbGFzdFRyYWNlTG9nSWQpICsgIn0iOworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gb3JpZ2luYWxHbENvbnRleHQKKyAg
ICAgKiBAcmV0dXJuIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9CisgICAgICovCisgICAgX2NvbnN0
cnVjdFJlcGxheUNvbnRleHQ6IGZ1bmN0aW9uKG9yaWdpbmFsR2xDb250ZXh0KQorICAgIHsKKyAg
ICAgICAgdmFyIHJlcGxheUNvbnRleHQgPSBvcmlnaW5hbEdsQ29udGV4dFsiX19yZXBsYXlDb250
ZXh0Il07CisgICAgICAgIGlmICghcmVwbGF5Q29udGV4dCkgeworICAgICAgICAgICAgdmFyIGNh
bnZhcyA9IG9yaWdpbmFsR2xDb250ZXh0LmNhbnZhcy5jbG9uZU5vZGUodHJ1ZSk7CisgICAgICAg
ICAgICAvLyBGSVhNRTogUGFzcyBvcmlnaW5hbCBjb250ZXh0IGlkIGluc3RlYWQgb2YgImV4cGVy
aW1lbnRhbC13ZWJnbCIuCisgICAgICAgICAgICAvLyBGSVhNRTogUGFzcyBvcmlnaW5hbCBDb250
ZXh0QXR0cmlidXRlcyB0byB0aGUgZ2V0Q29udGV4dCgpIG1ldGhvZC4KKyAgICAgICAgICAgIHJl
cGxheUNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIik7Cisg
ICAgICAgICAgICBvcmlnaW5hbEdsQ29udGV4dFsiX19yZXBsYXlDb250ZXh0Il0gPSByZXBsYXlD
b250ZXh0OworICAgICAgICAgICAgdGhpcy5fcmVwbGF5Q29udGV4dCA9IHJlcGxheUNvbnRleHQ7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogUmVzZXQgdGhlIHJlcGxh
eSBHTCBzdGF0ZSBhbmQgY2xlYXIgdGhlIGNhbnZhcy4KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gcmVwbGF5Q29udGV4dDsKICAgICB9CiB9CiAK
</data>
<flag name="review"
          id="170984"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160427</attachid>
            <date>2012-08-24 08:47:18 -0700</date>
            <delta_ts>2012-08-24 08:57:02 -0700</delta_ts>
            <desc>Patch to land</desc>
            <filename>bug-94933-20120824194712.patch</filename>
            <type>text/plain</type>
            <size>32814</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2NTg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDI5YjdiMzA3ZGI5MTY2
ZWNiZTkzYjQ5OWRjNDNhODU2ZGM2YzI0OC4uYWRiMzViZjRmNmU2ZDNkMjM4ZWYyYTMxYWNmYmJl
MWZjYjA5NTM1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA4LTI0ICBBbmRy
ZXkgQWRhaWtpbiAgPGFhbmRyZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFtXZWJHTF0gSW1wbGVtZW50IHNlcmlhbGl6aW5nIFdlYkdMIHN0YXRlIGFuZCByZXBsYXlp
bmcgaXQgbGF0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk0OTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyB3aWxsIGFsbG93IHVzIHRvIHNhdmUgdGhlIFdlYkdMIHN0YXRlIGF0IGFueSBhcmJp
dHJhcnkgcG9pbnQgaW4gb3JkZXIgdG8gcmVwbGF5IGEgdHJhY2UgbG9nIGxhdGVyIG9uIGFub3Ro
ZXIgY2FudmFzLgorICAgICAgICBNYWluIHBvaW50cyBvZiB0aGUgY2hhbmdlOgorICAgICAgICAt
IEFsbG93IGV2ZXJ5IFJlc291cmNlIGFuZCBDYWxsIGluc3RhbmNlcyBiZSBzZXJpYWxpemVkIHRv
IGEgUmVwbGF5YWJsZSwgYW5kIHJlc3VycmVjdGVkIGJhY2sgZHVyaW5nIGEgcmVwbGF5IG9uIGFu
b3RoZXIgY2FudmFzLgorCisgICAgICAgIC0gQmVmb3JlIGV4ZWN1dGluZyBhbiBvcmlnaW5hbCBX
ZWJHTCBjYWxsIGFuZCBzYXZpbmcgaXQgdG8gYSB0cmFjZSBsb2csIGZpcnN0IHNlcmlhbGl6ZSBh
bGwgdGhlIFJlc291cmNlcyB0aGF0IHdpbGwgYmUgaW52b2x2ZWQgaW4KKyAgICAgICAgICB0aGlz
IGNhbGwsIGlmIHRoZXkgYXJlIG5vdCB5ZXQgc2VyaWFsaXplZC4gVGhlIGxhdHRlciBwYXJ0IGlz
IGltcGxlbWVudGVkIHdpdGggYSBDYWNoZSBpbnN0YW5jZSwgY2hlY2tpbmcgdGhhdCB3ZSBjb252
ZXJ0IGEgUmVzb3VyY2UKKyAgICAgICAgICB0byBhIFJlcGxheWFibGUgb25seSBvbmNlOiB0aGUg
Zmlyc3QgdGltZSBpdCB3YXMgdXNlZCBpbiB0aGUgdHJhY2UgbG9nIGJlaW5nIGNvbGxlY3RlZC4g
V2UgZG8gbm90IG5lZWQgdG8gc2VyaWFsaXplIHRoZSBzdWJzZXF1ZW50CisgICAgICAgICAgY2hh
bmdlcyB0byB0aGlzIFJlc291cmNlJ3Mgc3RhdGUgKGlmIGFueSksIHNpbmNlIHRoZXkgd2lsbCBi
ZSBzYXZlZCBpbiB0aGUgdHJhY2UgbG9nIGJlaW5nIGNvbGxlY3RlZCBhbmQgcmVwbGF5ZWQgYXV0
b21hdGljYWxseS4KKworICAgICAgICAtIFNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFdlYkdM
IHN0YXRlIG1heSBiZSByZXF1ZXN0ZWQgaW4gdGhlIHJ1bnRpbWUgKGUuZy4gd2l0aCB0aGUgZ2wu
Z2V0UGFyYW1ldGVyIG1ldGhvZCkuIFdlIHVzZSB0aGlzIHdoZXJldmVyCisgICAgICAgICAgcG9z
c2libGUgaW5zdGVhZCBvZiBjb2xsZWN0aW5nIENhbGxzIGluIGEgUmVzb3VyY2UgbG9nLiBPdGhl
cndpc2UsIHdlIGhhdmUgdG8gY29sbGVjdCBXZWJHTCBjYWxscyAobGlrZSBnbC50ZXhJbWFnZTJE
KSBpbiBvcmRlciB0bworICAgICAgICAgIHJlcGxheSB0aGVtIGxhdGVyLgorCisgICAgICAgIC0g
TGF0ZXIgdGhlIFJlcGxheWFibGUgb2JqZWN0cyBoaWVyYXJjaHkgKHRoZSBUcmFjZUxvZykgbWF5
IGJlIHNlcmlhbGl6ZWQgZnVydGhlciBmb3IgY3Jvc3MtZGV2aWNlIHRyYW5zbWlzc2lvbiwgZm9y
IGV4YW1wbGUuCisgICAgICAgIAorCisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
V2ViR0xNb2R1bGVTb3VyY2UuanM6CisgICAgICAgICguKToKKwogMjAxMi0wOC0yNCAgSm9zaHVh
IE5ldHRlcmZpZWxkICA8am5ldHRlcmZpZWxkQHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVy
cnldIEV4dGVuZCBMYXllckZpbHRlclJlbmRlcmVyIGluIHByZXBhcmF0aW9uIGZvciBDU1MgU2hh
ZGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
V2ViR0xNb2R1bGVTb3VyY2UuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5qcwppbmRleCBkYThmYTEzMGNiMmU4MmU3ZjA5OTUwZjAw
ZWYwZjJkYzFjYTUyNGEzLi5iZWU0NWRjZWU1ZmZlNTFjNzhkYWJjZWZhYWYwZmI1N2QwZjk1YmRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJH
TE1vZHVsZVNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5qcwpAQCAtMjQ1LDYgKzI0NSw0OSBAQCBDYWxsLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgIGlmICghUmVzb3VyY2UuZm9yT2JqZWN0KHRoaXMuX2FyZ3Nb
aV0pKQogICAgICAgICAgICAgICAgIHRoaXMuX2FyZ3NbaV0gPSBUeXBlVXRpbHMuY2xvbmUodGhp
cy5fYXJnc1tpXSk7CiAgICAgICAgIH0KKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFt
IHtDYWNoZX0gY2FjaGUKKyAgICAgKiBAcmV0dXJuIHtSZXBsYXlhYmxlQ2FsbH0KKyAgICAgKi8K
KyAgICB0b1JlcGxheWFibGU6IGZ1bmN0aW9uKGNhY2hlKQorICAgIHsKKyAgICAgICAgdGhpcy5m
cmVlemUoKTsKKyAgICAgICAgdmFyIHRoaXNPYmplY3QgPSAvKiogQHR5cGUge1JlcGxheWFibGVS
ZXNvdXJjZX0gKi8gUmVzb3VyY2UudG9SZXBsYXlhYmxlKHRoaXMuX3RoaXNPYmplY3QsIGNhY2hl
KTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IFJlc291cmNlLnRvUmVwbGF5YWJsZSh0aGlzLl9yZXN1
bHQsIGNhY2hlKTsKKyAgICAgICAgdmFyIGFyZ3MgPSB0aGlzLl9hcmdzLm1hcChmdW5jdGlvbihv
YmopIHsKKyAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZS50b1JlcGxheWFibGUob2JqLCBjYWNo
ZSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gbmV3IFJlcGxheWFibGVDYWxsKHRoaXNP
YmplY3QsIHRoaXMuX2Z1bmN0aW9uTmFtZSwgYXJncywgcmVzdWx0KTsKKyAgICB9LAorCisgICAg
LyoqCisgICAgICogQHBhcmFtIHtSZXBsYXlhYmxlQ2FsbH0gcmVwbGF5YWJsZUNhbGwKKyAgICAg
KiBAcGFyYW0ge0NhY2hlfSBjYWNoZQorICAgICAqIEByZXR1cm4ge0NhbGx9CisgICAgICovCisg
ICAgcmVwbGF5OiBmdW5jdGlvbihyZXBsYXlhYmxlQ2FsbCwgY2FjaGUpCisgICAgeworICAgICAg
ICB2YXIgcmVwbGF5T2JqZWN0ID0gUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShyZXBsYXlhYmxl
Q2FsbC5yZXNvdXJjZSgpLCBjYWNoZSk7CisgICAgICAgIHZhciByZXBsYXlGdW5jdGlvbiA9IHJl
cGxheU9iamVjdFtyZXBsYXlhYmxlQ2FsbC5mdW5jdGlvbk5hbWUoKV07CisgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHR5cGVvZiByZXBsYXlGdW5jdGlvbiA9PT0gImZ1bmN0aW9uIiwgIkV4cGVjdGVk
IGEgZnVuY3Rpb24gdG8gcmVwbGF5Iik7CisgICAgICAgIHZhciByZXBsYXlBcmdzID0gcmVwbGF5
YWJsZUNhbGwuYXJncygpLm1hcChmdW5jdGlvbihvYmopIHsKKyAgICAgICAgICAgIHJldHVybiBS
ZXBsYXlhYmxlUmVzb3VyY2UucmVwbGF5KG9iaiwgY2FjaGUpOworICAgICAgICB9KTsKKyAgICAg
ICAgdmFyIHJlcGxheVJlc3VsdCA9IHJlcGxheUZ1bmN0aW9uLmFwcGx5KHJlcGxheU9iamVjdCwg
cmVwbGF5QXJncyk7CisgICAgICAgIGlmIChyZXBsYXlhYmxlQ2FsbC5yZXN1bHQoKSBpbnN0YW5j
ZW9mIFJlcGxheWFibGVSZXNvdXJjZSkgeworICAgICAgICAgICAgdmFyIHJlc291cmNlID0gcmVw
bGF5YWJsZUNhbGwucmVzdWx0KCkucmVwbGF5KGNhY2hlKTsKKyAgICAgICAgICAgIGlmICghcmVz
b3VyY2Uud3JhcHBlZE9iamVjdCgpKQorICAgICAgICAgICAgICAgIHJlc291cmNlLnNldFdyYXBw
ZWRPYmplY3QocmVwbGF5UmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX3RoaXNP
YmplY3QgPSByZXBsYXlPYmplY3Q7CisgICAgICAgIHRoaXMuX2Z1bmN0aW9uTmFtZSA9IHJlcGxh
eWFibGVDYWxsLmZ1bmN0aW9uTmFtZSgpOworICAgICAgICB0aGlzLl9hcmdzID0gcmVwbGF5QXJn
czsKKyAgICAgICAgdGhpcy5fcmVzdWx0ID0gcmVwbGF5UmVzdWx0OworICAgICAgICB0aGlzLl9m
cmVlemVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQogfQogCkBAIC0zMDIs
NyArMzQ1LDggQEAgUmVwbGF5YWJsZUNhbGwucHJvdG90eXBlID0gewogICAgICAqLwogICAgIHJl
cGxheTogZnVuY3Rpb24oY2FjaGUpCiAgICAgewotICAgICAgICAvLyBGSVhNRTogRG8gdGhlIHJl
cGxheS4KKyAgICAgICAgdmFyIGNhbGwgPSBPYmplY3QuY3JlYXRlKENhbGwucHJvdG90eXBlKTsK
KyAgICAgICAgcmV0dXJuIGNhbGwucmVwbGF5KHRoaXMsIGNhY2hlKTsKICAgICB9CiB9CiAKQEAg
LTMzOCw2ICszODIsMTcgQEAgUmVzb3VyY2UuZm9yT2JqZWN0ID0gZnVuY3Rpb24ob2JqKQogICAg
IHJldHVybiBudWxsOwogfQogCisvKioKKyAqIEBwYXJhbSB7UmVzb3VyY2V8Kn0gb2JqCisgKiBA
cGFyYW0ge0NhY2hlfSBjYWNoZQorICogQHJldHVybiB7UmVwbGF5YWJsZVJlc291cmNlfCp9Cisg
Ki8KK1Jlc291cmNlLnRvUmVwbGF5YWJsZSA9IGZ1bmN0aW9uKG9iaiwgY2FjaGUpCit7CisgICAg
dmFyIHJlc291cmNlID0gUmVzb3VyY2UuZm9yT2JqZWN0KG9iaik7CisgICAgcmV0dXJuIHJlc291
cmNlID8gcmVzb3VyY2UudG9SZXBsYXlhYmxlKGNhY2hlKSA6IG9iajsKK30KKwogUmVzb3VyY2Uu
cHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAqIEByZXR1cm4ge251bWJlcn0KQEAgLTQwMCw2
ICs0NTUsNjYgQEAgUmVzb3VyY2UucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKKyAg
ICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQorICAgICAqIEByZXR1cm4ge1JlcGxheWFibGVSZXNv
dXJjZX0KKyAgICAgKi8KKyAgICB0b1JlcGxheWFibGU6IGZ1bmN0aW9uKGNhY2hlKQorICAgIHsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IGNhY2hlLmdldCh0aGlzLl9pZCk7CisgICAgICAgIGlmIChy
ZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB2YXIgZGF0YSA9IHsK
KyAgICAgICAgICAgIGlkOiB0aGlzLl9pZAorICAgICAgICB9OworICAgICAgICByZXN1bHQgPSBu
ZXcgUmVwbGF5YWJsZVJlc291cmNlKHRoaXMsIGRhdGEpOworICAgICAgICBjYWNoZS5wdXQodGhp
cy5faWQsIHJlc3VsdCk7IC8vIFB1dCBpbnRvIHRoZSBjYWNoZSBlYXJseSB0byBhdm9pZCBsb29w
cy4KKyAgICAgICAgZGF0YS5jYWxscyA9IHRoaXMuX2NhbGxzLm1hcChmdW5jdGlvbihjYWxsKSB7
CisgICAgICAgICAgICByZXR1cm4gY2FsbC50b1JlcGxheWFibGUoY2FjaGUpOworICAgICAgICB9
KTsKKyAgICAgICAgdGhpcy5fcG9wdWxhdGVSZXBsYXlhYmxlRGF0YShkYXRhLCBjYWNoZSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7
T2JqZWN0fSBkYXRhCisgICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAgICAgKi8KKyAgICBf
cG9wdWxhdGVSZXBsYXlhYmxlRGF0YTogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCisgICAgeworICAg
ICAgICAvLyBEbyBub3RoaW5nLiBTaG91bGQgYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YQorICAgICAqIEBw
YXJhbSB7Q2FjaGV9IGNhY2hlCisgICAgICogQHJldHVybiB7UmVzb3VyY2V9CisgICAgICovCisg
ICAgcmVwbGF5OiBmdW5jdGlvbihkYXRhLCBjYWNoZSkKKyAgICB7CisgICAgICAgIHZhciByZXNv
dXJjZSA9IGNhY2hlLmdldChkYXRhLmlkKTsKKyAgICAgICAgaWYgKHJlc291cmNlKQorICAgICAg
ICAgICAgcmV0dXJuIHJlc291cmNlOworICAgICAgICB0aGlzLl9pZCA9IGRhdGEuaWQ7CisgICAg
ICAgIHRoaXMuX3Jlc291cmNlTWFuYWdlciA9IG51bGw7CisgICAgICAgIHRoaXMuX2NhbGxzID0g
W107CisgICAgICAgIHRoaXMuX3dyYXBwZWRPYmplY3QgPSBudWxsOworICAgICAgICBjYWNoZS5w
dXQoZGF0YS5pZCwgdGhpcyk7IC8vIFB1dCBpbnRvIHRoZSBjYWNoZSBlYXJseSB0byBhdm9pZCBs
b29wcy4KKyAgICAgICAgdGhpcy5fZG9SZXBsYXlDYWxscyhkYXRhLCBjYWNoZSk7CisgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3dyYXBwZWRPYmplY3QsICJSZXNvdXJjZSBzaG91bGQgYmUg
cmVjb25zdHJ1Y3RlZCEiKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIC8q
KgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhCisgICAgICogQHBhcmFtIHtDYWNoZX0gY2Fj
aGUKKyAgICAgKi8KKyAgICBfZG9SZXBsYXlDYWxsczogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCisg
ICAgeworICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IGRhdGEuY2FsbHMubGVuZ3RoOyBpIDwg
bjsgKytpKQorICAgICAgICAgICAgdGhpcy5fY2FsbHMucHVzaChkYXRhLmNhbGxzW2ldLnJlcGxh
eShjYWNoZSkpOworICAgIH0sCisKKyAgICAvKioKICAgICAgKiBAcGFyYW0ge0NhbGx9IGNhbGwK
ICAgICAgKi8KICAgICBwdXNoQ2FsbDogZnVuY3Rpb24oY2FsbCkKQEAgLTQyNCw2ICs1MzksOCBA
QCBSZXNvdXJjZS5wcm90b3R5cGUgPSB7CiAgKi8KIGZ1bmN0aW9uIFJlcGxheWFibGVSZXNvdXJj
ZShvcmlnaW5hbFJlc291cmNlLCBkYXRhKQogeworICAgIHRoaXMuX3Byb3RvID0gb3JpZ2luYWxS
ZXNvdXJjZS5fX3Byb3RvX187CisgICAgdGhpcy5fZGF0YSA9IGRhdGE7CiB9CiAKIFJlcGxheWFi
bGVSZXNvdXJjZS5wcm90b3R5cGUgPSB7CkBAIC00MzMsMTEgKzU1MCwyNCBAQCBSZXBsYXlhYmxl
UmVzb3VyY2UucHJvdG90eXBlID0gewogICAgICAqLwogICAgIHJlcGxheTogZnVuY3Rpb24oY2Fj
aGUpCiAgICAgewotICAgICAgICAvLyBGSVhNRTogRG8gdGhlIHJlcGxheS4KKyAgICAgICAgdmFy
IHJlc3VsdCA9IE9iamVjdC5jcmVhdGUodGhpcy5fcHJvdG8pOworICAgICAgICByZXN1bHQgPSBy
ZXN1bHQucmVwbGF5KHRoaXMuX2RhdGEsIGNhY2hlKQorICAgICAgICBjb25zb2xlLmFzc2VydChy
ZXN1bHQuX19wcm90b19fID09PSB0aGlzLl9wcm90bywgIldyb25nIHR5cGUgb2YgYSByZXBsYXkg
cmVzdWx0Iik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogfQogCiAvKioKKyAqIEBw
YXJhbSB7UmVwbGF5YWJsZVJlc291cmNlfCp9IG9iagorICogQHBhcmFtIHtDYWNoZX0gY2FjaGUK
KyAqIEByZXR1cm4geyp9CisgKi8KK1JlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkgPSBmdW5jdGlv
bihvYmosIGNhY2hlKQoreworICAgIHJldHVybiAob2JqIGluc3RhbmNlb2YgUmVwbGF5YWJsZVJl
c291cmNlKSA/IG9iai5yZXBsYXkoY2FjaGUpLndyYXBwZWRPYmplY3QoKSA6IG9iajsKK30KKwor
LyoqCiAgKiBAY29uc3RydWN0b3IKICAqIEBleHRlbmRzIHtSZXNvdXJjZX0KICAqLwpAQCAtNDQ5
LDYgKzU3OSw2OSBAQCBmdW5jdGlvbiBXZWJHTEJvdW5kUmVzb3VyY2Uod3JhcHBlZE9iamVjdCkK
IAogV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZSA9IHsKICAgICAvKioKKyAgICAgKiBAb3Zl
cnJpZGUKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YQorICAgICAqIEBwYXJhbSB7Q2FjaGV9
IGNhY2hlCisgICAgICovCisgICAgX3BvcHVsYXRlUmVwbGF5YWJsZURhdGE6IGZ1bmN0aW9uKGRh
dGEsIGNhY2hlKQorICAgIHsKKyAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7CisgICAg
ICAgIGRhdGEuc3RhdGUgPSB7fTsKKyAgICAgICAgT2JqZWN0LmtleXMoc3RhdGUpLmZvckVhY2go
ZnVuY3Rpb24ocGFyYW1ldGVyKSB7CisgICAgICAgICAgICBkYXRhLnN0YXRlW3BhcmFtZXRlcl0g
PSBSZXNvdXJjZS50b1JlcGxheWFibGUoc3RhdGVbcGFyYW1ldGVyXSwgY2FjaGUpOworICAgICAg
ICB9KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisgICAgICogQHBhcmFt
IHtPYmplY3R9IGRhdGEKKyAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQorICAgICAqLworICAg
IF9kb1JlcGxheUNhbGxzOiBmdW5jdGlvbihkYXRhLCBjYWNoZSkKKyAgICB7CisgICAgICAgIHZh
ciBzdGF0ZSA9IHt9OworICAgICAgICBPYmplY3Qua2V5cyhkYXRhLnN0YXRlKS5mb3JFYWNoKGZ1
bmN0aW9uKHBhcmFtZXRlcikgeworICAgICAgICAgICAgc3RhdGVbcGFyYW1ldGVyXSA9IFJlcGxh
eWFibGVSZXNvdXJjZS5yZXBsYXkoZGF0YS5zdGF0ZVtwYXJhbWV0ZXJdLCBjYWNoZSk7CisgICAg
ICAgIH0pOworICAgICAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlOworCisgICAgICAgIHZhciBnbCA9
IHRoaXMuX3JlcGxheUNvbnRleHRSZXNvdXJjZShkYXRhLCBjYWNoZSkud3JhcHBlZE9iamVjdCgp
OworCisgICAgICAgIHZhciBiaW5kaW5nc0RhdGEgPSB7CisgICAgICAgICAgICBURVhUVVJFXzJE
OiBbImJpbmRUZXh0dXJlIiwgIlRFWFRVUkVfQklORElOR18yRCJdLAorICAgICAgICAgICAgVEVY
VFVSRV9DVUJFX01BUDogWyJiaW5kVGV4dHVyZSIsICJURVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVAi
XSwKKyAgICAgICAgICAgIEFSUkFZX0JVRkZFUjogWyJiaW5kQnVmZmVyIiwgIkFSUkFZX0JVRkZF
Ul9CSU5ESU5HIl0sCisgICAgICAgICAgICBFTEVNRU5UX0FSUkFZX0JVRkZFUjogWyJiaW5kQnVm
ZmVyIiwgIkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkciXSwKKyAgICAgICAgICAgIEZSQU1F
QlVGRkVSOiBbImJpbmRGcmFtZWJ1ZmZlciIsICJGUkFNRUJVRkZFUl9CSU5ESU5HIl0sCisgICAg
ICAgICAgICBSRU5ERVJCVUZGRVI6IFsiYmluZFJlbmRlcmJ1ZmZlciIsICJSRU5ERVJCVUZGRVJf
QklORElORyJdCisgICAgICAgIH07CisgICAgICAgIHZhciBvcmlnaW5hbEJpbmRpbmdzID0ge307
CisgICAgICAgIE9iamVjdC5rZXlzKGJpbmRpbmdzRGF0YSkuZm9yRWFjaChmdW5jdGlvbihiaW5k
aW5nVGFyZ2V0KSB7CisgICAgICAgICAgICB2YXIgYmluZGluZ1BhcmFtZXRlciA9IGJpbmRpbmdz
RGF0YVtiaW5kaW5nVGFyZ2V0XVsxXTsKKyAgICAgICAgICAgIG9yaWdpbmFsQmluZGluZ3NbYmlu
ZGluZ1RhcmdldF0gPSBnbC5nZXRQYXJhbWV0ZXIoZ2xbYmluZGluZ1BhcmFtZXRlcl0pOworICAg
ICAgICB9KTsKKworICAgICAgICBSZXNvdXJjZS5wcm90b3R5cGUuX2RvUmVwbGF5Q2FsbHMuY2Fs
bCh0aGlzLCBkYXRhLCBjYWNoZSk7CisKKyAgICAgICAgT2JqZWN0LmtleXMoYmluZGluZ3NEYXRh
KS5mb3JFYWNoKGZ1bmN0aW9uKGJpbmRpbmdUYXJnZXQpIHsKKyAgICAgICAgICAgIHZhciBiaW5k
TWV0aG9kTmFtZSA9IGJpbmRpbmdzRGF0YVtiaW5kaW5nVGFyZ2V0XVswXTsKKyAgICAgICAgICAg
IGdsW2JpbmRNZXRob2ROYW1lXS5jYWxsKGdsLCBnbFtiaW5kaW5nVGFyZ2V0XSwgb3JpZ2luYWxC
aW5kaW5nc1tiaW5kaW5nVGFyZ2V0XSk7CisgICAgICAgIH0pOworICAgIH0sCisKKyAgICBfcmVw
bGF5Q29udGV4dFJlc291cmNlOiBmdW5jdGlvbihkYXRhLCBjYWNoZSkKKyAgICB7CisgICAgICAg
IHZhciBjYWxscyA9IGRhdGEuY2FsbHM7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gY2Fs
bHMubGVuZ3RoOyBpIDwgbjsgKytpKSB7CisgICAgICAgICAgICB2YXIgcmVzb3VyY2UgPSBSZXBs
YXlhYmxlUmVzb3VyY2UucmVwbGF5KGNhbGxzW2ldLnJlc291cmNlKCksIGNhY2hlKTsKKyAgICAg
ICAgICAgIHZhciBjb250ZXh0UmVzb3VyY2UgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJj
ZS5mb3JPYmplY3QocmVzb3VyY2UpOworICAgICAgICAgICAgaWYgKGNvbnRleHRSZXNvdXJjZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFJlc291cmNlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBudWxsOworICAgIH0sCisKKyAgICAvKioKICAgICAgKiBAcGFyYW0ge251bWJl
cn0gdGFyZ2V0CiAgICAgICogQHBhcmFtIHtzdHJpbmd9IGJpbmRNZXRob2ROYW1lCiAgICAgICov
CkBAIC00NzMsNyArNjY2LDMxIEBAIGZ1bmN0aW9uIFdlYkdMVGV4dHVyZVJlc291cmNlKHdyYXBw
ZWRPYmplY3QpCiB9CiAKIFdlYkdMVGV4dHVyZVJlc291cmNlLnByb3RvdHlwZSA9IHsKLSAgICAv
KiogQGluaGVyaXREb2MgKi8KKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKiBAcGFy
YW0ge09iamVjdH0gZGF0YQorICAgICAqIEBwYXJhbSB7Q2FjaGV9IGNhY2hlCisgICAgICovCisg
ICAgX2RvUmVwbGF5Q2FsbHM6IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQorICAgIHsKKyAgICAgICAg
dmFyIGdsID0gdGhpcy5fcmVwbGF5Q29udGV4dFJlc291cmNlKGRhdGEsIGNhY2hlKS53cmFwcGVk
T2JqZWN0KCk7CisKKyAgICAgICAgdmFyIHN0YXRlID0ge307CisgICAgICAgIFdlYkdMUmVuZGVy
aW5nQ29udGV4dFJlc291cmNlLlBpeGVsU3RvcmVQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24o
cGFyYW1ldGVyKSB7CisgICAgICAgICAgICBzdGF0ZVtwYXJhbWV0ZXJdID0gZ2wuZ2V0UGFyYW1l
dGVyKGdsW3BhcmFtZXRlcl0pOworICAgICAgICB9KTsKKworICAgICAgICBXZWJHTEJvdW5kUmVz
b3VyY2UucHJvdG90eXBlLl9kb1JlcGxheUNhbGxzLmNhbGwodGhpcywgZGF0YSwgY2FjaGUpOwor
CisgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLlBpeGVsU3RvcmVQYXJhbWV0
ZXJzLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyKSB7CisgICAgICAgICAgICBnbC5waXhlbFN0
b3JlaShnbFtwYXJhbWV0ZXJdLCBzdGF0ZVtwYXJhbWV0ZXJdKTsKKyAgICAgICAgfSk7CisgICAg
fSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAqIEBwYXJhbSB7Q2FsbH0gY2Fs
bAorICAgICAqLwogICAgIHB1c2hDYWxsOiBmdW5jdGlvbihjYWxsKQogICAgIHsKICAgICAgICAg
dmFyIGdsID0gY2FsbC5yZXNvdXJjZSgpLndyYXBwZWRPYmplY3QoKTsKQEAgLTUzNiw4ICs3NTMs
MTExIEBAIGZ1bmN0aW9uIFdlYkdMUHJvZ3JhbVJlc291cmNlKHdyYXBwZWRPYmplY3QpCiAgICAg
UmVzb3VyY2UuY2FsbCh0aGlzLCB3cmFwcGVkT2JqZWN0KTsKIH0KIAorLyoqCisgKiBAdHlwZSB7
T2JqZWN0LjxudW1iZXIsc3RyaW5nPn0KKyAqLworV2ViR0xQcm9ncmFtUmVzb3VyY2UuVW5pZm9y
bU1ldGhvZE5hbWVzID0gbnVsbDsKKwogV2ViR0xQcm9ncmFtUmVzb3VyY2UucHJvdG90eXBlID0g
ewotICAgIC8qKiBAaW5oZXJpdERvYyAqLworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAg
ICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhCisgICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAg
ICAgKi8KKyAgICBfcG9wdWxhdGVSZXBsYXlhYmxlRGF0YTogZnVuY3Rpb24oZGF0YSwgY2FjaGUp
CisgICAgeworICAgICAgICB2YXIgZ2wgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5m
b3JPYmplY3QodGhpcykud3JhcHBlZE9iamVjdCgpOworICAgICAgICB2YXIgcHJvZ3JhbSA9IHRo
aXMud3JhcHBlZE9iamVjdCgpOworCisgICAgICAgIHZhciB1bmlmb3JtcyA9IFtdOworICAgICAg
ICB2YXIgdW5pZm9ybXNDb3VudCA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wu
QUNUSVZFX1VOSUZPUk1TKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmlmb3Jtc0Nv
dW50OyArK2kpIHsKKyAgICAgICAgICAgIHZhciBhY3RpdmVJbmZvID0gZ2wuZ2V0QWN0aXZlVW5p
Zm9ybShwcm9ncmFtLCBpKTsKKyAgICAgICAgICAgIGlmICghYWN0aXZlSW5mbykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHZhciB1bmlmb3JtTG9jYXRpb24gPSBnbC5n
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgYWN0aXZlSW5mby5uYW1lKTsKKyAgICAgICAgICAg
IGlmICghdW5pZm9ybUxvY2F0aW9uKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgdmFyIHZhbHVlID0gZ2wuZ2V0VW5pZm9ybShwcm9ncmFtLCB1bmlmb3JtTG9jYXRpb24p
OworICAgICAgICAgICAgdW5pZm9ybXMucHVzaCh7CisgICAgICAgICAgICAgICAgbmFtZTogYWN0
aXZlSW5mby5uYW1lLAorICAgICAgICAgICAgICAgIHR5cGU6IGFjdGl2ZUluZm8udHlwZSwKKyAg
ICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUKKyAgICAgICAgICAgIH0pOworICAgICAgICB9Cisg
ICAgICAgIGRhdGEudW5pZm9ybXMgPSB1bmlmb3JtczsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICogQG92ZXJyaWRlCisgICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEKKyAgICAgKiBAcGFyYW0g
e0NhY2hlfSBjYWNoZQorICAgICAqLworICAgIF9kb1JlcGxheUNhbGxzOiBmdW5jdGlvbihkYXRh
LCBjYWNoZSkKKyAgICB7CisgICAgICAgIFJlc291cmNlLnByb3RvdHlwZS5fZG9SZXBsYXlDYWxs
cy5jYWxsKHRoaXMsIGRhdGEsIGNhY2hlKTsKKyAgICAgICAgdmFyIGdsID0gV2ViR0xSZW5kZXJp
bmdDb250ZXh0UmVzb3VyY2UuZm9yT2JqZWN0KHRoaXMpLndyYXBwZWRPYmplY3QoKTsKKyAgICAg
ICAgdmFyIHByb2dyYW0gPSB0aGlzLndyYXBwZWRPYmplY3QoKTsKKworICAgICAgICB2YXIgb3Jp
Z2luYWxQcm9ncmFtID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLkNVUlJFTlRfUFJPR1JBTSk7CisgICAg
ICAgIHZhciBjdXJyZW50UHJvZ3JhbSA9IG9yaWdpbmFsUHJvZ3JhbTsKKyAgICAgICAgCisgICAg
ICAgIGRhdGEudW5pZm9ybXMuZm9yRWFjaChmdW5jdGlvbih1bmlmb3JtKSB7CisgICAgICAgICAg
ICB2YXIgdW5pZm9ybUxvY2F0aW9uID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIHVu
aWZvcm0ubmFtZSk7CisgICAgICAgICAgICBpZiAoIXVuaWZvcm1Mb2NhdGlvbikKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoY3VycmVudFByb2dyYW0gIT09IHByb2dy
YW0pIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07CisgICAgICAg
ICAgICAgICAgZ2wudXNlUHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHZhciBtZXRob2ROYW1lID0gdGhpcy5fdW5pZm9ybU1ldGhvZE5hbWVCeVR5cGUoZ2wsIHVu
aWZvcm0udHlwZSk7CisgICAgICAgICAgICBpZiAobWV0aG9kTmFtZS5pbmRleE9mKCJNYXRyaXgi
KSA9PT0gLTEpCisgICAgICAgICAgICAgICAgZ2xbbWV0aG9kTmFtZV0uY2FsbChnbCwgdW5pZm9y
bUxvY2F0aW9uLCB1bmlmb3JtLnZhbHVlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBnbFttZXRob2ROYW1lXS5jYWxsKGdsLCB1bmlmb3JtTG9jYXRpb24sIGZhbHNlLCB1bmlm
b3JtLnZhbHVlKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaWYgKGN1cnJlbnRQcm9ncmFtICE9
PSBvcmlnaW5hbFByb2dyYW0pCisgICAgICAgICAgICBnbC51c2VQcm9ncmFtKG9yaWdpbmFsUHJv
Z3JhbSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdD
b250ZXh0fSBnbAorICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlCisgICAgICogQHJldHVybiB7
c3RyaW5nfQorICAgICAqLworICAgIF91bmlmb3JtTWV0aG9kTmFtZUJ5VHlwZTogZnVuY3Rpb24o
Z2wsIHR5cGUpCisgICAgeworICAgICAgICB2YXIgdW5pZm9ybU1ldGhvZE5hbWVzID0gV2ViR0xQ
cm9ncmFtUmVzb3VyY2UuVW5pZm9ybU1ldGhvZE5hbWVzOworICAgICAgICBpZiAoIXVuaWZvcm1N
ZXRob2ROYW1lcykgeworICAgICAgICAgICAgdW5pZm9ybU1ldGhvZE5hbWVzID0ge307CisgICAg
ICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuRkxPQVRdID0gInVuaWZvcm0xZiI7CisgICAg
ICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuRkxPQVRfVkVDMl0gPSAidW5pZm9ybTJmdiI7
CisgICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuRkxPQVRfVkVDM10gPSAidW5pZm9y
bTNmdiI7CisgICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuRkxPQVRfVkVDNF0gPSAi
dW5pZm9ybTRmdiI7CisgICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuSU5UXSA9ICJ1
bmlmb3JtMWkiOworICAgICAgICAgICAgdW5pZm9ybU1ldGhvZE5hbWVzW2dsLkJPT0xdID0gInVu
aWZvcm0xaSI7CisgICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuU0FNUExFUl8yRF0g
PSAidW5pZm9ybTFpIjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5TQU1QTEVS
X0NVQkVdID0gInVuaWZvcm0xaSI7CisgICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wu
SU5UX1ZFQzJdID0gInVuaWZvcm0yaXYiOworICAgICAgICAgICAgdW5pZm9ybU1ldGhvZE5hbWVz
W2dsLkJPT0xfVkVDMl0gPSAidW5pZm9ybTJpdiI7CisgICAgICAgICAgICB1bmlmb3JtTWV0aG9k
TmFtZXNbZ2wuSU5UX1ZFQzNdID0gInVuaWZvcm0zaXYiOworICAgICAgICAgICAgdW5pZm9ybU1l
dGhvZE5hbWVzW2dsLkJPT0xfVkVDM10gPSAidW5pZm9ybTNpdiI7CisgICAgICAgICAgICB1bmlm
b3JtTWV0aG9kTmFtZXNbZ2wuSU5UX1ZFQzRdID0gInVuaWZvcm00aXYiOworICAgICAgICAgICAg
dW5pZm9ybU1ldGhvZE5hbWVzW2dsLkJPT0xfVkVDNF0gPSAidW5pZm9ybTRpdiI7CisgICAgICAg
ICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuRkxPQVRfTUFUMl0gPSAidW5pZm9ybU1hdHJpeDJm
diI7CisgICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuRkxPQVRfTUFUM10gPSAidW5p
Zm9ybU1hdHJpeDNmdiI7CisgICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuRkxPQVRf
TUFUNF0gPSAidW5pZm9ybU1hdHJpeDRmdiI7CisgICAgICAgICAgICBXZWJHTFByb2dyYW1SZXNv
dXJjZS5Vbmlmb3JtTWV0aG9kTmFtZXMgPSB1bmlmb3JtTWV0aG9kTmFtZXM7CisgICAgICAgIH0K
KyAgICAgICAgY29uc29sZS5hc3NlcnQodW5pZm9ybU1ldGhvZE5hbWVzW3R5cGVdLCAiVW5rbm93
biB1bmlmb3JtIHR5cGUgIiArIHR5cGUpOworICAgICAgICByZXR1cm4gdW5pZm9ybU1ldGhvZE5h
bWVzW3R5cGVdOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKiBA
cGFyYW0ge0NhbGx9IGNhbGwKKyAgICAgKi8KICAgICBwdXNoQ2FsbDogZnVuY3Rpb24oY2FsbCkK
ICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiByZW1vdmUgYW55IG9sZGVyIGNhbGxzIHRoYXQgbm8g
bG9uZ2VyIGNvbnRyaWJ1dGUgdG8gdGhlIHJlc291cmNlIHN0YXRlLgpAQCAtNTU4LDcgKzg3OCwx
MCBAQCBmdW5jdGlvbiBXZWJHTFNoYWRlclJlc291cmNlKHdyYXBwZWRPYmplY3QpCiB9CiAKIFdl
YkdMU2hhZGVyUmVzb3VyY2UucHJvdG90eXBlID0gewotICAgIC8qKiBAaW5oZXJpdERvYyAqLwor
ICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAqIEBwYXJhbSB7Q2FsbH0gY2FsbAorICAg
ICAqLwogICAgIHB1c2hDYWxsOiBmdW5jdGlvbihjYWxsKQogICAgIHsKICAgICAgICAgLy8gRklY
TUU6IHJlbW92ZSBhbnkgb2xkZXIgY2FsbHMgdGhhdCBubyBsb25nZXIgY29udHJpYnV0ZSB0byB0
aGUgcmVzb3VyY2Ugc3RhdGUuCkBAIC01NzksNyArOTAyLDEwIEBAIGZ1bmN0aW9uIFdlYkdMQnVm
ZmVyUmVzb3VyY2Uod3JhcHBlZE9iamVjdCkKIH0KIAogV2ViR0xCdWZmZXJSZXNvdXJjZS5wcm90
b3R5cGUgPSB7Ci0gICAgLyoqIEBpbmhlcml0RG9jICovCisgICAgLyoqCisgICAgICogQG92ZXJy
aWRlCisgICAgICogQHBhcmFtIHtDYWxsfSBjYWxsCisgICAgICovCiAgICAgcHVzaENhbGw6IGZ1
bmN0aW9uKGNhbGwpCiAgICAgewogICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIGFueSBvbGRlciBj
YWxscyB0aGF0IG5vIGxvbmdlciBjb250cmlidXRlIHRvIHRoZSByZXNvdXJjZSBzdGF0ZS4KQEAg
LTYwMCw3ICs5MjYsMTAgQEAgZnVuY3Rpb24gV2ViR0xGcmFtZWJ1ZmZlclJlc291cmNlKHdyYXBw
ZWRPYmplY3QpCiB9CiAKIFdlYkdMRnJhbWVidWZmZXJSZXNvdXJjZS5wcm90b3R5cGUgPSB7Ci0g
ICAgLyoqIEBpbmhlcml0RG9jICovCisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisgICAgICog
QHBhcmFtIHtDYWxsfSBjYWxsCisgICAgICovCiAgICAgcHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwp
CiAgICAgewogICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIGFueSBvbGRlciBjYWxscyB0aGF0IG5v
IGxvbmdlciBjb250cmlidXRlIHRvIHRoZSByZXNvdXJjZSBzdGF0ZS4KQEAgLTYyMCw3ICs5NDks
MTAgQEAgZnVuY3Rpb24gV2ViR0xSZW5kZXJidWZmZXJSZXNvdXJjZSh3cmFwcGVkT2JqZWN0KQog
fQogCiBXZWJHTFJlbmRlcmJ1ZmZlclJlc291cmNlLnByb3RvdHlwZSA9IHsKLSAgICAvKiogQGlu
aGVyaXREb2MgKi8KKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKiBAcGFyYW0ge0Nh
bGx9IGNhbGwKKyAgICAgKi8KICAgICBwdXNoQ2FsbDogZnVuY3Rpb24oY2FsbCkKICAgICB7CiAg
ICAgICAgIC8vIEZJWE1FOiByZW1vdmUgYW55IG9sZGVyIGNhbGxzIHRoYXQgbm8gbG9uZ2VyIGNv
bnRyaWJ1dGUgdG8gdGhlIHJlc291cmNlIHN0YXRlLgpAQCAtNjM0LDE3ICs5NjYsMzUgQEAgV2Vi
R0xSZW5kZXJidWZmZXJSZXNvdXJjZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViR0xCb3VuZFJl
c291cmNlLnByb3RvdHlwZTsKICAqIEBjb25zdHJ1Y3RvcgogICogQGV4dGVuZHMge1Jlc291cmNl
fQogICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsQ29udGV4dAorICogQHBhcmFt
IHtGdW5jdGlvbn0gcmVwbGF5Q29udGV4dENhbGxiYWNrCiAgKi8KLWZ1bmN0aW9uIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dFJlc291cmNlKGdsQ29udGV4dCkKK2Z1bmN0aW9uIFdlYkdMUmVuZGVyaW5n
Q29udGV4dFJlc291cmNlKGdsQ29udGV4dCwgcmVwbGF5Q29udGV4dENhbGxiYWNrKQogewogICAg
IFJlc291cmNlLmNhbGwodGhpcywgZ2xDb250ZXh0KTsKICAgICB0aGlzLl9wcm94eU9iamVjdCA9
IG51bGw7CisgICAgdGhpcy5fcmVwbGF5Q29udGV4dENhbGxiYWNrID0gcmVwbGF5Q29udGV4dENh
bGxiYWNrOwogfQogCiAvKioKICAqIEBjb25zdAogICogQHR5cGUge0FycmF5LjxzdHJpbmc+fQog
ICovCitXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5HTENhcGFiaWxpdGllcyA9IFsKKyAg
ICAiQkxFTkQiLAorICAgICJDVUxMX0ZBQ0UiLAorICAgICJERVBUSF9URVNUIiwKKyAgICAiRElU
SEVSIiwKKyAgICAiUE9MWUdPTl9PRkZTRVRfRklMTCIsCisgICAgIlNBTVBMRV9BTFBIQV9UT19D
T1ZFUkFHRSIsCisgICAgIlNBTVBMRV9DT1ZFUkFHRSIsCisgICAgIlNDSVNTT1JfVEVTVCIsCisg
ICAgIlNURU5DSUxfVEVTVCIKK107CisKKy8qKgorICogQGNvbnN0CisgKiBAdHlwZSB7QXJyYXku
PHN0cmluZz59CisgKi8KIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLlBpeGVsU3RvcmVQ
YXJhbWV0ZXJzID0gWwogICAgICJQQUNLX0FMSUdOTUVOVCIsCiAgICAgIlVOUEFDS19BTElHTk1F
TlQiLApAQCAtNjU0LDYgKzEwMDQsNjIgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2Uu
UGl4ZWxTdG9yZVBhcmFtZXRlcnMgPSBbCiBdOwogCiAvKioKKyAqIEBjb25zdAorICogQHR5cGUg
e0FycmF5LjxzdHJpbmc+fQorICovCitXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5TdGF0
ZVBhcmFtZXRlcnMgPSBbCisgICAgIkFDVElWRV9URVhUVVJFIiwKKyAgICAiQVJSQVlfQlVGRkVS
X0JJTkRJTkciLAorICAgICJCTEVORF9DT0xPUiIsCisgICAgIkJMRU5EX0RTVF9BTFBIQSIsCisg
ICAgIkJMRU5EX0RTVF9SR0IiLAorICAgICJCTEVORF9FUVVBVElPTl9BTFBIQSIsCisgICAgIkJM
RU5EX0VRVUFUSU9OX1JHQiIsCisgICAgIkJMRU5EX1NSQ19BTFBIQSIsCisgICAgIkJMRU5EX1NS
Q19SR0IiLAorICAgICJDT0xPUl9DTEVBUl9WQUxVRSIsCisgICAgIkNPTE9SX1dSSVRFTUFTSyIs
CisgICAgIkNVTExfRkFDRV9NT0RFIiwKKyAgICAiQ1VSUkVOVF9QUk9HUkFNIiwKKyAgICAiREVQ
VEhfQ0xFQVJfVkFMVUUiLAorICAgICJERVBUSF9GVU5DIiwKKyAgICAiREVQVEhfUkFOR0UiLAor
ICAgICJERVBUSF9XUklURU1BU0siLAorICAgICJFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5H
IiwKKyAgICAiRlJBTUVCVUZGRVJfQklORElORyIsCisgICAgIkZST05UX0ZBQ0UiLAorICAgICJH
RU5FUkFURV9NSVBNQVBfSElOVCIsCisgICAgIkxJTkVfV0lEVEgiLAorICAgICJQQUNLX0FMSUdO
TUVOVCIsCisgICAgIlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiIsCisgICAgIlBPTFlHT05fT0ZGU0VU
X1VOSVRTIiwKKyAgICAiUkVOREVSQlVGRkVSX0JJTkRJTkciLAorICAgICJTQU1QTEVfQ09WRVJB
R0VfSU5WRVJUIiwKKyAgICAiU0FNUExFX0NPVkVSQUdFX1ZBTFVFIiwKKyAgICAiU0NJU1NPUl9C
T1giLAorICAgICJTVEVOQ0lMX0JBQ0tfRkFJTCIsCisgICAgIlNURU5DSUxfQkFDS19GVU5DIiwK
KyAgICAiU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCIsCisgICAgIlNURU5DSUxfQkFDS19Q
QVNTX0RFUFRIX1BBU1MiLAorICAgICJTVEVOQ0lMX0JBQ0tfUkVGIiwKKyAgICAiU1RFTkNJTF9C
QUNLX1ZBTFVFX01BU0siLAorICAgICJTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLIiwKKyAgICAiU1RF
TkNJTF9DTEVBUl9WQUxVRSIsCisgICAgIlNURU5DSUxfRkFJTCIsCisgICAgIlNURU5DSUxfRlVO
QyIsCisgICAgIlNURU5DSUxfUEFTU19ERVBUSF9GQUlMIiwKKyAgICAiU1RFTkNJTF9QQVNTX0RF
UFRIX1BBU1MiLAorICAgICJTVEVOQ0lMX1JFRiIsCisgICAgIlNURU5DSUxfVkFMVUVfTUFTSyIs
CisgICAgIlNURU5DSUxfV1JJVEVNQVNLIiwKKyAgICAiVU5QQUNLX0FMSUdOTUVOVCIsCisgICAg
IlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiLAorICAgICJVTlBBQ0tfRkxJUF9Z
X1dFQkdMIiwKKyAgICAiVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIiwKKyAgICAiVklF
V1BPUlQiCitdOworCisvKioKICAqIEBwYXJhbSB7Kn0gb2JqCiAgKiBAcmV0dXJuIHtXZWJHTFJl
bmRlcmluZ0NvbnRleHRSZXNvdXJjZX0KICAqLwpAQCAtNjgxLDYgKzEwODcsMTUzIEBAIFdlYkdM
UmVuZGVyaW5nQ29udGV4dFJlc291cmNlLnByb3RvdHlwZSA9IHsKICAgICB9LAogCiAgICAgLyoq
CisgICAgICogQG92ZXJyaWRlCisgICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEKKyAgICAgKiBA
cGFyYW0ge0NhY2hlfSBjYWNoZQorICAgICAqLworICAgIF9wb3B1bGF0ZVJlcGxheWFibGVEYXRh
OiBmdW5jdGlvbihkYXRhLCBjYWNoZSkKKyAgICB7CisgICAgICAgIHZhciBnbCA9IHRoaXMud3Jh
cHBlZE9iamVjdCgpOworICAgICAgICBkYXRhLnJlcGxheUNvbnRleHRDYWxsYmFjayA9IHRoaXMu
X3JlcGxheUNvbnRleHRDYWxsYmFjazsKKworICAgICAgICAvLyBGSVhNRTogU2F2ZSB0aGUgZ2V0
RXJyb3IoKSBzdGF0dXMgYW5kIHJlc3RvcmUgaXQgYWZ0ZXIgdGFraW5nIHRoZSBHTCBzdGF0ZSBz
bmFwc2hvdC4KKworICAgICAgICAvLyBUYWtlIGEgZnVsbCBHTCBzdGF0ZSBzbmFwc2hvdC4KKyAg
ICAgICAgdmFyIGdsU3RhdGUgPSB7fTsKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVz
b3VyY2UuR0xDYXBhYmlsaXRpZXMuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0ZXIpIHsKKyAgICAg
ICAgICAgIGdsU3RhdGVbcGFyYW1ldGVyXSA9IGdsLmlzRW5hYmxlZChnbFtwYXJhbWV0ZXJdKTsK
KyAgICAgICAgfSk7CisgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLlN0YXRl
UGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtZXRlcikgeworICAgICAgICAgICAgZ2xT
dGF0ZVtwYXJhbWV0ZXJdID0gUmVzb3VyY2UudG9SZXBsYXlhYmxlKGdsLmdldFBhcmFtZXRlcihn
bFtwYXJhbWV0ZXJdKSwgY2FjaGUpOworICAgICAgICAgICAgLy8gRklYTUU6IENhbGwgd2hpbGUo
Z2wuZ2V0RXJyb3IoKSAhPSBnbC5OT19FUlJPUikgey4uLn0gdG8gY2hlY2sgaWYgYSBwYXJ0aWN1
bGFyIHBhcmFtZXRlciBpcyBzdXBwb3J0ZWQuCisgICAgICAgIH0pOworCisgICAgICAgIC8vIFZF
UlRFWF9BVFRSSUJfQVJSQVlTCisgICAgICAgIHZhciBtYXhWZXJ0ZXhBdHRyaWJzID0gZ2wuZ2V0
UGFyYW1ldGVyKGdsLk1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgICAgIHZhciB2ZXJ0ZXhBdHRy
aWJQYXJhbWV0ZXJzID0gWyJWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HIiwgIlZF
UlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCIsICJWRVJURVhfQVRUUklCX0FSUkFZX1NJWkUiLCAi
VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUiLCAiVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFIiwg
IlZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCIsICJDVVJSRU5UX1ZFUlRFWF9BVFRSSUIi
XTsKKyAgICAgICAgdmFyIHZlcnRleEF0dHJpYlN0YXRlcyA9IFtdOworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG1heFZlcnRleEF0dHJpYnM7ICsraSkgeworICAgICAgICAgICAgdmFyIHN0
YXRlID0ge307CisgICAgICAgICAgICB2ZXJ0ZXhBdHRyaWJQYXJhbWV0ZXJzLmZvckVhY2goZnVu
Y3Rpb24oYXR0cmliUGFyYW1ldGVyKSB7CisgICAgICAgICAgICAgICAgc3RhdGVbYXR0cmliUGFy
YW1ldGVyXSA9IFJlc291cmNlLnRvUmVwbGF5YWJsZShnbC5nZXRWZXJ0ZXhBdHRyaWIoaSwgZ2xb
YXR0cmliUGFyYW1ldGVyXSksIGNhY2hlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
c3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSID0gZ2wuZ2V0VmVydGV4QXR0cmliT2Zm
c2V0KGksIGdsLlZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUik7CisgICAgICAgICAgICB2ZXJ0
ZXhBdHRyaWJTdGF0ZXMucHVzaChzdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZ2xTdGF0ZS52
ZXJ0ZXhBdHRyaWJTdGF0ZXMgPSB2ZXJ0ZXhBdHRyaWJTdGF0ZXM7CisKKyAgICAgICAgLy8gVEVY
VFVSRVMKKyAgICAgICAgdmFyIGN1cnJlbnRUZXh0dXJlQmluZGluZyA9IGdsLmdldFBhcmFtZXRl
cihnbC5BQ1RJVkVfVEVYVFVSRSk7CisgICAgICAgIHZhciBtYXhUZXh0dXJlSW1hZ2VVbml0cyA9
IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyk7CisgICAgICAgIHZh
ciB0ZXh0dXJlQmluZGluZ3MgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhU
ZXh0dXJlSW1hZ2VVbml0czsgKytpKSB7CisgICAgICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGds
LlRFWFRVUkUwICsgaSk7CisgICAgICAgICAgICB2YXIgc3RhdGUgPSB7CisgICAgICAgICAgICAg
ICAgVEVYVFVSRV8yRDogUmVzb3VyY2UudG9SZXBsYXlhYmxlKGdsLmdldFBhcmFtZXRlcihnbC5U
RVhUVVJFX0JJTkRJTkdfMkQpLCBjYWNoZSksCisgICAgICAgICAgICAgICAgVEVYVFVSRV9DVUJF
X01BUDogUmVzb3VyY2UudG9SZXBsYXlhYmxlKGdsLmdldFBhcmFtZXRlcihnbC5URVhUVVJFX0JJ
TkRJTkdfQ1VCRV9NQVApLCBjYWNoZSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB0ZXh0
dXJlQmluZGluZ3MucHVzaChzdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZ2xTdGF0ZS50ZXh0
dXJlQmluZGluZ3MgPSB0ZXh0dXJlQmluZGluZ3M7CisgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUo
Y3VycmVudFRleHR1cmVCaW5kaW5nKTsKKworICAgICAgICBkYXRhLmdsU3RhdGUgPSBnbFN0YXRl
OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKiBAcGFyYW0ge09i
amVjdH0gZGF0YQorICAgICAqIEBwYXJhbSB7Q2FjaGV9IGNhY2hlCisgICAgICovCisgICAgX2Rv
UmVwbGF5Q2FsbHM6IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQorICAgIHsKKyAgICAgICAgdGhpcy5f
cHJveHlPYmplY3QgPSBudWxsOworICAgICAgICB0aGlzLl9yZXBsYXlDb250ZXh0Q2FsbGJhY2sg
PSBkYXRhLnJlcGxheUNvbnRleHRDYWxsYmFjazsKKworICAgICAgICB2YXIgY29udGV4dCA9IHRo
aXMuX3JlcGxheUNvbnRleHRDYWxsYmFjaygpOworICAgICAgICB2YXIgY29udGV4dFJlc291cmNl
ID0gUmVzb3VyY2UuZm9yT2JqZWN0KGNvbnRleHQpOworICAgICAgICB2YXIgZ2wgPSBjb250ZXh0
UmVzb3VyY2UgPyBjb250ZXh0UmVzb3VyY2Uud3JhcHBlZE9iamVjdCgpIDogY29udGV4dDsKKyAg
ICAgICAgdGhpcy5zZXRXcmFwcGVkT2JqZWN0KGdsKTsKKworICAgICAgICB2YXIgZ2xTdGF0ZSA9
IGRhdGEuZ2xTdGF0ZTsKKyAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVS
LCBSZXBsYXlhYmxlUmVzb3VyY2UucmVwbGF5KGdsU3RhdGUuRlJBTUVCVUZGRVJfQklORElORywg
Y2FjaGUpKTsKKyAgICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIFJl
cGxheWFibGVSZXNvdXJjZS5yZXBsYXkoZ2xTdGF0ZS5SRU5ERVJCVUZGRVJfQklORElORywgY2Fj
aGUpKTsKKworICAgICAgICAvLyBFbmFibGUgb3IgZGlzYWJsZSBzZXJ2ZXItc2lkZSBHTCBjYXBh
YmlsaXRpZXMuCisgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLkdMQ2FwYWJp
bGl0aWVzLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyKSB7CisgICAgICAgICAgICBjb25zb2xl
LmFzc2VydChwYXJhbWV0ZXIgaW4gZ2xTdGF0ZSk7CisgICAgICAgICAgICBpZiAoZ2xTdGF0ZVtw
YXJhbWV0ZXJdKQorICAgICAgICAgICAgICAgIGdsLmVuYWJsZShnbFtwYXJhbWV0ZXJdKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnbC5kaXNhYmxlKGdsW3BhcmFtZXRlcl0p
OworICAgICAgICB9KTsKKworICAgICAgICBnbC5ibGVuZENvbG9yKGdsU3RhdGUuQkxFTkRfQ09M
T1JbMF0sIGdsU3RhdGUuQkxFTkRfQ09MT1JbMV0sIGdsU3RhdGUuQkxFTkRfQ09MT1JbMl0sIGds
U3RhdGUuQkxFTkRfQ09MT1JbM10pOworICAgICAgICBnbC5ibGVuZEVxdWF0aW9uU2VwYXJhdGUo
Z2xTdGF0ZS5CTEVORF9FUVVBVElPTl9SR0IsIGdsU3RhdGUuQkxFTkRfRVFVQVRJT05fQUxQSEEp
OworICAgICAgICBnbC5ibGVuZEZ1bmNTZXBhcmF0ZShnbFN0YXRlLkJMRU5EX1NSQ19SR0IsIGds
U3RhdGUuQkxFTkRfRFNUX1JHQiwgZ2xTdGF0ZS5CTEVORF9TUkNfQUxQSEEsIGdsU3RhdGUuQkxF
TkRfRFNUX0FMUEhBKTsKKyAgICAgICAgZ2wuY2xlYXJDb2xvcihnbFN0YXRlLkNPTE9SX0NMRUFS
X1ZBTFVFWzBdLCBnbFN0YXRlLkNPTE9SX0NMRUFSX1ZBTFVFWzFdLCBnbFN0YXRlLkNPTE9SX0NM
RUFSX1ZBTFVFWzJdLCBnbFN0YXRlLkNPTE9SX0NMRUFSX1ZBTFVFWzNdKTsKKyAgICAgICAgZ2wu
Y2xlYXJEZXB0aChnbFN0YXRlLkRFUFRIX0NMRUFSX1ZBTFVFKTsKKyAgICAgICAgZ2wuY2xlYXJT
dGVuY2lsKGdsU3RhdGUuU1RFTkNJTF9DTEVBUl9WQUxVRSk7CisgICAgICAgIGdsLmNvbG9yTWFz
ayhnbFN0YXRlLkNPTE9SX1dSSVRFTUFTS1swXSwgZ2xTdGF0ZS5DT0xPUl9XUklURU1BU0tbMV0s
IGdsU3RhdGUuQ09MT1JfV1JJVEVNQVNLWzJdLCBnbFN0YXRlLkNPTE9SX1dSSVRFTUFTS1szXSk7
CisgICAgICAgIGdsLmN1bGxGYWNlKGdsU3RhdGUuQ1VMTF9GQUNFX01PREUpOworICAgICAgICBn
bC5kZXB0aEZ1bmMoZ2xTdGF0ZS5ERVBUSF9GVU5DKTsKKyAgICAgICAgZ2wuZGVwdGhNYXNrKGds
U3RhdGUuREVQVEhfV1JJVEVNQVNLKTsKKyAgICAgICAgZ2wuZGVwdGhSYW5nZShnbFN0YXRlLkRF
UFRIX1JBTkdFWzBdLCBnbFN0YXRlLkRFUFRIX1JBTkdFWzFdKTsKKyAgICAgICAgZ2wuZnJvbnRG
YWNlKGdsU3RhdGUuRlJPTlRfRkFDRSk7CisgICAgICAgIGdsLmhpbnQoZ2wuR0VORVJBVEVfTUlQ
TUFQX0hJTlQsIGdsU3RhdGUuR0VORVJBVEVfTUlQTUFQX0hJTlQpOworICAgICAgICBnbC5saW5l
V2lkdGgoZ2xTdGF0ZS5MSU5FX1dJRFRIKTsKKworICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRSZXNvdXJjZS5QaXhlbFN0b3JlUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtZXRl
cikgeworICAgICAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2xbcGFyYW1ldGVyXSwgZ2xTdGF0ZVtw
YXJhbWV0ZXJdKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZ2wucG9seWdvbk9mZnNldChnbFN0
YXRlLlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiwgZ2xTdGF0ZS5QT0xZR09OX09GRlNFVF9VTklUUyk7
CisgICAgICAgIGdsLnNhbXBsZUNvdmVyYWdlKGdsU3RhdGUuU0FNUExFX0NPVkVSQUdFX1ZBTFVF
LCBnbFN0YXRlLlNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQpOworICAgICAgICBnbC5zdGVuY2lsRnVu
Y1NlcGFyYXRlKGdsLkZST05ULCBnbFN0YXRlLlNURU5DSUxfRlVOQywgZ2xTdGF0ZS5TVEVOQ0lM
X1JFRiwgZ2xTdGF0ZS5TVEVOQ0lMX1ZBTFVFX01BU0spOworICAgICAgICBnbC5zdGVuY2lsRnVu
Y1NlcGFyYXRlKGdsLkJBQ0ssIGdsU3RhdGUuU1RFTkNJTF9CQUNLX0ZVTkMsIGdsU3RhdGUuU1RF
TkNJTF9CQUNLX1JFRiwgZ2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyk7CisgICAgICAg
IGdsLnN0ZW5jaWxPcFNlcGFyYXRlKGdsLkZST05ULCBnbFN0YXRlLlNURU5DSUxfRkFJTCwgZ2xT
dGF0ZS5TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCwgZ2xTdGF0ZS5TVEVOQ0lMX1BBU1NfREVQVEhf
UEFTUyk7CisgICAgICAgIGdsLnN0ZW5jaWxPcFNlcGFyYXRlKGdsLkJBQ0ssIGdsU3RhdGUuU1RF
TkNJTF9CQUNLX0ZBSUwsIGdsU3RhdGUuU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCwgZ2xT
dGF0ZS5TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTKTsKKyAgICAgICAgZ2wuc3RlbmNpbE1h
c2tTZXBhcmF0ZShnbC5GUk9OVCwgZ2xTdGF0ZS5TVEVOQ0lMX1dSSVRFTUFTSyk7CisgICAgICAg
IGdsLnN0ZW5jaWxNYXNrU2VwYXJhdGUoZ2wuQkFDSywgZ2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfV1JJ
VEVNQVNLKTsKKworICAgICAgICBnbC5zY2lzc29yKGdsU3RhdGUuU0NJU1NPUl9CT1hbMF0sIGds
U3RhdGUuU0NJU1NPUl9CT1hbMV0sIGdsU3RhdGUuU0NJU1NPUl9CT1hbMl0sIGdsU3RhdGUuU0NJ
U1NPUl9CT1hbM10pOworICAgICAgICBnbC52aWV3cG9ydChnbFN0YXRlLlZJRVdQT1JUWzBdLCBn
bFN0YXRlLlZJRVdQT1JUWzFdLCBnbFN0YXRlLlZJRVdQT1JUWzJdLCBnbFN0YXRlLlZJRVdQT1JU
WzNdKTsKKworICAgICAgICBnbC51c2VQcm9ncmFtKFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXko
Z2xTdGF0ZS5DVVJSRU5UX1BST0dSQU0sIGNhY2hlKSk7CisKKyAgICAgICAgLy8gVkVSVEVYX0FU
VFJJQl9BUlJBWVMKKyAgICAgICAgdmFyIG1heFZlcnRleEF0dHJpYnMgPSBnbC5nZXRQYXJhbWV0
ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBt
YXhWZXJ0ZXhBdHRyaWJzOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBzdGF0ZSA9IGdsU3RhdGUu
dmVydGV4QXR0cmliU3RhdGVzW2ldIHx8IHt9OworICAgICAgICAgICAgaWYgKHN0YXRlLlZFUlRF
WF9BVFRSSUJfQVJSQVlfRU5BQkxFRCkKKyAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnbC5kaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkoaSk7CisgICAgICAgICAgICBpZiAoc3RhdGUuQ1VSUkVOVF9W
RVJURVhfQVRUUklCKQorICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYjRmdihpLCBzdGF0
ZS5DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpOworICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFJlcGxh
eWFibGVSZXNvdXJjZS5yZXBsYXkoc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklO
RElORywgY2FjaGUpOworICAgICAgICAgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICAgICAgICAg
IGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpOworICAgICAgICAgICAgICAg
IGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoaSwgc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpF
LCBzdGF0ZS5WRVJURVhfQVRUUklCX0FSUkFZX1RZUEUsIHN0YXRlLlZFUlRFWF9BVFRSSUJfQVJS
QVlfTk9STUFMSVpFRCwgc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUsIHN0YXRlLlZF
UlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIFJlcGxheWFibGVSZXNvdXJjZS5y
ZXBsYXkoZ2xTdGF0ZS5BUlJBWV9CVUZGRVJfQklORElORywgY2FjaGUpKTsKKyAgICAgICAgZ2wu
YmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgUmVwbGF5YWJsZVJlc291cmNlLnJl
cGxheShnbFN0YXRlLkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcsIGNhY2hlKSk7CisKKyAg
ICAgICAgLy8gVEVYVFVSRVMKKyAgICAgICAgdmFyIG1heFRleHR1cmVJbWFnZVVuaXRzID0gZ2wu
Z2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBtYXhUZXh0dXJlSW1hZ2VVbml0czsgKytpKSB7CisgICAgICAgICAgICBn
bC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgaSk7CisgICAgICAgICAgICB2YXIgc3RhdGUg
PSBnbFN0YXRlLnRleHR1cmVCaW5kaW5nc1tpXSB8fCB7fTsKKyAgICAgICAgICAgIGdsLmJpbmRU
ZXh0dXJlKGdsLlRFWFRVUkVfMkQsIFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoc3RhdGUuVEVY
VFVSRV8yRCwgY2FjaGUpKTsKKyAgICAgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVf
Q1VCRV9NQVAsIFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoc3RhdGUuVEVYVFVSRV9DVUJFX01B
UCwgY2FjaGUpKTsKKyAgICAgICAgfQorICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGdsU3RhdGUu
QUNUSVZFX1RFWFRVUkUpOworCisgICAgICAgIHJldHVybiBSZXNvdXJjZS5wcm90b3R5cGUuX2Rv
UmVwbGF5Q2FsbHMuY2FsbCh0aGlzLCBkYXRhLCBjYWNoZSk7CisgICAgfSwKKworICAgIC8qKgog
ICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bWJlcn0gdGFyZ2V0CiAgICAgICogQHJldHVybiB7UmVz
b3VyY2V9CiAgICAgICovCkBAIC02OTMsMzkgKzEyNDYsMzkgQEAgV2ViR0xSZW5kZXJpbmdDb250
ZXh0UmVzb3VyY2UucHJvdG90eXBlID0gewogICAgICAgICB2YXIgYmluZGluZ1RhcmdldDsKICAg
ICAgICAgdmFyIGJpbmRNZXRob2ROYW1lOwogICAgICAgICBzd2l0Y2ggKHRhcmdldCkgewotICAg
ICAgICAgICAgY2FzZSBnbC5BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgYmluZGluZ1Rh
cmdldCA9IGdsLkFSUkFZX0JVRkZFUl9CSU5ESU5HOwotICAgICAgICAgICAgICAgIGJpbmRNZXRo
b2ROYW1lID0gImJpbmRCdWZmZXIiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBiaW5kaW5n
VGFyZ2V0ID0gZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzsKLSAgICAgICAgICAgICAg
ICBiaW5kTWV0aG9kTmFtZSA9ICJiaW5kQnVmZmVyIjsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgZ2wuVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICBiaW5kaW5n
VGFyZ2V0ID0gZ2wuVEVYVFVSRV9CSU5ESU5HXzJEOwotICAgICAgICAgICAgICAgIGJpbmRNZXRo
b2ROYW1lID0gImJpbmRUZXh0dXJlIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgIGNhc2UgZ2wuVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICAgICAgY2FzZSBnbC5URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1g6Ci0gICAgICAgICAgICBjYXNlIGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWToKLSAgICAgICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Z
OgotICAgICAgICAgICAgY2FzZSBnbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAg
ICAgICAgICBjYXNlIGdsLlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAg
ICAgICBiaW5kaW5nVGFyZ2V0ID0gZ2wuVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOwotICAgICAg
ICAgICAgICAgIGJpbmRNZXRob2ROYW1lID0gImJpbmRUZXh0dXJlIjsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgZ2wuRlJBTUVCVUZGRVI6Ci0gICAgICAgICAgICAg
ICAgYmluZGluZ1RhcmdldCA9IGdsLkZSQU1FQlVGRkVSX0JJTkRJTkc7Ci0gICAgICAgICAgICAg
ICAgYmluZE1ldGhvZE5hbWUgPSAiYmluZEZyYW1lYnVmZmVyIjsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgZ2wuUkVOREVSQlVGRkVSOgotICAgICAgICAgICAgICAg
IGJpbmRpbmdUYXJnZXQgPSBnbC5SRU5ERVJCVUZGRVJfQklORElORzsKLSAgICAgICAgICAgICAg
ICBiaW5kTWV0aG9kTmFtZSA9ICJiaW5kUmVuZGVyYnVmZmVyIjsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJv
cigiQVNTRVJUX05PVF9SRUFDSEVEOiB1bmtub3duIGJpbmRpbmcgdGFyZ2V0ICIgKyB0YXJnZXQp
OwotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBjYXNlIGdsLkFSUkFZX0JV
RkZFUjoKKyAgICAgICAgICAgIGJpbmRpbmdUYXJnZXQgPSBnbC5BUlJBWV9CVUZGRVJfQklORElO
RzsKKyAgICAgICAgICAgIGJpbmRNZXRob2ROYW1lID0gImJpbmRCdWZmZXIiOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVI6CisgICAgICAg
ICAgICBiaW5kaW5nVGFyZ2V0ID0gZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzsKKyAg
ICAgICAgICAgIGJpbmRNZXRob2ROYW1lID0gImJpbmRCdWZmZXIiOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgZ2wuVEVYVFVSRV8yRDoKKyAgICAgICAgICAgIGJpbmRpbmdUYXJn
ZXQgPSBnbC5URVhUVVJFX0JJTkRJTkdfMkQ7CisgICAgICAgICAgICBiaW5kTWV0aG9kTmFtZSA9
ICJiaW5kVGV4dHVyZSI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBnbC5URVhU
VVJFX0NVQkVfTUFQOgorICAgICAgICBjYXNlIGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WDoKKyAgICAgICAgY2FzZSBnbC5URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAg
IGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgICBjYXNlIGdsLlRF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgICAgY2FzZSBnbC5URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1o6CisgICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9aOgorICAgICAgICAgICAgYmluZGluZ1RhcmdldCA9IGdsLlRFWFRVUkVfQklORElOR19DVUJF
X01BUDsKKyAgICAgICAgICAgIGJpbmRNZXRob2ROYW1lID0gImJpbmRUZXh0dXJlIjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGdsLkZSQU1FQlVGRkVSOgorICAgICAgICAgICAg
YmluZGluZ1RhcmdldCA9IGdsLkZSQU1FQlVGRkVSX0JJTkRJTkc7CisgICAgICAgICAgICBiaW5k
TWV0aG9kTmFtZSA9ICJiaW5kRnJhbWVidWZmZXIiOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgZ2wuUkVOREVSQlVGRkVSOgorICAgICAgICAgICAgYmluZGluZ1RhcmdldCA9IGds
LlJFTkRFUkJVRkZFUl9CSU5ESU5HOworICAgICAgICAgICAgYmluZE1ldGhvZE5hbWUgPSAiYmlu
ZFJlbmRlcmJ1ZmZlciI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkFTU0VSVF9OT1RfUkVBQ0hFRDogdW5rbm93biBiaW5k
aW5nIHRhcmdldCAiICsgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAg
ICB9CiAgICAgICAgIHJlc291cmNlID0gUmVzb3VyY2UuZm9yT2JqZWN0KGdsLmdldFBhcmFtZXRl
cihiaW5kaW5nVGFyZ2V0KSk7CiAgICAgICAgIGlmIChyZXNvdXJjZSkKQEAgLTk2NSw3ICsxNTE4
LDcgQEAgVHJhY2VMb2cucHJvdG90eXBlID0gewogICAgICAqLwogICAgIGNhcHR1cmVSZXNvdXJj
ZTogZnVuY3Rpb24ocmVzb3VyY2UpCiAgICAgewotICAgICAgICAvLyBGSVhNRTogQ2FwdHVyZSBj
dXJyZW50IHJlc291cmNlIHN0YXRlIHRvIHN0YXJ0IHRoZSByZXBsYXkgZnJvbS4KKyAgICAgICAg
cmVzb3VyY2UudG9SZXBsYXlhYmxlKHRoaXMuX3JlcGxheWFibGVzQ2FjaGUpOwogICAgIH0sCiAK
ICAgICAvKioKQEAgLTk3Myw3ICsxNTI2LDEyIEBAIFRyYWNlTG9nLnByb3RvdHlwZSA9IHsKICAg
ICAgKi8KICAgICBhZGRDYWxsOiBmdW5jdGlvbihjYWxsKQogICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IENvbnZlcnQgdGhlIGNhbGwgdG8gYSBSZXBsYXlhYmxlQ2FsbCBhbmQgcHVzaCBpdC4KKyAg
ICAgICAgdmFyIHJlcyA9IFJlc291cmNlLmZvck9iamVjdChjYWxsLnJlc3VsdCgpKTsKKyAgICAg
ICAgaWYgKHJlcykKKyAgICAgICAgICAgIHRoaXMuY2FwdHVyZVJlc291cmNlKHJlcyk7CisgICAg
ICAgIHZhciBzaXplID0gdGhpcy5fcmVwbGF5YWJsZXNDYWNoZS5zaXplKCk7CisgICAgICAgIHRo
aXMuX3JlcGxheWFibGVDYWxscy5wdXNoKGNhbGwudG9SZXBsYXlhYmxlKHRoaXMuX3JlcGxheWFi
bGVzQ2FjaGUpKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fcmVwbGF5YWJsZXNDYWNo
ZS5zaXplKCkgPT09IHNpemUsICJJbnRlcm5hbCBlcnJvcjogV2Ugc2hvdWxkIGhhdmUgY2FwdHVy
ZWQgYWxsIHRoZSByZXNvdXJjZXMgYWxyZWFkeSBieSB0aGlzIHRpbWUuIik7CiAgICAgfQogfQog
CkBAIC0xMTYyLDcgKzE3MjAsNyBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAg
ICovCiAgICAgd3JhcFdlYkdMQ29udGV4dDogZnVuY3Rpb24oZ2xDb250ZXh0KQogICAgIHsKLSAg
ICAgICAgdmFyIHJlc291cmNlID0gUmVzb3VyY2UuZm9yT2JqZWN0KGdsQ29udGV4dCkgfHwgbmV3
IFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlKGdsQ29udGV4dCk7CisgICAgICAgIHZhciBy
ZXNvdXJjZSA9IFJlc291cmNlLmZvck9iamVjdChnbENvbnRleHQpIHx8IG5ldyBXZWJHTFJlbmRl
cmluZ0NvbnRleHRSZXNvdXJjZShnbENvbnRleHQsIHRoaXMuX2NvbnN0cnVjdFJlcGxheUNvbnRl
eHQuYmluZCh0aGlzLCBnbENvbnRleHQpKTsKICAgICAgICAgdGhpcy5fbWFuYWdlci5yZWdpc3Rl
clJlc291cmNlKHJlc291cmNlKTsKICAgICAgICAgdmFyIHByb3h5ID0gcmVzb3VyY2UucHJveHlP
YmplY3QoKTsKICAgICAgICAgcmV0dXJuIHByb3h5OwpAQCAtMTIyNyw2ICsxNzg1LDcgQEAgSW5q
ZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAg
ICB9CiAgICAgICAgIC8vIFJldHVybiBjdXJyZW50IHNjcmVlbnNob3QuCisgICAgICAgIC8vIEZJ
WE1FOiBTdXBwb3J0IHJlcGxheWluZyBzZXZlcmFsIGNhbnZhc2VzIHNpbXVsdGFuZW91c2x5Lgog
ICAgICAgICByZXR1cm4gdGhpcy5fcmVwbGF5Q29udGV4dC5jYW52YXMudG9EYXRhVVJMKCk7CiAg
ICAgfSwKIApAQCAtMTIzNiw2ICsxNzk1LDI2IEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9
IHsKICAgICBfbWFrZVRyYWNlTG9nSWQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHJldHVy
biAie1wiaW5qZWN0ZWRTY3JpcHRJZFwiOiIgKyBpbmplY3RlZFNjcmlwdElkICsgIixcInRyYWNl
TG9nSWRcIjoiICsgKCsrdGhpcy5fbGFzdFRyYWNlTG9nSWQpICsgIn0iOworICAgIH0sCisKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gb3JpZ2luYWxHbENv
bnRleHQKKyAgICAgKiBAcmV0dXJuIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9CisgICAgICovCisg
ICAgX2NvbnN0cnVjdFJlcGxheUNvbnRleHQ6IGZ1bmN0aW9uKG9yaWdpbmFsR2xDb250ZXh0KQor
ICAgIHsKKyAgICAgICAgdmFyIHJlcGxheUNvbnRleHQgPSBvcmlnaW5hbEdsQ29udGV4dFsiX19y
ZXBsYXlDb250ZXh0Il07CisgICAgICAgIGlmICghcmVwbGF5Q29udGV4dCkgeworICAgICAgICAg
ICAgdmFyIGNhbnZhcyA9IG9yaWdpbmFsR2xDb250ZXh0LmNhbnZhcy5jbG9uZU5vZGUodHJ1ZSk7
CisgICAgICAgICAgICAvLyBGSVhNRTogUGFzcyBvcmlnaW5hbCBjb250ZXh0IGlkIGluc3RlYWQg
b2YgImV4cGVyaW1lbnRhbC13ZWJnbCIuCisgICAgICAgICAgICAvLyBGSVhNRTogUGFzcyBvcmln
aW5hbCBDb250ZXh0QXR0cmlidXRlcyB0byB0aGUgZ2V0Q29udGV4dCgpIG1ldGhvZC4KKyAgICAg
ICAgICAgIHJlcGxheUNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdl
YmdsIik7CisgICAgICAgICAgICBvcmlnaW5hbEdsQ29udGV4dFsiX19yZXBsYXlDb250ZXh0Il0g
PSByZXBsYXlDb250ZXh0OworICAgICAgICAgICAgdGhpcy5fcmVwbGF5Q29udGV4dCA9IHJlcGxh
eUNvbnRleHQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogUmVzZXQg
dGhlIHJlcGxheSBHTCBzdGF0ZSBhbmQgY2xlYXIgdGhlIGNhbnZhcy4KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gcmVwbGF5Q29udGV4dDsKICAgICB9CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160430</attachid>
            <date>2012-08-24 08:57:22 -0700</date>
            <delta_ts>2012-08-27 05:28:13 -0700</delta_ts>
            <desc>Patch to land</desc>
            <filename>bug-94933-20120824195717.patch</filename>
            <type>text/plain</type>
            <size>32825</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2NTg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDI5YjdiMzA3ZGI5MTY2
ZWNiZTkzYjQ5OWRjNDNhODU2ZGM2YzI0OC4uYWRiMzViZjRmNmU2ZDNkMjM4ZWYyYTMxYWNmYmJl
MWZjYjA5NTM1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA4LTI0ICBBbmRy
ZXkgQWRhaWtpbiAgPGFhbmRyZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFtXZWJHTF0gSW1wbGVtZW50IHNlcmlhbGl6aW5nIFdlYkdMIHN0YXRlIGFuZCByZXBsYXlp
bmcgaXQgbGF0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk0OTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyB3aWxsIGFsbG93IHVzIHRvIHNhdmUgdGhlIFdlYkdMIHN0YXRlIGF0IGFueSBhcmJp
dHJhcnkgcG9pbnQgaW4gb3JkZXIgdG8gcmVwbGF5IGEgdHJhY2UgbG9nIGxhdGVyIG9uIGFub3Ro
ZXIgY2FudmFzLgorICAgICAgICBNYWluIHBvaW50cyBvZiB0aGUgY2hhbmdlOgorICAgICAgICAt
IEFsbG93IGV2ZXJ5IFJlc291cmNlIGFuZCBDYWxsIGluc3RhbmNlcyBiZSBzZXJpYWxpemVkIHRv
IGEgUmVwbGF5YWJsZSwgYW5kIHJlc3VycmVjdGVkIGJhY2sgZHVyaW5nIGEgcmVwbGF5IG9uIGFu
b3RoZXIgY2FudmFzLgorCisgICAgICAgIC0gQmVmb3JlIGV4ZWN1dGluZyBhbiBvcmlnaW5hbCBX
ZWJHTCBjYWxsIGFuZCBzYXZpbmcgaXQgdG8gYSB0cmFjZSBsb2csIGZpcnN0IHNlcmlhbGl6ZSBh
bGwgdGhlIFJlc291cmNlcyB0aGF0IHdpbGwgYmUgaW52b2x2ZWQgaW4KKyAgICAgICAgICB0aGlz
IGNhbGwsIGlmIHRoZXkgYXJlIG5vdCB5ZXQgc2VyaWFsaXplZC4gVGhlIGxhdHRlciBwYXJ0IGlz
IGltcGxlbWVudGVkIHdpdGggYSBDYWNoZSBpbnN0YW5jZSwgY2hlY2tpbmcgdGhhdCB3ZSBjb252
ZXJ0IGEgUmVzb3VyY2UKKyAgICAgICAgICB0byBhIFJlcGxheWFibGUgb25seSBvbmNlOiB0aGUg
Zmlyc3QgdGltZSBpdCB3YXMgdXNlZCBpbiB0aGUgdHJhY2UgbG9nIGJlaW5nIGNvbGxlY3RlZC4g
V2UgZG8gbm90IG5lZWQgdG8gc2VyaWFsaXplIHRoZSBzdWJzZXF1ZW50CisgICAgICAgICAgY2hh
bmdlcyB0byB0aGlzIFJlc291cmNlJ3Mgc3RhdGUgKGlmIGFueSksIHNpbmNlIHRoZXkgd2lsbCBi
ZSBzYXZlZCBpbiB0aGUgdHJhY2UgbG9nIGJlaW5nIGNvbGxlY3RlZCBhbmQgcmVwbGF5ZWQgYXV0
b21hdGljYWxseS4KKworICAgICAgICAtIFNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFdlYkdM
IHN0YXRlIG1heSBiZSByZXF1ZXN0ZWQgaW4gdGhlIHJ1bnRpbWUgKGUuZy4gd2l0aCB0aGUgZ2wu
Z2V0UGFyYW1ldGVyIG1ldGhvZCkuIFdlIHVzZSB0aGlzIHdoZXJldmVyCisgICAgICAgICAgcG9z
c2libGUgaW5zdGVhZCBvZiBjb2xsZWN0aW5nIENhbGxzIGluIGEgUmVzb3VyY2UgbG9nLiBPdGhl
cndpc2UsIHdlIGhhdmUgdG8gY29sbGVjdCBXZWJHTCBjYWxscyAobGlrZSBnbC50ZXhJbWFnZTJE
KSBpbiBvcmRlciB0bworICAgICAgICAgIHJlcGxheSB0aGVtIGxhdGVyLgorCisgICAgICAgIC0g
TGF0ZXIgdGhlIFJlcGxheWFibGUgb2JqZWN0cyBoaWVyYXJjaHkgKHRoZSBUcmFjZUxvZykgbWF5
IGJlIHNlcmlhbGl6ZWQgZnVydGhlciBmb3IgY3Jvc3MtZGV2aWNlIHRyYW5zbWlzc2lvbiwgZm9y
IGV4YW1wbGUuCisgICAgICAgIAorCisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
V2ViR0xNb2R1bGVTb3VyY2UuanM6CisgICAgICAgICguKToKKwogMjAxMi0wOC0yNCAgSm9zaHVh
IE5ldHRlcmZpZWxkICA8am5ldHRlcmZpZWxkQHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVy
cnldIEV4dGVuZCBMYXllckZpbHRlclJlbmRlcmVyIGluIHByZXBhcmF0aW9uIGZvciBDU1MgU2hh
ZGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
V2ViR0xNb2R1bGVTb3VyY2UuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5qcwppbmRleCBkYThmYTEzMGNiMmU4MmU3ZjA5OTUwZjAw
ZWYwZjJkYzFjYTUyNGEzLi4yNGUyOTVmNzU5NjljZmNkZGIzYTA3YzhmMTFkZWE1Y2U1OGY1MTYz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRXZWJH
TE1vZHVsZVNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRXZWJHTE1vZHVsZVNvdXJjZS5qcwpAQCAtMjQ1LDYgKzI0NSw0OSBAQCBDYWxsLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgIGlmICghUmVzb3VyY2UuZm9yT2JqZWN0KHRoaXMuX2FyZ3Nb
aV0pKQogICAgICAgICAgICAgICAgIHRoaXMuX2FyZ3NbaV0gPSBUeXBlVXRpbHMuY2xvbmUodGhp
cy5fYXJnc1tpXSk7CiAgICAgICAgIH0KKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFt
IHtDYWNoZX0gY2FjaGUKKyAgICAgKiBAcmV0dXJuIHtSZXBsYXlhYmxlQ2FsbH0KKyAgICAgKi8K
KyAgICB0b1JlcGxheWFibGU6IGZ1bmN0aW9uKGNhY2hlKQorICAgIHsKKyAgICAgICAgdGhpcy5m
cmVlemUoKTsKKyAgICAgICAgdmFyIHRoaXNPYmplY3QgPSAvKiogQHR5cGUge1JlcGxheWFibGVS
ZXNvdXJjZX0gKi8gUmVzb3VyY2UudG9SZXBsYXlhYmxlKHRoaXMuX3RoaXNPYmplY3QsIGNhY2hl
KTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IFJlc291cmNlLnRvUmVwbGF5YWJsZSh0aGlzLl9yZXN1
bHQsIGNhY2hlKTsKKyAgICAgICAgdmFyIGFyZ3MgPSB0aGlzLl9hcmdzLm1hcChmdW5jdGlvbihv
YmopIHsKKyAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZS50b1JlcGxheWFibGUob2JqLCBjYWNo
ZSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gbmV3IFJlcGxheWFibGVDYWxsKHRoaXNP
YmplY3QsIHRoaXMuX2Z1bmN0aW9uTmFtZSwgYXJncywgcmVzdWx0KTsKKyAgICB9LAorCisgICAg
LyoqCisgICAgICogQHBhcmFtIHtSZXBsYXlhYmxlQ2FsbH0gcmVwbGF5YWJsZUNhbGwKKyAgICAg
KiBAcGFyYW0ge0NhY2hlfSBjYWNoZQorICAgICAqIEByZXR1cm4ge0NhbGx9CisgICAgICovCisg
ICAgcmVwbGF5OiBmdW5jdGlvbihyZXBsYXlhYmxlQ2FsbCwgY2FjaGUpCisgICAgeworICAgICAg
ICB2YXIgcmVwbGF5T2JqZWN0ID0gUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShyZXBsYXlhYmxl
Q2FsbC5yZXNvdXJjZSgpLCBjYWNoZSk7CisgICAgICAgIHZhciByZXBsYXlGdW5jdGlvbiA9IHJl
cGxheU9iamVjdFtyZXBsYXlhYmxlQ2FsbC5mdW5jdGlvbk5hbWUoKV07CisgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHR5cGVvZiByZXBsYXlGdW5jdGlvbiA9PT0gImZ1bmN0aW9uIiwgIkV4cGVjdGVk
IGEgZnVuY3Rpb24gdG8gcmVwbGF5Iik7CisgICAgICAgIHZhciByZXBsYXlBcmdzID0gcmVwbGF5
YWJsZUNhbGwuYXJncygpLm1hcChmdW5jdGlvbihvYmopIHsKKyAgICAgICAgICAgIHJldHVybiBS
ZXBsYXlhYmxlUmVzb3VyY2UucmVwbGF5KG9iaiwgY2FjaGUpOworICAgICAgICB9KTsKKyAgICAg
ICAgdmFyIHJlcGxheVJlc3VsdCA9IHJlcGxheUZ1bmN0aW9uLmFwcGx5KHJlcGxheU9iamVjdCwg
cmVwbGF5QXJncyk7CisgICAgICAgIGlmIChyZXBsYXlhYmxlQ2FsbC5yZXN1bHQoKSBpbnN0YW5j
ZW9mIFJlcGxheWFibGVSZXNvdXJjZSkgeworICAgICAgICAgICAgdmFyIHJlc291cmNlID0gcmVw
bGF5YWJsZUNhbGwucmVzdWx0KCkucmVwbGF5KGNhY2hlKTsKKyAgICAgICAgICAgIGlmICghcmVz
b3VyY2Uud3JhcHBlZE9iamVjdCgpKQorICAgICAgICAgICAgICAgIHJlc291cmNlLnNldFdyYXBw
ZWRPYmplY3QocmVwbGF5UmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX3RoaXNP
YmplY3QgPSByZXBsYXlPYmplY3Q7CisgICAgICAgIHRoaXMuX2Z1bmN0aW9uTmFtZSA9IHJlcGxh
eWFibGVDYWxsLmZ1bmN0aW9uTmFtZSgpOworICAgICAgICB0aGlzLl9hcmdzID0gcmVwbGF5QXJn
czsKKyAgICAgICAgdGhpcy5fcmVzdWx0ID0gcmVwbGF5UmVzdWx0OworICAgICAgICB0aGlzLl9m
cmVlemVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQogfQogCkBAIC0zMDIs
NyArMzQ1LDggQEAgUmVwbGF5YWJsZUNhbGwucHJvdG90eXBlID0gewogICAgICAqLwogICAgIHJl
cGxheTogZnVuY3Rpb24oY2FjaGUpCiAgICAgewotICAgICAgICAvLyBGSVhNRTogRG8gdGhlIHJl
cGxheS4KKyAgICAgICAgdmFyIGNhbGwgPSBPYmplY3QuY3JlYXRlKENhbGwucHJvdG90eXBlKTsK
KyAgICAgICAgcmV0dXJuIGNhbGwucmVwbGF5KHRoaXMsIGNhY2hlKTsKICAgICB9CiB9CiAKQEAg
LTMzOCw2ICszODIsMTcgQEAgUmVzb3VyY2UuZm9yT2JqZWN0ID0gZnVuY3Rpb24ob2JqKQogICAg
IHJldHVybiBudWxsOwogfQogCisvKioKKyAqIEBwYXJhbSB7UmVzb3VyY2V8Kn0gb2JqCisgKiBA
cGFyYW0ge0NhY2hlfSBjYWNoZQorICogQHJldHVybiB7UmVwbGF5YWJsZVJlc291cmNlfCp9Cisg
Ki8KK1Jlc291cmNlLnRvUmVwbGF5YWJsZSA9IGZ1bmN0aW9uKG9iaiwgY2FjaGUpCit7CisgICAg
dmFyIHJlc291cmNlID0gUmVzb3VyY2UuZm9yT2JqZWN0KG9iaik7CisgICAgcmV0dXJuIHJlc291
cmNlID8gcmVzb3VyY2UudG9SZXBsYXlhYmxlKGNhY2hlKSA6IG9iajsKK30KKwogUmVzb3VyY2Uu
cHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAqIEByZXR1cm4ge251bWJlcn0KQEAgLTQwMCw2
ICs0NTUsNjYgQEAgUmVzb3VyY2UucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKKyAg
ICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQorICAgICAqIEByZXR1cm4ge1JlcGxheWFibGVSZXNv
dXJjZX0KKyAgICAgKi8KKyAgICB0b1JlcGxheWFibGU6IGZ1bmN0aW9uKGNhY2hlKQorICAgIHsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IGNhY2hlLmdldCh0aGlzLl9pZCk7CisgICAgICAgIGlmIChy
ZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB2YXIgZGF0YSA9IHsK
KyAgICAgICAgICAgIGlkOiB0aGlzLl9pZAorICAgICAgICB9OworICAgICAgICByZXN1bHQgPSBu
ZXcgUmVwbGF5YWJsZVJlc291cmNlKHRoaXMsIGRhdGEpOworICAgICAgICBjYWNoZS5wdXQodGhp
cy5faWQsIHJlc3VsdCk7IC8vIFB1dCBpbnRvIHRoZSBjYWNoZSBlYXJseSB0byBhdm9pZCBsb29w
cy4KKyAgICAgICAgZGF0YS5jYWxscyA9IHRoaXMuX2NhbGxzLm1hcChmdW5jdGlvbihjYWxsKSB7
CisgICAgICAgICAgICByZXR1cm4gY2FsbC50b1JlcGxheWFibGUoY2FjaGUpOworICAgICAgICB9
KTsKKyAgICAgICAgdGhpcy5fcG9wdWxhdGVSZXBsYXlhYmxlRGF0YShkYXRhLCBjYWNoZSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7
T2JqZWN0fSBkYXRhCisgICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAgICAgKi8KKyAgICBf
cG9wdWxhdGVSZXBsYXlhYmxlRGF0YTogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCisgICAgeworICAg
ICAgICAvLyBEbyBub3RoaW5nLiBTaG91bGQgYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YQorICAgICAqIEBw
YXJhbSB7Q2FjaGV9IGNhY2hlCisgICAgICogQHJldHVybiB7UmVzb3VyY2V9CisgICAgICovCisg
ICAgcmVwbGF5OiBmdW5jdGlvbihkYXRhLCBjYWNoZSkKKyAgICB7CisgICAgICAgIHZhciByZXNv
dXJjZSA9IGNhY2hlLmdldChkYXRhLmlkKTsKKyAgICAgICAgaWYgKHJlc291cmNlKQorICAgICAg
ICAgICAgcmV0dXJuIHJlc291cmNlOworICAgICAgICB0aGlzLl9pZCA9IGRhdGEuaWQ7CisgICAg
ICAgIHRoaXMuX3Jlc291cmNlTWFuYWdlciA9IG51bGw7CisgICAgICAgIHRoaXMuX2NhbGxzID0g
W107CisgICAgICAgIHRoaXMuX3dyYXBwZWRPYmplY3QgPSBudWxsOworICAgICAgICBjYWNoZS5w
dXQoZGF0YS5pZCwgdGhpcyk7IC8vIFB1dCBpbnRvIHRoZSBjYWNoZSBlYXJseSB0byBhdm9pZCBs
b29wcy4KKyAgICAgICAgdGhpcy5fZG9SZXBsYXlDYWxscyhkYXRhLCBjYWNoZSk7CisgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3dyYXBwZWRPYmplY3QsICJSZXNvdXJjZSBzaG91bGQgYmUg
cmVjb25zdHJ1Y3RlZCEiKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIC8q
KgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhCisgICAgICogQHBhcmFtIHtDYWNoZX0gY2Fj
aGUKKyAgICAgKi8KKyAgICBfZG9SZXBsYXlDYWxsczogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCisg
ICAgeworICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IGRhdGEuY2FsbHMubGVuZ3RoOyBpIDwg
bjsgKytpKQorICAgICAgICAgICAgdGhpcy5fY2FsbHMucHVzaChkYXRhLmNhbGxzW2ldLnJlcGxh
eShjYWNoZSkpOworICAgIH0sCisKKyAgICAvKioKICAgICAgKiBAcGFyYW0ge0NhbGx9IGNhbGwK
ICAgICAgKi8KICAgICBwdXNoQ2FsbDogZnVuY3Rpb24oY2FsbCkKQEAgLTQyNCw2ICs1MzksOCBA
QCBSZXNvdXJjZS5wcm90b3R5cGUgPSB7CiAgKi8KIGZ1bmN0aW9uIFJlcGxheWFibGVSZXNvdXJj
ZShvcmlnaW5hbFJlc291cmNlLCBkYXRhKQogeworICAgIHRoaXMuX3Byb3RvID0gb3JpZ2luYWxS
ZXNvdXJjZS5fX3Byb3RvX187CisgICAgdGhpcy5fZGF0YSA9IGRhdGE7CiB9CiAKIFJlcGxheWFi
bGVSZXNvdXJjZS5wcm90b3R5cGUgPSB7CkBAIC00MzMsMTEgKzU1MCwyNCBAQCBSZXBsYXlhYmxl
UmVzb3VyY2UucHJvdG90eXBlID0gewogICAgICAqLwogICAgIHJlcGxheTogZnVuY3Rpb24oY2Fj
aGUpCiAgICAgewotICAgICAgICAvLyBGSVhNRTogRG8gdGhlIHJlcGxheS4KKyAgICAgICAgdmFy
IHJlc3VsdCA9IE9iamVjdC5jcmVhdGUodGhpcy5fcHJvdG8pOworICAgICAgICByZXN1bHQgPSBy
ZXN1bHQucmVwbGF5KHRoaXMuX2RhdGEsIGNhY2hlKQorICAgICAgICBjb25zb2xlLmFzc2VydChy
ZXN1bHQuX19wcm90b19fID09PSB0aGlzLl9wcm90bywgIldyb25nIHR5cGUgb2YgYSByZXBsYXkg
cmVzdWx0Iik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogfQogCiAvKioKKyAqIEBw
YXJhbSB7UmVwbGF5YWJsZVJlc291cmNlfCp9IG9iagorICogQHBhcmFtIHtDYWNoZX0gY2FjaGUK
KyAqIEByZXR1cm4geyp9CisgKi8KK1JlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkgPSBmdW5jdGlv
bihvYmosIGNhY2hlKQoreworICAgIHJldHVybiAob2JqIGluc3RhbmNlb2YgUmVwbGF5YWJsZVJl
c291cmNlKSA/IG9iai5yZXBsYXkoY2FjaGUpLndyYXBwZWRPYmplY3QoKSA6IG9iajsKK30KKwor
LyoqCiAgKiBAY29uc3RydWN0b3IKICAqIEBleHRlbmRzIHtSZXNvdXJjZX0KICAqLwpAQCAtNDQ5
LDYgKzU3OSw2OSBAQCBmdW5jdGlvbiBXZWJHTEJvdW5kUmVzb3VyY2Uod3JhcHBlZE9iamVjdCkK
IAogV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZSA9IHsKICAgICAvKioKKyAgICAgKiBAb3Zl
cnJpZGUKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YQorICAgICAqIEBwYXJhbSB7Q2FjaGV9
IGNhY2hlCisgICAgICovCisgICAgX3BvcHVsYXRlUmVwbGF5YWJsZURhdGE6IGZ1bmN0aW9uKGRh
dGEsIGNhY2hlKQorICAgIHsKKyAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7CisgICAg
ICAgIGRhdGEuc3RhdGUgPSB7fTsKKyAgICAgICAgT2JqZWN0LmtleXMoc3RhdGUpLmZvckVhY2go
ZnVuY3Rpb24ocGFyYW1ldGVyKSB7CisgICAgICAgICAgICBkYXRhLnN0YXRlW3BhcmFtZXRlcl0g
PSBSZXNvdXJjZS50b1JlcGxheWFibGUoc3RhdGVbcGFyYW1ldGVyXSwgY2FjaGUpOworICAgICAg
ICB9KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisgICAgICogQHBhcmFt
IHtPYmplY3R9IGRhdGEKKyAgICAgKiBAcGFyYW0ge0NhY2hlfSBjYWNoZQorICAgICAqLworICAg
IF9kb1JlcGxheUNhbGxzOiBmdW5jdGlvbihkYXRhLCBjYWNoZSkKKyAgICB7CisgICAgICAgIHZh
ciBzdGF0ZSA9IHt9OworICAgICAgICBPYmplY3Qua2V5cyhkYXRhLnN0YXRlKS5mb3JFYWNoKGZ1
bmN0aW9uKHBhcmFtZXRlcikgeworICAgICAgICAgICAgc3RhdGVbcGFyYW1ldGVyXSA9IFJlcGxh
eWFibGVSZXNvdXJjZS5yZXBsYXkoZGF0YS5zdGF0ZVtwYXJhbWV0ZXJdLCBjYWNoZSk7CisgICAg
ICAgIH0pOworICAgICAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlOworCisgICAgICAgIHZhciBnbCA9
IHRoaXMuX3JlcGxheUNvbnRleHRSZXNvdXJjZShkYXRhLCBjYWNoZSkud3JhcHBlZE9iamVjdCgp
OworCisgICAgICAgIHZhciBiaW5kaW5nc0RhdGEgPSB7CisgICAgICAgICAgICBURVhUVVJFXzJE
OiBbImJpbmRUZXh0dXJlIiwgIlRFWFRVUkVfQklORElOR18yRCJdLAorICAgICAgICAgICAgVEVY
VFVSRV9DVUJFX01BUDogWyJiaW5kVGV4dHVyZSIsICJURVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVAi
XSwKKyAgICAgICAgICAgIEFSUkFZX0JVRkZFUjogWyJiaW5kQnVmZmVyIiwgIkFSUkFZX0JVRkZF
Ul9CSU5ESU5HIl0sCisgICAgICAgICAgICBFTEVNRU5UX0FSUkFZX0JVRkZFUjogWyJiaW5kQnVm
ZmVyIiwgIkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkciXSwKKyAgICAgICAgICAgIEZSQU1F
QlVGRkVSOiBbImJpbmRGcmFtZWJ1ZmZlciIsICJGUkFNRUJVRkZFUl9CSU5ESU5HIl0sCisgICAg
ICAgICAgICBSRU5ERVJCVUZGRVI6IFsiYmluZFJlbmRlcmJ1ZmZlciIsICJSRU5ERVJCVUZGRVJf
QklORElORyJdCisgICAgICAgIH07CisgICAgICAgIHZhciBvcmlnaW5hbEJpbmRpbmdzID0ge307
CisgICAgICAgIE9iamVjdC5rZXlzKGJpbmRpbmdzRGF0YSkuZm9yRWFjaChmdW5jdGlvbihiaW5k
aW5nVGFyZ2V0KSB7CisgICAgICAgICAgICB2YXIgYmluZGluZ1BhcmFtZXRlciA9IGJpbmRpbmdz
RGF0YVtiaW5kaW5nVGFyZ2V0XVsxXTsKKyAgICAgICAgICAgIG9yaWdpbmFsQmluZGluZ3NbYmlu
ZGluZ1RhcmdldF0gPSBnbC5nZXRQYXJhbWV0ZXIoZ2xbYmluZGluZ1BhcmFtZXRlcl0pOworICAg
ICAgICB9KTsKKworICAgICAgICBSZXNvdXJjZS5wcm90b3R5cGUuX2RvUmVwbGF5Q2FsbHMuY2Fs
bCh0aGlzLCBkYXRhLCBjYWNoZSk7CisKKyAgICAgICAgT2JqZWN0LmtleXMoYmluZGluZ3NEYXRh
KS5mb3JFYWNoKGZ1bmN0aW9uKGJpbmRpbmdUYXJnZXQpIHsKKyAgICAgICAgICAgIHZhciBiaW5k
TWV0aG9kTmFtZSA9IGJpbmRpbmdzRGF0YVtiaW5kaW5nVGFyZ2V0XVswXTsKKyAgICAgICAgICAg
IGdsW2JpbmRNZXRob2ROYW1lXS5jYWxsKGdsLCBnbFtiaW5kaW5nVGFyZ2V0XSwgb3JpZ2luYWxC
aW5kaW5nc1tiaW5kaW5nVGFyZ2V0XSk7CisgICAgICAgIH0pOworICAgIH0sCisKKyAgICBfcmVw
bGF5Q29udGV4dFJlc291cmNlOiBmdW5jdGlvbihkYXRhLCBjYWNoZSkKKyAgICB7CisgICAgICAg
IHZhciBjYWxscyA9IGRhdGEuY2FsbHM7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gY2Fs
bHMubGVuZ3RoOyBpIDwgbjsgKytpKSB7CisgICAgICAgICAgICB2YXIgcmVzb3VyY2UgPSBSZXBs
YXlhYmxlUmVzb3VyY2UucmVwbGF5KGNhbGxzW2ldLnJlc291cmNlKCksIGNhY2hlKTsKKyAgICAg
ICAgICAgIHZhciBjb250ZXh0UmVzb3VyY2UgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJj
ZS5mb3JPYmplY3QocmVzb3VyY2UpOworICAgICAgICAgICAgaWYgKGNvbnRleHRSZXNvdXJjZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFJlc291cmNlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBudWxsOworICAgIH0sCisKKyAgICAvKioKICAgICAgKiBAcGFyYW0ge251bWJl
cn0gdGFyZ2V0CiAgICAgICogQHBhcmFtIHtzdHJpbmd9IGJpbmRNZXRob2ROYW1lCiAgICAgICov
CkBAIC00NzMsNyArNjY2LDMxIEBAIGZ1bmN0aW9uIFdlYkdMVGV4dHVyZVJlc291cmNlKHdyYXBw
ZWRPYmplY3QpCiB9CiAKIFdlYkdMVGV4dHVyZVJlc291cmNlLnByb3RvdHlwZSA9IHsKLSAgICAv
KiogQGluaGVyaXREb2MgKi8KKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKiBAcGFy
YW0ge09iamVjdH0gZGF0YQorICAgICAqIEBwYXJhbSB7Q2FjaGV9IGNhY2hlCisgICAgICovCisg
ICAgX2RvUmVwbGF5Q2FsbHM6IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQorICAgIHsKKyAgICAgICAg
dmFyIGdsID0gdGhpcy5fcmVwbGF5Q29udGV4dFJlc291cmNlKGRhdGEsIGNhY2hlKS53cmFwcGVk
T2JqZWN0KCk7CisKKyAgICAgICAgdmFyIHN0YXRlID0ge307CisgICAgICAgIFdlYkdMUmVuZGVy
aW5nQ29udGV4dFJlc291cmNlLlBpeGVsU3RvcmVQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24o
cGFyYW1ldGVyKSB7CisgICAgICAgICAgICBzdGF0ZVtwYXJhbWV0ZXJdID0gZ2wuZ2V0UGFyYW1l
dGVyKGdsW3BhcmFtZXRlcl0pOworICAgICAgICB9KTsKKworICAgICAgICBXZWJHTEJvdW5kUmVz
b3VyY2UucHJvdG90eXBlLl9kb1JlcGxheUNhbGxzLmNhbGwodGhpcywgZGF0YSwgY2FjaGUpOwor
CisgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLlBpeGVsU3RvcmVQYXJhbWV0
ZXJzLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyKSB7CisgICAgICAgICAgICBnbC5waXhlbFN0
b3JlaShnbFtwYXJhbWV0ZXJdLCBzdGF0ZVtwYXJhbWV0ZXJdKTsKKyAgICAgICAgfSk7CisgICAg
fSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAqIEBwYXJhbSB7Q2FsbH0gY2Fs
bAorICAgICAqLwogICAgIHB1c2hDYWxsOiBmdW5jdGlvbihjYWxsKQogICAgIHsKICAgICAgICAg
dmFyIGdsID0gY2FsbC5yZXNvdXJjZSgpLndyYXBwZWRPYmplY3QoKTsKQEAgLTUzNiw4ICs3NTMs
MTExIEBAIGZ1bmN0aW9uIFdlYkdMUHJvZ3JhbVJlc291cmNlKHdyYXBwZWRPYmplY3QpCiAgICAg
UmVzb3VyY2UuY2FsbCh0aGlzLCB3cmFwcGVkT2JqZWN0KTsKIH0KIAorLyoqCisgKiBAdHlwZSB7
T2JqZWN0LjxudW1iZXIsc3RyaW5nPn0KKyAqLworV2ViR0xQcm9ncmFtUmVzb3VyY2UuVW5pZm9y
bU1ldGhvZE5hbWVzID0gbnVsbDsKKwogV2ViR0xQcm9ncmFtUmVzb3VyY2UucHJvdG90eXBlID0g
ewotICAgIC8qKiBAaW5oZXJpdERvYyAqLworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAg
ICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhCisgICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAg
ICAgKi8KKyAgICBfcG9wdWxhdGVSZXBsYXlhYmxlRGF0YTogZnVuY3Rpb24oZGF0YSwgY2FjaGUp
CisgICAgeworICAgICAgICB2YXIgZ2wgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5m
b3JPYmplY3QodGhpcykud3JhcHBlZE9iamVjdCgpOworICAgICAgICB2YXIgcHJvZ3JhbSA9IHRo
aXMud3JhcHBlZE9iamVjdCgpOworCisgICAgICAgIHZhciB1bmlmb3JtcyA9IFtdOworICAgICAg
ICB2YXIgdW5pZm9ybXNDb3VudCA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wu
QUNUSVZFX1VOSUZPUk1TKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmlmb3Jtc0Nv
dW50OyArK2kpIHsKKyAgICAgICAgICAgIHZhciBhY3RpdmVJbmZvID0gZ2wuZ2V0QWN0aXZlVW5p
Zm9ybShwcm9ncmFtLCBpKTsKKyAgICAgICAgICAgIGlmICghYWN0aXZlSW5mbykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHZhciB1bmlmb3JtTG9jYXRpb24gPSBnbC5n
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgYWN0aXZlSW5mby5uYW1lKTsKKyAgICAgICAgICAg
IGlmICghdW5pZm9ybUxvY2F0aW9uKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgdmFyIHZhbHVlID0gZ2wuZ2V0VW5pZm9ybShwcm9ncmFtLCB1bmlmb3JtTG9jYXRpb24p
OworICAgICAgICAgICAgdW5pZm9ybXMucHVzaCh7CisgICAgICAgICAgICAgICAgbmFtZTogYWN0
aXZlSW5mby5uYW1lLAorICAgICAgICAgICAgICAgIHR5cGU6IGFjdGl2ZUluZm8udHlwZSwKKyAg
ICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUKKyAgICAgICAgICAgIH0pOworICAgICAgICB9Cisg
ICAgICAgIGRhdGEudW5pZm9ybXMgPSB1bmlmb3JtczsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICogQG92ZXJyaWRlCisgICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEKKyAgICAgKiBAcGFyYW0g
e0NhY2hlfSBjYWNoZQorICAgICAqLworICAgIF9kb1JlcGxheUNhbGxzOiBmdW5jdGlvbihkYXRh
LCBjYWNoZSkKKyAgICB7CisgICAgICAgIFJlc291cmNlLnByb3RvdHlwZS5fZG9SZXBsYXlDYWxs
cy5jYWxsKHRoaXMsIGRhdGEsIGNhY2hlKTsKKyAgICAgICAgdmFyIGdsID0gV2ViR0xSZW5kZXJp
bmdDb250ZXh0UmVzb3VyY2UuZm9yT2JqZWN0KHRoaXMpLndyYXBwZWRPYmplY3QoKTsKKyAgICAg
ICAgdmFyIHByb2dyYW0gPSB0aGlzLndyYXBwZWRPYmplY3QoKTsKKworICAgICAgICB2YXIgb3Jp
Z2luYWxQcm9ncmFtID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLkNVUlJFTlRfUFJPR1JBTSk7CisgICAg
ICAgIHZhciBjdXJyZW50UHJvZ3JhbSA9IG9yaWdpbmFsUHJvZ3JhbTsKKyAgICAgICAgCisgICAg
ICAgIGRhdGEudW5pZm9ybXMuZm9yRWFjaChmdW5jdGlvbih1bmlmb3JtKSB7CisgICAgICAgICAg
ICB2YXIgdW5pZm9ybUxvY2F0aW9uID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIHVu
aWZvcm0ubmFtZSk7CisgICAgICAgICAgICBpZiAoIXVuaWZvcm1Mb2NhdGlvbikKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoY3VycmVudFByb2dyYW0gIT09IHByb2dy
YW0pIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07CisgICAgICAg
ICAgICAgICAgZ2wudXNlUHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHZhciBtZXRob2ROYW1lID0gdGhpcy5fdW5pZm9ybU1ldGhvZE5hbWVCeVR5cGUoZ2wsIHVu
aWZvcm0udHlwZSk7CisgICAgICAgICAgICBpZiAobWV0aG9kTmFtZS5pbmRleE9mKCJNYXRyaXgi
KSA9PT0gLTEpCisgICAgICAgICAgICAgICAgZ2xbbWV0aG9kTmFtZV0uY2FsbChnbCwgdW5pZm9y
bUxvY2F0aW9uLCB1bmlmb3JtLnZhbHVlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBnbFttZXRob2ROYW1lXS5jYWxsKGdsLCB1bmlmb3JtTG9jYXRpb24sIGZhbHNlLCB1bmlm
b3JtLnZhbHVlKTsKKyAgICAgICAgfS5iaW5kKHRoaXMpKTsKKworICAgICAgICBpZiAoY3VycmVu
dFByb2dyYW0gIT09IG9yaWdpbmFsUHJvZ3JhbSkKKyAgICAgICAgICAgIGdsLnVzZVByb2dyYW0o
b3JpZ2luYWxQcm9ncmFtKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJH
TFJlbmRlcmluZ0NvbnRleHR9IGdsCisgICAgICogQHBhcmFtIHtudW1iZXJ9IHR5cGUKKyAgICAg
KiBAcmV0dXJuIHtzdHJpbmd9CisgICAgICovCisgICAgX3VuaWZvcm1NZXRob2ROYW1lQnlUeXBl
OiBmdW5jdGlvbihnbCwgdHlwZSkKKyAgICB7CisgICAgICAgIHZhciB1bmlmb3JtTWV0aG9kTmFt
ZXMgPSBXZWJHTFByb2dyYW1SZXNvdXJjZS5Vbmlmb3JtTWV0aG9kTmFtZXM7CisgICAgICAgIGlm
ICghdW5pZm9ybU1ldGhvZE5hbWVzKSB7CisgICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXMg
PSB7fTsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF0gPSAidW5pZm9y
bTFmIjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF9WRUMyXSA9ICJ1
bmlmb3JtMmZ2IjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF9WRUMz
XSA9ICJ1bmlmb3JtM2Z2IjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9B
VF9WRUM0XSA9ICJ1bmlmb3JtNGZ2IjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tn
bC5JTlRdID0gInVuaWZvcm0xaSI7CisgICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wu
Qk9PTF0gPSAidW5pZm9ybTFpIjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5T
QU1QTEVSXzJEXSA9ICJ1bmlmb3JtMWkiOworICAgICAgICAgICAgdW5pZm9ybU1ldGhvZE5hbWVz
W2dsLlNBTVBMRVJfQ1VCRV0gPSAidW5pZm9ybTFpIjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRo
b2ROYW1lc1tnbC5JTlRfVkVDMl0gPSAidW5pZm9ybTJpdiI7CisgICAgICAgICAgICB1bmlmb3Jt
TWV0aG9kTmFtZXNbZ2wuQk9PTF9WRUMyXSA9ICJ1bmlmb3JtMml2IjsKKyAgICAgICAgICAgIHVu
aWZvcm1NZXRob2ROYW1lc1tnbC5JTlRfVkVDM10gPSAidW5pZm9ybTNpdiI7CisgICAgICAgICAg
ICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuQk9PTF9WRUMzXSA9ICJ1bmlmb3JtM2l2IjsKKyAgICAg
ICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5JTlRfVkVDNF0gPSAidW5pZm9ybTRpdiI7Cisg
ICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuQk9PTF9WRUM0XSA9ICJ1bmlmb3JtNGl2
IjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF9NQVQyXSA9ICJ1bmlm
b3JtTWF0cml4MmZ2IjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF9N
QVQzXSA9ICJ1bmlmb3JtTWF0cml4M2Z2IjsKKyAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1l
c1tnbC5GTE9BVF9NQVQ0XSA9ICJ1bmlmb3JtTWF0cml4NGZ2IjsKKyAgICAgICAgICAgIFdlYkdM
UHJvZ3JhbVJlc291cmNlLlVuaWZvcm1NZXRob2ROYW1lcyA9IHVuaWZvcm1NZXRob2ROYW1lczsK
KyAgICAgICAgfQorICAgICAgICBjb25zb2xlLmFzc2VydCh1bmlmb3JtTWV0aG9kTmFtZXNbdHlw
ZV0sICJVbmtub3duIHVuaWZvcm0gdHlwZSAiICsgdHlwZSk7CisgICAgICAgIHJldHVybiB1bmlm
b3JtTWV0aG9kTmFtZXNbdHlwZV07CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlk
ZQorICAgICAqIEBwYXJhbSB7Q2FsbH0gY2FsbAorICAgICAqLwogICAgIHB1c2hDYWxsOiBmdW5j
dGlvbihjYWxsKQogICAgIHsKICAgICAgICAgLy8gRklYTUU6IHJlbW92ZSBhbnkgb2xkZXIgY2Fs
bHMgdGhhdCBubyBsb25nZXIgY29udHJpYnV0ZSB0byB0aGUgcmVzb3VyY2Ugc3RhdGUuCkBAIC01
NTgsNyArODc4LDEwIEBAIGZ1bmN0aW9uIFdlYkdMU2hhZGVyUmVzb3VyY2Uod3JhcHBlZE9iamVj
dCkKIH0KIAogV2ViR0xTaGFkZXJSZXNvdXJjZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqIEBpbmhl
cml0RG9jICovCisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisgICAgICogQHBhcmFtIHtDYWxs
fSBjYWxsCisgICAgICovCiAgICAgcHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCiAgICAgewogICAg
ICAgICAvLyBGSVhNRTogcmVtb3ZlIGFueSBvbGRlciBjYWxscyB0aGF0IG5vIGxvbmdlciBjb250
cmlidXRlIHRvIHRoZSByZXNvdXJjZSBzdGF0ZS4KQEAgLTU3OSw3ICs5MDIsMTAgQEAgZnVuY3Rp
b24gV2ViR0xCdWZmZXJSZXNvdXJjZSh3cmFwcGVkT2JqZWN0KQogfQogCiBXZWJHTEJ1ZmZlclJl
c291cmNlLnByb3RvdHlwZSA9IHsKLSAgICAvKiogQGluaGVyaXREb2MgKi8KKyAgICAvKioKKyAg
ICAgKiBAb3ZlcnJpZGUKKyAgICAgKiBAcGFyYW0ge0NhbGx9IGNhbGwKKyAgICAgKi8KICAgICBw
dXNoQ2FsbDogZnVuY3Rpb24oY2FsbCkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiByZW1vdmUg
YW55IG9sZGVyIGNhbGxzIHRoYXQgbm8gbG9uZ2VyIGNvbnRyaWJ1dGUgdG8gdGhlIHJlc291cmNl
IHN0YXRlLgpAQCAtNjAwLDcgKzkyNiwxMCBAQCBmdW5jdGlvbiBXZWJHTEZyYW1lYnVmZmVyUmVz
b3VyY2Uod3JhcHBlZE9iamVjdCkKIH0KIAogV2ViR0xGcmFtZWJ1ZmZlclJlc291cmNlLnByb3Rv
dHlwZSA9IHsKLSAgICAvKiogQGluaGVyaXREb2MgKi8KKyAgICAvKioKKyAgICAgKiBAb3ZlcnJp
ZGUKKyAgICAgKiBAcGFyYW0ge0NhbGx9IGNhbGwKKyAgICAgKi8KICAgICBwdXNoQ2FsbDogZnVu
Y3Rpb24oY2FsbCkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiByZW1vdmUgYW55IG9sZGVyIGNh
bGxzIHRoYXQgbm8gbG9uZ2VyIGNvbnRyaWJ1dGUgdG8gdGhlIHJlc291cmNlIHN0YXRlLgpAQCAt
NjIwLDcgKzk0OSwxMCBAQCBmdW5jdGlvbiBXZWJHTFJlbmRlcmJ1ZmZlclJlc291cmNlKHdyYXBw
ZWRPYmplY3QpCiB9CiAKIFdlYkdMUmVuZGVyYnVmZmVyUmVzb3VyY2UucHJvdG90eXBlID0gewot
ICAgIC8qKiBAaW5oZXJpdERvYyAqLworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAq
IEBwYXJhbSB7Q2FsbH0gY2FsbAorICAgICAqLwogICAgIHB1c2hDYWxsOiBmdW5jdGlvbihjYWxs
KQogICAgIHsKICAgICAgICAgLy8gRklYTUU6IHJlbW92ZSBhbnkgb2xkZXIgY2FsbHMgdGhhdCBu
byBsb25nZXIgY29udHJpYnV0ZSB0byB0aGUgcmVzb3VyY2Ugc3RhdGUuCkBAIC02MzQsMTcgKzk2
NiwzNSBAQCBXZWJHTFJlbmRlcmJ1ZmZlclJlc291cmNlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBX
ZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90eXBlOwogICogQGNvbnN0cnVjdG9yCiAgKiBAZXh0ZW5k
cyB7UmVzb3VyY2V9CiAgKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2xDb250ZXh0
CisgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXBsYXlDb250ZXh0Q2FsbGJhY2sKICAqLwotZnVuY3Rp
b24gV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UoZ2xDb250ZXh0KQorZnVuY3Rpb24gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UoZ2xDb250ZXh0LCByZXBsYXlDb250ZXh0Q2FsbGJh
Y2spCiB7CiAgICAgUmVzb3VyY2UuY2FsbCh0aGlzLCBnbENvbnRleHQpOwogICAgIHRoaXMuX3By
b3h5T2JqZWN0ID0gbnVsbDsKKyAgICB0aGlzLl9yZXBsYXlDb250ZXh0Q2FsbGJhY2sgPSByZXBs
YXlDb250ZXh0Q2FsbGJhY2s7CiB9CiAKIC8qKgogICogQGNvbnN0CiAgKiBAdHlwZSB7QXJyYXku
PHN0cmluZz59CiAgKi8KK1dlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLkdMQ2FwYWJpbGl0
aWVzID0gWworICAgICJCTEVORCIsCisgICAgIkNVTExfRkFDRSIsCisgICAgIkRFUFRIX1RFU1Qi
LAorICAgICJESVRIRVIiLAorICAgICJQT0xZR09OX09GRlNFVF9GSUxMIiwKKyAgICAiU0FNUExF
X0FMUEhBX1RPX0NPVkVSQUdFIiwKKyAgICAiU0FNUExFX0NPVkVSQUdFIiwKKyAgICAiU0NJU1NP
Ul9URVNUIiwKKyAgICAiU1RFTkNJTF9URVNUIgorXTsKKworLyoqCisgKiBAY29uc3QKKyAqIEB0
eXBlIHtBcnJheS48c3RyaW5nPn0KKyAqLwogV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2Uu
UGl4ZWxTdG9yZVBhcmFtZXRlcnMgPSBbCiAgICAgIlBBQ0tfQUxJR05NRU5UIiwKICAgICAiVU5Q
QUNLX0FMSUdOTUVOVCIsCkBAIC02NTQsNiArMTAwNCw2MiBAQCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRSZXNvdXJjZS5QaXhlbFN0b3JlUGFyYW1ldGVycyA9IFsKIF07CiAKIC8qKgorICogQGNvbnN0
CisgKiBAdHlwZSB7QXJyYXkuPHN0cmluZz59CisgKi8KK1dlYkdMUmVuZGVyaW5nQ29udGV4dFJl
c291cmNlLlN0YXRlUGFyYW1ldGVycyA9IFsKKyAgICAiQUNUSVZFX1RFWFRVUkUiLAorICAgICJB
UlJBWV9CVUZGRVJfQklORElORyIsCisgICAgIkJMRU5EX0NPTE9SIiwKKyAgICAiQkxFTkRfRFNU
X0FMUEhBIiwKKyAgICAiQkxFTkRfRFNUX1JHQiIsCisgICAgIkJMRU5EX0VRVUFUSU9OX0FMUEhB
IiwKKyAgICAiQkxFTkRfRVFVQVRJT05fUkdCIiwKKyAgICAiQkxFTkRfU1JDX0FMUEhBIiwKKyAg
ICAiQkxFTkRfU1JDX1JHQiIsCisgICAgIkNPTE9SX0NMRUFSX1ZBTFVFIiwKKyAgICAiQ09MT1Jf
V1JJVEVNQVNLIiwKKyAgICAiQ1VMTF9GQUNFX01PREUiLAorICAgICJDVVJSRU5UX1BST0dSQU0i
LAorICAgICJERVBUSF9DTEVBUl9WQUxVRSIsCisgICAgIkRFUFRIX0ZVTkMiLAorICAgICJERVBU
SF9SQU5HRSIsCisgICAgIkRFUFRIX1dSSVRFTUFTSyIsCisgICAgIkVMRU1FTlRfQVJSQVlfQlVG
RkVSX0JJTkRJTkciLAorICAgICJGUkFNRUJVRkZFUl9CSU5ESU5HIiwKKyAgICAiRlJPTlRfRkFD
RSIsCisgICAgIkdFTkVSQVRFX01JUE1BUF9ISU5UIiwKKyAgICAiTElORV9XSURUSCIsCisgICAg
IlBBQ0tfQUxJR05NRU5UIiwKKyAgICAiUE9MWUdPTl9PRkZTRVRfRkFDVE9SIiwKKyAgICAiUE9M
WUdPTl9PRkZTRVRfVU5JVFMiLAorICAgICJSRU5ERVJCVUZGRVJfQklORElORyIsCisgICAgIlNB
TVBMRV9DT1ZFUkFHRV9JTlZFUlQiLAorICAgICJTQU1QTEVfQ09WRVJBR0VfVkFMVUUiLAorICAg
ICJTQ0lTU09SX0JPWCIsCisgICAgIlNURU5DSUxfQkFDS19GQUlMIiwKKyAgICAiU1RFTkNJTF9C
QUNLX0ZVTkMiLAorICAgICJTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMIiwKKyAgICAiU1RF
TkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyIsCisgICAgIlNURU5DSUxfQkFDS19SRUYiLAorICAg
ICJTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyIsCisgICAgIlNURU5DSUxfQkFDS19XUklURU1BU0si
LAorICAgICJTVEVOQ0lMX0NMRUFSX1ZBTFVFIiwKKyAgICAiU1RFTkNJTF9GQUlMIiwKKyAgICAi
U1RFTkNJTF9GVU5DIiwKKyAgICAiU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUwiLAorICAgICJTVEVO
Q0lMX1BBU1NfREVQVEhfUEFTUyIsCisgICAgIlNURU5DSUxfUkVGIiwKKyAgICAiU1RFTkNJTF9W
QUxVRV9NQVNLIiwKKyAgICAiU1RFTkNJTF9XUklURU1BU0siLAorICAgICJVTlBBQ0tfQUxJR05N
RU5UIiwKKyAgICAiVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCIsCisgICAgIlVO
UEFDS19GTElQX1lfV0VCR0wiLAorICAgICJVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wi
LAorICAgICJWSUVXUE9SVCIKK107CisKKy8qKgogICogQHBhcmFtIHsqfSBvYmoKICAqIEByZXR1
cm4ge1dlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlfQogICovCkBAIC02ODEsNiArMTA4Nywx
NTMgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UucHJvdG90eXBlID0gewogICAgIH0s
CiAKICAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0
YQorICAgICAqIEBwYXJhbSB7Q2FjaGV9IGNhY2hlCisgICAgICovCisgICAgX3BvcHVsYXRlUmVw
bGF5YWJsZURhdGE6IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQorICAgIHsKKyAgICAgICAgdmFyIGds
ID0gdGhpcy53cmFwcGVkT2JqZWN0KCk7CisgICAgICAgIGRhdGEucmVwbGF5Q29udGV4dENhbGxi
YWNrID0gdGhpcy5fcmVwbGF5Q29udGV4dENhbGxiYWNrOworCisgICAgICAgIC8vIEZJWE1FOiBT
YXZlIHRoZSBnZXRFcnJvcigpIHN0YXR1cyBhbmQgcmVzdG9yZSBpdCBhZnRlciB0YWtpbmcgdGhl
IEdMIHN0YXRlIHNuYXBzaG90LgorCisgICAgICAgIC8vIFRha2UgYSBmdWxsIEdMIHN0YXRlIHNu
YXBzaG90LgorICAgICAgICB2YXIgZ2xTdGF0ZSA9IHt9OworICAgICAgICBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRSZXNvdXJjZS5HTENhcGFiaWxpdGllcy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtZXRl
cikgeworICAgICAgICAgICAgZ2xTdGF0ZVtwYXJhbWV0ZXJdID0gZ2wuaXNFbmFibGVkKGdsW3Bh
cmFtZXRlcl0pOworICAgICAgICB9KTsKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVz
b3VyY2UuU3RhdGVQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyKSB7CisgICAg
ICAgICAgICBnbFN0YXRlW3BhcmFtZXRlcl0gPSBSZXNvdXJjZS50b1JlcGxheWFibGUoZ2wuZ2V0
UGFyYW1ldGVyKGdsW3BhcmFtZXRlcl0pLCBjYWNoZSk7CisgICAgICAgICAgICAvLyBGSVhNRTog
Q2FsbCB3aGlsZShnbC5nZXRFcnJvcigpICE9IGdsLk5PX0VSUk9SKSB7Li4ufSB0byBjaGVjayBp
ZiBhIHBhcnRpY3VsYXIgcGFyYW1ldGVyIGlzIHN1cHBvcnRlZC4KKyAgICAgICAgfSk7CisKKyAg
ICAgICAgLy8gVkVSVEVYX0FUVFJJQl9BUlJBWVMKKyAgICAgICAgdmFyIG1heFZlcnRleEF0dHJp
YnMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICAgICAgdmFy
IHZlcnRleEF0dHJpYlBhcmFtZXRlcnMgPSBbIlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJ
TkRJTkciLCAiVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEIiwgIlZFUlRFWF9BVFRSSUJfQVJS
QVlfU0laRSIsICJWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERSIsICJWRVJURVhfQVRUUklCX0FS
UkFZX1RZUEUiLCAiVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEIiwgIkNVUlJFTlRfVkVS
VEVYX0FUVFJJQiJdOworICAgICAgICB2YXIgdmVydGV4QXR0cmliU3RhdGVzID0gW107CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VmVydGV4QXR0cmliczsgKytpKSB7CisgICAgICAg
ICAgICB2YXIgc3RhdGUgPSB7fTsKKyAgICAgICAgICAgIHZlcnRleEF0dHJpYlBhcmFtZXRlcnMu
Zm9yRWFjaChmdW5jdGlvbihhdHRyaWJQYXJhbWV0ZXIpIHsKKyAgICAgICAgICAgICAgICBzdGF0
ZVthdHRyaWJQYXJhbWV0ZXJdID0gUmVzb3VyY2UudG9SZXBsYXlhYmxlKGdsLmdldFZlcnRleEF0
dHJpYihpLCBnbFthdHRyaWJQYXJhbWV0ZXJdKSwgY2FjaGUpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICBzdGF0ZS5WRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIgPSBnbC5nZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQoaSwgZ2wuVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSKTsKKyAgICAg
ICAgICAgIHZlcnRleEF0dHJpYlN0YXRlcy5wdXNoKHN0YXRlKTsKKyAgICAgICAgfQorICAgICAg
ICBnbFN0YXRlLnZlcnRleEF0dHJpYlN0YXRlcyA9IHZlcnRleEF0dHJpYlN0YXRlczsKKworICAg
ICAgICAvLyBURVhUVVJFUworICAgICAgICB2YXIgY3VycmVudFRleHR1cmVCaW5kaW5nID0gZ2wu
Z2V0UGFyYW1ldGVyKGdsLkFDVElWRV9URVhUVVJFKTsKKyAgICAgICAgdmFyIG1heFRleHR1cmVJ
bWFnZVVuaXRzID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKTsK
KyAgICAgICAgdmFyIHRleHR1cmVCaW5kaW5ncyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG1heFRleHR1cmVJbWFnZVVuaXRzOyArK2kpIHsKKyAgICAgICAgICAgIGdsLmFjdGl2
ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBpKTsKKyAgICAgICAgICAgIHZhciBzdGF0ZSA9IHsKKyAg
ICAgICAgICAgICAgICBURVhUVVJFXzJEOiBSZXNvdXJjZS50b1JlcGxheWFibGUoZ2wuZ2V0UGFy
YW1ldGVyKGdsLlRFWFRVUkVfQklORElOR18yRCksIGNhY2hlKSwKKyAgICAgICAgICAgICAgICBU
RVhUVVJFX0NVQkVfTUFQOiBSZXNvdXJjZS50b1JlcGxheWFibGUoZ2wuZ2V0UGFyYW1ldGVyKGds
LlRFWFRVUkVfQklORElOR19DVUJFX01BUCksIGNhY2hlKQorICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIHRleHR1cmVCaW5kaW5ncy5wdXNoKHN0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBn
bFN0YXRlLnRleHR1cmVCaW5kaW5ncyA9IHRleHR1cmVCaW5kaW5nczsKKyAgICAgICAgZ2wuYWN0
aXZlVGV4dHVyZShjdXJyZW50VGV4dHVyZUJpbmRpbmcpOworCisgICAgICAgIGRhdGEuZ2xTdGF0
ZSA9IGdsU3RhdGU7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAq
IEBwYXJhbSB7T2JqZWN0fSBkYXRhCisgICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKKyAgICAg
Ki8KKyAgICBfZG9SZXBsYXlDYWxsczogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCisgICAgeworICAg
ICAgICB0aGlzLl9wcm94eU9iamVjdCA9IG51bGw7CisgICAgICAgIHRoaXMuX3JlcGxheUNvbnRl
eHRDYWxsYmFjayA9IGRhdGEucmVwbGF5Q29udGV4dENhbGxiYWNrOworCisgICAgICAgIHZhciBj
b250ZXh0ID0gdGhpcy5fcmVwbGF5Q29udGV4dENhbGxiYWNrKCk7CisgICAgICAgIHZhciBjb250
ZXh0UmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3QoY29udGV4dCk7CisgICAgICAgIHZhciBn
bCA9IGNvbnRleHRSZXNvdXJjZSA/IGNvbnRleHRSZXNvdXJjZS53cmFwcGVkT2JqZWN0KCkgOiBj
b250ZXh0OworICAgICAgICB0aGlzLnNldFdyYXBwZWRPYmplY3QoZ2wpOworCisgICAgICAgIHZh
ciBnbFN0YXRlID0gZGF0YS5nbFN0YXRlOworICAgICAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wu
RlJBTUVCVUZGRVIsIFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoZ2xTdGF0ZS5GUkFNRUJVRkZF
Ul9CSU5ESU5HLCBjYWNoZSkpOworICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRF
UkJVRkZFUiwgUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShnbFN0YXRlLlJFTkRFUkJVRkZFUl9C
SU5ESU5HLCBjYWNoZSkpOworCisgICAgICAgIC8vIEVuYWJsZSBvciBkaXNhYmxlIHNlcnZlci1z
aWRlIEdMIGNhcGFiaWxpdGllcy4KKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3Vy
Y2UuR0xDYXBhYmlsaXRpZXMuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0ZXIpIHsKKyAgICAgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KHBhcmFtZXRlciBpbiBnbFN0YXRlKTsKKyAgICAgICAgICAgIGlm
IChnbFN0YXRlW3BhcmFtZXRlcl0pCisgICAgICAgICAgICAgICAgZ2wuZW5hYmxlKGdsW3BhcmFt
ZXRlcl0pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdsLmRpc2FibGUoZ2xb
cGFyYW1ldGVyXSk7CisgICAgICAgIH0pOworCisgICAgICAgIGdsLmJsZW5kQ29sb3IoZ2xTdGF0
ZS5CTEVORF9DT0xPUlswXSwgZ2xTdGF0ZS5CTEVORF9DT0xPUlsxXSwgZ2xTdGF0ZS5CTEVORF9D
T0xPUlsyXSwgZ2xTdGF0ZS5CTEVORF9DT0xPUlszXSk7CisgICAgICAgIGdsLmJsZW5kRXF1YXRp
b25TZXBhcmF0ZShnbFN0YXRlLkJMRU5EX0VRVUFUSU9OX1JHQiwgZ2xTdGF0ZS5CTEVORF9FUVVB
VElPTl9BTFBIQSk7CisgICAgICAgIGdsLmJsZW5kRnVuY1NlcGFyYXRlKGdsU3RhdGUuQkxFTkRf
U1JDX1JHQiwgZ2xTdGF0ZS5CTEVORF9EU1RfUkdCLCBnbFN0YXRlLkJMRU5EX1NSQ19BTFBIQSwg
Z2xTdGF0ZS5CTEVORF9EU1RfQUxQSEEpOworICAgICAgICBnbC5jbGVhckNvbG9yKGdsU3RhdGUu
Q09MT1JfQ0xFQVJfVkFMVUVbMF0sIGdsU3RhdGUuQ09MT1JfQ0xFQVJfVkFMVUVbMV0sIGdsU3Rh
dGUuQ09MT1JfQ0xFQVJfVkFMVUVbMl0sIGdsU3RhdGUuQ09MT1JfQ0xFQVJfVkFMVUVbM10pOwor
ICAgICAgICBnbC5jbGVhckRlcHRoKGdsU3RhdGUuREVQVEhfQ0xFQVJfVkFMVUUpOworICAgICAg
ICBnbC5jbGVhclN0ZW5jaWwoZ2xTdGF0ZS5TVEVOQ0lMX0NMRUFSX1ZBTFVFKTsKKyAgICAgICAg
Z2wuY29sb3JNYXNrKGdsU3RhdGUuQ09MT1JfV1JJVEVNQVNLWzBdLCBnbFN0YXRlLkNPTE9SX1dS
SVRFTUFTS1sxXSwgZ2xTdGF0ZS5DT0xPUl9XUklURU1BU0tbMl0sIGdsU3RhdGUuQ09MT1JfV1JJ
VEVNQVNLWzNdKTsKKyAgICAgICAgZ2wuY3VsbEZhY2UoZ2xTdGF0ZS5DVUxMX0ZBQ0VfTU9ERSk7
CisgICAgICAgIGdsLmRlcHRoRnVuYyhnbFN0YXRlLkRFUFRIX0ZVTkMpOworICAgICAgICBnbC5k
ZXB0aE1hc2soZ2xTdGF0ZS5ERVBUSF9XUklURU1BU0spOworICAgICAgICBnbC5kZXB0aFJhbmdl
KGdsU3RhdGUuREVQVEhfUkFOR0VbMF0sIGdsU3RhdGUuREVQVEhfUkFOR0VbMV0pOworICAgICAg
ICBnbC5mcm9udEZhY2UoZ2xTdGF0ZS5GUk9OVF9GQUNFKTsKKyAgICAgICAgZ2wuaGludChnbC5H
RU5FUkFURV9NSVBNQVBfSElOVCwgZ2xTdGF0ZS5HRU5FUkFURV9NSVBNQVBfSElOVCk7CisgICAg
ICAgIGdsLmxpbmVXaWR0aChnbFN0YXRlLkxJTkVfV0lEVEgpOworCisgICAgICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dFJlc291cmNlLlBpeGVsU3RvcmVQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rp
b24ocGFyYW1ldGVyKSB7CisgICAgICAgICAgICBnbC5waXhlbFN0b3JlaShnbFtwYXJhbWV0ZXJd
LCBnbFN0YXRlW3BhcmFtZXRlcl0pOworICAgICAgICB9KTsKKworICAgICAgICBnbC5wb2x5Z29u
T2Zmc2V0KGdsU3RhdGUuUE9MWUdPTl9PRkZTRVRfRkFDVE9SLCBnbFN0YXRlLlBPTFlHT05fT0ZG
U0VUX1VOSVRTKTsKKyAgICAgICAgZ2wuc2FtcGxlQ292ZXJhZ2UoZ2xTdGF0ZS5TQU1QTEVfQ09W
RVJBR0VfVkFMVUUsIGdsU3RhdGUuU0FNUExFX0NPVkVSQUdFX0lOVkVSVCk7CisgICAgICAgIGds
LnN0ZW5jaWxGdW5jU2VwYXJhdGUoZ2wuRlJPTlQsIGdsU3RhdGUuU1RFTkNJTF9GVU5DLCBnbFN0
YXRlLlNURU5DSUxfUkVGLCBnbFN0YXRlLlNURU5DSUxfVkFMVUVfTUFTSyk7CisgICAgICAgIGds
LnN0ZW5jaWxGdW5jU2VwYXJhdGUoZ2wuQkFDSywgZ2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfRlVOQywg
Z2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfUkVGLCBnbFN0YXRlLlNURU5DSUxfQkFDS19WQUxVRV9NQVNL
KTsKKyAgICAgICAgZ2wuc3RlbmNpbE9wU2VwYXJhdGUoZ2wuRlJPTlQsIGdsU3RhdGUuU1RFTkNJ
TF9GQUlMLCBnbFN0YXRlLlNURU5DSUxfUEFTU19ERVBUSF9GQUlMLCBnbFN0YXRlLlNURU5DSUxf
UEFTU19ERVBUSF9QQVNTKTsKKyAgICAgICAgZ2wuc3RlbmNpbE9wU2VwYXJhdGUoZ2wuQkFDSywg
Z2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfRkFJTCwgZ2xTdGF0ZS5TVEVOQ0lMX0JBQ0tfUEFTU19ERVBU
SF9GQUlMLCBnbFN0YXRlLlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1MpOworICAgICAgICBn
bC5zdGVuY2lsTWFza1NlcGFyYXRlKGdsLkZST05ULCBnbFN0YXRlLlNURU5DSUxfV1JJVEVNQVNL
KTsKKyAgICAgICAgZ2wuc3RlbmNpbE1hc2tTZXBhcmF0ZShnbC5CQUNLLCBnbFN0YXRlLlNURU5D
SUxfQkFDS19XUklURU1BU0spOworCisgICAgICAgIGdsLnNjaXNzb3IoZ2xTdGF0ZS5TQ0lTU09S
X0JPWFswXSwgZ2xTdGF0ZS5TQ0lTU09SX0JPWFsxXSwgZ2xTdGF0ZS5TQ0lTU09SX0JPWFsyXSwg
Z2xTdGF0ZS5TQ0lTU09SX0JPWFszXSk7CisgICAgICAgIGdsLnZpZXdwb3J0KGdsU3RhdGUuVklF
V1BPUlRbMF0sIGdsU3RhdGUuVklFV1BPUlRbMV0sIGdsU3RhdGUuVklFV1BPUlRbMl0sIGdsU3Rh
dGUuVklFV1BPUlRbM10pOworCisgICAgICAgIGdsLnVzZVByb2dyYW0oUmVwbGF5YWJsZVJlc291
cmNlLnJlcGxheShnbFN0YXRlLkNVUlJFTlRfUFJPR1JBTSwgY2FjaGUpKTsKKworICAgICAgICAv
LyBWRVJURVhfQVRUUklCX0FSUkFZUworICAgICAgICB2YXIgbWF4VmVydGV4QXR0cmlicyA9IGds
LmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpOworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG1heFZlcnRleEF0dHJpYnM7ICsraSkgeworICAgICAgICAgICAgdmFyIHN0YXRl
ID0gZ2xTdGF0ZS52ZXJ0ZXhBdHRyaWJTdGF0ZXNbaV0gfHwge307CisgICAgICAgICAgICBpZiAo
c3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEKQorICAgICAgICAgICAgICAgIGdsLmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KGkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTsKKyAgICAgICAgICAgIGlmIChzdGF0
ZS5DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpCisgICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmli
NGZ2KGksIHN0YXRlLkNVUlJFTlRfVkVSVEVYX0FUVFJJQik7CisgICAgICAgICAgICB2YXIgYnVm
ZmVyID0gUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShzdGF0ZS5WRVJURVhfQVRUUklCX0FSUkFZ
X0JVRkZFUl9CSU5ESU5HLCBjYWNoZSk7CisgICAgICAgICAgICBpZiAoYnVmZmVyKSB7CisgICAg
ICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIGJ1ZmZlcik7CisgICAg
ICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihpLCBzdGF0ZS5WRVJURVhfQVRUUklC
X0FSUkFZX1NJWkUsIHN0YXRlLlZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSwgc3RhdGUuVkVSVEVY
X0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVELCBzdGF0ZS5WRVJURVhfQVRUUklCX0FSUkFZX1NUUklE
RSwgc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgUmVwbGF5YWJs
ZVJlc291cmNlLnJlcGxheShnbFN0YXRlLkFSUkFZX0JVRkZFUl9CSU5ESU5HLCBjYWNoZSkpOwor
ICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBSZXBsYXlhYmxl
UmVzb3VyY2UucmVwbGF5KGdsU3RhdGUuRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORywgY2Fj
aGUpKTsKKworICAgICAgICAvLyBURVhUVVJFUworICAgICAgICB2YXIgbWF4VGV4dHVyZUltYWdl
VW5pdHMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpOworICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFRleHR1cmVJbWFnZVVuaXRzOyArK2kpIHsKKyAg
ICAgICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTAgKyBpKTsKKyAgICAgICAgICAg
IHZhciBzdGF0ZSA9IGdsU3RhdGUudGV4dHVyZUJpbmRpbmdzW2ldIHx8IHt9OworICAgICAgICAg
ICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgUmVwbGF5YWJsZVJlc291cmNlLnJlcGxh
eShzdGF0ZS5URVhUVVJFXzJELCBjYWNoZSkpOworICAgICAgICAgICAgZ2wuYmluZFRleHR1cmUo
Z2wuVEVYVFVSRV9DVUJFX01BUCwgUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShzdGF0ZS5URVhU
VVJFX0NVQkVfTUFQLCBjYWNoZSkpOworICAgICAgICB9CisgICAgICAgIGdsLmFjdGl2ZVRleHR1
cmUoZ2xTdGF0ZS5BQ1RJVkVfVEVYVFVSRSk7CisKKyAgICAgICAgcmV0dXJuIFJlc291cmNlLnBy
b3RvdHlwZS5fZG9SZXBsYXlDYWxscy5jYWxsKHRoaXMsIGRhdGEsIGNhY2hlKTsKKyAgICB9LAor
CisgICAgLyoqCiAgICAgICogQHBhcmFtIHtPYmplY3R8bnVtYmVyfSB0YXJnZXQKICAgICAgKiBA
cmV0dXJuIHtSZXNvdXJjZX0KICAgICAgKi8KQEAgLTY5MywzOSArMTI0NiwzOSBAQCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRSZXNvdXJjZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBiaW5kaW5n
VGFyZ2V0OwogICAgICAgICB2YXIgYmluZE1ldGhvZE5hbWU7CiAgICAgICAgIHN3aXRjaCAodGFy
Z2V0KSB7Ci0gICAgICAgICAgICBjYXNlIGdsLkFSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAg
ICBiaW5kaW5nVGFyZ2V0ID0gZ2wuQVJSQVlfQlVGRkVSX0JJTkRJTkc7Ci0gICAgICAgICAgICAg
ICAgYmluZE1ldGhvZE5hbWUgPSAiYmluZEJ1ZmZlciI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAg
ICAgIGJpbmRpbmdUYXJnZXQgPSBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOwotICAg
ICAgICAgICAgICAgIGJpbmRNZXRob2ROYW1lID0gImJpbmRCdWZmZXIiOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBnbC5URVhUVVJFXzJEOgotICAgICAgICAgICAg
ICAgIGJpbmRpbmdUYXJnZXQgPSBnbC5URVhUVVJFX0JJTkRJTkdfMkQ7Ci0gICAgICAgICAgICAg
ICAgYmluZE1ldGhvZE5hbWUgPSAiYmluZFRleHR1cmUiOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBnbC5URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgY2Fz
ZSBnbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICBjYXNlIGdsLlRF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICAgICAgY2FzZSBnbC5URVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1k6Ci0gICAgICAgICAgICBjYXNlIGdsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWjoKLSAgICAgICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgot
ICAgICAgICAgICAgICAgIGJpbmRpbmdUYXJnZXQgPSBnbC5URVhUVVJFX0JJTkRJTkdfQ1VCRV9N
QVA7Ci0gICAgICAgICAgICAgICAgYmluZE1ldGhvZE5hbWUgPSAiYmluZFRleHR1cmUiOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBnbC5GUkFNRUJVRkZFUjoKLSAg
ICAgICAgICAgICAgICBiaW5kaW5nVGFyZ2V0ID0gZ2wuRlJBTUVCVUZGRVJfQklORElORzsKLSAg
ICAgICAgICAgICAgICBiaW5kTWV0aG9kTmFtZSA9ICJiaW5kRnJhbWVidWZmZXIiOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBnbC5SRU5ERVJCVUZGRVI6Ci0gICAg
ICAgICAgICAgICAgYmluZGluZ1RhcmdldCA9IGdsLlJFTkRFUkJVRkZFUl9CSU5ESU5HOwotICAg
ICAgICAgICAgICAgIGJpbmRNZXRob2ROYW1lID0gImJpbmRSZW5kZXJidWZmZXIiOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBj
b25zb2xlLmVycm9yKCJBU1NFUlRfTk9UX1JFQUNIRUQ6IHVua25vd24gYmluZGluZyB0YXJnZXQg
IiArIHRhcmdldCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIGNhc2Ug
Z2wuQVJSQVlfQlVGRkVSOgorICAgICAgICAgICAgYmluZGluZ1RhcmdldCA9IGdsLkFSUkFZX0JV
RkZFUl9CSU5ESU5HOworICAgICAgICAgICAgYmluZE1ldGhvZE5hbWUgPSAiYmluZEJ1ZmZlciI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBnbC5FTEVNRU5UX0FSUkFZX0JVRkZF
UjoKKyAgICAgICAgICAgIGJpbmRpbmdUYXJnZXQgPSBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUl9C
SU5ESU5HOworICAgICAgICAgICAgYmluZE1ldGhvZE5hbWUgPSAiYmluZEJ1ZmZlciI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBnbC5URVhUVVJFXzJEOgorICAgICAgICAgICAg
YmluZGluZ1RhcmdldCA9IGdsLlRFWFRVUkVfQklORElOR18yRDsKKyAgICAgICAgICAgIGJpbmRN
ZXRob2ROYW1lID0gImJpbmRUZXh0dXJlIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIGdsLlRFWFRVUkVfQ1VCRV9NQVA6CisgICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YOgorICAgICAgICBjYXNlIGdsLlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WDoKKyAgICAgICAgY2FzZSBnbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAg
IGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgICAgICBjYXNlIGdsLlRF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICAgICAgY2FzZSBnbC5URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1o6CisgICAgICAgICAgICBiaW5kaW5nVGFyZ2V0ID0gZ2wuVEVYVFVSRV9C
SU5ESU5HX0NVQkVfTUFQOworICAgICAgICAgICAgYmluZE1ldGhvZE5hbWUgPSAiYmluZFRleHR1
cmUiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZ2wuRlJBTUVCVUZGRVI6Cisg
ICAgICAgICAgICBiaW5kaW5nVGFyZ2V0ID0gZ2wuRlJBTUVCVUZGRVJfQklORElORzsKKyAgICAg
ICAgICAgIGJpbmRNZXRob2ROYW1lID0gImJpbmRGcmFtZWJ1ZmZlciI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBnbC5SRU5ERVJCVUZGRVI6CisgICAgICAgICAgICBiaW5kaW5n
VGFyZ2V0ID0gZ2wuUkVOREVSQlVGRkVSX0JJTkRJTkc7CisgICAgICAgICAgICBiaW5kTWV0aG9k
TmFtZSA9ICJiaW5kUmVuZGVyYnVmZmVyIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgY29uc29sZS5lcnJvcigiQVNTRVJUX05PVF9SRUFDSEVEOiB1
bmtub3duIGJpbmRpbmcgdGFyZ2V0ICIgKyB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuIG51
bGw7CiAgICAgICAgIH0KICAgICAgICAgcmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3QoZ2wu
Z2V0UGFyYW1ldGVyKGJpbmRpbmdUYXJnZXQpKTsKICAgICAgICAgaWYgKHJlc291cmNlKQpAQCAt
OTY1LDcgKzE1MTgsNyBAQCBUcmFjZUxvZy5wcm90b3R5cGUgPSB7CiAgICAgICovCiAgICAgY2Fw
dHVyZVJlc291cmNlOiBmdW5jdGlvbihyZXNvdXJjZSkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1F
OiBDYXB0dXJlIGN1cnJlbnQgcmVzb3VyY2Ugc3RhdGUgdG8gc3RhcnQgdGhlIHJlcGxheSBmcm9t
LgorICAgICAgICByZXNvdXJjZS50b1JlcGxheWFibGUodGhpcy5fcmVwbGF5YWJsZXNDYWNoZSk7
CiAgICAgfSwKIAogICAgIC8qKgpAQCAtOTczLDcgKzE1MjYsMTIgQEAgVHJhY2VMb2cucHJvdG90
eXBlID0gewogICAgICAqLwogICAgIGFkZENhbGw6IGZ1bmN0aW9uKGNhbGwpCiAgICAgewotICAg
ICAgICAvLyBGSVhNRTogQ29udmVydCB0aGUgY2FsbCB0byBhIFJlcGxheWFibGVDYWxsIGFuZCBw
dXNoIGl0LgorICAgICAgICB2YXIgcmVzID0gUmVzb3VyY2UuZm9yT2JqZWN0KGNhbGwucmVzdWx0
KCkpOworICAgICAgICBpZiAocmVzKQorICAgICAgICAgICAgdGhpcy5jYXB0dXJlUmVzb3VyY2Uo
cmVzKTsKKyAgICAgICAgdmFyIHNpemUgPSB0aGlzLl9yZXBsYXlhYmxlc0NhY2hlLnNpemUoKTsK
KyAgICAgICAgdGhpcy5fcmVwbGF5YWJsZUNhbGxzLnB1c2goY2FsbC50b1JlcGxheWFibGUodGhp
cy5fcmVwbGF5YWJsZXNDYWNoZSkpOworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9yZXBs
YXlhYmxlc0NhY2hlLnNpemUoKSA9PT0gc2l6ZSwgIkludGVybmFsIGVycm9yOiBXZSBzaG91bGQg
aGF2ZSBjYXB0dXJlZCBhbGwgdGhlIHJlc291cmNlcyBhbHJlYWR5IGJ5IHRoaXMgdGltZS4iKTsK
ICAgICB9CiB9CiAKQEAgLTExNjIsNyArMTcyMCw3IEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlw
ZSA9IHsKICAgICAgKi8KICAgICB3cmFwV2ViR0xDb250ZXh0OiBmdW5jdGlvbihnbENvbnRleHQp
CiAgICAgewotICAgICAgICB2YXIgcmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3QoZ2xDb250
ZXh0KSB8fCBuZXcgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UoZ2xDb250ZXh0KTsKKyAg
ICAgICAgdmFyIHJlc291cmNlID0gUmVzb3VyY2UuZm9yT2JqZWN0KGdsQ29udGV4dCkgfHwgbmV3
IFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlKGdsQ29udGV4dCwgdGhpcy5fY29uc3RydWN0
UmVwbGF5Q29udGV4dC5iaW5kKHRoaXMsIGdsQ29udGV4dCkpOwogICAgICAgICB0aGlzLl9tYW5h
Z2VyLnJlZ2lzdGVyUmVzb3VyY2UocmVzb3VyY2UpOwogICAgICAgICB2YXIgcHJveHkgPSByZXNv
dXJjZS5wcm94eU9iamVjdCgpOwogICAgICAgICByZXR1cm4gcHJveHk7CkBAIC0xMjI3LDYgKzE3
ODUsNyBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm4g
IiI7CiAgICAgICAgIH0KICAgICAgICAgLy8gUmV0dXJuIGN1cnJlbnQgc2NyZWVuc2hvdC4KKyAg
ICAgICAgLy8gRklYTUU6IFN1cHBvcnQgcmVwbGF5aW5nIHNldmVyYWwgY2FudmFzZXMgc2ltdWx0
YW5lb3VzbHkuCiAgICAgICAgIHJldHVybiB0aGlzLl9yZXBsYXlDb250ZXh0LmNhbnZhcy50b0Rh
dGFVUkwoKTsKICAgICB9LAogCkBAIC0xMjM2LDYgKzE3OTUsMjYgQEAgSW5qZWN0ZWRTY3JpcHQu
cHJvdG90eXBlID0gewogICAgIF9tYWtlVHJhY2VMb2dJZDogZnVuY3Rpb24oKQogICAgIHsKICAg
ICAgICAgcmV0dXJuICJ7XCJpbmplY3RlZFNjcmlwdElkXCI6IiArIGluamVjdGVkU2NyaXB0SWQg
KyAiLFwidHJhY2VMb2dJZFwiOiIgKyAoKyt0aGlzLl9sYXN0VHJhY2VMb2dJZCkgKyAifSI7Cisg
ICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBv
cmlnaW5hbEdsQ29udGV4dAorICAgICAqIEByZXR1cm4ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0K
KyAgICAgKi8KKyAgICBfY29uc3RydWN0UmVwbGF5Q29udGV4dDogZnVuY3Rpb24ob3JpZ2luYWxH
bENvbnRleHQpCisgICAgeworICAgICAgICB2YXIgcmVwbGF5Q29udGV4dCA9IG9yaWdpbmFsR2xD
b250ZXh0WyJfX3JlcGxheUNvbnRleHQiXTsKKyAgICAgICAgaWYgKCFyZXBsYXlDb250ZXh0KSB7
CisgICAgICAgICAgICB2YXIgY2FudmFzID0gb3JpZ2luYWxHbENvbnRleHQuY2FudmFzLmNsb25l
Tm9kZSh0cnVlKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBQYXNzIG9yaWdpbmFsIGNvbnRleHQg
aWQgaW5zdGVhZCBvZiAiZXhwZXJpbWVudGFsLXdlYmdsIi4KKyAgICAgICAgICAgIC8vIEZJWE1F
OiBQYXNzIG9yaWdpbmFsIENvbnRleHRBdHRyaWJ1dGVzIHRvIHRoZSBnZXRDb250ZXh0KCkgbWV0
aG9kLgorICAgICAgICAgICAgcmVwbGF5Q29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJleHBl
cmltZW50YWwtd2ViZ2wiKTsKKyAgICAgICAgICAgIG9yaWdpbmFsR2xDb250ZXh0WyJfX3JlcGxh
eUNvbnRleHQiXSA9IHJlcGxheUNvbnRleHQ7CisgICAgICAgICAgICB0aGlzLl9yZXBsYXlDb250
ZXh0ID0gcmVwbGF5Q29udGV4dDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBSZXNldCB0aGUgcmVwbGF5IEdMIHN0YXRlIGFuZCBjbGVhciB0aGUgY2FudmFzLgorICAg
ICAgICB9CisgICAgICAgIHJldHVybiByZXBsYXlDb250ZXh0OwogICAgIH0KIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>