<?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>50567</bug_id>
          
          <creation_ts>2010-12-06 06:19:17 -0800</creation_ts>
          <short_desc>Web Inspector: introduce DebuggerModel class representing InspectorDebuggerAgent state</short_desc>
          <delta_ts>2010-12-08 03:18:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Podivilov">podivilov</reporter>
          <assigned_to name="Pavel Podivilov">podivilov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>317587</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-06 06:19:17 -0800</bug_when>
    <thetext>Web Inspector: introduce DebuggerModel class representing InspectorDebuggerAgent state.
Debugging-related code moved from BreakpointManager to DebuggerModel. The next step would be to extract model aspects such as parsed scripts and current execution line from ScriptsPanel to DebuggerModel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317588</commentid>
    <comment_count>1</comment_count>
      <attachid>75686</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-06 06:20:23 -0800</bug_when>
    <thetext>Created attachment 75686
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317591</commentid>
    <comment_count>2</comment_count>
      <attachid>75686</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-12-06 06:38:07 -0800</bug_when>
    <thetext>Comment on attachment 75686
Patch.

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

Not checking the overall logic as I&apos;m not quite familiar with it.

&gt; WebCore/ChangeLog:8
&gt; +        * English.lproj/localizedStrings.js:

For this file&apos;s diff to be found in the patch, you need to use the &quot;--binary&quot; flag.

&gt; WebCore/WebCore.vcproj/WebCore.vcproj:65215
&gt; +        &lt;File

You seem to have spaces rather than tabs here. The file should only use tabs as leading indents, and all the stuff should be aligned.

&gt; WebCore/inspector/front-end/DebuggerModel.js:14
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS&apos;&apos; AND ANY

You should use the correct, up-to-date license boilerplate. Make use of the one found e.g. in ExtensionPanel.js

&gt; WebCore/inspector/front-end/inspector.js:1306
&gt; +    this.debuggerModel.restoredBreakpoint(sourceID, sourceURL, line, enabled, condition);

