<?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>53299</bug_id>
          
          <creation_ts>2011-01-28 06:28:00 -0800</creation_ts>
          <short_desc>Web Inspector: Use DIVs instead of TABLE in TextViewer</short_desc>
          <delta_ts>2011-02-02 06:26:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>53588</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Andrey Adaikin">aandrey</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aandrey</cc>
    
    <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>podivilov</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>341416</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2011-01-28 06:28:00 -0800</bug_when>
    <thetext>Migrate TextViewer from TABLE to DIV.
  TextViewer is now build on top of a TABLE, so that one row contains the gutter&apos;s line number and the text content.
  Pros: gutter and content rows&apos; heights are always in sync.
  Cons: gutter disappears when you scroll from left to the right, empty TABLE rows are not selected in the UI and native copy of a text selection to the clipboard will contain gutter&apos;s line numbers (we intercept copy and beforecopy events to prevent that).
  We should migrate from TABLE to DIV and decouple gutter and main panels. Things to take into account:
  - Implement on top of TextViewer, hide new editor functionality under a flag.
  - Live Editing should still work.
  - Sync gutter and content rows&apos; heights.
  - Should be no significant performance regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341421</commentid>
    <comment_count>1</comment_count>
      <attachid>80444</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2011-01-28 06:38:38 -0800</bug_when>
    <thetext>Created attachment 80444
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342572</commentid>
    <comment_count>2</comment_count>
      <attachid>80444</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-01-31 07:44:50 -0800</bug_when>
    <thetext>Comment on attachment 80444
Patch

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

This change needs further splitting. Otherwise, it is hard to follow.

&gt; Source/WebCore/inspector/front-end/Settings.js:34
&gt; +    sourceEditorEnabled: false,

Is this change relevant?

&gt; Source/WebCore/inspector/front-end/SourceFrame.js:-212
&gt; -        if (this._canEditScripts)

Where did this go?

&gt; Source/WebCore/inspector/front-end/SourceFrame.js:853
&gt; +        if (!Preferences.canEditScriptSource || !this._isScript || Preferences.sourceEditorEnabled)

I think it is too early to introduce sourceEditorEnable switch.

&gt; Source/WebCore/inspector/front-end/TextViewer.js:-44
&gt; -    this.element.addEventListener(&quot;beforecopy&quot;, this._beforeCopy.bind(this), false);

Where did these go?

&gt; Source/WebCore/inspector/front-end/TextViewer.js:46
&gt; +    var mainElm = this._mainPanel.element;

Do not abbreviate (&quot;mainElement&quot;)

&gt; Source/WebCore/inspector/front-end/TextViewer.js:47
&gt; +    mainElm.addEventListener(&quot;scroll&quot;, this._syncScroll.bind(this), false);

It would be nice to encapsulate these since they serve same goal. Also, you might want to bind once.

&gt; Source/WebCore/inspector/front-end/TextViewer.js:52
&gt; +    // FIXME: Remove old live editing functionality and Preferences.sourceEditorEnabled flag.

ditto (too early)

&gt; Source/WebCore/inspector/front-end/TextViewer.js:75
&gt; +        this._mainPanel.addDecoration(lineNumber, decoration);

Why is this code getting more complex?

&gt; Source/WebCore/inspector/front-end/TextViewer.js:84
&gt; +        this._mainPanel.removeDecoration(lineNumber, decoration);

ditto

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

Did this method change? It is nearly impossible to track changes in this diff. Can we please split it into a series of refactorings?

&gt; Source/WebCore/inspector/front-end/TextViewer.js:236
&gt; +//==================================================================================================

No comments like this in WebKit please.

&gt; Source/WebCore/inspector/front-end/TextViewer.js:237
&gt; +// WebInspector.TextEditorChunkedPanel

ditto

&gt; Source/WebCore/inspector/front-end/TextViewer.js:421
&gt; +//==================================================================================================

ditto

&gt; Source/WebCore/inspector/front-end/TextViewer.js:458
&gt; +//==================================================================================================

ditto

&gt; Source/WebCore/inspector/front-end/TextViewer.js:-341
&gt; -        var offset = 0;

Why did this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343103</commentid>
    <comment_count>3</comment_count>
      <attachid>80734</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2011-02-01 03:01:42 -0800</bug_when>
    <thetext>Created attachment 80734
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343105</commentid>
    <comment_count>4</comment_count>
      <attachid>80444</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2011-02-01 03:11:26 -0800</bug_when>
    <thetext>Comment on attachment 80444
Patch

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

&gt;&gt; Source/WebCore/inspector/front-end/Settings.js:34
&gt;&gt; +    sourceEditorEnabled: false,
&gt; 
&gt; Is this change relevant?

I removed this flag for now

&gt;&gt; Source/WebCore/inspector/front-end/SourceFrame.js:-212
&gt;&gt; -        if (this._canEditScripts)
&gt; 
&gt; Where did this go?

This is a dead code, I just could not pass by :) revert it?

&gt;&gt; Source/WebCore/inspector/front-end/SourceFrame.js:853
&gt;&gt; +        if (!Preferences.canEditScriptSource || !this._isScript || Preferences.sourceEditorEnabled)
&gt; 
&gt; I think it is too early to introduce sourceEditorEnable switch.

reverted

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:-44
&gt;&gt; -    this.element.addEventListener(&quot;beforecopy&quot;, this._beforeCopy.bind(this), false);
&gt; 
&gt; Where did these go?

We do not have to override beforecopy/copy now - the native copy works just fine. It did not before, because we had TABLE and text selection would include line numbers as well. The only thing is decorations: they also will be included in the text selection, if they are selected (although I use CSS style &quot;-webkit-user-selection: none&quot;). Is this OK?

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:46
&gt;&gt; +    var mainElm = this._mainPanel.element;
&gt; 
&gt; Do not abbreviate (&quot;mainElement&quot;)

done

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:47
&gt;&gt; +    mainElm.addEventListener(&quot;scroll&quot;, this._syncScroll.bind(this), false);
&gt; 
&gt; It would be nice to encapsulate these since they serve same goal. Also, you might want to bind once.

done

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:52
&gt;&gt; +    // FIXME: Remove old live editing functionality and Preferences.sourceEditorEnabled flag.
&gt; 
&gt; ditto (too early)

done

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:75
&gt;&gt; +        this._mainPanel.addDecoration(lineNumber, decoration);
&gt; 
&gt; Why is this code getting more complex?

Because, for example, we want to add the &quot;webkit-execution-line&quot; class name to both gutter and main panel lines/chunks.

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:112
&gt;&gt; +    _handleKeyDown: function()
&gt; 
&gt; Did this method change? It is nearly impossible to track changes in this diff. Can we please split it into a series of refactorings?

this particular method did not change

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:236
&gt;&gt; +//==================================================================================================
&gt; 
&gt; No comments like this in WebKit please.

done

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:237
&gt;&gt; +// WebInspector.TextEditorChunkedPanel
&gt; 
&gt; ditto

done

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:-341
&gt;&gt; -        var offset = 0;
&gt; 
&gt; Why did this change?

This was changed only slightly and still preserved in the _repaintAll method (see above).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343184</commentid>
    <comment_count>5</comment_count>
      <attachid>80754</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2011-02-01 06:20:01 -0800</bug_when>
    <thetext>Created attachment 80754
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343201</commentid>
    <comment_count>6</comment_count>
      <attachid>80754</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-01 06:47:25 -0800</bug_when>
    <thetext>Comment on attachment 80754
Patch

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

Few minor nits, otherwise looks good.

&gt; Source/WebCore/inspector/front-end/TextViewer.js:41
&gt;      this.element.addEventListener(&quot;keydown&quot;, this._handleKeyDown.bind(this), false);

Why is this registered not in the this._mainPanel?

&gt; Source/WebCore/inspector/front-end/TextViewer.js:48
&gt; +    this._mainPanel.syncScrollListener = this._syncScroll.bind(this);

Can we pass these as constructor parameters instead? (they are not re-assignable, right?)

&gt; Source/WebCore/inspector/front-end/TextViewer.js:166
&gt; +        if (lineNumber &gt;= this._textModel.linesCount)

Can this actually happen?

&gt; Source/WebCore/inspector/front-end/TextViewer.js:572
&gt; +    this.element.addEventListener(&quot;DOMCharacterDataModified&quot;, this._handleDomUpdates.bind(this), false);

should be handleDOMUpdates. Again, do you want to reuse the bound instance?

&gt; Source/WebCore/inspector/front-end/TextViewer.js:898
&gt; +                this._syncDecorationsForLineListener(lineRow.lineNumber);

This does not look robust. Are you sure you need it?

&gt; Source/WebCore/inspector/front-end/TextViewer.js:930
&gt; +        this.element.appendChild(document.createElement(&quot;br&quot;));

Will this affect drag&apos;n&apos;drop / copy?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343930</commentid>
    <comment_count>7</comment_count>
      <attachid>80754</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2011-02-02 03:09:57 -0800</bug_when>
    <thetext>Comment on attachment 80754
Patch

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

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:41
&gt;&gt;      this.element.addEventListener(&quot;keydown&quot;, this._handleKeyDown.bind(this), false);
&gt; 
&gt; Why is this registered not in the this._mainPanel?

done. also, seems like this event can be dropped out as well (not doing this in the CL)

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:48
&gt;&gt; +    this._mainPanel.syncScrollListener = this._syncScroll.bind(this);
&gt; 
&gt; Can we pass these as constructor parameters instead? (they are not re-assignable, right?)

done

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:166
&gt;&gt; +        if (lineNumber &gt;= this._textModel.linesCount)
&gt; 
&gt; Can this actually happen?

theoretically yes, provided that this method is called asynchronously

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:572
&gt;&gt; +    this.element.addEventListener(&quot;DOMCharacterDataModified&quot;, this._handleDomUpdates.bind(this), false);
&gt; 
&gt; should be handleDOMUpdates. Again, do you want to reuse the bound instance?

http://webkit.org/coding/coding-style.html: Lower-case the first letter, including all letters in an acronym, in a variable or function name.

reused the bound instance.

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:898
&gt;&gt; +                this._syncDecorationsForLineListener(lineRow.lineNumber);
&gt; 
&gt; This does not look robust. Are you sure you need it?

Yes. I added the following comment:
  // Wait until this event is processed and only then sync the sizes. This is necessary in
  // case of the DOMNodeRemoved event, because it is dispatched before the removal takes place.
(see http://www.w3.org/TR/DOM-Level-3-Events/#event-type-DOMNodeRemoved)

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:930
&gt;&gt; +        this.element.appendChild(document.createElement(&quot;br&quot;));
&gt; 
&gt; Will this affect drag&apos;n&apos;drop / copy?

Nope. In fact, this is exactly what the browser would do, if you make an empty line in a content editable DIVs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343932</commentid>
    <comment_count>8</comment_count>
      <attachid>80907</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2011-02-02 03:12:38 -0800</bug_when>
    <thetext>Created attachment 80907
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343933</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-02 03:15:41 -0800</bug_when>
    <thetext>Attachment 80907 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 2

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LANG = &quot;en_US.US-ASCII&quot;
    are supported and installed on your system.
perl: warning: Falling back to the standard locale (&quot;C&quot;).
Updating OpenSource
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LANG = &quot;en_US.US-ASCII&quot;
    are supported and installed on your system.
perl: warning: Falling back to the standard locale (&quot;C&quot;).
RA layer request failed: OPTIONS of &apos;http://svn.webkit.org/repository/webkit&apos;: could not connect to server (http://svn.webkit.org) at /usr/lib/git-core/git-svn line 2295

Died at Tools/Scripts/update-webkit line 132.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343934</commentid>
    <comment_count>10</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-02 03:20:52 -0800</bug_when>
    <thetext>&gt;&gt;&gt;&gt; should be handleDOMUpdates. Again, do you want to reuse the bound instance?

&gt;&gt; http://webkit.org/coding/coding-style.html: Lower-case the first letter,
&gt;&gt; including all letters in an acronym, in a variable or function name.

should be:
handleDOMUpdates or
domUpdatesHandler

I think your quote refers to the second case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343944</commentid>
    <comment_count>11</comment_count>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2011-02-02 04:58:14 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt;&gt;&gt;&gt; should be handleDOMUpdates. Again, do you want to reuse the bound instance?
&gt; 
&gt; &gt;&gt; http://webkit.org/coding/coding-style.html: Lower-case the first letter,
&gt; &gt;&gt; including all letters in an acronym, in a variable or function name.
&gt; 
&gt; should be:
&gt; handleDOMUpdates or
&gt; domUpdatesHandler
&gt; 
&gt; I think your quote refers to the second case.

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343946</commentid>
    <comment_count>12</comment_count>
      <attachid>80911</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2011-02-02 04:58:56 -0800</bug_when>
    <thetext>Created attachment 80911
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343947</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-02 05:01:19 -0800</bug_when>
    <thetext>Attachment 80911 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 2

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LANG = &quot;en_US.US-ASCII&quot;
    are supported and installed on your system.
perl: warning: Falling back to the standard locale (&quot;C&quot;).
Updating OpenSource
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LANG = &quot;en_US.US-ASCII&quot;
    are supported and installed on your system.
perl: warning: Falling back to the standard locale (&quot;C&quot;).
RA layer request failed: OPTIONS of &apos;http://svn.webkit.org/repository/webkit&apos;: could not connect to server (http://svn.webkit.org) at /usr/lib/git-core/git-svn line 2295

Died at Tools/Scripts/update-webkit line 132.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343953</commentid>
    <comment_count>14</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-02 06:09:23 -0800</bug_when>
    <thetext>Committed r77375: &lt;http://trac.webkit.org/changeset/77375&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80444</attachid>
            <date>2011-01-28 06:38:38 -0800</date>
            <delta_ts>2011-02-01 03:11:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53299-20110128173835.patch</filename>
            <type>text/plain</type>
            <size>60174</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwZjY5MDBhZGVhMmFlMzRhZDFiZmQyZWZmN2ZhY2NkMDI1MTNlMTI5Li5j
YzgyMDFlNTI2NzBlNDZmMTY5YWIzYWY4Mjc2YWNlZjljYzMwNDRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsOTcgQEAKKzIwMTEtMDEtMjggIEFuZHJleSBBZGFpa2luICA8YWFuZHJleUBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdl
YiBJbnNwZWN0b3I6IFVzZSBESVZzIGluc3RlYWQgb2YgVEFCTEUgaW4gVGV4dFZpZXdlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMyOTkKKworICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanM6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUuX2NyZWF0ZVRleHRWaWV3ZXIpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fbW91c2VEb3duKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZp
ZXdlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuc2V0IG1p
bWVUeXBlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5yZXZl
YWxMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5hZGRE
ZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5y
ZW1vdmVEZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3Rv
dHlwZS5tYXJrQW5kUmV2ZWFsUmFuZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3
ZXIucHJvdG90eXBlLmhpZ2hsaWdodExpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRW
aWV3ZXIucHJvdG90eXBlLmNsZWFyTGluZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuZnJlZUNhY2hlZEVsZW1lbnRzKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5faGFuZGxlS2V5RG93bik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuZWRpdExpbmUuZmluaXNoRWRpdGlu
Zyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuZWRpdExpbmUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLmJlZ2luVXBkYXRl
cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuZW5kVXBkYXRl
cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUucmVzaXplKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5fdGV4dENoYW5nZWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl91cGRhdGVQYW5l
bE9mZnNldHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl9z
eW5jU2Nyb2xsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5f
c3luY0RlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3Rv
dHlwZS5fc3luY0RlY29yYXRpb25zRm9yTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvckNodW5rZWRQYW5lbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNo
dW5rZWRQYW5lbC5wcm90b3R5cGUuZ2V0IHRleHRNb2RlbCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuYWRkRGVjb3JhdGlvbik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUucmVtb3Zl
RGVjb3JhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5l
bC5wcm90b3R5cGUucmV2ZWFsTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ckNodW5rZWRQYW5lbC5wcm90b3R5cGUubWFrZUxpbmVBQ2h1bmspOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLnRleHRDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5iZWdp
blVwZGF0ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwu
cHJvdG90eXBlLmVuZFVwZGF0ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JD
aHVua2VkUGFuZWwucHJvdG90eXBlLnJlc2l6ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX3Njcm9sbCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX3NjaGVkdWxlUmVwYWludEFs
bCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5
cGUuX2J1aWxkQ2h1bmtzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtl
ZFBhbmVsLnByb3RvdHlwZS5fcmVwYWludEFsbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX2NodW5rTnVtYmVyRm9yTGluZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX2NodW5r
Rm9yTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlclBhbmVsKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFuZWwucHJvdG90eXBlLmZy
ZWVDYWNoZWRFbGVtZW50cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRl
clBhbmVsLnByb3RvdHlwZS5fY3JlYXRlTmV3Q2h1bmspOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JHdXR0ZXJQYW5lbC5wcm90b3R5cGUuX2V4cGFuZENodW5rcyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsucHJvdG90eXBlLmdldCBleHBhbmRlZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rLnByb3RvdHlwZS5zZXQgZXhw
YW5kZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuay5wcm90
b3R5cGUuZ2V0IGhlaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRl
ckNodW5rLnByb3RvdHlwZS5fY3JlYXRlUm93KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTWFpblBhbmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBh
bmVsLnByb3RvdHlwZS5zZXQgbWltZVR5cGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLm1hcmtBbmRSZXZlYWxSYW5nZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuaGlnaGxpZ2h0TGluZSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuY2xl
YXJMaW5lSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBh
bmVsLnByb3RvdHlwZS5mcmVlQ2FjaGVkRWxlbWVudHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9idWlsZENodW5rcyk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2NyZWF0ZU5ld0NodW5r
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5f
ZXhwYW5kQ2h1bmtzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVs
LnByb3RvdHlwZS5faGlnaGxpZ2h0RGF0YVJlYWR5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
ZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcGFpbnRMaW5lcyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3BhaW50TGluZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3JlbGVhc2VM
aW5lc0hpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5l
bC5wcm90b3R5cGUuX2dldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3Jlc3RvcmVTZWxlY3Rpb24pOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9zZWxlY3Rpb25Ub1Bvc2l0
aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlw
ZS5fcG9zaXRpb25Ub1NlbGVjdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ck1haW5QYW5lbC5wcm90b3R5cGUuX2FwcGVuZFRleHROb2RlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcmV3cml0ZUhyZWYpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmspOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlLmFkZERlY29yYXRpb24pOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlLnNldCBleHBhbmRl
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUu
Z2V0IGhlaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuay5w
cm90b3R5cGUuZ2V0RXhwYW5kZWRMaW5lUm93KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5fY3JlYXRlUm93KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL3RleHRWaWV3ZXIuY3NzOgorICAgICAgICAoLnRleHQtZWRpdG9yLWxpbmVz
KToKKyAgICAgICAgKC50ZXh0LWVkaXRvci1jb250ZW50cyk6CisgICAgICAgICgudGV4dC1lZGl0
b3ItZWRpdGFibGUpOgorICAgICAgICAoLndlYmtpdC1saW5lLWRlY29yYXRpb25zKToKKyAgICAg
ICAgKC53ZWJraXQtbGluZS1udW1iZXIpOgorICAgICAgICAoLndlYmtpdC1leGVjdXRpb24tbGlu
ZS53ZWJraXQtbGluZS1jb250ZW50KToKKyAgICAgICAgKC5kaWZmLWNvbnRhaW5lciAud2Via2l0
LWFkZGVkLWxpbmUud2Via2l0LWxpbmUtY29udGVudCk6CisgICAgICAgICguZGlmZi1jb250YWlu
ZXIgLndlYmtpdC1yZW1vdmVkLWxpbmUud2Via2l0LWxpbmUtY29udGVudCk6CisgICAgICAgICgu
ZGlmZi1jb250YWluZXIgLndlYmtpdC1jaGFuZ2VkLWxpbmUud2Via2l0LWxpbmUtY29udGVudCk6
CisgICAgICAgICgud2Via2l0LWhpZ2hsaWdodGVkLWxpbmUud2Via2l0LWxpbmUtY29udGVudCk6
CisKIDIwMTEtMDEtMjUgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1bHplLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMKaW5kZXggZTI2YjFkN2MyNTBmNjhmOTNm
YjNiMDMyNTkyNmFjNzI4NWZlOTM5Yy4uMGM0Zjk1MDY1ZWNmZDllZTIzY2Y2MGRkZGYwN2ZlZjU2
MDU2ZjgzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9T
ZXR0aW5ncy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRp
bmdzLmpzCkBAIC0zMSw2ICszMSw3IEBACiAKIHZhciBQcmVmZXJlbmNlcyA9IHsKICAgICBjYW5F
ZGl0U2NyaXB0U291cmNlOiBmYWxzZSwKKyAgICBzb3VyY2VFZGl0b3JFbmFibGVkOiBmYWxzZSwK
ICAgICBtYXhJbmxpbmVUZXh0Q2hpbGRMZW5ndGg6IDgwLAogICAgIG1pbkNvbnNvbGVIZWlnaHQ6
IDc1LAogICAgIG1pblNpZGViYXJXaWR0aDogMTAwLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKaW5kZXggY2UzNTMxZmFhZjI4MGY0N2Iy
ZTU5MzA3Nzg4NWEyNTc0NTE0NGY5ZC4uZWUxYmE2N2Y1MzcxNGYzOGM0MTBlNjEwY2EyZGQ5ZWJl
ZTA0NTU4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9T
b3VyY2VGcmFtZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nv
dXJjZUZyYW1lLmpzCkBAIC0yMDgsOSArMjA4LDYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1l
LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5lbmRVcGRhdGVzKCk7CiAK
ICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludEFkZGVkLCB0aGlzLl9icmVh
a3BvaW50QWRkZWQsIHRoaXMpOwotCi0gICAgICAgIGlmICh0aGlzLl9jYW5FZGl0U2NyaXB0cykK
LSAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuZWRpdENhbGxiYWNrID0gdGhpcy5fZWRpdExp
bmUuYmluZCh0aGlzKTsKICAgICB9LAogCiAgICAgX3NldFRleHRWaWV3ZXJEZWNvcmF0aW9uczog
ZnVuY3Rpb24oKQpAQCAtNTI2LDcgKzUyMyw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQuZW5jbG9zaW5n
Tm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWxpbmUtbnVtYmVyIik7CiAgICAgICAgIGlmICgh
dGFyZ2V0KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgdGV4dFZpZXdlckxpbmVO
dW1iZXIgPSB0YXJnZXQucGFyZW50RWxlbWVudC5saW5lTnVtYmVyOworICAgICAgICB2YXIgdGV4
dFZpZXdlckxpbmVOdW1iZXIgPSB0YXJnZXQubGluZU51bWJlcjsKICAgICAgICAgdmFyIG9yaWdp
bmFsTGluZU51bWJlciA9IHRoaXMuX2Zvcm1hdHRlci5mb3JtYXR0ZWRMaW5lTnVtYmVyVG9Pcmln
aW5hbExpbmVOdW1iZXIodGV4dFZpZXdlckxpbmVOdW1iZXIpOwogCiAgICAgICAgIHZhciBjb250
ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUoKTsKQEAgLTU5Miw3ICs1ODks
NyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICB2YXIg
dGFyZ2V0ID0gZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoIndlYmtp
dC1saW5lLW51bWJlciIpOwogICAgICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgdmFyIG9yaWdpbmFsTGluZU51bWJlciA9IHRoaXMuX2Zvcm1hdHRlci5mb3Jt
YXR0ZWRMaW5lTnVtYmVyVG9PcmlnaW5hbExpbmVOdW1iZXIodGFyZ2V0LnBhcmVudEVsZW1lbnQu
bGluZU51bWJlcik7CisgICAgICAgIHZhciBvcmlnaW5hbExpbmVOdW1iZXIgPSB0aGlzLl9mb3Jt
YXR0ZXIuZm9ybWF0dGVkTGluZU51bWJlclRvT3JpZ2luYWxMaW5lTnVtYmVyKHRhcmdldC5saW5l
TnVtYmVyKTsKIAogICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2ZpbmRCcmVha3BvaW50
KG9yaWdpbmFsTGluZU51bWJlcik7CiAgICAgICAgIGlmIChicmVha3BvaW50KSB7CkBAIC04NTAs
MTYgKzg0NywxNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAg
ICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5jb250aW51ZVRvTGluZShzb3VyY2VJRCwg
bGluZU51bWJlciArIDEpOwogICAgIH0sCiAKKyAgICAvLyBGSVhNRTogUmVtb3ZlIG9sZCBsaXZl
IGVkaXRpbmcgZnVuY3Rpb25hbGl0eS4KICAgICBfZG91YmxlQ2xpY2s6IGZ1bmN0aW9uKGV2ZW50
KQogICAgIHsKLSAgICAgICAgaWYgKCFQcmVmZXJlbmNlcy5jYW5FZGl0U2NyaXB0U291cmNlIHx8
ICF0aGlzLl9pc1NjcmlwdCkKKyAgICAgICAgaWYgKCFQcmVmZXJlbmNlcy5jYW5FZGl0U2NyaXB0
U291cmNlIHx8ICF0aGlzLl9pc1NjcmlwdCB8fCBQcmVmZXJlbmNlcy5zb3VyY2VFZGl0b3JFbmFi
bGVkKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50
YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhOb2RlTmFtZSgiVEQiKTsKLSAgICAgICAgaWYg
KCF0YXJnZXQgfHwgdGFyZ2V0LnBhcmVudEVsZW1lbnQuZmlyc3RDaGlsZCA9PT0gdGFyZ2V0KQor
ICAgICAgICB2YXIgbGluZVJvdyA9IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0
aENsYXNzKCJ3ZWJraXQtbGluZS1jb250ZW50Iik7CisgICAgICAgIGlmICghbGluZVJvdykKICAg
ICAgICAgICAgIHJldHVybjsgIC8vIERvIG5vdCB0cmlnZ2VyIGVkaXRpbmcgZnJvbSBsaW5lIG51
bWJlcnMuCiAKLSAgICAgICAgdmFyIGxpbmVSb3cgPSB0YXJnZXQucGFyZW50RWxlbWVudDsKICAg
ICAgICAgdmFyIGxpbmVOdW1iZXIgPSBsaW5lUm93LmxpbmVOdW1iZXI7CiAgICAgICAgIHZhciBz
b3VyY2VJRCA9IHRoaXMuX3NvdXJjZUlERm9yTGluZShsaW5lTnVtYmVyKTsKICAgICAgICAgaWYg
KCFzb3VyY2VJRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvVGV4dFZpZXdlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4
dFZpZXdlci5qcwppbmRleCBlYTM2NTEzMjU5ZDU3MWU5YTNjNGE5NzczMzYyNTQ5ZDgxYTRjMzQ3
Li41YjVlODc4OGI4YWIzNWYyZTU5ZmFjNzU3ZWRmNWZiZTMzMWQ5ZWUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanMKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzCkBAIC0zMiwzNyAr
MzIsMzIgQEAKIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyID0gZnVuY3Rpb24odGV4dE1vZGVsLCBw
bGF0Zm9ybSwgdXJsKQogewogICAgIHRoaXMuX3RleHRNb2RlbCA9IHRleHRNb2RlbDsKLSAgICB0
aGlzLl90ZXh0TW9kZWwuY2hhbmdlTGlzdGVuZXIgPSB0aGlzLl9idWlsZENodW5rcy5iaW5kKHRo
aXMpOwotICAgIHRoaXMuX2hpZ2hsaWdodGVyID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
SGlnaGxpZ2h0ZXIodGhpcy5fdGV4dE1vZGVsLCB0aGlzLl9oaWdobGlnaHREYXRhUmVhZHkuYmlu
ZCh0aGlzKSk7CisgICAgdGhpcy5fdGV4dE1vZGVsLmNoYW5nZUxpc3RlbmVyID0gdGhpcy5fdGV4
dENoYW5nZWQuYmluZCh0aGlzKTsKKworICAgIHRoaXMuX21haW5QYW5lbCA9IG5ldyBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbCh0aGlzLl90ZXh0TW9kZWwsIHVybCk7CisgICAgdGhp
cy5fZ3V0dGVyUGFuZWwgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbCh0
aGlzLl90ZXh0TW9kZWwpOwogCiAgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7CiAgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJ0ZXh0LWVkaXRvciBt
b25vc3BhY2UiOwogICAgIHRoaXMuZWxlbWVudC50YWJJbmRleCA9IDA7Ci0KLSAgICB0aGlzLmVs
ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5fc2Nyb2xsLmJpbmQodGhpcyks
IGZhbHNlKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRo
aXMuX2hhbmRsZUtleURvd24uYmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuZWxlbWVudC5h
ZGRFdmVudExpc3RlbmVyKCJiZWZvcmVjb3B5IiwgdGhpcy5fYmVmb3JlQ29weS5iaW5kKHRoaXMp
LCBmYWxzZSk7Ci0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvcHkiLCB0aGlz
Ll9jb3B5LmJpbmQodGhpcyksIGZhbHNlKTsKLQotICAgIHRoaXMuX3VybCA9IHVybDsKLQotICAg
IHRoaXMuX2xpbmVzQ29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRh
YmxlIik7Ci0gICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50LmNsYXNzTmFtZSA9ICJ0ZXh0
LWVkaXRvci1saW5lcyI7Ci0gICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50LnNldEF0dHJp
YnV0ZSgiY2VsbHNwYWNpbmciLCAwKTsKLSAgICB0aGlzLl9saW5lc0NvbnRhaW5lckVsZW1lbnQu
c2V0QXR0cmlidXRlKCJjZWxscGFkZGluZyIsIDApOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRD
aGlsZCh0aGlzLl9saW5lc0NvbnRhaW5lckVsZW1lbnQpOwotCi0gICAgdGhpcy5fZGVmYXVsdENo
dW5rU2l6ZSA9IDUwOwotICAgIHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsID0gMDsKLQotICAg
IHRoaXMuZnJlZUNhY2hlZEVsZW1lbnRzKCk7Ci0gICAgdGhpcy5fYnVpbGRDaHVua3MoKTsKKyAg
ICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fbWFpblBhbmVsLmVsZW1lbnQpOworICAg
IHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9ndXR0ZXJQYW5lbC5lbGVtZW50KTsKKwor
ICAgIHZhciBtYWluRWxtID0gdGhpcy5fbWFpblBhbmVsLmVsZW1lbnQ7CisgICAgbWFpbkVsbS5h
ZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLl9zeW5jU2Nyb2xsLmJpbmQodGhpcyksIGZh
bHNlKTsKKyAgICBtYWluRWxtLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNoYXJhY3RlckRhdGFNb2Rp
ZmllZCIsIHRoaXMuX3N5bmNEZWNvcmF0aW9ucy5iaW5kKHRoaXMpLCBmYWxzZSk7CisgICAgbWFp
bkVsbS5hZGRFdmVudExpc3RlbmVyKCJET01Ob2RlSW5zZXJ0ZWQiLCB0aGlzLl9zeW5jRGVjb3Jh
dGlvbnMuYmluZCh0aGlzKSwgZmFsc2UpOworICAgIG1haW5FbG0uYWRkRXZlbnRMaXN0ZW5lcigi
RE9NTm9kZVJlbW92ZWQiLCB0aGlzLl9zeW5jRGVjb3JhdGlvbnMuYmluZCh0aGlzKSwgZmFsc2Up
OworCisgICAgLy8gRklYTUU6IFJlbW92ZSBvbGQgbGl2ZSBlZGl0aW5nIGZ1bmN0aW9uYWxpdHkg
YW5kIFByZWZlcmVuY2VzLnNvdXJjZUVkaXRvckVuYWJsZWQgZmxhZy4KKyAgICBpZiAoIVByZWZl
cmVuY2VzLnNvdXJjZUVkaXRvckVuYWJsZWQpCisgICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVu
dExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5faGFuZGxlS2V5RG93bi5iaW5kKHRoaXMpLCBmYWxz
ZSk7CiB9CiAKIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAgICBzZXQg
bWltZVR5cGUobWltZVR5cGUpCiAgICAgewotICAgICAgICB0aGlzLl9oaWdobGlnaHRlci5taW1l
VHlwZSA9IG1pbWVUeXBlOworICAgICAgICB0aGlzLl9tYWluUGFuZWwubWltZVR5cGUgPSBtaW1l
VHlwZTsKICAgICB9LAogCiAgICAgZ2V0IHRleHRNb2RlbCgpCkBAIC03Miw4NSArNjcsMjExIEBA
IFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKIAogICAgIHJldmVhbExpbmU6
IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICBpZiAobGluZU51bWJlciA+PSB0
aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICB2YXIgY2h1bmsgPSB0aGlzLl9tYWtlTGluZUFDaHVuayhsaW5lTnVtYmVyKTsKLSAgICAgICAg
Y2h1bmsuZWxlbWVudC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7CisgICAgICAgIHRoaXMuX21h
aW5QYW5lbC5yZXZlYWxMaW5lKGxpbmVOdW1iZXIpOwogICAgIH0sCiAKICAgICBhZGREZWNvcmF0
aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0aW9uKQogICAgIHsKLSAgICAgICAgdmFy
IGNodW5rID0gdGhpcy5fbWFrZUxpbmVBQ2h1bmsobGluZU51bWJlcik7Ci0gICAgICAgIGNodW5r
LmFkZERlY29yYXRpb24oZGVjb3JhdGlvbik7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5hZGRE
ZWNvcmF0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRpb24pOworICAgICAgICBpZiAodHlwZW9mIGRl
Y29yYXRpb24gPT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9n
dXR0ZXJQYW5lbC5tYWtlTGluZUFDaHVuayhsaW5lTnVtYmVyKTsKKyAgICAgICAgICAgIGNodW5r
LmVsZW1lbnQuYWRkU3R5bGVDbGFzcyhkZWNvcmF0aW9uKTsKKyAgICAgICAgfQogICAgIH0sCiAK
ICAgICByZW1vdmVEZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0aW9uKQog
ICAgIHsKLSAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fbWFrZUxpbmVBQ2h1bmsobGluZU51bWJl
cik7Ci0gICAgICAgIGNodW5rLnJlbW92ZURlY29yYXRpb24oZGVjb3JhdGlvbik7CisgICAgICAg
IHRoaXMuX21haW5QYW5lbC5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRpb24p
OworICAgICAgICBpZiAodHlwZW9mIGRlY29yYXRpb24gPT09ICJzdHJpbmciKSB7CisgICAgICAg
ICAgICB2YXIgY2h1bmsgPSB0aGlzLl9ndXR0ZXJQYW5lbC5tYWtlTGluZUFDaHVuayhsaW5lTnVt
YmVyKTsKKyAgICAgICAgICAgIGNodW5rLmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcyhkZWNvcmF0
aW9uKTsKKyAgICAgICAgfQogICAgIH0sCiAKICAgICBtYXJrQW5kUmV2ZWFsUmFuZ2U6IGZ1bmN0
aW9uKHJhbmdlKQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3JhbmdlVG9NYXJrKSB7Ci0gICAg
ICAgICAgICB2YXIgbWFya2VkTGluZSA9IHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0TGluZTsKLSAg
ICAgICAgICAgIHRoaXMuX3JhbmdlVG9NYXJrID0gbnVsbDsKLSAgICAgICAgICAgIHRoaXMuX3Bh
aW50TGluZXMobWFya2VkTGluZSwgbWFya2VkTGluZSArIDEpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHJhbmdlKSB7Ci0gICAgICAgICAgICB0aGlzLl9yYW5nZVRvTWFyayA9IHJhbmdlOwot
ICAgICAgICAgICAgdGhpcy5yZXZlYWxMaW5lKHJhbmdlLnN0YXJ0TGluZSk7Ci0gICAgICAgICAg
ICB0aGlzLl9wYWludExpbmVzKHJhbmdlLnN0YXJ0TGluZSwgcmFuZ2Uuc3RhcnRMaW5lICsgMSk7
Ci0gICAgICAgICAgICBpZiAodGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50KQotICAgICAgICAgICAg
ICAgIHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZGVsZXRlIHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudDsKKyAgICAg
ICAgdGhpcy5fbWFpblBhbmVsLm1hcmtBbmRSZXZlYWxSYW5nZShyYW5nZSk7CiAgICAgfSwKIAog
ICAgIGhpZ2hsaWdodExpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICB0
aGlzLmNsZWFyTGluZUhpZ2hsaWdodCgpOwotICAgICAgICB0aGlzLl9oaWdobGlnaHRlZExpbmUg
PSBsaW5lTnVtYmVyOwotICAgICAgICB0aGlzLnJldmVhbExpbmUobGluZU51bWJlcik7Ci0gICAg
ICAgIHZhciBjaHVuayA9IHRoaXMuX21ha2VMaW5lQUNodW5rKGxpbmVOdW1iZXIpOwotICAgICAg
ICBjaHVuay5hZGREZWNvcmF0aW9uKCJ3ZWJraXQtaGlnaGxpZ2h0ZWQtbGluZSIpOworICAgICAg
ICB0aGlzLl9tYWluUGFuZWwuaGlnaGxpZ2h0TGluZShsaW5lTnVtYmVyKTsKICAgICB9LAogCiAg
ICAgY2xlYXJMaW5lSGlnaGxpZ2h0OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBpZiAodHlw
ZW9mIHRoaXMuX2hpZ2hsaWdodGVkTGluZSA9PT0gIm51bWJlciIpIHsKLSAgICAgICAgICAgIHZh
ciBjaHVuayA9IHRoaXMuX21ha2VMaW5lQUNodW5rKHRoaXMuX2hpZ2hsaWdodGVkTGluZSk7Ci0g
ICAgICAgICAgICBjaHVuay5yZW1vdmVEZWNvcmF0aW9uKCJ3ZWJraXQtaGlnaGxpZ2h0ZWQtbGlu
ZSIpOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2hpZ2hsaWdodGVkTGluZTsKLSAgICAgICAg
fQorICAgICAgICB0aGlzLl9tYWluUGFuZWwuY2xlYXJMaW5lSGlnaGxpZ2h0KCk7CiAgICAgfSwK
IAogICAgIGZyZWVDYWNoZWRFbGVtZW50czogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdGhp
cy5fY2FjaGVkU3BhbnMgPSBbXTsKLSAgICAgICAgdGhpcy5fY2FjaGVkVGV4dE5vZGVzID0gW107
Ci0gICAgICAgIHRoaXMuX2NhY2hlZFJvd3MgPSBbXTsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVs
LmZyZWVDYWNoZWRFbGVtZW50cygpOworICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC5mcmVlQ2Fj
aGVkRWxlbWVudHMoKTsKICAgICB9LAogCi0gICAgX2J1aWxkQ2h1bmtzOiBmdW5jdGlvbigpCisg
ICAgX2hhbmRsZUtleURvd246IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHRoaXMuX2xpbmVz
Q29udGFpbmVyRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOworICAgICAgICBpZiAodGhpcy5fZWRp
dGluZ0xpbmUgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5jdHJs
S2V5IHx8IGV2ZW50LmFsdEtleSkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB0aGlz
Ll90ZXh0Q2h1bmtzID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4
dE1vZGVsLmxpbmVzQ291bnQ7IGkgKz0gdGhpcy5fZGVmYXVsdENodW5rU2l6ZSkgewotICAgICAg
ICAgICAgdmFyIGNodW5rID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0Q2h1bmsodGhpcywgaSwgaSAr
IHRoaXMuX2RlZmF1bHRDaHVua1NpemUpOwotICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rcy5w
dXNoKGNodW5rKTsKLSAgICAgICAgICAgIHRoaXMuX2xpbmVzQ29udGFpbmVyRWxlbWVudC5hcHBl
bmRDaGlsZChjaHVuay5lbGVtZW50KTsKKyAgICAgICAgdmFyIHNjcm9sbFZhbHVlID0gMDsKKyAg
ICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0
LktleXMuVXAuY29kZSkKKyAgICAgICAgICAgIHNjcm9sbFZhbHVlID0gLTE7CisgICAgICAgIGVs
c2UgaWYgKGV2ZW50LmtleUNvZGUgPT0gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5
cy5Eb3duLmNvZGUpCisgICAgICAgICAgICBzY3JvbGxWYWx1ZSA9IDE7CisKKyAgICAgICAgaWYg
KHNjcm9sbFZhbHVlKSB7CisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAg
ICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgICAgICB0aGlzLl9tYWlu
UGFuZWwuZWxlbWVudC5zY3JvbGxCeUxpbmVzKHNjcm9sbFZhbHVlKTsKKyAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHRoaXMuX2luZGV4Q2h1bmtzKCk7Ci0gICAgICAg
IHRoaXMuX2hpZ2hsaWdodGVyLnJlc2V0KCk7Ci0gICAgICAgIHRoaXMuX3JlcGFpbnRBbGwoKTsK
KyAgICAgICAgc2Nyb2xsVmFsdWUgPSAwOworICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0g
V2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5MZWZ0LmNvZGUpCisgICAgICAgICAg
ICBzY3JvbGxWYWx1ZSA9IC00MDsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PSBX
ZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLlJpZ2h0LmNvZGUpCisgICAgICAgICAg
ICBzY3JvbGxWYWx1ZSA9IDQwOworCisgICAgICAgIGlmIChzY3JvbGxWYWx1ZSkgeworICAgICAg
ICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9w
YWdhdGlvbigpOworICAgICAgICAgICAgdGhpcy5fbWFpblBhbmVsLmVsZW1lbnQuc2Nyb2xsTGVm
dCArPSBzY3JvbGxWYWx1ZTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICAvLyBGSVhNRTogUmVt
b3ZlIG9sZCBsaXZlIGVkaXRpbmcgZnVuY3Rpb25hbGl0eS4KKyAgICBlZGl0TGluZTogZnVuY3Rp
b24obGluZVJvdywgY2FsbGJhY2spCisgICAgeworICAgICAgICB2YXIgb2xkQ29udGVudCA9IGxp
bmVSb3cuaW5uZXJIVE1MOworICAgICAgICBmdW5jdGlvbiBmaW5pc2hFZGl0aW5nKGNvbW1pdHRl
ZCwgZSwgbmV3Q29udGVudCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbW1pdHRlZCkK
KyAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXdDb250ZW50KTsKKyAgICAgICAgICAgIGxpbmVS
b3cuaW5uZXJIVE1MID0gb2xkQ29udGVudDsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9lZGl0
aW5nTGluZTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9lZGl0aW5nTGluZSA9IFdlYkluc3Bl
Y3Rvci5zdGFydEVkaXRpbmcobGluZVJvdywgeworICAgICAgICAgICAgY29udGV4dDogbnVsbCwK
KyAgICAgICAgICAgIGNvbW1pdEhhbmRsZXI6IGZpbmlzaEVkaXRpbmcuYmluZCh0aGlzLCB0cnVl
KSwKKyAgICAgICAgICAgIGNhbmNlbEhhbmRsZXI6IGZpbmlzaEVkaXRpbmcuYmluZCh0aGlzLCBm
YWxzZSksCisgICAgICAgICAgICBtdWx0aWxpbmU6IHRydWUKKyAgICAgICAgfSk7CisgICAgfSwK
KworICAgIGJlZ2luVXBkYXRlczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fbWFp
blBhbmVsLmJlZ2luVXBkYXRlcygpOworICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC5iZWdpblVw
ZGF0ZXMoKTsKKyAgICB9LAorCisgICAgZW5kVXBkYXRlczogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdGhpcy5fbWFpblBhbmVsLmVuZFVwZGF0ZXMoKTsKKyAgICAgICAgdGhpcy5fZ3V0dGVy
UGFuZWwuZW5kVXBkYXRlcygpOworICAgIH0sCisKKyAgICByZXNpemU6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5yZXNpemUoKTsKKyAgICAgICAgdGhpcy5fZ3V0
dGVyUGFuZWwucmVzaXplKCk7CisgICAgICAgIHRoaXMuX3VwZGF0ZVBhbmVsT2Zmc2V0cygpOwor
ICAgIH0sCisKKyAgICAvLyBXZWJJbnNwZWN0b3IuVGV4dE1vZGVsIGxpc3RlbmVyCisgICAgX3Rl
eHRDaGFuZ2VkOiBmdW5jdGlvbihvbGRSYW5nZSwgbmV3UmFuZ2UsIG9sZFRleHQsIG5ld1RleHQp
CisgICAgeworICAgICAgICB0aGlzLl9tYWluUGFuZWwudGV4dENoYW5nZWQoKTsKKyAgICAgICAg
dGhpcy5fZ3V0dGVyUGFuZWwudGV4dENoYW5nZWQoKTsKKyAgICAgICAgdGhpcy5fdXBkYXRlUGFu
ZWxPZmZzZXRzKCk7CisgICAgfSwKKworICAgIF91cGRhdGVQYW5lbE9mZnNldHM6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHZhciBsaW5lTnVtYmVyc1dpZHRoID0gdGhpcy5fZ3V0dGVyUGFu
ZWwuZWxlbWVudC5vZmZzZXRXaWR0aDsKKyAgICAgICAgaWYgKGxpbmVOdW1iZXJzV2lkdGgpCisg
ICAgICAgICAgICB0aGlzLl9tYWluUGFuZWwuZWxlbWVudC5zdHlsZS5sZWZ0ID0gKGxpbmVOdW1i
ZXJzV2lkdGggKyAyKSArICJweCI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuX21h
aW5QYW5lbC5lbGVtZW50LnN0eWxlLmxlZnQgPSAiIjsgLy8gVXNlIGRlZmF1bHQgdmFsdWUgc2V0
IGluIENTUy4KKyAgICB9LAorCisgICAgX3N5bmNTY3JvbGw6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIC8vIEFzeW5jIGNhbGwgZHVlIHRvIHBlcmZvcm1hbmNlIHJlYXNvbnMuCisgICAgICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgbWFpbkVsbSA9IHRoaXMu
X21haW5QYW5lbC5lbGVtZW50OworICAgICAgICAgICAgdmFyIGd1dHRlckVsbSA9IHRoaXMuX2d1
dHRlclBhbmVsLmVsZW1lbnQ7CisKKyAgICAgICAgICAgIC8vIEhhbmRsZSBob3Jpem9udGFsIHNj
cm9sbCBiYXIgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbWFpbiBwYW5lbC4KKyAgICAgICAgICAgIGlm
IChndXR0ZXJFbG0ub2Zmc2V0SGVpZ2h0ID4gbWFpbkVsbS5jbGllbnRIZWlnaHQpCisgICAgICAg
ICAgICAgICAgZ3V0dGVyRWxtLnN0eWxlLnBhZGRpbmdCb3R0b20gPSAoZ3V0dGVyRWxtLm9mZnNl
dEhlaWdodCAtIG1haW5FbG0uY2xpZW50SGVpZ2h0KSArICJweCI7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgZ3V0dGVyRWxtLnN0eWxlLnBhZGRpbmdCb3R0b20gPSAiIjsKKwor
ICAgICAgICAgICAgZ3V0dGVyRWxtLnNjcm9sbFRvcCA9IG1haW5FbG0uc2Nyb2xsVG9wOworICAg
ICAgICB9LmJpbmQodGhpcyksIDApOworICAgIH0sCisKKyAgICBfc3luY0RlY29yYXRpb25zOiBm
dW5jdGlvbihlKQorICAgIHsKKyAgICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0OworICAgICAg
ICB2YXIgbGluZVJvdyA9IHRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3ZWJr
aXQtbGluZS1jb250ZW50Iik7CisgICAgICAgIGlmIChsaW5lUm93ID09PSB0YXJnZXQgfHwgIWxp
bmVSb3cgfHwgIWxpbmVSb3cuZGVjb3JhdGlvbnNFbGVtZW50IHx8ICFsaW5lUm93LmRlY29yYXRp
b25zRWxlbWVudC5pc0FuY2VzdG9yKHRhcmdldCkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIC8vIFdhaXQgdW50aWwgdGhpcyBldmVudCBpcyBwcm9jZXNzZWQgYW5kIG9ubHkgdGhlbiBz
eW5jIHRoZSBzaXplcy4KKyAgICAgICAgc2V0VGltZW91dCh0aGlzLl9zeW5jRGVjb3JhdGlvbnNG
b3JMaW5lLmJpbmQodGhpcywgbGluZVJvdy5saW5lTnVtYmVyKSwgMCk7CisgICAgfSwKKworICAg
IF9zeW5jRGVjb3JhdGlvbnNGb3JMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAg
ICAgICAgaWYgKGxpbmVOdW1iZXIgPj0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIG1haW5DaHVuayA9IHRoaXMuX21haW5QYW5l
bC5tYWtlTGluZUFDaHVuayhsaW5lTnVtYmVyKTsKKyAgICAgICAgdmFyIGd1dHRlckNodW5rID0g
dGhpcy5fZ3V0dGVyUGFuZWwubWFrZUxpbmVBQ2h1bmsobGluZU51bWJlcik7CisgICAgICAgIGd1
dHRlckNodW5rLmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gbWFpbkNodW5rLmVsZW1lbnQub2Zmc2V0
SGVpZ2h0ICsgInB4IjsKKyAgICB9Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KKy8vIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsCisK
K1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsID0gZnVuY3Rpb24odGV4dE1vZGVs
KQoreworICAgIHRoaXMuX3RleHRNb2RlbCA9IHRleHRNb2RlbDsKKworICAgIHRoaXMuX2RlZmF1
bHRDaHVua1NpemUgPSA1MDsKKyAgICB0aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbCA9IDA7Cit9
CisKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZSA9IHsKKyAg
ICBnZXQgdGV4dE1vZGVsKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl90ZXh0TW9kZWw7
CisgICAgfSwKKworICAgIGFkZERlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGRlY29y
YXRpb24pCisgICAgeworICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLm1ha2VMaW5lQUNodW5rKGxp
bmVOdW1iZXIpOworICAgICAgICBjaHVuay5hZGREZWNvcmF0aW9uKGRlY29yYXRpb24pOwogICAg
IH0sCiAKLSAgICBfbWFrZUxpbmVBQ2h1bms6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgcmVt
b3ZlRGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgZGVjb3JhdGlvbikKKyAgICB7Cisg
ICAgICAgIHZhciBjaHVuayA9IHRoaXMubWFrZUxpbmVBQ2h1bmsobGluZU51bWJlcik7CisgICAg
ICAgIGNodW5rLnJlbW92ZURlY29yYXRpb24oZGVjb3JhdGlvbik7CisgICAgfSwKKworICAgIHJl
dmVhbExpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICBpZiAobGluZU51
bWJlciA+PSB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLm1ha2VMaW5lQUNodW5rKGxpbmVOdW1iZXIpOwor
ICAgICAgICBjaHVuay5lbGVtZW50LnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKTsKKyAgICB9LAor
CisgICAgbWFrZUxpbmVBQ2h1bms6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAgewogICAgICAg
ICBpZiAoIXRoaXMuX3RleHRDaHVua3MpCiAgICAgICAgICAgICB0aGlzLl9idWlsZENodW5rcygp
OwpAQCAtMTYzLDMxICsyODQsMzAgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBl
ID0gewogICAgICAgICB2YXIgd2FzRXhwYW5kZWQgPSBvbGRDaHVuay5leHBhbmRlZDsKICAgICAg
ICAgb2xkQ2h1bmsuZXhwYW5kZWQgPSBmYWxzZTsKIAotICAgICAgICB2YXIgaW5zZXJ0SW5kZXgg
PSBvbGRDaHVuay5jaHVua051bWJlciArIDE7CisgICAgICAgIHZhciBpbnNlcnRJbmRleCA9IGNo
dW5rTnVtYmVyICsgMTsKIAogICAgICAgICAvLyBQcmVmaXggY2h1bmsuCiAgICAgICAgIGlmIChs
aW5lTnVtYmVyID4gb2xkQ2h1bmsuc3RhcnRMaW5lKSB7Ci0gICAgICAgICAgICB2YXIgcHJlZml4
Q2h1bmsgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRDaHVuayh0aGlzLCBvbGRDaHVuay5zdGFydExp
bmUsIGxpbmVOdW1iZXIpOworICAgICAgICAgICAgdmFyIHByZWZpeENodW5rID0gdGhpcy5fY3Jl
YXRlTmV3Q2h1bmsob2xkQ2h1bmsuc3RhcnRMaW5lLCBsaW5lTnVtYmVyKTsKICAgICAgICAgICAg
IHRoaXMuX3RleHRDaHVua3Muc3BsaWNlKGluc2VydEluZGV4KyssIDAsIHByZWZpeENodW5rKTsK
LSAgICAgICAgICAgIHRoaXMuX2xpbmVzQ29udGFpbmVyRWxlbWVudC5pbnNlcnRCZWZvcmUocHJl
Zml4Q2h1bmsuZWxlbWVudCwgb2xkQ2h1bmsuZWxlbWVudCk7CisgICAgICAgICAgICB0aGlzLmVs
ZW1lbnQuaW5zZXJ0QmVmb3JlKHByZWZpeENodW5rLmVsZW1lbnQsIG9sZENodW5rLmVsZW1lbnQp
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gTGluZSBjaHVuay4KLSAgICAgICAgdmFyIGxpbmVD
aHVuayA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dENodW5rKHRoaXMsIGxpbmVOdW1iZXIsIGxpbmVO
dW1iZXIgKyAxKTsKKyAgICAgICAgdmFyIGxpbmVDaHVuayA9IHRoaXMuX2NyZWF0ZU5ld0NodW5r
KGxpbmVOdW1iZXIsIGxpbmVOdW1iZXIgKyAxKTsKICAgICAgICAgdGhpcy5fdGV4dENodW5rcy5z
cGxpY2UoaW5zZXJ0SW5kZXgrKywgMCwgbGluZUNodW5rKTsKLSAgICAgICAgdGhpcy5fbGluZXND
b250YWluZXJFbGVtZW50Lmluc2VydEJlZm9yZShsaW5lQ2h1bmsuZWxlbWVudCwgb2xkQ2h1bmsu
ZWxlbWVudCk7CisgICAgICAgIHRoaXMuZWxlbWVudC5pbnNlcnRCZWZvcmUobGluZUNodW5rLmVs
ZW1lbnQsIG9sZENodW5rLmVsZW1lbnQpOwogCiAgICAgICAgIC8vIFN1ZmZpeCBjaHVuay4KICAg
ICAgICAgaWYgKG9sZENodW5rLnN0YXJ0TGluZSArIG9sZENodW5rLmxpbmVzQ291bnQgPiBsaW5l
TnVtYmVyICsgMSkgewotICAgICAgICAgICAgdmFyIHN1ZmZpeENodW5rID0gbmV3IFdlYkluc3Bl
Y3Rvci5UZXh0Q2h1bmsodGhpcywgbGluZU51bWJlciArIDEsIG9sZENodW5rLnN0YXJ0TGluZSAr
IG9sZENodW5rLmxpbmVzQ291bnQpOworICAgICAgICAgICAgdmFyIHN1ZmZpeENodW5rID0gdGhp
cy5fY3JlYXRlTmV3Q2h1bmsobGluZU51bWJlciArIDEsIG9sZENodW5rLnN0YXJ0TGluZSArIG9s
ZENodW5rLmxpbmVzQ291bnQpOwogICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rcy5zcGxpY2Uo
aW5zZXJ0SW5kZXgsIDAsIHN1ZmZpeENodW5rKTsKLSAgICAgICAgICAgIHRoaXMuX2xpbmVzQ29u
dGFpbmVyRWxlbWVudC5pbnNlcnRCZWZvcmUoc3VmZml4Q2h1bmsuZWxlbWVudCwgb2xkQ2h1bmsu
ZWxlbWVudCk7CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuaW5zZXJ0QmVmb3JlKHN1ZmZpeENo
dW5rLmVsZW1lbnQsIG9sZENodW5rLmVsZW1lbnQpOwogICAgICAgICB9CiAKICAgICAgICAgLy8g
UmVtb3ZlIGVuY2xvc2luZyBjaHVuay4KLSAgICAgICAgdGhpcy5fdGV4dENodW5rcy5zcGxpY2Uo
b2xkQ2h1bmsuY2h1bmtOdW1iZXIsIDEpOwotICAgICAgICB0aGlzLl9saW5lc0NvbnRhaW5lckVs
ZW1lbnQucmVtb3ZlQ2hpbGQob2xkQ2h1bmsuZWxlbWVudCk7Ci0gICAgICAgIHRoaXMuX2luZGV4
Q2h1bmtzKCk7CisgICAgICAgIHRoaXMuX3RleHRDaHVua3Muc3BsaWNlKGNodW5rTnVtYmVyLCAx
KTsKKyAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkKG9sZENodW5rLmVsZW1lbnQpOwog
CiAgICAgICAgIGlmICh3YXNFeHBhbmRlZCkgewogICAgICAgICAgICAgaWYgKHByZWZpeENodW5r
KQpAQCAtMjAwLDExNSArMzIwLDkzIEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgcmV0dXJuIGxpbmVDaHVuazsKICAgICB9LAogCi0gICAgX2luZGV4Q2h1
bmtzOiBmdW5jdGlvbigpCisgICAgdGV4dENoYW5nZWQ6IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdS
YW5nZSwgb2xkVGV4dCwgbmV3VGV4dCkKICAgICB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRoaXMuX3RleHRD
aHVua3NbaV0uY2h1bmtOdW1iZXIgPSBpOworICAgICAgICB0aGlzLl9idWlsZENodW5rcygpOwog
ICAgIH0sCiAKLSAgICBfc2Nyb2xsOiBmdW5jdGlvbigpCisgICAgYmVnaW5VcGRhdGVzOiBmdW5j
dGlvbigpCiAgICAgewotICAgICAgICB2YXIgc2Nyb2xsVG9wID0gdGhpcy5lbGVtZW50LnNjcm9s
bFRvcDsKLSAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGlmIChz
Y3JvbGxUb3AgPT09IHRoaXMuZWxlbWVudC5zY3JvbGxUb3ApCi0gICAgICAgICAgICAgICAgdGhp
cy5fcmVwYWludEFsbCgpOwotICAgICAgICB9LmJpbmQodGhpcyksIDUwKTsKKyAgICAgICAgdGhp
cy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwrKzsKICAgICB9LAogCi0gICAgX2hhbmRsZUtleURvd246
IGZ1bmN0aW9uKCkKKyAgICBlbmRVcGRhdGVzOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBp
ZiAodGhpcy5fZWRpdGluZ0xpbmUgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSB8
fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50LmFsdEtleSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICB2YXIgc2Nyb2xsVmFsdWUgPSAwOwotICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9
PT0gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5VcC5jb2RlKQotICAgICAgICAg
ICAgc2Nyb2xsVmFsdWUgPSAtMTsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PSBX
ZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLkRvd24uY29kZSkKLSAgICAgICAgICAg
IHNjcm9sbFZhbHVlID0gMTsKLQotICAgICAgICBpZiAoc2Nyb2xsVmFsdWUpIHsKLSAgICAgICAg
ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFn
YXRpb24oKTsKLSAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zY3JvbGxCeUxpbmVzKHNjcm9sbFZh
bHVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHNjcm9sbFZh
bHVlID0gMDsKLSAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IFdlYkluc3BlY3Rvci5LZXli
b2FyZFNob3J0Y3V0LktleXMuTGVmdC5jb2RlKQotICAgICAgICAgICAgc2Nyb2xsVmFsdWUgPSAt
NDA7Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT0gV2ViSW5zcGVjdG9yLktleWJv
YXJkU2hvcnRjdXQuS2V5cy5SaWdodC5jb2RlKQotICAgICAgICAgICAgc2Nyb2xsVmFsdWUgPSA0
MDsKLQotICAgICAgICBpZiAoc2Nyb2xsVmFsdWUpIHsKLSAgICAgICAgICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7Ci0gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICAg
ICAgICAgIHRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0ICs9IHNjcm9sbFZhbHVlOwotICAgICAgICB9
CisgICAgICAgIHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsLS07CisgICAgICAgIGlmICghdGhp
cy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwpCisgICAgICAgICAgICB0aGlzLl9yZXBhaW50QWxsKCk7
CiAgICAgfSwKIAotICAgIGVkaXRMaW5lOiBmdW5jdGlvbihsaW5lUm93LCBjYWxsYmFjaykKKyAg
ICByZXNpemU6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciBlbGVtZW50ID0gbGluZVJv
dy5sYXN0Q2hpbGQ7Ci0gICAgICAgIHZhciBvbGRDb250ZW50ID0gZWxlbWVudC5pbm5lckhUTUw7
Ci0gICAgICAgIGZ1bmN0aW9uIGZpbmlzaEVkaXRpbmcoY29tbWl0dGVkLCBlLCBuZXdDb250ZW50
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY29tbWl0dGVkKQotICAgICAgICAgICAgICAg
IGNhbGxiYWNrKG5ld0NvbnRlbnQpOwotICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBv
bGRDb250ZW50OwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2VkaXRpbmdMaW5lOwotICAgICAg
ICB9Ci0gICAgICAgIHRoaXMuX2VkaXRpbmdMaW5lID0gV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGlu
ZyhlbGVtZW50LCB7Ci0gICAgICAgICAgICBjb250ZXh0OiBudWxsLAotICAgICAgICAgICAgY29t
bWl0SGFuZGxlcjogZmluaXNoRWRpdGluZy5iaW5kKHRoaXMsIHRydWUpLAotICAgICAgICAgICAg
Y2FuY2VsSGFuZGxlcjogZmluaXNoRWRpdGluZy5iaW5kKHRoaXMsIGZhbHNlKSwKLSAgICAgICAg
ICAgIG11bHRpbGluZTogdHJ1ZQotICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5fc2NoZWR1bGVS
ZXBhaW50QWxsKCk7CiAgICAgfSwKIAotICAgIF9iZWZvcmVDb3B5OiBmdW5jdGlvbihlKQorICAg
IF9zY3JvbGw6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIGUucHJldmVudERlZmF1bHQoKTsK
KyAgICAgICAgdGhpcy5fc2NoZWR1bGVSZXBhaW50QWxsKCk7CiAgICAgfSwKIAotICAgIF9jb3B5
OiBmdW5jdGlvbihlKQorICAgIF9zY2hlZHVsZVJlcGFpbnRBbGw6IGZ1bmN0aW9uKCkKICAgICB7
Ci0gICAgICAgIHZhciByYW5nZSA9IHRoaXMuX2dldFNlbGVjdGlvbigpOwotICAgICAgICB2YXIg
dGV4dCA9IHRoaXMuX3RleHRNb2RlbC5jb3B5UmFuZ2UocmFuZ2UpOwotICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZEhvc3QuY29weVRleHQodGV4dCk7Ci0gICAgICAgIGUucHJldmVudERlZmF1bHQo
KTsKKyAgICAgICAgaWYgKHRoaXMuX3JlcGFpbnRBbGxUaW1lcikKKyAgICAgICAgICAgIGNsZWFy
VGltZW91dCh0aGlzLl9yZXBhaW50QWxsVGltZXIpOworICAgICAgICB0aGlzLl9yZXBhaW50QWxs
VGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuX3JlcGFpbnRBbGwuYmluZCh0aGlzKSwgNTApOwogICAg
IH0sCiAKLSAgICBiZWdpblVwZGF0ZXM6IGZ1bmN0aW9uKGVuYWJsZWQpCisgICAgX2J1aWxkQ2h1
bmtzOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB0aGlzLl9wYWludENvYWxlc2NpbmdMZXZl
bCsrOwotICAgIH0sCisgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwogCi0g
ICAgZW5kVXBkYXRlczogZnVuY3Rpb24oZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Bh
aW50Q29hbGVzY2luZ0xldmVsLS07Ci0gICAgICAgIGlmICghdGhpcy5fcGFpbnRDb2FsZXNjaW5n
TGV2ZWwpCi0gICAgICAgICAgICB0aGlzLl9yZXBhaW50QWxsKCk7CisgICAgICAgIHRoaXMuX3Rl
eHRDaHVua3MgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0TW9k
ZWwubGluZXNDb3VudDsgaSArPSB0aGlzLl9kZWZhdWx0Q2h1bmtTaXplKSB7CisgICAgICAgICAg
ICB2YXIgY2h1bmsgPSB0aGlzLl9jcmVhdGVOZXdDaHVuayhpLCBpICsgdGhpcy5fZGVmYXVsdENo
dW5rU2l6ZSk7CisgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnB1c2goY2h1bmspOworICAg
ICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNodW5rLmVsZW1lbnQpOworICAgICAg
ICB9CisKKyAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOwogICAgIH0sCiAKLSAgICBfY2h1bmtG
b3JPZmZzZXQ6IGZ1bmN0aW9uKG9mZnNldCkKKyAgICBfcmVwYWludEFsbDogZnVuY3Rpb24oKQog
ICAgIHsKLSAgICAgICAgdmFyIGN1cnJlbnRPZmZzZXQgPSAwOwotICAgICAgICB2YXIgcm93ID0g
dGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50LmZpcnN0Q2hpbGQ7Ci0gICAgICAgIHdoaWxlIChy
b3cpIHsKLSAgICAgICAgICAgIHZhciByb3dIZWlnaHQgPSByb3cub2Zmc2V0SGVpZ2h0OwotICAg
ICAgICAgICAgaWYgKG9mZnNldCA+PSBjdXJyZW50T2Zmc2V0ICYmIG9mZnNldCA8IGN1cnJlbnRP
ZmZzZXQgKyByb3dIZWlnaHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJvdy5jaHVua051bWJl
cjsKLSAgICAgICAgICAgIHJvdyA9IHJvdy5uZXh0U2libGluZzsKLSAgICAgICAgICAgIGN1cnJl
bnRPZmZzZXQgKz0gcm93SGVpZ2h0OworICAgICAgICBkZWxldGUgdGhpcy5fcmVwYWludEFsbFRp
bWVyOworCisgICAgICAgIGlmICh0aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBpZiAoIXRoaXMuX3RleHRDaHVua3MpCisgICAgICAgICAg
ICB0aGlzLl9idWlsZENodW5rcygpOworCisgICAgICAgIHZhciB2aXNpYmxlRnJvbSA9IHRoaXMu
ZWxlbWVudC5zY3JvbGxUb3A7CisgICAgICAgIHZhciB2aXNpYmxlVG8gPSB0aGlzLmVsZW1lbnQu
c2Nyb2xsVG9wICsgdGhpcy5lbGVtZW50LmNsaWVudEhlaWdodDsKKworICAgICAgICB2YXIgb2Zm
c2V0ID0gMDsKKyAgICAgICAgdmFyIGZyb21JbmRleCA9IC0xOworICAgICAgICB2YXIgdG9JbmRl
eCA9IDA7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dENodW5rcy5sZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fdGV4dENodW5rc1tpXTsK
KyAgICAgICAgICAgIHZhciBjaHVua0hlaWdodCA9IGNodW5rLmhlaWdodDsKKyAgICAgICAgICAg
IGlmIChvZmZzZXQgKyBjaHVua0hlaWdodCA+IHZpc2libGVGcm9tICYmIG9mZnNldCA8IHZpc2li
bGVUbykgeworICAgICAgICAgICAgICAgIGlmIChmcm9tSW5kZXggPT09IC0xKQorICAgICAgICAg
ICAgICAgICAgICBmcm9tSW5kZXggPSBpOworICAgICAgICAgICAgICAgIHRvSW5kZXggPSBpICsg
MTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA+PSB2
aXNpYmxlVG8pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgb2Zmc2V0ICs9IGNodW5rSGVpZ2h0OwogICAgICAgICB9Ci0gICAgICAgIHJldHVy
biB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aCAtIDE7CisKKyAgICAgICAgaWYgKHRvSW5kZXgpCisg
ICAgICAgICAgICB0aGlzLl9leHBhbmRDaHVua3MoZnJvbUluZGV4LCB0b0luZGV4KTsKICAgICB9
LAogCiAgICAgX2NodW5rTnVtYmVyRm9yTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKICAgICB7
CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGg7ICsr
aSkgewogICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0Q2h1bmtzW2ldLnN0YXJ0TGlu
ZTsKLSAgICAgICAgICAgIGlmIChsaW5lTnVtYmVyID49IHRoaXMuX3RleHRDaHVua3NbaV0uc3Rh
cnRMaW5lICYmIGxpbmVOdW1iZXIgPCB0aGlzLl90ZXh0Q2h1bmtzW2ldLnN0YXJ0TGluZSArIHRo
aXMuX3RleHRDaHVua3NbaV0ubGluZXNDb3VudCkKKyAgICAgICAgICAgIGlmIChsaW5lTnVtYmVy
ID49IGxpbmUgJiYgbGluZU51bWJlciA8IGxpbmUgKyB0aGlzLl90ZXh0Q2h1bmtzW2ldLmxpbmVz
Q291bnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIHRoaXMuX3RleHRDaHVua3MubGVuZ3RoIC0gMTsKQEAgLTMxNyw1MCArNDE1LDIzNCBAQCBX
ZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUgPSB7CiAgICAgX2NodW5rRm9yTGluZTog
ZnVuY3Rpb24obGluZU51bWJlcikKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0Q2h1
bmtzW3RoaXMuX2NodW5rTnVtYmVyRm9yTGluZShsaW5lTnVtYmVyKV07CisgICAgfQorfQorCisv
Lz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvckd1dHRlclBhbmVsCisKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVy
UGFuZWwgPSBmdW5jdGlvbih0ZXh0TW9kZWwpCit7CisgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JDaHVua2VkUGFuZWwuY2FsbCh0aGlzLCB0ZXh0TW9kZWwpOworCisgICAgdGhpcy5lbGVtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgdGhpcy5lbGVtZW50LmNsYXNz
TmFtZSA9ICJ0ZXh0LWVkaXRvci1saW5lcyI7CisKKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5fc2Nyb2xsLmJpbmQodGhpcyksIGZhbHNlKTsKKworICAg
IHRoaXMuZnJlZUNhY2hlZEVsZW1lbnRzKCk7CisgICAgdGhpcy5fYnVpbGRDaHVua3MoKTsKK30K
KworV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbC5wcm90b3R5cGUgPSB7CisgICAg
ZnJlZUNhY2hlZEVsZW1lbnRzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jYWNo
ZWRSb3dzID0gW107CiAgICAgfSwKIAotICAgIF9jaHVua1N0YXJ0TGluZTogZnVuY3Rpb24oY2h1
bmtOdW1iZXIpCisgICAgX2NyZWF0ZU5ld0NodW5rOiBmdW5jdGlvbihzdGFydExpbmUsIGVuZExp
bmUpCiAgICAgewotICAgICAgICB2YXIgbGluZU51bWJlciA9IDA7Ci0gICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgY2h1bmtOdW1iZXIgJiYgaSA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICBsaW5lTnVtYmVyICs9IHRoaXMuX3RleHRDaHVua3NbaV0ubGluZXND
b3VudDsKLSAgICAgICAgcmV0dXJuIGxpbmVOdW1iZXI7CisgICAgICAgIHJldHVybiBuZXcgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuayh0aGlzLCBzdGFydExpbmUsIGVuZExpbmUp
OwogICAgIH0sCiAKLSAgICBfcmVwYWludEFsbDogZnVuY3Rpb24oKQorICAgIF9leHBhbmRDaHVu
a3M6IGZ1bmN0aW9uKGZyb21JbmRleCwgdG9JbmRleCkKICAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9wYWludENvYWxlc2NpbmdMZXZlbCkKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz
Ll90ZXh0Q2h1bmtzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtz
W2ldLmV4cGFuZGVkID0gKGZyb21JbmRleCA8PSBpICYmIGkgPCB0b0luZGV4KTsKKyAgICAgICAg
fQorICAgIH0KK30KKworV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbC5wcm90b3R5
cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90
eXBlOworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rCisKK1dlYkluc3BlY3Rvci5UZXh0RWRp
dG9yR3V0dGVyQ2h1bmsgPSBmdW5jdGlvbih0ZXh0RWRpdG9yLCBzdGFydExpbmUsIGVuZExpbmUp
Cit7CisgICAgdGhpcy5fdGV4dEVkaXRvciA9IHRleHRFZGl0b3I7CisgICAgdGhpcy5fdGV4dE1v
ZGVsID0gdGV4dEVkaXRvci5fdGV4dE1vZGVsOworCisgICAgdGhpcy5zdGFydExpbmUgPSBzdGFy
dExpbmU7CisgICAgZW5kTGluZSA9IE1hdGgubWluKHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50
LCBlbmRMaW5lKTsKKyAgICB0aGlzLmxpbmVzQ291bnQgPSBlbmRMaW5lIC0gc3RhcnRMaW5lOwor
CisgICAgdGhpcy5fZXhwYW5kZWQgPSBmYWxzZTsKKworICAgIHRoaXMuZWxlbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIHRoaXMuZWxlbWVudC5saW5lTnVtYmVyID0g
c3RhcnRMaW5lOworICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtbnVt
YmVyIjsKKworICAgIGlmICh0aGlzLmxpbmVzQ291bnQgPT09IDEpIHsKKyAgICAgICAgLy8gU2lu
Z2xlIGxpbmUgY2h1bmtzIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCBmb3IgZGVjb3JhdGlvbnMuIEhv
c3QgbGluZSBudW1iZXIgaW4KKyAgICAgICAgLy8gdGhlIHN1Yi1lbGVtZW50IGluIG9yZGVyIHRv
IGFsbG93IGZsZXhpYmxlIGJvcmRlciAvIG1hcmdpbiBtYW5hZ2VtZW50LgorICAgICAgICB2YXIg
aW5uZXJTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICBpbm5l
clNwYW4uY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLW51bWJlci1pbm5lciI7CisgICAgICAgIGlu
bmVyU3Bhbi50ZXh0Q29udGVudCA9IHN0YXJ0TGluZSArIDE7CisgICAgICAgIHZhciBvdXRlclNw
YW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgb3V0ZXJTcGFuLmNs
YXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1udW1iZXItb3V0ZXIiOworICAgICAgICBvdXRlclNwYW4u
YXBwZW5kQ2hpbGQoaW5uZXJTcGFuKTsKKyAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxk
KG91dGVyU3Bhbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIGxpbmVOdW1iZXJzID0gW107
CisgICAgICAgIGZvciAodmFyIGkgPSBzdGFydExpbmU7IGkgPCBlbmRMaW5lOyArK2kpIHsKKyAg
ICAgICAgICAgIGxpbmVOdW1iZXJzLnB1c2goaSArIDEpOworICAgICAgICB9CisgICAgICAgIHRo
aXMuZWxlbWVudC50ZXh0Q29udGVudCA9IGxpbmVOdW1iZXJzLmpvaW4oIlxuIik7CisgICAgfQor
fQorCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rLnByb3RvdHlwZSA9IHsKKyAg
ICBnZXQgZXhwYW5kZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkOwor
ICAgIH0sCisKKyAgICBzZXQgZXhwYW5kZWQoZXhwYW5kZWQpCisgICAgeworICAgICAgICBpZiAo
dGhpcy5fZXhwYW5kZWQgPT09IGV4cGFuZGVkKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIGlmICghdGhpcy5fdGV4dENodW5rcykKLSAgICAgICAgICAgIHRoaXMuX2J1aWxkQ2h1bmtz
KCk7CisgICAgICAgIHRoaXMuX2V4cGFuZGVkID0gZXhwYW5kZWQ7CiAKLSAgICAgICAgdmFyIHZp
c2libGVGcm9tID0gdGhpcy5lbGVtZW50LnNjcm9sbFRvcDsKLSAgICAgICAgdmFyIHZpc2libGVU
byA9IHRoaXMuZWxlbWVudC5zY3JvbGxUb3AgKyB0aGlzLmVsZW1lbnQuY2xpZW50SGVpZ2h0Owor
ICAgICAgICBpZiAodGhpcy5saW5lc0NvdW50ID09PSAxKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KIAotICAgICAgICB2YXIgb2Zmc2V0ID0gMDsKLSAgICAgICAgdmFyIGZpcnN0
VmlzaWJsZUxpbmUgPSAtMTsKLSAgICAgICAgdmFyIGxhc3RWaXNpYmxlTGluZSA9IDA7Ci0gICAg
ICAgIHZhciB0b0V4cGFuZCA9IFtdOwotICAgICAgICB2YXIgdG9Db2xsYXBzZSA9IFtdOwotICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbaV07Ci0gICAgICAgICAg
ICB2YXIgY2h1bmtIZWlnaHQgPSBjaHVuay5oZWlnaHQ7Ci0gICAgICAgICAgICBpZiAob2Zmc2V0
ICsgY2h1bmtIZWlnaHQgPiB2aXNpYmxlRnJvbSAmJiBvZmZzZXQgPCB2aXNpYmxlVG8pIHsKLSAg
ICAgICAgICAgICAgICB0b0V4cGFuZC5wdXNoKGNodW5rKTsKLSAgICAgICAgICAgICAgICBpZiAo
Zmlyc3RWaXNpYmxlTGluZSA9PT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIGZpcnN0VmlzaWJs
ZUxpbmUgPSBjaHVuay5zdGFydExpbmU7Ci0gICAgICAgICAgICAgICAgbGFzdFZpc2libGVMaW5l
ID0gY2h1bmsuc3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3VudDsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgdG9Db2xsYXBzZS5wdXNoKGNodW5rKTsKLSAgICAgICAgICAg
ICAgICBpZiAob2Zmc2V0ID49IHZpc2libGVUbykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGlmIChleHBhbmRlZCkgeworICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRMaW5l
Um93cyA9IFtdOworICAgICAgICAgICAgdmFyIHBhcmVudEVsZW1lbnQgPSB0aGlzLmVsZW1lbnQu
cGFyZW50RWxlbWVudDsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YXJ0TGluZTsg
aSA8IHRoaXMuc3RhcnRMaW5lICsgdGhpcy5saW5lc0NvdW50OyArK2kpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX2NyZWF0ZVJvdyhpKTsKKyAgICAgICAgICAgICAgICBw
YXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShsaW5lUm93LCB0aGlzLmVsZW1lbnQpOworICAgICAg
ICAgICAgICAgIHRoaXMuX2V4cGFuZGVkTGluZVJvd3MucHVzaChsaW5lUm93KTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG9mZnNldCArPSBjaHVua0hlaWdodDsKKyAgICAgICAgICAgIHBh
cmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHZhciBlbGVtZW50SW5zZXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5sZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fZXhwYW5kZWRMaW5lUm93c1tpXTsK
KyAgICAgICAgICAgICAgICB2YXIgcGFyZW50RWxlbWVudCA9IGxpbmVSb3cucGFyZW50RWxlbWVu
dDsKKyAgICAgICAgICAgICAgICBpZiAocGFyZW50RWxlbWVudCkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWVsZW1lbnRJbnNlcnRlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bWVudEluc2VydGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1l
bnQuaW5zZXJ0QmVmb3JlKHRoaXMuZWxlbWVudCwgbGluZVJvdyk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5fY2FjaGVkUm93cy5w
dXNoKGxpbmVSb3cpOworICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LnJlbW92ZUNo
aWxkKGxpbmVSb3cpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGRlbGV0ZSB0aGlzLl9leHBhbmRlZExpbmVSb3dzOwogICAgICAgICB9CisgICAgfSwKKwor
ICAgIGdldCBoZWlnaHQoKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9leHBhbmRlZExpbmVS
b3dzKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQ7CisgICAg
ICAgIHZhciByZXN1bHQgPSAwOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2V4
cGFuZGVkTGluZVJvd3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBsaW5lUm93ID0g
dGhpcy5fZXhwYW5kZWRMaW5lUm93c1tpXTsKKyAgICAgICAgICAgIHJlc3VsdCArPSBsaW5lUm93
Lm9mZnNldEhlaWdodDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0s
CisKKyAgICBfY3JlYXRlUm93OiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAg
dmFyIGxpbmVSb3cgPSB0aGlzLl90ZXh0RWRpdG9yLl9jYWNoZWRSb3dzLnBvcCgpIHx8IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBsaW5lUm93LmxpbmVOdW1iZXIgPSBs
aW5lTnVtYmVyOworICAgICAgICBsaW5lUm93LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1udW1i
ZXIiOworICAgICAgICBsaW5lUm93LnRleHRDb250ZW50ID0gbGluZU51bWJlciArIDE7CisgICAg
ICAgIHJldHVybiBsaW5lUm93OworICAgIH0KK30KKworLy89PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQorLy8gV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwK
KworV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwgPSBmdW5jdGlvbih0ZXh0TW9kZWws
IHVybCkKK3sKKyAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5jYWxsKHRo
aXMsIHRleHRNb2RlbCk7CisKKyAgICB0aGlzLl91cmwgPSB1cmw7CisgICAgdGhpcy5faGlnaGxp
Z2h0ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JIaWdobGlnaHRlcih0ZXh0TW9kZWws
IHRoaXMuX2hpZ2hsaWdodERhdGFSZWFkeS5iaW5kKHRoaXMpKTsKKworICAgIHRoaXMuZWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIHRoaXMuZWxlbWVudC5jbGFz
c05hbWUgPSAidGV4dC1lZGl0b3ItY29udGVudHMiOworCisgICAgdGhpcy5lbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMuX3Njcm9sbC5iaW5kKHRoaXMpLCBmYWxzZSk7CiAK
LSAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytq
KQotICAgICAgICAgICAgdG9Db2xsYXBzZS5wdXNoKHRoaXMuX3RleHRDaHVua3NbaV0pOworICAg
IC8vIEZJWE1FOiBSZW1vdmUgb2xkIGxpdmUgZWRpdGluZyBmdW5jdGlvbmFsaXR5IGFuZCBQcmVm
ZXJlbmNlcy5zb3VyY2VFZGl0b3JFbmFibGVkIGZsYWcuCisgICAgaWYgKFByZWZlcmVuY2VzLnNv
dXJjZUVkaXRvckVuYWJsZWQpCisgICAgICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJ0
ZXh0LWVkaXRvci1lZGl0YWJsZSIpOworCisgICAgdGhpcy5mcmVlQ2FjaGVkRWxlbWVudHMoKTsK
KyAgICB0aGlzLl9idWlsZENodW5rcygpOworfQorCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1h
aW5QYW5lbC5wcm90b3R5cGUgPSB7CisgICAgc2V0IG1pbWVUeXBlKG1pbWVUeXBlKQorICAgIHsK
KyAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZXIubWltZVR5cGUgPSBtaW1lVHlwZTsKKyAgICB9LAor
CisgICAgbWFya0FuZFJldmVhbFJhbmdlOiBmdW5jdGlvbihyYW5nZSkKKyAgICB7CisgICAgICAg
IGlmICh0aGlzLl9yYW5nZVRvTWFyaykgeworICAgICAgICAgICAgdmFyIG1hcmtlZExpbmUgPSB0
aGlzLl9yYW5nZVRvTWFyay5zdGFydExpbmU7CisgICAgICAgICAgICB0aGlzLl9yYW5nZVRvTWFy
ayA9IG51bGw7CisgICAgICAgICAgICB0aGlzLl9wYWludExpbmVzKG1hcmtlZExpbmUsIG1hcmtl
ZExpbmUgKyAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyYW5nZSkgeworICAgICAgICAg
ICAgdGhpcy5fcmFuZ2VUb01hcmsgPSByYW5nZTsKKyAgICAgICAgICAgIHRoaXMucmV2ZWFsTGlu
ZShyYW5nZS5zdGFydExpbmUpOworICAgICAgICAgICAgdGhpcy5fcGFpbnRMaW5lcyhyYW5nZS5z
dGFydExpbmUsIHJhbmdlLnN0YXJ0TGluZSArIDEpOworICAgICAgICAgICAgaWYgKHRoaXMuX21h
cmtlZFJhbmdlRWxlbWVudCkKKyAgICAgICAgICAgICAgICB0aGlzLl9tYXJrZWRSYW5nZUVsZW1l
bnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZSB0
aGlzLl9tYXJrZWRSYW5nZUVsZW1lbnQ7CisgICAgfSwKKworICAgIGhpZ2hsaWdodExpbmU6IGZ1
bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICB0aGlzLmNsZWFyTGluZUhpZ2hsaWdo
dCgpOworICAgICAgICB0aGlzLl9oaWdobGlnaHRlZExpbmUgPSBsaW5lTnVtYmVyOworICAgICAg
ICB0aGlzLnJldmVhbExpbmUobGluZU51bWJlcik7CisgICAgICAgIHRoaXMuYWRkRGVjb3JhdGlv
bihsaW5lTnVtYmVyLCAid2Via2l0LWhpZ2hsaWdodGVkLWxpbmUiKTsKKyAgICB9LAorCisgICAg
Y2xlYXJMaW5lSGlnaGxpZ2h0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodHlwZW9m
IHRoaXMuX2hpZ2hsaWdodGVkTGluZSA9PT0gIm51bWJlciIpIHsKKyAgICAgICAgICAgIHRoaXMu
cmVtb3ZlRGVjb3JhdGlvbih0aGlzLl9oaWdobGlnaHRlZExpbmUsICJ3ZWJraXQtaGlnaGxpZ2h0
ZWQtbGluZSIpOworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2hpZ2hsaWdodGVkTGluZTsKKyAg
ICAgICAgfQorICAgIH0sCisKKyAgICBmcmVlQ2FjaGVkRWxlbWVudHM6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHRoaXMuX2NhY2hlZFNwYW5zID0gW107CisgICAgICAgIHRoaXMuX2NhY2hl
ZFRleHROb2RlcyA9IFtdOworICAgICAgICB0aGlzLl9jYWNoZWRSb3dzID0gW107CisgICAgfSwK
KworICAgIF9idWlsZENodW5rczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5faGln
aGxpZ2h0ZXIucmVzZXQoKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2Vk
UGFuZWwucHJvdG90eXBlLl9idWlsZENodW5rcy5jYWxsKHRoaXMpOworICAgIH0sCisKKyAgICBf
Y3JlYXRlTmV3Q2h1bms6IGZ1bmN0aW9uKHN0YXJ0TGluZSwgZW5kTGluZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsodGhpcywgc3Rh
cnRMaW5lLCBlbmRMaW5lKTsKKyAgICB9LAorCisgICAgX2V4cGFuZENodW5rczogZnVuY3Rpb24o
ZnJvbUluZGV4LCB0b0luZGV4KQorICAgIHsKKyAgICAgICAgdmFyIGxhc3RDaHVuayA9IHRoaXMu
X3RleHRDaHVua3NbdG9JbmRleCAtIDFdOworICAgICAgICB2YXIgbGFzdFZpc2libGVMaW5lID0g
bGFzdENodW5rLnN0YXJ0TGluZSArIGxhc3RDaHVuay5saW5lc0NvdW50OwogCiAgICAgICAgIHZh
ciBzZWxlY3Rpb24gPSB0aGlzLl9nZXRTZWxlY3Rpb24oKTsKIApAQCAtMzY4LDEwICs2NTAsOSBA
QCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2hp
Z2hsaWdodGVyLmhpZ2hsaWdodChsYXN0VmlzaWJsZUxpbmUpOwogICAgICAgICBkZWxldGUgdGhp
cy5fbXV0ZUhpZ2hsaWdodExpc3RlbmVyOwogCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dG9Db2xsYXBzZS5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRvQ29sbGFwc2VbaV0uZXhwYW5k
ZWQgPSBmYWxzZTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b0V4cGFuZC5sZW5ndGg7
ICsraSkKLSAgICAgICAgICAgIHRvRXhwYW5kW2ldLmV4cGFuZGVkID0gdHJ1ZTsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzW2ldLmV4cGFuZGVkID0gKGZyb21JbmRleCA8PSBpICYm
IGkgPCB0b0luZGV4KTsKKyAgICAgICAgfQogCiAgICAgICAgIHRoaXMuX3Jlc3RvcmVTZWxlY3Rp
b24oc2VsZWN0aW9uKTsKICAgICB9LApAQCAtMzgwLDQwICs2NjEsNDAgQEAgV2ViSW5zcGVjdG9y
LlRleHRWaWV3ZXIucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX211dGVI
aWdobGlnaHRMaXN0ZW5lcikKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fcGFp
bnRMaW5lcyhmcm9tTGluZSwgdG9MaW5lLCB0cnVlIC8qcmVzdG9yZVNlbGVjdGlvbiovKTsKKyAg
ICB9LAogCisgICAgX3BhaW50TGluZXM6IGZ1bmN0aW9uKGZyb21MaW5lLCB0b0xpbmUsIHJlc3Rv
cmVTZWxlY3Rpb24pCisgICAgewogICAgICAgICB2YXIgc2VsZWN0aW9uOworICAgICAgICB2YXIg
Y2h1bmsgPSB0aGlzLl9jaHVua0ZvckxpbmUoZnJvbUxpbmUpOwogICAgICAgICBmb3IgKHZhciBp
ID0gZnJvbUxpbmU7IGkgPCB0b0xpbmU7ICsraSkgewotICAgICAgICAgICAgdmFyIGxpbmVSb3cg
PSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGksICJsaW5lLXJvdyIpOwotICAgICAgICAg
ICAgaWYgKCFsaW5lUm93IHx8IGxpbmVSb3cuaGlnaGxpZ2h0ZWQpCisgICAgICAgICAgICBpZiAo
aSA+PSBjaHVuay5zdGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50KQorICAgICAgICAgICAgICAg
IGNodW5rID0gdGhpcy5fY2h1bmtGb3JMaW5lKGkpOworICAgICAgICAgICAgdmFyIGxpbmVSb3cg
PSBjaHVuay5nZXRFeHBhbmRlZExpbmVSb3coaSk7CisgICAgICAgICAgICBpZiAoIWxpbmVSb3cp
CiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIXNlbGVjdGlvbikK
KyAgICAgICAgICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uICYmICFzZWxlY3Rpb24pCiAgICAgICAg
ICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5fZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgICAgICB0
aGlzLl9wYWludExpbmUobGluZVJvdywgaSk7CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5fcmVz
dG9yZVNlbGVjdGlvbihzZWxlY3Rpb24pOwotICAgIH0sCi0KLSAgICBfcGFpbnRMaW5lczogZnVu
Y3Rpb24oZnJvbUxpbmUsIHRvTGluZSkKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIGkgPSBmcm9t
TGluZTsgaSA8IHRvTGluZTsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMu
X3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUoaSwgImxpbmUtcm93Iik7Ci0gICAgICAgICAgICBpZiAo
bGluZVJvdykKLSAgICAgICAgICAgICAgICB0aGlzLl9wYWludExpbmUobGluZVJvdywgaSk7Ci0g
ICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rpb24pCisgICAgICAgICAgICB0aGlz
Ll9yZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlvbik7CiAgICAgfSwKIAogICAgIF9wYWludExpbmU6
IGZ1bmN0aW9uKGxpbmVSb3csIGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICB2YXIgZWxlbWVu
dCA9IGxpbmVSb3cubGFzdENoaWxkOwogICAgICAgICB2YXIgaGlnaGxpZ2h0ID0gdGhpcy5fdGV4
dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiaGlnaGxpZ2h0Iik7CiAgICAgICAgIGlm
ICghaGlnaGxpZ2h0KSB7CiAgICAgICAgICAgICBpZiAodGhpcy5fcmFuZ2VUb01hcmsgJiYgdGhp
cy5fcmFuZ2VUb01hcmsuc3RhcnRMaW5lID09PSBsaW5lTnVtYmVyKQotICAgICAgICAgICAgICAg
IHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudCA9IGhpZ2hsaWdodFNlYXJjaFJlc3VsdChlbGVtZW50
LCB0aGlzLl9yYW5nZVRvTWFyay5zdGFydENvbHVtbiwgdGhpcy5fcmFuZ2VUb01hcmsuZW5kQ29s
dW1uIC0gdGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRDb2x1bW4pOworICAgICAgICAgICAgICAgIHRo
aXMuX21hcmtlZFJhbmdlRWxlbWVudCA9IGhpZ2hsaWdodFNlYXJjaFJlc3VsdChsaW5lUm93LCB0
aGlzLl9yYW5nZVRvTWFyay5zdGFydENvbHVtbiwgdGhpcy5fcmFuZ2VUb01hcmsuZW5kQ29sdW1u
IC0gdGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRDb2x1bW4pOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKLSAgICAgICAgZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOworICAgICAgICBs
aW5lUm93LnJlbW92ZUNoaWxkcmVuKCk7CiAgICAgICAgIHZhciBsaW5lID0gdGhpcy5fdGV4dE1v
ZGVsLmxpbmUobGluZU51bWJlcik7CisgICAgICAgIGlmICghbGluZSkKKyAgICAgICAgICAgIGxp
bmVSb3cuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7CiAKICAgICAg
ICAgdmFyIHBsYWluVGV4dFN0YXJ0ID0gLTE7CiAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwg
bGluZS5sZW5ndGg7KSB7CkBAIC00MzAsOTggKzcxMSw2NCBAQCBXZWJJbnNwZWN0b3IuVGV4dFZp
ZXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgaisrOwogICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICBpZiAocGxhaW5UZXh0U3RhcnQgIT09IC0xKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZFRleHROb2RlKGVsZW1lbnQsIGxpbmUuc3Vic3Ry
aW5nKHBsYWluVGV4dFN0YXJ0LCBqKSk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVu
ZFRleHROb2RlKGxpbmVSb3csIGxpbmUuc3Vic3RyaW5nKHBsYWluVGV4dFN0YXJ0LCBqKSk7CiAg
ICAgICAgICAgICAgICAgICAgIHBsYWluVGV4dFN0YXJ0ID0gLTE7CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZFNwYW4oZWxlbWVudCwgbGluZS5zdWJzdHJp
bmcoaiwgaiArIGF0dHJpYnV0ZS5sZW5ndGgpLCBhdHRyaWJ1dGUudG9rZW5UeXBlKTsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9hcHBlbmRTcGFuKGxpbmVSb3csIGxpbmUuc3Vic3RyaW5nKGosIGog
KyBhdHRyaWJ1dGUubGVuZ3RoKSwgYXR0cmlidXRlLnRva2VuVHlwZSk7CiAgICAgICAgICAgICAg
ICAgaiArPSBhdHRyaWJ1dGUubGVuZ3RoOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIGlmIChwbGFpblRleHRTdGFydCAhPT0gLTEpCi0gICAgICAgICAgICB0aGlzLl9hcHBlbmRU
ZXh0Tm9kZShlbGVtZW50LCBsaW5lLnN1YnN0cmluZyhwbGFpblRleHRTdGFydCwgbGluZS5sZW5n
dGgpKTsKKyAgICAgICAgICAgIHRoaXMuX2FwcGVuZFRleHROb2RlKGxpbmVSb3csIGxpbmUuc3Vi
c3RyaW5nKHBsYWluVGV4dFN0YXJ0LCBsaW5lLmxlbmd0aCkpOwogICAgICAgICBpZiAodGhpcy5f
cmFuZ2VUb01hcmsgJiYgdGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRMaW5lID09PSBsaW5lTnVtYmVy
KQotICAgICAgICAgICAgdGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50ID0gaGlnaGxpZ2h0U2VhcmNo
UmVzdWx0KGVsZW1lbnQsIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0Q29sdW1uLCB0aGlzLl9yYW5n
ZVRvTWFyay5lbmRDb2x1bW4gLSB0aGlzLl9yYW5nZVRvTWFyay5zdGFydENvbHVtbik7CisgICAg
ICAgICAgICB0aGlzLl9tYXJrZWRSYW5nZUVsZW1lbnQgPSBoaWdobGlnaHRTZWFyY2hSZXN1bHQo
bGluZVJvdywgdGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRDb2x1bW4sIHRoaXMuX3JhbmdlVG9NYXJr
LmVuZENvbHVtbiAtIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0Q29sdW1uKTsKICAgICAgICAgaWYg
KGxpbmVSb3cuZGVjb3JhdGlvbnNFbGVtZW50KQotICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRD
aGlsZChsaW5lUm93LmRlY29yYXRpb25zRWxlbWVudCk7CisgICAgICAgICAgICBsaW5lUm93LmFw
cGVuZENoaWxkKGxpbmVSb3cuZGVjb3JhdGlvbnNFbGVtZW50KTsKICAgICB9LAogCi0gICAgX3Jl
bGVhc2VMaW5lc0hpZ2hsaWdodDogZnVuY3Rpb24oZnJvbUxpbmUsIHRvTGluZSkKKyAgICBfcmVs
ZWFzZUxpbmVzSGlnaGxpZ2h0OiBmdW5jdGlvbihsaW5lUm93KQogICAgIHsKLSAgICAgICAgZm9y
ICh2YXIgaSA9IGZyb21MaW5lOyBpIDwgdG9MaW5lOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBs
aW5lUm93ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShpLCAibGluZS1yb3ciKTsKLSAg
ICAgICAgICAgIGlmICghbGluZVJvdykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIHZhciBlbGVtZW50ID0gbGluZVJvdy5sYXN0Q2hpbGQ7Ci0gICAgICAgICAgICBpZiAo
InNwYW5zIiBpbiBlbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNwYW5zID0gZWxlbWVu
dC5zcGFuczsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNwYW5zLmxlbmd0
aDsgKytqKQotICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRTcGFucy5wdXNoKHNwYW5z
W2pdKTsKLSAgICAgICAgICAgICAgICBkZWxldGUgZWxlbWVudC5zcGFuczsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmICgidGV4dE5vZGVzIiBpbiBlbGVtZW50KSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHRleHROb2RlcyA9IGVsZW1lbnQudGV4dE5vZGVzOwotICAgICAgICAgICAgICAg
IGZvciAodmFyIGogPSAwOyBqIDwgdGV4dE5vZGVzLmxlbmd0aDsgKytqKQotICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9jYWNoZWRUZXh0Tm9kZXMucHVzaCh0ZXh0Tm9kZXNbal0pOwotICAgICAg
ICAgICAgICAgIGRlbGV0ZSBlbGVtZW50LnRleHROb2RlczsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFsaW5lUm93KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoInNwYW5z
IiBpbiBsaW5lUm93KSB7CisgICAgICAgICAgICB2YXIgc3BhbnMgPSBsaW5lUm93LnNwYW5zOwor
ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzcGFucy5sZW5ndGg7ICsraikKKyAgICAg
ICAgICAgICAgICB0aGlzLl9jYWNoZWRTcGFucy5wdXNoKHNwYW5zW2pdKTsKKyAgICAgICAgICAg
IGRlbGV0ZSBsaW5lUm93LnNwYW5zOwogICAgICAgICB9CisgICAgICAgIGlmICgidGV4dE5vZGVz
IiBpbiBsaW5lUm93KSB7CisgICAgICAgICAgICB2YXIgdGV4dE5vZGVzID0gbGluZVJvdy50ZXh0
Tm9kZXM7CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHROb2Rlcy5sZW5ndGg7
ICsraikKKyAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRUZXh0Tm9kZXMucHVzaCh0ZXh0Tm9k
ZXNbal0pOworICAgICAgICAgICAgZGVsZXRlIGxpbmVSb3cudGV4dE5vZGVzOworICAgICAgICB9
CisgICAgICAgIHRoaXMuX2NhY2hlZFJvd3MucHVzaChsaW5lUm93KTsKICAgICB9LAogCiAgICAg
X2dldFNlbGVjdGlvbjogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIHNlbGVjdGlvbiA9
IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNl
ZCkKKyAgICAgICAgaWYgKCFzZWxlY3Rpb24ucmFuZ2VDb3VudCkKICAgICAgICAgICAgIHJldHVy
biBudWxsOwogICAgICAgICB2YXIgc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VB
dCgwKTsKICAgICAgICAgLy8gU2VsZWN0aW9uIG1heSBiZSBvdXRzaWRlIG9mIHRoZSB2aWV3ZXIu
CiAgICAgICAgIGlmICghdGhpcy5lbGVtZW50LmlzQW5jZXN0b3Ioc2VsZWN0aW9uUmFuZ2Uuc3Rh
cnRDb250YWluZXIpIHx8ICF0aGlzLmVsZW1lbnQuaXNBbmNlc3RvcihzZWxlY3Rpb25SYW5nZS5l
bmRDb250YWluZXIpKQogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIHZhciBzdGFy
dCA9IHRoaXMuX3NlbGVjdGlvblRvUG9zaXRpb24oc2VsZWN0aW9uUmFuZ2Uuc3RhcnRDb250YWlu
ZXIsIHNlbGVjdGlvblJhbmdlLnN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgdmFyIGVuZCA9IHRoaXMu
X3NlbGVjdGlvblRvUG9zaXRpb24oc2VsZWN0aW9uUmFuZ2UuZW5kQ29udGFpbmVyLCBzZWxlY3Rp
b25SYW5nZS5lbmRPZmZzZXQpOwotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5UZXh0
UmFuZ2Uoc3RhcnQubGluZSwgc3RhcnQuY29sdW1uLCBlbmQubGluZSwgZW5kLmNvbHVtbik7Cisg
ICAgICAgIHZhciBlbmQgPSBzZWxlY3Rpb25SYW5nZS5jb2xsYXBzZWQgPyBzdGFydCA6IHRoaXMu
X3NlbGVjdGlvblRvUG9zaXRpb24oc2VsZWN0aW9uUmFuZ2UuZW5kQ29udGFpbmVyLCBzZWxlY3Rp
b25SYW5nZS5lbmRPZmZzZXQpOworICAgICAgICBpZiAoc2VsZWN0aW9uLmFuY2hvck5vZGUgPT09
IHNlbGVjdGlvblJhbmdlLnN0YXJ0Q29udGFpbmVyICYmIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQg
PT09IHNlbGVjdGlvblJhbmdlLnN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIG5ldyBX
ZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHN0YXJ0LmxpbmUsIHN0YXJ0LmNvbHVtbiwgZW5kLmxpbmUs
IGVuZC5jb2x1bW4pOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gbmV3IFdlYklu
c3BlY3Rvci5UZXh0UmFuZ2UoZW5kLmxpbmUsIGVuZC5jb2x1bW4sIHN0YXJ0LmxpbmUsIHN0YXJ0
LmNvbHVtbik7CiAgICAgfSwKIAogICAgIF9yZXN0b3JlU2VsZWN0aW9uOiBmdW5jdGlvbihyYW5n
ZSkKICAgICB7CiAgICAgICAgIGlmICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIHZhciBzdGFydFJvdyA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUocmFuZ2Uuc3Rh
cnRMaW5lLCAibGluZS1yb3ciKTsKLSAgICAgICAgaWYgKHN0YXJ0Um93KQotICAgICAgICAgICAg
dmFyIHN0YXJ0ID0gc3RhcnRSb3cubGFzdENoaWxkLnJhbmdlQm91bmRhcnlGb3JPZmZzZXQocmFu
Z2Uuc3RhcnRDb2x1bW4pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHZhciBvZmZzZXQg
PSByYW5nZS5zdGFydENvbHVtbjsKLSAgICAgICAgICAgIHZhciBjaHVua051bWJlciA9IHRoaXMu
X2NodW5rTnVtYmVyRm9yTGluZShyYW5nZS5zdGFydExpbmUpOwotICAgICAgICAgICAgZm9yICh2
YXIgaSA9IHRoaXMuX2NodW5rU3RhcnRMaW5lKGNodW5rTnVtYmVyKTsgaSA8IHJhbmdlLnN0YXJ0
TGluZTsgKytpKQotICAgICAgICAgICAgICAgIG9mZnNldCArPSB0aGlzLl90ZXh0TW9kZWwubGlu
ZShpKS5sZW5ndGggKyAxOyAvLyBcbgotICAgICAgICAgICAgdmFyIGxpbmVDZWxsID0gdGhpcy5f
dGV4dENodW5rc1tjaHVua051bWJlcl0uZWxlbWVudC5sYXN0Q2hpbGQ7Ci0gICAgICAgICAgICBp
ZiAobGluZUNlbGwuZmlyc3RDaGlsZCkKLSAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSB7IGNv
bnRhaW5lcjogbGluZUNlbGwuZmlyc3RDaGlsZCwgb2Zmc2V0OiBvZmZzZXQgfTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSB7IGNvbnRhaW5lcjogbGluZUNl
bGwsIG9mZnNldDogMCB9OwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGVuZFJvdyA9IHRoaXMu
X3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUocmFuZ2UuZW5kTGluZSwgImxpbmUtcm93Iik7Ci0gICAg
ICAgIGlmIChlbmRSb3cpCi0gICAgICAgICAgICB2YXIgZW5kID0gZW5kUm93Lmxhc3RDaGlsZC5y
YW5nZUJvdW5kYXJ5Rm9yT2Zmc2V0KHJhbmdlLmVuZENvbHVtbik7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgdmFyIG9mZnNldCA9IHJhbmdlLmVuZENvbHVtbjsKLSAgICAgICAgICAgIHZh
ciBjaHVua051bWJlciA9IHRoaXMuX2NodW5rTnVtYmVyRm9yTGluZShyYW5nZS5lbmRMaW5lKTsK
LSAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9jaHVua1N0YXJ0TGluZShjaHVua051bWJl
cik7IGkgPCByYW5nZS5lbmRMaW5lOyArK2kpCi0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHRo
aXMuX3RleHRNb2RlbC5saW5lKGkpLmxlbmd0aCArIDE7IC8vIFxuCi0gICAgICAgICAgICB2YXIg
bGluZUNlbGwgPSB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVtYmVyXS5lbGVtZW50Lmxhc3RDaGls
ZDsKLSAgICAgICAgICAgIGlmIChsaW5lQ2VsbC5maXJzdENoaWxkKQotICAgICAgICAgICAgICAg
IHZhciBlbmQgPSB7IGNvbnRhaW5lcjogbGluZUNlbGwuZmlyc3RDaGlsZCwgb2Zmc2V0OiBvZmZz
ZXQgfTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB2YXIgZW5kID0geyBjb250
YWluZXI6IGxpbmVDZWxsLCBvZmZzZXQ6IDAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBz
ZWxlY3Rpb25SYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgIHNlbGVjdGlv
blJhbmdlLnNldFN0YXJ0KHN0YXJ0LmNvbnRhaW5lciwgc3RhcnQub2Zmc2V0KTsKLSAgICAgICAg
c2VsZWN0aW9uUmFuZ2Uuc2V0RW5kKGVuZC5jb250YWluZXIsIGVuZC5vZmZzZXQpOwotCi0gICAg
ICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICAgIHNlbGVj
dGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKLSAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHNlbGVj
dGlvblJhbmdlKTsKKyAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5fcG9zaXRpb25Ub1NlbGVjdGlv
bihyYW5nZS5zdGFydExpbmUsIHJhbmdlLnN0YXJ0Q29sdW1uKTsKKyAgICAgICAgdmFyIGVuZCA9
IHJhbmdlLmlzRW1wdHkoKSA/IHN0YXJ0IDogdGhpcy5fcG9zaXRpb25Ub1NlbGVjdGlvbihyYW5n
ZS5lbmRMaW5lLCByYW5nZS5lbmRDb2x1bW4pOworICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCkuc2V0QmFzZUFuZEV4dGVudChzdGFydC5jb250YWluZXIsIHN0YXJ0Lm9mZnNldCwgZW5kLmNv
bnRhaW5lciwgZW5kLm9mZnNldCk7CiAgICAgfSwKIAogICAgIF9zZWxlY3Rpb25Ub1Bvc2l0aW9u
OiBmdW5jdGlvbihjb250YWluZXIsIG9mZnNldCkKQEAgLTUzMSwyMSArNzc4LDI2IEBAIFdlYklu
c3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKGNvbnRhaW5lciA9
PT0gdGhpcy5lbGVtZW50ICYmIG9mZnNldCA9PT0gMSkKICAgICAgICAgICAgIHJldHVybiB7IGxp
bmU6IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50IC0gMSwgY29sdW1uOiB0aGlzLl90ZXh0TW9k
ZWwubGluZUxlbmd0aCh0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCAtIDEpIH07CiAKLSAgICAg
ICAgdmFyIGxpbmVSb3cgPSBjb250YWluZXIuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhOb2RlTmFt
ZSgidHIiKTsKKyAgICAgICAgdmFyIGxpbmVSb3cgPSBjb250YWluZXIuZW5jbG9zaW5nTm9kZU9y
U2VsZldpdGhOb2RlTmFtZSgiRElWIik7CiAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gbGluZVJv
dy5saW5lTnVtYmVyOwotICAgICAgICBpZiAoY29udGFpbmVyLm5vZGVOYW1lID09PSAiVEQiICYm
IG9mZnNldCA9PT0gMCkKKyAgICAgICAgaWYgKGNvbnRhaW5lciA9PT0gbGluZVJvdyAmJiBvZmZz
ZXQgPT09IDApCiAgICAgICAgICAgICByZXR1cm4geyBsaW5lOiBsaW5lTnVtYmVyLCBjb2x1bW46
IDAgfTsKLSAgICAgICAgaWYgKGNvbnRhaW5lci5ub2RlTmFtZSA9PT0gIlREIiAmJiBvZmZzZXQg
PT09IDEpCi0gICAgICAgICAgICByZXR1cm4geyBsaW5lOiBsaW5lTnVtYmVyLCBjb2x1bW46IHRo
aXMuX3RleHRNb2RlbC5saW5lTGVuZ3RoKGxpbmVOdW1iZXIpIH07CiAKKyAgICAgICAgLy8gVGhp
cyBtYXkgYmUgY2h1bmsgYW5kIGNodW5rcyBtYXkgY29udGFpbiBcbi4KICAgICAgICAgdmFyIGNv
bHVtbiA9IDA7Ci0gICAgICAgIHZhciBub2RlID0gbGluZVJvdy5sYXN0Q2hpbGQudHJhdmVyc2VO
ZXh0VGV4dE5vZGUobGluZVJvdy5sYXN0Q2hpbGQpOworICAgICAgICB2YXIgbm9kZSA9IGxpbmVS
b3cudHJhdmVyc2VOZXh0VGV4dE5vZGUobGluZVJvdyk7CiAgICAgICAgIHdoaWxlIChub2RlICYm
IG5vZGUgIT09IGNvbnRhaW5lcikgewotICAgICAgICAgICAgY29sdW1uICs9IG5vZGUudGV4dENv
bnRlbnQubGVuZ3RoOwotICAgICAgICAgICAgbm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0VGV4dE5v
ZGUobGluZVJvdy5sYXN0Q2hpbGQpOworICAgICAgICAgICAgdmFyIHRleHQgPSBub2RlLnRleHRD
b250ZW50OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICAgICAgaWYgKHRleHQuY2hhckF0KGkpID09PSAiXG4iKSB7CisgICAg
ICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIrKzsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1u
ID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY29sdW1u
Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBub2RlID0gbm9kZS50cmF2ZXJzZU5leHRU
ZXh0Tm9kZShsaW5lUm93KTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFRoaXMgbWF5IGJlIGNo
dW5rIGFuZCBjaHVua3MgbWF5IGNvbnRhaW4gXG4uCiAgICAgICAgIGlmIChub2RlID09PSBjb250
YWluZXIgJiYgb2Zmc2V0KSB7CiAgICAgICAgICAgICB2YXIgdGV4dCA9IG5vZGUudGV4dENvbnRl
bnQ7CiAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9mZnNldDsgKytpKSB7CkBAIC01
NTksNiArODExLDI1IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgcmV0dXJuIHsgbGluZTogbGluZU51bWJlciwgY29sdW1uOiBjb2x1bW4gfTsKICAgICB9
LAogCisgICAgX3Bvc2l0aW9uVG9TZWxlY3Rpb246IGZ1bmN0aW9uKGxpbmUsIGNvbHVtbikKKyAg
ICB7CisgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX2NodW5rRm9yTGluZShsaW5lKTsKKyAgICAg
ICAgdmFyIGxpbmVSb3cgPSBjaHVuay5nZXRFeHBhbmRlZExpbmVSb3cobGluZSk7CisgICAgICAg
IGlmIChsaW5lUm93KQorICAgICAgICAgICAgdmFyIHJhbmdlQm91bmRhcnkgPSBsaW5lUm93LnJh
bmdlQm91bmRhcnlGb3JPZmZzZXQoY29sdW1uKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICB2YXIgb2Zmc2V0ID0gY29sdW1uOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IGNodW5rLnN0
YXJ0TGluZTsgaSA8IGxpbmU7ICsraSkKKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gdGhpcy5f
dGV4dE1vZGVsLmxpbmVMZW5ndGgoaSkgKyAxOyAvLyBcbgorICAgICAgICAgICAgbGluZVJvdyA9
IGNodW5rLmVsZW1lbnQ7CisgICAgICAgICAgICBpZiAobGluZVJvdy5maXJzdENoaWxkKQorICAg
ICAgICAgICAgICAgIHZhciByYW5nZUJvdW5kYXJ5ID0geyBjb250YWluZXI6IGxpbmVSb3cuZmly
c3RDaGlsZCwgb2Zmc2V0OiBvZmZzZXQgfTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB2YXIgcmFuZ2VCb3VuZGFyeSA9IHsgY29udGFpbmVyOiBsaW5lUm93LCBvZmZzZXQ6IDAg
fTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmFuZ2VCb3VuZGFyeTsKKyAgICB9LAorCiAg
ICAgX2FwcGVuZFNwYW46IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQsIGNsYXNzTmFtZSkKICAg
ICB7CiAgICAgICAgIGlmIChjbGFzc05hbWUgPT09ICJodG1sLXJlc291cmNlLWxpbmsiIHx8IGNs
YXNzTmFtZSA9PT0gImh0bWwtZXh0ZXJuYWwtbGluayIpIHsKQEAgLTU3OCw5ICs4NDksOSBAQCBX
ZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUgPSB7CiAgICAgX2FwcGVuZFRleHROb2Rl
OiBmdW5jdGlvbihlbGVtZW50LCB0ZXh0KQogICAgIHsKICAgICAgICAgdmFyIHRleHROb2RlID0g
dGhpcy5fY2FjaGVkVGV4dE5vZGVzLnBvcCgpOwotICAgICAgICBpZiAodGV4dE5vZGUpIHsKKyAg
ICAgICAgaWYgKHRleHROb2RlKQogICAgICAgICAgICAgdGV4dE5vZGUubm9kZVZhbHVlID0gdGV4
dDsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRleHROb2RlID0g
ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7CiAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hp
bGQodGV4dE5vZGUpOwogICAgICAgICBpZiAoISgidGV4dE5vZGVzIiBpbiBlbGVtZW50KSkKQEAg
LTYxMiw2MCArODgzLDM5IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgaWYgKCF0aGlzLl91cmwgfHwgIWhyZWZWYWx1ZSB8fCBocmVmVmFsdWUuaW5kZXhP
ZigiOi8vIikgPiAwKQogICAgICAgICAgICAgcmV0dXJuIGhyZWZWYWx1ZTsKICAgICAgICAgcmV0
dXJuIFdlYkluc3BlY3Rvci5jb21wbGV0ZVVSTCh0aGlzLl91cmwsIGhyZWZWYWx1ZSk7Ci0gICAg
fSwKLQotICAgIHJlc2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVwYWlu
dEFsbCgpOwogICAgIH0KIH0KIAotdmFyIGNhY2hlZFNwYW5zID0gW107CitXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlOwogCi1XZWJJbnNwZWN0b3IuVGV4dENodW5r
ID0gZnVuY3Rpb24odGV4dFZpZXdlciwgc3RhcnRMaW5lLCBlbmRMaW5lKQorV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JNYWluQ2h1bmsgPSBmdW5jdGlvbih0ZXh0RWRpdG9yLCBzdGFydExpbmUsIGVu
ZExpbmUpCiB7Ci0gICAgdGhpcy5fdGV4dFZpZXdlciA9IHRleHRWaWV3ZXI7Ci0gICAgdGhpcy5l
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLSAgICB0aGlzLl90ZXh0TW9k
ZWwgPSB0ZXh0Vmlld2VyLl90ZXh0TW9kZWw7Ci0gICAgdGhpcy5lbGVtZW50LmNodW5rID0gdGhp
czsKKyAgICB0aGlzLl90ZXh0RWRpdG9yID0gdGV4dEVkaXRvcjsKKyAgICB0aGlzLl90ZXh0TW9k
ZWwgPSB0ZXh0RWRpdG9yLl90ZXh0TW9kZWw7CisKKyAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICB0aGlzLmVsZW1lbnQubGluZU51bWJlciA9IHN0
YXJ0TGluZTsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLWNvbnRl
bnQiOwogCiAgICAgdGhpcy5zdGFydExpbmUgPSBzdGFydExpbmU7CiAgICAgZW5kTGluZSA9IE1h
dGgubWluKHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50LCBlbmRMaW5lKTsKICAgICB0aGlzLmxp
bmVzQ291bnQgPSBlbmRMaW5lIC0gc3RhcnRMaW5lOwogCi0gICAgdGhpcy5fbGluZU51bWJlckVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHRoaXMuX2xpbmVOdW1i
ZXJFbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1udW1iZXIiOwotICAgIHRoaXMuZWxl
bWVudC5hcHBlbmRDaGlsZCh0aGlzLl9saW5lTnVtYmVyRWxlbWVudCk7Ci0KLSAgICB0aGlzLl9s
aW5lQ29udGVudEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgIHRo
aXMuX2xpbmVDb250ZW50RWxlbWVudC5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtY29udGVudCI7
Ci0gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2xpbmVDb250ZW50RWxlbWVudCk7
Ci0KICAgICB0aGlzLl9leHBhbmRlZCA9IGZhbHNlOwogCi0gICAgdmFyIGxpbmVOdW1iZXJzID0g
W107CiAgICAgdmFyIGxpbmVzID0gW107CiAgICAgZm9yICh2YXIgaSA9IHN0YXJ0TGluZTsgaSA8
IGVuZExpbmU7ICsraSkgewotICAgICAgICBsaW5lTnVtYmVycy5wdXNoKGkgKyAxKTsKICAgICAg
ICAgbGluZXMucHVzaCh0aGlzLl90ZXh0TW9kZWwubGluZShpKSk7CiAgICAgfQotICAgIGlmICh0
aGlzLmxpbmVzQ291bnQgPT09IDEpIHsKLSAgICAgICAgLy8gU2luZ2xlIGxpbmUgY2h1bmtzIGFy
ZSB0eXBpY2FsbHkgY3JlYXRlZCBmb3IgZGVjb3JhdGlvbnMuIEhvc3QgbGluZSBudW1iZXIgaW4K
LSAgICAgICAgLy8gdGhlIHN1Yi1lbGVtZW50IGluIG9yZGVyIHRvIGFsbG93IGZsZXhpYmxlIGJv
cmRlciAvIG1hcmdpbiBtYW5hZ2VtZW50LgotICAgICAgICB2YXIgaW5uZXJTcGFuID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICBpbm5lclNwYW4uY2xhc3NOYW1lID0g
IndlYmtpdC1saW5lLW51bWJlci1pbm5lciI7Ci0gICAgICAgIGlubmVyU3Bhbi50ZXh0Q29udGVu
dCA9IHN0YXJ0TGluZSArIDE7Ci0gICAgICAgIHZhciBvdXRlclNwYW4gPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgb3V0ZXJTcGFuLmNsYXNzTmFtZSA9ICJ3ZWJraXQt
bGluZS1udW1iZXItb3V0ZXIiOwotICAgICAgICBvdXRlclNwYW4uYXBwZW5kQ2hpbGQoaW5uZXJT
cGFuKTsKLSAgICAgICAgdGhpcy5fbGluZU51bWJlckVsZW1lbnQuYXBwZW5kQ2hpbGQob3V0ZXJT
cGFuKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdGhpcy5fbGluZU51bWJlckVsZW1lbnQudGV4dENv
bnRlbnQgPSBsaW5lTnVtYmVycy5qb2luKCJcbiIpOwotICAgIHRoaXMuX2xpbmVDb250ZW50RWxl
bWVudC50ZXh0Q29udGVudCA9IGxpbmVzLmpvaW4oIlxuIik7CisKKyAgICB0aGlzLmVsZW1lbnQu
dGV4dENvbnRlbnQgPSBsaW5lcy5qb2luKCJcbiIpOworCisgICAgLy8gVGhlIGxhc3QgZW1wdHkg
bGluZSB3aWxsIGdldCBzd2FsbG93ZWQgb3RoZXJ3aXNlLgorICAgIGlmICghbGluZXNbbGluZXMu
bGVuZ3RoIC0gMV0pCisgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJiciIpKTsKIH0KIAotV2ViSW5zcGVjdG9yLlRleHRDaHVuay5wcm90b3R5
cGUgPSB7CitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUgPSB7CiAg
ICAgYWRkRGVjb3JhdGlvbjogZnVuY3Rpb24oZGVjb3JhdGlvbikKICAgICB7CiAgICAgICAgIGlm
ICh0eXBlb2YgZGVjb3JhdGlvbiA9PT0gInN0cmluZyIpIHsKQEAgLTY3NCw3ICs5MjQsOCBAQCBX
ZWJJbnNwZWN0b3IuVGV4dENodW5rLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogICAgICAgICBp
ZiAoIXRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQpIHsKICAgICAgICAgICAgIHRoaXMu
ZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKLSAgICAgICAgICAgIHRoaXMuX2xpbmVDb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlz
LmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50KTsKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5k
ZWNvcmF0aW9uc0VsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLWRlY29yYXRpb25zIjsK
KyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQuZGVjb3Jh
dGlvbnNFbGVtZW50KTsKICAgICAgICAgfQogICAgICAgICB0aGlzLmVsZW1lbnQuZGVjb3JhdGlv
bnNFbGVtZW50LmFwcGVuZENoaWxkKGRlY29yYXRpb24pOwogICAgIH0sCkBAIC03MDMsNzEgKzk1
NCw2OCBAQCBXZWJJbnNwZWN0b3IuVGV4dENodW5rLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhp
cy5fZXhwYW5kZWQgPSBleHBhbmRlZDsKIAogICAgICAgICBpZiAodGhpcy5saW5lc0NvdW50ID09
PSAxKSB7Ci0gICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0QXR0cmlidXRlKHRoaXMuc3Rh
cnRMaW5lLCAibGluZS1yb3ciLCB0aGlzLmVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKGV4cGFu
ZGVkKQotICAgICAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuX3BhaW50TGluZXModGhpcy5z
dGFydExpbmUsIHRoaXMuc3RhcnRMaW5lICsgMSk7CisgICAgICAgICAgICAgICAgdGhpcy5fdGV4
dEVkaXRvci5fcGFpbnRMaW5lKHRoaXMuZWxlbWVudCwgdGhpcy5zdGFydExpbmUpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGV4cGFuZGVkKSB7CisgICAg
ICAgICAgICB0aGlzLl9leHBhbmRlZExpbmVSb3dzID0gW107CiAgICAgICAgICAgICB2YXIgcGFy
ZW50RWxlbWVudCA9IHRoaXMuZWxlbWVudC5wYXJlbnRFbGVtZW50OwogICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IHRoaXMuc3RhcnRMaW5lOyBpIDwgdGhpcy5zdGFydExpbmUgKyB0aGlzLmxpbmVz
Q291bnQ7ICsraSkgewogICAgICAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fY3JlYXRl
Um93KGkpOwotICAgICAgICAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5zZXRBdHRyaWJ1dGUoaSwg
ImxpbmUtcm93IiwgbGluZVJvdyk7CiAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC5pbnNl
cnRCZWZvcmUobGluZVJvdywgdGhpcy5lbGVtZW50KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9l
eHBhbmRlZExpbmVSb3dzLnB1c2gobGluZVJvdyk7CisgICAgICAgICAgICAgICAgdGhpcy5fdGV4
dEVkaXRvci5fcGFpbnRMaW5lKGxpbmVSb3csIGkpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgcGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQpOwotCi0gICAgICAgICAg
ICB0aGlzLl90ZXh0Vmlld2VyLl9wYWludExpbmVzKHRoaXMuc3RhcnRMaW5lLCB0aGlzLnN0YXJ0
TGluZSArIHRoaXMubGluZXNDb3VudCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2
YXIgZmlyc3RMaW5lID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZSh0aGlzLnN0YXJ0TGlu
ZSwgImxpbmUtcm93Iik7Ci0gICAgICAgICAgICB2YXIgcGFyZW50RWxlbWVudCA9IGZpcnN0TGlu
ZS5wYXJlbnRFbGVtZW50OwotICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5fcmVsZWFzZUxp
bmVzSGlnaGxpZ2h0KHRoaXMuc3RhcnRMaW5lLCB0aGlzLnN0YXJ0TGluZSArIHRoaXMubGluZXND
b3VudCk7Ci0KLSAgICAgICAgICAgIHBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuZWxl
bWVudCwgZmlyc3RMaW5lKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YXJ0TGlu
ZTsgaSA8IHRoaXMuc3RhcnRMaW5lICsgdGhpcy5saW5lc0NvdW50OyArK2kpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUoaSwgImxp
bmUtcm93Iik7Ci0gICAgICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnJlbW92ZUF0dHJpYnV0
ZShpLCAibGluZS1yb3ciKTsKLSAgICAgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLl9jYWNo
ZWRSb3dzLnB1c2gobGluZVJvdyk7Ci0gICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC5yZW1v
dmVDaGlsZChsaW5lUm93KTsKKyAgICAgICAgICAgIHZhciBlbGVtZW50SW5zZXJ0ZWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZXhwYW5kZWRMaW5lUm93
cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fZXhw
YW5kZWRMaW5lUm93c1tpXTsKKyAgICAgICAgICAgICAgICB2YXIgcGFyZW50RWxlbWVudCA9IGxp
bmVSb3cucGFyZW50RWxlbWVudDsKKyAgICAgICAgICAgICAgICBpZiAocGFyZW50RWxlbWVudCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRJbnNlcnRlZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbWVudEluc2VydGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuZWxlbWVudCwgbGluZVJvdyk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dEVk
aXRvci5fcmVsZWFzZUxpbmVzSGlnaGxpZ2h0KGxpbmVSb3cpOworICAgICAgICAgICAgICAgICAg
ICBwYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGxpbmVSb3cpOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9leHBhbmRlZExpbmVSb3dz
OwogICAgICAgICB9CiAgICAgfSwKIAogICAgIGdldCBoZWlnaHQoKQogICAgIHsKLSAgICAgICAg
aWYgKCF0aGlzLl9leHBhbmRlZCkKKyAgICAgICAgaWYgKCF0aGlzLl9leHBhbmRlZExpbmVSb3dz
KQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQ7CiAgICAgICAg
IHZhciByZXN1bHQgPSAwOwotICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFydExpbmU7IGkg
PCB0aGlzLnN0YXJ0TGluZSArIHRoaXMubGluZXNDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICB2
YXIgbGluZVJvdyA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUoaSwgImxpbmUtcm93Iik7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5sZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl9leHBhbmRlZExpbmVS
b3dzW2ldOwogICAgICAgICAgICAgcmVzdWx0ICs9IGxpbmVSb3cub2Zmc2V0SGVpZ2h0OwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfSwKIAotICAgIF9jcmVhdGVSb3c6
IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgZ2V0RXhwYW5kZWRMaW5lUm93OiBmdW5jdGlvbihs
aW5lTnVtYmVyKQogICAgIHsKLSAgICAgICAgdmFyIGNhY2hlZFJvd3MgPSB0aGlzLl90ZXh0Vmll
d2VyLl9jYWNoZWRSb3dzOwotICAgICAgICBpZiAoY2FjaGVkUm93cy5sZW5ndGgpIHsKLSAgICAg
ICAgICAgIHZhciBsaW5lUm93ID0gY2FjaGVkUm93c1tjYWNoZWRSb3dzLmxlbmd0aCAtIDFdOwot
ICAgICAgICAgICAgY2FjaGVkUm93cy5sZW5ndGgtLTsKLSAgICAgICAgICAgIHZhciBsaW5lTnVt
YmVyRWxlbWVudCA9IGxpbmVSb3cuZmlyc3RDaGlsZDsKLSAgICAgICAgICAgIHZhciBsaW5lQ29u
dGVudEVsZW1lbnQgPSBsaW5lUm93Lmxhc3RDaGlsZDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHZhciBsaW5lUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLQotICAg
ICAgICAgICAgdmFyIGxpbmVOdW1iZXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
dGQiKTsKLSAgICAgICAgICAgIGxpbmVOdW1iZXJFbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQt
bGluZS1udW1iZXIiOwotICAgICAgICAgICAgbGluZVJvdy5hcHBlbmRDaGlsZChsaW5lTnVtYmVy
RWxlbWVudCk7CisgICAgICAgIGlmICghdGhpcy5fZXhwYW5kZWQgfHwgbGluZU51bWJlciA8IHRo
aXMuc3RhcnRMaW5lIHx8IGxpbmVOdW1iZXIgPj0gdGhpcy5zdGFydExpbmUgKyB0aGlzLmxpbmVz
Q291bnQpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgaWYgKCF0aGlzLl9leHBh
bmRlZExpbmVSb3dzKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudDsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbbGluZU51bWJlciAtIHRoaXMuc3RhcnRMaW5l
XTsKKyAgICB9LAogCi0gICAgICAgICAgICB2YXIgbGluZUNvbnRlbnRFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAgICAgICAgIGxpbmVDb250ZW50RWxlbWVudC5j
bGFzc05hbWUgPSAid2Via2l0LWxpbmUtY29udGVudCI7Ci0gICAgICAgICAgICBsaW5lUm93LmFw
cGVuZENoaWxkKGxpbmVDb250ZW50RWxlbWVudCk7Ci0gICAgICAgIH0KKyAgICBfY3JlYXRlUm93
OiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlz
Ll90ZXh0RWRpdG9yLl9jYWNoZWRSb3dzLnBvcCgpIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOwogICAgICAgICBsaW5lUm93LmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAgICAg
ICBsaW5lTnVtYmVyRWxlbWVudC50ZXh0Q29udGVudCA9IGxpbmVOdW1iZXIgKyAxOwotICAgICAg
ICBsaW5lQ29udGVudEVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLl90ZXh0TW9kZWwubGluZShs
aW5lTnVtYmVyKTsKKyAgICAgICAgbGluZVJvdy5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtY29u
dGVudCI7CisgICAgICAgIGxpbmVSb3cudGV4dENvbnRlbnQgPSB0aGlzLl90ZXh0TW9kZWwubGlu
ZShsaW5lTnVtYmVyKTsKKyAgICAgICAgaWYgKCFsaW5lUm93LnRleHRDb250ZW50KQorICAgICAg
ICAgICAgbGluZVJvdy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsK
ICAgICAgICAgcmV0dXJuIGxpbmVSb3c7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0Vmlld2VyLmNzcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvdGV4dFZpZXdlci5jc3MKaW5kZXggYmVlOWZlNWMzOTUwYWQw
NDgzOWY3OWEwNWI4M2JiMDY5ZWU0NDQzMS4uZDNlM2MyNWFlMjNmNzlmZTA2ZGVlYWRkZmQ2NmVj
MTVjZGQ4ZDczYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC90ZXh0Vmlld2VyLmNzcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L3RleHRWaWV3ZXIuY3NzCkBAIC05LDEwICs5LDMyIEBACiB9CiAKIC50ZXh0LWVkaXRvci1saW5l
cyB7Ci0gICAgYm9yZGVyOiAwOwotICAgIC13ZWJraXQtYm9yZGVyLWhvcml6b250YWwtc3BhY2lu
ZzogMDsKLSAgICAtd2Via2l0LWJvcmRlci12ZXJ0aWNhbC1zcGFjaW5nOiAwOwotICAgIC13ZWJr
aXQtdXNlci1zZWxlY3Q6IHRleHQ7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDog
MDsKKyAgICBsZWZ0OiAwOworICAgIGJvdHRvbTogMDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOwor
ICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Cit9CisKKy50ZXh0LWVkaXRvci1jb250ZW50
cyB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwOworICBsZWZ0OiAwOworICByaWdo
dDogMDsKKyAgYm90dG9tOiAwOworICBvdmVyZmxvdzogYXV0bzsKKyAgLXdlYmtpdC11c2VyLXNl
bGVjdDogdGV4dDsKK30KKworLnRleHQtZWRpdG9yLWVkaXRhYmxlIHsKKyAgLXdlYmtpdC11c2Vy
LW1vZGlmeTogcmVhZC13cml0ZS1wbGFpbnRleHQtb25seTsKK30KKworLndlYmtpdC1saW5lLWRl
Y29yYXRpb25zIHsKKyAgcG9pbnRlci1ldmVudHM6IG5vbmU7CisgIC13ZWJraXQtdXNlci1zZWxl
Y3Q6IG5vbmU7CisgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seTsKIH0KIAogLndlYmtp
dC1odG1sLW1lc3NhZ2UtYnViYmxlIHsKQEAgLTYzLDcgKzg1LDYgQEAKICAgICB0ZXh0LWFsaWdu
OiByaWdodDsKICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgIHdvcmQtYnJlYWs6IG5vcm1h
bDsKLSAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgIHBhZGRpbmctcmlnaHQ6IDRw
eDsKICAgICBwYWRkaW5nLWxlZnQ6IDZweDsKIH0KQEAgLTg1LDEyICsxMDYsNiBAQAogICAgIG1h
cmdpbi1yaWdodDogLTEwcHg7CiB9CiAKLS53ZWJraXQtbGluZS1jb250ZW50IHsKLSAgICB3aWR0
aDogMTAwJTsKLSAgICBwYWRkaW5nLWxlZnQ6IDJweDsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogdG9w
OwotfQotCiAud2Via2l0LWJyZWFrcG9pbnQgLndlYmtpdC1saW5lLW51bWJlci1vdXRlciB7CiAg
ICAgY29sb3I6IHdoaXRlOwogICAgIGJvcmRlci13aWR0aDogMCAxNHB4IDBweCAycHg7CkBAIC0x
MzYsMjEgKzE1MSwyMSBAQAogICAgIG9wYWNpdHk6IDAuMzsKIH0KIAotLndlYmtpdC1leGVjdXRp
b24tbGluZSAud2Via2l0LWxpbmUtY29udGVudCB7Cisud2Via2l0LWV4ZWN1dGlvbi1saW5lLndl
YmtpdC1saW5lLWNvbnRlbnQgewogICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigxNzEsIDE5MSwg
MjU0KTsKICAgICBvdXRsaW5lOiAxcHggc29saWQgcmdiKDY0LCAxMTUsIDI0NCk7CiB9CiAKLS5k
aWZmLWNvbnRhaW5lciAud2Via2l0LWFkZGVkLWxpbmUgLndlYmtpdC1saW5lLWNvbnRlbnQgewor
LmRpZmYtY29udGFpbmVyIC53ZWJraXQtYWRkZWQtbGluZS53ZWJraXQtbGluZS1jb250ZW50IHsK
ICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjIwLCAyNTUsIDIyMCk7CiB9CiAKLS5kaWZmLWNv
bnRhaW5lciAud2Via2l0LXJlbW92ZWQtbGluZSAud2Via2l0LWxpbmUtY29udGVudCB7CisuZGlm
Zi1jb250YWluZXIgLndlYmtpdC1yZW1vdmVkLWxpbmUud2Via2l0LWxpbmUtY29udGVudCB7CiAg
ICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjIwLCAyMjApOwogICAgIHRleHQtZGVjb3Jh
dGlvbjogbGluZS10aHJvdWdoOwogfQogCi0uZGlmZi1jb250YWluZXIgLndlYmtpdC1jaGFuZ2Vk
LWxpbmUgLndlYmtpdC1saW5lLWNvbnRlbnQgeworLmRpZmYtY29udGFpbmVyIC53ZWJraXQtY2hh
bmdlZC1saW5lLndlYmtpdC1saW5lLWNvbnRlbnQgewogICAgIGJhY2tncm91bmQtY29sb3I6IHJn
YigyMjAsIDIyMCwgMjU1KTsKIH0KIApAQCAtMTY0LDcgKzE3OSw3IEBACiAgICAgY29sb3I6IGJs
YWNrOwogfQogCi0ud2Via2l0LWhpZ2hsaWdodGVkLWxpbmUgLndlYmtpdC1saW5lLWNvbnRlbnQg
eworLndlYmtpdC1oaWdobGlnaHRlZC1saW5lLndlYmtpdC1saW5lLWNvbnRlbnQgewogICAgIC13
ZWJraXQtYW5pbWF0aW9uOiAiZmFkZW91dCIgMnMgMHM7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80734</attachid>
            <date>2011-02-01 03:01:42 -0800</date>
            <delta_ts>2011-02-01 06:19:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53299-20110201140138.patch</filename>
            <type>text/plain</type>
            <size>58808</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwZjY5MDBhZGVhMmFlMzRhZDFiZmQyZWZmN2ZhY2NkMDI1MTNlMTI5Li4y
ZWE2ZmIzNzc0NDlmOWYzMDIyOTA3MWQyMGVmNWZhOTI4YzQ0YWQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsOTggQEAKKzIwMTEtMDItMDEgIEFuZHJleSBBZGFpa2luICA8YWFuZHJleUBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdl
YiBJbnNwZWN0b3I6IFVzZSBESVZzIGluc3RlYWQgb2YgVEFCTEUgaW4gVGV4dFZpZXdlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMyOTkKKworICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9jcmVhdGVUZXh0Vmlld2VyKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX21vdXNlRG93bik6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRWaWV3ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJv
dG90eXBlLnNldCBtaW1lVHlwZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5w
cm90b3R5cGUucmV2ZWFsTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5w
cm90b3R5cGUuYWRkRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdl
ci5wcm90b3R5cGUucmVtb3ZlRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4
dFZpZXdlci5wcm90b3R5cGUubWFya0FuZFJldmVhbFJhbmdlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5oaWdobGlnaHRMaW5lKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5jbGVhckxpbmVIaWdobGlnaHQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLmZyZWVDYWNoZWRFbGVtZW50cyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuX2hhbmRsZUtleURv
d24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLmVkaXRMaW5l
LmZpbmlzaEVkaXRpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlLmVkaXRMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlw
ZS5iZWdpblVwZGF0ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlLmVuZFVwZGF0ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlLnJlc2l6ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUu
X3RleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlw
ZS5fdXBkYXRlUGFuZWxPZmZzZXRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2Vy
LnByb3RvdHlwZS5fc3luY1Njcm9sbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdl
ci5wcm90b3R5cGUuX3N5bmNEZWNvcmF0aW9uc0ZvckxpbmUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLnNldCBzeW5jU2Nyb2xsTGlzdGVuZXIpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLmdldCB0
ZXh0TW9kZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwu
cHJvdG90eXBlLmFkZERlY29yYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLnJlbW92ZURlY29yYXRpb24pOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLnJldmVhbExpbmUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLm1h
a2VMaW5lQUNodW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBh
bmVsLnByb3RvdHlwZS50ZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuYmVnaW5VcGRhdGVzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5lbmRVcGRhdGVzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5yZXNp
emUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90
eXBlLl9zY3JvbGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFu
ZWwucHJvdG90eXBlLl9zY2hlZHVsZVJlcGFpbnRBbGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLl9idWlsZENodW5rcyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX3JlcGFpbnRB
bGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90
eXBlLl9jaHVua051bWJlckZvckxpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLl9jaHVua0ZvckxpbmUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvckd1dHRlclBhbmVsLnByb3RvdHlwZS5mcmVlQ2FjaGVkRWxlbWVudHMpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbC5wcm90b3R5cGUuX2NyZWF0ZU5l
d0NodW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFuZWwucHJv
dG90eXBlLl9leHBhbmRDaHVua3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JH
dXR0ZXJDaHVuayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5r
LnByb3RvdHlwZS5nZXQgZXhwYW5kZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JHdXR0ZXJDaHVuay5wcm90b3R5cGUuc2V0IGV4cGFuZGVkKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsucHJvdG90eXBlLmdldCBoZWlnaHQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuay5wcm90b3R5cGUuX2NyZWF0ZVJv
dyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuc2V0IHN5bmNEZWNv
cmF0aW9uc0ZvckxpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFu
ZWwucHJvdG90eXBlLnNldCBtaW1lVHlwZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvck1haW5QYW5lbC5wcm90b3R5cGUubWFya0FuZFJldmVhbFJhbmdlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5oaWdobGlnaHRMaW5lKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5jbGVh
ckxpbmVIaWdobGlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFu
ZWwucHJvdG90eXBlLmZyZWVDYWNoZWRFbGVtZW50cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2J1aWxkQ2h1bmtzKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fY3JlYXRlTmV3Q2h1bmsp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9l
eHBhbmRDaHVua3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwu
cHJvdG90eXBlLl9oaWdobGlnaHREYXRhUmVhZHkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9wYWludExpbmVzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcGFpbnRMaW5lKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcmVsZWFzZUxp
bmVzSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVs
LnByb3RvdHlwZS5fZ2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcmVzdG9yZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3NlbGVjdGlvblRvUG9zaXRp
b24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBl
Ll9wb3NpdGlvblRvU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
TWFpblBhbmVsLnByb3RvdHlwZS5fYXBwZW5kVGV4dE5vZGUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9oYW5kbGVEb21VcGRhdGVzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5hZGREZWNvcmF0aW9uKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5zZXQgZXhw
YW5kZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90
eXBlLmdldCBoZWlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1
bmsucHJvdG90eXBlLmdldEV4cGFuZGVkTGluZVJvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUuX2NyZWF0ZVJvdyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvdGV4dFZpZXdlci5jc3M6
CisgICAgICAgICgudGV4dC1lZGl0b3ItbGluZXMpOgorICAgICAgICAoLnRleHQtZWRpdG9yLWNv
bnRlbnRzKToKKyAgICAgICAgKC50ZXh0LWVkaXRvci1lZGl0YWJsZSk6CisgICAgICAgICgud2Vi
a2l0LWxpbmUtZGVjb3JhdGlvbnMpOgorICAgICAgICAoLndlYmtpdC1saW5lLW51bWJlcik6Cisg
ICAgICAgICgud2Via2l0LWV4ZWN1dGlvbi1saW5lLndlYmtpdC1saW5lLWNvbnRlbnQpOgorICAg
ICAgICAoLmRpZmYtY29udGFpbmVyIC53ZWJraXQtYWRkZWQtbGluZS53ZWJraXQtbGluZS1jb250
ZW50KToKKyAgICAgICAgKC5kaWZmLWNvbnRhaW5lciAud2Via2l0LXJlbW92ZWQtbGluZS53ZWJr
aXQtbGluZS1jb250ZW50KToKKyAgICAgICAgKC5kaWZmLWNvbnRhaW5lciAud2Via2l0LWNoYW5n
ZWQtbGluZS53ZWJraXQtbGluZS1jb250ZW50KToKKyAgICAgICAgKC53ZWJraXQtaGlnaGxpZ2h0
ZWQtbGluZS53ZWJraXQtbGluZS1jb250ZW50KToKKwogMjAxMS0wMS0yNSAgTmlrb2xhcyBaaW1t
ZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaXJr
IFNjaHVsemUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZUZyYW1lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3Vy
Y2VGcmFtZS5qcwppbmRleCBjZTM1MzFmYWFmMjgwZjQ3YjJlNTkzMDc3ODg1YTI1NzQ1MTQ0Zjlk
Li5kYmY5NDdmYWFiZmQzNzgwNjRjNTJjMzc1OWZiM2IwMGI4NmFkNmQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKQEAgLTIwOCw5
ICsyMDgsNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAg
ICB0aGlzLl90ZXh0Vmlld2VyLmVuZFVwZGF0ZXMoKTsKIAogICAgICAgICBXZWJJbnNwZWN0b3Iu
ZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVs
LkV2ZW50cy5CcmVha3BvaW50QWRkZWQsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7Ci0K
LSAgICAgICAgaWYgKHRoaXMuX2NhbkVkaXRTY3JpcHRzKQotICAgICAgICAgICAgdGhpcy5fdGV4
dFZpZXdlci5lZGl0Q2FsbGJhY2sgPSB0aGlzLl9lZGl0TGluZS5iaW5kKHRoaXMpOwogICAgIH0s
CiAKICAgICBfc2V0VGV4dFZpZXdlckRlY29yYXRpb25zOiBmdW5jdGlvbigpCkBAIC01MjYsNyAr
NTIzLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAg
dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3
ZWJraXQtbGluZS1udW1iZXIiKTsKICAgICAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRhcmdldC5wYXJlbnRF
bGVtZW50LmxpbmVOdW1iZXI7CisgICAgICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRh
cmdldC5saW5lTnVtYmVyOwogICAgICAgICB2YXIgb3JpZ2luYWxMaW5lTnVtYmVyID0gdGhpcy5f
Zm9ybWF0dGVyLmZvcm1hdHRlZExpbmVOdW1iZXJUb09yaWdpbmFsTGluZU51bWJlcih0ZXh0Vmll
d2VyTGluZU51bWJlcik7CiAKICAgICAgICAgdmFyIGNvbnRleHRNZW51ID0gbmV3IFdlYkluc3Bl
Y3Rvci5Db250ZXh0TWVudSgpOwpAQCAtNTkyLDcgKzU4OSw3IEBAIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQu
ZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWxpbmUtbnVtYmVyIik7CiAgICAg
ICAgIGlmICghdGFyZ2V0KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgb3JpZ2lu
YWxMaW5lTnVtYmVyID0gdGhpcy5fZm9ybWF0dGVyLmZvcm1hdHRlZExpbmVOdW1iZXJUb09yaWdp
bmFsTGluZU51bWJlcih0YXJnZXQucGFyZW50RWxlbWVudC5saW5lTnVtYmVyKTsKKyAgICAgICAg
dmFyIG9yaWdpbmFsTGluZU51bWJlciA9IHRoaXMuX2Zvcm1hdHRlci5mb3JtYXR0ZWRMaW5lTnVt
YmVyVG9PcmlnaW5hbExpbmVOdW1iZXIodGFyZ2V0LmxpbmVOdW1iZXIpOwogCiAgICAgICAgIHZh
ciBicmVha3BvaW50ID0gdGhpcy5fZmluZEJyZWFrcG9pbnQob3JpZ2luYWxMaW5lTnVtYmVyKTsK
ICAgICAgICAgaWYgKGJyZWFrcG9pbnQpIHsKQEAgLTg1NSwxMSArODUyLDEwIEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICghUHJlZmVyZW5jZXMu
Y2FuRWRpdFNjcmlwdFNvdXJjZSB8fCAhdGhpcy5faXNTY3JpcHQpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JT
ZWxmV2l0aE5vZGVOYW1lKCJURCIpOwotICAgICAgICBpZiAoIXRhcmdldCB8fCB0YXJnZXQucGFy
ZW50RWxlbWVudC5maXJzdENoaWxkID09PSB0YXJnZXQpCisgICAgICAgIHZhciBsaW5lUm93ID0g
ZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoIndlYmtpdC1saW5lLWNv
bnRlbnQiKTsKKyAgICAgICAgaWYgKCFsaW5lUm93KQogICAgICAgICAgICAgcmV0dXJuOyAgLy8g
RG8gbm90IHRyaWdnZXIgZWRpdGluZyBmcm9tIGxpbmUgbnVtYmVycy4KIAotICAgICAgICB2YXIg
bGluZVJvdyA9IHRhcmdldC5wYXJlbnRFbGVtZW50OwogICAgICAgICB2YXIgbGluZU51bWJlciA9
IGxpbmVSb3cubGluZU51bWJlcjsKICAgICAgICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNl
SURGb3JMaW5lKGxpbmVOdW1iZXIpOwogICAgICAgICBpZiAoIXNvdXJjZUlEKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzCmluZGV4IGVhMzY1
MTMyNTlkNTcxZTlhM2M0YTk3NzMzNjI1NDlkODFhNGMzNDcuLjQyYmU2YTk4YTQzNjNkMGI1Yzk4
ZmM0NTFhNWYxYTY4ZjdhZTM5ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1RleHRWaWV3ZXIuanMKQEAgLTMyLDM3ICszMiwyNyBAQAogV2ViSW5zcGVjdG9y
LlRleHRWaWV3ZXIgPSBmdW5jdGlvbih0ZXh0TW9kZWwsIHBsYXRmb3JtLCB1cmwpCiB7CiAgICAg
dGhpcy5fdGV4dE1vZGVsID0gdGV4dE1vZGVsOwotICAgIHRoaXMuX3RleHRNb2RlbC5jaGFuZ2VM
aXN0ZW5lciA9IHRoaXMuX2J1aWxkQ2h1bmtzLmJpbmQodGhpcyk7Ci0gICAgdGhpcy5faGlnaGxp
Z2h0ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JIaWdobGlnaHRlcih0aGlzLl90ZXh0
TW9kZWwsIHRoaXMuX2hpZ2hsaWdodERhdGFSZWFkeS5iaW5kKHRoaXMpKTsKKyAgICB0aGlzLl90
ZXh0TW9kZWwuY2hhbmdlTGlzdGVuZXIgPSB0aGlzLl90ZXh0Q2hhbmdlZC5iaW5kKHRoaXMpOwor
CisgICAgdGhpcy5fbWFpblBhbmVsID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBh
bmVsKHRoaXMuX3RleHRNb2RlbCwgdXJsKTsKKyAgICB0aGlzLl9ndXR0ZXJQYW5lbCA9IG5ldyBX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlclBhbmVsKHRoaXMuX3RleHRNb2RlbCk7CiAKICAg
ICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICB0aGlz
LmVsZW1lbnQuY2xhc3NOYW1lID0gInRleHQtZWRpdG9yIG1vbm9zcGFjZSI7CiAgICAgdGhpcy5l
bGVtZW50LnRhYkluZGV4ID0gMDsKKyAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5f
bWFpblBhbmVsLmVsZW1lbnQpOworICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9n
dXR0ZXJQYW5lbC5lbGVtZW50KTsKIAotICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVy
KCJzY3JvbGwiLCB0aGlzLl9zY3JvbGwuYmluZCh0aGlzKSwgZmFsc2UpOwogICAgIHRoaXMuZWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5faGFuZGxlS2V5RG93bi5iaW5k
KHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9y
ZWNvcHkiLCB0aGlzLl9iZWZvcmVDb3B5LmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLmVs
ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29weSIsIHRoaXMuX2NvcHkuYmluZCh0aGlzKSwgZmFs
c2UpOwotCi0gICAgdGhpcy5fdXJsID0gdXJsOwotCi0gICAgdGhpcy5fbGluZXNDb250YWluZXJF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGFibGUiKTsKLSAgICB0aGlzLl9saW5l
c0NvbnRhaW5lckVsZW1lbnQuY2xhc3NOYW1lID0gInRleHQtZWRpdG9yLWxpbmVzIjsKLSAgICB0
aGlzLl9saW5lc0NvbnRhaW5lckVsZW1lbnQuc2V0QXR0cmlidXRlKCJjZWxsc3BhY2luZyIsIDAp
OwotICAgIHRoaXMuX2xpbmVzQ29udGFpbmVyRWxlbWVudC5zZXRBdHRyaWJ1dGUoImNlbGxwYWRk
aW5nIiwgMCk7Ci0gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2xpbmVzQ29udGFp
bmVyRWxlbWVudCk7Ci0KLSAgICB0aGlzLl9kZWZhdWx0Q2h1bmtTaXplID0gNTA7Ci0gICAgdGhp
cy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwgPSAwOwogCi0gICAgdGhpcy5mcmVlQ2FjaGVkRWxlbWVu
dHMoKTsKLSAgICB0aGlzLl9idWlsZENodW5rcygpOworICAgIHRoaXMuX21haW5QYW5lbC5zeW5j
U2Nyb2xsTGlzdGVuZXIgPSB0aGlzLl9zeW5jU2Nyb2xsLmJpbmQodGhpcyk7CisgICAgdGhpcy5f
bWFpblBhbmVsLnN5bmNEZWNvcmF0aW9uc0ZvckxpbmUgPSB0aGlzLl9zeW5jRGVjb3JhdGlvbnNG
b3JMaW5lLmJpbmQodGhpcyk7CiB9CiAKIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlw
ZSA9IHsKICAgICBzZXQgbWltZVR5cGUobWltZVR5cGUpCiAgICAgewotICAgICAgICB0aGlzLl9o
aWdobGlnaHRlci5taW1lVHlwZSA9IG1pbWVUeXBlOworICAgICAgICB0aGlzLl9tYWluUGFuZWwu
bWltZVR5cGUgPSBtaW1lVHlwZTsKICAgICB9LAogCiAgICAgZ2V0IHRleHRNb2RlbCgpCkBAIC03
Miw4NSArNjIsMjAyIEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKIAog
ICAgIHJldmVhbExpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICBpZiAo
bGluZU51bWJlciA+PSB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9tYWtlTGluZUFDaHVuayhsaW5lTnVt
YmVyKTsKLSAgICAgICAgY2h1bmsuZWxlbWVudC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7Cisg
ICAgICAgIHRoaXMuX21haW5QYW5lbC5yZXZlYWxMaW5lKGxpbmVOdW1iZXIpOwogICAgIH0sCiAK
ICAgICBhZGREZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0aW9uKQogICAg
IHsKLSAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fbWFrZUxpbmVBQ2h1bmsobGluZU51bWJlcik7
Ci0gICAgICAgIGNodW5rLmFkZERlY29yYXRpb24oZGVjb3JhdGlvbik7CisgICAgICAgIHRoaXMu
X21haW5QYW5lbC5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRpb24pOworICAgICAg
ICBpZiAodHlwZW9mIGRlY29yYXRpb24gPT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICB2YXIg
Y2h1bmsgPSB0aGlzLl9ndXR0ZXJQYW5lbC5tYWtlTGluZUFDaHVuayhsaW5lTnVtYmVyKTsKKyAg
ICAgICAgICAgIGNodW5rLmVsZW1lbnQuYWRkU3R5bGVDbGFzcyhkZWNvcmF0aW9uKTsKKyAgICAg
ICAgfQogICAgIH0sCiAKICAgICByZW1vdmVEZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVy
LCBkZWNvcmF0aW9uKQogICAgIHsKLSAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fbWFrZUxpbmVB
Q2h1bmsobGluZU51bWJlcik7Ci0gICAgICAgIGNodW5rLnJlbW92ZURlY29yYXRpb24oZGVjb3Jh
dGlvbik7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1i
ZXIsIGRlY29yYXRpb24pOworICAgICAgICBpZiAodHlwZW9mIGRlY29yYXRpb24gPT09ICJzdHJp
bmciKSB7CisgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9ndXR0ZXJQYW5lbC5tYWtlTGlu
ZUFDaHVuayhsaW5lTnVtYmVyKTsKKyAgICAgICAgICAgIGNodW5rLmVsZW1lbnQucmVtb3ZlU3R5
bGVDbGFzcyhkZWNvcmF0aW9uKTsKKyAgICAgICAgfQogICAgIH0sCiAKICAgICBtYXJrQW5kUmV2
ZWFsUmFuZ2U6IGZ1bmN0aW9uKHJhbmdlKQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3Jhbmdl
VG9NYXJrKSB7Ci0gICAgICAgICAgICB2YXIgbWFya2VkTGluZSA9IHRoaXMuX3JhbmdlVG9NYXJr
LnN0YXJ0TGluZTsKLSAgICAgICAgICAgIHRoaXMuX3JhbmdlVG9NYXJrID0gbnVsbDsKLSAgICAg
ICAgICAgIHRoaXMuX3BhaW50TGluZXMobWFya2VkTGluZSwgbWFya2VkTGluZSArIDEpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKHJhbmdlKSB7Ci0gICAgICAgICAgICB0aGlzLl9yYW5nZVRv
TWFyayA9IHJhbmdlOwotICAgICAgICAgICAgdGhpcy5yZXZlYWxMaW5lKHJhbmdlLnN0YXJ0TGlu
ZSk7Ci0gICAgICAgICAgICB0aGlzLl9wYWludExpbmVzKHJhbmdlLnN0YXJ0TGluZSwgcmFuZ2Uu
c3RhcnRMaW5lICsgMSk7Ci0gICAgICAgICAgICBpZiAodGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50
KQotICAgICAgICAgICAgICAgIHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudC5zY3JvbGxJbnRvVmll
d0lmTmVlZGVkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlIHRoaXMuX21hcmtlZFJhbmdl
RWxlbWVudDsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLm1hcmtBbmRSZXZlYWxSYW5nZShyYW5n
ZSk7CiAgICAgfSwKIAogICAgIGhpZ2hsaWdodExpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCiAg
ICAgewotICAgICAgICB0aGlzLmNsZWFyTGluZUhpZ2hsaWdodCgpOwotICAgICAgICB0aGlzLl9o
aWdobGlnaHRlZExpbmUgPSBsaW5lTnVtYmVyOwotICAgICAgICB0aGlzLnJldmVhbExpbmUobGlu
ZU51bWJlcik7Ci0gICAgICAgIHZhciBjaHVuayA9IHRoaXMuX21ha2VMaW5lQUNodW5rKGxpbmVO
dW1iZXIpOwotICAgICAgICBjaHVuay5hZGREZWNvcmF0aW9uKCJ3ZWJraXQtaGlnaGxpZ2h0ZWQt
bGluZSIpOworICAgICAgICB0aGlzLl9tYWluUGFuZWwuaGlnaGxpZ2h0TGluZShsaW5lTnVtYmVy
KTsKICAgICB9LAogCiAgICAgY2xlYXJMaW5lSGlnaGxpZ2h0OiBmdW5jdGlvbigpCiAgICAgewot
ICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2hpZ2hsaWdodGVkTGluZSA9PT0gIm51bWJlciIpIHsK
LSAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX21ha2VMaW5lQUNodW5rKHRoaXMuX2hpZ2hs
aWdodGVkTGluZSk7Ci0gICAgICAgICAgICBjaHVuay5yZW1vdmVEZWNvcmF0aW9uKCJ3ZWJraXQt
aGlnaGxpZ2h0ZWQtbGluZSIpOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2hpZ2hsaWdodGVk
TGluZTsKLSAgICAgICAgfQorICAgICAgICB0aGlzLl9tYWluUGFuZWwuY2xlYXJMaW5lSGlnaGxp
Z2h0KCk7CiAgICAgfSwKIAogICAgIGZyZWVDYWNoZWRFbGVtZW50czogZnVuY3Rpb24oKQogICAg
IHsKLSAgICAgICAgdGhpcy5fY2FjaGVkU3BhbnMgPSBbXTsKLSAgICAgICAgdGhpcy5fY2FjaGVk
VGV4dE5vZGVzID0gW107Ci0gICAgICAgIHRoaXMuX2NhY2hlZFJvd3MgPSBbXTsKKyAgICAgICAg
dGhpcy5fbWFpblBhbmVsLmZyZWVDYWNoZWRFbGVtZW50cygpOworICAgICAgICB0aGlzLl9ndXR0
ZXJQYW5lbC5mcmVlQ2FjaGVkRWxlbWVudHMoKTsKICAgICB9LAogCi0gICAgX2J1aWxkQ2h1bmtz
OiBmdW5jdGlvbigpCisgICAgX2hhbmRsZUtleURvd246IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAg
ICAgIHRoaXMuX2xpbmVzQ29udGFpbmVyRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOworICAgICAg
ICBpZiAodGhpcy5fZWRpdGluZ0xpbmUgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtl
eSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50LmFsdEtleSkKKyAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQ7IGkgKz0gdGhpcy5fZGVmYXVsdENodW5r
U2l6ZSkgewotICAgICAgICAgICAgdmFyIGNodW5rID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0Q2h1
bmsodGhpcywgaSwgaSArIHRoaXMuX2RlZmF1bHRDaHVua1NpemUpOwotICAgICAgICAgICAgdGhp
cy5fdGV4dENodW5rcy5wdXNoKGNodW5rKTsKLSAgICAgICAgICAgIHRoaXMuX2xpbmVzQ29udGFp
bmVyRWxlbWVudC5hcHBlbmRDaGlsZChjaHVuay5lbGVtZW50KTsKKyAgICAgICAgdmFyIHNjcm9s
bFZhbHVlID0gMDsKKyAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IFdlYkluc3BlY3Rvci5L
ZXlib2FyZFNob3J0Y3V0LktleXMuVXAuY29kZSkKKyAgICAgICAgICAgIHNjcm9sbFZhbHVlID0g
LTE7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT0gV2ViSW5zcGVjdG9yLktleWJv
YXJkU2hvcnRjdXQuS2V5cy5Eb3duLmNvZGUpCisgICAgICAgICAgICBzY3JvbGxWYWx1ZSA9IDE7
CisKKyAgICAgICAgaWYgKHNjcm9sbFZhbHVlKSB7CisgICAgICAgICAgICBldmVudC5wcmV2ZW50
RGVmYXVsdCgpOworICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAg
ICAgICB0aGlzLl9tYWluUGFuZWwuZWxlbWVudC5zY3JvbGxCeUxpbmVzKHNjcm9sbFZhbHVlKTsK
KyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHRoaXMuX2luZGV4Q2h1
bmtzKCk7Ci0gICAgICAgIHRoaXMuX2hpZ2hsaWdodGVyLnJlc2V0KCk7Ci0gICAgICAgIHRoaXMu
X3JlcGFpbnRBbGwoKTsKKyAgICAgICAgc2Nyb2xsVmFsdWUgPSAwOworICAgICAgICBpZiAoZXZl
bnQua2V5Q29kZSA9PT0gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5MZWZ0LmNv
ZGUpCisgICAgICAgICAgICBzY3JvbGxWYWx1ZSA9IC00MDsKKyAgICAgICAgZWxzZSBpZiAoZXZl
bnQua2V5Q29kZSA9PSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLlJpZ2h0LmNv
ZGUpCisgICAgICAgICAgICBzY3JvbGxWYWx1ZSA9IDQwOworCisgICAgICAgIGlmIChzY3JvbGxW
YWx1ZSkgeworICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAg
IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICAgICAgdGhpcy5fbWFpblBhbmVsLmVs
ZW1lbnQuc2Nyb2xsTGVmdCArPSBzY3JvbGxWYWx1ZTsKKyAgICAgICAgfQorICAgIH0sCisKKyAg
ICBlZGl0TGluZTogZnVuY3Rpb24obGluZVJvdywgY2FsbGJhY2spCisgICAgeworICAgICAgICB2
YXIgb2xkQ29udGVudCA9IGxpbmVSb3cuaW5uZXJIVE1MOworICAgICAgICBmdW5jdGlvbiBmaW5p
c2hFZGl0aW5nKGNvbW1pdHRlZCwgZSwgbmV3Q29udGVudCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGNvbW1pdHRlZCkKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXdDb250ZW50KTsK
KyAgICAgICAgICAgIGxpbmVSb3cuaW5uZXJIVE1MID0gb2xkQ29udGVudDsKKyAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLl9lZGl0aW5nTGluZTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9lZGl0
aW5nTGluZSA9IFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmcobGluZVJvdywgeworICAgICAgICAg
ICAgY29udGV4dDogbnVsbCwKKyAgICAgICAgICAgIGNvbW1pdEhhbmRsZXI6IGZpbmlzaEVkaXRp
bmcuYmluZCh0aGlzLCB0cnVlKSwKKyAgICAgICAgICAgIGNhbmNlbEhhbmRsZXI6IGZpbmlzaEVk
aXRpbmcuYmluZCh0aGlzLCBmYWxzZSksCisgICAgICAgICAgICBtdWx0aWxpbmU6IHRydWUKKyAg
ICAgICAgfSk7CisgICAgfSwKKworICAgIGJlZ2luVXBkYXRlczogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdGhpcy5fbWFpblBhbmVsLmJlZ2luVXBkYXRlcygpOworICAgICAgICB0aGlzLl9n
dXR0ZXJQYW5lbC5iZWdpblVwZGF0ZXMoKTsKKyAgICB9LAorCisgICAgZW5kVXBkYXRlczogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLmVuZFVwZGF0ZXMoKTsKKyAg
ICAgICAgdGhpcy5fZ3V0dGVyUGFuZWwuZW5kVXBkYXRlcygpOworICAgIH0sCisKKyAgICByZXNp
emU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5yZXNpemUoKTsK
KyAgICAgICAgdGhpcy5fZ3V0dGVyUGFuZWwucmVzaXplKCk7CisgICAgICAgIHRoaXMuX3VwZGF0
ZVBhbmVsT2Zmc2V0cygpOworICAgIH0sCisKKyAgICAvLyBXZWJJbnNwZWN0b3IuVGV4dE1vZGVs
IGxpc3RlbmVyCisgICAgX3RleHRDaGFuZ2VkOiBmdW5jdGlvbihvbGRSYW5nZSwgbmV3UmFuZ2Us
IG9sZFRleHQsIG5ld1RleHQpCisgICAgeworICAgICAgICB0aGlzLl9tYWluUGFuZWwudGV4dENo
YW5nZWQoKTsKKyAgICAgICAgdGhpcy5fZ3V0dGVyUGFuZWwudGV4dENoYW5nZWQoKTsKKyAgICAg
ICAgdGhpcy5fdXBkYXRlUGFuZWxPZmZzZXRzKCk7CisgICAgfSwKKworICAgIF91cGRhdGVQYW5l
bE9mZnNldHM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBsaW5lTnVtYmVyc1dpZHRo
ID0gdGhpcy5fZ3V0dGVyUGFuZWwuZWxlbWVudC5vZmZzZXRXaWR0aDsKKyAgICAgICAgaWYgKGxp
bmVOdW1iZXJzV2lkdGgpCisgICAgICAgICAgICB0aGlzLl9tYWluUGFuZWwuZWxlbWVudC5zdHls
ZS5sZWZ0ID0gKGxpbmVOdW1iZXJzV2lkdGggKyAyKSArICJweCI7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHRoaXMuX21haW5QYW5lbC5lbGVtZW50LnN0eWxlLmxlZnQgPSAiIjsgLy8gVXNl
IGRlZmF1bHQgdmFsdWUgc2V0IGluIENTUy4KICAgICB9LAogCi0gICAgX21ha2VMaW5lQUNodW5r
OiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIF9zeW5jU2Nyb2xsOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICAvLyBBc3luYyBjYWxsIGR1ZSB0byBwZXJmb3JtYW5jZSByZWFzb25zLgorICAg
ICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIG1haW5FbGVtZW50
ID0gdGhpcy5fbWFpblBhbmVsLmVsZW1lbnQ7CisgICAgICAgICAgICB2YXIgZ3V0dGVyRWxlbWVu
dCA9IHRoaXMuX2d1dHRlclBhbmVsLmVsZW1lbnQ7CisKKyAgICAgICAgICAgIC8vIEhhbmRsZSBo
b3Jpem9udGFsIHNjcm9sbCBiYXIgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbWFpbiBwYW5lbC4KKyAg
ICAgICAgICAgIGlmIChndXR0ZXJFbGVtZW50Lm9mZnNldEhlaWdodCA+IG1haW5FbGVtZW50LmNs
aWVudEhlaWdodCkKKyAgICAgICAgICAgICAgICBndXR0ZXJFbGVtZW50LnN0eWxlLnBhZGRpbmdC
b3R0b20gPSAoZ3V0dGVyRWxlbWVudC5vZmZzZXRIZWlnaHQgLSBtYWluRWxlbWVudC5jbGllbnRI
ZWlnaHQpICsgInB4IjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBndXR0ZXJF
bGVtZW50LnN0eWxlLnBhZGRpbmdCb3R0b20gPSAiIjsKKworICAgICAgICAgICAgZ3V0dGVyRWxl
bWVudC5zY3JvbGxUb3AgPSBtYWluRWxlbWVudC5zY3JvbGxUb3A7CisgICAgICAgIH0uYmluZCh0
aGlzKSwgMCk7CisgICAgfSwKKworICAgIF9zeW5jRGVjb3JhdGlvbnNGb3JMaW5lOiBmdW5jdGlv
bihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKGxpbmVOdW1iZXIgPj0gdGhpcy5fdGV4
dE1vZGVsLmxpbmVzQ291bnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIG1h
aW5DaHVuayA9IHRoaXMuX21haW5QYW5lbC5tYWtlTGluZUFDaHVuayhsaW5lTnVtYmVyKTsKKyAg
ICAgICAgdmFyIGd1dHRlckNodW5rID0gdGhpcy5fZ3V0dGVyUGFuZWwubWFrZUxpbmVBQ2h1bmso
bGluZU51bWJlcik7CisgICAgICAgIGd1dHRlckNodW5rLmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0g
bWFpbkNodW5rLmVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgInB4IjsKKyAgICB9Cit9CisKK1dlYklu
c3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsID0gZnVuY3Rpb24odGV4dE1vZGVsKQorewor
ICAgIHRoaXMuX3RleHRNb2RlbCA9IHRleHRNb2RlbDsKKworICAgIHRoaXMuX2RlZmF1bHRDaHVu
a1NpemUgPSA1MDsKKyAgICB0aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbCA9IDA7Cit9CisKK1dl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZSA9IHsKKyAgICBzZXQg
c3luY1Njcm9sbExpc3RlbmVyKGxpc3RlbmVyKQorICAgIHsKKyAgICAgICAgdGhpcy5fc3luY1Nj
cm9sbExpc3RlbmVyID0gbGlzdGVuZXI7CisgICAgfSwKKworICAgIGdldCB0ZXh0TW9kZWwoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRNb2RlbDsKKyAgICB9LAorCisgICAgYWRk
RGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgZGVjb3JhdGlvbikKKyAgICB7CisgICAg
ICAgIHZhciBjaHVuayA9IHRoaXMubWFrZUxpbmVBQ2h1bmsobGluZU51bWJlcik7CisgICAgICAg
IGNodW5rLmFkZERlY29yYXRpb24oZGVjb3JhdGlvbik7CisgICAgfSwKKworICAgIHJlbW92ZURl
Y29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRpb24pCisgICAgeworICAgICAg
ICB2YXIgY2h1bmsgPSB0aGlzLm1ha2VMaW5lQUNodW5rKGxpbmVOdW1iZXIpOworICAgICAgICBj
aHVuay5yZW1vdmVEZWNvcmF0aW9uKGRlY29yYXRpb24pOworICAgIH0sCisKKyAgICByZXZlYWxM
aW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKGxpbmVOdW1iZXIg
Pj0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgdmFyIGNodW5rID0gdGhpcy5tYWtlTGluZUFDaHVuayhsaW5lTnVtYmVyKTsKKyAgICAg
ICAgY2h1bmsuZWxlbWVudC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7CisgICAgfSwKKworICAg
IG1ha2VMaW5lQUNodW5rOiBmdW5jdGlvbihsaW5lTnVtYmVyKQogICAgIHsKICAgICAgICAgaWYg
KCF0aGlzLl90ZXh0Q2h1bmtzKQogICAgICAgICAgICAgdGhpcy5fYnVpbGRDaHVua3MoKTsKQEAg
LTE2MywzMSArMjcwLDMwIEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgdmFyIHdhc0V4cGFuZGVkID0gb2xkQ2h1bmsuZXhwYW5kZWQ7CiAgICAgICAgIG9s
ZENodW5rLmV4cGFuZGVkID0gZmFsc2U7CiAKLSAgICAgICAgdmFyIGluc2VydEluZGV4ID0gb2xk
Q2h1bmsuY2h1bmtOdW1iZXIgKyAxOworICAgICAgICB2YXIgaW5zZXJ0SW5kZXggPSBjaHVua051
bWJlciArIDE7CiAKICAgICAgICAgLy8gUHJlZml4IGNodW5rLgogICAgICAgICBpZiAobGluZU51
bWJlciA+IG9sZENodW5rLnN0YXJ0TGluZSkgewotICAgICAgICAgICAgdmFyIHByZWZpeENodW5r
ID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0Q2h1bmsodGhpcywgb2xkQ2h1bmsuc3RhcnRMaW5lLCBs
aW5lTnVtYmVyKTsKKyAgICAgICAgICAgIHZhciBwcmVmaXhDaHVuayA9IHRoaXMuX2NyZWF0ZU5l
d0NodW5rKG9sZENodW5rLnN0YXJ0TGluZSwgbGluZU51bWJlcik7CiAgICAgICAgICAgICB0aGlz
Ll90ZXh0Q2h1bmtzLnNwbGljZShpbnNlcnRJbmRleCsrLCAwLCBwcmVmaXhDaHVuayk7Ci0gICAg
ICAgICAgICB0aGlzLl9saW5lc0NvbnRhaW5lckVsZW1lbnQuaW5zZXJ0QmVmb3JlKHByZWZpeENo
dW5rLmVsZW1lbnQsIG9sZENodW5rLmVsZW1lbnQpOworICAgICAgICAgICAgdGhpcy5lbGVtZW50
Lmluc2VydEJlZm9yZShwcmVmaXhDaHVuay5lbGVtZW50LCBvbGRDaHVuay5lbGVtZW50KTsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIExpbmUgY2h1bmsuCi0gICAgICAgIHZhciBsaW5lQ2h1bmsg
PSBuZXcgV2ViSW5zcGVjdG9yLlRleHRDaHVuayh0aGlzLCBsaW5lTnVtYmVyLCBsaW5lTnVtYmVy
ICsgMSk7CisgICAgICAgIHZhciBsaW5lQ2h1bmsgPSB0aGlzLl9jcmVhdGVOZXdDaHVuayhsaW5l
TnVtYmVyLCBsaW5lTnVtYmVyICsgMSk7CiAgICAgICAgIHRoaXMuX3RleHRDaHVua3Muc3BsaWNl
KGluc2VydEluZGV4KyssIDAsIGxpbmVDaHVuayk7Ci0gICAgICAgIHRoaXMuX2xpbmVzQ29udGFp
bmVyRWxlbWVudC5pbnNlcnRCZWZvcmUobGluZUNodW5rLmVsZW1lbnQsIG9sZENodW5rLmVsZW1l
bnQpOworICAgICAgICB0aGlzLmVsZW1lbnQuaW5zZXJ0QmVmb3JlKGxpbmVDaHVuay5lbGVtZW50
LCBvbGRDaHVuay5lbGVtZW50KTsKIAogICAgICAgICAvLyBTdWZmaXggY2h1bmsuCiAgICAgICAg
IGlmIChvbGRDaHVuay5zdGFydExpbmUgKyBvbGRDaHVuay5saW5lc0NvdW50ID4gbGluZU51bWJl
ciArIDEpIHsKLSAgICAgICAgICAgIHZhciBzdWZmaXhDaHVuayA9IG5ldyBXZWJJbnNwZWN0b3Iu
VGV4dENodW5rKHRoaXMsIGxpbmVOdW1iZXIgKyAxLCBvbGRDaHVuay5zdGFydExpbmUgKyBvbGRD
aHVuay5saW5lc0NvdW50KTsKKyAgICAgICAgICAgIHZhciBzdWZmaXhDaHVuayA9IHRoaXMuX2Ny
ZWF0ZU5ld0NodW5rKGxpbmVOdW1iZXIgKyAxLCBvbGRDaHVuay5zdGFydExpbmUgKyBvbGRDaHVu
ay5saW5lc0NvdW50KTsKICAgICAgICAgICAgIHRoaXMuX3RleHRDaHVua3Muc3BsaWNlKGluc2Vy
dEluZGV4LCAwLCBzdWZmaXhDaHVuayk7Ci0gICAgICAgICAgICB0aGlzLl9saW5lc0NvbnRhaW5l
ckVsZW1lbnQuaW5zZXJ0QmVmb3JlKHN1ZmZpeENodW5rLmVsZW1lbnQsIG9sZENodW5rLmVsZW1l
bnQpOworICAgICAgICAgICAgdGhpcy5lbGVtZW50Lmluc2VydEJlZm9yZShzdWZmaXhDaHVuay5l
bGVtZW50LCBvbGRDaHVuay5lbGVtZW50KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFJlbW92
ZSBlbmNsb3NpbmcgY2h1bmsuCi0gICAgICAgIHRoaXMuX3RleHRDaHVua3Muc3BsaWNlKG9sZENo
dW5rLmNodW5rTnVtYmVyLCAxKTsKLSAgICAgICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50
LnJlbW92ZUNoaWxkKG9sZENodW5rLmVsZW1lbnQpOwotICAgICAgICB0aGlzLl9pbmRleENodW5r
cygpOworICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnNwbGljZShjaHVua051bWJlciwgMSk7Cisg
ICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZChvbGRDaHVuay5lbGVtZW50KTsKIAogICAg
ICAgICBpZiAod2FzRXhwYW5kZWQpIHsKICAgICAgICAgICAgIGlmIChwcmVmaXhDaHVuaykKQEAg
LTIwMCwxMTUgKzMwNiw5NSBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHJldHVybiBsaW5lQ2h1bms7CiAgICAgfSwKIAotICAgIF9pbmRleENodW5rczog
ZnVuY3Rpb24oKQorICAgIHRleHRDaGFuZ2VkOiBmdW5jdGlvbihvbGRSYW5nZSwgbmV3UmFuZ2Us
IG9sZFRleHQsIG5ld1RleHQpCiAgICAgewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRo
aXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtz
W2ldLmNodW5rTnVtYmVyID0gaTsKKyAgICAgICAgdGhpcy5fYnVpbGRDaHVua3MoKTsKICAgICB9
LAogCi0gICAgX3Njcm9sbDogZnVuY3Rpb24oKQorICAgIGJlZ2luVXBkYXRlczogZnVuY3Rpb24o
KQogICAgIHsKLSAgICAgICAgdmFyIHNjcm9sbFRvcCA9IHRoaXMuZWxlbWVudC5zY3JvbGxUb3A7
Ci0gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBpZiAoc2Nyb2xs
VG9wID09PSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wKQotICAgICAgICAgICAgICAgIHRoaXMuX3Jl
cGFpbnRBbGwoKTsKLSAgICAgICAgfS5iaW5kKHRoaXMpLCA1MCk7CisgICAgICAgIHRoaXMuX3Bh
aW50Q29hbGVzY2luZ0xldmVsKys7CiAgICAgfSwKIAotICAgIF9oYW5kbGVLZXlEb3duOiBmdW5j
dGlvbigpCisgICAgZW5kVXBkYXRlczogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgaWYgKHRo
aXMuX2VkaXRpbmdMaW5lIHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZl
bnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgdmFyIHNjcm9sbFZhbHVlID0gMDsKLSAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IFdl
Ykluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuVXAuY29kZSkKLSAgICAgICAgICAgIHNj
cm9sbFZhbHVlID0gLTE7Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT0gV2ViSW5z
cGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5Eb3duLmNvZGUpCi0gICAgICAgICAgICBzY3Jv
bGxWYWx1ZSA9IDE7Ci0KLSAgICAgICAgaWYgKHNjcm9sbFZhbHVlKSB7Ci0gICAgICAgICAgICBl
dmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9u
KCk7Ci0gICAgICAgICAgICB0aGlzLmVsZW1lbnQuc2Nyb2xsQnlMaW5lcyhzY3JvbGxWYWx1ZSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBzY3JvbGxWYWx1ZSA9
IDA7Ci0gICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRT
aG9ydGN1dC5LZXlzLkxlZnQuY29kZSkKLSAgICAgICAgICAgIHNjcm9sbFZhbHVlID0gLTQwOwot
ICAgICAgICBlbHNlIGlmIChldmVudC5rZXlDb2RlID09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNo
b3J0Y3V0LktleXMuUmlnaHQuY29kZSkKLSAgICAgICAgICAgIHNjcm9sbFZhbHVlID0gNDA7Ci0K
LSAgICAgICAgaWYgKHNjcm9sbFZhbHVlKSB7Ci0gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVm
YXVsdCgpOwotICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgICAg
ICB0aGlzLmVsZW1lbnQuc2Nyb2xsTGVmdCArPSBzY3JvbGxWYWx1ZTsKLSAgICAgICAgfQorICAg
ICAgICB0aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbC0tOworICAgICAgICBpZiAoIXRoaXMuX3Bh
aW50Q29hbGVzY2luZ0xldmVsKQorICAgICAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOwogICAg
IH0sCiAKLSAgICBlZGl0TGluZTogZnVuY3Rpb24obGluZVJvdywgY2FsbGJhY2spCisgICAgcmVz
aXplOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB2YXIgZWxlbWVudCA9IGxpbmVSb3cubGFz
dENoaWxkOwotICAgICAgICB2YXIgb2xkQ29udGVudCA9IGVsZW1lbnQuaW5uZXJIVE1MOwotICAg
ICAgICBmdW5jdGlvbiBmaW5pc2hFZGl0aW5nKGNvbW1pdHRlZCwgZSwgbmV3Q29udGVudCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKGNvbW1pdHRlZCkKLSAgICAgICAgICAgICAgICBjYWxs
YmFjayhuZXdDb250ZW50KTsKLSAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gb2xkQ29u
dGVudDsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9lZGl0aW5nTGluZTsKLSAgICAgICAgfQot
ICAgICAgICB0aGlzLl9lZGl0aW5nTGluZSA9IFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmcoZWxl
bWVudCwgewotICAgICAgICAgICAgY29udGV4dDogbnVsbCwKLSAgICAgICAgICAgIGNvbW1pdEhh
bmRsZXI6IGZpbmlzaEVkaXRpbmcuYmluZCh0aGlzLCB0cnVlKSwKLSAgICAgICAgICAgIGNhbmNl
bEhhbmRsZXI6IGZpbmlzaEVkaXRpbmcuYmluZCh0aGlzLCBmYWxzZSksCi0gICAgICAgICAgICBt
dWx0aWxpbmU6IHRydWUKLSAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX3NjaGVkdWxlUmVwYWlu
dEFsbCgpOwogICAgIH0sCiAKLSAgICBfYmVmb3JlQ29weTogZnVuY3Rpb24oZSkKKyAgICBfc2Ny
b2xsOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAg
ICAgIHRoaXMuX3NjaGVkdWxlUmVwYWludEFsbCgpOworICAgICAgICBpZiAodGhpcy5fc3luY1Nj
cm9sbExpc3RlbmVyKQorICAgICAgICAgICAgdGhpcy5fc3luY1Njcm9sbExpc3RlbmVyKCk7CiAg
ICAgfSwKIAotICAgIF9jb3B5OiBmdW5jdGlvbihlKQorICAgIF9zY2hlZHVsZVJlcGFpbnRBbGw6
IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciByYW5nZSA9IHRoaXMuX2dldFNlbGVjdGlv
bigpOwotICAgICAgICB2YXIgdGV4dCA9IHRoaXMuX3RleHRNb2RlbC5jb3B5UmFuZ2UocmFuZ2Up
OwotICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuY29weVRleHQodGV4dCk7Ci0gICAgICAg
IGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgaWYgKHRoaXMuX3JlcGFpbnRBbGxUaW1lcikK
KyAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXBhaW50QWxsVGltZXIpOworICAgICAg
ICB0aGlzLl9yZXBhaW50QWxsVGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuX3JlcGFpbnRBbGwuYmlu
ZCh0aGlzKSwgNTApOwogICAgIH0sCiAKLSAgICBiZWdpblVwZGF0ZXM6IGZ1bmN0aW9uKGVuYWJs
ZWQpCisgICAgX2J1aWxkQ2h1bmtzOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB0aGlzLl9w
YWludENvYWxlc2NpbmdMZXZlbCsrOwotICAgIH0sCisgICAgICAgIHRoaXMuZWxlbWVudC5yZW1v
dmVDaGlsZHJlbigpOwogCi0gICAgZW5kVXBkYXRlczogZnVuY3Rpb24oZW5hYmxlZCkKLSAgICB7
Ci0gICAgICAgIHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsLS07Ci0gICAgICAgIGlmICghdGhp
cy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwpCi0gICAgICAgICAgICB0aGlzLl9yZXBhaW50QWxsKCk7
CisgICAgICAgIHRoaXMuX3RleHRDaHVua3MgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudDsgaSArPSB0aGlzLl9kZWZhdWx0Q2h1bmtT
aXplKSB7CisgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9jcmVhdGVOZXdDaHVuayhpLCBp
ICsgdGhpcy5fZGVmYXVsdENodW5rU2l6ZSk7CisgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtz
LnB1c2goY2h1bmspOworICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNodW5r
LmVsZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOwogICAg
IH0sCiAKLSAgICBfY2h1bmtGb3JPZmZzZXQ6IGZ1bmN0aW9uKG9mZnNldCkKKyAgICBfcmVwYWlu
dEFsbDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdmFyIGN1cnJlbnRPZmZzZXQgPSAwOwot
ICAgICAgICB2YXIgcm93ID0gdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50LmZpcnN0Q2hpbGQ7
Ci0gICAgICAgIHdoaWxlIChyb3cpIHsKLSAgICAgICAgICAgIHZhciByb3dIZWlnaHQgPSByb3cu
b2Zmc2V0SGVpZ2h0OwotICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBjdXJyZW50T2Zmc2V0ICYm
IG9mZnNldCA8IGN1cnJlbnRPZmZzZXQgKyByb3dIZWlnaHQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHJvdy5jaHVua051bWJlcjsKLSAgICAgICAgICAgIHJvdyA9IHJvdy5uZXh0U2libGluZzsK
LSAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gcm93SGVpZ2h0OworICAgICAgICBkZWxldGUg
dGhpcy5fcmVwYWludEFsbFRpbWVyOworCisgICAgICAgIGlmICh0aGlzLl9wYWludENvYWxlc2Np
bmdMZXZlbCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoIXRoaXMuX3RleHRD
aHVua3MpCisgICAgICAgICAgICB0aGlzLl9idWlsZENodW5rcygpOworCisgICAgICAgIHZhciB2
aXNpYmxlRnJvbSA9IHRoaXMuZWxlbWVudC5zY3JvbGxUb3A7CisgICAgICAgIHZhciB2aXNpYmxl
VG8gPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wICsgdGhpcy5lbGVtZW50LmNsaWVudEhlaWdodDsK
KworICAgICAgICB2YXIgb2Zmc2V0ID0gMDsKKyAgICAgICAgdmFyIGZyb21JbmRleCA9IC0xOwor
ICAgICAgICB2YXIgdG9JbmRleCA9IDA7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhp
cy5fdGV4dENodW5rcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIGNodW5rID0gdGhp
cy5fdGV4dENodW5rc1tpXTsKKyAgICAgICAgICAgIHZhciBjaHVua0hlaWdodCA9IGNodW5rLmhl
aWdodDsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgKyBjaHVua0hlaWdodCA+IHZpc2libGVGcm9t
ICYmIG9mZnNldCA8IHZpc2libGVUbykgeworICAgICAgICAgICAgICAgIGlmIChmcm9tSW5kZXgg
PT09IC0xKQorICAgICAgICAgICAgICAgICAgICBmcm9tSW5kZXggPSBpOworICAgICAgICAgICAg
ICAgIHRvSW5kZXggPSBpICsgMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgaWYgKG9mZnNldCA+PSB2aXNpYmxlVG8pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgb2Zmc2V0ICs9IGNodW5rSGVpZ2h0OwogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aCAtIDE7CisKKyAgICAg
ICAgaWYgKHRvSW5kZXgpCisgICAgICAgICAgICB0aGlzLl9leHBhbmRDaHVua3MoZnJvbUluZGV4
LCB0b0luZGV4KTsKICAgICB9LAogCiAgICAgX2NodW5rTnVtYmVyRm9yTGluZTogZnVuY3Rpb24o
bGluZU51bWJlcikKICAgICB7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4
dENodW5rcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0
Q2h1bmtzW2ldLnN0YXJ0TGluZTsKLSAgICAgICAgICAgIGlmIChsaW5lTnVtYmVyID49IHRoaXMu
X3RleHRDaHVua3NbaV0uc3RhcnRMaW5lICYmIGxpbmVOdW1iZXIgPCB0aGlzLl90ZXh0Q2h1bmtz
W2ldLnN0YXJ0TGluZSArIHRoaXMuX3RleHRDaHVua3NbaV0ubGluZXNDb3VudCkKKyAgICAgICAg
ICAgIGlmIChsaW5lTnVtYmVyID49IGxpbmUgJiYgbGluZU51bWJlciA8IGxpbmUgKyB0aGlzLl90
ZXh0Q2h1bmtzW2ldLmxpbmVzQ291bnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRDaHVua3MubGVuZ3RoIC0gMTsKQEAgLTMx
Nyw1MCArNDAzLDIyOSBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUgPSB7CiAg
ICAgX2NodW5rRm9yTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKICAgICB7CiAgICAgICAgIHJl
dHVybiB0aGlzLl90ZXh0Q2h1bmtzW3RoaXMuX2NodW5rTnVtYmVyRm9yTGluZShsaW5lTnVtYmVy
KV07CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlclBhbmVsID0gZnVu
Y3Rpb24odGV4dE1vZGVsKQoreworICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBh
bmVsLmNhbGwodGhpcywgdGV4dE1vZGVsKTsKKworICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAidGV4
dC1lZGl0b3ItbGluZXMiOworCisgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNj
cm9sbCIsIHRoaXMuX3Njcm9sbC5iaW5kKHRoaXMpLCBmYWxzZSk7CisKKyAgICB0aGlzLmZyZWVD
YWNoZWRFbGVtZW50cygpOworICAgIHRoaXMuX2J1aWxkQ2h1bmtzKCk7Cit9CisKK1dlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFuZWwucHJvdG90eXBlID0geworICAgIGZyZWVDYWNoZWRF
bGVtZW50czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2FjaGVkUm93cyA9IFtd
OwogICAgIH0sCiAKLSAgICBfY2h1bmtTdGFydExpbmU6IGZ1bmN0aW9uKGNodW5rTnVtYmVyKQor
ICAgIF9jcmVhdGVOZXdDaHVuazogZnVuY3Rpb24oc3RhcnRMaW5lLCBlbmRMaW5lKQogICAgIHsK
LSAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSAwOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGNodW5rTnVtYmVyICYmIGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytpKQotICAgICAg
ICAgICAgbGluZU51bWJlciArPSB0aGlzLl90ZXh0Q2h1bmtzW2ldLmxpbmVzQ291bnQ7Ci0gICAg
ICAgIHJldHVybiBsaW5lTnVtYmVyOworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5U
ZXh0RWRpdG9yR3V0dGVyQ2h1bmsodGhpcywgc3RhcnRMaW5lLCBlbmRMaW5lKTsKICAgICB9LAog
Ci0gICAgX3JlcGFpbnRBbGw6IGZ1bmN0aW9uKCkKKyAgICBfZXhwYW5kQ2h1bmtzOiBmdW5jdGlv
bihmcm9tSW5kZXgsIHRvSW5kZXgpCiAgICAgewotICAgICAgICBpZiAodGhpcy5fcGFpbnRDb2Fs
ZXNjaW5nTGV2ZWwpCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dENodW5r
cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rc1tpXS5leHBhbmRl
ZCA9IChmcm9tSW5kZXggPD0gaSAmJiBpIDwgdG9JbmRleCk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFuZWwucHJvdG90eXBlLl9fcHJvdG9f
XyA9IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZTsKKworV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuayA9IGZ1bmN0aW9uKHRleHRFZGl0b3IsIHN0
YXJ0TGluZSwgZW5kTGluZSkKK3sKKyAgICB0aGlzLl90ZXh0RWRpdG9yID0gdGV4dEVkaXRvcjsK
KyAgICB0aGlzLl90ZXh0TW9kZWwgPSB0ZXh0RWRpdG9yLl90ZXh0TW9kZWw7CisKKyAgICB0aGlz
LnN0YXJ0TGluZSA9IHN0YXJ0TGluZTsKKyAgICBlbmRMaW5lID0gTWF0aC5taW4odGhpcy5fdGV4
dE1vZGVsLmxpbmVzQ291bnQsIGVuZExpbmUpOworICAgIHRoaXMubGluZXNDb3VudCA9IGVuZExp
bmUgLSBzdGFydExpbmU7CisKKyAgICB0aGlzLl9leHBhbmRlZCA9IGZhbHNlOworCisgICAgdGhp
cy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgdGhpcy5lbGVt
ZW50LmxpbmVOdW1iZXIgPSBzdGFydExpbmU7CisgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9
ICJ3ZWJraXQtbGluZS1udW1iZXIiOworCisgICAgaWYgKHRoaXMubGluZXNDb3VudCA9PT0gMSkg
eworICAgICAgICAvLyBTaW5nbGUgbGluZSBjaHVua3MgYXJlIHR5cGljYWxseSBjcmVhdGVkIGZv
ciBkZWNvcmF0aW9ucy4gSG9zdCBsaW5lIG51bWJlciBpbgorICAgICAgICAvLyB0aGUgc3ViLWVs
ZW1lbnQgaW4gb3JkZXIgdG8gYWxsb3cgZmxleGlibGUgYm9yZGVyIC8gbWFyZ2luIG1hbmFnZW1l
bnQuCisgICAgICAgIHZhciBpbm5lclNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFu
Iik7CisgICAgICAgIGlubmVyU3Bhbi5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtbnVtYmVyLWlu
bmVyIjsKKyAgICAgICAgaW5uZXJTcGFuLnRleHRDb250ZW50ID0gc3RhcnRMaW5lICsgMTsKKyAg
ICAgICAgdmFyIG91dGVyU3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAg
ICAgICBvdXRlclNwYW4uY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLW51bWJlci1vdXRlciI7Cisg
ICAgICAgIG91dGVyU3Bhbi5hcHBlbmRDaGlsZChpbm5lclNwYW4pOworICAgICAgICB0aGlzLmVs
ZW1lbnQuYXBwZW5kQ2hpbGQob3V0ZXJTcGFuKTsKKyAgICB9IGVsc2UgeworICAgICAgICB2YXIg
bGluZU51bWJlcnMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0TGluZTsgaSA8IGVu
ZExpbmU7ICsraSkgeworICAgICAgICAgICAgbGluZU51bWJlcnMucHVzaChpICsgMSk7CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5lbGVtZW50LnRleHRDb250ZW50ID0gbGluZU51bWJlcnMuam9p
bigiXG4iKTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsu
cHJvdG90eXBlID0geworICAgIGdldCBleHBhbmRlZCgpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5fZXhwYW5kZWQ7CisgICAgfSwKKworICAgIHNldCBleHBhbmRlZChleHBhbmRlZCkKKyAg
ICB7CisgICAgICAgIGlmICh0aGlzLl9leHBhbmRlZCA9PT0gZXhwYW5kZWQpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgaWYgKCF0aGlzLl90ZXh0Q2h1bmtzKQotICAgICAgICAgICAg
dGhpcy5fYnVpbGRDaHVua3MoKTsKKyAgICAgICAgdGhpcy5fZXhwYW5kZWQgPSBleHBhbmRlZDsK
IAotICAgICAgICB2YXIgdmlzaWJsZUZyb20gPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wOwotICAg
ICAgICB2YXIgdmlzaWJsZVRvID0gdGhpcy5lbGVtZW50LnNjcm9sbFRvcCArIHRoaXMuZWxlbWVu
dC5jbGllbnRIZWlnaHQ7CisgICAgICAgIGlmICh0aGlzLmxpbmVzQ291bnQgPT09IDEpIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgIHZhciBvZmZzZXQgPSAwOwot
ICAgICAgICB2YXIgZmlyc3RWaXNpYmxlTGluZSA9IC0xOwotICAgICAgICB2YXIgbGFzdFZpc2li
bGVMaW5lID0gMDsKLSAgICAgICAgdmFyIHRvRXhwYW5kID0gW107Ci0gICAgICAgIHZhciB0b0Nv
bGxhcHNlID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dENodW5r
cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fdGV4dENodW5r
c1tpXTsKLSAgICAgICAgICAgIHZhciBjaHVua0hlaWdodCA9IGNodW5rLmhlaWdodDsKLSAgICAg
ICAgICAgIGlmIChvZmZzZXQgKyBjaHVua0hlaWdodCA+IHZpc2libGVGcm9tICYmIG9mZnNldCA8
IHZpc2libGVUbykgewotICAgICAgICAgICAgICAgIHRvRXhwYW5kLnB1c2goY2h1bmspOwotICAg
ICAgICAgICAgICAgIGlmIChmaXJzdFZpc2libGVMaW5lID09PSAtMSkKLSAgICAgICAgICAgICAg
ICAgICAgZmlyc3RWaXNpYmxlTGluZSA9IGNodW5rLnN0YXJ0TGluZTsKLSAgICAgICAgICAgICAg
ICBsYXN0VmlzaWJsZUxpbmUgPSBjaHVuay5zdGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50Owot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0b0NvbGxhcHNlLnB1c2goY2h1
bmspOwotICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gdmlzaWJsZVRvKQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGV4cGFuZGVkKSB7CisgICAgICAgICAgICB0
aGlzLl9leHBhbmRlZExpbmVSb3dzID0gW107CisgICAgICAgICAgICB2YXIgcGFyZW50RWxlbWVu
dCA9IHRoaXMuZWxlbWVudC5wYXJlbnRFbGVtZW50OworICAgICAgICAgICAgZm9yICh2YXIgaSA9
IHRoaXMuc3RhcnRMaW5lOyBpIDwgdGhpcy5zdGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQ7ICsr
aSkgeworICAgICAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fY3JlYXRlUm93KGkpOwor
ICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGxpbmVSb3csIHRoaXMu
ZWxlbWVudCk7CisgICAgICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5wdXNoKGxp
bmVSb3cpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgb2Zmc2V0ICs9IGNodW5rSGVpZ2h0
OworICAgICAgICAgICAgcGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGVsZW1lbnRJbnNlcnRlZCA9IGZhbHNl
OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9leHBhbmRlZExpbmVSb3dz
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl9leHBh
bmRlZExpbmVSb3dzW2ldOworICAgICAgICAgICAgICAgIHZhciBwYXJlbnRFbGVtZW50ID0gbGlu
ZVJvdy5wYXJlbnRFbGVtZW50OworICAgICAgICAgICAgICAgIGlmIChwYXJlbnRFbGVtZW50KSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghZWxlbWVudEluc2VydGVkKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtZW50SW5zZXJ0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50LCBsaW5lUm93KTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0RWRp
dG9yLl9jYWNoZWRSb3dzLnB1c2gobGluZVJvdyk7CisgICAgICAgICAgICAgICAgICAgIHBhcmVu
dEVsZW1lbnQucmVtb3ZlQ2hpbGQobGluZVJvdyk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2V4cGFuZGVkTGluZVJvd3M7CisgICAg
ICAgIH0KKyAgICB9LAorCisgICAgZ2V0IGhlaWdodCgpCisgICAgeworICAgICAgICBpZiAoIXRo
aXMuX2V4cGFuZGVkTGluZVJvd3MpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm9m
ZnNldEhlaWdodDsKKyAgICAgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5sZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgdmFyIGxpbmVSb3cgPSB0aGlzLl9leHBhbmRlZExpbmVSb3dzW2ldOworICAgICAgICAgICAg
cmVzdWx0ICs9IGxpbmVSb3cub2Zmc2V0SGVpZ2h0OworICAgICAgICB9CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfSwKKworICAgIF9jcmVhdGVSb3c6IGZ1bmN0aW9uKGxpbmVOdW1iZXIp
CisgICAgeworICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX3RleHRFZGl0b3IuX2NhY2hlZFJv
d3MucG9wKCkgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIGxpbmVS
b3cubGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgIGxpbmVSb3cuY2xhc3NOYW1lID0g
IndlYmtpdC1saW5lLW51bWJlciI7CisgICAgICAgIGxpbmVSb3cudGV4dENvbnRlbnQgPSBsaW5l
TnVtYmVyICsgMTsKKyAgICAgICAgcmV0dXJuIGxpbmVSb3c7CisgICAgfQorfQorCitXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbCA9IGZ1bmN0aW9uKHRleHRNb2RlbCwgdXJsKQorewor
ICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLmNhbGwodGhpcywgdGV4dE1v
ZGVsKTsKKworICAgIHRoaXMuX3VybCA9IHVybDsKKyAgICB0aGlzLl9oaWdobGlnaHRlciA9IG5l
dyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckhpZ2hsaWdodGVyKHRleHRNb2RlbCwgdGhpcy5faGln
aGxpZ2h0RGF0YVJlYWR5LmJpbmQodGhpcykpOworCisgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJ0
ZXh0LWVkaXRvci1jb250ZW50cyI7CisKKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5l
cigic2Nyb2xsIiwgdGhpcy5fc2Nyb2xsLmJpbmQodGhpcyksIGZhbHNlKTsKKyAgICB0aGlzLmVs
ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkIiwgdGhpcy5f
aGFuZGxlRG9tVXBkYXRlcy5iaW5kKHRoaXMpLCBmYWxzZSk7CisgICAgdGhpcy5lbGVtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoIkRPTU5vZGVJbnNlcnRlZCIsIHRoaXMuX2hhbmRsZURvbVVwZGF0ZXMu
YmluZCh0aGlzKSwgZmFsc2UpOworICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJE
T01Ob2RlUmVtb3ZlZCIsIHRoaXMuX2hhbmRsZURvbVVwZGF0ZXMuYmluZCh0aGlzKSwgZmFsc2Up
OworCisgICAgdGhpcy5mcmVlQ2FjaGVkRWxlbWVudHMoKTsKKyAgICB0aGlzLl9idWlsZENodW5r
cygpOworfQorCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7
CisgICAgc2V0IHN5bmNEZWNvcmF0aW9uc0ZvckxpbmUobGlzdGVuZXIpCisgICAgeworICAgICAg
ICB0aGlzLl9zeW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICB9
LAorCisgICAgc2V0IG1pbWVUeXBlKG1pbWVUeXBlKQorICAgIHsKKyAgICAgICAgdGhpcy5faGln
aGxpZ2h0ZXIubWltZVR5cGUgPSBtaW1lVHlwZTsKKyAgICB9LAorCisgICAgbWFya0FuZFJldmVh
bFJhbmdlOiBmdW5jdGlvbihyYW5nZSkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9yYW5nZVRv
TWFyaykgeworICAgICAgICAgICAgdmFyIG1hcmtlZExpbmUgPSB0aGlzLl9yYW5nZVRvTWFyay5z
dGFydExpbmU7CisgICAgICAgICAgICB0aGlzLl9yYW5nZVRvTWFyayA9IG51bGw7CisgICAgICAg
ICAgICB0aGlzLl9wYWludExpbmVzKG1hcmtlZExpbmUsIG1hcmtlZExpbmUgKyAxKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChyYW5nZSkgeworICAgICAgICAgICAgdGhpcy5fcmFuZ2VUb01h
cmsgPSByYW5nZTsKKyAgICAgICAgICAgIHRoaXMucmV2ZWFsTGluZShyYW5nZS5zdGFydExpbmUp
OworICAgICAgICAgICAgdGhpcy5fcGFpbnRMaW5lcyhyYW5nZS5zdGFydExpbmUsIHJhbmdlLnN0
YXJ0TGluZSArIDEpOworICAgICAgICAgICAgaWYgKHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudCkK
KyAgICAgICAgICAgICAgICB0aGlzLl9tYXJrZWRSYW5nZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJ
Zk5lZWRlZCgpOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZSB0aGlzLl9tYXJrZWRSYW5nZUVs
ZW1lbnQ7CisgICAgfSwKKworICAgIGhpZ2hsaWdodExpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIp
CisgICAgeworICAgICAgICB0aGlzLmNsZWFyTGluZUhpZ2hsaWdodCgpOworICAgICAgICB0aGlz
Ll9oaWdobGlnaHRlZExpbmUgPSBsaW5lTnVtYmVyOworICAgICAgICB0aGlzLnJldmVhbExpbmUo
bGluZU51bWJlcik7CisgICAgICAgIHRoaXMuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Vi
a2l0LWhpZ2hsaWdodGVkLWxpbmUiKTsKKyAgICB9LAorCisgICAgY2xlYXJMaW5lSGlnaGxpZ2h0
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2hpZ2hsaWdodGVk
TGluZSA9PT0gIm51bWJlciIpIHsKKyAgICAgICAgICAgIHRoaXMucmVtb3ZlRGVjb3JhdGlvbih0
aGlzLl9oaWdobGlnaHRlZExpbmUsICJ3ZWJraXQtaGlnaGxpZ2h0ZWQtbGluZSIpOworICAgICAg
ICAgICAgZGVsZXRlIHRoaXMuX2hpZ2hsaWdodGVkTGluZTsKICAgICAgICAgfQorICAgIH0sCisK
KyAgICBmcmVlQ2FjaGVkRWxlbWVudHM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMu
X2NhY2hlZFNwYW5zID0gW107CisgICAgICAgIHRoaXMuX2NhY2hlZFRleHROb2RlcyA9IFtdOwor
ICAgICAgICB0aGlzLl9jYWNoZWRSb3dzID0gW107CisgICAgfSwKIAotICAgICAgICBmb3IgKHZh
ciBqID0gaTsgaiA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2opCi0gICAgICAgICAgICB0
b0NvbGxhcHNlLnB1c2godGhpcy5fdGV4dENodW5rc1tpXSk7CisgICAgX2J1aWxkQ2h1bmtzOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9oaWdobGlnaHRlci5yZXNldCgpOworICAg
ICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX2J1aWxk
Q2h1bmtzLmNhbGwodGhpcyk7CisgICAgfSwKKworICAgIF9jcmVhdGVOZXdDaHVuazogZnVuY3Rp
b24oc3RhcnRMaW5lLCBlbmRMaW5lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuayh0aGlzLCBzdGFydExpbmUsIGVuZExpbmUpOworICAg
IH0sCisKKyAgICBfZXhwYW5kQ2h1bmtzOiBmdW5jdGlvbihmcm9tSW5kZXgsIHRvSW5kZXgpCisg
ICAgeworICAgICAgICB2YXIgbGFzdENodW5rID0gdGhpcy5fdGV4dENodW5rc1t0b0luZGV4IC0g
MV07CisgICAgICAgIHZhciBsYXN0VmlzaWJsZUxpbmUgPSBsYXN0Q2h1bmsuc3RhcnRMaW5lICsg
bGFzdENodW5rLmxpbmVzQ291bnQ7CiAKICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2dl
dFNlbGVjdGlvbigpOwogCkBAIC0zNjgsMTAgKzYzMyw5IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmll
d2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZXIuaGlnaGxpZ2h0KGxh
c3RWaXNpYmxlTGluZSk7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9tdXRlSGlnaGxpZ2h0TGlzdGVu
ZXI7CiAKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b0NvbGxhcHNlLmxlbmd0aDsgKytp
KQotICAgICAgICAgICAgdG9Db2xsYXBzZVtpXS5leHBhbmRlZCA9IGZhbHNlOwotICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHRvRXhwYW5kLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdG9F
eHBhbmRbaV0uZXhwYW5kZWQgPSB0cnVlOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRo
aXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHRoaXMuX3RleHRDaHVu
a3NbaV0uZXhwYW5kZWQgPSAoZnJvbUluZGV4IDw9IGkgJiYgaSA8IHRvSW5kZXgpOworICAgICAg
ICB9CiAKICAgICAgICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihzZWxlY3Rpb24pOwogICAgIH0s
CkBAIC0zODAsNDAgKzY0NCw0MCBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUg
PSB7CiAgICAgewogICAgICAgICBpZiAodGhpcy5fbXV0ZUhpZ2hsaWdodExpc3RlbmVyKQogICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLl9wYWludExpbmVzKGZyb21MaW5lLCB0b0xp
bmUsIHRydWUgLypyZXN0b3JlU2VsZWN0aW9uKi8pOworICAgIH0sCiAKKyAgICBfcGFpbnRMaW5l
czogZnVuY3Rpb24oZnJvbUxpbmUsIHRvTGluZSwgcmVzdG9yZVNlbGVjdGlvbikKKyAgICB7CiAg
ICAgICAgIHZhciBzZWxlY3Rpb247CisgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX2NodW5rRm9y
TGluZShmcm9tTGluZSk7CiAgICAgICAgIGZvciAodmFyIGkgPSBmcm9tTGluZTsgaSA8IHRvTGlu
ZTsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX3RleHRNb2RlbC5nZXRB
dHRyaWJ1dGUoaSwgImxpbmUtcm93Iik7Ci0gICAgICAgICAgICBpZiAoIWxpbmVSb3cgfHwgbGlu
ZVJvdy5oaWdobGlnaHRlZCkKKyAgICAgICAgICAgIGlmIChpID49IGNodW5rLnN0YXJ0TGluZSAr
IGNodW5rLmxpbmVzQ291bnQpCisgICAgICAgICAgICAgICAgY2h1bmsgPSB0aGlzLl9jaHVua0Zv
ckxpbmUoaSk7CisgICAgICAgICAgICB2YXIgbGluZVJvdyA9IGNodW5rLmdldEV4cGFuZGVkTGlu
ZVJvdyhpKTsKKyAgICAgICAgICAgIGlmICghbGluZVJvdykKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIGlmICghc2VsZWN0aW9uKQorICAgICAgICAgICAgaWYgKHJlc3Rv
cmVTZWxlY3Rpb24gJiYgIXNlbGVjdGlvbikKICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSB0
aGlzLl9nZXRTZWxlY3Rpb24oKTsKICAgICAgICAgICAgIHRoaXMuX3BhaW50TGluZShsaW5lUm93
LCBpKTsKICAgICAgICAgfQotICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlv
bik7Ci0gICAgfSwKLQotICAgIF9wYWludExpbmVzOiBmdW5jdGlvbihmcm9tTGluZSwgdG9MaW5l
KQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IGZyb21MaW5lOyBpIDwgdG9MaW5lOyArK2kp
IHsKLSAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0
ZShpLCAibGluZS1yb3ciKTsKLSAgICAgICAgICAgIGlmIChsaW5lUm93KQotICAgICAgICAgICAg
ICAgIHRoaXMuX3BhaW50TGluZShsaW5lUm93LCBpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAo
cmVzdG9yZVNlbGVjdGlvbikKKyAgICAgICAgICAgIHRoaXMuX3Jlc3RvcmVTZWxlY3Rpb24oc2Vs
ZWN0aW9uKTsKICAgICB9LAogCiAgICAgX3BhaW50TGluZTogZnVuY3Rpb24obGluZVJvdywgbGlu
ZU51bWJlcikKICAgICB7Ci0gICAgICAgIHZhciBlbGVtZW50ID0gbGluZVJvdy5sYXN0Q2hpbGQ7
CiAgICAgICAgIHZhciBoaWdobGlnaHQgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGxp
bmVOdW1iZXIsICJoaWdobGlnaHQiKTsKICAgICAgICAgaWYgKCFoaWdobGlnaHQpIHsKICAgICAg
ICAgICAgIGlmICh0aGlzLl9yYW5nZVRvTWFyayAmJiB0aGlzLl9yYW5nZVRvTWFyay5zdGFydExp
bmUgPT09IGxpbmVOdW1iZXIpCi0gICAgICAgICAgICAgICAgdGhpcy5fbWFya2VkUmFuZ2VFbGVt
ZW50ID0gaGlnaGxpZ2h0U2VhcmNoUmVzdWx0KGVsZW1lbnQsIHRoaXMuX3JhbmdlVG9NYXJrLnN0
YXJ0Q29sdW1uLCB0aGlzLl9yYW5nZVRvTWFyay5lbmRDb2x1bW4gLSB0aGlzLl9yYW5nZVRvTWFy
ay5zdGFydENvbHVtbik7CisgICAgICAgICAgICAgICAgdGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50
ID0gaGlnaGxpZ2h0U2VhcmNoUmVzdWx0KGxpbmVSb3csIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0
Q29sdW1uLCB0aGlzLl9yYW5nZVRvTWFyay5lbmRDb2x1bW4gLSB0aGlzLl9yYW5nZVRvTWFyay5z
dGFydENvbHVtbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBl
bGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgIGxpbmVSb3cucmVtb3ZlQ2hpbGRyZW4o
KTsKICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKTsK
KyAgICAgICAgaWYgKCFsaW5lKQorICAgICAgICAgICAgbGluZVJvdy5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKIAogICAgICAgICB2YXIgcGxhaW5UZXh0U3RhcnQg
PSAtMTsKICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaW5lLmxlbmd0aDspIHsKQEAgLTQz
MCw5OCArNjk0LDY0IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgICAgICBqKys7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IGlmIChwbGFpblRleHRTdGFydCAhPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5f
YXBwZW5kVGV4dE5vZGUoZWxlbWVudCwgbGluZS5zdWJzdHJpbmcocGxhaW5UZXh0U3RhcnQsIGop
KTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwZW5kVGV4dE5vZGUobGluZVJvdywgbGlu
ZS5zdWJzdHJpbmcocGxhaW5UZXh0U3RhcnQsIGopKTsKICAgICAgICAgICAgICAgICAgICAgcGxh
aW5UZXh0U3RhcnQgPSAtMTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhp
cy5fYXBwZW5kU3BhbihlbGVtZW50LCBsaW5lLnN1YnN0cmluZyhqLCBqICsgYXR0cmlidXRlLmxl
bmd0aCksIGF0dHJpYnV0ZS50b2tlblR5cGUpOworICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVu
ZFNwYW4obGluZVJvdywgbGluZS5zdWJzdHJpbmcoaiwgaiArIGF0dHJpYnV0ZS5sZW5ndGgpLCBh
dHRyaWJ1dGUudG9rZW5UeXBlKTsKICAgICAgICAgICAgICAgICBqICs9IGF0dHJpYnV0ZS5sZW5n
dGg7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0
ICE9PSAtMSkKLSAgICAgICAgICAgIHRoaXMuX2FwcGVuZFRleHROb2RlKGVsZW1lbnQsIGxpbmUu
c3Vic3RyaW5nKHBsYWluVGV4dFN0YXJ0LCBsaW5lLmxlbmd0aCkpOworICAgICAgICAgICAgdGhp
cy5fYXBwZW5kVGV4dE5vZGUobGluZVJvdywgbGluZS5zdWJzdHJpbmcocGxhaW5UZXh0U3RhcnQs
IGxpbmUubGVuZ3RoKSk7CiAgICAgICAgIGlmICh0aGlzLl9yYW5nZVRvTWFyayAmJiB0aGlzLl9y
YW5nZVRvTWFyay5zdGFydExpbmUgPT09IGxpbmVOdW1iZXIpCi0gICAgICAgICAgICB0aGlzLl9t
YXJrZWRSYW5nZUVsZW1lbnQgPSBoaWdobGlnaHRTZWFyY2hSZXN1bHQoZWxlbWVudCwgdGhpcy5f
cmFuZ2VUb01hcmsuc3RhcnRDb2x1bW4sIHRoaXMuX3JhbmdlVG9NYXJrLmVuZENvbHVtbiAtIHRo
aXMuX3JhbmdlVG9NYXJrLnN0YXJ0Q29sdW1uKTsKKyAgICAgICAgICAgIHRoaXMuX21hcmtlZFJh
bmdlRWxlbWVudCA9IGhpZ2hsaWdodFNlYXJjaFJlc3VsdChsaW5lUm93LCB0aGlzLl9yYW5nZVRv
TWFyay5zdGFydENvbHVtbiwgdGhpcy5fcmFuZ2VUb01hcmsuZW5kQ29sdW1uIC0gdGhpcy5fcmFu
Z2VUb01hcmsuc3RhcnRDb2x1bW4pOwogICAgICAgICBpZiAobGluZVJvdy5kZWNvcmF0aW9uc0Vs
ZW1lbnQpCi0gICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGxpbmVSb3cuZGVjb3JhdGlv
bnNFbGVtZW50KTsKKyAgICAgICAgICAgIGxpbmVSb3cuYXBwZW5kQ2hpbGQobGluZVJvdy5kZWNv
cmF0aW9uc0VsZW1lbnQpOwogICAgIH0sCiAKLSAgICBfcmVsZWFzZUxpbmVzSGlnaGxpZ2h0OiBm
dW5jdGlvbihmcm9tTGluZSwgdG9MaW5lKQorICAgIF9yZWxlYXNlTGluZXNIaWdobGlnaHQ6IGZ1
bmN0aW9uKGxpbmVSb3cpCiAgICAgewotICAgICAgICBmb3IgKHZhciBpID0gZnJvbUxpbmU7IGkg
PCB0b0xpbmU7ICsraSkgewotICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl90ZXh0TW9k
ZWwuZ2V0QXR0cmlidXRlKGksICJsaW5lLXJvdyIpOwotICAgICAgICAgICAgaWYgKCFsaW5lUm93
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBs
aW5lUm93Lmxhc3RDaGlsZDsKLSAgICAgICAgICAgIGlmICgic3BhbnMiIGluIGVsZW1lbnQpIHsK
LSAgICAgICAgICAgICAgICB2YXIgc3BhbnMgPSBlbGVtZW50LnNwYW5zOwotICAgICAgICAgICAg
ICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3BhbnMubGVuZ3RoOyArK2opCi0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuX2NhY2hlZFNwYW5zLnB1c2goc3BhbnNbal0pOwotICAgICAgICAgICAgICAg
IGRlbGV0ZSBlbGVtZW50LnNwYW5zOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCJ0
ZXh0Tm9kZXMiIGluIGVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICB2YXIgdGV4dE5vZGVzID0g
ZWxlbWVudC50ZXh0Tm9kZXM7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0
ZXh0Tm9kZXMubGVuZ3RoOyArK2opCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZFRl
eHROb2Rlcy5wdXNoKHRleHROb2Rlc1tqXSk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGVsZW1l
bnQudGV4dE5vZGVzOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAoIWxpbmVSb3cpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgic3BhbnMiIGluIGxpbmVSb3cpIHsKKyAgICAg
ICAgICAgIHZhciBzcGFucyA9IGxpbmVSb3cuc3BhbnM7CisgICAgICAgICAgICBmb3IgKHZhciBq
ID0gMDsgaiA8IHNwYW5zLmxlbmd0aDsgKytqKQorICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hl
ZFNwYW5zLnB1c2goc3BhbnNbal0pOworICAgICAgICAgICAgZGVsZXRlIGxpbmVSb3cuc3BhbnM7
CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCJ0ZXh0Tm9kZXMiIGluIGxpbmVSb3cpIHsKKyAgICAg
ICAgICAgIHZhciB0ZXh0Tm9kZXMgPSBsaW5lUm93LnRleHROb2RlczsKKyAgICAgICAgICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgdGV4dE5vZGVzLmxlbmd0aDsgKytqKQorICAgICAgICAgICAgICAg
IHRoaXMuX2NhY2hlZFRleHROb2Rlcy5wdXNoKHRleHROb2Rlc1tqXSk7CisgICAgICAgICAgICBk
ZWxldGUgbGluZVJvdy50ZXh0Tm9kZXM7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY2FjaGVk
Um93cy5wdXNoKGxpbmVSb3cpOwogICAgIH0sCiAKICAgICBfZ2V0U2VsZWN0aW9uOiBmdW5jdGlv
bigpCiAgICAgewogICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigp
OwotICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKQorICAgICAgICBpZiAoIXNlbGVj
dGlvbi5yYW5nZUNvdW50KQogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIHZhciBz
ZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgICAgICAvLyBTZWxl
Y3Rpb24gbWF5IGJlIG91dHNpZGUgb2YgdGhlIHZpZXdlci4KICAgICAgICAgaWYgKCF0aGlzLmVs
ZW1lbnQuaXNBbmNlc3RvcihzZWxlY3Rpb25SYW5nZS5zdGFydENvbnRhaW5lcikgfHwgIXRoaXMu
ZWxlbWVudC5pc0FuY2VzdG9yKHNlbGVjdGlvblJhbmdlLmVuZENvbnRhaW5lcikpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5fc2VsZWN0aW9uVG9Q
b3NpdGlvbihzZWxlY3Rpb25SYW5nZS5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uUmFuZ2Uuc3Rh
cnRPZmZzZXQpOwotICAgICAgICB2YXIgZW5kID0gdGhpcy5fc2VsZWN0aW9uVG9Qb3NpdGlvbihz
ZWxlY3Rpb25SYW5nZS5lbmRDb250YWluZXIsIHNlbGVjdGlvblJhbmdlLmVuZE9mZnNldCk7Ci0g
ICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShzdGFydC5saW5lLCBzdGFy
dC5jb2x1bW4sIGVuZC5saW5lLCBlbmQuY29sdW1uKTsKKyAgICAgICAgdmFyIGVuZCA9IHNlbGVj
dGlvblJhbmdlLmNvbGxhcHNlZCA/IHN0YXJ0IDogdGhpcy5fc2VsZWN0aW9uVG9Qb3NpdGlvbihz
ZWxlY3Rpb25SYW5nZS5lbmRDb250YWluZXIsIHNlbGVjdGlvblJhbmdlLmVuZE9mZnNldCk7Cisg
ICAgICAgIGlmIChzZWxlY3Rpb24uYW5jaG9yTm9kZSA9PT0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRD
b250YWluZXIgJiYgc2VsZWN0aW9uLmFuY2hvck9mZnNldCA9PT0gc2VsZWN0aW9uUmFuZ2Uuc3Rh
cnRPZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2Uo
c3RhcnQubGluZSwgc3RhcnQuY29sdW1uLCBlbmQubGluZSwgZW5kLmNvbHVtbik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShlbmQu
bGluZSwgZW5kLmNvbHVtbiwgc3RhcnQubGluZSwgc3RhcnQuY29sdW1uKTsKICAgICB9LAogCiAg
ICAgX3Jlc3RvcmVTZWxlY3Rpb246IGZ1bmN0aW9uKHJhbmdlKQogICAgIHsKICAgICAgICAgaWYg
KCFyYW5nZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIHN0YXJ0Um93ID0gdGhp
cy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShyYW5nZS5zdGFydExpbmUsICJsaW5lLXJvdyIpOwot
ICAgICAgICBpZiAoc3RhcnRSb3cpCi0gICAgICAgICAgICB2YXIgc3RhcnQgPSBzdGFydFJvdy5s
YXN0Q2hpbGQucmFuZ2VCb3VuZGFyeUZvck9mZnNldChyYW5nZS5zdGFydENvbHVtbik7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgdmFyIG9mZnNldCA9IHJhbmdlLnN0YXJ0Q29sdW1uOwot
ICAgICAgICAgICAgdmFyIGNodW5rTnVtYmVyID0gdGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5lKHJh
bmdlLnN0YXJ0TGluZSk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fY2h1bmtTdGFy
dExpbmUoY2h1bmtOdW1iZXIpOyBpIDwgcmFuZ2Uuc3RhcnRMaW5lOyArK2kpCi0gICAgICAgICAg
ICAgICAgb2Zmc2V0ICs9IHRoaXMuX3RleHRNb2RlbC5saW5lKGkpLmxlbmd0aCArIDE7IC8vIFxu
Ci0gICAgICAgICAgICB2YXIgbGluZUNlbGwgPSB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVtYmVy
XS5lbGVtZW50Lmxhc3RDaGlsZDsKLSAgICAgICAgICAgIGlmIChsaW5lQ2VsbC5maXJzdENoaWxk
KQotICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHsgY29udGFpbmVyOiBsaW5lQ2VsbC5maXJz
dENoaWxkLCBvZmZzZXQ6IG9mZnNldCB9OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHZhciBzdGFydCA9IHsgY29udGFpbmVyOiBsaW5lQ2VsbCwgb2Zmc2V0OiAwIH07Ci0gICAg
ICAgIH0KLQotICAgICAgICB2YXIgZW5kUm93ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0
ZShyYW5nZS5lbmRMaW5lLCAibGluZS1yb3ciKTsKLSAgICAgICAgaWYgKGVuZFJvdykKLSAgICAg
ICAgICAgIHZhciBlbmQgPSBlbmRSb3cubGFzdENoaWxkLnJhbmdlQm91bmRhcnlGb3JPZmZzZXQo
cmFuZ2UuZW5kQ29sdW1uKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB2YXIgb2Zmc2V0
ID0gcmFuZ2UuZW5kQ29sdW1uOwotICAgICAgICAgICAgdmFyIGNodW5rTnVtYmVyID0gdGhpcy5f
Y2h1bmtOdW1iZXJGb3JMaW5lKHJhbmdlLmVuZExpbmUpOwotICAgICAgICAgICAgZm9yICh2YXIg
aSA9IHRoaXMuX2NodW5rU3RhcnRMaW5lKGNodW5rTnVtYmVyKTsgaSA8IHJhbmdlLmVuZExpbmU7
ICsraSkKLSAgICAgICAgICAgICAgICBvZmZzZXQgKz0gdGhpcy5fdGV4dE1vZGVsLmxpbmUoaSku
bGVuZ3RoICsgMTsgLy8gXG4KLSAgICAgICAgICAgIHZhciBsaW5lQ2VsbCA9IHRoaXMuX3RleHRD
aHVua3NbY2h1bmtOdW1iZXJdLmVsZW1lbnQubGFzdENoaWxkOwotICAgICAgICAgICAgaWYgKGxp
bmVDZWxsLmZpcnN0Q2hpbGQpCi0gICAgICAgICAgICAgICAgdmFyIGVuZCA9IHsgY29udGFpbmVy
OiBsaW5lQ2VsbC5maXJzdENoaWxkLCBvZmZzZXQ6IG9mZnNldCB9OwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHZhciBlbmQgPSB7IGNvbnRhaW5lcjogbGluZUNlbGwsIG9mZnNl
dDogMCB9OwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHNlbGVjdGlvblJhbmdlID0gZG9jdW1l
bnQuY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgc2VsZWN0aW9uUmFuZ2Uuc2V0U3RhcnQoc3RhcnQu
Y29udGFpbmVyLCBzdGFydC5vZmZzZXQpOwotICAgICAgICBzZWxlY3Rpb25SYW5nZS5zZXRFbmQo
ZW5kLmNvbnRhaW5lciwgZW5kLm9mZnNldCk7Ci0KLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdp
bmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygp
OwotICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2Uoc2VsZWN0aW9uUmFuZ2UpOworICAgICAgICB2
YXIgc3RhcnQgPSB0aGlzLl9wb3NpdGlvblRvU2VsZWN0aW9uKHJhbmdlLnN0YXJ0TGluZSwgcmFu
Z2Uuc3RhcnRDb2x1bW4pOworICAgICAgICB2YXIgZW5kID0gcmFuZ2UuaXNFbXB0eSgpID8gc3Rh
cnQgOiB0aGlzLl9wb3NpdGlvblRvU2VsZWN0aW9uKHJhbmdlLmVuZExpbmUsIHJhbmdlLmVuZENv
bHVtbik7CisgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KHN0
YXJ0LmNvbnRhaW5lciwgc3RhcnQub2Zmc2V0LCBlbmQuY29udGFpbmVyLCBlbmQub2Zmc2V0KTsK
ICAgICB9LAogCiAgICAgX3NlbGVjdGlvblRvUG9zaXRpb246IGZ1bmN0aW9uKGNvbnRhaW5lciwg
b2Zmc2V0KQpAQCAtNTMxLDIxICs3NjEsMjYgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJv
dG90eXBlID0gewogICAgICAgICBpZiAoY29udGFpbmVyID09PSB0aGlzLmVsZW1lbnQgJiYgb2Zm
c2V0ID09PSAxKQogICAgICAgICAgICAgcmV0dXJuIHsgbGluZTogdGhpcy5fdGV4dE1vZGVsLmxp
bmVzQ291bnQgLSAxLCBjb2x1bW46IHRoaXMuX3RleHRNb2RlbC5saW5lTGVuZ3RoKHRoaXMuX3Rl
eHRNb2RlbC5saW5lc0NvdW50IC0gMSkgfTsKIAotICAgICAgICB2YXIgbGluZVJvdyA9IGNvbnRh
aW5lci5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1lKCJ0ciIpOworICAgICAgICB2YXIg
bGluZVJvdyA9IGNvbnRhaW5lci5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1lKCJESVYi
KTsKICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBsaW5lUm93LmxpbmVOdW1iZXI7Ci0gICAgICAg
IGlmIChjb250YWluZXIubm9kZU5hbWUgPT09ICJURCIgJiYgb2Zmc2V0ID09PSAwKQorICAgICAg
ICBpZiAoY29udGFpbmVyID09PSBsaW5lUm93ICYmIG9mZnNldCA9PT0gMCkKICAgICAgICAgICAg
IHJldHVybiB7IGxpbmU6IGxpbmVOdW1iZXIsIGNvbHVtbjogMCB9OwotICAgICAgICBpZiAoY29u
dGFpbmVyLm5vZGVOYW1lID09PSAiVEQiICYmIG9mZnNldCA9PT0gMSkKLSAgICAgICAgICAgIHJl
dHVybiB7IGxpbmU6IGxpbmVOdW1iZXIsIGNvbHVtbjogdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5n
dGgobGluZU51bWJlcikgfTsKIAorICAgICAgICAvLyBUaGlzIG1heSBiZSBjaHVuayBhbmQgY2h1
bmtzIG1heSBjb250YWluIFxuLgogICAgICAgICB2YXIgY29sdW1uID0gMDsKLSAgICAgICAgdmFy
IG5vZGUgPSBsaW5lUm93Lmxhc3RDaGlsZC50cmF2ZXJzZU5leHRUZXh0Tm9kZShsaW5lUm93Lmxh
c3RDaGlsZCk7CisgICAgICAgIHZhciBub2RlID0gbGluZVJvdy50cmF2ZXJzZU5leHRUZXh0Tm9k
ZShsaW5lUm93KTsKICAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPT0gY29udGFpbmVyKSB7
Ci0gICAgICAgICAgICBjb2x1bW4gKz0gbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7Ci0gICAgICAg
ICAgICBub2RlID0gbm9kZS50cmF2ZXJzZU5leHRUZXh0Tm9kZShsaW5lUm93Lmxhc3RDaGlsZCk7
CisgICAgICAgICAgICB2YXIgdGV4dCA9IG5vZGUudGV4dENvbnRlbnQ7CisgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBp
ZiAodGV4dC5jaGFyQXQoaSkgPT09ICJcbiIpIHsKKyAgICAgICAgICAgICAgICAgICAgbGluZU51
bWJlcisrOworICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSAwOworICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBjb2x1bW4rKzsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG5vZGUgPSBub2RlLnRyYXZlcnNlTmV4dFRleHROb2RlKGxpbmVSb3cpOwogICAg
ICAgICB9CiAKLSAgICAgICAgLy8gVGhpcyBtYXkgYmUgY2h1bmsgYW5kIGNodW5rcyBtYXkgY29u
dGFpbiBcbi4KICAgICAgICAgaWYgKG5vZGUgPT09IGNvbnRhaW5lciAmJiBvZmZzZXQpIHsKICAg
ICAgICAgICAgIHZhciB0ZXh0ID0gbm9kZS50ZXh0Q29udGVudDsKICAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgb2Zmc2V0OyArK2kpIHsKQEAgLTU1OSw2ICs3OTQsMjUgQEAgV2ViSW5z
cGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4geyBsaW5lOiBs
aW5lTnVtYmVyLCBjb2x1bW46IGNvbHVtbiB9OwogICAgIH0sCiAKKyAgICBfcG9zaXRpb25Ub1Nl
bGVjdGlvbjogZnVuY3Rpb24obGluZSwgY29sdW1uKQorICAgIHsKKyAgICAgICAgdmFyIGNodW5r
ID0gdGhpcy5fY2h1bmtGb3JMaW5lKGxpbmUpOworICAgICAgICB2YXIgbGluZVJvdyA9IGNodW5r
LmdldEV4cGFuZGVkTGluZVJvdyhsaW5lKTsKKyAgICAgICAgaWYgKGxpbmVSb3cpCisgICAgICAg
ICAgICB2YXIgcmFuZ2VCb3VuZGFyeSA9IGxpbmVSb3cucmFuZ2VCb3VuZGFyeUZvck9mZnNldChj
b2x1bW4pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBvZmZzZXQgPSBjb2x1bW47
CisgICAgICAgICAgICBmb3IgKHZhciBpID0gY2h1bmsuc3RhcnRMaW5lOyBpIDwgbGluZTsgKytp
KQorICAgICAgICAgICAgICAgIG9mZnNldCArPSB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChp
KSArIDE7IC8vIFxuCisgICAgICAgICAgICBsaW5lUm93ID0gY2h1bmsuZWxlbWVudDsKKyAgICAg
ICAgICAgIGlmIChsaW5lUm93LmZpcnN0Q2hpbGQpCisgICAgICAgICAgICAgICAgdmFyIHJhbmdl
Qm91bmRhcnkgPSB7IGNvbnRhaW5lcjogbGluZVJvdy5maXJzdENoaWxkLCBvZmZzZXQ6IG9mZnNl
dCB9OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZhciByYW5nZUJvdW5kYXJ5
ID0geyBjb250YWluZXI6IGxpbmVSb3csIG9mZnNldDogMCB9OworICAgICAgICB9CisgICAgICAg
IHJldHVybiByYW5nZUJvdW5kYXJ5OworICAgIH0sCisKICAgICBfYXBwZW5kU3BhbjogZnVuY3Rp
b24oZWxlbWVudCwgY29udGVudCwgY2xhc3NOYW1lKQogICAgIHsKICAgICAgICAgaWYgKGNsYXNz
TmFtZSA9PT0gImh0bWwtcmVzb3VyY2UtbGluayIgfHwgY2xhc3NOYW1lID09PSAiaHRtbC1leHRl
cm5hbC1saW5rIikgewpAQCAtNTc4LDkgKzgzMiw5IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2Vy
LnByb3RvdHlwZSA9IHsKICAgICBfYXBwZW5kVGV4dE5vZGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHRl
eHQpCiAgICAgewogICAgICAgICB2YXIgdGV4dE5vZGUgPSB0aGlzLl9jYWNoZWRUZXh0Tm9kZXMu
cG9wKCk7Ci0gICAgICAgIGlmICh0ZXh0Tm9kZSkgeworICAgICAgICBpZiAodGV4dE5vZGUpCiAg
ICAgICAgICAgICB0ZXh0Tm9kZS5ub2RlVmFsdWUgPSB0ZXh0OwotICAgICAgICB9IGVsc2UKKyAg
ICAgICAgZWxzZQogICAgICAgICAgICAgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZSh0ZXh0KTsKICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7CiAgICAgICAg
IGlmICghKCJ0ZXh0Tm9kZXMiIGluIGVsZW1lbnQpKQpAQCAtNjE0LDU4ICs4NjgsNTEgQEAgV2Vi
SW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gV2ViSW5z
cGVjdG9yLmNvbXBsZXRlVVJMKHRoaXMuX3VybCwgaHJlZlZhbHVlKTsKICAgICB9LAogCi0gICAg
cmVzaXplOiBmdW5jdGlvbigpCisgICAgX2hhbmRsZURvbVVwZGF0ZXM6IGZ1bmN0aW9uKGUpCiAg
ICAgewotICAgICAgICB0aGlzLl9yZXBhaW50QWxsKCk7CisgICAgICAgIHZhciB0YXJnZXQgPSBl
LnRhcmdldDsKKyAgICAgICAgdmFyIGxpbmVSb3cgPSB0YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2Vs
ZldpdGhDbGFzcygid2Via2l0LWxpbmUtY29udGVudCIpOworICAgICAgICBpZiAobGluZVJvdyA9
PT0gdGFyZ2V0IHx8ICFsaW5lUm93IHx8ICFsaW5lUm93LmRlY29yYXRpb25zRWxlbWVudCB8fCAh
bGluZVJvdy5kZWNvcmF0aW9uc0VsZW1lbnQuaXNBbmNlc3Rvcih0YXJnZXQpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAvLyBXYWl0IHVudGlsIHRoaXMgZXZlbnQgaXMgcHJvY2Vzc2Vk
IGFuZCBvbmx5IHRoZW4gc3luYyB0aGUgc2l6ZXMuCisgICAgICAgIGlmICh0aGlzLl9zeW5jRGVj
b3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIpIHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3Rl
bmVyKGxpbmVSb3cubGluZU51bWJlcik7CisgICAgICAgICAgICB9LmJpbmQodGhpcyksIDApOwor
ICAgICAgICB9CiAgICAgfQogfQogCi12YXIgY2FjaGVkU3BhbnMgPSBbXTsKK1dlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGU7CiAKLVdlYkluc3BlY3Rvci5UZXh0Q2h1
bmsgPSBmdW5jdGlvbih0ZXh0Vmlld2VyLCBzdGFydExpbmUsIGVuZExpbmUpCitXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5DaHVuayA9IGZ1bmN0aW9uKHRleHRFZGl0b3IsIHN0YXJ0TGluZSwg
ZW5kTGluZSkKIHsKLSAgICB0aGlzLl90ZXh0Vmlld2VyID0gdGV4dFZpZXdlcjsKLSAgICB0aGlz
LmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotICAgIHRoaXMuX3RleHRN
b2RlbCA9IHRleHRWaWV3ZXIuX3RleHRNb2RlbDsKLSAgICB0aGlzLmVsZW1lbnQuY2h1bmsgPSB0
aGlzOworICAgIHRoaXMuX3RleHRFZGl0b3IgPSB0ZXh0RWRpdG9yOworICAgIHRoaXMuX3RleHRN
b2RlbCA9IHRleHRFZGl0b3IuX3RleHRNb2RlbDsKKworICAgIHRoaXMuZWxlbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgIHRoaXMuZWxlbWVudC5saW5lTnVtYmVyID0g
c3RhcnRMaW5lOworICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtY29u
dGVudCI7CiAKICAgICB0aGlzLnN0YXJ0TGluZSA9IHN0YXJ0TGluZTsKICAgICBlbmRMaW5lID0g
TWF0aC5taW4odGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQsIGVuZExpbmUpOwogICAgIHRoaXMu
bGluZXNDb3VudCA9IGVuZExpbmUgLSBzdGFydExpbmU7CiAKLSAgICB0aGlzLl9saW5lTnVtYmVy
RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgdGhpcy5fbGluZU51
bWJlckVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLW51bWJlciI7Ci0gICAgdGhpcy5l
bGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2xpbmVOdW1iZXJFbGVtZW50KTsKLQotICAgIHRoaXMu
X2xpbmVDb250ZW50RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAg
dGhpcy5fbGluZUNvbnRlbnRFbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1jb250ZW50
IjsKLSAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fbGluZUNvbnRlbnRFbGVtZW50
KTsKLQogICAgIHRoaXMuX2V4cGFuZGVkID0gZmFsc2U7CiAKLSAgICB2YXIgbGluZU51bWJlcnMg
PSBbXTsKICAgICB2YXIgbGluZXMgPSBbXTsKICAgICBmb3IgKHZhciBpID0gc3RhcnRMaW5lOyBp
IDwgZW5kTGluZTsgKytpKSB7Ci0gICAgICAgIGxpbmVOdW1iZXJzLnB1c2goaSArIDEpOwogICAg
ICAgICBsaW5lcy5wdXNoKHRoaXMuX3RleHRNb2RlbC5saW5lKGkpKTsKICAgICB9Ci0gICAgaWYg
KHRoaXMubGluZXNDb3VudCA9PT0gMSkgewotICAgICAgICAvLyBTaW5nbGUgbGluZSBjaHVua3Mg
YXJlIHR5cGljYWxseSBjcmVhdGVkIGZvciBkZWNvcmF0aW9ucy4gSG9zdCBsaW5lIG51bWJlciBp
bgotICAgICAgICAvLyB0aGUgc3ViLWVsZW1lbnQgaW4gb3JkZXIgdG8gYWxsb3cgZmxleGlibGUg
Ym9yZGVyIC8gbWFyZ2luIG1hbmFnZW1lbnQuCi0gICAgICAgIHZhciBpbm5lclNwYW4gPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgIGlubmVyU3Bhbi5jbGFzc05hbWUg
PSAid2Via2l0LWxpbmUtbnVtYmVyLWlubmVyIjsKLSAgICAgICAgaW5uZXJTcGFuLnRleHRDb250
ZW50ID0gc3RhcnRMaW5lICsgMTsKLSAgICAgICAgdmFyIG91dGVyU3BhbiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICBvdXRlclNwYW4uY2xhc3NOYW1lID0gIndlYmtp
dC1saW5lLW51bWJlci1vdXRlciI7Ci0gICAgICAgIG91dGVyU3Bhbi5hcHBlbmRDaGlsZChpbm5l
clNwYW4pOwotICAgICAgICB0aGlzLl9saW5lTnVtYmVyRWxlbWVudC5hcHBlbmRDaGlsZChvdXRl
clNwYW4pOwotICAgIH0gZWxzZQotICAgICAgICB0aGlzLl9saW5lTnVtYmVyRWxlbWVudC50ZXh0
Q29udGVudCA9IGxpbmVOdW1iZXJzLmpvaW4oIlxuIik7Ci0gICAgdGhpcy5fbGluZUNvbnRlbnRF
bGVtZW50LnRleHRDb250ZW50ID0gbGluZXMuam9pbigiXG4iKTsKKworICAgIHRoaXMuZWxlbWVu
dC50ZXh0Q29udGVudCA9IGxpbmVzLmpvaW4oIlxuIik7CisKKyAgICAvLyBUaGUgbGFzdCBlbXB0
eSBsaW5lIHdpbGwgZ2V0IHN3YWxsb3dlZCBvdGhlcndpc2UuCisgICAgaWYgKCFsaW5lc1tsaW5l
cy5sZW5ndGggLSAxXSkKKyAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImJyIikpOwogfQogCi1XZWJJbnNwZWN0b3IuVGV4dENodW5rLnByb3Rv
dHlwZSA9IHsKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZSA9IHsK
ICAgICBhZGREZWNvcmF0aW9uOiBmdW5jdGlvbihkZWNvcmF0aW9uKQogICAgIHsKICAgICAgICAg
aWYgKHR5cGVvZiBkZWNvcmF0aW9uID09PSAic3RyaW5nIikgewpAQCAtNjc0LDcgKzkyMSw4IEBA
IFdlYkluc3BlY3Rvci5UZXh0Q2h1bmsucHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgICAg
IGlmICghdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudCkgewogICAgICAgICAgICAgdGhp
cy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOwotICAgICAgICAgICAgdGhpcy5fbGluZUNvbnRlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRo
aXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQpOworICAgICAgICAgICAgdGhpcy5lbGVtZW50
LmRlY29yYXRpb25zRWxlbWVudC5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtZGVjb3JhdGlvbnMi
OworICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudC5kZWNv
cmF0aW9uc0VsZW1lbnQpOwogICAgICAgICB9CiAgICAgICAgIHRoaXMuZWxlbWVudC5kZWNvcmF0
aW9uc0VsZW1lbnQuYXBwZW5kQ2hpbGQoZGVjb3JhdGlvbik7CiAgICAgfSwKQEAgLTcwMyw3MSAr
OTUxLDY4IEBAIFdlYkluc3BlY3Rvci5UZXh0Q2h1bmsucHJvdG90eXBlID0gewogICAgICAgICB0
aGlzLl9leHBhbmRlZCA9IGV4cGFuZGVkOwogCiAgICAgICAgIGlmICh0aGlzLmxpbmVzQ291bnQg
PT09IDEpIHsKLSAgICAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5zZXRBdHRyaWJ1dGUodGhpcy5z
dGFydExpbmUsICJsaW5lLXJvdyIsIHRoaXMuZWxlbWVudCk7CiAgICAgICAgICAgICBpZiAoZXhw
YW5kZWQpCi0gICAgICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5fcGFpbnRMaW5lcyh0aGlz
LnN0YXJ0TGluZSwgdGhpcy5zdGFydExpbmUgKyAxKTsKKyAgICAgICAgICAgICAgICB0aGlzLl90
ZXh0RWRpdG9yLl9wYWludExpbmUodGhpcy5lbGVtZW50LCB0aGlzLnN0YXJ0TGluZSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZXhwYW5kZWQpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2V4cGFuZGVkTGluZVJvd3MgPSBbXTsKICAgICAgICAgICAgIHZhciBw
YXJlbnRFbGVtZW50ID0gdGhpcy5lbGVtZW50LnBhcmVudEVsZW1lbnQ7CiAgICAgICAgICAgICBm
b3IgKHZhciBpID0gdGhpcy5zdGFydExpbmU7IGkgPCB0aGlzLnN0YXJ0TGluZSArIHRoaXMubGlu
ZXNDb3VudDsgKytpKSB7CiAgICAgICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl9jcmVh
dGVSb3coaSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnNldEF0dHJpYnV0ZShp
LCAibGluZS1yb3ciLCBsaW5lUm93KTsKICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50Lmlu
c2VydEJlZm9yZShsaW5lUm93LCB0aGlzLmVsZW1lbnQpOworICAgICAgICAgICAgICAgIHRoaXMu
X2V4cGFuZGVkTGluZVJvd3MucHVzaChsaW5lUm93KTsKKyAgICAgICAgICAgICAgICB0aGlzLl90
ZXh0RWRpdG9yLl9wYWludExpbmUobGluZVJvdywgaSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBwYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudCk7Ci0KLSAgICAgICAg
ICAgIHRoaXMuX3RleHRWaWV3ZXIuX3BhaW50TGluZXModGhpcy5zdGFydExpbmUsIHRoaXMuc3Rh
cnRMaW5lICsgdGhpcy5saW5lc0NvdW50KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHZhciBmaXJzdExpbmUgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKHRoaXMuc3RhcnRM
aW5lLCAibGluZS1yb3ciKTsKLSAgICAgICAgICAgIHZhciBwYXJlbnRFbGVtZW50ID0gZmlyc3RM
aW5lLnBhcmVudEVsZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLl9yZWxlYXNl
TGluZXNIaWdobGlnaHQodGhpcy5zdGFydExpbmUsIHRoaXMuc3RhcnRMaW5lICsgdGhpcy5saW5l
c0NvdW50KTsKLQotICAgICAgICAgICAgcGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5l
bGVtZW50LCBmaXJzdExpbmUpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhcnRM
aW5lOyBpIDwgdGhpcy5zdGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQ7ICsraSkgewotICAgICAg
ICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShpLCAi
bGluZS1yb3ciKTsKLSAgICAgICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwucmVtb3ZlQXR0cmli
dXRlKGksICJsaW5lLXJvdyIpOwotICAgICAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuX2Nh
Y2hlZFJvd3MucHVzaChsaW5lUm93KTsKLSAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LnJl
bW92ZUNoaWxkKGxpbmVSb3cpOworICAgICAgICAgICAgdmFyIGVsZW1lbnRJbnNlcnRlZCA9IGZh
bHNlOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9leHBhbmRlZExpbmVS
b3dzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl9l
eHBhbmRlZExpbmVSb3dzW2ldOworICAgICAgICAgICAgICAgIHZhciBwYXJlbnRFbGVtZW50ID0g
bGluZVJvdy5wYXJlbnRFbGVtZW50OworICAgICAgICAgICAgICAgIGlmIChwYXJlbnRFbGVtZW50
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghZWxlbWVudEluc2VydGVkKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtZW50SW5zZXJ0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50LCBsaW5lUm93
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0
RWRpdG9yLl9yZWxlYXNlTGluZXNIaWdobGlnaHQobGluZVJvdyk7CisgICAgICAgICAgICAgICAg
ICAgIHBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobGluZVJvdyk7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2V4cGFuZGVkTGluZVJv
d3M7CiAgICAgICAgIH0KICAgICB9LAogCiAgICAgZ2V0IGhlaWdodCgpCiAgICAgewotICAgICAg
ICBpZiAoIXRoaXMuX2V4cGFuZGVkKQorICAgICAgICBpZiAoIXRoaXMuX2V4cGFuZGVkTGluZVJv
d3MpCiAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodDsKICAgICAg
ICAgdmFyIHJlc3VsdCA9IDA7Ci0gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YXJ0TGluZTsg
aSA8IHRoaXMuc3RhcnRMaW5lICsgdGhpcy5saW5lc0NvdW50OyArK2kpIHsKLSAgICAgICAgICAg
IHZhciBsaW5lUm93ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShpLCAibGluZS1yb3ci
KTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9leHBhbmRlZExpbmVSb3dzLmxl
bmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX2V4cGFuZGVkTGlu
ZVJvd3NbaV07CiAgICAgICAgICAgICByZXN1bHQgKz0gbGluZVJvdy5vZmZzZXRIZWlnaHQ7CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9LAogCi0gICAgX2NyZWF0ZVJv
dzogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICBnZXRFeHBhbmRlZExpbmVSb3c6IGZ1bmN0aW9u
KGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICB2YXIgY2FjaGVkUm93cyA9IHRoaXMuX3RleHRW
aWV3ZXIuX2NhY2hlZFJvd3M7Ci0gICAgICAgIGlmIChjYWNoZWRSb3dzLmxlbmd0aCkgewotICAg
ICAgICAgICAgdmFyIGxpbmVSb3cgPSBjYWNoZWRSb3dzW2NhY2hlZFJvd3MubGVuZ3RoIC0gMV07
Ci0gICAgICAgICAgICBjYWNoZWRSb3dzLmxlbmd0aC0tOwotICAgICAgICAgICAgdmFyIGxpbmVO
dW1iZXJFbGVtZW50ID0gbGluZVJvdy5maXJzdENoaWxkOwotICAgICAgICAgICAgdmFyIGxpbmVD
b250ZW50RWxlbWVudCA9IGxpbmVSb3cubGFzdENoaWxkOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgdmFyIGxpbmVSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotCi0g
ICAgICAgICAgICB2YXIgbGluZU51bWJlckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJ0ZCIpOwotICAgICAgICAgICAgbGluZU51bWJlckVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtp
dC1saW5lLW51bWJlciI7Ci0gICAgICAgICAgICBsaW5lUm93LmFwcGVuZENoaWxkKGxpbmVOdW1i
ZXJFbGVtZW50KTsKKyAgICAgICAgaWYgKCF0aGlzLl9leHBhbmRlZCB8fCBsaW5lTnVtYmVyIDwg
dGhpcy5zdGFydExpbmUgfHwgbGluZU51bWJlciA+PSB0aGlzLnN0YXJ0TGluZSArIHRoaXMubGlu
ZXNDb3VudCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBpZiAoIXRoaXMuX2V4
cGFuZGVkTGluZVJvd3MpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50OworICAgICAg
ICByZXR1cm4gdGhpcy5fZXhwYW5kZWRMaW5lUm93c1tsaW5lTnVtYmVyIC0gdGhpcy5zdGFydExp
bmVdOworICAgIH0sCiAKLSAgICAgICAgICAgIHZhciBsaW5lQ29udGVudEVsZW1lbnQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgICAgICAgICAgbGluZUNvbnRlbnRFbGVtZW50
LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1jb250ZW50IjsKLSAgICAgICAgICAgIGxpbmVSb3cu
YXBwZW5kQ2hpbGQobGluZUNvbnRlbnRFbGVtZW50KTsKLSAgICAgICAgfQorICAgIF9jcmVhdGVS
b3c6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICB2YXIgbGluZVJvdyA9IHRo
aXMuX3RleHRFZGl0b3IuX2NhY2hlZFJvd3MucG9wKCkgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZGl2Iik7CiAgICAgICAgIGxpbmVSb3cubGluZU51bWJlciA9IGxpbmVOdW1iZXI7Ci0gICAg
ICAgIGxpbmVOdW1iZXJFbGVtZW50LnRleHRDb250ZW50ID0gbGluZU51bWJlciArIDE7Ci0gICAg
ICAgIGxpbmVDb250ZW50RWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMuX3RleHRNb2RlbC5saW5l
KGxpbmVOdW1iZXIpOworICAgICAgICBsaW5lUm93LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1j
b250ZW50IjsKKyAgICAgICAgbGluZVJvdy50ZXh0Q29udGVudCA9IHRoaXMuX3RleHRNb2RlbC5s
aW5lKGxpbmVOdW1iZXIpOworICAgICAgICBpZiAoIWxpbmVSb3cudGV4dENvbnRlbnQpCisgICAg
ICAgICAgICBsaW5lUm93LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikp
OwogICAgICAgICByZXR1cm4gbGluZVJvdzsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRWaWV3ZXIuY3NzIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0Vmlld2VyLmNzcwppbmRleCBiZWU5ZmU1YzM5NTBh
ZDA0ODM5Zjc5YTA1YjgzYmIwNjllZTQ0NDMxLi5kM2UzYzI1YWUyM2Y3OWZlMDZkZWVhZGRmZDY2
ZWMxNWNkZDhkNzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL3RleHRWaWV3ZXIuY3NzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvdGV4dFZpZXdlci5jc3MKQEAgLTksMTAgKzksMzIgQEAKIH0KIAogLnRleHQtZWRpdG9yLWxp
bmVzIHsKLSAgICBib3JkZXI6IDA7Ci0gICAgLXdlYmtpdC1ib3JkZXItaG9yaXpvbnRhbC1zcGFj
aW5nOiAwOwotICAgIC13ZWJraXQtYm9yZGVyLXZlcnRpY2FsLXNwYWNpbmc6IDA7Ci0gICAgLXdl
YmtpdC11c2VyLXNlbGVjdDogdGV4dDsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9w
OiAwOworICAgIGxlZnQ6IDA7CisgICAgYm90dG9tOiAwOworICAgIG92ZXJmbG93OiBoaWRkZW47
CisgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKK30KKworLnRleHQtZWRpdG9yLWNvbnRl
bnRzIHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDA7CisgIGxlZnQ6IDA7CisgIHJp
Z2h0OiAwOworICBib3R0b206IDA7CisgIG92ZXJmbG93OiBhdXRvOworICAtd2Via2l0LXVzZXIt
c2VsZWN0OiB0ZXh0OworfQorCisudGV4dC1lZGl0b3ItZWRpdGFibGUgeworICAtd2Via2l0LXVz
ZXItbW9kaWZ5OiByZWFkLXdyaXRlLXBsYWludGV4dC1vbmx5OworfQorCisud2Via2l0LWxpbmUt
ZGVjb3JhdGlvbnMgeworICBwb2ludGVyLWV2ZW50czogbm9uZTsKKyAgLXdlYmtpdC11c2VyLXNl
bGVjdDogbm9uZTsKKyAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC1vbmx5OwogfQogCiAud2Vi
a2l0LWh0bWwtbWVzc2FnZS1idWJibGUgewpAQCAtNjMsNyArODUsNiBAQAogICAgIHRleHQtYWxp
Z246IHJpZ2h0OwogICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgd29yZC1icmVhazogbm9y
bWFsOwotICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgcGFkZGluZy1yaWdodDog
NHB4OwogICAgIHBhZGRpbmctbGVmdDogNnB4OwogfQpAQCAtODUsMTIgKzEwNiw2IEBACiAgICAg
bWFyZ2luLXJpZ2h0OiAtMTBweDsKIH0KIAotLndlYmtpdC1saW5lLWNvbnRlbnQgewotICAgIHdp
ZHRoOiAxMDAlOwotICAgIHBhZGRpbmctbGVmdDogMnB4OwotICAgIHZlcnRpY2FsLWFsaWduOiB0
b3A7Ci19Ci0KIC53ZWJraXQtYnJlYWtwb2ludCAud2Via2l0LWxpbmUtbnVtYmVyLW91dGVyIHsK
ICAgICBjb2xvcjogd2hpdGU7CiAgICAgYm9yZGVyLXdpZHRoOiAwIDE0cHggMHB4IDJweDsKQEAg
LTEzNiwyMSArMTUxLDIxIEBACiAgICAgb3BhY2l0eTogMC4zOwogfQogCi0ud2Via2l0LWV4ZWN1
dGlvbi1saW5lIC53ZWJraXQtbGluZS1jb250ZW50IHsKKy53ZWJraXQtZXhlY3V0aW9uLWxpbmUu
d2Via2l0LWxpbmUtY29udGVudCB7CiAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDE3MSwgMTkx
LCAyNTQpOwogICAgIG91dGxpbmU6IDFweCBzb2xpZCByZ2IoNjQsIDExNSwgMjQ0KTsKIH0KIAot
LmRpZmYtY29udGFpbmVyIC53ZWJraXQtYWRkZWQtbGluZSAud2Via2l0LWxpbmUtY29udGVudCB7
CisuZGlmZi1jb250YWluZXIgLndlYmtpdC1hZGRlZC1saW5lLndlYmtpdC1saW5lLWNvbnRlbnQg
ewogICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyMjAsIDI1NSwgMjIwKTsKIH0KIAotLmRpZmYt
Y29udGFpbmVyIC53ZWJraXQtcmVtb3ZlZC1saW5lIC53ZWJraXQtbGluZS1jb250ZW50IHsKKy5k
aWZmLWNvbnRhaW5lciAud2Via2l0LXJlbW92ZWQtbGluZS53ZWJraXQtbGluZS1jb250ZW50IHsK
ICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyMjAsIDIyMCk7CiAgICAgdGV4dC1kZWNv
cmF0aW9uOiBsaW5lLXRocm91Z2g7CiB9CiAKLS5kaWZmLWNvbnRhaW5lciAud2Via2l0LWNoYW5n
ZWQtbGluZSAud2Via2l0LWxpbmUtY29udGVudCB7CisuZGlmZi1jb250YWluZXIgLndlYmtpdC1j
aGFuZ2VkLWxpbmUud2Via2l0LWxpbmUtY29udGVudCB7CiAgICAgYmFja2dyb3VuZC1jb2xvcjog
cmdiKDIyMCwgMjIwLCAyNTUpOwogfQogCkBAIC0xNjQsNyArMTc5LDcgQEAKICAgICBjb2xvcjog
YmxhY2s7CiB9CiAKLS53ZWJraXQtaGlnaGxpZ2h0ZWQtbGluZSAud2Via2l0LWxpbmUtY29udGVu
dCB7Cisud2Via2l0LWhpZ2hsaWdodGVkLWxpbmUud2Via2l0LWxpbmUtY29udGVudCB7CiAgICAg
LXdlYmtpdC1hbmltYXRpb246ICJmYWRlb3V0IiAycyAwczsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80754</attachid>
            <date>2011-02-01 06:20:01 -0800</date>
            <delta_ts>2011-02-02 03:12:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53299-20110201171958.patch</filename>
            <type>text/plain</type>
            <size>55704</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwZjY5MDBhZGVhMmFlMzRhZDFiZmQyZWZmN2ZhY2NkMDI1MTNlMTI5Li4y
ZWE2ZmIzNzc0NDlmOWYzMDIyOTA3MWQyMGVmNWZhOTI4YzQ0YWQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsOTggQEAKKzIwMTEtMDItMDEgIEFuZHJleSBBZGFpa2luICA8YWFuZHJleUBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdl
YiBJbnNwZWN0b3I6IFVzZSBESVZzIGluc3RlYWQgb2YgVEFCTEUgaW4gVGV4dFZpZXdlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMyOTkKKworICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9jcmVhdGVUZXh0Vmlld2VyKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX21vdXNlRG93bik6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRWaWV3ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJv
dG90eXBlLnNldCBtaW1lVHlwZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5w
cm90b3R5cGUucmV2ZWFsTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5w
cm90b3R5cGUuYWRkRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdl
ci5wcm90b3R5cGUucmVtb3ZlRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4
dFZpZXdlci5wcm90b3R5cGUubWFya0FuZFJldmVhbFJhbmdlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5oaWdobGlnaHRMaW5lKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5jbGVhckxpbmVIaWdobGlnaHQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLmZyZWVDYWNoZWRFbGVtZW50cyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuX2hhbmRsZUtleURv
d24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLmVkaXRMaW5l
LmZpbmlzaEVkaXRpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlLmVkaXRMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlw
ZS5iZWdpblVwZGF0ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlLmVuZFVwZGF0ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlLnJlc2l6ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUu
X3RleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlw
ZS5fdXBkYXRlUGFuZWxPZmZzZXRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2Vy
LnByb3RvdHlwZS5fc3luY1Njcm9sbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdl
ci5wcm90b3R5cGUuX3N5bmNEZWNvcmF0aW9uc0ZvckxpbmUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLnNldCBzeW5jU2Nyb2xsTGlzdGVuZXIpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLmdldCB0
ZXh0TW9kZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwu
cHJvdG90eXBlLmFkZERlY29yYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLnJlbW92ZURlY29yYXRpb24pOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLnJldmVhbExpbmUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLm1h
a2VMaW5lQUNodW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBh
bmVsLnByb3RvdHlwZS50ZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuYmVnaW5VcGRhdGVzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5lbmRVcGRhdGVzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5yZXNp
emUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90
eXBlLl9zY3JvbGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFu
ZWwucHJvdG90eXBlLl9zY2hlZHVsZVJlcGFpbnRBbGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLl9idWlsZENodW5rcyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX3JlcGFpbnRB
bGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90
eXBlLl9jaHVua051bWJlckZvckxpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLl9jaHVua0ZvckxpbmUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvckd1dHRlclBhbmVsLnByb3RvdHlwZS5mcmVlQ2FjaGVkRWxlbWVudHMpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbC5wcm90b3R5cGUuX2NyZWF0ZU5l
d0NodW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFuZWwucHJv
dG90eXBlLl9leHBhbmRDaHVua3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JH
dXR0ZXJDaHVuayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5r
LnByb3RvdHlwZS5nZXQgZXhwYW5kZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JHdXR0ZXJDaHVuay5wcm90b3R5cGUuc2V0IGV4cGFuZGVkKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsucHJvdG90eXBlLmdldCBoZWlnaHQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuay5wcm90b3R5cGUuX2NyZWF0ZVJv
dyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuc2V0IHN5bmNEZWNv
cmF0aW9uc0ZvckxpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFu
ZWwucHJvdG90eXBlLnNldCBtaW1lVHlwZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvck1haW5QYW5lbC5wcm90b3R5cGUubWFya0FuZFJldmVhbFJhbmdlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5oaWdobGlnaHRMaW5lKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5jbGVh
ckxpbmVIaWdobGlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFu
ZWwucHJvdG90eXBlLmZyZWVDYWNoZWRFbGVtZW50cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2J1aWxkQ2h1bmtzKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fY3JlYXRlTmV3Q2h1bmsp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9l
eHBhbmRDaHVua3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwu
cHJvdG90eXBlLl9oaWdobGlnaHREYXRhUmVhZHkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9wYWludExpbmVzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcGFpbnRMaW5lKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcmVsZWFzZUxp
bmVzSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVs
LnByb3RvdHlwZS5fZ2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcmVzdG9yZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3NlbGVjdGlvblRvUG9zaXRp
b24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBl
Ll9wb3NpdGlvblRvU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
TWFpblBhbmVsLnByb3RvdHlwZS5fYXBwZW5kVGV4dE5vZGUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9oYW5kbGVEb21VcGRhdGVzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5hZGREZWNvcmF0aW9uKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5zZXQgZXhw
YW5kZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90
eXBlLmdldCBoZWlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1
bmsucHJvdG90eXBlLmdldEV4cGFuZGVkTGluZVJvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUuX2NyZWF0ZVJvdyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvdGV4dFZpZXdlci5jc3M6
CisgICAgICAgICgudGV4dC1lZGl0b3ItbGluZXMpOgorICAgICAgICAoLnRleHQtZWRpdG9yLWNv
bnRlbnRzKToKKyAgICAgICAgKC50ZXh0LWVkaXRvci1lZGl0YWJsZSk6CisgICAgICAgICgud2Vi
a2l0LWxpbmUtZGVjb3JhdGlvbnMpOgorICAgICAgICAoLndlYmtpdC1saW5lLW51bWJlcik6Cisg
ICAgICAgICgud2Via2l0LWV4ZWN1dGlvbi1saW5lLndlYmtpdC1saW5lLWNvbnRlbnQpOgorICAg
ICAgICAoLmRpZmYtY29udGFpbmVyIC53ZWJraXQtYWRkZWQtbGluZS53ZWJraXQtbGluZS1jb250
ZW50KToKKyAgICAgICAgKC5kaWZmLWNvbnRhaW5lciAud2Via2l0LXJlbW92ZWQtbGluZS53ZWJr
aXQtbGluZS1jb250ZW50KToKKyAgICAgICAgKC5kaWZmLWNvbnRhaW5lciAud2Via2l0LWNoYW5n
ZWQtbGluZS53ZWJraXQtbGluZS1jb250ZW50KToKKyAgICAgICAgKC53ZWJraXQtaGlnaGxpZ2h0
ZWQtbGluZS53ZWJraXQtbGluZS1jb250ZW50KToKKwogMjAxMS0wMS0yNSAgTmlrb2xhcyBaaW1t
ZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaXJr
IFNjaHVsemUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZUZyYW1lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3Vy
Y2VGcmFtZS5qcwppbmRleCBjZTM1MzFmYWFmMjgwZjQ3YjJlNTkzMDc3ODg1YTI1NzQ1MTQ0Zjlk
Li5kYmY5NDdmYWFiZmQzNzgwNjRjNTJjMzc1OWZiM2IwMGI4NmFkNmQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKQEAgLTIwOCw5
ICsyMDgsNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAg
ICB0aGlzLl90ZXh0Vmlld2VyLmVuZFVwZGF0ZXMoKTsKIAogICAgICAgICBXZWJJbnNwZWN0b3Iu
ZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVs
LkV2ZW50cy5CcmVha3BvaW50QWRkZWQsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7Ci0K
LSAgICAgICAgaWYgKHRoaXMuX2NhbkVkaXRTY3JpcHRzKQotICAgICAgICAgICAgdGhpcy5fdGV4
dFZpZXdlci5lZGl0Q2FsbGJhY2sgPSB0aGlzLl9lZGl0TGluZS5iaW5kKHRoaXMpOwogICAgIH0s
CiAKICAgICBfc2V0VGV4dFZpZXdlckRlY29yYXRpb25zOiBmdW5jdGlvbigpCkBAIC01MjYsNyAr
NTIzLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAg
dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3
ZWJraXQtbGluZS1udW1iZXIiKTsKICAgICAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRhcmdldC5wYXJlbnRF
bGVtZW50LmxpbmVOdW1iZXI7CisgICAgICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRh
cmdldC5saW5lTnVtYmVyOwogICAgICAgICB2YXIgb3JpZ2luYWxMaW5lTnVtYmVyID0gdGhpcy5f
Zm9ybWF0dGVyLmZvcm1hdHRlZExpbmVOdW1iZXJUb09yaWdpbmFsTGluZU51bWJlcih0ZXh0Vmll
d2VyTGluZU51bWJlcik7CiAKICAgICAgICAgdmFyIGNvbnRleHRNZW51ID0gbmV3IFdlYkluc3Bl
Y3Rvci5Db250ZXh0TWVudSgpOwpAQCAtNTkyLDcgKzU4OSw3IEBAIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQu
ZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWxpbmUtbnVtYmVyIik7CiAgICAg
ICAgIGlmICghdGFyZ2V0KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgb3JpZ2lu
YWxMaW5lTnVtYmVyID0gdGhpcy5fZm9ybWF0dGVyLmZvcm1hdHRlZExpbmVOdW1iZXJUb09yaWdp
bmFsTGluZU51bWJlcih0YXJnZXQucGFyZW50RWxlbWVudC5saW5lTnVtYmVyKTsKKyAgICAgICAg
dmFyIG9yaWdpbmFsTGluZU51bWJlciA9IHRoaXMuX2Zvcm1hdHRlci5mb3JtYXR0ZWRMaW5lTnVt
YmVyVG9PcmlnaW5hbExpbmVOdW1iZXIodGFyZ2V0LmxpbmVOdW1iZXIpOwogCiAgICAgICAgIHZh
ciBicmVha3BvaW50ID0gdGhpcy5fZmluZEJyZWFrcG9pbnQob3JpZ2luYWxMaW5lTnVtYmVyKTsK
ICAgICAgICAgaWYgKGJyZWFrcG9pbnQpIHsKQEAgLTg1NSwxMSArODUyLDEwIEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICghUHJlZmVyZW5jZXMu
Y2FuRWRpdFNjcmlwdFNvdXJjZSB8fCAhdGhpcy5faXNTY3JpcHQpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JT
ZWxmV2l0aE5vZGVOYW1lKCJURCIpOwotICAgICAgICBpZiAoIXRhcmdldCB8fCB0YXJnZXQucGFy
ZW50RWxlbWVudC5maXJzdENoaWxkID09PSB0YXJnZXQpCisgICAgICAgIHZhciBsaW5lUm93ID0g
ZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoIndlYmtpdC1saW5lLWNv
bnRlbnQiKTsKKyAgICAgICAgaWYgKCFsaW5lUm93KQogICAgICAgICAgICAgcmV0dXJuOyAgLy8g
RG8gbm90IHRyaWdnZXIgZWRpdGluZyBmcm9tIGxpbmUgbnVtYmVycy4KIAotICAgICAgICB2YXIg
bGluZVJvdyA9IHRhcmdldC5wYXJlbnRFbGVtZW50OwogICAgICAgICB2YXIgbGluZU51bWJlciA9
IGxpbmVSb3cubGluZU51bWJlcjsKICAgICAgICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNl
SURGb3JMaW5lKGxpbmVOdW1iZXIpOwogICAgICAgICBpZiAoIXNvdXJjZUlEKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzCmluZGV4IGVhMzY1
MTMyNTlkNTcxZTlhM2M0YTk3NzMzNjI1NDlkODFhNGMzNDcuLmQ3NTM1ZDhiMzIyNTI3NDBhNzE3
NWE2MmIyMTk0MDc3MGRjZWE4ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1RleHRWaWV3ZXIuanMKQEAgLTMyLDM3ICszMiwyNyBAQAogV2ViSW5zcGVjdG9y
LlRleHRWaWV3ZXIgPSBmdW5jdGlvbih0ZXh0TW9kZWwsIHBsYXRmb3JtLCB1cmwpCiB7CiAgICAg
dGhpcy5fdGV4dE1vZGVsID0gdGV4dE1vZGVsOwotICAgIHRoaXMuX3RleHRNb2RlbC5jaGFuZ2VM
aXN0ZW5lciA9IHRoaXMuX2J1aWxkQ2h1bmtzLmJpbmQodGhpcyk7Ci0gICAgdGhpcy5faGlnaGxp
Z2h0ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JIaWdobGlnaHRlcih0aGlzLl90ZXh0
TW9kZWwsIHRoaXMuX2hpZ2hsaWdodERhdGFSZWFkeS5iaW5kKHRoaXMpKTsKKyAgICB0aGlzLl90
ZXh0TW9kZWwuY2hhbmdlTGlzdGVuZXIgPSB0aGlzLl90ZXh0Q2hhbmdlZC5iaW5kKHRoaXMpOwog
CiAgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAg
dGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJ0ZXh0LWVkaXRvciBtb25vc3BhY2UiOwogICAgIHRo
aXMuZWxlbWVudC50YWJJbmRleCA9IDA7CiAKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigic2Nyb2xsIiwgdGhpcy5fc2Nyb2xsLmJpbmQodGhpcyksIGZhbHNlKTsKICAgICB0aGlz
LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuX2hhbmRsZUtleURvd24u
YmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJi
ZWZvcmVjb3B5IiwgdGhpcy5fYmVmb3JlQ29weS5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhp
cy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvcHkiLCB0aGlzLl9jb3B5LmJpbmQodGhpcyks
IGZhbHNlKTsKLQotICAgIHRoaXMuX3VybCA9IHVybDsKIAotICAgIHRoaXMuX2xpbmVzQ29udGFp
bmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7Ci0gICAgdGhpcy5f
bGluZXNDb250YWluZXJFbGVtZW50LmNsYXNzTmFtZSA9ICJ0ZXh0LWVkaXRvci1saW5lcyI7Ci0g
ICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgiY2VsbHNwYWNpbmci
LCAwKTsKLSAgICB0aGlzLl9saW5lc0NvbnRhaW5lckVsZW1lbnQuc2V0QXR0cmlidXRlKCJjZWxs
cGFkZGluZyIsIDApOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9saW5lc0Nv
bnRhaW5lckVsZW1lbnQpOworICAgIHRoaXMuX21haW5QYW5lbCA9IG5ldyBXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5QYW5lbCh0aGlzLl90ZXh0TW9kZWwsIHVybCk7CisgICAgdGhpcy5fZ3V0
dGVyUGFuZWwgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbCh0aGlzLl90
ZXh0TW9kZWwpOworICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9tYWluUGFuZWwu
ZWxlbWVudCk7CisgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2d1dHRlclBhbmVs
LmVsZW1lbnQpOwogCi0gICAgdGhpcy5fZGVmYXVsdENodW5rU2l6ZSA9IDUwOwotICAgIHRoaXMu
X3BhaW50Q29hbGVzY2luZ0xldmVsID0gMDsKLQotICAgIHRoaXMuZnJlZUNhY2hlZEVsZW1lbnRz
KCk7Ci0gICAgdGhpcy5fYnVpbGRDaHVua3MoKTsKKyAgICB0aGlzLl9tYWluUGFuZWwuc3luY1Nj
cm9sbExpc3RlbmVyID0gdGhpcy5fc3luY1Njcm9sbC5iaW5kKHRoaXMpOworICAgIHRoaXMuX21h
aW5QYW5lbC5zeW5jRGVjb3JhdGlvbnNGb3JMaW5lID0gdGhpcy5fc3luY0RlY29yYXRpb25zRm9y
TGluZS5iaW5kKHRoaXMpOwogfQogCiBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUg
PSB7CiAgICAgc2V0IG1pbWVUeXBlKG1pbWVUeXBlKQogICAgIHsKLSAgICAgICAgdGhpcy5faGln
aGxpZ2h0ZXIubWltZVR5cGUgPSBtaW1lVHlwZTsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLm1p
bWVUeXBlID0gbWltZVR5cGU7CiAgICAgfSwKIAogICAgIGdldCB0ZXh0TW9kZWwoKQpAQCAtNzIs
ODUgKzYyLDE3NiBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUgPSB7CiAKICAg
ICByZXZlYWxMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQogICAgIHsKLSAgICAgICAgaWYgKGxp
bmVOdW1iZXIgPj0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fbWFrZUxpbmVBQ2h1bmsobGluZU51bWJl
cik7Ci0gICAgICAgIGNodW5rLmVsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpOworICAg
ICAgICB0aGlzLl9tYWluUGFuZWwucmV2ZWFsTGluZShsaW5lTnVtYmVyKTsKICAgICB9LAogCiAg
ICAgYWRkRGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgZGVjb3JhdGlvbikKICAgICB7
Ci0gICAgICAgIHZhciBjaHVuayA9IHRoaXMuX21ha2VMaW5lQUNodW5rKGxpbmVOdW1iZXIpOwot
ICAgICAgICBjaHVuay5hZGREZWNvcmF0aW9uKGRlY29yYXRpb24pOworICAgICAgICB0aGlzLl9t
YWluUGFuZWwuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0aW9uKTsKKyAgICAgICAg
dGhpcy5fZ3V0dGVyUGFuZWwuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0aW9uKTsK
ICAgICB9LAogCiAgICAgcmVtb3ZlRGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgZGVj
b3JhdGlvbikKICAgICB7Ci0gICAgICAgIHZhciBjaHVuayA9IHRoaXMuX21ha2VMaW5lQUNodW5r
KGxpbmVOdW1iZXIpOwotICAgICAgICBjaHVuay5yZW1vdmVEZWNvcmF0aW9uKGRlY29yYXRpb24p
OworICAgICAgICB0aGlzLl9tYWluUGFuZWwucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCBk
ZWNvcmF0aW9uKTsKKyAgICAgICAgdGhpcy5fZ3V0dGVyUGFuZWwucmVtb3ZlRGVjb3JhdGlvbihs
aW5lTnVtYmVyLCBkZWNvcmF0aW9uKTsKICAgICB9LAogCiAgICAgbWFya0FuZFJldmVhbFJhbmdl
OiBmdW5jdGlvbihyYW5nZSkKICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9yYW5nZVRvTWFyaykg
ewotICAgICAgICAgICAgdmFyIG1hcmtlZExpbmUgPSB0aGlzLl9yYW5nZVRvTWFyay5zdGFydExp
bmU7Ci0gICAgICAgICAgICB0aGlzLl9yYW5nZVRvTWFyayA9IG51bGw7Ci0gICAgICAgICAgICB0
aGlzLl9wYWludExpbmVzKG1hcmtlZExpbmUsIG1hcmtlZExpbmUgKyAxKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChyYW5nZSkgewotICAgICAgICAgICAgdGhpcy5fcmFuZ2VUb01hcmsgPSBy
YW5nZTsKLSAgICAgICAgICAgIHRoaXMucmV2ZWFsTGluZShyYW5nZS5zdGFydExpbmUpOwotICAg
ICAgICAgICAgdGhpcy5fcGFpbnRMaW5lcyhyYW5nZS5zdGFydExpbmUsIHJhbmdlLnN0YXJ0TGlu
ZSArIDEpOwotICAgICAgICAgICAgaWYgKHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudCkKLSAgICAg
ICAgICAgICAgICB0aGlzLl9tYXJrZWRSYW5nZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRl
ZCgpOwotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9tYXJrZWRSYW5nZUVsZW1lbnQ7
CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5tYXJrQW5kUmV2ZWFsUmFuZ2UocmFuZ2UpOwogICAg
IH0sCiAKICAgICBoaWdobGlnaHRMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQogICAgIHsKLSAg
ICAgICAgdGhpcy5jbGVhckxpbmVIaWdobGlnaHQoKTsKLSAgICAgICAgdGhpcy5faGlnaGxpZ2h0
ZWRMaW5lID0gbGluZU51bWJlcjsKLSAgICAgICAgdGhpcy5yZXZlYWxMaW5lKGxpbmVOdW1iZXIp
OwotICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9tYWtlTGluZUFDaHVuayhsaW5lTnVtYmVyKTsK
LSAgICAgICAgY2h1bmsuYWRkRGVjb3JhdGlvbigid2Via2l0LWhpZ2hsaWdodGVkLWxpbmUiKTsK
KyAgICAgICAgdGhpcy5fbWFpblBhbmVsLmhpZ2hsaWdodExpbmUobGluZU51bWJlcik7CiAgICAg
fSwKIAogICAgIGNsZWFyTGluZUhpZ2hsaWdodDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAg
aWYgKHR5cGVvZiB0aGlzLl9oaWdobGlnaHRlZExpbmUgPT09ICJudW1iZXIiKSB7Ci0gICAgICAg
ICAgICB2YXIgY2h1bmsgPSB0aGlzLl9tYWtlTGluZUFDaHVuayh0aGlzLl9oaWdobGlnaHRlZExp
bmUpOwotICAgICAgICAgICAgY2h1bmsucmVtb3ZlRGVjb3JhdGlvbigid2Via2l0LWhpZ2hsaWdo
dGVkLWxpbmUiKTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9oaWdobGlnaHRlZExpbmU7Ci0g
ICAgICAgIH0KKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLmNsZWFyTGluZUhpZ2hsaWdodCgpOwog
ICAgIH0sCiAKICAgICBmcmVlQ2FjaGVkRWxlbWVudHM6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAg
ICAgIHRoaXMuX2NhY2hlZFNwYW5zID0gW107Ci0gICAgICAgIHRoaXMuX2NhY2hlZFRleHROb2Rl
cyA9IFtdOwotICAgICAgICB0aGlzLl9jYWNoZWRSb3dzID0gW107CisgICAgICAgIHRoaXMuX21h
aW5QYW5lbC5mcmVlQ2FjaGVkRWxlbWVudHMoKTsKKyAgICAgICAgdGhpcy5fZ3V0dGVyUGFuZWwu
ZnJlZUNhY2hlZEVsZW1lbnRzKCk7CisgICAgfSwKKworICAgIF9oYW5kbGVLZXlEb3duOiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9tYWluUGFuZWwuX2hhbmRsZUtleURvd24oKTsK
KyAgICB9LAorCisgICAgZWRpdExpbmU6IGZ1bmN0aW9uKGxpbmVSb3csIGNhbGxiYWNrKQorICAg
IHsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLmVkaXRMaW5lKGxpbmVSb3csIGNhbGxiYWNrKTsK
KyAgICB9LAorCisgICAgYmVnaW5VcGRhdGVzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0
aGlzLl9tYWluUGFuZWwuYmVnaW5VcGRhdGVzKCk7CisgICAgICAgIHRoaXMuX2d1dHRlclBhbmVs
LmJlZ2luVXBkYXRlcygpOworICAgIH0sCisKKyAgICBlbmRVcGRhdGVzOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICB0aGlzLl9tYWluUGFuZWwuZW5kVXBkYXRlcygpOworICAgICAgICB0aGlz
Ll9ndXR0ZXJQYW5lbC5lbmRVcGRhdGVzKCk7CisgICAgfSwKKworICAgIHJlc2l6ZTogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLnJlc2l6ZSgpOworICAgICAgICB0
aGlzLl9ndXR0ZXJQYW5lbC5yZXNpemUoKTsKKyAgICAgICAgdGhpcy5fdXBkYXRlUGFuZWxPZmZz
ZXRzKCk7CisgICAgfSwKKworICAgIC8vIFdlYkluc3BlY3Rvci5UZXh0TW9kZWwgbGlzdGVuZXIK
KyAgICBfdGV4dENoYW5nZWQ6IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSwgb2xkVGV4dCwg
bmV3VGV4dCkKKyAgICB7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC50ZXh0Q2hhbmdlZCgpOwor
ICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC50ZXh0Q2hhbmdlZCgpOworICAgICAgICB0aGlzLl91
cGRhdGVQYW5lbE9mZnNldHMoKTsKKyAgICB9LAorCisgICAgX3VwZGF0ZVBhbmVsT2Zmc2V0czog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGxpbmVOdW1iZXJzV2lkdGggPSB0aGlzLl9n
dXR0ZXJQYW5lbC5lbGVtZW50Lm9mZnNldFdpZHRoOworICAgICAgICBpZiAobGluZU51bWJlcnNX
aWR0aCkKKyAgICAgICAgICAgIHRoaXMuX21haW5QYW5lbC5lbGVtZW50LnN0eWxlLmxlZnQgPSAo
bGluZU51bWJlcnNXaWR0aCArIDIpICsgInB4IjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
dGhpcy5fbWFpblBhbmVsLmVsZW1lbnQuc3R5bGUubGVmdCA9ICIiOyAvLyBVc2UgZGVmYXVsdCB2
YWx1ZSBzZXQgaW4gQ1NTLgorICAgIH0sCisKKyAgICBfc3luY1Njcm9sbDogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgLy8gQXN5bmMgY2FsbCBkdWUgdG8gcGVyZm9ybWFuY2UgcmVhc29ucy4K
KyAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBtYWluRWxl
bWVudCA9IHRoaXMuX21haW5QYW5lbC5lbGVtZW50OworICAgICAgICAgICAgdmFyIGd1dHRlckVs
ZW1lbnQgPSB0aGlzLl9ndXR0ZXJQYW5lbC5lbGVtZW50OworCisgICAgICAgICAgICAvLyBIYW5k
bGUgaG9yaXpvbnRhbCBzY3JvbGwgYmFyIGF0IHRoZSBib3R0b20gb2YgdGhlIG1haW4gcGFuZWwu
CisgICAgICAgICAgICBpZiAoZ3V0dGVyRWxlbWVudC5vZmZzZXRIZWlnaHQgPiBtYWluRWxlbWVu
dC5jbGllbnRIZWlnaHQpCisgICAgICAgICAgICAgICAgZ3V0dGVyRWxlbWVudC5zdHlsZS5wYWRk
aW5nQm90dG9tID0gKGd1dHRlckVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gbWFpbkVsZW1lbnQuY2xp
ZW50SGVpZ2h0KSArICJweCI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ3V0
dGVyRWxlbWVudC5zdHlsZS5wYWRkaW5nQm90dG9tID0gIiI7CisKKyAgICAgICAgICAgIGd1dHRl
ckVsZW1lbnQuc2Nyb2xsVG9wID0gbWFpbkVsZW1lbnQuc2Nyb2xsVG9wOworICAgICAgICB9LmJp
bmQodGhpcyksIDApOworICAgIH0sCisKKyAgICBfc3luY0RlY29yYXRpb25zRm9yTGluZTogZnVu
Y3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIGlmIChsaW5lTnVtYmVyID49IHRoaXMu
X3RleHRNb2RlbC5saW5lc0NvdW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZh
ciBtYWluQ2h1bmsgPSB0aGlzLl9tYWluUGFuZWwubWFrZUxpbmVBQ2h1bmsobGluZU51bWJlcik7
CisgICAgICAgIHZhciBndXR0ZXJDaHVuayA9IHRoaXMuX2d1dHRlclBhbmVsLm1ha2VMaW5lQUNo
dW5rKGxpbmVOdW1iZXIpOworICAgICAgICBndXR0ZXJDaHVuay5lbGVtZW50LnN0eWxlLmhlaWdo
dCA9IG1haW5DaHVuay5lbGVtZW50Lm9mZnNldEhlaWdodCArICJweCI7CisgICAgfQorfQorCitX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbCA9IGZ1bmN0aW9uKHRleHRNb2RlbCkK
K3sKKyAgICB0aGlzLl90ZXh0TW9kZWwgPSB0ZXh0TW9kZWw7CisKKyAgICB0aGlzLl9kZWZhdWx0
Q2h1bmtTaXplID0gNTA7CisgICAgdGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwgPSAwOworfQor
CitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUgPSB7CisgICAg
c2V0IHN5bmNTY3JvbGxMaXN0ZW5lcihsaXN0ZW5lcikKKyAgICB7CisgICAgICAgIHRoaXMuX3N5
bmNTY3JvbGxMaXN0ZW5lciA9IGxpc3RlbmVyOworICAgIH0sCisKKyAgICBnZXQgdGV4dE1vZGVs
KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl90ZXh0TW9kZWw7CisgICAgfSwKKworICAg
IHJldmVhbExpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICBpZiAobGlu
ZU51bWJlciA+PSB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLm1ha2VMaW5lQUNodW5rKGxpbmVOdW1iZXIp
OworICAgICAgICBjaHVuay5lbGVtZW50LnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKTsKKyAgICB9
LAorCisgICAgYWRkRGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgZGVjb3JhdGlvbikK
KyAgICB7CisgICAgICAgIHZhciBjaHVuayA9IHRoaXMubWFrZUxpbmVBQ2h1bmsobGluZU51bWJl
cik7CisgICAgICAgIGNodW5rLmFkZERlY29yYXRpb24oZGVjb3JhdGlvbik7CisgICAgfSwKKwor
ICAgIHJlbW92ZURlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRpb24pCisg
ICAgeworICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLm1ha2VMaW5lQUNodW5rKGxpbmVOdW1iZXIp
OworICAgICAgICBjaHVuay5yZW1vdmVEZWNvcmF0aW9uKGRlY29yYXRpb24pOworICAgIH0sCisK
KyAgICB0ZXh0Q2hhbmdlZDogZnVuY3Rpb24ob2xkUmFuZ2UsIG5ld1JhbmdlLCBvbGRUZXh0LCBu
ZXdUZXh0KQorICAgIHsKKyAgICAgICAgdGhpcy5fYnVpbGRDaHVua3MoKTsKICAgICB9LAogCiAg
ICAgX2J1aWxkQ2h1bmtzOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB0aGlzLl9saW5lc0Nv
bnRhaW5lckVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgdGhpcy5lbGVtZW50LnJl
bW92ZUNoaWxkcmVuKCk7CiAKICAgICAgICAgdGhpcy5fdGV4dENodW5rcyA9IFtdOwogICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50OyBpICs9IHRo
aXMuX2RlZmF1bHRDaHVua1NpemUpIHsKLSAgICAgICAgICAgIHZhciBjaHVuayA9IG5ldyBXZWJJ
bnNwZWN0b3IuVGV4dENodW5rKHRoaXMsIGksIGkgKyB0aGlzLl9kZWZhdWx0Q2h1bmtTaXplKTsK
KyAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX2NyZWF0ZU5ld0NodW5rKGksIGkgKyB0aGlz
Ll9kZWZhdWx0Q2h1bmtTaXplKTsKICAgICAgICAgICAgIHRoaXMuX3RleHRDaHVua3MucHVzaChj
aHVuayk7Ci0gICAgICAgICAgICB0aGlzLl9saW5lc0NvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hp
bGQoY2h1bmsuZWxlbWVudCk7CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQo
Y2h1bmsuZWxlbWVudCk7CiAgICAgICAgIH0KIAotICAgICAgICB0aGlzLl9pbmRleENodW5rcygp
OwotICAgICAgICB0aGlzLl9oaWdobGlnaHRlci5yZXNldCgpOwogICAgICAgICB0aGlzLl9yZXBh
aW50QWxsKCk7CiAgICAgfSwKIAotICAgIF9tYWtlTGluZUFDaHVuazogZnVuY3Rpb24obGluZU51
bWJlcikKKyAgICBtYWtlTGluZUFDaHVuazogZnVuY3Rpb24obGluZU51bWJlcikKICAgICB7CiAg
ICAgICAgIGlmICghdGhpcy5fdGV4dENodW5rcykKICAgICAgICAgICAgIHRoaXMuX2J1aWxkQ2h1
bmtzKCk7CkBAIC0xNjMsMzEgKzI0NCwzMCBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHZhciB3YXNFeHBhbmRlZCA9IG9sZENodW5rLmV4cGFuZGVkOwog
ICAgICAgICBvbGRDaHVuay5leHBhbmRlZCA9IGZhbHNlOwogCi0gICAgICAgIHZhciBpbnNlcnRJ
bmRleCA9IG9sZENodW5rLmNodW5rTnVtYmVyICsgMTsKKyAgICAgICAgdmFyIGluc2VydEluZGV4
ID0gY2h1bmtOdW1iZXIgKyAxOwogCiAgICAgICAgIC8vIFByZWZpeCBjaHVuay4KICAgICAgICAg
aWYgKGxpbmVOdW1iZXIgPiBvbGRDaHVuay5zdGFydExpbmUpIHsKLSAgICAgICAgICAgIHZhciBw
cmVmaXhDaHVuayA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dENodW5rKHRoaXMsIG9sZENodW5rLnN0
YXJ0TGluZSwgbGluZU51bWJlcik7CisgICAgICAgICAgICB2YXIgcHJlZml4Q2h1bmsgPSB0aGlz
Ll9jcmVhdGVOZXdDaHVuayhvbGRDaHVuay5zdGFydExpbmUsIGxpbmVOdW1iZXIpOwogICAgICAg
ICAgICAgdGhpcy5fdGV4dENodW5rcy5zcGxpY2UoaW5zZXJ0SW5kZXgrKywgMCwgcHJlZml4Q2h1
bmspOwotICAgICAgICAgICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50Lmluc2VydEJlZm9y
ZShwcmVmaXhDaHVuay5lbGVtZW50LCBvbGRDaHVuay5lbGVtZW50KTsKKyAgICAgICAgICAgIHRo
aXMuZWxlbWVudC5pbnNlcnRCZWZvcmUocHJlZml4Q2h1bmsuZWxlbWVudCwgb2xkQ2h1bmsuZWxl
bWVudCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBMaW5lIGNodW5rLgotICAgICAgICB2YXIg
bGluZUNodW5rID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0Q2h1bmsodGhpcywgbGluZU51bWJlciwg
bGluZU51bWJlciArIDEpOworICAgICAgICB2YXIgbGluZUNodW5rID0gdGhpcy5fY3JlYXRlTmV3
Q2h1bmsobGluZU51bWJlciwgbGluZU51bWJlciArIDEpOwogICAgICAgICB0aGlzLl90ZXh0Q2h1
bmtzLnNwbGljZShpbnNlcnRJbmRleCsrLCAwLCBsaW5lQ2h1bmspOwotICAgICAgICB0aGlzLl9s
aW5lc0NvbnRhaW5lckVsZW1lbnQuaW5zZXJ0QmVmb3JlKGxpbmVDaHVuay5lbGVtZW50LCBvbGRD
aHVuay5lbGVtZW50KTsKKyAgICAgICAgdGhpcy5lbGVtZW50Lmluc2VydEJlZm9yZShsaW5lQ2h1
bmsuZWxlbWVudCwgb2xkQ2h1bmsuZWxlbWVudCk7CiAKICAgICAgICAgLy8gU3VmZml4IGNodW5r
LgogICAgICAgICBpZiAob2xkQ2h1bmsuc3RhcnRMaW5lICsgb2xkQ2h1bmsubGluZXNDb3VudCA+
IGxpbmVOdW1iZXIgKyAxKSB7Ci0gICAgICAgICAgICB2YXIgc3VmZml4Q2h1bmsgPSBuZXcgV2Vi
SW5zcGVjdG9yLlRleHRDaHVuayh0aGlzLCBsaW5lTnVtYmVyICsgMSwgb2xkQ2h1bmsuc3RhcnRM
aW5lICsgb2xkQ2h1bmsubGluZXNDb3VudCk7CisgICAgICAgICAgICB2YXIgc3VmZml4Q2h1bmsg
PSB0aGlzLl9jcmVhdGVOZXdDaHVuayhsaW5lTnVtYmVyICsgMSwgb2xkQ2h1bmsuc3RhcnRMaW5l
ICsgb2xkQ2h1bmsubGluZXNDb3VudCk7CiAgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnNw
bGljZShpbnNlcnRJbmRleCwgMCwgc3VmZml4Q2h1bmspOwotICAgICAgICAgICAgdGhpcy5fbGlu
ZXNDb250YWluZXJFbGVtZW50Lmluc2VydEJlZm9yZShzdWZmaXhDaHVuay5lbGVtZW50LCBvbGRD
aHVuay5lbGVtZW50KTsKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5pbnNlcnRCZWZvcmUoc3Vm
Zml4Q2h1bmsuZWxlbWVudCwgb2xkQ2h1bmsuZWxlbWVudCk7CiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBSZW1vdmUgZW5jbG9zaW5nIGNodW5rLgotICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnNw
bGljZShvbGRDaHVuay5jaHVua051bWJlciwgMSk7Ci0gICAgICAgIHRoaXMuX2xpbmVzQ29udGFp
bmVyRWxlbWVudC5yZW1vdmVDaGlsZChvbGRDaHVuay5lbGVtZW50KTsKLSAgICAgICAgdGhpcy5f
aW5kZXhDaHVua3MoKTsKKyAgICAgICAgdGhpcy5fdGV4dENodW5rcy5zcGxpY2UoY2h1bmtOdW1i
ZXIsIDEpOworICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGQob2xkQ2h1bmsuZWxlbWVu
dCk7CiAKICAgICAgICAgaWYgKHdhc0V4cGFuZGVkKSB7CiAgICAgICAgICAgICBpZiAocHJlZml4
Q2h1bmspCkBAIC0yMDAsMTkgKzI4MCwxOCBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiBsaW5lQ2h1bms7CiAgICAgfSwKIAotICAgIF9pbmRl
eENodW5rczogZnVuY3Rpb24oKQorICAgIF9zY3JvbGw6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGg7ICsraSkKLSAg
ICAgICAgICAgIHRoaXMuX3RleHRDaHVua3NbaV0uY2h1bmtOdW1iZXIgPSBpOworICAgICAgICB0
aGlzLl9zY2hlZHVsZVJlcGFpbnRBbGwoKTsKKyAgICAgICAgaWYgKHRoaXMuX3N5bmNTY3JvbGxM
aXN0ZW5lcikKKyAgICAgICAgICAgIHRoaXMuX3N5bmNTY3JvbGxMaXN0ZW5lcigpOwogICAgIH0s
CiAKLSAgICBfc2Nyb2xsOiBmdW5jdGlvbigpCisgICAgX3NjaGVkdWxlUmVwYWludEFsbDogZnVu
Y3Rpb24oKQogICAgIHsKLSAgICAgICAgdmFyIHNjcm9sbFRvcCA9IHRoaXMuZWxlbWVudC5zY3Jv
bGxUb3A7Ci0gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBpZiAo
c2Nyb2xsVG9wID09PSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wKQotICAgICAgICAgICAgICAgIHRo
aXMuX3JlcGFpbnRBbGwoKTsKLSAgICAgICAgfS5iaW5kKHRoaXMpLCA1MCk7CisgICAgICAgIGlm
ICh0aGlzLl9yZXBhaW50QWxsVGltZXIpCisgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5f
cmVwYWludEFsbFRpbWVyKTsKKyAgICAgICAgdGhpcy5fcmVwYWludEFsbFRpbWVyID0gc2V0VGlt
ZW91dCh0aGlzLl9yZXBhaW50QWxsLmJpbmQodGhpcyksIDUwKTsKICAgICB9LAogCiAgICAgX2hh
bmRsZUtleURvd246IGZ1bmN0aW9uKCkKQEAgLTI0OCwxNiArMzI3LDE1IEBAIFdlYkluc3BlY3Rv
ci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKIAogICAgIGVkaXRMaW5lOiBmdW5jdGlvbihsaW5l
Um93LCBjYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHZhciBlbGVtZW50ID0gbGluZVJvdy5sYXN0
Q2hpbGQ7Ci0gICAgICAgIHZhciBvbGRDb250ZW50ID0gZWxlbWVudC5pbm5lckhUTUw7CisgICAg
ICAgIHZhciBvbGRDb250ZW50ID0gbGluZVJvdy5pbm5lckhUTUw7CiAgICAgICAgIGZ1bmN0aW9u
IGZpbmlzaEVkaXRpbmcoY29tbWl0dGVkLCBlLCBuZXdDb250ZW50KQogICAgICAgICB7CiAgICAg
ICAgICAgICBpZiAoY29tbWl0dGVkKQogICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ld0NvbnRl
bnQpOwotICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBvbGRDb250ZW50OworICAgICAg
ICAgICAgbGluZVJvdy5pbm5lckhUTUwgPSBvbGRDb250ZW50OwogICAgICAgICAgICAgZGVsZXRl
IHRoaXMuX2VkaXRpbmdMaW5lOwogICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2VkaXRpbmdMaW5l
ID0gV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyhlbGVtZW50LCB7CisgICAgICAgIHRoaXMuX2Vk
aXRpbmdMaW5lID0gV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyhsaW5lUm93LCB7CiAgICAgICAg
ICAgICBjb250ZXh0OiBudWxsLAogICAgICAgICAgICAgY29tbWl0SGFuZGxlcjogZmluaXNoRWRp
dGluZy5iaW5kKHRoaXMsIHRydWUpLAogICAgICAgICAgICAgY2FuY2VsSGFuZGxlcjogZmluaXNo
RWRpdGluZy5iaW5kKHRoaXMsIGZhbHNlKSwKQEAgLTI2NSw1MCArMzQzLDIzIEBAIFdlYkluc3Bl
Y3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfSk7CiAgICAgfSwKIAotICAg
IF9iZWZvcmVDb3B5OiBmdW5jdGlvbihlKQotICAgIHsKLSAgICAgICAgZS5wcmV2ZW50RGVmYXVs
dCgpOwotICAgIH0sCi0KLSAgICBfY29weTogZnVuY3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIHZh
ciByYW5nZSA9IHRoaXMuX2dldFNlbGVjdGlvbigpOwotICAgICAgICB2YXIgdGV4dCA9IHRoaXMu
X3RleHRNb2RlbC5jb3B5UmFuZ2UocmFuZ2UpOwotICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhv
c3QuY29weVRleHQodGV4dCk7Ci0gICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKLSAgICB9LAot
Ci0gICAgYmVnaW5VcGRhdGVzOiBmdW5jdGlvbihlbmFibGVkKQorICAgIGJlZ2luVXBkYXRlczog
ZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwrKzsK
ICAgICB9LAogCi0gICAgZW5kVXBkYXRlczogZnVuY3Rpb24oZW5hYmxlZCkKKyAgICBlbmRVcGRh
dGVzOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl9wYWludENvYWxlc2NpbmdMZXZl
bC0tOwogICAgICAgICBpZiAoIXRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsKQogICAgICAgICAg
ICAgdGhpcy5fcmVwYWludEFsbCgpOwogICAgIH0sCiAKLSAgICBfY2h1bmtGb3JPZmZzZXQ6IGZ1
bmN0aW9uKG9mZnNldCkKLSAgICB7Ci0gICAgICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gMDsKLSAg
ICAgICAgdmFyIHJvdyA9IHRoaXMuX2xpbmVzQ29udGFpbmVyRWxlbWVudC5maXJzdENoaWxkOwot
ICAgICAgICB3aGlsZSAocm93KSB7Ci0gICAgICAgICAgICB2YXIgcm93SGVpZ2h0ID0gcm93Lm9m
ZnNldEhlaWdodDsKLSAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gY3VycmVudE9mZnNldCAmJiBv
ZmZzZXQgPCBjdXJyZW50T2Zmc2V0ICsgcm93SGVpZ2h0KQotICAgICAgICAgICAgICAgIHJldHVy
biByb3cuY2h1bmtOdW1iZXI7Ci0gICAgICAgICAgICByb3cgPSByb3cubmV4dFNpYmxpbmc7Ci0g
ICAgICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IHJvd0hlaWdodDsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gdGhpcy5fdGV4dENodW5rcy5sZW5ndGggLSAxOwotICAgIH0sCi0KICAgICBfY2h1
bmtOdW1iZXJGb3JMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQogICAgIHsKICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytpKSB7CiAgICAgICAg
ICAgICB2YXIgbGluZSA9IHRoaXMuX3RleHRDaHVua3NbaV0uc3RhcnRMaW5lOwotICAgICAgICAg
ICAgaWYgKGxpbmVOdW1iZXIgPj0gdGhpcy5fdGV4dENodW5rc1tpXS5zdGFydExpbmUgJiYgbGlu
ZU51bWJlciA8IHRoaXMuX3RleHRDaHVua3NbaV0uc3RhcnRMaW5lICsgdGhpcy5fdGV4dENodW5r
c1tpXS5saW5lc0NvdW50KQorICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPj0gbGluZSAmJiBs
aW5lTnVtYmVyIDwgbGluZSArIHRoaXMuX3RleHRDaHVua3NbaV0ubGluZXNDb3VudCkKICAgICAg
ICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdGhpcy5fdGV4
dENodW5rcy5sZW5ndGggLSAxOwpAQCAtMzE5LDE2ICszNzAsMTAgQEAgV2ViSW5zcGVjdG9yLlRl
eHRWaWV3ZXIucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhpcy5fdGV4dENodW5rc1t0
aGlzLl9jaHVua051bWJlckZvckxpbmUobGluZU51bWJlcildOwogICAgIH0sCiAKLSAgICBfY2h1
bmtTdGFydExpbmU6IGZ1bmN0aW9uKGNodW5rTnVtYmVyKQotICAgIHsKLSAgICAgICAgdmFyIGxp
bmVOdW1iZXIgPSAwOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNodW5rTnVtYmVyICYm
IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgbGluZU51bWJl
ciArPSB0aGlzLl90ZXh0Q2h1bmtzW2ldLmxpbmVzQ291bnQ7Ci0gICAgICAgIHJldHVybiBsaW5l
TnVtYmVyOwotICAgIH0sCi0KICAgICBfcmVwYWludEFsbDogZnVuY3Rpb24oKQogICAgIHsKKyAg
ICAgICAgZGVsZXRlIHRoaXMuX3JlcGFpbnRBbGxUaW1lcjsKKwogICAgICAgICBpZiAodGhpcy5f
cGFpbnRDb2FsZXNjaW5nTGV2ZWwpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTMzOSwyOCAr
Mzg0LDI2NiBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHZhciB2aXNpYmxlVG8gPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wICsgdGhpcy5lbGVtZW50LmNs
aWVudEhlaWdodDsKIAogICAgICAgICB2YXIgb2Zmc2V0ID0gMDsKLSAgICAgICAgdmFyIGZpcnN0
VmlzaWJsZUxpbmUgPSAtMTsKLSAgICAgICAgdmFyIGxhc3RWaXNpYmxlTGluZSA9IDA7Ci0gICAg
ICAgIHZhciB0b0V4cGFuZCA9IFtdOwotICAgICAgICB2YXIgdG9Db2xsYXBzZSA9IFtdOworICAg
ICAgICB2YXIgZnJvbUluZGV4ID0gLTE7CisgICAgICAgIHZhciB0b0luZGV4ID0gMDsKICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytpKSB7CiAg
ICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2ldOwogICAgICAgICAgICAg
dmFyIGNodW5rSGVpZ2h0ID0gY2h1bmsuaGVpZ2h0OwogICAgICAgICAgICAgaWYgKG9mZnNldCAr
IGNodW5rSGVpZ2h0ID4gdmlzaWJsZUZyb20gJiYgb2Zmc2V0IDwgdmlzaWJsZVRvKSB7Ci0gICAg
ICAgICAgICAgICAgdG9FeHBhbmQucHVzaChjaHVuayk7Ci0gICAgICAgICAgICAgICAgaWYgKGZp
cnN0VmlzaWJsZUxpbmUgPT09IC0xKQotICAgICAgICAgICAgICAgICAgICBmaXJzdFZpc2libGVM
aW5lID0gY2h1bmsuc3RhcnRMaW5lOwotICAgICAgICAgICAgICAgIGxhc3RWaXNpYmxlTGluZSA9
IGNodW5rLnN0YXJ0TGluZSArIGNodW5rLmxpbmVzQ291bnQ7CisgICAgICAgICAgICAgICAgaWYg
KGZyb21JbmRleCA9PT0gLTEpCisgICAgICAgICAgICAgICAgICAgIGZyb21JbmRleCA9IGk7Cisg
ICAgICAgICAgICAgICAgdG9JbmRleCA9IGkgKyAxOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICB0b0NvbGxhcHNlLnB1c2goY2h1bmspOwogICAgICAgICAgICAgICAgIGlm
IChvZmZzZXQgPj0gdmlzaWJsZVRvKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIG9mZnNldCArPSBjaHVua0hlaWdodDsKICAgICAgICAgfQog
Ci0gICAgICAgIGZvciAodmFyIGogPSBpOyBqIDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGg7ICsr
aikKLSAgICAgICAgICAgIHRvQ29sbGFwc2UucHVzaCh0aGlzLl90ZXh0Q2h1bmtzW2ldKTsKKyAg
ICAgICAgaWYgKHRvSW5kZXgpCisgICAgICAgICAgICB0aGlzLl9leHBhbmRDaHVua3MoZnJvbUlu
ZGV4LCB0b0luZGV4KTsKKyAgICB9LAorICAgIAorICAgIHJlc2l6ZTogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgdGhpcy5fc2NoZWR1bGVSZXBhaW50QWxsKCk7CisgICAgfQorfQorCitXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlclBhbmVsID0gZnVuY3Rpb24odGV4dE1vZGVsKQorewor
ICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLmNhbGwodGhpcywgdGV4dE1v
ZGVsKTsKKworICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OworICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAidGV4dC1lZGl0b3ItbGluZXMiOworCisg
ICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMuX3Njcm9sbC5i
aW5kKHRoaXMpLCBmYWxzZSk7CisKKyAgICB0aGlzLmZyZWVDYWNoZWRFbGVtZW50cygpOworICAg
IHRoaXMuX2J1aWxkQ2h1bmtzKCk7Cit9CisKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVy
UGFuZWwucHJvdG90eXBlID0geworICAgIGZyZWVDYWNoZWRFbGVtZW50czogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgdGhpcy5fY2FjaGVkUm93cyA9IFtdOworICAgIH0sCisKKyAgICBfY3Jl
YXRlTmV3Q2h1bms6IGZ1bmN0aW9uKHN0YXJ0TGluZSwgZW5kTGluZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuayh0aGlzLCBzdGFy
dExpbmUsIGVuZExpbmUpOworICAgIH0sCisKKyAgICBfZXhwYW5kQ2h1bmtzOiBmdW5jdGlvbihm
cm9tSW5kZXgsIHRvSW5kZXgpCisgICAgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRo
aXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHRoaXMuX3RleHRDaHVu
a3NbaV0uZXhwYW5kZWQgPSAoZnJvbUluZGV4IDw9IGkgJiYgaSA8IHRvSW5kZXgpOworICAgICAg
ICB9CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlclBhbmVsLnByb3Rv
dHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90
b3R5cGU7CisKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsgPSBmdW5jdGlvbih0
ZXh0Vmlld2VyLCBzdGFydExpbmUsIGVuZExpbmUpCit7CisgICAgdGhpcy5fdGV4dFZpZXdlciA9
IHRleHRWaWV3ZXI7CisgICAgdGhpcy5fdGV4dE1vZGVsID0gdGV4dFZpZXdlci5fdGV4dE1vZGVs
OworCisgICAgdGhpcy5zdGFydExpbmUgPSBzdGFydExpbmU7CisgICAgZW5kTGluZSA9IE1hdGgu
bWluKHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50LCBlbmRMaW5lKTsKKyAgICB0aGlzLmxpbmVz
Q291bnQgPSBlbmRMaW5lIC0gc3RhcnRMaW5lOworCisgICAgdGhpcy5fZXhwYW5kZWQgPSBmYWxz
ZTsKKworICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwor
ICAgIHRoaXMuZWxlbWVudC5saW5lTnVtYmVyID0gc3RhcnRMaW5lOworICAgIHRoaXMuZWxlbWVu
dC5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtbnVtYmVyIjsKKworICAgIGlmICh0aGlzLmxpbmVz
Q291bnQgPT09IDEpIHsKKyAgICAgICAgLy8gU2luZ2xlIGxpbmUgY2h1bmtzIGFyZSB0eXBpY2Fs
bHkgY3JlYXRlZCBmb3IgZGVjb3JhdGlvbnMuIEhvc3QgbGluZSBudW1iZXIgaW4KKyAgICAgICAg
Ly8gdGhlIHN1Yi1lbGVtZW50IGluIG9yZGVyIHRvIGFsbG93IGZsZXhpYmxlIGJvcmRlciAvIG1h
cmdpbiBtYW5hZ2VtZW50LgorICAgICAgICB2YXIgaW5uZXJTcGFuID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgic3BhbiIpOworICAgICAgICBpbm5lclNwYW4uY2xhc3NOYW1lID0gIndlYmtpdC1s
aW5lLW51bWJlci1pbm5lciI7CisgICAgICAgIGlubmVyU3Bhbi50ZXh0Q29udGVudCA9IHN0YXJ0
TGluZSArIDE7CisgICAgICAgIHZhciBvdXRlclNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKKyAgICAgICAgb3V0ZXJTcGFuLmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1udW1i
ZXItb3V0ZXIiOworICAgICAgICBvdXRlclNwYW4uYXBwZW5kQ2hpbGQoaW5uZXJTcGFuKTsKKyAg
ICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKG91dGVyU3Bhbik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgdmFyIGxpbmVOdW1iZXJzID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSBzdGFy
dExpbmU7IGkgPCBlbmRMaW5lOyArK2kpIHsKKyAgICAgICAgICAgIGxpbmVOdW1iZXJzLnB1c2go
aSArIDEpOworICAgICAgICB9CisgICAgICAgIHRoaXMuZWxlbWVudC50ZXh0Q29udGVudCA9IGxp
bmVOdW1iZXJzLmpvaW4oIlxuIik7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ckd1dHRlckNodW5rLnByb3RvdHlwZSA9IHsKKyAgICBhZGREZWNvcmF0aW9uOiBmdW5jdGlvbihk
ZWNvcmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGVvZiBkZWNvcmF0aW9uID09PSAic3Ry
aW5nIikgeworICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoZGVjb3JhdGlv
bik7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgcmVtb3ZlRGVjb3JhdGlvbjogZnVuY3Rpb24o
ZGVjb3JhdGlvbikKKyAgICB7CisgICAgICAgIGlmICh0eXBlb2YgZGVjb3JhdGlvbiA9PT0gInN0
cmluZyIpIHsKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKGRlY29y
YXRpb24pOworICAgICAgICB9CisgICAgfSwKKworICAgIGdldCBleHBhbmRlZCgpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWQ7CisgICAgfSwKKworICAgIHNldCBleHBhbmRl
ZChleHBhbmRlZCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9leHBhbmRlZCA9PT0gZXhwYW5k
ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fZXhwYW5kZWQgPSBleHBh
bmRlZDsKKworICAgICAgICBpZiAodGhpcy5saW5lc0NvdW50ID09PSAxKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXhwYW5kZWQpIHsKKyAgICAgICAg
ICAgIHRoaXMuX2V4cGFuZGVkTGluZVJvd3MgPSBbXTsKKyAgICAgICAgICAgIHZhciBwYXJlbnRF
bGVtZW50ID0gdGhpcy5lbGVtZW50LnBhcmVudEVsZW1lbnQ7CisgICAgICAgICAgICBmb3IgKHZh
ciBpID0gdGhpcy5zdGFydExpbmU7IGkgPCB0aGlzLnN0YXJ0TGluZSArIHRoaXMubGluZXNDb3Vu
dDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl9jcmVhdGVSb3co
aSk7CisgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUobGluZVJvdywg
dGhpcy5lbGVtZW50KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9leHBhbmRlZExpbmVSb3dzLnB1
c2gobGluZVJvdyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJlbnRFbGVtZW50LnJl
bW92ZUNoaWxkKHRoaXMuZWxlbWVudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2
YXIgZWxlbWVudEluc2VydGVkID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHRoaXMuX2V4cGFuZGVkTGluZVJvd3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgbGluZVJvdyA9IHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbaV07CisgICAgICAgICAgICAg
ICAgdmFyIHBhcmVudEVsZW1lbnQgPSBsaW5lUm93LnBhcmVudEVsZW1lbnQ7CisgICAgICAgICAg
ICAgICAgaWYgKHBhcmVudEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlbGVt
ZW50SW5zZXJ0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRJbnNlcnRlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50Lmluc2VydEJlZm9y
ZSh0aGlzLmVsZW1lbnQsIGxpbmVSb3cpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuX2NhY2hlZFJvd3MucHVzaChsaW5lUm93KTsK
KyAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChsaW5lUm93KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWxldGUgdGhp
cy5fZXhwYW5kZWRMaW5lUm93czsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBnZXQgaGVpZ2h0
KCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fZXhwYW5kZWRMaW5lUm93cykKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0OworICAgICAgICB2YXIgcmVzdWx0
ID0gMDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9leHBhbmRlZExpbmVSb3dz
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX2V4cGFuZGVk
TGluZVJvd3NbaV07CisgICAgICAgICAgICByZXN1bHQgKz0gbGluZVJvdy5vZmZzZXRIZWlnaHQ7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9LAorCisgICAgX2NyZWF0
ZVJvdzogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIHZhciBsaW5lUm93ID0g
dGhpcy5fdGV4dFZpZXdlci5fY2FjaGVkUm93cy5wb3AoKSB8fCBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKKyAgICAgICAgbGluZVJvdy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAg
ICAgICAgbGluZVJvdy5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtbnVtYmVyIjsKKyAgICAgICAg
bGluZVJvdy50ZXh0Q29udGVudCA9IGxpbmVOdW1iZXIgKyAxOworICAgICAgICByZXR1cm4gbGlu
ZVJvdzsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsID0gZnVu
Y3Rpb24odGV4dE1vZGVsLCB1cmwpCit7CisgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVu
a2VkUGFuZWwuY2FsbCh0aGlzLCB0ZXh0TW9kZWwpOworCisgICAgdGhpcy5fdXJsID0gdXJsOwor
ICAgIHRoaXMuX2hpZ2hsaWdodGVyID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9ySGlnaGxp
Z2h0ZXIodGV4dE1vZGVsLCB0aGlzLl9oaWdobGlnaHREYXRhUmVhZHkuYmluZCh0aGlzKSk7CisK
KyAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0
aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gInRleHQtZWRpdG9yLWNvbnRlbnRzIjsKKworICAgIHRo
aXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLl9zY3JvbGwuYmluZCh0
aGlzKSwgZmFsc2UpOworICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJET01DaGFy
YWN0ZXJEYXRhTW9kaWZpZWQiLCB0aGlzLl9oYW5kbGVEb21VcGRhdGVzLmJpbmQodGhpcyksIGZh
bHNlKTsKKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NTm9kZUluc2VydGVk
IiwgdGhpcy5faGFuZGxlRG9tVXBkYXRlcy5iaW5kKHRoaXMpLCBmYWxzZSk7CisgICAgdGhpcy5l
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTU5vZGVSZW1vdmVkIiwgdGhpcy5faGFuZGxlRG9t
VXBkYXRlcy5iaW5kKHRoaXMpLCBmYWxzZSk7CisKKyAgICB0aGlzLmZyZWVDYWNoZWRFbGVtZW50
cygpOworICAgIHRoaXMuX2J1aWxkQ2h1bmtzKCk7Cit9CisKK1dlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKKyAgICBzZXQgc3luY0RlY29yYXRpb25zRm9yTGlu
ZShsaXN0ZW5lcikKKyAgICB7CisgICAgICAgIHRoaXMuX3N5bmNEZWNvcmF0aW9uc0ZvckxpbmVM
aXN0ZW5lciA9IGxpc3RlbmVyOworICAgIH0sCisKKyAgICBzZXQgbWltZVR5cGUobWltZVR5cGUp
CisgICAgeworICAgICAgICB0aGlzLl9oaWdobGlnaHRlci5taW1lVHlwZSA9IG1pbWVUeXBlOwor
ICAgIH0sCisKKyAgICBtYXJrQW5kUmV2ZWFsUmFuZ2U6IGZ1bmN0aW9uKHJhbmdlKQorICAgIHsK
KyAgICAgICAgaWYgKHRoaXMuX3JhbmdlVG9NYXJrKSB7CisgICAgICAgICAgICB2YXIgbWFya2Vk
TGluZSA9IHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0TGluZTsKKyAgICAgICAgICAgIHRoaXMuX3Jh
bmdlVG9NYXJrID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuX3BhaW50TGluZXMobWFya2VkTGlu
ZSwgbWFya2VkTGluZSArIDEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJhbmdlKSB7Cisg
ICAgICAgICAgICB0aGlzLl9yYW5nZVRvTWFyayA9IHJhbmdlOworICAgICAgICAgICAgdGhpcy5y
ZXZlYWxMaW5lKHJhbmdlLnN0YXJ0TGluZSk7CisgICAgICAgICAgICB0aGlzLl9wYWludExpbmVz
KHJhbmdlLnN0YXJ0TGluZSwgcmFuZ2Uuc3RhcnRMaW5lICsgMSk7CisgICAgICAgICAgICBpZiAo
dGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50KQorICAgICAgICAgICAgICAgIHRoaXMuX21hcmtlZFJh
bmdlRWxlbWVudC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7CisgICAgICAgIH0KKyAgICAgICAg
ZGVsZXRlIHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudDsKKyAgICB9LAorCisgICAgaGlnaGxpZ2h0
TGluZTogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIHRoaXMuY2xlYXJMaW5l
SGlnaGxpZ2h0KCk7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdodGVkTGluZSA9IGxpbmVOdW1iZXI7
CisgICAgICAgIHRoaXMucmV2ZWFsTGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgdGhpcy5hZGRE
ZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtaGlnaGxpZ2h0ZWQtbGluZSIpOworICAgIH0s
CisKKyAgICBjbGVhckxpbmVIaWdobGlnaHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlm
ICh0eXBlb2YgdGhpcy5faGlnaGxpZ2h0ZWRMaW5lID09PSAibnVtYmVyIikgeworICAgICAgICAg
ICAgdGhpcy5yZW1vdmVEZWNvcmF0aW9uKHRoaXMuX2hpZ2hsaWdodGVkTGluZSwgIndlYmtpdC1o
aWdobGlnaHRlZC1saW5lIik7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5faGlnaGxpZ2h0ZWRM
aW5lOworICAgICAgICB9CisgICAgfSwKKworICAgIGZyZWVDYWNoZWRFbGVtZW50czogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2FjaGVkU3BhbnMgPSBbXTsKKyAgICAgICAgdGhp
cy5fY2FjaGVkVGV4dE5vZGVzID0gW107CisgICAgICAgIHRoaXMuX2NhY2hlZFJvd3MgPSBbXTsK
KyAgICB9LAorCisgICAgX2J1aWxkQ2h1bmtzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0
aGlzLl9oaWdobGlnaHRlci5yZXNldCgpOworICAgICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX2J1aWxkQ2h1bmtzLmNhbGwodGhpcyk7CisgICAgfSwK
KworICAgIF9jcmVhdGVOZXdDaHVuazogZnVuY3Rpb24oc3RhcnRMaW5lLCBlbmRMaW5lKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuayh0
aGlzLCBzdGFydExpbmUsIGVuZExpbmUpOworICAgIH0sCisKKyAgICBfZXhwYW5kQ2h1bmtzOiBm
dW5jdGlvbihmcm9tSW5kZXgsIHRvSW5kZXgpCisgICAgeworICAgICAgICB2YXIgbGFzdENodW5r
ID0gdGhpcy5fdGV4dENodW5rc1t0b0luZGV4IC0gMV07CisgICAgICAgIHZhciBsYXN0VmlzaWJs
ZUxpbmUgPSBsYXN0Q2h1bmsuc3RhcnRMaW5lICsgbGFzdENodW5rLmxpbmVzQ291bnQ7CiAKICAg
ICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlvbigpOwogCkBAIC0zNjgsMTAg
KzY1MSw5IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAg
dGhpcy5faGlnaGxpZ2h0ZXIuaGlnaGxpZ2h0KGxhc3RWaXNpYmxlTGluZSk7CiAgICAgICAgIGRl
bGV0ZSB0aGlzLl9tdXRlSGlnaGxpZ2h0TGlzdGVuZXI7CiAKLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0b0NvbGxhcHNlLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdG9Db2xsYXBzZVtp
XS5leHBhbmRlZCA9IGZhbHNlOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvRXhwYW5k
Lmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdG9FeHBhbmRbaV0uZXhwYW5kZWQgPSB0cnVlOwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgIHRoaXMuX3RleHRDaHVua3NbaV0uZXhwYW5kZWQgPSAoZnJvbUluZGV4
IDw9IGkgJiYgaSA8IHRvSW5kZXgpOworICAgICAgICB9CiAKICAgICAgICAgdGhpcy5fcmVzdG9y
ZVNlbGVjdGlvbihzZWxlY3Rpb24pOwogICAgIH0sCkBAIC0zODAsNDAgKzY2Miw0MCBAQCBXZWJJ
bnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICBpZiAodGhp
cy5fbXV0ZUhpZ2hsaWdodExpc3RlbmVyKQogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0
aGlzLl9wYWludExpbmVzKGZyb21MaW5lLCB0b0xpbmUsIHRydWUgLypyZXN0b3JlU2VsZWN0aW9u
Ki8pOworICAgIH0sCiAKKyAgICBfcGFpbnRMaW5lczogZnVuY3Rpb24oZnJvbUxpbmUsIHRvTGlu
ZSwgcmVzdG9yZVNlbGVjdGlvbikKKyAgICB7CiAgICAgICAgIHZhciBzZWxlY3Rpb247CisgICAg
ICAgIHZhciBjaHVuayA9IHRoaXMuX2NodW5rRm9yTGluZShmcm9tTGluZSk7CiAgICAgICAgIGZv
ciAodmFyIGkgPSBmcm9tTGluZTsgaSA8IHRvTGluZTsgKytpKSB7Ci0gICAgICAgICAgICB2YXIg
bGluZVJvdyA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUoaSwgImxpbmUtcm93Iik7Ci0g
ICAgICAgICAgICBpZiAoIWxpbmVSb3cgfHwgbGluZVJvdy5oaWdobGlnaHRlZCkKKyAgICAgICAg
ICAgIGlmIChpID49IGNodW5rLnN0YXJ0TGluZSArIGNodW5rLmxpbmVzQ291bnQpCisgICAgICAg
ICAgICAgICAgY2h1bmsgPSB0aGlzLl9jaHVua0ZvckxpbmUoaSk7CisgICAgICAgICAgICB2YXIg
bGluZVJvdyA9IGNodW5rLmdldEV4cGFuZGVkTGluZVJvdyhpKTsKKyAgICAgICAgICAgIGlmICgh
bGluZVJvdykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghc2Vs
ZWN0aW9uKQorICAgICAgICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rpb24gJiYgIXNlbGVjdGlvbikK
ICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLl9nZXRTZWxlY3Rpb24oKTsKICAgICAg
ICAgICAgIHRoaXMuX3BhaW50TGluZShsaW5lUm93LCBpKTsKICAgICAgICAgfQotICAgICAgICB0
aGlzLl9yZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0gICAgfSwKLQotICAgIF9wYWludExp
bmVzOiBmdW5jdGlvbihmcm9tTGluZSwgdG9MaW5lKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIg
aSA9IGZyb21MaW5lOyBpIDwgdG9MaW5lOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBsaW5lUm93
ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShpLCAibGluZS1yb3ciKTsKLSAgICAgICAg
ICAgIGlmIChsaW5lUm93KQotICAgICAgICAgICAgICAgIHRoaXMuX3BhaW50TGluZShsaW5lUm93
LCBpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAocmVzdG9yZVNlbGVjdGlvbikKKyAgICAgICAg
ICAgIHRoaXMuX3Jlc3RvcmVTZWxlY3Rpb24oc2VsZWN0aW9uKTsKICAgICB9LAogCiAgICAgX3Bh
aW50TGluZTogZnVuY3Rpb24obGluZVJvdywgbGluZU51bWJlcikKICAgICB7Ci0gICAgICAgIHZh
ciBlbGVtZW50ID0gbGluZVJvdy5sYXN0Q2hpbGQ7CiAgICAgICAgIHZhciBoaWdobGlnaHQgPSB0
aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGxpbmVOdW1iZXIsICJoaWdobGlnaHQiKTsKICAg
ICAgICAgaWYgKCFoaWdobGlnaHQpIHsKICAgICAgICAgICAgIGlmICh0aGlzLl9yYW5nZVRvTWFy
ayAmJiB0aGlzLl9yYW5nZVRvTWFyay5zdGFydExpbmUgPT09IGxpbmVOdW1iZXIpCi0gICAgICAg
ICAgICAgICAgdGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50ID0gaGlnaGxpZ2h0U2VhcmNoUmVzdWx0
KGVsZW1lbnQsIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0Q29sdW1uLCB0aGlzLl9yYW5nZVRvTWFy
ay5lbmRDb2x1bW4gLSB0aGlzLl9yYW5nZVRvTWFyay5zdGFydENvbHVtbik7CisgICAgICAgICAg
ICAgICAgdGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50ID0gaGlnaGxpZ2h0U2VhcmNoUmVzdWx0KGxp
bmVSb3csIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0Q29sdW1uLCB0aGlzLl9yYW5nZVRvTWFyay5l
bmRDb2x1bW4gLSB0aGlzLl9yYW5nZVRvTWFyay5zdGFydENvbHVtbik7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBlbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7Cisg
ICAgICAgIGxpbmVSb3cucmVtb3ZlQ2hpbGRyZW4oKTsKICAgICAgICAgdmFyIGxpbmUgPSB0aGlz
Ll90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgaWYgKCFsaW5lKQorICAgICAg
ICAgICAgbGluZVJvdy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsK
IAogICAgICAgICB2YXIgcGxhaW5UZXh0U3RhcnQgPSAtMTsKICAgICAgICAgZm9yICh2YXIgaiA9
IDA7IGogPCBsaW5lLmxlbmd0aDspIHsKQEAgLTQzMCw5OCArNzEyLDY0IEBAIFdlYkluc3BlY3Rv
ci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBqKys7CiAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChwbGFpblRleHRTdGFydCAhPT0gLTEp
IHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwZW5kVGV4dE5vZGUoZWxlbWVudCwgbGlu
ZS5zdWJzdHJpbmcocGxhaW5UZXh0U3RhcnQsIGopKTsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5fYXBwZW5kVGV4dE5vZGUobGluZVJvdywgbGluZS5zdWJzdHJpbmcocGxhaW5UZXh0U3RhcnQs
IGopKTsKICAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0U3RhcnQgPSAtMTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5fYXBwZW5kU3BhbihlbGVtZW50LCBsaW5l
LnN1YnN0cmluZyhqLCBqICsgYXR0cmlidXRlLmxlbmd0aCksIGF0dHJpYnV0ZS50b2tlblR5cGUp
OworICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZFNwYW4obGluZVJvdywgbGluZS5zdWJzdHJp
bmcoaiwgaiArIGF0dHJpYnV0ZS5sZW5ndGgpLCBhdHRyaWJ1dGUudG9rZW5UeXBlKTsKICAgICAg
ICAgICAgICAgICBqICs9IGF0dHJpYnV0ZS5sZW5ndGg7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0ICE9PSAtMSkKLSAgICAgICAgICAgIHRoaXMu
X2FwcGVuZFRleHROb2RlKGVsZW1lbnQsIGxpbmUuc3Vic3RyaW5nKHBsYWluVGV4dFN0YXJ0LCBs
aW5lLmxlbmd0aCkpOworICAgICAgICAgICAgdGhpcy5fYXBwZW5kVGV4dE5vZGUobGluZVJvdywg
bGluZS5zdWJzdHJpbmcocGxhaW5UZXh0U3RhcnQsIGxpbmUubGVuZ3RoKSk7CiAgICAgICAgIGlm
ICh0aGlzLl9yYW5nZVRvTWFyayAmJiB0aGlzLl9yYW5nZVRvTWFyay5zdGFydExpbmUgPT09IGxp
bmVOdW1iZXIpCi0gICAgICAgICAgICB0aGlzLl9tYXJrZWRSYW5nZUVsZW1lbnQgPSBoaWdobGln
aHRTZWFyY2hSZXN1bHQoZWxlbWVudCwgdGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRDb2x1bW4sIHRo
aXMuX3JhbmdlVG9NYXJrLmVuZENvbHVtbiAtIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0Q29sdW1u
KTsKKyAgICAgICAgICAgIHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudCA9IGhpZ2hsaWdodFNlYXJj
aFJlc3VsdChsaW5lUm93LCB0aGlzLl9yYW5nZVRvTWFyay5zdGFydENvbHVtbiwgdGhpcy5fcmFu
Z2VUb01hcmsuZW5kQ29sdW1uIC0gdGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRDb2x1bW4pOwogICAg
ICAgICBpZiAobGluZVJvdy5kZWNvcmF0aW9uc0VsZW1lbnQpCi0gICAgICAgICAgICBlbGVtZW50
LmFwcGVuZENoaWxkKGxpbmVSb3cuZGVjb3JhdGlvbnNFbGVtZW50KTsKKyAgICAgICAgICAgIGxp
bmVSb3cuYXBwZW5kQ2hpbGQobGluZVJvdy5kZWNvcmF0aW9uc0VsZW1lbnQpOwogICAgIH0sCiAK
LSAgICBfcmVsZWFzZUxpbmVzSGlnaGxpZ2h0OiBmdW5jdGlvbihmcm9tTGluZSwgdG9MaW5lKQor
ICAgIF9yZWxlYXNlTGluZXNIaWdobGlnaHQ6IGZ1bmN0aW9uKGxpbmVSb3cpCiAgICAgewotICAg
ICAgICBmb3IgKHZhciBpID0gZnJvbUxpbmU7IGkgPCB0b0xpbmU7ICsraSkgewotICAgICAgICAg
ICAgdmFyIGxpbmVSb3cgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGksICJsaW5lLXJv
dyIpOwotICAgICAgICAgICAgaWYgKCFsaW5lUm93KQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBsaW5lUm93Lmxhc3RDaGlsZDsKLSAgICAgICAg
ICAgIGlmICgic3BhbnMiIGluIGVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICB2YXIgc3BhbnMg
PSBlbGVtZW50LnNwYW5zOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3Bh
bnMubGVuZ3RoOyArK2opCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZFNwYW5zLnB1
c2goc3BhbnNbal0pOwotICAgICAgICAgICAgICAgIGRlbGV0ZSBlbGVtZW50LnNwYW5zOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCJ0ZXh0Tm9kZXMiIGluIGVsZW1lbnQpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgdGV4dE5vZGVzID0gZWxlbWVudC50ZXh0Tm9kZXM7Ci0gICAgICAg
ICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0ZXh0Tm9kZXMubGVuZ3RoOyArK2opCi0gICAg
ICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZFRleHROb2Rlcy5wdXNoKHRleHROb2Rlc1tqXSk7
Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGVsZW1lbnQudGV4dE5vZGVzOwotICAgICAgICAgICAg
fQorICAgICAgICBpZiAoIWxpbmVSb3cpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlm
ICgic3BhbnMiIGluIGxpbmVSb3cpIHsKKyAgICAgICAgICAgIHZhciBzcGFucyA9IGxpbmVSb3cu
c3BhbnM7CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNwYW5zLmxlbmd0aDsgKytq
KQorICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZFNwYW5zLnB1c2goc3BhbnNbal0pOworICAg
ICAgICAgICAgZGVsZXRlIGxpbmVSb3cuc3BhbnM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCJ0
ZXh0Tm9kZXMiIGluIGxpbmVSb3cpIHsKKyAgICAgICAgICAgIHZhciB0ZXh0Tm9kZXMgPSBsaW5l
Um93LnRleHROb2RlczsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGV4dE5vZGVz
Lmxlbmd0aDsgKytqKQorICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZFRleHROb2Rlcy5wdXNo
KHRleHROb2Rlc1tqXSk7CisgICAgICAgICAgICBkZWxldGUgbGluZVJvdy50ZXh0Tm9kZXM7CiAg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5fY2FjaGVkUm93cy5wdXNoKGxpbmVSb3cpOwogICAgIH0s
CiAKICAgICBfZ2V0U2VsZWN0aW9uOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB2YXIgc2Vs
ZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwotICAgICAgICBpZiAoc2VsZWN0aW9uLmlz
Q29sbGFwc2VkKQorICAgICAgICBpZiAoIXNlbGVjdGlvbi5yYW5nZUNvdW50KQogICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CiAgICAgICAgIHZhciBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi5n
ZXRSYW5nZUF0KDApOwogICAgICAgICAvLyBTZWxlY3Rpb24gbWF5IGJlIG91dHNpZGUgb2YgdGhl
IHZpZXdlci4KICAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQuaXNBbmNlc3RvcihzZWxlY3Rpb25S
YW5nZS5zdGFydENvbnRhaW5lcikgfHwgIXRoaXMuZWxlbWVudC5pc0FuY2VzdG9yKHNlbGVjdGlv
blJhbmdlLmVuZENvbnRhaW5lcikpCiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAg
dmFyIHN0YXJ0ID0gdGhpcy5fc2VsZWN0aW9uVG9Qb3NpdGlvbihzZWxlY3Rpb25SYW5nZS5zdGFy
dENvbnRhaW5lciwgc2VsZWN0aW9uUmFuZ2Uuc3RhcnRPZmZzZXQpOwotICAgICAgICB2YXIgZW5k
ID0gdGhpcy5fc2VsZWN0aW9uVG9Qb3NpdGlvbihzZWxlY3Rpb25SYW5nZS5lbmRDb250YWluZXIs
IHNlbGVjdGlvblJhbmdlLmVuZE9mZnNldCk7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVj
dG9yLlRleHRSYW5nZShzdGFydC5saW5lLCBzdGFydC5jb2x1bW4sIGVuZC5saW5lLCBlbmQuY29s
dW1uKTsKKyAgICAgICAgdmFyIGVuZCA9IHNlbGVjdGlvblJhbmdlLmNvbGxhcHNlZCA/IHN0YXJ0
IDogdGhpcy5fc2VsZWN0aW9uVG9Qb3NpdGlvbihzZWxlY3Rpb25SYW5nZS5lbmRDb250YWluZXIs
IHNlbGVjdGlvblJhbmdlLmVuZE9mZnNldCk7CisgICAgICAgIGlmIChzZWxlY3Rpb24uYW5jaG9y
Tm9kZSA9PT0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRDb250YWluZXIgJiYgc2VsZWN0aW9uLmFuY2hv
ck9mZnNldCA9PT0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRPZmZzZXQpCisgICAgICAgICAgICByZXR1
cm4gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2Uoc3RhcnQubGluZSwgc3RhcnQuY29sdW1uLCBl
bmQubGluZSwgZW5kLmNvbHVtbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBu
ZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShlbmQubGluZSwgZW5kLmNvbHVtbiwgc3RhcnQubGlu
ZSwgc3RhcnQuY29sdW1uKTsKICAgICB9LAogCiAgICAgX3Jlc3RvcmVTZWxlY3Rpb246IGZ1bmN0
aW9uKHJhbmdlKQogICAgIHsKICAgICAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgdmFyIHN0YXJ0Um93ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShy
YW5nZS5zdGFydExpbmUsICJsaW5lLXJvdyIpOwotICAgICAgICBpZiAoc3RhcnRSb3cpCi0gICAg
ICAgICAgICB2YXIgc3RhcnQgPSBzdGFydFJvdy5sYXN0Q2hpbGQucmFuZ2VCb3VuZGFyeUZvck9m
ZnNldChyYW5nZS5zdGFydENvbHVtbik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdmFy
IG9mZnNldCA9IHJhbmdlLnN0YXJ0Q29sdW1uOwotICAgICAgICAgICAgdmFyIGNodW5rTnVtYmVy
ID0gdGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5lKHJhbmdlLnN0YXJ0TGluZSk7Ci0gICAgICAgICAg
ICBmb3IgKHZhciBpID0gdGhpcy5fY2h1bmtTdGFydExpbmUoY2h1bmtOdW1iZXIpOyBpIDwgcmFu
Z2Uuc3RhcnRMaW5lOyArK2kpCi0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHRoaXMuX3RleHRN
b2RlbC5saW5lKGkpLmxlbmd0aCArIDE7IC8vIFxuCi0gICAgICAgICAgICB2YXIgbGluZUNlbGwg
PSB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVtYmVyXS5lbGVtZW50Lmxhc3RDaGlsZDsKLSAgICAg
ICAgICAgIGlmIChsaW5lQ2VsbC5maXJzdENoaWxkKQotICAgICAgICAgICAgICAgIHZhciBzdGFy
dCA9IHsgY29udGFpbmVyOiBsaW5lQ2VsbC5maXJzdENoaWxkLCBvZmZzZXQ6IG9mZnNldCB9Owot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHsgY29udGFpbmVy
OiBsaW5lQ2VsbCwgb2Zmc2V0OiAwIH07Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZW5kUm93
ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShyYW5nZS5lbmRMaW5lLCAibGluZS1yb3ci
KTsKLSAgICAgICAgaWYgKGVuZFJvdykKLSAgICAgICAgICAgIHZhciBlbmQgPSBlbmRSb3cubGFz
dENoaWxkLnJhbmdlQm91bmRhcnlGb3JPZmZzZXQocmFuZ2UuZW5kQ29sdW1uKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmFuZ2UuZW5kQ29sdW1uOwotICAgICAg
ICAgICAgdmFyIGNodW5rTnVtYmVyID0gdGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5lKHJhbmdlLmVu
ZExpbmUpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2NodW5rU3RhcnRMaW5lKGNo
dW5rTnVtYmVyKTsgaSA8IHJhbmdlLmVuZExpbmU7ICsraSkKLSAgICAgICAgICAgICAgICBvZmZz
ZXQgKz0gdGhpcy5fdGV4dE1vZGVsLmxpbmUoaSkubGVuZ3RoICsgMTsgLy8gXG4KLSAgICAgICAg
ICAgIHZhciBsaW5lQ2VsbCA9IHRoaXMuX3RleHRDaHVua3NbY2h1bmtOdW1iZXJdLmVsZW1lbnQu
bGFzdENoaWxkOwotICAgICAgICAgICAgaWYgKGxpbmVDZWxsLmZpcnN0Q2hpbGQpCi0gICAgICAg
ICAgICAgICAgdmFyIGVuZCA9IHsgY29udGFpbmVyOiBsaW5lQ2VsbC5maXJzdENoaWxkLCBvZmZz
ZXQ6IG9mZnNldCB9OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHZhciBlbmQg
PSB7IGNvbnRhaW5lcjogbGluZUNlbGwsIG9mZnNldDogMCB9OwotICAgICAgICB9Ci0KLSAgICAg
ICAgdmFyIHNlbGVjdGlvblJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAg
c2VsZWN0aW9uUmFuZ2Uuc2V0U3RhcnQoc3RhcnQuY29udGFpbmVyLCBzdGFydC5vZmZzZXQpOwot
ICAgICAgICBzZWxlY3Rpb25SYW5nZS5zZXRFbmQoZW5kLmNvbnRhaW5lciwgZW5kLm9mZnNldCk7
Ci0KLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAgICAg
ICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwotICAgICAgICBzZWxlY3Rpb24uYWRkUmFu
Z2Uoc2VsZWN0aW9uUmFuZ2UpOworICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLl9wb3NpdGlvblRv
U2VsZWN0aW9uKHJhbmdlLnN0YXJ0TGluZSwgcmFuZ2Uuc3RhcnRDb2x1bW4pOworICAgICAgICB2
YXIgZW5kID0gcmFuZ2UuaXNFbXB0eSgpID8gc3RhcnQgOiB0aGlzLl9wb3NpdGlvblRvU2VsZWN0
aW9uKHJhbmdlLmVuZExpbmUsIHJhbmdlLmVuZENvbHVtbik7CisgICAgICAgIHdpbmRvdy5nZXRT
ZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KHN0YXJ0LmNvbnRhaW5lciwgc3RhcnQub2Zmc2V0
LCBlbmQuY29udGFpbmVyLCBlbmQub2Zmc2V0KTsKICAgICB9LAogCiAgICAgX3NlbGVjdGlvblRv
UG9zaXRpb246IGZ1bmN0aW9uKGNvbnRhaW5lciwgb2Zmc2V0KQpAQCAtNTMxLDIxICs3NzksMjYg
QEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewogICAgICAgICBpZiAoY29u
dGFpbmVyID09PSB0aGlzLmVsZW1lbnQgJiYgb2Zmc2V0ID09PSAxKQogICAgICAgICAgICAgcmV0
dXJuIHsgbGluZTogdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQgLSAxLCBjb2x1bW46IHRoaXMu
X3RleHRNb2RlbC5saW5lTGVuZ3RoKHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50IC0gMSkgfTsK
IAotICAgICAgICB2YXIgbGluZVJvdyA9IGNvbnRhaW5lci5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0
aE5vZGVOYW1lKCJ0ciIpOworICAgICAgICB2YXIgbGluZVJvdyA9IGNvbnRhaW5lci5lbmNsb3Np
bmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1lKCJESVYiKTsKICAgICAgICAgdmFyIGxpbmVOdW1iZXIg
PSBsaW5lUm93LmxpbmVOdW1iZXI7Ci0gICAgICAgIGlmIChjb250YWluZXIubm9kZU5hbWUgPT09
ICJURCIgJiYgb2Zmc2V0ID09PSAwKQorICAgICAgICBpZiAoY29udGFpbmVyID09PSBsaW5lUm93
ICYmIG9mZnNldCA9PT0gMCkKICAgICAgICAgICAgIHJldHVybiB7IGxpbmU6IGxpbmVOdW1iZXIs
IGNvbHVtbjogMCB9OwotICAgICAgICBpZiAoY29udGFpbmVyLm5vZGVOYW1lID09PSAiVEQiICYm
IG9mZnNldCA9PT0gMSkKLSAgICAgICAgICAgIHJldHVybiB7IGxpbmU6IGxpbmVOdW1iZXIsIGNv
bHVtbjogdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgobGluZU51bWJlcikgfTsKIAorICAgICAg
ICAvLyBUaGlzIG1heSBiZSBjaHVuayBhbmQgY2h1bmtzIG1heSBjb250YWluIFxuLgogICAgICAg
ICB2YXIgY29sdW1uID0gMDsKLSAgICAgICAgdmFyIG5vZGUgPSBsaW5lUm93Lmxhc3RDaGlsZC50
cmF2ZXJzZU5leHRUZXh0Tm9kZShsaW5lUm93Lmxhc3RDaGlsZCk7CisgICAgICAgIHZhciBub2Rl
ID0gbGluZVJvdy50cmF2ZXJzZU5leHRUZXh0Tm9kZShsaW5lUm93KTsKICAgICAgICAgd2hpbGUg
KG5vZGUgJiYgbm9kZSAhPT0gY29udGFpbmVyKSB7Ci0gICAgICAgICAgICBjb2x1bW4gKz0gbm9k
ZS50ZXh0Q29udGVudC5sZW5ndGg7Ci0gICAgICAgICAgICBub2RlID0gbm9kZS50cmF2ZXJzZU5l
eHRUZXh0Tm9kZShsaW5lUm93Lmxhc3RDaGlsZCk7CisgICAgICAgICAgICB2YXIgdGV4dCA9IG5v
ZGUudGV4dENvbnRlbnQ7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAodGV4dC5jaGFyQXQoaSkgPT09ICJcbiIp
IHsKKyAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcisrOworICAgICAgICAgICAgICAgICAg
ICBjb2x1bW4gPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAg
ICBjb2x1bW4rKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vZGUgPSBub2RlLnRyYXZl
cnNlTmV4dFRleHROb2RlKGxpbmVSb3cpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gVGhpcyBt
YXkgYmUgY2h1bmsgYW5kIGNodW5rcyBtYXkgY29udGFpbiBcbi4KICAgICAgICAgaWYgKG5vZGUg
PT09IGNvbnRhaW5lciAmJiBvZmZzZXQpIHsKICAgICAgICAgICAgIHZhciB0ZXh0ID0gbm9kZS50
ZXh0Q29udGVudDsKICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2Zmc2V0OyArK2kp
IHsKQEAgLTU1OSw2ICs4MTIsMjUgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBl
ID0gewogICAgICAgICByZXR1cm4geyBsaW5lOiBsaW5lTnVtYmVyLCBjb2x1bW46IGNvbHVtbiB9
OwogICAgIH0sCiAKKyAgICBfcG9zaXRpb25Ub1NlbGVjdGlvbjogZnVuY3Rpb24obGluZSwgY29s
dW1uKQorICAgIHsKKyAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fY2h1bmtGb3JMaW5lKGxpbmUp
OworICAgICAgICB2YXIgbGluZVJvdyA9IGNodW5rLmdldEV4cGFuZGVkTGluZVJvdyhsaW5lKTsK
KyAgICAgICAgaWYgKGxpbmVSb3cpCisgICAgICAgICAgICB2YXIgcmFuZ2VCb3VuZGFyeSA9IGxp
bmVSb3cucmFuZ2VCb3VuZGFyeUZvck9mZnNldChjb2x1bW4pOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIHZhciBvZmZzZXQgPSBjb2x1bW47CisgICAgICAgICAgICBmb3IgKHZhciBpID0g
Y2h1bmsuc3RhcnRMaW5lOyBpIDwgbGluZTsgKytpKQorICAgICAgICAgICAgICAgIG9mZnNldCAr
PSB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChpKSArIDE7IC8vIFxuCisgICAgICAgICAgICBs
aW5lUm93ID0gY2h1bmsuZWxlbWVudDsKKyAgICAgICAgICAgIGlmIChsaW5lUm93LmZpcnN0Q2hp
bGQpCisgICAgICAgICAgICAgICAgdmFyIHJhbmdlQm91bmRhcnkgPSB7IGNvbnRhaW5lcjogbGlu
ZVJvdy5maXJzdENoaWxkLCBvZmZzZXQ6IG9mZnNldCB9OworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHZhciByYW5nZUJvdW5kYXJ5ID0geyBjb250YWluZXI6IGxpbmVSb3csIG9m
ZnNldDogMCB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiByYW5nZUJvdW5kYXJ5OworICAg
IH0sCisKICAgICBfYXBwZW5kU3BhbjogZnVuY3Rpb24oZWxlbWVudCwgY29udGVudCwgY2xhc3NO
YW1lKQogICAgIHsKICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gImh0bWwtcmVzb3VyY2UtbGlu
ayIgfHwgY2xhc3NOYW1lID09PSAiaHRtbC1leHRlcm5hbC1saW5rIikgewpAQCAtNTc4LDkgKzg1
MCw5IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAgICBfYXBwZW5k
VGV4dE5vZGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHRleHQpCiAgICAgewogICAgICAgICB2YXIgdGV4
dE5vZGUgPSB0aGlzLl9jYWNoZWRUZXh0Tm9kZXMucG9wKCk7Ci0gICAgICAgIGlmICh0ZXh0Tm9k
ZSkgeworICAgICAgICBpZiAodGV4dE5vZGUpCiAgICAgICAgICAgICB0ZXh0Tm9kZS5ub2RlVmFs
dWUgPSB0ZXh0OwotICAgICAgICB9IGVsc2UKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgdGV4
dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTsKICAgICAgICAgZWxlbWVudC5h
cHBlbmRDaGlsZCh0ZXh0Tm9kZSk7CiAgICAgICAgIGlmICghKCJ0ZXh0Tm9kZXMiIGluIGVsZW1l
bnQpKQpAQCAtNjE0LDU4ICs4ODYsNTEgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlID0gewogICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmNvbXBsZXRlVVJMKHRoaXMuX3Vy
bCwgaHJlZlZhbHVlKTsKICAgICB9LAogCi0gICAgcmVzaXplOiBmdW5jdGlvbigpCisgICAgX2hh
bmRsZURvbVVwZGF0ZXM6IGZ1bmN0aW9uKGUpCiAgICAgewotICAgICAgICB0aGlzLl9yZXBhaW50
QWxsKCk7CisgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldDsKKyAgICAgICAgdmFyIGxpbmVS
b3cgPSB0YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWxpbmUtY29u
dGVudCIpOworICAgICAgICBpZiAobGluZVJvdyA9PT0gdGFyZ2V0IHx8ICFsaW5lUm93IHx8ICFs
aW5lUm93LmRlY29yYXRpb25zRWxlbWVudCB8fCAhbGluZVJvdy5kZWNvcmF0aW9uc0VsZW1lbnQu
aXNBbmNlc3Rvcih0YXJnZXQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBXYWl0
IHVudGlsIHRoaXMgZXZlbnQgaXMgcHJvY2Vzc2VkIGFuZCBvbmx5IHRoZW4gc3luYyB0aGUgc2l6
ZXMuCisgICAgICAgIGlmICh0aGlzLl9zeW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIpIHsK
KyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyKGxpbmVSb3cubGluZU51bWJlcik7Cisg
ICAgICAgICAgICB9LmJpbmQodGhpcyksIDApOworICAgICAgICB9CiAgICAgfQogfQogCi12YXIg
Y2FjaGVkU3BhbnMgPSBbXTsKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3Rv
dHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90
b3R5cGU7CiAKLVdlYkluc3BlY3Rvci5UZXh0Q2h1bmsgPSBmdW5jdGlvbih0ZXh0Vmlld2VyLCBz
dGFydExpbmUsIGVuZExpbmUpCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuayA9IGZ1
bmN0aW9uKHRleHRWaWV3ZXIsIHN0YXJ0TGluZSwgZW5kTGluZSkKIHsKICAgICB0aGlzLl90ZXh0
Vmlld2VyID0gdGV4dFZpZXdlcjsKLSAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJ0ciIpOwogICAgIHRoaXMuX3RleHRNb2RlbCA9IHRleHRWaWV3ZXIuX3RleHRNb2Rl
bDsKLSAgICB0aGlzLmVsZW1lbnQuY2h1bmsgPSB0aGlzOworCisgICAgdGhpcy5lbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgdGhpcy5lbGVtZW50LmxpbmVOdW1i
ZXIgPSBzdGFydExpbmU7CisgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGlu
ZS1jb250ZW50IjsKIAogICAgIHRoaXMuc3RhcnRMaW5lID0gc3RhcnRMaW5lOwogICAgIGVuZExp
bmUgPSBNYXRoLm1pbih0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCwgZW5kTGluZSk7CiAgICAg
dGhpcy5saW5lc0NvdW50ID0gZW5kTGluZSAtIHN0YXJ0TGluZTsKIAotICAgIHRoaXMuX2xpbmVO
dW1iZXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB0aGlzLl9s
aW5lTnVtYmVyRWxlbWVudC5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtbnVtYmVyIjsKLSAgICB0
aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fbGluZU51bWJlckVsZW1lbnQpOwotCi0gICAg
dGhpcy5fbGluZUNvbnRlbnRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsK
LSAgICB0aGlzLl9saW5lQ29udGVudEVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLWNv
bnRlbnQiOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9saW5lQ29udGVudEVs
ZW1lbnQpOwotCiAgICAgdGhpcy5fZXhwYW5kZWQgPSBmYWxzZTsKIAotICAgIHZhciBsaW5lTnVt
YmVycyA9IFtdOwogICAgIHZhciBsaW5lcyA9IFtdOwogICAgIGZvciAodmFyIGkgPSBzdGFydExp
bmU7IGkgPCBlbmRMaW5lOyArK2kpIHsKLSAgICAgICAgbGluZU51bWJlcnMucHVzaChpICsgMSk7
CiAgICAgICAgIGxpbmVzLnB1c2godGhpcy5fdGV4dE1vZGVsLmxpbmUoaSkpOwogICAgIH0KLSAg
ICBpZiAodGhpcy5saW5lc0NvdW50ID09PSAxKSB7Ci0gICAgICAgIC8vIFNpbmdsZSBsaW5lIGNo
dW5rcyBhcmUgdHlwaWNhbGx5IGNyZWF0ZWQgZm9yIGRlY29yYXRpb25zLiBIb3N0IGxpbmUgbnVt
YmVyIGluCi0gICAgICAgIC8vIHRoZSBzdWItZWxlbWVudCBpbiBvcmRlciB0byBhbGxvdyBmbGV4
aWJsZSBib3JkZXIgLyBtYXJnaW4gbWFuYWdlbWVudC4KLSAgICAgICAgdmFyIGlubmVyU3BhbiA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgaW5uZXJTcGFuLmNsYXNz
TmFtZSA9ICJ3ZWJraXQtbGluZS1udW1iZXItaW5uZXIiOwotICAgICAgICBpbm5lclNwYW4udGV4
dENvbnRlbnQgPSBzdGFydExpbmUgKyAxOwotICAgICAgICB2YXIgb3V0ZXJTcGFuID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIG91dGVyU3Bhbi5jbGFzc05hbWUgPSAi
d2Via2l0LWxpbmUtbnVtYmVyLW91dGVyIjsKLSAgICAgICAgb3V0ZXJTcGFuLmFwcGVuZENoaWxk
KGlubmVyU3Bhbik7Ci0gICAgICAgIHRoaXMuX2xpbmVOdW1iZXJFbGVtZW50LmFwcGVuZENoaWxk
KG91dGVyU3Bhbik7Ci0gICAgfSBlbHNlCi0gICAgICAgIHRoaXMuX2xpbmVOdW1iZXJFbGVtZW50
LnRleHRDb250ZW50ID0gbGluZU51bWJlcnMuam9pbigiXG4iKTsKLSAgICB0aGlzLl9saW5lQ29u
dGVudEVsZW1lbnQudGV4dENvbnRlbnQgPSBsaW5lcy5qb2luKCJcbiIpOworCisgICAgdGhpcy5l
bGVtZW50LnRleHRDb250ZW50ID0gbGluZXMuam9pbigiXG4iKTsKKworICAgIC8vIFRoZSBsYXN0
IGVtcHR5IGxpbmUgd2lsbCBnZXQgc3dhbGxvd2VkIG90aGVyd2lzZS4KKyAgICBpZiAoIWxpbmVz
W2xpbmVzLmxlbmd0aCAtIDFdKQorICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7CiB9CiAKLVdlYkluc3BlY3Rvci5UZXh0Q2h1bmsu
cHJvdG90eXBlID0geworV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90eXBl
ID0gewogICAgIGFkZERlY29yYXRpb246IGZ1bmN0aW9uKGRlY29yYXRpb24pCiAgICAgewogICAg
ICAgICBpZiAodHlwZW9mIGRlY29yYXRpb24gPT09ICJzdHJpbmciKSB7CkBAIC02NzQsNyArOTM5
LDggQEAgV2ViSW5zcGVjdG9yLlRleHRDaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKCF0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50KSB7CiAgICAgICAgICAg
ICB0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZGl2Iik7Ci0gICAgICAgICAgICB0aGlzLl9saW5lQ29udGVudEVsZW1lbnQuYXBwZW5kQ2hp
bGQodGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudCk7CisgICAgICAgICAgICB0aGlzLmVs
ZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1kZWNvcmF0
aW9ucyI7CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50
LmRlY29yYXRpb25zRWxlbWVudCk7CiAgICAgICAgIH0KICAgICAgICAgdGhpcy5lbGVtZW50LmRl
Y29yYXRpb25zRWxlbWVudC5hcHBlbmRDaGlsZChkZWNvcmF0aW9uKTsKICAgICB9LApAQCAtNzAz
LDQ0ICs5NjksNDYgQEAgV2ViSW5zcGVjdG9yLlRleHRDaHVuay5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIHRoaXMuX2V4cGFuZGVkID0gZXhwYW5kZWQ7CiAKICAgICAgICAgaWYgKHRoaXMubGluZXND
b3VudCA9PT0gMSkgewotICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnNldEF0dHJpYnV0ZSh0
aGlzLnN0YXJ0TGluZSwgImxpbmUtcm93IiwgdGhpcy5lbGVtZW50KTsKICAgICAgICAgICAgIGlm
IChleHBhbmRlZCkKLSAgICAgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLl9wYWludExpbmVz
KHRoaXMuc3RhcnRMaW5lLCB0aGlzLnN0YXJ0TGluZSArIDEpOworICAgICAgICAgICAgICAgIHRo
aXMuX3RleHRWaWV3ZXIuX3BhaW50TGluZSh0aGlzLmVsZW1lbnQsIHRoaXMuc3RhcnRMaW5lKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChleHBhbmRlZCkg
eworICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRMaW5lUm93cyA9IFtdOwogICAgICAgICAgICAg
dmFyIHBhcmVudEVsZW1lbnQgPSB0aGlzLmVsZW1lbnQucGFyZW50RWxlbWVudDsKICAgICAgICAg
ICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YXJ0TGluZTsgaSA8IHRoaXMuc3RhcnRMaW5lICsgdGhp
cy5saW5lc0NvdW50OyArK2kpIHsKICAgICAgICAgICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMu
X2NyZWF0ZVJvdyhpKTsKLSAgICAgICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0QXR0cmli
dXRlKGksICJsaW5lLXJvdyIsIGxpbmVSb3cpOwogICAgICAgICAgICAgICAgIHBhcmVudEVsZW1l
bnQuaW5zZXJ0QmVmb3JlKGxpbmVSb3csIHRoaXMuZWxlbWVudCk7CisgICAgICAgICAgICAgICAg
dGhpcy5fZXhwYW5kZWRMaW5lUm93cy5wdXNoKGxpbmVSb3cpOworICAgICAgICAgICAgICAgIHRo
aXMuX3RleHRWaWV3ZXIuX3BhaW50TGluZShsaW5lUm93LCBpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50KTsKLQotICAg
ICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5fcGFpbnRMaW5lcyh0aGlzLnN0YXJ0TGluZSwgdGhp
cy5zdGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQpOwogICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgdmFyIGZpcnN0TGluZSA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUodGhpcy5z
dGFydExpbmUsICJsaW5lLXJvdyIpOwotICAgICAgICAgICAgdmFyIHBhcmVudEVsZW1lbnQgPSBm
aXJzdExpbmUucGFyZW50RWxlbWVudDsKLSAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuX3Jl
bGVhc2VMaW5lc0hpZ2hsaWdodCh0aGlzLnN0YXJ0TGluZSwgdGhpcy5zdGFydExpbmUgKyB0aGlz
LmxpbmVzQ291bnQpOwotCi0gICAgICAgICAgICBwYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0
aGlzLmVsZW1lbnQsIGZpcnN0TGluZSk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5z
dGFydExpbmU7IGkgPCB0aGlzLnN0YXJ0TGluZSArIHRoaXMubGluZXNDb3VudDsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRl
KGksICJsaW5lLXJvdyIpOwotICAgICAgICAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5yZW1vdmVB
dHRyaWJ1dGUoaSwgImxpbmUtcm93Iik7Ci0gICAgICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdl
ci5fY2FjaGVkUm93cy5wdXNoKGxpbmVSb3cpOwotICAgICAgICAgICAgICAgIHBhcmVudEVsZW1l
bnQucmVtb3ZlQ2hpbGQobGluZVJvdyk7CisgICAgICAgICAgICB2YXIgZWxlbWVudEluc2VydGVk
ID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2V4cGFuZGVk
TGluZVJvd3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgbGluZVJvdyA9IHRo
aXMuX2V4cGFuZGVkTGluZVJvd3NbaV07CisgICAgICAgICAgICAgICAgdmFyIHBhcmVudEVsZW1l
bnQgPSBsaW5lUm93LnBhcmVudEVsZW1lbnQ7CisgICAgICAgICAgICAgICAgaWYgKHBhcmVudEVs
ZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50SW5zZXJ0ZWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRJbnNlcnRlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmVsZW1lbnQsIGxp
bmVSb3cpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
X3RleHRWaWV3ZXIuX3JlbGVhc2VMaW5lc0hpZ2hsaWdodChsaW5lUm93KTsKKyAgICAgICAgICAg
ICAgICAgICAgcGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChsaW5lUm93KTsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fZXhwYW5kZWRM
aW5lUm93czsKICAgICAgICAgfQogICAgIH0sCiAKICAgICBnZXQgaGVpZ2h0KCkKICAgICB7Ci0g
ICAgICAgIGlmICghdGhpcy5fZXhwYW5kZWQpCisgICAgICAgIGlmICghdGhpcy5fZXhwYW5kZWRM
aW5lUm93cykKICAgICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0Owog
ICAgICAgICB2YXIgcmVzdWx0ID0gMDsKLSAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhcnRM
aW5lOyBpIDwgdGhpcy5zdGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQ7ICsraSkgewotICAgICAg
ICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGksICJsaW5l
LXJvdyIpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2V4cGFuZGVkTGluZVJv
d3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fZXhwYW5k
ZWRMaW5lUm93c1tpXTsKICAgICAgICAgICAgIHJlc3VsdCArPSBsaW5lUm93Lm9mZnNldEhlaWdo
dDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNzQ4LDI2ICsxMDE2LDIx
IEBAIFdlYkluc3BlY3Rvci5UZXh0Q2h1bmsucHJvdG90eXBlID0gewogCiAgICAgX2NyZWF0ZVJv
dzogZnVuY3Rpb24obGluZU51bWJlcikKICAgICB7Ci0gICAgICAgIHZhciBjYWNoZWRSb3dzID0g
dGhpcy5fdGV4dFZpZXdlci5fY2FjaGVkUm93czsKLSAgICAgICAgaWYgKGNhY2hlZFJvd3MubGVu
Z3RoKSB7Ci0gICAgICAgICAgICB2YXIgbGluZVJvdyA9IGNhY2hlZFJvd3NbY2FjaGVkUm93cy5s
ZW5ndGggLSAxXTsKLSAgICAgICAgICAgIGNhY2hlZFJvd3MubGVuZ3RoLS07Ci0gICAgICAgICAg
ICB2YXIgbGluZU51bWJlckVsZW1lbnQgPSBsaW5lUm93LmZpcnN0Q2hpbGQ7Ci0gICAgICAgICAg
ICB2YXIgbGluZUNvbnRlbnRFbGVtZW50ID0gbGluZVJvdy5sYXN0Q2hpbGQ7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICB2YXIgbGluZVJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
InRyIik7Ci0KLSAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyRWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInRkIik7Ci0gICAgICAgICAgICBsaW5lTnVtYmVyRWxlbWVudC5jbGFzc05h
bWUgPSAid2Via2l0LWxpbmUtbnVtYmVyIjsKLSAgICAgICAgICAgIGxpbmVSb3cuYXBwZW5kQ2hp
bGQobGluZU51bWJlckVsZW1lbnQpOwotCi0gICAgICAgICAgICB2YXIgbGluZUNvbnRlbnRFbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAgICAgICAgIGxpbmVDb250
ZW50RWxlbWVudC5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtY29udGVudCI7Ci0gICAgICAgICAg
ICBsaW5lUm93LmFwcGVuZENoaWxkKGxpbmVDb250ZW50RWxlbWVudCk7Ci0gICAgICAgIH0KKyAg
ICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl90ZXh0Vmlld2VyLl9jYWNoZWRSb3dzLnBvcCgpIHx8
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICBsaW5lUm93LmxpbmVOdW1i
ZXIgPSBsaW5lTnVtYmVyOwotICAgICAgICBsaW5lTnVtYmVyRWxlbWVudC50ZXh0Q29udGVudCA9
IGxpbmVOdW1iZXIgKyAxOwotICAgICAgICBsaW5lQ29udGVudEVsZW1lbnQudGV4dENvbnRlbnQg
PSB0aGlzLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgbGluZVJvdy5jbGFz
c05hbWUgPSAid2Via2l0LWxpbmUtY29udGVudCI7CisgICAgICAgIGxpbmVSb3cudGV4dENvbnRl
bnQgPSB0aGlzLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgaWYgKCFsaW5l
Um93LnRleHRDb250ZW50KQorICAgICAgICAgICAgbGluZVJvdy5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJiciIpKTsKICAgICAgICAgcmV0dXJuIGxpbmVSb3c7CisgICAgfSwK
KworICAgIGdldEV4cGFuZGVkTGluZVJvdzogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7Cisg
ICAgICAgIGlmICghdGhpcy5fZXhwYW5kZWQgfHwgbGluZU51bWJlciA8IHRoaXMuc3RhcnRMaW5l
IHx8IGxpbmVOdW1iZXIgPj0gdGhpcy5zdGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgaWYgKCF0aGlzLl9leHBhbmRlZExpbmVSb3dz
KQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudDsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X2V4cGFuZGVkTGluZVJvd3NbbGluZU51bWJlciAtIHRoaXMuc3RhcnRMaW5lXTsKICAgICB9CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRWaWV3
ZXIuY3NzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0Vmlld2VyLmNz
cwppbmRleCBiZWU5ZmU1YzM5NTBhZDA0ODM5Zjc5YTA1YjgzYmIwNjllZTQ0NDMxLi41NDk1N2I5
YTBlZmExZWI0ODY5NDk4MDlkZTIzZTgyNTNkYzZiMzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRWaWV3ZXIuY3NzCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdGV4dFZpZXdlci5jc3MKQEAgLTksMTIgKzksMzQgQEAK
IH0KIAogLnRleHQtZWRpdG9yLWxpbmVzIHsKLSAgICBib3JkZXI6IDA7Ci0gICAgLXdlYmtpdC1i
b3JkZXItaG9yaXpvbnRhbC1zcGFjaW5nOiAwOwotICAgIC13ZWJraXQtYm9yZGVyLXZlcnRpY2Fs
LXNwYWNpbmc6IDA7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMDsKKyAgICBs
ZWZ0OiAwOworICAgIGJvdHRvbTogMDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIC13ZWJr
aXQtdXNlci1zZWxlY3Q6IG5vbmU7Cit9CisKKy50ZXh0LWVkaXRvci1jb250ZW50cyB7CisgICAg
cG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMDsKKyAgICBsZWZ0OiAwOworICAgIHJpZ2h0
OiAwOworICAgIGJvdHRvbTogMDsKKyAgICBvdmVyZmxvdzogYXV0bzsKICAgICAtd2Via2l0LXVz
ZXItc2VsZWN0OiB0ZXh0OwogfQogCisudGV4dC1lZGl0b3ItZWRpdGFibGUgeworICAgIC13ZWJr
aXQtdXNlci1tb2RpZnk6IHJlYWQtd3JpdGUtcGxhaW50ZXh0LW9ubHk7Cit9CisKKy53ZWJraXQt
bGluZS1kZWNvcmF0aW9ucyB7CisgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CisgICAgLXdlYmtp
dC11c2VyLXNlbGVjdDogbm9uZTsKKyAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHk7
Cit9CisKIC53ZWJraXQtaHRtbC1tZXNzYWdlLWJ1YmJsZSB7CiAgICAgLXdlYmtpdC1ib3gtc2hh
ZG93OiBibGFjayAwcHggMnB4IDVweDsKICAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDlweDsK
QEAgLTYzLDcgKzg1LDYgQEAKICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICB2ZXJ0aWNhbC1h
bGlnbjogdG9wOwogICAgIHdvcmQtYnJlYWs6IG5vcm1hbDsKLSAgICAtd2Via2l0LXVzZXItc2Vs
ZWN0OiBub25lOwogICAgIHBhZGRpbmctcmlnaHQ6IDRweDsKICAgICBwYWRkaW5nLWxlZnQ6IDZw
eDsKIH0KQEAgLTg1LDEyICsxMDYsNiBAQAogICAgIG1hcmdpbi1yaWdodDogLTEwcHg7CiB9CiAK
LS53ZWJraXQtbGluZS1jb250ZW50IHsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBwYWRkaW5nLWxl
ZnQ6IDJweDsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwotfQotCiAud2Via2l0LWJyZWFrcG9p
bnQgLndlYmtpdC1saW5lLW51bWJlci1vdXRlciB7CiAgICAgY29sb3I6IHdoaXRlOwogICAgIGJv
cmRlci13aWR0aDogMCAxNHB4IDBweCAycHg7CkBAIC0xMzYsMjEgKzE1MSwyMSBAQAogICAgIG9w
YWNpdHk6IDAuMzsKIH0KIAotLndlYmtpdC1leGVjdXRpb24tbGluZSAud2Via2l0LWxpbmUtY29u
dGVudCB7Cisud2Via2l0LWV4ZWN1dGlvbi1saW5lLndlYmtpdC1saW5lLWNvbnRlbnQgewogICAg
IGJhY2tncm91bmQtY29sb3I6IHJnYigxNzEsIDE5MSwgMjU0KTsKICAgICBvdXRsaW5lOiAxcHgg
c29saWQgcmdiKDY0LCAxMTUsIDI0NCk7CiB9CiAKLS5kaWZmLWNvbnRhaW5lciAud2Via2l0LWFk
ZGVkLWxpbmUgLndlYmtpdC1saW5lLWNvbnRlbnQgeworLmRpZmYtY29udGFpbmVyIC53ZWJraXQt
YWRkZWQtbGluZS53ZWJraXQtbGluZS1jb250ZW50IHsKICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBy
Z2IoMjIwLCAyNTUsIDIyMCk7CiB9CiAKLS5kaWZmLWNvbnRhaW5lciAud2Via2l0LXJlbW92ZWQt
bGluZSAud2Via2l0LWxpbmUtY29udGVudCB7CisuZGlmZi1jb250YWluZXIgLndlYmtpdC1yZW1v
dmVkLWxpbmUud2Via2l0LWxpbmUtY29udGVudCB7CiAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdi
KDI1NSwgMjIwLCAyMjApOwogICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwogfQog
Ci0uZGlmZi1jb250YWluZXIgLndlYmtpdC1jaGFuZ2VkLWxpbmUgLndlYmtpdC1saW5lLWNvbnRl
bnQgeworLmRpZmYtY29udGFpbmVyIC53ZWJraXQtY2hhbmdlZC1saW5lLndlYmtpdC1saW5lLWNv
bnRlbnQgewogICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyMjAsIDIyMCwgMjU1KTsKIH0KIApA
QCAtMTY0LDcgKzE3OSw3IEBACiAgICAgY29sb3I6IGJsYWNrOwogfQogCi0ud2Via2l0LWhpZ2hs
aWdodGVkLWxpbmUgLndlYmtpdC1saW5lLWNvbnRlbnQgeworLndlYmtpdC1oaWdobGlnaHRlZC1s
aW5lLndlYmtpdC1saW5lLWNvbnRlbnQgewogICAgIC13ZWJraXQtYW5pbWF0aW9uOiAiZmFkZW91
dCIgMnMgMHM7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80907</attachid>
            <date>2011-02-02 03:12:38 -0800</date>
            <delta_ts>2011-02-02 04:58:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53299-20110202141231.patch</filename>
            <type>text/plain</type>
            <size>57057</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwZjY5MDBhZGVhMmFlMzRhZDFiZmQyZWZmN2ZhY2NkMDI1MTNlMTI5Li4y
ZWE2ZmIzNzc0NDlmOWYzMDIyOTA3MWQyMGVmNWZhOTI4YzQ0YWQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsOTggQEAKKzIwMTEtMDItMDEgIEFuZHJleSBBZGFpa2luICA8YWFuZHJleUBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdl
YiBJbnNwZWN0b3I6IFVzZSBESVZzIGluc3RlYWQgb2YgVEFCTEUgaW4gVGV4dFZpZXdlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMyOTkKKworICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9jcmVhdGVUZXh0Vmlld2VyKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX21vdXNlRG93bik6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRWaWV3ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJv
dG90eXBlLnNldCBtaW1lVHlwZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5w
cm90b3R5cGUucmV2ZWFsTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5w
cm90b3R5cGUuYWRkRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdl
ci5wcm90b3R5cGUucmVtb3ZlRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4
dFZpZXdlci5wcm90b3R5cGUubWFya0FuZFJldmVhbFJhbmdlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5oaWdobGlnaHRMaW5lKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5jbGVhckxpbmVIaWdobGlnaHQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLmZyZWVDYWNoZWRFbGVtZW50cyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuX2hhbmRsZUtleURv
d24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLmVkaXRMaW5l
LmZpbmlzaEVkaXRpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlLmVkaXRMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlw
ZS5iZWdpblVwZGF0ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlLmVuZFVwZGF0ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlLnJlc2l6ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUu
X3RleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlw
ZS5fdXBkYXRlUGFuZWxPZmZzZXRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2Vy
LnByb3RvdHlwZS5fc3luY1Njcm9sbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdl
ci5wcm90b3R5cGUuX3N5bmNEZWNvcmF0aW9uc0ZvckxpbmUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLnNldCBzeW5jU2Nyb2xsTGlzdGVuZXIpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLmdldCB0
ZXh0TW9kZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwu
cHJvdG90eXBlLmFkZERlY29yYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLnJlbW92ZURlY29yYXRpb24pOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLnJldmVhbExpbmUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLm1h
a2VMaW5lQUNodW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBh
bmVsLnByb3RvdHlwZS50ZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuYmVnaW5VcGRhdGVzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5lbmRVcGRhdGVzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5yZXNp
emUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90
eXBlLl9zY3JvbGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFu
ZWwucHJvdG90eXBlLl9zY2hlZHVsZVJlcGFpbnRBbGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLl9idWlsZENodW5rcyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX3JlcGFpbnRB
bGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90
eXBlLl9jaHVua051bWJlckZvckxpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLl9jaHVua0ZvckxpbmUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvckd1dHRlclBhbmVsLnByb3RvdHlwZS5mcmVlQ2FjaGVkRWxlbWVudHMpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbC5wcm90b3R5cGUuX2NyZWF0ZU5l
d0NodW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFuZWwucHJv
dG90eXBlLl9leHBhbmRDaHVua3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JH
dXR0ZXJDaHVuayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5r
LnByb3RvdHlwZS5nZXQgZXhwYW5kZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JHdXR0ZXJDaHVuay5wcm90b3R5cGUuc2V0IGV4cGFuZGVkKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsucHJvdG90eXBlLmdldCBoZWlnaHQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuay5wcm90b3R5cGUuX2NyZWF0ZVJv
dyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuc2V0IHN5bmNEZWNv
cmF0aW9uc0ZvckxpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFu
ZWwucHJvdG90eXBlLnNldCBtaW1lVHlwZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvck1haW5QYW5lbC5wcm90b3R5cGUubWFya0FuZFJldmVhbFJhbmdlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5oaWdobGlnaHRMaW5lKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5jbGVh
ckxpbmVIaWdobGlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFu
ZWwucHJvdG90eXBlLmZyZWVDYWNoZWRFbGVtZW50cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2J1aWxkQ2h1bmtzKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fY3JlYXRlTmV3Q2h1bmsp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9l
eHBhbmRDaHVua3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwu
cHJvdG90eXBlLl9oaWdobGlnaHREYXRhUmVhZHkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9wYWludExpbmVzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcGFpbnRMaW5lKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcmVsZWFzZUxp
bmVzSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVs
LnByb3RvdHlwZS5fZ2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcmVzdG9yZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3NlbGVjdGlvblRvUG9zaXRp
b24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBl
Ll9wb3NpdGlvblRvU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
TWFpblBhbmVsLnByb3RvdHlwZS5fYXBwZW5kVGV4dE5vZGUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9oYW5kbGVEb21VcGRhdGVzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5hZGREZWNvcmF0aW9uKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5zZXQgZXhw
YW5kZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90
eXBlLmdldCBoZWlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1
bmsucHJvdG90eXBlLmdldEV4cGFuZGVkTGluZVJvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUuX2NyZWF0ZVJvdyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvdGV4dFZpZXdlci5jc3M6
CisgICAgICAgICgudGV4dC1lZGl0b3ItbGluZXMpOgorICAgICAgICAoLnRleHQtZWRpdG9yLWNv
bnRlbnRzKToKKyAgICAgICAgKC50ZXh0LWVkaXRvci1lZGl0YWJsZSk6CisgICAgICAgICgud2Vi
a2l0LWxpbmUtZGVjb3JhdGlvbnMpOgorICAgICAgICAoLndlYmtpdC1saW5lLW51bWJlcik6Cisg
ICAgICAgICgud2Via2l0LWV4ZWN1dGlvbi1saW5lLndlYmtpdC1saW5lLWNvbnRlbnQpOgorICAg
ICAgICAoLmRpZmYtY29udGFpbmVyIC53ZWJraXQtYWRkZWQtbGluZS53ZWJraXQtbGluZS1jb250
ZW50KToKKyAgICAgICAgKC5kaWZmLWNvbnRhaW5lciAud2Via2l0LXJlbW92ZWQtbGluZS53ZWJr
aXQtbGluZS1jb250ZW50KToKKyAgICAgICAgKC5kaWZmLWNvbnRhaW5lciAud2Via2l0LWNoYW5n
ZWQtbGluZS53ZWJraXQtbGluZS1jb250ZW50KToKKyAgICAgICAgKC53ZWJraXQtaGlnaGxpZ2h0
ZWQtbGluZS53ZWJraXQtbGluZS1jb250ZW50KToKKwogMjAxMS0wMS0yNSAgTmlrb2xhcyBaaW1t
ZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaXJr
IFNjaHVsemUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZUZyYW1lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3Vy
Y2VGcmFtZS5qcwppbmRleCBjZTM1MzFmYWFmMjgwZjQ3YjJlNTkzMDc3ODg1YTI1NzQ1MTQ0Zjlk
Li5kYmY5NDdmYWFiZmQzNzgwNjRjNTJjMzc1OWZiM2IwMGI4NmFkNmQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKQEAgLTIwOCw5
ICsyMDgsNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAg
ICB0aGlzLl90ZXh0Vmlld2VyLmVuZFVwZGF0ZXMoKTsKIAogICAgICAgICBXZWJJbnNwZWN0b3Iu
ZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVs
LkV2ZW50cy5CcmVha3BvaW50QWRkZWQsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7Ci0K
LSAgICAgICAgaWYgKHRoaXMuX2NhbkVkaXRTY3JpcHRzKQotICAgICAgICAgICAgdGhpcy5fdGV4
dFZpZXdlci5lZGl0Q2FsbGJhY2sgPSB0aGlzLl9lZGl0TGluZS5iaW5kKHRoaXMpOwogICAgIH0s
CiAKICAgICBfc2V0VGV4dFZpZXdlckRlY29yYXRpb25zOiBmdW5jdGlvbigpCkBAIC01MjYsNyAr
NTIzLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAg
dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3
ZWJraXQtbGluZS1udW1iZXIiKTsKICAgICAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRhcmdldC5wYXJlbnRF
bGVtZW50LmxpbmVOdW1iZXI7CisgICAgICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRh
cmdldC5saW5lTnVtYmVyOwogICAgICAgICB2YXIgb3JpZ2luYWxMaW5lTnVtYmVyID0gdGhpcy5f
Zm9ybWF0dGVyLmZvcm1hdHRlZExpbmVOdW1iZXJUb09yaWdpbmFsTGluZU51bWJlcih0ZXh0Vmll
d2VyTGluZU51bWJlcik7CiAKICAgICAgICAgdmFyIGNvbnRleHRNZW51ID0gbmV3IFdlYkluc3Bl
Y3Rvci5Db250ZXh0TWVudSgpOwpAQCAtNTkyLDcgKzU4OSw3IEBAIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQu
ZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWxpbmUtbnVtYmVyIik7CiAgICAg
ICAgIGlmICghdGFyZ2V0KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgb3JpZ2lu
YWxMaW5lTnVtYmVyID0gdGhpcy5fZm9ybWF0dGVyLmZvcm1hdHRlZExpbmVOdW1iZXJUb09yaWdp
bmFsTGluZU51bWJlcih0YXJnZXQucGFyZW50RWxlbWVudC5saW5lTnVtYmVyKTsKKyAgICAgICAg
dmFyIG9yaWdpbmFsTGluZU51bWJlciA9IHRoaXMuX2Zvcm1hdHRlci5mb3JtYXR0ZWRMaW5lTnVt
YmVyVG9PcmlnaW5hbExpbmVOdW1iZXIodGFyZ2V0LmxpbmVOdW1iZXIpOwogCiAgICAgICAgIHZh
ciBicmVha3BvaW50ID0gdGhpcy5fZmluZEJyZWFrcG9pbnQob3JpZ2luYWxMaW5lTnVtYmVyKTsK
ICAgICAgICAgaWYgKGJyZWFrcG9pbnQpIHsKQEAgLTg1NSwxMSArODUyLDEwIEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICghUHJlZmVyZW5jZXMu
Y2FuRWRpdFNjcmlwdFNvdXJjZSB8fCAhdGhpcy5faXNTY3JpcHQpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JT
ZWxmV2l0aE5vZGVOYW1lKCJURCIpOwotICAgICAgICBpZiAoIXRhcmdldCB8fCB0YXJnZXQucGFy
ZW50RWxlbWVudC5maXJzdENoaWxkID09PSB0YXJnZXQpCisgICAgICAgIHZhciBsaW5lUm93ID0g
ZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoIndlYmtpdC1saW5lLWNv
bnRlbnQiKTsKKyAgICAgICAgaWYgKCFsaW5lUm93KQogICAgICAgICAgICAgcmV0dXJuOyAgLy8g
RG8gbm90IHRyaWdnZXIgZWRpdGluZyBmcm9tIGxpbmUgbnVtYmVycy4KIAotICAgICAgICB2YXIg
bGluZVJvdyA9IHRhcmdldC5wYXJlbnRFbGVtZW50OwogICAgICAgICB2YXIgbGluZU51bWJlciA9
IGxpbmVSb3cubGluZU51bWJlcjsKICAgICAgICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNl
SURGb3JMaW5lKGxpbmVOdW1iZXIpOwogICAgICAgICBpZiAoIXNvdXJjZUlEKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzCmluZGV4IGVhMzY1
MTMyNTlkNTcxZTlhM2M0YTk3NzMzNjI1NDlkODFhNGMzNDcuLjViM2U3YWY3YWZkZTVmYjBlYjgy
Njk0NjkwOWZlYjA0MjJhZTA1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1RleHRWaWV3ZXIuanMKQEAgLTMyLDM3ICszMiwyMSBAQAogV2ViSW5zcGVjdG9y
LlRleHRWaWV3ZXIgPSBmdW5jdGlvbih0ZXh0TW9kZWwsIHBsYXRmb3JtLCB1cmwpCiB7CiAgICAg
dGhpcy5fdGV4dE1vZGVsID0gdGV4dE1vZGVsOwotICAgIHRoaXMuX3RleHRNb2RlbC5jaGFuZ2VM
aXN0ZW5lciA9IHRoaXMuX2J1aWxkQ2h1bmtzLmJpbmQodGhpcyk7Ci0gICAgdGhpcy5faGlnaGxp
Z2h0ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JIaWdobGlnaHRlcih0aGlzLl90ZXh0
TW9kZWwsIHRoaXMuX2hpZ2hsaWdodERhdGFSZWFkeS5iaW5kKHRoaXMpKTsKKyAgICB0aGlzLl90
ZXh0TW9kZWwuY2hhbmdlTGlzdGVuZXIgPSB0aGlzLl90ZXh0Q2hhbmdlZC5iaW5kKHRoaXMpOwog
CiAgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAg
dGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJ0ZXh0LWVkaXRvciBtb25vc3BhY2UiOwotICAgIHRo
aXMuZWxlbWVudC50YWJJbmRleCA9IDA7Ci0KLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigic2Nyb2xsIiwgdGhpcy5fc2Nyb2xsLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlz
LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuX2hhbmRsZUtleURvd24u
YmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJi
ZWZvcmVjb3B5IiwgdGhpcy5fYmVmb3JlQ29weS5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhp
cy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvcHkiLCB0aGlzLl9jb3B5LmJpbmQodGhpcyks
IGZhbHNlKTsKIAotICAgIHRoaXMuX3VybCA9IHVybDsKLQotICAgIHRoaXMuX2xpbmVzQ29udGFp
bmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7Ci0gICAgdGhpcy5f
bGluZXNDb250YWluZXJFbGVtZW50LmNsYXNzTmFtZSA9ICJ0ZXh0LWVkaXRvci1saW5lcyI7Ci0g
ICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgiY2VsbHNwYWNpbmci
LCAwKTsKLSAgICB0aGlzLl9saW5lc0NvbnRhaW5lckVsZW1lbnQuc2V0QXR0cmlidXRlKCJjZWxs
cGFkZGluZyIsIDApOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9saW5lc0Nv
bnRhaW5lckVsZW1lbnQpOwotCi0gICAgdGhpcy5fZGVmYXVsdENodW5rU2l6ZSA9IDUwOwotICAg
IHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsID0gMDsKLQotICAgIHRoaXMuZnJlZUNhY2hlZEVs
ZW1lbnRzKCk7Ci0gICAgdGhpcy5fYnVpbGRDaHVua3MoKTsKKyAgICB0aGlzLl9tYWluUGFuZWwg
PSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwodGhpcy5fdGV4dE1vZGVsLCB1
cmwsIHRoaXMuX3N5bmNTY3JvbGwuYmluZCh0aGlzKSwgdGhpcy5fc3luY0RlY29yYXRpb25zRm9y
TGluZS5iaW5kKHRoaXMpKTsKKyAgICB0aGlzLl9ndXR0ZXJQYW5lbCA9IG5ldyBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvckd1dHRlclBhbmVsKHRoaXMuX3RleHRNb2RlbCk7CisgICAgdGhpcy5lbGVt
ZW50LmFwcGVuZENoaWxkKHRoaXMuX21haW5QYW5lbC5lbGVtZW50KTsKKyAgICB0aGlzLmVsZW1l
bnQuYXBwZW5kQ2hpbGQodGhpcy5fZ3V0dGVyUGFuZWwuZWxlbWVudCk7CiB9CiAKIFdlYkluc3Bl
Y3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAgICBzZXQgbWltZVR5cGUobWltZVR5cGUp
CiAgICAgewotICAgICAgICB0aGlzLl9oaWdobGlnaHRlci5taW1lVHlwZSA9IG1pbWVUeXBlOwor
ICAgICAgICB0aGlzLl9tYWluUGFuZWwubWltZVR5cGUgPSBtaW1lVHlwZTsKICAgICB9LAogCiAg
ICAgZ2V0IHRleHRNb2RlbCgpCkBAIC03Miw4NSArNTYsMTY2IEBAIFdlYkluc3BlY3Rvci5UZXh0
Vmlld2VyLnByb3RvdHlwZSA9IHsKIAogICAgIHJldmVhbExpbmU6IGZ1bmN0aW9uKGxpbmVOdW1i
ZXIpCiAgICAgewotICAgICAgICBpZiAobGluZU51bWJlciA+PSB0aGlzLl90ZXh0TW9kZWwubGlu
ZXNDb3VudCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgY2h1bmsgPSB0aGlz
Ll9tYWtlTGluZUFDaHVuayhsaW5lTnVtYmVyKTsKLSAgICAgICAgY2h1bmsuZWxlbWVudC5zY3Jv
bGxJbnRvVmlld0lmTmVlZGVkKCk7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5yZXZlYWxMaW5l
KGxpbmVOdW1iZXIpOwogICAgIH0sCiAKICAgICBhZGREZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5l
TnVtYmVyLCBkZWNvcmF0aW9uKQogICAgIHsKLSAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fbWFr
ZUxpbmVBQ2h1bmsobGluZU51bWJlcik7Ci0gICAgICAgIGNodW5rLmFkZERlY29yYXRpb24oZGVj
b3JhdGlvbik7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5hZGREZWNvcmF0aW9uKGxpbmVOdW1i
ZXIsIGRlY29yYXRpb24pOworICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC5hZGREZWNvcmF0aW9u
KGxpbmVOdW1iZXIsIGRlY29yYXRpb24pOwogICAgIH0sCiAKICAgICByZW1vdmVEZWNvcmF0aW9u
OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0aW9uKQogICAgIHsKLSAgICAgICAgdmFyIGNo
dW5rID0gdGhpcy5fbWFrZUxpbmVBQ2h1bmsobGluZU51bWJlcik7Ci0gICAgICAgIGNodW5rLnJl
bW92ZURlY29yYXRpb24oZGVjb3JhdGlvbik7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5yZW1v
dmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRpb24pOworICAgICAgICB0aGlzLl9ndXR0
ZXJQYW5lbC5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRpb24pOwogICAgIH0s
CiAKICAgICBtYXJrQW5kUmV2ZWFsUmFuZ2U6IGZ1bmN0aW9uKHJhbmdlKQogICAgIHsKLSAgICAg
ICAgaWYgKHRoaXMuX3JhbmdlVG9NYXJrKSB7Ci0gICAgICAgICAgICB2YXIgbWFya2VkTGluZSA9
IHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0TGluZTsKLSAgICAgICAgICAgIHRoaXMuX3JhbmdlVG9N
YXJrID0gbnVsbDsKLSAgICAgICAgICAgIHRoaXMuX3BhaW50TGluZXMobWFya2VkTGluZSwgbWFy
a2VkTGluZSArIDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJhbmdlKSB7Ci0gICAgICAg
ICAgICB0aGlzLl9yYW5nZVRvTWFyayA9IHJhbmdlOwotICAgICAgICAgICAgdGhpcy5yZXZlYWxM
aW5lKHJhbmdlLnN0YXJ0TGluZSk7Ci0gICAgICAgICAgICB0aGlzLl9wYWludExpbmVzKHJhbmdl
LnN0YXJ0TGluZSwgcmFuZ2Uuc3RhcnRMaW5lICsgMSk7Ci0gICAgICAgICAgICBpZiAodGhpcy5f
bWFya2VkUmFuZ2VFbGVtZW50KQotICAgICAgICAgICAgICAgIHRoaXMuX21hcmtlZFJhbmdlRWxl
bWVudC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRl
IHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudDsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLm1hcmtB
bmRSZXZlYWxSYW5nZShyYW5nZSk7CiAgICAgfSwKIAogICAgIGhpZ2hsaWdodExpbmU6IGZ1bmN0
aW9uKGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICB0aGlzLmNsZWFyTGluZUhpZ2hsaWdodCgp
OwotICAgICAgICB0aGlzLl9oaWdobGlnaHRlZExpbmUgPSBsaW5lTnVtYmVyOwotICAgICAgICB0
aGlzLnJldmVhbExpbmUobGluZU51bWJlcik7Ci0gICAgICAgIHZhciBjaHVuayA9IHRoaXMuX21h
a2VMaW5lQUNodW5rKGxpbmVOdW1iZXIpOwotICAgICAgICBjaHVuay5hZGREZWNvcmF0aW9uKCJ3
ZWJraXQtaGlnaGxpZ2h0ZWQtbGluZSIpOworICAgICAgICB0aGlzLl9tYWluUGFuZWwuaGlnaGxp
Z2h0TGluZShsaW5lTnVtYmVyKTsKICAgICB9LAogCiAgICAgY2xlYXJMaW5lSGlnaGxpZ2h0OiBm
dW5jdGlvbigpCiAgICAgewotICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2hpZ2hsaWdodGVkTGlu
ZSA9PT0gIm51bWJlciIpIHsKLSAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX21ha2VMaW5l
QUNodW5rKHRoaXMuX2hpZ2hsaWdodGVkTGluZSk7Ci0gICAgICAgICAgICBjaHVuay5yZW1vdmVE
ZWNvcmF0aW9uKCJ3ZWJraXQtaGlnaGxpZ2h0ZWQtbGluZSIpOwotICAgICAgICAgICAgZGVsZXRl
IHRoaXMuX2hpZ2hsaWdodGVkTGluZTsKLSAgICAgICAgfQorICAgICAgICB0aGlzLl9tYWluUGFu
ZWwuY2xlYXJMaW5lSGlnaGxpZ2h0KCk7CiAgICAgfSwKIAogICAgIGZyZWVDYWNoZWRFbGVtZW50
czogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdGhpcy5fY2FjaGVkU3BhbnMgPSBbXTsKLSAg
ICAgICAgdGhpcy5fY2FjaGVkVGV4dE5vZGVzID0gW107Ci0gICAgICAgIHRoaXMuX2NhY2hlZFJv
d3MgPSBbXTsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLmZyZWVDYWNoZWRFbGVtZW50cygpOwor
ICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC5mcmVlQ2FjaGVkRWxlbWVudHMoKTsKKyAgICB9LAor
CisgICAgZWRpdExpbmU6IGZ1bmN0aW9uKGxpbmVSb3csIGNhbGxiYWNrKQorICAgIHsKKyAgICAg
ICAgdGhpcy5fbWFpblBhbmVsLmVkaXRMaW5lKGxpbmVSb3csIGNhbGxiYWNrKTsKKyAgICB9LAor
CisgICAgYmVnaW5VcGRhdGVzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9tYWlu
UGFuZWwuYmVnaW5VcGRhdGVzKCk7CisgICAgICAgIHRoaXMuX2d1dHRlclBhbmVsLmJlZ2luVXBk
YXRlcygpOworICAgIH0sCisKKyAgICBlbmRVcGRhdGVzOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICB0aGlzLl9tYWluUGFuZWwuZW5kVXBkYXRlcygpOworICAgICAgICB0aGlzLl9ndXR0ZXJQ
YW5lbC5lbmRVcGRhdGVzKCk7CisgICAgfSwKKworICAgIHJlc2l6ZTogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLnJlc2l6ZSgpOworICAgICAgICB0aGlzLl9ndXR0
ZXJQYW5lbC5yZXNpemUoKTsKKyAgICAgICAgdGhpcy5fdXBkYXRlUGFuZWxPZmZzZXRzKCk7Cisg
ICAgfSwKKworICAgIC8vIFdlYkluc3BlY3Rvci5UZXh0TW9kZWwgbGlzdGVuZXIKKyAgICBfdGV4
dENoYW5nZWQ6IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSwgb2xkVGV4dCwgbmV3VGV4dCkK
KyAgICB7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC50ZXh0Q2hhbmdlZCgpOworICAgICAgICB0
aGlzLl9ndXR0ZXJQYW5lbC50ZXh0Q2hhbmdlZCgpOworICAgICAgICB0aGlzLl91cGRhdGVQYW5l
bE9mZnNldHMoKTsKKyAgICB9LAorCisgICAgX3VwZGF0ZVBhbmVsT2Zmc2V0czogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgdmFyIGxpbmVOdW1iZXJzV2lkdGggPSB0aGlzLl9ndXR0ZXJQYW5l
bC5lbGVtZW50Lm9mZnNldFdpZHRoOworICAgICAgICBpZiAobGluZU51bWJlcnNXaWR0aCkKKyAg
ICAgICAgICAgIHRoaXMuX21haW5QYW5lbC5lbGVtZW50LnN0eWxlLmxlZnQgPSAobGluZU51bWJl
cnNXaWR0aCArIDIpICsgInB4IjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5fbWFp
blBhbmVsLmVsZW1lbnQuc3R5bGUubGVmdCA9ICIiOyAvLyBVc2UgZGVmYXVsdCB2YWx1ZSBzZXQg
aW4gQ1NTLgorICAgIH0sCisKKyAgICBfc3luY1Njcm9sbDogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgLy8gQXN5bmMgY2FsbCBkdWUgdG8gcGVyZm9ybWFuY2UgcmVhc29ucy4KKyAgICAgICAg
c2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBtYWluRWxlbWVudCA9IHRo
aXMuX21haW5QYW5lbC5lbGVtZW50OworICAgICAgICAgICAgdmFyIGd1dHRlckVsZW1lbnQgPSB0
aGlzLl9ndXR0ZXJQYW5lbC5lbGVtZW50OworCisgICAgICAgICAgICAvLyBIYW5kbGUgaG9yaXpv
bnRhbCBzY3JvbGwgYmFyIGF0IHRoZSBib3R0b20gb2YgdGhlIG1haW4gcGFuZWwuCisgICAgICAg
ICAgICBpZiAoZ3V0dGVyRWxlbWVudC5vZmZzZXRIZWlnaHQgPiBtYWluRWxlbWVudC5jbGllbnRI
ZWlnaHQpCisgICAgICAgICAgICAgICAgZ3V0dGVyRWxlbWVudC5zdHlsZS5wYWRkaW5nQm90dG9t
ID0gKGd1dHRlckVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gbWFpbkVsZW1lbnQuY2xpZW50SGVpZ2h0
KSArICJweCI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ3V0dGVyRWxlbWVu
dC5zdHlsZS5wYWRkaW5nQm90dG9tID0gIiI7CisKKyAgICAgICAgICAgIGd1dHRlckVsZW1lbnQu
c2Nyb2xsVG9wID0gbWFpbkVsZW1lbnQuc2Nyb2xsVG9wOworICAgICAgICB9LmJpbmQodGhpcyks
IDApOworICAgIH0sCisKKyAgICBfc3luY0RlY29yYXRpb25zRm9yTGluZTogZnVuY3Rpb24obGlu
ZU51bWJlcikKKyAgICB7CisgICAgICAgIGlmIChsaW5lTnVtYmVyID49IHRoaXMuX3RleHRNb2Rl
bC5saW5lc0NvdW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBtYWluQ2h1
bmsgPSB0aGlzLl9tYWluUGFuZWwubWFrZUxpbmVBQ2h1bmsobGluZU51bWJlcik7CisgICAgICAg
IHZhciBndXR0ZXJDaHVuayA9IHRoaXMuX2d1dHRlclBhbmVsLm1ha2VMaW5lQUNodW5rKGxpbmVO
dW1iZXIpOworICAgICAgICBndXR0ZXJDaHVuay5lbGVtZW50LnN0eWxlLmhlaWdodCA9IG1haW5D
aHVuay5lbGVtZW50Lm9mZnNldEhlaWdodCArICJweCI7CisgICAgfQorfQorCitXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbCA9IGZ1bmN0aW9uKHRleHRNb2RlbCkKK3sKKyAgICB0
aGlzLl90ZXh0TW9kZWwgPSB0ZXh0TW9kZWw7CisKKyAgICB0aGlzLl9kZWZhdWx0Q2h1bmtTaXpl
ID0gNTA7CisgICAgdGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwgPSAwOworfQorCitXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUgPSB7CisgICAgZ2V0IHRleHRN
b2RlbCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdGV4dE1vZGVsOworICAgIH0sCisK
KyAgICByZXZlYWxMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYg
KGxpbmVOdW1iZXIgPj0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgdmFyIGNodW5rID0gdGhpcy5tYWtlTGluZUFDaHVuayhsaW5lTnVt
YmVyKTsKKyAgICAgICAgY2h1bmsuZWxlbWVudC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7Cisg
ICAgfSwKKworICAgIGFkZERlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRp
b24pCisgICAgeworICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLm1ha2VMaW5lQUNodW5rKGxpbmVO
dW1iZXIpOworICAgICAgICBjaHVuay5hZGREZWNvcmF0aW9uKGRlY29yYXRpb24pOworICAgIH0s
CisKKyAgICByZW1vdmVEZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0aW9u
KQorICAgIHsKKyAgICAgICAgdmFyIGNodW5rID0gdGhpcy5tYWtlTGluZUFDaHVuayhsaW5lTnVt
YmVyKTsKKyAgICAgICAgY2h1bmsucmVtb3ZlRGVjb3JhdGlvbihkZWNvcmF0aW9uKTsKKyAgICB9
LAorCisgICAgdGV4dENoYW5nZWQ6IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSwgb2xkVGV4
dCwgbmV3VGV4dCkKKyAgICB7CisgICAgICAgIHRoaXMuX2J1aWxkQ2h1bmtzKCk7CiAgICAgfSwK
IAogICAgIF9idWlsZENodW5rczogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdGhpcy5fbGlu
ZXNDb250YWluZXJFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgIHRoaXMuZWxlbWVu
dC5yZW1vdmVDaGlsZHJlbigpOwogCiAgICAgICAgIHRoaXMuX3RleHRDaHVua3MgPSBbXTsKICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudDsgaSAr
PSB0aGlzLl9kZWZhdWx0Q2h1bmtTaXplKSB7Ci0gICAgICAgICAgICB2YXIgY2h1bmsgPSBuZXcg
V2ViSW5zcGVjdG9yLlRleHRDaHVuayh0aGlzLCBpLCBpICsgdGhpcy5fZGVmYXVsdENodW5rU2l6
ZSk7CisgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9jcmVhdGVOZXdDaHVuayhpLCBpICsg
dGhpcy5fZGVmYXVsdENodW5rU2l6ZSk7CiAgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnB1
c2goY2h1bmspOwotICAgICAgICAgICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50LmFwcGVu
ZENoaWxkKGNodW5rLmVsZW1lbnQpOworICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENo
aWxkKGNodW5rLmVsZW1lbnQpOwogICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5faW5kZXhDaHVu
a3MoKTsKLSAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZXIucmVzZXQoKTsKICAgICAgICAgdGhpcy5f
cmVwYWludEFsbCgpOwogICAgIH0sCiAKLSAgICBfbWFrZUxpbmVBQ2h1bms6IGZ1bmN0aW9uKGxp
bmVOdW1iZXIpCisgICAgbWFrZUxpbmVBQ2h1bms6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAg
ewogICAgICAgICBpZiAoIXRoaXMuX3RleHRDaHVua3MpCiAgICAgICAgICAgICB0aGlzLl9idWls
ZENodW5rcygpOwpAQCAtMTYzLDMxICsyMjgsMzAgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIu
cHJvdG90eXBlID0gewogICAgICAgICB2YXIgd2FzRXhwYW5kZWQgPSBvbGRDaHVuay5leHBhbmRl
ZDsKICAgICAgICAgb2xkQ2h1bmsuZXhwYW5kZWQgPSBmYWxzZTsKIAotICAgICAgICB2YXIgaW5z
ZXJ0SW5kZXggPSBvbGRDaHVuay5jaHVua051bWJlciArIDE7CisgICAgICAgIHZhciBpbnNlcnRJ
bmRleCA9IGNodW5rTnVtYmVyICsgMTsKIAogICAgICAgICAvLyBQcmVmaXggY2h1bmsuCiAgICAg
ICAgIGlmIChsaW5lTnVtYmVyID4gb2xkQ2h1bmsuc3RhcnRMaW5lKSB7Ci0gICAgICAgICAgICB2
YXIgcHJlZml4Q2h1bmsgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRDaHVuayh0aGlzLCBvbGRDaHVu
ay5zdGFydExpbmUsIGxpbmVOdW1iZXIpOworICAgICAgICAgICAgdmFyIHByZWZpeENodW5rID0g
dGhpcy5fY3JlYXRlTmV3Q2h1bmsob2xkQ2h1bmsuc3RhcnRMaW5lLCBsaW5lTnVtYmVyKTsKICAg
ICAgICAgICAgIHRoaXMuX3RleHRDaHVua3Muc3BsaWNlKGluc2VydEluZGV4KyssIDAsIHByZWZp
eENodW5rKTsKLSAgICAgICAgICAgIHRoaXMuX2xpbmVzQ29udGFpbmVyRWxlbWVudC5pbnNlcnRC
ZWZvcmUocHJlZml4Q2h1bmsuZWxlbWVudCwgb2xkQ2h1bmsuZWxlbWVudCk7CisgICAgICAgICAg
ICB0aGlzLmVsZW1lbnQuaW5zZXJ0QmVmb3JlKHByZWZpeENodW5rLmVsZW1lbnQsIG9sZENodW5r
LmVsZW1lbnQpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gTGluZSBjaHVuay4KLSAgICAgICAg
dmFyIGxpbmVDaHVuayA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dENodW5rKHRoaXMsIGxpbmVOdW1i
ZXIsIGxpbmVOdW1iZXIgKyAxKTsKKyAgICAgICAgdmFyIGxpbmVDaHVuayA9IHRoaXMuX2NyZWF0
ZU5ld0NodW5rKGxpbmVOdW1iZXIsIGxpbmVOdW1iZXIgKyAxKTsKICAgICAgICAgdGhpcy5fdGV4
dENodW5rcy5zcGxpY2UoaW5zZXJ0SW5kZXgrKywgMCwgbGluZUNodW5rKTsKLSAgICAgICAgdGhp
cy5fbGluZXNDb250YWluZXJFbGVtZW50Lmluc2VydEJlZm9yZShsaW5lQ2h1bmsuZWxlbWVudCwg
b2xkQ2h1bmsuZWxlbWVudCk7CisgICAgICAgIHRoaXMuZWxlbWVudC5pbnNlcnRCZWZvcmUobGlu
ZUNodW5rLmVsZW1lbnQsIG9sZENodW5rLmVsZW1lbnQpOwogCiAgICAgICAgIC8vIFN1ZmZpeCBj
aHVuay4KICAgICAgICAgaWYgKG9sZENodW5rLnN0YXJ0TGluZSArIG9sZENodW5rLmxpbmVzQ291
bnQgPiBsaW5lTnVtYmVyICsgMSkgewotICAgICAgICAgICAgdmFyIHN1ZmZpeENodW5rID0gbmV3
IFdlYkluc3BlY3Rvci5UZXh0Q2h1bmsodGhpcywgbGluZU51bWJlciArIDEsIG9sZENodW5rLnN0
YXJ0TGluZSArIG9sZENodW5rLmxpbmVzQ291bnQpOworICAgICAgICAgICAgdmFyIHN1ZmZpeENo
dW5rID0gdGhpcy5fY3JlYXRlTmV3Q2h1bmsobGluZU51bWJlciArIDEsIG9sZENodW5rLnN0YXJ0
TGluZSArIG9sZENodW5rLmxpbmVzQ291bnQpOwogICAgICAgICAgICAgdGhpcy5fdGV4dENodW5r
cy5zcGxpY2UoaW5zZXJ0SW5kZXgsIDAsIHN1ZmZpeENodW5rKTsKLSAgICAgICAgICAgIHRoaXMu
X2xpbmVzQ29udGFpbmVyRWxlbWVudC5pbnNlcnRCZWZvcmUoc3VmZml4Q2h1bmsuZWxlbWVudCwg
b2xkQ2h1bmsuZWxlbWVudCk7CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuaW5zZXJ0QmVmb3Jl
KHN1ZmZpeENodW5rLmVsZW1lbnQsIG9sZENodW5rLmVsZW1lbnQpOwogICAgICAgICB9CiAKICAg
ICAgICAgLy8gUmVtb3ZlIGVuY2xvc2luZyBjaHVuay4KLSAgICAgICAgdGhpcy5fdGV4dENodW5r
cy5zcGxpY2Uob2xkQ2h1bmsuY2h1bmtOdW1iZXIsIDEpOwotICAgICAgICB0aGlzLl9saW5lc0Nv
bnRhaW5lckVsZW1lbnQucmVtb3ZlQ2hpbGQob2xkQ2h1bmsuZWxlbWVudCk7Ci0gICAgICAgIHRo
aXMuX2luZGV4Q2h1bmtzKCk7CisgICAgICAgIHRoaXMuX3RleHRDaHVua3Muc3BsaWNlKGNodW5r
TnVtYmVyLCAxKTsKKyAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkKG9sZENodW5rLmVs
ZW1lbnQpOwogCiAgICAgICAgIGlmICh3YXNFeHBhbmRlZCkgewogICAgICAgICAgICAgaWYgKHBy
ZWZpeENodW5rKQpAQCAtMjAwLDE5ICsyNjQsMzA2IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2Vy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIGxpbmVDaHVuazsKICAgICB9LAogCi0gICAg
X2luZGV4Q2h1bmtzOiBmdW5jdGlvbigpCisgICAgX3Njcm9sbDogZnVuY3Rpb24oKQogICAgIHsK
LSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytp
KQotICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rc1tpXS5jaHVua051bWJlciA9IGk7CisgICAg
ICAgIHRoaXMuX3NjaGVkdWxlUmVwYWludEFsbCgpOworICAgICAgICBpZiAodGhpcy5fc3luY1Nj
cm9sbExpc3RlbmVyKQorICAgICAgICAgICAgdGhpcy5fc3luY1Njcm9sbExpc3RlbmVyKCk7CiAg
ICAgfSwKIAotICAgIF9zY3JvbGw6IGZ1bmN0aW9uKCkKKyAgICBfc2NoZWR1bGVSZXBhaW50QWxs
OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB2YXIgc2Nyb2xsVG9wID0gdGhpcy5lbGVtZW50
LnNjcm9sbFRvcDsKLSAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
IGlmIChzY3JvbGxUb3AgPT09IHRoaXMuZWxlbWVudC5zY3JvbGxUb3ApCi0gICAgICAgICAgICAg
ICAgdGhpcy5fcmVwYWludEFsbCgpOwotICAgICAgICB9LmJpbmQodGhpcyksIDUwKTsKKyAgICAg
ICAgaWYgKHRoaXMuX3JlcGFpbnRBbGxUaW1lcikKKyAgICAgICAgICAgIGNsZWFyVGltZW91dCh0
aGlzLl9yZXBhaW50QWxsVGltZXIpOworICAgICAgICB0aGlzLl9yZXBhaW50QWxsVGltZXIgPSBz
ZXRUaW1lb3V0KHRoaXMuX3JlcGFpbnRBbGwuYmluZCh0aGlzKSwgNTApOworICAgIH0sCisKKyAg
ICBiZWdpblVwZGF0ZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3BhaW50Q29h
bGVzY2luZ0xldmVsKys7CisgICAgfSwKKworICAgIGVuZFVwZGF0ZXM6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsLS07CisgICAgICAgIGlmICgh
dGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwpCisgICAgICAgICAgICB0aGlzLl9yZXBhaW50QWxs
KCk7CisgICAgfSwKKworICAgIF9jaHVua051bWJlckZvckxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1i
ZXIpCisgICAgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RleHRDaHVua3Mu
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBsaW5lID0gdGhpcy5fdGV4dENodW5rc1tp
XS5zdGFydExpbmU7CisgICAgICAgICAgICBpZiAobGluZU51bWJlciA+PSBsaW5lICYmIGxpbmVO
dW1iZXIgPCBsaW5lICsgdGhpcy5fdGV4dENodW5rc1tpXS5saW5lc0NvdW50KQorICAgICAgICAg
ICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl90ZXh0Q2h1
bmtzLmxlbmd0aCAtIDE7CisgICAgfSwKKworICAgIF9jaHVua0ZvckxpbmU6IGZ1bmN0aW9uKGxp
bmVOdW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdGV4dENodW5rc1t0aGlzLl9j
aHVua051bWJlckZvckxpbmUobGluZU51bWJlcildOworICAgIH0sCisKKyAgICBfcmVwYWludEFs
bDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgZGVsZXRlIHRoaXMuX3JlcGFpbnRBbGxUaW1l
cjsKKworICAgICAgICBpZiAodGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgaWYgKCF0aGlzLl90ZXh0Q2h1bmtzKQorICAgICAgICAgICAg
dGhpcy5fYnVpbGRDaHVua3MoKTsKKworICAgICAgICB2YXIgdmlzaWJsZUZyb20gPSB0aGlzLmVs
ZW1lbnQuc2Nyb2xsVG9wOworICAgICAgICB2YXIgdmlzaWJsZVRvID0gdGhpcy5lbGVtZW50LnNj
cm9sbFRvcCArIHRoaXMuZWxlbWVudC5jbGllbnRIZWlnaHQ7CisKKyAgICAgICAgdmFyIG9mZnNl
dCA9IDA7CisgICAgICAgIHZhciBmcm9tSW5kZXggPSAtMTsKKyAgICAgICAgdmFyIHRvSW5kZXgg
PSAwOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbaV07Cisg
ICAgICAgICAgICB2YXIgY2h1bmtIZWlnaHQgPSBjaHVuay5oZWlnaHQ7CisgICAgICAgICAgICBp
ZiAob2Zmc2V0ICsgY2h1bmtIZWlnaHQgPiB2aXNpYmxlRnJvbSAmJiBvZmZzZXQgPCB2aXNpYmxl
VG8pIHsKKyAgICAgICAgICAgICAgICBpZiAoZnJvbUluZGV4ID09PSAtMSkKKyAgICAgICAgICAg
ICAgICAgICAgZnJvbUluZGV4ID0gaTsKKyAgICAgICAgICAgICAgICB0b0luZGV4ID0gaSArIDE7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gdmlz
aWJsZVRvKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG9mZnNldCArPSBjaHVua0hlaWdodDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0
b0luZGV4KQorICAgICAgICAgICAgdGhpcy5fZXhwYW5kQ2h1bmtzKGZyb21JbmRleCwgdG9JbmRl
eCk7CisgICAgfSwKKyAgICAKKyAgICByZXNpemU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHRoaXMuX3NjaGVkdWxlUmVwYWludEFsbCgpOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JHdXR0ZXJQYW5lbCA9IGZ1bmN0aW9uKHRleHRNb2RlbCkKK3sKKyAgICBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5jYWxsKHRoaXMsIHRleHRNb2RlbCk7CisKKyAg
ICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlz
LmVsZW1lbnQuY2xhc3NOYW1lID0gInRleHQtZWRpdG9yLWxpbmVzIjsKKworICAgIHRoaXMuZWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLl9zY3JvbGwuYmluZCh0aGlzKSwg
ZmFsc2UpOworCisgICAgdGhpcy5mcmVlQ2FjaGVkRWxlbWVudHMoKTsKKyAgICB0aGlzLl9idWls
ZENodW5rcygpOworfQorCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlclBhbmVsLnByb3Rv
dHlwZSA9IHsKKyAgICBmcmVlQ2FjaGVkRWxlbWVudHM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHRoaXMuX2NhY2hlZFJvd3MgPSBbXTsKKyAgICB9LAorCisgICAgX2NyZWF0ZU5ld0NodW5r
OiBmdW5jdGlvbihzdGFydExpbmUsIGVuZExpbmUpCisgICAgeworICAgICAgICByZXR1cm4gbmV3
IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsodGhpcywgc3RhcnRMaW5lLCBlbmRM
aW5lKTsKKyAgICB9LAorCisgICAgX2V4cGFuZENodW5rczogZnVuY3Rpb24oZnJvbUluZGV4LCB0
b0luZGV4KQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0Q2h1
bmtzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzW2ldLmV4cGFu
ZGVkID0gKGZyb21JbmRleCA8PSBpICYmIGkgPCB0b0luZGV4KTsKKyAgICAgICAgfQorICAgIH0K
K30KKworV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbC5wcm90b3R5cGUuX19wcm90
b19fID0gV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlOworCitX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rID0gZnVuY3Rpb24odGV4dFZpZXdlciwg
c3RhcnRMaW5lLCBlbmRMaW5lKQoreworICAgIHRoaXMuX3RleHRWaWV3ZXIgPSB0ZXh0Vmlld2Vy
OworICAgIHRoaXMuX3RleHRNb2RlbCA9IHRleHRWaWV3ZXIuX3RleHRNb2RlbDsKKworICAgIHRo
aXMuc3RhcnRMaW5lID0gc3RhcnRMaW5lOworICAgIGVuZExpbmUgPSBNYXRoLm1pbih0aGlzLl90
ZXh0TW9kZWwubGluZXNDb3VudCwgZW5kTGluZSk7CisgICAgdGhpcy5saW5lc0NvdW50ID0gZW5k
TGluZSAtIHN0YXJ0TGluZTsKKworICAgIHRoaXMuX2V4cGFuZGVkID0gZmFsc2U7CisKKyAgICB0
aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlzLmVs
ZW1lbnQubGluZU51bWJlciA9IHN0YXJ0TGluZTsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1l
ID0gIndlYmtpdC1saW5lLW51bWJlciI7CisKKyAgICBpZiAodGhpcy5saW5lc0NvdW50ID09PSAx
KSB7CisgICAgICAgIC8vIFNpbmdsZSBsaW5lIGNodW5rcyBhcmUgdHlwaWNhbGx5IGNyZWF0ZWQg
Zm9yIGRlY29yYXRpb25zLiBIb3N0IGxpbmUgbnVtYmVyIGluCisgICAgICAgIC8vIHRoZSBzdWIt
ZWxlbWVudCBpbiBvcmRlciB0byBhbGxvdyBmbGV4aWJsZSBib3JkZXIgLyBtYXJnaW4gbWFuYWdl
bWVudC4KKyAgICAgICAgdmFyIGlubmVyU3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNw
YW4iKTsKKyAgICAgICAgaW5uZXJTcGFuLmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1udW1iZXIt
aW5uZXIiOworICAgICAgICBpbm5lclNwYW4udGV4dENvbnRlbnQgPSBzdGFydExpbmUgKyAxOwor
ICAgICAgICB2YXIgb3V0ZXJTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cisg
ICAgICAgIG91dGVyU3Bhbi5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtbnVtYmVyLW91dGVyIjsK
KyAgICAgICAgb3V0ZXJTcGFuLmFwcGVuZENoaWxkKGlubmVyU3Bhbik7CisgICAgICAgIHRoaXMu
ZWxlbWVudC5hcHBlbmRDaGlsZChvdXRlclNwYW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIHZh
ciBsaW5lTnVtYmVycyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRMaW5lOyBpIDwg
ZW5kTGluZTsgKytpKSB7CisgICAgICAgICAgICBsaW5lTnVtYmVycy5wdXNoKGkgKyAxKTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLmVsZW1lbnQudGV4dENvbnRlbnQgPSBsaW5lTnVtYmVycy5q
b2luKCJcbiIpOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVu
ay5wcm90b3R5cGUgPSB7CisgICAgYWRkRGVjb3JhdGlvbjogZnVuY3Rpb24oZGVjb3JhdGlvbikK
KyAgICB7CisgICAgICAgIGlmICh0eXBlb2YgZGVjb3JhdGlvbiA9PT0gInN0cmluZyIpIHsKKyAg
ICAgICAgICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKGRlY29yYXRpb24pOworICAgICAg
ICB9CisgICAgfSwKKworICAgIHJlbW92ZURlY29yYXRpb246IGZ1bmN0aW9uKGRlY29yYXRpb24p
CisgICAgeworICAgICAgICBpZiAodHlwZW9mIGRlY29yYXRpb24gPT09ICJzdHJpbmciKSB7Cisg
ICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcyhkZWNvcmF0aW9uKTsKKyAg
ICAgICAgfQorICAgIH0sCisKKyAgICBnZXQgZXhwYW5kZWQoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX2V4cGFuZGVkOworICAgIH0sCisKKyAgICBzZXQgZXhwYW5kZWQoZXhwYW5kZWQp
CisgICAgeworICAgICAgICBpZiAodGhpcy5fZXhwYW5kZWQgPT09IGV4cGFuZGVkKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX2V4cGFuZGVkID0gZXhwYW5kZWQ7CisKKyAg
ICAgICAgaWYgKHRoaXMubGluZXNDb3VudCA9PT0gMSkgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGV4cGFuZGVkKSB7CisgICAgICAgICAgICB0aGlzLl9l
eHBhbmRlZExpbmVSb3dzID0gW107CisgICAgICAgICAgICB2YXIgcGFyZW50RWxlbWVudCA9IHRo
aXMuZWxlbWVudC5wYXJlbnRFbGVtZW50OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMu
c3RhcnRMaW5lOyBpIDwgdGhpcy5zdGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQ7ICsraSkgewor
ICAgICAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fY3JlYXRlUm93KGkpOworICAgICAg
ICAgICAgICAgIHBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGxpbmVSb3csIHRoaXMuZWxlbWVu
dCk7CisgICAgICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5wdXNoKGxpbmVSb3cp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0
aGlzLmVsZW1lbnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGVsZW1lbnRJ
bnNlcnRlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9l
eHBhbmRlZExpbmVSb3dzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIGxpbmVS
b3cgPSB0aGlzLl9leHBhbmRlZExpbmVSb3dzW2ldOworICAgICAgICAgICAgICAgIHZhciBwYXJl
bnRFbGVtZW50ID0gbGluZVJvdy5wYXJlbnRFbGVtZW50OworICAgICAgICAgICAgICAgIGlmIChw
YXJlbnRFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghZWxlbWVudEluc2VydGVk
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50SW5zZXJ0ZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5lbGVt
ZW50LCBsaW5lUm93KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB0aGlzLl90ZXh0Vmlld2VyLl9jYWNoZWRSb3dzLnB1c2gobGluZVJvdyk7CisgICAgICAgICAg
ICAgICAgICAgIHBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobGluZVJvdyk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2V4cGFuZGVk
TGluZVJvd3M7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgZ2V0IGhlaWdodCgpCisgICAgewor
ICAgICAgICBpZiAoIXRoaXMuX2V4cGFuZGVkTGluZVJvd3MpCisgICAgICAgICAgICByZXR1cm4g
dGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodDsKKyAgICAgICAgdmFyIHJlc3VsdCA9IDA7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl9leHBhbmRlZExpbmVSb3dzW2ld
OworICAgICAgICAgICAgcmVzdWx0ICs9IGxpbmVSb3cub2Zmc2V0SGVpZ2h0OworICAgICAgICB9
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSwKKworICAgIF9jcmVhdGVSb3c6IGZ1bmN0
aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX3RleHRW
aWV3ZXIuX2NhY2hlZFJvd3MucG9wKCkgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
CisgICAgICAgIGxpbmVSb3cubGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgIGxpbmVS
b3cuY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLW51bWJlciI7CisgICAgICAgIGxpbmVSb3cudGV4
dENvbnRlbnQgPSBsaW5lTnVtYmVyICsgMTsKKyAgICAgICAgcmV0dXJuIGxpbmVSb3c7CisgICAg
fQorfQorCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbCA9IGZ1bmN0aW9uKHRleHRN
b2RlbCwgdXJsLCBzeW5jU2Nyb2xsTGlzdGVuZXIsIHN5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0
ZW5lcikKK3sKKyAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5jYWxsKHRo
aXMsIHRleHRNb2RlbCk7CisKKyAgICB0aGlzLl9zeW5jU2Nyb2xsTGlzdGVuZXIgPSBzeW5jU2Ny
b2xsTGlzdGVuZXI7CisgICAgdGhpcy5fc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyID0g
c3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyOworCisgICAgdGhpcy5fdXJsID0gdXJsOwor
ICAgIHRoaXMuX2hpZ2hsaWdodGVyID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9ySGlnaGxp
Z2h0ZXIodGV4dE1vZGVsLCB0aGlzLl9oaWdobGlnaHREYXRhUmVhZHkuYmluZCh0aGlzKSk7CisK
KyAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0
aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gInRleHQtZWRpdG9yLWNvbnRlbnRzIjsKKyAgICB0aGlz
LmVsZW1lbnQudGFiSW5kZXggPSAwOworCisgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoInNjcm9sbCIsIHRoaXMuX3Njcm9sbC5iaW5kKHRoaXMpLCBmYWxzZSk7CisgICAgdGhpcy5l
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9oYW5kbGVLZXlEb3duLmJp
bmQodGhpcyksIGZhbHNlKTsKKworICAgIHZhciBoYW5kbGVEb21VcGRhdGVzID0gdGhpcy5faGFu
ZGxlRG9tVXBkYXRlcy5iaW5kKHRoaXMpOworICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3Rl
bmVyKCJET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQiLCBoYW5kbGVEb21VcGRhdGVzLCBmYWxzZSk7
CisgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTU5vZGVJbnNlcnRlZCIsIGhh
bmRsZURvbVVwZGF0ZXMsIGZhbHNlKTsKKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5l
cigiRE9NTm9kZVJlbW92ZWQiLCBoYW5kbGVEb21VcGRhdGVzLCBmYWxzZSk7CisKKyAgICB0aGlz
LmZyZWVDYWNoZWRFbGVtZW50cygpOworICAgIHRoaXMuX2J1aWxkQ2h1bmtzKCk7Cit9CisKK1dl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKKyAgICBzZXQgbWlt
ZVR5cGUobWltZVR5cGUpCisgICAgeworICAgICAgICB0aGlzLl9oaWdobGlnaHRlci5taW1lVHlw
ZSA9IG1pbWVUeXBlOworICAgIH0sCisKKyAgICBtYXJrQW5kUmV2ZWFsUmFuZ2U6IGZ1bmN0aW9u
KHJhbmdlKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3JhbmdlVG9NYXJrKSB7CisgICAgICAg
ICAgICB2YXIgbWFya2VkTGluZSA9IHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0TGluZTsKKyAgICAg
ICAgICAgIHRoaXMuX3JhbmdlVG9NYXJrID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuX3BhaW50
TGluZXMobWFya2VkTGluZSwgbWFya2VkTGluZSArIDEpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHJhbmdlKSB7CisgICAgICAgICAgICB0aGlzLl9yYW5nZVRvTWFyayA9IHJhbmdlOworICAg
ICAgICAgICAgdGhpcy5yZXZlYWxMaW5lKHJhbmdlLnN0YXJ0TGluZSk7CisgICAgICAgICAgICB0
aGlzLl9wYWludExpbmVzKHJhbmdlLnN0YXJ0TGluZSwgcmFuZ2Uuc3RhcnRMaW5lICsgMSk7Cisg
ICAgICAgICAgICBpZiAodGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50KQorICAgICAgICAgICAgICAg
IHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7CisgICAg
ICAgIH0KKyAgICAgICAgZGVsZXRlIHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudDsKKyAgICB9LAor
CisgICAgaGlnaGxpZ2h0TGluZTogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAg
IHRoaXMuY2xlYXJMaW5lSGlnaGxpZ2h0KCk7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdodGVkTGlu
ZSA9IGxpbmVOdW1iZXI7CisgICAgICAgIHRoaXMucmV2ZWFsTGluZShsaW5lTnVtYmVyKTsKKyAg
ICAgICAgdGhpcy5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtaGlnaGxpZ2h0ZWQt
bGluZSIpOworICAgIH0sCisKKyAgICBjbGVhckxpbmVIaWdobGlnaHQ6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIGlmICh0eXBlb2YgdGhpcy5faGlnaGxpZ2h0ZWRMaW5lID09PSAibnVtYmVy
IikgeworICAgICAgICAgICAgdGhpcy5yZW1vdmVEZWNvcmF0aW9uKHRoaXMuX2hpZ2hsaWdodGVk
TGluZSwgIndlYmtpdC1oaWdobGlnaHRlZC1saW5lIik7CisgICAgICAgICAgICBkZWxldGUgdGhp
cy5faGlnaGxpZ2h0ZWRMaW5lOworICAgICAgICB9CisgICAgfSwKKworICAgIGZyZWVDYWNoZWRF
bGVtZW50czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2FjaGVkU3BhbnMgPSBb
XTsKKyAgICAgICAgdGhpcy5fY2FjaGVkVGV4dE5vZGVzID0gW107CisgICAgICAgIHRoaXMuX2Nh
Y2hlZFJvd3MgPSBbXTsKICAgICB9LAogCiAgICAgX2hhbmRsZUtleURvd246IGZ1bmN0aW9uKCkK
QEAgLTI0OCwxNiArNTk5LDE1IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9
IHsKIAogICAgIGVkaXRMaW5lOiBmdW5jdGlvbihsaW5lUm93LCBjYWxsYmFjaykKICAgICB7Ci0g
ICAgICAgIHZhciBlbGVtZW50ID0gbGluZVJvdy5sYXN0Q2hpbGQ7Ci0gICAgICAgIHZhciBvbGRD
b250ZW50ID0gZWxlbWVudC5pbm5lckhUTUw7CisgICAgICAgIHZhciBvbGRDb250ZW50ID0gbGlu
ZVJvdy5pbm5lckhUTUw7CiAgICAgICAgIGZ1bmN0aW9uIGZpbmlzaEVkaXRpbmcoY29tbWl0dGVk
LCBlLCBuZXdDb250ZW50KQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoY29tbWl0dGVkKQog
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ld0NvbnRlbnQpOwotICAgICAgICAgICAgZWxlbWVu
dC5pbm5lckhUTUwgPSBvbGRDb250ZW50OworICAgICAgICAgICAgbGluZVJvdy5pbm5lckhUTUwg
PSBvbGRDb250ZW50OwogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2VkaXRpbmdMaW5lOwogICAg
ICAgICB9Ci0gICAgICAgIHRoaXMuX2VkaXRpbmdMaW5lID0gV2ViSW5zcGVjdG9yLnN0YXJ0RWRp
dGluZyhlbGVtZW50LCB7CisgICAgICAgIHRoaXMuX2VkaXRpbmdMaW5lID0gV2ViSW5zcGVjdG9y
LnN0YXJ0RWRpdGluZyhsaW5lUm93LCB7CiAgICAgICAgICAgICBjb250ZXh0OiBudWxsLAogICAg
ICAgICAgICAgY29tbWl0SGFuZGxlcjogZmluaXNoRWRpdGluZy5iaW5kKHRoaXMsIHRydWUpLAog
ICAgICAgICAgICAgY2FuY2VsSGFuZGxlcjogZmluaXNoRWRpdGluZy5iaW5kKHRoaXMsIGZhbHNl
KSwKQEAgLTI2NSwxMDIgKzYxNSwyMSBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgIH0pOwogICAgIH0sCiAKLSAgICBfYmVmb3JlQ29weTogZnVuY3Rpb24o
ZSkKLSAgICB7Ci0gICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKLSAgICB9LAotCi0gICAgX2Nv
cHk6IGZ1bmN0aW9uKGUpCi0gICAgewotICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9nZXRTZWxl
Y3Rpb24oKTsKLSAgICAgICAgdmFyIHRleHQgPSB0aGlzLl90ZXh0TW9kZWwuY29weVJhbmdlKHJh
bmdlKTsKLSAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNvcHlUZXh0KHRleHQpOwotICAg
ICAgICBlLnByZXZlbnREZWZhdWx0KCk7Ci0gICAgfSwKLQotICAgIGJlZ2luVXBkYXRlczogZnVu
Y3Rpb24oZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVs
Kys7Ci0gICAgfSwKLQotICAgIGVuZFVwZGF0ZXM6IGZ1bmN0aW9uKGVuYWJsZWQpCi0gICAgewot
ICAgICAgICB0aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbC0tOwotICAgICAgICBpZiAoIXRoaXMu
X3BhaW50Q29hbGVzY2luZ0xldmVsKQotICAgICAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOwot
ICAgIH0sCi0KLSAgICBfY2h1bmtGb3JPZmZzZXQ6IGZ1bmN0aW9uKG9mZnNldCkKLSAgICB7Ci0g
ICAgICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gMDsKLSAgICAgICAgdmFyIHJvdyA9IHRoaXMuX2xp
bmVzQ29udGFpbmVyRWxlbWVudC5maXJzdENoaWxkOwotICAgICAgICB3aGlsZSAocm93KSB7Ci0g
ICAgICAgICAgICB2YXIgcm93SGVpZ2h0ID0gcm93Lm9mZnNldEhlaWdodDsKLSAgICAgICAgICAg
IGlmIChvZmZzZXQgPj0gY3VycmVudE9mZnNldCAmJiBvZmZzZXQgPCBjdXJyZW50T2Zmc2V0ICsg
cm93SGVpZ2h0KQotICAgICAgICAgICAgICAgIHJldHVybiByb3cuY2h1bmtOdW1iZXI7Ci0gICAg
ICAgICAgICByb3cgPSByb3cubmV4dFNpYmxpbmc7Ci0gICAgICAgICAgICBjdXJyZW50T2Zmc2V0
ICs9IHJvd0hlaWdodDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdGhpcy5fdGV4dENodW5r
cy5sZW5ndGggLSAxOwotICAgIH0sCi0KLSAgICBfY2h1bmtOdW1iZXJGb3JMaW5lOiBmdW5jdGlv
bihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90
ZXh0Q2h1bmtzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgbGluZSA9IHRoaXMuX3Rl
eHRDaHVua3NbaV0uc3RhcnRMaW5lOwotICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPj0gdGhp
cy5fdGV4dENodW5rc1tpXS5zdGFydExpbmUgJiYgbGluZU51bWJlciA8IHRoaXMuX3RleHRDaHVu
a3NbaV0uc3RhcnRMaW5lICsgdGhpcy5fdGV4dENodW5rc1tpXS5saW5lc0NvdW50KQotICAgICAg
ICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0aGlzLl90ZXh0
Q2h1bmtzLmxlbmd0aCAtIDE7Ci0gICAgfSwKLQotICAgIF9jaHVua0ZvckxpbmU6IGZ1bmN0aW9u
KGxpbmVOdW1iZXIpCisgICAgX2J1aWxkQ2h1bmtzOiBmdW5jdGlvbigpCiAgICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fdGV4dENodW5rc1t0aGlzLl9jaHVua051bWJlckZvckxpbmUobGluZU51
bWJlcildOworICAgICAgICB0aGlzLl9oaWdobGlnaHRlci5yZXNldCgpOworICAgICAgICBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX2J1aWxkQ2h1bmtzLmNh
bGwodGhpcyk7CiAgICAgfSwKIAotICAgIF9jaHVua1N0YXJ0TGluZTogZnVuY3Rpb24oY2h1bmtO
dW1iZXIpCisgICAgX2NyZWF0ZU5ld0NodW5rOiBmdW5jdGlvbihzdGFydExpbmUsIGVuZExpbmUp
CiAgICAgewotICAgICAgICB2YXIgbGluZU51bWJlciA9IDA7Ci0gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgY2h1bmtOdW1iZXIgJiYgaSA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2kp
Ci0gICAgICAgICAgICBsaW5lTnVtYmVyICs9IHRoaXMuX3RleHRDaHVua3NbaV0ubGluZXNDb3Vu
dDsKLSAgICAgICAgcmV0dXJuIGxpbmVOdW1iZXI7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsodGhpcywgc3RhcnRMaW5lLCBlbmRMaW5lKTsKICAg
ICB9LAogCi0gICAgX3JlcGFpbnRBbGw6IGZ1bmN0aW9uKCkKKyAgICBfZXhwYW5kQ2h1bmtzOiBm
dW5jdGlvbihmcm9tSW5kZXgsIHRvSW5kZXgpCiAgICAgewotICAgICAgICBpZiAodGhpcy5fcGFp
bnRDb2FsZXNjaW5nTGV2ZWwpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCF0
aGlzLl90ZXh0Q2h1bmtzKQotICAgICAgICAgICAgdGhpcy5fYnVpbGRDaHVua3MoKTsKLQotICAg
ICAgICB2YXIgdmlzaWJsZUZyb20gPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wOwotICAgICAgICB2
YXIgdmlzaWJsZVRvID0gdGhpcy5lbGVtZW50LnNjcm9sbFRvcCArIHRoaXMuZWxlbWVudC5jbGll
bnRIZWlnaHQ7Ci0KLSAgICAgICAgdmFyIG9mZnNldCA9IDA7Ci0gICAgICAgIHZhciBmaXJzdFZp
c2libGVMaW5lID0gLTE7Ci0gICAgICAgIHZhciBsYXN0VmlzaWJsZUxpbmUgPSAwOwotICAgICAg
ICB2YXIgdG9FeHBhbmQgPSBbXTsKLSAgICAgICAgdmFyIHRvQ29sbGFwc2UgPSBbXTsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2ldOwotICAgICAgICAgICAg
dmFyIGNodW5rSGVpZ2h0ID0gY2h1bmsuaGVpZ2h0OwotICAgICAgICAgICAgaWYgKG9mZnNldCAr
IGNodW5rSGVpZ2h0ID4gdmlzaWJsZUZyb20gJiYgb2Zmc2V0IDwgdmlzaWJsZVRvKSB7Ci0gICAg
ICAgICAgICAgICAgdG9FeHBhbmQucHVzaChjaHVuayk7Ci0gICAgICAgICAgICAgICAgaWYgKGZp
cnN0VmlzaWJsZUxpbmUgPT09IC0xKQotICAgICAgICAgICAgICAgICAgICBmaXJzdFZpc2libGVM
aW5lID0gY2h1bmsuc3RhcnRMaW5lOwotICAgICAgICAgICAgICAgIGxhc3RWaXNpYmxlTGluZSA9
IGNodW5rLnN0YXJ0TGluZSArIGNodW5rLmxpbmVzQ291bnQ7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIHRvQ29sbGFwc2UucHVzaChjaHVuayk7Ci0gICAgICAgICAgICAg
ICAgaWYgKG9mZnNldCA+PSB2aXNpYmxlVG8pCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgb2Zmc2V0ICs9IGNodW5rSGVpZ2h0OwotICAgICAg
ICB9Ci0KLSAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0
aDsgKytqKQotICAgICAgICAgICAgdG9Db2xsYXBzZS5wdXNoKHRoaXMuX3RleHRDaHVua3NbaV0p
OworICAgICAgICB2YXIgbGFzdENodW5rID0gdGhpcy5fdGV4dENodW5rc1t0b0luZGV4IC0gMV07
CisgICAgICAgIHZhciBsYXN0VmlzaWJsZUxpbmUgPSBsYXN0Q2h1bmsuc3RhcnRMaW5lICsgbGFz
dENodW5rLmxpbmVzQ291bnQ7CiAKICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNl
bGVjdGlvbigpOwogCkBAIC0zNjgsMTAgKzYzNyw5IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2Vy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZXIuaGlnaGxpZ2h0KGxhc3RW
aXNpYmxlTGluZSk7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9tdXRlSGlnaGxpZ2h0TGlzdGVuZXI7
CiAKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b0NvbGxhcHNlLmxlbmd0aDsgKytpKQot
ICAgICAgICAgICAgdG9Db2xsYXBzZVtpXS5leHBhbmRlZCA9IGZhbHNlOwotICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHRvRXhwYW5kLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdG9FeHBh
bmRbaV0uZXhwYW5kZWQgPSB0cnVlOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMu
X3RleHRDaHVua3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHRoaXMuX3RleHRDaHVua3Nb
aV0uZXhwYW5kZWQgPSAoZnJvbUluZGV4IDw9IGkgJiYgaSA8IHRvSW5kZXgpOworICAgICAgICB9
CiAKICAgICAgICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihzZWxlY3Rpb24pOwogICAgIH0sCkBA
IC0zODAsNDAgKzY0OCw0MCBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUgPSB7
CiAgICAgewogICAgICAgICBpZiAodGhpcy5fbXV0ZUhpZ2hsaWdodExpc3RlbmVyKQogICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLl9wYWludExpbmVzKGZyb21MaW5lLCB0b0xpbmUs
IHRydWUgLypyZXN0b3JlU2VsZWN0aW9uKi8pOworICAgIH0sCiAKKyAgICBfcGFpbnRMaW5lczog
ZnVuY3Rpb24oZnJvbUxpbmUsIHRvTGluZSwgcmVzdG9yZVNlbGVjdGlvbikKKyAgICB7CiAgICAg
ICAgIHZhciBzZWxlY3Rpb247CisgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX2NodW5rRm9yTGlu
ZShmcm9tTGluZSk7CiAgICAgICAgIGZvciAodmFyIGkgPSBmcm9tTGluZTsgaSA8IHRvTGluZTsg
KytpKSB7Ci0gICAgICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRy
aWJ1dGUoaSwgImxpbmUtcm93Iik7Ci0gICAgICAgICAgICBpZiAoIWxpbmVSb3cgfHwgbGluZVJv
dy5oaWdobGlnaHRlZCkKKyAgICAgICAgICAgIGlmIChpID49IGNodW5rLnN0YXJ0TGluZSArIGNo
dW5rLmxpbmVzQ291bnQpCisgICAgICAgICAgICAgICAgY2h1bmsgPSB0aGlzLl9jaHVua0Zvckxp
bmUoaSk7CisgICAgICAgICAgICB2YXIgbGluZVJvdyA9IGNodW5rLmdldEV4cGFuZGVkTGluZVJv
dyhpKTsKKyAgICAgICAgICAgIGlmICghbGluZVJvdykKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGlmICghc2VsZWN0aW9uKQorICAgICAgICAgICAgaWYgKHJlc3RvcmVT
ZWxlY3Rpb24gJiYgIXNlbGVjdGlvbikKICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlz
Ll9nZXRTZWxlY3Rpb24oKTsKICAgICAgICAgICAgIHRoaXMuX3BhaW50TGluZShsaW5lUm93LCBp
KTsKICAgICAgICAgfQotICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlvbik7
Ci0gICAgfSwKLQotICAgIF9wYWludExpbmVzOiBmdW5jdGlvbihmcm9tTGluZSwgdG9MaW5lKQot
ICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IGZyb21MaW5lOyBpIDwgdG9MaW5lOyArK2kpIHsK
LSAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShp
LCAibGluZS1yb3ciKTsKLSAgICAgICAgICAgIGlmIChsaW5lUm93KQotICAgICAgICAgICAgICAg
IHRoaXMuX3BhaW50TGluZShsaW5lUm93LCBpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAocmVz
dG9yZVNlbGVjdGlvbikKKyAgICAgICAgICAgIHRoaXMuX3Jlc3RvcmVTZWxlY3Rpb24oc2VsZWN0
aW9uKTsKICAgICB9LAogCiAgICAgX3BhaW50TGluZTogZnVuY3Rpb24obGluZVJvdywgbGluZU51
bWJlcikKICAgICB7Ci0gICAgICAgIHZhciBlbGVtZW50ID0gbGluZVJvdy5sYXN0Q2hpbGQ7CiAg
ICAgICAgIHZhciBoaWdobGlnaHQgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGxpbmVO
dW1iZXIsICJoaWdobGlnaHQiKTsKICAgICAgICAgaWYgKCFoaWdobGlnaHQpIHsKICAgICAgICAg
ICAgIGlmICh0aGlzLl9yYW5nZVRvTWFyayAmJiB0aGlzLl9yYW5nZVRvTWFyay5zdGFydExpbmUg
PT09IGxpbmVOdW1iZXIpCi0gICAgICAgICAgICAgICAgdGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50
ID0gaGlnaGxpZ2h0U2VhcmNoUmVzdWx0KGVsZW1lbnQsIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0
Q29sdW1uLCB0aGlzLl9yYW5nZVRvTWFyay5lbmRDb2x1bW4gLSB0aGlzLl9yYW5nZVRvTWFyay5z
dGFydENvbHVtbik7CisgICAgICAgICAgICAgICAgdGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50ID0g
aGlnaGxpZ2h0U2VhcmNoUmVzdWx0KGxpbmVSb3csIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0Q29s
dW1uLCB0aGlzLl9yYW5nZVRvTWFyay5lbmRDb2x1bW4gLSB0aGlzLl9yYW5nZVRvTWFyay5zdGFy
dENvbHVtbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBlbGVt
ZW50LnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgIGxpbmVSb3cucmVtb3ZlQ2hpbGRyZW4oKTsK
ICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKTsKKyAg
ICAgICAgaWYgKCFsaW5lKQorICAgICAgICAgICAgbGluZVJvdy5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJiciIpKTsKIAogICAgICAgICB2YXIgcGxhaW5UZXh0U3RhcnQgPSAt
MTsKICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaW5lLmxlbmd0aDspIHsKQEAgLTQzMCw5
OCArNjk4LDY0IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgICAgICBqKys7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlm
IChwbGFpblRleHRTdGFydCAhPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBw
ZW5kVGV4dE5vZGUoZWxlbWVudCwgbGluZS5zdWJzdHJpbmcocGxhaW5UZXh0U3RhcnQsIGopKTsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwZW5kVGV4dE5vZGUobGluZVJvdywgbGluZS5z
dWJzdHJpbmcocGxhaW5UZXh0U3RhcnQsIGopKTsKICAgICAgICAgICAgICAgICAgICAgcGxhaW5U
ZXh0U3RhcnQgPSAtMTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5f
YXBwZW5kU3BhbihlbGVtZW50LCBsaW5lLnN1YnN0cmluZyhqLCBqICsgYXR0cmlidXRlLmxlbmd0
aCksIGF0dHJpYnV0ZS50b2tlblR5cGUpOworICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZFNw
YW4obGluZVJvdywgbGluZS5zdWJzdHJpbmcoaiwgaiArIGF0dHJpYnV0ZS5sZW5ndGgpLCBhdHRy
aWJ1dGUudG9rZW5UeXBlKTsKICAgICAgICAgICAgICAgICBqICs9IGF0dHJpYnV0ZS5sZW5ndGg7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0ICE9
PSAtMSkKLSAgICAgICAgICAgIHRoaXMuX2FwcGVuZFRleHROb2RlKGVsZW1lbnQsIGxpbmUuc3Vi
c3RyaW5nKHBsYWluVGV4dFN0YXJ0LCBsaW5lLmxlbmd0aCkpOworICAgICAgICAgICAgdGhpcy5f
YXBwZW5kVGV4dE5vZGUobGluZVJvdywgbGluZS5zdWJzdHJpbmcocGxhaW5UZXh0U3RhcnQsIGxp
bmUubGVuZ3RoKSk7CiAgICAgICAgIGlmICh0aGlzLl9yYW5nZVRvTWFyayAmJiB0aGlzLl9yYW5n
ZVRvTWFyay5zdGFydExpbmUgPT09IGxpbmVOdW1iZXIpCi0gICAgICAgICAgICB0aGlzLl9tYXJr
ZWRSYW5nZUVsZW1lbnQgPSBoaWdobGlnaHRTZWFyY2hSZXN1bHQoZWxlbWVudCwgdGhpcy5fcmFu
Z2VUb01hcmsuc3RhcnRDb2x1bW4sIHRoaXMuX3JhbmdlVG9NYXJrLmVuZENvbHVtbiAtIHRoaXMu
X3JhbmdlVG9NYXJrLnN0YXJ0Q29sdW1uKTsKKyAgICAgICAgICAgIHRoaXMuX21hcmtlZFJhbmdl
RWxlbWVudCA9IGhpZ2hsaWdodFNlYXJjaFJlc3VsdChsaW5lUm93LCB0aGlzLl9yYW5nZVRvTWFy
ay5zdGFydENvbHVtbiwgdGhpcy5fcmFuZ2VUb01hcmsuZW5kQ29sdW1uIC0gdGhpcy5fcmFuZ2VU
b01hcmsuc3RhcnRDb2x1bW4pOwogICAgICAgICBpZiAobGluZVJvdy5kZWNvcmF0aW9uc0VsZW1l
bnQpCi0gICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGxpbmVSb3cuZGVjb3JhdGlvbnNF
bGVtZW50KTsKKyAgICAgICAgICAgIGxpbmVSb3cuYXBwZW5kQ2hpbGQobGluZVJvdy5kZWNvcmF0
aW9uc0VsZW1lbnQpOwogICAgIH0sCiAKLSAgICBfcmVsZWFzZUxpbmVzSGlnaGxpZ2h0OiBmdW5j
dGlvbihmcm9tTGluZSwgdG9MaW5lKQorICAgIF9yZWxlYXNlTGluZXNIaWdobGlnaHQ6IGZ1bmN0
aW9uKGxpbmVSb3cpCiAgICAgewotICAgICAgICBmb3IgKHZhciBpID0gZnJvbUxpbmU7IGkgPCB0
b0xpbmU7ICsraSkgewotICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl90ZXh0TW9kZWwu
Z2V0QXR0cmlidXRlKGksICJsaW5lLXJvdyIpOwotICAgICAgICAgICAgaWYgKCFsaW5lUm93KQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBsaW5l
Um93Lmxhc3RDaGlsZDsKLSAgICAgICAgICAgIGlmICgic3BhbnMiIGluIGVsZW1lbnQpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgc3BhbnMgPSBlbGVtZW50LnNwYW5zOwotICAgICAgICAgICAgICAg
IGZvciAodmFyIGogPSAwOyBqIDwgc3BhbnMubGVuZ3RoOyArK2opCi0gICAgICAgICAgICAgICAg
ICAgIHRoaXMuX2NhY2hlZFNwYW5zLnB1c2goc3BhbnNbal0pOwotICAgICAgICAgICAgICAgIGRl
bGV0ZSBlbGVtZW50LnNwYW5zOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCJ0ZXh0
Tm9kZXMiIGluIGVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICB2YXIgdGV4dE5vZGVzID0gZWxl
bWVudC50ZXh0Tm9kZXM7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0ZXh0
Tm9kZXMubGVuZ3RoOyArK2opCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZFRleHRO
b2Rlcy5wdXNoKHRleHROb2Rlc1tqXSk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGVsZW1lbnQu
dGV4dE5vZGVzOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAoIWxpbmVSb3cpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmICgic3BhbnMiIGluIGxpbmVSb3cpIHsKKyAgICAgICAg
ICAgIHZhciBzcGFucyA9IGxpbmVSb3cuc3BhbnM7CisgICAgICAgICAgICBmb3IgKHZhciBqID0g
MDsgaiA8IHNwYW5zLmxlbmd0aDsgKytqKQorICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZFNw
YW5zLnB1c2goc3BhbnNbal0pOworICAgICAgICAgICAgZGVsZXRlIGxpbmVSb3cuc3BhbnM7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCJ0ZXh0Tm9kZXMiIGluIGxpbmVSb3cpIHsKKyAgICAgICAg
ICAgIHZhciB0ZXh0Tm9kZXMgPSBsaW5lUm93LnRleHROb2RlczsKKyAgICAgICAgICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgdGV4dE5vZGVzLmxlbmd0aDsgKytqKQorICAgICAgICAgICAgICAgIHRo
aXMuX2NhY2hlZFRleHROb2Rlcy5wdXNoKHRleHROb2Rlc1tqXSk7CisgICAgICAgICAgICBkZWxl
dGUgbGluZVJvdy50ZXh0Tm9kZXM7CiAgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY2FjaGVkUm93
cy5wdXNoKGxpbmVSb3cpOwogICAgIH0sCiAKICAgICBfZ2V0U2VsZWN0aW9uOiBmdW5jdGlvbigp
CiAgICAgewogICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwot
ICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKQorICAgICAgICBpZiAoIXNlbGVjdGlv
bi5yYW5nZUNvdW50KQogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIHZhciBzZWxl
Y3Rpb25SYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgICAgICAvLyBTZWxlY3Rp
b24gbWF5IGJlIG91dHNpZGUgb2YgdGhlIHZpZXdlci4KICAgICAgICAgaWYgKCF0aGlzLmVsZW1l
bnQuaXNBbmNlc3RvcihzZWxlY3Rpb25SYW5nZS5zdGFydENvbnRhaW5lcikgfHwgIXRoaXMuZWxl
bWVudC5pc0FuY2VzdG9yKHNlbGVjdGlvblJhbmdlLmVuZENvbnRhaW5lcikpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5fc2VsZWN0aW9uVG9Qb3Np
dGlvbihzZWxlY3Rpb25SYW5nZS5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uUmFuZ2Uuc3RhcnRP
ZmZzZXQpOwotICAgICAgICB2YXIgZW5kID0gdGhpcy5fc2VsZWN0aW9uVG9Qb3NpdGlvbihzZWxl
Y3Rpb25SYW5nZS5lbmRDb250YWluZXIsIHNlbGVjdGlvblJhbmdlLmVuZE9mZnNldCk7Ci0gICAg
ICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShzdGFydC5saW5lLCBzdGFydC5j
b2x1bW4sIGVuZC5saW5lLCBlbmQuY29sdW1uKTsKKyAgICAgICAgdmFyIGVuZCA9IHNlbGVjdGlv
blJhbmdlLmNvbGxhcHNlZCA/IHN0YXJ0IDogdGhpcy5fc2VsZWN0aW9uVG9Qb3NpdGlvbihzZWxl
Y3Rpb25SYW5nZS5lbmRDb250YWluZXIsIHNlbGVjdGlvblJhbmdlLmVuZE9mZnNldCk7CisgICAg
ICAgIGlmIChzZWxlY3Rpb24uYW5jaG9yTm9kZSA9PT0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRDb250
YWluZXIgJiYgc2VsZWN0aW9uLmFuY2hvck9mZnNldCA9PT0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRP
ZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2Uoc3Rh
cnQubGluZSwgc3RhcnQuY29sdW1uLCBlbmQubGluZSwgZW5kLmNvbHVtbik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShlbmQubGlu
ZSwgZW5kLmNvbHVtbiwgc3RhcnQubGluZSwgc3RhcnQuY29sdW1uKTsKICAgICB9LAogCiAgICAg
X3Jlc3RvcmVTZWxlY3Rpb246IGZ1bmN0aW9uKHJhbmdlKQogICAgIHsKICAgICAgICAgaWYgKCFy
YW5nZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIHN0YXJ0Um93ID0gdGhpcy5f
dGV4dE1vZGVsLmdldEF0dHJpYnV0ZShyYW5nZS5zdGFydExpbmUsICJsaW5lLXJvdyIpOwotICAg
ICAgICBpZiAoc3RhcnRSb3cpCi0gICAgICAgICAgICB2YXIgc3RhcnQgPSBzdGFydFJvdy5sYXN0
Q2hpbGQucmFuZ2VCb3VuZGFyeUZvck9mZnNldChyYW5nZS5zdGFydENvbHVtbik7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgdmFyIG9mZnNldCA9IHJhbmdlLnN0YXJ0Q29sdW1uOwotICAg
ICAgICAgICAgdmFyIGNodW5rTnVtYmVyID0gdGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5lKHJhbmdl
LnN0YXJ0TGluZSk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fY2h1bmtTdGFydExp
bmUoY2h1bmtOdW1iZXIpOyBpIDwgcmFuZ2Uuc3RhcnRMaW5lOyArK2kpCi0gICAgICAgICAgICAg
ICAgb2Zmc2V0ICs9IHRoaXMuX3RleHRNb2RlbC5saW5lKGkpLmxlbmd0aCArIDE7IC8vIFxuCi0g
ICAgICAgICAgICB2YXIgbGluZUNlbGwgPSB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVtYmVyXS5l
bGVtZW50Lmxhc3RDaGlsZDsKLSAgICAgICAgICAgIGlmIChsaW5lQ2VsbC5maXJzdENoaWxkKQot
ICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHsgY29udGFpbmVyOiBsaW5lQ2VsbC5maXJzdENo
aWxkLCBvZmZzZXQ6IG9mZnNldCB9OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHZhciBzdGFydCA9IHsgY29udGFpbmVyOiBsaW5lQ2VsbCwgb2Zmc2V0OiAwIH07Ci0gICAgICAg
IH0KLQotICAgICAgICB2YXIgZW5kUm93ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShy
YW5nZS5lbmRMaW5lLCAibGluZS1yb3ciKTsKLSAgICAgICAgaWYgKGVuZFJvdykKLSAgICAgICAg
ICAgIHZhciBlbmQgPSBlbmRSb3cubGFzdENoaWxkLnJhbmdlQm91bmRhcnlGb3JPZmZzZXQocmFu
Z2UuZW5kQ29sdW1uKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB2YXIgb2Zmc2V0ID0g
cmFuZ2UuZW5kQ29sdW1uOwotICAgICAgICAgICAgdmFyIGNodW5rTnVtYmVyID0gdGhpcy5fY2h1
bmtOdW1iZXJGb3JMaW5lKHJhbmdlLmVuZExpbmUpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9
IHRoaXMuX2NodW5rU3RhcnRMaW5lKGNodW5rTnVtYmVyKTsgaSA8IHJhbmdlLmVuZExpbmU7ICsr
aSkKLSAgICAgICAgICAgICAgICBvZmZzZXQgKz0gdGhpcy5fdGV4dE1vZGVsLmxpbmUoaSkubGVu
Z3RoICsgMTsgLy8gXG4KLSAgICAgICAgICAgIHZhciBsaW5lQ2VsbCA9IHRoaXMuX3RleHRDaHVu
a3NbY2h1bmtOdW1iZXJdLmVsZW1lbnQubGFzdENoaWxkOwotICAgICAgICAgICAgaWYgKGxpbmVD
ZWxsLmZpcnN0Q2hpbGQpCi0gICAgICAgICAgICAgICAgdmFyIGVuZCA9IHsgY29udGFpbmVyOiBs
aW5lQ2VsbC5maXJzdENoaWxkLCBvZmZzZXQ6IG9mZnNldCB9OwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHZhciBlbmQgPSB7IGNvbnRhaW5lcjogbGluZUNlbGwsIG9mZnNldDog
MCB9OwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHNlbGVjdGlvblJhbmdlID0gZG9jdW1lbnQu
Y3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgc2VsZWN0aW9uUmFuZ2Uuc2V0U3RhcnQoc3RhcnQuY29u
dGFpbmVyLCBzdGFydC5vZmZzZXQpOwotICAgICAgICBzZWxlY3Rpb25SYW5nZS5zZXRFbmQoZW5k
LmNvbnRhaW5lciwgZW5kLm9mZnNldCk7Ci0KLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRv
dy5nZXRTZWxlY3Rpb24oKTsKLSAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwot
ICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2Uoc2VsZWN0aW9uUmFuZ2UpOworICAgICAgICB2YXIg
c3RhcnQgPSB0aGlzLl9wb3NpdGlvblRvU2VsZWN0aW9uKHJhbmdlLnN0YXJ0TGluZSwgcmFuZ2Uu
c3RhcnRDb2x1bW4pOworICAgICAgICB2YXIgZW5kID0gcmFuZ2UuaXNFbXB0eSgpID8gc3RhcnQg
OiB0aGlzLl9wb3NpdGlvblRvU2VsZWN0aW9uKHJhbmdlLmVuZExpbmUsIHJhbmdlLmVuZENvbHVt
bik7CisgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KHN0YXJ0
LmNvbnRhaW5lciwgc3RhcnQub2Zmc2V0LCBlbmQuY29udGFpbmVyLCBlbmQub2Zmc2V0KTsKICAg
ICB9LAogCiAgICAgX3NlbGVjdGlvblRvUG9zaXRpb246IGZ1bmN0aW9uKGNvbnRhaW5lciwgb2Zm
c2V0KQpAQCAtNTMxLDIxICs3NjUsMjYgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlID0gewogICAgICAgICBpZiAoY29udGFpbmVyID09PSB0aGlzLmVsZW1lbnQgJiYgb2Zmc2V0
ID09PSAxKQogICAgICAgICAgICAgcmV0dXJuIHsgbGluZTogdGhpcy5fdGV4dE1vZGVsLmxpbmVz
Q291bnQgLSAxLCBjb2x1bW46IHRoaXMuX3RleHRNb2RlbC5saW5lTGVuZ3RoKHRoaXMuX3RleHRN
b2RlbC5saW5lc0NvdW50IC0gMSkgfTsKIAotICAgICAgICB2YXIgbGluZVJvdyA9IGNvbnRhaW5l
ci5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1lKCJ0ciIpOworICAgICAgICB2YXIgbGlu
ZVJvdyA9IGNvbnRhaW5lci5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1lKCJESVYiKTsK
ICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBsaW5lUm93LmxpbmVOdW1iZXI7Ci0gICAgICAgIGlm
IChjb250YWluZXIubm9kZU5hbWUgPT09ICJURCIgJiYgb2Zmc2V0ID09PSAwKQorICAgICAgICBp
ZiAoY29udGFpbmVyID09PSBsaW5lUm93ICYmIG9mZnNldCA9PT0gMCkKICAgICAgICAgICAgIHJl
dHVybiB7IGxpbmU6IGxpbmVOdW1iZXIsIGNvbHVtbjogMCB9OwotICAgICAgICBpZiAoY29udGFp
bmVyLm5vZGVOYW1lID09PSAiVEQiICYmIG9mZnNldCA9PT0gMSkKLSAgICAgICAgICAgIHJldHVy
biB7IGxpbmU6IGxpbmVOdW1iZXIsIGNvbHVtbjogdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgo
bGluZU51bWJlcikgfTsKIAorICAgICAgICAvLyBUaGlzIG1heSBiZSBjaHVuayBhbmQgY2h1bmtz
IG1heSBjb250YWluIFxuLgogICAgICAgICB2YXIgY29sdW1uID0gMDsKLSAgICAgICAgdmFyIG5v
ZGUgPSBsaW5lUm93Lmxhc3RDaGlsZC50cmF2ZXJzZU5leHRUZXh0Tm9kZShsaW5lUm93Lmxhc3RD
aGlsZCk7CisgICAgICAgIHZhciBub2RlID0gbGluZVJvdy50cmF2ZXJzZU5leHRUZXh0Tm9kZShs
aW5lUm93KTsKICAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPT0gY29udGFpbmVyKSB7Ci0g
ICAgICAgICAgICBjb2x1bW4gKz0gbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7Ci0gICAgICAgICAg
ICBub2RlID0gbm9kZS50cmF2ZXJzZU5leHRUZXh0Tm9kZShsaW5lUm93Lmxhc3RDaGlsZCk7Cisg
ICAgICAgICAgICB2YXIgdGV4dCA9IG5vZGUudGV4dENvbnRlbnQ7CisgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAo
dGV4dC5jaGFyQXQoaSkgPT09ICJcbiIpIHsKKyAgICAgICAgICAgICAgICAgICAgbGluZU51bWJl
cisrOworICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSAwOworICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICBjb2x1bW4rKzsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG5vZGUgPSBub2RlLnRyYXZlcnNlTmV4dFRleHROb2RlKGxpbmVSb3cpOwogICAgICAg
ICB9CiAKLSAgICAgICAgLy8gVGhpcyBtYXkgYmUgY2h1bmsgYW5kIGNodW5rcyBtYXkgY29udGFp
biBcbi4KICAgICAgICAgaWYgKG5vZGUgPT09IGNvbnRhaW5lciAmJiBvZmZzZXQpIHsKICAgICAg
ICAgICAgIHZhciB0ZXh0ID0gbm9kZS50ZXh0Q29udGVudDsKICAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgb2Zmc2V0OyArK2kpIHsKQEAgLTU1OSw2ICs3OTgsMjUgQEAgV2ViSW5zcGVj
dG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4geyBsaW5lOiBsaW5l
TnVtYmVyLCBjb2x1bW46IGNvbHVtbiB9OwogICAgIH0sCiAKKyAgICBfcG9zaXRpb25Ub1NlbGVj
dGlvbjogZnVuY3Rpb24obGluZSwgY29sdW1uKQorICAgIHsKKyAgICAgICAgdmFyIGNodW5rID0g
dGhpcy5fY2h1bmtGb3JMaW5lKGxpbmUpOworICAgICAgICB2YXIgbGluZVJvdyA9IGNodW5rLmdl
dEV4cGFuZGVkTGluZVJvdyhsaW5lKTsKKyAgICAgICAgaWYgKGxpbmVSb3cpCisgICAgICAgICAg
ICB2YXIgcmFuZ2VCb3VuZGFyeSA9IGxpbmVSb3cucmFuZ2VCb3VuZGFyeUZvck9mZnNldChjb2x1
bW4pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBvZmZzZXQgPSBjb2x1bW47Cisg
ICAgICAgICAgICBmb3IgKHZhciBpID0gY2h1bmsuc3RhcnRMaW5lOyBpIDwgbGluZTsgKytpKQor
ICAgICAgICAgICAgICAgIG9mZnNldCArPSB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChpKSAr
IDE7IC8vIFxuCisgICAgICAgICAgICBsaW5lUm93ID0gY2h1bmsuZWxlbWVudDsKKyAgICAgICAg
ICAgIGlmIChsaW5lUm93LmZpcnN0Q2hpbGQpCisgICAgICAgICAgICAgICAgdmFyIHJhbmdlQm91
bmRhcnkgPSB7IGNvbnRhaW5lcjogbGluZVJvdy5maXJzdENoaWxkLCBvZmZzZXQ6IG9mZnNldCB9
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZhciByYW5nZUJvdW5kYXJ5ID0g
eyBjb250YWluZXI6IGxpbmVSb3csIG9mZnNldDogMCB9OworICAgICAgICB9CisgICAgICAgIHJl
dHVybiByYW5nZUJvdW5kYXJ5OworICAgIH0sCisKICAgICBfYXBwZW5kU3BhbjogZnVuY3Rpb24o
ZWxlbWVudCwgY29udGVudCwgY2xhc3NOYW1lKQogICAgIHsKICAgICAgICAgaWYgKGNsYXNzTmFt
ZSA9PT0gImh0bWwtcmVzb3VyY2UtbGluayIgfHwgY2xhc3NOYW1lID09PSAiaHRtbC1leHRlcm5h
bC1saW5rIikgewpAQCAtNTc4LDkgKzgzNiw5IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnBy
b3RvdHlwZSA9IHsKICAgICBfYXBwZW5kVGV4dE5vZGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHRleHQp
CiAgICAgewogICAgICAgICB2YXIgdGV4dE5vZGUgPSB0aGlzLl9jYWNoZWRUZXh0Tm9kZXMucG9w
KCk7Ci0gICAgICAgIGlmICh0ZXh0Tm9kZSkgeworICAgICAgICBpZiAodGV4dE5vZGUpCiAgICAg
ICAgICAgICB0ZXh0Tm9kZS5ub2RlVmFsdWUgPSB0ZXh0OwotICAgICAgICB9IGVsc2UKKyAgICAg
ICAgZWxzZQogICAgICAgICAgICAgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0
ZXh0KTsKICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7CiAgICAgICAgIGlm
ICghKCJ0ZXh0Tm9kZXMiIGluIGVsZW1lbnQpKQpAQCAtNjE0LDU4ICs4NzIsNTIgQEAgV2ViSW5z
cGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gV2ViSW5zcGVj
dG9yLmNvbXBsZXRlVVJMKHRoaXMuX3VybCwgaHJlZlZhbHVlKTsKICAgICB9LAogCi0gICAgcmVz
aXplOiBmdW5jdGlvbigpCisgICAgX2hhbmRsZURvbVVwZGF0ZXM6IGZ1bmN0aW9uKGUpCiAgICAg
ewotICAgICAgICB0aGlzLl9yZXBhaW50QWxsKCk7CisgICAgICAgIHZhciB0YXJnZXQgPSBlLnRh
cmdldDsKKyAgICAgICAgdmFyIGxpbmVSb3cgPSB0YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldp
dGhDbGFzcygid2Via2l0LWxpbmUtY29udGVudCIpOworICAgICAgICBpZiAobGluZVJvdyA9PT0g
dGFyZ2V0IHx8ICFsaW5lUm93IHx8ICFsaW5lUm93LmRlY29yYXRpb25zRWxlbWVudCB8fCAhbGlu
ZVJvdy5kZWNvcmF0aW9uc0VsZW1lbnQuaXNBbmNlc3Rvcih0YXJnZXQpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBpZiAodGhpcy5fc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVy
KSB7CisgICAgICAgICAgICAvLyBXYWl0IHVudGlsIHRoaXMgZXZlbnQgaXMgcHJvY2Vzc2VkIGFu
ZCBvbmx5IHRoZW4gc3luYyB0aGUgc2l6ZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IGluCisgICAgICAg
ICAgICAvLyBjYXNlIG9mIHRoZSBET01Ob2RlUmVtb3ZlZCBldmVudCwgYmVjYXVzZSBpdCBpcyBk
aXNwYXRjaGVkIGJlZm9yZSB0aGUgcmVtb3ZhbCB0YWtlcyBwbGFjZS4KKyAgICAgICAgICAgIHNl
dFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc3luY0RlY29yYXRp
b25zRm9yTGluZUxpc3RlbmVyKGxpbmVSb3cubGluZU51bWJlcik7CisgICAgICAgICAgICB9LmJp
bmQodGhpcyksIDApOworICAgICAgICB9CiAgICAgfQogfQogCi12YXIgY2FjaGVkU3BhbnMgPSBb
XTsKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fX3Byb3RvX18g
PSBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGU7CiAKLVdlYklu
c3BlY3Rvci5UZXh0Q2h1bmsgPSBmdW5jdGlvbih0ZXh0Vmlld2VyLCBzdGFydExpbmUsIGVuZExp
bmUpCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuayA9IGZ1bmN0aW9uKHRleHRWaWV3
ZXIsIHN0YXJ0TGluZSwgZW5kTGluZSkKIHsKICAgICB0aGlzLl90ZXh0Vmlld2VyID0gdGV4dFZp
ZXdlcjsKLSAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwog
ICAgIHRoaXMuX3RleHRNb2RlbCA9IHRleHRWaWV3ZXIuX3RleHRNb2RlbDsKLSAgICB0aGlzLmVs
ZW1lbnQuY2h1bmsgPSB0aGlzOworCisgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7CiAgICAgdGhpcy5lbGVtZW50LmxpbmVOdW1iZXIgPSBzdGFydExpbmU7
CisgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1jb250ZW50IjsKIAog
ICAgIHRoaXMuc3RhcnRMaW5lID0gc3RhcnRMaW5lOwogICAgIGVuZExpbmUgPSBNYXRoLm1pbih0
aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCwgZW5kTGluZSk7CiAgICAgdGhpcy5saW5lc0NvdW50
ID0gZW5kTGluZSAtIHN0YXJ0TGluZTsKIAotICAgIHRoaXMuX2xpbmVOdW1iZXJFbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB0aGlzLl9saW5lTnVtYmVyRWxlbWVu
dC5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtbnVtYmVyIjsKLSAgICB0aGlzLmVsZW1lbnQuYXBw
ZW5kQ2hpbGQodGhpcy5fbGluZU51bWJlckVsZW1lbnQpOwotCi0gICAgdGhpcy5fbGluZUNvbnRl
bnRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB0aGlzLl9saW5l
Q29udGVudEVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLWNvbnRlbnQiOwotICAgIHRo
aXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9saW5lQ29udGVudEVsZW1lbnQpOwotCiAgICAg
dGhpcy5fZXhwYW5kZWQgPSBmYWxzZTsKIAotICAgIHZhciBsaW5lTnVtYmVycyA9IFtdOwogICAg
IHZhciBsaW5lcyA9IFtdOwogICAgIGZvciAodmFyIGkgPSBzdGFydExpbmU7IGkgPCBlbmRMaW5l
OyArK2kpIHsKLSAgICAgICAgbGluZU51bWJlcnMucHVzaChpICsgMSk7CiAgICAgICAgIGxpbmVz
LnB1c2godGhpcy5fdGV4dE1vZGVsLmxpbmUoaSkpOwogICAgIH0KLSAgICBpZiAodGhpcy5saW5l
c0NvdW50ID09PSAxKSB7Ci0gICAgICAgIC8vIFNpbmdsZSBsaW5lIGNodW5rcyBhcmUgdHlwaWNh
bGx5IGNyZWF0ZWQgZm9yIGRlY29yYXRpb25zLiBIb3N0IGxpbmUgbnVtYmVyIGluCi0gICAgICAg
IC8vIHRoZSBzdWItZWxlbWVudCBpbiBvcmRlciB0byBhbGxvdyBmbGV4aWJsZSBib3JkZXIgLyBt
YXJnaW4gbWFuYWdlbWVudC4KLSAgICAgICAgdmFyIGlubmVyU3BhbiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgaW5uZXJTcGFuLmNsYXNzTmFtZSA9ICJ3ZWJraXQt
bGluZS1udW1iZXItaW5uZXIiOwotICAgICAgICBpbm5lclNwYW4udGV4dENvbnRlbnQgPSBzdGFy
dExpbmUgKyAxOwotICAgICAgICB2YXIgb3V0ZXJTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZGl2Iik7Ci0gICAgICAgIG91dGVyU3Bhbi5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtbnVt
YmVyLW91dGVyIjsKLSAgICAgICAgb3V0ZXJTcGFuLmFwcGVuZENoaWxkKGlubmVyU3Bhbik7Ci0g
ICAgICAgIHRoaXMuX2xpbmVOdW1iZXJFbGVtZW50LmFwcGVuZENoaWxkKG91dGVyU3Bhbik7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHRoaXMuX2xpbmVOdW1iZXJFbGVtZW50LnRleHRDb250ZW50ID0g
bGluZU51bWJlcnMuam9pbigiXG4iKTsKLSAgICB0aGlzLl9saW5lQ29udGVudEVsZW1lbnQudGV4
dENvbnRlbnQgPSBsaW5lcy5qb2luKCJcbiIpOworCisgICAgdGhpcy5lbGVtZW50LnRleHRDb250
ZW50ID0gbGluZXMuam9pbigiXG4iKTsKKworICAgIC8vIFRoZSBsYXN0IGVtcHR5IGxpbmUgd2ls
bCBnZXQgc3dhbGxvd2VkIG90aGVyd2lzZS4KKyAgICBpZiAoIWxpbmVzW2xpbmVzLmxlbmd0aCAt
IDFdKQorICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiYnIiKSk7CiB9CiAKLVdlYkluc3BlY3Rvci5UZXh0Q2h1bmsucHJvdG90eXBlID0gewor
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlID0gewogICAgIGFkZERl
Y29yYXRpb246IGZ1bmN0aW9uKGRlY29yYXRpb24pCiAgICAgewogICAgICAgICBpZiAodHlwZW9m
IGRlY29yYXRpb24gPT09ICJzdHJpbmciKSB7CkBAIC02NzQsNyArOTI2LDggQEAgV2ViSW5zcGVj
dG9yLlRleHRDaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCF0aGlz
LmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50KSB7CiAgICAgICAgICAgICB0aGlzLmVsZW1lbnQu
ZGVjb3JhdGlvbnNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAg
ICAgICAgICB0aGlzLl9saW5lQ29udGVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50
LmRlY29yYXRpb25zRWxlbWVudCk7CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuZGVjb3JhdGlv
bnNFbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1kZWNvcmF0aW9ucyI7CisgICAgICAg
ICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxl
bWVudCk7CiAgICAgICAgIH0KICAgICAgICAgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVu
dC5hcHBlbmRDaGlsZChkZWNvcmF0aW9uKTsKICAgICB9LApAQCAtNzAzLDQ0ICs5NTYsNDYgQEAg
V2ViSW5zcGVjdG9yLlRleHRDaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2V4cGFu
ZGVkID0gZXhwYW5kZWQ7CiAKICAgICAgICAgaWYgKHRoaXMubGluZXNDb3VudCA9PT0gMSkgewot
ICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnNldEF0dHJpYnV0ZSh0aGlzLnN0YXJ0TGluZSwg
ImxpbmUtcm93IiwgdGhpcy5lbGVtZW50KTsKICAgICAgICAgICAgIGlmIChleHBhbmRlZCkKLSAg
ICAgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLl9wYWludExpbmVzKHRoaXMuc3RhcnRMaW5l
LCB0aGlzLnN0YXJ0TGluZSArIDEpOworICAgICAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIu
X3BhaW50TGluZSh0aGlzLmVsZW1lbnQsIHRoaXMuc3RhcnRMaW5lKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChleHBhbmRlZCkgeworICAgICAgICAgICAg
dGhpcy5fZXhwYW5kZWRMaW5lUm93cyA9IFtdOwogICAgICAgICAgICAgdmFyIHBhcmVudEVsZW1l
bnQgPSB0aGlzLmVsZW1lbnQucGFyZW50RWxlbWVudDsKICAgICAgICAgICAgIGZvciAodmFyIGkg
PSB0aGlzLnN0YXJ0TGluZTsgaSA8IHRoaXMuc3RhcnRMaW5lICsgdGhpcy5saW5lc0NvdW50OyAr
K2kpIHsKICAgICAgICAgICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX2NyZWF0ZVJvdyhpKTsK
LSAgICAgICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0QXR0cmlidXRlKGksICJsaW5lLXJv
dyIsIGxpbmVSb3cpOwogICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3Jl
KGxpbmVSb3csIHRoaXMuZWxlbWVudCk7CisgICAgICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRM
aW5lUm93cy5wdXNoKGxpbmVSb3cpOworICAgICAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIu
X3BhaW50TGluZShsaW5lUm93LCBpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHBhcmVu
dEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50KTsKLQotICAgICAgICAgICAgdGhpcy5f
dGV4dFZpZXdlci5fcGFpbnRMaW5lcyh0aGlzLnN0YXJ0TGluZSwgdGhpcy5zdGFydExpbmUgKyB0
aGlzLmxpbmVzQ291bnQpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFyIGZpcnN0
TGluZSA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUodGhpcy5zdGFydExpbmUsICJsaW5l
LXJvdyIpOwotICAgICAgICAgICAgdmFyIHBhcmVudEVsZW1lbnQgPSBmaXJzdExpbmUucGFyZW50
RWxlbWVudDsKLSAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuX3JlbGVhc2VMaW5lc0hpZ2hs
aWdodCh0aGlzLnN0YXJ0TGluZSwgdGhpcy5zdGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQpOwot
Ci0gICAgICAgICAgICBwYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmVsZW1lbnQsIGZp
cnN0TGluZSk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFydExpbmU7IGkgPCB0
aGlzLnN0YXJ0TGluZSArIHRoaXMubGluZXNDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGxpbmVSb3cgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGksICJsaW5lLXJvdyIp
OwotICAgICAgICAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5yZW1vdmVBdHRyaWJ1dGUoaSwgImxp
bmUtcm93Iik7Ci0gICAgICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5fY2FjaGVkUm93cy5w
dXNoKGxpbmVSb3cpOwotICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQo
bGluZVJvdyk7CisgICAgICAgICAgICB2YXIgZWxlbWVudEluc2VydGVkID0gZmFsc2U7CisgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2V4cGFuZGVkTGluZVJvd3MubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX2V4cGFuZGVkTGlu
ZVJvd3NbaV07CisgICAgICAgICAgICAgICAgdmFyIHBhcmVudEVsZW1lbnQgPSBsaW5lUm93LnBh
cmVudEVsZW1lbnQ7CisgICAgICAgICAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50SW5zZXJ0ZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW1lbnRJbnNlcnRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBw
YXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmVsZW1lbnQsIGxpbmVSb3cpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuX3Jl
bGVhc2VMaW5lc0hpZ2hsaWdodChsaW5lUm93KTsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50
RWxlbWVudC5yZW1vdmVDaGlsZChsaW5lUm93KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fZXhwYW5kZWRMaW5lUm93czsKICAgICAg
ICAgfQogICAgIH0sCiAKICAgICBnZXQgaGVpZ2h0KCkKICAgICB7Ci0gICAgICAgIGlmICghdGhp
cy5fZXhwYW5kZWQpCisgICAgICAgIGlmICghdGhpcy5fZXhwYW5kZWRMaW5lUm93cykKICAgICAg
ICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0OwogICAgICAgICB2YXIgcmVz
dWx0ID0gMDsKLSAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhcnRMaW5lOyBpIDwgdGhpcy5z
dGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQ7ICsraSkgewotICAgICAgICAgICAgdmFyIGxpbmVS
b3cgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGksICJsaW5lLXJvdyIpOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2V4cGFuZGVkTGluZVJvd3MubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fZXhwYW5kZWRMaW5lUm93c1tpXTsK
ICAgICAgICAgICAgIHJlc3VsdCArPSBsaW5lUm93Lm9mZnNldEhlaWdodDsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNzQ4LDI2ICsxMDAzLDIxIEBAIFdlYkluc3BlY3Rv
ci5UZXh0Q2h1bmsucHJvdG90eXBlID0gewogCiAgICAgX2NyZWF0ZVJvdzogZnVuY3Rpb24obGlu
ZU51bWJlcikKICAgICB7Ci0gICAgICAgIHZhciBjYWNoZWRSb3dzID0gdGhpcy5fdGV4dFZpZXdl
ci5fY2FjaGVkUm93czsKLSAgICAgICAgaWYgKGNhY2hlZFJvd3MubGVuZ3RoKSB7Ci0gICAgICAg
ICAgICB2YXIgbGluZVJvdyA9IGNhY2hlZFJvd3NbY2FjaGVkUm93cy5sZW5ndGggLSAxXTsKLSAg
ICAgICAgICAgIGNhY2hlZFJvd3MubGVuZ3RoLS07Ci0gICAgICAgICAgICB2YXIgbGluZU51bWJl
ckVsZW1lbnQgPSBsaW5lUm93LmZpcnN0Q2hpbGQ7Ci0gICAgICAgICAgICB2YXIgbGluZUNvbnRl
bnRFbGVtZW50ID0gbGluZVJvdy5sYXN0Q2hpbGQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICB2YXIgbGluZVJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0KLSAgICAg
ICAgICAgIHZhciBsaW5lTnVtYmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRk
Iik7Ci0gICAgICAgICAgICBsaW5lTnVtYmVyRWxlbWVudC5jbGFzc05hbWUgPSAid2Via2l0LWxp
bmUtbnVtYmVyIjsKLSAgICAgICAgICAgIGxpbmVSb3cuYXBwZW5kQ2hpbGQobGluZU51bWJlckVs
ZW1lbnQpOwotCi0gICAgICAgICAgICB2YXIgbGluZUNvbnRlbnRFbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAgICAgICAgIGxpbmVDb250ZW50RWxlbWVudC5jbGFz
c05hbWUgPSAid2Via2l0LWxpbmUtY29udGVudCI7Ci0gICAgICAgICAgICBsaW5lUm93LmFwcGVu
ZENoaWxkKGxpbmVDb250ZW50RWxlbWVudCk7Ci0gICAgICAgIH0KKyAgICAgICAgdmFyIGxpbmVS
b3cgPSB0aGlzLl90ZXh0Vmlld2VyLl9jYWNoZWRSb3dzLnBvcCgpIHx8IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICBsaW5lUm93LmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVy
OwotICAgICAgICBsaW5lTnVtYmVyRWxlbWVudC50ZXh0Q29udGVudCA9IGxpbmVOdW1iZXIgKyAx
OwotICAgICAgICBsaW5lQ29udGVudEVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLl90ZXh0TW9k
ZWwubGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgbGluZVJvdy5jbGFzc05hbWUgPSAid2Via2l0
LWxpbmUtY29udGVudCI7CisgICAgICAgIGxpbmVSb3cudGV4dENvbnRlbnQgPSB0aGlzLl90ZXh0
TW9kZWwubGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgaWYgKCFsaW5lUm93LnRleHRDb250ZW50
KQorICAgICAgICAgICAgbGluZVJvdy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJiciIpKTsKICAgICAgICAgcmV0dXJuIGxpbmVSb3c7CisgICAgfSwKKworICAgIGdldEV4cGFu
ZGVkTGluZVJvdzogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIGlmICghdGhp
cy5fZXhwYW5kZWQgfHwgbGluZU51bWJlciA8IHRoaXMuc3RhcnRMaW5lIHx8IGxpbmVOdW1iZXIg
Pj0gdGhpcy5zdGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQpCisgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgaWYgKCF0aGlzLl9leHBhbmRlZExpbmVSb3dzKQorICAgICAgICAgICAg
cmV0dXJuIHRoaXMuZWxlbWVudDsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkTGluZVJv
d3NbbGluZU51bWJlciAtIHRoaXMuc3RhcnRMaW5lXTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRWaWV3ZXIuY3NzIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0Vmlld2VyLmNzcwppbmRleCBiZWU5ZmU1
YzM5NTBhZDA0ODM5Zjc5YTA1YjgzYmIwNjllZTQ0NDMxLi41NDk1N2I5YTBlZmExZWI0ODY5NDk4
MDlkZTIzZTgyNTNkYzZiMzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL3RleHRWaWV3ZXIuY3NzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvdGV4dFZpZXdlci5jc3MKQEAgLTksMTIgKzksMzQgQEAKIH0KIAogLnRleHQtZWRp
dG9yLWxpbmVzIHsKLSAgICBib3JkZXI6IDA7Ci0gICAgLXdlYmtpdC1ib3JkZXItaG9yaXpvbnRh
bC1zcGFjaW5nOiAwOwotICAgIC13ZWJraXQtYm9yZGVyLXZlcnRpY2FsLXNwYWNpbmc6IDA7Cisg
ICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMDsKKyAgICBsZWZ0OiAwOworICAgIGJv
dHRvbTogMDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6
IG5vbmU7Cit9CisKKy50ZXh0LWVkaXRvci1jb250ZW50cyB7CisgICAgcG9zaXRpb246IGFic29s
dXRlOworICAgIHRvcDogMDsKKyAgICBsZWZ0OiAwOworICAgIHJpZ2h0OiAwOworICAgIGJvdHRv
bTogMDsKKyAgICBvdmVyZmxvdzogYXV0bzsKICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0
OwogfQogCisudGV4dC1lZGl0b3ItZWRpdGFibGUgeworICAgIC13ZWJraXQtdXNlci1tb2RpZnk6
IHJlYWQtd3JpdGUtcGxhaW50ZXh0LW9ubHk7Cit9CisKKy53ZWJraXQtbGluZS1kZWNvcmF0aW9u
cyB7CisgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CisgICAgLXdlYmtpdC11c2VyLXNlbGVjdDog
bm9uZTsKKyAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHk7Cit9CisKIC53ZWJraXQt
aHRtbC1tZXNzYWdlLWJ1YmJsZSB7CiAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiBibGFjayAwcHgg
MnB4IDVweDsKICAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDlweDsKQEAgLTYzLDcgKzg1LDYg
QEAKICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAg
IHdvcmQtYnJlYWs6IG5vcm1hbDsKLSAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAg
IHBhZGRpbmctcmlnaHQ6IDRweDsKICAgICBwYWRkaW5nLWxlZnQ6IDZweDsKIH0KQEAgLTg1LDEy
ICsxMDYsNiBAQAogICAgIG1hcmdpbi1yaWdodDogLTEwcHg7CiB9CiAKLS53ZWJraXQtbGluZS1j
b250ZW50IHsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBwYWRkaW5nLWxlZnQ6IDJweDsKLSAgICB2
ZXJ0aWNhbC1hbGlnbjogdG9wOwotfQotCiAud2Via2l0LWJyZWFrcG9pbnQgLndlYmtpdC1saW5l
LW51bWJlci1vdXRlciB7CiAgICAgY29sb3I6IHdoaXRlOwogICAgIGJvcmRlci13aWR0aDogMCAx
NHB4IDBweCAycHg7CkBAIC0xMzYsMjEgKzE1MSwyMSBAQAogICAgIG9wYWNpdHk6IDAuMzsKIH0K
IAotLndlYmtpdC1leGVjdXRpb24tbGluZSAud2Via2l0LWxpbmUtY29udGVudCB7Cisud2Via2l0
LWV4ZWN1dGlvbi1saW5lLndlYmtpdC1saW5lLWNvbnRlbnQgewogICAgIGJhY2tncm91bmQtY29s
b3I6IHJnYigxNzEsIDE5MSwgMjU0KTsKICAgICBvdXRsaW5lOiAxcHggc29saWQgcmdiKDY0LCAx
MTUsIDI0NCk7CiB9CiAKLS5kaWZmLWNvbnRhaW5lciAud2Via2l0LWFkZGVkLWxpbmUgLndlYmtp
dC1saW5lLWNvbnRlbnQgeworLmRpZmYtY29udGFpbmVyIC53ZWJraXQtYWRkZWQtbGluZS53ZWJr
aXQtbGluZS1jb250ZW50IHsKICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjIwLCAyNTUsIDIy
MCk7CiB9CiAKLS5kaWZmLWNvbnRhaW5lciAud2Via2l0LXJlbW92ZWQtbGluZSAud2Via2l0LWxp
bmUtY29udGVudCB7CisuZGlmZi1jb250YWluZXIgLndlYmtpdC1yZW1vdmVkLWxpbmUud2Via2l0
LWxpbmUtY29udGVudCB7CiAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjIwLCAyMjAp
OwogICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwogfQogCi0uZGlmZi1jb250YWlu
ZXIgLndlYmtpdC1jaGFuZ2VkLWxpbmUgLndlYmtpdC1saW5lLWNvbnRlbnQgeworLmRpZmYtY29u
dGFpbmVyIC53ZWJraXQtY2hhbmdlZC1saW5lLndlYmtpdC1saW5lLWNvbnRlbnQgewogICAgIGJh
Y2tncm91bmQtY29sb3I6IHJnYigyMjAsIDIyMCwgMjU1KTsKIH0KIApAQCAtMTY0LDcgKzE3OSw3
IEBACiAgICAgY29sb3I6IGJsYWNrOwogfQogCi0ud2Via2l0LWhpZ2hsaWdodGVkLWxpbmUgLndl
YmtpdC1saW5lLWNvbnRlbnQgeworLndlYmtpdC1oaWdobGlnaHRlZC1saW5lLndlYmtpdC1saW5l
LWNvbnRlbnQgewogICAgIC13ZWJraXQtYW5pbWF0aW9uOiAiZmFkZW91dCIgMnMgMHM7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80911</attachid>
            <date>2011-02-02 04:58:56 -0800</date>
            <delta_ts>2011-02-02 06:00:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53299-20110202155853.patch</filename>
            <type>text/plain</type>
            <size>57057</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwZjY5MDBhZGVhMmFlMzRhZDFiZmQyZWZmN2ZhY2NkMDI1MTNlMTI5Li4y
ZWE2ZmIzNzc0NDlmOWYzMDIyOTA3MWQyMGVmNWZhOTI4YzQ0YWQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsOTggQEAKKzIwMTEtMDItMDEgIEFuZHJleSBBZGFpa2luICA8YWFuZHJleUBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdl
YiBJbnNwZWN0b3I6IFVzZSBESVZzIGluc3RlYWQgb2YgVEFCTEUgaW4gVGV4dFZpZXdlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMyOTkKKworICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9jcmVhdGVUZXh0Vmlld2VyKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX21vdXNlRG93bik6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRWaWV3ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJv
dG90eXBlLnNldCBtaW1lVHlwZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5w
cm90b3R5cGUucmV2ZWFsTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5w
cm90b3R5cGUuYWRkRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdl
ci5wcm90b3R5cGUucmVtb3ZlRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4
dFZpZXdlci5wcm90b3R5cGUubWFya0FuZFJldmVhbFJhbmdlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5oaWdobGlnaHRMaW5lKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5jbGVhckxpbmVIaWdobGlnaHQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLmZyZWVDYWNoZWRFbGVtZW50cyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUuX2hhbmRsZUtleURv
d24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLmVkaXRMaW5l
LmZpbmlzaEVkaXRpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlLmVkaXRMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlw
ZS5iZWdpblVwZGF0ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlLmVuZFVwZGF0ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlLnJlc2l6ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUu
X3RleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlw
ZS5fdXBkYXRlUGFuZWxPZmZzZXRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2Vy
LnByb3RvdHlwZS5fc3luY1Njcm9sbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdl
ci5wcm90b3R5cGUuX3N5bmNEZWNvcmF0aW9uc0ZvckxpbmUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLnNldCBzeW5jU2Nyb2xsTGlzdGVuZXIpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLmdldCB0
ZXh0TW9kZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwu
cHJvdG90eXBlLmFkZERlY29yYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLnJlbW92ZURlY29yYXRpb24pOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLnJldmVhbExpbmUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLm1h
a2VMaW5lQUNodW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBh
bmVsLnByb3RvdHlwZS50ZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuYmVnaW5VcGRhdGVzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5lbmRVcGRhdGVzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5yZXNp
emUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90
eXBlLl9zY3JvbGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFu
ZWwucHJvdG90eXBlLl9zY2hlZHVsZVJlcGFpbnRBbGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLl9idWlsZENodW5rcyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX3JlcGFpbnRB
bGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90
eXBlLl9jaHVua051bWJlckZvckxpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLl9jaHVua0ZvckxpbmUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvckd1dHRlclBhbmVsLnByb3RvdHlwZS5mcmVlQ2FjaGVkRWxlbWVudHMpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbC5wcm90b3R5cGUuX2NyZWF0ZU5l
d0NodW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFuZWwucHJv
dG90eXBlLl9leHBhbmRDaHVua3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JH
dXR0ZXJDaHVuayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5r
LnByb3RvdHlwZS5nZXQgZXhwYW5kZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JHdXR0ZXJDaHVuay5wcm90b3R5cGUuc2V0IGV4cGFuZGVkKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsucHJvdG90eXBlLmdldCBoZWlnaHQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuay5wcm90b3R5cGUuX2NyZWF0ZVJv
dyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuc2V0IHN5bmNEZWNv
cmF0aW9uc0ZvckxpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFu
ZWwucHJvdG90eXBlLnNldCBtaW1lVHlwZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvck1haW5QYW5lbC5wcm90b3R5cGUubWFya0FuZFJldmVhbFJhbmdlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5oaWdobGlnaHRMaW5lKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5jbGVh
ckxpbmVIaWdobGlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFu
ZWwucHJvdG90eXBlLmZyZWVDYWNoZWRFbGVtZW50cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2J1aWxkQ2h1bmtzKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fY3JlYXRlTmV3Q2h1bmsp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9l
eHBhbmRDaHVua3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwu
cHJvdG90eXBlLl9oaWdobGlnaHREYXRhUmVhZHkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9wYWludExpbmVzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcGFpbnRMaW5lKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcmVsZWFzZUxp
bmVzSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVs
LnByb3RvdHlwZS5fZ2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcmVzdG9yZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3NlbGVjdGlvblRvUG9zaXRp
b24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBl
Ll9wb3NpdGlvblRvU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
TWFpblBhbmVsLnByb3RvdHlwZS5fYXBwZW5kVGV4dE5vZGUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9oYW5kbGVEb21VcGRhdGVzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5hZGREZWNvcmF0aW9uKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5zZXQgZXhw
YW5kZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90
eXBlLmdldCBoZWlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1
bmsucHJvdG90eXBlLmdldEV4cGFuZGVkTGluZVJvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUuX2NyZWF0ZVJvdyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvdGV4dFZpZXdlci5jc3M6
CisgICAgICAgICgudGV4dC1lZGl0b3ItbGluZXMpOgorICAgICAgICAoLnRleHQtZWRpdG9yLWNv
bnRlbnRzKToKKyAgICAgICAgKC50ZXh0LWVkaXRvci1lZGl0YWJsZSk6CisgICAgICAgICgud2Vi
a2l0LWxpbmUtZGVjb3JhdGlvbnMpOgorICAgICAgICAoLndlYmtpdC1saW5lLW51bWJlcik6Cisg
ICAgICAgICgud2Via2l0LWV4ZWN1dGlvbi1saW5lLndlYmtpdC1saW5lLWNvbnRlbnQpOgorICAg
ICAgICAoLmRpZmYtY29udGFpbmVyIC53ZWJraXQtYWRkZWQtbGluZS53ZWJraXQtbGluZS1jb250
ZW50KToKKyAgICAgICAgKC5kaWZmLWNvbnRhaW5lciAud2Via2l0LXJlbW92ZWQtbGluZS53ZWJr
aXQtbGluZS1jb250ZW50KToKKyAgICAgICAgKC5kaWZmLWNvbnRhaW5lciAud2Via2l0LWNoYW5n
ZWQtbGluZS53ZWJraXQtbGluZS1jb250ZW50KToKKyAgICAgICAgKC53ZWJraXQtaGlnaGxpZ2h0
ZWQtbGluZS53ZWJraXQtbGluZS1jb250ZW50KToKKwogMjAxMS0wMS0yNSAgTmlrb2xhcyBaaW1t
ZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaXJr
IFNjaHVsemUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZUZyYW1lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3Vy
Y2VGcmFtZS5qcwppbmRleCBjZTM1MzFmYWFmMjgwZjQ3YjJlNTkzMDc3ODg1YTI1NzQ1MTQ0Zjlk
Li5kYmY5NDdmYWFiZmQzNzgwNjRjNTJjMzc1OWZiM2IwMGI4NmFkNmQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKQEAgLTIwOCw5
ICsyMDgsNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAg
ICB0aGlzLl90ZXh0Vmlld2VyLmVuZFVwZGF0ZXMoKTsKIAogICAgICAgICBXZWJJbnNwZWN0b3Iu
ZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVs
LkV2ZW50cy5CcmVha3BvaW50QWRkZWQsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7Ci0K
LSAgICAgICAgaWYgKHRoaXMuX2NhbkVkaXRTY3JpcHRzKQotICAgICAgICAgICAgdGhpcy5fdGV4
dFZpZXdlci5lZGl0Q2FsbGJhY2sgPSB0aGlzLl9lZGl0TGluZS5iaW5kKHRoaXMpOwogICAgIH0s
CiAKICAgICBfc2V0VGV4dFZpZXdlckRlY29yYXRpb25zOiBmdW5jdGlvbigpCkBAIC01MjYsNyAr
NTIzLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAg
dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3
ZWJraXQtbGluZS1udW1iZXIiKTsKICAgICAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRhcmdldC5wYXJlbnRF
bGVtZW50LmxpbmVOdW1iZXI7CisgICAgICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRh
cmdldC5saW5lTnVtYmVyOwogICAgICAgICB2YXIgb3JpZ2luYWxMaW5lTnVtYmVyID0gdGhpcy5f
Zm9ybWF0dGVyLmZvcm1hdHRlZExpbmVOdW1iZXJUb09yaWdpbmFsTGluZU51bWJlcih0ZXh0Vmll
d2VyTGluZU51bWJlcik7CiAKICAgICAgICAgdmFyIGNvbnRleHRNZW51ID0gbmV3IFdlYkluc3Bl
Y3Rvci5Db250ZXh0TWVudSgpOwpAQCAtNTkyLDcgKzU4OSw3IEBAIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQu
ZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWxpbmUtbnVtYmVyIik7CiAgICAg
ICAgIGlmICghdGFyZ2V0KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgb3JpZ2lu
YWxMaW5lTnVtYmVyID0gdGhpcy5fZm9ybWF0dGVyLmZvcm1hdHRlZExpbmVOdW1iZXJUb09yaWdp
bmFsTGluZU51bWJlcih0YXJnZXQucGFyZW50RWxlbWVudC5saW5lTnVtYmVyKTsKKyAgICAgICAg
dmFyIG9yaWdpbmFsTGluZU51bWJlciA9IHRoaXMuX2Zvcm1hdHRlci5mb3JtYXR0ZWRMaW5lTnVt
YmVyVG9PcmlnaW5hbExpbmVOdW1iZXIodGFyZ2V0LmxpbmVOdW1iZXIpOwogCiAgICAgICAgIHZh
ciBicmVha3BvaW50ID0gdGhpcy5fZmluZEJyZWFrcG9pbnQob3JpZ2luYWxMaW5lTnVtYmVyKTsK
ICAgICAgICAgaWYgKGJyZWFrcG9pbnQpIHsKQEAgLTg1NSwxMSArODUyLDEwIEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICghUHJlZmVyZW5jZXMu
Y2FuRWRpdFNjcmlwdFNvdXJjZSB8fCAhdGhpcy5faXNTY3JpcHQpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JT
ZWxmV2l0aE5vZGVOYW1lKCJURCIpOwotICAgICAgICBpZiAoIXRhcmdldCB8fCB0YXJnZXQucGFy
ZW50RWxlbWVudC5maXJzdENoaWxkID09PSB0YXJnZXQpCisgICAgICAgIHZhciBsaW5lUm93ID0g
ZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoIndlYmtpdC1saW5lLWNv
bnRlbnQiKTsKKyAgICAgICAgaWYgKCFsaW5lUm93KQogICAgICAgICAgICAgcmV0dXJuOyAgLy8g
RG8gbm90IHRyaWdnZXIgZWRpdGluZyBmcm9tIGxpbmUgbnVtYmVycy4KIAotICAgICAgICB2YXIg
bGluZVJvdyA9IHRhcmdldC5wYXJlbnRFbGVtZW50OwogICAgICAgICB2YXIgbGluZU51bWJlciA9
IGxpbmVSb3cubGluZU51bWJlcjsKICAgICAgICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNl
SURGb3JMaW5lKGxpbmVOdW1iZXIpOwogICAgICAgICBpZiAoIXNvdXJjZUlEKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzCmluZGV4IGVhMzY1
MTMyNTlkNTcxZTlhM2M0YTk3NzMzNjI1NDlkODFhNGMzNDcuLjg1MzI5NGJkZTQyZjM3ZmJlYjk3
ZTYzYTBhMjY1N2M1YmIxOGM2OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1RleHRWaWV3ZXIuanMKQEAgLTMyLDM3ICszMiwyMSBAQAogV2ViSW5zcGVjdG9y
LlRleHRWaWV3ZXIgPSBmdW5jdGlvbih0ZXh0TW9kZWwsIHBsYXRmb3JtLCB1cmwpCiB7CiAgICAg
dGhpcy5fdGV4dE1vZGVsID0gdGV4dE1vZGVsOwotICAgIHRoaXMuX3RleHRNb2RlbC5jaGFuZ2VM
aXN0ZW5lciA9IHRoaXMuX2J1aWxkQ2h1bmtzLmJpbmQodGhpcyk7Ci0gICAgdGhpcy5faGlnaGxp
Z2h0ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JIaWdobGlnaHRlcih0aGlzLl90ZXh0
TW9kZWwsIHRoaXMuX2hpZ2hsaWdodERhdGFSZWFkeS5iaW5kKHRoaXMpKTsKKyAgICB0aGlzLl90
ZXh0TW9kZWwuY2hhbmdlTGlzdGVuZXIgPSB0aGlzLl90ZXh0Q2hhbmdlZC5iaW5kKHRoaXMpOwog
CiAgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAg
dGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJ0ZXh0LWVkaXRvciBtb25vc3BhY2UiOwotICAgIHRo
aXMuZWxlbWVudC50YWJJbmRleCA9IDA7Ci0KLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigic2Nyb2xsIiwgdGhpcy5fc2Nyb2xsLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlz
LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuX2hhbmRsZUtleURvd24u
YmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJi
ZWZvcmVjb3B5IiwgdGhpcy5fYmVmb3JlQ29weS5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhp
cy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvcHkiLCB0aGlzLl9jb3B5LmJpbmQodGhpcyks
IGZhbHNlKTsKIAotICAgIHRoaXMuX3VybCA9IHVybDsKLQotICAgIHRoaXMuX2xpbmVzQ29udGFp
bmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7Ci0gICAgdGhpcy5f
bGluZXNDb250YWluZXJFbGVtZW50LmNsYXNzTmFtZSA9ICJ0ZXh0LWVkaXRvci1saW5lcyI7Ci0g
ICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgiY2VsbHNwYWNpbmci
LCAwKTsKLSAgICB0aGlzLl9saW5lc0NvbnRhaW5lckVsZW1lbnQuc2V0QXR0cmlidXRlKCJjZWxs
cGFkZGluZyIsIDApOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9saW5lc0Nv
bnRhaW5lckVsZW1lbnQpOwotCi0gICAgdGhpcy5fZGVmYXVsdENodW5rU2l6ZSA9IDUwOwotICAg
IHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsID0gMDsKLQotICAgIHRoaXMuZnJlZUNhY2hlZEVs
ZW1lbnRzKCk7Ci0gICAgdGhpcy5fYnVpbGRDaHVua3MoKTsKKyAgICB0aGlzLl9tYWluUGFuZWwg
PSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwodGhpcy5fdGV4dE1vZGVsLCB1
cmwsIHRoaXMuX3N5bmNTY3JvbGwuYmluZCh0aGlzKSwgdGhpcy5fc3luY0RlY29yYXRpb25zRm9y
TGluZS5iaW5kKHRoaXMpKTsKKyAgICB0aGlzLl9ndXR0ZXJQYW5lbCA9IG5ldyBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvckd1dHRlclBhbmVsKHRoaXMuX3RleHRNb2RlbCk7CisgICAgdGhpcy5lbGVt
ZW50LmFwcGVuZENoaWxkKHRoaXMuX21haW5QYW5lbC5lbGVtZW50KTsKKyAgICB0aGlzLmVsZW1l
bnQuYXBwZW5kQ2hpbGQodGhpcy5fZ3V0dGVyUGFuZWwuZWxlbWVudCk7CiB9CiAKIFdlYkluc3Bl
Y3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAgICBzZXQgbWltZVR5cGUobWltZVR5cGUp
CiAgICAgewotICAgICAgICB0aGlzLl9oaWdobGlnaHRlci5taW1lVHlwZSA9IG1pbWVUeXBlOwor
ICAgICAgICB0aGlzLl9tYWluUGFuZWwubWltZVR5cGUgPSBtaW1lVHlwZTsKICAgICB9LAogCiAg
ICAgZ2V0IHRleHRNb2RlbCgpCkBAIC03Miw4NSArNTYsMTY2IEBAIFdlYkluc3BlY3Rvci5UZXh0
Vmlld2VyLnByb3RvdHlwZSA9IHsKIAogICAgIHJldmVhbExpbmU6IGZ1bmN0aW9uKGxpbmVOdW1i
ZXIpCiAgICAgewotICAgICAgICBpZiAobGluZU51bWJlciA+PSB0aGlzLl90ZXh0TW9kZWwubGlu
ZXNDb3VudCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgY2h1bmsgPSB0aGlz
Ll9tYWtlTGluZUFDaHVuayhsaW5lTnVtYmVyKTsKLSAgICAgICAgY2h1bmsuZWxlbWVudC5zY3Jv
bGxJbnRvVmlld0lmTmVlZGVkKCk7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5yZXZlYWxMaW5l
KGxpbmVOdW1iZXIpOwogICAgIH0sCiAKICAgICBhZGREZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5l
TnVtYmVyLCBkZWNvcmF0aW9uKQogICAgIHsKLSAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fbWFr
ZUxpbmVBQ2h1bmsobGluZU51bWJlcik7Ci0gICAgICAgIGNodW5rLmFkZERlY29yYXRpb24oZGVj
b3JhdGlvbik7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5hZGREZWNvcmF0aW9uKGxpbmVOdW1i
ZXIsIGRlY29yYXRpb24pOworICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC5hZGREZWNvcmF0aW9u
KGxpbmVOdW1iZXIsIGRlY29yYXRpb24pOwogICAgIH0sCiAKICAgICByZW1vdmVEZWNvcmF0aW9u
OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0aW9uKQogICAgIHsKLSAgICAgICAgdmFyIGNo
dW5rID0gdGhpcy5fbWFrZUxpbmVBQ2h1bmsobGluZU51bWJlcik7Ci0gICAgICAgIGNodW5rLnJl
bW92ZURlY29yYXRpb24oZGVjb3JhdGlvbik7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5yZW1v
dmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRpb24pOworICAgICAgICB0aGlzLl9ndXR0
ZXJQYW5lbC5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRpb24pOwogICAgIH0s
CiAKICAgICBtYXJrQW5kUmV2ZWFsUmFuZ2U6IGZ1bmN0aW9uKHJhbmdlKQogICAgIHsKLSAgICAg
ICAgaWYgKHRoaXMuX3JhbmdlVG9NYXJrKSB7Ci0gICAgICAgICAgICB2YXIgbWFya2VkTGluZSA9
IHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0TGluZTsKLSAgICAgICAgICAgIHRoaXMuX3JhbmdlVG9N
YXJrID0gbnVsbDsKLSAgICAgICAgICAgIHRoaXMuX3BhaW50TGluZXMobWFya2VkTGluZSwgbWFy
a2VkTGluZSArIDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJhbmdlKSB7Ci0gICAgICAg
ICAgICB0aGlzLl9yYW5nZVRvTWFyayA9IHJhbmdlOwotICAgICAgICAgICAgdGhpcy5yZXZlYWxM
aW5lKHJhbmdlLnN0YXJ0TGluZSk7Ci0gICAgICAgICAgICB0aGlzLl9wYWludExpbmVzKHJhbmdl
LnN0YXJ0TGluZSwgcmFuZ2Uuc3RhcnRMaW5lICsgMSk7Ci0gICAgICAgICAgICBpZiAodGhpcy5f
bWFya2VkUmFuZ2VFbGVtZW50KQotICAgICAgICAgICAgICAgIHRoaXMuX21hcmtlZFJhbmdlRWxl
bWVudC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRl
IHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudDsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLm1hcmtB
bmRSZXZlYWxSYW5nZShyYW5nZSk7CiAgICAgfSwKIAogICAgIGhpZ2hsaWdodExpbmU6IGZ1bmN0
aW9uKGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICB0aGlzLmNsZWFyTGluZUhpZ2hsaWdodCgp
OwotICAgICAgICB0aGlzLl9oaWdobGlnaHRlZExpbmUgPSBsaW5lTnVtYmVyOwotICAgICAgICB0
aGlzLnJldmVhbExpbmUobGluZU51bWJlcik7Ci0gICAgICAgIHZhciBjaHVuayA9IHRoaXMuX21h
a2VMaW5lQUNodW5rKGxpbmVOdW1iZXIpOwotICAgICAgICBjaHVuay5hZGREZWNvcmF0aW9uKCJ3
ZWJraXQtaGlnaGxpZ2h0ZWQtbGluZSIpOworICAgICAgICB0aGlzLl9tYWluUGFuZWwuaGlnaGxp
Z2h0TGluZShsaW5lTnVtYmVyKTsKICAgICB9LAogCiAgICAgY2xlYXJMaW5lSGlnaGxpZ2h0OiBm
dW5jdGlvbigpCiAgICAgewotICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2hpZ2hsaWdodGVkTGlu
ZSA9PT0gIm51bWJlciIpIHsKLSAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX21ha2VMaW5l
QUNodW5rKHRoaXMuX2hpZ2hsaWdodGVkTGluZSk7Ci0gICAgICAgICAgICBjaHVuay5yZW1vdmVE
ZWNvcmF0aW9uKCJ3ZWJraXQtaGlnaGxpZ2h0ZWQtbGluZSIpOwotICAgICAgICAgICAgZGVsZXRl
IHRoaXMuX2hpZ2hsaWdodGVkTGluZTsKLSAgICAgICAgfQorICAgICAgICB0aGlzLl9tYWluUGFu
ZWwuY2xlYXJMaW5lSGlnaGxpZ2h0KCk7CiAgICAgfSwKIAogICAgIGZyZWVDYWNoZWRFbGVtZW50
czogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdGhpcy5fY2FjaGVkU3BhbnMgPSBbXTsKLSAg
ICAgICAgdGhpcy5fY2FjaGVkVGV4dE5vZGVzID0gW107Ci0gICAgICAgIHRoaXMuX2NhY2hlZFJv
d3MgPSBbXTsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLmZyZWVDYWNoZWRFbGVtZW50cygpOwor
ICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC5mcmVlQ2FjaGVkRWxlbWVudHMoKTsKKyAgICB9LAor
CisgICAgZWRpdExpbmU6IGZ1bmN0aW9uKGxpbmVSb3csIGNhbGxiYWNrKQorICAgIHsKKyAgICAg
ICAgdGhpcy5fbWFpblBhbmVsLmVkaXRMaW5lKGxpbmVSb3csIGNhbGxiYWNrKTsKKyAgICB9LAor
CisgICAgYmVnaW5VcGRhdGVzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9tYWlu
UGFuZWwuYmVnaW5VcGRhdGVzKCk7CisgICAgICAgIHRoaXMuX2d1dHRlclBhbmVsLmJlZ2luVXBk
YXRlcygpOworICAgIH0sCisKKyAgICBlbmRVcGRhdGVzOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICB0aGlzLl9tYWluUGFuZWwuZW5kVXBkYXRlcygpOworICAgICAgICB0aGlzLl9ndXR0ZXJQ
YW5lbC5lbmRVcGRhdGVzKCk7CisgICAgfSwKKworICAgIHJlc2l6ZTogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLnJlc2l6ZSgpOworICAgICAgICB0aGlzLl9ndXR0
ZXJQYW5lbC5yZXNpemUoKTsKKyAgICAgICAgdGhpcy5fdXBkYXRlUGFuZWxPZmZzZXRzKCk7Cisg
ICAgfSwKKworICAgIC8vIFdlYkluc3BlY3Rvci5UZXh0TW9kZWwgbGlzdGVuZXIKKyAgICBfdGV4
dENoYW5nZWQ6IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSwgb2xkVGV4dCwgbmV3VGV4dCkK
KyAgICB7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC50ZXh0Q2hhbmdlZCgpOworICAgICAgICB0
aGlzLl9ndXR0ZXJQYW5lbC50ZXh0Q2hhbmdlZCgpOworICAgICAgICB0aGlzLl91cGRhdGVQYW5l
bE9mZnNldHMoKTsKKyAgICB9LAorCisgICAgX3VwZGF0ZVBhbmVsT2Zmc2V0czogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgdmFyIGxpbmVOdW1iZXJzV2lkdGggPSB0aGlzLl9ndXR0ZXJQYW5l
bC5lbGVtZW50Lm9mZnNldFdpZHRoOworICAgICAgICBpZiAobGluZU51bWJlcnNXaWR0aCkKKyAg
ICAgICAgICAgIHRoaXMuX21haW5QYW5lbC5lbGVtZW50LnN0eWxlLmxlZnQgPSAobGluZU51bWJl
cnNXaWR0aCArIDIpICsgInB4IjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5fbWFp
blBhbmVsLmVsZW1lbnQuc3R5bGUubGVmdCA9ICIiOyAvLyBVc2UgZGVmYXVsdCB2YWx1ZSBzZXQg
aW4gQ1NTLgorICAgIH0sCisKKyAgICBfc3luY1Njcm9sbDogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgLy8gQXN5bmMgY2FsbCBkdWUgdG8gcGVyZm9ybWFuY2UgcmVhc29ucy4KKyAgICAgICAg
c2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBtYWluRWxlbWVudCA9IHRo
aXMuX21haW5QYW5lbC5lbGVtZW50OworICAgICAgICAgICAgdmFyIGd1dHRlckVsZW1lbnQgPSB0
aGlzLl9ndXR0ZXJQYW5lbC5lbGVtZW50OworCisgICAgICAgICAgICAvLyBIYW5kbGUgaG9yaXpv
bnRhbCBzY3JvbGwgYmFyIGF0IHRoZSBib3R0b20gb2YgdGhlIG1haW4gcGFuZWwuCisgICAgICAg
ICAgICBpZiAoZ3V0dGVyRWxlbWVudC5vZmZzZXRIZWlnaHQgPiBtYWluRWxlbWVudC5jbGllbnRI
ZWlnaHQpCisgICAgICAgICAgICAgICAgZ3V0dGVyRWxlbWVudC5zdHlsZS5wYWRkaW5nQm90dG9t
ID0gKGd1dHRlckVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gbWFpbkVsZW1lbnQuY2xpZW50SGVpZ2h0
KSArICJweCI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ3V0dGVyRWxlbWVu
dC5zdHlsZS5wYWRkaW5nQm90dG9tID0gIiI7CisKKyAgICAgICAgICAgIGd1dHRlckVsZW1lbnQu
c2Nyb2xsVG9wID0gbWFpbkVsZW1lbnQuc2Nyb2xsVG9wOworICAgICAgICB9LmJpbmQodGhpcyks
IDApOworICAgIH0sCisKKyAgICBfc3luY0RlY29yYXRpb25zRm9yTGluZTogZnVuY3Rpb24obGlu
ZU51bWJlcikKKyAgICB7CisgICAgICAgIGlmIChsaW5lTnVtYmVyID49IHRoaXMuX3RleHRNb2Rl
bC5saW5lc0NvdW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBtYWluQ2h1
bmsgPSB0aGlzLl9tYWluUGFuZWwubWFrZUxpbmVBQ2h1bmsobGluZU51bWJlcik7CisgICAgICAg
IHZhciBndXR0ZXJDaHVuayA9IHRoaXMuX2d1dHRlclBhbmVsLm1ha2VMaW5lQUNodW5rKGxpbmVO
dW1iZXIpOworICAgICAgICBndXR0ZXJDaHVuay5lbGVtZW50LnN0eWxlLmhlaWdodCA9IG1haW5D
aHVuay5lbGVtZW50Lm9mZnNldEhlaWdodCArICJweCI7CisgICAgfQorfQorCitXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbCA9IGZ1bmN0aW9uKHRleHRNb2RlbCkKK3sKKyAgICB0
aGlzLl90ZXh0TW9kZWwgPSB0ZXh0TW9kZWw7CisKKyAgICB0aGlzLl9kZWZhdWx0Q2h1bmtTaXpl
ID0gNTA7CisgICAgdGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwgPSAwOworfQorCitXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUgPSB7CisgICAgZ2V0IHRleHRN
b2RlbCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdGV4dE1vZGVsOworICAgIH0sCisK
KyAgICByZXZlYWxMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYg
KGxpbmVOdW1iZXIgPj0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgdmFyIGNodW5rID0gdGhpcy5tYWtlTGluZUFDaHVuayhsaW5lTnVt
YmVyKTsKKyAgICAgICAgY2h1bmsuZWxlbWVudC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7Cisg
ICAgfSwKKworICAgIGFkZERlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGRlY29yYXRp
b24pCisgICAgeworICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLm1ha2VMaW5lQUNodW5rKGxpbmVO
dW1iZXIpOworICAgICAgICBjaHVuay5hZGREZWNvcmF0aW9uKGRlY29yYXRpb24pOworICAgIH0s
CisKKyAgICByZW1vdmVEZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBkZWNvcmF0aW9u
KQorICAgIHsKKyAgICAgICAgdmFyIGNodW5rID0gdGhpcy5tYWtlTGluZUFDaHVuayhsaW5lTnVt
YmVyKTsKKyAgICAgICAgY2h1bmsucmVtb3ZlRGVjb3JhdGlvbihkZWNvcmF0aW9uKTsKKyAgICB9
LAorCisgICAgdGV4dENoYW5nZWQ6IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSwgb2xkVGV4
dCwgbmV3VGV4dCkKKyAgICB7CisgICAgICAgIHRoaXMuX2J1aWxkQ2h1bmtzKCk7CiAgICAgfSwK
IAogICAgIF9idWlsZENodW5rczogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdGhpcy5fbGlu
ZXNDb250YWluZXJFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgIHRoaXMuZWxlbWVu
dC5yZW1vdmVDaGlsZHJlbigpOwogCiAgICAgICAgIHRoaXMuX3RleHRDaHVua3MgPSBbXTsKICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudDsgaSAr
PSB0aGlzLl9kZWZhdWx0Q2h1bmtTaXplKSB7Ci0gICAgICAgICAgICB2YXIgY2h1bmsgPSBuZXcg
V2ViSW5zcGVjdG9yLlRleHRDaHVuayh0aGlzLCBpLCBpICsgdGhpcy5fZGVmYXVsdENodW5rU2l6
ZSk7CisgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9jcmVhdGVOZXdDaHVuayhpLCBpICsg
dGhpcy5fZGVmYXVsdENodW5rU2l6ZSk7CiAgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnB1
c2goY2h1bmspOwotICAgICAgICAgICAgdGhpcy5fbGluZXNDb250YWluZXJFbGVtZW50LmFwcGVu
ZENoaWxkKGNodW5rLmVsZW1lbnQpOworICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENo
aWxkKGNodW5rLmVsZW1lbnQpOwogICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5faW5kZXhDaHVu
a3MoKTsKLSAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZXIucmVzZXQoKTsKICAgICAgICAgdGhpcy5f
cmVwYWludEFsbCgpOwogICAgIH0sCiAKLSAgICBfbWFrZUxpbmVBQ2h1bms6IGZ1bmN0aW9uKGxp
bmVOdW1iZXIpCisgICAgbWFrZUxpbmVBQ2h1bms6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAg
ewogICAgICAgICBpZiAoIXRoaXMuX3RleHRDaHVua3MpCiAgICAgICAgICAgICB0aGlzLl9idWls
ZENodW5rcygpOwpAQCAtMTYzLDMxICsyMjgsMzAgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIu
cHJvdG90eXBlID0gewogICAgICAgICB2YXIgd2FzRXhwYW5kZWQgPSBvbGRDaHVuay5leHBhbmRl
ZDsKICAgICAgICAgb2xkQ2h1bmsuZXhwYW5kZWQgPSBmYWxzZTsKIAotICAgICAgICB2YXIgaW5z
ZXJ0SW5kZXggPSBvbGRDaHVuay5jaHVua051bWJlciArIDE7CisgICAgICAgIHZhciBpbnNlcnRJ
bmRleCA9IGNodW5rTnVtYmVyICsgMTsKIAogICAgICAgICAvLyBQcmVmaXggY2h1bmsuCiAgICAg
ICAgIGlmIChsaW5lTnVtYmVyID4gb2xkQ2h1bmsuc3RhcnRMaW5lKSB7Ci0gICAgICAgICAgICB2
YXIgcHJlZml4Q2h1bmsgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRDaHVuayh0aGlzLCBvbGRDaHVu
ay5zdGFydExpbmUsIGxpbmVOdW1iZXIpOworICAgICAgICAgICAgdmFyIHByZWZpeENodW5rID0g
dGhpcy5fY3JlYXRlTmV3Q2h1bmsob2xkQ2h1bmsuc3RhcnRMaW5lLCBsaW5lTnVtYmVyKTsKICAg
ICAgICAgICAgIHRoaXMuX3RleHRDaHVua3Muc3BsaWNlKGluc2VydEluZGV4KyssIDAsIHByZWZp
eENodW5rKTsKLSAgICAgICAgICAgIHRoaXMuX2xpbmVzQ29udGFpbmVyRWxlbWVudC5pbnNlcnRC
ZWZvcmUocHJlZml4Q2h1bmsuZWxlbWVudCwgb2xkQ2h1bmsuZWxlbWVudCk7CisgICAgICAgICAg
ICB0aGlzLmVsZW1lbnQuaW5zZXJ0QmVmb3JlKHByZWZpeENodW5rLmVsZW1lbnQsIG9sZENodW5r
LmVsZW1lbnQpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gTGluZSBjaHVuay4KLSAgICAgICAg
dmFyIGxpbmVDaHVuayA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dENodW5rKHRoaXMsIGxpbmVOdW1i
ZXIsIGxpbmVOdW1iZXIgKyAxKTsKKyAgICAgICAgdmFyIGxpbmVDaHVuayA9IHRoaXMuX2NyZWF0
ZU5ld0NodW5rKGxpbmVOdW1iZXIsIGxpbmVOdW1iZXIgKyAxKTsKICAgICAgICAgdGhpcy5fdGV4
dENodW5rcy5zcGxpY2UoaW5zZXJ0SW5kZXgrKywgMCwgbGluZUNodW5rKTsKLSAgICAgICAgdGhp
cy5fbGluZXNDb250YWluZXJFbGVtZW50Lmluc2VydEJlZm9yZShsaW5lQ2h1bmsuZWxlbWVudCwg
b2xkQ2h1bmsuZWxlbWVudCk7CisgICAgICAgIHRoaXMuZWxlbWVudC5pbnNlcnRCZWZvcmUobGlu
ZUNodW5rLmVsZW1lbnQsIG9sZENodW5rLmVsZW1lbnQpOwogCiAgICAgICAgIC8vIFN1ZmZpeCBj
aHVuay4KICAgICAgICAgaWYgKG9sZENodW5rLnN0YXJ0TGluZSArIG9sZENodW5rLmxpbmVzQ291
bnQgPiBsaW5lTnVtYmVyICsgMSkgewotICAgICAgICAgICAgdmFyIHN1ZmZpeENodW5rID0gbmV3
IFdlYkluc3BlY3Rvci5UZXh0Q2h1bmsodGhpcywgbGluZU51bWJlciArIDEsIG9sZENodW5rLnN0
YXJ0TGluZSArIG9sZENodW5rLmxpbmVzQ291bnQpOworICAgICAgICAgICAgdmFyIHN1ZmZpeENo
dW5rID0gdGhpcy5fY3JlYXRlTmV3Q2h1bmsobGluZU51bWJlciArIDEsIG9sZENodW5rLnN0YXJ0
TGluZSArIG9sZENodW5rLmxpbmVzQ291bnQpOwogICAgICAgICAgICAgdGhpcy5fdGV4dENodW5r
cy5zcGxpY2UoaW5zZXJ0SW5kZXgsIDAsIHN1ZmZpeENodW5rKTsKLSAgICAgICAgICAgIHRoaXMu
X2xpbmVzQ29udGFpbmVyRWxlbWVudC5pbnNlcnRCZWZvcmUoc3VmZml4Q2h1bmsuZWxlbWVudCwg
b2xkQ2h1bmsuZWxlbWVudCk7CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuaW5zZXJ0QmVmb3Jl
KHN1ZmZpeENodW5rLmVsZW1lbnQsIG9sZENodW5rLmVsZW1lbnQpOwogICAgICAgICB9CiAKICAg
ICAgICAgLy8gUmVtb3ZlIGVuY2xvc2luZyBjaHVuay4KLSAgICAgICAgdGhpcy5fdGV4dENodW5r
cy5zcGxpY2Uob2xkQ2h1bmsuY2h1bmtOdW1iZXIsIDEpOwotICAgICAgICB0aGlzLl9saW5lc0Nv
bnRhaW5lckVsZW1lbnQucmVtb3ZlQ2hpbGQob2xkQ2h1bmsuZWxlbWVudCk7Ci0gICAgICAgIHRo
aXMuX2luZGV4Q2h1bmtzKCk7CisgICAgICAgIHRoaXMuX3RleHRDaHVua3Muc3BsaWNlKGNodW5r
TnVtYmVyLCAxKTsKKyAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkKG9sZENodW5rLmVs
ZW1lbnQpOwogCiAgICAgICAgIGlmICh3YXNFeHBhbmRlZCkgewogICAgICAgICAgICAgaWYgKHBy
ZWZpeENodW5rKQpAQCAtMjAwLDE5ICsyNjQsMzA2IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2Vy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIGxpbmVDaHVuazsKICAgICB9LAogCi0gICAg
X2luZGV4Q2h1bmtzOiBmdW5jdGlvbigpCisgICAgX3Njcm9sbDogZnVuY3Rpb24oKQogICAgIHsK
LSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytp
KQotICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rc1tpXS5jaHVua051bWJlciA9IGk7CisgICAg
ICAgIHRoaXMuX3NjaGVkdWxlUmVwYWludEFsbCgpOworICAgICAgICBpZiAodGhpcy5fc3luY1Nj
cm9sbExpc3RlbmVyKQorICAgICAgICAgICAgdGhpcy5fc3luY1Njcm9sbExpc3RlbmVyKCk7CiAg
ICAgfSwKIAotICAgIF9zY3JvbGw6IGZ1bmN0aW9uKCkKKyAgICBfc2NoZWR1bGVSZXBhaW50QWxs
OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB2YXIgc2Nyb2xsVG9wID0gdGhpcy5lbGVtZW50
LnNjcm9sbFRvcDsKLSAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
IGlmIChzY3JvbGxUb3AgPT09IHRoaXMuZWxlbWVudC5zY3JvbGxUb3ApCi0gICAgICAgICAgICAg
ICAgdGhpcy5fcmVwYWludEFsbCgpOwotICAgICAgICB9LmJpbmQodGhpcyksIDUwKTsKKyAgICAg
ICAgaWYgKHRoaXMuX3JlcGFpbnRBbGxUaW1lcikKKyAgICAgICAgICAgIGNsZWFyVGltZW91dCh0
aGlzLl9yZXBhaW50QWxsVGltZXIpOworICAgICAgICB0aGlzLl9yZXBhaW50QWxsVGltZXIgPSBz
ZXRUaW1lb3V0KHRoaXMuX3JlcGFpbnRBbGwuYmluZCh0aGlzKSwgNTApOworICAgIH0sCisKKyAg
ICBiZWdpblVwZGF0ZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3BhaW50Q29h
bGVzY2luZ0xldmVsKys7CisgICAgfSwKKworICAgIGVuZFVwZGF0ZXM6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsLS07CisgICAgICAgIGlmICgh
dGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwpCisgICAgICAgICAgICB0aGlzLl9yZXBhaW50QWxs
KCk7CisgICAgfSwKKworICAgIF9jaHVua051bWJlckZvckxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1i
ZXIpCisgICAgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RleHRDaHVua3Mu
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBsaW5lID0gdGhpcy5fdGV4dENodW5rc1tp
XS5zdGFydExpbmU7CisgICAgICAgICAgICBpZiAobGluZU51bWJlciA+PSBsaW5lICYmIGxpbmVO
dW1iZXIgPCBsaW5lICsgdGhpcy5fdGV4dENodW5rc1tpXS5saW5lc0NvdW50KQorICAgICAgICAg
ICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl90ZXh0Q2h1
bmtzLmxlbmd0aCAtIDE7CisgICAgfSwKKworICAgIF9jaHVua0ZvckxpbmU6IGZ1bmN0aW9uKGxp
bmVOdW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdGV4dENodW5rc1t0aGlzLl9j
aHVua051bWJlckZvckxpbmUobGluZU51bWJlcildOworICAgIH0sCisKKyAgICBfcmVwYWludEFs
bDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgZGVsZXRlIHRoaXMuX3JlcGFpbnRBbGxUaW1l
cjsKKworICAgICAgICBpZiAodGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgaWYgKCF0aGlzLl90ZXh0Q2h1bmtzKQorICAgICAgICAgICAg
dGhpcy5fYnVpbGRDaHVua3MoKTsKKworICAgICAgICB2YXIgdmlzaWJsZUZyb20gPSB0aGlzLmVs
ZW1lbnQuc2Nyb2xsVG9wOworICAgICAgICB2YXIgdmlzaWJsZVRvID0gdGhpcy5lbGVtZW50LnNj
cm9sbFRvcCArIHRoaXMuZWxlbWVudC5jbGllbnRIZWlnaHQ7CisKKyAgICAgICAgdmFyIG9mZnNl
dCA9IDA7CisgICAgICAgIHZhciBmcm9tSW5kZXggPSAtMTsKKyAgICAgICAgdmFyIHRvSW5kZXgg
PSAwOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbaV07Cisg
ICAgICAgICAgICB2YXIgY2h1bmtIZWlnaHQgPSBjaHVuay5oZWlnaHQ7CisgICAgICAgICAgICBp
ZiAob2Zmc2V0ICsgY2h1bmtIZWlnaHQgPiB2aXNpYmxlRnJvbSAmJiBvZmZzZXQgPCB2aXNpYmxl
VG8pIHsKKyAgICAgICAgICAgICAgICBpZiAoZnJvbUluZGV4ID09PSAtMSkKKyAgICAgICAgICAg
ICAgICAgICAgZnJvbUluZGV4ID0gaTsKKyAgICAgICAgICAgICAgICB0b0luZGV4ID0gaSArIDE7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gdmlz
aWJsZVRvKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG9mZnNldCArPSBjaHVua0hlaWdodDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0
b0luZGV4KQorICAgICAgICAgICAgdGhpcy5fZXhwYW5kQ2h1bmtzKGZyb21JbmRleCwgdG9JbmRl
eCk7CisgICAgfSwKKyAgICAKKyAgICByZXNpemU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHRoaXMuX3NjaGVkdWxlUmVwYWludEFsbCgpOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JHdXR0ZXJQYW5lbCA9IGZ1bmN0aW9uKHRleHRNb2RlbCkKK3sKKyAgICBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5jYWxsKHRoaXMsIHRleHRNb2RlbCk7CisKKyAg
ICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlz
LmVsZW1lbnQuY2xhc3NOYW1lID0gInRleHQtZWRpdG9yLWxpbmVzIjsKKworICAgIHRoaXMuZWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLl9zY3JvbGwuYmluZCh0aGlzKSwg
ZmFsc2UpOworCisgICAgdGhpcy5mcmVlQ2FjaGVkRWxlbWVudHMoKTsKKyAgICB0aGlzLl9idWls
ZENodW5rcygpOworfQorCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlclBhbmVsLnByb3Rv
dHlwZSA9IHsKKyAgICBmcmVlQ2FjaGVkRWxlbWVudHM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHRoaXMuX2NhY2hlZFJvd3MgPSBbXTsKKyAgICB9LAorCisgICAgX2NyZWF0ZU5ld0NodW5r
OiBmdW5jdGlvbihzdGFydExpbmUsIGVuZExpbmUpCisgICAgeworICAgICAgICByZXR1cm4gbmV3
IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsodGhpcywgc3RhcnRMaW5lLCBlbmRM
aW5lKTsKKyAgICB9LAorCisgICAgX2V4cGFuZENodW5rczogZnVuY3Rpb24oZnJvbUluZGV4LCB0
b0luZGV4KQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0Q2h1
bmtzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzW2ldLmV4cGFu
ZGVkID0gKGZyb21JbmRleCA8PSBpICYmIGkgPCB0b0luZGV4KTsKKyAgICAgICAgfQorICAgIH0K
K30KKworV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbC5wcm90b3R5cGUuX19wcm90
b19fID0gV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlOworCitX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rID0gZnVuY3Rpb24odGV4dFZpZXdlciwg
c3RhcnRMaW5lLCBlbmRMaW5lKQoreworICAgIHRoaXMuX3RleHRWaWV3ZXIgPSB0ZXh0Vmlld2Vy
OworICAgIHRoaXMuX3RleHRNb2RlbCA9IHRleHRWaWV3ZXIuX3RleHRNb2RlbDsKKworICAgIHRo
aXMuc3RhcnRMaW5lID0gc3RhcnRMaW5lOworICAgIGVuZExpbmUgPSBNYXRoLm1pbih0aGlzLl90
ZXh0TW9kZWwubGluZXNDb3VudCwgZW5kTGluZSk7CisgICAgdGhpcy5saW5lc0NvdW50ID0gZW5k
TGluZSAtIHN0YXJ0TGluZTsKKworICAgIHRoaXMuX2V4cGFuZGVkID0gZmFsc2U7CisKKyAgICB0
aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0aGlzLmVs
ZW1lbnQubGluZU51bWJlciA9IHN0YXJ0TGluZTsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1l
ID0gIndlYmtpdC1saW5lLW51bWJlciI7CisKKyAgICBpZiAodGhpcy5saW5lc0NvdW50ID09PSAx
KSB7CisgICAgICAgIC8vIFNpbmdsZSBsaW5lIGNodW5rcyBhcmUgdHlwaWNhbGx5IGNyZWF0ZWQg
Zm9yIGRlY29yYXRpb25zLiBIb3N0IGxpbmUgbnVtYmVyIGluCisgICAgICAgIC8vIHRoZSBzdWIt
ZWxlbWVudCBpbiBvcmRlciB0byBhbGxvdyBmbGV4aWJsZSBib3JkZXIgLyBtYXJnaW4gbWFuYWdl
bWVudC4KKyAgICAgICAgdmFyIGlubmVyU3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNw
YW4iKTsKKyAgICAgICAgaW5uZXJTcGFuLmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1udW1iZXIt
aW5uZXIiOworICAgICAgICBpbm5lclNwYW4udGV4dENvbnRlbnQgPSBzdGFydExpbmUgKyAxOwor
ICAgICAgICB2YXIgb3V0ZXJTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cisg
ICAgICAgIG91dGVyU3Bhbi5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtbnVtYmVyLW91dGVyIjsK
KyAgICAgICAgb3V0ZXJTcGFuLmFwcGVuZENoaWxkKGlubmVyU3Bhbik7CisgICAgICAgIHRoaXMu
ZWxlbWVudC5hcHBlbmRDaGlsZChvdXRlclNwYW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIHZh
ciBsaW5lTnVtYmVycyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRMaW5lOyBpIDwg
ZW5kTGluZTsgKytpKSB7CisgICAgICAgICAgICBsaW5lTnVtYmVycy5wdXNoKGkgKyAxKTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLmVsZW1lbnQudGV4dENvbnRlbnQgPSBsaW5lTnVtYmVycy5q
b2luKCJcbiIpOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVu
ay5wcm90b3R5cGUgPSB7CisgICAgYWRkRGVjb3JhdGlvbjogZnVuY3Rpb24oZGVjb3JhdGlvbikK
KyAgICB7CisgICAgICAgIGlmICh0eXBlb2YgZGVjb3JhdGlvbiA9PT0gInN0cmluZyIpIHsKKyAg
ICAgICAgICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKGRlY29yYXRpb24pOworICAgICAg
ICB9CisgICAgfSwKKworICAgIHJlbW92ZURlY29yYXRpb246IGZ1bmN0aW9uKGRlY29yYXRpb24p
CisgICAgeworICAgICAgICBpZiAodHlwZW9mIGRlY29yYXRpb24gPT09ICJzdHJpbmciKSB7Cisg
ICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcyhkZWNvcmF0aW9uKTsKKyAg
ICAgICAgfQorICAgIH0sCisKKyAgICBnZXQgZXhwYW5kZWQoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX2V4cGFuZGVkOworICAgIH0sCisKKyAgICBzZXQgZXhwYW5kZWQoZXhwYW5kZWQp
CisgICAgeworICAgICAgICBpZiAodGhpcy5fZXhwYW5kZWQgPT09IGV4cGFuZGVkKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX2V4cGFuZGVkID0gZXhwYW5kZWQ7CisKKyAg
ICAgICAgaWYgKHRoaXMubGluZXNDb3VudCA9PT0gMSkgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGV4cGFuZGVkKSB7CisgICAgICAgICAgICB0aGlzLl9l
eHBhbmRlZExpbmVSb3dzID0gW107CisgICAgICAgICAgICB2YXIgcGFyZW50RWxlbWVudCA9IHRo
aXMuZWxlbWVudC5wYXJlbnRFbGVtZW50OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMu
c3RhcnRMaW5lOyBpIDwgdGhpcy5zdGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQ7ICsraSkgewor
ICAgICAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fY3JlYXRlUm93KGkpOworICAgICAg
ICAgICAgICAgIHBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGxpbmVSb3csIHRoaXMuZWxlbWVu
dCk7CisgICAgICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5wdXNoKGxpbmVSb3cp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0
aGlzLmVsZW1lbnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIGVsZW1lbnRJ
bnNlcnRlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9l
eHBhbmRlZExpbmVSb3dzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIGxpbmVS
b3cgPSB0aGlzLl9leHBhbmRlZExpbmVSb3dzW2ldOworICAgICAgICAgICAgICAgIHZhciBwYXJl
bnRFbGVtZW50ID0gbGluZVJvdy5wYXJlbnRFbGVtZW50OworICAgICAgICAgICAgICAgIGlmIChw
YXJlbnRFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghZWxlbWVudEluc2VydGVk
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50SW5zZXJ0ZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5lbGVt
ZW50LCBsaW5lUm93KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB0aGlzLl90ZXh0Vmlld2VyLl9jYWNoZWRSb3dzLnB1c2gobGluZVJvdyk7CisgICAgICAgICAg
ICAgICAgICAgIHBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobGluZVJvdyk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2V4cGFuZGVk
TGluZVJvd3M7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgZ2V0IGhlaWdodCgpCisgICAgewor
ICAgICAgICBpZiAoIXRoaXMuX2V4cGFuZGVkTGluZVJvd3MpCisgICAgICAgICAgICByZXR1cm4g
dGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodDsKKyAgICAgICAgdmFyIHJlc3VsdCA9IDA7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl9leHBhbmRlZExpbmVSb3dzW2ld
OworICAgICAgICAgICAgcmVzdWx0ICs9IGxpbmVSb3cub2Zmc2V0SGVpZ2h0OworICAgICAgICB9
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSwKKworICAgIF9jcmVhdGVSb3c6IGZ1bmN0
aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX3RleHRW
aWV3ZXIuX2NhY2hlZFJvd3MucG9wKCkgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
CisgICAgICAgIGxpbmVSb3cubGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgIGxpbmVS
b3cuY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLW51bWJlciI7CisgICAgICAgIGxpbmVSb3cudGV4
dENvbnRlbnQgPSBsaW5lTnVtYmVyICsgMTsKKyAgICAgICAgcmV0dXJuIGxpbmVSb3c7CisgICAg
fQorfQorCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbCA9IGZ1bmN0aW9uKHRleHRN
b2RlbCwgdXJsLCBzeW5jU2Nyb2xsTGlzdGVuZXIsIHN5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0
ZW5lcikKK3sKKyAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5jYWxsKHRo
aXMsIHRleHRNb2RlbCk7CisKKyAgICB0aGlzLl9zeW5jU2Nyb2xsTGlzdGVuZXIgPSBzeW5jU2Ny
b2xsTGlzdGVuZXI7CisgICAgdGhpcy5fc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyID0g
c3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyOworCisgICAgdGhpcy5fdXJsID0gdXJsOwor
ICAgIHRoaXMuX2hpZ2hsaWdodGVyID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9ySGlnaGxp
Z2h0ZXIodGV4dE1vZGVsLCB0aGlzLl9oaWdobGlnaHREYXRhUmVhZHkuYmluZCh0aGlzKSk7CisK
KyAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICB0
aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gInRleHQtZWRpdG9yLWNvbnRlbnRzIjsKKyAgICB0aGlz
LmVsZW1lbnQudGFiSW5kZXggPSAwOworCisgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoInNjcm9sbCIsIHRoaXMuX3Njcm9sbC5iaW5kKHRoaXMpLCBmYWxzZSk7CisgICAgdGhpcy5l
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9oYW5kbGVLZXlEb3duLmJp
bmQodGhpcyksIGZhbHNlKTsKKworICAgIHZhciBoYW5kbGVET01VcGRhdGVzID0gdGhpcy5faGFu
ZGxlRE9NVXBkYXRlcy5iaW5kKHRoaXMpOworICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3Rl
bmVyKCJET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQiLCBoYW5kbGVET01VcGRhdGVzLCBmYWxzZSk7
CisgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTU5vZGVJbnNlcnRlZCIsIGhh
bmRsZURPTVVwZGF0ZXMsIGZhbHNlKTsKKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5l
cigiRE9NTm9kZVJlbW92ZWQiLCBoYW5kbGVET01VcGRhdGVzLCBmYWxzZSk7CisKKyAgICB0aGlz
LmZyZWVDYWNoZWRFbGVtZW50cygpOworICAgIHRoaXMuX2J1aWxkQ2h1bmtzKCk7Cit9CisKK1dl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKKyAgICBzZXQgbWlt
ZVR5cGUobWltZVR5cGUpCisgICAgeworICAgICAgICB0aGlzLl9oaWdobGlnaHRlci5taW1lVHlw
ZSA9IG1pbWVUeXBlOworICAgIH0sCisKKyAgICBtYXJrQW5kUmV2ZWFsUmFuZ2U6IGZ1bmN0aW9u
KHJhbmdlKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3JhbmdlVG9NYXJrKSB7CisgICAgICAg
ICAgICB2YXIgbWFya2VkTGluZSA9IHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0TGluZTsKKyAgICAg
ICAgICAgIHRoaXMuX3JhbmdlVG9NYXJrID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMuX3BhaW50
TGluZXMobWFya2VkTGluZSwgbWFya2VkTGluZSArIDEpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHJhbmdlKSB7CisgICAgICAgICAgICB0aGlzLl9yYW5nZVRvTWFyayA9IHJhbmdlOworICAg
ICAgICAgICAgdGhpcy5yZXZlYWxMaW5lKHJhbmdlLnN0YXJ0TGluZSk7CisgICAgICAgICAgICB0
aGlzLl9wYWludExpbmVzKHJhbmdlLnN0YXJ0TGluZSwgcmFuZ2Uuc3RhcnRMaW5lICsgMSk7Cisg
ICAgICAgICAgICBpZiAodGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50KQorICAgICAgICAgICAgICAg
IHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7CisgICAg
ICAgIH0KKyAgICAgICAgZGVsZXRlIHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudDsKKyAgICB9LAor
CisgICAgaGlnaGxpZ2h0TGluZTogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAg
IHRoaXMuY2xlYXJMaW5lSGlnaGxpZ2h0KCk7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdodGVkTGlu
ZSA9IGxpbmVOdW1iZXI7CisgICAgICAgIHRoaXMucmV2ZWFsTGluZShsaW5lTnVtYmVyKTsKKyAg
ICAgICAgdGhpcy5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtaGlnaGxpZ2h0ZWQt
bGluZSIpOworICAgIH0sCisKKyAgICBjbGVhckxpbmVIaWdobGlnaHQ6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIGlmICh0eXBlb2YgdGhpcy5faGlnaGxpZ2h0ZWRMaW5lID09PSAibnVtYmVy
IikgeworICAgICAgICAgICAgdGhpcy5yZW1vdmVEZWNvcmF0aW9uKHRoaXMuX2hpZ2hsaWdodGVk
TGluZSwgIndlYmtpdC1oaWdobGlnaHRlZC1saW5lIik7CisgICAgICAgICAgICBkZWxldGUgdGhp
cy5faGlnaGxpZ2h0ZWRMaW5lOworICAgICAgICB9CisgICAgfSwKKworICAgIGZyZWVDYWNoZWRF
bGVtZW50czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2FjaGVkU3BhbnMgPSBb
XTsKKyAgICAgICAgdGhpcy5fY2FjaGVkVGV4dE5vZGVzID0gW107CisgICAgICAgIHRoaXMuX2Nh
Y2hlZFJvd3MgPSBbXTsKICAgICB9LAogCiAgICAgX2hhbmRsZUtleURvd246IGZ1bmN0aW9uKCkK
QEAgLTI0OCwxNiArNTk5LDE1IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9
IHsKIAogICAgIGVkaXRMaW5lOiBmdW5jdGlvbihsaW5lUm93LCBjYWxsYmFjaykKICAgICB7Ci0g
ICAgICAgIHZhciBlbGVtZW50ID0gbGluZVJvdy5sYXN0Q2hpbGQ7Ci0gICAgICAgIHZhciBvbGRD
b250ZW50ID0gZWxlbWVudC5pbm5lckhUTUw7CisgICAgICAgIHZhciBvbGRDb250ZW50ID0gbGlu
ZVJvdy5pbm5lckhUTUw7CiAgICAgICAgIGZ1bmN0aW9uIGZpbmlzaEVkaXRpbmcoY29tbWl0dGVk
LCBlLCBuZXdDb250ZW50KQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoY29tbWl0dGVkKQog
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ld0NvbnRlbnQpOwotICAgICAgICAgICAgZWxlbWVu
dC5pbm5lckhUTUwgPSBvbGRDb250ZW50OworICAgICAgICAgICAgbGluZVJvdy5pbm5lckhUTUwg
PSBvbGRDb250ZW50OwogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2VkaXRpbmdMaW5lOwogICAg
ICAgICB9Ci0gICAgICAgIHRoaXMuX2VkaXRpbmdMaW5lID0gV2ViSW5zcGVjdG9yLnN0YXJ0RWRp
dGluZyhlbGVtZW50LCB7CisgICAgICAgIHRoaXMuX2VkaXRpbmdMaW5lID0gV2ViSW5zcGVjdG9y
LnN0YXJ0RWRpdGluZyhsaW5lUm93LCB7CiAgICAgICAgICAgICBjb250ZXh0OiBudWxsLAogICAg
ICAgICAgICAgY29tbWl0SGFuZGxlcjogZmluaXNoRWRpdGluZy5iaW5kKHRoaXMsIHRydWUpLAog
ICAgICAgICAgICAgY2FuY2VsSGFuZGxlcjogZmluaXNoRWRpdGluZy5iaW5kKHRoaXMsIGZhbHNl
KSwKQEAgLTI2NSwxMDIgKzYxNSwyMSBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgIH0pOwogICAgIH0sCiAKLSAgICBfYmVmb3JlQ29weTogZnVuY3Rpb24o
ZSkKLSAgICB7Ci0gICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKLSAgICB9LAotCi0gICAgX2Nv
cHk6IGZ1bmN0aW9uKGUpCi0gICAgewotICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9nZXRTZWxl
Y3Rpb24oKTsKLSAgICAgICAgdmFyIHRleHQgPSB0aGlzLl90ZXh0TW9kZWwuY29weVJhbmdlKHJh
bmdlKTsKLSAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNvcHlUZXh0KHRleHQpOwotICAg
ICAgICBlLnByZXZlbnREZWZhdWx0KCk7Ci0gICAgfSwKLQotICAgIGJlZ2luVXBkYXRlczogZnVu
Y3Rpb24oZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVs
Kys7Ci0gICAgfSwKLQotICAgIGVuZFVwZGF0ZXM6IGZ1bmN0aW9uKGVuYWJsZWQpCi0gICAgewot
ICAgICAgICB0aGlzLl9wYWludENvYWxlc2NpbmdMZXZlbC0tOwotICAgICAgICBpZiAoIXRoaXMu
X3BhaW50Q29hbGVzY2luZ0xldmVsKQotICAgICAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOwot
ICAgIH0sCi0KLSAgICBfY2h1bmtGb3JPZmZzZXQ6IGZ1bmN0aW9uKG9mZnNldCkKLSAgICB7Ci0g
ICAgICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gMDsKLSAgICAgICAgdmFyIHJvdyA9IHRoaXMuX2xp
bmVzQ29udGFpbmVyRWxlbWVudC5maXJzdENoaWxkOwotICAgICAgICB3aGlsZSAocm93KSB7Ci0g
ICAgICAgICAgICB2YXIgcm93SGVpZ2h0ID0gcm93Lm9mZnNldEhlaWdodDsKLSAgICAgICAgICAg
IGlmIChvZmZzZXQgPj0gY3VycmVudE9mZnNldCAmJiBvZmZzZXQgPCBjdXJyZW50T2Zmc2V0ICsg
cm93SGVpZ2h0KQotICAgICAgICAgICAgICAgIHJldHVybiByb3cuY2h1bmtOdW1iZXI7Ci0gICAg
ICAgICAgICByb3cgPSByb3cubmV4dFNpYmxpbmc7Ci0gICAgICAgICAgICBjdXJyZW50T2Zmc2V0
ICs9IHJvd0hlaWdodDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdGhpcy5fdGV4dENodW5r
cy5sZW5ndGggLSAxOwotICAgIH0sCi0KLSAgICBfY2h1bmtOdW1iZXJGb3JMaW5lOiBmdW5jdGlv
bihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90
ZXh0Q2h1bmtzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgbGluZSA9IHRoaXMuX3Rl
eHRDaHVua3NbaV0uc3RhcnRMaW5lOwotICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPj0gdGhp
cy5fdGV4dENodW5rc1tpXS5zdGFydExpbmUgJiYgbGluZU51bWJlciA8IHRoaXMuX3RleHRDaHVu
a3NbaV0uc3RhcnRMaW5lICsgdGhpcy5fdGV4dENodW5rc1tpXS5saW5lc0NvdW50KQotICAgICAg
ICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0aGlzLl90ZXh0
Q2h1bmtzLmxlbmd0aCAtIDE7Ci0gICAgfSwKLQotICAgIF9jaHVua0ZvckxpbmU6IGZ1bmN0aW9u
KGxpbmVOdW1iZXIpCisgICAgX2J1aWxkQ2h1bmtzOiBmdW5jdGlvbigpCiAgICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fdGV4dENodW5rc1t0aGlzLl9jaHVua051bWJlckZvckxpbmUobGluZU51
bWJlcildOworICAgICAgICB0aGlzLl9oaWdobGlnaHRlci5yZXNldCgpOworICAgICAgICBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX2J1aWxkQ2h1bmtzLmNh
bGwodGhpcyk7CiAgICAgfSwKIAotICAgIF9jaHVua1N0YXJ0TGluZTogZnVuY3Rpb24oY2h1bmtO
dW1iZXIpCisgICAgX2NyZWF0ZU5ld0NodW5rOiBmdW5jdGlvbihzdGFydExpbmUsIGVuZExpbmUp
CiAgICAgewotICAgICAgICB2YXIgbGluZU51bWJlciA9IDA7Ci0gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgY2h1bmtOdW1iZXIgJiYgaSA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2kp
Ci0gICAgICAgICAgICBsaW5lTnVtYmVyICs9IHRoaXMuX3RleHRDaHVua3NbaV0ubGluZXNDb3Vu
dDsKLSAgICAgICAgcmV0dXJuIGxpbmVOdW1iZXI7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsodGhpcywgc3RhcnRMaW5lLCBlbmRMaW5lKTsKICAg
ICB9LAogCi0gICAgX3JlcGFpbnRBbGw6IGZ1bmN0aW9uKCkKKyAgICBfZXhwYW5kQ2h1bmtzOiBm
dW5jdGlvbihmcm9tSW5kZXgsIHRvSW5kZXgpCiAgICAgewotICAgICAgICBpZiAodGhpcy5fcGFp
bnRDb2FsZXNjaW5nTGV2ZWwpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCF0
aGlzLl90ZXh0Q2h1bmtzKQotICAgICAgICAgICAgdGhpcy5fYnVpbGRDaHVua3MoKTsKLQotICAg
ICAgICB2YXIgdmlzaWJsZUZyb20gPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wOwotICAgICAgICB2
YXIgdmlzaWJsZVRvID0gdGhpcy5lbGVtZW50LnNjcm9sbFRvcCArIHRoaXMuZWxlbWVudC5jbGll
bnRIZWlnaHQ7Ci0KLSAgICAgICAgdmFyIG9mZnNldCA9IDA7Ci0gICAgICAgIHZhciBmaXJzdFZp
c2libGVMaW5lID0gLTE7Ci0gICAgICAgIHZhciBsYXN0VmlzaWJsZUxpbmUgPSAwOwotICAgICAg
ICB2YXIgdG9FeHBhbmQgPSBbXTsKLSAgICAgICAgdmFyIHRvQ29sbGFwc2UgPSBbXTsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2ldOwotICAgICAgICAgICAg
dmFyIGNodW5rSGVpZ2h0ID0gY2h1bmsuaGVpZ2h0OwotICAgICAgICAgICAgaWYgKG9mZnNldCAr
IGNodW5rSGVpZ2h0ID4gdmlzaWJsZUZyb20gJiYgb2Zmc2V0IDwgdmlzaWJsZVRvKSB7Ci0gICAg
ICAgICAgICAgICAgdG9FeHBhbmQucHVzaChjaHVuayk7Ci0gICAgICAgICAgICAgICAgaWYgKGZp
cnN0VmlzaWJsZUxpbmUgPT09IC0xKQotICAgICAgICAgICAgICAgICAgICBmaXJzdFZpc2libGVM
aW5lID0gY2h1bmsuc3RhcnRMaW5lOwotICAgICAgICAgICAgICAgIGxhc3RWaXNpYmxlTGluZSA9
IGNodW5rLnN0YXJ0TGluZSArIGNodW5rLmxpbmVzQ291bnQ7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIHRvQ29sbGFwc2UucHVzaChjaHVuayk7Ci0gICAgICAgICAgICAg
ICAgaWYgKG9mZnNldCA+PSB2aXNpYmxlVG8pCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgb2Zmc2V0ICs9IGNodW5rSGVpZ2h0OwotICAgICAg
ICB9Ci0KLSAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0
aDsgKytqKQotICAgICAgICAgICAgdG9Db2xsYXBzZS5wdXNoKHRoaXMuX3RleHRDaHVua3NbaV0p
OworICAgICAgICB2YXIgbGFzdENodW5rID0gdGhpcy5fdGV4dENodW5rc1t0b0luZGV4IC0gMV07
CisgICAgICAgIHZhciBsYXN0VmlzaWJsZUxpbmUgPSBsYXN0Q2h1bmsuc3RhcnRMaW5lICsgbGFz
dENodW5rLmxpbmVzQ291bnQ7CiAKICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNl
bGVjdGlvbigpOwogCkBAIC0zNjgsMTAgKzYzNyw5IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2Vy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZXIuaGlnaGxpZ2h0KGxhc3RW
aXNpYmxlTGluZSk7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9tdXRlSGlnaGxpZ2h0TGlzdGVuZXI7
CiAKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b0NvbGxhcHNlLmxlbmd0aDsgKytpKQot
ICAgICAgICAgICAgdG9Db2xsYXBzZVtpXS5leHBhbmRlZCA9IGZhbHNlOwotICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHRvRXhwYW5kLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdG9FeHBh
bmRbaV0uZXhwYW5kZWQgPSB0cnVlOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMu
X3RleHRDaHVua3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHRoaXMuX3RleHRDaHVua3Nb
aV0uZXhwYW5kZWQgPSAoZnJvbUluZGV4IDw9IGkgJiYgaSA8IHRvSW5kZXgpOworICAgICAgICB9
CiAKICAgICAgICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihzZWxlY3Rpb24pOwogICAgIH0sCkBA
IC0zODAsNDAgKzY0OCw0MCBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUgPSB7
CiAgICAgewogICAgICAgICBpZiAodGhpcy5fbXV0ZUhpZ2hsaWdodExpc3RlbmVyKQogICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLl9wYWludExpbmVzKGZyb21MaW5lLCB0b0xpbmUs
IHRydWUgLypyZXN0b3JlU2VsZWN0aW9uKi8pOworICAgIH0sCiAKKyAgICBfcGFpbnRMaW5lczog
ZnVuY3Rpb24oZnJvbUxpbmUsIHRvTGluZSwgcmVzdG9yZVNlbGVjdGlvbikKKyAgICB7CiAgICAg
ICAgIHZhciBzZWxlY3Rpb247CisgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX2NodW5rRm9yTGlu
ZShmcm9tTGluZSk7CiAgICAgICAgIGZvciAodmFyIGkgPSBmcm9tTGluZTsgaSA8IHRvTGluZTsg
KytpKSB7Ci0gICAgICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRy
aWJ1dGUoaSwgImxpbmUtcm93Iik7Ci0gICAgICAgICAgICBpZiAoIWxpbmVSb3cgfHwgbGluZVJv
dy5oaWdobGlnaHRlZCkKKyAgICAgICAgICAgIGlmIChpID49IGNodW5rLnN0YXJ0TGluZSArIGNo
dW5rLmxpbmVzQ291bnQpCisgICAgICAgICAgICAgICAgY2h1bmsgPSB0aGlzLl9jaHVua0Zvckxp
bmUoaSk7CisgICAgICAgICAgICB2YXIgbGluZVJvdyA9IGNodW5rLmdldEV4cGFuZGVkTGluZVJv
dyhpKTsKKyAgICAgICAgICAgIGlmICghbGluZVJvdykKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGlmICghc2VsZWN0aW9uKQorICAgICAgICAgICAgaWYgKHJlc3RvcmVT
ZWxlY3Rpb24gJiYgIXNlbGVjdGlvbikKICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlz
Ll9nZXRTZWxlY3Rpb24oKTsKICAgICAgICAgICAgIHRoaXMuX3BhaW50TGluZShsaW5lUm93LCBp
KTsKICAgICAgICAgfQotICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlvbik7
Ci0gICAgfSwKLQotICAgIF9wYWludExpbmVzOiBmdW5jdGlvbihmcm9tTGluZSwgdG9MaW5lKQot
ICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IGZyb21MaW5lOyBpIDwgdG9MaW5lOyArK2kpIHsK
LSAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShp
LCAibGluZS1yb3ciKTsKLSAgICAgICAgICAgIGlmIChsaW5lUm93KQotICAgICAgICAgICAgICAg
IHRoaXMuX3BhaW50TGluZShsaW5lUm93LCBpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAocmVz
dG9yZVNlbGVjdGlvbikKKyAgICAgICAgICAgIHRoaXMuX3Jlc3RvcmVTZWxlY3Rpb24oc2VsZWN0
aW9uKTsKICAgICB9LAogCiAgICAgX3BhaW50TGluZTogZnVuY3Rpb24obGluZVJvdywgbGluZU51
bWJlcikKICAgICB7Ci0gICAgICAgIHZhciBlbGVtZW50ID0gbGluZVJvdy5sYXN0Q2hpbGQ7CiAg
ICAgICAgIHZhciBoaWdobGlnaHQgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGxpbmVO
dW1iZXIsICJoaWdobGlnaHQiKTsKICAgICAgICAgaWYgKCFoaWdobGlnaHQpIHsKICAgICAgICAg
ICAgIGlmICh0aGlzLl9yYW5nZVRvTWFyayAmJiB0aGlzLl9yYW5nZVRvTWFyay5zdGFydExpbmUg
PT09IGxpbmVOdW1iZXIpCi0gICAgICAgICAgICAgICAgdGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50
ID0gaGlnaGxpZ2h0U2VhcmNoUmVzdWx0KGVsZW1lbnQsIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0
Q29sdW1uLCB0aGlzLl9yYW5nZVRvTWFyay5lbmRDb2x1bW4gLSB0aGlzLl9yYW5nZVRvTWFyay5z
dGFydENvbHVtbik7CisgICAgICAgICAgICAgICAgdGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50ID0g
aGlnaGxpZ2h0U2VhcmNoUmVzdWx0KGxpbmVSb3csIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0Q29s
dW1uLCB0aGlzLl9yYW5nZVRvTWFyay5lbmRDb2x1bW4gLSB0aGlzLl9yYW5nZVRvTWFyay5zdGFy
dENvbHVtbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBlbGVt
ZW50LnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgIGxpbmVSb3cucmVtb3ZlQ2hpbGRyZW4oKTsK
ICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKTsKKyAg
ICAgICAgaWYgKCFsaW5lKQorICAgICAgICAgICAgbGluZVJvdy5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJiciIpKTsKIAogICAgICAgICB2YXIgcGxhaW5UZXh0U3RhcnQgPSAt
MTsKICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaW5lLmxlbmd0aDspIHsKQEAgLTQzMCw5
OCArNjk4LDY0IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgICAgICBqKys7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlm
IChwbGFpblRleHRTdGFydCAhPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBw
ZW5kVGV4dE5vZGUoZWxlbWVudCwgbGluZS5zdWJzdHJpbmcocGxhaW5UZXh0U3RhcnQsIGopKTsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwZW5kVGV4dE5vZGUobGluZVJvdywgbGluZS5z
dWJzdHJpbmcocGxhaW5UZXh0U3RhcnQsIGopKTsKICAgICAgICAgICAgICAgICAgICAgcGxhaW5U
ZXh0U3RhcnQgPSAtMTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5f
YXBwZW5kU3BhbihlbGVtZW50LCBsaW5lLnN1YnN0cmluZyhqLCBqICsgYXR0cmlidXRlLmxlbmd0
aCksIGF0dHJpYnV0ZS50b2tlblR5cGUpOworICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZFNw
YW4obGluZVJvdywgbGluZS5zdWJzdHJpbmcoaiwgaiArIGF0dHJpYnV0ZS5sZW5ndGgpLCBhdHRy
aWJ1dGUudG9rZW5UeXBlKTsKICAgICAgICAgICAgICAgICBqICs9IGF0dHJpYnV0ZS5sZW5ndGg7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0ICE9
PSAtMSkKLSAgICAgICAgICAgIHRoaXMuX2FwcGVuZFRleHROb2RlKGVsZW1lbnQsIGxpbmUuc3Vi
c3RyaW5nKHBsYWluVGV4dFN0YXJ0LCBsaW5lLmxlbmd0aCkpOworICAgICAgICAgICAgdGhpcy5f
YXBwZW5kVGV4dE5vZGUobGluZVJvdywgbGluZS5zdWJzdHJpbmcocGxhaW5UZXh0U3RhcnQsIGxp
bmUubGVuZ3RoKSk7CiAgICAgICAgIGlmICh0aGlzLl9yYW5nZVRvTWFyayAmJiB0aGlzLl9yYW5n
ZVRvTWFyay5zdGFydExpbmUgPT09IGxpbmVOdW1iZXIpCi0gICAgICAgICAgICB0aGlzLl9tYXJr
ZWRSYW5nZUVsZW1lbnQgPSBoaWdobGlnaHRTZWFyY2hSZXN1bHQoZWxlbWVudCwgdGhpcy5fcmFu
Z2VUb01hcmsuc3RhcnRDb2x1bW4sIHRoaXMuX3JhbmdlVG9NYXJrLmVuZENvbHVtbiAtIHRoaXMu
X3JhbmdlVG9NYXJrLnN0YXJ0Q29sdW1uKTsKKyAgICAgICAgICAgIHRoaXMuX21hcmtlZFJhbmdl
RWxlbWVudCA9IGhpZ2hsaWdodFNlYXJjaFJlc3VsdChsaW5lUm93LCB0aGlzLl9yYW5nZVRvTWFy
ay5zdGFydENvbHVtbiwgdGhpcy5fcmFuZ2VUb01hcmsuZW5kQ29sdW1uIC0gdGhpcy5fcmFuZ2VU
b01hcmsuc3RhcnRDb2x1bW4pOwogICAgICAgICBpZiAobGluZVJvdy5kZWNvcmF0aW9uc0VsZW1l
bnQpCi0gICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGxpbmVSb3cuZGVjb3JhdGlvbnNF
bGVtZW50KTsKKyAgICAgICAgICAgIGxpbmVSb3cuYXBwZW5kQ2hpbGQobGluZVJvdy5kZWNvcmF0
aW9uc0VsZW1lbnQpOwogICAgIH0sCiAKLSAgICBfcmVsZWFzZUxpbmVzSGlnaGxpZ2h0OiBmdW5j
dGlvbihmcm9tTGluZSwgdG9MaW5lKQorICAgIF9yZWxlYXNlTGluZXNIaWdobGlnaHQ6IGZ1bmN0
aW9uKGxpbmVSb3cpCiAgICAgewotICAgICAgICBmb3IgKHZhciBpID0gZnJvbUxpbmU7IGkgPCB0
b0xpbmU7ICsraSkgewotICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl90ZXh0TW9kZWwu
Z2V0QXR0cmlidXRlKGksICJsaW5lLXJvdyIpOwotICAgICAgICAgICAgaWYgKCFsaW5lUm93KQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBsaW5l
Um93Lmxhc3RDaGlsZDsKLSAgICAgICAgICAgIGlmICgic3BhbnMiIGluIGVsZW1lbnQpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgc3BhbnMgPSBlbGVtZW50LnNwYW5zOwotICAgICAgICAgICAgICAg
IGZvciAodmFyIGogPSAwOyBqIDwgc3BhbnMubGVuZ3RoOyArK2opCi0gICAgICAgICAgICAgICAg
ICAgIHRoaXMuX2NhY2hlZFNwYW5zLnB1c2goc3BhbnNbal0pOwotICAgICAgICAgICAgICAgIGRl
bGV0ZSBlbGVtZW50LnNwYW5zOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCJ0ZXh0
Tm9kZXMiIGluIGVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICB2YXIgdGV4dE5vZGVzID0gZWxl
bWVudC50ZXh0Tm9kZXM7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0ZXh0
Tm9kZXMubGVuZ3RoOyArK2opCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZFRleHRO
b2Rlcy5wdXNoKHRleHROb2Rlc1tqXSk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGVsZW1lbnQu
dGV4dE5vZGVzOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAoIWxpbmVSb3cpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmICgic3BhbnMiIGluIGxpbmVSb3cpIHsKKyAgICAgICAg
ICAgIHZhciBzcGFucyA9IGxpbmVSb3cuc3BhbnM7CisgICAgICAgICAgICBmb3IgKHZhciBqID0g
MDsgaiA8IHNwYW5zLmxlbmd0aDsgKytqKQorICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZFNw
YW5zLnB1c2goc3BhbnNbal0pOworICAgICAgICAgICAgZGVsZXRlIGxpbmVSb3cuc3BhbnM7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCJ0ZXh0Tm9kZXMiIGluIGxpbmVSb3cpIHsKKyAgICAgICAg
ICAgIHZhciB0ZXh0Tm9kZXMgPSBsaW5lUm93LnRleHROb2RlczsKKyAgICAgICAgICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgdGV4dE5vZGVzLmxlbmd0aDsgKytqKQorICAgICAgICAgICAgICAgIHRo
aXMuX2NhY2hlZFRleHROb2Rlcy5wdXNoKHRleHROb2Rlc1tqXSk7CisgICAgICAgICAgICBkZWxl
dGUgbGluZVJvdy50ZXh0Tm9kZXM7CiAgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY2FjaGVkUm93
cy5wdXNoKGxpbmVSb3cpOwogICAgIH0sCiAKICAgICBfZ2V0U2VsZWN0aW9uOiBmdW5jdGlvbigp
CiAgICAgewogICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwot
ICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKQorICAgICAgICBpZiAoIXNlbGVjdGlv
bi5yYW5nZUNvdW50KQogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIHZhciBzZWxl
Y3Rpb25SYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgICAgICAvLyBTZWxlY3Rp
b24gbWF5IGJlIG91dHNpZGUgb2YgdGhlIHZpZXdlci4KICAgICAgICAgaWYgKCF0aGlzLmVsZW1l
bnQuaXNBbmNlc3RvcihzZWxlY3Rpb25SYW5nZS5zdGFydENvbnRhaW5lcikgfHwgIXRoaXMuZWxl
bWVudC5pc0FuY2VzdG9yKHNlbGVjdGlvblJhbmdlLmVuZENvbnRhaW5lcikpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5fc2VsZWN0aW9uVG9Qb3Np
dGlvbihzZWxlY3Rpb25SYW5nZS5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uUmFuZ2Uuc3RhcnRP
ZmZzZXQpOwotICAgICAgICB2YXIgZW5kID0gdGhpcy5fc2VsZWN0aW9uVG9Qb3NpdGlvbihzZWxl
Y3Rpb25SYW5nZS5lbmRDb250YWluZXIsIHNlbGVjdGlvblJhbmdlLmVuZE9mZnNldCk7Ci0gICAg
ICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShzdGFydC5saW5lLCBzdGFydC5j
b2x1bW4sIGVuZC5saW5lLCBlbmQuY29sdW1uKTsKKyAgICAgICAgdmFyIGVuZCA9IHNlbGVjdGlv
blJhbmdlLmNvbGxhcHNlZCA/IHN0YXJ0IDogdGhpcy5fc2VsZWN0aW9uVG9Qb3NpdGlvbihzZWxl
Y3Rpb25SYW5nZS5lbmRDb250YWluZXIsIHNlbGVjdGlvblJhbmdlLmVuZE9mZnNldCk7CisgICAg
ICAgIGlmIChzZWxlY3Rpb24uYW5jaG9yTm9kZSA9PT0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRDb250
YWluZXIgJiYgc2VsZWN0aW9uLmFuY2hvck9mZnNldCA9PT0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRP
ZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2Uoc3Rh
cnQubGluZSwgc3RhcnQuY29sdW1uLCBlbmQubGluZSwgZW5kLmNvbHVtbik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShlbmQubGlu
ZSwgZW5kLmNvbHVtbiwgc3RhcnQubGluZSwgc3RhcnQuY29sdW1uKTsKICAgICB9LAogCiAgICAg
X3Jlc3RvcmVTZWxlY3Rpb246IGZ1bmN0aW9uKHJhbmdlKQogICAgIHsKICAgICAgICAgaWYgKCFy
YW5nZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIHN0YXJ0Um93ID0gdGhpcy5f
dGV4dE1vZGVsLmdldEF0dHJpYnV0ZShyYW5nZS5zdGFydExpbmUsICJsaW5lLXJvdyIpOwotICAg
ICAgICBpZiAoc3RhcnRSb3cpCi0gICAgICAgICAgICB2YXIgc3RhcnQgPSBzdGFydFJvdy5sYXN0
Q2hpbGQucmFuZ2VCb3VuZGFyeUZvck9mZnNldChyYW5nZS5zdGFydENvbHVtbik7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgdmFyIG9mZnNldCA9IHJhbmdlLnN0YXJ0Q29sdW1uOwotICAg
ICAgICAgICAgdmFyIGNodW5rTnVtYmVyID0gdGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5lKHJhbmdl
LnN0YXJ0TGluZSk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fY2h1bmtTdGFydExp
bmUoY2h1bmtOdW1iZXIpOyBpIDwgcmFuZ2Uuc3RhcnRMaW5lOyArK2kpCi0gICAgICAgICAgICAg
ICAgb2Zmc2V0ICs9IHRoaXMuX3RleHRNb2RlbC5saW5lKGkpLmxlbmd0aCArIDE7IC8vIFxuCi0g
ICAgICAgICAgICB2YXIgbGluZUNlbGwgPSB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVtYmVyXS5l
bGVtZW50Lmxhc3RDaGlsZDsKLSAgICAgICAgICAgIGlmIChsaW5lQ2VsbC5maXJzdENoaWxkKQot
ICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHsgY29udGFpbmVyOiBsaW5lQ2VsbC5maXJzdENo
aWxkLCBvZmZzZXQ6IG9mZnNldCB9OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHZhciBzdGFydCA9IHsgY29udGFpbmVyOiBsaW5lQ2VsbCwgb2Zmc2V0OiAwIH07Ci0gICAgICAg
IH0KLQotICAgICAgICB2YXIgZW5kUm93ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShy
YW5nZS5lbmRMaW5lLCAibGluZS1yb3ciKTsKLSAgICAgICAgaWYgKGVuZFJvdykKLSAgICAgICAg
ICAgIHZhciBlbmQgPSBlbmRSb3cubGFzdENoaWxkLnJhbmdlQm91bmRhcnlGb3JPZmZzZXQocmFu
Z2UuZW5kQ29sdW1uKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB2YXIgb2Zmc2V0ID0g
cmFuZ2UuZW5kQ29sdW1uOwotICAgICAgICAgICAgdmFyIGNodW5rTnVtYmVyID0gdGhpcy5fY2h1
bmtOdW1iZXJGb3JMaW5lKHJhbmdlLmVuZExpbmUpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9
IHRoaXMuX2NodW5rU3RhcnRMaW5lKGNodW5rTnVtYmVyKTsgaSA8IHJhbmdlLmVuZExpbmU7ICsr
aSkKLSAgICAgICAgICAgICAgICBvZmZzZXQgKz0gdGhpcy5fdGV4dE1vZGVsLmxpbmUoaSkubGVu
Z3RoICsgMTsgLy8gXG4KLSAgICAgICAgICAgIHZhciBsaW5lQ2VsbCA9IHRoaXMuX3RleHRDaHVu
a3NbY2h1bmtOdW1iZXJdLmVsZW1lbnQubGFzdENoaWxkOwotICAgICAgICAgICAgaWYgKGxpbmVD
ZWxsLmZpcnN0Q2hpbGQpCi0gICAgICAgICAgICAgICAgdmFyIGVuZCA9IHsgY29udGFpbmVyOiBs
aW5lQ2VsbC5maXJzdENoaWxkLCBvZmZzZXQ6IG9mZnNldCB9OwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHZhciBlbmQgPSB7IGNvbnRhaW5lcjogbGluZUNlbGwsIG9mZnNldDog
MCB9OwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHNlbGVjdGlvblJhbmdlID0gZG9jdW1lbnQu
Y3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgc2VsZWN0aW9uUmFuZ2Uuc2V0U3RhcnQoc3RhcnQuY29u
dGFpbmVyLCBzdGFydC5vZmZzZXQpOwotICAgICAgICBzZWxlY3Rpb25SYW5nZS5zZXRFbmQoZW5k
LmNvbnRhaW5lciwgZW5kLm9mZnNldCk7Ci0KLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRv
dy5nZXRTZWxlY3Rpb24oKTsKLSAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwot
ICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2Uoc2VsZWN0aW9uUmFuZ2UpOworICAgICAgICB2YXIg
c3RhcnQgPSB0aGlzLl9wb3NpdGlvblRvU2VsZWN0aW9uKHJhbmdlLnN0YXJ0TGluZSwgcmFuZ2Uu
c3RhcnRDb2x1bW4pOworICAgICAgICB2YXIgZW5kID0gcmFuZ2UuaXNFbXB0eSgpID8gc3RhcnQg
OiB0aGlzLl9wb3NpdGlvblRvU2VsZWN0aW9uKHJhbmdlLmVuZExpbmUsIHJhbmdlLmVuZENvbHVt
bik7CisgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KHN0YXJ0
LmNvbnRhaW5lciwgc3RhcnQub2Zmc2V0LCBlbmQuY29udGFpbmVyLCBlbmQub2Zmc2V0KTsKICAg
ICB9LAogCiAgICAgX3NlbGVjdGlvblRvUG9zaXRpb246IGZ1bmN0aW9uKGNvbnRhaW5lciwgb2Zm
c2V0KQpAQCAtNTMxLDIxICs3NjUsMjYgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90
eXBlID0gewogICAgICAgICBpZiAoY29udGFpbmVyID09PSB0aGlzLmVsZW1lbnQgJiYgb2Zmc2V0
ID09PSAxKQogICAgICAgICAgICAgcmV0dXJuIHsgbGluZTogdGhpcy5fdGV4dE1vZGVsLmxpbmVz
Q291bnQgLSAxLCBjb2x1bW46IHRoaXMuX3RleHRNb2RlbC5saW5lTGVuZ3RoKHRoaXMuX3RleHRN
b2RlbC5saW5lc0NvdW50IC0gMSkgfTsKIAotICAgICAgICB2YXIgbGluZVJvdyA9IGNvbnRhaW5l
ci5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1lKCJ0ciIpOworICAgICAgICB2YXIgbGlu
ZVJvdyA9IGNvbnRhaW5lci5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1lKCJESVYiKTsK
ICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBsaW5lUm93LmxpbmVOdW1iZXI7Ci0gICAgICAgIGlm
IChjb250YWluZXIubm9kZU5hbWUgPT09ICJURCIgJiYgb2Zmc2V0ID09PSAwKQorICAgICAgICBp
ZiAoY29udGFpbmVyID09PSBsaW5lUm93ICYmIG9mZnNldCA9PT0gMCkKICAgICAgICAgICAgIHJl
dHVybiB7IGxpbmU6IGxpbmVOdW1iZXIsIGNvbHVtbjogMCB9OwotICAgICAgICBpZiAoY29udGFp
bmVyLm5vZGVOYW1lID09PSAiVEQiICYmIG9mZnNldCA9PT0gMSkKLSAgICAgICAgICAgIHJldHVy
biB7IGxpbmU6IGxpbmVOdW1iZXIsIGNvbHVtbjogdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgo
bGluZU51bWJlcikgfTsKIAorICAgICAgICAvLyBUaGlzIG1heSBiZSBjaHVuayBhbmQgY2h1bmtz
IG1heSBjb250YWluIFxuLgogICAgICAgICB2YXIgY29sdW1uID0gMDsKLSAgICAgICAgdmFyIG5v
ZGUgPSBsaW5lUm93Lmxhc3RDaGlsZC50cmF2ZXJzZU5leHRUZXh0Tm9kZShsaW5lUm93Lmxhc3RD
aGlsZCk7CisgICAgICAgIHZhciBub2RlID0gbGluZVJvdy50cmF2ZXJzZU5leHRUZXh0Tm9kZShs
aW5lUm93KTsKICAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPT0gY29udGFpbmVyKSB7Ci0g
ICAgICAgICAgICBjb2x1bW4gKz0gbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7Ci0gICAgICAgICAg
ICBub2RlID0gbm9kZS50cmF2ZXJzZU5leHRUZXh0Tm9kZShsaW5lUm93Lmxhc3RDaGlsZCk7Cisg
ICAgICAgICAgICB2YXIgdGV4dCA9IG5vZGUudGV4dENvbnRlbnQ7CisgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAo
dGV4dC5jaGFyQXQoaSkgPT09ICJcbiIpIHsKKyAgICAgICAgICAgICAgICAgICAgbGluZU51bWJl
cisrOworICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSAwOworICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICBjb2x1bW4rKzsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG5vZGUgPSBub2RlLnRyYXZlcnNlTmV4dFRleHROb2RlKGxpbmVSb3cpOwogICAgICAg
ICB9CiAKLSAgICAgICAgLy8gVGhpcyBtYXkgYmUgY2h1bmsgYW5kIGNodW5rcyBtYXkgY29udGFp
biBcbi4KICAgICAgICAgaWYgKG5vZGUgPT09IGNvbnRhaW5lciAmJiBvZmZzZXQpIHsKICAgICAg
ICAgICAgIHZhciB0ZXh0ID0gbm9kZS50ZXh0Q29udGVudDsKICAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgb2Zmc2V0OyArK2kpIHsKQEAgLTU1OSw2ICs3OTgsMjUgQEAgV2ViSW5zcGVj
dG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4geyBsaW5lOiBsaW5l
TnVtYmVyLCBjb2x1bW46IGNvbHVtbiB9OwogICAgIH0sCiAKKyAgICBfcG9zaXRpb25Ub1NlbGVj
dGlvbjogZnVuY3Rpb24obGluZSwgY29sdW1uKQorICAgIHsKKyAgICAgICAgdmFyIGNodW5rID0g
dGhpcy5fY2h1bmtGb3JMaW5lKGxpbmUpOworICAgICAgICB2YXIgbGluZVJvdyA9IGNodW5rLmdl
dEV4cGFuZGVkTGluZVJvdyhsaW5lKTsKKyAgICAgICAgaWYgKGxpbmVSb3cpCisgICAgICAgICAg
ICB2YXIgcmFuZ2VCb3VuZGFyeSA9IGxpbmVSb3cucmFuZ2VCb3VuZGFyeUZvck9mZnNldChjb2x1
bW4pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBvZmZzZXQgPSBjb2x1bW47Cisg
ICAgICAgICAgICBmb3IgKHZhciBpID0gY2h1bmsuc3RhcnRMaW5lOyBpIDwgbGluZTsgKytpKQor
ICAgICAgICAgICAgICAgIG9mZnNldCArPSB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChpKSAr
IDE7IC8vIFxuCisgICAgICAgICAgICBsaW5lUm93ID0gY2h1bmsuZWxlbWVudDsKKyAgICAgICAg
ICAgIGlmIChsaW5lUm93LmZpcnN0Q2hpbGQpCisgICAgICAgICAgICAgICAgdmFyIHJhbmdlQm91
bmRhcnkgPSB7IGNvbnRhaW5lcjogbGluZVJvdy5maXJzdENoaWxkLCBvZmZzZXQ6IG9mZnNldCB9
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZhciByYW5nZUJvdW5kYXJ5ID0g
eyBjb250YWluZXI6IGxpbmVSb3csIG9mZnNldDogMCB9OworICAgICAgICB9CisgICAgICAgIHJl
dHVybiByYW5nZUJvdW5kYXJ5OworICAgIH0sCisKICAgICBfYXBwZW5kU3BhbjogZnVuY3Rpb24o
ZWxlbWVudCwgY29udGVudCwgY2xhc3NOYW1lKQogICAgIHsKICAgICAgICAgaWYgKGNsYXNzTmFt
ZSA9PT0gImh0bWwtcmVzb3VyY2UtbGluayIgfHwgY2xhc3NOYW1lID09PSAiaHRtbC1leHRlcm5h
bC1saW5rIikgewpAQCAtNTc4LDkgKzgzNiw5IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnBy
b3RvdHlwZSA9IHsKICAgICBfYXBwZW5kVGV4dE5vZGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHRleHQp
CiAgICAgewogICAgICAgICB2YXIgdGV4dE5vZGUgPSB0aGlzLl9jYWNoZWRUZXh0Tm9kZXMucG9w
KCk7Ci0gICAgICAgIGlmICh0ZXh0Tm9kZSkgeworICAgICAgICBpZiAodGV4dE5vZGUpCiAgICAg
ICAgICAgICB0ZXh0Tm9kZS5ub2RlVmFsdWUgPSB0ZXh0OwotICAgICAgICB9IGVsc2UKKyAgICAg
ICAgZWxzZQogICAgICAgICAgICAgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0
ZXh0KTsKICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7CiAgICAgICAgIGlm
ICghKCJ0ZXh0Tm9kZXMiIGluIGVsZW1lbnQpKQpAQCAtNjE0LDU4ICs4NzIsNTIgQEAgV2ViSW5z
cGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gV2ViSW5zcGVj
dG9yLmNvbXBsZXRlVVJMKHRoaXMuX3VybCwgaHJlZlZhbHVlKTsKICAgICB9LAogCi0gICAgcmVz
aXplOiBmdW5jdGlvbigpCisgICAgX2hhbmRsZURPTVVwZGF0ZXM6IGZ1bmN0aW9uKGUpCiAgICAg
ewotICAgICAgICB0aGlzLl9yZXBhaW50QWxsKCk7CisgICAgICAgIHZhciB0YXJnZXQgPSBlLnRh
cmdldDsKKyAgICAgICAgdmFyIGxpbmVSb3cgPSB0YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldp
dGhDbGFzcygid2Via2l0LWxpbmUtY29udGVudCIpOworICAgICAgICBpZiAobGluZVJvdyA9PT0g
dGFyZ2V0IHx8ICFsaW5lUm93IHx8ICFsaW5lUm93LmRlY29yYXRpb25zRWxlbWVudCB8fCAhbGlu
ZVJvdy5kZWNvcmF0aW9uc0VsZW1lbnQuaXNBbmNlc3Rvcih0YXJnZXQpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBpZiAodGhpcy5fc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVy
KSB7CisgICAgICAgICAgICAvLyBXYWl0IHVudGlsIHRoaXMgZXZlbnQgaXMgcHJvY2Vzc2VkIGFu
ZCBvbmx5IHRoZW4gc3luYyB0aGUgc2l6ZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IGluCisgICAgICAg
ICAgICAvLyBjYXNlIG9mIHRoZSBET01Ob2RlUmVtb3ZlZCBldmVudCwgYmVjYXVzZSBpdCBpcyBk
aXNwYXRjaGVkIGJlZm9yZSB0aGUgcmVtb3ZhbCB0YWtlcyBwbGFjZS4KKyAgICAgICAgICAgIHNl
dFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fc3luY0RlY29yYXRp
b25zRm9yTGluZUxpc3RlbmVyKGxpbmVSb3cubGluZU51bWJlcik7CisgICAgICAgICAgICB9LmJp
bmQodGhpcyksIDApOworICAgICAgICB9CiAgICAgfQogfQogCi12YXIgY2FjaGVkU3BhbnMgPSBb
XTsKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fX3Byb3RvX18g
PSBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGU7CiAKLVdlYklu
c3BlY3Rvci5UZXh0Q2h1bmsgPSBmdW5jdGlvbih0ZXh0Vmlld2VyLCBzdGFydExpbmUsIGVuZExp
bmUpCitXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuayA9IGZ1bmN0aW9uKHRleHRWaWV3
ZXIsIHN0YXJ0TGluZSwgZW5kTGluZSkKIHsKICAgICB0aGlzLl90ZXh0Vmlld2VyID0gdGV4dFZp
ZXdlcjsKLSAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwog
ICAgIHRoaXMuX3RleHRNb2RlbCA9IHRleHRWaWV3ZXIuX3RleHRNb2RlbDsKLSAgICB0aGlzLmVs
ZW1lbnQuY2h1bmsgPSB0aGlzOworCisgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7CiAgICAgdGhpcy5lbGVtZW50LmxpbmVOdW1iZXIgPSBzdGFydExpbmU7
CisgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1jb250ZW50IjsKIAog
ICAgIHRoaXMuc3RhcnRMaW5lID0gc3RhcnRMaW5lOwogICAgIGVuZExpbmUgPSBNYXRoLm1pbih0
aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCwgZW5kTGluZSk7CiAgICAgdGhpcy5saW5lc0NvdW50
ID0gZW5kTGluZSAtIHN0YXJ0TGluZTsKIAotICAgIHRoaXMuX2xpbmVOdW1iZXJFbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB0aGlzLl9saW5lTnVtYmVyRWxlbWVu
dC5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtbnVtYmVyIjsKLSAgICB0aGlzLmVsZW1lbnQuYXBw
ZW5kQ2hpbGQodGhpcy5fbGluZU51bWJlckVsZW1lbnQpOwotCi0gICAgdGhpcy5fbGluZUNvbnRl
bnRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICB0aGlzLl9saW5l
Q29udGVudEVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLWNvbnRlbnQiOwotICAgIHRo
aXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9saW5lQ29udGVudEVsZW1lbnQpOwotCiAgICAg
dGhpcy5fZXhwYW5kZWQgPSBmYWxzZTsKIAotICAgIHZhciBsaW5lTnVtYmVycyA9IFtdOwogICAg
IHZhciBsaW5lcyA9IFtdOwogICAgIGZvciAodmFyIGkgPSBzdGFydExpbmU7IGkgPCBlbmRMaW5l
OyArK2kpIHsKLSAgICAgICAgbGluZU51bWJlcnMucHVzaChpICsgMSk7CiAgICAgICAgIGxpbmVz
LnB1c2godGhpcy5fdGV4dE1vZGVsLmxpbmUoaSkpOwogICAgIH0KLSAgICBpZiAodGhpcy5saW5l
c0NvdW50ID09PSAxKSB7Ci0gICAgICAgIC8vIFNpbmdsZSBsaW5lIGNodW5rcyBhcmUgdHlwaWNh
bGx5IGNyZWF0ZWQgZm9yIGRlY29yYXRpb25zLiBIb3N0IGxpbmUgbnVtYmVyIGluCi0gICAgICAg
IC8vIHRoZSBzdWItZWxlbWVudCBpbiBvcmRlciB0byBhbGxvdyBmbGV4aWJsZSBib3JkZXIgLyBt
YXJnaW4gbWFuYWdlbWVudC4KLSAgICAgICAgdmFyIGlubmVyU3BhbiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgaW5uZXJTcGFuLmNsYXNzTmFtZSA9ICJ3ZWJraXQt
bGluZS1udW1iZXItaW5uZXIiOwotICAgICAgICBpbm5lclNwYW4udGV4dENvbnRlbnQgPSBzdGFy
dExpbmUgKyAxOwotICAgICAgICB2YXIgb3V0ZXJTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZGl2Iik7Ci0gICAgICAgIG91dGVyU3Bhbi5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtbnVt
YmVyLW91dGVyIjsKLSAgICAgICAgb3V0ZXJTcGFuLmFwcGVuZENoaWxkKGlubmVyU3Bhbik7Ci0g
ICAgICAgIHRoaXMuX2xpbmVOdW1iZXJFbGVtZW50LmFwcGVuZENoaWxkKG91dGVyU3Bhbik7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHRoaXMuX2xpbmVOdW1iZXJFbGVtZW50LnRleHRDb250ZW50ID0g
bGluZU51bWJlcnMuam9pbigiXG4iKTsKLSAgICB0aGlzLl9saW5lQ29udGVudEVsZW1lbnQudGV4
dENvbnRlbnQgPSBsaW5lcy5qb2luKCJcbiIpOworCisgICAgdGhpcy5lbGVtZW50LnRleHRDb250
ZW50ID0gbGluZXMuam9pbigiXG4iKTsKKworICAgIC8vIFRoZSBsYXN0IGVtcHR5IGxpbmUgd2ls
bCBnZXQgc3dhbGxvd2VkIG90aGVyd2lzZS4KKyAgICBpZiAoIWxpbmVzW2xpbmVzLmxlbmd0aCAt
IDFdKQorICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiYnIiKSk7CiB9CiAKLVdlYkluc3BlY3Rvci5UZXh0Q2h1bmsucHJvdG90eXBlID0gewor
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlID0gewogICAgIGFkZERl
Y29yYXRpb246IGZ1bmN0aW9uKGRlY29yYXRpb24pCiAgICAgewogICAgICAgICBpZiAodHlwZW9m
IGRlY29yYXRpb24gPT09ICJzdHJpbmciKSB7CkBAIC02NzQsNyArOTI2LDggQEAgV2ViSW5zcGVj
dG9yLlRleHRDaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCF0aGlz
LmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50KSB7CiAgICAgICAgICAgICB0aGlzLmVsZW1lbnQu
ZGVjb3JhdGlvbnNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAg
ICAgICAgICB0aGlzLl9saW5lQ29udGVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50
LmRlY29yYXRpb25zRWxlbWVudCk7CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuZGVjb3JhdGlv
bnNFbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1kZWNvcmF0aW9ucyI7CisgICAgICAg
ICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxl
bWVudCk7CiAgICAgICAgIH0KICAgICAgICAgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVu
dC5hcHBlbmRDaGlsZChkZWNvcmF0aW9uKTsKICAgICB9LApAQCAtNzAzLDQ0ICs5NTYsNDYgQEAg
V2ViSW5zcGVjdG9yLlRleHRDaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2V4cGFu
ZGVkID0gZXhwYW5kZWQ7CiAKICAgICAgICAgaWYgKHRoaXMubGluZXNDb3VudCA9PT0gMSkgewot
ICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnNldEF0dHJpYnV0ZSh0aGlzLnN0YXJ0TGluZSwg
ImxpbmUtcm93IiwgdGhpcy5lbGVtZW50KTsKICAgICAgICAgICAgIGlmIChleHBhbmRlZCkKLSAg
ICAgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLl9wYWludExpbmVzKHRoaXMuc3RhcnRMaW5l
LCB0aGlzLnN0YXJ0TGluZSArIDEpOworICAgICAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIu
X3BhaW50TGluZSh0aGlzLmVsZW1lbnQsIHRoaXMuc3RhcnRMaW5lKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChleHBhbmRlZCkgeworICAgICAgICAgICAg
dGhpcy5fZXhwYW5kZWRMaW5lUm93cyA9IFtdOwogICAgICAgICAgICAgdmFyIHBhcmVudEVsZW1l
bnQgPSB0aGlzLmVsZW1lbnQucGFyZW50RWxlbWVudDsKICAgICAgICAgICAgIGZvciAodmFyIGkg
PSB0aGlzLnN0YXJ0TGluZTsgaSA8IHRoaXMuc3RhcnRMaW5lICsgdGhpcy5saW5lc0NvdW50OyAr
K2kpIHsKICAgICAgICAgICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX2NyZWF0ZVJvdyhpKTsK
LSAgICAgICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0QXR0cmlidXRlKGksICJsaW5lLXJv
dyIsIGxpbmVSb3cpOwogICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3Jl
KGxpbmVSb3csIHRoaXMuZWxlbWVudCk7CisgICAgICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRM
aW5lUm93cy5wdXNoKGxpbmVSb3cpOworICAgICAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIu
X3BhaW50TGluZShsaW5lUm93LCBpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHBhcmVu
dEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50KTsKLQotICAgICAgICAgICAgdGhpcy5f
dGV4dFZpZXdlci5fcGFpbnRMaW5lcyh0aGlzLnN0YXJ0TGluZSwgdGhpcy5zdGFydExpbmUgKyB0
aGlzLmxpbmVzQ291bnQpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFyIGZpcnN0
TGluZSA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUodGhpcy5zdGFydExpbmUsICJsaW5l
LXJvdyIpOwotICAgICAgICAgICAgdmFyIHBhcmVudEVsZW1lbnQgPSBmaXJzdExpbmUucGFyZW50
RWxlbWVudDsKLSAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuX3JlbGVhc2VMaW5lc0hpZ2hs
aWdodCh0aGlzLnN0YXJ0TGluZSwgdGhpcy5zdGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQpOwot
Ci0gICAgICAgICAgICBwYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmVsZW1lbnQsIGZp
cnN0TGluZSk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFydExpbmU7IGkgPCB0
aGlzLnN0YXJ0TGluZSArIHRoaXMubGluZXNDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGxpbmVSb3cgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGksICJsaW5lLXJvdyIp
OwotICAgICAgICAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5yZW1vdmVBdHRyaWJ1dGUoaSwgImxp
bmUtcm93Iik7Ci0gICAgICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5fY2FjaGVkUm93cy5w
dXNoKGxpbmVSb3cpOwotICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQo
bGluZVJvdyk7CisgICAgICAgICAgICB2YXIgZWxlbWVudEluc2VydGVkID0gZmFsc2U7CisgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2V4cGFuZGVkTGluZVJvd3MubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX2V4cGFuZGVkTGlu
ZVJvd3NbaV07CisgICAgICAgICAgICAgICAgdmFyIHBhcmVudEVsZW1lbnQgPSBsaW5lUm93LnBh
cmVudEVsZW1lbnQ7CisgICAgICAgICAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50SW5zZXJ0ZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW1lbnRJbnNlcnRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBw
YXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmVsZW1lbnQsIGxpbmVSb3cpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuX3Jl
bGVhc2VMaW5lc0hpZ2hsaWdodChsaW5lUm93KTsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50
RWxlbWVudC5yZW1vdmVDaGlsZChsaW5lUm93KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fZXhwYW5kZWRMaW5lUm93czsKICAgICAg
ICAgfQogICAgIH0sCiAKICAgICBnZXQgaGVpZ2h0KCkKICAgICB7Ci0gICAgICAgIGlmICghdGhp
cy5fZXhwYW5kZWQpCisgICAgICAgIGlmICghdGhpcy5fZXhwYW5kZWRMaW5lUm93cykKICAgICAg
ICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0OwogICAgICAgICB2YXIgcmVz
dWx0ID0gMDsKLSAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhcnRMaW5lOyBpIDwgdGhpcy5z
dGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQ7ICsraSkgewotICAgICAgICAgICAgdmFyIGxpbmVS
b3cgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGksICJsaW5lLXJvdyIpOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2V4cGFuZGVkTGluZVJvd3MubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fZXhwYW5kZWRMaW5lUm93c1tpXTsK
ICAgICAgICAgICAgIHJlc3VsdCArPSBsaW5lUm93Lm9mZnNldEhlaWdodDsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNzQ4LDI2ICsxMDAzLDIxIEBAIFdlYkluc3BlY3Rv
ci5UZXh0Q2h1bmsucHJvdG90eXBlID0gewogCiAgICAgX2NyZWF0ZVJvdzogZnVuY3Rpb24obGlu
ZU51bWJlcikKICAgICB7Ci0gICAgICAgIHZhciBjYWNoZWRSb3dzID0gdGhpcy5fdGV4dFZpZXdl
ci5fY2FjaGVkUm93czsKLSAgICAgICAgaWYgKGNhY2hlZFJvd3MubGVuZ3RoKSB7Ci0gICAgICAg
ICAgICB2YXIgbGluZVJvdyA9IGNhY2hlZFJvd3NbY2FjaGVkUm93cy5sZW5ndGggLSAxXTsKLSAg
ICAgICAgICAgIGNhY2hlZFJvd3MubGVuZ3RoLS07Ci0gICAgICAgICAgICB2YXIgbGluZU51bWJl
ckVsZW1lbnQgPSBsaW5lUm93LmZpcnN0Q2hpbGQ7Ci0gICAgICAgICAgICB2YXIgbGluZUNvbnRl
bnRFbGVtZW50ID0gbGluZVJvdy5sYXN0Q2hpbGQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICB2YXIgbGluZVJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0KLSAgICAg
ICAgICAgIHZhciBsaW5lTnVtYmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRk
Iik7Ci0gICAgICAgICAgICBsaW5lTnVtYmVyRWxlbWVudC5jbGFzc05hbWUgPSAid2Via2l0LWxp
bmUtbnVtYmVyIjsKLSAgICAgICAgICAgIGxpbmVSb3cuYXBwZW5kQ2hpbGQobGluZU51bWJlckVs
ZW1lbnQpOwotCi0gICAgICAgICAgICB2YXIgbGluZUNvbnRlbnRFbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgidGQiKTsKLSAgICAgICAgICAgIGxpbmVDb250ZW50RWxlbWVudC5jbGFz
c05hbWUgPSAid2Via2l0LWxpbmUtY29udGVudCI7Ci0gICAgICAgICAgICBsaW5lUm93LmFwcGVu
ZENoaWxkKGxpbmVDb250ZW50RWxlbWVudCk7Ci0gICAgICAgIH0KKyAgICAgICAgdmFyIGxpbmVS
b3cgPSB0aGlzLl90ZXh0Vmlld2VyLl9jYWNoZWRSb3dzLnBvcCgpIHx8IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICBsaW5lUm93LmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVy
OwotICAgICAgICBsaW5lTnVtYmVyRWxlbWVudC50ZXh0Q29udGVudCA9IGxpbmVOdW1iZXIgKyAx
OwotICAgICAgICBsaW5lQ29udGVudEVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLl90ZXh0TW9k
ZWwubGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgbGluZVJvdy5jbGFzc05hbWUgPSAid2Via2l0
LWxpbmUtY29udGVudCI7CisgICAgICAgIGxpbmVSb3cudGV4dENvbnRlbnQgPSB0aGlzLl90ZXh0
TW9kZWwubGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgaWYgKCFsaW5lUm93LnRleHRDb250ZW50
KQorICAgICAgICAgICAgbGluZVJvdy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJiciIpKTsKICAgICAgICAgcmV0dXJuIGxpbmVSb3c7CisgICAgfSwKKworICAgIGdldEV4cGFu
ZGVkTGluZVJvdzogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIGlmICghdGhp
cy5fZXhwYW5kZWQgfHwgbGluZU51bWJlciA8IHRoaXMuc3RhcnRMaW5lIHx8IGxpbmVOdW1iZXIg
Pj0gdGhpcy5zdGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQpCisgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgaWYgKCF0aGlzLl9leHBhbmRlZExpbmVSb3dzKQorICAgICAgICAgICAg
cmV0dXJuIHRoaXMuZWxlbWVudDsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkTGluZVJv
d3NbbGluZU51bWJlciAtIHRoaXMuc3RhcnRMaW5lXTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRWaWV3ZXIuY3NzIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0Vmlld2VyLmNzcwppbmRleCBiZWU5ZmU1
YzM5NTBhZDA0ODM5Zjc5YTA1YjgzYmIwNjllZTQ0NDMxLi41NDk1N2I5YTBlZmExZWI0ODY5NDk4
MDlkZTIzZTgyNTNkYzZiMzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL3RleHRWaWV3ZXIuY3NzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvdGV4dFZpZXdlci5jc3MKQEAgLTksMTIgKzksMzQgQEAKIH0KIAogLnRleHQtZWRp
dG9yLWxpbmVzIHsKLSAgICBib3JkZXI6IDA7Ci0gICAgLXdlYmtpdC1ib3JkZXItaG9yaXpvbnRh
bC1zcGFjaW5nOiAwOwotICAgIC13ZWJraXQtYm9yZGVyLXZlcnRpY2FsLXNwYWNpbmc6IDA7Cisg
ICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMDsKKyAgICBsZWZ0OiAwOworICAgIGJv
dHRvbTogMDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6
IG5vbmU7Cit9CisKKy50ZXh0LWVkaXRvci1jb250ZW50cyB7CisgICAgcG9zaXRpb246IGFic29s
dXRlOworICAgIHRvcDogMDsKKyAgICBsZWZ0OiAwOworICAgIHJpZ2h0OiAwOworICAgIGJvdHRv
bTogMDsKKyAgICBvdmVyZmxvdzogYXV0bzsKICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0
OwogfQogCisudGV4dC1lZGl0b3ItZWRpdGFibGUgeworICAgIC13ZWJraXQtdXNlci1tb2RpZnk6
IHJlYWQtd3JpdGUtcGxhaW50ZXh0LW9ubHk7Cit9CisKKy53ZWJraXQtbGluZS1kZWNvcmF0aW9u
cyB7CisgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CisgICAgLXdlYmtpdC11c2VyLXNlbGVjdDog
bm9uZTsKKyAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHk7Cit9CisKIC53ZWJraXQt
aHRtbC1tZXNzYWdlLWJ1YmJsZSB7CiAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiBibGFjayAwcHgg
MnB4IDVweDsKICAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDlweDsKQEAgLTYzLDcgKzg1LDYg
QEAKICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAg
IHdvcmQtYnJlYWs6IG5vcm1hbDsKLSAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAg
IHBhZGRpbmctcmlnaHQ6IDRweDsKICAgICBwYWRkaW5nLWxlZnQ6IDZweDsKIH0KQEAgLTg1LDEy
ICsxMDYsNiBAQAogICAgIG1hcmdpbi1yaWdodDogLTEwcHg7CiB9CiAKLS53ZWJraXQtbGluZS1j
b250ZW50IHsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBwYWRkaW5nLWxlZnQ6IDJweDsKLSAgICB2
ZXJ0aWNhbC1hbGlnbjogdG9wOwotfQotCiAud2Via2l0LWJyZWFrcG9pbnQgLndlYmtpdC1saW5l
LW51bWJlci1vdXRlciB7CiAgICAgY29sb3I6IHdoaXRlOwogICAgIGJvcmRlci13aWR0aDogMCAx
NHB4IDBweCAycHg7CkBAIC0xMzYsMjEgKzE1MSwyMSBAQAogICAgIG9wYWNpdHk6IDAuMzsKIH0K
IAotLndlYmtpdC1leGVjdXRpb24tbGluZSAud2Via2l0LWxpbmUtY29udGVudCB7Cisud2Via2l0
LWV4ZWN1dGlvbi1saW5lLndlYmtpdC1saW5lLWNvbnRlbnQgewogICAgIGJhY2tncm91bmQtY29s
b3I6IHJnYigxNzEsIDE5MSwgMjU0KTsKICAgICBvdXRsaW5lOiAxcHggc29saWQgcmdiKDY0LCAx
MTUsIDI0NCk7CiB9CiAKLS5kaWZmLWNvbnRhaW5lciAud2Via2l0LWFkZGVkLWxpbmUgLndlYmtp
dC1saW5lLWNvbnRlbnQgeworLmRpZmYtY29udGFpbmVyIC53ZWJraXQtYWRkZWQtbGluZS53ZWJr
aXQtbGluZS1jb250ZW50IHsKICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjIwLCAyNTUsIDIy
MCk7CiB9CiAKLS5kaWZmLWNvbnRhaW5lciAud2Via2l0LXJlbW92ZWQtbGluZSAud2Via2l0LWxp
bmUtY29udGVudCB7CisuZGlmZi1jb250YWluZXIgLndlYmtpdC1yZW1vdmVkLWxpbmUud2Via2l0
LWxpbmUtY29udGVudCB7CiAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjIwLCAyMjAp
OwogICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwogfQogCi0uZGlmZi1jb250YWlu
ZXIgLndlYmtpdC1jaGFuZ2VkLWxpbmUgLndlYmtpdC1saW5lLWNvbnRlbnQgeworLmRpZmYtY29u
dGFpbmVyIC53ZWJraXQtY2hhbmdlZC1saW5lLndlYmtpdC1saW5lLWNvbnRlbnQgewogICAgIGJh
Y2tncm91bmQtY29sb3I6IHJnYigyMjAsIDIyMCwgMjU1KTsKIH0KIApAQCAtMTY0LDcgKzE3OSw3
IEBACiAgICAgY29sb3I6IGJsYWNrOwogfQogCi0ud2Via2l0LWhpZ2hsaWdodGVkLWxpbmUgLndl
YmtpdC1saW5lLWNvbnRlbnQgeworLndlYmtpdC1oaWdobGlnaHRlZC1saW5lLndlYmtpdC1saW5l
LWNvbnRlbnQgewogICAgIC13ZWJraXQtYW5pbWF0aW9uOiAiZmFkZW91dCIgMnMgMHM7CiB9CiAK
</data>
<flag name="review"
          id="72423"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>