<?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>31032</bug_id>
          
          <creation_ts>2009-11-02 14:09:49 -0800</creation_ts>
          <short_desc>&quot;ignoreAutoFocus&quot; flag is never set</short_desc>
          <delta_ts>2012-07-31 14:16:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc>http://www.whatwg.org/specs/web-apps/current-work/#autofocusing-a-form-control</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>18887</dependson>
          <blocked>19264</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michelangelo De Simone">michelangelo</reporter>
          <assigned_to name="Michelangelo De Simone">michelangelo</assigned_to>
          <cc>adele</cc>
    
    <cc>darin</cc>
    
    <cc>ian</cc>
    
    <cc>ojan</cc>
    
    <cc>rik</cc>
    
    <cc>webmaster</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>159918</commentid>
    <comment_count>0</comment_count>
    <who name="Michelangelo De Simone">michelangelo</who>
    <bug_when>2009-11-02 14:09:49 -0800</bug_when>
    <thetext>Autofocus should not be respected if user set focus on his own while page is still loading.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161692</commentid>
    <comment_count>1</comment_count>
    <who name="Michelangelo De Simone">michelangelo</who>
    <bug_when>2009-11-09 12:04:47 -0800</bug_when>
    <thetext>A patch to address this bug as well as 24092 and 24093 is underway. CC&apos;ing Darin, Adele and Anthony to keep them posted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163668</commentid>
    <comment_count>2</comment_count>
      <attachid>43227</attachid>
    <who name="Michelangelo De Simone">michelangelo</who>
    <bug_when>2009-11-14 10:26:33 -0800</bug_when>
    <thetext>Created attachment 43227
Proposed patch, v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163669</commentid>
    <comment_count>3</comment_count>
      <attachid>43228</attachid>
    <who name="Michelangelo De Simone">michelangelo</who>
    <bug_when>2009-11-14 10:33:08 -0800</bug_when>
    <thetext>Created attachment 43228
Proposed patch, v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163670</commentid>
    <comment_count>4</comment_count>
      <attachid>43229</attachid>
    <who name="Michelangelo De Simone">michelangelo</who>
    <bug_when>2009-11-14 10:33:16 -0800</bug_when>
    <thetext>Created attachment 43229
Proposed patch, v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163671</commentid>
    <comment_count>5</comment_count>
      <attachid>43230</attachid>
    <who name="Michelangelo De Simone">michelangelo</who>
    <bug_when>2009-11-14 10:40:54 -0800</bug_when>
    <thetext>Created attachment 43230
Proposed patch, v1... again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163675</commentid>
    <comment_count>6</comment_count>
      <attachid>43230</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-14 11:55:49 -0800</bug_when>
    <thetext>Comment on attachment 43230
Proposed patch, v1... again

There&apos;s a tab in that change log.

&gt; +        * fast/forms/script-tests/autofocus.js: Added.
&gt; +        (autofocus_element.onfocus):
&gt; +        ():

Please remove text like this. I don&apos;t see the point of having &quot;():&quot; in our change log.

The test coverage here seems much too light.

Setting a JavaScript property on an element and then checking that the value is stored in the object doesn&apos;t really test much at all. It would work even if there was no autofocus support in the engine, because you can set and get arbitrary JavaScript properties on any element.

Here are things the tests should probably cover, in many cases repeated for each type of element that can be autofocused:

    1) Does setting the JavaScript property on the element cause the attribute to be set? Test different values. What do values other than true and false do? Such as null and the string &quot;false&quot;.

    2) Does setting the attribute on the element cause the JavaScript property to have the correct value? Test unusual values such as &quot;false&quot; and &quot;no&quot;.

    3) What does autofocus do when nothing is focused? What about when the document is focused? (Are those even really separate states?) What about when an &lt;a&gt; element is focused?

    4) What is the timing of autofocus? Is implicitClose the right time? I&apos;d like to see tests that cover the last thing that happens before the focus and the first thing after to make it clear what the timing is. In cases with an explicit calls to close() and in others cases where the close time is determined differently. Especially concentrating on timing relative to the &quot;load&quot; event.
    
    5) Tests at least one case where autofocus is set with markup rather than by setAttribute or setting a JavaScript property. Check to be sure it&apos;s case sensitive when appropriate, and not when it should not be.

    6) What happens when multiple elements request autofocus? Which one wins? To write the test you need to know what the design is. Which one is supposed to win? Does the order in which the renderers are created effect this? To force renderers to be created before they normally would you can call functions like &quot;offsetLeft&quot; on some element in the document. Those functions force layout at the time they are called.
    
    7) Does having an autofocus in a subframe result in more than one focused element? Can autofocus in a frame take focus away from another frame? Should it, or is that a bug?

The name autofocusedFormControlElement is too long. Instead I&apos;d suggest autofocusedControl. It can still have HTMLFormControlElement as its type. But also, I think it&apos;s a little strange to call it &quot;autofocused&quot; if it&apos;s not autofocused. I think that in plain speech we would say that this is the element that &quot;requests autofocus&quot; or &quot;has the autofocus attribute set&quot;, so we probably need some other term than &quot;autofocused&quot;, which seems to mean that it&apos;s already successfully gotten focus. So maybe controlRequestingAutofocus would be good? Or maybe there&apos;s some even better name.

&gt; +    if (autofocusedFormControlElement()) {
&gt; +        Node* n = focusedNode();
&gt; +        if (!n)
&gt; +            autofocusedFormControlElement()-&gt;focus();
&gt; +        else if (n-&gt;isElementNode()) {
&gt; +            Element* e = static_cast&lt;Element*&gt;(n);
&gt; +            if (!e-&gt;isFormControlElement())
&gt; +                autofocusedFormControlElement()-&gt;focus();
&gt; +        }
&gt; +    }

The above could be written more simply and clearly. One of the best ways would be to make a helper function. Here&apos;s one that exactly matches your logic:

    static bool nodePreventsAutofocus(Node* node)
    {
        return node &amp;&amp; (!node-&gt;isElementNode()
            || static_cast&lt;Element*&gt;(focusedNode)-&gt;isFormControlElement());
    }

Here&apos;s logic that makes more sense to me.

    static bool nodePreventsAutofocus(Node* node)
    {
        return node &amp;&amp; node-&gt;isElementNode()
            &amp;&amp; static_cast&lt;Element*&gt;(focusedNode)-&gt;isFormControlElement();
    }

I believe node can be the document itself and that&apos;s the only non-Element value it can have, and I&apos;d like to understand why document having focus would prevent auto-focus. I&apos;d also like to understand why autofocus should take effect if a non-form-element is focused? Is that correct?

The above function could alternatively be a private member function that considers m_focusedNode instead of taking a node argument.

The code at the call site would then be:

    if (m_controlRequestingAutofocus &amp;&amp; !nodePreventsAutofocus(m_focusedNode.get()())
        m_controlRequestingAutofocus-&gt;focus();

I think the above structure makes it easier to understand what the code does.

&gt; +    virtual bool isAutofocusableFormControlElement() const { return false; }

This should be named isAutofocusable. And the patch uses this function only on HTMLFormControlElement. I suggest adding it there rather than adding it to Element.

&gt; +    if (autofocus() &amp;&amp; !disabled() &amp;&amp; isAutofocusableFormControlElement())
&gt; +        document()-&gt;setAutofocusedFormControlElement(this);

Doing this in the attach function implements a &quot;last one wins&quot; policy which is probably wrong. If you add a new element to the document, whether it becomes the element that gets focused depends on the order that renderers are created. So adding first one element, then triggering layout to create renderers, then adding another later in the document, gives a different autofocus target than if had added both elements before renderers were created.

This needs to be fixed. You have to figure out the rule for which element wins if two both specify autofocus, and then implement that rule.

And we need test cases that cover this.

&gt;  bool HTMLFormControlElement::autofocus() const
&gt;  {
&gt; -    return hasAttribute(autofocusAttr);
&gt; +    return m_autofocus;
&gt;  }

Why do we need to store an m_autofocus bit? It seems better to not store it as a bit and just get the attribute each time. What are we optimizing by storing it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163676</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-14 11:58:45 -0800</bug_when>
    <thetext>Another important test case is to put an element in the document, make it the one that should be autofocused, then force renderers to be created (or whatever triggers setting the document&apos;s pointer to the node), then remove the node.

Does the engine incorrectly try to focus the node that is now no longer in the document in that case? With the current code I believe it would, because nothing ever clears the node from the document data member.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163742</commentid>
    <comment_count>8</comment_count>
    <who name="Michelangelo De Simone">michelangelo</who>
    <bug_when>2009-11-15 05:37:58 -0800</bug_when>
    <thetext>A quick recap about how &quot;autofocus&quot; should behave: when specified this attribute should trigger focus on the desired element once the page is loaded, so user has just to type what he needs to.

[Multiple elements with autofocus = true]
On 4.10.15.4 specs determine that &quot;there must not be more than one element in the document with the autofocus attribute specified&quot;, leaving no predetermined behavior in case there&apos;re multiple form controls with autofocus set to true.
In my implementation focus is fired on &quot;attachment order&quot;: the last attached form control element &quot;wins&quot; its focus. 

[Ignoring autofocus]
Relevant text in 4.10.15.4 is: &quot;User agents may ignore this attribute if the user has indicated (for example, by starting to type in a form control) that he does not wish focus to be changed&quot;.
In my implementation autofocus is ignored if there&apos;s another focused FormControlElement.

(In reply to comment #6)
&gt; &gt; +        * fast/forms/script-tests/autofocus.js: Added.
&gt; &gt; +        (autofocus_element.onfocus):
&gt; &gt; +        ():
&gt; Please remove text like this. I don&apos;t see the point of having &quot;():&quot; in our
&gt; change log.

Sure.

[Test]
&gt;     3) What does autofocus do when nothing is focused? What about when the
&gt; document is focused? (Are those even really separate states?) What about when
&gt; an &lt;a&gt; element is focused?

That should not be our concern, according to specs. We&apos;re supposed to be dealing only with cases when user has clearly stated his intention of &quot;using another form control&quot; (eg: typing into a textbox).

&gt;     4) What is the timing of autofocus? Is implicitClose the right time? I&apos;d
&gt; like to see tests that cover the last thing that happens before the focus and
&gt; the first thing after to make it clear what the timing is. In cases with an
&gt; explicit calls to close() and in others cases where the close time is
&gt; determined differently. Especially concentrating on timing relative to the
&gt; &quot;load&quot; event.

I&apos;d particularly like your opinion here. Do you think that would be wiser to trigger focus on autofocus elements in a separate &quot;load&quot; callback?

&gt;     6) What happens when multiple elements request autofocus? Which one wins?
&gt; To write the test you need to know what the design is. Which one is supposed to
&gt; win? Does the order in which the renderers are created effect this? To force

This is nice: it&apos;s not strictly predictable according to specs.:-)

&gt;     7) Does having an autofocus in a subframe result in more than one focused
&gt; element? Can autofocus in a frame take focus away from another frame? Should
&gt; it, or is that a bug?

Noted...

&gt; successfully gotten focus. So maybe controlRequestingAutofocus would be good?

Ok.

&gt; Here&apos;s logic that makes more sense to me.

Ok.

&gt; I&apos;d also like to understand why autofocus should take effect if a
&gt; non-form-element is focused? Is that correct?

Yes, it &quot;should be&quot; correct: specs only state that autofocus &quot;may be&quot; ignored if user has indicated that focus should not be changed (typing in a control...). 

&gt; The above function could alternatively be a private member function that
&gt; considers m_focusedNode instead of taking a node argument.

Ok.

&gt; This should be named isAutofocusable. And the patch uses this function only on
&gt; HTMLFormControlElement. I suggest adding it there rather than adding it to
&gt; Element.

Agreed on the name issue, however decision to implement it in Element is due to HTMLDataGridElement, which is not a FormControlElement and seems to be needing autofocus facilities.

NOTE: DataGrid&apos;s autofocus will be issued separately once this is fixed.

&gt; &gt; +    if (autofocus() &amp;&amp; !disabled() &amp;&amp; isAutofocusableFormControlElement())
&gt; &gt; +        document()-&gt;setAutofocusedFormControlElement(this);
&gt; Doing this in the attach function implements a &quot;last one wins&quot; policy which is
&gt; probably wrong. If you add a new element to the document, whether it becomes
&gt; the element that gets focused depends on the order that renderers are created.
&gt; So adding first one element, then triggering layout to create renderers, then
&gt; adding another later in the document, gives a different autofocus target than
&gt; if had added both elements before renderers were created.

If I implement this in a different fashion (in a &quot;load&quot; callback) we would be sure to focus only the &quot;last&quot; (real) element to be attached because all renderers would already be doing their job. Is that correct?

Thank you for your invaluable feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163778</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-15 14:59:58 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt;     3) What does autofocus do when nothing is focused? What about when the
&gt; &gt; document is focused? (Are those even really separate states?) What about when
&gt; &gt; an &lt;a&gt; element is focused?
&gt; 
&gt; That should not be our concern, according to specs. We&apos;re supposed to be
&gt; dealing only with cases when user has clearly stated his intention of &quot;using
&gt; another form control&quot; (eg: typing into a textbox).

You say &quot;should not be our concern&quot;, but I don&apos;t understand. Either it behaves one way, or the other. For example, you can use the Tab or Option-Tab key to focus a link. And you might do that while the page is loading before the autofocus behavior triggers. The code you posted doens&apos;t seem to handle that case correctly.

&gt; &gt;     4) What is the timing of autofocus? Is implicitClose the right time? I&apos;d
&gt; &gt; like to see tests that cover the last thing that happens before the focus and
&gt; &gt; the first thing after to make it clear what the timing is. In cases with an
&gt; &gt; explicit calls to close() and in others cases where the close time is
&gt; &gt; determined differently. Especially concentrating on timing relative to the
&gt; &gt; &quot;load&quot; event.
&gt; 
&gt; I&apos;d particularly like your opinion here. Do you think that would be wiser to
&gt; trigger focus on autofocus elements in a separate &quot;load&quot; callback?

My opinion is that we should specify this in the HTML5 specification and match it, and other browsers. If I was designing this I would suggest starting with the notion that the element gets focus soon as it is inserted into the document, but I am not sure that rule would work. We need to be consistent.


&gt; &gt;     6) What happens when multiple elements request autofocus? Which one wins?
&gt; &gt; To write the test you need to know what the design is. Which one is supposed to
&gt; &gt; win? Does the order in which the renderers are created effect this? To force
&gt; 
&gt; This is nice: it&apos;s not strictly predictable according to specs.:-)

That seems like a problem. Lets get it that fixed.

&gt; &gt; I&apos;d also like to understand why autofocus should take effect if a
&gt; &gt; non-form-element is focused? Is that correct?
&gt; 
&gt; Yes, it &quot;should be&quot; correct: specs only state that autofocus &quot;may be&quot; ignored
&gt; if user has indicated that focus should not be changed (typing in a
&gt; control...). 

OK. Then I think there needs to be code that treats the user&apos;s change of focus different from programmatic changes of focus. I also think that user changes of focus at the application level might have to be considered too. For example, in Safari if I changed the focus from the page to the Google search field, the page shouldn&apos;t grab the focus back.

&gt; &gt; &gt; +    if (autofocus() &amp;&amp; !disabled() &amp;&amp; isAutofocusableFormControlElement())
&gt; &gt; &gt; +        document()-&gt;setAutofocusedFormControlElement(this);
&gt; &gt; Doing this in the attach function implements a &quot;last one wins&quot; policy which is
&gt; &gt; probably wrong. If you add a new element to the document, whether it becomes
&gt; &gt; the element that gets focused depends on the order that renderers are created.
&gt; &gt; So adding first one element, then triggering layout to create renderers, then
&gt; &gt; adding another later in the document, gives a different autofocus target than
&gt; &gt; if had added both elements before renderers were created.
&gt; 
&gt; If I implement this in a different fashion (in a &quot;load&quot; callback) we would be
&gt; sure to focus only the &quot;last&quot; (real) element to be attached because all
&gt; renderers would already be doing their job. Is that correct?

