<?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>89939</bug_id>
          
          <creation_ts>2012-06-25 19:39:42 -0700</creation_ts>
          <short_desc>Web Inspector: WebInspector.TextViewer should be renamed WebInspector.TextEditor</short_desc>
          <delta_ts>2012-07-03 01:48:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://trac.webkit.org/browser/trunk/Source/WebCore/inspector/front-end/TextViewer.js</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jan Keromnes">janx</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aandrey</cc>
    
    <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>mifenton</cc>
    
    <cc>ossy</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>vsevik</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>657196</commentid>
    <comment_count>0</comment_count>
    <who name="Jan Keromnes">janx</who>
    <bug_when>2012-06-25 19:39:42 -0700</bug_when>
    <thetext>The class `WebInspector.TextViewer` is obviously not a &quot;viewer&quot; anymore but an &quot;editor&quot;. We should rename it to `WebInspector.TextEditor`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658152</commentid>
    <comment_count>1</comment_count>
      <attachid>149645</attachid>
    <who name="Jan Keromnes">janx</who>
    <bug_when>2012-06-26 17:37:34 -0700</bug_when>
    <thetext>Created attachment 149645
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658192</commentid>
    <comment_count>2</comment_count>
      <attachid>149645</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-26 18:08:40 -0700</bug_when>
    <thetext>Comment on attachment 149645
Patch

Attachment 149645 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13096616</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658215</commentid>
    <comment_count>3</comment_count>
    <who name="Jan Keromnes">janx</who>
    <bug_when>2012-06-26 18:31:46 -0700</bug_when>
    <thetext>Ossy: Looks like the patch might break the qt build. The trybot says &quot;dependencies are not automatically re-computed for local developer builds&quot;, how can I re-compute them manually?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658307</commentid>
    <comment_count>4</comment_count>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2012-06-26 21:00:28 -0700</bug_when>
    <thetext>Also modify the WebCore.xcodeproj/project.pbxproj file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658373</commentid>
    <comment_count>5</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-06-26 23:15:56 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Ossy: Looks like the patch might break the qt build. The trybot says &quot;dependencies are not automatically re-computed for local developer builds&quot;, how can I re-compute them manually?

Fortunately it isn&apos;t as big problem as you can see now. Build will 
work fine on the bots, because they recompute dependency always. 

But it is an annoying bug, which causes false positive alarms on the EWS
sometimes. I filed a new bug report and try to fix it soon - https://bugs.webkit.org/show_bug.cgi?id=90049

Thanks for noticing this problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658486</commentid>
    <comment_count>6</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-06-27 02:20:16 -0700</bug_when>
    <thetext>(In reply to comment #5)
FYI: The incremental build problem on the Qt EWS bots is fixed - https://bugs.webkit.org/show_bug.cgi?id=90049</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658523</commentid>
    <comment_count>7</comment_count>
    <who name="Jan Keromnes">janx</who>
    <bug_when>2012-06-27 04:24:17 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Also modify the WebCore.xcodeproj/project.pbxproj file.

This file doesn&apos;t seem to have any occurrences of either `TextViewer.js` or `textViewer.css`, so I guess Xcode builds by copying the entire `front-end` folder -- no need to modify it.

(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; FYI: The incremental build problem on the Qt EWS bots is fixed - https://bugs.webkit.org/show_bug.cgi?id=90049

Great news! Thanks for fixing that so quickly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660472</commentid>
    <comment_count>8</comment_count>
      <attachid>149645</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-06-29 07:46:47 -0700</bug_when>
    <thetext>Comment on attachment 149645
Patch

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

I&apos;d land this manually.

&gt; Source/WebCore/inspector/front-end/TextEditor.js:1
&gt; +/*

Your git status detected that it is just a rename, right? We don&apos;t want to lose nice annotation history.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660671</commentid>
    <comment_count>9</comment_count>
    <who name="Jan Keromnes">janx</who>
    <bug_when>2012-06-29 11:35:40 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Your git status detected that it is just a rename, right? We don&apos;t want to lose nice annotation history.

&gt; 20 files changed, 205 insertions(+), 120 deletions(-)
&gt; rename Source/WebCore/inspector/front-end/{TextViewer.js =&gt; TextEditor.js} (96%)
&gt; rename Source/WebCore/inspector/front-end/{textViewer.css =&gt; textEditor.css} (100%)

Git detects that it&apos;s just a rename, but I&apos;m not sure about webkit-patch. Landing it manually sounds like a good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661451</commentid>
    <comment_count>10</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-07-02 06:35:53 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Your git status detected that it is just a rename, right? We don&apos;t want to lose nice annotation history.
&gt; 
&gt; &gt; 20 files changed, 205 insertions(+), 120 deletions(-)
&gt; &gt; rename Source/WebCore/inspector/front-end/{TextViewer.js =&gt; TextEditor.js} (96%)
&gt; &gt; rename Source/WebCore/inspector/front-end/{textViewer.css =&gt; textEditor.css} (100%)
&gt; 
&gt; Git detects that it&apos;s just a rename, but I&apos;m not sure about webkit-patch. Landing it manually sounds like a good idea.

Could you rebase and upload it again? Vsevolod has added quite a bit of annotations and the patch does not apply well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661777</commentid>
    <comment_count>11</comment_count>
      <attachid>150486</attachid>
    <who name="Jan Keromnes">janx</who>
    <bug_when>2012-07-02 15:46:46 -0700</bug_when>
    <thetext>Created attachment 150486
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661787</commentid>
    <comment_count>12</comment_count>
    <who name="Jan Keromnes">janx</who>
    <bug_when>2012-07-02 15:54:22 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Could you rebase and upload it again? Vsevolod has added quite a bit of annotations and the patch does not apply well.

The new patch fast-forwards from http://trac.webkit.org/changeset/121688.

I also tried to get webkit-patch to understand the file renames but your `git config diff.renames copies` trick didn&apos;t work for me. I guess you&apos;re going to have to do a lean diff again, sorry about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662058</commentid>
    <comment_count>13</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-07-03 01:45:25 -0700</bug_when>
    <thetext>Committed r121746: &lt;http://trac.webkit.org/changeset/121746&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149645</attachid>
            <date>2012-06-26 17:37:34 -0700</date>
            <delta_ts>2012-07-02 15:46:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89939-20120626173733.patch</filename>
            <type>text/plain</type>
            <size>207380</size>
            <attacher name="Jan Keromnes">janx</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMjY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODVlNDI3OGIyOWMyMDEw
N2NjZDdjNjU1MTRkOTc1ZGE4OGY4NWIxNS4uODc0ZGIzZmQyMWQyNzdlYjMwMDhmYmMyYjVjNGU3
NzgwOGQ0NjJlMSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTA2LTI2ICBKYW4g
S2Vyb21uZXMgIDxqYW54QGxpbnV4LmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBXZWJJ
bnNwZWN0b3IuVGV4dFZpZXdlciBzaG91bGQgYmUgcmVuYW1lZCBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk5
MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXhl
ZCBMYXlvdXRUZXN0cyBhbmQgUGVyZm9ybWFuY2VUZXN0cyBhY2NvcmRpbmdseS4KKworICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBpbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHk6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9BZHZhbmNlZFNlYXJjaENvbnRyb2xsZXIuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU2VhcmNoVmlldyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9KYXZhU2NyaXB0U291cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNj
cmlwdFNvdXJjZUZyYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNl
RnJhbWUucHJvdG90eXBlLl9vbkhpZGVQb3BvdmVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5K
YXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLl9hZGRCcmVha3BvaW50RGVjb3JhdGlvbik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5f
cmVtb3ZlQnJlYWtwb2ludERlY29yYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFT
Y3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUuX2VkaXRCcmVha3BvaW50Q29uZGl0aW9uLmZpbmlz
aEVkaXRpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5w
cm90b3R5cGUuX2VkaXRCcmVha3BvaW50Q29uZGl0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLnNldEV4ZWN1dGlvbkxpbmUpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUuY2xlYXJF
eGVjdXRpb25MaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJh
bWUucHJvdG90eXBlLm9uVGV4dEVkaXRvckNvbnRlbnRMb2FkZWQpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS53
YXNTaG93bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLndp
bGxIaWRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuZGVm
YXVsdEZvY3VzZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUuZ2V0IHRleHRFZGl0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZS5jbGVhck1lc3NhZ2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUuaGlnaGxpZ2h0TGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlLl9jbGVhckxpbmVIaWdobGlnaHQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5yZXZlYWxMaW5lKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuc2V0Q29udGVudCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLm9uVGV4dEVkaXRvckNvbnRlbnRMb2Fk
ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fc2V0VGV4
dEVkaXRvckRlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUuc2VhcmNoQ2FuY2VsZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZS5qdW1wVG9TZWFyY2hSZXN1bHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZS5hZGRNZXNzYWdlVG9Tb3VyY2UpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5yZW1vdmVNZXNzYWdlRnJvbVNvdXJjZSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmluaGVyaXRTY3Jv
bGxQb3NpdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JEZWxlZ2F0ZUZv
clNvdXJjZUZyYW1lKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIu
anM6IFJlbW92ZWQuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjOgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0Vmlld2VyLmNzczogUmVtb3ZlZC4KKwogMjAxMi0wNi0y
NiAgQWxleGVpIEZpbGlwcG92ICA8YWxleGVpZkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogTmF0aXZlIG1lbW9yeSBzbmFwc2hvdHMgY3Jhc2ggaW4gZGVidWcgbW9kZS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCmluZGV4IDQ0NjY1YjdkMmIyZjYxYjBlMGM0ODAy
ZTRhOTRhNDE0ZWZlMzAyZWUuLmMyMTU4Y2JkZjFjYmE1MzEyNGExYzViZWY5OWYwNDNjYmY2Mzc5
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEy
LTA2LTI2ICBKYW4gS2Vyb21uZXMgIDxqYW54QGxpbnV4LmNvbT4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlciBzaG91bGQgYmUgcmVuYW1lZCBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODk5MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L2luc3BlY3RvckJCLmh0bWw6CisKIDIwMTItMDYtMjYg
IEpvbmF0aGFuIERvbmcgIDxqb25hdGhhbi5kb25nQHRvcmNobW9iaWxlLmNvbS5jbj4KIAogICAg
ICAgICBbQmxhY2tCZXJyeV0gTGltaXQgc2Vzc2lvbiBzdG9yYWdlIHF1b3RhIHRvIDVNQiBieSBk
ZWZhdWx0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZTllYmQ2YzFmNGUzOGRkODI1MDQ0ZWUxNDEwOWM0
MWMzOWFlOWI0Mi4uYjdmMDZiZjI2YzJlZTg5ZDc3MjExMTQ1OTUwNGRlNDJiNTUxOWZiNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtNjU1MywxMCArNjU1MywxMCBAQAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvVGFiYmVkRWRpdG9yQ29udGFpbmVyLmpzJywKICAgICAgICAgICAgICdp
bnNwZWN0b3IvZnJvbnQtZW5kL1RhYmJlZFBhbmUuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9mcm9udC1lbmQvVGVzdENvbnRyb2xsZXIuanMnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9m
cm9udC1lbmQvVGV4dEVkaXRvci5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVu
ZC9UZXh0RWRpdG9ySGlnaGxpZ2h0ZXIuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9u
dC1lbmQvVGV4dEVkaXRvck1vZGVsLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQt
ZW5kL1RleHRQcm9tcHQuanMnLAotICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvVGV4
dFZpZXdlci5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZUZy
YW1lQ29udHJvbGxlci5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1l
bGluZU1hbmFnZXIuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxp
bmVNb2RlbC5qcycsCkBAIC02NjAzLDggKzY2MDMsOCBAQAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9mcm9udC1lbmQvc2NyaXB0c1BhbmVsLmNzcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zy
b250LWVuZC9zcGxpdFZpZXcuY3NzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5k
L3RhYmJlZFBhbmUuY3NzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRF
ZGl0b3IuY3NzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRQcm9tcHQu
Y3NzJywKLSAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRWaWV3ZXIuY3NzJywK
ICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL3RpbWVsaW5lUGFuZWwuY3NzJywKICAg
ICAgICAgXSwKICAgICAgICAgJ3dlYmluc3BlY3Rvcl91Z2xpZnlqc19maWxlcyc6IFsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggZDEyZGI1NjZj
OGMzOTU5NmZkMGYxMjU0OGUwNzExNTY4NmMxMjdlOS4uMTk2YjcyMTg0ZDU3MzJjYTg0MTM3ODhk
YmVkMGIwYzA2YjJmNmRmYiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKQEAgLTc1NDIyLDI3ICs3NTQyMiwyNyBAQAogCQkJCQk+CiAJCQkJPC9GaWxl
PgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxU
ZXh0RWRpdG9ySGlnaGxpZ2h0ZXIuanMiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFx0ZXh0RWRpdG9yLmNzcyIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8Rmls
ZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGV4dEVkaXRvck1v
ZGVsLmpzIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGV4dEVk
aXRvci5qcyIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcdGV4dFByb21wdC5jc3MiCisJCQkJCVJlbGF0aXZl
UGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxUZXh0RWRpdG9ySGlnaGxpZ2h0ZXIuanMiCiAJ
CQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXFRleHRQcm9tcHQuanMiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5z
cGVjdG9yXGZyb250LWVuZFxUZXh0RWRpdG9yTW9kZWwuanMiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+
CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXHRl
eHRWaWV3ZXIuY3NzIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
dGV4dFByb21wdC5jc3MiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKLQkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFRleHRWaWV3ZXIuanMiCisJCQkJCVJl
bGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxUZXh0UHJvbXB0LmpzIgogCQkJCQk+
CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29t
cGlsZS1mcm9udC1lbmQucHkKaW5kZXggYzMyODE1YmU3YmE1YTAwOGUzNTczYjJhMmYxNjBkMWU4
YjdmNTE3MS4uMjA2MmY2OTZjNjUxNjI4OThjYzE2MGU3MmNhZjg0NzQ3OWM4M2Y3MyAxMDA3NTUK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5CisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5weQpAQCAtMTQzLDgg
KzE0Myw4IEBAIG1vZHVsZXMgPSBbCiAgICAgICAgICAgICAiVGFiYmVkUGFuZS5qcyIsCiAgICAg
ICAgICAgICAiVGV4dEVkaXRvck1vZGVsLmpzIiwKICAgICAgICAgICAgICJUZXh0RWRpdG9ySGln
aGxpZ2h0ZXIuanMiLAorICAgICAgICAgICAgIlRleHRFZGl0b3IuanMiLAogICAgICAgICAgICAg
IlRleHRQcm9tcHQuanMiLAotICAgICAgICAgICAgIlRleHRWaWV3ZXIuanMiLAogICAgICAgICAg
ICAgIlRvb2xiYXIuanMiLAogICAgICAgICAgICAgIlVJVXRpbHMuanMiLAogICAgICAgICAgICAg
IlZpZXcuanMiLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9BZHZhbmNlZFNlYXJjaENvbnRyb2xsZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0FkdmFuY2VkU2VhcmNoQ29udHJvbGxlci5qcwppbmRleCBkN2VjMjE0ZjMzODEw
MTJmN2Y5NTRkMTZiMzkyM2NlYjIyMTJiZDE0Li5iODJmNzc0ODViZjUwNDM0ODU4OGY0NzJiMGJi
Mzk5NWI3ZDcwZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0FkdmFuY2VkU2VhcmNoQ29udHJvbGxlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0FkdmFuY2VkU2VhcmNoQ29udHJvbGxlci5qcwpAQCAtMTcyLDcgKzE3
Miw3IEBAIFdlYkluc3BlY3Rvci5BZHZhbmNlZFNlYXJjaENvbnRyb2xsZXIucHJvdG90eXBlID0g
ewogV2ViSW5zcGVjdG9yLlNlYXJjaFZpZXcgPSBmdW5jdGlvbihjb250cm9sbGVyKQogewogICAg
IFdlYkluc3BlY3Rvci5WaWV3LmNhbGwodGhpcyk7Ci0gICAgdGhpcy5yZWdpc3RlclJlcXVpcmVk
Q1NTKCJ0ZXh0Vmlld2VyLmNzcyIpOworICAgIHRoaXMucmVnaXN0ZXJSZXF1aXJlZENTUygidGV4
dEVkaXRvci5jc3MiKTsKICAgICAKICAgICB0aGlzLl9jb250cm9sbGVyID0gY29udHJvbGxlcjsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9KYXZhU2Ny
aXB0U291cmNlRnJhbWUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ph
dmFTY3JpcHRTb3VyY2VGcmFtZS5qcwppbmRleCBjMjMxZTAzNGQzMDNmYjlkNmNiODBhYTc3ZmQ1
NzkwMjc0OGJlNjlmLi4xMjYzNjcxOWI5NDU5Nzk1Yjg5MmFkYWZlNzc1OTY5ZTk3ZjU0ZWZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRT
b3VyY2VGcmFtZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ph
dmFTY3JpcHRTb3VyY2VGcmFtZS5qcwpAQCAtNDYsMTEgKzQ2LDExIEBAIFdlYkluc3BlY3Rvci5K
YXZhU2NyaXB0U291cmNlRnJhbWUgPSBmdW5jdGlvbihzY3JpcHRzUGFuZWwsIGphdmFTY3JpcHRT
b3VyY2UpCiAKICAgICBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUuY2FsbCh0aGlzLCBqYXZhU2Ny
aXB0U291cmNlKTsKIAotICAgIHRoaXMuX3BvcG92ZXJIZWxwZXIgPSBuZXcgV2ViSW5zcGVjdG9y
Lk9iamVjdFBvcG92ZXJIZWxwZXIodGhpcy50ZXh0Vmlld2VyLmVsZW1lbnQsCisgICAgdGhpcy5f
cG9wb3ZlckhlbHBlciA9IG5ldyBXZWJJbnNwZWN0b3IuT2JqZWN0UG9wb3ZlckhlbHBlcih0aGlz
LnRleHRFZGl0b3IuZWxlbWVudCwKICAgICAgICAgICAgIHRoaXMuX2dldFBvcG92ZXJBbmNob3Iu
YmluZCh0aGlzKSwgdGhpcy5fcmVzb2x2ZU9iamVjdEZvclBvcG92ZXIuYmluZCh0aGlzKSwgdGhp
cy5fb25IaWRlUG9wb3Zlci5iaW5kKHRoaXMpLCB0cnVlKTsKIAotICAgIHRoaXMudGV4dFZpZXdl
ci5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMuX29uTW91c2VEb3du
LmJpbmQodGhpcyksIHRydWUpOwotICAgIHRoaXMudGV4dFZpZXdlci5lbGVtZW50LmFkZEV2ZW50
TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKSwgdHJ1ZSk7Cisg
ICAgdGhpcy50ZXh0RWRpdG9yLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwg
dGhpcy5fb25Nb3VzZURvd24uYmluZCh0aGlzKSwgdHJ1ZSk7CisgICAgdGhpcy50ZXh0RWRpdG9y
LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuX29uS2V5RG93bi5iaW5k
KHRoaXMpLCB0cnVlKTsKIAogICAgIHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkV2ZW50cy5CcmVha3BvaW50QWRk
ZWQsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7CiAgICAgdGhpcy5fYnJlYWtwb2ludE1h
bmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuRXZl
bnRzLkJyZWFrcG9pbnRSZW1vdmVkLCB0aGlzLl9icmVha3BvaW50UmVtb3ZlZCwgdGhpcyk7CkBA
IC0yNzUsNyArMjc1LDcgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90
b3R5cGUgPSB7CiAgICAgICAgIGlmICghaGlnaGxpZ2h0RWxlbWVudCkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgLy8gRklYTUU6IHRoZSB0ZXh0IGVkaXRvciBzaG91bGQgbWFpbnRhaW4g
aGlnaGxpZ2h0IG9uIGl0cyBvd24uIFRoZSBjaGVjayBiZWxvdyBpcyBhIHdvcmthcm91bmQgZm9y
Ci0gICAgICAgIC8vIHRoZSBjYXNlIHdoZW4gaGlnaGxpZ2h0IGVsZW1lbnQgaXMgZGV0YWNoZWQg
ZnJvbSBET00gYnkgdGhlIFRleHRWaWV3ZXIgd2hlbiByZS1idWlsZGluZyB0aGUgRE9NLgorICAg
ICAgICAvLyB0aGUgY2FzZSB3aGVuIGhpZ2hsaWdodCBlbGVtZW50IGlzIGRldGFjaGVkIGZyb20g
RE9NIGJ5IHRoZSBUZXh0RWRpdG9yIHdoZW4gcmUtYnVpbGRpbmcgdGhlIERPTS4KICAgICAgICAg
dmFyIHBhcmVudEVsZW1lbnQgPSBoaWdobGlnaHRFbGVtZW50LnBhcmVudEVsZW1lbnQ7CiAgICAg
ICAgIGlmIChwYXJlbnRFbGVtZW50KSB7CiAgICAgICAgICAgICB2YXIgY2hpbGQgPSBoaWdobGln
aHRFbGVtZW50LmZpcnN0Q2hpbGQ7CkBAIC0zMjQsMjcgKzMyNCwyNyBAQCBXZWJJbnNwZWN0b3Iu
SmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgfTsKICAgICAgICAg
dGhpcy50ZXh0TW9kZWwuc2V0QXR0cmlidXRlKGxpbmVOdW1iZXIsICJicmVha3BvaW50IiwgYnJl
YWtwb2ludCk7CiAKLSAgICAgICAgdGhpcy50ZXh0Vmlld2VyLmJlZ2luVXBkYXRlcygpOwotICAg
ICAgICB0aGlzLnRleHRWaWV3ZXIuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJy
ZWFrcG9pbnQiKTsKKyAgICAgICAgdGhpcy50ZXh0RWRpdG9yLmJlZ2luVXBkYXRlcygpOworICAg
ICAgICB0aGlzLnRleHRFZGl0b3IuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJy
ZWFrcG9pbnQiKTsKICAgICAgICAgaWYgKCFlbmFibGVkIHx8IG11dGVkV2hpbGVFZGl0aW5nKQot
ICAgICAgICAgICAgdGhpcy50ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndl
YmtpdC1icmVha3BvaW50LWRpc2FibGVkIik7CisgICAgICAgICAgICB0aGlzLnRleHRFZGl0b3Iu
YWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtZGlzYWJsZWQiKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy50ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRp
b24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50LWRpc2FibGVkIik7CisgICAgICAgICAg
ICB0aGlzLnRleHRFZGl0b3IucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJy
ZWFrcG9pbnQtZGlzYWJsZWQiKTsKICAgICAgICAgaWYgKCEhY29uZGl0aW9uKQotICAgICAgICAg
ICAgdGhpcy50ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVh
a3BvaW50LWNvbmRpdGlvbmFsIik7CisgICAgICAgICAgICB0aGlzLnRleHRFZGl0b3IuYWRkRGVj
b3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy50ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24o
bGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50LWNvbmRpdGlvbmFsIik7Ci0gICAgICAgIHRo
aXMudGV4dFZpZXdlci5lbmRVcGRhdGVzKCk7CisgICAgICAgICAgICB0aGlzLnRleHRFZGl0b3Iu
cmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9u
YWwiKTsKKyAgICAgICAgdGhpcy50ZXh0RWRpdG9yLmVuZFVwZGF0ZXMoKTsKICAgICB9LAogCiAg
ICAgX3JlbW92ZUJyZWFrcG9pbnREZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyKQogICAg
IHsKICAgICAgICAgdGhpcy50ZXh0TW9kZWwucmVtb3ZlQXR0cmlidXRlKGxpbmVOdW1iZXIsICJi
cmVha3BvaW50Iik7Ci0gICAgICAgIHRoaXMudGV4dFZpZXdlci5iZWdpblVwZGF0ZXMoKTsKLSAg
ICAgICAgdGhpcy50ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwgIndlYmtp
dC1icmVha3BvaW50Iik7Ci0gICAgICAgIHRoaXMudGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9u
KGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZCIpOwotICAgICAgICB0aGlz
LnRleHRWaWV3ZXIucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9p
bnQtY29uZGl0aW9uYWwiKTsKLSAgICAgICAgdGhpcy50ZXh0Vmlld2VyLmVuZFVwZGF0ZXMoKTsK
KyAgICAgICAgdGhpcy50ZXh0RWRpdG9yLmJlZ2luVXBkYXRlcygpOworICAgICAgICB0aGlzLnRl
eHRFZGl0b3IucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQi
KTsKKyAgICAgICAgdGhpcy50ZXh0RWRpdG9yLnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwg
IndlYmtpdC1icmVha3BvaW50LWRpc2FibGVkIik7CisgICAgICAgIHRoaXMudGV4dEVkaXRvci5y
ZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1jb25kaXRpb25h
bCIpOworICAgICAgICB0aGlzLnRleHRFZGl0b3IuZW5kVXBkYXRlcygpOwogICAgIH0sCiAKICAg
ICBfb25Nb3VzZURvd246IGZ1bmN0aW9uKGV2ZW50KQpAQCAtMzg3LDExICszODcsMTEgQEAgV2Vi
SW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgX2VkaXRC
cmVha3BvaW50Q29uZGl0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBicmVha3BvaW50KQogICAg
IHsKICAgICAgICAgdGhpcy5fY29uZGl0aW9uRWxlbWVudCA9IHRoaXMuX2NyZWF0ZUNvbmRpdGlv
bkVsZW1lbnQobGluZU51bWJlcik7Ci0gICAgICAgIHRoaXMudGV4dFZpZXdlci5hZGREZWNvcmF0
aW9uKGxpbmVOdW1iZXIsIHRoaXMuX2NvbmRpdGlvbkVsZW1lbnQpOworICAgICAgICB0aGlzLnRl
eHRFZGl0b3IuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCB0aGlzLl9jb25kaXRpb25FbGVtZW50
KTsKIAogICAgICAgICBmdW5jdGlvbiBmaW5pc2hFZGl0aW5nKGNvbW1pdHRlZCwgZWxlbWVudCwg
bmV3VGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgdGhpcy50ZXh0Vmlld2VyLnJlbW92ZURl
Y29yYXRpb24obGluZU51bWJlciwgdGhpcy5fY29uZGl0aW9uRWxlbWVudCk7CisgICAgICAgICAg
ICB0aGlzLnRleHRFZGl0b3IucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCB0aGlzLl9jb25k
aXRpb25FbGVtZW50KTsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jb25kaXRpb25FZGl0b3JF
bGVtZW50OwogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NvbmRpdGlvbkVsZW1lbnQ7CiAgICAg
ICAgICAgICBpZiAoYnJlYWtwb2ludCkKQEAgLTQzNCw3ICs0MzQsNyBAQCBXZWJJbnNwZWN0b3Iu
SmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHRoaXMu
X2V4ZWN1dGlvbkxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwogICAgICAgICBpZiAodGhpcy5sb2Fk
ZWQpIHsKLSAgICAgICAgICAgIHRoaXMudGV4dFZpZXdlci5hZGREZWNvcmF0aW9uKGxpbmVOdW1i
ZXIsICJ3ZWJraXQtZXhlY3V0aW9uLWxpbmUiKTsKKyAgICAgICAgICAgIHRoaXMudGV4dEVkaXRv
ci5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtZXhlY3V0aW9uLWxpbmUiKTsKICAg
ICAgICAgICAgIHRoaXMucmV2ZWFsTGluZSh0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyKTsKICAg
ICAgICAgfQogICAgIH0sCkBAIC00NDIsNyArNDQyLDcgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3Jp
cHRTb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgY2xlYXJFeGVjdXRpb25MaW5lOiBmdW5j
dGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5sb2FkZWQgJiYgdHlwZW9mIHRoaXMuX2V4
ZWN1dGlvbkxpbmVOdW1iZXIgPT09ICJudW1iZXIiKQotICAgICAgICAgICAgdGhpcy50ZXh0Vmll
d2VyLnJlbW92ZURlY29yYXRpb24odGhpcy5fZXhlY3V0aW9uTGluZU51bWJlciwgIndlYmtpdC1l
eGVjdXRpb24tbGluZSIpOworICAgICAgICAgICAgdGhpcy50ZXh0RWRpdG9yLnJlbW92ZURlY29y
YXRpb24odGhpcy5fZXhlY3V0aW9uTGluZU51bWJlciwgIndlYmtpdC1leGVjdXRpb24tbGluZSIp
OwogICAgICAgICBkZWxldGUgdGhpcy5fZXhlY3V0aW9uTGluZU51bWJlcjsKICAgICB9LAogCkBA
IC01MTAsNyArNTEwLDcgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuY2xlYXJNZXNzYWdlcygpOwogICAgIH0sCiAKLSAgICBv
blRleHRWaWV3ZXJDb250ZW50TG9hZGVkOiBmdW5jdGlvbigpCisgICAgb25UZXh0RWRpdG9yQ29u
dGVudExvYWRlZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9l
eGVjdXRpb25MaW5lTnVtYmVyID09PSAibnVtYmVyIikKICAgICAgICAgICAgIHRoaXMuc2V0RXhl
Y3V0aW9uTGluZSh0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCmluZGV4IDI2ODlhNzcyZGFl
ZjYzN2QxYjA1MmQ2ODhlNjQ0NmYxMGFkMmQ0NmYuLjE2NWNiY2VkMTFkMmE2ZGJiZTViNzJjZDQ4
Y2FjNDA0ZWE3NGM0YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlRnJhbWUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Tb3VyY2VGcmFtZS5qcwpAQCAtNDMsOCArNDMsOCBAQCBXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUgPSBmdW5jdGlvbihjb250ZW50UHJvdmlkZXIpCiAKICAgICB0aGlzLl90ZXh0TW9kZWwg
PSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNb2RlbCgpOwogCi0gICAgdmFyIHRleHRWaWV3
ZXJEZWxlZ2F0ZSA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlckRlbGVnYXRlRm9yU291cmNl
RnJhbWUodGhpcyk7Ci0gICAgdGhpcy5fdGV4dFZpZXdlciA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4
dFZpZXdlcih0aGlzLl90ZXh0TW9kZWwsIFdlYkluc3BlY3Rvci5wbGF0Zm9ybSgpLCB0aGlzLl91
cmwsIHRleHRWaWV3ZXJEZWxlZ2F0ZSk7CisgICAgdmFyIHRleHRFZGl0b3JEZWxlZ2F0ZSA9IG5l
dyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckRlbGVnYXRlRm9yU291cmNlRnJhbWUodGhpcyk7Cisg
ICAgdGhpcy5fdGV4dEVkaXRvciA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvcih0aGlzLl90
ZXh0TW9kZWwsIFdlYkluc3BlY3Rvci5wbGF0Zm9ybSgpLCB0aGlzLl91cmwsIHRleHRFZGl0b3JE
ZWxlZ2F0ZSk7CiAKICAgICB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPSAtMTsKICAg
ICB0aGlzLl9zZWFyY2hSZXN1bHRzID0gW107CkBAIC01Myw3ICs1Myw3IEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZSA9IGZ1bmN0aW9uKGNvbnRlbnRQcm92aWRlcikKICAgICB0aGlzLl9yb3dN
ZXNzYWdlcyA9IHt9OwogICAgIHRoaXMuX21lc3NhZ2VCdWJibGVzID0ge307CiAKLSAgICB0aGlz
Ll90ZXh0Vmlld2VyLnNldFJlYWRPbmx5KCF0aGlzLmNhbkVkaXRTb3VyY2UoKSk7CisgICAgdGhp
cy5fdGV4dEVkaXRvci5zZXRSZWFkT25seSghdGhpcy5jYW5FZGl0U291cmNlKCkpOwogfQogCiBX
ZWJJbnNwZWN0b3IuU291cmNlRnJhbWUuY3JlYXRlU2VhcmNoUmVnZXggPSBmdW5jdGlvbihxdWVy
eSkKQEAgLTc5LDE0ICs3OSwxNCBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBl
ID0gewogICAgIHdhc1Nob3duOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl9lbnN1
cmVDb250ZW50TG9hZGVkKCk7Ci0gICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuc2hvdyh0aGlzLmVs
ZW1lbnQpOworICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLnNob3codGhpcy5lbGVtZW50KTsKICAg
ICB9LAogCiAgICAgd2lsbEhpZGU6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIFdlYkluc3Bl
Y3Rvci5WaWV3LnByb3RvdHlwZS53aWxsSGlkZS5jYWxsKHRoaXMpOwogICAgICAgICBpZiAodGhp
cy5sb2FkZWQpCi0gICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmZyZWVDYWNoZWRFbGVtZW50
cygpOworICAgICAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5mcmVlQ2FjaGVkRWxlbWVudHMoKTsK
IAogICAgICAgICB0aGlzLl9jbGVhckxpbmVIaWdobGlnaHQoKTsKICAgICAgICAgdGhpcy5fY2xl
YXJMaW5lVG9SZXZlYWwoKTsKQEAgLTk0LDcgKzk0LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZSA9IHsKIAogICAgIGRlZmF1bHRGb2N1c2VkRWxlbWVudDogZnVuY3Rpb24o
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRWaWV3ZXIuZGVmYXVsdEZvY3VzZWRF
bGVtZW50KCk7CisgICAgICAgIHJldHVybiB0aGlzLl90ZXh0RWRpdG9yLmRlZmF1bHRGb2N1c2Vk
RWxlbWVudCgpOwogICAgIH0sCiAKICAgICBnZXQgbG9hZGVkKCkKQEAgLTEwNyw5ICsxMDcsOSBA
QCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9LAogCi0gICAgZ2V0IHRleHRWaWV3ZXIoKQorICAgIGdldCB0ZXh0RWRpdG9y
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl90ZXh0Vmlld2VyOworICAgICAgICByZXR1
cm4gdGhpcy5fdGV4dEVkaXRvcjsKICAgICB9LAogCiAgICAgX2Vuc3VyZUNvbnRlbnRMb2FkZWQ6
IGZ1bmN0aW9uKCkKQEAgLTEzOCw3ICsxMzgsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUu
cHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9yb3dNZXNzYWdlcyA9IHt9OwogICAgICAgICB0
aGlzLl9tZXNzYWdlQnViYmxlcyA9IHt9OwogCi0gICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuZG9S
ZXNpemUoKTsKKyAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5kb1Jlc2l6ZSgpOwogICAgIH0sCiAK
ICAgICBnZXQgdGV4dE1vZGVsKCkKQEAgLTE1NSw3ICsxNTUsNyBAQCBXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgdGhpcy5fY2xlYXJMaW5lVG9S
ZXZlYWwoKTsKICAgICAgICAgaWYgKHRoaXMubG9hZGVkKQotICAgICAgICAgICAgdGhpcy5fdGV4
dFZpZXdlci5oaWdobGlnaHRMaW5lKGxpbmUpOworICAgICAgICAgICAgdGhpcy5fdGV4dEVkaXRv
ci5oaWdobGlnaHRMaW5lKGxpbmUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0aGlzLl9s
aW5lVG9IaWdobGlnaHQgPSBsaW5lOwogICAgIH0sCkBAIC0xNjMsNyArMTYzLDcgQEAgV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICBfY2xlYXJMaW5lSGlnaGxpZ2h0
OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5sb2FkZWQpCi0gICAgICAgICAg
ICB0aGlzLl90ZXh0Vmlld2VyLmNsZWFyTGluZUhpZ2hsaWdodCgpOworICAgICAgICAgICAgdGhp
cy5fdGV4dEVkaXRvci5jbGVhckxpbmVIaWdobGlnaHQoKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgZGVsZXRlIHRoaXMuX2xpbmVUb0hpZ2hsaWdodDsKICAgICB9LApAQCAtMTcyLDcgKzE3
Miw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgewogICAg
ICAgICB0aGlzLl9jbGVhckxpbmVIaWdobGlnaHQoKTsKICAgICAgICAgaWYgKHRoaXMubG9hZGVk
KQotICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZXZlYWxMaW5lKGxpbmUpOworICAgICAg
ICAgICAgdGhpcy5fdGV4dEVkaXRvci5yZXZlYWxMaW5lKGxpbmUpOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICB0aGlzLl9saW5lVG9SZXZlYWwgPSBsaW5lOwogICAgIH0sCkBAIC0xOTksMTQg
KzE5OSwxNCBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAq
LwogICAgIHNldENvbnRlbnQ6IGZ1bmN0aW9uKGNvbnRlbnQsIGNvbnRlbnRFbmNvZGVkLCBtaW1l
VHlwZSkKICAgICB7Ci0gICAgICAgIHRoaXMuX3RleHRWaWV3ZXIubWltZVR5cGUgPSBtaW1lVHlw
ZTsKKyAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5taW1lVHlwZSA9IG1pbWVUeXBlOwogCiAgICAg
ICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7CiAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5zZXRUZXh0
KGNvbnRlbnQgfHwgIiIpOwogCi0gICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYmVnaW5VcGRhdGVz
KCk7CisgICAgICAgIHRoaXMuX3RleHRFZGl0b3IuYmVnaW5VcGRhdGVzKCk7CiAKLSAgICAgICAg
dGhpcy5fc2V0VGV4dFZpZXdlckRlY29yYXRpb25zKCk7CisgICAgICAgIHRoaXMuX3NldFRleHRF
ZGl0b3JEZWNvcmF0aW9ucygpOwogCiAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fbGluZVRvSGln
aGxpZ2h0ID09PSAibnVtYmVyIikgewogICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRMaW5lKHRo
aXMuX2xpbmVUb0hpZ2hsaWdodCk7CkBAIC0yMjMsMjUgKzIyMywyNSBAQCBXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2RlbGF5
ZWRGaW5kU2VhcmNoTWF0Y2hlczsKICAgICAgICAgfQogCi0gICAgICAgIHRoaXMub25UZXh0Vmll
d2VyQ29udGVudExvYWRlZCgpOworICAgICAgICB0aGlzLm9uVGV4dEVkaXRvckNvbnRlbnRMb2Fk
ZWQoKTsKIAotICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmVuZFVwZGF0ZXMoKTsKKyAgICAgICAg
dGhpcy5fdGV4dEVkaXRvci5lbmRVcGRhdGVzKCk7CiAgICAgfSwKIAotICAgIG9uVGV4dFZpZXdl
ckNvbnRlbnRMb2FkZWQ6IGZ1bmN0aW9uKCkge30sCisgICAgb25UZXh0RWRpdG9yQ29udGVudExv
YWRlZDogZnVuY3Rpb24oKSB7fSwKIAotICAgIF9zZXRUZXh0Vmlld2VyRGVjb3JhdGlvbnM6IGZ1
bmN0aW9uKCkKKyAgICBfc2V0VGV4dEVkaXRvckRlY29yYXRpb25zOiBmdW5jdGlvbigpCiAgICAg
ewogICAgICAgICB0aGlzLl9yb3dNZXNzYWdlcyA9IHt9OwogICAgICAgICB0aGlzLl9tZXNzYWdl
QnViYmxlcyA9IHt9OwogCi0gICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYmVnaW5VcGRhdGVzKCk7
CisgICAgICAgIHRoaXMuX3RleHRFZGl0b3IuYmVnaW5VcGRhdGVzKCk7CiAKICAgICAgICAgdGhp
cy5fYWRkRXhpc3RpbmdNZXNzYWdlc1RvU291cmNlKCk7CiAKLSAgICAgICAgdGhpcy5fdGV4dFZp
ZXdlci5kb1Jlc2l6ZSgpOworICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLmRvUmVzaXplKCk7CiAK
LSAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5lbmRVcGRhdGVzKCk7CisgICAgICAgIHRoaXMuX3Rl
eHRFZGl0b3IuZW5kVXBkYXRlcygpOwogICAgIH0sCiAKICAgICBwZXJmb3JtU2VhcmNoOiBmdW5j
dGlvbihxdWVyeSwgY2FsbGJhY2spCkBAIC0yNzYsNyArMjc2LDcgQEAgV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoUmVz
dWx0SW5kZXggPSAtMTsKICAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0cyA9IFtdOwotICAgICAg
ICB0aGlzLl90ZXh0Vmlld2VyLm1hcmtBbmRSZXZlYWxSYW5nZShudWxsKTsKKyAgICAgICAgdGhp
cy5fdGV4dEVkaXRvci5tYXJrQW5kUmV2ZWFsUmFuZ2UobnVsbCk7CiAgICAgfSwKIAogICAgIGhh
c1NlYXJjaFJlc3VsdHM6IGZ1bmN0aW9uKCkKQEAgLTMyNCw3ICszMjQsNyBAQCBXZWJJbnNwZWN0
b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICBpZiAoIXRoaXMubG9hZGVkIHx8
ICF0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ID0gKGluZGV4ICsgdGhpcy5fc2VhcmNo
UmVzdWx0cy5sZW5ndGgpICUgdGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGg7Ci0gICAgICAgIHRo
aXMuX3RleHRWaWV3ZXIubWFya0FuZFJldmVhbFJhbmdlKHRoaXMuX3NlYXJjaFJlc3VsdHNbdGhp
cy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4XSk7CisgICAgICAgIHRoaXMuX3RleHRFZGl0b3Iu
bWFya0FuZFJldmVhbFJhbmdlKHRoaXMuX3NlYXJjaFJlc3VsdHNbdGhpcy5fY3VycmVudFNlYXJj
aFJlc3VsdEluZGV4XSk7CiAgICAgfSwKIAogICAgIF9jb2xsZWN0UmVnZXhNYXRjaGVzOiBmdW5j
dGlvbihyZWdleE9iamVjdCkKQEAgLTM2NSw3ICszNjUsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAgICAgbWVzc2FnZUJ1YmJsZUVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgICAgIG1lc3NhZ2VCdWJibGVF
bGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtaHRtbC1tZXNzYWdlLWJ1YmJsZSI7CiAgICAgICAg
ICAgICB0aGlzLl9tZXNzYWdlQnViYmxlc1tsaW5lTnVtYmVyXSA9IG1lc3NhZ2VCdWJibGVFbGVt
ZW50OwotICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5hZGREZWNvcmF0aW9uKGxpbmVOdW1i
ZXIsIG1lc3NhZ2VCdWJibGVFbGVtZW50KTsKKyAgICAgICAgICAgIHRoaXMuX3RleHRFZGl0b3Iu
YWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCBtZXNzYWdlQnViYmxlRWxlbWVudCk7CiAgICAgICAg
IH0KIAogICAgICAgICB2YXIgcm93TWVzc2FnZXMgPSB0aGlzLl9yb3dNZXNzYWdlc1tsaW5lTnVt
YmVyXTsKQEAgLTQ0Nyw3ICs0NDcsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90
eXBlID0gewogICAgICAgICAgICAgaWYgKCFyb3dNZXNzYWdlcy5sZW5ndGgpCiAgICAgICAgICAg
ICAgICAgZGVsZXRlIHRoaXMuX3Jvd01lc3NhZ2VzW2xpbmVOdW1iZXJdOwogICAgICAgICAgICAg
aWYgKCFtZXNzYWdlQnViYmxlRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCkgewotICAgICAgICAg
ICAgICAgIHRoaXMuX3RleHRWaWV3ZXIucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCBtZXNz
YWdlQnViYmxlRWxlbWVudCk7CisgICAgICAgICAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5yZW1v
dmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsIG1lc3NhZ2VCdWJibGVFbGVtZW50KTsKICAgICAgICAg
ICAgICAgICBkZWxldGUgdGhpcy5fbWVzc2FnZUJ1YmJsZXNbbGluZU51bWJlcl07CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTQ2NCw3ICs0NjQsNyBAQCBXZWJJbnNwZWN0
b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogCiAgICAgaW5oZXJpdFNjcm9sbFBvc2l0aW9u
czogZnVuY3Rpb24oc291cmNlRnJhbWUpCiAgICAgewotICAgICAgICB0aGlzLl90ZXh0Vmlld2Vy
LmluaGVyaXRTY3JvbGxQb3NpdGlvbnMoc291cmNlRnJhbWUuX3RleHRWaWV3ZXIpOworICAgICAg
ICB0aGlzLl90ZXh0RWRpdG9yLmluaGVyaXRTY3JvbGxQb3NpdGlvbnMoc291cmNlRnJhbWUuX3Rl
eHRFZGl0b3IpOwogICAgIH0sCiAKICAgICAvKioKQEAgLTQ4NywxNSArNDg3LDE1IEBAIFdlYklu
c3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlZp
ZXcucHJvdG90eXBlOwogCiAKIC8qKgotICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5UZXh0
Vmlld2VyRGVsZWdhdGV9CisgKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JE
ZWxlZ2F0ZX0KICAqIEBjb25zdHJ1Y3RvcgogICovCi1XZWJJbnNwZWN0b3IuVGV4dFZpZXdlckRl
bGVnYXRlRm9yU291cmNlRnJhbWUgPSBmdW5jdGlvbihzb3VyY2VGcmFtZSkKK1dlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yRGVsZWdhdGVGb3JTb3VyY2VGcmFtZSA9IGZ1bmN0aW9uKHNvdXJjZUZyYW1l
KQogewogICAgIHRoaXMuX3NvdXJjZUZyYW1lID0gc291cmNlRnJhbWU7CiB9CiAKLVdlYkluc3Bl
Y3Rvci5UZXh0Vmlld2VyRGVsZWdhdGVGb3JTb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CitXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvckRlbGVnYXRlRm9yU291cmNlRnJhbWUucHJvdG90eXBlID0gewog
ICAgIGJlZm9yZVRleHRDaGFuZ2VkOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl9z
b3VyY2VGcmFtZS5iZWZvcmVUZXh0Q2hhbmdlZCgpOwpAQCAtNTIyLDQgKzUyMiw0IEBAIFdlYklu
c3BlY3Rvci5UZXh0Vmlld2VyRGVsZWdhdGVGb3JTb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAg
ICAgfQogfQogCi1XZWJJbnNwZWN0b3IuVGV4dFZpZXdlckRlbGVnYXRlRm9yU291cmNlRnJhbWUu
cHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyRGVsZWdhdGUucHJv
dG90eXBlOworV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JEZWxlZ2F0ZUZvclNvdXJjZUZyYW1lLnBy
b3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckRlbGVnYXRlLnByb3Rv
dHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4
dEVkaXRvci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dEVkaXRv
ci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44ZTRiMzhkYmMxY2EzMmFjM2ZjNzQxMDM3YzEyMWU4OGEwYjkzMGZi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9U
ZXh0RWRpdG9yLmpzCkBAIC0wLDAgKzEsMjI2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBleHRlbmRzIHtXZWJJbnNwZWN0
b3IuVmlld30KKyAqIEBjb25zdHJ1Y3RvcgorICovCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvciA9
IGZ1bmN0aW9uKHRleHRNb2RlbCwgcGxhdGZvcm0sIHVybCwgZGVsZWdhdGUpCit7CisgICAgV2Vi
SW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsKKyAgICB0aGlzLnJlZ2lzdGVyUmVxdWlyZWRDU1Mo
InRleHRFZGl0b3IuY3NzIik7CisKKyAgICB0aGlzLl90ZXh0TW9kZWwgPSB0ZXh0TW9kZWw7Cisg
ICAgdGhpcy5fdGV4dE1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JNb2RlbC5FdmVudHMuVGV4dENoYW5nZWQsIHRoaXMuX3RleHRDaGFuZ2VkLCB0aGlzKTsKKyAg
ICB0aGlzLl90ZXh0TW9kZWwucmVzZXRVbmRvU3RhY2soKTsKKyAgICB0aGlzLl9kZWxlZ2F0ZSA9
IGRlbGVnYXRlOworICAgIHRoaXMuX3VybCA9IHVybDsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NO
YW1lID0gInRleHQtZWRpdG9yIG1vbm9zcGFjZSI7CisKKyAgICB2YXIgZW50ZXJUZXh0Q2hhbmdl
TW9kZSA9IHRoaXMuX2VudGVySW50ZXJuYWxUZXh0Q2hhbmdlTW9kZS5iaW5kKHRoaXMpOworICAg
IHZhciBleGl0VGV4dENoYW5nZU1vZGUgPSB0aGlzLl9leGl0SW50ZXJuYWxUZXh0Q2hhbmdlTW9k
ZS5iaW5kKHRoaXMpOworICAgIHZhciBzeW5jU2Nyb2xsTGlzdGVuZXIgPSB0aGlzLl9zeW5jU2Ny
b2xsLmJpbmQodGhpcyk7CisgICAgdmFyIHN5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lciA9
IHRoaXMuX3N5bmNEZWNvcmF0aW9uc0ZvckxpbmUuYmluZCh0aGlzKTsKKyAgICB2YXIgc3luY0xp
bmVIZWlnaHRMaXN0ZW5lciA9IHRoaXMuX3N5bmNMaW5lSGVpZ2h0LmJpbmQodGhpcyk7CisgICAg
dGhpcy5fbWFpblBhbmVsID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsKHRo
aXMuX3RleHRNb2RlbCwgdXJsLCBzeW5jU2Nyb2xsTGlzdGVuZXIsIHN5bmNEZWNvcmF0aW9uc0Zv
ckxpbmVMaXN0ZW5lciwgZW50ZXJUZXh0Q2hhbmdlTW9kZSwgZXhpdFRleHRDaGFuZ2VNb2RlKTsK
KyAgICB0aGlzLl9ndXR0ZXJQYW5lbCA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRl
clBhbmVsKHRoaXMuX3RleHRNb2RlbCwgc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyLCBz
eW5jTGluZUhlaWdodExpc3RlbmVyKTsKKyAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhp
cy5fbWFpblBhbmVsLmVsZW1lbnQpOworICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlz
Ll9ndXR0ZXJQYW5lbC5lbGVtZW50KTsKKworICAgIC8vIEZvcndhcmQgbW91c2Ugd2hlZWwgZXZl
bnRzIGZyb20gdGhlIHVuc2Nyb2xsYWJsZSBndXR0ZXIgdG8gdGhlIG1haW4gcGFuZWwuCisgICAg
ZnVuY3Rpb24gZm9yd2FyZFdoZWVsRXZlbnQoZXZlbnQpCisgICAgeworICAgICAgICB2YXIgY2xv
bmUgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgiV2hlZWxFdmVudCIpOworICAgICAgICBjbG9uZS5p
bml0V2ViS2l0V2hlZWxFdmVudChldmVudC53aGVlbERlbHRhWCwgZXZlbnQud2hlZWxEZWx0YVks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnZpZXcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnNjcmVlblgsIGV2ZW50LnNjcmVlblks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmNsaWVudFgsIGV2ZW50
LmNsaWVudFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmN0cmxL
ZXksIGV2ZW50LmFsdEtleSwgZXZlbnQuc2hpZnRLZXksIGV2ZW50Lm1ldGFLZXkpOworICAgICAg
ICB0aGlzLl9tYWluUGFuZWwuZWxlbWVudC5kaXNwYXRjaEV2ZW50KGNsb25lKTsKKyAgICB9Cisg
ICAgdGhpcy5fZ3V0dGVyUGFuZWwuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXdoZWVs
IiwgZm9yd2FyZFdoZWVsRXZlbnQuYmluZCh0aGlzKSwgZmFsc2UpOworCisgICAgdGhpcy5lbGVt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9oYW5kbGVLZXlEb3duLmJpbmQo
dGhpcyksIGZhbHNlKTsKKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4
dG1lbnUiLCB0aGlzLl9jb250ZXh0TWVudS5iaW5kKHRoaXMpLCB0cnVlKTsKKworICAgIHRoaXMu
X3JlZ2lzdGVyU2hvcnRjdXRzKCk7Cit9CisKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3Rv
dHlwZSA9IHsKKyAgICBzZXQgbWltZVR5cGUobWltZVR5cGUpCisgICAgeworICAgICAgICB0aGlz
Ll9tYWluUGFuZWwubWltZVR5cGUgPSBtaW1lVHlwZTsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICogQHBhcmFtIHtib29sZWFufSByZWFkT25seQorICAgICAqLworICAgIHNldFJlYWRPbmx5OiBm
dW5jdGlvbihyZWFkT25seSkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9tYWluUGFuZWwucmVh
ZE9ubHkoKSA9PT0gcmVhZE9ubHkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMu
X21haW5QYW5lbC5zZXRSZWFkT25seShyZWFkT25seSwgdGhpcy5pc1Nob3dpbmcoKSk7CisgICAg
ICAgIFdlYkluc3BlY3Rvci5tYXJrQmVpbmdFZGl0ZWQodGhpcy5lbGVtZW50LCAhcmVhZE9ubHkp
OworICAgIH0sCisKKyAgICByZWFkT25seTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX21haW5QYW5lbC5yZWFkT25seSgpOworICAgIH0sCisKKyAgICBnZXQgdGV4dE1v
ZGVsKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl90ZXh0TW9kZWw7CisgICAgfSwKKwor
ICAgIGRlZmF1bHRGb2N1c2VkRWxlbWVudDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX21haW5QYW5lbC5kZWZhdWx0Rm9jdXNlZEVsZW1lbnQoKTsKKyAgICB9LAorCisg
ICAgcmV2ZWFsTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIHRoaXMu
X21haW5QYW5lbC5yZXZlYWxMaW5lKGxpbmVOdW1iZXIpOworICAgIH0sCisKKyAgICBhZGREZWNv
cmF0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0aW9uKQorICAgIHsKKyAgICAgICAg
dGhpcy5fbWFpblBhbmVsLmFkZERlY29yYXRpb24obGluZU51bWJlciwgZGVjb3JhdGlvbik7Cisg
ICAgICAgIHRoaXMuX2d1dHRlclBhbmVsLmFkZERlY29yYXRpb24obGluZU51bWJlciwgZGVjb3Jh
dGlvbik7CisgICAgfSwKKworICAgIHJlbW92ZURlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1i
ZXIsIGRlY29yYXRpb24pCisgICAgeworICAgICAgICB0aGlzLl9tYWluUGFuZWwucmVtb3ZlRGVj
b3JhdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0aW9uKTsKKyAgICAgICAgdGhpcy5fZ3V0dGVyUGFu
ZWwucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0aW9uKTsKKyAgICB9LAorCisg
ICAgbWFya0FuZFJldmVhbFJhbmdlOiBmdW5jdGlvbihyYW5nZSkKKyAgICB7CisgICAgICAgIHRo
aXMuX21haW5QYW5lbC5tYXJrQW5kUmV2ZWFsUmFuZ2UocmFuZ2UpOworICAgIH0sCisKKyAgICBo
aWdobGlnaHRMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKHR5
cGVvZiBsaW5lTnVtYmVyICE9PSAibnVtYmVyIiB8fCBsaW5lTnVtYmVyIDwgMCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBsaW5lTnVtYmVyID0gTWF0aC5taW4obGluZU51bWJlciwg
dGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQgLSAxKTsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVs
LmhpZ2hsaWdodExpbmUobGluZU51bWJlcik7CisgICAgfSwKKworICAgIGNsZWFyTGluZUhpZ2hs
aWdodDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLmNsZWFyTGlu
ZUhpZ2hsaWdodCgpOworICAgIH0sCisKKyAgICBmcmVlQ2FjaGVkRWxlbWVudHM6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5mcmVlQ2FjaGVkRWxlbWVudHMoKTsK
KyAgICAgICAgdGhpcy5fZ3V0dGVyUGFuZWwuZnJlZUNhY2hlZEVsZW1lbnRzKCk7CisgICAgfSwK
KworICAgIGVsZW1lbnRzVG9SZXN0b3JlU2Nyb2xsUG9zaXRpb25zRm9yOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICByZXR1cm4gW3RoaXMuX21haW5QYW5lbC5lbGVtZW50XTsKKyAgICB9LAor
CisgICAgaW5oZXJpdFNjcm9sbFBvc2l0aW9uczogZnVuY3Rpb24odGV4dEVkaXRvcikKKyAgICB7
CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5lbGVtZW50Ll9zY3JvbGxUb3AgPSB0ZXh0RWRpdG9y
Ll9tYWluUGFuZWwuZWxlbWVudC5zY3JvbGxUb3A7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5l
bGVtZW50Ll9zY3JvbGxMZWZ0ID0gdGV4dEVkaXRvci5fbWFpblBhbmVsLmVsZW1lbnQuc2Nyb2xs
TGVmdDsKKyAgICB9LAorCisgICAgYmVnaW5VcGRhdGVzOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICB0aGlzLl9tYWluUGFuZWwuYmVnaW5VcGRhdGVzKCk7CisgICAgICAgIHRoaXMuX2d1dHRl
clBhbmVsLmJlZ2luVXBkYXRlcygpOworICAgIH0sCisKKyAgICBlbmRVcGRhdGVzOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICB0aGlzLl9tYWluUGFuZWwuZW5kVXBkYXRlcygpOworICAgICAg
ICB0aGlzLl9ndXR0ZXJQYW5lbC5lbmRVcGRhdGVzKCk7CisgICAgICAgIHRoaXMuX3VwZGF0ZVBh
bmVsT2Zmc2V0cygpOworICAgIH0sCisKKyAgICBvblJlc2l6ZTogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdGhpcy5fbWFpblBhbmVsLnJlc2l6ZSgpOworICAgICAgICB0aGlzLl9ndXR0ZXJQ
YW5lbC5yZXNpemUoKTsKKyAgICAgICAgdGhpcy5fdXBkYXRlUGFuZWxPZmZzZXRzKCk7CisgICAg
fSwKKworICAgIF90ZXh0Q2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICBp
ZiAoIXRoaXMuX2ludGVybmFsVGV4dENoYW5nZU1vZGUpCisgICAgICAgICAgICB0aGlzLl90ZXh0
TW9kZWwucmVzZXRVbmRvU3RhY2soKTsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLnRleHRDaGFu
Z2VkKGV2ZW50LmRhdGEub2xkUmFuZ2UsIGV2ZW50LmRhdGEubmV3UmFuZ2UpOworICAgICAgICB0
aGlzLl9ndXR0ZXJQYW5lbC50ZXh0Q2hhbmdlZChldmVudC5kYXRhLm9sZFJhbmdlLCBldmVudC5k
YXRhLm5ld1JhbmdlKTsKKyAgICAgICAgdGhpcy5fdXBkYXRlUGFuZWxPZmZzZXRzKCk7CisgICAg
fSwKKworICAgIF9lbnRlckludGVybmFsVGV4dENoYW5nZU1vZGU6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHRoaXMuX2ludGVybmFsVGV4dENoYW5nZU1vZGUgPSB0cnVlOworICAgICAgICB0
aGlzLl9kZWxlZ2F0ZS5iZWZvcmVUZXh0Q2hhbmdlZCgpOworICAgIH0sCisKKyAgICBfZXhpdElu
dGVybmFsVGV4dENoYW5nZU1vZGU6IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSkKKyAgICB7
CisgICAgICAgIHRoaXMuX2ludGVybmFsVGV4dENoYW5nZU1vZGUgPSBmYWxzZTsKKyAgICAgICAg
dGhpcy5fZGVsZWdhdGUuYWZ0ZXJUZXh0Q2hhbmdlZChvbGRSYW5nZSwgbmV3UmFuZ2UpOworICAg
IH0sCisKKyAgICBfdXBkYXRlUGFuZWxPZmZzZXRzOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICB2YXIgbGluZU51bWJlcnNXaWR0aCA9IHRoaXMuX2d1dHRlclBhbmVsLmVsZW1lbnQub2Zmc2V0
V2lkdGg7CisgICAgICAgIGlmIChsaW5lTnVtYmVyc1dpZHRoKQorICAgICAgICAgICAgdGhpcy5f
bWFpblBhbmVsLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoImxlZnQiLCBsaW5lTnVtYmVyc1dp
ZHRoICsgInB4Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuX21haW5QYW5lbC5l
bGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCJsZWZ0Iik7IC8vIFVzZSBkZWZhdWx0IHZhbHVl
IHNldCBpbiBDU1MuCisgICAgfSwKKworICAgIF9zeW5jU2Nyb2xsOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICB2YXIgbWFpbkVsZW1lbnQgPSB0aGlzLl9tYWluUGFuZWwuZWxlbWVudDsKKyAg
ICAgICAgdmFyIGd1dHRlckVsZW1lbnQgPSB0aGlzLl9ndXR0ZXJQYW5lbC5lbGVtZW50OworICAg
ICAgICAvLyBIYW5kbGUgaG9yaXpvbnRhbCBzY3JvbGwgYmFyIGF0IHRoZSBib3R0b20gb2YgdGhl
IG1haW4gcGFuZWwuCisgICAgICAgIHRoaXMuX2d1dHRlclBhbmVsLnN5bmNDbGllbnRIZWlnaHQo
bWFpbkVsZW1lbnQuY2xpZW50SGVpZ2h0KTsKKyAgICAgICAgZ3V0dGVyRWxlbWVudC5zY3JvbGxU
b3AgPSBtYWluRWxlbWVudC5zY3JvbGxUb3A7CisgICAgfSwKKworICAgIF9zeW5jRGVjb3JhdGlv
bnNGb3JMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKGxpbmVO
dW1iZXIgPj0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgdmFyIG1haW5DaHVuayA9IHRoaXMuX21haW5QYW5lbC5jaHVua0ZvckxpbmUo
bGluZU51bWJlcik7CisgICAgICAgIGlmIChtYWluQ2h1bmsubGluZXNDb3VudCA9PT0gMSAmJiBt
YWluQ2h1bmsuZGVjb3JhdGVkKSB7CisgICAgICAgICAgICB2YXIgZ3V0dGVyQ2h1bmsgPSB0aGlz
Ll9ndXR0ZXJQYW5lbC5tYWtlTGluZUFDaHVuayhsaW5lTnVtYmVyKTsKKyAgICAgICAgICAgIHZh
ciBoZWlnaHQgPSBtYWluQ2h1bmsuaGVpZ2h0OworICAgICAgICAgICAgaWYgKGhlaWdodCkKKyAg
ICAgICAgICAgICAgICBndXR0ZXJDaHVuay5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCJoZWln
aHQiLCBoZWlnaHQgKyAicHgiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBn
dXR0ZXJDaHVuay5lbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCJoZWlnaHQiKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBndXR0ZXJDaHVuayA9IHRoaXMuX2d1dHRlclBh
bmVsLmNodW5rRm9yTGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgICAgIGlmIChndXR0ZXJDaHVu
ay5saW5lc0NvdW50ID09PSAxKQorICAgICAgICAgICAgICAgIGd1dHRlckNodW5rLmVsZW1lbnQu
c3R5bGUucmVtb3ZlUHJvcGVydHkoImhlaWdodCIpOworICAgICAgICB9CisgICAgfSwKKworICAg
IF9zeW5jTGluZUhlaWdodDogZnVuY3Rpb24oZ3V0dGVyUm93KQorICAgIHsKKyAgICAgICAgaWYg
KHRoaXMuX2xpbmVIZWlnaHRTeW5jZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlm
IChndXR0ZXJSb3cgJiYgZ3V0dGVyUm93Lm9mZnNldEhlaWdodCkgeworICAgICAgICAgICAgLy8g
Rm9yY2UgZXF1YWwgbGluZSBoZWlnaHRzIGZvciB0aGUgY2hpbGQgcGFuZWxzLgorICAgICAgICAg
ICAgdGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCJsaW5lLWhlaWdodCIsIGd1dHRlclJv
dy5vZmZzZXRIZWlnaHQgKyAicHgiKTsKKyAgICAgICAgICAgIHRoaXMuX2xpbmVIZWlnaHRTeW5j
ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfSwKKworICAgIF9yZWdpc3RlclNob3J0Y3V0czog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGtleXMgPSBXZWJJbnNwZWN0b3IuS2V5Ym9h
cmRTaG9ydGN1dC5LZXlzOworICAgICAgICB2YXIgbW9kaWZpZXJzID0gV2ViSW5zcGVjdG9yLktl
eWJvYXJkU2hvcnRjdXQuTW9kaWZpZXJzOworCisgICAgICAgIHRoaXMuX3Nob3J0Y3V0cyA9IHt9
OworICAgICAgICB2YXIgY29tbWl0RWRpdGluZyA9IHRoaXMuX2NvbW1pdEVkaXRpbmcuYmluZCh0
aGlzKTsKKyAgICAgICAgdGhpcy5fc2hvcnRjdXRzW1dlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0
Y3V0Lm1ha2VLZXkoInMiLCBtb2RpZmllcnMuQ3RybE9yTWV0YSldID0gY29tbWl0RWRpdGluZzsK
KworICAgICAgICB2YXIgaGFuZGxlRW50ZXJLZXkgPSB0aGlzLl9tYWluUGFuZWwuaGFuZGxlRW50
ZXJLZXkuYmluZCh0aGlzLl9tYWluUGFuZWwpOworICAgICAgICB0aGlzLl9zaG9ydGN1dHNbV2Vi
SW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZUtleShrZXlzLkVudGVyLmNvZGUsIFdlYklu
c3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVycy5Ob25lKV0gPSBoYW5kbGVFbnRlcktl
eTsKKworICAgICAgICB2YXIgaGFuZGxlVW5kbyA9IHRoaXMuX21haW5QYW5lbC5oYW5kbGVVbmRv
UmVkby5iaW5kKHRoaXMuX21haW5QYW5lbCwgZmFsc2UpOworICAgICAgICB2YXIgaGFuZGxlUmVk
byA9IHRoaXMuX21haW5QYW5lbC5oYW5kbGVVbmRvUmVkby5iaW5kKHRoaXMuX21haW5QYW5lbCwg
dHJ1ZSk7CisgICAgICAgIHRoaXMuX3Nob3J0Y3V0c1tXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9y
dGN1dC5tYWtlS2V5KCJ6IiwgbW9kaWZpZXJzLkN0cmxPck1ldGEpXSA9IGhhbmRsZVVuZG87Cisg
ICAgICAgIHRoaXMuX3Nob3J0Y3V0c1tXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtl
S2V5KCJ6IiwgbW9kaWZpZXJzLlNoaWZ0IHwgbW9kaWZpZXJzLkN0cmxPck1ldGEpXSA9IGhhbmRs
ZVJlZG87CisKKyAgICAgICAgdmFyIGhhbmRsZVRhYktleSA9IHRoaXMuX21haW5QYW5lbC5oYW5k
bGVUYWJLZXlQcmVzcy5iaW5kKHRoaXMuX21haW5QYW5lbCwgZmFsc2UpOworICAgICAgICB2YXIg
aGFuZGxlU2hpZnRUYWJLZXkgPSB0aGlzLl9tYWluUGFuZWwuaGFuZGxlVGFiS2V5UHJlc3MuYmlu
ZCh0aGlzLl9tYWluUGFuZWwsIHRydWUpOworICAgICAgICB0aGlzLl9zaG9ydGN1dHNbV2ViSW5z
cGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZUtleShrZXlzLlRhYi5jb2RlKV0gPSBoYW5kbGVU
YWJLZXk7CisgICAgICAgIHRoaXMuX3Nob3J0Y3V0c1tXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9y
dGN1dC5tYWtlS2V5KGtleXMuVGFiLmNvZGUsIG1vZGlmaWVycy5TaGlmdCldID0gaGFuZGxlU2hp
ZnRUYWJLZXk7CisgICAgfSwKKworICAgIF9oYW5kbGVLZXlEb3duOiBmdW5jdGlvbihlKQorICAg
IHsKKyAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICB2YXIgc2hvcnRjdXRLZXkgPSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5t
YWtlS2V5RnJvbUV2ZW50KGUpOworICAgICAgICB2YXIgaGFuZGxlciA9IHRoaXMuX3Nob3J0Y3V0
c1tzaG9ydGN1dEtleV07CisgICAgICAgIGlmIChoYW5kbGVyICYmIGhhbmRsZXIoKSkKKyAgICAg
ICAgICAgIGUuY29uc3VtZSh0cnVlKTsKKyAgICB9LAorCisgICAgX2NvbnRleHRNZW51OiBmdW5j
dGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHZhciBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNw
ZWN0b3IuQ29udGV4dE1lbnUoKTsKKyAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldC5l
bmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3ZWJraXQtbGluZS1udW1iZXIiKTsKKyAgICAg
ICAgaWYgKHRhcmdldCkKKyAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLnBvcHVsYXRlTGluZUd1
dHRlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCB0YXJnZXQubGluZU51bWJlcik7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fbWFpblBhbmVsLl9lbmNsb3NpbmdM
aW5lUm93T3JTZWxmKGV2ZW50LnRhcmdldCk7CisgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5w
b3B1bGF0ZVRleHRBcmVhQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIHRhcmdldCAmJiB0YXJnZXQu
bGluZU51bWJlcik7CisgICAgICAgIH0KKyAgICAgICAgY29udGV4dE1lbnUuc2hvdyhldmVudCk7
CisgICAgfSwKKworICAgIF9jb21taXRFZGl0aW5nOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICBpZiAodGhpcy5yZWFkT25seSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIHRoaXMuX2RlbGVnYXRlLmNvbW1pdEVkaXRpbmcoKTsKKyAgICAgICAgaWYgKHRoaXMuX3Vy
bCAmJiBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIuaXNVUkxTYXZlZCh0aGlzLl91cmwpKQorICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLnNhdmUodGhpcy5fdXJsLCB0aGlzLl90
ZXh0TW9kZWwudGV4dCwgZmFsc2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9LAorCisg
ICAgd2FzU2hvd246IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5yZWFkT25s
eSgpKQorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLm1hcmtCZWluZ0VkaXRlZCh0aGlzLmVsZW1l
bnQsIHRydWUpOworICAgIH0sCisKKyAgICB3aWxsSGlkZTogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgaWYgKCF0aGlzLnJlYWRPbmx5KCkpCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IubWFy
a0JlaW5nRWRpdGVkKHRoaXMuZWxlbWVudCwgZmFsc2UpOworICAgIH0KK30KKworV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5WaWV3LnBy
b3RvdHlwZTsKKworLyoqCisgKiBAaW50ZXJmYWNlCisgKi8KK1dlYkluc3BlY3Rvci5UZXh0RWRp
dG9yRGVsZWdhdGUgPSBmdW5jdGlvbigpCit7Cit9CisKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9y
RGVsZWdhdGUucHJvdG90eXBlID0geworICAgIGJlZm9yZVRleHRDaGFuZ2VkOiBmdW5jdGlvbigp
IHsgfSwKKworICAgIGFmdGVyVGV4dENoYW5nZWQ6IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5n
ZSkgeyB9LAorCisgICAgY29tbWl0RWRpdGluZzogZnVuY3Rpb24oKSB7IH0sCisKKyAgICBwb3B1
bGF0ZUxpbmVHdXR0ZXJDb250ZXh0TWVudTogZnVuY3Rpb24oY29udGV4dE1lbnUsIGxpbmVOdW1i
ZXIpIHsgfSwKKworICAgIHBvcHVsYXRlVGV4dEFyZWFDb250ZXh0TWVudTogZnVuY3Rpb24oY29u
dGV4dE1lbnUsIGxpbmVOdW1iZXIpIHsgfQorfQorCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICov
CitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbCA9IGZ1bmN0aW9uKHRleHRNb2Rl
bCkKK3sKKyAgICB0aGlzLl90ZXh0TW9kZWwgPSB0ZXh0TW9kZWw7CisKKyAgICB0aGlzLl9kZWZh
dWx0Q2h1bmtTaXplID0gNTA7CisgICAgdGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwgPSAwOwor
ICAgIHRoaXMuX2RvbVVwZGF0ZUNvYWxlc2NpbmdMZXZlbCA9IDA7Cit9CisKK1dlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZSA9IHsKKyAgICBnZXQgdGV4dE1vZGVs
KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl90ZXh0TW9kZWw7CisgICAgfSwKKworICAg
IHJldmVhbExpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICBpZiAobGlu
ZU51bWJlciA+PSB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLm1ha2VMaW5lQUNodW5rKGxpbmVOdW1iZXIp
OworICAgICAgICBjaHVuay5lbGVtZW50LnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKTsKKyAgICB9
LAorCisgICAgYWRkRGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgZGVjb3JhdGlvbikK
KyAgICB7CisgICAgICAgIGlmIChsaW5lTnVtYmVyID49IHRoaXMuX3RleHRNb2RlbC5saW5lc0Nv
dW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBjaHVuayA9IHRoaXMubWFr
ZUxpbmVBQ2h1bmsobGluZU51bWJlcik7CisgICAgICAgIGNodW5rLmFkZERlY29yYXRpb24oZGVj
b3JhdGlvbik7CisgICAgfSwKKworICAgIHJlbW92ZURlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVO
dW1iZXIsIGRlY29yYXRpb24pCisgICAgeworICAgICAgICBpZiAobGluZU51bWJlciA+PSB0aGlz
Ll90ZXh0TW9kZWwubGluZXNDb3VudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2
YXIgY2h1bmsgPSB0aGlzLmNodW5rRm9yTGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgY2h1bmsu
cmVtb3ZlRGVjb3JhdGlvbihkZWNvcmF0aW9uKTsKKyAgICB9LAorCisgICAgX2J1aWxkQ2h1bmtz
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLmJlZ2luRG9tVXBkYXRlcygpOworCisg
ICAgICAgIHRoaXMuX2NvbnRhaW5lci5yZW1vdmVDaGlsZHJlbigpOworCisgICAgICAgIHRoaXMu
X3RleHRDaHVua3MgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0
TW9kZWwubGluZXNDb3VudDsgaSArPSB0aGlzLl9kZWZhdWx0Q2h1bmtTaXplKSB7CisgICAgICAg
ICAgICB2YXIgY2h1bmsgPSB0aGlzLl9jcmVhdGVOZXdDaHVuayhpLCBpICsgdGhpcy5fZGVmYXVs
dENodW5rU2l6ZSk7CisgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnB1c2goY2h1bmspOwor
ICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGNodW5rLmVsZW1lbnQpOwor
ICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOworCisgICAgICAgIHRoaXMu
ZW5kRG9tVXBkYXRlcygpOworICAgIH0sCisKKyAgICBtYWtlTGluZUFDaHVuazogZnVuY3Rpb24o
bGluZU51bWJlcikKKyAgICB7CisgICAgICAgIHZhciBjaHVua051bWJlciA9IHRoaXMuX2NodW5r
TnVtYmVyRm9yTGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgdmFyIG9sZENodW5rID0gdGhpcy5f
dGV4dENodW5rc1tjaHVua051bWJlcl07CisKKyAgICAgICAgaWYgKCFvbGRDaHVuaykgeworICAg
ICAgICAgICAgY29uc29sZS5lcnJvcigiTm8gY2h1bmsgZm9yIGxpbmUgbnVtYmVyOiAiICsgbGlu
ZU51bWJlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAo
b2xkQ2h1bmsubGluZXNDb3VudCA9PT0gMSkKKyAgICAgICAgICAgIHJldHVybiBvbGRDaHVuazsK
KworICAgICAgICByZXR1cm4gdGhpcy5fc3BsaXRDaHVua09uQUxpbmUobGluZU51bWJlciwgY2h1
bmtOdW1iZXIsIHRydWUpOworICAgIH0sCisKKyAgICBfc3BsaXRDaHVua09uQUxpbmU6IGZ1bmN0
aW9uKGxpbmVOdW1iZXIsIGNodW5rTnVtYmVyLCBjcmVhdGVTdWZmaXhDaHVuaykKKyAgICB7Cisg
ICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVzKCk7CisKKyAgICAgICAgdmFyIG9sZENodW5rID0g
dGhpcy5fdGV4dENodW5rc1tjaHVua051bWJlcl07CisgICAgICAgIHZhciB3YXNFeHBhbmRlZCA9
IG9sZENodW5rLmV4cGFuZGVkOworICAgICAgICBvbGRDaHVuay5leHBhbmRlZCA9IGZhbHNlOwor
CisgICAgICAgIHZhciBpbnNlcnRJbmRleCA9IGNodW5rTnVtYmVyICsgMTsKKworICAgICAgICAv
LyBQcmVmaXggY2h1bmsuCisgICAgICAgIGlmIChsaW5lTnVtYmVyID4gb2xkQ2h1bmsuc3RhcnRM
aW5lKSB7CisgICAgICAgICAgICB2YXIgcHJlZml4Q2h1bmsgPSB0aGlzLl9jcmVhdGVOZXdDaHVu
ayhvbGRDaHVuay5zdGFydExpbmUsIGxpbmVOdW1iZXIpOworICAgICAgICAgICAgcHJlZml4Q2h1
bmsucmVhZE9ubHkgPSBvbGRDaHVuay5yZWFkT25seTsKKyAgICAgICAgICAgIHRoaXMuX3RleHRD
aHVua3Muc3BsaWNlKGluc2VydEluZGV4KyssIDAsIHByZWZpeENodW5rKTsKKyAgICAgICAgICAg
IHRoaXMuX2NvbnRhaW5lci5pbnNlcnRCZWZvcmUocHJlZml4Q2h1bmsuZWxlbWVudCwgb2xkQ2h1
bmsuZWxlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBMaW5lIGNodW5rLgorICAgICAg
ICB2YXIgZW5kTGluZSA9IGNyZWF0ZVN1ZmZpeENodW5rID8gbGluZU51bWJlciArIDEgOiBvbGRD
aHVuay5zdGFydExpbmUgKyBvbGRDaHVuay5saW5lc0NvdW50OworICAgICAgICB2YXIgbGluZUNo
dW5rID0gdGhpcy5fY3JlYXRlTmV3Q2h1bmsobGluZU51bWJlciwgZW5kTGluZSk7CisgICAgICAg
IGxpbmVDaHVuay5yZWFkT25seSA9IG9sZENodW5rLnJlYWRPbmx5OworICAgICAgICB0aGlzLl90
ZXh0Q2h1bmtzLnNwbGljZShpbnNlcnRJbmRleCsrLCAwLCBsaW5lQ2h1bmspOworICAgICAgICB0
aGlzLl9jb250YWluZXIuaW5zZXJ0QmVmb3JlKGxpbmVDaHVuay5lbGVtZW50LCBvbGRDaHVuay5l
bGVtZW50KTsKKworICAgICAgICAvLyBTdWZmaXggY2h1bmsuCisgICAgICAgIGlmIChvbGRDaHVu
ay5zdGFydExpbmUgKyBvbGRDaHVuay5saW5lc0NvdW50ID4gZW5kTGluZSkgeworICAgICAgICAg
ICAgdmFyIHN1ZmZpeENodW5rID0gdGhpcy5fY3JlYXRlTmV3Q2h1bmsoZW5kTGluZSwgb2xkQ2h1
bmsuc3RhcnRMaW5lICsgb2xkQ2h1bmsubGluZXNDb3VudCk7CisgICAgICAgICAgICBzdWZmaXhD
aHVuay5yZWFkT25seSA9IG9sZENodW5rLnJlYWRPbmx5OworICAgICAgICAgICAgdGhpcy5fdGV4
dENodW5rcy5zcGxpY2UoaW5zZXJ0SW5kZXgsIDAsIHN1ZmZpeENodW5rKTsKKyAgICAgICAgICAg
IHRoaXMuX2NvbnRhaW5lci5pbnNlcnRCZWZvcmUoc3VmZml4Q2h1bmsuZWxlbWVudCwgb2xkQ2h1
bmsuZWxlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZW1vdmUgZW5jbG9zaW5nIGNo
dW5rLgorICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnNwbGljZShjaHVua051bWJlciwgMSk7Cisg
ICAgICAgIHRoaXMuX2NvbnRhaW5lci5yZW1vdmVDaGlsZChvbGRDaHVuay5lbGVtZW50KTsKKwor
ICAgICAgICBpZiAod2FzRXhwYW5kZWQpIHsKKyAgICAgICAgICAgIGlmIChwcmVmaXhDaHVuaykK
KyAgICAgICAgICAgICAgICBwcmVmaXhDaHVuay5leHBhbmRlZCA9IHRydWU7CisgICAgICAgICAg
ICBsaW5lQ2h1bmsuZXhwYW5kZWQgPSB0cnVlOworICAgICAgICAgICAgaWYgKHN1ZmZpeENodW5r
KQorICAgICAgICAgICAgICAgIHN1ZmZpeENodW5rLmV4cGFuZGVkID0gdHJ1ZTsKKyAgICAgICAg
fQorCisgICAgICAgIHRoaXMuZW5kRG9tVXBkYXRlcygpOworCisgICAgICAgIHJldHVybiBsaW5l
Q2h1bms7CisgICAgfSwKKworICAgIF9zY3JvbGw6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IC8vIEZJWE1FOiBSZXBsYWNlIHRoZSAiMiIgd2l0aCB0aGUgcGFkZGluZy1sZWZ0IHZhbHVlIGZy
b20gQ1NTLgorICAgICAgICBpZiAodGhpcy5lbGVtZW50LnNjcm9sbExlZnQgPD0gMikKKyAgICAg
ICAgICAgIHRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0ID0gMDsKKworICAgICAgICB0aGlzLl9zY2hl
ZHVsZVJlcGFpbnRBbGwoKTsKKyAgICAgICAgaWYgKHRoaXMuX3N5bmNTY3JvbGxMaXN0ZW5lcikK
KyAgICAgICAgICAgIHRoaXMuX3N5bmNTY3JvbGxMaXN0ZW5lcigpOworICAgIH0sCisKKyAgICBf
c2NoZWR1bGVSZXBhaW50QWxsOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5f
cmVwYWludEFsbFRpbWVyKQorICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3JlcGFpbnRB
bGxUaW1lcik7CisgICAgICAgIHRoaXMuX3JlcGFpbnRBbGxUaW1lciA9IHNldFRpbWVvdXQodGhp
cy5fcmVwYWludEFsbC5iaW5kKHRoaXMpLCA1MCk7CisgICAgfSwKKworICAgIGJlZ2luVXBkYXRl
czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwr
KzsKKyAgICB9LAorCisgICAgZW5kVXBkYXRlczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
dGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwtLTsKKyAgICAgICAgaWYgKCF0aGlzLl9wYWludENv
YWxlc2NpbmdMZXZlbCkKKyAgICAgICAgICAgIHRoaXMuX3JlcGFpbnRBbGwoKTsKKyAgICB9LAor
CisgICAgYmVnaW5Eb21VcGRhdGVzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9k
b21VcGRhdGVDb2FsZXNjaW5nTGV2ZWwrKzsKKyAgICB9LAorCisgICAgZW5kRG9tVXBkYXRlczog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fZG9tVXBkYXRlQ29hbGVzY2luZ0xldmVs
LS07CisgICAgfSwKKworICAgIF9jaHVua051bWJlckZvckxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1i
ZXIpCisgICAgeworICAgICAgICBmdW5jdGlvbiBjb21wYXJlTGluZU51bWJlcnModmFsdWUsIGNo
dW5rKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUgPCBjaHVuay5zdGFydExp
bmUgPyAtMSA6IDE7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGluc2VydEJlZm9yZSA9IGluc2Vy
dGlvbkluZGV4Rm9yT2JqZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlvbihsaW5lTnVtYmVyLCB0aGlz
Ll90ZXh0Q2h1bmtzLCBjb21wYXJlTGluZU51bWJlcnMpOworICAgICAgICByZXR1cm4gaW5zZXJ0
QmVmb3JlIC0gMTsKKyAgICB9LAorCisgICAgY2h1bmtGb3JMaW5lOiBmdW5jdGlvbihsaW5lTnVt
YmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRDaHVua3NbdGhpcy5fY2h1bmtO
dW1iZXJGb3JMaW5lKGxpbmVOdW1iZXIpXTsKKyAgICB9LAorCisgICAgX2ZpbmRGaXJzdFZpc2li
bGVDaHVua051bWJlcjogZnVuY3Rpb24odmlzaWJsZUZyb20pCisgICAgeworICAgICAgICBmdW5j
dGlvbiBjb21wYXJlT2Zmc2V0VG9wcyh2YWx1ZSwgY2h1bmspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiB2YWx1ZSA8IGNodW5rLm9mZnNldFRvcCA/IC0xIDogMTsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgaW5zZXJ0QmVmb3JlID0gaW5zZXJ0aW9uSW5kZXhGb3JPYmplY3RJbkxpc3RT
b3J0ZWRCeUZ1bmN0aW9uKHZpc2libGVGcm9tLCB0aGlzLl90ZXh0Q2h1bmtzLCBjb21wYXJlT2Zm
c2V0VG9wcyk7CisgICAgICAgIHJldHVybiBpbnNlcnRCZWZvcmUgLSAxOworICAgIH0sCisKKyAg
ICBfZmluZFZpc2libGVDaHVua3M6IGZ1bmN0aW9uKHZpc2libGVGcm9tLCB2aXNpYmxlVG8pCisg
ICAgeworICAgICAgICB2YXIgZnJvbSA9IHRoaXMuX2ZpbmRGaXJzdFZpc2libGVDaHVua051bWJl
cih2aXNpYmxlRnJvbSk7CisgICAgICAgIGZvciAodmFyIHRvID0gZnJvbSArIDE7IHRvIDwgdGhp
cy5fdGV4dENodW5rcy5sZW5ndGg7ICsrdG8pIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0
Q2h1bmtzW3RvXS5vZmZzZXRUb3AgPj0gdmlzaWJsZVRvKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB7IHN0YXJ0OiBmcm9tLCBlbmQ6IHRvIH07Cisg
ICAgfSwKKworICAgIF9maW5kRmlyc3RWaXNpYmxlTGluZU51bWJlcjogZnVuY3Rpb24odmlzaWJs
ZUZyb20pCisgICAgeworICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW3RoaXMu
X2ZpbmRGaXJzdFZpc2libGVDaHVua051bWJlcih2aXNpYmxlRnJvbSldOworICAgICAgICBpZiAo
IWNodW5rLmV4cGFuZGVkKQorICAgICAgICAgICAgcmV0dXJuIGNodW5rLnN0YXJ0TGluZTsKKwor
ICAgICAgICB2YXIgbGluZU51bWJlcnMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBjaHVuay5saW5lc0NvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGxpbmVOdW1iZXJzLnB1c2go
Y2h1bmsuc3RhcnRMaW5lICsgaSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBjb21w
YXJlTGluZVJvd09mZnNldFRvcHModmFsdWUsIGxpbmVOdW1iZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHZhciBsaW5lUm93ID0gY2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93KGxpbmVOdW1iZXIp
OworICAgICAgICAgICAgcmV0dXJuIHZhbHVlIDwgbGluZVJvdy5vZmZzZXRUb3AgPyAtMSA6IDE7
CisgICAgICAgIH0KKyAgICAgICAgdmFyIGluc2VydEJlZm9yZSA9IGluc2VydGlvbkluZGV4Rm9y
T2JqZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlvbih2aXNpYmxlRnJvbSwgbGluZU51bWJlcnMsIGNv
bXBhcmVMaW5lUm93T2Zmc2V0VG9wcyk7CisgICAgICAgIHJldHVybiBsaW5lTnVtYmVyc1tpbnNl
cnRCZWZvcmUgLSAxXTsKKyAgICB9LAorCisgICAgX3JlcGFpbnRBbGw6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9yZXBhaW50QWxsVGltZXI7CisKKyAgICAgICAgaWYg
KHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsIHx8IHRoaXMuX2RpcnR5TGluZXMpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHZpc2libGVGcm9tID0gdGhpcy5lbGVtZW50LnNj
cm9sbFRvcDsKKyAgICAgICAgdmFyIHZpc2libGVUbyA9IHRoaXMuZWxlbWVudC5zY3JvbGxUb3Ag
KyB0aGlzLmVsZW1lbnQuY2xpZW50SGVpZ2h0OworCisgICAgICAgIGlmICh2aXNpYmxlVG8pIHsK
KyAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9maW5kVmlzaWJsZUNodW5rcyh2aXNpYmxl
RnJvbSwgdmlzaWJsZVRvKTsKKyAgICAgICAgICAgIHRoaXMuX2V4cGFuZENodW5rcyhyZXN1bHQu
c3RhcnQsIHJlc3VsdC5lbmQpOworICAgICAgICB9CisgICAgfSwKKworICAgIF9leHBhbmRDaHVu
a3M6IGZ1bmN0aW9uKGZyb21JbmRleCwgdG9JbmRleCkKKyAgICB7CisgICAgICAgIC8vIEZpcnN0
IGNvbGxhcHNlIGNodW5rcyB0byBjb2xsZWN0IHRoZSBET00gZWxlbWVudHMgaW50byBhIGNhY2hl
IHRvIHJldXNlIHRoZW0gbGF0ZXIuCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJvbUlu
ZGV4OyArK2kpCisgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzW2ldLmV4cGFuZGVkID0gZmFs
c2U7CisgICAgICAgIGZvciAodmFyIGkgPSB0b0luZGV4OyBpIDwgdGhpcy5fdGV4dENodW5rcy5s
ZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHRoaXMuX3RleHRDaHVua3NbaV0uZXhwYW5kZWQgPSBm
YWxzZTsKKyAgICAgICAgZm9yICh2YXIgaSA9IGZyb21JbmRleDsgaSA8IHRvSW5kZXg7ICsraSkK
KyAgICAgICAgICAgIHRoaXMuX3RleHRDaHVua3NbaV0uZXhwYW5kZWQgPSB0cnVlOworICAgIH0s
CisKKyAgICBfdG90YWxIZWlnaHQ6IGZ1bmN0aW9uKGZpcnN0RWxlbWVudCwgbGFzdEVsZW1lbnQp
CisgICAgeworICAgICAgICBsYXN0RWxlbWVudCA9IChsYXN0RWxlbWVudCB8fCBmaXJzdEVsZW1l
bnQpLm5leHRFbGVtZW50U2libGluZzsKKyAgICAgICAgaWYgKGxhc3RFbGVtZW50KQorICAgICAg
ICAgICAgcmV0dXJuIGxhc3RFbGVtZW50Lm9mZnNldFRvcCAtIGZpcnN0RWxlbWVudC5vZmZzZXRU
b3A7CisKKyAgICAgICAgdmFyIG9mZnNldFBhcmVudCA9IGZpcnN0RWxlbWVudC5vZmZzZXRQYXJl
bnQ7CisgICAgICAgIGlmIChvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0UGFyZW50LnNjcm9sbEhlaWdo
dCA+IG9mZnNldFBhcmVudC5jbGllbnRIZWlnaHQpCisgICAgICAgICAgICByZXR1cm4gb2Zmc2V0
UGFyZW50LnNjcm9sbEhlaWdodCAtIGZpcnN0RWxlbWVudC5vZmZzZXRUb3A7CisKKyAgICAgICAg
dmFyIHRvdGFsID0gMDsKKyAgICAgICAgd2hpbGUgKGZpcnN0RWxlbWVudCAmJiBmaXJzdEVsZW1l
bnQgIT09IGxhc3RFbGVtZW50KSB7CisgICAgICAgICAgICB0b3RhbCArPSBmaXJzdEVsZW1lbnQu
b2Zmc2V0SGVpZ2h0OworICAgICAgICAgICAgZmlyc3RFbGVtZW50ID0gZmlyc3RFbGVtZW50Lm5l
eHRFbGVtZW50U2libGluZzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG90YWw7CisgICAg
fSwKKworICAgIHJlc2l6ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fcmVwYWlu
dEFsbCgpOworICAgIH0KK30KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBleHRlbmRzIHtX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbH0KKyAqLworV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JHdXR0ZXJQYW5lbCA9IGZ1bmN0aW9uKHRleHRNb2RlbCwgc3luY0RlY29yYXRpb25z
Rm9yTGluZUxpc3RlbmVyLCBzeW5jTGluZUhlaWdodExpc3RlbmVyKQoreworICAgIFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLmNhbGwodGhpcywgdGV4dE1vZGVsKTsKKworICAg
IHRoaXMuX3N5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lciA9IHN5bmNEZWNvcmF0aW9uc0Zv
ckxpbmVMaXN0ZW5lcjsKKyAgICB0aGlzLl9zeW5jTGluZUhlaWdodExpc3RlbmVyID0gc3luY0xp
bmVIZWlnaHRMaXN0ZW5lcjsKKworICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOworICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAidGV4dC1lZGl0b3It
bGluZXMiOworCisgICAgdGhpcy5fY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
ZGl2Iik7CisgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTmFtZSA9ICJpbm5lci1jb250YWluZXIi
OworICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpOworCisgICAg
dGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMuX3Njcm9sbC5iaW5k
KHRoaXMpLCBmYWxzZSk7CisKKyAgICB0aGlzLmZyZWVDYWNoZWRFbGVtZW50cygpOworICAgIHRo
aXMuX2J1aWxkQ2h1bmtzKCk7CisgICAgdGhpcy5fZGVjb3JhdGlvbnMgPSB7fTsKK30KKworV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbC5wcm90b3R5cGUgPSB7CisgICAgZnJlZUNh
Y2hlZEVsZW1lbnRzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jYWNoZWRSb3dz
ID0gW107CisgICAgfSwKKworICAgIF9jcmVhdGVOZXdDaHVuazogZnVuY3Rpb24oc3RhcnRMaW5l
LCBlbmRMaW5lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvckd1dHRlckNodW5rKHRoaXMsIHN0YXJ0TGluZSwgZW5kTGluZSk7CisgICAgfSwKKworICAg
IHRleHRDaGFuZ2VkOiBmdW5jdGlvbihvbGRSYW5nZSwgbmV3UmFuZ2UpCisgICAgeworICAgICAg
ICB0aGlzLmJlZ2luRG9tVXBkYXRlcygpOworCisgICAgICAgIHZhciBsaW5lc0RpZmYgPSBuZXdS
YW5nZS5saW5lc0NvdW50IC0gb2xkUmFuZ2UubGluZXNDb3VudDsKKyAgICAgICAgaWYgKGxpbmVz
RGlmZikgeworICAgICAgICAgICAgLy8gUmVtb3ZlIG9sZCBjaHVua3MgKGlmIG5lZWRlZCkuCisg
ICAgICAgICAgICBmb3IgKHZhciBjaHVua051bWJlciA9IHRoaXMuX3RleHRDaHVua3MubGVuZ3Ro
IC0gMTsgY2h1bmtOdW1iZXIgPj0gMCA7IC0tY2h1bmtOdW1iZXIpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVtYmVyXTsKKyAgICAgICAgICAg
ICAgICBpZiAoY2h1bmsuc3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3VudCA8PSB0aGlzLl90ZXh0
TW9kZWwubGluZXNDb3VudCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2h1bmsuZXhwYW5kZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB0aGlzLl9jb250
YWluZXIucmVtb3ZlQ2hpbGQoY2h1bmsuZWxlbWVudCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aCA9IGNodW5rTnVtYmVyICsgMTsKKworICAgICAg
ICAgICAgLy8gQWRkIG5ldyBjaHVua3MgKGlmIG5lZWRlZCkuCisgICAgICAgICAgICB2YXIgdG90
YWxMaW5lcyA9IDA7CisgICAgICAgICAgICBpZiAodGhpcy5fdGV4dENodW5rcy5sZW5ndGgpIHsK
KyAgICAgICAgICAgICAgICB2YXIgbGFzdENodW5rID0gdGhpcy5fdGV4dENodW5rc1t0aGlzLl90
ZXh0Q2h1bmtzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgICAgIHRvdGFsTGluZXMgPSBsYXN0
Q2h1bmsuc3RhcnRMaW5lICsgbGFzdENodW5rLmxpbmVzQ291bnQ7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGZvciAodmFyIGkgPSB0b3RhbExpbmVzOyBpIDwgdGhpcy5fdGV4dE1vZGVs
LmxpbmVzQ291bnQ7IGkgKz0gdGhpcy5fZGVmYXVsdENodW5rU2l6ZSkgeworICAgICAgICAgICAg
ICAgIHZhciBjaHVuayA9IHRoaXMuX2NyZWF0ZU5ld0NodW5rKGksIGkgKyB0aGlzLl9kZWZhdWx0
Q2h1bmtTaXplKTsKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnB1c2goY2h1bmsp
OworICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChjaHVuay5lbGVt
ZW50KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU2hpZnQgZGVjb3JhdGlvbnMg
aWYgbmVjZXNzYXJ5CisgICAgICAgICAgICBmb3IgKHZhciBsaW5lTnVtYmVyIGluIHRoaXMuX2Rl
Y29yYXRpb25zKSB7CisgICAgICAgICAgICAgICAgbGluZU51bWJlciA9IHBhcnNlSW50KGxpbmVO
dW1iZXIsIDEwKTsKKworICAgICAgICAgICAgICAgIC8vIERvIG5vdCBtb3ZlIGRlY29yYXRpb25z
IGJlZm9yZSB0aGUgc3RhcnQgcG9zaXRpb24uCisgICAgICAgICAgICAgICAgaWYgKGxpbmVOdW1i
ZXIgPCBvbGRSYW5nZS5zdGFydExpbmUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIC8vIERlY29yYXRpb25zIGZvbGxvdyB0aGUgZmlyc3QgY2hhcmFjdGVy
IG9mIGxpbmUuCisgICAgICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPT09IG9sZFJhbmdlLnN0
YXJ0TGluZSAmJiBvbGRSYW5nZS5zdGFydENvbHVtbikKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgICAgICB2YXIgbGluZURlY29yYXRpb25zQ29weSA9IHRoaXMu
X2RlY29yYXRpb25zW2xpbmVOdW1iZXJdLnNsaWNlKCk7CisgICAgICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBsaW5lRGVjb3JhdGlvbnNDb3B5Lmxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBkZWNvcmF0aW9uID0gbGluZURlY29yYXRpb25zQ29weVtpXTsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsIGRlY29y
YXRpb24pOworCisgICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdCByZXN0b3JlIHRoZSBkZWNv
cmF0aW9ucyBiZWZvcmUgdGhlIGVuZCBwb3NpdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgaWYg
KGxpbmVOdW1iZXIgPCBvbGRSYW5nZS5lbmRMaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGREZWNvcmF0aW9uKGxpbmVO
dW1iZXIgKyBsaW5lc0RpZmYsIGRlY29yYXRpb24pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gRGVjb3JhdGlvbnMgbWF5IGhhdmUgYmVlbiByZW1vdmVkLCBz
byB3ZSBtYXkgaGF2ZSB0byBzeW5jIHRob3NlIGxpbmVzLgorICAgICAgICAgICAgdmFyIGNodW5r
TnVtYmVyID0gdGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5lKG5ld1JhbmdlLnN0YXJ0TGluZSk7Cisg
ICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVtYmVyXTsKKyAg
ICAgICAgICAgIHdoaWxlIChjaHVuayAmJiBjaHVuay5zdGFydExpbmUgPD0gbmV3UmFuZ2UuZW5k
TGluZSkgeworICAgICAgICAgICAgICAgIGlmIChjaHVuay5saW5lc0NvdW50ID09PSAxKQorICAg
ICAgICAgICAgICAgICAgICB0aGlzLl9zeW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIoY2h1
bmsuc3RhcnRMaW5lKTsKKyAgICAgICAgICAgICAgICBjaHVuayA9IHRoaXMuX3RleHRDaHVua3Nb
KytjaHVua051bWJlcl07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0aGlz
LmVuZERvbVVwZGF0ZXMoKTsKKyAgICB9LAorCisgICAgc3luY0NsaWVudEhlaWdodDogZnVuY3Rp
b24oY2xpZW50SGVpZ2h0KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5vZmZzZXRI
ZWlnaHQgPiBjbGllbnRIZWlnaHQpCisgICAgICAgICAgICB0aGlzLl9jb250YWluZXIuc3R5bGUu
c2V0UHJvcGVydHkoInBhZGRpbmctYm90dG9tIiwgKHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQg
LSBjbGllbnRIZWlnaHQpICsgInB4Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMu
X2NvbnRhaW5lci5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iKTsKKyAgICB9
LAorCisgICAgYWRkRGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgZGVjb3JhdGlvbikK
KyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3Rv
dHlwZS5hZGREZWNvcmF0aW9uLmNhbGwodGhpcywgbGluZU51bWJlciwgZGVjb3JhdGlvbik7Cisg
ICAgICAgIHZhciBkZWNvcmF0aW9ucyA9IHRoaXMuX2RlY29yYXRpb25zW2xpbmVOdW1iZXJdOwor
ICAgICAgICBpZiAoIWRlY29yYXRpb25zKSB7CisgICAgICAgICAgICBkZWNvcmF0aW9ucyA9IFtd
OworICAgICAgICAgICAgdGhpcy5fZGVjb3JhdGlvbnNbbGluZU51bWJlcl0gPSBkZWNvcmF0aW9u
czsKKyAgICAgICAgfQorICAgICAgICBkZWNvcmF0aW9ucy5wdXNoKGRlY29yYXRpb24pOworICAg
IH0sCisKKyAgICByZW1vdmVEZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0
aW9uKQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwu
cHJvdG90eXBlLnJlbW92ZURlY29yYXRpb24uY2FsbCh0aGlzLCBsaW5lTnVtYmVyLCBkZWNvcmF0
aW9uKTsKKyAgICAgICAgdmFyIGRlY29yYXRpb25zID0gdGhpcy5fZGVjb3JhdGlvbnNbbGluZU51
bWJlcl07CisgICAgICAgIGlmIChkZWNvcmF0aW9ucykgeworICAgICAgICAgICAgZGVjb3JhdGlv
bnMucmVtb3ZlKGRlY29yYXRpb24pOworICAgICAgICAgICAgaWYgKCFkZWNvcmF0aW9ucy5sZW5n
dGgpCisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2RlY29yYXRpb25zW2xpbmVOdW1iZXJd
OworICAgICAgICB9CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlclBh
bmVsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQ
YW5lbC5wcm90b3R5cGU7CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKi8KK1dlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsgPSBmdW5jdGlvbih0ZXh0RWRpdG9yLCBzdGFydExpbmUs
IGVuZExpbmUpCit7CisgICAgdGhpcy5fdGV4dEVkaXRvciA9IHRleHRFZGl0b3I7CisgICAgdGhp
cy5fdGV4dE1vZGVsID0gdGV4dEVkaXRvci5fdGV4dE1vZGVsOworCisgICAgdGhpcy5zdGFydExp
bmUgPSBzdGFydExpbmU7CisgICAgZW5kTGluZSA9IE1hdGgubWluKHRoaXMuX3RleHRNb2RlbC5s
aW5lc0NvdW50LCBlbmRMaW5lKTsKKyAgICB0aGlzLmxpbmVzQ291bnQgPSBlbmRMaW5lIC0gc3Rh
cnRMaW5lOworCisgICAgdGhpcy5fZXhwYW5kZWQgPSBmYWxzZTsKKworICAgIHRoaXMuZWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIHRoaXMuZWxlbWVudC5saW5l
TnVtYmVyID0gc3RhcnRMaW5lOworICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAid2Via2l0
LWxpbmUtbnVtYmVyIjsKKworICAgIGlmICh0aGlzLmxpbmVzQ291bnQgPT09IDEpIHsKKyAgICAg
ICAgLy8gU2luZ2xlIGxpbmUgY2h1bmtzIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCBmb3IgZGVjb3Jh
dGlvbnMuIEhvc3QgbGluZSBudW1iZXIgaW4KKyAgICAgICAgLy8gdGhlIHN1Yi1lbGVtZW50IGlu
IG9yZGVyIHRvIGFsbG93IGZsZXhpYmxlIGJvcmRlciAvIG1hcmdpbiBtYW5hZ2VtZW50LgorICAg
ICAgICB2YXIgaW5uZXJTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAg
ICAgICBpbm5lclNwYW4uY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLW51bWJlci1pbm5lciI7Cisg
ICAgICAgIGlubmVyU3Bhbi50ZXh0Q29udGVudCA9IHN0YXJ0TGluZSArIDE7CisgICAgICAgIHZh
ciBvdXRlclNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgb3V0
ZXJTcGFuLmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1udW1iZXItb3V0ZXIiOworICAgICAgICBv
dXRlclNwYW4uYXBwZW5kQ2hpbGQoaW5uZXJTcGFuKTsKKyAgICAgICAgdGhpcy5lbGVtZW50LmFw
cGVuZENoaWxkKG91dGVyU3Bhbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIGxpbmVOdW1i
ZXJzID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSBzdGFydExpbmU7IGkgPCBlbmRMaW5lOyAr
K2kpCisgICAgICAgICAgICBsaW5lTnVtYmVycy5wdXNoKGkgKyAxKTsKKyAgICAgICAgdGhpcy5l
bGVtZW50LnRleHRDb250ZW50ID0gbGluZU51bWJlcnMuam9pbigiXG4iKTsKKyAgICB9Cit9CisK
K1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsucHJvdG90eXBlID0geworICAgIGFk
ZERlY29yYXRpb246IGZ1bmN0aW9uKGRlY29yYXRpb24pCisgICAgeworICAgICAgICB0aGlzLl90
ZXh0RWRpdG9yLmJlZ2luRG9tVXBkYXRlcygpOworICAgICAgICBpZiAodHlwZW9mIGRlY29yYXRp
b24gPT09ICJzdHJpbmciKQorICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3Mo
ZGVjb3JhdGlvbik7CisgICAgICAgIHRoaXMuX3RleHRFZGl0b3IuZW5kRG9tVXBkYXRlcygpOwor
ICAgIH0sCisKKyAgICByZW1vdmVEZWNvcmF0aW9uOiBmdW5jdGlvbihkZWNvcmF0aW9uKQorICAg
IHsKKyAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5iZWdpbkRvbVVwZGF0ZXMoKTsKKyAgICAgICAg
aWYgKHR5cGVvZiBkZWNvcmF0aW9uID09PSAic3RyaW5nIikKKyAgICAgICAgICAgIHRoaXMuZWxl
bWVudC5yZW1vdmVTdHlsZUNsYXNzKGRlY29yYXRpb24pOworICAgICAgICB0aGlzLl90ZXh0RWRp
dG9yLmVuZERvbVVwZGF0ZXMoKTsKKyAgICB9LAorCisgICAgZ2V0IGV4cGFuZGVkKCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzLl9leHBhbmRlZDsKKyAgICB9LAorCisgICAgc2V0IGV4cGFu
ZGVkKGV4cGFuZGVkKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMubGluZXNDb3VudCA9PT0gMSkK
KyAgICAgICAgICAgIHRoaXMuX3RleHRFZGl0b3IuX3N5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0
ZW5lcih0aGlzLnN0YXJ0TGluZSk7CisKKyAgICAgICAgaWYgKHRoaXMuX2V4cGFuZGVkID09PSBl
eHBhbmRlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9leHBhbmRlZCA9
IGV4cGFuZGVkOworCisgICAgICAgIGlmICh0aGlzLmxpbmVzQ291bnQgPT09IDEpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5iZWdpbkRvbVVwZGF0ZXMo
KTsKKworICAgICAgICBpZiAoZXhwYW5kZWQpIHsKKyAgICAgICAgICAgIHRoaXMuX2V4cGFuZGVk
TGluZVJvd3MgPSBbXTsKKyAgICAgICAgICAgIHZhciBwYXJlbnRFbGVtZW50ID0gdGhpcy5lbGVt
ZW50LnBhcmVudEVsZW1lbnQ7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFydExp
bmU7IGkgPCB0aGlzLnN0YXJ0TGluZSArIHRoaXMubGluZXNDb3VudDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl9jcmVhdGVSb3coaSk7CisgICAgICAgICAgICAg
ICAgcGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUobGluZVJvdywgdGhpcy5lbGVtZW50KTsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9leHBhbmRlZExpbmVSb3dzLnB1c2gobGluZVJvdyk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBwYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZWxl
bWVudCk7CisgICAgICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLl9zeW5jTGluZUhlaWdodExpc3Rl
bmVyKHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbMF0pOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgdmFyIGVsZW1lbnRJbnNlcnRlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0aGlzLl9leHBhbmRlZExpbmVSb3dzLmxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl9leHBhbmRlZExpbmVSb3dzW2ldOworICAgICAg
ICAgICAgICAgIHZhciBwYXJlbnRFbGVtZW50ID0gbGluZVJvdy5wYXJlbnRFbGVtZW50OworICAg
ICAgICAgICAgICAgIGlmIChwYXJlbnRFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghZWxlbWVudEluc2VydGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50SW5z
ZXJ0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC5pbnNl
cnRCZWZvcmUodGhpcy5lbGVtZW50LCBsaW5lUm93KTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGxpbmVSb3cpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLl9jYWNo
ZWRSb3dzLnB1c2gobGluZVJvdyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWxldGUg
dGhpcy5fZXhwYW5kZWRMaW5lUm93czsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX3RleHRF
ZGl0b3IuZW5kRG9tVXBkYXRlcygpOworICAgIH0sCisKKyAgICBnZXQgaGVpZ2h0KCkKKyAgICB7
CisgICAgICAgIGlmICghdGhpcy5fZXhwYW5kZWRMaW5lUm93cykKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl90ZXh0RWRpdG9yLl90b3RhbEhlaWdodCh0aGlzLmVsZW1lbnQpOworICAgICAgICBy
ZXR1cm4gdGhpcy5fdGV4dEVkaXRvci5fdG90YWxIZWlnaHQodGhpcy5fZXhwYW5kZWRMaW5lUm93
c1swXSwgdGhpcy5fZXhwYW5kZWRMaW5lUm93c1t0aGlzLl9leHBhbmRlZExpbmVSb3dzLmxlbmd0
aCAtIDFdKTsKKyAgICB9LAorCisgICAgZ2V0IG9mZnNldFRvcCgpCisgICAgeworICAgICAgICBy
ZXR1cm4gKHRoaXMuX2V4cGFuZGVkTGluZVJvd3MgJiYgdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5s
ZW5ndGgpID8gdGhpcy5fZXhwYW5kZWRMaW5lUm93c1swXS5vZmZzZXRUb3AgOiB0aGlzLmVsZW1l
bnQub2Zmc2V0VG9wOworICAgIH0sCisKKyAgICBfY3JlYXRlUm93OiBmdW5jdGlvbihsaW5lTnVt
YmVyKQorICAgIHsKKyAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl90ZXh0RWRpdG9yLl9jYWNo
ZWRSb3dzLnBvcCgpIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBs
aW5lUm93LmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgICAgICBsaW5lUm93LmNsYXNzTmFt
ZSA9ICJ3ZWJraXQtbGluZS1udW1iZXIiOworICAgICAgICBsaW5lUm93LnRleHRDb250ZW50ID0g
bGluZU51bWJlciArIDE7CisgICAgICAgIHJldHVybiBsaW5lUm93OworICAgIH0KK30KKworLyoq
CisgKiBAY29uc3RydWN0b3IKKyAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNo
dW5rZWRQYW5lbH0KKyAqLworV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwgPSBmdW5j
dGlvbih0ZXh0TW9kZWwsIHVybCwgc3luY1Njcm9sbExpc3RlbmVyLCBzeW5jRGVjb3JhdGlvbnNG
b3JMaW5lTGlzdGVuZXIsIGVudGVyVGV4dENoYW5nZU1vZGUsIGV4aXRUZXh0Q2hhbmdlTW9kZSkK
K3sKKyAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5jYWxsKHRoaXMsIHRl
eHRNb2RlbCk7CisKKyAgICB0aGlzLl9zeW5jU2Nyb2xsTGlzdGVuZXIgPSBzeW5jU2Nyb2xsTGlz
dGVuZXI7CisgICAgdGhpcy5fc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyID0gc3luY0Rl
Y29yYXRpb25zRm9yTGluZUxpc3RlbmVyOworICAgIHRoaXMuX2VudGVyVGV4dENoYW5nZU1vZGUg
PSBlbnRlclRleHRDaGFuZ2VNb2RlOworICAgIHRoaXMuX2V4aXRUZXh0Q2hhbmdlTW9kZSA9IGV4
aXRUZXh0Q2hhbmdlTW9kZTsKKworICAgIHRoaXMuX3VybCA9IHVybDsKKyAgICB0aGlzLl9oaWdo
bGlnaHRlciA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckhpZ2hsaWdodGVyKHRleHRNb2Rl
bCwgdGhpcy5faGlnaGxpZ2h0RGF0YVJlYWR5LmJpbmQodGhpcykpOworICAgIHRoaXMuX3JlYWRP
bmx5ID0gdHJ1ZTsKKworICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOworICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAidGV4dC1lZGl0b3ItY29udGVu
dHMiOworICAgIHRoaXMuZWxlbWVudC50YWJJbmRleCA9IDA7CisKKyAgICB0aGlzLl9jb250YWlu
ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlzLl9jb250YWluZXIu
Y2xhc3NOYW1lID0gImlubmVyLWNvbnRhaW5lciI7CisgICAgdGhpcy5fY29udGFpbmVyLnRhYklu
ZGV4ID0gMDsKKyAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKTsK
KworICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLl9zY3Jv
bGwuYmluZCh0aGlzKSwgZmFsc2UpOworICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVy
KCJmb2N1cyIsIHRoaXMuX2hhbmRsZUVsZW1lbnRGb2N1cy5iaW5kKHRoaXMpLCBmYWxzZSk7CisK
KyAgICAvLyBJbiBXZWJLaXQgdGhlIERPTU5vZGVSZW1vdmVkIGV2ZW50IGlzIGZpcmVkIEFGVEVS
IHRoZSBub2RlIGlzIHJlbW92ZWQsIHRodXMgaXQgc2hvdWxkIGJlCisgICAgLy8gYXR0YWNoZWQg
dG8gYWxsIERPTSBub2RlcyB0aGF0IHdlIHdhbnQgdG8gdHJhY2suIEluc3RlYWQsIHdlIGF0dGFj
aCB0aGUgRE9NTm9kZVJlbW92ZWQKKyAgICAvLyBsaXN0ZW5lcnMgb25seSBvbiB0aGUgbGluZSBy
b3dzLCBhbmQgdXNlIERPTVN1YnRyZWVNb2RpZmllZCB0byB0cmFjayBub2RlIHJlbW92YWxzIGlu
c2lkZQorICAgIC8vIHRoZSBsaW5lIHJvd3MuIEZvciBtb3JlIGluZm8gc2VlOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU2NjYKKyAgICAvLworICAgIC8vIE9QVElN
SVpBVElPTi4gSXQgaXMgdmVyeSBleHBlbnNpdmUgdG8gbGlzdGVuIHRvIHRoZSBET00gbXV0YXRp
b24gZXZlbnRzLCB0aHVzIHdlIHJlbW92ZSB0aGUKKyAgICAvLyBsaXN0ZW5lcnMgd2hlbmV2ZXIg
d2UgZG8gYW55IGludGVybmFsIERPTSBtYW5pcHVsYXRpb25zIChzdWNoIGFzIGV4cGFuZC9jb2xs
YXBzZSBsaW5lIHJvd3MpCisgICAgLy8gYW5kIHNldCB0aGUgbGlzdGVuZXJzIGJhY2sgd2hlbiB3
ZSBhcmUgZmluaXNoZWQuCisgICAgdGhpcy5faGFuZGxlRE9NVXBkYXRlc0NhbGxiYWNrID0gdGhp
cy5faGFuZGxlRE9NVXBkYXRlcy5iaW5kKHRoaXMpOworICAgIHRoaXMuX2NvbnRhaW5lci5hZGRF
dmVudExpc3RlbmVyKCJET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQiLCB0aGlzLl9oYW5kbGVET01V
cGRhdGVzQ2FsbGJhY2ssIGZhbHNlKTsKKyAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0
ZW5lcigiRE9NTm9kZUluc2VydGVkIiwgdGhpcy5faGFuZGxlRE9NVXBkYXRlc0NhbGxiYWNrLCBm
YWxzZSk7CisgICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoIkRPTVN1YnRyZWVN
b2RpZmllZCIsIHRoaXMuX2hhbmRsZURPTVVwZGF0ZXNDYWxsYmFjaywgZmFsc2UpOworCisgICAg
dGhpcy5mcmVlQ2FjaGVkRWxlbWVudHMoKTsKKyAgICB0aGlzLl9idWlsZENodW5rcygpOworfQor
CitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CisgICAgc2V0
IG1pbWVUeXBlKG1pbWVUeXBlKQorICAgIHsKKyAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZXIubWlt
ZVR5cGUgPSBtaW1lVHlwZTsKKyAgICB9LAorCisgICAgc2V0UmVhZE9ubHk6IGZ1bmN0aW9uKHJl
YWRPbmx5LCByZXF1ZXN0Rm9jdXMpCisgICAgeworICAgICAgICBpZiAodGhpcy5fcmVhZE9ubHkg
PT09IHJlYWRPbmx5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuYmVnaW5E
b21VcGRhdGVzKCk7CisgICAgICAgIHRoaXMuX3JlYWRPbmx5ID0gcmVhZE9ubHk7CisgICAgICAg
IGlmICh0aGlzLl9yZWFkT25seSkKKyAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5yZW1vdmVT
dHlsZUNsYXNzKCJ0ZXh0LWVkaXRvci1lZGl0YWJsZSIpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIHRoaXMuX2NvbnRhaW5lci5hZGRTdHlsZUNsYXNzKCJ0ZXh0LWVkaXRvci1lZGl0YWJs
ZSIpOworICAgICAgICAgICAgaWYgKHJlcXVlc3RGb2N1cykKKyAgICAgICAgICAgICAgICB0aGlz
Ll91cGRhdGVTZWxlY3Rpb25PblN0YXJ0RWRpdGluZygpOworICAgICAgICB9CisgICAgICAgIHRo
aXMuZW5kRG9tVXBkYXRlcygpOworICAgIH0sCisKKyAgICByZWFkT25seTogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5OworICAgIH0sCisKKyAgICBfaGFu
ZGxlRWxlbWVudEZvY3VzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3Jl
YWRPbmx5KQorICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmZvY3VzKCk7CisgICAgfSwKKwor
ICAgIGRlZmF1bHRGb2N1c2VkRWxlbWVudDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYg
KHRoaXMuX3JlYWRPbmx5KQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudDsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjsKKyAgICB9LAorCisgICAgX3VwZGF0ZVNlbGVjdGlv
bk9uU3RhcnRFZGl0aW5nOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICAvLyBmb2N1cygpIG5l
ZWRzIHRvIGdvIGZpcnN0IGZvciB0aGUgY2FzZSB3aGVuIHRoZSBsYXN0IHNlbGVjdGlvbiB3YXMg
aW5zaWRlIHRoZSBlZGl0b3IgYW5kCisgICAgICAgIC8vIHRoZSAiRWRpdCIgYnV0dG9uIHdhcyBj
bGlja2VkLiBJbiB0aGlzIGNhc2Ugd2UgYmFpbCBhdCB0aGUgY2hlY2sgYmVsb3csIGJ1dCB0aGUK
KyAgICAgICAgLy8gZWRpdG9yIGRvZXMgbm90IHJlY2VpdmUgdGhlIGZvY3VzLCB0aHVzICJFc2Mi
IGRvZXMgbm90IGNhbmNlbCBlZGl0aW5nIHVudGlsIGF0IGxlYXN0CisgICAgICAgIC8vIG9uZSBj
aGFuZ2UgaGFzIGJlZW4gbWFkZSB0byB0aGUgZWRpdG9yIGNvbnRlbnRzLgorICAgICAgICB0aGlz
Ll9jb250YWluZXIuZm9jdXMoKTsKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRT
ZWxlY3Rpb24oKTsKKyAgICAgICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50KSB7CisgICAgICAg
ICAgICB2YXIgY29tbW9uQW5jZXN0b3JDb250YWluZXIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgw
KS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjsKKyAgICAgICAgICAgIGlmICh0aGlzLl9jb250YWlu
ZXIuaXNTZWxmT3JBbmNlc3Rvcihjb21tb25BbmNlc3RvckNvbnRhaW5lcikpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJh
bmdlcygpOworICAgICAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOworICAg
ICAgICByYW5nZS5zZXRTdGFydCh0aGlzLl9jb250YWluZXIsIDApOworICAgICAgICByYW5nZS5z
ZXRFbmQodGhpcy5fY29udGFpbmVyLCAwKTsKKyAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJh
bmdlKTsKKyAgICB9LAorCisgICAgc2V0RWRpdGFibGVSYW5nZTogZnVuY3Rpb24oc3RhcnRMaW5l
LCBlbmRMaW5lKQorICAgIHsKKyAgICAgICAgdGhpcy5iZWdpbkRvbVVwZGF0ZXMoKTsKKworICAg
ICAgICB2YXIgZmlyc3RDaHVua051bWJlciA9IHRoaXMuX2NodW5rTnVtYmVyRm9yTGluZShzdGFy
dExpbmUpOworICAgICAgICB2YXIgZmlyc3RDaHVuayA9IHRoaXMuX3RleHRDaHVua3NbZmlyc3RD
aHVua051bWJlcl07CisgICAgICAgIGlmIChmaXJzdENodW5rLnN0YXJ0TGluZSAhPT0gc3RhcnRM
aW5lKSB7CisgICAgICAgICAgICB0aGlzLl9zcGxpdENodW5rT25BTGluZShzdGFydExpbmUsIGZp
cnN0Q2h1bmtOdW1iZXIpOworICAgICAgICAgICAgZmlyc3RDaHVua051bWJlciArPSAxOworICAg
ICAgICB9CisKKyAgICAgICAgdmFyIGxhc3RDaHVua051bWJlciA9IHRoaXMuX3RleHRDaHVua3Mu
bGVuZ3RoOworICAgICAgICBpZiAoZW5kTGluZSAhPT0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291
bnQpIHsKKyAgICAgICAgICAgIGxhc3RDaHVua051bWJlciA9IHRoaXMuX2NodW5rTnVtYmVyRm9y
TGluZShlbmRMaW5lKTsKKyAgICAgICAgICAgIHZhciBsYXN0Q2h1bmsgPSB0aGlzLl90ZXh0Q2h1
bmtzW2xhc3RDaHVua051bWJlcl07CisgICAgICAgICAgICBpZiAobGFzdENodW5rICYmIGxhc3RD
aHVuay5zdGFydExpbmUgIT09IGVuZExpbmUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9zcGxp
dENodW5rT25BTGluZShlbmRMaW5lLCBsYXN0Q2h1bmtOdW1iZXIpOworICAgICAgICAgICAgICAg
IGxhc3RDaHVua051bWJlciArPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgZm9yICh2YXIgY2h1bmtOdW1iZXIgPSAwOyBjaHVua051bWJlciA8IGZpcnN0Q2h1bmtOdW1i
ZXI7ICsrY2h1bmtOdW1iZXIpCisgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVt
YmVyXS5yZWFkT25seSA9IHRydWU7CisgICAgICAgIGZvciAodmFyIGNodW5rTnVtYmVyID0gZmly
c3RDaHVua051bWJlcjsgY2h1bmtOdW1iZXIgPCBsYXN0Q2h1bmtOdW1iZXI7ICsrY2h1bmtOdW1i
ZXIpCisgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVtYmVyXS5yZWFkT25seSA9
IGZhbHNlOworICAgICAgICBmb3IgKHZhciBjaHVua051bWJlciA9IGxhc3RDaHVua051bWJlcjsg
Y2h1bmtOdW1iZXIgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytjaHVua051bWJlcikKKyAg
ICAgICAgICAgIHRoaXMuX3RleHRDaHVua3NbY2h1bmtOdW1iZXJdLnJlYWRPbmx5ID0gdHJ1ZTsK
KworICAgICAgICB0aGlzLmVuZERvbVVwZGF0ZXMoKTsKKyAgICB9LAorCisgICAgY2xlYXJFZGl0
YWJsZVJhbmdlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBmb3IgKHZhciBjaHVua051bWJl
ciA9IDA7IGNodW5rTnVtYmVyIDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGg7ICsrY2h1bmtOdW1i
ZXIpCisgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVtYmVyXS5yZWFkT25seSA9
IGZhbHNlOworICAgIH0sCisKKyAgICBtYXJrQW5kUmV2ZWFsUmFuZ2U6IGZ1bmN0aW9uKHJhbmdl
KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3JhbmdlVG9NYXJrKSB7CisgICAgICAgICAgICB2
YXIgbWFya2VkTGluZSA9IHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0TGluZTsKKyAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLl9yYW5nZVRvTWFyazsKKyAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgbWFy
a2VkIHJlZ2lvbiBpbW1lZGlhdGVseS4KKyAgICAgICAgICAgIGlmICghdGhpcy5fZGlydHlMaW5l
cykgeworICAgICAgICAgICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVzKCk7CisgICAgICAgICAg
ICAgICAgdmFyIGNodW5rID0gdGhpcy5jaHVua0ZvckxpbmUobWFya2VkTGluZSk7CisgICAgICAg
ICAgICAgICAgdmFyIHdhc0V4cGFuZGVkID0gY2h1bmsuZXhwYW5kZWQ7CisgICAgICAgICAgICAg
ICAgY2h1bmsuZXhwYW5kZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBjaHVuay51cGRhdGVD
b2xsYXBzZWRMaW5lUm93KCk7CisgICAgICAgICAgICAgICAgY2h1bmsuZXhwYW5kZWQgPSB3YXNF
eHBhbmRlZDsKKyAgICAgICAgICAgICAgICB0aGlzLmVuZERvbVVwZGF0ZXMoKTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHRoaXMuX3BhaW50TGluZXMobWFya2VkTGluZSwg
bWFya2VkTGluZSArIDEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJhbmdlKSB7CisgICAg
ICAgICAgICB0aGlzLl9yYW5nZVRvTWFyayA9IHJhbmdlOworICAgICAgICAgICAgdGhpcy5yZXZl
YWxMaW5lKHJhbmdlLnN0YXJ0TGluZSk7CisgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLm1h
a2VMaW5lQUNodW5rKHJhbmdlLnN0YXJ0TGluZSk7CisgICAgICAgICAgICB0aGlzLl9wYWludExp
bmUoY2h1bmsuZWxlbWVudCk7CisgICAgICAgICAgICBpZiAodGhpcy5fbWFya2VkUmFuZ2VFbGVt
ZW50KQorICAgICAgICAgICAgICAgIHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudC5zY3JvbGxJbnRv
Vmlld0lmTmVlZGVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIHRoaXMuX21hcmtlZFJh
bmdlRWxlbWVudDsKKyAgICB9LAorCisgICAgaGlnaGxpZ2h0TGluZTogZnVuY3Rpb24obGluZU51
bWJlcikKKyAgICB7CisgICAgICAgIHRoaXMuY2xlYXJMaW5lSGlnaGxpZ2h0KCk7CisgICAgICAg
IHRoaXMuX2hpZ2hsaWdodGVkTGluZSA9IGxpbmVOdW1iZXI7CisgICAgICAgIHRoaXMucmV2ZWFs
TGluZShsaW5lTnVtYmVyKTsKKworICAgICAgICBpZiAoIXRoaXMuX3JlYWRPbmx5KQorICAgICAg
ICAgICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShs
aW5lTnVtYmVyLCAwLCBsaW5lTnVtYmVyLCAwKSwgZmFsc2UpOworCisgICAgICAgIHRoaXMuYWRk
RGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWhpZ2hsaWdodGVkLWxpbmUiKTsKKyAgICB9
LAorCisgICAgY2xlYXJMaW5lSGlnaGxpZ2h0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBp
ZiAodHlwZW9mIHRoaXMuX2hpZ2hsaWdodGVkTGluZSA9PT0gIm51bWJlciIpIHsKKyAgICAgICAg
ICAgIHRoaXMucmVtb3ZlRGVjb3JhdGlvbih0aGlzLl9oaWdobGlnaHRlZExpbmUsICJ3ZWJraXQt
aGlnaGxpZ2h0ZWQtbGluZSIpOworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2hpZ2hsaWdodGVk
TGluZTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBmcmVlQ2FjaGVkRWxlbWVudHM6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2NhY2hlZFNwYW5zID0gW107CisgICAgICAgIHRo
aXMuX2NhY2hlZFRleHROb2RlcyA9IFtdOworICAgICAgICB0aGlzLl9jYWNoZWRSb3dzID0gW107
CisgICAgfSwKKworICAgIGhhbmRsZVVuZG9SZWRvOiBmdW5jdGlvbihyZWRvKQorICAgIHsKKyAg
ICAgICAgaWYgKHRoaXMuX2RpcnR5TGluZXMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgdGhpcy5iZWdpblVwZGF0ZXMoKTsKKworICAgICAgICBmdW5jdGlvbiBiZWZvcmUo
KQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLl9lbnRlclRleHRDaGFuZ2VNb2RlKCk7Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBhZnRlcihvbGRSYW5nZSwgbmV3UmFuZ2UpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuX2V4aXRUZXh0Q2hhbmdlTW9kZShvbGRSYW5nZSwg
bmV3UmFuZ2UpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHJhbmdlID0gcmVkbyA/IHRoaXMu
X3RleHRNb2RlbC5yZWRvKGJlZm9yZS5iaW5kKHRoaXMpLCBhZnRlci5iaW5kKHRoaXMpKSA6IHRo
aXMuX3RleHRNb2RlbC51bmRvKGJlZm9yZS5iaW5kKHRoaXMpLCBhZnRlci5iaW5kKHRoaXMpKTsK
KworICAgICAgICB0aGlzLmVuZFVwZGF0ZXMoKTsKKworICAgICAgICAvLyBSZXN0b3JlIGxvY2F0
aW9uIHBvc3QtcmVwYWludC4KKyAgICAgICAgaWYgKHJhbmdlKQorICAgICAgICAgICAgdGhpcy5f
cmVzdG9yZVNlbGVjdGlvbihyYW5nZSwgdHJ1ZSk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfSwKKworICAgIGhhbmRsZVRhYktleVByZXNzOiBmdW5jdGlvbihzaGlmdEtleSkKKyAgICB7
CisgICAgICAgIGlmICh0aGlzLl9kaXJ0eUxpbmVzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLl9nZXRTZWxlY3Rpb24oKTsKKyAgICAg
ICAgaWYgKCFzZWxlY3Rpb24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
dmFyIHJhbmdlID0gc2VsZWN0aW9uLm5vcm1hbGl6ZSgpOworCisgICAgICAgIHRoaXMuYmVnaW5V
cGRhdGVzKCk7CisgICAgICAgIHRoaXMuX2VudGVyVGV4dENoYW5nZU1vZGUoKTsKKworICAgICAg
ICB2YXIgbmV3UmFuZ2U7CisgICAgICAgIHZhciByYW5nZVdhc0VtcHR5ID0gcmFuZ2UuaXNFbXB0
eSgpOworICAgICAgICBpZiAoc2hpZnRLZXkpCisgICAgICAgICAgICBuZXdSYW5nZSA9IHRoaXMu
X3VuaW5kZW50TGluZXMocmFuZ2UpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChy
YW5nZVdhc0VtcHR5KQorICAgICAgICAgICAgICAgIG5ld1JhbmdlID0gdGhpcy5fZWRpdFJhbmdl
KHJhbmdlLCBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MudGV4dEVkaXRvckluZGVudC5nZXQoKSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbmV3UmFuZ2UgPSB0aGlzLl9pbmRlbnRM
aW5lcyhyYW5nZSk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9leGl0VGV4dENoYW5nZU1v
ZGUocmFuZ2UsIG5ld1JhbmdlKTsKKyAgICAgICAgdGhpcy5lbmRVcGRhdGVzKCk7CisgICAgICAg
IGlmIChyYW5nZVdhc0VtcHR5KQorICAgICAgICAgICAgbmV3UmFuZ2Uuc3RhcnRDb2x1bW4gPSBu
ZXdSYW5nZS5lbmRDb2x1bW47CisgICAgICAgIHRoaXMuX3Jlc3RvcmVTZWxlY3Rpb24obmV3UmFu
Z2UsIHRydWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9LAorCisgICAgX2luZGVudExp
bmVzOiBmdW5jdGlvbihyYW5nZSkKKyAgICB7CisgICAgICAgIHZhciBpbmRlbnQgPSBXZWJJbnNw
ZWN0b3Iuc2V0dGluZ3MudGV4dEVkaXRvckluZGVudC5nZXQoKTsKKworICAgICAgICBpZiAodGhp
cy5fbGFzdEVkaXRlZFJhbmdlKQorICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLm1hcmtVbmRv
YWJsZVN0YXRlKCk7CisKKyAgICAgICAgdmFyIG5ld1JhbmdlID0gcmFuZ2UuY2xvbmUoKTsKKwor
ICAgICAgICAvLyBEbyBub3QgY2hhbmdlIGEgc2VsZWN0aW9uIHN0YXJ0IHBvc2l0aW9uIHdoZW4g
aXQgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUKKyAgICAgICAgaWYgKHJhbmdlLnN0YXJ0
Q29sdW1uKQorICAgICAgICAgICAgbmV3UmFuZ2Uuc3RhcnRDb2x1bW4gKz0gaW5kZW50Lmxlbmd0
aDsKKworICAgICAgICB2YXIgaW5kZW50RW5kTGluZSA9IHJhbmdlLmVuZExpbmU7CisgICAgICAg
IGlmIChyYW5nZS5lbmRDb2x1bW4pCisgICAgICAgICAgICBuZXdSYW5nZS5lbmRDb2x1bW4gKz0g
aW5kZW50Lmxlbmd0aDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5kZW50RW5kTGluZS0t
OworCisgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgPSByYW5nZS5zdGFydExpbmU7IGxpbmVO
dW1iZXIgPD0gaW5kZW50RW5kTGluZTsgbGluZU51bWJlcisrKQorICAgICAgICAgICAgdGhpcy5f
dGV4dE1vZGVsLmVkaXRSYW5nZShuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShsaW5lTnVtYmVy
LCAwLCBsaW5lTnVtYmVyLCAwKSwgaW5kZW50KTsKKworICAgICAgICB0aGlzLl9sYXN0RWRpdGVk
UmFuZ2UgPSBuZXdSYW5nZTsKKworICAgICAgICByZXR1cm4gbmV3UmFuZ2U7CisgICAgfSwKKwor
ICAgIF91bmluZGVudExpbmVzOiBmdW5jdGlvbihyYW5nZSkKKyAgICB7CisgICAgICAgIGlmICh0
aGlzLl9sYXN0RWRpdGVkUmFuZ2UpCisgICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwubWFya1Vu
ZG9hYmxlU3RhdGUoKTsKKworICAgICAgICB2YXIgaW5kZW50ID0gV2ViSW5zcGVjdG9yLnNldHRp
bmdzLnRleHRFZGl0b3JJbmRlbnQuZ2V0KCk7CisgICAgICAgIHZhciBpbmRlbnRMZW5ndGggPSBp
bmRlbnQgPT09IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTW9kZWwuSW5kZW50LlRhYkNoYXJhY3Rl
ciA/IDQgOiBpbmRlbnQubGVuZ3RoOworICAgICAgICB2YXIgbGluZUluZGVudFJlZ2V4ID0gbmV3
IFJlZ0V4cCgiXiB7MSwiICsgaW5kZW50TGVuZ3RoICsgIn0iKTsKKyAgICAgICAgdmFyIG5ld1Jh
bmdlID0gcmFuZ2UuY2xvbmUoKTsKKworICAgICAgICB2YXIgaW5kZW50RW5kTGluZSA9IHJhbmdl
LmVuZExpbmU7CisgICAgICAgIGlmICghcmFuZ2UuZW5kQ29sdW1uKQorICAgICAgICAgICAgaW5k
ZW50RW5kTGluZS0tOworCisgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgPSByYW5nZS5zdGFy
dExpbmU7IGxpbmVOdW1iZXIgPD0gaW5kZW50RW5kTGluZTsgbGluZU51bWJlcisrKSB7CisgICAg
ICAgICAgICB2YXIgbGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lKGxpbmVOdW1iZXIpOworICAg
ICAgICAgICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gbGluZS5jaGFyQXQoMCk7CisgICAgICAgICAg
ICB2YXIgbGluZUluZGVudExlbmd0aDsKKworICAgICAgICAgICAgaWYgKGZpcnN0Q2hhcmFjdGVy
ID09PSAiICIpCisgICAgICAgICAgICAgICAgbGluZUluZGVudExlbmd0aCA9IGxpbmUubWF0Y2go
bGluZUluZGVudFJlZ2V4KVswXS5sZW5ndGg7CisgICAgICAgICAgICBlbHNlIGlmIChmaXJzdENo
YXJhY3RlciA9PT0gIlx0IikKKyAgICAgICAgICAgICAgICBsaW5lSW5kZW50TGVuZ3RoID0gMTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgdGhpcy5fdGV4dE1vZGVsLmVkaXRSYW5nZShuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShs
aW5lTnVtYmVyLCAwLCBsaW5lTnVtYmVyLCBsaW5lSW5kZW50TGVuZ3RoKSwgIiIpOworCisgICAg
ICAgICAgICBpZiAobGluZU51bWJlciA9PT0gcmFuZ2Uuc3RhcnRMaW5lKQorICAgICAgICAgICAg
ICAgIG5ld1JhbmdlLnN0YXJ0Q29sdW1uID0gTWF0aC5tYXgoMCwgbmV3UmFuZ2Uuc3RhcnRDb2x1
bW4gLSBsaW5lSW5kZW50TGVuZ3RoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsaW5lSW5k
ZW50TGVuZ3RoKQorICAgICAgICAgICAgbmV3UmFuZ2UuZW5kQ29sdW1uID0gTWF0aC5tYXgoMCwg
bmV3UmFuZ2UuZW5kQ29sdW1uIC0gbGluZUluZGVudExlbmd0aCk7CisKKyAgICAgICAgdGhpcy5f
bGFzdEVkaXRlZFJhbmdlID0gbmV3UmFuZ2U7CisKKyAgICAgICAgcmV0dXJuIG5ld1JhbmdlOwor
ICAgIH0sCisKKyAgICBoYW5kbGVFbnRlcktleTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
aWYgKHRoaXMuX2RpcnR5TGluZXMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgdmFyIHJhbmdlID0gdGhpcy5fZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgIGlmICghcmFuZ2Up
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmFuZ2UgPSByYW5nZS5ub3Jt
YWxpemUoKTsKKworICAgICAgICBpZiAocmFuZ2UuZW5kQ29sdW1uID09PSAwKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHZhciBsaW5lID0gdGhpcy5fdGV4dE1vZGVsLmxp
bmUocmFuZ2Uuc3RhcnRMaW5lKTsKKyAgICAgICAgdmFyIGxpbmVQcmVmaXggPSBsaW5lLnN1YnN0
cmluZygwLCByYW5nZS5zdGFydENvbHVtbik7CisgICAgICAgIHZhciBpbmRlbnRNYXRjaCA9IGxp
bmVQcmVmaXgubWF0Y2goL15ccysvKTsKKyAgICAgICAgdmFyIGN1cnJlbnRJbmRlbnQgPSBpbmRl
bnRNYXRjaCA/IGluZGVudE1hdGNoWzBdIDogIiI7CisKKyAgICAgICAgdmFyIHRleHRFZGl0b3JJ
bmRlbnQgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MudGV4dEVkaXRvckluZGVudC5nZXQoKTsKKyAg
ICAgICAgdmFyIGluZGVudCA9IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTW9kZWwuZW5kc1dpdGhC
cmFja2V0UmVnZXgudGVzdChsaW5lUHJlZml4KSA/IGN1cnJlbnRJbmRlbnQgKyB0ZXh0RWRpdG9y
SW5kZW50IDogY3VycmVudEluZGVudDsKKworICAgICAgICBpZiAoIWluZGVudCkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB0aGlzLmJlZ2luVXBkYXRlcygpOworICAgICAg
ICB0aGlzLl9lbnRlclRleHRDaGFuZ2VNb2RlKCk7CisKKyAgICAgICAgdmFyIGxpbmVCcmVhayA9
IHRoaXMuX3RleHRNb2RlbC5saW5lQnJlYWs7CisgICAgICAgIHZhciBuZXdSYW5nZTsKKyAgICAg
ICAgaWYgKHJhbmdlLmlzRW1wdHkoKSAmJiBsaW5lLnN1YnN0cihyYW5nZS5lbmRDb2x1bW4gLSAx
LCAyKSA9PT0gJ3t9JykgeworICAgICAgICAgICAgLy8ge3x9CisgICAgICAgICAgICAvLyBiZWNv
bWVzCisgICAgICAgICAgICAvLyB7CisgICAgICAgICAgICAvLyAgICAgfAorICAgICAgICAgICAg
Ly8gfQorICAgICAgICAgICAgbmV3UmFuZ2UgPSB0aGlzLl9lZGl0UmFuZ2UocmFuZ2UsIGxpbmVC
cmVhayArIGluZGVudCArIGxpbmVCcmVhayArIGN1cnJlbnRJbmRlbnQpOworICAgICAgICAgICAg
bmV3UmFuZ2UuZW5kTGluZS0tOworICAgICAgICAgICAgbmV3UmFuZ2UuZW5kQ29sdW1uICs9IHRl
eHRFZGl0b3JJbmRlbnQubGVuZ3RoOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG5ld1Jh
bmdlID0gdGhpcy5fZWRpdFJhbmdlKHJhbmdlLCBsaW5lQnJlYWsgKyBpbmRlbnQpOworCisgICAg
ICAgIHRoaXMuX2V4aXRUZXh0Q2hhbmdlTW9kZShyYW5nZSwgbmV3UmFuZ2UpOworICAgICAgICB0
aGlzLmVuZFVwZGF0ZXMoKTsKKyAgICAgICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihuZXdSYW5n
ZS5jb2xsYXBzZVRvRW5kKCksIHRydWUpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0s
CisKKyAgICBfc3BsaXRDaHVua09uQUxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNodW5rTnVt
YmVyLCBjcmVhdGVTdWZmaXhDaHVuaykKKyAgICB7CisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0
aGlzLl9nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgdmFyIGNodW5rID0gV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLl9zcGxpdENodW5rT25BTGluZS5jYWxsKHRo
aXMsIGxpbmVOdW1iZXIsIGNodW5rTnVtYmVyLCBjcmVhdGVTdWZmaXhDaHVuayk7CisgICAgICAg
IHRoaXMuX3Jlc3RvcmVTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIGNodW5r
OworICAgIH0sCisKKyAgICBiZWdpbkRvbVVwZGF0ZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5iZWdpbkRv
bVVwZGF0ZXMuY2FsbCh0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMuX2RvbVVwZGF0ZUNvYWxlc2Np
bmdMZXZlbCA9PT0gMSkgeworICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLnJlbW92ZUV2ZW50
TGlzdGVuZXIoIkRPTUNoYXJhY3RlckRhdGFNb2RpZmllZCIsIHRoaXMuX2hhbmRsZURPTVVwZGF0
ZXNDYWxsYmFjaywgZmFsc2UpOworICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLnJlbW92ZUV2
ZW50TGlzdGVuZXIoIkRPTU5vZGVJbnNlcnRlZCIsIHRoaXMuX2hhbmRsZURPTVVwZGF0ZXNDYWxs
YmFjaywgZmFsc2UpOworICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLnJlbW92ZUV2ZW50TGlz
dGVuZXIoIkRPTVN1YnRyZWVNb2RpZmllZCIsIHRoaXMuX2hhbmRsZURPTVVwZGF0ZXNDYWxsYmFj
aywgZmFsc2UpOworICAgICAgICB9CisgICAgfSwKKworICAgIGVuZERvbVVwZGF0ZXM6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVs
LnByb3RvdHlwZS5lbmREb21VcGRhdGVzLmNhbGwodGhpcyk7CisgICAgICAgIGlmICh0aGlzLl9k
b21VcGRhdGVDb2FsZXNjaW5nTGV2ZWwgPT09IDApIHsKKyAgICAgICAgICAgIHRoaXMuX2NvbnRh
aW5lci5hZGRFdmVudExpc3RlbmVyKCJET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQiLCB0aGlzLl9o
YW5kbGVET01VcGRhdGVzQ2FsbGJhY2ssIGZhbHNlKTsKKyAgICAgICAgICAgIHRoaXMuX2NvbnRh
aW5lci5hZGRFdmVudExpc3RlbmVyKCJET01Ob2RlSW5zZXJ0ZWQiLCB0aGlzLl9oYW5kbGVET01V
cGRhdGVzQ2FsbGJhY2ssIGZhbHNlKTsKKyAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5hZGRF
dmVudExpc3RlbmVyKCJET01TdWJ0cmVlTW9kaWZpZWQiLCB0aGlzLl9oYW5kbGVET01VcGRhdGVz
Q2FsbGJhY2ssIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfZW5hYmxlRE9NTm9k
ZVJlbW92ZWRMaXN0ZW5lcjogZnVuY3Rpb24obGluZVJvdywgZW5hYmxlKQorICAgIHsKKyAgICAg
ICAgaWYgKGVuYWJsZSkKKyAgICAgICAgICAgIGxpbmVSb3cuYWRkRXZlbnRMaXN0ZW5lcigiRE9N
Tm9kZVJlbW92ZWQiLCB0aGlzLl9oYW5kbGVET01VcGRhdGVzQ2FsbGJhY2ssIGZhbHNlKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbGluZVJvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJET01O
b2RlUmVtb3ZlZCIsIHRoaXMuX2hhbmRsZURPTVVwZGF0ZXNDYWxsYmFjaywgZmFsc2UpOworICAg
IH0sCisKKyAgICBfYnVpbGRDaHVua3M6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQ7ICsraSkKKyAgICAgICAg
ICAgIHRoaXMuX3RleHRNb2RlbC5yZW1vdmVBdHRyaWJ1dGUoaSwgImhpZ2hsaWdodCIpOworCisg
ICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5fYnVp
bGRDaHVua3MuY2FsbCh0aGlzKTsKKyAgICB9LAorCisgICAgX2NyZWF0ZU5ld0NodW5rOiBmdW5j
dGlvbihzdGFydExpbmUsIGVuZExpbmUpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rKHRoaXMsIHN0YXJ0TGluZSwgZW5kTGluZSk7Cisg
ICAgfSwKKworICAgIF9leHBhbmRDaHVua3M6IGZ1bmN0aW9uKGZyb21JbmRleCwgdG9JbmRleCkK
KyAgICB7CisgICAgICAgIHZhciBsYXN0Q2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW3RvSW5kZXgg
LSAxXTsKKyAgICAgICAgdmFyIGxhc3RWaXNpYmxlTGluZSA9IGxhc3RDaHVuay5zdGFydExpbmUg
KyBsYXN0Q2h1bmsubGluZXNDb3VudDsKKworICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5f
Z2V0U2VsZWN0aW9uKCk7CisKKyAgICAgICAgdGhpcy5fbXV0ZUhpZ2hsaWdodExpc3RlbmVyID0g
dHJ1ZTsKKyAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZXIuaGlnaGxpZ2h0KGxhc3RWaXNpYmxlTGlu
ZSk7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9tdXRlSGlnaGxpZ2h0TGlzdGVuZXI7CisKKyAgICAg
ICAgdGhpcy5fcmVzdG9yZVBhaW50TGluZXNPcGVyYXRpb25zQ3JlZGl0KCk7CisgICAgICAgIFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5fZXhwYW5kQ2h1bmtz
LmNhbGwodGhpcywgZnJvbUluZGV4LCB0b0luZGV4KTsKKyAgICAgICAgdGhpcy5fYWRqdXN0UGFp
bnRMaW5lc09wZXJhdGlvbnNSZWZyZXNoVmFsdWUoKTsKKworICAgICAgICB0aGlzLl9yZXN0b3Jl
U2VsZWN0aW9uKHNlbGVjdGlvbik7CisgICAgfSwKKworICAgIF9oaWdobGlnaHREYXRhUmVhZHk6
IGZ1bmN0aW9uKGZyb21MaW5lLCB0b0xpbmUpCisgICAgeworICAgICAgICBpZiAodGhpcy5fbXV0
ZUhpZ2hsaWdodExpc3RlbmVyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLl9y
ZXN0b3JlUGFpbnRMaW5lc09wZXJhdGlvbnNDcmVkaXQoKTsKKyAgICAgICAgdGhpcy5fcGFpbnRM
aW5lcyhmcm9tTGluZSwgdG9MaW5lLCB0cnVlIC8qcmVzdG9yZVNlbGVjdGlvbiovKTsKKyAgICB9
LAorCisgICAgX3NjaGVkdWxlUGFpbnRMaW5lczogZnVuY3Rpb24oc3RhcnRMaW5lLCBlbmRMaW5l
KQorICAgIHsKKyAgICAgICAgaWYgKHN0YXJ0TGluZSA+PSBlbmRMaW5lKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmICghdGhpcy5fc2NoZWR1bGVkUGFpbnRMaW5lcykgeworICAg
ICAgICAgICAgdGhpcy5fc2NoZWR1bGVkUGFpbnRMaW5lcyA9IFsgeyBzdGFydExpbmU6IHN0YXJ0
TGluZSwgZW5kTGluZTogZW5kTGluZSB9IF07CisgICAgICAgICAgICB0aGlzLl9wYWludFNjaGVk
dWxlZExpbmVzVGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuX3BhaW50U2NoZWR1bGVkTGluZXMuYmlu
ZCh0aGlzKSwgMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMuX3NjaGVkdWxlZFBhaW50TGluZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9zY2hlZHVsZWRQYWludExpbmVzW2ldOworICAgICAg
ICAgICAgICAgIGlmIChjaHVuay5zdGFydExpbmUgPD0gZW5kTGluZSAmJiBjaHVuay5lbmRMaW5l
ID49IHN0YXJ0TGluZSkgeworICAgICAgICAgICAgICAgICAgICBjaHVuay5zdGFydExpbmUgPSBN
YXRoLm1pbihjaHVuay5zdGFydExpbmUsIHN0YXJ0TGluZSk7CisgICAgICAgICAgICAgICAgICAg
IGNodW5rLmVuZExpbmUgPSBNYXRoLm1heChjaHVuay5lbmRMaW5lLCBlbmRMaW5lKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoY2h1bmsuc3RhcnRMaW5lID4gZW5kTGluZSkgeworICAgICAgICAgICAgICAgICAgICB0
aGlzLl9zY2hlZHVsZWRQYWludExpbmVzLnNwbGljZShpLCAwLCB7IHN0YXJ0TGluZTogc3RhcnRM
aW5lLCBlbmRMaW5lOiBlbmRMaW5lIH0pOworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fc2NoZWR1
bGVkUGFpbnRMaW5lcy5wdXNoKHsgc3RhcnRMaW5lOiBzdGFydExpbmUsIGVuZExpbmU6IGVuZExp
bmUgfSk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX3BhaW50U2NoZWR1bGVkTGluZXM6IGZ1
bmN0aW9uKHNraXBSZXN0b3JlU2VsZWN0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3Bh
aW50U2NoZWR1bGVkTGluZXNUaW1lcikKKyAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9w
YWludFNjaGVkdWxlZExpbmVzVGltZXIpOworICAgICAgICBkZWxldGUgdGhpcy5fcGFpbnRTY2hl
ZHVsZWRMaW5lc1RpbWVyOworCisgICAgICAgIGlmICghdGhpcy5fc2NoZWR1bGVkUGFpbnRMaW5l
cykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBSZXNjaGVkdWxlIHRoZSB0aW1l
ciBpZiB3ZSBjYW4gbm90IHBhaW50IHRoZSBsaW5lcyB5ZXQsIG9yIHRoZSB1c2VyIGlzIHNjcm9s
bGluZy4KKyAgICAgICAgaWYgKHRoaXMuX2RpcnR5TGluZXMgfHwgdGhpcy5fcmVwYWludEFsbFRp
bWVyKSB7CisgICAgICAgICAgICB0aGlzLl9wYWludFNjaGVkdWxlZExpbmVzVGltZXIgPSBzZXRU
aW1lb3V0KHRoaXMuX3BhaW50U2NoZWR1bGVkTGluZXMuYmluZCh0aGlzKSwgNTApOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHNjaGVkdWxlZFBhaW50TGlu
ZXMgPSB0aGlzLl9zY2hlZHVsZWRQYWludExpbmVzOworICAgICAgICBkZWxldGUgdGhpcy5fc2No
ZWR1bGVkUGFpbnRMaW5lczsKKworICAgICAgICB0aGlzLl9yZXN0b3JlUGFpbnRMaW5lc09wZXJh
dGlvbnNDcmVkaXQoKTsKKyAgICAgICAgdGhpcy5fcGFpbnRMaW5lQ2h1bmtzKHNjaGVkdWxlZFBh
aW50TGluZXMsICFza2lwUmVzdG9yZVNlbGVjdGlvbik7CisgICAgICAgIHRoaXMuX2FkanVzdFBh
aW50TGluZXNPcGVyYXRpb25zUmVmcmVzaFZhbHVlKCk7CisgICAgfSwKKworICAgIF9yZXN0b3Jl
UGFpbnRMaW5lc09wZXJhdGlvbnNDcmVkaXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlm
ICghdGhpcy5fcGFpbnRMaW5lc09wZXJhdGlvbnNSZWZyZXNoVmFsdWUpCisgICAgICAgICAgICB0
aGlzLl9wYWludExpbmVzT3BlcmF0aW9uc1JlZnJlc2hWYWx1ZSA9IDI1MDsKKyAgICAgICAgdGhp
cy5fcGFpbnRMaW5lc09wZXJhdGlvbnNDcmVkaXQgPSB0aGlzLl9wYWludExpbmVzT3BlcmF0aW9u
c1JlZnJlc2hWYWx1ZTsKKyAgICAgICAgdGhpcy5fcGFpbnRMaW5lc09wZXJhdGlvbnNMYXN0UmVm
cmVzaCA9IERhdGUubm93KCk7CisgICAgfSwKKworICAgIF9hZGp1c3RQYWludExpbmVzT3BlcmF0
aW9uc1JlZnJlc2hWYWx1ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIG9wZXJhdGlv
bnNEb25lID0gdGhpcy5fcGFpbnRMaW5lc09wZXJhdGlvbnNSZWZyZXNoVmFsdWUgLSB0aGlzLl9w
YWludExpbmVzT3BlcmF0aW9uc0NyZWRpdDsKKyAgICAgICAgaWYgKG9wZXJhdGlvbnNEb25lIDw9
IDApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciB0aW1lUGFzdCA9IERhdGUubm93
KCkgLSB0aGlzLl9wYWludExpbmVzT3BlcmF0aW9uc0xhc3RSZWZyZXNoOworICAgICAgICBpZiAo
dGltZVBhc3QgPD0gMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gTWFrZSB0aGUg
c3luY2hyb25vdXMgQ1BVIGNodW5rIGZvciBwYWludGluZyB0aGUgbGluZXMgNTAgbXNlYy4KKyAg
ICAgICAgdmFyIHZhbHVlID0gTWF0aC5mbG9vcihvcGVyYXRpb25zRG9uZSAvIHRpbWVQYXN0ICog
NTApOworICAgICAgICB0aGlzLl9wYWludExpbmVzT3BlcmF0aW9uc1JlZnJlc2hWYWx1ZSA9IE51
bWJlci5jb25zdHJhaW4odmFsdWUsIDE1MCwgMTUwMCk7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIEBwYXJhbSB7Ym9vbGVhbj19IHJlc3RvcmVTZWxlY3Rpb24KKyAgICAgKi8KKyAgICBfcGFp
bnRMaW5lczogZnVuY3Rpb24oZnJvbUxpbmUsIHRvTGluZSwgcmVzdG9yZVNlbGVjdGlvbikKKyAg
ICB7CisgICAgICAgIHRoaXMuX3BhaW50TGluZUNodW5rcyhbIHsgc3RhcnRMaW5lOiBmcm9tTGlu
ZSwgZW5kTGluZTogdG9MaW5lIH0gXSwgcmVzdG9yZVNlbGVjdGlvbik7CisgICAgfSwKKworICAg
IF9wYWludExpbmVDaHVua3M6IGZ1bmN0aW9uKGxpbmVDaHVua3MsIHJlc3RvcmVTZWxlY3Rpb24p
CisgICAgeworICAgICAgICAvLyBGaXJzdCwgcGFpbnQgdmlzaWJsZSBsaW5lcywgc28gdGhhdCBp
biBjYXNlIG9mIGxvbmcgbGluZXMgd2Ugc2hvdWxkIHN0YXJ0IGhpZ2hsaWdodGluZworICAgICAg
ICAvLyB0aGUgdmlzaWJsZSBhcmVhIGltbWVkaWF0ZWx5LCBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9y
IHRoZSBsaW5lcyBhYm92ZSB0aGUgdmlzaWJsZSBhcmVhLgorICAgICAgICB2YXIgdmlzaWJsZUZy
b20gPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wOworICAgICAgICB2YXIgZmlyc3RWaXNpYmxlTGlu
ZU51bWJlciA9IHRoaXMuX2ZpbmRGaXJzdFZpc2libGVMaW5lTnVtYmVyKHZpc2libGVGcm9tKTsK
KworICAgICAgICB2YXIgY2h1bms7CisgICAgICAgIHZhciBzZWxlY3Rpb247CisgICAgICAgIHZh
ciBpbnZpc2libGVMaW5lUm93cyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxp
bmVDaHVua3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBsaW5lQ2h1bmsgPSBsaW5l
Q2h1bmtzW2ldOworICAgICAgICAgICAgaWYgKHRoaXMuX2RpcnR5TGluZXMgfHwgdGhpcy5fc2No
ZWR1bGVkUGFpbnRMaW5lcykgeworICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlUGFpbnRM
aW5lcyhsaW5lQ2h1bmsuc3RhcnRMaW5lLCBsaW5lQ2h1bmsuZW5kTGluZSk7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHZhciBsaW5l
TnVtYmVyID0gbGluZUNodW5rLnN0YXJ0TGluZTsgbGluZU51bWJlciA8IGxpbmVDaHVuay5lbmRM
aW5lOyArK2xpbmVOdW1iZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNodW5rIHx8IGxpbmVO
dW1iZXIgPCBjaHVuay5zdGFydExpbmUgfHwgbGluZU51bWJlciA+PSBjaHVuay5zdGFydExpbmUg
KyBjaHVuay5saW5lc0NvdW50KQorICAgICAgICAgICAgICAgICAgICBjaHVuayA9IHRoaXMuY2h1
bmtGb3JMaW5lKGxpbmVOdW1iZXIpOworICAgICAgICAgICAgICAgIHZhciBsaW5lUm93ID0gY2h1
bmsuZ2V0RXhwYW5kZWRMaW5lUm93KGxpbmVOdW1iZXIpOworICAgICAgICAgICAgICAgIGlmICgh
bGluZVJvdykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
aWYgKGxpbmVOdW1iZXIgPCBmaXJzdFZpc2libGVMaW5lTnVtYmVyKSB7CisgICAgICAgICAgICAg
ICAgICAgIGludmlzaWJsZUxpbmVSb3dzLnB1c2gobGluZVJvdyk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocmVz
dG9yZVNlbGVjdGlvbiAmJiAhc2VsZWN0aW9uKQorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rp
b24gPSB0aGlzLl9nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9wYWludExp
bmUobGluZVJvdyk7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3BhaW50TGluZXNPcGVyYXRp
b25zQ3JlZGl0IDwgMCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9zY2hlZHVsZVBhaW50
TGluZXMobGluZU51bWJlciArIDEsIGxpbmVDaHVuay5lbmRMaW5lKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnZpc2libGVMaW5lUm93cy5sZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rpb24gJiYgIXNlbGVjdGlvbikK
KyAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLl9nZXRTZWxlY3Rpb24oKTsKKyAgICAg
ICAgICAgIHRoaXMuX3BhaW50TGluZShpbnZpc2libGVMaW5lUm93c1tpXSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAocmVzdG9yZVNlbGVjdGlvbikKKyAgICAgICAgICAgIHRoaXMuX3Jlc3Rv
cmVTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICB9LAorCisgICAgX3BhaW50TGluZTogZnVuY3Rp
b24obGluZVJvdykKKyAgICB7CisgICAgICAgIHZhciBsaW5lTnVtYmVyID0gbGluZVJvdy5saW5l
TnVtYmVyOworICAgICAgICBpZiAodGhpcy5fZGlydHlMaW5lcykgeworICAgICAgICAgICAgdGhp
cy5fc2NoZWR1bGVQYWludExpbmVzKGxpbmVOdW1iZXIsIGxpbmVOdW1iZXIgKyAxKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVz
KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAodGhpcy5fc2NoZWR1bGVkUGFpbnRM
aW5lcyB8fCB0aGlzLl9wYWludExpbmVzT3BlcmF0aW9uc0NyZWRpdCA8IDApIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9zY2hlZHVsZVBhaW50TGluZXMobGluZU51bWJlciwgbGluZU51bWJlciAr
IDEpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgdmFyIGhpZ2hsaWdodCA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJl
ciwgImhpZ2hsaWdodCIpOworICAgICAgICAgICAgaWYgKCFoaWdobGlnaHQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBsaW5lUm93LnJlbW92ZUNoaWxkcmVuKCk7Cisg
ICAgICAgICAgICB2YXIgbGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lKGxpbmVOdW1iZXIpOwor
ICAgICAgICAgICAgaWYgKCFsaW5lKQorICAgICAgICAgICAgICAgIGxpbmVSb3cuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7CisKKyAgICAgICAgICAgIHZhciBwbGFp
blRleHRTdGFydCA9IC0xOworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaW5lLmxl
bmd0aDspIHsKKyAgICAgICAgICAgICAgICBpZiAoaiA+IDEwMDApIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gVGhpcyBsaW5lIGlzIHRvbyBsb25nIC0gZG8gbm90IHdhc3RlIGN5Y2xlcyBvbiBt
aW5pZmllZCBqcyBoaWdobGlnaHRpbmcuCisgICAgICAgICAgICAgICAgICAgIGlmIChwbGFpblRl
eHRTdGFydCA9PT0gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICBwbGFpblRleHRTdGFydCA9
IGo7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB2YXIgYXR0cmlidXRlID0gaGlnaGxpZ2h0W2pdOworICAgICAgICAgICAgICAg
IGlmICghYXR0cmlidXRlIHx8ICFhdHRyaWJ1dGUudG9rZW5UeXBlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChwbGFpblRleHRTdGFydCA9PT0gLTEpCisgICAgICAgICAgICAgICAgICAgICAg
ICBwbGFpblRleHRTdGFydCA9IGo7CisgICAgICAgICAgICAgICAgICAgIGorKzsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAocGxhaW5UZXh0U3RhcnQg
IT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmRUZXh0Tm9kZShs
aW5lUm93LCBsaW5lLnN1YnN0cmluZyhwbGFpblRleHRTdGFydCwgaikpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcGxhaW5UZXh0U3RhcnQgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC0tdGhpcy5fcGFpbnRMaW5lc09wZXJhdGlvbnNDcmVkaXQ7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwZW5kU3BhbihsaW5lUm93LCBsaW5lLnN1
YnN0cmluZyhqLCBqICsgYXR0cmlidXRlLmxlbmd0aCksIGF0dHJpYnV0ZS50b2tlblR5cGUpOwor
ICAgICAgICAgICAgICAgICAgICBqICs9IGF0dHJpYnV0ZS5sZW5ndGg7CisgICAgICAgICAgICAg
ICAgICAgIC0tdGhpcy5fcGFpbnRMaW5lc09wZXJhdGlvbnNDcmVkaXQ7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0ICE9PSAt
MSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZFRleHROb2RlKGxpbmVSb3csIGxpbmUu
c3Vic3RyaW5nKHBsYWluVGV4dFN0YXJ0LCBsaW5lLmxlbmd0aCkpOworICAgICAgICAgICAgICAg
IC0tdGhpcy5fcGFpbnRMaW5lc09wZXJhdGlvbnNDcmVkaXQ7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAobGluZVJvdy5kZWNvcmF0aW9uc0VsZW1lbnQpCisgICAgICAgICAgICAgICAg
bGluZVJvdy5hcHBlbmRDaGlsZChsaW5lUm93LmRlY29yYXRpb25zRWxlbWVudCk7CisgICAgICAg
IH0gZmluYWxseSB7CisgICAgICAgICAgICBpZiAodGhpcy5fcmFuZ2VUb01hcmsgJiYgdGhpcy5f
cmFuZ2VUb01hcmsuc3RhcnRMaW5lID09PSBsaW5lTnVtYmVyKQorICAgICAgICAgICAgICAgIHRo
aXMuX21hcmtlZFJhbmdlRWxlbWVudCA9IFdlYkluc3BlY3Rvci5oaWdobGlnaHRTZWFyY2hSZXN1
bHQobGluZVJvdywgdGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRDb2x1bW4sIHRoaXMuX3JhbmdlVG9N
YXJrLmVuZENvbHVtbiAtIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0Q29sdW1uKTsKKyAgICAgICAg
ICAgIHRoaXMuZW5kRG9tVXBkYXRlcygpOworICAgICAgICB9CisgICAgfSwKKworICAgIF9yZWxl
YXNlTGluZXNIaWdobGlnaHQ6IGZ1bmN0aW9uKGxpbmVSb3cpCisgICAgeworICAgICAgICBpZiAo
IWxpbmVSb3cpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgic3BhbnMiIGluIGxp
bmVSb3cpIHsKKyAgICAgICAgICAgIHZhciBzcGFucyA9IGxpbmVSb3cuc3BhbnM7CisgICAgICAg
ICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNwYW5zLmxlbmd0aDsgKytqKQorICAgICAgICAgICAg
ICAgIHRoaXMuX2NhY2hlZFNwYW5zLnB1c2goc3BhbnNbal0pOworICAgICAgICAgICAgZGVsZXRl
IGxpbmVSb3cuc3BhbnM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCJ0ZXh0Tm9kZXMiIGluIGxp
bmVSb3cpIHsKKyAgICAgICAgICAgIHZhciB0ZXh0Tm9kZXMgPSBsaW5lUm93LnRleHROb2RlczsK
KyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGV4dE5vZGVzLmxlbmd0aDsgKytqKQor
ICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZFRleHROb2Rlcy5wdXNoKHRleHROb2Rlc1tqXSk7
CisgICAgICAgICAgICBkZWxldGUgbGluZVJvdy50ZXh0Tm9kZXM7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fY2FjaGVkUm93cy5wdXNoKGxpbmVSb3cpOworICAgIH0sCisKKyAgICBfZ2V0U2Vs
ZWN0aW9uOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93
LmdldFNlbGVjdGlvbigpOworICAgICAgICBpZiAoIXNlbGVjdGlvbi5yYW5nZUNvdW50KQorICAg
ICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIC8vIFNlbGVjdGlvbiBtYXkgYmUgb3V0c2lk
ZSBvZiB0aGUgdmlld2VyLgorICAgICAgICBpZiAoIXRoaXMuX2NvbnRhaW5lci5pc0FuY2VzdG9y
KHNlbGVjdGlvbi5hbmNob3JOb2RlKSB8fCAhdGhpcy5fY29udGFpbmVyLmlzQW5jZXN0b3Ioc2Vs
ZWN0aW9uLmZvY3VzTm9kZSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgdmFy
IHN0YXJ0ID0gdGhpcy5fc2VsZWN0aW9uVG9Qb3NpdGlvbihzZWxlY3Rpb24uYW5jaG9yTm9kZSwg
c2VsZWN0aW9uLmFuY2hvck9mZnNldCk7CisgICAgICAgIHZhciBlbmQgPSBzZWxlY3Rpb24uaXND
b2xsYXBzZWQgPyBzdGFydCA6IHRoaXMuX3NlbGVjdGlvblRvUG9zaXRpb24oc2VsZWN0aW9uLmZv
Y3VzTm9kZSwgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJ
bnNwZWN0b3IuVGV4dFJhbmdlKHN0YXJ0LmxpbmUsIHN0YXJ0LmNvbHVtbiwgZW5kLmxpbmUsIGVu
ZC5jb2x1bW4pOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBz
Y3JvbGxJbnRvVmlldworICAgICAqLworICAgIF9yZXN0b3JlU2VsZWN0aW9uOiBmdW5jdGlvbihy
YW5nZSwgc2Nyb2xsSW50b1ZpZXcpCisgICAgeworICAgICAgICBpZiAoIXJhbmdlKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLl9wb3NpdGlvblRvU2VsZWN0
aW9uKHJhbmdlLnN0YXJ0TGluZSwgcmFuZ2Uuc3RhcnRDb2x1bW4pOworICAgICAgICB2YXIgZW5k
ID0gcmFuZ2UuaXNFbXB0eSgpID8gc3RhcnQgOiB0aGlzLl9wb3NpdGlvblRvU2VsZWN0aW9uKHJh
bmdlLmVuZExpbmUsIHJhbmdlLmVuZENvbHVtbik7CisgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rp
b24oKS5zZXRCYXNlQW5kRXh0ZW50KHN0YXJ0LmNvbnRhaW5lciwgc3RhcnQub2Zmc2V0LCBlbmQu
Y29udGFpbmVyLCBlbmQub2Zmc2V0KTsKKworICAgICAgICBpZiAoc2Nyb2xsSW50b1ZpZXcpIHsK
KyAgICAgICAgICAgIGZvciAodmFyIG5vZGUgPSBlbmQuY29udGFpbmVyOyBub2RlOyBub2RlID0g
bm9kZS5wYXJlbnRFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuc2Nyb2xsSW50
b1ZpZXdJZk5lZWRlZCkgeworICAgICAgICAgICAgICAgICAgICBub2RlLnNjcm9sbEludG9WaWV3
SWZOZWVkZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKworICAgIF9zZXRDYXJldExvY2F0
aW9uOiBmdW5jdGlvbihsaW5lLCBjb2x1bW4sIHNjcm9sbEludG9WaWV3KQorICAgIHsKKyAgICAg
ICAgdmFyIHJhbmdlID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UobGluZSwgY29sdW1uLCBs
aW5lLCBjb2x1bW4pOworICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0aW9uKHJhbmdlLCBzY3Jv
bGxJbnRvVmlldyk7CisgICAgfSwKKworICAgIF9zZWxlY3Rpb25Ub1Bvc2l0aW9uOiBmdW5jdGlv
bihjb250YWluZXIsIG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmIChjb250YWluZXIgPT09IHRo
aXMuX2NvbnRhaW5lciAmJiBvZmZzZXQgPT09IDApCisgICAgICAgICAgICByZXR1cm4geyBsaW5l
OiAwLCBjb2x1bW46IDAgfTsKKyAgICAgICAgaWYgKGNvbnRhaW5lciA9PT0gdGhpcy5fY29udGFp
bmVyICYmIG9mZnNldCA9PT0gMSkKKyAgICAgICAgICAgIHJldHVybiB7IGxpbmU6IHRoaXMuX3Rl
eHRNb2RlbC5saW5lc0NvdW50IC0gMSwgY29sdW1uOiB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0
aCh0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCAtIDEpIH07CisKKyAgICAgICAgdmFyIGxpbmVS
b3cgPSB0aGlzLl9lbmNsb3NpbmdMaW5lUm93T3JTZWxmKGNvbnRhaW5lcik7CisgICAgICAgIHZh
ciBsaW5lTnVtYmVyID0gbGluZVJvdy5saW5lTnVtYmVyOworICAgICAgICBpZiAoY29udGFpbmVy
ID09PSBsaW5lUm93ICYmIG9mZnNldCA9PT0gMCkKKyAgICAgICAgICAgIHJldHVybiB7IGxpbmU6
IGxpbmVOdW1iZXIsIGNvbHVtbjogMCB9OworCisgICAgICAgIC8vIFRoaXMgbWF5IGJlIGNodW5r
IGFuZCBjaHVua3MgbWF5IGNvbnRhaW4gXG4uCisgICAgICAgIHZhciBjb2x1bW4gPSAwOworICAg
ICAgICB2YXIgbm9kZSA9IGxpbmVSb3cubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFID8gbGlu
ZVJvdyA6IGxpbmVSb3cudHJhdmVyc2VOZXh0VGV4dE5vZGUobGluZVJvdyk7CisgICAgICAgIHdo
aWxlIChub2RlICYmIG5vZGUgIT09IGNvbnRhaW5lcikgeworICAgICAgICAgICAgdmFyIHRleHQg
PSBub2RlLnRleHRDb250ZW50OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKHRleHQuY2hhckF0KGkpID09PSAi
XG4iKSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIrKzsKKyAgICAgICAgICAgICAg
ICAgICAgY29sdW1uID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgY29sdW1uKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBub2RlID0gbm9kZS50
cmF2ZXJzZU5leHRUZXh0Tm9kZShsaW5lUm93KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChu
b2RlID09PSBjb250YWluZXIgJiYgb2Zmc2V0KSB7CisgICAgICAgICAgICB2YXIgdGV4dCA9IG5v
ZGUudGV4dENvbnRlbnQ7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9mZnNldDsg
KytpKSB7CisgICAgICAgICAgICAgICAgaWYgKHRleHQuY2hhckF0KGkpID09PSAiXG4iKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIrKzsKKyAgICAgICAgICAgICAgICAgICAgY29s
dW1uID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY29s
dW1uKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsgbGluZTog
bGluZU51bWJlciwgY29sdW1uOiBjb2x1bW4gfTsKKyAgICB9LAorCisgICAgX3Bvc2l0aW9uVG9T
ZWxlY3Rpb246IGZ1bmN0aW9uKGxpbmUsIGNvbHVtbikKKyAgICB7CisgICAgICAgIHZhciBjaHVu
ayA9IHRoaXMuY2h1bmtGb3JMaW5lKGxpbmUpOworICAgICAgICAvLyBPbmUtbGluZWQgY29sbGFw
c2VkIGNodW5rcyBtYXkgc3RpbGwgc3RheSBoaWdobGlnaHRlZC4KKyAgICAgICAgdmFyIGxpbmVS
b3cgPSBjaHVuay5saW5lc0NvdW50ID09PSAxID8gY2h1bmsuZWxlbWVudCA6IGNodW5rLmdldEV4
cGFuZGVkTGluZVJvdyhsaW5lKTsKKyAgICAgICAgaWYgKGxpbmVSb3cpCisgICAgICAgICAgICB2
YXIgcmFuZ2VCb3VuZGFyeSA9IGxpbmVSb3cucmFuZ2VCb3VuZGFyeUZvck9mZnNldChjb2x1bW4p
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBvZmZzZXQgPSBjb2x1bW47CisgICAg
ICAgICAgICBmb3IgKHZhciBpID0gY2h1bmsuc3RhcnRMaW5lOyBpIDwgbGluZTsgKytpKQorICAg
ICAgICAgICAgICAgIG9mZnNldCArPSB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChpKSArIDE7
IC8vIFxuCisgICAgICAgICAgICBsaW5lUm93ID0gY2h1bmsuZWxlbWVudDsKKyAgICAgICAgICAg
IGlmIChsaW5lUm93LmZpcnN0Q2hpbGQpCisgICAgICAgICAgICAgICAgdmFyIHJhbmdlQm91bmRh
cnkgPSB7IGNvbnRhaW5lcjogbGluZVJvdy5maXJzdENoaWxkLCBvZmZzZXQ6IG9mZnNldCB9Owor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZhciByYW5nZUJvdW5kYXJ5ID0geyBj
b250YWluZXI6IGxpbmVSb3csIG9mZnNldDogMCB9OworICAgICAgICB9CisgICAgICAgIHJldHVy
biByYW5nZUJvdW5kYXJ5OworICAgIH0sCisKKyAgICBfZW5jbG9zaW5nTGluZVJvd09yU2VsZjog
ZnVuY3Rpb24oZWxlbWVudCkKKyAgICB7CisgICAgICAgIHZhciBsaW5lUm93ID0gZWxlbWVudC5l
bmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3ZWJraXQtbGluZS1jb250ZW50Iik7CisgICAg
ICAgIGlmIChsaW5lUm93KQorICAgICAgICAgICAgcmV0dXJuIGxpbmVSb3c7CisKKyAgICAgICAg
Zm9yIChsaW5lUm93ID0gZWxlbWVudDsgbGluZVJvdzsgbGluZVJvdyA9IGxpbmVSb3cucGFyZW50
RWxlbWVudCkgeworICAgICAgICAgICAgaWYgKGxpbmVSb3cucGFyZW50RWxlbWVudCA9PT0gdGhp
cy5fY29udGFpbmVyKQorICAgICAgICAgICAgICAgIHJldHVybiBsaW5lUm93OworICAgICAgICB9
CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0sCisKKyAgICBfYXBwZW5kU3BhbjogZnVuY3Rp
b24oZWxlbWVudCwgY29udGVudCwgY2xhc3NOYW1lKQorICAgIHsKKyAgICAgICAgaWYgKGNsYXNz
TmFtZSA9PT0gImh0bWwtcmVzb3VyY2UtbGluayIgfHwgY2xhc3NOYW1lID09PSAiaHRtbC1leHRl
cm5hbC1saW5rIikgeworICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9jcmVh
dGVMaW5rKGNvbnRlbnQsIGNsYXNzTmFtZSA9PT0gImh0bWwtZXh0ZXJuYWwtbGluayIpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBzcGFuID0gdGhpcy5f
Y2FjaGVkU3BhbnMucG9wKCkgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAg
ICAgICBzcGFuLmNsYXNzTmFtZSA9ICJ3ZWJraXQtIiArIGNsYXNzTmFtZTsKKyAgICAgICAgc3Bh
bi50ZXh0Q29udGVudCA9IGNvbnRlbnQ7CisgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoc3Bh
bik7CisgICAgICAgIGlmICghKCJzcGFucyIgaW4gZWxlbWVudCkpCisgICAgICAgICAgICBlbGVt
ZW50LnNwYW5zID0gW107CisgICAgICAgIGVsZW1lbnQuc3BhbnMucHVzaChzcGFuKTsKKyAgICB9
LAorCisgICAgX2FwcGVuZFRleHROb2RlOiBmdW5jdGlvbihlbGVtZW50LCB0ZXh0KQorICAgIHsK
KyAgICAgICAgdmFyIHRleHROb2RlID0gdGhpcy5fY2FjaGVkVGV4dE5vZGVzLnBvcCgpOworICAg
ICAgICBpZiAodGV4dE5vZGUpCisgICAgICAgICAgICB0ZXh0Tm9kZS5ub2RlVmFsdWUgPSB0ZXh0
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKHRleHQpOworICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRleHROb2RlKTsKKyAg
ICAgICAgaWYgKCEoInRleHROb2RlcyIgaW4gZWxlbWVudCkpCisgICAgICAgICAgICBlbGVtZW50
LnRleHROb2RlcyA9IFtdOworICAgICAgICBlbGVtZW50LnRleHROb2Rlcy5wdXNoKHRleHROb2Rl
KTsKKyAgICB9LAorCisgICAgX2NyZWF0ZUxpbms6IGZ1bmN0aW9uKGNvbnRlbnQsIGlzRXh0ZXJu
YWwpCisgICAgeworICAgICAgICB2YXIgcXVvdGUgPSBjb250ZW50LmNoYXJBdCgwKTsKKyAgICAg
ICAgaWYgKGNvbnRlbnQubGVuZ3RoID4gMSAmJiAocXVvdGUgPT09ICJcIiIgfHwgICBxdW90ZSA9
PT0gIiciKSkKKyAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZygxLCBjb250
ZW50Lmxlbmd0aCAtIDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBxdW90ZSA9IG51bGw7
CisKKyAgICAgICAgdmFyIGEgPSBXZWJJbnNwZWN0b3IubGlua2lmeVVSTEFzTm9kZSh0aGlzLl9y
ZXdyaXRlSHJlZihjb250ZW50KSwgY29udGVudCwgdW5kZWZpbmVkLCBpc0V4dGVybmFsKTsKKyAg
ICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAg
IHNwYW4uY2xhc3NOYW1lID0gIndlYmtpdC1odG1sLWF0dHJpYnV0ZS12YWx1ZSI7CisgICAgICAg
IGlmIChxdW90ZSkKKyAgICAgICAgICAgIHNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUocXVvdGUpKTsKKyAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZChhKTsKKyAgICAgICAg
aWYgKHF1b3RlKQorICAgICAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZShxdW90ZSkpOworICAgICAgICByZXR1cm4gc3BhbjsKKyAgICB9LAorCisgICAgLyoq
CisgICAgICogQHBhcmFtIHtib29sZWFuPX0gaXNFeHRlcm5hbAorICAgICAqLworICAgIF9yZXdy
aXRlSHJlZjogZnVuY3Rpb24oaHJlZlZhbHVlLCBpc0V4dGVybmFsKQorICAgIHsKKyAgICAgICAg
aWYgKCF0aGlzLl91cmwgfHwgIWhyZWZWYWx1ZSB8fCBocmVmVmFsdWUuaW5kZXhPZigiOi8vIikg
PiAwKQorICAgICAgICAgICAgcmV0dXJuIGhyZWZWYWx1ZTsKKyAgICAgICAgcmV0dXJuIFdlYklu
c3BlY3Rvci5jb21wbGV0ZVVSTCh0aGlzLl91cmwsIGhyZWZWYWx1ZSk7CisgICAgfSwKKworICAg
IF9oYW5kbGVET01VcGRhdGVzOiBmdW5jdGlvbihlKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMu
X2RvbVVwZGF0ZUNvYWxlc2NpbmdMZXZlbCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICB2YXIgdGFyZ2V0ID0gZS50YXJnZXQ7CisgICAgICAgIGlmICh0YXJnZXQgPT09IHRoaXMuX2Nv
bnRhaW5lcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgbGluZVJvdyA9IHRo
aXMuX2VuY2xvc2luZ0xpbmVSb3dPclNlbGYodGFyZ2V0KTsKKyAgICAgICAgaWYgKCFsaW5lUm93
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChsaW5lUm93LmRlY29yYXRpb25z
RWxlbWVudCAmJiBsaW5lUm93LmRlY29yYXRpb25zRWxlbWVudC5pc1NlbGZPckFuY2VzdG9yKHRh
cmdldCkpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9zeW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlz
dGVuZXIpCisgICAgICAgICAgICAgICAgdGhpcy5fc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3Rl
bmVyKGxpbmVSb3cubGluZU51bWJlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBpZiAodGhpcy5fcmVhZE9ubHkpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgaWYgKHRhcmdldCA9PT0gbGluZVJvdyAmJiBlLnR5cGUgPT09ICJET01Ob2RlSW5zZXJ0
ZWQiKSB7CisgICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbmV3bHkgaW5zZXJ0ZWQgbGlu
ZSByb3cgaGFzIG5vIGxpbmVOdW1iZXIuCisgICAgICAgICAgICBkZWxldGUgbGluZVJvdy5saW5l
TnVtYmVyOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHN0YXJ0TGluZSA9IDA7CisgICAgICAg
IGZvciAodmFyIHJvdyA9IGxpbmVSb3c7IHJvdzsgcm93ID0gcm93LnByZXZpb3VzU2libGluZykg
eworICAgICAgICAgICAgaWYgKHR5cGVvZiByb3cubGluZU51bWJlciA9PT0gIm51bWJlciIpIHsK
KyAgICAgICAgICAgICAgICBzdGFydExpbmUgPSByb3cubGluZU51bWJlcjsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZhciBlbmRM
aW5lID0gc3RhcnRMaW5lICsgMTsKKyAgICAgICAgZm9yICh2YXIgcm93ID0gbGluZVJvdy5uZXh0
U2libGluZzsgcm93OyByb3cgPSByb3cubmV4dFNpYmxpbmcpIHsKKyAgICAgICAgICAgIGlmICh0
eXBlb2Ygcm93LmxpbmVOdW1iZXIgPT09ICJudW1iZXIiICYmIHJvdy5saW5lTnVtYmVyID4gc3Rh
cnRMaW5lKSB7CisgICAgICAgICAgICAgICAgZW5kTGluZSA9IHJvdy5saW5lTnVtYmVyOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKHRhcmdldCA9PT0gbGluZVJvdyAmJiBlLnR5cGUgPT09ICJET01Ob2RlUmVtb3ZlZCIpIHsK
KyAgICAgICAgICAgIC8vIE5vdyB0aGlzIHdpbGwgbm8gbG9uZ2VyIGJlIHZhbGlkLgorICAgICAg
ICAgICAgZGVsZXRlIGxpbmVSb3cubGluZU51bWJlcjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICh0aGlzLl9kaXJ0eUxpbmVzKSB7CisgICAgICAgICAgICB0aGlzLl9kaXJ0eUxpbmVzLnN0YXJ0
ID0gTWF0aC5taW4odGhpcy5fZGlydHlMaW5lcy5zdGFydCwgc3RhcnRMaW5lKTsKKyAgICAgICAg
ICAgIHRoaXMuX2RpcnR5TGluZXMuZW5kID0gTWF0aC5tYXgodGhpcy5fZGlydHlMaW5lcy5lbmQs
IGVuZExpbmUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5fZGlydHlMaW5l
cyA9IHsgc3RhcnQ6IHN0YXJ0TGluZSwgZW5kOiBlbmRMaW5lIH07CisgICAgICAgICAgICBzZXRU
aW1lb3V0KHRoaXMuX2FwcGx5RG9tVXBkYXRlcy5iaW5kKHRoaXMpLCAwKTsKKyAgICAgICAgICAg
IC8vIFJlbW92ZSBtYXJrZWQgcmFuZ2VzLCBpZiBhbnkuCisgICAgICAgICAgICB0aGlzLm1hcmtB
bmRSZXZlYWxSYW5nZShudWxsKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfYXBwbHlEb21V
cGRhdGVzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX2RpcnR5TGluZXMp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGVkaXRvciBo
YWQgYmVlbiBzZXQgcmVhZE9ubHkgYnkgdGhlIG1vbWVudCB3aGVuIHRoaXMgYXN5bmMgY2FsbGJh
Y2sgZ290IGV4ZWN1dGVkLgorICAgICAgICBpZiAodGhpcy5fcmVhZE9ubHkpIHsKKyAgICAgICAg
ICAgIGRlbGV0ZSB0aGlzLl9kaXJ0eUxpbmVzOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgdmFyIGRpcnR5TGluZXMgPSB0aGlzLl9kaXJ0eUxpbmVzOworCisgICAg
ICAgIHZhciBmaXJzdENodW5rTnVtYmVyID0gdGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5lKGRpcnR5
TGluZXMuc3RhcnQpOworICAgICAgICB2YXIgc3RhcnRMaW5lID0gdGhpcy5fdGV4dENodW5rc1tm
aXJzdENodW5rTnVtYmVyXS5zdGFydExpbmU7CisgICAgICAgIHZhciBlbmRMaW5lID0gdGhpcy5f
dGV4dE1vZGVsLmxpbmVzQ291bnQ7CisKKyAgICAgICAgLy8gQ29sbGVjdCBsaW5lcy4KKyAgICAg
ICAgdmFyIGZpcnN0TGluZVJvdzsKKyAgICAgICAgaWYgKGZpcnN0Q2h1bmtOdW1iZXIpIHsKKyAg
ICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbZmlyc3RDaHVua051bWJlciAt
IDFdOworICAgICAgICAgICAgZmlyc3RMaW5lUm93ID0gY2h1bmsuZXhwYW5kZWQgPyBjaHVuay5n
ZXRFeHBhbmRlZExpbmVSb3coY2h1bmsuc3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3VudCAtIDEp
IDogY2h1bmsuZWxlbWVudDsKKyAgICAgICAgICAgIGZpcnN0TGluZVJvdyA9IGZpcnN0TGluZVJv
dy5uZXh0U2libGluZzsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBmaXJzdExpbmVSb3cg
PSB0aGlzLl9jb250YWluZXIuZmlyc3RDaGlsZDsKKworICAgICAgICB2YXIgbGluZXMgPSBbXTsK
KyAgICAgICAgZm9yICh2YXIgbGluZVJvdyA9IGZpcnN0TGluZVJvdzsgbGluZVJvdzsgbGluZVJv
dyA9IGxpbmVSb3cubmV4dFNpYmxpbmcpIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgbGluZVJv
dy5saW5lTnVtYmVyID09PSAibnVtYmVyIiAmJiBsaW5lUm93LmxpbmVOdW1iZXIgPj0gZGlydHlM
aW5lcy5lbmQpIHsKKyAgICAgICAgICAgICAgICBlbmRMaW5lID0gbGluZVJvdy5saW5lTnVtYmVy
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
VXBkYXRlIHdpdGggdGhlIG5ld2VzdCBsaW5lTnVtYmVyLCBzbyB0aGF0IHRoZSBjYWxsIHRvIHRo
ZSBfZ2V0U2VsZWN0aW9uIG1ldGhvZCBiZWxvdyBzaG91bGQgd29yay4KKyAgICAgICAgICAgIGxp
bmVSb3cubGluZU51bWJlciA9IHN0YXJ0TGluZSArIGxpbmVzLmxlbmd0aDsKKyAgICAgICAgICAg
IHRoaXMuX2NvbGxlY3RMaW5lc0Zyb21EaXYobGluZXMsIGxpbmVSb3cpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gVHJ5IHRvIGRlY3JlYXNlIHRoZSByYW5nZSBiZWluZyByZXBsYWNlZCwgaWYg
cG9zc2libGUuCisgICAgICAgIHZhciBzdGFydE9mZnNldCA9IDA7CisgICAgICAgIHdoaWxlIChz
dGFydExpbmUgPCBkaXJ0eUxpbmVzLnN0YXJ0ICYmIHN0YXJ0T2Zmc2V0IDwgbGluZXMubGVuZ3Ro
KSB7CisgICAgICAgICAgICBpZiAodGhpcy5fdGV4dE1vZGVsLmxpbmUoc3RhcnRMaW5lKSAhPT0g
bGluZXNbc3RhcnRPZmZzZXRdKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
KytzdGFydE9mZnNldDsKKyAgICAgICAgICAgICsrc3RhcnRMaW5lOworICAgICAgICB9CisKKyAg
ICAgICAgdmFyIGVuZE9mZnNldCA9IGxpbmVzLmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKGVuZExp
bmUgPiBkaXJ0eUxpbmVzLmVuZCAmJiBlbmRPZmZzZXQgPiBzdGFydE9mZnNldCkgeworICAgICAg
ICAgICAgaWYgKHRoaXMuX3RleHRNb2RlbC5saW5lKGVuZExpbmUgLSAxKSAhPT0gbGluZXNbZW5k
T2Zmc2V0IC0gMV0pCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAtLWVuZE9m
ZnNldDsKKyAgICAgICAgICAgIC0tZW5kTGluZTsKKyAgICAgICAgfQorCisgICAgICAgIGxpbmVz
ID0gbGluZXMuc2xpY2Uoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisKKyAgICAgICAgLy8gVHJ5
IHRvIGRlY3JlYXNlIHRoZSByYW5nZSBiZWluZyByZXBsYWNlZCBieSBjb2x1bW4gb2Zmc2V0cywg
aWYgcG9zc2libGUuCisgICAgICAgIHZhciBzdGFydENvbHVtbiA9IDA7CisgICAgICAgIHZhciBl
bmRDb2x1bW4gPSB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChlbmRMaW5lIC0gMSk7CisgICAg
ICAgIGlmIChsaW5lcy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICB2YXIgbGluZTEgPSB0aGlz
Ll90ZXh0TW9kZWwubGluZShzdGFydExpbmUpOworICAgICAgICAgICAgdmFyIGxpbmUyID0gbGlu
ZXNbMF07CisgICAgICAgICAgICB3aGlsZSAobGluZTFbc3RhcnRDb2x1bW5dICYmIGxpbmUxW3N0
YXJ0Q29sdW1uXSA9PT0gbGluZTJbc3RhcnRDb2x1bW5dKQorICAgICAgICAgICAgICAgICsrc3Rh
cnRDb2x1bW47CisgICAgICAgICAgICBsaW5lc1swXSA9IGxpbmUyLnN1YnN0cmluZyhzdGFydENv
bHVtbik7CisKKyAgICAgICAgICAgIGxpbmUxID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUoZW5kTGlu
ZSAtIDEpOworICAgICAgICAgICAgbGluZTIgPSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXTsKKyAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5kQ29sdW1uICYmIGkgPCBsaW5lMi5sZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChzdGFydExpbmUgPT09IGVuZExpbmUgLSAx
ICYmIGVuZENvbHVtbiAtIGkgPD0gc3RhcnRDb2x1bW4pCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGlmIChsaW5lMVtlbmRDb2x1bW4gLSBpIC0gMV0gIT09IGxp
bmUyW2xpbmUyLmxlbmd0aCAtIGkgLSAxXSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaSkgeworICAgICAgICAgICAgICAgIGVuZENv
bHVtbiAtPSBpOworICAgICAgICAgICAgICAgIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdID0gbGlu
ZTIuc3Vic3RyaW5nKDAsIGxpbmUyLmxlbmd0aCAtIGkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlvbigpOworCisg
ICAgICAgIGlmIChsaW5lcy5sZW5ndGggPT09IDAgJiYgZW5kTGluZSA8IHRoaXMuX3RleHRNb2Rl
bC5saW5lc0NvdW50KQorICAgICAgICAgICAgdmFyIG9sZFJhbmdlID0gbmV3IFdlYkluc3BlY3Rv
ci5UZXh0UmFuZ2Uoc3RhcnRMaW5lLCAwLCBlbmRMaW5lLCAwKTsKKyAgICAgICAgZWxzZSBpZiAo
bGluZXMubGVuZ3RoID09PSAwICYmIHN0YXJ0TGluZSA+IDApCisgICAgICAgICAgICB2YXIgb2xk
UmFuZ2UgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShzdGFydExpbmUgLSAxLCB0aGlzLl90
ZXh0TW9kZWwubGluZUxlbmd0aChzdGFydExpbmUgLSAxKSwgZW5kTGluZSAtIDEsIHRoaXMuX3Rl
eHRNb2RlbC5saW5lTGVuZ3RoKGVuZExpbmUgLSAxKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHZhciBvbGRSYW5nZSA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHN0YXJ0TGluZSwg
c3RhcnRDb2x1bW4sIGVuZExpbmUgLSAxLCBlbmRDb2x1bW4pOworCisgICAgICAgIHZhciBuZXdD
b250ZW50ID0gbGluZXMuam9pbigiXG4iKTsKKyAgICAgICAgaWYgKHRoaXMuX3RleHRNb2RlbC5j
b3B5UmFuZ2Uob2xkUmFuZ2UpID09PSBuZXdDb250ZW50KSB7CisgICAgICAgICAgICBkZWxldGUg
dGhpcy5fZGlydHlMaW5lczsKKyAgICAgICAgICAgIHJldHVybjsgLy8gTm9vcAorICAgICAgICB9
CisKKyAgICAgICAgLy8gVGhpcyBpcyBhICJmb3JlaWduIiBjYWxsIG91dHNpZGUgb2YgdGhpcyBj
bGFzcy4gU2hvdWxkIGJlIGJlZm9yZSB3ZSBkZWxldGUgdGhlIGRpcnR5IGxpbmVzIGZsYWcuCisg
ICAgICAgIHRoaXMuX2VudGVyVGV4dENoYW5nZU1vZGUoKTsKKworICAgICAgICBkZWxldGUgdGhp
cy5fZGlydHlMaW5lczsKKworICAgICAgICB2YXIgbmV3UmFuZ2UgPSB0aGlzLl9lZGl0UmFuZ2Uo
b2xkUmFuZ2UsIG5ld0NvbnRlbnQpOworCisgICAgICAgIHRoaXMuX3BhaW50U2NoZWR1bGVkTGlu
ZXModHJ1ZSk7CisgICAgICAgIHRoaXMuX3Jlc3RvcmVTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKwor
ICAgICAgICB0aGlzLl9leGl0VGV4dENoYW5nZU1vZGUob2xkUmFuZ2UsIG5ld1JhbmdlKTsKKyAg
ICB9LAorCisgICAgdGV4dENoYW5nZWQ6IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSkKKyAg
ICB7CisgICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVzKCk7CisgICAgICAgIHRoaXMuX3JlbW92
ZURlY29yYXRpb25zSW5SYW5nZShvbGRSYW5nZSk7CisgICAgICAgIHRoaXMuX3VwZGF0ZUNodW5r
c0ZvclJhbmdlcyhvbGRSYW5nZSwgbmV3UmFuZ2UpOworICAgICAgICB0aGlzLl91cGRhdGVIaWdo
bGlnaHRzRm9yUmFuZ2UobmV3UmFuZ2UpOworICAgICAgICB0aGlzLmVuZERvbVVwZGF0ZXMoKTsK
KyAgICB9LAorCisgICAgX2VkaXRSYW5nZTogZnVuY3Rpb24ocmFuZ2UsIHRleHQpCisgICAgewor
ICAgICAgICBpZiAodGhpcy5fbGFzdEVkaXRlZFJhbmdlICYmICghdGV4dCB8fCB0ZXh0LmluZGV4
T2YoIlxuIikgIT09IC0xIHx8IHRoaXMuX2xhc3RFZGl0ZWRSYW5nZS5lbmRMaW5lICE9PSByYW5n
ZS5zdGFydExpbmUgfHwgdGhpcy5fbGFzdEVkaXRlZFJhbmdlLmVuZENvbHVtbiAhPT0gcmFuZ2Uu
c3RhcnRDb2x1bW4pKQorICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLm1hcmtVbmRvYWJsZVN0
YXRlKCk7CisKKyAgICAgICAgdmFyIG5ld1JhbmdlID0gdGhpcy5fdGV4dE1vZGVsLmVkaXRSYW5n
ZShyYW5nZSwgdGV4dCk7CisgICAgICAgIHRoaXMuX2xhc3RFZGl0ZWRSYW5nZSA9IG5ld1Jhbmdl
OworCisgICAgICAgIHJldHVybiBuZXdSYW5nZTsKKyAgICB9LAorCisgICAgX3JlbW92ZURlY29y
YXRpb25zSW5SYW5nZTogZnVuY3Rpb24ocmFuZ2UpCisgICAgeworICAgICAgICBmb3IgKHZhciBp
ID0gdGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5lKHJhbmdlLnN0YXJ0TGluZSk7IGkgPCB0aGlzLl90
ZXh0Q2h1bmtzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90
ZXh0Q2h1bmtzW2ldOworICAgICAgICAgICAgaWYgKGNodW5rLnN0YXJ0TGluZSA+IHJhbmdlLmVu
ZExpbmUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjaHVuay5yZW1vdmVB
bGxEZWNvcmF0aW9ucygpOworICAgICAgICB9CisgICAgfSwKKworICAgIF91cGRhdGVDaHVua3NG
b3JSYW5nZXM6IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSkKKyAgICB7CisgICAgICAgIC8v
IFVwZGF0ZSB0aGUgY2h1bmtzIGluIHJhbmdlOiBmaXJzdENodW5rTnVtYmVyIDw9IGluZGV4IDw9
IGxhc3RDaHVua051bWJlcgorICAgICAgICB2YXIgZmlyc3RDaHVua051bWJlciA9IHRoaXMuX2No
dW5rTnVtYmVyRm9yTGluZShvbGRSYW5nZS5zdGFydExpbmUpOworICAgICAgICB2YXIgbGFzdENo
dW5rTnVtYmVyID0gZmlyc3RDaHVua051bWJlcjsKKyAgICAgICAgd2hpbGUgKGxhc3RDaHVua051
bWJlciArIDEgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aCkgeworICAgICAgICAgICAgaWYgKHRo
aXMuX3RleHRDaHVua3NbbGFzdENodW5rTnVtYmVyICsgMV0uc3RhcnRMaW5lID4gb2xkUmFuZ2Uu
ZW5kTGluZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICsrbGFzdENodW5r
TnVtYmVyOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHN0YXJ0TGluZSA9IHRoaXMuX3RleHRD
aHVua3NbZmlyc3RDaHVua051bWJlcl0uc3RhcnRMaW5lOworICAgICAgICB2YXIgbGluZXNDb3Vu
dCA9IHRoaXMuX3RleHRDaHVua3NbbGFzdENodW5rTnVtYmVyXS5zdGFydExpbmUgKyB0aGlzLl90
ZXh0Q2h1bmtzW2xhc3RDaHVua051bWJlcl0ubGluZXNDb3VudCAtIHN0YXJ0TGluZTsKKyAgICAg
ICAgdmFyIGxpbmVzRGlmZiA9IG5ld1JhbmdlLmxpbmVzQ291bnQgLSBvbGRSYW5nZS5saW5lc0Nv
dW50OworICAgICAgICBsaW5lc0NvdW50ICs9IGxpbmVzRGlmZjsKKworICAgICAgICBpZiAobGlu
ZXNEaWZmKSB7CisgICAgICAgICAgICAvLyBMaW5lcyBzaGlmdGVkLCB1cGRhdGUgdGhlIGxpbmUg
bnVtYmVycyBvZiB0aGUgY2h1bmtzIGJlbG93LgorICAgICAgICAgICAgZm9yICh2YXIgY2h1bmtO
dW1iZXIgPSBsYXN0Q2h1bmtOdW1iZXIgKyAxOyBjaHVua051bWJlciA8IHRoaXMuX3RleHRDaHVu
a3MubGVuZ3RoOyArK2NodW5rTnVtYmVyKQorICAgICAgICAgICAgICAgIHRoaXMuX3RleHRDaHVu
a3NbY2h1bmtOdW1iZXJdLnN0YXJ0TGluZSArPSBsaW5lc0RpZmY7CisgICAgICAgIH0KKworICAg
ICAgICB2YXIgZmlyc3RMaW5lUm93OworICAgICAgICBpZiAoZmlyc3RDaHVua051bWJlcikgewor
ICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fdGV4dENodW5rc1tmaXJzdENodW5rTnVtYmVy
IC0gMV07CisgICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBjaHVuay5leHBhbmRlZCA/IGNodW5r
LmdldEV4cGFuZGVkTGluZVJvdyhjaHVuay5zdGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50IC0g
MSkgOiBjaHVuay5lbGVtZW50OworICAgICAgICAgICAgZmlyc3RMaW5lUm93ID0gZmlyc3RMaW5l
Um93Lm5leHRTaWJsaW5nOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGZpcnN0TGluZVJv
dyA9IHRoaXMuX2NvbnRhaW5lci5maXJzdENoaWxkOworCisgICAgICAgIC8vIE1vc3QgZnJlcXVl
bnQgY2FzZTogYSBjaHVuayByZW1haW5lZCB0aGUgc2FtZS4KKyAgICAgICAgZm9yICh2YXIgY2h1
bmtOdW1iZXIgPSBmaXJzdENodW5rTnVtYmVyOyBjaHVua051bWJlciA8PSBsYXN0Q2h1bmtOdW1i
ZXI7ICsrY2h1bmtOdW1iZXIpIHsKKyAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRD
aHVua3NbY2h1bmtOdW1iZXJdOworICAgICAgICAgICAgaWYgKGNodW5rLnN0YXJ0TGluZSArIGNo
dW5rLmxpbmVzQ291bnQgPiB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gY2h1bmsuc3RhcnRMaW5l
OworICAgICAgICAgICAgZm9yICh2YXIgbGluZVJvdyA9IGZpcnN0TGluZVJvdzsgbGluZVJvdyAm
JiBsaW5lTnVtYmVyIDwgY2h1bmsuc3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3VudDsgbGluZVJv
dyA9IGxpbmVSb3cubmV4dFNpYmxpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAobGluZVJvdy5s
aW5lTnVtYmVyICE9PSBsaW5lTnVtYmVyIHx8IGxpbmVSb3cgIT09IGNodW5rLmdldEV4cGFuZGVk
TGluZVJvdyhsaW5lTnVtYmVyKSB8fCBsaW5lUm93LnRleHRDb250ZW50ICE9PSB0aGlzLl90ZXh0
TW9kZWwubGluZShsaW5lTnVtYmVyKSB8fCAhbGluZVJvdy5maXJzdENoaWxkKQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAobGluZU51bWJlciA8IGNodW5rLnN0YXJ0TGluZSArIGNo
dW5rLmxpbmVzQ291bnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjaHVu
ay51cGRhdGVDb2xsYXBzZWRMaW5lUm93KCk7CisgICAgICAgICAgICArK2ZpcnN0Q2h1bmtOdW1i
ZXI7CisgICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBsaW5lUm93OworICAgICAgICAgICAgc3Rh
cnRMaW5lICs9IGNodW5rLmxpbmVzQ291bnQ7CisgICAgICAgICAgICBsaW5lc0NvdW50IC09IGNo
dW5rLmxpbmVzQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmlyc3RDaHVua051bWJl
ciA+IGxhc3RDaHVua051bWJlciAmJiBsaW5lc0NvdW50ID09PSAwKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIC8vIE1heWJlIG1lcmdlIHdpdGggdGhlIG5leHQgY2h1bmssIHNvIHRo
YXQgd2Ugc2hvdWxkIG5vdCBjcmVhdGUgMS1zaXplZCBjaHVua3Mgd2hlbiBhcHBlbmRpbmcgbmV3
IGxpbmVzIG9uZSBieSBvbmUuCisgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3Nb
bGFzdENodW5rTnVtYmVyICsgMV07CisgICAgICAgIHZhciBsaW5lc0luTGFzdENodW5rID0gbGlu
ZXNDb3VudCAlIHRoaXMuX2RlZmF1bHRDaHVua1NpemU7CisgICAgICAgIGlmIChjaHVuayAmJiAh
Y2h1bmsuZGVjb3JhdGVkICYmIGxpbmVzSW5MYXN0Q2h1bmsgPiAwICYmIGxpbmVzSW5MYXN0Q2h1
bmsgKyBjaHVuay5saW5lc0NvdW50IDw9IHRoaXMuX2RlZmF1bHRDaHVua1NpemUpIHsKKyAgICAg
ICAgICAgICsrbGFzdENodW5rTnVtYmVyOworICAgICAgICAgICAgbGluZXNDb3VudCArPSBjaHVu
ay5saW5lc0NvdW50OworICAgICAgICB9CisKKyAgICAgICAgdmFyIHNjcm9sbFRvcCA9IHRoaXMu
ZWxlbWVudC5zY3JvbGxUb3A7CisgICAgICAgIHZhciBzY3JvbGxMZWZ0ID0gdGhpcy5lbGVtZW50
LnNjcm9sbExlZnQ7CisKKyAgICAgICAgLy8gRGVsZXRlIGFsbCBET00gZWxlbWVudHMgdGhhdCB3
ZXJlIGVpdGhlciBjb250cm9sbGVkIGJ5IHRoZSBvbGQgY2h1bmtzLCBvciBoYXZlIGp1c3QgYmVl
biBpbnNlcnRlZC4KKyAgICAgICAgdmFyIGZpcnN0VW5tb2RpZmllZExpbmVSb3cgPSBudWxsOwor
ICAgICAgICBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbbGFzdENodW5rTnVtYmVyICsgMV07Cisg
ICAgICAgIGlmIChjaHVuaykKKyAgICAgICAgICAgIGZpcnN0VW5tb2RpZmllZExpbmVSb3cgPSBj
aHVuay5leHBhbmRlZCA/IGNodW5rLmdldEV4cGFuZGVkTGluZVJvdyhjaHVuay5zdGFydExpbmUp
IDogY2h1bmsuZWxlbWVudDsKKworICAgICAgICB3aGlsZSAoZmlyc3RMaW5lUm93ICYmIGZpcnN0
TGluZVJvdyAhPT0gZmlyc3RVbm1vZGlmaWVkTGluZVJvdykgeworICAgICAgICAgICAgdmFyIGxp
bmVSb3cgPSBmaXJzdExpbmVSb3c7CisgICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBmaXJzdExp
bmVSb3cubmV4dFNpYmxpbmc7CisgICAgICAgICAgICB0aGlzLl9jb250YWluZXIucmVtb3ZlQ2hp
bGQobGluZVJvdyk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXBsYWNlIG9sZCBjaHVua3Mg
d2l0aCB0aGUgbmV3IG9uZXMuCisgICAgICAgIGZvciAodmFyIGNodW5rTnVtYmVyID0gZmlyc3RD
aHVua051bWJlcjsgbGluZXNDb3VudCA+IDA7ICsrY2h1bmtOdW1iZXIpIHsKKyAgICAgICAgICAg
IHZhciBjaHVua0xpbmVzQ291bnQgPSBNYXRoLm1pbih0aGlzLl9kZWZhdWx0Q2h1bmtTaXplLCBs
aW5lc0NvdW50KTsKKyAgICAgICAgICAgIHZhciBuZXdDaHVuayA9IHRoaXMuX2NyZWF0ZU5ld0No
dW5rKHN0YXJ0TGluZSwgc3RhcnRMaW5lICsgY2h1bmtMaW5lc0NvdW50KTsKKyAgICAgICAgICAg
IHRoaXMuX2NvbnRhaW5lci5pbnNlcnRCZWZvcmUobmV3Q2h1bmsuZWxlbWVudCwgZmlyc3RVbm1v
ZGlmaWVkTGluZVJvdyk7CisKKyAgICAgICAgICAgIGlmIChjaHVua051bWJlciA8PSBsYXN0Q2h1
bmtOdW1iZXIpCisgICAgICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rc1tjaHVua051bWJlcl0g
PSBuZXdDaHVuazsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0
Q2h1bmtzLnNwbGljZShjaHVua051bWJlciwgMCwgbmV3Q2h1bmspOworICAgICAgICAgICAgc3Rh
cnRMaW5lICs9IGNodW5rTGluZXNDb3VudDsKKyAgICAgICAgICAgIGxpbmVzQ291bnQgLT0gY2h1
bmtMaW5lc0NvdW50OworICAgICAgICB9CisgICAgICAgIGlmIChjaHVua051bWJlciA8PSBsYXN0
Q2h1bmtOdW1iZXIpCisgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnNwbGljZShjaHVua051
bWJlciwgbGFzdENodW5rTnVtYmVyIC0gY2h1bmtOdW1iZXIgKyAxKTsKKworICAgICAgICB0aGlz
LmVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wOworICAgICAgICB0aGlzLmVsZW1lbnQuc2Ny
b2xsTGVmdCA9IHNjcm9sbExlZnQ7CisgICAgfSwKKworICAgIF91cGRhdGVIaWdobGlnaHRzRm9y
UmFuZ2U6IGZ1bmN0aW9uKHJhbmdlKQorICAgIHsKKyAgICAgICAgdmFyIHZpc2libGVGcm9tID0g
dGhpcy5lbGVtZW50LnNjcm9sbFRvcDsKKyAgICAgICAgdmFyIHZpc2libGVUbyA9IHRoaXMuZWxl
bWVudC5zY3JvbGxUb3AgKyB0aGlzLmVsZW1lbnQuY2xpZW50SGVpZ2h0OworCisgICAgICAgIHZh
ciByZXN1bHQgPSB0aGlzLl9maW5kVmlzaWJsZUNodW5rcyh2aXNpYmxlRnJvbSwgdmlzaWJsZVRv
KTsKKyAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fdGV4dENodW5rc1tyZXN1bHQuZW5kIC0gMV07
CisgICAgICAgIHZhciBsYXN0VmlzaWJsZUxpbmUgPSBjaHVuay5zdGFydExpbmUgKyBjaHVuay5s
aW5lc0NvdW50OworCisgICAgICAgIGxhc3RWaXNpYmxlTGluZSA9IE1hdGgubWF4KGxhc3RWaXNp
YmxlTGluZSwgcmFuZ2UuZW5kTGluZSArIDEpOworICAgICAgICBsYXN0VmlzaWJsZUxpbmUgPSBN
YXRoLm1pbihsYXN0VmlzaWJsZUxpbmUsIHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KTsKKwor
ICAgICAgICB2YXIgdXBkYXRlZCA9IHRoaXMuX2hpZ2hsaWdodGVyLnVwZGF0ZUhpZ2hsaWdodChy
YW5nZS5zdGFydExpbmUsIGxhc3RWaXNpYmxlTGluZSk7CisgICAgICAgIGlmICghdXBkYXRlZCkg
eworICAgICAgICAgICAgLy8gSGlnaGxpZ2h0cyBmb3IgdGhlIGNodW5rcyBiZWxvdyBhcmUgaW52
YWxpZCwgc28ganVzdCBjb2xsYXBzZSB0aGVtLgorICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRo
aXMuX2NodW5rTnVtYmVyRm9yTGluZShyYW5nZS5zdGFydExpbmUpOyBpIDwgdGhpcy5fdGV4dENo
dW5rcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzW2ldLmV4
cGFuZGVkID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9yZXBhaW50QWxsKCk7
CisgICAgfSwKKworICAgIF9jb2xsZWN0TGluZXNGcm9tRGl2OiBmdW5jdGlvbihsaW5lcywgZWxl
bWVudCkKKyAgICB7CisgICAgICAgIHZhciB0ZXh0Q29udGVudHMgPSBbXTsKKyAgICAgICAgdmFy
IG5vZGUgPSBlbGVtZW50Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSA/IGVsZW1lbnQgOiBl
bGVtZW50LnRyYXZlcnNlTmV4dE5vZGUoZWxlbWVudCk7CisgICAgICAgIHdoaWxlIChub2RlKSB7
CisgICAgICAgICAgICBpZiAoZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQgPT09IG5vZGUpIHsK
KyAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0U2libGluZzsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLm5vZGVOYW1l
LnRvTG93ZXJDYXNlKCkgPT09ICJiciIpCisgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRzLnB1
c2goIlxuIik7CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRF
WFRfTk9ERSkKKyAgICAgICAgICAgICAgICB0ZXh0Q29udGVudHMucHVzaChub2RlLnRleHRDb250
ZW50KTsKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLnRyYXZlcnNlTmV4dE5vZGUoZWxlbWVudCk7
CisgICAgICAgIH0KKworICAgICAgICB2YXIgdGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudHMuam9p
bigiIik7CisgICAgICAgIC8vIFRoZSBsYXN0IFxuIChpZiBhbnkpIGRvZXMgbm90ICJjb3VudCIg
aW4gYSBESVYuCisgICAgICAgIHRleHRDb250ZW50ID0gdGV4dENvbnRlbnQucmVwbGFjZSgvXG4k
LywgIiIpOworCisgICAgICAgIHRleHRDb250ZW50cyA9IHRleHRDb250ZW50LnNwbGl0KCJcbiIp
OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHRDb250ZW50cy5sZW5ndGg7ICsraSkK
KyAgICAgICAgICAgIGxpbmVzLnB1c2godGV4dENvbnRlbnRzW2ldKTsKKyAgICB9Cit9CisKK1dl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGU7CisKKy8qKgorICogQGNv
bnN0cnVjdG9yCisgKi8KK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rID0gZnVuY3Rp
b24odGV4dEVkaXRvciwgc3RhcnRMaW5lLCBlbmRMaW5lKQoreworICAgIHRoaXMuX3RleHRFZGl0
b3IgPSB0ZXh0RWRpdG9yOworICAgIHRoaXMuX3RleHRNb2RlbCA9IHRleHRFZGl0b3IuX3RleHRN
b2RlbDsKKworICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OworICAgIHRoaXMuZWxlbWVudC5saW5lTnVtYmVyID0gc3RhcnRMaW5lOworICAgIHRoaXMuZWxl
bWVudC5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtY29udGVudCI7CisgICAgdGhpcy5fdGV4dEVk
aXRvci5fZW5hYmxlRE9NTm9kZVJlbW92ZWRMaXN0ZW5lcih0aGlzLmVsZW1lbnQsIHRydWUpOwor
CisgICAgdGhpcy5fc3RhcnRMaW5lID0gc3RhcnRMaW5lOworICAgIGVuZExpbmUgPSBNYXRoLm1p
bih0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCwgZW5kTGluZSk7CisgICAgdGhpcy5saW5lc0Nv
dW50ID0gZW5kTGluZSAtIHN0YXJ0TGluZTsKKworICAgIHRoaXMuX2V4cGFuZGVkID0gZmFsc2U7
CisgICAgdGhpcy5fcmVhZE9ubHkgPSBmYWxzZTsKKworICAgIHRoaXMudXBkYXRlQ29sbGFwc2Vk
TGluZVJvdygpOworfQorCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5
cGUgPSB7CisgICAgYWRkRGVjb3JhdGlvbjogZnVuY3Rpb24oZGVjb3JhdGlvbikKKyAgICB7Cisg
ICAgICAgIHRoaXMuX3RleHRFZGl0b3IuYmVnaW5Eb21VcGRhdGVzKCk7CisgICAgICAgIGlmICh0
eXBlb2YgZGVjb3JhdGlvbiA9PT0gInN0cmluZyIpCisgICAgICAgICAgICB0aGlzLmVsZW1lbnQu
YWRkU3R5bGVDbGFzcyhkZWNvcmF0aW9uKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBp
ZiAoIXRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
ZGl2Iik7CisgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudC5j
bGFzc05hbWUgPSAid2Via2l0LWxpbmUtZGVjb3JhdGlvbnMiOworICAgICAgICAgICAgICAgIHRo
aXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1l
bnQuYXBwZW5kQ2hpbGQoZGVjb3JhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdGV4
dEVkaXRvci5lbmREb21VcGRhdGVzKCk7CisgICAgfSwKKworICAgIHJlbW92ZURlY29yYXRpb246
IGZ1bmN0aW9uKGRlY29yYXRpb24pCisgICAgeworICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLmJl
Z2luRG9tVXBkYXRlcygpOworICAgICAgICBpZiAodHlwZW9mIGRlY29yYXRpb24gPT09ICJzdHJp
bmciKQorICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoZGVjb3JhdGlv
bik7CisgICAgICAgIGVsc2UgaWYgKHRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQpCisg
ICAgICAgICAgICB0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50LnJlbW92ZUNoaWxkKGRl
Y29yYXRpb24pOworICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLmVuZERvbVVwZGF0ZXMoKTsKKyAg
ICB9LAorCisgICAgcmVtb3ZlQWxsRGVjb3JhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHRoaXMuX3RleHRFZGl0b3IuYmVnaW5Eb21VcGRhdGVzKCk7CisgICAgICAgIHRoaXMuZWxl
bWVudC5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtY29udGVudCI7CisgICAgICAgIGlmICh0aGlz
LmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50KSB7CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQu
cmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudCk7CisgICAgICAgICAg
ICBkZWxldGUgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudDsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl90ZXh0RWRpdG9yLmVuZERvbVVwZGF0ZXMoKTsKKyAgICB9LAorCisgICAgZ2V0
IGRlY29yYXRlZCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmNsYXNzTmFt
ZSAhPT0gIndlYmtpdC1saW5lLWNvbnRlbnQiIHx8ICEhKHRoaXMuZWxlbWVudC5kZWNvcmF0aW9u
c0VsZW1lbnQgJiYgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudC5maXJzdENoaWxkKTsK
KyAgICB9LAorCisgICAgZ2V0IHN0YXJ0TGluZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhp
cy5fc3RhcnRMaW5lOworICAgIH0sCisKKyAgICBzZXQgc3RhcnRMaW5lKHN0YXJ0TGluZSkKKyAg
ICB7CisgICAgICAgIHRoaXMuX3N0YXJ0TGluZSA9IHN0YXJ0TGluZTsKKyAgICAgICAgdGhpcy5l
bGVtZW50LmxpbmVOdW1iZXIgPSBzdGFydExpbmU7CisgICAgICAgIGlmICh0aGlzLl9leHBhbmRl
ZExpbmVSb3dzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2V4cGFu
ZGVkTGluZVJvd3MubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRM
aW5lUm93c1tpXS5saW5lTnVtYmVyID0gc3RhcnRMaW5lICsgaTsKKyAgICAgICAgfQorICAgIH0s
CisKKyAgICBnZXQgZXhwYW5kZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGFu
ZGVkOworICAgIH0sCisKKyAgICBzZXQgZXhwYW5kZWQoZXhwYW5kZWQpCisgICAgeworICAgICAg
ICBpZiAodGhpcy5fZXhwYW5kZWQgPT09IGV4cGFuZGVkKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHRoaXMuX2V4cGFuZGVkID0gZXhwYW5kZWQ7CisKKyAgICAgICAgaWYgKHRoaXMu
bGluZXNDb3VudCA9PT0gMSkgeworICAgICAgICAgICAgaWYgKGV4cGFuZGVkKQorICAgICAgICAg
ICAgICAgIHRoaXMuX3RleHRFZGl0b3IuX3BhaW50TGluZSh0aGlzLmVsZW1lbnQpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5iZWdp
bkRvbVVwZGF0ZXMoKTsKKworICAgICAgICBpZiAoZXhwYW5kZWQpIHsKKyAgICAgICAgICAgIHRo
aXMuX2V4cGFuZGVkTGluZVJvd3MgPSBbXTsKKyAgICAgICAgICAgIHZhciBwYXJlbnRFbGVtZW50
ID0gdGhpcy5lbGVtZW50LnBhcmVudEVsZW1lbnQ7CisgICAgICAgICAgICBmb3IgKHZhciBpID0g
dGhpcy5zdGFydExpbmU7IGkgPCB0aGlzLnN0YXJ0TGluZSArIHRoaXMubGluZXNDb3VudDsgKytp
KSB7CisgICAgICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl9jcmVhdGVSb3coaSk7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5fZW5hYmxlRE9NTm9kZVJlbW92ZWRMaXN0
ZW5lcihsaW5lUm93LCB0cnVlKTsKKyAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVFbGVtZW50
UmVhZE9ubHlTdGF0ZShsaW5lUm93KTsKKyAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50Lmlu
c2VydEJlZm9yZShsaW5lUm93LCB0aGlzLmVsZW1lbnQpOworICAgICAgICAgICAgICAgIHRoaXMu
X2V4cGFuZGVkTGluZVJvd3MucHVzaChsaW5lUm93KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRoaXMuX3RleHRFZGl0b3IuX2VuYWJsZURPTU5vZGVSZW1vdmVkTGlzdGVuZXIodGhpcy5l
bGVtZW50LCBmYWxzZSk7CisgICAgICAgICAgICBwYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRo
aXMuZWxlbWVudCk7CisgICAgICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLl9wYWludExpbmVzKHRo
aXMuc3RhcnRMaW5lLCB0aGlzLnN0YXJ0TGluZSArIHRoaXMubGluZXNDb3VudCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgZWxlbWVudEluc2VydGVkID0gZmFsc2U7CisgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2V4cGFuZGVkTGluZVJvd3MubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX2V4cGFuZGVkTGlu
ZVJvd3NbaV07CisgICAgICAgICAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5fZW5hYmxlRE9NTm9k
ZVJlbW92ZWRMaXN0ZW5lcihsaW5lUm93LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgdmFyIHBh
cmVudEVsZW1lbnQgPSBsaW5lUm93LnBhcmVudEVsZW1lbnQ7CisgICAgICAgICAgICAgICAgaWYg
KHBhcmVudEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50SW5zZXJ0
ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRJbnNlcnRlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLl9lbmFibGVET01Ob2RlUmVt
b3ZlZExpc3RlbmVyKHRoaXMuZWxlbWVudCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmVsZW1lbnQsIGxpbmVSb3cpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQucmVt
b3ZlQ2hpbGQobGluZVJvdyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRo
aXMuX3RleHRFZGl0b3IuX3JlbGVhc2VMaW5lc0hpZ2hsaWdodChsaW5lUm93KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9leHBhbmRlZExpbmVSb3dzOworICAgICAg
ICB9CisKKyAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5lbmREb21VcGRhdGVzKCk7CisgICAgfSwK
KworICAgIHNldCByZWFkT25seShyZWFkT25seSkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9y
ZWFkT25seSA9PT0gcmVhZE9ubHkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhp
cy5fcmVhZE9ubHkgPSByZWFkT25seTsKKyAgICAgICAgdGhpcy5fdXBkYXRlRWxlbWVudFJlYWRP
bmx5U3RhdGUodGhpcy5lbGVtZW50KTsKKyAgICAgICAgaWYgKHRoaXMuX2V4cGFuZGVkTGluZVJv
d3MpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZXhwYW5kZWRMaW5l
Um93cy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVFbGVtZW50UmVh
ZE9ubHlTdGF0ZSh0aGlzLl9leHBhbmRlZExpbmVSb3dzW2ldKTsKKyAgICAgICAgfQorICAgIH0s
CisKKyAgICBnZXQgcmVhZE9ubHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRP
bmx5OworICAgIH0sCisKKyAgICBfdXBkYXRlRWxlbWVudFJlYWRPbmx5U3RhdGU6IGZ1bmN0aW9u
KGVsZW1lbnQpCisgICAgeworICAgICAgICBpZiAodGhpcy5fcmVhZE9ubHkpCisgICAgICAgICAg
ICBlbGVtZW50LmFkZFN0eWxlQ2xhc3MoInRleHQtZWRpdG9yLXJlYWQtb25seSIpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBlbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoInRleHQtZWRpdG9y
LXJlYWQtb25seSIpOworICAgIH0sCisKKyAgICBnZXQgaGVpZ2h0KCkKKyAgICB7CisgICAgICAg
IGlmICghdGhpcy5fZXhwYW5kZWRMaW5lUm93cykKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90
ZXh0RWRpdG9yLl90b3RhbEhlaWdodCh0aGlzLmVsZW1lbnQpOworICAgICAgICByZXR1cm4gdGhp
cy5fdGV4dEVkaXRvci5fdG90YWxIZWlnaHQodGhpcy5fZXhwYW5kZWRMaW5lUm93c1swXSwgdGhp
cy5fZXhwYW5kZWRMaW5lUm93c1t0aGlzLl9leHBhbmRlZExpbmVSb3dzLmxlbmd0aCAtIDFdKTsK
KyAgICB9LAorCisgICAgZ2V0IG9mZnNldFRvcCgpCisgICAgeworICAgICAgICByZXR1cm4gKHRo
aXMuX2V4cGFuZGVkTGluZVJvd3MgJiYgdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5sZW5ndGgpID8g
dGhpcy5fZXhwYW5kZWRMaW5lUm93c1swXS5vZmZzZXRUb3AgOiB0aGlzLmVsZW1lbnQub2Zmc2V0
VG9wOworICAgIH0sCisKKyAgICBfY3JlYXRlUm93OiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAg
IHsKKyAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl90ZXh0RWRpdG9yLl9jYWNoZWRSb3dzLnBv
cCgpIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBsaW5lUm93Lmxp
bmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgICAgICBsaW5lUm93LmNsYXNzTmFtZSA9ICJ3ZWJr
aXQtbGluZS1jb250ZW50IjsKKyAgICAgICAgbGluZVJvdy50ZXh0Q29udGVudCA9IHRoaXMuX3Rl
eHRNb2RlbC5saW5lKGxpbmVOdW1iZXIpOworICAgICAgICBpZiAoIWxpbmVSb3cudGV4dENvbnRl
bnQpCisgICAgICAgICAgICBsaW5lUm93LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImJyIikpOworICAgICAgICByZXR1cm4gbGluZVJvdzsKKyAgICB9LAorCisgICAgZ2V0RXhw
YW5kZWRMaW5lUm93OiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKCF0
aGlzLl9leHBhbmRlZCB8fCBsaW5lTnVtYmVyIDwgdGhpcy5zdGFydExpbmUgfHwgbGluZU51bWJl
ciA+PSB0aGlzLnN0YXJ0TGluZSArIHRoaXMubGluZXNDb3VudCkKKyAgICAgICAgICAgIHJldHVy
biBudWxsOworICAgICAgICBpZiAoIXRoaXMuX2V4cGFuZGVkTGluZVJvd3MpCisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5lbGVtZW50OworICAgICAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWRMaW5l
Um93c1tsaW5lTnVtYmVyIC0gdGhpcy5zdGFydExpbmVdOworICAgIH0sCisKKyAgICB1cGRhdGVD
b2xsYXBzZWRMaW5lUm93OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5saW5l
c0NvdW50ID09PSAxICYmIHRoaXMuX2V4cGFuZGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHZhciBsaW5lcyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFydExp
bmU7IGkgPCB0aGlzLnN0YXJ0TGluZSArIHRoaXMubGluZXNDb3VudDsgKytpKQorICAgICAgICAg
ICAgbGluZXMucHVzaCh0aGlzLl90ZXh0TW9kZWwubGluZShpKSk7CisKKyAgICAgICAgdGhpcy5l
bGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgIHRoaXMuZWxlbWVudC50ZXh0Q29udGVu
dCA9IGxpbmVzLmpvaW4oIlxuIik7CisKKyAgICAgICAgLy8gVGhlIGxhc3QgZW1wdHkgbGluZSB3
aWxsIGdldCBzd2FsbG93ZWQgb3RoZXJ3aXNlLgorICAgICAgICBpZiAoIWxpbmVzW2xpbmVzLmxl
bmd0aCAtIDFdKQorICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImJyIikpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZTM2ZTE5ZDY2MzAyYzUwMjdkZjdiYTAwNTJhZjMwODU1YzA4OTc2NC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjYxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLyoqCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9Ci0gKiBAY29uc3RydWN0b3IK
LSAqLwotV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIgPSBmdW5jdGlvbih0ZXh0TW9kZWwsIHBsYXRm
b3JtLCB1cmwsIGRlbGVnYXRlKQotewotICAgIFdlYkluc3BlY3Rvci5WaWV3LmNhbGwodGhpcyk7
Ci0gICAgdGhpcy5yZWdpc3RlclJlcXVpcmVkQ1NTKCJ0ZXh0Vmlld2VyLmNzcyIpOwotCi0gICAg
dGhpcy5fdGV4dE1vZGVsID0gdGV4dE1vZGVsOwotICAgIHRoaXMuX3RleHRNb2RlbC5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTW9kZWwuRXZlbnRzLlRleHRDaGFuZ2Vk
LCB0aGlzLl90ZXh0Q2hhbmdlZCwgdGhpcyk7Ci0gICAgdGhpcy5fdGV4dE1vZGVsLnJlc2V0VW5k
b1N0YWNrKCk7Ci0gICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLSAgICB0aGlzLl91cmwg
PSB1cmw7Ci0gICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJ0ZXh0LWVkaXRvciBtb25vc3Bh
Y2UiOwotCi0gICAgdmFyIGVudGVyVGV4dENoYW5nZU1vZGUgPSB0aGlzLl9lbnRlckludGVybmFs
VGV4dENoYW5nZU1vZGUuYmluZCh0aGlzKTsKLSAgICB2YXIgZXhpdFRleHRDaGFuZ2VNb2RlID0g
dGhpcy5fZXhpdEludGVybmFsVGV4dENoYW5nZU1vZGUuYmluZCh0aGlzKTsKLSAgICB2YXIgc3lu
Y1Njcm9sbExpc3RlbmVyID0gdGhpcy5fc3luY1Njcm9sbC5iaW5kKHRoaXMpOwotICAgIHZhciBz
eW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIgPSB0aGlzLl9zeW5jRGVjb3JhdGlvbnNGb3JM
aW5lLmJpbmQodGhpcyk7Ci0gICAgdmFyIHN5bmNMaW5lSGVpZ2h0TGlzdGVuZXIgPSB0aGlzLl9z
eW5jTGluZUhlaWdodC5iaW5kKHRoaXMpOwotICAgIHRoaXMuX21haW5QYW5lbCA9IG5ldyBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbCh0aGlzLl90ZXh0TW9kZWwsIHVybCwgc3luY1Nj
cm9sbExpc3RlbmVyLCBzeW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIsIGVudGVyVGV4dENo
YW5nZU1vZGUsIGV4aXRUZXh0Q2hhbmdlTW9kZSk7Ci0gICAgdGhpcy5fZ3V0dGVyUGFuZWwgPSBu
ZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbCh0aGlzLl90ZXh0TW9kZWwsIHN5
bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lciwgc3luY0xpbmVIZWlnaHRMaXN0ZW5lcik7Ci0g
ICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX21haW5QYW5lbC5lbGVtZW50KTsKLSAg
ICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fZ3V0dGVyUGFuZWwuZWxlbWVudCk7Ci0K
LSAgICAvLyBGb3J3YXJkIG1vdXNlIHdoZWVsIGV2ZW50cyBmcm9tIHRoZSB1bnNjcm9sbGFibGUg
Z3V0dGVyIHRvIHRoZSBtYWluIHBhbmVsLgotICAgIGZ1bmN0aW9uIGZvcndhcmRXaGVlbEV2ZW50
KGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGNsb25lID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQo
IldoZWVsRXZlbnQiKTsKLSAgICAgICAgY2xvbmUuaW5pdFdlYktpdFdoZWVsRXZlbnQoZXZlbnQu
d2hlZWxEZWx0YVgsIGV2ZW50LndoZWVsRGVsdGFZLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBldmVudC52aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBldmVudC5zY3JlZW5YLCBldmVudC5zY3JlZW5ZLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBldmVudC5jdHJsS2V5LCBldmVudC5hbHRLZXksIGV2ZW50LnNo
aWZ0S2V5LCBldmVudC5tZXRhS2V5KTsKLSAgICAgICAgdGhpcy5fbWFpblBhbmVsLmVsZW1lbnQu
ZGlzcGF0Y2hFdmVudChjbG9uZSk7Ci0gICAgfQotICAgIHRoaXMuX2d1dHRlclBhbmVsLmVsZW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V3aGVlbCIsIGZvcndhcmRXaGVlbEV2ZW50LmJpbmQo
dGhpcyksIGZhbHNlKTsKLQotICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlk
b3duIiwgdGhpcy5faGFuZGxlS2V5RG93bi5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5l
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwgdGhpcy5fY29udGV4dE1lbnUu
YmluZCh0aGlzKSwgdHJ1ZSk7Ci0KLSAgICB0aGlzLl9yZWdpc3RlclNob3J0Y3V0cygpOwotfQot
Ci1XZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUgPSB7Ci0gICAgc2V0IG1pbWVUeXBl
KG1pbWVUeXBlKQotICAgIHsKLSAgICAgICAgdGhpcy5fbWFpblBhbmVsLm1pbWVUeXBlID0gbWlt
ZVR5cGU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVhZE9u
bHkKLSAgICAgKi8KLSAgICBzZXRSZWFkT25seTogZnVuY3Rpb24ocmVhZE9ubHkpCi0gICAgewot
ICAgICAgICBpZiAodGhpcy5fbWFpblBhbmVsLnJlYWRPbmx5KCkgPT09IHJlYWRPbmx5KQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9tYWluUGFuZWwuc2V0UmVhZE9ubHkocmVh
ZE9ubHksIHRoaXMuaXNTaG93aW5nKCkpOwotICAgICAgICBXZWJJbnNwZWN0b3IubWFya0JlaW5n
RWRpdGVkKHRoaXMuZWxlbWVudCwgIXJlYWRPbmx5KTsKLSAgICB9LAotCi0gICAgcmVhZE9ubHk6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9tYWluUGFuZWwucmVhZE9u
bHkoKTsKLSAgICB9LAotCi0gICAgZ2V0IHRleHRNb2RlbCgpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fdGV4dE1vZGVsOwotICAgIH0sCi0KLSAgICBkZWZhdWx0Rm9jdXNlZEVsZW1lbnQ6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9tYWluUGFuZWwuZGVmYXVs
dEZvY3VzZWRFbGVtZW50KCk7Ci0gICAgfSwKLQotICAgIHJldmVhbExpbmU6IGZ1bmN0aW9uKGxp
bmVOdW1iZXIpCi0gICAgewotICAgICAgICB0aGlzLl9tYWluUGFuZWwucmV2ZWFsTGluZShsaW5l
TnVtYmVyKTsKLSAgICB9LAotCi0gICAgYWRkRGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJl
ciwgZGVjb3JhdGlvbikKLSAgICB7Ci0gICAgICAgIHRoaXMuX21haW5QYW5lbC5hZGREZWNvcmF0
aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRpb24pOwotICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC5h
ZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRpb24pOwotICAgIH0sCi0KLSAgICByZW1v
dmVEZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0aW9uKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fbWFpblBhbmVsLnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwgZGVjb3Jh
dGlvbik7Ci0gICAgICAgIHRoaXMuX2d1dHRlclBhbmVsLnJlbW92ZURlY29yYXRpb24obGluZU51
bWJlciwgZGVjb3JhdGlvbik7Ci0gICAgfSwKLQotICAgIG1hcmtBbmRSZXZlYWxSYW5nZTogZnVu
Y3Rpb24ocmFuZ2UpCi0gICAgewotICAgICAgICB0aGlzLl9tYWluUGFuZWwubWFya0FuZFJldmVh
bFJhbmdlKHJhbmdlKTsKLSAgICB9LAotCi0gICAgaGlnaGxpZ2h0TGluZTogZnVuY3Rpb24obGlu
ZU51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmICh0eXBlb2YgbGluZU51bWJlciAhPT0gIm51bWJl
ciIgfHwgbGluZU51bWJlciA8IDApCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbGlu
ZU51bWJlciA9IE1hdGgubWluKGxpbmVOdW1iZXIsIHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50
IC0gMSk7Ci0gICAgICAgIHRoaXMuX21haW5QYW5lbC5oaWdobGlnaHRMaW5lKGxpbmVOdW1iZXIp
OwotICAgIH0sCi0KLSAgICBjbGVhckxpbmVIaWdobGlnaHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX21haW5QYW5lbC5jbGVhckxpbmVIaWdobGlnaHQoKTsKLSAgICB9LAotCi0g
ICAgZnJlZUNhY2hlZEVsZW1lbnRzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9t
YWluUGFuZWwuZnJlZUNhY2hlZEVsZW1lbnRzKCk7Ci0gICAgICAgIHRoaXMuX2d1dHRlclBhbmVs
LmZyZWVDYWNoZWRFbGVtZW50cygpOwotICAgIH0sCi0KLSAgICBlbGVtZW50c1RvUmVzdG9yZVNj
cm9sbFBvc2l0aW9uc0ZvcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFt0aGlz
Ll9tYWluUGFuZWwuZWxlbWVudF07Ci0gICAgfSwKLQotICAgIGluaGVyaXRTY3JvbGxQb3NpdGlv
bnM6IGZ1bmN0aW9uKHRleHRWaWV3ZXIpCi0gICAgewotICAgICAgICB0aGlzLl9tYWluUGFuZWwu
ZWxlbWVudC5fc2Nyb2xsVG9wID0gdGV4dFZpZXdlci5fbWFpblBhbmVsLmVsZW1lbnQuc2Nyb2xs
VG9wOwotICAgICAgICB0aGlzLl9tYWluUGFuZWwuZWxlbWVudC5fc2Nyb2xsTGVmdCA9IHRleHRW
aWV3ZXIuX21haW5QYW5lbC5lbGVtZW50LnNjcm9sbExlZnQ7Ci0gICAgfSwKLQotICAgIGJlZ2lu
VXBkYXRlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fbWFpblBhbmVsLmJlZ2lu
VXBkYXRlcygpOwotICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC5iZWdpblVwZGF0ZXMoKTsKLSAg
ICB9LAotCi0gICAgZW5kVXBkYXRlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5f
bWFpblBhbmVsLmVuZFVwZGF0ZXMoKTsKLSAgICAgICAgdGhpcy5fZ3V0dGVyUGFuZWwuZW5kVXBk
YXRlcygpOwotICAgICAgICB0aGlzLl91cGRhdGVQYW5lbE9mZnNldHMoKTsKLSAgICB9LAotCi0g
ICAgb25SZXNpemU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX21haW5QYW5lbC5y
ZXNpemUoKTsKLSAgICAgICAgdGhpcy5fZ3V0dGVyUGFuZWwucmVzaXplKCk7Ci0gICAgICAgIHRo
aXMuX3VwZGF0ZVBhbmVsT2Zmc2V0cygpOwotICAgIH0sCi0KLSAgICBfdGV4dENoYW5nZWQ6IGZ1
bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9pbnRlcm5hbFRleHRDaGFu
Z2VNb2RlKQotICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnJlc2V0VW5kb1N0YWNrKCk7Ci0g
ICAgICAgIHRoaXMuX21haW5QYW5lbC50ZXh0Q2hhbmdlZChldmVudC5kYXRhLm9sZFJhbmdlLCBl
dmVudC5kYXRhLm5ld1JhbmdlKTsKLSAgICAgICAgdGhpcy5fZ3V0dGVyUGFuZWwudGV4dENoYW5n
ZWQoZXZlbnQuZGF0YS5vbGRSYW5nZSwgZXZlbnQuZGF0YS5uZXdSYW5nZSk7Ci0gICAgICAgIHRo
aXMuX3VwZGF0ZVBhbmVsT2Zmc2V0cygpOwotICAgIH0sCi0KLSAgICBfZW50ZXJJbnRlcm5hbFRl
eHRDaGFuZ2VNb2RlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9pbnRlcm5hbFRl
eHRDaGFuZ2VNb2RlID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5fZGVsZWdhdGUuYmVmb3JlVGV4dENo
YW5nZWQoKTsKLSAgICB9LAotCi0gICAgX2V4aXRJbnRlcm5hbFRleHRDaGFuZ2VNb2RlOiBmdW5j
dGlvbihvbGRSYW5nZSwgbmV3UmFuZ2UpCi0gICAgewotICAgICAgICB0aGlzLl9pbnRlcm5hbFRl
eHRDaGFuZ2VNb2RlID0gZmFsc2U7Ci0gICAgICAgIHRoaXMuX2RlbGVnYXRlLmFmdGVyVGV4dENo
YW5nZWQob2xkUmFuZ2UsIG5ld1JhbmdlKTsKLSAgICB9LAotCi0gICAgX3VwZGF0ZVBhbmVsT2Zm
c2V0czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGxpbmVOdW1iZXJzV2lkdGggPSB0
aGlzLl9ndXR0ZXJQYW5lbC5lbGVtZW50Lm9mZnNldFdpZHRoOwotICAgICAgICBpZiAobGluZU51
bWJlcnNXaWR0aCkKLSAgICAgICAgICAgIHRoaXMuX21haW5QYW5lbC5lbGVtZW50LnN0eWxlLnNl
dFByb3BlcnR5KCJsZWZ0IiwgbGluZU51bWJlcnNXaWR0aCArICJweCIpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB0aGlzLl9tYWluUGFuZWwuZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0
eSgibGVmdCIpOyAvLyBVc2UgZGVmYXVsdCB2YWx1ZSBzZXQgaW4gQ1NTLgotICAgIH0sCi0KLSAg
ICBfc3luY1Njcm9sbDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIG1haW5FbGVtZW50
ID0gdGhpcy5fbWFpblBhbmVsLmVsZW1lbnQ7Ci0gICAgICAgIHZhciBndXR0ZXJFbGVtZW50ID0g
dGhpcy5fZ3V0dGVyUGFuZWwuZWxlbWVudDsKLSAgICAgICAgLy8gSGFuZGxlIGhvcml6b250YWwg
c2Nyb2xsIGJhciBhdCB0aGUgYm90dG9tIG9mIHRoZSBtYWluIHBhbmVsLgotICAgICAgICB0aGlz
Ll9ndXR0ZXJQYW5lbC5zeW5jQ2xpZW50SGVpZ2h0KG1haW5FbGVtZW50LmNsaWVudEhlaWdodCk7
Ci0gICAgICAgIGd1dHRlckVsZW1lbnQuc2Nyb2xsVG9wID0gbWFpbkVsZW1lbnQuc2Nyb2xsVG9w
OwotICAgIH0sCi0KLSAgICBfc3luY0RlY29yYXRpb25zRm9yTGluZTogZnVuY3Rpb24obGluZU51
bWJlcikKLSAgICB7Ci0gICAgICAgIGlmIChsaW5lTnVtYmVyID49IHRoaXMuX3RleHRNb2RlbC5s
aW5lc0NvdW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBtYWluQ2h1bmsg
PSB0aGlzLl9tYWluUGFuZWwuY2h1bmtGb3JMaW5lKGxpbmVOdW1iZXIpOwotICAgICAgICBpZiAo
bWFpbkNodW5rLmxpbmVzQ291bnQgPT09IDEgJiYgbWFpbkNodW5rLmRlY29yYXRlZCkgewotICAg
ICAgICAgICAgdmFyIGd1dHRlckNodW5rID0gdGhpcy5fZ3V0dGVyUGFuZWwubWFrZUxpbmVBQ2h1
bmsobGluZU51bWJlcik7Ci0gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gbWFpbkNodW5rLmhlaWdo
dDsKLSAgICAgICAgICAgIGlmIChoZWlnaHQpCi0gICAgICAgICAgICAgICAgZ3V0dGVyQ2h1bmsu
ZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgiaGVpZ2h0IiwgaGVpZ2h0ICsgInB4Iik7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZ3V0dGVyQ2h1bmsuZWxlbWVudC5zdHlsZS5y
ZW1vdmVQcm9wZXJ0eSgiaGVpZ2h0Iik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2
YXIgZ3V0dGVyQ2h1bmsgPSB0aGlzLl9ndXR0ZXJQYW5lbC5jaHVua0ZvckxpbmUobGluZU51bWJl
cik7Ci0gICAgICAgICAgICBpZiAoZ3V0dGVyQ2h1bmsubGluZXNDb3VudCA9PT0gMSkKLSAgICAg
ICAgICAgICAgICBndXR0ZXJDaHVuay5lbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCJoZWln
aHQiKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfc3luY0xpbmVIZWlnaHQ6IGZ1bmN0aW9u
KGd1dHRlclJvdykKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9saW5lSGVpZ2h0U3luY2VkKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoZ3V0dGVyUm93ICYmIGd1dHRlclJvdy5v
ZmZzZXRIZWlnaHQpIHsKLSAgICAgICAgICAgIC8vIEZvcmNlIGVxdWFsIGxpbmUgaGVpZ2h0cyBm
b3IgdGhlIGNoaWxkIHBhbmVscy4KLSAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQ
cm9wZXJ0eSgibGluZS1oZWlnaHQiLCBndXR0ZXJSb3cub2Zmc2V0SGVpZ2h0ICsgInB4Iik7Ci0g
ICAgICAgICAgICB0aGlzLl9saW5lSGVpZ2h0U3luY2VkID0gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH0sCi0KLSAgICBfcmVnaXN0ZXJTaG9ydGN1dHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHZhciBrZXlzID0gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5czsKLSAgICAgICAg
dmFyIG1vZGlmaWVycyA9IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyczsK
LQotICAgICAgICB0aGlzLl9zaG9ydGN1dHMgPSB7fTsKLSAgICAgICAgdmFyIGNvbW1pdEVkaXRp
bmcgPSB0aGlzLl9jb21taXRFZGl0aW5nLmJpbmQodGhpcyk7Ci0gICAgICAgIHRoaXMuX3Nob3J0
Y3V0c1tXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5KCJzIiwgbW9kaWZpZXJz
LkN0cmxPck1ldGEpXSA9IGNvbW1pdEVkaXRpbmc7Ci0KLSAgICAgICAgdmFyIGhhbmRsZUVudGVy
S2V5ID0gdGhpcy5fbWFpblBhbmVsLmhhbmRsZUVudGVyS2V5LmJpbmQodGhpcy5fbWFpblBhbmVs
KTsKLSAgICAgICAgdGhpcy5fc2hvcnRjdXRzW1dlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0
Lm1ha2VLZXkoa2V5cy5FbnRlci5jb2RlLCBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5N
b2RpZmllcnMuTm9uZSldID0gaGFuZGxlRW50ZXJLZXk7Ci0KLSAgICAgICAgdmFyIGhhbmRsZVVu
ZG8gPSB0aGlzLl9tYWluUGFuZWwuaGFuZGxlVW5kb1JlZG8uYmluZCh0aGlzLl9tYWluUGFuZWws
IGZhbHNlKTsKLSAgICAgICAgdmFyIGhhbmRsZVJlZG8gPSB0aGlzLl9tYWluUGFuZWwuaGFuZGxl
VW5kb1JlZG8uYmluZCh0aGlzLl9tYWluUGFuZWwsIHRydWUpOwotICAgICAgICB0aGlzLl9zaG9y
dGN1dHNbV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZUtleSgieiIsIG1vZGlmaWVy
cy5DdHJsT3JNZXRhKV0gPSBoYW5kbGVVbmRvOwotICAgICAgICB0aGlzLl9zaG9ydGN1dHNbV2Vi
SW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZUtleSgieiIsIG1vZGlmaWVycy5TaGlmdCB8
IG1vZGlmaWVycy5DdHJsT3JNZXRhKV0gPSBoYW5kbGVSZWRvOwotCi0gICAgICAgIHZhciBoYW5k
bGVUYWJLZXkgPSB0aGlzLl9tYWluUGFuZWwuaGFuZGxlVGFiS2V5UHJlc3MuYmluZCh0aGlzLl9t
YWluUGFuZWwsIGZhbHNlKTsKLSAgICAgICAgdmFyIGhhbmRsZVNoaWZ0VGFiS2V5ID0gdGhpcy5f
bWFpblBhbmVsLmhhbmRsZVRhYktleVByZXNzLmJpbmQodGhpcy5fbWFpblBhbmVsLCB0cnVlKTsK
LSAgICAgICAgdGhpcy5fc2hvcnRjdXRzW1dlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1h
a2VLZXkoa2V5cy5UYWIuY29kZSldID0gaGFuZGxlVGFiS2V5OwotICAgICAgICB0aGlzLl9zaG9y
dGN1dHNbV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZUtleShrZXlzLlRhYi5jb2Rl
LCBtb2RpZmllcnMuU2hpZnQpXSA9IGhhbmRsZVNoaWZ0VGFiS2V5OwotICAgIH0sCi0KLSAgICBf
aGFuZGxlS2V5RG93bjogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLnJlYWRP
bmx5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHNob3J0Y3V0S2V5ID0g
V2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZUtleUZyb21FdmVudChlKTsKLSAgICAg
ICAgdmFyIGhhbmRsZXIgPSB0aGlzLl9zaG9ydGN1dHNbc2hvcnRjdXRLZXldOwotICAgICAgICBp
ZiAoaGFuZGxlciAmJiBoYW5kbGVyKCkpCi0gICAgICAgICAgICBlLmNvbnN1bWUodHJ1ZSk7Ci0g
ICAgfSwKLQotICAgIF9jb250ZXh0TWVudTogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAg
ICB2YXIgY29udGV4dE1lbnUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51KCk7Ci0gICAg
ICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFz
cygid2Via2l0LWxpbmUtbnVtYmVyIik7Ci0gICAgICAgIGlmICh0YXJnZXQpCi0gICAgICAgICAg
ICB0aGlzLl9kZWxlZ2F0ZS5wb3B1bGF0ZUxpbmVHdXR0ZXJDb250ZXh0TWVudShjb250ZXh0TWVu
dSwgdGFyZ2V0LmxpbmVOdW1iZXIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHRhcmdl
dCA9IHRoaXMuX21haW5QYW5lbC5fZW5jbG9zaW5nTGluZVJvd09yU2VsZihldmVudC50YXJnZXQp
OwotICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUucG9wdWxhdGVUZXh0QXJlYUNvbnRleHRNZW51
KGNvbnRleHRNZW51LCB0YXJnZXQgJiYgdGFyZ2V0LmxpbmVOdW1iZXIpOwotICAgICAgICB9Ci0g
ICAgICAgIGNvbnRleHRNZW51LnNob3coZXZlbnQpOwotICAgIH0sCi0KLSAgICBfY29tbWl0RWRp
dGluZzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5jb21taXRF
ZGl0aW5nKCk7Ci0gICAgICAgIGlmICh0aGlzLl91cmwgJiYgV2ViSW5zcGVjdG9yLmZpbGVNYW5h
Z2VyLmlzVVJMU2F2ZWQodGhpcy5fdXJsKSkKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5maWxl
TWFuYWdlci5zYXZlKHRoaXMuX3VybCwgdGhpcy5fdGV4dE1vZGVsLnRleHQsIGZhbHNlKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIHdhc1Nob3duOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICBpZiAoIXRoaXMucmVhZE9ubHkoKSkKLSAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5tYXJrQmVpbmdFZGl0ZWQodGhpcy5lbGVtZW50LCB0cnVlKTsKLSAgICB9LAotCi0gICAg
d2lsbEhpZGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5yZWFkT25seSgp
KQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLm1hcmtCZWluZ0VkaXRlZCh0aGlzLmVsZW1lbnQs
IGZhbHNlKTsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5f
X3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGU7Ci0KLS8qKgotICogQGludGVy
ZmFjZQotICovCi1XZWJJbnNwZWN0b3IuVGV4dFZpZXdlckRlbGVnYXRlID0gZnVuY3Rpb24oKQot
ewotfQotCi1XZWJJbnNwZWN0b3IuVGV4dFZpZXdlckRlbGVnYXRlLnByb3RvdHlwZSA9IHsKLSAg
ICBiZWZvcmVUZXh0Q2hhbmdlZDogZnVuY3Rpb24oKSB7IH0sCi0KLSAgICBhZnRlclRleHRDaGFu
Z2VkOiBmdW5jdGlvbihvbGRSYW5nZSwgbmV3UmFuZ2UpIHsgfSwKLQotICAgIGNvbW1pdEVkaXRp
bmc6IGZ1bmN0aW9uKCkgeyB9LAotCi0gICAgcG9wdWxhdGVMaW5lR3V0dGVyQ29udGV4dE1lbnU6
IGZ1bmN0aW9uKGNvbnRleHRNZW51LCBsaW5lTnVtYmVyKSB7IH0sCi0KLSAgICBwb3B1bGF0ZVRl
eHRBcmVhQ29udGV4dE1lbnU6IGZ1bmN0aW9uKGNvbnRleHRNZW51LCBsaW5lTnVtYmVyKSB7IH0K
LX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JD
aHVua2VkUGFuZWwgPSBmdW5jdGlvbih0ZXh0TW9kZWwpCi17Ci0gICAgdGhpcy5fdGV4dE1vZGVs
ID0gdGV4dE1vZGVsOwotCi0gICAgdGhpcy5fZGVmYXVsdENodW5rU2l6ZSA9IDUwOwotICAgIHRo
aXMuX3BhaW50Q29hbGVzY2luZ0xldmVsID0gMDsKLSAgICB0aGlzLl9kb21VcGRhdGVDb2FsZXNj
aW5nTGV2ZWwgPSAwOwotfQotCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5w
cm90b3R5cGUgPSB7Ci0gICAgZ2V0IHRleHRNb2RlbCgpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy5fdGV4dE1vZGVsOwotICAgIH0sCi0KLSAgICByZXZlYWxMaW5lOiBmdW5jdGlvbihsaW5l
TnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKGxpbmVOdW1iZXIgPj0gdGhpcy5fdGV4dE1vZGVs
LmxpbmVzQ291bnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGNodW5rID0g
dGhpcy5tYWtlTGluZUFDaHVuayhsaW5lTnVtYmVyKTsKLSAgICAgICAgY2h1bmsuZWxlbWVudC5z
Y3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7Ci0gICAgfSwKLQotICAgIGFkZERlY29yYXRpb246IGZ1
bmN0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRpb24pCi0gICAgewotICAgICAgICBpZiAobGluZU51
bWJlciA+PSB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLm1ha2VMaW5lQUNodW5rKGxpbmVOdW1iZXIpOwot
ICAgICAgICBjaHVuay5hZGREZWNvcmF0aW9uKGRlY29yYXRpb24pOwotICAgIH0sCi0KLSAgICBy
ZW1vdmVEZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0aW9uKQotICAgIHsK
LSAgICAgICAgaWYgKGxpbmVOdW1iZXIgPj0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGNodW5rID0gdGhpcy5jaHVua0Zvckxp
bmUobGluZU51bWJlcik7Ci0gICAgICAgIGNodW5rLnJlbW92ZURlY29yYXRpb24oZGVjb3JhdGlv
bik7Ci0gICAgfSwKLQotICAgIF9idWlsZENodW5rczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgdGhpcy5iZWdpbkRvbVVwZGF0ZXMoKTsKLQotICAgICAgICB0aGlzLl9jb250YWluZXIucmVt
b3ZlQ2hpbGRyZW4oKTsKLQotICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzID0gW107Ci0gICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQ7IGkgKz0gdGhp
cy5fZGVmYXVsdENodW5rU2l6ZSkgewotICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fY3Jl
YXRlTmV3Q2h1bmsoaSwgaSArIHRoaXMuX2RlZmF1bHRDaHVua1NpemUpOwotICAgICAgICAgICAg
dGhpcy5fdGV4dENodW5rcy5wdXNoKGNodW5rKTsKLSAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5l
ci5hcHBlbmRDaGlsZChjaHVuay5lbGVtZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMu
X3JlcGFpbnRBbGwoKTsKLQotICAgICAgICB0aGlzLmVuZERvbVVwZGF0ZXMoKTsKLSAgICB9LAot
Ci0gICAgbWFrZUxpbmVBQ2h1bms6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCi0gICAgewotICAgICAg
ICB2YXIgY2h1bmtOdW1iZXIgPSB0aGlzLl9jaHVua051bWJlckZvckxpbmUobGluZU51bWJlcik7
Ci0gICAgICAgIHZhciBvbGRDaHVuayA9IHRoaXMuX3RleHRDaHVua3NbY2h1bmtOdW1iZXJdOwot
Ci0gICAgICAgIGlmICghb2xkQ2h1bmspIHsKLSAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIk5v
IGNodW5rIGZvciBsaW5lIG51bWJlcjogIiArIGxpbmVOdW1iZXIpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG9sZENodW5rLmxpbmVzQ291bnQgPT09IDEp
Ci0gICAgICAgICAgICByZXR1cm4gb2xkQ2h1bms7Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuX3Nw
bGl0Q2h1bmtPbkFMaW5lKGxpbmVOdW1iZXIsIGNodW5rTnVtYmVyLCB0cnVlKTsKLSAgICB9LAot
Ci0gICAgX3NwbGl0Q2h1bmtPbkFMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjaHVua051bWJl
ciwgY3JlYXRlU3VmZml4Q2h1bmspCi0gICAgewotICAgICAgICB0aGlzLmJlZ2luRG9tVXBkYXRl
cygpOwotCi0gICAgICAgIHZhciBvbGRDaHVuayA9IHRoaXMuX3RleHRDaHVua3NbY2h1bmtOdW1i
ZXJdOwotICAgICAgICB2YXIgd2FzRXhwYW5kZWQgPSBvbGRDaHVuay5leHBhbmRlZDsKLSAgICAg
ICAgb2xkQ2h1bmsuZXhwYW5kZWQgPSBmYWxzZTsKLQotICAgICAgICB2YXIgaW5zZXJ0SW5kZXgg
PSBjaHVua051bWJlciArIDE7Ci0KLSAgICAgICAgLy8gUHJlZml4IGNodW5rLgotICAgICAgICBp
ZiAobGluZU51bWJlciA+IG9sZENodW5rLnN0YXJ0TGluZSkgewotICAgICAgICAgICAgdmFyIHBy
ZWZpeENodW5rID0gdGhpcy5fY3JlYXRlTmV3Q2h1bmsob2xkQ2h1bmsuc3RhcnRMaW5lLCBsaW5l
TnVtYmVyKTsKLSAgICAgICAgICAgIHByZWZpeENodW5rLnJlYWRPbmx5ID0gb2xkQ2h1bmsucmVh
ZE9ubHk7Ci0gICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnNwbGljZShpbnNlcnRJbmRleCsr
LCAwLCBwcmVmaXhDaHVuayk7Ci0gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuaW5zZXJ0QmVm
b3JlKHByZWZpeENodW5rLmVsZW1lbnQsIG9sZENodW5rLmVsZW1lbnQpOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gTGluZSBjaHVuay4KLSAgICAgICAgdmFyIGVuZExpbmUgPSBjcmVhdGVTdWZm
aXhDaHVuayA/IGxpbmVOdW1iZXIgKyAxIDogb2xkQ2h1bmsuc3RhcnRMaW5lICsgb2xkQ2h1bmsu
bGluZXNDb3VudDsKLSAgICAgICAgdmFyIGxpbmVDaHVuayA9IHRoaXMuX2NyZWF0ZU5ld0NodW5r
KGxpbmVOdW1iZXIsIGVuZExpbmUpOwotICAgICAgICBsaW5lQ2h1bmsucmVhZE9ubHkgPSBvbGRD
aHVuay5yZWFkT25seTsKLSAgICAgICAgdGhpcy5fdGV4dENodW5rcy5zcGxpY2UoaW5zZXJ0SW5k
ZXgrKywgMCwgbGluZUNodW5rKTsKLSAgICAgICAgdGhpcy5fY29udGFpbmVyLmluc2VydEJlZm9y
ZShsaW5lQ2h1bmsuZWxlbWVudCwgb2xkQ2h1bmsuZWxlbWVudCk7Ci0KLSAgICAgICAgLy8gU3Vm
Zml4IGNodW5rLgotICAgICAgICBpZiAob2xkQ2h1bmsuc3RhcnRMaW5lICsgb2xkQ2h1bmsubGlu
ZXNDb3VudCA+IGVuZExpbmUpIHsKLSAgICAgICAgICAgIHZhciBzdWZmaXhDaHVuayA9IHRoaXMu
X2NyZWF0ZU5ld0NodW5rKGVuZExpbmUsIG9sZENodW5rLnN0YXJ0TGluZSArIG9sZENodW5rLmxp
bmVzQ291bnQpOwotICAgICAgICAgICAgc3VmZml4Q2h1bmsucmVhZE9ubHkgPSBvbGRDaHVuay5y
ZWFkT25seTsKLSAgICAgICAgICAgIHRoaXMuX3RleHRDaHVua3Muc3BsaWNlKGluc2VydEluZGV4
LCAwLCBzdWZmaXhDaHVuayk7Ci0gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuaW5zZXJ0QmVm
b3JlKHN1ZmZpeENodW5rLmVsZW1lbnQsIG9sZENodW5rLmVsZW1lbnQpOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gUmVtb3ZlIGVuY2xvc2luZyBjaHVuay4KLSAgICAgICAgdGhpcy5fdGV4dENo
dW5rcy5zcGxpY2UoY2h1bmtOdW1iZXIsIDEpOwotICAgICAgICB0aGlzLl9jb250YWluZXIucmVt
b3ZlQ2hpbGQob2xkQ2h1bmsuZWxlbWVudCk7Ci0KLSAgICAgICAgaWYgKHdhc0V4cGFuZGVkKSB7
Ci0gICAgICAgICAgICBpZiAocHJlZml4Q2h1bmspCi0gICAgICAgICAgICAgICAgcHJlZml4Q2h1
bmsuZXhwYW5kZWQgPSB0cnVlOwotICAgICAgICAgICAgbGluZUNodW5rLmV4cGFuZGVkID0gdHJ1
ZTsKLSAgICAgICAgICAgIGlmIChzdWZmaXhDaHVuaykKLSAgICAgICAgICAgICAgICBzdWZmaXhD
aHVuay5leHBhbmRlZCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLmVuZERvbVVw
ZGF0ZXMoKTsKLQotICAgICAgICByZXR1cm4gbGluZUNodW5rOwotICAgIH0sCi0KLSAgICBfc2Ny
b2xsOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogUmVwbGFjZSB0aGUgIjIi
IHdpdGggdGhlIHBhZGRpbmctbGVmdCB2YWx1ZSBmcm9tIENTUy4KLSAgICAgICAgaWYgKHRoaXMu
ZWxlbWVudC5zY3JvbGxMZWZ0IDw9IDIpCi0gICAgICAgICAgICB0aGlzLmVsZW1lbnQuc2Nyb2xs
TGVmdCA9IDA7Ci0KLSAgICAgICAgdGhpcy5fc2NoZWR1bGVSZXBhaW50QWxsKCk7Ci0gICAgICAg
IGlmICh0aGlzLl9zeW5jU2Nyb2xsTGlzdGVuZXIpCi0gICAgICAgICAgICB0aGlzLl9zeW5jU2Ny
b2xsTGlzdGVuZXIoKTsKLSAgICB9LAotCi0gICAgX3NjaGVkdWxlUmVwYWludEFsbDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3JlcGFpbnRBbGxUaW1lcikKLSAgICAgICAg
ICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXBhaW50QWxsVGltZXIpOwotICAgICAgICB0aGlzLl9y
ZXBhaW50QWxsVGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuX3JlcGFpbnRBbGwuYmluZCh0aGlzKSwg
NTApOwotICAgIH0sCi0KLSAgICBiZWdpblVwZGF0ZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsKys7Ci0gICAgfSwKLQotICAgIGVuZFVwZGF0
ZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVs
LS07Ci0gICAgICAgIGlmICghdGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwpCi0gICAgICAgICAg
ICB0aGlzLl9yZXBhaW50QWxsKCk7Ci0gICAgfSwKLQotICAgIGJlZ2luRG9tVXBkYXRlczogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fZG9tVXBkYXRlQ29hbGVzY2luZ0xldmVsKys7
Ci0gICAgfSwKLQotICAgIGVuZERvbVVwZGF0ZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuX2RvbVVwZGF0ZUNvYWxlc2NpbmdMZXZlbC0tOwotICAgIH0sCi0KLSAgICBfY2h1bmtO
dW1iZXJGb3JMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgZnVuY3Rp
b24gY29tcGFyZUxpbmVOdW1iZXJzKHZhbHVlLCBjaHVuaykKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlIDwgY2h1bmsuc3RhcnRMaW5lID8gLTEgOiAxOwotICAgICAgICB9Ci0g
ICAgICAgIHZhciBpbnNlcnRCZWZvcmUgPSBpbnNlcnRpb25JbmRleEZvck9iamVjdEluTGlzdFNv
cnRlZEJ5RnVuY3Rpb24obGluZU51bWJlciwgdGhpcy5fdGV4dENodW5rcywgY29tcGFyZUxpbmVO
dW1iZXJzKTsKLSAgICAgICAgcmV0dXJuIGluc2VydEJlZm9yZSAtIDE7Ci0gICAgfSwKLQotICAg
IGNodW5rRm9yTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLl90ZXh0Q2h1bmtzW3RoaXMuX2NodW5rTnVtYmVyRm9yTGluZShsaW5lTnVtYmVyKV07
Ci0gICAgfSwKLQotICAgIF9maW5kRmlyc3RWaXNpYmxlQ2h1bmtOdW1iZXI6IGZ1bmN0aW9uKHZp
c2libGVGcm9tKQotICAgIHsKLSAgICAgICAgZnVuY3Rpb24gY29tcGFyZU9mZnNldFRvcHModmFs
dWUsIGNodW5rKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUgPCBjaHVuay5v
ZmZzZXRUb3AgPyAtMSA6IDE7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGluc2VydEJlZm9yZSA9
IGluc2VydGlvbkluZGV4Rm9yT2JqZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlvbih2aXNpYmxlRnJv
bSwgdGhpcy5fdGV4dENodW5rcywgY29tcGFyZU9mZnNldFRvcHMpOwotICAgICAgICByZXR1cm4g
aW5zZXJ0QmVmb3JlIC0gMTsKLSAgICB9LAotCi0gICAgX2ZpbmRWaXNpYmxlQ2h1bmtzOiBmdW5j
dGlvbih2aXNpYmxlRnJvbSwgdmlzaWJsZVRvKQotICAgIHsKLSAgICAgICAgdmFyIGZyb20gPSB0
aGlzLl9maW5kRmlyc3RWaXNpYmxlQ2h1bmtOdW1iZXIodmlzaWJsZUZyb20pOwotICAgICAgICBm
b3IgKHZhciB0byA9IGZyb20gKyAxOyB0byA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyArK3Rv
KSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5fdGV4dENodW5rc1t0b10ub2Zmc2V0VG9wID49IHZp
c2libGVUbykKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4geyBzdGFydDogZnJvbSwgZW5kOiB0byB9OwotICAgIH0sCi0KLSAgICBfZmluZEZpcnN0Vmlz
aWJsZUxpbmVOdW1iZXI6IGZ1bmN0aW9uKHZpc2libGVGcm9tKQotICAgIHsKLSAgICAgICAgdmFy
IGNodW5rID0gdGhpcy5fdGV4dENodW5rc1t0aGlzLl9maW5kRmlyc3RWaXNpYmxlQ2h1bmtOdW1i
ZXIodmlzaWJsZUZyb20pXTsKLSAgICAgICAgaWYgKCFjaHVuay5leHBhbmRlZCkKLSAgICAgICAg
ICAgIHJldHVybiBjaHVuay5zdGFydExpbmU7Ci0KLSAgICAgICAgdmFyIGxpbmVOdW1iZXJzID0g
W107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2h1bmsubGluZXNDb3VudDsgKytpKSB7
Ci0gICAgICAgICAgICBsaW5lTnVtYmVycy5wdXNoKGNodW5rLnN0YXJ0TGluZSArIGkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gY29tcGFyZUxpbmVSb3dPZmZzZXRUb3BzKHZhbHVl
LCBsaW5lTnVtYmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbGluZVJvdyA9IGNodW5r
LmdldEV4cGFuZGVkTGluZVJvdyhsaW5lTnVtYmVyKTsKLSAgICAgICAgICAgIHJldHVybiB2YWx1
ZSA8IGxpbmVSb3cub2Zmc2V0VG9wID8gLTEgOiAxOwotICAgICAgICB9Ci0gICAgICAgIHZhciBp
bnNlcnRCZWZvcmUgPSBpbnNlcnRpb25JbmRleEZvck9iamVjdEluTGlzdFNvcnRlZEJ5RnVuY3Rp
b24odmlzaWJsZUZyb20sIGxpbmVOdW1iZXJzLCBjb21wYXJlTGluZVJvd09mZnNldFRvcHMpOwot
ICAgICAgICByZXR1cm4gbGluZU51bWJlcnNbaW5zZXJ0QmVmb3JlIC0gMV07Ci0gICAgfSwKLQot
ICAgIF9yZXBhaW50QWxsOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBkZWxldGUgdGhpcy5f
cmVwYWludEFsbFRpbWVyOwotCi0gICAgICAgIGlmICh0aGlzLl9wYWludENvYWxlc2NpbmdMZXZl
bCB8fCB0aGlzLl9kaXJ0eUxpbmVzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZh
ciB2aXNpYmxlRnJvbSA9IHRoaXMuZWxlbWVudC5zY3JvbGxUb3A7Ci0gICAgICAgIHZhciB2aXNp
YmxlVG8gPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wICsgdGhpcy5lbGVtZW50LmNsaWVudEhlaWdo
dDsKLQotICAgICAgICBpZiAodmlzaWJsZVRvKSB7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0g
dGhpcy5fZmluZFZpc2libGVDaHVua3ModmlzaWJsZUZyb20sIHZpc2libGVUbyk7Ci0gICAgICAg
ICAgICB0aGlzLl9leHBhbmRDaHVua3MocmVzdWx0LnN0YXJ0LCByZXN1bHQuZW5kKTsKLSAgICAg
ICAgfQotICAgIH0sCi0KLSAgICBfZXhwYW5kQ2h1bmtzOiBmdW5jdGlvbihmcm9tSW5kZXgsIHRv
SW5kZXgpCi0gICAgewotICAgICAgICAvLyBGaXJzdCBjb2xsYXBzZSBjaHVua3MgdG8gY29sbGVj
dCB0aGUgRE9NIGVsZW1lbnRzIGludG8gYSBjYWNoZSB0byByZXVzZSB0aGVtIGxhdGVyLgotICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyb21JbmRleDsgKytpKQotICAgICAgICAgICAgdGhp
cy5fdGV4dENodW5rc1tpXS5leHBhbmRlZCA9IGZhbHNlOwotICAgICAgICBmb3IgKHZhciBpID0g
dG9JbmRleDsgaSA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0
aGlzLl90ZXh0Q2h1bmtzW2ldLmV4cGFuZGVkID0gZmFsc2U7Ci0gICAgICAgIGZvciAodmFyIGkg
PSBmcm9tSW5kZXg7IGkgPCB0b0luZGV4OyArK2kpCi0gICAgICAgICAgICB0aGlzLl90ZXh0Q2h1
bmtzW2ldLmV4cGFuZGVkID0gdHJ1ZTsKLSAgICB9LAotCi0gICAgX3RvdGFsSGVpZ2h0OiBmdW5j
dGlvbihmaXJzdEVsZW1lbnQsIGxhc3RFbGVtZW50KQotICAgIHsKLSAgICAgICAgbGFzdEVsZW1l
bnQgPSAobGFzdEVsZW1lbnQgfHwgZmlyc3RFbGVtZW50KS5uZXh0RWxlbWVudFNpYmxpbmc7Ci0g
ICAgICAgIGlmIChsYXN0RWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBsYXN0RWxlbWVudC5v
ZmZzZXRUb3AgLSBmaXJzdEVsZW1lbnQub2Zmc2V0VG9wOwotCi0gICAgICAgIHZhciBvZmZzZXRQ
YXJlbnQgPSBmaXJzdEVsZW1lbnQub2Zmc2V0UGFyZW50OwotICAgICAgICBpZiAob2Zmc2V0UGFy
ZW50ICYmIG9mZnNldFBhcmVudC5zY3JvbGxIZWlnaHQgPiBvZmZzZXRQYXJlbnQuY2xpZW50SGVp
Z2h0KQotICAgICAgICAgICAgcmV0dXJuIG9mZnNldFBhcmVudC5zY3JvbGxIZWlnaHQgLSBmaXJz
dEVsZW1lbnQub2Zmc2V0VG9wOwotCi0gICAgICAgIHZhciB0b3RhbCA9IDA7Ci0gICAgICAgIHdo
aWxlIChmaXJzdEVsZW1lbnQgJiYgZmlyc3RFbGVtZW50ICE9PSBsYXN0RWxlbWVudCkgewotICAg
ICAgICAgICAgdG90YWwgKz0gZmlyc3RFbGVtZW50Lm9mZnNldEhlaWdodDsKLSAgICAgICAgICAg
IGZpcnN0RWxlbWVudCA9IGZpcnN0RWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHRvdGFsOwotICAgIH0sCi0KLSAgICByZXNpemU6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3JlcGFpbnRBbGwoKTsKLSAgICB9Ci19Ci0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVu
a2VkUGFuZWx9Ci0gKi8KLVdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFuZWwgPSBmdW5j
dGlvbih0ZXh0TW9kZWwsIHN5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lciwgc3luY0xpbmVI
ZWlnaHRMaXN0ZW5lcikKLXsKLSAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5l
bC5jYWxsKHRoaXMsIHRleHRNb2RlbCk7Ci0KLSAgICB0aGlzLl9zeW5jRGVjb3JhdGlvbnNGb3JM
aW5lTGlzdGVuZXIgPSBzeW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXI7Ci0gICAgdGhpcy5f
c3luY0xpbmVIZWlnaHRMaXN0ZW5lciA9IHN5bmNMaW5lSGVpZ2h0TGlzdGVuZXI7Ci0KLSAgICB0
aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLmVs
ZW1lbnQuY2xhc3NOYW1lID0gInRleHQtZWRpdG9yLWxpbmVzIjsKLQotICAgIHRoaXMuX2NvbnRh
aW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuX2NvbnRhaW5l
ci5jbGFzc05hbWUgPSAiaW5uZXItY29udGFpbmVyIjsKLSAgICB0aGlzLmVsZW1lbnQuYXBwZW5k
Q2hpbGQodGhpcy5fY29udGFpbmVyKTsKLQotICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3Rl
bmVyKCJzY3JvbGwiLCB0aGlzLl9zY3JvbGwuYmluZCh0aGlzKSwgZmFsc2UpOwotCi0gICAgdGhp
cy5mcmVlQ2FjaGVkRWxlbWVudHMoKTsKLSAgICB0aGlzLl9idWlsZENodW5rcygpOwotICAgIHRo
aXMuX2RlY29yYXRpb25zID0ge307Ci19Ci0KLVdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVy
UGFuZWwucHJvdG90eXBlID0gewotICAgIGZyZWVDYWNoZWRFbGVtZW50czogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fY2FjaGVkUm93cyA9IFtdOwotICAgIH0sCi0KLSAgICBfY3Jl
YXRlTmV3Q2h1bms6IGZ1bmN0aW9uKHN0YXJ0TGluZSwgZW5kTGluZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuayh0aGlzLCBzdGFy
dExpbmUsIGVuZExpbmUpOwotICAgIH0sCi0KLSAgICB0ZXh0Q2hhbmdlZDogZnVuY3Rpb24ob2xk
UmFuZ2UsIG5ld1JhbmdlKQotICAgIHsKLSAgICAgICAgdGhpcy5iZWdpbkRvbVVwZGF0ZXMoKTsK
LQotICAgICAgICB2YXIgbGluZXNEaWZmID0gbmV3UmFuZ2UubGluZXNDb3VudCAtIG9sZFJhbmdl
LmxpbmVzQ291bnQ7Ci0gICAgICAgIGlmIChsaW5lc0RpZmYpIHsKLSAgICAgICAgICAgIC8vIFJl
bW92ZSBvbGQgY2h1bmtzIChpZiBuZWVkZWQpLgotICAgICAgICAgICAgZm9yICh2YXIgY2h1bmtO
dW1iZXIgPSB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aCAtIDE7IGNodW5rTnVtYmVyID49IDAgOyAt
LWNodW5rTnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fdGV4dENo
dW5rc1tjaHVua051bWJlcl07Ci0gICAgICAgICAgICAgICAgaWYgKGNodW5rLnN0YXJ0TGluZSAr
IGNodW5rLmxpbmVzQ291bnQgPD0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpCi0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNodW5rLmV4cGFuZGVkID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLnJlbW92ZUNoaWxkKGNodW5rLmVs
ZW1lbnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rcy5sZW5n
dGggPSBjaHVua051bWJlciArIDE7Ci0KLSAgICAgICAgICAgIC8vIEFkZCBuZXcgY2h1bmtzIChp
ZiBuZWVkZWQpLgotICAgICAgICAgICAgdmFyIHRvdGFsTGluZXMgPSAwOwotICAgICAgICAgICAg
aWYgKHRoaXMuX3RleHRDaHVua3MubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGxhc3RD
aHVuayA9IHRoaXMuX3RleHRDaHVua3NbdGhpcy5fdGV4dENodW5rcy5sZW5ndGggLSAxXTsKLSAg
ICAgICAgICAgICAgICB0b3RhbExpbmVzID0gbGFzdENodW5rLnN0YXJ0TGluZSArIGxhc3RDaHVu
ay5saW5lc0NvdW50OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHZhciBpID0g
dG90YWxMaW5lczsgaSA8IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50OyBpICs9IHRoaXMuX2Rl
ZmF1bHRDaHVua1NpemUpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9jcmVh
dGVOZXdDaHVuayhpLCBpICsgdGhpcy5fZGVmYXVsdENodW5rU2l6ZSk7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5fdGV4dENodW5rcy5wdXNoKGNodW5rKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9j
b250YWluZXIuYXBwZW5kQ2hpbGQoY2h1bmsuZWxlbWVudCk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIC8vIFNoaWZ0IGRlY29yYXRpb25zIGlmIG5lY2Vzc2FyeQotICAgICAgICAgICAg
Zm9yICh2YXIgbGluZU51bWJlciBpbiB0aGlzLl9kZWNvcmF0aW9ucykgewotICAgICAgICAgICAg
ICAgIGxpbmVOdW1iZXIgPSBwYXJzZUludChsaW5lTnVtYmVyLCAxMCk7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBEbyBub3QgbW92ZSBkZWNvcmF0aW9ucyBiZWZvcmUgdGhlIHN0YXJ0IHBvc2l0aW9u
LgotICAgICAgICAgICAgICAgIGlmIChsaW5lTnVtYmVyIDwgb2xkUmFuZ2Uuc3RhcnRMaW5lKQot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAvLyBEZWNvcmF0
aW9ucyBmb2xsb3cgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBsaW5lLgotICAgICAgICAgICAgICAg
IGlmIChsaW5lTnVtYmVyID09PSBvbGRSYW5nZS5zdGFydExpbmUgJiYgb2xkUmFuZ2Uuc3RhcnRD
b2x1bW4pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAg
dmFyIGxpbmVEZWNvcmF0aW9uc0NvcHkgPSB0aGlzLl9kZWNvcmF0aW9uc1tsaW5lTnVtYmVyXS5z
bGljZSgpOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZURlY29yYXRp
b25zQ29weS5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgZGVjb3JhdGlv
biA9IGxpbmVEZWNvcmF0aW9uc0NvcHlbaV07Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMucmVt
b3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0aW9uKTsKLQotICAgICAgICAgICAgICAg
ICAgICAvLyBEbyBub3QgcmVzdG9yZSB0aGUgZGVjb3JhdGlvbnMgYmVmb3JlIHRoZSBlbmQgcG9z
aXRpb24uCi0gICAgICAgICAgICAgICAgICAgIGlmIChsaW5lTnVtYmVyIDwgb2xkUmFuZ2UuZW5k
TGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyICsgbGluZXNEaWZmLCBkZWNvcmF0
aW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRo
aXMuX3JlcGFpbnRBbGwoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIERlY29y
YXRpb25zIG1heSBoYXZlIGJlZW4gcmVtb3ZlZCwgc28gd2UgbWF5IGhhdmUgdG8gc3luYyB0aG9z
ZSBsaW5lcy4KLSAgICAgICAgICAgIHZhciBjaHVua051bWJlciA9IHRoaXMuX2NodW5rTnVtYmVy
Rm9yTGluZShuZXdSYW5nZS5zdGFydExpbmUpOwotICAgICAgICAgICAgdmFyIGNodW5rID0gdGhp
cy5fdGV4dENodW5rc1tjaHVua051bWJlcl07Ci0gICAgICAgICAgICB3aGlsZSAoY2h1bmsgJiYg
Y2h1bmsuc3RhcnRMaW5lIDw9IG5ld1JhbmdlLmVuZExpbmUpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoY2h1bmsubGluZXNDb3VudCA9PT0gMSkKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3lu
Y0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyKGNodW5rLnN0YXJ0TGluZSk7Ci0gICAgICAgICAg
ICAgICAgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzWysrY2h1bmtOdW1iZXJdOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5lbmREb21VcGRhdGVzKCk7Ci0gICAgfSwK
LQotICAgIHN5bmNDbGllbnRIZWlnaHQ6IGZ1bmN0aW9uKGNsaWVudEhlaWdodCkKLSAgICB7Ci0g
ICAgICAgIGlmICh0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0ID4gY2xpZW50SGVpZ2h0KQotICAg
ICAgICAgICAgdGhpcy5fY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KCJwYWRkaW5nLWJvdHRv
bSIsICh0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gY2xpZW50SGVpZ2h0KSArICJweCIpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuc3R5bGUucmVtb3ZlUHJv
cGVydHkoInBhZGRpbmctYm90dG9tIik7Ci0gICAgfSwKLQotICAgIGFkZERlY29yYXRpb246IGZ1
bmN0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRpb24pCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuYWRkRGVjb3JhdGlvbi5jYWxsKHRo
aXMsIGxpbmVOdW1iZXIsIGRlY29yYXRpb24pOwotICAgICAgICB2YXIgZGVjb3JhdGlvbnMgPSB0
aGlzLl9kZWNvcmF0aW9uc1tsaW5lTnVtYmVyXTsKLSAgICAgICAgaWYgKCFkZWNvcmF0aW9ucykg
ewotICAgICAgICAgICAgZGVjb3JhdGlvbnMgPSBbXTsKLSAgICAgICAgICAgIHRoaXMuX2RlY29y
YXRpb25zW2xpbmVOdW1iZXJdID0gZGVjb3JhdGlvbnM7Ci0gICAgICAgIH0KLSAgICAgICAgZGVj
b3JhdGlvbnMucHVzaChkZWNvcmF0aW9uKTsKLSAgICB9LAotCi0gICAgcmVtb3ZlRGVjb3JhdGlv
bjogZnVuY3Rpb24obGluZU51bWJlciwgZGVjb3JhdGlvbikKLSAgICB7Ci0gICAgICAgIFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5yZW1vdmVEZWNvcmF0aW9u
LmNhbGwodGhpcywgbGluZU51bWJlciwgZGVjb3JhdGlvbik7Ci0gICAgICAgIHZhciBkZWNvcmF0
aW9ucyA9IHRoaXMuX2RlY29yYXRpb25zW2xpbmVOdW1iZXJdOwotICAgICAgICBpZiAoZGVjb3Jh
dGlvbnMpIHsKLSAgICAgICAgICAgIGRlY29yYXRpb25zLnJlbW92ZShkZWNvcmF0aW9uKTsKLSAg
ICAgICAgICAgIGlmICghZGVjb3JhdGlvbnMubGVuZ3RoKQotICAgICAgICAgICAgICAgIGRlbGV0
ZSB0aGlzLl9kZWNvcmF0aW9uc1tsaW5lTnVtYmVyXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQot
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbC5wcm90b3R5cGUuX19wcm90b19fID0g
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlOwotCi0vKioKLSAq
IEBjb25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rID0g
ZnVuY3Rpb24odGV4dFZpZXdlciwgc3RhcnRMaW5lLCBlbmRMaW5lKQotewotICAgIHRoaXMuX3Rl
eHRWaWV3ZXIgPSB0ZXh0Vmlld2VyOwotICAgIHRoaXMuX3RleHRNb2RlbCA9IHRleHRWaWV3ZXIu
X3RleHRNb2RlbDsKLQotICAgIHRoaXMuc3RhcnRMaW5lID0gc3RhcnRMaW5lOwotICAgIGVuZExp
bmUgPSBNYXRoLm1pbih0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCwgZW5kTGluZSk7Ci0gICAg
dGhpcy5saW5lc0NvdW50ID0gZW5kTGluZSAtIHN0YXJ0TGluZTsKLQotICAgIHRoaXMuX2V4cGFu
ZGVkID0gZmFsc2U7Ci0KLSAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKLSAgICB0aGlzLmVsZW1lbnQubGluZU51bWJlciA9IHN0YXJ0TGluZTsKLSAgICB0
aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLW51bWJlciI7Ci0KLSAgICBpZiAo
dGhpcy5saW5lc0NvdW50ID09PSAxKSB7Ci0gICAgICAgIC8vIFNpbmdsZSBsaW5lIGNodW5rcyBh
cmUgdHlwaWNhbGx5IGNyZWF0ZWQgZm9yIGRlY29yYXRpb25zLiBIb3N0IGxpbmUgbnVtYmVyIGlu
Ci0gICAgICAgIC8vIHRoZSBzdWItZWxlbWVudCBpbiBvcmRlciB0byBhbGxvdyBmbGV4aWJsZSBi
b3JkZXIgLyBtYXJnaW4gbWFuYWdlbWVudC4KLSAgICAgICAgdmFyIGlubmVyU3BhbiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgaW5uZXJTcGFuLmNsYXNzTmFtZSA9
ICJ3ZWJraXQtbGluZS1udW1iZXItaW5uZXIiOwotICAgICAgICBpbm5lclNwYW4udGV4dENvbnRl
bnQgPSBzdGFydExpbmUgKyAxOwotICAgICAgICB2YXIgb3V0ZXJTcGFuID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIG91dGVyU3Bhbi5jbGFzc05hbWUgPSAid2Via2l0
LWxpbmUtbnVtYmVyLW91dGVyIjsKLSAgICAgICAgb3V0ZXJTcGFuLmFwcGVuZENoaWxkKGlubmVy
U3Bhbik7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChvdXRlclNwYW4pOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIHZhciBsaW5lTnVtYmVycyA9IFtdOwotICAgICAgICBmb3IgKHZh
ciBpID0gc3RhcnRMaW5lOyBpIDwgZW5kTGluZTsgKytpKQotICAgICAgICAgICAgbGluZU51bWJl
cnMucHVzaChpICsgMSk7Ci0gICAgICAgIHRoaXMuZWxlbWVudC50ZXh0Q29udGVudCA9IGxpbmVO
dW1iZXJzLmpvaW4oIlxuIik7Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1
dHRlckNodW5rLnByb3RvdHlwZSA9IHsKLSAgICBhZGREZWNvcmF0aW9uOiBmdW5jdGlvbihkZWNv
cmF0aW9uKQotICAgIHsKLSAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5iZWdpbkRvbVVwZGF0ZXMo
KTsKLSAgICAgICAgaWYgKHR5cGVvZiBkZWNvcmF0aW9uID09PSAic3RyaW5nIikKLSAgICAgICAg
ICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKGRlY29yYXRpb24pOwotICAgICAgICB0aGlz
Ll90ZXh0Vmlld2VyLmVuZERvbVVwZGF0ZXMoKTsKLSAgICB9LAotCi0gICAgcmVtb3ZlRGVjb3Jh
dGlvbjogZnVuY3Rpb24oZGVjb3JhdGlvbikKLSAgICB7Ci0gICAgICAgIHRoaXMuX3RleHRWaWV3
ZXIuYmVnaW5Eb21VcGRhdGVzKCk7Ci0gICAgICAgIGlmICh0eXBlb2YgZGVjb3JhdGlvbiA9PT0g
InN0cmluZyIpCi0gICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcyhkZWNv
cmF0aW9uKTsKLSAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5lbmREb21VcGRhdGVzKCk7Ci0gICAg
fSwKLQotICAgIGdldCBleHBhbmRlZCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZXhw
YW5kZWQ7Ci0gICAgfSwKLQotICAgIHNldCBleHBhbmRlZChleHBhbmRlZCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0aGlzLmxpbmVzQ291bnQgPT09IDEpCi0gICAgICAgICAgICB0aGlzLl90ZXh0Vmll
d2VyLl9zeW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIodGhpcy5zdGFydExpbmUpOwotCi0g
ICAgICAgIGlmICh0aGlzLl9leHBhbmRlZCA9PT0gZXhwYW5kZWQpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgdGhpcy5fZXhwYW5kZWQgPSBleHBhbmRlZDsKLQotICAgICAgICBpZiAo
dGhpcy5saW5lc0NvdW50ID09PSAxKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRo
aXMuX3RleHRWaWV3ZXIuYmVnaW5Eb21VcGRhdGVzKCk7Ci0KLSAgICAgICAgaWYgKGV4cGFuZGVk
KSB7Ci0gICAgICAgICAgICB0aGlzLl9leHBhbmRlZExpbmVSb3dzID0gW107Ci0gICAgICAgICAg
ICB2YXIgcGFyZW50RWxlbWVudCA9IHRoaXMuZWxlbWVudC5wYXJlbnRFbGVtZW50OwotICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhcnRMaW5lOyBpIDwgdGhpcy5zdGFydExpbmUgKyB0
aGlzLmxpbmVzQ291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhp
cy5fY3JlYXRlUm93KGkpOwotICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQuaW5zZXJ0QmVm
b3JlKGxpbmVSb3csIHRoaXMuZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZXhwYW5k
ZWRMaW5lUm93cy5wdXNoKGxpbmVSb3cpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGFy
ZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQpOwotICAgICAgICAgICAgdGhpcy5f
dGV4dFZpZXdlci5fc3luY0xpbmVIZWlnaHRMaXN0ZW5lcih0aGlzLl9leHBhbmRlZExpbmVSb3dz
WzBdKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHZhciBlbGVtZW50SW5zZXJ0ZWQg
PSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZXhwYW5kZWRM
aW5lUm93cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhp
cy5fZXhwYW5kZWRMaW5lUm93c1tpXTsKLSAgICAgICAgICAgICAgICB2YXIgcGFyZW50RWxlbWVu
dCA9IGxpbmVSb3cucGFyZW50RWxlbWVudDsKLSAgICAgICAgICAgICAgICBpZiAocGFyZW50RWxl
bWVudCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRJbnNlcnRlZCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbWVudEluc2VydGVkID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuZWxlbWVudCwgbGlu
ZVJvdyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcGFyZW50
RWxlbWVudC5yZW1vdmVDaGlsZChsaW5lUm93KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5fY2FjaGVkUm93cy5wdXNoKGxpbmVSb3cpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2V4cGFuZGVkTGluZVJvd3M7Ci0g
ICAgICAgIH0KLQotICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmVuZERvbVVwZGF0ZXMoKTsKLSAg
ICB9LAotCi0gICAgZ2V0IGhlaWdodCgpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX2V4cGFu
ZGVkTGluZVJvd3MpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dFZpZXdlci5fdG90YWxI
ZWlnaHQodGhpcy5lbGVtZW50KTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRWaWV3ZXIuX3Rv
dGFsSGVpZ2h0KHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbMF0sIHRoaXMuX2V4cGFuZGVkTGluZVJv
d3NbdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5sZW5ndGggLSAxXSk7Ci0gICAgfSwKLQotICAgIGdl
dCBvZmZzZXRUb3AoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICh0aGlzLl9leHBhbmRlZExpbmVS
b3dzICYmIHRoaXMuX2V4cGFuZGVkTGluZVJvd3MubGVuZ3RoKSA/IHRoaXMuX2V4cGFuZGVkTGlu
ZVJvd3NbMF0ub2Zmc2V0VG9wIDogdGhpcy5lbGVtZW50Lm9mZnNldFRvcDsKLSAgICB9LAotCi0g
ICAgX2NyZWF0ZVJvdzogZnVuY3Rpb24obGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIHZhciBs
aW5lUm93ID0gdGhpcy5fdGV4dFZpZXdlci5fY2FjaGVkUm93cy5wb3AoKSB8fCBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgbGluZVJvdy5saW5lTnVtYmVyID0gbGluZU51
bWJlcjsKLSAgICAgICAgbGluZVJvdy5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtbnVtYmVyIjsK
LSAgICAgICAgbGluZVJvdy50ZXh0Q29udGVudCA9IGxpbmVOdW1iZXIgKyAxOwotICAgICAgICBy
ZXR1cm4gbGluZVJvdzsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0
ZW5kcyB7V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWx9Ci0gKi8KLVdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsID0gZnVuY3Rpb24odGV4dE1vZGVsLCB1cmwsIHN5bmNT
Y3JvbGxMaXN0ZW5lciwgc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyLCBlbnRlclRleHRD
aGFuZ2VNb2RlLCBleGl0VGV4dENoYW5nZU1vZGUpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3JDaHVua2VkUGFuZWwuY2FsbCh0aGlzLCB0ZXh0TW9kZWwpOwotCi0gICAgdGhpcy5fc3lu
Y1Njcm9sbExpc3RlbmVyID0gc3luY1Njcm9sbExpc3RlbmVyOwotICAgIHRoaXMuX3N5bmNEZWNv
cmF0aW9uc0ZvckxpbmVMaXN0ZW5lciA9IHN5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lcjsK
LSAgICB0aGlzLl9lbnRlclRleHRDaGFuZ2VNb2RlID0gZW50ZXJUZXh0Q2hhbmdlTW9kZTsKLSAg
ICB0aGlzLl9leGl0VGV4dENoYW5nZU1vZGUgPSBleGl0VGV4dENoYW5nZU1vZGU7Ci0KLSAgICB0
aGlzLl91cmwgPSB1cmw7Ci0gICAgdGhpcy5faGlnaGxpZ2h0ZXIgPSBuZXcgV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JIaWdobGlnaHRlcih0ZXh0TW9kZWwsIHRoaXMuX2hpZ2hsaWdodERhdGFSZWFk
eS5iaW5kKHRoaXMpKTsKLSAgICB0aGlzLl9yZWFkT25seSA9IHRydWU7Ci0KLSAgICB0aGlzLmVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLmVsZW1lbnQu
Y2xhc3NOYW1lID0gInRleHQtZWRpdG9yLWNvbnRlbnRzIjsKLSAgICB0aGlzLmVsZW1lbnQudGFi
SW5kZXggPSAwOwotCi0gICAgdGhpcy5fY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZGl2Iik7Ci0gICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTmFtZSA9ICJpbm5lci1jb250YWlu
ZXIiOwotICAgIHRoaXMuX2NvbnRhaW5lci50YWJJbmRleCA9IDA7Ci0gICAgdGhpcy5lbGVtZW50
LmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lcik7Ci0KLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5fc2Nyb2xsLmJpbmQodGhpcyksIGZhbHNlKTsKLSAg
ICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCB0aGlzLl9oYW5kbGVFbGVt
ZW50Rm9jdXMuYmluZCh0aGlzKSwgZmFsc2UpOwotCi0gICAgLy8gSW4gV2ViS2l0IHRoZSBET01O
b2RlUmVtb3ZlZCBldmVudCBpcyBmaXJlZCBBRlRFUiB0aGUgbm9kZSBpcyByZW1vdmVkLCB0aHVz
IGl0IHNob3VsZCBiZQotICAgIC8vIGF0dGFjaGVkIHRvIGFsbCBET00gbm9kZXMgdGhhdCB3ZSB3
YW50IHRvIHRyYWNrLiBJbnN0ZWFkLCB3ZSBhdHRhY2ggdGhlIERPTU5vZGVSZW1vdmVkCi0gICAg
Ly8gbGlzdGVuZXJzIG9ubHkgb24gdGhlIGxpbmUgcm93cywgYW5kIHVzZSBET01TdWJ0cmVlTW9k
aWZpZWQgdG8gdHJhY2sgbm9kZSByZW1vdmFscyBpbnNpZGUKLSAgICAvLyB0aGUgbGluZSByb3dz
LiBGb3IgbW9yZSBpbmZvIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU1NjY2Ci0gICAgLy8KLSAgICAvLyBPUFRJTUlaQVRJT04uIEl0IGlzIHZlcnkgZXhwZW5z
aXZlIHRvIGxpc3RlbiB0byB0aGUgRE9NIG11dGF0aW9uIGV2ZW50cywgdGh1cyB3ZSByZW1vdmUg
dGhlCi0gICAgLy8gbGlzdGVuZXJzIHdoZW5ldmVyIHdlIGRvIGFueSBpbnRlcm5hbCBET00gbWFu
aXB1bGF0aW9ucyAoc3VjaCBhcyBleHBhbmQvY29sbGFwc2UgbGluZSByb3dzKQotICAgIC8vIGFu
ZCBzZXQgdGhlIGxpc3RlbmVycyBiYWNrIHdoZW4gd2UgYXJlIGZpbmlzaGVkLgotICAgIHRoaXMu
X2hhbmRsZURPTVVwZGF0ZXNDYWxsYmFjayA9IHRoaXMuX2hhbmRsZURPTVVwZGF0ZXMuYmluZCh0
aGlzKTsKLSAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ2hhcmFjdGVy
RGF0YU1vZGlmaWVkIiwgdGhpcy5faGFuZGxlRE9NVXBkYXRlc0NhbGxiYWNrLCBmYWxzZSk7Ci0g
ICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoIkRPTU5vZGVJbnNlcnRlZCIsIHRo
aXMuX2hhbmRsZURPTVVwZGF0ZXNDYWxsYmFjaywgZmFsc2UpOwotICAgIHRoaXMuX2NvbnRhaW5l
ci5hZGRFdmVudExpc3RlbmVyKCJET01TdWJ0cmVlTW9kaWZpZWQiLCB0aGlzLl9oYW5kbGVET01V
cGRhdGVzQ2FsbGJhY2ssIGZhbHNlKTsKLQotICAgIHRoaXMuZnJlZUNhY2hlZEVsZW1lbnRzKCk7
Ci0gICAgdGhpcy5fYnVpbGRDaHVua3MoKTsKLX0KLQotV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JN
YWluUGFuZWwucHJvdG90eXBlID0gewotICAgIHNldCBtaW1lVHlwZShtaW1lVHlwZSkKLSAgICB7
Ci0gICAgICAgIHRoaXMuX2hpZ2hsaWdodGVyLm1pbWVUeXBlID0gbWltZVR5cGU7Ci0gICAgfSwK
LQotICAgIHNldFJlYWRPbmx5OiBmdW5jdGlvbihyZWFkT25seSwgcmVxdWVzdEZvY3VzKQotICAg
IHsKLSAgICAgICAgaWYgKHRoaXMuX3JlYWRPbmx5ID09PSByZWFkT25seSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICB0aGlzLmJlZ2luRG9tVXBkYXRlcygpOwotICAgICAgICB0aGlz
Ll9yZWFkT25seSA9IHJlYWRPbmx5OwotICAgICAgICBpZiAodGhpcy5fcmVhZE9ubHkpCi0gICAg
ICAgICAgICB0aGlzLl9jb250YWluZXIucmVtb3ZlU3R5bGVDbGFzcygidGV4dC1lZGl0b3ItZWRp
dGFibGUiKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuYWRk
U3R5bGVDbGFzcygidGV4dC1lZGl0b3ItZWRpdGFibGUiKTsKLSAgICAgICAgICAgIGlmIChyZXF1
ZXN0Rm9jdXMpCi0gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0aW9uT25TdGFydEVk
aXRpbmcoKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLmVuZERvbVVwZGF0ZXMoKTsKLSAgICB9
LAotCi0gICAgcmVhZE9ubHk6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
Ll9yZWFkT25seTsKLSAgICB9LAotCi0gICAgX2hhbmRsZUVsZW1lbnRGb2N1czogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9yZWFkT25seSkKLSAgICAgICAgICAgIHRoaXMu
X2NvbnRhaW5lci5mb2N1cygpOwotICAgIH0sCi0KLSAgICBkZWZhdWx0Rm9jdXNlZEVsZW1lbnQ6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9yZWFkT25seSkKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzLmVsZW1lbnQ7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7
Ci0gICAgfSwKLQotICAgIF91cGRhdGVTZWxlY3Rpb25PblN0YXJ0RWRpdGluZzogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgLy8gZm9jdXMoKSBuZWVkcyB0byBnbyBmaXJzdCBmb3IgdGhlIGNh
c2Ugd2hlbiB0aGUgbGFzdCBzZWxlY3Rpb24gd2FzIGluc2lkZSB0aGUgZWRpdG9yIGFuZAotICAg
ICAgICAvLyB0aGUgIkVkaXQiIGJ1dHRvbiB3YXMgY2xpY2tlZC4gSW4gdGhpcyBjYXNlIHdlIGJh
aWwgYXQgdGhlIGNoZWNrIGJlbG93LCBidXQgdGhlCi0gICAgICAgIC8vIGVkaXRvciBkb2VzIG5v
dCByZWNlaXZlIHRoZSBmb2N1cywgdGh1cyAiRXNjIiBkb2VzIG5vdCBjYW5jZWwgZWRpdGluZyB1
bnRpbCBhdCBsZWFzdAotICAgICAgICAvLyBvbmUgY2hhbmdlIGhhcyBiZWVuIG1hZGUgdG8gdGhl
IGVkaXRvciBjb250ZW50cy4KLSAgICAgICAgdGhpcy5fY29udGFpbmVyLmZvY3VzKCk7Ci0gICAg
ICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmIChz
ZWxlY3Rpb24ucmFuZ2VDb3VudCkgewotICAgICAgICAgICAgdmFyIGNvbW1vbkFuY2VzdG9yQ29u
dGFpbmVyID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCkuY29tbW9uQW5jZXN0b3JDb250YWluZXI7
Ci0gICAgICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyLmlzU2VsZk9yQW5jZXN0b3IoY29tbW9u
QW5jZXN0b3JDb250YWluZXIpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKLSAgICAgICAgdmFyIHJhbmdl
ID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgcmFuZ2Uuc2V0U3RhcnQodGhpcy5f
Y29udGFpbmVyLCAwKTsKLSAgICAgICAgcmFuZ2Uuc2V0RW5kKHRoaXMuX2NvbnRhaW5lciwgMCk7
Ci0gICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7Ci0gICAgfSwKLQotICAgIHNldEVk
aXRhYmxlUmFuZ2U6IGZ1bmN0aW9uKHN0YXJ0TGluZSwgZW5kTGluZSkKLSAgICB7Ci0gICAgICAg
IHRoaXMuYmVnaW5Eb21VcGRhdGVzKCk7Ci0KLSAgICAgICAgdmFyIGZpcnN0Q2h1bmtOdW1iZXIg
PSB0aGlzLl9jaHVua051bWJlckZvckxpbmUoc3RhcnRMaW5lKTsKLSAgICAgICAgdmFyIGZpcnN0
Q2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2ZpcnN0Q2h1bmtOdW1iZXJdOwotICAgICAgICBpZiAo
Zmlyc3RDaHVuay5zdGFydExpbmUgIT09IHN0YXJ0TGluZSkgewotICAgICAgICAgICAgdGhpcy5f
c3BsaXRDaHVua09uQUxpbmUoc3RhcnRMaW5lLCBmaXJzdENodW5rTnVtYmVyKTsKLSAgICAgICAg
ICAgIGZpcnN0Q2h1bmtOdW1iZXIgKz0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBsYXN0
Q2h1bmtOdW1iZXIgPSB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsKLSAgICAgICAgaWYgKGVuZExp
bmUgIT09IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KSB7Ci0gICAgICAgICAgICBsYXN0Q2h1
bmtOdW1iZXIgPSB0aGlzLl9jaHVua051bWJlckZvckxpbmUoZW5kTGluZSk7Ci0gICAgICAgICAg
ICB2YXIgbGFzdENodW5rID0gdGhpcy5fdGV4dENodW5rc1tsYXN0Q2h1bmtOdW1iZXJdOwotICAg
ICAgICAgICAgaWYgKGxhc3RDaHVuayAmJiBsYXN0Q2h1bmsuc3RhcnRMaW5lICE9PSBlbmRMaW5l
KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3BsaXRDaHVua09uQUxpbmUoZW5kTGluZSwgbGFz
dENodW5rTnVtYmVyKTsKLSAgICAgICAgICAgICAgICBsYXN0Q2h1bmtOdW1iZXIgKz0gMTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodmFyIGNodW5rTnVtYmVyID0g
MDsgY2h1bmtOdW1iZXIgPCBmaXJzdENodW5rTnVtYmVyOyArK2NodW5rTnVtYmVyKQotICAgICAg
ICAgICAgdGhpcy5fdGV4dENodW5rc1tjaHVua051bWJlcl0ucmVhZE9ubHkgPSB0cnVlOwotICAg
ICAgICBmb3IgKHZhciBjaHVua051bWJlciA9IGZpcnN0Q2h1bmtOdW1iZXI7IGNodW5rTnVtYmVy
IDwgbGFzdENodW5rTnVtYmVyOyArK2NodW5rTnVtYmVyKQotICAgICAgICAgICAgdGhpcy5fdGV4
dENodW5rc1tjaHVua051bWJlcl0ucmVhZE9ubHkgPSBmYWxzZTsKLSAgICAgICAgZm9yICh2YXIg
Y2h1bmtOdW1iZXIgPSBsYXN0Q2h1bmtOdW1iZXI7IGNodW5rTnVtYmVyIDwgdGhpcy5fdGV4dENo
dW5rcy5sZW5ndGg7ICsrY2h1bmtOdW1iZXIpCi0gICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtz
W2NodW5rTnVtYmVyXS5yZWFkT25seSA9IHRydWU7Ci0KLSAgICAgICAgdGhpcy5lbmREb21VcGRh
dGVzKCk7Ci0gICAgfSwKLQotICAgIGNsZWFyRWRpdGFibGVSYW5nZTogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgZm9yICh2YXIgY2h1bmtOdW1iZXIgPSAwOyBjaHVua051bWJlciA8IHRoaXMu
X3RleHRDaHVua3MubGVuZ3RoOyArK2NodW5rTnVtYmVyKQotICAgICAgICAgICAgdGhpcy5fdGV4
dENodW5rc1tjaHVua051bWJlcl0ucmVhZE9ubHkgPSBmYWxzZTsKLSAgICB9LAotCi0gICAgbWFy
a0FuZFJldmVhbFJhbmdlOiBmdW5jdGlvbihyYW5nZSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9yYW5nZVRvTWFyaykgewotICAgICAgICAgICAgdmFyIG1hcmtlZExpbmUgPSB0aGlzLl9yYW5n
ZVRvTWFyay5zdGFydExpbmU7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fcmFuZ2VUb01hcms7
Ci0gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIG1hcmtlZCByZWdpb24gaW1tZWRpYXRlbHkuCi0g
ICAgICAgICAgICBpZiAoIXRoaXMuX2RpcnR5TGluZXMpIHsKLSAgICAgICAgICAgICAgICB0aGlz
LmJlZ2luRG9tVXBkYXRlcygpOwotICAgICAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuY2h1
bmtGb3JMaW5lKG1hcmtlZExpbmUpOwotICAgICAgICAgICAgICAgIHZhciB3YXNFeHBhbmRlZCA9
IGNodW5rLmV4cGFuZGVkOwotICAgICAgICAgICAgICAgIGNodW5rLmV4cGFuZGVkID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgY2h1bmsudXBkYXRlQ29sbGFwc2VkTGluZVJvdygpOwotICAgICAg
ICAgICAgICAgIGNodW5rLmV4cGFuZGVkID0gd2FzRXhwYW5kZWQ7Ci0gICAgICAgICAgICAgICAg
dGhpcy5lbmREb21VcGRhdGVzKCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICB0aGlzLl9wYWludExpbmVzKG1hcmtlZExpbmUsIG1hcmtlZExpbmUgKyAxKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChyYW5nZSkgewotICAgICAgICAgICAgdGhpcy5fcmFuZ2VUb01hcmsg
PSByYW5nZTsKLSAgICAgICAgICAgIHRoaXMucmV2ZWFsTGluZShyYW5nZS5zdGFydExpbmUpOwot
ICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5tYWtlTGluZUFDaHVuayhyYW5nZS5zdGFydExp
bmUpOwotICAgICAgICAgICAgdGhpcy5fcGFpbnRMaW5lKGNodW5rLmVsZW1lbnQpOwotICAgICAg
ICAgICAgaWYgKHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudCkKLSAgICAgICAgICAgICAgICB0aGlz
Ll9tYXJrZWRSYW5nZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpOwotICAgICAgICB9
Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9tYXJrZWRSYW5nZUVsZW1lbnQ7Ci0gICAgfSwKLQotICAg
IGhpZ2hsaWdodExpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCi0gICAgewotICAgICAgICB0aGlz
LmNsZWFyTGluZUhpZ2hsaWdodCgpOwotICAgICAgICB0aGlzLl9oaWdobGlnaHRlZExpbmUgPSBs
aW5lTnVtYmVyOwotICAgICAgICB0aGlzLnJldmVhbExpbmUobGluZU51bWJlcik7Ci0KLSAgICAg
ICAgaWYgKCF0aGlzLl9yZWFkT25seSkKLSAgICAgICAgICAgIHRoaXMuX3Jlc3RvcmVTZWxlY3Rp
b24obmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UobGluZU51bWJlciwgMCwgbGluZU51bWJlciwg
MCksIGZhbHNlKTsKLQotICAgICAgICB0aGlzLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndl
YmtpdC1oaWdobGlnaHRlZC1saW5lIik7Ci0gICAgfSwKLQotICAgIGNsZWFyTGluZUhpZ2hsaWdo
dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9oaWdobGlnaHRl
ZExpbmUgPT09ICJudW1iZXIiKSB7Ci0gICAgICAgICAgICB0aGlzLnJlbW92ZURlY29yYXRpb24o
dGhpcy5faGlnaGxpZ2h0ZWRMaW5lLCAid2Via2l0LWhpZ2hsaWdodGVkLWxpbmUiKTsKLSAgICAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9oaWdobGlnaHRlZExpbmU7Ci0gICAgICAgIH0KLSAgICB9LAot
Ci0gICAgZnJlZUNhY2hlZEVsZW1lbnRzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlz
Ll9jYWNoZWRTcGFucyA9IFtdOwotICAgICAgICB0aGlzLl9jYWNoZWRUZXh0Tm9kZXMgPSBbXTsK
LSAgICAgICAgdGhpcy5fY2FjaGVkUm93cyA9IFtdOwotICAgIH0sCi0KLSAgICBoYW5kbGVVbmRv
UmVkbzogZnVuY3Rpb24ocmVkbykKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9kaXJ0eUxpbmVz
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHRoaXMuYmVnaW5VcGRhdGVz
KCk7Ci0KLSAgICAgICAgZnVuY3Rpb24gYmVmb3JlKCkKLSAgICAgICAgewotICAgICAgICAgICAg
dGhpcy5fZW50ZXJUZXh0Q2hhbmdlTW9kZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rp
b24gYWZ0ZXIob2xkUmFuZ2UsIG5ld1JhbmdlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlz
Ll9leGl0VGV4dENoYW5nZU1vZGUob2xkUmFuZ2UsIG5ld1JhbmdlKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZhciByYW5nZSA9IHJlZG8gPyB0aGlzLl90ZXh0TW9kZWwucmVkbyhiZWZvcmUuYmlu
ZCh0aGlzKSwgYWZ0ZXIuYmluZCh0aGlzKSkgOiB0aGlzLl90ZXh0TW9kZWwudW5kbyhiZWZvcmUu
YmluZCh0aGlzKSwgYWZ0ZXIuYmluZCh0aGlzKSk7Ci0KLSAgICAgICAgdGhpcy5lbmRVcGRhdGVz
KCk7Ci0KLSAgICAgICAgLy8gUmVzdG9yZSBsb2NhdGlvbiBwb3N0LXJlcGFpbnQuCi0gICAgICAg
IGlmIChyYW5nZSkKLSAgICAgICAgICAgIHRoaXMuX3Jlc3RvcmVTZWxlY3Rpb24ocmFuZ2UsIHRy
dWUpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICBoYW5kbGVUYWJLZXlQ
cmVzczogZnVuY3Rpb24oc2hpZnRLZXkpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fZGlydHlM
aW5lcykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB2YXIgc2VsZWN0aW9u
ID0gdGhpcy5fZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmICghc2VsZWN0aW9uKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHZhciByYW5nZSA9IHNlbGVjdGlvbi5ub3Jt
YWxpemUoKTsKLQotICAgICAgICB0aGlzLmJlZ2luVXBkYXRlcygpOwotICAgICAgICB0aGlzLl9l
bnRlclRleHRDaGFuZ2VNb2RlKCk7Ci0KLSAgICAgICAgdmFyIG5ld1JhbmdlOwotICAgICAgICB2
YXIgcmFuZ2VXYXNFbXB0eSA9IHJhbmdlLmlzRW1wdHkoKTsKLSAgICAgICAgaWYgKHNoaWZ0S2V5
KQotICAgICAgICAgICAgbmV3UmFuZ2UgPSB0aGlzLl91bmluZGVudExpbmVzKHJhbmdlKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAocmFuZ2VXYXNFbXB0eSkKLSAgICAgICAgICAg
ICAgICBuZXdSYW5nZSA9IHRoaXMuX2VkaXRSYW5nZShyYW5nZSwgV2ViSW5zcGVjdG9yLnNldHRp
bmdzLnRleHRFZGl0b3JJbmRlbnQuZ2V0KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIG5ld1JhbmdlID0gdGhpcy5faW5kZW50TGluZXMocmFuZ2UpOwotICAgICAgICB9Ci0K
LSAgICAgICAgdGhpcy5fZXhpdFRleHRDaGFuZ2VNb2RlKHJhbmdlLCBuZXdSYW5nZSk7Ci0gICAg
ICAgIHRoaXMuZW5kVXBkYXRlcygpOwotICAgICAgICBpZiAocmFuZ2VXYXNFbXB0eSkKLSAgICAg
ICAgICAgIG5ld1JhbmdlLnN0YXJ0Q29sdW1uID0gbmV3UmFuZ2UuZW5kQ29sdW1uOwotICAgICAg
ICB0aGlzLl9yZXN0b3JlU2VsZWN0aW9uKG5ld1JhbmdlLCB0cnVlKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfSwKLQotICAgIF9pbmRlbnRMaW5lczogZnVuY3Rpb24ocmFuZ2UpCi0gICAg
ewotICAgICAgICB2YXIgaW5kZW50ID0gV2ViSW5zcGVjdG9yLnNldHRpbmdzLnRleHRFZGl0b3JJ
bmRlbnQuZ2V0KCk7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2xhc3RFZGl0ZWRSYW5nZSkKLSAgICAg
ICAgICAgIHRoaXMuX3RleHRNb2RlbC5tYXJrVW5kb2FibGVTdGF0ZSgpOwotCi0gICAgICAgIHZh
ciBuZXdSYW5nZSA9IHJhbmdlLmNsb25lKCk7Ci0KLSAgICAgICAgLy8gRG8gbm90IGNoYW5nZSBh
IHNlbGVjdGlvbiBzdGFydCBwb3NpdGlvbiB3aGVuIGl0IGlzIGF0IHRoZSBiZWdpbm5pbmcgb2Yg
YSBsaW5lCi0gICAgICAgIGlmIChyYW5nZS5zdGFydENvbHVtbikKLSAgICAgICAgICAgIG5ld1Jh
bmdlLnN0YXJ0Q29sdW1uICs9IGluZGVudC5sZW5ndGg7Ci0KLSAgICAgICAgdmFyIGluZGVudEVu
ZExpbmUgPSByYW5nZS5lbmRMaW5lOwotICAgICAgICBpZiAocmFuZ2UuZW5kQ29sdW1uKQotICAg
ICAgICAgICAgbmV3UmFuZ2UuZW5kQ29sdW1uICs9IGluZGVudC5sZW5ndGg7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGluZGVudEVuZExpbmUtLTsKLQotICAgICAgICBmb3IgKHZhciBsaW5l
TnVtYmVyID0gcmFuZ2Uuc3RhcnRMaW5lOyBsaW5lTnVtYmVyIDw9IGluZGVudEVuZExpbmU7IGxp
bmVOdW1iZXIrKykKLSAgICAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5lZGl0UmFuZ2UobmV3IFdl
Ykluc3BlY3Rvci5UZXh0UmFuZ2UobGluZU51bWJlciwgMCwgbGluZU51bWJlciwgMCksIGluZGVu
dCk7Ci0KLSAgICAgICAgdGhpcy5fbGFzdEVkaXRlZFJhbmdlID0gbmV3UmFuZ2U7Ci0KLSAgICAg
ICAgcmV0dXJuIG5ld1JhbmdlOwotICAgIH0sCi0KLSAgICBfdW5pbmRlbnRMaW5lczogZnVuY3Rp
b24ocmFuZ2UpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fbGFzdEVkaXRlZFJhbmdlKQotICAg
ICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLm1hcmtVbmRvYWJsZVN0YXRlKCk7Ci0KLSAgICAgICAg
dmFyIGluZGVudCA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy50ZXh0RWRpdG9ySW5kZW50LmdldCgp
OwotICAgICAgICB2YXIgaW5kZW50TGVuZ3RoID0gaW5kZW50ID09PSBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvck1vZGVsLkluZGVudC5UYWJDaGFyYWN0ZXIgPyA0IDogaW5kZW50Lmxlbmd0aDsKLSAg
ICAgICAgdmFyIGxpbmVJbmRlbnRSZWdleCA9IG5ldyBSZWdFeHAoIl4gezEsIiArIGluZGVudExl
bmd0aCArICJ9Iik7Ci0gICAgICAgIHZhciBuZXdSYW5nZSA9IHJhbmdlLmNsb25lKCk7Ci0KLSAg
ICAgICAgdmFyIGluZGVudEVuZExpbmUgPSByYW5nZS5lbmRMaW5lOwotICAgICAgICBpZiAoIXJh
bmdlLmVuZENvbHVtbikKLSAgICAgICAgICAgIGluZGVudEVuZExpbmUtLTsKLQotICAgICAgICBm
b3IgKHZhciBsaW5lTnVtYmVyID0gcmFuZ2Uuc3RhcnRMaW5lOyBsaW5lTnVtYmVyIDw9IGluZGVu
dEVuZExpbmU7IGxpbmVOdW1iZXIrKykgewotICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90
ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKTsKLSAgICAgICAgICAgIHZhciBmaXJzdENoYXJhY3Rl
ciA9IGxpbmUuY2hhckF0KDApOwotICAgICAgICAgICAgdmFyIGxpbmVJbmRlbnRMZW5ndGg7Ci0K
LSAgICAgICAgICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gIiAiKQotICAgICAgICAgICAgICAg
IGxpbmVJbmRlbnRMZW5ndGggPSBsaW5lLm1hdGNoKGxpbmVJbmRlbnRSZWdleClbMF0ubGVuZ3Ro
OwotICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09ICJcdCIpCi0gICAgICAg
ICAgICAgICAgbGluZUluZGVudExlbmd0aCA9IDE7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5lZGl0UmFu
Z2UobmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UobGluZU51bWJlciwgMCwgbGluZU51bWJlciwg
bGluZUluZGVudExlbmd0aCksICIiKTsKLQotICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPT09
IHJhbmdlLnN0YXJ0TGluZSkKLSAgICAgICAgICAgICAgICBuZXdSYW5nZS5zdGFydENvbHVtbiA9
IE1hdGgubWF4KDAsIG5ld1JhbmdlLnN0YXJ0Q29sdW1uIC0gbGluZUluZGVudExlbmd0aCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAobGluZUluZGVudExlbmd0aCkKLSAgICAgICAgICAgIG5l
d1JhbmdlLmVuZENvbHVtbiA9IE1hdGgubWF4KDAsIG5ld1JhbmdlLmVuZENvbHVtbiAtIGxpbmVJ
bmRlbnRMZW5ndGgpOwotCi0gICAgICAgIHRoaXMuX2xhc3RFZGl0ZWRSYW5nZSA9IG5ld1Jhbmdl
OwotCi0gICAgICAgIHJldHVybiBuZXdSYW5nZTsKLSAgICB9LAotCi0gICAgaGFuZGxlRW50ZXJL
ZXk6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9kaXJ0eUxpbmVzKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHZhciByYW5nZSA9IHRoaXMuX2dldFNl
bGVjdGlvbigpOwotICAgICAgICBpZiAoIXJhbmdlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIHJhbmdlID0gcmFuZ2Uubm9ybWFsaXplKCk7Ci0KLSAgICAgICAgaWYgKHJh
bmdlLmVuZENvbHVtbiA9PT0gMCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICB2YXIgbGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lKHJhbmdlLnN0YXJ0TGluZSk7Ci0gICAg
ICAgIHZhciBsaW5lUHJlZml4ID0gbGluZS5zdWJzdHJpbmcoMCwgcmFuZ2Uuc3RhcnRDb2x1bW4p
OwotICAgICAgICB2YXIgaW5kZW50TWF0Y2ggPSBsaW5lUHJlZml4Lm1hdGNoKC9eXHMrLyk7Ci0g
ICAgICAgIHZhciBjdXJyZW50SW5kZW50ID0gaW5kZW50TWF0Y2ggPyBpbmRlbnRNYXRjaFswXSA6
ICIiOwotCi0gICAgICAgIHZhciB0ZXh0RWRpdG9ySW5kZW50ID0gV2ViSW5zcGVjdG9yLnNldHRp
bmdzLnRleHRFZGl0b3JJbmRlbnQuZ2V0KCk7Ci0gICAgICAgIHZhciBpbmRlbnQgPSBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1vZGVsLmVuZHNXaXRoQnJhY2tldFJlZ2V4LnRlc3QobGluZVByZWZp
eCkgPyBjdXJyZW50SW5kZW50ICsgdGV4dEVkaXRvckluZGVudCA6IGN1cnJlbnRJbmRlbnQ7Ci0K
LSAgICAgICAgaWYgKCFpbmRlbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgdGhpcy5iZWdpblVwZGF0ZXMoKTsKLSAgICAgICAgdGhpcy5fZW50ZXJUZXh0Q2hhbmdlTW9k
ZSgpOwotCi0gICAgICAgIHZhciBsaW5lQnJlYWsgPSB0aGlzLl90ZXh0TW9kZWwubGluZUJyZWFr
OwotICAgICAgICB2YXIgbmV3UmFuZ2U7Ci0gICAgICAgIGlmIChyYW5nZS5pc0VtcHR5KCkgJiYg
bGluZS5zdWJzdHIocmFuZ2UuZW5kQ29sdW1uIC0gMSwgMikgPT09ICd7fScpIHsKLSAgICAgICAg
ICAgIC8vIHt8fQotICAgICAgICAgICAgLy8gYmVjb21lcwotICAgICAgICAgICAgLy8gewotICAg
ICAgICAgICAgLy8gICAgIHwKLSAgICAgICAgICAgIC8vIH0KLSAgICAgICAgICAgIG5ld1Jhbmdl
ID0gdGhpcy5fZWRpdFJhbmdlKHJhbmdlLCBsaW5lQnJlYWsgKyBpbmRlbnQgKyBsaW5lQnJlYWsg
KyBjdXJyZW50SW5kZW50KTsKLSAgICAgICAgICAgIG5ld1JhbmdlLmVuZExpbmUtLTsKLSAgICAg
ICAgICAgIG5ld1JhbmdlLmVuZENvbHVtbiArPSB0ZXh0RWRpdG9ySW5kZW50Lmxlbmd0aDsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuZXdSYW5nZSA9IHRoaXMuX2VkaXRSYW5nZShyYW5n
ZSwgbGluZUJyZWFrICsgaW5kZW50KTsKLQotICAgICAgICB0aGlzLl9leGl0VGV4dENoYW5nZU1v
ZGUocmFuZ2UsIG5ld1JhbmdlKTsKLSAgICAgICAgdGhpcy5lbmRVcGRhdGVzKCk7Ci0gICAgICAg
IHRoaXMuX3Jlc3RvcmVTZWxlY3Rpb24obmV3UmFuZ2UuY29sbGFwc2VUb0VuZCgpLCB0cnVlKTsK
LQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgX3NwbGl0Q2h1bmtPbkFMaW5l
OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjaHVua051bWJlciwgY3JlYXRlU3VmZml4Q2h1bmspCi0g
ICAgewotICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5fZ2V0U2VsZWN0aW9uKCk7Ci0gICAg
ICAgIHZhciBjaHVuayA9IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3Rv
dHlwZS5fc3BsaXRDaHVua09uQUxpbmUuY2FsbCh0aGlzLCBsaW5lTnVtYmVyLCBjaHVua051bWJl
ciwgY3JlYXRlU3VmZml4Q2h1bmspOwotICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0aW9uKHNl
bGVjdGlvbik7Ci0gICAgICAgIHJldHVybiBjaHVuazsKLSAgICB9LAotCi0gICAgYmVnaW5Eb21V
cGRhdGVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ckNodW5rZWRQYW5lbC5wcm90b3R5cGUuYmVnaW5Eb21VcGRhdGVzLmNhbGwodGhpcyk7Ci0gICAg
ICAgIGlmICh0aGlzLl9kb21VcGRhdGVDb2FsZXNjaW5nTGV2ZWwgPT09IDEpIHsKLSAgICAgICAg
ICAgIHRoaXMuX2NvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCJET01DaGFyYWN0ZXJEYXRh
TW9kaWZpZWQiLCB0aGlzLl9oYW5kbGVET01VcGRhdGVzQ2FsbGJhY2ssIGZhbHNlKTsKLSAgICAg
ICAgICAgIHRoaXMuX2NvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Ob2RlSW5zZXJ0
ZWQiLCB0aGlzLl9oYW5kbGVET01VcGRhdGVzQ2FsbGJhY2ssIGZhbHNlKTsKLSAgICAgICAgICAg
IHRoaXMuX2NvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCJET01TdWJ0cmVlTW9kaWZpZWQi
LCB0aGlzLl9oYW5kbGVET01VcGRhdGVzQ2FsbGJhY2ssIGZhbHNlKTsKLSAgICAgICAgfQotICAg
IH0sCi0KLSAgICBlbmREb21VcGRhdGVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuZW5kRG9tVXBkYXRlcy5j
YWxsKHRoaXMpOwotICAgICAgICBpZiAodGhpcy5fZG9tVXBkYXRlQ29hbGVzY2luZ0xldmVsID09
PSAwKSB7Ci0gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiRE9N
Q2hhcmFjdGVyRGF0YU1vZGlmaWVkIiwgdGhpcy5faGFuZGxlRE9NVXBkYXRlc0NhbGxiYWNrLCBm
YWxzZSk7Ci0gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiRE9N
Tm9kZUluc2VydGVkIiwgdGhpcy5faGFuZGxlRE9NVXBkYXRlc0NhbGxiYWNrLCBmYWxzZSk7Ci0g
ICAgICAgICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiRE9NU3VidHJlZU1v
ZGlmaWVkIiwgdGhpcy5faGFuZGxlRE9NVXBkYXRlc0NhbGxiYWNrLCBmYWxzZSk7Ci0gICAgICAg
IH0KLSAgICB9LAotCi0gICAgX2VuYWJsZURPTU5vZGVSZW1vdmVkTGlzdGVuZXI6IGZ1bmN0aW9u
KGxpbmVSb3csIGVuYWJsZSkKLSAgICB7Ci0gICAgICAgIGlmIChlbmFibGUpCi0gICAgICAgICAg
ICBsaW5lUm93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTU5vZGVSZW1vdmVkIiwgdGhpcy5faGFuZGxl
RE9NVXBkYXRlc0NhbGxiYWNrLCBmYWxzZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxp
bmVSb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NTm9kZVJlbW92ZWQiLCB0aGlzLl9oYW5kbGVE
T01VcGRhdGVzQ2FsbGJhY2ssIGZhbHNlKTsKLSAgICB9LAotCi0gICAgX2J1aWxkQ2h1bmtzOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RleHRN
b2RlbC5saW5lc0NvdW50OyArK2kpCi0gICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwucmVtb3Zl
QXR0cmlidXRlKGksICJoaWdobGlnaHQiKTsKLQotICAgICAgICBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX2J1aWxkQ2h1bmtzLmNhbGwodGhpcyk7Ci0gICAg
fSwKLQotICAgIF9jcmVhdGVOZXdDaHVuazogZnVuY3Rpb24oc3RhcnRMaW5lLCBlbmRMaW5lKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVu
ayh0aGlzLCBzdGFydExpbmUsIGVuZExpbmUpOwotICAgIH0sCi0KLSAgICBfZXhwYW5kQ2h1bmtz
OiBmdW5jdGlvbihmcm9tSW5kZXgsIHRvSW5kZXgpCi0gICAgewotICAgICAgICB2YXIgbGFzdENo
dW5rID0gdGhpcy5fdGV4dENodW5rc1t0b0luZGV4IC0gMV07Ci0gICAgICAgIHZhciBsYXN0Vmlz
aWJsZUxpbmUgPSBsYXN0Q2h1bmsuc3RhcnRMaW5lICsgbGFzdENodW5rLmxpbmVzQ291bnQ7Ci0K
LSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlvbigpOwotCi0gICAgICAg
IHRoaXMuX211dGVIaWdobGlnaHRMaXN0ZW5lciA9IHRydWU7Ci0gICAgICAgIHRoaXMuX2hpZ2hs
aWdodGVyLmhpZ2hsaWdodChsYXN0VmlzaWJsZUxpbmUpOwotICAgICAgICBkZWxldGUgdGhpcy5f
bXV0ZUhpZ2hsaWdodExpc3RlbmVyOwotCi0gICAgICAgIHRoaXMuX3Jlc3RvcmVQYWludExpbmVz
T3BlcmF0aW9uc0NyZWRpdCgpOwotICAgICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5r
ZWRQYW5lbC5wcm90b3R5cGUuX2V4cGFuZENodW5rcy5jYWxsKHRoaXMsIGZyb21JbmRleCwgdG9J
bmRleCk7Ci0gICAgICAgIHRoaXMuX2FkanVzdFBhaW50TGluZXNPcGVyYXRpb25zUmVmcmVzaFZh
bHVlKCk7Ci0KLSAgICAgICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihzZWxlY3Rpb24pOwotICAg
IH0sCi0KLSAgICBfaGlnaGxpZ2h0RGF0YVJlYWR5OiBmdW5jdGlvbihmcm9tTGluZSwgdG9MaW5l
KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX211dGVIaWdobGlnaHRMaXN0ZW5lcikKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fcmVzdG9yZVBhaW50TGluZXNPcGVyYXRpb25z
Q3JlZGl0KCk7Ci0gICAgICAgIHRoaXMuX3BhaW50TGluZXMoZnJvbUxpbmUsIHRvTGluZSwgdHJ1
ZSAvKnJlc3RvcmVTZWxlY3Rpb24qLyk7Ci0gICAgfSwKLQotICAgIF9zY2hlZHVsZVBhaW50TGlu
ZXM6IGZ1bmN0aW9uKHN0YXJ0TGluZSwgZW5kTGluZSkKLSAgICB7Ci0gICAgICAgIGlmIChzdGFy
dExpbmUgPj0gZW5kTGluZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIXRo
aXMuX3NjaGVkdWxlZFBhaW50TGluZXMpIHsKLSAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlZFBh
aW50TGluZXMgPSBbIHsgc3RhcnRMaW5lOiBzdGFydExpbmUsIGVuZExpbmU6IGVuZExpbmUgfSBd
OwotICAgICAgICAgICAgdGhpcy5fcGFpbnRTY2hlZHVsZWRMaW5lc1RpbWVyID0gc2V0VGltZW91
dCh0aGlzLl9wYWludFNjaGVkdWxlZExpbmVzLmJpbmQodGhpcyksIDApOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zY2hlZHVsZWRQYWlu
dExpbmVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5f
c2NoZWR1bGVkUGFpbnRMaW5lc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAoY2h1bmsuc3RhcnRM
aW5lIDw9IGVuZExpbmUgJiYgY2h1bmsuZW5kTGluZSA+PSBzdGFydExpbmUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2h1bmsuc3RhcnRMaW5lID0gTWF0aC5taW4oY2h1bmsuc3RhcnRMaW5lLCBz
dGFydExpbmUpOwotICAgICAgICAgICAgICAgICAgICBjaHVuay5lbmRMaW5lID0gTWF0aC5tYXgo
Y2h1bmsuZW5kTGluZSwgZW5kTGluZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNodW5rLnN0YXJ0TGluZSA+IGVu
ZExpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkUGFpbnRMaW5lcy5z
cGxpY2UoaSwgMCwgeyBzdGFydExpbmU6IHN0YXJ0TGluZSwgZW5kTGluZTogZW5kTGluZSB9KTsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlZFBhaW50TGluZXMucHVzaCh7IHN0YXJ0
TGluZTogc3RhcnRMaW5lLCBlbmRMaW5lOiBlbmRMaW5lIH0pOwotICAgICAgICB9Ci0gICAgfSwK
LQotICAgIF9wYWludFNjaGVkdWxlZExpbmVzOiBmdW5jdGlvbihza2lwUmVzdG9yZVNlbGVjdGlv
bikKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9wYWludFNjaGVkdWxlZExpbmVzVGltZXIpCi0g
ICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fcGFpbnRTY2hlZHVsZWRMaW5lc1RpbWVyKTsK
LSAgICAgICAgZGVsZXRlIHRoaXMuX3BhaW50U2NoZWR1bGVkTGluZXNUaW1lcjsKLQotICAgICAg
ICBpZiAoIXRoaXMuX3NjaGVkdWxlZFBhaW50TGluZXMpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgLy8gUmVzY2hlZHVsZSB0aGUgdGltZXIgaWYgd2UgY2FuIG5vdCBwYWludCB0aGUg
bGluZXMgeWV0LCBvciB0aGUgdXNlciBpcyBzY3JvbGxpbmcuCi0gICAgICAgIGlmICh0aGlzLl9k
aXJ0eUxpbmVzIHx8IHRoaXMuX3JlcGFpbnRBbGxUaW1lcikgewotICAgICAgICAgICAgdGhpcy5f
cGFpbnRTY2hlZHVsZWRMaW5lc1RpbWVyID0gc2V0VGltZW91dCh0aGlzLl9wYWludFNjaGVkdWxl
ZExpbmVzLmJpbmQodGhpcyksIDUwKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZhciBzY2hlZHVsZWRQYWludExpbmVzID0gdGhpcy5fc2NoZWR1bGVkUGFpbnRM
aW5lczsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3NjaGVkdWxlZFBhaW50TGluZXM7Ci0KLSAgICAg
ICAgdGhpcy5fcmVzdG9yZVBhaW50TGluZXNPcGVyYXRpb25zQ3JlZGl0KCk7Ci0gICAgICAgIHRo
aXMuX3BhaW50TGluZUNodW5rcyhzY2hlZHVsZWRQYWludExpbmVzLCAhc2tpcFJlc3RvcmVTZWxl
Y3Rpb24pOwotICAgICAgICB0aGlzLl9hZGp1c3RQYWludExpbmVzT3BlcmF0aW9uc1JlZnJlc2hW
YWx1ZSgpOwotICAgIH0sCi0KLSAgICBfcmVzdG9yZVBhaW50TGluZXNPcGVyYXRpb25zQ3JlZGl0
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3BhaW50TGluZXNPcGVyYXRp
b25zUmVmcmVzaFZhbHVlKQotICAgICAgICAgICAgdGhpcy5fcGFpbnRMaW5lc09wZXJhdGlvbnNS
ZWZyZXNoVmFsdWUgPSAyNTA7Ci0gICAgICAgIHRoaXMuX3BhaW50TGluZXNPcGVyYXRpb25zQ3Jl
ZGl0ID0gdGhpcy5fcGFpbnRMaW5lc09wZXJhdGlvbnNSZWZyZXNoVmFsdWU7Ci0gICAgICAgIHRo
aXMuX3BhaW50TGluZXNPcGVyYXRpb25zTGFzdFJlZnJlc2ggPSBEYXRlLm5vdygpOwotICAgIH0s
Ci0KLSAgICBfYWRqdXN0UGFpbnRMaW5lc09wZXJhdGlvbnNSZWZyZXNoVmFsdWU6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHZhciBvcGVyYXRpb25zRG9uZSA9IHRoaXMuX3BhaW50TGluZXNP
cGVyYXRpb25zUmVmcmVzaFZhbHVlIC0gdGhpcy5fcGFpbnRMaW5lc09wZXJhdGlvbnNDcmVkaXQ7
Ci0gICAgICAgIGlmIChvcGVyYXRpb25zRG9uZSA8PSAwKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB2YXIgdGltZVBhc3QgPSBEYXRlLm5vdygpIC0gdGhpcy5fcGFpbnRMaW5lc09wZXJh
dGlvbnNMYXN0UmVmcmVzaDsKLSAgICAgICAgaWYgKHRpbWVQYXN0IDw9IDApCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIC8vIE1ha2UgdGhlIHN5bmNocm9ub3VzIENQVSBjaHVuayBmb3Ig
cGFpbnRpbmcgdGhlIGxpbmVzIDUwIG1zZWMuCi0gICAgICAgIHZhciB2YWx1ZSA9IE1hdGguZmxv
b3Iob3BlcmF0aW9uc0RvbmUgLyB0aW1lUGFzdCAqIDUwKTsKLSAgICAgICAgdGhpcy5fcGFpbnRM
aW5lc09wZXJhdGlvbnNSZWZyZXNoVmFsdWUgPSBOdW1iZXIuY29uc3RyYWluKHZhbHVlLCAxNTAs
IDE1MDApOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSByZXN0
b3JlU2VsZWN0aW9uCi0gICAgICovCi0gICAgX3BhaW50TGluZXM6IGZ1bmN0aW9uKGZyb21MaW5l
LCB0b0xpbmUsIHJlc3RvcmVTZWxlY3Rpb24pCi0gICAgewotICAgICAgICB0aGlzLl9wYWludExp
bmVDaHVua3MoWyB7IHN0YXJ0TGluZTogZnJvbUxpbmUsIGVuZExpbmU6IHRvTGluZSB9IF0sIHJl
c3RvcmVTZWxlY3Rpb24pOwotICAgIH0sCi0KLSAgICBfcGFpbnRMaW5lQ2h1bmtzOiBmdW5jdGlv
bihsaW5lQ2h1bmtzLCByZXN0b3JlU2VsZWN0aW9uKQotICAgIHsKLSAgICAgICAgLy8gRmlyc3Qs
IHBhaW50IHZpc2libGUgbGluZXMsIHNvIHRoYXQgaW4gY2FzZSBvZiBsb25nIGxpbmVzIHdlIHNo
b3VsZCBzdGFydCBoaWdobGlnaHRpbmcKLSAgICAgICAgLy8gdGhlIHZpc2libGUgYXJlYSBpbW1l
ZGlhdGVseSwgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgbGluZXMgYWJvdmUgdGhlIHZpc2li
bGUgYXJlYS4KLSAgICAgICAgdmFyIHZpc2libGVGcm9tID0gdGhpcy5lbGVtZW50LnNjcm9sbFRv
cDsKLSAgICAgICAgdmFyIGZpcnN0VmlzaWJsZUxpbmVOdW1iZXIgPSB0aGlzLl9maW5kRmlyc3RW
aXNpYmxlTGluZU51bWJlcih2aXNpYmxlRnJvbSk7Ci0KLSAgICAgICAgdmFyIGNodW5rOwotICAg
ICAgICB2YXIgc2VsZWN0aW9uOwotICAgICAgICB2YXIgaW52aXNpYmxlTGluZVJvd3MgPSBbXTsK
LSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lQ2h1bmtzLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgICB2YXIgbGluZUNodW5rID0gbGluZUNodW5rc1tpXTsKLSAgICAgICAgICAgIGlm
ICh0aGlzLl9kaXJ0eUxpbmVzIHx8IHRoaXMuX3NjaGVkdWxlZFBhaW50TGluZXMpIHsKLSAgICAg
ICAgICAgICAgICB0aGlzLl9zY2hlZHVsZVBhaW50TGluZXMobGluZUNodW5rLnN0YXJ0TGluZSwg
bGluZUNodW5rLmVuZExpbmUpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZm9yICh2YXIgbGluZU51bWJlciA9IGxpbmVDaHVuay5zdGFydExp
bmU7IGxpbmVOdW1iZXIgPCBsaW5lQ2h1bmsuZW5kTGluZTsgKytsaW5lTnVtYmVyKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFjaHVuayB8fCBsaW5lTnVtYmVyIDwgY2h1bmsuc3RhcnRMaW5lIHx8
IGxpbmVOdW1iZXIgPj0gY2h1bmsuc3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3VudCkKLSAgICAg
ICAgICAgICAgICAgICAgY2h1bmsgPSB0aGlzLmNodW5rRm9yTGluZShsaW5lTnVtYmVyKTsKLSAg
ICAgICAgICAgICAgICB2YXIgbGluZVJvdyA9IGNodW5rLmdldEV4cGFuZGVkTGluZVJvdyhsaW5l
TnVtYmVyKTsKLSAgICAgICAgICAgICAgICBpZiAoIWxpbmVSb3cpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChsaW5lTnVtYmVyIDwgZmlyc3RWaXNp
YmxlTGluZU51bWJlcikgewotICAgICAgICAgICAgICAgICAgICBpbnZpc2libGVMaW5lUm93cy5w
dXNoKGxpbmVSb3cpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rpb24gJiYgIXNlbGVjdGlv
bikKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5fZ2V0U2VsZWN0aW9uKCk7
Ci0gICAgICAgICAgICAgICAgdGhpcy5fcGFpbnRMaW5lKGxpbmVSb3cpOwotICAgICAgICAgICAg
ICAgIGlmICh0aGlzLl9wYWludExpbmVzT3BlcmF0aW9uc0NyZWRpdCA8IDApIHsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVQYWludExpbmVzKGxpbmVOdW1iZXIgKyAxLCBsaW5l
Q2h1bmsuZW5kTGluZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgaW52aXNpYmxlTGluZVJvd3MubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChy
ZXN0b3JlU2VsZWN0aW9uICYmICFzZWxlY3Rpb24pCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9u
ID0gdGhpcy5fZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICAgICAgICB0aGlzLl9wYWludExpbmUoaW52
aXNpYmxlTGluZVJvd3NbaV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlc3RvcmVTZWxl
Y3Rpb24pCi0gICAgICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0g
ICAgfSwKLQotICAgIF9wYWludExpbmU6IGZ1bmN0aW9uKGxpbmVSb3cpCi0gICAgewotICAgICAg
ICB2YXIgbGluZU51bWJlciA9IGxpbmVSb3cubGluZU51bWJlcjsKLSAgICAgICAgaWYgKHRoaXMu
X2RpcnR5TGluZXMpIHsKLSAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlUGFpbnRMaW5lcyhsaW5l
TnVtYmVyLCBsaW5lTnVtYmVyICsgMSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICB0aGlzLmJlZ2luRG9tVXBkYXRlcygpOwotICAgICAgICB0cnkgewotICAgICAg
ICAgICAgaWYgKHRoaXMuX3NjaGVkdWxlZFBhaW50TGluZXMgfHwgdGhpcy5fcGFpbnRMaW5lc09w
ZXJhdGlvbnNDcmVkaXQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVQYWlu
dExpbmVzKGxpbmVOdW1iZXIsIGxpbmVOdW1iZXIgKyAxKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBoaWdobGlnaHQgPSB0aGlzLl90
ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGxpbmVOdW1iZXIsICJoaWdobGlnaHQiKTsKLSAgICAgICAg
ICAgIGlmICghaGlnaGxpZ2h0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAg
ICAgbGluZVJvdy5yZW1vdmVDaGlsZHJlbigpOwotICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlz
Ll90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKTsKLSAgICAgICAgICAgIGlmICghbGluZSkKLSAg
ICAgICAgICAgICAgICBsaW5lUm93LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImJyIikpOwotCi0gICAgICAgICAgICB2YXIgcGxhaW5UZXh0U3RhcnQgPSAtMTsKLSAgICAgICAg
ICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGluZS5sZW5ndGg7KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGogPiAxMDAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbGluZSBpcyB0b28g
bG9uZyAtIGRvIG5vdCB3YXN0ZSBjeWNsZXMgb24gbWluaWZpZWQganMgaGlnaGxpZ2h0aW5nLgot
ICAgICAgICAgICAgICAgICAgICBpZiAocGxhaW5UZXh0U3RhcnQgPT09IC0xKQotICAgICAgICAg
ICAgICAgICAgICAgICAgcGxhaW5UZXh0U3RhcnQgPSBqOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZSA9
IGhpZ2hsaWdodFtqXTsKLSAgICAgICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZSB8fCAhYXR0cmli
dXRlLnRva2VuVHlwZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAocGxhaW5UZXh0U3RhcnQg
PT09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0U3RhcnQgPSBqOwotICAg
ICAgICAgICAgICAgICAgICBqKys7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0ICE9PSAtMSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fYXBwZW5kVGV4dE5vZGUobGluZVJvdywgbGluZS5zdWJzdHJpbmcocGxh
aW5UZXh0U3RhcnQsIGopKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluVGV4dFN0YXJ0
ID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAtLXRoaXMuX3BhaW50TGluZXNPcGVyYXRp
b25zQ3JlZGl0OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHRo
aXMuX2FwcGVuZFNwYW4obGluZVJvdywgbGluZS5zdWJzdHJpbmcoaiwgaiArIGF0dHJpYnV0ZS5s
ZW5ndGgpLCBhdHRyaWJ1dGUudG9rZW5UeXBlKTsKLSAgICAgICAgICAgICAgICAgICAgaiArPSBh
dHRyaWJ1dGUubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAtLXRoaXMuX3BhaW50TGluZXNP
cGVyYXRpb25zQ3JlZGl0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChwbGFpblRleHRTdGFydCAhPT0gLTEpIHsKLSAgICAgICAgICAgICAgICB0aGlz
Ll9hcHBlbmRUZXh0Tm9kZShsaW5lUm93LCBsaW5lLnN1YnN0cmluZyhwbGFpblRleHRTdGFydCwg
bGluZS5sZW5ndGgpKTsKLSAgICAgICAgICAgICAgICAtLXRoaXMuX3BhaW50TGluZXNPcGVyYXRp
b25zQ3JlZGl0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGxpbmVSb3cuZGVjb3Jh
dGlvbnNFbGVtZW50KQotICAgICAgICAgICAgICAgIGxpbmVSb3cuYXBwZW5kQ2hpbGQobGluZVJv
dy5kZWNvcmF0aW9uc0VsZW1lbnQpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAg
aWYgKHRoaXMuX3JhbmdlVG9NYXJrICYmIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0TGluZSA9PT0g
bGluZU51bWJlcikKLSAgICAgICAgICAgICAgICB0aGlzLl9tYXJrZWRSYW5nZUVsZW1lbnQgPSBX
ZWJJbnNwZWN0b3IuaGlnaGxpZ2h0U2VhcmNoUmVzdWx0KGxpbmVSb3csIHRoaXMuX3JhbmdlVG9N
YXJrLnN0YXJ0Q29sdW1uLCB0aGlzLl9yYW5nZVRvTWFyay5lbmRDb2x1bW4gLSB0aGlzLl9yYW5n
ZVRvTWFyay5zdGFydENvbHVtbik7Ci0gICAgICAgICAgICB0aGlzLmVuZERvbVVwZGF0ZXMoKTsK
LSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfcmVsZWFzZUxpbmVzSGlnaGxpZ2h0OiBmdW5jdGlv
bihsaW5lUm93KQotICAgIHsKLSAgICAgICAgaWYgKCFsaW5lUm93KQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBpZiAoInNwYW5zIiBpbiBsaW5lUm93KSB7Ci0gICAgICAgICAgICB2YXIg
c3BhbnMgPSBsaW5lUm93LnNwYW5zOwotICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBz
cGFucy5sZW5ndGg7ICsraikKLSAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRTcGFucy5wdXNo
KHNwYW5zW2pdKTsKLSAgICAgICAgICAgIGRlbGV0ZSBsaW5lUm93LnNwYW5zOwotICAgICAgICB9
Ci0gICAgICAgIGlmICgidGV4dE5vZGVzIiBpbiBsaW5lUm93KSB7Ci0gICAgICAgICAgICB2YXIg
dGV4dE5vZGVzID0gbGluZVJvdy50ZXh0Tm9kZXM7Ci0gICAgICAgICAgICBmb3IgKHZhciBqID0g
MDsgaiA8IHRleHROb2Rlcy5sZW5ndGg7ICsraikKLSAgICAgICAgICAgICAgICB0aGlzLl9jYWNo
ZWRUZXh0Tm9kZXMucHVzaCh0ZXh0Tm9kZXNbal0pOwotICAgICAgICAgICAgZGVsZXRlIGxpbmVS
b3cudGV4dE5vZGVzOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2NhY2hlZFJvd3MucHVzaChs
aW5lUm93KTsKLSAgICB9LAotCi0gICAgX2dldFNlbGVjdGlvbjogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAgICAgICAg
aWYgKCFzZWxlY3Rpb24ucmFuZ2VDb3VudCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAg
ICAgICAvLyBTZWxlY3Rpb24gbWF5IGJlIG91dHNpZGUgb2YgdGhlIHZpZXdlci4KLSAgICAgICAg
aWYgKCF0aGlzLl9jb250YWluZXIuaXNBbmNlc3RvcihzZWxlY3Rpb24uYW5jaG9yTm9kZSkgfHwg
IXRoaXMuX2NvbnRhaW5lci5pc0FuY2VzdG9yKHNlbGVjdGlvbi5mb2N1c05vZGUpKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHZhciBzdGFydCA9IHRoaXMuX3NlbGVjdGlvblRv
UG9zaXRpb24oc2VsZWN0aW9uLmFuY2hvck5vZGUsIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQpOwot
ICAgICAgICB2YXIgZW5kID0gc2VsZWN0aW9uLmlzQ29sbGFwc2VkID8gc3RhcnQgOiB0aGlzLl9z
ZWxlY3Rpb25Ub1Bvc2l0aW9uKHNlbGVjdGlvbi5mb2N1c05vZGUsIHNlbGVjdGlvbi5mb2N1c09m
ZnNldCk7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShzdGFydC5s
aW5lLCBzdGFydC5jb2x1bW4sIGVuZC5saW5lLCBlbmQuY29sdW1uKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtib29sZWFuPX0gc2Nyb2xsSW50b1ZpZXcKLSAgICAgKi8KLSAg
ICBfcmVzdG9yZVNlbGVjdGlvbjogZnVuY3Rpb24ocmFuZ2UsIHNjcm9sbEludG9WaWV3KQotICAg
IHsKLSAgICAgICAgaWYgKCFyYW5nZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFy
IHN0YXJ0ID0gdGhpcy5fcG9zaXRpb25Ub1NlbGVjdGlvbihyYW5nZS5zdGFydExpbmUsIHJhbmdl
LnN0YXJ0Q29sdW1uKTsKLSAgICAgICAgdmFyIGVuZCA9IHJhbmdlLmlzRW1wdHkoKSA/IHN0YXJ0
IDogdGhpcy5fcG9zaXRpb25Ub1NlbGVjdGlvbihyYW5nZS5lbmRMaW5lLCByYW5nZS5lbmRDb2x1
bW4pOwotICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudChzdGFy
dC5jb250YWluZXIsIHN0YXJ0Lm9mZnNldCwgZW5kLmNvbnRhaW5lciwgZW5kLm9mZnNldCk7Ci0K
LSAgICAgICAgaWYgKHNjcm9sbEludG9WaWV3KSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBub2Rl
ID0gZW5kLmNvbnRhaW5lcjsgbm9kZTsgbm9kZSA9IG5vZGUucGFyZW50RWxlbWVudCkgewotICAg
ICAgICAgICAgICAgIGlmIChub2RlLnNjcm9sbEludG9WaWV3SWZOZWVkZWQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbm9kZS5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0sCi0KLSAgICBfc2V0Q2FyZXRMb2NhdGlvbjogZnVuY3Rpb24obGluZSwgY29sdW1u
LCBzY3JvbGxJbnRvVmlldykKLSAgICB7Ci0gICAgICAgIHZhciByYW5nZSA9IG5ldyBXZWJJbnNw
ZWN0b3IuVGV4dFJhbmdlKGxpbmUsIGNvbHVtbiwgbGluZSwgY29sdW1uKTsKLSAgICAgICAgdGhp
cy5fcmVzdG9yZVNlbGVjdGlvbihyYW5nZSwgc2Nyb2xsSW50b1ZpZXcpOwotICAgIH0sCi0KLSAg
ICBfc2VsZWN0aW9uVG9Qb3NpdGlvbjogZnVuY3Rpb24oY29udGFpbmVyLCBvZmZzZXQpCi0gICAg
ewotICAgICAgICBpZiAoY29udGFpbmVyID09PSB0aGlzLl9jb250YWluZXIgJiYgb2Zmc2V0ID09
PSAwKQotICAgICAgICAgICAgcmV0dXJuIHsgbGluZTogMCwgY29sdW1uOiAwIH07Ci0gICAgICAg
IGlmIChjb250YWluZXIgPT09IHRoaXMuX2NvbnRhaW5lciAmJiBvZmZzZXQgPT09IDEpCi0gICAg
ICAgICAgICByZXR1cm4geyBsaW5lOiB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCAtIDEsIGNv
bHVtbjogdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgodGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291
bnQgLSAxKSB9OwotCi0gICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fZW5jbG9zaW5nTGluZVJv
d09yU2VsZihjb250YWluZXIpOwotICAgICAgICB2YXIgbGluZU51bWJlciA9IGxpbmVSb3cubGlu
ZU51bWJlcjsKLSAgICAgICAgaWYgKGNvbnRhaW5lciA9PT0gbGluZVJvdyAmJiBvZmZzZXQgPT09
IDApCi0gICAgICAgICAgICByZXR1cm4geyBsaW5lOiBsaW5lTnVtYmVyLCBjb2x1bW46IDAgfTsK
LQotICAgICAgICAvLyBUaGlzIG1heSBiZSBjaHVuayBhbmQgY2h1bmtzIG1heSBjb250YWluIFxu
LgotICAgICAgICB2YXIgY29sdW1uID0gMDsKLSAgICAgICAgdmFyIG5vZGUgPSBsaW5lUm93Lm5v
ZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSA/IGxpbmVSb3cgOiBsaW5lUm93LnRyYXZlcnNlTmV4
dFRleHROb2RlKGxpbmVSb3cpOwotICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlICE9PSBjb250
YWluZXIpIHsKLSAgICAgICAgICAgIHZhciB0ZXh0ID0gbm9kZS50ZXh0Q29udGVudDsKLSAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7ICsraSkgewotICAgICAgICAg
ICAgICAgIGlmICh0ZXh0LmNoYXJBdChpKSA9PT0gIlxuIikgewotICAgICAgICAgICAgICAgICAg
ICBsaW5lTnVtYmVyKys7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IDA7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGNvbHVtbisrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0VGV4dE5vZGUobGluZVJv
dyk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobm9kZSA9PT0gY29udGFpbmVyICYmIG9mZnNl
dCkgewotICAgICAgICAgICAgdmFyIHRleHQgPSBub2RlLnRleHRDb250ZW50OwotICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvZmZzZXQ7ICsraSkgewotICAgICAgICAgICAgICAgIGlm
ICh0ZXh0LmNoYXJBdChpKSA9PT0gIlxuIikgewotICAgICAgICAgICAgICAgICAgICBsaW5lTnVt
YmVyKys7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IDA7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGNvbHVtbisrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB7IGxpbmU6IGxpbmVOdW1iZXIsIGNvbHVtbjogY29sdW1u
IH07Ci0gICAgfSwKLQotICAgIF9wb3NpdGlvblRvU2VsZWN0aW9uOiBmdW5jdGlvbihsaW5lLCBj
b2x1bW4pCi0gICAgewotICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLmNodW5rRm9yTGluZShsaW5l
KTsKLSAgICAgICAgLy8gT25lLWxpbmVkIGNvbGxhcHNlZCBjaHVua3MgbWF5IHN0aWxsIHN0YXkg
aGlnaGxpZ2h0ZWQuCi0gICAgICAgIHZhciBsaW5lUm93ID0gY2h1bmsubGluZXNDb3VudCA9PT0g
MSA/IGNodW5rLmVsZW1lbnQgOiBjaHVuay5nZXRFeHBhbmRlZExpbmVSb3cobGluZSk7Ci0gICAg
ICAgIGlmIChsaW5lUm93KQotICAgICAgICAgICAgdmFyIHJhbmdlQm91bmRhcnkgPSBsaW5lUm93
LnJhbmdlQm91bmRhcnlGb3JPZmZzZXQoY29sdW1uKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICB2YXIgb2Zmc2V0ID0gY29sdW1uOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IGNodW5r
LnN0YXJ0TGluZTsgaSA8IGxpbmU7ICsraSkKLSAgICAgICAgICAgICAgICBvZmZzZXQgKz0gdGhp
cy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgoaSkgKyAxOyAvLyBcbgotICAgICAgICAgICAgbGluZVJv
dyA9IGNodW5rLmVsZW1lbnQ7Ci0gICAgICAgICAgICBpZiAobGluZVJvdy5maXJzdENoaWxkKQot
ICAgICAgICAgICAgICAgIHZhciByYW5nZUJvdW5kYXJ5ID0geyBjb250YWluZXI6IGxpbmVSb3cu
Zmlyc3RDaGlsZCwgb2Zmc2V0OiBvZmZzZXQgfTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICB2YXIgcmFuZ2VCb3VuZGFyeSA9IHsgY29udGFpbmVyOiBsaW5lUm93LCBvZmZzZXQ6
IDAgfTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmFuZ2VCb3VuZGFyeTsKLSAgICB9LAot
Ci0gICAgX2VuY2xvc2luZ0xpbmVSb3dPclNlbGY6IGZ1bmN0aW9uKGVsZW1lbnQpCi0gICAgewot
ICAgICAgICB2YXIgbGluZVJvdyA9IGVsZW1lbnQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFz
cygid2Via2l0LWxpbmUtY29udGVudCIpOwotICAgICAgICBpZiAobGluZVJvdykKLSAgICAgICAg
ICAgIHJldHVybiBsaW5lUm93OwotCi0gICAgICAgIGZvciAobGluZVJvdyA9IGVsZW1lbnQ7IGxp
bmVSb3c7IGxpbmVSb3cgPSBsaW5lUm93LnBhcmVudEVsZW1lbnQpIHsKLSAgICAgICAgICAgIGlm
IChsaW5lUm93LnBhcmVudEVsZW1lbnQgPT09IHRoaXMuX2NvbnRhaW5lcikKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbGluZVJvdzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAg
ICB9LAotCi0gICAgX2FwcGVuZFNwYW46IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQsIGNsYXNz
TmFtZSkKLSAgICB7Ci0gICAgICAgIGlmIChjbGFzc05hbWUgPT09ICJodG1sLXJlc291cmNlLWxp
bmsiIHx8IGNsYXNzTmFtZSA9PT0gImh0bWwtZXh0ZXJuYWwtbGluayIpIHsKLSAgICAgICAgICAg
IGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlTGluayhjb250ZW50LCBjbGFzc05hbWUg
PT09ICJodG1sLWV4dGVybmFsLWxpbmsiKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICB2YXIgc3BhbiA9IHRoaXMuX2NhY2hlZFNwYW5zLnBvcCgpIHx8IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSAid2Vi
a2l0LSIgKyBjbGFzc05hbWU7Ci0gICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSBjb250ZW50Owot
ICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHNwYW4pOwotICAgICAgICBpZiAoISgic3BhbnMi
IGluIGVsZW1lbnQpKQotICAgICAgICAgICAgZWxlbWVudC5zcGFucyA9IFtdOwotICAgICAgICBl
bGVtZW50LnNwYW5zLnB1c2goc3Bhbik7Ci0gICAgfSwKLQotICAgIF9hcHBlbmRUZXh0Tm9kZTog
ZnVuY3Rpb24oZWxlbWVudCwgdGV4dCkKLSAgICB7Ci0gICAgICAgIHZhciB0ZXh0Tm9kZSA9IHRo
aXMuX2NhY2hlZFRleHROb2Rlcy5wb3AoKTsKLSAgICAgICAgaWYgKHRleHROb2RlKQotICAgICAg
ICAgICAgdGV4dE5vZGUubm9kZVZhbHVlID0gdGV4dDsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTsKLSAgICAgICAgZWxl
bWVudC5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7Ci0gICAgICAgIGlmICghKCJ0ZXh0Tm9kZXMiIGlu
IGVsZW1lbnQpKQotICAgICAgICAgICAgZWxlbWVudC50ZXh0Tm9kZXMgPSBbXTsKLSAgICAgICAg
ZWxlbWVudC50ZXh0Tm9kZXMucHVzaCh0ZXh0Tm9kZSk7Ci0gICAgfSwKLQotICAgIF9jcmVhdGVM
aW5rOiBmdW5jdGlvbihjb250ZW50LCBpc0V4dGVybmFsKQotICAgIHsKLSAgICAgICAgdmFyIHF1
b3RlID0gY29udGVudC5jaGFyQXQoMCk7Ci0gICAgICAgIGlmIChjb250ZW50Lmxlbmd0aCA+IDEg
JiYgKHF1b3RlID09PSAiXCIiIHx8ICAgcXVvdGUgPT09ICInIikpCi0gICAgICAgICAgICBjb250
ZW50ID0gY29udGVudC5zdWJzdHJpbmcoMSwgY29udGVudC5sZW5ndGggLSAxKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgcXVvdGUgPSBudWxsOwotCi0gICAgICAgIHZhciBhID0gV2ViSW5z
cGVjdG9yLmxpbmtpZnlVUkxBc05vZGUodGhpcy5fcmV3cml0ZUhyZWYoY29udGVudCksIGNvbnRl
bnQsIHVuZGVmaW5lZCwgaXNFeHRlcm5hbCk7Ci0gICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICBzcGFuLmNsYXNzTmFtZSA9ICJ3ZWJraXQt
aHRtbC1hdHRyaWJ1dGUtdmFsdWUiOwotICAgICAgICBpZiAocXVvdGUpCi0gICAgICAgICAgICBz
cGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHF1b3RlKSk7Ci0gICAgICAg
IHNwYW4uYXBwZW5kQ2hpbGQoYSk7Ci0gICAgICAgIGlmIChxdW90ZSkKLSAgICAgICAgICAgIHNw
YW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocXVvdGUpKTsKLSAgICAgICAg
cmV0dXJuIHNwYW47Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19
IGlzRXh0ZXJuYWwKLSAgICAgKi8KLSAgICBfcmV3cml0ZUhyZWY6IGZ1bmN0aW9uKGhyZWZWYWx1
ZSwgaXNFeHRlcm5hbCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fdXJsIHx8ICFocmVmVmFs
dWUgfHwgaHJlZlZhbHVlLmluZGV4T2YoIjovLyIpID4gMCkKLSAgICAgICAgICAgIHJldHVybiBo
cmVmVmFsdWU7Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuY29tcGxldGVVUkwodGhpcy5f
dXJsLCBocmVmVmFsdWUpOwotICAgIH0sCi0KLSAgICBfaGFuZGxlRE9NVXBkYXRlczogZnVuY3Rp
b24oZSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9kb21VcGRhdGVDb2FsZXNjaW5nTGV2ZWwp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0Owot
ICAgICAgICBpZiAodGFyZ2V0ID09PSB0aGlzLl9jb250YWluZXIpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl9lbmNsb3NpbmdMaW5lUm93T3JTZWxm
KHRhcmdldCk7Ci0gICAgICAgIGlmICghbGluZVJvdykKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBpZiAobGluZVJvdy5kZWNvcmF0aW9uc0VsZW1lbnQgJiYgbGluZVJvdy5kZWNvcmF0
aW9uc0VsZW1lbnQuaXNTZWxmT3JBbmNlc3Rvcih0YXJnZXQpKSB7Ci0gICAgICAgICAgICBpZiAo
dGhpcy5fc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyKQotICAgICAgICAgICAgICAgIHRo
aXMuX3N5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lcihsaW5lUm93LmxpbmVOdW1iZXIpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMuX3JlYWRP
bmx5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh0YXJnZXQgPT09IGxpbmVS
b3cgJiYgZS50eXBlID09PSAiRE9NTm9kZUluc2VydGVkIikgewotICAgICAgICAgICAgLy8gRW5z
dXJlIHRoYXQgdGhlIG5ld2x5IGluc2VydGVkIGxpbmUgcm93IGhhcyBubyBsaW5lTnVtYmVyLgot
ICAgICAgICAgICAgZGVsZXRlIGxpbmVSb3cubGluZU51bWJlcjsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZhciBzdGFydExpbmUgPSAwOwotICAgICAgICBmb3IgKHZhciByb3cgPSBsaW5lUm93OyBy
b3c7IHJvdyA9IHJvdy5wcmV2aW91c1NpYmxpbmcpIHsKLSAgICAgICAgICAgIGlmICh0eXBlb2Yg
cm93LmxpbmVOdW1iZXIgPT09ICJudW1iZXIiKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRMaW5l
ID0gcm93LmxpbmVOdW1iZXI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZW5kTGluZSA9IHN0YXJ0TGluZSArIDE7Ci0gICAg
ICAgIGZvciAodmFyIHJvdyA9IGxpbmVSb3cubmV4dFNpYmxpbmc7IHJvdzsgcm93ID0gcm93Lm5l
eHRTaWJsaW5nKSB7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIHJvdy5saW5lTnVtYmVyID09PSAi
bnVtYmVyIiAmJiByb3cubGluZU51bWJlciA+IHN0YXJ0TGluZSkgewotICAgICAgICAgICAgICAg
IGVuZExpbmUgPSByb3cubGluZU51bWJlcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0YXJnZXQgPT09IGxpbmVSb3cgJiYg
ZS50eXBlID09PSAiRE9NTm9kZVJlbW92ZWQiKSB7Ci0gICAgICAgICAgICAvLyBOb3cgdGhpcyB3
aWxsIG5vIGxvbmdlciBiZSB2YWxpZC4KLSAgICAgICAgICAgIGRlbGV0ZSBsaW5lUm93LmxpbmVO
dW1iZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcy5fZGlydHlMaW5lcykgewotICAg
ICAgICAgICAgdGhpcy5fZGlydHlMaW5lcy5zdGFydCA9IE1hdGgubWluKHRoaXMuX2RpcnR5TGlu
ZXMuc3RhcnQsIHN0YXJ0TGluZSk7Ci0gICAgICAgICAgICB0aGlzLl9kaXJ0eUxpbmVzLmVuZCA9
IE1hdGgubWF4KHRoaXMuX2RpcnR5TGluZXMuZW5kLCBlbmRMaW5lKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIHRoaXMuX2RpcnR5TGluZXMgPSB7IHN0YXJ0OiBzdGFydExpbmUsIGVu
ZDogZW5kTGluZSB9OwotICAgICAgICAgICAgc2V0VGltZW91dCh0aGlzLl9hcHBseURvbVVwZGF0
ZXMuYmluZCh0aGlzKSwgMCk7Ci0gICAgICAgICAgICAvLyBSZW1vdmUgbWFya2VkIHJhbmdlcywg
aWYgYW55LgotICAgICAgICAgICAgdGhpcy5tYXJrQW5kUmV2ZWFsUmFuZ2UobnVsbCk7Ci0gICAg
ICAgIH0KLSAgICB9LAotCi0gICAgX2FwcGx5RG9tVXBkYXRlczogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgaWYgKCF0aGlzLl9kaXJ0eUxpbmVzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIC8vIENoZWNrIGlmIHRoZSBlZGl0b3IgaGFkIGJlZW4gc2V0IHJlYWRPbmx5IGJ5IHRo
ZSBtb21lbnQgd2hlbiB0aGlzIGFzeW5jIGNhbGxiYWNrIGdvdCBleGVjdXRlZC4KLSAgICAgICAg
aWYgKHRoaXMuX3JlYWRPbmx5KSB7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fZGlydHlMaW5l
czsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBkaXJ0eUxp
bmVzID0gdGhpcy5fZGlydHlMaW5lczsKLQotICAgICAgICB2YXIgZmlyc3RDaHVua051bWJlciA9
IHRoaXMuX2NodW5rTnVtYmVyRm9yTGluZShkaXJ0eUxpbmVzLnN0YXJ0KTsKLSAgICAgICAgdmFy
IHN0YXJ0TGluZSA9IHRoaXMuX3RleHRDaHVua3NbZmlyc3RDaHVua051bWJlcl0uc3RhcnRMaW5l
OwotICAgICAgICB2YXIgZW5kTGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50OwotCi0g
ICAgICAgIC8vIENvbGxlY3QgbGluZXMuCi0gICAgICAgIHZhciBmaXJzdExpbmVSb3c7Ci0gICAg
ICAgIGlmIChmaXJzdENodW5rTnVtYmVyKSB7Ci0gICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlz
Ll90ZXh0Q2h1bmtzW2ZpcnN0Q2h1bmtOdW1iZXIgLSAxXTsKLSAgICAgICAgICAgIGZpcnN0TGlu
ZVJvdyA9IGNodW5rLmV4cGFuZGVkID8gY2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93KGNodW5rLnN0
YXJ0TGluZSArIGNodW5rLmxpbmVzQ291bnQgLSAxKSA6IGNodW5rLmVsZW1lbnQ7Ci0gICAgICAg
ICAgICBmaXJzdExpbmVSb3cgPSBmaXJzdExpbmVSb3cubmV4dFNpYmxpbmc7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgZmlyc3RMaW5lUm93ID0gdGhpcy5fY29udGFpbmVyLmZpcnN0Q2hp
bGQ7Ci0KLSAgICAgICAgdmFyIGxpbmVzID0gW107Ci0gICAgICAgIGZvciAodmFyIGxpbmVSb3cg
PSBmaXJzdExpbmVSb3c7IGxpbmVSb3c7IGxpbmVSb3cgPSBsaW5lUm93Lm5leHRTaWJsaW5nKSB7
Ci0gICAgICAgICAgICBpZiAodHlwZW9mIGxpbmVSb3cubGluZU51bWJlciA9PT0gIm51bWJlciIg
JiYgbGluZVJvdy5saW5lTnVtYmVyID49IGRpcnR5TGluZXMuZW5kKSB7Ci0gICAgICAgICAgICAg
ICAgZW5kTGluZSA9IGxpbmVSb3cubGluZU51bWJlcjsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFVwZGF0ZSB3aXRoIHRoZSBuZXdlc3QgbGlu
ZU51bWJlciwgc28gdGhhdCB0aGUgY2FsbCB0byB0aGUgX2dldFNlbGVjdGlvbiBtZXRob2QgYmVs
b3cgc2hvdWxkIHdvcmsuCi0gICAgICAgICAgICBsaW5lUm93LmxpbmVOdW1iZXIgPSBzdGFydExp
bmUgKyBsaW5lcy5sZW5ndGg7Ci0gICAgICAgICAgICB0aGlzLl9jb2xsZWN0TGluZXNGcm9tRGl2
KGxpbmVzLCBsaW5lUm93KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRyeSB0byBkZWNyZWFz
ZSB0aGUgcmFuZ2UgYmVpbmcgcmVwbGFjZWQsIGlmIHBvc3NpYmxlLgotICAgICAgICB2YXIgc3Rh
cnRPZmZzZXQgPSAwOwotICAgICAgICB3aGlsZSAoc3RhcnRMaW5lIDwgZGlydHlMaW5lcy5zdGFy
dCAmJiBzdGFydE9mZnNldCA8IGxpbmVzLmxlbmd0aCkgewotICAgICAgICAgICAgaWYgKHRoaXMu
X3RleHRNb2RlbC5saW5lKHN0YXJ0TGluZSkgIT09IGxpbmVzW3N0YXJ0T2Zmc2V0XSkKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICsrc3RhcnRPZmZzZXQ7Ci0gICAgICAgICAg
ICArK3N0YXJ0TGluZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBlbmRPZmZzZXQgPSBsaW5l
cy5sZW5ndGg7Ci0gICAgICAgIHdoaWxlIChlbmRMaW5lID4gZGlydHlMaW5lcy5lbmQgJiYgZW5k
T2Zmc2V0ID4gc3RhcnRPZmZzZXQpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0TW9kZWwu
bGluZShlbmRMaW5lIC0gMSkgIT09IGxpbmVzW2VuZE9mZnNldCAtIDFdKQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgLS1lbmRPZmZzZXQ7Ci0gICAgICAgICAgICAtLWVuZExp
bmU7Ci0gICAgICAgIH0KLQotICAgICAgICBsaW5lcyA9IGxpbmVzLnNsaWNlKHN0YXJ0T2Zmc2V0
LCBlbmRPZmZzZXQpOwotCi0gICAgICAgIC8vIFRyeSB0byBkZWNyZWFzZSB0aGUgcmFuZ2UgYmVp
bmcgcmVwbGFjZWQgYnkgY29sdW1uIG9mZnNldHMsIGlmIHBvc3NpYmxlLgotICAgICAgICB2YXIg
c3RhcnRDb2x1bW4gPSAwOwotICAgICAgICB2YXIgZW5kQ29sdW1uID0gdGhpcy5fdGV4dE1vZGVs
LmxpbmVMZW5ndGgoZW5kTGluZSAtIDEpOwotICAgICAgICBpZiAobGluZXMubGVuZ3RoID4gMCkg
ewotICAgICAgICAgICAgdmFyIGxpbmUxID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUoc3RhcnRMaW5l
KTsKLSAgICAgICAgICAgIHZhciBsaW5lMiA9IGxpbmVzWzBdOwotICAgICAgICAgICAgd2hpbGUg
KGxpbmUxW3N0YXJ0Q29sdW1uXSAmJiBsaW5lMVtzdGFydENvbHVtbl0gPT09IGxpbmUyW3N0YXJ0
Q29sdW1uXSkKLSAgICAgICAgICAgICAgICArK3N0YXJ0Q29sdW1uOwotICAgICAgICAgICAgbGlu
ZXNbMF0gPSBsaW5lMi5zdWJzdHJpbmcoc3RhcnRDb2x1bW4pOwotCi0gICAgICAgICAgICBsaW5l
MSA9IHRoaXMuX3RleHRNb2RlbC5saW5lKGVuZExpbmUgLSAxKTsKLSAgICAgICAgICAgIGxpbmUy
ID0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV07Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGVuZENvbHVtbiAmJiBpIDwgbGluZTIubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoc3RhcnRMaW5lID09PSBlbmRMaW5lIC0gMSAmJiBlbmRDb2x1bW4gLSBpIDw9IHN0YXJ0
Q29sdW1uKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAo
bGluZTFbZW5kQ29sdW1uIC0gaSAtIDFdICE9PSBsaW5lMltsaW5lMi5sZW5ndGggLSBpIC0gMV0p
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKGkpIHsKLSAgICAgICAgICAgICAgICBlbmRDb2x1bW4gLT0gaTsKLSAgICAgICAgICAgICAg
ICBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSA9IGxpbmUyLnN1YnN0cmluZygwLCBsaW5lMi5sZW5n
dGggLSBpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZhciBzZWxlY3Rp
b24gPSB0aGlzLl9nZXRTZWxlY3Rpb24oKTsKLQotICAgICAgICBpZiAobGluZXMubGVuZ3RoID09
PSAwICYmIGVuZExpbmUgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKLSAgICAgICAgICAg
IHZhciBvbGRSYW5nZSA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHN0YXJ0TGluZSwgMCwg
ZW5kTGluZSwgMCk7Ci0gICAgICAgIGVsc2UgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMCAmJiBzdGFy
dExpbmUgPiAwKQotICAgICAgICAgICAgdmFyIG9sZFJhbmdlID0gbmV3IFdlYkluc3BlY3Rvci5U
ZXh0UmFuZ2Uoc3RhcnRMaW5lIC0gMSwgdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgoc3RhcnRM
aW5lIC0gMSksIGVuZExpbmUgLSAxLCB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChlbmRMaW5l
IC0gMSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YXIgb2xkUmFuZ2UgPSBuZXcgV2Vi
SW5zcGVjdG9yLlRleHRSYW5nZShzdGFydExpbmUsIHN0YXJ0Q29sdW1uLCBlbmRMaW5lIC0gMSwg
ZW5kQ29sdW1uKTsKLQotICAgICAgICB2YXIgbmV3Q29udGVudCA9IGxpbmVzLmpvaW4oIlxuIik7
Ci0gICAgICAgIGlmICh0aGlzLl90ZXh0TW9kZWwuY29weVJhbmdlKG9sZFJhbmdlKSA9PT0gbmV3
Q29udGVudCkgewotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2RpcnR5TGluZXM7Ci0gICAgICAg
ICAgICByZXR1cm47IC8vIE5vb3AKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoaXMgaXMgYSAi
Zm9yZWlnbiIgY2FsbCBvdXRzaWRlIG9mIHRoaXMgY2xhc3MuIFNob3VsZCBiZSBiZWZvcmUgd2Ug
ZGVsZXRlIHRoZSBkaXJ0eSBsaW5lcyBmbGFnLgotICAgICAgICB0aGlzLl9lbnRlclRleHRDaGFu
Z2VNb2RlKCk7Ci0KLSAgICAgICAgZGVsZXRlIHRoaXMuX2RpcnR5TGluZXM7Ci0KLSAgICAgICAg
dmFyIG5ld1JhbmdlID0gdGhpcy5fZWRpdFJhbmdlKG9sZFJhbmdlLCBuZXdDb250ZW50KTsKLQot
ICAgICAgICB0aGlzLl9wYWludFNjaGVkdWxlZExpbmVzKHRydWUpOwotICAgICAgICB0aGlzLl9y
ZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0KLSAgICAgICAgdGhpcy5fZXhpdFRleHRDaGFu
Z2VNb2RlKG9sZFJhbmdlLCBuZXdSYW5nZSk7Ci0gICAgfSwKLQotICAgIHRleHRDaGFuZ2VkOiBm
dW5jdGlvbihvbGRSYW5nZSwgbmV3UmFuZ2UpCi0gICAgewotICAgICAgICB0aGlzLmJlZ2luRG9t
VXBkYXRlcygpOwotICAgICAgICB0aGlzLl9yZW1vdmVEZWNvcmF0aW9uc0luUmFuZ2Uob2xkUmFu
Z2UpOwotICAgICAgICB0aGlzLl91cGRhdGVDaHVua3NGb3JSYW5nZXMob2xkUmFuZ2UsIG5ld1Jh
bmdlKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlSGlnaGxpZ2h0c0ZvclJhbmdlKG5ld1JhbmdlKTsK
LSAgICAgICAgdGhpcy5lbmREb21VcGRhdGVzKCk7Ci0gICAgfSwKLQotICAgIF9lZGl0UmFuZ2U6
IGZ1bmN0aW9uKHJhbmdlLCB0ZXh0KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2xhc3RFZGl0
ZWRSYW5nZSAmJiAoIXRleHQgfHwgdGV4dC5pbmRleE9mKCJcbiIpICE9PSAtMSB8fCB0aGlzLl9s
YXN0RWRpdGVkUmFuZ2UuZW5kTGluZSAhPT0gcmFuZ2Uuc3RhcnRMaW5lIHx8IHRoaXMuX2xhc3RF
ZGl0ZWRSYW5nZS5lbmRDb2x1bW4gIT09IHJhbmdlLnN0YXJ0Q29sdW1uKSkKLSAgICAgICAgICAg
IHRoaXMuX3RleHRNb2RlbC5tYXJrVW5kb2FibGVTdGF0ZSgpOwotCi0gICAgICAgIHZhciBuZXdS
YW5nZSA9IHRoaXMuX3RleHRNb2RlbC5lZGl0UmFuZ2UocmFuZ2UsIHRleHQpOwotICAgICAgICB0
aGlzLl9sYXN0RWRpdGVkUmFuZ2UgPSBuZXdSYW5nZTsKLQotICAgICAgICByZXR1cm4gbmV3UmFu
Z2U7Ci0gICAgfSwKLQotICAgIF9yZW1vdmVEZWNvcmF0aW9uc0luUmFuZ2U6IGZ1bmN0aW9uKHJh
bmdlKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2NodW5rTnVtYmVyRm9yTGlu
ZShyYW5nZS5zdGFydExpbmUpOyBpIDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGg7ICsraSkgewot
ICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fdGV4dENodW5rc1tpXTsKLSAgICAgICAgICAg
IGlmIChjaHVuay5zdGFydExpbmUgPiByYW5nZS5lbmRMaW5lKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2h1bmsucmVtb3ZlQWxsRGVjb3JhdGlvbnMoKTsKLSAgICAgICAg
fQotICAgIH0sCi0KLSAgICBfdXBkYXRlQ2h1bmtzRm9yUmFuZ2VzOiBmdW5jdGlvbihvbGRSYW5n
ZSwgbmV3UmFuZ2UpCi0gICAgewotICAgICAgICAvLyBVcGRhdGUgdGhlIGNodW5rcyBpbiByYW5n
ZTogZmlyc3RDaHVua051bWJlciA8PSBpbmRleCA8PSBsYXN0Q2h1bmtOdW1iZXIKLSAgICAgICAg
dmFyIGZpcnN0Q2h1bmtOdW1iZXIgPSB0aGlzLl9jaHVua051bWJlckZvckxpbmUob2xkUmFuZ2Uu
c3RhcnRMaW5lKTsKLSAgICAgICAgdmFyIGxhc3RDaHVua051bWJlciA9IGZpcnN0Q2h1bmtOdW1i
ZXI7Ci0gICAgICAgIHdoaWxlIChsYXN0Q2h1bmtOdW1iZXIgKyAxIDwgdGhpcy5fdGV4dENodW5r
cy5sZW5ndGgpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0Q2h1bmtzW2xhc3RDaHVua051
bWJlciArIDFdLnN0YXJ0TGluZSA+IG9sZFJhbmdlLmVuZExpbmUpCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICArK2xhc3RDaHVua051bWJlcjsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZhciBzdGFydExpbmUgPSB0aGlzLl90ZXh0Q2h1bmtzW2ZpcnN0Q2h1bmtOdW1iZXJdLnN0
YXJ0TGluZTsKLSAgICAgICAgdmFyIGxpbmVzQ291bnQgPSB0aGlzLl90ZXh0Q2h1bmtzW2xhc3RD
aHVua051bWJlcl0uc3RhcnRMaW5lICsgdGhpcy5fdGV4dENodW5rc1tsYXN0Q2h1bmtOdW1iZXJd
LmxpbmVzQ291bnQgLSBzdGFydExpbmU7Ci0gICAgICAgIHZhciBsaW5lc0RpZmYgPSBuZXdSYW5n
ZS5saW5lc0NvdW50IC0gb2xkUmFuZ2UubGluZXNDb3VudDsKLSAgICAgICAgbGluZXNDb3VudCAr
PSBsaW5lc0RpZmY7Ci0KLSAgICAgICAgaWYgKGxpbmVzRGlmZikgewotICAgICAgICAgICAgLy8g
TGluZXMgc2hpZnRlZCwgdXBkYXRlIHRoZSBsaW5lIG51bWJlcnMgb2YgdGhlIGNodW5rcyBiZWxv
dy4KLSAgICAgICAgICAgIGZvciAodmFyIGNodW5rTnVtYmVyID0gbGFzdENodW5rTnVtYmVyICsg
MTsgY2h1bmtOdW1iZXIgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytjaHVua051bWJlcikK
LSAgICAgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVtYmVyXS5zdGFydExpbmUg
Kz0gbGluZXNEaWZmOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGZpcnN0TGluZVJvdzsKLSAg
ICAgICAgaWYgKGZpcnN0Q2h1bmtOdW1iZXIpIHsKLSAgICAgICAgICAgIHZhciBjaHVuayA9IHRo
aXMuX3RleHRDaHVua3NbZmlyc3RDaHVua051bWJlciAtIDFdOwotICAgICAgICAgICAgZmlyc3RM
aW5lUm93ID0gY2h1bmsuZXhwYW5kZWQgPyBjaHVuay5nZXRFeHBhbmRlZExpbmVSb3coY2h1bmsu
c3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3VudCAtIDEpIDogY2h1bmsuZWxlbWVudDsKLSAgICAg
ICAgICAgIGZpcnN0TGluZVJvdyA9IGZpcnN0TGluZVJvdy5uZXh0U2libGluZzsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBmaXJzdExpbmVSb3cgPSB0aGlzLl9jb250YWluZXIuZmlyc3RD
aGlsZDsKLQotICAgICAgICAvLyBNb3N0IGZyZXF1ZW50IGNhc2U6IGEgY2h1bmsgcmVtYWluZWQg
dGhlIHNhbWUuCi0gICAgICAgIGZvciAodmFyIGNodW5rTnVtYmVyID0gZmlyc3RDaHVua051bWJl
cjsgY2h1bmtOdW1iZXIgPD0gbGFzdENodW5rTnVtYmVyOyArK2NodW5rTnVtYmVyKSB7Ci0gICAg
ICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVtYmVyXTsKLSAgICAg
ICAgICAgIGlmIChjaHVuay5zdGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50ID4gdGhpcy5fdGV4
dE1vZGVsLmxpbmVzQ291bnQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB2
YXIgbGluZU51bWJlciA9IGNodW5rLnN0YXJ0TGluZTsKLSAgICAgICAgICAgIGZvciAodmFyIGxp
bmVSb3cgPSBmaXJzdExpbmVSb3c7IGxpbmVSb3cgJiYgbGluZU51bWJlciA8IGNodW5rLnN0YXJ0
TGluZSArIGNodW5rLmxpbmVzQ291bnQ7IGxpbmVSb3cgPSBsaW5lUm93Lm5leHRTaWJsaW5nKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGxpbmVSb3cubGluZU51bWJlciAhPT0gbGluZU51bWJlciB8
fCBsaW5lUm93ICE9PSBjaHVuay5nZXRFeHBhbmRlZExpbmVSb3cobGluZU51bWJlcikgfHwgbGlu
ZVJvdy50ZXh0Q29udGVudCAhPT0gdGhpcy5fdGV4dE1vZGVsLmxpbmUobGluZU51bWJlcikgfHwg
IWxpbmVSb3cuZmlyc3RDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgKytsaW5lTnVtYmVyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGxp
bmVOdW1iZXIgPCBjaHVuay5zdGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50KQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2h1bmsudXBkYXRlQ29sbGFwc2VkTGluZVJvdygp
OwotICAgICAgICAgICAgKytmaXJzdENodW5rTnVtYmVyOwotICAgICAgICAgICAgZmlyc3RMaW5l
Um93ID0gbGluZVJvdzsKLSAgICAgICAgICAgIHN0YXJ0TGluZSArPSBjaHVuay5saW5lc0NvdW50
OwotICAgICAgICAgICAgbGluZXNDb3VudCAtPSBjaHVuay5saW5lc0NvdW50OwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGZpcnN0Q2h1bmtOdW1iZXIgPiBsYXN0Q2h1bmtOdW1iZXIgJiYgbGlu
ZXNDb3VudCA9PT0gMCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBNYXliZSBt
ZXJnZSB3aXRoIHRoZSBuZXh0IGNodW5rLCBzbyB0aGF0IHdlIHNob3VsZCBub3QgY3JlYXRlIDEt
c2l6ZWQgY2h1bmtzIHdoZW4gYXBwZW5kaW5nIG5ldyBsaW5lcyBvbmUgYnkgb25lLgotICAgICAg
ICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2xhc3RDaHVua051bWJlciArIDFdOwotICAg
ICAgICB2YXIgbGluZXNJbkxhc3RDaHVuayA9IGxpbmVzQ291bnQgJSB0aGlzLl9kZWZhdWx0Q2h1
bmtTaXplOwotICAgICAgICBpZiAoY2h1bmsgJiYgIWNodW5rLmRlY29yYXRlZCAmJiBsaW5lc0lu
TGFzdENodW5rID4gMCAmJiBsaW5lc0luTGFzdENodW5rICsgY2h1bmsubGluZXNDb3VudCA8PSB0
aGlzLl9kZWZhdWx0Q2h1bmtTaXplKSB7Ci0gICAgICAgICAgICArK2xhc3RDaHVua051bWJlcjsK
LSAgICAgICAgICAgIGxpbmVzQ291bnQgKz0gY2h1bmsubGluZXNDb3VudDsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wOwotICAgICAg
ICB2YXIgc2Nyb2xsTGVmdCA9IHRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0OwotCi0gICAgICAgIC8v
IERlbGV0ZSBhbGwgRE9NIGVsZW1lbnRzIHRoYXQgd2VyZSBlaXRoZXIgY29udHJvbGxlZCBieSB0
aGUgb2xkIGNodW5rcywgb3IgaGF2ZSBqdXN0IGJlZW4gaW5zZXJ0ZWQuCi0gICAgICAgIHZhciBm
aXJzdFVubW9kaWZpZWRMaW5lUm93ID0gbnVsbDsKLSAgICAgICAgY2h1bmsgPSB0aGlzLl90ZXh0
Q2h1bmtzW2xhc3RDaHVua051bWJlciArIDFdOwotICAgICAgICBpZiAoY2h1bmspCi0gICAgICAg
ICAgICBmaXJzdFVubW9kaWZpZWRMaW5lUm93ID0gY2h1bmsuZXhwYW5kZWQgPyBjaHVuay5nZXRF
eHBhbmRlZExpbmVSb3coY2h1bmsuc3RhcnRMaW5lKSA6IGNodW5rLmVsZW1lbnQ7Ci0KLSAgICAg
ICAgd2hpbGUgKGZpcnN0TGluZVJvdyAmJiBmaXJzdExpbmVSb3cgIT09IGZpcnN0VW5tb2RpZmll
ZExpbmVSb3cpIHsKLSAgICAgICAgICAgIHZhciBsaW5lUm93ID0gZmlyc3RMaW5lUm93OwotICAg
ICAgICAgICAgZmlyc3RMaW5lUm93ID0gZmlyc3RMaW5lUm93Lm5leHRTaWJsaW5nOwotICAgICAg
ICAgICAgdGhpcy5fY29udGFpbmVyLnJlbW92ZUNoaWxkKGxpbmVSb3cpOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gUmVwbGFjZSBvbGQgY2h1bmtzIHdpdGggdGhlIG5ldyBvbmVzLgotICAgICAg
ICBmb3IgKHZhciBjaHVua051bWJlciA9IGZpcnN0Q2h1bmtOdW1iZXI7IGxpbmVzQ291bnQgPiAw
OyArK2NodW5rTnVtYmVyKSB7Ci0gICAgICAgICAgICB2YXIgY2h1bmtMaW5lc0NvdW50ID0gTWF0
aC5taW4odGhpcy5fZGVmYXVsdENodW5rU2l6ZSwgbGluZXNDb3VudCk7Ci0gICAgICAgICAgICB2
YXIgbmV3Q2h1bmsgPSB0aGlzLl9jcmVhdGVOZXdDaHVuayhzdGFydExpbmUsIHN0YXJ0TGluZSAr
IGNodW5rTGluZXNDb3VudCk7Ci0gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuaW5zZXJ0QmVm
b3JlKG5ld0NodW5rLmVsZW1lbnQsIGZpcnN0VW5tb2RpZmllZExpbmVSb3cpOwotCi0gICAgICAg
ICAgICBpZiAoY2h1bmtOdW1iZXIgPD0gbGFzdENodW5rTnVtYmVyKQotICAgICAgICAgICAgICAg
IHRoaXMuX3RleHRDaHVua3NbY2h1bmtOdW1iZXJdID0gbmV3Q2h1bms7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rcy5zcGxpY2UoY2h1bmtOdW1iZXIs
IDAsIG5ld0NodW5rKTsKLSAgICAgICAgICAgIHN0YXJ0TGluZSArPSBjaHVua0xpbmVzQ291bnQ7
Ci0gICAgICAgICAgICBsaW5lc0NvdW50IC09IGNodW5rTGluZXNDb3VudDsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoY2h1bmtOdW1iZXIgPD0gbGFzdENodW5rTnVtYmVyKQotICAgICAgICAgICAg
dGhpcy5fdGV4dENodW5rcy5zcGxpY2UoY2h1bmtOdW1iZXIsIGxhc3RDaHVua051bWJlciAtIGNo
dW5rTnVtYmVyICsgMSk7Ci0KLSAgICAgICAgdGhpcy5lbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9s
bFRvcDsKLSAgICAgICAgdGhpcy5lbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0OwotICAg
IH0sCi0KLSAgICBfdXBkYXRlSGlnaGxpZ2h0c0ZvclJhbmdlOiBmdW5jdGlvbihyYW5nZSkKLSAg
ICB7Ci0gICAgICAgIHZhciB2aXNpYmxlRnJvbSA9IHRoaXMuZWxlbWVudC5zY3JvbGxUb3A7Ci0g
ICAgICAgIHZhciB2aXNpYmxlVG8gPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wICsgdGhpcy5lbGVt
ZW50LmNsaWVudEhlaWdodDsKLQotICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZmluZFZpc2li
bGVDaHVua3ModmlzaWJsZUZyb20sIHZpc2libGVUbyk7Ci0gICAgICAgIHZhciBjaHVuayA9IHRo
aXMuX3RleHRDaHVua3NbcmVzdWx0LmVuZCAtIDFdOwotICAgICAgICB2YXIgbGFzdFZpc2libGVM
aW5lID0gY2h1bmsuc3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3VudDsKLQotICAgICAgICBsYXN0
VmlzaWJsZUxpbmUgPSBNYXRoLm1heChsYXN0VmlzaWJsZUxpbmUsIHJhbmdlLmVuZExpbmUgKyAx
KTsKLSAgICAgICAgbGFzdFZpc2libGVMaW5lID0gTWF0aC5taW4obGFzdFZpc2libGVMaW5lLCB0
aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCk7Ci0KLSAgICAgICAgdmFyIHVwZGF0ZWQgPSB0aGlz
Ll9oaWdobGlnaHRlci51cGRhdGVIaWdobGlnaHQocmFuZ2Uuc3RhcnRMaW5lLCBsYXN0VmlzaWJs
ZUxpbmUpOwotICAgICAgICBpZiAoIXVwZGF0ZWQpIHsKLSAgICAgICAgICAgIC8vIEhpZ2hsaWdo
dHMgZm9yIHRoZSBjaHVua3MgYmVsb3cgYXJlIGludmFsaWQsIHNvIGp1c3QgY29sbGFwc2UgdGhl
bS4KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9jaHVua051bWJlckZvckxpbmUocmFu
Z2Uuc3RhcnRMaW5lKTsgaSA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICAgICAgdGhpcy5fdGV4dENodW5rc1tpXS5leHBhbmRlZCA9IGZhbHNlOwotICAgICAgICB9
Ci0KLSAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOwotICAgIH0sCi0KLSAgICBfY29sbGVjdExp
bmVzRnJvbURpdjogZnVuY3Rpb24obGluZXMsIGVsZW1lbnQpCi0gICAgewotICAgICAgICB2YXIg
dGV4dENvbnRlbnRzID0gW107Ci0gICAgICAgIHZhciBub2RlID0gZWxlbWVudC5ub2RlVHlwZSA9
PT0gTm9kZS5URVhUX05PREUgPyBlbGVtZW50IDogZWxlbWVudC50cmF2ZXJzZU5leHROb2RlKGVs
ZW1lbnQpOwotICAgICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICAgICAgaWYgKGVsZW1lbnQu
ZGVjb3JhdGlvbnNFbGVtZW50ID09PSBub2RlKSB7Ci0gICAgICAgICAgICAgICAgbm9kZSA9IG5v
ZGUubmV4dFNpYmxpbmc7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiYnIiKQot
ICAgICAgICAgICAgICAgIHRleHRDb250ZW50cy5wdXNoKCJcbiIpOwotICAgICAgICAgICAgZWxz
ZSBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpCi0gICAgICAgICAgICAgICAg
dGV4dENvbnRlbnRzLnB1c2gobm9kZS50ZXh0Q29udGVudCk7Ci0gICAgICAgICAgICBub2RlID0g
bm9kZS50cmF2ZXJzZU5leHROb2RlKGVsZW1lbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFy
IHRleHRDb250ZW50ID0gdGV4dENvbnRlbnRzLmpvaW4oIiIpOwotICAgICAgICAvLyBUaGUgbGFz
dCBcbiAoaWYgYW55KSBkb2VzIG5vdCAiY291bnQiIGluIGEgRElWLgotICAgICAgICB0ZXh0Q29u
dGVudCA9IHRleHRDb250ZW50LnJlcGxhY2UoL1xuJC8sICIiKTsKLQotICAgICAgICB0ZXh0Q29u
dGVudHMgPSB0ZXh0Q29udGVudC5zcGxpdCgiXG4iKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB0ZXh0Q29udGVudHMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBsaW5lcy5wdXNoKHRl
eHRDb250ZW50c1tpXSk7Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5Q
YW5lbC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2Vk
UGFuZWwucHJvdG90eXBlOwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5DaHVuayA9IGZ1bmN0aW9uKHRleHRWaWV3ZXIsIHN0YXJ0TGluZSwg
ZW5kTGluZSkKLXsKLSAgICB0aGlzLl90ZXh0Vmlld2VyID0gdGV4dFZpZXdlcjsKLSAgICB0aGlz
Ll90ZXh0TW9kZWwgPSB0ZXh0Vmlld2VyLl90ZXh0TW9kZWw7Ci0KLSAgICB0aGlzLmVsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLmVsZW1lbnQubGluZU51
bWJlciA9IHN0YXJ0TGluZTsKLSAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1s
aW5lLWNvbnRlbnQiOwotICAgIHRoaXMuX3RleHRWaWV3ZXIuX2VuYWJsZURPTU5vZGVSZW1vdmVk
TGlzdGVuZXIodGhpcy5lbGVtZW50LCB0cnVlKTsKLQotICAgIHRoaXMuX3N0YXJ0TGluZSA9IHN0
YXJ0TGluZTsKLSAgICBlbmRMaW5lID0gTWF0aC5taW4odGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291
bnQsIGVuZExpbmUpOwotICAgIHRoaXMubGluZXNDb3VudCA9IGVuZExpbmUgLSBzdGFydExpbmU7
Ci0KLSAgICB0aGlzLl9leHBhbmRlZCA9IGZhbHNlOwotICAgIHRoaXMuX3JlYWRPbmx5ID0gZmFs
c2U7Ci0KLSAgICB0aGlzLnVwZGF0ZUNvbGxhcHNlZExpbmVSb3coKTsKLX0KLQotV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlID0gewotICAgIGFkZERlY29yYXRpb246
IGZ1bmN0aW9uKGRlY29yYXRpb24pCi0gICAgewotICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmJl
Z2luRG9tVXBkYXRlcygpOwotICAgICAgICBpZiAodHlwZW9mIGRlY29yYXRpb24gPT09ICJzdHJp
bmciKQotICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoZGVjb3JhdGlvbik7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQuZGVjb3JhdGlv
bnNFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxl
bWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICAgICAgICAgIHRo
aXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLWRl
Y29yYXRpb25zIjsKLSAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhp
cy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50LmFwcGVuZENoaWxkKGRlY29yYXRpb24p
OwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuZW5kRG9tVXBkYXRlcygpOwot
ICAgIH0sCi0KLSAgICByZW1vdmVEZWNvcmF0aW9uOiBmdW5jdGlvbihkZWNvcmF0aW9uKQotICAg
IHsKLSAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5iZWdpbkRvbVVwZGF0ZXMoKTsKLSAgICAgICAg
aWYgKHR5cGVvZiBkZWNvcmF0aW9uID09PSAic3RyaW5nIikKLSAgICAgICAgICAgIHRoaXMuZWxl
bWVudC5yZW1vdmVTdHlsZUNsYXNzKGRlY29yYXRpb24pOwotICAgICAgICBlbHNlIGlmICh0aGlz
LmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50KQotICAgICAgICAgICAgdGhpcy5lbGVtZW50LmRl
Y29yYXRpb25zRWxlbWVudC5yZW1vdmVDaGlsZChkZWNvcmF0aW9uKTsKLSAgICAgICAgdGhpcy5f
dGV4dFZpZXdlci5lbmREb21VcGRhdGVzKCk7Ci0gICAgfSwKLQotICAgIHJlbW92ZUFsbERlY29y
YXRpb25zOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmJlZ2lu
RG9tVXBkYXRlcygpOwotICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1s
aW5lLWNvbnRlbnQiOwotICAgICAgICBpZiAodGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVu
dCkgewotICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudC5k
ZWNvcmF0aW9uc0VsZW1lbnQpOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuZWxlbWVudC5kZWNv
cmF0aW9uc0VsZW1lbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5lbmRE
b21VcGRhdGVzKCk7Ci0gICAgfSwKLQotICAgIGdldCBkZWNvcmF0ZWQoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgIT09ICJ3ZWJraXQtbGluZS1jb250ZW50
IiB8fCAhISh0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50ICYmIHRoaXMuZWxlbWVudC5k
ZWNvcmF0aW9uc0VsZW1lbnQuZmlyc3RDaGlsZCk7Ci0gICAgfSwKLQotICAgIGdldCBzdGFydExp
bmUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0TGluZTsKLSAgICB9LAotCi0g
ICAgc2V0IHN0YXJ0TGluZShzdGFydExpbmUpCi0gICAgewotICAgICAgICB0aGlzLl9zdGFydExp
bmUgPSBzdGFydExpbmU7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5saW5lTnVtYmVyID0gc3RhcnRM
aW5lOwotICAgICAgICBpZiAodGhpcy5fZXhwYW5kZWRMaW5lUm93cykgewotICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9leHBhbmRlZExpbmVSb3dzLmxlbmd0aDsgKytpKQot
ICAgICAgICAgICAgICAgIHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbaV0ubGluZU51bWJlciA9IHN0
YXJ0TGluZSArIGk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgZ2V0IGV4cGFuZGVkKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9leHBhbmRlZDsKLSAgICB9LAotCi0gICAgc2V0IGV4
cGFuZGVkKGV4cGFuZGVkKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2V4cGFuZGVkID09PSBl
eHBhbmRlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9leHBhbmRlZCA9
IGV4cGFuZGVkOwotCi0gICAgICAgIGlmICh0aGlzLmxpbmVzQ291bnQgPT09IDEpIHsKLSAgICAg
ICAgICAgIGlmIChleHBhbmRlZCkKLSAgICAgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLl9w
YWludExpbmUodGhpcy5lbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYmVnaW5Eb21VcGRhdGVzKCk7Ci0KLSAgICAgICAg
aWYgKGV4cGFuZGVkKSB7Ci0gICAgICAgICAgICB0aGlzLl9leHBhbmRlZExpbmVSb3dzID0gW107
Ci0gICAgICAgICAgICB2YXIgcGFyZW50RWxlbWVudCA9IHRoaXMuZWxlbWVudC5wYXJlbnRFbGVt
ZW50OwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhcnRMaW5lOyBpIDwgdGhpcy5z
dGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIHZhciBs
aW5lUm93ID0gdGhpcy5fY3JlYXRlUm93KGkpOwotICAgICAgICAgICAgICAgIHRoaXMuX3RleHRW
aWV3ZXIuX2VuYWJsZURPTU5vZGVSZW1vdmVkTGlzdGVuZXIobGluZVJvdywgdHJ1ZSk7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5fdXBkYXRlRWxlbWVudFJlYWRPbmx5U3RhdGUobGluZVJvdyk7Ci0g
ICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUobGluZVJvdywgdGhpcy5l
bGVtZW50KTsKLSAgICAgICAgICAgICAgICB0aGlzLl9leHBhbmRlZExpbmVSb3dzLnB1c2gobGlu
ZVJvdyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLl9lbmFi
bGVET01Ob2RlUmVtb3ZlZExpc3RlbmVyKHRoaXMuZWxlbWVudCwgZmFsc2UpOwotICAgICAgICAg
ICAgcGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQpOwotICAgICAgICAgICAg
dGhpcy5fdGV4dFZpZXdlci5fcGFpbnRMaW5lcyh0aGlzLnN0YXJ0TGluZSwgdGhpcy5zdGFydExp
bmUgKyB0aGlzLmxpbmVzQ291bnQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFy
IGVsZW1lbnRJbnNlcnRlZCA9IGZhbHNlOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCB0aGlzLl9leHBhbmRlZExpbmVSb3dzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGxpbmVSb3cgPSB0aGlzLl9leHBhbmRlZExpbmVSb3dzW2ldOwotICAgICAgICAgICAgICAg
IHRoaXMuX3RleHRWaWV3ZXIuX2VuYWJsZURPTU5vZGVSZW1vdmVkTGlzdGVuZXIobGluZVJvdywg
ZmFsc2UpOwotICAgICAgICAgICAgICAgIHZhciBwYXJlbnRFbGVtZW50ID0gbGluZVJvdy5wYXJl
bnRFbGVtZW50OwotICAgICAgICAgICAgICAgIGlmIChwYXJlbnRFbGVtZW50KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghZWxlbWVudEluc2VydGVkKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtZW50SW5zZXJ0ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5fdGV4dFZpZXdlci5fZW5hYmxlRE9NTm9kZVJlbW92ZWRMaXN0ZW5lcih0aGlzLmVsZW1lbnQs
IHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC5pbnNlcnRCZWZv
cmUodGhpcy5lbGVtZW50LCBsaW5lUm93KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGxpbmVSb3cpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLl9yZWxlYXNlTGlu
ZXNIaWdobGlnaHQobGluZVJvdyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWxldGUg
dGhpcy5fZXhwYW5kZWRMaW5lUm93czsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3RleHRW
aWV3ZXIuZW5kRG9tVXBkYXRlcygpOwotICAgIH0sCi0KLSAgICBzZXQgcmVhZE9ubHkocmVhZE9u
bHkpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcmVhZE9ubHkgPT09IHJlYWRPbmx5KQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX3JlYWRPbmx5ID0gcmVhZE9ubHk7Ci0g
ICAgICAgIHRoaXMuX3VwZGF0ZUVsZW1lbnRSZWFkT25seVN0YXRlKHRoaXMuZWxlbWVudCk7Ci0g
ICAgICAgIGlmICh0aGlzLl9leHBhbmRlZExpbmVSb3dzKSB7Ci0gICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHRoaXMuX2V4cGFuZGVkTGluZVJvd3MubGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICAgICAgdGhpcy5fdXBkYXRlRWxlbWVudFJlYWRPbmx5U3RhdGUodGhpcy5fZXhwYW5kZWRM
aW5lUm93c1tpXSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgZ2V0IHJlYWRPbmx5KCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9yZWFkT25seTsKLSAgICB9LAotCi0gICAgX3VwZGF0
ZUVsZW1lbnRSZWFkT25seVN0YXRlOiBmdW5jdGlvbihlbGVtZW50KQotICAgIHsKLSAgICAgICAg
aWYgKHRoaXMuX3JlYWRPbmx5KQotICAgICAgICAgICAgZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJ0
ZXh0LWVkaXRvci1yZWFkLW9ubHkiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZWxlbWVu
dC5yZW1vdmVTdHlsZUNsYXNzKCJ0ZXh0LWVkaXRvci1yZWFkLW9ubHkiKTsKLSAgICB9LAotCi0g
ICAgZ2V0IGhlaWdodCgpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX2V4cGFuZGVkTGluZVJv
d3MpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4dFZpZXdlci5fdG90YWxIZWlnaHQodGhp
cy5lbGVtZW50KTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRWaWV3ZXIuX3RvdGFsSGVpZ2h0
KHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbMF0sIHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbdGhpcy5f
ZXhwYW5kZWRMaW5lUm93cy5sZW5ndGggLSAxXSk7Ci0gICAgfSwKLQotICAgIGdldCBvZmZzZXRU
b3AoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICh0aGlzLl9leHBhbmRlZExpbmVSb3dzICYmIHRo
aXMuX2V4cGFuZGVkTGluZVJvd3MubGVuZ3RoKSA/IHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbMF0u
b2Zmc2V0VG9wIDogdGhpcy5lbGVtZW50Lm9mZnNldFRvcDsKLSAgICB9LAotCi0gICAgX2NyZWF0
ZVJvdzogZnVuY3Rpb24obGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIHZhciBsaW5lUm93ID0g
dGhpcy5fdGV4dFZpZXdlci5fY2FjaGVkUm93cy5wb3AoKSB8fCBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKLSAgICAgICAgbGluZVJvdy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAg
ICAgICAgbGluZVJvdy5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtY29udGVudCI7Ci0gICAgICAg
IGxpbmVSb3cudGV4dENvbnRlbnQgPSB0aGlzLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKTsK
LSAgICAgICAgaWYgKCFsaW5lUm93LnRleHRDb250ZW50KQotICAgICAgICAgICAgbGluZVJvdy5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKLSAgICAgICAgcmV0dXJu
IGxpbmVSb3c7Ci0gICAgfSwKLQotICAgIGdldEV4cGFuZGVkTGluZVJvdzogZnVuY3Rpb24obGlu
ZU51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fZXhwYW5kZWQgfHwgbGluZU51bWJl
ciA8IHRoaXMuc3RhcnRMaW5lIHx8IGxpbmVOdW1iZXIgPj0gdGhpcy5zdGFydExpbmUgKyB0aGlz
LmxpbmVzQ291bnQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgaWYgKCF0aGlz
Ll9leHBhbmRlZExpbmVSb3dzKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudDsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbbGluZU51bWJlciAtIHRoaXMuc3Rh
cnRMaW5lXTsKLSAgICB9LAotCi0gICAgdXBkYXRlQ29sbGFwc2VkTGluZVJvdzogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMubGluZXNDb3VudCA9PT0gMSAmJiB0aGlzLl9leHBh
bmRlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgbGluZXMgPSBbXTsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhcnRMaW5lOyBpIDwgdGhpcy5zdGFydExpbmUgKyB0
aGlzLmxpbmVzQ291bnQ7ICsraSkKLSAgICAgICAgICAgIGxpbmVzLnB1c2godGhpcy5fdGV4dE1v
ZGVsLmxpbmUoaSkpOwotCi0gICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwot
ICAgICAgICB0aGlzLmVsZW1lbnQudGV4dENvbnRlbnQgPSBsaW5lcy5qb2luKCJcbiIpOwotCi0g
ICAgICAgIC8vIFRoZSBsYXN0IGVtcHR5IGxpbmUgd2lsbCBnZXQgc3dhbGxvd2VkIG90aGVyd2lz
ZS4KLSAgICAgICAgaWYgKCFsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSkKLSAgICAgICAgICAgIHRo
aXMuZWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKLSAg
ICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dl
YktpdC5xcmMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMK
aW5kZXggOGY4MjIxYTYzZTExYmRlYzczZDU1ZTkwMmRiYjJjZTUzMGZkM2ZjYy4uYTVlMWE4NzNj
MDZkMzg4YTc3NTZjOTcwZjMzOTZmMTRkMzAzNjU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwpAQCAtMTY0LDEwICsxNjQsMTAgQEAKICAgICA8
ZmlsZT5UYWJiZWRFZGl0b3JDb250YWluZXIuanM8L2ZpbGU+CiAgICAgPGZpbGU+VGFiYmVkUGFu
ZS5qczwvZmlsZT4KICAgICA8ZmlsZT5UZXN0Q29udHJvbGxlci5qczwvZmlsZT4KKyAgICA8Zmls
ZT5UZXh0RWRpdG9yLmpzPC9maWxlPgogICAgIDxmaWxlPlRleHRFZGl0b3JIaWdobGlnaHRlci5q
czwvZmlsZT4KICAgICA8ZmlsZT5UZXh0RWRpdG9yTW9kZWwuanM8L2ZpbGU+CiAgICAgPGZpbGU+
VGV4dFByb21wdC5qczwvZmlsZT4KLSAgICA8ZmlsZT5UZXh0Vmlld2VyLmpzPC9maWxlPgogICAg
IDxmaWxlPlRpbWVsaW5lRnJhbWVDb250cm9sbGVyLmpzPC9maWxlPgogICAgIDxmaWxlPlRpbWVs
aW5lTWFuYWdlci5qczwvZmlsZT4KICAgICA8ZmlsZT5UaW1lbGluZU1vZGVsLmpzPC9maWxlPgpA
QCAtMjEyLDggKzIxMiw4IEBACiAgICAgPGZpbGU+c2NyaXB0c1BhbmVsLmNzczwvZmlsZT4KICAg
ICA8ZmlsZT5zcGxpdFZpZXcuY3NzPC9maWxlPgogICAgIDxmaWxlPnRhYmJlZFBhbmUuY3NzPC9m
aWxlPgorICAgIDxmaWxlPnRleHRFZGl0b3IuY3NzPC9maWxlPgogICAgIDxmaWxlPnRleHRQcm9t
cHQuY3NzPC9maWxlPgotICAgIDxmaWxlPnRleHRWaWV3ZXIuY3NzPC9maWxlPgogICAgIDxmaWxl
PnRpbWVsaW5lUGFuZWwuY3NzPC9maWxlPgogICAgIDxmaWxlPkltYWdlcy9hcHBsaWNhdGlvbkNh
Y2hlLnBuZzwvZmlsZT4KICAgICA8ZmlsZT5JbWFnZXMvYmFjay5wbmc8L2ZpbGU+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAppbmRleCBk
YmQ3YzVhNWQ1YmM1MGFlZWRjNDdlY2JmN2QyMWVjYjRjMThhZThmLi5jNmY1YWExMmNkYzE4ZjY5
ZmZiMjE5MThkYTg2NTkzZjdkOWY0MjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKQEAgLTEyMCw3ICsxMjAsNyBAQCBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkVsZW1lbnRzUGFuZWwu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ik5l
dHdvcmtQYW5lbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiIHNyYz0iSW5qZWN0ZWRGYWtlV29ya2VyLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJUZXh0Vmlld2VyLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJUZXh0RWRpdG9yLmpzIj48L3Njcmlw
dD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTb3VyY2VGcmFtZS5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iUmVz
b3VyY2VWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSJSZXF1ZXN0Vmlldy5qcyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRFZGl0b3IuY3NzIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0RWRpdG9yLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMTBkNzExMGRl
OTZjNjBlMGY0OWUzZjlmYmIwZmFhOGY1YWUzZWFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0RWRpdG9yLmNzcwpAQCAtMCwwICsxLDE4
NSBAQAorLnRleHQtZWRpdG9yIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOjA7
CisgICAgbGVmdDowOworICAgIHJpZ2h0OjA7CisgICAgYm90dG9tOjA7CisgICAgd2hpdGUtc3Bh
Y2U6IHByZTsKKyAgICBvdmVyZmxvdzogYXV0bzsKK30KKworLnRleHQtZWRpdG9yLWxpbmVzIHsK
KyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIGxlZnQ6IDA7CisgICAg
Ym90dG9tOiAwOworICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgLXdlYmtpdC11c2VyLXNlbGVj
dDogbm9uZTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjQwLCAyNDAsIDI0MCk7CisgICAg
Ym9yZGVyLXJpZ2h0OiAxcHggc29saWQgcmdiKDE4NywgMTg3LCAxODcpOworICAgIG1pbi13aWR0
aDogMTlweDsKK30KKworLnRleHQtZWRpdG9yLWNvbnRlbnRzIHsKKyAgICBwb3NpdGlvbjogYWJz
b2x1dGU7CisgICAgdG9wOiAwOworICAgIGxlZnQ6IDA7CisgICAgcmlnaHQ6IDA7CisgICAgYm90
dG9tOiAwOworICAgIG92ZXJmbG93OiBhdXRvOworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRl
eHQ7Cit9CisKKy50ZXh0LWVkaXRvci1jb250ZW50cyAuaW5uZXItY29udGFpbmVyIHsKKyAgICBw
b3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIGxlZnQ6IDA7CisgICAgcmlnaHQ6
IGF1dG87CisgICAgYm90dG9tOiBhdXRvOworICAgIG1pbi13aWR0aDogMTAwJTsKK30KKworLnRl
eHQtZWRpdG9yLWVkaXRhYmxlIHsKKyAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLXdyaXRl
LXBsYWludGV4dC1vbmx5OworfQorCisudGV4dC1lZGl0b3ItcmVhZC1vbmx5IHsKKyAgICAtd2Vi
a2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHk7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI0
MCwgMjQwLCAyNDApOworfQorCisud2Via2l0LWxpbmUtZGVjb3JhdGlvbnMgeworICAgIHBvaW50
ZXItZXZlbnRzOiBub25lOworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CisgICAgLXdl
YmtpdC11c2VyLW1vZGlmeTogcmVhZC1vbmx5OworfQorCisud2Via2l0LWh0bWwtbWVzc2FnZS1i
dWJibGUgeworICAgIC13ZWJraXQtYm94LXNoYWRvdzogYmxhY2sgMHB4IDJweCA1cHg7CisgICAg
LXdlYmtpdC1ib3JkZXItcmFkaXVzOiA5cHg7CisgICAgLXdlYmtpdC1ib3JkZXItZml0OiBsaW5l
czsKKyAgICBmb250LXNpemU6IDEwcHg7CisgICAgZm9udC1mYW1pbHk6IEx1Y2lkYSBHcmFuZGUs
IHNhbnMtc2VyaWY7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgbWFyZ2luOiA2cHggMjVw
eDsKKyAgICBwYWRkaW5nOiAwIDdweCAxcHg7CisgICAgei1pbmRleDoyMDsKK30KKworLndlYmtp
dC1odG1sLXdhcm5pbmctbWVzc2FnZSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEwMCUs
IDYyJSwgNDIlKTsKKyAgICBib3JkZXI6IDJweCBzb2xpZCByZ2IoMTAwJSwgNTIlLCAyMSUpOwor
fQorCisud2Via2l0LWh0bWwtZXJyb3ItbWVzc2FnZSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjog
cmdiKDEwMCUsIDQyJSwgNDIlKTsKKyAgICBib3JkZXI6IDJweCBzb2xpZCByZ2IoMTAwJSwgMzEl
LCAzMSUpOworfQorCisud2Via2l0LWh0bWwtbWVzc2FnZS1saW5lIHsKKyAgICBwYWRkaW5nLWxl
ZnQ6IDIzcHg7CisgICAgdGV4dC1pbmRlbnQ6IC0yMHB4OworfQorCisud2Via2l0LWh0bWwtbWVz
c2FnZS1saW5lLWhvdmVyIHsKKyAgICBwYWRkaW5nLWxlZnQ6IDIzcHg7CisgICAgdGV4dC1pbmRl
bnQ6IC0yMHB4OworICAgIHdoaXRlLXNwYWNlOiBhdXRvOworICAgIHRleHQtb3ZlcmZsb3c6IGF1
dG87CisgICAgb3ZlcmZsb3c6IGF1dG87Cit9CisKKy53ZWJraXQtaHRtbC1tZXNzYWdlLWljb24g
eworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICB0b3A6IDJweDsKKyAgICBtYXJnaW46IDAg
NHB4OworfQorCisud2Via2l0LWxpbmUtbnVtYmVyIHsKKyAgICBjb2xvcjogcmdiKDEyOCwgMTI4
LCAxMjgpOworICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7
CisgICAgd29yZC1icmVhazogbm9ybWFsOworICAgIHBhZGRpbmctcmlnaHQ6IDRweDsKKyAgICBw
YWRkaW5nLWxlZnQ6IDZweDsKK30KKworLndlYmtpdC1saW5lLW51bWJlci1vdXRlciB7CisgICAg
bWFyZ2luLXJpZ2h0OiAtNHB4OworICAgIG1hcmdpbi1sZWZ0OiAtNHB4OworICAgIGJvcmRlci1j
b2xvcjogdHJhbnNwYXJlbnQ7CisgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKKyAgICBib3JkZXIt
d2lkdGg6IDAgMCAwcHggMnB4OworICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKKy53ZWJr
aXQtbGluZS1udW1iZXItaW5uZXIgeworICAgIG1hcmdpbi1yaWdodDogNHB4OworfQorCisud2Vi
a2l0LWJyZWFrcG9pbnQgLndlYmtpdC1saW5lLW51bWJlci1pbm5lciwgLndlYmtpdC1icmVha3Bv
aW50LWNvbmRpdGlvbmFsIC53ZWJraXQtbGluZS1udW1iZXItaW5uZXIsIC53ZWJraXQtZXhlY3V0
aW9uLWxpbmUgLndlYmtpdC1saW5lLW51bWJlci1pbm5lciB7CisgICAgbWFyZ2luLXJpZ2h0OiAt
MTBweDsKK30KKworLndlYmtpdC1saW5lLWNvbnRlbnQgeworICAgIHBhZGRpbmctbGVmdDogMnB4
OworfQorCisud2Via2l0LWJyZWFrcG9pbnQgLndlYmtpdC1saW5lLW51bWJlci1vdXRlciB7Cisg
ICAgY29sb3I6IHdoaXRlOworICAgIGJvcmRlci13aWR0aDogMCAxNHB4IDBweCAycHg7CisgICAg
LXdlYmtpdC1ib3JkZXItaW1hZ2U6IHVybChJbWFnZXMvYnJlYWtwb2ludEJvcmRlci5wbmcpIDAg
MTQgMCAyOworfQorCisud2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwgLndlYmtpdC1saW5l
LW51bWJlci1vdXRlciB7CisgICAgY29sb3I6IHdoaXRlOworICAgIGJvcmRlci13aWR0aDogMCAx
NHB4IDBweCAycHg7CisgICAgLXdlYmtpdC1ib3JkZXItaW1hZ2U6IHVybChJbWFnZXMvYnJlYWtw
b2ludENvbmRpdGlvbmFsQm9yZGVyLnBuZykgMCAxNCAwIDI7Cit9CisKKy53ZWJraXQtZXhlY3V0
aW9uLWxpbmUgLndlYmtpdC1saW5lLW51bWJlci1vdXRlciB7CisgICAgY29sb3I6IHRyYW5zcGFy
ZW50OworICAgIGJvcmRlci13aWR0aDogMCAxNHB4IDBweCAycHg7CisgICAgLXdlYmtpdC1ib3Jk
ZXItaW1hZ2U6IHVybChJbWFnZXMvcHJvZ3JhbUNvdW50ZXJCb3JkZXIucG5nKSAwIDE0IDAgMjsK
K30KKworLndlYmtpdC1icmVha3BvaW50LndlYmtpdC1leGVjdXRpb24tbGluZSAud2Via2l0LWxp
bmUtbnVtYmVyLW91dGVyIHsKKyAgICBjb2xvcjogd2hpdGU7CisgICAgLXdlYmtpdC1ib3JkZXIt
aW1hZ2U6IHVybChJbWFnZXMvYnJlYWtwb2ludENvdW50ZXJCb3JkZXIucG5nKSAwIDE0IDAgMjsK
K30KKworLndlYmtpdC1icmVha3BvaW50LndlYmtpdC1leGVjdXRpb24tbGluZSAud2Via2l0LWxp
bmUtbnVtYmVyLW91dGVyIHsKKyAgICBjb2xvcjogdHJhbnNwYXJlbnQ7CisgICAgLXdlYmtpdC1i
b3JkZXItaW1hZ2U6IHVybChJbWFnZXMvYnJlYWtwb2ludENvdW50ZXJCb3JkZXIucG5nKSAwIDE0
IDAgMjsKK30KKworLndlYmtpdC1icmVha3BvaW50LWNvbmRpdGlvbmFsLndlYmtpdC1leGVjdXRp
b24tbGluZSAud2Via2l0LWxpbmUtbnVtYmVyLW91dGVyIHsKKyAgICBjb2xvcjogdHJhbnNwYXJl
bnQ7CisgICAgLXdlYmtpdC1ib3JkZXItaW1hZ2U6IHVybChJbWFnZXMvYnJlYWtwb2ludENvbmRp
dGlvbmFsQ291bnRlckJvcmRlci5wbmcpIDAgMTQgMCAyOworfQorCisud2Via2l0LWJyZWFrcG9p
bnQtZGlzYWJsZWQgLndlYmtpdC1saW5lLW51bWJlci1vdXRlciB7CisgICAgb3BhY2l0eTogMC41
OworfQorCisuYnJlYWtwb2ludHMtZGVhY3RpdmF0ZWQgLndlYmtpdC1icmVha3BvaW50IC53ZWJr
aXQtbGluZS1udW1iZXItb3V0ZXIgeworICAgIG9wYWNpdHk6IDAuNTsKK30KKworLmJyZWFrcG9p
bnRzLWRlYWN0aXZhdGVkIC53ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZCAud2Via2l0LWxpbmUt
bnVtYmVyLW91dGVyIHsKKyAgICBvcGFjaXR5OiAwLjM7Cit9CisKKy53ZWJraXQtZXhlY3V0aW9u
LWxpbmUud2Via2l0LWxpbmUtY29udGVudCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDE3
MSwgMTkxLCAyNTQpOworICAgIG91dGxpbmU6IDFweCBzb2xpZCByZ2IoNjQsIDExNSwgMjQ0KTsK
K30KKworLndlYmtpdC1oaWdobGlnaHRlZC1saW5lLndlYmtpdC1saW5lLWNvbnRlbnQgeworICAg
IC13ZWJraXQtYW5pbWF0aW9uOiAiZmFkZW91dCIgMnMgMHM7Cit9CisKK0Atd2Via2l0LWtleWZy
YW1lcyBmYWRlb3V0IHsKKyAgICBmcm9tIHtiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUs
IDEyMCk7IH0KKyAgICB0byB7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyB9Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRWaWV3ZXIuY3NzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0Vmlld2VyLmNzcwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEwZDcxMTBkZTk2YzYwZTBmNDllM2Y5ZmJiMGZhYThm
NWFlM2VhZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRWaWV3ZXIuY3NzCisrKyAvZGV2
L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLS50ZXh0LWVkaXRvciB7Ci0gICAgcG9zaXRpb246IGFi
c29sdXRlOwotICAgIHRvcDowOwotICAgIGxlZnQ6MDsKLSAgICByaWdodDowOwotICAgIGJvdHRv
bTowOwotICAgIHdoaXRlLXNwYWNlOiBwcmU7Ci0gICAgb3ZlcmZsb3c6IGF1dG87Ci19Ci0KLS50
ZXh0LWVkaXRvci1saW5lcyB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsK
LSAgICBsZWZ0OiAwOwotICAgIGJvdHRvbTogMDsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotICAg
IC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI0
MCwgMjQwLCAyNDApOwotICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHJnYigxODcsIDE4Nywg
MTg3KTsKLSAgICBtaW4td2lkdGg6IDE5cHg7Ci19Ci0KLS50ZXh0LWVkaXRvci1jb250ZW50cyB7
Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICBsZWZ0OiAwOwotICAg
IHJpZ2h0OiAwOwotICAgIGJvdHRvbTogMDsKLSAgICBvdmVyZmxvdzogYXV0bzsKLSAgICAtd2Vi
a2l0LXVzZXItc2VsZWN0OiB0ZXh0OwotfQotCi0udGV4dC1lZGl0b3ItY29udGVudHMgLmlubmVy
LWNvbnRhaW5lciB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICBs
ZWZ0OiAwOwotICAgIHJpZ2h0OiBhdXRvOwotICAgIGJvdHRvbTogYXV0bzsKLSAgICBtaW4td2lk
dGg6IDEwMCU7Ci19Ci0KLS50ZXh0LWVkaXRvci1lZGl0YWJsZSB7Ci0gICAgLXdlYmtpdC11c2Vy
LW1vZGlmeTogcmVhZC13cml0ZS1wbGFpbnRleHQtb25seTsKLX0KLQotLnRleHQtZWRpdG9yLXJl
YWQtb25seSB7Ci0gICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC1vbmx5OwotICAgIGJhY2tn
cm91bmQtY29sb3I6IHJnYigyNDAsIDI0MCwgMjQwKTsKLX0KLQotLndlYmtpdC1saW5lLWRlY29y
YXRpb25zIHsKLSAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKLSAgICAtd2Via2l0LXVzZXItc2Vs
ZWN0OiBub25lOwotICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seTsKLX0KLQotLndl
YmtpdC1odG1sLW1lc3NhZ2UtYnViYmxlIHsKLSAgICAtd2Via2l0LWJveC1zaGFkb3c6IGJsYWNr
IDBweCAycHggNXB4OwotICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogOXB4OwotICAgIC13ZWJr
aXQtYm9yZGVyLWZpdDogbGluZXM7Ci0gICAgZm9udC1zaXplOiAxMHB4OwotICAgIGZvbnQtZmFt
aWx5OiBMdWNpZGEgR3JhbmRlLCBzYW5zLXNlcmlmOwotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwot
ICAgIG1hcmdpbjogNnB4IDI1cHg7Ci0gICAgcGFkZGluZzogMCA3cHggMXB4OwotICAgIHotaW5k
ZXg6MjA7Ci19Ci0KLS53ZWJraXQtaHRtbC13YXJuaW5nLW1lc3NhZ2UgewotICAgIGJhY2tncm91
bmQtY29sb3I6IHJnYigxMDAlLCA2MiUsIDQyJSk7Ci0gICAgYm9yZGVyOiAycHggc29saWQgcmdi
KDEwMCUsIDUyJSwgMjElKTsKLX0KLQotLndlYmtpdC1odG1sLWVycm9yLW1lc3NhZ2UgewotICAg
IGJhY2tncm91bmQtY29sb3I6IHJnYigxMDAlLCA0MiUsIDQyJSk7Ci0gICAgYm9yZGVyOiAycHgg
c29saWQgcmdiKDEwMCUsIDMxJSwgMzElKTsKLX0KLQotLndlYmtpdC1odG1sLW1lc3NhZ2UtbGlu
ZSB7Ci0gICAgcGFkZGluZy1sZWZ0OiAyM3B4OwotICAgIHRleHQtaW5kZW50OiAtMjBweDsKLX0K
LQotLndlYmtpdC1odG1sLW1lc3NhZ2UtbGluZS1ob3ZlciB7Ci0gICAgcGFkZGluZy1sZWZ0OiAy
M3B4OwotICAgIHRleHQtaW5kZW50OiAtMjBweDsKLSAgICB3aGl0ZS1zcGFjZTogYXV0bzsKLSAg
ICB0ZXh0LW92ZXJmbG93OiBhdXRvOwotICAgIG92ZXJmbG93OiBhdXRvOwotfQotCi0ud2Via2l0
LWh0bWwtbWVzc2FnZS1pY29uIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgdG9wOiAy
cHg7Ci0gICAgbWFyZ2luOiAwIDRweDsKLX0KLQotLndlYmtpdC1saW5lLW51bWJlciB7Ci0gICAg
Y29sb3I6IHJnYigxMjgsIDEyOCwgMTI4KTsKLSAgICB0ZXh0LWFsaWduOiByaWdodDsKLSAgICB2
ZXJ0aWNhbC1hbGlnbjogdG9wOwotICAgIHdvcmQtYnJlYWs6IG5vcm1hbDsKLSAgICBwYWRkaW5n
LXJpZ2h0OiA0cHg7Ci0gICAgcGFkZGluZy1sZWZ0OiA2cHg7Ci19Ci0KLS53ZWJraXQtbGluZS1u
dW1iZXItb3V0ZXIgewotICAgIG1hcmdpbi1yaWdodDogLTRweDsKLSAgICBtYXJnaW4tbGVmdDog
LTRweDsKLSAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwotICAgIGJvcmRlci1zdHlsZTog
c29saWQ7Ci0gICAgYm9yZGVyLXdpZHRoOiAwIDAgMHB4IDJweDsKLSAgICB2ZXJ0aWNhbC1hbGln
bjogdG9wOwotfQotCi0ud2Via2l0LWxpbmUtbnVtYmVyLWlubmVyIHsKLSAgICBtYXJnaW4tcmln
aHQ6IDRweDsKLX0KLQotLndlYmtpdC1icmVha3BvaW50IC53ZWJraXQtbGluZS1udW1iZXItaW5u
ZXIsIC53ZWJraXQtYnJlYWtwb2ludC1jb25kaXRpb25hbCAud2Via2l0LWxpbmUtbnVtYmVyLWlu
bmVyLCAud2Via2l0LWV4ZWN1dGlvbi1saW5lIC53ZWJraXQtbGluZS1udW1iZXItaW5uZXIgewot
ICAgIG1hcmdpbi1yaWdodDogLTEwcHg7Ci19Ci0KLS53ZWJraXQtbGluZS1jb250ZW50IHsKLSAg
ICBwYWRkaW5nLWxlZnQ6IDJweDsKLX0KLQotLndlYmtpdC1icmVha3BvaW50IC53ZWJraXQtbGlu
ZS1udW1iZXItb3V0ZXIgewotICAgIGNvbG9yOiB3aGl0ZTsKLSAgICBib3JkZXItd2lkdGg6IDAg
MTRweCAwcHggMnB4OwotICAgIC13ZWJraXQtYm9yZGVyLWltYWdlOiB1cmwoSW1hZ2VzL2JyZWFr
cG9pbnRCb3JkZXIucG5nKSAwIDE0IDAgMjsKLX0KLQotLndlYmtpdC1icmVha3BvaW50LWNvbmRp
dGlvbmFsIC53ZWJraXQtbGluZS1udW1iZXItb3V0ZXIgewotICAgIGNvbG9yOiB3aGl0ZTsKLSAg
ICBib3JkZXItd2lkdGg6IDAgMTRweCAwcHggMnB4OwotICAgIC13ZWJraXQtYm9yZGVyLWltYWdl
OiB1cmwoSW1hZ2VzL2JyZWFrcG9pbnRDb25kaXRpb25hbEJvcmRlci5wbmcpIDAgMTQgMCAyOwot
fQotCi0ud2Via2l0LWV4ZWN1dGlvbi1saW5lIC53ZWJraXQtbGluZS1udW1iZXItb3V0ZXIgewot
ICAgIGNvbG9yOiB0cmFuc3BhcmVudDsKLSAgICBib3JkZXItd2lkdGg6IDAgMTRweCAwcHggMnB4
OwotICAgIC13ZWJraXQtYm9yZGVyLWltYWdlOiB1cmwoSW1hZ2VzL3Byb2dyYW1Db3VudGVyQm9y
ZGVyLnBuZykgMCAxNCAwIDI7Ci19Ci0KLS53ZWJraXQtYnJlYWtwb2ludC53ZWJraXQtZXhlY3V0
aW9uLWxpbmUgLndlYmtpdC1saW5lLW51bWJlci1vdXRlciB7Ci0gICAgY29sb3I6IHdoaXRlOwot
ICAgIC13ZWJraXQtYm9yZGVyLWltYWdlOiB1cmwoSW1hZ2VzL2JyZWFrcG9pbnRDb3VudGVyQm9y
ZGVyLnBuZykgMCAxNCAwIDI7Ci19Ci0KLS53ZWJraXQtYnJlYWtwb2ludC53ZWJraXQtZXhlY3V0
aW9uLWxpbmUgLndlYmtpdC1saW5lLW51bWJlci1vdXRlciB7Ci0gICAgY29sb3I6IHRyYW5zcGFy
ZW50OwotICAgIC13ZWJraXQtYm9yZGVyLWltYWdlOiB1cmwoSW1hZ2VzL2JyZWFrcG9pbnRDb3Vu
dGVyQm9yZGVyLnBuZykgMCAxNCAwIDI7Ci19Ci0KLS53ZWJraXQtYnJlYWtwb2ludC1jb25kaXRp
b25hbC53ZWJraXQtZXhlY3V0aW9uLWxpbmUgLndlYmtpdC1saW5lLW51bWJlci1vdXRlciB7Ci0g
ICAgY29sb3I6IHRyYW5zcGFyZW50OwotICAgIC13ZWJraXQtYm9yZGVyLWltYWdlOiB1cmwoSW1h
Z2VzL2JyZWFrcG9pbnRDb25kaXRpb25hbENvdW50ZXJCb3JkZXIucG5nKSAwIDE0IDAgMjsKLX0K
LQotLndlYmtpdC1icmVha3BvaW50LWRpc2FibGVkIC53ZWJraXQtbGluZS1udW1iZXItb3V0ZXIg
ewotICAgIG9wYWNpdHk6IDAuNTsKLX0KLQotLmJyZWFrcG9pbnRzLWRlYWN0aXZhdGVkIC53ZWJr
aXQtYnJlYWtwb2ludCAud2Via2l0LWxpbmUtbnVtYmVyLW91dGVyIHsKLSAgICBvcGFjaXR5OiAw
LjU7Ci19Ci0KLS5icmVha3BvaW50cy1kZWFjdGl2YXRlZCAud2Via2l0LWJyZWFrcG9pbnQtZGlz
YWJsZWQgLndlYmtpdC1saW5lLW51bWJlci1vdXRlciB7Ci0gICAgb3BhY2l0eTogMC4zOwotfQot
Ci0ud2Via2l0LWV4ZWN1dGlvbi1saW5lLndlYmtpdC1saW5lLWNvbnRlbnQgewotICAgIGJhY2tn
cm91bmQtY29sb3I6IHJnYigxNzEsIDE5MSwgMjU0KTsKLSAgICBvdXRsaW5lOiAxcHggc29saWQg
cmdiKDY0LCAxMTUsIDI0NCk7Ci19Ci0KLS53ZWJraXQtaGlnaGxpZ2h0ZWQtbGluZS53ZWJraXQt
bGluZS1jb250ZW50IHsKLSAgICAtd2Via2l0LWFuaW1hdGlvbjogImZhZGVvdXQiIDJzIDBzOwot
fQotCi1ALXdlYmtpdC1rZXlmcmFtZXMgZmFkZW91dCB7Ci0gICAgZnJvbSB7YmFja2dyb3VuZC1j
b2xvcjogcmdiKDI1NSwgMjU1LCAxMjApOyB9Ci0gICAgdG8geyBiYWNrZ3JvdW5kLWNvbG9yOiB3
aGl0ZTsgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVT
dXBwb3J0L2luc3BlY3RvckJCLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29y
ZVN1cHBvcnQvaW5zcGVjdG9yQkIuaHRtbAppbmRleCA1ZjY5MjE5N2Y4ZjNkMDhhNDM0ZDg0ODkz
NjIxYzRjYWRiZGY2MTdlLi43OTgyOGQ5OGY0ZDBlMGQwNzYyMzdmZTIzMDg1OTdmMjI2NDNhOWZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvaW5z
cGVjdG9yQkIuaHRtbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBv
cnQvaW5zcGVjdG9yQkIuaHRtbApAQCAtMzksNyArMzksNyBAQCBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgICAgICA8
bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJuZXR3b3JrUGFuZWwu
Y3NzIj4KICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJl
Zj0iaGVscFNjcmVlbi5jc3MiPgogICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9
InRleHQvY3NzIiBocmVmPSJwb3BvdmVyLmNzcyI+Ci0gICAgICAgIDxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InRleHRWaWV3ZXIuY3NzIj4KKyAgICAgICAgPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0idGV4dEVkaXRvci5jc3Mi
PgogICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqYXZhc2NyaXB0
LmpzIj48L3NjcmlwdD4KICAgICA8L2hlYWQ+CiAgICAgPGJvZHkgY2xhc3M9ImRldGFjaGVkIj4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1OTdjMDBjMmUwNmIzZDQ4YTJkNzc1OWNlNWMxMDI3ZWYyZGFhNmY3Li5mMmU0MzVk
NGJmYWRhZjlhOTczMDRhZDhhZGExZTAwZDc0OGQ2ODg5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAK
KzIwMTItMDYtMjYgIEphbiBLZXJvbW5lcyAgPGphbnhAbGludXguY29tPgorCisgICAgICAgIFdl
YiBJbnNwZWN0b3I6IFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyIHNob3VsZCBiZSByZW5hbWVkIFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04OTkzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItdGVzdC5qczoKKyAg
ICAgICAgKGluaXRpYWxpemVfRGVidWdnZXJUZXN0KToKKyAgICAgICAgKiBodHRwL3Rlc3RzL2lu
c3BlY3Rvci9saXZlLWVkaXQtdGVzdC5qczoKKyAgICAgICAgKGluaXRpYWxpemVfTGl2ZUVkaXRU
ZXN0Lkluc3BlY3RvclRlc3QucmVwbGFjZUluU291cmNlKToKKyAgICAgICAgKGluaXRpYWxpemVf
TGl2ZUVkaXRUZXN0KToKKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMt
dGVzdC5qczoKKyAgICAgICAgKGluaXRpYWxpemVfUmVzb3VyY2VUZXN0Lkluc3BlY3RvclRlc3Qu
c2hvd1Jlc291cmNlLnNob3dSZXNvdXJjZUNhbGxiYWNrLnZpc2l0KToKKyAgICAgICAgKGluaXRp
YWxpemVfUmVzb3VyY2VUZXN0Lkluc3BlY3RvclRlc3Quc2hvd1Jlc291cmNlLnNob3dSZXNvdXJj
ZUNhbGxiYWNrKToKKyAgICAgICAgKGluaXRpYWxpemVfUmVzb3VyY2VUZXN0Lkluc3BlY3RvclRl
c3Quc2hvd1Jlc291cmNlKToKKyAgICAgICAgKGluaXRpYWxpemVfUmVzb3VyY2VUZXN0KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIvcGF1c2UtaW4taW5saW5lLXNjcmlwdC5odG1sOgor
CiAyMDEyLTA2LTI2ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEu
Y29tPgogCiAgICAgICAgIFtRdF0gQmFzZWxpbmUgbWlzc2luZyBmb3IgM0QgdHJhbnNmb3JtcyB0
ZXN0cy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVn
Z2VyLXRlc3QuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci10
ZXN0LmpzCmluZGV4IDZkNzQ5M2Y3Y2FlMDE5NjNmNzZhM2FlOWU1NjlhZGQ1YzRlMjcwNWEuLjZk
ZGFiM2Y2ZTNjOGI1MTg5NGM2NDM2M2UwMDg1NzYwN2RhMTEyMjggMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QuanMKKysrIGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItdGVzdC5qcwpAQCAtMTYzLDcgKzE2
Myw3IEBAIEluc3BlY3RvclRlc3Quc2hvd1NjcmlwdFNvdXJjZU9uU2NyaXB0c1BhbmVsID0gZnVu
Y3Rpb24ocGFuZWwsIHNjcmlwdE5hbWUsIGNhbGxiCiAgICAgICAgICAgICBpZiAoc291cmNlRnJh
bWUubG9hZGVkKQogICAgICAgICAgICAgICAgIGNhbGxiYWNrKHNvdXJjZUZyYW1lKTsKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFNuaWZmZXIoc291
cmNlRnJhbWUsICJvblRleHRWaWV3ZXJDb250ZW50TG9hZGVkIiwgY2FsbGJhY2suYmluZChudWxs
LCBzb3VyY2VGcmFtZSkpOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkU25pZmZl
cihzb3VyY2VGcmFtZSwgIm9uVGV4dEVkaXRvckNvbnRlbnRMb2FkZWQiLCBjYWxsYmFjay5iaW5k
KG51bGwsIHNvdXJjZUZyYW1lKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9saXZlLWVk
aXQtdGVzdC5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2xpdmUtZWRpdC10
ZXN0LmpzCmluZGV4IDFlY2IxNDhmMzAxODA4MTQ1YWQyZDFkNzIwODBiOTlmNGFkMGM0OWUuLjM3
YzYzYzlhYzFiNjI4NzE4NzQ4ODRkMzI3OTA2NzJlNjM5MTAyNjYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2xpdmUtZWRpdC10ZXN0LmpzCisrKyBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2xpdmUtZWRpdC10ZXN0LmpzCkBAIC0yLDcgKzIs
NyBAQCB2YXIgaW5pdGlhbGl6ZV9MaXZlRWRpdFRlc3QgPSBmdW5jdGlvbigpIHsKIAogSW5zcGVj
dG9yVGVzdC5yZXBsYWNlSW5Tb3VyY2UgPSBmdW5jdGlvbihzb3VyY2VGcmFtZSwgc3RyaW5nLCBy
ZXBsYWNlbWVudCwgY2FsbGJhY2spCiB7Ci0gICAgc291cmNlRnJhbWUuX3RleHRWaWV3ZXIuX21h
aW5QYW5lbC5zZXRSZWFkT25seShmYWxzZSk7CisgICAgc291cmNlRnJhbWUuX3RleHRFZGl0b3Iu
X21haW5QYW5lbC5zZXRSZWFkT25seShmYWxzZSk7CiAgICAgc291cmNlRnJhbWUuYmVmb3JlVGV4
dENoYW5nZWQoKTsKICAgICB2YXIgb2xkUmFuZ2UsIG5ld1JhbmdlOwogICAgIHZhciBsaW5lcyA9
IHNvdXJjZUZyYW1lLl90ZXh0TW9kZWwuX2xpbmVzOwpAQCAtMTgsNyArMTgsNyBAQCBJbnNwZWN0
b3JUZXN0LnJlcGxhY2VJblNvdXJjZSA9IGZ1bmN0aW9uKHNvdXJjZUZyYW1lLCBzdHJpbmcsIHJl
cGxhY2VtZW50LCBjYWxsYgogICAgICAgICBicmVhazsKICAgICB9CiAgICAgc291cmNlRnJhbWUu
YWZ0ZXJUZXh0Q2hhbmdlZChvbGRSYW5nZSwgbmV3UmFuZ2UpOwotICAgIHNvdXJjZUZyYW1lLl90
ZXh0Vmlld2VyLl9jb21taXRFZGl0aW5nKCk7CisgICAgc291cmNlRnJhbWUuX3RleHRFZGl0b3Iu
X2NvbW1pdEVkaXRpbmcoKTsKIH0KIAogfTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9pbnNwZWN0b3IvcmVzb3VyY2VzLXRlc3QuanMKaW5kZXggZTYyM2UzMDRiYWE0YzdkYzRlZTVk
YWNlNjY0MDIwNWRjMjI1M2ZhMC4uYjIxZjBjMjNhMmNhZGYxNTk5YTM2MmQ5YWU2YmJmNTU1MDdl
NmQ0MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3Vy
Y2VzLXRlc3QuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3Vy
Y2VzLXRlc3QuanMKQEAgLTgxLDcgKzgxLDcgQEAgSW5zcGVjdG9yVGVzdC5zaG93UmVzb3VyY2Ug
PSBmdW5jdGlvbihyZXNvdXJjZVVSTCwgY2FsbGJhY2spCiAgICAgICAgICAgICAgICAgaWYgKHNv
dXJjZUZyYW1lLmxvYWRlZCkKICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tXcmFwcGVyKHNv
dXJjZUZyYW1lKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIElu
c3BlY3RvclRlc3QuYWRkU25pZmZlcihzb3VyY2VGcmFtZSwgIm9uVGV4dFZpZXdlckNvbnRlbnRM
b2FkZWQiLCBjYWxsYmFja1dyYXBwZXIuYmluZChudWxsLCBzb3VyY2VGcmFtZSkpOworICAgICAg
ICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFNuaWZmZXIoc291cmNlRnJhbWUsICJvblRl
eHRFZGl0b3JDb250ZW50TG9hZGVkIiwgY2FsbGJhY2tXcmFwcGVyLmJpbmQobnVsbCwgc291cmNl
RnJhbWUpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3BhdXNl
LWluLWlubGluZS1zY3JpcHQuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9w
YXVzZS1pbi1pbmxpbmUtc2NyaXB0Lmh0bWwKaW5kZXggMzg5NDZhNTc0OTQ5MGUwZTlmNjQwYTJm
N2Q4MzViYzMyOGYwYmFhNy4uNzc3NDg5ZTEwOTQxZmY0ODllZjhmMWNjMDlhYmM3MTM2OGUwZTBi
NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3BhdXNlLWluLWlu
bGluZS1zY3JpcHQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvcGF1
c2UtaW4taW5saW5lLXNjcmlwdC5odG1sCkBAIC01Niw3ICs1Niw3IEBAIHZhciB0ZXN0ID0gZnVu
Y3Rpb24oKQogICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGcmFtZS5sb2FkZWQpCiAgICAgICAg
ICAgICAgICAgICAgIGRpZFNob3dTY3JpcHQoc291cmNlRnJhbWUpOwogICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRTbmlmZmVyKHNvdXJj
ZUZyYW1lLCAib25UZXh0Vmlld2VyQ29udGVudExvYWRlZCIsIGRpZFNob3dTY3JpcHQuYmluZChu
dWxsLCBzb3VyY2VGcmFtZSkpOworICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFk
ZFNuaWZmZXIoc291cmNlRnJhbWUsICJvblRleHRFZGl0b3JDb250ZW50TG9hZGVkIiwgZGlkU2hv
d1NjcmlwdC5iaW5kKG51bGwsIHNvdXJjZUZyYW1lKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGQwYjMxMTkxZGEx
NjQzZjhkNjNjYTY2OGM3NTg0NzUxMGU1NzE3ZGQuLmZkMWEwY2FiYWZkYWU2NzYyNjRhNGIxMzNm
ZjEwMTM4MWUzYTQ0NGQgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTItMDYt
MjYgIEphbiBLZXJvbW5lcyAgPGphbnhAbGludXguY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyIHNob3VsZCBiZSByZW5hbWVkIFdlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04OTkzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogaW5zcGVjdG9yL2ZpcnN0LW9wZW4tc2NyaXB0cy5odG1sLmJyb2tlbjoKKwogMjAxMi0w
Ni0yMiAgUGhpbGlwIFJvZ2VycyAgPHBkckBnb29nbGUuY29tPgogCiAgICAgICAgIE1ha2UgU3Zn
Q3ViaWNzIHBlcmZvcm1hbmNlIHRlc3QgbW9yZSBjb25zaXN0ZW50CmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL2luc3BlY3Rvci9maXJzdC1vcGVuLXNjcmlwdHMuaHRtbC5icm9rZW4gYi9Q
ZXJmb3JtYW5jZVRlc3RzL2luc3BlY3Rvci9maXJzdC1vcGVuLXNjcmlwdHMuaHRtbC5icm9rZW4K
aW5kZXggZGYxYTU2NmJhNzZkYzJlYTc1MTM4MTYwZDMzMGEzYjNhOWY4Nzc4ZS4uMzU3ZGQzZDM1
YjhmNjExNjI2MmI5ZDMxYjk1YTk4OWUxNTZlNDQ0YyAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9pbnNwZWN0b3IvZmlyc3Qtb3Blbi1zY3JpcHRzLmh0bWwuYnJva2VuCisrKyBiL1BlcmZv
cm1hbmNlVGVzdHMvaW5zcGVjdG9yL2ZpcnN0LW9wZW4tc2NyaXB0cy5odG1sLmJyb2tlbgpAQCAt
MjEsOSArMjEsOSBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgV2ViSW5zcGVjdG9yLnNob3dQ
YW5lbCgiYXVkaXRzIik7CiAgICAgICAgIHZhciBzaG93UGFuZWxUaW1lckNvb2tpZSA9IHRpbWVy
LnN0YXJ0KCJmaXJzdC1vcGVuLXNjcmlwdHMiKTsKICAgICAgICAgV2ViSW5zcGVjdG9yLnNob3dQ
YW5lbCgic2NyaXB0cyIpOwotICAgICAgICB2YXIgY291bnQgPSBXZWJJbnNwZWN0b3IucGFuZWxz
LnNjcmlwdHMudmlzaWJsZVZpZXcuX3RleHRWaWV3ZXIuX21haW5QYW5lbC5fdGV4dENodW5rcy5s
ZW5ndGg7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy52aXNpYmxlVmlldy5f
dGV4dFZpZXdlci5fbWFpblBhbmVsLl9leHBhbmRDaHVua3MoMCwgY291bnQpOwotICAgICAgICBX
ZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMudmlzaWJsZVZpZXcuX3RleHRWaWV3ZXIuX21haW5Q
YW5lbC5fcGFpbnRTY2hlZHVsZWRMaW5lcygpOworICAgICAgICB2YXIgY291bnQgPSBXZWJJbnNw
ZWN0b3IucGFuZWxzLnNjcmlwdHMudmlzaWJsZVZpZXcuX3RleHRFZGl0b3IuX21haW5QYW5lbC5f
dGV4dENodW5rcy5sZW5ndGg7CisgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy52
aXNpYmxlVmlldy5fdGV4dEVkaXRvci5fbWFpblBhbmVsLl9leHBhbmRDaHVua3MoMCwgY291bnQp
OworICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMudmlzaWJsZVZpZXcuX3RleHRF
ZGl0b3IuX21haW5QYW5lbC5fcGFpbnRTY2hlZHVsZWRMaW5lcygpOwogICAgICAgICB0aW1lci5m
aW5pc2goc2hvd1BhbmVsVGltZXJDb29raWUpOwogICAgICAgICB0aW1lci5kb25lKCJmaXJzdC1v
cGVuIik7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150486</attachid>
            <date>2012-07-02 15:46:46 -0700</date>
            <delta_ts>2012-07-03 01:49:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89939-20120702154645.patch</filename>
            <type>text/plain</type>
            <size>221510</size>
            <attacher name="Jan Keromnes">janx</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNjg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTY3NTQ2ZGM4YTEzOTBm
ZmViZWI3MDhmYTM2MmU0ODhjNDY1MjAwYy4uMmViZDE4ODk1ZTk3NjRlZDgyOGZiNGQwZmEwNTky
YjNiZGZmNmQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTA3LTAyICBKYW4g
S2Vyb21uZXMgIDxqYW54QGxpbnV4LmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBXZWJJ
bnNwZWN0b3IuVGV4dFZpZXdlciBzaG91bGQgYmUgcmVuYW1lZCBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk5
MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXhl
ZCBMYXlvdXRUZXN0cyBhbmQgUGVyZm9ybWFuY2VUZXN0cyBhY2NvcmRpbmdseS4KKworICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBpbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHk6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9BZHZhbmNlZFNlYXJjaENvbnRyb2xsZXIuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU2VhcmNoVmlldyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9KYXZhU2NyaXB0U291cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNj
cmlwdFNvdXJjZUZyYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNl
RnJhbWUucHJvdG90eXBlLl9vbkhpZGVQb3BvdmVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5K
YXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLl9hZGRCcmVha3BvaW50RGVjb3JhdGlvbik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5f
cmVtb3ZlQnJlYWtwb2ludERlY29yYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFT
Y3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUuX2VkaXRCcmVha3BvaW50Q29uZGl0aW9uLmZpbmlz
aEVkaXRpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5w
cm90b3R5cGUuX2VkaXRCcmVha3BvaW50Q29uZGl0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlLnNldEV4ZWN1dGlvbkxpbmUpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUuY2xlYXJF
eGVjdXRpb25MaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJh
bWUucHJvdG90eXBlLm9uVGV4dEVkaXRvckNvbnRlbnRMb2FkZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUudG9nZ2xlQnJlYWtwb2ludE9u
Q3VycmVudExpbmUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUu
anM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS53YXNTaG93bik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLndpbGxIaWRlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuZGVmYXVsdEZvY3VzZWRFbGVtZW50KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuZ2V0IHRleHRFZGl0b3IpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5jbGVhck1lc3NhZ2Vz
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuaGlnaGxpZ2h0
TGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9jbGVh
ckxpbmVIaWdobGlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3Rv
dHlwZS5yZXZlYWxMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90
b3R5cGUuc2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUuc2V0Q29udGVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUu
cHJvdG90eXBlLm9uVGV4dEVkaXRvckNvbnRlbnRMb2FkZWQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fc2V0VGV4dEVkaXRvckRlY29yYXRpb25zKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuc2VhcmNoQ2FuY2VsZWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5qdW1wVG9TZWFy
Y2hSZXN1bHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5h
ZGRNZXNzYWdlVG9Tb3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnBy
b3RvdHlwZS5yZW1vdmVNZXNzYWdlRnJvbVNvdXJjZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlLmluaGVyaXRTY3JvbGxQb3NpdGlvbnMpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JEZWxlZ2F0ZUZvclNvdXJjZUZyYW1lKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanM6IFJlbW92ZWQuCisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0
Vmlld2VyLmNzczogUmVtb3ZlZC4KKwogMjAxMi0wNy0wMiAgS3dhbmcgWXVsIFNlbyAgPHNreXVs
QGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIEEgc3RhcnQgImJvZHkiIHRhZyBpbiB0aGUgImlu
IGJvZHkiIGluc2VydGlvbiBtb2RlIGlzIGEgcGFyc2UgZXJyb3IKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
Q2hhbmdlTG9nCmluZGV4IGExNDJjMGQzMDFjOWExNDFhNTAzZDZiNWM5NzYwZmNiYjc1OWM3MWQu
LjRlZTUyMmY4Y2Y5MTYzOTIwYmFhY2QyZWE4YmE2ZmVjOTZmNzllMWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA3LTAyICBKYW4gS2Vyb21u
ZXMgIDxqYW54QGxpbnV4LmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBXZWJJbnNwZWN0
b3IuVGV4dFZpZXdlciBzaG91bGQgYmUgcmVuYW1lZCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk5MzkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L2luc3BlY3RvckJCLmh0bWw6CisKIDIwMTItMDctMDEgIEdlb3JnZSBTdGFpa29zICA8
c3RhaWtvc0B3ZWJraXQub3JnPgogCiAgICAgICAgIENsZWFyIHZpc2l0ZWQgbGlua3Mgd2hlbiBj
bGVhcmluZyBoaXN0b3J5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDFiZTMwMjI0OThkMjg5Y2IyNTBm
OTA5ZDQ3YzZmMzZiOGYyZDYwOTMuLmQ0MTBiOWMzOTEwYTE3ODA5ZTQwOGUyZmZiYjI4MTY2NWFl
MTRlNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTYzODIsMTAgKzYzODIsMTAgQEAKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1RhYmJlZEVkaXRvckNvbnRhaW5lci5qcycsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9UYWJiZWRQYW5lLmpzJywKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvZnJvbnQtZW5kL1Rlc3RDb250cm9sbGVyLmpzJywKKyAgICAgICAgICAgICdp
bnNwZWN0b3IvZnJvbnQtZW5kL1RleHRFZGl0b3IuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9mcm9udC1lbmQvVGV4dEVkaXRvckhpZ2hsaWdodGVyLmpzJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL1RleHRFZGl0b3JNb2RlbC5qcycsCiAgICAgICAgICAgICAnaW5zcGVj
dG9yL2Zyb250LWVuZC9UZXh0UHJvbXB0LmpzJywKLSAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL1RleHRWaWV3ZXIuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQv
VGltZWxpbmVGcmFtZUNvbnRyb2xsZXIuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9u
dC1lbmQvVGltZWxpbmVNYW5hZ2VyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQt
ZW5kL1RpbWVsaW5lTW9kZWwuanMnLApAQCAtNjQzMiw4ICs2NDMyLDggQEAKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvZnJvbnQtZW5kL3NjcmlwdHNQYW5lbC5jc3MnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9mcm9udC1lbmQvc3BsaXRWaWV3LmNzcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9y
L2Zyb250LWVuZC90YWJiZWRQYW5lLmNzcycsCisgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250
LWVuZC90ZXh0RWRpdG9yLmNzcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC90
ZXh0UHJvbXB0LmNzcycsCi0gICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0Vmll
d2VyLmNzcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC90aW1lbGluZVBhbmVs
LmNzcycsCiAgICAgICAgIF0sCiAgICAgICAgICd3ZWJpbnNwZWN0b3JfdWdsaWZ5anNfZmlsZXMn
OiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4
IGU3NzZjNDk3NDUyNzdlMGVlNzhlYjhkZDk3ODQ2YjZiMzNlN2UyMDAuLmUzZDdiNmNjNjg5NDUz
NTA2MWMwYjg3ZWM4ZTM5OTcyZDFmMjhlZDggMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC03NTQ0NiwyNyArNzU0NDYsMjcgQEAKIAkJCQkJPgog
CQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcVGV4dEVkaXRvckhpZ2hsaWdodGVyLmpzIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcdGV4dEVkaXRvci5jc3MiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+
CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFRl
eHRFZGl0b3JNb2RlbC5qcyIKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXFRleHRFZGl0b3IuanMiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKLQkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXHRleHRQcm9tcHQuY3NzIgorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGV4dEVkaXRvckhpZ2hsaWdo
dGVyLmpzIgogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0
aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxUZXh0UHJvbXB0LmpzIgorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGV4dEVkaXRvck1vZGVsLmpzIgogCQkJCQk+CiAJ
CQkJPC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFx0ZXh0Vmlld2VyLmNzcyIKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXHRleHRQcm9tcHQuY3NzIgogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxl
Ci0JCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxUZXh0Vmlld2VyLmpz
IgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVGV4dFByb21wdC5q
cyIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5IGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5CmluZGV4IDUyNTYzOGQzMGJlM2I5YTY1YzQ2ZjFm
ZjA0ODcyZTJlZjc1YjZhOGYuLmQ0MGQ5ZjA3MmFkNDY3ODY3YmI2NTMxZWIxNDI5OGFhMDAzNGYy
MjEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250LWVu
ZC5weQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkK
QEAgLTE0MSwxMCArMTQxLDEwIEBAIG1vZHVsZXMgPSBbCiAgICAgICAgICAgICAiU3BsaXRWaWV3
LmpzIiwKICAgICAgICAgICAgICJTdGF0dXNCYXJCdXR0b24uanMiLAogICAgICAgICAgICAgIlRh
YmJlZFBhbmUuanMiLAotICAgICAgICAgICAgIlRleHRFZGl0b3JNb2RlbC5qcyIsCisgICAgICAg
ICAgICAiVGV4dEVkaXRvci5qcyIsCiAgICAgICAgICAgICAiVGV4dEVkaXRvckhpZ2hsaWdodGVy
LmpzIiwKKyAgICAgICAgICAgICJUZXh0RWRpdG9yTW9kZWwuanMiLAogICAgICAgICAgICAgIlRl
eHRQcm9tcHQuanMiLAotICAgICAgICAgICAgIlRleHRWaWV3ZXIuanMiLAogICAgICAgICAgICAg
IlRvb2xiYXIuanMiLAogICAgICAgICAgICAgIlVJVXRpbHMuanMiLAogICAgICAgICAgICAgIlZp
ZXcuanMiLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9B
ZHZhbmNlZFNlYXJjaENvbnRyb2xsZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0FkdmFuY2VkU2VhcmNoQ29udHJvbGxlci5qcwppbmRleCBkN2VjMjE0ZjMzODEwMTJm
N2Y5NTRkMTZiMzkyM2NlYjIyMTJiZDE0Li5iODJmNzc0ODViZjUwNDM0ODU4OGY0NzJiMGJiMzk5
NWI3ZDcwZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0FkdmFuY2VkU2VhcmNoQ29udHJvbGxlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0FkdmFuY2VkU2VhcmNoQ29udHJvbGxlci5qcwpAQCAtMTcyLDcgKzE3Miw3
IEBAIFdlYkluc3BlY3Rvci5BZHZhbmNlZFNlYXJjaENvbnRyb2xsZXIucHJvdG90eXBlID0gewog
V2ViSW5zcGVjdG9yLlNlYXJjaFZpZXcgPSBmdW5jdGlvbihjb250cm9sbGVyKQogewogICAgIFdl
Ykluc3BlY3Rvci5WaWV3LmNhbGwodGhpcyk7Ci0gICAgdGhpcy5yZWdpc3RlclJlcXVpcmVkQ1NT
KCJ0ZXh0Vmlld2VyLmNzcyIpOworICAgIHRoaXMucmVnaXN0ZXJSZXF1aXJlZENTUygidGV4dEVk
aXRvci5jc3MiKTsKICAgICAKICAgICB0aGlzLl9jb250cm9sbGVyID0gY29udHJvbGxlcjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9KYXZhU2NyaXB0
U291cmNlRnJhbWUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFT
Y3JpcHRTb3VyY2VGcmFtZS5qcwppbmRleCBmNTliMDljNjc5YmUxZDJlOGExZTljZmEzMDI2NDVi
ZjBkODIzNjk0Li5lOGYwMmMzOWZkNDY1MTZiMDY3MjhjY2IwMjExYjk0MjdmNmFmYTI4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRTb3Vy
Y2VGcmFtZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFT
Y3JpcHRTb3VyY2VGcmFtZS5qcwpAQCAtNDYsMTEgKzQ2LDExIEBAIFdlYkluc3BlY3Rvci5KYXZh
U2NyaXB0U291cmNlRnJhbWUgPSBmdW5jdGlvbihzY3JpcHRzUGFuZWwsIGphdmFTY3JpcHRTb3Vy
Y2UpCiAKICAgICBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUuY2FsbCh0aGlzLCBqYXZhU2NyaXB0
U291cmNlKTsKIAotICAgIHRoaXMuX3BvcG92ZXJIZWxwZXIgPSBuZXcgV2ViSW5zcGVjdG9yLk9i
amVjdFBvcG92ZXJIZWxwZXIodGhpcy50ZXh0Vmlld2VyLmVsZW1lbnQsCisgICAgdGhpcy5fcG9w
b3ZlckhlbHBlciA9IG5ldyBXZWJJbnNwZWN0b3IuT2JqZWN0UG9wb3ZlckhlbHBlcih0aGlzLnRl
eHRFZGl0b3IuZWxlbWVudCwKICAgICAgICAgICAgIHRoaXMuX2dldFBvcG92ZXJBbmNob3IuYmlu
ZCh0aGlzKSwgdGhpcy5fcmVzb2x2ZU9iamVjdEZvclBvcG92ZXIuYmluZCh0aGlzKSwgdGhpcy5f
b25IaWRlUG9wb3Zlci5iaW5kKHRoaXMpLCB0cnVlKTsKIAotICAgIHRoaXMudGV4dFZpZXdlci5l
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMuX29uTW91c2VEb3duLmJp
bmQodGhpcyksIHRydWUpOwotICAgIHRoaXMudGV4dFZpZXdlci5lbGVtZW50LmFkZEV2ZW50TGlz
dGVuZXIoImtleWRvd24iLCB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKSwgdHJ1ZSk7CisgICAg
dGhpcy50ZXh0RWRpdG9yLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhp
cy5fb25Nb3VzZURvd24uYmluZCh0aGlzKSwgdHJ1ZSk7CisgICAgdGhpcy50ZXh0RWRpdG9yLmVs
ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuX29uS2V5RG93bi5iaW5kKHRo
aXMpLCB0cnVlKTsKIAogICAgIHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVu
ZXIoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkV2ZW50cy5CcmVha3BvaW50QWRkZWQs
IHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7CiAgICAgdGhpcy5fYnJlYWtwb2ludE1hbmFn
ZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuRXZlbnRz
LkJyZWFrcG9pbnRSZW1vdmVkLCB0aGlzLl9icmVha3BvaW50UmVtb3ZlZCwgdGhpcyk7CkBAIC0y
ODYsNyArMjg2LDcgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5
cGUgPSB7CiAgICAgICAgIGlmICghaGlnaGxpZ2h0RWxlbWVudCkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgLy8gRklYTUU6IHRoZSB0ZXh0IGVkaXRvciBzaG91bGQgbWFpbnRhaW4gaGln
aGxpZ2h0IG9uIGl0cyBvd24uIFRoZSBjaGVjayBiZWxvdyBpcyBhIHdvcmthcm91bmQgZm9yCi0g
ICAgICAgIC8vIHRoZSBjYXNlIHdoZW4gaGlnaGxpZ2h0IGVsZW1lbnQgaXMgZGV0YWNoZWQgZnJv
bSBET00gYnkgdGhlIFRleHRWaWV3ZXIgd2hlbiByZS1idWlsZGluZyB0aGUgRE9NLgorICAgICAg
ICAvLyB0aGUgY2FzZSB3aGVuIGhpZ2hsaWdodCBlbGVtZW50IGlzIGRldGFjaGVkIGZyb20gRE9N
IGJ5IHRoZSBUZXh0RWRpdG9yIHdoZW4gcmUtYnVpbGRpbmcgdGhlIERPTS4KICAgICAgICAgdmFy
IHBhcmVudEVsZW1lbnQgPSBoaWdobGlnaHRFbGVtZW50LnBhcmVudEVsZW1lbnQ7CiAgICAgICAg
IGlmIChwYXJlbnRFbGVtZW50KSB7CiAgICAgICAgICAgICB2YXIgY2hpbGQgPSBoaWdobGlnaHRF
bGVtZW50LmZpcnN0Q2hpbGQ7CkBAIC0zMzUsMjcgKzMzNSwyNyBAQCBXZWJJbnNwZWN0b3IuSmF2
YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgfTsKICAgICAgICAgdGhp
cy50ZXh0TW9kZWwuc2V0QXR0cmlidXRlKGxpbmVOdW1iZXIsICJicmVha3BvaW50IiwgYnJlYWtw
b2ludCk7CiAKLSAgICAgICAgdGhpcy50ZXh0Vmlld2VyLmJlZ2luVXBkYXRlcygpOwotICAgICAg
ICB0aGlzLnRleHRWaWV3ZXIuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFr
cG9pbnQiKTsKKyAgICAgICAgdGhpcy50ZXh0RWRpdG9yLmJlZ2luVXBkYXRlcygpOworICAgICAg
ICB0aGlzLnRleHRFZGl0b3IuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFr
cG9pbnQiKTsKICAgICAgICAgaWYgKCFlbmFibGVkIHx8IChtdXRlZFdoaWxlRWRpdGluZyAmJiAh
dGhpcy5famF2YVNjcmlwdFNvdXJjZS5zdXBwb3J0c0VuYWJsZWRCcmVha3BvaW50c1doaWxlRWRp
dGluZygpKSkKLSAgICAgICAgICAgIHRoaXMudGV4dFZpZXdlci5hZGREZWNvcmF0aW9uKGxpbmVO
dW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZCIpOworICAgICAgICAgICAgdGhpcy50
ZXh0RWRpdG9yLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50LWRp
c2FibGVkIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMudGV4dFZpZXdlci5yZW1v
dmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZCIpOwor
ICAgICAgICAgICAgdGhpcy50ZXh0RWRpdG9yLnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwg
IndlYmtpdC1icmVha3BvaW50LWRpc2FibGVkIik7CiAgICAgICAgIGlmICghIWNvbmRpdGlvbikK
LSAgICAgICAgICAgIHRoaXMudGV4dFZpZXdlci5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3
ZWJraXQtYnJlYWtwb2ludC1jb25kaXRpb25hbCIpOworICAgICAgICAgICAgdGhpcy50ZXh0RWRp
dG9yLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50LWNvbmRpdGlv
bmFsIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMudGV4dFZpZXdlci5yZW1vdmVE
ZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1jb25kaXRpb25hbCIpOwot
ICAgICAgICB0aGlzLnRleHRWaWV3ZXIuZW5kVXBkYXRlcygpOworICAgICAgICAgICAgdGhpcy50
ZXh0RWRpdG9yLnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50
LWNvbmRpdGlvbmFsIik7CisgICAgICAgIHRoaXMudGV4dEVkaXRvci5lbmRVcGRhdGVzKCk7CiAg
ICAgfSwKIAogICAgIF9yZW1vdmVCcmVha3BvaW50RGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51
bWJlcikKICAgICB7CiAgICAgICAgIHRoaXMudGV4dE1vZGVsLnJlbW92ZUF0dHJpYnV0ZShsaW5l
TnVtYmVyLCAiYnJlYWtwb2ludCIpOwotICAgICAgICB0aGlzLnRleHRWaWV3ZXIuYmVnaW5VcGRh
dGVzKCk7Ci0gICAgICAgIHRoaXMudGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1i
ZXIsICJ3ZWJraXQtYnJlYWtwb2ludCIpOwotICAgICAgICB0aGlzLnRleHRWaWV3ZXIucmVtb3Zl
RGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtZGlzYWJsZWQiKTsKLSAg
ICAgICAgdGhpcy50ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwgIndlYmtp
dC1icmVha3BvaW50LWNvbmRpdGlvbmFsIik7Ci0gICAgICAgIHRoaXMudGV4dFZpZXdlci5lbmRV
cGRhdGVzKCk7CisgICAgICAgIHRoaXMudGV4dEVkaXRvci5iZWdpblVwZGF0ZXMoKTsKKyAgICAg
ICAgdGhpcy50ZXh0RWRpdG9yLnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1i
cmVha3BvaW50Iik7CisgICAgICAgIHRoaXMudGV4dEVkaXRvci5yZW1vdmVEZWNvcmF0aW9uKGxp
bmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZCIpOworICAgICAgICB0aGlzLnRl
eHRFZGl0b3IucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQt
Y29uZGl0aW9uYWwiKTsKKyAgICAgICAgdGhpcy50ZXh0RWRpdG9yLmVuZFVwZGF0ZXMoKTsKICAg
ICB9LAogCiAgICAgX29uTW91c2VEb3duOiBmdW5jdGlvbihldmVudCkKQEAgLTM5MSwxMSArMzkx
LDExIEBAIFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlID0gewog
ICAgIF9lZGl0QnJlYWtwb2ludENvbmRpdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgYnJlYWtw
b2ludCkKICAgICB7CiAgICAgICAgIHRoaXMuX2NvbmRpdGlvbkVsZW1lbnQgPSB0aGlzLl9jcmVh
dGVDb25kaXRpb25FbGVtZW50KGxpbmVOdW1iZXIpOwotICAgICAgICB0aGlzLnRleHRWaWV3ZXIu
YWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCB0aGlzLl9jb25kaXRpb25FbGVtZW50KTsKKyAgICAg
ICAgdGhpcy50ZXh0RWRpdG9yLmFkZERlY29yYXRpb24obGluZU51bWJlciwgdGhpcy5fY29uZGl0
aW9uRWxlbWVudCk7CiAKICAgICAgICAgZnVuY3Rpb24gZmluaXNoRWRpdGluZyhjb21taXR0ZWQs
IGVsZW1lbnQsIG5ld1RleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMudGV4dFZpZXdl
ci5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsIHRoaXMuX2NvbmRpdGlvbkVsZW1lbnQpOwor
ICAgICAgICAgICAgdGhpcy50ZXh0RWRpdG9yLnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwg
dGhpcy5fY29uZGl0aW9uRWxlbWVudCk7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fY29uZGl0
aW9uRWRpdG9yRWxlbWVudDsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jb25kaXRpb25FbGVt
ZW50OwogICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQpCkBAIC00MzgsNyArNDM4LDcgQEAgV2Vi
SW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgewogICAg
ICAgICB0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyID0gbGluZU51bWJlcjsKICAgICAgICAgaWYg
KHRoaXMubG9hZGVkKSB7Ci0gICAgICAgICAgICB0aGlzLnRleHRWaWV3ZXIuYWRkRGVjb3JhdGlv
bihsaW5lTnVtYmVyLCAid2Via2l0LWV4ZWN1dGlvbi1saW5lIik7CisgICAgICAgICAgICB0aGlz
LnRleHRFZGl0b3IuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWV4ZWN1dGlvbi1s
aW5lIik7CiAgICAgICAgICAgICB0aGlzLnJldmVhbExpbmUodGhpcy5fZXhlY3V0aW9uTGluZU51
bWJlcik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRoaXMuY2FuRWRpdFNvdXJjZSgpKQpAQCAt
NDQ4LDcgKzQ0OCw3IEBAIFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90
eXBlID0gewogICAgIGNsZWFyRXhlY3V0aW9uTGluZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAg
ICAgaWYgKHRoaXMubG9hZGVkICYmIHR5cGVvZiB0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyID09
PSAibnVtYmVyIikKLSAgICAgICAgICAgIHRoaXMudGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9u
KHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIsICJ3ZWJraXQtZXhlY3V0aW9uLWxpbmUiKTsKKyAg
ICAgICAgICAgIHRoaXMudGV4dEVkaXRvci5yZW1vdmVEZWNvcmF0aW9uKHRoaXMuX2V4ZWN1dGlv
bkxpbmVOdW1iZXIsICJ3ZWJraXQtZXhlY3V0aW9uLWxpbmUiKTsKICAgICAgICAgZGVsZXRlIHRo
aXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXI7CiAgICAgfSwKIApAQCAtNTE2LDcgKzUxNiw3IEBAIFdl
Ykluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICB0
aGlzLmNsZWFyTWVzc2FnZXMoKTsKICAgICB9LAogCi0gICAgb25UZXh0Vmlld2VyQ29udGVudExv
YWRlZDogZnVuY3Rpb24oKQorICAgIG9uVGV4dEVkaXRvckNvbnRlbnRMb2FkZWQ6IGZ1bmN0aW9u
KCkKICAgICB7CiAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fZXhlY3V0aW9uTGluZU51bWJlciA9
PT0gIm51bWJlciIpCiAgICAgICAgICAgICB0aGlzLnNldEV4ZWN1dGlvbkxpbmUodGhpcy5fZXhl
Y3V0aW9uTGluZU51bWJlcik7CkBAIC01NTIsNyArNTUyLDcgQEAgV2ViSW5zcGVjdG9yLkphdmFT
Y3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAKICAgICB0b2dnbGVCcmVha3BvaW50T25D
dXJyZW50TGluZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRo
aXMudGV4dFZpZXdlci5zZWxlY3Rpb24oKTsKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMu
dGV4dEVkaXRvci5zZWxlY3Rpb24oKTsKICAgICAgICAgaWYgKCFzZWxlY3Rpb24pCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIHRoaXMuX3RvZ2dsZUJyZWFrcG9pbnQoc2VsZWN0aW9uLnN0
YXJ0TGluZSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Tb3VyY2VGcmFtZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlRnJhbWUuanMKaW5kZXggZTZiZTZmNzE5NzdjNjQ2NjA5MDc3ODVkYzFjMzljNDgx
MGFkNDhjYy4uMzdhYzFlZjYyMmNmODczNjQxYjQ1MWU1OTkyNjBlZjJkNzkwOTEwZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCkBA
IC00Myw4ICs0Myw4IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZSA9IGZ1bmN0aW9uKGNvbnRl
bnRQcm92aWRlcikKIAogICAgIHRoaXMuX3RleHRNb2RlbCA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvck1vZGVsKCk7CiAKLSAgICB2YXIgdGV4dFZpZXdlckRlbGVnYXRlID0gbmV3IFdlYklu
c3BlY3Rvci5UZXh0Vmlld2VyRGVsZWdhdGVGb3JTb3VyY2VGcmFtZSh0aGlzKTsKLSAgICB0aGlz
Ll90ZXh0Vmlld2VyID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyKHRoaXMuX3RleHRNb2Rl
bCwgdGhpcy5fdXJsLCB0ZXh0Vmlld2VyRGVsZWdhdGUpOworICAgIHZhciB0ZXh0RWRpdG9yRGVs
ZWdhdGUgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JEZWxlZ2F0ZUZvclNvdXJjZUZyYW1l
KHRoaXMpOworICAgIHRoaXMuX3RleHRFZGl0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3IodGhpcy5fdGV4dE1vZGVsLCB0aGlzLl91cmwsIHRleHRFZGl0b3JEZWxlZ2F0ZSk7CiAKICAg
ICB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPSAtMTsKICAgICB0aGlzLl9zZWFyY2hS
ZXN1bHRzID0gW107CkBAIC01Myw3ICs1Myw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZSA9
IGZ1bmN0aW9uKGNvbnRlbnRQcm92aWRlcikKICAgICB0aGlzLl9yb3dNZXNzYWdlcyA9IHt9Owog
ICAgIHRoaXMuX21lc3NhZ2VCdWJibGVzID0ge307CiAKLSAgICB0aGlzLl90ZXh0Vmlld2VyLnNl
dFJlYWRPbmx5KCF0aGlzLmNhbkVkaXRTb3VyY2UoKSk7CisgICAgdGhpcy5fdGV4dEVkaXRvci5z
ZXRSZWFkT25seSghdGhpcy5jYW5FZGl0U291cmNlKCkpOwogfQogCiBXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUuY3JlYXRlU2VhcmNoUmVnZXggPSBmdW5jdGlvbihxdWVyeSkKQEAgLTc5LDE0ICs3
OSwxNCBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgIHdhc1No
b3duOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl9lbnN1cmVDb250ZW50TG9hZGVk
KCk7Ci0gICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuc2hvdyh0aGlzLmVsZW1lbnQpOworICAgICAg
ICB0aGlzLl90ZXh0RWRpdG9yLnNob3codGhpcy5lbGVtZW50KTsKICAgICB9LAogCiAgICAgd2ls
bEhpZGU6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5WaWV3LnByb3Rv
dHlwZS53aWxsSGlkZS5jYWxsKHRoaXMpOwogICAgICAgICBpZiAodGhpcy5sb2FkZWQpCi0gICAg
ICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmZyZWVDYWNoZWRFbGVtZW50cygpOworICAgICAgICAg
ICAgdGhpcy5fdGV4dEVkaXRvci5mcmVlQ2FjaGVkRWxlbWVudHMoKTsKIAogICAgICAgICB0aGlz
Ll9jbGVhckxpbmVIaWdobGlnaHQoKTsKICAgICAgICAgdGhpcy5fY2xlYXJMaW5lVG9SZXZlYWwo
KTsKQEAgLTk0LDcgKzk0LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9
IHsKIAogICAgIGRlZmF1bHRGb2N1c2VkRWxlbWVudDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX3RleHRWaWV3ZXIuZGVmYXVsdEZvY3VzZWRFbGVtZW50KCk7CisgICAg
ICAgIHJldHVybiB0aGlzLl90ZXh0RWRpdG9yLmRlZmF1bHRGb2N1c2VkRWxlbWVudCgpOwogICAg
IH0sCiAKICAgICBnZXQgbG9hZGVkKCkKQEAgLTEwNyw5ICsxMDcsOSBAQCBXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9LAog
Ci0gICAgZ2V0IHRleHRWaWV3ZXIoKQorICAgIGdldCB0ZXh0RWRpdG9yKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl90ZXh0Vmlld2VyOworICAgICAgICByZXR1cm4gdGhpcy5fdGV4dEVk
aXRvcjsKICAgICB9LAogCiAgICAgX2Vuc3VyZUNvbnRlbnRMb2FkZWQ6IGZ1bmN0aW9uKCkKQEAg
LTEzOCw3ICsxMzgsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewog
ICAgICAgICB0aGlzLl9yb3dNZXNzYWdlcyA9IHt9OwogICAgICAgICB0aGlzLl9tZXNzYWdlQnVi
YmxlcyA9IHt9OwogCi0gICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuZG9SZXNpemUoKTsKKyAgICAg
ICAgdGhpcy5fdGV4dEVkaXRvci5kb1Jlc2l6ZSgpOwogICAgIH0sCiAKICAgICBnZXQgdGV4dE1v
ZGVsKCkKQEAgLTE1NSw3ICsxNTUsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90
eXBlID0gewogICAgIHsKICAgICAgICAgdGhpcy5fY2xlYXJMaW5lVG9SZXZlYWwoKTsKICAgICAg
ICAgaWYgKHRoaXMubG9hZGVkKQotICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5oaWdobGln
aHRMaW5lKGxpbmUpOworICAgICAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5oaWdobGlnaHRMaW5l
KGxpbmUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0aGlzLl9saW5lVG9IaWdobGlnaHQg
PSBsaW5lOwogICAgIH0sCkBAIC0xNjMsNyArMTYzLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZSA9IHsKICAgICBfY2xlYXJMaW5lSGlnaGxpZ2h0OiBmdW5jdGlvbigpCiAg
ICAgewogICAgICAgICBpZiAodGhpcy5sb2FkZWQpCi0gICAgICAgICAgICB0aGlzLl90ZXh0Vmll
d2VyLmNsZWFyTGluZUhpZ2hsaWdodCgpOworICAgICAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5j
bGVhckxpbmVIaWdobGlnaHQoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZGVsZXRlIHRo
aXMuX2xpbmVUb0hpZ2hsaWdodDsKICAgICB9LApAQCAtMTcyLDcgKzE3Miw3IEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICB0aGlzLl9jbGVh
ckxpbmVIaWdobGlnaHQoKTsKICAgICAgICAgaWYgKHRoaXMubG9hZGVkKQotICAgICAgICAgICAg
dGhpcy5fdGV4dFZpZXdlci5yZXZlYWxMaW5lKGxpbmUpOworICAgICAgICAgICAgdGhpcy5fdGV4
dEVkaXRvci5yZXZlYWxMaW5lKGxpbmUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0aGlz
Ll9saW5lVG9SZXZlYWwgPSBsaW5lOwogICAgIH0sCkBAIC0xODMsNyArMTgzLDcgQEAgV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICBzZXRTZWxlY3Rpb246IGZ1bmN0
aW9uKHRleHRSYW5nZSkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLmxvYWRlZCkKLSAgICAgICAg
ICAgIHRoaXMuX3RleHRWaWV3ZXIuc2V0U2VsZWN0aW9uKHRleHRSYW5nZSk7CisgICAgICAgICAg
ICB0aGlzLl90ZXh0RWRpdG9yLnNldFNlbGVjdGlvbih0ZXh0UmFuZ2UpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Ub1NldCA9IHRleHRSYW5nZTsKICAgICB9LApA
QCAtMjEwLDE0ICsyMTAsMTQgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9
IHsKICAgICAgKi8KICAgICBzZXRDb250ZW50OiBmdW5jdGlvbihjb250ZW50LCBjb250ZW50RW5j
b2RlZCwgbWltZVR5cGUpCiAgICAgewotICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLm1pbWVUeXBl
ID0gbWltZVR5cGU7CisgICAgICAgIHRoaXMuX3RleHRFZGl0b3IubWltZVR5cGUgPSBtaW1lVHlw
ZTsKIAogICAgICAgICB0aGlzLl9sb2FkZWQgPSB0cnVlOwogICAgICAgICB0aGlzLl90ZXh0TW9k
ZWwuc2V0VGV4dChjb250ZW50IHx8ICIiKTsKIAotICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmJl
Z2luVXBkYXRlcygpOworICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLmJlZ2luVXBkYXRlcygpOwog
Ci0gICAgICAgIHRoaXMuX3NldFRleHRWaWV3ZXJEZWNvcmF0aW9ucygpOworICAgICAgICB0aGlz
Ll9zZXRUZXh0RWRpdG9yRGVjb3JhdGlvbnMoKTsKIAogICAgICAgICBpZiAodHlwZW9mIHRoaXMu
X2xpbmVUb0hpZ2hsaWdodCA9PT0gIm51bWJlciIpIHsKICAgICAgICAgICAgIHRoaXMuaGlnaGxp
Z2h0TGluZSh0aGlzLl9saW5lVG9IaWdobGlnaHQpOwpAQCAtMjM5LDI1ICsyMzksMjUgQEAgV2Vi
SW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGRlbGV0ZSB0
aGlzLl9kZWxheWVkRmluZFNlYXJjaE1hdGNoZXM7CiAgICAgICAgIH0KIAotICAgICAgICB0aGlz
Lm9uVGV4dFZpZXdlckNvbnRlbnRMb2FkZWQoKTsKKyAgICAgICAgdGhpcy5vblRleHRFZGl0b3JD
b250ZW50TG9hZGVkKCk7CiAKLSAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5lbmRVcGRhdGVzKCk7
CisgICAgICAgIHRoaXMuX3RleHRFZGl0b3IuZW5kVXBkYXRlcygpOwogICAgIH0sCiAKLSAgICBv
blRleHRWaWV3ZXJDb250ZW50TG9hZGVkOiBmdW5jdGlvbigpIHt9LAorICAgIG9uVGV4dEVkaXRv
ckNvbnRlbnRMb2FkZWQ6IGZ1bmN0aW9uKCkge30sCiAKLSAgICBfc2V0VGV4dFZpZXdlckRlY29y
YXRpb25zOiBmdW5jdGlvbigpCisgICAgX3NldFRleHRFZGl0b3JEZWNvcmF0aW9uczogZnVuY3Rp
b24oKQogICAgIHsKICAgICAgICAgdGhpcy5fcm93TWVzc2FnZXMgPSB7fTsKICAgICAgICAgdGhp
cy5fbWVzc2FnZUJ1YmJsZXMgPSB7fTsKIAotICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmJlZ2lu
VXBkYXRlcygpOworICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLmJlZ2luVXBkYXRlcygpOwogCiAg
ICAgICAgIHRoaXMuX2FkZEV4aXN0aW5nTWVzc2FnZXNUb1NvdXJjZSgpOwogCi0gICAgICAgIHRo
aXMuX3RleHRWaWV3ZXIuZG9SZXNpemUoKTsKKyAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5kb1Jl
c2l6ZSgpOwogCi0gICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuZW5kVXBkYXRlcygpOworICAgICAg
ICB0aGlzLl90ZXh0RWRpdG9yLmVuZFVwZGF0ZXMoKTsKICAgICB9LAogCiAgICAgcGVyZm9ybVNl
YXJjaDogZnVuY3Rpb24ocXVlcnksIGNhbGxiYWNrKQpAQCAtMjkyLDcgKzI5Miw3IEBAIFdlYklu
c3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy5fY3VycmVu
dFNlYXJjaFJlc3VsdEluZGV4ID0gLTE7CiAgICAgICAgIHRoaXMuX3NlYXJjaFJlc3VsdHMgPSBb
XTsKLSAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5tYXJrQW5kUmV2ZWFsUmFuZ2UobnVsbCk7Cisg
ICAgICAgIHRoaXMuX3RleHRFZGl0b3IubWFya0FuZFJldmVhbFJhbmdlKG51bGwpOwogICAgIH0s
CiAKICAgICBoYXNTZWFyY2hSZXN1bHRzOiBmdW5jdGlvbigpCkBAIC0zNDAsNyArMzQwLDcgQEAg
V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCF0aGlz
LmxvYWRlZCB8fCAhdGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGgpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9IChpbmRleCArIHRo
aXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKSAlIHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoOwot
ICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLm1hcmtBbmRSZXZlYWxSYW5nZSh0aGlzLl9zZWFyY2hS
ZXN1bHRzW3RoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleF0pOworICAgICAgICB0aGlzLl90
ZXh0RWRpdG9yLm1hcmtBbmRSZXZlYWxSYW5nZSh0aGlzLl9zZWFyY2hSZXN1bHRzW3RoaXMuX2N1
cnJlbnRTZWFyY2hSZXN1bHRJbmRleF0pOwogICAgIH0sCiAKICAgICBfY29sbGVjdFJlZ2V4TWF0
Y2hlczogZnVuY3Rpb24ocmVnZXhPYmplY3QpCkBAIC0zODEsNyArMzgxLDcgQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIG1lc3NhZ2VCdWJibGVF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICAgICBtZXNz
YWdlQnViYmxlRWxlbWVudC5jbGFzc05hbWUgPSAid2Via2l0LWh0bWwtbWVzc2FnZS1idWJibGUi
OwogICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUJ1YmJsZXNbbGluZU51bWJlcl0gPSBtZXNzYWdl
QnViYmxlRWxlbWVudDsKLSAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRkRGVjb3JhdGlv
bihsaW5lTnVtYmVyLCBtZXNzYWdlQnViYmxlRWxlbWVudCk7CisgICAgICAgICAgICB0aGlzLl90
ZXh0RWRpdG9yLmFkZERlY29yYXRpb24obGluZU51bWJlciwgbWVzc2FnZUJ1YmJsZUVsZW1lbnQp
OwogICAgICAgICB9CiAKICAgICAgICAgdmFyIHJvd01lc3NhZ2VzID0gdGhpcy5fcm93TWVzc2Fn
ZXNbbGluZU51bWJlcl07CkBAIC00NjMsNyArNDYzLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGlmICghcm93TWVzc2FnZXMubGVuZ3RoKQog
ICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9yb3dNZXNzYWdlc1tsaW5lTnVtYmVyXTsKICAg
ICAgICAgICAgIGlmICghbWVzc2FnZUJ1YmJsZUVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQpIHsK
LSAgICAgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24obGluZU51
bWJlciwgbWVzc2FnZUJ1YmJsZUVsZW1lbnQpOworICAgICAgICAgICAgICAgIHRoaXMuX3RleHRF
ZGl0b3IucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCBtZXNzYWdlQnViYmxlRWxlbWVudCk7
CiAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX21lc3NhZ2VCdWJibGVzW2xpbmVOdW1iZXJd
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC00ODAsNyArNDgwLDcgQEAg
V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKIAogICAgIGluaGVyaXRTY3Jv
bGxQb3NpdGlvbnM6IGZ1bmN0aW9uKHNvdXJjZUZyYW1lKQogICAgIHsKLSAgICAgICAgdGhpcy5f
dGV4dFZpZXdlci5pbmhlcml0U2Nyb2xsUG9zaXRpb25zKHNvdXJjZUZyYW1lLl90ZXh0Vmlld2Vy
KTsKKyAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5pbmhlcml0U2Nyb2xsUG9zaXRpb25zKHNvdXJj
ZUZyYW1lLl90ZXh0RWRpdG9yKTsKICAgICB9LAogCiAgICAgLyoqCkBAIC01MDMsMTUgKzUwMywx
NSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYklu
c3BlY3Rvci5WaWV3LnByb3RvdHlwZTsKIAogCiAvKioKLSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNw
ZWN0b3IuVGV4dFZpZXdlckRlbGVnYXRlfQorICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5U
ZXh0RWRpdG9yRGVsZWdhdGV9CiAgKiBAY29uc3RydWN0b3IKICAqLwotV2ViSW5zcGVjdG9yLlRl
eHRWaWV3ZXJEZWxlZ2F0ZUZvclNvdXJjZUZyYW1lID0gZnVuY3Rpb24oc291cmNlRnJhbWUpCitX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvckRlbGVnYXRlRm9yU291cmNlRnJhbWUgPSBmdW5jdGlvbihz
b3VyY2VGcmFtZSkKIHsKICAgICB0aGlzLl9zb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lOwogfQog
Ci1XZWJJbnNwZWN0b3IuVGV4dFZpZXdlckRlbGVnYXRlRm9yU291cmNlRnJhbWUucHJvdG90eXBl
ID0geworV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JEZWxlZ2F0ZUZvclNvdXJjZUZyYW1lLnByb3Rv
dHlwZSA9IHsKICAgICBiZWZvcmVUZXh0Q2hhbmdlZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAg
ICAgdGhpcy5fc291cmNlRnJhbWUuYmVmb3JlVGV4dENoYW5nZWQoKTsKQEAgLTUzOCw0ICs1Mzgs
NCBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlckRlbGVnYXRlRm9yU291cmNlRnJhbWUucHJvdG90
eXBlID0gewogICAgIH0KIH0KIAotV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXJEZWxlZ2F0ZUZvclNv
dXJjZUZyYW1lLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlckRl
bGVnYXRlLnByb3RvdHlwZTsKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yRGVsZWdhdGVGb3JTb3Vy
Y2VGcmFtZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JEZWxl
Z2F0ZS5wcm90b3R5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1RleHRFZGl0b3IuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1RleHRFZGl0b3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTdhMzg0MmJiNGE4MDBhZmY2NzQzZWQ1OTAyOGRh
NzY4NzRhZjA0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvVGV4dEVkaXRvci5qcwpAQCAtMCwwICsxLDI1NzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZXh0ZW5kcyB7
V2ViSW5zcGVjdG9yLlZpZXd9CisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNb2RlbH0gdGV4dE1vZGVsCisgKiBAcGFyYW0gez9zdHJpbmd9IHVybAor
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckRlbGVnYXRlfSBkZWxlZ2F0ZQorICov
CitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvciA9IGZ1bmN0aW9uKHRleHRNb2RlbCwgdXJsLCBkZWxl
Z2F0ZSkKK3sKKyAgICBXZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMpOworICAgIHRoaXMucmVn
aXN0ZXJSZXF1aXJlZENTUygidGV4dEVkaXRvci5jc3MiKTsKKworICAgIHRoaXMuX3RleHRNb2Rl
bCA9IHRleHRNb2RlbDsKKyAgICB0aGlzLl90ZXh0TW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1vZGVsLkV2ZW50cy5UZXh0Q2hhbmdlZCwgdGhpcy5fdGV4dENo
YW5nZWQsIHRoaXMpOworICAgIHRoaXMuX3RleHRNb2RlbC5yZXNldFVuZG9TdGFjaygpOworICAg
IHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGU7CisgICAgdGhpcy5fdXJsID0gdXJsOworICAgIHRo
aXMuZWxlbWVudC5jbGFzc05hbWUgPSAidGV4dC1lZGl0b3IgbW9ub3NwYWNlIjsKKworICAgIHZh
ciBlbnRlclRleHRDaGFuZ2VNb2RlID0gdGhpcy5fZW50ZXJJbnRlcm5hbFRleHRDaGFuZ2VNb2Rl
LmJpbmQodGhpcyk7CisgICAgdmFyIGV4aXRUZXh0Q2hhbmdlTW9kZSA9IHRoaXMuX2V4aXRJbnRl
cm5hbFRleHRDaGFuZ2VNb2RlLmJpbmQodGhpcyk7CisgICAgdmFyIHN5bmNTY3JvbGxMaXN0ZW5l
ciA9IHRoaXMuX3N5bmNTY3JvbGwuYmluZCh0aGlzKTsKKyAgICB2YXIgc3luY0RlY29yYXRpb25z
Rm9yTGluZUxpc3RlbmVyID0gdGhpcy5fc3luY0RlY29yYXRpb25zRm9yTGluZS5iaW5kKHRoaXMp
OworICAgIHZhciBzeW5jTGluZUhlaWdodExpc3RlbmVyID0gdGhpcy5fc3luY0xpbmVIZWlnaHQu
YmluZCh0aGlzKTsKKyAgICB0aGlzLl9tYWluUGFuZWwgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3JNYWluUGFuZWwodGhpcy5fdGV4dE1vZGVsLCB1cmwsIHN5bmNTY3JvbGxMaXN0ZW5lciwg
c3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyLCBlbnRlclRleHRDaGFuZ2VNb2RlLCBleGl0
VGV4dENoYW5nZU1vZGUpOworICAgIHRoaXMuX2d1dHRlclBhbmVsID0gbmV3IFdlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yR3V0dGVyUGFuZWwodGhpcy5fdGV4dE1vZGVsLCBzeW5jRGVjb3JhdGlvbnNG
b3JMaW5lTGlzdGVuZXIsIHN5bmNMaW5lSGVpZ2h0TGlzdGVuZXIpOworICAgIHRoaXMuZWxlbWVu
dC5hcHBlbmRDaGlsZCh0aGlzLl9tYWluUGFuZWwuZWxlbWVudCk7CisgICAgdGhpcy5lbGVtZW50
LmFwcGVuZENoaWxkKHRoaXMuX2d1dHRlclBhbmVsLmVsZW1lbnQpOworCisgICAgLy8gRm9yd2Fy
ZCBtb3VzZSB3aGVlbCBldmVudHMgZnJvbSB0aGUgdW5zY3JvbGxhYmxlIGd1dHRlciB0byB0aGUg
bWFpbiBwYW5lbC4KKyAgICBmdW5jdGlvbiBmb3J3YXJkV2hlZWxFdmVudChldmVudCkKKyAgICB7
CisgICAgICAgIHZhciBjbG9uZSA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJXaGVlbEV2ZW50Iik7
CisgICAgICAgIGNsb25lLmluaXRXZWJLaXRXaGVlbEV2ZW50KGV2ZW50LndoZWVsRGVsdGFYLCBl
dmVudC53aGVlbERlbHRhWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZl
bnQudmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc2NyZWVu
WCwgZXZlbnQuc2NyZWVuWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZl
bnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXZlbnQuY3RybEtleSwgZXZlbnQuYWx0S2V5LCBldmVudC5zaGlmdEtleSwgZXZlbnQu
bWV0YUtleSk7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5lbGVtZW50LmRpc3BhdGNoRXZlbnQo
Y2xvbmUpOworICAgIH0KKyAgICB0aGlzLl9ndXR0ZXJQYW5lbC5lbGVtZW50LmFkZEV2ZW50TGlz
dGVuZXIoIm1vdXNld2hlZWwiLCBmb3J3YXJkV2hlZWxFdmVudC5iaW5kKHRoaXMpLCBmYWxzZSk7
CisKKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuX2hh
bmRsZUtleURvd24uYmluZCh0aGlzKSwgZmFsc2UpOworICAgIHRoaXMuZWxlbWVudC5hZGRFdmVu
dExpc3RlbmVyKCJjb250ZXh0bWVudSIsIHRoaXMuX2NvbnRleHRNZW51LmJpbmQodGhpcyksIHRy
dWUpOworCisgICAgdGhpcy5fcmVnaXN0ZXJTaG9ydGN1dHMoKTsKK30KKworV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3IucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5n
fSBtaW1lVHlwZQorICAgICAqLworICAgIHNldCBtaW1lVHlwZShtaW1lVHlwZSkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX21haW5QYW5lbC5taW1lVHlwZSA9IG1pbWVUeXBlOworICAgIH0sCisKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlYWRPbmx5CisgICAgICovCisgICAgc2V0
UmVhZE9ubHk6IGZ1bmN0aW9uKHJlYWRPbmx5KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX21h
aW5QYW5lbC5yZWFkT25seSgpID09PSByZWFkT25seSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgdGhpcy5fbWFpblBhbmVsLnNldFJlYWRPbmx5KHJlYWRPbmx5LCB0aGlzLmlzU2hvd2lu
ZygpKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLm1hcmtCZWluZ0VkaXRlZCh0aGlzLmVsZW1lbnQs
ICFyZWFkT25seSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59
CisgICAgICovCisgICAgcmVhZE9ubHk6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLl9tYWluUGFuZWwucmVhZE9ubHkoKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICog
QHJldHVybiB7V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNb2RlbH0KKyAgICAgKi8KKyAgICBnZXQg
dGV4dE1vZGVsKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl90ZXh0TW9kZWw7CisgICAg
fSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge0VsZW1lbnR9CisgICAgICovCisgICAgZGVm
YXVsdEZvY3VzZWRFbGVtZW50OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhp
cy5fbWFpblBhbmVsLmRlZmF1bHRGb2N1c2VkRWxlbWVudCgpOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqLworICAgIHJldmVhbExp
bmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICB0aGlzLl9tYWluUGFuZWwu
cmV2ZWFsTGluZShsaW5lTnVtYmVyKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFt
IHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAgKiBAcGFyYW0ge3N0cmluZ3xFbGVtZW50fSBkZWNv
cmF0aW9uCisgICAgICovCisgICAgYWRkRGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwg
ZGVjb3JhdGlvbikKKyAgICB7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5hZGREZWNvcmF0aW9u
KGxpbmVOdW1iZXIsIGRlY29yYXRpb24pOworICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC5hZGRE
ZWNvcmF0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRpb24pOworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqIEBwYXJhbSB7c3RyaW5nfEVs
ZW1lbnR9IGRlY29yYXRpb24KKyAgICAgKi8KKyAgICByZW1vdmVEZWNvcmF0aW9uOiBmdW5jdGlv
bihsaW5lTnVtYmVyLCBkZWNvcmF0aW9uKQorICAgIHsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVs
LnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwgZGVjb3JhdGlvbik7CisgICAgICAgIHRoaXMu
X2d1dHRlclBhbmVsLnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwgZGVjb3JhdGlvbik7Cisg
ICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0g
cmFuZ2UKKyAgICAgKi8KKyAgICBtYXJrQW5kUmV2ZWFsUmFuZ2U6IGZ1bmN0aW9uKHJhbmdlKQor
ICAgIHsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLm1hcmtBbmRSZXZlYWxSYW5nZShyYW5nZSk7
CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisg
ICAgICovCisgICAgaGlnaGxpZ2h0TGluZTogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7Cisg
ICAgICAgIGlmICh0eXBlb2YgbGluZU51bWJlciAhPT0gIm51bWJlciIgfHwgbGluZU51bWJlciA8
IDApCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbGluZU51bWJlciA9IE1hdGgubWlu
KGxpbmVOdW1iZXIsIHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50IC0gMSk7CisgICAgICAgIHRo
aXMuX21haW5QYW5lbC5oaWdobGlnaHRMaW5lKGxpbmVOdW1iZXIpOworICAgIH0sCisKKyAgICBj
bGVhckxpbmVIaWdobGlnaHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX21haW5Q
YW5lbC5jbGVhckxpbmVIaWdobGlnaHQoKTsKKyAgICB9LAorCisgICAgZnJlZUNhY2hlZEVsZW1l
bnRzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9tYWluUGFuZWwuZnJlZUNhY2hl
ZEVsZW1lbnRzKCk7CisgICAgICAgIHRoaXMuX2d1dHRlclBhbmVsLmZyZWVDYWNoZWRFbGVtZW50
cygpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtBcnJheS48RWxlbWVudD59
CisgICAgICovCisgICAgZWxlbWVudHNUb1Jlc3RvcmVTY3JvbGxQb3NpdGlvbnNGb3I6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBbdGhpcy5fbWFpblBhbmVsLmVsZW1lbnRdOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9y
fSB0ZXh0RWRpdG9yCisgICAgICovCisgICAgaW5oZXJpdFNjcm9sbFBvc2l0aW9uczogZnVuY3Rp
b24odGV4dEVkaXRvcikKKyAgICB7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5lbGVtZW50Ll9z
Y3JvbGxUb3AgPSB0ZXh0RWRpdG9yLl9tYWluUGFuZWwuZWxlbWVudC5zY3JvbGxUb3A7CisgICAg
ICAgIHRoaXMuX21haW5QYW5lbC5lbGVtZW50Ll9zY3JvbGxMZWZ0ID0gdGV4dEVkaXRvci5fbWFp
blBhbmVsLmVsZW1lbnQuc2Nyb2xsTGVmdDsKKyAgICB9LAorCisgICAgYmVnaW5VcGRhdGVzOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9tYWluUGFuZWwuYmVnaW5VcGRhdGVzKCk7
CisgICAgICAgIHRoaXMuX2d1dHRlclBhbmVsLmJlZ2luVXBkYXRlcygpOworICAgIH0sCisKKyAg
ICBlbmRVcGRhdGVzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9tYWluUGFuZWwu
ZW5kVXBkYXRlcygpOworICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC5lbmRVcGRhdGVzKCk7Cisg
ICAgICAgIHRoaXMuX3VwZGF0ZVBhbmVsT2Zmc2V0cygpOworICAgIH0sCisKKyAgICBvblJlc2l6
ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLnJlc2l6ZSgpOwor
ICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC5yZXNpemUoKTsKKyAgICAgICAgdGhpcy5fdXBkYXRl
UGFuZWxPZmZzZXRzKCk7CisgICAgfSwKKworICAgIF90ZXh0Q2hhbmdlZDogZnVuY3Rpb24oZXZl
bnQpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX2ludGVybmFsVGV4dENoYW5nZU1vZGUpCisg
ICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwucmVzZXRVbmRvU3RhY2soKTsKKyAgICAgICAgdGhp
cy5fbWFpblBhbmVsLnRleHRDaGFuZ2VkKGV2ZW50LmRhdGEub2xkUmFuZ2UsIGV2ZW50LmRhdGEu
bmV3UmFuZ2UpOworICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC50ZXh0Q2hhbmdlZChldmVudC5k
YXRhLm9sZFJhbmdlLCBldmVudC5kYXRhLm5ld1JhbmdlKTsKKyAgICAgICAgdGhpcy5fdXBkYXRl
UGFuZWxPZmZzZXRzKCk7CisgICAgfSwKKworICAgIF9lbnRlckludGVybmFsVGV4dENoYW5nZU1v
ZGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2ludGVybmFsVGV4dENoYW5nZU1v
ZGUgPSB0cnVlOworICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5iZWZvcmVUZXh0Q2hhbmdlZCgpOwor
ICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9
IG9sZFJhbmdlCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSBuZXdSYW5n
ZQorICAgICAqLworICAgIF9leGl0SW50ZXJuYWxUZXh0Q2hhbmdlTW9kZTogZnVuY3Rpb24ob2xk
UmFuZ2UsIG5ld1JhbmdlKQorICAgIHsKKyAgICAgICAgdGhpcy5faW50ZXJuYWxUZXh0Q2hhbmdl
TW9kZSA9IGZhbHNlOworICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5hZnRlclRleHRDaGFuZ2VkKG9s
ZFJhbmdlLCBuZXdSYW5nZSk7CisgICAgfSwKKworICAgIF91cGRhdGVQYW5lbE9mZnNldHM6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBsaW5lTnVtYmVyc1dpZHRoID0gdGhpcy5fZ3V0
dGVyUGFuZWwuZWxlbWVudC5vZmZzZXRXaWR0aDsKKyAgICAgICAgaWYgKGxpbmVOdW1iZXJzV2lk
dGgpCisgICAgICAgICAgICB0aGlzLl9tYWluUGFuZWwuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0
eSgibGVmdCIsIGxpbmVOdW1iZXJzV2lkdGggKyAicHgiKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgdGhpcy5fbWFpblBhbmVsLmVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoImxlZnQi
KTsgLy8gVXNlIGRlZmF1bHQgdmFsdWUgc2V0IGluIENTUy4KKyAgICB9LAorCisgICAgX3N5bmNT
Y3JvbGw6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBtYWluRWxlbWVudCA9IHRoaXMu
X21haW5QYW5lbC5lbGVtZW50OworICAgICAgICB2YXIgZ3V0dGVyRWxlbWVudCA9IHRoaXMuX2d1
dHRlclBhbmVsLmVsZW1lbnQ7CisgICAgICAgIC8vIEhhbmRsZSBob3Jpem9udGFsIHNjcm9sbCBi
YXIgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbWFpbiBwYW5lbC4KKyAgICAgICAgdGhpcy5fZ3V0dGVy
UGFuZWwuc3luY0NsaWVudEhlaWdodChtYWluRWxlbWVudC5jbGllbnRIZWlnaHQpOworICAgICAg
ICBndXR0ZXJFbGVtZW50LnNjcm9sbFRvcCA9IG1haW5FbGVtZW50LnNjcm9sbFRvcDsKKyAgICB9
LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAgKi8K
KyAgICBfc3luY0RlY29yYXRpb25zRm9yTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7
CisgICAgICAgIGlmIChsaW5lTnVtYmVyID49IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBtYWluQ2h1bmsgPSB0aGlzLl9tYWlu
UGFuZWwuY2h1bmtGb3JMaW5lKGxpbmVOdW1iZXIpOworICAgICAgICBpZiAobWFpbkNodW5rLmxp
bmVzQ291bnQgPT09IDEgJiYgbWFpbkNodW5rLmRlY29yYXRlZCkgeworICAgICAgICAgICAgdmFy
IGd1dHRlckNodW5rID0gdGhpcy5fZ3V0dGVyUGFuZWwubWFrZUxpbmVBQ2h1bmsobGluZU51bWJl
cik7CisgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gbWFpbkNodW5rLmhlaWdodDsKKyAgICAgICAg
ICAgIGlmIChoZWlnaHQpCisgICAgICAgICAgICAgICAgZ3V0dGVyQ2h1bmsuZWxlbWVudC5zdHls
ZS5zZXRQcm9wZXJ0eSgiaGVpZ2h0IiwgaGVpZ2h0ICsgInB4Iik7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgZ3V0dGVyQ2h1bmsuZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0
eSgiaGVpZ2h0Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgZ3V0dGVyQ2h1
bmsgPSB0aGlzLl9ndXR0ZXJQYW5lbC5jaHVua0ZvckxpbmUobGluZU51bWJlcik7CisgICAgICAg
ICAgICBpZiAoZ3V0dGVyQ2h1bmsubGluZXNDb3VudCA9PT0gMSkKKyAgICAgICAgICAgICAgICBn
dXR0ZXJDaHVuay5lbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCJoZWlnaHQiKTsKKyAgICAg
ICAgfQorICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGd1dHRlclJv
dworICAgICAqLworICAgIF9zeW5jTGluZUhlaWdodDogZnVuY3Rpb24oZ3V0dGVyUm93KQorICAg
IHsKKyAgICAgICAgaWYgKHRoaXMuX2xpbmVIZWlnaHRTeW5jZWQpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGlmIChndXR0ZXJSb3cgJiYgZ3V0dGVyUm93Lm9mZnNldEhlaWdodCkgewor
ICAgICAgICAgICAgLy8gRm9yY2UgZXF1YWwgbGluZSBoZWlnaHRzIGZvciB0aGUgY2hpbGQgcGFu
ZWxzLgorICAgICAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCJsaW5lLWhl
aWdodCIsIGd1dHRlclJvdy5vZmZzZXRIZWlnaHQgKyAicHgiKTsKKyAgICAgICAgICAgIHRoaXMu
X2xpbmVIZWlnaHRTeW5jZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfSwKKworICAgIF9yZWdp
c3RlclNob3J0Y3V0czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGtleXMgPSBXZWJJ
bnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzOworICAgICAgICB2YXIgbW9kaWZpZXJzID0g
V2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXJzOworCisgICAgICAgIHRoaXMu
X3Nob3J0Y3V0cyA9IHt9OworICAgICAgICB2YXIgY29tbWl0RWRpdGluZyA9IHRoaXMuX2NvbW1p
dEVkaXRpbmcuYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5fc2hvcnRjdXRzW1dlYkluc3BlY3Rv
ci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VLZXkoInMiLCBtb2RpZmllcnMuQ3RybE9yTWV0YSldID0g
Y29tbWl0RWRpdGluZzsKKworICAgICAgICB2YXIgaGFuZGxlRW50ZXJLZXkgPSB0aGlzLl9tYWlu
UGFuZWwuaGFuZGxlRW50ZXJLZXkuYmluZCh0aGlzLl9tYWluUGFuZWwpOworICAgICAgICB0aGlz
Ll9zaG9ydGN1dHNbV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZUtleShrZXlzLkVu
dGVyLmNvZGUsIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVycy5Ob25lKV0g
PSBoYW5kbGVFbnRlcktleTsKKworICAgICAgICB2YXIgaGFuZGxlVW5kbyA9IHRoaXMuX21haW5Q
YW5lbC5oYW5kbGVVbmRvUmVkby5iaW5kKHRoaXMuX21haW5QYW5lbCwgZmFsc2UpOworICAgICAg
ICB2YXIgaGFuZGxlUmVkbyA9IHRoaXMuX21haW5QYW5lbC5oYW5kbGVVbmRvUmVkby5iaW5kKHRo
aXMuX21haW5QYW5lbCwgdHJ1ZSk7CisgICAgICAgIHRoaXMuX3Nob3J0Y3V0c1tXZWJJbnNwZWN0
b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5KCJ6IiwgbW9kaWZpZXJzLkN0cmxPck1ldGEpXSA9
IGhhbmRsZVVuZG87CisgICAgICAgIHRoaXMuX3Nob3J0Y3V0c1tXZWJJbnNwZWN0b3IuS2V5Ym9h
cmRTaG9ydGN1dC5tYWtlS2V5KCJ6IiwgbW9kaWZpZXJzLlNoaWZ0IHwgbW9kaWZpZXJzLkN0cmxP
ck1ldGEpXSA9IGhhbmRsZVJlZG87CisKKyAgICAgICAgdmFyIGhhbmRsZVRhYktleSA9IHRoaXMu
X21haW5QYW5lbC5oYW5kbGVUYWJLZXlQcmVzcy5iaW5kKHRoaXMuX21haW5QYW5lbCwgZmFsc2Up
OworICAgICAgICB2YXIgaGFuZGxlU2hpZnRUYWJLZXkgPSB0aGlzLl9tYWluUGFuZWwuaGFuZGxl
VGFiS2V5UHJlc3MuYmluZCh0aGlzLl9tYWluUGFuZWwsIHRydWUpOworICAgICAgICB0aGlzLl9z
aG9ydGN1dHNbV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZUtleShrZXlzLlRhYi5j
b2RlKV0gPSBoYW5kbGVUYWJLZXk7CisgICAgICAgIHRoaXMuX3Nob3J0Y3V0c1tXZWJJbnNwZWN0
b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5KGtleXMuVGFiLmNvZGUsIG1vZGlmaWVycy5TaGlm
dCldID0gaGFuZGxlU2hpZnRUYWJLZXk7CisgICAgfSwKKworICAgIF9oYW5kbGVLZXlEb3duOiBm
dW5jdGlvbihlKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICB2YXIgc2hvcnRjdXRLZXkgPSBXZWJJbnNwZWN0b3IuS2V5
Ym9hcmRTaG9ydGN1dC5tYWtlS2V5RnJvbUV2ZW50KGUpOworICAgICAgICB2YXIgaGFuZGxlciA9
IHRoaXMuX3Nob3J0Y3V0c1tzaG9ydGN1dEtleV07CisgICAgICAgIGlmIChoYW5kbGVyICYmIGhh
bmRsZXIoKSkKKyAgICAgICAgICAgIGUuY29uc3VtZSh0cnVlKTsKKyAgICB9LAorCisgICAgX2Nv
bnRleHRNZW51OiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHZhciBjb250ZXh0TWVu
dSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUoKTsKKyAgICAgICAgdmFyIHRhcmdldCA9
IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3ZWJraXQtbGluZS1u
dW1iZXIiKTsKKyAgICAgICAgaWYgKHRhcmdldCkKKyAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRl
LnBvcHVsYXRlTGluZUd1dHRlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCB0YXJnZXQubGluZU51
bWJlcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fbWFpblBh
bmVsLl9lbmNsb3NpbmdMaW5lUm93T3JTZWxmKGV2ZW50LnRhcmdldCk7CisgICAgICAgICAgICB0
aGlzLl9kZWxlZ2F0ZS5wb3B1bGF0ZVRleHRBcmVhQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIHRh
cmdldCAmJiB0YXJnZXQubGluZU51bWJlcik7CisgICAgICAgIH0KKyAgICAgICAgY29udGV4dE1l
bnUuc2hvdyhldmVudCk7CisgICAgfSwKKworICAgIF9jb21taXRFZGl0aW5nOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICBpZiAodGhpcy5yZWFkT25seSgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIHRoaXMuX2RlbGVnYXRlLmNvbW1pdEVkaXRpbmcoKTsKKyAgICAg
ICAgaWYgKHRoaXMuX3VybCAmJiBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIuaXNVUkxTYXZlZCh0
aGlzLl91cmwpKQorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLnNhdmUodGhp
cy5fdXJsLCB0aGlzLl90ZXh0TW9kZWwudGV4dCwgZmFsc2UpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlRleHRS
YW5nZX0KKyAgICAgKi8KKyAgICBzZWxlY3Rpb246IGZ1bmN0aW9uKHRleHRSYW5nZSkKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzLl9tYWluUGFuZWwuX2dldFNlbGVjdGlvbigpOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IHRleHRS
YW5nZQorICAgICAqLworICAgIHNldFNlbGVjdGlvbjogZnVuY3Rpb24odGV4dFJhbmdlKQorICAg
IHsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLl9yZXN0b3JlU2VsZWN0aW9uKHRleHRSYW5nZSk7
CisgICAgfSwKKworICAgIHdhc1Nob3duOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAo
IXRoaXMucmVhZE9ubHkoKSkKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5tYXJrQmVpbmdFZGl0
ZWQodGhpcy5lbGVtZW50LCB0cnVlKTsKKyAgICB9LAorCisgICAgd2lsbEhpZGU6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5yZWFkT25seSgpKQorICAgICAgICAgICAgV2Vi
SW5zcGVjdG9yLm1hcmtCZWluZ0VkaXRlZCh0aGlzLmVsZW1lbnQsIGZhbHNlKTsKKyAgICB9Cit9
CisKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNw
ZWN0b3IuVmlldy5wcm90b3R5cGU7CisKKy8qKgorICogQGludGVyZmFjZQorICovCitXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvckRlbGVnYXRlID0gZnVuY3Rpb24oKQoreworfQorCitXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvckRlbGVnYXRlLnByb3RvdHlwZSA9IHsKKyAgICBiZWZvcmVUZXh0Q2hhbmdl
ZDogZnVuY3Rpb24oKSB7IH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rv
ci5UZXh0UmFuZ2V9IG9sZFJhbmdlCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJh
bmdlfSBuZXdSYW5nZQorICAgICAqLworICAgIGFmdGVyVGV4dENoYW5nZWQ6IGZ1bmN0aW9uKG9s
ZFJhbmdlLCBuZXdSYW5nZSkgeyB9LAorCisgICAgY29tbWl0RWRpdGluZzogZnVuY3Rpb24oKSB7
IH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Db250ZXh0TWVudX0g
Y29udGV4dE1lbnUKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqLwor
ICAgIHBvcHVsYXRlTGluZUd1dHRlckNvbnRleHRNZW51OiBmdW5jdGlvbihjb250ZXh0TWVudSwg
bGluZU51bWJlcikgeyB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
Q29udGV4dE1lbnV9IGNvbnRleHRNZW51CisgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1i
ZXIKKyAgICAgKi8KKyAgICBwb3B1bGF0ZVRleHRBcmVhQ29udGV4dE1lbnU6IGZ1bmN0aW9uKGNv
bnRleHRNZW51LCBsaW5lTnVtYmVyKSB7IH0KK30KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNb2RlbH0gdGV4dE1vZGVsCisgKi8KK1dl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsID0gZnVuY3Rpb24odGV4dE1vZGVsKQor
eworICAgIHRoaXMuX3RleHRNb2RlbCA9IHRleHRNb2RlbDsKKworICAgIHRoaXMuX2RlZmF1bHRD
aHVua1NpemUgPSA1MDsKKyAgICB0aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbCA9IDA7CisgICAg
dGhpcy5fZG9tVXBkYXRlQ29hbGVzY2luZ0xldmVsID0gMDsKK30KKworV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEByZXR1
cm4ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTW9kZWx9CisgICAgICovCisgICAgZ2V0IHRleHRN
b2RlbCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdGV4dE1vZGVsOworICAgIH0sCisK
KyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqLworICAg
IHJldmVhbExpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICBpZiAobGlu
ZU51bWJlciA+PSB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLm1ha2VMaW5lQUNodW5rKGxpbmVOdW1iZXIp
OworICAgICAgICBjaHVuay5lbGVtZW50LnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKTsKKyAgICB9
LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAgKiBA
cGFyYW0ge3N0cmluZ3xFbGVtZW50fSBkZWNvcmF0aW9uCisgICAgICovCisgICAgYWRkRGVjb3Jh
dGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgZGVjb3JhdGlvbikKKyAgICB7CisgICAgICAgIGlm
IChsaW5lTnVtYmVyID49IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHZhciBjaHVuayA9IHRoaXMubWFrZUxpbmVBQ2h1bmsobGluZU51
bWJlcik7CisgICAgICAgIGNodW5rLmFkZERlY29yYXRpb24oZGVjb3JhdGlvbik7CisgICAgfSwK
KworICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICogQHBh
cmFtIHtzdHJpbmd8RWxlbWVudH0gZGVjb3JhdGlvbgorICAgICAqLworICAgIHJlbW92ZURlY29y
YXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRpb24pCisgICAgeworICAgICAgICBp
ZiAobGluZU51bWJlciA+PSB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLmNodW5rRm9yTGluZShsaW5lTnVt
YmVyKTsKKyAgICAgICAgY2h1bmsucmVtb3ZlRGVjb3JhdGlvbihkZWNvcmF0aW9uKTsKKyAgICB9
LAorCisgICAgX2J1aWxkQ2h1bmtzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLmJl
Z2luRG9tVXBkYXRlcygpOworCisgICAgICAgIHRoaXMuX2NvbnRhaW5lci5yZW1vdmVDaGlsZHJl
bigpOworCisgICAgICAgIHRoaXMuX3RleHRDaHVua3MgPSBbXTsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudDsgaSArPSB0aGlzLl9kZWZhdWx0
Q2h1bmtTaXplKSB7CisgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9jcmVhdGVOZXdDaHVu
ayhpLCBpICsgdGhpcy5fZGVmYXVsdENodW5rU2l6ZSk7CisgICAgICAgICAgICB0aGlzLl90ZXh0
Q2h1bmtzLnB1c2goY2h1bmspOworICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmFwcGVuZENo
aWxkKGNodW5rLmVsZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fcmVwYWludEFs
bCgpOworCisgICAgICAgIHRoaXMuZW5kRG9tVXBkYXRlcygpOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqLworICAgIG1ha2VMaW5l
QUNodW5rOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgdmFyIGNodW5rTnVt
YmVyID0gdGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5lKGxpbmVOdW1iZXIpOworICAgICAgICB2YXIg
b2xkQ2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVtYmVyXTsKKworICAgICAgICBpZiAo
IW9sZENodW5rKSB7CisgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJObyBjaHVuayBmb3IgbGlu
ZSBudW1iZXI6ICIgKyBsaW5lTnVtYmVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChvbGRDaHVuay5saW5lc0NvdW50ID09PSAxKQorICAgICAgICAgICAg
cmV0dXJuIG9sZENodW5rOworCisgICAgICAgIHJldHVybiB0aGlzLl9zcGxpdENodW5rT25BTGlu
ZShsaW5lTnVtYmVyLCBjaHVua051bWJlciwgdHJ1ZSk7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGNo
dW5rTnVtYmVyCisgICAgICogQHBhcmFtIHtib29sZWFuPX0gY3JlYXRlU3VmZml4Q2h1bmsKKyAg
ICAgKi8KKyAgICBfc3BsaXRDaHVua09uQUxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNodW5r
TnVtYmVyLCBjcmVhdGVTdWZmaXhDaHVuaykKKyAgICB7CisgICAgICAgIHRoaXMuYmVnaW5Eb21V
cGRhdGVzKCk7CisKKyAgICAgICAgdmFyIG9sZENodW5rID0gdGhpcy5fdGV4dENodW5rc1tjaHVu
a051bWJlcl07CisgICAgICAgIHZhciB3YXNFeHBhbmRlZCA9IG9sZENodW5rLmV4cGFuZGVkOwor
ICAgICAgICBvbGRDaHVuay5leHBhbmRlZCA9IGZhbHNlOworCisgICAgICAgIHZhciBpbnNlcnRJ
bmRleCA9IGNodW5rTnVtYmVyICsgMTsKKworICAgICAgICAvLyBQcmVmaXggY2h1bmsuCisgICAg
ICAgIGlmIChsaW5lTnVtYmVyID4gb2xkQ2h1bmsuc3RhcnRMaW5lKSB7CisgICAgICAgICAgICB2
YXIgcHJlZml4Q2h1bmsgPSB0aGlzLl9jcmVhdGVOZXdDaHVuayhvbGRDaHVuay5zdGFydExpbmUs
IGxpbmVOdW1iZXIpOworICAgICAgICAgICAgcHJlZml4Q2h1bmsucmVhZE9ubHkgPSBvbGRDaHVu
ay5yZWFkT25seTsKKyAgICAgICAgICAgIHRoaXMuX3RleHRDaHVua3Muc3BsaWNlKGluc2VydElu
ZGV4KyssIDAsIHByZWZpeENodW5rKTsKKyAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5pbnNl
cnRCZWZvcmUocHJlZml4Q2h1bmsuZWxlbWVudCwgb2xkQ2h1bmsuZWxlbWVudCk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBMaW5lIGNodW5rLgorICAgICAgICB2YXIgZW5kTGluZSA9IGNyZWF0
ZVN1ZmZpeENodW5rID8gbGluZU51bWJlciArIDEgOiBvbGRDaHVuay5zdGFydExpbmUgKyBvbGRD
aHVuay5saW5lc0NvdW50OworICAgICAgICB2YXIgbGluZUNodW5rID0gdGhpcy5fY3JlYXRlTmV3
Q2h1bmsobGluZU51bWJlciwgZW5kTGluZSk7CisgICAgICAgIGxpbmVDaHVuay5yZWFkT25seSA9
IG9sZENodW5rLnJlYWRPbmx5OworICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnNwbGljZShpbnNl
cnRJbmRleCsrLCAwLCBsaW5lQ2h1bmspOworICAgICAgICB0aGlzLl9jb250YWluZXIuaW5zZXJ0
QmVmb3JlKGxpbmVDaHVuay5lbGVtZW50LCBvbGRDaHVuay5lbGVtZW50KTsKKworICAgICAgICAv
LyBTdWZmaXggY2h1bmsuCisgICAgICAgIGlmIChvbGRDaHVuay5zdGFydExpbmUgKyBvbGRDaHVu
ay5saW5lc0NvdW50ID4gZW5kTGluZSkgeworICAgICAgICAgICAgdmFyIHN1ZmZpeENodW5rID0g
dGhpcy5fY3JlYXRlTmV3Q2h1bmsoZW5kTGluZSwgb2xkQ2h1bmsuc3RhcnRMaW5lICsgb2xkQ2h1
bmsubGluZXNDb3VudCk7CisgICAgICAgICAgICBzdWZmaXhDaHVuay5yZWFkT25seSA9IG9sZENo
dW5rLnJlYWRPbmx5OworICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rcy5zcGxpY2UoaW5zZXJ0
SW5kZXgsIDAsIHN1ZmZpeENodW5rKTsKKyAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5pbnNl
cnRCZWZvcmUoc3VmZml4Q2h1bmsuZWxlbWVudCwgb2xkQ2h1bmsuZWxlbWVudCk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBSZW1vdmUgZW5jbG9zaW5nIGNodW5rLgorICAgICAgICB0aGlzLl90
ZXh0Q2h1bmtzLnNwbGljZShjaHVua051bWJlciwgMSk7CisgICAgICAgIHRoaXMuX2NvbnRhaW5l
ci5yZW1vdmVDaGlsZChvbGRDaHVuay5lbGVtZW50KTsKKworICAgICAgICBpZiAod2FzRXhwYW5k
ZWQpIHsKKyAgICAgICAgICAgIGlmIChwcmVmaXhDaHVuaykKKyAgICAgICAgICAgICAgICBwcmVm
aXhDaHVuay5leHBhbmRlZCA9IHRydWU7CisgICAgICAgICAgICBsaW5lQ2h1bmsuZXhwYW5kZWQg
PSB0cnVlOworICAgICAgICAgICAgaWYgKHN1ZmZpeENodW5rKQorICAgICAgICAgICAgICAgIHN1
ZmZpeENodW5rLmV4cGFuZGVkID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuZW5k
RG9tVXBkYXRlcygpOworCisgICAgICAgIHJldHVybiBsaW5lQ2h1bms7CisgICAgfSwKKworICAg
IF9zY3JvbGw6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBSZXBsYWNlIHRo
ZSAiMiIgd2l0aCB0aGUgcGFkZGluZy1sZWZ0IHZhbHVlIGZyb20gQ1NTLgorICAgICAgICBpZiAo
dGhpcy5lbGVtZW50LnNjcm9sbExlZnQgPD0gMikKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5z
Y3JvbGxMZWZ0ID0gMDsKKworICAgICAgICB0aGlzLl9zY2hlZHVsZVJlcGFpbnRBbGwoKTsKKyAg
ICAgICAgaWYgKHRoaXMuX3N5bmNTY3JvbGxMaXN0ZW5lcikKKyAgICAgICAgICAgIHRoaXMuX3N5
bmNTY3JvbGxMaXN0ZW5lcigpOworICAgIH0sCisKKyAgICBfc2NoZWR1bGVSZXBhaW50QWxsOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5fcmVwYWludEFsbFRpbWVyKQorICAg
ICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3JlcGFpbnRBbGxUaW1lcik7CisgICAgICAgIHRo
aXMuX3JlcGFpbnRBbGxUaW1lciA9IHNldFRpbWVvdXQodGhpcy5fcmVwYWludEFsbC5iaW5kKHRo
aXMpLCA1MCk7CisgICAgfSwKKworICAgIGJlZ2luVXBkYXRlczogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwrKzsKKyAgICB9LAorCisgICAgZW5k
VXBkYXRlczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fcGFpbnRDb2FsZXNjaW5n
TGV2ZWwtLTsKKyAgICAgICAgaWYgKCF0aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbCkKKyAgICAg
ICAgICAgIHRoaXMuX3JlcGFpbnRBbGwoKTsKKyAgICB9LAorCisgICAgYmVnaW5Eb21VcGRhdGVz
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9kb21VcGRhdGVDb2FsZXNjaW5nTGV2
ZWwrKzsKKyAgICB9LAorCisgICAgZW5kRG9tVXBkYXRlczogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdGhpcy5fZG9tVXBkYXRlQ29hbGVzY2luZ0xldmVsLS07CisgICAgfSwKKworICAgIC8q
KgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICovCisgICAgX2NodW5r
TnVtYmVyRm9yTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIGZ1bmN0
aW9uIGNvbXBhcmVMaW5lTnVtYmVycyh2YWx1ZSwgY2h1bmspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiB2YWx1ZSA8IGNodW5rLnN0YXJ0TGluZSA/IC0xIDogMTsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgaW5zZXJ0QmVmb3JlID0gaW5zZXJ0aW9uSW5kZXhGb3JPYmplY3RJbkxpc3RT
b3J0ZWRCeUZ1bmN0aW9uKGxpbmVOdW1iZXIsIHRoaXMuX3RleHRDaHVua3MsIGNvbXBhcmVMaW5l
TnVtYmVycyk7CisgICAgICAgIHJldHVybiBpbnNlcnRCZWZvcmUgLSAxOworICAgIH0sCisKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqLworICAgIGNo
dW5rRm9yTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzLl90ZXh0Q2h1bmtzW3RoaXMuX2NodW5rTnVtYmVyRm9yTGluZShsaW5lTnVtYmVyKV07Cisg
ICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2aXNpYmxlRnJvbQorICAg
ICAqLworICAgIF9maW5kRmlyc3RWaXNpYmxlQ2h1bmtOdW1iZXI6IGZ1bmN0aW9uKHZpc2libGVG
cm9tKQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gY29tcGFyZU9mZnNldFRvcHModmFsdWUsIGNo
dW5rKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUgPCBjaHVuay5vZmZzZXRU
b3AgPyAtMSA6IDE7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGluc2VydEJlZm9yZSA9IGluc2Vy
dGlvbkluZGV4Rm9yT2JqZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlvbih2aXNpYmxlRnJvbSwgdGhp
cy5fdGV4dENodW5rcywgY29tcGFyZU9mZnNldFRvcHMpOworICAgICAgICByZXR1cm4gaW5zZXJ0
QmVmb3JlIC0gMTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IHZp
c2libGVGcm9tCisgICAgICogQHBhcmFtIHtudW1iZXJ9IHZpc2libGVUbworICAgICAqLworICAg
IF9maW5kVmlzaWJsZUNodW5rczogZnVuY3Rpb24odmlzaWJsZUZyb20sIHZpc2libGVUbykKKyAg
ICB7CisgICAgICAgIHZhciBmcm9tID0gdGhpcy5fZmluZEZpcnN0VmlzaWJsZUNodW5rTnVtYmVy
KHZpc2libGVGcm9tKTsKKyAgICAgICAgZm9yICh2YXIgdG8gPSBmcm9tICsgMTsgdG8gPCB0aGlz
Ll90ZXh0Q2h1bmtzLmxlbmd0aDsgKyt0bykgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RleHRD
aHVua3NbdG9dLm9mZnNldFRvcCA+PSB2aXNpYmxlVG8pCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IGZyb20sIGVuZDogdG8gfTsKKyAg
ICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IHZpc2libGVGcm9tCisgICAg
ICovCisgICAgX2ZpbmRGaXJzdFZpc2libGVMaW5lTnVtYmVyOiBmdW5jdGlvbih2aXNpYmxlRnJv
bSkKKyAgICB7CisgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbdGhpcy5fZmlu
ZEZpcnN0VmlzaWJsZUNodW5rTnVtYmVyKHZpc2libGVGcm9tKV07CisgICAgICAgIGlmICghY2h1
bmsuZXhwYW5kZWQpCisgICAgICAgICAgICByZXR1cm4gY2h1bmsuc3RhcnRMaW5lOworCisgICAg
ICAgIHZhciBsaW5lTnVtYmVycyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNo
dW5rLmxpbmVzQ291bnQ7ICsraSkgeworICAgICAgICAgICAgbGluZU51bWJlcnMucHVzaChjaHVu
ay5zdGFydExpbmUgKyBpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVM
aW5lUm93T2Zmc2V0VG9wcyh2YWx1ZSwgbGluZU51bWJlcikKKyAgICAgICAgeworICAgICAgICAg
ICAgdmFyIGxpbmVSb3cgPSBjaHVuay5nZXRFeHBhbmRlZExpbmVSb3cobGluZU51bWJlcik7Cisg
ICAgICAgICAgICByZXR1cm4gdmFsdWUgPCBsaW5lUm93Lm9mZnNldFRvcCA/IC0xIDogMTsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgaW5zZXJ0QmVmb3JlID0gaW5zZXJ0aW9uSW5kZXhGb3JPYmpl
Y3RJbkxpc3RTb3J0ZWRCeUZ1bmN0aW9uKHZpc2libGVGcm9tLCBsaW5lTnVtYmVycywgY29tcGFy
ZUxpbmVSb3dPZmZzZXRUb3BzKTsKKyAgICAgICAgcmV0dXJuIGxpbmVOdW1iZXJzW2luc2VydEJl
Zm9yZSAtIDFdOworICAgIH0sCisKKyAgICBfcmVwYWludEFsbDogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgZGVsZXRlIHRoaXMuX3JlcGFpbnRBbGxUaW1lcjsKKworICAgICAgICBpZiAodGhp
cy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwgfHwgdGhpcy5fZGlydHlMaW5lcykKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICB2YXIgdmlzaWJsZUZyb20gPSB0aGlzLmVsZW1lbnQuc2Nyb2xs
VG9wOworICAgICAgICB2YXIgdmlzaWJsZVRvID0gdGhpcy5lbGVtZW50LnNjcm9sbFRvcCArIHRo
aXMuZWxlbWVudC5jbGllbnRIZWlnaHQ7CisKKyAgICAgICAgaWYgKHZpc2libGVUbykgeworICAg
ICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2ZpbmRWaXNpYmxlQ2h1bmtzKHZpc2libGVGcm9t
LCB2aXNpYmxlVG8pOworICAgICAgICAgICAgdGhpcy5fZXhwYW5kQ2h1bmtzKHJlc3VsdC5zdGFy
dCwgcmVzdWx0LmVuZCk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBh
cmFtIHtudW1iZXJ9IGZyb21JbmRleAorICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b0luZGV4Cisg
ICAgICovCisgICAgX2V4cGFuZENodW5rczogZnVuY3Rpb24oZnJvbUluZGV4LCB0b0luZGV4KQor
ICAgIHsKKyAgICAgICAgLy8gRmlyc3QgY29sbGFwc2UgY2h1bmtzIHRvIGNvbGxlY3QgdGhlIERP
TSBlbGVtZW50cyBpbnRvIGEgY2FjaGUgdG8gcmV1c2UgdGhlbSBsYXRlci4KKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBmcm9tSW5kZXg7ICsraSkKKyAgICAgICAgICAgIHRoaXMuX3RleHRD
aHVua3NbaV0uZXhwYW5kZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yICh2YXIgaSA9IHRvSW5kZXg7
IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgdGhpcy5fdGV4
dENodW5rc1tpXS5leHBhbmRlZCA9IGZhbHNlOworICAgICAgICBmb3IgKHZhciBpID0gZnJvbUlu
ZGV4OyBpIDwgdG9JbmRleDsgKytpKQorICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rc1tpXS5l
eHBhbmRlZCA9IHRydWU7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7RWxlbWVu
dH0gZmlyc3RFbGVtZW50CisgICAgICogQHBhcmFtIHtFbGVtZW50PX0gbGFzdEVsZW1lbnQKKyAg
ICAgKi8KKyAgICBfdG90YWxIZWlnaHQ6IGZ1bmN0aW9uKGZpcnN0RWxlbWVudCwgbGFzdEVsZW1l
bnQpCisgICAgeworICAgICAgICBsYXN0RWxlbWVudCA9IChsYXN0RWxlbWVudCB8fCBmaXJzdEVs
ZW1lbnQpLm5leHRFbGVtZW50U2libGluZzsKKyAgICAgICAgaWYgKGxhc3RFbGVtZW50KQorICAg
ICAgICAgICAgcmV0dXJuIGxhc3RFbGVtZW50Lm9mZnNldFRvcCAtIGZpcnN0RWxlbWVudC5vZmZz
ZXRUb3A7CisKKyAgICAgICAgdmFyIG9mZnNldFBhcmVudCA9IGZpcnN0RWxlbWVudC5vZmZzZXRQ
YXJlbnQ7CisgICAgICAgIGlmIChvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0UGFyZW50LnNjcm9sbEhl
aWdodCA+IG9mZnNldFBhcmVudC5jbGllbnRIZWlnaHQpCisgICAgICAgICAgICByZXR1cm4gb2Zm
c2V0UGFyZW50LnNjcm9sbEhlaWdodCAtIGZpcnN0RWxlbWVudC5vZmZzZXRUb3A7CisKKyAgICAg
ICAgdmFyIHRvdGFsID0gMDsKKyAgICAgICAgd2hpbGUgKGZpcnN0RWxlbWVudCAmJiBmaXJzdEVs
ZW1lbnQgIT09IGxhc3RFbGVtZW50KSB7CisgICAgICAgICAgICB0b3RhbCArPSBmaXJzdEVsZW1l
bnQub2Zmc2V0SGVpZ2h0OworICAgICAgICAgICAgZmlyc3RFbGVtZW50ID0gZmlyc3RFbGVtZW50
Lm5leHRFbGVtZW50U2libGluZzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG90YWw7Cisg
ICAgfSwKKworICAgIHJlc2l6ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fcmVw
YWludEFsbCgpOworICAgIH0KK30KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBleHRlbmRz
IHtXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbH0KKyAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JNb2RlbH0gdGV4dE1vZGVsCisgKi8KK1dlYkluc3BlY3Rvci5UZXh0
RWRpdG9yR3V0dGVyUGFuZWwgPSBmdW5jdGlvbih0ZXh0TW9kZWwsIHN5bmNEZWNvcmF0aW9uc0Zv
ckxpbmVMaXN0ZW5lciwgc3luY0xpbmVIZWlnaHRMaXN0ZW5lcikKK3sKKyAgICBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5jYWxsKHRoaXMsIHRleHRNb2RlbCk7CisKKyAgICB0
aGlzLl9zeW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIgPSBzeW5jRGVjb3JhdGlvbnNGb3JM
aW5lTGlzdGVuZXI7CisgICAgdGhpcy5fc3luY0xpbmVIZWlnaHRMaXN0ZW5lciA9IHN5bmNMaW5l
SGVpZ2h0TGlzdGVuZXI7CisKKyAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gInRleHQtZWRpdG9yLWxp
bmVzIjsKKworICAgIHRoaXMuX2NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOworICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc05hbWUgPSAiaW5uZXItY29udGFpbmVyIjsK
KyAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKTsKKworICAgIHRo
aXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLl9zY3JvbGwuYmluZCh0
aGlzKSwgZmFsc2UpOworCisgICAgdGhpcy5mcmVlQ2FjaGVkRWxlbWVudHMoKTsKKyAgICB0aGlz
Ll9idWlsZENodW5rcygpOworICAgIHRoaXMuX2RlY29yYXRpb25zID0ge307Cit9CisKK1dlYklu
c3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFuZWwucHJvdG90eXBlID0geworICAgIGZyZWVDYWNo
ZWRFbGVtZW50czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2FjaGVkUm93cyA9
IFtdOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRMaW5l
CisgICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZExpbmUKKyAgICAgKi8KKyAgICBfY3JlYXRlTmV3
Q2h1bms6IGZ1bmN0aW9uKHN0YXJ0TGluZSwgZW5kTGluZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuayh0aGlzLCBzdGFydExpbmUs
IGVuZExpbmUpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rv
ci5UZXh0UmFuZ2V9IG9sZFJhbmdlCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJh
bmdlfSBuZXdSYW5nZQorICAgICAqLworICAgIHRleHRDaGFuZ2VkOiBmdW5jdGlvbihvbGRSYW5n
ZSwgbmV3UmFuZ2UpCisgICAgeworICAgICAgICB0aGlzLmJlZ2luRG9tVXBkYXRlcygpOworCisg
ICAgICAgIHZhciBsaW5lc0RpZmYgPSBuZXdSYW5nZS5saW5lc0NvdW50IC0gb2xkUmFuZ2UubGlu
ZXNDb3VudDsKKyAgICAgICAgaWYgKGxpbmVzRGlmZikgeworICAgICAgICAgICAgLy8gUmVtb3Zl
IG9sZCBjaHVua3MgKGlmIG5lZWRlZCkuCisgICAgICAgICAgICBmb3IgKHZhciBjaHVua051bWJl
ciA9IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoIC0gMTsgY2h1bmtOdW1iZXIgPj0gMCA7IC0tY2h1
bmtOdW1iZXIpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtz
W2NodW5rTnVtYmVyXTsKKyAgICAgICAgICAgICAgICBpZiAoY2h1bmsuc3RhcnRMaW5lICsgY2h1
bmsubGluZXNDb3VudCA8PSB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2h1bmsuZXhwYW5kZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICB0aGlzLl9jb250YWluZXIucmVtb3ZlQ2hpbGQoY2h1bmsuZWxlbWVu
dCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aCA9
IGNodW5rTnVtYmVyICsgMTsKKworICAgICAgICAgICAgLy8gQWRkIG5ldyBjaHVua3MgKGlmIG5l
ZWRlZCkuCisgICAgICAgICAgICB2YXIgdG90YWxMaW5lcyA9IDA7CisgICAgICAgICAgICBpZiAo
dGhpcy5fdGV4dENodW5rcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICB2YXIgbGFzdENodW5r
ID0gdGhpcy5fdGV4dENodW5rc1t0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aCAtIDFdOworICAgICAg
ICAgICAgICAgIHRvdGFsTGluZXMgPSBsYXN0Q2h1bmsuc3RhcnRMaW5lICsgbGFzdENodW5rLmxp
bmVzQ291bnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSB0b3Rh
bExpbmVzOyBpIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQ7IGkgKz0gdGhpcy5fZGVmYXVs
dENodW5rU2l6ZSkgeworICAgICAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX2NyZWF0ZU5l
d0NodW5rKGksIGkgKyB0aGlzLl9kZWZhdWx0Q2h1bmtTaXplKTsKKyAgICAgICAgICAgICAgICB0
aGlzLl90ZXh0Q2h1bmtzLnB1c2goY2h1bmspOworICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRh
aW5lci5hcHBlbmRDaGlsZChjaHVuay5lbGVtZW50KTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gU2hpZnQgZGVjb3JhdGlvbnMgaWYgbmVjZXNzYXJ5CisgICAgICAgICAgICBmb3Ig
KHZhciBsaW5lTnVtYmVyIGluIHRoaXMuX2RlY29yYXRpb25zKSB7CisgICAgICAgICAgICAgICAg
bGluZU51bWJlciA9IHBhcnNlSW50KGxpbmVOdW1iZXIsIDEwKTsKKworICAgICAgICAgICAgICAg
IC8vIERvIG5vdCBtb3ZlIGRlY29yYXRpb25zIGJlZm9yZSB0aGUgc3RhcnQgcG9zaXRpb24uCisg
ICAgICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPCBvbGRSYW5nZS5zdGFydExpbmUpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIC8vIERlY29yYXRpb25z
IGZvbGxvdyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGxpbmUuCisgICAgICAgICAgICAgICAgaWYg
KGxpbmVOdW1iZXIgPT09IG9sZFJhbmdlLnN0YXJ0TGluZSAmJiBvbGRSYW5nZS5zdGFydENvbHVt
bikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICB2YXIg
bGluZURlY29yYXRpb25zQ29weSA9IHRoaXMuX2RlY29yYXRpb25zW2xpbmVOdW1iZXJdLnNsaWNl
KCk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lRGVjb3JhdGlvbnND
b3B5Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvcmF0aW9uID0g
bGluZURlY29yYXRpb25zQ29weVtpXTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVE
ZWNvcmF0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRpb24pOworCisgICAgICAgICAgICAgICAgICAg
IC8vIERvIG5vdCByZXN0b3JlIHRoZSBkZWNvcmF0aW9ucyBiZWZvcmUgdGhlIGVuZCBwb3NpdGlv
bi4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPCBvbGRSYW5nZS5lbmRMaW5l
KQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIgKyBsaW5lc0RpZmYsIGRlY29yYXRpb24p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy5f
cmVwYWludEFsbCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRGVjb3JhdGlv
bnMgbWF5IGhhdmUgYmVlbiByZW1vdmVkLCBzbyB3ZSBtYXkgaGF2ZSB0byBzeW5jIHRob3NlIGxp
bmVzLgorICAgICAgICAgICAgdmFyIGNodW5rTnVtYmVyID0gdGhpcy5fY2h1bmtOdW1iZXJGb3JM
aW5lKG5ld1JhbmdlLnN0YXJ0TGluZSk7CisgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90
ZXh0Q2h1bmtzW2NodW5rTnVtYmVyXTsKKyAgICAgICAgICAgIHdoaWxlIChjaHVuayAmJiBjaHVu
ay5zdGFydExpbmUgPD0gbmV3UmFuZ2UuZW5kTGluZSkgeworICAgICAgICAgICAgICAgIGlmIChj
aHVuay5saW5lc0NvdW50ID09PSAxKQorICAgICAgICAgICAgICAgICAgICB0aGlzLl9zeW5jRGVj
b3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIoY2h1bmsuc3RhcnRMaW5lKTsKKyAgICAgICAgICAgICAg
ICBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbKytjaHVua051bWJlcl07CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICB0aGlzLmVuZERvbVVwZGF0ZXMoKTsKKyAgICB9LAorCisg
ICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGNsaWVudEhlaWdodAorICAgICAqLworICAg
IHN5bmNDbGllbnRIZWlnaHQ6IGZ1bmN0aW9uKGNsaWVudEhlaWdodCkKKyAgICB7CisgICAgICAg
IGlmICh0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0ID4gY2xpZW50SGVpZ2h0KQorICAgICAgICAg
ICAgdGhpcy5fY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KCJwYWRkaW5nLWJvdHRvbSIsICh0
aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gY2xpZW50SGVpZ2h0KSArICJweCIpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICB0aGlzLl9jb250YWluZXIuc3R5bGUucmVtb3ZlUHJvcGVydHko
InBhZGRpbmctYm90dG9tIik7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVt
YmVyfSBsaW5lTnVtYmVyCisgICAgICogQHBhcmFtIHtzdHJpbmd8RWxlbWVudH0gZGVjb3JhdGlv
bgorICAgICAqLworICAgIGFkZERlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGRlY29y
YXRpb24pCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5l
bC5wcm90b3R5cGUuYWRkRGVjb3JhdGlvbi5jYWxsKHRoaXMsIGxpbmVOdW1iZXIsIGRlY29yYXRp
b24pOworICAgICAgICB2YXIgZGVjb3JhdGlvbnMgPSB0aGlzLl9kZWNvcmF0aW9uc1tsaW5lTnVt
YmVyXTsKKyAgICAgICAgaWYgKCFkZWNvcmF0aW9ucykgeworICAgICAgICAgICAgZGVjb3JhdGlv
bnMgPSBbXTsKKyAgICAgICAgICAgIHRoaXMuX2RlY29yYXRpb25zW2xpbmVOdW1iZXJdID0gZGVj
b3JhdGlvbnM7CisgICAgICAgIH0KKyAgICAgICAgZGVjb3JhdGlvbnMucHVzaChkZWNvcmF0aW9u
KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIK
KyAgICAgKiBAcGFyYW0ge3N0cmluZ3xFbGVtZW50fSBkZWNvcmF0aW9uCisgICAgICovCisgICAg
cmVtb3ZlRGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgZGVjb3JhdGlvbikKKyAgICB7
CisgICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5y
ZW1vdmVEZWNvcmF0aW9uLmNhbGwodGhpcywgbGluZU51bWJlciwgZGVjb3JhdGlvbik7CisgICAg
ICAgIHZhciBkZWNvcmF0aW9ucyA9IHRoaXMuX2RlY29yYXRpb25zW2xpbmVOdW1iZXJdOworICAg
ICAgICBpZiAoZGVjb3JhdGlvbnMpIHsKKyAgICAgICAgICAgIGRlY29yYXRpb25zLnJlbW92ZShk
ZWNvcmF0aW9uKTsKKyAgICAgICAgICAgIGlmICghZGVjb3JhdGlvbnMubGVuZ3RoKQorICAgICAg
ICAgICAgICAgIGRlbGV0ZSB0aGlzLl9kZWNvcmF0aW9uc1tsaW5lTnVtYmVyXTsKKyAgICAgICAg
fQorICAgIH0KK30KKworV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbC5wcm90b3R5
cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90
eXBlOworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICovCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ckd1dHRlckNodW5rID0gZnVuY3Rpb24odGV4dEVkaXRvciwgc3RhcnRMaW5lLCBlbmRMaW5lKQor
eworICAgIHRoaXMuX3RleHRFZGl0b3IgPSB0ZXh0RWRpdG9yOworICAgIHRoaXMuX3RleHRNb2Rl
bCA9IHRleHRFZGl0b3IuX3RleHRNb2RlbDsKKworICAgIHRoaXMuc3RhcnRMaW5lID0gc3RhcnRM
aW5lOworICAgIGVuZExpbmUgPSBNYXRoLm1pbih0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCwg
ZW5kTGluZSk7CisgICAgdGhpcy5saW5lc0NvdW50ID0gZW5kTGluZSAtIHN0YXJ0TGluZTsKKwor
ICAgIHRoaXMuX2V4cGFuZGVkID0gZmFsc2U7CisKKyAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlzLmVsZW1lbnQubGluZU51bWJlciA9IHN0
YXJ0TGluZTsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLW51bWJl
ciI7CisKKyAgICBpZiAodGhpcy5saW5lc0NvdW50ID09PSAxKSB7CisgICAgICAgIC8vIFNpbmds
ZSBsaW5lIGNodW5rcyBhcmUgdHlwaWNhbGx5IGNyZWF0ZWQgZm9yIGRlY29yYXRpb25zLiBIb3N0
IGxpbmUgbnVtYmVyIGluCisgICAgICAgIC8vIHRoZSBzdWItZWxlbWVudCBpbiBvcmRlciB0byBh
bGxvdyBmbGV4aWJsZSBib3JkZXIgLyBtYXJnaW4gbWFuYWdlbWVudC4KKyAgICAgICAgdmFyIGlu
bmVyU3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgaW5uZXJT
cGFuLmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1udW1iZXItaW5uZXIiOworICAgICAgICBpbm5l
clNwYW4udGV4dENvbnRlbnQgPSBzdGFydExpbmUgKyAxOworICAgICAgICB2YXIgb3V0ZXJTcGFu
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIG91dGVyU3Bhbi5jbGFz
c05hbWUgPSAid2Via2l0LWxpbmUtbnVtYmVyLW91dGVyIjsKKyAgICAgICAgb3V0ZXJTcGFuLmFw
cGVuZENoaWxkKGlubmVyU3Bhbik7CisgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChv
dXRlclNwYW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBsaW5lTnVtYmVycyA9IFtdOwor
ICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRMaW5lOyBpIDwgZW5kTGluZTsgKytpKQorICAgICAg
ICAgICAgbGluZU51bWJlcnMucHVzaChpICsgMSk7CisgICAgICAgIHRoaXMuZWxlbWVudC50ZXh0
Q29udGVudCA9IGxpbmVOdW1iZXJzLmpvaW4oIlxuIik7CisgICAgfQorfQorCitXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvckd1dHRlckNodW5rLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBA
cGFyYW0ge3N0cmluZ30gZGVjb3JhdGlvbgorICAgICAqLworICAgIGFkZERlY29yYXRpb246IGZ1
bmN0aW9uKGRlY29yYXRpb24pCisgICAgeworICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLmJlZ2lu
RG9tVXBkYXRlcygpOworICAgICAgICBpZiAodHlwZW9mIGRlY29yYXRpb24gPT09ICJzdHJpbmci
KQorICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoZGVjb3JhdGlvbik7Cisg
ICAgICAgIHRoaXMuX3RleHRFZGl0b3IuZW5kRG9tVXBkYXRlcygpOworICAgIH0sCisKKyAgICAv
KioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGVjb3JhdGlvbgorICAgICAqLworICAgIHJlbW92
ZURlY29yYXRpb246IGZ1bmN0aW9uKGRlY29yYXRpb24pCisgICAgeworICAgICAgICB0aGlzLl90
ZXh0RWRpdG9yLmJlZ2luRG9tVXBkYXRlcygpOworICAgICAgICBpZiAodHlwZW9mIGRlY29yYXRp
b24gPT09ICJzdHJpbmciKQorICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZVN0eWxlQ2xh
c3MoZGVjb3JhdGlvbik7CisgICAgICAgIHRoaXMuX3RleHRFZGl0b3IuZW5kRG9tVXBkYXRlcygp
OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqLwor
ICAgIGdldCBleHBhbmRlZCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWQ7
CisgICAgfSwKKworICAgIHNldCBleHBhbmRlZChleHBhbmRlZCkKKyAgICB7CisgICAgICAgIGlm
ICh0aGlzLmxpbmVzQ291bnQgPT09IDEpCisgICAgICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLl9z
eW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIodGhpcy5zdGFydExpbmUpOworCisgICAgICAg
IGlmICh0aGlzLl9leHBhbmRlZCA9PT0gZXhwYW5kZWQpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgdGhpcy5fZXhwYW5kZWQgPSBleHBhbmRlZDsKKworICAgICAgICBpZiAodGhpcy5s
aW5lc0NvdW50ID09PSAxKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX3Rl
eHRFZGl0b3IuYmVnaW5Eb21VcGRhdGVzKCk7CisKKyAgICAgICAgaWYgKGV4cGFuZGVkKSB7Cisg
ICAgICAgICAgICB0aGlzLl9leHBhbmRlZExpbmVSb3dzID0gW107CisgICAgICAgICAgICB2YXIg
cGFyZW50RWxlbWVudCA9IHRoaXMuZWxlbWVudC5wYXJlbnRFbGVtZW50OworICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IHRoaXMuc3RhcnRMaW5lOyBpIDwgdGhpcy5zdGFydExpbmUgKyB0aGlzLmxp
bmVzQ291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fY3Jl
YXRlUm93KGkpOworICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGxp
bmVSb3csIHRoaXMuZWxlbWVudCk7CisgICAgICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRMaW5l
Um93cy5wdXNoKGxpbmVSb3cpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyZW50RWxl
bWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQpOworICAgICAgICAgICAgdGhpcy5fdGV4dEVk
aXRvci5fc3luY0xpbmVIZWlnaHRMaXN0ZW5lcih0aGlzLl9leHBhbmRlZExpbmVSb3dzWzBdKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBlbGVtZW50SW5zZXJ0ZWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZXhwYW5kZWRMaW5lUm93
cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fZXhw
YW5kZWRMaW5lUm93c1tpXTsKKyAgICAgICAgICAgICAgICB2YXIgcGFyZW50RWxlbWVudCA9IGxp
bmVSb3cucGFyZW50RWxlbWVudDsKKyAgICAgICAgICAgICAgICBpZiAocGFyZW50RWxlbWVudCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRJbnNlcnRlZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbWVudEluc2VydGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuZWxlbWVudCwgbGluZVJvdyk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVu
dC5yZW1vdmVDaGlsZChsaW5lUm93KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgdGhpcy5fdGV4dEVkaXRvci5fY2FjaGVkUm93cy5wdXNoKGxpbmVSb3cpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2V4cGFuZGVkTGluZVJvd3M7CisgICAgICAg
IH0KKworICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLmVuZERvbVVwZGF0ZXMoKTsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICogQHJldHVybiB7bnVtYmVyfQorICAgICAqLworICAgIGdldCBoZWln
aHQoKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9leHBhbmRlZExpbmVSb3dzKQorICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3RleHRFZGl0b3IuX3RvdGFsSGVpZ2h0KHRoaXMuZWxlbWVudCk7
CisgICAgICAgIHJldHVybiB0aGlzLl90ZXh0RWRpdG9yLl90b3RhbEhlaWdodCh0aGlzLl9leHBh
bmRlZExpbmVSb3dzWzBdLCB0aGlzLl9leHBhbmRlZExpbmVSb3dzW3RoaXMuX2V4cGFuZGVkTGlu
ZVJvd3MubGVuZ3RoIC0gMV0pOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtu
dW1iZXJ9CisgICAgICovCisgICAgZ2V0IG9mZnNldFRvcCgpCisgICAgeworICAgICAgICByZXR1
cm4gKHRoaXMuX2V4cGFuZGVkTGluZVJvd3MgJiYgdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5sZW5n
dGgpID8gdGhpcy5fZXhwYW5kZWRMaW5lUm93c1swXS5vZmZzZXRUb3AgOiB0aGlzLmVsZW1lbnQu
b2Zmc2V0VG9wOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGlu
ZU51bWJlcgorICAgICAqIEByZXR1cm4ge0VsZW1lbnR9CisgICAgICovCisgICAgX2NyZWF0ZVJv
dzogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIHZhciBsaW5lUm93ID0gdGhp
cy5fdGV4dEVkaXRvci5fY2FjaGVkUm93cy5wb3AoKSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKKyAgICAgICAgbGluZVJvdy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICAg
ICAgbGluZVJvdy5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtbnVtYmVyIjsKKyAgICAgICAgbGlu
ZVJvdy50ZXh0Q29udGVudCA9IGxpbmVOdW1iZXIgKyAxOworICAgICAgICByZXR1cm4gbGluZVJv
dzsKKyAgICB9Cit9CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAZXh0ZW5kcyB7V2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWx9CisgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5U
ZXh0RWRpdG9yTW9kZWx9IHRleHRNb2RlbAorICogQHBhcmFtIHs/c3RyaW5nfSB1cmwKKyAqLwor
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwgPSBmdW5jdGlvbih0ZXh0TW9kZWwsIHVy
bCwgc3luY1Njcm9sbExpc3RlbmVyLCBzeW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIsIGVu
dGVyVGV4dENoYW5nZU1vZGUsIGV4aXRUZXh0Q2hhbmdlTW9kZSkKK3sKKyAgICBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5jYWxsKHRoaXMsIHRleHRNb2RlbCk7CisKKyAgICB0
aGlzLl9zeW5jU2Nyb2xsTGlzdGVuZXIgPSBzeW5jU2Nyb2xsTGlzdGVuZXI7CisgICAgdGhpcy5f
c3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyID0gc3luY0RlY29yYXRpb25zRm9yTGluZUxp
c3RlbmVyOworICAgIHRoaXMuX2VudGVyVGV4dENoYW5nZU1vZGUgPSBlbnRlclRleHRDaGFuZ2VN
b2RlOworICAgIHRoaXMuX2V4aXRUZXh0Q2hhbmdlTW9kZSA9IGV4aXRUZXh0Q2hhbmdlTW9kZTsK
KworICAgIHRoaXMuX3VybCA9IHVybDsKKyAgICB0aGlzLl9oaWdobGlnaHRlciA9IG5ldyBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvckhpZ2hsaWdodGVyKHRleHRNb2RlbCwgdGhpcy5faGlnaGxpZ2h0
RGF0YVJlYWR5LmJpbmQodGhpcykpOworICAgIHRoaXMuX3JlYWRPbmx5ID0gdHJ1ZTsKKworICAg
IHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIHRoaXMu
ZWxlbWVudC5jbGFzc05hbWUgPSAidGV4dC1lZGl0b3ItY29udGVudHMiOworICAgIHRoaXMuZWxl
bWVudC50YWJJbmRleCA9IDA7CisKKyAgICB0aGlzLl9jb250YWluZXIgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlzLl9jb250YWluZXIuY2xhc3NOYW1lID0gImlubmVy
LWNvbnRhaW5lciI7CisgICAgdGhpcy5fY29udGFpbmVyLnRhYkluZGV4ID0gMDsKKyAgICB0aGlz
LmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKTsKKworICAgIHRoaXMuZWxlbWVu
dC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLl9zY3JvbGwuYmluZCh0aGlzKSwgZmFs
c2UpOworICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIHRoaXMuX2hh
bmRsZUVsZW1lbnRGb2N1cy5iaW5kKHRoaXMpLCBmYWxzZSk7CisKKyAgICAvLyBJbiBXZWJLaXQg
dGhlIERPTU5vZGVSZW1vdmVkIGV2ZW50IGlzIGZpcmVkIEFGVEVSIHRoZSBub2RlIGlzIHJlbW92
ZWQsIHRodXMgaXQgc2hvdWxkIGJlCisgICAgLy8gYXR0YWNoZWQgdG8gYWxsIERPTSBub2RlcyB0
aGF0IHdlIHdhbnQgdG8gdHJhY2suIEluc3RlYWQsIHdlIGF0dGFjaCB0aGUgRE9NTm9kZVJlbW92
ZWQKKyAgICAvLyBsaXN0ZW5lcnMgb25seSBvbiB0aGUgbGluZSByb3dzLCBhbmQgdXNlIERPTVN1
YnRyZWVNb2RpZmllZCB0byB0cmFjayBub2RlIHJlbW92YWxzIGluc2lkZQorICAgIC8vIHRoZSBs
aW5lIHJvd3MuIEZvciBtb3JlIGluZm8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTU2NjYKKyAgICAvLworICAgIC8vIE9QVElNSVpBVElPTi4gSXQgaXMgdmVy
eSBleHBlbnNpdmUgdG8gbGlzdGVuIHRvIHRoZSBET00gbXV0YXRpb24gZXZlbnRzLCB0aHVzIHdl
IHJlbW92ZSB0aGUKKyAgICAvLyBsaXN0ZW5lcnMgd2hlbmV2ZXIgd2UgZG8gYW55IGludGVybmFs
IERPTSBtYW5pcHVsYXRpb25zIChzdWNoIGFzIGV4cGFuZC9jb2xsYXBzZSBsaW5lIHJvd3MpCisg
ICAgLy8gYW5kIHNldCB0aGUgbGlzdGVuZXJzIGJhY2sgd2hlbiB3ZSBhcmUgZmluaXNoZWQuCisg
ICAgdGhpcy5faGFuZGxlRE9NVXBkYXRlc0NhbGxiYWNrID0gdGhpcy5faGFuZGxlRE9NVXBkYXRl
cy5iaW5kKHRoaXMpOworICAgIHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJET01D
aGFyYWN0ZXJEYXRhTW9kaWZpZWQiLCB0aGlzLl9oYW5kbGVET01VcGRhdGVzQ2FsbGJhY2ssIGZh
bHNlKTsKKyAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiRE9NTm9kZUluc2Vy
dGVkIiwgdGhpcy5faGFuZGxlRE9NVXBkYXRlc0NhbGxiYWNrLCBmYWxzZSk7CisgICAgdGhpcy5f
Y29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoIkRPTVN1YnRyZWVNb2RpZmllZCIsIHRoaXMuX2hh
bmRsZURPTVVwZGF0ZXNDYWxsYmFjaywgZmFsc2UpOworCisgICAgdGhpcy5mcmVlQ2FjaGVkRWxl
bWVudHMoKTsKKyAgICB0aGlzLl9idWlsZENodW5rcygpOworfQorCitXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHBhcmFtIHtz
dHJpbmd9IG1pbWVUeXBlCisgICAgICovCisgICAgc2V0IG1pbWVUeXBlKG1pbWVUeXBlKQorICAg
IHsKKyAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZXIubWltZVR5cGUgPSBtaW1lVHlwZTsKKyAgICB9
LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtib29sZWFufSByZWFkT25seQorICAgICAqIEBw
YXJhbSB7Ym9vbGVhbn0gcmVxdWVzdEZvY3VzCisgICAgICovCisgICAgc2V0UmVhZE9ubHk6IGZ1
bmN0aW9uKHJlYWRPbmx5LCByZXF1ZXN0Rm9jdXMpCisgICAgeworICAgICAgICBpZiAodGhpcy5f
cmVhZE9ubHkgPT09IHJlYWRPbmx5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRo
aXMuYmVnaW5Eb21VcGRhdGVzKCk7CisgICAgICAgIHRoaXMuX3JlYWRPbmx5ID0gcmVhZE9ubHk7
CisgICAgICAgIGlmICh0aGlzLl9yZWFkT25seSkKKyAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5l
ci5yZW1vdmVTdHlsZUNsYXNzKCJ0ZXh0LWVkaXRvci1lZGl0YWJsZSIpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5hZGRTdHlsZUNsYXNzKCJ0ZXh0LWVkaXRv
ci1lZGl0YWJsZSIpOworICAgICAgICAgICAgaWYgKHJlcXVlc3RGb2N1cykKKyAgICAgICAgICAg
ICAgICB0aGlzLl91cGRhdGVTZWxlY3Rpb25PblN0YXJ0RWRpdGluZygpOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuZW5kRG9tVXBkYXRlcygpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBA
cmV0dXJuIHtib29sZWFufQorICAgICAqLworICAgIHJlYWRPbmx5OiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHk7CisgICAgfSwKKworICAgIF9oYW5kbGVF
bGVtZW50Rm9jdXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fcmVhZE9u
bHkpCisgICAgICAgICAgICB0aGlzLl9jb250YWluZXIuZm9jdXMoKTsKKyAgICB9LAorCisgICAg
LyoqCisgICAgICogQHJldHVybiB7RWxlbWVudH0KKyAgICAgKi8KKyAgICBkZWZhdWx0Rm9jdXNl
ZEVsZW1lbnQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9yZWFkT25seSkK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQ7CisgICAgICAgIHJldHVybiB0aGlzLl9j
b250YWluZXI7CisgICAgfSwKKworICAgIF91cGRhdGVTZWxlY3Rpb25PblN0YXJ0RWRpdGluZzog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgLy8gZm9jdXMoKSBuZWVkcyB0byBnbyBmaXJzdCBm
b3IgdGhlIGNhc2Ugd2hlbiB0aGUgbGFzdCBzZWxlY3Rpb24gd2FzIGluc2lkZSB0aGUgZWRpdG9y
IGFuZAorICAgICAgICAvLyB0aGUgIkVkaXQiIGJ1dHRvbiB3YXMgY2xpY2tlZC4gSW4gdGhpcyBj
YXNlIHdlIGJhaWwgYXQgdGhlIGNoZWNrIGJlbG93LCBidXQgdGhlCisgICAgICAgIC8vIGVkaXRv
ciBkb2VzIG5vdCByZWNlaXZlIHRoZSBmb2N1cywgdGh1cyAiRXNjIiBkb2VzIG5vdCBjYW5jZWwg
ZWRpdGluZyB1bnRpbCBhdCBsZWFzdAorICAgICAgICAvLyBvbmUgY2hhbmdlIGhhcyBiZWVuIG1h
ZGUgdG8gdGhlIGVkaXRvciBjb250ZW50cy4KKyAgICAgICAgdGhpcy5fY29udGFpbmVyLmZvY3Vz
KCk7CisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisgICAg
ICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCkgeworICAgICAgICAgICAgdmFyIGNvbW1vbkFu
Y2VzdG9yQ29udGFpbmVyID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCkuY29tbW9uQW5jZXN0b3JD
b250YWluZXI7CisgICAgICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyLmlzU2VsZk9yQW5jZXN0
b3IoY29tbW9uQW5jZXN0b3JDb250YWluZXIpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKKyAgICAgICAg
dmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKKyAgICAgICAgcmFuZ2Uuc2V0U3Rh
cnQodGhpcy5fY29udGFpbmVyLCAwKTsKKyAgICAgICAgcmFuZ2Uuc2V0RW5kKHRoaXMuX2NvbnRh
aW5lciwgMCk7CisgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7CisgICAgfSwKKwor
ICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydExpbmUKKyAgICAgKiBAcGFyYW0g
e251bWJlcn0gZW5kTGluZQorICAgICAqLworICAgIHNldEVkaXRhYmxlUmFuZ2U6IGZ1bmN0aW9u
KHN0YXJ0TGluZSwgZW5kTGluZSkKKyAgICB7CisgICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVz
KCk7CisKKyAgICAgICAgdmFyIGZpcnN0Q2h1bmtOdW1iZXIgPSB0aGlzLl9jaHVua051bWJlckZv
ckxpbmUoc3RhcnRMaW5lKTsKKyAgICAgICAgdmFyIGZpcnN0Q2h1bmsgPSB0aGlzLl90ZXh0Q2h1
bmtzW2ZpcnN0Q2h1bmtOdW1iZXJdOworICAgICAgICBpZiAoZmlyc3RDaHVuay5zdGFydExpbmUg
IT09IHN0YXJ0TGluZSkgeworICAgICAgICAgICAgdGhpcy5fc3BsaXRDaHVua09uQUxpbmUoc3Rh
cnRMaW5lLCBmaXJzdENodW5rTnVtYmVyKTsKKyAgICAgICAgICAgIGZpcnN0Q2h1bmtOdW1iZXIg
Kz0gMTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBsYXN0Q2h1bmtOdW1iZXIgPSB0aGlzLl90
ZXh0Q2h1bmtzLmxlbmd0aDsKKyAgICAgICAgaWYgKGVuZExpbmUgIT09IHRoaXMuX3RleHRNb2Rl
bC5saW5lc0NvdW50KSB7CisgICAgICAgICAgICBsYXN0Q2h1bmtOdW1iZXIgPSB0aGlzLl9jaHVu
a051bWJlckZvckxpbmUoZW5kTGluZSk7CisgICAgICAgICAgICB2YXIgbGFzdENodW5rID0gdGhp
cy5fdGV4dENodW5rc1tsYXN0Q2h1bmtOdW1iZXJdOworICAgICAgICAgICAgaWYgKGxhc3RDaHVu
ayAmJiBsYXN0Q2h1bmsuc3RhcnRMaW5lICE9PSBlbmRMaW5lKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fc3BsaXRDaHVua09uQUxpbmUoZW5kTGluZSwgbGFzdENodW5rTnVtYmVyKTsKKyAgICAg
ICAgICAgICAgICBsYXN0Q2h1bmtOdW1iZXIgKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGZvciAodmFyIGNodW5rTnVtYmVyID0gMDsgY2h1bmtOdW1iZXIgPCBmaXJz
dENodW5rTnVtYmVyOyArK2NodW5rTnVtYmVyKQorICAgICAgICAgICAgdGhpcy5fdGV4dENodW5r
c1tjaHVua051bWJlcl0ucmVhZE9ubHkgPSB0cnVlOworICAgICAgICBmb3IgKHZhciBjaHVua051
bWJlciA9IGZpcnN0Q2h1bmtOdW1iZXI7IGNodW5rTnVtYmVyIDwgbGFzdENodW5rTnVtYmVyOyAr
K2NodW5rTnVtYmVyKQorICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rc1tjaHVua051bWJlcl0u
cmVhZE9ubHkgPSBmYWxzZTsKKyAgICAgICAgZm9yICh2YXIgY2h1bmtOdW1iZXIgPSBsYXN0Q2h1
bmtOdW1iZXI7IGNodW5rTnVtYmVyIDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGg7ICsrY2h1bmtO
dW1iZXIpCisgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVtYmVyXS5yZWFkT25s
eSA9IHRydWU7CisKKyAgICAgICAgdGhpcy5lbmREb21VcGRhdGVzKCk7CisgICAgfSwKKworICAg
IGNsZWFyRWRpdGFibGVSYW5nZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgZm9yICh2YXIg
Y2h1bmtOdW1iZXIgPSAwOyBjaHVua051bWJlciA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyAr
K2NodW5rTnVtYmVyKQorICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rc1tjaHVua051bWJlcl0u
cmVhZE9ubHkgPSBmYWxzZTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuVGV4dFJhbmdlfSByYW5nZQorICAgICAqLworICAgIG1hcmtBbmRSZXZlYWxSYW5n
ZTogZnVuY3Rpb24ocmFuZ2UpCisgICAgeworICAgICAgICBpZiAodGhpcy5fcmFuZ2VUb01hcmsp
IHsKKyAgICAgICAgICAgIHZhciBtYXJrZWRMaW5lID0gdGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRM
aW5lOworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3JhbmdlVG9NYXJrOworICAgICAgICAgICAg
Ly8gUmVtb3ZlIHRoZSBtYXJrZWQgcmVnaW9uIGltbWVkaWF0ZWx5LgorICAgICAgICAgICAgaWYg
KCF0aGlzLl9kaXJ0eUxpbmVzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5iZWdpbkRvbVVwZGF0
ZXMoKTsKKyAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLmNodW5rRm9yTGluZShtYXJr
ZWRMaW5lKTsKKyAgICAgICAgICAgICAgICB2YXIgd2FzRXhwYW5kZWQgPSBjaHVuay5leHBhbmRl
ZDsKKyAgICAgICAgICAgICAgICBjaHVuay5leHBhbmRlZCA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIGNodW5rLnVwZGF0ZUNvbGxhcHNlZExpbmVSb3coKTsKKyAgICAgICAgICAgICAgICBjaHVu
ay5leHBhbmRlZCA9IHdhc0V4cGFuZGVkOworICAgICAgICAgICAgICAgIHRoaXMuZW5kRG9tVXBk
YXRlcygpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgdGhpcy5fcGFpbnRM
aW5lcyhtYXJrZWRMaW5lLCBtYXJrZWRMaW5lICsgMSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAocmFuZ2UpIHsKKyAgICAgICAgICAgIHRoaXMuX3JhbmdlVG9NYXJrID0gcmFuZ2U7CisgICAg
ICAgICAgICB0aGlzLnJldmVhbExpbmUocmFuZ2Uuc3RhcnRMaW5lKTsKKyAgICAgICAgICAgIHZh
ciBjaHVuayA9IHRoaXMubWFrZUxpbmVBQ2h1bmsocmFuZ2Uuc3RhcnRMaW5lKTsKKyAgICAgICAg
ICAgIHRoaXMuX3BhaW50TGluZShjaHVuay5lbGVtZW50KTsKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9tYXJrZWRSYW5nZUVsZW1lbnQpCisgICAgICAgICAgICAgICAgdGhpcy5fbWFya2VkUmFuZ2VF
bGVtZW50LnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKTsKKyAgICAgICAgfQorICAgICAgICBkZWxl
dGUgdGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBA
cGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqLworICAgIGhpZ2hsaWdodExpbmU6IGZ1
bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICB0aGlzLmNsZWFyTGluZUhpZ2hsaWdo
dCgpOworICAgICAgICB0aGlzLl9oaWdobGlnaHRlZExpbmUgPSBsaW5lTnVtYmVyOworICAgICAg
ICB0aGlzLnJldmVhbExpbmUobGluZU51bWJlcik7CisKKyAgICAgICAgaWYgKCF0aGlzLl9yZWFk
T25seSkKKyAgICAgICAgICAgIHRoaXMuX3Jlc3RvcmVTZWxlY3Rpb24oV2ViSW5zcGVjdG9yLlRl
eHRSYW5nZS5jcmVhdGVGcm9tTG9jYXRpb24obGluZU51bWJlciwgMCksIGZhbHNlKTsKKworICAg
ICAgICB0aGlzLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1oaWdobGlnaHRlZC1s
aW5lIik7CisgICAgfSwKKworICAgIGNsZWFyTGluZUhpZ2hsaWdodDogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9oaWdobGlnaHRlZExpbmUgPT09ICJudW1iZXIi
KSB7CisgICAgICAgICAgICB0aGlzLnJlbW92ZURlY29yYXRpb24odGhpcy5faGlnaGxpZ2h0ZWRM
aW5lLCAid2Via2l0LWhpZ2hsaWdodGVkLWxpbmUiKTsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlz
Ll9oaWdobGlnaHRlZExpbmU7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgZnJlZUNhY2hlZEVs
ZW1lbnRzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jYWNoZWRTcGFucyA9IFtd
OworICAgICAgICB0aGlzLl9jYWNoZWRUZXh0Tm9kZXMgPSBbXTsKKyAgICAgICAgdGhpcy5fY2Fj
aGVkUm93cyA9IFtdOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW59
IHJlZG8KKyAgICAgKi8KKyAgICBoYW5kbGVVbmRvUmVkbzogZnVuY3Rpb24ocmVkbykKKyAgICB7
CisgICAgICAgIGlmICh0aGlzLl9kaXJ0eUxpbmVzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIHRoaXMuYmVnaW5VcGRhdGVzKCk7CisKKyAgICAgICAgZnVuY3Rpb24gYmVm
b3JlKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5fZW50ZXJUZXh0Q2hhbmdlTW9kZSgp
OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gYWZ0ZXIob2xkUmFuZ2UsIG5ld1Jhbmdl
KQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLl9leGl0VGV4dENoYW5nZU1vZGUob2xkUmFu
Z2UsIG5ld1JhbmdlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciByYW5nZSA9IHJlZG8gPyB0
aGlzLl90ZXh0TW9kZWwucmVkbyhiZWZvcmUuYmluZCh0aGlzKSwgYWZ0ZXIuYmluZCh0aGlzKSkg
OiB0aGlzLl90ZXh0TW9kZWwudW5kbyhiZWZvcmUuYmluZCh0aGlzKSwgYWZ0ZXIuYmluZCh0aGlz
KSk7CisKKyAgICAgICAgdGhpcy5lbmRVcGRhdGVzKCk7CisKKyAgICAgICAgLy8gUmVzdG9yZSBs
b2NhdGlvbiBwb3N0LXJlcGFpbnQuCisgICAgICAgIGlmIChyYW5nZSkKKyAgICAgICAgICAgIHRo
aXMuX3Jlc3RvcmVTZWxlY3Rpb24ocmFuZ2UsIHRydWUpOworCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNoaWZ0S2V5Cisg
ICAgICovCisgICAgaGFuZGxlVGFiS2V5UHJlc3M6IGZ1bmN0aW9uKHNoaWZ0S2V5KQorICAgIHsK
KyAgICAgICAgaWYgKHRoaXMuX2RpcnR5TGluZXMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlvbigpOworICAgICAg
ICBpZiAoIXNlbGVjdGlvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB2
YXIgcmFuZ2UgPSBzZWxlY3Rpb24ubm9ybWFsaXplKCk7CisKKyAgICAgICAgdGhpcy5iZWdpblVw
ZGF0ZXMoKTsKKyAgICAgICAgdGhpcy5fZW50ZXJUZXh0Q2hhbmdlTW9kZSgpOworCisgICAgICAg
IHZhciBuZXdSYW5nZTsKKyAgICAgICAgdmFyIHJhbmdlV2FzRW1wdHkgPSByYW5nZS5pc0VtcHR5
KCk7CisgICAgICAgIGlmIChzaGlmdEtleSkKKyAgICAgICAgICAgIG5ld1JhbmdlID0gdGhpcy5f
dW5pbmRlbnRMaW5lcyhyYW5nZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKHJh
bmdlV2FzRW1wdHkpCisgICAgICAgICAgICAgICAgbmV3UmFuZ2UgPSB0aGlzLl9lZGl0UmFuZ2Uo
cmFuZ2UsIFdlYkluc3BlY3Rvci5zZXR0aW5ncy50ZXh0RWRpdG9ySW5kZW50LmdldCgpKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZXdSYW5nZSA9IHRoaXMuX2luZGVudExp
bmVzKHJhbmdlKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2V4aXRUZXh0Q2hhbmdlTW9k
ZShyYW5nZSwgbmV3UmFuZ2UpOworICAgICAgICB0aGlzLmVuZFVwZGF0ZXMoKTsKKyAgICAgICAg
aWYgKHJhbmdlV2FzRW1wdHkpCisgICAgICAgICAgICBuZXdSYW5nZS5zdGFydENvbHVtbiA9IG5l
d1JhbmdlLmVuZENvbHVtbjsKKyAgICAgICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihuZXdSYW5n
ZSwgdHJ1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0sCisKKyAgICAvKioKKyAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IHJhbmdlCisgICAgICovCisgICAgX2lu
ZGVudExpbmVzOiBmdW5jdGlvbihyYW5nZSkKKyAgICB7CisgICAgICAgIHZhciBpbmRlbnQgPSBX
ZWJJbnNwZWN0b3Iuc2V0dGluZ3MudGV4dEVkaXRvckluZGVudC5nZXQoKTsKKworICAgICAgICBp
ZiAodGhpcy5fbGFzdEVkaXRlZFJhbmdlKQorICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLm1h
cmtVbmRvYWJsZVN0YXRlKCk7CisKKyAgICAgICAgdmFyIG5ld1JhbmdlID0gcmFuZ2UuY2xvbmUo
KTsKKworICAgICAgICAvLyBEbyBub3QgY2hhbmdlIGEgc2VsZWN0aW9uIHN0YXJ0IHBvc2l0aW9u
IHdoZW4gaXQgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUKKyAgICAgICAgaWYgKHJhbmdl
LnN0YXJ0Q29sdW1uKQorICAgICAgICAgICAgbmV3UmFuZ2Uuc3RhcnRDb2x1bW4gKz0gaW5kZW50
Lmxlbmd0aDsKKworICAgICAgICB2YXIgaW5kZW50RW5kTGluZSA9IHJhbmdlLmVuZExpbmU7Cisg
ICAgICAgIGlmIChyYW5nZS5lbmRDb2x1bW4pCisgICAgICAgICAgICBuZXdSYW5nZS5lbmRDb2x1
bW4gKz0gaW5kZW50Lmxlbmd0aDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5kZW50RW5k
TGluZS0tOworCisgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgPSByYW5nZS5zdGFydExpbmU7
IGxpbmVOdW1iZXIgPD0gaW5kZW50RW5kTGluZTsgbGluZU51bWJlcisrKQorICAgICAgICAgICAg
dGhpcy5fdGV4dE1vZGVsLmVkaXRSYW5nZShXZWJJbnNwZWN0b3IuVGV4dFJhbmdlLmNyZWF0ZUZy
b21Mb2NhdGlvbihsaW5lTnVtYmVyLCAwKSwgaW5kZW50KTsKKworICAgICAgICB0aGlzLl9sYXN0
RWRpdGVkUmFuZ2UgPSBuZXdSYW5nZTsKKworICAgICAgICByZXR1cm4gbmV3UmFuZ2U7CisgICAg
fSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0gcmFu
Z2UKKyAgICAgKi8KKyAgICBfdW5pbmRlbnRMaW5lczogZnVuY3Rpb24ocmFuZ2UpCisgICAgewor
ICAgICAgICBpZiAodGhpcy5fbGFzdEVkaXRlZFJhbmdlKQorICAgICAgICAgICAgdGhpcy5fdGV4
dE1vZGVsLm1hcmtVbmRvYWJsZVN0YXRlKCk7CisKKyAgICAgICAgdmFyIGluZGVudCA9IFdlYklu
c3BlY3Rvci5zZXR0aW5ncy50ZXh0RWRpdG9ySW5kZW50LmdldCgpOworICAgICAgICB2YXIgaW5k
ZW50TGVuZ3RoID0gaW5kZW50ID09PSBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1vZGVsLkluZGVu
dC5UYWJDaGFyYWN0ZXIgPyA0IDogaW5kZW50Lmxlbmd0aDsKKyAgICAgICAgdmFyIGxpbmVJbmRl
bnRSZWdleCA9IG5ldyBSZWdFeHAoIl4gezEsIiArIGluZGVudExlbmd0aCArICJ9Iik7CisgICAg
ICAgIHZhciBuZXdSYW5nZSA9IHJhbmdlLmNsb25lKCk7CisKKyAgICAgICAgdmFyIGluZGVudEVu
ZExpbmUgPSByYW5nZS5lbmRMaW5lOworICAgICAgICBpZiAoIXJhbmdlLmVuZENvbHVtbikKKyAg
ICAgICAgICAgIGluZGVudEVuZExpbmUtLTsKKworICAgICAgICBmb3IgKHZhciBsaW5lTnVtYmVy
ID0gcmFuZ2Uuc3RhcnRMaW5lOyBsaW5lTnVtYmVyIDw9IGluZGVudEVuZExpbmU7IGxpbmVOdW1i
ZXIrKykgeworICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0TW9kZWwubGluZShsaW5l
TnVtYmVyKTsKKyAgICAgICAgICAgIHZhciBmaXJzdENoYXJhY3RlciA9IGxpbmUuY2hhckF0KDAp
OworICAgICAgICAgICAgdmFyIGxpbmVJbmRlbnRMZW5ndGg7CisKKyAgICAgICAgICAgIGlmIChm
aXJzdENoYXJhY3RlciA9PT0gIiAiKQorICAgICAgICAgICAgICAgIGxpbmVJbmRlbnRMZW5ndGgg
PSBsaW5lLm1hdGNoKGxpbmVJbmRlbnRSZWdleClbMF0ubGVuZ3RoOworICAgICAgICAgICAgZWxz
ZSBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09ICJcdCIpCisgICAgICAgICAgICAgICAgbGluZUluZGVu
dExlbmd0aCA9IDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5lZGl0UmFuZ2UobmV3IFdlYkluc3BlY3Rv
ci5UZXh0UmFuZ2UobGluZU51bWJlciwgMCwgbGluZU51bWJlciwgbGluZUluZGVudExlbmd0aCks
ICIiKTsKKworICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPT09IHJhbmdlLnN0YXJ0TGluZSkK
KyAgICAgICAgICAgICAgICBuZXdSYW5nZS5zdGFydENvbHVtbiA9IE1hdGgubWF4KDAsIG5ld1Jh
bmdlLnN0YXJ0Q29sdW1uIC0gbGluZUluZGVudExlbmd0aCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobGluZUluZGVudExlbmd0aCkKKyAgICAgICAgICAgIG5ld1JhbmdlLmVuZENvbHVtbiA9
IE1hdGgubWF4KDAsIG5ld1JhbmdlLmVuZENvbHVtbiAtIGxpbmVJbmRlbnRMZW5ndGgpOworCisg
ICAgICAgIHRoaXMuX2xhc3RFZGl0ZWRSYW5nZSA9IG5ld1JhbmdlOworCisgICAgICAgIHJldHVy
biBuZXdSYW5nZTsKKyAgICB9LAorCisgICAgaGFuZGxlRW50ZXJLZXk6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIGlmICh0aGlzLl9kaXJ0eUxpbmVzKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIHZhciByYW5nZSA9IHRoaXMuX2dldFNlbGVjdGlvbigpOworICAgICAg
ICBpZiAoIXJhbmdlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJhbmdl
ID0gcmFuZ2Uubm9ybWFsaXplKCk7CisKKyAgICAgICAgaWYgKHJhbmdlLmVuZENvbHVtbiA9PT0g
MCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB2YXIgbGluZSA9IHRoaXMu
X3RleHRNb2RlbC5saW5lKHJhbmdlLnN0YXJ0TGluZSk7CisgICAgICAgIHZhciBsaW5lUHJlZml4
ID0gbGluZS5zdWJzdHJpbmcoMCwgcmFuZ2Uuc3RhcnRDb2x1bW4pOworICAgICAgICB2YXIgaW5k
ZW50TWF0Y2ggPSBsaW5lUHJlZml4Lm1hdGNoKC9eXHMrLyk7CisgICAgICAgIHZhciBjdXJyZW50
SW5kZW50ID0gaW5kZW50TWF0Y2ggPyBpbmRlbnRNYXRjaFswXSA6ICIiOworCisgICAgICAgIHZh
ciB0ZXh0RWRpdG9ySW5kZW50ID0gV2ViSW5zcGVjdG9yLnNldHRpbmdzLnRleHRFZGl0b3JJbmRl
bnQuZ2V0KCk7CisgICAgICAgIHZhciBpbmRlbnQgPSBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1v
ZGVsLmVuZHNXaXRoQnJhY2tldFJlZ2V4LnRlc3QobGluZVByZWZpeCkgPyBjdXJyZW50SW5kZW50
ICsgdGV4dEVkaXRvckluZGVudCA6IGN1cnJlbnRJbmRlbnQ7CisKKyAgICAgICAgaWYgKCFpbmRl
bnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdGhpcy5iZWdpblVwZGF0
ZXMoKTsKKyAgICAgICAgdGhpcy5fZW50ZXJUZXh0Q2hhbmdlTW9kZSgpOworCisgICAgICAgIHZh
ciBsaW5lQnJlYWsgPSB0aGlzLl90ZXh0TW9kZWwubGluZUJyZWFrOworICAgICAgICB2YXIgbmV3
UmFuZ2U7CisgICAgICAgIGlmIChyYW5nZS5pc0VtcHR5KCkgJiYgbGluZS5zdWJzdHIocmFuZ2Uu
ZW5kQ29sdW1uIC0gMSwgMikgPT09ICd7fScpIHsKKyAgICAgICAgICAgIC8vIHt8fQorICAgICAg
ICAgICAgLy8gYmVjb21lcworICAgICAgICAgICAgLy8geworICAgICAgICAgICAgLy8gICAgIHwK
KyAgICAgICAgICAgIC8vIH0KKyAgICAgICAgICAgIG5ld1JhbmdlID0gdGhpcy5fZWRpdFJhbmdl
KHJhbmdlLCBsaW5lQnJlYWsgKyBpbmRlbnQgKyBsaW5lQnJlYWsgKyBjdXJyZW50SW5kZW50KTsK
KyAgICAgICAgICAgIG5ld1JhbmdlLmVuZExpbmUtLTsKKyAgICAgICAgICAgIG5ld1JhbmdlLmVu
ZENvbHVtbiArPSB0ZXh0RWRpdG9ySW5kZW50Lmxlbmd0aDsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBuZXdSYW5nZSA9IHRoaXMuX2VkaXRSYW5nZShyYW5nZSwgbGluZUJyZWFrICsgaW5k
ZW50KTsKKworICAgICAgICB0aGlzLl9leGl0VGV4dENoYW5nZU1vZGUocmFuZ2UsIG5ld1Jhbmdl
KTsKKyAgICAgICAgdGhpcy5lbmRVcGRhdGVzKCk7CisgICAgICAgIHRoaXMuX3Jlc3RvcmVTZWxl
Y3Rpb24obmV3UmFuZ2UuY29sbGFwc2VUb0VuZCgpLCB0cnVlKTsKKworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1i
ZXIKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gY2h1bmtOdW1iZXIKKyAgICAgKiBAcGFyYW0ge2Jv
b2xlYW49fSBjcmVhdGVTdWZmaXhDaHVuaworICAgICAqLworICAgIF9zcGxpdENodW5rT25BTGlu
ZTogZnVuY3Rpb24obGluZU51bWJlciwgY2h1bmtOdW1iZXIsIGNyZWF0ZVN1ZmZpeENodW5rKQor
ICAgIHsKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlvbigpOworICAg
ICAgICB2YXIgY2h1bmsgPSBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90
b3R5cGUuX3NwbGl0Q2h1bmtPbkFMaW5lLmNhbGwodGhpcywgbGluZU51bWJlciwgY2h1bmtOdW1i
ZXIsIGNyZWF0ZVN1ZmZpeENodW5rKTsKKyAgICAgICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihz
ZWxlY3Rpb24pOworICAgICAgICByZXR1cm4gY2h1bms7CisgICAgfSwKKworICAgIGJlZ2luRG9t
VXBkYXRlczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLmJlZ2luRG9tVXBkYXRlcy5jYWxsKHRoaXMpOworICAg
ICAgICBpZiAodGhpcy5fZG9tVXBkYXRlQ29hbGVzY2luZ0xldmVsID09PSAxKSB7CisgICAgICAg
ICAgICB0aGlzLl9jb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ2hhcmFjdGVyRGF0
YU1vZGlmaWVkIiwgdGhpcy5faGFuZGxlRE9NVXBkYXRlc0NhbGxiYWNrLCBmYWxzZSk7CisgICAg
ICAgICAgICB0aGlzLl9jb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NTm9kZUluc2Vy
dGVkIiwgdGhpcy5faGFuZGxlRE9NVXBkYXRlc0NhbGxiYWNrLCBmYWxzZSk7CisgICAgICAgICAg
ICB0aGlzLl9jb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NU3VidHJlZU1vZGlmaWVk
IiwgdGhpcy5faGFuZGxlRE9NVXBkYXRlc0NhbGxiYWNrLCBmYWxzZSk7CisgICAgICAgIH0KKyAg
ICB9LAorCisgICAgZW5kRG9tVXBkYXRlczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLmVuZERvbVVwZGF0ZXMu
Y2FsbCh0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMuX2RvbVVwZGF0ZUNvYWxlc2NpbmdMZXZlbCA9
PT0gMCkgeworICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoIkRP
TUNoYXJhY3RlckRhdGFNb2RpZmllZCIsIHRoaXMuX2hhbmRsZURPTVVwZGF0ZXNDYWxsYmFjaywg
ZmFsc2UpOworICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoIkRP
TU5vZGVJbnNlcnRlZCIsIHRoaXMuX2hhbmRsZURPTVVwZGF0ZXNDYWxsYmFjaywgZmFsc2UpOwor
ICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoIkRPTVN1YnRyZWVN
b2RpZmllZCIsIHRoaXMuX2hhbmRsZURPTVVwZGF0ZXNDYWxsYmFjaywgZmFsc2UpOworICAgICAg
ICB9CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbGluZVJvdwor
ICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlCisgICAgICovCisgICAgX2VuYWJsZURPTU5v
ZGVSZW1vdmVkTGlzdGVuZXI6IGZ1bmN0aW9uKGxpbmVSb3csIGVuYWJsZSkKKyAgICB7CisgICAg
ICAgIGlmIChlbmFibGUpCisgICAgICAgICAgICBsaW5lUm93LmFkZEV2ZW50TGlzdGVuZXIoIkRP
TU5vZGVSZW1vdmVkIiwgdGhpcy5faGFuZGxlRE9NVXBkYXRlc0NhbGxiYWNrLCBmYWxzZSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxpbmVSb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9N
Tm9kZVJlbW92ZWQiLCB0aGlzLl9oYW5kbGVET01VcGRhdGVzQ2FsbGJhY2ssIGZhbHNlKTsKKyAg
ICB9LAorCisgICAgX2J1aWxkQ2h1bmtzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50OyArK2kpCisgICAgICAg
ICAgICB0aGlzLl90ZXh0TW9kZWwucmVtb3ZlQXR0cmlidXRlKGksICJoaWdobGlnaHQiKTsKKwor
ICAgICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX2J1
aWxkQ2h1bmtzLmNhbGwodGhpcyk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7
bnVtYmVyfSBzdGFydExpbmUKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kTGluZQorICAgICAq
LworICAgIF9jcmVhdGVOZXdDaHVuazogZnVuY3Rpb24oc3RhcnRMaW5lLCBlbmRMaW5lKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuayh0
aGlzLCBzdGFydExpbmUsIGVuZExpbmUpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFy
YW0ge251bWJlcn0gZnJvbUluZGV4CisgICAgICogQHBhcmFtIHtudW1iZXJ9IHRvSW5kZXgKKyAg
ICAgKi8KKyAgICBfZXhwYW5kQ2h1bmtzOiBmdW5jdGlvbihmcm9tSW5kZXgsIHRvSW5kZXgpCisg
ICAgeworICAgICAgICB2YXIgbGFzdENodW5rID0gdGhpcy5fdGV4dENodW5rc1t0b0luZGV4IC0g
MV07CisgICAgICAgIHZhciBsYXN0VmlzaWJsZUxpbmUgPSBsYXN0Q2h1bmsuc3RhcnRMaW5lICsg
bGFzdENodW5rLmxpbmVzQ291bnQ7CisKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2dl
dFNlbGVjdGlvbigpOworCisgICAgICAgIHRoaXMuX211dGVIaWdobGlnaHRMaXN0ZW5lciA9IHRy
dWU7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdodGVyLmhpZ2hsaWdodChsYXN0VmlzaWJsZUxpbmUp
OworICAgICAgICBkZWxldGUgdGhpcy5fbXV0ZUhpZ2hsaWdodExpc3RlbmVyOworCisgICAgICAg
IHRoaXMuX3Jlc3RvcmVQYWludExpbmVzT3BlcmF0aW9uc0NyZWRpdCgpOworICAgICAgICBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX2V4cGFuZENodW5rcy5j
YWxsKHRoaXMsIGZyb21JbmRleCwgdG9JbmRleCk7CisgICAgICAgIHRoaXMuX2FkanVzdFBhaW50
TGluZXNPcGVyYXRpb25zUmVmcmVzaFZhbHVlKCk7CisKKyAgICAgICAgdGhpcy5fcmVzdG9yZVNl
bGVjdGlvbihzZWxlY3Rpb24pOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251
bWJlcn0gZnJvbUxpbmUKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gdG9MaW5lCisgICAgICovCisg
ICAgX2hpZ2hsaWdodERhdGFSZWFkeTogZnVuY3Rpb24oZnJvbUxpbmUsIHRvTGluZSkKKyAgICB7
CisgICAgICAgIGlmICh0aGlzLl9tdXRlSGlnaGxpZ2h0TGlzdGVuZXIpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHRoaXMuX3Jlc3RvcmVQYWludExpbmVzT3BlcmF0aW9uc0NyZWRpdCgp
OworICAgICAgICB0aGlzLl9wYWludExpbmVzKGZyb21MaW5lLCB0b0xpbmUsIHRydWUgLypyZXN0
b3JlU2VsZWN0aW9uKi8pOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJl
cn0gc3RhcnRMaW5lCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZExpbmUKKyAgICAgKi8KKyAg
ICBfc2NoZWR1bGVQYWludExpbmVzOiBmdW5jdGlvbihzdGFydExpbmUsIGVuZExpbmUpCisgICAg
eworICAgICAgICBpZiAoc3RhcnRMaW5lID49IGVuZExpbmUpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaWYgKCF0aGlzLl9zY2hlZHVsZWRQYWludExpbmVzKSB7CisgICAgICAgICAg
ICB0aGlzLl9zY2hlZHVsZWRQYWludExpbmVzID0gWyB7IHN0YXJ0TGluZTogc3RhcnRMaW5lLCBl
bmRMaW5lOiBlbmRMaW5lIH0gXTsKKyAgICAgICAgICAgIHRoaXMuX3BhaW50U2NoZWR1bGVkTGlu
ZXNUaW1lciA9IHNldFRpbWVvdXQodGhpcy5fcGFpbnRTY2hlZHVsZWRMaW5lcy5iaW5kKHRoaXMp
LCAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGhpcy5fc2NoZWR1bGVkUGFpbnRMaW5lcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAg
IHZhciBjaHVuayA9IHRoaXMuX3NjaGVkdWxlZFBhaW50TGluZXNbaV07CisgICAgICAgICAgICAg
ICAgaWYgKGNodW5rLnN0YXJ0TGluZSA8PSBlbmRMaW5lICYmIGNodW5rLmVuZExpbmUgPj0gc3Rh
cnRMaW5lKSB7CisgICAgICAgICAgICAgICAgICAgIGNodW5rLnN0YXJ0TGluZSA9IE1hdGgubWlu
KGNodW5rLnN0YXJ0TGluZSwgc3RhcnRMaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgY2h1bmsu
ZW5kTGluZSA9IE1hdGgubWF4KGNodW5rLmVuZExpbmUsIGVuZExpbmUpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChj
aHVuay5zdGFydExpbmUgPiBlbmRMaW5lKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Nj
aGVkdWxlZFBhaW50TGluZXMuc3BsaWNlKGksIDAsIHsgc3RhcnRMaW5lOiBzdGFydExpbmUsIGVu
ZExpbmU6IGVuZExpbmUgfSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9zY2hlZHVsZWRQYWlu
dExpbmVzLnB1c2goeyBzdGFydExpbmU6IHN0YXJ0TGluZSwgZW5kTGluZTogZW5kTGluZSB9KTsK
KyAgICAgICAgfQorICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNr
aXBSZXN0b3JlU2VsZWN0aW9uCisgICAgICovCisgICAgX3BhaW50U2NoZWR1bGVkTGluZXM6IGZ1
bmN0aW9uKHNraXBSZXN0b3JlU2VsZWN0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3Bh
aW50U2NoZWR1bGVkTGluZXNUaW1lcikKKyAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9w
YWludFNjaGVkdWxlZExpbmVzVGltZXIpOworICAgICAgICBkZWxldGUgdGhpcy5fcGFpbnRTY2hl
ZHVsZWRMaW5lc1RpbWVyOworCisgICAgICAgIGlmICghdGhpcy5fc2NoZWR1bGVkUGFpbnRMaW5l
cykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBSZXNjaGVkdWxlIHRoZSB0aW1l
ciBpZiB3ZSBjYW4gbm90IHBhaW50IHRoZSBsaW5lcyB5ZXQsIG9yIHRoZSB1c2VyIGlzIHNjcm9s
bGluZy4KKyAgICAgICAgaWYgKHRoaXMuX2RpcnR5TGluZXMgfHwgdGhpcy5fcmVwYWludEFsbFRp
bWVyKSB7CisgICAgICAgICAgICB0aGlzLl9wYWludFNjaGVkdWxlZExpbmVzVGltZXIgPSBzZXRU
aW1lb3V0KHRoaXMuX3BhaW50U2NoZWR1bGVkTGluZXMuYmluZCh0aGlzKSwgNTApOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHNjaGVkdWxlZFBhaW50TGlu
ZXMgPSB0aGlzLl9zY2hlZHVsZWRQYWludExpbmVzOworICAgICAgICBkZWxldGUgdGhpcy5fc2No
ZWR1bGVkUGFpbnRMaW5lczsKKworICAgICAgICB0aGlzLl9yZXN0b3JlUGFpbnRMaW5lc09wZXJh
dGlvbnNDcmVkaXQoKTsKKyAgICAgICAgdGhpcy5fcGFpbnRMaW5lQ2h1bmtzKHNjaGVkdWxlZFBh
aW50TGluZXMsICFza2lwUmVzdG9yZVNlbGVjdGlvbik7CisgICAgICAgIHRoaXMuX2FkanVzdFBh
aW50TGluZXNPcGVyYXRpb25zUmVmcmVzaFZhbHVlKCk7CisgICAgfSwKKworICAgIF9yZXN0b3Jl
UGFpbnRMaW5lc09wZXJhdGlvbnNDcmVkaXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlm
ICghdGhpcy5fcGFpbnRMaW5lc09wZXJhdGlvbnNSZWZyZXNoVmFsdWUpCisgICAgICAgICAgICB0
aGlzLl9wYWludExpbmVzT3BlcmF0aW9uc1JlZnJlc2hWYWx1ZSA9IDI1MDsKKyAgICAgICAgdGhp
cy5fcGFpbnRMaW5lc09wZXJhdGlvbnNDcmVkaXQgPSB0aGlzLl9wYWludExpbmVzT3BlcmF0aW9u
c1JlZnJlc2hWYWx1ZTsKKyAgICAgICAgdGhpcy5fcGFpbnRMaW5lc09wZXJhdGlvbnNMYXN0UmVm
cmVzaCA9IERhdGUubm93KCk7CisgICAgfSwKKworICAgIF9hZGp1c3RQYWludExpbmVzT3BlcmF0
aW9uc1JlZnJlc2hWYWx1ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIG9wZXJhdGlv
bnNEb25lID0gdGhpcy5fcGFpbnRMaW5lc09wZXJhdGlvbnNSZWZyZXNoVmFsdWUgLSB0aGlzLl9w
YWludExpbmVzT3BlcmF0aW9uc0NyZWRpdDsKKyAgICAgICAgaWYgKG9wZXJhdGlvbnNEb25lIDw9
IDApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciB0aW1lUGFzdCA9IERhdGUubm93
KCkgLSB0aGlzLl9wYWludExpbmVzT3BlcmF0aW9uc0xhc3RSZWZyZXNoOworICAgICAgICBpZiAo
dGltZVBhc3QgPD0gMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gTWFrZSB0aGUg
c3luY2hyb25vdXMgQ1BVIGNodW5rIGZvciBwYWludGluZyB0aGUgbGluZXMgNTAgbXNlYy4KKyAg
ICAgICAgdmFyIHZhbHVlID0gTWF0aC5mbG9vcihvcGVyYXRpb25zRG9uZSAvIHRpbWVQYXN0ICog
NTApOworICAgICAgICB0aGlzLl9wYWludExpbmVzT3BlcmF0aW9uc1JlZnJlc2hWYWx1ZSA9IE51
bWJlci5jb25zdHJhaW4odmFsdWUsIDE1MCwgMTUwMCk7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tTGluZQorICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b0xp
bmUKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSByZXN0b3JlU2VsZWN0aW9uCisgICAgICovCisg
ICAgX3BhaW50TGluZXM6IGZ1bmN0aW9uKGZyb21MaW5lLCB0b0xpbmUsIHJlc3RvcmVTZWxlY3Rp
b24pCisgICAgeworICAgICAgICB0aGlzLl9wYWludExpbmVDaHVua3MoWyB7IHN0YXJ0TGluZTog
ZnJvbUxpbmUsIGVuZExpbmU6IHRvTGluZSB9IF0sIHJlc3RvcmVTZWxlY3Rpb24pOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSByZXN0b3JlU2VsZWN0aW9uCisg
ICAgICovCisgICAgX3BhaW50TGluZUNodW5rczogZnVuY3Rpb24obGluZUNodW5rcywgcmVzdG9y
ZVNlbGVjdGlvbikKKyAgICB7CisgICAgICAgIC8vIEZpcnN0LCBwYWludCB2aXNpYmxlIGxpbmVz
LCBzbyB0aGF0IGluIGNhc2Ugb2YgbG9uZyBsaW5lcyB3ZSBzaG91bGQgc3RhcnQgaGlnaGxpZ2h0
aW5nCisgICAgICAgIC8vIHRoZSB2aXNpYmxlIGFyZWEgaW1tZWRpYXRlbHksIGluc3RlYWQgb2Yg
d2FpdGluZyBmb3IgdGhlIGxpbmVzIGFib3ZlIHRoZSB2aXNpYmxlIGFyZWEuCisgICAgICAgIHZh
ciB2aXNpYmxlRnJvbSA9IHRoaXMuZWxlbWVudC5zY3JvbGxUb3A7CisgICAgICAgIHZhciBmaXJz
dFZpc2libGVMaW5lTnVtYmVyID0gdGhpcy5fZmluZEZpcnN0VmlzaWJsZUxpbmVOdW1iZXIodmlz
aWJsZUZyb20pOworCisgICAgICAgIHZhciBjaHVuazsKKyAgICAgICAgdmFyIHNlbGVjdGlvbjsK
KyAgICAgICAgdmFyIGludmlzaWJsZUxpbmVSb3dzID0gW107CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbGluZUNodW5rcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIGxpbmVD
aHVuayA9IGxpbmVDaHVua3NbaV07CisgICAgICAgICAgICBpZiAodGhpcy5fZGlydHlMaW5lcyB8
fCB0aGlzLl9zY2hlZHVsZWRQYWludExpbmVzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc2No
ZWR1bGVQYWludExpbmVzKGxpbmVDaHVuay5zdGFydExpbmUsIGxpbmVDaHVuay5lbmRMaW5lKTsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZv
ciAodmFyIGxpbmVOdW1iZXIgPSBsaW5lQ2h1bmsuc3RhcnRMaW5lOyBsaW5lTnVtYmVyIDwgbGlu
ZUNodW5rLmVuZExpbmU7ICsrbGluZU51bWJlcikgeworICAgICAgICAgICAgICAgIGlmICghY2h1
bmsgfHwgbGluZU51bWJlciA8IGNodW5rLnN0YXJ0TGluZSB8fCBsaW5lTnVtYmVyID49IGNodW5r
LnN0YXJ0TGluZSArIGNodW5rLmxpbmVzQ291bnQpCisgICAgICAgICAgICAgICAgICAgIGNodW5r
ID0gdGhpcy5jaHVua0ZvckxpbmUobGluZU51bWJlcik7CisgICAgICAgICAgICAgICAgdmFyIGxp
bmVSb3cgPSBjaHVuay5nZXRFeHBhbmRlZExpbmVSb3cobGluZU51bWJlcik7CisgICAgICAgICAg
ICAgICAgaWYgKCFsaW5lUm93KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBpZiAobGluZU51bWJlciA8IGZpcnN0VmlzaWJsZUxpbmVOdW1iZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaW52aXNpYmxlTGluZVJvd3MucHVzaChsaW5lUm93KTsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uICYmICFzZWxlY3Rpb24pCisgICAgICAgICAgICAgICAg
ICAgIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlvbigpOworICAgICAgICAgICAgICAgIHRo
aXMuX3BhaW50TGluZShsaW5lUm93KTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGFpbnRM
aW5lc09wZXJhdGlvbnNDcmVkaXQgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Nj
aGVkdWxlUGFpbnRMaW5lcyhsaW5lTnVtYmVyICsgMSwgbGluZUNodW5rLmVuZExpbmUpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGludmlzaWJsZUxpbmVS
b3dzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAocmVzdG9yZVNlbGVjdGlvbiAmJiAh
c2VsZWN0aW9uKQorICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlv
bigpOworICAgICAgICAgICAgdGhpcy5fcGFpbnRMaW5lKGludmlzaWJsZUxpbmVSb3dzW2ldKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uKQorICAgICAgICAgICAg
dGhpcy5fcmVzdG9yZVNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgKiBAcGFyYW0ge0VsZW1lbnR9IGxpbmVSb3cKKyAgICAgKi8KKyAgICBfcGFpbnRMaW5lOiBm
dW5jdGlvbihsaW5lUm93KQorICAgIHsKKyAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBsaW5lUm93
LmxpbmVOdW1iZXI7CisgICAgICAgIGlmICh0aGlzLl9kaXJ0eUxpbmVzKSB7CisgICAgICAgICAg
ICB0aGlzLl9zY2hlZHVsZVBhaW50TGluZXMobGluZU51bWJlciwgbGluZU51bWJlciArIDEpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5iZWdpbkRvbVVw
ZGF0ZXMoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9zY2hlZHVsZWRQ
YWludExpbmVzIHx8IHRoaXMuX3BhaW50TGluZXNPcGVyYXRpb25zQ3JlZGl0IDwgMCkgeworICAg
ICAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlUGFpbnRMaW5lcyhsaW5lTnVtYmVyLCBsaW5lTnVt
YmVyICsgMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB2YXIgaGlnaGxpZ2h0ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5l
TnVtYmVyLCAiaGlnaGxpZ2h0Iik7CisgICAgICAgICAgICBpZiAoIWhpZ2hsaWdodCkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGxpbmVSb3cucmVtb3ZlQ2hpbGRyZW4o
KTsKKyAgICAgICAgICAgIHZhciBsaW5lID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUobGluZU51bWJl
cik7CisgICAgICAgICAgICBpZiAoIWxpbmUpCisgICAgICAgICAgICAgICAgbGluZVJvdy5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKKworICAgICAgICAgICAgdmFy
IHBsYWluVGV4dFN0YXJ0ID0gLTE7CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxp
bmUubGVuZ3RoOykgeworICAgICAgICAgICAgICAgIGlmIChqID4gMTAwMCkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGxpbmUgaXMgdG9vIGxvbmcgLSBkbyBub3Qgd2FzdGUgY3ljbGVz
IG9uIG1pbmlmaWVkIGpzIGhpZ2hsaWdodGluZy4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHBs
YWluVGV4dFN0YXJ0ID09PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluVGV4dFN0
YXJ0ID0gajsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUgPSBoaWdobGlnaHRbal07CisgICAgICAgICAg
ICAgICAgaWYgKCFhdHRyaWJ1dGUgfHwgIWF0dHJpYnV0ZS50b2tlblR5cGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0ID09PSAtMSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBsYWluVGV4dFN0YXJ0ID0gajsKKyAgICAgICAgICAgICAgICAgICAgaisrOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwbGFpblRleHRT
dGFydCAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZFRleHRO
b2RlKGxpbmVSb3csIGxpbmUuc3Vic3RyaW5nKHBsYWluVGV4dFN0YXJ0LCBqKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwbGFpblRleHRTdGFydCA9IC0xOworICAgICAgICAgICAgICAgICAg
ICAgICAgLS10aGlzLl9wYWludExpbmVzT3BlcmF0aW9uc0NyZWRpdDsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmRTcGFuKGxpbmVSb3csIGxp
bmUuc3Vic3RyaW5nKGosIGogKyBhdHRyaWJ1dGUubGVuZ3RoKSwgYXR0cmlidXRlLnRva2VuVHlw
ZSk7CisgICAgICAgICAgICAgICAgICAgIGogKz0gYXR0cmlidXRlLmxlbmd0aDsKKyAgICAgICAg
ICAgICAgICAgICAgLS10aGlzLl9wYWludExpbmVzT3BlcmF0aW9uc0NyZWRpdDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocGxhaW5UZXh0U3RhcnQg
IT09IC0xKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYXBwZW5kVGV4dE5vZGUobGluZVJvdywg
bGluZS5zdWJzdHJpbmcocGxhaW5UZXh0U3RhcnQsIGxpbmUubGVuZ3RoKSk7CisgICAgICAgICAg
ICAgICAgLS10aGlzLl9wYWludExpbmVzT3BlcmF0aW9uc0NyZWRpdDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChsaW5lUm93LmRlY29yYXRpb25zRWxlbWVudCkKKyAgICAgICAgICAg
ICAgICBsaW5lUm93LmFwcGVuZENoaWxkKGxpbmVSb3cuZGVjb3JhdGlvbnNFbGVtZW50KTsKKyAg
ICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9yYW5nZVRvTWFyayAmJiB0
aGlzLl9yYW5nZVRvTWFyay5zdGFydExpbmUgPT09IGxpbmVOdW1iZXIpCisgICAgICAgICAgICAg
ICAgdGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50ID0gV2ViSW5zcGVjdG9yLmhpZ2hsaWdodFNlYXJj
aFJlc3VsdChsaW5lUm93LCB0aGlzLl9yYW5nZVRvTWFyay5zdGFydENvbHVtbiwgdGhpcy5fcmFu
Z2VUb01hcmsuZW5kQ29sdW1uIC0gdGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRDb2x1bW4pOworICAg
ICAgICAgICAgdGhpcy5lbmREb21VcGRhdGVzKCk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAg
LyoqCisgICAgICogQHBhcmFtIHtFbGVtZW50fSBsaW5lUm93CisgICAgICovCisgICAgX3JlbGVh
c2VMaW5lc0hpZ2hsaWdodDogZnVuY3Rpb24obGluZVJvdykKKyAgICB7CisgICAgICAgIGlmICgh
bGluZVJvdykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCJzcGFucyIgaW4gbGlu
ZVJvdykgeworICAgICAgICAgICAgdmFyIHNwYW5zID0gbGluZVJvdy5zcGFuczsKKyAgICAgICAg
ICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3BhbnMubGVuZ3RoOyArK2opCisgICAgICAgICAgICAg
ICAgdGhpcy5fY2FjaGVkU3BhbnMucHVzaChzcGFuc1tqXSk7CisgICAgICAgICAgICBkZWxldGUg
bGluZVJvdy5zcGFuczsKKyAgICAgICAgfQorICAgICAgICBpZiAoInRleHROb2RlcyIgaW4gbGlu
ZVJvdykgeworICAgICAgICAgICAgdmFyIHRleHROb2RlcyA9IGxpbmVSb3cudGV4dE5vZGVzOwor
ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0ZXh0Tm9kZXMubGVuZ3RoOyArK2opCisg
ICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkVGV4dE5vZGVzLnB1c2godGV4dE5vZGVzW2pdKTsK
KyAgICAgICAgICAgIGRlbGV0ZSBsaW5lUm93LnRleHROb2RlczsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9jYWNoZWRSb3dzLnB1c2gobGluZVJvdyk7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9CisgICAgICovCisgICAgX2dldFNl
bGVjdGlvbjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRv
dy5nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgaWYgKCFzZWxlY3Rpb24ucmFuZ2VDb3VudCkKKyAg
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAvLyBTZWxlY3Rpb24gbWF5IGJlIG91dHNp
ZGUgb2YgdGhlIHZpZXdlci4KKyAgICAgICAgaWYgKCF0aGlzLl9jb250YWluZXIuaXNBbmNlc3Rv
cihzZWxlY3Rpb24uYW5jaG9yTm9kZSkgfHwgIXRoaXMuX2NvbnRhaW5lci5pc0FuY2VzdG9yKHNl
bGVjdGlvbi5mb2N1c05vZGUpKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHZh
ciBzdGFydCA9IHRoaXMuX3NlbGVjdGlvblRvUG9zaXRpb24oc2VsZWN0aW9uLmFuY2hvck5vZGUs
IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQpOworICAgICAgICB2YXIgZW5kID0gc2VsZWN0aW9uLmlz
Q29sbGFwc2VkID8gc3RhcnQgOiB0aGlzLl9zZWxlY3Rpb25Ub1Bvc2l0aW9uKHNlbGVjdGlvbi5m
b2N1c05vZGUsIHNlbGVjdGlvbi5mb2N1c09mZnNldCk7CisgICAgICAgIHJldHVybiBuZXcgV2Vi
SW5zcGVjdG9yLlRleHRSYW5nZShzdGFydC5saW5lLCBzdGFydC5jb2x1bW4sIGVuZC5saW5lLCBl
bmQuY29sdW1uKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtib29sZWFuPX0g
c2Nyb2xsSW50b1ZpZXcKKyAgICAgKi8KKyAgICBfcmVzdG9yZVNlbGVjdGlvbjogZnVuY3Rpb24o
cmFuZ2UsIHNjcm9sbEludG9WaWV3KQorICAgIHsKKyAgICAgICAgaWYgKCFyYW5nZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5fcG9zaXRpb25Ub1NlbGVj
dGlvbihyYW5nZS5zdGFydExpbmUsIHJhbmdlLnN0YXJ0Q29sdW1uKTsKKyAgICAgICAgdmFyIGVu
ZCA9IHJhbmdlLmlzRW1wdHkoKSA/IHN0YXJ0IDogdGhpcy5fcG9zaXRpb25Ub1NlbGVjdGlvbihy
YW5nZS5lbmRMaW5lLCByYW5nZS5lbmRDb2x1bW4pOworICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0
aW9uKCkuc2V0QmFzZUFuZEV4dGVudChzdGFydC5jb250YWluZXIsIHN0YXJ0Lm9mZnNldCwgZW5k
LmNvbnRhaW5lciwgZW5kLm9mZnNldCk7CisKKyAgICAgICAgaWYgKHNjcm9sbEludG9WaWV3KSB7
CisgICAgICAgICAgICBmb3IgKHZhciBub2RlID0gZW5kLmNvbnRhaW5lcjsgbm9kZTsgbm9kZSA9
IG5vZGUucGFyZW50RWxlbWVudCkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLnNjcm9sbElu
dG9WaWV3SWZOZWVkZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5zY3JvbGxJbnRvVmll
d0lmTmVlZGVkKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBA
cGFyYW0ge05vZGV9IGNvbnRhaW5lcgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQKKyAg
ICAgKi8KKyAgICBfc2VsZWN0aW9uVG9Qb3NpdGlvbjogZnVuY3Rpb24oY29udGFpbmVyLCBvZmZz
ZXQpCisgICAgeworICAgICAgICBpZiAoY29udGFpbmVyID09PSB0aGlzLl9jb250YWluZXIgJiYg
b2Zmc2V0ID09PSAwKQorICAgICAgICAgICAgcmV0dXJuIHsgbGluZTogMCwgY29sdW1uOiAwIH07
CisgICAgICAgIGlmIChjb250YWluZXIgPT09IHRoaXMuX2NvbnRhaW5lciAmJiBvZmZzZXQgPT09
IDEpCisgICAgICAgICAgICByZXR1cm4geyBsaW5lOiB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3Vu
dCAtIDEsIGNvbHVtbjogdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgodGhpcy5fdGV4dE1vZGVs
LmxpbmVzQ291bnQgLSAxKSB9OworCisgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fZW5jbG9z
aW5nTGluZVJvd09yU2VsZihjb250YWluZXIpOworICAgICAgICB2YXIgbGluZU51bWJlciA9IGxp
bmVSb3cubGluZU51bWJlcjsKKyAgICAgICAgaWYgKGNvbnRhaW5lciA9PT0gbGluZVJvdyAmJiBv
ZmZzZXQgPT09IDApCisgICAgICAgICAgICByZXR1cm4geyBsaW5lOiBsaW5lTnVtYmVyLCBjb2x1
bW46IDAgfTsKKworICAgICAgICAvLyBUaGlzIG1heSBiZSBjaHVuayBhbmQgY2h1bmtzIG1heSBj
b250YWluIFxuLgorICAgICAgICB2YXIgY29sdW1uID0gMDsKKyAgICAgICAgdmFyIG5vZGUgPSBs
aW5lUm93Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSA/IGxpbmVSb3cgOiBsaW5lUm93LnRy
YXZlcnNlTmV4dFRleHROb2RlKGxpbmVSb3cpOworICAgICAgICB3aGlsZSAobm9kZSAmJiBub2Rl
ICE9PSBjb250YWluZXIpIHsKKyAgICAgICAgICAgIHZhciB0ZXh0ID0gbm9kZS50ZXh0Q29udGVu
dDsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgICAgIGlmICh0ZXh0LmNoYXJBdChpKSA9PT0gIlxuIikgeworICAgICAgICAg
ICAgICAgICAgICBsaW5lTnVtYmVyKys7CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IDA7
CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbHVtbisrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgbm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0VGV4dE5v
ZGUobGluZVJvdyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9kZSA9PT0gY29udGFpbmVy
ICYmIG9mZnNldCkgeworICAgICAgICAgICAgdmFyIHRleHQgPSBub2RlLnRleHRDb250ZW50Owor
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvZmZzZXQ7ICsraSkgeworICAgICAgICAg
ICAgICAgIGlmICh0ZXh0LmNoYXJBdChpKSA9PT0gIlxuIikgeworICAgICAgICAgICAgICAgICAg
ICBsaW5lTnVtYmVyKys7CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IDA7CisgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbHVtbisrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB7IGxpbmU6IGxpbmVOdW1iZXIsIGNvbHVt
bjogY29sdW1uIH07CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBs
aW5lCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbgorICAgICAqLworICAgIF9wb3NpdGlv
blRvU2VsZWN0aW9uOiBmdW5jdGlvbihsaW5lLCBjb2x1bW4pCisgICAgeworICAgICAgICB2YXIg
Y2h1bmsgPSB0aGlzLmNodW5rRm9yTGluZShsaW5lKTsKKyAgICAgICAgLy8gT25lLWxpbmVkIGNv
bGxhcHNlZCBjaHVua3MgbWF5IHN0aWxsIHN0YXkgaGlnaGxpZ2h0ZWQuCisgICAgICAgIHZhciBs
aW5lUm93ID0gY2h1bmsubGluZXNDb3VudCA9PT0gMSA/IGNodW5rLmVsZW1lbnQgOiBjaHVuay5n
ZXRFeHBhbmRlZExpbmVSb3cobGluZSk7CisgICAgICAgIGlmIChsaW5lUm93KQorICAgICAgICAg
ICAgdmFyIHJhbmdlQm91bmRhcnkgPSBsaW5lUm93LnJhbmdlQm91bmRhcnlGb3JPZmZzZXQoY29s
dW1uKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gY29sdW1uOwor
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IGNodW5rLnN0YXJ0TGluZTsgaSA8IGxpbmU7ICsraSkK
KyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgoaSkg
KyAxOyAvLyBcbgorICAgICAgICAgICAgbGluZVJvdyA9IGNodW5rLmVsZW1lbnQ7CisgICAgICAg
ICAgICBpZiAobGluZVJvdy5maXJzdENoaWxkKQorICAgICAgICAgICAgICAgIHZhciByYW5nZUJv
dW5kYXJ5ID0geyBjb250YWluZXI6IGxpbmVSb3cuZmlyc3RDaGlsZCwgb2Zmc2V0OiBvZmZzZXQg
fTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB2YXIgcmFuZ2VCb3VuZGFyeSA9
IHsgY29udGFpbmVyOiBsaW5lUm93LCBvZmZzZXQ6IDAgfTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcmFuZ2VCb3VuZGFyeTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtO
b2RlfSBlbGVtZW50CisgICAgICovCisgICAgX2VuY2xvc2luZ0xpbmVSb3dPclNlbGY6IGZ1bmN0
aW9uKGVsZW1lbnQpCisgICAgeworICAgICAgICB2YXIgbGluZVJvdyA9IGVsZW1lbnQuZW5jbG9z
aW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWxpbmUtY29udGVudCIpOworICAgICAgICBp
ZiAobGluZVJvdykKKyAgICAgICAgICAgIHJldHVybiBsaW5lUm93OworCisgICAgICAgIGZvciAo
bGluZVJvdyA9IGVsZW1lbnQ7IGxpbmVSb3c7IGxpbmVSb3cgPSBsaW5lUm93LnBhcmVudEVsZW1l
bnQpIHsKKyAgICAgICAgICAgIGlmIChsaW5lUm93LnBhcmVudEVsZW1lbnQgPT09IHRoaXMuX2Nv
bnRhaW5lcikKKyAgICAgICAgICAgICAgICByZXR1cm4gbGluZVJvdzsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtFbGVt
ZW50fSBlbGVtZW50CisgICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQKKyAgICAgKiBAcGFy
YW0ge3N0cmluZ30gY2xhc3NOYW1lCisgICAgICovCisgICAgX2FwcGVuZFNwYW46IGZ1bmN0aW9u
KGVsZW1lbnQsIGNvbnRlbnQsIGNsYXNzTmFtZSkKKyAgICB7CisgICAgICAgIGlmIChjbGFzc05h
bWUgPT09ICJodG1sLXJlc291cmNlLWxpbmsiIHx8IGNsYXNzTmFtZSA9PT0gImh0bWwtZXh0ZXJu
YWwtbGluayIpIHsKKyAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRl
TGluayhjb250ZW50LCBjbGFzc05hbWUgPT09ICJodG1sLWV4dGVybmFsLWxpbmsiKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB2YXIgc3BhbiA9IHRoaXMuX2Nh
Y2hlZFNwYW5zLnBvcCgpIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAg
ICAgc3Bhbi5jbGFzc05hbWUgPSAid2Via2l0LSIgKyBjbGFzc05hbWU7CisgICAgICAgIHNwYW4u
dGV4dENvbnRlbnQgPSBjb250ZW50OworICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHNwYW4p
OworICAgICAgICBpZiAoISgic3BhbnMiIGluIGVsZW1lbnQpKQorICAgICAgICAgICAgZWxlbWVu
dC5zcGFucyA9IFtdOworICAgICAgICBlbGVtZW50LnNwYW5zLnB1c2goc3Bhbik7CisgICAgfSwK
KworICAgIC8qKgorICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudAorICAgICAqIEBwYXJh
bSB7c3RyaW5nfSB0ZXh0CisgICAgICovCisgICAgX2FwcGVuZFRleHROb2RlOiBmdW5jdGlvbihl
bGVtZW50LCB0ZXh0KQorICAgIHsKKyAgICAgICAgdmFyIHRleHROb2RlID0gdGhpcy5fY2FjaGVk
VGV4dE5vZGVzLnBvcCgpOworICAgICAgICBpZiAodGV4dE5vZGUpCisgICAgICAgICAgICB0ZXh0
Tm9kZS5ub2RlVmFsdWUgPSB0ZXh0OworICAgICAgICBlbHNlCisgICAgICAgICAgICB0ZXh0Tm9k
ZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpOworICAgICAgICBlbGVtZW50LmFwcGVu
ZENoaWxkKHRleHROb2RlKTsKKyAgICAgICAgaWYgKCEoInRleHROb2RlcyIgaW4gZWxlbWVudCkp
CisgICAgICAgICAgICBlbGVtZW50LnRleHROb2RlcyA9IFtdOworICAgICAgICBlbGVtZW50LnRl
eHROb2Rlcy5wdXNoKHRleHROb2RlKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFt
IHtzdHJpbmd9IGNvbnRlbnQKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzRXh0ZXJuYWwKKyAg
ICAgKi8KKyAgICBfY3JlYXRlTGluazogZnVuY3Rpb24oY29udGVudCwgaXNFeHRlcm5hbCkKKyAg
ICB7CisgICAgICAgIHZhciBxdW90ZSA9IGNvbnRlbnQuY2hhckF0KDApOworICAgICAgICBpZiAo
Y29udGVudC5sZW5ndGggPiAxICYmIChxdW90ZSA9PT0gIlwiIiB8fCAgIHF1b3RlID09PSAiJyIp
KQorICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKDEsIGNvbnRlbnQubGVu
Z3RoIC0gMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHF1b3RlID0gbnVsbDsKKworICAg
ICAgICB2YXIgYSA9IFdlYkluc3BlY3Rvci5saW5raWZ5VVJMQXNOb2RlKHRoaXMuX3Jld3JpdGVI
cmVmKGNvbnRlbnQpLCBjb250ZW50LCB1bmRlZmluZWQsIGlzRXh0ZXJuYWwpOworICAgICAgICB2
YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgc3Bhbi5j
bGFzc05hbWUgPSAid2Via2l0LWh0bWwtYXR0cmlidXRlLXZhbHVlIjsKKyAgICAgICAgaWYgKHF1
b3RlKQorICAgICAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZShxdW90ZSkpOworICAgICAgICBzcGFuLmFwcGVuZENoaWxkKGEpOworICAgICAgICBpZiAocXVv
dGUpCisgICAgICAgICAgICBzcGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KHF1b3RlKSk7CisgICAgICAgIHJldHVybiBzcGFuOworICAgIH0sCisKKyAgICAvKioKKyAgICAg
KiBAcGFyYW0ge3N0cmluZz19IGhyZWZWYWx1ZQorICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGlz
RXh0ZXJuYWwKKyAgICAgKi8KKyAgICBfcmV3cml0ZUhyZWY6IGZ1bmN0aW9uKGhyZWZWYWx1ZSwg
aXNFeHRlcm5hbCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fdXJsIHx8ICFocmVmVmFsdWUg
fHwgaHJlZlZhbHVlLmluZGV4T2YoIjovLyIpID4gMCkKKyAgICAgICAgICAgIHJldHVybiBocmVm
VmFsdWU7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuY29tcGxldGVVUkwodGhpcy5fdXJs
LCBocmVmVmFsdWUpOworICAgIH0sCisKKyAgICBfaGFuZGxlRE9NVXBkYXRlczogZnVuY3Rpb24o
ZSkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9kb21VcGRhdGVDb2FsZXNjaW5nTGV2ZWwpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0OworICAg
ICAgICBpZiAodGFyZ2V0ID09PSB0aGlzLl9jb250YWluZXIpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl9lbmNsb3NpbmdMaW5lUm93T3JTZWxmKHRh
cmdldCk7CisgICAgICAgIGlmICghbGluZVJvdykKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAobGluZVJvdy5kZWNvcmF0aW9uc0VsZW1lbnQgJiYgbGluZVJvdy5kZWNvcmF0aW9u
c0VsZW1lbnQuaXNTZWxmT3JBbmNlc3Rvcih0YXJnZXQpKSB7CisgICAgICAgICAgICBpZiAodGhp
cy5fc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyKQorICAgICAgICAgICAgICAgIHRoaXMu
X3N5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lcihsaW5lUm93LmxpbmVOdW1iZXIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuX3JlYWRPbmx5
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh0YXJnZXQgPT09IGxpbmVSb3cg
JiYgZS50eXBlID09PSAiRE9NTm9kZUluc2VydGVkIikgeworICAgICAgICAgICAgLy8gRW5zdXJl
IHRoYXQgdGhlIG5ld2x5IGluc2VydGVkIGxpbmUgcm93IGhhcyBubyBsaW5lTnVtYmVyLgorICAg
ICAgICAgICAgZGVsZXRlIGxpbmVSb3cubGluZU51bWJlcjsKKyAgICAgICAgfQorCisgICAgICAg
IHZhciBzdGFydExpbmUgPSAwOworICAgICAgICBmb3IgKHZhciByb3cgPSBsaW5lUm93OyByb3c7
IHJvdyA9IHJvdy5wcmV2aW91c1NpYmxpbmcpIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygcm93
LmxpbmVOdW1iZXIgPT09ICJudW1iZXIiKSB7CisgICAgICAgICAgICAgICAgc3RhcnRMaW5lID0g
cm93LmxpbmVOdW1iZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgZW5kTGluZSA9IHN0YXJ0TGluZSArIDE7CisgICAgICAg
IGZvciAodmFyIHJvdyA9IGxpbmVSb3cubmV4dFNpYmxpbmc7IHJvdzsgcm93ID0gcm93Lm5leHRT
aWJsaW5nKSB7CisgICAgICAgICAgICBpZiAodHlwZW9mIHJvdy5saW5lTnVtYmVyID09PSAibnVt
YmVyIiAmJiByb3cubGluZU51bWJlciA+IHN0YXJ0TGluZSkgeworICAgICAgICAgICAgICAgIGVu
ZExpbmUgPSByb3cubGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh0YXJnZXQgPT09IGxpbmVSb3cgJiYgZS50
eXBlID09PSAiRE9NTm9kZVJlbW92ZWQiKSB7CisgICAgICAgICAgICAvLyBOb3cgdGhpcyB3aWxs
IG5vIGxvbmdlciBiZSB2YWxpZC4KKyAgICAgICAgICAgIGRlbGV0ZSBsaW5lUm93LmxpbmVOdW1i
ZXI7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5fZGlydHlMaW5lcykgeworICAgICAg
ICAgICAgdGhpcy5fZGlydHlMaW5lcy5zdGFydCA9IE1hdGgubWluKHRoaXMuX2RpcnR5TGluZXMu
c3RhcnQsIHN0YXJ0TGluZSk7CisgICAgICAgICAgICB0aGlzLl9kaXJ0eUxpbmVzLmVuZCA9IE1h
dGgubWF4KHRoaXMuX2RpcnR5TGluZXMuZW5kLCBlbmRMaW5lKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHRoaXMuX2RpcnR5TGluZXMgPSB7IHN0YXJ0OiBzdGFydExpbmUsIGVuZDog
ZW5kTGluZSB9OworICAgICAgICAgICAgc2V0VGltZW91dCh0aGlzLl9hcHBseURvbVVwZGF0ZXMu
YmluZCh0aGlzKSwgMCk7CisgICAgICAgICAgICAvLyBSZW1vdmUgbWFya2VkIHJhbmdlcywgaWYg
YW55LgorICAgICAgICAgICAgdGhpcy5tYXJrQW5kUmV2ZWFsUmFuZ2UobnVsbCk7CisgICAgICAg
IH0KKyAgICB9LAorCisgICAgX2FwcGx5RG9tVXBkYXRlczogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgaWYgKCF0aGlzLl9kaXJ0eUxpbmVzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIC8vIENoZWNrIGlmIHRoZSBlZGl0b3IgaGFkIGJlZW4gc2V0IHJlYWRPbmx5IGJ5IHRoZSBt
b21lbnQgd2hlbiB0aGlzIGFzeW5jIGNhbGxiYWNrIGdvdCBleGVjdXRlZC4KKyAgICAgICAgaWYg
KHRoaXMuX3JlYWRPbmx5KSB7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fZGlydHlMaW5lczsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBkaXJ0eUxpbmVz
ID0gdGhpcy5fZGlydHlMaW5lczsKKworICAgICAgICB2YXIgZmlyc3RDaHVua051bWJlciA9IHRo
aXMuX2NodW5rTnVtYmVyRm9yTGluZShkaXJ0eUxpbmVzLnN0YXJ0KTsKKyAgICAgICAgdmFyIHN0
YXJ0TGluZSA9IHRoaXMuX3RleHRDaHVua3NbZmlyc3RDaHVua051bWJlcl0uc3RhcnRMaW5lOwor
ICAgICAgICB2YXIgZW5kTGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50OworCisgICAg
ICAgIC8vIENvbGxlY3QgbGluZXMuCisgICAgICAgIHZhciBmaXJzdExpbmVSb3c7CisgICAgICAg
IGlmIChmaXJzdENodW5rTnVtYmVyKSB7CisgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90
ZXh0Q2h1bmtzW2ZpcnN0Q2h1bmtOdW1iZXIgLSAxXTsKKyAgICAgICAgICAgIGZpcnN0TGluZVJv
dyA9IGNodW5rLmV4cGFuZGVkID8gY2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93KGNodW5rLnN0YXJ0
TGluZSArIGNodW5rLmxpbmVzQ291bnQgLSAxKSA6IGNodW5rLmVsZW1lbnQ7CisgICAgICAgICAg
ICBmaXJzdExpbmVSb3cgPSBmaXJzdExpbmVSb3cubmV4dFNpYmxpbmc7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgZmlyc3RMaW5lUm93ID0gdGhpcy5fY29udGFpbmVyLmZpcnN0Q2hpbGQ7
CisKKyAgICAgICAgdmFyIGxpbmVzID0gW107CisgICAgICAgIGZvciAodmFyIGxpbmVSb3cgPSBm
aXJzdExpbmVSb3c7IGxpbmVSb3c7IGxpbmVSb3cgPSBsaW5lUm93Lm5leHRTaWJsaW5nKSB7Cisg
ICAgICAgICAgICBpZiAodHlwZW9mIGxpbmVSb3cubGluZU51bWJlciA9PT0gIm51bWJlciIgJiYg
bGluZVJvdy5saW5lTnVtYmVyID49IGRpcnR5TGluZXMuZW5kKSB7CisgICAgICAgICAgICAgICAg
ZW5kTGluZSA9IGxpbmVSb3cubGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFVwZGF0ZSB3aXRoIHRoZSBuZXdlc3QgbGluZU51
bWJlciwgc28gdGhhdCB0aGUgY2FsbCB0byB0aGUgX2dldFNlbGVjdGlvbiBtZXRob2QgYmVsb3cg
c2hvdWxkIHdvcmsuCisgICAgICAgICAgICBsaW5lUm93LmxpbmVOdW1iZXIgPSBzdGFydExpbmUg
KyBsaW5lcy5sZW5ndGg7CisgICAgICAgICAgICB0aGlzLl9jb2xsZWN0TGluZXNGcm9tRGl2KGxp
bmVzLCBsaW5lUm93KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRyeSB0byBkZWNyZWFzZSB0
aGUgcmFuZ2UgYmVpbmcgcmVwbGFjZWQsIGlmIHBvc3NpYmxlLgorICAgICAgICB2YXIgc3RhcnRP
ZmZzZXQgPSAwOworICAgICAgICB3aGlsZSAoc3RhcnRMaW5lIDwgZGlydHlMaW5lcy5zdGFydCAm
JiBzdGFydE9mZnNldCA8IGxpbmVzLmxlbmd0aCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3Rl
eHRNb2RlbC5saW5lKHN0YXJ0TGluZSkgIT09IGxpbmVzW3N0YXJ0T2Zmc2V0XSkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICsrc3RhcnRPZmZzZXQ7CisgICAgICAgICAgICAr
K3N0YXJ0TGluZTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBlbmRPZmZzZXQgPSBsaW5lcy5s
ZW5ndGg7CisgICAgICAgIHdoaWxlIChlbmRMaW5lID4gZGlydHlMaW5lcy5lbmQgJiYgZW5kT2Zm
c2V0ID4gc3RhcnRPZmZzZXQpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0TW9kZWwubGlu
ZShlbmRMaW5lIC0gMSkgIT09IGxpbmVzW2VuZE9mZnNldCAtIDFdKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgLS1lbmRPZmZzZXQ7CisgICAgICAgICAgICAtLWVuZExpbmU7
CisgICAgICAgIH0KKworICAgICAgICBsaW5lcyA9IGxpbmVzLnNsaWNlKHN0YXJ0T2Zmc2V0LCBl
bmRPZmZzZXQpOworCisgICAgICAgIC8vIFRyeSB0byBkZWNyZWFzZSB0aGUgcmFuZ2UgYmVpbmcg
cmVwbGFjZWQgYnkgY29sdW1uIG9mZnNldHMsIGlmIHBvc3NpYmxlLgorICAgICAgICB2YXIgc3Rh
cnRDb2x1bW4gPSAwOworICAgICAgICB2YXIgZW5kQ29sdW1uID0gdGhpcy5fdGV4dE1vZGVsLmxp
bmVMZW5ndGgoZW5kTGluZSAtIDEpOworICAgICAgICBpZiAobGluZXMubGVuZ3RoID4gMCkgewor
ICAgICAgICAgICAgdmFyIGxpbmUxID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUoc3RhcnRMaW5lKTsK
KyAgICAgICAgICAgIHZhciBsaW5lMiA9IGxpbmVzWzBdOworICAgICAgICAgICAgd2hpbGUgKGxp
bmUxW3N0YXJ0Q29sdW1uXSAmJiBsaW5lMVtzdGFydENvbHVtbl0gPT09IGxpbmUyW3N0YXJ0Q29s
dW1uXSkKKyAgICAgICAgICAgICAgICArK3N0YXJ0Q29sdW1uOworICAgICAgICAgICAgbGluZXNb
MF0gPSBsaW5lMi5zdWJzdHJpbmcoc3RhcnRDb2x1bW4pOworCisgICAgICAgICAgICBsaW5lMSA9
IHRoaXMuX3RleHRNb2RlbC5saW5lKGVuZExpbmUgLSAxKTsKKyAgICAgICAgICAgIGxpbmUyID0g
bGluZXNbbGluZXMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGVuZENvbHVtbiAmJiBpIDwgbGluZTIubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoc3RhcnRMaW5lID09PSBlbmRMaW5lIC0gMSAmJiBlbmRDb2x1bW4gLSBpIDw9IHN0YXJ0Q29s
dW1uKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAobGlu
ZTFbZW5kQ29sdW1uIC0gaSAtIDFdICE9PSBsaW5lMltsaW5lMi5sZW5ndGggLSBpIC0gMV0pCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGkpIHsKKyAgICAgICAgICAgICAgICBlbmRDb2x1bW4gLT0gaTsKKyAgICAgICAgICAgICAgICBs
aW5lc1tsaW5lcy5sZW5ndGggLSAxXSA9IGxpbmUyLnN1YnN0cmluZygwLCBsaW5lMi5sZW5ndGgg
LSBpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZhciBzZWxlY3Rpb24g
PSB0aGlzLl9nZXRTZWxlY3Rpb24oKTsKKworICAgICAgICBpZiAobGluZXMubGVuZ3RoID09PSAw
ICYmIGVuZExpbmUgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKKyAgICAgICAgICAgIHZh
ciBvbGRSYW5nZSA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHN0YXJ0TGluZSwgMCwgZW5k
TGluZSwgMCk7CisgICAgICAgIGVsc2UgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMCAmJiBzdGFydExp
bmUgPiAwKQorICAgICAgICAgICAgdmFyIG9sZFJhbmdlID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0
UmFuZ2Uoc3RhcnRMaW5lIC0gMSwgdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgoc3RhcnRMaW5l
IC0gMSksIGVuZExpbmUgLSAxLCB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChlbmRMaW5lIC0g
MSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YXIgb2xkUmFuZ2UgPSBuZXcgV2ViSW5z
cGVjdG9yLlRleHRSYW5nZShzdGFydExpbmUsIHN0YXJ0Q29sdW1uLCBlbmRMaW5lIC0gMSwgZW5k
Q29sdW1uKTsKKworICAgICAgICB2YXIgbmV3Q29udGVudCA9IGxpbmVzLmpvaW4oIlxuIik7Cisg
ICAgICAgIGlmICh0aGlzLl90ZXh0TW9kZWwuY29weVJhbmdlKG9sZFJhbmdlKSA9PT0gbmV3Q29u
dGVudCkgeworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2RpcnR5TGluZXM7CisgICAgICAgICAg
ICByZXR1cm47IC8vIE5vb3AKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoaXMgaXMgYSAiZm9y
ZWlnbiIgY2FsbCBvdXRzaWRlIG9mIHRoaXMgY2xhc3MuIFNob3VsZCBiZSBiZWZvcmUgd2UgZGVs
ZXRlIHRoZSBkaXJ0eSBsaW5lcyBmbGFnLgorICAgICAgICB0aGlzLl9lbnRlclRleHRDaGFuZ2VN
b2RlKCk7CisKKyAgICAgICAgZGVsZXRlIHRoaXMuX2RpcnR5TGluZXM7CisKKyAgICAgICAgdmFy
IG5ld1JhbmdlID0gdGhpcy5fZWRpdFJhbmdlKG9sZFJhbmdlLCBuZXdDb250ZW50KTsKKworICAg
ICAgICB0aGlzLl9wYWludFNjaGVkdWxlZExpbmVzKHRydWUpOworICAgICAgICB0aGlzLl9yZXN0
b3JlU2VsZWN0aW9uKHNlbGVjdGlvbik7CisKKyAgICAgICAgdGhpcy5fZXhpdFRleHRDaGFuZ2VN
b2RlKG9sZFJhbmdlLCBuZXdSYW5nZSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0gb2xkUmFuZ2UKKyAgICAgKiBAcGFyYW0ge1dlYklu
c3BlY3Rvci5UZXh0UmFuZ2V9IG5ld1JhbmdlCisgICAgICovCisgICAgdGV4dENoYW5nZWQ6IGZ1
bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSkKKyAgICB7CisgICAgICAgIHRoaXMuYmVnaW5Eb21V
cGRhdGVzKCk7CisgICAgICAgIHRoaXMuX3JlbW92ZURlY29yYXRpb25zSW5SYW5nZShvbGRSYW5n
ZSk7CisgICAgICAgIHRoaXMuX3VwZGF0ZUNodW5rc0ZvclJhbmdlcyhvbGRSYW5nZSwgbmV3UmFu
Z2UpOworICAgICAgICB0aGlzLl91cGRhdGVIaWdobGlnaHRzRm9yUmFuZ2UobmV3UmFuZ2UpOwor
ICAgICAgICB0aGlzLmVuZERvbVVwZGF0ZXMoKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICog
QHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSByYW5nZQorICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSB0ZXh0CisgICAgICovCisgICAgX2VkaXRSYW5nZTogZnVuY3Rpb24ocmFuZ2UsIHRleHQp
CisgICAgeworICAgICAgICBpZiAodGhpcy5fbGFzdEVkaXRlZFJhbmdlICYmICghdGV4dCB8fCB0
ZXh0LmluZGV4T2YoIlxuIikgIT09IC0xIHx8IHRoaXMuX2xhc3RFZGl0ZWRSYW5nZS5lbmRMaW5l
ICE9PSByYW5nZS5zdGFydExpbmUgfHwgdGhpcy5fbGFzdEVkaXRlZFJhbmdlLmVuZENvbHVtbiAh
PT0gcmFuZ2Uuc3RhcnRDb2x1bW4pKQorICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLm1hcmtV
bmRvYWJsZVN0YXRlKCk7CisKKyAgICAgICAgdmFyIG5ld1JhbmdlID0gdGhpcy5fdGV4dE1vZGVs
LmVkaXRSYW5nZShyYW5nZSwgdGV4dCk7CisgICAgICAgIHRoaXMuX2xhc3RFZGl0ZWRSYW5nZSA9
IG5ld1JhbmdlOworCisgICAgICAgIHJldHVybiBuZXdSYW5nZTsKKyAgICB9LAorCisgICAgLyoq
CisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSByYW5nZQorICAgICAqLwor
ICAgIF9yZW1vdmVEZWNvcmF0aW9uc0luUmFuZ2U6IGZ1bmN0aW9uKHJhbmdlKQorICAgIHsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2NodW5rTnVtYmVyRm9yTGluZShyYW5nZS5zdGFydExp
bmUpOyBpIDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFy
IGNodW5rID0gdGhpcy5fdGV4dENodW5rc1tpXTsKKyAgICAgICAgICAgIGlmIChjaHVuay5zdGFy
dExpbmUgPiByYW5nZS5lbmRMaW5lKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2h1bmsucmVtb3ZlQWxsRGVjb3JhdGlvbnMoKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IG9sZFJhbmdlCisg
ICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSBuZXdSYW5nZQorICAgICAqLwor
ICAgIF91cGRhdGVDaHVua3NGb3JSYW5nZXM6IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSkK
KyAgICB7CisgICAgICAgIC8vIFVwZGF0ZSB0aGUgY2h1bmtzIGluIHJhbmdlOiBmaXJzdENodW5r
TnVtYmVyIDw9IGluZGV4IDw9IGxhc3RDaHVua051bWJlcgorICAgICAgICB2YXIgZmlyc3RDaHVu
a051bWJlciA9IHRoaXMuX2NodW5rTnVtYmVyRm9yTGluZShvbGRSYW5nZS5zdGFydExpbmUpOwor
ICAgICAgICB2YXIgbGFzdENodW5rTnVtYmVyID0gZmlyc3RDaHVua051bWJlcjsKKyAgICAgICAg
d2hpbGUgKGxhc3RDaHVua051bWJlciArIDEgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aCkgewor
ICAgICAgICAgICAgaWYgKHRoaXMuX3RleHRDaHVua3NbbGFzdENodW5rTnVtYmVyICsgMV0uc3Rh
cnRMaW5lID4gb2xkUmFuZ2UuZW5kTGluZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICsrbGFzdENodW5rTnVtYmVyOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHN0YXJ0
TGluZSA9IHRoaXMuX3RleHRDaHVua3NbZmlyc3RDaHVua051bWJlcl0uc3RhcnRMaW5lOworICAg
ICAgICB2YXIgbGluZXNDb3VudCA9IHRoaXMuX3RleHRDaHVua3NbbGFzdENodW5rTnVtYmVyXS5z
dGFydExpbmUgKyB0aGlzLl90ZXh0Q2h1bmtzW2xhc3RDaHVua051bWJlcl0ubGluZXNDb3VudCAt
IHN0YXJ0TGluZTsKKyAgICAgICAgdmFyIGxpbmVzRGlmZiA9IG5ld1JhbmdlLmxpbmVzQ291bnQg
LSBvbGRSYW5nZS5saW5lc0NvdW50OworICAgICAgICBsaW5lc0NvdW50ICs9IGxpbmVzRGlmZjsK
KworICAgICAgICBpZiAobGluZXNEaWZmKSB7CisgICAgICAgICAgICAvLyBMaW5lcyBzaGlmdGVk
LCB1cGRhdGUgdGhlIGxpbmUgbnVtYmVycyBvZiB0aGUgY2h1bmtzIGJlbG93LgorICAgICAgICAg
ICAgZm9yICh2YXIgY2h1bmtOdW1iZXIgPSBsYXN0Q2h1bmtOdW1iZXIgKyAxOyBjaHVua051bWJl
ciA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2NodW5rTnVtYmVyKQorICAgICAgICAgICAg
ICAgIHRoaXMuX3RleHRDaHVua3NbY2h1bmtOdW1iZXJdLnN0YXJ0TGluZSArPSBsaW5lc0RpZmY7
CisgICAgICAgIH0KKworICAgICAgICB2YXIgZmlyc3RMaW5lUm93OworICAgICAgICBpZiAoZmly
c3RDaHVua051bWJlcikgeworICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fdGV4dENodW5r
c1tmaXJzdENodW5rTnVtYmVyIC0gMV07CisgICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBjaHVu
ay5leHBhbmRlZCA/IGNodW5rLmdldEV4cGFuZGVkTGluZVJvdyhjaHVuay5zdGFydExpbmUgKyBj
aHVuay5saW5lc0NvdW50IC0gMSkgOiBjaHVuay5lbGVtZW50OworICAgICAgICAgICAgZmlyc3RM
aW5lUm93ID0gZmlyc3RMaW5lUm93Lm5leHRTaWJsaW5nOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIGZpcnN0TGluZVJvdyA9IHRoaXMuX2NvbnRhaW5lci5maXJzdENoaWxkOworCisgICAg
ICAgIC8vIE1vc3QgZnJlcXVlbnQgY2FzZTogYSBjaHVuayByZW1haW5lZCB0aGUgc2FtZS4KKyAg
ICAgICAgZm9yICh2YXIgY2h1bmtOdW1iZXIgPSBmaXJzdENodW5rTnVtYmVyOyBjaHVua051bWJl
ciA8PSBsYXN0Q2h1bmtOdW1iZXI7ICsrY2h1bmtOdW1iZXIpIHsKKyAgICAgICAgICAgIHZhciBj
aHVuayA9IHRoaXMuX3RleHRDaHVua3NbY2h1bmtOdW1iZXJdOworICAgICAgICAgICAgaWYgKGNo
dW5rLnN0YXJ0TGluZSArIGNodW5rLmxpbmVzQ291bnQgPiB0aGlzLl90ZXh0TW9kZWwubGluZXND
b3VudCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHZhciBsaW5lTnVtYmVy
ID0gY2h1bmsuc3RhcnRMaW5lOworICAgICAgICAgICAgZm9yICh2YXIgbGluZVJvdyA9IGZpcnN0
TGluZVJvdzsgbGluZVJvdyAmJiBsaW5lTnVtYmVyIDwgY2h1bmsuc3RhcnRMaW5lICsgY2h1bmsu
bGluZXNDb3VudDsgbGluZVJvdyA9IGxpbmVSb3cubmV4dFNpYmxpbmcpIHsKKyAgICAgICAgICAg
ICAgICBpZiAobGluZVJvdy5saW5lTnVtYmVyICE9PSBsaW5lTnVtYmVyIHx8IGxpbmVSb3cgIT09
IGNodW5rLmdldEV4cGFuZGVkTGluZVJvdyhsaW5lTnVtYmVyKSB8fCBsaW5lUm93LnRleHRDb250
ZW50ICE9PSB0aGlzLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKSB8fCAhbGluZVJvdy5maXJz
dENoaWxkKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICArK2xp
bmVOdW1iZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGluZU51bWJlciA8IGNo
dW5rLnN0YXJ0TGluZSArIGNodW5rLmxpbmVzQ291bnQpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjaHVuay51cGRhdGVDb2xsYXBzZWRMaW5lUm93KCk7CisgICAgICAgICAg
ICArK2ZpcnN0Q2h1bmtOdW1iZXI7CisgICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBsaW5lUm93
OworICAgICAgICAgICAgc3RhcnRMaW5lICs9IGNodW5rLmxpbmVzQ291bnQ7CisgICAgICAgICAg
ICBsaW5lc0NvdW50IC09IGNodW5rLmxpbmVzQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoZmlyc3RDaHVua051bWJlciA+IGxhc3RDaHVua051bWJlciAmJiBsaW5lc0NvdW50ID09PSAw
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIE1heWJlIG1lcmdlIHdpdGggdGhl
IG5leHQgY2h1bmssIHNvIHRoYXQgd2Ugc2hvdWxkIG5vdCBjcmVhdGUgMS1zaXplZCBjaHVua3Mg
d2hlbiBhcHBlbmRpbmcgbmV3IGxpbmVzIG9uZSBieSBvbmUuCisgICAgICAgIHZhciBjaHVuayA9
IHRoaXMuX3RleHRDaHVua3NbbGFzdENodW5rTnVtYmVyICsgMV07CisgICAgICAgIHZhciBsaW5l
c0luTGFzdENodW5rID0gbGluZXNDb3VudCAlIHRoaXMuX2RlZmF1bHRDaHVua1NpemU7CisgICAg
ICAgIGlmIChjaHVuayAmJiAhY2h1bmsuZGVjb3JhdGVkICYmIGxpbmVzSW5MYXN0Q2h1bmsgPiAw
ICYmIGxpbmVzSW5MYXN0Q2h1bmsgKyBjaHVuay5saW5lc0NvdW50IDw9IHRoaXMuX2RlZmF1bHRD
aHVua1NpemUpIHsKKyAgICAgICAgICAgICsrbGFzdENodW5rTnVtYmVyOworICAgICAgICAgICAg
bGluZXNDb3VudCArPSBjaHVuay5saW5lc0NvdW50OworICAgICAgICB9CisKKyAgICAgICAgdmFy
IHNjcm9sbFRvcCA9IHRoaXMuZWxlbWVudC5zY3JvbGxUb3A7CisgICAgICAgIHZhciBzY3JvbGxM
ZWZ0ID0gdGhpcy5lbGVtZW50LnNjcm9sbExlZnQ7CisKKyAgICAgICAgLy8gRGVsZXRlIGFsbCBE
T00gZWxlbWVudHMgdGhhdCB3ZXJlIGVpdGhlciBjb250cm9sbGVkIGJ5IHRoZSBvbGQgY2h1bmtz
LCBvciBoYXZlIGp1c3QgYmVlbiBpbnNlcnRlZC4KKyAgICAgICAgdmFyIGZpcnN0VW5tb2RpZmll
ZExpbmVSb3cgPSBudWxsOworICAgICAgICBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbbGFzdENo
dW5rTnVtYmVyICsgMV07CisgICAgICAgIGlmIChjaHVuaykKKyAgICAgICAgICAgIGZpcnN0VW5t
b2RpZmllZExpbmVSb3cgPSBjaHVuay5leHBhbmRlZCA/IGNodW5rLmdldEV4cGFuZGVkTGluZVJv
dyhjaHVuay5zdGFydExpbmUpIDogY2h1bmsuZWxlbWVudDsKKworICAgICAgICB3aGlsZSAoZmly
c3RMaW5lUm93ICYmIGZpcnN0TGluZVJvdyAhPT0gZmlyc3RVbm1vZGlmaWVkTGluZVJvdykgewor
ICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSBmaXJzdExpbmVSb3c7CisgICAgICAgICAgICBmaXJz
dExpbmVSb3cgPSBmaXJzdExpbmVSb3cubmV4dFNpYmxpbmc7CisgICAgICAgICAgICB0aGlzLl9j
b250YWluZXIucmVtb3ZlQ2hpbGQobGluZVJvdyk7CisgICAgICAgIH0KKworICAgICAgICAvLyBS
ZXBsYWNlIG9sZCBjaHVua3Mgd2l0aCB0aGUgbmV3IG9uZXMuCisgICAgICAgIGZvciAodmFyIGNo
dW5rTnVtYmVyID0gZmlyc3RDaHVua051bWJlcjsgbGluZXNDb3VudCA+IDA7ICsrY2h1bmtOdW1i
ZXIpIHsKKyAgICAgICAgICAgIHZhciBjaHVua0xpbmVzQ291bnQgPSBNYXRoLm1pbih0aGlzLl9k
ZWZhdWx0Q2h1bmtTaXplLCBsaW5lc0NvdW50KTsKKyAgICAgICAgICAgIHZhciBuZXdDaHVuayA9
IHRoaXMuX2NyZWF0ZU5ld0NodW5rKHN0YXJ0TGluZSwgc3RhcnRMaW5lICsgY2h1bmtMaW5lc0Nv
dW50KTsKKyAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5pbnNlcnRCZWZvcmUobmV3Q2h1bmsu
ZWxlbWVudCwgZmlyc3RVbm1vZGlmaWVkTGluZVJvdyk7CisKKyAgICAgICAgICAgIGlmIChjaHVu
a051bWJlciA8PSBsYXN0Q2h1bmtOdW1iZXIpCisgICAgICAgICAgICAgICAgdGhpcy5fdGV4dENo
dW5rc1tjaHVua051bWJlcl0gPSBuZXdDaHVuazsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnNwbGljZShjaHVua051bWJlciwgMCwgbmV3Q2h1bmsp
OworICAgICAgICAgICAgc3RhcnRMaW5lICs9IGNodW5rTGluZXNDb3VudDsKKyAgICAgICAgICAg
IGxpbmVzQ291bnQgLT0gY2h1bmtMaW5lc0NvdW50OworICAgICAgICB9CisgICAgICAgIGlmIChj
aHVua051bWJlciA8PSBsYXN0Q2h1bmtOdW1iZXIpCisgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1
bmtzLnNwbGljZShjaHVua051bWJlciwgbGFzdENodW5rTnVtYmVyIC0gY2h1bmtOdW1iZXIgKyAx
KTsKKworICAgICAgICB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wOworICAgICAg
ICB0aGlzLmVsZW1lbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7CisgICAgfSwKKworICAgIC8q
KgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0gcmFuZ2UKKyAgICAgKi8K
KyAgICBfdXBkYXRlSGlnaGxpZ2h0c0ZvclJhbmdlOiBmdW5jdGlvbihyYW5nZSkKKyAgICB7Cisg
ICAgICAgIHZhciB2aXNpYmxlRnJvbSA9IHRoaXMuZWxlbWVudC5zY3JvbGxUb3A7CisgICAgICAg
IHZhciB2aXNpYmxlVG8gPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wICsgdGhpcy5lbGVtZW50LmNs
aWVudEhlaWdodDsKKworICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZmluZFZpc2libGVDaHVu
a3ModmlzaWJsZUZyb20sIHZpc2libGVUbyk7CisgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3Rl
eHRDaHVua3NbcmVzdWx0LmVuZCAtIDFdOworICAgICAgICB2YXIgbGFzdFZpc2libGVMaW5lID0g
Y2h1bmsuc3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3VudDsKKworICAgICAgICBsYXN0VmlzaWJs
ZUxpbmUgPSBNYXRoLm1heChsYXN0VmlzaWJsZUxpbmUsIHJhbmdlLmVuZExpbmUgKyAxKTsKKyAg
ICAgICAgbGFzdFZpc2libGVMaW5lID0gTWF0aC5taW4obGFzdFZpc2libGVMaW5lLCB0aGlzLl90
ZXh0TW9kZWwubGluZXNDb3VudCk7CisKKyAgICAgICAgdmFyIHVwZGF0ZWQgPSB0aGlzLl9oaWdo
bGlnaHRlci51cGRhdGVIaWdobGlnaHQocmFuZ2Uuc3RhcnRMaW5lLCBsYXN0VmlzaWJsZUxpbmUp
OworICAgICAgICBpZiAoIXVwZGF0ZWQpIHsKKyAgICAgICAgICAgIC8vIEhpZ2hsaWdodHMgZm9y
IHRoZSBjaHVua3MgYmVsb3cgYXJlIGludmFsaWQsIHNvIGp1c3QgY29sbGFwc2UgdGhlbS4KKyAg
ICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9jaHVua051bWJlckZvckxpbmUocmFuZ2Uuc3Rh
cnRMaW5lKTsgaSA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAg
ICAgdGhpcy5fdGV4dENodW5rc1tpXS5leHBhbmRlZCA9IGZhbHNlOworICAgICAgICB9CisKKyAg
ICAgICAgdGhpcy5fcmVwYWludEFsbCgpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFy
YW0ge0FycmF5LjxzdHJpbmc+fSBsaW5lcworICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVu
dAorICAgICAqLworICAgIF9jb2xsZWN0TGluZXNGcm9tRGl2OiBmdW5jdGlvbihsaW5lcywgZWxl
bWVudCkKKyAgICB7CisgICAgICAgIHZhciB0ZXh0Q29udGVudHMgPSBbXTsKKyAgICAgICAgdmFy
IG5vZGUgPSBlbGVtZW50Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSA/IGVsZW1lbnQgOiBl
bGVtZW50LnRyYXZlcnNlTmV4dE5vZGUoZWxlbWVudCk7CisgICAgICAgIHdoaWxlIChub2RlKSB7
CisgICAgICAgICAgICBpZiAoZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQgPT09IG5vZGUpIHsK
KyAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0U2libGluZzsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLm5vZGVOYW1l
LnRvTG93ZXJDYXNlKCkgPT09ICJiciIpCisgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRzLnB1
c2goIlxuIik7CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRF
WFRfTk9ERSkKKyAgICAgICAgICAgICAgICB0ZXh0Q29udGVudHMucHVzaChub2RlLnRleHRDb250
ZW50KTsKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLnRyYXZlcnNlTmV4dE5vZGUoZWxlbWVudCk7
CisgICAgICAgIH0KKworICAgICAgICB2YXIgdGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudHMuam9p
bigiIik7CisgICAgICAgIC8vIFRoZSBsYXN0IFxuIChpZiBhbnkpIGRvZXMgbm90ICJjb3VudCIg
aW4gYSBESVYuCisgICAgICAgIHRleHRDb250ZW50ID0gdGV4dENvbnRlbnQucmVwbGFjZSgvXG4k
LywgIiIpOworCisgICAgICAgIHRleHRDb250ZW50cyA9IHRleHRDb250ZW50LnNwbGl0KCJcbiIp
OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHRDb250ZW50cy5sZW5ndGg7ICsraSkK
KyAgICAgICAgICAgIGxpbmVzLnB1c2godGV4dENvbnRlbnRzW2ldKTsKKyAgICB9Cit9CisKK1dl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGU7CisKKy8qKgorICogQGNv
bnN0cnVjdG9yCisgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVs
fSBjaHVua2VkUGFuZWwKKyAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydExpbmUKKyAqIEBwYXJhbSB7
bnVtYmVyfSBlbmRMaW5lCisqLworV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsgPSBm
dW5jdGlvbihjaHVua2VkUGFuZWwsIHN0YXJ0TGluZSwgZW5kTGluZSkKK3sKKyAgICB0aGlzLl9j
aHVua2VkUGFuZWwgPSBjaHVua2VkUGFuZWw7CisgICAgdGhpcy5fdGV4dE1vZGVsID0gY2h1bmtl
ZFBhbmVsLl90ZXh0TW9kZWw7CisKKyAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKKyAgICB0aGlzLmVsZW1lbnQubGluZU51bWJlciA9IHN0YXJ0TGluZTsK
KyAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLWNvbnRlbnQiOworICAg
IHRoaXMuX2NodW5rZWRQYW5lbC5fZW5hYmxlRE9NTm9kZVJlbW92ZWRMaXN0ZW5lcih0aGlzLmVs
ZW1lbnQsIHRydWUpOworCisgICAgdGhpcy5fc3RhcnRMaW5lID0gc3RhcnRMaW5lOworICAgIGVu
ZExpbmUgPSBNYXRoLm1pbih0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCwgZW5kTGluZSk7Cisg
ICAgdGhpcy5saW5lc0NvdW50ID0gZW5kTGluZSAtIHN0YXJ0TGluZTsKKworICAgIHRoaXMuX2V4
cGFuZGVkID0gZmFsc2U7CisgICAgdGhpcy5fcmVhZE9ubHkgPSBmYWxzZTsKKworICAgIHRoaXMu
dXBkYXRlQ29sbGFwc2VkTGluZVJvdygpOworfQorCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1h
aW5DaHVuay5wcm90b3R5cGUgPSB7CisgICAgYWRkRGVjb3JhdGlvbjogZnVuY3Rpb24oZGVjb3Jh
dGlvbikKKyAgICB7CisgICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5iZWdpbkRvbVVwZGF0ZXMo
KTsKKyAgICAgICAgaWYgKHR5cGVvZiBkZWNvcmF0aW9uID09PSAic3RyaW5nIikKKyAgICAgICAg
ICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKGRlY29yYXRpb24pOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIGlmICghdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudCkgewor
ICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuZGVj
b3JhdGlvbnNFbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1kZWNvcmF0aW9ucyI7Cisg
ICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudC5kZWNv
cmF0aW9uc0VsZW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5lbGVtZW50
LmRlY29yYXRpb25zRWxlbWVudC5hcHBlbmRDaGlsZChkZWNvcmF0aW9uKTsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLl9jaHVua2VkUGFuZWwuZW5kRG9tVXBkYXRlcygpOworICAgIH0sCisKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ3xFbGVtZW50fSBkZWNvcmF0aW9uCisgICAgICov
CisgICAgcmVtb3ZlRGVjb3JhdGlvbjogZnVuY3Rpb24oZGVjb3JhdGlvbikKKyAgICB7CisgICAg
ICAgIHRoaXMuX2NodW5rZWRQYW5lbC5iZWdpbkRvbVVwZGF0ZXMoKTsKKyAgICAgICAgaWYgKHR5
cGVvZiBkZWNvcmF0aW9uID09PSAic3RyaW5nIikKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5y
ZW1vdmVTdHlsZUNsYXNzKGRlY29yYXRpb24pOworICAgICAgICBlbHNlIGlmICh0aGlzLmVsZW1l
bnQuZGVjb3JhdGlvbnNFbGVtZW50KQorICAgICAgICAgICAgdGhpcy5lbGVtZW50LmRlY29yYXRp
b25zRWxlbWVudC5yZW1vdmVDaGlsZChkZWNvcmF0aW9uKTsKKyAgICAgICAgdGhpcy5fY2h1bmtl
ZFBhbmVsLmVuZERvbVVwZGF0ZXMoKTsKKyAgICB9LAorCisgICAgcmVtb3ZlQWxsRGVjb3JhdGlv
bnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5iZWdpbkRv
bVVwZGF0ZXMoKTsKKyAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGlu
ZS1jb250ZW50IjsKKyAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQp
IHsKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQuZGVj
b3JhdGlvbnNFbGVtZW50KTsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmVsZW1lbnQuZGVjb3Jh
dGlvbnNFbGVtZW50OworICAgICAgICB9CisgICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5lbmRE
b21VcGRhdGVzKCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59
CisgICAgICovCisgICAgZ2V0IGRlY29yYXRlZCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhp
cy5lbGVtZW50LmNsYXNzTmFtZSAhPT0gIndlYmtpdC1saW5lLWNvbnRlbnQiIHx8ICEhKHRoaXMu
ZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQgJiYgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxl
bWVudC5maXJzdENoaWxkKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7bnVt
YmVyfQorICAgICAqLworICAgIGdldCBzdGFydExpbmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX3N0YXJ0TGluZTsKKyAgICB9LAorCisgICAgc2V0IHN0YXJ0TGluZShzdGFydExpbmUp
CisgICAgeworICAgICAgICB0aGlzLl9zdGFydExpbmUgPSBzdGFydExpbmU7CisgICAgICAgIHRo
aXMuZWxlbWVudC5saW5lTnVtYmVyID0gc3RhcnRMaW5lOworICAgICAgICBpZiAodGhpcy5fZXhw
YW5kZWRMaW5lUm93cykgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9l
eHBhbmRlZExpbmVSb3dzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIHRoaXMuX2V4cGFu
ZGVkTGluZVJvd3NbaV0ubGluZU51bWJlciA9IHN0YXJ0TGluZSArIGk7CisgICAgICAgIH0KKyAg
ICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBn
ZXQgZXhwYW5kZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkOworICAg
IH0sCisKKyAgICBzZXQgZXhwYW5kZWQoZXhwYW5kZWQpCisgICAgeworICAgICAgICBpZiAodGhp
cy5fZXhwYW5kZWQgPT09IGV4cGFuZGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IHRoaXMuX2V4cGFuZGVkID0gZXhwYW5kZWQ7CisKKyAgICAgICAgaWYgKHRoaXMubGluZXNDb3Vu
dCA9PT0gMSkgeworICAgICAgICAgICAgaWYgKGV4cGFuZGVkKQorICAgICAgICAgICAgICAgIHRo
aXMuX2NodW5rZWRQYW5lbC5fcGFpbnRMaW5lKHRoaXMuZWxlbWVudCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9jaHVua2VkUGFuZWwuYmVnaW5Eb21V
cGRhdGVzKCk7CisKKyAgICAgICAgaWYgKGV4cGFuZGVkKSB7CisgICAgICAgICAgICB0aGlzLl9l
eHBhbmRlZExpbmVSb3dzID0gW107CisgICAgICAgICAgICB2YXIgcGFyZW50RWxlbWVudCA9IHRo
aXMuZWxlbWVudC5wYXJlbnRFbGVtZW50OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMu
c3RhcnRMaW5lOyBpIDwgdGhpcy5zdGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQ7ICsraSkgewor
ICAgICAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fY3JlYXRlUm93KGkpOworICAgICAg
ICAgICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5fZW5hYmxlRE9NTm9kZVJlbW92ZWRMaXN0ZW5l
cihsaW5lUm93LCB0cnVlKTsKKyAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVFbGVtZW50UmVh
ZE9ubHlTdGF0ZShsaW5lUm93KTsKKyAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50Lmluc2Vy
dEJlZm9yZShsaW5lUm93LCB0aGlzLmVsZW1lbnQpOworICAgICAgICAgICAgICAgIHRoaXMuX2V4
cGFuZGVkTGluZVJvd3MucHVzaChsaW5lUm93KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRoaXMuX2NodW5rZWRQYW5lbC5fZW5hYmxlRE9NTm9kZVJlbW92ZWRMaXN0ZW5lcih0aGlzLmVs
ZW1lbnQsIGZhbHNlKTsKKyAgICAgICAgICAgIHBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhp
cy5lbGVtZW50KTsKKyAgICAgICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5fcGFpbnRMaW5lcyh0
aGlzLnN0YXJ0TGluZSwgdGhpcy5zdGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGVsZW1lbnRJbnNlcnRlZCA9IGZhbHNlOworICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9leHBhbmRlZExpbmVSb3dzLmxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl9leHBhbmRlZExp
bmVSb3dzW2ldOworICAgICAgICAgICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5fZW5hYmxlRE9N
Tm9kZVJlbW92ZWRMaXN0ZW5lcihsaW5lUm93LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgdmFy
IHBhcmVudEVsZW1lbnQgPSBsaW5lUm93LnBhcmVudEVsZW1lbnQ7CisgICAgICAgICAgICAgICAg
aWYgKHBhcmVudEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50SW5z
ZXJ0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRJbnNlcnRlZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaHVua2VkUGFuZWwuX2VuYWJsZURPTU5v
ZGVSZW1vdmVkTGlzdGVuZXIodGhpcy5lbGVtZW50LCB0cnVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuZWxlbWVudCwgbGluZVJvdyk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVu
dC5yZW1vdmVDaGlsZChsaW5lUm93KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgdGhpcy5fY2h1bmtlZFBhbmVsLl9yZWxlYXNlTGluZXNIaWdobGlnaHQobGluZVJvdyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fZXhwYW5kZWRMaW5lUm93czsK
KyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5lbmREb21VcGRhdGVzKCk7
CisgICAgfSwKKworICAgIHNldCByZWFkT25seShyZWFkT25seSkKKyAgICB7CisgICAgICAgIGlm
ICh0aGlzLl9yZWFkT25seSA9PT0gcmVhZE9ubHkpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgdGhpcy5fcmVhZE9ubHkgPSByZWFkT25seTsKKyAgICAgICAgdGhpcy5fdXBkYXRlRWxl
bWVudFJlYWRPbmx5U3RhdGUodGhpcy5lbGVtZW50KTsKKyAgICAgICAgaWYgKHRoaXMuX2V4cGFu
ZGVkTGluZVJvd3MpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZXhw
YW5kZWRMaW5lUm93cy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVF
bGVtZW50UmVhZE9ubHlTdGF0ZSh0aGlzLl9leHBhbmRlZExpbmVSb3dzW2ldKTsKKyAgICAgICAg
fQorICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqLwor
ICAgIGdldCByZWFkT25seSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHk7
CisgICAgfSwKKworICAgIF91cGRhdGVFbGVtZW50UmVhZE9ubHlTdGF0ZTogZnVuY3Rpb24oZWxl
bWVudCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9yZWFkT25seSkKKyAgICAgICAgICAgIGVs
ZW1lbnQuYWRkU3R5bGVDbGFzcygidGV4dC1lZGl0b3ItcmVhZC1vbmx5Iik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygidGV4dC1lZGl0b3ItcmVh
ZC1vbmx5Iik7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge251bWJlcn0KKyAg
ICAgKi8KKyAgICBnZXQgaGVpZ2h0KCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fZXhwYW5k
ZWRMaW5lUm93cykKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaHVua2VkUGFuZWwuX3RvdGFs
SGVpZ2h0KHRoaXMuZWxlbWVudCk7CisgICAgICAgIHJldHVybiB0aGlzLl9jaHVua2VkUGFuZWwu
X3RvdGFsSGVpZ2h0KHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbMF0sIHRoaXMuX2V4cGFuZGVkTGlu
ZVJvd3NbdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5sZW5ndGggLSAxXSk7CisgICAgfSwKKworICAg
IC8qKgorICAgICAqIEByZXR1cm4ge251bWJlcn0KKyAgICAgKi8KKyAgICBnZXQgb2Zmc2V0VG9w
KCkKKyAgICB7CisgICAgICAgIHJldHVybiAodGhpcy5fZXhwYW5kZWRMaW5lUm93cyAmJiB0aGlz
Ll9leHBhbmRlZExpbmVSb3dzLmxlbmd0aCkgPyB0aGlzLl9leHBhbmRlZExpbmVSb3dzWzBdLm9m
ZnNldFRvcCA6IHRoaXMuZWxlbWVudC5vZmZzZXRUb3A7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICogQHJldHVybiB7RWxlbWVudH0K
KyAgICAgKi8KKyAgICBfY3JlYXRlUm93OiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAg
ICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl9jaHVua2VkUGFuZWwuX2NhY2hlZFJvd3MucG9wKCkg
fHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIGxpbmVSb3cubGluZU51
bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgIGxpbmVSb3cuY2xhc3NOYW1lID0gIndlYmtpdC1s
aW5lLWNvbnRlbnQiOworICAgICAgICBsaW5lUm93LnRleHRDb250ZW50ID0gdGhpcy5fdGV4dE1v
ZGVsLmxpbmUobGluZU51bWJlcik7CisgICAgICAgIGlmICghbGluZVJvdy50ZXh0Q29udGVudCkK
KyAgICAgICAgICAgIGxpbmVSb3cuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
YnIiKSk7CisgICAgICAgIHJldHVybiBsaW5lUm93OworICAgIH0sCisKKyAgICAvKioKKyAgICAg
KiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqIEByZXR1cm4ge0VsZW1lbnR9Cisg
ICAgICovCisgICAgZ2V0RXhwYW5kZWRMaW5lUm93OiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAg
IHsKKyAgICAgICAgaWYgKCF0aGlzLl9leHBhbmRlZCB8fCBsaW5lTnVtYmVyIDwgdGhpcy5zdGFy
dExpbmUgfHwgbGluZU51bWJlciA+PSB0aGlzLnN0YXJ0TGluZSArIHRoaXMubGluZXNDb3VudCkK
KyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBpZiAoIXRoaXMuX2V4cGFuZGVkTGlu
ZVJvd3MpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50OworICAgICAgICByZXR1cm4g
dGhpcy5fZXhwYW5kZWRMaW5lUm93c1tsaW5lTnVtYmVyIC0gdGhpcy5zdGFydExpbmVdOworICAg
IH0sCisKKyAgICB1cGRhdGVDb2xsYXBzZWRMaW5lUm93OiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICBpZiAodGhpcy5saW5lc0NvdW50ID09PSAxICYmIHRoaXMuX2V4cGFuZGVkKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBsaW5lcyA9IFtdOworICAgICAgICBmb3IgKHZh
ciBpID0gdGhpcy5zdGFydExpbmU7IGkgPCB0aGlzLnN0YXJ0TGluZSArIHRoaXMubGluZXNDb3Vu
dDsgKytpKQorICAgICAgICAgICAgbGluZXMucHVzaCh0aGlzLl90ZXh0TW9kZWwubGluZShpKSk7
CisKKyAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgIHRoaXMu
ZWxlbWVudC50ZXh0Q29udGVudCA9IGxpbmVzLmpvaW4oIlxuIik7CisKKyAgICAgICAgLy8gVGhl
IGxhc3QgZW1wdHkgbGluZSB3aWxsIGdldCBzd2FsbG93ZWQgb3RoZXJ3aXNlLgorICAgICAgICBp
ZiAoIWxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdKQorICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOworICAgIH0KK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM1MjYxNzVmYjExYzAyMGY0MzdjOWIxODhhM2U4ZWIy
ZWIzZDUwNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanMKKysrIC9kZXYv
bnVsbApAQCAtMSwyNTc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9
Ci0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNb2Rl
bH0gdGV4dE1vZGVsCi0gKiBAcGFyYW0gez9zdHJpbmd9IHVybAotICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuVGV4dFZpZXdlckRlbGVnYXRlfSBkZWxlZ2F0ZQotICovCi1XZWJJbnNwZWN0b3IuVGV4
dFZpZXdlciA9IGZ1bmN0aW9uKHRleHRNb2RlbCwgdXJsLCBkZWxlZ2F0ZSkKLXsKLSAgICBXZWJJ
bnNwZWN0b3IuVmlldy5jYWxsKHRoaXMpOwotICAgIHRoaXMucmVnaXN0ZXJSZXF1aXJlZENTUygi
dGV4dFZpZXdlci5jc3MiKTsKLQotICAgIHRoaXMuX3RleHRNb2RlbCA9IHRleHRNb2RlbDsKLSAg
ICB0aGlzLl90ZXh0TW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ck1vZGVsLkV2ZW50cy5UZXh0Q2hhbmdlZCwgdGhpcy5fdGV4dENoYW5nZWQsIHRoaXMpOwotICAg
IHRoaXMuX3RleHRNb2RlbC5yZXNldFVuZG9TdGFjaygpOwotICAgIHRoaXMuX2RlbGVnYXRlID0g
ZGVsZWdhdGU7Ci0gICAgdGhpcy5fdXJsID0gdXJsOwotICAgIHRoaXMuZWxlbWVudC5jbGFzc05h
bWUgPSAidGV4dC1lZGl0b3IgbW9ub3NwYWNlIjsKLQotICAgIHZhciBlbnRlclRleHRDaGFuZ2VN
b2RlID0gdGhpcy5fZW50ZXJJbnRlcm5hbFRleHRDaGFuZ2VNb2RlLmJpbmQodGhpcyk7Ci0gICAg
dmFyIGV4aXRUZXh0Q2hhbmdlTW9kZSA9IHRoaXMuX2V4aXRJbnRlcm5hbFRleHRDaGFuZ2VNb2Rl
LmJpbmQodGhpcyk7Ci0gICAgdmFyIHN5bmNTY3JvbGxMaXN0ZW5lciA9IHRoaXMuX3N5bmNTY3Jv
bGwuYmluZCh0aGlzKTsKLSAgICB2YXIgc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyID0g
dGhpcy5fc3luY0RlY29yYXRpb25zRm9yTGluZS5iaW5kKHRoaXMpOwotICAgIHZhciBzeW5jTGlu
ZUhlaWdodExpc3RlbmVyID0gdGhpcy5fc3luY0xpbmVIZWlnaHQuYmluZCh0aGlzKTsKLSAgICB0
aGlzLl9tYWluUGFuZWwgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwodGhp
cy5fdGV4dE1vZGVsLCB1cmwsIHN5bmNTY3JvbGxMaXN0ZW5lciwgc3luY0RlY29yYXRpb25zRm9y
TGluZUxpc3RlbmVyLCBlbnRlclRleHRDaGFuZ2VNb2RlLCBleGl0VGV4dENoYW5nZU1vZGUpOwot
ICAgIHRoaXMuX2d1dHRlclBhbmVsID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVy
UGFuZWwodGhpcy5fdGV4dE1vZGVsLCBzeW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIsIHN5
bmNMaW5lSGVpZ2h0TGlzdGVuZXIpOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlz
Ll9tYWluUGFuZWwuZWxlbWVudCk7Ci0gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMu
X2d1dHRlclBhbmVsLmVsZW1lbnQpOwotCi0gICAgLy8gRm9yd2FyZCBtb3VzZSB3aGVlbCBldmVu
dHMgZnJvbSB0aGUgdW5zY3JvbGxhYmxlIGd1dHRlciB0byB0aGUgbWFpbiBwYW5lbC4KLSAgICBm
dW5jdGlvbiBmb3J3YXJkV2hlZWxFdmVudChldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBjbG9u
ZSA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJXaGVlbEV2ZW50Iik7Ci0gICAgICAgIGNsb25lLmlu
aXRXZWJLaXRXaGVlbEV2ZW50KGV2ZW50LndoZWVsRGVsdGFYLCBldmVudC53aGVlbERlbHRhWSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudmlldywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc2NyZWVuWCwgZXZlbnQuc2NyZWVuWSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuY2xpZW50WCwgZXZlbnQu
Y2xpZW50WSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuY3RybEtl
eSwgZXZlbnQuYWx0S2V5LCBldmVudC5zaGlmdEtleSwgZXZlbnQubWV0YUtleSk7Ci0gICAgICAg
IHRoaXMuX21haW5QYW5lbC5lbGVtZW50LmRpc3BhdGNoRXZlbnQoY2xvbmUpOwotICAgIH0KLSAg
ICB0aGlzLl9ndXR0ZXJQYW5lbC5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNld2hlZWwi
LCBmb3J3YXJkV2hlZWxFdmVudC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0KLSAgICB0aGlzLmVsZW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuX2hhbmRsZUtleURvd24uYmluZCh0
aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0
bWVudSIsIHRoaXMuX2NvbnRleHRNZW51LmJpbmQodGhpcyksIHRydWUpOwotCi0gICAgdGhpcy5f
cmVnaXN0ZXJTaG9ydGN1dHMoKTsKLX0KLQotV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtaW1lVHlwZQotICAgICAq
LwotICAgIHNldCBtaW1lVHlwZShtaW1lVHlwZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX21haW5Q
YW5lbC5taW1lVHlwZSA9IG1pbWVUeXBlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge2Jvb2xlYW59IHJlYWRPbmx5Ci0gICAgICovCi0gICAgc2V0UmVhZE9ubHk6IGZ1bmN0aW9u
KHJlYWRPbmx5KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX21haW5QYW5lbC5yZWFkT25seSgp
ID09PSByZWFkT25seSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fbWFpblBh
bmVsLnNldFJlYWRPbmx5KHJlYWRPbmx5LCB0aGlzLmlzU2hvd2luZygpKTsKLSAgICAgICAgV2Vi
SW5zcGVjdG9yLm1hcmtCZWluZ0VkaXRlZCh0aGlzLmVsZW1lbnQsICFyZWFkT25seSk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgcmVh
ZE9ubHk6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9tYWluUGFuZWwu
cmVhZE9ubHkoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNb2RlbH0KLSAgICAgKi8KLSAgICBnZXQgdGV4dE1vZGVsKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl90ZXh0TW9kZWw7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEByZXR1cm4ge0VsZW1lbnR9Ci0gICAgICovCi0gICAgZGVmYXVsdEZvY3VzZWRFbGVtZW50
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbWFpblBhbmVsLmRlZmF1
bHRGb2N1c2VkRWxlbWVudCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251
bWJlcn0gbGluZU51bWJlcgotICAgICAqLwotICAgIHJldmVhbExpbmU6IGZ1bmN0aW9uKGxpbmVO
dW1iZXIpCi0gICAgewotICAgICAgICB0aGlzLl9tYWluUGFuZWwucmV2ZWFsTGluZShsaW5lTnVt
YmVyKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1i
ZXIKLSAgICAgKiBAcGFyYW0ge3N0cmluZ3xFbGVtZW50fSBkZWNvcmF0aW9uCi0gICAgICovCi0g
ICAgYWRkRGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgZGVjb3JhdGlvbikKLSAgICB7
Ci0gICAgICAgIHRoaXMuX21haW5QYW5lbC5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsIGRlY29y
YXRpb24pOwotICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC5hZGREZWNvcmF0aW9uKGxpbmVOdW1i
ZXIsIGRlY29yYXRpb24pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJl
cn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7c3RyaW5nfEVsZW1lbnR9IGRlY29yYXRpb24K
LSAgICAgKi8KLSAgICByZW1vdmVEZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBkZWNv
cmF0aW9uKQotICAgIHsKLSAgICAgICAgdGhpcy5fbWFpblBhbmVsLnJlbW92ZURlY29yYXRpb24o
bGluZU51bWJlciwgZGVjb3JhdGlvbik7Ci0gICAgICAgIHRoaXMuX2d1dHRlclBhbmVsLnJlbW92
ZURlY29yYXRpb24obGluZU51bWJlciwgZGVjb3JhdGlvbik7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0gcmFuZ2UKLSAgICAgKi8KLSAg
ICBtYXJrQW5kUmV2ZWFsUmFuZ2U6IGZ1bmN0aW9uKHJhbmdlKQotICAgIHsKLSAgICAgICAgdGhp
cy5fbWFpblBhbmVsLm1hcmtBbmRSZXZlYWxSYW5nZShyYW5nZSk7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICovCi0gICAgaGlnaGxp
Z2h0TGluZTogZnVuY3Rpb24obGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmICh0eXBlb2Yg
bGluZU51bWJlciAhPT0gIm51bWJlciIgfHwgbGluZU51bWJlciA8IDApCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgbGluZU51bWJlciA9IE1hdGgubWluKGxpbmVOdW1iZXIsIHRoaXMu
X3RleHRNb2RlbC5saW5lc0NvdW50IC0gMSk7Ci0gICAgICAgIHRoaXMuX21haW5QYW5lbC5oaWdo
bGlnaHRMaW5lKGxpbmVOdW1iZXIpOwotICAgIH0sCi0KLSAgICBjbGVhckxpbmVIaWdobGlnaHQ6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX21haW5QYW5lbC5jbGVhckxpbmVIaWdo
bGlnaHQoKTsKLSAgICB9LAotCi0gICAgZnJlZUNhY2hlZEVsZW1lbnRzOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB0aGlzLl9tYWluUGFuZWwuZnJlZUNhY2hlZEVsZW1lbnRzKCk7Ci0gICAg
ICAgIHRoaXMuX2d1dHRlclBhbmVsLmZyZWVDYWNoZWRFbGVtZW50cygpOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcmV0dXJuIHtBcnJheS48RWxlbWVudD59Ci0gICAgICovCi0gICAgZWxl
bWVudHNUb1Jlc3RvcmVTY3JvbGxQb3NpdGlvbnNGb3I6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBbdGhpcy5fbWFpblBhbmVsLmVsZW1lbnRdOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0Vmlld2VyfSB0ZXh0Vmlld2VyCi0gICAg
ICovCi0gICAgaW5oZXJpdFNjcm9sbFBvc2l0aW9uczogZnVuY3Rpb24odGV4dFZpZXdlcikKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX21haW5QYW5lbC5lbGVtZW50Ll9zY3JvbGxUb3AgPSB0ZXh0Vmll
d2VyLl9tYWluUGFuZWwuZWxlbWVudC5zY3JvbGxUb3A7Ci0gICAgICAgIHRoaXMuX21haW5QYW5l
bC5lbGVtZW50Ll9zY3JvbGxMZWZ0ID0gdGV4dFZpZXdlci5fbWFpblBhbmVsLmVsZW1lbnQuc2Ny
b2xsTGVmdDsKLSAgICB9LAotCi0gICAgYmVnaW5VcGRhdGVzOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICB0aGlzLl9tYWluUGFuZWwuYmVnaW5VcGRhdGVzKCk7Ci0gICAgICAgIHRoaXMuX2d1
dHRlclBhbmVsLmJlZ2luVXBkYXRlcygpOwotICAgIH0sCi0KLSAgICBlbmRVcGRhdGVzOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9tYWluUGFuZWwuZW5kVXBkYXRlcygpOwotICAg
ICAgICB0aGlzLl9ndXR0ZXJQYW5lbC5lbmRVcGRhdGVzKCk7Ci0gICAgICAgIHRoaXMuX3VwZGF0
ZVBhbmVsT2Zmc2V0cygpOwotICAgIH0sCi0KLSAgICBvblJlc2l6ZTogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdGhpcy5fbWFpblBhbmVsLnJlc2l6ZSgpOwotICAgICAgICB0aGlzLl9ndXR0
ZXJQYW5lbC5yZXNpemUoKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlUGFuZWxPZmZzZXRzKCk7Ci0g
ICAgfSwKLQotICAgIF90ZXh0Q2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAg
ICBpZiAoIXRoaXMuX2ludGVybmFsVGV4dENoYW5nZU1vZGUpCi0gICAgICAgICAgICB0aGlzLl90
ZXh0TW9kZWwucmVzZXRVbmRvU3RhY2soKTsKLSAgICAgICAgdGhpcy5fbWFpblBhbmVsLnRleHRD
aGFuZ2VkKGV2ZW50LmRhdGEub2xkUmFuZ2UsIGV2ZW50LmRhdGEubmV3UmFuZ2UpOwotICAgICAg
ICB0aGlzLl9ndXR0ZXJQYW5lbC50ZXh0Q2hhbmdlZChldmVudC5kYXRhLm9sZFJhbmdlLCBldmVu
dC5kYXRhLm5ld1JhbmdlKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlUGFuZWxPZmZzZXRzKCk7Ci0g
ICAgfSwKLQotICAgIF9lbnRlckludGVybmFsVGV4dENoYW5nZU1vZGU6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX2ludGVybmFsVGV4dENoYW5nZU1vZGUgPSB0cnVlOwotICAgICAg
ICB0aGlzLl9kZWxlZ2F0ZS5iZWZvcmVUZXh0Q2hhbmdlZCgpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IG9sZFJhbmdlCi0gICAgICog
QHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSBuZXdSYW5nZQotICAgICAqLwotICAgIF9l
eGl0SW50ZXJuYWxUZXh0Q2hhbmdlTW9kZTogZnVuY3Rpb24ob2xkUmFuZ2UsIG5ld1JhbmdlKQot
ICAgIHsKLSAgICAgICAgdGhpcy5faW50ZXJuYWxUZXh0Q2hhbmdlTW9kZSA9IGZhbHNlOwotICAg
ICAgICB0aGlzLl9kZWxlZ2F0ZS5hZnRlclRleHRDaGFuZ2VkKG9sZFJhbmdlLCBuZXdSYW5nZSk7
Ci0gICAgfSwKLQotICAgIF91cGRhdGVQYW5lbE9mZnNldHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHZhciBsaW5lTnVtYmVyc1dpZHRoID0gdGhpcy5fZ3V0dGVyUGFuZWwuZWxlbWVudC5v
ZmZzZXRXaWR0aDsKLSAgICAgICAgaWYgKGxpbmVOdW1iZXJzV2lkdGgpCi0gICAgICAgICAgICB0
aGlzLl9tYWluUGFuZWwuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgibGVmdCIsIGxpbmVOdW1i
ZXJzV2lkdGggKyAicHgiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fbWFpblBh
bmVsLmVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoImxlZnQiKTsgLy8gVXNlIGRlZmF1bHQg
dmFsdWUgc2V0IGluIENTUy4KLSAgICB9LAotCi0gICAgX3N5bmNTY3JvbGw6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHZhciBtYWluRWxlbWVudCA9IHRoaXMuX21haW5QYW5lbC5lbGVtZW50
OwotICAgICAgICB2YXIgZ3V0dGVyRWxlbWVudCA9IHRoaXMuX2d1dHRlclBhbmVsLmVsZW1lbnQ7
Ci0gICAgICAgIC8vIEhhbmRsZSBob3Jpem9udGFsIHNjcm9sbCBiYXIgYXQgdGhlIGJvdHRvbSBv
ZiB0aGUgbWFpbiBwYW5lbC4KLSAgICAgICAgdGhpcy5fZ3V0dGVyUGFuZWwuc3luY0NsaWVudEhl
aWdodChtYWluRWxlbWVudC5jbGllbnRIZWlnaHQpOwotICAgICAgICBndXR0ZXJFbGVtZW50LnNj
cm9sbFRvcCA9IG1haW5FbGVtZW50LnNjcm9sbFRvcDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKi8KLSAgICBfc3luY0RlY29yYXRp
b25zRm9yTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmIChsaW5l
TnVtYmVyID49IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIHZhciBtYWluQ2h1bmsgPSB0aGlzLl9tYWluUGFuZWwuY2h1bmtGb3JMaW5l
KGxpbmVOdW1iZXIpOwotICAgICAgICBpZiAobWFpbkNodW5rLmxpbmVzQ291bnQgPT09IDEgJiYg
bWFpbkNodW5rLmRlY29yYXRlZCkgewotICAgICAgICAgICAgdmFyIGd1dHRlckNodW5rID0gdGhp
cy5fZ3V0dGVyUGFuZWwubWFrZUxpbmVBQ2h1bmsobGluZU51bWJlcik7Ci0gICAgICAgICAgICB2
YXIgaGVpZ2h0ID0gbWFpbkNodW5rLmhlaWdodDsKLSAgICAgICAgICAgIGlmIChoZWlnaHQpCi0g
ICAgICAgICAgICAgICAgZ3V0dGVyQ2h1bmsuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgiaGVp
Z2h0IiwgaGVpZ2h0ICsgInB4Iik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
Z3V0dGVyQ2h1bmsuZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgiaGVpZ2h0Iik7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YXIgZ3V0dGVyQ2h1bmsgPSB0aGlzLl9ndXR0ZXJQ
YW5lbC5jaHVua0ZvckxpbmUobGluZU51bWJlcik7Ci0gICAgICAgICAgICBpZiAoZ3V0dGVyQ2h1
bmsubGluZXNDb3VudCA9PT0gMSkKLSAgICAgICAgICAgICAgICBndXR0ZXJDaHVuay5lbGVtZW50
LnN0eWxlLnJlbW92ZVByb3BlcnR5KCJoZWlnaHQiKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGd1dHRlclJvdwotICAgICAqLwotICAgIF9z
eW5jTGluZUhlaWdodDogZnVuY3Rpb24oZ3V0dGVyUm93KQotICAgIHsKLSAgICAgICAgaWYgKHRo
aXMuX2xpbmVIZWlnaHRTeW5jZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChn
dXR0ZXJSb3cgJiYgZ3V0dGVyUm93Lm9mZnNldEhlaWdodCkgewotICAgICAgICAgICAgLy8gRm9y
Y2UgZXF1YWwgbGluZSBoZWlnaHRzIGZvciB0aGUgY2hpbGQgcGFuZWxzLgotICAgICAgICAgICAg
dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCJsaW5lLWhlaWdodCIsIGd1dHRlclJvdy5v
ZmZzZXRIZWlnaHQgKyAicHgiKTsKLSAgICAgICAgICAgIHRoaXMuX2xpbmVIZWlnaHRTeW5jZWQg
PSB0cnVlOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9yZWdpc3RlclNob3J0Y3V0czogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGtleXMgPSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRT
aG9ydGN1dC5LZXlzOwotICAgICAgICB2YXIgbW9kaWZpZXJzID0gV2ViSW5zcGVjdG9yLktleWJv
YXJkU2hvcnRjdXQuTW9kaWZpZXJzOwotCi0gICAgICAgIHRoaXMuX3Nob3J0Y3V0cyA9IHt9Owot
ICAgICAgICB2YXIgY29tbWl0RWRpdGluZyA9IHRoaXMuX2NvbW1pdEVkaXRpbmcuYmluZCh0aGlz
KTsKLSAgICAgICAgdGhpcy5fc2hvcnRjdXRzW1dlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0
Lm1ha2VLZXkoInMiLCBtb2RpZmllcnMuQ3RybE9yTWV0YSldID0gY29tbWl0RWRpdGluZzsKLQot
ICAgICAgICB2YXIgaGFuZGxlRW50ZXJLZXkgPSB0aGlzLl9tYWluUGFuZWwuaGFuZGxlRW50ZXJL
ZXkuYmluZCh0aGlzLl9tYWluUGFuZWwpOwotICAgICAgICB0aGlzLl9zaG9ydGN1dHNbV2ViSW5z
cGVjdG9yLktleWJvYXJkU2hvcnRjdXQubWFrZUtleShrZXlzLkVudGVyLmNvZGUsIFdlYkluc3Bl
Y3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVycy5Ob25lKV0gPSBoYW5kbGVFbnRlcktleTsK
LQotICAgICAgICB2YXIgaGFuZGxlVW5kbyA9IHRoaXMuX21haW5QYW5lbC5oYW5kbGVVbmRvUmVk
by5iaW5kKHRoaXMuX21haW5QYW5lbCwgZmFsc2UpOwotICAgICAgICB2YXIgaGFuZGxlUmVkbyA9
IHRoaXMuX21haW5QYW5lbC5oYW5kbGVVbmRvUmVkby5iaW5kKHRoaXMuX21haW5QYW5lbCwgdHJ1
ZSk7Ci0gICAgICAgIHRoaXMuX3Nob3J0Y3V0c1tXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1
dC5tYWtlS2V5KCJ6IiwgbW9kaWZpZXJzLkN0cmxPck1ldGEpXSA9IGhhbmRsZVVuZG87Ci0gICAg
ICAgIHRoaXMuX3Nob3J0Y3V0c1tXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5
KCJ6IiwgbW9kaWZpZXJzLlNoaWZ0IHwgbW9kaWZpZXJzLkN0cmxPck1ldGEpXSA9IGhhbmRsZVJl
ZG87Ci0KLSAgICAgICAgdmFyIGhhbmRsZVRhYktleSA9IHRoaXMuX21haW5QYW5lbC5oYW5kbGVU
YWJLZXlQcmVzcy5iaW5kKHRoaXMuX21haW5QYW5lbCwgZmFsc2UpOwotICAgICAgICB2YXIgaGFu
ZGxlU2hpZnRUYWJLZXkgPSB0aGlzLl9tYWluUGFuZWwuaGFuZGxlVGFiS2V5UHJlc3MuYmluZCh0
aGlzLl9tYWluUGFuZWwsIHRydWUpOwotICAgICAgICB0aGlzLl9zaG9ydGN1dHNbV2ViSW5zcGVj
dG9yLktleWJvYXJkU2hvcnRjdXQubWFrZUtleShrZXlzLlRhYi5jb2RlKV0gPSBoYW5kbGVUYWJL
ZXk7Ci0gICAgICAgIHRoaXMuX3Nob3J0Y3V0c1tXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1
dC5tYWtlS2V5KGtleXMuVGFiLmNvZGUsIG1vZGlmaWVycy5TaGlmdCldID0gaGFuZGxlU2hpZnRU
YWJLZXk7Ci0gICAgfSwKLQotICAgIF9oYW5kbGVLZXlEb3duOiBmdW5jdGlvbihlKQotICAgIHsK
LSAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICB2YXIgc2hvcnRjdXRLZXkgPSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtl
S2V5RnJvbUV2ZW50KGUpOwotICAgICAgICB2YXIgaGFuZGxlciA9IHRoaXMuX3Nob3J0Y3V0c1tz
aG9ydGN1dEtleV07Ci0gICAgICAgIGlmIChoYW5kbGVyICYmIGhhbmRsZXIoKSkKLSAgICAgICAg
ICAgIGUuY29uc3VtZSh0cnVlKTsKLSAgICB9LAotCi0gICAgX2NvbnRleHRNZW51OiBmdW5jdGlv
bihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0
b3IuQ29udGV4dE1lbnUoKTsKLSAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldC5lbmNs
b3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3ZWJraXQtbGluZS1udW1iZXIiKTsKLSAgICAgICAg
aWYgKHRhcmdldCkKLSAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLnBvcHVsYXRlTGluZUd1dHRl
ckNvbnRleHRNZW51KGNvbnRleHRNZW51LCB0YXJnZXQubGluZU51bWJlcik7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fbWFpblBhbmVsLl9lbmNsb3NpbmdMaW5l
Um93T3JTZWxmKGV2ZW50LnRhcmdldCk7Ci0gICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5wb3B1
bGF0ZVRleHRBcmVhQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIHRhcmdldCAmJiB0YXJnZXQubGlu
ZU51bWJlcik7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGV4dE1lbnUuc2hvdyhldmVudCk7Ci0g
ICAgfSwKLQotICAgIF9jb21taXRFZGl0aW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBp
ZiAodGhpcy5yZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IHRoaXMuX2RlbGVnYXRlLmNvbW1pdEVkaXRpbmcoKTsKLSAgICAgICAgaWYgKHRoaXMuX3VybCAm
JiBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIuaXNVUkxTYXZlZCh0aGlzLl91cmwpKQotICAgICAg
ICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLnNhdmUodGhpcy5fdXJsLCB0aGlzLl90ZXh0
TW9kZWwudGV4dCwgZmFsc2UpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0KLSAgICAgKi8KLSAg
ICBzZWxlY3Rpb246IGZ1bmN0aW9uKHRleHRSYW5nZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
aGlzLl9tYWluUGFuZWwuX2dldFNlbGVjdGlvbigpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IHRleHRSYW5nZQotICAgICAqLwotICAg
IHNldFNlbGVjdGlvbjogZnVuY3Rpb24odGV4dFJhbmdlKQotICAgIHsKLSAgICAgICAgdGhpcy5f
bWFpblBhbmVsLl9yZXN0b3JlU2VsZWN0aW9uKHRleHRSYW5nZSk7Ci0gICAgfSwKLQotICAgIHdh
c1Nob3duOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMucmVhZE9ubHkoKSkK
LSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5tYXJrQmVpbmdFZGl0ZWQodGhpcy5lbGVtZW50LCB0
cnVlKTsKLSAgICB9LAotCi0gICAgd2lsbEhpZGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IGlmICghdGhpcy5yZWFkT25seSgpKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLm1hcmtCZWlu
Z0VkaXRlZCh0aGlzLmVsZW1lbnQsIGZhbHNlKTsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5U
ZXh0Vmlld2VyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5
cGU7Ci0KLS8qKgotICogQGludGVyZmFjZQotICovCi1XZWJJbnNwZWN0b3IuVGV4dFZpZXdlckRl
bGVnYXRlID0gZnVuY3Rpb24oKQotewotfQotCi1XZWJJbnNwZWN0b3IuVGV4dFZpZXdlckRlbGVn
YXRlLnByb3RvdHlwZSA9IHsKLSAgICBiZWZvcmVUZXh0Q2hhbmdlZDogZnVuY3Rpb24oKSB7IH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IG9sZFJh
bmdlCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSBuZXdSYW5nZQotICAg
ICAqLwotICAgIGFmdGVyVGV4dENoYW5nZWQ6IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSkg
eyB9LAotCi0gICAgY29tbWl0RWRpdGluZzogZnVuY3Rpb24oKSB7IH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Db250ZXh0TWVudX0gY29udGV4dE1lbnUKLSAgICAg
KiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqLwotICAgIHBvcHVsYXRlTGluZUd1
dHRlckNvbnRleHRNZW51OiBmdW5jdGlvbihjb250ZXh0TWVudSwgbGluZU51bWJlcikgeyB9LAot
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnV9IGNvbnRl
eHRNZW51Ci0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKi8KLSAgICBw
b3B1bGF0ZVRleHRBcmVhQ29udGV4dE1lbnU6IGZ1bmN0aW9uKGNvbnRleHRNZW51LCBsaW5lTnVt
YmVyKSB7IH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNb2RlbH0gdGV4dE1vZGVsCi0gKi8KLVdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yQ2h1bmtlZFBhbmVsID0gZnVuY3Rpb24odGV4dE1vZGVsKQotewotICAgIHRoaXMuX3RleHRN
b2RlbCA9IHRleHRNb2RlbDsKLQotICAgIHRoaXMuX2RlZmF1bHRDaHVua1NpemUgPSA1MDsKLSAg
ICB0aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbCA9IDA7Ci0gICAgdGhpcy5fZG9tVXBkYXRlQ29h
bGVzY2luZ0xldmVsID0gMDsKLX0KLQotV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFu
ZWwucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5U
ZXh0RWRpdG9yTW9kZWx9Ci0gICAgICovCi0gICAgZ2V0IHRleHRNb2RlbCgpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fdGV4dE1vZGVsOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqLwotICAgIHJldmVhbExpbmU6IGZ1bmN0
aW9uKGxpbmVOdW1iZXIpCi0gICAgewotICAgICAgICBpZiAobGluZU51bWJlciA+PSB0aGlzLl90
ZXh0TW9kZWwubGluZXNDb3VudCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIg
Y2h1bmsgPSB0aGlzLm1ha2VMaW5lQUNodW5rKGxpbmVOdW1iZXIpOwotICAgICAgICBjaHVuay5l
bGVtZW50LnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcGFyYW0ge3N0cmluZ3xFbGVt
ZW50fSBkZWNvcmF0aW9uCi0gICAgICovCi0gICAgYWRkRGVjb3JhdGlvbjogZnVuY3Rpb24obGlu
ZU51bWJlciwgZGVjb3JhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmIChsaW5lTnVtYmVyID49IHRo
aXMuX3RleHRNb2RlbC5saW5lc0NvdW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IHZhciBjaHVuayA9IHRoaXMubWFrZUxpbmVBQ2h1bmsobGluZU51bWJlcik7Ci0gICAgICAgIGNo
dW5rLmFkZERlY29yYXRpb24oZGVjb3JhdGlvbik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtzdHJpbmd8RWxlbWVu
dH0gZGVjb3JhdGlvbgotICAgICAqLwotICAgIHJlbW92ZURlY29yYXRpb246IGZ1bmN0aW9uKGxp
bmVOdW1iZXIsIGRlY29yYXRpb24pCi0gICAgewotICAgICAgICBpZiAobGluZU51bWJlciA+PSB0
aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICB2YXIgY2h1bmsgPSB0aGlzLmNodW5rRm9yTGluZShsaW5lTnVtYmVyKTsKLSAgICAgICAgY2h1
bmsucmVtb3ZlRGVjb3JhdGlvbihkZWNvcmF0aW9uKTsKLSAgICB9LAotCi0gICAgX2J1aWxkQ2h1
bmtzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLmJlZ2luRG9tVXBkYXRlcygpOwot
Ci0gICAgICAgIHRoaXMuX2NvbnRhaW5lci5yZW1vdmVDaGlsZHJlbigpOwotCi0gICAgICAgIHRo
aXMuX3RleHRDaHVua3MgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90
ZXh0TW9kZWwubGluZXNDb3VudDsgaSArPSB0aGlzLl9kZWZhdWx0Q2h1bmtTaXplKSB7Ci0gICAg
ICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9jcmVhdGVOZXdDaHVuayhpLCBpICsgdGhpcy5fZGVm
YXVsdENodW5rU2l6ZSk7Ci0gICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnB1c2goY2h1bmsp
OwotICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGNodW5rLmVsZW1lbnQp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOwotCi0gICAgICAgIHRo
aXMuZW5kRG9tVXBkYXRlcygpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251
bWJlcn0gbGluZU51bWJlcgotICAgICAqLwotICAgIG1ha2VMaW5lQUNodW5rOiBmdW5jdGlvbihs
aW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgdmFyIGNodW5rTnVtYmVyID0gdGhpcy5fY2h1bmtO
dW1iZXJGb3JMaW5lKGxpbmVOdW1iZXIpOwotICAgICAgICB2YXIgb2xkQ2h1bmsgPSB0aGlzLl90
ZXh0Q2h1bmtzW2NodW5rTnVtYmVyXTsKLQotICAgICAgICBpZiAoIW9sZENodW5rKSB7Ci0gICAg
ICAgICAgICBjb25zb2xlLmVycm9yKCJObyBjaHVuayBmb3IgbGluZSBudW1iZXI6ICIgKyBsaW5l
TnVtYmVyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChv
bGRDaHVuay5saW5lc0NvdW50ID09PSAxKQotICAgICAgICAgICAgcmV0dXJuIG9sZENodW5rOwot
Ci0gICAgICAgIHJldHVybiB0aGlzLl9zcGxpdENodW5rT25BTGluZShsaW5lTnVtYmVyLCBjaHVu
a051bWJlciwgdHJ1ZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVy
fSBsaW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGNodW5rTnVtYmVyCi0gICAgICog
QHBhcmFtIHtib29sZWFuPX0gY3JlYXRlU3VmZml4Q2h1bmsKLSAgICAgKi8KLSAgICBfc3BsaXRD
aHVua09uQUxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNodW5rTnVtYmVyLCBjcmVhdGVTdWZm
aXhDaHVuaykKLSAgICB7Ci0gICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVzKCk7Ci0KLSAgICAg
ICAgdmFyIG9sZENodW5rID0gdGhpcy5fdGV4dENodW5rc1tjaHVua051bWJlcl07Ci0gICAgICAg
IHZhciB3YXNFeHBhbmRlZCA9IG9sZENodW5rLmV4cGFuZGVkOwotICAgICAgICBvbGRDaHVuay5l
eHBhbmRlZCA9IGZhbHNlOwotCi0gICAgICAgIHZhciBpbnNlcnRJbmRleCA9IGNodW5rTnVtYmVy
ICsgMTsKLQotICAgICAgICAvLyBQcmVmaXggY2h1bmsuCi0gICAgICAgIGlmIChsaW5lTnVtYmVy
ID4gb2xkQ2h1bmsuc3RhcnRMaW5lKSB7Ci0gICAgICAgICAgICB2YXIgcHJlZml4Q2h1bmsgPSB0
aGlzLl9jcmVhdGVOZXdDaHVuayhvbGRDaHVuay5zdGFydExpbmUsIGxpbmVOdW1iZXIpOwotICAg
ICAgICAgICAgcHJlZml4Q2h1bmsucmVhZE9ubHkgPSBvbGRDaHVuay5yZWFkT25seTsKLSAgICAg
ICAgICAgIHRoaXMuX3RleHRDaHVua3Muc3BsaWNlKGluc2VydEluZGV4KyssIDAsIHByZWZpeENo
dW5rKTsKLSAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5pbnNlcnRCZWZvcmUocHJlZml4Q2h1
bmsuZWxlbWVudCwgb2xkQ2h1bmsuZWxlbWVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBM
aW5lIGNodW5rLgotICAgICAgICB2YXIgZW5kTGluZSA9IGNyZWF0ZVN1ZmZpeENodW5rID8gbGlu
ZU51bWJlciArIDEgOiBvbGRDaHVuay5zdGFydExpbmUgKyBvbGRDaHVuay5saW5lc0NvdW50Owot
ICAgICAgICB2YXIgbGluZUNodW5rID0gdGhpcy5fY3JlYXRlTmV3Q2h1bmsobGluZU51bWJlciwg
ZW5kTGluZSk7Ci0gICAgICAgIGxpbmVDaHVuay5yZWFkT25seSA9IG9sZENodW5rLnJlYWRPbmx5
OwotICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnNwbGljZShpbnNlcnRJbmRleCsrLCAwLCBsaW5l
Q2h1bmspOwotICAgICAgICB0aGlzLl9jb250YWluZXIuaW5zZXJ0QmVmb3JlKGxpbmVDaHVuay5l
bGVtZW50LCBvbGRDaHVuay5lbGVtZW50KTsKLQotICAgICAgICAvLyBTdWZmaXggY2h1bmsuCi0g
ICAgICAgIGlmIChvbGRDaHVuay5zdGFydExpbmUgKyBvbGRDaHVuay5saW5lc0NvdW50ID4gZW5k
TGluZSkgewotICAgICAgICAgICAgdmFyIHN1ZmZpeENodW5rID0gdGhpcy5fY3JlYXRlTmV3Q2h1
bmsoZW5kTGluZSwgb2xkQ2h1bmsuc3RhcnRMaW5lICsgb2xkQ2h1bmsubGluZXNDb3VudCk7Ci0g
ICAgICAgICAgICBzdWZmaXhDaHVuay5yZWFkT25seSA9IG9sZENodW5rLnJlYWRPbmx5OwotICAg
ICAgICAgICAgdGhpcy5fdGV4dENodW5rcy5zcGxpY2UoaW5zZXJ0SW5kZXgsIDAsIHN1ZmZpeENo
dW5rKTsKLSAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5pbnNlcnRCZWZvcmUoc3VmZml4Q2h1
bmsuZWxlbWVudCwgb2xkQ2h1bmsuZWxlbWVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBS
ZW1vdmUgZW5jbG9zaW5nIGNodW5rLgotICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnNwbGljZShj
aHVua051bWJlciwgMSk7Ci0gICAgICAgIHRoaXMuX2NvbnRhaW5lci5yZW1vdmVDaGlsZChvbGRD
aHVuay5lbGVtZW50KTsKLQotICAgICAgICBpZiAod2FzRXhwYW5kZWQpIHsKLSAgICAgICAgICAg
IGlmIChwcmVmaXhDaHVuaykKLSAgICAgICAgICAgICAgICBwcmVmaXhDaHVuay5leHBhbmRlZCA9
IHRydWU7Ci0gICAgICAgICAgICBsaW5lQ2h1bmsuZXhwYW5kZWQgPSB0cnVlOwotICAgICAgICAg
ICAgaWYgKHN1ZmZpeENodW5rKQotICAgICAgICAgICAgICAgIHN1ZmZpeENodW5rLmV4cGFuZGVk
ID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuZW5kRG9tVXBkYXRlcygpOwotCi0g
ICAgICAgIHJldHVybiBsaW5lQ2h1bms7Ci0gICAgfSwKLQotICAgIF9zY3JvbGw6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBSZXBsYWNlIHRoZSAiMiIgd2l0aCB0aGUgcGFk
ZGluZy1sZWZ0IHZhbHVlIGZyb20gQ1NTLgotICAgICAgICBpZiAodGhpcy5lbGVtZW50LnNjcm9s
bExlZnQgPD0gMikKLSAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0ID0gMDsKLQot
ICAgICAgICB0aGlzLl9zY2hlZHVsZVJlcGFpbnRBbGwoKTsKLSAgICAgICAgaWYgKHRoaXMuX3N5
bmNTY3JvbGxMaXN0ZW5lcikKLSAgICAgICAgICAgIHRoaXMuX3N5bmNTY3JvbGxMaXN0ZW5lcigp
OwotICAgIH0sCi0KLSAgICBfc2NoZWR1bGVSZXBhaW50QWxsOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBpZiAodGhpcy5fcmVwYWludEFsbFRpbWVyKQotICAgICAgICAgICAgY2xlYXJUaW1l
b3V0KHRoaXMuX3JlcGFpbnRBbGxUaW1lcik7Ci0gICAgICAgIHRoaXMuX3JlcGFpbnRBbGxUaW1l
ciA9IHNldFRpbWVvdXQodGhpcy5fcmVwYWludEFsbC5iaW5kKHRoaXMpLCA1MCk7Ci0gICAgfSwK
LQotICAgIGJlZ2luVXBkYXRlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcGFp
bnRDb2FsZXNjaW5nTGV2ZWwrKzsKLSAgICB9LAotCi0gICAgZW5kVXBkYXRlczogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgdGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwtLTsKLSAgICAgICAg
aWYgKCF0aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbCkKLSAgICAgICAgICAgIHRoaXMuX3JlcGFp
bnRBbGwoKTsKLSAgICB9LAotCi0gICAgYmVnaW5Eb21VcGRhdGVzOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICB0aGlzLl9kb21VcGRhdGVDb2FsZXNjaW5nTGV2ZWwrKzsKLSAgICB9LAotCi0g
ICAgZW5kRG9tVXBkYXRlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fZG9tVXBk
YXRlQ29hbGVzY2luZ0xldmVsLS07Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICovCi0gICAgX2NodW5rTnVtYmVyRm9yTGluZTogZnVu
Y3Rpb24obGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVMaW5lTnVt
YmVycyh2YWx1ZSwgY2h1bmspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZSA8
IGNodW5rLnN0YXJ0TGluZSA/IC0xIDogMTsKLSAgICAgICAgfQotICAgICAgICB2YXIgaW5zZXJ0
QmVmb3JlID0gaW5zZXJ0aW9uSW5kZXhGb3JPYmplY3RJbkxpc3RTb3J0ZWRCeUZ1bmN0aW9uKGxp
bmVOdW1iZXIsIHRoaXMuX3RleHRDaHVua3MsIGNvbXBhcmVMaW5lTnVtYmVycyk7Ci0gICAgICAg
IHJldHVybiBpbnNlcnRCZWZvcmUgLSAxOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqLwotICAgIGNodW5rRm9yTGluZTogZnVuY3Rp
b24obGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl90ZXh0Q2h1bmtzW3Ro
aXMuX2NodW5rTnVtYmVyRm9yTGluZShsaW5lTnVtYmVyKV07Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2aXNpYmxlRnJvbQotICAgICAqLwotICAgIF9maW5kRmly
c3RWaXNpYmxlQ2h1bmtOdW1iZXI6IGZ1bmN0aW9uKHZpc2libGVGcm9tKQotICAgIHsKLSAgICAg
ICAgZnVuY3Rpb24gY29tcGFyZU9mZnNldFRvcHModmFsdWUsIGNodW5rKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gdmFsdWUgPCBjaHVuay5vZmZzZXRUb3AgPyAtMSA6IDE7Ci0gICAg
ICAgIH0KLSAgICAgICAgdmFyIGluc2VydEJlZm9yZSA9IGluc2VydGlvbkluZGV4Rm9yT2JqZWN0
SW5MaXN0U29ydGVkQnlGdW5jdGlvbih2aXNpYmxlRnJvbSwgdGhpcy5fdGV4dENodW5rcywgY29t
cGFyZU9mZnNldFRvcHMpOwotICAgICAgICByZXR1cm4gaW5zZXJ0QmVmb3JlIC0gMTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHZpc2libGVGcm9tCi0gICAgICog
QHBhcmFtIHtudW1iZXJ9IHZpc2libGVUbwotICAgICAqLwotICAgIF9maW5kVmlzaWJsZUNodW5r
czogZnVuY3Rpb24odmlzaWJsZUZyb20sIHZpc2libGVUbykKLSAgICB7Ci0gICAgICAgIHZhciBm
cm9tID0gdGhpcy5fZmluZEZpcnN0VmlzaWJsZUNodW5rTnVtYmVyKHZpc2libGVGcm9tKTsKLSAg
ICAgICAgZm9yICh2YXIgdG8gPSBmcm9tICsgMTsgdG8gPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0
aDsgKyt0bykgewotICAgICAgICAgICAgaWYgKHRoaXMuX3RleHRDaHVua3NbdG9dLm9mZnNldFRv
cCA+PSB2aXNpYmxlVG8pCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHsgc3RhcnQ6IGZyb20sIGVuZDogdG8gfTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtudW1iZXJ9IHZpc2libGVGcm9tCi0gICAgICovCi0gICAgX2ZpbmRGaXJz
dFZpc2libGVMaW5lTnVtYmVyOiBmdW5jdGlvbih2aXNpYmxlRnJvbSkKLSAgICB7Ci0gICAgICAg
IHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbdGhpcy5fZmluZEZpcnN0VmlzaWJsZUNodW5r
TnVtYmVyKHZpc2libGVGcm9tKV07Ci0gICAgICAgIGlmICghY2h1bmsuZXhwYW5kZWQpCi0gICAg
ICAgICAgICByZXR1cm4gY2h1bmsuc3RhcnRMaW5lOwotCi0gICAgICAgIHZhciBsaW5lTnVtYmVy
cyA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNodW5rLmxpbmVzQ291bnQ7ICsr
aSkgewotICAgICAgICAgICAgbGluZU51bWJlcnMucHVzaChjaHVuay5zdGFydExpbmUgKyBpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVMaW5lUm93T2Zmc2V0VG9wcyh2
YWx1ZSwgbGluZU51bWJlcikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSBj
aHVuay5nZXRFeHBhbmRlZExpbmVSb3cobGluZU51bWJlcik7Ci0gICAgICAgICAgICByZXR1cm4g
dmFsdWUgPCBsaW5lUm93Lm9mZnNldFRvcCA/IC0xIDogMTsKLSAgICAgICAgfQotICAgICAgICB2
YXIgaW5zZXJ0QmVmb3JlID0gaW5zZXJ0aW9uSW5kZXhGb3JPYmplY3RJbkxpc3RTb3J0ZWRCeUZ1
bmN0aW9uKHZpc2libGVGcm9tLCBsaW5lTnVtYmVycywgY29tcGFyZUxpbmVSb3dPZmZzZXRUb3Bz
KTsKLSAgICAgICAgcmV0dXJuIGxpbmVOdW1iZXJzW2luc2VydEJlZm9yZSAtIDFdOwotICAgIH0s
Ci0KLSAgICBfcmVwYWludEFsbDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZGVsZXRlIHRo
aXMuX3JlcGFpbnRBbGxUaW1lcjsKLQotICAgICAgICBpZiAodGhpcy5fcGFpbnRDb2FsZXNjaW5n
TGV2ZWwgfHwgdGhpcy5fZGlydHlMaW5lcykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICB2YXIgdmlzaWJsZUZyb20gPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wOwotICAgICAgICB2YXIg
dmlzaWJsZVRvID0gdGhpcy5lbGVtZW50LnNjcm9sbFRvcCArIHRoaXMuZWxlbWVudC5jbGllbnRI
ZWlnaHQ7Ci0KLSAgICAgICAgaWYgKHZpc2libGVUbykgewotICAgICAgICAgICAgdmFyIHJlc3Vs
dCA9IHRoaXMuX2ZpbmRWaXNpYmxlQ2h1bmtzKHZpc2libGVGcm9tLCB2aXNpYmxlVG8pOwotICAg
ICAgICAgICAgdGhpcy5fZXhwYW5kQ2h1bmtzKHJlc3VsdC5zdGFydCwgcmVzdWx0LmVuZCk7Ci0g
ICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21J
bmRleAotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b0luZGV4Ci0gICAgICovCi0gICAgX2V4cGFu
ZENodW5rczogZnVuY3Rpb24oZnJvbUluZGV4LCB0b0luZGV4KQotICAgIHsKLSAgICAgICAgLy8g
Rmlyc3QgY29sbGFwc2UgY2h1bmtzIHRvIGNvbGxlY3QgdGhlIERPTSBlbGVtZW50cyBpbnRvIGEg
Y2FjaGUgdG8gcmV1c2UgdGhlbSBsYXRlci4KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBm
cm9tSW5kZXg7ICsraSkKLSAgICAgICAgICAgIHRoaXMuX3RleHRDaHVua3NbaV0uZXhwYW5kZWQg
PSBmYWxzZTsKLSAgICAgICAgZm9yICh2YXIgaSA9IHRvSW5kZXg7IGkgPCB0aGlzLl90ZXh0Q2h1
bmtzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rc1tpXS5leHBhbmRl
ZCA9IGZhbHNlOwotICAgICAgICBmb3IgKHZhciBpID0gZnJvbUluZGV4OyBpIDwgdG9JbmRleDsg
KytpKQotICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rc1tpXS5leHBhbmRlZCA9IHRydWU7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZmlyc3RFbGVtZW50Ci0g
ICAgICogQHBhcmFtIHtFbGVtZW50PX0gbGFzdEVsZW1lbnQKLSAgICAgKi8KLSAgICBfdG90YWxI
ZWlnaHQ6IGZ1bmN0aW9uKGZpcnN0RWxlbWVudCwgbGFzdEVsZW1lbnQpCi0gICAgewotICAgICAg
ICBsYXN0RWxlbWVudCA9IChsYXN0RWxlbWVudCB8fCBmaXJzdEVsZW1lbnQpLm5leHRFbGVtZW50
U2libGluZzsKLSAgICAgICAgaWYgKGxhc3RFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIGxh
c3RFbGVtZW50Lm9mZnNldFRvcCAtIGZpcnN0RWxlbWVudC5vZmZzZXRUb3A7Ci0KLSAgICAgICAg
dmFyIG9mZnNldFBhcmVudCA9IGZpcnN0RWxlbWVudC5vZmZzZXRQYXJlbnQ7Ci0gICAgICAgIGlm
IChvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0UGFyZW50LnNjcm9sbEhlaWdodCA+IG9mZnNldFBhcmVu
dC5jbGllbnRIZWlnaHQpCi0gICAgICAgICAgICByZXR1cm4gb2Zmc2V0UGFyZW50LnNjcm9sbEhl
aWdodCAtIGZpcnN0RWxlbWVudC5vZmZzZXRUb3A7Ci0KLSAgICAgICAgdmFyIHRvdGFsID0gMDsK
LSAgICAgICAgd2hpbGUgKGZpcnN0RWxlbWVudCAmJiBmaXJzdEVsZW1lbnQgIT09IGxhc3RFbGVt
ZW50KSB7Ci0gICAgICAgICAgICB0b3RhbCArPSBmaXJzdEVsZW1lbnQub2Zmc2V0SGVpZ2h0Owot
ICAgICAgICAgICAgZmlyc3RFbGVtZW50ID0gZmlyc3RFbGVtZW50Lm5leHRFbGVtZW50U2libGlu
ZzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG90YWw7Ci0gICAgfSwKLQotICAgIHJlc2l6
ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOwotICAgIH0K
LX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvckNodW5rZWRQYW5lbH0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JN
b2RlbH0gdGV4dE1vZGVsCi0gKi8KLVdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFuZWwg
PSBmdW5jdGlvbih0ZXh0TW9kZWwsIHN5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lciwgc3lu
Y0xpbmVIZWlnaHRMaXN0ZW5lcikKLXsKLSAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5r
ZWRQYW5lbC5jYWxsKHRoaXMsIHRleHRNb2RlbCk7Ci0KLSAgICB0aGlzLl9zeW5jRGVjb3JhdGlv
bnNGb3JMaW5lTGlzdGVuZXIgPSBzeW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXI7Ci0gICAg
dGhpcy5fc3luY0xpbmVIZWlnaHRMaXN0ZW5lciA9IHN5bmNMaW5lSGVpZ2h0TGlzdGVuZXI7Ci0K
LSAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0
aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gInRleHQtZWRpdG9yLWxpbmVzIjsKLQotICAgIHRoaXMu
X2NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuX2Nv
bnRhaW5lci5jbGFzc05hbWUgPSAiaW5uZXItY29udGFpbmVyIjsKLSAgICB0aGlzLmVsZW1lbnQu
YXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKTsKLQotICAgIHRoaXMuZWxlbWVudC5hZGRFdmVu
dExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLl9zY3JvbGwuYmluZCh0aGlzKSwgZmFsc2UpOwotCi0g
ICAgdGhpcy5mcmVlQ2FjaGVkRWxlbWVudHMoKTsKLSAgICB0aGlzLl9idWlsZENodW5rcygpOwot
ICAgIHRoaXMuX2RlY29yYXRpb25zID0ge307Ci19Ci0KLVdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
R3V0dGVyUGFuZWwucHJvdG90eXBlID0gewotICAgIGZyZWVDYWNoZWRFbGVtZW50czogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fY2FjaGVkUm93cyA9IFtdOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRMaW5lCi0gICAgICogQHBhcmFtIHtu
dW1iZXJ9IGVuZExpbmUKLSAgICAgKi8KLSAgICBfY3JlYXRlTmV3Q2h1bms6IGZ1bmN0aW9uKHN0
YXJ0TGluZSwgZW5kTGluZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JHdXR0ZXJDaHVuayh0aGlzLCBzdGFydExpbmUsIGVuZExpbmUpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IG9sZFJh
bmdlCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSBuZXdSYW5nZQotICAg
ICAqLwotICAgIHRleHRDaGFuZ2VkOiBmdW5jdGlvbihvbGRSYW5nZSwgbmV3UmFuZ2UpCi0gICAg
ewotICAgICAgICB0aGlzLmJlZ2luRG9tVXBkYXRlcygpOwotCi0gICAgICAgIHZhciBsaW5lc0Rp
ZmYgPSBuZXdSYW5nZS5saW5lc0NvdW50IC0gb2xkUmFuZ2UubGluZXNDb3VudDsKLSAgICAgICAg
aWYgKGxpbmVzRGlmZikgewotICAgICAgICAgICAgLy8gUmVtb3ZlIG9sZCBjaHVua3MgKGlmIG5l
ZWRlZCkuCi0gICAgICAgICAgICBmb3IgKHZhciBjaHVua051bWJlciA9IHRoaXMuX3RleHRDaHVu
a3MubGVuZ3RoIC0gMTsgY2h1bmtOdW1iZXIgPj0gMCA7IC0tY2h1bmtOdW1iZXIpIHsKLSAgICAg
ICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVtYmVyXTsKLSAg
ICAgICAgICAgICAgICBpZiAoY2h1bmsuc3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3VudCA8PSB0
aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2h1bmsuZXhwYW5kZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB0
aGlzLl9jb250YWluZXIucmVtb3ZlQ2hpbGQoY2h1bmsuZWxlbWVudCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aCA9IGNodW5rTnVtYmVyICsgMTsK
LQotICAgICAgICAgICAgLy8gQWRkIG5ldyBjaHVua3MgKGlmIG5lZWRlZCkuCi0gICAgICAgICAg
ICB2YXIgdG90YWxMaW5lcyA9IDA7Ci0gICAgICAgICAgICBpZiAodGhpcy5fdGV4dENodW5rcy5s
ZW5ndGgpIHsKLSAgICAgICAgICAgICAgICB2YXIgbGFzdENodW5rID0gdGhpcy5fdGV4dENodW5r
c1t0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aCAtIDFdOwotICAgICAgICAgICAgICAgIHRvdGFsTGlu
ZXMgPSBsYXN0Q2h1bmsuc3RhcnRMaW5lICsgbGFzdENodW5rLmxpbmVzQ291bnQ7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSB0b3RhbExpbmVzOyBpIDwgdGhpcy5f
dGV4dE1vZGVsLmxpbmVzQ291bnQ7IGkgKz0gdGhpcy5fZGVmYXVsdENodW5rU2l6ZSkgewotICAg
ICAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX2NyZWF0ZU5ld0NodW5rKGksIGkgKyB0aGlz
Ll9kZWZhdWx0Q2h1bmtTaXplKTsKLSAgICAgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnB1
c2goY2h1bmspOwotICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChj
aHVuay5lbGVtZW50KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gU2hpZnQgZGVj
b3JhdGlvbnMgaWYgbmVjZXNzYXJ5Ci0gICAgICAgICAgICBmb3IgKHZhciBsaW5lTnVtYmVyIGlu
IHRoaXMuX2RlY29yYXRpb25zKSB7Ci0gICAgICAgICAgICAgICAgbGluZU51bWJlciA9IHBhcnNl
SW50KGxpbmVOdW1iZXIsIDEwKTsKLQotICAgICAgICAgICAgICAgIC8vIERvIG5vdCBtb3ZlIGRl
Y29yYXRpb25zIGJlZm9yZSB0aGUgc3RhcnQgcG9zaXRpb24uCi0gICAgICAgICAgICAgICAgaWYg
KGxpbmVOdW1iZXIgPCBvbGRSYW5nZS5zdGFydExpbmUpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIC8vIERlY29yYXRpb25zIGZvbGxvdyB0aGUgZmlyc3Qg
Y2hhcmFjdGVyIG9mIGxpbmUuCi0gICAgICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPT09IG9s
ZFJhbmdlLnN0YXJ0TGluZSAmJiBvbGRSYW5nZS5zdGFydENvbHVtbikKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICB2YXIgbGluZURlY29yYXRpb25zQ29w
eSA9IHRoaXMuX2RlY29yYXRpb25zW2xpbmVOdW1iZXJdLnNsaWNlKCk7Ci0gICAgICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lRGVjb3JhdGlvbnNDb3B5Lmxlbmd0aDsgKytpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBkZWNvcmF0aW9uID0gbGluZURlY29yYXRpb25zQ29w
eVtpXTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1i
ZXIsIGRlY29yYXRpb24pOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdCByZXN0b3Jl
IHRoZSBkZWNvcmF0aW9ucyBiZWZvcmUgdGhlIGVuZCBwb3NpdGlvbi4KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGxpbmVOdW1iZXIgPCBvbGRSYW5nZS5lbmRMaW5lKQotICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGREZWNvcmF0
aW9uKGxpbmVOdW1iZXIgKyBsaW5lc0RpZmYsIGRlY29yYXRpb24pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRGVjb3JhdGlvbnMgbWF5IGhhdmUgYmVlbiBy
ZW1vdmVkLCBzbyB3ZSBtYXkgaGF2ZSB0byBzeW5jIHRob3NlIGxpbmVzLgotICAgICAgICAgICAg
dmFyIGNodW5rTnVtYmVyID0gdGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5lKG5ld1JhbmdlLnN0YXJ0
TGluZSk7Ci0gICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVt
YmVyXTsKLSAgICAgICAgICAgIHdoaWxlIChjaHVuayAmJiBjaHVuay5zdGFydExpbmUgPD0gbmV3
UmFuZ2UuZW5kTGluZSkgewotICAgICAgICAgICAgICAgIGlmIChjaHVuay5saW5lc0NvdW50ID09
PSAxKQotICAgICAgICAgICAgICAgICAgICB0aGlzLl9zeW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlz
dGVuZXIoY2h1bmsuc3RhcnRMaW5lKTsKLSAgICAgICAgICAgICAgICBjaHVuayA9IHRoaXMuX3Rl
eHRDaHVua3NbKytjaHVua051bWJlcl07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICB0aGlzLmVuZERvbVVwZGF0ZXMoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtudW1iZXJ9IGNsaWVudEhlaWdodAotICAgICAqLwotICAgIHN5bmNDbGllbnRIZWlnaHQ6
IGZ1bmN0aW9uKGNsaWVudEhlaWdodCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLmVsZW1lbnQu
b2Zmc2V0SGVpZ2h0ID4gY2xpZW50SGVpZ2h0KQotICAgICAgICAgICAgdGhpcy5fY29udGFpbmVy
LnN0eWxlLnNldFByb3BlcnR5KCJwYWRkaW5nLWJvdHRvbSIsICh0aGlzLmVsZW1lbnQub2Zmc2V0
SGVpZ2h0IC0gY2xpZW50SGVpZ2h0KSArICJweCIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB0aGlzLl9jb250YWluZXIuc3R5bGUucmVtb3ZlUHJvcGVydHkoInBhZGRpbmctYm90dG9tIik7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0g
ICAgICogQHBhcmFtIHtzdHJpbmd8RWxlbWVudH0gZGVjb3JhdGlvbgotICAgICAqLwotICAgIGFk
ZERlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRpb24pCi0gICAgewotICAg
ICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuYWRkRGVj
b3JhdGlvbi5jYWxsKHRoaXMsIGxpbmVOdW1iZXIsIGRlY29yYXRpb24pOwotICAgICAgICB2YXIg
ZGVjb3JhdGlvbnMgPSB0aGlzLl9kZWNvcmF0aW9uc1tsaW5lTnVtYmVyXTsKLSAgICAgICAgaWYg
KCFkZWNvcmF0aW9ucykgewotICAgICAgICAgICAgZGVjb3JhdGlvbnMgPSBbXTsKLSAgICAgICAg
ICAgIHRoaXMuX2RlY29yYXRpb25zW2xpbmVOdW1iZXJdID0gZGVjb3JhdGlvbnM7Ci0gICAgICAg
IH0KLSAgICAgICAgZGVjb3JhdGlvbnMucHVzaChkZWNvcmF0aW9uKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcGFyYW0ge3N0
cmluZ3xFbGVtZW50fSBkZWNvcmF0aW9uCi0gICAgICovCi0gICAgcmVtb3ZlRGVjb3JhdGlvbjog
ZnVuY3Rpb24obGluZU51bWJlciwgZGVjb3JhdGlvbikKLSAgICB7Ci0gICAgICAgIFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5yZW1vdmVEZWNvcmF0aW9uLmNh
bGwodGhpcywgbGluZU51bWJlciwgZGVjb3JhdGlvbik7Ci0gICAgICAgIHZhciBkZWNvcmF0aW9u
cyA9IHRoaXMuX2RlY29yYXRpb25zW2xpbmVOdW1iZXJdOwotICAgICAgICBpZiAoZGVjb3JhdGlv
bnMpIHsKLSAgICAgICAgICAgIGRlY29yYXRpb25zLnJlbW92ZShkZWNvcmF0aW9uKTsKLSAgICAg
ICAgICAgIGlmICghZGVjb3JhdGlvbnMubGVuZ3RoKQotICAgICAgICAgICAgICAgIGRlbGV0ZSB0
aGlzLl9kZWNvcmF0aW9uc1tsaW5lTnVtYmVyXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbC5wcm90b3R5cGUuX19wcm90b19fID0gV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlOwotCi0vKioKLSAqIEBj
b25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rID0gZnVu
Y3Rpb24odGV4dFZpZXdlciwgc3RhcnRMaW5lLCBlbmRMaW5lKQotewotICAgIHRoaXMuX3RleHRW
aWV3ZXIgPSB0ZXh0Vmlld2VyOwotICAgIHRoaXMuX3RleHRNb2RlbCA9IHRleHRWaWV3ZXIuX3Rl
eHRNb2RlbDsKLQotICAgIHRoaXMuc3RhcnRMaW5lID0gc3RhcnRMaW5lOwotICAgIGVuZExpbmUg
PSBNYXRoLm1pbih0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCwgZW5kTGluZSk7Ci0gICAgdGhp
cy5saW5lc0NvdW50ID0gZW5kTGluZSAtIHN0YXJ0TGluZTsKLQotICAgIHRoaXMuX2V4cGFuZGVk
ID0gZmFsc2U7Ci0KLSAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKLSAgICB0aGlzLmVsZW1lbnQubGluZU51bWJlciA9IHN0YXJ0TGluZTsKLSAgICB0aGlz
LmVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLW51bWJlciI7Ci0KLSAgICBpZiAodGhp
cy5saW5lc0NvdW50ID09PSAxKSB7Ci0gICAgICAgIC8vIFNpbmdsZSBsaW5lIGNodW5rcyBhcmUg
dHlwaWNhbGx5IGNyZWF0ZWQgZm9yIGRlY29yYXRpb25zLiBIb3N0IGxpbmUgbnVtYmVyIGluCi0g
ICAgICAgIC8vIHRoZSBzdWItZWxlbWVudCBpbiBvcmRlciB0byBhbGxvdyBmbGV4aWJsZSBib3Jk
ZXIgLyBtYXJnaW4gbWFuYWdlbWVudC4KLSAgICAgICAgdmFyIGlubmVyU3BhbiA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgaW5uZXJTcGFuLmNsYXNzTmFtZSA9ICJ3
ZWJraXQtbGluZS1udW1iZXItaW5uZXIiOwotICAgICAgICBpbm5lclNwYW4udGV4dENvbnRlbnQg
PSBzdGFydExpbmUgKyAxOwotICAgICAgICB2YXIgb3V0ZXJTcGFuID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIG91dGVyU3Bhbi5jbGFzc05hbWUgPSAid2Via2l0LWxp
bmUtbnVtYmVyLW91dGVyIjsKLSAgICAgICAgb3V0ZXJTcGFuLmFwcGVuZENoaWxkKGlubmVyU3Bh
bik7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChvdXRlclNwYW4pOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHZhciBsaW5lTnVtYmVycyA9IFtdOwotICAgICAgICBmb3IgKHZhciBp
ID0gc3RhcnRMaW5lOyBpIDwgZW5kTGluZTsgKytpKQotICAgICAgICAgICAgbGluZU51bWJlcnMu
cHVzaChpICsgMSk7Ci0gICAgICAgIHRoaXMuZWxlbWVudC50ZXh0Q29udGVudCA9IGxpbmVOdW1i
ZXJzLmpvaW4oIlxuIik7Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRl
ckNodW5rLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGVj
b3JhdGlvbgotICAgICAqLwotICAgIGFkZERlY29yYXRpb246IGZ1bmN0aW9uKGRlY29yYXRpb24p
Ci0gICAgewotICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmJlZ2luRG9tVXBkYXRlcygpOwotICAg
ICAgICBpZiAodHlwZW9mIGRlY29yYXRpb24gPT09ICJzdHJpbmciKQotICAgICAgICAgICAgdGhp
cy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoZGVjb3JhdGlvbik7Ci0gICAgICAgIHRoaXMuX3RleHRW
aWV3ZXIuZW5kRG9tVXBkYXRlcygpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e3N0cmluZ30gZGVjb3JhdGlvbgotICAgICAqLwotICAgIHJlbW92ZURlY29yYXRpb246IGZ1bmN0
aW9uKGRlY29yYXRpb24pCi0gICAgewotICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmJlZ2luRG9t
VXBkYXRlcygpOwotICAgICAgICBpZiAodHlwZW9mIGRlY29yYXRpb24gPT09ICJzdHJpbmciKQot
ICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoZGVjb3JhdGlvbik7Ci0g
ICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuZW5kRG9tVXBkYXRlcygpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGdldCBleHBhbmRlZCgp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWQ7Ci0gICAgfSwKLQotICAgIHNl
dCBleHBhbmRlZChleHBhbmRlZCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLmxpbmVzQ291bnQg
PT09IDEpCi0gICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLl9zeW5jRGVjb3JhdGlvbnNGb3JM
aW5lTGlzdGVuZXIodGhpcy5zdGFydExpbmUpOwotCi0gICAgICAgIGlmICh0aGlzLl9leHBhbmRl
ZCA9PT0gZXhwYW5kZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fZXhw
YW5kZWQgPSBleHBhbmRlZDsKLQotICAgICAgICBpZiAodGhpcy5saW5lc0NvdW50ID09PSAxKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYmVnaW5Eb21V
cGRhdGVzKCk7Ci0KLSAgICAgICAgaWYgKGV4cGFuZGVkKSB7Ci0gICAgICAgICAgICB0aGlzLl9l
eHBhbmRlZExpbmVSb3dzID0gW107Ci0gICAgICAgICAgICB2YXIgcGFyZW50RWxlbWVudCA9IHRo
aXMuZWxlbWVudC5wYXJlbnRFbGVtZW50OwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMu
c3RhcnRMaW5lOyBpIDwgdGhpcy5zdGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQ7ICsraSkgewot
ICAgICAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fY3JlYXRlUm93KGkpOwotICAgICAg
ICAgICAgICAgIHBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGxpbmVSb3csIHRoaXMuZWxlbWVu
dCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5wdXNoKGxpbmVSb3cp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0
aGlzLmVsZW1lbnQpOwotICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5fc3luY0xpbmVIZWln
aHRMaXN0ZW5lcih0aGlzLl9leHBhbmRlZExpbmVSb3dzWzBdKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIHZhciBlbGVtZW50SW5zZXJ0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5sZW5ndGg7ICsraSkgewot
ICAgICAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fZXhwYW5kZWRMaW5lUm93c1tpXTsK
LSAgICAgICAgICAgICAgICB2YXIgcGFyZW50RWxlbWVudCA9IGxpbmVSb3cucGFyZW50RWxlbWVu
dDsKLSAgICAgICAgICAgICAgICBpZiAocGFyZW50RWxlbWVudCkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWVsZW1lbnRJbnNlcnRlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bWVudEluc2VydGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1l
bnQuaW5zZXJ0QmVmb3JlKHRoaXMuZWxlbWVudCwgbGluZVJvdyk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChsaW5l
Um93KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdl
ci5fY2FjaGVkUm93cy5wdXNoKGxpbmVSb3cpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuX2V4cGFuZGVkTGluZVJvd3M7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlz
Ll90ZXh0Vmlld2VyLmVuZERvbVVwZGF0ZXMoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIGdldCBoZWlnaHQoKQotICAgIHsKLSAgICAg
ICAgaWYgKCF0aGlzLl9leHBhbmRlZExpbmVSb3dzKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X3RleHRWaWV3ZXIuX3RvdGFsSGVpZ2h0KHRoaXMuZWxlbWVudCk7Ci0gICAgICAgIHJldHVybiB0
aGlzLl90ZXh0Vmlld2VyLl90b3RhbEhlaWdodCh0aGlzLl9leHBhbmRlZExpbmVSb3dzWzBdLCB0
aGlzLl9leHBhbmRlZExpbmVSb3dzW3RoaXMuX2V4cGFuZGVkTGluZVJvd3MubGVuZ3RoIC0gMV0p
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0g
ICAgZ2V0IG9mZnNldFRvcCgpCi0gICAgewotICAgICAgICByZXR1cm4gKHRoaXMuX2V4cGFuZGVk
TGluZVJvd3MgJiYgdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5sZW5ndGgpID8gdGhpcy5fZXhwYW5k
ZWRMaW5lUm93c1swXS5vZmZzZXRUb3AgOiB0aGlzLmVsZW1lbnQub2Zmc2V0VG9wOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBy
ZXR1cm4ge0VsZW1lbnR9Ci0gICAgICovCi0gICAgX2NyZWF0ZVJvdzogZnVuY3Rpb24obGluZU51
bWJlcikKLSAgICB7Ci0gICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fdGV4dFZpZXdlci5fY2Fj
aGVkUm93cy5wb3AoKSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAg
bGluZVJvdy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAgICAgICAgbGluZVJvdy5jbGFzc05h
bWUgPSAid2Via2l0LWxpbmUtbnVtYmVyIjsKLSAgICAgICAgbGluZVJvdy50ZXh0Q29udGVudCA9
IGxpbmVOdW1iZXIgKyAxOwotICAgICAgICByZXR1cm4gbGluZVJvdzsKLSAgICB9Ci19Ci0KLS8q
KgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JD
aHVua2VkUGFuZWx9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTW9kZWx9IHRl
eHRNb2RlbAotICogQHBhcmFtIHs/c3RyaW5nfSB1cmwKLSAqLwotV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3JNYWluUGFuZWwgPSBmdW5jdGlvbih0ZXh0TW9kZWwsIHVybCwgc3luY1Njcm9sbExpc3Rl
bmVyLCBzeW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIsIGVudGVyVGV4dENoYW5nZU1vZGUs
IGV4aXRUZXh0Q2hhbmdlTW9kZSkKLXsKLSAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5r
ZWRQYW5lbC5jYWxsKHRoaXMsIHRleHRNb2RlbCk7Ci0KLSAgICB0aGlzLl9zeW5jU2Nyb2xsTGlz
dGVuZXIgPSBzeW5jU2Nyb2xsTGlzdGVuZXI7Ci0gICAgdGhpcy5fc3luY0RlY29yYXRpb25zRm9y
TGluZUxpc3RlbmVyID0gc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyOwotICAgIHRoaXMu
X2VudGVyVGV4dENoYW5nZU1vZGUgPSBlbnRlclRleHRDaGFuZ2VNb2RlOwotICAgIHRoaXMuX2V4
aXRUZXh0Q2hhbmdlTW9kZSA9IGV4aXRUZXh0Q2hhbmdlTW9kZTsKLQotICAgIHRoaXMuX3VybCA9
IHVybDsKLSAgICB0aGlzLl9oaWdobGlnaHRlciA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ckhpZ2hsaWdodGVyKHRleHRNb2RlbCwgdGhpcy5faGlnaGxpZ2h0RGF0YVJlYWR5LmJpbmQodGhp
cykpOwotICAgIHRoaXMuX3JlYWRPbmx5ID0gdHJ1ZTsKLQotICAgIHRoaXMuZWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUg
PSAidGV4dC1lZGl0b3ItY29udGVudHMiOwotICAgIHRoaXMuZWxlbWVudC50YWJJbmRleCA9IDA7
Ci0KLSAgICB0aGlzLl9jb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
LSAgICB0aGlzLl9jb250YWluZXIuY2xhc3NOYW1lID0gImlubmVyLWNvbnRhaW5lciI7Ci0gICAg
dGhpcy5fY29udGFpbmVyLnRhYkluZGV4ID0gMDsKLSAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hp
bGQodGhpcy5fY29udGFpbmVyKTsKLQotICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVy
KCJzY3JvbGwiLCB0aGlzLl9zY3JvbGwuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuZWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIHRoaXMuX2hhbmRsZUVsZW1lbnRGb2N1cy5i
aW5kKHRoaXMpLCBmYWxzZSk7Ci0KLSAgICAvLyBJbiBXZWJLaXQgdGhlIERPTU5vZGVSZW1vdmVk
IGV2ZW50IGlzIGZpcmVkIEFGVEVSIHRoZSBub2RlIGlzIHJlbW92ZWQsIHRodXMgaXQgc2hvdWxk
IGJlCi0gICAgLy8gYXR0YWNoZWQgdG8gYWxsIERPTSBub2RlcyB0aGF0IHdlIHdhbnQgdG8gdHJh
Y2suIEluc3RlYWQsIHdlIGF0dGFjaCB0aGUgRE9NTm9kZVJlbW92ZWQKLSAgICAvLyBsaXN0ZW5l
cnMgb25seSBvbiB0aGUgbGluZSByb3dzLCBhbmQgdXNlIERPTVN1YnRyZWVNb2RpZmllZCB0byB0
cmFjayBub2RlIHJlbW92YWxzIGluc2lkZQotICAgIC8vIHRoZSBsaW5lIHJvd3MuIEZvciBtb3Jl
IGluZm8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU2NjYK
LSAgICAvLwotICAgIC8vIE9QVElNSVpBVElPTi4gSXQgaXMgdmVyeSBleHBlbnNpdmUgdG8gbGlz
dGVuIHRvIHRoZSBET00gbXV0YXRpb24gZXZlbnRzLCB0aHVzIHdlIHJlbW92ZSB0aGUKLSAgICAv
LyBsaXN0ZW5lcnMgd2hlbmV2ZXIgd2UgZG8gYW55IGludGVybmFsIERPTSBtYW5pcHVsYXRpb25z
IChzdWNoIGFzIGV4cGFuZC9jb2xsYXBzZSBsaW5lIHJvd3MpCi0gICAgLy8gYW5kIHNldCB0aGUg
bGlzdGVuZXJzIGJhY2sgd2hlbiB3ZSBhcmUgZmluaXNoZWQuCi0gICAgdGhpcy5faGFuZGxlRE9N
VXBkYXRlc0NhbGxiYWNrID0gdGhpcy5faGFuZGxlRE9NVXBkYXRlcy5iaW5kKHRoaXMpOwotICAg
IHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJET01DaGFyYWN0ZXJEYXRhTW9kaWZp
ZWQiLCB0aGlzLl9oYW5kbGVET01VcGRhdGVzQ2FsbGJhY2ssIGZhbHNlKTsKLSAgICB0aGlzLl9j
b250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiRE9NTm9kZUluc2VydGVkIiwgdGhpcy5faGFuZGxl
RE9NVXBkYXRlc0NhbGxiYWNrLCBmYWxzZSk7Ci0gICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50
TGlzdGVuZXIoIkRPTVN1YnRyZWVNb2RpZmllZCIsIHRoaXMuX2hhbmRsZURPTVVwZGF0ZXNDYWxs
YmFjaywgZmFsc2UpOwotCi0gICAgdGhpcy5mcmVlQ2FjaGVkRWxlbWVudHMoKTsKLSAgICB0aGlz
Ll9idWlsZENodW5rcygpOwotfQotCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5w
cm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG1pbWVUeXBlCi0g
ICAgICovCi0gICAgc2V0IG1pbWVUeXBlKG1pbWVUeXBlKQotICAgIHsKLSAgICAgICAgdGhpcy5f
aGlnaGxpZ2h0ZXIubWltZVR5cGUgPSBtaW1lVHlwZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtib29sZWFufSByZWFkT25seQotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVx
dWVzdEZvY3VzCi0gICAgICovCi0gICAgc2V0UmVhZE9ubHk6IGZ1bmN0aW9uKHJlYWRPbmx5LCBy
ZXF1ZXN0Rm9jdXMpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcmVhZE9ubHkgPT09IHJlYWRP
bmx5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVz
KCk7Ci0gICAgICAgIHRoaXMuX3JlYWRPbmx5ID0gcmVhZE9ubHk7Ci0gICAgICAgIGlmICh0aGlz
Ll9yZWFkT25seSkKLSAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5yZW1vdmVTdHlsZUNsYXNz
KCJ0ZXh0LWVkaXRvci1lZGl0YWJsZSIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHRo
aXMuX2NvbnRhaW5lci5hZGRTdHlsZUNsYXNzKCJ0ZXh0LWVkaXRvci1lZGl0YWJsZSIpOwotICAg
ICAgICAgICAgaWYgKHJlcXVlc3RGb2N1cykKLSAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVT
ZWxlY3Rpb25PblN0YXJ0RWRpdGluZygpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuZW5kRG9t
VXBkYXRlcygpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQot
ICAgICAqLwotICAgIHJlYWRPbmx5OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy5fcmVhZE9ubHk7Ci0gICAgfSwKLQotICAgIF9oYW5kbGVFbGVtZW50Rm9jdXM6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fcmVhZE9ubHkpCi0gICAgICAgICAgICB0
aGlzLl9jb250YWluZXIuZm9jdXMoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVy
biB7RWxlbWVudH0KLSAgICAgKi8KLSAgICBkZWZhdWx0Rm9jdXNlZEVsZW1lbnQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9yZWFkT25seSkKLSAgICAgICAgICAgIHJldHVy
biB0aGlzLmVsZW1lbnQ7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7Ci0gICAgfSwK
LQotICAgIF91cGRhdGVTZWxlY3Rpb25PblN0YXJ0RWRpdGluZzogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgLy8gZm9jdXMoKSBuZWVkcyB0byBnbyBmaXJzdCBmb3IgdGhlIGNhc2Ugd2hlbiB0
aGUgbGFzdCBzZWxlY3Rpb24gd2FzIGluc2lkZSB0aGUgZWRpdG9yIGFuZAotICAgICAgICAvLyB0
aGUgIkVkaXQiIGJ1dHRvbiB3YXMgY2xpY2tlZC4gSW4gdGhpcyBjYXNlIHdlIGJhaWwgYXQgdGhl
IGNoZWNrIGJlbG93LCBidXQgdGhlCi0gICAgICAgIC8vIGVkaXRvciBkb2VzIG5vdCByZWNlaXZl
IHRoZSBmb2N1cywgdGh1cyAiRXNjIiBkb2VzIG5vdCBjYW5jZWwgZWRpdGluZyB1bnRpbCBhdCBs
ZWFzdAotICAgICAgICAvLyBvbmUgY2hhbmdlIGhhcyBiZWVuIG1hZGUgdG8gdGhlIGVkaXRvciBj
b250ZW50cy4KLSAgICAgICAgdGhpcy5fY29udGFpbmVyLmZvY3VzKCk7Ci0gICAgICAgIHZhciBz
ZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmIChzZWxlY3Rpb24u
cmFuZ2VDb3VudCkgewotICAgICAgICAgICAgdmFyIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyID0g
c2VsZWN0aW9uLmdldFJhbmdlQXQoMCkuY29tbW9uQW5jZXN0b3JDb250YWluZXI7Ci0gICAgICAg
ICAgICBpZiAodGhpcy5fY29udGFpbmVyLmlzU2VsZk9yQW5jZXN0b3IoY29tbW9uQW5jZXN0b3JD
b250YWluZXIpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKLSAgICAgICAgdmFyIHJhbmdlID0gZG9jdW1l
bnQuY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgcmFuZ2Uuc2V0U3RhcnQodGhpcy5fY29udGFpbmVy
LCAwKTsKLSAgICAgICAgcmFuZ2Uuc2V0RW5kKHRoaXMuX2NvbnRhaW5lciwgMCk7Ci0gICAgICAg
IHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBzdGFydExpbmUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kTGluZQot
ICAgICAqLwotICAgIHNldEVkaXRhYmxlUmFuZ2U6IGZ1bmN0aW9uKHN0YXJ0TGluZSwgZW5kTGlu
ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVzKCk7Ci0KLSAgICAgICAgdmFy
IGZpcnN0Q2h1bmtOdW1iZXIgPSB0aGlzLl9jaHVua051bWJlckZvckxpbmUoc3RhcnRMaW5lKTsK
LSAgICAgICAgdmFyIGZpcnN0Q2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2ZpcnN0Q2h1bmtOdW1i
ZXJdOwotICAgICAgICBpZiAoZmlyc3RDaHVuay5zdGFydExpbmUgIT09IHN0YXJ0TGluZSkgewot
ICAgICAgICAgICAgdGhpcy5fc3BsaXRDaHVua09uQUxpbmUoc3RhcnRMaW5lLCBmaXJzdENodW5r
TnVtYmVyKTsKLSAgICAgICAgICAgIGZpcnN0Q2h1bmtOdW1iZXIgKz0gMTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZhciBsYXN0Q2h1bmtOdW1iZXIgPSB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsK
LSAgICAgICAgaWYgKGVuZExpbmUgIT09IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KSB7Ci0g
ICAgICAgICAgICBsYXN0Q2h1bmtOdW1iZXIgPSB0aGlzLl9jaHVua051bWJlckZvckxpbmUoZW5k
TGluZSk7Ci0gICAgICAgICAgICB2YXIgbGFzdENodW5rID0gdGhpcy5fdGV4dENodW5rc1tsYXN0
Q2h1bmtOdW1iZXJdOwotICAgICAgICAgICAgaWYgKGxhc3RDaHVuayAmJiBsYXN0Q2h1bmsuc3Rh
cnRMaW5lICE9PSBlbmRMaW5lKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3BsaXRDaHVua09u
QUxpbmUoZW5kTGluZSwgbGFzdENodW5rTnVtYmVyKTsKLSAgICAgICAgICAgICAgICBsYXN0Q2h1
bmtOdW1iZXIgKz0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAo
dmFyIGNodW5rTnVtYmVyID0gMDsgY2h1bmtOdW1iZXIgPCBmaXJzdENodW5rTnVtYmVyOyArK2No
dW5rTnVtYmVyKQotICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rc1tjaHVua051bWJlcl0ucmVh
ZE9ubHkgPSB0cnVlOwotICAgICAgICBmb3IgKHZhciBjaHVua051bWJlciA9IGZpcnN0Q2h1bmtO
dW1iZXI7IGNodW5rTnVtYmVyIDwgbGFzdENodW5rTnVtYmVyOyArK2NodW5rTnVtYmVyKQotICAg
ICAgICAgICAgdGhpcy5fdGV4dENodW5rc1tjaHVua051bWJlcl0ucmVhZE9ubHkgPSBmYWxzZTsK
LSAgICAgICAgZm9yICh2YXIgY2h1bmtOdW1iZXIgPSBsYXN0Q2h1bmtOdW1iZXI7IGNodW5rTnVt
YmVyIDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGg7ICsrY2h1bmtOdW1iZXIpCi0gICAgICAgICAg
ICB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVtYmVyXS5yZWFkT25seSA9IHRydWU7Ci0KLSAgICAg
ICAgdGhpcy5lbmREb21VcGRhdGVzKCk7Ci0gICAgfSwKLQotICAgIGNsZWFyRWRpdGFibGVSYW5n
ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgY2h1bmtOdW1iZXIgPSAwOyBj
aHVua051bWJlciA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2NodW5rTnVtYmVyKQotICAg
ICAgICAgICAgdGhpcy5fdGV4dENodW5rc1tjaHVua051bWJlcl0ucmVhZE9ubHkgPSBmYWxzZTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdl
fSByYW5nZQotICAgICAqLwotICAgIG1hcmtBbmRSZXZlYWxSYW5nZTogZnVuY3Rpb24ocmFuZ2Up
Ci0gICAgewotICAgICAgICBpZiAodGhpcy5fcmFuZ2VUb01hcmspIHsKLSAgICAgICAgICAgIHZh
ciBtYXJrZWRMaW5lID0gdGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRMaW5lOwotICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuX3JhbmdlVG9NYXJrOwotICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBtYXJr
ZWQgcmVnaW9uIGltbWVkaWF0ZWx5LgotICAgICAgICAgICAgaWYgKCF0aGlzLl9kaXJ0eUxpbmVz
KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5iZWdpbkRvbVVwZGF0ZXMoKTsKLSAgICAgICAgICAg
ICAgICB2YXIgY2h1bmsgPSB0aGlzLmNodW5rRm9yTGluZShtYXJrZWRMaW5lKTsKLSAgICAgICAg
ICAgICAgICB2YXIgd2FzRXhwYW5kZWQgPSBjaHVuay5leHBhbmRlZDsKLSAgICAgICAgICAgICAg
ICBjaHVuay5leHBhbmRlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGNodW5rLnVwZGF0ZUNv
bGxhcHNlZExpbmVSb3coKTsKLSAgICAgICAgICAgICAgICBjaHVuay5leHBhbmRlZCA9IHdhc0V4
cGFuZGVkOwotICAgICAgICAgICAgICAgIHRoaXMuZW5kRG9tVXBkYXRlcygpOwotICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgdGhpcy5fcGFpbnRMaW5lcyhtYXJrZWRMaW5lLCBt
YXJrZWRMaW5lICsgMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmFuZ2UpIHsKLSAgICAg
ICAgICAgIHRoaXMuX3JhbmdlVG9NYXJrID0gcmFuZ2U7Ci0gICAgICAgICAgICB0aGlzLnJldmVh
bExpbmUocmFuZ2Uuc3RhcnRMaW5lKTsKLSAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMubWFr
ZUxpbmVBQ2h1bmsocmFuZ2Uuc3RhcnRMaW5lKTsKLSAgICAgICAgICAgIHRoaXMuX3BhaW50TGlu
ZShjaHVuay5lbGVtZW50KTsKLSAgICAgICAgICAgIGlmICh0aGlzLl9tYXJrZWRSYW5nZUVsZW1l
bnQpCi0gICAgICAgICAgICAgICAgdGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50LnNjcm9sbEludG9W
aWV3SWZOZWVkZWQoKTsKLSAgICAgICAgfQotICAgICAgICBkZWxldGUgdGhpcy5fbWFya2VkUmFu
Z2VFbGVtZW50OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGlu
ZU51bWJlcgotICAgICAqLwotICAgIGhpZ2hsaWdodExpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIp
Ci0gICAgewotICAgICAgICB0aGlzLmNsZWFyTGluZUhpZ2hsaWdodCgpOwotICAgICAgICB0aGlz
Ll9oaWdobGlnaHRlZExpbmUgPSBsaW5lTnVtYmVyOwotICAgICAgICB0aGlzLnJldmVhbExpbmUo
bGluZU51bWJlcik7Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9yZWFkT25seSkKLSAgICAgICAgICAg
IHRoaXMuX3Jlc3RvcmVTZWxlY3Rpb24oV2ViSW5zcGVjdG9yLlRleHRSYW5nZS5jcmVhdGVGcm9t
TG9jYXRpb24obGluZU51bWJlciwgMCksIGZhbHNlKTsKLQotICAgICAgICB0aGlzLmFkZERlY29y
YXRpb24obGluZU51bWJlciwgIndlYmtpdC1oaWdobGlnaHRlZC1saW5lIik7Ci0gICAgfSwKLQot
ICAgIGNsZWFyTGluZUhpZ2hsaWdodDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHR5
cGVvZiB0aGlzLl9oaWdobGlnaHRlZExpbmUgPT09ICJudW1iZXIiKSB7Ci0gICAgICAgICAgICB0
aGlzLnJlbW92ZURlY29yYXRpb24odGhpcy5faGlnaGxpZ2h0ZWRMaW5lLCAid2Via2l0LWhpZ2hs
aWdodGVkLWxpbmUiKTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9oaWdobGlnaHRlZExpbmU7
Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgZnJlZUNhY2hlZEVsZW1lbnRzOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICB0aGlzLl9jYWNoZWRTcGFucyA9IFtdOwotICAgICAgICB0aGlzLl9j
YWNoZWRUZXh0Tm9kZXMgPSBbXTsKLSAgICAgICAgdGhpcy5fY2FjaGVkUm93cyA9IFtdOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlZG8KLSAgICAgKi8KLSAg
ICBoYW5kbGVVbmRvUmVkbzogZnVuY3Rpb24ocmVkbykKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9kaXJ0eUxpbmVzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHRoaXMu
YmVnaW5VcGRhdGVzKCk7Ci0KLSAgICAgICAgZnVuY3Rpb24gYmVmb3JlKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgdGhpcy5fZW50ZXJUZXh0Q2hhbmdlTW9kZSgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZnVuY3Rpb24gYWZ0ZXIob2xkUmFuZ2UsIG5ld1JhbmdlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB0aGlzLl9leGl0VGV4dENoYW5nZU1vZGUob2xkUmFuZ2UsIG5ld1JhbmdlKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZhciByYW5nZSA9IHJlZG8gPyB0aGlzLl90ZXh0TW9kZWwucmVk
byhiZWZvcmUuYmluZCh0aGlzKSwgYWZ0ZXIuYmluZCh0aGlzKSkgOiB0aGlzLl90ZXh0TW9kZWwu
dW5kbyhiZWZvcmUuYmluZCh0aGlzKSwgYWZ0ZXIuYmluZCh0aGlzKSk7Ci0KLSAgICAgICAgdGhp
cy5lbmRVcGRhdGVzKCk7Ci0KLSAgICAgICAgLy8gUmVzdG9yZSBsb2NhdGlvbiBwb3N0LXJlcGFp
bnQuCi0gICAgICAgIGlmIChyYW5nZSkKLSAgICAgICAgICAgIHRoaXMuX3Jlc3RvcmVTZWxlY3Rp
b24ocmFuZ2UsIHRydWUpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNoaWZ0S2V5Ci0gICAgICovCi0gICAgaGFuZGxl
VGFiS2V5UHJlc3M6IGZ1bmN0aW9uKHNoaWZ0S2V5KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMu
X2RpcnR5TGluZXMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdmFyIHNl
bGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlvbigpOwotICAgICAgICBpZiAoIXNlbGVjdGlvbikK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB2YXIgcmFuZ2UgPSBzZWxlY3Rp
b24ubm9ybWFsaXplKCk7Ci0KLSAgICAgICAgdGhpcy5iZWdpblVwZGF0ZXMoKTsKLSAgICAgICAg
dGhpcy5fZW50ZXJUZXh0Q2hhbmdlTW9kZSgpOwotCi0gICAgICAgIHZhciBuZXdSYW5nZTsKLSAg
ICAgICAgdmFyIHJhbmdlV2FzRW1wdHkgPSByYW5nZS5pc0VtcHR5KCk7Ci0gICAgICAgIGlmIChz
aGlmdEtleSkKLSAgICAgICAgICAgIG5ld1JhbmdlID0gdGhpcy5fdW5pbmRlbnRMaW5lcyhyYW5n
ZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKHJhbmdlV2FzRW1wdHkpCi0gICAg
ICAgICAgICAgICAgbmV3UmFuZ2UgPSB0aGlzLl9lZGl0UmFuZ2UocmFuZ2UsIFdlYkluc3BlY3Rv
ci5zZXR0aW5ncy50ZXh0RWRpdG9ySW5kZW50LmdldCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBuZXdSYW5nZSA9IHRoaXMuX2luZGVudExpbmVzKHJhbmdlKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHRoaXMuX2V4aXRUZXh0Q2hhbmdlTW9kZShyYW5nZSwgbmV3UmFuZ2Up
OwotICAgICAgICB0aGlzLmVuZFVwZGF0ZXMoKTsKLSAgICAgICAgaWYgKHJhbmdlV2FzRW1wdHkp
Ci0gICAgICAgICAgICBuZXdSYW5nZS5zdGFydENvbHVtbiA9IG5ld1JhbmdlLmVuZENvbHVtbjsK
LSAgICAgICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihuZXdSYW5nZSwgdHJ1ZSk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5UZXh0UmFuZ2V9IHJhbmdlCi0gICAgICovCi0gICAgX2luZGVudExpbmVzOiBmdW5jdGlv
bihyYW5nZSkKLSAgICB7Ci0gICAgICAgIHZhciBpbmRlbnQgPSBXZWJJbnNwZWN0b3Iuc2V0dGlu
Z3MudGV4dEVkaXRvckluZGVudC5nZXQoKTsKLQotICAgICAgICBpZiAodGhpcy5fbGFzdEVkaXRl
ZFJhbmdlKQotICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLm1hcmtVbmRvYWJsZVN0YXRlKCk7
Ci0KLSAgICAgICAgdmFyIG5ld1JhbmdlID0gcmFuZ2UuY2xvbmUoKTsKLQotICAgICAgICAvLyBE
byBub3QgY2hhbmdlIGEgc2VsZWN0aW9uIHN0YXJ0IHBvc2l0aW9uIHdoZW4gaXQgaXMgYXQgdGhl
IGJlZ2lubmluZyBvZiBhIGxpbmUKLSAgICAgICAgaWYgKHJhbmdlLnN0YXJ0Q29sdW1uKQotICAg
ICAgICAgICAgbmV3UmFuZ2Uuc3RhcnRDb2x1bW4gKz0gaW5kZW50Lmxlbmd0aDsKLQotICAgICAg
ICB2YXIgaW5kZW50RW5kTGluZSA9IHJhbmdlLmVuZExpbmU7Ci0gICAgICAgIGlmIChyYW5nZS5l
bmRDb2x1bW4pCi0gICAgICAgICAgICBuZXdSYW5nZS5lbmRDb2x1bW4gKz0gaW5kZW50Lmxlbmd0
aDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaW5kZW50RW5kTGluZS0tOwotCi0gICAgICAg
IGZvciAodmFyIGxpbmVOdW1iZXIgPSByYW5nZS5zdGFydExpbmU7IGxpbmVOdW1iZXIgPD0gaW5k
ZW50RW5kTGluZTsgbGluZU51bWJlcisrKQotICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLmVk
aXRSYW5nZShXZWJJbnNwZWN0b3IuVGV4dFJhbmdlLmNyZWF0ZUZyb21Mb2NhdGlvbihsaW5lTnVt
YmVyLCAwKSwgaW5kZW50KTsKLQotICAgICAgICB0aGlzLl9sYXN0RWRpdGVkUmFuZ2UgPSBuZXdS
YW5nZTsKLQotICAgICAgICByZXR1cm4gbmV3UmFuZ2U7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0gcmFuZ2UKLSAgICAgKi8KLSAgICBf
dW5pbmRlbnRMaW5lczogZnVuY3Rpb24ocmFuZ2UpCi0gICAgewotICAgICAgICBpZiAodGhpcy5f
bGFzdEVkaXRlZFJhbmdlKQotICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLm1hcmtVbmRvYWJs
ZVN0YXRlKCk7Ci0KLSAgICAgICAgdmFyIGluZGVudCA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy50
ZXh0RWRpdG9ySW5kZW50LmdldCgpOwotICAgICAgICB2YXIgaW5kZW50TGVuZ3RoID0gaW5kZW50
ID09PSBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1vZGVsLkluZGVudC5UYWJDaGFyYWN0ZXIgPyA0
IDogaW5kZW50Lmxlbmd0aDsKLSAgICAgICAgdmFyIGxpbmVJbmRlbnRSZWdleCA9IG5ldyBSZWdF
eHAoIl4gezEsIiArIGluZGVudExlbmd0aCArICJ9Iik7Ci0gICAgICAgIHZhciBuZXdSYW5nZSA9
IHJhbmdlLmNsb25lKCk7Ci0KLSAgICAgICAgdmFyIGluZGVudEVuZExpbmUgPSByYW5nZS5lbmRM
aW5lOwotICAgICAgICBpZiAoIXJhbmdlLmVuZENvbHVtbikKLSAgICAgICAgICAgIGluZGVudEVu
ZExpbmUtLTsKLQotICAgICAgICBmb3IgKHZhciBsaW5lTnVtYmVyID0gcmFuZ2Uuc3RhcnRMaW5l
OyBsaW5lTnVtYmVyIDw9IGluZGVudEVuZExpbmU7IGxpbmVOdW1iZXIrKykgewotICAgICAgICAg
ICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKTsKLSAgICAgICAg
ICAgIHZhciBmaXJzdENoYXJhY3RlciA9IGxpbmUuY2hhckF0KDApOwotICAgICAgICAgICAgdmFy
IGxpbmVJbmRlbnRMZW5ndGg7Ci0KLSAgICAgICAgICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0g
IiAiKQotICAgICAgICAgICAgICAgIGxpbmVJbmRlbnRMZW5ndGggPSBsaW5lLm1hdGNoKGxpbmVJ
bmRlbnRSZWdleClbMF0ubGVuZ3RoOwotICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RDaGFyYWN0
ZXIgPT09ICJcdCIpCi0gICAgICAgICAgICAgICAgbGluZUluZGVudExlbmd0aCA9IDE7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHRo
aXMuX3RleHRNb2RlbC5lZGl0UmFuZ2UobmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UobGluZU51
bWJlciwgMCwgbGluZU51bWJlciwgbGluZUluZGVudExlbmd0aCksICIiKTsKLQotICAgICAgICAg
ICAgaWYgKGxpbmVOdW1iZXIgPT09IHJhbmdlLnN0YXJ0TGluZSkKLSAgICAgICAgICAgICAgICBu
ZXdSYW5nZS5zdGFydENvbHVtbiA9IE1hdGgubWF4KDAsIG5ld1JhbmdlLnN0YXJ0Q29sdW1uIC0g
bGluZUluZGVudExlbmd0aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGluZUluZGVudExl
bmd0aCkKLSAgICAgICAgICAgIG5ld1JhbmdlLmVuZENvbHVtbiA9IE1hdGgubWF4KDAsIG5ld1Jh
bmdlLmVuZENvbHVtbiAtIGxpbmVJbmRlbnRMZW5ndGgpOwotCi0gICAgICAgIHRoaXMuX2xhc3RF
ZGl0ZWRSYW5nZSA9IG5ld1JhbmdlOwotCi0gICAgICAgIHJldHVybiBuZXdSYW5nZTsKLSAgICB9
LAotCi0gICAgaGFuZGxlRW50ZXJLZXk6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0
aGlzLl9kaXJ0eUxpbmVzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHZh
ciByYW5nZSA9IHRoaXMuX2dldFNlbGVjdGlvbigpOwotICAgICAgICBpZiAoIXJhbmdlKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJhbmdlID0gcmFuZ2Uubm9ybWFsaXpl
KCk7Ci0KLSAgICAgICAgaWYgKHJhbmdlLmVuZENvbHVtbiA9PT0gMCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICB2YXIgbGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lKHJh
bmdlLnN0YXJ0TGluZSk7Ci0gICAgICAgIHZhciBsaW5lUHJlZml4ID0gbGluZS5zdWJzdHJpbmco
MCwgcmFuZ2Uuc3RhcnRDb2x1bW4pOwotICAgICAgICB2YXIgaW5kZW50TWF0Y2ggPSBsaW5lUHJl
Zml4Lm1hdGNoKC9eXHMrLyk7Ci0gICAgICAgIHZhciBjdXJyZW50SW5kZW50ID0gaW5kZW50TWF0
Y2ggPyBpbmRlbnRNYXRjaFswXSA6ICIiOwotCi0gICAgICAgIHZhciB0ZXh0RWRpdG9ySW5kZW50
ID0gV2ViSW5zcGVjdG9yLnNldHRpbmdzLnRleHRFZGl0b3JJbmRlbnQuZ2V0KCk7Ci0gICAgICAg
IHZhciBpbmRlbnQgPSBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1vZGVsLmVuZHNXaXRoQnJhY2tl
dFJlZ2V4LnRlc3QobGluZVByZWZpeCkgPyBjdXJyZW50SW5kZW50ICsgdGV4dEVkaXRvckluZGVu
dCA6IGN1cnJlbnRJbmRlbnQ7Ci0KLSAgICAgICAgaWYgKCFpbmRlbnQpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdGhpcy5iZWdpblVwZGF0ZXMoKTsKLSAgICAgICAgdGhp
cy5fZW50ZXJUZXh0Q2hhbmdlTW9kZSgpOwotCi0gICAgICAgIHZhciBsaW5lQnJlYWsgPSB0aGlz
Ll90ZXh0TW9kZWwubGluZUJyZWFrOwotICAgICAgICB2YXIgbmV3UmFuZ2U7Ci0gICAgICAgIGlm
IChyYW5nZS5pc0VtcHR5KCkgJiYgbGluZS5zdWJzdHIocmFuZ2UuZW5kQ29sdW1uIC0gMSwgMikg
PT09ICd7fScpIHsKLSAgICAgICAgICAgIC8vIHt8fQotICAgICAgICAgICAgLy8gYmVjb21lcwot
ICAgICAgICAgICAgLy8gewotICAgICAgICAgICAgLy8gICAgIHwKLSAgICAgICAgICAgIC8vIH0K
LSAgICAgICAgICAgIG5ld1JhbmdlID0gdGhpcy5fZWRpdFJhbmdlKHJhbmdlLCBsaW5lQnJlYWsg
KyBpbmRlbnQgKyBsaW5lQnJlYWsgKyBjdXJyZW50SW5kZW50KTsKLSAgICAgICAgICAgIG5ld1Jh
bmdlLmVuZExpbmUtLTsKLSAgICAgICAgICAgIG5ld1JhbmdlLmVuZENvbHVtbiArPSB0ZXh0RWRp
dG9ySW5kZW50Lmxlbmd0aDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuZXdSYW5nZSA9
IHRoaXMuX2VkaXRSYW5nZShyYW5nZSwgbGluZUJyZWFrICsgaW5kZW50KTsKLQotICAgICAgICB0
aGlzLl9leGl0VGV4dENoYW5nZU1vZGUocmFuZ2UsIG5ld1JhbmdlKTsKLSAgICAgICAgdGhpcy5l
bmRVcGRhdGVzKCk7Ci0gICAgICAgIHRoaXMuX3Jlc3RvcmVTZWxlY3Rpb24obmV3UmFuZ2UuY29s
bGFwc2VUb0VuZCgpLCB0cnVlKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcGFyYW0g
e251bWJlcn0gY2h1bmtOdW1iZXIKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBjcmVhdGVTdWZm
aXhDaHVuawotICAgICAqLwotICAgIF9zcGxpdENodW5rT25BTGluZTogZnVuY3Rpb24obGluZU51
bWJlciwgY2h1bmtOdW1iZXIsIGNyZWF0ZVN1ZmZpeENodW5rKQotICAgIHsKLSAgICAgICAgdmFy
IHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlvbigpOwotICAgICAgICB2YXIgY2h1bmsgPSBX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX3NwbGl0Q2h1bmtP
bkFMaW5lLmNhbGwodGhpcywgbGluZU51bWJlciwgY2h1bmtOdW1iZXIsIGNyZWF0ZVN1ZmZpeENo
dW5rKTsKLSAgICAgICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihzZWxlY3Rpb24pOwotICAgICAg
ICByZXR1cm4gY2h1bms7Ci0gICAgfSwKLQotICAgIGJlZ2luRG9tVXBkYXRlczogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJv
dG90eXBlLmJlZ2luRG9tVXBkYXRlcy5jYWxsKHRoaXMpOwotICAgICAgICBpZiAodGhpcy5fZG9t
VXBkYXRlQ29hbGVzY2luZ0xldmVsID09PSAxKSB7Ci0gICAgICAgICAgICB0aGlzLl9jb250YWlu
ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkIiwgdGhpcy5f
aGFuZGxlRE9NVXBkYXRlc0NhbGxiYWNrLCBmYWxzZSk7Ci0gICAgICAgICAgICB0aGlzLl9jb250
YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NTm9kZUluc2VydGVkIiwgdGhpcy5faGFuZGxl
RE9NVXBkYXRlc0NhbGxiYWNrLCBmYWxzZSk7Ci0gICAgICAgICAgICB0aGlzLl9jb250YWluZXIu
cmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NU3VidHJlZU1vZGlmaWVkIiwgdGhpcy5faGFuZGxlRE9N
VXBkYXRlc0NhbGxiYWNrLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgZW5kRG9t
VXBkYXRlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLmVuZERvbVVwZGF0ZXMuY2FsbCh0aGlzKTsKLSAgICAg
ICAgaWYgKHRoaXMuX2RvbVVwZGF0ZUNvYWxlc2NpbmdMZXZlbCA9PT0gMCkgewotICAgICAgICAg
ICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNoYXJhY3RlckRhdGFNb2Rp
ZmllZCIsIHRoaXMuX2hhbmRsZURPTVVwZGF0ZXNDYWxsYmFjaywgZmFsc2UpOwotICAgICAgICAg
ICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoIkRPTU5vZGVJbnNlcnRlZCIsIHRo
aXMuX2hhbmRsZURPTVVwZGF0ZXNDYWxsYmFjaywgZmFsc2UpOwotICAgICAgICAgICAgdGhpcy5f
Y29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoIkRPTVN1YnRyZWVNb2RpZmllZCIsIHRoaXMuX2hh
bmRsZURPTVVwZGF0ZXNDYWxsYmFjaywgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbGluZVJvdwotICAgICAqIEBwYXJhbSB7Ym9v
bGVhbn0gZW5hYmxlCi0gICAgICovCi0gICAgX2VuYWJsZURPTU5vZGVSZW1vdmVkTGlzdGVuZXI6
IGZ1bmN0aW9uKGxpbmVSb3csIGVuYWJsZSkKLSAgICB7Ci0gICAgICAgIGlmIChlbmFibGUpCi0g
ICAgICAgICAgICBsaW5lUm93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTU5vZGVSZW1vdmVkIiwgdGhp
cy5faGFuZGxlRE9NVXBkYXRlc0NhbGxiYWNrLCBmYWxzZSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGxpbmVSb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NTm9kZVJlbW92ZWQiLCB0aGlz
Ll9oYW5kbGVET01VcGRhdGVzQ2FsbGJhY2ssIGZhbHNlKTsKLSAgICB9LAotCi0gICAgX2J1aWxk
Q2h1bmtzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRo
aXMuX3RleHRNb2RlbC5saW5lc0NvdW50OyArK2kpCi0gICAgICAgICAgICB0aGlzLl90ZXh0TW9k
ZWwucmVtb3ZlQXR0cmlidXRlKGksICJoaWdobGlnaHQiKTsKLQotICAgICAgICBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX2J1aWxkQ2h1bmtzLmNhbGwodGhp
cyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydExpbmUK
LSAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kTGluZQotICAgICAqLwotICAgIF9jcmVhdGVOZXdD
aHVuazogZnVuY3Rpb24oc3RhcnRMaW5lLCBlbmRMaW5lKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuayh0aGlzLCBzdGFydExpbmUsIGVu
ZExpbmUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUlu
ZGV4Ci0gICAgICogQHBhcmFtIHtudW1iZXJ9IHRvSW5kZXgKLSAgICAgKi8KLSAgICBfZXhwYW5k
Q2h1bmtzOiBmdW5jdGlvbihmcm9tSW5kZXgsIHRvSW5kZXgpCi0gICAgewotICAgICAgICB2YXIg
bGFzdENodW5rID0gdGhpcy5fdGV4dENodW5rc1t0b0luZGV4IC0gMV07Ci0gICAgICAgIHZhciBs
YXN0VmlzaWJsZUxpbmUgPSBsYXN0Q2h1bmsuc3RhcnRMaW5lICsgbGFzdENodW5rLmxpbmVzQ291
bnQ7Ci0KLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlvbigpOwotCi0g
ICAgICAgIHRoaXMuX211dGVIaWdobGlnaHRMaXN0ZW5lciA9IHRydWU7Ci0gICAgICAgIHRoaXMu
X2hpZ2hsaWdodGVyLmhpZ2hsaWdodChsYXN0VmlzaWJsZUxpbmUpOwotICAgICAgICBkZWxldGUg
dGhpcy5fbXV0ZUhpZ2hsaWdodExpc3RlbmVyOwotCi0gICAgICAgIHRoaXMuX3Jlc3RvcmVQYWlu
dExpbmVzT3BlcmF0aW9uc0NyZWRpdCgpOwotICAgICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX2V4cGFuZENodW5rcy5jYWxsKHRoaXMsIGZyb21JbmRl
eCwgdG9JbmRleCk7Ci0gICAgICAgIHRoaXMuX2FkanVzdFBhaW50TGluZXNPcGVyYXRpb25zUmVm
cmVzaFZhbHVlKCk7Ci0KLSAgICAgICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihzZWxlY3Rpb24p
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUxpbmUKLSAg
ICAgKiBAcGFyYW0ge251bWJlcn0gdG9MaW5lCi0gICAgICovCi0gICAgX2hpZ2hsaWdodERhdGFS
ZWFkeTogZnVuY3Rpb24oZnJvbUxpbmUsIHRvTGluZSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9tdXRlSGlnaGxpZ2h0TGlzdGVuZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRo
aXMuX3Jlc3RvcmVQYWludExpbmVzT3BlcmF0aW9uc0NyZWRpdCgpOwotICAgICAgICB0aGlzLl9w
YWludExpbmVzKGZyb21MaW5lLCB0b0xpbmUsIHRydWUgLypyZXN0b3JlU2VsZWN0aW9uKi8pOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRMaW5lCi0gICAg
ICogQHBhcmFtIHtudW1iZXJ9IGVuZExpbmUKLSAgICAgKi8KLSAgICBfc2NoZWR1bGVQYWludExp
bmVzOiBmdW5jdGlvbihzdGFydExpbmUsIGVuZExpbmUpCi0gICAgewotICAgICAgICBpZiAoc3Rh
cnRMaW5lID49IGVuZExpbmUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCF0
aGlzLl9zY2hlZHVsZWRQYWludExpbmVzKSB7Ci0gICAgICAgICAgICB0aGlzLl9zY2hlZHVsZWRQ
YWludExpbmVzID0gWyB7IHN0YXJ0TGluZTogc3RhcnRMaW5lLCBlbmRMaW5lOiBlbmRMaW5lIH0g
XTsKLSAgICAgICAgICAgIHRoaXMuX3BhaW50U2NoZWR1bGVkTGluZXNUaW1lciA9IHNldFRpbWVv
dXQodGhpcy5fcGFpbnRTY2hlZHVsZWRMaW5lcy5iaW5kKHRoaXMpLCAwKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2NoZWR1bGVkUGFp
bnRMaW5lcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMu
X3NjaGVkdWxlZFBhaW50TGluZXNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKGNodW5rLnN0YXJ0
TGluZSA8PSBlbmRMaW5lICYmIGNodW5rLmVuZExpbmUgPj0gc3RhcnRMaW5lKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNodW5rLnN0YXJ0TGluZSA9IE1hdGgubWluKGNodW5rLnN0YXJ0TGluZSwg
c3RhcnRMaW5lKTsKLSAgICAgICAgICAgICAgICAgICAgY2h1bmsuZW5kTGluZSA9IE1hdGgubWF4
KGNodW5rLmVuZExpbmUsIGVuZExpbmUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjaHVuay5zdGFydExpbmUgPiBl
bmRMaW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlZFBhaW50TGluZXMu
c3BsaWNlKGksIDAsIHsgc3RhcnRMaW5lOiBzdGFydExpbmUsIGVuZExpbmU6IGVuZExpbmUgfSk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB0aGlzLl9zY2hlZHVsZWRQYWludExpbmVzLnB1c2goeyBzdGFy
dExpbmU6IHN0YXJ0TGluZSwgZW5kTGluZTogZW5kTGluZSB9KTsKLSAgICAgICAgfQotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNraXBSZXN0b3JlU2VsZWN0aW9u
Ci0gICAgICovCi0gICAgX3BhaW50U2NoZWR1bGVkTGluZXM6IGZ1bmN0aW9uKHNraXBSZXN0b3Jl
U2VsZWN0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3BhaW50U2NoZWR1bGVkTGluZXNU
aW1lcikKLSAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9wYWludFNjaGVkdWxlZExpbmVz
VGltZXIpOwotICAgICAgICBkZWxldGUgdGhpcy5fcGFpbnRTY2hlZHVsZWRMaW5lc1RpbWVyOwot
Ci0gICAgICAgIGlmICghdGhpcy5fc2NoZWR1bGVkUGFpbnRMaW5lcykKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAvLyBSZXNjaGVkdWxlIHRoZSB0aW1lciBpZiB3ZSBjYW4gbm90IHBh
aW50IHRoZSBsaW5lcyB5ZXQsIG9yIHRoZSB1c2VyIGlzIHNjcm9sbGluZy4KLSAgICAgICAgaWYg
KHRoaXMuX2RpcnR5TGluZXMgfHwgdGhpcy5fcmVwYWludEFsbFRpbWVyKSB7Ci0gICAgICAgICAg
ICB0aGlzLl9wYWludFNjaGVkdWxlZExpbmVzVGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuX3BhaW50
U2NoZWR1bGVkTGluZXMuYmluZCh0aGlzKSwgNTApOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdmFyIHNjaGVkdWxlZFBhaW50TGluZXMgPSB0aGlzLl9zY2hlZHVs
ZWRQYWludExpbmVzOwotICAgICAgICBkZWxldGUgdGhpcy5fc2NoZWR1bGVkUGFpbnRMaW5lczsK
LQotICAgICAgICB0aGlzLl9yZXN0b3JlUGFpbnRMaW5lc09wZXJhdGlvbnNDcmVkaXQoKTsKLSAg
ICAgICAgdGhpcy5fcGFpbnRMaW5lQ2h1bmtzKHNjaGVkdWxlZFBhaW50TGluZXMsICFza2lwUmVz
dG9yZVNlbGVjdGlvbik7Ci0gICAgICAgIHRoaXMuX2FkanVzdFBhaW50TGluZXNPcGVyYXRpb25z
UmVmcmVzaFZhbHVlKCk7Ci0gICAgfSwKLQotICAgIF9yZXN0b3JlUGFpbnRMaW5lc09wZXJhdGlv
bnNDcmVkaXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fcGFpbnRMaW5l
c09wZXJhdGlvbnNSZWZyZXNoVmFsdWUpCi0gICAgICAgICAgICB0aGlzLl9wYWludExpbmVzT3Bl
cmF0aW9uc1JlZnJlc2hWYWx1ZSA9IDI1MDsKLSAgICAgICAgdGhpcy5fcGFpbnRMaW5lc09wZXJh
dGlvbnNDcmVkaXQgPSB0aGlzLl9wYWludExpbmVzT3BlcmF0aW9uc1JlZnJlc2hWYWx1ZTsKLSAg
ICAgICAgdGhpcy5fcGFpbnRMaW5lc09wZXJhdGlvbnNMYXN0UmVmcmVzaCA9IERhdGUubm93KCk7
Ci0gICAgfSwKLQotICAgIF9hZGp1c3RQYWludExpbmVzT3BlcmF0aW9uc1JlZnJlc2hWYWx1ZTog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIG9wZXJhdGlvbnNEb25lID0gdGhpcy5fcGFp
bnRMaW5lc09wZXJhdGlvbnNSZWZyZXNoVmFsdWUgLSB0aGlzLl9wYWludExpbmVzT3BlcmF0aW9u
c0NyZWRpdDsKLSAgICAgICAgaWYgKG9wZXJhdGlvbnNEb25lIDw9IDApCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIHZhciB0aW1lUGFzdCA9IERhdGUubm93KCkgLSB0aGlzLl9wYWludExp
bmVzT3BlcmF0aW9uc0xhc3RSZWZyZXNoOwotICAgICAgICBpZiAodGltZVBhc3QgPD0gMCkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgLy8gTWFrZSB0aGUgc3luY2hyb25vdXMgQ1BVIGNo
dW5rIGZvciBwYWludGluZyB0aGUgbGluZXMgNTAgbXNlYy4KLSAgICAgICAgdmFyIHZhbHVlID0g
TWF0aC5mbG9vcihvcGVyYXRpb25zRG9uZSAvIHRpbWVQYXN0ICogNTApOwotICAgICAgICB0aGlz
Ll9wYWludExpbmVzT3BlcmF0aW9uc1JlZnJlc2hWYWx1ZSA9IE51bWJlci5jb25zdHJhaW4odmFs
dWUsIDE1MCwgMTUwMCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVy
fSBmcm9tTGluZQotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b0xpbmUKLSAgICAgKiBAcGFyYW0g
e2Jvb2xlYW49fSByZXN0b3JlU2VsZWN0aW9uCi0gICAgICovCi0gICAgX3BhaW50TGluZXM6IGZ1
bmN0aW9uKGZyb21MaW5lLCB0b0xpbmUsIHJlc3RvcmVTZWxlY3Rpb24pCi0gICAgewotICAgICAg
ICB0aGlzLl9wYWludExpbmVDaHVua3MoWyB7IHN0YXJ0TGluZTogZnJvbUxpbmUsIGVuZExpbmU6
IHRvTGluZSB9IF0sIHJlc3RvcmVTZWxlY3Rpb24pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge2Jvb2xlYW49fSByZXN0b3JlU2VsZWN0aW9uCi0gICAgICovCi0gICAgX3BhaW50
TGluZUNodW5rczogZnVuY3Rpb24obGluZUNodW5rcywgcmVzdG9yZVNlbGVjdGlvbikKLSAgICB7
Ci0gICAgICAgIC8vIEZpcnN0LCBwYWludCB2aXNpYmxlIGxpbmVzLCBzbyB0aGF0IGluIGNhc2Ug
b2YgbG9uZyBsaW5lcyB3ZSBzaG91bGQgc3RhcnQgaGlnaGxpZ2h0aW5nCi0gICAgICAgIC8vIHRo
ZSB2aXNpYmxlIGFyZWEgaW1tZWRpYXRlbHksIGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgdGhlIGxp
bmVzIGFib3ZlIHRoZSB2aXNpYmxlIGFyZWEuCi0gICAgICAgIHZhciB2aXNpYmxlRnJvbSA9IHRo
aXMuZWxlbWVudC5zY3JvbGxUb3A7Ci0gICAgICAgIHZhciBmaXJzdFZpc2libGVMaW5lTnVtYmVy
ID0gdGhpcy5fZmluZEZpcnN0VmlzaWJsZUxpbmVOdW1iZXIodmlzaWJsZUZyb20pOwotCi0gICAg
ICAgIHZhciBjaHVuazsKLSAgICAgICAgdmFyIHNlbGVjdGlvbjsKLSAgICAgICAgdmFyIGludmlz
aWJsZUxpbmVSb3dzID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZUNodW5r
cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGxpbmVDaHVuayA9IGxpbmVDaHVua3Nb
aV07Ci0gICAgICAgICAgICBpZiAodGhpcy5fZGlydHlMaW5lcyB8fCB0aGlzLl9zY2hlZHVsZWRQ
YWludExpbmVzKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVQYWludExpbmVzKGxp
bmVDaHVuay5zdGFydExpbmUsIGxpbmVDaHVuay5lbmRMaW5lKTsKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIg
PSBsaW5lQ2h1bmsuc3RhcnRMaW5lOyBsaW5lTnVtYmVyIDwgbGluZUNodW5rLmVuZExpbmU7ICsr
bGluZU51bWJlcikgewotICAgICAgICAgICAgICAgIGlmICghY2h1bmsgfHwgbGluZU51bWJlciA8
IGNodW5rLnN0YXJ0TGluZSB8fCBsaW5lTnVtYmVyID49IGNodW5rLnN0YXJ0TGluZSArIGNodW5r
LmxpbmVzQ291bnQpCi0gICAgICAgICAgICAgICAgICAgIGNodW5rID0gdGhpcy5jaHVua0Zvckxp
bmUobGluZU51bWJlcik7Ci0gICAgICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSBjaHVuay5nZXRF
eHBhbmRlZExpbmVSb3cobGluZU51bWJlcik7Ci0gICAgICAgICAgICAgICAgaWYgKCFsaW5lUm93
KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAobGlu
ZU51bWJlciA8IGZpcnN0VmlzaWJsZUxpbmVOdW1iZXIpIHsKLSAgICAgICAgICAgICAgICAgICAg
aW52aXNpYmxlTGluZVJvd3MucHVzaChsaW5lUm93KTsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChyZXN0b3JlU2Vs
ZWN0aW9uICYmICFzZWxlY3Rpb24pCi0gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IHRo
aXMuX2dldFNlbGVjdGlvbigpOwotICAgICAgICAgICAgICAgIHRoaXMuX3BhaW50TGluZShsaW5l
Um93KTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGFpbnRMaW5lc09wZXJhdGlvbnNDcmVk
aXQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlUGFpbnRMaW5lcyhs
aW5lTnVtYmVyICsgMSwgbGluZUNodW5rLmVuZExpbmUpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGludmlzaWJsZUxpbmVSb3dzLmxlbmd0aDsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAocmVzdG9yZVNlbGVjdGlvbiAmJiAhc2VsZWN0aW9uKQotICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlvbigpOwotICAgICAgICAgICAg
dGhpcy5fcGFpbnRMaW5lKGludmlzaWJsZUxpbmVSb3dzW2ldKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uKQotICAgICAgICAgICAgdGhpcy5fcmVzdG9yZVNlbGVj
dGlvbihzZWxlY3Rpb24pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0VsZW1l
bnR9IGxpbmVSb3cKLSAgICAgKi8KLSAgICBfcGFpbnRMaW5lOiBmdW5jdGlvbihsaW5lUm93KQot
ICAgIHsKLSAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBsaW5lUm93LmxpbmVOdW1iZXI7Ci0gICAg
ICAgIGlmICh0aGlzLl9kaXJ0eUxpbmVzKSB7Ci0gICAgICAgICAgICB0aGlzLl9zY2hlZHVsZVBh
aW50TGluZXMobGluZU51bWJlciwgbGluZU51bWJlciArIDEpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5iZWdpbkRvbVVwZGF0ZXMoKTsKLSAgICAgICAg
dHJ5IHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9zY2hlZHVsZWRQYWludExpbmVzIHx8IHRoaXMu
X3BhaW50TGluZXNPcGVyYXRpb25zQ3JlZGl0IDwgMCkgewotICAgICAgICAgICAgICAgIHRoaXMu
X3NjaGVkdWxlUGFpbnRMaW5lcyhsaW5lTnVtYmVyLCBsaW5lTnVtYmVyICsgMSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgaGlnaGxp
Z2h0ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiaGlnaGxpZ2h0
Iik7Ci0gICAgICAgICAgICBpZiAoIWhpZ2hsaWdodCkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgICAgIGxpbmVSb3cucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgIHZh
ciBsaW5lID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUobGluZU51bWJlcik7Ci0gICAgICAgICAgICBp
ZiAoIWxpbmUpCi0gICAgICAgICAgICAgICAgbGluZVJvdy5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJiciIpKTsKLQotICAgICAgICAgICAgdmFyIHBsYWluVGV4dFN0YXJ0ID0g
LTE7Ci0gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxpbmUubGVuZ3RoOykgewotICAg
ICAgICAgICAgICAgIGlmIChqID4gMTAwMCkgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IGxpbmUgaXMgdG9vIGxvbmcgLSBkbyBub3Qgd2FzdGUgY3ljbGVzIG9uIG1pbmlmaWVkIGpzIGhp
Z2hsaWdodGluZy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0ID09PSAt
MSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluVGV4dFN0YXJ0ID0gajsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZh
ciBhdHRyaWJ1dGUgPSBoaWdobGlnaHRbal07Ci0gICAgICAgICAgICAgICAgaWYgKCFhdHRyaWJ1
dGUgfHwgIWF0dHJpYnV0ZS50b2tlblR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBs
YWluVGV4dFN0YXJ0ID09PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluVGV4dFN0
YXJ0ID0gajsKLSAgICAgICAgICAgICAgICAgICAgaisrOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwbGFpblRleHRTdGFydCAhPT0gLTEpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZFRleHROb2RlKGxpbmVSb3csIGxpbmUu
c3Vic3RyaW5nKHBsYWluVGV4dFN0YXJ0LCBqKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw
bGFpblRleHRTdGFydCA9IC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgLS10aGlzLl9wYWlu
dExpbmVzT3BlcmF0aW9uc0NyZWRpdDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9hcHBlbmRTcGFuKGxpbmVSb3csIGxpbmUuc3Vic3RyaW5nKGosIGog
KyBhdHRyaWJ1dGUubGVuZ3RoKSwgYXR0cmlidXRlLnRva2VuVHlwZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGogKz0gYXR0cmlidXRlLmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgLS10aGlz
Ll9wYWludExpbmVzT3BlcmF0aW9uc0NyZWRpdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAocGxhaW5UZXh0U3RhcnQgIT09IC0xKSB7Ci0gICAgICAg
ICAgICAgICAgdGhpcy5fYXBwZW5kVGV4dE5vZGUobGluZVJvdywgbGluZS5zdWJzdHJpbmcocGxh
aW5UZXh0U3RhcnQsIGxpbmUubGVuZ3RoKSk7Ci0gICAgICAgICAgICAgICAgLS10aGlzLl9wYWlu
dExpbmVzT3BlcmF0aW9uc0NyZWRpdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChs
aW5lUm93LmRlY29yYXRpb25zRWxlbWVudCkKLSAgICAgICAgICAgICAgICBsaW5lUm93LmFwcGVu
ZENoaWxkKGxpbmVSb3cuZGVjb3JhdGlvbnNFbGVtZW50KTsKLSAgICAgICAgfSBmaW5hbGx5IHsK
LSAgICAgICAgICAgIGlmICh0aGlzLl9yYW5nZVRvTWFyayAmJiB0aGlzLl9yYW5nZVRvTWFyay5z
dGFydExpbmUgPT09IGxpbmVOdW1iZXIpCi0gICAgICAgICAgICAgICAgdGhpcy5fbWFya2VkUmFu
Z2VFbGVtZW50ID0gV2ViSW5zcGVjdG9yLmhpZ2hsaWdodFNlYXJjaFJlc3VsdChsaW5lUm93LCB0
aGlzLl9yYW5nZVRvTWFyay5zdGFydENvbHVtbiwgdGhpcy5fcmFuZ2VUb01hcmsuZW5kQ29sdW1u
IC0gdGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRDb2x1bW4pOwotICAgICAgICAgICAgdGhpcy5lbmRE
b21VcGRhdGVzKCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtFbGVtZW50fSBsaW5lUm93Ci0gICAgICovCi0gICAgX3JlbGVhc2VMaW5lc0hpZ2hsaWdodDog
ZnVuY3Rpb24obGluZVJvdykKLSAgICB7Ci0gICAgICAgIGlmICghbGluZVJvdykKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgaWYgKCJzcGFucyIgaW4gbGluZVJvdykgewotICAgICAgICAg
ICAgdmFyIHNwYW5zID0gbGluZVJvdy5zcGFuczsKLSAgICAgICAgICAgIGZvciAodmFyIGogPSAw
OyBqIDwgc3BhbnMubGVuZ3RoOyArK2opCi0gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkU3Bh
bnMucHVzaChzcGFuc1tqXSk7Ci0gICAgICAgICAgICBkZWxldGUgbGluZVJvdy5zcGFuczsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoInRleHROb2RlcyIgaW4gbGluZVJvdykgewotICAgICAgICAg
ICAgdmFyIHRleHROb2RlcyA9IGxpbmVSb3cudGV4dE5vZGVzOwotICAgICAgICAgICAgZm9yICh2
YXIgaiA9IDA7IGogPCB0ZXh0Tm9kZXMubGVuZ3RoOyArK2opCi0gICAgICAgICAgICAgICAgdGhp
cy5fY2FjaGVkVGV4dE5vZGVzLnB1c2godGV4dE5vZGVzW2pdKTsKLSAgICAgICAgICAgIGRlbGV0
ZSBsaW5lUm93LnRleHROb2RlczsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9jYWNoZWRSb3dz
LnB1c2gobGluZVJvdyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge1dlYklu
c3BlY3Rvci5UZXh0UmFuZ2V9Ci0gICAgICovCi0gICAgX2dldFNlbGVjdGlvbjogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsK
LSAgICAgICAgaWYgKCFzZWxlY3Rpb24ucmFuZ2VDb3VudCkKLSAgICAgICAgICAgIHJldHVybiBu
dWxsOwotICAgICAgICAvLyBTZWxlY3Rpb24gbWF5IGJlIG91dHNpZGUgb2YgdGhlIHZpZXdlci4K
LSAgICAgICAgaWYgKCF0aGlzLl9jb250YWluZXIuaXNBbmNlc3RvcihzZWxlY3Rpb24uYW5jaG9y
Tm9kZSkgfHwgIXRoaXMuX2NvbnRhaW5lci5pc0FuY2VzdG9yKHNlbGVjdGlvbi5mb2N1c05vZGUp
KQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHZhciBzdGFydCA9IHRoaXMuX3Nl
bGVjdGlvblRvUG9zaXRpb24oc2VsZWN0aW9uLmFuY2hvck5vZGUsIHNlbGVjdGlvbi5hbmNob3JP
ZmZzZXQpOwotICAgICAgICB2YXIgZW5kID0gc2VsZWN0aW9uLmlzQ29sbGFwc2VkID8gc3RhcnQg
OiB0aGlzLl9zZWxlY3Rpb25Ub1Bvc2l0aW9uKHNlbGVjdGlvbi5mb2N1c05vZGUsIHNlbGVjdGlv
bi5mb2N1c09mZnNldCk7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5n
ZShzdGFydC5saW5lLCBzdGFydC5jb2x1bW4sIGVuZC5saW5lLCBlbmQuY29sdW1uKTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtib29sZWFuPX0gc2Nyb2xsSW50b1ZpZXcKLSAg
ICAgKi8KLSAgICBfcmVzdG9yZVNlbGVjdGlvbjogZnVuY3Rpb24ocmFuZ2UsIHNjcm9sbEludG9W
aWV3KQotICAgIHsKLSAgICAgICAgaWYgKCFyYW5nZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5fcG9zaXRpb25Ub1NlbGVjdGlvbihyYW5nZS5zdGFydExp
bmUsIHJhbmdlLnN0YXJ0Q29sdW1uKTsKLSAgICAgICAgdmFyIGVuZCA9IHJhbmdlLmlzRW1wdHko
KSA/IHN0YXJ0IDogdGhpcy5fcG9zaXRpb25Ub1NlbGVjdGlvbihyYW5nZS5lbmRMaW5lLCByYW5n
ZS5lbmRDb2x1bW4pOwotICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4
dGVudChzdGFydC5jb250YWluZXIsIHN0YXJ0Lm9mZnNldCwgZW5kLmNvbnRhaW5lciwgZW5kLm9m
ZnNldCk7Ci0KLSAgICAgICAgaWYgKHNjcm9sbEludG9WaWV3KSB7Ci0gICAgICAgICAgICBmb3Ig
KHZhciBub2RlID0gZW5kLmNvbnRhaW5lcjsgbm9kZTsgbm9kZSA9IG5vZGUucGFyZW50RWxlbWVu
dCkgewotICAgICAgICAgICAgICAgIGlmIChub2RlLnNjcm9sbEludG9WaWV3SWZOZWVkZWQpIHsK
LSAgICAgICAgICAgICAgICAgICAgbm9kZS5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge05vZGV9IGNvbnRh
aW5lcgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQKLSAgICAgKi8KLSAgICBfc2VsZWN0
aW9uVG9Qb3NpdGlvbjogZnVuY3Rpb24oY29udGFpbmVyLCBvZmZzZXQpCi0gICAgewotICAgICAg
ICBpZiAoY29udGFpbmVyID09PSB0aGlzLl9jb250YWluZXIgJiYgb2Zmc2V0ID09PSAwKQotICAg
ICAgICAgICAgcmV0dXJuIHsgbGluZTogMCwgY29sdW1uOiAwIH07Ci0gICAgICAgIGlmIChjb250
YWluZXIgPT09IHRoaXMuX2NvbnRhaW5lciAmJiBvZmZzZXQgPT09IDEpCi0gICAgICAgICAgICBy
ZXR1cm4geyBsaW5lOiB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCAtIDEsIGNvbHVtbjogdGhp
cy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgodGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQgLSAxKSB9
OwotCi0gICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fZW5jbG9zaW5nTGluZVJvd09yU2VsZihj
b250YWluZXIpOwotICAgICAgICB2YXIgbGluZU51bWJlciA9IGxpbmVSb3cubGluZU51bWJlcjsK
LSAgICAgICAgaWYgKGNvbnRhaW5lciA9PT0gbGluZVJvdyAmJiBvZmZzZXQgPT09IDApCi0gICAg
ICAgICAgICByZXR1cm4geyBsaW5lOiBsaW5lTnVtYmVyLCBjb2x1bW46IDAgfTsKLQotICAgICAg
ICAvLyBUaGlzIG1heSBiZSBjaHVuayBhbmQgY2h1bmtzIG1heSBjb250YWluIFxuLgotICAgICAg
ICB2YXIgY29sdW1uID0gMDsKLSAgICAgICAgdmFyIG5vZGUgPSBsaW5lUm93Lm5vZGVUeXBlID09
PSBOb2RlLlRFWFRfTk9ERSA/IGxpbmVSb3cgOiBsaW5lUm93LnRyYXZlcnNlTmV4dFRleHROb2Rl
KGxpbmVSb3cpOwotICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlICE9PSBjb250YWluZXIpIHsK
LSAgICAgICAgICAgIHZhciB0ZXh0ID0gbm9kZS50ZXh0Q29udGVudDsKLSAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIGlm
ICh0ZXh0LmNoYXJBdChpKSA9PT0gIlxuIikgewotICAgICAgICAgICAgICAgICAgICBsaW5lTnVt
YmVyKys7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IDA7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGNvbHVtbisrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0VGV4dE5vZGUobGluZVJvdyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobm9kZSA9PT0gY29udGFpbmVyICYmIG9mZnNldCkgewotICAg
ICAgICAgICAgdmFyIHRleHQgPSBub2RlLnRleHRDb250ZW50OwotICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBvZmZzZXQ7ICsraSkgewotICAgICAgICAgICAgICAgIGlmICh0ZXh0LmNo
YXJBdChpKSA9PT0gIlxuIikgewotICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyKys7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IDA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIGNvbHVtbisrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiB7IGxpbmU6IGxpbmVOdW1iZXIsIGNvbHVtbjogY29sdW1uIH07Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lCi0gICAgICogQHBhcmFt
IHtudW1iZXJ9IGNvbHVtbgotICAgICAqLwotICAgIF9wb3NpdGlvblRvU2VsZWN0aW9uOiBmdW5j
dGlvbihsaW5lLCBjb2x1bW4pCi0gICAgewotICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLmNodW5r
Rm9yTGluZShsaW5lKTsKLSAgICAgICAgLy8gT25lLWxpbmVkIGNvbGxhcHNlZCBjaHVua3MgbWF5
IHN0aWxsIHN0YXkgaGlnaGxpZ2h0ZWQuCi0gICAgICAgIHZhciBsaW5lUm93ID0gY2h1bmsubGlu
ZXNDb3VudCA9PT0gMSA/IGNodW5rLmVsZW1lbnQgOiBjaHVuay5nZXRFeHBhbmRlZExpbmVSb3co
bGluZSk7Ci0gICAgICAgIGlmIChsaW5lUm93KQotICAgICAgICAgICAgdmFyIHJhbmdlQm91bmRh
cnkgPSBsaW5lUm93LnJhbmdlQm91bmRhcnlGb3JPZmZzZXQoY29sdW1uKTsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gY29sdW1uOwotICAgICAgICAgICAgZm9yICh2
YXIgaSA9IGNodW5rLnN0YXJ0TGluZTsgaSA8IGxpbmU7ICsraSkKLSAgICAgICAgICAgICAgICBv
ZmZzZXQgKz0gdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgoaSkgKyAxOyAvLyBcbgotICAgICAg
ICAgICAgbGluZVJvdyA9IGNodW5rLmVsZW1lbnQ7Ci0gICAgICAgICAgICBpZiAobGluZVJvdy5m
aXJzdENoaWxkKQotICAgICAgICAgICAgICAgIHZhciByYW5nZUJvdW5kYXJ5ID0geyBjb250YWlu
ZXI6IGxpbmVSb3cuZmlyc3RDaGlsZCwgb2Zmc2V0OiBvZmZzZXQgfTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICB2YXIgcmFuZ2VCb3VuZGFyeSA9IHsgY29udGFpbmVyOiBsaW5l
Um93LCBvZmZzZXQ6IDAgfTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmFuZ2VCb3VuZGFy
eTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50Ci0gICAg
ICovCi0gICAgX2VuY2xvc2luZ0xpbmVSb3dPclNlbGY6IGZ1bmN0aW9uKGVsZW1lbnQpCi0gICAg
ewotICAgICAgICB2YXIgbGluZVJvdyA9IGVsZW1lbnQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhD
bGFzcygid2Via2l0LWxpbmUtY29udGVudCIpOwotICAgICAgICBpZiAobGluZVJvdykKLSAgICAg
ICAgICAgIHJldHVybiBsaW5lUm93OwotCi0gICAgICAgIGZvciAobGluZVJvdyA9IGVsZW1lbnQ7
IGxpbmVSb3c7IGxpbmVSb3cgPSBsaW5lUm93LnBhcmVudEVsZW1lbnQpIHsKLSAgICAgICAgICAg
IGlmIChsaW5lUm93LnBhcmVudEVsZW1lbnQgPT09IHRoaXMuX2NvbnRhaW5lcikKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbGluZVJvdzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50Ci0gICAg
ICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NO
YW1lCi0gICAgICovCi0gICAgX2FwcGVuZFNwYW46IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQs
IGNsYXNzTmFtZSkKLSAgICB7Ci0gICAgICAgIGlmIChjbGFzc05hbWUgPT09ICJodG1sLXJlc291
cmNlLWxpbmsiIHx8IGNsYXNzTmFtZSA9PT0gImh0bWwtZXh0ZXJuYWwtbGluayIpIHsKLSAgICAg
ICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlTGluayhjb250ZW50LCBjbGFz
c05hbWUgPT09ICJodG1sLWV4dGVybmFsLWxpbmsiKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICB2YXIgc3BhbiA9IHRoaXMuX2NhY2hlZFNwYW5zLnBvcCgpIHx8
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgc3Bhbi5jbGFzc05hbWUg
PSAid2Via2l0LSIgKyBjbGFzc05hbWU7Ci0gICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSBjb250
ZW50OwotICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHNwYW4pOwotICAgICAgICBpZiAoISgi
c3BhbnMiIGluIGVsZW1lbnQpKQotICAgICAgICAgICAgZWxlbWVudC5zcGFucyA9IFtdOwotICAg
ICAgICBlbGVtZW50LnNwYW5zLnB1c2goc3Bhbik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudAotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0Ci0g
ICAgICovCi0gICAgX2FwcGVuZFRleHROb2RlOiBmdW5jdGlvbihlbGVtZW50LCB0ZXh0KQotICAg
IHsKLSAgICAgICAgdmFyIHRleHROb2RlID0gdGhpcy5fY2FjaGVkVGV4dE5vZGVzLnBvcCgpOwot
ICAgICAgICBpZiAodGV4dE5vZGUpCi0gICAgICAgICAgICB0ZXh0Tm9kZS5ub2RlVmFsdWUgPSB0
ZXh0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKHRleHQpOwotICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRleHROb2RlKTsK
LSAgICAgICAgaWYgKCEoInRleHROb2RlcyIgaW4gZWxlbWVudCkpCi0gICAgICAgICAgICBlbGVt
ZW50LnRleHROb2RlcyA9IFtdOwotICAgICAgICBlbGVtZW50LnRleHROb2Rlcy5wdXNoKHRleHRO
b2RlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQK
LSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzRXh0ZXJuYWwKLSAgICAgKi8KLSAgICBfY3JlYXRl
TGluazogZnVuY3Rpb24oY29udGVudCwgaXNFeHRlcm5hbCkKLSAgICB7Ci0gICAgICAgIHZhciBx
dW90ZSA9IGNvbnRlbnQuY2hhckF0KDApOwotICAgICAgICBpZiAoY29udGVudC5sZW5ndGggPiAx
ICYmIChxdW90ZSA9PT0gIlwiIiB8fCAgIHF1b3RlID09PSAiJyIpKQotICAgICAgICAgICAgY29u
dGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKDEsIGNvbnRlbnQubGVuZ3RoIC0gMSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHF1b3RlID0gbnVsbDsKLQotICAgICAgICB2YXIgYSA9IFdlYklu
c3BlY3Rvci5saW5raWZ5VVJMQXNOb2RlKHRoaXMuX3Jld3JpdGVIcmVmKGNvbnRlbnQpLCBjb250
ZW50LCB1bmRlZmluZWQsIGlzRXh0ZXJuYWwpOwotICAgICAgICB2YXIgc3BhbiA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSAid2Via2l0
LWh0bWwtYXR0cmlidXRlLXZhbHVlIjsKLSAgICAgICAgaWYgKHF1b3RlKQotICAgICAgICAgICAg
c3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShxdW90ZSkpOwotICAgICAg
ICBzcGFuLmFwcGVuZENoaWxkKGEpOwotICAgICAgICBpZiAocXVvdGUpCi0gICAgICAgICAgICBz
cGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHF1b3RlKSk7Ci0gICAgICAg
IHJldHVybiBzcGFuOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZz19
IGhyZWZWYWx1ZQotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGlzRXh0ZXJuYWwKLSAgICAgKi8K
LSAgICBfcmV3cml0ZUhyZWY6IGZ1bmN0aW9uKGhyZWZWYWx1ZSwgaXNFeHRlcm5hbCkKLSAgICB7
Ci0gICAgICAgIGlmICghdGhpcy5fdXJsIHx8ICFocmVmVmFsdWUgfHwgaHJlZlZhbHVlLmluZGV4
T2YoIjovLyIpID4gMCkKLSAgICAgICAgICAgIHJldHVybiBocmVmVmFsdWU7Ci0gICAgICAgIHJl
dHVybiBXZWJJbnNwZWN0b3IuY29tcGxldGVVUkwodGhpcy5fdXJsLCBocmVmVmFsdWUpOwotICAg
IH0sCi0KLSAgICBfaGFuZGxlRE9NVXBkYXRlczogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAg
IGlmICh0aGlzLl9kb21VcGRhdGVDb2FsZXNjaW5nTGV2ZWwpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0OwotICAgICAgICBpZiAodGFyZ2V0ID09
PSB0aGlzLl9jb250YWluZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGxp
bmVSb3cgPSB0aGlzLl9lbmNsb3NpbmdMaW5lUm93T3JTZWxmKHRhcmdldCk7Ci0gICAgICAgIGlm
ICghbGluZVJvdykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAobGluZVJvdy5k
ZWNvcmF0aW9uc0VsZW1lbnQgJiYgbGluZVJvdy5kZWNvcmF0aW9uc0VsZW1lbnQuaXNTZWxmT3JB
bmNlc3Rvcih0YXJnZXQpKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5fc3luY0RlY29yYXRpb25z
Rm9yTGluZUxpc3RlbmVyKQotICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNEZWNvcmF0aW9uc0Zv
ckxpbmVMaXN0ZW5lcihsaW5lUm93LmxpbmVOdW1iZXIpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMuX3JlYWRPbmx5KQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGlmICh0YXJnZXQgPT09IGxpbmVSb3cgJiYgZS50eXBlID09PSAiRE9N
Tm9kZUluc2VydGVkIikgewotICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIG5ld2x5IGlu
c2VydGVkIGxpbmUgcm93IGhhcyBubyBsaW5lTnVtYmVyLgotICAgICAgICAgICAgZGVsZXRlIGxp
bmVSb3cubGluZU51bWJlcjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBzdGFydExpbmUgPSAw
OwotICAgICAgICBmb3IgKHZhciByb3cgPSBsaW5lUm93OyByb3c7IHJvdyA9IHJvdy5wcmV2aW91
c1NpYmxpbmcpIHsKLSAgICAgICAgICAgIGlmICh0eXBlb2Ygcm93LmxpbmVOdW1iZXIgPT09ICJu
dW1iZXIiKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRMaW5lID0gcm93LmxpbmVOdW1iZXI7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICB2YXIgZW5kTGluZSA9IHN0YXJ0TGluZSArIDE7Ci0gICAgICAgIGZvciAodmFyIHJvdyA9IGxp
bmVSb3cubmV4dFNpYmxpbmc7IHJvdzsgcm93ID0gcm93Lm5leHRTaWJsaW5nKSB7Ci0gICAgICAg
ICAgICBpZiAodHlwZW9mIHJvdy5saW5lTnVtYmVyID09PSAibnVtYmVyIiAmJiByb3cubGluZU51
bWJlciA+IHN0YXJ0TGluZSkgewotICAgICAgICAgICAgICAgIGVuZExpbmUgPSByb3cubGluZU51
bWJlcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICh0YXJnZXQgPT09IGxpbmVSb3cgJiYgZS50eXBlID09PSAiRE9NTm9kZVJl
bW92ZWQiKSB7Ci0gICAgICAgICAgICAvLyBOb3cgdGhpcyB3aWxsIG5vIGxvbmdlciBiZSB2YWxp
ZC4KLSAgICAgICAgICAgIGRlbGV0ZSBsaW5lUm93LmxpbmVOdW1iZXI7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAodGhpcy5fZGlydHlMaW5lcykgewotICAgICAgICAgICAgdGhpcy5fZGlydHlM
aW5lcy5zdGFydCA9IE1hdGgubWluKHRoaXMuX2RpcnR5TGluZXMuc3RhcnQsIHN0YXJ0TGluZSk7
Ci0gICAgICAgICAgICB0aGlzLl9kaXJ0eUxpbmVzLmVuZCA9IE1hdGgubWF4KHRoaXMuX2RpcnR5
TGluZXMuZW5kLCBlbmRMaW5lKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMu
X2RpcnR5TGluZXMgPSB7IHN0YXJ0OiBzdGFydExpbmUsIGVuZDogZW5kTGluZSB9OwotICAgICAg
ICAgICAgc2V0VGltZW91dCh0aGlzLl9hcHBseURvbVVwZGF0ZXMuYmluZCh0aGlzKSwgMCk7Ci0g
ICAgICAgICAgICAvLyBSZW1vdmUgbWFya2VkIHJhbmdlcywgaWYgYW55LgotICAgICAgICAgICAg
dGhpcy5tYXJrQW5kUmV2ZWFsUmFuZ2UobnVsbCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAg
X2FwcGx5RG9tVXBkYXRlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9k
aXJ0eUxpbmVzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIENoZWNrIGlmIHRo
ZSBlZGl0b3IgaGFkIGJlZW4gc2V0IHJlYWRPbmx5IGJ5IHRoZSBtb21lbnQgd2hlbiB0aGlzIGFz
eW5jIGNhbGxiYWNrIGdvdCBleGVjdXRlZC4KLSAgICAgICAgaWYgKHRoaXMuX3JlYWRPbmx5KSB7
Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fZGlydHlMaW5lczsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBkaXJ0eUxpbmVzID0gdGhpcy5fZGlydHlMaW5l
czsKLQotICAgICAgICB2YXIgZmlyc3RDaHVua051bWJlciA9IHRoaXMuX2NodW5rTnVtYmVyRm9y
TGluZShkaXJ0eUxpbmVzLnN0YXJ0KTsKLSAgICAgICAgdmFyIHN0YXJ0TGluZSA9IHRoaXMuX3Rl
eHRDaHVua3NbZmlyc3RDaHVua051bWJlcl0uc3RhcnRMaW5lOwotICAgICAgICB2YXIgZW5kTGlu
ZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50OwotCi0gICAgICAgIC8vIENvbGxlY3QgbGlu
ZXMuCi0gICAgICAgIHZhciBmaXJzdExpbmVSb3c7Ci0gICAgICAgIGlmIChmaXJzdENodW5rTnVt
YmVyKSB7Ci0gICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2ZpcnN0Q2h1
bmtOdW1iZXIgLSAxXTsKLSAgICAgICAgICAgIGZpcnN0TGluZVJvdyA9IGNodW5rLmV4cGFuZGVk
ID8gY2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93KGNodW5rLnN0YXJ0TGluZSArIGNodW5rLmxpbmVz
Q291bnQgLSAxKSA6IGNodW5rLmVsZW1lbnQ7Ci0gICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBm
aXJzdExpbmVSb3cubmV4dFNpYmxpbmc7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZmly
c3RMaW5lUm93ID0gdGhpcy5fY29udGFpbmVyLmZpcnN0Q2hpbGQ7Ci0KLSAgICAgICAgdmFyIGxp
bmVzID0gW107Ci0gICAgICAgIGZvciAodmFyIGxpbmVSb3cgPSBmaXJzdExpbmVSb3c7IGxpbmVS
b3c7IGxpbmVSb3cgPSBsaW5lUm93Lm5leHRTaWJsaW5nKSB7Ci0gICAgICAgICAgICBpZiAodHlw
ZW9mIGxpbmVSb3cubGluZU51bWJlciA9PT0gIm51bWJlciIgJiYgbGluZVJvdy5saW5lTnVtYmVy
ID49IGRpcnR5TGluZXMuZW5kKSB7Ci0gICAgICAgICAgICAgICAgZW5kTGluZSA9IGxpbmVSb3cu
bGluZU51bWJlcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIC8vIFVwZGF0ZSB3aXRoIHRoZSBuZXdlc3QgbGluZU51bWJlciwgc28gdGhhdCB0aGUg
Y2FsbCB0byB0aGUgX2dldFNlbGVjdGlvbiBtZXRob2QgYmVsb3cgc2hvdWxkIHdvcmsuCi0gICAg
ICAgICAgICBsaW5lUm93LmxpbmVOdW1iZXIgPSBzdGFydExpbmUgKyBsaW5lcy5sZW5ndGg7Ci0g
ICAgICAgICAgICB0aGlzLl9jb2xsZWN0TGluZXNGcm9tRGl2KGxpbmVzLCBsaW5lUm93KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIFRyeSB0byBkZWNyZWFzZSB0aGUgcmFuZ2UgYmVpbmcgcmVw
bGFjZWQsIGlmIHBvc3NpYmxlLgotICAgICAgICB2YXIgc3RhcnRPZmZzZXQgPSAwOwotICAgICAg
ICB3aGlsZSAoc3RhcnRMaW5lIDwgZGlydHlMaW5lcy5zdGFydCAmJiBzdGFydE9mZnNldCA8IGxp
bmVzLmxlbmd0aCkgewotICAgICAgICAgICAgaWYgKHRoaXMuX3RleHRNb2RlbC5saW5lKHN0YXJ0
TGluZSkgIT09IGxpbmVzW3N0YXJ0T2Zmc2V0XSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICsrc3RhcnRPZmZzZXQ7Ci0gICAgICAgICAgICArK3N0YXJ0TGluZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZhciBlbmRPZmZzZXQgPSBsaW5lcy5sZW5ndGg7Ci0gICAgICAgIHdo
aWxlIChlbmRMaW5lID4gZGlydHlMaW5lcy5lbmQgJiYgZW5kT2Zmc2V0ID4gc3RhcnRPZmZzZXQp
IHsKLSAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0TW9kZWwubGluZShlbmRMaW5lIC0gMSkgIT09
IGxpbmVzW2VuZE9mZnNldCAtIDFdKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgLS1lbmRPZmZzZXQ7Ci0gICAgICAgICAgICAtLWVuZExpbmU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBsaW5lcyA9IGxpbmVzLnNsaWNlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotCi0gICAg
ICAgIC8vIFRyeSB0byBkZWNyZWFzZSB0aGUgcmFuZ2UgYmVpbmcgcmVwbGFjZWQgYnkgY29sdW1u
IG9mZnNldHMsIGlmIHBvc3NpYmxlLgotICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSAwOwotICAg
ICAgICB2YXIgZW5kQ29sdW1uID0gdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgoZW5kTGluZSAt
IDEpOwotICAgICAgICBpZiAobGluZXMubGVuZ3RoID4gMCkgewotICAgICAgICAgICAgdmFyIGxp
bmUxID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUoc3RhcnRMaW5lKTsKLSAgICAgICAgICAgIHZhciBs
aW5lMiA9IGxpbmVzWzBdOwotICAgICAgICAgICAgd2hpbGUgKGxpbmUxW3N0YXJ0Q29sdW1uXSAm
JiBsaW5lMVtzdGFydENvbHVtbl0gPT09IGxpbmUyW3N0YXJ0Q29sdW1uXSkKLSAgICAgICAgICAg
ICAgICArK3N0YXJ0Q29sdW1uOwotICAgICAgICAgICAgbGluZXNbMF0gPSBsaW5lMi5zdWJzdHJp
bmcoc3RhcnRDb2x1bW4pOwotCi0gICAgICAgICAgICBsaW5lMSA9IHRoaXMuX3RleHRNb2RlbC5s
aW5lKGVuZExpbmUgLSAxKTsKLSAgICAgICAgICAgIGxpbmUyID0gbGluZXNbbGluZXMubGVuZ3Ro
IC0gMV07Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuZENvbHVtbiAmJiBpIDwg
bGluZTIubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RhcnRMaW5lID09PSBl
bmRMaW5lIC0gMSAmJiBlbmRDb2x1bW4gLSBpIDw9IHN0YXJ0Q29sdW1uKQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAobGluZTFbZW5kQ29sdW1uIC0gaSAt
IDFdICE9PSBsaW5lMltsaW5lMi5sZW5ndGggLSBpIC0gMV0pCi0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGkpIHsKLSAgICAgICAgICAg
ICAgICBlbmRDb2x1bW4gLT0gaTsKLSAgICAgICAgICAgICAgICBsaW5lc1tsaW5lcy5sZW5ndGgg
LSAxXSA9IGxpbmUyLnN1YnN0cmluZygwLCBsaW5lMi5sZW5ndGggLSBpKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLl9nZXRTZWxlY3Rp
b24oKTsKLQotICAgICAgICBpZiAobGluZXMubGVuZ3RoID09PSAwICYmIGVuZExpbmUgPCB0aGlz
Ll90ZXh0TW9kZWwubGluZXNDb3VudCkKLSAgICAgICAgICAgIHZhciBvbGRSYW5nZSA9IG5ldyBX
ZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHN0YXJ0TGluZSwgMCwgZW5kTGluZSwgMCk7Ci0gICAgICAg
IGVsc2UgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMCAmJiBzdGFydExpbmUgPiAwKQotICAgICAgICAg
ICAgdmFyIG9sZFJhbmdlID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2Uoc3RhcnRMaW5lIC0g
MSwgdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgoc3RhcnRMaW5lIC0gMSksIGVuZExpbmUgLSAx
LCB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChlbmRMaW5lIC0gMSkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB2YXIgb2xkUmFuZ2UgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShz
dGFydExpbmUsIHN0YXJ0Q29sdW1uLCBlbmRMaW5lIC0gMSwgZW5kQ29sdW1uKTsKLQotICAgICAg
ICB2YXIgbmV3Q29udGVudCA9IGxpbmVzLmpvaW4oIlxuIik7Ci0gICAgICAgIGlmICh0aGlzLl90
ZXh0TW9kZWwuY29weVJhbmdlKG9sZFJhbmdlKSA9PT0gbmV3Q29udGVudCkgewotICAgICAgICAg
ICAgZGVsZXRlIHRoaXMuX2RpcnR5TGluZXM7Ci0gICAgICAgICAgICByZXR1cm47IC8vIE5vb3AK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoaXMgaXMgYSAiZm9yZWlnbiIgY2FsbCBvdXRzaWRl
IG9mIHRoaXMgY2xhc3MuIFNob3VsZCBiZSBiZWZvcmUgd2UgZGVsZXRlIHRoZSBkaXJ0eSBsaW5l
cyBmbGFnLgotICAgICAgICB0aGlzLl9lbnRlclRleHRDaGFuZ2VNb2RlKCk7Ci0KLSAgICAgICAg
ZGVsZXRlIHRoaXMuX2RpcnR5TGluZXM7Ci0KLSAgICAgICAgdmFyIG5ld1JhbmdlID0gdGhpcy5f
ZWRpdFJhbmdlKG9sZFJhbmdlLCBuZXdDb250ZW50KTsKLQotICAgICAgICB0aGlzLl9wYWludFNj
aGVkdWxlZExpbmVzKHRydWUpOwotICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0aW9uKHNlbGVj
dGlvbik7Ci0KLSAgICAgICAgdGhpcy5fZXhpdFRleHRDaGFuZ2VNb2RlKG9sZFJhbmdlLCBuZXdS
YW5nZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRl
eHRSYW5nZX0gb2xkUmFuZ2UKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9
IG5ld1JhbmdlCi0gICAgICovCi0gICAgdGV4dENoYW5nZWQ6IGZ1bmN0aW9uKG9sZFJhbmdlLCBu
ZXdSYW5nZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVzKCk7Ci0gICAgICAg
IHRoaXMuX3JlbW92ZURlY29yYXRpb25zSW5SYW5nZShvbGRSYW5nZSk7Ci0gICAgICAgIHRoaXMu
X3VwZGF0ZUNodW5rc0ZvclJhbmdlcyhvbGRSYW5nZSwgbmV3UmFuZ2UpOwotICAgICAgICB0aGlz
Ll91cGRhdGVIaWdobGlnaHRzRm9yUmFuZ2UobmV3UmFuZ2UpOwotICAgICAgICB0aGlzLmVuZERv
bVVwZGF0ZXMoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0
b3IuVGV4dFJhbmdlfSByYW5nZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0Ci0gICAgICov
Ci0gICAgX2VkaXRSYW5nZTogZnVuY3Rpb24ocmFuZ2UsIHRleHQpCi0gICAgewotICAgICAgICBp
ZiAodGhpcy5fbGFzdEVkaXRlZFJhbmdlICYmICghdGV4dCB8fCB0ZXh0LmluZGV4T2YoIlxuIikg
IT09IC0xIHx8IHRoaXMuX2xhc3RFZGl0ZWRSYW5nZS5lbmRMaW5lICE9PSByYW5nZS5zdGFydExp
bmUgfHwgdGhpcy5fbGFzdEVkaXRlZFJhbmdlLmVuZENvbHVtbiAhPT0gcmFuZ2Uuc3RhcnRDb2x1
bW4pKQotICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLm1hcmtVbmRvYWJsZVN0YXRlKCk7Ci0K
LSAgICAgICAgdmFyIG5ld1JhbmdlID0gdGhpcy5fdGV4dE1vZGVsLmVkaXRSYW5nZShyYW5nZSwg
dGV4dCk7Ci0gICAgICAgIHRoaXMuX2xhc3RFZGl0ZWRSYW5nZSA9IG5ld1JhbmdlOwotCi0gICAg
ICAgIHJldHVybiBuZXdSYW5nZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSByYW5nZQotICAgICAqLwotICAgIF9yZW1vdmVEZWNvcmF0
aW9uc0luUmFuZ2U6IGZ1bmN0aW9uKHJhbmdlKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9
IHRoaXMuX2NodW5rTnVtYmVyRm9yTGluZShyYW5nZS5zdGFydExpbmUpOyBpIDwgdGhpcy5fdGV4
dENodW5rcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fdGV4
dENodW5rc1tpXTsKLSAgICAgICAgICAgIGlmIChjaHVuay5zdGFydExpbmUgPiByYW5nZS5lbmRM
aW5lKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2h1bmsucmVtb3ZlQWxs
RGVjb3JhdGlvbnMoKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9IG9sZFJhbmdlCi0gICAgICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuVGV4dFJhbmdlfSBuZXdSYW5nZQotICAgICAqLwotICAgIF91cGRhdGVDaHVua3NG
b3JSYW5nZXM6IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSkKLSAgICB7Ci0gICAgICAgIC8v
IFVwZGF0ZSB0aGUgY2h1bmtzIGluIHJhbmdlOiBmaXJzdENodW5rTnVtYmVyIDw9IGluZGV4IDw9
IGxhc3RDaHVua051bWJlcgotICAgICAgICB2YXIgZmlyc3RDaHVua051bWJlciA9IHRoaXMuX2No
dW5rTnVtYmVyRm9yTGluZShvbGRSYW5nZS5zdGFydExpbmUpOwotICAgICAgICB2YXIgbGFzdENo
dW5rTnVtYmVyID0gZmlyc3RDaHVua051bWJlcjsKLSAgICAgICAgd2hpbGUgKGxhc3RDaHVua051
bWJlciArIDEgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aCkgewotICAgICAgICAgICAgaWYgKHRo
aXMuX3RleHRDaHVua3NbbGFzdENodW5rTnVtYmVyICsgMV0uc3RhcnRMaW5lID4gb2xkUmFuZ2Uu
ZW5kTGluZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICsrbGFzdENodW5r
TnVtYmVyOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHN0YXJ0TGluZSA9IHRoaXMuX3RleHRD
aHVua3NbZmlyc3RDaHVua051bWJlcl0uc3RhcnRMaW5lOwotICAgICAgICB2YXIgbGluZXNDb3Vu
dCA9IHRoaXMuX3RleHRDaHVua3NbbGFzdENodW5rTnVtYmVyXS5zdGFydExpbmUgKyB0aGlzLl90
ZXh0Q2h1bmtzW2xhc3RDaHVua051bWJlcl0ubGluZXNDb3VudCAtIHN0YXJ0TGluZTsKLSAgICAg
ICAgdmFyIGxpbmVzRGlmZiA9IG5ld1JhbmdlLmxpbmVzQ291bnQgLSBvbGRSYW5nZS5saW5lc0Nv
dW50OwotICAgICAgICBsaW5lc0NvdW50ICs9IGxpbmVzRGlmZjsKLQotICAgICAgICBpZiAobGlu
ZXNEaWZmKSB7Ci0gICAgICAgICAgICAvLyBMaW5lcyBzaGlmdGVkLCB1cGRhdGUgdGhlIGxpbmUg
bnVtYmVycyBvZiB0aGUgY2h1bmtzIGJlbG93LgotICAgICAgICAgICAgZm9yICh2YXIgY2h1bmtO
dW1iZXIgPSBsYXN0Q2h1bmtOdW1iZXIgKyAxOyBjaHVua051bWJlciA8IHRoaXMuX3RleHRDaHVu
a3MubGVuZ3RoOyArK2NodW5rTnVtYmVyKQotICAgICAgICAgICAgICAgIHRoaXMuX3RleHRDaHVu
a3NbY2h1bmtOdW1iZXJdLnN0YXJ0TGluZSArPSBsaW5lc0RpZmY7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2YXIgZmlyc3RMaW5lUm93OwotICAgICAgICBpZiAoZmlyc3RDaHVua051bWJlcikgewot
ICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fdGV4dENodW5rc1tmaXJzdENodW5rTnVtYmVy
IC0gMV07Ci0gICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBjaHVuay5leHBhbmRlZCA/IGNodW5r
LmdldEV4cGFuZGVkTGluZVJvdyhjaHVuay5zdGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50IC0g
MSkgOiBjaHVuay5lbGVtZW50OwotICAgICAgICAgICAgZmlyc3RMaW5lUm93ID0gZmlyc3RMaW5l
Um93Lm5leHRTaWJsaW5nOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGZpcnN0TGluZVJv
dyA9IHRoaXMuX2NvbnRhaW5lci5maXJzdENoaWxkOwotCi0gICAgICAgIC8vIE1vc3QgZnJlcXVl
bnQgY2FzZTogYSBjaHVuayByZW1haW5lZCB0aGUgc2FtZS4KLSAgICAgICAgZm9yICh2YXIgY2h1
bmtOdW1iZXIgPSBmaXJzdENodW5rTnVtYmVyOyBjaHVua051bWJlciA8PSBsYXN0Q2h1bmtOdW1i
ZXI7ICsrY2h1bmtOdW1iZXIpIHsKLSAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRD
aHVua3NbY2h1bmtOdW1iZXJdOwotICAgICAgICAgICAgaWYgKGNodW5rLnN0YXJ0TGluZSArIGNo
dW5rLmxpbmVzQ291bnQgPiB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gY2h1bmsuc3RhcnRMaW5l
OwotICAgICAgICAgICAgZm9yICh2YXIgbGluZVJvdyA9IGZpcnN0TGluZVJvdzsgbGluZVJvdyAm
JiBsaW5lTnVtYmVyIDwgY2h1bmsuc3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3VudDsgbGluZVJv
dyA9IGxpbmVSb3cubmV4dFNpYmxpbmcpIHsKLSAgICAgICAgICAgICAgICBpZiAobGluZVJvdy5s
aW5lTnVtYmVyICE9PSBsaW5lTnVtYmVyIHx8IGxpbmVSb3cgIT09IGNodW5rLmdldEV4cGFuZGVk
TGluZVJvdyhsaW5lTnVtYmVyKSB8fCBsaW5lUm93LnRleHRDb250ZW50ICE9PSB0aGlzLl90ZXh0
TW9kZWwubGluZShsaW5lTnVtYmVyKSB8fCAhbGluZVJvdy5maXJzdENoaWxkKQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAobGluZU51bWJlciA8IGNodW5rLnN0YXJ0TGluZSArIGNo
dW5rLmxpbmVzQ291bnQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjaHVu
ay51cGRhdGVDb2xsYXBzZWRMaW5lUm93KCk7Ci0gICAgICAgICAgICArK2ZpcnN0Q2h1bmtOdW1i
ZXI7Ci0gICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBsaW5lUm93OwotICAgICAgICAgICAgc3Rh
cnRMaW5lICs9IGNodW5rLmxpbmVzQ291bnQ7Ci0gICAgICAgICAgICBsaW5lc0NvdW50IC09IGNo
dW5rLmxpbmVzQ291bnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZmlyc3RDaHVua051bWJl
ciA+IGxhc3RDaHVua051bWJlciAmJiBsaW5lc0NvdW50ID09PSAwKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIC8vIE1heWJlIG1lcmdlIHdpdGggdGhlIG5leHQgY2h1bmssIHNvIHRo
YXQgd2Ugc2hvdWxkIG5vdCBjcmVhdGUgMS1zaXplZCBjaHVua3Mgd2hlbiBhcHBlbmRpbmcgbmV3
IGxpbmVzIG9uZSBieSBvbmUuCi0gICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3Nb
bGFzdENodW5rTnVtYmVyICsgMV07Ci0gICAgICAgIHZhciBsaW5lc0luTGFzdENodW5rID0gbGlu
ZXNDb3VudCAlIHRoaXMuX2RlZmF1bHRDaHVua1NpemU7Ci0gICAgICAgIGlmIChjaHVuayAmJiAh
Y2h1bmsuZGVjb3JhdGVkICYmIGxpbmVzSW5MYXN0Q2h1bmsgPiAwICYmIGxpbmVzSW5MYXN0Q2h1
bmsgKyBjaHVuay5saW5lc0NvdW50IDw9IHRoaXMuX2RlZmF1bHRDaHVua1NpemUpIHsKLSAgICAg
ICAgICAgICsrbGFzdENodW5rTnVtYmVyOwotICAgICAgICAgICAgbGluZXNDb3VudCArPSBjaHVu
ay5saW5lc0NvdW50OwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHNjcm9sbFRvcCA9IHRoaXMu
ZWxlbWVudC5zY3JvbGxUb3A7Ci0gICAgICAgIHZhciBzY3JvbGxMZWZ0ID0gdGhpcy5lbGVtZW50
LnNjcm9sbExlZnQ7Ci0KLSAgICAgICAgLy8gRGVsZXRlIGFsbCBET00gZWxlbWVudHMgdGhhdCB3
ZXJlIGVpdGhlciBjb250cm9sbGVkIGJ5IHRoZSBvbGQgY2h1bmtzLCBvciBoYXZlIGp1c3QgYmVl
biBpbnNlcnRlZC4KLSAgICAgICAgdmFyIGZpcnN0VW5tb2RpZmllZExpbmVSb3cgPSBudWxsOwot
ICAgICAgICBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbbGFzdENodW5rTnVtYmVyICsgMV07Ci0g
ICAgICAgIGlmIChjaHVuaykKLSAgICAgICAgICAgIGZpcnN0VW5tb2RpZmllZExpbmVSb3cgPSBj
aHVuay5leHBhbmRlZCA/IGNodW5rLmdldEV4cGFuZGVkTGluZVJvdyhjaHVuay5zdGFydExpbmUp
IDogY2h1bmsuZWxlbWVudDsKLQotICAgICAgICB3aGlsZSAoZmlyc3RMaW5lUm93ICYmIGZpcnN0
TGluZVJvdyAhPT0gZmlyc3RVbm1vZGlmaWVkTGluZVJvdykgewotICAgICAgICAgICAgdmFyIGxp
bmVSb3cgPSBmaXJzdExpbmVSb3c7Ci0gICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBmaXJzdExp
bmVSb3cubmV4dFNpYmxpbmc7Ci0gICAgICAgICAgICB0aGlzLl9jb250YWluZXIucmVtb3ZlQ2hp
bGQobGluZVJvdyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXBsYWNlIG9sZCBjaHVua3Mg
d2l0aCB0aGUgbmV3IG9uZXMuCi0gICAgICAgIGZvciAodmFyIGNodW5rTnVtYmVyID0gZmlyc3RD
aHVua051bWJlcjsgbGluZXNDb3VudCA+IDA7ICsrY2h1bmtOdW1iZXIpIHsKLSAgICAgICAgICAg
IHZhciBjaHVua0xpbmVzQ291bnQgPSBNYXRoLm1pbih0aGlzLl9kZWZhdWx0Q2h1bmtTaXplLCBs
aW5lc0NvdW50KTsKLSAgICAgICAgICAgIHZhciBuZXdDaHVuayA9IHRoaXMuX2NyZWF0ZU5ld0No
dW5rKHN0YXJ0TGluZSwgc3RhcnRMaW5lICsgY2h1bmtMaW5lc0NvdW50KTsKLSAgICAgICAgICAg
IHRoaXMuX2NvbnRhaW5lci5pbnNlcnRCZWZvcmUobmV3Q2h1bmsuZWxlbWVudCwgZmlyc3RVbm1v
ZGlmaWVkTGluZVJvdyk7Ci0KLSAgICAgICAgICAgIGlmIChjaHVua051bWJlciA8PSBsYXN0Q2h1
bmtOdW1iZXIpCi0gICAgICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rc1tjaHVua051bWJlcl0g
PSBuZXdDaHVuazsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzLl90ZXh0
Q2h1bmtzLnNwbGljZShjaHVua051bWJlciwgMCwgbmV3Q2h1bmspOwotICAgICAgICAgICAgc3Rh
cnRMaW5lICs9IGNodW5rTGluZXNDb3VudDsKLSAgICAgICAgICAgIGxpbmVzQ291bnQgLT0gY2h1
bmtMaW5lc0NvdW50OwotICAgICAgICB9Ci0gICAgICAgIGlmIChjaHVua051bWJlciA8PSBsYXN0
Q2h1bmtOdW1iZXIpCi0gICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnNwbGljZShjaHVua051
bWJlciwgbGFzdENodW5rTnVtYmVyIC0gY2h1bmtOdW1iZXIgKyAxKTsKLQotICAgICAgICB0aGlz
LmVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wOwotICAgICAgICB0aGlzLmVsZW1lbnQuc2Ny
b2xsTGVmdCA9IHNjcm9sbExlZnQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLlRleHRSYW5nZX0gcmFuZ2UKLSAgICAgKi8KLSAgICBfdXBkYXRlSGlnaGxp
Z2h0c0ZvclJhbmdlOiBmdW5jdGlvbihyYW5nZSkKLSAgICB7Ci0gICAgICAgIHZhciB2aXNpYmxl
RnJvbSA9IHRoaXMuZWxlbWVudC5zY3JvbGxUb3A7Ci0gICAgICAgIHZhciB2aXNpYmxlVG8gPSB0
aGlzLmVsZW1lbnQuc2Nyb2xsVG9wICsgdGhpcy5lbGVtZW50LmNsaWVudEhlaWdodDsKLQotICAg
ICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZmluZFZpc2libGVDaHVua3ModmlzaWJsZUZyb20sIHZp
c2libGVUbyk7Ci0gICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbcmVzdWx0LmVu
ZCAtIDFdOwotICAgICAgICB2YXIgbGFzdFZpc2libGVMaW5lID0gY2h1bmsuc3RhcnRMaW5lICsg
Y2h1bmsubGluZXNDb3VudDsKLQotICAgICAgICBsYXN0VmlzaWJsZUxpbmUgPSBNYXRoLm1heChs
YXN0VmlzaWJsZUxpbmUsIHJhbmdlLmVuZExpbmUgKyAxKTsKLSAgICAgICAgbGFzdFZpc2libGVM
aW5lID0gTWF0aC5taW4obGFzdFZpc2libGVMaW5lLCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3Vu
dCk7Ci0KLSAgICAgICAgdmFyIHVwZGF0ZWQgPSB0aGlzLl9oaWdobGlnaHRlci51cGRhdGVIaWdo
bGlnaHQocmFuZ2Uuc3RhcnRMaW5lLCBsYXN0VmlzaWJsZUxpbmUpOwotICAgICAgICBpZiAoIXVw
ZGF0ZWQpIHsKLSAgICAgICAgICAgIC8vIEhpZ2hsaWdodHMgZm9yIHRoZSBjaHVua3MgYmVsb3cg
YXJlIGludmFsaWQsIHNvIGp1c3QgY29sbGFwc2UgdGhlbS4KLSAgICAgICAgICAgIGZvciAodmFy
IGkgPSB0aGlzLl9jaHVua051bWJlckZvckxpbmUocmFuZ2Uuc3RhcnRMaW5lKTsgaSA8IHRoaXMu
X3RleHRDaHVua3MubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgdGhpcy5fdGV4dENodW5r
c1tpXS5leHBhbmRlZCA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fcmVwYWlu
dEFsbCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+
fSBsaW5lcwotICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudAotICAgICAqLwotICAgIF9j
b2xsZWN0TGluZXNGcm9tRGl2OiBmdW5jdGlvbihsaW5lcywgZWxlbWVudCkKLSAgICB7Ci0gICAg
ICAgIHZhciB0ZXh0Q29udGVudHMgPSBbXTsKLSAgICAgICAgdmFyIG5vZGUgPSBlbGVtZW50Lm5v
ZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSA/IGVsZW1lbnQgOiBlbGVtZW50LnRyYXZlcnNlTmV4
dE5vZGUoZWxlbWVudCk7Ci0gICAgICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgICAgICBpZiAo
ZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQgPT09IG5vZGUpIHsKLSAgICAgICAgICAgICAgICBu
b2RlID0gbm9kZS5uZXh0U2libGluZzsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09
ICJiciIpCi0gICAgICAgICAgICAgICAgdGV4dENvbnRlbnRzLnB1c2goIlxuIik7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkKLSAgICAgICAg
ICAgICAgICB0ZXh0Q29udGVudHMucHVzaChub2RlLnRleHRDb250ZW50KTsKLSAgICAgICAgICAg
IG5vZGUgPSBub2RlLnRyYXZlcnNlTmV4dE5vZGUoZWxlbWVudCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2YXIgdGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudHMuam9pbigiIik7Ci0gICAgICAgIC8v
IFRoZSBsYXN0IFxuIChpZiBhbnkpIGRvZXMgbm90ICJjb3VudCIgaW4gYSBESVYuCi0gICAgICAg
IHRleHRDb250ZW50ID0gdGV4dENvbnRlbnQucmVwbGFjZSgvXG4kLywgIiIpOwotCi0gICAgICAg
IHRleHRDb250ZW50cyA9IHRleHRDb250ZW50LnNwbGl0KCJcbiIpOwotICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHRleHRDb250ZW50cy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGxpbmVz
LnB1c2godGV4dENvbnRlbnRzW2ldKTsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTWFpblBhbmVsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ckNodW5rZWRQYW5lbC5wcm90b3R5cGU7Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsfSBjaHVua2VkUGFuZWwKLSAq
IEBwYXJhbSB7bnVtYmVyfSBzdGFydExpbmUKLSAqIEBwYXJhbSB7bnVtYmVyfSBlbmRMaW5lCi0q
LwotV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsgPSBmdW5jdGlvbihjaHVua2VkUGFu
ZWwsIHN0YXJ0TGluZSwgZW5kTGluZSkKLXsKLSAgICB0aGlzLl9jaHVua2VkUGFuZWwgPSBjaHVu
a2VkUGFuZWw7Ci0gICAgdGhpcy5fdGV4dE1vZGVsID0gY2h1bmtlZFBhbmVsLl90ZXh0TW9kZWw7
Ci0KLSAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAg
ICB0aGlzLmVsZW1lbnQubGluZU51bWJlciA9IHN0YXJ0TGluZTsKLSAgICB0aGlzLmVsZW1lbnQu
Y2xhc3NOYW1lID0gIndlYmtpdC1saW5lLWNvbnRlbnQiOwotICAgIHRoaXMuX2NodW5rZWRQYW5l
bC5fZW5hYmxlRE9NTm9kZVJlbW92ZWRMaXN0ZW5lcih0aGlzLmVsZW1lbnQsIHRydWUpOwotCi0g
ICAgdGhpcy5fc3RhcnRMaW5lID0gc3RhcnRMaW5lOwotICAgIGVuZExpbmUgPSBNYXRoLm1pbih0
aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCwgZW5kTGluZSk7Ci0gICAgdGhpcy5saW5lc0NvdW50
ID0gZW5kTGluZSAtIHN0YXJ0TGluZTsKLQotICAgIHRoaXMuX2V4cGFuZGVkID0gZmFsc2U7Ci0g
ICAgdGhpcy5fcmVhZE9ubHkgPSBmYWxzZTsKLQotICAgIHRoaXMudXBkYXRlQ29sbGFwc2VkTGlu
ZVJvdygpOwotfQotCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUg
PSB7Ci0gICAgYWRkRGVjb3JhdGlvbjogZnVuY3Rpb24oZGVjb3JhdGlvbikKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX2NodW5rZWRQYW5lbC5iZWdpbkRvbVVwZGF0ZXMoKTsKLSAgICAgICAgaWYgKHR5
cGVvZiBkZWNvcmF0aW9uID09PSAic3RyaW5nIikKLSAgICAgICAgICAgIHRoaXMuZWxlbWVudC5h
ZGRTdHlsZUNsYXNzKGRlY29yYXRpb24pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlm
ICghdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudCkgewotICAgICAgICAgICAgICAgIHRo
aXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKLSAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50LmNs
YXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1kZWNvcmF0aW9ucyI7Ci0gICAgICAgICAgICAgICAgdGhp
cy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVu
dC5hcHBlbmRDaGlsZChkZWNvcmF0aW9uKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9jaHVu
a2VkUGFuZWwuZW5kRG9tVXBkYXRlcygpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge3N0cmluZ3xFbGVtZW50fSBkZWNvcmF0aW9uCi0gICAgICovCi0gICAgcmVtb3ZlRGVjb3Jh
dGlvbjogZnVuY3Rpb24oZGVjb3JhdGlvbikKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NodW5rZWRQ
YW5lbC5iZWdpbkRvbVVwZGF0ZXMoKTsKLSAgICAgICAgaWYgKHR5cGVvZiBkZWNvcmF0aW9uID09
PSAic3RyaW5nIikKLSAgICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKGRl
Y29yYXRpb24pOwotICAgICAgICBlbHNlIGlmICh0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVt
ZW50KQotICAgICAgICAgICAgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudC5yZW1vdmVD
aGlsZChkZWNvcmF0aW9uKTsKLSAgICAgICAgdGhpcy5fY2h1bmtlZFBhbmVsLmVuZERvbVVwZGF0
ZXMoKTsKLSAgICB9LAotCi0gICAgcmVtb3ZlQWxsRGVjb3JhdGlvbnM6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5iZWdpbkRvbVVwZGF0ZXMoKTsKLSAgICAg
ICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1jb250ZW50IjsKLSAgICAg
ICAgaWYgKHRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQpIHsKLSAgICAgICAgICAgIHRo
aXMuZWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50KTsK
LSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50OwotICAg
ICAgICB9Ci0gICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5lbmREb21VcGRhdGVzKCk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgZ2V0
IGRlY29yYXRlZCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmNsYXNzTmFt
ZSAhPT0gIndlYmtpdC1saW5lLWNvbnRlbnQiIHx8ICEhKHRoaXMuZWxlbWVudC5kZWNvcmF0aW9u
c0VsZW1lbnQgJiYgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudC5maXJzdENoaWxkKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAg
IGdldCBzdGFydExpbmUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0TGluZTsK
LSAgICB9LAotCi0gICAgc2V0IHN0YXJ0TGluZShzdGFydExpbmUpCi0gICAgewotICAgICAgICB0
aGlzLl9zdGFydExpbmUgPSBzdGFydExpbmU7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5saW5lTnVt
YmVyID0gc3RhcnRMaW5lOwotICAgICAgICBpZiAodGhpcy5fZXhwYW5kZWRMaW5lUm93cykgewot
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9leHBhbmRlZExpbmVSb3dzLmxl
bmd0aDsgKytpKQotICAgICAgICAgICAgICAgIHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbaV0ubGlu
ZU51bWJlciA9IHN0YXJ0TGluZSArIGk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBnZXQgZXhwYW5kZWQoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkOwotICAgIH0sCi0KLSAgICBzZXQgZXhw
YW5kZWQoZXhwYW5kZWQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fZXhwYW5kZWQgPT09IGV4
cGFuZGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX2V4cGFuZGVkID0g
ZXhwYW5kZWQ7Ci0KLSAgICAgICAgaWYgKHRoaXMubGluZXNDb3VudCA9PT0gMSkgewotICAgICAg
ICAgICAgaWYgKGV4cGFuZGVkKQotICAgICAgICAgICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5f
cGFpbnRMaW5lKHRoaXMuZWxlbWVudCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICB0aGlzLl9jaHVua2VkUGFuZWwuYmVnaW5Eb21VcGRhdGVzKCk7Ci0KLSAgICAg
ICAgaWYgKGV4cGFuZGVkKSB7Ci0gICAgICAgICAgICB0aGlzLl9leHBhbmRlZExpbmVSb3dzID0g
W107Ci0gICAgICAgICAgICB2YXIgcGFyZW50RWxlbWVudCA9IHRoaXMuZWxlbWVudC5wYXJlbnRF
bGVtZW50OwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhcnRMaW5lOyBpIDwgdGhp
cy5zdGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIHZh
ciBsaW5lUm93ID0gdGhpcy5fY3JlYXRlUm93KGkpOwotICAgICAgICAgICAgICAgIHRoaXMuX2No
dW5rZWRQYW5lbC5fZW5hYmxlRE9NTm9kZVJlbW92ZWRMaXN0ZW5lcihsaW5lUm93LCB0cnVlKTsK
LSAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVFbGVtZW50UmVhZE9ubHlTdGF0ZShsaW5lUm93
KTsKLSAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShsaW5lUm93LCB0
aGlzLmVsZW1lbnQpOwotICAgICAgICAgICAgICAgIHRoaXMuX2V4cGFuZGVkTGluZVJvd3MucHVz
aChsaW5lUm93KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuX2NodW5rZWRQYW5l
bC5fZW5hYmxlRE9NTm9kZVJlbW92ZWRMaXN0ZW5lcih0aGlzLmVsZW1lbnQsIGZhbHNlKTsKLSAg
ICAgICAgICAgIHBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50KTsKLSAgICAg
ICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5fcGFpbnRMaW5lcyh0aGlzLnN0YXJ0TGluZSwgdGhp
cy5zdGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgdmFyIGVsZW1lbnRJbnNlcnRlZCA9IGZhbHNlOwotICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0aGlzLl9leHBhbmRlZExpbmVSb3dzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl9leHBhbmRlZExpbmVSb3dzW2ldOwotICAgICAg
ICAgICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5fZW5hYmxlRE9NTm9kZVJlbW92ZWRMaXN0ZW5l
cihsaW5lUm93LCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgdmFyIHBhcmVudEVsZW1lbnQgPSBs
aW5lUm93LnBhcmVudEVsZW1lbnQ7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50SW5zZXJ0ZWQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW1lbnRJbnNlcnRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9jaHVua2VkUGFuZWwuX2VuYWJsZURPTU5vZGVSZW1vdmVkTGlzdGVuZXIo
dGhpcy5lbGVtZW50LCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1l
bnQuaW5zZXJ0QmVmb3JlKHRoaXMuZWxlbWVudCwgbGluZVJvdyk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChsaW5l
Um93KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5fY2h1bmtlZFBh
bmVsLl9yZWxlYXNlTGluZXNIaWdobGlnaHQobGluZVJvdyk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBkZWxldGUgdGhpcy5fZXhwYW5kZWRMaW5lUm93czsKLSAgICAgICAgfQotCi0gICAg
ICAgIHRoaXMuX2NodW5rZWRQYW5lbC5lbmREb21VcGRhdGVzKCk7Ci0gICAgfSwKLQotICAgIHNl
dCByZWFkT25seShyZWFkT25seSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9yZWFkT25seSA9
PT0gcmVhZE9ubHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fcmVhZE9u
bHkgPSByZWFkT25seTsKLSAgICAgICAgdGhpcy5fdXBkYXRlRWxlbWVudFJlYWRPbmx5U3RhdGUo
dGhpcy5lbGVtZW50KTsKLSAgICAgICAgaWYgKHRoaXMuX2V4cGFuZGVkTGluZVJvd3MpIHsKLSAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5sZW5n
dGg7ICsraSkKLSAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVFbGVtZW50UmVhZE9ubHlTdGF0
ZSh0aGlzLl9leHBhbmRlZExpbmVSb3dzW2ldKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGdldCByZWFkT25seSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHk7Ci0gICAgfSwKLQotICAgIF91
cGRhdGVFbGVtZW50UmVhZE9ubHlTdGF0ZTogZnVuY3Rpb24oZWxlbWVudCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0aGlzLl9yZWFkT25seSkKLSAgICAgICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFz
cygidGV4dC1lZGl0b3ItcmVhZC1vbmx5Iik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVs
ZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygidGV4dC1lZGl0b3ItcmVhZC1vbmx5Iik7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBnZXQgaGVp
Z2h0KCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fZXhwYW5kZWRMaW5lUm93cykKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9jaHVua2VkUGFuZWwuX3RvdGFsSGVpZ2h0KHRoaXMuZWxlbWVu
dCk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jaHVua2VkUGFuZWwuX3RvdGFsSGVpZ2h0KHRoaXMu
X2V4cGFuZGVkTGluZVJvd3NbMF0sIHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbdGhpcy5fZXhwYW5k
ZWRMaW5lUm93cy5sZW5ndGggLSAxXSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1
cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBnZXQgb2Zmc2V0VG9wKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiAodGhpcy5fZXhwYW5kZWRMaW5lUm93cyAmJiB0aGlzLl9leHBhbmRlZExpbmVSb3dz
Lmxlbmd0aCkgPyB0aGlzLl9leHBhbmRlZExpbmVSb3dzWzBdLm9mZnNldFRvcCA6IHRoaXMuZWxl
bWVudC5vZmZzZXRUb3A7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVy
fSBsaW5lTnVtYmVyCi0gICAgICogQHJldHVybiB7RWxlbWVudH0KLSAgICAgKi8KLSAgICBfY3Jl
YXRlUm93OiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgdmFyIGxpbmVSb3cg
PSB0aGlzLl9jaHVua2VkUGFuZWwuX2NhY2hlZFJvd3MucG9wKCkgfHwgZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIGxpbmVSb3cubGluZU51bWJlciA9IGxpbmVOdW1iZXI7
Ci0gICAgICAgIGxpbmVSb3cuY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLWNvbnRlbnQiOwotICAg
ICAgICBsaW5lUm93LnRleHRDb250ZW50ID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUobGluZU51bWJl
cik7Ci0gICAgICAgIGlmICghbGluZVJvdy50ZXh0Q29udGVudCkKLSAgICAgICAgICAgIGxpbmVS
b3cuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7Ci0gICAgICAgIHJl
dHVybiBsaW5lUm93OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0g
bGluZU51bWJlcgotICAgICAqIEByZXR1cm4ge0VsZW1lbnR9Ci0gICAgICovCi0gICAgZ2V0RXhw
YW5kZWRMaW5lUm93OiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKCF0
aGlzLl9leHBhbmRlZCB8fCBsaW5lTnVtYmVyIDwgdGhpcy5zdGFydExpbmUgfHwgbGluZU51bWJl
ciA+PSB0aGlzLnN0YXJ0TGluZSArIHRoaXMubGluZXNDb3VudCkKLSAgICAgICAgICAgIHJldHVy
biBudWxsOwotICAgICAgICBpZiAoIXRoaXMuX2V4cGFuZGVkTGluZVJvd3MpCi0gICAgICAgICAg
ICByZXR1cm4gdGhpcy5lbGVtZW50OwotICAgICAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWRMaW5l
Um93c1tsaW5lTnVtYmVyIC0gdGhpcy5zdGFydExpbmVdOwotICAgIH0sCi0KLSAgICB1cGRhdGVD
b2xsYXBzZWRMaW5lUm93OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5saW5l
c0NvdW50ID09PSAxICYmIHRoaXMuX2V4cGFuZGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIHZhciBsaW5lcyA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFydExp
bmU7IGkgPCB0aGlzLnN0YXJ0TGluZSArIHRoaXMubGluZXNDb3VudDsgKytpKQotICAgICAgICAg
ICAgbGluZXMucHVzaCh0aGlzLl90ZXh0TW9kZWwubGluZShpKSk7Ci0KLSAgICAgICAgdGhpcy5l
bGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgIHRoaXMuZWxlbWVudC50ZXh0Q29udGVu
dCA9IGxpbmVzLmpvaW4oIlxuIik7Ci0KLSAgICAgICAgLy8gVGhlIGxhc3QgZW1wdHkgbGluZSB3
aWxsIGdldCBzd2FsbG93ZWQgb3RoZXJ3aXNlLgotICAgICAgICBpZiAoIWxpbmVzW2xpbmVzLmxl
bmd0aCAtIDFdKQotICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImJyIikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwppbmRleCA2NmZiMzAxYTA1MDQ3NmFhNDZlNjJmMThh
MzgyNmYzZmM0NDJlNDNmLi44M2EzYThlNTY5NWMyMTM3MzI2YzkxNmFjM2Y4N2ZhNzhjMjAzNGVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5x
cmMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCkBA
IC0xNjYsMTAgKzE2NiwxMCBAQAogICAgIDxmaWxlPlRhYmJlZEVkaXRvckNvbnRhaW5lci5qczwv
ZmlsZT4KICAgICA8ZmlsZT5UYWJiZWRQYW5lLmpzPC9maWxlPgogICAgIDxmaWxlPlRlc3RDb250
cm9sbGVyLmpzPC9maWxlPgorICAgIDxmaWxlPlRleHRFZGl0b3IuanM8L2ZpbGU+CiAgICAgPGZp
bGU+VGV4dEVkaXRvckhpZ2hsaWdodGVyLmpzPC9maWxlPgogICAgIDxmaWxlPlRleHRFZGl0b3JN
b2RlbC5qczwvZmlsZT4KICAgICA8ZmlsZT5UZXh0UHJvbXB0LmpzPC9maWxlPgotICAgIDxmaWxl
PlRleHRWaWV3ZXIuanM8L2ZpbGU+CiAgICAgPGZpbGU+VGltZWxpbmVGcmFtZUNvbnRyb2xsZXIu
anM8L2ZpbGU+CiAgICAgPGZpbGU+VGltZWxpbmVNYW5hZ2VyLmpzPC9maWxlPgogICAgIDxmaWxl
PlRpbWVsaW5lTW9kZWwuanM8L2ZpbGU+CkBAIC0yMTQsOCArMjE0LDggQEAKICAgICA8ZmlsZT5z
Y3JpcHRzUGFuZWwuY3NzPC9maWxlPgogICAgIDxmaWxlPnNwbGl0Vmlldy5jc3M8L2ZpbGU+CiAg
ICAgPGZpbGU+dGFiYmVkUGFuZS5jc3M8L2ZpbGU+CisgICAgPGZpbGU+dGV4dEVkaXRvci5jc3M8
L2ZpbGU+CiAgICAgPGZpbGU+dGV4dFByb21wdC5jc3M8L2ZpbGU+Ci0gICAgPGZpbGU+dGV4dFZp
ZXdlci5jc3M8L2ZpbGU+CiAgICAgPGZpbGU+dGltZWxpbmVQYW5lbC5jc3M8L2ZpbGU+CiAgICAg
PGZpbGU+SW1hZ2VzL2FwcGxpY2F0aW9uQ2FjaGUucG5nPC9maWxlPgogICAgIDxmaWxlPkltYWdl
cy9iYWNrLnBuZzwvZmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2luc3BlY3Rvci5odG1sCmluZGV4IDhkZjVmMjAxMWRhYWI5YTE2Nzg0ZGM2NTFiOTE1ZDA5
YjZiYzUxMDUuLmQzOTJkZjBlZDliYmZjZGY3YjRkNDg0YWJhZTM0ZDFjYTI2NWRmMjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbApA
QCAtMTIwLDcgKzEyMCw3IEBAIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIHNyYz0iRWxlbWVudHNQYW5lbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iTmV0d29ya1BhbmVsLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJJbmplY3RlZEZha2VXb3JrZXIuanMi
Pjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlRleHRW
aWV3ZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IlRleHRFZGl0b3IuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9IlNvdXJjZUZyYW1lLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSJSZXNvdXJjZVZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlJlcXVlc3RWaWV3LmpzIj48L3Njcmlw
dD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdGV4dEVk
aXRvci5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRFZGl0b3Iu
Y3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmUxMGQ3MTEwZGU5NmM2MGUwZjQ5ZTNmOWZiYjBmYWE4ZjVhZTNlYWQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3Rl
eHRFZGl0b3IuY3NzCkBAIC0wLDAgKzEsMTg1IEBACisudGV4dC1lZGl0b3IgeworICAgIHBvc2l0
aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6MDsKKyAgICBsZWZ0OjA7CisgICAgcmlnaHQ6MDsKKyAg
ICBib3R0b206MDsKKyAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgIG92ZXJmbG93OiBhdXRvOwor
fQorCisudGV4dC1lZGl0b3ItbGluZXMgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0
b3A6IDA7CisgICAgbGVmdDogMDsKKyAgICBib3R0b206IDA7CisgICAgb3ZlcmZsb3c6IGhpZGRl
bjsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOworICAgIGJhY2tncm91bmQtY29sb3I6
IHJnYigyNDAsIDI0MCwgMjQwKTsKKyAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCByZ2IoMTg3
LCAxODcsIDE4Nyk7CisgICAgbWluLXdpZHRoOiAxOXB4OworfQorCisudGV4dC1lZGl0b3ItY29u
dGVudHMgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgbGVmdDog
MDsKKyAgICByaWdodDogMDsKKyAgICBib3R0b206IDA7CisgICAgb3ZlcmZsb3c6IGF1dG87Cisg
ICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDsKK30KKworLnRleHQtZWRpdG9yLWNvbnRlbnRz
IC5pbm5lci1jb250YWluZXIgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7
CisgICAgbGVmdDogMDsKKyAgICByaWdodDogYXV0bzsKKyAgICBib3R0b206IGF1dG87CisgICAg
bWluLXdpZHRoOiAxMDAlOworfQorCisudGV4dC1lZGl0b3ItZWRpdGFibGUgeworICAgIC13ZWJr
aXQtdXNlci1tb2RpZnk6IHJlYWQtd3JpdGUtcGxhaW50ZXh0LW9ubHk7Cit9CisKKy50ZXh0LWVk
aXRvci1yZWFkLW9ubHkgeworICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seTsKKyAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjQwLCAyNDAsIDI0MCk7Cit9CisKKy53ZWJraXQtbGlu
ZS1kZWNvcmF0aW9ucyB7CisgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CisgICAgLXdlYmtpdC11
c2VyLXNlbGVjdDogbm9uZTsKKyAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHk7Cit9
CisKKy53ZWJraXQtaHRtbC1tZXNzYWdlLWJ1YmJsZSB7CisgICAgLXdlYmtpdC1ib3gtc2hhZG93
OiBibGFjayAwcHggMnB4IDVweDsKKyAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDlweDsKKyAg
ICAtd2Via2l0LWJvcmRlci1maXQ6IGxpbmVzOworICAgIGZvbnQtc2l6ZTogMTBweDsKKyAgICBm
b250LWZhbWlseTogTHVjaWRhIEdyYW5kZSwgc2Fucy1zZXJpZjsKKyAgICBmb250LXdlaWdodDog
Ym9sZDsKKyAgICBtYXJnaW46IDZweCAyNXB4OworICAgIHBhZGRpbmc6IDAgN3B4IDFweDsKKyAg
ICB6LWluZGV4OjIwOworfQorCisud2Via2l0LWh0bWwtd2FybmluZy1tZXNzYWdlIHsKKyAgICBi
YWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTAwJSwgNjIlLCA0MiUpOworICAgIGJvcmRlcjogMnB4IHNv
bGlkIHJnYigxMDAlLCA1MiUsIDIxJSk7Cit9CisKKy53ZWJraXQtaHRtbC1lcnJvci1tZXNzYWdl
IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTAwJSwgNDIlLCA0MiUpOworICAgIGJvcmRl
cjogMnB4IHNvbGlkIHJnYigxMDAlLCAzMSUsIDMxJSk7Cit9CisKKy53ZWJraXQtaHRtbC1tZXNz
YWdlLWxpbmUgeworICAgIHBhZGRpbmctbGVmdDogMjNweDsKKyAgICB0ZXh0LWluZGVudDogLTIw
cHg7Cit9CisKKy53ZWJraXQtaHRtbC1tZXNzYWdlLWxpbmUtaG92ZXIgeworICAgIHBhZGRpbmct
bGVmdDogMjNweDsKKyAgICB0ZXh0LWluZGVudDogLTIwcHg7CisgICAgd2hpdGUtc3BhY2U6IGF1
dG87CisgICAgdGV4dC1vdmVyZmxvdzogYXV0bzsKKyAgICBvdmVyZmxvdzogYXV0bzsKK30KKwor
LndlYmtpdC1odG1sLW1lc3NhZ2UtaWNvbiB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAg
IHRvcDogMnB4OworICAgIG1hcmdpbjogMCA0cHg7Cit9CisKKy53ZWJraXQtbGluZS1udW1iZXIg
eworICAgIGNvbG9yOiByZ2IoMTI4LCAxMjgsIDEyOCk7CisgICAgdGV4dC1hbGlnbjogcmlnaHQ7
CisgICAgdmVydGljYWwtYWxpZ246IHRvcDsKKyAgICB3b3JkLWJyZWFrOiBub3JtYWw7CisgICAg
cGFkZGluZy1yaWdodDogNHB4OworICAgIHBhZGRpbmctbGVmdDogNnB4OworfQorCisud2Via2l0
LWxpbmUtbnVtYmVyLW91dGVyIHsKKyAgICBtYXJnaW4tcmlnaHQ6IC00cHg7CisgICAgbWFyZ2lu
LWxlZnQ6IC00cHg7CisgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgICBib3JkZXIt
c3R5bGU6IHNvbGlkOworICAgIGJvcmRlci13aWR0aDogMCAwIDBweCAycHg7CisgICAgdmVydGlj
YWwtYWxpZ246IHRvcDsKK30KKworLndlYmtpdC1saW5lLW51bWJlci1pbm5lciB7CisgICAgbWFy
Z2luLXJpZ2h0OiA0cHg7Cit9CisKKy53ZWJraXQtYnJlYWtwb2ludCAud2Via2l0LWxpbmUtbnVt
YmVyLWlubmVyLCAud2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwgLndlYmtpdC1saW5lLW51
bWJlci1pbm5lciwgLndlYmtpdC1leGVjdXRpb24tbGluZSAud2Via2l0LWxpbmUtbnVtYmVyLWlu
bmVyIHsKKyAgICBtYXJnaW4tcmlnaHQ6IC0xMHB4OworfQorCisud2Via2l0LWxpbmUtY29udGVu
dCB7CisgICAgcGFkZGluZy1sZWZ0OiAycHg7Cit9CisKKy53ZWJraXQtYnJlYWtwb2ludCAud2Vi
a2l0LWxpbmUtbnVtYmVyLW91dGVyIHsKKyAgICBjb2xvcjogd2hpdGU7CisgICAgYm9yZGVyLXdp
ZHRoOiAwIDE0cHggMHB4IDJweDsKKyAgICAtd2Via2l0LWJvcmRlci1pbWFnZTogdXJsKEltYWdl
cy9icmVha3BvaW50Qm9yZGVyLnBuZykgMCAxNCAwIDI7Cit9CisKKy53ZWJraXQtYnJlYWtwb2lu
dC1jb25kaXRpb25hbCAud2Via2l0LWxpbmUtbnVtYmVyLW91dGVyIHsKKyAgICBjb2xvcjogd2hp
dGU7CisgICAgYm9yZGVyLXdpZHRoOiAwIDE0cHggMHB4IDJweDsKKyAgICAtd2Via2l0LWJvcmRl
ci1pbWFnZTogdXJsKEltYWdlcy9icmVha3BvaW50Q29uZGl0aW9uYWxCb3JkZXIucG5nKSAwIDE0
IDAgMjsKK30KKworLndlYmtpdC1leGVjdXRpb24tbGluZSAud2Via2l0LWxpbmUtbnVtYmVyLW91
dGVyIHsKKyAgICBjb2xvcjogdHJhbnNwYXJlbnQ7CisgICAgYm9yZGVyLXdpZHRoOiAwIDE0cHgg
MHB4IDJweDsKKyAgICAtd2Via2l0LWJvcmRlci1pbWFnZTogdXJsKEltYWdlcy9wcm9ncmFtQ291
bnRlckJvcmRlci5wbmcpIDAgMTQgMCAyOworfQorCisud2Via2l0LWJyZWFrcG9pbnQud2Via2l0
LWV4ZWN1dGlvbi1saW5lIC53ZWJraXQtbGluZS1udW1iZXItb3V0ZXIgeworICAgIGNvbG9yOiB3
aGl0ZTsKKyAgICAtd2Via2l0LWJvcmRlci1pbWFnZTogdXJsKEltYWdlcy9icmVha3BvaW50Q291
bnRlckJvcmRlci5wbmcpIDAgMTQgMCAyOworfQorCisud2Via2l0LWJyZWFrcG9pbnQud2Via2l0
LWV4ZWN1dGlvbi1saW5lIC53ZWJraXQtbGluZS1udW1iZXItb3V0ZXIgeworICAgIGNvbG9yOiB0
cmFuc3BhcmVudDsKKyAgICAtd2Via2l0LWJvcmRlci1pbWFnZTogdXJsKEltYWdlcy9icmVha3Bv
aW50Q291bnRlckJvcmRlci5wbmcpIDAgMTQgMCAyOworfQorCisud2Via2l0LWJyZWFrcG9pbnQt
Y29uZGl0aW9uYWwud2Via2l0LWV4ZWN1dGlvbi1saW5lIC53ZWJraXQtbGluZS1udW1iZXItb3V0
ZXIgeworICAgIGNvbG9yOiB0cmFuc3BhcmVudDsKKyAgICAtd2Via2l0LWJvcmRlci1pbWFnZTog
dXJsKEltYWdlcy9icmVha3BvaW50Q29uZGl0aW9uYWxDb3VudGVyQm9yZGVyLnBuZykgMCAxNCAw
IDI7Cit9CisKKy53ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZCAud2Via2l0LWxpbmUtbnVtYmVy
LW91dGVyIHsKKyAgICBvcGFjaXR5OiAwLjU7Cit9CisKKy5icmVha3BvaW50cy1kZWFjdGl2YXRl
ZCAud2Via2l0LWJyZWFrcG9pbnQgLndlYmtpdC1saW5lLW51bWJlci1vdXRlciB7CisgICAgb3Bh
Y2l0eTogMC41OworfQorCisuYnJlYWtwb2ludHMtZGVhY3RpdmF0ZWQgLndlYmtpdC1icmVha3Bv
aW50LWRpc2FibGVkIC53ZWJraXQtbGluZS1udW1iZXItb3V0ZXIgeworICAgIG9wYWNpdHk6IDAu
MzsKK30KKworLndlYmtpdC1leGVjdXRpb24tbGluZS53ZWJraXQtbGluZS1jb250ZW50IHsKKyAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTcxLCAxOTEsIDI1NCk7CisgICAgb3V0bGluZTogMXB4
IHNvbGlkIHJnYig2NCwgMTE1LCAyNDQpOworfQorCisud2Via2l0LWhpZ2hsaWdodGVkLWxpbmUu
d2Via2l0LWxpbmUtY29udGVudCB7CisgICAgLXdlYmtpdC1hbmltYXRpb246ICJmYWRlb3V0IiAy
cyAwczsKK30KKworQC13ZWJraXQta2V5ZnJhbWVzIGZhZGVvdXQgeworICAgIGZyb20ge2JhY2tn
cm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMTIwKTsgfQorICAgIHRvIHsgYmFja2dyb3VuZC1j
b2xvcjogd2hpdGU7IH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvdGV4dFZpZXdlci5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL3RleHRWaWV3ZXIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTBkNzEx
MGRlOTZjNjBlMGY0OWUzZjlmYmIwZmFhOGY1YWUzZWFkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvdGV4dFZpZXdlci5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLnRleHQt
ZWRpdG9yIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOjA7Ci0gICAgbGVmdDow
OwotICAgIHJpZ2h0OjA7Ci0gICAgYm90dG9tOjA7Ci0gICAgd2hpdGUtc3BhY2U6IHByZTsKLSAg
ICBvdmVyZmxvdzogYXV0bzsKLX0KLQotLnRleHQtZWRpdG9yLWxpbmVzIHsKLSAgICBwb3NpdGlv
bjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgYm90dG9tOiAwOwot
ICAgIG92ZXJmbG93OiBoaWRkZW47Ci0gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKLSAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjQwLCAyNDAsIDI0MCk7Ci0gICAgYm9yZGVyLXJpZ2h0
OiAxcHggc29saWQgcmdiKDE4NywgMTg3LCAxODcpOwotICAgIG1pbi13aWR0aDogMTlweDsKLX0K
LQotLnRleHQtZWRpdG9yLWNvbnRlbnRzIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAg
dG9wOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgYm90dG9tOiAwOwotICAg
IG92ZXJmbG93OiBhdXRvOwotICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7Ci19Ci0KLS50
ZXh0LWVkaXRvci1jb250ZW50cyAuaW5uZXItY29udGFpbmVyIHsKLSAgICBwb3NpdGlvbjogYWJz
b2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IGF1dG87Ci0gICAg
Ym90dG9tOiBhdXRvOwotICAgIG1pbi13aWR0aDogMTAwJTsKLX0KLQotLnRleHQtZWRpdG9yLWVk
aXRhYmxlIHsKLSAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLXdyaXRlLXBsYWludGV4dC1v
bmx5OwotfQotCi0udGV4dC1lZGl0b3ItcmVhZC1vbmx5IHsKLSAgICAtd2Via2l0LXVzZXItbW9k
aWZ5OiByZWFkLW9ubHk7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI0MCwgMjQwLCAyNDAp
OwotfQotCi0ud2Via2l0LWxpbmUtZGVjb3JhdGlvbnMgewotICAgIHBvaW50ZXItZXZlbnRzOiBu
b25lOwotICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ci0gICAgLXdlYmtpdC11c2VyLW1v
ZGlmeTogcmVhZC1vbmx5OwotfQotCi0ud2Via2l0LWh0bWwtbWVzc2FnZS1idWJibGUgewotICAg
IC13ZWJraXQtYm94LXNoYWRvdzogYmxhY2sgMHB4IDJweCA1cHg7Ci0gICAgLXdlYmtpdC1ib3Jk
ZXItcmFkaXVzOiA5cHg7Ci0gICAgLXdlYmtpdC1ib3JkZXItZml0OiBsaW5lczsKLSAgICBmb250
LXNpemU6IDEwcHg7Ci0gICAgZm9udC1mYW1pbHk6IEx1Y2lkYSBHcmFuZGUsIHNhbnMtc2VyaWY7
Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgbWFyZ2luOiA2cHggMjVweDsKLSAgICBwYWRk
aW5nOiAwIDdweCAxcHg7Ci0gICAgei1pbmRleDoyMDsKLX0KLQotLndlYmtpdC1odG1sLXdhcm5p
bmctbWVzc2FnZSB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEwMCUsIDYyJSwgNDIlKTsK
LSAgICBib3JkZXI6IDJweCBzb2xpZCByZ2IoMTAwJSwgNTIlLCAyMSUpOwotfQotCi0ud2Via2l0
LWh0bWwtZXJyb3ItbWVzc2FnZSB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEwMCUsIDQy
JSwgNDIlKTsKLSAgICBib3JkZXI6IDJweCBzb2xpZCByZ2IoMTAwJSwgMzElLCAzMSUpOwotfQot
Ci0ud2Via2l0LWh0bWwtbWVzc2FnZS1saW5lIHsKLSAgICBwYWRkaW5nLWxlZnQ6IDIzcHg7Ci0g
ICAgdGV4dC1pbmRlbnQ6IC0yMHB4OwotfQotCi0ud2Via2l0LWh0bWwtbWVzc2FnZS1saW5lLWhv
dmVyIHsKLSAgICBwYWRkaW5nLWxlZnQ6IDIzcHg7Ci0gICAgdGV4dC1pbmRlbnQ6IC0yMHB4Owot
ICAgIHdoaXRlLXNwYWNlOiBhdXRvOwotICAgIHRleHQtb3ZlcmZsb3c6IGF1dG87Ci0gICAgb3Zl
cmZsb3c6IGF1dG87Ci19Ci0KLS53ZWJraXQtaHRtbC1tZXNzYWdlLWljb24gewotICAgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKLSAgICB0b3A6IDJweDsKLSAgICBtYXJnaW46IDAgNHB4OwotfQotCi0u
d2Via2l0LWxpbmUtbnVtYmVyIHsKLSAgICBjb2xvcjogcmdiKDEyOCwgMTI4LCAxMjgpOwotICAg
IHRleHQtYWxpZ246IHJpZ2h0OwotICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Ci0gICAgd29yZC1i
cmVhazogbm9ybWFsOwotICAgIHBhZGRpbmctcmlnaHQ6IDRweDsKLSAgICBwYWRkaW5nLWxlZnQ6
IDZweDsKLX0KLQotLndlYmtpdC1saW5lLW51bWJlci1vdXRlciB7Ci0gICAgbWFyZ2luLXJpZ2h0
OiAtNHB4OwotICAgIG1hcmdpbi1sZWZ0OiAtNHB4OwotICAgIGJvcmRlci1jb2xvcjogdHJhbnNw
YXJlbnQ7Ci0gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKLSAgICBib3JkZXItd2lkdGg6IDAgMCAw
cHggMnB4OwotICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Ci19Ci0KLS53ZWJraXQtbGluZS1udW1i
ZXItaW5uZXIgewotICAgIG1hcmdpbi1yaWdodDogNHB4OwotfQotCi0ud2Via2l0LWJyZWFrcG9p
bnQgLndlYmtpdC1saW5lLW51bWJlci1pbm5lciwgLndlYmtpdC1icmVha3BvaW50LWNvbmRpdGlv
bmFsIC53ZWJraXQtbGluZS1udW1iZXItaW5uZXIsIC53ZWJraXQtZXhlY3V0aW9uLWxpbmUgLndl
YmtpdC1saW5lLW51bWJlci1pbm5lciB7Ci0gICAgbWFyZ2luLXJpZ2h0OiAtMTBweDsKLX0KLQot
LndlYmtpdC1saW5lLWNvbnRlbnQgewotICAgIHBhZGRpbmctbGVmdDogMnB4OwotfQotCi0ud2Vi
a2l0LWJyZWFrcG9pbnQgLndlYmtpdC1saW5lLW51bWJlci1vdXRlciB7Ci0gICAgY29sb3I6IHdo
aXRlOwotICAgIGJvcmRlci13aWR0aDogMCAxNHB4IDBweCAycHg7Ci0gICAgLXdlYmtpdC1ib3Jk
ZXItaW1hZ2U6IHVybChJbWFnZXMvYnJlYWtwb2ludEJvcmRlci5wbmcpIDAgMTQgMCAyOwotfQot
Ci0ud2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwgLndlYmtpdC1saW5lLW51bWJlci1vdXRl
ciB7Ci0gICAgY29sb3I6IHdoaXRlOwotICAgIGJvcmRlci13aWR0aDogMCAxNHB4IDBweCAycHg7
Ci0gICAgLXdlYmtpdC1ib3JkZXItaW1hZ2U6IHVybChJbWFnZXMvYnJlYWtwb2ludENvbmRpdGlv
bmFsQm9yZGVyLnBuZykgMCAxNCAwIDI7Ci19Ci0KLS53ZWJraXQtZXhlY3V0aW9uLWxpbmUgLndl
YmtpdC1saW5lLW51bWJlci1vdXRlciB7Ci0gICAgY29sb3I6IHRyYW5zcGFyZW50OwotICAgIGJv
cmRlci13aWR0aDogMCAxNHB4IDBweCAycHg7Ci0gICAgLXdlYmtpdC1ib3JkZXItaW1hZ2U6IHVy
bChJbWFnZXMvcHJvZ3JhbUNvdW50ZXJCb3JkZXIucG5nKSAwIDE0IDAgMjsKLX0KLQotLndlYmtp
dC1icmVha3BvaW50LndlYmtpdC1leGVjdXRpb24tbGluZSAud2Via2l0LWxpbmUtbnVtYmVyLW91
dGVyIHsKLSAgICBjb2xvcjogd2hpdGU7Ci0gICAgLXdlYmtpdC1ib3JkZXItaW1hZ2U6IHVybChJ
bWFnZXMvYnJlYWtwb2ludENvdW50ZXJCb3JkZXIucG5nKSAwIDE0IDAgMjsKLX0KLQotLndlYmtp
dC1icmVha3BvaW50LndlYmtpdC1leGVjdXRpb24tbGluZSAud2Via2l0LWxpbmUtbnVtYmVyLW91
dGVyIHsKLSAgICBjb2xvcjogdHJhbnNwYXJlbnQ7Ci0gICAgLXdlYmtpdC1ib3JkZXItaW1hZ2U6
IHVybChJbWFnZXMvYnJlYWtwb2ludENvdW50ZXJCb3JkZXIucG5nKSAwIDE0IDAgMjsKLX0KLQot
LndlYmtpdC1icmVha3BvaW50LWNvbmRpdGlvbmFsLndlYmtpdC1leGVjdXRpb24tbGluZSAud2Vi
a2l0LWxpbmUtbnVtYmVyLW91dGVyIHsKLSAgICBjb2xvcjogdHJhbnNwYXJlbnQ7Ci0gICAgLXdl
YmtpdC1ib3JkZXItaW1hZ2U6IHVybChJbWFnZXMvYnJlYWtwb2ludENvbmRpdGlvbmFsQ291bnRl
ckJvcmRlci5wbmcpIDAgMTQgMCAyOwotfQotCi0ud2Via2l0LWJyZWFrcG9pbnQtZGlzYWJsZWQg
LndlYmtpdC1saW5lLW51bWJlci1vdXRlciB7Ci0gICAgb3BhY2l0eTogMC41OwotfQotCi0uYnJl
YWtwb2ludHMtZGVhY3RpdmF0ZWQgLndlYmtpdC1icmVha3BvaW50IC53ZWJraXQtbGluZS1udW1i
ZXItb3V0ZXIgewotICAgIG9wYWNpdHk6IDAuNTsKLX0KLQotLmJyZWFrcG9pbnRzLWRlYWN0aXZh
dGVkIC53ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZCAud2Via2l0LWxpbmUtbnVtYmVyLW91dGVy
IHsKLSAgICBvcGFjaXR5OiAwLjM7Ci19Ci0KLS53ZWJraXQtZXhlY3V0aW9uLWxpbmUud2Via2l0
LWxpbmUtY29udGVudCB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDE3MSwgMTkxLCAyNTQp
OwotICAgIG91dGxpbmU6IDFweCBzb2xpZCByZ2IoNjQsIDExNSwgMjQ0KTsKLX0KLQotLndlYmtp
dC1oaWdobGlnaHRlZC1saW5lLndlYmtpdC1saW5lLWNvbnRlbnQgewotICAgIC13ZWJraXQtYW5p
bWF0aW9uOiAiZmFkZW91dCIgMnMgMHM7Ci19Ci0KLUAtd2Via2l0LWtleWZyYW1lcyBmYWRlb3V0
IHsKLSAgICBmcm9tIHtiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDEyMCk7IH0KLSAg
ICB0byB7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvaW5zcGVjdG9yQkIuaHRtbCBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9pbnNwZWN0b3JCQi5odG1sCmluZGV4
IDVmNjkyMTk3ZjhmM2QwOGE0MzRkODQ4OTM2MjFjNGNhZGJkZjYxN2UuLjc5ODI4ZDk4ZjRkMGUw
ZDA3NjIzN2ZlMjMwODU5N2YyMjY0M2E5ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9pbnNwZWN0b3JCQi5odG1sCisrKyBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9pbnNwZWN0b3JCQi5odG1sCkBAIC0zOSw3ICsz
OSw3IEBAIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4
dC9jc3MiIGhyZWY9Im5ldHdvcmtQYW5lbC5jc3MiPgogICAgICAgICA8bGluayByZWw9InN0eWxl
c2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJoZWxwU2NyZWVuLmNzcyI+CiAgICAgICAgIDxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InBvcG92ZXIuY3NzIj4K
LSAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0idGV4
dFZpZXdlci5jc3MiPgorICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQv
Y3NzIiBocmVmPSJ0ZXh0RWRpdG9yLmNzcyI+CiAgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9ImphdmFzY3JpcHQuanMiPjwvc2NyaXB0PgogICAgIDwvaGVhZD4KICAg
ICA8Ym9keSBjbGFzcz0iZGV0YWNoZWQiPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDZhYWE1YzFhYWNjZGRiMzAxZWU2ZTQ0
M2YxNmU5NTAyOGUwZTEzZmUuLjMxMjdiMzM0MDZmZGFhNTk2OTIwOTVhMTcyZDQ0Zjk3NjdhMTlk
MzAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0wNy0wMiAgSmFuIEtlcm9tbmVzICA8amFu
eEBsaW51eC5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogV2ViSW5zcGVjdG9yLlRleHRW
aWV3ZXIgc2hvdWxkIGJlIHJlbmFtZWQgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5OTM5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3Bl
Y3Rvci9kZWJ1Z2dlci10ZXN0LmpzOgorICAgICAgICAoaW5pdGlhbGl6ZV9EZWJ1Z2dlclRlc3Qp
OgorICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2xpdmUtZWRpdC10ZXN0LmpzOgorICAg
ICAgICAoaW5pdGlhbGl6ZV9MaXZlRWRpdFRlc3QuSW5zcGVjdG9yVGVzdC5yZXBsYWNlSW5Tb3Vy
Y2UpOgorICAgICAgICAoaW5pdGlhbGl6ZV9MaXZlRWRpdFRlc3QpOgorICAgICAgICAqIGh0dHAv
dGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy10ZXN0LmpzOgorICAgICAgICAoaW5pdGlhbGl6ZV9S
ZXNvdXJjZVRlc3QuSW5zcGVjdG9yVGVzdC5zaG93UmVzb3VyY2Uuc2hvd1Jlc291cmNlQ2FsbGJh
Y2spOgorICAgICAgICAoaW5pdGlhbGl6ZV9SZXNvdXJjZVRlc3QuSW5zcGVjdG9yVGVzdC5zaG93
UmVzb3VyY2UpOgorICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9wYXVzZS1pbi1pbmxpbmUt
c2NyaXB0Lmh0bWw6CisKIDIwMTItMDctMDIgIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgY2hyb21pdW0gZXhwZWN0YXRpb25zIHVwZGF0ZS4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRl
c3QuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci10ZXN0Lmpz
CmluZGV4IDZkNzQ5M2Y3Y2FlMDE5NjNmNzZhM2FlOWU1NjlhZGQ1YzRlMjcwNWEuLjZkZGFiM2Y2
ZTNjOGI1MTg5NGM2NDM2M2UwMDg1NzYwN2RhMTEyMjggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QuanMKKysrIGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItdGVzdC5qcwpAQCAtMTYzLDcgKzE2Myw3IEBA
IEluc3BlY3RvclRlc3Quc2hvd1NjcmlwdFNvdXJjZU9uU2NyaXB0c1BhbmVsID0gZnVuY3Rpb24o
cGFuZWwsIHNjcmlwdE5hbWUsIGNhbGxiCiAgICAgICAgICAgICBpZiAoc291cmNlRnJhbWUubG9h
ZGVkKQogICAgICAgICAgICAgICAgIGNhbGxiYWNrKHNvdXJjZUZyYW1lKTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFNuaWZmZXIoc291cmNlRnJh
bWUsICJvblRleHRWaWV3ZXJDb250ZW50TG9hZGVkIiwgY2FsbGJhY2suYmluZChudWxsLCBzb3Vy
Y2VGcmFtZSkpOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkU25pZmZlcihzb3Vy
Y2VGcmFtZSwgIm9uVGV4dEVkaXRvckNvbnRlbnRMb2FkZWQiLCBjYWxsYmFjay5iaW5kKG51bGws
IHNvdXJjZUZyYW1lKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9saXZlLWVkaXQtdGVz
dC5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2xpdmUtZWRpdC10ZXN0Lmpz
CmluZGV4IDFlY2IxNDhmMzAxODA4MTQ1YWQyZDFkNzIwODBiOTlmNGFkMGM0OWUuLjM3YzYzYzlh
YzFiNjI4NzE4NzQ4ODRkMzI3OTA2NzJlNjM5MTAyNjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvaW5zcGVjdG9yL2xpdmUtZWRpdC10ZXN0LmpzCisrKyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvaW5zcGVjdG9yL2xpdmUtZWRpdC10ZXN0LmpzCkBAIC0yLDcgKzIsNyBAQCB2
YXIgaW5pdGlhbGl6ZV9MaXZlRWRpdFRlc3QgPSBmdW5jdGlvbigpIHsKIAogSW5zcGVjdG9yVGVz
dC5yZXBsYWNlSW5Tb3VyY2UgPSBmdW5jdGlvbihzb3VyY2VGcmFtZSwgc3RyaW5nLCByZXBsYWNl
bWVudCwgY2FsbGJhY2spCiB7Ci0gICAgc291cmNlRnJhbWUuX3RleHRWaWV3ZXIuX21haW5QYW5l
bC5zZXRSZWFkT25seShmYWxzZSk7CisgICAgc291cmNlRnJhbWUuX3RleHRFZGl0b3IuX21haW5Q
YW5lbC5zZXRSZWFkT25seShmYWxzZSk7CiAgICAgc291cmNlRnJhbWUuYmVmb3JlVGV4dENoYW5n
ZWQoKTsKICAgICB2YXIgb2xkUmFuZ2UsIG5ld1JhbmdlOwogICAgIHZhciBsaW5lcyA9IHNvdXJj
ZUZyYW1lLl90ZXh0TW9kZWwuX2xpbmVzOwpAQCAtMTgsNyArMTgsNyBAQCBJbnNwZWN0b3JUZXN0
LnJlcGxhY2VJblNvdXJjZSA9IGZ1bmN0aW9uKHNvdXJjZUZyYW1lLCBzdHJpbmcsIHJlcGxhY2Vt
ZW50LCBjYWxsYgogICAgICAgICBicmVhazsKICAgICB9CiAgICAgc291cmNlRnJhbWUuYWZ0ZXJU
ZXh0Q2hhbmdlZChvbGRSYW5nZSwgbmV3UmFuZ2UpOwotICAgIHNvdXJjZUZyYW1lLl90ZXh0Vmll
d2VyLl9jb21taXRFZGl0aW5nKCk7CisgICAgc291cmNlRnJhbWUuX3RleHRFZGl0b3IuX2NvbW1p
dEVkaXRpbmcoKTsKIH0KIAogfTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
aW5zcGVjdG9yL3Jlc291cmNlcy10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNw
ZWN0b3IvcmVzb3VyY2VzLXRlc3QuanMKaW5kZXggOWMwOTczNGNlYWQwMmE2Mzc5YWQ3ZjJlZDI2
ODBhNDk3Mjc0ZWE1Mi4uNTE0NDJlMzRjNTg2OTUzY2MyZWU3NjQwNjY4YzNiZTRmOTU3NGY1ZCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzLXRl
c3QuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzLXRl
c3QuanMKQEAgLTc3LDcgKzc3LDcgQEAgSW5zcGVjdG9yVGVzdC5zaG93UmVzb3VyY2UgPSBmdW5j
dGlvbihyZXNvdXJjZVVSTCwgY2FsbGJhY2spCiAgICAgICAgIGlmIChzb3VyY2VGcmFtZS5sb2Fk
ZWQpCiAgICAgICAgICAgICBjYWxsYmFja1dyYXBwZXIoc291cmNlRnJhbWUpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFNuaWZmZXIoc291cmNlRnJhbWUsICJv
blRleHRWaWV3ZXJDb250ZW50TG9hZGVkIiwgY2FsbGJhY2tXcmFwcGVyLmJpbmQobnVsbCwgc291
cmNlRnJhbWUpKTsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkU25pZmZlcihzb3VyY2VG
cmFtZSwgIm9uVGV4dEVkaXRvckNvbnRlbnRMb2FkZWQiLCBjYWxsYmFja1dyYXBwZXIuYmluZChu
dWxsLCBzb3VyY2VGcmFtZSkpOwogICAgIH0KICAgICBJbnNwZWN0b3JUZXN0LnJ1bkFmdGVyUmVz
b3VyY2VzQXJlRmluaXNoZWQoW3Jlc291cmNlVVJMXSwgc2hvd1Jlc291cmNlQ2FsbGJhY2spOwog
fQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3BhdXNlLWluLWlu
bGluZS1zY3JpcHQuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9wYXVzZS1p
bi1pbmxpbmUtc2NyaXB0Lmh0bWwKaW5kZXggMzg5NDZhNTc0OTQ5MGUwZTlmNjQwYTJmN2Q4MzVi
YzMyOGYwYmFhNy4uNzc3NDg5ZTEwOTQxZmY0ODllZjhmMWNjMDlhYmM3MTM2OGUwZTBiNiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3BhdXNlLWluLWlubGluZS1z
Y3JpcHQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvcGF1c2UtaW4t
aW5saW5lLXNjcmlwdC5odG1sCkBAIC01Niw3ICs1Niw3IEBAIHZhciB0ZXN0ID0gZnVuY3Rpb24o
KQogICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGcmFtZS5sb2FkZWQpCiAgICAgICAgICAgICAg
ICAgICAgIGRpZFNob3dTY3JpcHQoc291cmNlRnJhbWUpOwogICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRTbmlmZmVyKHNvdXJjZUZyYW1l
LCAib25UZXh0Vmlld2VyQ29udGVudExvYWRlZCIsIGRpZFNob3dTY3JpcHQuYmluZChudWxsLCBz
b3VyY2VGcmFtZSkpOworICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFNuaWZm
ZXIoc291cmNlRnJhbWUsICJvblRleHRFZGl0b3JDb250ZW50TG9hZGVkIiwgZGlkU2hvd1Njcmlw
dC5iaW5kKG51bGwsIHNvdXJjZUZyYW1lKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0NoYW5n
ZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGQwYjMxMTkxZGExNjQzZjhk
NjNjYTY2OGM3NTg0NzUxMGU1NzE3ZGQuLjNiMjZlNWUyNmI3YzQyN2E2MzhmZDhiNmE4OWViMzI4
MDMzNTg3ZGMgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisrKyBiL1Bl
cmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTItMDctMDIgIEph
biBLZXJvbW5lcyAgPGphbnhAbGludXguY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFdl
Ykluc3BlY3Rvci5UZXh0Vmlld2VyIHNob3VsZCBiZSByZW5hbWVkIFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
OTkzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
aW5zcGVjdG9yL2ZpcnN0LW9wZW4tc2NyaXB0cy5odG1sLmJyb2tlbjoKKwogMjAxMi0wNi0yMiAg
UGhpbGlwIFJvZ2VycyAgPHBkckBnb29nbGUuY29tPgogCiAgICAgICAgIE1ha2UgU3ZnQ3ViaWNz
IHBlcmZvcm1hbmNlIHRlc3QgbW9yZSBjb25zaXN0ZW50CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL2luc3BlY3Rvci9maXJzdC1vcGVuLXNjcmlwdHMuaHRtbC5icm9rZW4gYi9QZXJmb3Jt
YW5jZVRlc3RzL2luc3BlY3Rvci9maXJzdC1vcGVuLXNjcmlwdHMuaHRtbC5icm9rZW4KaW5kZXgg
ZGYxYTU2NmJhNzZkYzJlYTc1MTM4MTYwZDMzMGEzYjNhOWY4Nzc4ZS4uMzU3ZGQzZDM1YjhmNjEx
NjI2MmI5ZDMxYjk1YTk4OWUxNTZlNDQ0YyAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9p
bnNwZWN0b3IvZmlyc3Qtb3Blbi1zY3JpcHRzLmh0bWwuYnJva2VuCisrKyBiL1BlcmZvcm1hbmNl
VGVzdHMvaW5zcGVjdG9yL2ZpcnN0LW9wZW4tc2NyaXB0cy5odG1sLmJyb2tlbgpAQCAtMjEsOSAr
MjEsOSBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgV2ViSW5zcGVjdG9yLnNob3dQYW5lbCgi
YXVkaXRzIik7CiAgICAgICAgIHZhciBzaG93UGFuZWxUaW1lckNvb2tpZSA9IHRpbWVyLnN0YXJ0
KCJmaXJzdC1vcGVuLXNjcmlwdHMiKTsKICAgICAgICAgV2ViSW5zcGVjdG9yLnNob3dQYW5lbCgi
c2NyaXB0cyIpOwotICAgICAgICB2YXIgY291bnQgPSBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlw
dHMudmlzaWJsZVZpZXcuX3RleHRWaWV3ZXIuX21haW5QYW5lbC5fdGV4dENodW5rcy5sZW5ndGg7
Ci0gICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy52aXNpYmxlVmlldy5fdGV4dFZp
ZXdlci5fbWFpblBhbmVsLl9leHBhbmRDaHVua3MoMCwgY291bnQpOwotICAgICAgICBXZWJJbnNw
ZWN0b3IucGFuZWxzLnNjcmlwdHMudmlzaWJsZVZpZXcuX3RleHRWaWV3ZXIuX21haW5QYW5lbC5f
cGFpbnRTY2hlZHVsZWRMaW5lcygpOworICAgICAgICB2YXIgY291bnQgPSBXZWJJbnNwZWN0b3Iu
cGFuZWxzLnNjcmlwdHMudmlzaWJsZVZpZXcuX3RleHRFZGl0b3IuX21haW5QYW5lbC5fdGV4dENo
dW5rcy5sZW5ndGg7CisgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy52aXNpYmxl
Vmlldy5fdGV4dEVkaXRvci5fbWFpblBhbmVsLl9leHBhbmRDaHVua3MoMCwgY291bnQpOworICAg
ICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMudmlzaWJsZVZpZXcuX3RleHRFZGl0b3Iu
X21haW5QYW5lbC5fcGFpbnRTY2hlZHVsZWRMaW5lcygpOwogICAgICAgICB0aW1lci5maW5pc2go
c2hvd1BhbmVsVGltZXJDb29raWUpOwogICAgICAgICB0aW1lci5kb25lKCJmaXJzdC1vcGVuIik7
CiAgICAgfQo=
</data>
<flag name="review"
          id="158736"
          type_id="1"
          status="+"
          setter="vsevik"
    />
          </attachment>
      

    </bug>

</bugzilla>