<?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>50553</bug_id>
          
          <creation_ts>2010-12-06 00:47:20 -0800</creation_ts>
          <short_desc>Web Inspector: make script view editable</short_desc>
          <delta_ts>2011-02-25 03:02:48 -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>DUPLICATE</resolution>
          <dup_id>53588</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Andrey Adaikin">aandrey</assigned_to>
          <cc>aandrey</cc>
    
    <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>317477</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-12-06 00:47:20 -0800</bug_when>
    <thetext>Web Inspector: make Script view editable. Now it&apos;s possible to make changes in live-edit mode using double-click to start editing. Would be better to have its content editable like in classic IDEs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317486</commentid>
    <comment_count>1</comment_count>
      <attachid>75657</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2010-12-06 01:22:34 -0800</bug_when>
    <thetext>Created attachment 75657
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318154</commentid>
    <comment_count>2</comment_count>
      <attachid>75657</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-12-07 06:25:00 -0800</bug_when>
    <thetext>Comment on attachment 75657
Patch

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

&gt; WebCore/inspector/front-end/SourceTokenizer.js:-53
&gt; -        return this._condition.subTokenizer;

This is likely to break HTML tokenizer (it has JavaScript and CSS subtokenizers).

&gt; WebCore/inspector/front-end/TextEditorHighlighter.js:46
&gt; +            this._tokenizerCondition = JSON.stringify(this._tokenizer.initialCondition);

What was wrong with the object state?

&gt; WebCore/inspector/front-end/TextEditorHighlighter.js:54
&gt; +        this._tokenizerCondition = JSON.stringify(this._tokenizer.initialCondition);

ditto

&gt; WebCore/inspector/front-end/TextEditorHighlighter.js:141
&gt; +            return; 

run WebKitTools/Scripts/check-webkit-style to make sure there are no trailing spaces.

&gt; WebCore/inspector/front-end/TextEditorModel.js:37
&gt; +    this.upwards = upwards;

startLine can be &gt; than endLine, there is no need for &quot;upwards&quot; flag.

&gt; WebCore/inspector/front-end/TextViewer.js:36
&gt; +    this._textModel.resetUndoStack();

I think undo/redo support can be added in a separate change.

&gt; WebCore/inspector/front-end/TextViewer.js:54
&gt; +    this.element.addEventListener(&quot;dragstart&quot;, this._preventDefaultAndStopPropagation.bind(this), false);

Drag&apos;n&apos;drop should not be disabled.

&gt; WebCore/inspector/front-end/TextViewer.js:58
&gt; +    // TODO(aandrey): Disable the &quot;Delete&quot; context menu. HOW TO?!

We use // FIXME: foo bar. style in WebKit.

&gt; WebCore/inspector/front-end/TextViewer.js:174
&gt; +            } else {

no need for { } in for single line blocks.

&gt; WebCore/inspector/front-end/TextViewer.js:254
&gt; +            } else {

ditto

&gt; WebCore/inspector/front-end/TextViewer.js:263
&gt; +            for (var i = 0; i &lt; removedChunks.length; ++i) {

ditto

&gt; WebCore/inspector/front-end/TextViewer.js:411
&gt; +                this._replaceSelectionWith(&quot;\t&quot;);

This is very fishy. You should not care about the nature of the change (Tab vs Enter vs Backspace vs whatever). You should be able to re-build text model based on the generic dom change.

&gt; WebCore/inspector/front-end/TextViewer.js:438
&gt; +        this._shortcuts[WebInspector.KeyboardShortcut.makeKey(&quot;z&quot;, modifiers.CtrlOrMeta)] = this._handleUndo.bind(this);

All of these are supported by the contentEditable. You should not register them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318702</commentid>
    <comment_count>3</comment_count>
      <attachid>75657</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2010-12-08 02:33:20 -0800</bug_when>
    <thetext>Comment on attachment 75657
Patch

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

Thanks for the review. I will discard this change and start sending smaller ones to preserve existing live editing functionality.

&gt;&gt; WebCore/inspector/front-end/SourceTokenizer.js:-53
&gt;&gt; -        return this._condition.subTokenizer;
&gt; 
&gt; This is likely to break HTML tokenizer (it has JavaScript and CSS subtokenizers).

I searched carefully for the &quot;subTokenizer&quot; string and did not find it anywhere. But I can leave this as is though :)

&gt;&gt; WebCore/inspector/front-end/TextEditorHighlighter.js:46
&gt;&gt; +            this._tokenizerCondition = JSON.stringify(this._tokenizer.initialCondition);
&gt; 
&gt; What was wrong with the object state?

It worked in your case because &quot;initialCondition&quot; and &quot;condition&quot; was a number, but now they are objects. This JSON stringify/parse solution will work for both cases.

&gt;&gt; WebCore/inspector/front-end/TextEditorHighlighter.js:141
&gt;&gt; +            return; 
&gt; 
&gt; run WebKitTools/Scripts/check-webkit-style to make sure there are no trailing spaces.

Thanks.

&gt;&gt; WebCore/inspector/front-end/TextEditorModel.js:37
&gt;&gt; +    this.upwards = upwards;
&gt; 
&gt; startLine can be &gt; than endLine, there is no need for &quot;upwards&quot; flag.

The implementation of the TextEditorModel class (implicitly) assumes that {startPoint} &lt;= {endPoint}. I was thinking that this is an invariant to be held. If I remove this flag and break the invariant, I&apos;ll have to modify a whole bunch of code to respect this. What is the preferred way according to you?

&gt;&gt; WebCore/inspector/front-end/TextViewer.js:36
&gt;&gt; +    this._textModel.resetUndoStack();
&gt; 
&gt; I think undo/redo support can be added in a separate change.

Yes. I&apos;m going to discard this large change and send several incremental (hopefully small) changes.

&gt;&gt; WebCore/inspector/front-end/TextViewer.js:54
&gt;&gt; +    this.element.addEventListener(&quot;dragstart&quot;, this._preventDefaultAndStopPropagation.bind(this), false);
&gt; 
&gt; Drag&apos;n&apos;drop should not be disabled.

I also think so. Added FIXME for the future, but will leave this as is for now because default implementation breaks the editor.

&gt;&gt; WebCore/inspector/front-end/TextViewer.js:58
&gt;&gt; +    // TODO(aandrey): Disable the &quot;Delete&quot; context menu. HOW TO?!
&gt; 
&gt; We use // FIXME: foo bar. style in WebKit.

OK.

&gt;&gt; WebCore/inspector/front-end/TextViewer.js:174
&gt;&gt; +            } else {
&gt; 
&gt; no need for { } in for single line blocks.

Done.

&gt;&gt; WebCore/inspector/front-end/TextViewer.js:254
&gt;&gt; +            } else {
&gt; 
&gt; ditto

Done.

&gt;&gt; WebCore/inspector/front-end/TextViewer.js:263
&gt;&gt; +            for (var i = 0; i &lt; removedChunks.length; ++i) {
&gt; 
&gt; ditto

Done. Also found all places like this.

&gt;&gt; WebCore/inspector/front-end/TextViewer.js:411
&gt;&gt; +                this._replaceSelectionWith(&quot;\t&quot;);
&gt; 
&gt; This is very fishy. You should not care about the nature of the change (Tab vs Enter vs Backspace vs whatever). You should be able to re-build text model based on the generic dom change.

As far as I understand you, and extending your logic further, I might say that &quot;You should not care about keypress,keydown,copy,paste,cut and other events. You should be able to re-build text model based on generic dom change.&quot; If my understanding is correct, then I agree with you - we are much better off listening to a single &quot;DOM changed&quot; event that is fired when a content editable DOM changes. But AFAIK there is no such event :) Please correct me if I&apos;m wrong.

&gt;&gt; WebCore/inspector/front-end/TextViewer.js:438
&gt;&gt; +        this._shortcuts[WebInspector.KeyboardShortcut.makeKey(&quot;z&quot;, modifiers.CtrlOrMeta)] = this._handleUndo.bind(this);
&gt; 
&gt; All of these are supported by the contentEditable. You should not register them.

I will investigate this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318720</commentid>
    <comment_count>4</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-12-08 04:08:52 -0800</bug_when>
    <thetext>&gt; &gt;&gt; WebCore/inspector/front-end/SourceTokenizer.js:-53
&gt; &gt;&gt; -        return this._condition.subTokenizer;
&gt; &gt; 
&gt; &gt; This is likely to break HTML tokenizer (it has JavaScript and CSS subtokenizers).
&gt; 
&gt; I searched carefully for the &quot;subTokenizer&quot; string and did not find it anywhere. But I can leave this as is though :)
&gt;

You are right, it is not used now since subtokenizers got hardcoded in HTML tokenizer once we migrated from TextEditor to TextViewer earlier.
 
&gt; &gt;&gt; WebCore/inspector/front-end/TextEditorHighlighter.js:46
&gt; &gt;&gt; +            this._tokenizerCondition = JSON.stringify(this._tokenizer.initialCondition);
&gt; &gt; 
&gt; &gt; What was wrong with the object state?
&gt; 
&gt; It worked in your case because &quot;initialCondition&quot; and &quot;condition&quot; was a number, but now they are objects. This JSON stringify/parse solution will work for both cases.
&gt; 

Why can&apos;t we store a reference to an object without the need to stringify it?

&gt; &gt;&gt; WebCore/inspector/front-end/TextEditorModel.js:37
&gt; &gt;&gt; +    this.upwards = upwards;
&gt; &gt; 
&gt; &gt; startLine can be &gt; than endLine, there is no need for &quot;upwards&quot; flag.
&gt; 
&gt; The implementation of the TextEditorModel class (implicitly) assumes that {startPoint} &lt;= {endPoint}. I was thinking that this is an invariant to be held. If I remove this flag and break the invariant, I&apos;ll have to modify a whole bunch of code to respect this. What is the preferred way according to you?
&gt; 

Again, before we migrated to the TextViewer, we had WebInspector.TextSelectionModel. It was directional, while range was just range. TextModel was operating TextRanges, while editor was operating Selections (check out http://repenaxa.com/editor/editor.html). If you need a selection representation, I&apos;d suggest that you use a separate abstraction for it.

&gt; &gt;&gt; WebCore/inspector/front-end/TextViewer.js:411
&gt; &gt;&gt; +                this._replaceSelectionWith(&quot;\t&quot;);
&gt; &gt; 
&gt; &gt; This is very fishy. You should not care about the nature of the change (Tab vs Enter vs Backspace vs whatever). You should be able to re-build text model based on the generic dom change.
&gt; 
&gt; As far as I understand you, and extending your logic further, I might say that &quot;You should not care about keypress,keydown,copy,paste,cut and other events. You should be able to re-build text model based on generic dom change.&quot; If my understanding is correct, then I agree with you - we are much better off listening to a single &quot;DOM changed&quot; event that is fired when a content editable DOM changes. But AFAIK there is no such event :) Please correct me if I&apos;m wrong.

Yes, this is exactly what I mean - we should listen to DOM. Check out DOMCharacterDataModified event for that:

Try document.addEventListener(&quot;DOMCharacterDataModified&quot;, function(e) { console.log(e); }, false);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319344</commentid>
    <comment_count>5</comment_count>
      <attachid>76029</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2010-12-09 02:19:56 -0800</bug_when>
    <thetext>Created attachment 76029
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319351</commentid>
    <comment_count>6</comment_count>
      <attachid>76029</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-12-09 02:31:04 -0800</bug_when>
    <thetext>Comment on attachment 76029
Patch

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

&gt; WebCore/inspector/front-end/TextViewer.js:349
&gt; +    _beginDomUpdates: function()

In WebKit, all acronyms use upper case (HTML, XML, DOM, CSS, etc.) - see http://webkit.org/coding/coding-style.html for reference

&gt; WebCore/inspector/front-end/TextViewer.js:351
&gt; +        this._modifyingDomLevel++;

ditto

&gt; WebCore/inspector/front-end/TextViewer.js:354
&gt; +    _endDomUpdates: function()

ditto

&gt; WebCore/inspector/front-end/TextViewer.js:356
&gt; +        this._modifyingDomLevel--;

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319399</commentid>
    <comment_count>7</comment_count>
      <attachid>76029</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2010-12-09 04:33:34 -0800</bug_when>
    <thetext>Comment on attachment 76029
Patch

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

&gt;&gt; WebCore/inspector/front-end/TextViewer.js:349
&gt;&gt; +    _beginDomUpdates: function()
&gt; 
&gt; In WebKit, all acronyms use upper case (HTML, XML, DOM, CSS, etc.) - see http://webkit.org/coding/coding-style.html for reference

Done in all places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319401</commentid>
    <comment_count>8</comment_count>
      <attachid>76046</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2010-12-09 04:35:01 -0800</bug_when>
    <thetext>Created attachment 76046
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319449</commentid>
    <comment_count>9</comment_count>
      <attachid>76046</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-12-09 07:17:58 -0800</bug_when>
    <thetext>Comment on attachment 76046
Patch

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

Few nits to fix and it is good to land.

&gt; WebCore/inspector/front-end/TextViewer.js:58
&gt; +    this._linesContainerElement.addEventListener(&quot;DOMCharacterDataModified&quot;, this._handleDOMCharacterDataModified.bind(this), false);

You should only add those in case of editable mode.

&gt; WebCore/inspector/front-end/TextViewer.js:94
&gt; +            this._linesContainerElement.setAttribute(&quot;contentEditable&quot;, !!this._editCallback);

this._linesContainerElement.contentEditable = !!this._editCallback;

&gt; WebCore/inspector/front-end/TextViewer.js:241
&gt;      _handleKeyDown: function()

I think you should conditionally add listeners instead.

&gt; WebCore/inspector/front-end/TextViewer.js:272
&gt;      _handleDoubleClick: function(e)

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339610</commentid>
    <comment_count>10</comment_count>
      <attachid>80053</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2011-01-25 05:40:54 -0800</bug_when>
    <thetext>Created attachment 80053
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343956</commentid>
    <comment_count>11</comment_count>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2011-02-02 06:28:56 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 53588 ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357802</commentid>
    <comment_count>12</comment_count>
      <attachid>80053</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-25 03:02:48 -0800</bug_when>
    <thetext>Comment on attachment 80053
Patch

Clearing r? from the obsolete patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75657</attachid>
            <date>2010-12-06 01:22:34 -0800</date>
            <delta_ts>2010-12-09 02:19:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50553-20101206122231.patch</filename>
            <type>text/plain</type>
            <size>45138</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NGI3M2QxYTY5ODljZTAwNjg0MDNhN2RjMGYyMjYzMDRlYmI2MGY0NS4uMTdjZmFlYjZmNzZmODZh