Possibly. But &quot;last to be attached&quot; is still not a good rule. Layouts can change what &quot;last to be attached&quot; is as a side effect. For example, if a new node is inserted earlier in the document it might be the first to be attached if the layout is done after it&apos;s added, but the last to be attached if the layout was done before.

Order of call to &quot;attach&quot; seems like it&apos;s guaranteed to be a bad way to do this. First we need to understand what rule we are implementing and then we can discuss efficient ways to implement the rule. For example, getElementById implements a &quot;first element in document order with a certain ID&quot; algorithm in a way that is efficient in all normal cases, but can also handle more unusual cases correctly. It might be sufficient to just have a bit to say &quot;there might be an element with autofocus in the document&quot; and then walk the entire document when the bit is set. A single pass over the entire document is probably not too slow. Or we could do that only in cases where there might be more than one autofocus element in the entire document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189910</commentid>
    <comment_count>10</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2010-02-11 20:18:51 -0800</bug_when>
    <thetext>The spec says:

====8&lt;====
Whenever an element with the autofocus attribute specified is inserted into a document, the user agent should queue a task that checks to see if the element is focusable, and if so, runs the focusing steps for that element. User agents may also change the scrolling position of the document, or perform some other action that brings the element to the user&apos;s attention. The task source for this task is the DOM manipulation task source.

User agents may ignore this attribute if the user has indicated (for example, by starting to type in a form control) that he does not wish focus to be changed.
====8&lt;====

This doesn&apos;t seem ambiguous.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592408</commentid>
    <comment_count>11</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-03-30 12:40:48 -0700</bug_when>
    <thetext>I don&apos;t think we should do this. There are good use-cases that this would kill. For example, for a long-lived page like gmail, they may want to autofocus an input (e.g. the subject field) when you go to compose a new email. Surely we wouldn&apos;t want this to work only the first time around. Making them use script seems unnecessary.

The spec makes doing this optional. I think we should only make this change if we can point to at least a couple (real) sites where the current behavior leads to a bad user-experience.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43227</attachid>
            <date>2009-11-14 10:26:33 -0800</date>
            <delta_ts>2009-11-14 10:33:00 -0800</delta_ts>
            <desc>Proposed patch, v1</desc>
            <filename>bug-31032-20091114192629.patch</filename>
            <type>text/plain</type>
            <size>28594</size>
            <attacher name="Michelangelo De Simone">michelangelo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLWF0dHJpYnV0ZS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1hdHRyaWJ1dGUt
ZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmQ2ZmM0Li4wMDAw
MDAwCi0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLWF0dHJpYnV0ZS1leHBl
Y3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLVRoaXMgdGVzdCBjaGVja3Mg
Zm9yIHRoZSBhdXRvZm9jdXMgYXR0cmlidXRlLiBBdXRvZm9jdXMgaXMgc2V0IG9uIHRoZSBmaXJz
dCBhbmQgb24gdGhlIHRoaXJkIGlucHV0LiBTdWNjZXNzIG9uICJZRVMgTk8gWUVTIi4KLQotICAK
LVlFUwotTk8KLVlFUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9j
dXMtYXR0cmlidXRlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1hdHRy
aWJ1dGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRhYjZmYS4uMDAwMDAw
MAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1hdHRyaWJ1dGUuaHRtbAor
KysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+YXV0
b2ZvY3VzIGF0dHJpYnV0ZSB0ZXN0PC90aXRsZT4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3Jp
cHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gICAgZnVuY3Rpb24gbG9nKG1lc3NhZ2UpIHsK
LSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lckhUTUwgKz0g
IjxsaT4iK21lc3NhZ2UrIjwvbGk+IjsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB0ZXN0KCkgewot
ICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAgICAgCi0gICAgICAgIHZhciBhID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7Ci0gICAgICAgIGZvciAoaSA9
IDA7IGkgPCBhLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgYS5pdGVtKGkpLmF1dG9mb2N1cyA/
IGxvZygiWUVTIikgOiBsb2coIk5PIik7Ci0gICAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9k
eSBvbmxvYWQ9InRlc3QoKSI+Ci08cD5UaGlzIHRlc3QgY2hlY2tzIGZvciB0aGUgYXV0b2ZvY3Vz
IGF0dHJpYnV0ZS4gQXV0b2ZvY3VzIGlzIHNldCBvbiB0aGUgZmlyc3QKLWFuZCBvbiB0aGUgdGhp
cmQgaW5wdXQuIFN1Y2Nlc3Mgb24gIllFUyBOTyBZRVMiLjwvcD4KLTxpbnB1dCBhdXRvZm9jdXMg
aWQ9Im9uZSIvPgotPGlucHV0Lz4KLTxpbnB1dCBhdXRvZm9jdXMvPgotPGhyPgotPG9sIGlkPSJj
b25zb2xlIj48L29sPgotPC9ib2R5PgotPC9odG1sPgotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zv
cm1zL2F1dG9mb2N1cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZmU1ZmM5NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMv
YXV0b2ZvY3VzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACitUZXN0cyB0aGF0IGF1dG9m
b2N1cyBhdHRyaWJ1dGUgZXhpc3RzOiBhdXRvZm9jdXNfZWxlbWVudCBzaG91bGQgYmUgYXV0b2Zv
Y3VzZWQKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgaW5wdXQuYXV0b2Zv
Y3VzIGlzIGZhbHNlCitQQVNTIGlucHV0LmF1dG9mb2N1cyBpcyB0cnVlCitQQVNTIHRleHRhcmVh
LmF1dG9mb2N1cyBpcyBmYWxzZQorUEFTUyB0ZXh0YXJlYS5hdXRvZm9jdXMgaXMgdHJ1ZQorUEFT
UyBidXR0b24uYXV0b2ZvY3VzIGlzIGZhbHNlCitQQVNTIGJ1dHRvbi5hdXRvZm9jdXMgaXMgdHJ1
ZQorUEFTUyBzZWxlY3QuYXV0b2ZvY3VzIGlzIGZhbHNlCitQQVNTIHNlbGVjdC5hdXRvZm9jdXMg
aXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLWlnbm9yZS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1pZ25vcmUtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MDk1OGQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1pZ25vcmUt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3RzIHRoYXQgYXV0b2ZvY3VzIGlzIGln
bm9yZWQgaWYgdGhlcmUgYXJlIG90aGVyIGFjdGl2ZSBjb250cm9scy4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpcyBnb29kCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtaWdub3JlLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1pZ25vcmUuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi41NTljMmYxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtaWdub3JlLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2Ny
aXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3Jp
cHQtdGVzdHMvYXV0b2ZvY3VzLWlnbm9yZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9w
ZXJhLTAwMS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1v
cGVyYS0wMDEtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjM1
MTMzLi4wMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJh
LTAwMS1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLVRoaXMgZm9y
bSBjb250cm9sIHNob3VsZCBoYXZlIGEgZ3JlZW4gYmFja2dyb3VuZCBhbmQgYWN0aXZlIHN0YXRl
OiAKLQotU1VDQ0VTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9j
dXMtb3BlcmEtMDAxLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVy
YS0wMDEuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg0OTdjNy4uMDAwMDAw
MAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0wMDEuaHRtbAor
KysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+YmFz
aWMgImF1dG9mb2N1cyIgdGVzdDwvdGl0bGU+Ci08c3R5bGU+Ci0gaW5wdXQgeyBiYWNrZ3JvdW5k
OnJlZCB9Ci0gaW5wdXQ6Zm9jdXMgeyBiYWNrZ3JvdW5kOmxpbWUgfQotPC9zdHlsZT4KLTxzY3Jp
cHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gICAgZnVu
Y3Rpb24gbG9nKG1lc3NhZ2UpIHsKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNv
bnNvbGUiKS5pbm5lckhUTUwgKz0gIjxsaT4iK21lc3NhZ2UrIjwvbGk+IjsKLSAgICB9Ci0KLSAg
ICBmdW5jdGlvbiB0ZXN0KCkgewotICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQotICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAg
ICAgICAgICAgCi0gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdKQotICAgICAgICAgICAgbG9nKCJTVUND
RVNTIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvZygiRkFJTFVSRSIpOwotICAgIH0K
LTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgotPHA+VGhpcyBmb3Jt
IGNvbnRyb2wgc2hvdWxkIGhhdmUgYSBncmVlbiBiYWNrZ3JvdW5kIGFuZCBhY3RpdmUgc3RhdGU6
IDxpbnB1dCBhdXRvZm9jdXM+Ci08aHI+Ci08b2wgaWQ9ImNvbnNvbGUiPjwvb2w+Ci08L2JvZHk+
Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDAyLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwMi1leHBlY3RlZC50eHQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NGE1NDguLjAwMDAwMDAKLS0tIGEvTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDAyLWV4cGVjdGVkLnR4dAorKysgL2Rldi9u
dWxsCkBAIC0xLDMgKzAsMCBAQAotVGhpcyBmb3JtIGNvbnRyb2wgc2hvdWxkIGhhdmUgYSBncmVl
biBiYWNrZ3JvdW5kOiAKLQotU1VDQ0VTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9m
b3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDAyLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1
dG9mb2N1cy1vcGVyYS0wMDIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNj
NjAwZi4uMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVy
YS0wMDIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTxodG1sPgotPGhlYWQ+
Ci08dGl0bGU+ZHluYW1pY2FsbHkgaW5zZXJ0ZWQgY29udHJvbCB3aXRoICJhdXRvZm9jdXMiIHNl
dDwvdGl0bGU+Ci08c3R5bGU+Ci0gaW5wdXQgeyBiYWNrZ3JvdW5kOnJlZCB9Ci0gaW5wdXQ6Zm9j
dXMgeyBiYWNrZ3JvdW5kOmxpbWUgfQotPC9zdHlsZT4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFT
Y3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gICAgZnVuY3Rpb24gbG9nKG1lc3NhZ2Up
IHsKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lckhUTUwg
Kz0gIjxsaT4iK21lc3NhZ2UrIjwvbGk+IjsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB0ZXN0KCkg
ewotICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAgICAgICAgICAgCi0gICAgICAg
IGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCJpbnB1dCIpWzBdKQotICAgICAgICAgICAgbG9nKCJTVUNDRVNTIik7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGxvZygiRkFJTFVSRSIpOwotICAgIH0KLTwvc2NyaXB0PgotPC9oZWFk
PgotPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgotPHA+RkFJTCAoVGhlIHNjcmlwdCBkaWQgbm90IHJ1
bi4pPC9wPgotPHNjcmlwdD4KLSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgncCcpWzBd
LmlubmVySFRNTCA9ICJUaGlzIGZvcm0gY29udHJvbCBzaG91bGQgaGF2ZSBhIGdyZWVuIGJhY2tn
cm91bmQ6IDxpbnB1dCBhdXRvZm9jdXM+IjsKLTwvc2NyaXB0PgotPGhyPgotPG9sIGlkPSJjb25z
b2xlIj48L29sPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwMy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0wMDMt
ZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzQyMmYxLi4wMDAw
MDAwCi0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwMy1leHBl
Y3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLVRoaXMgZm9ybSBjb250cm9s
IHNob3VsZCBoYXZlIGEgZ3JlZW4gYmFja2dyb3VuZDogCi1TVUNDRVNTCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0wMDMuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwMy5odG1sCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA3YmEyNTlhLi4wMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZm9y
bXMvYXV0b2ZvY3VzLW9wZXJhLTAwMy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBA
QAotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT4iYXV0b2ZvY3VzIiBzY3JvbGxpbmcgdGVzdDwvdGl0
bGU+Ci08c3R5bGU+Ci0gcCN0ZXN0eyBwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjE1MCUgfQotIGlu
cHV0IHsgYmFja2dyb3VuZDpyZWQgfQotIGlucHV0OmZvY3VzIHsgYmFja2dyb3VuZDpsaW1lIH0K
LTwvc3R5bGU+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiPgotICAgIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKSB7Ci0gICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5uZXJIVE1MICs9ICI8bGk+IittZXNzYWdlKyI8L2xp
PiI7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gdGVzdCgpIHsKLSAgICAgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKLQotICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBkb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXSAmJgotICAgICAgICAgICAgZG9j
dW1lbnQuYm9keS5zY3JvbGxUb3AgIT0gMCkKLSAgICAgICAgICAgIGxvZygiU1VDQ0VTUyIpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb2coIkZBSUxVUkUiKTsKLSAgICB9Ci08L3Njcmlw
dD4KLTwvaGVhZD4KLTxib2R5IG9ubG9hZD0idGVzdCgpIj4KLTxwIGlkPSJ0ZXN0Ij5UaGlzIGZv
cm0gY29udHJvbCBzaG91bGQgaGF2ZSBhIGdyZWVuIGJhY2tncm91bmQ6IDxpbnB1dCBhdXRvZm9j
dXM+Ci08aHI+Ci08b2wgaWQ9ImNvbnNvbGUiPjwvb2w+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jt
cy9hdXRvZm9jdXMtb3BlcmEtMDA0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9y
bXMvYXV0b2ZvY3VzLW9wZXJhLTAwNC1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDU1OGNkNjAuLjAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9h
dXRvZm9jdXMtb3BlcmEtMDA0LWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAs
MCBAQAotVGhlIGZvcm0gY29udHJvbCBzaG91bGQgaGF2ZSBhIGdyZWVuIGJhY2tncm91bmQ6IAot
Ci1TVUNDRVNTCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1v
cGVyYS0wMDQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAw
NC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDAzZDYzLi4wMDAwMDAwCi0t
LSBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwNC5odG1sCisrKyAv
ZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08dGl0bGU+dGVzdGluZyAiYXV0b2ZvY3VzIiBpbiBYSFRN
TCBjb21iaW5lZCB3aXRoIGR5bmFtaWMgY2hhbmdlczwvdGl0bGU+Ci08c3R5bGU+Ci0gaW5wdXQg
eyBiYWNrZ3JvdW5kOnJlZCB9Ci0gaW5wdXQ6Zm9jdXMgeyBiYWNrZ3JvdW5kOmxpbWUgfQotPC9z
dHlsZT4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlw
dCI+Ci0gICAgZnVuY3Rpb24gbG9nKG1lc3NhZ2UpIHsKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lckhUTUwgKz0gIjxsaT4iK21lc3NhZ2UrIjwvbGk+IjsK
LSAgICB9Ci0KLSAgICBmdW5jdGlvbiB0ZXN0KCkgewotICAgICAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7Ci0gICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7Ci0gICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoJ2lucHV0JylbMF07Ci0gICAgICAgIHZhciBwID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJ3AnKVswXTsKLSAgICAgICAgdmFyIGlucHV0ID0gcC5yZW1vdmVDaGlsZChp
bnB1dCk7Ci0gICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnYXV0b2ZvY3VzJywnZmFsc2UnKTsK
LSAgICAgICAgcC5hcHBlbmRDaGlsZChpbnB1dCk7Ci0KLSAgICAgICAgc2V0VGltZW91dChjaGVj
aywgMCk7Ci0gICAgfQotICAgIAotICAgIGZ1bmN0aW9uIGNoZWNrKCkgewotICAgICAgICBpZiAo
ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgi
aW5wdXQiKVswXSkKLSAgICAgICAgICAgIGxvZygiU1VDQ0VTUyIpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBsb2coIkZBSUxVUkUiKTsKLQotICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQotICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOwotICAgIH0KLQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBvbmxvYWQ9InRlc3QoKSI+
Ci08cD5UaGUgZm9ybSBjb250cm9sIHNob3VsZCBoYXZlIGEgZ3JlZW4gYmFja2dyb3VuZDogPGlu
cHV0Lz48L3A+Ci08aHIvPgotPG9sIGlkPSJjb25zb2xlIj48L29sPgotPC9ib2R5PgotPC9odG1s
PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwNS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0wMDUtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA1NThjZDYwLi4wMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2Zhc3Qv
Zm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwNS1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAt
MSwzICswLDAgQEAKLVRoZSBmb3JtIGNvbnRyb2wgc2hvdWxkIGhhdmUgYSBncmVlbiBiYWNrZ3Jv
dW5kOiAKLQotU1VDQ0VTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRv
Zm9jdXMtb3BlcmEtMDA1Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1v
cGVyYS0wMDUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY0MjFkYS4uMDAw
MDAwMAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0wMDUuaHRt
bAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8xOTk5L3hodG1sIj4KLTxoZWFkPgotPHRpdGxlPnRlc3RpbmcgImF1dG9mb2N1cyIg
aW4gWEhUTUwgd2l0aCBkeW5hbWljIGNoYW5nZXMgKHBhcnQgdHdvKTwvdGl0bGU+Ci08c3R5bGU+
Ci0gaW5wdXQgeyBiYWNrZ3JvdW5kOnJlZCB9Ci0gaW5wdXQ6Zm9jdXMgeyBiYWNrZ3JvdW5kOmxp
bWUgfQotPC9zdHlsZT4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHR5cGU9InRleHQv
amF2YXNjcmlwdCI+Ci0gICAgZnVuY3Rpb24gbG9nKG1lc3NhZ2UpIHsKLSAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lckhUTUwgKz0gIjxsaT4iK21lc3NhZ2Ur
IjwvbGk+IjsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB0ZXN0KCkgewotICAgICAgICB2YXIgaW5w
dXQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXTsKLSAgICAgICAg
dmFyIHAgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgncCcpWzBdOwotICAgICAgICB2
YXIgaW5wdXQgPSBwLnJlbW92ZUNoaWxkKGlucHV0KTsKLSAgICAgICAgaW5wdXQuYXV0b2ZvY3Vz
ID0gdHJ1ZTsKLSAgICAgICAgcC5hcHBlbmRDaGlsZChpbnB1dCk7Ci0KLSAgICAgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewotICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOwotICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2Fp
dFVudGlsRG9uZSgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzZXRUaW1lb3V0KGNo
ZWNrLCAwKTsKLSAgICB9Ci0gICAgCi0gICAgZnVuY3Rpb24gY2hlY2soKSB7Ci0gICAgICAgIGlm
IChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJpbnB1dCIpWzBdKQotICAgICAgICAgICAgbG9nKCJTVUNDRVNTIik7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGxvZygiRkFJTFVSRSIpOwotCi0gICAgICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCi0gICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7Ci0gICAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBvbmxvYWQ9InRlc3QoKSI+
Ci08cD5UaGUgZm9ybSBjb250cm9sIHNob3VsZCBoYXZlIGEgZ3JlZW4gYmFja2dyb3VuZDogPGlu
cHV0Lz48L3A+Ci08aHIvPgotPG9sIGlkPSJjb25zb2xlIj48L29sPgotPC9ib2R5PgotPC9odG1s
PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwNi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0wMDYtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwZTA0YjJlLi4wMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2Zhc3Qv
Zm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwNi1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAt
MSwxNSArMCwwIEBACi1BbGwgZm9ybSBjb250cm9scyBiZWxvdyBzaG91bGQgaGF2ZSBhIGdyZWVu
IGJhY2tncm91bmQ6Ci0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLVNVQ0NFU1MKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwNi5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDA2Lmh0bWwKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDk1NWRlYzYuLjAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDA2Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSAr
MCwwIEBACi08aHRtbD4KLTxoZWFkPgotPHRpdGxlPnRlc3Qgd2l0aCBtdWx0aXBsZSBjb250cm9s
cyBoYXZpbmcgImF1dG9mb2N1cyIgc2V0PC90aXRsZT4KLTxzdHlsZT4KLSBpbnB1dCwgaW5wdXQj
dGVzdDpmb2N1cyB7IGJhY2tncm91bmQ6bGltZSB9Ci0gaW5wdXQ6Zm9jdXMsIGlucHV0I3Rlc3Qg
eyBiYWNrZ3JvdW5kOnJlZCB9Ci08L3N0eWxlPgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlw
dCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgICBmdW5jdGlvbiBsb2cobWVzc2FnZSkgewot
ICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVySFRNTCArPSAi
PGxpPiIrbWVzc2FnZSsiPC9saT4iOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHRlc3QoKSB7Ci0g
ICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Ci0KLSAgICAgICAgaWYgKGRvY3VtZW50LmFj
dGl2ZUVsZW1lbnQgPT0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3QiKSkKLSAgICAgICAg
ICAgIGxvZygiU1VDQ0VTUyIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb2coIkZBSUxV
UkUiKTsKLSAgICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IG9ubG9hZD0idGVzdCgpIj4K
LTxwPkFsbCBmb3JtIGNvbnRyb2xzIGJlbG93IHNob3VsZCBoYXZlIGEgZ3JlZW4gYmFja2dyb3Vu
ZDo8L3A+Ci08cD48aW5wdXQgYXV0b2ZvY3VzPgotPHA+PGlucHV0IGF1dG9mb2N1cz4KLTxwPjxp
bnB1dCBhdXRvZm9jdXM+Ci08cD48aW5wdXQ+Ci08cD48aW5wdXQgYXV0b2ZvY3VzIGlkPSJ0ZXN0
Ij4KLTxwPjxpbnB1dD4KLTxoci8+Ci08b2wgaWQ9ImNvbnNvbGUiPjwvb2w+Ci08L2JvZHk+Ci08
L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDA3LWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwNy1leHBlY3RlZC50eHQKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyOGMyZGYuLjAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMv
ZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDA3LWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxs
CkBAIC0xLDUgKzAsMCBAQAotVGhlIGZvcm0gY29udHJvbCBiZWxvdyBzaG91bGQgaGF2ZSBhIGdy
ZWVuIGJhY2tncm91bmQ6Ci0KLQotCi1TVUNDRVNTCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0wMDcuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZm9y
bXMvYXV0b2ZvY3VzLW9wZXJhLTAwNy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjNjBjOWFlLi4wMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3Vz
LW9wZXJhLTAwNy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPGh0bWw+Ci08
aGVhZD4KLTx0aXRsZT4iYXV0b2ZvY3VzIiBhbmQgdGhlIGJsdXIoKSBtZXRob2Q8L3RpdGxlPgot
PHN0eWxlPgotIGlucHV0IHsgYmFja2dyb3VuZDpsaW1lIH0KLSBpbnB1dDpmb2N1cyB7IGJhY2tn
cm91bmQ6cmVkIH0KLTwvc3R5bGU+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiPgotICAgIHZhciBnb3RCbHVyID0gZmFsc2U7Ci0KLSAgICBmdW5j
dGlvbiBsb2cobWVzc2FnZSkgewotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29u
c29sZSIpLmlubmVySFRNTCArPSAiPGxpPiIrbWVzc2FnZSsiPC9saT4iOwotICAgIH0KLQotICAg
IGZ1bmN0aW9uIHN3aXRjaEJsdXIoKSB7Ci0gICAgICAgIGdvdEJsdXIgPSB0cnVlOwotICAgIH0K
LSAgICAKLSAgICBmdW5jdGlvbiB0ZXN0KCkgewotICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQotICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOwotCi0gICAgICAgIGlmIChnb3RCbHVyKQotICAgICAgICAgICAgbG9nKCJTVUNDRVNTIik7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvZygiRkFJTFVSRSIpOwotICAgIH0KLTwvc2Ny
aXB0PgotPC9oZWFkPgotPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgotPHA+VGhlIGZvcm0gY29udHJv
bCBiZWxvdyBzaG91bGQgaGF2ZSBhIGdyZWVuIGJhY2tncm91bmQ6Ci08cD48aW5wdXQgYXV0b2Zv
Y3VzIG9uZm9jdXM9InRoaXMuYmx1cigpIiBvbmJsdXI9InN3aXRjaEJsdXIoKSI+Ci08aHIvPgot
PG9sIGlkPSJjb25zb2xlIj48L29sPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3Vz
LW9wZXJhLTAwOC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1
cy1vcGVyYS0wMDgtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
Njc5ZmVmLi4wMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9w
ZXJhLTAwOC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLVRoZSBm
b3JtIGNvbnRyb2xzIGJlbG93IHNob3VsZCBoYXZlIGEgZ3JlZW4gYmFja2dyb3VuZDoKLQotCi0K
LQotCi0KLQotU1VDQ0VTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRv
Zm9jdXMtb3BlcmEtMDA4Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1v
cGVyYS0wMDguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQyOTgyYy4uMDAw
MDAwMAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0wMDguaHRt
bAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8xOTk5L3hodG1sIj4KLTxoZWFkPgotPHRpdGxlPiJhdXRvZm9jdXMiIGluIFhIVE1M
IGFuZCB0aGUgZm9jdXMoKSBtZXRob2Q8L3RpdGxlPgotPHN0eWxlPgotIGlucHV0LCBpbnB1dCN0
ZXN0OmZvY3VzIHsgYmFja2dyb3VuZDpsaW1lIH0KLSBpbnB1dCN0ZXN0LCBpbnB1dDpmb2N1cyB7
IGJhY2tncm91bmQ6cmVkIH0KLTwvc3R5bGU+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0
IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICAgIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKSB7Ci0g
ICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5uZXJIVE1MICs9ICI8
bGk+IittZXNzYWdlKyI8L2xpPiI7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gdGVzdCgpIHsKLSAg
ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF0uZm9jdXMoKTsK
LSAgICAgICAgCi0gICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Ci0KLSAgICAgICAgaWYg
KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
J2lucHV0JylbMF0pCi0gICAgICAgICAgICBsb2coIlNVQ0NFU1MiKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbG9nKCJGQUlMVVJFIik7Ci0gICAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08
Ym9keSBvbmxvYWQ9InRlc3QoKSI+Ci08cD5UaGUgZm9ybSBjb250cm9scyBiZWxvdyBzaG91bGQg
aGF2ZSBhIGdyZWVuIGJhY2tncm91bmQ6PC9wPgotPHA+PGlucHV0IGlkPSJ0ZXN0Ii8+PC9wPgot
PHA+PGlucHV0IGF1dG9mb2N1cz0iYXV0b2ZvY3VzIi8+PC9wPgotPHA+PGlucHV0IGF1dG9mb2N1
cz0iYXV0b2ZvY3VzIi8+PC9wPgotPGhyLz4KLTxvbCBpZD0iY29uc29sZSI+PC9vbD4KLTwvYm9k
eT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3Vz
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMmJhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlw
dGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0
LXRlc3RzL2F1dG9mb2N1cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2F1dG9mb2N1
cy1pZ25vcmUuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9hdXRvZm9j
dXMtaWdub3JlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MjY2M2MK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9h
dXRvZm9jdXMtaWdub3JlLmpzCkBAIC0wLDAgKzEsMTMgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyB0
aGF0IGF1dG9mb2N1cyBpcyBpZ25vcmVkIGlmIHRoZXJlIGFyZSBvdGhlciBhY3RpdmUgY29udHJv
bHMuIik7CisKK3ZhciBnb29kID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKK2Rv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZ29vZCk7IAorZ29vZC5mb2N1cygpOworCit2YXIgYmFk
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKK2JhZC5hdXRvZm9jdXMgPSB0cnVl
OworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChiYWQpOworCitzaG91bGRCZSgiZG9jdW1lbnQu
YWN0aXZlRWxlbWVudCIsICJnb29kIik7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvYXV0b2Zv
Y3VzLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvYXV0b2ZvY3VzLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZTE3YmQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9hdXRvZm9jdXMuanMK
QEAgLTAsMCArMSw1NSBAQAorZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgYXV0b2ZvY3VzIGF0dHJp
YnV0ZSBleGlzdHM6IGF1dG9mb2N1c19lbGVtZW50IHNob3VsZCBiZSBhdXRvZm9jdXNlZCIpOwor
Cit2YXIgYXV0b2ZvY3VzVHJpZ2dlcmVkID0gZmFsc2U7CisKK3ZhciBpbnB1dCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Cit2YXIgdGV4dGFyZWEgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJ0ZXh0YXJlYSIpOwordmFyIGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImJ1dHRvbiIpOwordmFyIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIp
OwordmFyIGF1dG9mb2N1c19lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQi
KTsKK3ZhciBkaXNhYmxlZF9lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQi
KTsKKworYXV0b2ZvY3VzX2VsZW1lbnQudmFsdWUgPSAiRkFJTDogSSBzaG91bGQgYmUgZm9jdXNl
ZCI7CithdXRvZm9jdXNfZWxlbWVudC5hdXRvZm9jdXMgPSB0cnVlOworZGlzYWJsZWRfZWxlbWVu
dC5kaXNhYmxlZCA9IHRydWU7CitkaXNhYmxlZF9lbGVtZW50LmF1dG9mb2N1cyA9IHRydWU7CisK
K2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW5wdXQpOworZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZCh0ZXh0YXJlYSk7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGJ1dHRvbik7Citkb2N1
bWVudC5ib2R5LmFwcGVuZENoaWxkKHNlbGVjdCk7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KGF1dG9mb2N1c19lbGVtZW50KTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGlzYWJsZWRf
ZWxlbWVudCk7CisKKy8vIEF1dG9mb2N1cyBvbiBpbnB1dCBlbGVtZW50cworc2hvdWxkQmVGYWxz
ZSgiaW5wdXQuYXV0b2ZvY3VzIik7CitpbnB1dC5hdXRvZm9jdXMgPSB0cnVlOworc2hvdWxkQmVU
cnVlKCJpbnB1dC5hdXRvZm9jdXMiKTsKKworLy8gQXV0b2ZvY3VzIG9uIHRleHRhcmVhIGVsZW1l
bnRzCitzaG91bGRCZUZhbHNlKCJ0ZXh0YXJlYS5hdXRvZm9jdXMiKTsKK3RleHRhcmVhLmF1dG9m
b2N1cyA9IHRydWU7CitzaG91bGRCZVRydWUoInRleHRhcmVhLmF1dG9mb2N1cyIpOworCisvLyBB
dXRvZm9jdXMgb24gYnV0dG9uIGVsZW1lbnRzCitzaG91bGRCZUZhbHNlKCJidXR0b24uYXV0b2Zv
Y3VzIik7CitidXR0b24uYXV0b2ZvY3VzID0gdHJ1ZTsKK3Nob3VsZEJlVHJ1ZSgiYnV0dG9uLmF1
dG9mb2N1cyIpOworCisvLyBBdXRvZm9jdXMgb24gc2VsZWN0IGVsZW1lbnRzCitzaG91bGRCZUZh
bHNlKCJzZWxlY3QuYXV0b2ZvY3VzIik7CitzZWxlY3QuYXV0b2ZvY3VzID0gdHJ1ZTsKK3Nob3Vs
ZEJlVHJ1ZSgic2VsZWN0LmF1dG9mb2N1cyIpOworCithdXRvZm9jdXNfZWxlbWVudC5vbmZvY3Vz
ID0gZnVuY3Rpb24oKSB7CisJYXV0b2ZvY3VzVHJpZ2dlcmVkID0gdHJ1ZTsKKwlhdXRvZm9jdXNf
ZWxlbWVudC52YWx1ZSA9ICJTVUNDRVNTOiBJJ20gZm9jdXNlZCEiOworfQorCitmdW5jdGlvbiB0
aW1lckZpcmVkKCkgeworCWlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9IGF1dG9mb2N1c19l
bGVtZW50IHx8ICFhdXRvZm9jdXNUcmlnZ2VyZWQpCisJCXRlc3RGYWlsZWQoImF1dG9mb2N1c19l
bGVtZW50IGhhcyBub3QgYmVlbiBhdXRvZm9jdXNlZCIpCit9Cit3aW5kb3cuc2V0VGltZW91dCh0
aW1lckZpcmVkLCAxKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
aW5kZXggOTEzZjU3MC4uMjZiMDRkNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtMzYwLDggKzM2MCw2IEBAIERv
Y3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGJvb2wgaXNYSFRNTCkKIAogICAgIG1fcHJp
bnRpbmcgPSBmYWxzZTsKICAgICAKLSAgICBtX2lnbm9yZUF1dG9mb2N1cyA9IGZhbHNlOwotCiAg
ICAgbV9mcmFtZSA9IGZyYW1lOwogICAgIG1fcmVuZGVyQXJlbmEgPSAwOwogCkBAIC00MzEsNiAr
NDI5LDcgQEAgdm9pZCBEb2N1bWVudDo6cmVtb3ZlZExhc3RSZWYoKQogICAgICAgICAvLyBXZSBt
dXN0IG1ha2Ugc3VyZSBub3QgdG8gYmUgcmV0YWluaW5nIGFueSBvZiBvdXIgY2hpbGRyZW4gdGhy
b3VnaAogICAgICAgICAvLyB0aGVzZSBleHRyYSBwb2ludGVycyBvciB3ZSB3aWxsIGNyZWF0ZSBh
IHJlZmVyZW5jZSBjeWNsZS4KICAgICAgICAgbV9kb2NUeXBlID0gMDsKKyAgICAgICAgbV9hdXRv
Zm9jdXNlZEZvcm1Db250cm9sRWxlbWVudCA9IDA7CiAgICAgICAgIG1fZm9jdXNlZE5vZGUgPSAw
OwogICAgICAgICBtX2hvdmVyTm9kZSA9IDA7CiAgICAgICAgIG1fYWN0aXZlTm9kZSA9IDA7CkBA
IC0xNzkwLDYgKzE3ODksMTcgQEAgdm9pZCBEb2N1bWVudDo6aW1wbGljaXRDbG9zZSgpCiAgICAg
aWYgKHN2Z0V4dGVuc2lvbnMoKSkKICAgICAgICAgYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5zdGFy
dEFuaW1hdGlvbnMoKTsKICNlbmRpZgorCisgICAgaWYgKGF1dG9mb2N1c2VkRm9ybUNvbnRyb2xF
bGVtZW50KCkpIHsKKyAgICAgICAgTm9kZSogbiA9IGZvY3VzZWROb2RlKCk7CisgICAgICAgIGlm
ICghbikKKyAgICAgICAgICAgIGF1dG9mb2N1c2VkRm9ybUNvbnRyb2xFbGVtZW50KCktPmZvY3Vz
KCk7CisgICAgICAgIGVsc2UgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAg
RWxlbWVudCogZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKKyAgICAgICAgICAgIGlmICgh
ZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBhdXRvZm9jdXNlZEZv
cm1Db250cm9sRWxlbWVudCgpLT5mb2N1cygpOworICAgICAgICB9CisgICAgfQogfQogCiB2b2lk
IERvY3VtZW50OjpzZXRQYXJzaW5nKGJvb2wgYikKQEAgLTI2MzAsNiArMjY0MCwxMSBAQCB2b2lk
IERvY3VtZW50OjpzZXREYXNoYm9hcmRSZWdpb25zKGNvbnN0IFZlY3RvcjxEYXNoYm9hcmRSZWdp
b25WYWx1ZT4mIHJlZ2lvbnMpCiB9CiAjZW5kaWYKIAordm9pZCBEb2N1bWVudDo6c2V0QXV0b2Zv
Y3VzZWRGb3JtQ29udHJvbEVsZW1lbnQoUGFzc1JlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50
PiBuZXdBdXRvZm9jdXNlZEZvcm1Db250cm9sRWxlbWVudCkKK3sKKyAgICBtX2F1dG9mb2N1c2Vk
Rm9ybUNvbnRyb2xFbGVtZW50ID0gbmV3QXV0b2ZvY3VzZWRGb3JtQ29udHJvbEVsZW1lbnQ7Cit9
CisKIGJvb2wgRG9jdW1lbnQ6OnNldEZvY3VzZWROb2RlKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Rm9j
dXNlZE5vZGUpCiB7ICAgIAogICAgIC8vIE1ha2Ugc3VyZSBuZXdGb2N1c2VkTm9kZSBpcyBhY3R1
YWxseSBpbiB0aGlzIGRvY3VtZW50CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
IGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCAzMjk1NTc3Li5mNjFlZDM3IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgK
QEAgLTU0OSwxNiArNTQ5LDE0IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgc2VsZWN0ZWRTdHlsZXNo
ZWV0U2V0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTZWxlY3RlZFN0eWxlc2hlZXRTZXQoY29uc3Qg
U3RyaW5nJik7CiAKKyAgICB2b2lkIHNldEF1dG9mb2N1c2VkRm9ybUNvbnRyb2xFbGVtZW50KFBh
c3NSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4pOworICAgIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqIGF1dG9mb2N1c2VkRm9ybUNvbnRyb2xFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9h
dXRvZm9jdXNlZEZvcm1Db250cm9sRWxlbWVudC5nZXQoKTsgfQorCiAgICAgYm9vbCBzZXRGb2N1
c2VkTm9kZShQYXNzUmVmUHRyPE5vZGU+KTsKICAgICBOb2RlKiBmb2N1c2VkTm9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9jdXNlZE5vZGUuZ2V0KCk7IH0KIAogICAgIHZvaWQgZ2V0Rm9jdXNhYmxl
Tm9kZXMoVmVjdG9yPFJlZlB0cjxOb2RlPiA+Jik7CiAgICAgCi0gICAgLy8gVGhlIG1faWdub3Jl
QXV0b2ZvY3VzIGZsYWcgc3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBkb2N1bWVudCBoYXMg
YmVlbiBjaGFuZ2VkIGJ5IHRoZSB1c2VyIGVub3VnaCAKLSAgICAvLyBmb3IgV2ViQ29yZSB0byBp
Z25vcmUgdGhlIGF1dG9mb2N1cyBhdHRyaWJ1dGUgb24gYW55IGZvcm0gY29udHJvbHMKLSAgICBi
b29sIGlnbm9yZUF1dG9mb2N1cygpIGNvbnN0IHsgcmV0dXJuIG1faWdub3JlQXV0b2ZvY3VzOyB9
OwotICAgIHZvaWQgc2V0SWdub3JlQXV0b2ZvY3VzKGJvb2wgc2hvdWxkSWdub3JlID0gdHJ1ZSkg
eyBtX2lnbm9yZUF1dG9mb2N1cyA9IHNob3VsZElnbm9yZTsgfTsKLQogICAgIHZvaWQgc2V0SG92
ZXJOb2RlKFBhc3NSZWZQdHI8Tm9kZT4pOwogICAgIE5vZGUqIGhvdmVyTm9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1faG92ZXJOb2RlLmdldCgpOyB9CiAKQEAgLTk5OSwxMiArOTk3LDExIEBAIHByaXZh
dGU6CiAKICAgICBib29sIG1fcHJpbnRpbmc7CiAgICAgCi0gICAgYm9vbCBtX2lnbm9yZUF1dG9m
b2N1czsKLQogICAgIFBhcnNlTW9kZSBtX3BhcnNlTW9kZTsKIAogICAgIENvbG9yIG1fdGV4dENv
bG9yOwogCisgICAgUmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+IG1fYXV0b2ZvY3VzZWRG
b3JtQ29udHJvbEVsZW1lbnQ7CiAgICAgUmVmUHRyPE5vZGU+IG1fZm9jdXNlZE5vZGU7CiAgICAg
UmVmUHRyPE5vZGU+IG1faG92ZXJOb2RlOwogICAgIFJlZlB0cjxOb2RlPiBtX2FjdGl2ZU5vZGU7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9XZWJDb3JlL2RvbS9FbGVtZW50
LmgKaW5kZXggZDI3OTc2YS4uNWQzYmRjOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRWxlbWVu
dC5oCisrKyBiL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtMjQyLDYgKzI0Miw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgaXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIHdpbGxWYWxpZGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQo
KSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0F1dG9mb2N1c2FibGVGb3Jt
Q29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBi
b29sIGZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVy
KGJvb2wpIHsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50Lmgg
Yi9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaAppbmRleCBmNWI5YjYyLi42MTI1MmVl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaAorKysgYi9XZWJD
b3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaApAQCAtNjIsNiArNjIsNyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIGVudW0gVHlwZSB7IFNVQk1JVCwgUkVTRVQsIEJVVFRPTiB9OwogICAgIHZp
cnR1YWwgYm9vbCBpc09wdGlvbmFsRm9ybUNvbnRyb2woKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBib29sIGlzQXV0b2ZvY3VzYWJsZUZvcm1Db250cm9sRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIFR5cGUgbV90eXBlOwogICAgIGJvb2wgbV9hY3Rp
dmVTdWJtaXQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXggZWE0
Njk4MC4uODlkNGFkYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVs
ZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcApA
QCAtNTEsNiArNTEsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGYpCiAgICAgOiBIVE1MRWxl
bWVudCh0YWdOYW1lLCBkb2MpCiAgICAgLCBtX2Zvcm0oZikKKyAgICAsIG1fYXV0b2ZvY3VzKGZh
bHNlKQogICAgICwgbV9kaXNhYmxlZChmYWxzZSkKICAgICAsIG1fcmVhZE9ubHkoZmFsc2UpCiAg
ICAgLCBtX3JlcXVpcmVkKGZhbHNlKQpAQCAtOTAsNiArOTEsOCBAQCB2b2lkIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikK
IHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKQogICAgICAgICBzZXROZWVkc1N0
eWxlUmVjYWxjKCk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGF1dG9mb2N1c0F0dHIp
CisgICAgICAgIG1fYXV0b2ZvY3VzID0gIWF0dHItPmlzTnVsbCgpOwogICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBkaXNhYmxlZEF0dHIpIHsKICAgICAgICAgYm9vbCBvbGREaXNhYmxlZCA9
IG1fZGlzYWJsZWQ7CiAgICAgICAgIG1fZGlzYWJsZWQgPSAhYXR0ci0+aXNOdWxsKCk7CkBAIC0x
MjYsMTggKzEyOSw5IEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0YWNoKCkKICAg
ICAvLyBvbiB0aGUgcmVuZGVyZXIuCiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRl
cmVyKCktPnVwZGF0ZUZyb21FbGVtZW50KCk7Ci0gICAgICAgIAotICAgIC8vIEZvY3VzIHRoZSBl
bGVtZW50IGlmIGl0IHNob3VsZCBob25vdXIgaXRzIGF1dG9mb2N1cyBhdHRyaWJ1dGUuCi0gICAg
Ly8gV2UgaGF2ZSB0byBkZXRlcm1pbmUgaWYgdGhlIGVsZW1lbnQgaXMgYSBUZXh0QXJlYS9JbnB1
dC9CdXR0b24vU2VsZWN0LAotICAgIC8vIGlmIGlucHV0IHR5cGUgaGlkZGVuIGlnbm9yZSBhdXRv
Zm9jdXMuIFNvIGlmIGRpc2FibGVkIG9yIHJlYWRvbmx5LgotICAgIGJvb2wgaXNJbnB1dFR5cGVI
aWRkZW4gPSBmYWxzZTsKLSAgICBpZiAoaGFzVGFnTmFtZShpbnB1dFRhZykpCi0gICAgICAgIGlz
SW5wdXRUeXBlSGlkZGVuID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHRoaXMpLT5p
c0lucHV0VHlwZUhpZGRlbigpOwogCi0gICAgaWYgKGF1dG9mb2N1cygpICYmIHJlbmRlcmVyKCkg
JiYgIWRvY3VtZW50KCktPmlnbm9yZUF1dG9mb2N1cygpICYmICFpc1JlYWRPbmx5Rm9ybUNvbnRy
b2woKSAmJgotICAgICAgICAgICAgKChoYXNUYWdOYW1lKGlucHV0VGFnKSAmJiAhaXNJbnB1dFR5
cGVIaWRkZW4pIHx8IGhhc1RhZ05hbWUoc2VsZWN0VGFnKSB8fAotICAgICAgICAgICAgICBoYXNU
YWdOYW1lKGJ1dHRvblRhZykgfHwgaGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykpKQotICAgICAgICAg
Zm9jdXMoKTsKKyAgICBpZiAoYXV0b2ZvY3VzKCkgJiYgIWRpc2FibGVkKCkgJiYgaXNBdXRvZm9j
dXNhYmxlRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgIGRvY3VtZW50KCktPnNldEF1dG9m
b2N1c2VkRm9ybUNvbnRyb2xFbGVtZW50KHRoaXMpOwogfQogCiB2b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQpAQCAtMjE1LDcgKzIwOSw3IEBA
IHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0UmVhZE9ubHkoYm9vbCBiKQogCiBib29s
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF1dG9mb2N1cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGhhc0F0dHJpYnV0ZShhdXRvZm9jdXNBdHRyKTsKKyAgICByZXR1cm4gbV9hdXRvZm9jdXM7CiB9
CiAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0QXV0b2ZvY3VzKGJvb2wgYikKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmggYi9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCmluZGV4IGI1ZGM3Y2UuLmEyZGUyOGYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKKysrIGIvV2Vi
Q29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaApAQCAtMTI5LDYgKzEyOSw3IEBAIHBy
aXZhdGU6CiAKICAgICBIVE1MRm9ybUVsZW1lbnQqIG1fZm9ybTsKICAgICBSZWZQdHI8VmFsaWRp
dHlTdGF0ZT4gbV92YWxpZGl0eVN0YXRlOworICAgIGJvb2wgbV9hdXRvZm9jdXMgOiAxOwogICAg
IGJvb2wgbV9kaXNhYmxlZCA6IDE7CiAgICAgYm9vbCBtX3JlYWRPbmx5IDogMTsKICAgICBib29s
IG1fcmVxdWlyZWQgOiAxOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKaW5kZXggNzFkMjFkNi4uYWIx
NDU3MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAorKysgYi9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCkBAIC0yNjMsNiArMjYzLDcgQEAgcHJpdmF0
ZToKIAogICAgIHZpcnR1YWwgYm9vbCBpc09wdGlvbmFsRm9ybUNvbnRyb2woKSBjb25zdCB7IHJl
dHVybiAhaXNSZXF1aXJlZEZvcm1Db250cm9sKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZXF1
aXJlZEZvcm1Db250cm9sKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzQXV0b2ZvY3VzYWJs
ZUZvcm1Db250cm9sRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGlucHV0VHlwZSgpICE9IEhJRERF
TjsgfQogCiAgICAgUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGNyZWF0ZVRlbXBvcmFyeUZv
cm1Gb3JJc0luZGV4KCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxl
bWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgKaW5kZXggOGY1NzVkMi4u
ZjNkZmNmZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgKKysr
IGIvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgKQEAgLTEzMSw2ICsxMzEsNyBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wpOwogCiAgICAg
dmlydHVhbCBib29sIGlzT3B0aW9uYWxGb3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBdXRvZm9jdXNhYmxlRm9ybUNvbnRyb2xFbGVtZW50KCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgU2VsZWN0RWxlbWVudERhdGEgbV9kYXRhOwog
ICAgIENvbGxlY3Rpb25DYWNoZSBtX2NvbGxlY3Rpb25JbmZvOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFF
bGVtZW50LmgKaW5kZXggMjNmNjFkMy4uM2JhNzIwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1s
L0hUTUxUZXh0QXJlYUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxl
bWVudC5oCkBAIC0xMDIsNiArMTAyLDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBp
c09wdGlvbmFsRm9ybUNvbnRyb2woKSBjb25zdCB7IHJldHVybiAhaXNSZXF1aXJlZEZvcm1Db250
cm9sKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZXF1aXJlZEZvcm1Db250cm9sKCkgY29uc3Qg
eyByZXR1cm4gcmVxdWlyZWQoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0F1dG9mb2N1c2FibGVG
b3JtQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBpbnQgbV9y
b3dzOwogICAgIGludCBtX2NvbHM7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5j
cHAKaW5kZXggMDljYWFiOS4uM2QwZDc4NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2wuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sLmNwcApAQCAtMjAyLDEyICsyMDIsNiBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpz
ZXRJbm5lclRleHRWYWx1ZShjb25zdCBTdHJpbmcmIGlubmVyVGV4dFZhbHVlKQogICAgIHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihub2RlKCkpLT5zZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRl
cmVyKHRydWUpOwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9sOjpzZXRVc2VyRWRpdGVkKGJv
b2wgaXNVc2VyRWRpdGVkKQotewotICAgIG1fdXNlckVkaXRlZCA9IGlzVXNlckVkaXRlZDsKLSAg
ICBkb2N1bWVudCgpLT5zZXRJZ25vcmVBdXRvZm9jdXMoaXNVc2VyRWRpdGVkKTsKLX0KLQogaW50
IFJlbmRlclRleHRDb250cm9sOjpzZWxlY3Rpb25TdGFydCgpCiB7CiAgICAgRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5o
CmluZGV4IGNkZDg3MTYuLjkwODI3N2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2wuaApAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRFZGl0ZWQoYm9vbCBp
c0VkaXRlZCkgeyBtX2VkaXRlZCA9IGlzRWRpdGVkOyB9CiAKICAgICBib29sIGlzVXNlckVkaXRl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlckVkaXRlZDsgfQotICAgIHZvaWQgc2V0VXNlckVkaXRl
ZChib29sIGlzVXNlckVkaXRlZCk7CisgICAgdm9pZCBzZXRVc2VyRWRpdGVkKGJvb2wgaXNVc2Vy
RWRpdGVkKSB7IG1fdXNlckVkaXRlZCA9IGlzVXNlckVkaXRlZDsgfQogCiAgICAgaW50IHNlbGVj
dGlvblN0YXJ0KCk7CiAgICAgaW50IHNlbGVjdGlvbkVuZCgpOw==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43228</attachid>
            <date>2009-11-14 10:33:08 -0800</date>
            <delta_ts>2009-11-14 10:40:38 -0800</delta_ts>
            <desc>Proposed patch, v1</desc>
            <filename>bug-31032-20091114193305.patch</filename>
            <type>text/plain</type>
            <size>4398</size>
            <attacher name="Michelangelo De Simone">michelangelo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxZjFiNTkwLi41ODlkYTBmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMDktMTEt
MTQgIE1pY2hlbGFuZ2VsbyBEZSBTaW1vbmUgIDxtaWNkZXNpbUBnbWFpbC5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwkJTmV3LCB1cGRhdGVkLCB0ZXN0cyBm
b3IgdGhlICJhdXRvZm9jdXMiIGF0dHJpYnV0ZS4gUmVtb3ZlZCBvbGQKKyAgICAgICAgYW5kIG9i
c29sZXRlIHRlc3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjkwMDQKKworICAgICAgICAqIGZhc3QvZm9ybXMvYXV0b2ZvY3VzLWF0dHJpYnV0ZS1l
eHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9hdXRvZm9jdXMtYXR0
cmlidXRlLmh0bWw6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9hdXRvZm9jdXMtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2F1dG9mb2N1cy1pZ25vcmUt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2F1dG9mb2N1cy1pZ25v
cmUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDAx
LWV4cGVjdGVkLnR4dDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2F1dG9mb2N1cy1v
cGVyYS0wMDEuaHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2F1dG9mb2N1cy1v
cGVyYS0wMDItZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvYXV0
b2ZvY3VzLW9wZXJhLTAwMi5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvYXV0
b2ZvY3VzLW9wZXJhLTAwMy1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC9m
b3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDAzLmh0bWw6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC9m
b3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDA0LWV4cGVjdGVkLnR4dDogUmVtb3ZlZC4KKyAgICAgICAg
KiBmYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0wMDQuaHRtbDogUmVtb3ZlZC4KKyAgICAgICAg
KiBmYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0wMDUtZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgor
ICAgICAgICAqIGZhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwNS5odG1sOiBSZW1vdmVkLgor
ICAgICAgICAqIGZhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwNi1leHBlY3RlZC50eHQ6IFJl
bW92ZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDA2Lmh0bWw6IFJl
bW92ZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDA3LWV4cGVjdGVk
LnR4dDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0wMDcu
aHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0wMDgt
ZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvYXV0b2ZvY3VzLW9w
ZXJhLTAwOC5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvYXV0b2ZvY3VzLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2F1dG9mb2N1cy1p
Z25vcmUuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2F1dG9m
b2N1cy5qczogQWRkZWQuCisgICAgICAgIChhdXRvZm9jdXNfZWxlbWVudC5vbmZvY3VzKToKKyAg
ICAgICAgKCk6CisKIDIwMDktMTEtMTQgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5ZmEwOTE1Li45ZmFiZGFlIDEw
MDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ4IEBACisyMDA5LTExLTE0ICBNaWNoZWxhbmdlbG8gRGUgU2ltb25lICA8bWljZGVz
aW1AZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5ldywgY2xlYW5lciBhbmQgbW9yZSBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gb2Yg
dGhlICJhdXRvZm9jdXMiCisgICAgICAgIGF0dHJpYnV0ZS4KKyAgICAgICAgRml4IGZvciBtdWx0
aXBsZSBpc3N1ZXM6CisgICAgICAgICAtIHJlYWRvbmx5IGZvcm0gY29udHJvbCBlbGVtZW50cyBh
cmUgY29ycmVjdGx5IGhhbmRsZWQ7CisgICAgICAgICAtIGF1dG9mb2N1cyBpcyBjb3JyZWN0bHkg
aGFuZGxlZCB2aWEgRE9NOworICAgICAgICAgLSBhdXRvZm9jdXMgaXMgaWdub3JlZCBpZiB0aGVy
ZSBpcyBhbm90aGVyIGZvY3VzZWQgZWxlbWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTMxMDMyCisKKyAgICAgICAgVGVzdHM6IGZhc3QvZm9ybXMv
YXV0b2ZvY3VzLWlnbm9yZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Zvcm1zL2F1dG9mb2N1
cy5odG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOiBhZGRlZCBuZXcgaXZhciBmb3Ig
YXV0b2ZvY3VzZWQgZm9ybSBjb250cm9sIGVsZW1lbnQKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpEb2N1bWVudCk6IGluaXQgbmV3IGF1dG9mb2N1cyBpdmFyIHRvIDAKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpyZW1vdmVkTGFzdFJlZik6IHJlbGVhc2UgcmVmZXJlbmNlCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW1wbGljaXRDbG9zZSk6IGF1dG9mb2N1cyBiZWhhdmlv
dXIKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRBdXRvZm9jdXNlZEZvcm1Db250cm9s
RWxlbWVudCk6IHNldHRlcgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OmF1dG9mb2N1c2VkRm9ybUNvbnRyb2xFbGVtZW50KTogZ2V0dGVyCisg
ICAgICAgICogZG9tL0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmlzQXV0
b2ZvY3VzYWJsZUZvcm1Db250cm9sRWxlbWVudCk6IAorICAgICAgICAqIGh0bWwvSFRNTEJ1dHRv
bkVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50Ojppc0F1dG9m
b2N1c2FibGVGb3JtQ29udHJvbEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250
cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KTogaW5pdAorICAgICAgICBtX2F1dG9mb2N1cyBpdmFy
IHRvIGZhbHNlCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6IHBhcnNpbmcKKyAgICAgICAgc3R1ZmYgZm9yIGF1dG9mb2N1c0F0
dHIKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF0dGFjaCk6IHNl
dCBEb2N1bWVudCdzCisgICAgICAgIGF1dG9mb2N1c2VkRm9ybUNvbnRyb2xFbGVtZW50LCBpZiBu
ZWNlc3NhcnkKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF1dG9m
b2N1cyk6IGF0dHJpYnV0ZSBnZXR0ZXIKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmlzQXV0b2ZvY3VzYWJsZUZvcm1Db250cm9sRWxlbWVu
dCk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OmlzQXV0b2ZvY3VzYWJsZUZvcm1Db250cm9sRWxlbWVudCk6
CisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVGV4dEFyZWFFbGVtZW50Ojppc0F1dG9mb2N1c2FibGVGb3JtQ29udHJvbEVsZW1lbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
ZXh0Q29udHJvbDo6c2V0VXNlckVkaXRlZCk6IGNsZWFuZWQgdXAKKwogMjAwOS0xMS0xNCAgS2Vu
dCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIu
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43229</attachid>
            <date>2009-11-14 10:33:16 -0800</date>
            <delta_ts>2009-11-14 10:40:46 -0800</delta_ts>
            <desc>Proposed patch, v1</desc>
            <filename>bug-31032-20091114193313.patch</filename>
            <type>text/plain</type>
            <size>491</size>
            <attacher name="Michelangelo De Simone">michelangelo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1ODlkYTBmLi43MThlOGMwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC00LDcgKzQsNyBAQAogCiAJCU5ldywg