The method had better been called &quot;breakpointRestored&quot;, as this seems to be an event notification, right? (akin to &quot;debuggerResumed&quot;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318146</commentid>
    <comment_count>3</comment_count>
      <attachid>75686</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-12-07 05:32:23 -0800</bug_when>
    <thetext>Comment on attachment 75686
Patch.

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

What about WebInspector.parsedScriptSource, debuggerWasEnabled, debuggerWasDisabled, activateBreakpoints, stepOverStatement, etc.? They all should go through the DebuggerModel, right?

&gt; WebCore/inspector/front-end/DebuggerModel.js:27
&gt; +WebInspector.DebuggerModel = function()

Is this only a rename for BreakpointManager? Could you describe changes in the ChangeLog?

&gt; WebCore/inspector/front-end/DebuggerModel.js:143
&gt; +        breakpoint.dispatchEventToListeners(&quot;hit-state-changed&quot;);

Breakpoint event dispatching should be encapsulated in the hit setter.

&gt; WebCore/inspector/front-end/DebuggerModel.js:145
&gt; +        this.dispatchEventToListeners(&quot;script-breakpoint-hit&quot;, breakpoint);

This method fires way too many events. Events-driven operation brings in a lot of indirection. It should only be used when necessary (i.e. breaking unhealthy dependencies).

&gt; WebCore/inspector/front-end/DebuggerModel.js:162
&gt; +WebInspector.Breakpoint = function(debuggerModel, sourceID, url, line, enabled, condition)

Should this be extracted into a separate file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318157</commentid>
    <comment_count>4</comment_count>
      <attachid>75807</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-07 06:30:11 -0800</bug_when>
    <thetext>Created attachment 75807
Comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318158</commentid>
    <comment_count>5</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-07 06:31:03 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 75686 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75686&amp;action=review
&gt; 
&gt; Not checking the overall logic as I&apos;m not quite familiar with it.
&gt; 
&gt; &gt; WebCore/ChangeLog:8
&gt; &gt; +        * English.lproj/localizedStrings.js:
&gt; 
&gt; For this file&apos;s diff to be found in the patch, you need to use the &quot;--binary&quot; flag.

cq doesn&apos;t process binary diffs.

&gt; 
&gt; &gt; WebCore/WebCore.vcproj/WebCore.vcproj:65215
&gt; &gt; +        &lt;File
&gt; 
&gt; You seem to have spaces rather than tabs here. The file should only use tabs as leading indents, and all the stuff should be aligned.
&gt; 
&gt; &gt; WebCore/inspector/front-end/DebuggerModel.js:14
&gt; &gt; + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS&apos;&apos; AND ANY
&gt; 
&gt; You should use the correct, up-to-date license boilerplate. Make use of the one found e.g. in ExtensionPanel.js
&gt; 
&gt; &gt; WebCore/inspector/front-end/inspector.js:1306
&gt; &gt; +    this.debuggerModel.restoredBreakpoint(sourceID, sourceURL, line, enabled, condition);
&gt; 
&gt; The method had better been called &quot;breakpointRestored&quot;, as this seems to be an event notification, right? (akin to &quot;debuggerResumed&quot;)

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318160</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-07 06:36:43 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 75686 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75686&amp;action=review
&gt; 
&gt; What about WebInspector.parsedScriptSource, debuggerWasEnabled, debuggerWasDisabled, activateBreakpoints, stepOverStatement, etc.? They all should go through the DebuggerModel, right?

Yes. I&apos;ll extract stuff from ScriptsPanel as a separate patch.

&gt; 
&gt; &gt; WebCore/inspector/front-end/DebuggerModel.js:27
&gt; &gt; +WebInspector.DebuggerModel = function()
&gt; 
&gt; Is this only a rename for BreakpointManager? Could you describe changes in the ChangeLog?

Not exactly, debugging-related code (that mirrors InspectorDebuggerAgent) moved from BreakpointManager to DebuggerModel. Updated ChangeLog.

&gt; 
&gt; &gt; WebCore/inspector/front-end/DebuggerModel.js:143
&gt; &gt; +        breakpoint.dispatchEventToListeners(&quot;hit-state-changed&quot;);
&gt; 
&gt; Breakpoint event dispatching should be encapsulated in the hit setter.
&gt; 

Done.

&gt; &gt; WebCore/inspector/front-end/DebuggerModel.js:145
&gt; &gt; +        this.dispatchEventToListeners(&quot;script-breakpoint-hit&quot;, breakpoint);
&gt; 
&gt; This method fires way too many events. Events-driven operation brings in a lot of indirection. It should only be used when necessary (i.e. breaking unhealthy dependencies).

debuggerPaused event has a lot of effects on different parts of UI. We may merge some events together if it appears to be a performance problem.

&gt; 
&gt; &gt; WebCore/inspector/front-end/DebuggerModel.js:162
&gt; &gt; +WebInspector.Breakpoint = function(debuggerModel, sourceID, url, line, enabled, condition)
&gt; 
&gt; Should this be extracted into a separate file?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318710</commentid>
    <comment_count>7</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-08 03:18:15 -0800</bug_when>
    <thetext>Committed r73501: &lt;http://trac.webkit.org/changeset/73501&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75686</attachid>
            <date>2010-12-06 06:20:23 -0800</date>
            <delta_ts>2010-12-07 06:30:11 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>35343</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
N2U4MjVlZi4uOGI2YjFlMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw0OCBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGludHJvZHVjZSBEZWJ1Z2dl
ck1vZGVsIGNsYXNzIHJlcHJlc2VudGluZyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IHN0YXRlLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA1NjcKKwor
ICAgICAgICAqIEVuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qczoKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlcik6IE1vdmUgZGVidWdnZXItcmVsYXRl
ZCBtZXRob2RzIHRvIERlYnVnZ2VyTW9kZWwuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9DYWxsU3RhY2tTaWRlYmFyUGFuZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DYWxsU3Rh
Y2tTaWRlYmFyUGFuZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2FsbFN0YWNrU2lkZWJhclBh
bmUucHJvdG90eXBlLl9uYXRpdmVCcmVha3BvaW50SGl0KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5DYWxsU3RhY2tTaWRlYmFyUGFuZS5wcm90b3R5cGUuX3NjcmlwdEJyZWFrcG9pbnRIaXQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJNb2RlbC5qczogQWRkZWQuCisg
ICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbCk6IFJlbGF0ZWQgbWV0aG9kcyBtb3Zl
ZCBoZXJlIGZyb20gQnJlYWtwb2ludE1hbmFnZXIKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50KTogTW92ZWQgZnJvbSBCcmVha3BvaW50TWFuYWdlci5qcy4gQnJlYWtwb2ludE1hbmFn
ZXIgZG9lc24ndCBtYW5hZ2UKKyAgICAgICAgc2NyaXB0IGJyZWFrcG9pbnRzIGFueW1vcmUuCisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanM6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRz
UGFuZWwucHJvdG90eXBlLmNvbnRpbnVlVG9MaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
Y3JpcHRzUGFuZWwucHJvdG90eXBlLmVkaXRTY3JpcHRTb3VyY2UubXljYWxsYmFjayk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5lZGl0U2NyaXB0U291cmNl
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9kZWJ1Z2dl
clBhdXNlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5f
ZGVidWdnZXJSZXN1bWVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJv
dG90eXBlLnJlc2V0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1l
LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fY3JlYXRl
Vmlld2VySWZOZWVkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lRGVsZWdh
dGUucHJvdG90eXBlLmFkZEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lRGVsZWdhdGUucHJvdG90eXBlLmJyZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZS5maW5kQnJlYWtwb2ludCk6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjOgorICAgICAgICAqIGluc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuY3JlYXRlSlNCcmVha3BvaW50
c1NpZGViYXJQYW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5yZXN0b3JlZEJyZWFrcG9pbnQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLnBhdXNlZFNjcmlwdCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IucmVzdW1lZFNjcmlwdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IucmVzZXQpOgorCisy
MDEwLTEyLTA2ICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFNvdXJjZUZyYW1lIHJlZmFjdG9yaW5nLgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAyMjMKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9FbmdsaXNo
Lmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMgYi9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxp
emVkU3RyaW5ncy5qcwppbmRleCAyZjgwNGNkLi5kOTY2NzFhIDEwMDY0NApCaW5hcnkgZmlsZXMg
YS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcyBhbmQgYi9XZWJDb3Jl
L0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMDFjNWM4OS4u
ZTk1NjVhYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTQ1OTYsNiArNDU5Niw3IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9y
L2Zyb250LWVuZC9EYXRhYmFzZVF1ZXJ5Vmlldy5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9y
L2Zyb250LWVuZC9EYXRhYmFzZVRhYmxlVmlldy5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9y
L2Zyb250LWVuZC9EYXRhR3JpZC5qcycsCisgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVu
ZC9EZWJ1Z2dlck1vZGVsLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0RP
TUFnZW50LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0RPTVN0b3JhZ2Uu
anMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRE9NU3RvcmFnZUl0ZW1zVmll
dy5qcycsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
IGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCAzYTA0YmFjLi5j
MDg2N2E0IDEwMDc1NQotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTY1MjEyLDYg
KzY1MjEyLDEwIEBACiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxE
YXRhR3JpZC5qcyIKIAkJCQkJPgogCQkJCTwvRmlsZT4KKyAgICAgICAgPEZpbGUKKyAgICAgICAg
ICBSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRGVidWdnZXJNb2RlbC5qcyIK
KyAgICAgICAgICA+CisgICAgICAgIDwvRmlsZT4KIAkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRE9NQWdlbnQuanMiCiAJCQkJCT4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcwppbmRleCBmNzEy
MzY3Li42NGRmMjAzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJl
YWtwb2ludE1hbmFnZXIuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFr
cG9pbnRNYW5hZ2VyLmpzCkBAIC0yNiwxMDUgKzI2LDE0IEBACiAKIFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50TWFuYWdlciA9IGZ1bmN0aW9uKCkKIHsKLSAgICB0aGlzLl9icmVha3BvaW50cyA9IHt9
OwogICAgIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzID0ge307CisgICAgdGhpcy5fYmFja2VuZElk
VG9CcmVha3BvaW50ID0ge307CisKKyAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRF
dmVudExpc3RlbmVyKCJuYXRpdmUtYnJlYWtwb2ludC1oaXQiLCB0aGlzLl9uYXRpdmVCcmVha3Bv
aW50SGl0LCB0aGlzKTsKKyAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExp
c3RlbmVyKCJkZWJ1Z2dlci1yZXN1bWVkIiwgdGhpcy5fZGVidWdnZXJSZXN1bWVkLCB0aGlzKTsK
IH0KIAogV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKLSAgICBz
ZXRPbmVUaW1lQnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIGxpbmUpCi0gICAgewotICAg
ICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCh0aGlzLCBz
b3VyY2VJRCwgdW5kZWZpbmVkLCBsaW5lLCB0cnVlLCB1bmRlZmluZWQpOwotICAgICAgICBpZiAo
dGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF0pCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGlmICh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludCkKLSAgICAgICAgICAgIEluc3BlY3Rv
ckJhY2tlbmQucmVtb3ZlQnJlYWtwb2ludCh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludC5zb3VyY2VJ
RCwgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQubGluZSk7Ci0gICAgICAgIHRoaXMuX29uZVRpbWVC
cmVha3BvaW50ID0gYnJlYWtwb2ludDsKLSAgICAgICAgLy8gRklYTUUoNDA2NjkpOiBvbmUgdGlt
ZSBicmVha3BvaW50IHdpbGwgYmUgcGVyc2lzdGVkIGluIGluc3BlY3RvciBzZXR0aW5ncyBpZiBu
b3QgaGl0LgotICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50T25CYWNrZW5kKGJyZWFrcG9pbnQs
IHRydWUpOwotICAgIH0sCi0KLSAgICByZW1vdmVPbmVUaW1lQnJlYWtwb2ludDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX29uZVRpbWVCcmVha3BvaW50KSB7Ci0gICAgICAg
ICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQodGhpcy5fb25lVGltZUJyZWFr
cG9pbnQuc291cmNlSUQsIHRoaXMuX29uZVRpbWVCcmVha3BvaW50LmxpbmUpOwotICAgICAgICAg
ICAgZGVsZXRlIHRoaXMuX29uZVRpbWVCcmVha3BvaW50OwotICAgICAgICB9Ci0gICAgfSwKLQot
ICAgIHNldEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQs
IGNvbmRpdGlvbikKLSAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fc2V0QnJl
YWtwb2ludChzb3VyY2VJRCwgdXJsLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pOwotICAgICAg
ICBpZiAoYnJlYWtwb2ludCkKLSAgICAgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnRPbkJhY2tl
bmQoYnJlYWtwb2ludCk7Ci0gICAgfSwKLQotICAgIHJlc3RvcmVkQnJlYWtwb2ludDogZnVuY3Rp
b24oc291cmNlSUQsIHVybCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQotICAgIHsKLSAgICAg
ICAgdGhpcy5fc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgdXJsLCBsaW5lLCBlbmFibGVkLCBjb25k
aXRpb24pOwotICAgIH0sCi0KLSAgICBmaW5kQnJlYWtwb2ludHM6IGZ1bmN0aW9uKGZpbHRlcikK
LSAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50cyA9IFtdOwotICAgICAgICBmb3IgKHZhciBp
ZCBpbiB0aGlzLl9icmVha3BvaW50cykgewotICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRo
aXMuX2JyZWFrcG9pbnRzW2lkXTsKLSAgICAgICAgICAgaWYgKGZpbHRlcihicmVha3BvaW50KSkK
LSAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzLnB1c2goYnJlYWtwb2ludCk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnRzOwotICAgIH0sCi0KLSAgICBmaW5kQnJlYWtwb2lu
dDogZnVuY3Rpb24oc291cmNlSUQsIGxpbmVOdW1iZXIpCi0gICAgewotICAgICAgICB2YXIgYnJl
YWtwb2ludElkID0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuanNCcmVha3BvaW50SWQoc291cmNl
SUQsIGxpbmVOdW1iZXIpOwotICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtw
b2ludElkXTsKLSAgICB9LAotCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuX2JyZWFrcG9pbnRzID0ge307Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9vbmVUaW1lQnJl
YWtwb2ludDsKLSAgICAgICAgdGhpcy5fbmF0aXZlQnJlYWtwb2ludHMgPSB7fTsKLSAgICB9LAot
Ci0gICAgX3NldEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJs
ZWQsIGNvbmRpdGlvbikKLSAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYklu
c3BlY3Rvci5CcmVha3BvaW50KHRoaXMsIHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNv
bmRpdGlvbik7Ci0gICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHRoaXMuX29uZVRpbWVCcmVha3BvaW50
ICYmICh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludC5pZCA9PSBicmVha3BvaW50LmlkKSkKLSAgICAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludDsKLSAgICAgICAgdGhpcy5fYnJl
YWtwb2ludHNbYnJlYWtwb2ludC5pZF0gPSBicmVha3BvaW50OwotICAgICAgICBicmVha3BvaW50
LmFkZEV2ZW50TGlzdGVuZXIoInJlbW92ZWQiLCB0aGlzLl9icmVha3BvaW50UmVtb3ZlZCwgdGhp
cyk7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJicmVha3BvaW50LWFk
ZGVkIiwgYnJlYWtwb2ludCk7Ci0gICAgICAgIHJldHVybiBicmVha3BvaW50OwotICAgIH0sCi0K
LSAgICBfYnJlYWtwb2ludFJlbW92ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAg
ZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRzW2V2ZW50LnRhcmdldC5pZF07Ci0gICAgfSwKLQotICAg
IF9zZXRCcmVha3BvaW50T25CYWNrZW5kOiBmdW5jdGlvbihicmVha3BvaW50LCBpc09uZVRpbWUp
Ci0gICAgewotICAgICAgICBmdW5jdGlvbiBkaWRTZXRCcmVha3BvaW50KHN1Y2Nlc3MsIGxpbmUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzdWNjZXNzICYmIGxpbmUgPT0gYnJlYWtwb2lu
dC5saW5lKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmIChpc09uZVRp
bWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3VjY2VzcykKLSAgICAgICAgICAgICAgICAgICAg
dGhpcy5fb25lVGltZUJyZWFrcG9pbnQubGluZSA9IGxpbmU7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQ7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMu
X3NldEJyZWFrcG9pbnQoYnJlYWtwb2ludC5zb3VyY2VJRCwgYnJlYWtwb2ludC51cmwsIGxpbmUs
IGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24pOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0QnJlYWtwb2ludChicmVh
a3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50LmxpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJl
YWtwb2ludC5jb25kaXRpb24sIGRpZFNldEJyZWFrcG9pbnQuYmluZCh0aGlzKSk7Ci0gICAgfSwK
LQogICAgIGNyZWF0ZURPTUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKG5vZGVJZCwgZG9tRXZlbnRUeXBl
LCBkaXNhYmxlZCkKICAgICB7CiAgICAgICAgIHZhciBmcm9udGVuZElkID0gImRvbToiICsgbm9k
ZUlkICsgIjoiICsgZG9tRXZlbnRUeXBlOwpAQCAtMTY0LDYgKzczLDExIEBAIFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiBicmVha3Bv
aW50OwogICAgIH0sCiAKKyAgICBmaW5kQnJlYWtwb2ludDogZnVuY3Rpb24oYmFja2VuZEJyZWFr
cG9pbnRJZCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9iYWNrZW5kSWRUb0JyZWFrcG9p
bnRbYmFja2VuZEJyZWFrcG9pbnRJZF07CisgICAgfSwKKwogICAgIF9yZW1vdmVOYXRpdmVCcmVh
a3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQogICAgIHsKICAgICAgICAgaWYgKGJyZWFrcG9p
bnQuX2JlaW5nU2V0T25CYWNrZW5kKQpAQCAtMTk4LDcgKzExMiw3IEBAIFdlYkluc3BlY3Rvci5C
cmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBicmVha3BvaW50Ll9i
ZWluZ1NldE9uQmFja2VuZCA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKGJhY2tlbmRCcmVha3Bv
aW50SWQgIT09ICIiKSB7CiAgICAgICAgICAgICAgICAgYnJlYWtwb2ludC5fYmFja2VuZElkID0g
YmFja2VuZEJyZWFrcG9pbnRJZDsKLSAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50c1ti
YWNrZW5kQnJlYWtwb2ludElkXSA9IGJyZWFrcG9pbnQ7CisgICAgICAgICAgICAgICAgdGhpcy5f
YmFja2VuZElkVG9CcmVha3BvaW50W2JhY2tlbmRCcmVha3BvaW50SWRdID0gYnJlYWtwb2ludDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrcG9pbnQuZGlzcGF0Y2hFdmVudFRvTGlz
dGVuZXJzKCJlbmFibGUtY2hhbmdlZCIpOwogICAgICAgICAgICAgdGhpcy5fdXBkYXRlTmF0aXZl
QnJlYWtwb2ludHNJblNldHRpbmdzKCk7CkBAIC0yMDgsNyArMTIyLDcgQEAgV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICBfcmVtb3ZlTmF0aXZlQnJlYWtw
b2ludEZyb21CYWNrZW5kOiBmdW5jdGlvbihicmVha3BvaW50KQogICAgIHsKICAgICAgICAgSW5z
cGVjdG9yQmFja2VuZC5yZW1vdmVOYXRpdmVCcmVha3BvaW50KGJyZWFrcG9pbnQuX2JhY2tlbmRJ
ZCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50Ll9iYWNrZW5k
SWRdCisgICAgICAgIGRlbGV0ZSB0aGlzLl9iYWNrZW5kSWRUb0JyZWFrcG9pbnRbYnJlYWtwb2lu
dC5fYmFja2VuZElkXQogICAgICAgICBkZWxldGUgYnJlYWtwb2ludC5fYmFja2VuZElkOwogICAg
ICAgICBicmVha3BvaW50LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiZW5hYmxlLWNoYW5nZWQi
KTsKICAgICAgICAgdGhpcy5fdXBkYXRlTmF0aXZlQnJlYWtwb2ludHNJblNldHRpbmdzKCk7CkBA
IC0yMjUsMzAgKzEzOSwyMCBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90
eXBlID0gewogICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MubmF0aXZlQnJlYWtwb2ludHMg
PSBwZXJzaXN0ZW50QnJlYWtwb2ludHM7CiAgICAgfSwKIAotICAgIGRlYnVnZ2VyUGF1c2VkOiBm
dW5jdGlvbihkZXRhaWxzKQorICAgIF9uYXRpdmVCcmVha3BvaW50SGl0OiBmdW5jdGlvbihldmVu
dCkKICAgICB7Ci0gICAgICAgIGlmIChkZXRhaWxzLmV2ZW50VHlwZSA9PT0gV2ViSW5zcGVjdG9y
LkRlYnVnZ2VyRXZlbnRUeXBlcy5KYXZhU2NyaXB0UGF1c2UpCi0gICAgICAgICAgICByZXR1cm47
CisgICAgICAgIHZhciBicmVha3BvaW50SWQgPSBldmVudC5kYXRhLmJyZWFrcG9pbnRJZDsKIAot
ICAgICAgICBpZiAoZGV0YWlscy5ldmVudERhdGEgJiYgZGV0YWlscy5ldmVudERhdGEuYnJlYWtw
b2ludElkKQotICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRJZCA9IGRldGFpbHMuZXZlbnREYXRh
LmJyZWFrcG9pbnRJZDsKLSAgICAgICAgZWxzZSBpZiAoZGV0YWlscy5jYWxsRnJhbWVzICYmIGRl
dGFpbHMuY2FsbEZyYW1lcy5sZW5ndGgpCi0gICAgICAgICAgICB2YXIgYnJlYWtwb2ludElkID0g
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuanNCcmVha3BvaW50SWQoZGV0YWlscy5jYWxsRnJhbWVz
WzBdLnNvdXJjZUlELCBkZXRhaWxzLmNhbGxGcmFtZXNbMF0ubGluZSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2Jy
ZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF07CisgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5f
YmFja2VuZElkVG9CcmVha3BvaW50W2JyZWFrcG9pbnRJZF07CiAgICAgICAgIGlmICghYnJlYWtw
b2ludCkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBicmVha3BvaW50LmhpdCA9IHRy
dWU7CiAgICAgICAgIGJyZWFrcG9pbnQuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJoaXQtc3Rh
dGUtY2hhbmdlZCIpOwogICAgICAgICB0aGlzLl9sYXN0SGl0QnJlYWtwb2ludCA9IGJyZWFrcG9p
bnQ7Ci0KLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImJyZWFrcG9pbnQt
aGl0IiwgeyBicmVha3BvaW50OiBicmVha3BvaW50LCBldmVudERhdGE6IGRldGFpbHMuZXZlbnRE
YXRhIH0pOwogICAgIH0sCiAKLSAgICBkZWJ1Z2dlclJlc3VtZWQ6IGZ1bmN0aW9uKCkKKyAgICBf
ZGVidWdnZXJSZXN1bWVkOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIGlmICghdGhp
cy5fbGFzdEhpdEJyZWFrcG9pbnQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMTEsMTEyICsy
MTUsMTYgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX0K
LQotV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBX
ZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKLQotV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQg
PSBmdW5jdGlvbihicmVha3BvaW50TWFuYWdlciwgc291cmNlSUQsIHVybCwgbGluZSwgZW5hYmxl
ZCwgY29uZGl0aW9uKQotewotICAgIHRoaXMudXJsID0gdXJsOwotICAgIHRoaXMubGluZSA9IGxp
bmU7Ci0gICAgdGhpcy5zb3VyY2VJRCA9IHNvdXJjZUlEOwotICAgIHRoaXMuX2VuYWJsZWQgPSBl
bmFibGVkOwotICAgIHRoaXMuX2NvbmRpdGlvbiA9IGNvbmRpdGlvbiB8fCAiIjsKLSAgICB0aGlz
Ll9zb3VyY2VUZXh0ID0gIiI7Ci0gICAgdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIgPSBicmVha3Bv
aW50TWFuYWdlcjsKLX0KLQotV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuanNCcmVha3BvaW50SWQg
PSBmdW5jdGlvbihzb3VyY2VJRCwgbGluZSkKLXsKLSAgICByZXR1cm4gc291cmNlSUQgKyAiOiIg
KyBsaW5lOwotfQotCi1XZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7Ci0gICAg
Z2V0IGVuYWJsZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7Ci0gICAg
fSwKLQotICAgIHNldCBlbmFibGVkKHgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fZW5hYmxl
ZCA9PT0geCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9lbmFibGVkID0g
eDsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuX3NldEJyZWFrcG9pbnRPbkJhY2tl
bmQodGhpcyk7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJlbmFibGUt
Y2hhbmdlZCIpOwotICAgIH0sCi0KLSAgICBnZXQgc291cmNlVGV4dCgpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fc291cmNlVGV4dDsKLSAgICB9LAotCi0gICAgc2V0IHNvdXJjZVRleHQo
dGV4dCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3NvdXJjZVRleHQgPSB0ZXh0OwotICAgICAgICB0
aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygibGFiZWwtY2hhbmdlZCIpOwotICAgIH0sCi0K
LSAgICBnZXQgaWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50LmpzQnJlYWtwb2ludElkKHRoaXMuc291cmNlSUQsIHRoaXMubGluZSk7Ci0gICAgfSwKLQot
ICAgIGdldCBjb25kaXRpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmRpdGlv
bjsKLSAgICB9LAotCi0gICAgc2V0IGNvbmRpdGlvbihjKQotICAgIHsKLSAgICAgICAgYyA9IGMg
fHwgIiI7Ci0gICAgICAgIGlmICh0aGlzLl9jb25kaXRpb24gPT09IGMpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fY29uZGl0aW9uID0gYzsKLSAgICAgICAgaWYgKHRoaXMu
ZW5hYmxlZCkKLSAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyLl9zZXRCcmVha3Bv
aW50T25CYWNrZW5kKHRoaXMpOwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVy
cygiY29uZGl0aW9uLWNoYW5nZWQiKTsKLSAgICB9LAotCi0gICAgY2xpY2s6IGZ1bmN0aW9uKGV2
ZW50KQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnNob3dTb3Vy
Y2VMaW5lKHRoaXMudXJsLCB0aGlzLmxpbmUpOwotICAgIH0sCi0KLSAgICBjb21wYXJlVG86IGZ1
bmN0aW9uKG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMudXJsICE9IG90aGVyLnVybCkK
LSAgICAgICAgICAgIHJldHVybiB0aGlzLnVybCA8IG90aGVyLnVybCA/IC0xIDogMTsKLSAgICAg
ICAgaWYgKHRoaXMubGluZSAhPSBvdGhlci5saW5lKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMu
bGluZSA8IG90aGVyLmxpbmUgPyAtMSA6IDE7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0sCi0K
LSAgICBwb3B1bGF0ZUxhYmVsRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCkKLSAgICB7Ci0gICAg
ICAgIHZhciBkaXNwbGF5TmFtZSA9IHRoaXMudXJsID8gV2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1l
Rm9yVVJMKHRoaXMudXJsKSA6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKHByb2dyYW0pIik7Ci0g
ICAgICAgIHZhciBsYWJlbEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkaXNwbGF5
TmFtZSArICI6IiArIHRoaXMubGluZSk7Ci0gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQobGFi
ZWxFbGVtZW50KTsKLQotICAgICAgICB2YXIgc291cmNlVGV4dEVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgc291cmNlVGV4dEVsZW1lbnQudGV4dENvbnRl
bnQgPSB0aGlzLnNvdXJjZVRleHQ7Ci0gICAgICAgIHNvdXJjZVRleHRFbGVtZW50LmNsYXNzTmFt
ZSA9ICJzb3VyY2UtdGV4dCBtb25vc3BhY2UiOwotICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxk
KHNvdXJjZVRleHRFbGVtZW50KTsKICAgICB9LAogCi0gICAgcmVtb3ZlOiBmdW5jdGlvbigpCisg
ICAgcmVzZXQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVt
b3ZlQnJlYWtwb2ludCh0aGlzLnNvdXJjZUlELCB0aGlzLmxpbmUpOwotICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycygicmVtb3ZlZCIpOwotICAgICAgICB0aGlzLnJlbW92ZUFs
bExpc3RlbmVycygpOwotICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludE1hbmFnZXI7Cisg
ICAgICAgIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzID0ge307CisgICAgICAgIHRoaXMuX2JhY2tl
bmRJZFRvQnJlYWtwb2ludCA9IHt9OwogICAgIH0KIH0KIAotV2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOwor
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJ
bnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKIAogV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9p
bnQgPSBmdW5jdGlvbihtYW5hZ2VyLCBmcm9udGVuZElkLCB0eXBlKQogewpAQCAtNjIwLDEyICs0
MjgsNiBAQCBXZWJJbnNwZWN0b3IuWEhSQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7CiAKIFdlYklu
c3BlY3Rvci5YSFJCcmVha3BvaW50LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3Iu
TmF0aXZlQnJlYWtwb2ludC5wcm90b3R5cGU7CiAKLVdlYkluc3BlY3Rvci5EZWJ1Z2dlckV2ZW50
VHlwZXMgPSB7Ci0gICAgSmF2YVNjcmlwdFBhdXNlOiAwLAotICAgIEphdmFTY3JpcHRCcmVha3Bv
aW50OiAxLAotICAgIE5hdGl2ZUJyZWFrcG9pbnQ6IDIKLX07Ci0KIFdlYkluc3BlY3Rvci5ET01C
cmVha3BvaW50VHlwZXMgPSB7CiAgICAgU3VidHJlZU1vZGlmaWVkOiAwLAogICAgIEF0dHJpYnV0
ZU1vZGlmaWVkOiAxLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Nh
bGxTdGFja1NpZGViYXJQYW5lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxT
dGFja1NpZGViYXJQYW5lLmpzCmluZGV4IGIyZTZhNWMuLjE2YzVmZTQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsU3RhY2tTaWRlYmFyUGFuZS5qcworKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUuanMKQEAgLTI2
LDcgKzI2LDggQEAKIFdlYkluc3BlY3Rvci5DYWxsU3RhY2tTaWRlYmFyUGFuZSA9IGZ1bmN0aW9u
KCkKIHsKICAgICBXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmUuY2FsbCh0aGlzLCBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIkNhbGwgU3RhY2siKSk7Ci0gICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRN
YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoImJyZWFrcG9pbnQtaGl0IiwgdGhpcy5fYnJlYWtwb2lu
dEhpdCwgdGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0
ZW5lcigibmF0aXZlLWJyZWFrcG9pbnQtaGl0IiwgdGhpcy5fbmF0aXZlQnJlYWtwb2ludEhpdCwg
dGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcigi
c2NyaXB0LWJyZWFrcG9pbnQtaGl0IiwgdGhpcy5fc2NyaXB0QnJlYWtwb2ludEhpdCwgdGhpcyk7
CiB9CiAKIFdlYkluc3BlY3Rvci5DYWxsU3RhY2tTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CkBA
IC0xNzAsMTUgKzE3MSwyMyBAQCBXZWJJbnNwZWN0b3IuQ2FsbFN0YWNrU2lkZWJhclBhbmUucHJv
dG90eXBlID0gewogICAgICAgICBzZWN0aW9uLmFkZFJlbGF0ZWRLZXlzKFsgbmV4dENhbGxGcmFt
ZS5uYW1lLCBwcmV2Q2FsbEZyYW1lLm5hbWUgXSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJOZXh0
L3ByZXZpb3VzIGNhbGwgZnJhbWUiKSk7CiAgICAgfSwKIAotICAgIF9icmVha3BvaW50SGl0OiAg
ZnVuY3Rpb24oZXZlbnQpCisgICAgX25hdGl2ZUJyZWFrcG9pbnRIaXQ6ICBmdW5jdGlvbihldmVu
dCkKICAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQuZGF0YS5icmVha3BvaW50
OwotICAgICAgICBpZiAoYnJlYWtwb2ludC5wb3B1bGF0ZVN0YXR1c01lc3NhZ2VFbGVtZW50KSB7
Ci0gICAgICAgICAgICB2YXIgc3RhdHVzTWVzc2FnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgIHN0YXR1c01lc3NhZ2VFbGVtZW50LmNsYXNzTmFt
ZSA9ICJpbmZvIjsKLSAgICAgICAgICAgIGJyZWFrcG9pbnQucG9wdWxhdGVTdGF0dXNNZXNzYWdl
RWxlbWVudChzdGF0dXNNZXNzYWdlRWxlbWVudCwgZXZlbnQuZGF0YS5ldmVudERhdGEpOwotICAg
ICAgICAgICAgdGhpcy5ib2R5RWxlbWVudC5hcHBlbmRDaGlsZChzdGF0dXNNZXNzYWdlRWxlbWVu
dCk7Ci0gICAgICAgIH0KKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBXZWJJbnNwZWN0b3IuYnJl
YWtwb2ludE1hbmFnZXIuZmluZEJyZWFrcG9pbnQoZXZlbnQuZGF0YS5icmVha3BvaW50SWQpOwor
ICAgICAgICBpZiAoIWJyZWFrcG9pbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZh
ciBzdGF0dXNNZXNzYWdlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwor
ICAgICAgICBzdGF0dXNNZXNzYWdlRWxlbWVudC5jbGFzc05hbWUgPSAiaW5mbyI7CisgICAgICAg
IGJyZWFrcG9pbnQucG9wdWxhdGVTdGF0dXNNZXNzYWdlRWxlbWVudChzdGF0dXNNZXNzYWdlRWxl
bWVudCwgZXZlbnQuZGF0YS5ldmVudERhdGEpOworICAgICAgICB0aGlzLmJvZHlFbGVtZW50LmFw
cGVuZENoaWxkKHN0YXR1c01lc3NhZ2VFbGVtZW50KTsKKyAgICB9LAorCisgICAgX3NjcmlwdEJy
ZWFrcG9pbnRIaXQ6ICBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHZhciBzdGF0dXNN
ZXNzYWdlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBz
dGF0dXNNZXNzYWdlRWxlbWVudC5jbGFzc05hbWUgPSAiaW5mbyI7CisgICAgICAgIHN0YXR1c01l
c3NhZ2VFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiUGF1c2VkIG9uIGEgSmF2YVNjcmlwdCBicmVha3BvaW50LiIpKSk7Cisg
ICAgICAgIHRoaXMuYm9keUVsZW1lbnQuYXBwZW5kQ2hpbGQoc3RhdHVzTWVzc2FnZUVsZW1lbnQp
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Rl
YnVnZ2VyTW9kZWwuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJNb2Rl
bC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTNiZTM1Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyTW9kZWwuanMK
QEAgLTAsMCArMSwyNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK1dlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsID0gZnVuY3Rpb24oKQoreworICAgIHRo
aXMuX2JyZWFrcG9pbnRzID0ge307Cit9CisKK1dlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLnBy
b3RvdHlwZSA9IHsKKyAgICBzZXRPbmVUaW1lQnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQs
IGxpbmUpCisgICAgeworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludCh0aGlzLCBzb3VyY2VJRCwgdW5kZWZpbmVkLCBsaW5lLCB0cnVlLCB1bmRlZmlu
ZWQpOworICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF0pCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGlmICh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludCkKKyAg
ICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVtb3ZlQnJlYWtwb2ludCh0aGlzLl9vbmVUaW1l
QnJlYWtwb2ludC5zb3VyY2VJRCwgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQubGluZSk7CisgICAg
ICAgIHRoaXMuX29uZVRpbWVCcmVha3BvaW50ID0gYnJlYWtwb2ludDsKKyAgICAgICAgLy8gRklY
TUUoNDA2NjkpOiBvbmUgdGltZSBicmVha3BvaW50IHdpbGwgYmUgcGVyc2lzdGVkIGluIGluc3Bl
Y3RvciBzZXR0aW5ncyBpZiBub3QgaGl0LgorICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50T25C
YWNrZW5kKGJyZWFrcG9pbnQsIHRydWUpOworICAgIH0sCisKKyAgICByZW1vdmVPbmVUaW1lQnJl
YWtwb2ludDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX29uZVRpbWVCcmVh
a3BvaW50KSB7CisgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQo
dGhpcy5fb25lVGltZUJyZWFrcG9pbnQuc291cmNlSUQsIHRoaXMuX29uZVRpbWVCcmVha3BvaW50
LmxpbmUpOworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX29uZVRpbWVCcmVha3BvaW50OworICAg
ICAgICB9CisgICAgfSwKKworICAgIHNldEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCB1
cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIHZhciBicmVha3Bv
aW50ID0gdGhpcy5fc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgdXJsLCBsaW5lLCBlbmFibGVkLCBj
b25kaXRpb24pOworICAgICAgICBpZiAoYnJlYWtwb2ludCkKKyAgICAgICAgICAgIHRoaXMuX3Nl
dEJyZWFrcG9pbnRPbkJhY2tlbmQoYnJlYWtwb2ludCk7CisgICAgfSwKKworICAgIHJlc3RvcmVk
QnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIHVybCwgbGluZSwgZW5hYmxlZCwgY29uZGl0
aW9uKQorICAgIHsKKyAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgdXJsLCBs
aW5lLCBlbmFibGVkLCBjb25kaXRpb24pOworICAgIH0sCisKKyAgICBmaW5kQnJlYWtwb2ludHM6
IGZ1bmN0aW9uKGZpbHRlcikKKyAgICB7CisgICAgICAgIHZhciBicmVha3BvaW50cyA9IFtdOwor
ICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9icmVha3BvaW50cykgeworICAgICAgICAgICB2
YXIgYnJlYWtwb2ludCA9IHRoaXMuX2JyZWFrcG9pbnRzW2lkXTsKKyAgICAgICAgICAgaWYgKGZp
bHRlcihicmVha3BvaW50KSkKKyAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzLnB1c2goYnJlYWtw
b2ludCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnRzOworICAgIH0sCisK
KyAgICBmaW5kQnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIGxpbmVOdW1iZXIpCisgICAg
eworICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuanNC
cmVha3BvaW50SWQoc291cmNlSUQsIGxpbmVOdW1iZXIpOworICAgICAgICByZXR1cm4gdGhpcy5f
YnJlYWtwb2ludHNbYnJlYWtwb2ludElkXTsKKyAgICB9LAorCisgICAgcmVzZXQ6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzID0ge307CisgICAgICAgIGRlbGV0
ZSB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludDsKKyAgICB9LAorCisgICAgX3NldEJyZWFrcG9pbnQ6
IGZ1bmN0aW9uKHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKKyAgICB7
CisgICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50KHRo
aXMsIHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CisgICAgICAgIGlm
ICh0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgaWYgKHRoaXMuX29uZVRpbWVCcmVha3BvaW50ICYmICh0aGlzLl9vbmVUaW1lQnJl
YWtwb2ludC5pZCA9PSBicmVha3BvaW50LmlkKSkKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9v
bmVUaW1lQnJlYWtwb2ludDsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludC5p
ZF0gPSBicmVha3BvaW50OworICAgICAgICBicmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIoInJl
bW92ZWQiLCB0aGlzLl9icmVha3BvaW50UmVtb3ZlZCwgdGhpcyk7CisgICAgICAgIHRoaXMuZGlz
cGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJicmVha3BvaW50LWFkZGVkIiwgYnJlYWtwb2ludCk7Cisg
ICAgICAgIHJldHVybiBicmVha3BvaW50OworICAgIH0sCisKKyAgICBfYnJlYWtwb2ludFJlbW92
ZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9p
bnRzW2V2ZW50LnRhcmdldC5pZF07CisgICAgfSwKKworICAgIF9zZXRCcmVha3BvaW50T25CYWNr
ZW5kOiBmdW5jdGlvbihicmVha3BvaW50LCBpc09uZVRpbWUpCisgICAgeworICAgICAgICBmdW5j
dGlvbiBkaWRTZXRCcmVha3BvaW50KHN1Y2Nlc3MsIGxpbmUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChzdWNjZXNzICYmIGxpbmUgPT0gYnJlYWtwb2ludC5saW5lKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChpc09uZVRpbWUpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoc3VjY2VzcykKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25lVGltZUJyZWFrcG9p
bnQubGluZSA9IGxpbmU7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQ7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlKCk7CisgICAgICAgICAgICAgICAgaWYg
KHN1Y2Nlc3MpCisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQoYnJlYWtw
b2ludC5zb3VyY2VJRCwgYnJlYWtwb2ludC51cmwsIGxpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwg
YnJlYWtwb2ludC5jb25kaXRpb24pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IEluc3BlY3RvckJhY2tlbmQuc2V0QnJlYWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBicmVh
a3BvaW50LmxpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24sIGRp
ZFNldEJyZWFrcG9pbnQuYmluZCh0aGlzKSk7CisgICAgfSwKKworICAgIGRlYnVnZ2VyUGF1c2Vk
OiBmdW5jdGlvbihkZXRhaWxzKQorICAgIHsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoImRlYnVnZ2VyLXBhdXNlZCIsIGRldGFpbHMuY2FsbEZyYW1lcyk7CisKKyAgICAg
ICAgaWYgKGRldGFpbHMuZXZlbnRUeXBlID09PSBXZWJJbnNwZWN0b3IuRGVidWdnZXJFdmVudFR5
cGVzLkphdmFTY3JpcHRQYXVzZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGRl
dGFpbHMuZXZlbnRUeXBlID09PSBXZWJJbnNwZWN0b3IuRGVidWdnZXJFdmVudFR5cGVzLk5hdGl2
ZUJyZWFrcG9pbnQpIHsKKyAgICAgICAgICAgIHZhciBicmVha3BvaW50SWQgPSBkZXRhaWxzLmV2
ZW50RGF0YS5icmVha3BvaW50SWQ7CisgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycygibmF0aXZlLWJyZWFrcG9pbnQtaGl0IiwgeyBicmVha3BvaW50SWQ6IGJyZWFrcG9p
bnRJZCwgZXZlbnREYXRhOiBkZXRhaWxzLmV2ZW50RGF0YSB9KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBicmVha3BvaW50SWQgPSBXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludC5qc0JyZWFrcG9pbnRJZChkZXRhaWxzLmNhbGxGcmFtZXNbMF0uc291cmNlSUQs
IGRldGFpbHMuY2FsbEZyYW1lc1swXS5saW5lKTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0
aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50SWRdOworICAgICAgICBpZiAoIWJyZWFrcG9pbnQp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGJyZWFrcG9pbnQuaGl0ID0gdHJ1ZTsKKyAg
ICAgICAgYnJlYWtwb2ludC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImhpdC1zdGF0ZS1jaGFu
Z2VkIik7CisgICAgICAgIHRoaXMuX2xhc3RIaXRCcmVha3BvaW50ID0gYnJlYWtwb2ludDsKKyAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInNjcmlwdC1icmVha3BvaW50LWhp
dCIsIGJyZWFrcG9pbnQpOworICAgIH0sCisKKyAgICBkZWJ1Z2dlclJlc3VtZWQ6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJkZWJ1Z2dl
ci1yZXN1bWVkIik7CisKKyAgICAgICAgaWYgKCF0aGlzLl9sYXN0SGl0QnJlYWtwb2ludCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fbGFzdEhpdEJyZWFrcG9pbnQuaGl0ID0g
ZmFsc2U7CisgICAgICAgIHRoaXMuX2xhc3RIaXRCcmVha3BvaW50LmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycygiaGl0LXN0YXRlLWNoYW5nZWQiKTsKKyAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RI
aXRCcmVha3BvaW50OworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwucHJv
dG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOworCitXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludCA9IGZ1bmN0aW9uKGRlYnVnZ2VyTW9kZWwsIHNvdXJjZUlELCB1
cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKK3sKKyAgICB0aGlzLnVybCA9IHVybDsKKyAg
ICB0aGlzLmxpbmUgPSBsaW5lOworICAgIHRoaXMuc291cmNlSUQgPSBzb3VyY2VJRDsKKyAgICB0
aGlzLl9lbmFibGVkID0gZW5hYmxlZDsKKyAgICB0aGlzLl9jb25kaXRpb24gPSBjb25kaXRpb24g
fHwgIiI7CisgICAgdGhpcy5fc291cmNlVGV4dCA9ICIiOworICAgIHRoaXMuX2RlYnVnZ2VyTW9k
ZWwgPSBkZWJ1Z2dlck1vZGVsOworfQorCitXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5qc0JyZWFr
cG9pbnRJZCA9IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lKQoreworICAgIHJldHVybiBzb3VyY2VJ
RCArICI6IiArIGxpbmU7Cit9CisKK1dlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZSA9
IHsKKyAgICBnZXQgZW5hYmxlZCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxl
ZDsKKyAgICB9LAorCisgICAgc2V0IGVuYWJsZWQoeCkKKyAgICB7CisgICAgICAgIGlmICh0aGlz
Ll9lbmFibGVkID09PSB4KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX2Vu
YWJsZWQgPSB4OworICAgICAgICB0aGlzLl9kZWJ1Z2dlck1vZGVsLl9zZXRCcmVha3BvaW50T25C
YWNrZW5kKHRoaXMpOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiZW5h
YmxlLWNoYW5nZWQiKTsKKyAgICB9LAorCisgICAgZ2V0IHNvdXJjZVRleHQoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZVRleHQ7CisgICAgfSwKKworICAgIHNldCBzb3VyY2VU
ZXh0KHRleHQpCisgICAgeworICAgICAgICB0aGlzLl9zb3VyY2VUZXh0ID0gdGV4dDsKKyAgICAg
ICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImxhYmVsLWNoYW5nZWQiKTsKKyAgICB9
LAorCisgICAgZ2V0IGlkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludC5qc0JyZWFrcG9pbnRJZCh0aGlzLnNvdXJjZUlELCB0aGlzLmxpbmUpOworICAgIH0s
CisKKyAgICBnZXQgY29uZGl0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9jb25k
aXRpb247CisgICAgfSwKKworICAgIHNldCBjb25kaXRpb24oYykKKyAgICB7CisgICAgICAgIGMg
PSBjIHx8ICIiOworICAgICAgICBpZiAodGhpcy5fY29uZGl0aW9uID09PSBjKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX2NvbmRpdGlvbiA9IGM7CisgICAgICAgIGlmICh0
aGlzLmVuYWJsZWQpCisgICAgICAgICAgICB0aGlzLl9kZWJ1Z2dlck1vZGVsLl9zZXRCcmVha3Bv
aW50T25CYWNrZW5kKHRoaXMpOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVy
cygiY29uZGl0aW9uLWNoYW5nZWQiKTsKKyAgICB9LAorCisgICAgY2xpY2s6IGZ1bmN0aW9uKGV2
ZW50KQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnNob3dTb3Vy
Y2VMaW5lKHRoaXMudXJsLCB0aGlzLmxpbmUpOworICAgIH0sCisKKyAgICBjb21wYXJlVG86IGZ1
bmN0aW9uKG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMudXJsICE9IG90aGVyLnVybCkK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLnVybCA8IG90aGVyLnVybCA/IC0xIDogMTsKKyAgICAg
ICAgaWYgKHRoaXMubGluZSAhPSBvdGhlci5saW5lKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMu
bGluZSA8IG90aGVyLmxpbmUgPyAtMSA6IDE7CisgICAgICAgIHJldHVybiAwOworICAgIH0sCisK
KyAgICBwb3B1bGF0ZUxhYmVsRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCkKKyAgICB7CisgICAg
ICAgIHZhciBkaXNwbGF5TmFtZSA9IHRoaXMudXJsID8gV2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1l
Rm9yVVJMKHRoaXMudXJsKSA6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKHByb2dyYW0pIik7Cisg
ICAgICAgIHZhciBsYWJlbEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkaXNwbGF5
TmFtZSArICI6IiArIHRoaXMubGluZSk7CisgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQobGFi
ZWxFbGVtZW50KTsKKworICAgICAgICB2YXIgc291cmNlVGV4dEVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgc291cmNlVGV4dEVsZW1lbnQudGV4dENvbnRl
bnQgPSB0aGlzLnNvdXJjZVRleHQ7CisgICAgICAgIHNvdXJjZVRleHRFbGVtZW50LmNsYXNzTmFt
ZSA9ICJzb3VyY2UtdGV4dCBtb25vc3BhY2UiOworICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxk
KHNvdXJjZVRleHRFbGVtZW50KTsKKyAgICB9LAorCisgICAgcmVtb3ZlOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQodGhpcy5zb3Vy
Y2VJRCwgdGhpcy5saW5lKTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMo
InJlbW92ZWQiKTsKKyAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTsKKyAgICAgICAg
ZGVsZXRlIHRoaXMuX2RlYnVnZ2VyTW9kZWw7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5
cGU7CisKK1dlYkluc3BlY3Rvci5EZWJ1Z2dlckV2ZW50VHlwZXMgPSB7CisgICAgSmF2YVNjcmlw
dFBhdXNlOiAwLAorICAgIEphdmFTY3JpcHRCcmVha3BvaW50OiAxLAorICAgIE5hdGl2ZUJyZWFr
cG9pbnQ6IDIKK307CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2Ny
aXB0c1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5q
cwppbmRleCA5NDY1NzAyLi4zMzQ3OThjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9TY3JpcHRzUGFuZWwuanMKQEAgLTE3Niw2ICsxNzYsOSBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0
c1BhbmVsID0gZnVuY3Rpb24oKQogICAgIHRoaXMuX2RlYnVnZ2VyRW5hYmxlZCA9IFByZWZlcmVu
Y2VzLmRlYnVnZ2VyQWx3YXlzRW5hYmxlZDsKIAogICAgIHRoaXMucmVzZXQoKTsKKworICAgIFdl
Ykluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoImRlYnVnZ2VyLXBhdXNl
ZCIsIHRoaXMuX2RlYnVnZ2VyUGF1c2VkLCB0aGlzKTsKKyAgICBXZWJJbnNwZWN0b3IuZGVidWdn
ZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKCJkZWJ1Z2dlci1yZXN1bWVkIiwgdGhpcy5fZGVidWdn
ZXJSZXN1bWVkLCB0aGlzKTsKIH0KIAogLy8gS2VlcCB0aGVzZSBpbiBzeW5jIHdpdGggV2ViQ29y
ZTo6U2NyaXB0RGVidWdTZXJ2ZXIKQEAgLTI1Nyw3ICsyNjAsNyBAQCBXZWJJbnNwZWN0b3IuU2Ny
aXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgIGNvbnRpbnVlVG9MaW5lOiBmdW5jdGlvbihz
b3VyY2VJRCwgbGluZSkKICAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFu
YWdlci5zZXRPbmVUaW1lQnJlYWtwb2ludChzb3VyY2VJRCwgbGluZSk7CisgICAgICAgIFdlYklu
c3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnNldE9uZVRpbWVCcmVha3BvaW50KHNvdXJjZUlELCBsaW5l
KTsKICAgICAgICAgaWYgKHRoaXMucGF1c2VkKQogICAgICAgICAgICAgdGhpcy5fdG9nZ2xlUGF1
c2UoKTsKICAgICB9LApAQCAtMjkwLDcgKzI5Myw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFu
ZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIE5lZWQg
dG8gY2xlYXIgYnJlYWtwb2ludHMgYW5kIHJlLWNyZWF0ZSB0aGVtIGxhdGVyIHdoZW4gZWRpdGlu
ZyBzb3VyY2UuCi0gICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYkluc3BlY3Rvci5icmVha3Bv
aW50TWFuYWdlci5maW5kQnJlYWtwb2ludHMoZnVuY3Rpb24oYikgeyByZXR1cm4gYi5zb3VyY2VJ
RCA9PT0gZWRpdERhdGEuc291cmNlSUQgfSk7CisgICAgICAgIHZhciBicmVha3BvaW50cyA9IFdl
Ykluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmZpbmRCcmVha3BvaW50cyhmdW5jdGlvbihiKSB7IHJl
dHVybiBiLnNvdXJjZUlEID09PSBlZGl0RGF0YS5zb3VyY2VJRCB9KTsKICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkKICAgICAgICAgICAgIGJyZWFr
cG9pbnRzW2ldLnJlbW92ZSgpOwogCkBAIC0yOTksNyArMzAyLDcgQEAgV2ViSW5zcGVjdG9yLlNj
cmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBpZiAoc3VjY2VzcykgewogICAg
ICAgICAgICAgICAgIGNvbW1pdEVkaXRpbmdDYWxsYmFjayhuZXdCb2R5T3JFcnJvck1lc3NhZ2Up
OwogICAgICAgICAgICAgICAgIGlmIChjYWxsRnJhbWVzICYmIGNhbGxGcmFtZXMubGVuZ3RoKQot
ICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYnVnZ2VyUGF1c2VkKGNhbGxGcmFtZXMpOworICAg
ICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1Z2dlclBhdXNlZCh7IGRhdGE6IGNhbGxGcmFtZXMg
fSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChjYW5jZWxFZGl0
aW5nQ2FsbGJhY2spCiAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEVkaXRpbmdDYWxsYmFjaygp
OwpAQCAtMzEwLDcgKzMxMyw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgICAgIHZhciBuZXdMaW5lID0gYnJlYWtwb2ludC5saW5lOwogICAg
ICAgICAgICAgICAgIGlmIChzdWNjZXNzICYmIGJyZWFrcG9pbnQubGluZSA+PSBlZGl0RGF0YS5s
aW5lKQogICAgICAgICAgICAgICAgICAgICBuZXdMaW5lICs9IGVkaXREYXRhLmxpbmVzQ291bnRU
b1NoaWZ0OwotICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5z
ZXRCcmVha3BvaW50KGVkaXREYXRhLnNvdXJjZUlELCBicmVha3BvaW50LnVybCwgbmV3TGluZSwg
YnJlYWtwb2ludC5lbmFibGVkLCBicmVha3BvaW50LmNvbmRpdGlvbik7CisgICAgICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludChlZGl0RGF0YS5zb3Vy
Y2VJRCwgYnJlYWtwb2ludC51cmwsIG5ld0xpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtw
b2ludC5jb25kaXRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9OwogICAgICAgICBJbnNw
ZWN0b3JCYWNrZW5kLmVkaXRTY3JpcHRTb3VyY2UoZWRpdERhdGEuc291cmNlSUQsIGVkaXREYXRh
LmNvbnRlbnQsIG15Y2FsbGJhY2suYmluZCh0aGlzKSk7CkBAIC0zNTMsOSArMzU2LDExIEBAIFdl
Ykluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICBJbmplY3RlZFNj
cmlwdEFjY2Vzcy5nZXQoY2FsbEZyYW1lLndvcmxkSWQpLmV2YWx1YXRlSW5DYWxsRnJhbWUoY2Fs
bEZyYW1lLmlkLCBjb2RlLCBvYmplY3RHcm91cCwgZXZhbENhbGxiYWNrKTsKICAgICB9LAogCi0g
ICAgZGVidWdnZXJQYXVzZWQ6IGZ1bmN0aW9uKGNhbGxGcmFtZXMpCisgICAgX2RlYnVnZ2VyUGF1
c2VkOiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5icmVha3Bv
aW50TWFuYWdlci5yZW1vdmVPbmVUaW1lQnJlYWtwb2ludCgpOworICAgICAgICB2YXIgY2FsbEZy
YW1lcyA9IGV2ZW50LmRhdGE7CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwu
cmVtb3ZlT25lVGltZUJyZWFrcG9pbnQoKTsKICAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTsK
ICAgICAgICAgdGhpcy5fd2FpdGluZ1RvUGF1c2UgPSBmYWxzZTsKICAgICAgICAgdGhpcy5fc3Rl
cHBpbmcgPSBmYWxzZTsKQEAgLTM2OCw5ICszNzMsMTAgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQ
YW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLmNhbGxzdGFjay5z
ZWxlY3RlZENhbGxGcmFtZSA9IGNhbGxGcmFtZXNbMF07CiAKICAgICAgICAgd2luZG93LmZvY3Vz
KCk7CisgICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5icmluZ1RvRnJvbnQoKTsKICAgICB9
LAogCi0gICAgZGVidWdnZXJSZXN1bWVkOiBmdW5jdGlvbigpCisgICAgX2RlYnVnZ2VyUmVzdW1l
ZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7CiAgICAg
ICAgIHRoaXMuX3dhaXRpbmdUb1BhdXNlID0gZmFsc2U7CkBAIC00MTMsNyArNDE5LDcgQEAgV2Vi
SW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGRlbGV0ZSB0aGlz
LmN1cnJlbnRRdWVyeTsKICAgICAgICAgdGhpcy5zZWFyY2hDYW5jZWxlZCgpOwogCi0gICAgICAg
IHRoaXMuZGVidWdnZXJSZXN1bWVkKCk7CisgICAgICAgIHRoaXMuX2RlYnVnZ2VyUmVzdW1lZCgp
OwogCiAgICAgICAgIHRoaXMuX2JhY2tGb3J3YXJkTGlzdCA9IFtdOwogICAgICAgICB0aGlzLl9j
dXJyZW50QmFja0ZvcndhcmRJbmRleCA9IC0xOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZUZyYW1lLmpzCmluZGV4IGM3MzU3NzAuLmYyMzAzZTAgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcworKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKQEAgLTIxNyw3ICsyMTcsNyBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICB2YXIgYnJlYWtwb2ludHMg
PSB0aGlzLl9kZWxlZ2F0ZS5icmVha3BvaW50cygpOwogICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGJyZWFrcG9pbnRzLmxlbmd0aDsgKytpKQogICAgICAgICAgICAgdGhpcy5fYWRkQnJlYWtw
b2ludChicmVha3BvaW50c1tpXSk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFu
YWdlci5hZGRFdmVudExpc3RlbmVyKCJicmVha3BvaW50LWFkZGVkIiwgdGhpcy5fYnJlYWtwb2lu
dEFkZGVkLCB0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZl
bnRMaXN0ZW5lcigiYnJlYWtwb2ludC1hZGRlZCIsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhp
cyk7CiAKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5lbmRVcGRhdGVzKCk7CiAKQEAgLTc4MSw3
ICs3ODEsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGUgPSB7
CiAgICAgYWRkQnJlYWtwb2ludDogZnVuY3Rpb24obGluZU51bWJlcikKICAgICB7CiAgICAgICAg
IHZhciBzb3VyY2VJRCA9IHRoaXMuX3NvdXJjZUlERm9yTGluZShsaW5lTnVtYmVyKTsKLSAgICAg
ICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLnNldEJyZWFrcG9pbnQoc291cmNlSUQs
IHRoaXMuX3VybCgpLCBsaW5lTnVtYmVyLCB0cnVlLCAiIik7CisgICAgICAgIFdlYkluc3BlY3Rv
ci5kZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9pbnQoc291cmNlSUQsIHRoaXMuX3VybCgpLCBsaW5l
TnVtYmVyLCB0cnVlLCAiIik7CiAgICAgICAgIGlmICghV2ViSW5zcGVjdG9yLnBhbmVscy5zY3Jp
cHRzLmJyZWFrcG9pbnRzQWN0aXZhdGVkKQogICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVs
cy5zY3JpcHRzLnRvZ2dsZUJyZWFrcG9pbnRzQ2xpY2tlZCgpOwogICAgIH0sCkBAIC03OTYsNyAr
Nzk2LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lRGVsZWdhdGUucHJvdG90eXBlID0gewog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYnJlYWtwb2ludC5zb3VyY2VJRCBpbiBzb3Vy
Y2VJRHM7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5icmVha3BvaW50
TWFuYWdlci5maW5kQnJlYWtwb2ludHMoZmlsdGVyKTsKKyAgICAgICAgcmV0dXJuIFdlYkluc3Bl
Y3Rvci5kZWJ1Z2dlck1vZGVsLmZpbmRCcmVha3BvaW50cyhmaWx0ZXIpOwogICAgIH0sCiAKICAg
ICBjYW5FZGl0U2NyaXB0czogZnVuY3Rpb24oKQpAQCAtODM3LDcgKzgzNyw3IEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZSA9IHsKICAgICBmaW5kQnJlYWtwb2lu
dDogZnVuY3Rpb24obGluZU51bWJlcikKICAgICB7CiAgICAgICAgIHZhciBzb3VyY2VJRCA9IHRo
aXMuX3NvdXJjZUlERm9yTGluZShsaW5lTnVtYmVyKTsKLSAgICAgICAgcmV0dXJuIFdlYkluc3Bl
Y3Rvci5icmVha3BvaW50TWFuYWdlci5maW5kQnJlYWtwb2ludChzb3VyY2VJRCwgbGluZU51bWJl
cik7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5maW5kQnJlYWtw
b2ludChzb3VyY2VJRCwgbGluZU51bWJlcik7CiAgICAgfSwKIAogICAgIHNob3VsZERpc3BsYXlC
cmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
V2ViS2l0LnFyYwppbmRleCAyZGIwMTgyLi4wZTc3Njg0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvV2ViS2l0LnFyYwpAQCAtMjgsNiArMjgsNyBAQAogICAgIDxmaWxlPkRhdGFiYXNlUXVl
cnlWaWV3LmpzPC9maWxlPgogICAgIDxmaWxlPkRhdGFiYXNlVGFibGVWaWV3LmpzPC9maWxlPgog
ICAgIDxmaWxlPkRhdGFHcmlkLmpzPC9maWxlPgorICAgIDxmaWxlPkRlYnVnZ2VyTW9kZWwuanM8
L2ZpbGU+CiAgICAgPGZpbGU+RE9NQWdlbnQuanM8L2ZpbGU+CiAgICAgPGZpbGU+RE9NU3RvcmFn
ZS5qczwvZmlsZT4KICAgICA8ZmlsZT5ET01TdG9yYWdlSXRlbXNWaWV3LmpzPC9maWxlPgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCmluZGV4IDY3ZmQwODEuLmFm
MTI2NTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3Iu
aHRtbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKQEAg
LTEzOSw2ICsxMzksNyBAQCBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBzcmM9IlRvcERvd25Qcm9maWxlRGF0YUdyaWRUcmVlLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJQcm9maWxlVmlldy5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iSGVhcFNuYXBzaG90
Vmlldy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iRGVidWdnZXJNb2RlbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIHNyYz0iRE9NQWdlbnQuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9IkluamVjdGVkU2NyaXB0LmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJJbmplY3RlZFNjcmlwdEFjY2Vzcy5q
cyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5z
cGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRl
eCBmNzFiODlhLi42MzQ1OTlmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuanMKQEAgLTE5Miw3ICsxOTIsNyBAQCB2YXIgV2ViSW5zcGVjdG9yID0gewogICAgICAgICB7
CiAgICAgICAgICAgICBwYW5lLmFkZEJyZWFrcG9pbnRJdGVtKG5ldyBXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludEl0ZW0oZXZlbnQuZGF0YSkpOwogICAgICAgICB9Ci0gICAgICAgIFdlYkluc3BlY3Rv
ci5icmVha3BvaW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKCJicmVha3BvaW50LWFkZGVkIiwg
YnJlYWtwb2ludEFkZGVkKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRk
RXZlbnRMaXN0ZW5lcigiYnJlYWtwb2ludC1hZGRlZCIsIGJyZWFrcG9pbnRBZGRlZCk7CiAgICAg
ICAgIHJldHVybiBwYW5lOwogICAgIH0sCiAKQEAgLTUzMyw4ICs1MzMsMTAgQEAgV2ViSW5zcGVj
dG9yLmRvTG9hZGVkRG9uZSA9IGZ1bmN0aW9uKCkKICAgICAgICAgb3RoZXI6IG5ldyBXZWJJbnNw
ZWN0b3IuUmVzb3VyY2VDYXRlZ29yeSgib3RoZXIiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk90
aGVyIiksICJyZ2IoMTg2LDE4NiwxODYpIikKICAgICB9OwogCi0gICAgdGhpcy5icmVha3BvaW50
TWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIoKTsKICAgICB0aGlz
LmNzc01vZGVsID0gbmV3IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsKCk7CisgICAgdGhpcy5k
ZWJ1Z2dlck1vZGVsID0gbmV3IFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsKCk7CisKKyAgICB0
aGlzLmJyZWFrcG9pbnRNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdl
cigpOwogCiAgICAgdGhpcy5wYW5lbHMgPSB7fTsKICAgICB0aGlzLl9jcmVhdGVQYW5lbHMoKTsK
QEAgLTEzMDEsNyArMTMwMyw3IEBAIFdlYkluc3BlY3Rvci5wYXJzZWRTY3JpcHRTb3VyY2UgPSBm
dW5jdGlvbihzb3VyY2VJRCwgc291cmNlVVJMLCBzb3VyY2UsIHN0YXJ0aW5nCiAKIFdlYkluc3Bl
Y3Rvci5yZXN0b3JlZEJyZWFrcG9pbnQgPSBmdW5jdGlvbihzb3VyY2VJRCwgc291cmNlVVJMLCBs
aW5lLCBlbmFibGVkLCBjb25kaXRpb24pCiB7Ci0gICAgdGhpcy5icmVha3BvaW50TWFuYWdlci5y
ZXN0b3JlZEJyZWFrcG9pbnQoc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29u
ZGl0aW9uKTsKKyAgICB0aGlzLmRlYnVnZ2VyTW9kZWwucmVzdG9yZWRCcmVha3BvaW50KHNvdXJj
ZUlELCBzb3VyY2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CiB9CiAKIFdlYkluc3Bl
Y3Rvci5mYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlID0gZnVuY3Rpb24oc291cmNlVVJMLCBzb3Vy
Y2UsIHN0YXJ0aW5nTGluZSwgZXJyb3JMaW5lLCBlcnJvck1lc3NhZ2UpCkBAIC0xMzExLDE5ICsx
MzEzLDE3IEBAIFdlYkluc3BlY3Rvci5mYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlID0gZnVuY3Rp
b24oc291cmNlVVJMLCBzb3VyY2UsIHN0YXJ0aW5nTGluCiAKIFdlYkluc3BlY3Rvci5wYXVzZWRT
Y3JpcHQgPSBmdW5jdGlvbihkZXRhaWxzKQogewotICAgIHRoaXMucGFuZWxzLnNjcmlwdHMuZGVi
dWdnZXJQYXVzZWQoZGV0YWlscy5jYWxsRnJhbWVzKTsKLSAgICB0aGlzLmJyZWFrcG9pbnRNYW5h
Z2VyLmRlYnVnZ2VyUGF1c2VkKGRldGFpbHMpOwotICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5i
cmluZ1RvRnJvbnQoKTsKKyAgICB0aGlzLmRlYnVnZ2VyTW9kZWwuZGVidWdnZXJQYXVzZWQoZGV0
YWlscyk7CiB9CiAKIFdlYkluc3BlY3Rvci5yZXN1bWVkU2NyaXB0ID0gZnVuY3Rpb24oKQogewot
ICAgIHRoaXMuYnJlYWtwb2ludE1hbmFnZXIuZGVidWdnZXJSZXN1bWVkKCk7Ci0gICAgdGhpcy5w
YW5lbHMuc2NyaXB0cy5kZWJ1Z2dlclJlc3VtZWQoKTsKKyAgICB0aGlzLmRlYnVnZ2VyTW9kZWwu
ZGVidWdnZXJSZXN1bWVkKCk7CiB9CiAKIFdlYkluc3BlY3Rvci5yZXNldCA9IGZ1bmN0aW9uKCkK
IHsKKyAgICB0aGlzLmRlYnVnZ2VyTW9kZWwucmVzZXQoKTsKICAgICB0aGlzLmJyZWFrcG9pbnRN
YW5hZ2VyLnJlc2V0KCk7CiAKICAgICBmb3IgKHZhciBwYW5lbE5hbWUgaW4gdGhpcy5wYW5lbHMp
IHsK
</data>
<flag name="review"
          id="66513"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75807</attachid>
            <date>2010-12-07 06:30:11 -0800</date>
            <delta_ts>2010-12-07 06:47:00 -0800</delta_ts>
            <desc>Comments addressed.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>41638</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTk4Zjc2Ny4uMzM2ZWEyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxMC0xMi0wNyAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBpbnRyb2R1Y2UgRGVidWdnZXJN
b2RlbCBjbGFzcyByZXByZXNlbnRpbmcgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCBzdGF0ZS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTY3CisKKyAg
ICAgICAgTW92ZWQgZGVidWdnaW5nLXJlbGF0ZWQgY29kZSBmcm9tIEJyZWFrcG9pbnRNYW5hZ2Vy
IHRvIERlYnVnZ2VyTW9kZWwuIE1vdmVkIEJyZWFrcG9pbnQgY2xhc3MgdG8gYSBzZXBhcmF0ZSBm
aWxlLgorCisgICAgICAgICogRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgorICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnQuanM6IEFkZGVk
LgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQpOiBNb3ZlZCBmcm9tIEJyZWFrcG9p
bnRNYW5hZ2VyLmpzLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1h
bmFnZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIpOiBSZW1v
dmUgZGVidWdnZXItcmVsYXRlZCBtZXRob2RzLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2FsbFN0
YWNrU2lkZWJhclBhbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbGxTdGFja1NpZGViYXJQ
YW5lLnByb3RvdHlwZS5fbmF0aXZlQnJlYWtwb2ludEhpdCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ2FsbFN0YWNrU2lkZWJhclBhbmUucHJvdG90eXBlLl9zY3JpcHRCcmVha3BvaW50SGl0KToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyTW9kZWwuanM6IEFkZGVkLgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwpOiBNb3ZlZCBkZWJ1Z2dlci1yZWxh
dGVkIG1ldGhvZHMgZnJvbSBCcmVha3BvaW50TWFuYWdlci4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRz
UGFuZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuY29u
dGludWVUb0xpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5
cGUuZWRpdFNjcmlwdFNvdXJjZS5teWNhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
Y3JpcHRzUGFuZWwucHJvdG90eXBlLmVkaXRTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX2RlYnVnZ2VyUGF1c2VkKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9kZWJ1Z2dlclJlc3VtZWQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUucmVzZXQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9jcmVhdGVWaWV3ZXJJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGUuYWRkQnJl
YWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90
b3R5cGUuYnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lRGVs
ZWdhdGUucHJvdG90eXBlLmZpbmRCcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL1dlYktpdC5xcmM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5jcmVhdGVKU0JyZWFrcG9pbnRzU2lkZWJhclBhbmUpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLnJlc3RvcmVkQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IucGF1c2VkU2NyaXB0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5yZXN1bWVkU2NyaXB0
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5yZXNldCk6CisKIDIwMTAtMTItMDYgIFBhdmVsIFBv
ZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxp
emVkU3RyaW5ncy5qcyBiL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpz
CmluZGV4IDJmODA0Y2QuLmQ5NjY3MWEgMTAwNjQ0CkJpbmFyeSBmaWxlcyBhL1dlYkNvcmUvRW5n
bGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzIGFuZCBiL1dlYkNvcmUvRW5nbGlzaC5scHJv
ai9sb2NhbGl6ZWRTdHJpbmdzLmpzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAwMWM1Yzg5Li5kYmIwYzAxIDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtNDU3Nyw2ICs0NTc3LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0F1
ZGl0UnVsZXMuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRzUGFu
ZWwuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQm90dG9tVXBQcm9maWxl
RGF0YUdyaWRUcmVlLmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFr
cG9pbnQuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1h
bmFnZXIuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNT
aWRlYmFyUGFuZS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsYmFj
ay5qcycsCkBAIC00NTk2LDYgKzQ1OTcsNyBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9u
dC1lbmQvRGF0YWJhc2VRdWVyeVZpZXcuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9u
dC1lbmQvRGF0YWJhc2VUYWJsZVZpZXcuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9u
dC1lbmQvRGF0YUdyaWQuanMnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRGVi
dWdnZXJNb2RlbC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2Vu
dC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9ET01TdG9yYWdlLmpzJywK
ICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0RPTVN0b3JhZ2VJdGVtc1ZpZXcuanMn
LApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggM2EwNGJhYy4uNmQ1MDhk
MCAxMDA3NTUKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysg
Yi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC02NTE0MSw2ICs2NTE0
MSwxMCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0
aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxCcmVha3BvaW50LmpzIgorCQkJCQk+CisJCQkJPC9G
aWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVu
ZFxCcmVha3BvaW50TWFuYWdlci5qcyIKIAkJCQkJPgogCQkJCTwvRmlsZT4KQEAgLTY1MjEzLDYg
KzY1MjE3LDEwIEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERlYnVnZ2VyTW9kZWwuanMiCisJCQkJCT4K
KwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXERPTUFnZW50LmpzIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnQuanMgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4zMmE2YTNkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0JyZWFrcG9pbnQuanMKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnQgPSBmdW5jdGlvbihkZWJ1Z2dlck1vZGVsLCBzb3VyY2VJRCwgdXJsLCBsaW5lLCBlbmFibGVk
LCBjb25kaXRpb24pCit7CisgICAgdGhpcy51cmwgPSB1cmw7CisgICAgdGhpcy5saW5lID0gbGlu
ZTsKKyAgICB0aGlzLnNvdXJjZUlEID0gc291cmNlSUQ7CisgICAgdGhpcy5fZW5hYmxlZCA9IGVu
YWJsZWQ7CisgICAgdGhpcy5fY29uZGl0aW9uID0gY29uZGl0aW9uIHx8ICIiOworICAgIHRoaXMu
X3NvdXJjZVRleHQgPSAiIjsKKyAgICB0aGlzLl9oaXQgPSBmYWxzZTsKKyAgICB0aGlzLl9kZWJ1
Z2dlck1vZGVsID0gZGVidWdnZXJNb2RlbDsKK30KKworV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQu
anNCcmVha3BvaW50SWQgPSBmdW5jdGlvbihzb3VyY2VJRCwgbGluZSkKK3sKKyAgICByZXR1cm4g
c291cmNlSUQgKyAiOiIgKyBsaW5lOworfQorCitXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90
b3R5cGUgPSB7CisgICAgZ2V0IGVuYWJsZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X2VuYWJsZWQ7CisgICAgfSwKKworICAgIHNldCBlbmFibGVkKHgpCisgICAgeworICAgICAgICBp
ZiAodGhpcy5fZW5hYmxlZCA9PT0geCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0
aGlzLl9lbmFibGVkID0geDsKKyAgICAgICAgdGhpcy5fZGVidWdnZXJNb2RlbC5fc2V0QnJlYWtw
b2ludE9uQmFja2VuZCh0aGlzKTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoImVuYWJsZS1jaGFuZ2VkIik7CisgICAgfSwKKworICAgIGdldCBzb3VyY2VUZXh0KCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VUZXh0OworICAgIH0sCisKKyAgICBzZXQg
c291cmNlVGV4dCh0ZXh0KQorICAgIHsKKyAgICAgICAgdGhpcy5fc291cmNlVGV4dCA9IHRleHQ7
CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJsYWJlbC1jaGFuZ2VkIik7
CisgICAgfSwKKworICAgIGdldCBpZCgpCisgICAgeworICAgICAgICByZXR1cm4gV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnQuanNCcmVha3BvaW50SWQodGhpcy5zb3VyY2VJRCwgdGhpcy5saW5lKTsK
KyAgICB9LAorCisgICAgZ2V0IGNvbmRpdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhp
cy5fY29uZGl0aW9uOworICAgIH0sCisKKyAgICBzZXQgY29uZGl0aW9uKGMpCisgICAgeworICAg
ICAgICBjID0gYyB8fCAiIjsKKyAgICAgICAgaWYgKHRoaXMuX2NvbmRpdGlvbiA9PT0gYykKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9jb25kaXRpb24gPSBjOworICAgICAg
ICBpZiAodGhpcy5lbmFibGVkKQorICAgICAgICAgICAgdGhpcy5fZGVidWdnZXJNb2RlbC5fc2V0
QnJlYWtwb2ludE9uQmFja2VuZCh0aGlzKTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoImNvbmRpdGlvbi1jaGFuZ2VkIik7CisgICAgfSwKKworICAgIGdldCBoaXQoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2hpdDsKKyAgICB9LAorCisgICAgc2V0IGhpdCho
aXQpCisgICAgeworICAgICAgICB0aGlzLl9oaXQgPSBoaXQ7CisgICAgICAgIHRoaXMuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKCJoaXQtc3RhdGUtY2hhbmdlZCIpOworICAgIH0sCisKKyAgICBj
bGljazogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxz
LnNjcmlwdHMuc2hvd1NvdXJjZUxpbmUodGhpcy51cmwsIHRoaXMubGluZSk7CisgICAgfSwKKwor
ICAgIGNvbXBhcmVUbzogZnVuY3Rpb24ob3RoZXIpCisgICAgeworICAgICAgICBpZiAodGhpcy51
cmwgIT0gb3RoZXIudXJsKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMudXJsIDwgb3RoZXIudXJs
ID8gLTEgOiAxOworICAgICAgICBpZiAodGhpcy5saW5lICE9IG90aGVyLmxpbmUpCisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5saW5lIDwgb3RoZXIubGluZSA/IC0xIDogMTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfSwKKworICAgIHBvcHVsYXRlTGFiZWxFbGVtZW50OiBmdW5jdGlvbihlbGVt
ZW50KQorICAgIHsKKyAgICAgICAgdmFyIGRpc3BsYXlOYW1lID0gdGhpcy51cmwgPyBXZWJJbnNw
ZWN0b3IuZGlzcGxheU5hbWVGb3JVUkwodGhpcy51cmwpIDogV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCIocHJvZ3JhbSkiKTsKKyAgICAgICAgdmFyIGxhYmVsRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKGRpc3BsYXlOYW1lICsgIjoiICsgdGhpcy5saW5lKTsKKyAgICAgICAgZWxlbWVu
dC5hcHBlbmRDaGlsZChsYWJlbEVsZW1lbnQpOworCisgICAgICAgIHZhciBzb3VyY2VUZXh0RWxl
bWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBzb3VyY2VUZXh0
RWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMuc291cmNlVGV4dDsKKyAgICAgICAgc291cmNlVGV4
dEVsZW1lbnQuY2xhc3NOYW1lID0gInNvdXJjZS10ZXh0IG1vbm9zcGFjZSI7CisgICAgICAgIGVs
ZW1lbnQuYXBwZW5kQ2hpbGQoc291cmNlVGV4dEVsZW1lbnQpOworICAgIH0sCisKKyAgICByZW1v
dmU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVtb3ZlQnJl
YWtwb2ludCh0aGlzLnNvdXJjZUlELCB0aGlzLmxpbmUpOworICAgICAgICB0aGlzLmRpc3BhdGNo
RXZlbnRUb0xpc3RlbmVycygicmVtb3ZlZCIpOworICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3Rl
bmVycygpOworICAgICAgICBkZWxldGUgdGhpcy5fZGVidWdnZXJNb2RlbDsKKyAgICB9Cit9CisK
K1dlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0
b3IuT2JqZWN0LnByb3RvdHlwZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9C
cmVha3BvaW50TWFuYWdlci5qcwppbmRleCBmNzEyMzY3Li42MWIyYmM4IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCkBAIC0xLDEzMCAr
MSw0MyBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKICAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiBXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludE1hbmFnZXIgPSBmdW5jdGlvbigpCiB7Ci0gICAgdGhpcy5fYnJlYWtwb2ludHMg
PSB7fTsKICAgICB0aGlzLl9uYXRpdmVCcmVha3BvaW50cyA9IHt9OworICAgIHRoaXMuX2JhY2tl
bmRJZFRvQnJlYWtwb2ludCA9IHt9OworCisgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwu
YWRkRXZlbnRMaXN0ZW5lcigibmF0aXZlLWJyZWFrcG9pbnQtaGl0IiwgdGhpcy5fbmF0aXZlQnJl
YWtwb2ludEhpdCwgdGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZl
bnRMaXN0ZW5lcigiZGVidWdnZXItcmVzdW1lZCIsIHRoaXMuX2RlYnVnZ2VyUmVzdW1lZCwgdGhp
cyk7CiB9CiAKIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7Ci0g
ICAgc2V0T25lVGltZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lKQotICAgIHsK
LSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQodGhp
cywgc291cmNlSUQsIHVuZGVmaW5lZCwgbGluZSwgdHJ1ZSwgdW5kZWZpbmVkKTsKLSAgICAgICAg
aWYgKHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBpZiAodGhpcy5fb25lVGltZUJyZWFrcG9pbnQpCi0gICAgICAgICAgICBJbnNw
ZWN0b3JCYWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQodGhpcy5fb25lVGltZUJyZWFrcG9pbnQuc291
cmNlSUQsIHRoaXMuX29uZVRpbWVCcmVha3BvaW50LmxpbmUpOwotICAgICAgICB0aGlzLl9vbmVU
aW1lQnJlYWtwb2ludCA9IGJyZWFrcG9pbnQ7Ci0gICAgICAgIC8vIEZJWE1FKDQwNjY5KTogb25l
IHRpbWUgYnJlYWtwb2ludCB3aWxsIGJlIHBlcnNpc3RlZCBpbiBpbnNwZWN0b3Igc2V0dGluZ3Mg
aWYgbm90IGhpdC4KLSAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludE9uQmFja2VuZChicmVha3Bv
aW50LCB0cnVlKTsKLSAgICB9LAotCi0gICAgcmVtb3ZlT25lVGltZUJyZWFrcG9pbnQ6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludCkgewotICAg
ICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVCcmVha3BvaW50KHRoaXMuX29uZVRpbWVC
cmVha3BvaW50LnNvdXJjZUlELCB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludC5saW5lKTsKLSAgICAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludDsKLSAgICAgICAgfQotICAgIH0s
Ci0KLSAgICBzZXRCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwgdXJsLCBsaW5lLCBlbmFi
bGVkLCBjb25kaXRpb24pCi0gICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX3Nl
dEJyZWFrcG9pbnQoc291cmNlSUQsIHVybCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKTsKLSAg
ICAgICAgaWYgKGJyZWFrcG9pbnQpCi0gICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50T25C
YWNrZW5kKGJyZWFrcG9pbnQpOwotICAgIH0sCi0KLSAgICByZXN0b3JlZEJyZWFrcG9pbnQ6IGZ1
bmN0aW9uKHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQoc291cmNlSUQsIHVybCwgbGluZSwgZW5hYmxlZCwg
Y29uZGl0aW9uKTsKLSAgICB9LAotCi0gICAgZmluZEJyZWFrcG9pbnRzOiBmdW5jdGlvbihmaWx0
ZXIpCi0gICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBbXTsKLSAgICAgICAgZm9yICh2
YXIgaWQgaW4gdGhpcy5fYnJlYWtwb2ludHMpIHsKLSAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQg
PSB0aGlzLl9icmVha3BvaW50c1tpZF07Ci0gICAgICAgICAgIGlmIChmaWx0ZXIoYnJlYWtwb2lu
dCkpCi0gICAgICAgICAgICAgICBicmVha3BvaW50cy5wdXNoKGJyZWFrcG9pbnQpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBicmVha3BvaW50czsKLSAgICB9LAotCi0gICAgZmluZEJyZWFr
cG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgdmFy
IGJyZWFrcG9pbnRJZCA9IFdlYkluc3BlY3Rvci5CcmVha3BvaW50LmpzQnJlYWtwb2ludElkKHNv
dXJjZUlELCBsaW5lTnVtYmVyKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRzW2Jy
ZWFrcG9pbnRJZF07Ci0gICAgfSwKLQotICAgIHJlc2V0OiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB0aGlzLl9icmVha3BvaW50cyA9IHt9OwotICAgICAgICBkZWxldGUgdGhpcy5fb25lVGlt
ZUJyZWFrcG9pbnQ7Ci0gICAgICAgIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzID0ge307Ci0gICAg
fSwKLQotICAgIF9zZXRCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwgdXJsLCBsaW5lLCBl
bmFibGVkLCBjb25kaXRpb24pCi0gICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludCh0aGlzLCBzb3VyY2VJRCwgdXJsLCBsaW5lLCBlbmFibGVk
LCBjb25kaXRpb24pOwotICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludC5p
ZF0pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICh0aGlzLl9vbmVUaW1lQnJlYWtw
b2ludCAmJiAodGhpcy5fb25lVGltZUJyZWFrcG9pbnQuaWQgPT0gYnJlYWtwb2ludC5pZCkpCi0g
ICAgICAgICAgICBkZWxldGUgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQ7Ci0gICAgICAgIHRoaXMu
X2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdID0gYnJlYWtwb2ludDsKLSAgICAgICAgYnJlYWtw
b2ludC5hZGRFdmVudExpc3RlbmVyKCJyZW1vdmVkIiwgdGhpcy5fYnJlYWtwb2ludFJlbW92ZWQs
IHRoaXMpOwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiYnJlYWtwb2lu
dC1hZGRlZCIsIGJyZWFrcG9pbnQpOwotICAgICAgICByZXR1cm4gYnJlYWtwb2ludDsKLSAgICB9
LAotCi0gICAgX2JyZWFrcG9pbnRSZW1vdmVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAg
ICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50c1tldmVudC50YXJnZXQuaWRdOwotICAgIH0sCi0K
LSAgICBfc2V0QnJlYWtwb2ludE9uQmFja2VuZDogZnVuY3Rpb24oYnJlYWtwb2ludCwgaXNPbmVU
aW1lKQotICAgIHsKLSAgICAgICAgZnVuY3Rpb24gZGlkU2V0QnJlYWtwb2ludChzdWNjZXNzLCBs
aW5lKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc3VjY2VzcyAmJiBsaW5lID09IGJyZWFr
cG9pbnQubGluZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAoaXNP
bmVUaW1lKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpCi0gICAgICAgICAgICAgICAg
ICAgIHRoaXMuX29uZVRpbWVCcmVha3BvaW50LmxpbmUgPSBsaW5lOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX29uZVRpbWVCcmVha3BvaW50
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBicmVha3BvaW50LnJlbW92
ZSgpOwotICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzKQotICAgICAgICAgICAgICAgICAgICB0
aGlzLl9zZXRCcmVha3BvaW50KGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQudXJsLCBs
aW5lLCBicmVha3BvaW50LmVuYWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldEJyZWFrcG9pbnQo
YnJlYWtwb2ludC5zb3VyY2VJRCwgYnJlYWtwb2ludC5saW5lLCBicmVha3BvaW50LmVuYWJsZWQs
IGJyZWFrcG9pbnQuY29uZGl0aW9uLCBkaWRTZXRCcmVha3BvaW50LmJpbmQodGhpcykpOwotICAg
IH0sCi0KICAgICBjcmVhdGVET01CcmVha3BvaW50OiBmdW5jdGlvbihub2RlSWQsIGRvbUV2ZW50
VHlwZSwgZGlzYWJsZWQpCiAgICAgewogICAgICAgICB2YXIgZnJvbnRlbmRJZCA9ICJkb206IiAr
IG5vZGVJZCArICI6IiArIGRvbUV2ZW50VHlwZTsKQEAgLTE2NCw2ICs3NywxMSBAQCBXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gYnJl
YWtwb2ludDsKICAgICB9LAogCisgICAgZmluZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJhY2tlbmRC
cmVha3BvaW50SWQpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fYmFja2VuZElkVG9CcmVh
a3BvaW50W2JhY2tlbmRCcmVha3BvaW50SWRdOworICAgIH0sCisKICAgICBfcmVtb3ZlTmF0aXZl
QnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB7CiAgICAgICAgIGlmIChicmVh
a3BvaW50Ll9iZWluZ1NldE9uQmFja2VuZCkKQEAgLTE5OCw3ICsxMTYsNyBAQCBXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgYnJlYWtwb2lu
dC5fYmVpbmdTZXRPbkJhY2tlbmQgPSBmYWxzZTsKICAgICAgICAgICAgIGlmIChiYWNrZW5kQnJl
YWtwb2ludElkICE9PSAiIikgewogICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQuX2JhY2tlbmRJ
ZCA9IGJhY2tlbmRCcmVha3BvaW50SWQ7Ci0gICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2lu
dHNbYmFja2VuZEJyZWFrcG9pbnRJZF0gPSBicmVha3BvaW50OworICAgICAgICAgICAgICAgIHRo
aXMuX2JhY2tlbmRJZFRvQnJlYWtwb2ludFtiYWNrZW5kQnJlYWtwb2ludElkXSA9IGJyZWFrcG9p
bnQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVha3BvaW50LmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycygiZW5hYmxlLWNoYW5nZWQiKTsKICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZU5h
dGl2ZUJyZWFrcG9pbnRzSW5TZXR0aW5ncygpOwpAQCAtMjA4LDcgKzEyNiw3IEBAIFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgX3JlbW92ZU5hdGl2ZUJy
ZWFrcG9pbnRGcm9tQmFja2VuZDogZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB7CiAgICAgICAg
IEluc3BlY3RvckJhY2tlbmQucmVtb3ZlTmF0aXZlQnJlYWtwb2ludChicmVha3BvaW50Ll9iYWNr
ZW5kSWQpOwotICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludC5fYmFj
a2VuZElkXQorICAgICAgICBkZWxldGUgdGhpcy5fYmFja2VuZElkVG9CcmVha3BvaW50W2JyZWFr
cG9pbnQuX2JhY2tlbmRJZF0KICAgICAgICAgZGVsZXRlIGJyZWFrcG9pbnQuX2JhY2tlbmRJZDsK
ICAgICAgICAgYnJlYWtwb2ludC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImVuYWJsZS1jaGFu
Z2VkIik7CiAgICAgICAgIHRoaXMuX3VwZGF0ZU5hdGl2ZUJyZWFrcG9pbnRzSW5TZXR0aW5ncygp
OwpAQCAtMjI1LDMwICsxNDMsMjAgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLm5hdGl2ZUJyZWFrcG9p
bnRzID0gcGVyc2lzdGVudEJyZWFrcG9pbnRzOwogICAgIH0sCiAKLSAgICBkZWJ1Z2dlclBhdXNl
ZDogZnVuY3Rpb24oZGV0YWlscykKKyAgICBfbmF0aXZlQnJlYWtwb2ludEhpdDogZnVuY3Rpb24o
ZXZlbnQpCiAgICAgewotICAgICAgICBpZiAoZGV0YWlscy5ldmVudFR5cGUgPT09IFdlYkluc3Bl
Y3Rvci5EZWJ1Z2dlckV2ZW50VHlwZXMuSmF2YVNjcmlwdFBhdXNlKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGlmIChkZXRhaWxzLmV2ZW50RGF0YSAmJiBkZXRhaWxzLmV2ZW50RGF0
YS5icmVha3BvaW50SWQpCi0gICAgICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gZGV0YWlscy5l
dmVudERhdGEuYnJlYWtwb2ludElkOwotICAgICAgICBlbHNlIGlmIChkZXRhaWxzLmNhbGxGcmFt
ZXMgJiYgZGV0YWlscy5jYWxsRnJhbWVzLmxlbmd0aCkKLSAgICAgICAgICAgIHZhciBicmVha3Bv
aW50SWQgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5qc0JyZWFrcG9pbnRJZChkZXRhaWxzLmNh
bGxGcmFtZXNbMF0uc291cmNlSUQsIGRldGFpbHMuY2FsbEZyYW1lc1swXS5saW5lKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgYnJlYWtwb2ludElkID0g
ZXZlbnQuZGF0YS5icmVha3BvaW50SWQ7CiAKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlz
Ll9icmVha3BvaW50c1ticmVha3BvaW50SWRdOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRo
aXMuX2JhY2tlbmRJZFRvQnJlYWtwb2ludFticmVha3BvaW50SWRdOwogICAgICAgICBpZiAoIWJy
ZWFrcG9pbnQpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgYnJlYWtwb2ludC5oaXQg
PSB0cnVlOwogICAgICAgICBicmVha3BvaW50LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiaGl0
LXN0YXRlLWNoYW5nZWQiKTsKICAgICAgICAgdGhpcy5fbGFzdEhpdEJyZWFrcG9pbnQgPSBicmVh
a3BvaW50OwotCi0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJicmVha3Bv
aW50LWhpdCIsIHsgYnJlYWtwb2ludDogYnJlYWtwb2ludCwgZXZlbnREYXRhOiBkZXRhaWxzLmV2
ZW50RGF0YSB9KTsKICAgICB9LAogCi0gICAgZGVidWdnZXJSZXN1bWVkOiBmdW5jdGlvbigpCisg
ICAgX2RlYnVnZ2VyUmVzdW1lZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICBpZiAo
IXRoaXMuX2xhc3RIaXRCcmVha3BvaW50KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzExLDEx
MiArMjE5LDE2IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
Ci19Ci0KLVdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX19wcm90b19f
ID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7Ci0KLVdlYkluc3BlY3Rvci5CcmVha3Bv
aW50ID0gZnVuY3Rpb24oYnJlYWtwb2ludE1hbmFnZXIsIHNvdXJjZUlELCB1cmwsIGxpbmUsIGVu
YWJsZWQsIGNvbmRpdGlvbikKLXsKLSAgICB0aGlzLnVybCA9IHVybDsKLSAgICB0aGlzLmxpbmUg
PSBsaW5lOwotICAgIHRoaXMuc291cmNlSUQgPSBzb3VyY2VJRDsKLSAgICB0aGlzLl9lbmFibGVk
ID0gZW5hYmxlZDsKLSAgICB0aGlzLl9jb25kaXRpb24gPSBjb25kaXRpb24gfHwgIiI7Ci0gICAg
dGhpcy5fc291cmNlVGV4dCA9ICIiOwotICAgIHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyID0gYnJl
YWtwb2ludE1hbmFnZXI7Ci19Ci0KLVdlYkluc3BlY3Rvci5CcmVha3BvaW50LmpzQnJlYWtwb2lu
dElkID0gZnVuY3Rpb24oc291cmNlSUQsIGxpbmUpCi17Ci0gICAgcmV0dXJuIHNvdXJjZUlEICsg
IjoiICsgbGluZTsKLX0KLQotV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlID0gewot
ICAgIGdldCBlbmFibGVkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkOwog
ICAgIH0sCiAKLSAgICBzZXQgZW5hYmxlZCh4KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2Vu
YWJsZWQgPT09IHgpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fZW5hYmxl
ZCA9IHg7Ci0gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyLl9zZXRCcmVha3BvaW50T25C
YWNrZW5kKHRoaXMpOwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiZW5h
YmxlLWNoYW5nZWQiKTsKLSAgICB9LAotCi0gICAgZ2V0IHNvdXJjZVRleHQoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZVRleHQ7Ci0gICAgfSwKLQotICAgIHNldCBzb3VyY2VU
ZXh0KHRleHQpCi0gICAgewotICAgICAgICB0aGlzLl9zb3VyY2VUZXh0ID0gdGV4dDsKLSAgICAg
ICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImxhYmVsLWNoYW5nZWQiKTsKLSAgICB9
LAotCi0gICAgZ2V0IGlkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludC5qc0JyZWFrcG9pbnRJZCh0aGlzLnNvdXJjZUlELCB0aGlzLmxpbmUpOwotICAgIH0s
Ci0KLSAgICBnZXQgY29uZGl0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jb25k
aXRpb247Ci0gICAgfSwKLQotICAgIHNldCBjb25kaXRpb24oYykKLSAgICB7Ci0gICAgICAgIGMg
PSBjIHx8ICIiOwotICAgICAgICBpZiAodGhpcy5fY29uZGl0aW9uID09PSBjKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX2NvbmRpdGlvbiA9IGM7Ci0gICAgICAgIGlmICh0
aGlzLmVuYWJsZWQpCi0gICAgICAgICAgICB0aGlzLl9icmVha3BvaW50TWFuYWdlci5fc2V0QnJl
YWtwb2ludE9uQmFja2VuZCh0aGlzKTsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoImNvbmRpdGlvbi1jaGFuZ2VkIik7Ci0gICAgfSwKLQotICAgIGNsaWNrOiBmdW5jdGlv
bihldmVudCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5zaG93
U291cmNlTGluZSh0aGlzLnVybCwgdGhpcy5saW5lKTsKLSAgICB9LAotCi0gICAgY29tcGFyZVRv
OiBmdW5jdGlvbihvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLnVybCAhPSBvdGhlci51
cmwpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy51cmwgPCBvdGhlci51cmwgPyAtMSA6IDE7Ci0g
ICAgICAgIGlmICh0aGlzLmxpbmUgIT0gb3RoZXIubGluZSkKLSAgICAgICAgICAgIHJldHVybiB0
aGlzLmxpbmUgPCBvdGhlci5saW5lID8gLTEgOiAxOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
LAotCi0gICAgcG9wdWxhdGVMYWJlbEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQpCi0gICAgewot
ICAgICAgICB2YXIgZGlzcGxheU5hbWUgPSB0aGlzLnVybCA/IFdlYkluc3BlY3Rvci5kaXNwbGF5
TmFtZUZvclVSTCh0aGlzLnVybCkgOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihwcm9ncmFtKSIp
OwotICAgICAgICB2YXIgbGFiZWxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGlz
cGxheU5hbWUgKyAiOiIgKyB0aGlzLmxpbmUpOwotICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxk
KGxhYmVsRWxlbWVudCk7Ci0KLSAgICAgICAgdmFyIHNvdXJjZVRleHRFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIHNvdXJjZVRleHRFbGVtZW50LnRleHRD
b250ZW50ID0gdGhpcy5zb3VyY2VUZXh0OwotICAgICAgICBzb3VyY2VUZXh0RWxlbWVudC5jbGFz
c05hbWUgPSAic291cmNlLXRleHQgbW9ub3NwYWNlIjsKLSAgICAgICAgZWxlbWVudC5hcHBlbmRD
aGlsZChzb3VyY2VUZXh0RWxlbWVudCk7Ci0gICAgfSwKLQotICAgIHJlbW92ZTogZnVuY3Rpb24o
KQorICAgIHJlc2V0OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBJbnNwZWN0b3JCYWNrZW5k
LnJlbW92ZUJyZWFrcG9pbnQodGhpcy5zb3VyY2VJRCwgdGhpcy5saW5lKTsKLSAgICAgICAgdGhp
cy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInJlbW92ZWQiKTsKLSAgICAgICAgdGhpcy5yZW1v
dmVBbGxMaXN0ZW5lcnMoKTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2Vy
OworICAgICAgICB0aGlzLl9uYXRpdmVCcmVha3BvaW50cyA9IHt9OworICAgICAgICB0aGlzLl9i
YWNrZW5kSWRUb0JyZWFrcG9pbnQgPSB7fTsKICAgICB9CiB9CiAKLVdlYkluc3BlY3Rvci5CcmVh
a3BvaW50LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlw
ZTsKK1dlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX19wcm90b19fID0g
V2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CiAKIFdlYkluc3BlY3Rvci5OYXRpdmVCcmVh
a3BvaW50ID0gZnVuY3Rpb24obWFuYWdlciwgZnJvbnRlbmRJZCwgdHlwZSkKIHsKQEAgLTYyMCwx
MiArNDMyLDYgQEAgV2ViSW5zcGVjdG9yLlhIUkJyZWFrcG9pbnQucHJvdG90eXBlID0gewogCiBX
ZWJJbnNwZWN0b3IuWEhSQnJlYWtwb2ludC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVj
dG9yLk5hdGl2ZUJyZWFrcG9pbnQucHJvdG90eXBlOwogCi1XZWJJbnNwZWN0b3IuRGVidWdnZXJF
dmVudFR5cGVzID0gewotICAgIEphdmFTY3JpcHRQYXVzZTogMCwKLSAgICBKYXZhU2NyaXB0QnJl
YWtwb2ludDogMSwKLSAgICBOYXRpdmVCcmVha3BvaW50OiAyCi19OwotCiBXZWJJbnNwZWN0b3Iu
RE9NQnJlYWtwb2ludFR5cGVzID0gewogICAgIFN1YnRyZWVNb2RpZmllZDogMCwKICAgICBBdHRy
aWJ1dGVNb2RpZmllZDogMSwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9DYWxsU3RhY2tTaWRlYmFyUGFuZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9D
YWxsU3RhY2tTaWRlYmFyUGFuZS5qcwppbmRleCBiMmU2YTVjLi4xNmM1ZmU0IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUuanMKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxTdGFja1NpZGViYXJQYW5lLmpzCkBA
IC0yNiw3ICsyNiw4IEBACiBXZWJJbnNwZWN0b3IuQ2FsbFN0YWNrU2lkZWJhclBhbmUgPSBmdW5j
dGlvbigpCiB7CiAgICAgV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lLmNhbGwodGhpcywgV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJDYWxsIFN0YWNrIikpOwotICAgIFdlYkluc3BlY3Rvci5icmVha3Bv
aW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKCJicmVha3BvaW50LWhpdCIsIHRoaXMuX2JyZWFr
cG9pbnRIaXQsIHRoaXMpOworICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50
TGlzdGVuZXIoIm5hdGl2ZS1icmVha3BvaW50LWhpdCIsIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRI
aXQsIHRoaXMpOworICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVu
ZXIoInNjcmlwdC1icmVha3BvaW50LWhpdCIsIHRoaXMuX3NjcmlwdEJyZWFrcG9pbnRIaXQsIHRo
aXMpOwogfQogCiBXZWJJbnNwZWN0b3IuQ2FsbFN0YWNrU2lkZWJhclBhbmUucHJvdG90eXBlID0g
ewpAQCAtMTcwLDE1ICsxNzEsMjMgQEAgV2ViSW5zcGVjdG9yLkNhbGxTdGFja1NpZGViYXJQYW5l
LnByb3RvdHlwZSA9IHsKICAgICAgICAgc2VjdGlvbi5hZGRSZWxhdGVkS2V5cyhbIG5leHRDYWxs
RnJhbWUubmFtZSwgcHJldkNhbGxGcmFtZS5uYW1lIF0sIFdlYkluc3BlY3Rvci5VSVN0cmluZygi
TmV4dC9wcmV2aW91cyBjYWxsIGZyYW1lIikpOwogICAgIH0sCiAKLSAgICBfYnJlYWtwb2ludEhp
dDogIGZ1bmN0aW9uKGV2ZW50KQorICAgIF9uYXRpdmVCcmVha3BvaW50SGl0OiAgZnVuY3Rpb24o
ZXZlbnQpCiAgICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LmRhdGEuYnJlYWtw
b2ludDsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnQucG9wdWxhdGVTdGF0dXNNZXNzYWdlRWxlbWVu
dCkgewotICAgICAgICAgICAgdmFyIHN0YXR1c01lc3NhZ2VFbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgICAgICBzdGF0dXNNZXNzYWdlRWxlbWVudC5jbGFz
c05hbWUgPSAiaW5mbyI7Ci0gICAgICAgICAgICBicmVha3BvaW50LnBvcHVsYXRlU3RhdHVzTWVz
c2FnZUVsZW1lbnQoc3RhdHVzTWVzc2FnZUVsZW1lbnQsIGV2ZW50LmRhdGEuZXZlbnREYXRhKTsK
LSAgICAgICAgICAgIHRoaXMuYm9keUVsZW1lbnQuYXBwZW5kQ2hpbGQoc3RhdHVzTWVzc2FnZUVs
ZW1lbnQpOwotICAgICAgICB9CisgICAgICAgIHZhciBicmVha3BvaW50ID0gV2ViSW5zcGVjdG9y
LmJyZWFrcG9pbnRNYW5hZ2VyLmZpbmRCcmVha3BvaW50KGV2ZW50LmRhdGEuYnJlYWtwb2ludElk
KTsKKyAgICAgICAgaWYgKCFicmVha3BvaW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB2YXIgc3RhdHVzTWVzc2FnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKKyAgICAgICAgc3RhdHVzTWVzc2FnZUVsZW1lbnQuY2xhc3NOYW1lID0gImluZm8iOworICAg
ICAgICBicmVha3BvaW50LnBvcHVsYXRlU3RhdHVzTWVzc2FnZUVsZW1lbnQoc3RhdHVzTWVzc2Fn
ZUVsZW1lbnQsIGV2ZW50LmRhdGEuZXZlbnREYXRhKTsKKyAgICAgICAgdGhpcy5ib2R5RWxlbWVu
dC5hcHBlbmRDaGlsZChzdGF0dXNNZXNzYWdlRWxlbWVudCk7CisgICAgfSwKKworICAgIF9zY3Jp
cHRCcmVha3BvaW50SGl0OiAgZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgc3Rh
dHVzTWVzc2FnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAg
ICAgc3RhdHVzTWVzc2FnZUVsZW1lbnQuY2xhc3NOYW1lID0gImluZm8iOworICAgICAgICBzdGF0
dXNNZXNzYWdlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIlBhdXNlZCBvbiBhIEphdmFTY3JpcHQgYnJlYWtwb2ludC4iKSkp
OworICAgICAgICB0aGlzLmJvZHlFbGVtZW50LmFwcGVuZENoaWxkKHN0YXR1c01lc3NhZ2VFbGVt
ZW50KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9EZWJ1Z2dlck1vZGVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2Vy
TW9kZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdmNGRkMAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlck1vZGVs
LmpzCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwgPSBmdW5jdGlv
bigpCit7CisgICAgdGhpcy5fYnJlYWtwb2ludHMgPSB7fTsKK30KKworV2ViSW5zcGVjdG9yLkRl
YnVnZ2VyTW9kZWwucHJvdG90eXBlID0geworICAgIHNldE9uZVRpbWVCcmVha3BvaW50OiBmdW5j
dGlvbihzb3VyY2VJRCwgbGluZSkKKyAgICB7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3
IFdlYkluc3BlY3Rvci5CcmVha3BvaW50KHRoaXMsIHNvdXJjZUlELCB1bmRlZmluZWQsIGxpbmUs
IHRydWUsIHVuZGVmaW5lZCk7CisgICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50c1ticmVha3Bv
aW50LmlkXSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHRoaXMuX29uZVRpbWVC
cmVha3BvaW50KQorICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVCcmVha3BvaW50
KHRoaXMuX29uZVRpbWVCcmVha3BvaW50LnNvdXJjZUlELCB0aGlzLl9vbmVUaW1lQnJlYWtwb2lu
dC5saW5lKTsKKyAgICAgICAgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQgPSBicmVha3BvaW50Owor
ICAgICAgICAvLyBGSVhNRSg0MDY2OSk6IG9uZSB0aW1lIGJyZWFrcG9pbnQgd2lsbCBiZSBwZXJz
aXN0ZWQgaW4gaW5zcGVjdG9yIHNldHRpbmdzIGlmIG5vdCBoaXQuCisgICAgICAgIHRoaXMuX3Nl
dEJyZWFrcG9pbnRPbkJhY2tlbmQoYnJlYWtwb2ludCwgdHJ1ZSk7CisgICAgfSwKKworICAgIHJl
bW92ZU9uZVRpbWVCcmVha3BvaW50OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhp
cy5fb25lVGltZUJyZWFrcG9pbnQpIHsKKyAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVt
b3ZlQnJlYWtwb2ludCh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludC5zb3VyY2VJRCwgdGhpcy5fb25l
VGltZUJyZWFrcG9pbnQubGluZSk7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fb25lVGltZUJy
ZWFrcG9pbnQ7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgc2V0QnJlYWtwb2ludDogZnVuY3Rp
b24oc291cmNlSUQsIHVybCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQorICAgIHsKKyAgICAg
ICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9zZXRCcmVha3BvaW50KHNvdXJjZUlELCB1cmwsIGxp
bmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CisgICAgICAgIGlmIChicmVha3BvaW50KQorICAgICAg
ICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludE9uQmFja2VuZChicmVha3BvaW50KTsKKyAgICB9LAor
CisgICAgYnJlYWtwb2ludFJlc3RvcmVkOiBmdW5jdGlvbihzb3VyY2VJRCwgdXJsLCBsaW5lLCBl
bmFibGVkLCBjb25kaXRpb24pCisgICAgeworICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50KHNv
dXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CisgICAgfSwKKworICAgIGZp
bmRCcmVha3BvaW50czogZnVuY3Rpb24oZmlsdGVyKQorICAgIHsKKyAgICAgICAgdmFyIGJyZWFr
cG9pbnRzID0gW107CisgICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMuX2JyZWFrcG9pbnRzKSB7
CisgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fYnJlYWtwb2ludHNbaWRdOworICAg
ICAgICAgICBpZiAoZmlsdGVyKGJyZWFrcG9pbnQpKQorICAgICAgICAgICAgICAgYnJlYWtwb2lu
dHMucHVzaChicmVha3BvaW50KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYnJlYWtwb2lu
dHM7CisgICAgfSwKKworICAgIGZpbmRCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwgbGlu
ZU51bWJlcikKKyAgICB7CisgICAgICAgIHZhciBicmVha3BvaW50SWQgPSBXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludC5qc0JyZWFrcG9pbnRJZChzb3VyY2VJRCwgbGluZU51bWJlcik7CisgICAgICAg
IHJldHVybiB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50SWRdOworICAgIH0sCisKKyAgICBy
ZXNldDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMgPSB7fTsK
KyAgICAgICAgZGVsZXRlIHRoaXMuX29uZVRpbWVCcmVha3BvaW50OworICAgIH0sCisKKyAgICBf
c2V0QnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIHVybCwgbGluZSwgZW5hYmxlZCwgY29u
ZGl0aW9uKQorICAgIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnQodGhpcywgc291cmNlSUQsIHVybCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9u
KTsKKyAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBpZiAodGhpcy5fb25lVGltZUJyZWFrcG9pbnQgJiYgKHRo
aXMuX29uZVRpbWVCcmVha3BvaW50LmlkID09IGJyZWFrcG9pbnQuaWQpKQorICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuX29uZVRpbWVCcmVha3BvaW50OworICAgICAgICB0aGlzLl9icmVha3BvaW50
c1ticmVha3BvaW50LmlkXSA9IGJyZWFrcG9pbnQ7CisgICAgICAgIGJyZWFrcG9pbnQuYWRkRXZl
bnRMaXN0ZW5lcigicmVtb3ZlZCIsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsKKyAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImJyZWFrcG9pbnQtYWRkZWQiLCBi
cmVha3BvaW50KTsKKyAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnQ7CisgICAgfSwKKworICAgIF9i
cmVha3BvaW50UmVtb3ZlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICBkZWxldGUg
dGhpcy5fYnJlYWtwb2ludHNbZXZlbnQudGFyZ2V0LmlkXTsKKyAgICB9LAorCisgICAgX3NldEJy
ZWFrcG9pbnRPbkJhY2tlbmQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQsIGlzT25lVGltZSkKKyAgICB7
CisgICAgICAgIGZ1bmN0aW9uIGRpZFNldEJyZWFrcG9pbnQoc3VjY2VzcywgbGluZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgbGluZSA9PSBicmVha3BvaW50LmxpbmUp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGlzT25lVGltZSkgewor
ICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzKQorICAgICAgICAgICAgICAgICAgICB0aGlzLl9v
bmVUaW1lQnJlYWtwb2ludC5saW5lID0gbGluZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9vbmVUaW1lQnJlYWtwb2ludDsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnJlYWtwb2ludC5yZW1vdmUoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoc3VjY2VzcykKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0QnJl
YWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50LnVybCwgbGluZSwgYnJlYWtw
b2ludC5lbmFibGVkLCBicmVha3BvaW50LmNvbmRpdGlvbik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRCcmVha3BvaW50KGJyZWFrcG9pbnQu
c291cmNlSUQsIGJyZWFrcG9pbnQubGluZSwgYnJlYWtwb2ludC5lbmFibGVkLCBicmVha3BvaW50
LmNvbmRpdGlvbiwgZGlkU2V0QnJlYWtwb2ludC5iaW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAg
ZGVidWdnZXJQYXVzZWQ6IGZ1bmN0aW9uKGRldGFpbHMpCisgICAgeworICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycygiZGVidWdnZXItcGF1c2VkIiwgZGV0YWlscy5jYWxsRnJh
bWVzKTsKKworICAgICAgICBpZiAoZGV0YWlscy5ldmVudFR5cGUgPT09IFdlYkluc3BlY3Rvci5E
ZWJ1Z2dlckV2ZW50VHlwZXMuSmF2YVNjcmlwdFBhdXNlKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBpZiAoZGV0YWlscy5ldmVudFR5cGUgPT09IFdlYkluc3BlY3Rvci5EZWJ1Z2dlckV2
ZW50VHlwZXMuTmF0aXZlQnJlYWtwb2ludCkgeworICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRJ
ZCA9IGRldGFpbHMuZXZlbnREYXRhLmJyZWFrcG9pbnRJZDsKKyAgICAgICAgICAgIHRoaXMuZGlz
cGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJuYXRpdmUtYnJlYWtwb2ludC1oaXQiLCB7IGJyZWFrcG9p
bnRJZDogYnJlYWtwb2ludElkLCBldmVudERhdGE6IGRldGFpbHMuZXZlbnREYXRhIH0pOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRJZCA9
IFdlYkluc3BlY3Rvci5CcmVha3BvaW50LmpzQnJlYWtwb2ludElkKGRldGFpbHMuY2FsbEZyYW1l
c1swXS5zb3VyY2VJRCwgZGV0YWlscy5jYWxsRnJhbWVzWzBdLmxpbmUpOworICAgICAgICB2YXIg
YnJlYWtwb2ludCA9IHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF07CisgICAgICAgIGlm
ICghYnJlYWtwb2ludCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYnJlYWtwb2ludC5o
aXQgPSB0cnVlOworICAgICAgICB0aGlzLl9sYXN0SGl0QnJlYWtwb2ludCA9IGJyZWFrcG9pbnQ7
CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJzY3JpcHQtYnJlYWtwb2lu
dC1oaXQiLCBicmVha3BvaW50KTsKKyAgICB9LAorCisgICAgZGVidWdnZXJSZXN1bWVkOiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiZGVi
dWdnZXItcmVzdW1lZCIpOworCisgICAgICAgIGlmICghdGhpcy5fbGFzdEhpdEJyZWFrcG9pbnQp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX2xhc3RIaXRCcmVha3BvaW50Lmhp
dCA9IGZhbHNlOworICAgICAgICBkZWxldGUgdGhpcy5fbGFzdEhpdEJyZWFrcG9pbnQ7CisgICAg
fQorfQorCitXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5wcm90b3R5cGUuX19wcm90b19fID0g
V2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CisKK1dlYkluc3BlY3Rvci5EZWJ1Z2dlckV2
ZW50VHlwZXMgPSB7CisgICAgSmF2YVNjcmlwdFBhdXNlOiAwLAorICAgIEphdmFTY3JpcHRCcmVh
a3BvaW50OiAxLAorICAgIE5hdGl2ZUJyZWFrcG9pbnQ6IDIKK307CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwppbmRleCA5NDY1NzAyLi4zMzQ3OThjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKQEAgLTE3Niw2ICsx
NzYsOSBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsID0gZnVuY3Rpb24oKQogICAgIHRoaXMu
X2RlYnVnZ2VyRW5hYmxlZCA9IFByZWZlcmVuY2VzLmRlYnVnZ2VyQWx3YXlzRW5hYmxlZDsKIAog
ICAgIHRoaXMucmVzZXQoKTsKKworICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2
ZW50TGlzdGVuZXIoImRlYnVnZ2VyLXBhdXNlZCIsIHRoaXMuX2RlYnVnZ2VyUGF1c2VkLCB0aGlz
KTsKKyAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKCJkZWJ1
Z2dlci1yZXN1bWVkIiwgdGhpcy5fZGVidWdnZXJSZXN1bWVkLCB0aGlzKTsKIH0KIAogLy8gS2Vl
cCB0aGVzZSBpbiBzeW5jIHdpdGggV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXIKQEAgLTI1Nyw3
ICsyNjAsNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKIAogICAg
IGNvbnRpbnVlVG9MaW5lOiBmdW5jdGlvbihzb3VyY2VJRCwgbGluZSkKICAgICB7Ci0gICAgICAg
IFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5zZXRPbmVUaW1lQnJlYWtwb2ludChzb3Vy
Y2VJRCwgbGluZSk7CisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnNldE9uZVRp
bWVCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lKTsKICAgICAgICAgaWYgKHRoaXMucGF1c2VkKQog
ICAgICAgICAgICAgdGhpcy5fdG9nZ2xlUGF1c2UoKTsKICAgICB9LApAQCAtMjkwLDcgKzI5Myw3
IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgIC8vIE5lZWQgdG8gY2xlYXIgYnJlYWtwb2ludHMgYW5kIHJlLWNy
ZWF0ZSB0aGVtIGxhdGVyIHdoZW4gZWRpdGluZyBzb3VyY2UuCi0gICAgICAgIHZhciBicmVha3Bv
aW50cyA9IFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5maW5kQnJlYWtwb2ludHMoZnVu
Y3Rpb24oYikgeyByZXR1cm4gYi5zb3VyY2VJRCA9PT0gZWRpdERhdGEuc291cmNlSUQgfSk7Cisg
ICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmZpbmRC
cmVha3BvaW50cyhmdW5jdGlvbihiKSB7IHJldHVybiBiLnNvdXJjZUlEID09PSBlZGl0RGF0YS5z
b3VyY2VJRCB9KTsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5n
dGg7ICsraSkKICAgICAgICAgICAgIGJyZWFrcG9pbnRzW2ldLnJlbW92ZSgpOwogCkBAIC0yOTks
NyArMzAyLDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICAgICAgICAgIGNvbW1pdEVkaXRpbmdDYWxs
YmFjayhuZXdCb2R5T3JFcnJvck1lc3NhZ2UpOwogICAgICAgICAgICAgICAgIGlmIChjYWxsRnJh
bWVzICYmIGNhbGxGcmFtZXMubGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYnVn
Z2VyUGF1c2VkKGNhbGxGcmFtZXMpOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1Z2dl
clBhdXNlZCh7IGRhdGE6IGNhbGxGcmFtZXMgfSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgIGlmIChjYW5jZWxFZGl0aW5nQ2FsbGJhY2spCiAgICAgICAgICAgICAgICAg
ICAgIGNhbmNlbEVkaXRpbmdDYWxsYmFjaygpOwpAQCAtMzEwLDcgKzMxMyw3IEBAIFdlYkluc3Bl
Y3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHZhciBuZXdM
aW5lID0gYnJlYWtwb2ludC5saW5lOwogICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzICYmIGJy
ZWFrcG9pbnQubGluZSA+PSBlZGl0RGF0YS5saW5lKQogICAgICAgICAgICAgICAgICAgICBuZXdM
aW5lICs9IGVkaXREYXRhLmxpbmVzQ291bnRUb1NoaWZ0OwotICAgICAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5zZXRCcmVha3BvaW50KGVkaXREYXRhLnNvdXJjZUlE
LCBicmVha3BvaW50LnVybCwgbmV3TGluZSwgYnJlYWtwb2ludC5lbmFibGVkLCBicmVha3BvaW50
LmNvbmRpdGlvbik7CisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwu
c2V0QnJlYWtwb2ludChlZGl0RGF0YS5zb3VyY2VJRCwgYnJlYWtwb2ludC51cmwsIG5ld0xpbmUs
IGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24pOwogICAgICAgICAgICAg
fQogICAgICAgICB9OwogICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmVkaXRTY3JpcHRTb3VyY2Uo
ZWRpdERhdGEuc291cmNlSUQsIGVkaXREYXRhLmNvbnRlbnQsIG15Y2FsbGJhY2suYmluZCh0aGlz
KSk7CkBAIC0zNTMsOSArMzU2LDExIEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90
eXBlID0gewogICAgICAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXQoY2FsbEZyYW1lLndvcmxk
SWQpLmV2YWx1YXRlSW5DYWxsRnJhbWUoY2FsbEZyYW1lLmlkLCBjb2RlLCBvYmplY3RHcm91cCwg
ZXZhbENhbGxiYWNrKTsKICAgICB9LAogCi0gICAgZGVidWdnZXJQYXVzZWQ6IGZ1bmN0aW9uKGNh
bGxGcmFtZXMpCisgICAgX2RlYnVnZ2VyUGF1c2VkOiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0g
ICAgICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5yZW1vdmVPbmVUaW1lQnJlYWtw
b2ludCgpOworICAgICAgICB2YXIgY2FsbEZyYW1lcyA9IGV2ZW50LmRhdGE7CisKKyAgICAgICAg
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwucmVtb3ZlT25lVGltZUJyZWFrcG9pbnQoKTsKICAg
ICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTsKICAgICAgICAgdGhpcy5fd2FpdGluZ1RvUGF1c2Ug
PSBmYWxzZTsKICAgICAgICAgdGhpcy5fc3RlcHBpbmcgPSBmYWxzZTsKQEAgLTM2OCw5ICszNzMs
MTAgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRo
aXMuc2lkZWJhclBhbmVzLmNhbGxzdGFjay5zZWxlY3RlZENhbGxGcmFtZSA9IGNhbGxGcmFtZXNb
MF07CiAKICAgICAgICAgd2luZG93LmZvY3VzKCk7CisgICAgICAgIEluc3BlY3RvckZyb250ZW5k
SG9zdC5icmluZ1RvRnJvbnQoKTsKICAgICB9LAogCi0gICAgZGVidWdnZXJSZXN1bWVkOiBmdW5j
dGlvbigpCisgICAgX2RlYnVnZ2VyUmVzdW1lZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAg
dGhpcy5fcGF1c2VkID0gZmFsc2U7CiAgICAgICAgIHRoaXMuX3dhaXRpbmdUb1BhdXNlID0gZmFs
c2U7CkBAIC00MTMsNyArNDE5LDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5
cGUgPSB7CiAgICAgICAgIGRlbGV0ZSB0aGlzLmN1cnJlbnRRdWVyeTsKICAgICAgICAgdGhpcy5z
ZWFyY2hDYW5jZWxlZCgpOwogCi0gICAgICAgIHRoaXMuZGVidWdnZXJSZXN1bWVkKCk7CisgICAg
ICAgIHRoaXMuX2RlYnVnZ2VyUmVzdW1lZCgpOwogCiAgICAgICAgIHRoaXMuX2JhY2tGb3J3YXJk
TGlzdCA9IFtdOwogICAgICAgICB0aGlzLl9jdXJyZW50QmFja0ZvcndhcmRJbmRleCA9IC0xOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCmluZGV4IGM3MzU3NzAu
LmYyMzAzZTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VG
cmFtZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMK
QEAgLTIxNyw3ICsyMTcsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0g
ewogICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLl9kZWxlZ2F0ZS5icmVha3BvaW50cygp
OwogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxlbmd0aDsgKytpKQog
ICAgICAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludChicmVha3BvaW50c1tpXSk7Ci0gICAgICAg
IFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKCJicmVha3Bv
aW50LWFkZGVkIiwgdGhpcy5fYnJlYWtwb2ludEFkZGVkLCB0aGlzKTsKKyAgICAgICAgV2ViSW5z
cGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcigiYnJlYWtwb2ludC1hZGRlZCIs
IHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7CiAKICAgICAgICAgdGhpcy5fdGV4dFZpZXdl
ci5lbmRVcGRhdGVzKCk7CiAKQEAgLTc4MSw3ICs3ODEsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGUgPSB7CiAgICAgYWRkQnJlYWtwb2ludDogZnVuY3Rpb24o
bGluZU51bWJlcikKICAgICB7CiAgICAgICAgIHZhciBzb3VyY2VJRCA9IHRoaXMuX3NvdXJjZUlE
Rm9yTGluZShsaW5lTnVtYmVyKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5h
Z2VyLnNldEJyZWFrcG9pbnQoc291cmNlSUQsIHRoaXMuX3VybCgpLCBsaW5lTnVtYmVyLCB0cnVl
LCAiIik7CisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9pbnQo
c291cmNlSUQsIHRoaXMuX3VybCgpLCBsaW5lTnVtYmVyLCB0cnVlLCAiIik7CiAgICAgICAgIGlm
ICghV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLmJyZWFrcG9pbnRzQWN0aXZhdGVkKQogICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnRvZ2dsZUJyZWFrcG9pbnRzQ2xp
Y2tlZCgpOwogICAgIH0sCkBAIC03OTYsNyArNzk2LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lRGVsZWdhdGUucHJvdG90eXBlID0gewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4g
YnJlYWtwb2ludC5zb3VyY2VJRCBpbiBzb3VyY2VJRHM7CiAgICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5maW5kQnJlYWtwb2ludHMoZmlsdGVy
KTsKKyAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmZpbmRCcmVha3Bv
aW50cyhmaWx0ZXIpOwogICAgIH0sCiAKICAgICBjYW5FZGl0U2NyaXB0czogZnVuY3Rpb24oKQpA
QCAtODM3LDcgKzgzNyw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZURlbGVnYXRlLnByb3Rv
dHlwZSA9IHsKICAgICBmaW5kQnJlYWtwb2ludDogZnVuY3Rpb24obGluZU51bWJlcikKICAgICB7
CiAgICAgICAgIHZhciBzb3VyY2VJRCA9IHRoaXMuX3NvdXJjZUlERm9yTGluZShsaW5lTnVtYmVy
KTsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5maW5kQnJl
YWtwb2ludChzb3VyY2VJRCwgbGluZU51bWJlcik7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0
b3IuZGVidWdnZXJNb2RlbC5maW5kQnJlYWtwb2ludChzb3VyY2VJRCwgbGluZU51bWJlcik7CiAg
ICAgfSwKIAogICAgIHNob3VsZERpc3BsYXlCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwppbmRleCAyZGIwMTgyLi4yZjkx
YWRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwpAQCAtOSw2ICs5LDcg
QEAKICAgICA8ZmlsZT5BdWRpdFJ1bGVzLmpzPC9maWxlPgogICAgIDxmaWxlPkF1ZGl0c1BhbmVs
LmpzPC9maWxlPgogICAgIDxmaWxlPkJvdHRvbVVwUHJvZmlsZURhdGFHcmlkVHJlZS5qczwvZmls
ZT4KKyAgICA8ZmlsZT5CcmVha3BvaW50LmpzPC9maWxlPgogICAgIDxmaWxlPkJyZWFrcG9pbnRN
YW5hZ2VyLmpzPC9maWxlPgogICAgIDxmaWxlPkJyZWFrcG9pbnRzU2lkZWJhclBhbmUuanM8L2Zp
bGU+CiAgICAgPGZpbGU+Q2FsbGJhY2suanM8L2ZpbGU+CkBAIC0yOCw2ICsyOSw3IEBACiAgICAg
PGZpbGU+RGF0YWJhc2VRdWVyeVZpZXcuanM8L2ZpbGU+CiAgICAgPGZpbGU+RGF0YWJhc2VUYWJs
ZVZpZXcuanM8L2ZpbGU+CiAgICAgPGZpbGU+RGF0YUdyaWQuanM8L2ZpbGU+CisgICAgPGZpbGU+
RGVidWdnZXJNb2RlbC5qczwvZmlsZT4KICAgICA8ZmlsZT5ET01BZ2VudC5qczwvZmlsZT4KICAg
ICA8ZmlsZT5ET01TdG9yYWdlLmpzPC9maWxlPgogICAgIDxmaWxlPkRPTVN0b3JhZ2VJdGVtc1Zp
ZXcuanM8L2ZpbGU+CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5z
cGVjdG9yLmh0bWwgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwK
aW5kZXggNjdmZDA4MS4uNDBlNzVlYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuaHRtbApAQCAtNzMsNiArNzMsNyBAQCBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkFwcGxpY2F0aW9uQ2FjaGVJdGVtc1ZpZXcuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkZpbGVTeXN0
ZW1WaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSJTY3JpcHQuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBzcmM9IkJyZWFrcG9pbnQuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBzcmM9IkJyZWFrcG9pbnRNYW5hZ2VyLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTaWRlYmFyUGFuZS5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRWxlbWVudHNUcmVl
T3V0bGluZS5qcyI+PC9zY3JpcHQ+CkBAIC0xMzksNiArMTQwLDcgQEAgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJUb3BEb3duUHJvZmlsZURhdGFHcmlk
VHJlZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iUHJvZmlsZVZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9IkhlYXBTbmFwc2hvdFZpZXcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRlYnVnZ2VyTW9kZWwuanMiPjwvc2NyaXB0Pgog
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRPTUFnZW50LmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJJbmplY3RlZFNj
cmlwdC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggZjcxYjg5YS4uMzI3OWQ5NSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC0xOTIsNyArMTkyLDcgQEAgdmFyIFdl
Ykluc3BlY3RvciA9IHsKICAgICAgICAgewogICAgICAgICAgICAgcGFuZS5hZGRCcmVha3BvaW50
SXRlbShuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRJdGVtKGV2ZW50LmRhdGEpKTsKICAgICAg
ICAgfQotICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkRXZlbnRMaXN0
ZW5lcigiYnJlYWtwb2ludC1hZGRlZCIsIGJyZWFrcG9pbnRBZGRlZCk7CisgICAgICAgIFdlYklu
c3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoImJyZWFrcG9pbnQtYWRkZWQi
LCBicmVha3BvaW50QWRkZWQpOwogICAgICAgICByZXR1cm4gcGFuZTsKICAgICB9LAogCkBAIC01
MzMsOCArNTMzLDEwIEBAIFdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUgPSBmdW5jdGlvbigpCiAg
ICAgICAgIG90aGVyOiBuZXcgV2ViSW5zcGVjdG9yLlJlc291cmNlQ2F0ZWdvcnkoIm90aGVyIiwg
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJPdGhlciIpLCAicmdiKDE4NiwxODYsMTg2KSIpCiAgICAg
fTsKIAotICAgIHRoaXMuYnJlYWtwb2ludE1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRNYW5hZ2VyKCk7CiAgICAgdGhpcy5jc3NNb2RlbCA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NT
U3R5bGVNb2RlbCgpOworICAgIHRoaXMuZGVidWdnZXJNb2RlbCA9IG5ldyBXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNb2RlbCgpOworCisgICAgdGhpcy5icmVha3BvaW50TWFuYWdlciA9IG5ldyBXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIoKTsKIAogICAgIHRoaXMucGFuZWxzID0ge307CiAg
ICAgdGhpcy5fY3JlYXRlUGFuZWxzKCk7CkBAIC0xMzAxLDcgKzEzMDMsNyBAQCBXZWJJbnNwZWN0
b3IucGFyc2VkU2NyaXB0U291cmNlID0gZnVuY3Rpb24oc291cmNlSUQsIHNvdXJjZVVSTCwgc291
cmNlLCBzdGFydGluZwogCiBXZWJJbnNwZWN0b3IucmVzdG9yZWRCcmVha3BvaW50ID0gZnVuY3Rp
b24oc291cmNlSUQsIHNvdXJjZVVSTCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQogewotICAg
IHRoaXMuYnJlYWtwb2ludE1hbmFnZXIucmVzdG9yZWRCcmVha3BvaW50KHNvdXJjZUlELCBzb3Vy
Y2VVUkwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CisgICAgdGhpcy5kZWJ1Z2dlck1vZGVs
LmJyZWFrcG9pbnRSZXN0b3JlZChzb3VyY2VJRCwgc291cmNlVVJMLCBsaW5lLCBlbmFibGVkLCBj
b25kaXRpb24pOwogfQogCiBXZWJJbnNwZWN0b3IuZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZSA9
IGZ1bmN0aW9uKHNvdXJjZVVSTCwgc291cmNlLCBzdGFydGluZ0xpbmUsIGVycm9yTGluZSwgZXJy
b3JNZXNzYWdlKQpAQCAtMTMxMSwxOSArMTMxMywxNyBAQCBXZWJJbnNwZWN0b3IuZmFpbGVkVG9Q
YXJzZVNjcmlwdFNvdXJjZSA9IGZ1bmN0aW9uKHNvdXJjZVVSTCwgc291cmNlLCBzdGFydGluZ0xp
bgogCiBXZWJJbnNwZWN0b3IucGF1c2VkU2NyaXB0ID0gZnVuY3Rpb24oZGV0YWlscykKIHsKLSAg
ICB0aGlzLnBhbmVscy5zY3JpcHRzLmRlYnVnZ2VyUGF1c2VkKGRldGFpbHMuY2FsbEZyYW1lcyk7
Ci0gICAgdGhpcy5icmVha3BvaW50TWFuYWdlci5kZWJ1Z2dlclBhdXNlZChkZXRhaWxzKTsKLSAg
ICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuYnJpbmdUb0Zyb250KCk7CisgICAgdGhpcy5kZWJ1Z2dl
ck1vZGVsLmRlYnVnZ2VyUGF1c2VkKGRldGFpbHMpOwogfQogCiBXZWJJbnNwZWN0b3IucmVzdW1l
ZFNjcmlwdCA9IGZ1bmN0aW9uKCkKIHsKLSAgICB0aGlzLmJyZWFrcG9pbnRNYW5hZ2VyLmRlYnVn
Z2VyUmVzdW1lZCgpOwotICAgIHRoaXMucGFuZWxzLnNjcmlwdHMuZGVidWdnZXJSZXN1bWVkKCk7
CisgICAgdGhpcy5kZWJ1Z2dlck1vZGVsLmRlYnVnZ2VyUmVzdW1lZCgpOwogfQogCiBXZWJJbnNw
ZWN0b3IucmVzZXQgPSBmdW5jdGlvbigpCiB7CisgICAgdGhpcy5kZWJ1Z2dlck1vZGVsLnJlc2V0
KCk7CiAgICAgdGhpcy5icmVha3BvaW50TWFuYWdlci5yZXNldCgpOwogCiAgICAgZm9yICh2YXIg
cGFuZWxOYW1lIGluIHRoaXMucGFuZWxzKSB7Cg==
</data>
<flag name="review"
          id="66649"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>