<?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>70936</bug_id>
          
          <creation_ts>2011-10-26 09:26:59 -0700</creation_ts>
          <short_desc>Web Inspector: [refactoring] TextPrompt: ensure encapsulation, extract history management</short_desc>
          <delta_ts>2011-10-31 08:09:27 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</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>490921</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-10-26 09:26:59 -0700</bug_when>
    <thetext>Patch to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492439</commentid>
    <comment_count>1</comment_count>
      <attachid>112860</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-10-28 07:28:51 -0700</bug_when>
    <thetext>Created attachment 112860
[PATCH] Suggested solution</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493215</commentid>
    <comment_count>2</comment_count>
      <attachid>112860</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-10-31 02:07:49 -0700</bug_when>
    <thetext>Comment on attachment 112860
[PATCH] Suggested solution

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

&gt; Source/WebCore/inspector/front-end/TextPrompt.js:185
&gt; +    _onKeyDown: function(event)

rename to onKeyDown and allow overriding for complex cases.

&gt; Source/WebCore/inspector/front-end/TextPrompt.js:525
&gt; +    this.commitOnTabWithSuggestion = false;

Could you please implement it using setCommitOn... on the TextPromptWithHistory?

&gt; Source/WebCore/inspector/front-end/TextPrompt.js:531
&gt; +    this.coalesceHistoryDups = true;

nit: Dupes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493246</commentid>
    <comment_count>3</comment_count>
      <attachid>113039</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-10-31 04:37:40 -0700</bug_when>
    <thetext>Created attachment 113039
[PATCH] Comments addressed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493315</commentid>
    <comment_count>4</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-10-31 08:09:27 -0700</bug_when>
    <thetext>Committed r98856: &lt;http://trac.webkit.org/changeset/98856&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112860</attachid>
            <date>2011-10-28 07:28:51 -0700</date>
            <delta_ts>2011-10-31 04:37:40 -0700</delta_ts>
            <desc>[PATCH] Suggested solution</desc>
            <filename>textprompt_step1.patch</filename>
            <type>text/plain</type>
            <size>42308</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IDZjY2ZkZGQ1YjkwY2E0MDY2YmRlOGFiNjQzOGE4ZThkOTY2ZmNjNjUKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBGcmkgT2N0IDI4