ODE2OGFiOWNhZmU5MGNlMzM2YzY0ZTExZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OCBAQAorMjAxMC0xMi0wNiAgQW5k
cmV5IEFkYWlraW4gIDxhYW5kcmV5QGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbWFrZSBzY3JpcHQgdmll
dyBlZGl0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTA1NTMKKworICAgICAgICBNYWRlIFRleHRWaWV3ZXIgZWRpdGFibGUgdXNpbmcgSFRNTDUg
Y29udGVudEVkaXRhYmxlIGF0dHJpYnV0ZS4KKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlVG9rZW5pemVyLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvVGV4
dEVkaXRvckhpZ2hsaWdodGVyLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JI
aWdobGlnaHRlci5wcm90b3R5cGUuc2V0IG1pbWVUeXBlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5UZXh0RWRpdG9ySGlnaGxpZ2h0ZXIucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9ySGlnaGxpZ2h0ZXIucHJvdG90eXBlLnVwZGF0ZUhpZ2hsaWdodCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckhpZ2hsaWdodGVyLnByb3RvdHlwZS5f
aGlnaGxpZ2h0SW5DaHVua3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JIaWdo
bGlnaHRlci5wcm90b3R5cGUuX2hpZ2hsaWdodExpbmVzKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL1RleHRFZGl0b3JNb2RlbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
UmFuZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSYW5nZS5wcm90b3R5cGUuY2xvbmUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSYW5nZS5wcm90b3R5cGUuZXF1YWxzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTW9kZWwucHJvdG90eXBlLl9pbm5lclNldFRl
eHQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qczoKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
Vmlld2VyLnByb3RvdHlwZS5zZXQgZWRpdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5UZXh0Vmlld2VyLnByb3RvdHlwZS5fdGV4dENoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl91cGRhdGVDaHVua3NGb3JSYW5nZXMpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl91cGRhdGVDaHVua3NMaW5lTnVt
YmVyc1RleHRDb250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3Rv
dHlwZS5fYnVpbGRDaHVua3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJv
dG90eXBlLl9zY3JvbGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlLl9oYW5kbGVLZXlQcmVzcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5w
cm90b3R5cGUuX2hhbmRsZUtleURvd24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3
ZXIucHJvdG90eXBlLl9yZWdpc3RlclNob3J0Y3V0cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dFZpZXdlci5wcm90b3R5cGUuX2hhbmRsZVVuZG8pOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlRleHRWaWV3ZXIucHJvdG90eXBlLl9oYW5kbGVSZWRvKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5UZXh0Vmlld2VyLnByb3RvdHlwZS5fc2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5UZXh0Vmlld2VyLnByb3RvdHlwZS5faGFuZGxlRGVsZXRlS2V5KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5faGFuZGxlQmFja3NwYWNlS2V5KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5fcHJldmVudERlZmF1bHRBbmRT
dG9wUHJvcGFnYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlLl9jdXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl9w
YXN0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuX3JlcGxh
Y2VTZWxlY3Rpb25XaXRoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3Rv
dHlwZS5iZWdpblVwZGF0ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJv
dG90eXBlLmVuZFVwZGF0ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJv
dG90eXBlLl9yZXBhaW50QWxsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnBy
b3RvdHlwZS5fZ2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2Vy
LnByb3RvdHlwZS5fcmVzdG9yZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4
dFZpZXdlci5wcm90b3R5cGUuX3NldENhcmV0TG9jYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl9zZXRDYXJldExvY2F0aW9uVG9Ub3ApOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl9zZXRDYXJldExvY2F0aW9uVG9C
b3R0b20pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRDaHVuayk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVGV4dENodW5rLnByb3RvdHlwZS51cGRhdGVMaW5lTnVtYmVycyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dENodW5rLnByb3RvdHlwZS51cGRhdGVMaW5lTnVtYmVyc1RleHRD
b250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q2h1bmsucHJvdG90eXBlLnNldCBl
eHBhbmRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dENodW5rLnByb3RvdHlwZS5fY3Jl
YXRlUm93KToKKwogMjAxMC0xMS0yOSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVRva2VuaXplci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Tb3VyY2VUb2tlbml6ZXIuanMKaW5kZXggZDMwNzQ0YzRmOTNiZjMwZmFhMWEy
YjYyNTMyN2JhYTJiYzMyN2FkMC4uYmI0NGE4NmVkMWQwODFhYTQ4MzRkNDgzNzYzNWNmZjBhYWFj
MTg4MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVRva2Vu
aXplci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVG9rZW5pemVy
LmpzCkBAIC00OCwxMSArNDgsNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlVG9rZW5pemVyLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmRpdGlvbjsKICAgICB9LAogCi0gICAg
Z2V0IHN1YlRva2VuaXplcigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fY29uZGl0aW9u
LnN1YlRva2VuaXplcjsKLSAgICB9LAotCiAgICAgZ2V0TGV4Q29uZGl0aW9uOiBmdW5jdGlvbigp
CiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb24ubGV4Q29uZGl0aW9uOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRFZGl0b3JIaWdobGlnaHRl
ci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0RWRpdG9ySGlnaGxpZ2h0ZXIu
anMKaW5kZXggNGFjODMxZWE0ZmU1Y2QwZGNiMDljNGZkMzU3Y2Q3ZDIzYWE2ZDhkYS4uM2UzZmY5
ZWMxYmY3ODE0NTYyNjgxMzc5MjY5MzZhN2M0ZGJmOWU2YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1RleHRFZGl0b3JIaWdobGlnaHRlci5qcworKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dEVkaXRvckhpZ2hsaWdodGVyLmpzCkBAIC00Myw3ICs0
Myw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9ySGlnaGxpZ2h0ZXIucHJvdG90eXBlID0gewog
ICAgICAgICB2YXIgdG9rZW5pemVyID0gV2ViSW5zcGVjdG9yLlNvdXJjZVRva2VuaXplci5SZWdp
c3RyeS5nZXRJbnN0YW5jZSgpLmdldFRva2VuaXplcihtaW1lVHlwZSk7CiAgICAgICAgIGlmICh0
b2tlbml6ZXIpIHsKICAgICAgICAgICAgIHRoaXMuX3Rva2VuaXplciA9IHRva2VuaXplcjsKLSAg
ICAgICAgICAgIHRoaXMuX3Rva2VuaXplckNvbmRpdGlvbiA9IHRoaXMuX3Rva2VuaXplci5pbml0
aWFsQ29uZGl0aW9uOworICAgICAgICAgICAgdGhpcy5fdG9rZW5pemVyQ29uZGl0aW9uID0gSlNP
Ti5zdHJpbmdpZnkodGhpcy5fdG9rZW5pemVyLmluaXRpYWxDb25kaXRpb24pOwogICAgICAgICB9
CiAgICAgfSwKIApAQCAtNTEsNyArNTEsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckhpZ2hs
aWdodGVyLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHRoaXMuX2xhc3RIaWdobGlnaHRl
ZExpbmUgPSAwOwogICAgICAgICB0aGlzLl9sYXN0SGlnaGxpZ2h0ZWRDb2x1bW4gPSAwOwotICAg
ICAgICB0aGlzLl90b2tlbml6ZXJDb25kaXRpb24gPSB0aGlzLl90b2tlbml6ZXIuaW5pdGlhbENv
bmRpdGlvbjsKKyAgICAgICAgdGhpcy5fdG9rZW5pemVyQ29uZGl0aW9uID0gSlNPTi5zdHJpbmdp
ZnkodGhpcy5fdG9rZW5pemVyLmluaXRpYWxDb25kaXRpb24pOwogICAgIH0sCiAKICAgICBoaWdo
bGlnaHQ6IGZ1bmN0aW9uKGVuZExpbmUpCkBAIC03NSw2ICs3NSw1OCBAQCBXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvckhpZ2hsaWdodGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX2hp
Z2hsaWdodFRpbWVyID0gc2V0VGltZW91dCh0aGlzLl9oaWdobGlnaHRJbkNodW5rcy5iaW5kKHRo
aXMsIGVuZExpbmUpLCAxMDApOwogICAgIH0sCiAKKyAgICB1cGRhdGVIaWdobGlnaHQ6IGZ1bmN0
aW9uKHN0YXJ0TGluZSwgZW5kTGluZSkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9sYXN0SGln
aGxpZ2h0ZWRMaW5lIDwgc3RhcnRMaW5lKSB7CisgICAgICAgICAgICAvLyBIaWdobGlnaHRlciBk
aWQgbm90IHJlYWNoIHRoaXMgcG9pbnQgeWV0LCBub3RoaW5nIHRvIHVwZGF0ZS4gSXQgd2lsbCBy
ZWFjaCBpdCBvbiBzdWJzZXF1ZW50IHRpbWVyIHRpY2sgYW5kIGRvIHRoZSBqb2IuCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB2YXIgc2F2ZWRMYXN0SGln
aGxpZ2h0ZWRMaW5lID0gdGhpcy5fbGFzdEhpZ2hsaWdodGVkTGluZTsKKyAgICAgICAgdmFyIHNh
dmVkTGFzdEhpZ2hsaWdodGVkQ29sdW1uID0gdGhpcy5fbGFzdEhpZ2hsaWdodGVkQ29sdW1uOwor
ICAgICAgICB2YXIgc2F2ZWRUb2tlbml6ZXJDb25kaXRpb24gPSB0aGlzLl90b2tlbml6ZXJDb25k
aXRpb247CisKKyAgICAgICAgdGhpcy5fbGFzdEhpZ2hsaWdodGVkTGluZSA9IHN0YXJ0TGluZTsK
KyAgICAgICAgdGhpcy5fbGFzdEhpZ2hsaWdodGVkQ29sdW1uID0gMDsKKworICAgICAgICAvLyBS
ZXN0b3JlIGhpZ2hsaWdodGVyIGNvbnRleHQgdGFrZW4gZnJvbSBwcmV2aW91cyBsaW5lLgorICAg
ICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUoc3RhcnRM
aW5lIC0gMSwgImhpZ2hsaWdodCIpIHx8IHt9OworICAgICAgICB0aGlzLl90b2tlbml6ZXJDb25k
aXRpb24gPSBhdHRyaWJ1dGVzLnBvc3RDb25kaXRpb24gfHwgSlNPTi5zdHJpbmdpZnkodGhpcy5f
dG9rZW5pemVyLmluaXRpYWxDb25kaXRpb24pOworCisgICAgICAgIC8vIFRyeSB0byB1cGRhdGUg
aGlnaGxpZ2h0IHN5bmNocm9ub3VzbHkuCisgICAgICAgIHRoaXMuX2hpZ2hsaWdodExpbmVzKGVu
ZExpbmUpOworCisgICAgICAgIGlmICh0aGlzLl9sYXN0SGlnaGxpZ2h0ZWRMaW5lID49IHRoaXMu
X3RleHRNb2RlbC5saW5lc0NvdW50KSB7CisgICAgICAgICAgICAvLyBBbGwgaXMgZG9uZSB1cCB0
byB0aGUgZW5kLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAg
ICB2YXIgYXR0cnMxID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZSh0aGlzLl9sYXN0SGln
aGxpZ2h0ZWRMaW5lIC0gMSwgImhpZ2hsaWdodCIpIHx8IHt9OworICAgICAgICB2YXIgYXR0cnMy
ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZSh0aGlzLl9sYXN0SGlnaGxpZ2h0ZWRMaW5l
LCAiaGlnaGxpZ2h0IikgfHwge307CisgICAgICAgIGlmICh0aGlzLl9sYXN0SGlnaGxpZ2h0ZWRD
b2x1bW4gPT09IDAgJiYgYXR0cnMyLnByZUNvbmRpdGlvbiAmJiBhdHRyczEucG9zdENvbmRpdGlv
biA9PT0gYXR0cnMyLnByZUNvbmRpdGlvbikgeworICAgICAgICAgICAgLy8gSGlnaGxpZ2h0aW5n
IGVuZGVkIGFoZWFkIG9mIHRpbWUuIFJlc3RvcmUgcHJldmlvdXNseSBzYXZlZCBzdGF0ZS4KKyAg
ICAgICAgICAgIHRoaXMuX2xhc3RIaWdobGlnaHRlZExpbmUgPSBzYXZlZExhc3RIaWdobGlnaHRl
ZExpbmU7CisgICAgICAgICAgICB0aGlzLl9sYXN0SGlnaGxpZ2h0ZWRDb2x1bW4gPSBzYXZlZExh
c3RIaWdobGlnaHRlZENvbHVtbjsKKyAgICAgICAgICAgIHRoaXMuX3Rva2VuaXplckNvbmRpdGlv
biA9IHNhdmVkVG9rZW5pemVyQ29uZGl0aW9uOworCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIElmIGZhaWxlZCB0byB1cGRhdGUgaGln
aGxpZ2h0IHN5bmNocm9ub3VzbHksIGludmFsaWRhdGUgaGlnaGxpZ2h0IGRhdGEgZm9yIHRoZSBz
dWJzZXF1ZW50IGxpbmVzLgorICAgICAgICAgICAgaWYgKHRoaXMuX2xhc3RIaWdobGlnaHRlZENv
bHVtbiA9PT0gMCkKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwucmVtb3ZlQXR0cmli
dXRlKHRoaXMuX2xhc3RIaWdobGlnaHRlZExpbmUsICJoaWdobGlnaHQiKTsKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSB0aGlzLl9sYXN0SGlnaGxpZ2h0ZWRMaW5lICsgMTsgaSA8IHRoaXMuX3Rl
eHRNb2RlbC5saW5lc0NvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0TW9k
ZWwucmVtb3ZlQXR0cmlidXRlKGksICJoaWdobGlnaHQiKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gQ29udGludWUgaGlnaGxpZ2h0aW5nIG9uIHN1YnNlcXVlbnQgdGltZXIgdGlj
a3MuCisgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0ZWRFbmRMaW5lID0gZW5kTGluZTsKKyAgICAg
ICAgICAgIGlmICghdGhpcy5faGlnaGxpZ2h0VGltZXIpCisgICAgICAgICAgICAgICAgdGhpcy5f
aGlnaGxpZ2h0VGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuX2hpZ2hsaWdodEluQ2h1bmtzLmJpbmQo
dGhpcywgZW5kTGluZSksIDEwMCk7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0sCisKICAgICBfaGlnaGxpZ2h0SW5DaHVua3M6IGZ1bmN0aW9uKGVuZExpbmUp
CiAgICAgewogICAgICAgICBkZWxldGUgdGhpcy5faGlnaGxpZ2h0VGltZXI7CkBAIC04Niw5ICsx
MzgsMTMgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JIaWdobGlnaHRlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0ZWRFbmRMaW5lICE9PSBlbmRMaW5lKSB7CiAgICAg
ICAgICAgICAvLyBVc2VyIGtlZXBzIHVwZGF0aW5nIHRoZSBqb2IgaW4gYmV0d2VlbiBvZiBvdXIg
dGltZXIgdGlja3MuIEp1c3QgcmVzY2hlZHVsZSBzZWxmLCBkb24ndCBlYXQgQ1BVICh0aGV5IG11
c3QgYmUgc2Nyb2xsaW5nKS4KICAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodFRpbWVyID0gc2V0
VGltZW91dCh0aGlzLl9oaWdobGlnaHRJbkNodW5rcy5iaW5kKHRoaXMsIHRoaXMuX3JlcXVlc3Rl
ZEVuZExpbmUpLCAxMDApOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJu
OyAKICAgICAgICAgfQogCisgICAgICAgIC8vIFRoZSB0ZXh0TW9kZWwgbWF5IGhhdmUgYmVlbiBh
bHJlYWR5IHVwZGF0ZWQuCisgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0ZWRFbmRMaW5lID4gdGhp
cy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpCisgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0ZWRFbmRM
aW5lID0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQ7CisKICAgICAgICAgdGhpcy5faGlnaGxp
Z2h0TGluZXModGhpcy5fcmVxdWVzdGVkRW5kTGluZSk7CiAKICAgICAgICAgLy8gU2NoZWR1bGUg
dGFpbCBoaWdobGlnaHQgaWYgbmVjZXNzYXJ5LgpAQCAtOTgsMzUgKzE1NCw0OCBAQCBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvckhpZ2hsaWdodGVyLnByb3RvdHlwZSA9IHsKIAogICAgIF9oaWdobGln
aHRMaW5lczogZnVuY3Rpb24oZW5kTGluZSkKICAgICB7Ci0gICAgICAgIC8vIFRva2VuaXplciBp
cyBzdGF0ZWxlc3MgYW5kIHJldXNlZCBhY2Nyb3NzIHZpZXdlcnMsIHJlc3RvcmUgaXRzIGNvbmRp
dGlvbiBiZWZvcmUgaGlnaGxpZ2h0IGFuZCBzYXZlIGl0IGFmdGVyLgotICAgICAgICB0aGlzLl90
b2tlbml6ZXIuY29uZGl0aW9uID0gdGhpcy5fdG9rZW5pemVyQ29uZGl0aW9uOworICAgICAgICAv
LyBUb2tlbml6ZXIgaXMgc3RhdGVsZXNzIGFuZCByZXVzZWQgYWNyb3NzIHZpZXdlcnMsIHJlc3Rv
cmUgaXRzIGNvbmRpdGlvbiBiZWZvcmUgaGlnaGxpZ2h0IGFuZCBzYXZlIGl0IGFmdGVyLgorICAg
ICAgICB0aGlzLl90b2tlbml6ZXIuY29uZGl0aW9uID0gSlNPTi5wYXJzZSh0aGlzLl90b2tlbml6
ZXJDb25kaXRpb24pOwogICAgICAgICB2YXIgdG9rZW5zQ291bnQgPSAwOwogICAgICAgICBmb3Ig
KHZhciBsaW5lTnVtYmVyID0gdGhpcy5fbGFzdEhpZ2hsaWdodGVkTGluZTsgbGluZU51bWJlciA8
IGVuZExpbmU7ICsrbGluZU51bWJlcikgewogICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90
ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKTsKICAgICAgICAgICAgIHRoaXMuX3Rva2VuaXplci5s
aW5lID0gbGluZTsKLSAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5fdGV4dE1vZGVs
LmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiaGlnaGxpZ2h0IikgfHwge307CisKKyAgICAgICAg
ICAgIHZhciBhdHRyaWJ1dGVzID0ge307CisgICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0
QXR0cmlidXRlKGxpbmVOdW1iZXIsICJoaWdobGlnaHQiLCBhdHRyaWJ1dGVzKTsKKworICAgICAg
ICAgICAgaWYgKHRoaXMuX2xhc3RIaWdobGlnaHRlZENvbHVtbiA9PT0gMCkKKyAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGVzLnByZUNvbmRpdGlvbiA9IEpTT04uc3RyaW5naWZ5KHRoaXMuX3Rva2Vu
aXplci5jb25kaXRpb24pOwogCiAgICAgICAgICAgICAvLyBIaWdobGlnaHQgbGluZS4KICAgICAg
ICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICB2YXIgbmV3Q29sdW1uID0gdGhpcy5fdG9rZW5p
emVyLm5leHRUb2tlbih0aGlzLl9sYXN0SGlnaGxpZ2h0ZWRDb2x1bW4pOwogICAgICAgICAgICAg
ICAgIHZhciB0b2tlblR5cGUgPSB0aGlzLl90b2tlbml6ZXIudG9rZW5UeXBlOwogICAgICAgICAg
ICAgICAgIGlmICh0b2tlblR5cGUpCi0gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbdGhp
cy5fbGFzdEhpZ2hsaWdodGVkQ29sdW1uXSA9IHsgbGVuZ3RoOiBuZXdDb2x1bW4gLSB0aGlzLl9s
YXN0SGlnaGxpZ2h0ZWRDb2x1bW4sIHRva2VuVHlwZTogdG9rZW5UeXBlLCBzdWJUb2tlbml6ZXI6
IHRoaXMuX3Rva2VuaXplci5zdWJUb2tlbml6ZXIgfTsKKyAgICAgICAgICAgICAgICAgICAgYXR0
cmlidXRlc1t0aGlzLl9sYXN0SGlnaGxpZ2h0ZWRDb2x1bW5dID0geyBsZW5ndGg6IG5ld0NvbHVt
biAtIHRoaXMuX2xhc3RIaWdobGlnaHRlZENvbHVtbiwgdG9rZW5UeXBlOiB0b2tlblR5cGUgfTsK
ICAgICAgICAgICAgICAgICB0aGlzLl9sYXN0SGlnaGxpZ2h0ZWRDb2x1bW4gPSBuZXdDb2x1bW47
CiAgICAgICAgICAgICAgICAgaWYgKCsrdG9rZW5zQ291bnQgPiAxMDAwKQogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gd2hpbGUgKHRoaXMuX2xhc3RIaWdobGlnaHRl
ZENvbHVtbiA8IGxpbmUubGVuZ3RoKQorICAgICAgICAgICAgfSB3aGlsZSAodGhpcy5fbGFzdEhp
Z2hsaWdodGVkQ29sdW1uIDwgbGluZS5sZW5ndGgpOwogCi0gICAgICAgICAgICB0aGlzLl90ZXh0
TW9kZWwuc2V0QXR0cmlidXRlKGxpbmVOdW1iZXIsICJoaWdobGlnaHQiLCBhdHRyaWJ1dGVzKTsK
ICAgICAgICAgICAgIGlmICh0aGlzLl9sYXN0SGlnaGxpZ2h0ZWRDb2x1bW4gPCBsaW5lLmxlbmd0
aCkgewogICAgICAgICAgICAgICAgIC8vIFRvbyBtdWNoIHdvcmsgZm9yIHNpbmdsZSBjaHVuayAt
IGV4aXQuCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgdGhpcy5fbGFzdEhpZ2hsaWdodGVkQ29s
dW1uID0gMDsKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnBvc3RDb25kaXRpb24gPSBKU09O
LnN0cmluZ2lmeSh0aGlzLl90b2tlbml6ZXIuY29uZGl0aW9uKTsKKworICAgICAgICAgICAgICAg
IHZhciBuZXh0QXR0cmlidXRlcyA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51
bWJlciArIDEsICJoaWdobGlnaHQiKSB8fCB7fTsKKyAgICAgICAgICAgICAgICBpZiAobmV4dEF0
dHJpYnV0ZXMucHJlQ29uZGl0aW9uID09PSBhdHRyaWJ1dGVzLnBvc3RDb25kaXRpb24pIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gRm9sbG93aW5nIGxpbmVzIGFyZSB1cCB0byBkYXRlLCBubyBu
ZWVkIHRvIHJlLWhpZ2hsaWdodC4KKyAgICAgICAgICAgICAgICAgICAgKytsaW5lTnVtYmVyOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLl9kYW1hZ2VDYWxsYmFjayh0aGlzLl9sYXN0
SGlnaGxpZ2h0ZWRMaW5lLCBsaW5lTnVtYmVyKTsKLSAgICAgICAgdGhpcy5fdG9rZW5pemVyQ29u
ZGl0aW9uID0gdGhpcy5fdG9rZW5pemVyLmNvbmRpdGlvbjsKKyAgICAgICAgdGhpcy5fdG9rZW5p
emVyQ29uZGl0aW9uID0gSlNPTi5zdHJpbmdpZnkodGhpcy5fdG9rZW5pemVyLmNvbmRpdGlvbik7
CiAgICAgICAgIHRoaXMuX2xhc3RIaWdobGlnaHRlZExpbmUgPSBsaW5lTnVtYmVyOwogICAgIH0K
IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0RWRpdG9yTW9k
ZWwuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dEVkaXRvck1vZGVsLmpzCmlu
ZGV4IGYyM2NlNzZjNzBiNDY3OTY4MmEzNGQwZGYzY2RhZTVlMTgzMmE5YWIuLjA5NzVjMThmMGYw
MjU4NDQ5MDdlZTg4NTg4MjBkYjU0NmM3NjExMjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9UZXh0RWRpdG9yTW9kZWwuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1RleHRFZGl0b3JNb2RlbC5qcwpAQCAtMjgsMTIgKzI4LDEzIEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5UZXh0UmFuZ2UgPSBmdW5jdGlvbihzdGFydExp
bmUsIHN0YXJ0Q29sdW1uLCBlbmRMaW5lLCBlbmRDb2x1bW4pCitXZWJJbnNwZWN0b3IuVGV4dFJh
bmdlID0gZnVuY3Rpb24oc3RhcnRMaW5lLCBzdGFydENvbHVtbiwgZW5kTGluZSwgZW5kQ29sdW1u
LCB1cHdhcmRzKQogewogICAgIHRoaXMuc3RhcnRMaW5lID0gc3RhcnRMaW5lOwogICAgIHRoaXMu
c3RhcnRDb2x1bW4gPSBzdGFydENvbHVtbjsKICAgICB0aGlzLmVuZExpbmUgPSBlbmRMaW5lOwog
ICAgIHRoaXMuZW5kQ29sdW1uID0gZW5kQ29sdW1uOworICAgIHRoaXMudXB3YXJkcyA9IHVwd2Fy
ZHM7CiB9CiAKIFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UucHJvdG90eXBlID0gewpAQCAtNDksNyAr
NTAsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlLnByb3RvdHlwZSA9IHsKIAogICAgIGNsb25l
OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5UZXh0
UmFuZ2UodGhpcy5zdGFydExpbmUsIHRoaXMuc3RhcnRDb2x1bW4sIHRoaXMuZW5kTGluZSwgdGhp
cy5lbmRDb2x1bW4pOyAKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdl
KHRoaXMuc3RhcnRMaW5lLCB0aGlzLnN0YXJ0Q29sdW1uLCB0aGlzLmVuZExpbmUsIHRoaXMuZW5k
Q29sdW1uLCB0aGlzLnVwd2FyZHMpOwogICAgIH0KIH0KIApAQCAtMTEyLDcgKzExMyw2IEBAIFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTW9kZWwucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9y
ZXBsYWNlVGFic0lmTmVlZGVkKG5ld0xpbmVzKTsKIAogICAgICAgICB2YXIgcHJlZml4ID0gdGhp
cy5fbGluZXNbcmFuZ2Uuc3RhcnRMaW5lXS5zdWJzdHJpbmcoMCwgcmFuZ2Uuc3RhcnRDb2x1bW4p
OwotICAgICAgICB2YXIgcHJlZml4QXJndW1lbnRzID0gdGhpcy5fYXJndW1lbnRzCiAgICAgICAg
IHZhciBzdWZmaXggPSB0aGlzLl9saW5lc1tyYW5nZS5zdGFydExpbmVdLnN1YnN0cmluZyhyYW5n
ZS5zdGFydENvbHVtbik7CiAKICAgICAgICAgdmFyIHBvc3RDYXJldCA9IHByZWZpeC5sZW5ndGg7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzCmluZGV4IDlhZDVlNDk0
ODMzNTgzNDVjZTExMWEwMWI2YTg2MTlmMmI4ODBiZDUuLjliYjUzZDFlM2EyODVlMTNmYjE3Y2U5
M2U3ZGExOTRjZGM2Mjg0ZGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9UZXh0Vmlld2VyLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmll
d2VyLmpzCkBAIC0zMiw3ICszMiw4IEBACiBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlciA9IGZ1bmN0
aW9uKHRleHRNb2RlbCwgcGxhdGZvcm0sIHVybCkKIHsKICAgICB0aGlzLl90ZXh0TW9kZWwgPSB0
ZXh0TW9kZWw7Ci0gICAgdGhpcy5fdGV4dE1vZGVsLmNoYW5nZUxpc3RlbmVyID0gdGhpcy5fYnVp
bGRDaHVua3MuYmluZCh0aGlzKTsKKyAgICB0aGlzLl90ZXh0TW9kZWwuY2hhbmdlTGlzdGVuZXIg
PSB0aGlzLl90ZXh0Q2hhbmdlZC5iaW5kKHRoaXMpOworICAgIHRoaXMuX3RleHRNb2RlbC5yZXNl
dFVuZG9TdGFjaygpOwogICAgIHRoaXMuX2hpZ2hsaWdodGVyID0gbmV3IFdlYkluc3BlY3Rvci5U
ZXh0RWRpdG9ySGlnaGxpZ2h0ZXIodGhpcy5fdGV4dE1vZGVsLCB0aGlzLl9oaWdobGlnaHREYXRh
UmVhZHkuYmluZCh0aGlzKSk7CiAKICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKQEAgLTQxLDkgKzQyLDIwIEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2Vy
ID0gZnVuY3Rpb24odGV4dE1vZGVsLCBwbGF0Zm9ybSwgdXJsKQogCiAgICAgdGhpcy5lbGVtZW50
LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMuX3Njcm9sbC5iaW5kKHRoaXMpLCBmYWxz
ZSk7CiAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9o
YW5kbGVLZXlEb3duLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigiYmVmb3JlY29weSIsIHRoaXMuX2JlZm9yZUNvcHkuYmluZCh0aGlzKSwgZmFs
c2UpOworICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsIHRoaXMu
X2hhbmRsZUtleVByZXNzLmJpbmQodGhpcyksIGZhbHNlKTsKKyAgICB0aGlzLmVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigiYmVmb3JlY29weSIsIHRoaXMuX3ByZXZlbnREZWZhdWx0QW5kU3RvcFBy
b3BhZ2F0aW9uLmJpbmQodGhpcyksIGZhbHNlKTsKICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcigiY29weSIsIHRoaXMuX2NvcHkuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMu
ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJkYmxjbGljayIsIHRoaXMuX2hhbmRsZURvdWJsZUNs
aWNrLmJpbmQodGhpcyksIGZhbHNlKTsKKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5l
cigiYmVmb3JlY3V0IiwgdGhpcy5fcHJldmVudERlZmF1bHRBbmRTdG9wUHJvcGFnYXRpb24uYmlu
ZCh0aGlzKSwgZmFsc2UpOworICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjdXQi
LCB0aGlzLl9jdXQuYmluZCh0aGlzKSwgZmFsc2UpOworICAgIHRoaXMuZWxlbWVudC5hZGRFdmVu
dExpc3RlbmVyKCJiZWZvcmVwYXN0ZSIsIHRoaXMuX3ByZXZlbnREZWZhdWx0QW5kU3RvcFByb3Bh
Z2F0aW9uLmJpbmQodGhpcyksIGZhbHNlKTsKKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigicGFzdGUiLCB0aGlzLl9wYXN0ZS5iaW5kKHRoaXMpLCBmYWxzZSk7CisKKyAgICAvLyBE
aXNhYmxlIGRyYWcgYW5kIGRyb3AuCisgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo
ImRyYWdzdGFydCIsIHRoaXMuX3ByZXZlbnREZWZhdWx0QW5kU3RvcFByb3BhZ2F0aW9uLmJpbmQo
dGhpcyksIGZhbHNlKTsKKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2Vu
dGVyIiwgdGhpcy5fcHJldmVudERlZmF1bHRBbmRTdG9wUHJvcGFnYXRpb24uYmluZCh0aGlzKSwg
ZmFsc2UpOworICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIHRo
aXMuX3ByZXZlbnREZWZhdWx0QW5kU3RvcFByb3BhZ2F0aW9uLmJpbmQodGhpcyksIGZhbHNlKTsK
KworICAgIC8vIFRPRE8oYWFuZHJleSk6IERpc2FibGUgdGhlICJEZWxldGUiIGNvbnRleHQgbWVu
dS4gSE9XIFRPPyEKIAogICAgIHRoaXMuX3VybCA9IHVybDsKIApAQCAtNTEsMTEgKzYzLDE0IEBA
IFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyID0gZnVuY3Rpb24odGV4dE1vZGVsLCBwbGF0Zm9ybSwg
dXJsKQogICAgIHRoaXMuX2xpbmVzQ29udGFpbmVyRWxlbWVudC5jbGFzc05hbWUgPSAidGV4dC1l
ZGl0b3ItbGluZXMiOwogICAgIHRoaXMuX2xpbmVzQ29udGFpbmVyRWxlbWVudC5zZXRBdHRyaWJ1
dGUoImNlbGxzcGFjaW5nIiwgMCk7CiAgICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50LnNl
dEF0dHJpYnV0ZSgiY2VsbHBhZGRpbmciLCAwKTsKKwogICAgIHRoaXMuZWxlbWVudC5hcHBlbmRD
aGlsZCh0aGlzLl9saW5lc0NvbnRhaW5lckVsZW1lbnQpOwogCiAgICAgdGhpcy5fZGVmYXVsdENo
dW5rU2l6ZSA9IDUwOwogICAgIHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsID0gMDsKIAorICAg
IHRoaXMuX3JlZ2lzdGVyU2hvcnRjdXRzKCk7CisKICAgICB0aGlzLmZyZWVDYWNoZWRFbGVtZW50
cygpOwogICAgIHRoaXMuX2J1aWxkQ2h1bmtzKCk7CiB9CkBAIC04Myw2ICs5OCw3IEBAIFdlYklu
c3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAgICBzZXQgZWRpdENhbGxiYWNrKGVk
aXRDYWxsYmFjaykKICAgICB7CiAgICAgICAgIHRoaXMuX2VkaXRDYWxsYmFjayA9IGVkaXRDYWxs
YmFjazsKKyAgICAgICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgi
Y29udGVudEVkaXRhYmxlIiwgISF0aGlzLl9lZGl0Q2FsbGJhY2spOwogICAgIH0sCiAKICAgICBh
ZGREZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0aW9uKQpAQCAtMTQwLDE2
ICsxNTYsMTUxIEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgdGhpcy5fY2FjaGVkUm93cyA9IFtdOwogICAgIH0sCiAKKyAgICAvLyBXZWJJbnNwZWN0b3Iu
VGV4dE1vZGVsIGxpc3RlbmVyCisgICAgX3RleHRDaGFuZ2VkOiBmdW5jdGlvbihvbGRSYW5nZSwg
bmV3UmFuZ2UsIG9sZFRleHQsIG5ld1RleHQpCisgICAgeworICAgICAgICB0aGlzLl91cGRhdGVD
aHVua3NGb3JSYW5nZXMob2xkUmFuZ2UsIG5ld1JhbmdlKTsKKworICAgICAgICB2YXIgdmlzaWJs
ZUZyb20gPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wOworICAgICAgICB2YXIgdmlzaWJsZVRvID0g
dGhpcy5lbGVtZW50LnNjcm9sbFRvcCArIHRoaXMuZWxlbWVudC5jbGllbnRIZWlnaHQ7CisKKyAg
ICAgICAgdmFyIG9mZnNldCA9IDA7CisgICAgICAgIHZhciBsYXN0VmlzaWJsZUxpbmUgPSAwOwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbaV07CisgICAgICAg
ICAgICB2YXIgY2h1bmtIZWlnaHQgPSBjaHVuay5oZWlnaHQ7CisgICAgICAgICAgICBpZiAob2Zm
c2V0ICsgY2h1bmtIZWlnaHQgPiB2aXNpYmxlRnJvbSAmJiBvZmZzZXQgPCB2aXNpYmxlVG8pIHsK
KyAgICAgICAgICAgICAgICBsYXN0VmlzaWJsZUxpbmUgPSBjaHVuay5zdGFydExpbmUgKyBjaHVu
ay5saW5lc0NvdW50OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAo
b2Zmc2V0ID49IHZpc2libGVUbykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBvZmZzZXQgKz0gY2h1bmtIZWlnaHQ7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBUaGUgbmV3UmFuZ2UgbWF5IGJlIG91dHNpZGUgb2YgdGhlIHZpc2libGUgYXJl
YSAoZS5nLiBpbiBjYXNlIG9mIHVuZG8vcmVkbykuCisgICAgICAgIGxhc3RWaXNpYmxlTGluZSA9
IE1hdGgubWF4KGxhc3RWaXNpYmxlTGluZSwgbmV3UmFuZ2UuZW5kTGluZSArIDEpOworCisgICAg
ICAgIHZhciB1cGRhdGVkID0gdGhpcy5faGlnaGxpZ2h0ZXIudXBkYXRlSGlnaGxpZ2h0KG5ld1Jh
bmdlLnN0YXJ0TGluZSwgbGFzdFZpc2libGVMaW5lKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkKSB7
CisgICAgICAgICAgICAvLyBIaWdobGlnaHRzIGZvciB0aGUgY2h1bmtzIGJlbG93IGFyZSBpbnZh
bGlkLCBzbyBqdXN0IGNvbGxhcHNlIHRoZW0uCisgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhp
cy5fY2h1bmtOdW1iZXJGb3JMaW5lKGxhc3RWaXNpYmxlTGluZSk7IGkgPCB0aGlzLl90ZXh0Q2h1
bmtzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rc1tpXS5l
eHBhbmRlZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdGhp
cy5fcmVwYWludEFsbCgpOworICAgIH0sCisKKyAgICBfdXBkYXRlQ2h1bmtzRm9yUmFuZ2VzOiBm
dW5jdGlvbihvbGRSYW5nZSwgbmV3UmFuZ2UpCisgICAgeworICAgICAgICB2YXIgbGluZXNDb3Vu
dCA9IDA7CisgICAgICAgIHZhciBvbGRDaHVua3NTdGFydEluZGV4ID0gLTE7CisgICAgICAgIHZh
ciBvbGRDaHVua3NFbmRJbmRleCA9IC0xOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRo
aXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBjaHVuayA9IHRo
aXMuX3RleHRDaHVua3NbaV07CisgICAgICAgICAgICBpZiAoY2h1bmsuc3RhcnRMaW5lID4gb2xk
UmFuZ2UuZW5kTGluZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChj
aHVuay5zdGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50ID4gb2xkUmFuZ2Uuc3RhcnRMaW5lKSB7
CisgICAgICAgICAgICAgICAgaWYgKG9sZENodW5rc1N0YXJ0SW5kZXggPT09IC0xKQorICAgICAg
ICAgICAgICAgICAgICBvbGRDaHVua3NTdGFydEluZGV4ID0gaTsKKyAgICAgICAgICAgICAgICBv
bGRDaHVua3NFbmRJbmRleCA9IGk7CisgICAgICAgICAgICAgICAgbGluZXNDb3VudCArPSBjaHVu
ay5saW5lc0NvdW50OworICAgICAgICAgICAgICAgIGNodW5rLmV4cGFuZGVkID0gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YXIgc3RhcnRMaW5lID0gdGhpcy5f
dGV4dENodW5rc1tvbGRDaHVua3NTdGFydEluZGV4XS5zdGFydExpbmU7CisgICAgICAgIHZhciBs
aW5lc0RpZmYgPSBuZXdSYW5nZS5saW5lc0NvdW50IC0gb2xkUmFuZ2UubGluZXNDb3VudDsKKyAg
ICAgICAgbGluZXNDb3VudCArPSBsaW5lc0RpZmY7CisKKyAgICAgICAgaWYgKGxpbmVzRGlmZikg
eworICAgICAgICAgICAgLy8gTGluZXMgc2hpZnRlZCwgY29sbGFwc2UgYW5kIHVwZGF0ZSB0aGUg
Y2h1bmtzIGJlbG93IHdpdGggbmV3IHN0YXJ0TGluZS4KKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSBvbGRDaHVua3NFbmRJbmRleCArIDE7IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fdGV4dENodW5rc1tpXTsKKyAg
ICAgICAgICAgICAgICBjaHVuay5leHBhbmRlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGNo
dW5rLnN0YXJ0TGluZSArPSBsaW5lc0RpZmY7CisgICAgICAgICAgICAgICAgY2h1bmsudXBkYXRl
TGluZU51bWJlcnMoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy5fbGFzdFVw
ZGF0ZWRDaHVuayA9IE1hdGgubWluKHRoaXMuX2xhc3RVcGRhdGVkQ2h1bmssIG9sZENodW5rc0Vu
ZEluZGV4ICsgMSk7CisKKyAgICAgICAgICAgIGlmICghdGhpcy5fdXBkYXRlQ2h1bmtzTGluZU51
bWJlcnNUZXh0Q29udGVudFRpbWVyKQorICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUNodW5r
c0xpbmVOdW1iZXJzVGV4dENvbnRlbnRUaW1lciA9IHNldFRpbWVvdXQodGhpcy5fdXBkYXRlQ2h1
bmtzTGluZU51bWJlcnNUZXh0Q29udGVudC5iaW5kKHRoaXMpLCA1MCk7CisKKyAgICAgICAgICAg
IC8vIFRoZSBsaW5lLXJvdyBhdHRyaWJ1dGVzIG1heSBwb2ludCB0byBpbmNvcnJlY3QgRE9NIG5v
ZGVzLiBUaG9zZSBET00gbm9kZXMgd2VyZSByZW1vdmVkIGluIHRoZSBwcmV2aW91cyBsb29wLgor
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0TGluZTsgaSA8IHRoaXMuX3RleHRNb2RlbC5s
aW5lc0NvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwucmVtb3Zl
QXR0cmlidXRlKGksICJsaW5lLXJvdyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgLy8gTWF5YmUgZXhwYW5kIGludG8gdGhlIG5leHQgY2h1bmssIHNvIHRoYXQgd2Ugc2hv
dWxkIG5vdCBjcmVhdGUgMS1zaXplZCBjaHVua3Mgd2hlbiBhcHBlbmRpbmcgbmV3IGxpbmVzIG9u
ZSBieSBvbmUuCisgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3Nbb2xkQ2h1bmtz
RW5kSW5kZXggKyAxXTsKKyAgICAgICAgaWYgKGNodW5rICYmIGNodW5rLmxpbmVzQ291bnQgPCB0
aGlzLl9kZWZhdWx0Q2h1bmtTaXplICYmIGxpbmVzQ291bnQgPiAob2xkQ2h1bmtzRW5kSW5kZXgg
LSBvbGRDaHVua3NTdGFydEluZGV4ICsgMSkgKiB0aGlzLl9kZWZhdWx0Q2h1bmtTaXplKSB7Cisg
ICAgICAgICAgICArK29sZENodW5rc0VuZEluZGV4OworICAgICAgICAgICAgbGluZXNDb3VudCAr
PSBjaHVuay5saW5lc0NvdW50OworICAgICAgICAgICAgY2h1bmsuZXhwYW5kZWQgPSBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkgPSBvbGRDaHVua3NTdGFydEluZGV4OyBs
aW5lc0NvdW50ID4gMDsgKytpKSB7CisgICAgICAgICAgICB2YXIgY2h1bmtMaW5lc0NvdW50ID0g
TWF0aC5taW4odGhpcy5fZGVmYXVsdENodW5rU2l6ZSwgbGluZXNDb3VudCk7CisgICAgICAgICAg
ICBpZiAoY2h1bmtMaW5lc0NvdW50ID09PSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgdmFyIGNodW5rID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0Q2h1bmsodGhpcywgc3Rh
cnRMaW5lLCBzdGFydExpbmUgKyBjaHVua0xpbmVzQ291bnQpOworICAgICAgICAgICAgdGhpcy5f
bGluZXNDb250YWluZXJFbGVtZW50Lmluc2VydEJlZm9yZShjaHVuay5lbGVtZW50LCB0aGlzLl90
ZXh0Q2h1bmtzW2ldICYmIHRoaXMuX3RleHRDaHVua3NbaV0uZWxlbWVudCk7CisgICAgICAgICAg
ICBpZiAoaSA8PSBvbGRDaHVua3NFbmRJbmRleCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2xp
bmVzQ29udGFpbmVyRWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl90ZXh0Q2h1bmtzW2ldLmVsZW1l
bnQpOworICAgICAgICAgICAgICAgIHRoaXMuX3RleHRDaHVua3NbaV0gPSBjaHVuazsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rcy5zcGxpY2Uo
aSwgMCwgY2h1bmspOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhcnRMaW5lICs9IGNo
dW5rTGluZXNDb3VudDsKKyAgICAgICAgICAgIGxpbmVzQ291bnQgLT0gY2h1bmtMaW5lc0NvdW50
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGkgPD0gb2xkQ2h1bmtzRW5kSW5kZXgpIHsKKyAg
ICAgICAgICAgIHZhciByZW1vdmVkQ2h1bmtzID0gdGhpcy5fdGV4dENodW5rcy5zcGxpY2UoaSwg
b2xkQ2h1bmtzRW5kSW5kZXggLSBpICsgMSk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHJlbW92ZWRDaHVua3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9s
aW5lc0NvbnRhaW5lckVsZW1lbnQucmVtb3ZlQ2hpbGQocmVtb3ZlZENodW5rc1tpXS5lbGVtZW50
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2luZGV4Q2h1bmtz
KCk7CisgICAgfSwKKworICAgIF91cGRhdGVDaHVua3NMaW5lTnVtYmVyc1RleHRDb250ZW50OiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICBkZWxldGUgdGhpcy5fdXBkYXRlQ2h1bmtzTGluZU51
bWJlcnNUZXh0Q29udGVudFRpbWVyOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTUw
OyArK2kpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9sYXN0VXBkYXRlZENodW5rID49IHRoaXMu
X3RleHRDaHVua3MubGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHRoaXMuX3RleHRDaHVua3NbdGhpcy5fbGFzdFVwZGF0ZWRDaHVuaysrXS51cGRhdGVMaW5lTnVt
YmVyc1RleHRDb250ZW50KCk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl91cGRhdGVDaHVu
a3NMaW5lTnVtYmVyc1RleHRDb250ZW50VGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuX3VwZGF0ZUNo
dW5rc0xpbmVOdW1iZXJzVGV4dENvbnRlbnQuYmluZCh0aGlzKSwgNTApOworICAgIH0sCisKICAg
ICBfYnVpbGRDaHVua3M6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHRoaXMuX2xpbmVzQ29u
dGFpbmVyRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwogCisgICAgICAgIC8vIFRoZSBzdG9yZWQg
bGluZVJvd3MgZWxlbWVudHMgKGlmIGFueSkgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQu
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQ7
IGkrKykgeworICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0
cmlidXRlKGksICJsaW5lLXJvdyIpOworICAgICAgICAgICAgaWYgKGxpbmVSb3cpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwucmVtb3ZlQXR0cmlidXRlKGksICJsaW5lLXJvdyIp
OworICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZFJvd3MucHVzaChsaW5lUm93KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIHRoaXMuX3RleHRDaHVua3MgPSBbXTsKICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudDsgaSAr
PSB0aGlzLl9kZWZhdWx0Q2h1bmtTaXplKSB7CiAgICAgICAgICAgICB2YXIgY2h1bmsgPSBuZXcg
V2ViSW5zcGVjdG9yLlRleHRDaHVuayh0aGlzLCBpLCBpICsgdGhpcy5fZGVmYXVsdENodW5rU2l6
ZSk7CiAgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnB1c2goY2h1bmspOwogICAgICAgICAg
ICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKGNodW5rLmVsZW1lbnQp
OwogICAgICAgICB9CisgICAgICAgIHRoaXMuX2xhc3RVcGRhdGVkQ2h1bmsgPSB0aGlzLl90ZXh0
Q2h1bmtzLmxlbmd0aDsKIAogICAgICAgICB0aGlzLl9pbmRleENodW5rcygpOwogICAgICAgICB0
aGlzLl9oaWdobGlnaHRlci5yZXNldCgpOwpAQCAtMjE1LDc3ICszNjYsMTYwIEBAIFdlYkluc3Bl
Y3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAgICBfc2Nyb2xsOiBmdW5jdGlvbigpCiAg
ICAgewogICAgICAgICB2YXIgc2Nyb2xsVG9wID0gdGhpcy5lbGVtZW50LnNjcm9sbFRvcDsKKyAg
ICAgICAgdmFyIHNjcm9sbExlZnQgPSB0aGlzLmVsZW1lbnQuc2Nyb2xsTGVmdDsKICAgICAgICAg
c2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGlmIChzY3JvbGxUb3AgPT09IHRo
aXMuZWxlbWVudC5zY3JvbGxUb3ApCisgICAgICAgICAgICBpZiAoc2Nyb2xsVG9wID09PSB0aGlz
LmVsZW1lbnQuc2Nyb2xsVG9wICYmIHNjcm9sbExlZnQgPT09IHRoaXMuZWxlbWVudC5zY3JvbGxM
ZWZ0KQogICAgICAgICAgICAgICAgIHRoaXMuX3JlcGFpbnRBbGwoKTsKICAgICAgICAgfS5iaW5k
KHRoaXMpLCA1MCk7CiAgICAgfSwKIAotICAgIF9oYW5kbGVLZXlEb3duOiBmdW5jdGlvbigpCisg
ICAgX2hhbmRsZUtleVByZXNzOiBmdW5jdGlvbihlKQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMu
X2VkaXRpbmdMaW5lIHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQu
Y3RybEtleSB8fCBldmVudC5hbHRLZXkpCisgICAgICAgIGlmICghdGhpcy5fZWRpdENhbGxiYWNr
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHZhciBzY3JvbGxWYWx1ZSA9IDA7Ci0g
ICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1
dC5LZXlzLlVwLmNvZGUpCi0gICAgICAgICAgICBzY3JvbGxWYWx1ZSA9IC0xOwotICAgICAgICBl
bHNlIGlmIChldmVudC5rZXlDb2RlID09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lktl
eXMuRG93bi5jb2RlKQotICAgICAgICAgICAgc2Nyb2xsVmFsdWUgPSAxOwotICAgICAgICAKLSAg
ICAgICAgaWYgKHNjcm9sbFZhbHVlKSB7Ci0gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVs
dCgpOwotICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgICAgICB0
aGlzLmVsZW1lbnQuc2Nyb2xsQnlMaW5lcyhzY3JvbGxWYWx1ZSk7CisgICAgICAgIGlmIChlLmRh
dGEgJiYgIWUuYWx0S2V5ICYmICFlLmN0cmxLZXkgJiYgIWUubWV0YUtleSkgeworICAgICAgICAg
ICAgdGhpcy5fcmVwbGFjZVNlbGVjdGlvbldpdGgoZS5kYXRhKTsKKyAgICAgICAgICAgIGUucHJl
dmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAg
IH0KKyAgICB9LAorCisgICAgX2hhbmRsZUtleURvd246IGZ1bmN0aW9uKGUpCisgICAgeworICAg
ICAgICBpZiAoIXRoaXMuX2VkaXRDYWxsYmFjaykKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICB2YXIgc2hvcnRjdXRLZXkgPSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtl
S2V5RnJvbUV2ZW50KGUpOworICAgICAgICB2YXIgaGFuZGxlciA9IHRoaXMuX3Nob3J0Y3V0c1tz
aG9ydGN1dEtleV07CisgICAgICAgIGlmIChoYW5kbGVyKSB7CisgICAgICAgICAgICBoYW5kbGVy
LmNhbGwodGhpcyk7CisgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAg
ICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBzY3JvbGxWYWx1ZSA9IDA7Ci0gICAgICAgIGlmIChldmVudC5rZXlD
b2RlID09PSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLkxlZnQuY29kZSkKLSAg
ICAgICAgICAgIHNjcm9sbFZhbHVlID0gLTQwOwotICAgICAgICBlbHNlIGlmIChldmVudC5rZXlD
b2RlID09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuUmlnaHQuY29kZSkKLSAg
ICAgICAgICAgIHNjcm9sbFZhbHVlID0gNDA7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2Nyb2xs
VmFsdWUpIHsKLSAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAg
ICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zY3Jv
bGxMZWZ0ICs9IHNjcm9sbFZhbHVlOworCisgICAgICAgIHZhciBrZXlzID0gV2ViSW5zcGVjdG9y
LktleWJvYXJkU2hvcnRjdXQuS2V5czsKKyAgICAgICAgc3dpdGNoIChlLmtleUNvZGUpIHsKKyAg
ICAgICAgICAgIGNhc2Uga2V5cy5CYWNrc3BhY2UuY29kZToKKyAgICAgICAgICAgICAgICB0aGlz
Ll9oYW5kbGVCYWNrc3BhY2VLZXkoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2Uga2V5cy5EZWxldGUuY29kZToKKyAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVE
ZWxldGVLZXkoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga2V5
cy5UYWIuY29kZToKKyAgICAgICAgICAgICAgICB0aGlzLl9yZXBsYWNlU2VsZWN0aW9uV2l0aCgi
XHQiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga2V5cy5FbnRl
ci5jb2RlOgorICAgICAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VTZWxlY3Rpb25XaXRoKCJcbiIp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBrZXlzLlVwLmNvZGU6
CisgICAgICAgICAgICBjYXNlIGtleXMuRG93bi5jb2RlOgorICAgICAgICAgICAgY2FzZSBrZXlz
LkxlZnQuY29kZToKKyAgICAgICAgICAgIGNhc2Uga2V5cy5SaWdodC5jb2RlOgorICAgICAgICAg
ICAgY2FzZSBrZXlzLlBhZ2VVcC5jb2RlOgorICAgICAgICAgICAgY2FzZSBrZXlzLlBhZ2VEb3du
LmNvZGU6CisgICAgICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLm1hcmtVbmRvYWJsZVN0YXRl
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAgICAgICBlLnByZXZlbnREZWZhdWx0
KCk7CisgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgfSwKKworICAgIF9yZWdpc3Rl
clNob3J0Y3V0czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGtleXMgPSBXZWJJbnNw
ZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzOworICAgICAgICB2YXIgbW9kaWZpZXJzID0gV2Vi
SW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXJzOworCisgICAgICAgIHRoaXMuX3No
b3J0Y3V0cyA9IHt9OworICAgICAgICB0aGlzLl9zaG9ydGN1dHNbV2ViSW5zcGVjdG9yLktleWJv
YXJkU2hvcnRjdXQubWFrZUtleSgieiIsIG1vZGlmaWVycy5DdHJsT3JNZXRhKV0gPSB0aGlzLl9o
YW5kbGVVbmRvLmJpbmQodGhpcyk7CisgICAgICAgIHRoaXMuX3Nob3J0Y3V0c1tXZWJJbnNwZWN0
b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5KCJ6IiwgbW9kaWZpZXJzLlNoaWZ0IHwgbW9kaWZp
ZXJzLkN0cmxPck1ldGEpXSA9IHRoaXMuX2hhbmRsZVJlZG8uYmluZCh0aGlzKTsKKyAgICAgICAg
dGhpcy5fc2hvcnRjdXRzW1dlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VLZXkoImEi
LCBtb2RpZmllcnMuQ3RybE9yTWV0YSldID0gdGhpcy5fc2VsZWN0QWxsLmJpbmQodGhpcyk7Cisg
ICAgICAgIHRoaXMuX3Nob3J0Y3V0c1tXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtl
S2V5KGtleXMuSG9tZS5jb2RlLCBtb2RpZmllcnMuQ3RybCldID0gdGhpcy5fc2V0Q2FyZXRMb2Nh
dGlvblRvVG9wLmJpbmQodGhpcyk7CisgICAgICAgIHRoaXMuX3Nob3J0Y3V0c1tXZWJJbnNwZWN0
b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5KGtleXMuRW5kLmNvZGUsIG1vZGlmaWVycy5DdHJs
KV0gPSB0aGlzLl9zZXRDYXJldExvY2F0aW9uVG9Cb3R0b20uYmluZCh0aGlzKTsKKyAgICAgICAg
dGhpcy5fc2hvcnRjdXRzW1dlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VLZXkoa2V5
cy5Ib21lLmNvZGUsIG1vZGlmaWVycy5TaGlmdCB8IG1vZGlmaWVycy5DdHJsKV0gPSB0aGlzLl9z
ZXRDYXJldExvY2F0aW9uVG9Ub3AuYmluZCh0aGlzLCB0cnVlKTsKKyAgICAgICAgdGhpcy5fc2hv
cnRjdXRzW1dlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VLZXkoa2V5cy5FbmQuY29k
ZSwgbW9kaWZpZXJzLlNoaWZ0IHwgbW9kaWZpZXJzLkN0cmwpXSA9IHRoaXMuX3NldENhcmV0TG9j
YXRpb25Ub0JvdHRvbS5iaW5kKHRoaXMsIHRydWUpOworCisgICAgICAgIGlmIChXZWJJbnNwZWN0
b3IuaXNNYWMoKSkKKyAgICAgICAgICAgIHRoaXMuX3Nob3J0Y3V0c1tXZWJJbnNwZWN0b3IuS2V5
Ym9hcmRTaG9ydGN1dC5tYWtlS2V5KCJkIiwgbW9kaWZpZXJzLkN0cmwpXSA9IHRoaXMuX2hhbmRs
ZURlbGV0ZUtleS5iaW5kKHRoaXMpOwogICAgIH0sCiAKLSAgICBfaGFuZGxlRG91YmxlQ2xpY2s6
IGZ1bmN0aW9uKGUpCisgICAgX2hhbmRsZVVuZG86IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAg
IGlmICghdGhpcy5fZWRpdENhbGxiYWNrKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IHZhciBjZWxsID0gZS50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhOb2RlTmFtZSgiVEQi
KTsKLSAgICAgICAgaWYgKCFjZWxsKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlz
LmJlZ2luVXBkYXRlcygpOworICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLl90ZXh0TW9kZWwudW5k
bygpOworICAgICAgICBpZiAocmFuZ2UpCisgICAgICAgICAgICB0aGlzLl9zZXRDYXJldExvY2F0
aW9uKHJhbmdlLmVuZExpbmUsIHJhbmdlLmVuZENvbHVtbik7CisgICAgICAgIHRoaXMuZW5kVXBk
YXRlcygpOworICAgIH0sCiAKLSAgICAgICAgdmFyIGxpbmVSb3cgPSBjZWxsLnBhcmVudEVsZW1l
bnQ7Ci0gICAgICAgIGlmIChsaW5lUm93LmZpcnN0Q2hpbGQgPT09IGNlbGwpCi0gICAgICAgICAg
ICByZXR1cm47ICAvLyBEbyBub3QgdHJpZ2dlciBlZGl0aW5nIGZyb20gbGluZSBudW1iZXJzLgor
ICAgIF9oYW5kbGVSZWRvOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX2Vk
aXRDYWxsYmFjaykKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB2YXIgb2xkQ29udGVu
dCA9IGxpbmVSb3cubGFzdENoaWxkLmlubmVySFRNTDsKLSAgICAgICAgdmFyIGNhbmNlbEVkaXRp
bmdDYWxsYmFjayA9IHRoaXMuX2NhbmNlbEVkaXRpbmdMaW5lLmJpbmQodGhpcywgbGluZVJvdy5s
YXN0Q2hpbGQsIG9sZENvbnRlbnQpOwotICAgICAgICB2YXIgY29tbWl0RWRpdGluZ0NhbGxiYWNr
ID0gdGhpcy5fY29tbWl0RWRpdGluZ0xpbmUuYmluZCh0aGlzLCBsaW5lUm93LmxpbmVOdW1iZXIs
IGxpbmVSb3cubGFzdENoaWxkLCBjYW5jZWxFZGl0aW5nQ2FsbGJhY2spOwotICAgICAgICB0aGlz
Ll9lZGl0aW5nTGluZSA9IFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmcobGluZVJvdy5sYXN0Q2hp
bGQsIGNvbW1pdEVkaXRpbmdDYWxsYmFjaywgY2FuY2VsRWRpdGluZ0NhbGxiYWNrLCBudWxsLCB0
cnVlKTsKKyAgICAgICAgdGhpcy5iZWdpblVwZGF0ZXMoKTsKKyAgICAgICAgdmFyIHJhbmdlID0g
dGhpcy5fdGV4dE1vZGVsLnJlZG8oKTsKKyAgICAgICAgaWYgKHJhbmdlKQorICAgICAgICAgICAg
dGhpcy5fc2V0Q2FyZXRMb2NhdGlvbihyYW5nZS5lbmRMaW5lLCByYW5nZS5lbmRDb2x1bW4pOwor
ICAgICAgICB0aGlzLmVuZFVwZGF0ZXMoKTsKICAgICB9LAogCi0gICAgX2NvbW1pdEVkaXRpbmdM
aW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBlbGVtZW50LCBjYW5jZWxFZGl0aW5nQ2FsbGJhY2sp
CisgICAgX3NlbGVjdEFsbDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdGhpcy5fZWRpdENh
bGxiYWNrKGxpbmVOdW1iZXIsIGVsZW1lbnQudGV4dENvbnRlbnQsIGNhbmNlbEVkaXRpbmdDYWxs
YmFjayk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9lZGl0aW5nTGluZTsKKyAgICAgICAgLy8gTm8g
bmVlZCB0byByZXZlYWwgbGFzdCBzZWxlY3Rpb24gbGluZSBpbiBzZWxlY3QgYWxsLgorICAgICAg
ICB2YXIgbGFzdExpbmVOdW0gPSB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCAtIDE7CisgICAg
ICAgIHRoaXMuX3Jlc3RvcmVTZWxlY3Rpb24obmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UoMCwg
MCwgbGFzdExpbmVOdW0sIHRoaXMuX3RleHRNb2RlbC5saW5lTGVuZ3RoKGxhc3RMaW5lTnVtKSkp
OwogICAgIH0sCiAKLSAgICBfY2FuY2VsRWRpdGluZ0xpbmU6IGZ1bmN0aW9uKGVsZW1lbnQsIG9s
ZENvbnRlbnQsIGUpCisgICAgX2hhbmRsZURlbGV0ZUtleTogZnVuY3Rpb24oKQogICAgIHsKLSAg
ICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBvbGRDb250ZW50OwotICAgICAgICBkZWxldGUgdGhp
cy5fZWRpdGluZ0xpbmU7CisgICAgICAgIGlmICghdGhpcy5fZWRpdENhbGxiYWNrKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciByYW5nZSA9IHRoaXMuX2dldFNlbGVjdGlvbigp
OworICAgICAgICBpZiAoIXJhbmdlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKHJhbmdlLmVuZENv
bHVtbiA8IHRoaXMuX3RleHRNb2RlbC5saW5lTGVuZ3RoKHJhbmdlLnN0YXJ0TGluZSkpCisgICAg
ICAgICAgICAgICAgcmFuZ2UuZW5kQ29sdW1uKys7CisgICAgICAgICAgICBlbHNlIGlmIChyYW5n
ZS5lbmRMaW5lIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpIHsKKyAgICAgICAgICAgICAg
ICByYW5nZS5lbmRMaW5lKys7CisgICAgICAgICAgICAgICAgcmFuZ2UuZW5kQ29sdW1uID0gMDsK
KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwubWFya1VuZG9hYmxlU3RhdGUoKTsKKyAg
ICAgICAgdGhpcy5fcmVwbGFjZVNlbGVjdGlvbldpdGgoIiIsIHJhbmdlKTsKICAgICB9LAogCi0g
ICAgX2JlZm9yZUNvcHk6IGZ1bmN0aW9uKGUpCisgICAgX2hhbmRsZUJhY2tzcGFjZUtleTogZnVu
Y3Rpb24oKQogICAgIHsKLSAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICBpZiAo
IXRoaXMuX2VkaXRDYWxsYmFjaykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIg
cmFuZ2UgPSB0aGlzLl9nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgaWYgKCFyYW5nZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAocmFuZ2UuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBpZiAocmFuZ2Uuc3RhcnRDb2x1bW4gPiAwKQorICAgICAgICAgICAgICAgIHJhbmdlLnN0
YXJ0Q29sdW1uLS07CisgICAgICAgICAgICBlbHNlIGlmIChyYW5nZS5zdGFydExpbmUgPiAwKSB7
CisgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnRMaW5lLS07CisgICAgICAgICAgICAgICAgcmFu
Z2Uuc3RhcnRDb2x1bW4gPSB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChyYW5nZS5zdGFydExp
bmUpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5tYXJrVW5kb2FibGVTdGF0ZSgp
OworICAgICAgICB0aGlzLl9yZXBsYWNlU2VsZWN0aW9uV2l0aCgiIiwgcmFuZ2UpOwogICAgIH0s
CiAKICAgICBfY29weTogZnVuY3Rpb24oZSkKQEAgLTI5NiwzMCArNTMwLDY1IEBAIFdlYkluc3Bl
Y3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgp
OwogICAgIH0sCiAKLSAgICBiZWdpblVwZGF0ZXM6IGZ1bmN0aW9uKGVuYWJsZWQpCisKKyAgICBf
cHJldmVudERlZmF1bHRBbmRTdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKGUpCiAgICAgewotICAg
ICAgICB0aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbCsrOworICAgICAgICBlLnByZXZlbnREZWZh
dWx0KCk7CisgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9LAogCi0gICAgZW5kVXBkYXRlczogZnVuY3Rpb24oZW5hYmxlZCkKKyAgICBfY3V0
OiBmdW5jdGlvbihlKQogICAgIHsKLSAgICAgICAgdGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwt
LTsKLSAgICAgICAgaWYgKCF0aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbCkKLSAgICAgICAgICAg
IHRoaXMuX3JlcGFpbnRBbGwoKTsKKyAgICAgICAgaWYgKCF0aGlzLl9lZGl0Q2FsbGJhY2spIHsK
KyAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIHRoaXMuX3RleHRNb2RlbC5tYXJrVW5kb2FibGVTdGF0ZSgpOwor
ICAgICAgICB0aGlzLl9jb3B5KGUpOworICAgICAgICB0aGlzLl9yZXBsYWNlU2VsZWN0aW9uV2l0
aCgiIik7CiAgICAgfSwKIAotICAgIF9jaHVua0Zvck9mZnNldDogZnVuY3Rpb24ob2Zmc2V0KQor
ICAgIF9wYXN0ZTogZnVuY3Rpb24oZSkKICAgICB7Ci0gICAgICAgIHZhciBjdXJyZW50T2Zmc2V0
ID0gMDsKLSAgICAgICAgdmFyIHJvdyA9IHRoaXMuX2xpbmVzQ29udGFpbmVyRWxlbWVudC5maXJz
dENoaWxkOwotICAgICAgICB3aGlsZSAocm93KSB7Ci0gICAgICAgICAgICB2YXIgcm93SGVpZ2h0
ID0gcm93Lm9mZnNldEhlaWdodDsKLSAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gY3VycmVudE9m
ZnNldCAmJiBvZmZzZXQgPCBjdXJyZW50T2Zmc2V0ICsgcm93SGVpZ2h0KQotICAgICAgICAgICAg
ICAgIHJldHVybiByb3cuY2h1bmtOdW1iZXI7Ci0gICAgICAgICAgICByb3cgPSByb3cubmV4dFNp
Ymxpbmc7Ci0gICAgICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IHJvd0hlaWdodDsKKyAgICAgICAg
aWYgKCF0aGlzLl9lZGl0Q2FsbGJhY2spIHsKKyAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQo
KTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gdGhpcy5f
dGV4dENodW5rcy5sZW5ndGggLSAxOworCisgICAgICAgIHZhciB0ZXh0ID0gZS5jbGlwYm9hcmRE
YXRhLmdldERhdGEoIlRleHQiKTsKKyAgICAgICAgaWYgKCF0ZXh0KQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHRoaXMuX3RleHRNb2RlbC5tYXJrVW5kb2FibGVTdGF0ZSgpOworICAg
ICAgICB0aGlzLl9yZXBsYWNlU2VsZWN0aW9uV2l0aCh0ZXh0KTsKKyAgICAgICAgZS5wcmV2ZW50
RGVmYXVsdCgpOworICAgIH0sCisKKyAgICBfcmVwbGFjZVNlbGVjdGlvbldpdGg6IGZ1bmN0aW9u
KG5ld1RleHQsIG92ZXJyaWRlUmFuZ2UpCisgICAgeworICAgICAgICB2YXIgcmFuZ2UgPSBvdmVy
cmlkZVJhbmdlIHx8IHRoaXMuX2dldFNlbGVjdGlvbigpOworICAgICAgICBpZiAoIXJhbmdlKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuYmVnaW5VcGRhdGVzKCk7CisgICAg
ICAgIHZhciBuZXdSYW5nZSA9IHRoaXMuX3RleHRNb2RlbC5zZXRUZXh0KHJhbmdlLCBuZXdUZXh0
KTsKKyAgICAgICAgdGhpcy5lbmRVcGRhdGVzKCk7CisKKyAgICAgICAgdGhpcy5fc2V0Q2FyZXRM
b2NhdGlvbihuZXdSYW5nZS5lbmRMaW5lLCBuZXdSYW5nZS5lbmRDb2x1bW4pOworICAgIH0sCisK
KyAgICBiZWdpblVwZGF0ZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3BhaW50
Q29hbGVzY2luZ0xldmVsKys7CisgICAgfSwKKworICAgIGVuZFVwZGF0ZXM6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsLS07CisgICAgICAgIGlm
ICghdGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwpCisgICAgICAgICAgICB0aGlzLl9yZXBhaW50
QWxsKCk7CiAgICAgfSwKIAogICAgIF9jaHVua051bWJlckZvckxpbmU6IGZ1bmN0aW9uKGxpbmVO
dW1iZXIpCkBAIC0zMzcsMTQgKzYwNiw2IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRDaHVua3NbdGhpcy5fY2h1bmtOdW1i
ZXJGb3JMaW5lKGxpbmVOdW1iZXIpXTsKICAgICB9LAogCi0gICAgX2NodW5rU3RhcnRMaW5lOiBm
dW5jdGlvbihjaHVua051bWJlcikKLSAgICB7Ci0gICAgICAgIHZhciBsaW5lTnVtYmVyID0gMDsK
LSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaHVua051bWJlciAmJiBpIDwgdGhpcy5fdGV4
dENodW5rcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gdGhpcy5fdGV4
dENodW5rc1tpXS5saW5lc0NvdW50OwotICAgICAgICByZXR1cm4gbGluZU51bWJlcjsKLSAgICB9
LAotCiAgICAgX3JlcGFpbnRBbGw6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICh0aGlz
Ll9wYWludENvYWxlc2NpbmdMZXZlbCkKQEAgLTM2NSwyMCArNjI2LDI0IEBAIFdlYkluc3BlY3Rv
ci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMu
X3RleHRDaHVua3NbaV07CiAgICAgICAgICAgICB2YXIgY2h1bmtIZWlnaHQgPSBjaHVuay5oZWln
aHQ7CiAgICAgICAgICAgICBpZiAob2Zmc2V0ICsgY2h1bmtIZWlnaHQgPiB2aXNpYmxlRnJvbSAm
JiBvZmZzZXQgPCB2aXNpYmxlVG8pIHsKLSAgICAgICAgICAgICAgICB0b0V4cGFuZC5wdXNoKGNo
dW5rKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNodW5rLmV4cGFuZGVkKQorICAgICAgICAgICAg
ICAgICAgICB0b0V4cGFuZC5wdXNoKGNodW5rKTsKICAgICAgICAgICAgICAgICBpZiAoZmlyc3RW
aXNpYmxlTGluZSA9PT0gLTEpCiAgICAgICAgICAgICAgICAgICAgIGZpcnN0VmlzaWJsZUxpbmUg
PSBjaHVuay5zdGFydExpbmU7CiAgICAgICAgICAgICAgICAgbGFzdFZpc2libGVMaW5lID0gY2h1
bmsuc3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3VudDsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgdG9Db2xsYXBzZS5wdXNoKGNodW5rKTsKKyAgICAgICAgICAgICAgICBp
ZiAoY2h1bmsuZXhwYW5kZWQpCisgICAgICAgICAgICAgICAgICAgIHRvQ29sbGFwc2UucHVzaChj
aHVuayk7CiAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA+PSB2aXNpYmxlVG8pCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgb2Zmc2V0ICs9
IGNodW5rSGVpZ2h0OwogICAgICAgICB9CiAKLSAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCB0
aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytqKQotICAgICAgICAgICAgdG9Db2xsYXBzZS5wdXNo
KHRoaXMuX3RleHRDaHVua3NbaV0pOworICAgICAgICBmb3IgKHZhciBqID0gaTsgaiA8IHRoaXMu
X3RleHRDaHVua3MubGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0Q2h1
bmtzW2ldLmV4cGFuZGVkKQorICAgICAgICAgICAgICAgIHRvQ29sbGFwc2UucHVzaCh0aGlzLl90
ZXh0Q2h1bmtzW2ldKTsKKyAgICAgICAgfQogCiAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlz
Ll9nZXRTZWxlY3Rpb24oKTsKIApAQCAtNDg4LDcgKzc1Myw3IEBAIFdlYkluc3BlY3Rvci5UZXh0
Vmlld2VyLnByb3RvdHlwZSA9IHsKICAgICBfZ2V0U2VsZWN0aW9uOiBmdW5jdGlvbigpCiAgICAg
ewogICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwotICAgICAg
ICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKQorICAgICAgICBpZiAoIXNlbGVjdGlvbi5yYW5n
ZUNvdW50KQogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIHZhciBzZWxlY3Rpb25S
YW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgICAgICAvLyBTZWxlY3Rpb24gbWF5
IGJlIG91dHNpZGUgb2YgdGhlIHZpZXdlci4KQEAgLTQ5NiwxMCArNzYxLDExIEBAIFdlYkluc3Bl
Y3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwog
ICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLl9zZWxlY3Rpb25Ub1Bvc2l0aW9uKHNlbGVjdGlvblJh
bmdlLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25SYW5nZS5zdGFydE9mZnNldCk7CiAgICAgICAg
IHZhciBlbmQgPSB0aGlzLl9zZWxlY3Rpb25Ub1Bvc2l0aW9uKHNlbGVjdGlvblJhbmdlLmVuZENv
bnRhaW5lciwgc2VsZWN0aW9uUmFuZ2UuZW5kT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIG5ldyBX
ZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHN0YXJ0LmxpbmUsIHN0YXJ0LmNvbHVtbiwgZW5kLmxpbmUs
IGVuZC5jb2x1bW4pOworICAgICAgICB2YXIgdXB3YXJkcyA9ICEoc2VsZWN0aW9uLmFuY2hvck5v
ZGUgPT09IHNlbGVjdGlvblJhbmdlLnN0YXJ0Q29udGFpbmVyICYmIHNlbGVjdGlvbi5hbmNob3JP
ZmZzZXQgPT09IHNlbGVjdGlvblJhbmdlLnN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG5l
dyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHN0YXJ0LmxpbmUsIHN0YXJ0LmNvbHVtbiwgZW5kLmxp
bmUsIGVuZC5jb2x1bW4sIHVwd2FyZHMpOwogICAgIH0sCiAKLSAgICBfcmVzdG9yZVNlbGVjdGlv
bjogZnVuY3Rpb24ocmFuZ2UpCisgICAgX3Jlc3RvcmVTZWxlY3Rpb246IGZ1bmN0aW9uKHJhbmdl
LCBzY3JvbGxJbnRvVmlldykKICAgICB7CiAgICAgICAgIGlmICghcmFuZ2UpCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC01MDgsMTAgKzc3NCwxMCBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICB2YXIgc3RhcnQgPSBzdGFydFJvdy5sYXN0Q2hpbGQu
cmFuZ2VCb3VuZGFyeUZvck9mZnNldChyYW5nZS5zdGFydENvbHVtbik7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgdmFyIG9mZnNldCA9IHJhbmdlLnN0YXJ0Q29sdW1uOwotICAgICAgICAg
ICAgdmFyIGNodW5rTnVtYmVyID0gdGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5lKHJhbmdlLnN0YXJ0
TGluZSk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fY2h1bmtTdGFydExpbmUoY2h1
bmtOdW1iZXIpOyBpIDwgcmFuZ2Uuc3RhcnRMaW5lOyArK2kpCisgICAgICAgICAgICB2YXIgY2h1
bmsgPSB0aGlzLl9jaHVua0ZvckxpbmUocmFuZ2Uuc3RhcnRMaW5lKTsKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSBjaHVuay5zdGFydExpbmU7IGkgPCByYW5nZS5zdGFydExpbmU7ICsraSkKICAg
ICAgICAgICAgICAgICBvZmZzZXQgKz0gdGhpcy5fdGV4dE1vZGVsLmxpbmUoaSkubGVuZ3RoICsg
MTsgLy8gXG4KLSAgICAgICAgICAgIHZhciBsaW5lQ2VsbCA9IHRoaXMuX3RleHRDaHVua3NbY2h1
bmtOdW1iZXJdLmVsZW1lbnQubGFzdENoaWxkOworICAgICAgICAgICAgdmFyIGxpbmVDZWxsID0g
Y2h1bmsuZWxlbWVudC5sYXN0Q2hpbGQ7CiAgICAgICAgICAgICBpZiAobGluZUNlbGwuZmlyc3RD
aGlsZCkKICAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSB7IGNvbnRhaW5lcjogbGluZUNlbGwu
Zmlyc3RDaGlsZCwgb2Zmc2V0OiBvZmZzZXQgfTsKICAgICAgICAgICAgIGVsc2UKQEAgLTUyMywy
MyArNzg5LDY2IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIHZhciBlbmQgPSBlbmRSb3cubGFzdENoaWxkLnJhbmdlQm91bmRhcnlGb3JPZmZzZXQo
cmFuZ2UuZW5kQ29sdW1uKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB2YXIgb2Zmc2V0
ID0gcmFuZ2UuZW5kQ29sdW1uOwotICAgICAgICAgICAgdmFyIGNodW5rTnVtYmVyID0gdGhpcy5f
Y2h1bmtOdW1iZXJGb3JMaW5lKHJhbmdlLmVuZExpbmUpOwotICAgICAgICAgICAgZm9yICh2YXIg
aSA9IHRoaXMuX2NodW5rU3RhcnRMaW5lKGNodW5rTnVtYmVyKTsgaSA8IHJhbmdlLmVuZExpbmU7
ICsraSkKKyAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX2NodW5rRm9yTGluZShyYW5nZS5z
dGFydExpbmUpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IGNodW5rLnN0YXJ0TGluZTsgaSA8
IHJhbmdlLmVuZExpbmU7ICsraSkKICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gdGhpcy5fdGV4
dE1vZGVsLmxpbmUoaSkubGVuZ3RoICsgMTsgLy8gXG4KLSAgICAgICAgICAgIHZhciBsaW5lQ2Vs
bCA9IHRoaXMuX3RleHRDaHVua3NbY2h1bmtOdW1iZXJdLmVsZW1lbnQubGFzdENoaWxkOworICAg
ICAgICAgICAgdmFyIGxpbmVDZWxsID0gY2h1bmsuZWxlbWVudC5sYXN0Q2hpbGQ7CiAgICAgICAg
ICAgICBpZiAobGluZUNlbGwuZmlyc3RDaGlsZCkKICAgICAgICAgICAgICAgICB2YXIgZW5kID0g
eyBjb250YWluZXI6IGxpbmVDZWxsLmZpcnN0Q2hpbGQsIG9mZnNldDogb2Zmc2V0IH07CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IHsgY29udGFpbmVyOiBsaW5l
Q2VsbCwgb2Zmc2V0OiAwIH07CiAgICAgICAgIH0KIAotICAgICAgICB2YXIgc2VsZWN0aW9uUmFu
Z2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAgICAgICBzZWxlY3Rpb25SYW5nZS5zZXRT
dGFydChzdGFydC5jb250YWluZXIsIHN0YXJ0Lm9mZnNldCk7Ci0gICAgICAgIHNlbGVjdGlvblJh
bmdlLnNldEVuZChlbmQuY29udGFpbmVyLCBlbmQub2Zmc2V0KTsKLQogICAgICAgICB2YXIgc2Vs
ZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwotICAgICAgICBzZWxlY3Rpb24ucmVtb3Zl
QWxsUmFuZ2VzKCk7Ci0gICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShzZWxlY3Rpb25SYW5nZSk7
CisgICAgICAgIGlmIChyYW5nZS51cHdhcmRzKQorICAgICAgICAgICAgc2VsZWN0aW9uLnNldEJh
c2VBbmRFeHRlbnQoZW5kLmNvbnRhaW5lciwgZW5kLm9mZnNldCwgc3RhcnQuY29udGFpbmVyLCBz
dGFydC5vZmZzZXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZWxlY3Rpb24uc2V0QmFz
ZUFuZEV4dGVudChzdGFydC5jb250YWluZXIsIHN0YXJ0Lm9mZnNldCwgZW5kLmNvbnRhaW5lciwg
ZW5kLm9mZnNldCk7CisKKyAgICAgICAgaWYgKHNjcm9sbEludG9WaWV3KSB7CisgICAgICAgICAg
ICB2YXIgZm9jdXNOb2RlID0gcmFuZ2UudXB3YXJkcyA/IHN0YXJ0LmNvbnRhaW5lciA6IGVuZC5j
b250YWluZXI7CisgICAgICAgICAgICB3aGlsZSAoZm9jdXNOb2RlKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGZvY3VzTm9kZS5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZvY3VzTm9kZS5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb2N1c05v
ZGUgPSBmb2N1c05vZGUucGFyZW50RWxlbWVudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0sCisKKyAgICBfc2V0Q2FyZXRMb2NhdGlvbjogZnVuY3Rpb24obGluZSwgY29sdW1uLCBz
ZWxlY3RUZXh0KQorICAgIHsKKyAgICAgICAgdmFyIG5ld1JhbmdlID0gbmV3IFdlYkluc3BlY3Rv
ci5UZXh0UmFuZ2UobGluZSwgY29sdW1uLCBsaW5lLCBjb2x1bW4pOworICAgICAgICBpZiAoc2Vs
ZWN0VGV4dCkgeworICAgICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5fZ2V0U2VsZWN0aW9uKCk7
CisgICAgICAgICAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgICAgICAgICB2YXIgYW5jaG9yTGlu
ZSA9IHJhbmdlLnVwd2FyZHMgPyByYW5nZS5lbmRMaW5lIDogcmFuZ2Uuc3RhcnRMaW5lOworICAg
ICAgICAgICAgICAgIHZhciBhbmNob3JDb2x1bW4gPSByYW5nZS51cHdhcmRzID8gcmFuZ2UuZW5k
Q29sdW1uIDogcmFuZ2Uuc3RhcnRDb2x1bW47CisgICAgICAgICAgICAgICAgaWYgKGFuY2hvckxp
bmUgPCBsaW5lIHx8IChhbmNob3JMaW5lID09PSBsaW5lICYmIGFuY2hvckNvbHVtbiA8PSBjb2x1
bW4pKSB7CisgICAgICAgICAgICAgICAgICAgIG5ld1JhbmdlLnN0YXJ0TGluZSA9IGFuY2hvckxp
bmU7CisgICAgICAgICAgICAgICAgICAgIG5ld1JhbmdlLnN0YXJ0Q29sdW1uID0gYW5jaG9yQ29s
dW1uOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG5ld1Jh
bmdlLmVuZExpbmUgPSBhbmNob3JMaW5lOworICAgICAgICAgICAgICAgICAgICBuZXdSYW5nZS5l
bmRDb2x1bW4gPSBhbmNob3JDb2x1bW47CisgICAgICAgICAgICAgICAgICAgIG5ld1JhbmdlLnVw
d2FyZHMgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0aW9uKG5ld1JhbmdlLCB0cnVlIC8qc2Nyb2xs
SW50b1ZpZXcqLyk7CisgICAgfSwKKworICAgIF9zZXRDYXJldExvY2F0aW9uVG9Ub3A6IGZ1bmN0
aW9uKHNlbGVjdFRleHQpCisgICAgeworICAgICAgICB0aGlzLl90ZXh0TW9kZWwubWFya1VuZG9h
YmxlU3RhdGUoKTsKKyAgICAgICAgdGhpcy5fc2V0Q2FyZXRMb2NhdGlvbigwLCAwLCBzZWxlY3RU
ZXh0KTsKKyAgICB9LAorCisgICAgX3NldENhcmV0TG9jYXRpb25Ub0JvdHRvbTogZnVuY3Rpb24o
c2VsZWN0VGV4dCkKKyAgICB7CisgICAgICAgIHRoaXMuX3RleHRNb2RlbC5tYXJrVW5kb2FibGVT
dGF0ZSgpOworICAgICAgICB2YXIgbGFzdExpbmVOdW0gPSB0aGlzLl90ZXh0TW9kZWwubGluZXND
b3VudCAtIDE7CisgICAgICAgIHRoaXMuX3NldENhcmV0TG9jYXRpb24obGFzdExpbmVOdW0sIHRo
aXMuX3RleHRNb2RlbC5saW5lTGVuZ3RoKGxhc3RMaW5lTnVtKSwgc2VsZWN0VGV4dCk7CiAgICAg
fSwKIAogICAgIF9zZWxlY3Rpb25Ub1Bvc2l0aW9uOiBmdW5jdGlvbihjb250YWluZXIsIG9mZnNl
dCkKQEAgLTY0Miw2ICs5NTEsNyBAQCB2YXIgY2FjaGVkU3BhbnMgPSBbXTsKIAogV2ViSW5zcGVj
dG9yLlRleHRDaHVuayA9IGZ1bmN0aW9uKHRleHRWaWV3ZXIsIHN0YXJ0TGluZSwgZW5kTGluZSkK
IHsKKwogICAgIHRoaXMuX3RleHRWaWV3ZXIgPSB0ZXh0Vmlld2VyOwogICAgIHRoaXMuZWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7CiAgICAgdGhpcy5fdGV4dE1vZGVsID0g
dGV4dFZpZXdlci5fdGV4dE1vZGVsOwpAQCAtNjU0LDYgKzk2NCw3IEBAIFdlYkluc3BlY3Rvci5U
ZXh0Q2h1bmsgPSBmdW5jdGlvbih0ZXh0Vmlld2VyLCBzdGFydExpbmUsIGVuZExpbmUpCiAKICAg
ICB0aGlzLl9saW5lTnVtYmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7
CiAgICAgdGhpcy5fbGluZU51bWJlckVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLW51
bWJlciI7CisgICAgdGhpcy5fbGluZU51bWJlckVsZW1lbnQuc2V0QXR0cmlidXRlKCJjb250ZW50
RWRpdGFibGUiLCBmYWxzZSk7CiAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2xp
bmVOdW1iZXJFbGVtZW50KTsKIAogICAgIHRoaXMuX2xpbmVDb250ZW50RWxlbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CkBAIC02NjIsMjUgKzk3MywxNCBAQCBXZWJJbnNwZWN0
b3IuVGV4dENodW5rID0gZnVuY3Rpb24odGV4dFZpZXdlciwgc3RhcnRMaW5lLCBlbmRMaW5lKQog
CiAgICAgdGhpcy5fZXhwYW5kZWQgPSBmYWxzZTsKIAotICAgIHZhciBsaW5lTnVtYmVycyA9IFtd
OwogICAgIHZhciBsaW5lcyA9IFtdOwotICAgIGZvciAodmFyIGkgPSBzdGFydExpbmU7IGkgPCBl
bmRMaW5lOyArK2kpIHsKLSAgICAgICAgbGluZU51bWJlcnMucHVzaChpICsgMSk7Ci0gICAgICAg
IGxpbmVzLnB1c2godGhpcy5fdGV4dE1vZGVsLmxpbmUoaSkpOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGhpcy5saW5lc0NvdW50OyArK2kpIHsKKyAgICAgICAgbGluZXMucHVzaCh0aGlzLl90
ZXh0TW9kZWwubGluZSh0aGlzLnN0YXJ0TGluZSArIGkpKTsKICAgICB9Ci0gICAgaWYgKHRoaXMu
bGluZXNDb3VudCA9PT0gMSkgewotICAgICAgICAvLyBTaW5nbGUgbGluZSBjaHVua3MgYXJlIHR5
cGljYWxseSBjcmVhdGVkIGZvciBkZWNvcmF0aW9ucy4gSG9zdCBsaW5lIG51bWJlciBpbgotICAg
ICAgICAvLyB0aGUgc3ViLWVsZW1lbnQgaW4gb3JkZXIgdG8gYWxsb3cgZmxleGlibGUgYm9yZGVy
IC8gbWFyZ2luIG1hbmFnZW1lbnQuCi0gICAgICAgIHZhciBpbm5lclNwYW4gPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgIGlubmVyU3Bhbi5jbGFzc05hbWUgPSAid2Vi
a2l0LWxpbmUtbnVtYmVyLWlubmVyIjsKLSAgICAgICAgaW5uZXJTcGFuLnRleHRDb250ZW50ID0g
c3RhcnRMaW5lICsgMTsKLSAgICAgICAgdmFyIG91dGVyU3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOwotICAgICAgICBvdXRlclNwYW4uY2xhc3NOYW1lID0gIndlYmtpdC1saW5l
LW51bWJlci1vdXRlciI7Ci0gICAgICAgIG91dGVyU3Bhbi5hcHBlbmRDaGlsZChpbm5lclNwYW4p
OwotICAgICAgICB0aGlzLl9saW5lTnVtYmVyRWxlbWVudC5hcHBlbmRDaGlsZChvdXRlclNwYW4p
OwotICAgIH0gZWxzZQotICAgICAgICB0aGlzLl9saW5lTnVtYmVyRWxlbWVudC50ZXh0Q29udGVu
dCA9IGxpbmVOdW1iZXJzLmpvaW4oIlxuIik7CiAgICAgdGhpcy5fbGluZUNvbnRlbnRFbGVtZW50
LnRleHRDb250ZW50ID0gbGluZXMuam9pbigiXG4iKTsKKworICAgIHRoaXMudXBkYXRlTGluZU51
bWJlcnMoKTsKKyAgICB0aGlzLnVwZGF0ZUxpbmVOdW1iZXJzVGV4dENvbnRlbnQoKTsKIH0KIAog
V2ViSW5zcGVjdG9yLlRleHRDaHVuay5wcm90b3R5cGUgPSB7CkBAIC03MDgsNiArMTAwOCw0MiBA
QCBXZWJJbnNwZWN0b3IuVGV4dENodW5rLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5lbGVt
ZW50LmRlY29yYXRpb25zRWxlbWVudC5yZW1vdmVDaGlsZChkZWNvcmF0aW9uKTsKICAgICB9LAog
CisgICAgdXBkYXRlTGluZU51bWJlcnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMu
ZWxlbWVudC5saW5lTnVtYmVyID0gdGhpcy5zdGFydExpbmU7CisgICAgICAgIGlmICh0aGlzLl9l
eHBhbmRlZExpbmVSb3dzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMu
X2V4cGFuZGVkTGluZVJvd3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgbGlu
ZVJvdyA9IHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbaV07CisgICAgICAgICAgICAgICAgdmFyIGxp
bmVOdW1iZXIgPSB0aGlzLnN0YXJ0TGluZSArIGk7CisgICAgICAgICAgICAgICAgbGluZVJvdy5s
aW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICBsaW5lUm93LmZpcnN0Q2hp
bGQudGV4dENvbnRlbnQgPSBsaW5lTnVtYmVyICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0sCisKKyAgICB1cGRhdGVMaW5lTnVtYmVyc1RleHRDb250ZW50OiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICB2YXIgbGluZU51bWJlcnMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0aGlzLmxpbmVzQ291bnQ7ICsraSkgeworICAgICAgICAgICAgbGluZU51bWJl
cnMucHVzaCh0aGlzLnN0YXJ0TGluZSArIGkgKyAxKTsKKyAgICAgICAgfQorCisgICAgICAgIHRo
aXMuX2xpbmVOdW1iZXJFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CisKKyAgICAgICAgaWYgKHRo
aXMubGluZXNDb3VudCA9PT0gMSkgeworICAgICAgICAgICAgLy8gU2luZ2xlIGxpbmUgY2h1bmtz
IGFyZSB0eXBpY2FsbHkgY3JlYXRlZCBmb3IgZGVjb3JhdGlvbnMuIEhvc3QgbGluZSBudW1iZXIg
aW4KKyAgICAgICAgICAgIC8vIHRoZSBzdWItZWxlbWVudCBpbiBvcmRlciB0byBhbGxvdyBmbGV4
aWJsZSBib3JkZXIgLyBtYXJnaW4gbWFuYWdlbWVudC4KKyAgICAgICAgICAgIHZhciBpbm5lclNw
YW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgICAgICBpbm5lclNw
YW4uY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLW51bWJlci1pbm5lciI7CisgICAgICAgICAgICBp
bm5lclNwYW4udGV4dENvbnRlbnQgPSB0aGlzLnN0YXJ0TGluZSArIDE7CisgICAgICAgICAgICB2
YXIgb3V0ZXJTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAg
ICBvdXRlclNwYW4uY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLW51bWJlci1vdXRlciI7CisgICAg
ICAgICAgICBvdXRlclNwYW4uYXBwZW5kQ2hpbGQoaW5uZXJTcGFuKTsKKyAgICAgICAgICAgIHRo
aXMuX2xpbmVOdW1iZXJFbGVtZW50LmFwcGVuZENoaWxkKG91dGVyU3Bhbik7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgdGhpcy5fbGluZU51bWJlckVsZW1lbnQudGV4dENvbnRlbnQgPSBs
aW5lTnVtYmVycy5qb2luKCJcbiIpOworICAgIH0sCisKICAgICBnZXQgZXhwYW5kZWQoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkOwpAQCAtNzI4LDI3ICsxMDY0LDM2IEBA
IFdlYkluc3BlY3Rvci5UZXh0Q2h1bmsucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKGV4cGFuZGVkKSB7CisgICAgICAgICAgICB0aGlzLl9leHBhbmRlZExpbmVSb3dzID0g
W107CisKICAgICAgICAgICAgIHZhciBwYXJlbnRFbGVtZW50ID0gdGhpcy5lbGVtZW50LnBhcmVu
dEVsZW1lbnQ7CiAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFydExpbmU7IGkgPCB0
aGlzLnN0YXJ0TGluZSArIHRoaXMubGluZXNDb3VudDsgKytpKSB7CiAgICAgICAgICAgICAgICAg
dmFyIGxpbmVSb3cgPSB0aGlzLl9jcmVhdGVSb3coaSk7CiAgICAgICAgICAgICAgICAgdGhpcy5f
dGV4dE1vZGVsLnNldEF0dHJpYnV0ZShpLCAibGluZS1yb3ciLCBsaW5lUm93KTsKICAgICAgICAg
ICAgICAgICBwYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShsaW5lUm93LCB0aGlzLmVsZW1lbnQp
OworICAgICAgICAgICAgICAgIHRoaXMuX2V4cGFuZGVkTGluZVJvd3MucHVzaChsaW5lUm93KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhp
cy5lbGVtZW50KTsKIAogICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5fcGFpbnRMaW5lcyh0
aGlzLnN0YXJ0TGluZSwgdGhpcy5zdGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQpOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgdmFyIGZpcnN0TGluZSA9IHRoaXMuX3RleHRNb2RlbC5n
ZXRBdHRyaWJ1dGUodGhpcy5zdGFydExpbmUsICJsaW5lLXJvdyIpOwotICAgICAgICAgICAgdmFy
IHBhcmVudEVsZW1lbnQgPSBmaXJzdExpbmUucGFyZW50RWxlbWVudDsKICAgICAgICAgICAgIHRo
aXMuX3RleHRWaWV3ZXIuX3JlbGVhc2VMaW5lc0hpZ2hsaWdodCh0aGlzLnN0YXJ0TGluZSwgdGhp
cy5zdGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQpOwogCi0gICAgICAgICAgICBwYXJlbnRFbGVt
ZW50Lmluc2VydEJlZm9yZSh0aGlzLmVsZW1lbnQsIGZpcnN0TGluZSk7CiAgICAgICAgICAgICBm
b3IgKHZhciBpID0gdGhpcy5zdGFydExpbmU7IGkgPCB0aGlzLnN0YXJ0TGluZSArIHRoaXMubGlu
ZXNDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl90ZXh0
TW9kZWwuZ2V0QXR0cmlidXRlKGksICJsaW5lLXJvdyIpOwogICAgICAgICAgICAgICAgIHRoaXMu
X3RleHRNb2RlbC5yZW1vdmVBdHRyaWJ1dGUoaSwgImxpbmUtcm93Iik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZhciBmaXJzdExpbmUgPSB0aGlzLl9leHBhbmRlZExpbmVSb3dzWzBd
OworICAgICAgICAgICAgdmFyIHBhcmVudEVsZW1lbnQgPSBmaXJzdExpbmUucGFyZW50RWxlbWVu
dDsKKworICAgICAgICAgICAgcGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50
LCBmaXJzdExpbmUpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9leHBh
bmRlZExpbmVSb3dzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIGxpbmVSb3cg
PSB0aGlzLl9leHBhbmRlZExpbmVSb3dzW2ldOwogICAgICAgICAgICAgICAgIHRoaXMuX3RleHRW
aWV3ZXIuX2NhY2hlZFJvd3MucHVzaChsaW5lUm93KTsKICAgICAgICAgICAgICAgICBwYXJlbnRF
bGVtZW50LnJlbW92ZUNoaWxkKGxpbmVSb3cpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBkZWxldGUgdGhpcy5fZXhwYW5kZWRMaW5lUm93czsKICAgICAgICAgfQogICAgIH0sCiAKQEAg
LTc3NywxMSArMTEyMiwxMiBAQCBXZWJJbnNwZWN0b3IuVGV4dENodW5rLnByb3RvdHlwZSA9IHsK
IAogICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgidGQiKTsKICAgICAgICAgICAgIGxpbmVOdW1iZXJFbGVtZW50LmNsYXNzTmFtZSA9ICJ3
ZWJraXQtbGluZS1udW1iZXIiOworICAgICAgICAgICAgbGluZU51bWJlckVsZW1lbnQuc2V0QXR0
cmlidXRlKCJjb250ZW50RWRpdGFibGUiLCBmYWxzZSk7CiAgICAgICAgICAgICBsaW5lUm93LmFw
cGVuZENoaWxkKGxpbmVOdW1iZXJFbGVtZW50KTsKIAogICAgICAgICAgICAgdmFyIGxpbmVDb250
ZW50RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CiAgICAgICAgICAgICBs
aW5lQ29udGVudEVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLWNvbnRlbnQiOwotICAg
ICAgICAgICAgbGluZVJvdy5hcHBlbmRDaGlsZChsaW5lQ29udGVudEVsZW1lbnQpOyAgICAgICAg
CisgICAgICAgICAgICBsaW5lUm93LmFwcGVuZENoaWxkKGxpbmVDb250ZW50RWxlbWVudCk7CiAg
ICAgICAgIH0KICAgICAgICAgbGluZVJvdy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKICAgICAg
ICAgbGluZU51bWJlckVsZW1lbnQudGV4dENvbnRlbnQgPSBsaW5lTnVtYmVyICsgMTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76029</attachid>
            <date>2010-12-09 02:19:56 -0800</date>
            <delta_ts>2010-12-09 04:34:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50553-20101209131953.patch</filename>
            <type>text/plain</type>
            <size>11306</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NjlhMTA2MmE0MWViMDE5YzE1OWZiNDFhZGUwODU5YjIyYzhmMWY4Yi4uNDk5OWVmYTc4NmZmMTI2
