<?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>23808</bug_id>
          
          <creation_ts>2009-02-06 16:35:39 -0800</creation_ts>
          <short_desc>Add SelectElement abstraction</short_desc>
          <delta_ts>2019-02-06 09:02:41 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>20393</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>hyatt</cc>
    
    <cc>mike</cc>
    
    <cc>mjs</cc>
    
    <cc>staikos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>108763</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-02-06 16:35:39 -0800</bug_when>
    <thetext>Allow RenderMenuList/RenderListBox to be used from non-HTML clients, like WML.

A new abstract base class, SelectElement, should be created, just like it has already been done for InputElement/Option(Group)Element. It should serve as base class for WML/HTMLSelectElement, and is supposed to share code between those classes (as static helper methods), and also as abstract interface to RenderMenuList/RenderListBox, equally designed as Input/Option(Group)Element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108766</commentid>
    <comment_count>1</comment_count>
      <attachid>27433</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-02-06 16:47:48 -0800</bug_when>
    <thetext>Created attachment 27433
Initial patch

Woho, celebrate the last needed abstract base class to complete WMLs&apos; needs!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120496</commentid>
    <comment_count>2</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-05-08 18:04:33 -0700</bug_when>
    <thetext>As the memory regression (FormControlElement...) is fixed in trunk since two days, it makes sense to work on new abstractions again :-)

As the summary says, OptionElement/OptionGroupElement has already been created, and the last missing piece to implement WMLSelectElement is a SelectElement base-class, sharing code with HTMLSelectElement.

I&apos;m going to attach a patch soon which just adds SelectElement, and moves away the rendering code from using HTMLSelectElement directly. This patch does NOT add static helper functions in SelectElement to share code between HTMLSelectElement and the upcoming WMLSelectElement, this will be done in a follow-up patch. This has been the process for InputElement and all the other base classes that have been introduced, and it&apos;s working nicely this way.

Fortunately that&apos;s really the last needed piece for WML, no further abstraction overhead for HTML other than this class. But I think it&apos;s okay, since the ambigouties with FormControlElement/FormControlElementWithState &amp; HTMLFormControlElement have been resolved.

CC&apos;ing Dave as he knows the memory regression as well as the rendering code related to HTMLSelectElement - it would be great if you could check the patch once it&apos;s up here.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120497</commentid>
    <comment_count>3</comment_count>
      <attachid>30150</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-05-08 18:06:48 -0700</bug_when>
    <thetext>Created attachment 30150
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122521</commentid>
    <comment_count>4</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-05-21 20:16:30 -0700</bug_when>
    <thetext>Won&apos;t the multiple inheritance in this patch cause a memory regression (however slight) for HTML? Is there any way to do this without introducing multiple inheritance?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122635</commentid>
    <comment_count>5</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-05-22 06:04:18 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Won&apos;t the multiple inheritance in this patch cause a memory regression (however
&gt; slight) for HTML? Is there any way to do this without introducing multiple
&gt; inheritance?
Yes the same drawback then adding StyleElement/ScriptElement/InputElement etc. had.

As discussed with Hyatt before, I do not plan any further addition of classes, adding SelectElement would fulfil all of WMLs needs. A follow-up patch will also add much more code to SelectElement, used to share between HTML/WMLSelectElement.

I&apos;d really argue to ignore this slight mem regression. My follow-up patches are waiting for a long time now, and I&apos;d finally love to get this in.

Remember, that all other MI issues (FormControlElememnt(WithState) addition) are gone now, so the main concerns Hyatt had are gone now. I really hope we can stay with this design for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122854</commentid>
    <comment_count>6</comment_count>
      <attachid>30619</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-05-23 07:09:30 -0700</bug_when>
    <thetext>Created attachment 30619
Updated patch v2

Build against ToT. (Accessibility* files have been moved from page/ to accessibility/).
All tests pass. No regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122876</commentid>
    <comment_count>7</comment_count>
      <attachid>30619</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-05-23 12:22:32 -0700</bug_when>
    <thetext>Comment on attachment 30619
Updated patch v2

Didn&apos;t we discover a way to do this without introducing multiple inheritance? I thought I saw patches where we were undoing some virtualization we did before based on feedback from Dave Hyatt.

&gt; -        AccessibilityObject* listOption = listBoxOptionAccessibilityObject(listItems[i]);
&gt; +        AccessibilityObject* listOption = listBoxOptionAccessibilityObject(static_cast&lt;HTMLElement*&gt;(listItems[i]));

This cast needs a comment explaining why it is safe. Casts like these are dangerous and we&apos;ve had many bugs in the past where we did an illegal downcast. I believe the answer is that this is guaranteed to be an HTML element unless you are compiling with WML enabled, and that the code in this file is not compatible with WML.

&gt; -            return listBoxOptionAccessibilityObject(listItems[i]);
&gt; +            return listBoxOptionAccessibilityObject(static_cast&lt;HTMLElement*&gt;(listItems[i]));

Same thought here.

&gt;      if (m_renderer-&gt;isMenuList())
&gt; -        return static_cast&lt;RenderMenuList*&gt;(m_renderer)-&gt;selectElement();
&gt; -    
&gt; +        return static_cast&lt;Element*&gt;(m_renderer-&gt;node());

Same comment again. Why is this cast to Element safe? We need to at least have a comment saying why, and ideally come up with idioms that don&apos;t require unchecked type casts, unless the check is just before the cast. You&apos;ll note that in the old code, the cast to RenderMenuList was checked by the code in the if statement.

&gt; +    virtual void dispatchFormControlChangeEvent() { }

Do we really need this in the Element class? Our goal is to go in the opposite direction, and cut down the size of our massive base classes.

This is really just a helper function to call dispatchEvent with the changeEvent event name. I don&apos;t think it&apos;s really form-control-specific. Perhaps it would be cleaner move this into a separate helper function and have it not be a member function at all. Having this be a virtual function isn&apos;t helpful unless we actually plan to call this in cases where we do not want a change event dispatched. We could also have this just be in the EventTarget class.

&gt; +        if (element-&gt;hasTagName(HTMLNames::selectTag))
&gt; +            return static_cast&lt;HTMLSelectElement*&gt;(element);
&gt; +        else if (element-&gt;hasTagName(HTMLNames::keygenTag))
&gt; +            return static_cast&lt;HTMLKeygenElement*&gt;(element);

We normally do not do else after return.

&gt; +    virtual bool multiple() const = 0;

Not a great name for a function -- you probably didn&apos;t create it. Typically getters should have a noun or adjective that applies to the object. But &quot;a select element&apos;s multiple&quot; makes no sense. 

&gt; +protected:
&gt; +    SelectElement() { }

This explicit declaration and definition of the constructor is unneeded. If you don&apos;t declare or define it, we&apos;ll get the same thing automatically. So the only effect this has is to make the constructor protected. Since the class has pure virtual functions, objects of this class already can&apos;t be constructed, so it&apos;s best to just leave this out.

&gt;          if (current-&gt;hasTagName(optionTag)) {
&gt; -            m_listItems.append(static_cast&lt;HTMLElement*&gt;(current));
&gt; +            m_listItems.append(static_cast&lt;Element*&gt;(current));

I think this should be a cast to HTMLOptionElement*, not to Element*, since that matches the test that was done. I know that m_listItems can hold any Element*, but that need not be the deciding factor.

&gt; -        // Save the selection so it can be compared to the new selection when we call onChange during dispatchBlurEvent.
&gt; +        // Save the selection so it can be compared to the new selection when we call dispatchFormControlChangeEvent during dispatchBlurEvent.

I think this comment is probably referring to the change event, not the onChange function. If so, we should call it &quot;send a change event&quot; or &quot;call onchange&quot;, and not use the function name.

&gt; -    // We only need to fire onChange here for menu lists, because we fire onChange for list boxes whenever the selection change is actually made.
&gt; +    // We only need to fire dispatchFormControlChangeEvent here for menu lists, because we fire onChange for list boxes whenever the selection change is actually made.

Same thought here, but even more so. When you say &quot;fire onchange&quot; I think you&apos;re referring to the event, not the function.

In general, I don&apos;t think the renames inside the comments are all improvements, especially since the new function name is so long.

&gt; +void WMLFormControlElement::dispatchFormControlChangeEvent()
&gt; +{
&gt; +    // no-op
&gt; +}

Why have this since it&apos;s the same as the base class?

I&apos;m going to say r=me. This seems a little bit messy, but no significant problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122884</commentid>
    <comment_count>8</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-05-23 13:44:06 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 30619 [review])
&gt; Didn&apos;t we discover a way to do this without introducing multiple inheritance? I
&gt; thought I saw patches where we were undoing some virtualization we did before
&gt; based on feedback from Dave Hyatt.
The main concern were my abstract FormControlElement / FormControlElementWithState classe. Example for HTMLInputElement:

HTMLInputElement -&gt; HTMLFormControlElementWithState, InputElement
HTMLFormControlElementWithState -&gt; HTMLFormControlElement and FormControlElementWithState
HTMLFormControlElement -&gt; HTMLElement and FormControlElement

These classes introduced an odd class structure. Since they are gone in trunk, it&apos;s just:

HTMLInputElement -&gt; HTMLFormControlElementWithState, InputElement
HTMLFormControlElementWithState -&gt; HTMLFormControlElement
HTMLFormControlElement -&gt; HTMLElement

I&apos;ve chosen the same approach for HTMLSelectElement. And we already had a few classes using this scheme (HTMLInput/Option/OptGroup/ScriptElement).

&gt; 
&gt; &gt; -        AccessibilityObject* listOption = listBoxOptionAccessibilityObject(listItems[i]);
&gt; &gt; +        AccessibilityObject* listOption = listBoxOptionAccessibilityObject(static_cast&lt;HTMLElement*&gt;(listItems[i]));
&gt; 
&gt; This cast needs a comment explaining why it is safe. Casts like these are
&gt; dangerous and we&apos;ve had many bugs in the past where we did an illegal downcast.
&gt; I believe the answer is that this is guaranteed to be an HTML element unless
&gt; you are compiling with WML enabled, and that the code in this file is not
&gt; compatible with WML.
Exactly. Fixed.

&gt; 
&gt; &gt; -            return listBoxOptionAccessibilityObject(listItems[i]);
&gt; &gt; +            return listBoxOptionAccessibilityObject(static_cast&lt;HTMLElement*&gt;(listItems[i]));
&gt; 
&gt; Same thought here.
Ditto.

&gt; 
&gt; &gt;      if (m_renderer-&gt;isMenuList())
&gt; &gt; -        return static_cast&lt;RenderMenuList*&gt;(m_renderer)-&gt;selectElement();
&gt; &gt; -    
&gt; &gt; +        return static_cast&lt;Element*&gt;(m_renderer-&gt;node());
&gt; 
&gt; Same comment again. Why is this cast to Element safe? We need to at least have
&gt; a comment saying why, and ideally come up with idioms that don&apos;t require
&gt; unchecked type casts, unless the check is just before the cast. You&apos;ll note
&gt; that in the old code, the cast to RenderMenuList was checked by the code in the
&gt; if statement.
Oh, all the other cases above this line are using the same cast. Does that need a specific comment?

&lt;quote&gt;
    if (isFileUploadButton())
        return static_cast&lt;Element*&gt;(m_renderer-&gt;node());

    if (AccessibilityObject::isARIAInput(ariaRoleAttribute()))
        return static_cast&lt;Element*&gt;(m_renderer-&gt;node());

    if (isImageButton())
        return static_cast&lt;Element*&gt;(m_renderer-&gt;node());

    if (m_renderer-&gt;isMenuList())
        return static_cast&lt;Element*&gt;(m_renderer-&gt;node());
&lt;/quote&gt;

&gt; 
&gt; &gt; +    virtual void dispatchFormControlChangeEvent() { }
&gt; 
&gt; Do we really need this in the Element class? Our goal is to go in the opposite
&gt; direction, and cut down the size of our massive base classes.
&gt; 
&gt; This is really just a helper function to call dispatchEvent with the
&gt; changeEvent event name. I don&apos;t think it&apos;s really form-control-specific.
&gt; Perhaps it would be cleaner move this into a separate helper function and have
&gt; it not be a member function at all. Having this be a virtual function isn&apos;t
&gt; helpful unless we actually plan to call this in cases where we do not want a
&gt; change event dispatched. We could also have this just be in the EventTarget
&gt; class.
That&apos;s exactly the reason why I added it, WML doesn&apos;t want these events to be fired.
On the other hand, nothing in WML could intercept these events, so we could just fire it and save that function. Though all other places in WML are patched that no events are dispatched. I think I&apos;ll leave it in for now. We may change it in a follow-up patch.

&gt; 
&gt; &gt; +        if (element-&gt;hasTagName(HTMLNames::selectTag))
&gt; &gt; +            return static_cast&lt;HTMLSelectElement*&gt;(element);
&gt; &gt; +        else if (element-&gt;hasTagName(HTMLNames::keygenTag))
&gt; &gt; +            return static_cast&lt;HTMLKeygenElement*&gt;(element);
&gt; 
&gt; We normally do not do else after return.
Fixed.

&gt; 
&gt; &gt; +    virtual bool multiple() const = 0;
&gt; 
&gt; Not a great name for a function -- you probably didn&apos;t create it. Typically
&gt; getters should have a noun or adjective that applies to the object. But &quot;a
&gt; select element&apos;s multiple&quot; makes no sense. 
True, the name corresponds to the HTML &quot;multiple&quot; attribute. I guess it&apos;s named this way for historical reasons.
I can rename the function in a follow-up patch, but it rather not clutter this commit with it, as I&apos;m just moving this method.

How about &quot;canSelectMultipleItems()&quot; / &quot;allowsMultiSelection&quot;? Doesn&apos;t sound really nice, maybe you have a better suggestion.

&gt; 
&gt; &gt; +protected:
&gt; &gt; +    SelectElement() { }
&gt; 
&gt; This explicit declaration and definition of the constructor is unneeded. If you
&gt; don&apos;t declare or define it, we&apos;ll get the same thing automatically. So the only
&gt; effect this has is to make the constructor protected. Since the class has pure
&gt; virtual functions, objects of this class already can&apos;t be constructed, so it&apos;s
&gt; best to just leave this out.
Right, fixed.