IDExOjEzOjMzIDIwMTEgKzA0MDAKCiAgICBGaXgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTdiYjNkOS4uY2Ix
NDA4ZCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDExLTEwLTI4ICBBbGV4YW5kZXIg
UGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
W3JlZmFjdG9yaW5nXSBUZXh0UHJvbXB0OiBlbnN1cmUgZW5jYXBzdWxhdGlvbiwgZXh0cmFjdCBo
aXN0b3J5IG1hbmFnZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcwOTM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0RhdGFiYXNlUXVlcnlWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlUXVl
cnlWaWV3KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZVF1ZXJ5Vmlldy5wcm90b3R5
cGUuX2VudGVyS2V5UHJlc3NlZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TdHls
ZXNTaWRlYmFyUGFuZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFu
ZS5wcm90b3R5cGUuX2F0dHJpYnV0ZXNNb2RpZmllZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS5zZWxlY3RFbGVtZW50KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLnNlbGVj
dEVsZW1lbnQuY29udGV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRy
ZWVFbGVtZW50LnByb3RvdHlwZS5zZWxlY3RFbGVtZW50LmV2ZW50KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLmNvbnRleHQuZXZl
bnQpOgorICAgICAgICAoKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRQcm9t
cHQuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuZ2V0IHByb3h5RWxlbWVudCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuYXR0YWNoKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5hdHRhY2hBbmRTdGFydEVkaXRpbmcpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLl9hdHRhY2hJbnRlcm5h
bCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuZGV0YWNoKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5nZXQgdGV4dCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuc2V0IHRleHQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLl9yZW1vdmVGcm9tRWxlbWVu
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuX3N0YXJ0RWRp
dGluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuX3N0b3BF
ZGl0aW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5fc2Vs
ZWN0U3RhcnQubW92ZUJhY2tJZk91dHNpZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQ
cm9tcHQucHJvdG90eXBlLl9zZWxlY3RTdGFydCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4
dFByb21wdC5wcm90b3R5cGUuZGVmYXVsdEtleUhhbmRsZXIpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRQcm9tcHQucHJvdG90eXBlLl9vbktleURvd24pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmNsZWFyQXV0b0NvbXBsZXRlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5jb21wbGV0ZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuX2NvbXBsZXRpb25zUmVhZHkpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmlzQ2FyZXRJbnNpZGVQcm9tcHQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmlzQ2FyZXRBdEVu
ZE9mUHJvbXB0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5p
c0NhcmV0T25GaXJzdExpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJv
dG90eXBlLmlzQ2FyZXRPbkxhc3RMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJv
bXB0LnByb3RvdHlwZS5tb3ZlQ2FyZXRUb0VuZE9mUHJvbXB0KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS51cEtleVByZXNzZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmRvd25LZXlQcmVzc2VkKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS50YWJLZXlQcmVzc2VkKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0Q29uZmlnKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
ZXh0UHJvbXB0V2l0aEhpc3RvcnkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHRX
aXRoSGlzdG9yeS5wcm90b3R5cGUuZ2V0IGhpc3RvcnlEYXRhKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0UHJvbXB0V2l0aEhpc3RvcnkucHJvdG90eXBlLnNldEhpc3RvcnlEYXRhKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0V2l0aEhpc3RvcnkucHJvdG90eXBlLnB1c2hI
aXN0b3J5SXRlbSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdFdpdGhIaXN0b3J5
LnByb3RvdHlwZS5fcHVzaEN1cnJlbnRUZXh0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
UHJvbXB0V2l0aEhpc3RvcnkucHJvdG90eXBlLl9wcmV2aW91cyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dFByb21wdFdpdGhIaXN0b3J5LnByb3RvdHlwZS5fbmV4dCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuVGV4dFByb21wdFdpdGhIaXN0b3J5LnByb3RvdHlwZS5fY3VycmVudEhpc3Rv
cnlJdGVtKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0V2l0aEhpc3RvcnkucHJv
dG90eXBlLmRlZmF1bHRLZXlIYW5kbGVyKToKKwogMjAxMS0xMC0xOSAgQWxleGFuZGVyIFBhdmxv
diAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IENTUyBi
YWNrZ3JvdW5kLWltYWdlIGFwcGxpZWQgaW5saW5lIHNob3dzIGEgd2FybmluZywgYnV0IHN0aWxs
IHdvcmtzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9D
b25zb2xlVmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29s
ZVZpZXcuanMKaW5kZXggYmM2YWIwMy4uNTU1MjdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCkBAIC02NSw5ICs2NSw2IEBAIFdl
Ykluc3BlY3Rvci5Db25zb2xlVmlldyA9IGZ1bmN0aW9uKGhpZGVDb250ZXh0U2VsZWN0b3IpCiAg
ICAgdGhpcy5tZXNzYWdlc0VsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5wcm9tcHRFbGVtZW50KTsK
ICAgICB0aGlzLm1lc3NhZ2VzRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJiciIpKTsKIAotICAgIHRoaXMucHJvbXB0ID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0UHJv
bXB0KHRoaXMucHJvbXB0RWxlbWVudCwgdGhpcy5jb21wbGV0aW9ucy5iaW5kKHRoaXMpLCBFeHBy
ZXNzaW9uU3RvcENoYXJhY3RlcnMgKyAiLiIpOwotICAgIHRoaXMucHJvbXB0Lmhpc3RvcnkgPSBX
ZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY29uc29sZUhpc3RvcnkuZ2V0KCk7Ci0KICAgICB0aGlzLnRv
cEdyb3VwID0gbmV3IFdlYkluc3BlY3Rvci5Db25zb2xlR3JvdXAobnVsbCk7CiAgICAgdGhpcy5t
ZXNzYWdlc0VsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMudG9wR3JvdXAuZWxlbWVudCwgdGhpcy5w
cm9tcHRFbGVtZW50KTsKICAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMudG9wR3JvdXA7CkBA
IC0xMTIsNiArMTA5LDEwIEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldyA9IGZ1bmN0aW9uKGhp
ZGVDb250ZXh0U2VsZWN0b3IpCiAgICAgV2ViSW5zcGVjdG9yLmNvbnNvbGUuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuQ29uc29sZU1vZGVsLkV2ZW50cy5Db25zb2xlQ2xlYXJlZCwgdGhp
cy5fY29uc29sZUNsZWFyZWQsIHRoaXMpOwogCiAgICAgdGhpcy5fbGlua2lmaWVyID0gV2ViSW5z
cGVjdG9yLmRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuY3JlYXRlTGlua2lmaWVyKCk7CisKKyAg
ICB0aGlzLnByb21wdCA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFByb21wdFdpdGhIaXN0b3J5KHRo
aXMuY29tcGxldGlvbnMuYmluZCh0aGlzKSwgRXhwcmVzc2lvblN0b3BDaGFyYWN0ZXJzICsgIi4i
KTsKKyAgICB0aGlzLnByb21wdC5hdHRhY2godGhpcy5wcm9tcHRFbGVtZW50KTsKKyAgICB0aGlz
LnByb21wdC5zZXRIaXN0b3J5RGF0YShXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY29uc29sZUhpc3Rv
cnkuZ2V0KCkpOwogfQogCiBXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcuRXZlbnRzID0gewpAQCAt
NjIyLDExICs2MjMsMTAgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAg
ICAgICAgICAgdGhpcy5wcm9tcHQuaGlzdG9yeS5wdXNoKHN0cik7Ci0gICAgICAgICAgICB0aGlz
LnByb21wdC5oaXN0b3J5T2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIHRoaXMucHJvbXB0LnB1c2hI
aXN0b3J5SXRlbShzdHIpOwogICAgICAgICAgICAgdGhpcy5wcm9tcHQudGV4dCA9ICIiOwogCi0g
ICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY29uc29sZUhpc3Rvcnkuc2V0KHRoaXMu
cHJvbXB0Lmhpc3Rvcnkuc2xpY2UoLTMwKSk7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0
dGluZ3MuY29uc29sZUhpc3Rvcnkuc2V0KHRoaXMucHJvbXB0Lmhpc3RvcnlEYXRhLnNsaWNlKC0z
MCkpOwogCiAgICAgICAgICAgICB0aGlzLl9hcHBlbmRDb25zb2xlTWVzc2FnZShuZXcgV2ViSW5z
cGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0KHJlc3VsdCwgd2FzVGhyb3duLCBjb21tYW5kTWVz
c2FnZSwgdGhpcy5fbGlua2lmaWVyKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2VRdWVyeVZpZXcuanMgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlUXVlcnlWaWV3LmpzCmluZGV4IDQ2
OWU5ZDUuLjM3NmYyODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRGF0YWJhc2VRdWVyeVZpZXcuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9EYXRhYmFzZVF1ZXJ5Vmlldy5qcwpAQCAtMzgsMTUgKzM4LDE0IEBAIFdlYklu
c3BlY3Rvci5EYXRhYmFzZVF1ZXJ5VmlldyA9IGZ1bmN0aW9uKGRhdGFiYXNlKQogICAgIHRoaXMu
ZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJtb25vc3BhY2UiKTsKICAgICB0aGlzLmVsZW1lbnQudGFi
SW5kZXggPSAwOwogCi0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0
YXJ0IiwgdGhpcy5fc2VsZWN0U3RhcnQuYmluZCh0aGlzKSwgZmFsc2UpOwotCiAgICAgdGhpcy5w
cm9tcHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgdGhpcy5w
cm9tcHRFbGVtZW50LmNsYXNzTmFtZSA9ICJkYXRhYmFzZS1xdWVyeS1wcm9tcHQiOwogICAgIHRo
aXMucHJvbXB0RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIp
KTsKICAgICB0aGlzLnByb21wdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRo
aXMuX3Byb21wdEtleURvd24uYmluZCh0aGlzKSwgdHJ1ZSk7CiAgICAgdGhpcy5lbGVtZW50LmFw
cGVuZENoaWxkKHRoaXMucHJvbXB0RWxlbWVudCk7CiAKLSAgICB0aGlzLnByb21wdCA9IG5ldyBX
ZWJJbnNwZWN0b3IuVGV4dFByb21wdCh0aGlzLnByb21wdEVsZW1lbnQsIHRoaXMuY29tcGxldGlv
bnMuYmluZCh0aGlzKSwgIiAiKTsKKyAgICB0aGlzLnByb21wdCA9IG5ldyBXZWJJbnNwZWN0b3Iu
VGV4dFByb21wdFdpdGhIaXN0b3J5KHRoaXMuY29tcGxldGlvbnMuYmluZCh0aGlzKSwgIiAiKTsK
KyAgICB0aGlzLnByb21wdC5hdHRhY2godGhpcy5wcm9tcHRFbGVtZW50KTsKIH0KIAogV2ViSW5z
cGVjdG9yLkRhdGFiYXNlUXVlcnlWaWV3LkV2ZW50cyA9IHsKQEAgLTEwNywyNCArMTA2LDYgQEAg
V2ViSW5zcGVjdG9yLkRhdGFiYXNlUXVlcnlWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgfQog
ICAgIH0sCiAKLSAgICBfc2VsZWN0U3RhcnQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAg
ICAgaWYgKHRoaXMuX3NlbGVjdGlvblRpbWVvdXQpCi0gICAgICAgICAgICBjbGVhclRpbWVvdXQo
dGhpcy5fc2VsZWN0aW9uVGltZW91dCk7Ci0KLSAgICAgICAgdGhpcy5wcm9tcHQuY2xlYXJBdXRv
Q29tcGxldGUoKTsKLQotICAgICAgICBmdW5jdGlvbiBtb3ZlQmFja0lmT3V0c2lkZSgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zZWxlY3Rpb25UaW1lb3V0OwotICAgICAg
ICAgICAgaWYgKCF0aGlzLnByb21wdC5pc0NhcmV0SW5zaWRlUHJvbXB0KCkgJiYgd2luZG93Lmdl
dFNlbGVjdGlvbigpLmlzQ29sbGFwc2VkKQotICAgICAgICAgICAgICAgIHRoaXMucHJvbXB0Lm1v
dmVDYXJldFRvRW5kT2ZQcm9tcHQoKTsKLSAgICAgICAgICAgIHRoaXMucHJvbXB0LmF1dG9Db21w
bGV0ZVNvb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3NlbGVjdGlvblRpbWVvdXQg
PSBzZXRUaW1lb3V0KG1vdmVCYWNrSWZPdXRzaWRlLmJpbmQodGhpcyksIDEwMCk7Ci0gICAgfSwK
LQogICAgIF9lbnRlcktleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsKQEAgLTEzNiw4ICsxMTcsNyBAQCBXZWJJbnNwZWN0b3Iu
RGF0YWJhc2VRdWVyeVZpZXcucHJvdG90eXBlID0gewogICAgICAgICBpZiAoIXF1ZXJ5Lmxlbmd0
aCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB0aGlzLnByb21wdC5oaXN0b3J5LnB1
c2gocXVlcnkpOwotICAgICAgICB0aGlzLnByb21wdC5oaXN0b3J5T2Zmc2V0ID0gMDsKKyAgICAg
ICAgdGhpcy5wcm9tcHQucHVzaEhpc3RvcnlJdGVtKHF1ZXJ5KTsKICAgICAgICAgdGhpcy5wcm9t
cHQudGV4dCA9ICIiOwogCiAgICAgICAgIHRoaXMuZGF0YWJhc2UuZXhlY3V0ZVNxbChxdWVyeSwg
dGhpcy5fcXVlcnlGaW5pc2hlZC5iaW5kKHRoaXMsIHF1ZXJ5KSwgdGhpcy5fcXVlcnlFcnJvci5i
aW5kKHRoaXMsIHF1ZXJ5KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwppbmRleCBkOWFkZWI0Li5lZjlmNDVlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGVi
YXJQYW5lLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVz
U2lkZWJhclBhbmUuanMKQEAgLTI4NCw3ICsyODQsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVzU2lk
ZWJhclBhbmUucHJvdG90eXBlID0gewogICAgICAgICBpZiAodGhpcy5ub2RlICE9PSBldmVudC5k
YXRhLm5vZGUpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgLy8gQ2hhbmdpbmcgc3R5
bGUgYXR0cmlidXRlIHdpbGwgYW55d2F5cyBnZW5lcmF0ZSBfc3R5bGVJbnZhbGlkYXRlZCBtZXNz
YWdlLiAKKyAgICAgICAgLy8gQ2hhbmdpbmcgc3R5bGUgYXR0cmlidXRlIHdpbGwgYW55d2F5cyBn
ZW5lcmF0ZSBfc3R5bGVJbnZhbGlkYXRlZCBtZXNzYWdlLgogICAgICAgICBpZiAoZXZlbnQuZGF0
YS5uYW1lID09PSAic3R5bGUiKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC0xODM4LDU3ICsx
ODM4LDE3IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBl
ID0gewogICAgICAgICB2YXIgY29udGV4dCA9IHsKICAgICAgICAgICAgIGV4cGFuZGVkOiB0aGlz
LmV4cGFuZGVkLAogICAgICAgICAgICAgaGFzQ2hpbGRyZW46IHRoaXMuaGFzQ2hpbGRyZW4sCi0g
ICAgICAgICAgICBrZXlEb3duTGlzdGVuZXI6IGlzRWRpdGluZ05hbWUgPyBudWxsIDogdGhpcy5l
ZGl0aW5nVmFsdWVLZXlEb3duLmJpbmQodGhpcyksCiAgICAgICAgICAgICBpc0VkaXRpbmdOYW1l
OiBpc0VkaXRpbmdOYW1lLAorICAgICAgICAgICAgcHJldmlvdXNDb250ZW50OiBzZWxlY3RFbGVt
ZW50LnRleHRDb250ZW50CiAgICAgICAgIH07CiAKICAgICAgICAgLy8gTGllIGFib3V0IG91ciBj
aGlsZHJlbiB0byBwcmV2ZW50IGV4cGFuZGluZyBvbiBkb3VibGUgY2xpY2sgYW5kIHRvIGNvbGxh
cHNlIHNob3J0aGFuZHMuCiAgICAgICAgIHRoaXMuaGFzQ2hpbGRyZW4gPSBmYWxzZTsKIAotICAg
ICAgICBpZiAoIWlzRWRpdGluZ05hbWUpCi0gICAgICAgICAgICBzZWxlY3RFbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoImtleWRvd24iLCBjb250ZXh0LmtleURvd25MaXN0ZW5lciwgZmFsc2UpOwog
ICAgICAgICBpZiAoc2VsZWN0RWxlbWVudC5wYXJlbnRFbGVtZW50KQogICAgICAgICAgICAgc2Vs
ZWN0RWxlbWVudC5wYXJlbnRFbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNoaWxkLWVkaXRpbmciKTsK
ICAgICAgICAgc2VsZWN0RWxlbWVudC50ZXh0Q29udGVudCA9IHNlbGVjdEVsZW1lbnQudGV4dENv
bnRlbnQ7IC8vIHJlbW92ZSBjb2xvciBzd2F0Y2ggYW5kIHRoZSBsaWtlCiAKLSAgICAgICAgZnVu
Y3Rpb24gc2hvdWxkQ29tbWl0VmFsdWVTZW1pY29sb24odGV4dCwgY3Vyc29yUG9zaXRpb24pCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgdGhpcyBhY2NvdW50IGZvciBz
ZW1pY29sb25zIGluc2lkZSBjb21tZW50cz8KLSAgICAgICAgICAgIHZhciBvcGVuUXVvdGUgPSAi
IjsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3Vyc29yUG9zaXRpb247ICsraSkg
ewotICAgICAgICAgICAgICAgIHZhciBjaCA9IHRleHRbaV07Ci0gICAgICAgICAgICAgICAgaWYg
KGNoID09PSAiXFwiICYmIG9wZW5RdW90ZSAhPT0gIiIpCi0gICAgICAgICAgICAgICAgICAgICsr
aTsgLy8gc2tpcCBuZXh0IGNoYXJhY3RlciBpbnNpZGUgc3RyaW5nCi0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAoIW9wZW5RdW90ZSAmJiAoY2ggPT09ICJcIiIgfHwgY2ggPT09ICInIikpCi0gICAg
ICAgICAgICAgICAgICAgIG9wZW5RdW90ZSA9IGNoOwotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG9wZW5RdW90ZSA9PT0gY2gpCi0gICAgICAgICAgICAgICAgICAgIG9wZW5RdW90ZSA9ICIiOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuICFvcGVuUXVvdGU7Ci0gICAgICAgIH0K
LQotICAgICAgICBmdW5jdGlvbiBuYW1lVmFsdWVGaW5pc2hIYW5kbGVyKGNvbnRleHQsIGlzRWRp
dGluZ05hbWUsIGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogdGhlICI6
Ii8iOyIgZGV0ZWN0aW9uIGRvZXMgbm90IHdvcmsgZm9yIG5vbi1VUyBsYXlvdXRzIGR1ZSB0byB0
aGUgZXZlbnQgYmVpbmcga2V5ZG93biByYXRoZXIgdGhhbiBrZXlwcmVzcy4KLSAgICAgICAgICAg
IHZhciBpc0ZpZWxkSW5wdXRUZXJtaW5hdGVkID0gKGV2ZW50LmtleUNvZGUgPT09IFdlYkluc3Bl
Y3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuU2VtaWNvbG9uLmNvZGUpICYmCi0gICAgICAgICAg
ICAgICAgKGlzRWRpdGluZ05hbWUgPyBldmVudC5zaGlmdEtleSA6ICghZXZlbnQuc2hpZnRLZXkg
JiYgc2hvdWxkQ29tbWl0VmFsdWVTZW1pY29sb24oZXZlbnQudGFyZ2V0LnRleHRDb250ZW50LCBl
dmVudC50YXJnZXQuc2VsZWN0aW9uTGVmdE9mZnNldCkpKTsKLSAgICAgICAgICAgIGlmIChpc0Vu
dGVyS2V5KGV2ZW50KSB8fCBpc0ZpZWxkSW5wdXRUZXJtaW5hdGVkKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gRW50ZXIgb3IgY29sb24gKGZvciBuYW1lKS9zZW1pY29sb24gb3V0c2lkZSBvZiBzdHJp
bmcgKGZvciB2YWx1ZSkuCi0gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gIm1vdmUtZm9yd2FyZCI7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lktl
eXMuRXNjLmNvZGUgfHwgZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIlUrMDAxQiIpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuICJjYW5jZWwiOwotICAgICAgICAgICAgZWxzZSBpZiAoIWlzRWRpdGlu
Z05hbWUgJiYgdGhpcy5fbmV3UHJvcGVydHkgJiYgZXZlbnQua2V5Q29kZSA9PT0gV2ViSW5zcGVj
dG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5CYWNrc3BhY2UuY29kZSkgewotICAgICAgICAgICAg
ICAgIC8vIEZvciBhIG5ldyBwcm9wZXJ0eSwgd2hlbiBCYWNrc3BhY2UgaXMgcHJlc3NlZCBhdCB0
aGUgYmVnaW5uaW5nIG9mIG5ldyBwcm9wZXJ0eSB2YWx1ZSwgbW92ZSBiYWNrIHRvIHRoZSBwcm9w
ZXJ0eSBuYW1lLgotICAgICAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2Vs
ZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCAmJiAh
c2VsZWN0aW9uLmZvY3VzT2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAibW92ZS1iYWNrd2FyZCI7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXlJZGVu
dGlmaWVyID09PSAiVSswMDA5IikgLy8gVGFiIGtleS4KLSAgICAgICAgICAgICAgICByZXR1cm4g
Im1vdmUtIiArIChldmVudC5zaGlmdEtleSA/ICJiYWNrd2FyZCIgOiAiZm9yd2FyZCIpOwotICAg
ICAgICB9Ci0KICAgICAgICAgZnVuY3Rpb24gcGFzdGVIYW5kbGVyKGNvbnRleHQsIGV2ZW50KQog
ICAgICAgICB7CiAgICAgICAgICAgICB2YXIgZGF0YSA9IGV2ZW50LmNsaXBib2FyZERhdGEuZ2V0
RGF0YSgiVGV4dCIpOwpAQCAtMTkxMSw3ICsxODcxLDE3IEBAIFdlYkluc3BlY3Rvci5TdHlsZVBy
b3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5uYW1lRWxl
bWVudC5ub3JtYWxpemUoKTsKICAgICAgICAgICAgIHRoaXMudmFsdWVFbGVtZW50Lm5vcm1hbGl6
ZSgpOwogCi0gICAgICAgICAgICByZXR1cm4gIm1vdmUtZm9yd2FyZCI7CisgICAgICAgICAgICB0
aGlzLmVkaXRpbmdDb21taXR0ZWQobnVsbCwgZXZlbnQudGFyZ2V0LnRleHRDb250ZW50LCBjb250
ZXh0LnByZXZpb3VzQ29udGVudCwgY29udGV4dCwgImZvcndhcmQiKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bmN0aW9uIGJsdXJMaXN0ZW5lcihjb250ZXh0LCBldmVudCkKKyAgICAgICAgewor
ICAgICAgICAgICAgdGhpcy5lZGl0aW5nQ29tbWl0dGVkKG51bGwsIGV2ZW50LnRhcmdldC50ZXh0
Q29udGVudCwgY29udGV4dC5wcmV2aW91c0NvbnRlbnQsIGNvbnRleHQsICIiKTsKKyAgICAgICAg
fQorCisgICAgICAgIGZ1bmN0aW9uIHVwRG93bkhhbmRsZXIoZXZlbnQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAhaXNFZGl0aW5nTmFtZSAmJiB0aGlzLl9oYW5kbGVVcE9yRG93bktl
eVByZXNzZWQoZXZlbnQpOwogICAgICAgICB9CiAKICAgICAgICAgZGVsZXRlIHRoaXMub3JpZ2lu
YWxQcm9wZXJ0eVRleHQ7CkBAIC0xOTIwLDIzICsxODkwLDgyIEBAIFdlYkluc3BlY3Rvci5TdHls
ZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICBpZiAoc2VsZWN0RWxl
bWVudC5wYXJlbnRFbGVtZW50KQogICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5wYXJlbnRFbGVt
ZW50LnNjcm9sbEludG9WaWV3SWZOZWVkZWQoZmFsc2UpOwogCi0gICAgICAgIHZhciBjb25maWcg
PSBuZXcgV2ViSW5zcGVjdG9yLkVkaXRpbmdDb25maWcodGhpcy5lZGl0aW5nQ29tbWl0dGVkLmJp
bmQodGhpcyksIHRoaXMuZWRpdGluZ0NhbmNlbGxlZC5iaW5kKHRoaXMpLCBjb250ZXh0KTsKLSAg
ICAgICAgY29uZmlnLnNldEN1c3RvbUZpbmlzaEhhbmRsZXIobmFtZVZhbHVlRmluaXNoSGFuZGxl
ci5iaW5kKHRoaXMsIGNvbnRleHQsIGlzRWRpdGluZ05hbWUpKTsKLSAgICAgICAgY29uZmlnLnNl
dFBhc3RlSGFuZGxlcihpc0VkaXRpbmdOYW1lID8gcGFzdGVIYW5kbGVyLmJpbmQodGhpcywgY29u
dGV4dCkgOiBudWxsKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyhzZWxlY3RF
bGVtZW50LCBjb25maWcpOworICAgICAgICB0aGlzLl9wcm9tcHQgPSBuZXcgV2ViSW5zcGVjdG9y
LlN0eWxlc1NpZGViYXJQYW5lLkNTU1Byb3BlcnR5UHJvbXB0KGlzRWRpdGluZ05hbWUgPyBXZWJJ
bnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMuY3NzTmFtZUNvbXBsZXRpb25zIDogV2ViSW5zcGVjdG9y
LkNTU0tleXdvcmRDb21wbGV0aW9ucy5mb3JQcm9wZXJ0eSh0aGlzLm5hbWVFbGVtZW50LnRleHRD
b250ZW50KSwgdXBEb3duSGFuZGxlci5iaW5kKHRoaXMpKTsKKyAgICAgICAgdmFyIHByb3h5RWxl
bWVudCA9IHRoaXMuX3Byb21wdC5hdHRhY2hBbmRTdGFydEVkaXRpbmcoc2VsZWN0RWxlbWVudCwg
Ymx1ckxpc3RlbmVyLmJpbmQodGhpcywgY29udGV4dCkpOworCisgICAgICAgIHByb3h5RWxlbWVu
dC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5lZGl0aW5nTmFtZVZhbHVlS2V5RG93
bi5iaW5kKHRoaXMsIGNvbnRleHQpLCBmYWxzZSk7CisgICAgICAgIGlmIChpc0VkaXRpbmdOYW1l
KQorICAgICAgICAgICAgcHJveHlFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBhc3RlIiwgcGFz
dGVIYW5kbGVyLmJpbmQodGhpcywgY29udGV4dCkpOwogCi0gICAgICAgIHRoaXMuX3Byb21wdCA9
IG5ldyBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUuQ1NTUHJvcGVydHlQcm9tcHQoc2Vs
ZWN0RWxlbWVudCwgaXNFZGl0aW5nTmFtZSA/IFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5j
c3NOYW1lQ29tcGxldGlvbnMgOiBXZWJJbnNwZWN0b3IuQ1NTS2V5d29yZENvbXBsZXRpb25zLmZv
clByb3BlcnR5KHRoaXMubmFtZUVsZW1lbnQudGV4dENvbnRlbnQpKTsKICAgICAgICAgd2luZG93
LmdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRFeHRlbnQoc2VsZWN0RWxlbWVudCwgMCwgc2VsZWN0
RWxlbWVudCwgMSk7CiAgICAgfSwKIAotICAgIGVkaXRpbmdWYWx1ZUtleURvd246IGZ1bmN0aW9u
KGV2ZW50KQorICAgIGVkaXRpbmdOYW1lVmFsdWVLZXlEb3duOiBmdW5jdGlvbihjb250ZXh0LCBl
dmVudCkKICAgICB7CiAgICAgICAgIGlmIChldmVudC5oYW5kbGVkKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBpZiAodGhpcy5faGFuZGxlVXBPckRvd25LZXlQcmVzc2VkKGV2ZW50KSkK
KworICAgICAgICB2YXIgaXNFZGl0aW5nTmFtZSA9IGNvbnRleHQuaXNFZGl0aW5nTmFtZTsKKyAg
ICAgICAgdmFyIHJlc3VsdDsKKworICAgICAgICBmdW5jdGlvbiBzaG91bGRDb21taXRWYWx1ZVNl
bWljb2xvbih0ZXh0LCBjdXJzb3JQb3NpdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
RklYTUU6IHNob3VsZCB0aGlzIGFjY291bnQgZm9yIHNlbWljb2xvbnMgaW5zaWRlIGNvbW1lbnRz
PworICAgICAgICAgICAgdmFyIG9wZW5RdW90ZSA9ICIiOworICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBjdXJzb3JQb3NpdGlvbjsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIGNo
ID0gdGV4dFtpXTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICJcXCIgJiYgb3BlblF1b3Rl
ICE9PSAiIikKKyAgICAgICAgICAgICAgICAgICAgKytpOyAvLyBza2lwIG5leHQgY2hhcmFjdGVy
IGluc2lkZSBzdHJpbmcKKyAgICAgICAgICAgICAgICBlbHNlIGlmICghb3BlblF1b3RlICYmIChj
aCA9PT0gIlwiIiB8fCBjaCA9PT0gIiciKSkKKyAgICAgICAgICAgICAgICAgICAgb3BlblF1b3Rl
ID0gY2g7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAob3BlblF1b3RlID09PSBjaCkKKyAgICAg
ICAgICAgICAgICAgICAgb3BlblF1b3RlID0gIiI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gIW9wZW5RdW90ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiB0aGUg
IjoiLyI7IiBkZXRlY3Rpb24gZG9lcyBub3Qgd29yayBmb3Igbm9uLVVTIGxheW91dHMgZHVlIHRv
IHRoZSBldmVudCBiZWluZyBrZXlkb3duIHJhdGhlciB0aGFuIGtleXByZXNzLgorICAgICAgICB2
YXIgaXNGaWVsZElucHV0VGVybWluYXRlZCA9IChldmVudC5rZXlDb2RlID09PSBXZWJJbnNwZWN0
b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLlNlbWljb2xvbi5jb2RlKSAmJgorICAgICAgICAgICAg
KGlzRWRpdGluZ05hbWUgPyBldmVudC5zaGlmdEtleSA6ICghZXZlbnQuc2hpZnRLZXkgJiYgc2hv
dWxkQ29tbWl0VmFsdWVTZW1pY29sb24oZXZlbnQudGFyZ2V0LnRleHRDb250ZW50LCBldmVudC50
YXJnZXQuc2VsZWN0aW9uTGVmdE9mZnNldCkpKTsKKyAgICAgICAgaWYgKGlzRW50ZXJLZXkoZXZl
bnQpIHx8IGlzRmllbGRJbnB1dFRlcm1pbmF0ZWQpIHsKKyAgICAgICAgICAgIC8vIEVudGVyIG9y
IGNvbG9uIChmb3IgbmFtZSkvc2VtaWNvbG9uIG91dHNpZGUgb2Ygc3RyaW5nIChmb3IgdmFsdWUp
LgorICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgIHJlc3Vs
dCA9ICJmb3J3YXJkIjsKKyAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSBXZWJJ
bnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLkVzYy5jb2RlIHx8IGV2ZW50LmtleUlkZW50
aWZpZXIgPT09ICJVKzAwMUIiKQorICAgICAgICAgICAgcmVzdWx0ID0gImNhbmNlbCI7CisgICAg
ICAgIGVsc2UgaWYgKCFpc0VkaXRpbmdOYW1lICYmIHRoaXMuX25ld1Byb3BlcnR5ICYmIGV2ZW50
LmtleUNvZGUgPT09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuQmFja3NwYWNl
LmNvZGUpIHsKKyAgICAgICAgICAgIC8vIEZvciBhIG5ldyBwcm9wZXJ0eSwgd2hlbiBCYWNrc3Bh
Y2UgaXMgcHJlc3NlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIG5ldyBwcm9wZXJ0eSB2YWx1ZSwgbW92
ZSBiYWNrIHRvIHRoZSBwcm9wZXJ0eSBuYW1lLgorICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9
IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChzZWxlY3Rpb24uaXNDb2xs
YXBzZWQgJiYgIXNlbGVjdGlvbi5mb2N1c09mZnNldCkgeworICAgICAgICAgICAgICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gImJhY2t3YXJkIjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXlJZGVudGlmaWVyID09
PSAiVSswMDA5IikgeyAvLyBUYWIga2V5LgorICAgICAgICAgICAgcmVzdWx0ID0gZXZlbnQuc2hp
ZnRLZXkgPyAiYmFja3dhcmQiIDogImZvcndhcmQiOworICAgICAgICAgICAgZXZlbnQucHJldmVu
dERlZmF1bHQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgICAgICAgICBjYXNlICJjYW5jZWwiOgorICAgICAg
ICAgICAgICAgIHRoaXMuZWRpdGluZ0NhbmNlbGxlZChudWxsLCBjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgImZvcndhcmQiOgorICAgICAgICAgICAg
Y2FzZSAiYmFja3dhcmQiOgorICAgICAgICAgICAgICAgIHRoaXMuZWRpdGluZ0NvbW1pdHRlZChu
dWxsLCBldmVudC50YXJnZXQudGV4dENvbnRlbnQsIGNvbnRleHQucHJldmlvdXNDb250ZW50LCBj
b250ZXh0LCByZXN1bHQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQogCi0gICAgICAgIHRoaXMuX2FwcGx5RnJlZUZsb3dTdHlsZVRleHRFZGl0
KGZhbHNlKTsKKyAgICAgICAgaWYgKCFpc0VkaXRpbmdOYW1lKSB7CisgICAgICAgICAgICBpZiAo
dGhpcy5faGFuZGxlVXBPckRvd25LZXlQcmVzc2VkKGV2ZW50KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIHRoaXMuX2FwcGx5RnJlZUZsb3dTdHlsZVRleHRFZGl0KGZh
bHNlKTsKKyAgICAgICAgfQogICAgIH0sCiAKICAgICBfYXBwbHlGcmVlRmxvd1N0eWxlVGV4dEVk
aXQ6IGZ1bmN0aW9uKG5vdykKQEAgLTIwMjAsOCArMjA0OSwxMCBAQCBXZWJJbnNwZWN0b3IuU3R5
bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKIAogICAgICAgICAgICAgLy8gU3lu
dGhlc2l6ZSBwcm9wZXJ0eSB0ZXh0IGRpc3JlZ2FyZGluZyBhbnkgY29tbWVudHMsIGN1c3RvbSB3
aGl0ZXNwYWNlIGV0Yy4KICAgICAgICAgICAgIHRoaXMuYXBwbHlTdHlsZVRleHQodGhpcy5uYW1l
RWxlbWVudC50ZXh0Q29udGVudCArICI6ICIgKyB0aGlzLnZhbHVlRWxlbWVudC50ZXh0Q29udGVu
dCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fSwKIAogICAgIGVkaXRpbmdFbmRlZDogZnVuY3Rpb24oY29udGV4dCkKQEAgLTIwMzMsOCArMjA2
NCw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0g
ewogICAgICAgICBpZiAoY29udGV4dC5leHBhbmRlZCkKICAgICAgICAgICAgIHRoaXMuZXhwYW5k
KCk7CiAgICAgICAgIHZhciBlZGl0ZWRFbGVtZW50ID0gY29udGV4dC5pc0VkaXRpbmdOYW1lID8g
dGhpcy5uYW1lRWxlbWVudCA6IHRoaXMudmFsdWVFbGVtZW50OwotICAgICAgICBpZiAoIWNvbnRl
eHQuaXNFZGl0aW5nTmFtZSkKLSAgICAgICAgICAgIGVkaXRlZEVsZW1lbnQucmVtb3ZlRXZlbnRM
aXN0ZW5lcigia2V5ZG93biIsIGNvbnRleHQua2V5RG93bkxpc3RlbmVyLCBmYWxzZSk7CisgICAg
ICAgIC8vIFRoZSBwcm94eUVsZW1lbnQgaGFzIGJlZW4gZGVsZXRlZCwgbm8gbmVlZCB0byByZW1v
dmUgbGlzdGVuZXIuCiAgICAgICAgIGlmIChlZGl0ZWRFbGVtZW50LnBhcmVudEVsZW1lbnQpCiAg
ICAgICAgICAgICBlZGl0ZWRFbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygi
Y2hpbGQtZWRpdGluZyIpOwogCkBAIC0yMTc0LDcgKzIyMDQsNyBAQCBXZWJJbnNwZWN0b3IuU3R5
bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIC8vIEJV
RyA1MzI0Mi4gVGhpcyBjYW5ub3QgZ28gaW50byBlZGl0aW5nRW5kZWQoKSwgYXMgaXQgc2hvdWxk
IGFsd2F5cyBoYXBwZW4gZmlyc3QgZm9yIGFueSBlZGl0aW5nIG91dGNvbWUuCiAgICAgICAgIGlm
ICh0aGlzLl9wcm9tcHQpIHsKLSAgICAgICAgICAgIHRoaXMuX3Byb21wdC5yZW1vdmVGcm9tRWxl
bWVudCgpOworICAgICAgICAgICAgdGhpcy5fcHJvbXB0LmRldGFjaCgpOwogICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuX3Byb21wdDsKICAgICAgICAgfQogICAgIH0sCkBAIC0yMjAxLDYgKzIyMzEs
OSBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxQcm9wZXJ0eVRleHQgPSB0aGlzLnByb3BlcnR5LnBy
b3BlcnR5VGV4dDsKICAgICAgICAgfQogCisgICAgICAgIGlmICghdGhpcy50cmVlT3V0bGluZSkK
KyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICB2YXIgc2VjdGlvbiA9IHRoaXMudHJlZU91
dGxpbmUuc2VjdGlvbjsKICAgICAgICAgdmFyIGVsZW1lbnRzUGFuZWwgPSBXZWJJbnNwZWN0b3Iu
cGFuZWxzLmVsZW1lbnRzOwogICAgICAgICBzdHlsZVRleHQgPSBzdHlsZVRleHQucmVwbGFjZSgv
XHMvZywgIiAiKS50cmltKCk7IC8vIFJlcGxhY2UgJm5ic3A7IHdpdGggd2hpdGVzcGFjZS4KQEAg
LTIyNTYsMjEgKzIyODksMjYgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVu
dC5wcm90b3R5cGUuX19wcm90b19fID0gVHJlZUVsZW1lbnQucHJvdG90eXAKICAqIEBjb25zdHJ1
Y3RvcgogICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5UZXh0UHJvbXB0fQogICovCi1XZWJJbnNw
ZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUuQ1NTUHJvcGVydHlQcm9tcHQgPSBmdW5jdGlvbihlbGVt
ZW50LCBjc3NDb21wbGV0aW9ucykKK1dlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5DU1NQ
cm9wZXJ0eVByb21wdCA9IGZ1bmN0aW9uKGNzc0NvbXBsZXRpb25zLCB1cERvd25IYW5kbGVyKQog
ewotICAgIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LmNhbGwodGhpcywgZWxlbWVudCwgdGhpcy5f
YnVpbGRQcm9wZXJ0eUNvbXBsZXRpb25zLmJpbmQodGhpcyksIFdlYkluc3BlY3Rvci5TdHlsZXNT
aWRlYmFyUGFuZS5TdHlsZVZhbHVlRGVsaW1pdGVycywgdHJ1ZSk7CisgICAgV2ViSW5zcGVjdG9y
LlRleHRQcm9tcHQuY2FsbCh0aGlzLCB0aGlzLl9idWlsZFByb3BlcnR5Q29tcGxldGlvbnMuYmlu
ZCh0aGlzKSwgV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lLlN0eWxlVmFsdWVEZWxpbWl0
ZXJzKTsKICAgICB0aGlzLl9jc3NDb21wbGV0aW9ucyA9IGNzc0NvbXBsZXRpb25zOworICAgIHRo
aXMuX3VwRG93bkhhbmRsZXIgPSB1cERvd25IYW5kbGVyOwogfQogCiBXZWJJbnNwZWN0b3IuU3R5
bGVzU2lkZWJhclBhbmUuQ1NTUHJvcGVydHlQcm9tcHQucHJvdG90eXBlID0gewogICAgIHVwS2V5
UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLl9oYW5kbGVOYW1l
T3JWYWx1ZVVwRG93bihldmVudCk7CisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9LAogCiAgICAgZG93bktleVByZXNzZWQ6IGZ1bmN0
aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgdGhpcy5faGFuZGxlTmFtZU9yVmFsdWVVcERvd24o
ZXZlbnQpOworICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfSwKIAogICAgIHRhYktleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQpAQCAt
MjI4MCw2ICsyMzE4LDkgQEAgV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lLkNTU1Byb3Bl
cnR5UHJvbXB0LnByb3RvdHlwZSA9IHsKIAogICAgIF9oYW5kbGVOYW1lT3JWYWx1ZVVwRG93bjog
ZnVuY3Rpb24oZXZlbnQpCiAgICAgeworICAgICAgICBpZiAodGhpcy5fdXBEb3duSGFuZGxlcihl
dmVudCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgICAgICB2YXIgcmV2ZXJzZSA9
IGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJVcCI7CiAgICAgICAgIGlmICh0aGlzLmF1dG9Db21w
bGV0ZUVsZW1lbnQpCiAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlKGZhbHNlLCByZXZlcnNlKTsg
Ly8gQWNjZXB0IHRoZSBjdXJyZW50IHN1Z2dlc3Rpb24sIGlmIGFueS4KQEAgLTIyODksNyArMjMz
MCw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5DU1NQcm9wZXJ0eVByb21wdC5w
cm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLmNvbXBsZXRlKGZhbHNlLCBy
ZXZlcnNlKTsgLy8gQWN0dWFsbHkgaW5jcmVtZW50L2RlY3JlbWVudCB0aGUgc3VnZ2VzdGlvbi4K
LSAgICAgICAgZXZlbnQuaGFuZGxlZCA9IHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0sCiAKICAgICBfc2VsZWN0Q3VycmVudFdvcmRTdWZmaXg6IGZ1bmN0aW9uKCkKQEAgLTIyOTks
OSArMjM0MCw5IEBAIFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5DU1NQcm9wZXJ0eVBy
b21wdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdmFyIHNl
bGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7Ci0gICAgICAgIGlmICghc2Vs
ZWN0aW9uUmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIuaXNEZXNjZW5kYW50KHRoaXMuZWxl
bWVudCkpCisgICAgICAgIGlmICghc2VsZWN0aW9uUmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWlu
ZXIuaXNEZXNjZW5kYW50KHRoaXMuX2VsZW1lbnQpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB2YXIgd29yZFN1ZmZpeFJhbmdlID0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRDb250YWluZXIu
cmFuZ2VPZldvcmQoc2VsZWN0aW9uUmFuZ2Uuc3RhcnRPZmZzZXQsIFdlYkluc3BlY3Rvci5TdHls
ZXNTaWRlYmFyUGFuZS5TdHlsZVZhbHVlRGVsaW1pdGVycywgdGhpcy5lbGVtZW50LCAiZm9yd2Fy
ZCIpOworICAgICAgICB2YXIgd29yZFN1ZmZpeFJhbmdlID0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRD
b250YWluZXIucmFuZ2VPZldvcmQoc2VsZWN0aW9uUmFuZ2Uuc3RhcnRPZmZzZXQsIFdlYkluc3Bl
Y3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5TdHlsZVZhbHVlRGVsaW1pdGVycywgdGhpcy5fZWxlbWVu
dCwgImZvcndhcmQiKTsKICAgICAgICAgaWYgKCF3b3JkU3VmZml4UmFuZ2UudG9TdHJpbmcoKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0UHJv
bXB0LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0UHJvbXB0Lmpz
CmluZGV4IGZkMGRiYjAuLjk3Yjc2OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvVGV4dFByb21wdC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1RleHRQcm9tcHQuanMKQEAgLTI4LDY4ICsyOCwxNzMgQEAKIAogLyoqCiAg
KiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7Ym9vbGVhbj19IG9taXRIaXN0b3J5CisgKiBAcGFy
YW0ge2Z1bmN0aW9uKFJhbmdlLCBib29sZWFuLCBmdW5jdGlvbigqKSl9IGNvbXBsZXRpb25zCisg
KiBAcGFyYW0ge3N0cmluZ30gc3RvcENoYXJhY3RlcnMKKyAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LlRleHRQcm9tcHRDb25maWc9fSBjb25maWcKICAqLwotV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQg
PSBmdW5jdGlvbihlbGVtZW50LCBjb21wbGV0aW9ucywgc3RvcENoYXJhY3RlcnMsIG9taXRIaXN0
b3J5KQorV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQgPSBmdW5jdGlvbihjb21wbGV0aW9ucywgc3Rv
cENoYXJhY3RlcnMsIGNvbmZpZykKIHsKLSAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50OwotICAg
IHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJ0ZXh0LXByb21wdCIpOwotICAgIHRoaXMuY29t
cGxldGlvbnMgPSBjb21wbGV0aW9uczsKLSAgICB0aGlzLmNvbXBsZXRpb25TdG9wQ2hhcmFjdGVy
cyA9IHN0b3BDaGFyYWN0ZXJzOwotICAgIGlmICghb21pdEhpc3RvcnkpIHsKLSAgICAgICAgdGhp
cy5oaXN0b3J5ID0gW107Ci0gICAgICAgIHRoaXMuaGlzdG9yeU9mZnNldCA9IDA7Ci0gICAgfQot
ICAgIHRoaXMuX2JvdW5kT25LZXlEb3duID0gdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyk7Ci0g
ICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9ib3VuZE9u
S2V5RG93biwgdHJ1ZSk7CisgICAgLyoqCisgICAgICogQHR5cGUge0VsZW1lbnR8dW5kZWZpbmVk
fQorICAgICAqLworICAgIHRoaXMuX3Byb3h5RWxlbWVudDsKKyAgICB0aGlzLl9sb2FkQ29tcGxl
dGlvbnMgPSBjb21wbGV0aW9uczsKKyAgICB0aGlzLl9jb21wbGV0aW9uU3RvcENoYXJhY3RlcnMg
PSBzdG9wQ2hhcmFjdGVyczsKKyAgICB0aGlzLl9jb25maWcgPSBjb25maWcgfHwgbmV3IFdlYklu
c3BlY3Rvci5UZXh0UHJvbXB0Q29uZmlnKCk7CiB9CiAKIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0
LnByb3RvdHlwZSA9IHsKKyAgICBnZXQgcHJveHlFbGVtZW50KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9wcm94eUVsZW1lbnQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIENsaWVu
dHMgc2hvdWxkIG5ldmVyIGF0dGFjaCBhbnkgZXZlbnQgbGlzdGVuZXJzIHRvIHRoZSB8ZWxlbWVu
dHwuIEluc3RlYWQsCisgICAgICogdGhleSBzaG91bGQgdXNlIHRoZSByZXN1bHQgb2YgdGhpcyBt
ZXRob2QgdG8gYXR0YWNoIGxpc3RlbmVycyBmb3IgYnViYmxpbmcgZXZlbnRzLgorICAgICAqCisg
ICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50CisgICAgICovCisgICAgYXR0YWNoOiBmdW5j
dGlvbihlbGVtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFjaEludGVybmFs
KGVsZW1lbnQpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBDbGllbnRzIHNob3VsZCBuZXZl
ciBhdHRhY2ggYW55IGV2ZW50IGxpc3RlbmVycyB0byB0aGUgfGVsZW1lbnR8LiBJbnN0ZWFkLAor
ICAgICAqIHRoZXkgc2hvdWxkIHVzZSB0aGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kIHRvIGF0dGFj
aCBsaXN0ZW5lcnMgZm9yIGJ1YmJsaW5nIGV2ZW50cworICAgICAqIG9yIHRoZSB8Ymx1ckxpc3Rl
bmVyfCBwYXJhbWV0ZXIgdG8gcmVnaXN0ZXIgYSAiYmx1ciIgZXZlbnQgbGlzdGVuZXIgb24gdGhl
IHxlbGVtZW50fAorICAgICAqIChzaW5jZSB0aGUgImJsdXIiIGV2ZW50IGRvZXMgbm90IGJ1YmJs
ZS4pCisgICAgICoKKyAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQKKyAgICAgKi8KKyAg
ICBhdHRhY2hBbmRTdGFydEVkaXRpbmc6IGZ1bmN0aW9uKGVsZW1lbnQsIGJsdXJMaXN0ZW5lcikK
KyAgICB7CisgICAgICAgIHRoaXMuX2F0dGFjaEludGVybmFsKGVsZW1lbnQpOworICAgICAgICB0
aGlzLl9zdGFydEVkaXRpbmcoYmx1ckxpc3RlbmVyKTsKKyAgICAgICAgcmV0dXJuIHRoaXMucHJv
eHlFbGVtZW50OworICAgIH0sCisKKyAgICBfYXR0YWNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVsZW1l
bnQpCisgICAgeworICAgICAgICBpZiAodGhpcy5wcm94eUVsZW1lbnQpCisgICAgICAgICAgICB0
aHJvdyAiQ2Fubm90IGF0dGFjaCBhbiBhdHRhY2hlZCBUZXh0UHJvbXB0IjsKKyAgICAgICAgdGhp
cy5fZWxlbWVudCA9IGVsZW1lbnQ7CisKKyAgICAgICAgdGhpcy5fYm91bmRPbktleURvd24gPSB0
aGlzLl9vbktleURvd24uYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5fYm91bmRTZWxlY3RTdGFy
dCA9IHRoaXMuX3NlbGVjdFN0YXJ0LmJpbmQodGhpcyk7CisgICAgICAgIHRoaXMuX3Byb3h5RWxl
bWVudCA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAg
ICAgIHRoaXMuX3Byb3h5RWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gImlubGluZS1ibG9jayI7Cisg
ICAgICAgIGVsZW1lbnQucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5wcm94eUVsZW1l
bnQsIGVsZW1lbnQpOworICAgICAgICB0aGlzLnByb3h5RWxlbWVudC5hcHBlbmRDaGlsZChlbGVt
ZW50KTsKKyAgICAgICAgdGhpcy5fZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJ0ZXh0LXByb21wdCIp
OworICAgICAgICB0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlz
Ll9ib3VuZE9uS2V5RG93biwgdHJ1ZSk7CisgICAgICAgIHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcigic2VsZWN0c3RhcnQiLCB0aGlzLl9zZWxlY3RTdGFydC5iaW5kKHRoaXMpLCBmYWxz
ZSk7CisgICAgICAgIHJldHVybiB0aGlzLnByb3h5RWxlbWVudDsKKyAgICB9LAorCisgICAgZGV0
YWNoOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9yZW1vdmVGcm9tRWxlbWVudCgp
OworICAgICAgICB0aGlzLnByb3h5RWxlbWVudC5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0
aGlzLl9lbGVtZW50LCB0aGlzLnByb3h5RWxlbWVudCk7CisgICAgICAgIHRoaXMucHJveHlFbGVt
ZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5wcm94eUVsZW1lbnQpOworICAgICAg
ICBkZWxldGUgdGhpcy5fcHJveHlFbGVtZW50OworICAgICAgICBpZiAodGhpcy5fZWxlbWVudCA9
PT0gV2ViSW5zcGVjdG9yLmN1cnJlbnRGb2N1c0VsZW1lbnQgfHwgdGhpcy5fZWxlbWVudC5pc0Fu
Y2VzdG9yKFdlYkluc3BlY3Rvci5jdXJyZW50Rm9jdXNFbGVtZW50KSkKKyAgICAgICAgICAgIFdl
Ykluc3BlY3Rvci5jdXJyZW50Rm9jdXNFbGVtZW50ID0gV2ViSW5zcGVjdG9yLnByZXZpb3VzRm9j
dXNFbGVtZW50OworICAgIH0sCisKICAgICBnZXQgdGV4dCgpCiAgICAgewotICAgICAgICByZXR1
cm4gdGhpcy5lbGVtZW50LnRleHRDb250ZW50OworICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVu
dC50ZXh0Q29udGVudDsKICAgICB9LAogCiAgICAgc2V0IHRleHQoeCkKICAgICB7CisgICAgICAg
IHRoaXMuY2xlYXJBdXRvQ29tcGxldGUodHJ1ZSk7CiAgICAgICAgIGlmICgheCkgewogICAgICAg
ICAgICAgLy8gQXBwZW5kIGEgYnJlYWsgZWxlbWVudCBpbnN0ZWFkIG9mIHNldHRpbmcgdGV4dENv
bnRlbnQgdG8gbWFrZSBzdXJlIHRoZSBzZWxlY3Rpb24gaXMgaW5zaWRlIHRoZSBwcm9tcHQuCi0g
ICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgIHRo
aXMuZWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKKyAg
ICAgICAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIHRo
aXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7CiAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGhpcy5lbGVtZW50LnRleHRDb250ZW50ID0geDsK
KyAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQudGV4dENvbnRlbnQgPSB4OwogCiAgICAgICAgIHRo
aXMubW92ZUNhcmV0VG9FbmRPZlByb21wdCgpOworICAgICAgICB0aGlzLl9lbGVtZW50LnNjcm9s
bEludG9WaWV3KCk7CiAgICAgfSwKIAotICAgIHJlbW92ZUZyb21FbGVtZW50OiBmdW5jdGlvbigp
CisgICAgX3JlbW92ZUZyb21FbGVtZW50OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlz
LmNsZWFyQXV0b0NvbXBsZXRlKHRydWUpOwotICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZl
bnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuX2JvdW5kT25LZXlEb3duLCB0cnVlKTsKKyAgICAg
ICAgdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fYm91
bmRPbktleURvd24sIGZhbHNlKTsKKyAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExp
c3RlbmVyKCJzZWxlY3RzdGFydCIsIHRoaXMuX2JvdW5kU2VsZWN0U3RhcnQsIGZhbHNlKTsKKyAg
ICAgICAgaWYgKHRoaXMuX2lzRWRpdGluZykKKyAgICAgICAgICAgIHRoaXMuX3N0b3BFZGl0aW5n
KCk7CiAgICAgfSwKIAotICAgIF9vbktleURvd246IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9zdGFy
dEVkaXRpbmc6IGZ1bmN0aW9uKGJsdXJMaXN0ZW5lcikKKyAgICB7CisgICAgICAgIGlmICghV2Vi
SW5zcGVjdG9yLm1hcmtCZWluZ0VkaXRlZCh0aGlzLl9lbGVtZW50LCB0cnVlKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5faXNFZGl0aW5nID0gdHJ1ZTsKKyAgICAgICAgdGhp
cy5fZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJlZGl0aW5nIik7CisgICAgICAgIGlmIChibHVyTGlz
dGVuZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX2JsdXJMaXN0ZW5lciA9IGJsdXJMaXN0ZW5lcjsK
KyAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsIHRoaXMu
X2JsdXJMaXN0ZW5lciwgZmFsc2UpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX29sZFRhYklu
ZGV4ID0gdGhpcy5fZWxlbWVudC50YWJJbmRleDsKKyAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQu
dGFiSW5kZXggPCAwKQorICAgICAgICAgICAgdGhpcy5fZWxlbWVudC50YWJJbmRleCA9IDA7Cisg
ICAgICAgIFdlYkluc3BlY3Rvci5jdXJyZW50Rm9jdXNFbGVtZW50ID0gdGhpcy5fZWxlbWVudDsK
KyAgICB9LAorCisgICAgX3N0b3BFZGl0aW5nOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0
aGlzLl9lbGVtZW50LnRhYkluZGV4ID0gdGhpcy5fb2xkVGFiSW5kZXg7CisgICAgICAgIGlmICh0
aGlzLl9ibHVyTGlzdGVuZXIpCisgICAgICAgICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUV2ZW50
TGlzdGVuZXIoImJsdXIiLCB0aGlzLl9ibHVyTGlzdGVuZXIsIGZhbHNlKTsKKyAgICAgICAgdGhp
cy5fZWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJlZGl0aW5nIik7CisgICAgICAgIGRlbGV0ZSB0
aGlzLl9pc0VkaXRpbmc7CisgICAgICAgIFdlYkluc3BlY3Rvci5tYXJrQmVpbmdFZGl0ZWQodGhp
cy5fZWxlbWVudCwgZmFsc2UpOworICAgIH0sCisKKyAgICBfc2VsZWN0U3RhcnQ6IGZ1bmN0aW9u
KGV2ZW50KQogICAgIHsKLSAgICAgICAgZnVuY3Rpb24gZGVmYXVsdEFjdGlvbigpCisgICAgICAg
IGlmICh0aGlzLl9zZWxlY3Rpb25UaW1lb3V0KQorICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRo
aXMuX3NlbGVjdGlvblRpbWVvdXQpOworCisgICAgICAgIHRoaXMuY2xlYXJBdXRvQ29tcGxldGUo
KTsKKworICAgICAgICBmdW5jdGlvbiBtb3ZlQmFja0lmT3V0c2lkZSgpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHRoaXMuY2xlYXJBdXRvQ29tcGxldGUoKTsKKyAgICAgICAgICAgIGRlbGV0ZSB0
aGlzLl9zZWxlY3Rpb25UaW1lb3V0OworICAgICAgICAgICAgaWYgKCF0aGlzLmlzQ2FyZXRJbnNp
ZGVQcm9tcHQoKSAmJiB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpCisgICAgICAg
ICAgICAgICAgdGhpcy5tb3ZlQ2FyZXRUb0VuZE9mUHJvbXB0KCk7CiAgICAgICAgICAgICB0aGlz
LmF1dG9Db21wbGV0ZVNvb24oKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChldmVudC5oYW5k
bGVkKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLl9zZWxlY3Rpb25UaW1lb3V0
ID0gc2V0VGltZW91dChtb3ZlQmFja0lmT3V0c2lkZS5iaW5kKHRoaXMpLCAxMDApOworICAgIH0s
CiAKKyAgICBkZWZhdWx0S2V5SGFuZGxlcjogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAg
ICB0aGlzLmNsZWFyQXV0b0NvbXBsZXRlKCk7CisgICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlU29v
bigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSwKKworICAgIF9vbktleURvd246IGZ1
bmN0aW9uKGV2ZW50KQorICAgIHsKICAgICAgICAgdmFyIGhhbmRsZWQgPSBmYWxzZTsKIAogICAg
ICAgICBzd2l0Y2ggKGV2ZW50LmtleUlkZW50aWZpZXIpIHsKICAgICAgICAgICAgIGNhc2UgIlVw
IjoKLSAgICAgICAgICAgICAgICB0aGlzLnVwS2V5UHJlc3NlZChldmVudCk7CisgICAgICAgICAg
ICAgICAgaGFuZGxlZCA9IHRoaXMudXBLZXlQcmVzc2VkKGV2ZW50KTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgIkRvd24iOgotICAgICAgICAgICAgICAgIHRoaXMu
ZG93bktleVByZXNzZWQoZXZlbnQpOworICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0aGlzLmRv
d25LZXlQcmVzc2VkKGV2ZW50KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgIlUrMDAwOSI6IC8vIFRhYgotICAgICAgICAgICAgICAgIHRoaXMudGFiS2V5UHJlc3Nl
ZChldmVudCk7CisgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRoaXMudGFiS2V5UHJlc3NlZChl
dmVudCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICJSaWdodCI6
CiAgICAgICAgICAgICBjYXNlICJFbmQiOgpAQCAtMTAxLDMwICsyMDYsMTIgQEAgV2ViSW5zcGVj
dG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewogICAgICAgICAgICAgY2FzZSAiU2hpZnQiOgog
ICAgICAgICAgICAgY2FzZSAiQ29udHJvbCI6CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlICJVKzAwNTAiOiAvLyBDdHJsK1AgPSBQcmV2aW91cwotICAgICAgICAgICAg
ICAgIGlmICh0aGlzLmhpc3RvcnkgJiYgV2ViSW5zcGVjdG9yLmlzTWFjKCkgJiYgZXZlbnQuY3Ry
bEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuYWx0S2V5ICYmICFldmVudC5zaGlmdEtl
eSkgewotICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fbW92ZUJhY2tJbkhpc3RvcnkoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlZmF1bHRBY3Rpb24uY2Fs
bCh0aGlzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgIlUrMDA0
RSI6IC8vIEN0cmwrTiA9IE5leHQKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5oaXN0b3J5ICYm
IFdlYkluc3BlY3Rvci5pc01hYygpICYmIGV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50Lm1ldGFLZXkg
JiYgIWV2ZW50LmFsdEtleSAmJiAhZXZlbnQuc2hpZnRLZXkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVGb3J3YXJk
SW5IaXN0b3J5KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBkZWZhdWx0QWN0aW9uLmNhbGwodGhpcyk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGRlZmF1
bHRBY3Rpb24uY2FsbCh0aGlzKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVkID0gdGhpcy5kZWZh
dWx0S2V5SGFuZGxlcihldmVudCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
Ci0gICAgICAgIGhhbmRsZWQgfD0gZXZlbnQuaGFuZGxlZDsKICAgICAgICAgaWYgKGhhbmRsZWQp
IHsKLSAgICAgICAgICAgIGV2ZW50LmhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgZXZlbnQu
cHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwog
ICAgICAgICB9CkBAIC0xNzIsNyArMjU5LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJv
dG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHRoaXMuX3VzZXJFbnRl
cmVkUmFuZ2UuZGVsZXRlQ29udGVudHMoKTsKLSAgICAgICAgdGhpcy5lbGVtZW50LnBydW5lRW1w
dHlUZXh0Tm9kZXMoKTsKKyAgICAgICAgdGhpcy5fZWxlbWVudC5wcnVuZUVtcHR5VGV4dE5vZGVz
KCk7CiAKICAgICAgICAgdmFyIHVzZXJUZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KHRoaXMuX3VzZXJFbnRlcmVkVGV4dCk7CiAgICAgICAgIHRoaXMuX3VzZXJFbnRlcmVkUmFuZ2Uu
aW5zZXJ0Tm9kZSh1c2VyVGV4dE5vZGUpOwpAQCAtMjAzLDE3ICsyOTAsMTcgQEAgV2ViSW5zcGVj
dG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgIHZhciBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwotICAgICAg
ICB2YXIgaXNFbXB0eUlucHV0ID0gc2VsZWN0aW9uUmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWlu
ZXIgPT09IHRoaXMuZWxlbWVudDsgLy8gdGhpcy5lbGVtZW50IGhhcyBubyBjaGlsZCBUZXh0IG5v
ZGVzLgorICAgICAgICB2YXIgaXNFbXB0eUlucHV0ID0gc2VsZWN0aW9uUmFuZ2UuY29tbW9uQW5j
ZXN0b3JDb250YWluZXIgPT09IHRoaXMuX2VsZW1lbnQ7IC8vIHRoaXMuX2VsZW1lbnQgaGFzIG5v
IGNoaWxkIFRleHQgbm9kZXMuCiAKICAgICAgICAgLy8gRG8gbm90IGF0dGVtcHQgdG8gYXV0by1j
b21wbGV0ZSBhbiBlbXB0eSBpbnB1dCBpbiB0aGUgYXV0byBtb2RlIChvbmx5IG9uIGRlbWFuZCku
CiAgICAgICAgIGlmIChhdXRvICYmIGlzRW1wdHlJbnB1dCkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgaWYgKCFhdXRvICYmICFpc0VtcHR5SW5wdXQgJiYgIXNlbGVjdGlvblJhbmdlLmNv
bW1vbkFuY2VzdG9yQ29udGFpbmVyLmlzRGVzY2VuZGFudCh0aGlzLmVsZW1lbnQpKQorICAgICAg
ICBpZiAoIWF1dG8gJiYgIWlzRW1wdHlJbnB1dCAmJiAhc2VsZWN0aW9uUmFuZ2UuY29tbW9uQW5j
ZXN0b3JDb250YWluZXIuaXNEZXNjZW5kYW50KHRoaXMuX2VsZW1lbnQpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBpZiAoYXV0byAmJiAhdGhpcy5pc0NhcmV0QXRFbmRPZlByb21wdCgp
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgd29yZFByZWZpeFJhbmdlID0gc2Vs
ZWN0aW9uUmFuZ2Uuc3RhcnRDb250YWluZXIucmFuZ2VPZldvcmQoc2VsZWN0aW9uUmFuZ2Uuc3Rh
cnRPZmZzZXQsIHRoaXMuY29tcGxldGlvblN0b3BDaGFyYWN0ZXJzLCB0aGlzLmVsZW1lbnQsICJi
YWNrd2FyZCIpOwotICAgICAgICB0aGlzLmNvbXBsZXRpb25zKHdvcmRQcmVmaXhSYW5nZSwgYXV0
bywgdGhpcy5fY29tcGxldGlvbnNSZWFkeS5iaW5kKHRoaXMsIHNlbGVjdGlvbiwgYXV0bywgd29y
ZFByZWZpeFJhbmdlLCByZXZlcnNlKSk7CisgICAgICAgIHZhciB3b3JkUHJlZml4UmFuZ2UgPSBz
ZWxlY3Rpb25SYW5nZS5zdGFydENvbnRhaW5lci5yYW5nZU9mV29yZChzZWxlY3Rpb25SYW5nZS5z
dGFydE9mZnNldCwgdGhpcy5fY29tcGxldGlvblN0b3BDaGFyYWN0ZXJzLCB0aGlzLl9lbGVtZW50
LCAiYmFja3dhcmQiKTsKKyAgICAgICAgdGhpcy5fbG9hZENvbXBsZXRpb25zKHdvcmRQcmVmaXhS
YW5nZSwgYXV0bywgdGhpcy5fY29tcGxldGlvbnNSZWFkeS5iaW5kKHRoaXMsIHNlbGVjdGlvbiwg
YXV0bywgd29yZFByZWZpeFJhbmdlLCByZXZlcnNlKSk7CiAgICAgfSwKIAogICAgIF9jb21wbGV0
aW9uc1JlYWR5OiBmdW5jdGlvbihzZWxlY3Rpb24sIGF1dG8sIG9yaWdpbmFsV29yZFByZWZpeFJh
bmdlLCByZXZlcnNlLCBjb21wbGV0aW9ucykKQEAgLTI3OCw3ICszNjUsNyBAQCBXZWJJbnNwZWN0
b3IuVGV4dFByb21wdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3VzZXJFbnRlcmVkVGV4
dCA9IGZ1bGxXb3JkUmFuZ2UudG9TdHJpbmcoKTsKIAogICAgICAgICBmdWxsV29yZFJhbmdlLmRl
bGV0ZUNvbnRlbnRzKCk7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5wcnVuZUVtcHR5VGV4dE5vZGVz
KCk7CisgICAgICAgIHRoaXMuX2VsZW1lbnQucHJ1bmVFbXB0eVRleHROb2RlcygpOwogCiAgICAg
ICAgIHZhciBmaW5hbFNlbGVjdGlvblJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKIApA
QCAtMzE1LDcgKzQwMiw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsK
IAogICAgIGlzQ2FyZXRJbnNpZGVQcm9tcHQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLmVsZW1lbnQuaXNJbnNlcnRpb25DYXJldEluc2lkZSgpOworICAgICAgICByZXR1
cm4gdGhpcy5fZWxlbWVudC5pc0luc2VydGlvbkNhcmV0SW5zaWRlKCk7CiAgICAgfSwKIAogICAg
IGlzQ2FyZXRBdEVuZE9mUHJvbXB0OiBmdW5jdGlvbigpCkBAIC0zMjYsNyArNDEzLDcgQEAgV2Vi
SW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewogCiAgICAgICAgIHZhciBzZWxlY3Rp
b25SYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgICAgICB2YXIgbm9kZSA9IHNl
bGVjdGlvblJhbmdlLnN0YXJ0Q29udGFpbmVyOwotICAgICAgICBpZiAobm9kZSAhPT0gdGhpcy5l
bGVtZW50ICYmICFub2RlLmlzRGVzY2VuZGFudCh0aGlzLmVsZW1lbnQpKQorICAgICAgICBpZiAo
bm9kZSAhPT0gdGhpcy5fZWxlbWVudCAmJiAhbm9kZS5pc0Rlc2NlbmRhbnQodGhpcy5fZWxlbWVu
dCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKG5vZGUubm9kZVR5
cGUgPT09IE5vZGUuVEVYVF9OT0RFICYmIHNlbGVjdGlvblJhbmdlLnN0YXJ0T2Zmc2V0IDwgbm9k
ZS5ub2RlVmFsdWUubGVuZ3RoKQpAQCAtMzQwLDcgKzQyNyw3IEBAIFdlYkluc3BlY3Rvci5UZXh0
UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBmb3VuZE5leHRUZXh0ID0gdHJ1
ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0
Tm9kZSh0aGlzLmVsZW1lbnQpOworICAgICAgICAgICAgbm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0
Tm9kZSh0aGlzLl9lbGVtZW50KTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMzUwLDcgKzQzNyw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsK
ICAgICB7CiAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAg
ICAgICAgIHZhciBmb2N1c05vZGUgPSBzZWxlY3Rpb24uZm9jdXNOb2RlOwotICAgICAgICBpZiAo
IWZvY3VzTm9kZSB8fCBmb2N1c05vZGUubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFIHx8IGZv
Y3VzTm9kZS5wYXJlbnROb2RlICE9PSB0aGlzLmVsZW1lbnQpCisgICAgICAgIGlmICghZm9jdXNO
b2RlIHx8IGZvY3VzTm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUgfHwgZm9jdXNOb2Rl
LnBhcmVudE5vZGUgIT09IHRoaXMuX2VsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgICAgICBpZiAoZm9jdXNOb2RlLnRleHRDb250ZW50LnN1YnN0cmluZygwLCBzZWxlY3Rp
b24uZm9jdXNPZmZzZXQpLmluZGV4T2YoIlxuIikgIT09IC0xKQpAQCAtMzcyLDcgKzQ1OSw3IEBA
IFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHZh
ciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgIHZhciBmb2N1c05v
ZGUgPSBzZWxlY3Rpb24uZm9jdXNOb2RlOwotICAgICAgICBpZiAoIWZvY3VzTm9kZSB8fCBmb2N1
c05vZGUubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFIHx8IGZvY3VzTm9kZS5wYXJlbnROb2Rl
ICE9PSB0aGlzLmVsZW1lbnQpCisgICAgICAgIGlmICghZm9jdXNOb2RlIHx8IGZvY3VzTm9kZS5u
b2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUgfHwgZm9jdXNOb2RlLnBhcmVudE5vZGUgIT09IHRo
aXMuX2VsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICBpZiAoZm9j
dXNOb2RlLnRleHRDb250ZW50LnN1YnN0cmluZyhzZWxlY3Rpb24uZm9jdXNPZmZzZXQpLmluZGV4
T2YoIlxuIikgIT09IC0xKQpAQCAtMzk1LDgzICs0ODIsMjA4IEBAIFdlYkluc3BlY3Rvci5UZXh0
UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRT
ZWxlY3Rpb24oKTsKICAgICAgICAgdmFyIHNlbGVjdGlvblJhbmdlID0gZG9jdW1lbnQuY3JlYXRl
UmFuZ2UoKTsKIAotICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5lbGVtZW50LmNoaWxkTm9kZXMu
bGVuZ3RoOwotICAgICAgICBzZWxlY3Rpb25SYW5nZS5zZXRTdGFydCh0aGlzLmVsZW1lbnQsIG9m
ZnNldCk7Ci0gICAgICAgIHNlbGVjdGlvblJhbmdlLnNldEVuZCh0aGlzLmVsZW1lbnQsIG9mZnNl
dCk7CisgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl9lbGVtZW50LmNoaWxkTm9kZXMubGVuZ3Ro
OworICAgICAgICBzZWxlY3Rpb25SYW5nZS5zZXRTdGFydCh0aGlzLl9lbGVtZW50LCBvZmZzZXQp
OworICAgICAgICBzZWxlY3Rpb25SYW5nZS5zZXRFbmQodGhpcy5fZWxlbWVudCwgb2Zmc2V0KTsK
IAogICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgIHNlbGVjdGlv
bi5hZGRSYW5nZShzZWxlY3Rpb25SYW5nZSk7CiAgICAgfSwKIAotICAgIHRhYktleVByZXNzZWQ6
IGZ1bmN0aW9uKGV2ZW50KQorICAgIHVwS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAg
ewotICAgICAgICBldmVudC5oYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5jb21wbGV0ZShm
YWxzZSwgZXZlbnQuc2hpZnRLZXkpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSwKIAot
ICAgIHVwS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgZG93bktleVByZXNzZWQ6IGZ1
bmN0aW9uKGV2ZW50KQogICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLmlzQ2FyZXRPbkZpcnN0TGlu
ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGV2ZW50LmhhbmRsZWQgPSB0cnVl
OwotICAgICAgICB0aGlzLl9tb3ZlQmFja0luSGlzdG9yeSgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfSwKIAotICAgIGRvd25LZXlQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKKyAgICB0
YWJLZXlQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIGlmICghdGhpcy5p
c0NhcmV0T25MYXN0TGluZSgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLmNv
bXBsZXRlKGZhbHNlLCBldmVudC5zaGlmdEtleSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KK30KKworLyoqCisgKiBUaGlzIGNvbmZpZyBzcGVjaWZpZXMgdGhlIFRleHRQcm9tcHQgYmVo
YXZpb3IgZHVyaW5nIGFuIGVkaXRpbmcgc2Vzc2lvbi4gVGhlIGRlZmF1bHQgYmVoYXZpb3IgaW5j
bHVkZXM6CisgKiAtICJUYWIiIGFjY2VwdHMgc3VnZ2VzdGlvbiAoaWYgdGhlcmUgaXMgb25lKSwg
b3RoZXJ3aXNlIGNvbW1pdHMgdGhlIGVkaXRvciBhbmQgdHJhdmVyc2VzIHRvIHRoZSBuZXh0IGZp
ZWxkICgibW92ZS1mb3J3YXJkIiBmb3Igc3RhcnRFZGl0aW5nKCkpLgorICogLSAiRW50ZXIiIGFj
Y2VwdHMgc3VnZ2VzdGlvbiAoaWYgdGhlcmUgaXMgb25lKSwgb3RoZXJ3aXNlIGNvbW1pdHMgdGhl
IGVkaXRvciAoImNvbW1pdCIgZm9yIHN0YXJ0RWRpdGluZygpKS4KKyAqIC0gIlVwIi8iRG93biIg
c2Nyb2xsIHRocm91Z2ggc3VnZ2VzdGlvbnMgKGlmIHRoZXJlIGFyZSBhbnkpLCBvdGhlcndpc2Ug
c2Nyb2xsIHRocm91Z2ggdGhlIGhpc3RvcnkgKGlmIHRoZXJlIGlzIG9uZSBbYW5kIHRoZSBjdXJz
b3IKKyAqICAgaXMgb24gdGhlIGZpcnN0L2xhc3QgbGluZSBvZiBhIG11bHRpbGluZSBlZGl0b3Jd
LCBvdGhlcndpc2UgbW92ZSBiZXR3ZWVuIGxpbmVzIG9mIGEgbXVsdGlsaW5lIGVkaXRvciksIG90
aGVyd2lzZSBkbyBub3RoaW5nLgorICogLSBFcXVhbCBlbnRyaWVzIGluIHRoZSBoaXN0b3J5IGFy
ZSBjb2FsZXNjZWQuCisgKiBAY29uc3RydWN0b3IKKyAqLworV2ViSW5zcGVjdG9yLlRleHRQcm9t
cHRDb25maWcgPSBmdW5jdGlvbigpCit7CisgICAgLyoqCisgICAgICogV2hldGhlciB0byBhY2Nl
cHQgYSBzdWdnZXN0aW9uIEFORCBjb21taXQgb24gVGFiLgorICAgICAqIEB0eXBlIHtib29sZWFu
fQorICAgICAqLworICAgIHRoaXMuY29tbWl0T25UYWJXaXRoU3VnZ2VzdGlvbiA9IGZhbHNlOwor
CisgICAgLyoqCisgICAgICogV2hldGhlciB0byBjb2FsZXNjZSBkdXBsaWNhdGUgaXRlbXMgaW4g
dGhlIGhpc3RvcnkuCisgICAgICogQHR5cGUge2Jvb2xlYW59CisgICAgICovCisgICAgdGhpcy5j
b2FsZXNjZUhpc3RvcnlEdXBzID0gdHJ1ZTsKK30KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAq
IEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuVGV4dFByb21wdH0KKyAqIEBwYXJhbSB7ZnVuY3Rpb24o
UmFuZ2UsIGJvb2xlYW4sIGZ1bmN0aW9uKCopKX0gY29tcGxldGlvbnMKKyAqIEBwYXJhbSB7c3Ry
aW5nfSBzdG9wQ2hhcmFjdGVycworICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFByb21wdENv
bmZpZz19IGNvbmZpZworICovCitXZWJJbnNwZWN0b3IuVGV4dFByb21wdFdpdGhIaXN0b3J5ID0g
ZnVuY3Rpb24oY29tcGxldGlvbnMsIHN0b3BDaGFyYWN0ZXJzLCBjb25maWcpCit7CisgICAgV2Vi
SW5zcGVjdG9yLlRleHRQcm9tcHQuY2FsbCh0aGlzLCBjb21wbGV0aW9ucywgc3RvcENoYXJhY3Rl
cnMsIGNvbmZpZyk7CisKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7QXJyYXkuPHN0cmluZz59Cisg
ICAgICovCisgICAgdGhpcy5fZGF0YSA9IFtdOworCisgICAgLyoqCisgICAgICogMS1iYXNlZCBl
bnRyeSBpbiB0aGUgaGlzdG9yeSBzdGFjay4KKyAgICAgKiBAdHlwZSB7bnVtYmVyfQorICAgICAq
LworICAgIHRoaXMuX2hpc3RvcnlPZmZzZXQgPSAxOworfQorCitXZWJJbnNwZWN0b3IuVGV4dFBy
b21wdFdpdGhIaXN0b3J5LnByb3RvdHlwZSA9IHsKKyAgICBnZXQgaGlzdG9yeURhdGEoKQorICAg
IHsKKyAgICAgICAgLy8gRklYTUU6IGRvIHdlIG5lZWQgdG8gY29weSB0aGlzPworICAgICAgICBy
ZXR1cm4gdGhpcy5fZGF0YTsKKyAgICB9LAogCi0gICAgICAgIGV2ZW50LmhhbmRsZWQgPSB0cnVl
OwotICAgICAgICB0aGlzLl9tb3ZlRm9yd2FyZEluSGlzdG9yeSgpOworICAgIC8qKgorICAgICAq
IEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGRhdGEKKyAgICAgKi8KKyAgICBzZXRIaXN0b3J5RGF0
YTogZnVuY3Rpb24oZGF0YSkKKyAgICB7CisgICAgICAgIHRoaXMuX2RhdGEgPSBbXS5jb25jYXQo
ZGF0YSk7CisgICAgICAgIHRoaXMuX2hpc3RvcnlPZmZzZXQgPSAxOwogICAgIH0sCiAKLSAgICBf
bW92ZUJhY2tJbkhpc3Rvcnk6IGZ1bmN0aW9uKCkKKyAgICAvKioKKyAgICAgKiBQdXNoZXMgYSBj
b21taXR0ZWQgdGV4dCBpbnRvIHRoZSBoaXN0b3J5LgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0
ZXh0CisgICAgICovCisgICAgcHVzaEhpc3RvcnlJdGVtOiBmdW5jdGlvbih0ZXh0KQogICAgIHsK
LSAgICAgICAgaWYgKCF0aGlzLmhpc3RvcnkgfHwgdGhpcy5oaXN0b3J5T2Zmc2V0ID09IHRoaXMu
aGlzdG9yeS5sZW5ndGgpCisgICAgICAgIGlmICh0aGlzLl91bmNvbW1pdHRlZElzVG9wKSB7Cisg
ICAgICAgICAgICB0aGlzLl9kYXRhLnBvcCgpOworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3Vu
Y29tbWl0dGVkSXNUb3A7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5fY29uZmlnLmNv
YWxlc2NlSGlzdG9yeUR1cHMgJiYgdGV4dCA9PT0gdGhpcy5fY3VycmVudEhpc3RvcnlJdGVtKCkp
CiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX2RhdGEucHVzaCh0ZXh0KTsKKyAg
ICAgICAgdGhpcy5faGlzdG9yeU9mZnNldCA9IDE7CisgICAgfSwKIAorICAgIC8qKgorICAgICAq
IFB1c2hlcyB0aGUgY3VycmVudCAodW5jb21taXR0ZWQpIHRleHQgaW50byB0aGUgaGlzdG9yeS4K
KyAgICAgKi8KKyAgICBfcHVzaEN1cnJlbnRUZXh0OiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICBpZiAodGhpcy5fdW5jb21taXR0ZWRJc1RvcCkKKyAgICAgICAgICAgIHRoaXMuX2RhdGEucG9w
KCk7IC8vIFRocm93IGF3YXkgb2Jzb2xldGUgdW5jb21taXR0ZWQgdGV4dC4KKyAgICAgICAgdGhp
cy5fdW5jb21taXR0ZWRJc1RvcCA9IHRydWU7CiAgICAgICAgIHRoaXMuY2xlYXJBdXRvQ29tcGxl
dGUodHJ1ZSk7CisgICAgICAgIGNvbnNvbGUubG9nKCJfcHVzaEN1cnJlbnRUZXh0OiAnJW8nIiwg
dGhpcy50ZXh0KTsKKyAgICAgICAgdGhpcy5fZGF0YS5wdXNoKHRoaXMudGV4dCk7CisgICAgfSwK
IAotICAgICAgICBpZiAodGhpcy5oaXN0b3J5T2Zmc2V0ID09PSAwKQotICAgICAgICAgICAgdGhp
cy50ZW1wU2F2ZWRDb21tYW5kID0gdGhpcy50ZXh0OworICAgIC8qKgorICAgICAqIEByZXR1cm4g
e3N0cmluZ3x1bmRlZmluZWR9CisgICAgICovCisgICAgX3ByZXZpb3VzOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICBpZiAodGhpcy5faGlzdG9yeU9mZnNldCA+IHRoaXMuX2RhdGEubGVuZ3Ro
KQorICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgaWYgKHRoaXMuX2hpc3Rv
cnlPZmZzZXQgPT09IDEpCisgICAgICAgICAgICB0aGlzLl9wdXNoQ3VycmVudFRleHQoKTsKKyAg
ICAgICAgKyt0aGlzLl9oaXN0b3J5T2Zmc2V0OworICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVu
dEhpc3RvcnlJdGVtKCk7CisgICAgfSwKIAotICAgICAgICArK3RoaXMuaGlzdG9yeU9mZnNldDsK
LSAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy5oaXN0b3J5W3RoaXMuaGlzdG9yeS5sZW5ndGggLSB0
aGlzLmhpc3RvcnlPZmZzZXRdOworICAgIC8qKgorICAgICAqIEByZXR1cm4ge3N0cmluZ3x1bmRl
ZmluZWR9CisgICAgICovCisgICAgX25leHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlm
ICh0aGlzLl9oaXN0b3J5T2Zmc2V0ID09PSAxKQorICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5l
ZDsKKyAgICAgICAgLS10aGlzLl9oaXN0b3J5T2Zmc2V0OworICAgICAgICByZXR1cm4gdGhpcy5f
Y3VycmVudEhpc3RvcnlJdGVtKCk7CisgICAgfSwKIAotICAgICAgICB0aGlzLmVsZW1lbnQuc2Ny
b2xsSW50b1ZpZXcodHJ1ZSk7Ci0gICAgICAgIHZhciBmaXJzdE5ld2xpbmVJbmRleCA9IHRoaXMu
dGV4dC5pbmRleE9mKCJcbiIpOwotICAgICAgICBpZiAoZmlyc3ROZXdsaW5lSW5kZXggPT09IC0x
KQotICAgICAgICAgICAgdGhpcy5tb3ZlQ2FyZXRUb0VuZE9mUHJvbXB0KCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsK
LSAgICAgICAgICAgIHZhciBzZWxlY3Rpb25SYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7
CisgICAgX2N1cnJlbnRIaXN0b3J5SXRlbTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX2RhdGFbdGhpcy5fZGF0YS5sZW5ndGggLSB0aGlzLl9oaXN0b3J5T2Zmc2V0XTsK
KyAgICB9LAogCi0gICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5zZXRTdGFydCh0aGlzLmVsZW1l
bnQuZmlyc3RDaGlsZCwgZmlyc3ROZXdsaW5lSW5kZXgpOwotICAgICAgICAgICAgc2VsZWN0aW9u
UmFuZ2Uuc2V0RW5kKHRoaXMuZWxlbWVudC5maXJzdENoaWxkLCBmaXJzdE5ld2xpbmVJbmRleCk7
CisgICAgZGVmYXVsdEtleUhhbmRsZXI6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAg
dmFyIG5ld1RleHQ7CisgICAgICAgIHZhciBpc1ByZXZpb3VzOwogCi0gICAgICAgICAgICBzZWxl
Y3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7Ci0gICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2Uo
c2VsZWN0aW9uUmFuZ2UpOworICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUlkZW50aWZpZXIpIHsK
KyAgICAgICAgY2FzZSAiVXAiOgorICAgICAgICAgICAgaWYgKCF0aGlzLmlzQ2FyZXRPbkZpcnN0
TGluZSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbmV3VGV4dCA9IHRo
aXMuX3ByZXZpb3VzKCk7CisgICAgICAgICAgICBpc1ByZXZpb3VzID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlICJEb3duIjoKKyAgICAgICAgICAgIGlmICghdGhpcy5p
c0NhcmV0T25MYXN0TGluZSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
bmV3VGV4dCA9IHRoaXMuX25leHQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICJVKzAwNTAiOiAvLyBDdHJsK1AgPSBQcmV2aW91cworICAgICAgICAgICAgaWYgKFdlYkluc3Bl
Y3Rvci5pc01hYygpICYmIGV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50Lm1ldGFLZXkgJiYgIWV2ZW50
LmFsdEtleSAmJiAhZXZlbnQuc2hpZnRLZXkpIHsKKyAgICAgICAgICAgICAgICBuZXdUZXh0ID0g
dGhpcy5fcHJldmlvdXMoKTsKKyAgICAgICAgICAgICAgICBpc1ByZXZpb3VzID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJVKzAwNEUiOiAv
LyBDdHJsK04gPSBOZXh0CisgICAgICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmlzTWFjKCkgJiYg
ZXZlbnQuY3RybEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuYWx0S2V5ICYmICFldmVu
dC5zaGlmdEtleSkKKyAgICAgICAgICAgICAgICBuZXdUZXh0ID0gdGhpcy5fbmV4dCgpOworICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICB9LAogCi0gICAgX21vdmVGb3J3YXJkSW5I
aXN0b3J5OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuaGlzdG9yeSB8fCB0
aGlzLmhpc3RvcnlPZmZzZXQgPT09IDApCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlm
IChuZXdUZXh0ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdh
dGlvbigpOworICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAg
IHRoaXMudGV4dCA9IG5ld1RleHQ7CiAKLSAgICAgICAgdGhpcy5jbGVhckF1dG9Db21wbGV0ZSh0
cnVlKTsKKyAgICAgICAgICAgIGlmIChpc1ByZXZpb3VzKSB7CisgICAgICAgICAgICAgICAgdmFy
IGZpcnN0TmV3bGluZUluZGV4ID0gdGhpcy50ZXh0LmluZGV4T2YoIlxuIik7CisgICAgICAgICAg
ICAgICAgaWYgKGZpcnN0TmV3bGluZUluZGV4ID09PSAtMSkKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5tb3ZlQ2FyZXRUb0VuZE9mUHJvbXB0KCk7CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7
CisgICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3Rpb25SYW5nZSA9IGRvY3VtZW50LmNyZWF0
ZVJhbmdlKCk7CiAKLSAgICAgICAgLS10aGlzLmhpc3RvcnlPZmZzZXQ7CisgICAgICAgICAgICAg
ICAgICAgIHNlbGVjdGlvblJhbmdlLnNldFN0YXJ0KHRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZCwg
Zmlyc3ROZXdsaW5lSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5z
ZXRFbmQodGhpcy5fZWxlbWVudC5maXJzdENoaWxkLCBmaXJzdE5ld2xpbmVJbmRleCk7CiAKLSAg
ICAgICAgaWYgKHRoaXMuaGlzdG9yeU9mZnNldCA9PT0gMCkgewotICAgICAgICAgICAgdGhpcy50
ZXh0ID0gdGhpcy50ZW1wU2F2ZWRDb21tYW5kOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMudGVt
cFNhdmVkQ29tbWFuZDsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
c2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOworICAgICAgICAgICAgICAgICAgICBzZWxlY3Rp
b24uYWRkUmFuZ2Uoc2VsZWN0aW9uUmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICB0
aGlzLnRleHQgPSB0aGlzLmhpc3RvcnlbdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIHRoaXMuaGlzdG9y
eU9mZnNldF07Ci0gICAgICAgIHRoaXMuZWxlbWVudC5zY3JvbGxJbnRvVmlldygpOworICAgICAg
ICByZXR1cm4gV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmRlZmF1bHRLZXlIYW5k
bGVyLmNhbGwodGhpcywgZXZlbnQpOwogICAgIH0KIH0KKworV2ViSW5zcGVjdG9yLlRleHRQcm9t
cHRXaXRoSGlzdG9yeS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlRleHRQcm9t
cHQucHJvdG90eXBlOwo=
</data>
<flag name="review"
          id="111039"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113039</attachid>
            <date>2011-10-31 04:37:40 -0700</date>
            <delta_ts>2011-10-31 07:33:26 -0700</delta_ts>
            <desc>[PATCH] Comments addressed</desc>
            <filename>textprompt_step1.patch</filename>
            <type>text/plain</type>
            <size>46451</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IGQ1OGE1N2I4OWZmYTBmYWI1MjE4ZjY3NDc2YzQ4YzMzODcwNDEyOWIKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBGcmkgT2N0IDI4