MjM4ODRhNWZlZDA2MzNjYjAwZmI4ODcyNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAxMC0xMi0wOSAgQW5k
cmV5IEFkYWlraW4gIDxhYW5kcmV5QGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbWFrZSBzY3JpcHQgdmll
dyBlZGl0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTA1NTMKKworICAgICAgICBQcmVwYXJlIHRoZSBncm91bmQgZm9yIGJ1aWxkaW5nIHRleHQg
ZWRpdG9yIG9uIHRvcCBvZiB0ZXh0IHZpZXdlcjogaW50cm9kdWNlZCBhIHByZWZlcmVuY2UgZmxh
ZywgYWRkZWQgZXZlbnQgbGlzdGVuZXJzLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9TZXR0aW5ncy5qczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIu
anM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlcik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuc2V0IGVkaXRDYWxsYmFjayk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuX2J1aWxkQ2h1bmtzKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5fbWFrZUxpbmVBQ2h1bmspOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl9oYW5kbGVLZXlEb3duKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5faGFuZGxlRG91Ymxl
Q2xpY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl9oYW5k
bGVET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRW
aWV3ZXIucHJvdG90eXBlLl9oYW5kbGVET01Ob2RlSW5zZXJ0ZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl9oYW5kbGVET01Ob2RlUmVtb3ZlZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuYmVnaW5VcGRhdGVzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5lbmRVcGRhdGVzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5fYmVnaW5Eb21VcGRhdGVz
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5fZW5kRG9tVXBk
YXRlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuX3BhaW50
TGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuX2FwcGVu
ZFNwYW4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl9hcHBl
bmRUZXh0Tm9kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUu
X2NyZWF0ZUxpbmspOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRDaHVuay5wcm90b3R5cGUu
YWRkRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dENodW5rLnByb3RvdHlw
ZS5yZW1vdmVEZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q2h1bmsucHJv
dG90eXBlLnNldCBleHBhbmRlZCk6CisKIDIwMTAtMTItMDggIFl1cnkgU2VtaWtoYXRza3kgIDx5
dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcwppbmRleCAxNjNiMTg0M2YyNDZk
NDI4ZDNlNTU2NmIwNDczZjU5NmQ0YjQzOWUyLi4zMzZmMGZiODE0YjQyNDVhN2M0NDMxYTUwOTk3
MmVkYzg2OWQzNDBiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0
dGluZ3MuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzCkBA
IC0zMSw2ICszMSw3IEBACiAKIHZhciBQcmVmZXJlbmNlcyA9IHsKICAgICBjYW5FZGl0U2NyaXB0
U291cmNlOiBmYWxzZSwKKyAgICBzb3VyY2VFZGl0b3JFbmFibGVkOiBmYWxzZSwKICAgICBtYXhJ
bmxpbmVUZXh0Q2hpbGRMZW5ndGg6IDgwLAogICAgIG1pbkNvbnNvbGVIZWlnaHQ6IDc1LAogICAg
IG1pblNpZGViYXJXaWR0aDogMTAwLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1RleHRWaWV3ZXIuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZp
ZXdlci5qcwppbmRleCA5YWQ1ZTQ5NDgzMzU4MzQ1Y2UxMTFhMDFiNmE4NjE5ZjJiODgwYmQ1Li4x
Y2I4ZjU0NDk1NmQzMDcwNzYyZTlmOTUwMmYyOTRhMTNlZTYyYmRiIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcworKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcwpAQCAtMzEsNiArMzEsOCBAQAogCiBXZWJJbnNw
ZWN0b3IuVGV4dFZpZXdlciA9IGZ1bmN0aW9uKHRleHRNb2RlbCwgcGxhdGZvcm0sIHVybCkKIHsK
KyAgICB0aGlzLl9jb250ZW50RWRpdGFibGVFbmFibGVkID0gUHJlZmVyZW5jZXMuc291cmNlRWRp
dG9yRW5hYmxlZDsKKwogICAgIHRoaXMuX3RleHRNb2RlbCA9IHRleHRNb2RlbDsKICAgICB0aGlz
Ll90ZXh0TW9kZWwuY2hhbmdlTGlzdGVuZXIgPSB0aGlzLl9idWlsZENodW5rcy5iaW5kKHRoaXMp
OwogICAgIHRoaXMuX2hpZ2hsaWdodGVyID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9ySGln
aGxpZ2h0ZXIodGhpcy5fdGV4dE1vZGVsLCB0aGlzLl9oaWdobGlnaHREYXRhUmVhZHkuYmluZCh0
aGlzKSk7CkBAIC01Myw4ICs1NSwxMyBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlciA9IGZ1bmN0
aW9uKHRleHRNb2RlbCwgcGxhdGZvcm0sIHVybCkKICAgICB0aGlzLl9saW5lc0NvbnRhaW5lckVs
ZW1lbnQuc2V0QXR0cmlidXRlKCJjZWxscGFkZGluZyIsIDApOwogICAgIHRoaXMuZWxlbWVudC5h
cHBlbmRDaGlsZCh0aGlzLl9saW5lc0NvbnRhaW5lckVsZW1lbnQpOwogCisgICAgdGhpcy5fbGlu
ZXNDb250YWluZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNoYXJhY3RlckRhdGFNb2Rp
ZmllZCIsIHRoaXMuX2hhbmRsZURPTUNoYXJhY3RlckRhdGFNb2RpZmllZC5iaW5kKHRoaXMpLCBm
YWxzZSk7CisgICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo
IkRPTU5vZGVJbnNlcnRlZCIsIHRoaXMuX2hhbmRsZURPTU5vZGVJbnNlcnRlZC5iaW5kKHRoaXMp
LCBmYWxzZSk7CisgICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoIkRPTU5vZGVSZW1vdmVkIiwgdGhpcy5faGFuZGxlRE9NTm9kZVJlbW92ZWQuYmluZCh0aGlz
KSwgZmFsc2UpOworCiAgICAgdGhpcy5fZGVmYXVsdENodW5rU2l6ZSA9IDUwOwogICAgIHRoaXMu
X3BhaW50Q29hbGVzY2luZ0xldmVsID0gMDsKKyAgICB0aGlzLl9tb2RpZnlpbmdEb21MZXZlbCA9
IDA7CiAKICAgICB0aGlzLmZyZWVDYWNoZWRFbGVtZW50cygpOwogICAgIHRoaXMuX2J1aWxkQ2h1
bmtzKCk7CkBAIC04Myw2ICs5MCw4IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlw
ZSA9IHsKICAgICBzZXQgZWRpdENhbGxiYWNrKGVkaXRDYWxsYmFjaykKICAgICB7CiAgICAgICAg
IHRoaXMuX2VkaXRDYWxsYmFjayA9IGVkaXRDYWxsYmFjazsKKyAgICAgICAgaWYgKHRoaXMuX2Nv
bnRlbnRFZGl0YWJsZUVuYWJsZWQpCisgICAgICAgICAgICB0aGlzLl9saW5lc0NvbnRhaW5lckVs
ZW1lbnQuc2V0QXR0cmlidXRlKCJjb250ZW50RWRpdGFibGUiLCAhIXRoaXMuX2VkaXRDYWxsYmFj
ayk7CiAgICAgfSwKIAogICAgIGFkZERlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGRl
Y29yYXRpb24pCkBAIC0xNDIsNiArMTUxLDggQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJv
dG90eXBlID0gewogCiAgICAgX2J1aWxkQ2h1bmtzOiBmdW5jdGlvbigpCiAgICAgeworICAgICAg
ICB0aGlzLl9iZWdpbkRvbVVwZGF0ZXMoKTsKKwogICAgICAgICB0aGlzLl9saW5lc0NvbnRhaW5l
ckVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKIAogICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzID0g
W107CkBAIC0xNTQsNiArMTY1LDggQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBl
ID0gewogICAgICAgICB0aGlzLl9pbmRleENodW5rcygpOwogICAgICAgICB0aGlzLl9oaWdobGln
aHRlci5yZXNldCgpOwogICAgICAgICB0aGlzLl9yZXBhaW50QWxsKCk7CisKKyAgICAgICAgdGhp
cy5fZW5kRG9tVXBkYXRlcygpOwogICAgIH0sCiAKICAgICBfbWFrZUxpbmVBQ2h1bms6IGZ1bmN0
aW9uKGxpbmVOdW1iZXIpCkBAIC0xNjYsNiArMTc5LDggQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3
ZXIucHJvdG90eXBlID0gewogICAgICAgICBpZiAob2xkQ2h1bmsubGluZXNDb3VudCA9PT0gMSkK
ICAgICAgICAgICAgIHJldHVybiBvbGRDaHVuazsKIAorICAgICAgICB0aGlzLl9iZWdpbkRvbVVw
ZGF0ZXMoKTsKKwogICAgICAgICB2YXIgd2FzRXhwYW5kZWQgPSBvbGRDaHVuay5leHBhbmRlZDsK
ICAgICAgICAgb2xkQ2h1bmsuZXhwYW5kZWQgPSBmYWxzZTsKIApAQCAtMjAzLDYgKzIxOCw4IEBA
IFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBz
dWZmaXhDaHVuay5leHBhbmRlZCA9IHRydWU7CiAgICAgICAgIH0KIAorICAgICAgICB0aGlzLl9l
bmREb21VcGRhdGVzKCk7CisKICAgICAgICAgcmV0dXJuIGxpbmVDaHVuazsKICAgICB9LAogCkBA
IC0yMjMsNyArMjQwLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewog
CiAgICAgX2hhbmRsZUtleURvd246IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9lZGl0aW5nTGluZSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50
LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5KQorICAgICAgICBpZiAodGhpcy5fZWRpdGluZ0xpbmUg
fHwgdGhpcy5fY29udGVudEVkaXRhYmxlRW5hYmxlZCB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50
LnNoaWZ0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5KQogICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgIHZhciBzY3JvbGxWYWx1ZSA9IDA7CkBAIC0yNTQsNyArMjcxLDcg
QEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewogCiAgICAgX2hhbmRsZURv
dWJsZUNsaWNrOiBmdW5jdGlvbihlKQogICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9lZGl0Q2Fs
bGJhY2spCisgICAgICAgIGlmICghdGhpcy5fZWRpdENhbGxiYWNrIHx8IHRoaXMuX2NvbnRlbnRF
ZGl0YWJsZUVuYWJsZWQpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdmFyIGNlbGwg
PSBlLnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1lKCJURCIpOwpAQCAtMjk2
LDE4ICszMTMsNDkgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewogICAg
ICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgfSwKIAotICAgIGJlZ2luVXBkYXRlczogZnVu
Y3Rpb24oZW5hYmxlZCkKKyAgICBfaGFuZGxlRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkOiBmdW5j
dGlvbihlKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX21vZGlmeWluZ0RvbUxldmVsIHx8ICF0
aGlzLl9jb250ZW50RWRpdGFibGVFbmFibGVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgfSwKKworICAgIF9oYW5kbGVET01Ob2Rl
SW5zZXJ0ZWQ6IGZ1bmN0aW9uKGUpCisgICAgeworICAgICAgICBpZiAodGhpcy5fbW9kaWZ5aW5n
RG9tTGV2ZWwgfHwgIXRoaXMuX2NvbnRlbnRFZGl0YWJsZUVuYWJsZWQpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICB9LAorCisgICAg
X2hhbmRsZURPTU5vZGVSZW1vdmVkOiBmdW5jdGlvbihlKQorICAgIHsKKyAgICAgICAgaWYgKHRo
aXMuX21vZGlmeWluZ0RvbUxldmVsIHx8ICF0aGlzLl9jb250ZW50RWRpdGFibGVFbmFibGVkKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisg
ICAgfSwKKworICAgIGJlZ2luVXBkYXRlczogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhp
cy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwrKzsKICAgICB9LAogCi0gICAgZW5kVXBkYXRlczogZnVu
Y3Rpb24oZW5hYmxlZCkKKyAgICBlbmRVcGRhdGVzOiBmdW5jdGlvbigpCiAgICAgewogICAgICAg
ICB0aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbC0tOwogICAgICAgICBpZiAoIXRoaXMuX3BhaW50
Q29hbGVzY2luZ0xldmVsKQogICAgICAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOwogICAgIH0s
CiAKKyAgICBfYmVnaW5Eb21VcGRhdGVzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlz
Ll9tb2RpZnlpbmdEb21MZXZlbCsrOworICAgIH0sCisKKyAgICBfZW5kRG9tVXBkYXRlczogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fbW9kaWZ5aW5nRG9tTGV2ZWwtLTsKKyAgICB9
LAorCiAgICAgX2NodW5rRm9yT2Zmc2V0OiBmdW5jdGlvbihvZmZzZXQpCiAgICAgewogICAgICAg
ICB2YXIgY3VycmVudE9mZnNldCA9IDA7CkBAIC00MjIsMTEgKzQ3MCwxNCBAQCBXZWJJbnNwZWN0
b3IuVGV4dFZpZXdlci5wcm90b3R5cGUgPSB7CiAKICAgICBfcGFpbnRMaW5lOiBmdW5jdGlvbihs
aW5lUm93LCBsaW5lTnVtYmVyKQogICAgIHsKKyAgICAgICAgdGhpcy5fYmVnaW5Eb21VcGRhdGVz
KCk7CisKICAgICAgICAgdmFyIGVsZW1lbnQgPSBsaW5lUm93Lmxhc3RDaGlsZDsKICAgICAgICAg
dmFyIGhpZ2hsaWdodCA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwg
ImhpZ2hsaWdodCIpOwogICAgICAgICBpZiAoIWhpZ2hsaWdodCkgewogICAgICAgICAgICAgaWYg
KHRoaXMuX3JhbmdlVG9NYXJrICYmIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0TGluZSA9PT0gbGlu
ZU51bWJlcikKICAgICAgICAgICAgICAgICB0aGlzLl9tYXJrZWRSYW5nZUVsZW1lbnQgPSBoaWdo
bGlnaHRTZWFyY2hSZXN1bHQoZWxlbWVudCwgdGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRDb2x1bW4s
IHRoaXMuX3JhbmdlVG9NYXJrLmVuZENvbHVtbiAtIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0Q29s
dW1uKTsKKyAgICAgICAgICAgIHRoaXMuX2VuZERvbVVwZGF0ZXMoKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCkBAIC00NjEsNiArNTEyLDggQEAgV2ViSW5zcGVjdG9yLlRleHRW
aWV3ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50
ID0gaGlnaGxpZ2h0U2VhcmNoUmVzdWx0KGVsZW1lbnQsIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0
Q29sdW1uLCB0aGlzLl9yYW5nZVRvTWFyay5lbmRDb2x1bW4gLSB0aGlzLl9yYW5nZVRvTWFyay5z
dGFydENvbHVtbik7CiAgICAgICAgIGlmIChsaW5lUm93LmRlY29yYXRpb25zRWxlbWVudCkKICAg
ICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQobGluZVJvdy5kZWNvcmF0aW9uc0VsZW1lbnQp
OworCisgICAgICAgIHRoaXMuX2VuZERvbVVwZGF0ZXMoKTsKICAgICB9LAogCiAgICAgX3JlbGVh
c2VMaW5lc0hpZ2hsaWdodDogZnVuY3Rpb24oZnJvbUxpbmUsIHRvTGluZSkKQEAgLTU3OSw4ICs2
MzIsMTEgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewogCiAgICAgX2Fw
cGVuZFNwYW46IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQsIGNsYXNzTmFtZSkKICAgICB7Cisg
ICAgICAgIHRoaXMuX2JlZ2luRG9tVXBkYXRlcygpOworCiAgICAgICAgIGlmIChjbGFzc05hbWUg
PT09ICJodG1sLXJlc291cmNlLWxpbmsiIHx8IGNsYXNzTmFtZSA9PT0gImh0bWwtZXh0ZXJuYWwt
bGluayIpIHsKICAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlTGlu
ayhjb250ZW50LCBjbGFzc05hbWUgPT09ICJodG1sLWV4dGVybmFsLWxpbmsiKSk7CisgICAgICAg
ICAgICB0aGlzLl9lbmREb21VcGRhdGVzKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIApAQCAtNTkxLDIzICs2NDcsMzEgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlID0gewogICAgICAgICBpZiAoISgic3BhbnMiIGluIGVsZW1lbnQpKQogICAgICAgICAgICAg
ZWxlbWVudC5zcGFucyA9IFtdOwogICAgICAgICBlbGVtZW50LnNwYW5zLnB1c2goc3Bhbik7CisK
KyAgICAgICAgdGhpcy5fZW5kRG9tVXBkYXRlcygpOwogICAgIH0sCiAKICAgICBfYXBwZW5kVGV4
dE5vZGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHRleHQpCiAgICAgeworICAgICAgICB0aGlzLl9iZWdp
bkRvbVVwZGF0ZXMoKTsKKwogICAgICAgICB2YXIgdGV4dE5vZGUgPSB0aGlzLl9jYWNoZWRUZXh0
Tm9kZXMucG9wKCk7Ci0gICAgICAgIGlmICh0ZXh0Tm9kZSkgeworICAgICAgICBpZiAodGV4dE5v
ZGUpCiAgICAgICAgICAgICB0ZXh0Tm9kZS5ub2RlVmFsdWUgPSB0ZXh0OwotICAgICAgICB9IGVs
c2UKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSh0ZXh0KTsKICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7CiAg
ICAgICAgIGlmICghKCJ0ZXh0Tm9kZXMiIGluIGVsZW1lbnQpKQogICAgICAgICAgICAgZWxlbWVu
dC50ZXh0Tm9kZXMgPSBbXTsKICAgICAgICAgZWxlbWVudC50ZXh0Tm9kZXMucHVzaCh0ZXh0Tm9k
ZSk7CisKKyAgICAgICAgdGhpcy5fZW5kRG9tVXBkYXRlcygpOwogICAgIH0sCiAKICAgICBfY3Jl
YXRlTGluazogZnVuY3Rpb24oY29udGVudCwgaXNFeHRlcm5hbCkKICAgICB7CisgICAgICAgIHRo
aXMuX2JlZ2luRG9tVXBkYXRlcygpOworCiAgICAgICAgIHZhciBxdW90ZSA9IGNvbnRlbnQuY2hh
ckF0KDApOwogICAgICAgICBpZiAoY29udGVudC5sZW5ndGggPiAxICYmIChxdW90ZSA9PT0gIlwi
IiB8fCAgIHF1b3RlID09PSAiJyIpKQogICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vi
c3RyaW5nKDEsIGNvbnRlbnQubGVuZ3RoIC0gMSk7CkBAIC02MjIsNiArNjg2LDggQEAgV2ViSW5z
cGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewogICAgICAgICBzcGFuLmFwcGVuZENoaWxk
KGEpOwogICAgICAgICBpZiAocXVvdGUpCiAgICAgICAgICAgICBzcGFuLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKHF1b3RlKSk7CisKKyAgICAgICAgdGhpcy5fZW5kRG9tVXBk
YXRlcygpOwogICAgICAgICByZXR1cm4gc3BhbjsKICAgICB9LAogCkBAIC02OTAsMTEgKzc1Niwx
MyBAQCBXZWJJbnNwZWN0b3IuVGV4dENodW5rLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRo
aXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKGRlY29yYXRpb24pOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CisgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuX2JlZ2luRG9tVXBkYXRlcygp
OwogICAgICAgICBpZiAoIXRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQpIHsKICAgICAg
ICAgICAgIHRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKICAgICAgICAgICAgIHRoaXMuX2xpbmVDb250ZW50RWxlbWVudC5hcHBl
bmRDaGlsZCh0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50KTsKICAgICAgICAgfQogICAg
ICAgICB0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50LmFwcGVuZENoaWxkKGRlY29yYXRp
b24pOworICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLl9lbmREb21VcGRhdGVzKCk7CiAgICAgfSwK
IAogICAgIHJlbW92ZURlY29yYXRpb246IGZ1bmN0aW9uKGRlY29yYXRpb24pCkBAIC03MDUsNyAr
NzczLDkgQEAgV2ViSW5zcGVjdG9yLlRleHRDaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50KQogICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLl9iZWdpbkRvbVVwZGF0ZXMoKTsK
ICAgICAgICAgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudC5yZW1vdmVDaGlsZChkZWNv
cmF0aW9uKTsKKyAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5fZW5kRG9tVXBkYXRlcygpOwogICAg
IH0sCiAKICAgICBnZXQgZXhwYW5kZWQoKQpAQCAtNzE4LDEyICs3ODgsMTUgQEAgV2ViSW5zcGVj
dG9yLlRleHRDaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLl9leHBhbmRlZCA9
PT0gZXhwYW5kZWQpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgdGhpcy5fdGV4dFZp
ZXdlci5fYmVnaW5Eb21VcGRhdGVzKCk7CisKICAgICAgICAgdGhpcy5fZXhwYW5kZWQgPSBleHBh
bmRlZDsKIAogICAgICAgICBpZiAodGhpcy5saW5lc0NvdW50ID09PSAxKSB7CiAgICAgICAgICAg
ICB0aGlzLl90ZXh0TW9kZWwuc2V0QXR0cmlidXRlKHRoaXMuc3RhcnRMaW5lLCAibGluZS1yb3ci
LCB0aGlzLmVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKGV4cGFuZGVkKQogICAgICAgICAgICAg
ICAgIHRoaXMuX3RleHRWaWV3ZXIuX3BhaW50TGluZXModGhpcy5zdGFydExpbmUsIHRoaXMuc3Rh
cnRMaW5lICsgMSk7CisgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLl9lbmREb21VcGRhdGVz
KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtNzUwLDYgKzgyMyw4IEBA
IFdlYkluc3BlY3Rvci5UZXh0Q2h1bmsucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHBh
cmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobGluZVJvdyk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KKworICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLl9lbmREb21VcGRhdGVzKCk7CiAgICAgfSwK
IAogICAgIGdldCBoZWlnaHQoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76046</attachid>
            <date>2010-12-09 04:35:01 -0800</date>
            <delta_ts>2011-01-25 05:40:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50553-20101209153458.patch</filename>
            <type>text/plain</type>
            <size>11306</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NjlhMTA2MmE0MWViMDE5YzE1OWZiNDFhZGUwODU5YjIyYzhmMWY4Yi4uNDk5OWVmYTc4NmZmMTI2