&gt; 
&gt; &gt;          if (current-&gt;hasTagName(optionTag)) {
&gt; &gt; -            m_listItems.append(static_cast&lt;HTMLElement*&gt;(current));
&gt; &gt; +            m_listItems.append(static_cast&lt;Element*&gt;(current));
&gt; 
&gt; I think this should be a cast to HTMLOptionElement*, not to Element*, since
&gt; that matches the test that was done. I know that m_listItems can hold any
&gt; Element*, but that need not be the deciding factor.
I&apos;ve changed it back to HTMLElement as it was, there are other places in this file using the same scheme.

&gt; 
&gt; &gt; -        // Save the selection so it can be compared to the new selection when we call onChange during dispatchBlurEvent.
&gt; &gt; +        // Save the selection so it can be compared to the new selection when we call dispatchFormControlChangeEvent during dispatchBlurEvent.
&gt; 
&gt; I think this comment is probably referring to the change event, not the
&gt; onChange function. If so, we should call it &quot;send a change event&quot; or &quot;call
&gt; onchange&quot;, and not use the function name.
Okay, rephrased all comments.
 
&gt; &gt; -    // We only need to fire onChange here for menu lists, because we fire onChange for list boxes whenever the selection change is actually made.
&gt; &gt; +    // We only need to fire dispatchFormControlChangeEvent here for menu lists, because we fire onChange for list boxes whenever the selection change is actually made.
&gt; 
&gt; Same thought here, but even more so. When you say &quot;fire onchange&quot; I think
&gt; you&apos;re referring to the event, not the function.
Yes, fixed.
 
&gt; In general, I don&apos;t think the renames inside the comments are all improvements,
&gt; especially since the new function name is so long.
&gt; 
&gt; &gt; +void WMLFormControlElement::dispatchFormControlChangeEvent()
&gt; &gt; +{
&gt; &gt; +    // no-op
&gt; &gt; +}
&gt; 
&gt; Why have this since it&apos;s the same as the base class?
Oh fixed.
 
&gt; I&apos;m going to say r=me. This seems a little bit messy, but no significant
&gt; problems.

Thanks a lot, going to land soon.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122885</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-05-23 13:51:52 -0700</bug_when>
    <thetext>&gt; Oh, all the other cases above this line are using the same cast. Does that need
&gt; a specific comment?
&gt; 
&gt; &lt;quote&gt;
&gt;     if (isFileUploadButton())
&gt;         return static_cast&lt;Element*&gt;(m_renderer-&gt;node());
&gt; 
&gt;     if (AccessibilityObject::isARIAInput(ariaRoleAttribute()))
&gt;         return static_cast&lt;Element*&gt;(m_renderer-&gt;node());
&gt; 
&gt;     if (isImageButton())
&gt;         return static_cast&lt;Element*&gt;(m_renderer-&gt;node());
&gt; 
&gt;     if (m_renderer-&gt;isMenuList())
&gt;         return static_cast&lt;Element*&gt;(m_renderer-&gt;node());
&gt; &lt;/quote&gt;

I guess not. Seems a bit weak.

&gt; How about &quot;canSelectMultipleItems()&quot; / &quot;allowsMultiSelection&quot;? Doesn&apos;t sound
&gt; really nice, maybe you have a better suggestion.

I realize now that multiple() is the name in the DOM, so maybe we should just leave the name alone even after this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122887</commentid>
    <comment_count>10</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-05-23 14:22:55 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; 
&gt; &gt; How about &quot;canSelectMultipleItems()&quot; / &quot;allowsMultiSelection&quot;? Doesn&apos;t sound
&gt; &gt; really nice, maybe you have a better suggestion.
&gt; 
&gt; I realize now that multiple() is the name in the DOM, so maybe we should just
&gt; leave the name alone even after this patch.

Okay, going to land now that all issues are resolved.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122889</commentid>
    <comment_count>11</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-05-23 14:30:15 -0700</bug_when>
    <thetext>Landed in r44100. Contained an unrelated patch, fixed in commit r44101.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502824</commentid>
    <comment_count>12</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:02:41 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27433</attachid>
            <date>2009-02-06 16:47:48 -0800</date>
            <delta_ts>2009-05-08 18:06:48 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>AddSelectElement.diff</filename>
            <type>text/plain</type>
            <size>62202</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQwNzQx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE4IEBACisyMDA5LTAy
LTA2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuaWtvbGFzLnppbW1lcm1hbm5AdG9yY2htb2JpbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eGVzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM4MDgKKworICAg
ICAgICBBZnRlciBhIGxvbmcgam91cm5leSwgYWRkIHRoZSBsYXN0IG1pc3NpbmcgQUJDIHRvIHNo
YXJlIGZvcm0gY29udHJvbCBlbGVtZW50IHN1cHBvcnQgd2l0aCBIVE1MOiBTZWxlY3RFbGVtZW50
LgorICAgICAgICBSZW5kZXJMaXN0Qm94L1JlbmRlck1lbnVMaXN0IG9wZXJhdGVzIG9uIFNlbGVj
dEVsZW1lbnQgaW5zdGVhZCBvZiBIVE1MU2VsZWN0RWxlbWVudCBub3csIHF1ZXJ5aW5nIHNlbGVj
dGVkIGluZGV4IGV0Yy4KKyAgICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgdGhl
c2UgcmVuZGVyIG9iamVjdHMgZm9yIGllLiBXTUwsIGFzIGl0J3MgZG9uZSBiZWZvcmUgZm9yIGlu
cHV0ICYgb3B0aW9uIGVsZW1lbnRzLgorCisgICAgICAgIFdNTFNlbGVjdEVsZW1lbnQgd2lsbCBi
ZSBjcmVhdGVkIHNvb24sIGluIGEgZm9sbG93LXVwIHBhdGNoLCBhZGRpbmcgbW9yZSBtZXRob2Rz
IHRvIFNlbGVjdEVsZW1lbnQsIHNoYXJpbmcgY29kZSBiZXR3ZWVuCisgICAgICAgIEhUTUxTZWxl
Y3RFbGVtZW50L1dNTFNlbGVjdEVsZW1lbnQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTog
QWRkIG5ldyBkb20vU2VsZWN0RWxlbWVudC57Y3BwLGh9IGZpbGVzIHRvIGJ1aWxkLgorICAgICAg
ICAqIFdlYkNvcmUucHJvOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnNjb25zOiBEaXR0by4K
KyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajogRGl0dG8uCisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKyAgICAgICAgKiBX
ZWJDb3JlU291cmNlcy5ia2w6IERpdHRvLgorICAgICAgICAqIGRvbS9Gb3JtQ29udHJvbEVsZW1l
bnQuaDogQWRkIHB1cmUtdmlydHVhbCBkaXNwYXRjaENoYW5nZUV2ZW50IG1ldGhvZC4KKyAgICAg
ICAgKiBkb20vU2VsZWN0RWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9T
ZWxlY3RFbGVtZW50KToKKyAgICAgICAgKiBkb20vU2VsZWN0RWxlbWVudC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdEVsZW1lbnQ6On5TZWxlY3RFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdEVsZW1lbnQ6OlNlbGVjdEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6IFJlbmFtZSBvbkNoYW5nZSwgdG8gZGlzcGF0Y2hD
aGFuZ2VFdmVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRp
c3BhdGNoQ2hhbmdlRXZlbnQpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5oOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0Q2hlY2tlZCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBo
dG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25F
bGVtZW50OjppbmRleCk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2VsZWN0ZWRJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bGFzdFNlbGVjdGVkTGlzdEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpkZXNlbGVjdEl0ZW1zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZXRTZWxlY3RlZEluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpsZW5ndGgpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
U2VsZWN0RWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1l
bnQ6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzYXZl
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlc3RvcmVTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2VsZWN0QWxsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9uVG9MaXN0SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RUb09wdGlvbkluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpyZWNhbGNMaXN0SXRlbXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTZWxlY3RFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVT
ZWxlY3Rpb25BbmNob3JJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVu
dDo6dXBkYXRlTGlzdEJveFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0
RWxlbWVudDo6bWVudUxpc3RPbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0
RWxlbWVudDo6bGlzdEJveE9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RF
bGVtZW50OjpzYXZlTGFzdFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0
RWxlbWVudDo6dHlwZUFoZWFkRmluZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudDo6bmV4dFNlbGVjdGFibGVMaXN0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNl
bGVjdEVsZW1lbnQ6OnByZXZpb3VzU2VsZWN0YWJsZUxpc3RJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6Y2hlY2tMaXN0SXRlbXMpOgorICAgICAgICAqIGh0bWwv
SFRNTFNlbGVjdEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjptdWx0aXBsZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEl0ZW1zKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRl
eCk6CisgICAgICAgICogcGFnZS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJveDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3g6OmRvQWNjZXNzaWJpbGl0eUhpdFRlc3QpOgorICAg
ICAgICAqIHBhZ2UvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246Omxpc3RCb3hPcHRpb25JbmRleCk6Cisg
ICAgICAgICogcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjdGlvbkVsZW1lbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6dmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0
Qm94OjpSZW5kZXJMaXN0Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnVw
ZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNjcm9s
bFRvUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6bnVtSXRlbXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1CYWNrZ3JvdW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnBhblNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMaXN0Qm94OjphdXRvc2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RC
b3g6OnN0b3BBdXRvc2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnZh
bHVlQ2hhbmdlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWVudUxpc3Q6OlJlbmRlck1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1l
bnVMaXN0Ojp1cGRhdGVPcHRpb25zV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVu
dUxpc3Q6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVM
aXN0OjpzZXRUZXh0RnJvbU9wdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlz
dDo6c2hvd1BvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0Ojp2YWx1ZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6Oml0ZW1UZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjppdGVtSXNFbmFibGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjppdGVtU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWVudUxpc3Q6Oml0ZW1CYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWVudUxpc3Q6Omxpc3RTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVM
aXN0OjpzZWxlY3RlZEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0Ojpp
dGVtSXNTZXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6Oml0ZW1J
c0xhYmVsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjppdGVtSXNTZWxlY3Rl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6c2V0VGV4dEZyb21JdGVtKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyU2xpZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6c2V0
VmFsdWVGb3JQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXI6OnZhbHVl
Q2hhbmdlZCk6CisgICAgICAgICogd21sL1dNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoQ2hhbmdlRXZlbnQp
OgorICAgICAgICAqIHdtbC9XTUxGb3JtQ29udHJvbEVsZW1lbnQuaDoKKwogMjAwOS0wMi0wNiAg
SnVzdGluIEdhcmNpYSAgPGp1c3Rpbi5nYXJjaWFAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDogR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
R05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQwNzQxKQorKysgR05VbWFrZWZpbGUuYW0JKHdvcmtp
bmcgY29weSkKQEAgLTY2Myw2ICs2NjMsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNv
cmUvZG9tL1NjcmlwdEVsZW1lbnQuaCBcCiAJV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5jcHAgXAogCVdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBcCisJV2Vi
Q29yZS9kb20vU2VsZWN0RWxlbWVudC5jcHAgXAorCVdlYkNvcmUvZG9tL1NlbGVjdEVsZW1lbnQu
aCBcCiAJV2ViQ29yZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAgXAogCVdlYkNvcmUvZG9tL1Nl
bGVjdG9yTm9kZUxpc3QuaCBcCiAJV2ViQ29yZS9kb20vU3RhdGljTm9kZUxpc3QuY3BwIFwKSW5k
ZXg6IFdlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUucHJvCShyZXZpc2lvbiA0MDc0
MSkKKysrIFdlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC02MTUsNiArNjE1LDcgQEAgU09V
UkNFUyArPSBcCiAgICAgZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcCBcCiAgICAgZG9t
L1NjcmlwdEVsZW1lbnQuY3BwIFwKICAgICBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAg
XAorICAgIGRvbS9TZWxlY3RFbGVtZW50LmNwcCBcCiAgICAgZG9tL1NlbGVjdG9yTm9kZUxpc3Qu
Y3BwIFwKICAgICBkb20vU3RhdGljTm9kZUxpc3QuY3BwIFwKICAgICBkb20vU3RhdGljU3RyaW5n
TGlzdC5jcHAgXApJbmRleDogV2ViQ29yZS5zY29ucwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLnNj
b25zCShyZXZpc2lvbiA0MDc0MSkKKysrIFdlYkNvcmUuc2NvbnMJKHdvcmtpbmcgY29weSkKQEAg
LTEyNiw2ICsxMjYsNyBAQCBzb3VyY2VzWydkb20nXSA9IFsKICAgICAnZG9tL1JlZ2lzdGVyZWRF
dmVudExpc3RlbmVyLmNwcCcsCiAgICAgJ2RvbS9TY3JpcHRFbGVtZW50LmNwcCcsCiAgICAgJ2Rv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCcsCisgICAgJ2RvbS9TZWxlY3RFbGVtZW50LmNw
cCcsCiAgICAgJ2RvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcCcsCiAgICAgJ2RvbS9TdGF0aWNOb2Rl
TGlzdC5jcHAnLAogICAgICdkb20vU3RhdGljU3RyaW5nTGlzdC5jcHAnLApJbmRleDogV2ViQ29y
ZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmVTb3VyY2VzLmJrbAkocmV2aXNpb24g
NDA3NDEpCisrKyBXZWJDb3JlU291cmNlcy5ia2wJKHdvcmtpbmcgY29weSkKQEAgLTQ0Myw2ICs0
NDMsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlCiAgICAgICAg
IGRvbS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAKICAgICAgICAgZG9tL1NjcmlwdEVsZW1l
bnQuY3BwCiAgICAgICAgIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAorICAgICAgICBk
b20vU2VsZWN0RWxlbWVudC5jcHAgCiAgICAgICAgIGRvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcAog
ICAgICAgICBkb20vU3RhdGljTm9kZUxpc3QuY3BwCiAgICAgICAgIGRvbS9TdGF0aWNTdHJpbmdM
aXN0LmNwcApJbmRleDogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDQwNzQxKQorKysgV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTExOTI2LDYgKzEx
OTI2LDIyIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGRvbVxTZWxlY3RFbGVtZW50LmNwcCINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2VfUEdPfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRv
b2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCVdob2xlUHJvZ3JhbU9w
dGltaXphdGlvbj0idHJ1ZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFNlbGVjdEVs
ZW1lbnQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGRvbVxTZWxlY3Rvck5vZGVMaXN0LmNwcCINCiAJCQkJPg0KIAkJCQk8RmlsZUNvbmZp
Z3VyYXRpb24NCkluZGV4OiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0MDc0
MSkKKysrIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNjUsNiArNjUsOCBAQAogCQkwODREQkFBMjBFRDM5RDM2MDAzOEMyMjYgLyogV01MVmFyaWFi
bGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODRE
QkE5RTBFRDM5RDM2MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmggKi87IH07CiAJCTA4NTc3MzM1
MEYwODQ2MDEwMDgwNTgzRSAvKiBGb3JtQ29udHJvbEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTc3MzM0MEYwODQ2MDEwMDgwNTgzRSAv
KiBGb3JtQ29udHJvbEVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwODU5MUFBNTBGMDg1QzRFMDA5QkFDQjEgLyogSW5wdXRFbGVtZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU5MUFB
NDBGMDg1QzRFMDA5QkFDQjEgLyogSW5wdXRFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMDg1QUQ4RUYwRjNCQjk1RjAwMDM3MTk3IC8q
IFNlbGVjdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDg1QUQ4RUQwRjNCQjk1RjAwMDM3MTk3IC8qIFNlbGVjdEVsZW1lbnQuY3BwICov
OyB9OworCQkwODVBRDhGMDBGM0JCOTVGMDAwMzcxOTcgLyogU2VsZWN0RWxlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1QUQ4RUUwRjNCQjk1
RjAwMDM3MTk3IC8qIFNlbGVjdEVsZW1lbnQuaCAqLzsgfTsKIAkJMDg1QUZEQzgwRjI5NzczNTAw
NjFGMkIzIC8qIFdNTEZvcm1Db250cm9sRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODVBRkRDNjBGMjk3NzM1MDA2MUYyQjMgLyogV01M
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcCAqLzsgfTsKIAkJMDg1QUZEQzkwRjI5NzczNTAwNjFGMkIz
IC8qIFdNTEZvcm1Db250cm9sRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDg1QUZEQzcwRjI5NzczNTAwNjFGMkIzIC8qIFdNTEZvcm1Db250
cm9sRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTA4
NUI5MkJBMEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1QjkyQjgwRUZERTczRDAwRTYx
MjNDIC8qIEZvcm1EYXRhQnVpbGRlci5jcHAgKi87IH07CkBAIC00OTM2LDYgKzQ5MzgsOCBAQAog
CQkwODREQkE5RTBFRDM5RDM2MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTFZhcmlhYmxlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwODU3NzMzNDBGMDg0NjAxMDA4MDU4M0UgLyogRm9ybUNvbnRyb2xFbGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcm1Db250cm9sRWxlbWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODU5MUFBNDBGMDg1QzRFMDA5QkFDQjEg
LyogSW5wdXRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwODVBRDhFRDBGM0JCOTVG
MDAwMzcxOTcgLyogU2VsZWN0RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTZWxlY3RFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMDg1QUQ4RUUwRjNCQjk1RjAwMDM3MTk3IC8qIFNlbGVjdEVsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwODVBRkRDNjBGMjk3NzM1MDA2MUYyQjMgLyogV01MRm9ybUNvbnRyb2xF
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEZvcm1D
b250cm9sRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NUFGREM3
MEYyOTc3MzUwMDYxRjJCMyAvKiBXTUxGb3JtQ29udHJvbEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV01MRm9ybUNvbnRyb2xFbGVtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA4NUI5MkI4MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1
aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybURhdGFC
dWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NDI0LDYgKzE0NDI4
LDggQEAKIAkJCQkwOEE0ODQ3NjBFNTI3MkM1MDBDM0ZFNzYgLyogU2NyaXB0RWxlbWVudC5oICov
LAogCQkJCUUxMUM5REFGMEVCMzY5OTUwMEU0MDlEQiAvKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmNwcCAqLywKIAkJCQlFMTFDOUQ5QTBFQjM2ODEyMDBFNDA5REIgLyogU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oICovLAorCQkJCTA4NUFEOEVEMEYzQkI5NUYwMDAzNzE5NyAvKiBTZWxlY3RFbGVt
ZW50LmNwcCAqLywKKwkJCQkwODVBRDhFRTBGM0JCOTVGMDAwMzcxOTcgLyogU2VsZWN0RWxlbWVu
dC5oICovLAogCQkJCUJDN0ZBNjgwMEQxRjE2NzkwMERCMjJBOSAvKiBTZWxlY3Rvck5vZGVMaXN0
LmNwcCAqLywKIAkJCQlCQzdGQTY3RjBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlz
dC5oICovLAogCQkJCUJDN0ZBNjJDMEQxRjBFRkYwMERCMjJBOSAvKiBTdGF0aWNOb2RlTGlzdC5j
cHAgKi8sCkBAIC0xNjE0Miw2ICsxNjE0OCw3IEBACiAJCQkJQkNFQTQ4NjQwOTdEOTMwMjAwOTRD
OUU0IC8qIFJlbmRlckJSLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg2MDA5N0Q5MzAyMDA5
NEM5RTQgLyogUmVuZGVyQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODYyMDk3RDkz
MDIwMDk0QzlFNCAvKiBSZW5kZXJCb3guaCBpbiBIZWFkZXJzICovLAorCQkJCUJDOTZEQjQzMEYz
QTg4MEUwMDU3M0NCMyAvKiBSZW5kZXJCb3hNb2RlbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNFQTQ4NjYwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckJ1dHRvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTM5MkYxNDIwQUQxODVGNDAwNjkxQkQ0IC8qIFJlbmRlckNvdW50ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4RUE3M0M0MEExOTAwRTMwMEE4RUY1RiAvKiBSZW5kZXJGaWVsZHNl
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjQ0Niw2ICsxNjQ1Myw3IEBACiAJCQkJQkNEMEUwRkMw
RTk3MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3JpZ2luSGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzcxRjRGRkMwRDI1RTdGMzAwRUNFMEQ1IC8qIFNlZ21lbnRlZEZvbnREYXRhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMkMzREEyRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5n
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwODVBRDhGMDBGM0JCOTVGMDAwMzcxOTcgLyogU2VsZWN0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMEMwOTlFNjQ5MjAwNTZFNTgxIC8q
IFNlbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMEUwOTlFNjQ5MjAwNTZFNTgx
IC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0ZBNjgxMEQx
RjE2NzkwMERCMjJBOSAvKiBTZWxlY3Rvck5vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTE2
NzE0LDcgKzE2NzIyLDYgQEAKIAkJCQkxQTU2OUQyMzBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGlt
ZV9vYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDI1MEQ3RTJCODIwMDdDMzk4MyAv
KiBydW50aW1lX3Jvb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTFFMDk5RTY0OTIwMDU2
RTU4MSAvKiB2aXNpYmxlX3VuaXRzLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzk2REI0MzBGM0E4
ODBFMDA1NzNDQjMgLyogUmVuZGVyQm94TW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
MTgxNjUsNiArMTgxNzIsNyBAQAogCQkJCUJDRUE0ODYzMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5k
ZXJCUi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0VBNDg1RjA5N0Q5MzAyMDA5NEM5RTQgLyog
UmVuZGVyQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQTQ4NjEwOTdEOTMwMjAwOTRD
OUU0IC8qIFJlbmRlckJveC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzk2REI0NjBGM0E4ODIy
MDA1NzNDQjMgLyogUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkNFQTQ4NjUwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckJ1dHRvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5MzkyRjE0NDBBRDE4NUZFMDA2OTFCRDQgLyogUmVuZGVyQ291bnRlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBOEVBNzNDMzBBMTkwMEUzMDBBOEVGNUYgLyogUmVuZGVyRmllbGRz
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xODQ1Myw2ICsxODQ2MSw3IEBACiAJCQkJQkNEMEUw
RkEwRTk3MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTM3MUY0RkZEMEQyNUU3RjMwMEVDRTBENSAvKiBTZWdtZW50ZWRGb250RGF0YS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMkMzREEyRTBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3Ry
aW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA4NUFEOEVGMEYzQkI5NUYwMDAzNzE5NyAvKiBT
ZWxlY3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTBCMDk5RTY0OTIwMDU2
RTU4MSAvKiBTZWxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMEQwOTlFNjQ5
MjAwNTZFNTgxIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NEE4Qzk2RUIwQkU2OTAzMjAwNEVFRkYwIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0gaW4g
U291cmNlcyAqLywKQEAgLTE4Njk0LDcgKzE4NzAzLDYgQEAKIAkJCQkxQTU2OUQyMjBEN0UyQjgy
MDA3QzM5ODMgLyogcnVudGltZV9vYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE1NjlE
MjQwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfcm9vdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5MzMwOUUxRDA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlCQzk2REI0NjBGM0E4ODIyMDA1NzNDQjMgLyogUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBkb20vRm9ybUNvbnRyb2xFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gZG9tL0Zvcm1Db250cm9sRWxlbWVudC5oCShyZXZpc2lvbiA0MDc0MSkKKysr
IGRvbS9Gb3JtQ29udHJvbEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZU1hdGNoZXNSZW5kZXJlcihib29sIHZhbHVl
ID0gdHJ1ZSkgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQ2hhbmdlRXZlbnQoKSA9
IDA7CisKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSgpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0ID0gMDsKIApJbmRl
eDogZG9tL1NlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9TZWxlY3RFbGVtZW50
LmNwcAkocmV2aXNpb24gMCkKKysrIGRvbS9TZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlbGVjdEVsZW1lbnQuaCIKKworI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1M
S2V5Z2VuRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworLy8gRklYTUU6IEFjdGl2YXRlIGNvZGUgb25jZSBXTUxT
ZWxlY3RFbGVtZW50IGlzIGF2YWlsYWJsZQorI2lmIEVOQUJMRShXTUwpICYmIDAKKyNpbmNsdWRl
ICJXTUxTZWxlY3RFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1NlbGVjdEVsZW1lbnQqIHRvU2VsZWN0RWxlbWVudChFbGVt
ZW50KiBlbGVtZW50KQoreworICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAg
ICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3RUYWcpKQorICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4oZWxlbWVudCk7
CisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjprZXlnZW5U
YWcpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxLZXlnZW5FbGVtZW50Kj4o
ZWxlbWVudCk7CisgICAgfQorCisgICAgLy8gRklYTUU6IEFjdGl2YXRlIGNvZGUgb25jZSBXTUxT
ZWxlY3RFbGVtZW50IGlzIGF2YWlsYWJsZQorI2lmIEVOQUJMRShXTUwpICYmIDAKKyAgICBpZiAo
ZWxlbWVudC0+aXNXTUxFbGVtZW50KCkgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShXTUxOYW1lczo6
c2VsZWN0VGFnKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdNTFNlbGVjdEVsZW1lbnQq
PihlbGVtZW50KTsKKyNlbmRpZgorCisgICAgcmV0dXJuIDA7Cit9CisKK30KSW5kZXg6IGRvbS9T
ZWxlY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL1NlbGVjdEVsZW1lbnQuaAkocmV2aXNp
b24gMCkKKysrIGRvbS9TZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgU2Vs
ZWN0RWxlbWVudF9oCisjZGVmaW5lIFNlbGVjdEVsZW1lbnRfaAorCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEVsZW1lbnQ7CisKK2NsYXNz
IFNlbGVjdEVsZW1lbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgflNlbGVjdEVsZW1lbnQoKSB7
IH0KKworICAgIHZpcnR1YWwgYm9vbCBtdWx0aXBsZSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1
YWwgaW50IHNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBWZWN0b3I8RWxlbWVu
dCo+JiBsaXN0SXRlbXMoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGlzdEJveE9u
Q2hhbmdlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKGJv
b2wgZGVzZWxlY3RPdGhlck9wdGlvbnMpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBtZW51TGlz
dE9uQ2hhbmdlKCkgPSAwOworCisgICAgdmlydHVhbCBpbnQgYWN0aXZlU2VsZWN0aW9uU3RhcnRM
aXN0SW5kZXgoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgYWN0aXZlU2VsZWN0aW9uRW5k
TGlzdEluZGV4KCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZVNlbGVj
dGlvbkFuY2hvckluZGV4KGludCBpbmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRBY3Rp
dmVTZWxlY3Rpb25FbmRJbmRleChpbnQgaW5kZXgpID0gMDsKKworICAgIHZpcnR1YWwgaW50IGxp
c3RUb09wdGlvbkluZGV4KGludCBsaXN0SW5kZXgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGlu
dCBvcHRpb25Ub0xpc3RJbmRleChpbnQgb3B0aW9uSW5kZXgpIGNvbnN0ID0gMDsKKworICAgIHZp
cnR1YWwgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNl
dFNlbGVjdGVkSW5kZXgoaW50IGluZGV4LCBib29sIGRlc2VsZWN0ID0gdHJ1ZSwgYm9vbCBmaXJl
T25DaGFuZ2UgPSBmYWxzZSkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgU2VsZWN0RWxlbWVudCgp
IHsgfQorfTsKKworU2VsZWN0RWxlbWVudCogdG9TZWxlY3RFbGVtZW50KEVsZW1lbnQqKTsKKwor
fQorCisjZW5kaWYKSW5kZXg6IGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNDA3NDEp
CisrKyBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjEsNyArMTYxLDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXROYW1lKGNvbgog
ICAgIHNldEF0dHJpYnV0ZShuYW1lQXR0ciwgdmFsdWUpOwogfQogCi12b2lkIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6Om9uQ2hhbmdlKCkKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlz
cGF0Y2hDaGFuZ2VFdmVudCgpCiB7CiAgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnROYW1l
cygpLmNoYW5nZUV2ZW50LCB0cnVlLCBmYWxzZSk7CiB9CkluZGV4OiBodG1sL0hUTUxGb3JtQ29u
dHJvbEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQu
aAkocmV2aXNpb24gNDA3NDEpCisrKyBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHZh
bHVlTWF0Y2hlc1JlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZU1hdGNoZXNSZW5kZXJl
cjsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZU1hdGNoZXNSZW5kZXJlcihib29sIGIgPSB0
cnVlKSB7IG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIgPSBiOyB9CiAKLSAgICB2b2lkIG9uQ2hhbmdl
KCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQ2hhbmdlRXZlbnQoKTsKIAogICAgIGJvb2wg
ZGlzYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwpJbmRleDogaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwCShyZXZpc2lvbiA0MDc0MSkKKysrIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg0Miw3ICs4NDIsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNl
dENoZWNrZWQoYm9vbCBuCiAgICAgLy8gYmVjYXVzZSBpdCBzYXlzIG9ubHkgdG8gZmlyZSBjaGFu
Z2UgZXZlbnRzIGF0ICJsb3NlIGZvY3VzIiB0aW1lLCB3aGljaCBpcwogICAgIC8vIGRlZmluaXRl
bHkgd3JvbmcgaW4gcHJhY3RpY2UgZm9yIHRoZXNlIHR5cGVzIG9mIGVsZW1lbnRzLgogICAgIGlm
IChzZW5kQ2hhbmdlRXZlbnQgJiYgaW5Eb2N1bWVudCgpICYmIChpbnB1dFR5cGUoKSAhPSBSQURJ
TyB8fCBub3dDaGVja2VkKSkKLSAgICAgICAgb25DaGFuZ2UoKTsKKyAgICAgICAgZGlzcGF0Y2hD
aGFuZ2VFdmVudCgpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEluZGV0ZXJtaW5h
dGUoYm9vbCBfaW5kZXRlcm1pbmF0ZSkKQEAgLTEzMDMsMTAgKzEzMDMsMTAgQEAgdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbAogICAgICAgICAgICAgYWRkU2VhcmNoUmVz
dWx0KCk7CiAgICAgICAgICAgICBvblNlYXJjaCgpOwogICAgICAgICB9Ci0gICAgICAgIC8vIEZp
cmUgb25DaGFuZ2UgZm9yIHRleHQgZmllbGRzLgorICAgICAgICAvLyBGaXJlIGRpc3BhdGNoQ2hh
bmdlRXZlbnQgZm9yIHRleHQgZmllbGRzLgogICAgICAgICBSZW5kZXJPYmplY3QqIHIgPSByZW5k
ZXJlcigpOwogICAgICAgICBpZiAociAmJiByLT5pc1RleHRGaWVsZCgpICYmIHItPmlzRWRpdGVk
KCkpIHsKLSAgICAgICAgICAgIG9uQ2hhbmdlKCk7CisgICAgICAgICAgICBkaXNwYXRjaENoYW5n
ZUV2ZW50KCk7CiAgICAgICAgICAgICAvLyBSZWZldGNoIHRoZSByZW5kZXJlciBzaW5jZSBhcmJp
dHJhcnkgSlMgY29kZSBydW4gZHVyaW5nIG9uY2hhbmdlIGNhbiBkbyBhbnl0aGluZywgaW5jbHVk
aW5nIGRlc3Ryb3lpbmcgaXQuCiAgICAgICAgICAgICByID0gcmVuZGVyZXIoKTsKICAgICAgICAg
ICAgIGlmIChyKQpJbmRleDogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDQwNzQxKQorKysgaHRtbC9I
VE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBAQCBp
bnQgSFRNTE9wdGlvbkVsZW1lbnQ6OmluZGV4KCkgY29uc3QKICAgICAvLyB3ZSB3b24ndCBmb3Jn
ZXQgdG8gdXBkYXRlIGEgbWVtYmVyIHZhcmlhYmxlIGluIHNvbWUgY2FzZXMuLi4KICAgICBIVE1M
U2VsZWN0RWxlbWVudCogc2VsZWN0ID0gb3duZXJTZWxlY3RFbGVtZW50KCk7CiAgICAgaWYgKHNl
bGVjdCkgewotICAgICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBzZWxl
Y3QtPmxpc3RJdGVtcygpOworICAgICAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9
IHNlbGVjdC0+bGlzdEl0ZW1zKCk7CiAgICAgICAgIGludCBsID0gaXRlbXMuc2l6ZSgpOwogICAg
ICAgICBpbnQgb3B0aW9uSW5kZXggPSAwOwogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbDsg
aSsrKSB7CkluZGV4OiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBo
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gNDA3NDEpCisrKyBodG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIGludCBI
VE1MU2VsZWN0RWxlbWVudDo6c2VsZWN0ZWRJbmRleCgpIGMKIHsKICAgICAvLyByZXR1cm4gdGhl
IG51bWJlciBvZiB0aGUgZmlyc3Qgb3B0aW9uIHNlbGVjdGVkCiAgICAgdW5zaWduZWQgaW5kZXgg
PSAwOwotICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygp
OworICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewogICAgICAg
ICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpKSB7CiAgICAgICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tpXSktPnNlbGVjdGVkKCkp
CkBAIC0xMzAsNyArMTMwLDcgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50OjpsYXN0U2VsZWN0ZWRM
aXN0SQogICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHRoZSBsYXN0IG9wdGlvbiBzZWxlY3Rl
ZAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAg
Y29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgY29u
c3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmIChpdGVt
c1tpXS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpIHsKICAgICAgICAgICAgIGlmIChzdGF0aWNf
Y2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KGl0ZW1zW2ldKS0+c2VsZWN0ZWQoKSkgewpAQCAtMTQ0
LDcgKzE0NCw3IEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6bGFzdFNlbGVjdGVkTGlzdEkKIAog
dm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6ZGVzZWxlY3RJdGVtcyhIVE1MT3B0aW9uRWxlbWVudCog
ZXhjbHVkZUVsZW1lbnQpCiB7Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1z
ID0gbGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0
SXRlbXMoKTsKICAgICB1bnNpZ25lZCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXpl
KCk7IGkrKykgewogICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcp
ICYmIChpdGVtc1tpXSAhPSBleGNsdWRlRWxlbWVudCkpIHsKQEAgLTE1Niw3ICsxNTYsNyBAQCB2
b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpkZXNlbGVjdEl0ZW1zKEhUCiAKIHZvaWQgSFRNTFNlbGVj
dEVsZW1lbnQ6OnNldFNlbGVjdGVkSW5kZXgoaW50IG9wdGlvbkluZGV4LCBib29sIGRlc2VsZWN0
LCBib29sIGZpcmVPbkNoYW5nZSkKIHsKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYg
aXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9
IGxpc3RJdGVtcygpOwogICAgIGludCBsaXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChvcHRp
b25JbmRleCk7CiAgICAgSFRNTE9wdGlvbkVsZW1lbnQqIGVsZW1lbnQgPSAwOwogCkBAIC0yMDMs
NyArMjAzLDcgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50OjphY3RpdmVTZWxlY3Rpb25FbgogdW5z
aWduZWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQg
bGVuID0gMDsKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRl
bXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgewogICAgICAg
ICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpKQogICAgICAgICAgICAgKyts
ZW47CkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVtb3ZlKGlu
dCBpbmRleAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGludCBsaXN0SW5kZXggPSBv
cHRpb25Ub0xpc3RJbmRleChpbmRleCk7CiAKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQq
PiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVt
cyA9IGxpc3RJdGVtcygpOwogICAgIGlmIChsaXN0SW5kZXggPCAwIHx8IGluZGV4ID49IGludChp
dGVtcy5zaXplKCkpKQogICAgICAgICByZXR1cm47IC8vICMjIyB3aGF0IHNob3VsZCB3ZSBkbyA/
IHJlbW92ZSB0aGUgbGFzdCBpdGVtPwogCkBAIC0yNDMsNyArMjQzLDcgQEAgdm9pZCBIVE1MU2Vs
ZWN0RWxlbWVudDo6cmVtb3ZlKGludCBpbmRleAogU3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50Ojp2
YWx1ZSgpCiB7CiAgICAgdW5zaWduZWQgaTsKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQq
PiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVt
cyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykg
ewogICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpICYmIHN0YXRp
Y19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oaXRlbXNbaV0pLT5zZWxlY3RlZCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oaXRlbXNbaV0pLT52
YWx1ZSgpOwpAQCAtMjU3LDcgKzI1Nyw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFZh
bHVlKGNvbnN0IFMKICAgICAgICAgcmV0dXJuOwogICAgIC8vIGZpbmQgdGhlIG9wdGlvbiB3aXRo
IHZhbHVlKCkgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhcmFtZXRlcgogICAgIC8vIGFuZCBtYWtlIGl0
IHRoZSBjdXJyZW50IHNlbGVjdGlvbi4KLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYg
aXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9
IGxpc3RJdGVtcygpOwogICAgIHVuc2lnbmVkIG9wdGlvbkluZGV4ID0gMDsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspCiAgICAgICAgIGlmIChpdGVtc1tp
XS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpIHsKQEAgLTI3MSwxMSArMjcxLDExIEBAIHZvaWQg
SFRNTFNlbGVjdEVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0IFMKIAogYm9vbCBIVE1MU2VsZWN0RWxl
bWVudDo6c2F2ZVN0YXRlKFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7Ci0gICAgY29uc3QgVmVjdG9y
PEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEVs
ZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBpbnQgbCA9IGl0ZW1zLnNpemUoKTsK
ICAgICBWZWN0b3I8Y2hhciwgMTAyND4gY2hhcmFjdGVycyhsKTsKICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGw7ICsraSkgewotICAgICAgICBIVE1MRWxlbWVudCogZSA9IGl0ZW1zW2ldOworICAg
ICAgICBFbGVtZW50KiBlID0gaXRlbXNbaV07CiAgICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBlLT5o
YXNMb2NhbE5hbWUob3B0aW9uVGFnKSAmJiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+
KGUpLT5zZWxlY3RlZCgpOwogICAgICAgICBjaGFyYWN0ZXJzW2ldID0gc2VsZWN0ZWQgPyAnWCcg
OiAnLic7CiAgICAgfQpAQCAtMjg3LDcgKzI4Nyw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6
OnJlc3RvcmVTdGF0ZShjb24KIHsKICAgICByZWNhbGNMaXN0SXRlbXMoKTsKICAgICAKLSAgICBj
b25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBjb25z
dCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGludCBsID0gaXRl
bXMuc2l6ZSgpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbDsgaSsrKQogICAgICAgICBpZiAo
aXRlbXNbaV0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpKQpAQCAtNDAyLDcgKzQwMiw3IEBAIHZv
aWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdEFsbCgpCiAgICAgaWYgKCFyZW5kZXJlcigpIHx8
ICFtdWx0aXBsZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgLy8gU2F2ZSB0aGUgc2Vs
ZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdEFsbCBzZWxlY3Rp
b24gd2hlbiB3ZSBjYWxsIG9uQ2hhbmdlCisgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0
IGNhbiBiZSBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdEFsbCBzZWxlY3Rpb24gd2hlbiB3ZSBj
YWxsIGRpc3BhdGNoQ2hhbmdlRXZlbnQKICAgICBzYXZlTGFzdFNlbGVjdGlvbigpOwogICAgIAog
ICAgIG1fYWN0aXZlU2VsZWN0aW9uU3RhdGUgPSB0cnVlOwpAQCAtNDIzLDcgKzQyMyw3IEBAIFJl
bmRlck9iamVjdCogSFRNTFNlbGVjdEVsZW1lbnQ6OmNyZWF0ZVIKIGJvb2wgSFRNTFNlbGVjdEVs
ZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYgbGlzdCwgYm9vbCkKIHsKICAgICBi
b29sIHN1Y2Nlc3NmdWwgPSBmYWxzZTsKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYg
aXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9
IGxpc3RJdGVtcygpOwogCiAgICAgdW5zaWduZWQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgaXRl
bXMuc2l6ZSgpOyBpKyspIHsKQEAgLTQ1NCw3ICs0NTQsNyBAQCBib29sIEhUTUxTZWxlY3RFbGVt
ZW50OjphcHBlbmRGb3JtRGF0YShGCiAKIGludCBIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9uVG9M
aXN0SW5kZXgoaW50IG9wdGlvbkluZGV4KSBjb25zdAogewotICAgIGNvbnN0IFZlY3RvcjxIVE1M
RWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50
Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaW50IGxpc3RTaXplID0gKGludClpdGVtcy5z
aXplKCk7CiAgICAgaWYgKG9wdGlvbkluZGV4IDwgMCB8fCBvcHRpb25JbmRleCA+PSBsaXN0U2l6
ZSkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNDcyLDcgKzQ3Miw3IEBAIGludCBIVE1MU2VsZWN0
RWxlbWVudDo6b3B0aW9uVG9MaXN0SW5kZXgKIAogaW50IEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0
VG9PcHRpb25JbmRleChpbnQgbGlzdEluZGV4KSBjb25zdAogewotICAgIGNvbnN0IFZlY3RvcjxI
VE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIGNvbnN0IFZlY3RvcjxFbGVt
ZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaWYgKGxpc3RJbmRleCA8IDAgfHwgbGlz
dEluZGV4ID49IGludChpdGVtcy5zaXplKCkpIHx8CiAgICAgICAgICFpdGVtc1tsaXN0SW5kZXhd
LT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNDk5LDcg
KzQ5OSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcygKICAgICAg
ICAgICAgIC8vIHdoZW4gaXQgaGFzIGNoaWxkcmVuLCBidXQgbm90IHRvIGFkZCBpdCBpZiBpdCBo
YXBwZW5zIHRvIGhhdmUsCiAgICAgICAgICAgICAvLyBjaGlsZHJlbiAoc2F5IHNvbWUgY29tbWVu
dCBub2RlcyBvciB0ZXh0IG5vZGVzKSwgeWV0IHRoYXQncyB3aGF0CiAgICAgICAgICAgICAvLyB0
aGlzIGNvZGUgZG9lcyEKLSAgICAgICAgICAgIG1fbGlzdEl0ZW1zLmFwcGVuZChzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudCo+KGN1cnJlbnQpKTsKKyAgICAgICAgICAgIG1fbGlzdEl0ZW1zLmFwcGVu
ZChzdGF0aWNfY2FzdDxFbGVtZW50Kj4oY3VycmVudCkpOwogICAgICAgICAgICAgY3VycmVudCA9
IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCBkb2Vzbid0
IG1ha2Ugc2Vuc2UgdG8gaGFuZGxlIGFuIDxvcHRncm91cD4gaW5zaWRlIGFub3RoZXIgPG9wdGdy
b3VwPgogICAgICAgICAgICAgLy8gaWYgaXQncyBub3QgdGhlIGZpcnN0IGNoaWxkLCBidXQgbm90
IGhhbmRsZSBpdCBpZiBpdCBoYXBwZW5zIHRvIGJlIHRoZSBmaXJzdApAQCAtNTA3LDcgKzUwNyw3
IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcygKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKG9wdGlvblRhZykpIHsKLSAgICAgICAg
ICAgIG1fbGlzdEl0ZW1zLmFwcGVuZChzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGN1cnJlbnQp
KTsKKyAgICAgICAgICAgIG1fbGlzdEl0ZW1zLmFwcGVuZChzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
Y3VycmVudCkpOwogICAgICAgICAgICAgaWYgKHVwZGF0ZVNlbGVjdGVkU3RhdGVzKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKCFmb3VuZFNlbGVjdGVkICYmICh1c2VzTWVudUxpc3QoKSB8fCAoIW1f
bXVsdGlwbGUgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihjdXJyZW50KS0+c2Vs
ZWN0ZWQoKSkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvdW5kU2VsZWN0ZWQgPSBzdGF0aWNf
Y2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KGN1cnJlbnQpOwpAQCAtNTE5LDcgKzUxOSw3IEBAIHZv
aWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcygKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShoclRhZykpCi0gICAgICAg
ICAgICBtX2xpc3RJdGVtcy5hcHBlbmQoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihjdXJyZW50
KSk7CisgICAgICAgICAgICBtX2xpc3RJdGVtcy5hcHBlbmQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KGN1cnJlbnQpKTsKICAgICB9CiAgICAgbV9yZWNhbGNMaXN0SXRlbXMgPSBmYWxzZTsKIH0KQEAg
LTU1MSw3ICs1NTEsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXNldCgpCiB7CiAgICAg
Ym9vbCBvcHRpb25TZWxlY3RlZCA9IGZhbHNlOwogICAgIEhUTUxPcHRpb25FbGVtZW50KiBmaXJz
dE9wdGlvbiA9IDA7Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlz
dEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMo
KTsKICAgICB1bnNpZ25lZCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkr
KykgewogICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpKSB7CkBA
IC01NzQsMTQgKzU3NCwxNCBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXNldCgpCiB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQoKQogewogICAgIGlmICh1c2Vz
TWVudUxpc3QoKSkKLSAgICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBj
b21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbiB3aGVuIHdlIGNhbGwgb25DaGFuZ2UgZHVyaW5n
IGRpc3BhdGNoQmx1ckV2ZW50LgorICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQg
Y2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4gd2UgY2FsbCBkaXNwYXRj
aENoYW5nZUV2ZW50IGR1cmluZyBkaXNwYXRjaEJsdXJFdmVudC4KICAgICAgICAgc2F2ZUxhc3RT
ZWxlY3Rpb24oKTsKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaXNwYXRj
aEZvY3VzRXZlbnQoKTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6ZGlzcGF0Y2hCbHVy
RXZlbnQoKQogewotICAgIC8vIFdlIG9ubHkgbmVlZCB0byBmaXJlIG9uQ2hhbmdlIGhlcmUgZm9y
IG1lbnUgbGlzdHMsIGJlY2F1c2Ugd2UgZmlyZSBvbkNoYW5nZSBmb3IgbGlzdCBib3hlcyB3aGVu
ZXZlciB0aGUgc2VsZWN0aW9uIGNoYW5nZSBpcyBhY3R1YWxseSBtYWRlLgorICAgIC8vIFdlIG9u
bHkgbmVlZCB0byBmaXJlIGRpc3BhdGNoQ2hhbmdlRXZlbnQgaGVyZSBmb3IgbWVudSBsaXN0cywg
YmVjYXVzZSB3ZSBmaXJlIG9uQ2hhbmdlIGZvciBsaXN0IGJveGVzIHdoZW5ldmVyIHRoZSBzZWxl
Y3Rpb24gY2hhbmdlIGlzIGFjdHVhbGx5IG1hZGUuCiAgICAgLy8gVGhpcyBtYXRjaGVzIG90aGVy
IGJyb3dzZXJzJyBiZWhhdmlvci4KICAgICBpZiAodXNlc01lbnVMaXN0KCkpCiAgICAgICAgIG1l
bnVMaXN0T25DaGFuZ2UoKTsKQEAgLTYyNyw3ICs2MjcsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVt
ZW50OjptZW51TGlzdERlZmF1bHRFCiAjaWYgQVJST1dfS0VZU19QT1BfTUVOVQogICAgICAgICBp
ZiAoa2V5SWRlbnRpZmllciA9PSAiRG93biIgfHwga2V5SWRlbnRpZmllciA9PSAiVXAiKSB7CiAg
ICAgICAgICAgICBmb2N1cygpOwotICAgICAgICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNv
IGl0IGNhbiBiZSBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbiB3aGVuIHdlIGNhbGwgb25D
aGFuZ2UgZHVyaW5nIHNldFNlbGVjdGVkSW5kZXgsCisgICAgICAgICAgICAvLyBTYXZlIHRoZSBz
ZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4g
d2UgY2FsbCBkaXNwYXRjaENoYW5nZUV2ZW50IGR1cmluZyBzZXRTZWxlY3RlZEluZGV4LAogICAg
ICAgICAgICAgLy8gd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBSZW5kZXJNZW51TGlzdDo6dmFsdWVD
aGFuZ2VkLCB3aGljaCBnZXRzIGNhbGxlZCBhZnRlciB0aGUgdXNlciBtYWtlcyBhIHNlbGVjdGlv
biBmcm9tIHRoZSBtZW51LgogICAgICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24oKTsKICAgICAg
ICAgICAgIG1lbnVMaXN0LT5zaG93UG9wdXAoKTsKQEAgLTY2OSw3ICs2NjksNyBAQCB2b2lkIEhU
TUxTZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1bHRFCiAjaWYgQVJST1dfS0VZU19QT1BfTUVO
VQogICAgICAgICBpZiAoa2V5Q29kZSA9PSAnICcpIHsKICAgICAgICAgICAgIGZvY3VzKCk7Ci0g
ICAgICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRv
IHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4gd2UgY2FsbCBvbkNoYW5nZSBkdXJpbmcgc2V0U2VsZWN0
ZWRJbmRleCwKKyAgICAgICAgICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4gYmUg
Y29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24gd2hlbiB3ZSBjYWxsIGRpc3BhdGNoQ2hhbmdl
RXZlbnQgZHVyaW5nIHNldFNlbGVjdGVkSW5kZXgsCiAgICAgICAgICAgICAvLyB3aGljaCBnZXRz
IGNhbGxlZCBmcm9tIFJlbmRlck1lbnVMaXN0Ojp2YWx1ZUNoYW5nZWQsIHdoaWNoIGdldHMgY2Fs
bGVkIGFmdGVyIHRoZSB1c2VyIG1ha2VzIGEgc2VsZWN0aW9uIGZyb20gdGhlIG1lbnUuCiAgICAg
ICAgICAgICBzYXZlTGFzdFNlbGVjdGlvbigpOwogICAgICAgICAgICAgbWVudUxpc3QtPnNob3dQ
b3B1cCgpOwpAQCAtNjk4LDcgKzY5OCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVM
aXN0RGVmYXVsdEUKICAgICAgICAgaWYgKG1lbnVMaXN0LT5wb3B1cElzVmlzaWJsZSgpKQogICAg
ICAgICAgICAgbWVudUxpc3QtPmhpZGVQb3B1cCgpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4gYmUgY29tcGFyZWQgdG8gdGhlIG5l
dyBzZWxlY3Rpb24gd2hlbiB3ZSBjYWxsIG9uQ2hhbmdlIGR1cmluZyBzZXRTZWxlY3RlZEluZGV4
LAorICAgICAgICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJl
ZCB0byB0aGUgbmV3IHNlbGVjdGlvbiB3aGVuIHdlIGNhbGwgZGlzcGF0Y2hDaGFuZ2VFdmVudCBk
dXJpbmcgc2V0U2VsZWN0ZWRJbmRleCwKICAgICAgICAgICAgIC8vIHdoaWNoIGdldHMgY2FsbGVk
IGZyb20gUmVuZGVyTWVudUxpc3Q6OnZhbHVlQ2hhbmdlZCwgd2hpY2ggZ2V0cyBjYWxsZWQgYWZ0
ZXIgdGhlIHVzZXIgbWFrZXMgYSBzZWxlY3Rpb24gZnJvbSB0aGUgbWVudS4KICAgICAgICAgICAg
IHNhdmVMYXN0U2VsZWN0aW9uKCk7CiAgICAgICAgICAgICBtZW51TGlzdC0+c2hvd1BvcHVwKCk7
CkBAIC03MTUsNyArNzE1LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveERlZmF1
bHRFdgogICAgICAgICBNb3VzZUV2ZW50KiBtRXZ0ID0gc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+
KGV2dCk7CiAgICAgICAgIGludCBsaXN0SW5kZXggPSBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0Qm94
Kj4ocmVuZGVyZXIoKSktPmxpc3RJbmRleEF0T2Zmc2V0KG1FdnQtPm9mZnNldFgoKSwgbUV2dC0+
b2Zmc2V0WSgpKTsKICAgICAgICAgaWYgKGxpc3RJbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAv
LyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2Vs
ZWN0aW9uIHdoZW4gd2UgY2FsbCBvbkNoYW5nZSBkdXJpbmcgbW91c2V1cCwgb3IgYWZ0ZXIgYXV0
b3Njcm9sbCBmaW5pc2hlcy4KKyAgICAgICAgICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBp
dCBjYW4gYmUgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24gd2hlbiB3ZSBjYWxsIGRpc3Bh
dGNoQ2hhbmdlRXZlbnQgZHVyaW5nIG1vdXNldXAsIG9yIGFmdGVyIGF1dG9zY3JvbGwgZmluaXNo
ZXMuCiAgICAgICAgICAgICBzYXZlTGFzdFNlbGVjdGlvbigpOwogCiAgICAgICAgICAgICBtX2Fj
dGl2ZVNlbGVjdGlvblN0YXRlID0gdHJ1ZTsKQEAgLTczMCw3ICs3MzAsNyBAQCB2b2lkIEhUTUxT
ZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2CiAgICAgICAgICAgICBib29sIHNoaWZ0U2Vs
ZWN0ID0gbXVsdGlwbGUoKSAmJiBtRXZ0LT5zaGlmdEtleSgpOwogICAgICAgICAgICAgYm9vbCBt
dWx0aVNlbGVjdCA9IG11bHRpcGxlKCkgJiYgbXVsdGlTZWxlY3RLZXlQcmVzc2VkICYmICFtRXZ0
LT5zaGlmdEtleSgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBIVE1MRWxlbWVudCogY2xp
Y2tlZEVsZW1lbnQgPSBsaXN0SXRlbXMoKVtsaXN0SW5kZXhdOyAgICAgICAgICAgIAorICAgICAg
ICAgICAgRWxlbWVudCogY2xpY2tlZEVsZW1lbnQgPSBsaXN0SXRlbXMoKVtsaXN0SW5kZXhdOyAg
ICAgICAgICAgIAogICAgICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IDA7CiAg
ICAgICAgICAgICBpZiAoY2xpY2tlZEVsZW1lbnQtPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpKSB7
CiAgICAgICAgICAgICAgICAgb3B0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQq
PihjbGlja2VkRWxlbWVudCk7CkBAIC03NzAsNyArNzcwLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudDo6bGlzdEJveERlZmF1bHRFdgogICAgICAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2V1cEV2ZW50ICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91
c2VFdmVudCo+KGV2dCktPmJ1dHRvbigpID09IExlZnRCdXR0b24gJiYgZG9jdW1lbnQoKS0+ZnJh
bWUoKS0+ZXZlbnRIYW5kbGVyKCktPmF1dG9zY3JvbGxSZW5kZXJlcigpICE9IHJlbmRlcmVyKCkp
Ci0gICAgICAgIC8vIFRoaXMgbWFrZXMgc3VyZSB3ZSBmaXJlIG9uQ2hhbmdlIGZvciBhIHNpbmds
ZSBjbGljay4gIEZvciBkcmFnIHNlbGVjdGlvbiwgb25DaGFuZ2Ugd2lsbCBmaXJlIHdoZW4gdGhl
IGF1dG9zY3JvbGwgdGltZXIgc3RvcHMuCisgICAgICAgIC8vIFRoaXMgbWFrZXMgc3VyZSB3ZSBm
aXJlIGRpc3BhdGNoQ2hhbmdlRXZlbnQgZm9yIGEgc2luZ2xlIGNsaWNrLiAgRm9yIGRyYWcgc2Vs
ZWN0aW9uLCBvbkNoYW5nZSB3aWxsIGZpcmUgd2hlbiB0aGUgYXV0b3Njcm9sbCB0aW1lciBzdG9w
cy4KICAgICAgICAgbGlzdEJveE9uQ2hhbmdlKCk7CiAgICAgZWxzZSBpZiAoZXZ0LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgewogICAgICAgICBpZiAoIWV2dC0+aXNLZXli
b2FyZEV2ZW50KCkpCkBAIC03OTMsNyArNzkzLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6
bGlzdEJveERlZmF1bHRFdgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoa2V5SWRl
bnRpZmllciA9PSAiRG93biIgfHwga2V5SWRlbnRpZmllciA9PSAiVXAiKSB7Ci0gICAgICAgICAg
ICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBuZXcg
c2VsZWN0aW9uIHdoZW4gd2UgY2FsbCBvbkNoYW5nZSBpbW1lZGlhdGVseSBhZnRlciBtYWtpbmcg
dGhlIG5ldyBzZWxlY3Rpb24uCisgICAgICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28g
aXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4gd2UgY2FsbCBkaXNw
YXRjaENoYW5nZUV2ZW50IGltbWVkaWF0ZWx5IGFmdGVyIG1ha2luZyB0aGUgbmV3IHNlbGVjdGlv
bi4KICAgICAgICAgICAgIHNhdmVMYXN0U2VsZWN0aW9uKCk7CiAKICAgICAgICAgICAgIEFTU0VS
VChlbmRJbmRleCA+PSAwICYmICh1bnNpZ25lZCllbmRJbmRleCA8IGxpc3RJdGVtcygpLnNpemUo
KSk7IApAQCAtODMyLDcgKzgzMiw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2
ZVNlbGVjdGkKICAgICBtX2FjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4ID0gaW5kZXg7CiAgICAg
CiAgICAgLy8gQ2FjaGUgdGhlIHNlbGVjdGlvbiBzdGF0ZSBzbyB3ZSBjYW4gcmVzdG9yZSB0aGUg
b2xkIHNlbGVjdGlvbiBhcyB0aGUgbmV3IHNlbGVjdGlvbiBwaXZvdHMgYXJvdW5kIHRoaXMgYW5j
aG9yIGluZGV4Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0
ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsK
ICAgICBtX2NhY2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uLmNsZWFyKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmIChpdGVt
c1tpXS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpIHsKQEAgLTg1Myw3ICs4NTMsNyBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50Ojp1cGRhdGVMaXN0Qm94U2VsCiAgICAgc3RhcnQgPSBtaW4obV9h
Y3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleCwgbV9hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCk7CiAg
ICAgZW5kID0gbWF4KG1fYWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgsIG1fYWN0aXZlU2VsZWN0
aW9uRW5kSW5kZXgpOwogCi0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0g
bGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRl
bXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsK
ICAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSkgewogICAgICAg
ICAgICAgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25F
bGVtZW50Kj4oaXRlbXNbaV0pOwpAQCAtODc3LDcgKzg3Nyw3IEBAIHZvaWQgSFRNTFNlbGVjdEVs
ZW1lbnQ6Om1lbnVMaXN0T25DaGFuZ2UKICAgICBpbnQgc2VsZWN0ZWQgPSBzZWxlY3RlZEluZGV4
KCk7CiAgICAgaWYgKG1fbGFzdE9uQ2hhbmdlSW5kZXggIT0gc2VsZWN0ZWQpIHsKICAgICAgICAg
bV9sYXN0T25DaGFuZ2VJbmRleCA9IHNlbGVjdGVkOwotICAgICAgICBvbkNoYW5nZSgpOworICAg
ICAgICBkaXNwYXRjaENoYW5nZUV2ZW50KCk7CiAgICAgfQogfQogCkBAIC04ODUsMTUgKzg4NSwx
NSBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94T25DaGFuZ2UoCiB7CiAgICAgQVNT
RVJUKCF1c2VzTWVudUxpc3QoKSk7CiAKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYg
aXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9
IGxpc3RJdGVtcygpOwogICAgIAotICAgIC8vIElmIHRoZSBjYWNoZWQgc2VsZWN0aW9uIGxpc3Qg
aXMgZW1wdHksIG9yIHRoZSBzaXplIGhhcyBjaGFuZ2VkLCB0aGVuIGZpcmUgb25DaGFuZ2UsIGFu
ZCByZXR1cm4gZWFybHkuCisgICAgLy8gSWYgdGhlIGNhY2hlZCBzZWxlY3Rpb24gbGlzdCBpcyBl
bXB0eSwgb3IgdGhlIHNpemUgaGFzIGNoYW5nZWQsIHRoZW4gZmlyZSBkaXNwYXRjaENoYW5nZUV2
ZW50LCBhbmQgcmV0dXJuIGVhcmx5LgogICAgIGlmIChtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbi5p
c0VtcHR5KCkgfHwgbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24uc2l6ZSgpICE9IGl0ZW1zLnNpemUo
KSkgewotICAgICAgICBvbkNoYW5nZSgpOworICAgICAgICBkaXNwYXRjaENoYW5nZUV2ZW50KCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlIG1fbGFzdE9uQ2hh
bmdlU2VsZWN0aW9uIGFuZCBmaXJlIG9uQ2hhbmdlCisgICAgLy8gVXBkYXRlIG1fbGFzdE9uQ2hh
bmdlU2VsZWN0aW9uIGFuZCBmaXJlIGRpc3BhdGNoQ2hhbmdlRXZlbnQKICAgICBib29sIGZpcmVP
bkNoYW5nZSA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXpl
KCk7IGkrKykgewogICAgICAgICBib29sIHNlbGVjdGVkID0gZmFsc2U7CkBAIC05MDQsMTIgKzkw
NCwxMiBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94T25DaGFuZ2UoCiAgICAgICAg
IG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uW2ldID0gc2VsZWN0ZWQ7CiAgICAgfQogICAgIGlmIChm
aXJlT25DaGFuZ2UpCi0gICAgICAgIG9uQ2hhbmdlKCk7CisgICAgICAgIGRpc3BhdGNoQ2hhbmdl
RXZlbnQoKTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3Rpb24o
KQogewotICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygp
OworICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAKICAg
ICBpZiAodXNlc01lbnVMaXN0KCkpIHsKICAgICAgICAgbV9sYXN0T25DaGFuZ2VJbmRleCA9IHNl
bGVjdGVkSW5kZXgoKTsKQEAgLTk2Nyw3ICs5NjcsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50
Ojp0eXBlQWhlYWRGaW5kKEtlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjb25zdCBWZWN0b3I8
SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxl
bWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGludCBpdGVtQ291bnQgPSBpdGVtcy5z
aXplKCk7CiAgICAgaWYgKGl0ZW1Db3VudCA8IDEpCiAgICAgICAgIHJldHVybjsKQEAgLTk5Miw3
ICs5OTIsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojp0eXBlQWhlYWRGaW5kKEtlCiAKIGlu
dCBIVE1MU2VsZWN0RWxlbWVudDo6bmV4dFNlbGVjdGFibGVMaXN0SW5kZXgoaW50IHN0YXJ0SW5k
ZXgpCiB7Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1z
KCk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAg
ICBpbnQgaW5kZXggPSBzdGFydEluZGV4ICsgMTsKICAgICB3aGlsZSAoaW5kZXggPj0gMCAmJiAo
dW5zaWduZWQpaW5kZXggPCBpdGVtcy5zaXplKCkgJiYgKCFpdGVtc1tpbmRleF0tPmhhc0xvY2Fs
TmFtZShvcHRpb25UYWcpIHx8IGl0ZW1zW2luZGV4XS0+ZGlzYWJsZWQoKSkpCiAgICAgICAgIGlu
ZGV4Kys7CkBAIC0xMDAzLDcgKzEwMDMsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Om5leHRT
ZWxlY3RhYmxlTGlzCiAKIGludCBIVE1MU2VsZWN0RWxlbWVudDo6cHJldmlvdXNTZWxlY3RhYmxl
TGlzdEluZGV4KGludCBzdGFydEluZGV4KQogewotICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVu
dCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGl0
ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaWYgKHN0YXJ0SW5kZXggPT0gLTEpCiAgICAgICAgIHN0
YXJ0SW5kZXggPSBpdGVtcy5zaXplKCk7CiAgICAgaW50IGluZGV4ID0gc3RhcnRJbmRleCAtIDE7
CkBAIC0xMTE1LDcgKzExMTUsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzY3JvbGxUb1Nl
bGVjdGlvCiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmNoZWNrTGlzdEl0ZW1zKCkgY29uc3QK
IHsKLSAgICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IG1fbGlzdEl0ZW1zOworICAgIFZl
Y3RvcjxFbGVtZW50Kj4gaXRlbXMgPSBtX2xpc3RJdGVtczsKICAgICByZWNhbGNMaXN0SXRlbXMo
ZmFsc2UpOwogICAgIEFTU0VSVChpdGVtcyA9PSBtX2xpc3RJdGVtcyk7CiB9CkluZGV4OiBodG1s
L0hUTUxTZWxlY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MU2VsZWN0RWxlbWVu
dC5oCShyZXZpc2lvbiA0MDc0MSkKKysrIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAi
SFRNTENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCisj
aW5jbHVkZSAiU2VsZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMzUsNyArMzYsNyBAQCBjbGFzcyBIVE1MT3B0aW9uRWxlbWVu
dDsKIGNsYXNzIEhUTUxPcHRpb25zQ29sbGVjdGlvbjsKIGNsYXNzIEtleWJvYXJkRXZlbnQ7CiAK
LWNsYXNzIEhUTUxTZWxlY3RFbGVtZW50IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRX
aXRoU3RhdGUgeworY2xhc3MgSFRNTFNlbGVjdEVsZW1lbnQgOiBwdWJsaWMgSFRNTEZvcm1Db250
cm9sRWxlbWVudFdpdGhTdGF0ZSwgcHVibGljIFNlbGVjdEVsZW1lbnQgewogcHVibGljOgogICAg
IEhUTUxTZWxlY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxG
b3JtRWxlbWVudCogPSAwKTsKIApAQCAtNTYsOCArNTcsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dmlydHVhbCBib29sIGNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
IAotICAgIGludCBzZWxlY3RlZEluZGV4KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTZWxlY3RlZElu
ZGV4KGludCBpbmRleCwgYm9vbCBkZXNlbGVjdCA9IHRydWUsIGJvb2wgZmlyZU9uQ2hhbmdlID0g
ZmFsc2UpOworICAgIHZpcnR1YWwgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0U2VsZWN0ZWRJbmRleChpbnQgaW5kZXgsIGJvb2wgZGVzZWxlY3QgPSB0cnVl
LCBib29sIGZpcmVPbkNoYW5nZSA9IGZhbHNlKTsKICAgICBpbnQgbGFzdFNlbGVjdGVkTGlzdElu
ZGV4KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNFbnVtZXJhdGFibGUoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CkBAIC02Niw5ICs2Nyw5IEBAIHB1YmxpYzoKIAogICAgIGludCBtaW5X
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWlud2lkdGg7IH0KIAotICAgIGludCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgdmlydHVhbCBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQogCi0gICAgYm9vbCBtdWx0aXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbXVs
dGlwbGU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbXVsdGlwbGUoKSBjb25zdCB7IHJldHVybiBtX211
bHRpcGxlOyB9CiAKICAgICB2b2lkIGFkZChIVE1MRWxlbWVudCogZWxlbWVudCwgSFRNTEVsZW1l
bnQqIGJlZm9yZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgcmVtb3ZlKGludCBpbmRleCk7
CkBAIC05NCwxMyArOTUsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBhcHBlbmRGb3Jt
RGF0YShGb3JtRGF0YUxpc3QmLCBib29sKTsKIAogICAgIC8vIGdldCB0aGUgYWN0dWFsIGxpc3Ri
b3ggaW5kZXggb2YgdGhlIG9wdGlvbkluZGV4dGggb3B0aW9uCi0gICAgaW50IG9wdGlvblRvTGlz
dEluZGV4KGludCBvcHRpb25JbmRleCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgb3B0aW9uVG9M
aXN0SW5kZXgoaW50IG9wdGlvbkluZGV4KSBjb25zdDsKICAgICAvLyByZXZlcnNlIG9mIG9wdGlv
blRvTGlzdEluZGV4IC0gZ2V0IG9wdGlvbkluZGV4IGZyb20gbGlzdGJveEluZGV4Ci0gICAgaW50
IGxpc3RUb09wdGlvbkluZGV4KGludCBsaXN0SW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50
IGxpc3RUb09wdGlvbkluZGV4KGludCBsaXN0SW5kZXgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRS
ZWNhbGNMaXN0SXRlbXMoKTsKIAotICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0
SXRlbXMoKSBjb25zdAorICAgIHZpcnR1YWwgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgbGlzdEl0
ZW1zKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX3JlY2FsY0xpc3RJdGVtcykKICAgICAg
ICAgICAgIHJlY2FsY0xpc3RJdGVtcygpOwpAQCAtMTI2LDE0ICsxMjcsMTQgQEAgcHVibGljOgog
CiAgICAgSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25JbmZvKiBjb2xsZWN0aW9uSW5mbygpIHsg
cmV0dXJuICZtX2NvbGxlY3Rpb25JbmZvOyB9CiAgICAgCi0gICAgdm9pZCBzZXRBY3RpdmVTZWxl
Y3Rpb25BbmNob3JJbmRleChpbnQgaW5kZXgpOwotICAgIHZvaWQgc2V0QWN0aXZlU2VsZWN0aW9u
RW5kSW5kZXgoaW50IGluZGV4KSB7IG1fYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXggPSBpbmRleDsg
fQotICAgIHZvaWQgdXBkYXRlTGlzdEJveFNlbGVjdGlvbihib29sIGRlc2VsZWN0T3RoZXJPcHRp
b25zKTsKLSAgICB2b2lkIGxpc3RCb3hPbkNoYW5nZSgpOwotICAgIHZvaWQgbWVudUxpc3RPbkNo
YW5nZSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChp
bnQgaW5kZXgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRleChp
bnQgaW5kZXgpIHsgbV9hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCA9IGluZGV4OyB9CisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUxpc3RCb3hTZWxlY3Rpb24oYm9vbCBkZXNlbGVjdE90aGVyT3B0aW9u
cyk7CisgICAgdmlydHVhbCB2b2lkIGxpc3RCb3hPbkNoYW5nZSgpOworICAgIHZpcnR1YWwgdm9p
ZCBtZW51TGlzdE9uQ2hhbmdlKCk7CiAgICAgCi0gICAgaW50IGFjdGl2ZVNlbGVjdGlvblN0YXJ0
TGlzdEluZGV4KCkgY29uc3Q7Ci0gICAgaW50IGFjdGl2ZVNlbGVjdGlvbkVuZExpc3RJbmRleCgp
IGNvbnN0OworICAgIHZpcnR1YWwgaW50IGFjdGl2ZVNlbGVjdGlvblN0YXJ0TGlzdEluZGV4KCkg
Y29uc3Q7CisgICAgdmlydHVhbCBpbnQgYWN0aXZlU2VsZWN0aW9uRW5kTGlzdEluZGV4KCkgY29u
c3Q7CiAgICAgCiAgICAgdm9pZCBzY3JvbGxUb1NlbGVjdGlvbigpOwogCkBAIC0xNTAsNyArMTUx
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHR5cGVBaGVhZEZpbmQoS2V5Ym9hcmRFdmVudCopOwog
ICAgIHZvaWQgc2F2ZUxhc3RTZWxlY3Rpb24oKTsKIAotICAgIG11dGFibGUgVmVjdG9yPEhUTUxF
bGVtZW50Kj4gbV9saXN0SXRlbXM7CisgICAgbXV0YWJsZSBWZWN0b3I8RWxlbWVudCo+IG1fbGlz
dEl0ZW1zOwogICAgIFZlY3Rvcjxib29sPiBtX2NhY2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9u
OwogICAgIFZlY3Rvcjxib29sPiBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbjsKICAgICBpbnQgbV9t
aW53aWR0aDsKSW5kZXg6IHBhZ2UvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHBhZ2UvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwCShyZXZpc2lvbiA0MDc0MSkKKysrIHBh
Z2UvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxMCArNzQs
MTAgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5TGlzdEJveDo6YWRkQ2hpbGRyZW4oKQogICAgIAogICAg
IG1faGF2ZUNoaWxkcmVuID0gdHJ1ZTsKICAgICAKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1l
bnQqPiYgbGlzdEl0ZW1zID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihzZWxlY3RO
b2RlKS0+bGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgbGlzdEl0ZW1z
ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihzZWxlY3ROb2RlKS0+bGlzdEl0ZW1z
KCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbGlzdEl0ZW1zLnNpemUoKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogbGlzdE9wdGlvbiA9IGxpc3RCb3hPcHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KGxpc3RJ
dGVtc1tpXSk7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGxpc3RPcHRpb24gPSBsaXN0
Qm94T3B0aW9uQWNjZXNzaWJpbGl0eU9iamVjdChzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGxp
c3RJdGVtc1tpXSkpOwogICAgICAgICBpZiAobGlzdE9wdGlvbikKICAgICAgICAgICAgIG1fY2hp
bGRyZW4uYXBwZW5kKGxpc3RPcHRpb24pOwogICAgIH0KQEAgLTE2MywxMiArMTYzLDEyIEBAIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlMaXN0Qm8KICAgICAKICAgICBJbnRSZWN0
IHBhcmVudFJlY3QgPSBib3VuZGluZ0JveFJlY3QoKTsKICAgICAKLSAgICBjb25zdCBWZWN0b3I8
SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQq
PihlbGVtZW50KS0+bGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgbGlz
dEl0ZW1zID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihlbGVtZW50KS0+bGlzdEl0
ZW1zKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbGlzdEl0ZW1zLnNpemUoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgSW50UmVjdCByZWN0
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEJveCo+KG1fcmVuZGVyZXIpLT5pdGVtQm91bmRpbmdC
b3hSZWN0KHBhcmVudFJlY3QueCgpLCBwYXJlbnRSZWN0LnkoKSwgaSk7CiAgICAgICAgIGlmIChy
ZWN0LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiBsaXN0Qm94T3B0aW9uQWNj
ZXNzaWJpbGl0eU9iamVjdChsaXN0SXRlbXNbaV0pOworICAgICAgICAgICAgcmV0dXJuIGxpc3RC
b3hPcHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obGlz
dEl0ZW1zW2ldKSk7CiAgICAgfQogICAgIAogICAgIHJldHVybiBheE9iamVjdENhY2hlKCktPmdl
dChtX3JlbmRlcmVyKTsKSW5kZXg6IHBhZ2UvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHBhZ2UvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwCShyZXZp
c2lvbiA0MDc0MSkKKysrIHBhZ2UvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTUsNyArMTk1LDcgQEAgaW50IEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0
aW9uOjpsaXN0Qm94TwogICAgIGlmICghc2VsZWN0RWxlbWVudCkgCiAgICAgICAgIHJldHVybiAt
MTsKICAgICAKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2Vs
ZWN0RWxlbWVudC0+bGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgbGlz
dEl0ZW1zID0gc2VsZWN0RWxlbWVudC0+bGlzdEl0ZW1zKCk7CiAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gbGlzdEl0ZW1zLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspCiAgICAgICAgIGlmIChsaXN0SXRlbXNbaV0gPT0gbV9vcHRpb25FbGVtZW50KQpJbmRl
eDogcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdl
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA0MDc0MSkKKysrIHBhZ2Uv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzOCwxMCAr
NTM4LDEwIEBAIEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjdGkKIAogICAg
IGlmIChpc0ltYWdlQnV0dG9uKCkpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obV9yZW5kZXJlci0+ZWxlbWVudCgpKTsKLSAgICAKKwogICAgIGlmIChtX3JlbmRlcmVyLT5p
c01lbnVMaXN0KCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJNZW51TGlzdCo+
KG1fcmVuZGVyZXIpLT5zZWxlY3RFbGVtZW50KCk7Ci0gICAgCisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obV9yZW5kZXJlci0+ZWxlbWVudCgpKTsKKwogICAgIEVsZW1lbnQq
IGVsdCA9IGFuY2hvckVsZW1lbnQoKTsKICAgICBpZiAoIWVsdCkKICAgICAgICAgZWx0ID0gbW91
c2VCdXR0b25MaXN0ZW5lcigpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250
cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wu
Y3BwCShyZXZpc2lvbiA0MDc0MSkKKysrIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJv
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDEyICs4NCwxMiBAQCB2b2lkIFJlbmRlckZpbGVV
cGxvYWRDb250cm9sOjpzdHlsZURpZENoCiAKIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6
OnZhbHVlQ2hhbmdlZCgpCiB7Ci0gICAgLy8gb25DaGFuZ2UgbWF5IGRlc3Ryb3kgdGhpcyByZW5k
ZXJlcgorICAgIC8vIGRpc3BhdGNoQ2hhbmdlRXZlbnQgbWF5IGRlc3Ryb3kgdGhpcyByZW5kZXJl
cgogICAgIFJlZlB0cjxGaWxlQ2hvb3Nlcj4gZmlsZUNob29zZXIgPSBtX2ZpbGVDaG9vc2VyOwog
CiAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudCo+KG5vZGUoKSk7CiAgICAgaW5wdXRFbGVtZW50LT5zZXRGaWxlTGlzdEZyb21S
ZW5kZXJlcihmaWxlQ2hvb3Nlci0+ZmlsZW5hbWVzKCkpOwotICAgIGlucHV0RWxlbWVudC0+b25D
aGFuZ2UoKTsKKyAgICBpbnB1dEVsZW1lbnQtPmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTsKICAKICAg
ICAvLyBvbmx5IHJlcGFpbnQgaWYgaXQgZG9lc24ndCBzZWVtIHdlIGhhdmUgYmVlbiBkZXN0cm95
ZWQKICAgICBpZiAoIWZpbGVDaG9vc2VyLT5kaXNjb25uZWN0ZWQoKSkKSW5kZXg6IHJlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAJKHJldmlzaW9uIDQwNzQxKQorKysgcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsMTEgQEAKICNpbmNsdWRlICJFdmVudEhhbmRsZXIu
aCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgi
CisjaW5jbHVkZSAiRm9ybUNvbnRyb2xFbGVtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MU2VsZWN0RWxlbWVudC5oIgogI2luY2x1
ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJPcHRpb25Hcm91cEVsZW1lbnQuaCIKICNp
bmNsdWRlICJPcHRpb25FbGVtZW50LmgiCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiUmVu
ZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFy
LmgiCisjaW5jbHVkZSAiU2VsZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlIDxtYXRoLmg+
CkBAIC03Miw3ICs3Myw3IEBAIGNvbnN0IGludCBtYXhEZWZhdWx0U2l6ZSA9IDEwOwogLy8gd2lk
Z2V0LCBidXQgSSdtIG5vdCBzdXJlIHRoaXMgaXMgcmlnaHQgZm9yIHRoZSBuZXcgY29udHJvbC4K
IGNvbnN0IGludCBiYXNlbGluZUFkanVzdG1lbnQgPSA3OwogCi1SZW5kZXJMaXN0Qm94OjpSZW5k
ZXJMaXN0Qm94KEhUTUxTZWxlY3RFbGVtZW50KiBlbGVtZW50KQorUmVuZGVyTGlzdEJveDo6UmVu
ZGVyTGlzdEJveChFbGVtZW50KiBlbGVtZW50KQogICAgIDogUmVuZGVyQmxvY2soZWxlbWVudCkK
ICAgICAsIG1fb3B0aW9uc0NoYW5nZWQodHJ1ZSkKICAgICAsIG1fc2Nyb2xsVG9SZXZlYWxTZWxl
Y3Rpb25BZnRlckxheW91dChmYWxzZSkKQEAgLTk2LDEyICs5NywxMiBAQCB2b2lkIFJlbmRlckxp
c3RCb3g6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlCiB2b2lkIFJlbmRlckxpc3RCb3g6OnVwZGF0ZUZy
b21FbGVtZW50KCkKIHsKICAgICBpZiAobV9vcHRpb25zQ2hhbmdlZCkgewotICAgICAgICBjb25z
dCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVj
dEVsZW1lbnQqPihub2RlKCkpLT5saXN0SXRlbXMoKTsKKyAgICAgICAgY29uc3QgVmVjdG9yPEVs
ZW1lbnQqPiYgbGlzdEl0ZW1zID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQq
Pihub2RlKCkpKS0+bGlzdEl0ZW1zKCk7CiAgICAgICAgIGludCBzaXplID0gbnVtSXRlbXMoKTsK
ICAgICAgICAgCiAgICAgICAgIGZsb2F0IHdpZHRoID0gMDsKICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0g
bGlzdEl0ZW1zW2ldOworICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tp
XTsKICAgICAgICAgICAgIFN0cmluZyB0ZXh0OwogICAgICAgICAgICAgRm9udCBpdGVtRm9udCA9
IHN0eWxlKCktPmZvbnQoKTsKICAgICAgICAgICAgIGlmIChPcHRpb25FbGVtZW50KiBvcHRpb25F
bGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGVsZW1lbnQpKQpAQCAtMTUxLDcgKzE1Miw3IEBAIHZv
aWQgUmVuZGVyTGlzdEJveDo6bGF5b3V0KCkKIAogdm9pZCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxU
b1JldmVhbFNlbGVjdGlvbigpCiB7ICAgIAotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3Qg
PSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgU2VsZWN0RWxl
bWVudCogc2VsZWN0ID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2Rl
KCkpKTsKIAogICAgIG1fc2Nyb2xsVG9SZXZlYWxTZWxlY3Rpb25BZnRlckxheW91dCA9IGZhbHNl
OwogCkBAIC0xOTcsNyArMTk4LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpjYWxjUHJlZldpZHRo
cygpCiAKIGludCBSZW5kZXJMaXN0Qm94OjpzaXplKCkgY29uc3QKIHsKLSAgICBpbnQgc3BlY2lm
aWVkU2l6ZSA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9kZSgpKS0+c2l6ZSgp
OworICAgIGludCBzcGVjaWZpZWRTaXplID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihub2RlKCkpKS0+c2l6ZSgpOwogICAgIGlmIChzcGVjaWZpZWRTaXplID4gMSkKICAg
ICAgICAgcmV0dXJuIG1heChtaW5TaXplLCBzcGVjaWZpZWRTaXplKTsKICAgICByZXR1cm4gbWlu
KG1heChtaW5TaXplLCBudW1JdGVtcygpKSwgbWF4RGVmYXVsdFNpemUpOwpAQCAtMjExLDcgKzIx
Miw3IEBAIGludCBSZW5kZXJMaXN0Qm94OjpudW1WaXNpYmxlSXRlbXMoKSBjb24KIAogaW50IFJl
bmRlckxpc3RCb3g6Om51bUl0ZW1zKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpLT5saXN0SXRlbXMoKS5zaXplKCk7CisgICAgcmV0
dXJuIHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSktPmxpc3RJ
dGVtcygpLnNpemUoKTsKIH0KIAogaW50IFJlbmRlckxpc3RCb3g6Omxpc3RIZWlnaHQoKSBjb25z
dApAQCAtMjkzLDkgKzI5NCw5IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRTY3JvbGxiYXIo
UGFpbnQKIAogdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKFBhaW50SW5m
byYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSwgaW50IGxpc3RJbmRleCkKIHsKLSAgICBIVE1M
U2VsZWN0RWxlbWVudCogc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihu
b2RlKCkpOwotICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxl
Y3QtPmxpc3RJdGVtcygpOwotICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xp
c3RJbmRleF07CisgICAgU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9TZWxlY3RFbGVtZW50KHN0
YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+
JiBsaXN0SXRlbXMgPSBzZWxlY3QtPmxpc3RJdGVtcygpOworICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKICAgICBPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50
ID0gdG9PcHRpb25FbGVtZW50KGVsZW1lbnQpOwogCiAgICAgU3RyaW5nIGl0ZW1UZXh0OwpAQCAt
MzQyLDkgKzM0Myw5IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZCgK
IAogdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1CYWNrZ3JvdW5kKFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBpbnQgdHgsIGludCB0eSwgaW50IGxpc3RJbmRleCkKIHsKLSAgICBIVE1MU2VsZWN0
RWxlbWVudCogc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkp
OwotICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3QtPmxp
c3RJdGVtcygpOwotICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRl
eF07CisgICAgU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19j
YXN0PEVsZW1lbnQqPihub2RlKCkpKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBsaXN0
SXRlbXMgPSBzZWxlY3QtPmxpc3RJdGVtcygpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0
SXRlbXNbbGlzdEluZGV4XTsKICAgICBPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9P
cHRpb25FbGVtZW50KGVsZW1lbnQpOwogCiAgICAgQ29sb3IgYmFja0NvbG9yOwpAQCAtNDM4LDcg
KzQzOSw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFuU2Nyb2xsKGNvbnN0IEludFAKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgbV9pbkF1dG9zY3JvbGwgPSB0cnVlOwotICAgIEhUTUxTZWxlY3RF
bGVtZW50KiBzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KG5vZGUoKSk7
CisgICAgU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKCkpKTsKICAgICBzZWxlY3QtPnVwZGF0ZUxpc3RCb3hTZWxlY3Rpb24o
IXNlbGVjdC0+bXVsdGlwbGUoKSk7CiAgICAgbV9pbkF1dG9zY3JvbGwgPSBmYWxzZTsKIH0KQEAg
LTQ2OCw3ICs0NjksNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OmF1dG9zY3JvbGwoKQogCiAgICAg
aW50IGVuZEluZGV4ID0gc2Nyb2xsVG93YXJkKHBvcyk7CiAgICAgaWYgKGVuZEluZGV4ID49IDAp
IHsKLSAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxT
ZWxlY3RFbGVtZW50Kj4obm9kZSgpKTsKKyAgICAgICAgU2VsZWN0RWxlbWVudCogc2VsZWN0ID0g
dG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKTsKICAgICAgICAg
bV9pbkF1dG9zY3JvbGwgPSB0cnVlOwogCiAgICAgICAgIGlmICghc2VsZWN0LT5tdWx0aXBsZSgp
KQpAQCAtNDgyLDcgKzQ4Myw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6YXV0b3Njcm9sbCgpCiAK
IHZvaWQgUmVuZGVyTGlzdEJveDo6c3RvcEF1dG9zY3JvbGwoKQogewotICAgIHN0YXRpY19jYXN0
PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9kZSgpKS0+bGlzdEJveE9uQ2hhbmdlKCk7CisgICAgdG9T
ZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKS0+bGlzdEJveE9uQ2hh
bmdlKCk7CiB9CiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6c2Nyb2xsVG9SZXZlYWxFbGVtZW50QXRM
aXN0SW5kZXgoaW50IGluZGV4KQpAQCAtNTE1LDkgKzUxNiwxMCBAQCBib29sIFJlbmRlckxpc3RC
b3g6OnNjcm9sbChTY3JvbGxEaXJlY3RpCiAKIHZvaWQgUmVuZGVyTGlzdEJveDo6dmFsdWVDaGFu
Z2VkKHVuc2lnbmVkIGxpc3RJbmRleCkKIHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0
ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpOworICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBTZWxlY3RFbGVt
ZW50KiBzZWxlY3QgPSB0b1NlbGVjdEVsZW1lbnQoZWxlbWVudCk7CiAgICAgc2VsZWN0LT5zZXRT
ZWxlY3RlZEluZGV4KHNlbGVjdC0+bGlzdFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSk7Ci0gICAg
c2VsZWN0LT5vbkNoYW5nZSgpOworICAgIHRvRm9ybUNvbnRyb2xFbGVtZW50KGVsZW1lbnQpLT5k
aXNwYXRjaENoYW5nZUV2ZW50KCk7CiB9CiAKIHZvaWQgUmVuZGVyTGlzdEJveDo6dmFsdWVDaGFu
Z2VkKFNjcm9sbGJhciopCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHJldmlzaW9uIDQwNzQxKQorKysgcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDkgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBIVE1MU2VsZWN0RWxlbWVudDsKLQogY2xh
c3MgUmVuZGVyTGlzdEJveCA6IHB1YmxpYyBSZW5kZXJCbG9jaywgcHJpdmF0ZSBTY3JvbGxiYXJD
bGllbnQgewogcHVibGljOgotICAgIFJlbmRlckxpc3RCb3goSFRNTFNlbGVjdEVsZW1lbnQqKTsK
KyAgICBSZW5kZXJMaXN0Qm94KEVsZW1lbnQqKTsKICAgICB+UmVuZGVyTGlzdEJveCgpOwogCiAg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRl
ckxpc3RCb3giOyB9CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHJldmlzaW9uIDQwNzQxKQorKysg
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsOSArMjUs
OSBAQAogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCiAKICNpbmNsdWRlICJDU1NTdHlsZVNl
bGVjdG9yLmgiCisjaW5jbHVkZSAiRm9ybUNvbnRyb2xFbGVtZW50LmgiCiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFNlbGVjdEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJPcHRpb25F
bGVtZW50LmgiCiAjaW5jbHVkZSAiT3B0aW9uR3JvdXBFbGVtZW50LmgiCkBAIC0zNSw2ICszNSw3
IEBACiAjaW5jbHVkZSAiUmVuZGVyQlIuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlNlbGVjdEVsZW1lbnQuaCIKICNp
bmNsdWRlIDxtYXRoLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC00Myw3ICs0NCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotUmVu
ZGVyTWVudUxpc3Q6OlJlbmRlck1lbnVMaXN0KEhUTUxTZWxlY3RFbGVtZW50KiBlbGVtZW50KQor
UmVuZGVyTWVudUxpc3Q6OlJlbmRlck1lbnVMaXN0KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgOiBS
ZW5kZXJGbGV4aWJsZUJveChlbGVtZW50KQogICAgICwgbV9idXR0b25UZXh0KDApCiAgICAgLCBt
X2lubmVyQmxvY2soMCkKQEAgLTYxLDEyICs2Miw2IEBAIFJlbmRlck1lbnVMaXN0Ojp+UmVuZGVy
TWVudUxpc3QoKQogICAgIG1fcG9wdXAgPSAwOwogfQogCi0vLyB0aGlzIHN0YXRpYyBjYXN0IGlz
IHNhZmUgYmVjYXVzZSBSZW5kZXJNZW51TGlzdHMgYXJlIG9ubHkgY3JlYXRlZCBmb3IgSFRNTFNl
bGVjdEVsZW1lbnRzCi1IVE1MU2VsZWN0RWxlbWVudCogUmVuZGVyTWVudUxpc3Q6OnNlbGVjdEVs
ZW1lbnQoKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KG5v
ZGUoKSk7Ci19Ci0KIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmNyZWF0ZUlubmVyQmxvY2soKQogewog
ICAgIGlmIChtX2lubmVyQmxvY2spIHsKQEAgLTEzNCwxMCArMTI5LDEwIEBAIHZvaWQgUmVuZGVy
TWVudUxpc3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWwKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnVwZGF0
ZU9wdGlvbnNXaWR0aCgpCiB7CiAgICAgZmxvYXQgbWF4T3B0aW9uV2lkdGggPSAwOwotICAgIGNv
bnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzdGF0aWNfY2FzdDxIVE1MU2Vs
ZWN0RWxlbWVudCo+KG5vZGUoKSktPmxpc3RJdGVtcygpOworICAgIGNvbnN0IFZlY3RvcjxFbGVt
ZW50Kj4mIGxpc3RJdGVtcyA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
bm9kZSgpKSktPmxpc3RJdGVtcygpOwogICAgIGludCBzaXplID0gbGlzdEl0ZW1zLnNpemUoKTsg
ICAgCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgSFRNTEVs
ZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbaV07CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBsaXN0SXRlbXNbaV07CiAgICAgICAgIE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0
b09wdGlvbkVsZW1lbnQoZWxlbWVudCk7CiAgICAgICAgIGlmICghb3B0aW9uRWxlbWVudCkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTY1LDEzICsxNjAsMTMgQEAgdm9pZCBSZW5kZXJNZW51
TGlzdDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgIGlmIChtX3BvcHVwSXNWaXNpYmxlKQogICAg
ICAgICBtX3BvcHVwLT51cGRhdGVGcm9tRWxlbWVudCgpOwogICAgIGVsc2UKLSAgICAgICAgc2V0
VGV4dEZyb21PcHRpb24oc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpLT5z
ZWxlY3RlZEluZGV4KCkpOworICAgICAgICBzZXRUZXh0RnJvbU9wdGlvbih0b1NlbGVjdEVsZW1l
bnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpLT5zZWxlY3RlZEluZGV4KCkpOwogfQog
CiB2b2lkIFJlbmRlck1lbnVMaXN0OjpzZXRUZXh0RnJvbU9wdGlvbihpbnQgb3B0aW9uSW5kZXgp
CiB7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxl
Y3RFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlz
dEl0ZW1zID0gc2VsZWN0LT5saXN0SXRlbXMoKTsKKyAgICBTZWxlY3RFbGVtZW50KiBzZWxlY3Qg
PSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOworICAgIGNv
bnN0IFZlY3RvcjxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNlbGVjdC0+bGlzdEl0ZW1zKCk7CiAg
ICAgaW50IHNpemUgPSBsaXN0SXRlbXMuc2l6ZSgpOwogCiAgICAgaW50IGkgPSBzZWxlY3QtPm9w
dGlvblRvTGlzdEluZGV4KG9wdGlvbkluZGV4KTsKQEAgLTI3Miw3ICsyNjcsNyBAQCB2b2lkIFJl
bmRlck1lbnVMaXN0OjpzaG93UG9wdXAoKQogICAgIGNyZWF0ZUlubmVyQmxvY2soKTsKICAgICBp
ZiAoIW1fcG9wdXApCiAgICAgICAgIG1fcG9wdXAgPSBQb3B1cE1lbnU6OmNyZWF0ZSh0aGlzKTsK
LSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVs
ZW1lbnQqPihub2RlKCkpOworICAgIFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxl
bWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7CiAgICAgbV9wb3B1cElzVmlzaWJs
ZSA9IHRydWU7CiAKICAgICAvLyBDb21wdXRlIHRoZSB0b3AgbGVmdCB0YWtpbmcgdHJhbnNmb3Jt
cyBpbnRvIGFjY291bnQsIGJ1dCB1c2UKQEAgLTI5MywxNCArMjg4LDE0IEBAIHZvaWQgUmVuZGVy
TWVudUxpc3Q6OmhpZGVQb3B1cCgpCiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnZhbHVlQ2hhbmdl
ZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZU9uQ2hhbmdlKQogewotICAgIEhUTUxTZWxl
Y3RFbGVtZW50KiBzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KG5vZGUo
KSk7CisgICAgU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19j
YXN0PEVsZW1lbnQqPihub2RlKCkpKTsKICAgICBzZWxlY3QtPnNldFNlbGVjdGVkSW5kZXgoc2Vs
ZWN0LT5saXN0VG9PcHRpb25JbmRleChsaXN0SW5kZXgpLCB0cnVlLCBmaXJlT25DaGFuZ2UpOwog
fQogCiBTdHJpbmcgUmVuZGVyTWVudUxpc3Q6Oml0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkg
Y29uc3QKIHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRN
TFNlbGVjdEVsZW1lbnQqPihub2RlKCkpOwotICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gc2Vs
ZWN0LT5saXN0SXRlbXMoKVtsaXN0SW5kZXhdOworICAgIFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9
IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7CisgICAgRWxl
bWVudCogZWxlbWVudCA9IHNlbGVjdC0+bGlzdEl0ZW1zKClbbGlzdEluZGV4XTsKICAgICBpZiAo
T3B0aW9uR3JvdXBFbGVtZW50KiBvcHRpb25Hcm91cEVsZW1lbnQgPSB0b09wdGlvbkdyb3VwRWxl
bWVudChlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIG9wdGlvbkdyb3VwRWxlbWVudC0+Z3JvdXBM
YWJlbFRleHQoKTsKICAgICBlbHNlIGlmIChPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0g
dG9PcHRpb25FbGVtZW50KGVsZW1lbnQpKQpAQCAtMzEwLDggKzMwNSw4IEBAIFN0cmluZyBSZW5k
ZXJNZW51TGlzdDo6aXRlbVRleHQodW5zaWduZWQKIAogYm9vbCBSZW5kZXJNZW51TGlzdDo6aXRl
bUlzRW5hYmxlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0CiB7Ci0gICAgSFRNTFNlbGVjdEVs
ZW1lbnQqIHNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9kZSgpKTsK
LSAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHNlbGVjdC0+bGlzdEl0ZW1zKClbbGlzdEluZGV4
XTsKKyAgICBTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG5vZGUoKSkpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzZWxlY3QtPmxp
c3RJdGVtcygpW2xpc3RJbmRleF07CiAgICAgaWYgKCFlbGVtZW50LT5oYXNUYWdOYW1lKG9wdGlv
blRhZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBib29sIGdyb3VwRW5hYmxlZCA9IHRy
dWU7CkBAIC0zMjgsOCArMzIzLDggQEAgYm9vbCBSZW5kZXJNZW51TGlzdDo6aXRlbUlzRW5hYmxl
ZCh1bnNpZwogCiBQb3B1cE1lbnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6aXRlbVN0eWxlKHVuc2ln
bmVkIGxpc3RJbmRleCkgY29uc3QKIHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0g
c3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpOwotICAgIEhUTUxFbGVtZW50
KiBlbGVtZW50ID0gc2VsZWN0LT5saXN0SXRlbXMoKVtsaXN0SW5kZXhdOworICAgIFNlbGVjdEVs
ZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9k
ZSgpKSk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IHNlbGVjdC0+bGlzdEl0ZW1zKClbbGlzdElu
ZGV4XTsKICAgICAKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBlbGVtZW50LT5yZW5kZXJTdHls
ZSgpID8gZWxlbWVudC0+cmVuZGVyU3R5bGUoKSA6IGVsZW1lbnQtPmNvbXB1dGVkU3R5bGUoKTsK
ICAgICByZXR1cm4gc3R5bGUgPyBQb3B1cE1lbnVTdHlsZShzdHlsZS0+Y29sb3IoKSwgaXRlbUJh
Y2tncm91bmRDb2xvcihsaXN0SW5kZXgpLCBzdHlsZS0+Zm9udCgpLCBzdHlsZS0+dmlzaWJpbGl0
eSgpID09IFZJU0lCTEUpIDogbWVudVN0eWxlKCk7CkBAIC0zMzcsOCArMzMyLDggQEAgUG9wdXBN
ZW51U3R5bGUgUmVuZGVyTWVudUxpc3Q6Oml0ZW1TdHlsZQogCiBDb2xvciBSZW5kZXJNZW51TGlz
dDo6aXRlbUJhY2tncm91bmRDb2xvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0CiB7Ci0gICAg
SFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50
Kj4obm9kZSgpKTsKLSAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHNlbGVjdC0+bGlzdEl0ZW1z
KClbbGlzdEluZGV4XTsKKyAgICBTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b1NlbGVjdEVsZW1l
bnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOworICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBzZWxlY3QtPmxpc3RJdGVtcygpW2xpc3RJbmRleF07CiAKICAgICBDb2xvciBiYWNrZ3JvdW5k
Q29sb3I7CiAgICAgaWYgKGVsZW1lbnQtPnJlbmRlclN0eWxlKCkpCkBAIC00MDEsMzQgKzM5Niwz
NCBAQCBpbnQgUmVuZGVyTWVudUxpc3Q6OmNsaWVudFBhZGRpbmdSaWdodCgpCiAKIGludCBSZW5k
ZXJNZW51TGlzdDo6bGlzdFNpemUoKSBjb25zdAogewotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBz
ZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgU2Vs
ZWN0RWxlbWVudCogc2VsZWN0ID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQq
Pihub2RlKCkpKTsKICAgICByZXR1cm4gc2VsZWN0LT5saXN0SXRlbXMoKS5zaXplKCk7CiB9CiAK
IGludCBSZW5kZXJNZW51TGlzdDo6c2VsZWN0ZWRJbmRleCgpIGNvbnN0CiB7Ci0gICAgSFRNTFNl
bGVjdEVsZW1lbnQqIHNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9k
ZSgpKTsKKyAgICBTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOwogICAgIHJldHVybiBzZWxlY3QtPm9wdGlvblRvTGlz
dEluZGV4KHNlbGVjdC0+c2VsZWN0ZWRJbmRleCgpKTsKIH0KIAogYm9vbCBSZW5kZXJNZW51TGlz
dDo6aXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKIHsKLSAgICBIVE1M
U2VsZWN0RWxlbWVudCogc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihu
b2RlKCkpOwotICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gc2VsZWN0LT5saXN0SXRlbXMoKVts
aXN0SW5kZXhdOworICAgIFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IHNl
bGVjdC0+bGlzdEl0ZW1zKClbbGlzdEluZGV4XTsKICAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFn
TmFtZShoclRhZyk7CiB9CiAKIGJvb2wgUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc0xhYmVsKHVuc2ln
bmVkIGxpc3RJbmRleCkgY29uc3QKIHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0g
c3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpOwotICAgIEhUTUxFbGVtZW50
KiBlbGVtZW50ID0gc2VsZWN0LT5saXN0SXRlbXMoKVtsaXN0SW5kZXhdOworICAgIFNlbGVjdEVs
ZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9k
ZSgpKSk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IHNlbGVjdC0+bGlzdEl0ZW1zKClbbGlzdElu
ZGV4XTsKICAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFtZShvcHRncm91cFRhZyk7CiB9CiAK
IGJvb2wgUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkIGxpc3RJbmRleCkg
Y29uc3QKIHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRN
TFNlbGVjdEVsZW1lbnQqPihub2RlKCkpOwotICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gc2Vs
ZWN0LT5saXN0SXRlbXMoKVtsaXN0SW5kZXhdOworICAgIFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9
IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7CisgICAgRWxl
bWVudCogZWxlbWVudCA9IHNlbGVjdC0+bGlzdEl0ZW1zKClbbGlzdEluZGV4XTsKICAgICBpZiAo
T3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChlbGVtZW50KSkK
ICAgICAgICAgcmV0dXJuIG9wdGlvbkVsZW1lbnQtPnNlbGVjdGVkKCk7CiAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNDM2LDcgKzQzMSw3IEBAIGJvb2wgUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc1NlbGVj
dGVkKHVuc2kKIAogdm9pZCBSZW5kZXJNZW51TGlzdDo6c2V0VGV4dEZyb21JdGVtKHVuc2lnbmVk
IGxpc3RJbmRleCkKIHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gc3RhdGljX2Nh
c3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpOworICAgIFNlbGVjdEVsZW1lbnQqIHNlbGVj
dCA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7CiAgICAg
c2V0VGV4dEZyb21PcHRpb24oc2VsZWN0LT5saXN0VG9PcHRpb25JbmRleChsaXN0SW5kZXgpKTsK
IH0KIApJbmRleDogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVu
ZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgJKHJldmlzaW9uIDQwNzQxKQorKysgcmVuZGVyaW5nL1Jl
bmRlck1lbnVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE2ICszNCwxMyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxTZWxlY3RFbGVtZW50OwogY2xhc3MgUG9wdXBN
ZW51OwogY2xhc3MgUmVuZGVyVGV4dDsKIAogY2xhc3MgUmVuZGVyTWVudUxpc3QgOiBwdWJsaWMg
UmVuZGVyRmxleGlibGVCb3gsIHByaXZhdGUgUG9wdXBNZW51Q2xpZW50IHsKIHB1YmxpYzoKLSAg
ICBSZW5kZXJNZW51TGlzdChIVE1MU2VsZWN0RWxlbWVudCopOworICAgIFJlbmRlck1lbnVMaXN0
KEVsZW1lbnQqKTsKICAgICB+UmVuZGVyTWVudUxpc3QoKTsKLSAgICAKLSAgICBIVE1MU2VsZWN0
RWxlbWVudCogc2VsZWN0RWxlbWVudCgpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBp
c01lbnVMaXN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogcmVuZGVyaW5nL1JlbmRl
clNsaWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAJKHJl
dmlzaW9uIDQwNzQxKQorKysgcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwMyw3ICszMDMsNyBAQCB2b2lkIFJlbmRlclNsaWRlcjo6c2V0VmFsdWVGb3JQb3Np
dGlvbihpCiAgICAgCiAgICAgaWYgKHBvc2l0aW9uICE9IGN1cnJlbnRQb3NpdGlvbigpKSB7CiAg
ICAgICAgIHNldEN1cnJlbnRQb3NpdGlvbihwb3NpdGlvbik7Ci0gICAgICAgIHN0YXRpY19jYXN0
PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpLT5vbkNoYW5nZSgpOworICAgICAgICBzdGF0aWNf
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKS0+ZGlzcGF0Y2hDaGFuZ2VFdmVudCgpOwog
ICAgIH0KIH0KIApAQCAtMzYxLDcgKzM2MSw3IEBAIGludCBSZW5kZXJTbGlkZXI6OnBvc2l0aW9u
Rm9yT2Zmc2V0KGNvbnMKIHZvaWQgUmVuZGVyU2xpZGVyOjp2YWx1ZUNoYW5nZWQoKQogewogICAg
IHNldFZhbHVlRm9yUG9zaXRpb24oY3VycmVudFBvc2l0aW9uKCkpOwotICAgIHN0YXRpY19jYXN0
PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpLT5vbkNoYW5nZSgpOworICAgIHN0YXRpY19jYXN0
PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpLT5kaXNwYXRjaENoYW5nZUV2ZW50KCk7CiB9CiAK
IGludCBSZW5kZXJTbGlkZXI6OmN1cnJlbnRQb3NpdGlvbigpCkluZGV4OiB3bWwvV01MRm9ybUNv
bnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MRm9ybUNvbnRyb2xFbGVtZW50
LmNwcAkocmV2aXNpb24gNDA3NDEpCisrKyB3bWwvV01MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsMTEgQEAgV01MRm9ybUNvbnRyb2xFbGVtZW50Ojp+
V01MRm9ybUNvbnRyb2xFbAogewogfQogCit2b2lkIFdNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlz
cGF0Y2hDaGFuZ2VFdmVudCgpCit7CisgICAgLy8gbm8tb3AKK30KKwogYm9vbCBXTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkg
fHwgIXJlbmRlcmVyKCktPmlzQm94KCkpCkluZGV4OiB3bWwvV01MRm9ybUNvbnRyb2xFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gd21sL1dNTEZvcm1Db250cm9sRWxlbWVudC5oCShyZXZpc2lvbiA0
MDc0MSkKKysrIHdtbC9XTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNiArNDMsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSgpIGNvbnN0IHsgcmV0dXJuIGVtcHR5QXRvbTsgfQogCisgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoQ2hhbmdlRXZlbnQoKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25z
dDsKIAogcHJpdmF0ZToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30150</attachid>
            <date>2009-05-08 18:06:48 -0700</date>
            <delta_ts>2009-05-23 07:09:30 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>AddSelectElement.diff</filename>
            <type>text/plain</type>
            <size>60023</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQzNDIz
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIwIEBACisyMDA5LTA1
LTA4ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuaWtvbGFzLnppbW1tZXJtYW5uQHRvcmNobW9iaWxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBG
aXhlczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzODA4CisKKyAg
ICAgICAgQWZ0ZXIgYSBsb25nIGpvdXJuZXksIGFkZCB0aGUgbGFzdCBtaXNzaW5nIEFCQyB0byBz
aGFyZSBmb3JtIGNvbnRyb2wgZWxlbWVudCBzdXBwb3J0IHdpdGggSFRNTFNlbGVjdEVsZW1lbnQu
CisgICAgICAgIFJlbmRlckxpc3RCb3gvUmVuZGVyTWVudUxpc3Qgb3BlcmF0ZXMgb24gU2VsZWN0
RWxlbWVudCBpbnN0ZWFkIG9mIEhUTUxTZWxlY3RFbGVtZW50IG5vdywgcXVlcnlpbmcgc2VsZWN0
ZWQgaW5kZXggZXRjLgorICAgICAgICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSB0aGVz
ZSByZW5kZXIgb2JqZWN0cyBmb3IgaWUuIFdNTCwgYXMgaXQncyBkb25lIGJlZm9yZSBmb3IgaW5w
dXQgJiBvcHRpb24gZWxlbWVudHMuCisKKyAgICAgICAgV01MU2VsZWN0RWxlbWVudCB3aWxsIGJl
IGNyZWF0ZWQgc29vbiwgaW4gYSBmb2xsb3ctdXAgcGF0Y2gsIGFkZGluZyBtb3JlIG1ldGhvZHMg
dG8gU2VsZWN0RWxlbWVudCwgc2hhcmluZyBjb2RlIGJldHdlZW4KKyAgICAgICAgSFRNTFNlbGVj
dEVsZW1lbnQvV01MU2VsZWN0RWxlbWVudC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgor
ICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBXZWJDb3JlU291cmNlcy5ia2w6CisgICAgICAgICogZG9tL0VsZW1lbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmlzRm9ybUNvbnRyb2xFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCk6CisgICAg
ICAgICogZG9tL1NlbGVjdEVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRv
U2VsZWN0RWxlbWVudCk6CisgICAgICAgICogZG9tL1NlbGVjdEVsZW1lbnQuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RFbGVtZW50Ojp+U2VsZWN0RWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RFbGVtZW50OjpTZWxlY3RFbGVtZW50KToKKyAgICAgICAgKiBodG1s
L0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1D
b250cm9sRWxlbWVudDo6ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KToKKyAgICAgICAg
KiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0Q2hl
Y2tlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjppbmRleCk6CisgICAgICAgICogaHRtbC9IVE1M
U2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6
c2VsZWN0ZWRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bGFz
dFNlbGVjdGVkTGlzdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjpkZXNlbGVjdEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Ojpz
ZXRTZWxlY3RlZEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Ojps
ZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlbW92ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTZWxlY3RFbGVtZW50OjpzYXZlRm9ybUNvbnRyb2xTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2VsZWN0RWxlbWVudDo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdEFsbCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2VsZWN0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvblRvTGlzdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTZWxlY3RFbGVtZW50OjpsaXN0VG9PcHRpb25JbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2VsZWN0RWxlbWVudDo6cmVjYWxjTGlzdEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTZWxlY3RFbGVtZW50OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0
RWxlbWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxl
Y3RFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2Vs
ZWN0RWxlbWVudDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9y
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZUxpc3RC
b3hTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVM
aXN0T25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RC
b3hPbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxh
c3RTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGVB
aGVhZEZpbmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Om5leHRTZWxl
Y3RhYmxlTGlzdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Ojpw
cmV2aW91c1NlbGVjdGFibGVMaXN0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQ6OnNldExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVu
dDo6Y2hlY2tMaXN0SXRlbXMpOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjptdWx0aXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MU2VsZWN0RWxlbWVudDo6bGlzdEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxl
Y3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRleCk6CisgICAgICAgICogcGFnZS9B
Y2Nlc3NpYmlsaXR5TGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
TGlzdEJveDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxp
c3RCb3g6OmRvQWNjZXNzaWJpbGl0eUhpdFRlc3QpOgorICAgICAgICAqIHBhZ2UvQWNjZXNzaWJp
bGl0eUxpc3RCb3hPcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxp
c3RCb3hPcHRpb246Omxpc3RCb3hPcHRpb25JbmRleCk6CisgICAgICAgICogcGFnZS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmFjdGlvbkVsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
aWxlVXBsb2FkQ29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbDo6dmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpSZW5kZXJMaXN0Qm94KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNjcm9sbFRvUmV2ZWFsU2VsZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGlzdEJveDo6bnVtSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlz
dEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0
Qm94OjpwYWludEl0ZW1CYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RC
b3g6OnBhblNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjphdXRvc2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnN0b3BBdXRvc2Nyb2xsKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnZhbHVlQ2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6OlJlbmRlck1lbnVMaXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0Ojp1cGRhdGVPcHRpb25zV2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjpzZXRUZXh0RnJvbU9wdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6c2hvd1BvcHVwKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck1lbnVMaXN0Ojp2YWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWVudUxpc3Q6Oml0ZW1UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0
OjppdGVtSXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjppdGVt
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6Oml0ZW1CYWNrZ3JvdW5k
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6Omxpc3RTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjpzZWxlY3RlZEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjppdGVtSXNTZXBhcmF0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc0xhYmVsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck1lbnVMaXN0OjppdGVtSXNTZWxlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
ZW51TGlzdDo6c2V0VGV4dEZyb21JdGVtKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6c2V0VmFsdWVGb3JQb3NpdGlvbik6CisgICAgICAgICog
d21sL1dNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCk6CisgICAgICAg
ICogd21sL1dNTEZvcm1Db250cm9sRWxlbWVudC5oOgorCiAyMDA5LTA1LTA4ICBTaW1vbiBGcmFz
ZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBC
ZXJuc3RlaW4KSW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxl
LmFtCShyZXZpc2lvbiA0MzQyMykKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBA
IC02ODksNiArNjg5LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2RvbS9TY3Jp
cHRFbGVtZW50LmggXAogCVdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwIFwK
IAlXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmggXAorCVdlYkNvcmUvZG9tL1Nl
bGVjdEVsZW1lbnQuY3BwIFwKKwlXZWJDb3JlL2RvbS9TZWxlY3RFbGVtZW50LmggXAogCVdlYkNv
cmUvZG9tL1NlbGVjdG9yTm9kZUxpc3QuY3BwIFwKIAlXZWJDb3JlL2RvbS9TZWxlY3Rvck5vZGVM
aXN0LmggXAogCVdlYkNvcmUvZG9tL1N0YXRpY05vZGVMaXN0LmNwcCBcCkluZGV4OiBXZWJDb3Jl
LnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLnBybwkocmV2aXNpb24gNDM0MjMpCisrKyBXZWJD
b3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtNjQ2LDYgKzY0Niw3IEBAIFNPVVJDRVMgKz0gXAog
ICAgIGRvbS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAgXAogICAgIGRvbS9TY3JpcHRFbGVt
ZW50LmNwcCBcCiAgICAgZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwIFwKKyAgICBkb20v
U2VsZWN0RWxlbWVudC5jcHAgXAogICAgIGRvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcCBcCiAgICAg
ZG9tL1N0YXRpY05vZGVMaXN0LmNwcCBcCiAgICAgZG9tL1N0YXRpY1N0cmluZ0xpc3QuY3BwIFwK
SW5kZXg6IFdlYkNvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlU291cmNlcy5i
a2wJKHJldmlzaW9uIDQzNDIzKQorKysgV2ViQ29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkp
CkBAIC00NTgsNiArNDU4LDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVz
IG5lZQogICAgICAgICBkb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3BwCiAgICAgICAgIGRv
bS9TY3JpcHRFbGVtZW50LmNwcAogICAgICAgICBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5j
cHAKKyAgICAgICAgZG9tL1NlbGVjdEVsZW1lbnQuY3BwIAogICAgICAgICBkb20vU2VsZWN0b3JO
b2RlTGlzdC5jcHAKICAgICAgICAgZG9tL1N0YXRpY05vZGVMaXN0LmNwcAogICAgICAgICBkb20v
U3RhdGljU3RyaW5nTGlzdC5jcHAKSW5kZXg6IFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0
MzQyMykKKysrIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC05MTQwLDYgKzkxNDAsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cZG9tXFNlbGVjdEVsZW1lbnQuY3BwIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFNlbGVjdEVsZW1lbnQu
aCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGRvbVxTZWxlY3Rvck5vZGVMaXN0LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkluZGV4OiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0MzQyMykKKysrIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsOCBAQAog
CQkwODNEQUVBNzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4M0RBRUEz
MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oICovOyB9Owog
CQkwODNEQUVBODBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4M0RB
RUE0MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwICov
OyB9OwogCQkwODNEQUVBOTBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
ODNEQUVBNTBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgg
Ki87IH07CisJCTA4NEFFQkU0MEZCNTA1RkEwMDM4NDgzRSAvKiBTZWxlY3RFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NEFFQkUyMEZC
NTA1RkEwMDM4NDgzRSAvKiBTZWxlY3RFbGVtZW50LmNwcCAqLzsgfTsKKwkJMDg0QUVCRTUwRkI1
MDVGQTAwMzg0ODNFIC8qIFNlbGVjdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NEFFQkUzMEZCNTA1RkEwMDM4NDgzRSAvKiBTZWxlY3RF
bGVtZW50LmggKi87IH07CiAJCTA4NENFNUNCMEYyN0RBREMwMEU2MjQwRSAvKiBXTUxPcHRHcm91
cEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDg0Q0U1QzcwRjI3REFEQzAwRTYyNDBFIC8qIFdNTE9wdEdyb3VwRWxlbWVudC5jcHAgKi87
IH07CiAJCTA4NENFNUNDMEYyN0RBREMwMEU2MjQwRSAvKiBXTUxPcHRHcm91cEVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NENFNUM4MEYy
N0RBREMwMEU2MjQwRSAvKiBXTUxPcHRHcm91cEVsZW1lbnQuaCAqLzsgfTsKIAkJMDg0Q0U1Q0Qw
RjI3REFEQzAwRTYyNDBFIC8qIFdNTE9wdGlvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0Q0U1QzkwRjI3REFEQzAwRTYyNDBFIC8q
IFdNTE9wdGlvbkVsZW1lbnQuY3BwICovOyB9OwpAQCAtNDkzOSw2ICs0OTQxLDggQEAKIAkJMDgz
REFFQTMwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5l
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4M0RBRUE0MEYwMUE3RkIwMDM0Mjc1
NCAvKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTUwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMDg0QUVCRTIwRkI1MDVGQTAwMzg0ODNFIC8qIFNlbGVjdEVsZW1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VsZWN0RWxlbWVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4NEFFQkUzMEZCNTA1RkEwMDM4NDgzRSAvKiBTZWxl
Y3RFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlbGVjdEVsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg0Q0U1QzcwRjI3REFEQzAwRTYy
NDBFIC8qIFdNTE9wdEdyb3VwRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXTUxPcHRHcm91cEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwODRDRTVDODBGMjdEQURDMDBFNjI0MEUgLyogV01MT3B0R3JvdXBFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTE9wdEdyb3VwRWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODRDRTVDOTBGMjdEQURDMDBFNjI0MEUgLyog
V01MT3B0aW9uRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXTUxPcHRpb25FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0
NTU4LDYgKzE0NTYyLDggQEAKIAkJCQkwOEE0ODQ3NjBFNTI3MkM1MDBDM0ZFNzYgLyogU2NyaXB0
RWxlbWVudC5oICovLAogCQkJCUUxMUM5REFGMEVCMzY5OTUwMEU0MDlEQiAvKiBTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmNwcCAqLywKIAkJCQlFMTFDOUQ5QTBFQjM2ODEyMDBFNDA5REIgLyogU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oICovLAorCQkJCTA4NEFFQkUyMEZCNTA1RkEwMDM4NDgzRSAv
KiBTZWxlY3RFbGVtZW50LmNwcCAqLywKKwkJCQkwODRBRUJFMzBGQjUwNUZBMDAzODQ4M0UgLyog
U2VsZWN0RWxlbWVudC5oICovLAogCQkJCUJDN0ZBNjgwMEQxRjE2NzkwMERCMjJBOSAvKiBTZWxl
Y3Rvck5vZGVMaXN0LmNwcCAqLywKIAkJCQlCQzdGQTY3RjBEMUYxNjc5MDBEQjIyQTkgLyogU2Vs
ZWN0b3JOb2RlTGlzdC5oICovLAogCQkJCUJDN0ZBNjJDMEQxRjBFRkYwMERCMjJBOSAvKiBTdGF0
aWNOb2RlTGlzdC5jcHAgKi8sCkBAIC0xNjU5MSw2ICsxNjU5Nyw3IEBACiAJCQkJQkNEMEUwRkMw
RTk3MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3JpZ2luSGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzcxRjRGRkMwRDI1RTdGMzAwRUNFMEQ1IC8qIFNlZ21lbnRlZEZvbnREYXRhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMkMzREEyRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5n
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwODRBRUJFNTBGQjUwNUZBMDAzODQ4M0UgLyogU2VsZWN0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMEUwOTlFNjQ5MjAwNTZFNTgxIC8q
IFNlbGVjdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0ZBNjgxMEQxRjE2
NzkwMERCMjJBOSAvKiBTZWxlY3Rvck5vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUUw
QkIyMzBEQTU3MkE2MDBBOUU0MTcgLyogU2Vzc2lvblN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLApA
QCAtMTg2MzYsNiArMTg2NDMsNyBAQAogCQkJCUJDRDBFMEZBMEU5NzJDMzUwMDI2NURFQSAvKiBT
ZWN1cml0eU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzNzFGNEZGRDBEMjVFN0YzMDBF
Q0UwRDUgLyogU2VnbWVudGVkRm9udERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RB
MkUwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmluZy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwODRBRUJFNDBGQjUwNUZBMDAzODQ4M0UgLyogU2VsZWN0RWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5MzMwOUUwRDA5OUU2NDkyMDA1NkU1ODEgLyogU2VsZWN0aW9uQ29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QThDOTZFQjBCRTY5MDMyMDA0RUVGRjAgLyog
U2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDN0ZBNjgyMEQx
RjE2NzkwMERCMjJBOSAvKiBTZWxlY3Rvck5vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vRWxlbWVudC5oCShyZXZpc2lvbiA0
MzQyMykKKysrIGRvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw5ICsxMjQsNiBA
QCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjbG9uZUVsZW1lbnRXaXRob3V0Q2hp
bGRyZW4oKTsKIAogICAgIHZvaWQgbm9ybWFsaXplQXR0cmlidXRlcygpOwotCi0gICAgdmlydHVh
bCBib29sIGlzRm9ybUNvbnRyb2xFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQog
ICAgIFN0cmluZyBub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkgY29uc3Q7CiAKICAgICAvLyBjb252
ZW5pZW5jZSBtZXRob2RzIHdoaWNoIGlnbm9yZSBleGNlcHRpb25zCkBAIC0yMDMsNiArMjAwLDcg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIGNoaWxkRWxlbWVudENvdW50KCkgY29uc3Q7CiAKICAg
ICAvLyBGb3JtQ29udHJvbEVsZW1lbnQgQVBJCisgICAgdmlydHVhbCBib29sIGlzRm9ybUNvbnRy
b2xFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNF
bmFibGVkRm9ybUNvbnRyb2woKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBi
b29sIGlzUmVhZE9ubHlGb3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzVGV4dEZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
QEAgLTIxNiw2ICsyMTQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNhdmVGb3JtQ29u
dHJvbFN0YXRlKFN0cmluZyYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2
b2lkIHJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKGNvbnN0IFN0cmluZyYpIHsgfQogCisgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpIHsgfQorCiBwcml2YXRl
OgogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVBdHRyaWJ1dGVNYXAoKSBjb25zdDsKIApJbmRleDog
ZG9tL1NlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9TZWxlY3RFbGVtZW50LmNw
cAkocmV2aXNpb24gMCkKKysrIGRvbS9TZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlbGVjdEVsZW1lbnQuaCIKKworI2luY2x1
ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MS2V5
Z2VuRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCisjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKworLy8gRklYTUU6IEFjdGl2YXRlIGNvZGUgb25jZSBXTUxTZWxl
Y3RFbGVtZW50IGlzIGF2YWlsYWJsZQorI2lmIEVOQUJMRShXTUwpICYmIDAKKyNpbmNsdWRlICJX
TUxTZWxlY3RFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1NlbGVjdEVsZW1lbnQqIHRvU2VsZWN0RWxlbWVudChFbGVtZW50
KiBlbGVtZW50KQoreworICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAg
ICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3RUYWcpKQorICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4oZWxlbWVudCk7Cisg
ICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjprZXlnZW5UYWcp
KQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxLZXlnZW5FbGVtZW50Kj4oZWxl
bWVudCk7CisgICAgfQorCisgICAgLy8gRklYTUU6IEFjdGl2YXRlIGNvZGUgb25jZSBXTUxTZWxl
Y3RFbGVtZW50IGlzIGF2YWlsYWJsZQorI2lmIEVOQUJMRShXTUwpICYmIDAKKyAgICBpZiAoZWxl
bWVudC0+aXNXTUxFbGVtZW50KCkgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShXTUxOYW1lczo6c2Vs
ZWN0VGFnKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdNTFNlbGVjdEVsZW1lbnQqPihl
bGVtZW50KTsKKyNlbmRpZgorCisgICAgcmV0dXJuIDA7Cit9CisKK30KSW5kZXg6IGRvbS9TZWxl
Y3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL1NlbGVjdEVsZW1lbnQuaAkocmV2aXNpb24g
MCkKKysrIGRvbS9TZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgU2VsZWN0
RWxlbWVudF9oCisjZGVmaW5lIFNlbGVjdEVsZW1lbnRfaAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEVsZW1lbnQ7CisKK2NsYXNzIFNl
bGVjdEVsZW1lbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgflNlbGVjdEVsZW1lbnQoKSB7IH0K
KworICAgIHZpcnR1YWwgYm9vbCBtdWx0aXBsZSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwg
aW50IHNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBWZWN0b3I8RWxlbWVudCo+
JiBsaXN0SXRlbXMoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGlzdEJveE9uQ2hh
bmdlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKGJvb2wg
ZGVzZWxlY3RPdGhlck9wdGlvbnMpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBtZW51TGlzdE9u
Q2hhbmdlKCkgPSAwOworCisgICAgdmlydHVhbCBpbnQgYWN0aXZlU2VsZWN0aW9uU3RhcnRMaXN0
SW5kZXgoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgYWN0aXZlU2VsZWN0aW9uRW5kTGlz
dEluZGV4KCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZVNlbGVjdGlv
bkFuY2hvckluZGV4KGludCBpbmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVT
ZWxlY3Rpb25FbmRJbmRleChpbnQgaW5kZXgpID0gMDsKKworICAgIHZpcnR1YWwgaW50IGxpc3RU
b09wdGlvbkluZGV4KGludCBsaXN0SW5kZXgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBv
cHRpb25Ub0xpc3RJbmRleChpbnQgb3B0aW9uSW5kZXgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1
YWwgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFNl
bGVjdGVkSW5kZXgoaW50IGluZGV4LCBib29sIGRlc2VsZWN0ID0gdHJ1ZSwgYm9vbCBmaXJlT25D
aGFuZ2UgPSBmYWxzZSkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgU2VsZWN0RWxlbWVudCgpIHsg
fQorfTsKKworU2VsZWN0RWxlbWVudCogdG9TZWxlY3RFbGVtZW50KEVsZW1lbnQqKTsKKworfQor
CisjZW5kaWYKSW5kZXg6IGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNDM0MjMpCisr
KyBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMs
NyArMTYzLDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXROYW1lKGNvbgogICAg
IHNldEF0dHJpYnV0ZShuYW1lQXR0ciwgdmFsdWUpOwogfQogCi12b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6Om9uQ2hhbmdlKCkKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0
Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCkKIHsKICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50TmFt
ZXMoKS5jaGFuZ2VFdmVudCwgdHJ1ZSwgZmFsc2UpOwogfQpJbmRleDogaHRtbC9IVE1MRm9ybUNv
bnRyb2xFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
LmgJKHJldmlzaW9uIDQzNDIzKQorKysgaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBm
b3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZU1h
dGNoZXNSZW5kZXJlcjsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRGb3JtQ29udHJvbFZhbHVlTWF0
Y2hlc1JlbmRlcmVyKGJvb2wgYikgeyBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyID0gYjsgfQogCi0g
ICAgdm9pZCBvbkNoYW5nZSgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEZvcm1Db250cm9s
Q2hhbmdlRXZlbnQoKTsKIAogICAgIGJvb2wgZGlzYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNl
dERpc2FibGVkKGJvb2wpOwpJbmRleDogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MzQyMykKKysrIGh0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5Miw3ICs4OTIsNyBA
QCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldENoZWNrZWQoYm9vbCBuCiAgICAgLy8gYmVjYXVz
ZSBpdCBzYXlzIG9ubHkgdG8gZmlyZSBjaGFuZ2UgZXZlbnRzIGF0ICJsb3NlIGZvY3VzIiB0aW1l
LCB3aGljaCBpcwogICAgIC8vIGRlZmluaXRlbHkgd3JvbmcgaW4gcHJhY3RpY2UgZm9yIHRoZXNl
IHR5cGVzIG9mIGVsZW1lbnRzLgogICAgIGlmIChzZW5kQ2hhbmdlRXZlbnQgJiYgaW5Eb2N1bWVu
dCgpICYmIChpbnB1dFR5cGUoKSAhPSBSQURJTyB8fCBub3dDaGVja2VkKSkKLSAgICAgICAgb25D
aGFuZ2UoKTsKKyAgICAgICAgZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiB9CiAK
IHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0SW5kZXRlcm1pbmF0ZShib29sIF9pbmRldGVybWlu
YXRlKQpAQCAtMTM4Niw3ICsxMzg2LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbAogICAgICAgICAvLyBGaXJlIG9uQ2hhbmdlIGZvciB0ZXh0IGZpZWxkcy4KICAg
ICAgICAgUmVuZGVyT2JqZWN0KiByID0gcmVuZGVyZXIoKTsKICAgICAgICAgaWYgKHIgJiYgci0+
aXNUZXh0RmllbGQoKSAmJiB0b1JlbmRlclRleHRDb250cm9sKHIpLT5pc0VkaXRlZCgpKSB7Ci0g
ICAgICAgICAgICBvbkNoYW5nZSgpOworICAgICAgICAgICAgZGlzcGF0Y2hGb3JtQ29udHJvbENo
YW5nZUV2ZW50KCk7CiAgICAgICAgICAgICAvLyBSZWZldGNoIHRoZSByZW5kZXJlciBzaW5jZSBh
cmJpdHJhcnkgSlMgY29kZSBydW4gZHVyaW5nIG9uY2hhbmdlIGNhbiBkbyBhbnl0aGluZywgaW5j
bHVkaW5nIGRlc3Ryb3lpbmcgaXQuCiAgICAgICAgICAgICByID0gcmVuZGVyZXIoKTsKICAgICAg
ICAgICAgIGlmIChyICYmIHItPmlzVGV4dEZpZWxkKCkpCkluZGV4OiBodG1sL0hUTUxPcHRpb25F
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkocmV2
aXNpb24gNDM0MjMpCisrKyBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA5LDcgKzEwOSw3IEBAIGludCBIVE1MT3B0aW9uRWxlbWVudDo6aW5kZXgoKSBjb25z
dAogICAgIC8vIHdlIHdvbid0IGZvcmdldCB0byB1cGRhdGUgYSBtZW1iZXIgdmFyaWFibGUgaW4g
c29tZSBjYXNlcy4uLgogICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBvd25lclNlbGVj
dEVsZW1lbnQoKTsKICAgICBpZiAoc2VsZWN0KSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxIVE1M
RWxlbWVudCo+JiBpdGVtcyA9IHNlbGVjdC0+bGlzdEl0ZW1zKCk7CisgICAgICAgIGNvbnN0IFZl
Y3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gc2VsZWN0LT5saXN0SXRlbXMoKTsKICAgICAgICAgaW50
IGwgPSBpdGVtcy5zaXplKCk7CiAgICAgICAgIGludCBvcHRpb25JbmRleCA9IDA7CiAgICAgICAg
IGZvcihpbnQgaSA9IDA7IGkgPCBsOyBpKyspIHsKSW5kZXg6IGh0bWwvSFRNTFNlbGVjdEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lv
biA0MzQyMykKKysrIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjAsNyArMTIwLDcgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50OjpzZWxlY3RlZEluZGV4KCkg
YwogewogICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHRoZSBmaXJzdCBvcHRpb24gc2VsZWN0
ZWQKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50
Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRl
bXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGl0ZW1z
LnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKG9wdGlv
blRhZykpIHsKICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+
KGl0ZW1zW2ldKS0+c2VsZWN0ZWQoKSkKQEAgLTEzNiw3ICsxMzYsNyBAQCBpbnQgSFRNTFNlbGVj
dEVsZW1lbnQ6Omxhc3RTZWxlY3RlZExpc3RJCiAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2Yg
dGhlIGxhc3Qgb3B0aW9uIHNlbGVjdGVkCiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgIGJv
b2wgZm91bmQgPSBmYWxzZTsKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMg
PSBsaXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJ
dGVtcygpOwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBp
KyspIHsKICAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSkgewog
ICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oaXRlbXNbaV0p
LT5zZWxlY3RlZCgpKSB7CkBAIC0xNTAsNyArMTUwLDcgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50
OjpsYXN0U2VsZWN0ZWRMaXN0SQogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpkZXNlbGVjdEl0
ZW1zKEhUTUxPcHRpb25FbGVtZW50KiBleGNsdWRlRWxlbWVudCkKIHsKLSAgICBjb25zdCBWZWN0
b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8
RWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIHVuc2lnbmVkIGk7CiAgICAgZm9y
IChpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmIChpdGVtc1tpXS0+
aGFzTG9jYWxOYW1lKG9wdGlvblRhZykgJiYgKGl0ZW1zW2ldICE9IGV4Y2x1ZGVFbGVtZW50KSkg
ewpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmRlc2VsZWN0SXRl
bXMoSFQKIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleChpbnQgb3B0
aW9uSW5kZXgsIGJvb2wgZGVzZWxlY3QsIGJvb2wgZmlyZU9uQ2hhbmdlKQogewotICAgIGNvbnN0
IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIGNvbnN0IFZl
Y3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaW50IGxpc3RJbmRleCA9
IG9wdGlvblRvTGlzdEluZGV4KG9wdGlvbkluZGV4KTsKICAgICBIVE1MT3B0aW9uRWxlbWVudCog
ZWxlbWVudCA9IDA7CiAKQEAgLTIwOSw3ICsyMDksNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6
OmFjdGl2ZVNlbGVjdGlvbkVuCiB1bnNpZ25lZCBIVE1MU2VsZWN0RWxlbWVudDo6bGVuZ3RoKCkg
Y29uc3QKIHsKICAgICB1bnNpZ25lZCBsZW4gPSAwOwotICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxl
bWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4m
IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1z
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKG9wdGlv
blRhZykpCiAgICAgICAgICAgICArK2xlbjsKQEAgLTIzMiw3ICsyMzIsNyBAQCB2b2lkIEhUTUxT
ZWxlY3RFbGVtZW50OjpyZW1vdmUoaW50IGluZGV4CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgaW50IGxpc3RJbmRleCA9IG9wdGlvblRvTGlzdEluZGV4KGluZGV4KTsKIAotICAgIGNv
bnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIGNvbnN0
IFZlY3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaWYgKGxpc3RJbmRl
eCA8IDAgfHwgaW5kZXggPj0gaW50KGl0ZW1zLnNpemUoKSkpCiAgICAgICAgIHJldHVybjsgLy8g
IyMjIHdoYXQgc2hvdWxkIHdlIGRvID8gcmVtb3ZlIHRoZSBsYXN0IGl0ZW0/CiAKQEAgLTI0NCw3
ICsyNDQsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZW1vdmUoaW50IGluZGV4CiBTdHJp
bmcgSFRNTFNlbGVjdEVsZW1lbnQ6OnZhbHVlKCkKIHsKICAgICB1bnNpZ25lZCBpOwotICAgIGNv
bnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIGNvbnN0
IFZlY3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yIChpID0gMDsg
aSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxO
YW1lKG9wdGlvblRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tp
XSktPnNlbGVjdGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9wdGlv
bkVsZW1lbnQqPihpdGVtc1tpXSktPnZhbHVlKCk7CkBAIC0yNTgsNyArMjU4LDcgQEAgdm9pZCBI
VE1MU2VsZWN0RWxlbWVudDo6c2V0VmFsdWUoY29uc3QgUwogICAgICAgICByZXR1cm47CiAgICAg
Ly8gZmluZCB0aGUgb3B0aW9uIHdpdGggdmFsdWUoKSBtYXRjaGluZyB0aGUgZ2l2ZW4gcGFyYW1l
dGVyCiAgICAgLy8gYW5kIG1ha2UgaXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLgotICAgIGNvbnN0
IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIGNvbnN0IFZl
Y3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgdW5zaWduZWQgb3B0aW9u
SW5kZXggPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkr
KykKICAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSkgewpAQCAt
MjcyLDExICsyNzIsMTEgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0VmFsdWUoY29uc3Qg
UwogCiBib29sIEhUTUxTZWxlY3RFbGVtZW50OjpzYXZlRm9ybUNvbnRyb2xTdGF0ZShTdHJpbmcm
IHZhbHVlKSBjb25zdAogewotICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9
IGxpc3RJdGVtcygpOworICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0
ZW1zKCk7CiAgICAgaW50IGwgPSBpdGVtcy5zaXplKCk7CiAgICAgVmVjdG9yPGNoYXIsIDEwMjQ+
IGNoYXJhY3RlcnMobCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsOyArK2kpIHsKLSAgICAg
ICAgSFRNTEVsZW1lbnQqIGUgPSBpdGVtc1tpXTsKKyAgICAgICAgRWxlbWVudCogZSA9IGl0ZW1z
W2ldOwogICAgICAgICBib29sIHNlbGVjdGVkID0gZS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykg
JiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihlKS0+c2VsZWN0ZWQoKTsKICAgICAg
ICAgY2hhcmFjdGVyc1tpXSA9IHNlbGVjdGVkID8gJ1gnIDogJy4nOwogICAgIH0KQEAgLTI4OCw3
ICsyODgsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXN0b3JlRm9ybUNvbnRyCiB7CiAg
ICAgcmVjYWxjTGlzdEl0ZW1zKCk7CiAgICAgCi0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50
Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRl
bXMgPSBsaXN0SXRlbXMoKTsKICAgICBpbnQgbCA9IGl0ZW1zLnNpemUoKTsKICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGw7IGkrKykKICAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUo
b3B0aW9uVGFnKSkKQEAgLTM2Myw3ICszNjMsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojpz
ZWxlY3RBbGwoKQogICAgIGlmICghcmVuZGVyZXIoKSB8fCAhbXVsdGlwbGUoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4gYmUgY29t
cGFyZWQgdG8gdGhlIG5ldyBzZWxlY3RBbGwgc2VsZWN0aW9uIHdoZW4gd2UgY2FsbCBvbkNoYW5n
ZQorICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4gYmUgY29tcGFyZWQgdG8gdGhl
IG5ldyBzZWxlY3RBbGwgc2VsZWN0aW9uIHdoZW4gd2UgY2FsbCBkaXNwYXRjaEZvcm1Db250cm9s
Q2hhbmdlRXZlbnQKICAgICBzYXZlTGFzdFNlbGVjdGlvbigpOwogICAgIAogICAgIG1fYWN0aXZl
U2VsZWN0aW9uU3RhdGUgPSB0cnVlOwpAQCAtMzg3LDcgKzM4Nyw3IEBAIGJvb2wgSFRNTFNlbGVj
dEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Ym9vbCBzdWNjZXNzZnVsID0gZmFsc2U7Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4m
IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMg
PSBsaXN0SXRlbXMoKTsKIAogICAgIHVuc2lnbmVkIGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGl0
ZW1zLnNpemUoKTsgaSsrKSB7CkBAIC00MTgsNyArNDE4LDcgQEAgYm9vbCBIVE1MU2VsZWN0RWxl
bWVudDo6YXBwZW5kRm9ybURhdGEoRgogCiBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvblRv
TGlzdEluZGV4KGludCBvcHRpb25JbmRleCkgY29uc3QKIHsKLSAgICBjb25zdCBWZWN0b3I8SFRN
TEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVu
dCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGludCBsaXN0U2l6ZSA9IChpbnQpaXRlbXMu
c2l6ZSgpOwogICAgIGlmIChvcHRpb25JbmRleCA8IDAgfHwgb3B0aW9uSW5kZXggPj0gbGlzdFNp
emUpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTQzNiw3ICs0MzYsNyBAQCBpbnQgSFRNTFNlbGVj
dEVsZW1lbnQ6Om9wdGlvblRvTGlzdEluZGV4CiAKIGludCBIVE1MU2VsZWN0RWxlbWVudDo6bGlz
dFRvT3B0aW9uSW5kZXgoaW50IGxpc3RJbmRleCkgY29uc3QKIHsKLSAgICBjb25zdCBWZWN0b3I8
SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxl
bWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGlmIChsaXN0SW5kZXggPCAwIHx8IGxp
c3RJbmRleCA+PSBpbnQoaXRlbXMuc2l6ZSgpKSB8fAogICAgICAgICAhaXRlbXNbbGlzdEluZGV4
XS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTQ3MCw3
ICs0NzAsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZWNhbGNMaXN0SXRlbXMoCiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpKSB7Ci0g
ICAgICAgICAgICBtX2xpc3RJdGVtcy5hcHBlbmQoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihj
dXJyZW50KSk7CisgICAgICAgICAgICBtX2xpc3RJdGVtcy5hcHBlbmQoc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KGN1cnJlbnQpKTsKICAgICAgICAgICAgIGlmICh1cGRhdGVTZWxlY3RlZFN0YXRlcykg
ewogICAgICAgICAgICAgICAgIGlmICghZm91bmRTZWxlY3RlZCAmJiAodXNlc01lbnVMaXN0KCkg
fHwgKCFtX211bHRpcGxlICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oY3VycmVu
dCktPnNlbGVjdGVkKCkpKSkgewogICAgICAgICAgICAgICAgICAgICBmb3VuZFNlbGVjdGVkID0g
c3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihjdXJyZW50KTsKQEAgLTUyMyw3ICs1MjMs
NyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXNldCgpCiB7CiAgICAgYm9vbCBvcHRpb25T
ZWxlY3RlZCA9IGZhbHNlOwogICAgIEhUTUxPcHRpb25FbGVtZW50KiBmaXJzdE9wdGlvbiA9IDA7
Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7Cisg
ICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICB1bnNp
Z25lZCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewogICAgICAg
ICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpKSB7CkBAIC01NDYsMTQgKzU0
NiwxNCBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXNldCgpCiB2b2lkIEhUTUxTZWxlY3RF
bGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQoKQogewogICAgIGlmICh1c2VzTWVudUxpc3QoKSkK
LSAgICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0byB0
aGUgbmV3IHNlbGVjdGlvbiB3aGVuIHdlIGNhbGwgb25DaGFuZ2UgZHVyaW5nIGRpc3BhdGNoQmx1
ckV2ZW50LgorICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBh
cmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4gd2UgY2FsbCBkaXNwYXRjaEZvcm1Db250cm9s
Q2hhbmdlRXZlbnQgZHVyaW5nIGRpc3BhdGNoQmx1ckV2ZW50LgogICAgICAgICBzYXZlTGFzdFNl
bGVjdGlvbigpOwogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRpc3BhdGNo
Rm9jdXNFdmVudCgpOwogfQogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpkaXNwYXRjaEJsdXJF
dmVudCgpCiB7Ci0gICAgLy8gV2Ugb25seSBuZWVkIHRvIGZpcmUgb25DaGFuZ2UgaGVyZSBmb3Ig
bWVudSBsaXN0cywgYmVjYXVzZSB3ZSBmaXJlIG9uQ2hhbmdlIGZvciBsaXN0IGJveGVzIHdoZW5l
dmVyIHRoZSBzZWxlY3Rpb24gY2hhbmdlIGlzIGFjdHVhbGx5IG1hZGUuCisgICAgLy8gV2Ugb25s
eSBuZWVkIHRvIGZpcmUgZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50IGhlcmUgZm9yIG1l
bnUgbGlzdHMsIGJlY2F1c2Ugd2UgZmlyZSBvbkNoYW5nZSBmb3IgbGlzdCBib3hlcyB3aGVuZXZl
ciB0aGUgc2VsZWN0aW9uIGNoYW5nZSBpcyBhY3R1YWxseSBtYWRlLgogICAgIC8vIFRoaXMgbWF0
Y2hlcyBvdGhlciBicm93c2VycycgYmVoYXZpb3IuCiAgICAgaWYgKHVzZXNNZW51TGlzdCgpKQog
ICAgICAgICBtZW51TGlzdE9uQ2hhbmdlKCk7CkBAIC01OTcsNyArNTk3LDcgQEAgdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6bWVudUxpc3REZWZhdWx0RQogI2lmIEFSUk9XX0tFWVNfUE9QX01FTlUK
ICAgICAgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkRvd24iIHx8IGtleUlkZW50aWZpZXIgPT0g
IlVwIikgewogICAgICAgICAgICAgZm9jdXMoKTsKLSAgICAgICAgICAgIC8vIFNhdmUgdGhlIHNl
bGVjdGlvbiBzbyBpdCBjYW4gYmUgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24gd2hlbiB3
ZSBjYWxsIG9uQ2hhbmdlIGR1cmluZyBzZXRTZWxlY3RlZEluZGV4LAorICAgICAgICAgICAgLy8g
U2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVj
dGlvbiB3aGVuIHdlIGNhbGwgZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50IGR1cmluZyBz
ZXRTZWxlY3RlZEluZGV4LAogICAgICAgICAgICAgLy8gd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBS
ZW5kZXJNZW51TGlzdDo6dmFsdWVDaGFuZ2VkLCB3aGljaCBnZXRzIGNhbGxlZCBhZnRlciB0aGUg
dXNlciBtYWtlcyBhIHNlbGVjdGlvbiBmcm9tIHRoZSBtZW51LgogICAgICAgICAgICAgc2F2ZUxh
c3RTZWxlY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChSZW5kZXJNZW51TGlzdCogbWVudUxpc3Qg
PSBzdGF0aWNfY2FzdDxSZW5kZXJNZW51TGlzdCo+KHJlbmRlcmVyKCkpKQpAQCAtNjQwLDcgKzY0
MCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEUKICNpZiBBUlJP
V19LRVlTX1BPUF9NRU5VCiAgICAgICAgIGlmIChrZXlDb2RlID09ICcgJykgewogICAgICAgICAg
ICAgZm9jdXMoKTsKLSAgICAgICAgICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4g
YmUgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24gd2hlbiB3ZSBjYWxsIG9uQ2hhbmdlIGR1
cmluZyBzZXRTZWxlY3RlZEluZGV4LAorICAgICAgICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9u
IHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbiB3aGVuIHdlIGNhbGwg
ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50IGR1cmluZyBzZXRTZWxlY3RlZEluZGV4LAog
ICAgICAgICAgICAgLy8gd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBSZW5kZXJNZW51TGlzdDo6dmFs
dWVDaGFuZ2VkLCB3aGljaCBnZXRzIGNhbGxlZCBhZnRlciB0aGUgdXNlciBtYWtlcyBhIHNlbGVj
dGlvbiBmcm9tIHRoZSBtZW51LgogICAgICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24oKTsKICAg
ICAgICAgICAgIGlmIChSZW5kZXJNZW51TGlzdCogbWVudUxpc3QgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJNZW51TGlzdCo+KHJlbmRlcmVyKCkpKQpAQCAtNjkxLDcgKzY5MSw3IEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXYKICAgICAgICAgSW50UG9pbnQgbG9jYWxPZmZz
ZXQgPSByb3VuZGVkSW50UG9pbnQocmVuZGVyZXIoKS0+YWJzb2x1dGVUb0xvY2FsKG1vdXNlRXZl
bnQtPmFic29sdXRlTG9jYXRpb24oKSwgZmFsc2UsIHRydWUpKTsKICAgICAgICAgaW50IGxpc3RJ
bmRleCA9IHN0YXRpY19jYXN0PFJlbmRlckxpc3RCb3gqPihyZW5kZXJlcigpKS0+bGlzdEluZGV4
QXRPZmZzZXQobG9jYWxPZmZzZXQueCgpLCBsb2NhbE9mZnNldC55KCkpOwogICAgICAgICBpZiAo
bGlzdEluZGV4ID49IDApIHsKLSAgICAgICAgICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBp
dCBjYW4gYmUgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24gd2hlbiB3ZSBjYWxsIG9uQ2hh
bmdlIGR1cmluZyBtb3VzZXVwLCBvciBhZnRlciBhdXRvc2Nyb2xsIGZpbmlzaGVzLgorICAgICAg
ICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0byB0aGUg
bmV3IHNlbGVjdGlvbiB3aGVuIHdlIGNhbGwgZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50
IGR1cmluZyBtb3VzZXVwLCBvciBhZnRlciBhdXRvc2Nyb2xsIGZpbmlzaGVzLgogICAgICAgICAg
ICAgc2F2ZUxhc3RTZWxlY3Rpb24oKTsKIAogICAgICAgICAgICAgbV9hY3RpdmVTZWxlY3Rpb25T
dGF0ZSA9IHRydWU7CkBAIC03MDYsNyArNzA2LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6
bGlzdEJveERlZmF1bHRFdgogICAgICAgICAgICAgYm9vbCBzaGlmdFNlbGVjdCA9IG11bHRpcGxl
KCkgJiYgbW91c2VFdmVudC0+c2hpZnRLZXkoKTsKICAgICAgICAgICAgIGJvb2wgbXVsdGlTZWxl
Y3QgPSBtdWx0aXBsZSgpICYmIG11bHRpU2VsZWN0S2V5UHJlc3NlZCAmJiAhbW91c2VFdmVudC0+
c2hpZnRLZXkoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGNsaWNr
ZWRFbGVtZW50ID0gbGlzdEl0ZW1zKClbbGlzdEluZGV4XTsgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEVsZW1lbnQqIGNsaWNrZWRFbGVtZW50ID0gbGlzdEl0ZW1zKClbbGlzdEluZGV4XTsgICAg
ICAgICAgICAKICAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSAwOwogICAg
ICAgICAgICAgaWYgKGNsaWNrZWRFbGVtZW50LT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSkgewog
ICAgICAgICAgICAgICAgIG9wdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4o
Y2xpY2tlZEVsZW1lbnQpOwpAQCAtNzQ2LDcgKzc0Niw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnQ6Omxpc3RCb3hEZWZhdWx0RXYKICAgICAgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNldXBFdmVudCAmJiBldnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNl
RXZlbnQqPihldnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uICYmIGRvY3VtZW50KCktPmZyYW1l
KCktPmV2ZW50SGFuZGxlcigpLT5hdXRvc2Nyb2xsUmVuZGVyZXIoKSAhPSByZW5kZXJlcigpKQot
ICAgICAgICAvLyBUaGlzIG1ha2VzIHN1cmUgd2UgZmlyZSBvbkNoYW5nZSBmb3IgYSBzaW5nbGUg
Y2xpY2suICBGb3IgZHJhZyBzZWxlY3Rpb24sIG9uQ2hhbmdlIHdpbGwgZmlyZSB3aGVuIHRoZSBh
dXRvc2Nyb2xsIHRpbWVyIHN0b3BzLgorICAgICAgICAvLyBUaGlzIG1ha2VzIHN1cmUgd2UgZmly
ZSBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQgZm9yIGEgc2luZ2xlIGNsaWNrLiAgRm9y
IGRyYWcgc2VsZWN0aW9uLCBvbkNoYW5nZSB3aWxsIGZpcmUgd2hlbiB0aGUgYXV0b3Njcm9sbCB0
aW1lciBzdG9wcy4KICAgICAgICAgbGlzdEJveE9uQ2hhbmdlKCk7CiAgICAgZWxzZSBpZiAoZXZ0
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgewogICAgICAgICBpZiAoIWV2
dC0+aXNLZXlib2FyZEV2ZW50KCkpCkBAIC03NjksNyArNzY5LDcgQEAgdm9pZCBIVE1MU2VsZWN0
RWxlbWVudDo6bGlzdEJveERlZmF1bHRFdgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
ZiAoa2V5SWRlbnRpZmllciA9PSAiRG93biIgfHwga2V5SWRlbnRpZmllciA9PSAiVXAiKSB7Ci0g
ICAgICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRv
IHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4gd2UgY2FsbCBvbkNoYW5nZSBpbW1lZGlhdGVseSBhZnRl
ciBtYWtpbmcgdGhlIG5ldyBzZWxlY3Rpb24uCisgICAgICAgICAgICAvLyBTYXZlIHRoZSBzZWxl
Y3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4gd2Ug
Y2FsbCBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQgaW1tZWRpYXRlbHkgYWZ0ZXIgbWFr
aW5nIHRoZSBuZXcgc2VsZWN0aW9uLgogICAgICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24oKTsK
IAogICAgICAgICAgICAgQVNTRVJUKGVuZEluZGV4ID49IDAgJiYgKHVuc2lnbmVkKWVuZEluZGV4
IDwgbGlzdEl0ZW1zKCkuc2l6ZSgpKTsgCkBAIC04MDgsNyArODA4LDcgQEAgdm9pZCBIVE1MU2Vs
ZWN0RWxlbWVudDo6c2V0QWN0aXZlU2VsZWN0aQogICAgIG1fYWN0aXZlU2VsZWN0aW9uQW5jaG9y
SW5kZXggPSBpbmRleDsKICAgICAKICAgICAvLyBDYWNoZSB0aGUgc2VsZWN0aW9uIHN0YXRlIHNv
IHdlIGNhbiByZXN0b3JlIHRoZSBvbGQgc2VsZWN0aW9uIGFzIHRoZSBuZXcgc2VsZWN0aW9uIHBp
dm90cyBhcm91bmQgdGhpcyBhbmNob3IgaW5kZXgKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1l
bnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBp
dGVtcyA9IGxpc3RJdGVtcygpOwogICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24u
Y2xlYXIoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKysp
IHsKICAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSkgewpAQCAt
ODI5LDcgKzgyOSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZUxpc3RCb3hTZWwK
ICAgICBzdGFydCA9IG1pbihtX2FjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4LCBtX2FjdGl2ZVNl
bGVjdGlvbkVuZEluZGV4KTsKICAgICBlbmQgPSBtYXgobV9hY3RpdmVTZWxlY3Rpb25BbmNob3JJ
bmRleCwgbV9hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCk7CiAKLSAgICBjb25zdCBWZWN0b3I8SFRN
TEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVu
dCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBp
dGVtcy5zaXplKCk7IGkrKykgewogICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShv
cHRpb25UYWcpKSB7CiAgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gc3Rh
dGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tpXSk7CkBAIC04NTMsNyArODUzLDcg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3RPbkNoYW5nZQogICAgIGludCBzZWxl
Y3RlZCA9IHNlbGVjdGVkSW5kZXgoKTsKICAgICBpZiAobV9sYXN0T25DaGFuZ2VJbmRleCAhPSBz
ZWxlY3RlZCkgewogICAgICAgICBtX2xhc3RPbkNoYW5nZUluZGV4ID0gc2VsZWN0ZWQ7Ci0gICAg
ICAgIG9uQ2hhbmdlKCk7CisgICAgICAgIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgp
OwogICAgIH0KIH0KIApAQCAtODYxLDE1ICs4NjEsMTUgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6bGlzdEJveE9uQ2hhbmdlKAogewogICAgIEFTU0VSVCghdXNlc01lbnVMaXN0KCkpOwogCi0g
ICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAg
Y29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICAKLSAgICAv
LyBJZiB0aGUgY2FjaGVkIHNlbGVjdGlvbiBsaXN0IGlzIGVtcHR5LCBvciB0aGUgc2l6ZSBoYXMg
Y2hhbmdlZCwgdGhlbiBmaXJlIG9uQ2hhbmdlLCBhbmQgcmV0dXJuIGVhcmx5LgorICAgIC8vIElm
IHRoZSBjYWNoZWQgc2VsZWN0aW9uIGxpc3QgaXMgZW1wdHksIG9yIHRoZSBzaXplIGhhcyBjaGFu
Z2VkLCB0aGVuIGZpcmUgZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50LCBhbmQgcmV0dXJu
IGVhcmx5LgogICAgIGlmIChtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbi5pc0VtcHR5KCkgfHwgbV9s
YXN0T25DaGFuZ2VTZWxlY3Rpb24uc2l6ZSgpICE9IGl0ZW1zLnNpemUoKSkgewotICAgICAgICBv
bkNoYW5nZSgpOworICAgICAgICBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGUgbV9sYXN0T25DaGFuZ2VT
ZWxlY3Rpb24gYW5kIGZpcmUgb25DaGFuZ2UKKyAgICAvLyBVcGRhdGUgbV9sYXN0T25DaGFuZ2VT
ZWxlY3Rpb24gYW5kIGZpcmUgZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50CiAgICAgYm9v
bCBmaXJlT25DaGFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRl
bXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgYm9vbCBzZWxlY3RlZCA9IGZhbHNlOwpAQCAtODgw
LDEyICs4ODAsMTIgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveE9uQ2hhbmdlKAog
ICAgICAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbltpXSA9IHNlbGVjdGVkOwogICAgIH0KICAg
ICBpZiAoZmlyZU9uQ2hhbmdlKQotICAgICAgICBvbkNoYW5nZSgpOworICAgICAgICBkaXNwYXRj
aEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6
c2F2ZUxhc3RTZWxlY3Rpb24oKQogewotICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBp
dGVtcyA9IGxpc3RJdGVtcygpOworICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0g
bGlzdEl0ZW1zKCk7CiAKICAgICBpZiAodXNlc01lbnVMaXN0KCkpIHsKICAgICAgICAgbV9sYXN0
T25DaGFuZ2VJbmRleCA9IHNlbGVjdGVkSW5kZXgoKTsKQEAgLTk0Myw3ICs5NDMsNyBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50Ojp0eXBlQWhlYWRGaW5kKEtlCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAg
ICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGludCBp
dGVtQ291bnQgPSBpdGVtcy5zaXplKCk7CiAgICAgaWYgKGl0ZW1Db3VudCA8IDEpCiAgICAgICAg
IHJldHVybjsKQEAgLTk2OCw3ICs5NjgsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojp0eXBl
QWhlYWRGaW5kKEtlCiAKIGludCBIVE1MU2VsZWN0RWxlbWVudDo6bmV4dFNlbGVjdGFibGVMaXN0
SW5kZXgoaW50IHN0YXJ0SW5kZXgpCiB7Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4m
IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMg
PSBsaXN0SXRlbXMoKTsKICAgICBpbnQgaW5kZXggPSBzdGFydEluZGV4ICsgMTsKICAgICB3aGls
ZSAoaW5kZXggPj0gMCAmJiAodW5zaWduZWQpaW5kZXggPCBpdGVtcy5zaXplKCkgJiYgKCFpdGVt
c1tpbmRleF0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpIHx8IGl0ZW1zW2luZGV4XS0+ZGlzYWJs
ZWQoKSkpCiAgICAgICAgIGluZGV4Kys7CkBAIC05NzksNyArOTc5LDcgQEAgaW50IEhUTUxTZWxl
Y3RFbGVtZW50OjpuZXh0U2VsZWN0YWJsZUxpcwogCiBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6OnBy
ZXZpb3VzU2VsZWN0YWJsZUxpc3RJbmRleChpbnQgc3RhcnRJbmRleCkKIHsKLSAgICBjb25zdCBW
ZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0
b3I8RWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGlmIChzdGFydEluZGV4ID09
IC0xKQogICAgICAgICBzdGFydEluZGV4ID0gaXRlbXMuc2l6ZSgpOwogICAgIGludCBpbmRleCA9
IHN0YXJ0SW5kZXggLSAxOwpAQCAtMTA3NSw3ICsxMDc1LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudDo6c2V0TGVuZ3RoKHVuc2lnbgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
IHdoaWxlICgrK2RpZmYpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxIVE1M
RWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgICAgICBjb25zdCBWZWN0b3I8RWxl
bWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogCiAgICAgICAgIHNpemVfdCBvcHRpb25JbmRl
eCA9IDA7CiAgICAgICAgIGZvciAoc2l6ZV90IGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGl0
ZW1zLnNpemUoKTsgbGlzdEluZGV4KyspIHsKQEAgLTExMDYsNyArMTEwNiw3IEBAIHZvaWQgSFRN
TFNlbGVjdEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUKIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6Y2hlY2tMaXN0SXRlbXMoKSBjb25zdAogewotICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGl0
ZW1zID0gbV9saXN0SXRlbXM7CisgICAgVmVjdG9yPEVsZW1lbnQqPiBpdGVtcyA9IG1fbGlzdEl0
ZW1zOwogICAgIHJlY2FsY0xpc3RJdGVtcyhmYWxzZSk7CiAgICAgQVNTRVJUKGl0ZW1zID09IG1f
bGlzdEl0ZW1zKTsKIH0KSW5kZXg6IGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDQzNDIzKQorKysgaHRtbC9I
VE1MU2VsZWN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5j
bHVkZSAiQ29sbGVjdGlvbkNhY2hlLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJI
VE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCisjaW5jbHVkZSAiU2VsZWN0RWxlbWVudC5oIgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzUsNyArMzYs
NyBAQCBjbGFzcyBIVE1MT3B0aW9uRWxlbWVudDsKIGNsYXNzIEhUTUxPcHRpb25zQ29sbGVjdGlv
bjsKIGNsYXNzIEtleWJvYXJkRXZlbnQ7CiAKLWNsYXNzIEhUTUxTZWxlY3RFbGVtZW50IDogcHVi
bGljIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUgeworY2xhc3MgSFRNTFNlbGVjdEVs
ZW1lbnQgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSwgcHVibGljIFNl
bGVjdEVsZW1lbnQgewogcHVibGljOgogICAgIEhUTUxTZWxlY3RFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCogPSAwKTsKIApAQCAtNTYsOCAr
NTcsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBib29sIGNhblN0YXJ0U2VsZWN0aW9u
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIGludCBzZWxlY3RlZEluZGV4KCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRTZWxlY3RlZEluZGV4KGludCBpbmRleCwgYm9vbCBkZXNlbGVjdCA9
IHRydWUsIGJvb2wgZmlyZU9uQ2hhbmdlID0gZmFsc2UpOworICAgIHZpcnR1YWwgaW50IHNlbGVj
dGVkSW5kZXgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRJbmRleChpbnQg
aW5kZXgsIGJvb2wgZGVzZWxlY3QgPSB0cnVlLCBib29sIGZpcmVPbkNoYW5nZSA9IGZhbHNlKTsK
ICAgICBpbnQgbGFzdFNlbGVjdGVkTGlzdEluZGV4KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJv
b2wgaXNFbnVtZXJhdGFibGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC02Niw5ICs2Nyw5
IEBAIHB1YmxpYzoKIAogICAgIGludCBtaW5XaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWlud2lk
dGg7IH0KIAotICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgdmly
dHVhbCBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCi0gICAgYm9vbCBtdWx0
aXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbXVsdGlwbGU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbXVs
dGlwbGUoKSBjb25zdCB7IHJldHVybiBtX211bHRpcGxlOyB9CiAKICAgICB2b2lkIGFkZChIVE1M
RWxlbWVudCogZWxlbWVudCwgSFRNTEVsZW1lbnQqIGJlZm9yZSwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHZvaWQgcmVtb3ZlKGludCBpbmRleCk7CkBAIC04OSwxMyArOTAsMTMgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBhcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmLCBib29sKTsKIAog
ICAgIC8vIGdldCB0aGUgYWN0dWFsIGxpc3Rib3ggaW5kZXggb2YgdGhlIG9wdGlvbkluZGV4dGgg
b3B0aW9uCi0gICAgaW50IG9wdGlvblRvTGlzdEluZGV4KGludCBvcHRpb25JbmRleCkgY29uc3Q7
CisgICAgdmlydHVhbCBpbnQgb3B0aW9uVG9MaXN0SW5kZXgoaW50IG9wdGlvbkluZGV4KSBjb25z
dDsKICAgICAvLyByZXZlcnNlIG9mIG9wdGlvblRvTGlzdEluZGV4IC0gZ2V0IG9wdGlvbkluZGV4
IGZyb20gbGlzdGJveEluZGV4Ci0gICAgaW50IGxpc3RUb09wdGlvbkluZGV4KGludCBsaXN0SW5k
ZXgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGxpc3RUb09wdGlvbkluZGV4KGludCBsaXN0SW5k
ZXgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRSZWNhbGNMaXN0SXRlbXMoKTsKIAotICAgIGNvbnN0
IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMoKSBjb25zdAorICAgIHZpcnR1YWwgY29u
c3QgVmVjdG9yPEVsZW1lbnQqPiYgbGlzdEl0ZW1zKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlm
IChtX3JlY2FsY0xpc3RJdGVtcykKICAgICAgICAgICAgIHJlY2FsY0xpc3RJdGVtcygpOwpAQCAt
MTIxLDE0ICsxMjIsMTQgQEAgcHVibGljOgogCiAgICAgQ29sbGVjdGlvbkNhY2hlKiBjb2xsZWN0
aW9uSW5mbygpIHsgcmV0dXJuICZtX2NvbGxlY3Rpb25JbmZvOyB9CiAgICAgCi0gICAgdm9pZCBz
ZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChpbnQgaW5kZXgpOwotICAgIHZvaWQgc2V0QWN0
aXZlU2VsZWN0aW9uRW5kSW5kZXgoaW50IGluZGV4KSB7IG1fYWN0aXZlU2VsZWN0aW9uRW5kSW5k
ZXggPSBpbmRleDsgfQotICAgIHZvaWQgdXBkYXRlTGlzdEJveFNlbGVjdGlvbihib29sIGRlc2Vs
ZWN0T3RoZXJPcHRpb25zKTsKLSAgICB2b2lkIGxpc3RCb3hPbkNoYW5nZSgpOwotICAgIHZvaWQg
bWVudUxpc3RPbkNoYW5nZSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVTZWxlY3Rpb25B
bmNob3JJbmRleChpbnQgaW5kZXgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVTZWxlY3Rp
b25FbmRJbmRleChpbnQgaW5kZXgpIHsgbV9hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCA9IGluZGV4
OyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxpc3RCb3hTZWxlY3Rpb24oYm9vbCBkZXNlbGVj
dE90aGVyT3B0aW9ucyk7CisgICAgdmlydHVhbCB2b2lkIGxpc3RCb3hPbkNoYW5nZSgpOworICAg
IHZpcnR1YWwgdm9pZCBtZW51TGlzdE9uQ2hhbmdlKCk7CiAgICAgCi0gICAgaW50IGFjdGl2ZVNl
bGVjdGlvblN0YXJ0TGlzdEluZGV4KCkgY29uc3Q7Ci0gICAgaW50IGFjdGl2ZVNlbGVjdGlvbkVu
ZExpc3RJbmRleCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGFjdGl2ZVNlbGVjdGlvblN0YXJ0
TGlzdEluZGV4KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgYWN0aXZlU2VsZWN0aW9uRW5kTGlz
dEluZGV4KCkgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBzY3JvbGxUb1NlbGVjdGlvbigpOwogCkBA
IC0xNDcsNyArMTQ4LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZElu
dG9UcmVlKGJvb2wpOwogCi0gICAgbXV0YWJsZSBWZWN0b3I8SFRNTEVsZW1lbnQqPiBtX2xpc3RJ
dGVtczsKKyAgICBtdXRhYmxlIFZlY3RvcjxFbGVtZW50Kj4gbV9saXN0SXRlbXM7CiAgICAgVmVj
dG9yPGJvb2w+IG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb247CiAgICAgVmVjdG9yPGJv
b2w+IG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uOwogICAgIGludCBtX21pbndpZHRoOwpJbmRleDog
cGFnZS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9BY2Nlc3Np
YmlsaXR5TGlzdEJveC5jcHAJKHJldmlzaW9uIDQzNDIzKQorKysgcGFnZS9BY2Nlc3NpYmlsaXR5
TGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDEwICs3NCwxMCBAQCB2b2lkIEFjY2Vz
c2liaWxpdHlMaXN0Qm94OjphZGRDaGlsZHJlbigpCiAgICAgCiAgICAgbV9oYXZlQ2hpbGRyZW4g
PSB0cnVlOwogICAgIAotICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMg
PSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KHNlbGVjdE5vZGUpLT5saXN0SXRlbXMo
KTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzdGF0aWNfY2FzdDxI
VE1MU2VsZWN0RWxlbWVudCo+KHNlbGVjdE5vZGUpLT5saXN0SXRlbXMoKTsKICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBsaXN0SXRlbXMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsaXN0T3B0aW9u
ID0gbGlzdEJveE9wdGlvbkFjY2Vzc2liaWxpdHlPYmplY3QobGlzdEl0ZW1zW2ldKTsKKyAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbGlzdE9wdGlvbiA9IGxpc3RCb3hPcHRpb25BY2Nlc3Np
YmlsaXR5T2JqZWN0KHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obGlzdEl0ZW1zW2ldKSk7CiAg
ICAgICAgIGlmIChsaXN0T3B0aW9uKQogICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQobGlz
dE9wdGlvbik7CiAgICAgfQpAQCAtMTYzLDEyICsxNjMsMTIgQEAgQWNjZXNzaWJpbGl0eU9iamVj
dCogQWNjZXNzaWJpbGl0eUxpc3RCbwogICAgIAogICAgIEludFJlY3QgcGFyZW50UmVjdCA9IGJv
dW5kaW5nQm94UmVjdCgpOwogICAgIAotICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBs
aXN0SXRlbXMgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KG5vZGUpLT5saXN0SXRl
bXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzdGF0aWNfY2Fz
dDxIVE1MU2VsZWN0RWxlbWVudCo+KG5vZGUpLT5saXN0SXRlbXMoKTsKICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBsaXN0SXRlbXMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewogICAgICAgICBJbnRSZWN0IHJlY3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJM
aXN0Qm94Kj4obV9yZW5kZXJlciktPml0ZW1Cb3VuZGluZ0JveFJlY3QocGFyZW50UmVjdC54KCks
IHBhcmVudFJlY3QueSgpLCBpKTsKICAgICAgICAgaWYgKHJlY3QuY29udGFpbnMocG9pbnQpKQot
ICAgICAgICAgICAgcmV0dXJuIGxpc3RCb3hPcHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KGxpc3RJ
dGVtc1tpXSk7CisgICAgICAgICAgICByZXR1cm4gbGlzdEJveE9wdGlvbkFjY2Vzc2liaWxpdHlP
YmplY3Qoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihsaXN0SXRlbXNbaV0pKTsKICAgICB9CiAg
ICAgCiAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUobV9yZW5kZXJlcik7
CkluZGV4OiBwYWdlL0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBwYWdlL0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcAkocmV2aXNpb24gNDM0MjMpCisr
KyBwYWdlL0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTk1LDcgKzE5NSw3IEBAIGludCBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6bGlzdEJveE8K
ICAgICBpZiAoIXNlbGVjdEVsZW1lbnQpIAogICAgICAgICByZXR1cm4gLTE7CiAgICAgCi0gICAg
Y29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNlbGVjdEVsZW1lbnQtPmxp
c3RJdGVtcygpOworICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNlbGVj
dEVsZW1lbnQtPmxpc3RJdGVtcygpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxpc3RJdGVtcy5z
aXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQogICAgICAg
ICBpZiAobGlzdEl0ZW1zW2ldID09IG1fb3B0aW9uRWxlbWVudCkKSW5kZXg6IHBhZ2UvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNDM0MjMpCisrKyBwYWdlL0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTYsOCArNTU2LDggQEAgRWxlbWVu
dCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWN0aQogICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG1fcmVuZGVyZXItPm5vZGUoKSk7CiAgICAgCiAgICAgaWYgKG1fcmVu
ZGVyZXItPmlzTWVudUxpc3QoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlck1l
bnVMaXN0Kj4obV9yZW5kZXJlciktPnNlbGVjdEVsZW1lbnQoKTsKLSAgICAKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihtX3JlbmRlcmVyLT5ub2RlKCkpOworCiAgICAgRWxl
bWVudCogZWx0ID0gYW5jaG9yRWxlbWVudCgpOwogICAgIGlmICghZWx0KQogICAgICAgICBlbHQg
PSBtb3VzZUJ1dHRvbkxpc3RlbmVyKCk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbC5jcHAJKHJldmlzaW9uIDQzNDIzKQorKysgcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRD
b250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMTIgKzg1LDEyIEBAIHZvaWQgUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2w6OnN0eWxlRGlkQ2gKIAogdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbDo6dmFsdWVDaGFuZ2VkKCkKIHsKLSAgICAvLyBvbkNoYW5nZSBtYXkgZGVzdHJveSB0aGlz
IHJlbmRlcmVyCisgICAgLy8gZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50IG1heSBkZXN0
cm95IHRoaXMgcmVuZGVyZXIKICAgICBSZWZQdHI8RmlsZUNob29zZXI+IGZpbGVDaG9vc2VyID0g
bV9maWxlQ2hvb3NlcjsKIAogICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpOwogICAgIGlucHV0RWxlbWVudC0+
c2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIoZmlsZUNob29zZXItPmZpbGVuYW1lcygpKTsKLSAgICBp
bnB1dEVsZW1lbnQtPm9uQ2hhbmdlKCk7CisgICAgaW5wdXRFbGVtZW50LT5kaXNwYXRjaEZvcm1D
b250cm9sQ2hhbmdlRXZlbnQoKTsKICAKICAgICAvLyBvbmx5IHJlcGFpbnQgaWYgaXQgZG9lc24n
dCBzZWVtIHdlIGhhdmUgYmVlbiBkZXN0cm95ZWQKICAgICBpZiAoIWZpbGVDaG9vc2VyLT5kaXNj
b25uZWN0ZWQoKSkKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDQzNDIzKQorKysgcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBA
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKICNp
bmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiT3B0aW9uR3JvdXBFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiT3B0aW9uRWxlbWVudC5oIgpAQCAtNTEsNiArNTAsNyBAQAogI2luY2x1ZGUg
IlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcm9s
bGJhci5oIgorI2luY2x1ZGUgIlNlbGVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25D
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSA8bWF0
aC5oPgpAQCAtNzIsNyArNzIsNyBAQCBjb25zdCBpbnQgbWF4RGVmYXVsdFNpemUgPSAxMDsKIC8v
IHdpZGdldCwgYnV0IEknbSBub3Qgc3VyZSB0aGlzIGlzIHJpZ2h0IGZvciB0aGUgbmV3IGNvbnRy
b2wuCiBjb25zdCBpbnQgYmFzZWxpbmVBZGp1c3RtZW50ID0gNzsKIAotUmVuZGVyTGlzdEJveDo6
UmVuZGVyTGlzdEJveChIVE1MU2VsZWN0RWxlbWVudCogZWxlbWVudCkKK1JlbmRlckxpc3RCb3g6
OlJlbmRlckxpc3RCb3goRWxlbWVudCogZWxlbWVudCkKICAgICA6IFJlbmRlckJsb2NrKGVsZW1l
bnQpCiAgICAgLCBtX29wdGlvbnNDaGFuZ2VkKHRydWUpCiAgICAgLCBtX3Njcm9sbFRvUmV2ZWFs
U2VsZWN0aW9uQWZ0ZXJMYXlvdXQoZmFsc2UpCkBAIC05NiwxMiArOTYsMTIgQEAgdm9pZCBSZW5k
ZXJMaXN0Qm94OjpzdHlsZURpZENoYW5nZShTdHlsZQogdm9pZCBSZW5kZXJMaXN0Qm94Ojp1cGRh
dGVGcm9tRWxlbWVudCgpCiB7CiAgICAgaWYgKG1fb3B0aW9uc0NoYW5nZWQpIHsKLSAgICAgICAg
Y29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHN0YXRpY19jYXN0PEhUTUxT
ZWxlY3RFbGVtZW50Kj4obm9kZSgpKS0+bGlzdEl0ZW1zKCk7CisgICAgICAgIGNvbnN0IFZlY3Rv
cjxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obm9kZSgpKSktPmxpc3RJdGVtcygpOwogICAgICAgICBpbnQgc2l6ZSA9IG51bUl0ZW1z
KCk7CiAgICAgICAgIAogICAgICAgICBmbG9hdCB3aWR0aCA9IDA7CiAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVu
dCA9IGxpc3RJdGVtc1tpXTsKKyAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRl
bXNbaV07CiAgICAgICAgICAgICBTdHJpbmcgdGV4dDsKICAgICAgICAgICAgIEZvbnQgaXRlbUZv
bnQgPSBzdHlsZSgpLT5mb250KCk7CiAgICAgICAgICAgICBpZiAoT3B0aW9uRWxlbWVudCogb3B0
aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChlbGVtZW50KSkKQEAgLTE1MSw3ICsxNTEsNyBA
QCB2b2lkIFJlbmRlckxpc3RCb3g6OmxheW91dCgpCiAKIHZvaWQgUmVuZGVyTGlzdEJveDo6c2Ny
b2xsVG9SZXZlYWxTZWxlY3Rpb24oKQogeyAgICAKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2Vs
ZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpOworICAgIFNlbGVj
dEVsZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
bm9kZSgpKSk7CiAKICAgICBtX3Njcm9sbFRvUmV2ZWFsU2VsZWN0aW9uQWZ0ZXJMYXlvdXQgPSBm
YWxzZTsKIApAQCAtMTk3LDcgKzE5Nyw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6Y2FsY1ByZWZX
aWR0aHMoKQogCiBpbnQgUmVuZGVyTGlzdEJveDo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgaW50IHNw
ZWNpZmllZFNpemUgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KG5vZGUoKSktPnNp
emUoKTsKKyAgICBpbnQgc3BlY2lmaWVkU2l6ZSA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obm9kZSgpKSktPnNpemUoKTsKICAgICBpZiAoc3BlY2lmaWVkU2l6ZSA+IDEp
CiAgICAgICAgIHJldHVybiBtYXgobWluU2l6ZSwgc3BlY2lmaWVkU2l6ZSk7CiAgICAgcmV0dXJu
IG1pbihtYXgobWluU2l6ZSwgbnVtSXRlbXMoKSksIG1heERlZmF1bHRTaXplKTsKQEAgLTIxMSw3
ICsyMTEsNyBAQCBpbnQgUmVuZGVyTGlzdEJveDo6bnVtVmlzaWJsZUl0ZW1zKCkgY29uCiAKIGlu
dCBSZW5kZXJMaXN0Qm94OjpudW1JdGVtcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9kZSgpKS0+bGlzdEl0ZW1zKCkuc2l6ZSgpOworICAg
IHJldHVybiB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpLT5s
aXN0SXRlbXMoKS5zaXplKCk7CiB9CiAKIGludCBSZW5kZXJMaXN0Qm94OjpsaXN0SGVpZ2h0KCkg
Y29uc3QKQEAgLTI5Myw5ICsyOTMsOSBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50U2Nyb2xs
YmFyKFBhaW50CiAKIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZChQYWlu
dEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHksIGludCBsaXN0SW5kZXgpCiB7Ci0gICAg
SFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50
Kj4obm9kZSgpKTsKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0g
c2VsZWN0LT5saXN0SXRlbXMoKTsKLSAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVt
c1tsaXN0SW5kZXhdOworICAgIFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVu
dChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1l
bnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0LT5saXN0SXRlbXMoKTsKKyAgICBFbGVtZW50KiBlbGVt
ZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRleF07CiAgICAgT3B0aW9uRWxlbWVudCogb3B0aW9uRWxl
bWVudCA9IHRvT3B0aW9uRWxlbWVudChlbGVtZW50KTsKIAogICAgIFN0cmluZyBpdGVtVGV4dDsK
QEAgLTM0Miw5ICszNDIsOSBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91
bmQoCiAKIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZChQYWludEluZm8m
IHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHksIGludCBsaXN0SW5kZXgpCiB7Ci0gICAgSFRNTFNl
bGVjdEVsZW1lbnQqIHNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9k
ZSgpKTsKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0
LT5saXN0SXRlbXMoKTsKLSAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0
SW5kZXhdOworICAgIFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYg
bGlzdEl0ZW1zID0gc2VsZWN0LT5saXN0SXRlbXMoKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0g
bGlzdEl0ZW1zW2xpc3RJbmRleF07CiAgICAgT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9
IHRvT3B0aW9uRWxlbWVudChlbGVtZW50KTsKIAogICAgIENvbG9yIGJhY2tDb2xvcjsKQEAgLTQz
OCw3ICs0MzgsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhblNjcm9sbChjb25zdCBJbnRQCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1faW5BdXRvc2Nyb2xsID0gdHJ1ZTsKLSAgICBIVE1MU2Vs
ZWN0RWxlbWVudCogc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2Rl
KCkpOworICAgIFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7CiAgICAgc2VsZWN0LT51cGRhdGVMaXN0Qm94U2VsZWN0
aW9uKCFzZWxlY3QtPm11bHRpcGxlKCkpOwogICAgIG1faW5BdXRvc2Nyb2xsID0gZmFsc2U7CiB9
CkBAIC00NjgsNyArNDY4LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjphdXRvc2Nyb2xsKCkKIAog
ICAgIGludCBlbmRJbmRleCA9IHNjcm9sbFRvd2FyZChwb3MpOwogICAgIGlmIChlbmRJbmRleCA+
PSAwKSB7Ci0gICAgICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBzdGF0aWNfY2FzdDxI
VE1MU2VsZWN0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgICAgIFNlbGVjdEVsZW1lbnQqIHNlbGVj
dCA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7CiAgICAg
ICAgIG1faW5BdXRvc2Nyb2xsID0gdHJ1ZTsKIAogICAgICAgICBpZiAoIXNlbGVjdC0+bXVsdGlw
bGUoKSkKQEAgLTQ4Miw3ICs0ODIsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OmF1dG9zY3JvbGwo
KQogCiB2b2lkIFJlbmRlckxpc3RCb3g6OnN0b3BBdXRvc2Nyb2xsKCkKIHsKLSAgICBzdGF0aWNf
Y2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KG5vZGUoKSktPmxpc3RCb3hPbkNoYW5nZSgpOworICAg
IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSktPmxpc3RCb3hP
bkNoYW5nZSgpOwogfQogCiBib29sIFJlbmRlckxpc3RCb3g6OnNjcm9sbFRvUmV2ZWFsRWxlbWVu
dEF0TGlzdEluZGV4KGludCBpbmRleCkKQEAgLTUxNSw5ICs1MTUsMTAgQEAgYm9vbCBSZW5kZXJM
aXN0Qm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aQogCiB2b2lkIFJlbmRlckxpc3RCb3g6OnZhbHVl
Q2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgpCiB7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNl
bGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBFbGVt
ZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSk7CisgICAgU2VsZWN0
RWxlbWVudCogc2VsZWN0ID0gdG9TZWxlY3RFbGVtZW50KGVsZW1lbnQpOwogICAgIHNlbGVjdC0+
c2V0U2VsZWN0ZWRJbmRleChzZWxlY3QtPmxpc3RUb09wdGlvbkluZGV4KGxpc3RJbmRleCkpOwot
ICAgIHNlbGVjdC0+b25DaGFuZ2UoKTsKKyAgICBlbGVtZW50LT5kaXNwYXRjaEZvcm1Db250cm9s
Q2hhbmdlRXZlbnQoKTsKIH0KIAogdm9pZCBSZW5kZXJMaXN0Qm94Ojp2YWx1ZUNoYW5nZWQoU2Ny
b2xsYmFyKikKQEAgLTU4MywxMyArNTg0LDEzIEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0
UG9pbnQoY29uc3QgSGkKIHsKICAgICBpZiAoIVJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1
ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0eSwgaGl0VGVzdEFjdGlvbikpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc3Rh
dGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpLT5saXN0SXRlbXMoKTsKKyAgICBj
b25zdCBWZWN0b3I8RWxlbWVudCo+JiBsaXN0SXRlbXMgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpLT5saXN0SXRlbXMoKTsKICAgICBpbnQgc2l6ZSA9IG51
bUl0ZW1zKCk7CiAgICAgdHggKz0gdGhpcy0+eCgpOwogICAgIHR5ICs9IHRoaXMtPnkoKTsKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBpZiAoaXRlbUJvdW5k
aW5nQm94UmVjdCh0eCwgdHksIGkpLmNvbnRhaW5zKHgsIHkpKSB7Ci0gICAgICAgICAgICBpZiAo
SFRNTEVsZW1lbnQqIG5vZGUgPSBsaXN0SXRlbXNbaV0pIHsKKyAgICAgICAgICAgIGlmIChFbGVt
ZW50KiBub2RlID0gbGlzdEl0ZW1zW2ldKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0LnNldElu
bmVyTm9kZShub2RlKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pbm5lck5vblNoYXJl
ZE5vZGUoKSkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldElubmVyTm9uU2hhcmVkTm9k
ZShub2RlKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkocmV2aXNpb24gNDM0MjMpCisrKyByZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsOSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxTZWxlY3RFbGVtZW50OwotCiBjbGFzcyBSZW5k
ZXJMaXN0Qm94IDogcHVibGljIFJlbmRlckJsb2NrLCBwcml2YXRlIFNjcm9sbGJhckNsaWVudCB7
CiBwdWJsaWM6Ci0gICAgUmVuZGVyTGlzdEJveChIVE1MU2VsZWN0RWxlbWVudCopOworICAgIFJl
bmRlckxpc3RCb3goRWxlbWVudCopOwogICAgIH5SZW5kZXJMaXN0Qm94KCk7CiAKICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyTGlzdEJv
eCI7IH0KSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gNDM0MjMpCisrKyByZW5kZXJp
bmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAj
aW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCiAjaW5j
bHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiT3B0aW9uRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIk9wdGlvbkdyb3VwRWxlbWVudC5oIgpAQCAtMzUsNiArMzQsNyBAQAogI2luY2x1ZGUg
IlJlbmRlckJSLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJTZWxlY3RFbGVtZW50LmgiCiAjaW5jbHVkZSA8bWF0aC5o
PgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLVJlbmRlck1lbnVMaXN0OjpS
ZW5kZXJNZW51TGlzdChIVE1MU2VsZWN0RWxlbWVudCogZWxlbWVudCkKK1JlbmRlck1lbnVMaXN0
OjpSZW5kZXJNZW51TGlzdChFbGVtZW50KiBlbGVtZW50KQogICAgIDogUmVuZGVyRmxleGlibGVC
b3goZWxlbWVudCkKICAgICAsIG1fYnV0dG9uVGV4dCgwKQogICAgICwgbV9pbm5lckJsb2NrKDAp
CkBAIC02MSwxMiArNjEsNiBAQCBSZW5kZXJNZW51TGlzdDo6flJlbmRlck1lbnVMaXN0KCkKICAg
ICBtX3BvcHVwID0gMDsKIH0KIAotLy8gdGhpcyBzdGF0aWMgY2FzdCBpcyBzYWZlIGJlY2F1c2Ug
UmVuZGVyTWVudUxpc3RzIGFyZSBvbmx5IGNyZWF0ZWQgZm9yIEhUTUxTZWxlY3RFbGVtZW50cwot
SFRNTFNlbGVjdEVsZW1lbnQqIFJlbmRlck1lbnVMaXN0OjpzZWxlY3RFbGVtZW50KCkKLXsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpOwotfQotCiB2
b2lkIFJlbmRlck1lbnVMaXN0OjpjcmVhdGVJbm5lckJsb2NrKCkKIHsKICAgICBpZiAobV9pbm5l
ckJsb2NrKSB7CkBAIC0xMzQsMTAgKzEyOCwxMCBAQCB2b2lkIFJlbmRlck1lbnVMaXN0OjpzdHls
ZURpZENoYW5nZShTdHlsCiB2b2lkIFJlbmRlck1lbnVMaXN0Ojp1cGRhdGVPcHRpb25zV2lkdGgo
KQogewogICAgIGZsb2F0IG1heE9wdGlvbldpZHRoID0gMDsKLSAgICBjb25zdCBWZWN0b3I8SFRN
TEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihu
b2RlKCkpLT5saXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBsaXN0SXRl
bXMgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpLT5saXN0
SXRlbXMoKTsKICAgICBpbnQgc2l6ZSA9IGxpc3RJdGVtcy5zaXplKCk7ICAgIAogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50
ID0gbGlzdEl0ZW1zW2ldOworICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2ld
OwogICAgICAgICBPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50
KGVsZW1lbnQpOwogICAgICAgICBpZiAoIW9wdGlvbkVsZW1lbnQpCiAgICAgICAgICAgICBjb250
aW51ZTsKQEAgLTE3NCwxMyArMTY4LDEzIEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnVwZGF0ZUZy
b21FbGVtZW50KCkKICAgICBpZiAobV9wb3B1cElzVmlzaWJsZSkKICAgICAgICAgbV9wb3B1cC0+
dXBkYXRlRnJvbUVsZW1lbnQoKTsKICAgICBlbHNlCi0gICAgICAgIHNldFRleHRGcm9tT3B0aW9u
KHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9kZSgpKS0+c2VsZWN0ZWRJbmRleCgp
KTsKKyAgICAgICAgc2V0VGV4dEZyb21PcHRpb24odG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKCkpKS0+c2VsZWN0ZWRJbmRleCgpKTsKIH0KIAogdm9pZCBSZW5kZXJN
ZW51TGlzdDo6c2V0VGV4dEZyb21PcHRpb24oaW50IG9wdGlvbkluZGV4KQogewotICAgIEhUTUxT
ZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KG5v
ZGUoKSk7Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNlbGVj
dC0+bGlzdEl0ZW1zKCk7CisgICAgU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9TZWxlY3RFbGVt
ZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKTsKKyAgICBjb25zdCBWZWN0b3I8RWxl
bWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3QtPmxpc3RJdGVtcygpOwogICAgIGludCBzaXplID0g
bGlzdEl0ZW1zLnNpemUoKTsKIAogICAgIGludCBpID0gc2VsZWN0LT5vcHRpb25Ub0xpc3RJbmRl
eChvcHRpb25JbmRleCk7CkBAIC0yODEsNyArMjc1LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6
c2hvd1BvcHVwKCkKICAgICBjcmVhdGVJbm5lckJsb2NrKCk7CiAgICAgaWYgKCFtX3BvcHVwKQog
ICAgICAgICBtX3BvcHVwID0gUG9wdXBNZW51OjpjcmVhdGUodGhpcyk7Ci0gICAgSFRNTFNlbGVj
dEVsZW1lbnQqIHNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9kZSgp
KTsKKyAgICBTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG5vZGUoKSkpOwogICAgIG1fcG9wdXBJc1Zpc2libGUgPSB0cnVlOwogCiAg
ICAgLy8gQ29tcHV0ZSB0aGUgdG9wIGxlZnQgdGFraW5nIHRyYW5zZm9ybXMgaW50byBhY2NvdW50
LCBidXQgdXNlCkBAIC0zMDIsMTQgKzI5NiwxNCBAQCB2b2lkIFJlbmRlck1lbnVMaXN0OjpoaWRl
UG9wdXAoKQogCiB2b2lkIFJlbmRlck1lbnVMaXN0Ojp2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlz
dEluZGV4LCBib29sIGZpcmVPbkNoYW5nZSkKIHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2Vs
ZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpOworICAgIFNlbGVj
dEVsZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
bm9kZSgpKSk7CiAgICAgc2VsZWN0LT5zZXRTZWxlY3RlZEluZGV4KHNlbGVjdC0+bGlzdFRvT3B0
aW9uSW5kZXgobGlzdEluZGV4KSwgdHJ1ZSwgZmlyZU9uQ2hhbmdlKTsKIH0KIAogU3RyaW5nIFJl
bmRlck1lbnVMaXN0OjppdGVtVGV4dCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0CiB7Ci0gICAg
SFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50
Kj4obm9kZSgpKTsKLSAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHNlbGVjdC0+bGlzdEl0ZW1z
KClbbGlzdEluZGV4XTsKKyAgICBTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b1NlbGVjdEVsZW1l
bnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOworICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBzZWxlY3QtPmxpc3RJdGVtcygpW2xpc3RJbmRleF07CiAgICAgaWYgKE9wdGlvbkdyb3VwRWxl
bWVudCogb3B0aW9uR3JvdXBFbGVtZW50ID0gdG9PcHRpb25Hcm91cEVsZW1lbnQoZWxlbWVudCkp
CiAgICAgICAgIHJldHVybiBvcHRpb25Hcm91cEVsZW1lbnQtPmdyb3VwTGFiZWxUZXh0KCk7CiAg
ICAgZWxzZSBpZiAoT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVu
dChlbGVtZW50KSkKQEAgLTMxOSw4ICszMTMsOCBAQCBTdHJpbmcgUmVuZGVyTWVudUxpc3Q6Oml0
ZW1UZXh0KHVuc2lnbmVkCiAKIGJvb2wgUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc0VuYWJsZWQodW5z
aWduZWQgbGlzdEluZGV4KSBjb25zdAogewotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3Qg
PSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgSFRNTEVsZW1l
bnQqIGVsZW1lbnQgPSBzZWxlY3QtPmxpc3RJdGVtcygpW2xpc3RJbmRleF07CisgICAgU2VsZWN0
RWxlbWVudCogc2VsZWN0ID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihu
b2RlKCkpKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc2VsZWN0LT5saXN0SXRlbXMoKVtsaXN0
SW5kZXhdOwogICAgIGlmICghZWxlbWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCBncm91cEVuYWJsZWQgPSB0cnVlOwpAQCAtMzM0LDgg
KzMyOCw4IEBAIGJvb2wgUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc0VuYWJsZWQodW5zaWcKIAogUG9w
dXBNZW51U3R5bGUgUmVuZGVyTWVudUxpc3Q6Oml0ZW1TdHlsZSh1bnNpZ25lZCBsaXN0SW5kZXgp
IGNvbnN0CiB7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHN0YXRpY19jYXN0PEhU
TUxTZWxlY3RFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHNl
bGVjdC0+bGlzdEl0ZW1zKClbbGlzdEluZGV4XTsKKyAgICBTZWxlY3RFbGVtZW50KiBzZWxlY3Qg
PSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOworICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSBzZWxlY3QtPmxpc3RJdGVtcygpW2xpc3RJbmRleF07CiAgICAgCiAg
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKSA/IGVsZW1lbnQt
PnJlbmRlclN0eWxlKCkgOiBlbGVtZW50LT5jb21wdXRlZFN0eWxlKCk7CiAgICAgcmV0dXJuIHN0
eWxlID8gUG9wdXBNZW51U3R5bGUoc3R5bGUtPmNvbG9yKCksIGl0ZW1CYWNrZ3JvdW5kQ29sb3Io
bGlzdEluZGV4KSwgc3R5bGUtPmZvbnQoKSwgc3R5bGUtPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxF
LCBzdHlsZS0+dGV4dEluZGVudCgpLCBzdHlsZS0+ZGlyZWN0aW9uKCkpIDogbWVudVN0eWxlKCk7
CkBAIC0zNDMsOCArMzM3LDggQEAgUG9wdXBNZW51U3R5bGUgUmVuZGVyTWVudUxpc3Q6Oml0ZW1T
dHlsZQogCiBDb2xvciBSZW5kZXJNZW51TGlzdDo6aXRlbUJhY2tncm91bmRDb2xvcih1bnNpZ25l
ZCBsaXN0SW5kZXgpIGNvbnN0CiB7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHN0
YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBIVE1MRWxlbWVudCog
ZWxlbWVudCA9IHNlbGVjdC0+bGlzdEl0ZW1zKClbbGlzdEluZGV4XTsKKyAgICBTZWxlY3RFbGVt
ZW50KiBzZWxlY3QgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUo
KSkpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzZWxlY3QtPmxpc3RJdGVtcygpW2xpc3RJbmRl
eF07CiAKICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3I7CiAgICAgaWYgKGVsZW1lbnQtPnJlbmRl
clN0eWxlKCkpCkBAIC00MDcsMzQgKzQwMSwzNCBAQCBpbnQgUmVuZGVyTWVudUxpc3Q6OmNsaWVu
dFBhZGRpbmdSaWdodCgpCiAKIGludCBSZW5kZXJNZW51TGlzdDo6bGlzdFNpemUoKSBjb25zdAog
ewotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0
RWxlbWVudCo+KG5vZGUoKSk7CisgICAgU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9TZWxlY3RF
bGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKTsKICAgICByZXR1cm4gc2VsZWN0
LT5saXN0SXRlbXMoKS5zaXplKCk7CiB9CiAKIGludCBSZW5kZXJNZW51TGlzdDo6c2VsZWN0ZWRJ
bmRleCgpIGNvbnN0CiB7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHN0YXRpY19j
YXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBTZWxlY3RFbGVtZW50KiBzZWxl
Y3QgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOwogICAg
IHJldHVybiBzZWxlY3QtPm9wdGlvblRvTGlzdEluZGV4KHNlbGVjdC0+c2VsZWN0ZWRJbmRleCgp
KTsKIH0KIAogYm9vbCBSZW5kZXJNZW51TGlzdDo6aXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVkIGxp
c3RJbmRleCkgY29uc3QKIHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gc3RhdGlj
X2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpOwotICAgIEhUTUxFbGVtZW50KiBlbGVt
ZW50ID0gc2VsZWN0LT5saXN0SXRlbXMoKVtsaXN0SW5kZXhdOworICAgIFNlbGVjdEVsZW1lbnQq
IHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7
CisgICAgRWxlbWVudCogZWxlbWVudCA9IHNlbGVjdC0+bGlzdEl0ZW1zKClbbGlzdEluZGV4XTsK
ICAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFtZShoclRhZyk7CiB9CiAKIGJvb2wgUmVuZGVy
TWVudUxpc3Q6Oml0ZW1Jc0xhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKIHsKLSAgICBI
VE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQq
Pihub2RlKCkpOwotICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gc2VsZWN0LT5saXN0SXRlbXMo
KVtsaXN0SW5kZXhdOworICAgIFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVu
dChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7CisgICAgRWxlbWVudCogZWxlbWVudCA9
IHNlbGVjdC0+bGlzdEl0ZW1zKClbbGlzdEluZGV4XTsKICAgICByZXR1cm4gZWxlbWVudC0+aGFz
VGFnTmFtZShvcHRncm91cFRhZyk7CiB9CiAKIGJvb2wgUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc1Nl
bGVjdGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKIHsKLSAgICBIVE1MU2VsZWN0RWxlbWVu
dCogc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpOwotICAg
IEhUTUxFbGVtZW50KiBlbGVtZW50ID0gc2VsZWN0LT5saXN0SXRlbXMoKVtsaXN0SW5kZXhdOwor
ICAgIFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obm9kZSgpKSk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IHNlbGVjdC0+bGlzdEl0
ZW1zKClbbGlzdEluZGV4XTsKICAgICBpZiAoT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9
IHRvT3B0aW9uRWxlbWVudChlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIG9wdGlvbkVsZW1lbnQt
PnNlbGVjdGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDQyLDcgKzQzNiw3IEBAIGJvb2wg
UmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc1NlbGVjdGVkKHVuc2kKIAogdm9pZCBSZW5kZXJNZW51TGlz
dDo6c2V0VGV4dEZyb21JdGVtKHVuc2lnbmVkIGxpc3RJbmRleCkKIHsKLSAgICBIVE1MU2VsZWN0
RWxlbWVudCogc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkp
OworICAgIFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obm9kZSgpKSk7CiAgICAgc2V0VGV4dEZyb21PcHRpb24oc2VsZWN0LT5saXN0
VG9PcHRpb25JbmRleChsaXN0SW5kZXgpKTsKIH0KIApJbmRleDogcmVuZGVyaW5nL1JlbmRlck1l
bnVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgJKHJldmlz
aW9uIDQzNDIzKQorKysgcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDE2ICszNCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxT
ZWxlY3RFbGVtZW50OwogY2xhc3MgUG9wdXBNZW51OwogY2xhc3MgUmVuZGVyVGV4dDsKIAogY2xh
c3MgUmVuZGVyTWVudUxpc3QgOiBwdWJsaWMgUmVuZGVyRmxleGlibGVCb3gsIHByaXZhdGUgUG9w
dXBNZW51Q2xpZW50IHsKIHB1YmxpYzoKLSAgICBSZW5kZXJNZW51TGlzdChIVE1MU2VsZWN0RWxl
bWVudCopOworICAgIFJlbmRlck1lbnVMaXN0KEVsZW1lbnQqKTsKICAgICB+UmVuZGVyTWVudUxp
c3QoKTsKLSAgICAKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0RWxlbWVudCgpOwogCiBw
cml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc01lbnVMaXN0KCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQpJbmRleDogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVu
ZGVyaW5nL1JlbmRlclNsaWRlci5jcHAJKHJldmlzaW9uIDQzNDIzKQorKysgcmVuZGVyaW5nL1Jl
bmRlclNsaWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwOCw3ICs0MDgsNyBAQCB2b2lkIFJl
bmRlclNsaWRlcjo6c2V0VmFsdWVGb3JQb3NpdGlvbihpCiAKICAgICAgICAgLy8gRklYTUU6IEl0
IHNlZW1zIGxpa2UgdGhpcyBjb3VsZCBzZW5kIGV4dHJhIGNoYW5nZSBldmVudHMgaWYgdGhlIHNh
bWUgdmFsdWUgaXMgc2V0CiAgICAgICAgIC8vIG11bHRpcGxlIHRpbWVzIHdpdGggbm8gbGF5b3V0
IGluIGJldHdlZW4uCi0gICAgICAgIGVsZW1lbnQtPm9uQ2hhbmdlKCk7CisgICAgICAgIGVsZW1l
bnQtPmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwogICAgIH0KIH0KIApJbmRleDog
d21sL1dNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTEZvcm1D
b250cm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDQzNDIzKQorKysgd21sL1dNTEZvcm1Db250cm9s
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDExIEBAIFdNTEZvcm1Db250
cm9sRWxlbWVudDo6fldNTEZvcm1Db250cm9sRWwKIHsKIH0KIAordm9pZCBXTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpCit7CisgICAgLy8gbm8t
b3AKK30KKwogYm9vbCBXTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QK
IHsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVyKCktPmlzQm94KCkpCkluZGV4OiB3
bWwvV01MRm9ybUNvbnRyb2xFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTEZvcm1Db250
cm9sRWxlbWVudC5oCShyZXZpc2lvbiA0MzQyMykKKysrIHdtbC9XTUxGb3JtQ29udHJvbEVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIGZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlTWF0Y2hlc1JlbmRlcmVyOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldEZvcm1Db250cm9s
VmFsdWVNYXRjaGVzUmVuZGVyZXIoYm9vbCBiID0gdHJ1ZSkgeyBtX3ZhbHVlTWF0Y2hlc1JlbmRl
cmVyID0gYjsgfQogCisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VF
dmVudCgpOwogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwogCiBwcml2YXRl
Ogo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30619</attachid>
            <date>2009-05-23 07:09:30 -0700</date>
            <delta_ts>2009-05-23 12:22:32 -0700</delta_ts>
            <desc>Updated patch v2</desc>
            <filename>AddSelectElement2.diff</filename>
            <type>text/plain</type>
            <size>60173</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ0MDg4
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIwIEBACisyMDA5LTA1
LTIzICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuaWtvbGFzLnppbW1lcm1hbm5AdG9yY2htb2JpbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eGVzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM4MDgKKworICAg
ICAgICBBZnRlciBhIGxvbmcgam91cm5leSwgYWRkIHRoZSBsYXN0IG1pc3NpbmcgQUJDIHRvIHNo
YXJlIGZvcm0gY29udHJvbCBlbGVtZW50IHN1cHBvcnQgd2l0aCBIVE1MU2VsZWN0RWxlbWVudC4K
KyAgICAgICAgUmVuZGVyTGlzdEJveC9SZW5kZXJNZW51TGlzdCBvcGVyYXRlcyBvbiBTZWxlY3RF
bGVtZW50IGluc3RlYWQgb2YgSFRNTFNlbGVjdEVsZW1lbnQgbm93LCBxdWVyeWluZyBzZWxlY3Rl
ZCBpbmRleCBldGMuCisgICAgICAgIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIHRoZXNl
IHJlbmRlciBvYmplY3RzIGZvciBpZS4gV01MLCBhcyBpdCdzIGRvbmUgYmVmb3JlIGZvciBpbnB1
dCAmIG9wdGlvbiBlbGVtZW50cy4KKworICAgICAgICBXTUxTZWxlY3RFbGVtZW50IHdpbGwgYmUg
Y3JlYXRlZCBzb29uLCBpbiBhIGZvbGxvdy11cCBwYXRjaCwgYWRkaW5nIG1vcmUgbWV0aG9kcyB0
byBTZWxlY3RFbGVtZW50LCBzaGFyaW5nIGNvZGUgYmV0d2VlbgorICAgICAgICBIVE1MU2VsZWN0
RWxlbWVudC9XTUxTZWxlY3RFbGVtZW50LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlMaXN0
Qm94OjphZGRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJv
eDo6ZG9BY2Nlc3NpYmlsaXR5SGl0VGVzdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5TGlzdEJveE9wdGlvbjo6bGlzdEJveE9wdGlvbkluZGV4KToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWN0aW9uRWxlbWVudCk6CisgICAgICAgICogZG9t
L0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmlzRm9ybUNvbnRyb2xFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFu
Z2VFdmVudCk6CisgICAgICAgICogZG9tL1NlbGVjdEVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OnRvU2VsZWN0RWxlbWVudCk6CisgICAgICAgICogZG9tL1NlbGVjdEVsZW1l
bnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RFbGVtZW50Ojp+U2VsZWN0RWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RFbGVtZW50OjpTZWxlY3RFbGVtZW50KToK
KyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2
ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaDoKKyAgICAgICAg
KiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudDo6c2V0Q2hlY2tlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjppbmRleCk6CisgICAg
ICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
U2VsZWN0RWxlbWVudDo6c2VsZWN0ZWRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2Vs
ZWN0RWxlbWVudDo6bGFzdFNlbGVjdGVkTGlzdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTZWxlY3RFbGVtZW50OjpkZXNlbGVjdEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxT
ZWxlY3RFbGVtZW50OjpzZXRTZWxlY3RlZEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxT
ZWxlY3RFbGVtZW50OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1l
bnQ6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6dmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNldFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzYXZlRm9ybUNvbnRyb2xTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cmVzdG9yZUZvcm1Db250cm9sU3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdEFsbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvblRvTGlzdEluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpsaXN0VG9PcHRpb25JbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cmVjYWxjTGlzdEl0ZW1zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpyZXNldCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50
SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0aXZl
U2VsZWN0aW9uQW5jaG9ySW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1l
bnQ6OnVwZGF0ZUxpc3RCb3hTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQ6Om1lbnVMaXN0T25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQ6Omxpc3RCb3hPbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0
RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVs
ZW1lbnQ6Om5leHRTZWxlY3RhYmxlTGlzdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxT
ZWxlY3RFbGVtZW50OjpwcmV2aW91c1NlbGVjdGFibGVMaXN0SW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNldExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MU2VsZWN0RWxlbWVudDo6Y2hlY2tMaXN0SXRlbXMpOgorICAgICAgICAqIGh0bWwvSFRNTFNl
bGVjdEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjptdWx0aXBsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEl0ZW1zKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRleCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjp2YWx1ZUNoYW5nZWQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxpc3RCb3g6OlJlbmRlckxpc3RCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJv
eDo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6
c2Nyb2xsVG9SZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJv
eDo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpudW1JdGVtcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUJhY2tncm91bmQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFuU2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxpc3RCb3g6OmF1dG9zY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGlzdEJveDo6c3RvcEF1dG9zY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJv
eDo6dmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6Om5vZGVB
dFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
ZW51TGlzdDo6UmVuZGVyTWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxp
c3Q6OnVwZGF0ZU9wdGlvbnNXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlz
dDo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6
OnNldFRleHRGcm9tT3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0Ojpz
aG93UG9wdXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6OnZhbHVlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6aXRlbVRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc0VuYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWVudUxpc3Q6Oml0ZW1TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNZW51TGlzdDo6aXRlbUJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNZW51TGlzdDo6bGlzdFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6
OnNlbGVjdGVkSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6Oml0ZW1J
c1NlcGFyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6aXRlbUlzTGFi
ZWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc1NlbGVjdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjpzZXRUZXh0RnJvbUl0ZW0pOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJTbGlkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjpzZXRWYWx1
ZUZvclBvc2l0aW9uKToKKyAgICAgICAgKiB3bWwvV01MRm9ybUNvbnRyb2xFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hGb3JtQ29u
dHJvbENoYW5nZUV2ZW50KToKKyAgICAgICAgKiB3bWwvV01MRm9ybUNvbnRyb2xFbGVtZW50Lmg6
CisKIDIwMDktMDUtMjMgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkIGJ1aWxkLWZpeCBmb3IgZ3RrLiBSZW1vdmUgc291cmNlIGlucHV0IGZpbGVz
CkluZGV4OiBHTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBHTlVtYWtlZmlsZS5hbQkocmV2
aXNpb24gNDQwODgpCisrKyBHTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtNzI0LDYg
KzcyNCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVu
dC5oIFwKIAlXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCBcCiAJV2ViQ29y
ZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIFwKKwlXZWJDb3JlL2RvbS9TZWxlY3RFbGVt
ZW50LmNwcCBcCisJV2ViQ29yZS9kb20vU2VsZWN0RWxlbWVudC5oIFwKIAlXZWJDb3JlL2RvbS9T
ZWxlY3Rvck5vZGVMaXN0LmNwcCBcCiAJV2ViQ29yZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5oIFwK
IAlXZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5jcHAgXApJbmRleDogV2ViQ29yZS5wcm8KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQ0MDg4KQorKysgV2ViQ29yZS5wcm8J
KHdvcmtpbmcgY29weSkKQEAgLTYzNSw2ICs2MzUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkb20v
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3BwIFwKICAgICBkb20vU2NyaXB0RWxlbWVudC5jcHAg
XAogICAgIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCBcCisgICAgZG9tL1NlbGVjdEVs
ZW1lbnQuY3BwIFwKICAgICBkb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAgXAogICAgIGRvbS9TdGF0
aWNOb2RlTGlzdC5jcHAgXAogICAgIGRvbS9TdGF0aWNTdHJpbmdMaXN0LmNwcCBcCkluZGV4OiBX
ZWJDb3JlU291cmNlcy5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZVNvdXJjZXMuYmtsCShyZXZp
c2lvbiA0NDA4OCkKKysrIFdlYkNvcmVTb3VyY2VzLmJrbAkod29ya2luZyBjb3B5KQpAQCAtNDc2
LDYgKzQ3Niw3IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWUKICAg
ICAgICAgZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcAogICAgICAgICBkb20vU2NyaXB0
RWxlbWVudC5jcHAKICAgICAgICAgZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCisgICAg
ICAgIGRvbS9TZWxlY3RFbGVtZW50LmNwcCAKICAgICAgICAgZG9tL1NlbGVjdG9yTm9kZUxpc3Qu
Y3BwCiAgICAgICAgIGRvbS9TdGF0aWNOb2RlTGlzdC5jcHAKICAgICAgICAgZG9tL1N0YXRpY1N0
cmluZ0xpc3QuY3BwCkluZGV4OiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNDQwODgpCisr
KyBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtOTE3OSw2
ICs5MTc5LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGRvbVxTZWxlY3RFbGVtZW50LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxTZWxlY3RFbGVtZW50LmgiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cU2Vs
ZWN0b3JOb2RlTGlzdC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNDQwODgpCisrKyBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDggQEAKIAkJMDgzREFF
QTcwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODNEQUVBMzBGMDFBN0ZC
MDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLzsgfTsKIAkJMDgzREFF
QTgwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODNEQUVBNDBGMDFB
N0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCAqLzsgfTsKIAkJ
MDgzREFFQTkwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzREFFQTUw
RjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oICovOyB9Owor
CQkwODRBRUJFNDBGQjUwNUZBMDAzODQ4M0UgLyogU2VsZWN0RWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODRBRUJFMjBGQjUwNUZBMDAz
ODQ4M0UgLyogU2VsZWN0RWxlbWVudC5jcHAgKi87IH07CisJCTA4NEFFQkU1MEZCNTA1RkEwMDM4
NDgzRSAvKiBTZWxlY3RFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwODRBRUJFMzBGQjUwNUZBMDAzODQ4M0UgLyogU2VsZWN0RWxlbWVudC5o
ICovOyB9OwogCQkwODRDRTVDQjBGMjdEQURDMDBFNjI0MEUgLyogV01MT3B0R3JvdXBFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NENF
NUM3MEYyN0RBREMwMEU2MjQwRSAvKiBXTUxPcHRHcm91cEVsZW1lbnQuY3BwICovOyB9OwogCQkw
ODRDRTVDQzBGMjdEQURDMDBFNjI0MEUgLyogV01MT3B0R3JvdXBFbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODRDRTVDODBGMjdEQURDMDBF
NjI0MEUgLyogV01MT3B0R3JvdXBFbGVtZW50LmggKi87IH07CiAJCTA4NENFNUNEMEYyN0RBREMw
MEU2MjQwRSAvKiBXTUxPcHRpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NENFNUM5MEYyN0RBREMwMEU2MjQwRSAvKiBXTUxPcHRp
b25FbGVtZW50LmNwcCAqLzsgfTsKQEAgLTQ5NDksNiArNDk1MSw4IEBACiAJCTA4M0RBRUEzMEYw
MUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBNDBGMDFBN0ZCMDAzNDI3NTQgLyogUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTA4M0RBRUE1MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4
NEFFQkUyMEZCNTA1RkEwMDM4NDgzRSAvKiBTZWxlY3RFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlbGVjdEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwODRBRUJFMzBGQjUwNUZBMDAzODQ4M0UgLyogU2VsZWN0RWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWxlY3RFbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NENFNUM3MEYyN0RBREMwMEU2MjQwRSAvKiBX
TUxPcHRHcm91cEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV01MT3B0R3JvdXBFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MDg0Q0U1QzgwRjI3REFEQzAwRTYyNDBFIC8qIFdNTE9wdEdyb3VwRWxlbWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxPcHRHcm91cEVsZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg0Q0U1QzkwRjI3REFEQzAwRTYyNDBFIC8qIFdNTE9wdGlv
bkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MT3B0
aW9uRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDYzMiw2ICsx
NDYzNiw4IEBACiAJCQkJMDhBNDg0NzYwRTUyNzJDNTAwQzNGRTc2IC8qIFNjcmlwdEVsZW1lbnQu
aCAqLywKIAkJCQlFMTFDOURBRjBFQjM2OTk1MDBFNDA5REIgLyogU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5jcHAgKi8sCiAJCQkJRTExQzlEOUEwRUIzNjgxMjAwRTQwOURCIC8qIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCAqLywKKwkJCQkwODRBRUJFMjBGQjUwNUZBMDAzODQ4M0UgLyogU2VsZWN0
RWxlbWVudC5jcHAgKi8sCisJCQkJMDg0QUVCRTMwRkI1MDVGQTAwMzg0ODNFIC8qIFNlbGVjdEVs
ZW1lbnQuaCAqLywKIAkJCQlCQzdGQTY4MDBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2Rl
TGlzdC5jcHAgKi8sCiAJCQkJQkM3RkE2N0YwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9k
ZUxpc3QuaCAqLywKIAkJCQlCQzdGQTYyQzBEMUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxp
c3QuY3BwICovLApAQCAtMTY2NTIsNiArMTY2NTgsNyBAQAogCQkJCUJDRDBFMEZDMEU5NzJDMzUw
MDI2NURFQSAvKiBTZWN1cml0eU9yaWdpbkhhc2guaCBpbiBIZWFkZXJzICovLAogCQkJCTM3MUY0
RkZDMEQyNUU3RjMwMEVDRTBENSAvKiBTZWdtZW50ZWRGb250RGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQjJDM0RBMkYwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmluZy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMDg0QUVCRTUwRkI1MDVGQTAwMzg0ODNFIC8qIFNlbGVjdEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTBFMDk5RTY0OTIwMDU2RTU4MSAvKiBTZWxlY3Rp
b25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdGQTY4MTBEMUYxNjc5MDBEQjIy
QTkgLyogU2VsZWN0b3JOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFFMEJCMjMwREE1
NzJBNjAwQTlFNDE3IC8qIFNlc3Npb25TdG9yYWdlLmggaW4gSGVhZGVycyAqLywKQEAgLTE4NzAw
LDYgKzE4NzA3LDcgQEAKIAkJCQlCQ0QwRTBGQTBFOTcyQzM1MDAyNjVERUEgLyogU2VjdXJpdHlP
cmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzcxRjRGRkQwRDI1RTdGMzAwRUNFMEQ1IC8q
IFNlZ21lbnRlZEZvbnREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTJFMEQwMDZD
MUQwMEVGNkYyNiAvKiBTZWdtZW50ZWRTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDg0
QUVCRTQwRkI1MDVGQTAwMzg0ODNFIC8qIFNlbGVjdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTMzMDlFMEQwOTlFNjQ5MjAwNTZFNTgxIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNEE4Qzk2RUIwQkU2OTAzMjAwNEVFRkYwIC8qIFNlbGVjdGlv
bkNvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzdGQTY4MjBEMUYxNjc5MDBE
QjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwCShyZXZpc2lvbiA0NDA4OCkKKysrIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCwx
MCArNzQsMTAgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5TGlzdEJveDo6YWRkQ2hpbGRyZW4oKQogICAg
IAogICAgIG1faGF2ZUNoaWxkcmVuID0gdHJ1ZTsKICAgICAKLSAgICBjb25zdCBWZWN0b3I8SFRN
TEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihz
ZWxlY3ROb2RlKS0+bGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgbGlz
dEl0ZW1zID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihzZWxlY3ROb2RlKS0+bGlz
dEl0ZW1zKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbGlzdEl0ZW1zLnNpemUoKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogbGlzdE9wdGlvbiA9IGxpc3RCb3hPcHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0
KGxpc3RJdGVtc1tpXSk7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGxpc3RPcHRpb24g
PSBsaXN0Qm94T3B0aW9uQWNjZXNzaWJpbGl0eU9iamVjdChzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dCo+KGxpc3RJdGVtc1tpXSkpOwogICAgICAgICBpZiAobGlzdE9wdGlvbikKICAgICAgICAgICAg
IG1fY2hpbGRyZW4uYXBwZW5kKGxpc3RPcHRpb24pOwogICAgIH0KQEAgLTE2MywxMiArMTYzLDEy
IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlMaXN0Qm8KICAgICAKICAgICBJ
bnRSZWN0IHBhcmVudFJlY3QgPSBib3VuZGluZ0JveFJlY3QoKTsKICAgICAKLSAgICBjb25zdCBW
ZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVs
ZW1lbnQqPihub2RlKS0+bGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYg
bGlzdEl0ZW1zID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKS0+bGlzdEl0
ZW1zKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbGlzdEl0ZW1zLnNpemUoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgSW50UmVjdCByZWN0
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEJveCo+KG1fcmVuZGVyZXIpLT5pdGVtQm91bmRpbmdC
b3hSZWN0KHBhcmVudFJlY3QueCgpLCBwYXJlbnRSZWN0LnkoKSwgaSk7CiAgICAgICAgIGlmIChy
ZWN0LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiBsaXN0Qm94T3B0aW9uQWNj
ZXNzaWJpbGl0eU9iamVjdChsaXN0SXRlbXNbaV0pOworICAgICAgICAgICAgcmV0dXJuIGxpc3RC
b3hPcHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obGlz
dEl0ZW1zW2ldKSk7CiAgICAgfQogICAgIAogICAgIHJldHVybiBheE9iamVjdENhY2hlKCktPmdl
dE9yQ3JlYXRlKG1fcmVuZGVyZXIpOwpJbmRleDogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TGlzdEJveE9wdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5TGlzdEJveE9wdGlvbi5jcHAJKHJldmlzaW9uIDQ0MDg4KQorKysgYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsx
OTUsNyBAQCBpbnQgQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246Omxpc3RCb3hPCiAgICAgaWYg
KCFzZWxlY3RFbGVtZW50KSAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIAotICAgIGNvbnN0IFZl
Y3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50LT5saXN0SXRlbXMo
KTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50
LT5saXN0SXRlbXMoKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBsaXN0SXRlbXMuc2l6ZSgpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKICAgICAgICAgaWYgKGxp
c3RJdGVtc1tpXSA9PSBtX29wdGlvbkVsZW1lbnQpCkluZGV4OiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDQ0MDg4KQorKysgYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTU2
LDggKzU1Niw4IEBAIEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjdGkKICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihtX3JlbmRlcmVyLT5ub2RlKCkpOwog
ICAgIAogICAgIGlmIChtX3JlbmRlcmVyLT5pc01lbnVMaXN0KCkpCi0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxSZW5kZXJNZW51TGlzdCo+KG1fcmVuZGVyZXIpLT5zZWxlY3RFbGVtZW50KCk7
Ci0gICAgCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9yZW5kZXJlci0+
bm9kZSgpKTsKKwogICAgIEVsZW1lbnQqIGVsdCA9IGFuY2hvckVsZW1lbnQoKTsKICAgICBpZiAo
IWVsdCkKICAgICAgICAgZWx0ID0gbW91c2VCdXR0b25MaXN0ZW5lcigpOwpJbmRleDogZG9tL0Vs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vRWxlbWVudC5oCShyZXZpc2lvbiA0NDA4OCkKKysr
IGRvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw5ICsxMjQsNiBAQCBwdWJsaWM6
CiAgICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4oKTsK
IAogICAgIHZvaWQgbm9ybWFsaXplQXR0cmlidXRlcygpOwotCi0gICAgdmlydHVhbCBib29sIGlz
Rm9ybUNvbnRyb2xFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQogICAgIFN0cmlu
ZyBub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkgY29uc3Q7CiAKICAgICAvLyBjb252ZW5pZW5jZSBt
ZXRob2RzIHdoaWNoIGlnbm9yZSBleGNlcHRpb25zCkBAIC0yMDMsNiArMjAwLDcgQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIGNoaWxkRWxlbWVudENvdW50KCkgY29uc3Q7CiAKICAgICAvLyBGb3Jt
Q29udHJvbEVsZW1lbnQgQVBJCisgICAgdmlydHVhbCBib29sIGlzRm9ybUNvbnRyb2xFbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkRm9y
bUNvbnRyb2woKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUmVh
ZE9ubHlGb3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBi
b29sIGlzVGV4dEZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTIxNiw2
ICsyMTQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNhdmVGb3JtQ29udHJvbFN0YXRl
KFN0cmluZyYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlc3Rv
cmVGb3JtQ29udHJvbFN0YXRlKGNvbnN0IFN0cmluZyYpIHsgfQogCisgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpIHsgfQorCiBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVBdHRyaWJ1dGVNYXAoKSBjb25zdDsKIApJbmRleDogZG9tL1NlbGVj
dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9TZWxlY3RFbGVtZW50LmNwcAkocmV2aXNp
b24gMCkKKysrIGRvbS9TZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlbGVjdEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MS2V5Z2VuRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCisjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKworLy8gRklYTUU6IEFjdGl2YXRlIGNvZGUgb25jZSBXTUxTZWxlY3RFbGVtZW50
IGlzIGF2YWlsYWJsZQorI2lmIEVOQUJMRShXTUwpICYmIDAKKyNpbmNsdWRlICJXTUxTZWxlY3RF
bGVtZW50LmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1NlbGVjdEVsZW1lbnQqIHRvU2VsZWN0RWxlbWVudChFbGVtZW50KiBlbGVtZW50
KQoreworICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3RUYWcpKQorICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgIGVs
c2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjprZXlnZW5UYWcpKQorICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxLZXlnZW5FbGVtZW50Kj4oZWxlbWVudCk7Cisg
ICAgfQorCisgICAgLy8gRklYTUU6IEFjdGl2YXRlIGNvZGUgb25jZSBXTUxTZWxlY3RFbGVtZW50
IGlzIGF2YWlsYWJsZQorI2lmIEVOQUJMRShXTUwpICYmIDAKKyAgICBpZiAoZWxlbWVudC0+aXNX
TUxFbGVtZW50KCkgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShXTUxOYW1lczo6c2VsZWN0VGFnKSkK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdNTFNlbGVjdEVsZW1lbnQqPihlbGVtZW50KTsK
KyNlbmRpZgorCisgICAgcmV0dXJuIDA7Cit9CisKK30KSW5kZXg6IGRvbS9TZWxlY3RFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gZG9tL1NlbGVjdEVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIGRv
bS9TZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4g
KGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgU2VsZWN0RWxlbWVudF9o
CisjZGVmaW5lIFNlbGVjdEVsZW1lbnRfaAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEVsZW1lbnQ7CisKK2NsYXNzIFNlbGVjdEVsZW1l
bnQgeworcHVibGljOgorICAgIHZpcnR1YWwgflNlbGVjdEVsZW1lbnQoKSB7IH0KKworICAgIHZp
cnR1YWwgYm9vbCBtdWx0aXBsZSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgaW50IHNpemUo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBsaXN0SXRl
bXMoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGlzdEJveE9uQ2hhbmdlKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKGJvb2wgZGVzZWxlY3RP
dGhlck9wdGlvbnMpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBtZW51TGlzdE9uQ2hhbmdlKCkg
PSAwOworCisgICAgdmlydHVhbCBpbnQgYWN0aXZlU2VsZWN0aW9uU3RhcnRMaXN0SW5kZXgoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgYWN0aXZlU2VsZWN0aW9uRW5kTGlzdEluZGV4KCkg
Y29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvcklu
ZGV4KGludCBpbmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVTZWxlY3Rpb25F
bmRJbmRleChpbnQgaW5kZXgpID0gMDsKKworICAgIHZpcnR1YWwgaW50IGxpc3RUb09wdGlvbklu
ZGV4KGludCBsaXN0SW5kZXgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBvcHRpb25Ub0xp
c3RJbmRleChpbnQgb3B0aW9uSW5kZXgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgaW50IHNl
bGVjdGVkSW5kZXgoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkSW5k
ZXgoaW50IGluZGV4LCBib29sIGRlc2VsZWN0ID0gdHJ1ZSwgYm9vbCBmaXJlT25DaGFuZ2UgPSBm
YWxzZSkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgU2VsZWN0RWxlbWVudCgpIHsgfQorfTsKKwor
U2VsZWN0RWxlbWVudCogdG9TZWxlY3RFbGVtZW50KEVsZW1lbnQqKTsKKworfQorCisjZW5kaWYK
SW5kZXg6IGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRt
bC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNDQwODgpCisrKyBodG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNyArMTYzLDcg
QEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXROYW1lKGNvbgogICAgIHNldEF0dHJp
YnV0ZShuYW1lQXR0ciwgdmFsdWUpOwogfQogCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
Om9uQ2hhbmdlKCkKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hGb3JtQ29u
dHJvbENoYW5nZUV2ZW50KCkKIHsKICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50TmFtZXMoKS5jaGFu
Z2VFdmVudCwgdHJ1ZSwgZmFsc2UpOwogfQpJbmRleDogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgJKHJldmlz
aW9uIDQ0MDg4KQorKysgaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBmb3JtQ29udHJv
bFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZU1hdGNoZXNSZW5k
ZXJlcjsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRl
cmVyKGJvb2wgYikgeyBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyID0gYjsgfQogCi0gICAgdm9pZCBv
bkNoYW5nZSgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZl
bnQoKTsKIAogICAgIGJvb2wgZGlzYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNldERpc2FibGVk
KGJvb2wpOwpJbmRleDogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBo
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0NDA4OCkKKysrIGh0bWwvSFRNTElu
cHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5Miw3ICs4OTIsNyBAQCB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OnNldENoZWNrZWQoYm9vbCBuCiAgICAgLy8gYmVjYXVzZSBpdCBzYXlz
IG9ubHkgdG8gZmlyZSBjaGFuZ2UgZXZlbnRzIGF0ICJsb3NlIGZvY3VzIiB0aW1lLCB3aGljaCBp
cwogICAgIC8vIGRlZmluaXRlbHkgd3JvbmcgaW4gcHJhY3RpY2UgZm9yIHRoZXNlIHR5cGVzIG9m
IGVsZW1lbnRzLgogICAgIGlmIChzZW5kQ2hhbmdlRXZlbnQgJiYgaW5Eb2N1bWVudCgpICYmIChp
bnB1dFR5cGUoKSAhPSBSQURJTyB8fCBub3dDaGVja2VkKSkKLSAgICAgICAgb25DaGFuZ2UoKTsK
KyAgICAgICAgZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiB9CiAKIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6c2V0SW5kZXRlcm1pbmF0ZShib29sIF9pbmRldGVybWluYXRlKQpAQCAt
MTM5MSw3ICsxMzkxLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bAogICAgICAgICAvLyBGaXJlIG9uQ2hhbmdlIGZvciB0ZXh0IGZpZWxkcy4KICAgICAgICAgUmVu
ZGVyT2JqZWN0KiByID0gcmVuZGVyZXIoKTsKICAgICAgICAgaWYgKHIgJiYgci0+aXNUZXh0Rmll
bGQoKSAmJiB0b1JlbmRlclRleHRDb250cm9sKHIpLT5pc0VkaXRlZCgpKSB7Ci0gICAgICAgICAg
ICBvbkNoYW5nZSgpOworICAgICAgICAgICAgZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50
KCk7CiAgICAgICAgICAgICAvLyBSZWZldGNoIHRoZSByZW5kZXJlciBzaW5jZSBhcmJpdHJhcnkg
SlMgY29kZSBydW4gZHVyaW5nIG9uY2hhbmdlIGNhbiBkbyBhbnl0aGluZywgaW5jbHVkaW5nIGRl
c3Ryb3lpbmcgaXQuCiAgICAgICAgICAgICByID0gcmVuZGVyZXIoKTsKICAgICAgICAgICAgIGlm
IChyICYmIHItPmlzVGV4dEZpZWxkKCkpCkluZGV4OiBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gNDQw
ODgpCisrKyBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5
LDcgKzEwOSw3IEBAIGludCBIVE1MT3B0aW9uRWxlbWVudDo6aW5kZXgoKSBjb25zdAogICAgIC8v
IHdlIHdvbid0IGZvcmdldCB0byB1cGRhdGUgYSBtZW1iZXIgdmFyaWFibGUgaW4gc29tZSBjYXNl
cy4uLgogICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBvd25lclNlbGVjdEVsZW1lbnQo
KTsKICAgICBpZiAoc2VsZWN0KSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+
JiBpdGVtcyA9IHNlbGVjdC0+bGlzdEl0ZW1zKCk7CisgICAgICAgIGNvbnN0IFZlY3RvcjxFbGVt
ZW50Kj4mIGl0ZW1zID0gc2VsZWN0LT5saXN0SXRlbXMoKTsKICAgICAgICAgaW50IGwgPSBpdGVt
cy5zaXplKCk7CiAgICAgICAgIGludCBvcHRpb25JbmRleCA9IDA7CiAgICAgICAgIGZvcihpbnQg
aSA9IDA7IGkgPCBsOyBpKyspIHsKSW5kZXg6IGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0NDA4OCkK
KysrIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyAr
MTIwLDcgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50OjpzZWxlY3RlZEluZGV4KCkgYwogewogICAg
IC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHRoZSBmaXJzdCBvcHRpb24gc2VsZWN0ZWQKICAgICB1
bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1z
ID0gbGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0
SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsg
aSsrKSB7CiAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpIHsK
ICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KGl0ZW1zW2ld
KS0+c2VsZWN0ZWQoKSkKQEAgLTEzNiw3ICsxMzYsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6
Omxhc3RTZWxlY3RlZExpc3RJCiAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2YgdGhlIGxhc3Qg
b3B0aW9uIHNlbGVjdGVkCiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRl
bXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwog
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKICAg
ICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSkgewogICAgICAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oaXRlbXNbaV0pLT5zZWxlY3Rl
ZCgpKSB7CkBAIC0xNTAsNyArMTUwLDcgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50OjpsYXN0U2Vs
ZWN0ZWRMaXN0SQogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpkZXNlbGVjdEl0ZW1zKEhUTUxP
cHRpb25FbGVtZW50KiBleGNsdWRlRWxlbWVudCkKIHsKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVs
ZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+
JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIHVuc2lnbmVkIGk7CiAgICAgZm9yIChpID0gMDsg
aSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxO
YW1lKG9wdGlvblRhZykgJiYgKGl0ZW1zW2ldICE9IGV4Y2x1ZGVFbGVtZW50KSkgewpAQCAtMTYy
LDcgKzE2Miw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmRlc2VsZWN0SXRlbXMoSFQKIAog
dm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleChpbnQgb3B0aW9uSW5kZXgs
IGJvb2wgZGVzZWxlY3QsIGJvb2wgZmlyZU9uQ2hhbmdlKQogewotICAgIGNvbnN0IFZlY3RvcjxI
VE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIGNvbnN0IFZlY3RvcjxFbGVt
ZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaW50IGxpc3RJbmRleCA9IG9wdGlvblRv
TGlzdEluZGV4KG9wdGlvbkluZGV4KTsKICAgICBIVE1MT3B0aW9uRWxlbWVudCogZWxlbWVudCA9
IDA7CiAgICAgaWYgKCFtdWx0aXBsZSgpKQpAQCAtMjEwLDcgKzIxMCw3IEBAIGludCBIVE1MU2Vs
ZWN0RWxlbWVudDo6YWN0aXZlU2VsZWN0aW9uRW4KIHVuc2lnbmVkIEhUTUxTZWxlY3RFbGVtZW50
OjpsZW5ndGgoKSBjb25zdAogewogICAgIHVuc2lnbmVkIGxlbiA9IDA7Ci0gICAgY29uc3QgVmVj
dG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9y
PEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2Nh
bE5hbWUob3B0aW9uVGFnKSkKICAgICAgICAgICAgICsrbGVuOwpAQCAtMjMzLDcgKzIzMyw3IEBA
IHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlbW92ZShpbnQgaW5kZXgKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKICAgICBpbnQgbGlzdEluZGV4ID0gb3B0aW9uVG9MaXN0SW5kZXgoaW5kZXgp
OwogCi0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7
CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBp
ZiAobGlzdEluZGV4IDwgMCB8fCBpbmRleCA+PSBpbnQoaXRlbXMuc2l6ZSgpKSkKICAgICAgICAg
cmV0dXJuOyAvLyAjIyMgd2hhdCBzaG91bGQgd2UgZG8gPyByZW1vdmUgdGhlIGxhc3QgaXRlbT8K
IApAQCAtMjQ1LDcgKzI0NSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlbW92ZShpbnQg
aW5kZXgKIFN0cmluZyBIVE1MU2VsZWN0RWxlbWVudDo6dmFsdWUoKQogewogICAgIHVuc2lnbmVk
IGk7Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7
CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBm
b3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgaWYgKGl0ZW1zW2ld
LT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSAmJiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dCo+KGl0ZW1zW2ldKS0+c2VsZWN0ZWQoKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudCo+KGl0ZW1zW2ldKS0+dmFsdWUoKTsKQEAgLTI1OSw3ICsyNTks
NyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRWYWx1ZShjb25zdCBTCiAgICAgICAgIHJl
dHVybjsKICAgICAvLyBmaW5kIHRoZSBvcHRpb24gd2l0aCB2YWx1ZSgpIG1hdGNoaW5nIHRoZSBn
aXZlbiBwYXJhbWV0ZXIKICAgICAvLyBhbmQgbWFrZSBpdCB0aGUgY3VycmVudCBzZWxlY3Rpb24u
Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7Cisg
ICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICB1bnNp
Z25lZCBvcHRpb25JbmRleCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1z
LnNpemUoKTsgaSsrKQogICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShvcHRpb25U
YWcpKSB7CkBAIC0yNzMsMTEgKzI3MywxMSBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRW
YWx1ZShjb25zdCBTCiAKIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVGb3JtQ29udHJvbFN0
YXRlKFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50
Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRl
bXMgPSBsaXN0SXRlbXMoKTsKICAgICBpbnQgbCA9IGl0ZW1zLnNpemUoKTsKICAgICBWZWN0b3I8
Y2hhciwgMTAyND4gY2hhcmFjdGVycyhsKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGw7ICsr
aSkgewotICAgICAgICBIVE1MRWxlbWVudCogZSA9IGl0ZW1zW2ldOworICAgICAgICBFbGVtZW50
KiBlID0gaXRlbXNbaV07CiAgICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBlLT5oYXNMb2NhbE5hbWUo
b3B0aW9uVGFnKSAmJiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KGUpLT5zZWxlY3Rl
ZCgpOwogICAgICAgICBjaGFyYWN0ZXJzW2ldID0gc2VsZWN0ZWQgPyAnWCcgOiAnLic7CiAgICAg
fQpAQCAtMjg5LDcgKzI4OSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlc3RvcmVGb3Jt
Q29udHIKIHsKICAgICByZWNhbGNMaXN0SXRlbXMoKTsKICAgICAKLSAgICBjb25zdCBWZWN0b3I8
SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxl
bWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGludCBsID0gaXRlbXMuc2l6ZSgpOwog
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbDsgaSsrKQogICAgICAgICBpZiAoaXRlbXNbaV0tPmhh
c0xvY2FsTmFtZShvcHRpb25UYWcpKQpAQCAtMzY0LDcgKzM2NCw3IEBAIHZvaWQgSFRNTFNlbGVj
dEVsZW1lbnQ6OnNlbGVjdEFsbCgpCiAgICAgaWYgKCFyZW5kZXJlcigpIHx8ICFtdWx0aXBsZSgp
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0
IGNhbiBiZSBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdEFsbCBzZWxlY3Rpb24gd2hlbiB3ZSBj
YWxsIG9uQ2hhbmdlCisgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21w
YXJlZCB0byB0aGUgbmV3IHNlbGVjdEFsbCBzZWxlY3Rpb24gd2hlbiB3ZSBjYWxsIGRpc3BhdGNo
Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudAogICAgIHNhdmVMYXN0U2VsZWN0aW9uKCk7CiAgICAgCiAg
ICAgbV9hY3RpdmVTZWxlY3Rpb25TdGF0ZSA9IHRydWU7CkBAIC0zODgsNyArMzg4LDcgQEAgYm9v
bCBIVE1MU2VsZWN0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEoRgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBib29sIHN1Y2Nlc3NmdWwgPSBmYWxzZTsKLSAgICBjb25zdCBWZWN0b3I8SFRN
TEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVu
dCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogCiAgICAgdW5zaWduZWQgaTsKICAgICBmb3IgKGkg
PSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKQEAgLTQxOSw3ICs0MTksNyBAQCBib29sIEhU
TUxTZWxlY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0YShGCiAKIGludCBIVE1MU2VsZWN0RWxlbWVu
dDo6b3B0aW9uVG9MaXN0SW5kZXgoaW50IG9wdGlvbkluZGV4KSBjb25zdAogewotICAgIGNvbnN0
IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIGNvbnN0IFZl
Y3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaW50IGxpc3RTaXplID0g
KGludClpdGVtcy5zaXplKCk7CiAgICAgaWYgKG9wdGlvbkluZGV4IDwgMCB8fCBvcHRpb25JbmRl
eCA+PSBsaXN0U2l6ZSkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNDM3LDcgKzQzNyw3IEBAIGlu
dCBIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9uVG9MaXN0SW5kZXgKIAogaW50IEhUTUxTZWxlY3RF
bGVtZW50OjpsaXN0VG9PcHRpb25JbmRleChpbnQgbGlzdEluZGV4KSBjb25zdAogewotICAgIGNv
bnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIGNvbnN0
IFZlY3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaWYgKGxpc3RJbmRl
eCA8IDAgfHwgbGlzdEluZGV4ID49IGludChpdGVtcy5zaXplKCkpIHx8CiAgICAgICAgICFpdGVt
c1tsaXN0SW5kZXhdLT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSkKICAgICAgICAgcmV0dXJuIC0x
OwpAQCAtNDcxLDcgKzQ3MSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJ
dGVtcygKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKG9wdGlv
blRhZykpIHsKLSAgICAgICAgICAgIG1fbGlzdEl0ZW1zLmFwcGVuZChzdGF0aWNfY2FzdDxIVE1M
RWxlbWVudCo+KGN1cnJlbnQpKTsKKyAgICAgICAgICAgIG1fbGlzdEl0ZW1zLmFwcGVuZChzdGF0
aWNfY2FzdDxFbGVtZW50Kj4oY3VycmVudCkpOwogICAgICAgICAgICAgaWYgKHVwZGF0ZVNlbGVj
dGVkU3RhdGVzKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZFNlbGVjdGVkICYmICh1c2Vz
TWVudUxpc3QoKSB8fCAoIW1fbXVsdGlwbGUgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQqPihjdXJyZW50KS0+c2VsZWN0ZWQoKSkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvdW5k
U2VsZWN0ZWQgPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KGN1cnJlbnQpOwpAQCAt
NTI0LDcgKzUyNCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlc2V0KCkKIHsKICAgICBi
b29sIG9wdGlvblNlbGVjdGVkID0gZmFsc2U7CiAgICAgSFRNTE9wdGlvbkVsZW1lbnQqIGZpcnN0
T3B0aW9uID0gMDsKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0
SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygp
OwogICAgIHVuc2lnbmVkIGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsr
KSB7CiAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpIHsKQEAg
LTU0NywxNCArNTQ3LDE0IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlc2V0KCkKIHZvaWQg
SFRNTFNlbGVjdEVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNFdmVudCgpCiB7CiAgICAgaWYgKHVzZXNN
ZW51TGlzdCgpKQotICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNv
bXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4gd2UgY2FsbCBvbkNoYW5nZSBkdXJpbmcg
ZGlzcGF0Y2hCbHVyRXZlbnQuCisgICAgICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBpdCBj
YW4gYmUgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24gd2hlbiB3ZSBjYWxsIGRpc3BhdGNo
Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCBkdXJpbmcgZGlzcGF0Y2hCbHVyRXZlbnQuCiAgICAgICAg
IHNhdmVMYXN0U2VsZWN0aW9uKCk7CiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZTo6ZGlzcGF0Y2hGb2N1c0V2ZW50KCk7CiB9CiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmRp
c3BhdGNoQmx1ckV2ZW50KCkKIHsKLSAgICAvLyBXZSBvbmx5IG5lZWQgdG8gZmlyZSBvbkNoYW5n
ZSBoZXJlIGZvciBtZW51IGxpc3RzLCBiZWNhdXNlIHdlIGZpcmUgb25DaGFuZ2UgZm9yIGxpc3Qg
Ym94ZXMgd2hlbmV2ZXIgdGhlIHNlbGVjdGlvbiBjaGFuZ2UgaXMgYWN0dWFsbHkgbWFkZS4KKyAg
ICAvLyBXZSBvbmx5IG5lZWQgdG8gZmlyZSBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQg
aGVyZSBmb3IgbWVudSBsaXN0cywgYmVjYXVzZSB3ZSBmaXJlIG9uQ2hhbmdlIGZvciBsaXN0IGJv
eGVzIHdoZW5ldmVyIHRoZSBzZWxlY3Rpb24gY2hhbmdlIGlzIGFjdHVhbGx5IG1hZGUuCiAgICAg
Ly8gVGhpcyBtYXRjaGVzIG90aGVyIGJyb3dzZXJzJyBiZWhhdmlvci4KICAgICBpZiAodXNlc01l
bnVMaXN0KCkpCiAgICAgICAgIG1lbnVMaXN0T25DaGFuZ2UoKTsKQEAgLTU5OCw3ICs1OTgsNyBA
QCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1bHRFCiAjaWYgQVJST1dfS0VZ
U19QT1BfTUVOVQogICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiRG93biIgfHwga2V5SWRl
bnRpZmllciA9PSAiVXAiKSB7CiAgICAgICAgICAgICBmb2N1cygpOwotICAgICAgICAgICAgLy8g
U2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVj
dGlvbiB3aGVuIHdlIGNhbGwgb25DaGFuZ2UgZHVyaW5nIHNldFNlbGVjdGVkSW5kZXgsCisgICAg
ICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRo
ZSBuZXcgc2VsZWN0aW9uIHdoZW4gd2UgY2FsbCBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZl
bnQgZHVyaW5nIHNldFNlbGVjdGVkSW5kZXgsCiAgICAgICAgICAgICAvLyB3aGljaCBnZXRzIGNh
bGxlZCBmcm9tIFJlbmRlck1lbnVMaXN0Ojp2YWx1ZUNoYW5nZWQsIHdoaWNoIGdldHMgY2FsbGVk
IGFmdGVyIHRoZSB1c2VyIG1ha2VzIGEgc2VsZWN0aW9uIGZyb20gdGhlIG1lbnUuCiAgICAgICAg
ICAgICBzYXZlTGFzdFNlbGVjdGlvbigpOwogICAgICAgICAgICAgaWYgKFJlbmRlck1lbnVMaXN0
KiBtZW51TGlzdCA9IHN0YXRpY19jYXN0PFJlbmRlck1lbnVMaXN0Kj4ocmVuZGVyZXIoKSkpCkBA
IC02NDEsNyArNjQxLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3REZWZhdWx0
RQogI2lmIEFSUk9XX0tFWVNfUE9QX01FTlUKICAgICAgICAgaWYgKGtleUNvZGUgPT0gJyAnKSB7
CiAgICAgICAgICAgICBmb2N1cygpOwotICAgICAgICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9u
IHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbiB3aGVuIHdlIGNhbGwg
b25DaGFuZ2UgZHVyaW5nIHNldFNlbGVjdGVkSW5kZXgsCisgICAgICAgICAgICAvLyBTYXZlIHRo
ZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHdo
ZW4gd2UgY2FsbCBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQgZHVyaW5nIHNldFNlbGVj
dGVkSW5kZXgsCiAgICAgICAgICAgICAvLyB3aGljaCBnZXRzIGNhbGxlZCBmcm9tIFJlbmRlck1l
bnVMaXN0Ojp2YWx1ZUNoYW5nZWQsIHdoaWNoIGdldHMgY2FsbGVkIGFmdGVyIHRoZSB1c2VyIG1h
a2VzIGEgc2VsZWN0aW9uIGZyb20gdGhlIG1lbnUuCiAgICAgICAgICAgICBzYXZlTGFzdFNlbGVj
dGlvbigpOwogICAgICAgICAgICAgaWYgKFJlbmRlck1lbnVMaXN0KiBtZW51TGlzdCA9IHN0YXRp
Y19jYXN0PFJlbmRlck1lbnVMaXN0Kj4ocmVuZGVyZXIoKSkpCkBAIC02OTIsNyArNjkyLDcgQEAg
dm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveERlZmF1bHRFdgogICAgICAgICBJbnRQb2lu
dCBsb2NhbE9mZnNldCA9IHJvdW5kZWRJbnRQb2ludChyZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9j
YWwobW91c2VFdmVudC0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSkpOwogICAgICAg
ICBpbnQgbGlzdEluZGV4ID0gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEJveCo+KHJlbmRlcmVyKCkp
LT5saXN0SW5kZXhBdE9mZnNldChsb2NhbE9mZnNldC54KCksIGxvY2FsT2Zmc2V0LnkoKSk7CiAg
ICAgICAgIGlmIChsaXN0SW5kZXggPj0gMCkgewotICAgICAgICAgICAgLy8gU2F2ZSB0aGUgc2Vs
ZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbiB3aGVuIHdl
IGNhbGwgb25DaGFuZ2UgZHVyaW5nIG1vdXNldXAsIG9yIGFmdGVyIGF1dG9zY3JvbGwgZmluaXNo
ZXMuCisgICAgICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBh
cmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4gd2UgY2FsbCBkaXNwYXRjaEZvcm1Db250cm9s
Q2hhbmdlRXZlbnQgZHVyaW5nIG1vdXNldXAsIG9yIGFmdGVyIGF1dG9zY3JvbGwgZmluaXNoZXMu
CiAgICAgICAgICAgICBzYXZlTGFzdFNlbGVjdGlvbigpOwogCiAgICAgICAgICAgICBtX2FjdGl2
ZVNlbGVjdGlvblN0YXRlID0gdHJ1ZTsKQEAgLTcwNyw3ICs3MDcsNyBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2CiAgICAgICAgICAgICBib29sIHNoaWZ0U2VsZWN0
ID0gbXVsdGlwbGUoKSAmJiBtb3VzZUV2ZW50LT5zaGlmdEtleSgpOwogICAgICAgICAgICAgYm9v
bCBtdWx0aVNlbGVjdCA9IG11bHRpcGxlKCkgJiYgbXVsdGlTZWxlY3RLZXlQcmVzc2VkICYmICFt
b3VzZUV2ZW50LT5zaGlmdEtleSgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBIVE1MRWxl
bWVudCogY2xpY2tlZEVsZW1lbnQgPSBsaXN0SXRlbXMoKVtsaXN0SW5kZXhdOyAgICAgICAgICAg
IAorICAgICAgICAgICAgRWxlbWVudCogY2xpY2tlZEVsZW1lbnQgPSBsaXN0SXRlbXMoKVtsaXN0
SW5kZXhdOyAgICAgICAgICAgIAogICAgICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlv
biA9IDA7CiAgICAgICAgICAgICBpZiAoY2xpY2tlZEVsZW1lbnQtPmhhc0xvY2FsTmFtZShvcHRp
b25UYWcpKSB7CiAgICAgICAgICAgICAgICAgb3B0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlv
bkVsZW1lbnQqPihjbGlja2VkRWxlbWVudCk7CkBAIC03NDcsNyArNzQ3LDcgQEAgdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6bGlzdEJveERlZmF1bHRFdgogICAgICAgICAgICAgZXZ0LT5zZXREZWZh
dWx0SGFuZGxlZCgpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChldnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGlj
X2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigpID09IExlZnRCdXR0b24gJiYgZG9jdW1l
bnQoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmF1dG9zY3JvbGxSZW5kZXJlcigpICE9IHJl
bmRlcmVyKCkpCi0gICAgICAgIC8vIFRoaXMgbWFrZXMgc3VyZSB3ZSBmaXJlIG9uQ2hhbmdlIGZv
ciBhIHNpbmdsZSBjbGljay4gIEZvciBkcmFnIHNlbGVjdGlvbiwgb25DaGFuZ2Ugd2lsbCBmaXJl
IHdoZW4gdGhlIGF1dG9zY3JvbGwgdGltZXIgc3RvcHMuCisgICAgICAgIC8vIFRoaXMgbWFrZXMg
c3VyZSB3ZSBmaXJlIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCBmb3IgYSBzaW5nbGUg
Y2xpY2suICBGb3IgZHJhZyBzZWxlY3Rpb24sIG9uQ2hhbmdlIHdpbGwgZmlyZSB3aGVuIHRoZSBh
dXRvc2Nyb2xsIHRpbWVyIHN0b3BzLgogICAgICAgICBsaXN0Qm94T25DaGFuZ2UoKTsKICAgICBl
bHNlIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSB7CiAgICAg
ICAgIGlmICghZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSkKQEAgLTc3MCw3ICs3NzAsNyBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJEb3duIiB8fCBrZXlJZGVudGlmaWVyID09
ICJVcCIpIHsKLSAgICAgICAgICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4gYmUg
Y29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24gd2hlbiB3ZSBjYWxsIG9uQ2hhbmdlIGltbWVk
aWF0ZWx5IGFmdGVyIG1ha2luZyB0aGUgbmV3IHNlbGVjdGlvbi4KKyAgICAgICAgICAgIC8vIFNh
dmUgdGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4gYmUgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rp
b24gd2hlbiB3ZSBjYWxsIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCBpbW1lZGlhdGVs
eSBhZnRlciBtYWtpbmcgdGhlIG5ldyBzZWxlY3Rpb24uCiAgICAgICAgICAgICBzYXZlTGFzdFNl
bGVjdGlvbigpOwogCiAgICAgICAgICAgICBBU1NFUlQoZW5kSW5kZXggPj0gMCAmJiAodW5zaWdu
ZWQpZW5kSW5kZXggPCBsaXN0SXRlbXMoKS5zaXplKCkpOyAKQEAgLTgwOSw3ICs4MDksNyBAQCB2
b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3RpCiAgICAgbV9hY3RpdmVTZWxl
Y3Rpb25BbmNob3JJbmRleCA9IGluZGV4OwogICAgIAogICAgIC8vIENhY2hlIHRoZSBzZWxlY3Rp
b24gc3RhdGUgc28gd2UgY2FuIHJlc3RvcmUgdGhlIG9sZCBzZWxlY3Rpb24gYXMgdGhlIG5ldyBz
ZWxlY3Rpb24gcGl2b3RzIGFyb3VuZCB0aGlzIGFuY2hvciBpbmRleAotICAgIGNvbnN0IFZlY3Rv
cjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIGNvbnN0IFZlY3RvcjxF
bGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgbV9jYWNoZWRTdGF0ZUZvckFjdGl2
ZVNlbGVjdGlvbi5jbGVhcigpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5z
aXplKCk7IGkrKykgewogICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShvcHRpb25U
YWcpKSB7CkBAIC04MzAsNyArODMwLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6dXBkYXRl
TGlzdEJveFNlbAogICAgIHN0YXJ0ID0gbWluKG1fYWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgs
IG1fYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgpOwogICAgIGVuZCA9IG1heChtX2FjdGl2ZVNlbGVj
dGlvbkFuY2hvckluZGV4LCBtX2FjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KTsKIAotICAgIGNvbnN0
IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIGNvbnN0IFZl
Y3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFz
TG9jYWxOYW1lKG9wdGlvblRhZykpIHsKICAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBv
cHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KGl0ZW1zW2ldKTsKQEAgLTg1
NCw3ICs4NTQsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlzdE9uQ2hhbmdlCiAg
ICAgaW50IHNlbGVjdGVkID0gc2VsZWN0ZWRJbmRleCgpOwogICAgIGlmIChtX2xhc3RPbkNoYW5n
ZUluZGV4ICE9IHNlbGVjdGVkKSB7CiAgICAgICAgIG1fbGFzdE9uQ2hhbmdlSW5kZXggPSBzZWxl
Y3RlZDsKLSAgICAgICAgb25DaGFuZ2UoKTsKKyAgICAgICAgZGlzcGF0Y2hGb3JtQ29udHJvbENo
YW5nZUV2ZW50KCk7CiAgICAgfQogfQogCkBAIC04NjIsMTUgKzg2MiwxNSBAQCB2b2lkIEhUTUxT
ZWxlY3RFbGVtZW50OjpsaXN0Qm94T25DaGFuZ2UoCiB7CiAgICAgQVNTRVJUKCF1c2VzTWVudUxp
c3QoKSk7CiAKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRl
bXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwog
ICAgIAotICAgIC8vIElmIHRoZSBjYWNoZWQgc2VsZWN0aW9uIGxpc3QgaXMgZW1wdHksIG9yIHRo
ZSBzaXplIGhhcyBjaGFuZ2VkLCB0aGVuIGZpcmUgb25DaGFuZ2UsIGFuZCByZXR1cm4gZWFybHku
CisgICAgLy8gSWYgdGhlIGNhY2hlZCBzZWxlY3Rpb24gbGlzdCBpcyBlbXB0eSwgb3IgdGhlIHNp
emUgaGFzIGNoYW5nZWQsIHRoZW4gZmlyZSBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQs
IGFuZCByZXR1cm4gZWFybHkuCiAgICAgaWYgKG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uLmlzRW1w
dHkoKSB8fCBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbi5zaXplKCkgIT0gaXRlbXMuc2l6ZSgpKSB7
Ci0gICAgICAgIG9uQ2hhbmdlKCk7CisgICAgICAgIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VF
dmVudCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIC8vIFVwZGF0ZSBtX2xh
c3RPbkNoYW5nZVNlbGVjdGlvbiBhbmQgZmlyZSBvbkNoYW5nZQorICAgIC8vIFVwZGF0ZSBtX2xh
c3RPbkNoYW5nZVNlbGVjdGlvbiBhbmQgZmlyZSBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZl
bnQKICAgICBib29sIGZpcmVPbkNoYW5nZSA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewogICAgICAgICBib29sIHNlbGVjdGVkID0gZmFs
c2U7CkBAIC04ODEsMTIgKzg4MSwxMiBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94
T25DaGFuZ2UoCiAgICAgICAgIG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uW2ldID0gc2VsZWN0ZWQ7
CiAgICAgfQogICAgIGlmIChmaXJlT25DaGFuZ2UpCi0gICAgICAgIG9uQ2hhbmdlKCk7CisgICAg
ICAgIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwogfQogCiB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpzYXZlTGFzdFNlbGVjdGlvbigpCiB7Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxF
bGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQq
PiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKIAogICAgIGlmICh1c2VzTWVudUxpc3QoKSkgewogICAg
ICAgICBtX2xhc3RPbkNoYW5nZUluZGV4ID0gc2VsZWN0ZWRJbmRleCgpOwpAQCAtOTQ0LDcgKzk0
NCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQoS2UKICAgICAgICAg
fQogICAgIH0KIAotICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJ
dGVtcygpOworICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7
CiAgICAgaW50IGl0ZW1Db3VudCA9IGl0ZW1zLnNpemUoKTsKICAgICBpZiAoaXRlbUNvdW50IDwg
MSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTY5LDcgKzk2OSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVs
ZW1lbnQ6OnR5cGVBaGVhZEZpbmQoS2UKIAogaW50IEhUTUxTZWxlY3RFbGVtZW50OjpuZXh0U2Vs
ZWN0YWJsZUxpc3RJbmRleChpbnQgc3RhcnRJbmRleCkKIHsKLSAgICBjb25zdCBWZWN0b3I8SFRN
TEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVu
dCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGludCBpbmRleCA9IHN0YXJ0SW5kZXggKyAx
OwogICAgIHdoaWxlIChpbmRleCA+PSAwICYmICh1bnNpZ25lZClpbmRleCA8IGl0ZW1zLnNpemUo
KSAmJiAoIWl0ZW1zW2luZGV4XS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykgfHwgaXRlbXNbaW5k
ZXhdLT5kaXNhYmxlZCgpKSkKICAgICAgICAgaW5kZXgrKzsKQEAgLTk4MCw3ICs5ODAsNyBAQCBp
bnQgSFRNTFNlbGVjdEVsZW1lbnQ6Om5leHRTZWxlY3RhYmxlTGlzCiAKIGludCBIVE1MU2VsZWN0
RWxlbWVudDo6cHJldmlvdXNTZWxlY3RhYmxlTGlzdEluZGV4KGludCBzdGFydEluZGV4KQogewot
ICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAg
IGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaWYgKHN0
YXJ0SW5kZXggPT0gLTEpCiAgICAgICAgIHN0YXJ0SW5kZXggPSBpdGVtcy5zaXplKCk7CiAgICAg
aW50IGluZGV4ID0gc3RhcnRJbmRleCAtIDE7CkBAIC0xMDc2LDcgKzEwNzYsNyBAQCB2b2lkIEhU
TUxTZWxlY3RFbGVtZW50OjpzZXRMZW5ndGgodW5zaWduCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0gd2hpbGUgKCsrZGlmZik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29uc3Qg
VmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgICAgIGNvbnN0
IFZlY3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAKICAgICAgICAgc2l6ZV90
IG9wdGlvbkluZGV4ID0gMDsKICAgICAgICAgZm9yIChzaXplX3QgbGlzdEluZGV4ID0gMDsgbGlz
dEluZGV4IDwgaXRlbXMuc2l6ZSgpOyBsaXN0SW5kZXgrKykgewpAQCAtMTEwNyw3ICsxMTA3LDcg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZQogCiB2b2lkIEhUTUxT
ZWxlY3RFbGVtZW50OjpjaGVja0xpc3RJdGVtcygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPEhUTUxF
bGVtZW50Kj4gaXRlbXMgPSBtX2xpc3RJdGVtczsKKyAgICBWZWN0b3I8RWxlbWVudCo+IGl0ZW1z
ID0gbV9saXN0SXRlbXM7CiAgICAgcmVjYWxjTGlzdEl0ZW1zKGZhbHNlKTsKICAgICBBU1NFUlQo
aXRlbXMgPT0gbV9saXN0SXRlbXMpOwogfQpJbmRleDogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkocmV2aXNpb24gNDQwODgp
CisrKyBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbmNsdWRlICJDb2xsZWN0aW9uQ2FjaGUuaCIKICNpbmNsdWRlICJFdmVudC5oIgog
I2luY2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTZWxlY3RFbGVt
ZW50LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0zNSw3ICszNiw3IEBAIGNsYXNzIEhUTUxPcHRpb25FbGVtZW50OwogY2xhc3MgSFRNTE9wdGlv
bnNDb2xsZWN0aW9uOwogY2xhc3MgS2V5Ym9hcmRFdmVudDsKIAotY2xhc3MgSFRNTFNlbGVjdEVs
ZW1lbnQgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSB7CitjbGFzcyBI
VE1MU2VsZWN0RWxlbWVudCA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
LCBwdWJsaWMgU2VsZWN0RWxlbWVudCB7CiBwdWJsaWM6CiAgICAgSFRNTFNlbGVjdEVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOwog
CkBAIC01Niw4ICs1Nyw4IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgY2FuU3Rh
cnRTZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgaW50IHNlbGVjdGVk
SW5kZXgoKSBjb25zdDsKLSAgICB2b2lkIHNldFNlbGVjdGVkSW5kZXgoaW50IGluZGV4LCBib29s
IGRlc2VsZWN0ID0gdHJ1ZSwgYm9vbCBmaXJlT25DaGFuZ2UgPSBmYWxzZSk7CisgICAgdmlydHVh
bCBpbnQgc2VsZWN0ZWRJbmRleCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rl
ZEluZGV4KGludCBpbmRleCwgYm9vbCBkZXNlbGVjdCA9IHRydWUsIGJvb2wgZmlyZU9uQ2hhbmdl
ID0gZmFsc2UpOwogICAgIGludCBsYXN0U2VsZWN0ZWRMaXN0SW5kZXgoKSBjb25zdDsKIAogICAg
IHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAg
LTY2LDkgKzY3LDkgQEAgcHVibGljOgogCiAgICAgaW50IG1pbldpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9taW53aWR0aDsgfQogCi0gICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KKyAgICB2aXJ0dWFsIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAKLSAg
ICBib29sIG11bHRpcGxlKCkgY29uc3QgeyByZXR1cm4gbV9tdWx0aXBsZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBtdWx0aXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbXVsdGlwbGU7IH0KIAogICAgIHZv
aWQgYWRkKEhUTUxFbGVtZW50KiBlbGVtZW50LCBIVE1MRWxlbWVudCogYmVmb3JlLCBFeGNlcHRp
b25Db2RlJik7CiAgICAgdm9pZCByZW1vdmUoaW50IGluZGV4KTsKQEAgLTg5LDEzICs5MCwxMyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYs
IGJvb2wpOwogCiAgICAgLy8gZ2V0IHRoZSBhY3R1YWwgbGlzdGJveCBpbmRleCBvZiB0aGUgb3B0
aW9uSW5kZXh0aCBvcHRpb24KLSAgICBpbnQgb3B0aW9uVG9MaXN0SW5kZXgoaW50IG9wdGlvbklu
ZGV4KSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBvcHRpb25Ub0xpc3RJbmRleChpbnQgb3B0aW9u
SW5kZXgpIGNvbnN0OwogICAgIC8vIHJldmVyc2Ugb2Ygb3B0aW9uVG9MaXN0SW5kZXggLSBnZXQg
b3B0aW9uSW5kZXggZnJvbSBsaXN0Ym94SW5kZXgKLSAgICBpbnQgbGlzdFRvT3B0aW9uSW5kZXgo
aW50IGxpc3RJbmRleCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgbGlzdFRvT3B0aW9uSW5kZXgo
aW50IGxpc3RJbmRleCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFJlY2FsY0xpc3RJdGVtcygpOwog
Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcygpIGNvbnN0CisgICAg
dmlydHVhbCBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBsaXN0SXRlbXMoKSBjb25zdAogICAgIHsK
ICAgICAgICAgaWYgKG1fcmVjYWxjTGlzdEl0ZW1zKQogICAgICAgICAgICAgcmVjYWxjTGlzdEl0
ZW1zKCk7CkBAIC0xMjEsMTQgKzEyMiwxNCBAQCBwdWJsaWM6CiAKICAgICBDb2xsZWN0aW9uQ2Fj
aGUqIGNvbGxlY3Rpb25JbmZvKCkgeyByZXR1cm4gJm1fY29sbGVjdGlvbkluZm87IH0KICAgICAK
LSAgICB2b2lkIHNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGludCBpbmRleCk7Ci0gICAg
dm9pZCBzZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRleChpbnQgaW5kZXgpIHsgbV9hY3RpdmVTZWxl
Y3Rpb25FbmRJbmRleCA9IGluZGV4OyB9Ci0gICAgdm9pZCB1cGRhdGVMaXN0Qm94U2VsZWN0aW9u
KGJvb2wgZGVzZWxlY3RPdGhlck9wdGlvbnMpOwotICAgIHZvaWQgbGlzdEJveE9uQ2hhbmdlKCk7
Ci0gICAgdm9pZCBtZW51TGlzdE9uQ2hhbmdlKCk7CisgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2
ZVNlbGVjdGlvbkFuY2hvckluZGV4KGludCBpbmRleCk7CisgICAgdmlydHVhbCB2b2lkIHNldEFj
dGl2ZVNlbGVjdGlvbkVuZEluZGV4KGludCBpbmRleCkgeyBtX2FjdGl2ZVNlbGVjdGlvbkVuZElu
ZGV4ID0gaW5kZXg7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGlzdEJveFNlbGVjdGlvbihi
b29sIGRlc2VsZWN0T3RoZXJPcHRpb25zKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGlzdEJveE9uQ2hh
bmdlKCk7CisgICAgdmlydHVhbCB2b2lkIG1lbnVMaXN0T25DaGFuZ2UoKTsKICAgICAKLSAgICBp
bnQgYWN0aXZlU2VsZWN0aW9uU3RhcnRMaXN0SW5kZXgoKSBjb25zdDsKLSAgICBpbnQgYWN0aXZl
U2VsZWN0aW9uRW5kTGlzdEluZGV4KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgYWN0aXZlU2Vs
ZWN0aW9uU3RhcnRMaXN0SW5kZXgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBhY3RpdmVTZWxl
Y3Rpb25FbmRMaXN0SW5kZXgoKSBjb25zdDsKICAgICAKICAgICB2b2lkIHNjcm9sbFRvU2VsZWN0
aW9uKCk7CiAKQEAgLTE0Nyw3ICsxNDgsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lk
IGluc2VydGVkSW50b1RyZWUoYm9vbCk7CiAKLSAgICBtdXRhYmxlIFZlY3RvcjxIVE1MRWxlbWVu
dCo+IG1fbGlzdEl0ZW1zOworICAgIG11dGFibGUgVmVjdG9yPEVsZW1lbnQqPiBtX2xpc3RJdGVt
czsKICAgICBWZWN0b3I8Ym9vbD4gbV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbjsKICAg
ICBWZWN0b3I8Ym9vbD4gbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb247CiAgICAgaW50IG1fbWlud2lk
dGg7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHJldmlzaW9uIDQ0
MDg4KQorKysgcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODUsMTIgKzg1LDEyIEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnN0
eWxlRGlkQ2gKIAogdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6dmFsdWVDaGFuZ2VkKCkK
IHsKLSAgICAvLyBvbkNoYW5nZSBtYXkgZGVzdHJveSB0aGlzIHJlbmRlcmVyCisgICAgLy8gZGlz
cGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50IG1heSBkZXN0cm95IHRoaXMgcmVuZGVyZXIKICAg
ICBSZWZQdHI8RmlsZUNob29zZXI+IGZpbGVDaG9vc2VyID0gbV9maWxlQ2hvb3NlcjsKIAogICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQqPihub2RlKCkpOwogICAgIGlucHV0RWxlbWVudC0+c2V0RmlsZUxpc3RGcm9tUmVuZGVy
ZXIoZmlsZUNob29zZXItPmZpbGVuYW1lcygpKTsKLSAgICBpbnB1dEVsZW1lbnQtPm9uQ2hhbmdl
KCk7CisgICAgaW5wdXRFbGVtZW50LT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsK
ICAKICAgICAvLyBvbmx5IHJlcGFpbnQgaWYgaXQgZG9lc24ndCBzZWVtIHdlIGhhdmUgYmVlbiBk
ZXN0cm95ZWQKICAgICBpZiAoIWZpbGVDaG9vc2VyLT5kaXNjb25uZWN0ZWQoKSkKSW5kZXg6IHJl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5jcHAJKHJldmlzaW9uIDQ0MDg4KQorKysgcmVuZGVyaW5nL1JlbmRlckxpc3RCb3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
Ci0jaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCiAjaW5jbHVkZSAiT3B0aW9uR3JvdXBFbGVtZW50LmgiCiAjaW5jbHVkZSAiT3B0aW9uRWxl
bWVudC5oIgpAQCAtNTEsNiArNTAsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgIlNl
bGVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtNzIsNyArNzIsNyBA
QCBjb25zdCBpbnQgbWF4RGVmYXVsdFNpemUgPSAxMDsKIC8vIHdpZGdldCwgYnV0IEknbSBub3Qg
c3VyZSB0aGlzIGlzIHJpZ2h0IGZvciB0aGUgbmV3IGNvbnRyb2wuCiBjb25zdCBpbnQgYmFzZWxp
bmVBZGp1c3RtZW50ID0gNzsKIAotUmVuZGVyTGlzdEJveDo6UmVuZGVyTGlzdEJveChIVE1MU2Vs
ZWN0RWxlbWVudCogZWxlbWVudCkKK1JlbmRlckxpc3RCb3g6OlJlbmRlckxpc3RCb3goRWxlbWVu
dCogZWxlbWVudCkKICAgICA6IFJlbmRlckJsb2NrKGVsZW1lbnQpCiAgICAgLCBtX29wdGlvbnND
aGFuZ2VkKHRydWUpCiAgICAgLCBtX3Njcm9sbFRvUmV2ZWFsU2VsZWN0aW9uQWZ0ZXJMYXlvdXQo
ZmFsc2UpCkBAIC05NiwxMiArOTYsMTIgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpzdHlsZURpZENo
YW5nZShTdHlsZQogdm9pZCBSZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiB7CiAg
ICAgaWYgKG1fb3B0aW9uc0NoYW5nZWQpIHsKLSAgICAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVt
ZW50Kj4mIGxpc3RJdGVtcyA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9kZSgp
KS0+bGlzdEl0ZW1zKCk7CisgICAgICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGxpc3RJdGVt
cyA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSktPmxpc3RJ
dGVtcygpOwogICAgICAgICBpbnQgc2l6ZSA9IG51bUl0ZW1zKCk7CiAgICAgICAgIAogICAgICAg
ICBmbG9hdCB3aWR0aCA9IDA7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7Ci0gICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tpXTsKKyAg
ICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbaV07CiAgICAgICAgICAgICBT
dHJpbmcgdGV4dDsKICAgICAgICAgICAgIEZvbnQgaXRlbUZvbnQgPSBzdHlsZSgpLT5mb250KCk7
CiAgICAgICAgICAgICBpZiAoT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9u
RWxlbWVudChlbGVtZW50KSkKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6
OmxheW91dCgpCiAKIHZvaWQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsVG9SZXZlYWxTZWxlY3Rpb24o
KQogeyAgICAKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRN
TFNlbGVjdEVsZW1lbnQqPihub2RlKCkpOworICAgIFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRv
U2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7CiAKICAgICBtX3Nj
cm9sbFRvUmV2ZWFsU2VsZWN0aW9uQWZ0ZXJMYXlvdXQgPSBmYWxzZTsKIApAQCAtMTk3LDcgKzE5
Nyw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6Y2FsY1ByZWZXaWR0aHMoKQogCiBpbnQgUmVuZGVy
TGlzdEJveDo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgaW50IHNwZWNpZmllZFNpemUgPSBzdGF0aWNf
Y2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KG5vZGUoKSktPnNpemUoKTsKKyAgICBpbnQgc3BlY2lm
aWVkU2l6ZSA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSkt
PnNpemUoKTsKICAgICBpZiAoc3BlY2lmaWVkU2l6ZSA+IDEpCiAgICAgICAgIHJldHVybiBtYXgo
bWluU2l6ZSwgc3BlY2lmaWVkU2l6ZSk7CiAgICAgcmV0dXJuIG1pbihtYXgobWluU2l6ZSwgbnVt
SXRlbXMoKSksIG1heERlZmF1bHRTaXplKTsKQEAgLTIxMSw3ICsyMTEsNyBAQCBpbnQgUmVuZGVy
TGlzdEJveDo6bnVtVmlzaWJsZUl0ZW1zKCkgY29uCiAKIGludCBSZW5kZXJMaXN0Qm94OjpudW1J
dGVtcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50
Kj4obm9kZSgpKS0+bGlzdEl0ZW1zKCkuc2l6ZSgpOworICAgIHJldHVybiB0b1NlbGVjdEVsZW1l
bnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpLT5saXN0SXRlbXMoKS5zaXplKCk7CiB9
CiAKIGludCBSZW5kZXJMaXN0Qm94OjpsaXN0SGVpZ2h0KCkgY29uc3QKQEAgLTI5Myw5ICsyOTMs
OSBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50U2Nyb2xsYmFyKFBhaW50CiAKIHZvaWQgUmVu
ZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZChQYWludEluZm8mIHBhaW50SW5mbywgaW50
IHR4LCBpbnQgdHksIGludCBsaXN0SW5kZXgpCiB7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNl
bGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBjb25z
dCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0LT5saXN0SXRlbXMoKTsK
LSAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOworICAgIFNl
bGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obm9kZSgpKSk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2Vs
ZWN0LT5saXN0SXRlbXMoKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJ
bmRleF07CiAgICAgT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVu
dChlbGVtZW50KTsKIAogICAgIFN0cmluZyBpdGVtVGV4dDsKQEAgLTM0Miw5ICszNDIsOSBAQCB2
b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQoCiAKIHZvaWQgUmVuZGVyTGlz
dEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBp
bnQgdHksIGludCBsaXN0SW5kZXgpCiB7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9
IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBjb25zdCBWZWN0
b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0LT5saXN0SXRlbXMoKTsKLSAgICBI
VE1MRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOworICAgIFNlbGVjdEVs
ZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9k
ZSgpKSk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0LT5s
aXN0SXRlbXMoKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRleF07
CiAgICAgT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChlbGVt
ZW50KTsKIAogICAgIENvbG9yIGJhY2tDb2xvcjsKQEAgLTQzOCw3ICs0MzgsNyBAQCB2b2lkIFJl
bmRlckxpc3RCb3g6OnBhblNjcm9sbChjb25zdCBJbnRQCiAgICAgICAgIHJldHVybjsKIAogICAg
IG1faW5BdXRvc2Nyb2xsID0gdHJ1ZTsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0g
c3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpOworICAgIFNlbGVjdEVsZW1l
bnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgp
KSk7CiAgICAgc2VsZWN0LT51cGRhdGVMaXN0Qm94U2VsZWN0aW9uKCFzZWxlY3QtPm11bHRpcGxl
KCkpOwogICAgIG1faW5BdXRvc2Nyb2xsID0gZmFsc2U7CiB9CkBAIC00NjgsNyArNDY4LDcgQEAg
dm9pZCBSZW5kZXJMaXN0Qm94OjphdXRvc2Nyb2xsKCkKIAogICAgIGludCBlbmRJbmRleCA9IHNj
cm9sbFRvd2FyZChwb3MpOwogICAgIGlmIChlbmRJbmRleCA+PSAwKSB7Ci0gICAgICAgIEhUTUxT
ZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KG5v
ZGUoKSk7CisgICAgICAgIFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7CiAgICAgICAgIG1faW5BdXRvc2Nyb2xsID0g
dHJ1ZTsKIAogICAgICAgICBpZiAoIXNlbGVjdC0+bXVsdGlwbGUoKSkKQEAgLTQ4Miw3ICs0ODIs
NyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OmF1dG9zY3JvbGwoKQogCiB2b2lkIFJlbmRlckxpc3RC
b3g6OnN0b3BBdXRvc2Nyb2xsKCkKIHsKLSAgICBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVu
dCo+KG5vZGUoKSktPmxpc3RCb3hPbkNoYW5nZSgpOworICAgIHRvU2VsZWN0RWxlbWVudChzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSktPmxpc3RCb3hPbkNoYW5nZSgpOwogfQogCiBib29s
IFJlbmRlckxpc3RCb3g6OnNjcm9sbFRvUmV2ZWFsRWxlbWVudEF0TGlzdEluZGV4KGludCBpbmRl
eCkKQEAgLTUxNSw5ICs1MTUsMTAgQEAgYm9vbCBSZW5kZXJMaXN0Qm94OjpzY3JvbGwoU2Nyb2xs
RGlyZWN0aQogCiB2b2lkIFJlbmRlckxpc3RCb3g6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0
SW5kZXgpCiB7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHN0YXRpY19jYXN0PEhU
TUxTZWxlY3RFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSk7CisgICAgU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9T
ZWxlY3RFbGVtZW50KGVsZW1lbnQpOwogICAgIHNlbGVjdC0+c2V0U2VsZWN0ZWRJbmRleChzZWxl
Y3QtPmxpc3RUb09wdGlvbkluZGV4KGxpc3RJbmRleCkpOwotICAgIHNlbGVjdC0+b25DaGFuZ2Uo
KTsKKyAgICBlbGVtZW50LT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKIH0KIAog
dm9pZCBSZW5kZXJMaXN0Qm94Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikKQEAgLTU4MywxMyAr
NTg0LDEzIEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGkKIHsKICAg
ICBpZiAoIVJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHgsIHksIHR4
LCB0eSwgaGl0VGVzdEFjdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBW
ZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVs
ZW1lbnQqPihub2RlKCkpLT5saXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+
JiBsaXN0SXRlbXMgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUo
KSkpLT5saXN0SXRlbXMoKTsKICAgICBpbnQgc2l6ZSA9IG51bUl0ZW1zKCk7CiAgICAgdHggKz0g
dGhpcy0+eCgpOwogICAgIHR5ICs9IHRoaXMtPnkoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewogICAgICAgICBpZiAoaXRlbUJvdW5kaW5nQm94UmVjdCh0eCwgdHksIGkp
LmNvbnRhaW5zKHgsIHkpKSB7Ci0gICAgICAgICAgICBpZiAoSFRNTEVsZW1lbnQqIG5vZGUgPSBs
aXN0SXRlbXNbaV0pIHsKKyAgICAgICAgICAgIGlmIChFbGVtZW50KiBub2RlID0gbGlzdEl0ZW1z
W2ldKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0LnNldElubmVyTm9kZShub2RlKTsKICAgICAg
ICAgICAgICAgICBpZiAoIXJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSkKICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnNldElubmVyTm9uU2hhcmVkTm9kZShub2RlKTsKSW5kZXg6IHJlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guaAkocmV2aXNpb24gNDQwODgpCisrKyByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIEhUTUxTZWxlY3RFbGVtZW50OwotCiBjbGFzcyBSZW5kZXJMaXN0Qm94IDogcHVibGljIFJl
bmRlckJsb2NrLCBwcml2YXRlIFNjcm9sbGJhckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgUmVuZGVy
TGlzdEJveChIVE1MU2VsZWN0RWxlbWVudCopOworICAgIFJlbmRlckxpc3RCb3goRWxlbWVudCop
OwogICAgIH5SZW5kZXJMaXN0Qm94KCk7CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRl
ck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyTGlzdEJveCI7IH0KSW5kZXg6IHJlbmRlcmlu
Zy9SZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlck1lbnVM
aXN0LmNwcAkocmV2aXNpb24gNDQwODgpCisrKyByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiQ1NTU3R5bGVTZWxl
Y3Rvci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgot
I2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxl
LmgiCiAjaW5jbHVkZSAiT3B0aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIk9wdGlvbkdyb3VwRWxl
bWVudC5oIgpAQCAtMzUsNiArMzQsNyBAQAogI2luY2x1ZGUgIlJlbmRlckJSLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRl
ICJTZWxlY3RFbGVtZW50LmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
c3RkOwpAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKLVJlbmRlck1lbnVMaXN0OjpSZW5kZXJNZW51TGlzdChIVE1MU2Vs
ZWN0RWxlbWVudCogZWxlbWVudCkKK1JlbmRlck1lbnVMaXN0OjpSZW5kZXJNZW51TGlzdChFbGVt
ZW50KiBlbGVtZW50KQogICAgIDogUmVuZGVyRmxleGlibGVCb3goZWxlbWVudCkKICAgICAsIG1f
YnV0dG9uVGV4dCgwKQogICAgICwgbV9pbm5lckJsb2NrKDApCkBAIC02MSwxMiArNjEsNiBAQCBS
ZW5kZXJNZW51TGlzdDo6flJlbmRlck1lbnVMaXN0KCkKICAgICBtX3BvcHVwID0gMDsKIH0KIAot
Ly8gdGhpcyBzdGF0aWMgY2FzdCBpcyBzYWZlIGJlY2F1c2UgUmVuZGVyTWVudUxpc3RzIGFyZSBv
bmx5IGNyZWF0ZWQgZm9yIEhUTUxTZWxlY3RFbGVtZW50cwotSFRNTFNlbGVjdEVsZW1lbnQqIFJl
bmRlck1lbnVMaXN0OjpzZWxlY3RFbGVtZW50KCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpOwotfQotCiB2b2lkIFJlbmRlck1lbnVMaXN0Ojpj
cmVhdGVJbm5lckJsb2NrKCkKIHsKICAgICBpZiAobV9pbm5lckJsb2NrKSB7CkBAIC0xMzQsMTAg
KzEyOCwxMCBAQCB2b2lkIFJlbmRlck1lbnVMaXN0OjpzdHlsZURpZENoYW5nZShTdHlsCiB2b2lk
IFJlbmRlck1lbnVMaXN0Ojp1cGRhdGVPcHRpb25zV2lkdGgoKQogewogICAgIGZsb2F0IG1heE9w
dGlvbldpZHRoID0gMDsKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1z
ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpLT5saXN0SXRlbXMoKTsK
KyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBsaXN0SXRlbXMgPSB0b1NlbGVjdEVsZW1lbnQo
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpLT5saXN0SXRlbXMoKTsKICAgICBpbnQgc2l6
ZSA9IGxpc3RJdGVtcy5zaXplKCk7ICAgIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7Ci0gICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2ldOworICAg
ICAgICBFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2ldOwogICAgICAgICBPcHRpb25FbGVt
ZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGVsZW1lbnQpOwogICAgICAgICBp
ZiAoIW9wdGlvbkVsZW1lbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE3NCwxMyArMTY4
LDEzIEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICBpZiAo
bV9wb3B1cElzVmlzaWJsZSkKICAgICAgICAgbV9wb3B1cC0+dXBkYXRlRnJvbUVsZW1lbnQoKTsK
ICAgICBlbHNlCi0gICAgICAgIHNldFRleHRGcm9tT3B0aW9uKHN0YXRpY19jYXN0PEhUTUxTZWxl
Y3RFbGVtZW50Kj4obm9kZSgpKS0+c2VsZWN0ZWRJbmRleCgpKTsKKyAgICAgICAgc2V0VGV4dEZy
b21PcHRpb24odG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKS0+
c2VsZWN0ZWRJbmRleCgpKTsKIH0KIAogdm9pZCBSZW5kZXJNZW51TGlzdDo6c2V0VGV4dEZyb21P
cHRpb24oaW50IG9wdGlvbkluZGV4KQogewotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3Qg
PSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgY29uc3QgVmVj
dG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNlbGVjdC0+bGlzdEl0ZW1zKCk7CisgICAg
U2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1l
bnQqPihub2RlKCkpKTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBsaXN0SXRlbXMgPSBz
ZWxlY3QtPmxpc3RJdGVtcygpOwogICAgIGludCBzaXplID0gbGlzdEl0ZW1zLnNpemUoKTsKIAog
ICAgIGludCBpID0gc2VsZWN0LT5vcHRpb25Ub0xpc3RJbmRleChvcHRpb25JbmRleCk7CkBAIC0y
ODEsNyArMjc1LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6c2hvd1BvcHVwKCkKICAgICBjcmVh
dGVJbm5lckJsb2NrKCk7CiAgICAgaWYgKCFtX3BvcHVwKQogICAgICAgICBtX3BvcHVwID0gUG9w
dXBNZW51OjpjcmVhdGUodGhpcyk7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHN0
YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBTZWxlY3RFbGVtZW50
KiBzZWxlY3QgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkp
OwogICAgIG1fcG9wdXBJc1Zpc2libGUgPSB0cnVlOwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgdG9w
IGxlZnQgdGFraW5nIHRyYW5zZm9ybXMgaW50byBhY2NvdW50LCBidXQgdXNlCkBAIC0zMDIsMTQg
KzI5NiwxNCBAQCB2b2lkIFJlbmRlck1lbnVMaXN0OjpoaWRlUG9wdXAoKQogCiB2b2lkIFJlbmRl
ck1lbnVMaXN0Ojp2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29sIGZpcmVPbkNo
YW5nZSkKIHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRN
TFNlbGVjdEVsZW1lbnQqPihub2RlKCkpOworICAgIFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRv
U2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7CiAgICAgc2VsZWN0
LT5zZXRTZWxlY3RlZEluZGV4KHNlbGVjdC0+bGlzdFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSwg
dHJ1ZSwgZmlyZU9uQ2hhbmdlKTsKIH0KIAogU3RyaW5nIFJlbmRlck1lbnVMaXN0OjppdGVtVGV4
dCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0CiB7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNl
bGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBIVE1M
RWxlbWVudCogZWxlbWVudCA9IHNlbGVjdC0+bGlzdEl0ZW1zKClbbGlzdEluZGV4XTsKKyAgICBT
ZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG5vZGUoKSkpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzZWxlY3QtPmxpc3RJdGVtcygp
W2xpc3RJbmRleF07CiAgICAgaWYgKE9wdGlvbkdyb3VwRWxlbWVudCogb3B0aW9uR3JvdXBFbGVt
ZW50ID0gdG9PcHRpb25Hcm91cEVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBvcHRp
b25Hcm91cEVsZW1lbnQtPmdyb3VwTGFiZWxUZXh0KCk7CiAgICAgZWxzZSBpZiAoT3B0aW9uRWxl
bWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChlbGVtZW50KSkKQEAgLTMxOSw4
ICszMTMsOCBAQCBTdHJpbmcgUmVuZGVyTWVudUxpc3Q6Oml0ZW1UZXh0KHVuc2lnbmVkCiAKIGJv
b2wgUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25z
dAogewotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2Vs
ZWN0RWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBzZWxlY3Qt
Pmxpc3RJdGVtcygpW2xpc3RJbmRleF07CisgICAgU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9T
ZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKTsKKyAgICBFbGVtZW50
KiBlbGVtZW50ID0gc2VsZWN0LT5saXN0SXRlbXMoKVtsaXN0SW5kZXhdOwogICAgIGlmICghZWxl
bWVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
Ym9vbCBncm91cEVuYWJsZWQgPSB0cnVlOwpAQCAtMzM0LDggKzMyOCw4IEBAIGJvb2wgUmVuZGVy
TWVudUxpc3Q6Oml0ZW1Jc0VuYWJsZWQodW5zaWcKIAogUG9wdXBNZW51U3R5bGUgUmVuZGVyTWVu
dUxpc3Q6Oml0ZW1TdHlsZSh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0CiB7Ci0gICAgSFRNTFNl
bGVjdEVsZW1lbnQqIHNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9k
ZSgpKTsKLSAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHNlbGVjdC0+bGlzdEl0ZW1zKClbbGlz
dEluZGV4XTsKKyAgICBTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b1NlbGVjdEVsZW1lbnQoc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzZWxl
Y3QtPmxpc3RJdGVtcygpW2xpc3RJbmRleF07CiAgICAgCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKSA/IGVsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBlbGVt
ZW50LT5jb21wdXRlZFN0eWxlKCk7CiAgICAgcmV0dXJuIHN0eWxlID8gUG9wdXBNZW51U3R5bGUo
c3R5bGUtPmNvbG9yKCksIGl0ZW1CYWNrZ3JvdW5kQ29sb3IobGlzdEluZGV4KSwgc3R5bGUtPmZv
bnQoKSwgc3R5bGUtPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLCBzdHlsZS0+dGV4dEluZGVudCgp
LCBzdHlsZS0+ZGlyZWN0aW9uKCkpIDogbWVudVN0eWxlKCk7CkBAIC0zNDMsOCArMzM3LDggQEAg
UG9wdXBNZW51U3R5bGUgUmVuZGVyTWVudUxpc3Q6Oml0ZW1TdHlsZQogCiBDb2xvciBSZW5kZXJN
ZW51TGlzdDo6aXRlbUJhY2tncm91bmRDb2xvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0CiB7
Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RF
bGVtZW50Kj4obm9kZSgpKTsKLSAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHNlbGVjdC0+bGlz
dEl0ZW1zKClbbGlzdEluZGV4XTsKKyAgICBTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b1NlbGVj
dEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOworICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBzZWxlY3QtPmxpc3RJdGVtcygpW2xpc3RJbmRleF07CiAKICAgICBDb2xvciBiYWNr
Z3JvdW5kQ29sb3I7CiAgICAgaWYgKGVsZW1lbnQtPnJlbmRlclN0eWxlKCkpCkBAIC00MDcsMzQg
KzQwMSwzNCBAQCBpbnQgUmVuZGVyTWVudUxpc3Q6OmNsaWVudFBhZGRpbmdSaWdodCgpCiAKIGlu
dCBSZW5kZXJNZW51TGlzdDo6bGlzdFNpemUoKSBjb25zdAogewotICAgIEhUTUxTZWxlY3RFbGVt
ZW50KiBzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KG5vZGUoKSk7Cisg
ICAgU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihub2RlKCkpKTsKICAgICByZXR1cm4gc2VsZWN0LT5saXN0SXRlbXMoKS5zaXplKCk7
CiB9CiAKIGludCBSZW5kZXJNZW51TGlzdDo6c2VsZWN0ZWRJbmRleCgpIGNvbnN0CiB7Ci0gICAg
SFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50
Kj4obm9kZSgpKTsKKyAgICBTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b1NlbGVjdEVsZW1lbnQo
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOwogICAgIHJldHVybiBzZWxlY3QtPm9wdGlv
blRvTGlzdEluZGV4KHNlbGVjdC0+c2VsZWN0ZWRJbmRleCgpKTsKIH0KIAogYm9vbCBSZW5kZXJN
ZW51TGlzdDo6aXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKIHsKLSAg
ICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1l
bnQqPihub2RlKCkpOwotICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gc2VsZWN0LT5saXN0SXRl
bXMoKVtsaXN0SW5kZXhdOworICAgIFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxl
bWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7CisgICAgRWxlbWVudCogZWxlbWVu
dCA9IHNlbGVjdC0+bGlzdEl0ZW1zKClbbGlzdEluZGV4XTsKICAgICByZXR1cm4gZWxlbWVudC0+
aGFzVGFnTmFtZShoclRhZyk7CiB9CiAKIGJvb2wgUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc0xhYmVs
KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKIHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2Vs
ZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpOwotICAgIEhUTUxF
bGVtZW50KiBlbGVtZW50ID0gc2VsZWN0LT5saXN0SXRlbXMoKVtsaXN0SW5kZXhdOworICAgIFNl
bGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obm9kZSgpKSk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IHNlbGVjdC0+bGlzdEl0ZW1zKClb
bGlzdEluZGV4XTsKICAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFtZShvcHRncm91cFRhZyk7
CiB9CiAKIGJvb2wgUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkIGxpc3RJ
bmRleCkgY29uc3QKIHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gc3RhdGljX2Nh
c3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpOwotICAgIEhUTUxFbGVtZW50KiBlbGVtZW50
ID0gc2VsZWN0LT5saXN0SXRlbXMoKVtsaXN0SW5kZXhdOworICAgIFNlbGVjdEVsZW1lbnQqIHNl
bGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7Cisg
ICAgRWxlbWVudCogZWxlbWVudCA9IHNlbGVjdC0+bGlzdEl0ZW1zKClbbGlzdEluZGV4XTsKICAg
ICBpZiAoT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChlbGVt
ZW50KSkKICAgICAgICAgcmV0dXJuIG9wdGlvbkVsZW1lbnQtPnNlbGVjdGVkKCk7CiAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNDQyLDcgKzQzNiw3IEBAIGJvb2wgUmVuZGVyTWVudUxpc3Q6Oml0ZW1J
c1NlbGVjdGVkKHVuc2kKIAogdm9pZCBSZW5kZXJNZW51TGlzdDo6c2V0VGV4dEZyb21JdGVtKHVu
c2lnbmVkIGxpc3RJbmRleCkKIHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gc3Rh
dGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpOworICAgIFNlbGVjdEVsZW1lbnQq
IHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7
CiAgICAgc2V0VGV4dEZyb21PcHRpb24oc2VsZWN0LT5saXN0VG9PcHRpb25JbmRleChsaXN0SW5k
ZXgpKTsKIH0KIApJbmRleDogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgJKHJldmlzaW9uIDQ0MDg4KQorKysgcmVuZGVy
aW5nL1JlbmRlck1lbnVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE2ICszNCwxMyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxTZWxlY3RFbGVtZW50OwogY2xhc3Mg
UG9wdXBNZW51OwogY2xhc3MgUmVuZGVyVGV4dDsKIAogY2xhc3MgUmVuZGVyTWVudUxpc3QgOiBw
dWJsaWMgUmVuZGVyRmxleGlibGVCb3gsIHByaXZhdGUgUG9wdXBNZW51Q2xpZW50IHsKIHB1Ymxp
YzoKLSAgICBSZW5kZXJNZW51TGlzdChIVE1MU2VsZWN0RWxlbWVudCopOworICAgIFJlbmRlck1l
bnVMaXN0KEVsZW1lbnQqKTsKICAgICB+UmVuZGVyTWVudUxpc3QoKTsKLSAgICAKLSAgICBIVE1M
U2VsZWN0RWxlbWVudCogc2VsZWN0RWxlbWVudCgpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwg
Ym9vbCBpc01lbnVMaXN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogcmVuZGVyaW5n
L1JlbmRlclNsaWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclNsaWRlci5j
cHAJKHJldmlzaW9uIDQ0MDg4KQorKysgcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwOCw3ICs0MDgsNyBAQCB2b2lkIFJlbmRlclNsaWRlcjo6c2V0VmFsdWVG
b3JQb3NpdGlvbihpCiAKICAgICAgICAgLy8gRklYTUU6IEl0IHNlZW1zIGxpa2UgdGhpcyBjb3Vs
ZCBzZW5kIGV4dHJhIGNoYW5nZSBldmVudHMgaWYgdGhlIHNhbWUgdmFsdWUgaXMgc2V0CiAgICAg
ICAgIC8vIG11bHRpcGxlIHRpbWVzIHdpdGggbm8gbGF5b3V0IGluIGJldHdlZW4uCi0gICAgICAg
IGVsZW1lbnQtPm9uQ2hhbmdlKCk7CisgICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRm9ybUNvbnRy
b2xDaGFuZ2VFdmVudCgpOwogICAgIH0KIH0KIApJbmRleDogd21sL1dNTEZvcm1Db250cm9sRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDQ0MDg4KQorKysgd21sL1dNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDYgKzM5LDExIEBAIFdNTEZvcm1Db250cm9sRWxlbWVudDo6fldNTEZvcm1D
b250cm9sRWwKIHsKIH0KIAordm9pZCBXTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoRm9y
bUNvbnRyb2xDaGFuZ2VFdmVudCgpCit7CisgICAgLy8gbm8tb3AKK30KKwogYm9vbCBXTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVy
KCkgfHwgIXJlbmRlcmVyKCktPmlzQm94KCkpCkluZGV4OiB3bWwvV01MRm9ybUNvbnRyb2xFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTEZvcm1Db250cm9sRWxlbWVudC5oCShyZXZpc2lv
biA0NDA4OCkKKysrIHdtbC9XTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNiArMzgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGZvcm1Db250cm9sVmFs
dWVNYXRjaGVzUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVy
OyB9CiAgICAgdmlydHVhbCB2b2lkIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIo
Ym9vbCBiID0gdHJ1ZSkgeyBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyID0gYjsgfQogCisgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwogICAgIHZpcnR1YWwg
Ym9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwogCiBwcml2YXRlOgo=
</data>
<flag name="review"
          id="15491"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>