dXBkYXRlZCwgdGVzdHMgZm9yIHRoZSAiYXV0b2ZvY3VzIiBhdHRyaWJ1dGUuIFJlbW92ZWQgb2xk
CiAgICAgICAgIGFuZCBvYnNvbGV0ZSB0ZXN0cy4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDA0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zMTAzMgogCiAgICAgICAgICogZmFzdC9mb3Jtcy9hdXRvZm9j
dXMtYXR0cmlidXRlLWV4cGVjdGVkLnR4dDogUmVtb3ZlZC4KICAgICAgICAgKiBmYXN0L2Zvcm1z
L2F1dG9mb2N1cy1hdHRyaWJ1dGUuaHRtbDogUmVtb3ZlZC4=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43230</attachid>
            <date>2009-11-14 10:40:54 -0800</date>
            <delta_ts>2010-06-11 10:42:16 -0700</delta_ts>
            <desc>Proposed patch, v1... again</desc>
            <filename>bug-31032-20091114194051.patch</filename>
            <type>text/plain</type>
            <size>32993</size>
            <attacher name="Michelangelo De Simone">michelangelo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxZjFiNTkwLi43MThlOGMwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMDktMTEt
MTQgIE1pY2hlbGFuZ2VsbyBEZSBTaW1vbmUgIDxtaWNkZXNpbUBnbWFpbC5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwkJTmV3LCB1cGRhdGVkLCB0ZXN0cyBm
b3IgdGhlICJhdXRvZm9jdXMiIGF0dHJpYnV0ZS4gUmVtb3ZlZCBvbGQKKyAgICAgICAgYW5kIG9i
c29sZXRlIHRlc3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzEwMzIKKworICAgICAgICAqIGZhc3QvZm9ybXMvYXV0b2ZvY3VzLWF0dHJpYnV0ZS1l
eHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9hdXRvZm9jdXMtYXR0
cmlidXRlLmh0bWw6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9hdXRvZm9jdXMtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2F1dG9mb2N1cy1pZ25vcmUt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2F1dG9mb2N1cy1pZ25v
cmUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDAx
LWV4cGVjdGVkLnR4dDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2F1dG9mb2N1cy1v
cGVyYS0wMDEuaHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2F1dG9mb2N1cy1v
cGVyYS0wMDItZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvYXV0
b2ZvY3VzLW9wZXJhLTAwMi5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvYXV0
b2ZvY3VzLW9wZXJhLTAwMy1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC9m
b3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDAzLmh0bWw6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC9m
b3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDA0LWV4cGVjdGVkLnR4dDogUmVtb3ZlZC4KKyAgICAgICAg
KiBmYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0wMDQuaHRtbDogUmVtb3ZlZC4KKyAgICAgICAg
KiBmYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0wMDUtZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgor
ICAgICAgICAqIGZhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwNS5odG1sOiBSZW1vdmVkLgor
ICAgICAgICAqIGZhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwNi1leHBlY3RlZC50eHQ6IFJl
bW92ZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDA2Lmh0bWw6IFJl
bW92ZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDA3LWV4cGVjdGVk
LnR4dDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0wMDcu
aHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0wMDgt
ZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvYXV0b2ZvY3VzLW9w
ZXJhLTAwOC5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvYXV0b2ZvY3VzLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2F1dG9mb2N1cy1p
Z25vcmUuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2F1dG9m
b2N1cy5qczogQWRkZWQuCisgICAgICAgIChhdXRvZm9jdXNfZWxlbWVudC5vbmZvY3VzKToKKyAg
ICAgICAgKCk6CisKIDIwMDktMTEtMTQgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtYXR0cmlidXRlLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLWF0dHJpYnV0ZS1leHBlY3RlZC50eHQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyZDZmYzQuLjAwMDAwMDAKLS0tIGEvTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtYXR0cmlidXRlLWV4cGVjdGVkLnR4dAorKysgL2Rldi9u
dWxsCkBAIC0xLDYgKzAsMCBAQAotVGhpcyB0ZXN0IGNoZWNrcyBmb3IgdGhlIGF1dG9mb2N1cyBh
dHRyaWJ1dGUuIEF1dG9mb2N1cyBpcyBzZXQgb24gdGhlIGZpcnN0IGFuZCBvbiB0aGUgdGhpcmQg
aW5wdXQuIFN1Y2Nlc3Mgb24gIllFUyBOTyBZRVMiLgotCi0gIAotWUVTCi1OTwotWUVTCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1hdHRyaWJ1dGUuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLWF0dHJpYnV0ZS5odG1sCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGFiNmZhLi4wMDAwMDAwCi0tLSBhL0xheW91dFRlc3Rz
L2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLWF0dHJpYnV0ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEs
MjkgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5hdXRvZm9jdXMgYXR0cmlidXRlIHRl
c3Q8L3RpdGxlPgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgdHlwZT0idGV4dC9qYXZh
c2NyaXB0Ij4KLSAgICBmdW5jdGlvbiBsb2cobWVzc2FnZSkgewotICAgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVySFRNTCArPSAiPGxpPiIrbWVzc2FnZSsiPC9s
aT4iOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHRlc3QoKSB7Ci0gICAgICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7Ci0gICAgICAKLSAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgiaW5wdXQiKTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGEubGVuZ3RoOyBp
KyspCi0gICAgICAgICAgICBhLml0ZW0oaSkuYXV0b2ZvY3VzID8gbG9nKCJZRVMiKSA6IGxvZygi
Tk8iKTsKLSAgICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IG9ubG9hZD0idGVzdCgpIj4K
LTxwPlRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBhdXRvZm9jdXMgYXR0cmlidXRlLiBBdXRvZm9j
dXMgaXMgc2V0IG9uIHRoZSBmaXJzdAotYW5kIG9uIHRoZSB0aGlyZCBpbnB1dC4gU3VjY2VzcyBv
biAiWUVTIE5PIFlFUyIuPC9wPgotPGlucHV0IGF1dG9mb2N1cyBpZD0ib25lIi8+Ci08aW5wdXQv
PgotPGlucHV0IGF1dG9mb2N1cy8+Ci08aHI+Ci08b2wgaWQ9ImNvbnNvbGUiPjwvb2w+Ci08L2Jv
ZHk+Ci08L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2Zv
Y3VzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTVmYzk1Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMTcgQEAKK1Rlc3RzIHRoYXQgYXV0b2ZvY3VzIGF0dHJpYnV0ZSBleGlz
dHM6IGF1dG9mb2N1c19lbGVtZW50IHNob3VsZCBiZSBhdXRvZm9jdXNlZAorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBpbnB1dC5hdXRvZm9jdXMgaXMgZmFsc2UKK1BBU1Mg
aW5wdXQuYXV0b2ZvY3VzIGlzIHRydWUKK1BBU1MgdGV4dGFyZWEuYXV0b2ZvY3VzIGlzIGZhbHNl
CitQQVNTIHRleHRhcmVhLmF1dG9mb2N1cyBpcyB0cnVlCitQQVNTIGJ1dHRvbi5hdXRvZm9jdXMg
aXMgZmFsc2UKK1BBU1MgYnV0dG9uLmF1dG9mb2N1cyBpcyB0cnVlCitQQVNTIHNlbGVjdC5hdXRv
Zm9jdXMgaXMgZmFsc2UKK1BBU1Mgc2VsZWN0LmF1dG9mb2N1cyBpcyB0cnVlCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtaWdub3JlLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLWlnbm9yZS1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkwOTU4ZAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLWlnbm9yZS1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxMCBAQAorVGVzdHMgdGhhdCBhdXRvZm9jdXMgaXMgaWdub3JlZCBpZiB0aGVyZSBhcmUg
b3RoZXIgYWN0aXZlIGNvbnRyb2xzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
UEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGlzIGdvb2QKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL2F1dG9mb2N1cy1pZ25vcmUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMv
YXV0b2ZvY3VzLWlnbm9yZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjU1OWMyZjEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9m
b2N1cy1pZ25vcmUuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9hdXRvZm9jdXMt
aWdub3JlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDAxLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwMS1leHBlY3RlZC50
eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMzUxMzMuLjAwMDAwMDAKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDAxLWV4cGVjdGVkLnR4dAor
KysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotVGhpcyBmb3JtIGNvbnRyb2wgc2hvdWxkIGhh
dmUgYSBncmVlbiBiYWNrZ3JvdW5kIGFuZCBhY3RpdmUgc3RhdGU6IAotCi1TVUNDRVNTCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0wMDEuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwMS5odG1sCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODQ5N2M3Li4wMDAwMDAwCi0tLSBhL0xheW91dFRlc3Rz
L2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwMS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEs
MjkgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5iYXNpYyAiYXV0b2ZvY3VzIiB0ZXN0
PC90aXRsZT4KLTxzdHlsZT4KLSBpbnB1dCB7IGJhY2tncm91bmQ6cmVkIH0KLSBpbnB1dDpmb2N1
cyB7IGJhY2tncm91bmQ6bGltZSB9Ci08L3N0eWxlPgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNj
cmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgICBmdW5jdGlvbiBsb2cobWVzc2FnZSkg
ewotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVySFRNTCAr
PSAiPGxpPiIrbWVzc2FnZSsiPC9saT4iOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHRlc3QoKSB7
Ci0gICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
aWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoImlucHV0IilbMF0pCi0gICAgICAgICAgICBsb2coIlNVQ0NFU1MiKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbG9nKCJGQUlMVVJFIik7Ci0gICAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+
Ci08Ym9keSBvbmxvYWQ9InRlc3QoKSI+Ci08cD5UaGlzIGZvcm0gY29udHJvbCBzaG91bGQgaGF2
ZSBhIGdyZWVuIGJhY2tncm91bmQgYW5kIGFjdGl2ZSBzdGF0ZTogPGlucHV0IGF1dG9mb2N1cz4K
LTxocj4KLTxvbCBpZD0iY29uc29sZSI+PC9vbD4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1
dG9mb2N1cy1vcGVyYS0wMDItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9h
dXRvZm9jdXMtb3BlcmEtMDAyLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggODQ0YTU0OC4uMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9m
b2N1cy1vcGVyYS0wMDItZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBA
Ci1UaGlzIGZvcm0gY29udHJvbCBzaG91bGQgaGF2ZSBhIGdyZWVuIGJhY2tncm91bmQ6IAotCi1T
VUNDRVNTCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVy
YS0wMDIuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwMi5o
dG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2M2MDBmLi4wMDAwMDAwCi0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwMi5odG1sCisrKyAvZGV2
L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5keW5hbWljYWxs
eSBpbnNlcnRlZCBjb250cm9sIHdpdGggImF1dG9mb2N1cyIgc2V0PC90aXRsZT4KLTxzdHlsZT4K
LSBpbnB1dCB7IGJhY2tncm91bmQ6cmVkIH0KLSBpbnB1dDpmb2N1cyB7IGJhY2tncm91bmQ6bGlt
ZSB9Ci08L3N0eWxlPgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgdHlwZT0idGV4dC9q
YXZhc2NyaXB0Ij4KLSAgICBmdW5jdGlvbiBsb2cobWVzc2FnZSkgewotICAgICAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVySFRNTCArPSAiPGxpPiIrbWVzc2FnZSsi
PC9saT4iOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHRlc3QoKSB7Ci0gICAgICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2
ZUVsZW1lbnQgPT0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0pCi0g
ICAgICAgICAgICBsb2coIlNVQ0NFU1MiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9n
KCJGQUlMVVJFIik7Ci0gICAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBvbmxvYWQ9InRl
c3QoKSI+Ci08cD5GQUlMIChUaGUgc2NyaXB0IGRpZCBub3QgcnVuLik8L3A+Ci08c2NyaXB0Pgot
IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwJylbMF0uaW5uZXJIVE1MID0gIlRoaXMg
Zm9ybSBjb250cm9sIHNob3VsZCBoYXZlIGEgZ3JlZW4gYmFja2dyb3VuZDogPGlucHV0IGF1dG9m
b2N1cz4iOwotPC9zY3JpcHQ+Ci08aHI+Ci08b2wgaWQ9ImNvbnNvbGUiPjwvb2w+Ci08L2JvZHk+
Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDAzLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwMy1leHBlY3RlZC50eHQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNDIyZjEuLjAwMDAwMDAKLS0tIGEvTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDAzLWV4cGVjdGVkLnR4dAorKysgL2Rldi9u
dWxsCkBAIC0xLDIgKzAsMCBAQAotVGhpcyBmb3JtIGNvbnRyb2wgc2hvdWxkIGhhdmUgYSBncmVl
biBiYWNrZ3JvdW5kOiAKLVNVQ0NFU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9y
bXMvYXV0b2ZvY3VzLW9wZXJhLTAwMy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRv
Zm9jdXMtb3BlcmEtMDAzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYTI1
OWEuLjAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEt
MDAzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08aHRtbD4KLTxoZWFkPgot
PHRpdGxlPiJhdXRvZm9jdXMiIHNjcm9sbGluZyB0ZXN0PC90aXRsZT4KLTxzdHlsZT4KLSBwI3Rl
c3R7IHBvc2l0aW9uOmFic29sdXRlOyB0b3A6MTUwJSB9Ci0gaW5wdXQgeyBiYWNrZ3JvdW5kOnJl
ZCB9Ci0gaW5wdXQ6Zm9jdXMgeyBiYWNrZ3JvdW5kOmxpbWUgfQotPC9zdHlsZT4KLTxzY3JpcHQg
bGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gICAgZnVuY3Rp
b24gbG9nKG1lc3NhZ2UpIHsKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNv
bGUiKS5pbm5lckhUTUwgKz0gIjxsaT4iK21lc3NhZ2UrIjwvbGk+IjsKLSAgICB9Ci0KLSAgICBm
dW5jdGlvbiB0ZXN0KCkgewotICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQotICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotCi0gICAg
ICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGRvY3VtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJpbnB1dCIpWzBdICYmCi0gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnNjcm9sbFRv
cCAhPSAwKQotICAgICAgICAgICAgbG9nKCJTVUNDRVNTIik7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGxvZygiRkFJTFVSRSIpOwotICAgIH0KLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkg
b25sb2FkPSJ0ZXN0KCkiPgotPHAgaWQ9InRlc3QiPlRoaXMgZm9ybSBjb250cm9sIHNob3VsZCBo
YXZlIGEgZ3JlZW4gYmFja2dyb3VuZDogPGlucHV0IGF1dG9mb2N1cz4KLTxocj4KLTxvbCBpZD0i
Y29uc29sZSI+PC9vbD4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0w
MDQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEt
MDA0LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU4Y2Q2MC4u
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0wMDQt
ZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1UaGUgZm9ybSBjb250
cm9sIHNob3VsZCBoYXZlIGEgZ3JlZW4gYmFja2dyb3VuZDogCi0KLVNVQ0NFU1MKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwNC5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDA0Lmh0bWwKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGI0MDNkNjMuLjAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDA0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NCAr
MCwwIEBACi08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Ci08aGVh
ZD4KLTx0aXRsZT50ZXN0aW5nICJhdXRvZm9jdXMiIGluIFhIVE1MIGNvbWJpbmVkIHdpdGggZHlu
YW1pYyBjaGFuZ2VzPC90aXRsZT4KLTxzdHlsZT4KLSBpbnB1dCB7IGJhY2tncm91bmQ6cmVkIH0K
LSBpbnB1dDpmb2N1cyB7IGJhY2tncm91bmQ6bGltZSB9Ci08L3N0eWxlPgotPHNjcmlwdCBsYW5n
dWFnZT0iSmF2YVNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgICBmdW5jdGlvbiBs
b2cobWVzc2FnZSkgewotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIp
LmlubmVySFRNTCArPSAiPGxpPiIrbWVzc2FnZSsiPC9saT4iOwotICAgIH0KLQotICAgIGZ1bmN0
aW9uIHRlc3QoKSB7Ci0gICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
LSAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKLSAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKLSAgICAgICAgfQotICAg
ICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVsw
XTsKLSAgICAgICAgdmFyIHAgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgncCcpWzBd
OwotICAgICAgICB2YXIgaW5wdXQgPSBwLnJlbW92ZUNoaWxkKGlucHV0KTsKLSAgICAgICAgaW5w
dXQuc2V0QXR0cmlidXRlKCdhdXRvZm9jdXMnLCdmYWxzZScpOwotICAgICAgICBwLmFwcGVuZENo
aWxkKGlucHV0KTsKLQotICAgICAgICBzZXRUaW1lb3V0KGNoZWNrLCAwKTsKLSAgICB9Ci0gICAg
Ci0gICAgZnVuY3Rpb24gY2hlY2soKSB7Ci0gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVt
ZW50ID09IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdKQotICAgICAg
ICAgICAgbG9nKCJTVUNDRVNTIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvZygiRkFJ
TFVSRSIpOwotCi0gICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Ci0gICAgfQotCi08L3Nj
cmlwdD4KLTwvaGVhZD4KLTxib2R5IG9ubG9hZD0idGVzdCgpIj4KLTxwPlRoZSBmb3JtIGNvbnRy
b2wgc2hvdWxkIGhhdmUgYSBncmVlbiBiYWNrZ3JvdW5kOiA8aW5wdXQvPjwvcD4KLTxoci8+Ci08
b2wgaWQ9ImNvbnNvbGUiPjwvb2w+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMt
b3BlcmEtMDA1LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3Vz
LW9wZXJhLTAwNS1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1
OGNkNjAuLjAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3Bl
cmEtMDA1LWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotVGhlIGZv
cm0gY29udHJvbCBzaG91bGQgaGF2ZSBhIGdyZWVuIGJhY2tncm91bmQ6IAotCi1TVUNDRVNTCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0wMDUuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwNS5odG1sCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjQyMWRhLi4wMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwNS5odG1sCisrKyAvZGV2L251bGwKQEAg
LTEsNDQgKzAsMCBAQAotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
PgotPGhlYWQ+Ci08dGl0bGU+dGVzdGluZyAiYXV0b2ZvY3VzIiBpbiBYSFRNTCB3aXRoIGR5bmFt
aWMgY2hhbmdlcyAocGFydCB0d28pPC90aXRsZT4KLTxzdHlsZT4KLSBpbnB1dCB7IGJhY2tncm91
bmQ6cmVkIH0KLSBpbnB1dDpmb2N1cyB7IGJhY2tncm91bmQ6bGltZSB9Ci08L3N0eWxlPgotPHNj
cmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgICBm
dW5jdGlvbiBsb2cobWVzc2FnZSkgewotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y29uc29sZSIpLmlubmVySFRNTCArPSAiPGxpPiIrbWVzc2FnZSsiPC9saT4iOwotICAgIH0KLQot
ICAgIGZ1bmN0aW9uIHRlc3QoKSB7Ci0gICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdOwotICAgICAgICB2YXIgcCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCdwJylbMF07Ci0gICAgICAgIHZhciBpbnB1dCA9IHAucmVtb3Zl
Q2hpbGQoaW5wdXQpOwotICAgICAgICBpbnB1dC5hdXRvZm9jdXMgPSB0cnVlOwotICAgICAgICBw
LmFwcGVuZENoaWxkKGlucHV0KTsKLQotICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7Ci0gICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7
Ci0gICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNldFRpbWVvdXQoY2hlY2ssIDApOwotICAgIH0KLSAg
ICAKLSAgICBmdW5jdGlvbiBjaGVjaygpIHsKLSAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVs
ZW1lbnQgPT0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0pCi0gICAg
ICAgICAgICBsb2coIlNVQ0NFU1MiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9nKCJG
QUlMVVJFIik7Ci0KLSAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKLSAgICB9Ci08L3Nj
cmlwdD4KLTwvaGVhZD4KLTxib2R5IG9ubG9hZD0idGVzdCgpIj4KLTxwPlRoZSBmb3JtIGNvbnRy
b2wgc2hvdWxkIGhhdmUgYSBncmVlbiBiYWNrZ3JvdW5kOiA8aW5wdXQvPjwvcD4KLTxoci8+Ci08
b2wgaWQ9ImNvbnNvbGUiPjwvb2w+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMt
b3BlcmEtMDA2LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3Vz
LW9wZXJhLTAwNi1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBl
MDRiMmUuLjAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3Bl
cmEtMDA2LWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLUFsbCBm
b3JtIGNvbnRyb2xzIGJlbG93IHNob3VsZCBoYXZlIGEgZ3JlZW4gYmFja2dyb3VuZDoKLQotCi0K
LQotCi0KLQotCi0KLQotCi0KLQotU1VDQ0VTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDA2Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1z
L2F1dG9mb2N1cy1vcGVyYS0wMDYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OTU1ZGVjNi4uMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1v
cGVyYS0wMDYuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTxodG1sPgotPGhl
YWQ+Ci08dGl0bGU+dGVzdCB3aXRoIG11bHRpcGxlIGNvbnRyb2xzIGhhdmluZyAiYXV0b2ZvY3Vz
IiBzZXQ8L3RpdGxlPgotPHN0eWxlPgotIGlucHV0LCBpbnB1dCN0ZXN0OmZvY3VzIHsgYmFja2dy
b3VuZDpsaW1lIH0KLSBpbnB1dDpmb2N1cywgaW5wdXQjdGVzdCB7IGJhY2tncm91bmQ6cmVkIH0K
LTwvc3R5bGU+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiPgotICAgIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKSB7Ci0gICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5uZXJIVE1MICs9ICI8bGk+IittZXNzYWdlKyI8L2xp
PiI7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gdGVzdCgpIHsKLSAgICAgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKLQotICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdCIpKQotICAgICAgICAgICAgbG9nKCJTVUNDRVNTIik7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvZygiRkFJTFVSRSIpOwotICAgIH0KLTwvc2Ny
aXB0PgotPC9oZWFkPgotPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgotPHA+QWxsIGZvcm0gY29udHJv
bHMgYmVsb3cgc2hvdWxkIGhhdmUgYSBncmVlbiBiYWNrZ3JvdW5kOjwvcD4KLTxwPjxpbnB1dCBh
dXRvZm9jdXM+Ci08cD48aW5wdXQgYXV0b2ZvY3VzPgotPHA+PGlucHV0IGF1dG9mb2N1cz4KLTxw
PjxpbnB1dD4KLTxwPjxpbnB1dCBhdXRvZm9jdXMgaWQ9InRlc3QiPgotPHA+PGlucHV0PgotPGhy
Lz4KLTxvbCBpZD0iY29uc29sZSI+PC9vbD4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9m
b2N1cy1vcGVyYS0wMDctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRv
Zm9jdXMtb3BlcmEtMDA3LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNDI4YzJkZi4uMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1
cy1vcGVyYS0wMDctZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1U
aGUgZm9ybSBjb250cm9sIGJlbG93IHNob3VsZCBoYXZlIGEgZ3JlZW4gYmFja2dyb3VuZDoKLQot
Ci0KLVNVQ0NFU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3Vz
LW9wZXJhLTAwNy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEt
MDA3Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MGM5YWUuLjAwMDAwMDAK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDA3Lmh0bWwKKysr
IC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08aHRtbD4KLTxoZWFkPgotPHRpdGxlPiJhdXRv
Zm9jdXMiIGFuZCB0aGUgYmx1cigpIG1ldGhvZDwvdGl0bGU+Ci08c3R5bGU+Ci0gaW5wdXQgeyBi
YWNrZ3JvdW5kOmxpbWUgfQotIGlucHV0OmZvY3VzIHsgYmFja2dyb3VuZDpyZWQgfQotPC9zdHls
ZT4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+
Ci0gICAgdmFyIGdvdEJsdXIgPSBmYWxzZTsKLQotICAgIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKSB7
Ci0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5uZXJIVE1MICs9
ICI8bGk+IittZXNzYWdlKyI8L2xpPiI7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc3dpdGNoQmx1
cigpIHsKLSAgICAgICAgZ290Qmx1ciA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIGZ1bmN0aW9u
IHRlc3QoKSB7Ci0gICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Ci0KLSAgICAgICAgaWYg
KGdvdEJsdXIpCi0gICAgICAgICAgICBsb2coIlNVQ0NFU1MiKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbG9nKCJGQUlMVVJFIik7Ci0gICAgfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9k
eSBvbmxvYWQ9InRlc3QoKSI+Ci08cD5UaGUgZm9ybSBjb250cm9sIGJlbG93IHNob3VsZCBoYXZl
IGEgZ3JlZW4gYmFja2dyb3VuZDoKLTxwPjxpbnB1dCBhdXRvZm9jdXMgb25mb2N1cz0idGhpcy5i
bHVyKCkiIG9uYmx1cj0ic3dpdGNoQmx1cigpIj4KLTxoci8+Ci08b2wgaWQ9ImNvbnNvbGUiPjwv
b2w+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDA4LWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwOC1leHBlY3Rl
ZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NzlmZWYuLjAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMtb3BlcmEtMDA4LWV4cGVjdGVkLnR4
dAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotVGhlIGZvcm0gY29udHJvbHMgYmVsb3cg
c2hvdWxkIGhhdmUgYSBncmVlbiBiYWNrZ3JvdW5kOgotCi0KLQotCi0KLQotCi1TVUNDRVNTCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9mb2N1cy1vcGVyYS0wMDguaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwOC5odG1sCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDI5ODJjLi4wMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLW9wZXJhLTAwOC5odG1sCisrKyAvZGV2L251bGwKQEAg
LTEsMzQgKzAsMCBAQAotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
PgotPGhlYWQ+Ci08dGl0bGU+ImF1dG9mb2N1cyIgaW4gWEhUTUwgYW5kIHRoZSBmb2N1cygpIG1l
dGhvZDwvdGl0bGU+Ci08c3R5bGU+Ci0gaW5wdXQsIGlucHV0I3Rlc3Q6Zm9jdXMgeyBiYWNrZ3Jv
dW5kOmxpbWUgfQotIGlucHV0I3Rlc3QsIGlucHV0OmZvY3VzIHsgYmFja2dyb3VuZDpyZWQgfQot
PC9zdHlsZT4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHR5cGU9InRleHQvamF2YXNj
cmlwdCI+Ci0gICAgZnVuY3Rpb24gbG9nKG1lc3NhZ2UpIHsKLSAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lckhUTUwgKz0gIjxsaT4iK21lc3NhZ2UrIjwvbGk+
IjsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB0ZXN0KCkgewotICAgICAgICBkb2N1bWVudC5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXS5mb2N1cygpOwotICAgICAgICAKLSAgICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKLQotICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxl
bWVudCA9PSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXSkKLSAgICAg
ICAgICAgIGxvZygiU1VDQ0VTUyIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb2coIkZB
SUxVUkUiKTsKLSAgICB9Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IG9ubG9hZD0idGVzdCgp
Ij4KLTxwPlRoZSBmb3JtIGNvbnRyb2xzIGJlbG93IHNob3VsZCBoYXZlIGEgZ3JlZW4gYmFja2dy
b3VuZDo8L3A+Ci08cD48aW5wdXQgaWQ9InRlc3QiLz48L3A+Ci08cD48aW5wdXQgYXV0b2ZvY3Vz
PSJhdXRvZm9jdXMiLz48L3A+Ci08cD48aW5wdXQgYXV0b2ZvY3VzPSJhdXRvZm9jdXMiLz48L3A+
Ci08aHIvPgotPG9sIGlkPSJjb25zb2xlIj48L29sPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvZm9jdXMuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvZm9ybXMvYXV0b2ZvY3VzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZjAyYmE0ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMv
YXV0b2ZvY3VzLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvYXV0b2ZvY3VzLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvYXV0b2ZvY3VzLWlnbm9yZS5qcyBiL0xheW91
dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2F1dG9mb2N1cy1pZ25vcmUuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgyNjYzYwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2F1dG9mb2N1cy1pZ25vcmUuanMK
QEAgLTAsMCArMSwxMyBAQAorZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgYXV0b2ZvY3VzIGlzIGln
bm9yZWQgaWYgdGhlcmUgYXJlIG90aGVyIGFjdGl2ZSBjb250cm9scy4iKTsKKwordmFyIGdvb2Qg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOworZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChnb29kKTsgCitnb29kLmZvY3VzKCk7CisKK3ZhciBiYWQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJpbnB1dCIpOworYmFkLmF1dG9mb2N1cyA9IHRydWU7Citkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKGJhZCk7CisKK3Nob3VsZEJlKCJkb2N1bWVudC5hY3RpdmVFbGVtZW50IiwgImdv
b2QiKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9hdXRvZm9jdXMuanMgYi9MYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9hdXRvZm9jdXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNTJlMTdiZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2F1dG9mb2N1cy5qcwpAQCAtMCwwICsxLDU1IEBACitk
ZXNjcmlwdGlvbigiVGVzdHMgdGhhdCBhdXRvZm9jdXMgYXR0cmlidXRlIGV4aXN0czogYXV0b2Zv
Y3VzX2VsZW1lbnQgc2hvdWxkIGJlIGF1dG9mb2N1c2VkIik7CisKK3ZhciBhdXRvZm9jdXNUcmln
Z2VyZWQgPSBmYWxzZTsKKwordmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5w
dXQiKTsKK3ZhciB0ZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7
Cit2YXIgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Cit2YXIgc2Vs
ZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Cit2YXIgYXV0b2ZvY3VzX2Vs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwordmFyIGRpc2FibGVkX2Vs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOworCithdXRvZm9jdXNfZWxl
bWVudC52YWx1ZSA9ICJGQUlMOiBJIHNob3VsZCBiZSBmb2N1c2VkIjsKK2F1dG9mb2N1c19lbGVt
ZW50LmF1dG9mb2N1cyA9IHRydWU7CitkaXNhYmxlZF9lbGVtZW50LmRpc2FibGVkID0gdHJ1ZTsK
K2Rpc2FibGVkX2VsZW1lbnQuYXV0b2ZvY3VzID0gdHJ1ZTsKKworZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChpbnB1dCk7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRleHRhcmVhKTsKK2Rv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYnV0dG9uKTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQoc2VsZWN0KTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYXV0b2ZvY3VzX2VsZW1lbnQp
OworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXNhYmxlZF9lbGVtZW50KTsKKworLy8gQXV0
b2ZvY3VzIG9uIGlucHV0IGVsZW1lbnRzCitzaG91bGRCZUZhbHNlKCJpbnB1dC5hdXRvZm9jdXMi
KTsKK2lucHV0LmF1dG9mb2N1cyA9IHRydWU7CitzaG91bGRCZVRydWUoImlucHV0LmF1dG9mb2N1
cyIpOworCisvLyBBdXRvZm9jdXMgb24gdGV4dGFyZWEgZWxlbWVudHMKK3Nob3VsZEJlRmFsc2Uo
InRleHRhcmVhLmF1dG9mb2N1cyIpOwordGV4dGFyZWEuYXV0b2ZvY3VzID0gdHJ1ZTsKK3Nob3Vs
ZEJlVHJ1ZSgidGV4dGFyZWEuYXV0b2ZvY3VzIik7CisKKy8vIEF1dG9mb2N1cyBvbiBidXR0b24g
ZWxlbWVudHMKK3Nob3VsZEJlRmFsc2UoImJ1dHRvbi5hdXRvZm9jdXMiKTsKK2J1dHRvbi5hdXRv
Zm9jdXMgPSB0cnVlOworc2hvdWxkQmVUcnVlKCJidXR0b24uYXV0b2ZvY3VzIik7CisKKy8vIEF1
dG9mb2N1cyBvbiBzZWxlY3QgZWxlbWVudHMKK3Nob3VsZEJlRmFsc2UoInNlbGVjdC5hdXRvZm9j
dXMiKTsKK3NlbGVjdC5hdXRvZm9jdXMgPSB0cnVlOworc2hvdWxkQmVUcnVlKCJzZWxlY3QuYXV0
b2ZvY3VzIik7CisKK2F1dG9mb2N1c19lbGVtZW50Lm9uZm9jdXMgPSBmdW5jdGlvbigpIHsKKwlh
dXRvZm9jdXNUcmlnZ2VyZWQgPSB0cnVlOworCWF1dG9mb2N1c19lbGVtZW50LnZhbHVlID0gIlNV
Q0NFU1M6IEknbSBmb2N1c2VkISI7Cit9CisKK2Z1bmN0aW9uIHRpbWVyRmlyZWQoKSB7CisJaWYg
KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT0gYXV0b2ZvY3VzX2VsZW1lbnQgfHwgIWF1dG9mb2N1
c1RyaWdnZXJlZCkKKwkJdGVzdEZhaWxlZCgiYXV0b2ZvY3VzX2VsZW1lbnQgaGFzIG5vdCBiZWVu
IGF1dG9mb2N1c2VkIikKK30KK3dpbmRvdy5zZXRUaW1lb3V0KHRpbWVyRmlyZWQsIDEpOworCit2
YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWZhMDkxNS4uOWZhYmRhZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0
OCBAQAorMjAwOS0xMS0xNCAgTWljaGVsYW5nZWxvIERlIFNpbW9uZSAgPG1pY2Rlc2ltQGdtYWls
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBO
ZXcsIGNsZWFuZXIgYW5kIG1vcmUgZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSAiYXV0
b2ZvY3VzIgorICAgICAgICBhdHRyaWJ1dGUuCisgICAgICAgIEZpeCBmb3IgbXVsdGlwbGUgaXNz
dWVzOgorICAgICAgICAgLSByZWFkb25seSBmb3JtIGNvbnRyb2wgZWxlbWVudHMgYXJlIGNvcnJl
Y3RseSBoYW5kbGVkOworICAgICAgICAgLSBhdXRvZm9jdXMgaXMgY29ycmVjdGx5IGhhbmRsZWQg
dmlhIERPTTsKKyAgICAgICAgIC0gYXV0b2ZvY3VzIGlzIGlnbm9yZWQgaWYgdGhlcmUgaXMgYW5v
dGhlciBmb2N1c2VkIGVsZW1lbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zMTAzMgorCisgICAgICAgIFRlc3RzOiBmYXN0L2Zvcm1zL2F1dG9mb2N1
cy1pZ25vcmUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9mb3Jtcy9hdXRvZm9jdXMuaHRtbAor
CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDogYWRkZWQgbmV3IGl2YXIgZm9yIGF1dG9mb2N1
c2VkIGZvcm0gY29udHJvbCBlbGVtZW50CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9j
dW1lbnQpOiBpbml0IG5ldyBhdXRvZm9jdXMgaXZhciB0byAwCisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6cmVtb3ZlZExhc3RSZWYpOiByZWxlYXNlIHJlZmVyZW5jZQorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OmltcGxpY2l0Q2xvc2UpOiBhdXRvZm9jdXMgYmVoYXZpb3VyCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0QXV0b2ZvY3VzZWRGb3JtQ29udHJvbEVsZW1lbnQp
OiBzZXR0ZXIKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjphdXRvZm9jdXNlZEZvcm1Db250cm9sRWxlbWVudCk6IGdldHRlcgorICAgICAgICAq
IGRvbS9FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojppc0F1dG9mb2N1c2Fi
bGVGb3JtQ29udHJvbEVsZW1lbnQpOiAKKyAgICAgICAgKiBodG1sL0hUTUxCdXR0b25FbGVtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudDo6aXNBdXRvZm9jdXNhYmxl
Rm9ybUNvbnRyb2xFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6SFRNTEZv
cm1Db250cm9sRWxlbWVudCk6IGluaXQKKyAgICAgICAgbV9hdXRvZm9jdXMgaXZhciB0byBmYWxz
ZQorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUpOiBwYXJzaW5nCisgICAgICAgIHN0dWZmIGZvciBhdXRvZm9jdXNBdHRyCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjphdHRhY2gpOiBzZXQgRG9jdW1l
bnQncworICAgICAgICBhdXRvZm9jdXNlZEZvcm1Db250cm9sRWxlbWVudCwgaWYgbmVjZXNzYXJ5
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjphdXRvZm9jdXMpOiBh
dHRyaWJ1dGUgZ2V0dGVyCisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmg6
CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50Ojppc0F1dG9mb2N1c2FibGVGb3JtQ29udHJvbEVsZW1lbnQpOgorICAg
ICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxT
ZWxlY3RFbGVtZW50Ojppc0F1dG9mb2N1c2FibGVGb3JtQ29udHJvbEVsZW1lbnQpOgorICAgICAg
ICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRl
eHRBcmVhRWxlbWVudDo6aXNBdXRvZm9jdXNhYmxlRm9ybUNvbnRyb2xFbGVtZW50KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRy
b2w6OnNldFVzZXJFZGl0ZWQpOiBjbGVhbmVkIHVwCisKIDIwMDktMTEtMTQgIEtlbnQgVGFtdXJh
ICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVy
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCmluZGV4IDkxM2Y1NzAuLjI2YjA0ZDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTM2MCw4ICsz
NjAsNiBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBib29sIGlzWEhUTUwpCiAK
ICAgICBtX3ByaW50aW5nID0gZmFsc2U7CiAgICAgCi0gICAgbV9pZ25vcmVBdXRvZm9jdXMgPSBm
YWxzZTsKLQogICAgIG1fZnJhbWUgPSBmcmFtZTsKICAgICBtX3JlbmRlckFyZW5hID0gMDsKIApA
QCAtNDMxLDYgKzQyOSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlbW92ZWRMYXN0UmVmKCkKICAgICAg
ICAgLy8gV2UgbXVzdCBtYWtlIHN1cmUgbm90IHRvIGJlIHJldGFpbmluZyBhbnkgb2Ygb3VyIGNo
aWxkcmVuIHRocm91Z2gKICAgICAgICAgLy8gdGhlc2UgZXh0cmEgcG9pbnRlcnMgb3Igd2Ugd2ls
bCBjcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUuCiAgICAgICAgIG1fZG9jVHlwZSA9IDA7CisgICAg
ICAgIG1fYXV0b2ZvY3VzZWRGb3JtQ29udHJvbEVsZW1lbnQgPSAwOwogICAgICAgICBtX2ZvY3Vz
ZWROb2RlID0gMDsKICAgICAgICAgbV9ob3Zlck5vZGUgPSAwOwogICAgICAgICBtX2FjdGl2ZU5v
ZGUgPSAwOwpAQCAtMTc5MCw2ICsxNzg5LDE3IEBAIHZvaWQgRG9jdW1lbnQ6OmltcGxpY2l0Q2xv
c2UoKQogICAgIGlmIChzdmdFeHRlbnNpb25zKCkpCiAgICAgICAgIGFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS0+c3RhcnRBbmltYXRpb25zKCk7CiAjZW5kaWYKKworICAgIGlmIChhdXRvZm9jdXNlZEZv
cm1Db250cm9sRWxlbWVudCgpKSB7CisgICAgICAgIE5vZGUqIG4gPSBmb2N1c2VkTm9kZSgpOwor
ICAgICAgICBpZiAoIW4pCisgICAgICAgICAgICBhdXRvZm9jdXNlZEZvcm1Db250cm9sRWxlbWVu
dCgpLT5mb2N1cygpOworICAgICAgICBlbHNlIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAg
ICAgICAgICAgIEVsZW1lbnQqIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CisgICAgICAg
ICAgICBpZiAoIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgYXV0
b2ZvY3VzZWRGb3JtQ29udHJvbEVsZW1lbnQoKS0+Zm9jdXMoKTsKKyAgICAgICAgfQorICAgIH0K
IH0KIAogdm9pZCBEb2N1bWVudDo6c2V0UGFyc2luZyhib29sIGIpCkBAIC0yNjMwLDYgKzI2NDAs
MTEgQEAgdm9pZCBEb2N1bWVudDo6c2V0RGFzaGJvYXJkUmVnaW9ucyhjb25zdCBWZWN0b3I8RGFz
aGJvYXJkUmVnaW9uVmFsdWU+JiByZWdpb25zKQogfQogI2VuZGlmCiAKK3ZvaWQgRG9jdW1lbnQ6
OnNldEF1dG9mb2N1c2VkRm9ybUNvbnRyb2xFbGVtZW50KFBhc3NSZWZQdHI8SFRNTEZvcm1Db250
cm9sRWxlbWVudD4gbmV3QXV0b2ZvY3VzZWRGb3JtQ29udHJvbEVsZW1lbnQpCit7CisgICAgbV9h
dXRvZm9jdXNlZEZvcm1Db250cm9sRWxlbWVudCA9IG5ld0F1dG9mb2N1c2VkRm9ybUNvbnRyb2xF
bGVtZW50OworfQorCiBib29sIERvY3VtZW50OjpzZXRGb2N1c2VkTm9kZShQYXNzUmVmUHRyPE5v
ZGU+IG5ld0ZvY3VzZWROb2RlKQogeyAgICAKICAgICAvLyBNYWtlIHN1cmUgbmV3Rm9jdXNlZE5v
ZGUgaXMgYWN0dWFsbHkgaW4gdGhpcyBkb2N1bWVudApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMzI5NTU3Ny4uZjYxZWQz
NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCkBAIC01NDksMTYgKzU0OSwxNCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHNlbGVj
dGVkU3R5bGVzaGVldFNldCgpIGNvbnN0OwogICAgIHZvaWQgc2V0U2VsZWN0ZWRTdHlsZXNoZWV0
U2V0KGNvbnN0IFN0cmluZyYpOwogCisgICAgdm9pZCBzZXRBdXRvZm9jdXNlZEZvcm1Db250cm9s
RWxlbWVudChQYXNzUmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KTsKKyAgICBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50KiBhdXRvZm9jdXNlZEZvcm1Db250cm9sRWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fYXV0b2ZvY3VzZWRGb3JtQ29udHJvbEVsZW1lbnQuZ2V0KCk7IH0KKwogICAgIGJv
b2wgc2V0Rm9jdXNlZE5vZGUoUGFzc1JlZlB0cjxOb2RlPik7CiAgICAgTm9kZSogZm9jdXNlZE5v
ZGUoKSBjb25zdCB7IHJldHVybiBtX2ZvY3VzZWROb2RlLmdldCgpOyB9CiAKICAgICB2b2lkIGdl
dEZvY3VzYWJsZU5vZGVzKFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYpOwogICAgIAotICAgIC8vIFRo
ZSBtX2lnbm9yZUF1dG9mb2N1cyBmbGFnIHNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0aGUgZG9j
dW1lbnQgaGFzIGJlZW4gY2hhbmdlZCBieSB0aGUgdXNlciBlbm91Z2ggCi0gICAgLy8gZm9yIFdl
YkNvcmUgdG8gaWdub3JlIHRoZSBhdXRvZm9jdXMgYXR0cmlidXRlIG9uIGFueSBmb3JtIGNvbnRy
b2xzCi0gICAgYm9vbCBpZ25vcmVBdXRvZm9jdXMoKSBjb25zdCB7IHJldHVybiBtX2lnbm9yZUF1
dG9mb2N1czsgfTsKLSAgICB2b2lkIHNldElnbm9yZUF1dG9mb2N1cyhib29sIHNob3VsZElnbm9y
ZSA9IHRydWUpIHsgbV9pZ25vcmVBdXRvZm9jdXMgPSBzaG91bGRJZ25vcmU7IH07Ci0KICAgICB2
b2lkIHNldEhvdmVyTm9kZShQYXNzUmVmUHRyPE5vZGU+KTsKICAgICBOb2RlKiBob3Zlck5vZGUo
KSBjb25zdCB7IHJldHVybiBtX2hvdmVyTm9kZS5nZXQoKTsgfQogCkBAIC05OTksMTIgKzk5Nywx
MSBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3ByaW50aW5nOwogICAgIAotICAgIGJvb2wgbV9p
Z25vcmVBdXRvZm9jdXM7Ci0KICAgICBQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CiAKICAgICBDb2xv
ciBtX3RleHRDb2xvcjsKIAorICAgIFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiBtX2F1
dG9mb2N1c2VkRm9ybUNvbnRyb2xFbGVtZW50OwogICAgIFJlZlB0cjxOb2RlPiBtX2ZvY3VzZWRO
b2RlOwogICAgIFJlZlB0cjxOb2RlPiBtX2hvdmVyTm9kZTsKICAgICBSZWZQdHI8Tm9kZT4gbV9h
Y3RpdmVOb2RlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvV2ViQ29yZS9k
b20vRWxlbWVudC5oCmluZGV4IGQyNzk3NmEuLjVkM2JkYzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuaAorKysgYi9XZWJDb3JlL2RvbS9FbGVtZW50LmgKQEAgLTI0Miw2ICsyNDIs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCB3aWxsVmFsaWRhdGUoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkRm9ybUNvbnRy
b2xFbGVtZW50KCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBdXRvZm9j
dXNhYmxlRm9ybUNvbnRyb2xFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAg
IHZpcnR1YWwgYm9vbCBmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNo
ZXNSZW5kZXJlcihib29sKSB7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9u
RWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmgKaW5kZXggZjViOWI2
Mi4uNjEyNTJlZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmgK
KysrIGIvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmgKQEAgLTYyLDYgKzYyLDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBlbnVtIFR5cGUgeyBTVUJNSVQsIFJFU0VULCBCVVRUT04g
fTsKICAgICB2aXJ0dWFsIGJvb2wgaXNPcHRpb25hbEZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0F1dG9mb2N1c2FibGVGb3JtQ29udHJvbEVs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBUeXBlIG1fdHlwZTsKICAgICBi
b29sIG1fYWN0aXZlU3VibWl0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29u
dHJvbEVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3Bw
CmluZGV4IGVhNDY5ODAuLjg5ZDRhZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9y
bUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxl
bWVudC5jcHAKQEAgLTUxLDYgKzUxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmKQogICAg
IDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQogICAgICwgbV9mb3JtKGYpCisgICAgLCBtX2F1
dG9mb2N1cyhmYWxzZSkKICAgICAsIG1fZGlzYWJsZWQoZmFsc2UpCiAgICAgLCBtX3JlYWRPbmx5
KGZhbHNlKQogICAgICwgbV9yZXF1aXJlZChmYWxzZSkKQEAgLTkwLDYgKzkxLDggQEAgdm9pZCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUgKmF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBuYW1lQXR0cikKICAgICAgICAg
c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhdXRv
Zm9jdXNBdHRyKQorICAgICAgICBtX2F1dG9mb2N1cyA9ICFhdHRyLT5pc051bGwoKTsKICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZGlzYWJsZWRBdHRyKSB7CiAgICAgICAgIGJvb2wgb2xk
RGlzYWJsZWQgPSBtX2Rpc2FibGVkOwogICAgICAgICBtX2Rpc2FibGVkID0gIWF0dHItPmlzTnVs
bCgpOwpAQCAtMTI2LDE4ICsxMjksOSBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF0
dGFjaCgpCiAgICAgLy8gb24gdGhlIHJlbmRlcmVyLgogICAgIGlmIChyZW5kZXJlcigpKQogICAg
ICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwotICAgICAgICAKLSAgICAvLyBG
b2N1cyB0aGUgZWxlbWVudCBpZiBpdCBzaG91bGQgaG9ub3VyIGl0cyBhdXRvZm9jdXMgYXR0cmli
dXRlLgotICAgIC8vIFdlIGhhdmUgdG8gZGV0ZXJtaW5lIGlmIHRoZSBlbGVtZW50IGlzIGEgVGV4
dEFyZWEvSW5wdXQvQnV0dG9uL1NlbGVjdCwKLSAgICAvLyBpZiBpbnB1dCB0eXBlIGhpZGRlbiBp
Z25vcmUgYXV0b2ZvY3VzLiBTbyBpZiBkaXNhYmxlZCBvciByZWFkb25seS4KLSAgICBib29sIGlz
SW5wdXRUeXBlSGlkZGVuID0gZmFsc2U7Ci0gICAgaWYgKGhhc1RhZ05hbWUoaW5wdXRUYWcpKQot
ICAgICAgICBpc0lucHV0VHlwZUhpZGRlbiA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQq
Pih0aGlzKS0+aXNJbnB1dFR5cGVIaWRkZW4oKTsKIAotICAgIGlmIChhdXRvZm9jdXMoKSAmJiBy
ZW5kZXJlcigpICYmICFkb2N1bWVudCgpLT5pZ25vcmVBdXRvZm9jdXMoKSAmJiAhaXNSZWFkT25s
eUZvcm1Db250cm9sKCkgJiYKLSAgICAgICAgICAgICgoaGFzVGFnTmFtZShpbnB1dFRhZykgJiYg
IWlzSW5wdXRUeXBlSGlkZGVuKSB8fCBoYXNUYWdOYW1lKHNlbGVjdFRhZykgfHwKLSAgICAgICAg
ICAgICAgaGFzVGFnTmFtZShidXR0b25UYWcpIHx8IGhhc1RhZ05hbWUodGV4dGFyZWFUYWcpKSkK
LSAgICAgICAgIGZvY3VzKCk7CisgICAgaWYgKGF1dG9mb2N1cygpICYmICFkaXNhYmxlZCgpICYm
IGlzQXV0b2ZvY3VzYWJsZUZvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICBkb2N1bWVudCgp
LT5zZXRBdXRvZm9jdXNlZEZvcm1Db250cm9sRWxlbWVudCh0aGlzKTsKIH0KIAogdm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkKQEAgLTIxNSw3
ICsyMDksNyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFJlYWRPbmx5KGJvb2wg
YikKIAogYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjphdXRvZm9jdXMoKSBjb25zdAogewot
ICAgIHJldHVybiBoYXNBdHRyaWJ1dGUoYXV0b2ZvY3VzQXR0cik7CisgICAgcmV0dXJuIG1fYXV0
b2ZvY3VzOwogfQogCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldEF1dG9mb2N1cyhi
b29sIGIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5o
IGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAppbmRleCBiNWRjN2NlLi5h
MmRlMjhmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5o
CisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKQEAgLTEyOSw2ICsx
MjksNyBAQCBwcml2YXRlOgogCiAgICAgSFRNTEZvcm1FbGVtZW50KiBtX2Zvcm07CiAgICAgUmVm
UHRyPFZhbGlkaXR5U3RhdGU+IG1fdmFsaWRpdHlTdGF0ZTsKKyAgICBib29sIG1fYXV0b2ZvY3Vz
IDogMTsKICAgICBib29sIG1fZGlzYWJsZWQgOiAxOwogICAgIGJvb2wgbV9yZWFkT25seSA6IDE7
CiAgICAgYm9vbCBtX3JlcXVpcmVkIDogMTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCmluZGV4IDcx
ZDIxZDYuLmFiMTQ1NzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaApAQCAtMjYzLDYgKzI2Myw3
IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNPcHRpb25hbEZvcm1Db250cm9sKCkg
Y29uc3QgeyByZXR1cm4gIWlzUmVxdWlyZWRGb3JtQ29udHJvbCgpOyB9CiAgICAgdmlydHVhbCBi
b29sIGlzUmVxdWlyZWRGb3JtQ29udHJvbCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0F1
dG9mb2N1c2FibGVGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBpbnB1dFR5cGUo
KSAhPSBISURERU47IH0KIAogICAgIFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBjcmVhdGVU
ZW1wb3JhcnlGb3JtRm9ySXNJbmRleCgpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCmluZGV4
IDhmNTc1ZDIuLmYzZGZjZmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxl
bWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCkBAIC0xMzEsNiAr
MTMxLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29s
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc09wdGlvbmFsRm9ybUNvbnRyb2woKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzQXV0b2ZvY3VzYWJsZUZvcm1Db250cm9s
RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIFNlbGVjdEVsZW1lbnREYXRh
IG1fZGF0YTsKICAgICBDb2xsZWN0aW9uQ2FjaGUgbV9jb2xsZWN0aW9uSW5mbzsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRN
TFRleHRBcmVhRWxlbWVudC5oCmluZGV4IDIzZjYxZDMuLjNiYTcyMGEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuaApAQCAtMTAyLDYgKzEwMiw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNPcHRpb25hbEZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gIWlzUmVxdWly
ZWRGb3JtQ29udHJvbCgpOyB9CiAgICAgdmlydHVhbCBib29sIGlzUmVxdWlyZWRGb3JtQ29udHJv
bCgpIGNvbnN0IHsgcmV0dXJuIHJlcXVpcmVkKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBdXRv
Zm9jdXNhYmxlRm9ybUNvbnRyb2xFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAg
ICAgaW50IG1fcm93czsKICAgICBpbnQgbV9jb2xzOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2wuY3BwCmluZGV4IDA5Y2FhYjkuLjNkMGQ3ODcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbC5jcHAKQEAgLTIwMiwxMiArMjAyLDYgQEAgdm9pZCBSZW5kZXJUZXh0
Q29udHJvbDo6c2V0SW5uZXJUZXh0VmFsdWUoY29uc3QgU3RyaW5nJiBpbm5lclRleHRWYWx1ZSkK
ICAgICBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKS0+c2V0Rm9ybUNvbnRyb2xWYWx1ZU1h
dGNoZXNSZW5kZXJlcih0cnVlKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6c2V0VXNl
ckVkaXRlZChib29sIGlzVXNlckVkaXRlZCkKLXsKLSAgICBtX3VzZXJFZGl0ZWQgPSBpc1VzZXJF
ZGl0ZWQ7Ci0gICAgZG9jdW1lbnQoKS0+c2V0SWdub3JlQXV0b2ZvY3VzKGlzVXNlckVkaXRlZCk7
Ci19Ci0KIGludCBSZW5kZXJUZXh0Q29udHJvbDo6c2VsZWN0aW9uU3RhcnQoKQogewogICAgIEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2wuaAppbmRleCBjZGQ4NzE2Li45MDgyNzdhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sLmgKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RWRp
dGVkKGJvb2wgaXNFZGl0ZWQpIHsgbV9lZGl0ZWQgPSBpc0VkaXRlZDsgfQogCiAgICAgYm9vbCBp
c1VzZXJFZGl0ZWQoKSBjb25zdCB7IHJldHVybiBtX3VzZXJFZGl0ZWQ7IH0KLSAgICB2b2lkIHNl
dFVzZXJFZGl0ZWQoYm9vbCBpc1VzZXJFZGl0ZWQpOworICAgIHZvaWQgc2V0VXNlckVkaXRlZChi
b29sIGlzVXNlckVkaXRlZCkgeyBtX3VzZXJFZGl0ZWQgPSBpc1VzZXJFZGl0ZWQ7IH0KIAogICAg
IGludCBzZWxlY3Rpb25TdGFydCgpOwogICAgIGludCBzZWxlY3Rpb25FbmQoKTs=
</data>
<flag name="review"
          id="24932"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>