IDExOjEzOjMzIDIwMTEgKzA0MDAKCiAgICBGaXgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTVkZDAwYy4uYTE3
NWFlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYzIEBACiAyMDExLTEwLTI4ICBBbGV4YW5kZXIg
UGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
W3JlZmFjdG9yaW5nXSBUZXh0UHJvbXB0OiBlbnN1cmUgZW5jYXBzdWxhdGlvbiwgZXh0cmFjdCBo
aXN0b3J5IG1hbmFnZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcwOTM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0RhdGFiYXNlUXVlcnlWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlUXVl
cnlWaWV3KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZVF1ZXJ5Vmlldy5wcm90b3R5
cGUuX2VudGVyS2V5UHJlc3NlZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TdHls
ZXNTaWRlYmFyUGFuZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFu
ZS5wcm90b3R5cGUuX2F0dHJpYnV0ZXNNb2RpZmllZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS5zZWxlY3RFbGVtZW50KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLnNlbGVj
dEVsZW1lbnQuY29udGV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRy
ZWVFbGVtZW50LnByb3RvdHlwZS5zZWxlY3RFbGVtZW50LmV2ZW50KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLmNvbnRleHQuZXZl
bnQpOgorICAgICAgICAoKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRQcm9t
cHQuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuZ2V0IHByb3h5RWxlbWVudCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuYXR0YWNoKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5hdHRhY2hBbmRTdGFydEVkaXRpbmcpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLl9hdHRhY2hJbnRlcm5h
bCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuZGV0YWNoKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5nZXQgdGV4dCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuc2V0IHRleHQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLl9yZW1vdmVGcm9tRWxlbWVu
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuX3N0YXJ0RWRp
dGluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuX3N0b3BF
ZGl0aW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5fc2Vs
ZWN0U3RhcnQubW92ZUJhY2tJZk91dHNpZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQ
cm9tcHQucHJvdG90eXBlLl9zZWxlY3RTdGFydCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4
dFByb21wdC5wcm90b3R5cGUuZGVmYXVsdEtleUhhbmRsZXIpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRQcm9tcHQucHJvdG90eXBlLl9vbktleURvd24pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmNsZWFyQXV0b0NvbXBsZXRlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5jb21wbGV0ZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuX2NvbXBsZXRpb25zUmVhZHkpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmlzQ2FyZXRJbnNpZGVQcm9tcHQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmlzQ2FyZXRBdEVu
ZE9mUHJvbXB0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5p
c0NhcmV0T25GaXJzdExpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJv
dG90eXBlLmlzQ2FyZXRPbkxhc3RMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJv
bXB0LnByb3RvdHlwZS5tb3ZlQ2FyZXRUb0VuZE9mUHJvbXB0KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS51cEtleVByZXNzZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmRvd25LZXlQcmVzc2VkKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS50YWJLZXlQcmVzc2VkKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0Q29uZmlnKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
ZXh0UHJvbXB0V2l0aEhpc3RvcnkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHRX
aXRoSGlzdG9yeS5wcm90b3R5cGUuZ2V0IGhpc3RvcnlEYXRhKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0UHJvbXB0V2l0aEhpc3RvcnkucHJvdG90eXBlLnNldEhpc3RvcnlEYXRhKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0V2l0aEhpc3RvcnkucHJvdG90eXBlLnB1c2hI
aXN0b3J5SXRlbSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdFdpdGhIaXN0b3J5
LnByb3RvdHlwZS5fcHVzaEN1cnJlbnRUZXh0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
UHJvbXB0V2l0aEhpc3RvcnkucHJvdG90eXBlLl9wcmV2aW91cyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dFByb21wdFdpdGhIaXN0b3J5LnByb3RvdHlwZS5fbmV4dCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuVGV4dFByb21wdFdpdGhIaXN0b3J5LnByb3RvdHlwZS5fY3VycmVudEhpc3Rv
cnlJdGVtKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0V2l0aEhpc3RvcnkucHJv
dG90eXBlLmRlZmF1bHRLZXlIYW5kbGVyKToKKworMjAxMS0xMC0yOCAgQWxleGFuZGVyIFBhdmxv
diAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFVzaW5n
IGtleWJvYXJkIHRvIGluY3JlbWVudC9kZWNyZW1lbnQgdW5pdHMgaXMgaW5jb25zaXN0ZW50CiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTExOQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3
LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcwpp
bmRleCBiYzZhYjAzLi41NTUyN2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanMKQEAgLTY1LDkgKzY1LDYgQEAgV2ViSW5zcGVjdG9y
LkNvbnNvbGVWaWV3ID0gZnVuY3Rpb24oaGlkZUNvbnRleHRTZWxlY3RvcikKICAgICB0aGlzLm1l
c3NhZ2VzRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnByb21wdEVsZW1lbnQpOwogICAgIHRoaXMu
bWVzc2FnZXNFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikp
OwogCi0gICAgdGhpcy5wcm9tcHQgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQodGhpcy5w
cm9tcHRFbGVtZW50LCB0aGlzLmNvbXBsZXRpb25zLmJpbmQodGhpcyksIEV4cHJlc3Npb25TdG9w
Q2hhcmFjdGVycyArICIuIik7Ci0gICAgdGhpcy5wcm9tcHQuaGlzdG9yeSA9IFdlYkluc3BlY3Rv
ci5zZXR0aW5ncy5jb25zb2xlSGlzdG9yeS5nZXQoKTsKLQogICAgIHRoaXMudG9wR3JvdXAgPSBu
ZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVHcm91cChudWxsKTsKICAgICB0aGlzLm1lc3NhZ2VzRWxl
bWVudC5pbnNlcnRCZWZvcmUodGhpcy50b3BHcm91cC5lbGVtZW50LCB0aGlzLnByb21wdEVsZW1l
bnQpOwogICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy50b3BHcm91cDsKQEAgLTExMiw2ICsx
MDksMTAgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3ID0gZnVuY3Rpb24oaGlkZUNvbnRleHRT
ZWxlY3RvcikKICAgICBXZWJJbnNwZWN0b3IuY29uc29sZS5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5Db25zb2xlTW9kZWwuRXZlbnRzLkNvbnNvbGVDbGVhcmVkLCB0aGlzLl9jb25zb2xl
Q2xlYXJlZCwgdGhpcyk7CiAKICAgICB0aGlzLl9saW5raWZpZXIgPSBXZWJJbnNwZWN0b3IuZGVi
dWdnZXJQcmVzZW50YXRpb25Nb2RlbC5jcmVhdGVMaW5raWZpZXIoKTsKKworICAgIHRoaXMucHJv
bXB0ID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0V2l0aEhpc3RvcnkodGhpcy5jb21wbGV0
aW9ucy5iaW5kKHRoaXMpLCBFeHByZXNzaW9uU3RvcENoYXJhY3RlcnMgKyAiLiIpOworICAgIHRo
aXMucHJvbXB0LmF0dGFjaCh0aGlzLnByb21wdEVsZW1lbnQpOworICAgIHRoaXMucHJvbXB0LnNl
dEhpc3RvcnlEYXRhKFdlYkluc3BlY3Rvci5zZXR0aW5ncy5jb25zb2xlSGlzdG9yeS5nZXQoKSk7
CiB9CiAKIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5FdmVudHMgPSB7CkBAIC02MjIsMTEgKzYy
MywxMCBAQCBXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICB0
aGlzLnByb21wdC5oaXN0b3J5LnB1c2goc3RyKTsKLSAgICAgICAgICAgIHRoaXMucHJvbXB0Lmhp
c3RvcnlPZmZzZXQgPSAwOworICAgICAgICAgICAgdGhpcy5wcm9tcHQucHVzaEhpc3RvcnlJdGVt
KHN0cik7CiAgICAgICAgICAgICB0aGlzLnByb21wdC50ZXh0ID0gIiI7CiAKLSAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5jb25zb2xlSGlzdG9yeS5zZXQodGhpcy5wcm9tcHQuaGlz
dG9yeS5zbGljZSgtMzApKTsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5jb25z
b2xlSGlzdG9yeS5zZXQodGhpcy5wcm9tcHQuaGlzdG9yeURhdGEuc2xpY2UoLTMwKSk7CiAKICAg
ICAgICAgICAgIHRoaXMuX2FwcGVuZENvbnNvbGVNZXNzYWdlKG5ldyBXZWJJbnNwZWN0b3IuQ29u
c29sZUNvbW1hbmRSZXN1bHQocmVzdWx0LCB3YXNUaHJvd24sIGNvbW1hbmRNZXNzYWdlLCB0aGlz
Ll9saW5raWZpZXIpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVF1ZXJ5Vmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2VRdWVyeVZpZXcuanMKaW5kZXggNDY5ZTlkNS4uMzc2
ZjI4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRh
YmFzZVF1ZXJ5Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0RhdGFiYXNlUXVlcnlWaWV3LmpzCkBAIC0zOCwxNSArMzgsMTQgQEAgV2ViSW5zcGVjdG9yLkRh
dGFiYXNlUXVlcnlWaWV3ID0gZnVuY3Rpb24oZGF0YWJhc2UpCiAgICAgdGhpcy5lbGVtZW50LmFk
ZFN0eWxlQ2xhc3MoIm1vbm9zcGFjZSIpOwogICAgIHRoaXMuZWxlbWVudC50YWJJbmRleCA9IDA7
CiAKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0c3RhcnQiLCB0aGlz
Ll9zZWxlY3RTdGFydC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0KICAgICB0aGlzLnByb21wdEVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICB0aGlzLnByb21wdEVsZW1l
bnQuY2xhc3NOYW1lID0gImRhdGFiYXNlLXF1ZXJ5LXByb21wdCI7CiAgICAgdGhpcy5wcm9tcHRF
bGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOwogICAgIHRo
aXMucHJvbXB0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fcHJvbXB0
S2V5RG93bi5iaW5kKHRoaXMpLCB0cnVlKTsKICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQo
dGhpcy5wcm9tcHRFbGVtZW50KTsKIAotICAgIHRoaXMucHJvbXB0ID0gbmV3IFdlYkluc3BlY3Rv
ci5UZXh0UHJvbXB0KHRoaXMucHJvbXB0RWxlbWVudCwgdGhpcy5jb21wbGV0aW9ucy5iaW5kKHRo
aXMpLCAiICIpOworICAgIHRoaXMucHJvbXB0ID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0
V2l0aEhpc3RvcnkodGhpcy5jb21wbGV0aW9ucy5iaW5kKHRoaXMpLCAiICIpOworICAgIHRoaXMu
cHJvbXB0LmF0dGFjaCh0aGlzLnByb21wdEVsZW1lbnQpOwogfQogCiBXZWJJbnNwZWN0b3IuRGF0
YWJhc2VRdWVyeVZpZXcuRXZlbnRzID0gewpAQCAtMTA3LDI0ICsxMDYsNiBAQCBXZWJJbnNwZWN0
b3IuRGF0YWJhc2VRdWVyeVZpZXcucHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgfSwKIAot
ICAgIF9zZWxlY3RTdGFydDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAodGhp
cy5fc2VsZWN0aW9uVGltZW91dCkKLSAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zZWxl
Y3Rpb25UaW1lb3V0KTsKLQotICAgICAgICB0aGlzLnByb21wdC5jbGVhckF1dG9Db21wbGV0ZSgp
OwotCi0gICAgICAgIGZ1bmN0aW9uIG1vdmVCYWNrSWZPdXRzaWRlKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgZGVsZXRlIHRoaXMuX3NlbGVjdGlvblRpbWVvdXQ7Ci0gICAgICAgICAgICBpZiAo
IXRoaXMucHJvbXB0LmlzQ2FyZXRJbnNpZGVQcm9tcHQoKSAmJiB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCkuaXNDb2xsYXBzZWQpCi0gICAgICAgICAgICAgICAgdGhpcy5wcm9tcHQubW92ZUNhcmV0VG9F
bmRPZlByb21wdCgpOwotICAgICAgICAgICAgdGhpcy5wcm9tcHQuYXV0b0NvbXBsZXRlU29vbigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fc2VsZWN0aW9uVGltZW91dCA9IHNldFRpbWVv
dXQobW92ZUJhY2tJZk91dHNpZGUuYmluZCh0aGlzKSwgMTAwKTsKLSAgICB9LAotCiAgICAgX2Vu
dGVyS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICBldmVudC5wcmV2
ZW50RGVmYXVsdCgpOwpAQCAtMTM2LDggKzExNyw3IEBAIFdlYkluc3BlY3Rvci5EYXRhYmFzZVF1
ZXJ5Vmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICghcXVlcnkubGVuZ3RoKQogICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIHRoaXMucHJvbXB0Lmhpc3RvcnkucHVzaChxdWVyeSk7
Ci0gICAgICAgIHRoaXMucHJvbXB0Lmhpc3RvcnlPZmZzZXQgPSAwOworICAgICAgICB0aGlzLnBy
b21wdC5wdXNoSGlzdG9yeUl0ZW0ocXVlcnkpOwogICAgICAgICB0aGlzLnByb21wdC50ZXh0ID0g
IiI7CiAKICAgICAgICAgdGhpcy5kYXRhYmFzZS5leGVjdXRlU3FsKHF1ZXJ5LCB0aGlzLl9xdWVy
eUZpbmlzaGVkLmJpbmQodGhpcywgcXVlcnkpLCB0aGlzLl9xdWVyeUVycm9yLmJpbmQodGhpcywg
cXVlcnkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
U3R5bGVzU2lkZWJhclBhbmUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1N0eWxlc1NpZGViYXJQYW5lLmpzCmluZGV4IDMzYzhjMDUuLjFmYjRiYWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFu
ZS5qcwpAQCAtMTgyNCw1NyArMTgyNCwxNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRy
ZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGNvbnRleHQgPSB7CiAgICAgICAg
ICAgICBleHBhbmRlZDogdGhpcy5leHBhbmRlZCwKICAgICAgICAgICAgIGhhc0NoaWxkcmVuOiB0
aGlzLmhhc0NoaWxkcmVuLAotICAgICAgICAgICAga2V5RG93bkxpc3RlbmVyOiBpc0VkaXRpbmdO
YW1lID8gbnVsbCA6IHRoaXMuZWRpdGluZ1ZhbHVlS2V5RG93bi5iaW5kKHRoaXMpLAogICAgICAg
ICAgICAgaXNFZGl0aW5nTmFtZTogaXNFZGl0aW5nTmFtZSwKKyAgICAgICAgICAgIHByZXZpb3Vz
Q29udGVudDogc2VsZWN0RWxlbWVudC50ZXh0Q29udGVudAogICAgICAgICB9OwogCiAgICAgICAg
IC8vIExpZSBhYm91dCBvdXIgY2hpbGRyZW4gdG8gcHJldmVudCBleHBhbmRpbmcgb24gZG91Ymxl
IGNsaWNrIGFuZCB0byBjb2xsYXBzZSBzaG9ydGhhbmRzLgogICAgICAgICB0aGlzLmhhc0NoaWxk
cmVuID0gZmFsc2U7CiAKLSAgICAgICAgaWYgKCFpc0VkaXRpbmdOYW1lKQotICAgICAgICAgICAg
c2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgY29udGV4dC5rZXlEb3du
TGlzdGVuZXIsIGZhbHNlKTsKICAgICAgICAgaWYgKHNlbGVjdEVsZW1lbnQucGFyZW50RWxlbWVu
dCkKICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQucGFyZW50RWxlbWVudC5hZGRTdHlsZUNsYXNz
KCJjaGlsZC1lZGl0aW5nIik7CiAgICAgICAgIHNlbGVjdEVsZW1lbnQudGV4dENvbnRlbnQgPSBz
ZWxlY3RFbGVtZW50LnRleHRDb250ZW50OyAvLyByZW1vdmUgY29sb3Igc3dhdGNoIGFuZCB0aGUg
bGlrZQogCi0gICAgICAgIGZ1bmN0aW9uIHNob3VsZENvbW1pdFZhbHVlU2VtaWNvbG9uKHRleHQs
IGN1cnNvclBvc2l0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxk
IHRoaXMgYWNjb3VudCBmb3Igc2VtaWNvbG9ucyBpbnNpZGUgY29tbWVudHM/Ci0gICAgICAgICAg
ICB2YXIgb3BlblF1b3RlID0gIiI7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1
cnNvclBvc2l0aW9uOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2ggPSB0ZXh0W2ldOwot
ICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gIlxcIiAmJiBvcGVuUXVvdGUgIT09ICIiKQotICAg
ICAgICAgICAgICAgICAgICArK2k7IC8vIHNraXAgbmV4dCBjaGFyYWN0ZXIgaW5zaWRlIHN0cmlu
ZwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFvcGVuUXVvdGUgJiYgKGNoID09PSAiXCIiIHx8
IGNoID09PSAiJyIpKQotICAgICAgICAgICAgICAgICAgICBvcGVuUXVvdGUgPSBjaDsKLSAgICAg
ICAgICAgICAgICBlbHNlIGlmIChvcGVuUXVvdGUgPT09IGNoKQotICAgICAgICAgICAgICAgICAg
ICBvcGVuUXVvdGUgPSAiIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAhb3Bl
blF1b3RlOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gbmFtZVZhbHVlRmluaXNoSGFu
ZGxlcihjb250ZXh0LCBpc0VkaXRpbmdOYW1lLCBldmVudCkKLSAgICAgICAgewotICAgICAgICAg
ICAgLy8gRklYTUU6IHRoZSAiOiIvIjsiIGRldGVjdGlvbiBkb2VzIG5vdCB3b3JrIGZvciBub24t
VVMgbGF5b3V0cyBkdWUgdG8gdGhlIGV2ZW50IGJlaW5nIGtleWRvd24gcmF0aGVyIHRoYW4ga2V5
cHJlc3MuCi0gICAgICAgICAgICB2YXIgaXNGaWVsZElucHV0VGVybWluYXRlZCA9IChldmVudC5r
ZXlDb2RlID09PSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLlNlbWljb2xvbi5j
b2RlKSAmJgotICAgICAgICAgICAgICAgIChpc0VkaXRpbmdOYW1lID8gZXZlbnQuc2hpZnRLZXkg
OiAoIWV2ZW50LnNoaWZ0S2V5ICYmIHNob3VsZENvbW1pdFZhbHVlU2VtaWNvbG9uKGV2ZW50LnRh
cmdldC50ZXh0Q29udGVudCwgZXZlbnQudGFyZ2V0LnNlbGVjdGlvbkxlZnRPZmZzZXQpKSk7Ci0g
ICAgICAgICAgICBpZiAoaXNFbnRlcktleShldmVudCkgfHwgaXNGaWVsZElucHV0VGVybWluYXRl
ZCkgewotICAgICAgICAgICAgICAgIC8vIEVudGVyIG9yIGNvbG9uIChmb3IgbmFtZSkvc2VtaWNv
bG9uIG91dHNpZGUgb2Ygc3RyaW5nIChmb3IgdmFsdWUpLgotICAgICAgICAgICAgICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJtb3ZlLWZvcndhcmQi
OwotICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSBXZWJJbnNwZWN0b3Iu
S2V5Ym9hcmRTaG9ydGN1dC5LZXlzLkVzYy5jb2RlIHx8IGV2ZW50LmtleUlkZW50aWZpZXIgPT09
ICJVKzAwMUIiKQotICAgICAgICAgICAgICAgIHJldHVybiAiY2FuY2VsIjsKLSAgICAgICAgICAg
IGVsc2UgaWYgKCFpc0VkaXRpbmdOYW1lICYmIHRoaXMuX25ld1Byb3BlcnR5ICYmIGV2ZW50Lmtl
eUNvZGUgPT09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuQmFja3NwYWNlLmNv
ZGUpIHsKLSAgICAgICAgICAgICAgICAvLyBGb3IgYSBuZXcgcHJvcGVydHksIHdoZW4gQmFja3Nw
YWNlIGlzIHByZXNzZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBuZXcgcHJvcGVydHkgdmFsdWUsIG1v
dmUgYmFjayB0byB0aGUgcHJvcGVydHkgbmFtZS4KLSAgICAgICAgICAgICAgICB2YXIgc2VsZWN0
aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwotICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rp
b24uaXNDb2xsYXBzZWQgJiYgIXNlbGVjdGlvbi5mb2N1c09mZnNldCkgewotICAgICAgICAgICAg
ICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gIm1vdmUtYmFja3dhcmQiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIlUrMDAwOSIpIC8vIFRhYiBrZXkuCi0gICAg
ICAgICAgICAgICAgcmV0dXJuICJtb3ZlLSIgKyAoZXZlbnQuc2hpZnRLZXkgPyAiYmFja3dhcmQi
IDogImZvcndhcmQiKTsKLSAgICAgICAgfQotCiAgICAgICAgIGZ1bmN0aW9uIHBhc3RlSGFuZGxl
cihjb250ZXh0LCBldmVudCkKICAgICAgICAgewogICAgICAgICAgICAgdmFyIGRhdGEgPSBldmVu
dC5jbGlwYm9hcmREYXRhLmdldERhdGEoIlRleHQiKTsKQEAgLTE4OTcsNyArMTg1NywxMiBAQCBX
ZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIHRoaXMubmFtZUVsZW1lbnQubm9ybWFsaXplKCk7CiAgICAgICAgICAgICB0aGlzLnZh
bHVlRWxlbWVudC5ub3JtYWxpemUoKTsKIAotICAgICAgICAgICAgcmV0dXJuICJtb3ZlLWZvcndh
cmQiOworICAgICAgICAgICAgdGhpcy5lZGl0aW5nQ29tbWl0dGVkKG51bGwsIGV2ZW50LnRhcmdl
dC50ZXh0Q29udGVudCwgY29udGV4dC5wcmV2aW91c0NvbnRlbnQsIGNvbnRleHQsICJmb3J3YXJk
Iik7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBibHVyTGlzdGVuZXIoY29udGV4dCwg
ZXZlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuZWRpdGluZ0NvbW1pdHRlZChudWxs
LCBldmVudC50YXJnZXQudGV4dENvbnRlbnQsIGNvbnRleHQucHJldmlvdXNDb250ZW50LCBjb250
ZXh0LCAiIik7CiAgICAgICAgIH0KIAogICAgICAgICBkZWxldGUgdGhpcy5vcmlnaW5hbFByb3Bl
cnR5VGV4dDsKQEAgLTE5MDYsMjMgKzE4NzEsNzQgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVy
dHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmIChzZWxlY3RFbGVtZW50LnBh
cmVudEVsZW1lbnQpCiAgICAgICAgICAgICBzZWxlY3RFbGVtZW50LnBhcmVudEVsZW1lbnQuc2Ny
b2xsSW50b1ZpZXdJZk5lZWRlZChmYWxzZSk7CiAKLSAgICAgICAgdmFyIGNvbmZpZyA9IG5ldyBX
ZWJJbnNwZWN0b3IuRWRpdGluZ0NvbmZpZyh0aGlzLmVkaXRpbmdDb21taXR0ZWQuYmluZCh0aGlz
KSwgdGhpcy5lZGl0aW5nQ2FuY2VsbGVkLmJpbmQodGhpcyksIGNvbnRleHQpOwotICAgICAgICBj
b25maWcuc2V0Q3VzdG9tRmluaXNoSGFuZGxlcihuYW1lVmFsdWVGaW5pc2hIYW5kbGVyLmJpbmQo
dGhpcywgY29udGV4dCwgaXNFZGl0aW5nTmFtZSkpOwotICAgICAgICBjb25maWcuc2V0UGFzdGVI
YW5kbGVyKGlzRWRpdGluZ05hbWUgPyBwYXN0ZUhhbmRsZXIuYmluZCh0aGlzLCBjb250ZXh0KSA6
IG51bGwpOwotICAgICAgICBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKHNlbGVjdEVsZW1lbnQs
IGNvbmZpZyk7CisgICAgICAgIHRoaXMuX3Byb21wdCA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5bGVz
U2lkZWJhclBhbmUuQ1NTUHJvcGVydHlQcm9tcHQoaXNFZGl0aW5nTmFtZSA/IFdlYkluc3BlY3Rv
ci5DU1NDb21wbGV0aW9ucy5jc3NOYW1lQ29tcGxldGlvbnMgOiBXZWJJbnNwZWN0b3IuQ1NTS2V5
d29yZENvbXBsZXRpb25zLmZvclByb3BlcnR5KHRoaXMubmFtZUVsZW1lbnQudGV4dENvbnRlbnQp
LCB0aGlzLCBpc0VkaXRpbmdOYW1lKTsKKyAgICAgICAgdmFyIHByb3h5RWxlbWVudCA9IHRoaXMu
X3Byb21wdC5hdHRhY2hBbmRTdGFydEVkaXRpbmcoc2VsZWN0RWxlbWVudCwgYmx1ckxpc3RlbmVy
LmJpbmQodGhpcywgY29udGV4dCkpOworCisgICAgICAgIHByb3h5RWxlbWVudC5hZGRFdmVudExp
c3RlbmVyKCJrZXlkb3duIiwgdGhpcy5lZGl0aW5nTmFtZVZhbHVlS2V5RG93bi5iaW5kKHRoaXMs
IGNvbnRleHQpLCBmYWxzZSk7CisgICAgICAgIGlmIChpc0VkaXRpbmdOYW1lKQorICAgICAgICAg
ICAgcHJveHlFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBhc3RlIiwgcGFzdGVIYW5kbGVyLmJp
bmQodGhpcywgY29udGV4dCkpOwogCi0gICAgICAgIHRoaXMuX3Byb21wdCA9IG5ldyBXZWJJbnNw
ZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUuQ1NTUHJvcGVydHlQcm9tcHQoc2VsZWN0RWxlbWVudCwg
aXNFZGl0aW5nTmFtZSA/IFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5jc3NOYW1lQ29tcGxl
dGlvbnMgOiBXZWJJbnNwZWN0b3IuQ1NTS2V5d29yZENvbXBsZXRpb25zLmZvclByb3BlcnR5KHRo
aXMubmFtZUVsZW1lbnQudGV4dENvbnRlbnQpKTsKICAgICAgICAgd2luZG93LmdldFNlbGVjdGlv
bigpLnNldEJhc2VBbmRFeHRlbnQoc2VsZWN0RWxlbWVudCwgMCwgc2VsZWN0RWxlbWVudCwgMSk7
CiAgICAgfSwKIAotICAgIGVkaXRpbmdWYWx1ZUtleURvd246IGZ1bmN0aW9uKGV2ZW50KQorICAg
IGVkaXRpbmdOYW1lVmFsdWVLZXlEb3duOiBmdW5jdGlvbihjb250ZXh0LCBldmVudCkKICAgICB7
CiAgICAgICAgIGlmIChldmVudC5oYW5kbGVkKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBpZiAodGhpcy5faGFuZGxlVXBPckRvd25LZXlQcmVzc2VkKGV2ZW50KSkKLSAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICB0aGlzLl9hcHBseUZyZWVGbG93U3R5bGVUZXh0RWRpdChmYWxz
ZSk7CisgICAgICAgIHZhciBpc0VkaXRpbmdOYW1lID0gY29udGV4dC5pc0VkaXRpbmdOYW1lOwor
ICAgICAgICB2YXIgcmVzdWx0OworCisgICAgICAgIGZ1bmN0aW9uIHNob3VsZENvbW1pdFZhbHVl
U2VtaWNvbG9uKHRleHQsIGN1cnNvclBvc2l0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICAv
LyBGSVhNRTogc2hvdWxkIHRoaXMgYWNjb3VudCBmb3Igc2VtaWNvbG9ucyBpbnNpZGUgY29tbWVu
dHM/CisgICAgICAgICAgICB2YXIgb3BlblF1b3RlID0gIiI7CisgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGN1cnNvclBvc2l0aW9uOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIg
Y2ggPSB0ZXh0W2ldOworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gIlxcIiAmJiBvcGVuUXVv
dGUgIT09ICIiKQorICAgICAgICAgICAgICAgICAgICArK2k7IC8vIHNraXAgbmV4dCBjaGFyYWN0
ZXIgaW5zaWRlIHN0cmluZworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFvcGVuUXVvdGUgJiYg
KGNoID09PSAiXCIiIHx8IGNoID09PSAiJyIpKQorICAgICAgICAgICAgICAgICAgICBvcGVuUXVv
dGUgPSBjaDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvcGVuUXVvdGUgPT09IGNoKQorICAg
ICAgICAgICAgICAgICAgICBvcGVuUXVvdGUgPSAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiAhb3BlblF1b3RlOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IHRo
ZSAiOiIvIjsiIGRldGVjdGlvbiBkb2VzIG5vdCB3b3JrIGZvciBub24tVVMgbGF5b3V0cyBkdWUg
dG8gdGhlIGV2ZW50IGJlaW5nIGtleWRvd24gcmF0aGVyIHRoYW4ga2V5cHJlc3MuCisgICAgICAg
IHZhciBpc0ZpZWxkSW5wdXRUZXJtaW5hdGVkID0gKGV2ZW50LmtleUNvZGUgPT09IFdlYkluc3Bl
Y3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuU2VtaWNvbG9uLmNvZGUpICYmCisgICAgICAgICAg
ICAoaXNFZGl0aW5nTmFtZSA/IGV2ZW50LnNoaWZ0S2V5IDogKCFldmVudC5zaGlmdEtleSAmJiBz
aG91bGRDb21taXRWYWx1ZVNlbWljb2xvbihldmVudC50YXJnZXQudGV4dENvbnRlbnQsIGV2ZW50
LnRhcmdldC5zZWxlY3Rpb25MZWZ0T2Zmc2V0KSkpOworICAgICAgICBpZiAoaXNFbnRlcktleShl
dmVudCkgfHwgaXNGaWVsZElucHV0VGVybWluYXRlZCkgeworICAgICAgICAgICAgLy8gRW50ZXIg
b3IgY29sb24gKGZvciBuYW1lKS9zZW1pY29sb24gb3V0c2lkZSBvZiBzdHJpbmcgKGZvciB2YWx1
ZSkuCisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgcmVz
dWx0ID0gImZvcndhcmQiOworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IFdl
Ykluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuRXNjLmNvZGUgfHwgZXZlbnQua2V5SWRl
bnRpZmllciA9PT0gIlUrMDAxQiIpCisgICAgICAgICAgICByZXN1bHQgPSAiY2FuY2VsIjsKKyAg
ICAgICAgZWxzZSBpZiAoIWlzRWRpdGluZ05hbWUgJiYgdGhpcy5fbmV3UHJvcGVydHkgJiYgZXZl
bnQua2V5Q29kZSA9PT0gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5CYWNrc3Bh
Y2UuY29kZSkgeworICAgICAgICAgICAgLy8gRm9yIGEgbmV3IHByb3BlcnR5LCB3aGVuIEJhY2tz
cGFjZSBpcyBwcmVzc2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgbmV3IHByb3BlcnR5IHZhbHVlLCBt
b3ZlIGJhY2sgdG8gdGhlIHByb3BlcnR5IG5hbWUuCisgICAgICAgICAgICB2YXIgc2VsZWN0aW9u
ID0gd2luZG93LmdldFNlbGVjdGlvbigpOworICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0Nv
bGxhcHNlZCAmJiAhc2VsZWN0aW9uLmZvY3VzT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgZXZl
bnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAiYmFja3dhcmQi
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIg
PT09ICJVKzAwMDkiKSB7IC8vIFRhYiBrZXkuCisgICAgICAgICAgICByZXN1bHQgPSBldmVudC5z
aGlmdEtleSA/ICJiYWNrd2FyZCIgOiAiZm9yd2FyZCI7CisgICAgICAgICAgICBldmVudC5wcmV2
ZW50RGVmYXVsdCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAg
ICAgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICAgICAgICAgIGNhc2UgImNhbmNlbCI6CisgICAg
ICAgICAgICAgICAgdGhpcy5lZGl0aW5nQ2FuY2VsbGVkKG51bGwsIGNvbnRleHQpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiZm9yd2FyZCI6CisgICAgICAgICAg
ICBjYXNlICJiYWNrd2FyZCI6CisgICAgICAgICAgICAgICAgdGhpcy5lZGl0aW5nQ29tbWl0dGVk
KG51bGwsIGV2ZW50LnRhcmdldC50ZXh0Q29udGVudCwgY29udGV4dC5wcmV2aW91c0NvbnRlbnQs
IGNvbnRleHQsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICB9CiAgICAg
fSwKIAogICAgIF9hcHBseUZyZWVGbG93U3R5bGVUZXh0RWRpdDogZnVuY3Rpb24obm93KQpAQCAt
MTk0NSw3MSArMTk2MSw2IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQu
cHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9hcHBseUZyZWVGbG93U3R5bGVUZXh0RWRpdCh0
cnVlKTsKICAgICB9LAogCi0gICAgX2hhbmRsZVVwT3JEb3duS2V5UHJlc3NlZDogZnVuY3Rpb24o
ZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgYXJyb3dLZXlQcmVzc2VkID0gKGV2ZW50LmtleUlk
ZW50aWZpZXIgPT09ICJVcCIgfHwgZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIkRvd24iKTsKLSAg
ICAgICAgdmFyIHBhZ2VLZXlQcmVzc2VkID0gKGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJQYWdl
VXAiIHx8IGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJQYWdlRG93biIpOwotICAgICAgICBpZiAo
IWFycm93S2V5UHJlc3NlZCAmJiAhcGFnZUtleVByZXNzZWQpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsK
LSAgICAgICAgaWYgKCFzZWxlY3Rpb24ucmFuZ2VDb3VudCkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICB2YXIgc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VB
dCgwKTsKLSAgICAgICAgaWYgKHNlbGVjdGlvblJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVy
ICE9PSB0aGlzLnZhbHVlRWxlbWVudCAmJiAhc2VsZWN0aW9uUmFuZ2UuY29tbW9uQW5jZXN0b3JD
b250YWluZXIuaXNEZXNjZW5kYW50KHRoaXMudmFsdWVFbGVtZW50KSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICB2YXIgd29yZFJhbmdlID0gc2VsZWN0aW9uUmFuZ2Uuc3Rh
cnRDb250YWluZXIucmFuZ2VPZldvcmQoc2VsZWN0aW9uUmFuZ2Uuc3RhcnRPZmZzZXQsIFdlYklu
c3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5TdHlsZVZhbHVlRGVsaW1pdGVycywgdGhpcy52YWx1
ZUVsZW1lbnQpOwotICAgICAgICB2YXIgd29yZFN0cmluZyA9IHdvcmRSYW5nZS50b1N0cmluZygp
OwotICAgICAgICB2YXIgcmVwbGFjZW1lbnRTdHJpbmc7Ci0gICAgICAgIHZhciBwcmVmaXgsIHN1
ZmZpeCwgbnVtYmVyOwotCi0gICAgICAgIHZhciBtYXRjaGVzOwotICAgICAgICBtYXRjaGVzID0g
LyguKiMpKFtcZGEtZkEtRl0rKSguKikvLmV4ZWMod29yZFN0cmluZyk7Ci0gICAgICAgIGlmICht
YXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICBwcmVmaXggPSBtYXRjaGVz
WzFdOwotICAgICAgICAgICAgc3VmZml4ID0gbWF0Y2hlc1szXTsKLSAgICAgICAgICAgIG51bWJl
ciA9IFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5hbHRlcmVkSGV4TnVtYmVyKG1hdGNo
ZXNbMl0sIGV2ZW50KTsKLQotICAgICAgICAgICAgcmVwbGFjZW1lbnRTdHJpbmcgPSBwcmVmaXgg
KyBudW1iZXIgKyBzdWZmaXg7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtYXRjaGVz
ID0gLyguKj8pKC0/KD86XGQrKD86XC5cZCspP3xcLlxkKykpKC4qKS8uZXhlYyh3b3JkU3RyaW5n
KTsKLSAgICAgICAgICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoKSB7Ci0gICAgICAg
ICAgICAgICAgcHJlZml4ID0gbWF0Y2hlc1sxXTsKLSAgICAgICAgICAgICAgICBzdWZmaXggPSBt
YXRjaGVzWzNdOwotICAgICAgICAgICAgICAgIG51bWJlciA9IFdlYkluc3BlY3Rvci5TdHlsZXNT
aWRlYmFyUGFuZS5hbHRlcmVkRmxvYXROdW1iZXIocGFyc2VGbG9hdChtYXRjaGVzWzJdKSwgZXZl
bnQpOwotICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IG51bGwpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gTmVlZCB0byBjaGVjayBmb3IgbnVsbCBleHBsaWNpdGx5LgotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgcmVwbGFjZW1lbnRTdHJpbmcgPSBwcmVmaXggKyBudW1iZXIgKyBzdWZmaXg7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVwbGFjZW1lbnRTdHJpbmcpIHsK
LSAgICAgICAgICAgIHZhciByZXBsYWNlbWVudFRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUocmVwbGFjZW1lbnRTdHJpbmcpOwotCi0gICAgICAgICAgICB3b3JkUmFuZ2UuZGVsZXRl
Q29udGVudHMoKTsKLSAgICAgICAgICAgIHdvcmRSYW5nZS5pbnNlcnROb2RlKHJlcGxhY2VtZW50
VGV4dE5vZGUpOwotCi0gICAgICAgICAgICB2YXIgZmluYWxTZWxlY3Rpb25SYW5nZSA9IGRvY3Vt
ZW50LmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgICAgICBmaW5hbFNlbGVjdGlvblJhbmdlLnNldFN0
YXJ0KHJlcGxhY2VtZW50VGV4dE5vZGUsIDApOwotICAgICAgICAgICAgZmluYWxTZWxlY3Rpb25S
YW5nZS5zZXRFbmQocmVwbGFjZW1lbnRUZXh0Tm9kZSwgcmVwbGFjZW1lbnRTdHJpbmcubGVuZ3Ro
KTsKLQotICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwotICAgICAgICAg
ICAgc2VsZWN0aW9uLmFkZFJhbmdlKGZpbmFsU2VsZWN0aW9uUmFuZ2UpOwotCi0gICAgICAgICAg
ICBldmVudC5oYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0
KCk7Ci0KLSAgICAgICAgICAgIC8vIFN5bnRoZXNpemUgcHJvcGVydHkgdGV4dCBkaXNyZWdhcmRp
bmcgYW55IGNvbW1lbnRzLCBjdXN0b20gd2hpdGVzcGFjZSBldGMuCi0gICAgICAgICAgICB0aGlz
LmFwcGx5U3R5bGVUZXh0KHRoaXMubmFtZUVsZW1lbnQudGV4dENvbnRlbnQgKyAiOiAiICsgdGhp
cy52YWx1ZUVsZW1lbnQudGV4dENvbnRlbnQsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0sCi0KICAgICBlZGl0aW5nRW5kZWQ6IGZ1
bmN0aW9uKGNvbnRleHQpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fYXBwbHlGcmVlRmxvd1N0
eWxlVGV4dEVkaXRUaW1lcikKQEAgLTIwMTksOCArMTk3MCw3IEBAIFdlYkluc3BlY3Rvci5TdHls
ZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICBpZiAoY29udGV4dC5l
eHBhbmRlZCkKICAgICAgICAgICAgIHRoaXMuZXhwYW5kKCk7CiAgICAgICAgIHZhciBlZGl0ZWRF
bGVtZW50ID0gY29udGV4dC5pc0VkaXRpbmdOYW1lID8gdGhpcy5uYW1lRWxlbWVudCA6IHRoaXMu
dmFsdWVFbGVtZW50OwotICAgICAgICBpZiAoIWNvbnRleHQuaXNFZGl0aW5nTmFtZSkKLSAgICAg
ICAgICAgIGVkaXRlZEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGNvbnRl
eHQua2V5RG93bkxpc3RlbmVyLCBmYWxzZSk7CisgICAgICAgIC8vIFRoZSBwcm94eUVsZW1lbnQg
aGFzIGJlZW4gZGVsZXRlZCwgbm8gbmVlZCB0byByZW1vdmUgbGlzdGVuZXIuCiAgICAgICAgIGlm
IChlZGl0ZWRFbGVtZW50LnBhcmVudEVsZW1lbnQpCiAgICAgICAgICAgICBlZGl0ZWRFbGVtZW50
LnBhcmVudEVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiY2hpbGQtZWRpdGluZyIpOwogCkBAIC0y
MTYwLDcgKzIxMTAsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnBy
b3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIC8vIEJVRyA1MzI0Mi4gVGhpcyBjYW5ub3QgZ28g
aW50byBlZGl0aW5nRW5kZWQoKSwgYXMgaXQgc2hvdWxkIGFsd2F5cyBoYXBwZW4gZmlyc3QgZm9y
IGFueSBlZGl0aW5nIG91dGNvbWUuCiAgICAgICAgIGlmICh0aGlzLl9wcm9tcHQpIHsKLSAgICAg
ICAgICAgIHRoaXMuX3Byb21wdC5yZW1vdmVGcm9tRWxlbWVudCgpOworICAgICAgICAgICAgdGhp
cy5fcHJvbXB0LmRldGFjaCgpOwogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3Byb21wdDsKICAg
ICAgICAgfQogICAgIH0sCkBAIC0yMTg3LDYgKzIxMzcsOSBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQ
cm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMub3JpZ2lu
YWxQcm9wZXJ0eVRleHQgPSB0aGlzLnByb3BlcnR5LnByb3BlcnR5VGV4dDsKICAgICAgICAgfQog
CisgICAgICAgIGlmICghdGhpcy50cmVlT3V0bGluZSkKKyAgICAgICAgICAgIHJldHVybjsKKwog
ICAgICAgICB2YXIgc2VjdGlvbiA9IHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbjsKICAgICAgICAg
dmFyIGVsZW1lbnRzUGFuZWwgPSBXZWJJbnNwZWN0b3IucGFuZWxzLmVsZW1lbnRzOwogICAgICAg
ICBzdHlsZVRleHQgPSBzdHlsZVRleHQucmVwbGFjZSgvXHMvZywgIiAiKS50cmltKCk7IC8vIFJl
cGxhY2UgJm5ic3A7IHdpdGggd2hpdGVzcGFjZS4KQEAgLTIyNDIsMzAgKzIxOTUsNDAgQEAgV2Vi
SW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUuX19wcm90b19fID0g
VHJlZUVsZW1lbnQucHJvdG90eXAKICAqIEBjb25zdHJ1Y3RvcgogICogQGV4dGVuZHMge1dlYklu
c3BlY3Rvci5UZXh0UHJvbXB0fQogICovCi1XZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUu
Q1NTUHJvcGVydHlQcm9tcHQgPSBmdW5jdGlvbihlbGVtZW50LCBjc3NDb21wbGV0aW9ucykKK1dl
Ykluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5DU1NQcm9wZXJ0eVByb21wdCA9IGZ1bmN0aW9u
KGNzc0NvbXBsZXRpb25zLCBzaWRlYmFyUGFuZSwgaXNFZGl0aW5nTmFtZSkKIHsKLSAgICBXZWJJ
bnNwZWN0b3IuVGV4dFByb21wdC5jYWxsKHRoaXMsIGVsZW1lbnQsIHRoaXMuX2J1aWxkUHJvcGVy
dHlDb21wbGV0aW9ucy5iaW5kKHRoaXMpLCBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUu
U3R5bGVWYWx1ZURlbGltaXRlcnMsIHRydWUpOworICAgIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0
LmNhbGwodGhpcywgdGhpcy5fYnVpbGRQcm9wZXJ0eUNvbXBsZXRpb25zLmJpbmQodGhpcyksIFdl
Ykluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5TdHlsZVZhbHVlRGVsaW1pdGVycyk7CiAgICAg
dGhpcy5fY3NzQ29tcGxldGlvbnMgPSBjc3NDb21wbGV0aW9uczsKKyAgICB0aGlzLl9zaWRlYmFy
UGFuZSA9IHNpZGViYXJQYW5lOworICAgIHRoaXMuX2lzRWRpdGluZ05hbWUgPSBpc0VkaXRpbmdO
YW1lOwogfQogCiBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUuQ1NTUHJvcGVydHlQcm9t
cHQucHJvdG90eXBlID0gewotICAgIHVwS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAg
ewotICAgICAgICB0aGlzLl9oYW5kbGVOYW1lT3JWYWx1ZVVwRG93bihldmVudCk7Ci0gICAgfSwK
LQotICAgIGRvd25LZXlQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuX2hhbmRsZU5hbWVPclZhbHVlVXBEb3duKGV2ZW50KTsKLSAgICB9LAorICAgIG9uS2V5RG93
bjogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUlkZW50
aWZpZXIpIHsKKyAgICAgICAgY2FzZSAiVXAiOgorICAgICAgICBjYXNlICJEb3duIjoKKyAgICAg
ICAgY2FzZSAiUGFnZVVwIjoKKyAgICAgICAgY2FzZSAiUGFnZURvd24iOgorICAgICAgICAgICAg
aWYgKHRoaXMuX2hhbmRsZU5hbWVPclZhbHVlVXBEb3duKGV2ZW50KSkgeworICAgICAgICAgICAg
ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIlUrMDAwOSI6Cisg
ICAgICAgICAgICB0aGlzLmFjY2VwdEF1dG9Db21wbGV0ZSgpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CiAKLSAgICB0YWJLZXlQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7
Ci0gICAgICAgIHRoaXMuYWNjZXB0QXV0b0NvbXBsZXRlKCk7CisgICAgICAgIFdlYkluc3BlY3Rv
ci5UZXh0UHJvbXB0LnByb3RvdHlwZS5vbktleURvd24uY2FsbCh0aGlzLCBldmVudCk7CiAgICAg
fSwKIAogICAgIF9oYW5kbGVOYW1lT3JWYWx1ZVVwRG93bjogZnVuY3Rpb24oZXZlbnQpCiAgICAg
eworICAgICAgICBpZiAoIXRoaXMuX2lzRWRpdGluZ05hbWUgJiYgdGhpcy5faGFuZGxlVXBPckRv
d25WYWx1ZShldmVudCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgICAgICB2YXIg
cmV2ZXJzZSA9IGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJVcCI7CiAgICAgICAgIGlmICh0aGlz
LmF1dG9Db21wbGV0ZUVsZW1lbnQpCiAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlKGZhbHNlLCBy
ZXZlcnNlKTsgLy8gQWNjZXB0IHRoZSBjdXJyZW50IHN1Z2dlc3Rpb24sIGlmIGFueS4KQEAgLTIy
NzUsNyArMjIzOCw3NCBAQCBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUuQ1NTUHJvcGVy
dHlQcm9tcHQucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgdGhpcy5jb21wbGV0
ZShmYWxzZSwgcmV2ZXJzZSk7IC8vIEFjdHVhbGx5IGluY3JlbWVudC9kZWNyZW1lbnQgdGhlIHN1
Z2dlc3Rpb24uCi0gICAgICAgIGV2ZW50LmhhbmRsZWQgPSB0cnVlOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9LAorCisgICAgX2hhbmRsZVVwT3JEb3duVmFsdWU6IGZ1bmN0aW9uKGV2ZW50
KQorICAgIHsKKyAgICAgICAgdmFyIGFycm93S2V5UHJlc3NlZCA9IChldmVudC5rZXlJZGVudGlm
aWVyID09PSAiVXAiIHx8IGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJEb3duIik7CisgICAgICAg
IHZhciBwYWdlS2V5UHJlc3NlZCA9IChldmVudC5rZXlJZGVudGlmaWVyID09PSAiUGFnZVVwIiB8
fCBldmVudC5rZXlJZGVudGlmaWVyID09PSAiUGFnZURvd24iKTsKKyAgICAgICAgaWYgKCFhcnJv
d0tleVByZXNzZWQgJiYgIXBhZ2VLZXlQcmVzc2VkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisgICAg
ICAgIGlmICghc2VsZWN0aW9uLnJhbmdlQ291bnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgdmFyIHNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7
CisgICAgICAgIGlmIChzZWxlY3Rpb25SYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lciAhPT0g
dGhpcy5fc2lkZWJhclBhbmUudmFsdWVFbGVtZW50ICYmICFzZWxlY3Rpb25SYW5nZS5jb21tb25B
bmNlc3RvckNvbnRhaW5lci5pc0Rlc2NlbmRhbnQodGhpcy5fc2lkZWJhclBhbmUudmFsdWVFbGVt
ZW50KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB2YXIgd29yZFJhbmdl
ID0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRDb250YWluZXIucmFuZ2VPZldvcmQoc2VsZWN0aW9uUmFu
Z2Uuc3RhcnRPZmZzZXQsIFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5TdHlsZVZhbHVl
RGVsaW1pdGVycywgdGhpcy5fc2lkZWJhclBhbmUudmFsdWVFbGVtZW50KTsKKyAgICAgICAgdmFy
IHdvcmRTdHJpbmcgPSB3b3JkUmFuZ2UudG9TdHJpbmcoKTsKKyAgICAgICAgdmFyIHJlcGxhY2Vt
ZW50U3RyaW5nOworICAgICAgICB2YXIgcHJlZml4LCBzdWZmaXgsIG51bWJlcjsKKworICAgICAg
ICB2YXIgbWF0Y2hlczsKKyAgICAgICAgbWF0Y2hlcyA9IC8oLiojKShbXGRhLWZBLUZdKykoLiop
Ly5leGVjKHdvcmRTdHJpbmcpOworICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0
aCkgeworICAgICAgICAgICAgcHJlZml4ID0gbWF0Y2hlc1sxXTsKKyAgICAgICAgICAgIHN1ZmZp
eCA9IG1hdGNoZXNbM107CisgICAgICAgICAgICBudW1iZXIgPSBXZWJJbnNwZWN0b3IuU3R5bGVz
U2lkZWJhclBhbmUuYWx0ZXJlZEhleE51bWJlcihtYXRjaGVzWzJdLCBldmVudCk7CisKKyAgICAg
ICAgICAgIHJlcGxhY2VtZW50U3RyaW5nID0gcHJlZml4ICsgbnVtYmVyICsgc3VmZml4OworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWF0Y2hlcyA9IC8oLio/KSgtPyg/OlxkKyg/Olwu
XGQrKT98XC5cZCspKSguKikvLmV4ZWMod29yZFN0cmluZyk7CisgICAgICAgICAgICBpZiAobWF0
Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIHByZWZpeCA9IG1hdGNo
ZXNbMV07CisgICAgICAgICAgICAgICAgc3VmZml4ID0gbWF0Y2hlc1szXTsKKyAgICAgICAgICAg
ICAgICBudW1iZXIgPSBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUuYWx0ZXJlZEZsb2F0
TnVtYmVyKHBhcnNlRmxvYXQobWF0Y2hlc1syXSksIGV2ZW50KTsKKyAgICAgICAgICAgICAgICBp
ZiAobnVtYmVyID09PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gY2hl
Y2sgZm9yIG51bGwgZXhwbGljaXRseS4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50U3RyaW5n
ID0gcHJlZml4ICsgbnVtYmVyICsgc3VmZml4OworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgaWYgKHJlcGxhY2VtZW50U3RyaW5nKSB7CisgICAgICAgICAgICB2YXIgcmVwbGFj
ZW1lbnRUZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJlcGxhY2VtZW50U3RyaW5n
KTsKKworICAgICAgICAgICAgd29yZFJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7CisgICAgICAgICAg
ICB3b3JkUmFuZ2UuaW5zZXJ0Tm9kZShyZXBsYWNlbWVudFRleHROb2RlKTsKKworICAgICAgICAg
ICAgdmFyIGZpbmFsU2VsZWN0aW9uUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOworICAg
ICAgICAgICAgZmluYWxTZWxlY3Rpb25SYW5nZS5zZXRTdGFydChyZXBsYWNlbWVudFRleHROb2Rl
LCAwKTsKKyAgICAgICAgICAgIGZpbmFsU2VsZWN0aW9uUmFuZ2Uuc2V0RW5kKHJlcGxhY2VtZW50
VGV4dE5vZGUsIHJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCk7CisKKyAgICAgICAgICAgIHNlbGVj
dGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKKyAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShm
aW5hbFNlbGVjdGlvblJhbmdlKTsKKworICAgICAgICAgICAgZXZlbnQuaGFuZGxlZCA9IHRydWU7
CisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworCisgICAgICAgICAgICAvLyBT
eW50aGVzaXplIHByb3BlcnR5IHRleHQgZGlzcmVnYXJkaW5nIGFueSBjb21tZW50cywgY3VzdG9t
IHdoaXRlc3BhY2UgZXRjLgorICAgICAgICAgICAgdGhpcy5fc2lkZWJhclBhbmUuYXBwbHlTdHls
ZVRleHQodGhpcy5fc2lkZWJhclBhbmUubmFtZUVsZW1lbnQudGV4dENvbnRlbnQgKyAiOiAiICsg
dGhpcy5fc2lkZWJhclBhbmUudmFsdWVFbGVtZW50LnRleHRDb250ZW50LCBmYWxzZSwgZmFsc2Us
IGZhbHNlKTsKKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0sCiAKICAgICBfc2VsZWN0Q3VycmVudFdvcmRTdWZmaXg6IGZ1
bmN0aW9uKCkKQEAgLTIyODUsOSArMjMxNSw5IEBAIFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFy
UGFuZS5DU1NQcm9wZXJ0eVByb21wdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgdmFyIHNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7
Ci0gICAgICAgIGlmICghc2VsZWN0aW9uUmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIuaXNE
ZXNjZW5kYW50KHRoaXMuZWxlbWVudCkpCisgICAgICAgIGlmICghc2VsZWN0aW9uUmFuZ2UuY29t
bW9uQW5jZXN0b3JDb250YWluZXIuaXNEZXNjZW5kYW50KHRoaXMuX2VsZW1lbnQpKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgd29yZFN1ZmZpeFJhbmdlID0gc2VsZWN0aW9uUmFu
Z2Uuc3RhcnRDb250YWluZXIucmFuZ2VPZldvcmQoc2VsZWN0aW9uUmFuZ2Uuc3RhcnRPZmZzZXQs
IFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5TdHlsZVZhbHVlRGVsaW1pdGVycywgdGhp
cy5lbGVtZW50LCAiZm9yd2FyZCIpOworICAgICAgICB2YXIgd29yZFN1ZmZpeFJhbmdlID0gc2Vs
ZWN0aW9uUmFuZ2Uuc3RhcnRDb250YWluZXIucmFuZ2VPZldvcmQoc2VsZWN0aW9uUmFuZ2Uuc3Rh
cnRPZmZzZXQsIFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5TdHlsZVZhbHVlRGVsaW1p
dGVycywgdGhpcy5fZWxlbWVudCwgImZvcndhcmQiKTsKICAgICAgICAgaWYgKCF3b3JkU3VmZml4
UmFuZ2UudG9TdHJpbmcoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgc2VsZWN0aW9u
LnJlbW92ZUFsbFJhbmdlcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9UZXh0UHJvbXB0LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9UZXh0UHJvbXB0LmpzCmluZGV4IGZkMGRiYjAuLjAzOTE3NDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFByb21wdC5qcworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRQcm9tcHQuanMKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDY4ICsyOSwxNjcg
QEAKIAogLyoqCiAgKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7Ym9vbGVhbj19IG9taXRIaXN0
b3J5CisgKiBAcGFyYW0ge2Z1bmN0aW9uKFJhbmdlLCBib29sZWFuLCBmdW5jdGlvbigqKSl9IGNv
bXBsZXRpb25zCisgKiBAcGFyYW0ge3N0cmluZ30gc3RvcENoYXJhY3RlcnMKICAqLwotV2ViSW5z
cGVjdG9yLlRleHRQcm9tcHQgPSBmdW5jdGlvbihlbGVtZW50LCBjb21wbGV0aW9ucywgc3RvcENo
YXJhY3RlcnMsIG9taXRIaXN0b3J5KQorV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQgPSBmdW5jdGlv
bihjb21wbGV0aW9ucywgc3RvcENoYXJhY3RlcnMpCiB7Ci0gICAgdGhpcy5lbGVtZW50ID0gZWxl
bWVudDsKLSAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygidGV4dC1wcm9tcHQiKTsKLSAg
ICB0aGlzLmNvbXBsZXRpb25zID0gY29tcGxldGlvbnM7Ci0gICAgdGhpcy5jb21wbGV0aW9uU3Rv
cENoYXJhY3RlcnMgPSBzdG9wQ2hhcmFjdGVyczsKLSAgICBpZiAoIW9taXRIaXN0b3J5KSB7Ci0g
ICAgICAgIHRoaXMuaGlzdG9yeSA9IFtdOwotICAgICAgICB0aGlzLmhpc3RvcnlPZmZzZXQgPSAw
OwotICAgIH0KLSAgICB0aGlzLl9ib3VuZE9uS2V5RG93biA9IHRoaXMuX29uS2V5RG93bi5iaW5k
KHRoaXMpOwotICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhp
cy5fYm91bmRPbktleURvd24sIHRydWUpOworICAgIC8qKgorICAgICAqIEB0eXBlIHtFbGVtZW50
fHVuZGVmaW5lZH0KKyAgICAgKi8KKyAgICB0aGlzLl9wcm94eUVsZW1lbnQ7CisgICAgdGhpcy5f
bG9hZENvbXBsZXRpb25zID0gY29tcGxldGlvbnM7CisgICAgdGhpcy5fY29tcGxldGlvblN0b3BD
aGFyYWN0ZXJzID0gc3RvcENoYXJhY3RlcnM7CiB9CiAKIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0
LnByb3RvdHlwZSA9IHsKKyAgICBnZXQgcHJveHlFbGVtZW50KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9wcm94eUVsZW1lbnQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIENsaWVu
dHMgc2hvdWxkIG5ldmVyIGF0dGFjaCBhbnkgZXZlbnQgbGlzdGVuZXJzIHRvIHRoZSB8ZWxlbWVu
dHwuIEluc3RlYWQsCisgICAgICogdGhleSBzaG91bGQgdXNlIHRoZSByZXN1bHQgb2YgdGhpcyBt
ZXRob2QgdG8gYXR0YWNoIGxpc3RlbmVycyBmb3IgYnViYmxpbmcgZXZlbnRzLgorICAgICAqCisg
ICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50CisgICAgICovCisgICAgYXR0YWNoOiBmdW5j
dGlvbihlbGVtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFjaEludGVybmFs
KGVsZW1lbnQpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBDbGllbnRzIHNob3VsZCBuZXZl
ciBhdHRhY2ggYW55IGV2ZW50IGxpc3RlbmVycyB0byB0aGUgfGVsZW1lbnR8LiBJbnN0ZWFkLAor
ICAgICAqIHRoZXkgc2hvdWxkIHVzZSB0aGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kIHRvIGF0dGFj
aCBsaXN0ZW5lcnMgZm9yIGJ1YmJsaW5nIGV2ZW50cworICAgICAqIG9yIHRoZSB8Ymx1ckxpc3Rl
bmVyfCBwYXJhbWV0ZXIgdG8gcmVnaXN0ZXIgYSAiYmx1ciIgZXZlbnQgbGlzdGVuZXIgb24gdGhl
IHxlbGVtZW50fAorICAgICAqIChzaW5jZSB0aGUgImJsdXIiIGV2ZW50IGRvZXMgbm90IGJ1YmJs
ZS4pCisgICAgICoKKyAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQKKyAgICAgKiBAcGFy
YW0ge2Z1bmN0aW9uKEV2ZW50KX0gYmx1ckxpc3RlbmVyCisgICAgICovCisgICAgYXR0YWNoQW5k
U3RhcnRFZGl0aW5nOiBmdW5jdGlvbihlbGVtZW50LCBibHVyTGlzdGVuZXIpCisgICAgeworICAg
ICAgICB0aGlzLl9hdHRhY2hJbnRlcm5hbChlbGVtZW50KTsKKyAgICAgICAgdGhpcy5fc3RhcnRF
ZGl0aW5nKGJsdXJMaXN0ZW5lcik7CisgICAgICAgIHJldHVybiB0aGlzLnByb3h5RWxlbWVudDsK
KyAgICB9LAorCisgICAgX2F0dGFjaEludGVybmFsOiBmdW5jdGlvbihlbGVtZW50KQorICAgIHsK
KyAgICAgICAgaWYgKHRoaXMucHJveHlFbGVtZW50KQorICAgICAgICAgICAgdGhyb3cgIkNhbm5v
dCBhdHRhY2ggYW4gYXR0YWNoZWQgVGV4dFByb21wdCI7CisgICAgICAgIHRoaXMuX2VsZW1lbnQg
PSBlbGVtZW50OworCisgICAgICAgIHRoaXMuX2JvdW5kT25LZXlEb3duID0gdGhpcy5vbktleURv
d24uYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5fYm91bmRTZWxlY3RTdGFydCA9IHRoaXMuX3Nl
bGVjdFN0YXJ0LmJpbmQodGhpcyk7CisgICAgICAgIHRoaXMuX3Byb3h5RWxlbWVudCA9IGVsZW1l
bnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgIHRoaXMuX3By
b3h5RWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gImlubGluZS1ibG9jayI7CisgICAgICAgIGVsZW1l
bnQucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5wcm94eUVsZW1lbnQsIGVsZW1lbnQp
OworICAgICAgICB0aGlzLnByb3h5RWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50KTsKKyAgICAg
ICAgdGhpcy5fZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJ0ZXh0LXByb21wdCIpOworICAgICAgICB0
aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9ib3VuZE9uS2V5
RG93biwgdHJ1ZSk7CisgICAgICAgIHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2Vs
ZWN0c3RhcnQiLCB0aGlzLl9zZWxlY3RTdGFydC5iaW5kKHRoaXMpLCBmYWxzZSk7CisgICAgICAg
IHJldHVybiB0aGlzLnByb3h5RWxlbWVudDsKKyAgICB9LAorCisgICAgZGV0YWNoOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICB0aGlzLl9yZW1vdmVGcm9tRWxlbWVudCgpOworICAgICAgICB0
aGlzLnByb3h5RWxlbWVudC5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLl9lbGVtZW50
LCB0aGlzLnByb3h5RWxlbWVudCk7CisgICAgICAgIHRoaXMucHJveHlFbGVtZW50LnBhcmVudEVs
ZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5wcm94eUVsZW1lbnQpOworICAgICAgICBkZWxldGUgdGhp
cy5fcHJveHlFbGVtZW50OworICAgICAgICBpZiAodGhpcy5fZWxlbWVudCA9PT0gV2ViSW5zcGVj
dG9yLmN1cnJlbnRGb2N1c0VsZW1lbnQgfHwgdGhpcy5fZWxlbWVudC5pc0FuY2VzdG9yKFdlYklu
c3BlY3Rvci5jdXJyZW50Rm9jdXNFbGVtZW50KSkKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5j
dXJyZW50Rm9jdXNFbGVtZW50ID0gV2ViSW5zcGVjdG9yLnByZXZpb3VzRm9jdXNFbGVtZW50Owor
ICAgIH0sCisKICAgICBnZXQgdGV4dCgpCiAgICAgewotICAgICAgICByZXR1cm4gdGhpcy5lbGVt
ZW50LnRleHRDb250ZW50OworICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudC50ZXh0Q29udGVu
dDsKICAgICB9LAogCiAgICAgc2V0IHRleHQoeCkKICAgICB7CisgICAgICAgIHRoaXMuY2xlYXJB
dXRvQ29tcGxldGUodHJ1ZSk7CiAgICAgICAgIGlmICgheCkgewogICAgICAgICAgICAgLy8gQXBw
ZW5kIGEgYnJlYWsgZWxlbWVudCBpbnN0ZWFkIG9mIHNldHRpbmcgdGV4dENvbnRlbnQgdG8gbWFr
ZSBzdXJlIHRoZSBzZWxlY3Rpb24gaXMgaW5zaWRlIHRoZSBwcm9tcHQuCi0gICAgICAgICAgICB0
aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgIHRoaXMuZWxlbWVudC5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKKyAgICAgICAgICAgIHRo
aXMuX2VsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQu
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7CiAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgdGhpcy5lbGVtZW50LnRleHRDb250ZW50ID0geDsKKyAgICAgICAgICAg
IHRoaXMuX2VsZW1lbnQudGV4dENvbnRlbnQgPSB4OwogCiAgICAgICAgIHRoaXMubW92ZUNhcmV0
VG9FbmRPZlByb21wdCgpOworICAgICAgICB0aGlzLl9lbGVtZW50LnNjcm9sbEludG9WaWV3KCk7
CiAgICAgfSwKIAotICAgIHJlbW92ZUZyb21FbGVtZW50OiBmdW5jdGlvbigpCisgICAgX3JlbW92
ZUZyb21FbGVtZW50OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLmNsZWFyQXV0b0Nv
bXBsZXRlKHRydWUpOwotICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigi
a2V5ZG93biIsIHRoaXMuX2JvdW5kT25LZXlEb3duLCB0cnVlKTsKKyAgICAgICAgdGhpcy5fZWxl
bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fYm91bmRPbktleURvd24s
IGZhbHNlKTsKKyAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxl
Y3RzdGFydCIsIHRoaXMuX2JvdW5kU2VsZWN0U3RhcnQsIGZhbHNlKTsKKyAgICAgICAgaWYgKHRo
aXMuX2lzRWRpdGluZykKKyAgICAgICAgICAgIHRoaXMuX3N0b3BFZGl0aW5nKCk7CisgICAgfSwK
KworICAgIF9zdGFydEVkaXRpbmc6IGZ1bmN0aW9uKGJsdXJMaXN0ZW5lcikKKyAgICB7CisgICAg
ICAgIGlmICghV2ViSW5zcGVjdG9yLm1hcmtCZWluZ0VkaXRlZCh0aGlzLl9lbGVtZW50LCB0cnVl
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5faXNFZGl0aW5nID0gdHJ1ZTsK
KyAgICAgICAgdGhpcy5fZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJlZGl0aW5nIik7CisgICAgICAg
IGlmIChibHVyTGlzdGVuZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX2JsdXJMaXN0ZW5lciA9IGJs
dXJMaXN0ZW5lcjsKKyAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigi
Ymx1ciIsIHRoaXMuX2JsdXJMaXN0ZW5lciwgZmFsc2UpOworICAgICAgICB9CisgICAgICAgIHRo
aXMuX29sZFRhYkluZGV4ID0gdGhpcy5fZWxlbWVudC50YWJJbmRleDsKKyAgICAgICAgaWYgKHRo
aXMuX2VsZW1lbnQudGFiSW5kZXggPCAwKQorICAgICAgICAgICAgdGhpcy5fZWxlbWVudC50YWJJ
bmRleCA9IDA7CisgICAgICAgIFdlYkluc3BlY3Rvci5jdXJyZW50Rm9jdXNFbGVtZW50ID0gdGhp
cy5fZWxlbWVudDsKKyAgICB9LAorCisgICAgX3N0b3BFZGl0aW5nOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICB0aGlzLl9lbGVtZW50LnRhYkluZGV4ID0gdGhpcy5fb2xkVGFiSW5kZXg7Cisg
ICAgICAgIGlmICh0aGlzLl9ibHVyTGlzdGVuZXIpCisgICAgICAgICAgICB0aGlzLl9lbGVtZW50
LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLCB0aGlzLl9ibHVyTGlzdGVuZXIsIGZhbHNlKTsK
KyAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJlZGl0aW5nIik7CisgICAg
ICAgIGRlbGV0ZSB0aGlzLl9pc0VkaXRpbmc7CisgICAgICAgIFdlYkluc3BlY3Rvci5tYXJrQmVp
bmdFZGl0ZWQodGhpcy5fZWxlbWVudCwgZmFsc2UpOwogICAgIH0sCiAKLSAgICBfb25LZXlEb3du
OiBmdW5jdGlvbihldmVudCkKKyAgICBfc2VsZWN0U3RhcnQ6IGZ1bmN0aW9uKGV2ZW50KQogICAg
IHsKLSAgICAgICAgZnVuY3Rpb24gZGVmYXVsdEFjdGlvbigpCisgICAgICAgIGlmICh0aGlzLl9z
ZWxlY3Rpb25UaW1lb3V0KQorICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NlbGVjdGlv
blRpbWVvdXQpOworCisgICAgICAgIHRoaXMuY2xlYXJBdXRvQ29tcGxldGUoKTsKKworICAgICAg
ICBmdW5jdGlvbiBtb3ZlQmFja0lmT3V0c2lkZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRo
aXMuY2xlYXJBdXRvQ29tcGxldGUoKTsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zZWxlY3Rp
b25UaW1lb3V0OworICAgICAgICAgICAgaWYgKCF0aGlzLmlzQ2FyZXRJbnNpZGVQcm9tcHQoKSAm
JiB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpCisgICAgICAgICAgICAgICAgdGhp
cy5tb3ZlQ2FyZXRUb0VuZE9mUHJvbXB0KCk7CiAgICAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0
ZVNvb24oKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChldmVudC5oYW5kbGVkKQotICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLl9zZWxlY3Rpb25UaW1lb3V0ID0gc2V0VGltZW91
dChtb3ZlQmFja0lmT3V0c2lkZS5iaW5kKHRoaXMpLCAxMDApOworICAgIH0sCisKKyAgICBkZWZh
dWx0S2V5SGFuZGxlcjogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB0aGlzLmNsZWFy
QXV0b0NvbXBsZXRlKCk7CisgICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlU29vbigpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfSwKIAorICAgIG9uS2V5RG93bjogZnVuY3Rpb24oZXZlbnQp
CisgICAgewogICAgICAgICB2YXIgaGFuZGxlZCA9IGZhbHNlOwogCiAgICAgICAgIHN3aXRjaCAo
ZXZlbnQua2V5SWRlbnRpZmllcikgewotICAgICAgICAgICAgY2FzZSAiVXAiOgotICAgICAgICAg
ICAgICAgIHRoaXMudXBLZXlQcmVzc2VkKGV2ZW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgIkRvd24iOgotICAgICAgICAgICAgICAgIHRoaXMuZG93bktleVBy
ZXNzZWQoZXZlbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAi
VSswMDA5IjogLy8gVGFiCi0gICAgICAgICAgICAgICAgdGhpcy50YWJLZXlQcmVzc2VkKGV2ZW50
KTsKKyAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlKGZhbHNlLCBldmVudC5zaGlmdEtleSk7
CisgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlICJSaWdodCI6CiAgICAgICAgICAgICBjYXNlICJFbmQiOgpAQCAt
MTAxLDMwICsyMDEsMTIgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgY2FzZSAiU2hpZnQiOgogICAgICAgICAgICAgY2FzZSAiQ29udHJvbCI6CiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICJVKzAwNTAiOiAvLyBDdHJs
K1AgPSBQcmV2aW91cwotICAgICAgICAgICAgICAgIGlmICh0aGlzLmhpc3RvcnkgJiYgV2ViSW5z
cGVjdG9yLmlzTWFjKCkgJiYgZXZlbnQuY3RybEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiAhZXZl
bnQuYWx0S2V5ICYmICFldmVudC5zaGlmdEtleSkgewotICAgICAgICAgICAgICAgICAgICBoYW5k
bGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUJhY2tJbkhpc3Rvcnko
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGRlZmF1bHRBY3Rpb24uY2FsbCh0aGlzKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgIlUrMDA0RSI6IC8vIEN0cmwrTiA9IE5leHQKLSAgICAgICAg
ICAgICAgICBpZiAodGhpcy5oaXN0b3J5ICYmIFdlYkluc3BlY3Rvci5pc01hYygpICYmIGV2ZW50
LmN0cmxLZXkgJiYgIWV2ZW50Lm1ldGFLZXkgJiYgIWV2ZW50LmFsdEtleSAmJiAhZXZlbnQuc2hp
ZnRLZXkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXMuX21vdmVGb3J3YXJkSW5IaXN0b3J5KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZWZhdWx0QWN0
aW9uLmNhbGwodGhpcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIGRlZmF1bHRBY3Rpb24uY2FsbCh0aGlzKTsKKyAgICAgICAg
ICAgICAgICBoYW5kbGVkID0gdGhpcy5kZWZhdWx0S2V5SGFuZGxlcihldmVudCkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGhhbmRsZWQgfD0gZXZlbnQuaGFu
ZGxlZDsKICAgICAgICAgaWYgKGhhbmRsZWQpIHsKLSAgICAgICAgICAgIGV2ZW50LmhhbmRsZWQg
PSB0cnVlOwogICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAg
IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICB9CkBAIC0xNzIsNyArMjU0LDcgQEAg
V2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJu
OwogCiAgICAgICAgIHRoaXMuX3VzZXJFbnRlcmVkUmFuZ2UuZGVsZXRlQ29udGVudHMoKTsKLSAg
ICAgICAgdGhpcy5lbGVtZW50LnBydW5lRW1wdHlUZXh0Tm9kZXMoKTsKKyAgICAgICAgdGhpcy5f
ZWxlbWVudC5wcnVuZUVtcHR5VGV4dE5vZGVzKCk7CiAKICAgICAgICAgdmFyIHVzZXJUZXh0Tm9k
ZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuX3VzZXJFbnRlcmVkVGV4dCk7CiAgICAg
ICAgIHRoaXMuX3VzZXJFbnRlcmVkUmFuZ2UuaW5zZXJ0Tm9kZSh1c2VyVGV4dE5vZGUpOwpAQCAt
MjAzLDE3ICsyODUsMTcgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHZhciBzZWxlY3Rpb25SYW5nZSA9IHNlbGVj
dGlvbi5nZXRSYW5nZUF0KDApOwotICAgICAgICB2YXIgaXNFbXB0eUlucHV0ID0gc2VsZWN0aW9u
UmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIgPT09IHRoaXMuZWxlbWVudDsgLy8gdGhpcy5l
bGVtZW50IGhhcyBubyBjaGlsZCBUZXh0IG5vZGVzLgorICAgICAgICB2YXIgaXNFbXB0eUlucHV0
ID0gc2VsZWN0aW9uUmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIgPT09IHRoaXMuX2VsZW1l
bnQ7IC8vIHRoaXMuX2VsZW1lbnQgaGFzIG5vIGNoaWxkIFRleHQgbm9kZXMuCiAKICAgICAgICAg
Ly8gRG8gbm90IGF0dGVtcHQgdG8gYXV0by1jb21wbGV0ZSBhbiBlbXB0eSBpbnB1dCBpbiB0aGUg
YXV0byBtb2RlIChvbmx5IG9uIGRlbWFuZCkuCiAgICAgICAgIGlmIChhdXRvICYmIGlzRW1wdHlJ
bnB1dCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKCFhdXRvICYmICFpc0VtcHR5
SW5wdXQgJiYgIXNlbGVjdGlvblJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLmlzRGVzY2Vu
ZGFudCh0aGlzLmVsZW1lbnQpKQorICAgICAgICBpZiAoIWF1dG8gJiYgIWlzRW1wdHlJbnB1dCAm
JiAhc2VsZWN0aW9uUmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIuaXNEZXNjZW5kYW50KHRo
aXMuX2VsZW1lbnQpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoYXV0byAmJiAh
dGhpcy5pc0NhcmV0QXRFbmRPZlByb21wdCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB2YXIgd29yZFByZWZpeFJhbmdlID0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRDb250YWluZXIucmFu
Z2VPZldvcmQoc2VsZWN0aW9uUmFuZ2Uuc3RhcnRPZmZzZXQsIHRoaXMuY29tcGxldGlvblN0b3BD
aGFyYWN0ZXJzLCB0aGlzLmVsZW1lbnQsICJiYWNrd2FyZCIpOwotICAgICAgICB0aGlzLmNvbXBs
ZXRpb25zKHdvcmRQcmVmaXhSYW5nZSwgYXV0bywgdGhpcy5fY29tcGxldGlvbnNSZWFkeS5iaW5k
KHRoaXMsIHNlbGVjdGlvbiwgYXV0bywgd29yZFByZWZpeFJhbmdlLCByZXZlcnNlKSk7CisgICAg
ICAgIHZhciB3b3JkUHJlZml4UmFuZ2UgPSBzZWxlY3Rpb25SYW5nZS5zdGFydENvbnRhaW5lci5y
YW5nZU9mV29yZChzZWxlY3Rpb25SYW5nZS5zdGFydE9mZnNldCwgdGhpcy5fY29tcGxldGlvblN0
b3BDaGFyYWN0ZXJzLCB0aGlzLl9lbGVtZW50LCAiYmFja3dhcmQiKTsKKyAgICAgICAgdGhpcy5f
bG9hZENvbXBsZXRpb25zKHdvcmRQcmVmaXhSYW5nZSwgYXV0bywgdGhpcy5fY29tcGxldGlvbnNS
ZWFkeS5iaW5kKHRoaXMsIHNlbGVjdGlvbiwgYXV0bywgd29yZFByZWZpeFJhbmdlLCByZXZlcnNl
KSk7CiAgICAgfSwKIAogICAgIF9jb21wbGV0aW9uc1JlYWR5OiBmdW5jdGlvbihzZWxlY3Rpb24s
IGF1dG8sIG9yaWdpbmFsV29yZFByZWZpeFJhbmdlLCByZXZlcnNlLCBjb21wbGV0aW9ucykKQEAg
LTI3OCw3ICszNjAsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIHRoaXMuX3VzZXJFbnRlcmVkVGV4dCA9IGZ1bGxXb3JkUmFuZ2UudG9TdHJpbmcoKTsK
IAogICAgICAgICBmdWxsV29yZFJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7Ci0gICAgICAgIHRoaXMu
ZWxlbWVudC5wcnVuZUVtcHR5VGV4dE5vZGVzKCk7CisgICAgICAgIHRoaXMuX2VsZW1lbnQucHJ1
bmVFbXB0eVRleHROb2RlcygpOwogCiAgICAgICAgIHZhciBmaW5hbFNlbGVjdGlvblJhbmdlID0g
ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKIApAQCAtMzE1LDcgKzM5Nyw3IEBAIFdlYkluc3BlY3Rv
ci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKIAogICAgIGlzQ2FyZXRJbnNpZGVQcm9tcHQ6IGZ1
bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuaXNJbnNlcnRpb25D
YXJldEluc2lkZSgpOworICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5pc0luc2VydGlvbkNh
cmV0SW5zaWRlKCk7CiAgICAgfSwKIAogICAgIGlzQ2FyZXRBdEVuZE9mUHJvbXB0OiBmdW5jdGlv
bigpCkBAIC0zMjYsNyArNDA4LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBl
ID0gewogCiAgICAgICAgIHZhciBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0
KDApOwogICAgICAgICB2YXIgbm9kZSA9IHNlbGVjdGlvblJhbmdlLnN0YXJ0Q29udGFpbmVyOwot
ICAgICAgICBpZiAobm9kZSAhPT0gdGhpcy5lbGVtZW50ICYmICFub2RlLmlzRGVzY2VuZGFudCh0
aGlzLmVsZW1lbnQpKQorICAgICAgICBpZiAobm9kZSAhPT0gdGhpcy5fZWxlbWVudCAmJiAhbm9k
ZS5pc0Rlc2NlbmRhbnQodGhpcy5fZWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFICYmIHNlbGVj
dGlvblJhbmdlLnN0YXJ0T2Zmc2V0IDwgbm9kZS5ub2RlVmFsdWUubGVuZ3RoKQpAQCAtMzQwLDcg
KzQyMiw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgICAgICBmb3VuZE5leHRUZXh0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgbm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0Tm9kZSh0aGlzLmVsZW1lbnQpOworICAgICAgICAg
ICAgbm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0Tm9kZSh0aGlzLl9lbGVtZW50KTsKICAgICAgICAg
fQogCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzUwLDcgKzQzMiw3IEBAIFdlYkluc3BlY3Rv
ci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHZhciBzZWxlY3Rpb24g
PSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgIHZhciBmb2N1c05vZGUgPSBzZWxlY3Rp
b24uZm9jdXNOb2RlOwotICAgICAgICBpZiAoIWZvY3VzTm9kZSB8fCBmb2N1c05vZGUubm9kZVR5
cGUgIT09IE5vZGUuVEVYVF9OT0RFIHx8IGZvY3VzTm9kZS5wYXJlbnROb2RlICE9PSB0aGlzLmVs
ZW1lbnQpCisgICAgICAgIGlmICghZm9jdXNOb2RlIHx8IGZvY3VzTm9kZS5ub2RlVHlwZSAhPT0g
Tm9kZS5URVhUX05PREUgfHwgZm9jdXNOb2RlLnBhcmVudE5vZGUgIT09IHRoaXMuX2VsZW1lbnQp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICBpZiAoZm9jdXNOb2RlLnRleHRD
b250ZW50LnN1YnN0cmluZygwLCBzZWxlY3Rpb24uZm9jdXNPZmZzZXQpLmluZGV4T2YoIlxuIikg
IT09IC0xKQpAQCAtMzcyLDcgKzQ1NCw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3Rv
dHlwZSA9IHsKICAgICB7CiAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0
aW9uKCk7CiAgICAgICAgIHZhciBmb2N1c05vZGUgPSBzZWxlY3Rpb24uZm9jdXNOb2RlOwotICAg
ICAgICBpZiAoIWZvY3VzTm9kZSB8fCBmb2N1c05vZGUubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9O
T0RFIHx8IGZvY3VzTm9kZS5wYXJlbnROb2RlICE9PSB0aGlzLmVsZW1lbnQpCisgICAgICAgIGlm
ICghZm9jdXNOb2RlIHx8IGZvY3VzTm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUgfHwg
Zm9jdXNOb2RlLnBhcmVudE5vZGUgIT09IHRoaXMuX2VsZW1lbnQpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgICAgICBpZiAoZm9jdXNOb2RlLnRleHRDb250ZW50LnN1YnN0cmluZyhz
ZWxlY3Rpb24uZm9jdXNPZmZzZXQpLmluZGV4T2YoIlxuIikgIT09IC0xKQpAQCAtMzk1LDgzICs0
NzcsMTc3IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAg
dmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICAgdmFyIHNlbGVj
dGlvblJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKIAotICAgICAgICB2YXIgb2Zmc2V0
ID0gdGhpcy5lbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoOwotICAgICAgICBzZWxlY3Rpb25SYW5n
ZS5zZXRTdGFydCh0aGlzLmVsZW1lbnQsIG9mZnNldCk7Ci0gICAgICAgIHNlbGVjdGlvblJhbmdl
LnNldEVuZCh0aGlzLmVsZW1lbnQsIG9mZnNldCk7CisgICAgICAgIHZhciBvZmZzZXQgPSB0aGlz
Ll9lbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoOworICAgICAgICBzZWxlY3Rpb25SYW5nZS5zZXRT
dGFydCh0aGlzLl9lbGVtZW50LCBvZmZzZXQpOworICAgICAgICBzZWxlY3Rpb25SYW5nZS5zZXRF
bmQodGhpcy5fZWxlbWVudCwgb2Zmc2V0KTsKIAogICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxs
UmFuZ2VzKCk7CiAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShzZWxlY3Rpb25SYW5nZSk7Ci0g
ICAgfSwKKyAgICB9Cit9CiAKLSAgICB0YWJLZXlQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKKy8q
KgorICogQGNvbnN0cnVjdG9yCisgKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlRleHRQcm9tcHR9
CisgKiBAcGFyYW0ge2Z1bmN0aW9uKFJhbmdlLCBib29sZWFuLCBmdW5jdGlvbigqKSl9IGNvbXBs
ZXRpb25zCisgKiBAcGFyYW0ge3N0cmluZ30gc3RvcENoYXJhY3RlcnMKKyAqLworV2ViSW5zcGVj
dG9yLlRleHRQcm9tcHRXaXRoSGlzdG9yeSA9IGZ1bmN0aW9uKGNvbXBsZXRpb25zLCBzdG9wQ2hh
cmFjdGVycykKK3sKKyAgICBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5jYWxsKHRoaXMsIGNvbXBs
ZXRpb25zLCBzdG9wQ2hhcmFjdGVycyk7CisKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7QXJyYXku
PHN0cmluZz59CisgICAgICovCisgICAgdGhpcy5fZGF0YSA9IFtdOworCisgICAgLyoqCisgICAg
ICogMS1iYXNlZCBlbnRyeSBpbiB0aGUgaGlzdG9yeSBzdGFjay4KKyAgICAgKiBAdHlwZSB7bnVt
YmVyfQorICAgICAqLworICAgIHRoaXMuX2hpc3RvcnlPZmZzZXQgPSAxOworCisgICAgLyoqCisg
ICAgICogV2hldGhlciB0byBjb2FsZXNjZSBkdXBsaWNhdGUgaXRlbXMgaW4gdGhlIGhpc3Rvcnks
IGRlZmF1bHQgaXMgdHJ1ZS4KKyAgICAgKiBAdHlwZSB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICB0
aGlzLl9jb2FsZXNjZUhpc3RvcnlEdXBlcyA9IHRydWU7Cit9CisKK1dlYkluc3BlY3Rvci5UZXh0
UHJvbXB0V2l0aEhpc3RvcnkucHJvdG90eXBlID0geworICAgIGdldCBoaXN0b3J5RGF0YSgpCiAg
ICAgewotICAgICAgICBldmVudC5oYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5jb21wbGV0
ZShmYWxzZSwgZXZlbnQuc2hpZnRLZXkpOworICAgICAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCB0
byBjb3B5IHRoaXM/CisgICAgICAgIHJldHVybiB0aGlzLl9kYXRhOwogICAgIH0sCiAKLSAgICB1
cEtleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHNldENvYWxlc2NlSGlzdG9yeUR1cGVz
OiBmdW5jdGlvbih4KQogICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLmlzQ2FyZXRPbkZpcnN0TGlu
ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGV2ZW50LmhhbmRsZWQgPSB0cnVl
OwotICAgICAgICB0aGlzLl9tb3ZlQmFja0luSGlzdG9yeSgpOworICAgICAgICB0aGlzLl9jb2Fs
ZXNjZUhpc3RvcnlEdXBlcyA9IHg7CiAgICAgfSwKIAotICAgIGRvd25LZXlQcmVzc2VkOiBmdW5j
dGlvbihldmVudCkKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBkYXRh
CisgICAgICovCisgICAgc2V0SGlzdG9yeURhdGE6IGZ1bmN0aW9uKGRhdGEpCiAgICAgewotICAg
ICAgICBpZiAoIXRoaXMuaXNDYXJldE9uTGFzdExpbmUoKSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBldmVudC5oYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5fbW92ZUZvcndh
cmRJbkhpc3RvcnkoKTsKKyAgICAgICAgdGhpcy5fZGF0YSA9IFtdLmNvbmNhdChkYXRhKTsKKyAg
ICAgICAgdGhpcy5faGlzdG9yeU9mZnNldCA9IDE7CiAgICAgfSwKIAotICAgIF9tb3ZlQmFja0lu
SGlzdG9yeTogZnVuY3Rpb24oKQorICAgIC8qKgorICAgICAqIFB1c2hlcyBhIGNvbW1pdHRlZCB0
ZXh0IGludG8gdGhlIGhpc3RvcnkuCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQKKyAgICAg
Ki8KKyAgICBwdXNoSGlzdG9yeUl0ZW06IGZ1bmN0aW9uKHRleHQpCiAgICAgewotICAgICAgICBp
ZiAoIXRoaXMuaGlzdG9yeSB8fCB0aGlzLmhpc3RvcnlPZmZzZXQgPT0gdGhpcy5oaXN0b3J5Lmxl
bmd0aCkKKyAgICAgICAgaWYgKHRoaXMuX3VuY29tbWl0dGVkSXNUb3ApIHsKKyAgICAgICAgICAg
IHRoaXMuX2RhdGEucG9wKCk7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fdW5jb21taXR0ZWRJ
c1RvcDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLl9jb2FsZXNjZUhpc3RvcnlEdXBl
cyAmJiB0ZXh0ID09PSB0aGlzLl9jdXJyZW50SGlzdG9yeUl0ZW0oKSkKICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgdGhpcy5fZGF0YS5wdXNoKHRleHQpOworICAgICAgICB0aGlzLl9oaXN0
b3J5T2Zmc2V0ID0gMTsKKyAgICB9LAogCisgICAgLyoqCisgICAgICogUHVzaGVzIHRoZSBjdXJy
ZW50ICh1bmNvbW1pdHRlZCkgdGV4dCBpbnRvIHRoZSBoaXN0b3J5LgorICAgICAqLworICAgIF9w
dXNoQ3VycmVudFRleHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl91bmNv
bW1pdHRlZElzVG9wKQorICAgICAgICAgICAgdGhpcy5fZGF0YS5wb3AoKTsgLy8gVGhyb3cgYXdh
eSBvYnNvbGV0ZSB1bmNvbW1pdHRlZCB0ZXh0LgorICAgICAgICB0aGlzLl91bmNvbW1pdHRlZElz
VG9wID0gdHJ1ZTsKICAgICAgICAgdGhpcy5jbGVhckF1dG9Db21wbGV0ZSh0cnVlKTsKKyAgICAg
ICAgdGhpcy5fZGF0YS5wdXNoKHRoaXMudGV4dCk7CisgICAgfSwKIAotICAgICAgICBpZiAodGhp
cy5oaXN0b3J5T2Zmc2V0ID09PSAwKQotICAgICAgICAgICAgdGhpcy50ZW1wU2F2ZWRDb21tYW5k
ID0gdGhpcy50ZXh0OworICAgIC8qKgorICAgICAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9
CisgICAgICovCisgICAgX3ByZXZpb3VzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAo
dGhpcy5faGlzdG9yeU9mZnNldCA+IHRoaXMuX2RhdGEubGVuZ3RoKQorICAgICAgICAgICAgcmV0
dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgaWYgKHRoaXMuX2hpc3RvcnlPZmZzZXQgPT09IDEpCisg
ICAgICAgICAgICB0aGlzLl9wdXNoQ3VycmVudFRleHQoKTsKKyAgICAgICAgKyt0aGlzLl9oaXN0
b3J5T2Zmc2V0OworICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudEhpc3RvcnlJdGVtKCk7Cisg
ICAgfSwKIAotICAgICAgICArK3RoaXMuaGlzdG9yeU9mZnNldDsKLSAgICAgICAgdGhpcy50ZXh0
ID0gdGhpcy5oaXN0b3J5W3RoaXMuaGlzdG9yeS5sZW5ndGggLSB0aGlzLmhpc3RvcnlPZmZzZXRd
OworICAgIC8qKgorICAgICAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9CisgICAgICovCisg
ICAgX25leHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9oaXN0b3J5T2Zm
c2V0ID09PSAxKQorICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgLS10aGlz
Ll9oaXN0b3J5T2Zmc2V0OworICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudEhpc3RvcnlJdGVt
KCk7CisgICAgfSwKIAotICAgICAgICB0aGlzLmVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcodHJ1ZSk7
Ci0gICAgICAgIHZhciBmaXJzdE5ld2xpbmVJbmRleCA9IHRoaXMudGV4dC5pbmRleE9mKCJcbiIp
OwotICAgICAgICBpZiAoZmlyc3ROZXdsaW5lSW5kZXggPT09IC0xKQotICAgICAgICAgICAgdGhp
cy5tb3ZlQ2FyZXRUb0VuZE9mUHJvbXB0KCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
dmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAgICAgICAgICAgIHZhciBz
ZWxlY3Rpb25SYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CisgICAgX2N1cnJlbnRIaXN0
b3J5SXRlbTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFbdGhp
cy5fZGF0YS5sZW5ndGggLSB0aGlzLl9oaXN0b3J5T2Zmc2V0XTsKKyAgICB9LAogCi0gICAgICAg
ICAgICBzZWxlY3Rpb25SYW5nZS5zZXRTdGFydCh0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCwgZmly
c3ROZXdsaW5lSW5kZXgpOwotICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2Uuc2V0RW5kKHRoaXMu
ZWxlbWVudC5maXJzdENoaWxkLCBmaXJzdE5ld2xpbmVJbmRleCk7CisgICAgZGVmYXVsdEtleUhh
bmRsZXI6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIG5ld1RleHQ7CisgICAg
ICAgIHZhciBpc1ByZXZpb3VzOwogCi0gICAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFu
Z2VzKCk7Ci0gICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2Uoc2VsZWN0aW9uUmFuZ2UpOwor
ICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUlkZW50aWZpZXIpIHsKKyAgICAgICAgY2FzZSAiVXAi
OgorICAgICAgICAgICAgaWYgKCF0aGlzLmlzQ2FyZXRPbkZpcnN0TGluZSgpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgbmV3VGV4dCA9IHRoaXMuX3ByZXZpb3VzKCk7Cisg
ICAgICAgICAgICBpc1ByZXZpb3VzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICJEb3duIjoKKyAgICAgICAgICAgIGlmICghdGhpcy5pc0NhcmV0T25MYXN0TGluZSgp
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbmV3VGV4dCA9IHRoaXMuX25l
eHQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJVKzAwNTAiOiAvLyBDdHJs
K1AgPSBQcmV2aW91cworICAgICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5pc01hYygpICYmIGV2
ZW50LmN0cmxLZXkgJiYgIWV2ZW50Lm1ldGFLZXkgJiYgIWV2ZW50LmFsdEtleSAmJiAhZXZlbnQu
c2hpZnRLZXkpIHsKKyAgICAgICAgICAgICAgICBuZXdUZXh0ID0gdGhpcy5fcHJldmlvdXMoKTsK
KyAgICAgICAgICAgICAgICBpc1ByZXZpb3VzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJVKzAwNEUiOiAvLyBDdHJsK04gPSBOZXh0Cisg
ICAgICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmlzTWFjKCkgJiYgZXZlbnQuY3RybEtleSAmJiAh
ZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuYWx0S2V5ICYmICFldmVudC5zaGlmdEtleSkKKyAgICAg
ICAgICAgICAgICBuZXdUZXh0ID0gdGhpcy5fbmV4dCgpOworICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICB9LAogCi0gICAgX21vdmVGb3J3YXJkSW5IaXN0b3J5OiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICBpZiAoIXRoaXMuaGlzdG9yeSB8fCB0aGlzLmhpc3RvcnlPZmZzZXQg
PT09IDApCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChuZXdUZXh0ICE9PSB1bmRl
ZmluZWQpIHsKKyAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICAg
ICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgIHRoaXMudGV4dCA9IG5ld1Rl
eHQ7CiAKLSAgICAgICAgdGhpcy5jbGVhckF1dG9Db21wbGV0ZSh0cnVlKTsKKyAgICAgICAgICAg
IGlmIChpc1ByZXZpb3VzKSB7CisgICAgICAgICAgICAgICAgdmFyIGZpcnN0TmV3bGluZUluZGV4
ID0gdGhpcy50ZXh0LmluZGV4T2YoIlxuIik7CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0TmV3
bGluZUluZGV4ID09PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ2FyZXRUb0Vu
ZE9mUHJvbXB0KCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBzZWxlY3Rpb25SYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAKLSAgICAg
ICAgLS10aGlzLmhpc3RvcnlPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblJh
bmdlLnNldFN0YXJ0KHRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZCwgZmlyc3ROZXdsaW5lSW5kZXgp
OworICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5zZXRFbmQodGhpcy5fZWxlbWVu
dC5maXJzdENoaWxkLCBmaXJzdE5ld2xpbmVJbmRleCk7CiAKLSAgICAgICAgaWYgKHRoaXMuaGlz
dG9yeU9mZnNldCA9PT0gMCkgewotICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy50ZW1wU2F2
ZWRDb21tYW5kOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMudGVtcFNhdmVkQ29tbWFuZDsKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFs
bFJhbmdlcygpOworICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2Uoc2VsZWN0
aW9uUmFuZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICB0aGlzLnRleHQgPSB0aGlzLmhp
c3RvcnlbdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIHRoaXMuaGlzdG9yeU9mZnNldF07Ci0gICAgICAg
IHRoaXMuZWxlbWVudC5zY3JvbGxJbnRvVmlldygpOworICAgICAgICByZXR1cm4gV2ViSW5zcGVj
dG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmRlZmF1bHRLZXlIYW5kbGVyLmNhbGwodGhpcywgZXZl
bnQpOwogICAgIH0KIH0KKworV2ViSW5zcGVjdG9yLlRleHRQcm9tcHRXaXRoSGlzdG9yeS5wcm90
b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlOwo=
</data>
<flag name="review"
          id="111266"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>