<?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>70885</bug_id>
          
          <creation_ts>2011-10-26 01:33:54 -0700</creation_ts>
          <short_desc>Web Inspector: [refactoring] get JS-specific methods out of SourceFrame</short_desc>
          <delta_ts>2011-11-07 07:10:31 -0800</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="Andrey Kosyakov">caseq</reporter>
          <assigned_to name="Andrey Kosyakov">caseq</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>dglazkov</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>podivilov</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>490668</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-10-26 01:33:54 -0700</bug_when>
    <thetext>Methods that are JS/debugger specific belong to JavaScriptSourceFrame.
This also lets us get rid of SourceFrameDelegate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490679</commentid>
    <comment_count>1</comment_count>
      <attachid>112471</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-10-26 01:57:38 -0700</bug_when>
    <thetext>Created attachment 112471
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491401</commentid>
    <comment_count>2</comment_count>
      <attachid>112471</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-10-27 01:21:36 -0700</bug_when>
    <thetext>Comment on attachment 112471
patch

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

Looks good.

&gt; Source/WebCore/inspector/front-end/JavaScriptSourceFrame.js:92
&gt; +    setReadonly: function(readOnly)

Please use camelCase: setReadOnly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491403</commentid>
    <comment_count>3</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-10-27 01:24:51 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 112471 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=112471&amp;action=review
&gt; 
&gt; Looks good.
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/JavaScriptSourceFrame.js:92
&gt; &gt; +    setReadonly: function(readOnly)
&gt; 
&gt; Please use camelCase: setReadOnly.

BTW, how does that work? In base class it is declared as &quot;setReadOnly&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491508</commentid>
    <comment_count>4</comment_count>
      <attachid>112671</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-10-27 06:13:16 -0700</bug_when>
    <thetext>Created attachment 112671
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491509</commentid>
    <comment_count>5</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-10-27 06:14:04 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; 
&gt; BTW, how does that work? In base class it is declared as &quot;setReadOnly&quot;.

It doesn&apos;t, though the effect was somewhat subtle, so I missed it while testing. Thanks for spotting this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491645</commentid>
    <comment_count>6</comment_count>
      <attachid>112671</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-27 09:45:53 -0700</bug_when>
    <thetext>Comment on attachment 112671
patch

Attachment 112671 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10230461

New failing tests:
inspector/debugger/source-frame.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491674</commentid>
    <comment_count>7</comment_count>
      <attachid>112700</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-10-27 10:15:56 -0700</bug_when>
    <thetext>Created attachment 112700
patch (fixed test)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492435</commentid>
    <comment_count>8</comment_count>
      <attachid>112700</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-10-28 07:04:46 -0700</bug_when>
    <thetext>Comment on attachment 112700
patch (fixed test)

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

&gt; Source/WebCore/ChangeLog:82
&gt; +        Web Inspector: JS exception in JavaScriptSourceFrame.onShowPopover/showObjectPopover()

Remove this.

&gt; Source/WebCore/inspector/front-end/JavaScriptSourceFrame.js:60
&gt; +        if (this._popoverHelper)

this._popoverHelper seems to always exist, no need to check?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497156</commentid>
    <comment_count>9</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-11-07 07:10:20 -0800</bug_when>
    <thetext>Manually committed r99410: http://trac.webkit.org/changeset/99410
with yurys&apos; comments addressed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112471</attachid>
            <date>2011-10-26 01:57:38 -0700</date>
            <delta_ts>2011-10-27 06:13:16 -0700</delta_ts>
            <desc>patch</desc>
            <filename>jssourceframe-refactoring.diff</filename>
            <type>text/plain</type>
            <size>46895</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzM2Q2ZDA5Li5mNGI5ZGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIg
QEAKKzIwMTEtMTAtMjYgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBbcmVmYWN0b3JpbmddIGdldCBKUy1zcGVjaWZpYyBtZXRo
b2RzIG91dCBvZiBTb3VyY2VGcmFtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzA4ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFzIHRoZXJlJ3Mgbm8gbmV3IGZ1bmN0aW9uYWxp
dHkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRTb3VyY2VGcmFt
ZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUud2lsbEhp
ZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5
cGUucmVxdWVzdENvbnRlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3Vy
Y2VGcmFtZS5wcm90b3R5cGUuY2FuRWRpdFNvdXJjZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5zdWdnZXN0ZWRGaWxlTmFtZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5lZGl0Q29u
dGVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3Rv
dHlwZS5jb250ZW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNv
dXJjZUZyYW1lLnByb3RvdHlwZS5zZXRSZWFkb25seSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5wb3B1bGF0ZUxpbmVHdXR0ZXJDb250ZXh0
TWVudS5hZGRDb25kaXRpb25hbEJyZWFrcG9pbnQuZGlkRWRpdEJyZWFrcG9pbnRDb25kaXRpb24p
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUu
cG9wdWxhdGVMaW5lR3V0dGVyQ29udGV4dE1lbnUuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5K
YXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLnBvcHVsYXRlTGluZUd1dHRlckNvbnRleHRN
ZW51LmVsc2UuZWRpdEJyZWFrcG9pbnRDb25kaXRpb24uZGlkRWRpdEJyZWFrcG9pbnRDb25kaXRp
b24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5
cGUucG9wdWxhdGVMaW5lR3V0dGVyQ29udGV4dE1lbnUuZWxzZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5wb3B1bGF0ZUxpbmVHdXR0ZXJD
b250ZXh0TWVudSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1l
LnByb3RvdHlwZS5wb3B1bGF0ZVRleHRBcmVhQ29udGV4dE1lbnUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUuYWZ0ZXJUZXh0Q2hhbmdlZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5i
ZWZvcmVUZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJj
ZUZyYW1lLnByb3RvdHlwZS5jYW5jZWxFZGl0aW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5K
YXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLmRpZEVkaXRDb250ZW50KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLl9nZXRQb3BvdmVy
QW5jaG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJv
dG90eXBlLl9vblNob3dQb3BvdmVyLnNob3dPYmplY3RQb3BvdmVyKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLl9vblNob3dQb3BvdmVyKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLl9v
bkhpZGVQb3BvdmVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJh
bWUucHJvdG90eXBlLmFkZEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFT
Y3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUucmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5fbW91c2VEb3duKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLl9l
ZGl0QnJlYWtwb2ludENvbmRpdGlvbi5maW5pc2hFZGl0aW5nKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLl9lZGl0QnJlYWtwb2ludENvbmRp
dGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3Rv
dHlwZS5fY3JlYXRlQ29uZGl0aW9uRWxlbWVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2
YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5zZXRFeGVjdXRpb25MaW5lKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLmNsZWFyRXhlY3V0
aW9uTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnBy
b3RvdHlwZS5fbGluZU51bWJlckFmdGVyRWRpdGluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5fb25UZXh0Vmlld2VyQ29udGVudExvYWRl
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lRGVsZWdhdGUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZURlbGVnYXRlLnBy
b3RvdHlwZS5yZXF1ZXN0Q29udGVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlw
dFNvdXJjZUZyYW1lRGVsZWdhdGUucHJvdG90eXBlLnNldEJyZWFrcG9pbnQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZS5yZW1v
dmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJh
bWVEZWxlZ2F0ZS5wcm90b3R5cGUudXBkYXRlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lRGVsZWdhdGUucHJvdG90eXBlLmZpbmRCcmVha3Bv
aW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWVEZWxlZ2F0
ZS5wcm90b3R5cGUuY29udGludWVUb0xpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFT
Y3JpcHRTb3VyY2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZS5jYW5FZGl0U2NyaXB0U291cmNlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90
b3R5cGUuc2V0U2NyaXB0U291cmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0
U291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGUuc2V0U2NyaXB0U291cmNlSXNCZWluZ0VkaXRl
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lRGVsZWdhdGUu
cHJvdG90eXBlLnN1Z2dlc3RlZEZpbGVOYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZh
U2NyaXB0U291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGUuYWRkVG9XYXRjaCk6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuUmVzb3VyY2VTb3VyY2VGcmFtZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9TY3JpcHRzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVEZWxl
Z2F0ZUZvclNjcmlwdHNQYW5lbCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3Vy
Y2VGcmFtZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLndpbGxIaWRlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuZ2V0IHRleHRWaWV3ZXIpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5yZXF1ZXN0Q29udGVudCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9zYXZlVmlld2Vy
U3RhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fcmVz
dG9yZVZpZXdlclN0YXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90
b3R5cGUuYmVmb3JlVGV4dENoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZS5hZnRlclRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZS5wcm90b3R5cGUuX2luaXRpYWxpemVUZXh0Vmlld2VyKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUucG9wdWxhdGVMaW5lR3V0dGVyQ29udGV4
dE1lbnUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5zdWdn
ZXN0ZWRGaWxlTmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90
eXBlLmNhbkVkaXRTb3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnBy
b3RvdHlwZS5zdGFydEVkaXRpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1l
LnByb3RvdHlwZS5jb21taXRFZGl0aW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VG
cmFtZS5wcm90b3R5cGUuZGlkRWRpdENvbnRlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLnByb3RvdHlwZS5lZGl0Q29udGVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlLmNhbmNlbEVkaXRpbmcpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5zZXRSZWFkT25seSk6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbDoKKwogMjAxMS0xMC0yNSAgQW5kcmV5IEtvc3lh
a292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEpTIGV4
Y2VwdGlvbiBpbiBKYXZhU2NyaXB0U291cmNlRnJhbWUub25TaG93UG9wb3Zlci9zaG93T2JqZWN0
UG9wb3ZlcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0phdmFTY3JpcHRTb3VyY2VGcmFtZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvSmF2YVNjcmlwdFNvdXJjZUZyYW1lLmpzCmluZGV4IGZlN2EzYjAuLjhiYmM5Y2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSmF2YVNjcmlwdFNv
dXJjZUZyYW1lLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSmF2
YVNjcmlwdFNvdXJjZUZyYW1lLmpzCkBAIC0zMSwyNCArMzEsMjE5IEBACiAvKioKICAqIEBjb25z
dHJ1Y3RvcgogICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZX0KLSAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lRGVsZWdhdGV9IGRlbGVnYXRlCisgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWVEZWxlZ2F0ZX0gZGVsZWdhdGUKICAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWx9IG1vZGVsCiAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQogICovCiBX
ZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lID0gZnVuY3Rpb24oZGVsZWdhdGUsIG1v
ZGVsLCB1aVNvdXJjZUNvZGUpCiB7Ci0gICAgLy8gRklYTUU6IG1vdmUgYWxsIFNvdXJjZUZyYW1l
IG1ldGhvZHMgcmVsYXRlZCB0byBKYXZhU2NyaXB0IGRlYnVnZ2luZyBoZXJlIGFuZAotICAgIC8v
IGdldCByaWQgb2YgU291cmNlRnJhbWUuX2RlbGVnYXRlLgotICAgIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5jYWxsKHRoaXMsIGRlbGVnYXRlLCB1aVNvdXJjZUNvZGUudXJsKTsKKyAgICBXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUuY2FsbCh0aGlzLCB1aVNvdXJjZUNvZGUudXJsKTsKIAotICAg
IHRoaXMuX21vZGVsID0gbW9kZWw7Ci0gICAgdGhpcy5fcG9wb3Zlck9iamVjdEdyb3VwID0gInBv
cG92ZXIiOworICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGU7CisgICAgdGhpcy5wb3BvdmVy
SGVscGVyID0gbmV3IFdlYkluc3BlY3Rvci5PYmplY3RQb3BvdmVySGVscGVyKHRoaXMudGV4dFZp
ZXdlci5lbGVtZW50LAorICAgICAgICAgICAgdGhpcy5fZ2V0UG9wb3ZlckFuY2hvci5iaW5kKHRo
aXMpLCB0aGlzLl9vblNob3dQb3BvdmVyLmJpbmQodGhpcyksIHRoaXMuX29uSGlkZVBvcG92ZXIu
YmluZCh0aGlzKSwgdHJ1ZSk7CiAKKyAgICB0aGlzLnRleHRWaWV3ZXIuZWxlbWVudC5hZGRFdmVu
dExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLl9tb3VzZURvd24uYmluZCh0aGlzKSwgdHJ1ZSk7
CiAgICAgdWlTb3VyY2VDb2RlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlVJU291cmNl
Q29kZS5FdmVudHMuQ29udGVudENoYW5nZWQsIHRoaXMuY29udGVudENoYW5nZWQsIHRoaXMpOwor
ICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUuRXZlbnRz
LkxvYWRlZCwgdGhpcy5fb25UZXh0Vmlld2VyQ29udGVudExvYWRlZCwgdGhpcyk7CisKKyAgICB0
aGlzLl9tb2RlbCA9IG1vZGVsOworICAgIHRoaXMuX3BvcG92ZXJPYmplY3RHcm91cCA9ICJwb3Bv
dmVyIjsKKyAgICB0aGlzLl9icmVha3BvaW50cyA9IHt9OwogfQogCiBXZWJJbnNwZWN0b3IuSmF2
YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKLSAgICBzaG91bGRTaG93UG9wb3Zlcjog
ZnVuY3Rpb24oZWxlbWVudCkKKyAgICAvLyBWaWV3IGV2ZW50cworICAgIHdpbGxIaWRlOiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBl
LndpbGxIaWRlLmNhbGwodGhpcyk7CisgICAgICAgIGlmICh0aGlzLnBvcG92ZXJIZWxwZXIpCisg
ICAgICAgICAgICB0aGlzLnBvcG92ZXJIZWxwZXIuaGlkZVBvcG92ZXIoKTsKKyAgICB9LAorCisg
ICAgLy8gU291cmNlRnJhbWUgb3ZlcnJpZGVzCisgICAgcmVxdWVzdENvbnRlbnQ6IGZ1bmN0aW9u
KGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgdGhpcy5fZGVsZWdhdGUucmVxdWVzdENvbnRlbnQo
Y2FsbGJhY2spOworICAgIH0sCisKKyAgICBjYW5FZGl0U291cmNlOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGUuY2FuRWRpdFNjcmlwdFNvdXJjZSgpOwor
ICAgIH0sCisKKyAgICBzdWdnZXN0ZWRGaWxlTmFtZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlLnN1Z2dlc3RlZEZpbGVOYW1lKCk7CisgICAgfSwKKwor
ICAgIGVkaXRDb250ZW50OiBmdW5jdGlvbihuZXdDb250ZW50LCBjYWxsYmFjaykKKyAgICB7Cisg
ICAgICAgIHRoaXMuX2RlbGVnYXRlLnNldFNjcmlwdFNvdXJjZShuZXdDb250ZW50LCBjYWxsYmFj
ayk7CisgICAgfSwKKworICAgIGNvbnRlbnRDaGFuZ2VkOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICBpZiAoIXRoaXMudGV4dFZpZXdlci5yZWFkT25seSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgdGhpcy5fZGVsZWdhdGUucmVxdWVzdENvbnRlbnQodGhpcy5zZXRDb250ZW50LmJp
bmQodGhpcykpOworICAgIH0sCisKKyAgICBzZXRSZWFkb25seTogZnVuY3Rpb24ocmVhZE9ubHkp
CisgICAgeworICAgICAgICBpZiAoIXJlYWRPbmx5ICYmIHRoaXMucG9wb3ZlckhlbHBlcikKKyAg
ICAgICAgICAgIHRoaXMucG9wb3ZlckhlbHBlci5oaWRlUG9wb3ZlcigpOworICAgICAgICBXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLnNldFJlYWRvbmx5LmNhbGwodGhpcywgcmVh
ZE9ubHkpOworICAgICAgICBpZiAocmVhZE9ubHkpCisgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0
ZS5zZXRTY3JpcHRTb3VyY2VJc0JlaW5nRWRpdGVkKGZhbHNlKTsKKyAgICB9LAorCisgICAgcG9w
dWxhdGVMaW5lR3V0dGVyQ29udGV4dE1lbnU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbnRleHRN
ZW51KQorICAgIHsKKyAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJDb250aW51
ZSB0byBoZXJlIiA6ICJDb250aW51ZSB0byBIZXJlIiksIHRoaXMuX2RlbGVnYXRlLmNvbnRpbnVl
VG9MaW5lLmJpbmQodGhpcy5fZGVsZWdhdGUsIGxpbmVOdW1iZXIpKTsKKworICAgICAgICB2YXIg
YnJlYWtwb2ludCA9IHRoaXMuX2RlbGVnYXRlLmZpbmRCcmVha3BvaW50KGxpbmVOdW1iZXIpOwor
ICAgICAgICBpZiAoIWJyZWFrcG9pbnQpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgcm93IGRvZXNu
J3QgaGF2ZSBhIGJyZWFrcG9pbnQ6IFdlIHdhbnQgdG8gc2hvdyBBZGQgQnJlYWtwb2ludCBhbmQg
QWRkIGFuZCBFZGl0IEJyZWFrcG9pbnQuCisgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJ
dGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRp
dGxlcygpID8gIkFkZCBicmVha3BvaW50IiA6ICJBZGQgQnJlYWtwb2ludCIpLCB0aGlzLl9kZWxl
Z2F0ZS5zZXRCcmVha3BvaW50LmJpbmQodGhpcy5fZGVsZWdhdGUsIGxpbmVOdW1iZXIsICIiLCB0
cnVlKSk7CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIGFkZENvbmRpdGlvbmFsQnJlYWtwb2ludCgp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhpcy5hZGRCcmVha3BvaW50KGxpbmVO
dW1iZXIsIHRydWUsIHRydWUsIHRydWUpOworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRpZEVk
aXRCcmVha3BvaW50Q29uZGl0aW9uKGNvbW1pdHRlZCwgY29uZGl0aW9uKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVCcmVha3BvaW50KGxpbmVOdW1i
ZXIpOworICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWl0dGVkKQorICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fZGVsZWdhdGUuc2V0QnJlYWtwb2ludChsaW5lTnVtYmVyLCBjb25kaXRp
b24sIHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLl9lZGl0
QnJlYWtwb2ludENvbmRpdGlvbihsaW5lTnVtYmVyLCAiIiwgZGlkRWRpdEJyZWFrcG9pbnRDb25k
aXRpb24uYmluZCh0aGlzKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250ZXh0TWVu
dS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJD
YXNlTWVudVRpdGxlcygpID8gIkFkZCBjb25kaXRpb25hbCBicmVha3BvaW504oCmIiA6ICJBZGQg
Q29uZGl0aW9uYWwgQnJlYWtwb2ludOKApiIpLCBhZGRDb25kaXRpb25hbEJyZWFrcG9pbnQuYmlu
ZCh0aGlzKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGlzIHJvdyBoYXMg
YSBicmVha3BvaW50LCB3ZSB3YW50IHRvIHNob3cgZWRpdCBhbmQgcmVtb3ZlIGJyZWFrcG9pbnQs
IGFuZCBlaXRoZXIgZGlzYWJsZSBvciBlbmFibGUuCisgICAgICAgICAgICBjb250ZXh0TWVudS5h
cHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNl
TWVudVRpdGxlcygpID8gIlJlbW92ZSBicmVha3BvaW50IiA6ICJSZW1vdmUgQnJlYWtwb2ludCIp
LCB0aGlzLl9kZWxlZ2F0ZS5yZW1vdmVCcmVha3BvaW50LmJpbmQodGhpcy5fZGVsZWdhdGUsIGxp
bmVOdW1iZXIpKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGVkaXRCcmVha3BvaW50Q29uZGl0aW9u
KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBkaWRFZGl0QnJlYWtw
b2ludENvbmRpdGlvbihjb21taXR0ZWQsIGNvbmRpdGlvbikKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChjb21taXR0ZWQpCisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9kZWxlZ2F0ZS51cGRhdGVCcmVha3BvaW50KGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwg
YnJlYWtwb2ludC5lbmFibGVkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
dGhpcy5fZWRpdEJyZWFrcG9pbnRDb25kaXRpb24obGluZU51bWJlciwgYnJlYWtwb2ludC5jb25k
aXRpb24sIGRpZEVkaXRCcmVha3BvaW50Q29uZGl0aW9uLmJpbmQodGhpcykpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJFZGl0IGJyZWFr
cG9pbnTigKYiIDogIkVkaXQgQnJlYWtwb2ludOKApiIpLCBlZGl0QnJlYWtwb2ludENvbmRpdGlv
bi5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uIHNldEJyZWFrcG9pbnRFbmFibGVk
KGVuYWJsZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUu
dXBkYXRlQnJlYWtwb2ludChsaW5lTnVtYmVyLCBicmVha3BvaW50LmNvbmRpdGlvbiwgZW5hYmxl
ZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYnJlYWtwb2ludC5lbmFibGVkKQor
ICAgICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiRGlzYWJsZSBicmVh
a3BvaW50IiA6ICJEaXNhYmxlIEJyZWFrcG9pbnQiKSwgc2V0QnJlYWtwb2ludEVuYWJsZWQuYmlu
ZCh0aGlzLCBmYWxzZSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbnRl
eHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VM
b3dlckNhc2VNZW51VGl0bGVzKCkgPyAiRW5hYmxlIGJyZWFrcG9pbnQiIDogIkVuYWJsZSBCcmVh
a3BvaW50IiksIHNldEJyZWFrcG9pbnRFbmFibGVkLmJpbmQodGhpcywgdHJ1ZSkpOworICAgICAg
ICB9CisgICAgfSwKKworICAgIHBvcHVsYXRlVGV4dEFyZWFDb250ZXh0TWVudTogZnVuY3Rpb24o
Y29udGV4dE1lbnUpCisgICAgeworICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNl
bGVjdGlvbigpOworICAgICAgICBpZiAoc2VsZWN0aW9uLnR5cGUgIT09ICJSYW5nZSIgfHwgc2Vs
ZWN0aW9uLmlzQ29sbGFwc2VkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjb250ZXh0
TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93
ZXJDYXNlTWVudVRpdGxlcygpID8gIkFkZCB0byB3YXRjaCIgOiAiQWRkIHRvIFdhdGNoIiksIHRo
aXMuX2RlbGVnYXRlLmFkZFRvV2F0Y2guYmluZCh0aGlzLl9kZWxlZ2F0ZSwgc2VsZWN0aW9uLnRv
U3RyaW5nKCkpKTsKKyAgICB9LAorCisgICAgYWZ0ZXJUZXh0Q2hhbmdlZDogZnVuY3Rpb24ob2xk
UmFuZ2UsIG5ld1JhbmdlKQorICAgIHsKKyAgICAgICAgaWYgKCFvbGRSYW5nZSB8fCAhbmV3UmFu
Z2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gQWRqdXN0IGV4ZWN1dGlvbiBs
aW5lIG51bWJlci4KKyAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVy
ID09PSAibnVtYmVyIikgeworICAgICAgICAgICAgdmFyIG5ld0V4ZWN1dGlvbkxpbmVOdW1iZXIg
PSB0aGlzLl9saW5lTnVtYmVyQWZ0ZXJFZGl0aW5nKHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIs
IG9sZFJhbmdlLCBuZXdSYW5nZSk7CisgICAgICAgICAgICB0aGlzLmNsZWFyRXhlY3V0aW9uTGlu
ZSgpOworICAgICAgICAgICAgdGhpcy5zZXRFeGVjdXRpb25MaW5lKG5ld0V4ZWN1dGlvbkxpbmVO
dW1iZXIsIHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWRqdXN0IGJyZWFrcG9pbnRz
LgorICAgICAgICB2YXIgb2xkQnJlYWtwb2ludHMgPSB0aGlzLl9icmVha3BvaW50czsKKyAgICAg
ICAgdGhpcy5fYnJlYWtwb2ludHMgPSB7fTsKKyAgICAgICAgZm9yICh2YXIgbGluZU51bWJlciBp
biBvbGRCcmVha3BvaW50cykgeworICAgICAgICAgICAgbGluZU51bWJlciA9IE51bWJlcihsaW5l
TnVtYmVyKTsKKyAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gb2xkQnJlYWtwb2ludHNbbGlu
ZU51bWJlcl07CisgICAgICAgICAgICB2YXIgbmV3TGluZU51bWJlciA9IHRoaXMuX2xpbmVOdW1i
ZXJBZnRlckVkaXRpbmcobGluZU51bWJlciwgb2xkUmFuZ2UsIG5ld1JhbmdlKTsKKyAgICAgICAg
ICAgIGlmIChsaW5lTnVtYmVyID09PSBuZXdMaW5lTnVtYmVyKQorICAgICAgICAgICAgICAgIHRo
aXMuX2JyZWFrcG9pbnRzW2xpbmVOdW1iZXJdID0gYnJlYWtwb2ludDsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQnJlYWtwb2ludChsaW5lTnVtYmVyKTsK
KyAgICAgICAgICAgICAgICB0aGlzLmFkZEJyZWFrcG9pbnQobmV3TGluZU51bWJlciwgYnJlYWtw
b2ludC5yZXNvbHZlZCwgYnJlYWtwb2ludC5jb25kaXRpb25hbCwgYnJlYWtwb2ludC5lbmFibGVk
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKKyAgICBiZWZvcmVUZXh0Q2hh
bmdlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9qYXZhU2NyaXB0U291
cmNlRnJhbWVTdGF0ZSkgeworICAgICAgICAgICAgdGhpcy5famF2YVNjcmlwdFNvdXJjZUZyYW1l
U3RhdGUgPSB7CisgICAgICAgICAgICAgICAgZXhlY3V0aW9uTGluZU51bWJlcjogdGhpcy5fZXhl
Y3V0aW9uTGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBicmVha3BvaW50czogdGhpcy5fYnJl
YWtwb2ludHMKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLnNldFNj
cmlwdFNvdXJjZUlzQmVpbmdFZGl0ZWQodHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5iZWZvcmVUZXh0Q2hhbmdlZC5jYWxsKHRoaXMp
OworICAgIH0sCisKKyAgICBjYW5jZWxFZGl0aW5nOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmNhbmNlbEVkaXRpbmcuY2FsbCh0
aGlzKTsKKyAgICAgICAgCisgICAgICAgIGlmICghdGhpcy5famF2YVNjcmlwdFNvdXJjZUZyYW1l
U3RhdGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9q
YXZhU2NyaXB0U291cmNlRnJhbWVTdGF0ZS5leGVjdXRpb25MaW5lTnVtYmVyID09PSAibnVtYmVy
IikgeworICAgICAgICAgICAgdGhpcy5jbGVhckV4ZWN1dGlvbkxpbmUoKTsKKyAgICAgICAgICAg
IHRoaXMuc2V0RXhlY3V0aW9uTGluZSh0aGlzLl9qYXZhU2NyaXB0U291cmNlRnJhbWVTdGF0ZS5l
eGVjdXRpb25MaW5lTnVtYmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBvbGRCcmVha3Bv
aW50cyA9IHRoaXMuX2JyZWFrcG9pbnRzOworICAgICAgICB0aGlzLl9icmVha3BvaW50cyA9IHt9
OworICAgICAgICBmb3IgKHZhciBsaW5lTnVtYmVyIGluIG9sZEJyZWFrcG9pbnRzKQorICAgICAg
ICAgICAgdGhpcy5yZW1vdmVCcmVha3BvaW50KE51bWJlcihsaW5lTnVtYmVyKSk7CisKKyAgICAg
ICAgdmFyIG5ld0JyZWFrcG9pbnRzID0gdGhpcy5famF2YVNjcmlwdFNvdXJjZUZyYW1lU3RhdGUu
YnJlYWtwb2ludHM7CisgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgaW4gbmV3QnJlYWtwb2lu
dHMpIHsKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBOdW1iZXIobGluZU51bWJlcik7CisgICAg
ICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ld0JyZWFrcG9pbnRzW2xpbmVOdW1iZXJdOworICAg
ICAgICAgICAgdGhpcy5hZGRCcmVha3BvaW50KGxpbmVOdW1iZXIsIGJyZWFrcG9pbnQucmVzb2x2
ZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uYWwsIGJyZWFrcG9pbnQuZW5hYmxlZCk7CisgICAgICAg
IH0KKworICAgICAgICBkZWxldGUgdGhpcy5famF2YVNjcmlwdFNvdXJjZUZyYW1lU3RhdGU7Cisg
ICAgfSwKKworICAgIGRpZEVkaXRDb250ZW50OiBmdW5jdGlvbihlcnJvcikKKyAgICB7CisgICAg
ICAgIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuZGlkRWRpdENvbnRlbnQuY2Fs
bCh0aGlzLCBlcnJvcik7CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICB2YXIgbmV3QnJlYWtwb2ludHMgPSB7fTsKKyAgICAgICAgZm9yICh2YXIgbGlu
ZU51bWJlciBpbiB0aGlzLl9icmVha3BvaW50cykgeworICAgICAgICAgICAgbmV3QnJlYWtwb2lu
dHNbbGluZU51bWJlcl0gPSB0aGlzLl9icmVha3BvaW50c1tsaW5lTnVtYmVyXTsKKyAgICAgICAg
ICAgIHRoaXMucmVtb3ZlQnJlYWtwb2ludChOdW1iZXIobGluZU51bWJlcikpOworICAgICAgICB9
CisKKyAgICAgICAgZm9yICh2YXIgbGluZU51bWJlciBpbiB0aGlzLl9qYXZhU2NyaXB0U291cmNl
RnJhbWVTdGF0ZS5icmVha3BvaW50cykKKyAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLnJlbW92
ZUJyZWFrcG9pbnQoTnVtYmVyKGxpbmVOdW1iZXIpKTsKKworICAgICAgICBmb3IgKHZhciBsaW5l
TnVtYmVyIGluIG5ld0JyZWFrcG9pbnRzKSB7CisgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9
IG5ld0JyZWFrcG9pbnRzW2xpbmVOdW1iZXJdOworICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUu
c2V0QnJlYWtwb2ludChOdW1iZXIobGluZU51bWJlciksIGJyZWFrcG9pbnQuY29uZGl0aW9uLCBi
cmVha3BvaW50LmVuYWJsZWQpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fZGVsZWdhdGUu
c2V0U2NyaXB0U291cmNlSXNCZWluZ0VkaXRlZChmYWxzZSk7CisgICAgICAgIGRlbGV0ZSB0aGlz
Ll9qYXZhU2NyaXB0U291cmNlRnJhbWVTdGF0ZTsKKyAgICB9LAorCisgICAgLy8gUG9wb3ZlciBj
YWxsYmFja3MKKyAgICBfc2hvdWxkU2hvd1BvcG92ZXI6IGZ1bmN0aW9uKGVsZW1lbnQpCiAgICAg
ewogICAgICAgICBpZiAoIXRoaXMuX21vZGVsLnBhdXNlZCkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTYyLDcgKzI1NywxNCBAQCBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZy
YW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIGVsZW1lbnQuaGFzU3R5bGVDbGFzcygi
d2Via2l0LWphdmFzY3JpcHQtaWRlbnQiKTsKICAgICB9LAogCi0gICAgb25TaG93UG9wb3Zlcjog
ZnVuY3Rpb24oZWxlbWVudCwgc2hvd0NhbGxiYWNrKQorICAgIF9nZXRQb3BvdmVyQW5jaG9yOiBm
dW5jdGlvbihlbGVtZW50KQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9zaG91bGRTaG93UG9w
b3ZlcihlbGVtZW50KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGVsZW1l
bnQ7CisgICAgfSwKKworICAgIF9vblNob3dQb3BvdmVyOiBmdW5jdGlvbihlbGVtZW50LCBzaG93
Q2FsbGJhY2spCiAgICAgewogICAgICAgICBpZiAoIXRoaXMucmVhZE9ubHkpIHsKICAgICAgICAg
ICAgIHRoaXMucG9wb3ZlckhlbHBlci5oaWRlUG9wb3ZlcigpOwpAQCAtNzIsOSArMjc0LDYgQEAg
V2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAKICAgICAg
ICAgZnVuY3Rpb24gc2hvd09iamVjdFBvcG92ZXIocmVzdWx0LCB3YXNUaHJvd24pCiAgICAgICAg
IHsKLSAgICAgICAgICAgIC8vIFBvcG92ZXIgbWF5IGhhdmUgYmVlbiByZW1vdmVkIHdoaWxlIHdl
IHdlcmUgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbi4KLSAgICAgICAgICAgIGlmICghdGhpcy5f
aGlnaGxpZ2h0RWxlbWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBp
ZiAoIXRoaXMuX21vZGVsLnBhdXNlZCkgewogICAgICAgICAgICAgICAgIHRoaXMucG9wb3Zlckhl
bHBlci5oaWRlUG9wb3ZlcigpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTg5LDcgKzI4
OCw3IEBAIFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlID0gewog
ICAgICAgICBzZWxlY3RlZENhbGxGcmFtZS5ldmFsdWF0ZSh0aGlzLl9oaWdobGlnaHRFbGVtZW50
LnRleHRDb250ZW50LCB0aGlzLl9wb3BvdmVyT2JqZWN0R3JvdXAsIGZhbHNlLCBmYWxzZSwgc2hv
d09iamVjdFBvcG92ZXIuYmluZCh0aGlzKSk7CiAgICAgfSwKIAotICAgIG9uSGlkZVBvcG92ZXI6
IGZ1bmN0aW9uKCkKKyAgICBfb25IaWRlUG9wb3ZlcjogZnVuY3Rpb24oKQogICAgIHsKICAgICAg
ICAgLy8gUmVwbGFjZSBoaWdsaWdodCBlbGVtZW50IHdpdGggaXRzIGNvbnRlbnRzIGlucGxhY2Uu
CiAgICAgICAgIHZhciBoaWdobGlnaHRFbGVtZW50ID0gdGhpcy5faGlnaGxpZ2h0RWxlbWVudDsK
QEAgLTEyOCwxMyArMzI3LDE3NyBAQCBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1l
LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjsKICAgICB9LAogCi0gICAg
cG9wdWxhdGVUZXh0QXJlYUNvbnRleHRNZW51OiBmdW5jdGlvbihjb250ZXh0TWVudSkKKyAgICBh
ZGRCcmVha3BvaW50OiBmdW5jdGlvbihsaW5lTnVtYmVyLCByZXNvbHZlZCwgY29uZGl0aW9uYWws
IGVuYWJsZWQpCiAgICAgewotICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVj
dGlvbigpOwotICAgICAgICBpZiAoc2VsZWN0aW9uLnR5cGUgIT09ICJSYW5nZSIgfHwgc2VsZWN0
aW9uLmlzQ29sbGFwc2VkKQorICAgICAgICB0aGlzLl9icmVha3BvaW50c1tsaW5lTnVtYmVyXSA9
IHsKKyAgICAgICAgICAgIHJlc29sdmVkOiByZXNvbHZlZCwKKyAgICAgICAgICAgIGNvbmRpdGlv
bmFsOiBjb25kaXRpb25hbCwKKyAgICAgICAgICAgIGVuYWJsZWQ6IGVuYWJsZWQKKyAgICAgICAg
fTsKKyAgICAgICAgdGhpcy50ZXh0Vmlld2VyLmJlZ2luVXBkYXRlcygpOworICAgICAgICB0aGlz
LnRleHRWaWV3ZXIuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQi
KTsKKyAgICAgICAgaWYgKCFlbmFibGVkKQorICAgICAgICAgICAgdGhpcy50ZXh0Vmlld2VyLmFk
ZERlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50LWRpc2FibGVkIik7Cisg
ICAgICAgIGlmIChjb25kaXRpb25hbCkKKyAgICAgICAgICAgIHRoaXMudGV4dFZpZXdlci5hZGRE
ZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1jb25kaXRpb25hbCIpOwor
ICAgICAgICB0aGlzLnRleHRWaWV3ZXIuZW5kVXBkYXRlcygpOworICAgIH0sCisKKyAgICByZW1v
dmVCcmVha3BvaW50OiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgZGVsZXRl
IHRoaXMuX2JyZWFrcG9pbnRzW2xpbmVOdW1iZXJdOworICAgICAgICB0aGlzLnRleHRWaWV3ZXIu
YmVnaW5VcGRhdGVzKCk7CisgICAgICAgIHRoaXMudGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9u
KGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludCIpOworICAgICAgICB0aGlzLnRleHRWaWV3
ZXIucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtZGlzYWJs
ZWQiKTsKKyAgICAgICAgdGhpcy50ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24obGluZU51bWJl
ciwgIndlYmtpdC1icmVha3BvaW50LWNvbmRpdGlvbmFsIik7CisgICAgICAgIHRoaXMudGV4dFZp
ZXdlci5lbmRVcGRhdGVzKCk7CisgICAgfSwKKworICAgIF9tb3VzZURvd246IGZ1bmN0aW9uKGV2
ZW50KQorICAgIHsKKyAgICAgICAgaWYgKGV2ZW50LmJ1dHRvbiAhPSAwIHx8IGV2ZW50LmFsdEtl
eSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdl
Ykluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiQWRkIHRvIHdhdGNoIiA6ICJB
ZGQgdG8gV2F0Y2giKSwgdGhpcy5fZGVsZWdhdGUuYWRkVG9XYXRjaC5iaW5kKHRoaXMuX2RlbGVn
YXRlLCBzZWxlY3Rpb24udG9TdHJpbmcoKSkpOworICAgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQu
dGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoIndlYmtpdC1saW5lLW51bWJlciIp
OworICAgICAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFy
IGxpbmVOdW1iZXIgPSB0YXJnZXQubGluZU51bWJlcjsKKworICAgICAgICB2YXIgYnJlYWtwb2lu
dCA9IHRoaXMuX2RlbGVnYXRlLmZpbmRCcmVha3BvaW50KGxpbmVOdW1iZXIpOworICAgICAgICBp
ZiAoYnJlYWtwb2ludCkgeworICAgICAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KQorICAgICAg
ICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLnVwZGF0ZUJyZWFrcG9pbnQobGluZU51bWJlciwgYnJl
YWtwb2ludC5jb25kaXRpb24sICFicmVha3BvaW50LmVuYWJsZWQpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLnJlbW92ZUJyZWFrcG9pbnQobGluZU51
bWJlcik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUuc2V0QnJl
YWtwb2ludChsaW5lTnVtYmVyLCAiIiwgdHJ1ZSk7CisgICAgICAgIGV2ZW50LnByZXZlbnREZWZh
dWx0KCk7CisgICAgfSwKKworICAgIF9lZGl0QnJlYWtwb2ludENvbmRpdGlvbjogZnVuY3Rpb24o
bGluZU51bWJlciwgY29uZGl0aW9uLCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHRoaXMuX2Nv
bmRpdGlvbkVsZW1lbnQgPSB0aGlzLl9jcmVhdGVDb25kaXRpb25FbGVtZW50KGxpbmVOdW1iZXIp
OworICAgICAgICB0aGlzLnRleHRWaWV3ZXIuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCB0aGlz
Ll9jb25kaXRpb25FbGVtZW50KTsKKworICAgICAgICBmdW5jdGlvbiBmaW5pc2hFZGl0aW5nKGNv
bW1pdHRlZCwgZWxlbWVudCwgbmV3VGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy50
ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwgdGhpcy5fY29uZGl0aW9uRWxl
bWVudCk7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fY29uZGl0aW9uRWRpdG9yRWxlbWVudDsK
KyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jb25kaXRpb25FbGVtZW50OworICAgICAgICAgICAg
Y2FsbGJhY2soY29tbWl0dGVkLCBuZXdUZXh0KTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBj
b25maWcgPSBuZXcgV2ViSW5zcGVjdG9yLkVkaXRpbmdDb25maWcoZmluaXNoRWRpdGluZy5iaW5k
KHRoaXMsIHRydWUpLCBmaW5pc2hFZGl0aW5nLmJpbmQodGhpcywgZmFsc2UpKTsKKyAgICAgICAg
V2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyh0aGlzLl9jb25kaXRpb25FZGl0b3JFbGVtZW50LCBj
b25maWcpOworICAgICAgICB0aGlzLl9jb25kaXRpb25FZGl0b3JFbGVtZW50LnZhbHVlID0gY29u
ZGl0aW9uOworICAgICAgICB0aGlzLl9jb25kaXRpb25FZGl0b3JFbGVtZW50LnNlbGVjdCgpOwor
ICAgIH0sCisKKyAgICBfY3JlYXRlQ29uZGl0aW9uRWxlbWVudDogZnVuY3Rpb24obGluZU51bWJl
cikKKyAgICB7CisgICAgICAgIHZhciBjb25kaXRpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7CisgICAgICAgIGNvbmRpdGlvbkVsZW1lbnQuY2xhc3NOYW1lID0gInNv
dXJjZS1mcmFtZS1icmVha3BvaW50LWNvbmRpdGlvbiI7CisKKyAgICAgICAgdmFyIGxhYmVsRWxl
bWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7CisgICAgICAgIGxhYmVsRWxl
bWVudC5jbGFzc05hbWUgPSAic291cmNlLWZyYW1lLWJyZWFrcG9pbnQtbWVzc2FnZSI7CisgICAg
ICAgIGxhYmVsRWxlbWVudC5odG1sRm9yID0gInNvdXJjZS1mcmFtZS1icmVha3BvaW50LWNvbmRp
dGlvbiI7CisgICAgICAgIGxhYmVsRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRoZSBicmVha3BvaW50IG9uIGxpbmUgJWQg
d2lsbCBzdG9wIG9ubHkgaWYgdGhpcyBleHByZXNzaW9uIGlzIHRydWU6IiwgbGluZU51bWJlcikp
KTsKKyAgICAgICAgY29uZGl0aW9uRWxlbWVudC5hcHBlbmRDaGlsZChsYWJlbEVsZW1lbnQpOwor
CisgICAgICAgIHZhciBlZGl0b3JFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5w
dXQiKTsKKyAgICAgICAgZWRpdG9yRWxlbWVudC5pZCA9ICJzb3VyY2UtZnJhbWUtYnJlYWtwb2lu
dC1jb25kaXRpb24iOworICAgICAgICBlZGl0b3JFbGVtZW50LmNsYXNzTmFtZSA9ICJtb25vc3Bh
Y2UiOworICAgICAgICBlZGl0b3JFbGVtZW50LnR5cGUgPSAidGV4dCI7CisgICAgICAgIGNvbmRp
dGlvbkVsZW1lbnQuYXBwZW5kQ2hpbGQoZWRpdG9yRWxlbWVudCk7CisgICAgICAgIHRoaXMuX2Nv
bmRpdGlvbkVkaXRvckVsZW1lbnQgPSBlZGl0b3JFbGVtZW50OworCisgICAgICAgIHJldHVybiBj
b25kaXRpb25FbGVtZW50OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge2Jvb2xl
YW49fSBza2lwUmV2ZWFsTGluZQorICAgICAqLworICAgIHNldEV4ZWN1dGlvbkxpbmU6IGZ1bmN0
aW9uKGxpbmVOdW1iZXIsIHNraXBSZXZlYWxMaW5lKQorICAgIHsKKyAgICAgICAgdGhpcy5fZXhl
Y3V0aW9uTGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgIGlmICh0aGlzLmxvYWRlZCkg
eworICAgICAgICAgICAgdGhpcy50ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciwg
IndlYmtpdC1leGVjdXRpb24tbGluZSIpOworICAgICAgICAgICAgaWYgKCFza2lwUmV2ZWFsTGlu
ZSkKKyAgICAgICAgICAgICAgICB0aGlzLnRleHRWaWV3ZXIucmV2ZWFsTGluZShsaW5lTnVtYmVy
KTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBjbGVhckV4ZWN1dGlvbkxpbmU6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLmxvYWRlZCkKKyAgICAgICAgICAgIHRoaXMudGV4
dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIsICJ3ZWJr
aXQtZXhlY3V0aW9uLWxpbmUiKTsKKyAgICAgICAgZGVsZXRlIHRoaXMuX2V4ZWN1dGlvbkxpbmVO
dW1iZXI7CisgICAgfSwKKworICAgIF9saW5lTnVtYmVyQWZ0ZXJFZGl0aW5nOiBmdW5jdGlvbihs
aW5lTnVtYmVyLCBvbGRSYW5nZSwgbmV3UmFuZ2UpCisgICAgeworICAgICAgICB2YXIgc2hpZnRP
ZmZzZXQgPSBsaW5lTnVtYmVyIDw9IG9sZFJhbmdlLnN0YXJ0TGluZSA/IDAgOiBuZXdSYW5nZS5s
aW5lc0NvdW50IC0gb2xkUmFuZ2UubGluZXNDb3VudDsKKworICAgICAgICAvLyBTcGVjaWFsIGNh
c2Ugb2YgZWRpdGluZyB0aGUgbGluZSBpdHNlbGYuIFdlIHNob3VsZCBkZWNpZGUgd2hldGhlciB0
aGUgbGluZSBudW1iZXIgc2hvdWxkIG1vdmUgYmVsb3cgb3Igbm90LgorICAgICAgICBpZiAobGlu
ZU51bWJlciA9PT0gb2xkUmFuZ2Uuc3RhcnRMaW5lKSB7CisgICAgICAgICAgICB2YXIgd2hpdGVT
cGFjZXNSZWdleCA9IC9eW1xzXHhBMF0qJC87CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
bGluZU51bWJlciArIGkgPD0gbmV3UmFuZ2UuZW5kTGluZTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCF3aGl0ZVNwYWNlc1JlZ2V4LnRlc3QodGhpcy5fdGV4dE1vZGVsLmxpbmUobGluZU51
bWJlciArIGkpKSkgeworICAgICAgICAgICAgICAgICAgICBzaGlmdE9mZnNldCA9IGk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIHZhciBuZXdMaW5lTnVtYmVyID0gTWF0aC5tYXgoMCwgbGlu
ZU51bWJlciArIHNoaWZ0T2Zmc2V0KTsKKyAgICAgICAgaWYgKG9sZFJhbmdlLnN0YXJ0TGluZSA8
IGxpbmVOdW1iZXIgJiYgbGluZU51bWJlciA8IG9sZFJhbmdlLmVuZExpbmUpCisgICAgICAgICAg
ICBuZXdMaW5lTnVtYmVyID0gb2xkUmFuZ2Uuc3RhcnRMaW5lOworICAgICAgICByZXR1cm4gbmV3
TGluZU51bWJlcjsKKyAgICB9LAorCisgICAgX29uVGV4dFZpZXdlckNvbnRlbnRMb2FkZWQ6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fZXhlY3V0aW9uTGluZU51
bWJlciA9PT0gIm51bWJlciIpCisgICAgICAgICAgICB0aGlzLnNldEV4ZWN1dGlvbkxpbmUodGhp
cy5fZXhlY3V0aW9uTGluZU51bWJlcik7CiAgICAgfQogfQogCiBXZWJJbnNwZWN0b3IuSmF2YVNj
cmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUucHJvdG90eXBlOworCisvKioKKyAqIEBpbnRlcmZhY2UKKyAqLworV2ViSW5zcGVjdG9y
LkphdmFTY3JpcHRTb3VyY2VGcmFtZURlbGVnYXRlID0gZnVuY3Rpb24oKQoreworfQorCitXZWJJ
bnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lRGVsZWdhdGUucHJvdG90eXBlID0geworICAg
IHJlcXVlc3RDb250ZW50OiBmdW5jdGlvbihjYWxsYmFjaykgeyB9LAorCisgICAgc2V0QnJlYWtw
b2ludDogZnVuY3Rpb24obGluZU51bWJlciwgY29uZGl0aW9uLCBlbmFibGVkKSB7IH0sCisKKyAg
ICByZW1vdmVCcmVha3BvaW50OiBmdW5jdGlvbihsaW5lTnVtYmVyKSB7IH0sCisKKyAgICB1cGRh
dGVCcmVha3BvaW50OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb25kaXRpb24sIGVuYWJsZWQpIHsg
fSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4gez9XZWJJbnNwZWN0b3IuQnJlYWtwb2ludH0K
KyAgICAgKi8KKyAgICBmaW5kQnJlYWtwb2ludDogZnVuY3Rpb24obGluZU51bWJlcikgeyB9LAor
CisgICAgY29udGludWVUb0xpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpIHsgfSwKKworICAgIGNh
bkVkaXRTY3JpcHRTb3VyY2U6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0sCisKKyAgICBz
ZXRTY3JpcHRTb3VyY2U6IGZ1bmN0aW9uKHRleHQsIGNhbGxiYWNrKSB7IH0sCisKKyAgICBzZXRT
Y3JpcHRTb3VyY2VJc0JlaW5nRWRpdGVkOiBmdW5jdGlvbihpbkVkaXRNb2RlKSB7IH0sCisKKyAg
ICBzdWdnZXN0ZWRGaWxlTmFtZTogZnVuY3Rpb24oKSB7IH0sCisKKyAgICBhZGRUb1dhdGNoOiBm
dW5jdGlvbigpIHsgfQorfQorCisvKioKKyAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24uCisgKi8K
K1dlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWVEZWxlZ2F0ZS5zdHViID0gT2JqZWN0
LmNyZWF0ZShXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lRGVsZWdhdGUucHJvdG90
eXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVz
b3VyY2VWaWV3LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJj
ZVZpZXcuanMKaW5kZXggMWE4ZWM3ZS4uYjk5YjU4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVZpZXcuanMKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVZpZXcuanMKQEAgLTgyLDcgKzgyLDcgQEAg
V2ViSW5zcGVjdG9yLlJlc291cmNlVmlldy5ub25Tb3VyY2VWaWV3Rm9yUmVzb3VyY2UgPSBmdW5j
dGlvbihyZXNvdXJjZSkKICAqLwogV2ViSW5zcGVjdG9yLlJlc291cmNlU291cmNlRnJhbWUgPSBm
dW5jdGlvbihyZXNvdXJjZSkKIHsKLSAgICBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUuY2FsbCh0
aGlzLCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVEZWxlZ2F0ZS5zdHViLCByZXNvdXJjZS51cmwp
OworICAgIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5jYWxsKHRoaXMsIHJlc291cmNlLnVybCk7
CiAgICAgdGhpcy5fcmVzb3VyY2UgPSByZXNvdXJjZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwppbmRleCA0MTAzZGFmLi44
MDcwZjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nj
cmlwdHNQYW5lbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nj
cmlwdHNQYW5lbC5qcwpAQCAtMTIwOSwxMyArMTIwOSwxMyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0
c1BhbmVsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90eXBl
OwogCiAvKioKICAqIEBjb25zdHJ1Y3RvcgotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZURlbGVnYXRlfQorICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5KYXZhU2Ny
aXB0U291cmNlRnJhbWVEZWxlZ2F0ZX0KICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlNjcmlwdHNQ
YW5lbH0gc2NyaXB0c1BhbmVsCiAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9
IHVpU291cmNlQ29kZQogICovCiBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVEZWxlZ2F0ZUZvclNj
cmlwdHNQYW5lbCA9IGZ1bmN0aW9uKHNjcmlwdHNQYW5lbCwgdWlTb3VyY2VDb2RlKQogewotICAg
IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZURlbGVnYXRlLmNhbGwodGhpcyk7CisgICAgV2ViSW5z
cGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZURlbGVnYXRlLmNhbGwodGhpcyk7CiAKICAgICB0
aGlzLl9zY3JpcHRzUGFuZWwgPSBzY3JpcHRzUGFuZWw7CiAgICAgdGhpcy5fbW9kZWwgPSB0aGlz
Ll9zY3JpcHRzUGFuZWwuX3ByZXNlbnRhdGlvbk1vZGVsOwpAQCAtMTI4Myw0ICsxMjgzLDQgQEAg
V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lRGVsZWdhdGVGb3JTY3JpcHRzUGFuZWwucHJvdG90eXBl
ID0gewogICAgIH0KIH0KIAotV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lRGVsZWdhdGVGb3JTY3Jp
cHRzUGFuZWwucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZURl
bGVnYXRlLnByb3RvdHlwZTsKK1dlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZURlbGVnYXRlRm9yU2Ny
aXB0c1BhbmVsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNv
dXJjZUZyYW1lRGVsZWdhdGUucHJvdG90eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKaW5kZXggNjQ1ZjgyZC4uMzE1NTdmMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5q
cworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpz
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC0zMiwxMiArMzIsMTEgQEAKICAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuVmlld30KICAqIEBj
b25zdHJ1Y3RvcgogICovCi1XZWJJbnNwZWN0b3IuU291cmNlRnJhbWUgPSBmdW5jdGlvbihkZWxl
Z2F0ZSwgdXJsKQorV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lID0gZnVuY3Rpb24odXJsKQogewog
ICAgIFdlYkluc3BlY3Rvci5WaWV3LmNhbGwodGhpcyk7CiAgICAgdGhpcy5lbGVtZW50LmFkZFN0
eWxlQ2xhc3MoInNjcmlwdC12aWV3Iik7CiAKLSAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRl
OwogICAgIHRoaXMuX3VybCA9IHVybDsKIAogICAgIHRoaXMuX3RleHRNb2RlbCA9IG5ldyBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1vZGVsKCk7CkBAIC00NSwxMCArNDQsNiBAQCBXZWJJbnNwZWN0
b3IuU291cmNlRnJhbWUgPSBmdW5jdGlvbihkZWxlZ2F0ZSwgdXJsKQogICAgIHZhciB0ZXh0Vmll
d2VyRGVsZWdhdGUgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXJEZWxlZ2F0ZUZvclNvdXJj
ZUZyYW1lKHRoaXMpOwogICAgIHRoaXMuX3RleHRWaWV3ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRl
eHRWaWV3ZXIodGhpcy5fdGV4dE1vZGVsLCBXZWJJbnNwZWN0b3IucGxhdGZvcm0sIHRoaXMuX3Vy
bCwgdGV4dFZpZXdlckRlbGVnYXRlKTsKIAotICAgIHRoaXMucG9wb3ZlckhlbHBlciA9IG5ldyBX
ZWJJbnNwZWN0b3IuT2JqZWN0UG9wb3ZlckhlbHBlcih0aGlzLl90ZXh0Vmlld2VyLmVsZW1lbnQs
Ci0gICAgICAgICAgICB0aGlzLl9nZXRQb3BvdmVyQW5jaG9yLmJpbmQodGhpcyksIHRoaXMub25T
aG93UG9wb3Zlci5iaW5kKHRoaXMpLCB0aGlzLm9uSGlkZVBvcG92ZXIuYmluZCh0aGlzKSwgdHJ1
ZSk7Ci0gICAgdGhpcy5fdGV4dFZpZXdlci5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNl
ZG93biIsIHRoaXMuX21vdXNlRG93bi5iaW5kKHRoaXMpLCB0cnVlKTsKLQogICAgIHRoaXMuX2Vk
aXRCdXR0b24gPSBuZXcgV2ViSW5zcGVjdG9yLlN0YXR1c0JhckJ1dHRvbihXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIkVkaXQiKSwgImVkaXQtc291cmNlLXN0YXR1cy1iYXItaXRlbSIpOwogICAgIHRo
aXMuX2VkaXRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9lZGl0QnV0dG9u
Q2xpY2tlZC5iaW5kKHRoaXMpLCB0aGlzKTsKIApAQCAtNTgsOCArNTMsNiBAQCBXZWJJbnNwZWN0
b3IuU291cmNlRnJhbWUgPSBmdW5jdGlvbihkZWxlZ2F0ZSwgdXJsKQogICAgIHRoaXMuX21lc3Nh
Z2VzID0gW107CiAgICAgdGhpcy5fcm93TWVzc2FnZXMgPSB7fTsKICAgICB0aGlzLl9tZXNzYWdl
QnViYmxlcyA9IHt9OwotCi0gICAgdGhpcy5fYnJlYWtwb2ludHMgPSB7fTsKIH0KIAogV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lLkV2ZW50cyA9IHsKQEAgLTg1LDcgKzc4LDYgQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lLmNyZWF0ZVNlYXJjaFJlZ2V4ID0gZnVuY3Rpb24ocXVlcnkpCiAgICAg
cmV0dXJuIHJlZ2V4OwogfQogCi0KIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUg
PSB7CiAgICAgd2FzU2hvd246IGZ1bmN0aW9uKCkKICAgICB7CkBAIC05OSw4ICs5MSw2IEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLmxv
YWRlZCkKICAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuZnJlZUNhY2hlZEVsZW1lbnRzKCk7
CiAKLSAgICAgICAgaWYgKHRoaXMucG9wb3ZlckhlbHBlcikKLSAgICAgICAgICAgIHRoaXMucG9w
b3ZlckhlbHBlci5oaWRlUG9wb3ZlcigpOwogICAgICAgICB0aGlzLl9jbGVhckxpbmVIaWdobGln
aHQoKTsKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZWFkT25seSA9IHRydWU7CiAgICAgfSwK
QEAgLTEyMCwxNyArMTEwLDIxIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0sCiAKKyAgICBnZXQgdGV4dFZpZXdlcigp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdGV4dFZpZXdlcjsKKyAgICB9LAorCiAgICAg
X2Vuc3VyZUNvbnRlbnRMb2FkZWQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICghdGhp
cy5fY29udGVudFJlcXVlc3RlZCkgewogICAgICAgICAgICAgdGhpcy5fY29udGVudFJlcXVlc3Rl
ZCA9IHRydWU7Ci0gICAgICAgICAgICB0aGlzLnJlcXVlc3RDb250ZW50KHRoaXMuX2luaXRpYWxp
emVUZXh0Vmlld2VyLmJpbmQodGhpcykpOworICAgICAgICAgICAgdGhpcy5yZXF1ZXN0Q29udGVu
dCh0aGlzLnNldENvbnRlbnQuYmluZCh0aGlzKSk7CiAgICAgICAgIH0KICAgICB9LAogCiAgICAg
cmVxdWVzdENvbnRlbnQ6IGZ1bmN0aW9uKGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgdGhpcy5f
ZGVsZWdhdGUucmVxdWVzdENvbnRlbnQoY2FsbGJhY2spOwogICAgIH0sCiAKICAgICAvKioKQEAg
LTE5NywxMCArMTkxLDggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsK
ICAgICB7CiAgICAgICAgIHRoaXMuX3ZpZXdlclN0YXRlID0gewogICAgICAgICAgICAgdGV4dE1v
ZGVsQ29udGVudDogdGhpcy5fdGV4dE1vZGVsLnRleHQsCi0gICAgICAgICAgICBleGVjdXRpb25M
aW5lTnVtYmVyOiB0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyLAogICAgICAgICAgICAgbWVzc2Fn
ZXM6IHRoaXMuX21lc3NhZ2VzLAogICAgICAgICAgICAgZGlmZkxpbmVzOiB0aGlzLl9kaWZmTGlu
ZXMsCi0gICAgICAgICAgICBicmVha3BvaW50czogdGhpcy5fYnJlYWtwb2ludHMKICAgICAgICAg
fTsKICAgICB9LAogCkBAIC0yMTQsMzIgKzIwNiwxMyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWUucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9kaWZmTGluZXMgPSB0aGlzLl92aWV3ZXJT
dGF0ZS5kaWZmTGluZXM7CiAgICAgICAgIHRoaXMuX3NldFRleHRWaWV3ZXJEZWNvcmF0aW9ucygp
OwogCi0gICAgICAgIGlmICh0eXBlb2YgdGhpcy5fdmlld2VyU3RhdGUuZXhlY3V0aW9uTGluZU51
bWJlciA9PT0gIm51bWJlciIpIHsKLSAgICAgICAgICAgIHRoaXMuY2xlYXJFeGVjdXRpb25MaW5l
KCk7Ci0gICAgICAgICAgICB0aGlzLnNldEV4ZWN1dGlvbkxpbmUodGhpcy5fdmlld2VyU3RhdGUu
ZXhlY3V0aW9uTGluZU51bWJlcik7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgb2xkQnJlYWtw
b2ludHMgPSB0aGlzLl9icmVha3BvaW50czsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMgPSB7
fTsKLSAgICAgICAgZm9yICh2YXIgbGluZU51bWJlciBpbiBvbGRCcmVha3BvaW50cykKLSAgICAg
ICAgICAgIHRoaXMucmVtb3ZlQnJlYWtwb2ludChOdW1iZXIobGluZU51bWJlcikpOwotCi0gICAg
ICAgIHZhciBuZXdCcmVha3BvaW50cyA9IHRoaXMuX3ZpZXdlclN0YXRlLmJyZWFrcG9pbnRzOwot
ICAgICAgICBmb3IgKHZhciBsaW5lTnVtYmVyIGluIG5ld0JyZWFrcG9pbnRzKSB7Ci0gICAgICAg
ICAgICBsaW5lTnVtYmVyID0gTnVtYmVyKGxpbmVOdW1iZXIpOwotICAgICAgICAgICAgdmFyIGJy
ZWFrcG9pbnQgPSBuZXdCcmVha3BvaW50c1tsaW5lTnVtYmVyXTsKLSAgICAgICAgICAgIHRoaXMu
YWRkQnJlYWtwb2ludChsaW5lTnVtYmVyLCBicmVha3BvaW50LnJlc29sdmVkLCBicmVha3BvaW50
LmNvbmRpdGlvbmFsLCBicmVha3BvaW50LmVuYWJsZWQpOwotICAgICAgICB9Ci0KICAgICAgICAg
ZGVsZXRlIHRoaXMuX3ZpZXdlclN0YXRlOwogICAgIH0sCiAKICAgICBiZWZvcmVUZXh0Q2hhbmdl
ZDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl92aWV3ZXJTdGF0ZSkgewor
ICAgICAgICBpZiAoIXRoaXMuX3ZpZXdlclN0YXRlKQogICAgICAgICAgICAgdGhpcy5fc2F2ZVZp
ZXdlclN0YXRlKCk7Ci0gICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5zZXRTY3JpcHRTb3VyY2VJ
c0JlaW5nRWRpdGVkKHRydWUpOwotICAgICAgICB9CiAKICAgICAgICAgV2ViSW5zcGVjdG9yLnNl
YXJjaENvbnRyb2xsZXIuY2FuY2VsU2VhcmNoKCk7CiAgICAgICAgIHRoaXMuY2xlYXJNZXNzYWdl
cygpOwpAQCAtMjQ3LDU0ICsyMjAsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90
eXBlID0gewogCiAgICAgYWZ0ZXJUZXh0Q2hhbmdlZDogZnVuY3Rpb24ob2xkUmFuZ2UsIG5ld1Jh
bmdlKQogICAgIHsKLSAgICAgICAgaWYgKCFvbGRSYW5nZSB8fCAhbmV3UmFuZ2UpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gQWRqdXN0IGV4ZWN1dGlvbiBsaW5lIG51bWJlci4K
LSAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyID09PSAibnVtYmVy
IikgewotICAgICAgICAgICAgdmFyIG5ld0V4ZWN1dGlvbkxpbmVOdW1iZXIgPSB0aGlzLl9saW5l
TnVtYmVyQWZ0ZXJFZGl0aW5nKHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIsIG9sZFJhbmdlLCBu
ZXdSYW5nZSk7Ci0gICAgICAgICAgICB0aGlzLmNsZWFyRXhlY3V0aW9uTGluZSgpOwotICAgICAg
ICAgICAgdGhpcy5zZXRFeGVjdXRpb25MaW5lKG5ld0V4ZWN1dGlvbkxpbmVOdW1iZXIsIHRydWUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWRqdXN0IGJyZWFrcG9pbnRzLgotICAgICAgICB2
YXIgb2xkQnJlYWtwb2ludHMgPSB0aGlzLl9icmVha3BvaW50czsKLSAgICAgICAgdGhpcy5fYnJl
YWtwb2ludHMgPSB7fTsKLSAgICAgICAgZm9yICh2YXIgbGluZU51bWJlciBpbiBvbGRCcmVha3Bv
aW50cykgewotICAgICAgICAgICAgbGluZU51bWJlciA9IE51bWJlcihsaW5lTnVtYmVyKTsKLSAg
ICAgICAgICAgIHZhciBicmVha3BvaW50ID0gb2xkQnJlYWtwb2ludHNbbGluZU51bWJlcl07Ci0g
ICAgICAgICAgICB2YXIgbmV3TGluZU51bWJlciA9IHRoaXMuX2xpbmVOdW1iZXJBZnRlckVkaXRp
bmcobGluZU51bWJlciwgb2xkUmFuZ2UsIG5ld1JhbmdlKTsKLSAgICAgICAgICAgIGlmIChsaW5l
TnVtYmVyID09PSBuZXdMaW5lTnVtYmVyKQotICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9p
bnRzW2xpbmVOdW1iZXJdID0gYnJlYWtwb2ludDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgIHRoaXMucmVtb3ZlQnJlYWtwb2ludChsaW5lTnVtYmVyKTsKLSAgICAgICAgICAg
ICAgICB0aGlzLmFkZEJyZWFrcG9pbnQobmV3TGluZU51bWJlciwgYnJlYWtwb2ludC5yZXNvbHZl
ZCwgYnJlYWtwb2ludC5jb25kaXRpb25hbCwgYnJlYWtwb2ludC5lbmFibGVkKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfbGluZU51bWJlckFmdGVyRWRpdGluZzog
ZnVuY3Rpb24obGluZU51bWJlciwgb2xkUmFuZ2UsIG5ld1JhbmdlKQotICAgIHsKLSAgICAgICAg
dmFyIHNoaWZ0T2Zmc2V0ID0gbGluZU51bWJlciA8PSBvbGRSYW5nZS5zdGFydExpbmUgPyAwIDog
bmV3UmFuZ2UubGluZXNDb3VudCAtIG9sZFJhbmdlLmxpbmVzQ291bnQ7Ci0KLSAgICAgICAgLy8g
U3BlY2lhbCBjYXNlIG9mIGVkaXRpbmcgdGhlIGxpbmUgaXRzZWxmLiBXZSBzaG91bGQgZGVjaWRl
IHdoZXRoZXIgdGhlIGxpbmUgbnVtYmVyIHNob3VsZCBtb3ZlIGJlbG93IG9yIG5vdC4KLSAgICAg
ICAgaWYgKGxpbmVOdW1iZXIgPT09IG9sZFJhbmdlLnN0YXJ0TGluZSkgewotICAgICAgICAgICAg
dmFyIHdoaXRlU3BhY2VzUmVnZXggPSAvXltcc1x4QTBdKiQvOwotICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGxpbmVOdW1iZXIgKyBpIDw9IG5ld1JhbmdlLmVuZExpbmU7ICsraSkgewotICAg
ICAgICAgICAgICAgIGlmICghd2hpdGVTcGFjZXNSZWdleC50ZXN0KHRoaXMuX3RleHRNb2RlbC5s
aW5lKGxpbmVOdW1iZXIgKyBpKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgc2hpZnRPZmZzZXQg
PSBpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgbmV3TGluZU51bWJlciA9IE1hdGgu
bWF4KDAsIGxpbmVOdW1iZXIgKyBzaGlmdE9mZnNldCk7Ci0gICAgICAgIGlmIChvbGRSYW5nZS5z
dGFydExpbmUgPCBsaW5lTnVtYmVyICYmIGxpbmVOdW1iZXIgPCBvbGRSYW5nZS5lbmRMaW5lKQot
ICAgICAgICAgICAgbmV3TGluZU51bWJlciA9IG9sZFJhbmdlLnN0YXJ0TGluZTsKLSAgICAgICAg
cmV0dXJuIG5ld0xpbmVOdW1iZXI7CiAgICAgfSwKIAotICAgIF9pbml0aWFsaXplVGV4dFZpZXdl
cjogZnVuY3Rpb24obWltZVR5cGUsIGNvbnRlbnQpCisgICAgc2V0Q29udGVudDogZnVuY3Rpb24o
bWltZVR5cGUsIGNvbnRlbnQpCiAgICAgewogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLm1pbWVU
eXBlID0gbWltZVR5cGU7CiAKQEAgLTMwNSw5ICsyMzMsNiBAQCBXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUucHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMuX3NldFRleHRWaWV3ZXJEZWNvcmF0
aW9ucygpOwogCi0gICAgICAgIGlmICh0eXBlb2YgdGhpcy5fZXhlY3V0aW9uTGluZU51bWJlciA9
PT0gIm51bWJlciIpCi0gICAgICAgICAgICB0aGlzLnNldEV4ZWN1dGlvbkxpbmUodGhpcy5fZXhl
Y3V0aW9uTGluZU51bWJlcik7Ci0KICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9saW5lVG9IaWdo
bGlnaHQgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodExpbmUodGhp
cy5fbGluZVRvSGlnaGxpZ2h0KTsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9saW5lVG9IaWdo
bGlnaHQ7CkBAIC00NDMsMjYgKzM2OCw2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiByYW5nZXM7CiAgICAgfSwKIAotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7Ym9vbGVhbj19IHNraXBSZXZlYWxMaW5lCi0gICAgICovCi0gICAgc2V0RXhl
Y3V0aW9uTGluZTogZnVuY3Rpb24obGluZU51bWJlciwgc2tpcFJldmVhbExpbmUpCi0gICAgewot
ICAgICAgICB0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAgICAgICAg
aWYgKHRoaXMubG9hZGVkKSB7Ci0gICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29y
YXRpb24obGluZU51bWJlciwgIndlYmtpdC1leGVjdXRpb24tbGluZSIpOwotICAgICAgICAgICAg
aWYgKCFza2lwUmV2ZWFsTGluZSkKLSAgICAgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJl
dmVhbExpbmUobGluZU51bWJlcik7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgY2xlYXJFeGVj
dXRpb25MaW5lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5sb2FkZWQpCi0g
ICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24odGhpcy5fZXhlY3V0
aW9uTGluZU51bWJlciwgIndlYmtpdC1leGVjdXRpb24tbGluZSIpOwotICAgICAgICBkZWxldGUg
dGhpcy5fZXhlY3V0aW9uTGluZU51bWJlcjsKLSAgICB9LAotCiAgICAgX3VwZGF0ZURpZmZEZWNv
cmF0aW9uczogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9kaWZmTGluZXMp
CkBAIC01NzEsNzUgKzQ3Niw4IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHJvd01lc3NhZ2UucmVwZWF0Q291bnRFbGVtZW50LnRleHRDb250ZW50ID0g
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIgKHJlcGVhdGVkICVkIHRpbWVzKSIsIHJvd01lc3NhZ2Uu
cmVwZWF0Q291bnQpOwogICAgIH0sCiAKLSAgICBhZGRCcmVha3BvaW50OiBmdW5jdGlvbihsaW5l
TnVtYmVyLCByZXNvbHZlZCwgY29uZGl0aW9uYWwsIGVuYWJsZWQpCi0gICAgewotICAgICAgICB0
aGlzLl9icmVha3BvaW50c1tsaW5lTnVtYmVyXSA9IHsKLSAgICAgICAgICAgIHJlc29sdmVkOiBy
ZXNvbHZlZCwKLSAgICAgICAgICAgIGNvbmRpdGlvbmFsOiBjb25kaXRpb25hbCwKLSAgICAgICAg
ICAgIGVuYWJsZWQ6IGVuYWJsZWQKLSAgICAgICAgfTsKLSAgICAgICAgdGhpcy5fdGV4dFZpZXdl
ci5iZWdpblVwZGF0ZXMoKTsKLSAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5hZGREZWNvcmF0aW9u
KGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludCIpOwotICAgICAgICBpZiAoIWVuYWJsZWQp
Ci0gICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciwg
IndlYmtpdC1icmVha3BvaW50LWRpc2FibGVkIik7Ci0gICAgICAgIGlmIChjb25kaXRpb25hbCkK
LSAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAi
d2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiKTsKLSAgICAgICAgdGhpcy5fdGV4dFZpZXdl
ci5lbmRVcGRhdGVzKCk7Ci0gICAgfSwKLQotICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9u
KGxpbmVOdW1iZXIpCi0gICAgewotICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNbbGlu
ZU51bWJlcl07Ci0gICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYmVnaW5VcGRhdGVzKCk7Ci0gICAg
ICAgIHRoaXMuX3RleHRWaWV3ZXIucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0
LWJyZWFrcG9pbnQiKTsKLSAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9u
KGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZCIpOwotICAgICAgICB0aGlz
Ll90ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3Bv
aW50LWNvbmRpdGlvbmFsIik7Ci0gICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuZW5kVXBkYXRlcygp
OwotICAgIH0sCi0KICAgICBwb3B1bGF0ZUxpbmVHdXR0ZXJDb250ZXh0TWVudTogZnVuY3Rpb24o
bGluZU51bWJlciwgY29udGV4dE1lbnUpCiAgICAgewotICAgICAgICBjb250ZXh0TWVudS5hcHBl
bmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVu
dVRpdGxlcygpID8gIkNvbnRpbnVlIHRvIGhlcmUiIDogIkNvbnRpbnVlIHRvIEhlcmUiKSwgdGhp
cy5fZGVsZWdhdGUuY29udGludWVUb0xpbmUuYmluZCh0aGlzLl9kZWxlZ2F0ZSwgbGluZU51bWJl
cikpOwotCi0gICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fZGVsZWdhdGUuZmluZEJyZWFr
cG9pbnQobGluZU51bWJlcik7Ci0gICAgICAgIGlmICghYnJlYWtwb2ludCkgewotICAgICAgICAg
ICAgLy8gVGhpcyByb3cgZG9lc24ndCBoYXZlIGEgYnJlYWtwb2ludDogV2Ugd2FudCB0byBzaG93
IEFkZCBCcmVha3BvaW50IGFuZCBBZGQgYW5kIEVkaXQgQnJlYWtwb2ludC4KLSAgICAgICAgICAg
IGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rv
ci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiQWRkIGJyZWFrcG9pbnQiIDogIkFkZCBCcmVh
a3BvaW50IiksIHRoaXMuX2RlbGVnYXRlLnNldEJyZWFrcG9pbnQuYmluZCh0aGlzLl9kZWxlZ2F0
ZSwgbGluZU51bWJlciwgIiIsIHRydWUpKTsKLQotICAgICAgICAgICAgZnVuY3Rpb24gYWRkQ29u
ZGl0aW9uYWxCcmVha3BvaW50KCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aGlz
LmFkZEJyZWFrcG9pbnQobGluZU51bWJlciwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgICAg
ICAgICAgZnVuY3Rpb24gZGlkRWRpdEJyZWFrcG9pbnRDb25kaXRpb24oY29tbWl0dGVkLCBjb25k
aXRpb24pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92
ZUJyZWFrcG9pbnQobGluZU51bWJlcik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb21taXR0
ZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5zZXRCcmVha3BvaW50
KGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHRoaXMuX2VkaXRCcmVha3BvaW50Q29uZGl0aW9uKGxpbmVOdW1iZXIsICIiLCBk
aWRFZGl0QnJlYWtwb2ludENvbmRpdGlvbi5iaW5kKHRoaXMpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdl
Ykluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiQWRkIGNvbmRpdGlvbmFsIGJy
ZWFrcG9pbnTigKYiIDogIkFkZCBDb25kaXRpb25hbCBCcmVha3BvaW504oCmIiksIGFkZENvbmRp
dGlvbmFsQnJlYWtwb2ludC5iaW5kKHRoaXMpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIC8vIFRoaXMgcm93IGhhcyBhIGJyZWFrcG9pbnQsIHdlIHdhbnQgdG8gc2hvdyBlZGl0IGFu
ZCByZW1vdmUgYnJlYWtwb2ludCwgYW5kIGVpdGhlciBkaXNhYmxlIG9yIGVuYWJsZS4KLSAgICAg
ICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYklu
c3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiUmVtb3ZlIGJyZWFrcG9pbnQiIDog
IlJlbW92ZSBCcmVha3BvaW50IiksIHRoaXMuX2RlbGVnYXRlLnJlbW92ZUJyZWFrcG9pbnQuYmlu
ZCh0aGlzLl9kZWxlZ2F0ZSwgbGluZU51bWJlcikpOwotICAgICAgICAgICAgZnVuY3Rpb24gZWRp
dEJyZWFrcG9pbnRDb25kaXRpb24oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZ1
bmN0aW9uIGRpZEVkaXRCcmVha3BvaW50Q29uZGl0aW9uKGNvbW1pdHRlZCwgY29uZGl0aW9uKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1pdHRlZCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLnVwZGF0ZUJyZWFrcG9pbnQobGlu
ZU51bWJlciwgY29uZGl0aW9uLCBicmVha3BvaW50LmVuYWJsZWQpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB0aGlzLl9lZGl0QnJlYWtwb2ludENvbmRpdGlvbihsaW5lTnVt
YmVyLCBicmVha3BvaW50LmNvbmRpdGlvbiwgZGlkRWRpdEJyZWFrcG9pbnRDb25kaXRpb24uYmlu
ZCh0aGlzKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJ
dGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRp
dGxlcygpID8gIkVkaXQgYnJlYWtwb2ludOKApiIgOiAiRWRpdCBCcmVha3BvaW504oCmIiksIGVk
aXRCcmVha3BvaW50Q29uZGl0aW9uLmJpbmQodGhpcykpOwotICAgICAgICAgICAgZnVuY3Rpb24g
c2V0QnJlYWtwb2ludEVuYWJsZWQoZW5hYmxlZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9kZWxlZ2F0ZS51cGRhdGVCcmVha3BvaW50KGxpbmVOdW1iZXIsIGJyZWFrcG9p
bnQuY29uZGl0aW9uLCBlbmFibGVkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChi
cmVha3BvaW50LmVuYWJsZWQpCi0gICAgICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRl
bShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRs
ZXMoKSA/ICJEaXNhYmxlIGJyZWFrcG9pbnQiIDogIkRpc2FibGUgQnJlYWtwb2ludCIpLCBzZXRC
cmVha3BvaW50RW5hYmxlZC5iaW5kKHRoaXMsIGZhbHNlKSk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJFbmFibGUgYnJlYWtw
b2ludCIgOiAiRW5hYmxlIEJyZWFrcG9pbnQiKSwgc2V0QnJlYWtwb2ludEVuYWJsZWQuYmluZCh0
aGlzLCB0cnVlKSk7Ci0gICAgICAgIH0KICAgICB9LAogCiAgICAgcG9wdWxhdGVUZXh0QXJlYUNv
bnRleHRNZW51OiBmdW5jdGlvbihjb250ZXh0TWVudSkKQEAgLTY0OCw3NCArNDg2LDYgQEAgV2Vi
SW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKIAogICAgIHN1Z2dlc3RlZEZpbGVO
YW1lOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGUuc3Vn
Z2VzdGVkRmlsZU5hbWUoKTsKLSAgICB9LAotCi0gICAgX21vdXNlRG93bjogZnVuY3Rpb24oZXZl
bnQpCi0gICAgewotICAgICAgICBpZiAoZXZlbnQuYnV0dG9uICE9IDAgfHwgZXZlbnQuYWx0S2V5
IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0
aENsYXNzKCJ3ZWJraXQtbGluZS1udW1iZXIiKTsKLSAgICAgICAgaWYgKCF0YXJnZXQpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBsaW5lTnVtYmVyID0gdGFyZ2V0LmxpbmVOdW1i
ZXI7Ci0KLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9kZWxlZ2F0ZS5maW5kQnJlYWtw
b2ludChsaW5lTnVtYmVyKTsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnQpIHsKLSAgICAgICAgICAg
IGlmIChldmVudC5zaGlmdEtleSkKLSAgICAgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS51cGRh
dGVCcmVha3BvaW50KGxpbmVOdW1iZXIsIGJyZWFrcG9pbnQuY29uZGl0aW9uLCAhYnJlYWtwb2lu
dC5lbmFibGVkKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzLl9kZWxl
Z2F0ZS5yZW1vdmVCcmVha3BvaW50KGxpbmVOdW1iZXIpOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIHRoaXMuX2RlbGVnYXRlLnNldEJyZWFrcG9pbnQobGluZU51bWJlciwgIiIsIHRydWUp
OwotICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgIH0sCi0KLSAgICBfZ2V0UG9w
b3ZlckFuY2hvcjogZnVuY3Rpb24oZWxlbWVudCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5z
aG91bGRTaG93UG9wb3ZlcihlbGVtZW50KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
cmV0dXJuIGVsZW1lbnQ7Ci0gICAgfSwKLQotICAgIF9lZGl0QnJlYWtwb2ludENvbmRpdGlvbjog
ZnVuY3Rpb24obGluZU51bWJlciwgY29uZGl0aW9uLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAg
IHRoaXMuX2NvbmRpdGlvbkVsZW1lbnQgPSB0aGlzLl9jcmVhdGVDb25kaXRpb25FbGVtZW50KGxp
bmVOdW1iZXIpOwotICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51
bWJlciwgdGhpcy5fY29uZGl0aW9uRWxlbWVudCk7Ci0KLSAgICAgICAgZnVuY3Rpb24gZmluaXNo
RWRpdGluZyhjb21taXR0ZWQsIGVsZW1lbnQsIG5ld1RleHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHRoaXMuX3RleHRWaWV3ZXIucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCB0aGlzLl9j
b25kaXRpb25FbGVtZW50KTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jb25kaXRpb25FZGl0
b3JFbGVtZW50OwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NvbmRpdGlvbkVsZW1lbnQ7Ci0g
ICAgICAgICAgICBjYWxsYmFjayhjb21taXR0ZWQsIG5ld1RleHQpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdmFyIGNvbmZpZyA9IG5ldyBXZWJJbnNwZWN0b3IuRWRpdGluZ0NvbmZpZyhmaW5pc2hF
ZGl0aW5nLmJpbmQodGhpcywgdHJ1ZSksIGZpbmlzaEVkaXRpbmcuYmluZCh0aGlzLCBmYWxzZSkp
OwotICAgICAgICBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKHRoaXMuX2NvbmRpdGlvbkVkaXRv
ckVsZW1lbnQsIGNvbmZpZyk7Ci0gICAgICAgIHRoaXMuX2NvbmRpdGlvbkVkaXRvckVsZW1lbnQu
dmFsdWUgPSBjb25kaXRpb247Ci0gICAgICAgIHRoaXMuX2NvbmRpdGlvbkVkaXRvckVsZW1lbnQu
c2VsZWN0KCk7Ci0gICAgfSwKLQotICAgIF9jcmVhdGVDb25kaXRpb25FbGVtZW50OiBmdW5jdGlv
bihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgdmFyIGNvbmRpdGlvbkVsZW1lbnQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgY29uZGl0aW9uRWxlbWVudC5jbGFz
c05hbWUgPSAic291cmNlLWZyYW1lLWJyZWFrcG9pbnQtY29uZGl0aW9uIjsKLQotICAgICAgICB2
YXIgbGFiZWxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKTsKLSAgICAg
ICAgbGFiZWxFbGVtZW50LmNsYXNzTmFtZSA9ICJzb3VyY2UtZnJhbWUtYnJlYWtwb2ludC1tZXNz
YWdlIjsKLSAgICAgICAgbGFiZWxFbGVtZW50Lmh0bWxGb3IgPSAic291cmNlLWZyYW1lLWJyZWFr
cG9pbnQtY29uZGl0aW9uIjsKLSAgICAgICAgbGFiZWxFbGVtZW50LmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGhlIGJyZWFrcG9pbnQg
b24gbGluZSAlZCB3aWxsIHN0b3Agb25seSBpZiB0aGlzIGV4cHJlc3Npb24gaXMgdHJ1ZToiLCBs
aW5lTnVtYmVyKSkpOwotICAgICAgICBjb25kaXRpb25FbGVtZW50LmFwcGVuZENoaWxkKGxhYmVs
RWxlbWVudCk7Ci0KLSAgICAgICAgdmFyIGVkaXRvckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJpbnB1dCIpOwotICAgICAgICBlZGl0b3JFbGVtZW50LmlkID0gInNvdXJjZS1mcmFt
ZS1icmVha3BvaW50LWNvbmRpdGlvbiI7Ci0gICAgICAgIGVkaXRvckVsZW1lbnQuY2xhc3NOYW1l
ID0gIm1vbm9zcGFjZSI7Ci0gICAgICAgIGVkaXRvckVsZW1lbnQudHlwZSA9ICJ0ZXh0IjsKLSAg
ICAgICAgY29uZGl0aW9uRWxlbWVudC5hcHBlbmRDaGlsZChlZGl0b3JFbGVtZW50KTsKLSAgICAg
ICAgdGhpcy5fY29uZGl0aW9uRWRpdG9yRWxlbWVudCA9IGVkaXRvckVsZW1lbnQ7Ci0KLSAgICAg
ICAgcmV0dXJuIGNvbmRpdGlvbkVsZW1lbnQ7CiAgICAgfSwKIAogICAgIGluaGVyaXRTY3JvbGxQ
b3NpdGlvbnM6IGZ1bmN0aW9uKHNvdXJjZUZyYW1lKQpAQCAtNzM3LDcgKzUwNyw3IEBAIFdlYklu
c3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAKICAgICBjYW5FZGl0U291cmNlOiBm
dW5jdGlvbigpCiAgICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGUuY2FuRWRpdFNj
cmlwdFNvdXJjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSwKIAogICAgIHN0YXJ0
RWRpdGluZzogZnVuY3Rpb24oKQpAQCAtNzQ4LDcgKzUxOCw3IEBAIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLl9jb21taXRFZGl0aW5nSW5Q
cm9ncmVzcykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICB0aGlzLl9zZXRS
ZWFkT25seShmYWxzZSk7CisgICAgICAgIHRoaXMuc2V0UmVhZE9ubHkoZmFsc2UpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9LAogCkBAIC03NTYsNTMgKzUyNiwzOCBAQCBXZWJJbnNwZWN0
b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl92
aWV3ZXJTdGF0ZSkgewogICAgICAgICAgICAgLy8gTm8gZWRpdGluZyB3YXMgYWN0dWFsbHkgZG9u
ZS4KLSAgICAgICAgICAgIHRoaXMuX3NldFJlYWRPbmx5KHRydWUpOworICAgICAgICAgICAgdGhp
cy5zZXRSZWFkT25seSh0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIGZ1bmN0aW9uIGRpZEVkaXRDb250ZW50KGVycm9yKQotICAgICAgICB7Ci0gICAgICAg
ICAgICB0aGlzLl9jb21taXRFZGl0aW5nSW5Qcm9ncmVzcyA9IGZhbHNlOwotICAgICAgICAgICAg
dGhpcy5fdGV4dFZpZXdlci5yZWFkT25seSA9IGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoZXJy
b3IpIHsKLSAgICAgICAgICAgICAgICBpZiAoZXJyb3IubWVzc2FnZSkKLSAgICAgICAgICAgICAg
ICAgICAgV2ViSW5zcGVjdG9yLmxvZyhlcnJvci5tZXNzYWdlLCBXZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yLCB0cnVlKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBuZXdCcmVha3BvaW50cyA9IHt9
OwotICAgICAgICAgICAgZm9yICh2YXIgbGluZU51bWJlciBpbiB0aGlzLl9icmVha3BvaW50cykg
ewotICAgICAgICAgICAgICAgIG5ld0JyZWFrcG9pbnRzW2xpbmVOdW1iZXJdID0gdGhpcy5fYnJl
YWtwb2ludHNbbGluZU51bWJlcl07Ci0gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVCcmVha3Bv
aW50KE51bWJlcihsaW5lTnVtYmVyKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZv
ciAodmFyIGxpbmVOdW1iZXIgaW4gdGhpcy5fdmlld2VyU3RhdGUuYnJlYWtwb2ludHMpCi0gICAg
ICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUucmVtb3ZlQnJlYWtwb2ludChOdW1iZXIobGluZU51
bWJlcikpOwotCi0gICAgICAgICAgICBmb3IgKHZhciBsaW5lTnVtYmVyIGluIG5ld0JyZWFrcG9p
bnRzKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXdCcmVha3BvaW50c1ts
aW5lTnVtYmVyXTsKLSAgICAgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5zZXRCcmVha3BvaW50
KE51bWJlcihsaW5lTnVtYmVyKSwgYnJlYWtwb2ludC5jb25kaXRpb24sIGJyZWFrcG9pbnQuZW5h
YmxlZCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl92aWV3ZXJT
dGF0ZTsKLSAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLnNldFNjcmlwdFNvdXJjZUlzQmVpbmdF
ZGl0ZWQoZmFsc2UpOwotICAgICAgICB9CiAgICAgICAgIHRoaXMuX2NvbW1pdEVkaXRpbmdJblBy
b2dyZXNzID0gdHJ1ZTsKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZWFkT25seSA9IHRydWU7
CiAgICAgICAgIHRoaXMuX2VkaXRCdXR0b24udG9nZ2xlZCA9IGZhbHNlOwotICAgICAgICB0aGlz
LmVkaXRDb250ZW50KHRoaXMuX3RleHRNb2RlbC50ZXh0LCBkaWRFZGl0Q29udGVudC5iaW5kKHRo
aXMpKTsKKyAgICAgICAgdGhpcy5lZGl0Q29udGVudCh0aGlzLl90ZXh0TW9kZWwudGV4dCwgdGhp
cy5kaWRFZGl0Q29udGVudC5iaW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAgZGlkRWRpdENvbnRl
bnQ6IGZ1bmN0aW9uKGVycm9yKQorICAgIHsKKyAgICAgICAgdGhpcy5fY29tbWl0RWRpdGluZ0lu
UHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZWFkT25seSA9IGZh
bHNlOworCisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgaWYgKGVycm9yLm1lc3Nh
Z2UpCisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmxvZyhlcnJvci5tZXNzYWdlLCBXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yLCB0cnVlKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGRlbGV0ZSB0aGlzLl92aWV3ZXJT
dGF0ZTsKICAgICB9LAogCiAgICAgZWRpdENvbnRlbnQ6IGZ1bmN0aW9uKG5ld0NvbnRlbnQsIGNh
bGxiYWNrKQogICAgIHsKLSAgICAgICAgdGhpcy5fZGVsZWdhdGUuc2V0U2NyaXB0U291cmNlKG5l
d0NvbnRlbnQsIGNhbGxiYWNrKTsKICAgICB9LAogCiAgICAgY2FuY2VsRWRpdGluZzogZnVuY3Rp
b24oKQogICAgIHsKICAgICAgICAgdGhpcy5fcmVzdG9yZVZpZXdlclN0YXRlKCk7Ci0gICAgICAg
IHRoaXMuX3NldFJlYWRPbmx5KHRydWUpOworICAgICAgICB0aGlzLnNldFJlYWRPbmx5KHRydWUp
OwogICAgIH0sCiAKICAgICBnZXQgcmVhZE9ubHkoKQpAQCAtODEwLDMwICs1NjUsMTIgQEAgV2Vi
SW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMu
X3RleHRWaWV3ZXIucmVhZE9ubHk7CiAgICAgfSwKIAotICAgIF9zZXRSZWFkT25seTogZnVuY3Rp
b24ocmVhZE9ubHkpCisgICAgc2V0UmVhZE9ubHk6IGZ1bmN0aW9uKHJlYWRPbmx5KQogICAgIHsK
LSAgICAgICAgaWYgKCFyZWFkT25seSAmJiB0aGlzLnBvcG92ZXJIZWxwZXIpCi0gICAgICAgICAg
ICB0aGlzLnBvcG92ZXJIZWxwZXIuaGlkZVBvcG92ZXIoKTsKLQogICAgICAgICB0aGlzLl90ZXh0
Vmlld2VyLnJlYWRPbmx5ID0gcmVhZE9ubHk7CiAgICAgICAgIHRoaXMuX2VkaXRCdXR0b24udG9n
Z2xlZCA9ICFyZWFkT25seTsKICAgICAgICAgV2ViSW5zcGVjdG9yLm1hcmtCZWluZ0VkaXRlZCh0
aGlzLl90ZXh0Vmlld2VyLmVsZW1lbnQsICFyZWFkT25seSk7Ci0gICAgICAgIGlmIChyZWFkT25s
eSkKLSAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLnNldFNjcmlwdFNvdXJjZUlzQmVpbmdFZGl0
ZWQoZmFsc2UpOwotICAgIH0sCi0KLSAgICBjb250ZW50Q2hhbmdlZDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgaWYgKCF0aGlzLl9jb250ZW50UmVxdWVzdGVkIHx8ICF0aGlzLl90ZXh0Vmll
d2VyLnJlYWRPbmx5KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9kZWxlZ2F0
ZS5yZXF1ZXN0Q29udGVudCh0aGlzLl9pbml0aWFsaXplVGV4dFZpZXdlci5iaW5kKHRoaXMpKTsK
LSAgICB9LAotCi0gICAgc2hvdWxkU2hvd1BvcG92ZXI6IGZ1bmN0aW9uKGVsZW1lbnQpIHsgfSwK
LQotICAgIG9uU2hvd1BvcG92ZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHNob3dDYWxsYmFjaykgeyB9
LAotCi0gICAgb25IaWRlUG9wb3ZlcjogZnVuY3Rpb24oKSB7IH0sCisgICAgfQogfQogCiBXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5W
aWV3LnByb3RvdHlwZTsKQEAgLTg5MSw0MCArNjI4LDMgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3
ZXJEZWxlZ2F0ZUZvclNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKIH0KIAogV2ViSW5zcGVjdG9y
LlRleHRWaWV3ZXJEZWxlZ2F0ZUZvclNvdXJjZUZyYW1lLnByb3RvdHlwZS5fX3Byb3RvX18gPSBX
ZWJJbnNwZWN0b3IuVGV4dFZpZXdlckRlbGVnYXRlLnByb3RvdHlwZTsKLQotCi0vKioKLSAqIEBp
bnRlcmZhY2UKLSAqLwotV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lRGVsZWdhdGUgPSBmdW5jdGlv
bigpCi17Ci19Ci0KLVdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZSA9
IHsKLSAgICByZXF1ZXN0Q29udGVudDogZnVuY3Rpb24oY2FsbGJhY2spIHsgfSwKLQotICAgIHNl
dEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwgZW5hYmxlZCkgeyB9
LAotCi0gICAgcmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rpb24obGluZU51bWJlcikgeyB9LAotCi0g
ICAgdXBkYXRlQnJlYWtwb2ludDogZnVuY3Rpb24obGluZU51bWJlciwgY29uZGl0aW9uLCBlbmFi
bGVkKSB7IH0sCi0KLSAgICBmaW5kQnJlYWtwb2ludDogZnVuY3Rpb24obGluZU51bWJlcikgeyB9
LAotCi0gICAgY29udGludWVUb0xpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpIHsgfSwKLQotICAg
IGNhbkVkaXRTY3JpcHRTb3VyY2U6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0sCi0KLSAg
ICBzZXRTY3JpcHRTb3VyY2U6IGZ1bmN0aW9uKHRleHQsIGNhbGxiYWNrKSB7IH0sCi0KLSAgICBz
ZXRTY3JpcHRTb3VyY2VJc0JlaW5nRWRpdGVkOiBmdW5jdGlvbihpbkVkaXRNb2RlKSB7IH0sCi0K
LSAgICBzdWdnZXN0ZWRGaWxlTmFtZTogZnVuY3Rpb24oKSB7IH0sCi0KLSAgICBhZGRUb1dhdGNo
OiBmdW5jdGlvbigpIHsgfQotfQotCi0vKioKLSAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24uCi0g
Ki8KLVdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZURlbGVnYXRlLnN0dWIgPSBPYmplY3QuY3JlYXRl
KFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAppbmRleCA3NDBh
YTBkLi43ZWU3MjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2luc3BlY3Rvci5odG1sCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmh0bWwKQEAgLTEwOSw4ICsxMDksOCBAQCBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgIDxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlRleHRWaWV3ZXIuanMiPjwvc2NyaXB0Pgog
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlNvdXJjZUZyYW1lLmpzIj48
L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJSZXNvdXJj
ZVZpZXcuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IlNjcmlwdHNQYW5lbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIHNyYz0iSmF2YVNjcmlwdFNvdXJjZUZyYW1lLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTY3JpcHRzUGFuZWwuanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlJlc291cmNlc1Bh
bmVsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3Jj
PSJQcm9maWxlc1BhbmVsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJDb25zb2xlUGFuZWwuanMiPjwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112671</attachid>
            <date>2011-10-27 06:13:16 -0700</date>
            <delta_ts>2011-10-27 10:15:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>jssourceframe-refactoring.diff</filename>
            <type>text/plain</type>
            <size>47655</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiNTIxMzgzLi5iYzc1MTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTUg
QEAKKzIwMTEtMTAtMjYgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBbcmVmYWN0b3JpbmddIGdldCBKUy1zcGVjaWZpYyBtZXRo
b2RzIG91dCBvZiBTb3VyY2VGcmFtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzA4ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFzIHRoZXJlJ3Mgbm8gbmV3IGZ1bmN0aW9uYWxp
dHkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRTb3VyY2VGcmFt
ZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUud2lsbEhp
ZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5
cGUucmVxdWVzdENvbnRlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3Vy
Y2VGcmFtZS5wcm90b3R5cGUuY2FuRWRpdFNvdXJjZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5zdWdnZXN0ZWRGaWxlTmFtZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5lZGl0Q29u
dGVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3Rv
dHlwZS5jb250ZW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNv
dXJjZUZyYW1lLnByb3RvdHlwZS5zZXRSZWFkb25seSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5wb3B1bGF0ZUxpbmVHdXR0ZXJDb250ZXh0
TWVudS5hZGRDb25kaXRpb25hbEJyZWFrcG9pbnQuZGlkRWRpdEJyZWFrcG9pbnRDb25kaXRpb24p
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUu
cG9wdWxhdGVMaW5lR3V0dGVyQ29udGV4dE1lbnUuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5K
YXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLnBvcHVsYXRlTGluZUd1dHRlckNvbnRleHRN
ZW51LmVsc2UuZWRpdEJyZWFrcG9pbnRDb25kaXRpb24uZGlkRWRpdEJyZWFrcG9pbnRDb25kaXRp
b24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5
cGUucG9wdWxhdGVMaW5lR3V0dGVyQ29udGV4dE1lbnUuZWxzZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5wb3B1bGF0ZUxpbmVHdXR0ZXJD
b250ZXh0TWVudSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1l
LnByb3RvdHlwZS5wb3B1bGF0ZVRleHRBcmVhQ29udGV4dE1lbnUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUuYWZ0ZXJUZXh0Q2hhbmdlZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5i
ZWZvcmVUZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJj
ZUZyYW1lLnByb3RvdHlwZS5jYW5jZWxFZGl0aW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5K
YXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLmRpZEVkaXRDb250ZW50KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLl9nZXRQb3BvdmVy
QW5jaG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJv
dG90eXBlLl9vblNob3dQb3BvdmVyLnNob3dPYmplY3RQb3BvdmVyKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLl9vblNob3dQb3BvdmVyKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLl9v
bkhpZGVQb3BvdmVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJh
bWUucHJvdG90eXBlLmFkZEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFT
Y3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUucmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5fbW91c2VEb3duKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLl9l
ZGl0QnJlYWtwb2ludENvbmRpdGlvbi5maW5pc2hFZGl0aW5nKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLl9lZGl0QnJlYWtwb2ludENvbmRp
dGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3Rv
dHlwZS5fY3JlYXRlQ29uZGl0aW9uRWxlbWVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2
YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5zZXRFeGVjdXRpb25MaW5lKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLmNsZWFyRXhlY3V0
aW9uTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnBy
b3RvdHlwZS5fbGluZU51bWJlckFmdGVyRWRpdGluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5fb25UZXh0Vmlld2VyQ29udGVudExvYWRl
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lRGVsZWdhdGUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZURlbGVnYXRlLnBy
b3RvdHlwZS5yZXF1ZXN0Q29udGVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlw
dFNvdXJjZUZyYW1lRGVsZWdhdGUucHJvdG90eXBlLnNldEJyZWFrcG9pbnQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZS5yZW1v
dmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJh
bWVEZWxlZ2F0ZS5wcm90b3R5cGUudXBkYXRlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lRGVsZWdhdGUucHJvdG90eXBlLmZpbmRCcmVha3Bv
aW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWVEZWxlZ2F0
ZS5wcm90b3R5cGUuY29udGludWVUb0xpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFT
Y3JpcHRTb3VyY2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZS5jYW5FZGl0U2NyaXB0U291cmNlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90
b3R5cGUuc2V0U2NyaXB0U291cmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0
U291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGUuc2V0U2NyaXB0U291cmNlSXNCZWluZ0VkaXRl
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lRGVsZWdhdGUu
cHJvdG90eXBlLnN1Z2dlc3RlZEZpbGVOYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZh
U2NyaXB0U291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGUuYWRkVG9XYXRjaCk6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuUmVzb3VyY2VTb3VyY2VGcmFtZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9TY3JpcHRzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVEZWxl
Z2F0ZUZvclNjcmlwdHNQYW5lbCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3Vy
Y2VGcmFtZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLndpbGxIaWRlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuZ2V0IHRleHRWaWV3ZXIpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5yZXF1ZXN0Q29udGVudCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9zYXZlVmlld2Vy
U3RhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fcmVz
dG9yZVZpZXdlclN0YXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90
b3R5cGUuYmVmb3JlVGV4dENoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZS5hZnRlclRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZS5wcm90b3R5cGUuX2luaXRpYWxpemVUZXh0Vmlld2VyKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUucG9wdWxhdGVMaW5lR3V0dGVyQ29udGV4
dE1lbnUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5zdWdn
ZXN0ZWRGaWxlTmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90
eXBlLmNhbkVkaXRTb3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnBy
b3RvdHlwZS5zdGFydEVkaXRpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1l
LnByb3RvdHlwZS5jb21taXRFZGl0aW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VG
cmFtZS5wcm90b3R5cGUuZGlkRWRpdENvbnRlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLnByb3RvdHlwZS5lZGl0Q29udGVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlLmNhbmNlbEVkaXRpbmcpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5zZXRSZWFkT25seSk6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbDoKKworMjAxMS0xMC0yNSAgQW5kcmV5IEtvc3lh
a292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEpTIGV4
Y2VwdGlvbiBpbiBKYXZhU2NyaXB0U291cmNlRnJhbWUub25TaG93UG9wb3Zlci9zaG93T2JqZWN0
UG9wb3ZlcigpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03MDgxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IENoZWNrIGlmIGhpZ2hsaWdodGVkIGVsZW1lbnQgaXMgcHJlc2VudCB3aGlsZSBkaXNwbGF5aW5n
IG9iamVjdCBwb3BvdmVyLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9KYXZhU2Ny
aXB0U291cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJj
ZUZyYW1lLnByb3RvdHlwZS5vblNob3dQb3BvdmVyLnNob3dPYmplY3RQb3BvdmVyKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLm9uU2hvd1Bv
cG92ZXIpOgorCiAyMDExLTEwLTI3ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW0V4dGVuc2lvbnMgQVBJXSBhZGQgaWdub3Jl
Q2FjaGUgZmxhZyB0byBvcHRpb25zIG9mIGluc3BlY3RlZFdpbmRvdy5yZWxvYWQoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9KYXZhU2NyaXB0U291cmNl
RnJhbWUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRT
b3VyY2VGcmFtZS5qcwppbmRleCBiNGExMjkxLi5jMjc1MWI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRTb3VyY2VGcmFtZS5qcworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRTb3VyY2VGcmFt
ZS5qcwpAQCAtMzEsMjQgKzMxLDIxOSBAQAogLyoqCiAgKiBAY29uc3RydWN0b3IKICAqIEBleHRl
bmRzIHtXZWJJbnNwZWN0b3IuU291cmNlRnJhbWV9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZURlbGVnYXRlfSBkZWxlZ2F0ZQorICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuSmF2
YVNjcmlwdFNvdXJjZUZyYW1lRGVsZWdhdGV9IGRlbGVnYXRlCiAgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsfSBtb2RlbAogICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKICAqLwogV2ViSW5zcGVjdG9yLkphdmFT
Y3JpcHRTb3VyY2VGcmFtZSA9IGZ1bmN0aW9uKGRlbGVnYXRlLCBtb2RlbCwgdWlTb3VyY2VDb2Rl
KQogewotICAgIC8vIEZJWE1FOiBtb3ZlIGFsbCBTb3VyY2VGcmFtZSBtZXRob2RzIHJlbGF0ZWQg
dG8gSmF2YVNjcmlwdCBkZWJ1Z2dpbmcgaGVyZSBhbmQKLSAgICAvLyBnZXQgcmlkIG9mIFNvdXJj
ZUZyYW1lLl9kZWxlZ2F0ZS4KLSAgICBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUuY2FsbCh0aGlz
LCBkZWxlZ2F0ZSwgdWlTb3VyY2VDb2RlLnVybCk7CisgICAgV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLmNhbGwodGhpcywgdWlTb3VyY2VDb2RlLnVybCk7CisKKyAgICB0aGlzLl9kZWxlZ2F0ZSA9
IGRlbGVnYXRlOworICAgIHRoaXMuX3BvcG92ZXJIZWxwZXIgPSBuZXcgV2ViSW5zcGVjdG9yLk9i
amVjdFBvcG92ZXJIZWxwZXIodGhpcy50ZXh0Vmlld2VyLmVsZW1lbnQsCisgICAgICAgICAgICB0
aGlzLl9nZXRQb3BvdmVyQW5jaG9yLmJpbmQodGhpcyksIHRoaXMuX29uU2hvd1BvcG92ZXIuYmlu
ZCh0aGlzKSwgdGhpcy5fb25IaWRlUG9wb3Zlci5iaW5kKHRoaXMpLCB0cnVlKTsKKworICAgIHRo
aXMudGV4dFZpZXdlci5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMu
X29uTW91c2VEb3duLmJpbmQodGhpcyksIHRydWUpOworICAgIHVpU291cmNlQ29kZS5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUuRXZlbnRzLkNvbnRlbnRDaGFuZ2Vk
LCB0aGlzLl9vbkNvbnRlbnRDaGFuZ2VkLCB0aGlzKTsKKyAgICB0aGlzLmFkZEV2ZW50TGlzdGVu
ZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLkV2ZW50cy5Mb2FkZWQsIHRoaXMuX29uVGV4dFZp
ZXdlckNvbnRlbnRMb2FkZWQsIHRoaXMpOwogCiAgICAgdGhpcy5fbW9kZWwgPSBtb2RlbDsKICAg
ICB0aGlzLl9wb3BvdmVyT2JqZWN0R3JvdXAgPSAicG9wb3ZlciI7Ci0KLSAgICB1aVNvdXJjZUNv
ZGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlLkV2ZW50cy5Db250
ZW50Q2hhbmdlZCwgdGhpcy5jb250ZW50Q2hhbmdlZCwgdGhpcyk7CisgICAgdGhpcy5fYnJlYWtw
b2ludHMgPSB7fTsKIH0KIAogV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90
b3R5cGUgPSB7Ci0gICAgc2hvdWxkU2hvd1BvcG92ZXI6IGZ1bmN0aW9uKGVsZW1lbnQpCisgICAg
Ly8gVmlldyBldmVudHMKKyAgICB3aWxsSGlkZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS53aWxsSGlkZS5jYWxsKHRoaXMpOwor
ICAgICAgICBpZiAodGhpcy5fcG9wb3ZlckhlbHBlcikKKyAgICAgICAgICAgIHRoaXMuX3BvcG92
ZXJIZWxwZXIuaGlkZVBvcG92ZXIoKTsKKyAgICB9LAorCisgICAgLy8gU291cmNlRnJhbWUgb3Zl
cnJpZGVzCisgICAgcmVxdWVzdENvbnRlbnQ6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHsKKyAg
ICAgICAgdGhpcy5fZGVsZWdhdGUucmVxdWVzdENvbnRlbnQoY2FsbGJhY2spOworICAgIH0sCisK
KyAgICBjYW5FZGl0U291cmNlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhp
cy5fZGVsZWdhdGUuY2FuRWRpdFNjcmlwdFNvdXJjZSgpOworICAgIH0sCisKKyAgICBzdWdnZXN0
ZWRGaWxlTmFtZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVn
YXRlLnN1Z2dlc3RlZEZpbGVOYW1lKCk7CisgICAgfSwKKworICAgIGVkaXRDb250ZW50OiBmdW5j
dGlvbihuZXdDb250ZW50LCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHRoaXMuX2RlbGVnYXRl
LnNldFNjcmlwdFNvdXJjZShuZXdDb250ZW50LCBjYWxsYmFjayk7CisgICAgfSwKKworICAgIF9v
bkNvbnRlbnRDaGFuZ2VkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMudGV4
dFZpZXdlci5yZWFkT25seSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fZGVs
ZWdhdGUucmVxdWVzdENvbnRlbnQodGhpcy5zZXRDb250ZW50LmJpbmQodGhpcykpOworICAgIH0s
CisKKyAgICBzZXRSZWFkT25seTogZnVuY3Rpb24ocmVhZE9ubHkpCisgICAgeworICAgICAgICBp
ZiAoIXJlYWRPbmx5ICYmIHRoaXMuX3BvcG92ZXJIZWxwZXIpCisgICAgICAgICAgICB0aGlzLl9w
b3BvdmVySGVscGVyLmhpZGVQb3BvdmVyKCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5Tb3VyY2VG
cmFtZS5wcm90b3R5cGUuc2V0UmVhZE9ubHkuY2FsbCh0aGlzLCByZWFkT25seSk7CisgICAgICAg
IGlmIChyZWFkT25seSkKKyAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLnNldFNjcmlwdFNvdXJj
ZUlzQmVpbmdFZGl0ZWQoZmFsc2UpOworICAgIH0sCisKKyAgICBwb3B1bGF0ZUxpbmVHdXR0ZXJD
b250ZXh0TWVudTogZnVuY3Rpb24obGluZU51bWJlciwgY29udGV4dE1lbnUpCisgICAgeworICAg
ICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNw
ZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8gIkNvbnRpbnVlIHRvIGhlcmUiIDogIkNv
bnRpbnVlIHRvIEhlcmUiKSwgdGhpcy5fZGVsZWdhdGUuY29udGludWVUb0xpbmUuYmluZCh0aGlz
Ll9kZWxlZ2F0ZSwgbGluZU51bWJlcikpOworCisgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhp
cy5fZGVsZWdhdGUuZmluZEJyZWFrcG9pbnQobGluZU51bWJlcik7CisgICAgICAgIGlmICghYnJl
YWtwb2ludCkgeworICAgICAgICAgICAgLy8gVGhpcyByb3cgZG9lc24ndCBoYXZlIGEgYnJlYWtw
b2ludDogV2Ugd2FudCB0byBzaG93IEFkZCBCcmVha3BvaW50IGFuZCBBZGQgYW5kIEVkaXQgQnJl
YWtwb2ludC4KKyAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiQWRkIGJy
ZWFrcG9pbnQiIDogIkFkZCBCcmVha3BvaW50IiksIHRoaXMuX2RlbGVnYXRlLnNldEJyZWFrcG9p
bnQuYmluZCh0aGlzLl9kZWxlZ2F0ZSwgbGluZU51bWJlciwgIiIsIHRydWUpKTsKKworICAgICAg
ICAgICAgZnVuY3Rpb24gYWRkQ29uZGl0aW9uYWxCcmVha3BvaW50KCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICB0aGlzLmFkZEJyZWFrcG9pbnQobGluZU51bWJlciwgdHJ1ZSwgdHJ1
ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGlkRWRpdEJyZWFrcG9pbnRDb25k
aXRpb24oY29tbWl0dGVkLCBjb25kaXRpb24pCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLnJlbW92ZUJyZWFrcG9pbnQobGluZU51bWJlcik7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChjb21taXR0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9k
ZWxlZ2F0ZS5zZXRCcmVha3BvaW50KGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwgdHJ1ZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuX2VkaXRCcmVha3BvaW50Q29uZGl0
aW9uKGxpbmVOdW1iZXIsICIiLCBkaWRFZGl0QnJlYWtwb2ludENvbmRpdGlvbi5iaW5kKHRoaXMp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkg
PyAiQWRkIGNvbmRpdGlvbmFsIGJyZWFrcG9pbnTigKYiIDogIkFkZCBDb25kaXRpb25hbCBCcmVh
a3BvaW504oCmIiksIGFkZENvbmRpdGlvbmFsQnJlYWtwb2ludC5iaW5kKHRoaXMpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRoaXMgcm93IGhhcyBhIGJyZWFrcG9pbnQsIHdl
IHdhbnQgdG8gc2hvdyBlZGl0IGFuZCByZW1vdmUgYnJlYWtwb2ludCwgYW5kIGVpdGhlciBkaXNh
YmxlIG9yIGVuYWJsZS4KKyAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAi
UmVtb3ZlIGJyZWFrcG9pbnQiIDogIlJlbW92ZSBCcmVha3BvaW50IiksIHRoaXMuX2RlbGVnYXRl
LnJlbW92ZUJyZWFrcG9pbnQuYmluZCh0aGlzLl9kZWxlZ2F0ZSwgbGluZU51bWJlcikpOworICAg
ICAgICAgICAgZnVuY3Rpb24gZWRpdEJyZWFrcG9pbnRDb25kaXRpb24oKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRpZEVkaXRCcmVha3BvaW50Q29uZGl0aW9uKGNv
bW1pdHRlZCwgY29uZGl0aW9uKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNvbW1pdHRlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRl
LnVwZGF0ZUJyZWFrcG9pbnQobGluZU51bWJlciwgY29uZGl0aW9uLCBicmVha3BvaW50LmVuYWJs
ZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLl9lZGl0QnJlYWtw
b2ludENvbmRpdGlvbihsaW5lTnVtYmVyLCBicmVha3BvaW50LmNvbmRpdGlvbiwgZGlkRWRpdEJy
ZWFrcG9pbnRDb25kaXRpb24uYmluZCh0aGlzKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0
b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8gIkVkaXQgYnJlYWtwb2ludOKApiIgOiAiRWRp
dCBCcmVha3BvaW504oCmIiksIGVkaXRCcmVha3BvaW50Q29uZGl0aW9uLmJpbmQodGhpcykpOwor
ICAgICAgICAgICAgZnVuY3Rpb24gc2V0QnJlYWtwb2ludEVuYWJsZWQoZW5hYmxlZCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS51cGRhdGVCcmVha3BvaW50
KGxpbmVOdW1iZXIsIGJyZWFrcG9pbnQuY29uZGl0aW9uLCBlbmFibGVkKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChicmVha3BvaW50LmVuYWJsZWQpCisgICAgICAgICAgICAgICAg
Y29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9y
LnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJEaXNhYmxlIGJyZWFrcG9pbnQiIDogIkRpc2Fi
bGUgQnJlYWtwb2ludCIpLCBzZXRCcmVha3BvaW50RW5hYmxlZC5iaW5kKHRoaXMsIGZhbHNlKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRl
bShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRs
ZXMoKSA/ICJFbmFibGUgYnJlYWtwb2ludCIgOiAiRW5hYmxlIEJyZWFrcG9pbnQiKSwgc2V0QnJl
YWtwb2ludEVuYWJsZWQuYmluZCh0aGlzLCB0cnVlKSk7CisgICAgICAgIH0KKyAgICB9LAorCisg
ICAgcG9wdWxhdGVUZXh0QXJlYUNvbnRleHRNZW51OiBmdW5jdGlvbihjb250ZXh0TWVudSkKKyAg
ICB7CisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisgICAg
ICAgIGlmIChzZWxlY3Rpb24udHlwZSAhPT0gIlJhbmdlIiB8fCBzZWxlY3Rpb24uaXNDb2xsYXBz
ZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0o
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVz
KCkgPyAiQWRkIHRvIHdhdGNoIiA6ICJBZGQgdG8gV2F0Y2giKSwgdGhpcy5fZGVsZWdhdGUuYWRk
VG9XYXRjaC5iaW5kKHRoaXMuX2RlbGVnYXRlLCBzZWxlY3Rpb24udG9TdHJpbmcoKSkpOworICAg
IH0sCisKKyAgICBhZnRlclRleHRDaGFuZ2VkOiBmdW5jdGlvbihvbGRSYW5nZSwgbmV3UmFuZ2Up
CisgICAgeworICAgICAgICBpZiAoIW9sZFJhbmdlIHx8ICFuZXdSYW5nZSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAvLyBBZGp1c3QgZXhlY3V0aW9uIGxpbmUgbnVtYmVyLgorICAg
ICAgICBpZiAodHlwZW9mIHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIgPT09ICJudW1iZXIiKSB7
CisgICAgICAgICAgICB2YXIgbmV3RXhlY3V0aW9uTGluZU51bWJlciA9IHRoaXMuX2xpbmVOdW1i
ZXJBZnRlckVkaXRpbmcodGhpcy5fZXhlY3V0aW9uTGluZU51bWJlciwgb2xkUmFuZ2UsIG5ld1Jh
bmdlKTsKKyAgICAgICAgICAgIHRoaXMuY2xlYXJFeGVjdXRpb25MaW5lKCk7CisgICAgICAgICAg
ICB0aGlzLnNldEV4ZWN1dGlvbkxpbmUobmV3RXhlY3V0aW9uTGluZU51bWJlciwgdHJ1ZSk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBBZGp1c3QgYnJlYWtwb2ludHMuCisgICAgICAgIHZhciBv
bGRCcmVha3BvaW50cyA9IHRoaXMuX2JyZWFrcG9pbnRzOworICAgICAgICB0aGlzLl9icmVha3Bv
aW50cyA9IHt9OworICAgICAgICBmb3IgKHZhciBsaW5lTnVtYmVyIGluIG9sZEJyZWFrcG9pbnRz
KSB7CisgICAgICAgICAgICBsaW5lTnVtYmVyID0gTnVtYmVyKGxpbmVOdW1iZXIpOworICAgICAg
ICAgICAgdmFyIGJyZWFrcG9pbnQgPSBvbGRCcmVha3BvaW50c1tsaW5lTnVtYmVyXTsKKyAgICAg
ICAgICAgIHZhciBuZXdMaW5lTnVtYmVyID0gdGhpcy5fbGluZU51bWJlckFmdGVyRWRpdGluZyhs
aW5lTnVtYmVyLCBvbGRSYW5nZSwgbmV3UmFuZ2UpOworICAgICAgICAgICAgaWYgKGxpbmVOdW1i
ZXIgPT09IG5ld0xpbmVOdW1iZXIpCisgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNb
bGluZU51bWJlcl0gPSBicmVha3BvaW50OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5yZW1vdmVCcmVha3BvaW50KGxpbmVOdW1iZXIpOworICAgICAgICAgICAgICAg
IHRoaXMuYWRkQnJlYWtwb2ludChuZXdMaW5lTnVtYmVyLCBicmVha3BvaW50LnJlc29sdmVkLCBi
cmVha3BvaW50LmNvbmRpdGlvbmFsLCBicmVha3BvaW50LmVuYWJsZWQpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSwKKworICAgIGJlZm9yZVRleHRDaGFuZ2VkOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICBpZiAoIXRoaXMuX2phdmFTY3JpcHRTb3VyY2VGcmFtZVN0YXRlKSB7
CisgICAgICAgICAgICB0aGlzLl9qYXZhU2NyaXB0U291cmNlRnJhbWVTdGF0ZSA9IHsKKyAgICAg
ICAgICAgICAgICBleGVjdXRpb25MaW5lTnVtYmVyOiB0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVy
LAorICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzOiB0aGlzLl9icmVha3BvaW50cworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUuc2V0U2NyaXB0U291cmNlSXNCZWlu
Z0VkaXRlZCh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWUucHJvdG90eXBlLmJlZm9yZVRleHRDaGFuZ2VkLmNhbGwodGhpcyk7CisgICAgfSwKKworICAg
IGNhbmNlbEVkaXRpbmc6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZS5wcm90b3R5cGUuY2FuY2VsRWRpdGluZy5jYWxsKHRoaXMpOworICAgICAgICAK
KyAgICAgICAgaWYgKCF0aGlzLl9qYXZhU2NyaXB0U291cmNlRnJhbWVTdGF0ZSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2phdmFTY3JpcHRTb3VyY2VG
cmFtZVN0YXRlLmV4ZWN1dGlvbkxpbmVOdW1iZXIgPT09ICJudW1iZXIiKSB7CisgICAgICAgICAg
ICB0aGlzLmNsZWFyRXhlY3V0aW9uTGluZSgpOworICAgICAgICAgICAgdGhpcy5zZXRFeGVjdXRp
b25MaW5lKHRoaXMuX2phdmFTY3JpcHRTb3VyY2VGcmFtZVN0YXRlLmV4ZWN1dGlvbkxpbmVOdW1i
ZXIpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIG9sZEJyZWFrcG9pbnRzID0gdGhpcy5fYnJl
YWtwb2ludHM7CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzID0ge307CisgICAgICAgIGZvciAo
dmFyIGxpbmVOdW1iZXIgaW4gb2xkQnJlYWtwb2ludHMpCisgICAgICAgICAgICB0aGlzLnJlbW92
ZUJyZWFrcG9pbnQoTnVtYmVyKGxpbmVOdW1iZXIpKTsKKworICAgICAgICB2YXIgbmV3QnJlYWtw
b2ludHMgPSB0aGlzLl9qYXZhU2NyaXB0U291cmNlRnJhbWVTdGF0ZS5icmVha3BvaW50czsKKyAg
ICAgICAgZm9yICh2YXIgbGluZU51bWJlciBpbiBuZXdCcmVha3BvaW50cykgeworICAgICAgICAg
ICAgbGluZU51bWJlciA9IE51bWJlcihsaW5lTnVtYmVyKTsKKyAgICAgICAgICAgIHZhciBicmVh
a3BvaW50ID0gbmV3QnJlYWtwb2ludHNbbGluZU51bWJlcl07CisgICAgICAgICAgICB0aGlzLmFk
ZEJyZWFrcG9pbnQobGluZU51bWJlciwgYnJlYWtwb2ludC5yZXNvbHZlZCwgYnJlYWtwb2ludC5j
b25kaXRpb25hbCwgYnJlYWtwb2ludC5lbmFibGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIGRl
bGV0ZSB0aGlzLl9qYXZhU2NyaXB0U291cmNlRnJhbWVTdGF0ZTsKKyAgICB9LAorCisgICAgZGlk
RWRpdENvbnRlbnQ6IGZ1bmN0aW9uKGVycm9yKQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZS5kaWRFZGl0Q29udGVudC5jYWxsKHRoaXMsIGVycm9yKTsK
KyAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBu
ZXdCcmVha3BvaW50cyA9IHt9OworICAgICAgICBmb3IgKHZhciBsaW5lTnVtYmVyIGluIHRoaXMu
X2JyZWFrcG9pbnRzKSB7CisgICAgICAgICAgICBuZXdCcmVha3BvaW50c1tsaW5lTnVtYmVyXSA9
IHRoaXMuX2JyZWFrcG9pbnRzW2xpbmVOdW1iZXJdOworICAgICAgICAgICAgdGhpcy5yZW1vdmVC
cmVha3BvaW50KE51bWJlcihsaW5lTnVtYmVyKSk7CisgICAgICAgIH0KKworICAgICAgICBmb3Ig
KHZhciBsaW5lTnVtYmVyIGluIHRoaXMuX2phdmFTY3JpcHRTb3VyY2VGcmFtZVN0YXRlLmJyZWFr
cG9pbnRzKQorICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUucmVtb3ZlQnJlYWtwb2ludChOdW1i
ZXIobGluZU51bWJlcikpOworCisgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgaW4gbmV3QnJl
YWtwb2ludHMpIHsKKyAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3QnJlYWtwb2ludHNb
bGluZU51bWJlcl07CisgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5zZXRCcmVha3BvaW50KE51
bWJlcihsaW5lTnVtYmVyKSwgYnJlYWtwb2ludC5jb25kaXRpb24sIGJyZWFrcG9pbnQuZW5hYmxl
ZCk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5zZXRTY3JpcHRTb3VyY2VJ
c0JlaW5nRWRpdGVkKGZhbHNlKTsKKyAgICAgICAgZGVsZXRlIHRoaXMuX2phdmFTY3JpcHRTb3Vy
Y2VGcmFtZVN0YXRlOworICAgIH0sCisKKyAgICAvLyBQb3BvdmVyIGNhbGxiYWNrcworICAgIF9z
aG91bGRTaG93UG9wb3ZlcjogZnVuY3Rpb24oZWxlbWVudCkKICAgICB7CiAgICAgICAgIGlmICgh
dGhpcy5fbW9kZWwucGF1c2VkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjIsMTAg
KzI1NywxNyBAQCBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZSA9
IHsKICAgICAgICAgcmV0dXJuIGVsZW1lbnQuaGFzU3R5bGVDbGFzcygid2Via2l0LWphdmFzY3Jp
cHQtaWRlbnQiKTsKICAgICB9LAogCi0gICAgb25TaG93UG9wb3ZlcjogZnVuY3Rpb24oZWxlbWVu
dCwgc2hvd0NhbGxiYWNrKQorICAgIF9nZXRQb3BvdmVyQW5jaG9yOiBmdW5jdGlvbihlbGVtZW50
KQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9zaG91bGRTaG93UG9wb3ZlcihlbGVtZW50KSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfSwKKwor
ICAgIF9vblNob3dQb3BvdmVyOiBmdW5jdGlvbihlbGVtZW50LCBzaG93Q2FsbGJhY2spCiAgICAg
ewogICAgICAgICBpZiAoIXRoaXMucmVhZE9ubHkpIHsKLSAgICAgICAgICAgIHRoaXMucG9wb3Zl
ckhlbHBlci5oaWRlUG9wb3ZlcigpOworICAgICAgICAgICAgdGhpcy5fcG9wb3ZlckhlbHBlci5o
aWRlUG9wb3ZlcigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHRo
aXMuX2hpZ2hsaWdodEVsZW1lbnQgPSB0aGlzLl9oaWdobGlnaHRFeHByZXNzaW9uKGVsZW1lbnQp
OwpAQCAtNzMsNyArMjc1LDcgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5w
cm90b3R5cGUgPSB7CiAgICAgICAgIGZ1bmN0aW9uIHNob3dPYmplY3RQb3BvdmVyKHJlc3VsdCwg
d2FzVGhyb3duKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIXRoaXMuX21vZGVsLnBhdXNl
ZCkgewotICAgICAgICAgICAgICAgIHRoaXMucG9wb3ZlckhlbHBlci5oaWRlUG9wb3ZlcigpOwor
ICAgICAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJIZWxwZXIuaGlkZVBvcG92ZXIoKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzaG93Q2FsbGJh
Y2soV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9hZChyZXN1bHQpLCB3YXNUaHJv
d24pOwpAQCAtODYsNyArMjg4LDcgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFt
ZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHNlbGVjdGVkQ2FsbEZyYW1lLmV2YWx1YXRlKHRoaXMu
X2hpZ2hsaWdodEVsZW1lbnQudGV4dENvbnRlbnQsIHRoaXMuX3BvcG92ZXJPYmplY3RHcm91cCwg
ZmFsc2UsIGZhbHNlLCBzaG93T2JqZWN0UG9wb3Zlci5iaW5kKHRoaXMpKTsKICAgICB9LAogCi0g
ICAgb25IaWRlUG9wb3ZlcjogZnVuY3Rpb24oKQorICAgIF9vbkhpZGVQb3BvdmVyOiBmdW5jdGlv
bigpCiAgICAgewogICAgICAgICAvLyBSZXBsYWNlIGhpZ2xpZ2h0IGVsZW1lbnQgd2l0aCBpdHMg
Y29udGVudHMgaW5wbGFjZS4KICAgICAgICAgdmFyIGhpZ2hsaWdodEVsZW1lbnQgPSB0aGlzLl9o
aWdobGlnaHRFbGVtZW50OwpAQCAtMTI1LDEzICszMjcsMTc3IEBAIFdlYkluc3BlY3Rvci5KYXZh
U2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gY29udGFpbmVy
OwogICAgIH0sCiAKLSAgICBwb3B1bGF0ZVRleHRBcmVhQ29udGV4dE1lbnU6IGZ1bmN0aW9uKGNv
bnRleHRNZW51KQorICAgIGFkZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIHJlc29s
dmVkLCBjb25kaXRpb25hbCwgZW5hYmxlZCkKICAgICB7Ci0gICAgICAgIHZhciBzZWxlY3Rpb24g
PSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmIChzZWxlY3Rpb24udHlwZSAhPT0g
IlJhbmdlIiB8fCBzZWxlY3Rpb24uaXNDb2xsYXBzZWQpCisgICAgICAgIHRoaXMuX2JyZWFrcG9p
bnRzW2xpbmVOdW1iZXJdID0geworICAgICAgICAgICAgcmVzb2x2ZWQ6IHJlc29sdmVkLAorICAg
ICAgICAgICAgY29uZGl0aW9uYWw6IGNvbmRpdGlvbmFsLAorICAgICAgICAgICAgZW5hYmxlZDog
ZW5hYmxlZAorICAgICAgICB9OworICAgICAgICB0aGlzLnRleHRWaWV3ZXIuYmVnaW5VcGRhdGVz
KCk7CisgICAgICAgIHRoaXMudGV4dFZpZXdlci5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3
ZWJraXQtYnJlYWtwb2ludCIpOworICAgICAgICBpZiAoIWVuYWJsZWQpCisgICAgICAgICAgICB0
aGlzLnRleHRWaWV3ZXIuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9p
bnQtZGlzYWJsZWQiKTsKKyAgICAgICAgaWYgKGNvbmRpdGlvbmFsKQorICAgICAgICAgICAgdGhp
cy50ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50
LWNvbmRpdGlvbmFsIik7CisgICAgICAgIHRoaXMudGV4dFZpZXdlci5lbmRVcGRhdGVzKCk7Cisg
ICAgfSwKKworICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAg
eworICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNbbGluZU51bWJlcl07CisgICAgICAg
IHRoaXMudGV4dFZpZXdlci5iZWdpblVwZGF0ZXMoKTsKKyAgICAgICAgdGhpcy50ZXh0Vmlld2Vy
LnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50Iik7CisgICAg
ICAgIHRoaXMudGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQt
YnJlYWtwb2ludC1kaXNhYmxlZCIpOworICAgICAgICB0aGlzLnRleHRWaWV3ZXIucmVtb3ZlRGVj
b3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiKTsKKyAg
ICAgICAgdGhpcy50ZXh0Vmlld2VyLmVuZFVwZGF0ZXMoKTsKKyAgICB9LAorCisgICAgX29uTW91
c2VEb3duOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIGlmIChldmVudC5idXR0b24g
IT0gMCB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYklu
c3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8g
IkFkZCB0byB3YXRjaCIgOiAiQWRkIHRvIFdhdGNoIiksIHRoaXMuX2RlbGVnYXRlLmFkZFRvV2F0
Y2guYmluZCh0aGlzLl9kZWxlZ2F0ZSwgc2VsZWN0aW9uLnRvU3RyaW5nKCkpKTsKKyAgICAgICAg
dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3
ZWJraXQtbGluZS1udW1iZXIiKTsKKyAgICAgICAgaWYgKCF0YXJnZXQpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHZhciBsaW5lTnVtYmVyID0gdGFyZ2V0LmxpbmVOdW1iZXI7CisKKyAg
ICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9kZWxlZ2F0ZS5maW5kQnJlYWtwb2ludChsaW5l
TnVtYmVyKTsKKyAgICAgICAgaWYgKGJyZWFrcG9pbnQpIHsKKyAgICAgICAgICAgIGlmIChldmVu
dC5zaGlmdEtleSkKKyAgICAgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS51cGRhdGVCcmVha3Bv
aW50KGxpbmVOdW1iZXIsIGJyZWFrcG9pbnQuY29uZGl0aW9uLCAhYnJlYWtwb2ludC5lbmFibGVk
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5yZW1v
dmVCcmVha3BvaW50KGxpbmVOdW1iZXIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHRo
aXMuX2RlbGVnYXRlLnNldEJyZWFrcG9pbnQobGluZU51bWJlciwgIiIsIHRydWUpOworICAgICAg
ICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0sCisKKyAgICBfZWRpdEJyZWFrcG9pbnRD
b25kaXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwgY2FsbGJhY2spCisgICAg
eworICAgICAgICB0aGlzLl9jb25kaXRpb25FbGVtZW50ID0gdGhpcy5fY3JlYXRlQ29uZGl0aW9u
RWxlbWVudChsaW5lTnVtYmVyKTsKKyAgICAgICAgdGhpcy50ZXh0Vmlld2VyLmFkZERlY29yYXRp
b24obGluZU51bWJlciwgdGhpcy5fY29uZGl0aW9uRWxlbWVudCk7CisKKyAgICAgICAgZnVuY3Rp
b24gZmluaXNoRWRpdGluZyhjb21taXR0ZWQsIGVsZW1lbnQsIG5ld1RleHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHRoaXMudGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIs
IHRoaXMuX2NvbmRpdGlvbkVsZW1lbnQpOworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NvbmRp
dGlvbkVkaXRvckVsZW1lbnQ7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fY29uZGl0aW9uRWxl
bWVudDsKKyAgICAgICAgICAgIGNhbGxiYWNrKGNvbW1pdHRlZCwgbmV3VGV4dCk7CisgICAgICAg
IH0KKworICAgICAgICB2YXIgY29uZmlnID0gbmV3IFdlYkluc3BlY3Rvci5FZGl0aW5nQ29uZmln
KGZpbmlzaEVkaXRpbmcuYmluZCh0aGlzLCB0cnVlKSwgZmluaXNoRWRpdGluZy5iaW5kKHRoaXMs
IGZhbHNlKSk7CisgICAgICAgIFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmcodGhpcy5fY29uZGl0
aW9uRWRpdG9yRWxlbWVudCwgY29uZmlnKTsKKyAgICAgICAgdGhpcy5fY29uZGl0aW9uRWRpdG9y
RWxlbWVudC52YWx1ZSA9IGNvbmRpdGlvbjsKKyAgICAgICAgdGhpcy5fY29uZGl0aW9uRWRpdG9y
RWxlbWVudC5zZWxlY3QoKTsKKyAgICB9LAorCisgICAgX2NyZWF0ZUNvbmRpdGlvbkVsZW1lbnQ6
IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICB2YXIgY29uZGl0aW9uRWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBjb25kaXRpb25FbGVt
ZW50LmNsYXNzTmFtZSA9ICJzb3VyY2UtZnJhbWUtYnJlYWtwb2ludC1jb25kaXRpb24iOworCisg
ICAgICAgIHZhciBsYWJlbEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIp
OworICAgICAgICBsYWJlbEVsZW1lbnQuY2xhc3NOYW1lID0gInNvdXJjZS1mcmFtZS1icmVha3Bv
aW50LW1lc3NhZ2UiOworICAgICAgICBsYWJlbEVsZW1lbnQuaHRtbEZvciA9ICJzb3VyY2UtZnJh
bWUtYnJlYWtwb2ludC1jb25kaXRpb24iOworICAgICAgICBsYWJlbEVsZW1lbnQuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUaGUgYnJl
YWtwb2ludCBvbiBsaW5lICVkIHdpbGwgc3RvcCBvbmx5IGlmIHRoaXMgZXhwcmVzc2lvbiBpcyB0
cnVlOiIsIGxpbmVOdW1iZXIpKSk7CisgICAgICAgIGNvbmRpdGlvbkVsZW1lbnQuYXBwZW5kQ2hp
bGQobGFiZWxFbGVtZW50KTsKKworICAgICAgICB2YXIgZWRpdG9yRWxlbWVudCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CisgICAgICAgIGVkaXRvckVsZW1lbnQuaWQgPSAic291
cmNlLWZyYW1lLWJyZWFrcG9pbnQtY29uZGl0aW9uIjsKKyAgICAgICAgZWRpdG9yRWxlbWVudC5j
bGFzc05hbWUgPSAibW9ub3NwYWNlIjsKKyAgICAgICAgZWRpdG9yRWxlbWVudC50eXBlID0gInRl
eHQiOworICAgICAgICBjb25kaXRpb25FbGVtZW50LmFwcGVuZENoaWxkKGVkaXRvckVsZW1lbnQp
OworICAgICAgICB0aGlzLl9jb25kaXRpb25FZGl0b3JFbGVtZW50ID0gZWRpdG9yRWxlbWVudDsK
KworICAgICAgICByZXR1cm4gY29uZGl0aW9uRWxlbWVudDsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtib29sZWFuPX0gc2tpcFJldmVhbExpbmUKKyAgICAgKi8KKyAgICBzZXRF
eGVjdXRpb25MaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBza2lwUmV2ZWFsTGluZSkKKyAgICB7
CisgICAgICAgIHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgICAg
ICBpZiAodGhpcy5sb2FkZWQpIHsKKyAgICAgICAgICAgIHRoaXMudGV4dFZpZXdlci5hZGREZWNv
cmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtZXhlY3V0aW9uLWxpbmUiKTsKKyAgICAgICAgICAg
IGlmICghc2tpcFJldmVhbExpbmUpCisgICAgICAgICAgICAgICAgdGhpcy50ZXh0Vmlld2VyLnJl
dmVhbExpbmUobGluZU51bWJlcik7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgY2xlYXJFeGVj
dXRpb25MaW5lOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5sb2FkZWQpCisg
ICAgICAgICAgICB0aGlzLnRleHRWaWV3ZXIucmVtb3ZlRGVjb3JhdGlvbih0aGlzLl9leGVjdXRp
b25MaW5lTnVtYmVyLCAid2Via2l0LWV4ZWN1dGlvbi1saW5lIik7CisgICAgICAgIGRlbGV0ZSB0
aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyOworICAgIH0sCisKKyAgICBfbGluZU51bWJlckFmdGVy
RWRpdGluZzogZnVuY3Rpb24obGluZU51bWJlciwgb2xkUmFuZ2UsIG5ld1JhbmdlKQorICAgIHsK
KyAgICAgICAgdmFyIHNoaWZ0T2Zmc2V0ID0gbGluZU51bWJlciA8PSBvbGRSYW5nZS5zdGFydExp
bmUgPyAwIDogbmV3UmFuZ2UubGluZXNDb3VudCAtIG9sZFJhbmdlLmxpbmVzQ291bnQ7CisKKyAg
ICAgICAgLy8gU3BlY2lhbCBjYXNlIG9mIGVkaXRpbmcgdGhlIGxpbmUgaXRzZWxmLiBXZSBzaG91
bGQgZGVjaWRlIHdoZXRoZXIgdGhlIGxpbmUgbnVtYmVyIHNob3VsZCBtb3ZlIGJlbG93IG9yIG5v
dC4KKyAgICAgICAgaWYgKGxpbmVOdW1iZXIgPT09IG9sZFJhbmdlLnN0YXJ0TGluZSkgeworICAg
ICAgICAgICAgdmFyIHdoaXRlU3BhY2VzUmVnZXggPSAvXltcc1x4QTBdKiQvOworICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGxpbmVOdW1iZXIgKyBpIDw9IG5ld1JhbmdlLmVuZExpbmU7ICsr
aSkgeworICAgICAgICAgICAgICAgIGlmICghd2hpdGVTcGFjZXNSZWdleC50ZXN0KHRoaXMuX3Rl
eHRNb2RlbC5saW5lKGxpbmVOdW1iZXIgKyBpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2hp
ZnRPZmZzZXQgPSBpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YXIgbmV3TGluZU51bWJl
ciA9IE1hdGgubWF4KDAsIGxpbmVOdW1iZXIgKyBzaGlmdE9mZnNldCk7CisgICAgICAgIGlmIChv
bGRSYW5nZS5zdGFydExpbmUgPCBsaW5lTnVtYmVyICYmIGxpbmVOdW1iZXIgPCBvbGRSYW5nZS5l
bmRMaW5lKQorICAgICAgICAgICAgbmV3TGluZU51bWJlciA9IG9sZFJhbmdlLnN0YXJ0TGluZTsK
KyAgICAgICAgcmV0dXJuIG5ld0xpbmVOdW1iZXI7CisgICAgfSwKKworICAgIF9vblRleHRWaWV3
ZXJDb250ZW50TG9hZGVkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodHlwZW9mIHRo
aXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIgPT09ICJudW1iZXIiKQorICAgICAgICAgICAgdGhpcy5z
ZXRFeGVjdXRpb25MaW5lKHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIpOwogICAgIH0KIH0KIAog
V2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUuX19wcm90b19fID0g
V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZTsKKworLyoqCisgKiBAaW50ZXJmYWNl
CisgKi8KK1dlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWVEZWxlZ2F0ZSA9IGZ1bmN0
aW9uKCkKK3sKK30KKworV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZURlbGVnYXRl
LnByb3RvdHlwZSA9IHsKKyAgICByZXF1ZXN0Q29udGVudDogZnVuY3Rpb24oY2FsbGJhY2spIHsg
fSwKKworICAgIHNldEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwg
ZW5hYmxlZCkgeyB9LAorCisgICAgcmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rpb24obGluZU51bWJl
cikgeyB9LAorCisgICAgdXBkYXRlQnJlYWtwb2ludDogZnVuY3Rpb24obGluZU51bWJlciwgY29u
ZGl0aW9uLCBlbmFibGVkKSB7IH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHs/V2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnR9CisgICAgICovCisgICAgZmluZEJyZWFrcG9pbnQ6IGZ1bmN0aW9u
KGxpbmVOdW1iZXIpIHsgfSwKKworICAgIGNvbnRpbnVlVG9MaW5lOiBmdW5jdGlvbihsaW5lTnVt
YmVyKSB7IH0sCisKKyAgICBjYW5FZGl0U2NyaXB0U291cmNlOiBmdW5jdGlvbigpIHsgcmV0dXJu
IGZhbHNlOyB9LAorCisgICAgc2V0U2NyaXB0U291cmNlOiBmdW5jdGlvbih0ZXh0LCBjYWxsYmFj
aykgeyB9LAorCisgICAgc2V0U2NyaXB0U291cmNlSXNCZWluZ0VkaXRlZDogZnVuY3Rpb24oaW5F
ZGl0TW9kZSkgeyB9LAorCisgICAgc3VnZ2VzdGVkRmlsZU5hbWU6IGZ1bmN0aW9uKCkgeyB9LAor
CisgICAgYWRkVG9XYXRjaDogZnVuY3Rpb24oKSB7IH0KK30KKworLyoqCisgKiBEZWZhdWx0IGlt
cGxlbWVudGF0aW9uLgorICovCitXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lRGVs
ZWdhdGUuc3R1YiA9IE9iamVjdC5jcmVhdGUoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VG
cmFtZURlbGVnYXRlLnByb3RvdHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlVmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvUmVzb3VyY2VWaWV3LmpzCmluZGV4IDFhOGVjN2UuLmI5OWI1OGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VWaWV3Lmpz
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VWaWV3Lmpz
CkBAIC04Miw3ICs4Miw3IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZVZpZXcubm9uU291cmNlVmll
d0ZvclJlc291cmNlID0gZnVuY3Rpb24ocmVzb3VyY2UpCiAgKi8KIFdlYkluc3BlY3Rvci5SZXNv
dXJjZVNvdXJjZUZyYW1lID0gZnVuY3Rpb24ocmVzb3VyY2UpCiB7Ci0gICAgV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLmNhbGwodGhpcywgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lRGVsZWdhdGUu
c3R1YiwgcmVzb3VyY2UudXJsKTsKKyAgICBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUuY2FsbCh0
aGlzLCByZXNvdXJjZS51cmwpOwogICAgIHRoaXMuX3Jlc291cmNlID0gcmVzb3VyY2U7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1Bh
bmVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwu
anMKaW5kZXggNGZlNTQ0Yy4uN2FmYTk5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKQEAgLTEyMTAsMTMgKzEyMTAsMTMgQEAg
V2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVj
dG9yLlBhbmVsLnByb3RvdHlwZTsKIAogLyoqCiAgKiBAY29uc3RydWN0b3IKLSAqIEBpbXBsZW1l
bnRzIHtXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVEZWxlZ2F0ZX0KKyAqIEBpbXBsZW1lbnRzIHtX
ZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lRGVsZWdhdGV9CiAgKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5TY3JpcHRzUGFuZWx9IHNjcmlwdHNQYW5lbAogICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKICAqLwogV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lRGVsZWdhdGVGb3JTY3JpcHRzUGFuZWwgPSBmdW5jdGlvbihzY3JpcHRzUGFuZWwsIHVp
U291cmNlQ29kZSkKIHsKLSAgICBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVEZWxlZ2F0ZS5jYWxs
KHRoaXMpOworICAgIFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWVEZWxlZ2F0ZS5j
YWxsKHRoaXMpOwogCiAgICAgdGhpcy5fc2NyaXB0c1BhbmVsID0gc2NyaXB0c1BhbmVsOwogICAg
IHRoaXMuX21vZGVsID0gdGhpcy5fc2NyaXB0c1BhbmVsLl9wcmVzZW50YXRpb25Nb2RlbDsKQEAg
LTEyODQsNCArMTI4NCw0IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZURlbGVnYXRlRm9yU2Ny
aXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICB9CiB9CiAKLVdlYkluc3BlY3Rvci5Tb3VyY2VG
cmFtZURlbGVnYXRlRm9yU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGU7CitXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWVEZWxlZ2F0ZUZvclNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5z
cGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCmluZGV4IDY0
NWY4MmQuLjMxNTU3ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlRnJhbWUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Tb3VyY2VGcmFtZS5qcwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQpAQCAtMzIsMTIgKzMyLDExIEBACiAgKiBAZXh0ZW5kcyB7V2ViSW5z
cGVjdG9yLlZpZXd9CiAgKiBAY29uc3RydWN0b3IKICAqLwotV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lID0gZnVuY3Rpb24oZGVsZWdhdGUsIHVybCkKK1dlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZSA9
IGZ1bmN0aW9uKHVybCkKIHsKICAgICBXZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMpOwogICAg
IHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzY3JpcHQtdmlldyIpOwogCi0gICAgdGhpcy5f
ZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKICAgICB0aGlzLl91cmwgPSB1cmw7CiAKICAgICB0aGlzLl90
ZXh0TW9kZWwgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNb2RlbCgpOwpAQCAtNDUsMTAg
KzQ0LDYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lID0gZnVuY3Rpb24oZGVsZWdhdGUsIHVy
bCkKICAgICB2YXIgdGV4dFZpZXdlckRlbGVnYXRlID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0Vmll
d2VyRGVsZWdhdGVGb3JTb3VyY2VGcmFtZSh0aGlzKTsKICAgICB0aGlzLl90ZXh0Vmlld2VyID0g
bmV3IFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyKHRoaXMuX3RleHRNb2RlbCwgV2ViSW5zcGVjdG9y
LnBsYXRmb3JtLCB0aGlzLl91cmwsIHRleHRWaWV3ZXJEZWxlZ2F0ZSk7CiAKLSAgICB0aGlzLnBv
cG92ZXJIZWxwZXIgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFBvcG92ZXJIZWxwZXIodGhpcy5f
dGV4dFZpZXdlci5lbGVtZW50LAotICAgICAgICAgICAgdGhpcy5fZ2V0UG9wb3ZlckFuY2hvci5i
aW5kKHRoaXMpLCB0aGlzLm9uU2hvd1BvcG92ZXIuYmluZCh0aGlzKSwgdGhpcy5vbkhpZGVQb3Bv
dmVyLmJpbmQodGhpcyksIHRydWUpOwotICAgIHRoaXMuX3RleHRWaWV3ZXIuZWxlbWVudC5hZGRF
dmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLl9tb3VzZURvd24uYmluZCh0aGlzKSwgdHJ1
ZSk7Ci0KICAgICB0aGlzLl9lZGl0QnV0dG9uID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJC
dXR0b24oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJFZGl0IiksICJlZGl0LXNvdXJjZS1zdGF0dXMt
YmFyLWl0ZW0iKTsKICAgICB0aGlzLl9lZGl0QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNr
IiwgdGhpcy5fZWRpdEJ1dHRvbkNsaWNrZWQuYmluZCh0aGlzKSwgdGhpcyk7CiAKQEAgLTU4LDgg
KzUzLDYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lID0gZnVuY3Rpb24oZGVsZWdhdGUsIHVy
bCkKICAgICB0aGlzLl9tZXNzYWdlcyA9IFtdOwogICAgIHRoaXMuX3Jvd01lc3NhZ2VzID0ge307
CiAgICAgdGhpcy5fbWVzc2FnZUJ1YmJsZXMgPSB7fTsKLQotICAgIHRoaXMuX2JyZWFrcG9pbnRz
ID0ge307CiB9CiAKIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5FdmVudHMgPSB7CkBAIC04NSw3
ICs3OCw2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5jcmVhdGVTZWFyY2hSZWdleCA9IGZ1
bmN0aW9uKHF1ZXJ5KQogICAgIHJldHVybiByZWdleDsKIH0KIAotCiBXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgIHdhc1Nob3duOiBmdW5jdGlvbigpCiAgICAgewpA
QCAtOTksOCArOTEsNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewog
ICAgICAgICBpZiAodGhpcy5sb2FkZWQpCiAgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmZy
ZWVDYWNoZWRFbGVtZW50cygpOwogCi0gICAgICAgIGlmICh0aGlzLnBvcG92ZXJIZWxwZXIpCi0g
ICAgICAgICAgICB0aGlzLnBvcG92ZXJIZWxwZXIuaGlkZVBvcG92ZXIoKTsKICAgICAgICAgdGhp
cy5fY2xlYXJMaW5lSGlnaGxpZ2h0KCk7CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIucmVhZE9u
bHkgPSB0cnVlOwogICAgIH0sCkBAIC0xMjAsMTcgKzExMCwyMSBAQCBXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9LAogCisg
ICAgZ2V0IHRleHRWaWV3ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRWaWV3
ZXI7CisgICAgfSwKKwogICAgIF9lbnN1cmVDb250ZW50TG9hZGVkOiBmdW5jdGlvbigpCiAgICAg
ewogICAgICAgICBpZiAoIXRoaXMuX2NvbnRlbnRSZXF1ZXN0ZWQpIHsKICAgICAgICAgICAgIHRo
aXMuX2NvbnRlbnRSZXF1ZXN0ZWQgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5yZXF1ZXN0Q29u
dGVudCh0aGlzLl9pbml0aWFsaXplVGV4dFZpZXdlci5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAg
IHRoaXMucmVxdWVzdENvbnRlbnQodGhpcy5zZXRDb250ZW50LmJpbmQodGhpcykpOwogICAgICAg
ICB9CiAgICAgfSwKIAogICAgIHJlcXVlc3RDb250ZW50OiBmdW5jdGlvbihjYWxsYmFjaykKICAg
ICB7Ci0gICAgICAgIHRoaXMuX2RlbGVnYXRlLnJlcXVlc3RDb250ZW50KGNhbGxiYWNrKTsKICAg
ICB9LAogCiAgICAgLyoqCkBAIC0xOTcsMTAgKzE5MSw4IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VG
cmFtZS5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICB0aGlzLl92aWV3ZXJTdGF0ZSA9IHsK
ICAgICAgICAgICAgIHRleHRNb2RlbENvbnRlbnQ6IHRoaXMuX3RleHRNb2RlbC50ZXh0LAotICAg
ICAgICAgICAgZXhlY3V0aW9uTGluZU51bWJlcjogdGhpcy5fZXhlY3V0aW9uTGluZU51bWJlciwK
ICAgICAgICAgICAgIG1lc3NhZ2VzOiB0aGlzLl9tZXNzYWdlcywKICAgICAgICAgICAgIGRpZmZM
aW5lczogdGhpcy5fZGlmZkxpbmVzLAotICAgICAgICAgICAgYnJlYWtwb2ludHM6IHRoaXMuX2Jy
ZWFrcG9pbnRzCiAgICAgICAgIH07CiAgICAgfSwKIApAQCAtMjE0LDMyICsyMDYsMTMgQEAgV2Vi
SW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fZGlmZkxp
bmVzID0gdGhpcy5fdmlld2VyU3RhdGUuZGlmZkxpbmVzOwogICAgICAgICB0aGlzLl9zZXRUZXh0
Vmlld2VyRGVjb3JhdGlvbnMoKTsKIAotICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3ZpZXdlclN0
YXRlLmV4ZWN1dGlvbkxpbmVOdW1iZXIgPT09ICJudW1iZXIiKSB7Ci0gICAgICAgICAgICB0aGlz
LmNsZWFyRXhlY3V0aW9uTGluZSgpOwotICAgICAgICAgICAgdGhpcy5zZXRFeGVjdXRpb25MaW5l
KHRoaXMuX3ZpZXdlclN0YXRlLmV4ZWN1dGlvbkxpbmVOdW1iZXIpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdmFyIG9sZEJyZWFrcG9pbnRzID0gdGhpcy5fYnJlYWtwb2ludHM7Ci0gICAgICAgIHRo
aXMuX2JyZWFrcG9pbnRzID0ge307Ci0gICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgaW4gb2xk
QnJlYWtwb2ludHMpCi0gICAgICAgICAgICB0aGlzLnJlbW92ZUJyZWFrcG9pbnQoTnVtYmVyKGxp
bmVOdW1iZXIpKTsKLQotICAgICAgICB2YXIgbmV3QnJlYWtwb2ludHMgPSB0aGlzLl92aWV3ZXJT
dGF0ZS5icmVha3BvaW50czsKLSAgICAgICAgZm9yICh2YXIgbGluZU51bWJlciBpbiBuZXdCcmVh
a3BvaW50cykgewotICAgICAgICAgICAgbGluZU51bWJlciA9IE51bWJlcihsaW5lTnVtYmVyKTsK
LSAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3QnJlYWtwb2ludHNbbGluZU51bWJlcl07
Ci0gICAgICAgICAgICB0aGlzLmFkZEJyZWFrcG9pbnQobGluZU51bWJlciwgYnJlYWtwb2ludC5y
ZXNvbHZlZCwgYnJlYWtwb2ludC5jb25kaXRpb25hbCwgYnJlYWtwb2ludC5lbmFibGVkKTsKLSAg
ICAgICAgfQotCiAgICAgICAgIGRlbGV0ZSB0aGlzLl92aWV3ZXJTdGF0ZTsKICAgICB9LAogCiAg
ICAgYmVmb3JlVGV4dENoYW5nZWQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIGlmICghdGhp
cy5fdmlld2VyU3RhdGUpIHsKKyAgICAgICAgaWYgKCF0aGlzLl92aWV3ZXJTdGF0ZSkKICAgICAg
ICAgICAgIHRoaXMuX3NhdmVWaWV3ZXJTdGF0ZSgpOwotICAgICAgICAgICAgdGhpcy5fZGVsZWdh
dGUuc2V0U2NyaXB0U291cmNlSXNCZWluZ0VkaXRlZCh0cnVlKTsKLSAgICAgICAgfQogCiAgICAg
ICAgIFdlYkluc3BlY3Rvci5zZWFyY2hDb250cm9sbGVyLmNhbmNlbFNlYXJjaCgpOwogICAgICAg
ICB0aGlzLmNsZWFyTWVzc2FnZXMoKTsKQEAgLTI0Nyw1NCArMjIwLDkgQEAgV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKIAogICAgIGFmdGVyVGV4dENoYW5nZWQ6IGZ1bmN0
aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSkKICAgICB7Ci0gICAgICAgIGlmICghb2xkUmFuZ2UgfHwg
IW5ld1JhbmdlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIEFkanVzdCBleGVj
dXRpb24gbGluZSBudW1iZXIuCi0gICAgICAgIGlmICh0eXBlb2YgdGhpcy5fZXhlY3V0aW9uTGlu
ZU51bWJlciA9PT0gIm51bWJlciIpIHsKLSAgICAgICAgICAgIHZhciBuZXdFeGVjdXRpb25MaW5l
TnVtYmVyID0gdGhpcy5fbGluZU51bWJlckFmdGVyRWRpdGluZyh0aGlzLl9leGVjdXRpb25MaW5l
TnVtYmVyLCBvbGRSYW5nZSwgbmV3UmFuZ2UpOwotICAgICAgICAgICAgdGhpcy5jbGVhckV4ZWN1
dGlvbkxpbmUoKTsKLSAgICAgICAgICAgIHRoaXMuc2V0RXhlY3V0aW9uTGluZShuZXdFeGVjdXRp
b25MaW5lTnVtYmVyLCB0cnVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFkanVzdCBicmVh
a3BvaW50cy4KLSAgICAgICAgdmFyIG9sZEJyZWFrcG9pbnRzID0gdGhpcy5fYnJlYWtwb2ludHM7
Ci0gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzID0ge307Ci0gICAgICAgIGZvciAodmFyIGxpbmVO
dW1iZXIgaW4gb2xkQnJlYWtwb2ludHMpIHsKLSAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBOdW1i
ZXIobGluZU51bWJlcik7Ci0gICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG9sZEJyZWFrcG9p
bnRzW2xpbmVOdW1iZXJdOwotICAgICAgICAgICAgdmFyIG5ld0xpbmVOdW1iZXIgPSB0aGlzLl9s
aW5lTnVtYmVyQWZ0ZXJFZGl0aW5nKGxpbmVOdW1iZXIsIG9sZFJhbmdlLCBuZXdSYW5nZSk7Ci0g
ICAgICAgICAgICBpZiAobGluZU51bWJlciA9PT0gbmV3TGluZU51bWJlcikKLSAgICAgICAgICAg
ICAgICB0aGlzLl9icmVha3BvaW50c1tsaW5lTnVtYmVyXSA9IGJyZWFrcG9pbnQ7Ci0gICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUJyZWFrcG9pbnQobGluZU51
bWJlcik7Ci0gICAgICAgICAgICAgICAgdGhpcy5hZGRCcmVha3BvaW50KG5ld0xpbmVOdW1iZXIs
IGJyZWFrcG9pbnQucmVzb2x2ZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uYWwsIGJyZWFrcG9pbnQu
ZW5hYmxlZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX2xpbmVO
dW1iZXJBZnRlckVkaXRpbmc6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIG9sZFJhbmdlLCBuZXdSYW5n
ZSkKLSAgICB7Ci0gICAgICAgIHZhciBzaGlmdE9mZnNldCA9IGxpbmVOdW1iZXIgPD0gb2xkUmFu
Z2Uuc3RhcnRMaW5lID8gMCA6IG5ld1JhbmdlLmxpbmVzQ291bnQgLSBvbGRSYW5nZS5saW5lc0Nv
dW50OwotCi0gICAgICAgIC8vIFNwZWNpYWwgY2FzZSBvZiBlZGl0aW5nIHRoZSBsaW5lIGl0c2Vs
Zi4gV2Ugc2hvdWxkIGRlY2lkZSB3aGV0aGVyIHRoZSBsaW5lIG51bWJlciBzaG91bGQgbW92ZSBi
ZWxvdyBvciBub3QuCi0gICAgICAgIGlmIChsaW5lTnVtYmVyID09PSBvbGRSYW5nZS5zdGFydExp
bmUpIHsKLSAgICAgICAgICAgIHZhciB3aGl0ZVNwYWNlc1JlZ2V4ID0gL15bXHNceEEwXSokLzsK
LSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBsaW5lTnVtYmVyICsgaSA8PSBuZXdSYW5nZS5l
bmRMaW5lOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXdoaXRlU3BhY2VzUmVnZXgudGVz
dCh0aGlzLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyICsgaSkpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHNoaWZ0T2Zmc2V0ID0gaTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIG5l
d0xpbmVOdW1iZXIgPSBNYXRoLm1heCgwLCBsaW5lTnVtYmVyICsgc2hpZnRPZmZzZXQpOwotICAg
ICAgICBpZiAob2xkUmFuZ2Uuc3RhcnRMaW5lIDwgbGluZU51bWJlciAmJiBsaW5lTnVtYmVyIDwg
b2xkUmFuZ2UuZW5kTGluZSkKLSAgICAgICAgICAgIG5ld0xpbmVOdW1iZXIgPSBvbGRSYW5nZS5z
dGFydExpbmU7Ci0gICAgICAgIHJldHVybiBuZXdMaW5lTnVtYmVyOwogICAgIH0sCiAKLSAgICBf
aW5pdGlhbGl6ZVRleHRWaWV3ZXI6IGZ1bmN0aW9uKG1pbWVUeXBlLCBjb250ZW50KQorICAgIHNl
dENvbnRlbnQ6IGZ1bmN0aW9uKG1pbWVUeXBlLCBjb250ZW50KQogICAgIHsKICAgICAgICAgdGhp
cy5fdGV4dFZpZXdlci5taW1lVHlwZSA9IG1pbWVUeXBlOwogCkBAIC0zMDUsOSArMjMzLDYgQEAg
V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLl9z
ZXRUZXh0Vmlld2VyRGVjb3JhdGlvbnMoKTsKIAotICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2V4
ZWN1dGlvbkxpbmVOdW1iZXIgPT09ICJudW1iZXIiKQotICAgICAgICAgICAgdGhpcy5zZXRFeGVj
dXRpb25MaW5lKHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIpOwotCiAgICAgICAgIGlmICh0eXBl
b2YgdGhpcy5fbGluZVRvSGlnaGxpZ2h0ID09PSAibnVtYmVyIikgewogICAgICAgICAgICAgdGhp
cy5oaWdobGlnaHRMaW5lKHRoaXMuX2xpbmVUb0hpZ2hsaWdodCk7CiAgICAgICAgICAgICBkZWxl
dGUgdGhpcy5fbGluZVRvSGlnaGxpZ2h0OwpAQCAtNDQzLDI2ICszNjgsNiBAQCBXZWJJbnNwZWN0
b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gcmFuZ2VzOwogICAg
IH0sCiAKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBza2lwUmV2ZWFsTGluZQot
ICAgICAqLwotICAgIHNldEV4ZWN1dGlvbkxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIHNraXBS
ZXZlYWxMaW5lKQotICAgIHsKLSAgICAgICAgdGhpcy5fZXhlY3V0aW9uTGluZU51bWJlciA9IGxp
bmVOdW1iZXI7Ci0gICAgICAgIGlmICh0aGlzLmxvYWRlZCkgewotICAgICAgICAgICAgdGhpcy5f
dGV4dFZpZXdlci5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtZXhlY3V0aW9uLWxp
bmUiKTsKLSAgICAgICAgICAgIGlmICghc2tpcFJldmVhbExpbmUpCi0gICAgICAgICAgICAgICAg
dGhpcy5fdGV4dFZpZXdlci5yZXZlYWxMaW5lKGxpbmVOdW1iZXIpOwotICAgICAgICB9Ci0gICAg
fSwKLQotICAgIGNsZWFyRXhlY3V0aW9uTGluZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
aWYgKHRoaXMubG9hZGVkKQotICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZW1vdmVEZWNv
cmF0aW9uKHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIsICJ3ZWJraXQtZXhlY3V0aW9uLWxpbmUi
KTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXI7Ci0gICAgfSwKLQog
ICAgIF91cGRhdGVEaWZmRGVjb3JhdGlvbnM6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlm
ICghdGhpcy5fZGlmZkxpbmVzKQpAQCAtNTcxLDc1ICs0NzYsOCBAQCBXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICByb3dNZXNzYWdlLnJlcGVhdENvdW50RWxl
bWVudC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiIChyZXBlYXRlZCAlZCB0
aW1lcykiLCByb3dNZXNzYWdlLnJlcGVhdENvdW50KTsKICAgICB9LAogCi0gICAgYWRkQnJlYWtw
b2ludDogZnVuY3Rpb24obGluZU51bWJlciwgcmVzb2x2ZWQsIGNvbmRpdGlvbmFsLCBlbmFibGVk
KQotICAgIHsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNbbGluZU51bWJlcl0gPSB7Ci0gICAg
ICAgICAgICByZXNvbHZlZDogcmVzb2x2ZWQsCi0gICAgICAgICAgICBjb25kaXRpb25hbDogY29u
ZGl0aW9uYWwsCi0gICAgICAgICAgICBlbmFibGVkOiBlbmFibGVkCi0gICAgICAgIH07Ci0gICAg
ICAgIHRoaXMuX3RleHRWaWV3ZXIuYmVnaW5VcGRhdGVzKCk7Ci0gICAgICAgIHRoaXMuX3RleHRW
aWV3ZXIuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQiKTsKLSAg
ICAgICAgaWYgKCFlbmFibGVkKQotICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5hZGREZWNv
cmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZCIpOwotICAgICAg
ICBpZiAoY29uZGl0aW9uYWwpCi0gICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29y
YXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50LWNvbmRpdGlvbmFsIik7Ci0gICAg
ICAgIHRoaXMuX3RleHRWaWV3ZXIuZW5kVXBkYXRlcygpOwotICAgIH0sCi0KLSAgICByZW1vdmVC
cmVha3BvaW50OiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgZGVsZXRlIHRo
aXMuX2JyZWFrcG9pbnRzW2xpbmVOdW1iZXJdOwotICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmJl
Z2luVXBkYXRlcygpOwotICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24o
bGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50Iik7Ci0gICAgICAgIHRoaXMuX3RleHRWaWV3
ZXIucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtZGlzYWJs
ZWQiKTsKLSAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1i
ZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1jb25kaXRpb25hbCIpOwotICAgICAgICB0aGlzLl90ZXh0
Vmlld2VyLmVuZFVwZGF0ZXMoKTsKLSAgICB9LAotCiAgICAgcG9wdWxhdGVMaW5lR3V0dGVyQ29u
dGV4dE1lbnU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbnRleHRNZW51KQogICAgIHsKLSAgICAg
ICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVj
dG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJDb250aW51ZSB0byBoZXJlIiA6ICJDb250
aW51ZSB0byBIZXJlIiksIHRoaXMuX2RlbGVnYXRlLmNvbnRpbnVlVG9MaW5lLmJpbmQodGhpcy5f
ZGVsZWdhdGUsIGxpbmVOdW1iZXIpKTsKLQotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMu
X2RlbGVnYXRlLmZpbmRCcmVha3BvaW50KGxpbmVOdW1iZXIpOwotICAgICAgICBpZiAoIWJyZWFr
cG9pbnQpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgcm93IGRvZXNuJ3QgaGF2ZSBhIGJyZWFrcG9p
bnQ6IFdlIHdhbnQgdG8gc2hvdyBBZGQgQnJlYWtwb2ludCBhbmQgQWRkIGFuZCBFZGl0IEJyZWFr
cG9pbnQuCi0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5V
SVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8gIkFkZCBicmVh
a3BvaW50IiA6ICJBZGQgQnJlYWtwb2ludCIpLCB0aGlzLl9kZWxlZ2F0ZS5zZXRCcmVha3BvaW50
LmJpbmQodGhpcy5fZGVsZWdhdGUsIGxpbmVOdW1iZXIsICIiLCB0cnVlKSk7Ci0KLSAgICAgICAg
ICAgIGZ1bmN0aW9uIGFkZENvbmRpdGlvbmFsQnJlYWtwb2ludCgpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5hZGRCcmVha3BvaW50KGxpbmVOdW1iZXIsIHRydWUsIHRydWUs
IHRydWUpOwotICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRpZEVkaXRCcmVha3BvaW50Q29uZGl0
aW9uKGNvbW1pdHRlZCwgY29uZGl0aW9uKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGhpcy5yZW1vdmVCcmVha3BvaW50KGxpbmVOdW1iZXIpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoY29tbWl0dGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVs
ZWdhdGUuc2V0QnJlYWtwb2ludChsaW5lTnVtYmVyLCBjb25kaXRpb24sIHRydWUpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzLl9lZGl0QnJlYWtwb2ludENvbmRpdGlv
bihsaW5lTnVtYmVyLCAiIiwgZGlkRWRpdEJyZWFrcG9pbnRDb25kaXRpb24uYmluZCh0aGlzKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYklu
c3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8g
IkFkZCBjb25kaXRpb25hbCBicmVha3BvaW504oCmIiA6ICJBZGQgQ29uZGl0aW9uYWwgQnJlYWtw
b2ludOKApiIpLCBhZGRDb25kaXRpb25hbEJyZWFrcG9pbnQuYmluZCh0aGlzKSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGlzIHJvdyBoYXMgYSBicmVha3BvaW50LCB3ZSB3
YW50IHRvIHNob3cgZWRpdCBhbmQgcmVtb3ZlIGJyZWFrcG9pbnQsIGFuZCBlaXRoZXIgZGlzYWJs
ZSBvciBlbmFibGUuCi0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3Bl
Y3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8gIlJl
bW92ZSBicmVha3BvaW50IiA6ICJSZW1vdmUgQnJlYWtwb2ludCIpLCB0aGlzLl9kZWxlZ2F0ZS5y
ZW1vdmVCcmVha3BvaW50LmJpbmQodGhpcy5fZGVsZWdhdGUsIGxpbmVOdW1iZXIpKTsKLSAgICAg
ICAgICAgIGZ1bmN0aW9uIGVkaXRCcmVha3BvaW50Q29uZGl0aW9uKCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBmdW5jdGlvbiBkaWRFZGl0QnJlYWtwb2ludENvbmRpdGlvbihjb21t
aXR0ZWQsIGNvbmRpdGlvbikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChjb21taXR0ZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS51
cGRhdGVCcmVha3BvaW50KGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwgYnJlYWtwb2ludC5lbmFibGVk
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5fZWRpdEJyZWFrcG9p
bnRDb25kaXRpb24obGluZU51bWJlciwgYnJlYWtwb2ludC5jb25kaXRpb24sIGRpZEVkaXRCcmVh
a3BvaW50Q29uZGl0aW9uLmJpbmQodGhpcykpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9y
LnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJFZGl0IGJyZWFrcG9pbnTigKYiIDogIkVkaXQg
QnJlYWtwb2ludOKApiIpLCBlZGl0QnJlYWtwb2ludENvbmRpdGlvbi5iaW5kKHRoaXMpKTsKLSAg
ICAgICAgICAgIGZ1bmN0aW9uIHNldEJyZWFrcG9pbnRFbmFibGVkKGVuYWJsZWQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUudXBkYXRlQnJlYWtwb2ludChs
aW5lTnVtYmVyLCBicmVha3BvaW50LmNvbmRpdGlvbiwgZW5hYmxlZCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoYnJlYWtwb2ludC5lbmFibGVkKQotICAgICAgICAgICAgICAgIGNv
bnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51
c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiRGlzYWJsZSBicmVha3BvaW50IiA6ICJEaXNhYmxl
IEJyZWFrcG9pbnQiKSwgc2V0QnJlYWtwb2ludEVuYWJsZWQuYmluZCh0aGlzLCBmYWxzZSkpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0o
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVz
KCkgPyAiRW5hYmxlIGJyZWFrcG9pbnQiIDogIkVuYWJsZSBCcmVha3BvaW50IiksIHNldEJyZWFr
cG9pbnRFbmFibGVkLmJpbmQodGhpcywgdHJ1ZSkpOwotICAgICAgICB9CiAgICAgfSwKIAogICAg
IHBvcHVsYXRlVGV4dEFyZWFDb250ZXh0TWVudTogZnVuY3Rpb24oY29udGV4dE1lbnUpCkBAIC02
NDgsNzQgKzQ4Niw2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAK
ICAgICBzdWdnZXN0ZWRGaWxlTmFtZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMuX2RlbGVnYXRlLnN1Z2dlc3RlZEZpbGVOYW1lKCk7Ci0gICAgfSwKLQotICAgIF9tb3Vz
ZURvd246IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKGV2ZW50LmJ1dHRvbiAh
PSAwIHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQuZW5j
bG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWxpbmUtbnVtYmVyIik7Ci0gICAgICAg
IGlmICghdGFyZ2V0KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgbGluZU51bWJl
ciA9IHRhcmdldC5saW5lTnVtYmVyOwotCi0gICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5f
ZGVsZWdhdGUuZmluZEJyZWFrcG9pbnQobGluZU51bWJlcik7Ci0gICAgICAgIGlmIChicmVha3Bv
aW50KSB7Ci0gICAgICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpCi0gICAgICAgICAgICAgICAg
dGhpcy5fZGVsZWdhdGUudXBkYXRlQnJlYWtwb2ludChsaW5lTnVtYmVyLCBicmVha3BvaW50LmNv
bmRpdGlvbiwgIWJyZWFrcG9pbnQuZW5hYmxlZCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgdGhpcy5fZGVsZWdhdGUucmVtb3ZlQnJlYWtwb2ludChsaW5lTnVtYmVyKTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5zZXRCcmVha3BvaW50KGxp
bmVOdW1iZXIsICIiLCB0cnVlKTsKLSAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAg
ICB9LAotCi0gICAgX2dldFBvcG92ZXJBbmNob3I6IGZ1bmN0aW9uKGVsZW1lbnQpCi0gICAgewot
ICAgICAgICBpZiAoIXRoaXMuc2hvdWxkU2hvd1BvcG92ZXIoZWxlbWVudCkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIHJldHVybiBlbGVtZW50OwotICAgIH0sCi0KLSAgICBfZWRpdEJy
ZWFrcG9pbnRDb25kaXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwgY2FsbGJh
Y2spCi0gICAgewotICAgICAgICB0aGlzLl9jb25kaXRpb25FbGVtZW50ID0gdGhpcy5fY3JlYXRl
Q29uZGl0aW9uRWxlbWVudChsaW5lTnVtYmVyKTsKLSAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5h
ZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsIHRoaXMuX2NvbmRpdGlvbkVsZW1lbnQpOwotCi0gICAg
ICAgIGZ1bmN0aW9uIGZpbmlzaEVkaXRpbmcoY29tbWl0dGVkLCBlbGVtZW50LCBuZXdUZXh0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24o
bGluZU51bWJlciwgdGhpcy5fY29uZGl0aW9uRWxlbWVudCk7Ci0gICAgICAgICAgICBkZWxldGUg
dGhpcy5fY29uZGl0aW9uRWRpdG9yRWxlbWVudDsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9j
b25kaXRpb25FbGVtZW50OwotICAgICAgICAgICAgY2FsbGJhY2soY29tbWl0dGVkLCBuZXdUZXh0
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBjb25maWcgPSBuZXcgV2ViSW5zcGVjdG9yLkVk
aXRpbmdDb25maWcoZmluaXNoRWRpdGluZy5iaW5kKHRoaXMsIHRydWUpLCBmaW5pc2hFZGl0aW5n
LmJpbmQodGhpcywgZmFsc2UpKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyh0
aGlzLl9jb25kaXRpb25FZGl0b3JFbGVtZW50LCBjb25maWcpOwotICAgICAgICB0aGlzLl9jb25k
aXRpb25FZGl0b3JFbGVtZW50LnZhbHVlID0gY29uZGl0aW9uOwotICAgICAgICB0aGlzLl9jb25k
aXRpb25FZGl0b3JFbGVtZW50LnNlbGVjdCgpOwotICAgIH0sCi0KLSAgICBfY3JlYXRlQ29uZGl0
aW9uRWxlbWVudDogZnVuY3Rpb24obGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIHZhciBjb25k
aXRpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIGNv
bmRpdGlvbkVsZW1lbnQuY2xhc3NOYW1lID0gInNvdXJjZS1mcmFtZS1icmVha3BvaW50LWNvbmRp
dGlvbiI7Ci0KLSAgICAgICAgdmFyIGxhYmVsRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImxhYmVsIik7Ci0gICAgICAgIGxhYmVsRWxlbWVudC5jbGFzc05hbWUgPSAic291cmNlLWZy
YW1lLWJyZWFrcG9pbnQtbWVzc2FnZSI7Ci0gICAgICAgIGxhYmVsRWxlbWVudC5odG1sRm9yID0g
InNvdXJjZS1mcmFtZS1icmVha3BvaW50LWNvbmRpdGlvbiI7Ci0gICAgICAgIGxhYmVsRWxlbWVu
dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIlRoZSBicmVha3BvaW50IG9uIGxpbmUgJWQgd2lsbCBzdG9wIG9ubHkgaWYgdGhpcyBleHBy
ZXNzaW9uIGlzIHRydWU6IiwgbGluZU51bWJlcikpKTsKLSAgICAgICAgY29uZGl0aW9uRWxlbWVu
dC5hcHBlbmRDaGlsZChsYWJlbEVsZW1lbnQpOwotCi0gICAgICAgIHZhciBlZGl0b3JFbGVtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAgICAgZWRpdG9yRWxlbWVu
dC5pZCA9ICJzb3VyY2UtZnJhbWUtYnJlYWtwb2ludC1jb25kaXRpb24iOwotICAgICAgICBlZGl0
b3JFbGVtZW50LmNsYXNzTmFtZSA9ICJtb25vc3BhY2UiOwotICAgICAgICBlZGl0b3JFbGVtZW50
LnR5cGUgPSAidGV4dCI7Ci0gICAgICAgIGNvbmRpdGlvbkVsZW1lbnQuYXBwZW5kQ2hpbGQoZWRp
dG9yRWxlbWVudCk7Ci0gICAgICAgIHRoaXMuX2NvbmRpdGlvbkVkaXRvckVsZW1lbnQgPSBlZGl0
b3JFbGVtZW50OwotCi0gICAgICAgIHJldHVybiBjb25kaXRpb25FbGVtZW50OwogICAgIH0sCiAK
ICAgICBpbmhlcml0U2Nyb2xsUG9zaXRpb25zOiBmdW5jdGlvbihzb3VyY2VGcmFtZSkKQEAgLTcz
Nyw3ICs1MDcsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogCiAg
ICAgY2FuRWRpdFNvdXJjZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
X2RlbGVnYXRlLmNhbkVkaXRTY3JpcHRTb3VyY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0sCiAKICAgICBzdGFydEVkaXRpbmc6IGZ1bmN0aW9uKCkKQEAgLTc0OCw3ICs1MTgsNyBA
QCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICBpZiAodGhp
cy5fY29tbWl0RWRpdGluZ0luUHJvZ3Jlc3MpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICAgICAgdGhpcy5fc2V0UmVhZE9ubHkoZmFsc2UpOworICAgICAgICB0aGlzLnNldFJlYWRP
bmx5KGZhbHNlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSwKIApAQCAtNzU2LDUzICs1
MjYsMzggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICB7CiAg
ICAgICAgIGlmICghdGhpcy5fdmlld2VyU3RhdGUpIHsKICAgICAgICAgICAgIC8vIE5vIGVkaXRp
bmcgd2FzIGFjdHVhbGx5IGRvbmUuCi0gICAgICAgICAgICB0aGlzLl9zZXRSZWFkT25seSh0cnVl
KTsKKyAgICAgICAgICAgIHRoaXMuc2V0UmVhZE9ubHkodHJ1ZSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAotICAgICAgICBmdW5jdGlvbiBkaWRFZGl0Q29udGVudChlcnJvcikK
LSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5fY29tbWl0RWRpdGluZ0luUHJvZ3Jlc3MgPSBm
YWxzZTsKLSAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIucmVhZE9ubHkgPSBmYWxzZTsKLQot
ICAgICAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVycm9yLm1lc3Nh
Z2UpCi0gICAgICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5sb2coZXJyb3IubWVzc2FnZSwg
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvciwgdHJ1ZSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIg
bmV3QnJlYWtwb2ludHMgPSB7fTsKLSAgICAgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgaW4g
dGhpcy5fYnJlYWtwb2ludHMpIHsKLSAgICAgICAgICAgICAgICBuZXdCcmVha3BvaW50c1tsaW5l
TnVtYmVyXSA9IHRoaXMuX2JyZWFrcG9pbnRzW2xpbmVOdW1iZXJdOwotICAgICAgICAgICAgICAg
IHRoaXMucmVtb3ZlQnJlYWtwb2ludChOdW1iZXIobGluZU51bWJlcikpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBmb3IgKHZhciBsaW5lTnVtYmVyIGluIHRoaXMuX3ZpZXdlclN0YXRl
LmJyZWFrcG9pbnRzKQotICAgICAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLnJlbW92ZUJyZWFr
cG9pbnQoTnVtYmVyKGxpbmVOdW1iZXIpKTsKLQotICAgICAgICAgICAgZm9yICh2YXIgbGluZU51
bWJlciBpbiBuZXdCcmVha3BvaW50cykgewotICAgICAgICAgICAgICAgIHZhciBicmVha3BvaW50
ID0gbmV3QnJlYWtwb2ludHNbbGluZU51bWJlcl07Ci0gICAgICAgICAgICAgICAgdGhpcy5fZGVs
ZWdhdGUuc2V0QnJlYWtwb2ludChOdW1iZXIobGluZU51bWJlciksIGJyZWFrcG9pbnQuY29uZGl0
aW9uLCBicmVha3BvaW50LmVuYWJsZWQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBk
ZWxldGUgdGhpcy5fdmlld2VyU3RhdGU7Ci0gICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5zZXRT
Y3JpcHRTb3VyY2VJc0JlaW5nRWRpdGVkKGZhbHNlKTsKLSAgICAgICAgfQogICAgICAgICB0aGlz
Ll9jb21taXRFZGl0aW5nSW5Qcm9ncmVzcyA9IHRydWU7CiAgICAgICAgIHRoaXMuX3RleHRWaWV3
ZXIucmVhZE9ubHkgPSB0cnVlOwogICAgICAgICB0aGlzLl9lZGl0QnV0dG9uLnRvZ2dsZWQgPSBm
YWxzZTsKLSAgICAgICAgdGhpcy5lZGl0Q29udGVudCh0aGlzLl90ZXh0TW9kZWwudGV4dCwgZGlk
RWRpdENvbnRlbnQuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuZWRpdENvbnRlbnQodGhpcy5f
dGV4dE1vZGVsLnRleHQsIHRoaXMuZGlkRWRpdENvbnRlbnQuYmluZCh0aGlzKSk7CisgICAgfSwK
KworICAgIGRpZEVkaXRDb250ZW50OiBmdW5jdGlvbihlcnJvcikKKyAgICB7CisgICAgICAgIHRo
aXMuX2NvbW1pdEVkaXRpbmdJblByb2dyZXNzID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3RleHRW
aWV3ZXIucmVhZE9ubHkgPSBmYWxzZTsKKworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAg
ICAgIGlmIChlcnJvci5tZXNzYWdlKQorICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5sb2co
ZXJyb3IubWVzc2FnZSwgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5F
cnJvciwgdHJ1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBk
ZWxldGUgdGhpcy5fdmlld2VyU3RhdGU7CiAgICAgfSwKIAogICAgIGVkaXRDb250ZW50OiBmdW5j
dGlvbihuZXdDb250ZW50LCBjYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHRoaXMuX2RlbGVnYXRl
LnNldFNjcmlwdFNvdXJjZShuZXdDb250ZW50LCBjYWxsYmFjayk7CiAgICAgfSwKIAogICAgIGNh
bmNlbEVkaXRpbmc6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHRoaXMuX3Jlc3RvcmVWaWV3
ZXJTdGF0ZSgpOwotICAgICAgICB0aGlzLl9zZXRSZWFkT25seSh0cnVlKTsKKyAgICAgICAgdGhp
cy5zZXRSZWFkT25seSh0cnVlKTsKICAgICB9LAogCiAgICAgZ2V0IHJlYWRPbmx5KCkKQEAgLTgx
MCwzMCArNTY1LDEyIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIHJldHVybiB0aGlzLl90ZXh0Vmlld2VyLnJlYWRPbmx5OwogICAgIH0sCiAKLSAgICBf
c2V0UmVhZE9ubHk6IGZ1bmN0aW9uKHJlYWRPbmx5KQorICAgIHNldFJlYWRPbmx5OiBmdW5jdGlv
bihyZWFkT25seSkKICAgICB7Ci0gICAgICAgIGlmICghcmVhZE9ubHkgJiYgdGhpcy5wb3BvdmVy
SGVscGVyKQotICAgICAgICAgICAgdGhpcy5wb3BvdmVySGVscGVyLmhpZGVQb3BvdmVyKCk7Ci0K
ICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZWFkT25seSA9IHJlYWRPbmx5OwogICAgICAgICB0
aGlzLl9lZGl0QnV0dG9uLnRvZ2dsZWQgPSAhcmVhZE9ubHk7CiAgICAgICAgIFdlYkluc3BlY3Rv
ci5tYXJrQmVpbmdFZGl0ZWQodGhpcy5fdGV4dFZpZXdlci5lbGVtZW50LCAhcmVhZE9ubHkpOwot
ICAgICAgICBpZiAocmVhZE9ubHkpCi0gICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5zZXRTY3Jp
cHRTb3VyY2VJc0JlaW5nRWRpdGVkKGZhbHNlKTsKLSAgICB9LAotCi0gICAgY29udGVudENoYW5n
ZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fY29udGVudFJlcXVlc3Rl
ZCB8fCAhdGhpcy5fdGV4dFZpZXdlci5yZWFkT25seSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgdGhpcy5fZGVsZWdhdGUucmVxdWVzdENvbnRlbnQodGhpcy5faW5pdGlhbGl6ZVRleHRW
aWV3ZXIuYmluZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIHNob3VsZFNob3dQb3BvdmVyOiBmdW5j
dGlvbihlbGVtZW50KSB7IH0sCi0KLSAgICBvblNob3dQb3BvdmVyOiBmdW5jdGlvbihlbGVtZW50
LCBzaG93Q2FsbGJhY2spIHsgfSwKLQotICAgIG9uSGlkZVBvcG92ZXI6IGZ1bmN0aW9uKCkgeyB9
LAorICAgIH0KIH0KIAogV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fX3Byb3Rv
X18gPSBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGU7CkBAIC04OTEsNDAgKzYyOCwzIEBAIFdl
Ykluc3BlY3Rvci5UZXh0Vmlld2VyRGVsZWdhdGVGb3JTb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7
CiB9CiAKIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyRGVsZWdhdGVGb3JTb3VyY2VGcmFtZS5wcm90
b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXJEZWxlZ2F0ZS5wcm90b3R5
cGU7Ci0KLQotLyoqCi0gKiBAaW50ZXJmYWNlCi0gKi8KLVdlYkluc3BlY3Rvci5Tb3VyY2VGcmFt
ZURlbGVnYXRlID0gZnVuY3Rpb24oKQotewotfQotCi1XZWJJbnNwZWN0b3IuU291cmNlRnJhbWVE
ZWxlZ2F0ZS5wcm90b3R5cGUgPSB7Ci0gICAgcmVxdWVzdENvbnRlbnQ6IGZ1bmN0aW9uKGNhbGxi
YWNrKSB7IH0sCi0KLSAgICBzZXRCcmVha3BvaW50OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb25k
aXRpb24sIGVuYWJsZWQpIHsgfSwKLQotICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxp
bmVOdW1iZXIpIHsgfSwKLQotICAgIHVwZGF0ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmVOdW1i
ZXIsIGNvbmRpdGlvbiwgZW5hYmxlZCkgeyB9LAotCi0gICAgZmluZEJyZWFrcG9pbnQ6IGZ1bmN0
aW9uKGxpbmVOdW1iZXIpIHsgfSwKLQotICAgIGNvbnRpbnVlVG9MaW5lOiBmdW5jdGlvbihsaW5l
TnVtYmVyKSB7IH0sCi0KLSAgICBjYW5FZGl0U2NyaXB0U291cmNlOiBmdW5jdGlvbigpIHsgcmV0
dXJuIGZhbHNlOyB9LAotCi0gICAgc2V0U2NyaXB0U291cmNlOiBmdW5jdGlvbih0ZXh0LCBjYWxs
YmFjaykgeyB9LAotCi0gICAgc2V0U2NyaXB0U291cmNlSXNCZWluZ0VkaXRlZDogZnVuY3Rpb24o
aW5FZGl0TW9kZSkgeyB9LAotCi0gICAgc3VnZ2VzdGVkRmlsZU5hbWU6IGZ1bmN0aW9uKCkgeyB9
LAotCi0gICAgYWRkVG9XYXRjaDogZnVuY3Rpb24oKSB7IH0KLX0KLQotLyoqCi0gKiBEZWZhdWx0
IGltcGxlbWVudGF0aW9uLgotICovCi1XZWJJbnNwZWN0b3IuU291cmNlRnJhbWVEZWxlZ2F0ZS5z
dHViID0gT2JqZWN0LmNyZWF0ZShXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90
b3R5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuaHRtbCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmh0bWwKaW5kZXggNzQwYWEwZC4uN2VlNzI5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCkBAIC0xMDksOCArMTA5LDggQEAg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJUZXh0Vmll
d2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3Jj
PSJTb3VyY2VGcmFtZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIHNyYz0iUmVzb3VyY2VWaWV3LmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSJTY3JpcHRzUGFuZWwuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkphdmFTY3JpcHRTb3VyY2VGcmFtZS5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2Ny
aXB0c1BhbmVsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSJSZXNvdXJjZXNQYW5lbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iUHJvZmlsZXNQYW5lbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQ29uc29sZVBhbmVsLmpzIj48L3Njcmlw
dD4K
</data>
<flag name="commit-queue"
          id="110819"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112700</attachid>
            <date>2011-10-27 10:15:56 -0700</date>
            <delta_ts>2011-11-07 02:07:57 -0800</delta_ts>
            <desc>patch (fixed test)</desc>
            <filename>jssourceframe-refactoring.diff</filename>
            <type>text/plain</type>
            <size>48410</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9zb3VyY2UtZnJhbWUu
aHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9zb3VyY2UtZnJhbWUuaHRtbApp
bmRleCA3Y2E3MWY5Li4xMmUwMmYyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
ZGVidWdnZXIvc291cmNlLWZyYW1lLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Rl
YnVnZ2VyL3NvdXJjZS1mcmFtZS5odG1sCkBAIC0yMCw3ICsyMCw3IEBAIGZ1bmN0aW9uIHRlc3Qo
KQogICAgICAgICAgICAgZnVuY3Rpb24gZGlkU2hvd1NjcmlwdFNvdXJjZShzb3VyY2VGcmFtZSkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgi
U2NyaXB0IHNvdXJjZSB3YXMgc2hvd24uIik7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVz
dC5hZGRTbmlmZmVyKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUsICJhZGRCcmVh
a3BvaW50IiwgZGlkQWRkQnJlYWtwb2ludCk7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVz
dC5hZGRTbmlmZmVyKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBl
LCAiYWRkQnJlYWtwb2ludCIsIGRpZEFkZEJyZWFrcG9pbnQpOwogICAgICAgICAgICAgICAgIElu
c3BlY3RvclRlc3Quc2V0QnJlYWtwb2ludChzb3VyY2VGcmFtZSwgMTcsICIiLCB0cnVlKTsKICAg
ICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGI1MjEzODMuLmJjNzUxNDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw5NSBAQAorMjAxMS0xMC0yNiAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtyZWZhY3RvcmluZ10gZ2V0IEpT
LXNwZWNpZmljIG1ldGhvZHMgb3V0IG9mIFNvdXJjZUZyYW1lCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg4NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYXMgdGhlcmUncyBubyBu
ZXcgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSmF2YVNj
cmlwdFNvdXJjZUZyYW1lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3Vy
Y2VGcmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnBy
b3RvdHlwZS53aWxsSGlkZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJj
ZUZyYW1lLnByb3RvdHlwZS5yZXF1ZXN0Q29udGVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5jYW5FZGl0U291cmNlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLnN1Z2dlc3RlZEZp
bGVOYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJv
dG90eXBlLmVkaXRDb250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291
cmNlRnJhbWUucHJvdG90eXBlLmNvbnRlbnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLnNldFJlYWRvbmx5KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLnBvcHVsYXRlTGlu
ZUd1dHRlckNvbnRleHRNZW51LmFkZENvbmRpdGlvbmFsQnJlYWtwb2ludC5kaWRFZGl0QnJlYWtw
b2ludENvbmRpdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZy
YW1lLnByb3RvdHlwZS5wb3B1bGF0ZUxpbmVHdXR0ZXJDb250ZXh0TWVudS4pOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUucG9wdWxhdGVMaW5l
R3V0dGVyQ29udGV4dE1lbnUuZWxzZS5lZGl0QnJlYWtwb2ludENvbmRpdGlvbi5kaWRFZGl0QnJl
YWtwb2ludENvbmRpdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJj
ZUZyYW1lLnByb3RvdHlwZS5wb3B1bGF0ZUxpbmVHdXR0ZXJDb250ZXh0TWVudS5lbHNlKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLnBvcHVs
YXRlTGluZUd1dHRlckNvbnRleHRNZW51KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2Ny
aXB0U291cmNlRnJhbWUucHJvdG90eXBlLnBvcHVsYXRlVGV4dEFyZWFDb250ZXh0TWVudSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5hZnRl
clRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJh
bWUucHJvdG90eXBlLmJlZm9yZVRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5K
YXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLmNhbmNlbEVkaXRpbmcpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUuZGlkRWRpdENvbnRl
bnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5
cGUuX2dldFBvcG92ZXJBbmNob3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRT
b3VyY2VGcmFtZS5wcm90b3R5cGUuX29uU2hvd1BvcG92ZXIuc2hvd09iamVjdFBvcG92ZXIpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUuX29u
U2hvd1BvcG92ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFt
ZS5wcm90b3R5cGUuX29uSGlkZVBvcG92ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFT
Y3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUuYWRkQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5yZW1vdmVCcmVha3BvaW50
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBl
Ll9tb3VzZURvd24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFt
ZS5wcm90b3R5cGUuX2VkaXRCcmVha3BvaW50Q29uZGl0aW9uLmZpbmlzaEVkaXRpbmcpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUuX2VkaXRC
cmVha3BvaW50Q29uZGl0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291
cmNlRnJhbWUucHJvdG90eXBlLl9jcmVhdGVDb25kaXRpb25FbGVtZW50KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLnNldEV4ZWN1dGlvbkxp
bmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5
cGUuY2xlYXJFeGVjdXRpb25MaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0
U291cmNlRnJhbWUucHJvdG90eXBlLl9saW5lTnVtYmVyQWZ0ZXJFZGl0aW5nKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLl9vblRleHRWaWV3
ZXJDb250ZW50TG9hZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNl
RnJhbWVEZWxlZ2F0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZy
YW1lRGVsZWdhdGUucHJvdG90eXBlLnJlcXVlc3RDb250ZW50KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGUuc2V0QnJlYWtwb2lu
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lRGVsZWdhdGUu
cHJvdG90eXBlLnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFT
Y3JpcHRTb3VyY2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZS51cGRhdGVCcmVha3BvaW50KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90b3R5
cGUuZmluZEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3Vy
Y2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZS5jb250aW51ZVRvTGluZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lRGVsZWdhdGUucHJvdG90eXBlLmNhbkVkaXRT
Y3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFt
ZURlbGVnYXRlLnByb3RvdHlwZS5zZXRTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZS5zZXRTY3JpcHRTb3Vy
Y2VJc0JlaW5nRWRpdGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNl
RnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGUuc3VnZ2VzdGVkRmlsZU5hbWUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZS5hZGRUb1dh
dGNoKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlVmlldy5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNvdXJjZUZyYW1lKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZURlbGVnYXRlRm9yU2NyaXB0c1BhbmVsKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUud2lsbEhp
ZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5nZXQgdGV4
dFZpZXdlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLnJl
cXVlc3RDb250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5
cGUuX3NhdmVWaWV3ZXJTdGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUu
cHJvdG90eXBlLl9yZXN0b3JlVmlld2VyU3RhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLnByb3RvdHlwZS5iZWZvcmVUZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmFmdGVyVGV4dENoYW5nZWQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5faW5pdGlhbGl6ZVRleHRWaWV3ZXIp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5wb3B1bGF0ZUxp
bmVHdXR0ZXJDb250ZXh0TWVudSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUu
cHJvdG90eXBlLnN1Z2dlc3RlZEZpbGVOYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUuY2FuRWRpdFNvdXJjZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlLnN0YXJ0RWRpdGluZyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmNvbW1pdEVkaXRpbmcpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5kaWRFZGl0Q29udGVudCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmVkaXRDb250ZW50KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuY2FuY2VsRWRpdGluZyk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLnNldFJlYWRPbmx5KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sOgorCisyMDExLTEwLTI1
ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogSlMgZXhjZXB0aW9uIGluIEphdmFTY3JpcHRTb3VyY2VGcmFtZS5vblNob3dQb3Bv
dmVyL3Nob3dPYmplY3RQb3BvdmVyKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcwODEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ2hlY2sgaWYgaGlnaGxpZ2h0ZWQgZWxlbWVudCBpcyBwcmVzZW50IHdo
aWxlIGRpc3BsYXlpbmcgb2JqZWN0IHBvcG92ZXIuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0phdmFTY3JpcHRTb3VyY2VGcmFtZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5K
YXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLm9uU2hvd1BvcG92ZXIuc2hvd09iamVjdFBv
cG92ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90
b3R5cGUub25TaG93UG9wb3Zlcik6CisKIDIwMTEtMTAtMjcgIEFuZHJleSBLb3N5YWtvdiAgPGNh
c2VxQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbRXh0ZW5zaW9ucyBB
UEldIGFkZCBpZ25vcmVDYWNoZSBmbGFnIHRvIG9wdGlvbnMgb2YgaW5zcGVjdGVkV2luZG93LnJl
bG9hZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ph
dmFTY3JpcHRTb3VyY2VGcmFtZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSmF2YVNjcmlwdFNvdXJjZUZyYW1lLmpzCmluZGV4IGI0YTEyOTEuLmMyNzUxYjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSmF2YVNjcmlwdFNvdXJj
ZUZyYW1lLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSmF2YVNj
cmlwdFNvdXJjZUZyYW1lLmpzCkBAIC0zMSwyNCArMzEsMjE5IEBACiAvKioKICAqIEBjb25zdHJ1
Y3RvcgogICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZX0KLSAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lRGVsZWdhdGV9IGRlbGVnYXRlCisgKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWVEZWxlZ2F0ZX0gZGVsZWdhdGUKICAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWx9IG1vZGVsCiAgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQogICovCiBXZWJJ
bnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lID0gZnVuY3Rpb24oZGVsZWdhdGUsIG1vZGVs
LCB1aVNvdXJjZUNvZGUpCiB7Ci0gICAgLy8gRklYTUU6IG1vdmUgYWxsIFNvdXJjZUZyYW1lIG1l
dGhvZHMgcmVsYXRlZCB0byBKYXZhU2NyaXB0IGRlYnVnZ2luZyBoZXJlIGFuZAotICAgIC8vIGdl
dCByaWQgb2YgU291cmNlRnJhbWUuX2RlbGVnYXRlLgotICAgIFdlYkluc3BlY3Rvci5Tb3VyY2VG
cmFtZS5jYWxsKHRoaXMsIGRlbGVnYXRlLCB1aVNvdXJjZUNvZGUudXJsKTsKKyAgICBXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUuY2FsbCh0aGlzLCB1aVNvdXJjZUNvZGUudXJsKTsKKworICAgIHRo
aXMuX2RlbGVnYXRlID0gZGVsZWdhdGU7CisgICAgdGhpcy5fcG9wb3ZlckhlbHBlciA9IG5ldyBX
ZWJJbnNwZWN0b3IuT2JqZWN0UG9wb3ZlckhlbHBlcih0aGlzLnRleHRWaWV3ZXIuZWxlbWVudCwK
KyAgICAgICAgICAgIHRoaXMuX2dldFBvcG92ZXJBbmNob3IuYmluZCh0aGlzKSwgdGhpcy5fb25T
aG93UG9wb3Zlci5iaW5kKHRoaXMpLCB0aGlzLl9vbkhpZGVQb3BvdmVyLmJpbmQodGhpcyksIHRy
dWUpOworCisgICAgdGhpcy50ZXh0Vmlld2VyLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91
c2Vkb3duIiwgdGhpcy5fb25Nb3VzZURvd24uYmluZCh0aGlzKSwgdHJ1ZSk7CisgICAgdWlTb3Vy
Y2VDb2RlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZS5FdmVudHMu
Q29udGVudENoYW5nZWQsIHRoaXMuX29uQ29udGVudENoYW5nZWQsIHRoaXMpOworICAgIHRoaXMu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUuRXZlbnRzLkxvYWRlZCwg
dGhpcy5fb25UZXh0Vmlld2VyQ29udGVudExvYWRlZCwgdGhpcyk7CiAKICAgICB0aGlzLl9tb2Rl
bCA9IG1vZGVsOwogICAgIHRoaXMuX3BvcG92ZXJPYmplY3RHcm91cCA9ICJwb3BvdmVyIjsKLQot
ICAgIHVpU291cmNlQ29kZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5VSVNvdXJjZUNv
ZGUuRXZlbnRzLkNvbnRlbnRDaGFuZ2VkLCB0aGlzLmNvbnRlbnRDaGFuZ2VkLCB0aGlzKTsKKyAg
ICB0aGlzLl9icmVha3BvaW50cyA9IHt9OwogfQogCiBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNv
dXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKLSAgICBzaG91bGRTaG93UG9wb3ZlcjogZnVuY3Rpb24o
ZWxlbWVudCkKKyAgICAvLyBWaWV3IGV2ZW50cworICAgIHdpbGxIaWRlOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLndpbGxIaWRl
LmNhbGwodGhpcyk7CisgICAgICAgIGlmICh0aGlzLl9wb3BvdmVySGVscGVyKQorICAgICAgICAg
ICAgdGhpcy5fcG9wb3ZlckhlbHBlci5oaWRlUG9wb3ZlcigpOworICAgIH0sCisKKyAgICAvLyBT
b3VyY2VGcmFtZSBvdmVycmlkZXMKKyAgICByZXF1ZXN0Q29udGVudDogZnVuY3Rpb24oY2FsbGJh
Y2spCisgICAgeworICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5yZXF1ZXN0Q29udGVudChjYWxsYmFj
ayk7CisgICAgfSwKKworICAgIGNhbkVkaXRTb3VyY2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZS5jYW5FZGl0U2NyaXB0U291cmNlKCk7CisgICAgfSwK
KworICAgIHN1Z2dlc3RlZEZpbGVOYW1lOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5fZGVsZWdhdGUuc3VnZ2VzdGVkRmlsZU5hbWUoKTsKKyAgICB9LAorCisgICAgZWRp
dENvbnRlbnQ6IGZ1bmN0aW9uKG5ld0NvbnRlbnQsIGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAg
dGhpcy5fZGVsZWdhdGUuc2V0U2NyaXB0U291cmNlKG5ld0NvbnRlbnQsIGNhbGxiYWNrKTsKKyAg
ICB9LAorCisgICAgX29uQ29udGVudENoYW5nZWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IGlmICghdGhpcy50ZXh0Vmlld2VyLnJlYWRPbmx5KQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB0aGlzLl9kZWxlZ2F0ZS5yZXF1ZXN0Q29udGVudCh0aGlzLnNldENvbnRlbnQuYmluZCh0
aGlzKSk7CisgICAgfSwKKworICAgIHNldFJlYWRPbmx5OiBmdW5jdGlvbihyZWFkT25seSkKKyAg
ICB7CisgICAgICAgIGlmICghcmVhZE9ubHkgJiYgdGhpcy5fcG9wb3ZlckhlbHBlcikKKyAgICAg
ICAgICAgIHRoaXMuX3BvcG92ZXJIZWxwZXIuaGlkZVBvcG92ZXIoKTsKKyAgICAgICAgV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5zZXRSZWFkT25seS5jYWxsKHRoaXMsIHJlYWRP
bmx5KTsKKyAgICAgICAgaWYgKHJlYWRPbmx5KQorICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUu
c2V0U2NyaXB0U291cmNlSXNCZWluZ0VkaXRlZChmYWxzZSk7CisgICAgfSwKKworICAgIHBvcHVs
YXRlTGluZUd1dHRlckNvbnRleHRNZW51OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb250ZXh0TWVu
dSkKKyAgICB7CisgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiQ29udGludWUg
dG8gaGVyZSIgOiAiQ29udGludWUgdG8gSGVyZSIpLCB0aGlzLl9kZWxlZ2F0ZS5jb250aW51ZVRv
TGluZS5iaW5kKHRoaXMuX2RlbGVnYXRlLCBsaW5lTnVtYmVyKSk7CisKKyAgICAgICAgdmFyIGJy
ZWFrcG9pbnQgPSB0aGlzLl9kZWxlZ2F0ZS5maW5kQnJlYWtwb2ludChsaW5lTnVtYmVyKTsKKyAg
ICAgICAgaWYgKCFicmVha3BvaW50KSB7CisgICAgICAgICAgICAvLyBUaGlzIHJvdyBkb2Vzbid0
IGhhdmUgYSBicmVha3BvaW50OiBXZSB3YW50IHRvIHNob3cgQWRkIEJyZWFrcG9pbnQgYW5kIEFk
ZCBhbmQgRWRpdCBCcmVha3BvaW50LgorICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRl
bShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRs
ZXMoKSA/ICJBZGQgYnJlYWtwb2ludCIgOiAiQWRkIEJyZWFrcG9pbnQiKSwgdGhpcy5fZGVsZWdh
dGUuc2V0QnJlYWtwb2ludC5iaW5kKHRoaXMuX2RlbGVnYXRlLCBsaW5lTnVtYmVyLCAiIiwgdHJ1
ZSkpOworCisgICAgICAgICAgICBmdW5jdGlvbiBhZGRDb25kaXRpb25hbEJyZWFrcG9pbnQoKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRoaXMuYWRkQnJlYWtwb2ludChsaW5lTnVt
YmVyLCB0cnVlLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBkaWRFZGl0
QnJlYWtwb2ludENvbmRpdGlvbihjb21taXR0ZWQsIGNvbmRpdGlvbikKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQnJlYWtwb2ludChsaW5lTnVtYmVy
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1pdHRlZCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX2RlbGVnYXRlLnNldEJyZWFrcG9pbnQobGluZU51bWJlciwgY29uZGl0aW9u
LCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5fZWRpdEJy
ZWFrcG9pbnRDb25kaXRpb24obGluZU51bWJlciwgIiIsIGRpZEVkaXRCcmVha3BvaW50Q29uZGl0
aW9uLmJpbmQodGhpcykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGV4dE1lbnUu
YXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2Fz
ZU1lbnVUaXRsZXMoKSA/ICJBZGQgY29uZGl0aW9uYWwgYnJlYWtwb2ludOKApiIgOiAiQWRkIENv
bmRpdGlvbmFsIEJyZWFrcG9pbnTigKYiKSwgYWRkQ29uZGl0aW9uYWxCcmVha3BvaW50LmJpbmQo
dGhpcykpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVGhpcyByb3cgaGFzIGEg
YnJlYWtwb2ludCwgd2Ugd2FudCB0byBzaG93IGVkaXQgYW5kIHJlbW92ZSBicmVha3BvaW50LCBh
bmQgZWl0aGVyIGRpc2FibGUgb3IgZW5hYmxlLgorICAgICAgICAgICAgY29udGV4dE1lbnUuYXBw
ZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1l
bnVUaXRsZXMoKSA/ICJSZW1vdmUgYnJlYWtwb2ludCIgOiAiUmVtb3ZlIEJyZWFrcG9pbnQiKSwg
dGhpcy5fZGVsZWdhdGUucmVtb3ZlQnJlYWtwb2ludC5iaW5kKHRoaXMuX2RlbGVnYXRlLCBsaW5l
TnVtYmVyKSk7CisgICAgICAgICAgICBmdW5jdGlvbiBlZGl0QnJlYWtwb2ludENvbmRpdGlvbigp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGlkRWRpdEJyZWFrcG9p
bnRDb25kaXRpb24oY29tbWl0dGVkLCBjb25kaXRpb24pCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoY29tbWl0dGVkKQorICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5fZGVsZWdhdGUudXBkYXRlQnJlYWtwb2ludChsaW5lTnVtYmVyLCBjb25kaXRpb24sIGJy
ZWFrcG9pbnQuZW5hYmxlZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRo
aXMuX2VkaXRCcmVha3BvaW50Q29uZGl0aW9uKGxpbmVOdW1iZXIsIGJyZWFrcG9pbnQuY29uZGl0
aW9uLCBkaWRFZGl0QnJlYWtwb2ludENvbmRpdGlvbi5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVzKCkgPyAiRWRpdCBicmVha3Bv
aW504oCmIiA6ICJFZGl0IEJyZWFrcG9pbnTigKYiKSwgZWRpdEJyZWFrcG9pbnRDb25kaXRpb24u
YmluZCh0aGlzKSk7CisgICAgICAgICAgICBmdW5jdGlvbiBzZXRCcmVha3BvaW50RW5hYmxlZChl
bmFibGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLnVw
ZGF0ZUJyZWFrcG9pbnQobGluZU51bWJlciwgYnJlYWtwb2ludC5jb25kaXRpb24sIGVuYWJsZWQp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuZW5hYmxlZCkKKyAg
ICAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmlu
ZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8gIkRpc2FibGUgYnJlYWtw
b2ludCIgOiAiRGlzYWJsZSBCcmVha3BvaW50IiksIHNldEJyZWFrcG9pbnRFbmFibGVkLmJpbmQo
dGhpcywgZmFsc2UpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb250ZXh0
TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZyhXZWJJbnNwZWN0b3IudXNlTG93
ZXJDYXNlTWVudVRpdGxlcygpID8gIkVuYWJsZSBicmVha3BvaW50IiA6ICJFbmFibGUgQnJlYWtw
b2ludCIpLCBzZXRCcmVha3BvaW50RW5hYmxlZC5iaW5kKHRoaXMsIHRydWUpKTsKKyAgICAgICAg
fQorICAgIH0sCisKKyAgICBwb3B1bGF0ZVRleHRBcmVhQ29udGV4dE1lbnU6IGZ1bmN0aW9uKGNv
bnRleHRNZW51KQorICAgIHsKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxl
Y3Rpb24oKTsKKyAgICAgICAgaWYgKHNlbGVjdGlvbi50eXBlICE9PSAiUmFuZ2UiIHx8IHNlbGVj
dGlvbi5pc0NvbGxhcHNlZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY29udGV4dE1l
bnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2Vy
Q2FzZU1lbnVUaXRsZXMoKSA/ICJBZGQgdG8gd2F0Y2giIDogIkFkZCB0byBXYXRjaCIpLCB0aGlz
Ll9kZWxlZ2F0ZS5hZGRUb1dhdGNoLmJpbmQodGhpcy5fZGVsZWdhdGUsIHNlbGVjdGlvbi50b1N0
cmluZygpKSk7CisgICAgfSwKKworICAgIGFmdGVyVGV4dENoYW5nZWQ6IGZ1bmN0aW9uKG9sZFJh
bmdlLCBuZXdSYW5nZSkKKyAgICB7CisgICAgICAgIGlmICghb2xkUmFuZ2UgfHwgIW5ld1Jhbmdl
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIEFkanVzdCBleGVjdXRpb24gbGlu
ZSBudW1iZXIuCisgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fZXhlY3V0aW9uTGluZU51bWJlciA9
PT0gIm51bWJlciIpIHsKKyAgICAgICAgICAgIHZhciBuZXdFeGVjdXRpb25MaW5lTnVtYmVyID0g
dGhpcy5fbGluZU51bWJlckFmdGVyRWRpdGluZyh0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyLCBv
bGRSYW5nZSwgbmV3UmFuZ2UpOworICAgICAgICAgICAgdGhpcy5jbGVhckV4ZWN1dGlvbkxpbmUo
KTsKKyAgICAgICAgICAgIHRoaXMuc2V0RXhlY3V0aW9uTGluZShuZXdFeGVjdXRpb25MaW5lTnVt
YmVyLCB0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFkanVzdCBicmVha3BvaW50cy4K
KyAgICAgICAgdmFyIG9sZEJyZWFrcG9pbnRzID0gdGhpcy5fYnJlYWtwb2ludHM7CisgICAgICAg
IHRoaXMuX2JyZWFrcG9pbnRzID0ge307CisgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgaW4g
b2xkQnJlYWtwb2ludHMpIHsKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBOdW1iZXIobGluZU51
bWJlcik7CisgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG9sZEJyZWFrcG9pbnRzW2xpbmVO
dW1iZXJdOworICAgICAgICAgICAgdmFyIG5ld0xpbmVOdW1iZXIgPSB0aGlzLl9saW5lTnVtYmVy
QWZ0ZXJFZGl0aW5nKGxpbmVOdW1iZXIsIG9sZFJhbmdlLCBuZXdSYW5nZSk7CisgICAgICAgICAg
ICBpZiAobGluZU51bWJlciA9PT0gbmV3TGluZU51bWJlcikKKyAgICAgICAgICAgICAgICB0aGlz
Ll9icmVha3BvaW50c1tsaW5lTnVtYmVyXSA9IGJyZWFrcG9pbnQ7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUJyZWFrcG9pbnQobGluZU51bWJlcik7Cisg
ICAgICAgICAgICAgICAgdGhpcy5hZGRCcmVha3BvaW50KG5ld0xpbmVOdW1iZXIsIGJyZWFrcG9p
bnQucmVzb2x2ZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uYWwsIGJyZWFrcG9pbnQuZW5hYmxlZCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorCisgICAgYmVmb3JlVGV4dENoYW5n
ZWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5famF2YVNjcmlwdFNvdXJj
ZUZyYW1lU3RhdGUpIHsKKyAgICAgICAgICAgIHRoaXMuX2phdmFTY3JpcHRTb3VyY2VGcmFtZVN0
YXRlID0geworICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkxpbmVOdW1iZXI6IHRoaXMuX2V4ZWN1
dGlvbkxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgYnJlYWtwb2ludHM6IHRoaXMuX2JyZWFr
cG9pbnRzCisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5zZXRTY3Jp
cHRTb3VyY2VJc0JlaW5nRWRpdGVkKHRydWUpOworICAgICAgICB9CisgICAgICAgIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuYmVmb3JlVGV4dENoYW5nZWQuY2FsbCh0aGlzKTsK
KyAgICB9LAorCisgICAgY2FuY2VsRWRpdGluZzogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5jYW5jZWxFZGl0aW5nLmNhbGwodGhp
cyk7CisgICAgICAgIAorICAgICAgICBpZiAoIXRoaXMuX2phdmFTY3JpcHRTb3VyY2VGcmFtZVN0
YXRlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh0eXBlb2YgdGhpcy5famF2
YVNjcmlwdFNvdXJjZUZyYW1lU3RhdGUuZXhlY3V0aW9uTGluZU51bWJlciA9PT0gIm51bWJlciIp
IHsKKyAgICAgICAgICAgIHRoaXMuY2xlYXJFeGVjdXRpb25MaW5lKCk7CisgICAgICAgICAgICB0
aGlzLnNldEV4ZWN1dGlvbkxpbmUodGhpcy5famF2YVNjcmlwdFNvdXJjZUZyYW1lU3RhdGUuZXhl
Y3V0aW9uTGluZU51bWJlcik7CisgICAgICAgIH0KKworICAgICAgICB2YXIgb2xkQnJlYWtwb2lu
dHMgPSB0aGlzLl9icmVha3BvaW50czsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMgPSB7fTsK
KyAgICAgICAgZm9yICh2YXIgbGluZU51bWJlciBpbiBvbGRCcmVha3BvaW50cykKKyAgICAgICAg
ICAgIHRoaXMucmVtb3ZlQnJlYWtwb2ludChOdW1iZXIobGluZU51bWJlcikpOworCisgICAgICAg
IHZhciBuZXdCcmVha3BvaW50cyA9IHRoaXMuX2phdmFTY3JpcHRTb3VyY2VGcmFtZVN0YXRlLmJy
ZWFrcG9pbnRzOworICAgICAgICBmb3IgKHZhciBsaW5lTnVtYmVyIGluIG5ld0JyZWFrcG9pbnRz
KSB7CisgICAgICAgICAgICBsaW5lTnVtYmVyID0gTnVtYmVyKGxpbmVOdW1iZXIpOworICAgICAg
ICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXdCcmVha3BvaW50c1tsaW5lTnVtYmVyXTsKKyAgICAg
ICAgICAgIHRoaXMuYWRkQnJlYWtwb2ludChsaW5lTnVtYmVyLCBicmVha3BvaW50LnJlc29sdmVk
LCBicmVha3BvaW50LmNvbmRpdGlvbmFsLCBicmVha3BvaW50LmVuYWJsZWQpOworICAgICAgICB9
CisKKyAgICAgICAgZGVsZXRlIHRoaXMuX2phdmFTY3JpcHRTb3VyY2VGcmFtZVN0YXRlOworICAg
IH0sCisKKyAgICBkaWRFZGl0Q29udGVudDogZnVuY3Rpb24oZXJyb3IpCisgICAgeworICAgICAg
ICBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmRpZEVkaXRDb250ZW50LmNhbGwo
dGhpcywgZXJyb3IpOworICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgdmFyIG5ld0JyZWFrcG9pbnRzID0ge307CisgICAgICAgIGZvciAodmFyIGxpbmVO
dW1iZXIgaW4gdGhpcy5fYnJlYWtwb2ludHMpIHsKKyAgICAgICAgICAgIG5ld0JyZWFrcG9pbnRz
W2xpbmVOdW1iZXJdID0gdGhpcy5fYnJlYWtwb2ludHNbbGluZU51bWJlcl07CisgICAgICAgICAg
ICB0aGlzLnJlbW92ZUJyZWFrcG9pbnQoTnVtYmVyKGxpbmVOdW1iZXIpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgaW4gdGhpcy5famF2YVNjcmlwdFNvdXJjZUZy
YW1lU3RhdGUuYnJlYWtwb2ludHMpCisgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5yZW1vdmVC
cmVha3BvaW50KE51bWJlcihsaW5lTnVtYmVyKSk7CisKKyAgICAgICAgZm9yICh2YXIgbGluZU51
bWJlciBpbiBuZXdCcmVha3BvaW50cykgeworICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBu
ZXdCcmVha3BvaW50c1tsaW5lTnVtYmVyXTsKKyAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLnNl
dEJyZWFrcG9pbnQoTnVtYmVyKGxpbmVOdW1iZXIpLCBicmVha3BvaW50LmNvbmRpdGlvbiwgYnJl
YWtwb2ludC5lbmFibGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2RlbGVnYXRlLnNl
dFNjcmlwdFNvdXJjZUlzQmVpbmdFZGl0ZWQoZmFsc2UpOworICAgICAgICBkZWxldGUgdGhpcy5f
amF2YVNjcmlwdFNvdXJjZUZyYW1lU3RhdGU7CisgICAgfSwKKworICAgIC8vIFBvcG92ZXIgY2Fs
bGJhY2tzCisgICAgX3Nob3VsZFNob3dQb3BvdmVyOiBmdW5jdGlvbihlbGVtZW50KQogICAgIHsK
ICAgICAgICAgaWYgKCF0aGlzLl9tb2RlbC5wYXVzZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC02MiwxMCArMjU3LDE3IEBAIFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJh
bWUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gZWxlbWVudC5oYXNTdHlsZUNsYXNzKCJ3
ZWJraXQtamF2YXNjcmlwdC1pZGVudCIpOwogICAgIH0sCiAKLSAgICBvblNob3dQb3BvdmVyOiBm
dW5jdGlvbihlbGVtZW50LCBzaG93Q2FsbGJhY2spCisgICAgX2dldFBvcG92ZXJBbmNob3I6IGZ1
bmN0aW9uKGVsZW1lbnQpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3Nob3VsZFNob3dQb3Bv
dmVyKGVsZW1lbnQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZWxlbWVu
dDsKKyAgICB9LAorCisgICAgX29uU2hvd1BvcG92ZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHNob3dD
YWxsYmFjaykKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5yZWFkT25seSkgewotICAgICAgICAg
ICAgdGhpcy5wb3BvdmVySGVscGVyLmhpZGVQb3BvdmVyKCk7CisgICAgICAgICAgICB0aGlzLl9w
b3BvdmVySGVscGVyLmhpZGVQb3BvdmVyKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgdGhpcy5faGlnaGxpZ2h0RWxlbWVudCA9IHRoaXMuX2hpZ2hsaWdodEV4cHJl
c3Npb24oZWxlbWVudCk7CkBAIC03Myw3ICsyNzUsNyBAQCBXZWJJbnNwZWN0b3IuSmF2YVNjcmlw
dFNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgZnVuY3Rpb24gc2hvd09iamVjdFBv
cG92ZXIocmVzdWx0LCB3YXNUaHJvd24pCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghdGhp
cy5fbW9kZWwucGF1c2VkKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVySGVscGVyLmhp
ZGVQb3BvdmVyKCk7CisgICAgICAgICAgICAgICAgdGhpcy5fcG9wb3ZlckhlbHBlci5oaWRlUG9w
b3ZlcigpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHNob3dDYWxsYmFjayhXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkKHJl
c3VsdCksIHdhc1Rocm93bik7CkBAIC04Niw3ICsyODgsNyBAQCBXZWJJbnNwZWN0b3IuSmF2YVNj
cmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgc2VsZWN0ZWRDYWxsRnJhbWUu
ZXZhbHVhdGUodGhpcy5faGlnaGxpZ2h0RWxlbWVudC50ZXh0Q29udGVudCwgdGhpcy5fcG9wb3Zl
ck9iamVjdEdyb3VwLCBmYWxzZSwgZmFsc2UsIHNob3dPYmplY3RQb3BvdmVyLmJpbmQodGhpcykp
OwogICAgIH0sCiAKLSAgICBvbkhpZGVQb3BvdmVyOiBmdW5jdGlvbigpCisgICAgX29uSGlkZVBv
cG92ZXI6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIC8vIFJlcGxhY2UgaGlnbGlnaHQgZWxl
bWVudCB3aXRoIGl0cyBjb250ZW50cyBpbnBsYWNlLgogICAgICAgICB2YXIgaGlnaGxpZ2h0RWxl
bWVudCA9IHRoaXMuX2hpZ2hsaWdodEVsZW1lbnQ7CkBAIC0xMjUsMTMgKzMyNywxNzcgQEAgV2Vi
SW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJl
dHVybiBjb250YWluZXI7CiAgICAgfSwKIAotICAgIHBvcHVsYXRlVGV4dEFyZWFDb250ZXh0TWVu
dTogZnVuY3Rpb24oY29udGV4dE1lbnUpCisgICAgYWRkQnJlYWtwb2ludDogZnVuY3Rpb24obGlu
ZU51bWJlciwgcmVzb2x2ZWQsIGNvbmRpdGlvbmFsLCBlbmFibGVkKQogICAgIHsKLSAgICAgICAg
dmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAgICAgICAgaWYgKHNlbGVj
dGlvbi50eXBlICE9PSAiUmFuZ2UiIHx8IHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkKKyAgICAgICAg
dGhpcy5fYnJlYWtwb2ludHNbbGluZU51bWJlcl0gPSB7CisgICAgICAgICAgICByZXNvbHZlZDog
cmVzb2x2ZWQsCisgICAgICAgICAgICBjb25kaXRpb25hbDogY29uZGl0aW9uYWwsCisgICAgICAg
ICAgICBlbmFibGVkOiBlbmFibGVkCisgICAgICAgIH07CisgICAgICAgIHRoaXMudGV4dFZpZXdl
ci5iZWdpblVwZGF0ZXMoKTsKKyAgICAgICAgdGhpcy50ZXh0Vmlld2VyLmFkZERlY29yYXRpb24o
bGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50Iik7CisgICAgICAgIGlmICghZW5hYmxlZCkK
KyAgICAgICAgICAgIHRoaXMudGV4dFZpZXdlci5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3
ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZCIpOworICAgICAgICBpZiAoY29uZGl0aW9uYWwpCisg
ICAgICAgICAgICB0aGlzLnRleHRWaWV3ZXIuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Vi
a2l0LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiKTsKKyAgICAgICAgdGhpcy50ZXh0Vmlld2VyLmVu
ZFVwZGF0ZXMoKTsKKyAgICB9LAorCisgICAgcmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rpb24obGlu
ZU51bWJlcikKKyAgICB7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50c1tsaW5lTnVt
YmVyXTsKKyAgICAgICAgdGhpcy50ZXh0Vmlld2VyLmJlZ2luVXBkYXRlcygpOworICAgICAgICB0
aGlzLnRleHRWaWV3ZXIucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFr
cG9pbnQiKTsKKyAgICAgICAgdGhpcy50ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24obGluZU51
bWJlciwgIndlYmtpdC1icmVha3BvaW50LWRpc2FibGVkIik7CisgICAgICAgIHRoaXMudGV4dFZp
ZXdlci5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1jb25k
aXRpb25hbCIpOworICAgICAgICB0aGlzLnRleHRWaWV3ZXIuZW5kVXBkYXRlcygpOworICAgIH0s
CisKKyAgICBfb25Nb3VzZURvd246IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYg
KGV2ZW50LmJ1dHRvbiAhPSAwIHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2
ZW50Lm1ldGFLZXkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNvbnRleHRNZW51LmFw
cGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VN
ZW51VGl0bGVzKCkgPyAiQWRkIHRvIHdhdGNoIiA6ICJBZGQgdG8gV2F0Y2giKSwgdGhpcy5fZGVs
ZWdhdGUuYWRkVG9XYXRjaC5iaW5kKHRoaXMuX2RlbGVnYXRlLCBzZWxlY3Rpb24udG9TdHJpbmco
KSkpOworICAgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNl
bGZXaXRoQ2xhc3MoIndlYmtpdC1saW5lLW51bWJlciIpOworICAgICAgICBpZiAoIXRhcmdldCkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSB0YXJnZXQubGlu
ZU51bWJlcjsKKworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2RlbGVnYXRlLmZpbmRC
cmVha3BvaW50KGxpbmVOdW1iZXIpOworICAgICAgICBpZiAoYnJlYWtwb2ludCkgeworICAgICAg
ICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KQorICAgICAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRl
LnVwZGF0ZUJyZWFrcG9pbnQobGluZU51bWJlciwgYnJlYWtwb2ludC5jb25kaXRpb24sICFicmVh
a3BvaW50LmVuYWJsZWQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRoaXMu
X2RlbGVnYXRlLnJlbW92ZUJyZWFrcG9pbnQobGluZU51bWJlcik7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUuc2V0QnJlYWtwb2ludChsaW5lTnVtYmVyLCAiIiwg
dHJ1ZSk7CisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgfSwKKworICAgIF9l
ZGl0QnJlYWtwb2ludENvbmRpdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgY29uZGl0aW9uLCBj
YWxsYmFjaykKKyAgICB7CisgICAgICAgIHRoaXMuX2NvbmRpdGlvbkVsZW1lbnQgPSB0aGlzLl9j
cmVhdGVDb25kaXRpb25FbGVtZW50KGxpbmVOdW1iZXIpOworICAgICAgICB0aGlzLnRleHRWaWV3
ZXIuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCB0aGlzLl9jb25kaXRpb25FbGVtZW50KTsKKwor
ICAgICAgICBmdW5jdGlvbiBmaW5pc2hFZGl0aW5nKGNvbW1pdHRlZCwgZWxlbWVudCwgbmV3VGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy50ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRp
b24obGluZU51bWJlciwgdGhpcy5fY29uZGl0aW9uRWxlbWVudCk7CisgICAgICAgICAgICBkZWxl
dGUgdGhpcy5fY29uZGl0aW9uRWRpdG9yRWxlbWVudDsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlz
Ll9jb25kaXRpb25FbGVtZW50OworICAgICAgICAgICAgY2FsbGJhY2soY29tbWl0dGVkLCBuZXdU
ZXh0KTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBjb25maWcgPSBuZXcgV2ViSW5zcGVjdG9y
LkVkaXRpbmdDb25maWcoZmluaXNoRWRpdGluZy5iaW5kKHRoaXMsIHRydWUpLCBmaW5pc2hFZGl0
aW5nLmJpbmQodGhpcywgZmFsc2UpKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGlu
Zyh0aGlzLl9jb25kaXRpb25FZGl0b3JFbGVtZW50LCBjb25maWcpOworICAgICAgICB0aGlzLl9j
b25kaXRpb25FZGl0b3JFbGVtZW50LnZhbHVlID0gY29uZGl0aW9uOworICAgICAgICB0aGlzLl9j
b25kaXRpb25FZGl0b3JFbGVtZW50LnNlbGVjdCgpOworICAgIH0sCisKKyAgICBfY3JlYXRlQ29u
ZGl0aW9uRWxlbWVudDogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIHZhciBj
b25kaXRpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAg
IGNvbmRpdGlvbkVsZW1lbnQuY2xhc3NOYW1lID0gInNvdXJjZS1mcmFtZS1icmVha3BvaW50LWNv
bmRpdGlvbiI7CisKKyAgICAgICAgdmFyIGxhYmVsRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImxhYmVsIik7CisgICAgICAgIGxhYmVsRWxlbWVudC5jbGFzc05hbWUgPSAic291cmNl
LWZyYW1lLWJyZWFrcG9pbnQtbWVzc2FnZSI7CisgICAgICAgIGxhYmVsRWxlbWVudC5odG1sRm9y
ID0gInNvdXJjZS1mcmFtZS1icmVha3BvaW50LWNvbmRpdGlvbiI7CisgICAgICAgIGxhYmVsRWxl
bWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIlRoZSBicmVha3BvaW50IG9uIGxpbmUgJWQgd2lsbCBzdG9wIG9ubHkgaWYgdGhpcyBl
eHByZXNzaW9uIGlzIHRydWU6IiwgbGluZU51bWJlcikpKTsKKyAgICAgICAgY29uZGl0aW9uRWxl
bWVudC5hcHBlbmRDaGlsZChsYWJlbEVsZW1lbnQpOworCisgICAgICAgIHZhciBlZGl0b3JFbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKKyAgICAgICAgZWRpdG9yRWxl
bWVudC5pZCA9ICJzb3VyY2UtZnJhbWUtYnJlYWtwb2ludC1jb25kaXRpb24iOworICAgICAgICBl
ZGl0b3JFbGVtZW50LmNsYXNzTmFtZSA9ICJtb25vc3BhY2UiOworICAgICAgICBlZGl0b3JFbGVt
ZW50LnR5cGUgPSAidGV4dCI7CisgICAgICAgIGNvbmRpdGlvbkVsZW1lbnQuYXBwZW5kQ2hpbGQo
ZWRpdG9yRWxlbWVudCk7CisgICAgICAgIHRoaXMuX2NvbmRpdGlvbkVkaXRvckVsZW1lbnQgPSBl
ZGl0b3JFbGVtZW50OworCisgICAgICAgIHJldHVybiBjb25kaXRpb25FbGVtZW50OworICAgIH0s
CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBza2lwUmV2ZWFsTGluZQorICAg
ICAqLworICAgIHNldEV4ZWN1dGlvbkxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIHNraXBSZXZl
YWxMaW5lKQorICAgIHsKKyAgICAgICAgdGhpcy5fZXhlY3V0aW9uTGluZU51bWJlciA9IGxpbmVO
dW1iZXI7CisgICAgICAgIGlmICh0aGlzLmxvYWRlZCkgeworICAgICAgICAgICAgdGhpcy50ZXh0
Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1leGVjdXRpb24tbGluZSIp
OworICAgICAgICAgICAgaWYgKCFza2lwUmV2ZWFsTGluZSkKKyAgICAgICAgICAgICAgICB0aGlz
LnRleHRWaWV3ZXIucmV2ZWFsTGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgfQorICAgIH0sCisK
KyAgICBjbGVhckV4ZWN1dGlvbkxpbmU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0
aGlzLmxvYWRlZCkKKyAgICAgICAgICAgIHRoaXMudGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9u
KHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIsICJ3ZWJraXQtZXhlY3V0aW9uLWxpbmUiKTsKKyAg
ICAgICAgZGVsZXRlIHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXI7CisgICAgfSwKKworICAgIF9s
aW5lTnVtYmVyQWZ0ZXJFZGl0aW5nOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBvbGRSYW5nZSwgbmV3
UmFuZ2UpCisgICAgeworICAgICAgICB2YXIgc2hpZnRPZmZzZXQgPSBsaW5lTnVtYmVyIDw9IG9s
ZFJhbmdlLnN0YXJ0TGluZSA/IDAgOiBuZXdSYW5nZS5saW5lc0NvdW50IC0gb2xkUmFuZ2UubGlu
ZXNDb3VudDsKKworICAgICAgICAvLyBTcGVjaWFsIGNhc2Ugb2YgZWRpdGluZyB0aGUgbGluZSBp
dHNlbGYuIFdlIHNob3VsZCBkZWNpZGUgd2hldGhlciB0aGUgbGluZSBudW1iZXIgc2hvdWxkIG1v
dmUgYmVsb3cgb3Igbm90LgorICAgICAgICBpZiAobGluZU51bWJlciA9PT0gb2xkUmFuZ2Uuc3Rh
cnRMaW5lKSB7CisgICAgICAgICAgICB2YXIgd2hpdGVTcGFjZXNSZWdleCA9IC9eW1xzXHhBMF0q
JC87CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgbGluZU51bWJlciArIGkgPD0gbmV3UmFu
Z2UuZW5kTGluZTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCF3aGl0ZVNwYWNlc1JlZ2V4
LnRlc3QodGhpcy5fdGV4dE1vZGVsLmxpbmUobGluZU51bWJlciArIGkpKSkgeworICAgICAgICAg
ICAgICAgICAgICBzaGlmdE9mZnNldCA9IGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZh
ciBuZXdMaW5lTnVtYmVyID0gTWF0aC5tYXgoMCwgbGluZU51bWJlciArIHNoaWZ0T2Zmc2V0KTsK
KyAgICAgICAgaWYgKG9sZFJhbmdlLnN0YXJ0TGluZSA8IGxpbmVOdW1iZXIgJiYgbGluZU51bWJl
ciA8IG9sZFJhbmdlLmVuZExpbmUpCisgICAgICAgICAgICBuZXdMaW5lTnVtYmVyID0gb2xkUmFu
Z2Uuc3RhcnRMaW5lOworICAgICAgICByZXR1cm4gbmV3TGluZU51bWJlcjsKKyAgICB9LAorCisg
ICAgX29uVGV4dFZpZXdlckNvbnRlbnRMb2FkZWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IGlmICh0eXBlb2YgdGhpcy5fZXhlY3V0aW9uTGluZU51bWJlciA9PT0gIm51bWJlciIpCisgICAg
ICAgICAgICB0aGlzLnNldEV4ZWN1dGlvbkxpbmUodGhpcy5fZXhlY3V0aW9uTGluZU51bWJlcik7
CiAgICAgfQogfQogCiBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlw
ZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlOworCisvKioK
KyAqIEBpbnRlcmZhY2UKKyAqLworV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZURl
bGVnYXRlID0gZnVuY3Rpb24oKQoreworfQorCitXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJj
ZUZyYW1lRGVsZWdhdGUucHJvdG90eXBlID0geworICAgIHJlcXVlc3RDb250ZW50OiBmdW5jdGlv
bihjYWxsYmFjaykgeyB9LAorCisgICAgc2V0QnJlYWtwb2ludDogZnVuY3Rpb24obGluZU51bWJl
ciwgY29uZGl0aW9uLCBlbmFibGVkKSB7IH0sCisKKyAgICByZW1vdmVCcmVha3BvaW50OiBmdW5j
dGlvbihsaW5lTnVtYmVyKSB7IH0sCisKKyAgICB1cGRhdGVCcmVha3BvaW50OiBmdW5jdGlvbihs
aW5lTnVtYmVyLCBjb25kaXRpb24sIGVuYWJsZWQpIHsgfSwKKworICAgIC8qKgorICAgICAqIEBy
ZXR1cm4gez9XZWJJbnNwZWN0b3IuQnJlYWtwb2ludH0KKyAgICAgKi8KKyAgICBmaW5kQnJlYWtw
b2ludDogZnVuY3Rpb24obGluZU51bWJlcikgeyB9LAorCisgICAgY29udGludWVUb0xpbmU6IGZ1
bmN0aW9uKGxpbmVOdW1iZXIpIHsgfSwKKworICAgIGNhbkVkaXRTY3JpcHRTb3VyY2U6IGZ1bmN0
aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0sCisKKyAgICBzZXRTY3JpcHRTb3VyY2U6IGZ1bmN0aW9u
KHRleHQsIGNhbGxiYWNrKSB7IH0sCisKKyAgICBzZXRTY3JpcHRTb3VyY2VJc0JlaW5nRWRpdGVk
OiBmdW5jdGlvbihpbkVkaXRNb2RlKSB7IH0sCisKKyAgICBzdWdnZXN0ZWRGaWxlTmFtZTogZnVu
Y3Rpb24oKSB7IH0sCisKKyAgICBhZGRUb1dhdGNoOiBmdW5jdGlvbigpIHsgfQorfQorCisvKioK
KyAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24uCisgKi8KK1dlYkluc3BlY3Rvci5KYXZhU2NyaXB0
U291cmNlRnJhbWVEZWxlZ2F0ZS5zdHViID0gT2JqZWN0LmNyZWF0ZShXZWJJbnNwZWN0b3IuSmF2
YVNjcmlwdFNvdXJjZUZyYW1lRGVsZWdhdGUucHJvdG90eXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VWaWV3LmpzIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVZpZXcuanMKaW5kZXggMWE4ZWM3ZS4u
Yjk5YjU4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9S
ZXNvdXJjZVZpZXcuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9S
ZXNvdXJjZVZpZXcuanMKQEAgLTgyLDcgKzgyLDcgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlVmll
dy5ub25Tb3VyY2VWaWV3Rm9yUmVzb3VyY2UgPSBmdW5jdGlvbihyZXNvdXJjZSkKICAqLwogV2Vi
SW5zcGVjdG9yLlJlc291cmNlU291cmNlRnJhbWUgPSBmdW5jdGlvbihyZXNvdXJjZSkKIHsKLSAg
ICBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUuY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWVEZWxlZ2F0ZS5zdHViLCByZXNvdXJjZS51cmwpOworICAgIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5jYWxsKHRoaXMsIHJlc291cmNlLnVybCk7CiAgICAgdGhpcy5fcmVzb3VyY2UgPSBy
ZXNvdXJjZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9TY3JpcHRzUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NjcmlwdHNQYW5lbC5qcwppbmRleCA0ZmU1NDRjLi43YWZhOTllIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpAQCAtMTIxMCwx
MyArMTIxMCwxMyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5fX3Byb3Rv
X18gPSBXZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90eXBlOwogCiAvKioKICAqIEBjb25zdHJ1Y3Rv
cgotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZURlbGVnYXRlfQorICog
QGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWVEZWxlZ2F0ZX0K
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbH0gc2NyaXB0c1BhbmVsCiAgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQogICovCiBXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWVEZWxlZ2F0ZUZvclNjcmlwdHNQYW5lbCA9IGZ1bmN0aW9uKHNj
cmlwdHNQYW5lbCwgdWlTb3VyY2VDb2RlKQogewotICAgIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFt
ZURlbGVnYXRlLmNhbGwodGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VG
cmFtZURlbGVnYXRlLmNhbGwodGhpcyk7CiAKICAgICB0aGlzLl9zY3JpcHRzUGFuZWwgPSBzY3Jp
cHRzUGFuZWw7CiAgICAgdGhpcy5fbW9kZWwgPSB0aGlzLl9zY3JpcHRzUGFuZWwuX3ByZXNlbnRh
dGlvbk1vZGVsOwpAQCAtMTI4NCw0ICsxMjg0LDQgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1l
RGVsZWdhdGVGb3JTY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgIH0KIH0KIAotV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lRGVsZWdhdGVGb3JTY3JpcHRzUGFuZWwucHJvdG90eXBlLl9fcHJv
dG9fXyA9IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZTsKK1dlYklu
c3BlY3Rvci5Tb3VyY2VGcmFtZURlbGVnYXRlRm9yU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5fX3By
b3RvX18gPSBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lRGVsZWdhdGUucHJvdG90
eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3Vy
Y2VGcmFtZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJh
bWUuanMKaW5kZXggNjQ1ZjgyZC4uMzE1NTdmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMiwxMiArMzIsMTEgQEAKICAqIEBl
eHRlbmRzIHtXZWJJbnNwZWN0b3IuVmlld30KICAqIEBjb25zdHJ1Y3RvcgogICovCi1XZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUgPSBmdW5jdGlvbihkZWxlZ2F0ZSwgdXJsKQorV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lID0gZnVuY3Rpb24odXJsKQogewogICAgIFdlYkluc3BlY3Rvci5WaWV3LmNh
bGwodGhpcyk7CiAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNjcmlwdC12aWV3Iik7
CiAKLSAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlOwogICAgIHRoaXMuX3VybCA9IHVybDsK
IAogICAgIHRoaXMuX3RleHRNb2RlbCA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1vZGVs
KCk7CkBAIC00NSwxMCArNDQsNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUgPSBmdW5jdGlv
bihkZWxlZ2F0ZSwgdXJsKQogICAgIHZhciB0ZXh0Vmlld2VyRGVsZWdhdGUgPSBuZXcgV2ViSW5z
cGVjdG9yLlRleHRWaWV3ZXJEZWxlZ2F0ZUZvclNvdXJjZUZyYW1lKHRoaXMpOwogICAgIHRoaXMu
X3RleHRWaWV3ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIodGhpcy5fdGV4dE1vZGVs
LCBXZWJJbnNwZWN0b3IucGxhdGZvcm0sIHRoaXMuX3VybCwgdGV4dFZpZXdlckRlbGVnYXRlKTsK
IAotICAgIHRoaXMucG9wb3ZlckhlbHBlciA9IG5ldyBXZWJJbnNwZWN0b3IuT2JqZWN0UG9wb3Zl
ckhlbHBlcih0aGlzLl90ZXh0Vmlld2VyLmVsZW1lbnQsCi0gICAgICAgICAgICB0aGlzLl9nZXRQ
b3BvdmVyQW5jaG9yLmJpbmQodGhpcyksIHRoaXMub25TaG93UG9wb3Zlci5iaW5kKHRoaXMpLCB0
aGlzLm9uSGlkZVBvcG92ZXIuYmluZCh0aGlzKSwgdHJ1ZSk7Ci0gICAgdGhpcy5fdGV4dFZpZXdl
ci5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMuX21vdXNlRG93bi5i
aW5kKHRoaXMpLCB0cnVlKTsKLQogICAgIHRoaXMuX2VkaXRCdXR0b24gPSBuZXcgV2ViSW5zcGVj
dG9yLlN0YXR1c0JhckJ1dHRvbihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVkaXQiKSwgImVkaXQt
c291cmNlLXN0YXR1cy1iYXItaXRlbSIpOwogICAgIHRoaXMuX2VkaXRCdXR0b24uYWRkRXZlbnRM
aXN0ZW5lcigiY2xpY2siLCB0aGlzLl9lZGl0QnV0dG9uQ2xpY2tlZC5iaW5kKHRoaXMpLCB0aGlz
KTsKIApAQCAtNTgsOCArNTMsNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUgPSBmdW5jdGlv
bihkZWxlZ2F0ZSwgdXJsKQogICAgIHRoaXMuX21lc3NhZ2VzID0gW107CiAgICAgdGhpcy5fcm93
TWVzc2FnZXMgPSB7fTsKICAgICB0aGlzLl9tZXNzYWdlQnViYmxlcyA9IHt9OwotCi0gICAgdGhp
cy5fYnJlYWtwb2ludHMgPSB7fTsKIH0KIAogV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLkV2ZW50
cyA9IHsKQEAgLTg1LDcgKzc4LDYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLmNyZWF0ZVNl
YXJjaFJlZ2V4ID0gZnVuY3Rpb24ocXVlcnkpCiAgICAgcmV0dXJuIHJlZ2V4OwogfQogCi0KIFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgd2FzU2hvd246IGZ1bmN0
aW9uKCkKICAgICB7CkBAIC05OSw4ICs5MSw2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLmxvYWRlZCkKICAgICAgICAgICAgIHRoaXMu
X3RleHRWaWV3ZXIuZnJlZUNhY2hlZEVsZW1lbnRzKCk7CiAKLSAgICAgICAgaWYgKHRoaXMucG9w
b3ZlckhlbHBlcikKLSAgICAgICAgICAgIHRoaXMucG9wb3ZlckhlbHBlci5oaWRlUG9wb3Zlcigp
OwogICAgICAgICB0aGlzLl9jbGVhckxpbmVIaWdobGlnaHQoKTsKICAgICAgICAgdGhpcy5fdGV4
dFZpZXdlci5yZWFkT25seSA9IHRydWU7CiAgICAgfSwKQEAgLTEyMCwxNyArMTEwLDIxIEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0sCiAKKyAgICBnZXQgdGV4dFZpZXdlcigpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5fdGV4dFZpZXdlcjsKKyAgICB9LAorCiAgICAgX2Vuc3VyZUNvbnRlbnRMb2FkZWQ6IGZ1
bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fY29udGVudFJlcXVlc3RlZCkgewog
ICAgICAgICAgICAgdGhpcy5fY29udGVudFJlcXVlc3RlZCA9IHRydWU7Ci0gICAgICAgICAgICB0
aGlzLnJlcXVlc3RDb250ZW50KHRoaXMuX2luaXRpYWxpemVUZXh0Vmlld2VyLmJpbmQodGhpcykp
OworICAgICAgICAgICAgdGhpcy5yZXF1ZXN0Q29udGVudCh0aGlzLnNldENvbnRlbnQuYmluZCh0
aGlzKSk7CiAgICAgICAgIH0KICAgICB9LAogCiAgICAgcmVxdWVzdENvbnRlbnQ6IGZ1bmN0aW9u
KGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgdGhpcy5fZGVsZWdhdGUucmVxdWVzdENvbnRlbnQo
Y2FsbGJhY2spOwogICAgIH0sCiAKICAgICAvKioKQEAgLTE5NywxMCArMTkxLDggQEAgV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHRoaXMuX3Zp
ZXdlclN0YXRlID0gewogICAgICAgICAgICAgdGV4dE1vZGVsQ29udGVudDogdGhpcy5fdGV4dE1v
ZGVsLnRleHQsCi0gICAgICAgICAgICBleGVjdXRpb25MaW5lTnVtYmVyOiB0aGlzLl9leGVjdXRp
b25MaW5lTnVtYmVyLAogICAgICAgICAgICAgbWVzc2FnZXM6IHRoaXMuX21lc3NhZ2VzLAogICAg
ICAgICAgICAgZGlmZkxpbmVzOiB0aGlzLl9kaWZmTGluZXMsCi0gICAgICAgICAgICBicmVha3Bv
aW50czogdGhpcy5fYnJlYWtwb2ludHMKICAgICAgICAgfTsKICAgICB9LAogCkBAIC0yMTQsMzIg
KzIwNiwxMyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAg
ICB0aGlzLl9kaWZmTGluZXMgPSB0aGlzLl92aWV3ZXJTdGF0ZS5kaWZmTGluZXM7CiAgICAgICAg
IHRoaXMuX3NldFRleHRWaWV3ZXJEZWNvcmF0aW9ucygpOwogCi0gICAgICAgIGlmICh0eXBlb2Yg
dGhpcy5fdmlld2VyU3RhdGUuZXhlY3V0aW9uTGluZU51bWJlciA9PT0gIm51bWJlciIpIHsKLSAg
ICAgICAgICAgIHRoaXMuY2xlYXJFeGVjdXRpb25MaW5lKCk7Ci0gICAgICAgICAgICB0aGlzLnNl
dEV4ZWN1dGlvbkxpbmUodGhpcy5fdmlld2VyU3RhdGUuZXhlY3V0aW9uTGluZU51bWJlcik7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2YXIgb2xkQnJlYWtwb2ludHMgPSB0aGlzLl9icmVha3BvaW50
czsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMgPSB7fTsKLSAgICAgICAgZm9yICh2YXIgbGlu
ZU51bWJlciBpbiBvbGRCcmVha3BvaW50cykKLSAgICAgICAgICAgIHRoaXMucmVtb3ZlQnJlYWtw
b2ludChOdW1iZXIobGluZU51bWJlcikpOwotCi0gICAgICAgIHZhciBuZXdCcmVha3BvaW50cyA9
IHRoaXMuX3ZpZXdlclN0YXRlLmJyZWFrcG9pbnRzOwotICAgICAgICBmb3IgKHZhciBsaW5lTnVt
YmVyIGluIG5ld0JyZWFrcG9pbnRzKSB7Ci0gICAgICAgICAgICBsaW5lTnVtYmVyID0gTnVtYmVy
KGxpbmVOdW1iZXIpOwotICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXdCcmVha3BvaW50
c1tsaW5lTnVtYmVyXTsKLSAgICAgICAgICAgIHRoaXMuYWRkQnJlYWtwb2ludChsaW5lTnVtYmVy
LCBicmVha3BvaW50LnJlc29sdmVkLCBicmVha3BvaW50LmNvbmRpdGlvbmFsLCBicmVha3BvaW50
LmVuYWJsZWQpOwotICAgICAgICB9Ci0KICAgICAgICAgZGVsZXRlIHRoaXMuX3ZpZXdlclN0YXRl
OwogICAgIH0sCiAKICAgICBiZWZvcmVUZXh0Q2hhbmdlZDogZnVuY3Rpb24oKQogICAgIHsKLSAg
ICAgICAgaWYgKCF0aGlzLl92aWV3ZXJTdGF0ZSkgeworICAgICAgICBpZiAoIXRoaXMuX3ZpZXdl
clN0YXRlKQogICAgICAgICAgICAgdGhpcy5fc2F2ZVZpZXdlclN0YXRlKCk7Ci0gICAgICAgICAg
ICB0aGlzLl9kZWxlZ2F0ZS5zZXRTY3JpcHRTb3VyY2VJc0JlaW5nRWRpdGVkKHRydWUpOwotICAg
ICAgICB9CiAKICAgICAgICAgV2ViSW5zcGVjdG9yLnNlYXJjaENvbnRyb2xsZXIuY2FuY2VsU2Vh
cmNoKCk7CiAgICAgICAgIHRoaXMuY2xlYXJNZXNzYWdlcygpOwpAQCAtMjQ3LDU0ICsyMjAsOSBA
QCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogCiAgICAgYWZ0ZXJUZXh0
Q2hhbmdlZDogZnVuY3Rpb24ob2xkUmFuZ2UsIG5ld1JhbmdlKQogICAgIHsKLSAgICAgICAgaWYg
KCFvbGRSYW5nZSB8fCAhbmV3UmFuZ2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
Ly8gQWRqdXN0IGV4ZWN1dGlvbiBsaW5lIG51bWJlci4KLSAgICAgICAgaWYgKHR5cGVvZiB0aGlz
Ll9leGVjdXRpb25MaW5lTnVtYmVyID09PSAibnVtYmVyIikgewotICAgICAgICAgICAgdmFyIG5l
d0V4ZWN1dGlvbkxpbmVOdW1iZXIgPSB0aGlzLl9saW5lTnVtYmVyQWZ0ZXJFZGl0aW5nKHRoaXMu
X2V4ZWN1dGlvbkxpbmVOdW1iZXIsIG9sZFJhbmdlLCBuZXdSYW5nZSk7Ci0gICAgICAgICAgICB0
aGlzLmNsZWFyRXhlY3V0aW9uTGluZSgpOwotICAgICAgICAgICAgdGhpcy5zZXRFeGVjdXRpb25M
aW5lKG5ld0V4ZWN1dGlvbkxpbmVOdW1iZXIsIHRydWUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gQWRqdXN0IGJyZWFrcG9pbnRzLgotICAgICAgICB2YXIgb2xkQnJlYWtwb2ludHMgPSB0aGlz
Ll9icmVha3BvaW50czsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMgPSB7fTsKLSAgICAgICAg
Zm9yICh2YXIgbGluZU51bWJlciBpbiBvbGRCcmVha3BvaW50cykgewotICAgICAgICAgICAgbGlu
ZU51bWJlciA9IE51bWJlcihsaW5lTnVtYmVyKTsKLSAgICAgICAgICAgIHZhciBicmVha3BvaW50
ID0gb2xkQnJlYWtwb2ludHNbbGluZU51bWJlcl07Ci0gICAgICAgICAgICB2YXIgbmV3TGluZU51
bWJlciA9IHRoaXMuX2xpbmVOdW1iZXJBZnRlckVkaXRpbmcobGluZU51bWJlciwgb2xkUmFuZ2Us
IG5ld1JhbmdlKTsKLSAgICAgICAgICAgIGlmIChsaW5lTnVtYmVyID09PSBuZXdMaW5lTnVtYmVy
KQotICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzW2xpbmVOdW1iZXJdID0gYnJlYWtw
b2ludDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQnJl
YWtwb2ludChsaW5lTnVtYmVyKTsKLSAgICAgICAgICAgICAgICB0aGlzLmFkZEJyZWFrcG9pbnQo
bmV3TGluZU51bWJlciwgYnJlYWtwb2ludC5yZXNvbHZlZCwgYnJlYWtwb2ludC5jb25kaXRpb25h
bCwgYnJlYWtwb2ludC5lbmFibGVkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0s
Ci0KLSAgICBfbGluZU51bWJlckFmdGVyRWRpdGluZzogZnVuY3Rpb24obGluZU51bWJlciwgb2xk
UmFuZ2UsIG5ld1JhbmdlKQotICAgIHsKLSAgICAgICAgdmFyIHNoaWZ0T2Zmc2V0ID0gbGluZU51
bWJlciA8PSBvbGRSYW5nZS5zdGFydExpbmUgPyAwIDogbmV3UmFuZ2UubGluZXNDb3VudCAtIG9s
ZFJhbmdlLmxpbmVzQ291bnQ7Ci0KLSAgICAgICAgLy8gU3BlY2lhbCBjYXNlIG9mIGVkaXRpbmcg
dGhlIGxpbmUgaXRzZWxmLiBXZSBzaG91bGQgZGVjaWRlIHdoZXRoZXIgdGhlIGxpbmUgbnVtYmVy
IHNob3VsZCBtb3ZlIGJlbG93IG9yIG5vdC4KLSAgICAgICAgaWYgKGxpbmVOdW1iZXIgPT09IG9s
ZFJhbmdlLnN0YXJ0TGluZSkgewotICAgICAgICAgICAgdmFyIHdoaXRlU3BhY2VzUmVnZXggPSAv
Xltcc1x4QTBdKiQvOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGxpbmVOdW1iZXIgKyBp
IDw9IG5ld1JhbmdlLmVuZExpbmU7ICsraSkgewotICAgICAgICAgICAgICAgIGlmICghd2hpdGVT
cGFjZXNSZWdleC50ZXN0KHRoaXMuX3RleHRNb2RlbC5saW5lKGxpbmVOdW1iZXIgKyBpKSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgc2hpZnRPZmZzZXQgPSBpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICB2YXIgbmV3TGluZU51bWJlciA9IE1hdGgubWF4KDAsIGxpbmVOdW1iZXIgKyBzaGlm
dE9mZnNldCk7Ci0gICAgICAgIGlmIChvbGRSYW5nZS5zdGFydExpbmUgPCBsaW5lTnVtYmVyICYm
IGxpbmVOdW1iZXIgPCBvbGRSYW5nZS5lbmRMaW5lKQotICAgICAgICAgICAgbmV3TGluZU51bWJl
ciA9IG9sZFJhbmdlLnN0YXJ0TGluZTsKLSAgICAgICAgcmV0dXJuIG5ld0xpbmVOdW1iZXI7CiAg
ICAgfSwKIAotICAgIF9pbml0aWFsaXplVGV4dFZpZXdlcjogZnVuY3Rpb24obWltZVR5cGUsIGNv
bnRlbnQpCisgICAgc2V0Q29udGVudDogZnVuY3Rpb24obWltZVR5cGUsIGNvbnRlbnQpCiAgICAg
ewogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLm1pbWVUeXBlID0gbWltZVR5cGU7CiAKQEAgLTMw
NSw5ICsyMzMsNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogCiAg
ICAgICAgIHRoaXMuX3NldFRleHRWaWV3ZXJEZWNvcmF0aW9ucygpOwogCi0gICAgICAgIGlmICh0
eXBlb2YgdGhpcy5fZXhlY3V0aW9uTGluZU51bWJlciA9PT0gIm51bWJlciIpCi0gICAgICAgICAg
ICB0aGlzLnNldEV4ZWN1dGlvbkxpbmUodGhpcy5fZXhlY3V0aW9uTGluZU51bWJlcik7Ci0KICAg
ICAgICAgaWYgKHR5cGVvZiB0aGlzLl9saW5lVG9IaWdobGlnaHQgPT09ICJudW1iZXIiKSB7CiAg
ICAgICAgICAgICB0aGlzLmhpZ2hsaWdodExpbmUodGhpcy5fbGluZVRvSGlnaGxpZ2h0KTsKICAg
ICAgICAgICAgIGRlbGV0ZSB0aGlzLl9saW5lVG9IaWdobGlnaHQ7CkBAIC00NDMsMjYgKzM2OCw2
IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVy
biByYW5nZXM7CiAgICAgfSwKIAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHNr
aXBSZXZlYWxMaW5lCi0gICAgICovCi0gICAgc2V0RXhlY3V0aW9uTGluZTogZnVuY3Rpb24obGlu
ZU51bWJlciwgc2tpcFJldmVhbExpbmUpCi0gICAgewotICAgICAgICB0aGlzLl9leGVjdXRpb25M
aW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAgICAgICAgaWYgKHRoaXMubG9hZGVkKSB7Ci0gICAg
ICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndlYmtp
dC1leGVjdXRpb24tbGluZSIpOwotICAgICAgICAgICAgaWYgKCFza2lwUmV2ZWFsTGluZSkKLSAg
ICAgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJldmVhbExpbmUobGluZU51bWJlcik7Ci0g
ICAgICAgIH0KLSAgICB9LAotCi0gICAgY2xlYXJFeGVjdXRpb25MaW5lOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICBpZiAodGhpcy5sb2FkZWQpCi0gICAgICAgICAgICB0aGlzLl90ZXh0Vmll
d2VyLnJlbW92ZURlY29yYXRpb24odGhpcy5fZXhlY3V0aW9uTGluZU51bWJlciwgIndlYmtpdC1l
eGVjdXRpb24tbGluZSIpOwotICAgICAgICBkZWxldGUgdGhpcy5fZXhlY3V0aW9uTGluZU51bWJl
cjsKLSAgICB9LAotCiAgICAgX3VwZGF0ZURpZmZEZWNvcmF0aW9uczogZnVuY3Rpb24oKQogICAg
IHsKICAgICAgICAgaWYgKCF0aGlzLl9kaWZmTGluZXMpCkBAIC01NzEsNzUgKzQ3Niw4IEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJvd01lc3NhZ2Uu
cmVwZWF0Q291bnRFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIg
KHJlcGVhdGVkICVkIHRpbWVzKSIsIHJvd01lc3NhZ2UucmVwZWF0Q291bnQpOwogICAgIH0sCiAK
LSAgICBhZGRCcmVha3BvaW50OiBmdW5jdGlvbihsaW5lTnVtYmVyLCByZXNvbHZlZCwgY29uZGl0
aW9uYWwsIGVuYWJsZWQpCi0gICAgewotICAgICAgICB0aGlzLl9icmVha3BvaW50c1tsaW5lTnVt
YmVyXSA9IHsKLSAgICAgICAgICAgIHJlc29sdmVkOiByZXNvbHZlZCwKLSAgICAgICAgICAgIGNv
bmRpdGlvbmFsOiBjb25kaXRpb25hbCwKLSAgICAgICAgICAgIGVuYWJsZWQ6IGVuYWJsZWQKLSAg
ICAgICAgfTsKLSAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5iZWdpblVwZGF0ZXMoKTsKLSAgICAg
ICAgdGhpcy5fdGV4dFZpZXdlci5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJl
YWtwb2ludCIpOwotICAgICAgICBpZiAoIWVuYWJsZWQpCi0gICAgICAgICAgICB0aGlzLl90ZXh0
Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50LWRpc2Fi
bGVkIik7Ci0gICAgICAgIGlmIChjb25kaXRpb25hbCkKLSAgICAgICAgICAgIHRoaXMuX3RleHRW
aWV3ZXIuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtY29uZGl0
aW9uYWwiKTsKLSAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5lbmRVcGRhdGVzKCk7Ci0gICAgfSwK
LQotICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCi0gICAgewotICAg
ICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNbbGluZU51bWJlcl07Ci0gICAgICAgIHRoaXMu
X3RleHRWaWV3ZXIuYmVnaW5VcGRhdGVzKCk7Ci0gICAgICAgIHRoaXMuX3RleHRWaWV3ZXIucmVt
b3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQiKTsKLSAgICAgICAg
dGhpcy5fdGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJl
YWtwb2ludC1kaXNhYmxlZCIpOwotICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlbW92ZURlY29y
YXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50LWNvbmRpdGlvbmFsIik7Ci0gICAg
ICAgIHRoaXMuX3RleHRWaWV3ZXIuZW5kVXBkYXRlcygpOwotICAgIH0sCi0KICAgICBwb3B1bGF0
ZUxpbmVHdXR0ZXJDb250ZXh0TWVudTogZnVuY3Rpb24obGluZU51bWJlciwgY29udGV4dE1lbnUp
CiAgICAgewotICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0
cmluZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8gIkNvbnRpbnVlIHRv
IGhlcmUiIDogIkNvbnRpbnVlIHRvIEhlcmUiKSwgdGhpcy5fZGVsZWdhdGUuY29udGludWVUb0xp
bmUuYmluZCh0aGlzLl9kZWxlZ2F0ZSwgbGluZU51bWJlcikpOwotCi0gICAgICAgIHZhciBicmVh
a3BvaW50ID0gdGhpcy5fZGVsZWdhdGUuZmluZEJyZWFrcG9pbnQobGluZU51bWJlcik7Ci0gICAg
ICAgIGlmICghYnJlYWtwb2ludCkgewotICAgICAgICAgICAgLy8gVGhpcyByb3cgZG9lc24ndCBo
YXZlIGEgYnJlYWtwb2ludDogV2Ugd2FudCB0byBzaG93IEFkZCBCcmVha3BvaW50IGFuZCBBZGQg
YW5kIEVkaXQgQnJlYWtwb2ludC4KLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0o
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51VGl0bGVz
KCkgPyAiQWRkIGJyZWFrcG9pbnQiIDogIkFkZCBCcmVha3BvaW50IiksIHRoaXMuX2RlbGVnYXRl
LnNldEJyZWFrcG9pbnQuYmluZCh0aGlzLl9kZWxlZ2F0ZSwgbGluZU51bWJlciwgIiIsIHRydWUp
KTsKLQotICAgICAgICAgICAgZnVuY3Rpb24gYWRkQ29uZGl0aW9uYWxCcmVha3BvaW50KCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aGlzLmFkZEJyZWFrcG9pbnQobGluZU51bWJl
ciwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZnVuY3Rpb24gZGlkRWRpdEJy
ZWFrcG9pbnRDb25kaXRpb24oY29tbWl0dGVkLCBjb25kaXRpb24pCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUJyZWFrcG9pbnQobGluZU51bWJlcik7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb21taXR0ZWQpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9kZWxlZ2F0ZS5zZXRCcmVha3BvaW50KGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwg
dHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXMuX2VkaXRCcmVh
a3BvaW50Q29uZGl0aW9uKGxpbmVOdW1iZXIsICIiLCBkaWRFZGl0QnJlYWtwb2ludENvbmRpdGlv
bi5iaW5kKHRoaXMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFw
cGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VN
ZW51VGl0bGVzKCkgPyAiQWRkIGNvbmRpdGlvbmFsIGJyZWFrcG9pbnTigKYiIDogIkFkZCBDb25k
aXRpb25hbCBCcmVha3BvaW504oCmIiksIGFkZENvbmRpdGlvbmFsQnJlYWtwb2ludC5iaW5kKHRo
aXMpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoaXMgcm93IGhhcyBhIGJy
ZWFrcG9pbnQsIHdlIHdhbnQgdG8gc2hvdyBlZGl0IGFuZCByZW1vdmUgYnJlYWtwb2ludCwgYW5k
IGVpdGhlciBkaXNhYmxlIG9yIGVuYWJsZS4KLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVu
ZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKFdlYkluc3BlY3Rvci51c2VMb3dlckNhc2VNZW51
VGl0bGVzKCkgPyAiUmVtb3ZlIGJyZWFrcG9pbnQiIDogIlJlbW92ZSBCcmVha3BvaW50IiksIHRo
aXMuX2RlbGVnYXRlLnJlbW92ZUJyZWFrcG9pbnQuYmluZCh0aGlzLl9kZWxlZ2F0ZSwgbGluZU51
bWJlcikpOwotICAgICAgICAgICAgZnVuY3Rpb24gZWRpdEJyZWFrcG9pbnRDb25kaXRpb24oKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRpZEVkaXRCcmVha3BvaW50
Q29uZGl0aW9uKGNvbW1pdHRlZCwgY29uZGl0aW9uKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGNvbW1pdHRlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuX2RlbGVnYXRlLnVwZGF0ZUJyZWFrcG9pbnQobGluZU51bWJlciwgY29uZGl0aW9uLCBicmVh
a3BvaW50LmVuYWJsZWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlz
Ll9lZGl0QnJlYWtwb2ludENvbmRpdGlvbihsaW5lTnVtYmVyLCBicmVha3BvaW50LmNvbmRpdGlv
biwgZGlkRWRpdEJyZWFrcG9pbnRDb25kaXRpb24uYmluZCh0aGlzKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmlu
ZyhXZWJJbnNwZWN0b3IudXNlTG93ZXJDYXNlTWVudVRpdGxlcygpID8gIkVkaXQgYnJlYWtwb2lu
dOKApiIgOiAiRWRpdCBCcmVha3BvaW504oCmIiksIGVkaXRCcmVha3BvaW50Q29uZGl0aW9uLmJp
bmQodGhpcykpOwotICAgICAgICAgICAgZnVuY3Rpb24gc2V0QnJlYWtwb2ludEVuYWJsZWQoZW5h
YmxlZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS51cGRh
dGVCcmVha3BvaW50KGxpbmVOdW1iZXIsIGJyZWFrcG9pbnQuY29uZGl0aW9uLCBlbmFibGVkKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChicmVha3BvaW50LmVuYWJsZWQpCi0gICAg
ICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmco
V2ViSW5zcGVjdG9yLnVzZUxvd2VyQ2FzZU1lbnVUaXRsZXMoKSA/ICJEaXNhYmxlIGJyZWFrcG9p
bnQiIDogIkRpc2FibGUgQnJlYWtwb2ludCIpLCBzZXRCcmVha3BvaW50RW5hYmxlZC5iaW5kKHRo
aXMsIGZhbHNlKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGV4dE1l
bnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoV2ViSW5zcGVjdG9yLnVzZUxvd2Vy
Q2FzZU1lbnVUaXRsZXMoKSA/ICJFbmFibGUgYnJlYWtwb2ludCIgOiAiRW5hYmxlIEJyZWFrcG9p
bnQiKSwgc2V0QnJlYWtwb2ludEVuYWJsZWQuYmluZCh0aGlzLCB0cnVlKSk7Ci0gICAgICAgIH0K
ICAgICB9LAogCiAgICAgcG9wdWxhdGVUZXh0QXJlYUNvbnRleHRNZW51OiBmdW5jdGlvbihjb250
ZXh0TWVudSkKQEAgLTY0OCw3NCArNDg2LDYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnBy
b3RvdHlwZSA9IHsKIAogICAgIHN1Z2dlc3RlZEZpbGVOYW1lOiBmdW5jdGlvbigpCiAgICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGUuc3VnZ2VzdGVkRmlsZU5hbWUoKTsKLSAgICB9
LAotCi0gICAgX21vdXNlRG93bjogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAo
ZXZlbnQuYnV0dG9uICE9IDAgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZl
bnQubWV0YUtleSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIHRhcmdldCA9IGV2
ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3ZWJraXQtbGluZS1udW1i
ZXIiKTsKLSAgICAgICAgaWYgKCF0YXJnZXQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IHZhciBsaW5lTnVtYmVyID0gdGFyZ2V0LmxpbmVOdW1iZXI7Ci0KLSAgICAgICAgdmFyIGJyZWFr
cG9pbnQgPSB0aGlzLl9kZWxlZ2F0ZS5maW5kQnJlYWtwb2ludChsaW5lTnVtYmVyKTsKLSAgICAg
ICAgaWYgKGJyZWFrcG9pbnQpIHsKLSAgICAgICAgICAgIGlmIChldmVudC5zaGlmdEtleSkKLSAg
ICAgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS51cGRhdGVCcmVha3BvaW50KGxpbmVOdW1iZXIs
IGJyZWFrcG9pbnQuY29uZGl0aW9uLCAhYnJlYWtwb2ludC5lbmFibGVkKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5yZW1vdmVCcmVha3BvaW50KGxp
bmVOdW1iZXIpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLnNl
dEJyZWFrcG9pbnQobGluZU51bWJlciwgIiIsIHRydWUpOwotICAgICAgICBldmVudC5wcmV2ZW50
RGVmYXVsdCgpOwotICAgIH0sCi0KLSAgICBfZ2V0UG9wb3ZlckFuY2hvcjogZnVuY3Rpb24oZWxl
bWVudCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5zaG91bGRTaG93UG9wb3ZlcihlbGVtZW50
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgfSwK
LQotICAgIF9lZGl0QnJlYWtwb2ludENvbmRpdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgY29u
ZGl0aW9uLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NvbmRpdGlvbkVsZW1lbnQg
PSB0aGlzLl9jcmVhdGVDb25kaXRpb25FbGVtZW50KGxpbmVOdW1iZXIpOwotICAgICAgICB0aGlz
Ll90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciwgdGhpcy5fY29uZGl0aW9uRWxl
bWVudCk7Ci0KLSAgICAgICAgZnVuY3Rpb24gZmluaXNoRWRpdGluZyhjb21taXR0ZWQsIGVsZW1l
bnQsIG5ld1RleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIucmVt
b3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCB0aGlzLl9jb25kaXRpb25FbGVtZW50KTsKLSAgICAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9jb25kaXRpb25FZGl0b3JFbGVtZW50OwotICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuX2NvbmRpdGlvbkVsZW1lbnQ7Ci0gICAgICAgICAgICBjYWxsYmFjayhjb21t
aXR0ZWQsIG5ld1RleHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGNvbmZpZyA9IG5ldyBX
ZWJJbnNwZWN0b3IuRWRpdGluZ0NvbmZpZyhmaW5pc2hFZGl0aW5nLmJpbmQodGhpcywgdHJ1ZSks
IGZpbmlzaEVkaXRpbmcuYmluZCh0aGlzLCBmYWxzZSkpOwotICAgICAgICBXZWJJbnNwZWN0b3Iu
c3RhcnRFZGl0aW5nKHRoaXMuX2NvbmRpdGlvbkVkaXRvckVsZW1lbnQsIGNvbmZpZyk7Ci0gICAg
ICAgIHRoaXMuX2NvbmRpdGlvbkVkaXRvckVsZW1lbnQudmFsdWUgPSBjb25kaXRpb247Ci0gICAg
ICAgIHRoaXMuX2NvbmRpdGlvbkVkaXRvckVsZW1lbnQuc2VsZWN0KCk7Ci0gICAgfSwKLQotICAg
IF9jcmVhdGVDb25kaXRpb25FbGVtZW50OiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAg
ICAgICAgdmFyIGNvbmRpdGlvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKLSAgICAgICAgY29uZGl0aW9uRWxlbWVudC5jbGFzc05hbWUgPSAic291cmNlLWZyYW1lLWJy
ZWFrcG9pbnQtY29uZGl0aW9uIjsKLQotICAgICAgICB2YXIgbGFiZWxFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKTsKLSAgICAgICAgbGFiZWxFbGVtZW50LmNsYXNzTmFt
ZSA9ICJzb3VyY2UtZnJhbWUtYnJlYWtwb2ludC1tZXNzYWdlIjsKLSAgICAgICAgbGFiZWxFbGVt
ZW50Lmh0bWxGb3IgPSAic291cmNlLWZyYW1lLWJyZWFrcG9pbnQtY29uZGl0aW9uIjsKLSAgICAg
ICAgbGFiZWxFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFdlYklu
c3BlY3Rvci5VSVN0cmluZygiVGhlIGJyZWFrcG9pbnQgb24gbGluZSAlZCB3aWxsIHN0b3Agb25s
eSBpZiB0aGlzIGV4cHJlc3Npb24gaXMgdHJ1ZToiLCBsaW5lTnVtYmVyKSkpOwotICAgICAgICBj
b25kaXRpb25FbGVtZW50LmFwcGVuZENoaWxkKGxhYmVsRWxlbWVudCk7Ci0KLSAgICAgICAgdmFy
IGVkaXRvckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAg
ICBlZGl0b3JFbGVtZW50LmlkID0gInNvdXJjZS1mcmFtZS1icmVha3BvaW50LWNvbmRpdGlvbiI7
Ci0gICAgICAgIGVkaXRvckVsZW1lbnQuY2xhc3NOYW1lID0gIm1vbm9zcGFjZSI7Ci0gICAgICAg
IGVkaXRvckVsZW1lbnQudHlwZSA9ICJ0ZXh0IjsKLSAgICAgICAgY29uZGl0aW9uRWxlbWVudC5h
cHBlbmRDaGlsZChlZGl0b3JFbGVtZW50KTsKLSAgICAgICAgdGhpcy5fY29uZGl0aW9uRWRpdG9y
RWxlbWVudCA9IGVkaXRvckVsZW1lbnQ7Ci0KLSAgICAgICAgcmV0dXJuIGNvbmRpdGlvbkVsZW1l
bnQ7CiAgICAgfSwKIAogICAgIGluaGVyaXRTY3JvbGxQb3NpdGlvbnM6IGZ1bmN0aW9uKHNvdXJj
ZUZyYW1lKQpAQCAtNzM3LDcgKzUwNyw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90
b3R5cGUgPSB7CiAKICAgICBjYW5FZGl0U291cmNlOiBmdW5jdGlvbigpCiAgICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fZGVsZWdhdGUuY2FuRWRpdFNjcmlwdFNvdXJjZSgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfSwKIAogICAgIHN0YXJ0RWRpdGluZzogZnVuY3Rpb24oKQpAQCAt
NzQ4LDcgKzUxOCw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIGlmICh0aGlzLl9jb21taXRFZGl0aW5nSW5Qcm9ncmVzcykKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICB0aGlzLl9zZXRSZWFkT25seShmYWxzZSk7CisgICAgICAg
IHRoaXMuc2V0UmVhZE9ubHkoZmFsc2UpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9LAog
CkBAIC03NTYsNTMgKzUyNiwzOCBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBl
ID0gewogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl92aWV3ZXJTdGF0ZSkgewogICAgICAgICAg
ICAgLy8gTm8gZWRpdGluZyB3YXMgYWN0dWFsbHkgZG9uZS4KLSAgICAgICAgICAgIHRoaXMuX3Nl
dFJlYWRPbmx5KHRydWUpOworICAgICAgICAgICAgdGhpcy5zZXRSZWFkT25seSh0cnVlKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGZ1bmN0aW9uIGRpZEVkaXRD
b250ZW50KGVycm9yKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLl9jb21taXRFZGl0aW5n
SW5Qcm9ncmVzcyA9IGZhbHNlOwotICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZWFkT25s
eSA9IGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoZXJyb3IubWVzc2FnZSkKLSAgICAgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmxvZyhl
cnJvci5tZXNzYWdlLCBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVy
cm9yLCB0cnVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHZhciBuZXdCcmVha3BvaW50cyA9IHt9OwotICAgICAgICAgICAgZm9yICh2YXIg
bGluZU51bWJlciBpbiB0aGlzLl9icmVha3BvaW50cykgewotICAgICAgICAgICAgICAgIG5ld0Jy
ZWFrcG9pbnRzW2xpbmVOdW1iZXJdID0gdGhpcy5fYnJlYWtwb2ludHNbbGluZU51bWJlcl07Ci0g
ICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVCcmVha3BvaW50KE51bWJlcihsaW5lTnVtYmVyKSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgaW4gdGhp
cy5fdmlld2VyU3RhdGUuYnJlYWtwb2ludHMpCi0gICAgICAgICAgICAgICAgdGhpcy5fZGVsZWdh
dGUucmVtb3ZlQnJlYWtwb2ludChOdW1iZXIobGluZU51bWJlcikpOwotCi0gICAgICAgICAgICBm
b3IgKHZhciBsaW5lTnVtYmVyIGluIG5ld0JyZWFrcG9pbnRzKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGJyZWFrcG9pbnQgPSBuZXdCcmVha3BvaW50c1tsaW5lTnVtYmVyXTsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9kZWxlZ2F0ZS5zZXRCcmVha3BvaW50KE51bWJlcihsaW5lTnVtYmVyKSwgYnJl
YWtwb2ludC5jb25kaXRpb24sIGJyZWFrcG9pbnQuZW5hYmxlZCk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl92aWV3ZXJTdGF0ZTsKLSAgICAgICAgICAgIHRoaXMu
X2RlbGVnYXRlLnNldFNjcmlwdFNvdXJjZUlzQmVpbmdFZGl0ZWQoZmFsc2UpOwotICAgICAgICB9
CiAgICAgICAgIHRoaXMuX2NvbW1pdEVkaXRpbmdJblByb2dyZXNzID0gdHJ1ZTsKICAgICAgICAg
dGhpcy5fdGV4dFZpZXdlci5yZWFkT25seSA9IHRydWU7CiAgICAgICAgIHRoaXMuX2VkaXRCdXR0
b24udG9nZ2xlZCA9IGZhbHNlOwotICAgICAgICB0aGlzLmVkaXRDb250ZW50KHRoaXMuX3RleHRN
b2RlbC50ZXh0LCBkaWRFZGl0Q29udGVudC5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5lZGl0
Q29udGVudCh0aGlzLl90ZXh0TW9kZWwudGV4dCwgdGhpcy5kaWRFZGl0Q29udGVudC5iaW5kKHRo
aXMpKTsKKyAgICB9LAorCisgICAgZGlkRWRpdENvbnRlbnQ6IGZ1bmN0aW9uKGVycm9yKQorICAg
IHsKKyAgICAgICAgdGhpcy5fY29tbWl0RWRpdGluZ0luUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICAg
ICAgdGhpcy5fdGV4dFZpZXdlci5yZWFkT25seSA9IGZhbHNlOworCisgICAgICAgIGlmIChlcnJv
cikgeworICAgICAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UpCisgICAgICAgICAgICAgICAgV2Vi
SW5zcGVjdG9yLmxvZyhlcnJvci5tZXNzYWdlLCBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2Uu
TWVzc2FnZUxldmVsLkVycm9yLCB0cnVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGRlbGV0ZSB0aGlzLl92aWV3ZXJTdGF0ZTsKICAgICB9LAogCiAgICAgZWRp
dENvbnRlbnQ6IGZ1bmN0aW9uKG5ld0NvbnRlbnQsIGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAg
dGhpcy5fZGVsZWdhdGUuc2V0U2NyaXB0U291cmNlKG5ld0NvbnRlbnQsIGNhbGxiYWNrKTsKICAg
ICB9LAogCiAgICAgY2FuY2VsRWRpdGluZzogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhp
cy5fcmVzdG9yZVZpZXdlclN0YXRlKCk7Ci0gICAgICAgIHRoaXMuX3NldFJlYWRPbmx5KHRydWUp
OworICAgICAgICB0aGlzLnNldFJlYWRPbmx5KHRydWUpOwogICAgIH0sCiAKICAgICBnZXQgcmVh
ZE9ubHkoKQpAQCAtODEwLDMwICs1NjUsMTIgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRWaWV3ZXIucmVhZE9ubHk7CiAg
ICAgfSwKIAotICAgIF9zZXRSZWFkT25seTogZnVuY3Rpb24ocmVhZE9ubHkpCisgICAgc2V0UmVh
ZE9ubHk6IGZ1bmN0aW9uKHJlYWRPbmx5KQogICAgIHsKLSAgICAgICAgaWYgKCFyZWFkT25seSAm
JiB0aGlzLnBvcG92ZXJIZWxwZXIpCi0gICAgICAgICAgICB0aGlzLnBvcG92ZXJIZWxwZXIuaGlk
ZVBvcG92ZXIoKTsKLQogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlYWRPbmx5ID0gcmVhZE9u
bHk7CiAgICAgICAgIHRoaXMuX2VkaXRCdXR0b24udG9nZ2xlZCA9ICFyZWFkT25seTsKICAgICAg
ICAgV2ViSW5zcGVjdG9yLm1hcmtCZWluZ0VkaXRlZCh0aGlzLl90ZXh0Vmlld2VyLmVsZW1lbnQs
ICFyZWFkT25seSk7Ci0gICAgICAgIGlmIChyZWFkT25seSkKLSAgICAgICAgICAgIHRoaXMuX2Rl
bGVnYXRlLnNldFNjcmlwdFNvdXJjZUlzQmVpbmdFZGl0ZWQoZmFsc2UpOwotICAgIH0sCi0KLSAg
ICBjb250ZW50Q2hhbmdlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9j
b250ZW50UmVxdWVzdGVkIHx8ICF0aGlzLl90ZXh0Vmlld2VyLnJlYWRPbmx5KQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5yZXF1ZXN0Q29udGVudCh0aGlzLl9p
bml0aWFsaXplVGV4dFZpZXdlci5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgc2hvdWxkU2hv
d1BvcG92ZXI6IGZ1bmN0aW9uKGVsZW1lbnQpIHsgfSwKLQotICAgIG9uU2hvd1BvcG92ZXI6IGZ1
bmN0aW9uKGVsZW1lbnQsIHNob3dDYWxsYmFjaykgeyB9LAotCi0gICAgb25IaWRlUG9wb3Zlcjog
ZnVuY3Rpb24oKSB7IH0sCisgICAgfQogfQogCiBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJv
dG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZTsKQEAgLTg5MSw0
MCArNjI4LDMgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXJEZWxlZ2F0ZUZvclNvdXJjZUZyYW1l
LnByb3RvdHlwZSA9IHsKIH0KIAogV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXJEZWxlZ2F0ZUZvclNv
dXJjZUZyYW1lLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlckRl
bGVnYXRlLnByb3RvdHlwZTsKLQotCi0vKioKLSAqIEBpbnRlcmZhY2UKLSAqLwotV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lRGVsZWdhdGUgPSBmdW5jdGlvbigpCi17Ci19Ci0KLVdlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZSA9IHsKLSAgICByZXF1ZXN0Q29udGVudDog
ZnVuY3Rpb24oY2FsbGJhY2spIHsgfSwKLQotICAgIHNldEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxp
bmVOdW1iZXIsIGNvbmRpdGlvbiwgZW5hYmxlZCkgeyB9LAotCi0gICAgcmVtb3ZlQnJlYWtwb2lu
dDogZnVuY3Rpb24obGluZU51bWJlcikgeyB9LAotCi0gICAgdXBkYXRlQnJlYWtwb2ludDogZnVu
Y3Rpb24obGluZU51bWJlciwgY29uZGl0aW9uLCBlbmFibGVkKSB7IH0sCi0KLSAgICBmaW5kQnJl
YWtwb2ludDogZnVuY3Rpb24obGluZU51bWJlcikgeyB9LAotCi0gICAgY29udGludWVUb0xpbmU6
IGZ1bmN0aW9uKGxpbmVOdW1iZXIpIHsgfSwKLQotICAgIGNhbkVkaXRTY3JpcHRTb3VyY2U6IGZ1
bmN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0sCi0KLSAgICBzZXRTY3JpcHRTb3VyY2U6IGZ1bmN0
aW9uKHRleHQsIGNhbGxiYWNrKSB7IH0sCi0KLSAgICBzZXRTY3JpcHRTb3VyY2VJc0JlaW5nRWRp
dGVkOiBmdW5jdGlvbihpbkVkaXRNb2RlKSB7IH0sCi0KLSAgICBzdWdnZXN0ZWRGaWxlTmFtZTog
ZnVuY3Rpb24oKSB7IH0sCi0KLSAgICBhZGRUb1dhdGNoOiBmdW5jdGlvbigpIHsgfQotfQotCi0v
KioKLSAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24uCi0gKi8KLVdlYkluc3BlY3Rvci5Tb3VyY2VG
cmFtZURlbGVnYXRlLnN0dWIgPSBPYmplY3QuY3JlYXRlKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFt
ZURlbGVnYXRlLnByb3RvdHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9pbnNwZWN0b3IuaHRtbAppbmRleCA3NDBhYTBkLi43ZWU3MjliIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKQEAgLTEw
OSw4ICsxMDksOCBAQCBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9IlRleHRWaWV3ZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9IlNvdXJjZUZyYW1lLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJSZXNvdXJjZVZpZXcuanMiPjwvc2NyaXB0PgotICAg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlNjcmlwdHNQYW5lbC5qcyI+PC9z
Y3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iSmF2YVNjcmlw
dFNvdXJjZUZyYW1lLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJTY3JpcHRzUGFuZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9IlJlc291cmNlc1BhbmVsLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJQcm9maWxlc1BhbmVsLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJDb25zb2xlUGFu
ZWwuanMiPjwvc2NyaXB0Pgo=
</data>
<flag name="review"
          id="110825"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>