<?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>42958</bug_id>
          
          <creation_ts>2010-07-25 23:55:59 -0700</creation_ts>
          <short_desc>Pasting should fire textInput event</short_desc>
          <delta_ts>2010-08-08 22:27:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>42957</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hajime Morrita">morrita</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>255927</commentid>
    <comment_count>0</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-07-25 23:55:59 -0700</bug_when>
    <thetext>Currently pasting a text into textarea/input/contentEditable doesn&apos;t fire textInput event.
It should fire one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259970</commentid>
    <comment_count>1</comment_count>
      <attachid>63440</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-08-04 04:36:44 -0700</bug_when>
    <thetext>Created attachment 63440
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260203</commentid>
    <comment_count>2</comment_count>
      <attachid>63440</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-08-04 14:08:19 -0700</bug_when>
    <thetext>Comment on attachment 63440
Patch

&gt; diff --git a/LayoutTests/editing/pasteboard/script-tests/paste-text-events.js b/LayoutTests/editing/pasteboard/script-tests/paste-text-events.js
&gt; +function pastingTextInputHandler(evt)
&gt; +{
&gt; +    shouldBe(&quot;event.data&quot;, toStringLiteral(expectedTextEventData));
&gt; +    textInputCount++;
&gt; +    if (willCancelTextInput)
&gt; +	evt.preventDefault();

Nit: Looks like a tab character got in here.

&gt; +willCancelTextInput = false;
&gt; +for (var i = 0; i &lt; proceedingTestCases.length; ++i)
&gt; +    runSingleTest(proceedingTestCases[i]);
&gt; +shouldBe(&quot;textInputCount&quot;, &quot;proceedingTestCases.length&quot;);
&gt; +
&gt; +textInputCount = 0;
&gt; +willCancelTextInput = true;
&gt; +for (var i = 0; i &lt; cancelingTestCases.length; ++i)
&gt; +    runSingleTest(cancelingTestCases[i]);
&gt; +shouldBe(&quot;textInputCount&quot;, &quot;cancelingTestCases.length&quot;);

These tests look great!  Does this event fire for ontextinput declared in the HTML?  If so, it&apos;d be nice to add some tests for that too.

&gt; diff --git a/WebCore/editing/Editor.cpp b/WebCore/editing/Editor.cpp
&gt; +void Editor::pasteAsPlainText(const String&amp; pastingText, bool smartReplace)
&gt; +void Editor::pasteAsFragment(PassRefPtr&lt;DocumentFragment&gt; pastingFragment, bool smartReplace, bool matchStyle)

These methods seem to have only one caller.  Since they&apos;re pretty short, maybe we should just inline them?  I think it&apos;s confusing to have pasteAsPlainText and pasteAsPlainTextWithPasteboard.


&gt; +class FragmentPasteTextEvent : public TextEvent {
&gt; +public:
&gt; +    static PassRefPtr&lt;FragmentPasteTextEvent&gt; create(PassRefPtr&lt;AbstractView&gt; view, PassRefPtr&lt;DocumentFragment&gt; pastingData, bool smartReplace, bool matchStyle);

Subclassing seems like overkill just to keep track of the type of event.  Can we just add an argument to the TextEvent constructor that keeps track of the event type?  The spec mentions an inputMode parameter to initTextEvent, but that should probably happen in a different patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260392</commentid>
    <comment_count>3</comment_count>
      <attachid>63551</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-08-04 22:16:09 -0700</bug_when>
    <thetext>Created attachment 63551
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260401</commentid>
    <comment_count>4</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-08-04 22:25:55 -0700</bug_when>
    <thetext>Hi Tony, thank you fro reviewing.
I updated the patch. Could you take a look at new one?

(In reply to comment #2)
&gt; (From update of attachment 63440 [details])
&gt; &gt; diff --git a/LayoutTests/editing/pasteboard/script-tests/paste-text-events.js b/LayoutTests/editing/pasteboard/script-tests/paste-text-events.js
&gt; Nit: Looks like a tab character got in here.

Oops. removed. (I should change a setting for my javascript-mode.)

&gt; 
&gt; &gt; +willCancelTextInput = false;
&gt; &gt; +for (var i = 0; i &lt; proceedingTestCases.length; ++i)
&gt; &gt; +    runSingleTest(proceedingTestCases[i]);
&gt; &gt; +shouldBe(&quot;textInputCount&quot;, &quot;proceedingTestCases.length&quot;);
&gt; &gt; +
&gt; &gt; +textInputCount = 0;
&gt; &gt; +willCancelTextInput = true;
&gt; &gt; +for (var i = 0; i &lt; cancelingTestCases.length; ++i)
&gt; &gt; +    runSingleTest(cancelingTestCases[i]);
&gt; &gt; +shouldBe(&quot;textInputCount&quot;, &quot;cancelingTestCases.length&quot;);
&gt; 
&gt; These tests look great!  Does this event fire for ontextinput declared in the HTML?  If so, it&apos;d be nice to add some tests for that too.

WebKit doesn&apos;t implement ontextinput yet. 
Though I filed it to Bug 43538,
I noticed that there seems no standard that mentions about ontextinput.
I&apos;m not sure if we should implement this. Any ideas?

&gt; 
&gt; &gt; diff --git a/WebCore/editing/Editor.cpp b/WebCore/editing/Editor.cpp
&gt; &gt; +void Editor::pasteAsPlainText(const String&amp; pastingText, bool smartReplace)
&gt; &gt; +void Editor::pasteAsFragment(PassRefPtr&lt;DocumentFragment&gt; pastingFragment, bool smartReplace, bool matchStyle)
&gt; 
&gt; These methods seem to have only one caller.  Since they&apos;re pretty short, maybe we should just inline them?  I think it&apos;s confusing to have pasteAsPlainText and pasteAsPlainTextWithPasteboard.

They are also called from WebHTMLView.mm.
(The problem is that there are 2 very similar pasting code, 
one for WebCore and another for WebKit/mac.)
By the way, pasteXxWithoutSendingEvent() looks verbose and I removed them.

&gt; 
&gt; 
&gt; &gt; +class FragmentPasteTextEvent : public TextEvent {
&gt; &gt; +public:
&gt; &gt; +    static PassRefPtr&lt;FragmentPasteTextEvent&gt; create(PassRefPtr&lt;AbstractView&gt; view, PassRefPtr&lt;DocumentFragment&gt; pastingData, bool smartReplace, bool matchStyle);
&gt; 
&gt; Subclassing seems like overkill just to keep track of the type of event.  Can we just add an argument to the TextEvent constructor that keeps track of the event type?  The spec mentions an inputMode parameter to initTextEvent, but that should probably happen in a different patch.

Agreed and removed subclasses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260660</commentid>
    <comment_count>5</comment_count>
      <attachid>63551</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-08-05 09:39:08 -0700</bug_when>
    <thetext>Comment on attachment 63551
Patch

This looks great!  Just some small changes left.

&gt; diff --git a/WebCore/dom/TextEvent.h b/WebCore/dom/TextEvent.h
&gt; +        static PassRefPtr&lt;TextEvent&gt; createForPlainTextPaste(PassRefPtr&lt;AbstractView&gt; view, const String&amp; data, bool shouldSmartReplace)
&gt; +        {
&gt; +            RefPtr&lt;TextEvent&gt; event = adoptRef(new TextEvent(view, data));

Can you move this body into the .cpp file?

&gt; +            event-&gt;setIsPaste(true);
&gt; +            event-&gt;setShouldSmartReplace(shouldSmartReplace);

Can the member variables change after the TextEvent is created?  If not, maybe we should use constructor arguments and not have set methods.

&gt; +        static PassRefPtr&lt;TextEvent&gt; createForFragmentPaste(PassRefPtr&lt;AbstractView&gt; view, PassRefPtr&lt;DocumentFragment&gt; data, bool shouldSmartReplace, bool shouldMatchStyle)
&gt; +        {
&gt; +            RefPtr&lt;TextEvent&gt; event = adoptRef(new TextEvent(view, &quot;&quot;));

Same as above.

&gt; diff --git a/WebCore/editing/Editor.cpp b/WebCore/editing/Editor.cpp
&gt; +bool Editor::handleTextEvent(TextEvent* event)
&gt; +{
&gt; +    if (event-&gt;isPaste()) {

This refactoring looks much nicer!


&gt; diff --git a/LayoutTests/editing/pasteboard/paste-text-events.html b/LayoutTests/editing/pasteboard/paste-text-events.html

One other testing suggestion: Should we add a test to make sure that canceling keydown prevents textInput from firing?  This is mentioned here: http://www.w3.org/TR/DOM-Level-3-Events/#keyset-cancelable_keys

It would be fine to add that in a follow up change too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261011</commentid>
    <comment_count>6</comment_count>
      <attachid>63674</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-08-05 18:23:39 -0700</bug_when>
    <thetext>Created attachment 63674
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261018</commentid>
    <comment_count>7</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-08-05 18:31:24 -0700</bug_when>
    <thetext>Thanks again, Tony! The patch was updated.

&gt; &gt; diff --git a/WebCore/dom/TextEvent.h b/WebCore/dom/TextEvent.h
&gt; &gt; +        static PassRefPtr&lt;TextEvent&gt; createForPlainTextPaste(PassRefPtr&lt;AbstractView&gt; view, const String&amp; data, bool shouldSmartReplace)
&gt; &gt; +        {
&gt; &gt; +            RefPtr&lt;TextEvent&gt; event = adoptRef(new TextEvent(view, data));
&gt; 
&gt; Can you move this body into the .cpp file?
Doe.

&gt; 
&gt; &gt; +            event-&gt;setIsPaste(true);
&gt; &gt; +            event-&gt;setShouldSmartReplace(shouldSmartReplace);
&gt; 
&gt; Can the member variables change after the TextEvent is created?  If not, maybe we should use constructor arguments and not have set methods.
Sure. moved to the constructor and removed setters.

&gt; One other testing suggestion: Should we add a test to make sure that canceling keydown prevents textInput from firing?  This is mentioned here: http://www.w3.org/TR/DOM-Level-3-Events/#keyset-cancelable_keys
OK, filed Bug 43601 for that. A patch will come shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261296</commentid>
    <comment_count>8</comment_count>
      <attachid>63674</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-08-06 09:24:56 -0700</bug_when>
    <thetext>Comment on attachment 63674
Patch

In general, using enums instead of bools is preferred for readability.  But I realize that some of this is historic for smart replace and match style.  A good follow up patch would be to convert these bools to enums across all the editing code.

WebCore/dom/TextEvent.cpp:56
 +      , m_isBackTab(false)
Nit: Please initialize the bools here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261975</commentid>
    <comment_count>9</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-08-08 22:27:05 -0700</bug_when>
    <thetext>Committed r64963: &lt;http://trac.webkit.org/changeset/64963&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63440</attachid>
            <date>2010-08-04 04:36:44 -0700</date>
            <delta_ts>2010-08-04 22:16:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42958-20100804203642.patch</filename>
            <type>text/plain</type>
            <size>36566</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjOGE0MWY4OGIxMjIyMTM1YzU4YjIwZjAyMDA3ZWZkNzQ2M2Q3NDNiLi4yNTAzYTFi
MTkwZTYwMTg5NWE5NzdhNGFhYmQ0MTZlYTYzMWZlZDhiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMDgtMDQgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFzdGluZyBzaG91bGQg
ZmlyZSB0ZXh0SW5wdXQgZXZlbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00Mjk1OAorCisgICAgICAgICogZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3Rl
LXRleHQtZXZlbnRzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9wYXN0
ZWJvYXJkL3Bhc3RlLXRleHQtZXZlbnRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcv
cGFzdGVib2FyZC9zY3JpcHQtdGVzdHMvcGFzdGUtdGV4dC1ldmVudHMuanM6IEFkZGVkLgorCiAy
MDEwLTA4LTAzICBBbmRyZXcgV2lsc29uICA8YXR3aWxzb25AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQgY2hyb21pdW0gdGVzdCBleHBlY3RhdGlvbnMgZml4dXAgZm9yIG9yaWdp
bi1xdW90YS5odG1sLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJk
L3Bhc3RlLXRleHQtZXZlbnRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2VkaXRpbmcvcGFz
dGVib2FyZC9wYXN0ZS10ZXh0LWV2ZW50cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzgxZThl
MjAyZGE5MjI3ZjY2MTViZTU4NWIxOWZjN2Q5M2RlOTJiZgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9wYXN0ZS10ZXh0LWV2ZW50cy1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwzNSBAQAorVGhpcyB0ZXN0cyB0aGF0IFBhc3RlIGNvbW1hbmRzIGZpcmVz
IHRleHRJbnB1dCBldmVudHMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNT
IGV2ZW50LmRhdGEgaXMgJ1BsYWluSGVsbG8nCitQQVNTIHRlc3RUYXJnZXRUZXh0YXJlYS52YWx1
ZSBpcyAnUGxhaW5IZWxsbycKK1BBU1MgZXZlbnQuZGF0YSBpcyAnUGxhaW5IZWxsbycKK1BBU1Mg
dGVzdFRhcmdldElucHV0LnZhbHVlIGlzICdQbGFpbkhlbGxvJworUEFTUyBldmVudC5kYXRhIGlz
ICcnCitQQVNTIHRlc3RUYXJnZXRFZGl0YWJsZS5pbm5lckhUTUwgaXMgJ1BsYWluSGVsbG8nCitQ
QVNTIGV2ZW50LmRhdGEgaXMgJ1JpY2hIZWxsbycKK1BBU1MgdGVzdFRhcmdldFRleHRhcmVhLnZh
bHVlIGlzICdSaWNoSGVsbG8nCitQQVNTIGV2ZW50LmRhdGEgaXMgJ1JpY2hIZWxsbycKK1BBU1Mg
dGVzdFRhcmdldElucHV0LnZhbHVlIGlzICdSaWNoSGVsbG8nCitQQVNTIGV2ZW50LmRhdGEgaXMg
JycKK1BBU1MgdGVzdFRhcmdldEVkaXRhYmxlLmlubmVySFRNTCBpcyAnPGI+UmljaDwvYj5IZWxs
bycKK1BBU1MgdGV4dElucHV0Q291bnQgaXMgcHJvY2VlZGluZ1Rlc3RDYXNlcy5sZW5ndGgKK1BB
U1MgZXZlbnQuZGF0YSBpcyAnUGxhaW5IZWxsbycKK1BBU1MgdGVzdFRhcmdldFRleHRhcmVhLnZh
bHVlIGlzICcnCitQQVNTIGV2ZW50LmRhdGEgaXMgJ1BsYWluSGVsbG8nCitQQVNTIHRlc3RUYXJn
ZXRJbnB1dC52YWx1ZSBpcyAnJworUEFTUyBldmVudC5kYXRhIGlzICcnCitQQVNTIHRlc3RUYXJn
ZXRFZGl0YWJsZS5pbm5lckhUTUwgaXMgJycKK1BBU1MgZXZlbnQuZGF0YSBpcyAnUmljaEhlbGxv
JworUEFTUyB0ZXN0VGFyZ2V0VGV4dGFyZWEudmFsdWUgaXMgJycKK1BBU1MgZXZlbnQuZGF0YSBp
cyAnUmljaEhlbGxvJworUEFTUyB0ZXN0VGFyZ2V0SW5wdXQudmFsdWUgaXMgJycKK1BBU1MgZXZl
bnQuZGF0YSBpcyAnJworUEFTUyB0ZXN0VGFyZ2V0RWRpdGFibGUuaW5uZXJIVE1MIGlzICcnCitQ
QVNTIHRleHRJbnB1dENvdW50IGlzIGNhbmNlbGluZ1Rlc3RDYXNlcy5sZW5ndGgKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4dC1ldmVudHMuaHRtbCBiL0xh
eW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9wYXN0ZS10ZXh0LWV2ZW50cy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjkzYTUwYWRlMzUyYTYzZDEzMTk4N2M4Mzc2ZDFjM2VmNmQ3NTIyZTAKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4dC1ldmVu
dHMuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYv
L0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBo
cmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9wYXN0ZS10ZXh0LWV2ZW50cy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zY3JpcHQtdGVzdHMvcGFzdGUtdGV4dC1ldmVudHMu
anMgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc2NyaXB0LXRlc3RzL3Bhc3RlLXRl
eHQtZXZlbnRzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQwNzE3MmJmZjYyZTkzYjMwNTk2YWViMjRmZWE1MmRi
OTAzMThkZDgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9h
cmQvc2NyaXB0LXRlc3RzL3Bhc3RlLXRleHQtZXZlbnRzLmpzCkBAIC0wLDAgKzEsMTQ1IEBACitk
ZXNjcmlwdGlvbignVGhpcyB0ZXN0cyB0aGF0IFBhc3RlIGNvbW1hbmRzIGZpcmVzIHRleHRJbnB1
dCBldmVudHMuJyk7CisKK2Z1bmN0aW9uIHRvU3RyaW5nTGl0ZXJhbChzdHIpCit7CisgICByZXR1
cm4gIiciICsgc3RyICsgIiciOworfQorCit2YXIgd2lsbENhbmNlbFRleHRJbnB1dCA9IGZhbHNl
OwordmFyIHRleHRJbnB1dENvdW50ID0gMDsKK3ZhciBleHBlY3RlZFRleHRFdmVudERhdGEgPSAi
IjsKKworZnVuY3Rpb24gcGFzdGluZ1RleHRJbnB1dEhhbmRsZXIoZXZ0KQoreworICAgIHNob3Vs
ZEJlKCJldmVudC5kYXRhIiwgdG9TdHJpbmdMaXRlcmFsKGV4cGVjdGVkVGV4dEV2ZW50RGF0YSkp
OworICAgIHRleHRJbnB1dENvdW50Kys7CisgICAgaWYgKHdpbGxDYW5jZWxUZXh0SW5wdXQpCisJ
ZXZ0LnByZXZlbnREZWZhdWx0KCk7Cit9CisKK3ZhciB0ZXN0U291cmNlUm9vdCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXN0U291
cmNlUm9vdCk7CisKK3ZhciB0ZXN0VGFyZ2V0Um9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOwordGVzdFRhcmdldFJvb3QuaW5uZXJIVE1MICs9ICI8aW5wdXQgdHlwZT0ndGV4dCcg
aWQ9J3RhcmdldElucHV0JyB2YWx1ZT0nJz4iOwordGVzdFRhcmdldFJvb3QuaW5uZXJIVE1MICs9
ICI8ZGl2IGlkPSd0YXJnZXRFZGl0YWJsZScgY29udGVudEVkaXRhYmxlPiI7Cit0ZXN0VGFyZ2V0
Um9vdC5pbm5lckhUTUwgKz0gIjx0ZXh0YXJlYSBpZD0ndGFyZ2V0VGV4dGFyZWEnID48L3RleHRh
cmVhPiI7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlc3RUYXJnZXRSb290KTsKKwordGVz
dFRhcmdldEVkaXRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdldEVkaXRhYmxl
Iik7Cit0ZXN0VGFyZ2V0RWRpdGFibGUuYWRkRXZlbnRMaXN0ZW5lcigidGV4dElucHV0IiwgcGFz
dGluZ1RleHRJbnB1dEhhbmRsZXIpOwordGVzdFRhcmdldElucHV0ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInRhcmdldElucHV0Iik7Cit0ZXN0VGFyZ2V0SW5wdXQuYWRkRXZlbnRMaXN0ZW5l
cigidGV4dElucHV0IiwgcGFzdGluZ1RleHRJbnB1dEhhbmRsZXIpOwordGVzdFRhcmdldFRleHRh
cmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdldFRleHRhcmVhIik7Cit0ZXN0VGFy
Z2V0VGV4dGFyZWEuYWRkRXZlbnRMaXN0ZW5lcigidGV4dElucHV0IiwgcGFzdGluZ1RleHRJbnB1
dEhhbmRsZXIpOworCit2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOworCitm
dW5jdGlvbiBjb3B5UGxhaW5UZXh0KCkKK3sKKyAgICB0ZXN0U291cmNlUm9vdC5pbm5lckhUTUwg
PSAiPGlucHV0IHR5cGU9J3RleHQnIHZhbHVlPSdQbGFpbkhlbGxvJyBpZD0nc3JjJyAvPiI7Cisg
ICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNyYyIpOworICAgIGlucHV0
LmZvY3VzKCk7CisKKyAgICBzZWxlY3Rpb24ubW9kaWZ5KCJleHRlbmQiLCAiZm9yd2FyZCIsICJs
aW5lIik7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoIkNvcHkiKTsKK30KKworZnVuY3Rpb24g
Y29weVJpY2hUZXh0KCkKK3sKKyAgICB0ZXN0U291cmNlUm9vdC5pbm5lckhUTUwgPSAiPGRpdiBp
ZD0nc3JjJyBjb250ZW50RWRpdGFibGU+PGI+UmljaDwvYj5IZWxsbzwvZGl2PiI7CisgICAgdmFy
IGVkaXRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNyYyIpOworICAgIHNlbGVjdGlv
bi5zZXRCYXNlQW5kRXh0ZW50KGVkaXRhYmxlLCAwLCBlZGl0YWJsZSwgMCk7CisgICAgc2VsZWN0
aW9uLm1vZGlmeSgiZXh0ZW5kIiwgImZvcndhcmQiLCAibGluZSIpOworICAgIGRvY3VtZW50LmV4
ZWNDb21tYW5kKCJDb3B5Iik7Cit9CisKK2Z1bmN0aW9uIHBhc3RlVG9UYXJnZXRFZGl0YWJsZSgp
Cit7CisgICAgdmFyIGVkaXRhYmxlID0gdGVzdFRhcmdldEVkaXRhYmxlOworICAgIGVkaXRhYmxl
LmlubmVySFRNTCA9ICIiOworICAgIHNlbGVjdGlvbi5zZXRCYXNlQW5kRXh0ZW50KGVkaXRhYmxl
LCAwLCBlZGl0YWJsZSwgMCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoIlBhc3RlIik7CisK
K30KKworZnVuY3Rpb24gdGFyZ2V0RWRpdGFibGVTaG91bGRIYXZlKHZhbHVlKQoreworICAgIHNo
b3VsZEJlKCJ0ZXN0VGFyZ2V0RWRpdGFibGUuaW5uZXJIVE1MIiwgdG9TdHJpbmdMaXRlcmFsKHZh
bHVlKSk7Cit9CisKK2Z1bmN0aW9uIHBhc3RlVG9UYXJnZXRJbnB1dCgpCit7CisgICAgdmFyIGlu
cHV0ID0gdGVzdFRhcmdldElucHV0OworICAgIGlucHV0LnZhbHVlID0gIiI7CisgICAgaW5wdXQu
Zm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiUGFzdGUiKTsKK30KKworZnVuY3Rp
b24gdGFyZ2V0SW5wdXRTaG91bGRIYXZlKHZhbHVlKQoreworICAgIHNob3VsZEJlKCJ0ZXN0VGFy
Z2V0SW5wdXQudmFsdWUiLCB0b1N0cmluZ0xpdGVyYWwodmFsdWUpKTsKK30KKworZnVuY3Rpb24g
cGFzdGVUb1RhcmdldFRleHRhcmVhKCkKK3sKKyAgICB2YXIgdGV4dGFyZWEgPSB0ZXN0VGFyZ2V0
VGV4dGFyZWE7CisgICAgdGV4dGFyZWEudmFsdWUgPSAiIjsKKyAgICB0ZXh0YXJlYS5mb2N1cygp
OworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJQYXN0ZSIpOworfQorCitmdW5jdGlvbiB0YXJn
ZXRUZXh0YXJlYVNob3VsZEhhdmUodmFsdWUpCit7CisgICAgc2hvdWxkQmUoInRlc3RUYXJnZXRU
ZXh0YXJlYS52YWx1ZSIsIHRvU3RyaW5nTGl0ZXJhbCh2YWx1ZSkpOworfQorCit2YXIgcHJvY2Vl
ZGluZ1Rlc3RDYXNlcyA9IFsKKyAgICBbY29weVBsYWluVGV4dCwgcGFzdGVUb1RhcmdldFRleHRh
cmVhLCB0YXJnZXRUZXh0YXJlYVNob3VsZEhhdmUsICJQbGFpbkhlbGxvIiwgIlBsYWluSGVsbG8i
XSwKKyAgICBbY29weVBsYWluVGV4dCwgcGFzdGVUb1RhcmdldElucHV0LCB0YXJnZXRJbnB1dFNo
b3VsZEhhdmUsICJQbGFpbkhlbGxvIiwgIlBsYWluSGVsbG8iXSwKKyAgICBbY29weVBsYWluVGV4
dCwgcGFzdGVUb1RhcmdldEVkaXRhYmxlLCB0YXJnZXRFZGl0YWJsZVNob3VsZEhhdmUsICJQbGFp
bkhlbGxvIiwgIiJdLAorICAgIFtjb3B5UmljaFRleHQsIHBhc3RlVG9UYXJnZXRUZXh0YXJlYSwg
dGFyZ2V0VGV4dGFyZWFTaG91bGRIYXZlLCAiUmljaEhlbGxvIiwgIlJpY2hIZWxsbyJdLAorICAg
IFtjb3B5UmljaFRleHQsIHBhc3RlVG9UYXJnZXRJbnB1dCwgdGFyZ2V0SW5wdXRTaG91bGRIYXZl
LCAiUmljaEhlbGxvIiwgIlJpY2hIZWxsbyJdLAorICAgIFtjb3B5UmljaFRleHQsIHBhc3RlVG9U
YXJnZXRFZGl0YWJsZSwgdGFyZ2V0RWRpdGFibGVTaG91bGRIYXZlLCAiPGI+UmljaDwvYj5IZWxs
byIsICIiXSwKK107CisKK3ZhciBjYW5jZWxpbmdUZXN0Q2FzZXMgPSBbCisgICAgW2NvcHlQbGFp
blRleHQsIHBhc3RlVG9UYXJnZXRUZXh0YXJlYSwgdGFyZ2V0VGV4dGFyZWFTaG91bGRIYXZlLCAi
IiwgIlBsYWluSGVsbG8iXSwKKyAgICBbY29weVBsYWluVGV4dCwgcGFzdGVUb1RhcmdldElucHV0
LCB0YXJnZXRJbnB1dFNob3VsZEhhdmUsICIiLCAiUGxhaW5IZWxsbyJdLAorICAgIFtjb3B5UGxh
aW5UZXh0LCBwYXN0ZVRvVGFyZ2V0RWRpdGFibGUsIHRhcmdldEVkaXRhYmxlU2hvdWxkSGF2ZSwg
IiIsICIiXSwKKyAgICBbY29weVJpY2hUZXh0LCBwYXN0ZVRvVGFyZ2V0VGV4dGFyZWEsIHRhcmdl
dFRleHRhcmVhU2hvdWxkSGF2ZSwgIiIsICJSaWNoSGVsbG8iXSwKKyAgICBbY29weVJpY2hUZXh0
LCBwYXN0ZVRvVGFyZ2V0SW5wdXQsIHRhcmdldElucHV0U2hvdWxkSGF2ZSwgIiIsICJSaWNoSGVs
bG8iXSwKKyAgICBbY29weVJpY2hUZXh0LCBwYXN0ZVRvVGFyZ2V0RWRpdGFibGUsIHRhcmdldEVk
aXRhYmxlU2hvdWxkSGF2ZSwgIiIsICIiXSwKK107CisKK2Z1bmN0aW9uIHJ1blNpbmdsZVRlc3Qo
Y2FzZURhdGEpCit7CisgICAgdmFyIGNvcHkgPSBjYXNlRGF0YVswXTsKKyAgICB2YXIgcGFzdGUg
PSBjYXNlRGF0YVsxXTsKKyAgICB2YXIgdmVyaWZ5RnVuY3Rpb24gPSBjYXNlRGF0YVsyXTsKKyAg
ICB2YXIgdmVyaWZ5UGFyYW1ldGVyID0gY2FzZURhdGFbM107CisKKyAgICBleHBlY3RlZFRleHRF
dmVudERhdGEgPSBjYXNlRGF0YVs0XTsKKworICAgIGNvcHkoKTsKKyAgICBwYXN0ZSgpOworICAg
IHZlcmlmeUZ1bmN0aW9uKHZlcmlmeVBhcmFtZXRlcik7Cit9CisKK3RleHRJbnB1dENvdW50ID0g
MDsKK3dpbGxDYW5jZWxUZXh0SW5wdXQgPSBmYWxzZTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgcHJv
Y2VlZGluZ1Rlc3RDYXNlcy5sZW5ndGg7ICsraSkKKyAgICBydW5TaW5nbGVUZXN0KHByb2NlZWRp
bmdUZXN0Q2FzZXNbaV0pOworc2hvdWxkQmUoInRleHRJbnB1dENvdW50IiwgInByb2NlZWRpbmdU
ZXN0Q2FzZXMubGVuZ3RoIik7CisKK3RleHRJbnB1dENvdW50ID0gMDsKK3dpbGxDYW5jZWxUZXh0
SW5wdXQgPSB0cnVlOworZm9yICh2YXIgaSA9IDA7IGkgPCBjYW5jZWxpbmdUZXN0Q2FzZXMubGVu
Z3RoOyArK2kpCisgICAgcnVuU2luZ2xlVGVzdChjYW5jZWxpbmdUZXN0Q2FzZXNbaV0pOworc2hv
dWxkQmUoInRleHRJbnB1dENvdW50IiwgImNhbmNlbGluZ1Rlc3RDYXNlcy5sZW5ndGgiKTsKKwor
Ly8gSGlkZXMgZGF0YXNldCB0byBtYWtlIGR1bXAgY2xlYW4uCit0ZXN0VGFyZ2V0Um9vdC5zdHls
ZS5kaXNwbGF5ID0gIm5vbmUiOwordGVzdFNvdXJjZVJvb3Quc3R5bGUuZGlzcGxheSA9ICJub25l
IjsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBkYzJhZDE3OWM2
MTFiYzMxN2MxNzIyYjY0ZDNiZmYzYmRmOWVlMjdmLi5mMmUyNzdjZWZkMGYxYmZmMWMzM2UxM2Rh
MThmZDFkYTgyNDdlYzU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBi
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTgzMCw2ICs4MzAsNyBAQCBTRVQoV2ViQ29yZV9T
T1VSQ0VTCiAgICAgZG9tL09wdGlvbkdyb3VwRWxlbWVudC5jcHAKICAgICBkb20vT3ZlcmZsb3dF
dmVudC5jcHAKICAgICBkb20vUGFnZVRyYW5zaXRpb25FdmVudC5jcHAKKyAgICBkb20vUGFzdGVU
ZXh0RXZlbnQuY3BwCiAgICAgZG9tL1BvcFN0YXRlRXZlbnQuY3BwCiAgICAgZG9tL1Bvc2l0aW9u
LmNwcAogICAgIGRvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkNzM4ZDZhYjM2YmRjMTEyYjYyN2Uy
ZmZlMjA4MWI0NDZjZGIyMzcyLi41NTJmZWM1NGE4YmNmNDk4MTFjN2ZhNGM2ZTM1YmE5MzM4MDFj
MmY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDU1IEBACisyMDEwLTA4LTA0ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFBhc3Rpbmcgc2hvdWxkIGZpcmUgdGV4dElucHV0IGV2ZW50LgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI5NTgKKworICAgICAgICAtIEludHJv
ZHVjZWQgMiBUZXh0RXZlbnQgc3ViY2xhc3NlczogRnJhZ21lbnRQYXN0ZVRleHRFdmVudCBhbmQK
KyAgICAgICAgICBQbGFpblRleHRQYXN0ZVRleHRFdmVudCkKKyAgICAgICAgLSBGaXJlZCB0aGVz
ZSBldmVudCBvbiBwYXN0aW5nLgorICAgICAgICAtIEZhY3RvcmVkIG91dCBhY3R1YWwgcGFzdGUg
bG9naWMgdG8gcGFzdGVBc1h4eCBtZXRob2RzIGFuZAorICAgICAgICAgIGludm9rZWQgdGhlbSBm
cm9tIGRlZmF1bHQgaGFuZGxlciBvZiB0aGUgVGV4dEV2ZW50cy4KKyAgICAgICAgICBUaGlzIG1h
a2VzIHBhc3RpbmcgY2FuY2VsbC1hYmxlLgorICAgICAgICAKKyAgICAgICAgVGVzdDogZWRpdGlu
Zy9wYXN0ZWJvYXJkL3Bhc3RlLXRleHQtZXZlbnRzLmh0bWwKKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZXhw
LmluOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAg
ICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZG9tL1Bhc3RlVGV4dEV2ZW50
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFnbWVudFBhc3RlVGV4dEV2ZW50Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21lbnRQYXN0ZVRleHRFdmVudDo6RnJhZ21l
bnRQYXN0ZVRleHRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGFpblRleHRQYXN0ZVRleHRF
dmVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYWluVGV4dFBhc3RlVGV4dEV2ZW50
OjpQbGFpblRleHRQYXN0ZVRleHRFdmVudCk6CisgICAgICAgICogZG9tL1Bhc3RlVGV4dEV2ZW50
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21lbnRQYXN0ZVRleHRFdmVudDo6cGFz
dGluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21lbnRQYXN0ZVRleHRFdmVudDo6c21h
cnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYWdtZW50UGFzdGVUZXh0RXZlbnQ6Om1h
dGNoU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhZ21lbnRQYXN0ZVRleHRFdmVudDo6aXNG
cmFnbWVudFBhc3RlVGV4dEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYWluVGV4dFBhc3Rl
VGV4dEV2ZW50OjpwYXN0aW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGFpblRleHRQYXN0
ZVRleHRFdmVudDo6c21hcnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYWluVGV4dFBh
c3RlVGV4dEV2ZW50Ojppc1BsYWluVGV4dFBhc3RlVGV4dEV2ZW50KToKKyAgICAgICAgKiBkb20v
VGV4dEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RXZlbnQ6OmlzRnJhZ21lbnRQYXN0
ZVRleHRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RXZlbnQ6OmlzUGxhaW5UZXh0UGFz
dGVUZXh0RXZlbnQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6cGFzdGVBc1BsYWluVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnBhc3RlQXNQbGFpblRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnBhc3RlQXNGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnBhc3RlQXNGcmFnbWVudFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6cGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmRpc3BhdGNoQ1BQRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpm
aW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5o
OgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6ZGVmYXVsdFRleHRJbnB1dEV2ZW50SGFuZGxlcik6CisKIDIwMTAtMDgtMDMg
IEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIEJ1
aWxkIGZpeCBmb2xsb3dpbmcgcjY0NjI0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggOTE5YTM1NGM2Yzc1YmM4MTQ4MmRi
Yjk0M2Q0YjFjMWJiNWFhYWQwMi4uZWEwMzdhNWUwN2Y4M2FmYmQxMDMzZGJjNmYwZjYyOTU4OTUy
MDhlYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCkBAIC0xMTA2LDYgKzExMDYsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUvZG9tL092ZXJmbG93RXZlbnQuaCBcCiAJV2ViQ29yZS9kb20vUGFnZVRyYW5zaXRp
b25FdmVudC5jcHAgXAogCVdlYkNvcmUvZG9tL1BhZ2VUcmFuc2l0aW9uRXZlbnQuaCBcCisJV2Vi
Q29yZS9kb20vUGFzdGVUZXh0RXZlbnQuY3BwIFwKKwlXZWJDb3JlL2RvbS9QYXN0ZVRleHRFdmVu
dC5oIFwKIAlXZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAgXAogCVdlYkNvcmUvZG9tL1Bvc2l0aW9u
LmggXAogCVdlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4gYi9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IGMwN2E1Yjgw
NTcyYTgwNzE1MGM5YmQwZmRmYmZmYWZmN2FmNWNkYmMuLmMyNWVmMTY1YzU3N2ZlMWJkMDg3Yjhi
NGZiOTI0OGNjYTgzMTI3YjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysr
IGIvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtNjA4LDYgKzYwOCw3IEBAIF9fWk43V2ViQ29y
ZTZFZGl0b3IxM3BlcmZvcm1EZWxldGVFdgogX19aTjdXZWJDb3JlNkVkaXRvcjEzcmFuZ2VGb3JQ
b2ludEVSS05TXzhJbnRQb2ludEUKIF9fWk43V2ViQ29yZTZFZGl0b3IxM3RyeURIVE1MUGFzdGVF
dgogX19aTjdXZWJDb3JlNkVkaXRvcjE0c2V0Q29tcG9zaXRpb25FUktOU182U3RyaW5nRVJLTjNX
VEY2VmVjdG9ySU5TXzIwQ29tcG9zaXRpb25VbmRlcmxpbmVFTG0wRUVFamoKK19fWk43V2ViQ29y
ZTZFZGl0b3IxNXBhc3RlQXNGcmFnbWVudEVOM1dURjEwUGFzc1JlZlB0cklOU18xNkRvY3VtZW50
RnJhZ21lbnRFRUViYgogX19aTjdXZWJDb3JlNkVkaXRvcjE2cGFzdGVBc1BsYWluVGV4dEV2CiBf
X1pON1dlYkNvcmU2RWRpdG9yMTdpbnNlcnRPcmRlcmVkTGlzdEV2CiBfX1pON1dlYkNvcmU2RWRp
dG9yMThjb25maXJtQ29tcG9zaXRpb25FUktOU182U3RyaW5nRQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA1MmJmZTFkNWIwMTBk
NjM5MGFkOWQ0NDlmM2Q4Y2E0NzAwYThhMTM3Li4yYjFiNmQyOTBmNzYzOWZjOGZkZDk1NTBhODJk
YWRmYjA3OGUxODEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTIxNiw2ICsxMjE2LDggQEAKICAgICAgICAgICAgICdkb20v
UG9wU3RhdGVFdmVudC5oJywKICAgICAgICAgICAgICdkb20vUGFnZVRyYW5zaXRpb25FdmVudC5j
cHAnLAogICAgICAgICAgICAgJ2RvbS9QYWdlVHJhbnNpdGlvbkV2ZW50LmgnLAorICAgICAgICAg
ICAgJ2RvbS9QYXN0ZVRleHRFdmVudC5jcHAnLAorICAgICAgICAgICAgJ2RvbS9QYXN0ZVRleHRF
dmVudC5oJywKICAgICAgICAgICAgICdkb20vUG9zaXRpb24uY3BwJywKICAgICAgICAgICAgICdk
b20vUG9zaXRpb24uaCcsCiAgICAgICAgICAgICAnZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwJywK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmlu
ZGV4IGVkNWUyZGE2YmM2MWFhODMyZjJhYzgwYzI5MWM2NGM1ZGMzMDJmZjEuLmIxOWFlYWRmYTI1
YzVlZWVmNjJjOWU3NDlhNmEyYTE3NGE4ZTc5YzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29y
ZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNTIxLDYgKzUyMSw3IEBAIFNPVVJD
RVMgKz0gXAogICAgIGRvbS9TdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwIFwKICAgICBkb20vT3Zl
cmZsb3dFdmVudC5jcHAgXAogICAgIGRvbS9QYWdlVHJhbnNpdGlvbkV2ZW50LmNwcCBcCisgICAg
ZG9tL1Bhc3RlVGV4dEV2ZW50LmNwcCBcCiAgICAgZG9tL1BvcFN0YXRlRXZlbnQuY3BwIFwKICAg
ICBkb20vUG9zaXRpb24uY3BwIFwKICAgICBkb20vUG9zaXRpb25JdGVyYXRvci5jcHAgXApAQCAt
MTI4NSw2ICsxMjg2LDcgQEAgSEVBREVSUyArPSBcCiAgICAgZG9tL1N0YXRpY0hhc2hTZXROb2Rl
TGlzdC5oIFwKICAgICBkb20vT3ZlcmZsb3dFdmVudC5oIFwKICAgICBkb20vUGFnZVRyYW5zaXRp
b25FdmVudC5oIFwKKyAgICBkb20vUGFzdGVUZXh0RXZlbnQuaCBcCiAgICAgZG9tL1Bvc2l0aW9u
LmggXAogICAgIGRvbS9Qb3NpdGlvbkl0ZXJhdG9yLmggXAogICAgIGRvbS9Qcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24uaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBkYTJk
NDNkNTRjZDljNDRlODU4ZTdiM2YyYWVkNTFmODI0ODhkYzA3Li43ZTZhODYyMDY2NTE3NDFjODcw
Y2Q1MjAxMzRkOWNhNTdiYWQ3NWY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKQEAgLTMyOTgzLDYgKzMyOTgzLDEzIEBACiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGRvbVxQYWdlVHJhbnNpdGlvbkV2ZW50LmgiDQogCQkJCT4NCisJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGRvbVxQYXN0ZVRleHRFdmVudC5jcHAiDQorCQkJCT4NCisJCQk8L0Zp
bGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cUGFzdGVUZXh0RXZlbnQu
aCINCisJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGRvbVxkZWZhdWx0XFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCINCmRpZmYgLS1naXQg
YS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDM0ZTNiOThkNGE4NTMyODFlYTZj
MWNiNzUzOTcxZDViYzZmMWY0YmIuLjY1YjhmYTM3ZjdjNmRjZGEwNWY2NmM5MzQ5ZmJiODMwZDcw
ZjFlZmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0y
NzI5LDYgKzI3MjksOCBAQAogCQlBN0QyMEY2RDEwN0Y0MzhCMDBBODAzOTIgLyogV2ViR0xBY3Rp
dmVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0QyMEY2QjEwN0Y0MzhCMDBBODAzOTIgLyogV2ViR0xBY3RpdmVJbmZvLmggKi87IH07CiAJCUE3
RDI3RkM0MEUwQTU5OUYwMDc5QUQyQiAvKiBTVkdGRVRpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEMjdGQzMwRTBBNTk5RjAwNzlBRDJCIC8q
IFNWR0ZFVGlsZS5jcHAgKi87IH07CiAJCUE3RDNDNTI0MEI1NzZCNEIwMDJDQTQ1MCAvKiBQYXN0
ZWJvYXJkSGVscGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBN0QzQzUyMzBCNTc2QjRCMDAyQ0E0NTAgLyogUGFzdGVib2FyZEhlbHBlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUE3RjE2QUZDMTIw
OTNFRUQwMDc4MzZFOSAvKiBQYXN0ZVRleHRFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0YxNkFGQTEyMDkzRUVEMDA3ODM2RTkgLyogUGFz
dGVUZXh0RXZlbnQuY3BwICovOyB9OworCQlBN0YxNkFGRDEyMDkzRUVEMDA3ODM2RTkgLyogUGFz
dGVUZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3RjE2QUZCMTIwOTNFRUQwMDc4MzZFOSAvKiBQYXN0ZVRleHRFdmVudC5oICovOyB9Owog
CQlBN0Q2QjM0OTBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0Q2QjM0NzBGNjExMDQ1
MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmggKi87IH07CiAJCUE3RDZCMzRBMEY2MTEw
NDUwMEI3OUZEMSAvKiBXb3JrZXJTY3JpcHRMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdENkIzNDgwRjYxMTA0NTAwQjc5RkQxIC8qIFdv
cmtlclNjcmlwdExvYWRlci5jcHAgKi87IH07CiAJCUE3RjMzOEEzMTFDMEVGQ0EwMEEzMjBBNyAv
KiBTaGFkb3dFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3RjMzOEExMTFDMEVGQ0EwMEEzMjBBNyAvKiBTaGFkb3dFbGVtZW50LmNwcCAq
LzsgfTsKQEAgLTg0OTQsNiArODQ5Niw4IEBACiAJCUE3RDIwRjZCMTA3RjQzOEIwMEE4MDM5MiAv
KiBXZWJHTEFjdGl2ZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2Vi
R0xBY3RpdmVJbmZvLmg7IHBhdGggPSBjYW52YXMvV2ViR0xBY3RpdmVJbmZvLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3RDI3RkMzMEUwQTU5OUYwMDc5QUQyQiAvKiBTVkdGRVRp
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRkVUaWxlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdEM0M1MjMwQjU3NkI0QjAwMkNBNDUw
IC8qIFBhc3RlYm9hcmRIZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGFzdGVib2FyZEhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0YxNkFG
QTEyMDkzRUVEMDA3ODM2RTkgLyogUGFzdGVUZXh0RXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUGFzdGVUZXh0RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBN0YxNkFGQjEyMDkzRUVEMDA3ODM2RTkgLyogUGFzdGVUZXh0RXZlbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFzdGVUZXh0RXZlbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdENkIzNDcwRjYxMTA0NTAwQjc5RkQxIC8qIFdv
cmtlclNjcmlwdExvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXb3Jr
ZXJTY3JpcHRMb2FkZXIuaDsgcGF0aCA9IHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3RDZCMzQ4MEY2MTEwNDUwMEI3OUZEMSAvKiBX
b3JrZXJTY3JpcHRMb2FkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gV29ya2VyU2NyaXB0TG9hZGVyLmNwcDsgcGF0aCA9IHdvcmtlcnMvV29ya2VyU2NyaXB0TG9h
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdGMzM4QTExMUMwRUZDQTAw
QTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2hhZG93RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xNzE4Niw2ICsxNzE5MCw4IEBACiAJCQkJRTEyODRBRTkxMDQ0N0RFRTAwRUFFQjUyIC8qIFBh
Z2VUcmFuc2l0aW9uRXZlbnQuY3BwICovLAogCQkJCUUxMjg0QUUwMTA0NDdENDUwMEVBRUI1MiAv
KiBQYWdlVHJhbnNpdGlvbkV2ZW50LmggKi8sCiAJCQkJRTEyODRBRDkxMDQ0N0FFQjAwRUFFQjUy
IC8qIFBhZ2VUcmFuc2l0aW9uRXZlbnQuaWRsICovLAorCQkJCUE3RjE2QUZBMTIwOTNFRUQwMDc4
MzZFOSAvKiBQYXN0ZVRleHRFdmVudC5jcHAgKi8sCisJCQkJQTdGMTZBRkIxMjA5M0VFRDAwNzgz
NkU5IC8qIFBhc3RlVGV4dEV2ZW50LmggKi8sCiAJCQkJNDFCRjcwMEQwRkU4NkY2MTAwNUU4REVD
IC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCAqLywKIAkJCQk0MUJGNzAwRTBGRTg2
RjYxMDA1RThERUMgLyogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCAqLywKIAkJCQk1MTg5
RjBERDEwQjQ2QjBFMDBGM0M3MzkgLyogUG9wU3RhdGVFdmVudC5jcHAgKi8sCkBAIC0xOTIyOCw2
ICsxOTIzNCw3IEBACiAJCQkJQkM3NkFDMTMwREQ3QUQ1QzAwNDE1RjM0IC8qIFBhcnNlclV0aWxp
dGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIyNzA4QzcwQUYxOUVFNDAwNjUxMjdGIC8qIFBh
c3RlYm9hcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDNDNTI0MEI1NzZCNEIwMDJDQTQ1MCAv
KiBQYXN0ZWJvYXJkSGVscGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBN0YxNkFGRDEyMDkzRUVE
MDA3ODM2RTkgLyogUGFzdGVUZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyNzUzNTgw
MEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODhERDQ4NzBC
NDYyOUEzMDBDMDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEZBNkU1RDBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yMDA0Miw3ICsyMDA0OSw2IEBACiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25m
aWd1cmF0aW9uTGlzdCA9IDE0OUMyODQzMDg5MDJCMTEwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1
cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldlYkNvcmUiICovOwogCQkJY29tcGF0aWJpbGl0
eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKLQkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsK
IAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25SZWdpb25zID0gKAogCQkJ
CUVuZ2xpc2gsCkBAIC0yMTcyNSw2ICsyMTczMSw3IEBACiAJCQkJRTEyODRBRUExMDQ0N0RFRTAw
RUFFQjUyIC8qIFBhZ2VUcmFuc2l0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFF
MUVDQzIwQzkxQzkwNDAwREMyNTVCIC8qIFBhZ2VVUkxSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNEIyNzA5ODMwQUYyRTVFMDAwNjUxMjdGIC8qIFBhc3RlYm9hcmRNYWMubW0gaW4gU291
cmNlcyAqLywKKwkJCQlBN0YxNkFGQzEyMDkzRUVEMDA3ODM2RTkgLyogUGFzdGVUZXh0RXZlbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1N0YwQjA1MzgxNDAwMkNFNjRGIC8qIFBhdGgu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NjMwQjA1MzgxNDAwMkNFNjRGIC8qIFBhdGhD
Ry5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODhERDQ4OTBCNDYyOUIwMDBDMDI5OTAgLyogUGF0
aFRyYXZlcnNhbFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9k
b20vUGFzdGVUZXh0RXZlbnQuY3BwIGIvV2ViQ29yZS9kb20vUGFzdGVUZXh0RXZlbnQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjY0NjMzYTkyM2Q2ZTNmZDVkY2Y3M2MxYWViZjQ4OTg0NTJhNzlmNDcKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2RvbS9QYXN0ZVRleHRFdmVudC5jcHAKQEAgLTAsMCArMSw1
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYXN0ZVRleHRFdmVudC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8RnJhZ21lbnRQYXN0ZVRleHRFdmVudD4g
RnJhZ21lbnRQYXN0ZVRleHRFdmVudDo6Y3JlYXRlKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2
aWV3LCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHBhc3RpbmdEYXRhLCBib29sIHNtYXJ0
UmVwbGFjZSwgYm9vbCBtYXRjaFN0eWxlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRnJh
Z21lbnRQYXN0ZVRleHRFdmVudCh2aWV3LCBwYXN0aW5nRGF0YSwgc21hcnRSZXBsYWNlLCBtYXRj
aFN0eWxlKSk7Cit9CisKK0ZyYWdtZW50UGFzdGVUZXh0RXZlbnQ6OkZyYWdtZW50UGFzdGVUZXh0
RXZlbnQoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIFBhc3NSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gcGFzdGluZ0RhdGEsIGJvb2wgc21hcnRSZXBsYWNlLCBib29sIG1hdGNoU3R5bGUp
CisgICAgOiBUZXh0RXZlbnQodmlldywgIiIpCisgICAgLCBtX3Bhc3RpbmdEYXRhKHBhc3RpbmdE
YXRhKQorICAgICwgbV9zbWFydFJlcGxhY2Uoc21hcnRSZXBsYWNlKQorICAgICwgbV9tYXRjaFN0
eWxlKG1hdGNoU3R5bGUpCit7fQorCitQYXNzUmVmUHRyPFBsYWluVGV4dFBhc3RlVGV4dEV2ZW50
PiBQbGFpblRleHRQYXN0ZVRleHRFdmVudDo6Y3JlYXRlKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3
PiB2aWV3LCBjb25zdCBTdHJpbmcmIHBhc3RpbmdEYXRhLCBib29sIHNtYXJ0UmVwbGFjZSkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsYWluVGV4dFBhc3RlVGV4dEV2ZW50KHZpZXcsIHBh
c3RpbmdEYXRhLCBzbWFydFJlcGxhY2UpKTsKK30KKworUGxhaW5UZXh0UGFzdGVUZXh0RXZlbnQ6
OlBsYWluVGV4dFBhc3RlVGV4dEV2ZW50KFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3LCBj
b25zdCBTdHJpbmcmIHBhc3RpbmdEYXRhLCBib29sIHNtYXJ0UmVwbGFjZSkKKyAgICA6IFRleHRF
dmVudCh2aWV3LCBwYXN0aW5nRGF0YSkKKyAgICAsIG1fcGFzdGluZ0RhdGEocGFzdGluZ0RhdGEp
CisgICAgLCBtX3NtYXJ0UmVwbGFjZShzbWFydFJlcGxhY2UpCit7fQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9QYXN0ZVRleHRFdmVudC5oIGIvV2Vi
Q29yZS9kb20vUGFzdGVUZXh0RXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDM2NmNiNGQ3ZTVkNGM2MjQ4
NDZiNDYyMTRkYTEzNWNjYTE2NGI3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9kb20vUGFz
dGVUZXh0RXZlbnQuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYXN0ZVRleHRFdmVudF9oCisj
ZGVmaW5lIFBhc3RlVGV4dEV2ZW50X2gKKworI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIK
KyNpbmNsdWRlICJUZXh0RXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBE
b2N1bWVudEZyYWdtZW50OworCitjbGFzcyBGcmFnbWVudFBhc3RlVGV4dEV2ZW50IDogcHVibGlj
IFRleHRFdmVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RnJhZ21lbnRQYXN0
ZVRleHRFdmVudD4gY3JlYXRlKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3LCBQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IHBhc3RpbmdEYXRhLCBib29sIHNtYXJ0UmVwbGFjZSwgYm9v
bCBtYXRjaFN0eWxlKTsKKyAgICBEb2N1bWVudEZyYWdtZW50KiBwYXN0aW5nRGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fcGFzdGluZ0RhdGEuZ2V0KCk7IH0KKyAgICBib29sIHNtYXJ0UmVwbGFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc21hcnRSZXBsYWNlOyB9CisgICAgYm9vbCBtYXRjaFN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXRjaFN0eWxlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNGcmFn
bWVudFBhc3RlVGV4dEV2ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCitwcml2YXRlOgor
ICAgIEZyYWdtZW50UGFzdGVUZXh0RXZlbnQoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcs
IFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gcGFzdGluZ0RhdGEsIGJvb2wgc21hcnRSZXBs
YWNlLCBib29sIG1hdGNoU3R5bGUpOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBtX3Bh
c3RpbmdEYXRhOworICAgIGJvb2wgbV9zbWFydFJlcGxhY2U7CisgICAgYm9vbCBtX21hdGNoU3R5
bGU7Cit9OworCitjbGFzcyBQbGFpblRleHRQYXN0ZVRleHRFdmVudCA6IHB1YmxpYyBUZXh0RXZl
bnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsYWluVGV4dFBhc3RlVGV4dEV2
ZW50PiBjcmVhdGUoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIGNvbnN0IFN0cmluZyYg
cGFzdGluZ0RhdGEsIGJvb2wgc21hcnRSZXBsYWNlKTsKKyAgICBjb25zdCBTdHJpbmcmIHBhc3Rp
bmdEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wYXN0aW5nRGF0YTsgfQorICAgIGJvb2wgc21hcnRS
ZXBsYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zbWFydFJlcGxhY2U7IH0KKworICAgIHZpcnR1YWwg
Ym9vbCBpc1BsYWluVGV4dFBhc3RlVGV4dEV2ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQor
Citwcml2YXRlOgorICAgIFBsYWluVGV4dFBhc3RlVGV4dEV2ZW50KFBhc3NSZWZQdHI8QWJzdHJh
Y3RWaWV3PiB2aWV3LCBjb25zdCBTdHJpbmcmIHBhc3RpbmdEYXRhLCBib29sIHNtYXJ0UmVwbGFj
ZSk7CisgICAgU3RyaW5nIG1fcGFzdGluZ0RhdGE7CisgICAgYm9vbCBtX3NtYXJ0UmVwbGFjZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBhc3RlVGV4dEV2ZW50
X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1RleHRFdmVudC5oIGIvV2ViQ29yZS9kb20vVGV4
dEV2ZW50LmgKaW5kZXggOWY5M2ZkYjM3ZjUyMzdlMGQxN2U4OTcxYTg0ZTg2MTdmNGJiMDM0OS4u
NmQ2NTQzZDg3NTYyZTA5ZGJjNmRkMGZjNDI0YjczNWJiNDBmNWU4YyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vVGV4dEV2ZW50LmgKKysrIGIvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmgKQEAgLTQ4
LDYgKzQ4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmcgZGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fZGF0YTsgfQogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1RleHRFdmVu
dCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNGcmFnbWVudFBhc3RlVGV4dEV2ZW50
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzUGxhaW5U
ZXh0UGFzdGVUZXh0RXZlbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgICAgIC8v
IElmIHRydWUsIGFueSBuZXdsaW5lIGNoYXJhY3RlcnMgaW4gdGhlIHRleHQgYXJlIGxpbmUgYnJl
YWtzIG9ubHksIG5vdCBwYXJhZ3JhcGggc2VwYXJhdG9ycy4KICAgICAgICAgYm9vbCBpc0xpbmVC
cmVhaygpIGNvbnN0IHsgcmV0dXJuIG1faXNMaW5lQnJlYWs7IH0KQEAgLTU3LDEwICs1OSwxMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgaXNCYWNrVGFiKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0JhY2tUYWI7IH0KICAgICAgICAgdm9pZCBzZXRJc0JhY2tUYWIoYm9vbCBpc0Jh
Y2tUYWIpIHsgbV9pc0JhY2tUYWIgPSBpc0JhY2tUYWI7IH0KIAotICAgIHByaXZhdGU6CisgICAg
cHJvdGVjdGVkOgogICAgICAgICBUZXh0RXZlbnQoKTsKICAgICAgICAgVGV4dEV2ZW50KFBhc3NS
ZWZQdHI8QWJzdHJhY3RWaWV3PiwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIAorICAgIHByaXZhdGU6
CiAgICAgICAgIFN0cmluZyBtX2RhdGE7CiAgICAgICAgIGJvb2wgbV9pc0xpbmVCcmVhazsKICAg
ICAgICAgYm9vbCBtX2lzQmFja1RhYjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggNDRkOGQ1ZmI4NDg3NjMy
ZWY3MjNkMjEwZmU1MjQ0N2I0YTg2Nzg1Zi4uYThkYWQ3ZGFhMGU0NTI4MmZlYzg4ZTdiNTJhZGE4
MzQ2Nzk0ZDFhYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJL
aWxsUmluZy5oIgogI2luY2x1ZGUgIk1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oIgogI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYXN0ZVRleHRFdmVudC5oIgogI2luY2x1ZGUgIlBhc3Rl
Ym9hcmQuaCIKICNpbmNsdWRlICJSZW1vdmVGb3JtYXRDb21tYW5kLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyQmxvY2suaCIKQEAgLTI4MiwxMSArMjgzLDM5IEBAIHZvaWQgRWRpdG9yOjpkZWxldGVTZWxl
Y3Rpb25XaXRoU21hcnREZWxldGUoYm9vbCBzbWFydERlbGV0ZSkKICAgICBhcHBseUNvbW1hbmQo
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIHNtYXJ0
RGVsZXRlKSk7CiB9CiAKK3ZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0KGNvbnN0IFN0cmlu
ZyYgcGFzdGluZ1RleHQsIGJvb2wgc21hcnRSZXBsYWNlKQoreworICAgIE5vZGUqIHRhcmdldCA9
IGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKTsKKyAgICBpZiAoIXRhcmdldCkKKyAgICAg
ICAgcmV0dXJuOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHRhcmdldC0+ZGlzcGF0
Y2hFdmVudChQbGFpblRleHRQYXN0ZVRleHRFdmVudDo6Y3JlYXRlKG1fZnJhbWUtPmRvbVdpbmRv
dygpLCBwYXN0aW5nVGV4dCwgc21hcnRSZXBsYWNlKSwgZWMpOworfQorCit2b2lkIEVkaXRvcjo6
cGFzdGVBc1BsYWluVGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KGNvbnN0IFN0cmluZyYgcGFz
dGluZ1RleHQsIGJvb2wgc21hcnRSZXBsYWNlKQoreworICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRo
VGV4dChwYXN0aW5nVGV4dCwgZmFsc2UsIHNtYXJ0UmVwbGFjZSk7Cit9CisKK3ZvaWQgRWRpdG9y
OjpwYXN0ZUFzRnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBwYXN0aW5nRnJh
Z21lbnQsIGJvb2wgc21hcnRSZXBsYWNlLCBib29sIG1hdGNoU3R5bGUpCit7CisgICAgTm9kZSog
dGFyZ2V0ID0gZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpOworICAgIGlmICghdGFyZ2V0
KQorICAgICAgICByZXR1cm47CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgdGFyZ2V0
LT5kaXNwYXRjaEV2ZW50KEZyYWdtZW50UGFzdGVUZXh0RXZlbnQ6OmNyZWF0ZShtX2ZyYW1lLT5k
b21XaW5kb3coKSwgcGFzdGluZ0ZyYWdtZW50LCBzbWFydFJlcGxhY2UsIG1hdGNoU3R5bGUpLCBl
Yyk7Cit9CisKK3ZvaWQgRWRpdG9yOjpwYXN0ZUFzRnJhZ21lbnRXaXRob3V0U2VuZGluZ1RleHRF
dmVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHBhc3RpbmdGcmFnbWVudCwgYm9vbCBz
bWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSkKK3sKKyAgICByZXBsYWNlU2VsZWN0aW9uV2l0
aEZyYWdtZW50KHBhc3RpbmdGcmFnbWVudCwgZmFsc2UsIHNtYXJ0UmVwbGFjZSwgbWF0Y2hTdHls
ZSk7Cit9CisKIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQoUGFz
dGVib2FyZCogcGFzdGVib2FyZCkKIHsKICAgICBTdHJpbmcgdGV4dCA9IHBhc3RlYm9hcmQtPnBs
YWluVGV4dChtX2ZyYW1lKTsKICAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZElu
c2VydFRleHQodGV4dCwgc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25Q
YXN0ZWQpKQotICAgICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQodGV4dCwgZmFsc2UsIGNh
blNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQpKTsKKyAgICAgICAgcGFzdGVB
c1BsYWluVGV4dCh0ZXh0LCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJk
KSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBh
c3RlYm9hcmQsIGJvb2wgYWxsb3dQbGFpblRleHQpCkBAIC0yOTUsNyArMzI0LDcgQEAgdm9pZCBF
ZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgYm9vbCBh
bGxvd1BsYWluVGV4dCkKICAgICBib29sIGNob3NlUGxhaW5UZXh0OwogICAgIFJlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHBhc3RlYm9hcmQtPmRvY3VtZW50RnJhZ21lbnQobV9m
cmFtZSwgcmFuZ2UsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7CiAgICAgaWYgKGZy
YWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdtZW50KGZyYWdtZW50LCByYW5nZSwgRWRpdG9ySW5z
ZXJ0QWN0aW9uUGFzdGVkKSkKLSAgICAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChm
cmFnbWVudCwgZmFsc2UsIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQp
LCBjaG9zZVBsYWluVGV4dCk7CisgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudCwgY2Fu
U21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQocGFzdGVib2FyZCksIGNob3NlUGxhaW5UZXh0KTsK
IH0KIAogYm9vbCBFZGl0b3I6OmNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9h
cmQqIHBhc3RlYm9hcmQpCkBAIC03MDYsMTIgKzczNSw5IEBAIHZvaWQgRWRpdG9yOjpjbGVhckxh
c3RFZGl0Q29tbWFuZCgpCiAvLyB0aGUgZXZlbnQgaGFuZGxlciBOT1Qgc2V0dGluZyB0aGUgcmV0
dXJuIHZhbHVlIHRvIGZhbHNlCiBib29sIEVkaXRvcjo6ZGlzcGF0Y2hDUFBFdmVudChjb25zdCBB
dG9taWNTdHJpbmcgJmV2ZW50VHlwZSwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSkKIHsK
LSAgICBOb2RlKiB0YXJnZXQgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5lbGVtZW50
KCk7Ci0gICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHRhcmdldCA9IG1fZnJhbWUtPmRvY3VtZW50
KCktPmJvZHkoKTsKKyAgICBOb2RlKiB0YXJnZXQgPSBmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0
aW9uKCk7CiAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHRhcmdl
dCA9IHRhcmdldC0+c2hhZG93QW5jZXN0b3JOb2RlKCk7CiAgICAgCiAgICAgUmVmUHRyPENsaXBi
b2FyZD4gY2xpcGJvYXJkID0gbmV3R2VuZXJhbENsaXBib2FyZChwb2xpY3ksIG1fZnJhbWUpOwog
CkBAIC03MjYsNiArNzUyLDE2IEBAIGJvb2wgRWRpdG9yOjpkaXNwYXRjaENQUEV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBDbGlwYm9hcmRBY2Nlc3NQb2xpCiAgICAgcmV0dXJu
ICFub0RlZmF1bHRQcm9jZXNzaW5nOwogfQogCitOb2RlKiBFZGl0b3I6OmZpbmRFdmVudFRhcmdl
dEZyb21TZWxlY3Rpb24oKSBjb25zdAoreworICAgIE5vZGUqIHRhcmdldCA9IG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5zdGFydCgpLmVsZW1lbnQoKTsKKyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAg
dGFyZ2V0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Ym9keSgpOworICAgIGlmICghdGFyZ2V0KQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gdGFyZ2V0LT5zaGFkb3dBbmNlc3Rvck5vZGUo
KTsKK30KKwogdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKICAgICBzd2l0Y2ggKG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5zZWxlY3Rpb25UeXBlKCkpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuaCBiL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCBkYjI0OWU3MjJjMWJj
YzRjNmQyNWNkNzVhODczMmIyMTZkZDBhNWRjLi4xYjdlMjU1YmUwZjhhZDEyNDlmZWQ5NjBjYmRh
NTdmMzBhNWRmYTUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0xMzgsNyArMTM4LDggQEAgcHVibGljOgogICAg
IGJvb2wgZGVsZXRlV2l0aERpcmVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyOjpFRGlyZWN0aW9u
LCBUZXh0R3JhbnVsYXJpdHksIGJvb2wga2lsbFJpbmcsIGJvb2wgaXNUeXBpbmdBY3Rpb24pOwog
ICAgIHZvaWQgZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGJvb2wgc21hcnREZWxldGUp
OwogICAgIGJvb2wgZGlzcGF0Y2hDUFBFdmVudChjb25zdCBBdG9taWNTdHJpbmcmLCBDbGlwYm9h
cmRBY2Nlc3NQb2xpY3kpOwotICAgIAorICAgIE5vZGUqIGZpbmRFdmVudFRhcmdldEZyb21TZWxl
Y3Rpb24oKSBjb25zdDsKKwogICAgIE5vZGUqIHJlbW92ZWRBbmNob3IoKSBjb25zdCB7IHJldHVy
biBtX3JlbW92ZWRBbmNob3IuZ2V0KCk7IH0KICAgICB2b2lkIHNldFJlbW92ZWRBbmNob3IoUGFz
c1JlZlB0cjxOb2RlPiBuKSB7IG1fcmVtb3ZlZEFuY2hvciA9IG47IH0KIApAQCAtMjkzLDYgKzI5
NCwxMiBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gbmV4dFZpc2libGVSYW5nZShS
YW5nZSosIGNvbnN0IFN0cmluZyYsIGJvb2wgZm9yd2FyZCwgYm9vbCBjYXNlRmxhZywgYm9vbCB3
cmFwRmxhZyk7CiAgICAgCiAgICAgdm9pZCBhZGRUb0tpbGxSaW5nKFJhbmdlKiwgYm9vbCBwcmVw
ZW5kKTsKKworICAgIHZvaWQgcGFzdGVBc0ZyYWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4sIGJvb2wgc21hcnRSZXBsYWNlLCBib29sIG1hdGNoU3R5bGUpOworICAgIHZvaWQgcGFz
dGVBc0ZyYWdtZW50V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSk7CisgICAgdm9pZCBw
YXN0ZUFzUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYsIGJvb2wgc21hcnRSZXBsYWNlKTsKKyAgICB2
b2lkIHBhc3RlQXNQbGFpblRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChjb25zdCBTdHJpbmcm
LCBib29sIHNtYXJ0UmVwbGFjZSk7CisKIHByaXZhdGU6CiAgICAgRnJhbWUqIG1fZnJhbWU7CiAg
ICAgT3duUHRyPERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI+IG1fZGVsZXRlQnV0dG9uQ29udHJvbGxl
cjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggZTEwYTNhMWM2ZDg0ZjVjM2ExYWEwNGUxM2VkY2Qz
MmYwMDA4YTFhYy4uZmM1NGFlNTgwOGQ5ZGJlZDhhMDgwMzYxYmQyNWI0YjI1OTRlYzRiOCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKKyNpbmNsdWRlICJQYXN0ZVRleHRFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
S2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1
ZGUgIlBsdWdpbkRvY3VtZW50LmgiCkBAIC0yNjc0LDYgKzI2NzUsMjAgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OnRhYnNUb0xpbmtzKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAogCiB2b2lkIEV2
ZW50SGFuZGxlcjo6ZGVmYXVsdFRleHRJbnB1dEV2ZW50SGFuZGxlcihUZXh0RXZlbnQqIGV2ZW50
KQogeworICAgIGlmIChldmVudC0+aXNQbGFpblRleHRQYXN0ZVRleHRFdmVudCgpKSB7CisgICAg
ICAgIFBsYWluVGV4dFBhc3RlVGV4dEV2ZW50KiBwbGFpblRleHRFdmVudCA9IHN0YXRpY19jYXN0
PFBsYWluVGV4dFBhc3RlVGV4dEV2ZW50Kj4oZXZlbnQpOworICAgICAgICBtX2ZyYW1lLT5lZGl0
b3IoKS0+cGFzdGVBc1BsYWluVGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KHBsYWluVGV4dEV2
ZW50LT5wYXN0aW5nRGF0YSgpLCBwbGFpblRleHRFdmVudC0+c21hcnRSZXBsYWNlKCkpOworICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChldmVudC0+aXNGcmFnbWVudFBhc3RlVGV4dEV2ZW50KCkpIHsKKyAgICAgICAg
RnJhZ21lbnRQYXN0ZVRleHRFdmVudCogZnJhZ21lbnRFdmVudCA9IHN0YXRpY19jYXN0PEZyYWdt
ZW50UGFzdGVUZXh0RXZlbnQqPihldmVudCk7CisgICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLT5w
YXN0ZUFzRnJhZ21lbnRXaXRob3V0U2VuZGluZ1RleHRFdmVudChmcmFnbWVudEV2ZW50LT5wYXN0
aW5nRGF0YSgpLCBmcmFnbWVudEV2ZW50LT5zbWFydFJlcGxhY2UoKSwgZnJhZ21lbnRFdmVudC0+
bWF0Y2hTdHlsZSgpKTsKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBTdHJpbmcgZGF0YSA9IGV2ZW50LT5kYXRhKCk7CiAg
ICAgaWYgKGRhdGEgPT0gIlxuIikgewogICAgICAgICBpZiAoZXZlbnQtPmlzTGluZUJyZWFrKCkp
IHsKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvV2ViS2l0L21hYy9DaGFuZ2VM
b2cKaW5kZXggMzFiOGEwYWU0M2JmNGNhNGExODIwMGU2ZjA5YWUzMTBiNTcxM2JjOC4uNzEzNmVl
OTJiOTgzYjc5YzQ0NDg2YjM0NThiOWE4M2FkZWIwMjhkMSAxMDA2NDQKLS0tIGEvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAor
MjAxMC0wOC0wNCAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXN0aW5nIHNob3VsZCBm
aXJlIHRleHRJbnB1dCBldmVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQyOTU4CisKKyAgICAgICAgT24gcGFzdGUsIGludm9rZSBFZGl0b3IgaW5z
dGVhZCBvZiBkaXJlY3QgY29tbWFuZCBpbnZvY2F0aW9uLAorICAgICAgICB3aGljaCBhbGxvd3Mg
ZGlzcGF0Y2hpbmcgZXZlbnRzIGJlZm9yZSBhY3R1YWwgcGFzdGUuCisKKyAgICAgICAgKiBXZWJW
aWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfcGFzdGVXaXRoUGFz
dGVib2FyZDphbGxvd1BsYWluVGV4dDpdKToKKwogMjAxMC0wOC0wMyAgSm9zZXBoIFBlY29yYXJv
ICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEtpbHpl
ci4KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbSBiL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCA1OGNlMTI0NDIxYzYzNjhmNTI1MGIw
MjAyMDc4MjhkOTczODllYWM1Li4wZTU1OWI0NGY0Mjc2M2QwYmQ1MzNiOTg4M2NjM2ZkNGZiYzdi
NjY1IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KKysrIGIv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCkBAIC04NDksMTEgKzg0OSwxMiBAQCBz
dGF0aWMgTlNVUkwqIHVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoTlNTdHJpbmcgKnJlbGF0aXZl
UGFydCkKICAgICBbd2ViVmlldyBfc2V0SW5zZXJ0aW9uUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsK
IAogICAgIERPTVJhbmdlICpyYW5nZSA9IFtzZWxmIF9zZWxlY3RlZFJhbmdlXTsKKyAgICBGcmFt
ZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICAKICNpZiAhZGVmaW5lZChC
VUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgIERPTURvY3VtZW50RnJhZ21lbnQg
KmZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJv
YXJkIGluQ29udGV4dDpyYW5nZSBhbGxvd1BsYWluVGV4dDphbGxvd1BsYWluVGV4dF07CiAgICAg
aWYgKGZyYWdtZW50ICYmIFtzZWxmIF9zaG91bGRJbnNlcnRGcmFnbWVudDpmcmFnbWVudCByZXBs
YWNpbmdET01SYW5nZTpyYW5nZSBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVk
XSkKLSAgICAgICAgW1tzZWxmIF9mcmFtZV0gX3JlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6
ZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6Tk8gc21hcnRSZXBsYWNlOltzZWxmIF9jYW5TbWFy
dFJlcGxhY2VXaXRoUGFzdGVib2FyZDpwYXN0ZWJvYXJkXSBtYXRjaFN0eWxlOk5PXTsKKyAgICAg
ICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+cGFzdGVBc0ZyYWdtZW50KGNvcmUoZnJhZ21lbnQpLCBb
c2VsZiBfY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQ6cGFzdGVib2FyZF0sIGZhbHNlKTsK
ICNlbHNlCiAgICAgLy8gTWFpbCBpcyBpZ25vcmluZyB0aGUgZnJhbWVudCBwYXNzZWQgdG8gdGhl
IGRlbGVnYXRlIGFuZCBjcmVhdGVzIGEgbmV3IG9uZS4KICAgICAvLyBXZSB3YW50IHRvIGF2b2lk
IGNyZWF0aW5nIHRoZSBmcmFnbWVudCB0d2ljZS4KQEAgLTg2MSwxMiArODYyLDEyIEBAIHN0YXRp
YyBOU1VSTCogdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChOU1N0cmluZyAqcmVsYXRpdmVQYXJ0
KQogICAgICAgICBpZiAoW3NlbGYgX3Nob3VsZEluc2VydEZyYWdtZW50Om5pbCByZXBsYWNpbmdE
T01SYW5nZTpyYW5nZSBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkXSkgewog
ICAgICAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1l
bnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgaW5Db250ZXh0OnJhbmdlIGFsbG93
UGxhaW5UZXh0OmFsbG93UGxhaW5UZXh0XTsKICAgICAgICAgICAgIGlmIChmcmFnbWVudCkKLSAg
ICAgICAgICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVu
dDpmcmFnbWVudCBzZWxlY3RSZXBsYWNlbWVudDpOTyBzbWFydFJlcGxhY2U6W3NlbGYgX2NhblNt
YXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRdIG1hdGNoU3R5bGU6Tk9dOworICAg
ICAgICAgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnBhc3RlQXNGcmFnbWVudChjb3JlKGZy
YWdtZW50KSwgW3NlbGYgX2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRd
LCBmYWxzZSk7CiAgICAgICAgIH0gICAgICAgIAogICAgIH0gZWxzZSB7CiAgICAgICAgIERPTURv
Y3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFz
dGVib2FyZDpwYXN0ZWJvYXJkIGluQ29udGV4dDpyYW5nZSBhbGxvd1BsYWluVGV4dDphbGxvd1Bs
YWluVGV4dF07CiAgICAgICAgIGlmIChmcmFnbWVudCAmJiBbc2VsZiBfc2hvdWxkSW5zZXJ0RnJh
Z21lbnQ6ZnJhZ21lbnQgcmVwbGFjaW5nRE9NUmFuZ2U6cmFuZ2UgZ2l2ZW5BY3Rpb246V2ViVmll
d0luc2VydEFjdGlvblBhc3RlZF0pCi0gICAgICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfcmVwbGFj
ZVNlbGVjdGlvbldpdGhGcmFnbWVudDpmcmFnbWVudCBzZWxlY3RSZXBsYWNlbWVudDpOTyBzbWFy
dFJlcGxhY2U6W3NlbGYgX2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRd
IG1hdGNoU3R5bGU6Tk9dOworICAgICAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+cGFzdGVB
c0ZyYWdtZW50KGNvcmUoZnJhZ21lbnQpLCBbc2VsZiBfY2FuU21hcnRSZXBsYWNlV2l0aFBhc3Rl
Ym9hcmQ6cGFzdGVib2FyZF0sIGZhbHNlKTsKICAgICB9CiAjZW5kaWYKICAgICBbd2ViVmlldyBf
c2V0SW5zZXJ0aW9uUGFzdGVib2FyZDpuaWxdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63551</attachid>
            <date>2010-08-04 22:16:09 -0700</date>
            <delta_ts>2010-08-05 18:23:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42958-20100805141607.patch</filename>
            <type>text/plain</type>
            <size>23729</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBiMzlkMzk2ODA4ODQ3NGI1MGUxM2RkNzExODFlZDNmZGMxNmU4YjMxLi4yOGVjZDI0
ZDlmODM4OTRlZDI3NWViOTVjNzNjNzk1NTQ2MDdiY2Y2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMDgtMDQgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFzdGluZyBzaG91bGQg
ZmlyZSB0ZXh0SW5wdXQgZXZlbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00Mjk1OAorCisgICAgICAgICogZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3Rl
LXRleHQtZXZlbnRzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9wYXN0
ZWJvYXJkL3Bhc3RlLXRleHQtZXZlbnRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcv
cGFzdGVib2FyZC9zY3JpcHQtdGVzdHMvcGFzdGUtdGV4dC1ldmVudHMuanM6IEFkZGVkLgorCiAy
MDEwLTA4LTA0ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNjQ2NzQuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4dC1ldmVudHMtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLXRleHQtZXZlbnRzLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jODFlOGUyMDJkYTkyMjdmNjYxNWJlNTg1YjE5ZmM3ZDkzZGU5
MmJmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Bh
c3RlLXRleHQtZXZlbnRzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDM1IEBACitUaGlzIHRlc3Rz
IHRoYXQgUGFzdGUgY29tbWFuZHMgZmlyZXMgdGV4dElucHV0IGV2ZW50cy4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZXZlbnQuZGF0YSBpcyAnUGxhaW5IZWxsbycKK1BB
U1MgdGVzdFRhcmdldFRleHRhcmVhLnZhbHVlIGlzICdQbGFpbkhlbGxvJworUEFTUyBldmVudC5k
YXRhIGlzICdQbGFpbkhlbGxvJworUEFTUyB0ZXN0VGFyZ2V0SW5wdXQudmFsdWUgaXMgJ1BsYWlu
SGVsbG8nCitQQVNTIGV2ZW50LmRhdGEgaXMgJycKK1BBU1MgdGVzdFRhcmdldEVkaXRhYmxlLmlu
bmVySFRNTCBpcyAnUGxhaW5IZWxsbycKK1BBU1MgZXZlbnQuZGF0YSBpcyAnUmljaEhlbGxvJwor
UEFTUyB0ZXN0VGFyZ2V0VGV4dGFyZWEudmFsdWUgaXMgJ1JpY2hIZWxsbycKK1BBU1MgZXZlbnQu
ZGF0YSBpcyAnUmljaEhlbGxvJworUEFTUyB0ZXN0VGFyZ2V0SW5wdXQudmFsdWUgaXMgJ1JpY2hI
ZWxsbycKK1BBU1MgZXZlbnQuZGF0YSBpcyAnJworUEFTUyB0ZXN0VGFyZ2V0RWRpdGFibGUuaW5u
ZXJIVE1MIGlzICc8Yj5SaWNoPC9iPkhlbGxvJworUEFTUyB0ZXh0SW5wdXRDb3VudCBpcyBwcm9j
ZWVkaW5nVGVzdENhc2VzLmxlbmd0aAorUEFTUyBldmVudC5kYXRhIGlzICdQbGFpbkhlbGxvJwor
UEFTUyB0ZXN0VGFyZ2V0VGV4dGFyZWEudmFsdWUgaXMgJycKK1BBU1MgZXZlbnQuZGF0YSBpcyAn
UGxhaW5IZWxsbycKK1BBU1MgdGVzdFRhcmdldElucHV0LnZhbHVlIGlzICcnCitQQVNTIGV2ZW50
LmRhdGEgaXMgJycKK1BBU1MgdGVzdFRhcmdldEVkaXRhYmxlLmlubmVySFRNTCBpcyAnJworUEFT
UyBldmVudC5kYXRhIGlzICdSaWNoSGVsbG8nCitQQVNTIHRlc3RUYXJnZXRUZXh0YXJlYS52YWx1
ZSBpcyAnJworUEFTUyBldmVudC5kYXRhIGlzICdSaWNoSGVsbG8nCitQQVNTIHRlc3RUYXJnZXRJ
bnB1dC52YWx1ZSBpcyAnJworUEFTUyBldmVudC5kYXRhIGlzICcnCitQQVNTIHRlc3RUYXJnZXRF
ZGl0YWJsZS5pbm5lckhUTUwgaXMgJycKK1BBU1MgdGV4dElucHV0Q291bnQgaXMgY2FuY2VsaW5n
VGVzdENhc2VzLmxlbmd0aAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9w
YXN0ZS10ZXh0LWV2ZW50cy5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Bh
c3RlLXRleHQtZXZlbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTNhNTBhZGUzNTJhNjNkMTMxOTg3Yzgz
NzZkMWMzZWY2ZDc1MjJlMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcv
cGFzdGVib2FyZC9wYXN0ZS10ZXh0LWV2ZW50cy5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlw
dGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0
LXRlc3RzL3Bhc3RlLXRleHQtZXZlbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Njcmlw
dC10ZXN0cy9wYXN0ZS10ZXh0LWV2ZW50cy5qcyBiL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVi
b2FyZC9zY3JpcHQtdGVzdHMvcGFzdGUtdGV4dC1ldmVudHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTczM2Zh
Mzk1YjE1ZGIwMDc4YTliMDI1ZTZlNmJhOTg5NWQxMmVjZgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zY3JpcHQtdGVzdHMvcGFzdGUtdGV4dC1ldmVu
dHMuanMKQEAgLTAsMCArMSwxNDUgQEAKK2Rlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIHRoYXQgUGFz
dGUgY29tbWFuZHMgZmlyZXMgdGV4dElucHV0IGV2ZW50cy4nKTsKKworZnVuY3Rpb24gdG9TdHJp
bmdMaXRlcmFsKHN0cikKK3sKKyAgIHJldHVybiAiJyIgKyBzdHIgKyAiJyI7Cit9CisKK3ZhciB3
aWxsQ2FuY2VsVGV4dElucHV0ID0gZmFsc2U7Cit2YXIgdGV4dElucHV0Q291bnQgPSAwOwordmFy
IGV4cGVjdGVkVGV4dEV2ZW50RGF0YSA9ICIiOworCitmdW5jdGlvbiBwYXN0aW5nVGV4dElucHV0
SGFuZGxlcihldnQpCit7CisgICAgc2hvdWxkQmUoImV2ZW50LmRhdGEiLCB0b1N0cmluZ0xpdGVy
YWwoZXhwZWN0ZWRUZXh0RXZlbnREYXRhKSk7CisgICAgdGV4dElucHV0Q291bnQrKzsKKyAgICBp
ZiAod2lsbENhbmNlbFRleHRJbnB1dCkKKyAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7Cit9
CisKK3ZhciB0ZXN0U291cmNlUm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwor
ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXN0U291cmNlUm9vdCk7CisKK3ZhciB0ZXN0VGFy
Z2V0Um9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwordGVzdFRhcmdldFJvb3Qu
aW5uZXJIVE1MICs9ICI8aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J3RhcmdldElucHV0JyB2YWx1ZT0n
Jz4iOwordGVzdFRhcmdldFJvb3QuaW5uZXJIVE1MICs9ICI8ZGl2IGlkPSd0YXJnZXRFZGl0YWJs
ZScgY29udGVudEVkaXRhYmxlPiI7Cit0ZXN0VGFyZ2V0Um9vdC5pbm5lckhUTUwgKz0gIjx0ZXh0
YXJlYSBpZD0ndGFyZ2V0VGV4dGFyZWEnID48L3RleHRhcmVhPiI7Citkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKHRlc3RUYXJnZXRSb290KTsKKwordGVzdFRhcmdldEVkaXRhYmxlID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdldEVkaXRhYmxlIik7Cit0ZXN0VGFyZ2V0RWRpdGFibGUu
YWRkRXZlbnRMaXN0ZW5lcigidGV4dElucHV0IiwgcGFzdGluZ1RleHRJbnB1dEhhbmRsZXIpOwor
dGVzdFRhcmdldElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdldElucHV0Iik7
Cit0ZXN0VGFyZ2V0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigidGV4dElucHV0IiwgcGFzdGluZ1Rl
eHRJbnB1dEhhbmRsZXIpOwordGVzdFRhcmdldFRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInRhcmdldFRleHRhcmVhIik7Cit0ZXN0VGFyZ2V0VGV4dGFyZWEuYWRkRXZlbnRMaXN0
ZW5lcigidGV4dElucHV0IiwgcGFzdGluZ1RleHRJbnB1dEhhbmRsZXIpOworCit2YXIgc2VsZWN0
aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOworCitmdW5jdGlvbiBjb3B5UGxhaW5UZXh0KCkK
K3sKKyAgICB0ZXN0U291cmNlUm9vdC5pbm5lckhUTUwgPSAiPGlucHV0IHR5cGU9J3RleHQnIHZh
bHVlPSdQbGFpbkhlbGxvJyBpZD0nc3JjJyAvPiI7CisgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInNyYyIpOworICAgIGlucHV0LmZvY3VzKCk7CisKKyAgICBzZWxlY3Rp
b24ubW9kaWZ5KCJleHRlbmQiLCAiZm9yd2FyZCIsICJsaW5lIik7CisgICAgZG9jdW1lbnQuZXhl
Y0NvbW1hbmQoIkNvcHkiKTsKK30KKworZnVuY3Rpb24gY29weVJpY2hUZXh0KCkKK3sKKyAgICB0
ZXN0U291cmNlUm9vdC5pbm5lckhUTUwgPSAiPGRpdiBpZD0nc3JjJyBjb250ZW50RWRpdGFibGU+
PGI+UmljaDwvYj5IZWxsbzwvZGl2PiI7CisgICAgdmFyIGVkaXRhYmxlID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInNyYyIpOworICAgIHNlbGVjdGlvbi5zZXRCYXNlQW5kRXh0ZW50KGVkaXRh
YmxlLCAwLCBlZGl0YWJsZSwgMCk7CisgICAgc2VsZWN0aW9uLm1vZGlmeSgiZXh0ZW5kIiwgImZv
cndhcmQiLCAibGluZSIpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJDb3B5Iik7Cit9CisK
K2Z1bmN0aW9uIHBhc3RlVG9UYXJnZXRFZGl0YWJsZSgpCit7CisgICAgdmFyIGVkaXRhYmxlID0g
dGVzdFRhcmdldEVkaXRhYmxlOworICAgIGVkaXRhYmxlLmlubmVySFRNTCA9ICIiOworICAgIHNl
bGVjdGlvbi5zZXRCYXNlQW5kRXh0ZW50KGVkaXRhYmxlLCAwLCBlZGl0YWJsZSwgMCk7CisgICAg
ZG9jdW1lbnQuZXhlY0NvbW1hbmQoIlBhc3RlIik7CisKK30KKworZnVuY3Rpb24gdGFyZ2V0RWRp
dGFibGVTaG91bGRIYXZlKHZhbHVlKQoreworICAgIHNob3VsZEJlKCJ0ZXN0VGFyZ2V0RWRpdGFi
bGUuaW5uZXJIVE1MIiwgdG9TdHJpbmdMaXRlcmFsKHZhbHVlKSk7Cit9CisKK2Z1bmN0aW9uIHBh
c3RlVG9UYXJnZXRJbnB1dCgpCit7CisgICAgdmFyIGlucHV0ID0gdGVzdFRhcmdldElucHV0Owor
ICAgIGlucHV0LnZhbHVlID0gIiI7CisgICAgaW5wdXQuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5l
eGVjQ29tbWFuZCgiUGFzdGUiKTsKK30KKworZnVuY3Rpb24gdGFyZ2V0SW5wdXRTaG91bGRIYXZl
KHZhbHVlKQoreworICAgIHNob3VsZEJlKCJ0ZXN0VGFyZ2V0SW5wdXQudmFsdWUiLCB0b1N0cmlu
Z0xpdGVyYWwodmFsdWUpKTsKK30KKworZnVuY3Rpb24gcGFzdGVUb1RhcmdldFRleHRhcmVhKCkK
K3sKKyAgICB2YXIgdGV4dGFyZWEgPSB0ZXN0VGFyZ2V0VGV4dGFyZWE7CisgICAgdGV4dGFyZWEu
dmFsdWUgPSAiIjsKKyAgICB0ZXh0YXJlYS5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21t
YW5kKCJQYXN0ZSIpOworfQorCitmdW5jdGlvbiB0YXJnZXRUZXh0YXJlYVNob3VsZEhhdmUodmFs
dWUpCit7CisgICAgc2hvdWxkQmUoInRlc3RUYXJnZXRUZXh0YXJlYS52YWx1ZSIsIHRvU3RyaW5n
TGl0ZXJhbCh2YWx1ZSkpOworfQorCit2YXIgcHJvY2VlZGluZ1Rlc3RDYXNlcyA9IFsKKyAgICBb
Y29weVBsYWluVGV4dCwgcGFzdGVUb1RhcmdldFRleHRhcmVhLCB0YXJnZXRUZXh0YXJlYVNob3Vs
ZEhhdmUsICJQbGFpbkhlbGxvIiwgIlBsYWluSGVsbG8iXSwKKyAgICBbY29weVBsYWluVGV4dCwg
cGFzdGVUb1RhcmdldElucHV0LCB0YXJnZXRJbnB1dFNob3VsZEhhdmUsICJQbGFpbkhlbGxvIiwg
IlBsYWluSGVsbG8iXSwKKyAgICBbY29weVBsYWluVGV4dCwgcGFzdGVUb1RhcmdldEVkaXRhYmxl
LCB0YXJnZXRFZGl0YWJsZVNob3VsZEhhdmUsICJQbGFpbkhlbGxvIiwgIiJdLAorICAgIFtjb3B5
UmljaFRleHQsIHBhc3RlVG9UYXJnZXRUZXh0YXJlYSwgdGFyZ2V0VGV4dGFyZWFTaG91bGRIYXZl
LCAiUmljaEhlbGxvIiwgIlJpY2hIZWxsbyJdLAorICAgIFtjb3B5UmljaFRleHQsIHBhc3RlVG9U
YXJnZXRJbnB1dCwgdGFyZ2V0SW5wdXRTaG91bGRIYXZlLCAiUmljaEhlbGxvIiwgIlJpY2hIZWxs
byJdLAorICAgIFtjb3B5UmljaFRleHQsIHBhc3RlVG9UYXJnZXRFZGl0YWJsZSwgdGFyZ2V0RWRp
dGFibGVTaG91bGRIYXZlLCAiPGI+UmljaDwvYj5IZWxsbyIsICIiXSwKK107CisKK3ZhciBjYW5j
ZWxpbmdUZXN0Q2FzZXMgPSBbCisgICAgW2NvcHlQbGFpblRleHQsIHBhc3RlVG9UYXJnZXRUZXh0
YXJlYSwgdGFyZ2V0VGV4dGFyZWFTaG91bGRIYXZlLCAiIiwgIlBsYWluSGVsbG8iXSwKKyAgICBb
Y29weVBsYWluVGV4dCwgcGFzdGVUb1RhcmdldElucHV0LCB0YXJnZXRJbnB1dFNob3VsZEhhdmUs
ICIiLCAiUGxhaW5IZWxsbyJdLAorICAgIFtjb3B5UGxhaW5UZXh0LCBwYXN0ZVRvVGFyZ2V0RWRp
dGFibGUsIHRhcmdldEVkaXRhYmxlU2hvdWxkSGF2ZSwgIiIsICIiXSwKKyAgICBbY29weVJpY2hU
ZXh0LCBwYXN0ZVRvVGFyZ2V0VGV4dGFyZWEsIHRhcmdldFRleHRhcmVhU2hvdWxkSGF2ZSwgIiIs
ICJSaWNoSGVsbG8iXSwKKyAgICBbY29weVJpY2hUZXh0LCBwYXN0ZVRvVGFyZ2V0SW5wdXQsIHRh
cmdldElucHV0U2hvdWxkSGF2ZSwgIiIsICJSaWNoSGVsbG8iXSwKKyAgICBbY29weVJpY2hUZXh0
LCBwYXN0ZVRvVGFyZ2V0RWRpdGFibGUsIHRhcmdldEVkaXRhYmxlU2hvdWxkSGF2ZSwgIiIsICIi
XSwKK107CisKK2Z1bmN0aW9uIHJ1blNpbmdsZVRlc3QoY2FzZURhdGEpCit7CisgICAgdmFyIGNv
cHkgPSBjYXNlRGF0YVswXTsKKyAgICB2YXIgcGFzdGUgPSBjYXNlRGF0YVsxXTsKKyAgICB2YXIg
dmVyaWZ5RnVuY3Rpb24gPSBjYXNlRGF0YVsyXTsKKyAgICB2YXIgdmVyaWZ5UGFyYW1ldGVyID0g
Y2FzZURhdGFbM107CisKKyAgICBleHBlY3RlZFRleHRFdmVudERhdGEgPSBjYXNlRGF0YVs0XTsK
KworICAgIGNvcHkoKTsKKyAgICBwYXN0ZSgpOworICAgIHZlcmlmeUZ1bmN0aW9uKHZlcmlmeVBh
cmFtZXRlcik7Cit9CisKK3RleHRJbnB1dENvdW50ID0gMDsKK3dpbGxDYW5jZWxUZXh0SW5wdXQg
PSBmYWxzZTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgcHJvY2VlZGluZ1Rlc3RDYXNlcy5sZW5ndGg7
ICsraSkKKyAgICBydW5TaW5nbGVUZXN0KHByb2NlZWRpbmdUZXN0Q2FzZXNbaV0pOworc2hvdWxk
QmUoInRleHRJbnB1dENvdW50IiwgInByb2NlZWRpbmdUZXN0Q2FzZXMubGVuZ3RoIik7CisKK3Rl
eHRJbnB1dENvdW50ID0gMDsKK3dpbGxDYW5jZWxUZXh0SW5wdXQgPSB0cnVlOworZm9yICh2YXIg
aSA9IDA7IGkgPCBjYW5jZWxpbmdUZXN0Q2FzZXMubGVuZ3RoOyArK2kpCisgICAgcnVuU2luZ2xl
VGVzdChjYW5jZWxpbmdUZXN0Q2FzZXNbaV0pOworc2hvdWxkQmUoInRleHRJbnB1dENvdW50Iiwg
ImNhbmNlbGluZ1Rlc3RDYXNlcy5sZW5ndGgiKTsKKworLy8gSGlkZXMgZGF0YXNldCB0byBtYWtl
IGR1bXAgY2xlYW4uCit0ZXN0VGFyZ2V0Um9vdC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwordGVz
dFNvdXJjZVJvb3Quc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKwordmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IGQyZmNjOGQ4N2Q4MTFkMGFiZmMxNzBiNWQ2MDhiNWYzODU3ZTY0ZDMuLmFm
MjA2ZjQwYjdhYWY2NWU2NWVjYjcxY2U3NDk2M2YzZjUzZTAyYTAgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIw
MTAtMDgtMDQgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFzdGluZyBzaG91bGQgZmly
ZSB0ZXh0SW5wdXQgZXZlbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00Mjk1OAorCisgICAgICAgIC0gRXh0ZW5kZWQgVGV4dEV2ZW50cyB0byBob2xk
IHBhc3RlLXNwZWNpZmljIHBhcmFtZXRlcnMKKyAgICAgICAgLSBEaWQgZmlyZSBUZXh0RXZlbnRz
IGF0IHdoZXJlIHdlIG9yaWdpbmFsbHkgZGlkIGltbWVkaWF0ZSBwYXN0ZXMuCisgICAgICAgIC0g
RmFjdG9yZWQgb3V0IFRleHRFdmVudCBoYW5kbGluZyBmcm9tIEV2ZW50SGFuZGxlcjo6ZGVmYXVs
dFRleHRJbnB1dEV2ZW50SGFuZGxlcigpCisgICAgICAgICAgdG8gRWRpdG9yOjpoYW5kbGVUZXh0
RXZlbnQoKSBiZWNhdXNlIGl0J3Mgc29sZWx5IGRvbmUgYnkgdGhlIGVkaXRvci4KKyAgICAgICAg
LSBtb3ZlIGFjdHVhbCBwYXN0aW5nIGxvZ2ljIHRvIEVkaXRvcjo6aGFuZGxlVGV4dEV2ZW50KCkg
CisgICAgICAgIAorICAgICAgICBUZXN0OiBlZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4dC1l
dmVudHMuaHRtbAorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogZG9tL1Rl
eHRFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEV2ZW50OjpjcmVhdGVGb3JQbGFpblRl
eHRQYXN0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RXZlbnQ6OmNyZWF0ZUZvckZyYWdtZW50
UGFzdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEV2ZW50OjpzZXRJc1Bhc3RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRFdmVudDo6aXNQYXN0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
RXZlbnQ6OnNldFNob3VsZFNtYXJ0UmVwbGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RXZl
bnQ6OnNob3VsZFNtYXJ0UmVwbGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RXZlbnQ6OnNl
dFNob3VsZE1hdGNoU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEV2ZW50OjpzaG91bGRN
YXRjaFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRFdmVudDo6cGFzdGluZ0ZyYWdtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRFdmVudDo6c2V0UGFzdGluZ0ZyYWdtZW50KToKKyAg
ICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omhh
bmRsZVRleHRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlQXNQbGFpblRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZUFzRnJhZ21lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6ZGlzcGF0Y2hDUFBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24pOgorICAgICAgICAqIGVkaXRpbmcvRWRp
dG9yLmg6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpkZWZhdWx0VGV4dElucHV0RXZlbnRIYW5kbGVyKToKKwogMjAxMC0w
OC0wNCAgQW50b25pbyBHb21lcyAgPHRvbmlraXRvb0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhbmllbCBCYXRlcy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4gYi9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IGMwN2E1YjgwNTcyYTgwNzE1MGM5YmQw
ZmRmYmZmYWZmN2FmNWNkYmMuLmMyNWVmMTY1YzU3N2ZlMWJkMDg3YjhiNGZiOTI0OGNjYTgzMTI3
YjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgpAQCAtNjA4LDYgKzYwOCw3IEBAIF9fWk43V2ViQ29yZTZFZGl0b3IxM3BlcmZv
cm1EZWxldGVFdgogX19aTjdXZWJDb3JlNkVkaXRvcjEzcmFuZ2VGb3JQb2ludEVSS05TXzhJbnRQ
b2ludEUKIF9fWk43V2ViQ29yZTZFZGl0b3IxM3RyeURIVE1MUGFzdGVFdgogX19aTjdXZWJDb3Jl
NkVkaXRvcjE0c2V0Q29tcG9zaXRpb25FUktOU182U3RyaW5nRVJLTjNXVEY2VmVjdG9ySU5TXzIw
Q29tcG9zaXRpb25VbmRlcmxpbmVFTG0wRUVFamoKK19fWk43V2ViQ29yZTZFZGl0b3IxNXBhc3Rl
QXNGcmFnbWVudEVOM1dURjEwUGFzc1JlZlB0cklOU18xNkRvY3VtZW50RnJhZ21lbnRFRUViYgog
X19aTjdXZWJDb3JlNkVkaXRvcjE2cGFzdGVBc1BsYWluVGV4dEV2CiBfX1pON1dlYkNvcmU2RWRp
dG9yMTdpbnNlcnRPcmRlcmVkTGlzdEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMThjb25maXJtQ29t
cG9zaXRpb25FUktOU182U3RyaW5nRQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVGV4dEV2ZW50
LmggYi9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuaAppbmRleCA5ZjkzZmRiMzdmNTIzN2UwZDE3ZTg5
NzFhODRlODYxN2Y0YmIwMzQ5Li45M2JjMmY0ZGI3NDA2N2U1OGQzY2ZhMzgzN2Q4YTI1ZTJjYmJj
ZTVmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuaAorKysgYi9XZWJDb3JlL2Rv
bS9UZXh0RXZlbnQuaApAQCAtMjcsNiArMjcsNyBAQAogI2lmbmRlZiBUZXh0RXZlbnRfaAogI2Rl
ZmluZSBUZXh0RXZlbnRfaAogCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1
ZGUgIlVJRXZlbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEsNiArNDIsMjUgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFRleHRFdmVudCh2aWV3LCBkYXRhKSk7CiAgICAgICAgIH0KKworICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxUZXh0RXZlbnQ+IGNyZWF0ZUZvclBsYWluVGV4dFBhc3RlKFBhc3NSZWZQ
dHI8QWJzdHJhY3RWaWV3PiB2aWV3LCBjb25zdCBTdHJpbmcmIGRhdGEsIGJvb2wgc2hvdWxkU21h
cnRSZXBsYWNlKQorICAgICAgICB7CisgICAgICAgICAgICBSZWZQdHI8VGV4dEV2ZW50PiBldmVu
dCA9IGFkb3B0UmVmKG5ldyBUZXh0RXZlbnQodmlldywgZGF0YSkpOworICAgICAgICAgICAgZXZl
bnQtPnNldElzUGFzdGUodHJ1ZSk7CisgICAgICAgICAgICBldmVudC0+c2V0U2hvdWxkU21hcnRS
ZXBsYWNlKHNob3VsZFNtYXJ0UmVwbGFjZSk7CisgICAgICAgICAgICByZXR1cm4gZXZlbnQ7Cisg
ICAgICAgIH0KKworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0RXZlbnQ+IGNyZWF0ZUZv
ckZyYWdtZW50UGFzdGUoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIFBhc3NSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gZGF0YSwgYm9vbCBzaG91bGRTbWFydFJlcGxhY2UsIGJvb2wgc2hv
dWxkTWF0Y2hTdHlsZSkKKyAgICAgICAgeworICAgICAgICAgICAgUmVmUHRyPFRleHRFdmVudD4g
ZXZlbnQgPSBhZG9wdFJlZihuZXcgVGV4dEV2ZW50KHZpZXcsICIiKSk7CisgICAgICAgICAgICBl
dmVudC0+c2V0SXNQYXN0ZSh0cnVlKTsKKyAgICAgICAgICAgIGV2ZW50LT5zZXRTaG91bGRTbWFy
dFJlcGxhY2Uoc2hvdWxkU21hcnRSZXBsYWNlKTsKKyAgICAgICAgICAgIGV2ZW50LT5zZXRTaG91
bGRNYXRjaFN0eWxlKHNob3VsZE1hdGNoU3R5bGUpOworICAgICAgICAgICAgZXZlbnQtPnNldFBh
c3RpbmdGcmFnbWVudChkYXRhKTsKKyAgICAgICAgICAgIHJldHVybiBldmVudDsKKyAgICAgICAg
fQorCiAgICAgICAgIHZpcnR1YWwgflRleHRFdmVudCgpOwogICAgIAogICAgICAgICB2b2lkIGlu
aXRUZXh0RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9v
bCBjYW5jZWxhYmxlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIGNvbnN0IFN0cmluZyYgZGF0
YSk7CkBAIC01Nyw2ICs3NywxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wg
aXNCYWNrVGFiKCkgY29uc3QgeyByZXR1cm4gbV9pc0JhY2tUYWI7IH0KICAgICAgICAgdm9pZCBz
ZXRJc0JhY2tUYWIoYm9vbCBpc0JhY2tUYWIpIHsgbV9pc0JhY2tUYWIgPSBpc0JhY2tUYWI7IH0K
IAorICAgICAgICB2b2lkIHNldElzUGFzdGUoYm9vbCBpc1Bhc3RlKSB7IG1faXNQYXN0ZSA9IGlz
UGFzdGU7IH0KKyAgICAgICAgYm9vbCBpc1Bhc3RlKCkgY29uc3QgeyByZXR1cm4gbV9pc1Bhc3Rl
OyB9CisKKyAgICAgICAgdm9pZCBzZXRTaG91bGRTbWFydFJlcGxhY2UoYm9vbCBzaG91bGRTbWFy
dFJlcGxhY2UpIHsgbV9zaG91bGRTbWFydFJlcGxhY2UgPSBzaG91bGRTbWFydFJlcGxhY2U7IH0K
KyAgICAgICAgYm9vbCBzaG91bGRTbWFydFJlcGxhY2UoKSBjb25zdCB7IHJldHVybiBtX3Nob3Vs
ZFNtYXJ0UmVwbGFjZTsgfQorICAgICAgICB2b2lkIHNldFNob3VsZE1hdGNoU3R5bGUoYm9vbCBz
aG91bGRNYXRjaFN0eWxlKSB7IG1fc2hvdWxkTWF0Y2hTdHlsZSA9IHNob3VsZE1hdGNoU3R5bGU7
IH0KKyAgICAgICAgYm9vbCBzaG91bGRNYXRjaFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91
bGRNYXRjaFN0eWxlOyB9CisgICAgICAgIERvY3VtZW50RnJhZ21lbnQqIHBhc3RpbmdGcmFnbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFzdGluZ0ZyYWdtZW50LmdldCgpOyB9CisgICAgICAgIHZv
aWQgc2V0UGFzdGluZ0ZyYWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gcGFzdGlu
Z0ZyYWdtZW50KSB7IG1fcGFzdGluZ0ZyYWdtZW50ID0gcGFzdGluZ0ZyYWdtZW50OyB9CisKICAg
ICBwcml2YXRlOgogICAgICAgICBUZXh0RXZlbnQoKTsKICAgICAgICAgVGV4dEV2ZW50KFBhc3NS
ZWZQdHI8QWJzdHJhY3RWaWV3PiwgY29uc3QgU3RyaW5nJiBkYXRhKTsKQEAgLTY0LDYgKzk0LDEx
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIG1fZGF0YTsKICAgICAgICAg
Ym9vbCBtX2lzTGluZUJyZWFrOwogICAgICAgICBib29sIG1faXNCYWNrVGFiOworCisgICAgICAg
IGJvb2wgbV9pc1Bhc3RlOyAvLyBGSVhNRTogU2hvdWxkIHVzZSBpbnB1dE1vZGUgYWZ0ZXIgaXQg
YmUgYXZhaWxhYmxlOiBodHRwOi8vd2Via2l0Lm9yZy9iLzQyODA1CisgICAgICAgIGJvb2wgbV9z
aG91bGRTbWFydFJlcGxhY2U7CisgICAgICAgIGJvb2wgbV9zaG91bGRNYXRjaFN0eWxlOworICAg
ICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gbV9wYXN0aW5nRnJhZ21lbnQ7CiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCA0NGQ4ZDVmYjg0ODc2
MzJlZjcyM2QyMTBmZTUyNDQ3YjRhODY3ODVmLi45YzViMzEyYmFkNzcwZDRjMDE3OGUwYjVkMTUx
MDdjNzZiOTlkMjQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysg
Yi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNjYsNiArNjYsNyBAQAogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU291bmQuaCIKICNpbmNsdWRlICJUZXh0LmgiCisjaW5j
bHVkZSAiVGV4dEV2ZW50LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
VHlwaW5nQ29tbWFuZC5oIgogI2luY2x1ZGUgIlVzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yLmgi
CkBAIC0xMjcsNiArMTI4LDI2IEBAIHZvaWQgRWRpdG9yOjpoYW5kbGVJbnB1dE1ldGhvZEtleWRv
d24oS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAgICAgICAgIGMtPmhhbmRsZUlucHV0TWV0aG9kS2V5
ZG93bihldmVudCk7CiB9CiAKK2Jvb2wgRWRpdG9yOjpoYW5kbGVUZXh0RXZlbnQoVGV4dEV2ZW50
KiBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQtPmlzUGFzdGUoKSkgeworICAgICAgICBpZiAoZXZl
bnQtPnBhc3RpbmdGcmFnbWVudCgpKQorICAgICAgICAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhG
cmFnbWVudChldmVudC0+cGFzdGluZ0ZyYWdtZW50KCksIGZhbHNlLCBldmVudC0+c2hvdWxkU21h
cnRSZXBsYWNlKCksIGV2ZW50LT5zaG91bGRNYXRjaFN0eWxlKCkpOworICAgICAgICBlbHNlIAor
ICAgICAgICAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGV2ZW50LT5kYXRhKCksIGZhbHNl
LCBldmVudC0+c2hvdWxkU21hcnRSZXBsYWNlKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBTdHJpbmcgZGF0YSA9IGV2ZW50LT5kYXRhKCk7CisgICAgaWYgKGRhdGEgPT0g
IlxuIikgeworICAgICAgICBpZiAoZXZlbnQtPmlzTGluZUJyZWFrKCkpCisgICAgICAgICAgICBy
ZXR1cm4gaW5zZXJ0TGluZUJyZWFrKCk7CisgICAgICAgIHJldHVybiBpbnNlcnRQYXJhZ3JhcGhT
ZXBhcmF0b3IoKTsKKyAgICB9CisKKyAgICByZXR1cm4gaW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5n
VGV4dEV2ZW50KGRhdGEsIGZhbHNlLCBldmVudCk7Cit9CisKIGJvb2wgRWRpdG9yOjpjYW5FZGl0
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudEVk
aXRhYmxlKCk7CkBAIC0yODIsMTEgKzMwMywyOSBAQCB2b2lkIEVkaXRvcjo6ZGVsZXRlU2VsZWN0
aW9uV2l0aFNtYXJ0RGVsZXRlKGJvb2wgc21hcnREZWxldGUpCiAgICAgYXBwbHlDb21tYW5kKERl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBzbWFydERl
bGV0ZSkpOwogfQogCit2b2lkIEVkaXRvcjo6cGFzdGVBc1BsYWluVGV4dChjb25zdCBTdHJpbmcm
IHBhc3RpbmdUZXh0LCBib29sIHNtYXJ0UmVwbGFjZSkKK3sKKyAgICBOb2RlKiB0YXJnZXQgPSBm
aW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCk7CisgICAgaWYgKCF0YXJnZXQpCisgICAgICAg
IHJldHVybjsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICB0YXJnZXQtPmRpc3BhdGNo
RXZlbnQoVGV4dEV2ZW50OjpjcmVhdGVGb3JQbGFpblRleHRQYXN0ZShtX2ZyYW1lLT5kb21XaW5k
b3coKSwgcGFzdGluZ1RleHQsIHNtYXJ0UmVwbGFjZSksIGVjKTsKK30KKwordm9pZCBFZGl0b3I6
OnBhc3RlQXNGcmFnbWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHBhc3RpbmdGcmFn
bWVudCwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSkKK3sKKyAgICBOb2RlKiB0
YXJnZXQgPSBmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCk7CisgICAgaWYgKCF0YXJnZXQp
CisgICAgICAgIHJldHVybjsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICB0YXJnZXQt
PmRpc3BhdGNoRXZlbnQoVGV4dEV2ZW50OjpjcmVhdGVGb3JGcmFnbWVudFBhc3RlKG1fZnJhbWUt
PmRvbVdpbmRvdygpLCBwYXN0aW5nRnJhZ21lbnQsIHNtYXJ0UmVwbGFjZSwgbWF0Y2hTdHlsZSks
IGVjKTsKK30KKwogdm9pZCBFZGl0b3I6OnBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChQ
YXN0ZWJvYXJkKiBwYXN0ZWJvYXJkKQogewogICAgIFN0cmluZyB0ZXh0ID0gcGFzdGVib2FyZC0+
cGxhaW5UZXh0KG1fZnJhbWUpOwogICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxk
SW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlv
blBhc3RlZCkpCi0gICAgICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dCh0ZXh0LCBmYWxzZSwg
Y2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQocGFzdGVib2FyZCkpOworICAgICAgICBwYXN0
ZUFzUGxhaW5UZXh0KHRleHQsIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9h
cmQpKTsKIH0KIAogdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCog
cGFzdGVib2FyZCwgYm9vbCBhbGxvd1BsYWluVGV4dCkKQEAgLTI5NSw3ICszMzQsNyBAQCB2b2lk
IEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBib29s
IGFsbG93UGxhaW5UZXh0KQogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7CiAgICAgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gcGFzdGVib2FyZC0+ZG9jdW1lbnRGcmFnbWVudCht
X2ZyYW1lLCByYW5nZSwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KTsKICAgICBpZiAo
ZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoZnJhZ21lbnQsIHJhbmdlLCBFZGl0b3JJ
bnNlcnRBY3Rpb25QYXN0ZWQpKQotICAgICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50
KGZyYWdtZW50LCBmYWxzZSwgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQocGFzdGVib2Fy
ZCksIGNob3NlUGxhaW5UZXh0KTsKKyAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LCBj
YW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKSwgY2hvc2VQbGFpblRleHQp
OwogfQogCiBib29sIEVkaXRvcjo6Y2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoUGFzdGVi
b2FyZCogcGFzdGVib2FyZCkKQEAgLTcwNiwxMiArNzQ1LDkgQEAgdm9pZCBFZGl0b3I6OmNsZWFy
TGFzdEVkaXRDb21tYW5kKCkKIC8vIHRoZSBldmVudCBoYW5kbGVyIE5PVCBzZXR0aW5nIHRoZSBy
ZXR1cm4gdmFsdWUgdG8gZmFsc2UKIGJvb2wgRWRpdG9yOjpkaXNwYXRjaENQUEV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5KQog
ewotICAgIE5vZGUqIHRhcmdldCA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLmVsZW1l
bnQoKTsKLSAgICBpZiAoIXRhcmdldCkKLSAgICAgICAgdGFyZ2V0ID0gbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+Ym9keSgpOworICAgIE5vZGUqIHRhcmdldCA9IGZpbmRFdmVudFRhcmdldEZyb21TZWxl
Y3Rpb24oKTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgdGFy
Z2V0ID0gdGFyZ2V0LT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKICAgICAKICAgICBSZWZQdHI8Q2xp
cGJvYXJkPiBjbGlwYm9hcmQgPSBuZXdHZW5lcmFsQ2xpcGJvYXJkKHBvbGljeSwgbV9mcmFtZSk7
CiAKQEAgLTcyNiw2ICs3NjIsMTYgQEAgYm9vbCBFZGl0b3I6OmRpc3BhdGNoQ1BQRXZlbnQoY29u
c3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIENsaXBib2FyZEFjY2Vzc1BvbGkKICAgICByZXR1
cm4gIW5vRGVmYXVsdFByb2Nlc3Npbmc7CiB9CiAKK05vZGUqIEVkaXRvcjo6ZmluZEV2ZW50VGFy
Z2V0RnJvbVNlbGVjdGlvbigpIGNvbnN0Cit7CisgICAgTm9kZSogdGFyZ2V0ID0gbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnN0YXJ0KCkuZWxlbWVudCgpOworICAgIGlmICghdGFyZ2V0KQorICAgICAg
ICB0YXJnZXQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5ib2R5KCk7CisgICAgaWYgKCF0YXJnZXQp
CisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiB0YXJnZXQtPnNoYWRvd0FuY2VzdG9yTm9k
ZSgpOworfQorCiB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogewogICAgIHN3aXRjaCAobV9mcmFtZS0+
c2VsZWN0aW9uKCktPnNlbGVjdGlvblR5cGUoKSkgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5oIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4IGRiMjQ5ZTcyMmMx
YmNjNGM2ZDI1Y2Q3NWE4NzMyYjIxNmRkMGE1ZGMuLjEzZTZkZjU0ODJhMjVkZGFlZjJlZjEwNDdh
MzYzMzBjOWJjMmNjNDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysg
Yi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTQ5LDYgKzQ5LDcgQEAgY2xhc3MgS2lsbFJp
bmc7CiBjbGFzcyBQYXN0ZWJvYXJkOwogY2xhc3MgU2ltcGxlRm9udERhdGE7CiBjbGFzcyBUZXh0
OworY2xhc3MgVGV4dEV2ZW50OwogCiBzdHJ1Y3QgQ29tcG9zaXRpb25VbmRlcmxpbmUgewogICAg
IENvbXBvc2l0aW9uVW5kZXJsaW5lKCkgCkBAIC03Nyw2ICs3OCw3IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50Kik7CiAgICAgdm9pZCBoYW5k
bGVJbnB1dE1ldGhvZEtleWRvd24oS2V5Ym9hcmRFdmVudCopOworICAgIGJvb2wgaGFuZGxlVGV4
dEV2ZW50KFRleHRFdmVudCopOwogCiAgICAgYm9vbCBjYW5FZGl0KCkgY29uc3Q7CiAgICAgYm9v
bCBjYW5FZGl0UmljaGx5KCkgY29uc3Q7CkBAIC0yOTMsNiArMjk1LDEwIEBAIHB1YmxpYzoKICAg
ICBQYXNzUmVmUHRyPFJhbmdlPiBuZXh0VmlzaWJsZVJhbmdlKFJhbmdlKiwgY29uc3QgU3RyaW5n
JiwgYm9vbCBmb3J3YXJkLCBib29sIGNhc2VGbGFnLCBib29sIHdyYXBGbGFnKTsKICAgICAKICAg
ICB2b2lkIGFkZFRvS2lsbFJpbmcoUmFuZ2UqLCBib29sIHByZXBlbmQpOworCisgICAgdm9pZCBw
YXN0ZUFzRnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiwgYm9vbCBzbWFydFJl
cGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSk7CisgICAgdm9pZCBwYXN0ZUFzUGxhaW5UZXh0KGNvbnN0
IFN0cmluZyYsIGJvb2wgc21hcnRSZXBsYWNlKTsKKwogcHJpdmF0ZToKICAgICBGcmFtZSogbV9m
cmFtZTsKICAgICBPd25QdHI8RGVsZXRlQnV0dG9uQ29udHJvbGxlcj4gbV9kZWxldGVCdXR0b25D
b250cm9sbGVyOwpAQCAtMzI2LDYgKzMzMiw3IEBAIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0cjxS
YW5nZT4gbGFzdFZpc2libGVSYW5nZShjb25zdCBTdHJpbmcmLCBib29sIGNhc2VGbGFnKTsKICAg
ICAKICAgICB2b2lkIGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBuZXdTZWxlY3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcsIGJvb2wgY2xlYXJUeXBpbmdT
dHlsZSk7CisgICAgTm9kZSogZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpIGNvbnN0Owog
fTsKIAogaW5saW5lIHZvaWQgRWRpdG9yOjpzZXRTdGFydE5ld0tpbGxSaW5nU2VxdWVuY2UoYm9v
bCBmbGFnKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBlMTBhM2ExYzZkODRmNWMzYTFhYTA0ZTEz
ZWRjZDMyZjAwMDhhMWFjLi44YTE2MTgxNmUxYTEzMDIwMmMyMmI5Yzk5ZjI4NTBkYjMzOGExM2U1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMjY3NCwxOSArMjY3NCw4IEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjp0YWJzVG9MaW5rcyhLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKIAogdm9pZCBF
dmVudEhhbmRsZXI6OmRlZmF1bHRUZXh0SW5wdXRFdmVudEhhbmRsZXIoVGV4dEV2ZW50KiBldmVu
dCkKIHsKLSAgICBTdHJpbmcgZGF0YSA9IGV2ZW50LT5kYXRhKCk7Ci0gICAgaWYgKGRhdGEgPT0g
IlxuIikgewotICAgICAgICBpZiAoZXZlbnQtPmlzTGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAg
IGlmIChtX2ZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0TGluZUJyZWFrKCkpCi0gICAgICAgICAgICAg
ICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAobV9mcmFtZS0+ZWRpdG9yKCktPmluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpKQot
ICAgICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fZnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0V2l0
aG91dFNlbmRpbmdUZXh0RXZlbnQoZGF0YSwgZmFsc2UsIGV2ZW50KSkKLSAgICAgICAgICAgIGV2
ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIH0KKyAgICBpZiAobV9mcmFtZS0+ZWRpdG9y
KCktPmhhbmRsZVRleHRFdmVudChldmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOwogfQogCiAjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKE1BQykKZGlmZiAtLWdp
dCBhL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggMzFi
OGEwYWU0M2JmNGNhNGExODIwMGU2ZjA5YWUzMTBiNTcxM2JjOC4uNzEzNmVlOTJiOTgzYjc5YzQ0
NDg2YjM0NThiOWE4M2FkZWIwMjhkMSAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cK
KysrIGIvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0wOC0wNCAg
TU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXN0aW5nIHNob3VsZCBmaXJlIHRleHRJbnB1
dCBldmVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQyOTU4CisKKyAgICAgICAgT24gcGFzdGUsIGludm9rZSBFZGl0b3IgaW5zdGVhZCBvZiBkaXJl
Y3QgY29tbWFuZCBpbnZvY2F0aW9uLAorICAgICAgICB3aGljaCBhbGxvd3MgZGlzcGF0Y2hpbmcg
ZXZlbnRzIGJlZm9yZSBhY3R1YWwgcGFzdGUuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxW
aWV3Lm1tOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfcGFzdGVXaXRoUGFzdGVib2FyZDphbGxv
d1BsYWluVGV4dDpdKToKKwogMjAxMC0wOC0wMyAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEtpbHplci4KZGlmZiAtLWdp
dCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbSBiL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJIVE1MVmlldy5tbQppbmRleCA1OGNlMTI0NDIxYzYzNjhmNTI1MGIwMjAyMDc4MjhkOTcz
ODllYWM1Li4wZTU1OWI0NGY0Mjc2M2QwYmQ1MzNiOTg4M2NjM2ZkNGZiYzdiNjY1IDEwMDY0NAot
LS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KKysrIGIvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCkBAIC04NDksMTEgKzg0OSwxMiBAQCBzdGF0aWMgTlNVUkwq
IHVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoTlNTdHJpbmcgKnJlbGF0aXZlUGFydCkKICAgICBb
d2ViVmlldyBfc2V0SW5zZXJ0aW9uUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKIAogICAgIERPTVJh
bmdlICpyYW5nZSA9IFtzZWxmIF9zZWxlY3RlZFJhbmdlXTsKKyAgICBGcmFtZSogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICAKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9U
SUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fU05PV19MRU9QQVJEKQogICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0g
W3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGluQ29udGV4
dDpyYW5nZSBhbGxvd1BsYWluVGV4dDphbGxvd1BsYWluVGV4dF07CiAgICAgaWYgKGZyYWdtZW50
ICYmIFtzZWxmIF9zaG91bGRJbnNlcnRGcmFnbWVudDpmcmFnbWVudCByZXBsYWNpbmdET01SYW5n
ZTpyYW5nZSBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkXSkKLSAgICAgICAg
W1tzZWxmIF9mcmFtZV0gX3JlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6ZnJhZ21lbnQgc2Vs
ZWN0UmVwbGFjZW1lbnQ6Tk8gc21hcnRSZXBsYWNlOltzZWxmIF9jYW5TbWFydFJlcGxhY2VXaXRo
UGFzdGVib2FyZDpwYXN0ZWJvYXJkXSBtYXRjaFN0eWxlOk5PXTsKKyAgICAgICAgY29yZUZyYW1l
LT5lZGl0b3IoKS0+cGFzdGVBc0ZyYWdtZW50KGNvcmUoZnJhZ21lbnQpLCBbc2VsZiBfY2FuU21h
cnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQ6cGFzdGVib2FyZF0sIGZhbHNlKTsKICNlbHNlCiAgICAg
Ly8gTWFpbCBpcyBpZ25vcmluZyB0aGUgZnJhbWVudCBwYXNzZWQgdG8gdGhlIGRlbGVnYXRlIGFu
ZCBjcmVhdGVzIGEgbmV3IG9uZS4KICAgICAvLyBXZSB3YW50IHRvIGF2b2lkIGNyZWF0aW5nIHRo
ZSBmcmFnbWVudCB0d2ljZS4KQEAgLTg2MSwxMiArODYyLDEyIEBAIHN0YXRpYyBOU1VSTCogdW5p
cXVlVVJMV2l0aFJlbGF0aXZlUGFydChOU1N0cmluZyAqcmVsYXRpdmVQYXJ0KQogICAgICAgICBp
ZiAoW3NlbGYgX3Nob3VsZEluc2VydEZyYWdtZW50Om5pbCByZXBsYWNpbmdET01SYW5nZTpyYW5n
ZSBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkXSkgewogICAgICAgICAgICAg
RE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZy
b21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgaW5Db250ZXh0OnJhbmdlIGFsbG93UGxhaW5UZXh0OmFs
bG93UGxhaW5UZXh0XTsKICAgICAgICAgICAgIGlmIChmcmFnbWVudCkKLSAgICAgICAgICAgICAg
ICBbW3NlbGYgX2ZyYW1lXSBfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDpmcmFnbWVudCBz
ZWxlY3RSZXBsYWNlbWVudDpOTyBzbWFydFJlcGxhY2U6W3NlbGYgX2NhblNtYXJ0UmVwbGFjZVdp
dGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRdIG1hdGNoU3R5bGU6Tk9dOworICAgICAgICAgICAgICAg
IGNvcmVGcmFtZS0+ZWRpdG9yKCktPnBhc3RlQXNGcmFnbWVudChjb3JlKGZyYWdtZW50KSwgW3Nl
bGYgX2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRdLCBmYWxzZSk7CiAg
ICAgICAgIH0gICAgICAgIAogICAgIH0gZWxzZSB7CiAgICAgICAgIERPTURvY3VtZW50RnJhZ21l
bnQgKmZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0
ZWJvYXJkIGluQ29udGV4dDpyYW5nZSBhbGxvd1BsYWluVGV4dDphbGxvd1BsYWluVGV4dF07CiAg
ICAgICAgIGlmIChmcmFnbWVudCAmJiBbc2VsZiBfc2hvdWxkSW5zZXJ0RnJhZ21lbnQ6ZnJhZ21l
bnQgcmVwbGFjaW5nRE9NUmFuZ2U6cmFuZ2UgZ2l2ZW5BY3Rpb246V2ViVmlld0luc2VydEFjdGlv
blBhc3RlZF0pCi0gICAgICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfcmVwbGFjZVNlbGVjdGlvbldp
dGhGcmFnbWVudDpmcmFnbWVudCBzZWxlY3RSZXBsYWNlbWVudDpOTyBzbWFydFJlcGxhY2U6W3Nl
bGYgX2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRdIG1hdGNoU3R5bGU6
Tk9dOworICAgICAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+cGFzdGVBc0ZyYWdtZW50KGNv
cmUoZnJhZ21lbnQpLCBbc2VsZiBfY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQ6cGFzdGVi
b2FyZF0sIGZhbHNlKTsKICAgICB9CiAjZW5kaWYKICAgICBbd2ViVmlldyBfc2V0SW5zZXJ0aW9u
UGFzdGVib2FyZDpuaWxdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63674</attachid>
            <date>2010-08-05 18:23:39 -0700</date>
            <delta_ts>2010-08-06 09:24:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42958-20100806102336.patch</filename>
            <type>text/plain</type>
            <size>24918</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmNWY5YTBjMzU0NDhlZGJiMzE2MGRjZmNiM2Q1MGNkNDFjNTU5YTg5Li43MDg5YWYz
MDdlYTdhNGExYzJjNzA4YTViMzcxMDY2MThmZjdmZmQ2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMDgtMDQgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFzdGluZyBzaG91bGQg
ZmlyZSB0ZXh0SW5wdXQgZXZlbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00Mjk1OAorCisgICAgICAgICogZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3Rl
LXRleHQtZXZlbnRzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9wYXN0
ZWJvYXJkL3Bhc3RlLXRleHQtZXZlbnRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcv
cGFzdGVib2FyZC9zY3JpcHQtdGVzdHMvcGFzdGUtdGV4dC1ldmVudHMuanM6IEFkZGVkLgorCiAy
MDEwLTA4LTA1ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXBk
YXRlIFF0IHJlc3VsdCBzaG93aW5nIHRoYXQgd2Ugc3RyaXAgbnVsbHMgaW4gdGhpcyBjYXNlLgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLXRleHQtZXZl
bnRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9wYXN0ZS10
ZXh0LWV2ZW50cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzgxZThlMjAyZGE5MjI3ZjY2MTVi
ZTU4NWIxOWZjN2Q5M2RlOTJiZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRp
bmcvcGFzdGVib2FyZC9wYXN0ZS10ZXh0LWV2ZW50cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwz
NSBAQAorVGhpcyB0ZXN0cyB0aGF0IFBhc3RlIGNvbW1hbmRzIGZpcmVzIHRleHRJbnB1dCBldmVu
dHMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGV2ZW50LmRhdGEgaXMg
J1BsYWluSGVsbG8nCitQQVNTIHRlc3RUYXJnZXRUZXh0YXJlYS52YWx1ZSBpcyAnUGxhaW5IZWxs
bycKK1BBU1MgZXZlbnQuZGF0YSBpcyAnUGxhaW5IZWxsbycKK1BBU1MgdGVzdFRhcmdldElucHV0
LnZhbHVlIGlzICdQbGFpbkhlbGxvJworUEFTUyBldmVudC5kYXRhIGlzICcnCitQQVNTIHRlc3RU
YXJnZXRFZGl0YWJsZS5pbm5lckhUTUwgaXMgJ1BsYWluSGVsbG8nCitQQVNTIGV2ZW50LmRhdGEg
aXMgJ1JpY2hIZWxsbycKK1BBU1MgdGVzdFRhcmdldFRleHRhcmVhLnZhbHVlIGlzICdSaWNoSGVs
bG8nCitQQVNTIGV2ZW50LmRhdGEgaXMgJ1JpY2hIZWxsbycKK1BBU1MgdGVzdFRhcmdldElucHV0
LnZhbHVlIGlzICdSaWNoSGVsbG8nCitQQVNTIGV2ZW50LmRhdGEgaXMgJycKK1BBU1MgdGVzdFRh
cmdldEVkaXRhYmxlLmlubmVySFRNTCBpcyAnPGI+UmljaDwvYj5IZWxsbycKK1BBU1MgdGV4dElu
cHV0Q291bnQgaXMgcHJvY2VlZGluZ1Rlc3RDYXNlcy5sZW5ndGgKK1BBU1MgZXZlbnQuZGF0YSBp
cyAnUGxhaW5IZWxsbycKK1BBU1MgdGVzdFRhcmdldFRleHRhcmVhLnZhbHVlIGlzICcnCitQQVNT
IGV2ZW50LmRhdGEgaXMgJ1BsYWluSGVsbG8nCitQQVNTIHRlc3RUYXJnZXRJbnB1dC52YWx1ZSBp
cyAnJworUEFTUyBldmVudC5kYXRhIGlzICcnCitQQVNTIHRlc3RUYXJnZXRFZGl0YWJsZS5pbm5l
ckhUTUwgaXMgJycKK1BBU1MgZXZlbnQuZGF0YSBpcyAnUmljaEhlbGxvJworUEFTUyB0ZXN0VGFy
Z2V0VGV4dGFyZWEudmFsdWUgaXMgJycKK1BBU1MgZXZlbnQuZGF0YSBpcyAnUmljaEhlbGxvJwor
UEFTUyB0ZXN0VGFyZ2V0SW5wdXQudmFsdWUgaXMgJycKK1BBU1MgZXZlbnQuZGF0YSBpcyAnJwor
UEFTUyB0ZXN0VGFyZ2V0RWRpdGFibGUuaW5uZXJIVE1MIGlzICcnCitQQVNTIHRleHRJbnB1dENv
dW50IGlzIGNhbmNlbGluZ1Rlc3RDYXNlcy5sZW5ndGgKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0
aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4dC1ldmVudHMuaHRtbCBiL0xheW91dFRlc3RzL2VkaXRp
bmcvcGFzdGVib2FyZC9wYXN0ZS10ZXh0LWV2ZW50cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzYTUwYWRl
MzUyYTYzZDEzMTk4N2M4Mzc2ZDFjM2VmNmQ3NTIyZTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4dC1ldmVudHMuaHRtbApAQCAtMCww
ICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+
Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdCBzcmM9InNjcmlwdC10ZXN0cy9wYXN0ZS10ZXh0LWV2ZW50cy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcv
cGFzdGVib2FyZC9zY3JpcHQtdGVzdHMvcGFzdGUtdGV4dC1ldmVudHMuanMgYi9MYXlvdXRUZXN0
cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc2NyaXB0LXRlc3RzL3Bhc3RlLXRleHQtZXZlbnRzLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmU3MzNmYTM5NWIxNWRiMDA3OGE5YjAyNWU2ZTZiYTk4OTVkMTJlY2YKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc2NyaXB0LXRlc3Rz
L3Bhc3RlLXRleHQtZXZlbnRzLmpzCkBAIC0wLDAgKzEsMTQ1IEBACitkZXNjcmlwdGlvbignVGhp
cyB0ZXN0cyB0aGF0IFBhc3RlIGNvbW1hbmRzIGZpcmVzIHRleHRJbnB1dCBldmVudHMuJyk7CisK
K2Z1bmN0aW9uIHRvU3RyaW5nTGl0ZXJhbChzdHIpCit7CisgICByZXR1cm4gIiciICsgc3RyICsg
IiciOworfQorCit2YXIgd2lsbENhbmNlbFRleHRJbnB1dCA9IGZhbHNlOwordmFyIHRleHRJbnB1
dENvdW50ID0gMDsKK3ZhciBleHBlY3RlZFRleHRFdmVudERhdGEgPSAiIjsKKworZnVuY3Rpb24g
cGFzdGluZ1RleHRJbnB1dEhhbmRsZXIoZXZ0KQoreworICAgIHNob3VsZEJlKCJldmVudC5kYXRh
IiwgdG9TdHJpbmdMaXRlcmFsKGV4cGVjdGVkVGV4dEV2ZW50RGF0YSkpOworICAgIHRleHRJbnB1
dENvdW50Kys7CisgICAgaWYgKHdpbGxDYW5jZWxUZXh0SW5wdXQpCisgICAgICAgIGV2dC5wcmV2
ZW50RGVmYXVsdCgpOworfQorCit2YXIgdGVzdFNvdXJjZVJvb3QgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVzdFNvdXJjZVJvb3Qp
OworCit2YXIgdGVzdFRhcmdldFJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
K3Rlc3RUYXJnZXRSb290LmlubmVySFRNTCArPSAiPGlucHV0IHR5cGU9J3RleHQnIGlkPSd0YXJn
ZXRJbnB1dCcgdmFsdWU9Jyc+IjsKK3Rlc3RUYXJnZXRSb290LmlubmVySFRNTCArPSAiPGRpdiBp
ZD0ndGFyZ2V0RWRpdGFibGUnIGNvbnRlbnRFZGl0YWJsZT4iOwordGVzdFRhcmdldFJvb3QuaW5u
ZXJIVE1MICs9ICI8dGV4dGFyZWEgaWQ9J3RhcmdldFRleHRhcmVhJyA+PC90ZXh0YXJlYT4iOwor
ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXN0VGFyZ2V0Um9vdCk7CisKK3Rlc3RUYXJnZXRF
ZGl0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXRFZGl0YWJsZSIpOwordGVz
dFRhcmdldEVkaXRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoInRleHRJbnB1dCIsIHBhc3RpbmdUZXh0
SW5wdXRIYW5kbGVyKTsKK3Rlc3RUYXJnZXRJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJ0YXJnZXRJbnB1dCIpOwordGVzdFRhcmdldElucHV0LmFkZEV2ZW50TGlzdGVuZXIoInRleHRJ
bnB1dCIsIHBhc3RpbmdUZXh0SW5wdXRIYW5kbGVyKTsKK3Rlc3RUYXJnZXRUZXh0YXJlYSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXRUZXh0YXJlYSIpOwordGVzdFRhcmdldFRleHRh
cmVhLmFkZEV2ZW50TGlzdGVuZXIoInRleHRJbnB1dCIsIHBhc3RpbmdUZXh0SW5wdXRIYW5kbGVy
KTsKKwordmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKKworZnVuY3Rpb24g
Y29weVBsYWluVGV4dCgpCit7CisgICAgdGVzdFNvdXJjZVJvb3QuaW5uZXJIVE1MID0gIjxpbnB1
dCB0eXBlPSd0ZXh0JyB2YWx1ZT0nUGxhaW5IZWxsbycgaWQ9J3NyYycgLz4iOworICAgIHZhciBp
bnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzcmMiKTsKKyAgICBpbnB1dC5mb2N1cygp
OworCisgICAgc2VsZWN0aW9uLm1vZGlmeSgiZXh0ZW5kIiwgImZvcndhcmQiLCAibGluZSIpOwor
ICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJDb3B5Iik7Cit9CisKK2Z1bmN0aW9uIGNvcHlSaWNo
VGV4dCgpCit7CisgICAgdGVzdFNvdXJjZVJvb3QuaW5uZXJIVE1MID0gIjxkaXYgaWQ9J3NyYycg
Y29udGVudEVkaXRhYmxlPjxiPlJpY2g8L2I+SGVsbG88L2Rpdj4iOworICAgIHZhciBlZGl0YWJs
ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzcmMiKTsKKyAgICBzZWxlY3Rpb24uc2V0QmFz
ZUFuZEV4dGVudChlZGl0YWJsZSwgMCwgZWRpdGFibGUsIDApOworICAgIHNlbGVjdGlvbi5tb2Rp
ZnkoImV4dGVuZCIsICJmb3J3YXJkIiwgImxpbmUiKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFu
ZCgiQ29weSIpOworfQorCitmdW5jdGlvbiBwYXN0ZVRvVGFyZ2V0RWRpdGFibGUoKQoreworICAg
IHZhciBlZGl0YWJsZSA9IHRlc3RUYXJnZXRFZGl0YWJsZTsKKyAgICBlZGl0YWJsZS5pbm5lckhU
TUwgPSAiIjsKKyAgICBzZWxlY3Rpb24uc2V0QmFzZUFuZEV4dGVudChlZGl0YWJsZSwgMCwgZWRp
dGFibGUsIDApOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJQYXN0ZSIpOworCit9CisKK2Z1
bmN0aW9uIHRhcmdldEVkaXRhYmxlU2hvdWxkSGF2ZSh2YWx1ZSkKK3sKKyAgICBzaG91bGRCZSgi
dGVzdFRhcmdldEVkaXRhYmxlLmlubmVySFRNTCIsIHRvU3RyaW5nTGl0ZXJhbCh2YWx1ZSkpOwor
fQorCitmdW5jdGlvbiBwYXN0ZVRvVGFyZ2V0SW5wdXQoKQoreworICAgIHZhciBpbnB1dCA9IHRl
c3RUYXJnZXRJbnB1dDsKKyAgICBpbnB1dC52YWx1ZSA9ICIiOworICAgIGlucHV0LmZvY3VzKCk7
CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoIlBhc3RlIik7Cit9CisKK2Z1bmN0aW9uIHRhcmdl
dElucHV0U2hvdWxkSGF2ZSh2YWx1ZSkKK3sKKyAgICBzaG91bGRCZSgidGVzdFRhcmdldElucHV0
LnZhbHVlIiwgdG9TdHJpbmdMaXRlcmFsKHZhbHVlKSk7Cit9CisKK2Z1bmN0aW9uIHBhc3RlVG9U
YXJnZXRUZXh0YXJlYSgpCit7CisgICAgdmFyIHRleHRhcmVhID0gdGVzdFRhcmdldFRleHRhcmVh
OworICAgIHRleHRhcmVhLnZhbHVlID0gIiI7CisgICAgdGV4dGFyZWEuZm9jdXMoKTsKKyAgICBk
b2N1bWVudC5leGVjQ29tbWFuZCgiUGFzdGUiKTsKK30KKworZnVuY3Rpb24gdGFyZ2V0VGV4dGFy
ZWFTaG91bGRIYXZlKHZhbHVlKQoreworICAgIHNob3VsZEJlKCJ0ZXN0VGFyZ2V0VGV4dGFyZWEu
dmFsdWUiLCB0b1N0cmluZ0xpdGVyYWwodmFsdWUpKTsKK30KKwordmFyIHByb2NlZWRpbmdUZXN0
Q2FzZXMgPSBbCisgICAgW2NvcHlQbGFpblRleHQsIHBhc3RlVG9UYXJnZXRUZXh0YXJlYSwgdGFy
Z2V0VGV4dGFyZWFTaG91bGRIYXZlLCAiUGxhaW5IZWxsbyIsICJQbGFpbkhlbGxvIl0sCisgICAg
W2NvcHlQbGFpblRleHQsIHBhc3RlVG9UYXJnZXRJbnB1dCwgdGFyZ2V0SW5wdXRTaG91bGRIYXZl
LCAiUGxhaW5IZWxsbyIsICJQbGFpbkhlbGxvIl0sCisgICAgW2NvcHlQbGFpblRleHQsIHBhc3Rl
VG9UYXJnZXRFZGl0YWJsZSwgdGFyZ2V0RWRpdGFibGVTaG91bGRIYXZlLCAiUGxhaW5IZWxsbyIs
ICIiXSwKKyAgICBbY29weVJpY2hUZXh0LCBwYXN0ZVRvVGFyZ2V0VGV4dGFyZWEsIHRhcmdldFRl
eHRhcmVhU2hvdWxkSGF2ZSwgIlJpY2hIZWxsbyIsICJSaWNoSGVsbG8iXSwKKyAgICBbY29weVJp
Y2hUZXh0LCBwYXN0ZVRvVGFyZ2V0SW5wdXQsIHRhcmdldElucHV0U2hvdWxkSGF2ZSwgIlJpY2hI
ZWxsbyIsICJSaWNoSGVsbG8iXSwKKyAgICBbY29weVJpY2hUZXh0LCBwYXN0ZVRvVGFyZ2V0RWRp
dGFibGUsIHRhcmdldEVkaXRhYmxlU2hvdWxkSGF2ZSwgIjxiPlJpY2g8L2I+SGVsbG8iLCAiIl0s
CitdOworCit2YXIgY2FuY2VsaW5nVGVzdENhc2VzID0gWworICAgIFtjb3B5UGxhaW5UZXh0LCBw
YXN0ZVRvVGFyZ2V0VGV4dGFyZWEsIHRhcmdldFRleHRhcmVhU2hvdWxkSGF2ZSwgIiIsICJQbGFp
bkhlbGxvIl0sCisgICAgW2NvcHlQbGFpblRleHQsIHBhc3RlVG9UYXJnZXRJbnB1dCwgdGFyZ2V0
SW5wdXRTaG91bGRIYXZlLCAiIiwgIlBsYWluSGVsbG8iXSwKKyAgICBbY29weVBsYWluVGV4dCwg
cGFzdGVUb1RhcmdldEVkaXRhYmxlLCB0YXJnZXRFZGl0YWJsZVNob3VsZEhhdmUsICIiLCAiIl0s
CisgICAgW2NvcHlSaWNoVGV4dCwgcGFzdGVUb1RhcmdldFRleHRhcmVhLCB0YXJnZXRUZXh0YXJl
YVNob3VsZEhhdmUsICIiLCAiUmljaEhlbGxvIl0sCisgICAgW2NvcHlSaWNoVGV4dCwgcGFzdGVU
b1RhcmdldElucHV0LCB0YXJnZXRJbnB1dFNob3VsZEhhdmUsICIiLCAiUmljaEhlbGxvIl0sCisg
ICAgW2NvcHlSaWNoVGV4dCwgcGFzdGVUb1RhcmdldEVkaXRhYmxlLCB0YXJnZXRFZGl0YWJsZVNo
b3VsZEhhdmUsICIiLCAiIl0sCitdOworCitmdW5jdGlvbiBydW5TaW5nbGVUZXN0KGNhc2VEYXRh
KQoreworICAgIHZhciBjb3B5ID0gY2FzZURhdGFbMF07CisgICAgdmFyIHBhc3RlID0gY2FzZURh
dGFbMV07CisgICAgdmFyIHZlcmlmeUZ1bmN0aW9uID0gY2FzZURhdGFbMl07CisgICAgdmFyIHZl
cmlmeVBhcmFtZXRlciA9IGNhc2VEYXRhWzNdOworCisgICAgZXhwZWN0ZWRUZXh0RXZlbnREYXRh
ID0gY2FzZURhdGFbNF07CisKKyAgICBjb3B5KCk7CisgICAgcGFzdGUoKTsKKyAgICB2ZXJpZnlG
dW5jdGlvbih2ZXJpZnlQYXJhbWV0ZXIpOworfQorCit0ZXh0SW5wdXRDb3VudCA9IDA7Cit3aWxs
Q2FuY2VsVGV4dElucHV0ID0gZmFsc2U7Citmb3IgKHZhciBpID0gMDsgaSA8IHByb2NlZWRpbmdU
ZXN0Q2FzZXMubGVuZ3RoOyArK2kpCisgICAgcnVuU2luZ2xlVGVzdChwcm9jZWVkaW5nVGVzdENh
c2VzW2ldKTsKK3Nob3VsZEJlKCJ0ZXh0SW5wdXRDb3VudCIsICJwcm9jZWVkaW5nVGVzdENhc2Vz
Lmxlbmd0aCIpOworCit0ZXh0SW5wdXRDb3VudCA9IDA7Cit3aWxsQ2FuY2VsVGV4dElucHV0ID0g
dHJ1ZTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgY2FuY2VsaW5nVGVzdENhc2VzLmxlbmd0aDsgKytp
KQorICAgIHJ1blNpbmdsZVRlc3QoY2FuY2VsaW5nVGVzdENhc2VzW2ldKTsKK3Nob3VsZEJlKCJ0
ZXh0SW5wdXRDb3VudCIsICJjYW5jZWxpbmdUZXN0Q2FzZXMubGVuZ3RoIik7CisKKy8vIEhpZGVz
IGRhdGFzZXQgdG8gbWFrZSBkdW1wIGNsZWFuLgordGVzdFRhcmdldFJvb3Quc3R5bGUuZGlzcGxh
eSA9ICJub25lIjsKK3Rlc3RTb3VyY2VSb290LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisKK3Zh
ciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyZGJlMThjN2U5NzIzYTA5ZTI3YzY3MzM4MDA4
OGU2Njg4NzE4NzhjLi5kYmZkN2M4Yjc5MGY4YTQyNzAyNDc4YTdlZTBkNTE2NDMwMjdiZDA1IDEw
MDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQxIEBACisyMDEwLTA4LTA1ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBh
c3Rpbmcgc2hvdWxkIGZpcmUgdGV4dElucHV0IGV2ZW50LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI5NTgKKworICAgICAgICAtIEV4dGVuZGVkIFRl
eHRFdmVudHMgdG8gaG9sZCBwYXN0ZS1zcGVjaWZpYyBwYXJhbWV0ZXJzCisgICAgICAgIC0gRGlk
IGZpcmUgVGV4dEV2ZW50cyBhdCB3aGVyZSB3ZSBvcmlnaW5hbGx5IGRpZCBpbW1lZGlhdGUgcGFz
dGVzLgorICAgICAgICAtIEZhY3RvcmVkIG91dCBUZXh0RXZlbnQgaGFuZGxpbmcgZnJvbSBFdmVu
dEhhbmRsZXI6OmRlZmF1bHRUZXh0SW5wdXRFdmVudEhhbmRsZXIoKQorICAgICAgICAgIHRvIEVk
aXRvcjo6aGFuZGxlVGV4dEV2ZW50KCkgYmVjYXVzZSBpdCdzIHNvbGVseSBkb25lIGJ5IHRoZSBl
ZGl0b3IuCisgICAgICAgIC0gbW92ZSBhY3R1YWwgcGFzdGluZyBsb2dpYyB0byBFZGl0b3I6Omhh
bmRsZVRleHRFdmVudCgpIAorCisgICAgICAgIFRlc3Q6IGVkaXRpbmcvcGFzdGVib2FyZC9wYXN0
ZS10ZXh0LWV2ZW50cy5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAg
KiBkb20vVGV4dEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRFdmVudDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRFdmVudDo6Y3JlYXRlRm9yUGxhaW5UZXh0UGFzdGUp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dEV2ZW50OjpjcmVhdGVGb3JGcmFnbWVudFBhc3RlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRFdmVudDo6VGV4dEV2ZW50KToKKyAgICAgICAgKiBkb20v
VGV4dEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RXZlbnQ6OmlzUGFzdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEV2ZW50OjpzaG91bGRTbWFydFJlcGxhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dEV2ZW50OjpzaG91bGRNYXRjaFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRFdmVudDo6cGFzdGluZ0ZyYWdtZW50KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZVRleHRFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlQXNQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpwYXN0ZUFzRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0
ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpw
YXN0ZVdpdGhQYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGlzcGF0Y2hD
UFBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb21T
ZWxlY3Rpb24pOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgICogcGFnZS9F
dmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkZWZhdWx0
VGV4dElucHV0RXZlbnRIYW5kbGVyKToKKwogMjAxMC0wOC0wNSAgSmFtZXMgUm9iaW5zb24gIDxq
YW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJ1YmJlciBzdGFtcGVkIGJ5IEVyaWMgU2Vp
ZGVsLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4KaW5kZXggN2ZjODk1NjMxNzFkYTA4MWQzY2E1MDExMDNhYTgzYTZmNzA4OTg5My4u
NzE4NzA4MzgwOGEyOWYzNzNlZmQxOGUwMWQyYmQzYzZmOTBhNmQ3NyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC02MTEs
NiArNjExLDcgQEAgX19aTjdXZWJDb3JlNkVkaXRvcjEzcGVyZm9ybURlbGV0ZUV2CiBfX1pON1dl
YkNvcmU2RWRpdG9yMTNyYW5nZUZvclBvaW50RVJLTlNfOEludFBvaW50RQogX19aTjdXZWJDb3Jl
NkVkaXRvcjEzdHJ5REhUTUxQYXN0ZUV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMTRzZXRDb21wb3Np
dGlvbkVSS05TXzZTdHJpbmdFUktOM1dURjZWZWN0b3JJTlNfMjBDb21wb3NpdGlvblVuZGVybGlu
ZUVMbTBFRUVqagorX19aTjdXZWJDb3JlNkVkaXRvcjE1cGFzdGVBc0ZyYWdtZW50RU4zV1RGMTBQ
YXNzUmVmUHRySU5TXzE2RG9jdW1lbnRGcmFnbWVudEVFRWJiCiBfX1pON1dlYkNvcmU2RWRpdG9y
MTZwYXN0ZUFzUGxhaW5UZXh0RXYKIF9fWk43V2ViQ29yZTZFZGl0b3IxN2luc2VydE9yZGVyZWRM
aXN0RXYKIF9fWk43V2ViQ29yZTZFZGl0b3IxOGNvbmZpcm1Db21wb3NpdGlvbkVSS05TXzZTdHJp
bmdFCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwIGIvV2ViQ29yZS9kb20v
VGV4dEV2ZW50LmNwcAppbmRleCBkMjgyYzEzYzQxYmQ1ZDMxMWQwYTEwYWI1YTcxOGY0NmUxN2Iy
ODM3Li43NzFhNjY4ZDM4ODZlOTJmM2NmZWNkYzg2YWVmODM5NTYzMzU2YzkwIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1RleHRFdmVudC5j
cHAKQEAgLTMxLDE3ICszMSw0MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1Bhc3NSZWZQ
dHI8VGV4dEV2ZW50PiBUZXh0RXZlbnQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBUZXh0RXZlbnQpOworfQorCitQYXNzUmVmUHRyPFRleHRFdmVudD4gVGV4dEV2ZW50Ojpj
cmVhdGUoUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIGNvbnN0IFN0cmluZyYgZGF0YSkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRFdmVudCh2aWV3LCBkYXRhKSk7Cit9CisK
K1Bhc3NSZWZQdHI8VGV4dEV2ZW50PiBUZXh0RXZlbnQ6OmNyZWF0ZUZvclBsYWluVGV4dFBhc3Rl
KFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3LCBjb25zdCBTdHJpbmcmIGRhdGEsIGJvb2wg
c2hvdWxkU21hcnRSZXBsYWNlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dEV2ZW50
KHZpZXcsIGRhdGEsIDAsIHRydWUsIHNob3VsZFNtYXJ0UmVwbGFjZSkpOworfQorCitQYXNzUmVm
UHRyPFRleHRFdmVudD4gVGV4dEV2ZW50OjpjcmVhdGVGb3JGcmFnbWVudFBhc3RlKFBhc3NSZWZQ
dHI8QWJzdHJhY3RWaWV3PiB2aWV3LCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRhdGEs
IGJvb2wgc2hvdWxkU21hcnRSZXBsYWNlLCBib29sIHNob3VsZE1hdGNoU3R5bGUpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0RXZlbnQodmlldywgIiIsIGRhdGEsIHRydWUsIHNob3Vs
ZFNtYXJ0UmVwbGFjZSwgc2hvdWxkTWF0Y2hTdHlsZSkpOworfQorCiBUZXh0RXZlbnQ6OlRleHRF
dmVudCgpCiAgICAgOiBtX2lzTGluZUJyZWFrKGZhbHNlKQogICAgICwgbV9pc0JhY2tUYWIoZmFs
c2UpCiB7CiB9CiAKLVRleHRFdmVudDo6VGV4dEV2ZW50KFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3
PiB2aWV3LCBjb25zdCBTdHJpbmcmIGRhdGEpCitUZXh0RXZlbnQ6OlRleHRFdmVudChQYXNzUmVm
UHRyPEFic3RyYWN0Vmlldz4gdmlldywgY29uc3QgU3RyaW5nJiBkYXRhLCBQYXNzUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IHBhc3RpbmdGcmFnbWVudCwKKyAgICAgICAgICAgICAgICAgICAgIGJv
b2wgaXNQYXN0ZSwgYm9vbCBzaG91bGRTbWFydFJlcGxhY2UsIGJvb2wgc2hvdWxkTWF0Y2hTdHls
ZSkKICAgICA6IFVJRXZlbnQoZXZlbnROYW1lcygpLnRleHRJbnB1dEV2ZW50LCB0cnVlLCB0cnVl
LCB2aWV3LCAwKQogICAgICwgbV9kYXRhKGRhdGEpCiAgICAgLCBtX2lzTGluZUJyZWFrKGZhbHNl
KQogICAgICwgbV9pc0JhY2tUYWIoZmFsc2UpCisgICAgLCBtX3Bhc3RpbmdGcmFnbWVudChwYXN0
aW5nRnJhZ21lbnQpCisgICAgLCBtX2lzUGFzdGUoaXNQYXN0ZSkKKyAgICAsIG1fc2hvdWxkU21h
cnRSZXBsYWNlKHNob3VsZFNtYXJ0UmVwbGFjZSkKKyAgICAsIG1fc2hvdWxkTWF0Y2hTdHlsZShz
aG91bGRNYXRjaFN0eWxlKQogewogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9UZXh0RXZl
bnQuaCBiL1dlYkNvcmUvZG9tL1RleHRFdmVudC5oCmluZGV4IDlmOTNmZGIzN2Y1MjM3ZTBkMTdl
ODk3MWE4NGU4NjE3ZjRiYjAzNDkuLjJlMmViOTVhMzY2MzE1NmVlMjlmZGM0NjRlNzBjNDdiMzNh
MWYzOWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1RleHRFdmVudC5oCisrKyBiL1dlYkNvcmUv
ZG9tL1RleHRFdmVudC5oCkBAIC0yNywyMCArMjcsMTggQEAKICNpZm5kZWYgVGV4dEV2ZW50X2gK
ICNkZWZpbmUgVGV4dEV2ZW50X2gKIAorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNp
bmNsdWRlICJVSUV2ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFRl
eHRFdmVudCA6IHB1YmxpYyBVSUV2ZW50IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFRleHRFdmVudD4gY3JlYXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBUZXh0RXZlbnQpOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFRleHRFdmVudD4gY3JlYXRlKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3
LCBjb25zdCBTdHJpbmcmIGRhdGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVGV4dEV2ZW50KHZpZXcsIGRhdGEpKTsKLSAgICAgICAgfQorICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxUZXh0RXZlbnQ+IGNyZWF0ZSgpOworICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxUZXh0RXZlbnQ+IGNyZWF0ZShQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywgY29u
c3QgU3RyaW5nJiBkYXRhKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dEV2ZW50PiBj
cmVhdGVGb3JQbGFpblRleHRQYXN0ZShQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywgY29u
c3QgU3RyaW5nJiBkYXRhLCBib29sIHNob3VsZFNtYXJ0UmVwbGFjZSk7CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFRleHRFdmVudD4gY3JlYXRlRm9yRnJhZ21lbnRQYXN0ZShQYXNzUmVmUHRy
PEFic3RyYWN0Vmlldz4gdmlldywgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkYXRhLCBi
b29sIHNob3VsZFNtYXJ0UmVwbGFjZSwgYm9vbCBzaG91bGRNYXRjaFN0eWxlKTsKKwogICAgICAg
ICB2aXJ0dWFsIH5UZXh0RXZlbnQoKTsKICAgICAKICAgICAgICAgdm9pZCBpbml0VGV4dEV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJs
ZSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+LCBjb25zdCBTdHJpbmcmIGRhdGEpOwpAQCAtNTcs
MTMgKzU1LDI0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBpc0JhY2tUYWIo
KSBjb25zdCB7IHJldHVybiBtX2lzQmFja1RhYjsgfQogICAgICAgICB2b2lkIHNldElzQmFja1Rh
Yihib29sIGlzQmFja1RhYikgeyBtX2lzQmFja1RhYiA9IGlzQmFja1RhYjsgfQogCisgICAgICAg
IGJvb2wgaXNQYXN0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNQYXN0ZTsgfQorICAgICAgICBib29s
IHNob3VsZFNtYXJ0UmVwbGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU21hcnRSZXBsYWNl
OyB9CisgICAgICAgIGJvb2wgc2hvdWxkTWF0Y2hTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hv
dWxkTWF0Y2hTdHlsZTsgfQorICAgICAgICBEb2N1bWVudEZyYWdtZW50KiBwYXN0aW5nRnJhZ21l
bnQoKSBjb25zdCB7IHJldHVybiBtX3Bhc3RpbmdGcmFnbWVudC5nZXQoKTsgfQorCiAgICAgcHJp
dmF0ZToKICAgICAgICAgVGV4dEV2ZW50KCk7Ci0gICAgICAgIFRleHRFdmVudChQYXNzUmVmUHRy
PEFic3RyYWN0Vmlldz4sIGNvbnN0IFN0cmluZyYgZGF0YSk7CisgICAgICAgIFRleHRFdmVudChQ
YXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIGNvbnN0IFN0cmluZyYgZGF0YSwgUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiA9IDAsCisgICAgICAgICAgICAgICAgICBib29sIGlzUGFzdGUgPSBm
YWxzZSwgYm9vbCBzaG91bGRTbWFydFJlcGxhY2UgPSBmYWxzZSwgYm9vbCBzaG91bGRNYXRjaFN0
eWxlID0gZmFsc2UpOwogCiAgICAgICAgIFN0cmluZyBtX2RhdGE7CiAgICAgICAgIGJvb2wgbV9p
c0xpbmVCcmVhazsKICAgICAgICAgYm9vbCBtX2lzQmFja1RhYjsKKworICAgICAgICBSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gbV9wYXN0aW5nRnJhZ21lbnQ7CisgICAgICAgIGJvb2wgbV9pc1Bh
c3RlOyAvLyBGSVhNRTogU2hvdWxkIHVzZSBpbnB1dE1vZGUgYWZ0ZXIgaXQgYmUgYXZhaWxhYmxl
OiBodHRwOi8vd2Via2l0Lm9yZy9iLzQyODA1CisgICAgICAgIGJvb2wgbV9zaG91bGRTbWFydFJl
cGxhY2U7CisgICAgICAgIGJvb2wgbV9zaG91bGRNYXRjaFN0eWxlOwogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
IGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggNDRkOGQ1ZmI4NDg3NjMyZWY3MjNk
MjEwZmU1MjQ0N2I0YTg2Nzg1Zi4uOWM1YjMxMmJhZDc3MGQ0YzAxNzhlMGI1ZDE1MTA3Yzc2Yjk5
ZDI0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTY2LDYgKzY2LDcgQEAKICNpbmNsdWRlICJTZXR0aW5n
cy5oIgogI2luY2x1ZGUgIlNvdW5kLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIlRl
eHRFdmVudC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlR5cGluZ0Nv
bW1hbmQuaCIKICNpbmNsdWRlICJVc2VyVHlwaW5nR2VzdHVyZUluZGljYXRvci5oIgpAQCAtMTI3
LDYgKzEyOCwyNiBAQCB2b2lkIEVkaXRvcjo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKEtleWJv
YXJkRXZlbnQqIGV2ZW50KQogICAgICAgICBjLT5oYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oZXZl
bnQpOwogfQogCitib29sIEVkaXRvcjo6aGFuZGxlVGV4dEV2ZW50KFRleHRFdmVudCogZXZlbnQp
Cit7CisgICAgaWYgKGV2ZW50LT5pc1Bhc3RlKCkpIHsKKyAgICAgICAgaWYgKGV2ZW50LT5wYXN0
aW5nRnJhZ21lbnQoKSkKKyAgICAgICAgICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQo
ZXZlbnQtPnBhc3RpbmdGcmFnbWVudCgpLCBmYWxzZSwgZXZlbnQtPnNob3VsZFNtYXJ0UmVwbGFj
ZSgpLCBldmVudC0+c2hvdWxkTWF0Y2hTdHlsZSgpKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAg
ICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChldmVudC0+ZGF0YSgpLCBmYWxzZSwgZXZlbnQt
PnNob3VsZFNtYXJ0UmVwbGFjZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgU3RyaW5nIGRhdGEgPSBldmVudC0+ZGF0YSgpOworICAgIGlmIChkYXRhID09ICJcbiIpIHsK
KyAgICAgICAgaWYgKGV2ZW50LT5pc0xpbmVCcmVhaygpKQorICAgICAgICAgICAgcmV0dXJuIGlu
c2VydExpbmVCcmVhaygpOworICAgICAgICByZXR1cm4gaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
KCk7CisgICAgfQorCisgICAgcmV0dXJuIGluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVu
dChkYXRhLCBmYWxzZSwgZXZlbnQpOworfQorCiBib29sIEVkaXRvcjo6Y2FuRWRpdCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgp
OwpAQCAtMjgyLDExICszMDMsMjkgQEAgdm9pZCBFZGl0b3I6OmRlbGV0ZVNlbGVjdGlvbldpdGhT
bWFydERlbGV0ZShib29sIHNtYXJ0RGVsZXRlKQogICAgIGFwcGx5Q29tbWFuZChEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgc21hcnREZWxldGUpKTsK
IH0KIAordm9pZCBFZGl0b3I6OnBhc3RlQXNQbGFpblRleHQoY29uc3QgU3RyaW5nJiBwYXN0aW5n
VGV4dCwgYm9vbCBzbWFydFJlcGxhY2UpCit7CisgICAgTm9kZSogdGFyZ2V0ID0gZmluZEV2ZW50
VGFyZ2V0RnJvbVNlbGVjdGlvbigpOworICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm47
CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KFRl
eHRFdmVudDo6Y3JlYXRlRm9yUGxhaW5UZXh0UGFzdGUobV9mcmFtZS0+ZG9tV2luZG93KCksIHBh
c3RpbmdUZXh0LCBzbWFydFJlcGxhY2UpLCBlYyk7Cit9CisKK3ZvaWQgRWRpdG9yOjpwYXN0ZUFz
RnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBwYXN0aW5nRnJhZ21lbnQsIGJv
b2wgc21hcnRSZXBsYWNlLCBib29sIG1hdGNoU3R5bGUpCit7CisgICAgTm9kZSogdGFyZ2V0ID0g
ZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpOworICAgIGlmICghdGFyZ2V0KQorICAgICAg
ICByZXR1cm47CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgdGFyZ2V0LT5kaXNwYXRj
aEV2ZW50KFRleHRFdmVudDo6Y3JlYXRlRm9yRnJhZ21lbnRQYXN0ZShtX2ZyYW1lLT5kb21XaW5k
b3coKSwgcGFzdGluZ0ZyYWdtZW50LCBzbWFydFJlcGxhY2UsIG1hdGNoU3R5bGUpLCBlYyk7Cit9
CisKIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQoUGFzdGVib2Fy
ZCogcGFzdGVib2FyZCkKIHsKICAgICBTdHJpbmcgdGV4dCA9IHBhc3RlYm9hcmQtPnBsYWluVGV4
dChtX2ZyYW1lKTsKICAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEluc2VydFRl
eHQodGV4dCwgc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25QYXN0ZWQp
KQotICAgICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQodGV4dCwgZmFsc2UsIGNhblNtYXJ0
UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQpKTsKKyAgICAgICAgcGFzdGVBc1BsYWlu
VGV4dCh0ZXh0LCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKSk7CiB9
CiAKIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9h
cmQsIGJvb2wgYWxsb3dQbGFpblRleHQpCkBAIC0yOTUsNyArMzM0LDcgQEAgdm9pZCBFZGl0b3I6
OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgYm9vbCBhbGxvd1Bs
YWluVGV4dCkKICAgICBib29sIGNob3NlUGxhaW5UZXh0OwogICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudCA9IHBhc3RlYm9hcmQtPmRvY3VtZW50RnJhZ21lbnQobV9mcmFtZSwg
cmFuZ2UsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7CiAgICAgaWYgKGZyYWdtZW50
ICYmIHNob3VsZEluc2VydEZyYWdtZW50KGZyYWdtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0
aW9uUGFzdGVkKSkKLSAgICAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChmcmFnbWVu
dCwgZmFsc2UsIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQpLCBjaG9z
ZVBsYWluVGV4dCk7CisgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudCwgY2FuU21hcnRS
ZXBsYWNlV2l0aFBhc3RlYm9hcmQocGFzdGVib2FyZCksIGNob3NlUGxhaW5UZXh0KTsKIH0KIAog
Ym9vbCBFZGl0b3I6OmNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBh
c3RlYm9hcmQpCkBAIC03MDYsMTIgKzc0NSw5IEBAIHZvaWQgRWRpdG9yOjpjbGVhckxhc3RFZGl0
Q29tbWFuZCgpCiAvLyB0aGUgZXZlbnQgaGFuZGxlciBOT1Qgc2V0dGluZyB0aGUgcmV0dXJuIHZh
bHVlIHRvIGZhbHNlCiBib29sIEVkaXRvcjo6ZGlzcGF0Y2hDUFBFdmVudChjb25zdCBBdG9taWNT
dHJpbmcgJmV2ZW50VHlwZSwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSkKIHsKLSAgICBO
b2RlKiB0YXJnZXQgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5lbGVtZW50KCk7Ci0g
ICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHRhcmdldCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmJv
ZHkoKTsKKyAgICBOb2RlKiB0YXJnZXQgPSBmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCk7
CiAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHRhcmdldCA9IHRh
cmdldC0+c2hhZG93QW5jZXN0b3JOb2RlKCk7CiAgICAgCiAgICAgUmVmUHRyPENsaXBib2FyZD4g
Y2xpcGJvYXJkID0gbmV3R2VuZXJhbENsaXBib2FyZChwb2xpY3ksIG1fZnJhbWUpOwogCkBAIC03
MjYsNiArNzYyLDE2IEBAIGJvb2wgRWRpdG9yOjpkaXNwYXRjaENQUEV2ZW50KGNvbnN0IEF0b21p
Y1N0cmluZyAmZXZlbnRUeXBlLCBDbGlwYm9hcmRBY2Nlc3NQb2xpCiAgICAgcmV0dXJuICFub0Rl
ZmF1bHRQcm9jZXNzaW5nOwogfQogCitOb2RlKiBFZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb21T
ZWxlY3Rpb24oKSBjb25zdAoreworICAgIE5vZGUqIHRhcmdldCA9IG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zdGFydCgpLmVsZW1lbnQoKTsKKyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgdGFyZ2V0
ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Ym9keSgpOworICAgIGlmICghdGFyZ2V0KQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gdGFyZ2V0LT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKK30K
Kwogdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEVk
aXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKICAgICBzd2l0Y2ggKG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb25UeXBlKCkpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuaCBiL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCBkYjI0OWU3MjJjMWJjYzRjNmQy
NWNkNzVhODczMmIyMTZkZDBhNWRjLi4xM2U2ZGY1NDgyYTI1ZGRhZWYyZWYxMDQ3YTM2MzMwYzli
YzJjYzQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5oCkBAIC00OSw2ICs0OSw3IEBAIGNsYXNzIEtpbGxSaW5nOwogY2xh
c3MgUGFzdGVib2FyZDsKIGNsYXNzIFNpbXBsZUZvbnREYXRhOwogY2xhc3MgVGV4dDsKK2NsYXNz
IFRleHRFdmVudDsKIAogc3RydWN0IENvbXBvc2l0aW9uVW5kZXJsaW5lIHsKICAgICBDb21wb3Np
dGlvblVuZGVybGluZSgpIApAQCAtNzcsNiArNzgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGhh
bmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopOwogICAgIHZvaWQgaGFuZGxlSW5wdXRN
ZXRob2RLZXlkb3duKEtleWJvYXJkRXZlbnQqKTsKKyAgICBib29sIGhhbmRsZVRleHRFdmVudChU
ZXh0RXZlbnQqKTsKIAogICAgIGJvb2wgY2FuRWRpdCgpIGNvbnN0OwogICAgIGJvb2wgY2FuRWRp
dFJpY2hseSgpIGNvbnN0OwpAQCAtMjkzLDYgKzI5NSwxMCBAQCBwdWJsaWM6CiAgICAgUGFzc1Jl
ZlB0cjxSYW5nZT4gbmV4dFZpc2libGVSYW5nZShSYW5nZSosIGNvbnN0IFN0cmluZyYsIGJvb2wg
Zm9yd2FyZCwgYm9vbCBjYXNlRmxhZywgYm9vbCB3cmFwRmxhZyk7CiAgICAgCiAgICAgdm9pZCBh
ZGRUb0tpbGxSaW5nKFJhbmdlKiwgYm9vbCBwcmVwZW5kKTsKKworICAgIHZvaWQgcGFzdGVBc0Zy
YWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4sIGJvb2wgc21hcnRSZXBsYWNlLCBi
b29sIG1hdGNoU3R5bGUpOworICAgIHZvaWQgcGFzdGVBc1BsYWluVGV4dChjb25zdCBTdHJpbmcm
LCBib29sIHNtYXJ0UmVwbGFjZSk7CisKIHByaXZhdGU6CiAgICAgRnJhbWUqIG1fZnJhbWU7CiAg
ICAgT3duUHRyPERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI+IG1fZGVsZXRlQnV0dG9uQ29udHJvbGxl
cjsKQEAgLTMyNiw2ICszMzIsNyBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IGxh
c3RWaXNpYmxlUmFuZ2UoY29uc3QgU3RyaW5nJiwgYm9vbCBjYXNlRmxhZyk7CiAgICAgCiAgICAg
dm9pZCBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
bmV3U2VsZWN0aW9uLCBib29sIGNsb3NlVHlwaW5nLCBib29sIGNsZWFyVHlwaW5nU3R5bGUpOwor
ICAgIE5vZGUqIGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdDsKIH07CiAKIGlu
bGluZSB2b2lkIEVkaXRvcjo6c2V0U3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKGJvb2wgZmxhZykK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKaW5kZXggZTEwYTNhMWM2ZDg0ZjVjM2ExYWEwNGUxM2VkY2QzMmYw
MDA4YTFhYy4uOGExNjE4MTZlMWExMzAyMDJjMjJiOWM5OWYyODUwZGIzMzhhMTNlNSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAKQEAgLTI2NzQsMTkgKzI2NzQsOCBAQCBib29sIEV2ZW50SGFuZGxlcjo6
dGFic1RvTGlua3MoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0CiAKIHZvaWQgRXZlbnRIYW5k
bGVyOjpkZWZhdWx0VGV4dElucHV0RXZlbnRIYW5kbGVyKFRleHRFdmVudCogZXZlbnQpCiB7Ci0g
ICAgU3RyaW5nIGRhdGEgPSBldmVudC0+ZGF0YSgpOwotICAgIGlmIChkYXRhID09ICJcbiIpIHsK
LSAgICAgICAgaWYgKGV2ZW50LT5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICBpZiAobV9m
cmFtZS0+ZWRpdG9yKCktPmluc2VydExpbmVCcmVhaygpKQotICAgICAgICAgICAgICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYg
KG1fZnJhbWUtPmVkaXRvcigpLT5pbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKSkKLSAgICAgICAg
ICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmIChtX2ZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VGV4dFdpdGhvdXRTZW5k
aW5nVGV4dEV2ZW50KGRhdGEsIGZhbHNlLCBldmVudCkpCi0gICAgICAgICAgICBldmVudC0+c2V0
RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9CisgICAgaWYgKG1fZnJhbWUtPmVkaXRvcigpLT5oYW5k
bGVUZXh0RXZlbnQoZXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
IH0KIAogI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9XZWJL
aXQvbWFjL0NoYW5nZUxvZyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGJmODJkNTg5Njc0
MWVhZGZmZWQ3ZTY4Y2IyNmNlZjdkMWIyODIyZDUuLmQyODFhZTE5NGYzZGRmZTFiNWJiZTFkNDlj
NjdmNmJiMGI4MjhmZGYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1dl
YktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDgtMDQgIE1PUklUQSBI
YWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUGFzdGluZyBzaG91bGQgZmlyZSB0ZXh0SW5wdXQgZXZlbnQu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mjk1OAor
CisgICAgICAgIE9uIHBhc3RlLCBpbnZva2UgRWRpdG9yIGluc3RlYWQgb2YgZGlyZWN0IGNvbW1h
bmQgaW52b2NhdGlvbiwKKyAgICAgICAgd2hpY2ggYWxsb3dzIGRpc3BhdGNoaW5nIGV2ZW50cyBi
ZWZvcmUgYWN0dWFsIHBhc3RlLgorCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToK
KyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6YWxsb3dQbGFpblRl
eHQ6XSk6CisKIDIwMTAtMDgtMDUgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBLaWx6ZXIuCmRpZmYgLS1naXQgYS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0gYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRN
TFZpZXcubW0KaW5kZXggNThjZTEyNDQyMWM2MzY4ZjUyNTBiMDIwMjA3ODI4ZDk3Mzg5ZWFjNS4u
MGU1NTliNDRmNDI3NjNkMGJkNTMzYjk4ODNjYzNmZDRmYmM3YjY2NSAxMDA2NDQKLS0tIGEvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJIVE1MVmlldy5tbQpAQCAtODQ5LDExICs4NDksMTIgQEAgc3RhdGljIE5TVVJMKiB1bmlxdWVV
UkxXaXRoUmVsYXRpdmVQYXJ0KE5TU3RyaW5nICpyZWxhdGl2ZVBhcnQpCiAgICAgW3dlYlZpZXcg
X3NldEluc2VydGlvblBhc3RlYm9hcmQ6cGFzdGVib2FyZF07CiAKICAgICBET01SYW5nZSAqcmFu
Z2UgPSBbc2VsZiBfc2VsZWN0ZWRSYW5nZV07CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7CiAgICAgCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NO
T1dfTEVPUEFSRCkKICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtzZWxmIF9k
b2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCBpbkNvbnRleHQ6cmFuZ2Ug
YWxsb3dQbGFpblRleHQ6YWxsb3dQbGFpblRleHRdOwogICAgIGlmIChmcmFnbWVudCAmJiBbc2Vs
ZiBfc2hvdWxkSW5zZXJ0RnJhZ21lbnQ6ZnJhZ21lbnQgcmVwbGFjaW5nRE9NUmFuZ2U6cmFuZ2Ug
Z2l2ZW5BY3Rpb246V2ViVmlld0luc2VydEFjdGlvblBhc3RlZF0pCi0gICAgICAgIFtbc2VsZiBf
ZnJhbWVdIF9yZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxh
Y2VtZW50Ok5PIHNtYXJ0UmVwbGFjZTpbc2VsZiBfY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9h
cmQ6cGFzdGVib2FyZF0gbWF0Y2hTdHlsZTpOT107CisgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9y
KCktPnBhc3RlQXNGcmFnbWVudChjb3JlKGZyYWdtZW50KSwgW3NlbGYgX2NhblNtYXJ0UmVwbGFj
ZVdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRdLCBmYWxzZSk7CiAjZWxzZQogICAgIC8vIE1haWwg
aXMgaWdub3JpbmcgdGhlIGZyYW1lbnQgcGFzc2VkIHRvIHRoZSBkZWxlZ2F0ZSBhbmQgY3JlYXRl
cyBhIG5ldyBvbmUuCiAgICAgLy8gV2Ugd2FudCB0byBhdm9pZCBjcmVhdGluZyB0aGUgZnJhZ21l
bnQgdHdpY2UuCkBAIC04NjEsMTIgKzg2MiwxMiBAQCBzdGF0aWMgTlNVUkwqIHVuaXF1ZVVSTFdp
dGhSZWxhdGl2ZVBhcnQoTlNTdHJpbmcgKnJlbGF0aXZlUGFydCkKICAgICAgICAgaWYgKFtzZWxm
IF9zaG91bGRJbnNlcnRGcmFnbWVudDpuaWwgcmVwbGFjaW5nRE9NUmFuZ2U6cmFuZ2UgZ2l2ZW5B
Y3Rpb246V2ViVmlld0luc2VydEFjdGlvblBhc3RlZF0pIHsKICAgICAgICAgICAgIERPTURvY3Vt
ZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVi
b2FyZDpwYXN0ZWJvYXJkIGluQ29udGV4dDpyYW5nZSBhbGxvd1BsYWluVGV4dDphbGxvd1BsYWlu
VGV4dF07CiAgICAgICAgICAgICBpZiAoZnJhZ21lbnQpCi0gICAgICAgICAgICAgICAgW1tzZWxm
IF9mcmFtZV0gX3JlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6ZnJhZ21lbnQgc2VsZWN0UmVw
bGFjZW1lbnQ6Tk8gc21hcnRSZXBsYWNlOltzZWxmIF9jYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVi
b2FyZDpwYXN0ZWJvYXJkXSBtYXRjaFN0eWxlOk5PXTsKKyAgICAgICAgICAgICAgICBjb3JlRnJh
bWUtPmVkaXRvcigpLT5wYXN0ZUFzRnJhZ21lbnQoY29yZShmcmFnbWVudCksIFtzZWxmIF9jYW5T
bWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZDpwYXN0ZWJvYXJkXSwgZmFsc2UpOwogICAgICAgICB9
ICAgICAgICAKICAgICB9IGVsc2UgewogICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFn
bWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCBp
bkNvbnRleHQ6cmFuZ2UgYWxsb3dQbGFpblRleHQ6YWxsb3dQbGFpblRleHRdOwogICAgICAgICBp
ZiAoZnJhZ21lbnQgJiYgW3NlbGYgX3Nob3VsZEluc2VydEZyYWdtZW50OmZyYWdtZW50IHJlcGxh
Y2luZ0RPTVJhbmdlOnJhbmdlIGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25QYXN0ZWRd
KQotICAgICAgICAgICAgW1tzZWxmIF9mcmFtZV0gX3JlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21l
bnQ6ZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6Tk8gc21hcnRSZXBsYWNlOltzZWxmIF9jYW5T
bWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZDpwYXN0ZWJvYXJkXSBtYXRjaFN0eWxlOk5PXTsKKyAg
ICAgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnBhc3RlQXNGcmFnbWVudChjb3JlKGZyYWdt
ZW50KSwgW3NlbGYgX2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRdLCBm
YWxzZSk7CiAgICAgfQogI2VuZGlmCiAgICAgW3dlYlZpZXcgX3NldEluc2VydGlvblBhc3RlYm9h
cmQ6bmlsXTsK
</data>
<flag name="review"
          id="52070"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>