MjM4ODRhNWZlZDA2MzNjYjAwZmI4ODcyNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAxMC0xMi0wOSAgQW5k
cmV5IEFkYWlraW4gIDxhYW5kcmV5QGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbWFrZSBzY3JpcHQgdmll
dyBlZGl0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTA1NTMKKworICAgICAgICBQcmVwYXJlIHRoZSBncm91bmQgZm9yIGJ1aWxkaW5nIHRleHQg
ZWRpdG9yIG9uIHRvcCBvZiB0ZXh0IHZpZXdlcjogaW50cm9kdWNlZCBhIHByZWZlcmVuY2UgZmxh
ZywgYWRkZWQgZXZlbnQgbGlzdGVuZXJzLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9TZXR0aW5ncy5qczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIu
anM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlcik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuc2V0IGVkaXRDYWxsYmFjayk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuX2J1aWxkQ2h1bmtzKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5fbWFrZUxpbmVBQ2h1bmspOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl9oYW5kbGVLZXlEb3duKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5faGFuZGxlRG91Ymxl
Q2xpY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl9oYW5k
bGVET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRW
aWV3ZXIucHJvdG90eXBlLl9oYW5kbGVET01Ob2RlSW5zZXJ0ZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl9oYW5kbGVET01Ob2RlUmVtb3ZlZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuYmVnaW5VcGRhdGVzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5lbmRVcGRhdGVzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5fYmVnaW5Eb21VcGRhdGVz
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5fZW5kRG9tVXBk
YXRlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuX3BhaW50
TGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuX2FwcGVu
ZFNwYW4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl9hcHBl
bmRUZXh0Tm9kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUu
X2NyZWF0ZUxpbmspOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRDaHVuay5wcm90b3R5cGUu
YWRkRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dENodW5rLnByb3RvdHlw
ZS5yZW1vdmVEZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Q2h1bmsucHJv
dG90eXBlLnNldCBleHBhbmRlZCk6CisKIDIwMTAtMTItMDggIFl1cnkgU2VtaWtoYXRza3kgIDx5
dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcwppbmRleCAxNjNiMTg0M2YyNDZk
NDI4ZDNlNTU2NmIwNDczZjU5NmQ0YjQzOWUyLi4zMzZmMGZiODE0YjQyNDVhN2M0NDMxYTUwOTk3
MmVkYzg2OWQzNDBiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0
dGluZ3MuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzCkBA
IC0zMSw2ICszMSw3IEBACiAKIHZhciBQcmVmZXJlbmNlcyA9IHsKICAgICBjYW5FZGl0U2NyaXB0
U291cmNlOiBmYWxzZSwKKyAgICBzb3VyY2VFZGl0b3JFbmFibGVkOiBmYWxzZSwKICAgICBtYXhJ
bmxpbmVUZXh0Q2hpbGRMZW5ndGg6IDgwLAogICAgIG1pbkNvbnNvbGVIZWlnaHQ6IDc1LAogICAg
IG1pblNpZGViYXJXaWR0aDogMTAwLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1RleHRWaWV3ZXIuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZp
ZXdlci5qcwppbmRleCA5YWQ1ZTQ5NDgzMzU4MzQ1Y2UxMTFhMDFiNmE4NjE5ZjJiODgwYmQ1Li45
NjRkOTllNDE1OGM1YWRkYTg2ZDU1MWZiZGNkYmQxNWJkYWYwNjVlIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcworKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcwpAQCAtMzEsNiArMzEsOCBAQAogCiBXZWJJbnNw
ZWN0b3IuVGV4dFZpZXdlciA9IGZ1bmN0aW9uKHRleHRNb2RlbCwgcGxhdGZvcm0sIHVybCkKIHsK
KyAgICB0aGlzLl9jb250ZW50RWRpdGFibGVFbmFibGVkID0gUHJlZmVyZW5jZXMuc291cmNlRWRp
dG9yRW5hYmxlZDsKKwogICAgIHRoaXMuX3RleHRNb2RlbCA9IHRleHRNb2RlbDsKICAgICB0aGlz
Ll90ZXh0TW9kZWwuY2hhbmdlTGlzdGVuZXIgPSB0aGlzLl9idWlsZENodW5rcy5iaW5kKHRoaXMp
OwogICAgIHRoaXMuX2hpZ2hsaWdodGVyID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9ySGln
aGxpZ2h0ZXIodGhpcy5fdGV4dE1vZGVsLCB0aGlzLl9oaWdobGlnaHREYXRhUmVhZHkuYmluZCh0
aGlzKSk7CkBAIC01Myw4ICs1NSwxMyBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlciA9IGZ1bmN0
aW9uKHRleHRNb2RlbCwgcGxhdGZvcm0sIHVybCkKICAgICB0aGlzLl9saW5lc0NvbnRhaW5lckVs
ZW1lbnQuc2V0QXR0cmlidXRlKCJjZWxscGFkZGluZyIsIDApOwogICAgIHRoaXMuZWxlbWVudC5h
cHBlbmRDaGlsZCh0aGlzLl9saW5lc0NvbnRhaW5lckVsZW1lbnQpOwogCisgICAgdGhpcy5fbGlu
ZXNDb250YWluZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNoYXJhY3RlckRhdGFNb2Rp
ZmllZCIsIHRoaXMuX2hhbmRsZURPTUNoYXJhY3RlckRhdGFNb2RpZmllZC5iaW5kKHRoaXMpLCBm
YWxzZSk7CisgICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo
IkRPTU5vZGVJbnNlcnRlZCIsIHRoaXMuX2hhbmRsZURPTU5vZGVJbnNlcnRlZC5iaW5kKHRoaXMp
LCBmYWxzZSk7CisgICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoIkRPTU5vZGVSZW1vdmVkIiwgdGhpcy5faGFuZGxlRE9NTm9kZVJlbW92ZWQuYmluZCh0aGlz
KSwgZmFsc2UpOworCiAgICAgdGhpcy5fZGVmYXVsdENodW5rU2l6ZSA9IDUwOwogICAgIHRoaXMu
X3BhaW50Q29hbGVzY2luZ0xldmVsID0gMDsKKyAgICB0aGlzLl9tb2RpZnlpbmdET01MZXZlbCA9
IDA7CiAKICAgICB0aGlzLmZyZWVDYWNoZWRFbGVtZW50cygpOwogICAgIHRoaXMuX2J1aWxkQ2h1
bmtzKCk7CkBAIC04Myw2ICs5MCw4IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlw
ZSA9IHsKICAgICBzZXQgZWRpdENhbGxiYWNrKGVkaXRDYWxsYmFjaykKICAgICB7CiAgICAgICAg
IHRoaXMuX2VkaXRDYWxsYmFjayA9IGVkaXRDYWxsYmFjazsKKyAgICAgICAgaWYgKHRoaXMuX2Nv
bnRlbnRFZGl0YWJsZUVuYWJsZWQpCisgICAgICAgICAgICB0aGlzLl9saW5lc0NvbnRhaW5lckVs
ZW1lbnQuc2V0QXR0cmlidXRlKCJjb250ZW50RWRpdGFibGUiLCAhIXRoaXMuX2VkaXRDYWxsYmFj
ayk7CiAgICAgfSwKIAogICAgIGFkZERlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGRl
Y29yYXRpb24pCkBAIC0xNDIsNiArMTUxLDggQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJv
dG90eXBlID0gewogCiAgICAgX2J1aWxkQ2h1bmtzOiBmdW5jdGlvbigpCiAgICAgeworICAgICAg
ICB0aGlzLl9iZWdpbkRPTVVwZGF0ZXMoKTsKKwogICAgICAgICB0aGlzLl9saW5lc0NvbnRhaW5l
ckVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKIAogICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzID0g
W107CkBAIC0xNTQsNiArMTY1LDggQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBl
ID0gewogICAgICAgICB0aGlzLl9pbmRleENodW5rcygpOwogICAgICAgICB0aGlzLl9oaWdobGln
aHRlci5yZXNldCgpOwogICAgICAgICB0aGlzLl9yZXBhaW50QWxsKCk7CisKKyAgICAgICAgdGhp
cy5fZW5kRE9NVXBkYXRlcygpOwogICAgIH0sCiAKICAgICBfbWFrZUxpbmVBQ2h1bms6IGZ1bmN0
aW9uKGxpbmVOdW1iZXIpCkBAIC0xNjYsNiArMTc5LDggQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3
ZXIucHJvdG90eXBlID0gewogICAgICAgICBpZiAob2xkQ2h1bmsubGluZXNDb3VudCA9PT0gMSkK
ICAgICAgICAgICAgIHJldHVybiBvbGRDaHVuazsKIAorICAgICAgICB0aGlzLl9iZWdpbkRPTVVw
ZGF0ZXMoKTsKKwogICAgICAgICB2YXIgd2FzRXhwYW5kZWQgPSBvbGRDaHVuay5leHBhbmRlZDsK
ICAgICAgICAgb2xkQ2h1bmsuZXhwYW5kZWQgPSBmYWxzZTsKIApAQCAtMjAzLDYgKzIxOCw4IEBA
IFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBz
dWZmaXhDaHVuay5leHBhbmRlZCA9IHRydWU7CiAgICAgICAgIH0KIAorICAgICAgICB0aGlzLl9l
bmRET01VcGRhdGVzKCk7CisKICAgICAgICAgcmV0dXJuIGxpbmVDaHVuazsKICAgICB9LAogCkBA
IC0yMjMsNyArMjQwLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewog
CiAgICAgX2hhbmRsZUtleURvd246IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9lZGl0aW5nTGluZSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50
LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5KQorICAgICAgICBpZiAodGhpcy5fZWRpdGluZ0xpbmUg
fHwgdGhpcy5fY29udGVudEVkaXRhYmxlRW5hYmxlZCB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50
LnNoaWZ0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5KQogICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgIHZhciBzY3JvbGxWYWx1ZSA9IDA7CkBAIC0yNTQsNyArMjcxLDcg
QEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewogCiAgICAgX2hhbmRsZURv
dWJsZUNsaWNrOiBmdW5jdGlvbihlKQogICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9lZGl0Q2Fs
bGJhY2spCisgICAgICAgIGlmICghdGhpcy5fZWRpdENhbGxiYWNrIHx8IHRoaXMuX2NvbnRlbnRF
ZGl0YWJsZUVuYWJsZWQpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdmFyIGNlbGwg
PSBlLnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1lKCJURCIpOwpAQCAtMjk2
LDE4ICszMTMsNDkgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewogICAg
ICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgfSwKIAotICAgIGJlZ2luVXBkYXRlczogZnVu
Y3Rpb24oZW5hYmxlZCkKKyAgICBfaGFuZGxlRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkOiBmdW5j
dGlvbihlKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX21vZGlmeWluZ0RPTUxldmVsIHx8ICF0
aGlzLl9jb250ZW50RWRpdGFibGVFbmFibGVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgfSwKKworICAgIF9oYW5kbGVET01Ob2Rl
SW5zZXJ0ZWQ6IGZ1bmN0aW9uKGUpCisgICAgeworICAgICAgICBpZiAodGhpcy5fbW9kaWZ5aW5n
RE9NTGV2ZWwgfHwgIXRoaXMuX2NvbnRlbnRFZGl0YWJsZUVuYWJsZWQpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICB9LAorCisgICAg
X2hhbmRsZURPTU5vZGVSZW1vdmVkOiBmdW5jdGlvbihlKQorICAgIHsKKyAgICAgICAgaWYgKHRo
aXMuX21vZGlmeWluZ0RPTUxldmVsIHx8ICF0aGlzLl9jb250ZW50RWRpdGFibGVFbmFibGVkKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisg
ICAgfSwKKworICAgIGJlZ2luVXBkYXRlczogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhp
cy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwrKzsKICAgICB9LAogCi0gICAgZW5kVXBkYXRlczogZnVu
Y3Rpb24oZW5hYmxlZCkKKyAgICBlbmRVcGRhdGVzOiBmdW5jdGlvbigpCiAgICAgewogICAgICAg
ICB0aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbC0tOwogICAgICAgICBpZiAoIXRoaXMuX3BhaW50
Q29hbGVzY2luZ0xldmVsKQogICAgICAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOwogICAgIH0s
CiAKKyAgICBfYmVnaW5ET01VcGRhdGVzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlz
Ll9tb2RpZnlpbmdET01MZXZlbCsrOworICAgIH0sCisKKyAgICBfZW5kRE9NVXBkYXRlczogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fbW9kaWZ5aW5nRE9NTGV2ZWwtLTsKKyAgICB9
LAorCiAgICAgX2NodW5rRm9yT2Zmc2V0OiBmdW5jdGlvbihvZmZzZXQpCiAgICAgewogICAgICAg
ICB2YXIgY3VycmVudE9mZnNldCA9IDA7CkBAIC00MjIsMTEgKzQ3MCwxNCBAQCBXZWJJbnNwZWN0
b3IuVGV4dFZpZXdlci5wcm90b3R5cGUgPSB7CiAKICAgICBfcGFpbnRMaW5lOiBmdW5jdGlvbihs
aW5lUm93LCBsaW5lTnVtYmVyKQogICAgIHsKKyAgICAgICAgdGhpcy5fYmVnaW5ET01VcGRhdGVz
KCk7CisKICAgICAgICAgdmFyIGVsZW1lbnQgPSBsaW5lUm93Lmxhc3RDaGlsZDsKICAgICAgICAg
dmFyIGhpZ2hsaWdodCA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwg
ImhpZ2hsaWdodCIpOwogICAgICAgICBpZiAoIWhpZ2hsaWdodCkgewogICAgICAgICAgICAgaWYg
KHRoaXMuX3JhbmdlVG9NYXJrICYmIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0TGluZSA9PT0gbGlu
ZU51bWJlcikKICAgICAgICAgICAgICAgICB0aGlzLl9tYXJrZWRSYW5nZUVsZW1lbnQgPSBoaWdo
bGlnaHRTZWFyY2hSZXN1bHQoZWxlbWVudCwgdGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRDb2x1bW4s
IHRoaXMuX3JhbmdlVG9NYXJrLmVuZENvbHVtbiAtIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0Q29s
dW1uKTsKKyAgICAgICAgICAgIHRoaXMuX2VuZERPTVVwZGF0ZXMoKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCkBAIC00NjEsNiArNTEyLDggQEAgV2ViSW5zcGVjdG9yLlRleHRW
aWV3ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50
ID0gaGlnaGxpZ2h0U2VhcmNoUmVzdWx0KGVsZW1lbnQsIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0
Q29sdW1uLCB0aGlzLl9yYW5nZVRvTWFyay5lbmRDb2x1bW4gLSB0aGlzLl9yYW5nZVRvTWFyay5z
dGFydENvbHVtbik7CiAgICAgICAgIGlmIChsaW5lUm93LmRlY29yYXRpb25zRWxlbWVudCkKICAg
ICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQobGluZVJvdy5kZWNvcmF0aW9uc0VsZW1lbnQp
OworCisgICAgICAgIHRoaXMuX2VuZERPTVVwZGF0ZXMoKTsKICAgICB9LAogCiAgICAgX3JlbGVh
c2VMaW5lc0hpZ2hsaWdodDogZnVuY3Rpb24oZnJvbUxpbmUsIHRvTGluZSkKQEAgLTU3OSw4ICs2
MzIsMTEgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewogCiAgICAgX2Fw
cGVuZFNwYW46IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQsIGNsYXNzTmFtZSkKICAgICB7Cisg
ICAgICAgIHRoaXMuX2JlZ2luRE9NVXBkYXRlcygpOworCiAgICAgICAgIGlmIChjbGFzc05hbWUg
PT09ICJodG1sLXJlc291cmNlLWxpbmsiIHx8IGNsYXNzTmFtZSA9PT0gImh0bWwtZXh0ZXJuYWwt
bGluayIpIHsKICAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY3JlYXRlTGlu
ayhjb250ZW50LCBjbGFzc05hbWUgPT09ICJodG1sLWV4dGVybmFsLWxpbmsiKSk7CisgICAgICAg
ICAgICB0aGlzLl9lbmRET01VcGRhdGVzKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIApAQCAtNTkxLDIzICs2NDcsMzEgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlID0gewogICAgICAgICBpZiAoISgic3BhbnMiIGluIGVsZW1lbnQpKQogICAgICAgICAgICAg
ZWxlbWVudC5zcGFucyA9IFtdOwogICAgICAgICBlbGVtZW50LnNwYW5zLnB1c2goc3Bhbik7CisK
KyAgICAgICAgdGhpcy5fZW5kRE9NVXBkYXRlcygpOwogICAgIH0sCiAKICAgICBfYXBwZW5kVGV4
dE5vZGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHRleHQpCiAgICAgeworICAgICAgICB0aGlzLl9iZWdp
bkRPTVVwZGF0ZXMoKTsKKwogICAgICAgICB2YXIgdGV4dE5vZGUgPSB0aGlzLl9jYWNoZWRUZXh0
Tm9kZXMucG9wKCk7Ci0gICAgICAgIGlmICh0ZXh0Tm9kZSkgeworICAgICAgICBpZiAodGV4dE5v
ZGUpCiAgICAgICAgICAgICB0ZXh0Tm9kZS5ub2RlVmFsdWUgPSB0ZXh0OwotICAgICAgICB9IGVs
c2UKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSh0ZXh0KTsKICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7CiAg
ICAgICAgIGlmICghKCJ0ZXh0Tm9kZXMiIGluIGVsZW1lbnQpKQogICAgICAgICAgICAgZWxlbWVu
dC50ZXh0Tm9kZXMgPSBbXTsKICAgICAgICAgZWxlbWVudC50ZXh0Tm9kZXMucHVzaCh0ZXh0Tm9k
ZSk7CisKKyAgICAgICAgdGhpcy5fZW5kRE9NVXBkYXRlcygpOwogICAgIH0sCiAKICAgICBfY3Jl
YXRlTGluazogZnVuY3Rpb24oY29udGVudCwgaXNFeHRlcm5hbCkKICAgICB7CisgICAgICAgIHRo
aXMuX2JlZ2luRE9NVXBkYXRlcygpOworCiAgICAgICAgIHZhciBxdW90ZSA9IGNvbnRlbnQuY2hh
ckF0KDApOwogICAgICAgICBpZiAoY29udGVudC5sZW5ndGggPiAxICYmIChxdW90ZSA9PT0gIlwi
IiB8fCAgIHF1b3RlID09PSAiJyIpKQogICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vi
c3RyaW5nKDEsIGNvbnRlbnQubGVuZ3RoIC0gMSk7CkBAIC02MjIsNiArNjg2LDggQEAgV2ViSW5z
cGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewogICAgICAgICBzcGFuLmFwcGVuZENoaWxk
KGEpOwogICAgICAgICBpZiAocXVvdGUpCiAgICAgICAgICAgICBzcGFuLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKHF1b3RlKSk7CisKKyAgICAgICAgdGhpcy5fZW5kRE9NVXBk
YXRlcygpOwogICAgICAgICByZXR1cm4gc3BhbjsKICAgICB9LAogCkBAIC02OTAsMTEgKzc1Niwx
MyBAQCBXZWJJbnNwZWN0b3IuVGV4dENodW5rLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRo
aXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKGRlY29yYXRpb24pOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CisgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuX2JlZ2luRE9NVXBkYXRlcygp
OwogICAgICAgICBpZiAoIXRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQpIHsKICAgICAg
ICAgICAgIHRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKICAgICAgICAgICAgIHRoaXMuX2xpbmVDb250ZW50RWxlbWVudC5hcHBl
bmRDaGlsZCh0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50KTsKICAgICAgICAgfQogICAg
ICAgICB0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50LmFwcGVuZENoaWxkKGRlY29yYXRp
b24pOworICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLl9lbmRET01VcGRhdGVzKCk7CiAgICAgfSwK
IAogICAgIHJlbW92ZURlY29yYXRpb246IGZ1bmN0aW9uKGRlY29yYXRpb24pCkBAIC03MDUsNyAr
NzczLDkgQEAgV2ViSW5zcGVjdG9yLlRleHRDaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50KQogICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLl9iZWdpbkRPTVVwZGF0ZXMoKTsK
ICAgICAgICAgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudC5yZW1vdmVDaGlsZChkZWNv
cmF0aW9uKTsKKyAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5fZW5kRE9NVXBkYXRlcygpOwogICAg
IH0sCiAKICAgICBnZXQgZXhwYW5kZWQoKQpAQCAtNzE4LDEyICs3ODgsMTUgQEAgV2ViSW5zcGVj
dG9yLlRleHRDaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLl9leHBhbmRlZCA9
PT0gZXhwYW5kZWQpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgdGhpcy5fdGV4dFZp
ZXdlci5fYmVnaW5ET01VcGRhdGVzKCk7CisKICAgICAgICAgdGhpcy5fZXhwYW5kZWQgPSBleHBh
bmRlZDsKIAogICAgICAgICBpZiAodGhpcy5saW5lc0NvdW50ID09PSAxKSB7CiAgICAgICAgICAg
ICB0aGlzLl90ZXh0TW9kZWwuc2V0QXR0cmlidXRlKHRoaXMuc3RhcnRMaW5lLCAibGluZS1yb3ci
LCB0aGlzLmVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKGV4cGFuZGVkKQogICAgICAgICAgICAg
ICAgIHRoaXMuX3RleHRWaWV3ZXIuX3BhaW50TGluZXModGhpcy5zdGFydExpbmUsIHRoaXMuc3Rh
cnRMaW5lICsgMSk7CisgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLl9lbmRET01VcGRhdGVz
KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtNzUwLDYgKzgyMyw4IEBA
IFdlYkluc3BlY3Rvci5UZXh0Q2h1bmsucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHBh
cmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobGluZVJvdyk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KKworICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLl9lbmRET01VcGRhdGVzKCk7CiAgICAgfSwK
IAogICAgIGdldCBoZWlnaHQoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80053</attachid>
            <date>2011-01-25 05:40:54 -0800</date>
            <delta_ts>2011-02-25 03:02:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50553-20110125164048.patch</filename>
            <type>text/plain</type>
            <size>43851</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwZjY5MDBhZGVhMmFlMzRhZDFiZmQyZWZmN2ZhY2NkMDI1MTNlMTI5Li41
