<?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>6987</bug_id>
          
          <creation_ts>2006-01-31 18:57:01 -0800</creation_ts>
          <short_desc>Implement maxlength for new text fields</short_desc>
          <delta_ts>2006-03-05 21:49:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Forms</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>6986</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adele Peterson">adele</reporter>
          <assigned_to name="Adele Peterson">adele</assigned_to>
          <cc>justin.garcia</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>30832</commentid>
    <comment_count>0</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2006-01-31 18:57:01 -0800</bug_when>
    <thetext> </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34681</commentid>
    <comment_count>1</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2006-03-01 17:00:25 -0800</bug_when>
    <thetext>&lt;rdar://problem/4463713&gt; Implement maxlength for new text fields (6987)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34929</commentid>
    <comment_count>2</comment_count>
      <attachid>6821</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2006-03-02 22:27:22 -0800</bug_when>
    <thetext>Created attachment 6821
patch for maxlength</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34935</commentid>
    <comment_count>3</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-03-03 01:14:59 -0800</bug_when>
    <thetext>+    if (evt-&gt;type() == khtmlInsertTextEvent &amp;&amp; evt-&gt;isInsertTextEvent()) {

What&apos;s the difference between these two checks?

+        // Make sure that the text to be inserted will not violate the maxLength
+        unsigned ml = maxLength();
+        if (ml &lt;= 0 || ml &gt; 1024)
+            ml = 1024;

Apply the restriction on maxlength once, when it&apos;s set, instead of every time it&apos;s used.

+        unsigned currentLength = value().length();
+        String text = static_cast&lt;InsertTextEventImpl *&gt;(evt)-&gt;text();
+        int selectionLength = getDocument()-&gt;frame()-&gt;selection().toString().length();
+        
+        // Truncate the inserted text if necessary
+        if (currentLength + text.length() - selectionLength &gt; ml) {
+            if (currentLength &gt; ml)
+                text = String(&quot;&quot;);

When will currentLength ever be &gt; ml?  You could assert(currentLength &lt;= ml).

-        DOMString value = input-&gt;value();
+        DOMString value = input-&gt;value().copy();

Use String, DOMString is a synonym allowed for backward compatibility, but should not be used in anything new.

The NodeStyles computed during the test rendering will become invalid if the InsertTextEvent handler changes the value of the string.  You need to send the event earlier, where you do m_text = plainText(range);, and do another test rendering if the event handler forces you to create a new fragment.

+    if (startNode &amp;&amp; startNode-&gt;rootEditableElement() &amp;&amp; startNode-&gt;rootEditableElement()-&gt;isAnonymousDiv()) {
+        // Send InsertTextEvent and update text if necessary
+        RefPtr&lt;EventImpl&gt; evt = new InsertTextEventImpl(newText);
+        HTMLAnonymousDivElementImpl *div = static_cast&lt;HTMLAnonymousDivElementImpl*&gt;(startNode-&gt;rootEditableElement());
+        div-&gt;shadowParentNode()-&gt;dispatchEvent(evt, exceptionCode, true);
+    }

Why must you check for isAnonymousDiv()?  Couldn&apos;t you dispatch the InsertTextEvents to all rootEditable elements, and let normal divs disregard the event, and make anonymousDivs send the event to their shadow parent?  I don&apos;t think that the editing code should know about anonymous divs and shadow parents, it should only know about sending InsertTextEvents and the possibility that whoever handles that event will change the text to be inserted.

r- because of the test rendering bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34936</commentid>
    <comment_count>4</comment_count>
      <attachid>6821</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-03-03 01:15:43 -0800</bug_when>
    <thetext>Comment on attachment 6821
patch for maxlength

see my comments above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35021</commentid>
    <comment_count>5</comment_count>
      <attachid>6834</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2006-03-03 16:14:50 -0800</bug_when>
    <thetext>Created attachment 6834
new patch to address Justin&apos;s comments

Justin and I discussed this, and I think this new patch addresses his comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35025</commentid>
    <comment_count>6</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2006-03-03 17:39:25 -0800</bug_when>
    <thetext>Darin and I talked about how the khtmlInsertTextEvent that I&apos;m using after the text inserted, can just be a normal EventImpl.  And I&apos;d like to give it a better name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35072</commentid>
    <comment_count>7</comment_count>
      <attachid>6834</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-04 11:40:21 -0800</bug_when>
    <thetext>Comment on attachment 6834
new patch to address Justin&apos;s comments

New top-level classes should be in separate files, even though we didn&apos;t split render_block.cpp yet. So HTMLAnonymousDivElementImpl should be in its own file as should InsertTextEventImpl.

We might be able to come up with a better name for the HTMLAnonymousDivElementImpl class too. Since its implementation has a special case for the case where its parent has a RenderTextField for a renderer, it should probably have a name and location specific to its use instead of pretending to be more general purpose. For example, it could go in the rendering directory even though it&apos;s a subclass of a DOM element class, since it&apos;s used as part of form element rendering.

HTMLAnonymousDivElementImpl::defaultEventHandler checks if the parent&apos;s renderer is a text field, but it doesn&apos;t check if its parent is an HTMLInputElementImpl -- instead it assumes that. That should be checked too.

As we discussed, khtmlInsertTextEvent does not need to be an InsertTextEventImpl.

There&apos;s no need to add an unused isAnonymousDiv() function.

+    HTMLAnonymousDivElementImpl(DocumentImpl *doc, NodeImpl* shadowParent = 0);

Should just be DocumentImpl*. No need to give a name.

+    virtual void defaultEventHandler(EventImpl *evt);

Similarly, should just be EventImpl*, no need for &quot;evt&quot;.

In HTMLInputElementImpl, I&apos;d like to see the enforcement of range from 0 to 1024 be when m_maxLen is set, not in the maxLength() accessor.

+        return (m_div-&gt;textContent());

No need for parentheses on a return statement like this.

     macro(khtmlHorizontalmousewheel) \
+    macro(khtmlBeforeInsertText) \
+    macro(khtmlInsertText) \
     macro(khtmlMove) \

The other events are in alphabetical order, so you should move BeforeInsertText up.

+    InsertTextEventImpl(const AtomicString &amp;);
+    InsertTextEventImpl(const AtomicString &amp;, String);

No spaces before the &amp; characters.

+    virtual void setText(String);

Why is this function virtual? Also, it should take a const String&amp;, not a String.

We might want to consider a version of the BeforeInsertText event that sends a DOM fragment through instead of a string -- it seems a bit limiting to have this paste preflighting be specific to plain text pasting -- but perhaps the plain text one is easier to implement for now.

You should undo the change to ReplaceSelectionCommand.h.

The code in HTMLAnonymousDivElementImpl::defaultEventHandler calls subtreeHasChanged *before* calling the default handler. That seems like it&apos;s too early -- will the insertion be done at that point? If this event is fired only after text is inserted then perhaps it should be named InsertedText, TextInserted, or AfterInsertText?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35178</commentid>
    <comment_count>8</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2006-03-05 15:01:02 -0800</bug_when>
    <thetext>I&apos;m about to upload a patch that addresses most of Darin&apos;s comments.

At one point, I had a version of the new event that stored a DocumentImpl.  I switched over to storing just the text to make it easier to get a working version of this up and running.  I think its a good enhancement to make for the future.

subtreeHasChanged only gets called after the editing command has been applied, and the text has already been inserted.  I&apos;ve renamed the event to khtmlTextInsertedEvent to make more sense.

Also, Justin and I discussed changing subtreeHasChanged so that instead of always updating the InputElement&apos;s value, we could just invalidate it, and lazily update the value.  I didn&apos;t do that for this patch, but I&apos;m planning on doing it soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35179</commentid>
    <comment_count>9</comment_count>
      <attachid>6878</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2006-03-05 15:02:56 -0800</bug_when>
    <thetext>Created attachment 6878
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35180</commentid>
    <comment_count>10</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2006-03-05 15:21:22 -0800</bug_when>
    <thetext>Also, Hyatt and I talked about whether the new element class (now HTMLTextFieldInnerElementImpl) should move to the rendering directory, and decided to leave it in the html dir for now.  We also talked about ways to eliminate the need for this class all together- by adding the ability to have default event listeners.  Actually, I meant to add a fixme in HTMLTextFieldInnerElementImpl.cpp about this.  I will do that in my local tree before I commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35181</commentid>
    <comment_count>11</comment_count>
      <attachid>6878</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-05 15:49:06 -0800</bug_when>
    <thetext>Comment on attachment 6878
patch

One major difference between this maxLength implementation and the one I did in KWQTextField is that this one limits you to a certain number of UTF-16 characters. But the one in KWQTextField limits you to a certain number of &quot;composed character sequences&quot;. That means that an e with an umlaut over it counts as 1 character even though it can be two Unicode characters in a row (the e followed by the non-spacing umlaut) and a single Japanese character that is outside the &quot;BMP&quot; that requires two UTF-16 codes (a &quot;surrogate pair&quot;) to encode also counts as a single character.

The code that deals with this in KWQTextField is _KWQ_numComposedCharacterSequences and _KWQ_truncateToNumComposedCharacterSequences:.

We will need to replicate this, although I guess it&apos;s fine not to at first, but I&apos;d like to see another bug about that.

To tell if a character is half of a surrogate pair, you use macros in &lt;unicode/utf16.h&gt;, such as U16_LENGTH or U16_IS_LEAD. To tell if the character is going to combine with the one before it is more difficult. There&apos;s code in CoreFoundation that does this analysis and I presume there&apos;s some way to do it with ICU, but I don&apos;t know what that is.

In addition to determining such things, code will have to be careful not to do math on the length of strings, since composing means that &quot;length of A plus length of B&quot; is not necessarily the same as &quot;length of A plus B&quot;.

HTMLTextFieldInnerElementImpl does not need an explicit destructor. The compiler-generated destructor will do the job. So don&apos;t declare or define a destructor.

+void HTMLTextFieldInnerElementImpl::defaultEventHandler(EventImpl *evt)

The above should have the * next to the EventImpl.

The various files that say:

\ No newline at end of file

should be fixed so they have a newline at the end of the file.

RenderTextField.h should not include HTMLTextFieldInnerElementImpl.h. To compile, all it needs is a forward declaration of the class. The .cpp file can include the complete header.

     if (m_div) {
-        m_div-&gt;removeEventListener(DOMCharacterDataModifiedEvent, m_mutationListener.get(), false);
         m_div-&gt;detach();
     }

Should remove the braces from the above.

+            m_div = new HTMLTextFieldInnerElementImpl(document(), element());

node() is more efficient than element() in cases like the above.

There&apos;s no need to include &quot;PlatformString.h&quot; in BeforeTextInsertedEventImpl.h -- dom2_eventsimpl.h contains classes with String in them, and because of that it has the class defined already.

+    BeforeTextInsertedEventImpl(String&amp;);

That should be &quot;const String&amp;&quot;.

In the ReplaceSelectionCommand code to send BeforeTextInsertedEvent, I notice that you compute the text before you check if there&apos;s a frame. That&apos;s unnecessary and a little bit unclear. I suggest computing the range and the text right when you are about to use it.

I&apos;d also like to see you declare &quot;ec&quot; as ExceptionCode instead of int for clarity and name it ec in both places you use it instead of calling it exceptionCode in some places.

These issues are minor ones. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35209</commentid>
    <comment_count>12</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2006-03-05 21:40:53 -0800</bug_when>
    <thetext>filed http://bugzilla.opendarwin.org/show_bug.cgi?id=7622 to address the composed character sequence issue.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6821</attachid>
            <date>2006-03-02 22:27:22 -0800</date>
            <delta_ts>2006-03-03 16:14:50 -0800</delta_ts>
            <desc>patch for maxlength</desc>
            <filename>maxlength_patch.txt</filename>
            <type>text/plain</type>
            <size>25755</size>
            <attacher name="Adele Peterson">adele</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDEzMTA2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDYtMDMtMDIgIEFkZWxlIFBldGVyc29uICA8
YWRlbGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3QgZm9yOgorICAgICAgICBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5v
cmcvc2hvd19idWcuY2dpP2lkPTY5ODcKKyAgICAgICAgSW1wbGVtZW50IG1heGxlbmd0aCBmb3Ig
bmV3IHRleHQgZmllbGRzCisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL2lucHV0LWFwcGVhcmFuY2Ut
bWF4bGVuZ3RoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9pbnB1
dC1hcHBlYXJhbmNlLW1heGxlbmd0aC5odG1sOiBBZGRlZC4KKwogMjAwNi0wMy0wMiAgQW5kcmV3
IFdlbGxpbmd0b24gIDxwcm90b25Ad2lyZXRhcHBlZC5uZXQ+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4sIGxhbmRlZCBieSBCZXRoLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9p
bnB1dC1hcHBlYXJhbmNlLW1heGxlbmd0aC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnB1dC1hcHBlYXJhbmNlLW1heGxlbmd0aC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2lucHV0LWFwcGVhcmFu
Y2UtbWF4bGVuZ3RoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAor
RURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZToobnVsbCkgdG9E
T01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBESVYgdG8gNSBvZiAjdGV4dCA+IERJViBh
ZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxT
RQorRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlk
Q2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFu
Z2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCB0byAzIG9mICN0ZXh0IHRv
RE9NUmFuZ2U6cmFuZ2UgZnJvbSA0IG9mICN0ZXh0ID4gRElWIHRvIDQgb2YgI3RleHQgPiBESVYg
YWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFM
U0UKK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0Rp
ZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgorRURJVElORyBERUxFR0FURTogd2ViVmlld0Rp
ZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiBz
aG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gNCBvZiAjdGV4dCA+IERJViB0
byA0IG9mICN0ZXh0ID4gRElWIHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSA1IG9mICN0ZXh0ID4gRElW
IHRvIDUgb2YgI3RleHQgPiBESVYgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJl
YW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFu
Z2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgorRURJVElO
RyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9u
CitUaGlzIHRlc3QgY2hhbmdlcyB0aGUgdmFsdWUgb2YgdGhlIHRleHQgZmllbGQgYnkgc2ltdWxh
dGluZyB0eXBpbmcsIGFuZCB0aGVuIGdldHMgdGhlIHZhbHVlLiAKKworVGVzdCAxIFBhc3NlZC4g
TWF4bGVuZ3RoIHdvcmtzIGZvciBkZWZhdWx0IHZhbHVlLiBUZXN0IDIgUGFzc2VkLiBNYXhsZW5n
dGggd29ya3MgZm9yIGluc2VydGVkIHRleHQuCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9y
bXMvaW5wdXQtYXBwZWFyYW5jZS1tYXhsZW5ndGguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL2lucHV0LWFwcGVhcmFuY2UtbWF4bGVuZ3RoLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2lucHV0LWFwcGVhcmFuY2UtbWF4bGVuZ3Ro
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDMgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0PgorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
c3AnKS5mb2N1cygpOworICAgIAorICAgIHZhciByZXMgPSAiIjsKKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICB9CisgICAgCisgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdz
cCcpLnZhbHVlID09ICIxMjM0NSIpIHsKKyAgICAgICAgcmVzKz0gIlRlc3QgMSBQYXNzZWQuICBN
YXhsZW5ndGggd29ya3MgZm9yIGRlZmF1bHQgdmFsdWUuXG4iOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHJlcys9ICJUZXN0IDEgRmFpbGVkLiAgTWF4bGVuZ3RoIGRvZXMgbm90IHdvcmsgZm9yIGRl
ZmF1bHQgdmFsdWUuXG4iOworICAgIH0KKyAgICAKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnc3AnKS52YWx1ZSA9ICIxMjMiOworICAgIAorICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJJ
bnNlcnRUZXh0IiwgZmFsc2UsICdhYmNkJyk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoIklu
c2VydFRleHQiLCBmYWxzZSwgJ2VmZ2hpJyk7CisgICAgCisgICAgaWYgKGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdzcCcpLnZhbHVlID09ICJhYmNkZSIpIHsKKyAgICAgICAgcmVzKz0gIlRlc3Qg
MiBQYXNzZWQuICBNYXhsZW5ndGggd29ya3MgZm9yIGluc2VydGVkIHRleHQuXG4iOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHJlcys9ICJUZXN0IDIgRmFpbGVkLiAgTWF4bGVuZ3RoIGRvZXMgbm90
IHdvcmsgZm9yIGluc2VydGVkIHRleHQuXG4iOworICAgIH0KKyAgICAKKyAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgncmVzdWx0JykuaW5uZXJIVE1MID0gcmVzOworfQorCis8L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5IG9ubG9hZD0idGVzdCgpIj4KK1RoaXMgdGVzdCBjaGFuZ2VzIHRoZSB2
YWx1ZSBvZiB0aGUgdGV4dCBmaWVsZCBieSBzaW11bGF0aW5nIHR5cGluZywgYW5kIHRoZW4gZ2V0
cyB0aGUgdmFsdWUuCis8YnI+PGJyPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJzcCIgc3R5bGU9
Ii1raHRtbC1hcHBlYXJhbmNlOnRleHRmaWVsZCIgbWF4bGVuZ3RoPTUgdmFsdWU9IjEyMzQ1NiI+
PC9pbnB1dD4KKzxkaXYgaWQ9InJlc3VsdCI+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9raHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAkocmV2aXNpb24gMTMwODIpCisr
KyBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDIsNiArMTAyLDE3IEBACiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorSFRNTEFub255bW91
c0RpdkVsZW1lbnRJbXBsOjpIVE1MQW5vbnltb3VzRGl2RWxlbWVudEltcGwoRG9jdW1lbnRJbXBs
ICpkb2MsIE5vZGVJbXBsICpzaGFkb3dQYXJlbnQpCisgICAgOiBIVE1MRGl2RWxlbWVudEltcGwo
ZG9jKSwgbV9zaGFkb3dQYXJlbnQoc2hhZG93UGFyZW50KQoreworfQorCitIVE1MQW5vbnltb3Vz
RGl2RWxlbWVudEltcGw6On5IVE1MQW5vbnltb3VzRGl2RWxlbWVudEltcGwoKQoreworfQorCisv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKIEhUTUxIUkVsZW1lbnRJbXBsOjpIVE1MSFJFbGVtZW50SW1w
bChEb2N1bWVudEltcGwgKmRvYykKICAgICA6IEhUTUxFbGVtZW50SW1wbChoclRhZywgZG9jKQog
ewpJbmRleDogV2ViQ29yZS9raHRtbC9odG1sL0hUTUxJbnB1dEVsZW1lbnRJbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL2h0bWwvSFRNTElucHV0RWxlbWVudEltcGwuY3BwCShy
ZXZpc2lvbiAxMzA4MikKKysrIFdlYkNvcmUva2h0bWwvaHRtbC9IVE1MSW5wdXRFbGVtZW50SW1w
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJyZW5kZXJf
YnV0dG9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dEZpZWxkLmgiCiAjaW5jbHVkZSAicmVuZGVy
X3RoZW1lLmgiCisjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50SW1wbC5oIgogCiAjaW5jbHVkZSA8a2xvY2FsZS5oPgpAQCAtMTE3MCw2ICsxMTcxLDI1
IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoZXZ0LT50eXBlKCkgPT0ga2h0bWxJbnNl
cnRUZXh0RXZlbnQgJiYgZXZ0LT5pc0luc2VydFRleHRFdmVudCgpKSB7CisgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHRoZSB0ZXh0IHRvIGJlIGluc2VydGVkIHdpbGwgbm90IHZpb2xhdGUgdGhl
IG1heExlbmd0aAorICAgICAgICB1bnNpZ25lZCBtbCA9IG1heExlbmd0aCgpOworICAgICAgICBp
ZiAobWwgPD0gMCB8fCBtbCA+IDEwMjQpCisgICAgICAgICAgICBtbCA9IDEwMjQ7CisgICAgICAg
IHVuc2lnbmVkIGN1cnJlbnRMZW5ndGggPSB2YWx1ZSgpLmxlbmd0aCgpOworICAgICAgICBTdHJp
bmcgdGV4dCA9IHN0YXRpY19jYXN0PEluc2VydFRleHRFdmVudEltcGwgKj4oZXZ0KS0+dGV4dCgp
OworICAgICAgICBpbnQgc2VsZWN0aW9uTGVuZ3RoID0gZ2V0RG9jdW1lbnQoKS0+ZnJhbWUoKS0+
c2VsZWN0aW9uKCkudG9TdHJpbmcoKS5sZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRy
dW5jYXRlIHRoZSBpbnNlcnRlZCB0ZXh0IGlmIG5lY2Vzc2FyeQorICAgICAgICBpZiAoY3VycmVu
dExlbmd0aCArIHRleHQubGVuZ3RoKCkgLSBzZWxlY3Rpb25MZW5ndGggPiBtbCkgeworICAgICAg
ICAgICAgaWYgKGN1cnJlbnRMZW5ndGggPiBtbCkKKyAgICAgICAgICAgICAgICB0ZXh0ID0gU3Ry
aW5nKCIiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0ZXh0LnRydW5jYXRl
KG1sIC0gY3VycmVudExlbmd0aCk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxJbnNlcnRUZXh0
RXZlbnRJbXBsICo+KGV2dCktPnNldFRleHQodGV4dCk7CisgICAgICAgIH0gICAgICAgIAorICAg
IH0KKyAgICAKICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihldnQpOwogfQogCkluZGV4OiBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAkocmV2
aXNpb24gMTMwODIpCisrKyBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtNjgsNiArNjgsMjMgQEAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitj
bGFzcyBIVE1MQW5vbnltb3VzRGl2RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnRJ
bXBsCit7CitwdWJsaWM6CisgICAgSFRNTEFub255bW91c0RpdkVsZW1lbnRJbXBsKERvY3VtZW50
SW1wbCAqZG9jLCBOb2RlSW1wbCogc2hhZG93UGFyZW50ID0gMCk7CisgICAgfkhUTUxBbm9ueW1v
dXNEaXZFbGVtZW50SW1wbCgpOworICAgIAorICAgIHZpcnR1YWwgYm9vbCBpc0Fub255bW91c0Rp
digpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIE5vZGVJbXBsKiBzaGFkb3dQYXJlbnRO
b2RlKCkgeyByZXR1cm4gbV9zaGFkb3dQYXJlbnQ7IH0KKyAgICB2b2lkIHNldFNoYWRvd1BhcmVu
dE5vZGUoTm9kZUltcGwqIG5vZGUpIHsgbV9zaGFkb3dQYXJlbnQgPSBub2RlOyB9CisgICAgCitw
cml2YXRlOgorICAgIE5vZGVJbXBsKiBtX3NoYWRvd1BhcmVudDsKK307CisKKy8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKwogY2xhc3MgSFRNTEhSRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJ
bXBsCiB7CiBwdWJsaWM6CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RmllbGQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RmllbGQuaAkocmV2
aXNpb24gMTMwODIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RmllbGQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNiBAQAogI2lmbmRlZiBSZW5kZXJUZXh0RmllbGRfSAog
I2RlZmluZSBSZW5kZXJUZXh0RmllbGRfSAogCi0jaW5jbHVkZSAiZG9tMl9ldmVudHMuaCIKICNp
bmNsdWRlICJyZW5kZXJfZmxleGJveC5oIgogI2luY2x1ZGUgImh0bWxfYmxvY2tpbXBsLmgiCiAK
QEAgLTI5LDIwICsyOCw2IEBACiAKIGNsYXNzIFJlbmRlclRleHRGaWVsZDsKIAotY2xhc3MgSW5w
dXRNdXRhdGlvbkxpc3RlbmVyIDogcHVibGljIEV2ZW50TGlzdGVuZXIKLXsKLXB1YmxpYzoKLSAg
ICBJbnB1dE11dGF0aW9uTGlzdGVuZXIoKSB7IG1fcmVuZGVyVGV4dEZpZWxkID0gMDsgfQotICAg
IElucHV0TXV0YXRpb25MaXN0ZW5lcihSZW5kZXJUZXh0RmllbGQgKnIpIHsgbV9yZW5kZXJUZXh0
RmllbGQgPSByOyB9Ci0gICAgUmVuZGVyVGV4dEZpZWxkICpyZW5kZXJUZXh0RmllbGQoKSBjb25z
dCB7IHJldHVybiBtX3JlbmRlclRleHRGaWVsZDsgfQotICAgIHZvaWQgc2V0SW5wdXRFbGVtZW50
KFJlbmRlclRleHRGaWVsZCAqcikgeyBtX3JlbmRlclRleHRGaWVsZCA9IHI7IH0KLSAgICAKLSAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnRMaXN0ZW5lckV2ZW50IGV2dCwgYm9vbCBp
c1dpbmRvd0V2ZW50KTsKLSAgICAKLXByaXZhdGU6Ci0gICAgUmVuZGVyVGV4dEZpZWxkICptX3Jl
bmRlclRleHRGaWVsZDsKLX07Ci0KIGNsYXNzIFJlbmRlclRleHRGaWVsZCA6IHB1YmxpYyBSZW5k
ZXJCbG9jawogewogcHVibGljOgpAQCAtNjksMTAgKzU0LDEwIEBACiAgICAgdm9pZCBzZXRTZWxl
Y3Rpb25SYW5nZShpbnQsIGludCk7CiAKICAgICB2b2lkIHN1YnRyZWVIYXNDaGFuZ2VkKCk7Cisg
ICAgU3RyaW5nIHRleHQoKTsKIAogcHJvdGVjdGVkOgotICAgIFJlZlB0cjxIVE1MRGl2RWxlbWVu
dEltcGw+IG1fZGl2OwotICAgIFJlZlB0cjxJbnB1dE11dGF0aW9uTGlzdGVuZXI+IG1fbXV0YXRp
b25MaXN0ZW5lcjsKKyAgICBSZWZQdHI8SFRNTEFub255bW91c0RpdkVsZW1lbnRJbXBsPiBtX2Rp
djsKICAgICAKICAgICBib29sIG1fZGlydHk7CiB9OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dEZpZWxkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0RmllbGQuY3BwCShyZXZpc2lvbiAxMzA4MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRGaWVsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDI1ICsyNywxMyBAQAogI2lu
Y2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnRJbXBsLmgiCiAj
aW5jbHVkZSAiZG9tX2VsZW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2lu
Y2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIAotdm9p
ZCBJbnB1dE11dGF0aW9uTGlzdGVuZXI6OmhhbmRsZUV2ZW50KEV2ZW50SW1wbCAqZXZlbnQsIGJv
b2wgaXNXaW5kb3dFdmVudCkKLXsKLSAgICBpZiAoIW1fcmVuZGVyVGV4dEZpZWxkKQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gRE9NQ2hhcmFjdGVyRGF0
YU1vZGlmaWVkRXZlbnQpCi0gICAgICAgIG1fcmVuZGVyVGV4dEZpZWxkLT5zdWJ0cmVlSGFzQ2hh
bmdlZCgpOwotfQotCiBSZW5kZXJUZXh0RmllbGQ6OlJlbmRlclRleHRGaWVsZChOb2RlSW1wbCog
bm9kZSkKLTpSZW5kZXJCbG9jayhub2RlKSwgbV9tdXRhdGlvbkxpc3RlbmVyKG5ldyBJbnB1dE11
dGF0aW9uTGlzdGVuZXIodGhpcykpLCBtX2RpcnR5KGZhbHNlKQorOlJlbmRlckJsb2NrKG5vZGUp
LCBtX2RpcnR5KGZhbHNlKQogewogfQogCkBAIC01Myw3ICs0MSw2IEBACiB7CiAgICAgLy8gVGhl
IHJlbmRlcmVyIGZvciB0aGUgZGl2IGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkIGJ5IGRlc3Ry
b3lMZWZ0b3ZlckNoaWxkcmVuCiAgICAgaWYgKG1fZGl2KSB7Ci0gICAgICAgIG1fZGl2LT5yZW1v
dmVFdmVudExpc3RlbmVyKERPTUNoYXJhY3RlckRhdGFNb2RpZmllZEV2ZW50LCBtX211dGF0aW9u
TGlzdGVuZXIuZ2V0KCksIGZhbHNlKTsKICAgICAgICAgbV9kaXYtPmRldGFjaCgpOwogICAgIH0K
IH0KQEAgLTg1LDEzICs3MiwyMSBAQAogewogICAgIGlmIChlbGVtZW50KCktPmhhc1RhZ05hbWUo
aW5wdXRUYWcpKSB7CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsKiBpbnB1dCA9IHN0YXRp
Y19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oZWxlbWVudCgpKTsKLSAgICAgICAgRE9NU3Ry
aW5nIHZhbHVlID0gaW5wdXQtPnZhbHVlKCk7CisgICAgICAgIERPTVN0cmluZyB2YWx1ZSA9IGlu
cHV0LT52YWx1ZSgpLmNvcHkoKTsKICAgICAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQogICAgICAg
ICAgICAgdmFsdWUgPSBET01TdHJpbmcoIiIpOworICAgICAgICBpbnQgbWwgPSBpbnB1dC0+bWF4
TGVuZ3RoKCk7CisgICAgICAgIGlmICggbWwgPD0gMCB8fCBtbCA+IDEwMjQgKQorICAgICAgICAg
ICAgbWwgPSAxMDI0OworICAgICAgICBib29sIHZhbHVlSGFzQ2hhbmdlZCA9IGZhbHNlOworICAg
ICAgICBpZiAoKGludCkgKHZhbHVlLmxlbmd0aCgpKSA+IG1sKSB7CisgICAgICAgICAgICB2YWx1
ZS50cnVuY2F0ZShtbCk7CisgICAgICAgICAgICB2YWx1ZUhhc0NoYW5nZWQgPSB0cnVlOworICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgaWYgKCFtX2RpdikgewogICAgICAgICAgICAg
Ly8gQ3JlYXRlIHRoZSBkaXYgYW5kIGdpdmUgaXQgYSBwYXJlbnQsIHJlbmRlcmVyLCBhbmQgc3R5
bGUKLSAgICAgICAgICAgIG1fZGl2ID0gbmV3IEhUTUxEaXZFbGVtZW50SW1wbChkb2N1bWVudCgp
KTsKKyAgICAgICAgICAgIG1fZGl2ID0gbmV3IEhUTUxBbm9ueW1vdXNEaXZFbGVtZW50SW1wbChk
b2N1bWVudCgpLCBlbGVtZW50KCkpOwogICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGRpdlJlbmRl
cmVyID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJCbG9jayhtX2Rpdi5nZXQoKSk7CiAgICAg
ICAgICAgICBtX2Rpdi0+c2V0UmVuZGVyZXIoZGl2UmVuZGVyZXIpOwogICAgICAgICAgICAgbV9k
aXYtPnNldEF0dGFjaGVkKCk7CkBAIC0xMTIsMTEgKzEwNywxMCBAQAogICAgICAgICAgICAgdGV4
dCA9IG5ldyBUZXh0SW1wbChkb2N1bWVudCgpLCB2YWx1ZS5pbXBsKCkpOwogICAgICAgICAgICAg
aW50IGV4Y2VwdGlvbiA9IDA7CiAgICAgICAgICAgICBtX2Rpdi0+YXBwZW5kQ2hpbGQodGV4dCwg
ZXhjZXB0aW9uKTsKLSAgICAgICAgICAgIG1fZGl2LT5hZGRFdmVudExpc3RlbmVyKERPTUNoYXJh
Y3RlckRhdGFNb2RpZmllZEV2ZW50LCBtX211dGF0aW9uTGlzdGVuZXIuZ2V0KCksIGZhbHNlKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFpbnB1dC0+dmFsdWVNYXRjaGVzUmVu
ZGVyZXIoKSkgewotICAgICAgICAgICAgRE9NU3RyaW5nIG9sZFRleHQgPSB0ZXh0LT5kYXRhKCk7
CisgICAgICAgICAgICBET01TdHJpbmcgb2xkVGV4dCA9IHRoaXMtPnRleHQoKTsKICAgICAgICAg
ICAgIHZhbHVlLnJlcGxhY2UoUUNoYXIoJ1xcJyksIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2wo
KSk7CiAgICAgICAgICAgICBpZiAodmFsdWUgIT0gb2xkVGV4dCkgewogICAgICAgICAgICAgICAg
IGludCBleGNlcHRpb24gPSAwOwpAQCAtMTI2LDYgKzEyMCw5IEBACiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpbnB1dC0+c2V0VmFsdWVNYXRjaGVzUmVuZGVyZXIoKTsKICAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlSGFzQ2hhbmdlZCkKKyAgICAgICAgICAgIGlucHV0
LT5zZXRWYWx1ZUZyb21SZW5kZXJlcih2YWx1ZSk7CiAgICAgfQogfQogCkBAIC0xNjcsMTIgKzE2
NCwxOSBAQAogdm9pZCBSZW5kZXJUZXh0RmllbGQ6OnN1YnRyZWVIYXNDaGFuZ2VkKCkKIHsKICAg
ICBIVE1MSW5wdXRFbGVtZW50SW1wbCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50SW1wbCo+KGVsZW1lbnQoKSk7Ci0gICAgaWYgKGlucHV0ICYmIG1fZGl2KSB7Ci0gICAgICAg
IGlucHV0LT5zZXRWYWx1ZUZyb21SZW5kZXJlcihtX2Rpdi0+dGV4dENvbnRlbnQoKSk7CisgICAg
aWYgKGlucHV0KSB7CisgICAgICAgIGlucHV0LT5zZXRWYWx1ZUZyb21SZW5kZXJlcih0ZXh0KCkp
OwogICAgICAgICBzZXRFZGl0ZWQodHJ1ZSk7CiAgICAgfQogfQogCitTdHJpbmcgUmVuZGVyVGV4
dEZpZWxkOjp0ZXh0KCkKK3sKKyAgICBpZiAobV9kaXYpCisgICAgICAgIHJldHVybiAobV9kaXYt
PnRleHRDb250ZW50KCkpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwogdm9pZCBSZW5kZXJU
ZXh0RmllbGQ6OmNhbGNNaW5NYXhXaWR0aCgpCiB7CiAgICAgUmVuZGVyQmxvY2s6OmNhbGNNaW5N
YXhXaWR0aCgpOwpJbmRleDogV2ViQ29yZS9kb20vZG9tMl9ldmVudHNpbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9kb20yX2V2ZW50c2ltcGwuY3BwCShyZXZpc2lvbiAxMzA4MikK
KysrIFdlYkNvcmUvZG9tL2RvbTJfZXZlbnRzaW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
NCw2ICsxMTQsMTEgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgRXZlbnRJbXBsOjpp
c0luc2VydFRleHRFdmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBib29s
IEV2ZW50SW1wbDo6c3RvcmVzUmVzdWx0QXNTdHJpbmcoKSBjb25zdAogewogICAgIHJldHVybiBm
YWxzZTsKQEAgLTY0OCw0ICs2NTMsMTYgQEAKICAgICBtX3Jlc3VsdCA9IHMuaW1wbCgpOwogfQog
CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbnNlcnRUZXh0RXZlbnRJbXBsOjpJbnNlcnRU
ZXh0RXZlbnRJbXBsKFN0cmluZyB0ZXh0KQorICAgIDogRXZlbnRJbXBsKGtodG1sSW5zZXJ0VGV4
dEV2ZW50LCBmYWxzZSwgdHJ1ZSksIG1fdGV4dCh0ZXh0KQorewogfQorCit2b2lkIEluc2VydFRl
eHRFdmVudEltcGw6OnNldFRleHQoU3RyaW5nIHRleHQpCit7CisgICAgbV90ZXh0ID0gdGV4dDsK
K30KKworfQpJbmRleDogV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL0V2ZW50TmFtZXMuaAkocmV2aXNpb24gMTMwODIpCisrKyBXZWJDb3JlL2RvbS9F
dmVudE5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDcgQEAKICAgICBtYWNybyhr
aHRtbERyYWdkcm9wKSBcCiAgICAgbWFjcm8oa2h0bWxFcnJvcikgXAogICAgIG1hY3JvKGtodG1s
SG9yaXpvbnRhbG1vdXNld2hlZWwpIFwKKyAgICBtYWNybyhraHRtbEluc2VydFRleHQpIFwKICAg
ICBtYWNybyhraHRtbE1vdmUpIFwKICAgICBtYWNybyhraHRtbE9yaWdjbGlja01vdXNldXApIFwK
ICAgICBcCkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlSW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL05vZGVJbXBsLmgJKHJldmlzaW9uIDEzMDgyKQorKysgV2ViQ29yZS9kb20vTm9kZUlt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw3IEBACiAgICAgdmlydHVhbCBib29s
IGlzVGV4dE5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c0NvbW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wg
aXNEb2N1bWVudE5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc0Fub255bW91c0RpdigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBpc0Js
b2NrRmxvdygpIGNvbnN0OwogICAgIGJvb2wgaXNCbG9ja0Zsb3dPckJsb2NrVGFibGUoKSBjb25z
dDsKICAgICAKSW5kZXg6IFdlYkNvcmUvZG9tL2RvbTJfZXZlbnRzaW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL2RvbTJfZXZlbnRzaW1wbC5oCShyZXZpc2lvbiAxMzA4MikKKysrIFdl
YkNvcmUvZG9tL2RvbTJfZXZlbnRzaW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3
IEBACiAgICAgdmlydHVhbCBib29sIGlzRHJhZ0V2ZW50KCkgY29uc3Q7IC8vIGEgc3Vic2V0IG9m
IG1vdXNlIGV2ZW50cwogICAgIHZpcnR1YWwgYm9vbCBpc0NsaXBib2FyZEV2ZW50KCkgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIGlzV2hlZWxFdmVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBpc0luc2VydFRleHRFdmVudCgpIGNvbnN0OwogCiAgICAgYm9vbCBwcm9wYWdhdGlvblN0b3Bw
ZWQoKSBjb25zdCB7IHJldHVybiBtX3Byb3BhZ2F0aW9uU3RvcHBlZDsgfQogICAgIGJvb2wgZGVm
YXVsdFByZXZlbnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVmYXVsdFByZXZlbnRlZDsgfQpAQCAt
NDM0LDYgKzQzNSwyMCBAQAogICAgIFJlZlB0cjxET01TdHJpbmdJbXBsPiBtX3Jlc3VsdDsKIH07
CiAKK2NsYXNzIEluc2VydFRleHRFdmVudEltcGwgOiBwdWJsaWMgRXZlbnRJbXBsCit7CitwdWJs
aWM6CisgICAgSW5zZXJ0VGV4dEV2ZW50SW1wbChTdHJpbmcpOworCisgICAgdmlydHVhbCBib29s
IGlzSW5zZXJ0VGV4dEV2ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
dm9pZCBzZXRUZXh0KFN0cmluZyk7CisgICAgCisgICAgU3RyaW5nIHRleHQoKSBjb25zdCB7IHJl
dHVybiBtX3RleHQ7IH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV90ZXh0OworfTsKKwogfSAv
LyBuYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEzMDgyKQorKysgV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTcgKzMyLDIx
IEBACiAjaW5jbHVkZSAiRWRpdGluZ1RleHRJbXBsLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJIVE1MRWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJodG1sX2Jsb2NraW1wbC5oIgog
I2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogI2luY2x1ZGUgImNzc19jb21wdXRlZHN0eWxl
LmgiCiAjaW5jbHVkZSAiY3NzX3ZhbHVlaW1wbC5oIgogI2luY2x1ZGUgImNzc3Byb3BlcnRpZXMu
aCIKKyNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIKICNpbmNsdWRlICJkb20yX3JhbmdlaW1w
bC5oIgogI2luY2x1ZGUgImRvbV9wb3NpdGlvbi5oIgogI2luY2x1ZGUgImh0bWxfaW50ZXJjaGFu
Z2UuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgImh0bWxuYW1lcy5oIgog
I2luY2x1ZGUgInJlbmRlcl9vYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0RmllbGQuaCIK
ICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCisjaW5jbHVkZSAidmlzaWJsZV90ZXh0LmgiCiAj
aW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0xMTgsNiArMTIyLDkgQEAKICAgICAgICAgY29tcHV0ZVN0eWxlc1VzaW5nVGVzdFJlbmRlcmlu
Zyhob2xkZXIuZ2V0KCkpOwogICAgIHJlbW92ZVVucmVuZGVyZWROb2Rlc1VzaW5nVGVzdFJlbmRl
cmluZyhob2xkZXIuZ2V0KCkpOwogICAgIG1faGFzTW9yZVRoYW5PbmVCbG9jayA9IGNvdW50UmVu
ZGVyZWRCbG9ja3MoaG9sZGVyLmdldCgpKSA+IDE7CisgICAgUmFuZ2VJbXBsKiByYW5nZSA9IG5l
dyBSYW5nZUltcGwoaG9sZGVyLT5nZXREb2N1bWVudCgpLCBob2xkZXItPmZpcnN0Q2hpbGQoKSwg
MCwgaG9sZGVyLT5sYXN0Q2hpbGQoKSwgbWF4RGVlcE9mZnNldChob2xkZXItPmxhc3RDaGlsZCgp
KSk7CisgICAgbV90ZXh0ID0gcGxhaW5UZXh0KHJhbmdlKTsKKyAgICBkZWxldGUgcmFuZ2U7CiAg
ICAgcmVzdG9yZVRlc3RSZW5kZXJpbmdOb2Rlc1RvRnJhZ21lbnQoaG9sZGVyLmdldCgpKTsKICAg
ICByZW1vdmVOb2RlKGhvbGRlcik7CiAgICAgcmVtb3ZlU3R5bGVOb2RlcygpOwpAQCAtNDcwLDcg
KzQ3NywyMSBAQAogICAgIGJvb2wgc3RhcnRBdEJsb2NrQm91bmRhcnkgPSBzdGFydEF0U3RhcnRP
ZkJsb2NrIHx8IHN0YXJ0QXRFbmRPZkJsb2NrOwogICAgIE5vZGVJbXBsICpzdGFydEJsb2NrID0g
c2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7CiAg
ICAgTm9kZUltcGwgKmVuZEJsb2NrID0gc2VsZWN0aW9uLmVuZCgpLm5vZGUoKS0+ZW5jbG9zaW5n
QmxvY2tGbG93RWxlbWVudCgpOwotCisgICAgCisgICAgaWYgKHN0YXJ0QmxvY2stPnJvb3RFZGl0
YWJsZUVsZW1lbnQoKSAmJiBzdGFydEJsb2NrLT5yb290RWRpdGFibGVFbGVtZW50KCktPmlzQW5v
bnltb3VzRGl2KCkpIHsKKyAgICAgICAgLy8gU2VuZCBJbnNlcnRUZXh0RXZlbnQgYW5kIHVwZGF0
ZSB0ZXh0IGlmIG5lY2Vzc2FyeQorICAgICAgICBpbnQgZWMgPSAwOworICAgICAgICBSZWZQdHI8
RXZlbnRJbXBsPiBldnQgPSBuZXcgSW5zZXJ0VGV4dEV2ZW50SW1wbChtX2ZyYWdtZW50LnRleHQo
KSk7CisgICAgICAgIFN0cmluZyBvbGRUZXh0ID0gbV9mcmFnbWVudC50ZXh0KCkuY29weSgpOwor
ICAgICAgICBIVE1MQW5vbnltb3VzRGl2RWxlbWVudEltcGwgKmRpdiA9IHN0YXRpY19jYXN0PEhU
TUxBbm9ueW1vdXNEaXZFbGVtZW50SW1wbCo+KHN0YXJ0QmxvY2stPnJvb3RFZGl0YWJsZUVsZW1l
bnQoKSk7CisgICAgICAgIGRpdi0+c2hhZG93UGFyZW50Tm9kZSgpLT5kaXNwYXRjaEV2ZW50KGV2
dCwgZWMsIHRydWUpOworICAgICAgICBTdHJpbmcgdGV4dCA9IHN0YXRpY19jYXN0PEluc2VydFRl
eHRFdmVudEltcGwqPihldnQuZ2V0KCkpLT50ZXh0KCk7CisgICAgICAgIGlmIChvbGRUZXh0ICE9
IHRleHQpIHsKKyAgICAgICAgICAgIG1fZnJhZ21lbnQucm9vdCgpLT5yZW1vdmVDaGlsZHJlbigp
OworICAgICAgICAgICAgbV9mcmFnbWVudC5yb290KCktPmFwcGVuZENoaWxkKG5ldyBUZXh0SW1w
bChtX2ZyYWdtZW50LnJvb3QoKS0+Z2V0RG9jdW1lbnQoKSwgdGV4dCksIGVjKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAgICAgCiAgICAgLy8gZGVjaWRlIHdoZXRoZXIgdG8gbGF0ZXIgbWVyZ2Ug
Y29udGVudCBpbnRvIHRoZSBzdGFydEJsb2NrCiAgICAgYm9vbCBtZXJnZVN0YXJ0ID0gZmFsc2U7
CiAgICAgaWYgKHN0YXJ0QmxvY2sgPT0gc3RhcnRCbG9jay0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
ICYmIHN0YXJ0QXRTdGFydE9mQmxvY2sgJiYgc3RhcnRBdEVuZE9mQmxvY2spIHsKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEzMDgyKQorKysgV2ViQ29yZS9lZGl0
aW5nL1R5cGluZ0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw5IEBACiAK
ICNpbmNsdWRlICJCcmVha0Jsb2NrcXVvdGVDb21tYW5kLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRJ
bXBsLmgiCisjaW5jbHVkZSAiZG9tMl9ldmVudHNpbXBsLmgiCisjaW5jbHVkZSAiaHRtbF9ibG9j
a2ltcGwuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0RmllbGQuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkluc2VydExpbmVCcmVha0NvbW1hbmQuaCIKICNpbmNsdWRlICJJbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmgiCkBAIC05NiwxMyArOTksMjYgQEAKICAgICBGcmFt
ZSAqZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwogICAgIAor
ICAgIFN0cmluZyBuZXdUZXh0ID0gdGV4dC5jb3B5KCk7CisgICAgTm9kZUltcGwqIHN0YXJ0Tm9k
ZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zdGFydCgpLm5vZGUoKTsKKyAgICBpbnQgZXhjZXB0aW9u
Q29kZSA9IDA7CisgICAgaWYgKHN0YXJ0Tm9kZSAmJiBzdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKSAmJiBzdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKS0+aXNBbm9ueW1vdXNE
aXYoKSkgeworICAgICAgICAvLyBTZW5kIEluc2VydFRleHRFdmVudCBhbmQgdXBkYXRlIHRleHQg
aWYgbmVjZXNzYXJ5CisgICAgICAgIFJlZlB0cjxFdmVudEltcGw+IGV2dCA9IG5ldyBJbnNlcnRU
ZXh0RXZlbnRJbXBsKG5ld1RleHQpOworICAgICAgICBIVE1MQW5vbnltb3VzRGl2RWxlbWVudElt
cGwgKmRpdiA9IHN0YXRpY19jYXN0PEhUTUxBbm9ueW1vdXNEaXZFbGVtZW50SW1wbCo+KHN0YXJ0
Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKTsKKyAgICAgICAgZGl2LT5zaGFkb3dQYXJlbnRO
b2RlKCktPmRpc3BhdGNoRXZlbnQoZXZ0LCBleGNlcHRpb25Db2RlLCB0cnVlKTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKG5ld1RleHQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCiAg
ICAgRWRpdENvbW1hbmRQdHIgbGFzdEVkaXRDb21tYW5kID0gZnJhbWUtPmxhc3RFZGl0Q29tbWFu
ZCgpOwogICAgIGlmIChpc09wZW5Gb3JNb3JlVHlwaW5nQ29tbWFuZChsYXN0RWRpdENvbW1hbmQp
KSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQgKj4obGFzdEVkaXRDb21tYW5k
LmdldCgpKS0+aW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RJbnNlcnRlZFRleHQpOworICAgICAgICBz
dGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kICo+KGxhc3RFZGl0Q29tbWFuZC5nZXQoKSktPmluc2Vy
dFRleHQobmV3VGV4dCwgc2VsZWN0SW5zZXJ0ZWRUZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIEVkaXRDb21tYW5kUHRyIGNtZChuZXcgVHlwaW5nQ29tbWFuZChkb2N1bWVudCwg
SW5zZXJ0VGV4dCwgdGV4dCwgc2VsZWN0SW5zZXJ0ZWRUZXh0KSk7CisgICAgRWRpdENvbW1hbmRQ
dHIgY21kKG5ldyBUeXBpbmdDb21tYW5kKGRvY3VtZW50LCBJbnNlcnRUZXh0LCBuZXdUZXh0LCBz
ZWxlY3RJbnNlcnRlZFRleHQpKTsKICAgICBjbWQuYXBwbHkoKTsKIH0KIApJbmRleDogV2ViQ29y
ZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgJKHJldmlzaW9uIDEzMDgyKQorKysg
V2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgJKHdvcmtpbmcgY29weSkK
QEAgLTcxLDEyICs3MSwxMyBAQAogICAgIGJvb2wgaGFzTW9yZVRoYW5PbmVCbG9jaygpIGNvbnN0
IHsgcmV0dXJuIG1faGFzTW9yZVRoYW5PbmVCbG9jazsgfQogICAgIGJvb2wgaGFzSW50ZXJjaGFu
Z2VOZXdsaW5lQXRTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzSW50ZXJjaGFuZ2VOZXdsaW5l
QXRTdGFydDsgfQogICAgIGJvb2wgaGFzSW50ZXJjaGFuZ2VOZXdsaW5lQXRFbmQoKSBjb25zdCB7
IHJldHVybiBtX2hhc0ludGVyY2hhbmdlTmV3bGluZUF0RW5kOyB9Ci0KKyAgICBTdHJpbmcgdGV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsgfQorICAgIAogcHJpdmF0ZToKICAgICAvLyBubyBj
b3B5IGNvbnN0cnVjdGlvbiBvciBhc3NpZ25tZW50CiAgICAgUmVwbGFjZW1lbnRGcmFnbWVudChj
b25zdCBSZXBsYWNlbWVudEZyYWdtZW50ICYpOwogICAgIFJlcGxhY2VtZW50RnJhZ21lbnQgJm9w
ZXJhdG9yPShjb25zdCBSZXBsYWNlbWVudEZyYWdtZW50ICYpOwotICAgIAorCiAgICAgc3RhdGlj
IGJvb2wgaXNJbnRlcmNoYW5nZU5ld2xpbmVOb2RlKGNvbnN0IE5vZGVJbXBsICopOwogICAgIHN0
YXRpYyBib29sIGlzSW50ZXJjaGFuZ2VDb252ZXJ0ZWRTcGFjZVNwYW4oY29uc3QgTm9kZUltcGwg
Kik7CiAKQEAgLTEwMSw2ICsxMDIsNyBAQAogICAgIGJvb2wgbV9oYXNJbnRlcmNoYW5nZU5ld2xp
bmVBdFN0YXJ0OwogICAgIGJvb2wgbV9oYXNJbnRlcmNoYW5nZU5ld2xpbmVBdEVuZDsKICAgICBi
b29sIG1faGFzTW9yZVRoYW5PbmVCbG9jazsKKyAgICBTdHJpbmcgbV90ZXh0OwogfTsKIAogY2xh
c3MgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQK
SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAkocmV2aXNpb24gMTMwODIpCisrKyBXZWJDb3Jl
L2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBA
CiAjaW5jbHVkZSAiY3NzX3ZhbHVlaW1wbC5oIgogI2luY2x1ZGUgImRvbV9wb3NpdGlvbi5oIgog
I2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCisjaW5jbHVkZSAiaHRtbF9ibG9ja2ltcGwuaCIKKyNp
bmNsdWRlICJSZW5kZXJUZXh0RmllbGQuaCIKICNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25z
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIxNyw2ICsyMTksMTUgQEAKICAgICAgICAg
RWRpdENvbW1hbmRQdHIgY21kKHRoaXMpOwogICAgICAgICBmcmFtZS0+YXBwbGllZEVkaXRpbmco
Y21kKTsKICAgICB9CisgICAgCisgICAgTm9kZUltcGwqIHN0YXJ0Tm9kZSA9IGVuZGluZ1NlbGVj
dGlvbigpLnN0YXJ0KCkubm9kZSgpOworICAgIGlmIChzdGFydE5vZGUgJiYgc3RhcnROb2RlLT5y
b290RWRpdGFibGVFbGVtZW50KCkgJiYgc3RhcnROb2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkt
PmlzQW5vbnltb3VzRGl2KCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGFub255bW91cyBkaXYgaGFz
IGNoYW5nZWQsIHVwZGF0ZSB0aGUgc2hhZG93UGFyZW50Tm9kZQorICAgICAgICBIVE1MQW5vbnlt
b3VzRGl2RWxlbWVudEltcGwgKmRpdiA9IHN0YXRpY19jYXN0PEhUTUxBbm9ueW1vdXNEaXZFbGVt
ZW50SW1wbCo+KHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKTsKKyAgICAgICAgaWYg
KGRpdi0+c2hhZG93UGFyZW50Tm9kZSgpICYmIGRpdi0+c2hhZG93UGFyZW50Tm9kZSgpLT5yZW5k
ZXJlcigpICYmIAorICAgICAgICAgICAgZGl2LT5zaGFkb3dQYXJlbnROb2RlKCktPnJlbmRlcmVy
KCktPmlzVGV4dEZpZWxkKCkgJiYgZGl2LT5zaGFkb3dQYXJlbnROb2RlKCktPnJlbmRlcmVyKCkt
PnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBUZXh0RmllbGRBcHBlYXJhbmNlKQorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dEZpZWxkKj4oZGl2LT5zaGFkb3dQYXJlbnROb2RlKCkt
PnJlbmRlcmVyKCkpLT5zdWJ0cmVlSGFzQ2hhbmdlZCgpOworICAgIH0KIH0KIAogdm9pZCBFZGl0
Q29tbWFuZDo6dW5hcHBseSgpCkBAIC0yMzgsNiArMjQ5LDE1IEBACiAgICAgICAgIEVkaXRDb21t
YW5kUHRyIGNtZCh0aGlzKTsKICAgICAgICAgZnJhbWUtPnVuYXBwbGllZEVkaXRpbmcoY21kKTsK
ICAgICB9CisgICAgCisgICAgTm9kZUltcGwqIHN0YXJ0Tm9kZSA9IGVuZGluZ1NlbGVjdGlvbigp
LnN0YXJ0KCkubm9kZSgpOworICAgIGlmIChzdGFydE5vZGUgJiYgc3RhcnROb2RlLT5yb290RWRp
dGFibGVFbGVtZW50KCkgJiYgc3RhcnROb2RlLT5yb290RWRpdGFibGVFbGVtZW50KCktPmlzQW5v
bnltb3VzRGl2KCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGFub255bW91cyBkaXYgaGFzIGNoYW5n
ZWQsIHVwZGF0ZSB0aGUgc2hhZG93UGFyZW50Tm9kZQorICAgICAgICBIVE1MQW5vbnltb3VzRGl2
RWxlbWVudEltcGwgKmRpdiA9IHN0YXRpY19jYXN0PEhUTUxBbm9ueW1vdXNEaXZFbGVtZW50SW1w
bCo+KHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKTsKKyAgICAgICAgaWYgKGRpdi0+
c2hhZG93UGFyZW50Tm9kZSgpICYmIGRpdi0+c2hhZG93UGFyZW50Tm9kZSgpLT5yZW5kZXJlcigp
ICYmIAorICAgICAgICAgICAgZGl2LT5zaGFkb3dQYXJlbnROb2RlKCktPnJlbmRlcmVyKCktPmlz
VGV4dEZpZWxkKCkgJiYgZGl2LT5zaGFkb3dQYXJlbnROb2RlKCktPnJlbmRlcmVyKCktPnN0eWxl
KCktPmFwcGVhcmFuY2UoKSA9PSBUZXh0RmllbGRBcHBlYXJhbmNlKQorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8UmVuZGVyVGV4dEZpZWxkKj4oZGl2LT5zaGFkb3dQYXJlbnROb2RlKCktPnJlbmRl
cmVyKCkpLT5zdWJ0cmVlSGFzQ2hhbmdlZCgpOworICAgIH0KIH0KIAogdm9pZCBFZGl0Q29tbWFu
ZDo6cmVhcHBseSgpCkBAIC0yNTksNiArMjc5LDE1IEBACiAgICAgICAgIEVkaXRDb21tYW5kUHRy
IGNtZCh0aGlzKTsKICAgICAgICAgZnJhbWUtPnJlYXBwbGllZEVkaXRpbmcoY21kKTsKICAgICB9
CisgICAgCisgICAgTm9kZUltcGwqIHN0YXJ0Tm9kZSA9IGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0
KCkubm9kZSgpOworICAgIGlmIChzdGFydE5vZGUgJiYgc3RhcnROb2RlLT5yb290RWRpdGFibGVF
bGVtZW50KCkgJiYgc3RhcnROb2RlLT5yb290RWRpdGFibGVFbGVtZW50KCktPmlzQW5vbnltb3Vz
RGl2KCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGFub255bW91cyBkaXYgaGFzIGNoYW5nZWQsIHVw
ZGF0ZSB0aGUgc2hhZG93UGFyZW50Tm9kZQorICAgICAgICBIVE1MQW5vbnltb3VzRGl2RWxlbWVu
dEltcGwgKmRpdiA9IHN0YXRpY19jYXN0PEhUTUxBbm9ueW1vdXNEaXZFbGVtZW50SW1wbCo+KHN0
YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKTsKKyAgICAgICAgaWYgKGRpdi0+c2hhZG93
UGFyZW50Tm9kZSgpICYmIGRpdi0+c2hhZG93UGFyZW50Tm9kZSgpLT5yZW5kZXJlcigpICYmIAor
ICAgICAgICAgICAgZGl2LT5zaGFkb3dQYXJlbnROb2RlKCktPnJlbmRlcmVyKCktPmlzVGV4dEZp
ZWxkKCkgJiYgZGl2LT5zaGFkb3dQYXJlbnROb2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCktPmFw
cGVhcmFuY2UoKSA9PSBUZXh0RmllbGRBcHBlYXJhbmNlKQorICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8UmVuZGVyVGV4dEZpZWxkKj4oZGl2LT5zaGFkb3dQYXJlbnROb2RlKCktPnJlbmRlcmVyKCkp
LT5zdWJ0cmVlSGFzQ2hhbmdlZCgpOworICAgIH0KIH0KIAogdm9pZCBFZGl0Q29tbWFuZDo6ZG9S
ZWFwcGx5KCkKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxMzEwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMDYtMDMtMDIgIEFkZWxlIFBldGVyc29uICA8YWRl
bGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIC0gRml4ZWQgaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNn
aT9pZD02OTg3CisgICAgICAgIEltcGxlbWVudCBtYXhsZW5ndGggZm9yIG5ldyB0ZXh0IGZpZWxk
cworCisgICAgICAgIFRlc3QgYWRkZWQ6CisgICAgICAgICogZmFzdC9mb3Jtcy9pbnB1dC1hcHBl
YXJhbmNlLW1heGxlbmd0aC5odG1sCisKKyAgICAgICAgKiBraHRtbC9odG1sL0hUTUxJbnB1dEVs
ZW1lbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnRJbXBsOjpk
ZWZhdWx0RXZlbnRIYW5kbGVyKTogQWRkZWQgY2FzZSB0byB1c2UgdGhlIEluc2VydFRleHRFdmVu
dCB0byBjaGVjayBmb3IgbWF4bGVuZ3RoLgorCisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlbWVudEZyYWdtZW50
OjpSZXBsYWNlbWVudEZyYWdtZW50KTogQWZ0ZXIgZG9pbmcgYSB0ZXN0IGluc2VydCBvZiB0aGUg
ZnJhZ21lbnQsIHdlIHN0b3JlIHRoZSB0ZXh0IHRvIHVzZSBsYXRlci4KKyAgICAgICAgKFdlYkNv
cmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KTogSWYgd2UncmUgaW5zZXJ0aW5n
IGluIGFuIGFub255bW91cyBkaXYsIGRpc3BhdGNoIHRoZSBJbnNlcnRUZXh0RXZlbnQgdG8gdGhl
IGlucHV0IGVsZW1lbnQuCisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5oOiBBZGRlZCBtX3RleHQgZmllbGQuCisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlbWVudEZy
YWdtZW50Ojp0ZXh0KTogQWRkZWQgbWV0aG9kIHRvIHJldHVybiBtX3RleHQuCisgICAgICAgICog
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1h
bmQ6Omluc2VydFRleHQpOiBJZiB3ZSdyZSBpbnNlcnRpbmcgaW4gYW4gYW5vbnltb3VzIGRpdiwg
ZGlzcGF0Y2ggdGhlIEluc2VydFRleHRFdmVudCB0byB0aGUgaW5wdXQgZWxlbWVudC4KKyAgICAg
ICAgKiBlZGl0aW5nL0VkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21t
YW5kOjphcHBseSk6IElmIHdlJ3ZlIGp1c3QgYXBwbGllZCBhIGNvbW1hbmQgaW4gYW4gYW5vbnlt
b3VzIGRpdiwgCisgICAgICAgICB0aGVuIGNhbGwgc3VidHJlZUhhc0NoYW5nZWQgdG8gbGV0IHRo
ZSByZW5kZXJlciB1cGRhdGUgdGhlIGlucHV0IGVsZW1lbnQncyB2YWx1ZSBhdHRyaWJ1dGUuCisg
ICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6dW5hcHBseSk6IGRpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6RWRpdENvbW1hbmQ6OnJlYXBwbHkpOiBkaXR0by4KKworICAgICAgICAqIGtodG1s
L2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFub255bW91
c0RpdkVsZW1lbnRJbXBsOjpIVE1MQW5vbnltb3VzRGl2RWxlbWVudEltcGwpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxBbm9ueW1vdXNEaXZFbGVtZW50SW1wbDo6fkhUTUxBbm9ueW1v
dXNEaXZFbGVtZW50SW1wbCk6IEFkZGVkLgorICAgICAgICAqIGtodG1sL2h0bWwvaHRtbF9ibG9j
a2ltcGwuaDogQWRkZWQgSFRNTEFub255bW91c0RpdkVsZW1lbnRJbXBsIGNsYXNzIHRvIHN0b3Jl
IHBvaW50ZXIgdG8gc2hhZG93UGFyZW50Tm9kZS4KKyAgICAgICAgKERPTTo6SFRNTEFub255bW91
c0RpdkVsZW1lbnRJbXBsOjppc0Fub255bW91c0Rpdik6IEFkZGVkLgorICAgICAgICAoRE9NOjpI
VE1MQW5vbnltb3VzRGl2RWxlbWVudEltcGw6OnNoYWRvd1BhcmVudE5vZGUpOiBBZGRlZC4KKyAg
ICAgICAgKERPTTo6SFRNTEFub255bW91c0RpdkVsZW1lbnRJbXBsOjpzZXRTaGFkb3dQYXJlbnRO
b2RlKTogQWRkZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRGaWVsZC5jcHA6IFJl
bW92ZWQgSW5wdXRNdXRhdGlvbkxpc3RlbmVyIHNpbmNlIHN1YnRyZWVIYXNDaGFuZ2VkIGlzIG5v
dyBjYWxsZWQgZnJvbSB0aGUgZWRpdGluZyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dEZpZWxkOjp+UmVuZGVyVGV4dEZpZWxkKTogcmVtb3ZlZCBldmVudCBsaXN0ZW5lciBjb2Rl
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dEZpZWxkOjp1cGRhdGVGcm9tRWxlbWVudCk6
IGRpdHRvLiAgQW5kIGNyZWF0ZXMgSFRNTEFub255bW91c0RpdkVsZW1lbnRJbXBsLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dEZpZWxkOjpzdWJ0cmVlSGFzQ2hhbmdlZCk6IGNhbGxzIG5l
dyB0ZXh0KCkgbWV0aG9kLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dEZpZWxkOjp0ZXh0
KTogY3JlYXRlZCB0byBnZXQgYSBTdHJpbmcgb2YgYWxsIHRleHQgaW4gdGhlIFJlbmRlclRleHRG
aWVsZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dEZpZWxkLmg6IFJlbW92ZWQgSW5w
dXRNdXRhdGlvbkxpc3RlbmVyIGNsYXNzLgorCisgICAgICAgICogZG9tL0V2ZW50TmFtZXMuaDog
QWRkZWQga2h0bWxJbnNlcnRUZXh0LgorICAgICAgICAqIGRvbS9Ob2RlSW1wbC5oOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZUltcGw6OmlzQW5vbnltb3VzRGl2KTogQWRkZWQuCisgICAgICAgICog
ZG9tL2RvbTJfZXZlbnRzaW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEltcGw6Omlz
SW5zZXJ0VGV4dEV2ZW50KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0RXZl
bnRJbXBsOjpJbnNlcnRUZXh0RXZlbnRJbXBsKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bnNlcnRUZXh0RXZlbnRJbXBsOjpzZXRUZXh0KTogQWRkZWQuCisgICAgICAgICogZG9tL2RvbTJf
ZXZlbnRzaW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4dEV2ZW50SW1wbDo6aXNJ
bnNlcnRUZXh0RXZlbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc2VydFRleHRFdmVu
dEltcGw6OnRleHQpOiBBZGRlZC4KKwogMjAwNi0wMy0wMiAgSnVzdGluIEdhcmNpYSAgPGp1c3Rp
bi5nYXJjaWFAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IGVyaWMK
</data>
<flag name="review"
          id="1752"
          type_id="1"
          status="-"
          setter="justin.garcia"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6834</attachid>
            <date>2006-03-03 16:14:50 -0800</date>
            <delta_ts>2006-03-05 15:02:56 -0800</delta_ts>
            <desc>new patch to address Justin&apos;s comments</desc>
            <filename>maxlength_3_3_1.txt</filename>
            <type>text/plain</type>
            <size>27303</size>
            <attacher name="Adele Peterson">adele</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDEzMTA2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDYtMDMtMDIgIEFkZWxlIFBldGVyc29uICA8
YWRlbGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3QgZm9yOgorICAgICAgICBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5v
cmcvc2hvd19idWcuY2dpP2lkPTY5ODcKKyAgICAgICAgSW1wbGVtZW50IG1heGxlbmd0aCBmb3Ig
bmV3IHRleHQgZmllbGRzCisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL2lucHV0LWFwcGVhcmFuY2Ut
bWF4bGVuZ3RoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9pbnB1
dC1hcHBlYXJhbmNlLW1heGxlbmd0aC5odG1sOiBBZGRlZC4KKwogMjAwNi0wMy0wMiAgQW5kcmV3
IFdlbGxpbmd0b24gIDxwcm90b25Ad2lyZXRhcHBlZC5uZXQ+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4sIGxhbmRlZCBieSBCZXRoLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9p
bnB1dC1hcHBlYXJhbmNlLW1heGxlbmd0aC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnB1dC1hcHBlYXJhbmNlLW1heGxlbmd0aC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2lucHV0LWFwcGVhcmFu
Y2UtbWF4bGVuZ3RoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAor
RURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZToobnVsbCkgdG9E
T01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBESVYgdG8gNSBvZiAjdGV4dCA+IERJViBh
ZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxT
RQorRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlk
Q2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFu
Z2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCB0byAzIG9mICN0ZXh0IHRv
RE9NUmFuZ2U6cmFuZ2UgZnJvbSA0IG9mICN0ZXh0ID4gRElWIHRvIDQgb2YgI3RleHQgPiBESVYg
YWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFM
U0UKK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0Rp
ZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgorRURJVElORyBERUxFR0FURTogd2ViVmlld0Rp
ZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiBz
aG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gNCBvZiAjdGV4dCA+IERJViB0
byA0IG9mICN0ZXh0ID4gRElWIHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSA1IG9mICN0ZXh0ID4gRElW
IHRvIDUgb2YgI3RleHQgPiBESVYgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJl
YW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFu
Z2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgorRURJVElO
RyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9u
CitUaGlzIHRlc3QgY2hhbmdlcyB0aGUgdmFsdWUgb2YgdGhlIHRleHQgZmllbGQgYnkgc2ltdWxh
dGluZyB0eXBpbmcsIGFuZCB0aGVuIGdldHMgdGhlIHZhbHVlLiAKKworVGVzdCAxIFBhc3NlZC4g
TWF4bGVuZ3RoIHdvcmtzIGZvciBkZWZhdWx0IHZhbHVlLiBUZXN0IDIgUGFzc2VkLiBNYXhsZW5n
dGggd29ya3MgZm9yIGluc2VydGVkIHRleHQuCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9y
bXMvaW5wdXQtYXBwZWFyYW5jZS1tYXhsZW5ndGguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL2lucHV0LWFwcGVhcmFuY2UtbWF4bGVuZ3RoLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2lucHV0LWFwcGVhcmFuY2UtbWF4bGVuZ3Ro
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDMgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0PgorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
c3AnKS5mb2N1cygpOworICAgIAorICAgIHZhciByZXMgPSAiIjsKKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICB9CisgICAgCisgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdz
cCcpLnZhbHVlID09ICIxMjM0NSIpIHsKKyAgICAgICAgcmVzKz0gIlRlc3QgMSBQYXNzZWQuICBN
YXhsZW5ndGggd29ya3MgZm9yIGRlZmF1bHQgdmFsdWUuXG4iOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHJlcys9ICJUZXN0IDEgRmFpbGVkLiAgTWF4bGVuZ3RoIGRvZXMgbm90IHdvcmsgZm9yIGRl
ZmF1bHQgdmFsdWUuXG4iOworICAgIH0KKyAgICAKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnc3AnKS52YWx1ZSA9ICIxMjMiOworICAgIAorICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJJ
bnNlcnRUZXh0IiwgZmFsc2UsICdhYmNkJyk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoIklu
c2VydFRleHQiLCBmYWxzZSwgJ2VmZ2hpJyk7CisgICAgCisgICAgaWYgKGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdzcCcpLnZhbHVlID09ICJhYmNkZSIpIHsKKyAgICAgICAgcmVzKz0gIlRlc3Qg
MiBQYXNzZWQuICBNYXhsZW5ndGggd29ya3MgZm9yIGluc2VydGVkIHRleHQuXG4iOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHJlcys9ICJUZXN0IDIgRmFpbGVkLiAgTWF4bGVuZ3RoIGRvZXMgbm90
IHdvcmsgZm9yIGluc2VydGVkIHRleHQuXG4iOworICAgIH0KKyAgICAKKyAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgncmVzdWx0JykuaW5uZXJIVE1MID0gcmVzOworfQorCis8L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5IG9ubG9hZD0idGVzdCgpIj4KK1RoaXMgdGVzdCBjaGFuZ2VzIHRoZSB2
YWx1ZSBvZiB0aGUgdGV4dCBmaWVsZCBieSBzaW11bGF0aW5nIHR5cGluZywgYW5kIHRoZW4gZ2V0
cyB0aGUgdmFsdWUuCis8YnI+PGJyPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJzcCIgc3R5bGU9
Ii1raHRtbC1hcHBlYXJhbmNlOnRleHRmaWVsZCIgbWF4bGVuZ3RoPTUgdmFsdWU9IjEyMzQ1NiI+
PC9pbnB1dD4KKzxkaXYgaWQ9InJlc3VsdCI+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9raHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAkocmV2aXNpb24gMTMwODIpCisr
KyBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSwxMSArMjksMTcgQEAKIAogI2luY2x1ZGUgImNzc3Byb3BlcnRpZXMuaCIKICNpbmNsdWRl
ICJjc3N2YWx1ZXMuaCIKKyNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIKKyNpbmNsdWRlICJF
dmVudE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudEltcGwuaCIKICNpbmNsdWRl
ICJodG1sbmFtZXMuaCIKKyNpbmNsdWRlICJyZW5kZXJfb2JqZWN0LmgiCisjaW5jbHVkZSAiUmVu
ZGVyVGV4dEZpZWxkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogCiBIVE1MQmxvY2txdW90
ZUVsZW1lbnRJbXBsOjpIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsKERvY3VtZW50SW1wbCAqZG9j
KQogICAgIDogSFRNTEVsZW1lbnRJbXBsKGJsb2NrcXVvdGVUYWcsIGRvYykKQEAgLTEwMiw2ICsx
MDgsMzIgQEAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitIVE1MQW5vbnltb3VzRGl2RWxlbWVu
dEltcGw6OkhUTUxBbm9ueW1vdXNEaXZFbGVtZW50SW1wbChEb2N1bWVudEltcGwgKmRvYywgTm9k
ZUltcGwgKnNoYWRvd1BhcmVudCkKKyAgICA6IEhUTUxEaXZFbGVtZW50SW1wbChkb2MpLCBtX3No
YWRvd1BhcmVudChzaGFkb3dQYXJlbnQpCit7Cit9CisKK0hUTUxBbm9ueW1vdXNEaXZFbGVtZW50
SW1wbDo6fkhUTUxBbm9ueW1vdXNEaXZFbGVtZW50SW1wbCgpCit7Cit9CisKK3ZvaWQgSFRNTEFu
b255bW91c0RpdkVsZW1lbnRJbXBsOjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50SW1wbCAqZXZ0
KQoreworICAgIGlmIChzaGFkb3dQYXJlbnROb2RlKCkgJiYgc2hhZG93UGFyZW50Tm9kZSgpLT5y
ZW5kZXJlcigpICYmIHNoYWRvd1BhcmVudE5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUZXh0RmllbGQo
KSkgeworICAgICAgICBpZiAoZXZ0LT50eXBlKCkgPT0ga2h0bWxCZWZvcmVJbnNlcnRUZXh0RXZl
bnQgJiYgZXZ0LT5pc0luc2VydFRleHRFdmVudCgpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudEltcGwqPihzaGFkb3dQYXJlbnROb2RlKCkpLT5kZWZhdWx0RXZlbnRI
YW5kbGVyKGV2dCk7CisKKyAgICAgICAgaWYgKGV2dC0+dHlwZSgpID09IGtodG1sSW5zZXJ0VGV4
dEV2ZW50ICYmIGV2dC0+aXNJbnNlcnRUZXh0RXZlbnQoKSkgeworICAgICAgICAgICAgaWYgKHNo
YWRvd1BhcmVudE5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFRl
eHRGaWVsZEFwcGVhcmFuY2UpIAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRl
eHRGaWVsZCo+KHNoYWRvd1BhcmVudE5vZGUoKS0+cmVuZGVyZXIoKSktPnN1YnRyZWVIYXNDaGFu
Z2VkKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgSFRNTERpdkVsZW1lbnRJbXBsOjpkZWZhdWx0
RXZlbnRIYW5kbGVyKGV2dCk7Cit9CisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBIVE1MSFJF
bGVtZW50SW1wbDo6SFRNTEhSRWxlbWVudEltcGwoRG9jdW1lbnRJbXBsICpkb2MpCiAgICAgOiBI
VE1MRWxlbWVudEltcGwoaHJUYWcsIGRvYykKIHsKSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9I
VE1MSW5wdXRFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC9odG1s
L0hUTUxJbnB1dEVsZW1lbnRJbXBsLmNwcAkocmV2aXNpb24gMTMwODIpCisrKyBXZWJDb3JlL2to
dG1sL2h0bWwvSFRNTElucHV0RWxlbWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2
ICszNyw3IEBACiAjaW5jbHVkZSAicmVuZGVyX2J1dHRvbi5oIgogI2luY2x1ZGUgIlJlbmRlclRl
eHRGaWVsZC5oIgogI2luY2x1ZGUgInJlbmRlcl90aGVtZS5oIgorI2luY2x1ZGUgIlNlbGVjdGlv
bkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudEltcGwuaCIKIAogI2luY2x1ZGUgPGts
b2NhbGUuaD4KQEAgLTExNzAsNiArMTE3MSwyMSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAg
aWYgKGV2dC0+dHlwZSgpID09IGtodG1sQmVmb3JlSW5zZXJ0VGV4dEV2ZW50ICYmIGV2dC0+aXNJ
bnNlcnRUZXh0RXZlbnQoKSkgeworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgdGV4dCB0
byBiZSBpbnNlcnRlZCB3aWxsIG5vdCB2aW9sYXRlIHRoZSBtYXhMZW5ndGgKKyAgICAgICAgdW5z
aWduZWQgbWwgPSBtYXhMZW5ndGgoKTsKKyAgICAgICAgdW5zaWduZWQgY3VycmVudExlbmd0aCA9
IHZhbHVlKCkubGVuZ3RoKCk7CisgICAgICAgIFN0cmluZyB0ZXh0ID0gc3RhdGljX2Nhc3Q8SW5z
ZXJ0VGV4dEV2ZW50SW1wbCAqPihldnQpLT50ZXh0KCk7CisgICAgICAgIGludCBzZWxlY3Rpb25M
ZW5ndGggPSBnZXREb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS50b1N0cmluZygpLmxl
bmd0aCgpOworICAgICAgICAKKyAgICAgICAgLy8gVHJ1bmNhdGUgdGhlIGluc2VydGVkIHRleHQg
aWYgbmVjZXNzYXJ5CisgICAgICAgIGlmIChjdXJyZW50TGVuZ3RoICsgdGV4dC5sZW5ndGgoKSAt
IHNlbGVjdGlvbkxlbmd0aCA+IG1sKSB7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudExlbmd0
aCA8PSBtbCk7CisgICAgICAgICAgICB0ZXh0LnRydW5jYXRlKG1sIC0gY3VycmVudExlbmd0aCk7
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxJbnNlcnRUZXh0RXZlbnRJbXBsICo+KGV2dCktPnNl
dFRleHQodGV4dCk7CisgICAgICAgIH0gICAgICAgIAorICAgIH0KKyAgICAKICAgICBIVE1MR2Vu
ZXJpY0Zvcm1FbGVtZW50SW1wbDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOwogfQogCkluZGV4
OiBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2todG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAkocmV2aXNpb24gMTMwODIpCisrKyBXZWJD
b3JlL2todG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiAr
NjgsMjQgQEAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitjbGFzcyBIVE1MQW5vbnltb3VzRGl2
RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnRJbXBsCit7CitwdWJsaWM6CisgICAg
SFRNTEFub255bW91c0RpdkVsZW1lbnRJbXBsKERvY3VtZW50SW1wbCAqZG9jLCBOb2RlSW1wbCog
c2hhZG93UGFyZW50ID0gMCk7CisgICAgfkhUTUxBbm9ueW1vdXNEaXZFbGVtZW50SW1wbCgpOwor
ICAgIAorICAgIHZpcnR1YWwgYm9vbCBpc0Fub255bW91c0RpdigpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudEltcGwgKmV2
dCk7CisKKyAgICBOb2RlSW1wbCogc2hhZG93UGFyZW50Tm9kZSgpIHsgcmV0dXJuIG1fc2hhZG93
UGFyZW50OyB9CisgICAgdm9pZCBzZXRTaGFkb3dQYXJlbnROb2RlKE5vZGVJbXBsKiBub2RlKSB7
IG1fc2hhZG93UGFyZW50ID0gbm9kZTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBOb2RlSW1wbCog
bV9zaGFkb3dQYXJlbnQ7Cit9OworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIGNsYXNzIEhUTUxI
UkVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgpJbmRleDog
V2ViQ29yZS9raHRtbC9odG1sL0hUTUxJbnB1dEVsZW1lbnRJbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9raHRtbC9odG1sL0hUTUxJbnB1dEVsZW1lbnRJbXBsLmgJKHJldmlzaW9uIDEzMDgy
KQorKysgV2ViQ29yZS9raHRtbC9odG1sL0hUTUxJbnB1dEVsZW1lbnRJbXBsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTkwLDcgKzkwLDcgQEAKICAgICB2b2lkIHNldENoZWNrZWQoYm9vbCk7CiAgICAg
Ym9vbCBpbmRldGVybWluYXRlKCkgY29uc3QgeyByZXR1cm4gbV9pbmRldGVybWluYXRlOyB9CiAg
ICAgdm9pZCBzZXRJbmRldGVybWluYXRlKGJvb2wpOwotICAgIGludCBtYXhMZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX21heExlbjsgfQorICAgIGludCBtYXhMZW5ndGgoKSBjb25zdCB7IHJldHVy
biAobV9tYXhMZW4gPD0gMCB8fCBtX21heExlbiA+IDEwMjQpID8gMTAyNCA6IG1fbWF4TGVuOyB9
CiAgICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAgICBET01TdHJpbmcg
dHlwZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VHlwZShjb25zdCBET01TdHJpbmcmIHQpOwpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZpZWxkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZpZWxkLmgJKHJldmlzaW9uIDEzMDgyKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZpZWxkLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcg
KzIwLDYgQEAKICNpZm5kZWYgUmVuZGVyVGV4dEZpZWxkX0gKICNkZWZpbmUgUmVuZGVyVGV4dEZp
ZWxkX0gKIAotI2luY2x1ZGUgImRvbTJfZXZlbnRzLmgiCiAjaW5jbHVkZSAicmVuZGVyX2ZsZXhi
b3guaCIKICNpbmNsdWRlICJodG1sX2Jsb2NraW1wbC5oIgogCkBAIC0yOSwyMCArMjgsNiBAQAog
CiBjbGFzcyBSZW5kZXJUZXh0RmllbGQ7CiAKLWNsYXNzIElucHV0TXV0YXRpb25MaXN0ZW5lciA6
IHB1YmxpYyBFdmVudExpc3RlbmVyCi17Ci1wdWJsaWM6Ci0gICAgSW5wdXRNdXRhdGlvbkxpc3Rl
bmVyKCkgeyBtX3JlbmRlclRleHRGaWVsZCA9IDA7IH0KLSAgICBJbnB1dE11dGF0aW9uTGlzdGVu
ZXIoUmVuZGVyVGV4dEZpZWxkICpyKSB7IG1fcmVuZGVyVGV4dEZpZWxkID0gcjsgfQotICAgIFJl
bmRlclRleHRGaWVsZCAqcmVuZGVyVGV4dEZpZWxkKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJU
ZXh0RmllbGQ7IH0KLSAgICB2b2lkIHNldElucHV0RWxlbWVudChSZW5kZXJUZXh0RmllbGQgKnIp
IHsgbV9yZW5kZXJUZXh0RmllbGQgPSByOyB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGhhbmRs
ZUV2ZW50KEV2ZW50TGlzdGVuZXJFdmVudCBldnQsIGJvb2wgaXNXaW5kb3dFdmVudCk7Ci0gICAg
Ci1wcml2YXRlOgotICAgIFJlbmRlclRleHRGaWVsZCAqbV9yZW5kZXJUZXh0RmllbGQ7Ci19Owot
CiBjbGFzcyBSZW5kZXJUZXh0RmllbGQgOiBwdWJsaWMgUmVuZGVyQmxvY2sKIHsKIHB1YmxpYzoK
QEAgLTY5LDEwICs1NCwxMCBAQAogICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UoaW50LCBpbnQp
OwogCiAgICAgdm9pZCBzdWJ0cmVlSGFzQ2hhbmdlZCgpOworICAgIFN0cmluZyB0ZXh0KCk7CiAK
IHByb3RlY3RlZDoKLSAgICBSZWZQdHI8SFRNTERpdkVsZW1lbnRJbXBsPiBtX2RpdjsKLSAgICBS
ZWZQdHI8SW5wdXRNdXRhdGlvbkxpc3RlbmVyPiBtX211dGF0aW9uTGlzdGVuZXI7CisgICAgUmVm
UHRyPEhUTUxBbm9ueW1vdXNEaXZFbGVtZW50SW1wbD4gbV9kaXY7CiAgICAgCiAgICAgYm9vbCBt
X2RpcnR5OwogfTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGaWVsZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZpZWxkLmNwcAkocmV2
aXNpb24gMTMwODIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RmllbGQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNywyNSArMjcsMTMgQEAKICNpbmNsdWRlICJodG1sbmFtZXMuaCIK
ICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50SW1wbC5oIgogI2luY2x1ZGUgImRvbV9lbGVtZW50
aW1wbC5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJkb20yX2V2ZW50c2lt
cGwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiAKLXZvaWQgSW5wdXRNdXRhdGlvbkxpc3Rl
bmVyOjpoYW5kbGVFdmVudChFdmVudEltcGwgKmV2ZW50LCBib29sIGlzV2luZG93RXZlbnQpCi17
Ci0gICAgaWYgKCFtX3JlbmRlclRleHRGaWVsZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IGlmIChldmVudC0+dHlwZSgpID09IERPTUNoYXJhY3RlckRhdGFNb2RpZmllZEV2ZW50KQotICAg
ICAgICBtX3JlbmRlclRleHRGaWVsZC0+c3VidHJlZUhhc0NoYW5nZWQoKTsKLX0KLQogUmVuZGVy
VGV4dEZpZWxkOjpSZW5kZXJUZXh0RmllbGQoTm9kZUltcGwqIG5vZGUpCi06UmVuZGVyQmxvY2so
bm9kZSksIG1fbXV0YXRpb25MaXN0ZW5lcihuZXcgSW5wdXRNdXRhdGlvbkxpc3RlbmVyKHRoaXMp
KSwgbV9kaXJ0eShmYWxzZSkKKzpSZW5kZXJCbG9jayhub2RlKSwgbV9kaXJ0eShmYWxzZSkKIHsK
IH0KIApAQCAtNTMsNyArNDEsNiBAQAogewogICAgIC8vIFRoZSByZW5kZXJlciBmb3IgdGhlIGRp
diBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCBieSBkZXN0cm95TGVmdG92ZXJDaGlsZHJlbgog
ICAgIGlmIChtX2RpdikgewotICAgICAgICBtX2Rpdi0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihET01D
aGFyYWN0ZXJEYXRhTW9kaWZpZWRFdmVudCwgbV9tdXRhdGlvbkxpc3RlbmVyLmdldCgpLCBmYWxz
ZSk7CiAgICAgICAgIG1fZGl2LT5kZXRhY2goKTsKICAgICB9CiB9CkBAIC04NSwxMyArNzIsMTkg
QEAKIHsKICAgICBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkgewogICAgICAg
ICBIVE1MSW5wdXRFbGVtZW50SW1wbCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50SW1wbCo+KGVsZW1lbnQoKSk7Ci0gICAgICAgIERPTVN0cmluZyB2YWx1ZSA9IGlucHV0LT52
YWx1ZSgpOworICAgICAgICBTdHJpbmcgdmFsdWUgPSBpbnB1dC0+dmFsdWUoKS5jb3B5KCk7CiAg
ICAgICAgIGlmICh2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHZhbHVlID0gRE9NU3RyaW5n
KCIiKTsKKyAgICAgICAgICAgIHZhbHVlID0gU3RyaW5nKCIiKTsKKyAgICAgICAgdW5zaWduZWQg
bWwgPSBpbnB1dC0+bWF4TGVuZ3RoKCk7CisgICAgICAgIGJvb2wgdmFsdWVIYXNDaGFuZ2VkID0g
ZmFsc2U7CisgICAgICAgIGlmICh2YWx1ZS5sZW5ndGgoKSA+IG1sKSB7CisgICAgICAgICAgICB2
YWx1ZS50cnVuY2F0ZShtbCk7CisgICAgICAgICAgICB2YWx1ZUhhc0NoYW5nZWQgPSB0cnVlOwor
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgaWYgKCFtX2RpdikgewogICAgICAgICAg
ICAgLy8gQ3JlYXRlIHRoZSBkaXYgYW5kIGdpdmUgaXQgYSBwYXJlbnQsIHJlbmRlcmVyLCBhbmQg
c3R5bGUKLSAgICAgICAgICAgIG1fZGl2ID0gbmV3IEhUTUxEaXZFbGVtZW50SW1wbChkb2N1bWVu
dCgpKTsKKyAgICAgICAgICAgIG1fZGl2ID0gbmV3IEhUTUxBbm9ueW1vdXNEaXZFbGVtZW50SW1w
bChkb2N1bWVudCgpLCBlbGVtZW50KCkpOwogICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGRpdlJl
bmRlcmVyID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJCbG9jayhtX2Rpdi5nZXQoKSk7CiAg
ICAgICAgICAgICBtX2Rpdi0+c2V0UmVuZGVyZXIoZGl2UmVuZGVyZXIpOwogICAgICAgICAgICAg
bV9kaXYtPnNldEF0dGFjaGVkKCk7CkBAIC0xMTIsMTEgKzEwNSwxMCBAQAogICAgICAgICAgICAg
dGV4dCA9IG5ldyBUZXh0SW1wbChkb2N1bWVudCgpLCB2YWx1ZS5pbXBsKCkpOwogICAgICAgICAg
ICAgaW50IGV4Y2VwdGlvbiA9IDA7CiAgICAgICAgICAgICBtX2Rpdi0+YXBwZW5kQ2hpbGQodGV4
dCwgZXhjZXB0aW9uKTsKLSAgICAgICAgICAgIG1fZGl2LT5hZGRFdmVudExpc3RlbmVyKERPTUNo
YXJhY3RlckRhdGFNb2RpZmllZEV2ZW50LCBtX211dGF0aW9uTGlzdGVuZXIuZ2V0KCksIGZhbHNl
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFpbnB1dC0+dmFsdWVNYXRjaGVz
UmVuZGVyZXIoKSkgewotICAgICAgICAgICAgRE9NU3RyaW5nIG9sZFRleHQgPSB0ZXh0LT5kYXRh
KCk7CisgICAgICAgICAgICBTdHJpbmcgb2xkVGV4dCA9IHRoaXMtPnRleHQoKTsKICAgICAgICAg
ICAgIHZhbHVlLnJlcGxhY2UoUUNoYXIoJ1xcJyksIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2wo
KSk7CiAgICAgICAgICAgICBpZiAodmFsdWUgIT0gb2xkVGV4dCkgewogICAgICAgICAgICAgICAg
IGludCBleGNlcHRpb24gPSAwOwpAQCAtMTI2LDYgKzExOCw5IEBACiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpbnB1dC0+c2V0VmFsdWVNYXRjaGVzUmVuZGVyZXIoKTsKICAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlSGFzQ2hhbmdlZCkKKyAgICAgICAgICAgIGlucHV0
LT5zZXRWYWx1ZUZyb21SZW5kZXJlcih2YWx1ZSk7CiAgICAgfQogfQogCkBAIC0xNjcsMTIgKzE2
MiwxOSBAQAogdm9pZCBSZW5kZXJUZXh0RmllbGQ6OnN1YnRyZWVIYXNDaGFuZ2VkKCkKIHsKICAg
ICBIVE1MSW5wdXRFbGVtZW50SW1wbCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50SW1wbCo+KGVsZW1lbnQoKSk7Ci0gICAgaWYgKGlucHV0ICYmIG1fZGl2KSB7Ci0gICAgICAg
IGlucHV0LT5zZXRWYWx1ZUZyb21SZW5kZXJlcihtX2Rpdi0+dGV4dENvbnRlbnQoKSk7CisgICAg
aWYgKGlucHV0KSB7CisgICAgICAgIGlucHV0LT5zZXRWYWx1ZUZyb21SZW5kZXJlcih0ZXh0KCkp
OwogICAgICAgICBzZXRFZGl0ZWQodHJ1ZSk7CiAgICAgfQogfQogCitTdHJpbmcgUmVuZGVyVGV4
dEZpZWxkOjp0ZXh0KCkKK3sKKyAgICBpZiAobV9kaXYpCisgICAgICAgIHJldHVybiAobV9kaXYt
PnRleHRDb250ZW50KCkpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwogdm9pZCBSZW5kZXJU
ZXh0RmllbGQ6OmNhbGNNaW5NYXhXaWR0aCgpCiB7CiAgICAgUmVuZGVyQmxvY2s6OmNhbGNNaW5N
YXhXaWR0aCgpOwpJbmRleDogV2ViQ29yZS9kb20vZG9tMl9ldmVudHNpbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9kb20yX2V2ZW50c2ltcGwuY3BwCShyZXZpc2lvbiAxMzA4MikK
KysrIFdlYkNvcmUvZG9tL2RvbTJfZXZlbnRzaW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
NCw2ICsxMTQsMTEgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgRXZlbnRJbXBsOjpp
c0luc2VydFRleHRFdmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBib29s
IEV2ZW50SW1wbDo6c3RvcmVzUmVzdWx0QXNTdHJpbmcoKSBjb25zdAogewogICAgIHJldHVybiBm
YWxzZTsKQEAgLTY0OCw0ICs2NTMsMjEgQEAKICAgICBtX3Jlc3VsdCA9IHMuaW1wbCgpOwogfQog
CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbnNlcnRUZXh0RXZlbnRJbXBsOjpJbnNlcnRU
ZXh0RXZlbnRJbXBsKGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZUFyZykKKyAgICA6IEV2ZW50SW1w
bCh0eXBlQXJnLCBmYWxzZSwgdHJ1ZSkKK3sKIH0KKworSW5zZXJ0VGV4dEV2ZW50SW1wbDo6SW5z
ZXJ0VGV4dEV2ZW50SW1wbChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGVBcmcsIFN0cmluZyB0ZXh0
KQorICAgIDogRXZlbnRJbXBsKHR5cGVBcmcsIGZhbHNlLCB0cnVlKSwgbV90ZXh0KHRleHQpCit7
Cit9CisKK3ZvaWQgSW5zZXJ0VGV4dEV2ZW50SW1wbDo6c2V0VGV4dChTdHJpbmcgdGV4dCkKK3sK
KyAgICBtX3RleHQgPSB0ZXh0OworfQorCit9CkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudE5hbWVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCShyZXZpc2lvbiAxMzA4
MikKKysrIFdlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODgsNiAr
ODgsOCBAQAogICAgIG1hY3JvKGtodG1sRHJhZ2Ryb3ApIFwKICAgICBtYWNybyhraHRtbEVycm9y
KSBcCiAgICAgbWFjcm8oa2h0bWxIb3Jpem9udGFsbW91c2V3aGVlbCkgXAorICAgIG1hY3JvKGto
dG1sQmVmb3JlSW5zZXJ0VGV4dCkgXAorICAgIG1hY3JvKGtodG1sSW5zZXJ0VGV4dCkgXAogICAg
IG1hY3JvKGtodG1sTW92ZSkgXAogICAgIG1hY3JvKGtodG1sT3JpZ2NsaWNrTW91c2V1cCkgXAog
ICAgIFwKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGVJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vTm9kZUltcGwuaAkocmV2aXNpb24gMTMwODIpCisrKyBXZWJDb3JlL2RvbS9Ob2RlSW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiArMTI2LDcgQEAKICAgICB2aXJ0dWFsIGJvb2wg
aXNUZXh0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlz
Q29tbWVudE5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c0RvY3VtZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29s
IGlzQW5vbnltb3VzRGl2KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIGlzQmxv
Y2tGbG93KCkgY29uc3Q7CiAgICAgYm9vbCBpc0Jsb2NrRmxvd09yQmxvY2tUYWJsZSgpIGNvbnN0
OwogICAgIApJbmRleDogV2ViQ29yZS9kb20vZG9tMl9ldmVudHNpbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vZG9tMl9ldmVudHNpbXBsLmgJKHJldmlzaW9uIDEzMDgyKQorKysgV2Vi
Q29yZS9kb20vZG9tMl9ldmVudHNpbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcg
QEAKICAgICB2aXJ0dWFsIGJvb2wgaXNEcmFnRXZlbnQoKSBjb25zdDsgLy8gYSBzdWJzZXQgb2Yg
bW91c2UgZXZlbnRzCiAgICAgdmlydHVhbCBib29sIGlzQ2xpcGJvYXJkRXZlbnQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNXaGVlbEV2ZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGlzSW5zZXJ0VGV4dEV2ZW50KCkgY29uc3Q7CiAKICAgICBib29sIHByb3BhZ2F0aW9uU3RvcHBl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGFnYXRpb25TdG9wcGVkOyB9CiAgICAgYm9vbCBkZWZh
dWx0UHJldmVudGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWZhdWx0UHJldmVudGVkOyB9CkBAIC00
MzQsNiArNDM1LDIxIEBACiAgICAgUmVmUHRyPERPTVN0cmluZ0ltcGw+IG1fcmVzdWx0OwogfTsK
IAorY2xhc3MgSW5zZXJ0VGV4dEV2ZW50SW1wbCA6IHB1YmxpYyBFdmVudEltcGwKK3sKK3B1Ymxp
YzoKKyAgICBJbnNlcnRUZXh0RXZlbnRJbXBsKGNvbnN0IEF0b21pY1N0cmluZyAmKTsKKyAgICBJ
bnNlcnRUZXh0RXZlbnRJbXBsKGNvbnN0IEF0b21pY1N0cmluZyAmLCBTdHJpbmcpOworCisgICAg
dmlydHVhbCBib29sIGlzSW5zZXJ0VGV4dEV2ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0KFN0cmluZyk7CisgICAgCisgICAgU3RyaW5nIHRleHQo
KSBjb25zdCB7IHJldHVybiBtX3RleHQ7IH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV90ZXh0
OworfTsKKwogfSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGlu
Zy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEzMDgyKQorKysgV2ViQ29y
ZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMjQgKzMwLDMxIEBACiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudEltcGwuaCIKICNpbmNs
dWRlICJEb2N1bWVudEltcGwuaCIKICNpbmNsdWRlICJFZGl0aW5nVGV4dEltcGwuaCIKKyNpbmNs
dWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MRWxl
bWVudEltcGwuaCIKKyNpbmNsdWRlICJodG1sX2Jsb2NraW1wbC5oIgogI2luY2x1ZGUgIlZpc2li
bGVQb3NpdGlvbi5oIgogI2luY2x1ZGUgImNzc19jb21wdXRlZHN0eWxlLmgiCiAjaW5jbHVkZSAi
Y3NzX3ZhbHVlaW1wbC5oIgogI2luY2x1ZGUgImNzc3Byb3BlcnRpZXMuaCIKKyNpbmNsdWRlICJk
b20yX2V2ZW50c2ltcGwuaCIKICNpbmNsdWRlICJkb20yX3JhbmdlaW1wbC5oIgogI2luY2x1ZGUg
ImRvbV9wb3NpdGlvbi5oIgogI2luY2x1ZGUgImh0bWxfaW50ZXJjaGFuZ2UuaCIKICNpbmNsdWRl
ICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgInJlbmRl
cl9vYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0RmllbGQuaCIKKyNpbmNsdWRlICJTZWxl
Y3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgorI2luY2x1ZGUg
InZpc2libGVfdGV4dC5oIgogI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwordXNpbmcgbmFt
ZXNwYWNlIEV2ZW50TmFtZXM7CiAKIFJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJh
Z21lbnQoRG9jdW1lbnRJbXBsICpkb2N1bWVudCwgRG9jdW1lbnRGcmFnbWVudEltcGwgKmZyYWdt
ZW50LCBib29sIG1hdGNoU3R5bGUpCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KSwgCkBAIC0x
MTgsNiArMTI1LDMxIEBACiAgICAgICAgIGNvbXB1dGVTdHlsZXNVc2luZ1Rlc3RSZW5kZXJpbmco
aG9sZGVyLmdldCgpKTsKICAgICByZW1vdmVVbnJlbmRlcmVkTm9kZXNVc2luZ1Rlc3RSZW5kZXJp
bmcoaG9sZGVyLmdldCgpKTsKICAgICBtX2hhc01vcmVUaGFuT25lQmxvY2sgPSBjb3VudFJlbmRl
cmVkQmxvY2tzKGhvbGRlci5nZXQoKSkgPiAxOworICAgIAorICAgIC8vIFNlbmQga2h0bWxCZWZv
cmVJbnNlcnRUZXh0RXZlbnQuICBUaGUgZXZlbnQgaGFuZGxlciB3aWxsIHVwZGF0ZSB0ZXh0IGlm
IG5lY2Vzc2FyeS4KKyAgICBSZWZQdHI8UmFuZ2VJbXBsPiByYW5nZSA9IG5ldyBSYW5nZUltcGwo
aG9sZGVyLT5nZXREb2N1bWVudCgpLCBob2xkZXItPmZpcnN0Q2hpbGQoKSwgMCwgaG9sZGVyLT5s
YXN0Q2hpbGQoKSwgbWF4RGVlcE9mZnNldChob2xkZXItPmxhc3RDaGlsZCgpKSk7CisgICAgU3Ry
aW5nIHRleHQgPSBwbGFpblRleHQocmFuZ2UuZ2V0KCkpOworICAgIGlmIChtX2RvY3VtZW50LT5m
cmFtZSgpKSB7CisgICAgICAgIE5vZGVJbXBsKiBzZWxlY3Rpb25TdGFydE5vZGUgPSBtX2RvY3Vt
ZW50LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zdGFydCgpLm5vZGUoKTsKKyAgICAgICAgaWYgKHNl
bGVjdGlvblN0YXJ0Tm9kZSAmJiBzZWxlY3Rpb25TdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1l
bnQoKSkgeworICAgICAgICAgICAgaW50IGVjID0gMDsKKyAgICAgICAgICAgIFN0cmluZyBuZXdU
ZXh0ID0gdGV4dC5jb3B5KCk7CisgICAgICAgICAgICBSZWZQdHI8RXZlbnRJbXBsPiBldnQgPSBu
ZXcgSW5zZXJ0VGV4dEV2ZW50SW1wbChraHRtbEJlZm9yZUluc2VydFRleHRFdmVudCwgbmV3VGV4
dCk7CisgICAgICAgICAgICBzZWxlY3Rpb25TdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQo
KS0+ZGlzcGF0Y2hFdmVudChldnQsIGVjLCB0cnVlKTsKKyAgICAgICAgICAgIGlmICh0ZXh0ICE9
IG5ld1RleHQpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZXZlbnQgaGFuZGxlciBoYXMg
Y2hhbmdlZCB0aGUgdGV4dCwgY3JlYXRlIGEgbmV3IGhvbGRlciBub2RlIGZvciB0ZXN0IHJlbmRl
cmluZworICAgICAgICAgICAgICAgIG1fZnJhZ21lbnQtPnJlbW92ZUNoaWxkcmVuKCk7CisgICAg
ICAgICAgICAgICAgbV9mcmFnbWVudC0+YXBwZW5kQ2hpbGQobmV3IFRleHRJbXBsKG1fZG9jdW1l
bnQuZ2V0KCksIG5ld1RleHQpLCBlYyk7CisgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShob2xk
ZXIpOworICAgICAgICAgICAgICAgIGhvbGRlciA9IGluc2VydEZyYWdtZW50Rm9yVGVzdFJlbmRl
cmluZygpOworICAgICAgICAgICAgICAgIGlmICghbV9tYXRjaFN0eWxlKQorICAgICAgICAgICAg
ICAgICAgICBjb21wdXRlU3R5bGVzVXNpbmdUZXN0UmVuZGVyaW5nKGhvbGRlci5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgcmVtb3ZlVW5yZW5kZXJlZE5vZGVzVXNpbmdUZXN0UmVuZGVyaW5nKGhv
bGRlci5nZXQoKSk7CisgICAgICAgICAgICAgICAgbV9oYXNNb3JlVGhhbk9uZUJsb2NrID0gY291
bnRSZW5kZXJlZEJsb2Nrcyhob2xkZXIuZ2V0KCkpID4gMTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICAKICAgICByZXN0b3JlVGVzdFJlbmRlcmluZ05vZGVzVG9GcmFnbWVu
dChob2xkZXIuZ2V0KCkpOwogICAgIHJlbW92ZU5vZGUoaG9sZGVyKTsKICAgICByZW1vdmVTdHls
ZU5vZGVzKCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCShyZXZpc2lvbiAxMzA4
MikKKysrIFdlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsMTEgQEAKIAogI2luY2x1ZGUgIkJyZWFrQmxvY2txdW90ZUNvbW1hbmQuaCIK
ICNpbmNsdWRlICJEb2N1bWVudEltcGwuaCIKKyNpbmNsdWRlICJkb20yX2V2ZW50cy5oIgorI2lu
Y2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgorI2luY2x1ZGUgImh0bWxfYmxvY2tpbXBsLmgiCisj
aW5jbHVkZSAiUmVuZGVyVGV4dEZpZWxkLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5oIgogI2lu
Y2x1ZGUgIkluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuaCIKQEAgLTQwLDYgKzQ1LDgg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsK
KwogVHlwaW5nQ29tbWFuZDo6VHlwaW5nQ29tbWFuZChEb2N1bWVudEltcGwgKmRvY3VtZW50LCBF
VHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSwgY29uc3QgRE9NU3RyaW5nICZ0ZXh0VG9JbnNlcnQs
IGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0KQogICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoZG9j
dW1lbnQpLCAKICAgICAgIG1fY29tbWFuZFR5cGUoY29tbWFuZFR5cGUpLCAKQEAgLTk2LDEzICsx
MDMsMjYgQEAKICAgICBGcmFtZSAqZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKICAgICBBU1NF
UlQoZnJhbWUpOwogICAgIAorICAgIFN0cmluZyBuZXdUZXh0ID0gdGV4dC5jb3B5KCk7CisgICAg
Tm9kZUltcGwqIHN0YXJ0Tm9kZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zdGFydCgpLm5vZGUoKTsK
KyAgICAKKyAgICBpZiAoc3RhcnROb2RlICYmIHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVu
dCgpKSB7ICAgICAgICAKKyAgICAgICAgLy8gU2VuZCBraHRtbEJlZm9yZUluc2VydFRleHRFdmVu
dC4gIFRoZSBldmVudCBoYW5kbGVyIHdpbGwgdXBkYXRlIHRleHQgaWYgbmVjZXNzYXJ5LgorICAg
ICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CisgICAgICAgIFJlZlB0cjxFdmVudEltcGw+IGV2
dCA9IG5ldyBJbnNlcnRUZXh0RXZlbnRJbXBsKGtodG1sQmVmb3JlSW5zZXJ0VGV4dEV2ZW50LCBu
ZXdUZXh0KTsKKyAgICAgICAgc3RhcnROb2RlLT5yb290RWRpdGFibGVFbGVtZW50KCktPmRpc3Bh
dGNoRXZlbnQoZXZ0LCBleGNlcHRpb25Db2RlLCB0cnVlKTsKKyAgICB9CisgICAgCisgICAgaWYg
KG5ld1RleHQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgRWRpdENvbW1h
bmRQdHIgbGFzdEVkaXRDb21tYW5kID0gZnJhbWUtPmxhc3RFZGl0Q29tbWFuZCgpOwogICAgIGlm
IChpc09wZW5Gb3JNb3JlVHlwaW5nQ29tbWFuZChsYXN0RWRpdENvbW1hbmQpKSB7Ci0gICAgICAg
IHN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQgKj4obGFzdEVkaXRDb21tYW5kLmdldCgpKS0+aW5z
ZXJ0VGV4dCh0ZXh0LCBzZWxlY3RJbnNlcnRlZFRleHQpOworICAgICAgICBzdGF0aWNfY2FzdDxU
eXBpbmdDb21tYW5kICo+KGxhc3RFZGl0Q29tbWFuZC5nZXQoKSktPmluc2VydFRleHQobmV3VGV4
dCwgc2VsZWN0SW5zZXJ0ZWRUZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEVk
aXRDb21tYW5kUHRyIGNtZChuZXcgVHlwaW5nQ29tbWFuZChkb2N1bWVudCwgSW5zZXJ0VGV4dCwg
dGV4dCwgc2VsZWN0SW5zZXJ0ZWRUZXh0KSk7CisgICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBU
eXBpbmdDb21tYW5kKGRvY3VtZW50LCBJbnNlcnRUZXh0LCBuZXdUZXh0LCBzZWxlY3RJbnNlcnRl
ZFRleHQpKTsKICAgICBjbWQuYXBwbHkoKTsKIH0KIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmgJKHJldmlzaW9uIDEzMDgyKQorKysgV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcx
LDcgQEAKICAgICBib29sIGhhc01vcmVUaGFuT25lQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2hh
c01vcmVUaGFuT25lQmxvY2s7IH0KICAgICBib29sIGhhc0ludGVyY2hhbmdlTmV3bGluZUF0U3Rh
cnQoKSBjb25zdCB7IHJldHVybiBtX2hhc0ludGVyY2hhbmdlTmV3bGluZUF0U3RhcnQ7IH0KICAg
ICBib29sIGhhc0ludGVyY2hhbmdlTmV3bGluZUF0RW5kKCkgY29uc3QgeyByZXR1cm4gbV9oYXNJ
bnRlcmNoYW5nZU5ld2xpbmVBdEVuZDsgfQotCisgICAgCiBwcml2YXRlOgogICAgIC8vIG5vIGNv
cHkgY29uc3RydWN0aW9uIG9yIGFzc2lnbm1lbnQKICAgICBSZXBsYWNlbWVudEZyYWdtZW50KGNv
bnN0IFJlcGxhY2VtZW50RnJhZ21lbnQgJik7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdENv
bW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAJ
KHJldmlzaW9uIDEzMDgyKQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsMTIgKzMyLDE4IEBACiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9u
LmgiCiAjaW5jbHVkZSAiY3NzX2NvbXB1dGVkc3R5bGUuaCIKICNpbmNsdWRlICJjc3NfdmFsdWVp
bXBsLmgiCisjaW5jbHVkZSAiZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVkZSAiZG9tX3Bvc2l0
aW9uLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgi
CisjaW5jbHVkZSAiaHRtbF9ibG9ja2ltcGwuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0RmllbGQu
aCIKICNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CisKICNkZWZpbmUgSUZfSU1QTF9OVUxM
X1JFVFVSTl9BUkcoYXJnKSBkbyB7IFwKICAgICAgICAgaWYgKCp0aGlzID09IDApIHsgcmV0dXJu
IGFyZzsgfSBcCiAgICAgfSB3aGlsZSAoMCkKQEAgLTIxNyw2ICsyMjMsMTQgQEAKICAgICAgICAg
RWRpdENvbW1hbmRQdHIgY21kKHRoaXMpOwogICAgICAgICBmcmFtZS0+YXBwbGllZEVkaXRpbmco
Y21kKTsKICAgICB9CisgICAgCisgICAgTm9kZUltcGwqIHN0YXJ0Tm9kZSA9IGVuZGluZ1NlbGVj
dGlvbigpLnN0YXJ0KCkubm9kZSgpOworICAgIGlmIChzdGFydE5vZGUgJiYgc3RhcnROb2RlLT5y
b290RWRpdGFibGVFbGVtZW50KCkpIHsKKyAgICAgICAgLy8gU2VuZCBraHRtbEluc2VydFRleHRF
dmVudCB0byByb290RWRpdGFibGVFbGVtZW50LgorICAgICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9
IDA7CisgICAgICAgIFJlZlB0cjxFdmVudEltcGw+IGV2dCA9IG5ldyBJbnNlcnRUZXh0RXZlbnRJ
bXBsKGtodG1sSW5zZXJ0VGV4dEV2ZW50KTsKKyAgICAgICAgc3RhcnROb2RlLT5yb290RWRpdGFi
bGVFbGVtZW50KCktPmRpc3BhdGNoRXZlbnQoZXZ0LCBleGNlcHRpb25Db2RlLCB0cnVlKTsKKyAg
ICB9CiB9CiAKIHZvaWQgRWRpdENvbW1hbmQ6OnVuYXBwbHkoKQpAQCAtMjM4LDYgKzI1MiwxNCBA
QAogICAgICAgICBFZGl0Q29tbWFuZFB0ciBjbWQodGhpcyk7CiAgICAgICAgIGZyYW1lLT51bmFw
cGxpZWRFZGl0aW5nKGNtZCk7CiAgICAgfQorICAgIAorICAgIE5vZGVJbXBsKiBzdGFydE5vZGUg
PSBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLm5vZGUoKTsKKyAgICBpZiAoc3RhcnROb2RlICYm
IHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKSB7CisgICAgICAgIC8vIFNlbmQga2h0
bWxJbnNlcnRUZXh0RXZlbnQgdG8gcm9vdEVkaXRhYmxlRWxlbWVudC4KKyAgICAgICAgaW50IGV4
Y2VwdGlvbkNvZGUgPSAwOworICAgICAgICBSZWZQdHI8RXZlbnRJbXBsPiBldnQgPSBuZXcgSW5z
ZXJ0VGV4dEV2ZW50SW1wbChraHRtbEluc2VydFRleHRFdmVudCk7CisgICAgICAgIHN0YXJ0Tm9k
ZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpLT5kaXNwYXRjaEV2ZW50KGV2dCwgZXhjZXB0aW9uQ29k
ZSwgdHJ1ZSk7CisgICAgfQogfQogCiB2b2lkIEVkaXRDb21tYW5kOjpyZWFwcGx5KCkKQEAgLTI1
OSw2ICsyODEsMTQgQEAKICAgICAgICAgRWRpdENvbW1hbmRQdHIgY21kKHRoaXMpOwogICAgICAg
ICBmcmFtZS0+cmVhcHBsaWVkRWRpdGluZyhjbWQpOwogICAgIH0KKyAgICAKKyAgICBOb2RlSW1w
bCogc3RhcnROb2RlID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCk7CisgICAgaWYg
KHN0YXJ0Tm9kZSAmJiBzdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkgeworICAgICAg
ICAvLyBTZW5kIGtodG1sSW5zZXJ0VGV4dEV2ZW50IHRvIHJvb3RFZGl0YWJsZUVsZW1lbnQuCisg
ICAgICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKKyAgICAgICAgUmVmUHRyPEV2ZW50SW1wbD4g
ZXZ0ID0gbmV3IEluc2VydFRleHRFdmVudEltcGwoa2h0bWxJbnNlcnRUZXh0RXZlbnQpOworICAg
ICAgICBzdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKS0+ZGlzcGF0Y2hFdmVudChldnQs
IGV4Y2VwdGlvbkNvZGUsIHRydWUpOworICAgIH0KIH0KIAogdm9pZCBFZGl0Q29tbWFuZDo6ZG9S
ZWFwcGx5KCkKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxMzEyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsNTUgQEAKKzIwMDYtMDMtMDMgIEFkZWxlIFBldGVyc29uICA8YWRl
bGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIC0gRml4ZWQgaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNn
aT9pZD02OTg3CisgICAgICAgIEltcGxlbWVudCBtYXhsZW5ndGggZm9yIG5ldyB0ZXh0IGZpZWxk
cworCisgICAgICAgIFRlc3QgYWRkZWQ6CisgICAgICAgICogZmFzdC9mb3Jtcy9pbnB1dC1hcHBl
YXJhbmNlLW1heGxlbmd0aC5odG1sCisKKyAgICAgICAgKiBraHRtbC9odG1sL0hUTUxJbnB1dEVs
ZW1lbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnRJbXBsOjpk
ZWZhdWx0RXZlbnRIYW5kbGVyKTogQWRkZWQgY2FzZSB0byB1c2UgdGhlIGtodG1sQmVmb3JlSW5z
ZXJ0VGV4dEV2ZW50IHRvIGNoZWNrIGZvciBtYXhsZW5ndGguCisgICAgICAgIChET006OkhUTUxJ
bnB1dEVsZW1lbnRJbXBsOjptYXhMZW5ndGgpOiBNYWtlcyBzdXJlIHRoYXQgbWF4bGVuZ3RoIGlz
IGJldHdlZW4gMCBhbmQgMTAyNC4KKworICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZW1lbnRGcmFnbWVudDo6UmVw
bGFjZW1lbnRGcmFnbWVudCk6IEFmdGVyIGRvaW5nIGEgdGVzdCBpbnNlcnQgb2YgdGhlIGZyYWdt
ZW50LAorICAgICAgICAgU2VuZCBraHRtbEJlZm9yZUluc2VydFRleHRFdmVudCB0byB0aGUgcm9v
dCBlZGl0YWJsZSBlbGVtZW50IHNvIHRoZSBldmVudCBoYW5kbGVyIGNhbiB1cGRhdGUgdGhlIHRl
eHQsIGFuZCB3ZSBjYW4gdXBkYXRlIHRoZSBmcmFnbWVudC4KKyAgICAgICAgKiBlZGl0aW5nL1R5
cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6aW5zZXJ0
VGV4dCk6IFNlbmQga2h0bWxCZWZvcmVJbnNlcnRUZXh0RXZlbnQgdG8gdGhlIHJvb3QgZWRpdGFi
bGUgZWxlbWVudCBzbyB0aGUgZXZlbnQgaGFuZGxlciBjYW4gdXBkYXRlIHRoZSB0ZXh0IGlmIG5l
Y2Vzc2FyeS4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRDb21tYW5kOjphcHBseSk6IElmIHdlJ3ZlIGp1c3QgYXBwbGllZCBhIGNvbW1h
bmQsIHNlbmQgdGhlIGtodG1sSW5zZXJ0VGV4dEV2ZW50IHRvIHRoZSByb290IGVkaXRhYmxlIGVs
ZW1lbnQuIAorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OnVuYXBwbHkpOiBkaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpyZWFwcGx5KTogZGl0dG8uCisKKyAgICAg
ICAgKiBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxBbm9ueW1vdXNEaXZFbGVtZW50SW1wbDo6SFRNTEFub255bW91c0RpdkVsZW1lbnRJbXBsKTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5vbnltb3VzRGl2RWxlbWVudEltcGw6On5I
VE1MQW5vbnltb3VzRGl2RWxlbWVudEltcGwpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxBbm9ueW1vdXNEaXZFbGVtZW50SW1wbDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6IAorICAgICAg
ICAgU2VuZHMga2h0bWxCZWZvcmVJbnNlcnRUZXh0RXZlbnRzIHRvIHRoZSBzaGFkb3dQYXJlbnRO
b2RlLCAKKyAgICAgICAgIGFuZCBoYW5kbGVzIGtodG1sSW5zZXJ0VGV4dEV2ZW50cyBieSB0ZWxs
aW5nIHRoZSByZW5kZXJlciB0aGF0IHRoZXkgYW5vbnltb3VzIHN1YnRyZWUgaGFzIGNoYW5nZWQu
CisgICAgICAgICoga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oOiBBZGRlZCBIVE1MQW5vbnlt
b3VzRGl2RWxlbWVudEltcGwgY2xhc3MgdG8gc3RvcmUgcG9pbnRlciB0byBzaGFkb3dQYXJlbnRO
b2RlIGFuZCB0byBoYW5kbGUgZXZlbnRzLgorICAgICAgICAoRE9NOjpIVE1MQW5vbnltb3VzRGl2
RWxlbWVudEltcGw6OmlzQW5vbnltb3VzRGl2KTogQWRkZWQuCisgICAgICAgIChET006OkhUTUxB
bm9ueW1vdXNEaXZFbGVtZW50SW1wbDo6c2hhZG93UGFyZW50Tm9kZSk6IEFkZGVkLgorICAgICAg
ICAoRE9NOjpIVE1MQW5vbnltb3VzRGl2RWxlbWVudEltcGw6OnNldFNoYWRvd1BhcmVudE5vZGUp
OiBBZGRlZC4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0RmllbGQuY3BwOiBSZW1v
dmVkIElucHV0TXV0YXRpb25MaXN0ZW5lciBzaW5jZSBzdWJ0cmVlSGFzQ2hhbmdlZCBpcyBub3cg
Y2FsbGVkIGZyb20gdGhlIGVkaXRpbmcgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRl
eHRGaWVsZDo6flJlbmRlclRleHRGaWVsZCk6IHJlbW92ZWQgZXZlbnQgbGlzdGVuZXIgY29kZS4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRGaWVsZDo6dXBkYXRlRnJvbUVsZW1lbnQpOiBk
aXR0by4gIEFuZCBjcmVhdGVzIEhUTUxBbm9ueW1vdXNEaXZFbGVtZW50SW1wbC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRleHRGaWVsZDo6c3VidHJlZUhhc0NoYW5nZWQpOiBjYWxscyBuZXcg
dGV4dCgpIG1ldGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRGaWVsZDo6dGV4dCk6
IGNyZWF0ZWQgdG8gZ2V0IGEgU3RyaW5nIG9mIGFsbCB0ZXh0IGluIHRoZSBSZW5kZXJUZXh0Rmll
bGQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRGaWVsZC5oOiBSZW1vdmVkIElucHV0
TXV0YXRpb25MaXN0ZW5lciBjbGFzcy4KKworICAgICAgICAqIGRvbS9FdmVudE5hbWVzLmg6IEFk
ZGVkIGtodG1sSW5zZXJ0VGV4dCBhbmQga2h0bWxCZWZvcmVJbnNlcnRUZXh0LgorICAgICAgICAq
IGRvbS9Ob2RlSW1wbC5oOiAoV2ViQ29yZTo6Tm9kZUltcGw6OmlzQW5vbnltb3VzRGl2KTogQWRk
ZWQuCisgICAgICAgICogZG9tL2RvbTJfZXZlbnRzaW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEltcGw6OmlzSW5zZXJ0VGV4dEV2ZW50KTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbnNlcnRUZXh0RXZlbnRJbXBsOjpJbnNlcnRUZXh0RXZlbnRJbXBsKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0RXZlbnRJbXBsOjpzZXRUZXh0KTogQWRkZWQuCisgICAg
ICAgICogZG9tL2RvbTJfZXZlbnRzaW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4
dEV2ZW50SW1wbDo6aXNJbnNlcnRUZXh0RXZlbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Okluc2VydFRleHRFdmVudEltcGw6OnRleHQpOiBBZGRlZC4KKwogMjAwNi0wMy0wMyAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFRlc3QgY2FzZSBmb3IgPHJk
YXI6Ly9wcm9ibGVtLzQ0NjU1OTg+IFJFR1JFU1NJT04gKFRPVCk6IENyYXNoIG9jY3VycyBhdCAK
</data>
<flag name="review"
          id="1759"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6878</attachid>
            <date>2006-03-05 15:02:56 -0800</date>
            <delta_ts>2006-03-05 15:49:06 -0800</delta_ts>
            <desc>patch</desc>
            <filename>maxlength_3_5.txt</filename>
            <type>text/plain</type>
            <size>37643</size>
            <attacher name="Adele Peterson">adele</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDEzMTQ4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDYtMDMtMDUgIEFkZWxlIFBldGVyc29uICA8
YWRlbGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3QgZm9yOgorICAgICAgICBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5v
cmcvc2hvd19idWcuY2dpP2lkPTY5ODcKKyAgICAgICAgSW1wbGVtZW50IG1heGxlbmd0aCBmb3Ig
bmV3IHRleHQgZmllbGRzCisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL2lucHV0LWFwcGVhcmFuY2Ut
bWF4bGVuZ3RoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9pbnB1
dC1hcHBlYXJhbmNlLW1heGxlbmd0aC5odG1sOiBBZGRlZC4KKwogMjAwNi0wMy0wNSAgQWxleGFu
ZGVyIEtlbGxldHQgIDxseXBhbm92QGtkZS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJp
Yy4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW5wdXQtYXBwZWFyYW5jZS1tYXhsZW5n
dGgtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW5w
dXQtYXBwZWFyYW5jZS1tYXhsZW5ndGgtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnB1dC1hcHBlYXJhbmNlLW1heGxlbmd0aC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKK0VESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6KG51bGwpIHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9m
ICN0ZXh0ID4gRElWIHRvIDUgb2YgI3RleHQgPiBESVYgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZp
bml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHdl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNh
dGlvbgorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5n
ZSBmcm9tIDAgb2YgI3RleHQgdG8gMyBvZiAjdGV4dCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gNCBv
ZiAjdGV4dCA+IERJViB0byA0IG9mICN0ZXh0ID4gRElWIGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZm
aW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiB3
ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmlj
YXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5n
ZU5vdGlmaWNhdGlvbgorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01S
YW5nZTpyYW5nZSBmcm9tIDQgb2YgI3RleHQgPiBESVYgdG8gNCBvZiAjdGV4dCA+IERJViB0b0RP
TVJhbmdlOnJhbmdlIGZyb20gNSBvZiAjdGV4dCA+IERJViB0byA1IG9mICN0ZXh0ID4gRElWIGFm
ZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNF
CitFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRD
aGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRD
aGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgorVGhpcyB0ZXN0IGNoYW5nZXMgdGhl
IHZhbHVlIG9mIHRoZSB0ZXh0IGZpZWxkIGJ5IHNpbXVsYXRpbmcgdHlwaW5nLCBhbmQgdGhlbiBn
ZXRzIHRoZSB2YWx1ZS4gCisKK1Rlc3QgMSBQYXNzZWQuIE1heGxlbmd0aCB3b3JrcyBmb3IgZGVm
YXVsdCB2YWx1ZS4gVGVzdCAyIFBhc3NlZC4gTWF4bGVuZ3RoIHdvcmtzIGZvciBpbnNlcnRlZCB0
ZXh0LgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2lucHV0LWFwcGVhcmFuY2UtbWF4
bGVuZ3RoLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnB1dC1h
cHBlYXJhbmNlLW1heGxlbmd0aC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9mb3Jtcy9pbnB1dC1hcHBlYXJhbmNlLW1heGxlbmd0aC5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQzIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKworZnVuY3Rpb24gdGVzdCgp
Cit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NwJykuZm9jdXMoKTsKKyAgICAKKyAg
ICB2YXIgcmVzID0gIiI7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgfQorICAgIAor
ICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3AnKS52YWx1ZSA9PSAiMTIzNDUiKSB7
CisgICAgICAgIHJlcys9ICJUZXN0IDEgUGFzc2VkLiAgTWF4bGVuZ3RoIHdvcmtzIGZvciBkZWZh
dWx0IHZhbHVlLlxuIjsKKyAgICB9IGVsc2UgeworICAgICAgICByZXMrPSAiVGVzdCAxIEZhaWxl
ZC4gIE1heGxlbmd0aCBkb2VzIG5vdCB3b3JrIGZvciBkZWZhdWx0IHZhbHVlLlxuIjsKKyAgICB9
CisgICAgCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NwJykudmFsdWUgPSAiMTIzIjsK
KyAgICAKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiSW5zZXJ0VGV4dCIsIGZhbHNlLCAnYWJj
ZCcpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJJbnNlcnRUZXh0IiwgZmFsc2UsICdlZmdo
aScpOworICAgIAorICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3AnKS52YWx1ZSA9
PSAiYWJjZGUiKSB7CisgICAgICAgIHJlcys9ICJUZXN0IDIgUGFzc2VkLiAgTWF4bGVuZ3RoIHdv
cmtzIGZvciBpbnNlcnRlZCB0ZXh0LlxuIjsKKyAgICB9IGVsc2UgeworICAgICAgICByZXMrPSAi
VGVzdCAyIEZhaWxlZC4gIE1heGxlbmd0aCBkb2VzIG5vdCB3b3JrIGZvciBpbnNlcnRlZCB0ZXh0
LlxuIjsKKyAgICB9CisgICAgCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdCcp
LmlubmVySFRNTCA9IHJlczsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9
InRlc3QoKSI+CitUaGlzIHRlc3QgY2hhbmdlcyB0aGUgdmFsdWUgb2YgdGhlIHRleHQgZmllbGQg
Ynkgc2ltdWxhdGluZyB0eXBpbmcsIGFuZCB0aGVuIGdldHMgdGhlIHZhbHVlLgorPGJyPjxicj4K
KzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic3AiIHN0eWxlPSIta2h0bWwtYXBwZWFyYW5jZTp0ZXh0
ZmllbGQiIG1heGxlbmd0aD01IHZhbHVlPSIxMjM0NTYiPjwvaW5wdXQ+Cis8ZGl2IGlkPSJyZXN1
bHQiPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBXZWJDb3JlL2todG1sL2h0bWwv
SFRNTFRleHRGaWVsZElubmVyRWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2to
dG1sL2h0bWwvSFRNTFRleHRGaWVsZElubmVyRWxlbWVudEltcGwuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUva2h0bWwvaHRtbC9IVE1MVGV4dEZpZWxkSW5uZXJFbGVtZW50SW1wbC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworIAorI2lmbmRlZiBI
VE1MX1RFWFRGSUVMRElOTkVSRUxFTUVOVElNUExfSAorI2RlZmluZSBIVE1MX1RFWFRGSUVMRElO
TkVSRUxFTUVOVElNUExfSAorCisjaW5jbHVkZSAiaHRtbF9ibG9ja2ltcGwuaCIKKworbmFtZXNw
YWNlIERPTSB7CisKK2NsYXNzIERPTVN0cmluZzsKKworY2xhc3MgSFRNTFRleHRGaWVsZElubmVy
RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnRJbXBsCit7CitwdWJsaWM6CisgICAg
SFRNTFRleHRGaWVsZElubmVyRWxlbWVudEltcGwoRG9jdW1lbnRJbXBsKiwgTm9kZUltcGwqIHNo
YWRvd1BhcmVudCA9IDApOworICAgIH5IVE1MVGV4dEZpZWxkSW5uZXJFbGVtZW50SW1wbCgpOwor
ICAgIAorICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50SW1wbCopOwor
CisgICAgTm9kZUltcGwqIHNoYWRvd1BhcmVudE5vZGUoKSB7IHJldHVybiBtX3NoYWRvd1BhcmVu
dDsgfQorICAgIHZvaWQgc2V0U2hhZG93UGFyZW50Tm9kZShOb2RlSW1wbCogbm9kZSkgeyBtX3No
YWRvd1BhcmVudCA9IG5vZGU7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgTm9kZUltcGwqIG1fc2hh
ZG93UGFyZW50OworfTsKKworfSAvL25hbWVzcGFjZQorCisjZW5kaWYKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCkluZGV4OiBXZWJDb3JlL2todG1sL2h0bWwvSFRNTElucHV0RWxlbWVudElt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwvaHRtbC9IVE1MSW5wdXRFbGVtZW50
SW1wbC5jcHAJKHJldmlzaW9uIDEzMDgyKQorKysgV2ViQ29yZS9raHRtbC9odG1sL0hUTUxJbnB1
dEVsZW1lbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTIgKzMxLDE0IEBACiAjaW5j
bHVkZSAiZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAKKyNp
bmNsdWRlICJCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudEltcGwuaCIKICNpbmNsdWRlICJjc3Nwcm9w
ZXJ0aWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJyZW5kZXJfZm9ybS5oIgog
I2luY2x1ZGUgInJlbmRlcl9idXR0b24uaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0RmllbGQuaCIK
ICNpbmNsdWRlICJyZW5kZXJfdGhlbWUuaCIKKyNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRJbXBsLmgiCiAKICNpbmNsdWRlIDxrbG9jYWxlLmg+CkBA
IC02OCw3ICs3MCw3IEBACiAgICAgbV9pbWFnZUxvYWRlciA9IDA7CiAgICAgbV92YWx1ZU1hdGNo
ZXNSZW5kZXJlciA9IGZhbHNlOwogICAgIG1fdHlwZSA9IFRFWFQ7Ci0gICAgbV9tYXhMZW4gPSAt
MTsKKyAgICBtX21heExlbiA9IDEwMjQ7CiAgICAgbV9zaXplID0gMjA7CiAgICAgbV9jaGVja2Vk
ID0gZmFsc2U7CiAgICAgbV9kZWZhdWx0Q2hlY2tlZCA9IGZhbHNlOwpAQCAtNTM3LDcgKzUzOSw5
IEBACiAgICAgICAgICAgICBtX3VzZURlZmF1bHRDaGVja2VkID0gdHJ1ZTsKICAgICAgICAgfQog
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG1heGxlbmd0aEF0dHIpIHsKLSAgICAgICAg
bV9tYXhMZW4gPSAhYXR0ci0+aXNOdWxsKCkgPyBhdHRyLT52YWx1ZSgpLnRvSW50KCkgOiAtMTsK
KyAgICAgICAgbV9tYXhMZW4gPSAhYXR0ci0+aXNOdWxsKCkgPyBhdHRyLT52YWx1ZSgpLnRvSW50
KCkgOiAxMDI0OworICAgICAgICBpZiAobV9tYXhMZW4gPD0gMCB8fCBtX21heExlbiA+IDEwMjQp
CisgICAgICAgICAgICBtX21heExlbiA9IDEwMjQ7CiAgICAgICAgIHNldENoYW5nZWQoKTsKICAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzaXplQXR0cikgewogICAgICAgICBtX3NpemUg
PSAhYXR0ci0+aXNOdWxsKCkgPyBhdHRyLT52YWx1ZSgpLnRvSW50KCkgOiAyMDsKQEAgLTExNzAs
NiArMTE3NCwyMCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKGV2dC0+aXNCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudCgpKSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXh0
IHRvIGJlIGluc2VydGVkIHdpbGwgbm90IHZpb2xhdGUgdGhlIG1heExlbmd0aAorICAgICAgICB1
bnNpZ25lZCBtbCA9IG1heExlbmd0aCgpOworICAgICAgICB1bnNpZ25lZCBjdXJyZW50TGVuZ3Ro
ID0gdmFsdWUoKS5sZW5ndGgoKTsKKyAgICAgICAgU3RyaW5nIHRleHQgPSBzdGF0aWNfY2FzdDxC
ZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudEltcGwgKj4oZXZ0KS0+dGV4dCgpOworICAgICAgICBpbnQg
c2VsZWN0aW9uTGVuZ3RoID0gZ2V0RG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkudG9T
dHJpbmcoKS5sZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRydW5jYXRlIHRoZSBpbnNl
cnRlZCB0ZXh0IGlmIG5lY2Vzc2FyeQorICAgICAgICBpZiAoY3VycmVudExlbmd0aCArIHRleHQu
bGVuZ3RoKCkgLSBzZWxlY3Rpb25MZW5ndGggPiBtbCkgeworICAgICAgICAgICAgQVNTRVJUKGN1
cnJlbnRMZW5ndGggPD0gbWwpOworICAgICAgICAgICAgdGV4dC50cnVuY2F0ZShtbCAtIGN1cnJl
bnRMZW5ndGgpOworICAgICAgICB9ICAgICAgICAKKyAgICB9CisgICAgCiAgICAgSFRNTEdlbmVy
aWNGb3JtRWxlbWVudEltcGw6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZ0KTsKIH0KIApJbmRleDog
V2ViQ29yZS9raHRtbC9odG1sL0hUTUxUZXh0RmllbGRJbm5lckVsZW1lbnRJbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL2h0bWwvSFRNTFRleHRGaWVsZElubmVyRWxlbWVudElt
cGwuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9raHRtbC9odG1sL0hUTUxUZXh0RmllbGRJ
bm5lckVsZW1lbnRJbXBsLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKyAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIVE1MVGV4dEZp
ZWxkSW5uZXJFbGVtZW50SW1wbC5oIgorCisjaW5jbHVkZSAiQmVmb3JlVGV4dEluc2VydGVkRXZl
bnRJbXBsLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgImRvbTJfZXZlbnRz
aW1wbC5oIgorI2luY2x1ZGUgImh0bWxfZG9jdW1lbnRpbXBsLmgiCisjaW5jbHVkZSAiSFRNTElu
cHV0RWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKKyNpbmNsdWRlICJyZW5k
ZXJfb2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dEZpZWxkLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBF
dmVudE5hbWVzOworCitIVE1MVGV4dEZpZWxkSW5uZXJFbGVtZW50SW1wbDo6SFRNTFRleHRGaWVs
ZElubmVyRWxlbWVudEltcGwoRG9jdW1lbnRJbXBsICpkb2MsIE5vZGVJbXBsICpzaGFkb3dQYXJl
bnQpCisgICAgOiBIVE1MRGl2RWxlbWVudEltcGwoZG9jKSwgbV9zaGFkb3dQYXJlbnQoc2hhZG93
UGFyZW50KQoreworfQorCitIVE1MVGV4dEZpZWxkSW5uZXJFbGVtZW50SW1wbDo6fkhUTUxUZXh0
RmllbGRJbm5lckVsZW1lbnRJbXBsKCkKK3sKK30KKwordm9pZCBIVE1MVGV4dEZpZWxkSW5uZXJF
bGVtZW50SW1wbDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudEltcGwgKmV2dCkKK3sKKyAgICBp
ZiAoc2hhZG93UGFyZW50Tm9kZSgpICYmIHNoYWRvd1BhcmVudE5vZGUoKS0+aGFzVGFnTmFtZShp
bnB1dFRhZykgJiYgc2hhZG93UGFyZW50Tm9kZSgpLT5yZW5kZXJlcigpICYmIHNoYWRvd1BhcmVu
dE5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUZXh0RmllbGQoKSkgeworICAgICAgICBpZiAoZXZ0LT5p
c0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50SW1wbCo+KHNoYWRvd1BhcmVudE5vZGUoKSktPmRlZmF1bHRFdmVudEhhbmRs
ZXIoZXZ0KTsKKworICAgICAgICBpZiAoZXZ0LT50eXBlKCkgPT0ga2h0bWxUZXh0SW5zZXJ0ZWRF
dmVudCkgeworICAgICAgICAgICAgaWYgKHNoYWRvd1BhcmVudE5vZGUoKS0+cmVuZGVyZXIoKS0+
c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFRleHRGaWVsZEFwcGVhcmFuY2UpIAorICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRleHRGaWVsZCo+KHNoYWRvd1BhcmVudE5vZGUoKS0+
cmVuZGVyZXIoKSktPnN1YnRyZWVIYXNDaGFuZ2VkKCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
SFRNTERpdkVsZW1lbnRJbXBsOjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7Cit9CisKK30KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0RmllbGQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Rmll
bGQuaAkocmV2aXNpb24gMTMwODIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Rmll
bGQuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMjkgKzIwLDE0IEBACiAjaWZuZGVmIFJlbmRlclRl
eHRGaWVsZF9ICiAjZGVmaW5lIFJlbmRlclRleHRGaWVsZF9ICiAKLSNpbmNsdWRlICJkb20yX2V2
ZW50cy5oIgogI2luY2x1ZGUgInJlbmRlcl9mbGV4Ym94LmgiCi0jaW5jbHVkZSAiaHRtbF9ibG9j
a2ltcGwuaCIKKyNpbmNsdWRlICJIVE1MVGV4dEZpZWxkSW5uZXJFbGVtZW50SW1wbC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZQogewogCiBjbGFzcyBSZW5kZXJUZXh0RmllbGQ7CiAKLWNsYXNzIElu
cHV0TXV0YXRpb25MaXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVyCi17Ci1wdWJsaWM6Ci0g
ICAgSW5wdXRNdXRhdGlvbkxpc3RlbmVyKCkgeyBtX3JlbmRlclRleHRGaWVsZCA9IDA7IH0KLSAg
ICBJbnB1dE11dGF0aW9uTGlzdGVuZXIoUmVuZGVyVGV4dEZpZWxkICpyKSB7IG1fcmVuZGVyVGV4
dEZpZWxkID0gcjsgfQotICAgIFJlbmRlclRleHRGaWVsZCAqcmVuZGVyVGV4dEZpZWxkKCkgY29u
c3QgeyByZXR1cm4gbV9yZW5kZXJUZXh0RmllbGQ7IH0KLSAgICB2b2lkIHNldElucHV0RWxlbWVu
dChSZW5kZXJUZXh0RmllbGQgKnIpIHsgbV9yZW5kZXJUZXh0RmllbGQgPSByOyB9Ci0gICAgCi0g
ICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50TGlzdGVuZXJFdmVudCBldnQsIGJvb2wg
aXNXaW5kb3dFdmVudCk7Ci0gICAgCi1wcml2YXRlOgotICAgIFJlbmRlclRleHRGaWVsZCAqbV9y
ZW5kZXJUZXh0RmllbGQ7Ci19OwotCiBjbGFzcyBSZW5kZXJUZXh0RmllbGQgOiBwdWJsaWMgUmVu
ZGVyQmxvY2sKIHsKIHB1YmxpYzoKQEAgLTY5LDEwICs1NCwxMCBAQAogICAgIHZvaWQgc2V0U2Vs
ZWN0aW9uUmFuZ2UoaW50LCBpbnQpOwogCiAgICAgdm9pZCBzdWJ0cmVlSGFzQ2hhbmdlZCgpOwor
ICAgIFN0cmluZyB0ZXh0KCk7CiAKIHByb3RlY3RlZDoKLSAgICBSZWZQdHI8SFRNTERpdkVsZW1l
bnRJbXBsPiBtX2RpdjsKLSAgICBSZWZQdHI8SW5wdXRNdXRhdGlvbkxpc3RlbmVyPiBtX211dGF0
aW9uTGlzdGVuZXI7CisgICAgUmVmUHRyPEhUTUxUZXh0RmllbGRJbm5lckVsZW1lbnRJbXBsPiBt
X2RpdjsKICAgICAKICAgICBib29sIG1fZGlydHk7CiB9OwpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dEZpZWxkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0RmllbGQuY3BwCShyZXZpc2lvbiAxMzA4MikKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRGaWVsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDI1ICsyNywxMyBAQAog
I2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnRJbXBsLmgi
CiAjaW5jbHVkZSAiZG9tX2VsZW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgot
I2luY2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIAot
dm9pZCBJbnB1dE11dGF0aW9uTGlzdGVuZXI6OmhhbmRsZUV2ZW50KEV2ZW50SW1wbCAqZXZlbnQs
IGJvb2wgaXNXaW5kb3dFdmVudCkKLXsKLSAgICBpZiAoIW1fcmVuZGVyVGV4dEZpZWxkKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gRE9NQ2hhcmFjdGVy
RGF0YU1vZGlmaWVkRXZlbnQpCi0gICAgICAgIG1fcmVuZGVyVGV4dEZpZWxkLT5zdWJ0cmVlSGFz
Q2hhbmdlZCgpOwotfQotCiBSZW5kZXJUZXh0RmllbGQ6OlJlbmRlclRleHRGaWVsZChOb2RlSW1w
bCogbm9kZSkKLTpSZW5kZXJCbG9jayhub2RlKSwgbV9tdXRhdGlvbkxpc3RlbmVyKG5ldyBJbnB1
dE11dGF0aW9uTGlzdGVuZXIodGhpcykpLCBtX2RpcnR5KGZhbHNlKQorOlJlbmRlckJsb2NrKG5v
ZGUpLCBtX2RpcnR5KGZhbHNlKQogewogfQogCkBAIC01Myw3ICs0MSw2IEBACiB7CiAgICAgLy8g
VGhlIHJlbmRlcmVyIGZvciB0aGUgZGl2IGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkIGJ5IGRl
c3Ryb3lMZWZ0b3ZlckNoaWxkcmVuCiAgICAgaWYgKG1fZGl2KSB7Ci0gICAgICAgIG1fZGl2LT5y
ZW1vdmVFdmVudExpc3RlbmVyKERPTUNoYXJhY3RlckRhdGFNb2RpZmllZEV2ZW50LCBtX211dGF0
aW9uTGlzdGVuZXIuZ2V0KCksIGZhbHNlKTsKICAgICAgICAgbV9kaXYtPmRldGFjaCgpOwogICAg
IH0KIH0KQEAgLTg1LDEzICs3MiwxOSBAQAogewogICAgIGlmIChlbGVtZW50KCktPmhhc1RhZ05h
bWUoaW5wdXRUYWcpKSB7CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsKiBpbnB1dCA9IHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oZWxlbWVudCgpKTsKLSAgICAgICAgRE9N
U3RyaW5nIHZhbHVlID0gaW5wdXQtPnZhbHVlKCk7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9IGlu
cHV0LT52YWx1ZSgpLmNvcHkoKTsKICAgICAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQotICAgICAg
ICAgICAgdmFsdWUgPSBET01TdHJpbmcoIiIpOworICAgICAgICAgICAgdmFsdWUgPSBTdHJpbmco
IiIpOworICAgICAgICB1bnNpZ25lZCBtbCA9IGlucHV0LT5tYXhMZW5ndGgoKTsKKyAgICAgICAg
Ym9vbCB2YWx1ZUhhc0NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCgp
ID4gbWwpIHsKKyAgICAgICAgICAgIHZhbHVlLnRydW5jYXRlKG1sKTsKKyAgICAgICAgICAgIHZh
bHVlSGFzQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBp
ZiAoIW1fZGl2KSB7CiAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGRpdiBhbmQgZ2l2ZSBpdCBh
IHBhcmVudCwgcmVuZGVyZXIsIGFuZCBzdHlsZQotICAgICAgICAgICAgbV9kaXYgPSBuZXcgSFRN
TERpdkVsZW1lbnRJbXBsKGRvY3VtZW50KCkpOworICAgICAgICAgICAgbV9kaXYgPSBuZXcgSFRN
TFRleHRGaWVsZElubmVyRWxlbWVudEltcGwoZG9jdW1lbnQoKSwgZWxlbWVudCgpKTsKICAgICAg
ICAgICAgIFJlbmRlckJsb2NrKiBkaXZSZW5kZXJlciA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVu
ZGVyQmxvY2sobV9kaXYuZ2V0KCkpOwogICAgICAgICAgICAgbV9kaXYtPnNldFJlbmRlcmVyKGRp
dlJlbmRlcmVyKTsKICAgICAgICAgICAgIG1fZGl2LT5zZXRBdHRhY2hlZCgpOwpAQCAtMTEyLDEx
ICsxMDUsMTAgQEAKICAgICAgICAgICAgIHRleHQgPSBuZXcgVGV4dEltcGwoZG9jdW1lbnQoKSwg
dmFsdWUuaW1wbCgpKTsKICAgICAgICAgICAgIGludCBleGNlcHRpb24gPSAwOwogICAgICAgICAg
ICAgbV9kaXYtPmFwcGVuZENoaWxkKHRleHQsIGV4Y2VwdGlvbik7Ci0gICAgICAgICAgICBtX2Rp
di0+YWRkRXZlbnRMaXN0ZW5lcihET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWRFdmVudCwgbV9tdXRh
dGlvbkxpc3RlbmVyLmdldCgpLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IGlmICghaW5wdXQtPnZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkpIHsKLSAgICAgICAgICAgIERPTVN0
cmluZyBvbGRUZXh0ID0gdGV4dC0+ZGF0YSgpOworICAgICAgICAgICAgU3RyaW5nIG9sZFRleHQg
PSB0aGlzLT50ZXh0KCk7CiAgICAgICAgICAgICB2YWx1ZS5yZXBsYWNlKFFDaGFyKCdcXCcpLCBi
YWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOwogICAgICAgICAgICAgaWYgKHZhbHVlICE9IG9s
ZFRleHQpIHsKICAgICAgICAgICAgICAgICBpbnQgZXhjZXB0aW9uID0gMDsKQEAgLTEyNiw2ICsx
MTgsOSBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaW5wdXQtPnNldFZhbHVlTWF0Y2hl
c1JlbmRlcmVyKCk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2YWx1ZUhhc0No
YW5nZWQpCisgICAgICAgICAgICBpbnB1dC0+c2V0VmFsdWVGcm9tUmVuZGVyZXIodmFsdWUpOwog
ICAgIH0KIH0KIApAQCAtMTY3LDEyICsxNjIsMTkgQEAKIHZvaWQgUmVuZGVyVGV4dEZpZWxkOjpz
dWJ0cmVlSGFzQ2hhbmdlZCgpCiB7CiAgICAgSFRNTElucHV0RWxlbWVudEltcGwqIGlucHV0ID0g
c3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihlbGVtZW50KCkpOwotICAgIGlmIChp
bnB1dCAmJiBtX2RpdikgewotICAgICAgICBpbnB1dC0+c2V0VmFsdWVGcm9tUmVuZGVyZXIobV9k
aXYtPnRleHRDb250ZW50KCkpOworICAgIGlmIChpbnB1dCkgeworICAgICAgICBpbnB1dC0+c2V0
VmFsdWVGcm9tUmVuZGVyZXIodGV4dCgpKTsKICAgICAgICAgc2V0RWRpdGVkKHRydWUpOwogICAg
IH0KIH0KIAorU3RyaW5nIFJlbmRlclRleHRGaWVsZDo6dGV4dCgpCit7CisgICAgaWYgKG1fZGl2
KQorICAgICAgICByZXR1cm4gbV9kaXYtPnRleHRDb250ZW50KCk7CisgICAgcmV0dXJuIFN0cmlu
ZygpOworfQorCiB2b2lkIFJlbmRlclRleHRGaWVsZDo6Y2FsY01pbk1heFdpZHRoKCkKIHsKICAg
ICBSZW5kZXJCbG9jazo6Y2FsY01pbk1heFdpZHRoKCk7CkluZGV4OiBXZWJDb3JlL2RvbS9kb20y
X2V2ZW50c2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL2RvbTJfZXZlbnRzaW1w
bC5jcHAJKHJldmlzaW9uIDEzMDgyKQorKysgV2ViQ29yZS9kb20vZG9tMl9ldmVudHNpbXBsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCwxMSBAQAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAorYm9vbCBFdmVudEltcGw6OmlzQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoKSBjb25zdAor
eworICAgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBFdmVudEltcGw6OnN0b3Jlc1Jlc3VsdEFz
U3RyaW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3JlL2RvbS9F
dmVudE5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCShyZXZp
c2lvbiAxMzA4MikKKysrIFdlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtODQsMTIgKzg0LDE0IEBACiAgICAgbWFjcm8oRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQp
IFwKICAgICBtYWNybyhET01TdWJ0cmVlTW9kaWZpZWQpIFwKICAgICBcCisgICAgbWFjcm8oa2h0
bWxCZWZvcmVUZXh0SW5zZXJ0ZWQpIFwKICAgICBtYWNybyhraHRtbERibGNsaWNrKSBcCiAgICAg
bWFjcm8oa2h0bWxEcmFnZHJvcCkgXAogICAgIG1hY3JvKGtodG1sRXJyb3IpIFwKICAgICBtYWNy
byhraHRtbEhvcml6b250YWxtb3VzZXdoZWVsKSBcCiAgICAgbWFjcm8oa2h0bWxNb3ZlKSBcCiAg
ICAgbWFjcm8oa2h0bWxPcmlnY2xpY2tNb3VzZXVwKSBcCisgICAgbWFjcm8oa2h0bWxUZXh0SW5z
ZXJ0ZWQpIFwKICAgICBcCiAvLyBlbmQgb2YgRE9NX0VWRU5UX05BTUVTX0ZPUl9FQUNICiAKSW5k
ZXg6IFdlYkNvcmUvZG9tL0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50SW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50SW1wbC5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9kb20vQmVmb3JlVGV4dEluc2VydGVkRXZlbnRJbXBsLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisgCisjaWZuZGVmIEJFRk9S
RVRFWFRJTlNFUlRFREVWRU5USU1QTF9ICisjZGVmaW5lIEJFRk9SRVRFWFRJTlNFUlRFREVWRU5U
SU1QTF9ICisKKyNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJlZm9yZVRleHRJbnNl
cnRlZEV2ZW50SW1wbCA6IHB1YmxpYyBFdmVudEltcGwKK3sKK3B1YmxpYzoKKyAgICBCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudEltcGwoU3RyaW5nJik7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNCZWZv
cmVUZXh0SW5zZXJ0ZWRFdmVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgCisgICAgU3Ry
aW5nIHRleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHQ7IH0KKworcHJpdmF0ZToKKyAgICBTdHJp
bmcgbV90ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpJbmRleDogV2ViQ29yZS9kb20vQmVmb3JlVGV4dEluc2VydGVkRXZlbnRJ
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dEltcGwuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vQmVmb3JlVGV4dEluc2VydGVk
RXZlbnRJbXBsLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJlZm9yZVRleHRJbnNlcnRl
ZEV2ZW50SW1wbC5oIgorCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOworCitCZWZvcmVUZXh0SW5zZXJ0
ZWRFdmVudEltcGw6OkJlZm9yZVRleHRJbnNlcnRlZEV2ZW50SW1wbChTdHJpbmcmIHRleHQpCisg
ICAgOiBFdmVudEltcGwoa2h0bWxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCwgZmFsc2UsIHRydWUp
LCBtX3RleHQodGV4dCkKK3sKK30KKworfQorCkluZGV4OiBXZWJDb3JlL2RvbS9kb20yX2V2ZW50
c2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9kb20yX2V2ZW50c2ltcGwuaAkocmV2
aXNpb24gMTMwODIpCisrKyBXZWJDb3JlL2RvbS9kb20yX2V2ZW50c2ltcGwuaAkod29ya2luZyBj
b3B5KQpAQCAtNjksNiArNjksNyBAQAogICAgIHZpcnR1YWwgYm9vbCBpc0RyYWdFdmVudCgpIGNv
bnN0OyAvLyBhIHN1YnNldCBvZiBtb3VzZSBldmVudHMKICAgICB2aXJ0dWFsIGJvb2wgaXNDbGlw
Ym9hcmRFdmVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1doZWVsRXZlbnQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpIGNvbnN0Owog
CiAgICAgYm9vbCBwcm9wYWdhdGlvblN0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX3Byb3BhZ2F0
aW9uU3RvcHBlZDsgfQogICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGVmYXVsdFByZXZlbnRlZDsgfQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEzMDgyKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg2Myw2ICs4NjMsMTAgQEAK
IAkJQThGRUZCMEIwOTc5RjQ3MjAwNTgzOUZEIC8qIFJlbmRlckZvcmVpZ25PYmplY3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThGRUZCMDkwOTc5
RjQ3MjAwNTgzOUZEIC8qIFJlbmRlckZvcmVpZ25PYmplY3QuY3BwICovOyB9OwogCQlBOEZFRkIz
MTA5NzlGNEY2MDA1ODM5RkQgLyogU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnRJbXBsLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RkVGQjJGMDk3OUY0
RjYwMDU4MzlGRCAvKiBTVkdGb3JlaWduT2JqZWN0RWxlbWVudEltcGwuY3BwICovOyB9OwogCQlB
OEZFRkIzMjA5NzlGNEY2MDA1ODM5RkQgLyogU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnRJbXBsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEZFRkIzMDA5
NzlGNEY2MDA1ODM5RkQgLyogU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnRJbXBsLmggKi87IH07CisJ
CUFCMjNBMTE3MDlCQTY0M0EwMDY3Q0M1MyAvKiBIVE1MVGV4dEZpZWxkSW5uZXJFbGVtZW50SW1w
bC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQjIz
QTExNTA5QkE2NDNBMDA2N0NDNTMgLyogSFRNTFRleHRGaWVsZElubmVyRWxlbWVudEltcGwuY3Bw
ICovOyB9OworCQlBQjIzQTExODA5QkE2NDNBMDA2N0NDNTMgLyogSFRNTFRleHRGaWVsZElubmVy
RWxlbWVudEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEFCMjNBMTE2MDlCQTY0M0EwMDY3Q0M1MyAvKiBIVE1MVGV4dEZpZWxkSW5uZXJFbGVtZW50
SW1wbC5oICovOyB9OworCQlBQjIzQTEyMzA5QkE2NUFDMDA2N0NDNTMgLyogQmVmb3JlVGV4dElu
c2VydGVkRXZlbnRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBQjIzQTEyMjA5QkE2NUFDMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVkRXZl
bnRJbXBsLmggKi87IH07CisJCUFCMjNBMTQ5MDlCQTY3MjAwMDY3Q0M1MyAvKiBCZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQUIyM0ExNDgwOUJBNjcyMDAwNjdDQzUzIC8qIEJlZm9yZVRleHRJbnNlcnRl
ZEV2ZW50SW1wbC5jcHAgKi87IH07CiAJCUFCNjdEMUE4MDk3RjNBRTMwMEY5MzkyRSAvKiBSZW5k
ZXJUZXh0RmllbGQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUI2N0QxQTYwOTdGM0FFMzAwRjkzOTJFIC8qIFJlbmRlclRleHRGaWVsZC5jcHAgKi87
IH07CiAJCUFCNjdEMUE5MDk3RjNBRTMwMEY5MzkyRSAvKiBSZW5kZXJUZXh0RmllbGQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCNjdEMUE3MDk3RjNB
RTMwMEY5MzkyRSAvKiBSZW5kZXJUZXh0RmllbGQuaCAqLzsgfTsKIAkJQkMwNzU5ODYwOTg4NjFB
NDAwNDA3QjQ4IC8qIEJydXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzA3NTk4NTA5ODg2MUE0MDA0MDdCNDggLyogQnJ1c2guaCAqLzsgfTsKQEAg
LTE5MDksNiArMTkxMywxMCBAQAogCQlBOEZFRkIwOTA5NzlGNDcyMDA1ODM5RkQgLyogUmVuZGVy
Rm9yZWlnbk9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyRm9yZWlnbk9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4
RkVGQjJGMDk3OUY0RjYwMDU4MzlGRCAvKiBTVkdGb3JlaWduT2JqZWN0RWxlbWVudEltcGwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZvcmVpZ25PYmplY3RF
bGVtZW50SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4RkVGQjMwMDk3
OUY0RjYwMDU4MzlGRCAvKiBTVkdGb3JlaWduT2JqZWN0RWxlbWVudEltcGwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50SW1wbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBQjIzQTExNTA5QkE2NDNBMDA2N0NDNTMgLyog
SFRNTFRleHRGaWVsZElubmVyRWxlbWVudEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEhUTUxUZXh0RmllbGRJbm5lckVsZW1lbnRJbXBsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUIyM0ExMTYwOUJBNjQzQTAwNjdDQzUzIC8qIEhUTUxU
ZXh0RmllbGRJbm5lckVsZW1lbnRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBIVE1MVGV4dEZpZWxkSW5uZXJFbGVtZW50SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBQjIzQTEyMjA5QkE2NUFDMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVk
RXZlbnRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUIyM0Ex
NDgwOUJBNjcyMDAwNjdDQzUzIC8qIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50SW1wbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmVmb3JlVGV4dEluc2VydGVkRXZl
bnRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUI2N0QxQTYwOTdGM0FF
MzAwRjkzOTJFIC8qIFJlbmRlclRleHRGaWVsZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVuZGVyVGV4dEZpZWxkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQUI2N0QxQTcwOTdGM0FFMzAwRjkzOTJFIC8qIFJlbmRlclRleHRGaWVsZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVGV4dEZpZWxkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDZGMjQ5MDZEMThBN0UwMDRBNkZBMyAvKiB4c2xf
c3R5bGVzaGVldGltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0geHNsX3N0eWxlc2hlZXRpbXBsLmNwcDsgcGF0aCA9IHhzbC94c2xf
c3R5bGVzaGVldGltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7
IHVzZXNUYWJzID0gMDsgfTsKQEAgLTM1NjcsNiArMzU3NSw4IEBACiAJCUY1MjNEMjc3MDJERTQz
OTgwMTg2MzVDQSAvKiBodG1sICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQlBQjIzQTExNTA5QkE2NDNBMDA2N0NDNTMgLyogSFRNTFRleHRGaWVsZElubmVy
RWxlbWVudEltcGwuY3BwICovLAorCQkJCUFCMjNBMTE2MDlCQTY0M0EwMDY3Q0M1MyAvKiBIVE1M
VGV4dEZpZWxkSW5uZXJFbGVtZW50SW1wbC5oICovLAogCQkJCUE4MTM2RDM3MDk3M0E4RTcwMEQ3
NDQ2MyAvKiBGb3JtRGF0YUxpc3QuY3BwICovLAogCQkJCUE4MTM2RDM2MDk3M0E4RTcwMEQ3NDQ2
MyAvKiBGb3JtRGF0YUxpc3QuaCAqLywKIAkJCQlGNTIzRDIzNzAyREU0Mzk2MDE4NjM1Q0EgLyog
aHRtbF9iYXNlaW1wbC5jcHAgKi8sCkBAIC0zNzM0LDYgKzM3NDQsOCBAQAogCQlGNTIzRDMyNDAy
REU0NDc4MDE4NjM1Q0EgLyogZG9tICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQlBQjIzQTE0ODA5QkE2NzIwMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2Vy
dGVkRXZlbnRJbXBsLmNwcCAqLywKKwkJCQlBQjIzQTEyMjA5QkE2NUFDMDA2N0NDNTMgLyogQmVm
b3JlVGV4dEluc2VydGVkRXZlbnRJbXBsLmggKi8sCiAJCQkJRUQyQkE4M0IwOUEyNEI5MTAwNkMw
QUM0IC8qIERvY3VtZW50TWFya2VyLmggKi8sCiAJCQkJOTM5ODg1QzEwOEI3RTNEMTAwRTcwN0M0
IC8qIEV2ZW50TmFtZXMuY3BwICovLAogCQkJCTkzOTg4NUMyMDhCN0UzRDEwMEU3MDdDNCAvKiBF
dmVudE5hbWVzLmggKi8sCkBAIC00NDExLDYgKzQ0MjMsOCBAQAogCQkJCUE4MjM5OEE2MDlCM0FD
REIwMEI2MDY0MSAvKiBQbHVnSW5JbmZvU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MjM5
RTAxMDlCM0NGOEEwMEI2MDY0MSAvKiBMb2dnaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNkQ3
NEFENTA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQUIyM0ExMTgwOUJBNjQzQTAwNjdDQzUzIC8qIEhUTUxUZXh0
RmllbGRJbm5lckVsZW1lbnRJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlBQjIzQTEyMzA5QkE2
NUFDMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVkRXZlbnRJbXBsLmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTU1MjgsNiArNTU0Miw4IEBACiAJCQkJQTgyMzk4QTgwOUIzQUNGNTAwQjYwNjQxIC8q
IFBsdWdJbkluZm9TdG9yZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4MjM5RTAwMDlCM0NG
OEEwMEI2MDY0MSAvKiBMb2dnaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM2RDc0QUU0MDlB
QTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUFCMjNBMTE3MDlCQTY0M0EwMDY3Q0M1MyAvKiBIVE1MVGV4dEZpZWxk
SW5uZXJFbGVtZW50SW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBQjIzQTE0OTA5QkE2NzIw
MDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVkRXZlbnRJbXBsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShy
ZXZpc2lvbiAxMzA4MikKKysrIFdlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5oIgogCiAjaW5jbHVkZSAiQXBwbHlTdHlsZUNvbW1hbmQuaCIKKyNp
bmNsdWRlICJCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudEltcGwuaCIKICNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50SW1wbC5oIgogI2luY2x1ZGUgIkRvY3VtZW50SW1wbC5oIgogI2luY2x1ZGUgIkVk
aXRpbmdUZXh0SW1wbC5oIgpAQCAtMzYsMTMgKzM3LDE2IEBACiAjaW5jbHVkZSAiY3NzX2NvbXB1
dGVkc3R5bGUuaCIKICNpbmNsdWRlICJjc3NfdmFsdWVpbXBsLmgiCiAjaW5jbHVkZSAiY3NzcHJv
cGVydGllcy5oIgorI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgImRvbTJf
cmFuZ2VpbXBsLmgiCiAjaW5jbHVkZSAiZG9tX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAiaHRtbF9p
bnRlcmNoYW5nZS5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAiaHRtbG5h
bWVzLmgiCiAjaW5jbHVkZSAicmVuZGVyX29iamVjdC5oIgorI2luY2x1ZGUgIlNlbGVjdGlvbkNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCisjaW5jbHVkZSAidmlzaWJs
ZV90ZXh0LmgiCiAjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0xMTgsNiArMTIyLDMxIEBACiAgICAgICAgIGNvbXB1dGVTdHlsZXNVc2lu
Z1Rlc3RSZW5kZXJpbmcoaG9sZGVyLmdldCgpKTsKICAgICByZW1vdmVVbnJlbmRlcmVkTm9kZXNV
c2luZ1Rlc3RSZW5kZXJpbmcoaG9sZGVyLmdldCgpKTsKICAgICBtX2hhc01vcmVUaGFuT25lQmxv
Y2sgPSBjb3VudFJlbmRlcmVkQmxvY2tzKGhvbGRlci5nZXQoKSkgPiAxOworICAgIAorICAgIC8v
IFNlbmQga2h0bWxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC4gIFRoZSBldmVudCBoYW5kbGVyIHdp
bGwgdXBkYXRlIHRleHQgaWYgbmVjZXNzYXJ5LgorICAgIFJlZlB0cjxSYW5nZUltcGw+IHJhbmdl
ID0gbmV3IFJhbmdlSW1wbChob2xkZXItPmdldERvY3VtZW50KCksIGhvbGRlci0+Zmlyc3RDaGls
ZCgpLCAwLCBob2xkZXItPmxhc3RDaGlsZCgpLCBtYXhEZWVwT2Zmc2V0KGhvbGRlci0+bGFzdENo
aWxkKCkpKTsKKyAgICBTdHJpbmcgdGV4dCA9IHBsYWluVGV4dChyYW5nZS5nZXQoKSk7CisgICAg
aWYgKG1fZG9jdW1lbnQtPmZyYW1lKCkpIHsKKyAgICAgICAgTm9kZUltcGwqIHNlbGVjdGlvblN0
YXJ0Tm9kZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbigpLnN0YXJ0KCkubm9kZSgp
OworICAgICAgICBpZiAoc2VsZWN0aW9uU3RhcnROb2RlICYmIHNlbGVjdGlvblN0YXJ0Tm9kZS0+
cm9vdEVkaXRhYmxlRWxlbWVudCgpKSB7CisgICAgICAgICAgICBpbnQgZWMgPSAwOworICAgICAg
ICAgICAgU3RyaW5nIG5ld1RleHQgPSB0ZXh0LmNvcHkoKTsKKyAgICAgICAgICAgIFJlZlB0cjxF
dmVudEltcGw+IGV2dCA9IG5ldyBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudEltcGwobmV3VGV4dCk7
CisgICAgICAgICAgICBzZWxlY3Rpb25TdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKS0+
ZGlzcGF0Y2hFdmVudChldnQsIGVjLCB0cnVlKTsKKyAgICAgICAgICAgIGlmICh0ZXh0ICE9IG5l
d1RleHQpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZXZlbnQgaGFuZGxlciBoYXMgY2hh
bmdlZCB0aGUgdGV4dCwgY3JlYXRlIGEgbmV3IGhvbGRlciBub2RlIGZvciB0ZXN0IHJlbmRlcmlu
ZworICAgICAgICAgICAgICAgIG1fZnJhZ21lbnQtPnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAg
ICAgICAgICAgbV9mcmFnbWVudC0+YXBwZW5kQ2hpbGQobmV3IFRleHRJbXBsKG1fZG9jdW1lbnQu
Z2V0KCksIG5ld1RleHQpLCBlYyk7CisgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShob2xkZXIp
OworICAgICAgICAgICAgICAgIGhvbGRlciA9IGluc2VydEZyYWdtZW50Rm9yVGVzdFJlbmRlcmlu
ZygpOworICAgICAgICAgICAgICAgIGlmICghbV9tYXRjaFN0eWxlKQorICAgICAgICAgICAgICAg
ICAgICBjb21wdXRlU3R5bGVzVXNpbmdUZXN0UmVuZGVyaW5nKGhvbGRlci5nZXQoKSk7CisgICAg
ICAgICAgICAgICAgcmVtb3ZlVW5yZW5kZXJlZE5vZGVzVXNpbmdUZXN0UmVuZGVyaW5nKGhvbGRl
ci5nZXQoKSk7CisgICAgICAgICAgICAgICAgbV9oYXNNb3JlVGhhbk9uZUJsb2NrID0gY291bnRS
ZW5kZXJlZEJsb2Nrcyhob2xkZXIuZ2V0KCkpID4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICAKICAgICByZXN0b3JlVGVzdFJlbmRlcmluZ05vZGVzVG9GcmFnbWVudCho
b2xkZXIuZ2V0KCkpOwogICAgIHJlbW92ZU5vZGUoaG9sZGVyKTsKICAgICByZW1vdmVTdHlsZU5v
ZGVzKCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCShyZXZpc2lvbiAxMzA4MikK
KysrIFdlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsOCArMjYsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUeXBpbmdDb21t
YW5kLmgiCiAKKyNpbmNsdWRlICJCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudEltcGwuaCIKICNpbmNs
dWRlICJCcmVha0Jsb2NrcXVvdGVDb21tYW5kLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRJbXBsLmgi
CisjaW5jbHVkZSAiZG9tMl9ldmVudHMuaCIKKyNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkluc2VydExpbmVCcmVha0NvbW1hbmQuaCIK
ICNpbmNsdWRlICJJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmgiCkBAIC05NiwxMyAr
OTksMjYgQEAKICAgICBGcmFtZSAqZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKICAgICBBU1NF
UlQoZnJhbWUpOwogICAgIAorICAgIFN0cmluZyBuZXdUZXh0ID0gdGV4dC5jb3B5KCk7CisgICAg
Tm9kZUltcGwqIHN0YXJ0Tm9kZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zdGFydCgpLm5vZGUoKTsK
KyAgICAKKyAgICBpZiAoc3RhcnROb2RlICYmIHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVu
dCgpKSB7ICAgICAgICAKKyAgICAgICAgLy8gU2VuZCBraHRtbEJlZm9yZVRleHRJbnNlcnRlZEV2
ZW50LiAgVGhlIGV2ZW50IGhhbmRsZXIgd2lsbCB1cGRhdGUgdGV4dCBpZiBuZWNlc3NhcnkuCisg
ICAgICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKKyAgICAgICAgUmVmUHRyPEV2ZW50SW1wbD4g
ZXZ0ID0gbmV3IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50SW1wbChuZXdUZXh0KTsKKyAgICAgICAg
c3RhcnROb2RlLT5yb290RWRpdGFibGVFbGVtZW50KCktPmRpc3BhdGNoRXZlbnQoZXZ0LCBleGNl
cHRpb25Db2RlLCB0cnVlKTsKKyAgICB9CisgICAgCisgICAgaWYgKG5ld1RleHQuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgRWRpdENvbW1hbmRQdHIgbGFzdEVkaXRDb21t
YW5kID0gZnJhbWUtPmxhc3RFZGl0Q29tbWFuZCgpOwogICAgIGlmIChpc09wZW5Gb3JNb3JlVHlw
aW5nQ29tbWFuZChsYXN0RWRpdENvbW1hbmQpKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PFR5cGlu
Z0NvbW1hbmQgKj4obGFzdEVkaXRDb21tYW5kLmdldCgpKS0+aW5zZXJ0VGV4dCh0ZXh0LCBzZWxl
Y3RJbnNlcnRlZFRleHQpOworICAgICAgICBzdGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kICo+KGxh
c3RFZGl0Q29tbWFuZC5nZXQoKSktPmluc2VydFRleHQobmV3VGV4dCwgc2VsZWN0SW5zZXJ0ZWRU
ZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEVkaXRDb21tYW5kUHRyIGNtZChu
ZXcgVHlwaW5nQ29tbWFuZChkb2N1bWVudCwgSW5zZXJ0VGV4dCwgdGV4dCwgc2VsZWN0SW5zZXJ0
ZWRUZXh0KSk7CisgICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBUeXBpbmdDb21tYW5kKGRvY3Vt
ZW50LCBJbnNlcnRUZXh0LCBuZXdUZXh0LCBzZWxlY3RJbnNlcnRlZFRleHQpKTsKICAgICBjbWQu
YXBwbHkoKTsKIH0KIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiAxMzA4
MikKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDEyICszMiwxNiBAQAogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogI2luY2x1ZGUg
ImNzc19jb21wdXRlZHN0eWxlLmgiCiAjaW5jbHVkZSAiY3NzX3ZhbHVlaW1wbC5oIgorI2luY2x1
ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgImRvbV9wb3NpdGlvbi5oIgorI2luY2x1
ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgPGt4
bWxjb3JlL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1c2luZyBuYW1l
c3BhY2UgRXZlbnROYW1lczsKKwogI2RlZmluZSBJRl9JTVBMX05VTExfUkVUVVJOX0FSRyhhcmcp
IGRvIHsgXAogICAgICAgICBpZiAoKnRoaXMgPT0gMCkgeyByZXR1cm4gYXJnOyB9IFwKICAgICB9
IHdoaWxlICgwKQpAQCAtMjE3LDYgKzIyMSwxNCBAQAogICAgICAgICBFZGl0Q29tbWFuZFB0ciBj
bWQodGhpcyk7CiAgICAgICAgIGZyYW1lLT5hcHBsaWVkRWRpdGluZyhjbWQpOwogICAgIH0KKyAg
ICAKKyAgICBOb2RlSW1wbCogc3RhcnROb2RlID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKS5u
b2RlKCk7CisgICAgaWYgKHN0YXJ0Tm9kZSAmJiBzdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1l
bnQoKSkgeworICAgICAgICAvLyBTZW5kIGtodG1sVGV4dEluc2VydGVkRXZlbnQgdG8gcm9vdEVk
aXRhYmxlRWxlbWVudC4KKyAgICAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOworICAgICAgICBS
ZWZQdHI8RXZlbnRJbXBsPiBldnQgPSBuZXcgRXZlbnRJbXBsKGtodG1sVGV4dEluc2VydGVkRXZl
bnQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVu
dCgpLT5kaXNwYXRjaEV2ZW50KGV2dCwgZXhjZXB0aW9uQ29kZSwgdHJ1ZSk7CisgICAgfQogfQog
CiB2b2lkIEVkaXRDb21tYW5kOjp1bmFwcGx5KCkKQEAgLTIzOCw2ICsyNTAsMTQgQEAKICAgICAg
ICAgRWRpdENvbW1hbmRQdHIgY21kKHRoaXMpOwogICAgICAgICBmcmFtZS0+dW5hcHBsaWVkRWRp
dGluZyhjbWQpOwogICAgIH0KKyAgICAKKyAgICBOb2RlSW1wbCogc3RhcnROb2RlID0gZW5kaW5n
U2VsZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCk7CisgICAgaWYgKHN0YXJ0Tm9kZSAmJiBzdGFydE5v
ZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkgeworICAgICAgICAvLyBTZW5kIGtodG1sVGV4dElu
c2VydGVkRXZlbnQgdG8gcm9vdEVkaXRhYmxlRWxlbWVudC4KKyAgICAgICAgaW50IGV4Y2VwdGlv
bkNvZGUgPSAwOworICAgICAgICBSZWZQdHI8RXZlbnRJbXBsPiBldnQgPSBuZXcgRXZlbnRJbXBs
KGtodG1sVGV4dEluc2VydGVkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIHN0YXJ0Tm9k
ZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpLT5kaXNwYXRjaEV2ZW50KGV2dCwgZXhjZXB0aW9uQ29k
ZSwgdHJ1ZSk7CisgICAgfQogfQogCiB2b2lkIEVkaXRDb21tYW5kOjpyZWFwcGx5KCkKQEAgLTI1
OSw2ICsyNzksMTQgQEAKICAgICAgICAgRWRpdENvbW1hbmRQdHIgY21kKHRoaXMpOwogICAgICAg
ICBmcmFtZS0+cmVhcHBsaWVkRWRpdGluZyhjbWQpOwogICAgIH0KKyAgICAKKyAgICBOb2RlSW1w
bCogc3RhcnROb2RlID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCk7CisgICAgaWYg
KHN0YXJ0Tm9kZSAmJiBzdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkgeworICAgICAg
ICAvLyBTZW5kIGtodG1sVGV4dEluc2VydGVkRXZlbnQgdG8gcm9vdEVkaXRhYmxlRWxlbWVudC4K
KyAgICAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOworICAgICAgICBSZWZQdHI8RXZlbnRJbXBs
PiBldnQgPSBuZXcgRXZlbnRJbXBsKGtodG1sVGV4dEluc2VydGVkRXZlbnQsIGZhbHNlLCBmYWxz
ZSk7CisgICAgICAgIHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpLT5kaXNwYXRjaEV2
ZW50KGV2dCwgZXhjZXB0aW9uQ29kZSwgdHJ1ZSk7CisgICAgfQogfQogCiB2b2lkIEVkaXRDb21t
YW5kOjpkb1JlYXBwbHkoKQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTQ4KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1NyBAQAorMjAwNi0wMy0wNSAgQWRlbGUgUGV0ZXJz
b24gIDxhZGVsZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgLSBGaXhlZCBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hv
d19idWcuY2dpP2lkPTY5ODcKKyAgICAgICAgSW1wbGVtZW50IG1heGxlbmd0aCBmb3IgbmV3IHRl
eHQgZmllbGRzCisKKyAgICAgICAgVGVzdCBhZGRlZDoKKyAgICAgICAgKiBmYXN0L2Zvcm1zL2lu
cHV0LWFwcGVhcmFuY2UtbWF4bGVuZ3RoLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajogCisgICAgICAgICBBZGRlZCBCZWZvcmVUZXh0SW5zZXJ0ZWRF
dmVudEltcGwuaCwgQmVmb3JlVGV4dEluc2VydGVkRXZlbnRJbXBsLmNwcCwgSFRNTFRleHRGaWVs
ZElubmVyRWxlbWVudEltcGwuaCwgYW5kIEhUTUxUZXh0RmllbGRJbm5lckVsZW1lbnRJbXBsLmNw
cAorCisgICAgICAgICoga2h0bWwvaHRtbC9IVE1MSW5wdXRFbGVtZW50SW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50SW1wbDo6aW5pdCk6IGluaXRpYWxpemUgbWF4
IGxlbmd0aCB0byAxMDI0LgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudEltcGw6
OmRlZmF1bHRFdmVudEhhbmRsZXIpOiBBZGRlZCBjYXNlIHRvIHVzZSB0aGUga2h0bWxCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudCB0byBjaGVjayBmb3IgbWF4bGVuZ3RoLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTogTWFrZXMgc3Vy
ZSB0aGF0IG1heGxlbmd0aCBpcyBiZXR3ZWVuIDAgYW5kIDEwMjQuCisKKyAgICAgICAgKiBlZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxh
Y2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQpOiBBZnRlciBkb2luZyBhIHRlc3Qg
aW5zZXJ0IG9mIHRoZSBmcmFnbWVudCwKKyAgICAgICAgIFNlbmQga2h0bWxCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudCB0byB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50IHNvIHRoZSBldmVudCBoYW5k
bGVyIGNhbiB1cGRhdGUgdGhlIHRleHQsIGFuZCB3ZSBjYW4gdXBkYXRlIHRoZSBmcmFnbWVudC4K
KyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dCk6IFNlbmQga2h0bWxCZWZvcmVUZXh0SW5zZXJ0ZWRF
dmVudCB0byB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50IHNvIHRoZSBldmVudCBoYW5kbGVyIGNh
biB1cGRhdGUgdGhlIHRleHQgaWYgbmVjZXNzYXJ5LgorICAgICAgICAqIGVkaXRpbmcvRWRpdENv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6OmFwcGx5KTogSWYgd2Un
dmUganVzdCBhcHBsaWVkIGEgY29tbWFuZCwgc2VuZCB0aGUga2h0bWxUZXh0SW5zZXJ0ZWRFdmVu
dCB0byB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50LiAKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRD
b21tYW5kOjp1bmFwcGx5KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6
cmVhcHBseSk6IGRpdHRvLgorCisgICAgICAgICoga2h0bWwvaHRtbC9IVE1MVGV4dEZpZWxkSW5u
ZXJFbGVtZW50SW1wbC5oOiBBZGRlZCB0aGlzIGNsYXNzIHRvIHN0b3JlIGEgcG9pbnRlciB0byB0
aGUgaW5wdXQgZWxlbWVudCBmb3IgdGhlIHRleHQgZmllbGQgYW5kIHRvIGhhbmRsZSBkZWZhdWx0
IGV2ZW50cy4KKyAgICAgICAgKERPTTo6SFRNTFRleHRGaWVsZElubmVyRWxlbWVudEltcGw6OnNo
YWRvd1BhcmVudE5vZGUpOiBBZGRlZC4KKyAgICAgICAgKERPTTo6SFRNTFRleHRGaWVsZElubmVy
RWxlbWVudEltcGw6OnNldFNoYWRvd1BhcmVudE5vZGUpOiBBZGRlZC4KKyAgICAgICAgKiBraHRt
bC9odG1sL0hUTUxUZXh0RmllbGRJbm5lckVsZW1lbnRJbXBsLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MVGV4dEZpZWxkSW5uZXJFbGVtZW50SW1wbDo6SFRNTFRleHRGaWVsZElu
bmVyRWxlbWVudEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGaWVsZElubmVyRWxl
bWVudEltcGw6On5IVE1MVGV4dEZpZWxkSW5uZXJFbGVtZW50SW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MVGV4dEZpZWxkSW5uZXJFbGVtZW50SW1wbDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6
CisgICAgICAgICBTZW5kcyBraHRtbEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50cyB0byB0aGUgc2hh
ZG93UGFyZW50Tm9kZSwgCisgICAgICAgICBhbmQgaGFuZGxlcyBraHRtbFRleHRJbnNlcnRlZEV2
ZW50cyBieSB0ZWxsaW5nIHRoZSByZW5kZXJlciB0aGF0IHRoZSBzdWJ0cmVlIGhhcyBjaGFuZ2Vk
LgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRGaWVsZC5jcHA6IFJlbW92ZWQgSW5w
dXRNdXRhdGlvbkxpc3RlbmVyIHNpbmNlIHN1YnRyZWVIYXNDaGFuZ2VkIGlzIG5vdyBjYWxsZWQg
ZnJvbSB0aGUgZWRpdGluZyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dEZpZWxk
Ojp+UmVuZGVyVGV4dEZpZWxkKTogcmVtb3ZlZCBldmVudCBsaXN0ZW5lciBjb2RlLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dEZpZWxkOjp1cGRhdGVGcm9tRWxlbWVudCk6IGRpdHRvLiAg
QW5kIGNyZWF0ZXMgSFRNTFRleHRGaWVsZElubmVyRWxlbWVudEltcGwuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0RmllbGQ6OnN1YnRyZWVIYXNDaGFuZ2VkKTogY2FsbHMgbmV3IHRleHQo
KSBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0RmllbGQ6OnRleHQpOiBjcmVh
dGVkIHRvIGdldCBhIFN0cmluZyBvZiBhbGwgdGV4dCBpbiB0aGUgUmVuZGVyVGV4dEZpZWxkLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0RmllbGQuaDogUmVtb3ZlZCBJbnB1dE11dGF0
aW9uTGlzdGVuZXIgY2xhc3MuCisKKyAgICAgICAgKiBkb20vRXZlbnROYW1lcy5oOiBBZGRlZCBr
aHRtbFRleHRJbnNlcnRlZCBhbmQga2h0bWxCZWZvcmVUZXh0SW5zZXJ0ZWQuCisgICAgICAgICog
ZG9tL0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50SW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6QmVmb3JlVGV4dEluc2VydGVkRXZlbnRJbXBsOjpCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dEltcGwpOgorICAgICAgICAqIGRvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudEltcGwuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudEltcGw6OmlzQmVm
b3JlVGV4dEluc2VydGVkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6QmVmb3JlVGV4dEluc2Vy
dGVkRXZlbnRJbXBsOjp0ZXh0KToKKyAgICAgICAgKiBkb20vZG9tMl9ldmVudHNpbXBsLmNwcDog
KFdlYkNvcmU6OkV2ZW50SW1wbDo6aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCk6IEFkZGVkLgor
ICAgICAgICAqIGRvbS9kb20yX2V2ZW50c2ltcGwuaDogQWRkZWQgaXNCZWZvcmVUZXh0SW5zZXJ0
ZWRFdmVudC4KKwogMjAwNi0wMy0wNSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29t
PgogCiAgICAgICAgIC0gUm9sbGVkIG91dCB0aGUgZml4IGZvciA8cmRhcjovL3Byb2JsZW0vNDQ2
NzE0Mz4gYmVjYXVzZSBpdCdzIHRoZQo=
</data>
<flag name="review"
          id="1773"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>