YjczOTQ3NTRjZTA2NWZhOGU5MTc5YmQxZTNiOTJiMzJmMzAyYWVmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsOTIgQEAKKzIwMTEtMDEtMjUgIEFuZHJleSBBZGFpa2luICA8YWFuZHJleUBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdl
YiBJbnNwZWN0b3I6IG1ha2Ugc2NyaXB0IHZpZXcgZWRpdGFibGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTUzCisKKyAgICAgICAgQWRkZWQgZmly
c3QgaW1wbGVtZW50YXRpb24gb2YgVGV4dEVkaXRvciBiYXNlZCBvbiBUZXh0Vmlld2VyIHdpdGgg
VEFCTEUgcm93cyByZXBsYWNlZCBieSBESVYgcm93cy4gRWRpdGluZyBkb2VzIG5vdCBhZmZlY3Qg
dGhlIHRleHQgbW9kZWwgeWV0LgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0
aW5ncy5qczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fY3JlYXRlVGV4dFZp
ZXdlcik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0RWRpdG9yLmpzOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXQgbWltZVR5cGUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNldCBlZGl0Q2FsbGJhY2spOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmdldCB0ZXh0TW9kZWwpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnJldmVhbExpbmUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmFkZERlY29yYXRpb24pOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnJlbW92ZURlY29yYXRpb24p
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLm1hcmtBbmRSZXZl
YWxSYW5nZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuaGln
aGxpZ2h0TGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUu
Y2xlYXJMaW5lSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnBy
b3RvdHlwZS5mcmVlQ2FjaGVkRWxlbWVudHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3IucHJvdG90eXBlLl91cGRhdGVQYW5lbE9mZnNldHMpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9zeW5jU2Nyb2xsKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5iZWdpblVwZGF0ZXMpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmVuZFVwZGF0ZXMpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnJlc2l6ZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvckd1dHRlclBhbmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yR3V0dGVyUGFuZWwucHJvdG90eXBlLmZyZWVDYWNoZWRFbGVtZW50cyk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlclBhbmVsLnByb3RvdHlwZS5fYnVpbGRDaHVua3Mp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbC5wcm90b3R5cGUu
X3Njcm9sbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlclBhbmVsLnBy
b3RvdHlwZS5fcmVwYWludEFsbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1
dHRlclBhbmVsLnByb3RvdHlwZS5fY2h1bmtOdW1iZXJGb3JMaW5lKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFuZWwucHJvdG90eXBlLl9jaHVua0ZvckxpbmUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbC5wcm90b3R5cGUuX21h
a2VMaW5lQUNodW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFu
ZWwucHJvdG90eXBlLnJlc2l6ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1
dHRlckNodW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsu
cHJvdG90eXBlLmdldCBleHBhbmRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ckd1dHRlckNodW5rLnByb3RvdHlwZS5zZXQgZXhwYW5kZWQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuay5wcm90b3R5cGUuZ2V0IGhlaWdodCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rLnByb3RvdHlwZS5fY3JlYXRlUm93
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5zZXQgbWltZVR5cGUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLmdl
dCB0ZXh0TW9kZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwu
cHJvdG90eXBlLnJldmVhbExpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JN
YWluUGFuZWwucHJvdG90eXBlLnNldCBlZGl0Q2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLmFkZERlY29yYXRpb24pOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLnJlbW92ZURlY29y
YXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90
eXBlLm1hcmtBbmRSZXZlYWxSYW5nZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ck1haW5QYW5lbC5wcm90b3R5cGUuaGlnaGxpZ2h0TGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuY2xlYXJMaW5lSGlnaGxpZ2h0KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5mcmVlQ2Fj
aGVkRWxlbWVudHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwu
cHJvdG90eXBlLl9idWlsZENodW5rcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ck1haW5QYW5lbC5wcm90b3R5cGUuX21ha2VMaW5lQUNodW5rKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fc2Nyb2xsKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5iZWdpblVwZGF0ZXMpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLmVuZFVw
ZGF0ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90
eXBlLl9jaHVua051bWJlckZvckxpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JNYWluUGFuZWwucHJvdG90eXBlLl9jaHVua0ZvckxpbmUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9yZXBhaW50QWxsKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5faGlnaGxpZ2h0RGF0
YVJlYWR5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3Rv
dHlwZS5fcGFpbnRMaW5lcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5Q
YW5lbC5wcm90b3R5cGUuX3BhaW50TGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3JlbGVhc2VMaW5lc0hpZ2hsaWdodCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2dldFNlbGVjdGlv
bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUu
X3Jlc3RvcmVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
UGFuZWwucHJvdG90eXBlLl9zZWxlY3Rpb25Ub1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcG9zaXRpb25Ub1NlbGVjdGlvbik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2Fw
cGVuZFNwYW4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJv
dG90eXBlLl9hcHBlbmRUZXh0Tm9kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ck1haW5QYW5lbC5wcm90b3R5cGUuX2NyZWF0ZUxpbmspOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9yZXdyaXRlSHJlZik6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUucmVzaXplKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5hZGREZWNvcmF0aW9uKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5yZW1vdmVEZWNv
cmF0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3Rv
dHlwZS5nZXQgZXhwYW5kZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
Q2h1bmsucHJvdG90eXBlLnNldCBleHBhbmRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUuZ2V0IGhlaWdodCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUuZ2V0RXhwYW5kZWRMaW5lUm93KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5fY3Jl
YXRlUm93KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRWaWV3ZXIuY3NzOgor
ICAgICAgICAoLndlYmtpdC1oaWdobGlnaHRlZC1saW5lLndlYmtpdC1saW5lLWNvbnRlbnQpOgor
ICAgICAgICAoLmVkaXRvci1saW5lLW51bWJlcnMpOgorICAgICAgICAoLmVkaXRvci1saW5lLWNv
bnRlbnRzKToKKyAgICAgICAgKC5lZGl0b3ItY29udGVudC1lZGl0YWJsZSk6CisKIDIwMTEtMDEt
MjUgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGlyayBTY2h1bHplLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU2V0dGluZ3MuanMKaW5kZXggZTI2YjFkN2MyNTBmNjhmOTNmYjNiMDMyNTkyNmFj
NzI4NWZlOTM5Yy4uMGM0Zjk1MDY1ZWNmZDllZTIzY2Y2MGRkZGYwN2ZlZjU2MDU2ZjgzMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzCkBAIC0z
MSw2ICszMSw3IEBACiAKIHZhciBQcmVmZXJlbmNlcyA9IHsKICAgICBjYW5FZGl0U2NyaXB0U291
cmNlOiBmYWxzZSwKKyAgICBzb3VyY2VFZGl0b3JFbmFibGVkOiBmYWxzZSwKICAgICBtYXhJbmxp
bmVUZXh0Q2hpbGRMZW5ndGg6IDgwLAogICAgIG1pbkNvbnNvbGVIZWlnaHQ6IDc1LAogICAgIG1p
blNpZGViYXJXaWR0aDogMTAwLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlRnJhbWUuanMKaW5kZXggY2UzNTMxZmFhZjI4MGY0N2IyZTU5MzA3Nzg4NWEy
NTc0NTE0NGY5ZC4uNDg2MjIxYTBiOTMyOTgxMTE0YmIxNTJmZjIwYTMwZGFmOWZkNjc4MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5q
cworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpz
CkBAIC0xNzYsNyArMTc2LDExIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5zZXRUZXh0KG51bGwsIGNvbnRlbnQpOwogICAg
ICAgICB0aGlzLl9mb3JtYXR0ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRlcihj
b250ZW50KTsKIAotICAgICAgICB0aGlzLl90ZXh0Vmlld2VyID0gbmV3IFdlYkluc3BlY3Rvci5U
ZXh0Vmlld2VyKHRoaXMuX3RleHRNb2RlbCwgV2ViSW5zcGVjdG9yLnBsYXRmb3JtLCB0aGlzLl91
cmwpOworICAgICAgICBpZiAoUHJlZmVyZW5jZXMuc291cmNlRWRpdG9yRW5hYmxlZCkKKyAgICAg
ICAgICAgIHRoaXMuX3RleHRWaWV3ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IodGhp
cy5fdGV4dE1vZGVsLCBXZWJJbnNwZWN0b3IucGxhdGZvcm0sIHRoaXMuX3VybCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRl
eHRWaWV3ZXIodGhpcy5fdGV4dE1vZGVsLCBXZWJJbnNwZWN0b3IucGxhdGZvcm0sIHRoaXMuX3Vy
bCk7CisKICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLl90ZXh0Vmlld2VyLmVsZW1lbnQ7CiAg
ICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl9jb250
ZXh0TWVudS5iaW5kKHRoaXMpLCB0cnVlKTsKICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3Rl
bmVyKCJtb3VzZWRvd24iLCB0aGlzLl9tb3VzZURvd24uYmluZCh0aGlzKSwgdHJ1ZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRFZGl0b3IuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRFZGl0b3IuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjYzNjgzZmNhMWU5N2M5ZGJhNWZlOTA3Y2I4MTZjMDVmN2QxNmUyMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dEVkaXRvci5q
cwpAQCAtMCwwICsxLDEwMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvciA9IGZ1bmN0aW9uKHRl
eHRNb2RlbCwgcGxhdGZvcm0sIHVybCkKK3sKKyAgICB0aGlzLl90ZXh0TW9kZWwgPSB0ZXh0TW9k
ZWw7CisKKyAgICB0aGlzLl9tYWluUGFuZWwgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JN
YWluUGFuZWwodGhpcy5fdGV4dE1vZGVsLCB1cmwpOworICAgIHRoaXMuX2d1dHRlclBhbmVsID0g
bmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFuZWwodGhpcy5fdGV4dE1vZGVsKTsK
KworICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAg
IHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAidGV4dC1lZGl0b3IgbW9ub3NwYWNlIjsKKyAgICB0
aGlzLmVsZW1lbnQudGFiSW5kZXggPSAwOworICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0
aGlzLl9tYWluUGFuZWwuZWxlbWVudCk7CisgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRo
aXMuX2d1dHRlclBhbmVsLmVsZW1lbnQpOworCisgICAgdGhpcy5fbWFpblBhbmVsLmVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5fc3luY1Njcm9sbC5iaW5kKHRoaXMpLCBm
YWxzZSk7Cit9CisKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKKyAgICBz
ZXQgbWltZVR5cGUobWltZVR5cGUpCisgICAgeworICAgICAgICB0aGlzLl9tYWluUGFuZWwubWlt
ZVR5cGUgPSBtaW1lVHlwZTsKKyAgICB9LAorCisgICAgc2V0IGVkaXRDYWxsYmFjayhlZGl0Q2Fs
bGJhY2spCisgICAgeworICAgICAgICAvLyBGSVhNRTogRGVwcmVjYXRlZCwgcmVtb3ZlIHdoZW4g
bm90IHVzZWQuCisgICAgICAgIHRoaXMuX2VkaXRDYWxsYmFjayA9IGVkaXRDYWxsYmFjazsKKyAg
ICB9LAorCisgICAgZ2V0IHRleHRNb2RlbCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
dGV4dE1vZGVsOworICAgIH0sCisKKyAgICByZXZlYWxMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVy
KQorICAgIHsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLnJldmVhbExpbmUobGluZU51bWJlcik7
CisgICAgfSwKKworICAgIGFkZERlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGRlY29y
YXRpb24pCisgICAgeworICAgICAgICB2YXIgbWFpbkNodW5rID0gdGhpcy5fbWFpblBhbmVsLmFk
ZERlY29yYXRpb24obGluZU51bWJlciwgZGVjb3JhdGlvbik7CisgICAgICAgIC8vIEZJWE1FOiBT
eW5jIGd1dHRlciBjaHVuaydzIGNsYXNzIG5hbWVzIGFuZCBoZWlnaHQuCisgICAgfSwKKworICAg
IHJlbW92ZURlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRpb24pCisgICAg
eworICAgICAgICB2YXIgbWFpbkNodW5rID0gdGhpcy5fbWFpblBhbmVsLnJlbW92ZURlY29yYXRp
b24obGluZU51bWJlciwgZGVjb3JhdGlvbik7CisgICAgICAgIC8vIEZJWE1FOiBTeW5jIGd1dHRl
ciBjaHVuaydzIGNsYXNzIG5hbWVzIGFuZCBoZWlnaHQuCisgICAgfSwKKworICAgIG1hcmtBbmRS
ZXZlYWxSYW5nZTogZnVuY3Rpb24ocmFuZ2UpCisgICAgeworICAgICAgICB0aGlzLl9tYWluUGFu
ZWwubWFya0FuZFJldmVhbFJhbmdlKHJhbmdlKTsKKyAgICB9LAorCisgICAgaGlnaGxpZ2h0TGlu
ZTogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5o
aWdobGlnaHRMaW5lKGxpbmVOdW1iZXIpOworICAgIH0sCisKKyAgICBjbGVhckxpbmVIaWdobGln
aHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5jbGVhckxpbmVI
aWdobGlnaHQoKTsKKyAgICB9LAorCisgICAgZnJlZUNhY2hlZEVsZW1lbnRzOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICB0aGlzLl9tYWluUGFuZWwuZnJlZUNhY2hlZEVsZW1lbnRzKCk7Cisg
ICAgICAgIHRoaXMuX2d1dHRlclBhbmVsLmZyZWVDYWNoZWRFbGVtZW50cygpOworICAgIH0sCisK
KyAgICBfdXBkYXRlUGFuZWxPZmZzZXRzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIg
bGluZU51bWJlcnNXaWR0aCA9IHRoaXMuX2d1dHRlclBhbmVsLmVsZW1lbnQub2Zmc2V0V2lkdGg7
CisgICAgICAgIGlmIChsaW5lTnVtYmVyc1dpZHRoKQorICAgICAgICAgICAgdGhpcy5fbWFpblBh
bmVsLmVsZW1lbnQuc3R5bGUubGVmdCA9IChsaW5lTnVtYmVyc1dpZHRoICsgMikgKyAicHgiOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLl9tYWluUGFuZWwuZWxlbWVudC5zdHlsZS5s
ZWZ0ID0gIiI7IC8vIFVzZSBkZWZhdWx0IHZhbHVlIHNldCBpbiBDU1MuCisgICAgfSwKKworICAg
IF9zeW5jU2Nyb2xsOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9ndXR0ZXJQYW5l
bC5lbGVtZW50LnNjcm9sbFRvcCA9IHRoaXMuX21haW5QYW5lbC5lbGVtZW50LnNjcm9sbFRvcDsK
KyAgICB9LAorCisgICAgYmVnaW5VcGRhdGVzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0
aGlzLl9tYWluUGFuZWwuYmVnaW5VcGRhdGVzKCk7CisgICAgfSwKKworICAgIGVuZFVwZGF0ZXM6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5lbmRVcGRhdGVzKCk7
CisgICAgfSwKKworICAgIHJlc2l6ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5f
bWFpblBhbmVsLnJlc2l6ZSgpOworICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC5yZXNpemUoKTsK
KyAgICAgICAgdGhpcy5fdXBkYXRlUGFuZWxPZmZzZXRzKCk7CisgICAgfQorfQorCisvLz09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvckd1dHRlclBhbmVsCisKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFuZWwg
PSBmdW5jdGlvbih0ZXh0TW9kZWwpCit7CisgICAgdGhpcy5fdGV4dE1vZGVsID0gdGV4dE1vZGVs
OworCisgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cisg
ICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJlZGl0b3ItbGluZS1udW1iZXJzIjsKKworICAg
IHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLl9zY3JvbGwuYmlu
ZCh0aGlzKSwgZmFsc2UpOworCisgICAgdGhpcy5fZGVmYXVsdENodW5rU2l6ZSA9IDUwOworCisg
ICAgdGhpcy5mcmVlQ2FjaGVkRWxlbWVudHMoKTsKKyAgICB0aGlzLl9idWlsZENodW5rcygpOwor
fQorCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlclBhbmVsLnByb3RvdHlwZSA9IHsKKyAg
ICBmcmVlQ2FjaGVkRWxlbWVudHM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2Nh
Y2hlZERpdnMgPSBbXTsKKyAgICAgICAgdGhpcy5fY2FjaGVkUm93cyA9IFtdOworICAgIH0sCisK
KyAgICBfYnVpbGRDaHVua3M6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuZWxlbWVu
dC5yZW1vdmVDaGlsZHJlbigpOworCisgICAgICAgIHRoaXMuX3RleHRDaHVua3MgPSBbXTsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudDsgaSAr
PSB0aGlzLl9kZWZhdWx0Q2h1bmtTaXplKSB7CisgICAgICAgICAgICB2YXIgY2h1bmsgPSBuZXcg
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuayh0aGlzLCBpLCBpICsgdGhpcy5fZGVm
YXVsdENodW5rU2l6ZSk7CisgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnB1c2goY2h1bmsp
OworICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNodW5rLmVsZW1lbnQpOwor
ICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOworICAgIH0sCisKKyAgICBf
c2Nyb2xsOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3JlcGFpbnRBbGxU
aW1lcikKKyAgICAgICAgICAgIHRoaXMuX3JlcGFpbnRBbGxUaW1lciA9IHNldFRpbWVvdXQodGhp
cy5fcmVwYWludEFsbC5iaW5kKHRoaXMpLCA1MCk7CisgICAgfSwKKworICAgIF9yZXBhaW50QWxs
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBkZWxldGUgdGhpcy5fcmVwYWludEFsbFRpbWVy
OworCisgICAgICAgIGlmICghdGhpcy5fdGV4dENodW5rcykKKyAgICAgICAgICAgIHRoaXMuX2J1
aWxkQ2h1bmtzKCk7CisKKyAgICAgICAgdmFyIHZpc2libGVGcm9tID0gdGhpcy5lbGVtZW50LnNj
cm9sbFRvcDsKKyAgICAgICAgdmFyIHZpc2libGVUbyA9IHRoaXMuZWxlbWVudC5zY3JvbGxUb3Ag
KyB0aGlzLmVsZW1lbnQuY2xpZW50SGVpZ2h0OworCisgICAgICAgIHZhciBvZmZzZXQgPSAwOwor
ICAgICAgICB2YXIgZmlyc3RWaXNpYmxlTGluZSA9IC0xOworICAgICAgICB2YXIgbGFzdFZpc2li
bGVMaW5lID0gMDsKKyAgICAgICAgdmFyIHRvRXhwYW5kID0gW107CisgICAgICAgIHZhciB0b0Nv
bGxhcHNlID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dENodW5r
cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fdGV4dENodW5r
c1tpXTsKKyAgICAgICAgICAgIHZhciBjaHVua0hlaWdodCA9IGNodW5rLmhlaWdodDsKKyAgICAg
ICAgICAgIGlmIChvZmZzZXQgKyBjaHVua0hlaWdodCA+IHZpc2libGVGcm9tICYmIG9mZnNldCA8
IHZpc2libGVUbykgeworICAgICAgICAgICAgICAgIGlmICghY2h1bmsuZXhwYW5kZWQpCisgICAg
ICAgICAgICAgICAgICAgIHRvRXhwYW5kLnB1c2goY2h1bmspOworICAgICAgICAgICAgICAgIGlm
IChmaXJzdFZpc2libGVMaW5lID09PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RWaXNp
YmxlTGluZSA9IGNodW5rLnN0YXJ0TGluZTsKKyAgICAgICAgICAgICAgICBsYXN0VmlzaWJsZUxp
bmUgPSBjaHVuay5zdGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50OworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoY2h1bmsuZXhwYW5kZWQpCisgICAgICAgICAgICAg
ICAgICAgIHRvQ29sbGFwc2UucHVzaChjaHVuayk7CisgICAgICAgICAgICAgICAgaWYgKG9mZnNl
dCA+PSB2aXNpYmxlVG8pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgb2Zmc2V0ICs9IGNodW5rSGVpZ2h0OworICAgICAgICB9CisKKyAgICAg
ICAgZm9yICh2YXIgaiA9IGk7IGogPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytqKSB7Cisg
ICAgICAgICAgICBpZiAodGhpcy5fdGV4dENodW5rc1tqXS5leHBhbmRlZCkKKyAgICAgICAgICAg
ICAgICB0b0NvbGxhcHNlLnB1c2godGhpcy5fdGV4dENodW5rc1tqXSk7CisgICAgICAgIH0KKwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvQ29sbGFwc2UubGVuZ3RoOyArK2kpCisgICAg
ICAgICAgICB0b0NvbGxhcHNlW2ldLmV4cGFuZGVkID0gZmFsc2U7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdG9FeHBhbmQubGVuZ3RoOyArK2kpCisgICAgICAgICAgICB0b0V4cGFuZFtp
XS5leHBhbmRlZCA9IHRydWU7CisgICAgfSwKKworICAgIF9jaHVua051bWJlckZvckxpbmU6IGZ1
bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRo
aXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBsaW5lID0gdGhp
cy5fdGV4dENodW5rc1tpXS5zdGFydExpbmU7CisgICAgICAgICAgICBpZiAobGluZU51bWJlciA+
PSBsaW5lICYmIGxpbmVOdW1iZXIgPCBsaW5lICsgdGhpcy5fdGV4dENodW5rc1tpXS5saW5lc0Nv
dW50KQorICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aCAtIDE7CisgICAgfSwKKworICAgIF9jaHVua0Zvckxp
bmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdGV4
dENodW5rc1t0aGlzLl9jaHVua051bWJlckZvckxpbmUobGluZU51bWJlcildOworICAgIH0sCisK
KyAgICBfbWFrZUxpbmVBQ2h1bms6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAg
ICBpZiAoIXRoaXMuX3RleHRDaHVua3MpCisgICAgICAgICAgICB0aGlzLl9idWlsZENodW5rcygp
OworCisgICAgICAgIHZhciBjaHVua051bWJlciA9IHRoaXMuX2NodW5rTnVtYmVyRm9yTGluZShs
aW5lTnVtYmVyKTsKKyAgICAgICAgdmFyIG9sZENodW5rID0gdGhpcy5fdGV4dENodW5rc1tjaHVu
a051bWJlcl07CisgICAgICAgIGlmIChvbGRDaHVuay5saW5lc0NvdW50ID09PSAxKQorICAgICAg
ICAgICAgcmV0dXJuIG9sZENodW5rOworCisgICAgICAgIHZhciB3YXNFeHBhbmRlZCA9IG9sZENo
dW5rLmV4cGFuZGVkOworICAgICAgICBvbGRDaHVuay5leHBhbmRlZCA9IGZhbHNlOworCisgICAg
ICAgIHZhciBpbnNlcnRJbmRleCA9IGNodW5rTnVtYmVyICsgMTsKKworICAgICAgICAvLyBQcmVm
aXggY2h1bmsuCisgICAgICAgIGlmIChsaW5lTnVtYmVyID4gb2xkQ2h1bmsuc3RhcnRMaW5lKSB7
CisgICAgICAgICAgICB2YXIgcHJlZml4Q2h1bmsgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JHdXR0ZXJDaHVuayh0aGlzLCBvbGRDaHVuay5zdGFydExpbmUsIGxpbmVOdW1iZXIpOworICAg
ICAgICAgICAgdGhpcy5fdGV4dENodW5rcy5zcGxpY2UoaW5zZXJ0SW5kZXgrKywgMCwgcHJlZml4
Q2h1bmspOworICAgICAgICAgICAgdGhpcy5lbGVtZW50Lmluc2VydEJlZm9yZShwcmVmaXhDaHVu
ay5lbGVtZW50LCBvbGRDaHVuay5lbGVtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIExp
bmUgY2h1bmsuCisgICAgICAgIHZhciBsaW5lQ2h1bmsgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3JHdXR0ZXJDaHVuayh0aGlzLCBsaW5lTnVtYmVyLCBsaW5lTnVtYmVyICsgMSk7CisgICAg
ICAgIHRoaXMuX3RleHRDaHVua3Muc3BsaWNlKGluc2VydEluZGV4KyssIDAsIGxpbmVDaHVuayk7
CisgICAgICAgIHRoaXMuZWxlbWVudC5pbnNlcnRCZWZvcmUobGluZUNodW5rLmVsZW1lbnQsIG9s
ZENodW5rLmVsZW1lbnQpOworCisgICAgICAgIC8vIFN1ZmZpeCBjaHVuay4KKyAgICAgICAgaWYg
KG9sZENodW5rLnN0YXJ0TGluZSArIG9sZENodW5rLmxpbmVzQ291bnQgPiBsaW5lTnVtYmVyICsg
MSkgeworICAgICAgICAgICAgdmFyIHN1ZmZpeENodW5rID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yR3V0dGVyQ2h1bmsodGhpcywgbGluZU51bWJlciArIDEsIG9sZENodW5rLnN0YXJ0TGlu
ZSArIG9sZENodW5rLmxpbmVzQ291bnQpOworICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rcy5z
cGxpY2UoaW5zZXJ0SW5kZXgsIDAsIHN1ZmZpeENodW5rKTsKKyAgICAgICAgICAgIHRoaXMuZWxl
bWVudC5pbnNlcnRCZWZvcmUoc3VmZml4Q2h1bmsuZWxlbWVudCwgb2xkQ2h1bmsuZWxlbWVudCk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBSZW1vdmUgZW5jbG9zaW5nIGNodW5rLgorICAgICAg
ICB0aGlzLl90ZXh0Q2h1bmtzLnNwbGljZShjaHVua051bWJlciwgMSk7CisgICAgICAgIHRoaXMu
ZWxlbWVudC5yZW1vdmVDaGlsZChvbGRDaHVuay5lbGVtZW50KTsKKworICAgICAgICBpZiAod2Fz
RXhwYW5kZWQpIHsKKyAgICAgICAgICAgIGlmIChwcmVmaXhDaHVuaykKKyAgICAgICAgICAgICAg
ICBwcmVmaXhDaHVuay5leHBhbmRlZCA9IHRydWU7CisgICAgICAgICAgICBsaW5lQ2h1bmsuZXhw
YW5kZWQgPSB0cnVlOworICAgICAgICAgICAgaWYgKHN1ZmZpeENodW5rKQorICAgICAgICAgICAg
ICAgIHN1ZmZpeENodW5rLmV4cGFuZGVkID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBsaW5lQ2h1bms7CisgICAgfSwKKworICAgIHJlc2l6ZTogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOworICAgIH0KK30KKworLy89PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JH
dXR0ZXJDaHVuaworCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rID0gZnVuY3Rp
b24odGV4dEVkaXRvciwgc3RhcnRMaW5lLCBlbmRMaW5lKQoreworICAgIHRoaXMuX3RleHRFZGl0
b3IgPSB0ZXh0RWRpdG9yOworICAgIHRoaXMuX3RleHRNb2RlbCA9IHRleHRFZGl0b3IuX3RleHRN
b2RlbDsKKworICAgIHRoaXMuc3RhcnRMaW5lID0gc3RhcnRMaW5lOworICAgIGVuZExpbmUgPSBN
YXRoLm1pbih0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCwgZW5kTGluZSk7CisgICAgdGhpcy5s
aW5lc0NvdW50ID0gZW5kTGluZSAtIHN0YXJ0TGluZTsKKworICAgIHRoaXMuX2V4cGFuZGVkID0g
ZmFsc2U7CisKKyAgICB0aGlzLmVsZW1lbnQgPSB0aGlzLl9jcmVhdGVSb3coc3RhcnRMaW5lKTsK
KworICAgIGlmICh0aGlzLmxpbmVzQ291bnQgPT09IDEpIHsKKyAgICAgICAgLy8gU2luZ2xlIGxp
bmUgY2h1bmtzIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCBmb3IgZGVjb3JhdGlvbnMuIEhvc3QgbGlu
ZSBudW1iZXIgaW4KKyAgICAgICAgLy8gdGhlIHN1Yi1lbGVtZW50IGluIG9yZGVyIHRvIGFsbG93
IGZsZXhpYmxlIGJvcmRlciAvIG1hcmdpbiBtYW5hZ2VtZW50LgorICAgICAgICB2YXIgaW5uZXJT
cGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICBpbm5lclNwYW4u
Y2xhc3NOYW1lID0gIndlYmtpdC1saW5lLW51bWJlci1pbm5lciI7CisgICAgICAgIGlubmVyU3Bh
bi50ZXh0Q29udGVudCA9IHN0YXJ0TGluZSArIDE7CisgICAgICAgIHZhciBvdXRlclNwYW4gPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgb3V0ZXJTcGFuLmNsYXNzTmFt
ZSA9ICJ3ZWJraXQtbGluZS1udW1iZXItb3V0ZXIiOworICAgICAgICBvdXRlclNwYW4uYXBwZW5k
Q2hpbGQoaW5uZXJTcGFuKTsKKyAgICAgICAgdGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQudGV4dENv
bnRlbnQgPSAiIjsKKyAgICAgICAgdGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQuYXBwZW5kQ2hpbGQo
b3V0ZXJTcGFuKTsKKyAgICB9IGVsc2UgeworICAgICAgICB2YXIgbGluZU51bWJlcnMgPSBbXTsK
KyAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0TGluZTsgaSA8IGVuZExpbmU7ICsraSkgeworICAg
ICAgICAgICAgbGluZU51bWJlcnMucHVzaChpICsgMSk7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5lbGVtZW50LmZpcnN0Q2hpbGQudGV4dENvbnRlbnQgPSBsaW5lTnVtYmVycy5qb2luKCJcbiIp
OworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuay5wcm90b3R5
cGUgPSB7CisgICAgZ2V0IGV4cGFuZGVkKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9l
eHBhbmRlZDsKKyAgICB9LAorCisgICAgc2V0IGV4cGFuZGVkKGV4cGFuZGVkKQorICAgIHsKKyAg
ICAgICAgaWYgKHRoaXMuX2V4cGFuZGVkID09PSBleHBhbmRlZCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB0aGlzLl9leHBhbmRlZCA9IGV4cGFuZGVkOworCisgICAgICAgIGlmICh0
aGlzLmxpbmVzQ291bnQgPT09IDEpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChleHBhbmRlZCkgeworICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRMaW5l
Um93cyA9IFtdOworICAgICAgICAgICAgdmFyIHBhcmVudEVsZW1lbnQgPSB0aGlzLmVsZW1lbnQu
cGFyZW50RWxlbWVudDsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YXJ0TGluZTsg
aSA8IHRoaXMuc3RhcnRMaW5lICsgdGhpcy5saW5lc0NvdW50OyArK2kpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX2NyZWF0ZVJvdyhpKTsKKyAgICAgICAgICAgICAgICBw
YXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShsaW5lUm93LCB0aGlzLmVsZW1lbnQpOworICAgICAg
ICAgICAgICAgIHRoaXMuX2V4cGFuZGVkTGluZVJvd3MucHVzaChsaW5lUm93KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBlbGVtZW50SW5zZXJ0ZWQgPSBm
YWxzZTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZXhwYW5kZWRMaW5l
Um93cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5f
ZXhwYW5kZWRMaW5lUm93c1tpXTsKKyAgICAgICAgICAgICAgICB2YXIgcGFyZW50RWxlbWVudCA9
IGxpbmVSb3cucGFyZW50RWxlbWVudDsKKyAgICAgICAgICAgICAgICBpZiAocGFyZW50RWxlbWVu
dCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRJbnNlcnRlZCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbWVudEluc2VydGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuZWxlbWVudCwgbGluZVJv
dyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxl
bWVudC5yZW1vdmVDaGlsZChsaW5lUm93KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fZXhwYW5kZWRMaW5lUm93czsKKyAgICAgICAg
fQorICAgIH0sCisKKyAgICBnZXQgaGVpZ2h0KCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5f
ZXhwYW5kZWRMaW5lUm93cykKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQub2Zmc2V0
SGVpZ2h0OworICAgICAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB0aGlzLl9leHBhbmRlZExpbmVSb3dzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2
YXIgbGluZVJvdyA9IHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbaV07CisgICAgICAgICAgICByZXN1
bHQgKz0gbGluZVJvdy5vZmZzZXRIZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9LAorCisgICAgX2NyZWF0ZVJvdzogZnVuY3Rpb24obGluZU51bWJlcikKKyAg
ICB7CisgICAgICAgIHZhciBsaW5lUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
CisgICAgICAgIGxpbmVSb3cubGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisKKyAgICAgICAgdmFy
IGlubmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIGlubmVy
RGl2LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1udW1iZXIiOworICAgICAgICBpbm5lckRpdi50
ZXh0Q29udGVudCA9IGxpbmVOdW1iZXIgKyAxOworICAgICAgICBsaW5lUm93LmFwcGVuZENoaWxk
KGlubmVyRGl2KTsKKworICAgICAgICByZXR1cm4gbGluZVJvdzsKKyAgICB9Cit9CisKKy8vPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFdlYkluc3BlY3Rvci5U
ZXh0RWRpdG9yTWFpblBhbmVsCisKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsID0g
ZnVuY3Rpb24odGV4dE1vZGVsLCB1cmwpCit7CisgICAgdGhpcy5fdGV4dE1vZGVsID0gdGV4dE1v
ZGVsOworICAgIHRoaXMuX3VybCA9IHVybDsKKworICAgIHRoaXMuX2hpZ2hsaWdodGVyID0gbmV3
IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9ySGlnaGxpZ2h0ZXIodGhpcy5fdGV4dE1vZGVsLCB0aGlz
Ll9oaWdobGlnaHREYXRhUmVhZHkuYmluZCh0aGlzKSk7CisKKyAgICB0aGlzLmVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1l
ID0gImVkaXRvci1saW5lLWNvbnRlbnRzIGVkaXRvci1jb250ZW50LWVkaXRhYmxlIjsKKworICAg
IHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLl9zY3JvbGwuYmlu
ZCh0aGlzKSwgZmFsc2UpOworCisgICAgdGhpcy5fZGVmYXVsdENodW5rU2l6ZSA9IDUwOworICAg
IHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsID0gMDsKKworICAgIHRoaXMuZnJlZUNhY2hlZEVs
ZW1lbnRzKCk7CisgICAgdGhpcy5fYnVpbGRDaHVua3MoKTsKK30KKworV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0geworICAgIHNldCBtaW1lVHlwZShtaW1lVHlw
ZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdodGVyLm1pbWVUeXBlID0gbWltZVR5cGU7
CisgICAgfSwKKworICAgIGdldCB0ZXh0TW9kZWwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX3RleHRNb2RlbDsKKyAgICB9LAorCisgICAgcmV2ZWFsTGluZTogZnVuY3Rpb24obGluZU51
bWJlcikKKyAgICB7CisgICAgICAgIGlmIChsaW5lTnVtYmVyID49IHRoaXMuX3RleHRNb2RlbC5s
aW5lc0NvdW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBjaHVuayA9IHRo
aXMuX21ha2VMaW5lQUNodW5rKGxpbmVOdW1iZXIpOworICAgICAgICBjaHVuay5lbGVtZW50LnNj
cm9sbEludG9WaWV3SWZOZWVkZWQoKTsKKyAgICB9LAorCisgICAgc2V0IGVkaXRDYWxsYmFjayhl
ZGl0Q2FsbGJhY2spCisgICAgeworICAgICAgICB0aGlzLl9lZGl0Q2FsbGJhY2sgPSBlZGl0Q2Fs
bGJhY2s7CisgICAgfSwKKworICAgIGFkZERlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIs
IGRlY29yYXRpb24pCisgICAgeworICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9tYWtlTGluZUFD
aHVuayhsaW5lTnVtYmVyKTsKKyAgICAgICAgY2h1bmsuYWRkRGVjb3JhdGlvbihkZWNvcmF0aW9u
KTsKKyAgICAgICAgcmV0dXJuIGNodW5rOworICAgIH0sCisKKyAgICByZW1vdmVEZWNvcmF0aW9u
OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0aW9uKQorICAgIHsKKyAgICAgICAgdmFyIGNo
dW5rID0gdGhpcy5fbWFrZUxpbmVBQ2h1bmsobGluZU51bWJlcik7CisgICAgICAgIGNodW5rLnJl
bW92ZURlY29yYXRpb24oZGVjb3JhdGlvbik7CisgICAgICAgIHJldHVybiBjaHVuazsKKyAgICB9
LAorCisgICAgbWFya0FuZFJldmVhbFJhbmdlOiBmdW5jdGlvbihyYW5nZSkKKyAgICB7CisgICAg
ICAgIGlmICh0aGlzLl9yYW5nZVRvTWFyaykgeworICAgICAgICAgICAgdmFyIG1hcmtlZExpbmUg
PSB0aGlzLl9yYW5nZVRvTWFyay5zdGFydExpbmU7CisgICAgICAgICAgICB0aGlzLl9yYW5nZVRv
TWFyayA9IG51bGw7CisgICAgICAgICAgICB0aGlzLl9wYWludExpbmVzKG1hcmtlZExpbmUsIG1h
cmtlZExpbmUgKyAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyYW5nZSkgeworICAgICAg
ICAgICAgdGhpcy5fcmFuZ2VUb01hcmsgPSByYW5nZTsKKyAgICAgICAgICAgIHRoaXMucmV2ZWFs
TGluZShyYW5nZS5zdGFydExpbmUpOworICAgICAgICAgICAgdGhpcy5fcGFpbnRMaW5lcyhyYW5n
ZS5zdGFydExpbmUsIHJhbmdlLnN0YXJ0TGluZSArIDEpOworICAgICAgICAgICAgaWYgKHRoaXMu
X21hcmtlZFJhbmdlRWxlbWVudCkKKyAgICAgICAgICAgICAgICB0aGlzLl9tYXJrZWRSYW5nZUVs
ZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpOworICAgICAgICB9CisgICAgICAgIGRlbGV0
ZSB0aGlzLl9tYXJrZWRSYW5nZUVsZW1lbnQ7CisgICAgfSwKKworICAgIGhpZ2hsaWdodExpbmU6
IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICB0aGlzLmNsZWFyTGluZUhpZ2hs
aWdodCgpOworICAgICAgICB0aGlzLl9oaWdobGlnaHRlZExpbmUgPSBsaW5lTnVtYmVyOworICAg
ICAgICB0aGlzLnJldmVhbExpbmUobGluZU51bWJlcik7CisgICAgICAgIHZhciBjaHVuayA9IHRo
aXMuX21ha2VMaW5lQUNodW5rKGxpbmVOdW1iZXIpOworICAgICAgICBjaHVuay5hZGREZWNvcmF0
aW9uKCJ3ZWJraXQtaGlnaGxpZ2h0ZWQtbGluZSIpOworICAgIH0sCisKKyAgICBjbGVhckxpbmVI
aWdobGlnaHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0eXBlb2YgdGhpcy5faGln
aGxpZ2h0ZWRMaW5lID09PSAibnVtYmVyIikgeworICAgICAgICAgICAgdmFyIGNodW5rID0gdGhp
cy5fbWFrZUxpbmVBQ2h1bmsodGhpcy5faGlnaGxpZ2h0ZWRMaW5lKTsKKyAgICAgICAgICAgIGNo
dW5rLnJlbW92ZURlY29yYXRpb24oIndlYmtpdC1oaWdobGlnaHRlZC1saW5lIik7CisgICAgICAg
ICAgICBkZWxldGUgdGhpcy5faGlnaGxpZ2h0ZWRMaW5lOworICAgICAgICB9CisgICAgfSwKKwor
ICAgIGZyZWVDYWNoZWRFbGVtZW50czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5f
Y2FjaGVkU3BhbnMgPSBbXTsKKyAgICAgICAgdGhpcy5fY2FjaGVkVGV4dE5vZGVzID0gW107Cisg
ICAgICAgIHRoaXMuX2NhY2hlZFJvd3MgPSBbXTsKKyAgICB9LAorCisgICAgX2J1aWxkQ2h1bmtz
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4o
KTsKKworICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzID0gW107CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQ7IGkgKz0gdGhpcy5fZGVmYXVsdENo
dW5rU2l6ZSkgeworICAgICAgICAgICAgdmFyIGNodW5rID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTWFpbkNodW5rKHRoaXMsIGksIGkgKyB0aGlzLl9kZWZhdWx0Q2h1bmtTaXplKTsKKyAg
ICAgICAgICAgIHRoaXMuX3RleHRDaHVua3MucHVzaChjaHVuayk7CisgICAgICAgICAgICB0aGlz
LmVsZW1lbnQuYXBwZW5kQ2hpbGQoY2h1bmsuZWxlbWVudCk7CisgICAgICAgIH0KKworICAgICAg
ICB0aGlzLl9oaWdobGlnaHRlci5yZXNldCgpOworICAgICAgICB0aGlzLl9yZXBhaW50QWxsKCk7
CisgICAgfSwKKworICAgIF9tYWtlTGluZUFDaHVuazogZnVuY3Rpb24obGluZU51bWJlcikKKyAg
ICB7CisgICAgICAgIGlmICghdGhpcy5fdGV4dENodW5rcykKKyAgICAgICAgICAgIHRoaXMuX2J1
aWxkQ2h1bmtzKCk7CisKKyAgICAgICAgdmFyIGNodW5rTnVtYmVyID0gdGhpcy5fY2h1bmtOdW1i
ZXJGb3JMaW5lKGxpbmVOdW1iZXIpOworICAgICAgICB2YXIgb2xkQ2h1bmsgPSB0aGlzLl90ZXh0
Q2h1bmtzW2NodW5rTnVtYmVyXTsKKyAgICAgICAgaWYgKG9sZENodW5rLmxpbmVzQ291bnQgPT09
IDEpCisgICAgICAgICAgICByZXR1cm4gb2xkQ2h1bms7CisKKyAgICAgICAgdmFyIHdhc0V4cGFu
ZGVkID0gb2xkQ2h1bmsuZXhwYW5kZWQ7CisgICAgICAgIG9sZENodW5rLmV4cGFuZGVkID0gZmFs
c2U7CisKKyAgICAgICAgdmFyIGluc2VydEluZGV4ID0gY2h1bmtOdW1iZXIgKyAxOworCisgICAg
ICAgIC8vIFByZWZpeCBjaHVuay4KKyAgICAgICAgaWYgKGxpbmVOdW1iZXIgPiBvbGRDaHVuay5z
dGFydExpbmUpIHsKKyAgICAgICAgICAgIHZhciBwcmVmaXhDaHVuayA9IG5ldyBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5DaHVuayh0aGlzLCBvbGRDaHVuay5zdGFydExpbmUsIGxpbmVOdW1i
ZXIpOworICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rcy5zcGxpY2UoaW5zZXJ0SW5kZXgrKywg
MCwgcHJlZml4Q2h1bmspOworICAgICAgICAgICAgdGhpcy5lbGVtZW50Lmluc2VydEJlZm9yZShw
cmVmaXhDaHVuay5lbGVtZW50LCBvbGRDaHVuay5lbGVtZW50KTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIExpbmUgY2h1bmsuCisgICAgICAgIHZhciBsaW5lQ2h1bmsgPSBuZXcgV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluQ2h1bmsodGhpcywgbGluZU51bWJlciwgbGluZU51bWJlciArIDEp
OworICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnNwbGljZShpbnNlcnRJbmRleCsrLCAwLCBsaW5l
Q2h1bmspOworICAgICAgICB0aGlzLmVsZW1lbnQuaW5zZXJ0QmVmb3JlKGxpbmVDaHVuay5lbGVt
ZW50LCBvbGRDaHVuay5lbGVtZW50KTsKKworICAgICAgICAvLyBTdWZmaXggY2h1bmsuCisgICAg
ICAgIGlmIChvbGRDaHVuay5zdGFydExpbmUgKyBvbGRDaHVuay5saW5lc0NvdW50ID4gbGluZU51
bWJlciArIDEpIHsKKyAgICAgICAgICAgIHZhciBzdWZmaXhDaHVuayA9IG5ldyBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5DaHVuayh0aGlzLCBsaW5lTnVtYmVyICsgMSwgb2xkQ2h1bmsuc3Rh
cnRMaW5lICsgb2xkQ2h1bmsubGluZXNDb3VudCk7CisgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1
bmtzLnNwbGljZShpbnNlcnRJbmRleCwgMCwgc3VmZml4Q2h1bmspOworICAgICAgICAgICAgdGhp
cy5lbGVtZW50Lmluc2VydEJlZm9yZShzdWZmaXhDaHVuay5lbGVtZW50LCBvbGRDaHVuay5lbGVt
ZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbW92ZSBlbmNsb3NpbmcgY2h1bmsuCisg
ICAgICAgIHRoaXMuX3RleHRDaHVua3Muc3BsaWNlKGNodW5rTnVtYmVyLCAxKTsKKyAgICAgICAg
dGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkKG9sZENodW5rLmVsZW1lbnQpOworCisgICAgICAgIGlm
ICh3YXNFeHBhbmRlZCkgeworICAgICAgICAgICAgaWYgKHByZWZpeENodW5rKQorICAgICAgICAg
ICAgICAgIHByZWZpeENodW5rLmV4cGFuZGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGxpbmVDaHVu
ay5leHBhbmRlZCA9IHRydWU7CisgICAgICAgICAgICBpZiAoc3VmZml4Q2h1bmspCisgICAgICAg
ICAgICAgICAgc3VmZml4Q2h1bmsuZXhwYW5kZWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGxpbmVDaHVuazsKKyAgICB9LAorCisgICAgX3Njcm9sbDogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9yZXBhaW50QWxsVGltZXIpCisgICAgICAgICAgICB0
aGlzLl9yZXBhaW50QWxsVGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuX3JlcGFpbnRBbGwuYmluZCh0
aGlzKSwgNTApOworICAgIH0sCisKKyAgICBiZWdpblVwZGF0ZXM6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsKys7CisgICAgfSwKKworICAgIGVu
ZFVwZGF0ZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3BhaW50Q29hbGVzY2lu
Z0xldmVsLS07CisgICAgICAgIGlmICghdGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwpCisgICAg
ICAgICAgICB0aGlzLl9yZXBhaW50QWxsKCk7CisgICAgfSwKKworICAgIF9jaHVua051bWJlckZv
ckxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBs
aW5lID0gdGhpcy5fdGV4dENodW5rc1tpXS5zdGFydExpbmU7CisgICAgICAgICAgICBpZiAobGlu
ZU51bWJlciA+PSBsaW5lICYmIGxpbmVOdW1iZXIgPCBsaW5lICsgdGhpcy5fdGV4dENodW5rc1tp
XS5saW5lc0NvdW50KQorICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aCAtIDE7CisgICAgfSwKKworICAgIF9j
aHVua0ZvckxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5fdGV4dENodW5rc1t0aGlzLl9jaHVua051bWJlckZvckxpbmUobGluZU51bWJlcildOwor
ICAgIH0sCisKKyAgICBfcmVwYWludEFsbDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgZGVs
ZXRlIHRoaXMuX3JlcGFpbnRBbGxUaW1lcjsKKworICAgICAgICBpZiAodGhpcy5fcGFpbnRDb2Fs
ZXNjaW5nTGV2ZWwpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCF0aGlzLl90
ZXh0Q2h1bmtzKQorICAgICAgICAgICAgdGhpcy5fYnVpbGRDaHVua3MoKTsKKworICAgICAgICB2
YXIgdmlzaWJsZUZyb20gPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wOworICAgICAgICB2YXIgdmlz
aWJsZVRvID0gdGhpcy5lbGVtZW50LnNjcm9sbFRvcCArIHRoaXMuZWxlbWVudC5jbGllbnRIZWln
aHQ7CisKKyAgICAgICAgdmFyIG9mZnNldCA9IDA7CisgICAgICAgIHZhciBmaXJzdFZpc2libGVM
aW5lID0gLTE7CisgICAgICAgIHZhciBsYXN0VmlzaWJsZUxpbmUgPSAwOworICAgICAgICB2YXIg
dG9FeHBhbmQgPSBbXTsKKyAgICAgICAgdmFyIHRvQ29sbGFwc2UgPSBbXTsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2ldOworICAgICAgICAgICAgdmFyIGNo
dW5rSGVpZ2h0ID0gY2h1bmsuaGVpZ2h0OworICAgICAgICAgICAgaWYgKG9mZnNldCArIGNodW5r
SGVpZ2h0ID4gdmlzaWJsZUZyb20gJiYgb2Zmc2V0IDwgdmlzaWJsZVRvKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFjaHVuay5leHBhbmRlZCkKKyAgICAgICAgICAgICAgICAgICAgdG9FeHBhbmQu
cHVzaChjaHVuayk7CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0VmlzaWJsZUxpbmUgPT09IC0x
KQorICAgICAgICAgICAgICAgICAgICBmaXJzdFZpc2libGVMaW5lID0gY2h1bmsuc3RhcnRMaW5l
OworICAgICAgICAgICAgICAgIGxhc3RWaXNpYmxlTGluZSA9IGNodW5rLnN0YXJ0TGluZSArIGNo
dW5rLmxpbmVzQ291bnQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlm
IChjaHVuay5leHBhbmRlZCkKKyAgICAgICAgICAgICAgICAgICAgdG9Db2xsYXBzZS5wdXNoKGNo
dW5rKTsKKyAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID49IHZpc2libGVUbykKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvZmZzZXQgKz0g
Y2h1bmtIZWlnaHQ7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBqID0gaTsgaiA8IHRo
aXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0
Q2h1bmtzW2pdLmV4cGFuZGVkKQorICAgICAgICAgICAgICAgIHRvQ29sbGFwc2UucHVzaCh0aGlz
Ll90ZXh0Q2h1bmtzW2pdKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0
aGlzLl9nZXRTZWxlY3Rpb24oKTsKKworICAgICAgICB0aGlzLl9tdXRlSGlnaGxpZ2h0TGlzdGVu
ZXIgPSB0cnVlOworICAgICAgICB0aGlzLl9oaWdobGlnaHRlci5oaWdobGlnaHQobGFzdFZpc2li
bGVMaW5lKTsKKyAgICAgICAgZGVsZXRlIHRoaXMuX211dGVIaWdobGlnaHRMaXN0ZW5lcjsKKwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvQ29sbGFwc2UubGVuZ3RoOyArK2kpCisgICAg
ICAgICAgICB0b0NvbGxhcHNlW2ldLmV4cGFuZGVkID0gZmFsc2U7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdG9FeHBhbmQubGVuZ3RoOyArK2kpCisgICAgICAgICAgICB0b0V4cGFuZFtp
XS5leHBhbmRlZCA9IHRydWU7CisKKyAgICAgICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihzZWxl
Y3Rpb24pOworICAgIH0sCisKKyAgICBfaGlnaGxpZ2h0RGF0YVJlYWR5OiBmdW5jdGlvbihmcm9t
TGluZSwgdG9MaW5lKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX211dGVIaWdobGlnaHRMaXN0
ZW5lcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fcGFpbnRMaW5lcyhmcm9t
TGluZSwgdG9MaW5lLCB0cnVlIC8qcmVzdG9yZVNlbGVjdGlvbiovKTsKKyAgICB9LAorCisgICAg
X3BhaW50TGluZXM6IGZ1bmN0aW9uKGZyb21MaW5lLCB0b0xpbmUsIHJlc3RvcmVTZWxlY3Rpb24p
CisgICAgeworICAgICAgICB2YXIgc2VsZWN0aW9uOworICAgICAgICB2YXIgY2h1bmsgPSB0aGlz
Ll9jaHVua0ZvckxpbmUoZnJvbUxpbmUpOworICAgICAgICBmb3IgKHZhciBpID0gZnJvbUxpbmU7
IGkgPCB0b0xpbmU7ICsraSkgeworICAgICAgICAgICAgaWYgKGkgPj0gY2h1bmsuc3RhcnRMaW5l
ICsgY2h1bmsubGluZXNDb3VudCkKKyAgICAgICAgICAgICAgICBjaHVuayA9IHRoaXMuX2NodW5r
Rm9yTGluZShpKTsKKyAgICAgICAgICAgIHZhciBsaW5lUm93ID0gY2h1bmsuZ2V0RXhwYW5kZWRM
aW5lUm93KGkpOworICAgICAgICAgICAgaWYgKCFsaW5lUm93KQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rpb24gJiYgIXNlbGVjdGlvbikK
KyAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLl9nZXRTZWxlY3Rpb24oKTsKKyAgICAg
ICAgICAgIHRoaXMuX3BhaW50TGluZShsaW5lUm93LCBpKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAocmVzdG9yZVNlbGVjdGlvbikKKyAgICAgICAgICAgIHRoaXMuX3Jlc3RvcmVTZWxlY3Rpb24o
c2VsZWN0aW9uKTsKKyAgICB9LAorCisgICAgX3BhaW50TGluZTogZnVuY3Rpb24obGluZVJvdywg
bGluZU51bWJlcikKKyAgICB7CisgICAgICAgIHZhciBoaWdobGlnaHQgPSB0aGlzLl90ZXh0TW9k
ZWwuZ2V0QXR0cmlidXRlKGxpbmVOdW1iZXIsICJoaWdobGlnaHQiKTsKKyAgICAgICAgaWYgKCFo
aWdobGlnaHQpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9yYW5nZVRvTWFyayAmJiB0aGlzLl9y
YW5nZVRvTWFyay5zdGFydExpbmUgPT09IGxpbmVOdW1iZXIpCisgICAgICAgICAgICAgICAgdGhp
cy5fbWFya2VkUmFuZ2VFbGVtZW50ID0gaGlnaGxpZ2h0U2VhcmNoUmVzdWx0KGxpbmVSb3csIHRo
aXMuX3JhbmdlVG9NYXJrLnN0YXJ0Q29sdW1uLCB0aGlzLl9yYW5nZVRvTWFyay5lbmRDb2x1bW4g
LSB0aGlzLl9yYW5nZVRvTWFyay5zdGFydENvbHVtbik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBsaW5lUm93LnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgIHZh
ciBsaW5lID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUobGluZU51bWJlcik7CisgICAgICAgIGlmICgh
bGluZSkKKyAgICAgICAgICAgIGxpbmVSb3cuaW5uZXJIVE1MID0gIjxicj4iOworCisgICAgICAg
IHZhciBwbGFpblRleHRTdGFydCA9IC0xOworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxp
bmUubGVuZ3RoOykgeworICAgICAgICAgICAgaWYgKGogPiAxMDAwKSB7CisgICAgICAgICAgICAg
ICAgLy8gVGhpcyBsaW5lIGlzIHRvbyBsb25nIC0gZG8gbm90IHdhc3RlIGN5Y2xlcyBvbiBtaW5p
ZmllZCBqcyBoaWdobGlnaHRpbmcuCisgICAgICAgICAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0
ID09PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0U3RhcnQgPSBqOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGF0dHJpYnV0
ZSA9IGhpZ2hsaWdodFtqXTsKKyAgICAgICAgICAgIGlmICghYXR0cmlidXRlIHx8ICFhdHRyaWJ1
dGUudG9rZW5UeXBlKSB7CisgICAgICAgICAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0ID09PSAt
MSkKKyAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0U3RhcnQgPSBqOworICAgICAgICAgICAg
ICAgIGorKzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHBsYWlu
VGV4dFN0YXJ0ICE9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmRUZXh0
Tm9kZShsaW5lUm93LCBsaW5lLnN1YnN0cmluZyhwbGFpblRleHRTdGFydCwgaikpOworICAgICAg
ICAgICAgICAgICAgICBwbGFpblRleHRTdGFydCA9IC0xOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB0aGlzLl9hcHBlbmRTcGFuKGxpbmVSb3csIGxpbmUuc3Vic3RyaW5nKGos
IGogKyBhdHRyaWJ1dGUubGVuZ3RoKSwgYXR0cmlidXRlLnRva2VuVHlwZSk7CisgICAgICAgICAg
ICAgICAgaiArPSBhdHRyaWJ1dGUubGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGlmIChwbGFpblRleHRTdGFydCAhPT0gLTEpCisgICAgICAgICAgICB0aGlzLl9hcHBl
bmRUZXh0Tm9kZShsaW5lUm93LCBsaW5lLnN1YnN0cmluZyhwbGFpblRleHRTdGFydCwgbGluZS5s
ZW5ndGgpKTsKKyAgICAgICAgaWYgKHRoaXMuX3JhbmdlVG9NYXJrICYmIHRoaXMuX3JhbmdlVG9N
YXJrLnN0YXJ0TGluZSA9PT0gbGluZU51bWJlcikKKyAgICAgICAgICAgIHRoaXMuX21hcmtlZFJh
bmdlRWxlbWVudCA9IGhpZ2hsaWdodFNlYXJjaFJlc3VsdChsaW5lUm93LCB0aGlzLl9yYW5nZVRv
TWFyay5zdGFydENvbHVtbiwgdGhpcy5fcmFuZ2VUb01hcmsuZW5kQ29sdW1uIC0gdGhpcy5fcmFu
Z2VUb01hcmsuc3RhcnRDb2x1bW4pOworICAgICAgICBpZiAobGluZVJvdy5kZWNvcmF0aW9uc0Vs
ZW1lbnQpCisgICAgICAgICAgICBsaW5lUm93LmFwcGVuZENoaWxkKGxpbmVSb3cuZGVjb3JhdGlv
bnNFbGVtZW50KTsKKyAgICB9LAorCisgICAgX3JlbGVhc2VMaW5lc0hpZ2hsaWdodDogZnVuY3Rp
b24obGluZVJvdykKKyAgICB7CisgICAgICAgIGlmICghbGluZVJvdykKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgaWYgKCJzcGFucyIgaW4gbGluZVJvdykgeworICAgICAgICAgICAgdmFy
IHNwYW5zID0gbGluZVJvdy5zcGFuczsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwg
c3BhbnMubGVuZ3RoOyArK2opCisgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkU3BhbnMucHVz
aChzcGFuc1tqXSk7CisgICAgICAgICAgICBkZWxldGUgbGluZVJvdy5zcGFuczsKKyAgICAgICAg
fQorICAgICAgICBpZiAoInRleHROb2RlcyIgaW4gbGluZVJvdykgeworICAgICAgICAgICAgdmFy
IHRleHROb2RlcyA9IGxpbmVSb3cudGV4dE5vZGVzOworICAgICAgICAgICAgZm9yICh2YXIgaiA9
IDA7IGogPCB0ZXh0Tm9kZXMubGVuZ3RoOyArK2opCisgICAgICAgICAgICAgICAgdGhpcy5fY2Fj
aGVkVGV4dE5vZGVzLnB1c2godGV4dE5vZGVzW2pdKTsKKyAgICAgICAgICAgIGRlbGV0ZSBsaW5l
Um93LnRleHROb2RlczsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jYWNoZWRSb3dzLnB1c2go
bGluZVJvdyk7CisgICAgfSwKKworICAgIF9nZXRTZWxlY3Rpb246IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisgICAgICAg
IGlmICghc2VsZWN0aW9uLnJhbmdlQ291bnQpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICAgICAgdmFyIHNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7CisgICAg
ICAgIC8vIFNlbGVjdGlvbiBtYXkgYmUgb3V0c2lkZSBvZiB0aGUgdmlld2VyLgorICAgICAgICBp
ZiAoIXRoaXMuZWxlbWVudC5pc0FuY2VzdG9yKHNlbGVjdGlvblJhbmdlLnN0YXJ0Q29udGFpbmVy
KSB8fCAhdGhpcy5lbGVtZW50LmlzQW5jZXN0b3Ioc2VsZWN0aW9uUmFuZ2UuZW5kQ29udGFpbmVy
KSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLl9z
ZWxlY3Rpb25Ub1Bvc2l0aW9uKHNlbGVjdGlvblJhbmdlLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rp
b25SYW5nZS5zdGFydE9mZnNldCk7CisgICAgICAgIHZhciBlbmQgPSBzZWxlY3Rpb25SYW5nZS5j
b2xsYXBzZWQgPyBzdGFydCA6IHRoaXMuX3NlbGVjdGlvblRvUG9zaXRpb24oc2VsZWN0aW9uUmFu
Z2UuZW5kQ29udGFpbmVyLCBzZWxlY3Rpb25SYW5nZS5lbmRPZmZzZXQpOworICAgICAgICByZXR1
cm4gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2Uoc3RhcnQubGluZSwgc3RhcnQuY29sdW1uLCBl
bmQubGluZSwgZW5kLmNvbHVtbik7CisgICAgfSwKKworICAgIF9yZXN0b3JlU2VsZWN0aW9uOiBm
dW5jdGlvbihyYW5nZSwgc2Nyb2xsSW50b1ZpZXcpCisgICAgeworICAgICAgICBpZiAoIXJhbmdl
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBzdGFydCA9IHRoaXMuX3Bvc2l0
aW9uVG9TZWxlY3Rpb24ocmFuZ2Uuc3RhcnRMaW5lLCByYW5nZS5zdGFydENvbHVtbik7CisgICAg
ICAgIHZhciBlbmQgPSByYW5nZS5pc0VtcHR5KCkgPyBzdGFydCA6IHRoaXMuX3Bvc2l0aW9uVG9T
ZWxlY3Rpb24ocmFuZ2UuZW5kTGluZSwgcmFuZ2UuZW5kQ29sdW1uKTsKKworICAgICAgICB2YXIg
c2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOworICAgICAgICBpZiAocmFuZ2UudXB3
YXJkcykKKyAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRCYXNlQW5kRXh0ZW50KGVuZC5jb250YWlu
ZXIsIGVuZC5vZmZzZXQsIHN0YXJ0LmNvbnRhaW5lciwgc3RhcnQub2Zmc2V0KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgc2VsZWN0aW9uLnNldEJhc2VBbmRFeHRlbnQoc3RhcnQuY29udGFp
bmVyLCBzdGFydC5vZmZzZXQsIGVuZC5jb250YWluZXIsIGVuZC5vZmZzZXQpOworCisgICAgICAg
IGlmIChzY3JvbGxJbnRvVmlldykgeworICAgICAgICAgICAgdmFyIGZvY3VzTm9kZSA9IHJhbmdl
LnVwd2FyZHMgPyBzdGFydC5jb250YWluZXIgOiBlbmQuY29udGFpbmVyOworICAgICAgICAgICAg
d2hpbGUgKGZvY3VzTm9kZSkgeworICAgICAgICAgICAgICAgIGlmIChmb2N1c05vZGUuc2Nyb2xs
SW50b1ZpZXdJZk5lZWRlZCkgeworICAgICAgICAgICAgICAgICAgICBmb2N1c05vZGUuc2Nyb2xs
SW50b1ZpZXdJZk5lZWRlZCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9jdXNOb2RlID0gZm9jdXNOb2RlLnBhcmVudEVs
ZW1lbnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX3NlbGVjdGlv
blRvUG9zaXRpb246IGZ1bmN0aW9uKGNvbnRhaW5lciwgb2Zmc2V0KQorICAgIHsKKyAgICAgICAg
aWYgKGNvbnRhaW5lciA9PT0gdGhpcy5lbGVtZW50ICYmIG9mZnNldCA9PT0gMCkKKyAgICAgICAg
ICAgIHJldHVybiB7IGxpbmU6IDAsIGNvbHVtbjogMCB9OworICAgICAgICBpZiAoY29udGFpbmVy
ID09PSB0aGlzLmVsZW1lbnQgJiYgb2Zmc2V0ID09PSAxKQorICAgICAgICAgICAgcmV0dXJuIHsg
bGluZTogdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQgLSAxLCBjb2x1bW46IHRoaXMuX3RleHRN
b2RlbC5saW5lTGVuZ3RoKHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50IC0gMSkgfTsKKworICAg
ICAgICB2YXIgbGluZVJvdyA9IGNvbnRhaW5lci5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVO
YW1lKCJESVYiKTsKKyAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBsaW5lUm93LmxpbmVOdW1iZXI7
CisgICAgICAgIGlmIChjb250YWluZXIgPT09IGxpbmVSb3cgJiYgb2Zmc2V0ID09PSAwKQorICAg
ICAgICAgICAgcmV0dXJuIHsgbGluZTogbGluZU51bWJlciwgY29sdW1uOiAwIH07CisKKyAgICAg
ICAgLy8gVGhpcyBtYXkgYmUgY2h1bmsgYW5kIGNodW5rcyBtYXkgY29udGFpbiBcbi4KKyAgICAg
ICAgdmFyIGNvbHVtbiA9IDA7CisgICAgICAgIHZhciBub2RlID0gbGluZVJvdy50cmF2ZXJzZU5l
eHRUZXh0Tm9kZShsaW5lUm93KTsKKyAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPT0gY29u
dGFpbmVyKSB7CisgICAgICAgICAgICB2YXIgdGV4dCA9IG5vZGUudGV4dENvbnRlbnQ7CisgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodGV4dC5jaGFyQXQoaSkgPT09ICJcbiIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbGluZU51bWJlcisrOworICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSAwOworICAgICAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBjb2x1bW4rKzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG5vZGUgPSBub2RlLnRyYXZlcnNlTmV4dFRleHROb2RlKGxpbmVS
b3cpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vZGUgPT09IGNvbnRhaW5lciAmJiBvZmZz
ZXQpIHsKKyAgICAgICAgICAgIHZhciB0ZXh0ID0gbm9kZS50ZXh0Q29udGVudDsKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2Zmc2V0OyArK2kpIHsKKyAgICAgICAgICAgICAgICBp
ZiAodGV4dC5jaGFyQXQoaSkgPT09ICJcbiIpIHsKKyAgICAgICAgICAgICAgICAgICAgbGluZU51
bWJlcisrOworICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSAwOworICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBjb2x1bW4rKzsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4geyBsaW5lOiBsaW5lTnVtYmVyLCBjb2x1bW46IGNvbHVt
biB9OworICAgIH0sCisKKyAgICBfcG9zaXRpb25Ub1NlbGVjdGlvbjogZnVuY3Rpb24obGluZSwg
Y29sdW1uKQorICAgIHsKKyAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fY2h1bmtGb3JMaW5lKGxp
bmUpOworICAgICAgICBpZiAoY2h1bmsuZXhwYW5kZWQpCisgICAgICAgICAgICB2YXIgcmFuZ2VC
b3VuZGFyeSA9IGNodW5rLmdldEV4cGFuZGVkTGluZVJvdyhsaW5lKS5yYW5nZUJvdW5kYXJ5Rm9y
T2Zmc2V0KGNvbHVtbik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIG9mZnNldCA9
IGNvbHVtbjsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSBjaHVuay5zdGFydExpbmU7IGkgPCBs
aW5lOyArK2kpCisgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHRoaXMuX3RleHRNb2RlbC5saW5l
TGVuZ3RoKGkpICsgMTsgLy8gXG4KKyAgICAgICAgICAgIHZhciBsaW5lQ2VsbCA9IGNodW5rLmVs
ZW1lbnQ7CisgICAgICAgICAgICBpZiAobGluZUNlbGwuZmlyc3RDaGlsZCkKKyAgICAgICAgICAg
ICAgICB2YXIgcmFuZ2VCb3VuZGFyeSA9IHsgY29udGFpbmVyOiBsaW5lQ2VsbC5maXJzdENoaWxk
LCBvZmZzZXQ6IG9mZnNldCB9OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZh
ciByYW5nZUJvdW5kYXJ5ID0geyBjb250YWluZXI6IGxpbmVDZWxsLCBvZmZzZXQ6IDAgfTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcmFuZ2VCb3VuZGFyeTsKKyAgICB9LAorCisgICAgX2Fw
cGVuZFNwYW46IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQsIGNsYXNzTmFtZSkKKyAgICB7Cisg
ICAgICAgIGlmIChjbGFzc05hbWUgPT09ICJodG1sLXJlc291cmNlLWxpbmsiIHx8IGNsYXNzTmFt
ZSA9PT0gImh0bWwtZXh0ZXJuYWwtbGluayIpIHsKKyAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5k
Q2hpbGQodGhpcy5fY3JlYXRlTGluayhjb250ZW50LCBjbGFzc05hbWUgPT09ICJodG1sLWV4dGVy
bmFsLWxpbmsiKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB2
YXIgc3BhbiA9IHRoaXMuX2NhY2hlZFNwYW5zLnBvcCgpIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoInNwYW4iKTsKKyAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSAid2Via2l0LSIgKyBjbGFzc05h
bWU7CisgICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSBjb250ZW50OworICAgICAgICBlbGVtZW50
LmFwcGVuZENoaWxkKHNwYW4pOworICAgICAgICBpZiAoISgic3BhbnMiIGluIGVsZW1lbnQpKQor
ICAgICAgICAgICAgZWxlbWVudC5zcGFucyA9IFtdOworICAgICAgICBlbGVtZW50LnNwYW5zLnB1
c2goc3Bhbik7CisgICAgfSwKKworICAgIF9hcHBlbmRUZXh0Tm9kZTogZnVuY3Rpb24oZWxlbWVu
dCwgdGV4dCkKKyAgICB7CisgICAgICAgIHZhciB0ZXh0Tm9kZSA9IHRoaXMuX2NhY2hlZFRleHRO
b2Rlcy5wb3AoKTsKKyAgICAgICAgaWYgKHRleHROb2RlKQorICAgICAgICAgICAgdGV4dE5vZGUu
bm9kZVZhbHVlID0gdGV4dDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGV4dE5vZGUgPSBk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTsKKyAgICAgICAgZWxlbWVudC5hcHBlbmRDaGls
ZCh0ZXh0Tm9kZSk7CisgICAgICAgIGlmICghKCJ0ZXh0Tm9kZXMiIGluIGVsZW1lbnQpKQorICAg
ICAgICAgICAgZWxlbWVudC50ZXh0Tm9kZXMgPSBbXTsKKyAgICAgICAgZWxlbWVudC50ZXh0Tm9k
ZXMucHVzaCh0ZXh0Tm9kZSk7CisgICAgfSwKKworICAgIF9jcmVhdGVMaW5rOiBmdW5jdGlvbihj
b250ZW50LCBpc0V4dGVybmFsKQorICAgIHsKKyAgICAgICAgdmFyIHF1b3RlID0gY29udGVudC5j
aGFyQXQoMCk7CisgICAgICAgIGlmIChjb250ZW50Lmxlbmd0aCA+IDEgJiYgKHF1b3RlID09PSAi
XCIiIHx8ICAgcXVvdGUgPT09ICInIikpCisgICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5z
dWJzdHJpbmcoMSwgY29udGVudC5sZW5ndGggLSAxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcXVvdGUgPSBudWxsOworCisgICAgICAgIHZhciBhID0gV2ViSW5zcGVjdG9yLmxpbmtpZnlV
UkxBc05vZGUodGhpcy5fcmV3cml0ZUhyZWYoY29udGVudCksIGNvbnRlbnQsIG51bGwsIGlzRXh0
ZXJuYWwpOworICAgICAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4i
KTsKKyAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSAid2Via2l0LWh0bWwtYXR0cmlidXRlLXZhbHVl
IjsKKyAgICAgICAgaWYgKHF1b3RlKQorICAgICAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZShxdW90ZSkpOworICAgICAgICBzcGFuLmFwcGVuZENoaWxkKGEp
OworICAgICAgICBpZiAocXVvdGUpCisgICAgICAgICAgICBzcGFuLmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKHF1b3RlKSk7CisgICAgICAgIHJldHVybiBzcGFuOworICAgIH0s
CisKKyAgICBfcmV3cml0ZUhyZWY6IGZ1bmN0aW9uKGhyZWZWYWx1ZSwgaXNFeHRlcm5hbCkKKyAg
ICB7CisgICAgICAgIGlmICghdGhpcy5fdXJsIHx8ICFocmVmVmFsdWUgfHwgaHJlZlZhbHVlLmlu
ZGV4T2YoIjovLyIpID4gMCkKKyAgICAgICAgICAgIHJldHVybiBocmVmVmFsdWU7CisgICAgICAg
IHJldHVybiBXZWJJbnNwZWN0b3IuY29tcGxldGVVUkwodGhpcy5fdXJsLCBocmVmVmFsdWUpOwor
ICAgIH0sCisKKyAgICByZXNpemU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3Jl
cGFpbnRBbGwoKTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5r
ID0gZnVuY3Rpb24odGV4dEVkaXRvciwgc3RhcnRMaW5lLCBlbmRMaW5lKQoreworICAgIHRoaXMu
X3RleHRFZGl0b3IgPSB0ZXh0RWRpdG9yOworICAgIHRoaXMuX3RleHRNb2RlbCA9IHRleHRFZGl0
b3IuX3RleHRNb2RlbDsKKworICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOworICAgIHRoaXMuZWxlbWVudC5saW5lTnVtYmVyID0gc3RhcnRMaW5lOworICAg
IHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtY29udGVudCI7CisKKyAgICB0
aGlzLnN0YXJ0TGluZSA9IHN0YXJ0TGluZTsKKyAgICBlbmRMaW5lID0gTWF0aC5taW4odGhpcy5f
dGV4dE1vZGVsLmxpbmVzQ291bnQsIGVuZExpbmUpOworICAgIHRoaXMubGluZXNDb3VudCA9IGVu
ZExpbmUgLSBzdGFydExpbmU7CisKKyAgICB0aGlzLl9leHBhbmRlZCA9IGZhbHNlOworCisgICAg
dmFyIGxpbmVzID0gW107CisgICAgZm9yICh2YXIgaSA9IHN0YXJ0TGluZTsgaSA8IGVuZExpbmU7
ICsraSkgeworICAgICAgICBsaW5lcy5wdXNoKHRoaXMuX3RleHRNb2RlbC5saW5lKGkpKTsKKyAg
ICB9CisKKyAgICB0aGlzLmVsZW1lbnQudGV4dENvbnRlbnQgPSBsaW5lcy5qb2luKCJcbiIpOwor
CisgICAgLy8gVGhlIGxhc3QgZW1wdHkgbGluZSB3aWxsIGdldCBzd2FsbG93ZWQgb3RoZXJ3aXNl
LgorICAgIGlmICghbGluZXNbbGluZXMubGVuZ3RoIC0gMV0pCisgICAgICAgIHRoaXMuZWxlbWVu
dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKK30KKworV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlID0geworICAgIGFkZERlY29yYXRp
b246IGZ1bmN0aW9uKGRlY29yYXRpb24pCisgICAgeworICAgICAgICBpZiAodHlwZW9mIGRlY29y
YXRpb24gPT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVD
bGFzcyhkZWNvcmF0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIXRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQpIHsKKyAgICAgICAgICAgIHRo
aXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQu
ZGVjb3JhdGlvbnNFbGVtZW50KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLmVsZW1lbnQuZGVj
b3JhdGlvbnNFbGVtZW50LmFwcGVuZENoaWxkKGRlY29yYXRpb24pOworICAgIH0sCisKKyAgICBy
ZW1vdmVEZWNvcmF0aW9uOiBmdW5jdGlvbihkZWNvcmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYg
KHR5cGVvZiBkZWNvcmF0aW9uID09PSAic3RyaW5nIikgeworICAgICAgICAgICAgdGhpcy5lbGVt
ZW50LnJlbW92ZVN0eWxlQ2xhc3MoZGVjb3JhdGlvbik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50KQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVt
ZW50LnJlbW92ZUNoaWxkKGRlY29yYXRpb24pOworICAgIH0sCisKKyAgICBnZXQgZXhwYW5kZWQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkOworICAgIH0sCisKKyAgICBz
ZXQgZXhwYW5kZWQoZXhwYW5kZWQpCisgICAgeworICAgICAgICBpZiAodGhpcy5fZXhwYW5kZWQg
PT09IGV4cGFuZGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX2V4cGFu
ZGVkID0gZXhwYW5kZWQ7CisKKyAgICAgICAgaWYgKHRoaXMubGluZXNDb3VudCA9PT0gMSkgewor
ICAgICAgICAgICAgaWYgKGV4cGFuZGVkKQorICAgICAgICAgICAgICAgIHRoaXMuX3RleHRFZGl0
b3IuX3BhaW50TGluZSh0aGlzLmVsZW1lbnQsIHRoaXMuc3RhcnRMaW5lKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChleHBhbmRlZCkgeworICAgICAgICAg
ICAgdGhpcy5fZXhwYW5kZWRMaW5lUm93cyA9IFtdOworICAgICAgICAgICAgdmFyIHBhcmVudEVs
ZW1lbnQgPSB0aGlzLmVsZW1lbnQucGFyZW50RWxlbWVudDsKKyAgICAgICAgICAgIGZvciAodmFy
IGkgPSB0aGlzLnN0YXJ0TGluZTsgaSA8IHRoaXMuc3RhcnRMaW5lICsgdGhpcy5saW5lc0NvdW50
OyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX2NyZWF0ZVJvdyhp
KTsKKyAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShsaW5lUm93LCB0
aGlzLmVsZW1lbnQpOworICAgICAgICAgICAgICAgIHRoaXMuX2V4cGFuZGVkTGluZVJvd3MucHVz
aChsaW5lUm93KTsKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLl9wYWludExpbmUo
bGluZVJvdywgaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJlbnRFbGVtZW50LnJl
bW92ZUNoaWxkKHRoaXMuZWxlbWVudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2
YXIgZWxlbWVudEluc2VydGVkID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHRoaXMuX2V4cGFuZGVkTGluZVJvd3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgbGluZVJvdyA9IHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbaV07CisgICAgICAgICAgICAg
ICAgdmFyIHBhcmVudEVsZW1lbnQgPSBsaW5lUm93LnBhcmVudEVsZW1lbnQ7CisgICAgICAgICAg
ICAgICAgaWYgKHBhcmVudEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlbGVt
ZW50SW5zZXJ0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRJbnNlcnRlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50Lmluc2VydEJlZm9y
ZSh0aGlzLmVsZW1lbnQsIGxpbmVSb3cpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuX3RleHRFZGl0b3IuX3JlbGVhc2VMaW5lc0hpZ2hsaWdodChsaW5l
Um93KTsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChsaW5l
Um93KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWxl
dGUgdGhpcy5fZXhwYW5kZWRMaW5lUm93czsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBnZXQg
aGVpZ2h0KCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fZXhwYW5kZWRMaW5lUm93cykKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0OworICAgICAgICB2YXIg
cmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9leHBhbmRlZExp
bmVSb3dzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX2V4
cGFuZGVkTGluZVJvd3NbaV07CisgICAgICAgICAgICByZXN1bHQgKz0gbGluZVJvdy5vZmZzZXRI
ZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9LAorCisgICAg
Z2V0RXhwYW5kZWRMaW5lUm93OiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAg
aWYgKCF0aGlzLl9leHBhbmRlZCB8fCBsaW5lTnVtYmVyIDwgdGhpcy5zdGFydExpbmUgfHwgbGlu
ZU51bWJlciA+PSB0aGlzLnN0YXJ0TGluZSArIHRoaXMubGluZXNDb3VudCkKKyAgICAgICAgICAg
IHJldHVybiBudWxsOworICAgICAgICBpZiAoIXRoaXMuX2V4cGFuZGVkTGluZVJvd3MpCisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50OworICAgICAgICByZXR1cm4gdGhpcy5fZXhwYW5k
ZWRMaW5lUm93c1tsaW5lTnVtYmVyIC0gdGhpcy5zdGFydExpbmVdOworICAgIH0sCisKKyAgICBf
Y3JlYXRlUm93OiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgdmFyIGxpbmVS
b3cgPSB0aGlzLl90ZXh0RWRpdG9yLl9jYWNoZWRSb3dzLnBvcCgpIHx8IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBsaW5lUm93LmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVy
OworICAgICAgICBsaW5lUm93LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1jb250ZW50IjsKKyAg
ICAgICAgbGluZVJvdy50ZXh0Q29udGVudCA9IHRoaXMuX3RleHRNb2RlbC5saW5lKGxpbmVOdW1i
ZXIpOworICAgICAgICBpZiAoIWxpbmVSb3cudGV4dENvbnRlbnQpCisgICAgICAgICAgICBsaW5l
Um93LmlubmVySFRNTCA9ICI8YnI+IjsKKyAgICAgICAgcmV0dXJuIGxpbmVSb3c7CisgICAgfQor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0Vmll
d2VyLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdGV4dFZpZXdlci5j
c3MKaW5kZXggYmVlOWZlNWMzOTUwYWQwNDgzOWY3OWEwNWI4M2JiMDY5ZWU0NDQzMS4uZDQxNjEy
Nzk4NjViZWZhYTcwMWY1MDQ0ZTY5MjY4N2JmNzU0NmI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0Vmlld2VyLmNzcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRWaWV3ZXIuY3NzCkBAIC0xNjcsOCArMTY3LDM4
IEBACiAud2Via2l0LWhpZ2hsaWdodGVkLWxpbmUgLndlYmtpdC1saW5lLWNvbnRlbnQgewogICAg
IC13ZWJraXQtYW5pbWF0aW9uOiAiZmFkZW91dCIgMnMgMHM7CiB9CisvKiBGSVhNRTogUmVtb3Zl
IHRoZSBhYm92ZSBydWxlIHVzZWQgYnkgVGV4dFZpZXdlci4gKi8KKy53ZWJraXQtaGlnaGxpZ2h0
ZWQtbGluZS53ZWJraXQtbGluZS1jb250ZW50IHsKKyAgICAtd2Via2l0LWFuaW1hdGlvbjogImZh
ZGVvdXQiIDJzIDBzOworfQogCiBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZW91dCB7CiAgICAgZnJv
bSB7YmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAxMjApOyB9CiAgICAgdG8geyBiYWNr
Z3JvdW5kLWNvbG9yOiB3aGl0ZTsgfQogfQorCisvKioKKyAqIEV4cGVyaW1lbnRhbCBzdHlsZXMg
Zm9yIHRleHQgZWRpdG9yLgorICogRklYTUU6IFJlbW92ZSBDU1Mgc3R5bGVzIHVzZWQgYnkgVGV4
dFZpZXdlci4KKyAqLworLmVkaXRvci1saW5lLW51bWJlcnMgeworICBvdmVyZmxvdzogaGlkZGVu
OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMDsKKyAgbGVmdDogMDsKKyAgYm90dG9t
OiAwOworfQorCisuZWRpdG9yLWxpbmUtY29udGVudHMgeworICBwb3NpdGlvbjogYWJzb2x1dGU7
CisgIHRvcDogMDsKKyAgbGVmdDogMnB4OworICByaWdodDogMDsKKyAgYm90dG9tOiAwOworICBv
dmVyZmxvdzogYXV0bzsKKyAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDsKK30KKworLmVkaXRv
ci1jb250ZW50LWVkaXRhYmxlIHsKKyAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC13cml0ZS1w
bGFpbnRleHQtb25seTsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>