<?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>76035</bug_id>
          
          <creation_ts>2012-01-10 23:47:57 -0800</creation_ts>
          <short_desc>Add state attribute to history&apos;s dom interface.</short_desc>
          <delta_ts>2012-02-08 02:39:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>76517</dependson>
    
    <dependson>77165</dependson>
    
    <dependson>77295</dependson>
          <blocked>76198</blocked>
    
    <blocked>77493</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Pablo Flouret">pf</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>haraken</cc>
    
    <cc>ian</cc>
    
    <cc>japhet</cc>
    
    <cc>mihaip</cc>
    
    <cc>ojan</cc>
    
    <cc>oliver</cc>
    
    <cc>pnormand</cc>
    
    <cc>priyajeet.hora</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>533682</commentid>
    <comment_count>0</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-10 23:47:57 -0800</bug_when>
    <thetext>http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#dom-history-state</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533698</commentid>
    <comment_count>1</comment_count>
      <attachid>121987</attachid>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-11 00:10:44 -0800</bug_when>
    <thetext>Created attachment 121987
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533715</commentid>
    <comment_count>2</comment_count>
      <attachid>121987</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-11 00:33:54 -0800</bug_when>
    <thetext>Comment on attachment 121987
proposed patch

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

Thanks for working on this bug.  One issue below:

&gt; Source/WebCore/bindings/js/JSHistoryCustom.cpp:170
&gt; +    History* history = static_cast&lt;History*&gt;(impl());
&gt; +    return history-&gt;stateObject()-&gt;deserialize(exec, globalObject(), 0);

I think this isn&apos;t quite right.  Every time we call this getter, we&apos;re going to deserialize the state object again.  That means

history.state !== history.state

which doesn&apos;t seem to match the spec.  If that&apos;s what other browsers do, then we can change the spec, but it&apos;s more likely that we should cache the result of deserializing the SerializedScriptValue and aways return the same value.

Would you be willing to test Firefox and/or IE to see whether they create a new deserialization every time you call the getter?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533717</commentid>
    <comment_count>3</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-11 00:36:12 -0800</bug_when>
    <thetext>Good point, i&apos;ll check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534108</commentid>
    <comment_count>4</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-11 12:06:21 -0800</bug_when>
    <thetext>Firefox caches the value indeed.

Is there a preferred way to cache the value? Should i save the deserialized ScriptValue in the History object directly or are there other things i should take into consideration? (i saw some references to CachedAttribute in some IDLs, would that be of use here?)

Pardon the seemingly obvious questions, i&apos;m fairly new to webkit. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534162</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-01-11 12:53:07 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 121987 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121987&amp;action=review
&gt; 
&gt; Thanks for working on this bug.  One issue below:
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSHistoryCustom.cpp:170
&gt; &gt; +    History* history = static_cast&lt;History*&gt;(impl());
&gt; &gt; +    return history-&gt;stateObject()-&gt;deserialize(exec, globalObject(), 0);
&gt; 
&gt; I think this isn&apos;t quite right.  Every time we call this getter, we&apos;re going to deserialize the state object again.  That means
&gt; 
&gt; history.state !== history.state
&gt; 
&gt; which doesn&apos;t seem to match the spec.  If that&apos;s what other browsers do, then we can change the spec, but it&apos;s more likely that we should cache the result of deserializing the SerializedScriptValue and aways return the same value.
&gt; 

I think it&apos;s even more complicated than this.  In addition to the requirement that &quot;history.state == history.state&quot; I think the identity has to match with the object in the pop state event.  I think the following JS code is valid:

// Create a new object.
var stateObject = new Array;

// Use it as the state object in a replaceState.  This clones the object.
history.replaceState(stateObject, null, null);

// Since the actual history.state is a structured clone, it should not match our original object.
ASSERT(history.state != stateObject);

// Now let&apos;s refetch a copy of history.state to store;
stateObject = history.state;

// Now let&apos;s do a pushstate to add a history entry.
history.pushState(null, null, null);

// Now let&apos;s go back to our original history entry which has a state object that we&apos;ve stored a reference to already.
history.back();

// Now a handler for the popstate event.
onpopstate = function(event) {
    // Our stored reference to stateObject should match the current state object.
    ASSERT(history.state == stateObject);
    // AND our stored reference to stateObject should match the state object in this popstate event.
    ASSERT(event.state == stateObject);
    // For good measure, the event&apos;s state object and the current state object should also both match.
    ASSERT(event.state == history.state);
 }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534169</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-01-11 12:57:10 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; I think it&apos;s even more complicated than this.  In addition to the requirement that &quot;history.state == history.state&quot; I think the identity has to match with the object in the pop state event.  I think the following JS code is valid:
&gt; ...

By the way, my suggestion to make that all happen is to not only store the structured clone on the HistoryItem, but to also store a create-on-read deserialized version of the cloned object on the HistoryItem...  then all access to the state object goes through the HistoryItem.

My instinct says it&apos;s possible either WebKit2&apos;s out of process history or Chrome&apos;s out of process history will cause a hiccup here.  I can&apos;t say for sure without inspecting code a little closer which I don&apos;t have time to do right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534172</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-01-11 13:00:29 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; I think it&apos;s even more complicated than this.  In addition to the requirement that &quot;history.state == history.state&quot; I think the identity has to match with the object in the pop state event.  I think the following JS code is valid:

Here&apos;s an updated snippet of code with slight tweaks:

// Create a new object.
var stateObject = new Array;

// Use it as the state object in a replaceState.  This clones the object.
history.replaceState(stateObject, null, null);

// Since the actual history.state is a structured clone, it should not match our original object.
ASSERT(history.state != stateObject);

// Now let&apos;s refetch a copy of history.state to store;
stateObject = history.state;

// Our reference and the history.state itself should be the same.  This is now Adam&apos;s original assertion.
ASSERT(stateObject == history.state);

// Now let&apos;s do a pushstate to add a history entry.
history.pushState(null, null, null);

// Now add a handler for the popstate event.
onpopstate = function(event) {
    // Our stored reference to stateObject should match the current state object.
    ASSERT(history.state == stateObject);
    // AND our stored reference to stateObject should match the state object in this popstate event.
    ASSERT(event.state == stateObject);
    // For good measure, the event&apos;s state object and the current state object should also both match.
    ASSERT(event.state == history.state);
 }

// Now let&apos;s go back to our original history entry which has a state object that we&apos;ve stored a reference to already.
// This will fire our popstate event handler above.
history.back();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534177</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-11 13:03:27 -0800</bug_when>
    <thetext>&gt; By the way, my suggestion to make that all happen is to not only store the structured clone on the HistoryItem, but to also store a create-on-read deserialized version of the cloned object on the HistoryItem...  then all access to the state object goes through the HistoryItem.

That makes sense to me.

&gt; My instinct says it&apos;s possible either WebKit2&apos;s out of process history or Chrome&apos;s out of process history will cause a hiccup here.  I can&apos;t say for sure without inspecting code a little closer which I don&apos;t have time to do right now.

Let&apos;s be careful about that in reviewing the patch.

Pablo, do you want to try Brady&apos;s approach?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534180</commentid>
    <comment_count>9</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-11 13:06:02 -0800</bug_when>
    <thetext>Yeah, i&apos;ll give it a shot and shout if i need some help.

Any pointers as to where to look for potential issues with the out-of-process stuff?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534192</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-01-11 13:13:28 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Yeah, i&apos;ll give it a shot and shout if i need some help.
&gt; 
&gt; Any pointers as to where to look for potential issues with the out-of-process stuff?

I would suggest to not worry about it for now.  If OOP stuff is actually a hiccup, it will be an additional task on top of the WebCore work so it shouldn&apos;t effect how you start out.

Just get a layout test going that covers what you covered before and my new code snippet, then hack WebCore till it works.

We&apos;ll revisit OOP later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534270</commentid>
    <comment_count>11</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2012-01-11 14:33:51 -0800</bug_when>
    <thetext>In the callback:

    ASSERT(history.state == stateObject);

No, because history.state is a new clone, and stateObject an old clone.

    ASSERT(event.state == stateObject);

No, same reason (same two clones as the previous assert).

See &quot;traverse the history&quot;, step 10, and notice how that variable is used in steps 11 and 14.

The others look right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534290</commentid>
    <comment_count>12</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-01-11 14:53:34 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; In the callback:
&gt; 
&gt;     ASSERT(history.state == stateObject);
&gt; 
&gt; No, because history.state is a new clone, and stateObject an old clone.
&gt; 
&gt;     ASSERT(event.state == stateObject);
&gt; 
&gt; No, same reason (same two clones as the previous assert).
&gt; 
&gt; See &quot;traverse the history&quot;, step 10, and notice how that variable is used in steps 11 and 14.
&gt; 
&gt; The others look right.

I see my search for &quot;structured clone&quot; in the spec failed!  I was also kind of surprised that it wasn&apos;t a new structured clone.  This makes more sense.  Updated code snippet:

// Create a new object.
var stateObject = new Array;

// Use it as the state object in a replaceState.  This clones the object.
history.replaceState(stateObject, null, null);

// Since the actual history.state is a structured clone, it should not match our original object.
ASSERT(history.state != stateObject);

// Now let&apos;s refetch a copy of history.state to store;
stateObject = history.state;

// Our reference and the history.state itself should be the same.  This is now Adam&apos;s original assertion.
ASSERT(stateObject == history.state);

// Now let&apos;s do a pushstate to add a history entry.
history.pushState(null, null, null);

// Now add a handler for the popstate event.
onpopstate = function(event) {
    // The event&apos;s state object and the current state object should match.
    ASSERT(event.state == history.state);
    // Our stored reference to stateObject will not match the current state object, as it is a structured clone of the history item&apos;s state object.
    ASSERT(history.state != stateObject);
    // Our stored reference to stateObject will not match the state object in this pop state event, as it is the same as history.state which is a structured clone of the history item&apos;s state object.
    ASSERT(event.state != stateObject);
 
 }

// Now let&apos;s go back to our original history entry which has a state object that we&apos;ve stored a reference to already.
// This will fire our popstate event handler above.
history.back();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535191</commentid>
    <comment_count>13</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-12 14:45:19 -0800</bug_when>
    <thetext>I&apos;m not sure create-on-read is fully feasible.

I&apos;m looking at the PopStateEvent part and it doesn&apos;t get the state object directly from the HistoryItem, it gets the serialized state through its constructor when it&apos;s created, eventually passed down from FrameLoader and Document, which in some cases save the value in m_pendingStateObject and dispatch the event after some things happen (document finishes loading, etc).

Would it be safe to keep a frame in the event instead and get the state directly from the HistoryItem? I suppose, for starters, {FrameLoader,Document}::m_pendingStateObject should always be the same as currentItem()-&gt;stateObject(). Are there any other potential issues? for instance, can the event survive a history navigation and then get a different state object via currentItem()-&gt;stateObject()?.

(And might there be race conditions in OOP between the points where you get the state object, serialize it and store that back in the HistoryItem?)

Should we just save both serialized and deserialized values from the get go (useless memory usage, i guess)?, or just serialize to check for errors, and just keep and pass around the deserialized one?

Any thoughts/ideas?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535196</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-12 14:54:33 -0800</bug_when>
    <thetext>Maybe we should tackle the PopStateEvent aspects in a second patch?  If we focus on history.state first, it sounds like create-on-read should be possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535227</commentid>
    <comment_count>15</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-01-12 15:39:00 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Maybe we should tackle the PopStateEvent aspects in a second patch?  If we focus on history.state first, it sounds like create-on-read should be possible.

Agreed.  I think create-on-read will be possible for both, but that the PopStateEvent case is more complicated.  Don&apos;t let it hold you up.  Since we&apos;re basically adding a new feature it really shouldn&apos;t be controversial to do it in stages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535831</commentid>
    <comment_count>16</comment_count>
      <attachid>122471</attachid>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-13 11:20:15 -0800</bug_when>
    <thetext>Created attachment 122471
use only one deserialization for history.state</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535865</commentid>
    <comment_count>17</comment_count>
      <attachid>122471</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-01-13 11:48:26 -0800</bug_when>
    <thetext>Comment on attachment 122471
use only one deserialization for history.state

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

Good first swipe, but I think there&apos;s some straightforward ways to make it much cleaner.

&gt; Source/WebCore/bindings/js/JSHistoryCustom.cpp:181
&gt; +JSValue JSHistory::state(ExecState* exec) const
&gt; +{
&gt; +    History* history = static_cast&lt;History*&gt;(impl());
&gt; +
&gt; +    ScriptValue state = history-&gt;state();
&gt; +
&gt; +    if (state.hasNoValue()) {
&gt; +        state = ScriptValue(exec-&gt;globalData(), history-&gt;serializedState()-&gt;deserialize(exec, globalObject(), 0));
&gt; +        history-&gt;setState(state);
&gt; +    }
&gt; +
&gt; +    return state.jsValue();
&gt; +}
&gt; +

You&apos;re putting logic in the JS wrapper that belongs in the dom object itself (History.cpp)

&gt; Source/WebCore/bindings/v8/custom/V8HistoryCustom.cpp:58
&gt; +v8::Handle&lt;v8::Value&gt; V8History::stateAccessorGetter(v8::Local&lt;v8::String&gt; name, const v8::AccessorInfo&amp; info)
&gt; +{
&gt; +    History* history = V8History::toNative(info.Holder());
&gt; +
&gt; +    ScriptValue state = history-&gt;state();
&gt; +
&gt; +    if (state.hasNoValue()) {
&gt; +        state = ScriptValue(history-&gt;serializedState()-&gt;deserialize());
&gt; +        history-&gt;setState(state);
&gt; +    }
&gt; +
&gt; +    return state.v8Value();
&gt; +}
&gt; +

And as a result, you have to dupe it here.

&gt; Source/WebCore/history/HistoryItem.cpp:472
&gt;  void HistoryItem::setStateObject(PassRefPtr&lt;SerializedScriptValue&gt; object)
&gt;  {
&gt;      m_stateObject = object;
&gt; +    clearDeserializedStateObject();
&gt; +}
&gt; +
&gt; +void HistoryItem::setDeserializedStateObject(ScriptValue&amp; object)
&gt; +{
&gt; +    m_deserializedStateObject = object;
&gt; +}
&gt; +
&gt; +void HistoryItem::clearDeserializedStateObject()
&gt; +{
&gt; +    m_deserializedStateObject = ScriptValue();
&gt;  }

HistoryItem itself should be the keeper of the deserializedStateObject.

All it needs is a pointer to that object and a single new method ::deserializedStateObject()

That method is what will create-on-read the ScriptValue.

&gt; Source/WebCore/page/History.cpp:120
&gt; +SerializedScriptValue* History::serializedState() const
&gt; +{
&gt; +    if (m_frame) {
&gt; +        HistoryItem* historyItem = m_frame-&gt;loader()-&gt;history()-&gt;currentItem();
&gt; +        if (historyItem &amp;&amp; historyItem-&gt;stateObject())
&gt; +            return historyItem-&gt;stateObject();
&gt; +    }
&gt; +
&gt; +    return SerializedScriptValue::nullValue();
&gt; +}

You don&apos;t need this.

&gt; Source/WebCore/page/History.cpp:131
&gt; +ScriptValue History::state() const
&gt; +{
&gt; +    if (m_frame) {
&gt; +        HistoryItem* historyItem = m_frame-&gt;loader()-&gt;history()-&gt;currentItem();
&gt; +        if (historyItem)
&gt; +            return historyItem-&gt;deserializedStateObject();
&gt; +    }
&gt; +
&gt; +    return ScriptValue();
&gt; +}

This can be as simple as 
if (m_frame) {
    if (HistoryItem* item = m_frame-&gt;loader()-&gt;history()-&gt;currentItem())
        return item-&gt;deserializedStateObject();
}

return ScriptValue();

&gt; Source/WebCore/page/History.cpp:141
&gt; +void History::setState(ScriptValue&amp; object)
&gt; +{
&gt; +    if (m_frame) {
&gt; +        HistoryItem* historyItem = m_frame-&gt;loader()-&gt;history()-&gt;currentItem();
&gt; +        if (historyItem)
&gt; +            historyItem-&gt;setDeserializedStateObject(object);
&gt; +    }
&gt; +
&gt; +}

You don&apos;t need this.

&gt; Source/WebCore/page/History.idl:40
&gt; +        readonly attribute [CustomGetter] DOMObject state;

This really doesn&apos;t need to be custom.  The create-on-read logic should be in History/HistoryItem code, and you can use a generated wrapper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535883</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-13 12:24:38 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/page/History.idl:40
&gt; &gt; +        readonly attribute [CustomGetter] DOMObject state;
&gt; 
&gt; This really doesn&apos;t need to be custom.  The create-on-read logic should be in History/HistoryItem code, and you can use a generated wrapper.

If you need a ScriptState to deserialize the SerializedScriptValue, you should be able to use the [CallWith=ScriptState] attribute in the IDL.  (Hopefully that works with attributes.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536073</commentid>
    <comment_count>19</comment_count>
      <attachid>122518</attachid>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-13 16:11:57 -0800</bug_when>
    <thetext>Created attachment 122518
new try based on brady&apos;s suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536076</commentid>
    <comment_count>20</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-13 16:14:47 -0800</bug_when>
    <thetext>I didn&apos;t see a way to set a value on a ScriptValue after creation, so i went with a reference instead of a pointer, if you prefer some other way, let me know.

Also, there isn&apos;t support for CallWith on attributes in the generators so i went with a JSCCustomGetter that just passes off the ScriptState, i can try to add support for CallWith for attributes if you prefer, but perl isn&apos;t one of my strong suits, so ymmv :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536083</commentid>
    <comment_count>21</comment_count>
      <attachid>122518</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-13 16:34:32 -0800</bug_when>
    <thetext>Comment on attachment 122518
new try based on brady&apos;s suggestions

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

&gt; Source/WebCore/page/History.cpp:112
&gt; +ScriptValue History::state(ScriptState* exec) const

exec -&gt; scriptState

&gt; Source/WebCore/page/History.cpp:114
&gt; +    if (m_frame) {

Prefer early exist.  You can just say:

if (!m_frame)
    return ScriptValue();

etc

&gt; Source/WebCore/page/History.cpp:116
&gt; +            ScriptValue&amp; state = historyItem-&gt;deserializedStateObject();

This is kind of subtle given that you&apos;re assign to a non-const reference.

Maybe you should have historyItem do this work?

&gt; Source/WebCore/page/History.cpp:123
&gt; +#if USE(V8)
&gt; +                state = ScriptValue(historyItem-&gt;stateObject()-&gt;deserialize());
&gt; +#else
&gt; +                ASSERT(exec);
&gt; +                state = ScriptValue::deserialize(exec, historyItem-&gt;stateObject());
&gt; +#endif

I would just add a ScriptValue::deserialize to the V8 version of SerializedScriptValue that accepts a ScriptState so you don&apos;t need this ifdef.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536087</commentid>
    <comment_count>22</comment_count>
      <attachid>122518</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-01-13 16:43:54 -0800</bug_when>
    <thetext>Comment on attachment 122518
new try based on brady&apos;s suggestions

Attachment 122518 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11157791</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536090</commentid>
    <comment_count>23</comment_count>
      <attachid>122518</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-01-13 16:50:58 -0800</bug_when>
    <thetext>Comment on attachment 122518
new try based on brady&apos;s suggestions

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

&gt;&gt; Source/WebCore/page/History.cpp:116
&gt;&gt; +            ScriptValue&amp; state = historyItem-&gt;deserializedStateObject();
&gt; 
&gt; This is kind of subtle given that you&apos;re assign to a non-const reference.
&gt; 
&gt; Maybe you should have historyItem do this work?

Not maybe - definitely!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536092</commentid>
    <comment_count>24</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-01-13 17:00:09 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; I didn&apos;t see a way to set a value on a ScriptValue after creation, so i went with a reference instead of a pointer, if you prefer some other way, let me know.

The references kinda muck up the code and make HistoryItem bigger than it needs to be.  An alternate suggestions is OwnPtr&lt;ScriptValue&gt; and use &quot;new ScriptValue&quot; when it&apos;s time to create it.

&gt; Also, there isn&apos;t support for CallWith on attributes in the generators so i went with a JSCCustomGetter that just passes off the ScriptState, i can try to add support for CallWith for attributes if you prefer, but perl isn&apos;t one of my strong suits, so ymmv :-)

We should add support for CallWith in attributes.  It might come in handy in the future, and it is something that is easily scriptable in principle.  The JSCustom* code should be used only for truly one-off squirrley behavior that can&apos;t be scripted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536338</commentid>
    <comment_count>25</comment_count>
      <attachid>122586</attachid>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-15 20:33:29 -0800</bug_when>
    <thetext>Created attachment 122586
add [CallWith] support for attributes and cleanup from review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536353</commentid>
    <comment_count>26</comment_count>
      <attachid>122586</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-15 21:15:26 -0800</bug_when>
    <thetext>Comment on attachment 122586
add [CallWith] support for attributes and cleanup from review comments

Attachment 122586 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11252064

New failing tests:
fast/loader/stateobjects/pushstate-state-attribute-object-types.html
fast/dom/Window/window-appendages-cleared.html
fast/loader/stateobjects/pushstate-state-attribute-only-one-deserialization.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536389</commentid>
    <comment_count>27</comment_count>
      <attachid>122586</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2012-01-16 00:01:29 -0800</bug_when>
    <thetext>Comment on attachment 122586
add [CallWith] support for attributes and cleanup from review comments

Attachment 122586 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11135077</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536391</commentid>
    <comment_count>28</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-16 00:09:24 -0800</bug_when>
    <thetext>I guess an EmptyScriptState won&apos;t do, how do i get a proper one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536948</commentid>
    <comment_count>29</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-17 01:09:35 -0800</bug_when>
    <thetext>@haraken: Would you be willing to look at the CodeGenerator parts of this change?

@Pablo: You might consider making the code generator parts of this change in a separate patch.  It will make reviewing easier.  (We can use run-bindings-tests to test that part of the change in isolation.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536985</commentid>
    <comment_count>30</comment_count>
      <attachid>122586</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-17 02:32:16 -0800</bug_when>
    <thetext>Comment on attachment 122586
add [CallWith] support for attributes and cleanup from review comments

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2039
&gt; +                                        push(@implContent, &quot;    ScriptExecutionContext* scriptContext = static_cast&lt;JSDOMGlobalObject*&gt;(exec-&gt;lexicalGlobalObject())-&gt;scriptExecutionContext();\n&quot;);

Don&apos;t we need to check if the returned scriptContext is valid or not?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2042
&gt; +                                }

Could you use GenerateAttributeCallWith?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:908
&gt; +        my $callWithArg;

This declaration can be inside the following if block.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:945
&gt; +        if ($hasScriptState) {

Maybe we can clean up the code by writing &apos;$callWith eq &quot;ScriptState&quot;&apos; here, and remove $hasScriptState.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1142
&gt; +    my $hasScriptState = 0;

Remove this.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1175
&gt; +            my $callWithArg;

This declaration can be inside the following if block.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1179
&gt; +                unshift(@arguments, $callWithArg);

push here, instead of unshift.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1181
&gt; +

if ($callWith eq &quot;ScriptState&quot;) { push(@implContentDecls, &quot;    if (state.hadException())\n&quot;); ...; } is necessary, isn&apos;t it?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1493
&gt; +        push(@$outputArray, &quot;    EmptyScriptState state;\n&quot;);

Nit: Maybe rename to ScriptStateHolder, or just ScriptState. EmptyScriptState might be confusing. (I know other places are using EmptyScriptState though) It&apos;s up to you.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1500
&gt; +            push(@$outputArray, &quot;        return v8::Undefined();\n&quot;);

I am not sure but do you really want to skip this return for setters?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537538</commentid>
    <comment_count>31</comment_count>
      <attachid>122857</attachid>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-17 18:31:56 -0800</bug_when>
    <thetext>Created attachment 122857
[CallWith] support for attributes in jsc/v8 generators</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537540</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-17 18:34:56 -0800</bug_when>
    <thetext>Attachment 122857 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:1110:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:1123:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:1137:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:1154:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:1173:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:1190:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 6 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537546</commentid>
    <comment_count>33</comment_count>
      <attachid>122860</attachid>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-17 18:40:47 -0800</bug_when>
    <thetext>Created attachment 122860
history.state part, reworked</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537555</commentid>
    <comment_count>34</comment_count>
      <attachid>122860</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-01-17 18:52:26 -0800</bug_when>
    <thetext>Comment on attachment 122860
history.state part, reworked

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

I&apos;ll look more in depth tomorrow, but a few surface comments before I head home for the night.

&gt; Source/WebCore/history/HistoryItem.cpp:473
&gt; +        else {
&gt; +            ScriptValue deserializedStateObject = ScriptValue::deserialize(scriptState, m_stateObject.get());
&gt; +            m_deserializedStateObject = adoptPtr(new ScriptValue(deserializedStateObject));
&gt; +        }

Really a shame ScriptValue&apos;s can&apos;t be more easily deserialized to the heap.  You *could* overload ScriptValue::deserialize to add a, OwnPtr&lt;&gt; version but I won&apos;t request that for this patch.  An alternate here would be:
m_deserializedStateObject = adoptPtr(new ScriptValue(ScriptValue::deserialize(scriptState, m_stateObject.get())));

con: looks a bit uglier
pro: don&apos;t have to have faith that the compiler will optimize out the unnecessary temporary

&gt; Source/WebCore/page/History.h:32
&gt; +#include &quot;ScriptState.h&quot;
&gt; +#include &quot;ScriptValue.h&quot;

Have to include ScriptValue.h, but can forward declare `class ScriptState`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537564</commentid>
    <comment_count>35</comment_count>
      <attachid>122860</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-01-17 19:15:53 -0800</bug_when>
    <thetext>Comment on attachment 122860
history.state part, reworked

Attachment 122860 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11196484</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537572</commentid>
    <comment_count>36</comment_count>
      <attachid>122860</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-01-17 19:21:20 -0800</bug_when>
    <thetext>Comment on attachment 122860
history.state part, reworked

Attachment 122860 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11211426</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537599</commentid>
    <comment_count>37</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-17 20:41:43 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; (From update of attachment 122860 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122860&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/History.h:32
&gt; &gt; +#include &quot;ScriptState.h&quot;
&gt; &gt; +#include &quot;ScriptValue.h&quot;
&gt; 
&gt; Have to include ScriptValue.h, but can forward declare `class ScriptState`

ScriptState is a typedef for JSC, so i can&apos;t forward declare.

I should probably add the generator changes to the history.state patch as well so all the ews build don&apos;t fail, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537601</commentid>
    <comment_count>38</comment_count>
      <attachid>122857</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-17 20:45:08 -0800</bug_when>
    <thetext>Comment on attachment 122857
[CallWith] support for attributes in jsc/v8 generators

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

r+ for the CodeGenerator change.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2037
&gt; +                                    my $callWithArg = GenerateAttributeCallWith($callWith, \@implContent, 1);
&gt; +                                    unshift(@arguments, $callWithArg);

Nit: You can just write unshift(@arguments, GenerateAttributeCallWith($callWith, \@implContent, 1));

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2396
&gt; +    my $returnVoid = shift || 0;

Nit: || 0 is not necessary

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:902
&gt; +    my $callWith = $attribute-&gt;signature-&gt;extendedAttributes-&gt;{&quot;CallWith&quot;} || &quot;&quot;;

Nit: || &quot;&quot; is not necessary.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:909
&gt; +            my $callWithArg = GenerateAttributeCallWith($callWith, \@implContentDecls);
&gt; +            push(@arguments, $callWithArg);

Nit: You can just write push(@arguments, GenerateAttributeCallWith($callWith, \@implContentDecls));

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1145
&gt; +    my $callWith = $attribute-&gt;signature-&gt;extendedAttributes-&gt;{&quot;CallWith&quot;} || &quot;&quot;;

Nit: || &quot;&quot; is not necessary.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1174
&gt; +                my $callWithArg = GenerateAttributeCallWith($callWith, \@implContentDecls, 1);
&gt; +                push(@arguments, $callWithArg);

Nit: You can just write push(@arguments, GenerateAttributeCallWith($callWith, \@implContentDecls, 1));

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1488
&gt; +    my $returnVoid = shift || 0;

Nit: || 0 is not necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537607</commentid>
    <comment_count>39</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-17 21:02:15 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; (From update of attachment 122857 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122857&amp;action=review
&gt; 
&gt; r+ for the CodeGenerator change.
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:902
&gt; &gt; +    my $callWith = $attribute-&gt;signature-&gt;extendedAttributes-&gt;{&quot;CallWith&quot;} || &quot;&quot;;
&gt; 
&gt; Nit: || &quot;&quot; is not necessary.

I get a whole bunch of warnings like &quot;Use of uninitialized value $callWith in string eq at CodeGeneratorV8.pm&quot; if i don&apos;t do that one, maybe i&apos;m doing something wrong? (i seem to recall the same thing happening for the other ones, but they don&apos;t appear anymore, weird).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537612</commentid>
    <comment_count>40</comment_count>
      <attachid>122857</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-17 21:07:53 -0800</bug_when>
    <thetext>Comment on attachment 122857
[CallWith] support for attributes in jsc/v8 generators

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

&gt;&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:902
&gt;&gt;&gt; +    my $callWith = $attribute-&gt;signature-&gt;extendedAttributes-&gt;{&quot;CallWith&quot;} || &quot;&quot;;
&gt;&gt; 
&gt;&gt; Nit: || &quot;&quot; is not necessary.
&gt; 
&gt; I get a whole bunch of warnings like &quot;Use of uninitialized value $callWith in string eq at CodeGeneratorV8.pm&quot; if i don&apos;t do that one, maybe i&apos;m doing something wrong? (i seem to recall the same thing happening for the other ones, but they don&apos;t appear anymore, weird).

Ah, you&apos;re right. The warning appears because &quot;$callWith eq ...&quot; is used at the line 942. Then let&apos;s keep it as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537613</commentid>
    <comment_count>41</comment_count>
      <attachid>122860</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-17 21:12:38 -0800</bug_when>
    <thetext>Comment on attachment 122860
history.state part, reworked

Attachment 122860 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11282044</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537614</commentid>
    <comment_count>42</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-17 21:14:50 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; Created an attachment (id=122860) [details]
&gt; history.state part, reworked

Maybe you can split this bug into two bugs, one for implementing the [CallWith] IDL in CodeGenerators, and the other for the history.state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537641</commentid>
    <comment_count>43</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-01-17 22:49:00 -0800</bug_when>
    <thetext>(In reply to comment #42)
&gt; (In reply to comment #33)
&gt; &gt; Created an attachment (id=122860) [details] [details]
&gt; &gt; history.state part, reworked
&gt; 
&gt; Maybe you can split this bug into two bugs, one for implementing the [CallWith] IDL in CodeGenerators, and the other for the history.state.

Yah, I think we should do that.  File a new bug for the [CallWith] work and have it block this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537645</commentid>
    <comment_count>44</comment_count>
      <attachid>122860</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-01-17 22:53:45 -0800</bug_when>
    <thetext>Comment on attachment 122860
history.state part, reworked

Attachment 122860 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11283089</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537652</commentid>
    <comment_count>45</comment_count>
      <attachid>122857</attachid>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-17 23:07:27 -0800</bug_when>
    <thetext>Comment on attachment 122857
[CallWith] support for attributes in jsc/v8 generators

Filed https://bugs.webkit.org/show_bug.cgi?id=76517 for the [CallWith] changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538517</commentid>
    <comment_count>46</comment_count>
      <attachid>122860</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-18 23:46:14 -0800</bug_when>
    <thetext>Comment on attachment 122860
history.state part, reworked

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

Thanks.  This is looking great!

&gt; Source/WebCore/history/HistoryItem.cpp:465
&gt; +ScriptValue* HistoryItem::getOrCreateDeserializedStateObject(ScriptState* scriptState)

This function could be made slightly more elegant.  If you want to iterate once more, here are some changes I would make.  (If you&apos;ve had enough iterations, this version is fine too.)

&gt; Source/WebCore/history/HistoryItem.cpp:467
&gt; +    if (!m_deserializedStateObject) {

WebKit prefers early return.  So you can just say:

if (m_deserializedStateObject)
    return m_deserializedStateObject.get();

and save indent space.

&gt; Source/WebCore/history/HistoryItem.cpp:472
&gt; +            ScriptValue deserializedStateObject = ScriptValue::deserialize(scriptState, m_stateObject.get());
&gt; +            m_deserializedStateObject = adoptPtr(new ScriptValue(deserializedStateObject));

If you take Brady&apos;s suggestion, that makes this stanza one line as well, which means you can use the ternary operator:

m_deserializedStateObject= m_stateObject ? adoptPtr(new ScriptValue(ScriptValue::null(scriptState))) : adoptPtr(new ScriptValue(ScriptValue::null(scriptState)));

&gt; Source/WebCore/page/History.cpp:118
&gt; +

I would skip this blank line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538819</commentid>
    <comment_count>47</comment_count>
      <attachid>123150</attachid>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-19 11:06:11 -0800</bug_when>
    <thetext>Created attachment 123150
review comments fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538825</commentid>
    <comment_count>48</comment_count>
      <attachid>123150</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-01-19 11:08:35 -0800</bug_when>
    <thetext>Comment on attachment 123150
review comments fixed

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

&gt; Source/WebCore/page/History.idl:40
&gt; +        readonly attribute [CallWith=ScriptState] DOMObject state;

Why isn&apos;t this SerializedScriptValue as we do for message.data?  (I&apos;m genuinely curious what the different required semantic is)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538830</commentid>
    <comment_count>49</comment_count>
      <attachid>123150</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-01-19 11:12:05 -0800</bug_when>
    <thetext>Comment on attachment 123150
review comments fixed

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

I would r+ now based on the premise that the comment is just obsolete and accidentally left behind.  But we also need to answer Oliver&apos;s question.

&gt; LayoutTests/fast/loader/stateobjects/pushstate-state-attribute-only-one-deserialization.html:47
&gt; +        shouldBeTrue(&quot;event.state === history.state&quot;); // This fails for now, needs to be fixed.

Does this still fail or is this just an obsolete comment?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538839</commentid>
    <comment_count>50</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-19 11:21:19 -0800</bug_when>
    <thetext>(In reply to comment #49)
&gt; (From update of attachment 123150 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123150&amp;action=review
&gt; 
&gt; I would r+ now based on the premise that the comment is just obsolete and accidentally left behind.  But we also need to answer Oliver&apos;s question.
&gt; 
&gt; &gt; LayoutTests/fast/loader/stateobjects/pushstate-state-attribute-only-one-deserialization.html:47
&gt; &gt; +        shouldBeTrue(&quot;event.state === history.state&quot;); // This fails for now, needs to be fixed.
&gt; 
&gt; Does this still fail or is this just an obsolete comment?

Still fails, i&apos;ll look at the PopStateEvent issue in a later bug (per comments #14 / #15). Do you want me to get rid of that line?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538844</commentid>
    <comment_count>51</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-01-19 11:26:43 -0800</bug_when>
    <thetext>(In reply to comment #50)
&gt; (In reply to comment #49)
&gt; &gt; (From update of attachment 123150 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123150&amp;action=review
&gt; &gt; 
&gt; &gt; I would r+ now based on the premise that the comment is just obsolete and accidentally left behind.  But we also need to answer Oliver&apos;s question.
&gt; &gt; 
&gt; &gt; &gt; LayoutTests/fast/loader/stateobjects/pushstate-state-attribute-only-one-deserialization.html:47
&gt; &gt; &gt; +        shouldBeTrue(&quot;event.state === history.state&quot;); // This fails for now, needs to be fixed.
&gt; &gt; 
&gt; &gt; Does this still fail or is this just an obsolete comment?
&gt; 
&gt; Still fails, i&apos;ll look at the PopStateEvent issue in a later bug (per comments #14 / #15). Do you want me to get rid of that line?

Oh duh.  We should have a separate bug filed about that specific issue.

Oliver and I have been chatting on IRC and neither of us is convinced one way or the other that DOMObject or SerializedScriptValue is necessarily the right way to go.

We want to talk it over in person to make sure we&apos;re on the same page.  Assuming there&apos;s no pressing need to get this in RIGHT NOW, let&apos;s hold off for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538863</commentid>
    <comment_count>52</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-19 11:40:53 -0800</bug_when>
    <thetext>There&apos;s no immediate need to land this, but wouldn&apos;t using SerializedScriptValue take us back to the original problem? Namely, that we&apos;d be deserializing each time and history.state === history.state would never be true? Or am i missing something about the inner workings of SerializedScriptValue in idl code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538868</commentid>
    <comment_count>53</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-01-19 11:45:54 -0800</bug_when>
    <thetext>(In reply to comment #52)
&gt; There&apos;s no immediate need to land this, but wouldn&apos;t using SerializedScriptValue take us back to the original problem? Namely, that we&apos;d be deserializing each time and history.state === history.state would never be true? Or am i missing something about the inner workings of SerializedScriptValue in idl code?

That&apos;s my understanding as well but Oliver isn&apos;t convinced.  We&apos;ll clear it up tomorrow when we can be in the same room with a white board and markers.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538907</commentid>
    <comment_count>54</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-01-19 12:09:10 -0800</bug_when>
    <thetext>You could just slap the CachedAttribute attribute on the property and then (provided you&apos;re not doing any custom getters or anything the caching should automatic and correct) with SerislizedScriptValue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538922</commentid>
    <comment_count>55</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-01-19 12:25:32 -0800</bug_when>
    <thetext>(In reply to comment #54)
&gt; You could just slap the CachedAttribute attribute on the property and then (provided you&apos;re not doing any custom getters or anything the caching should automatic and correct) with SerislizedScriptValue

How could that guarantee that the object returned from both PopStateEvent.state and History.state are the same?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538923</commentid>
    <comment_count>56</comment_count>
      <attachid>123150</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-19 12:26:50 -0800</bug_when>
    <thetext>Comment on attachment 123150
review comments fixed

Attachment 123150 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11169996

New failing tests:
fast/dom/Window/window-appendages-cleared.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538927</commentid>
    <comment_count>57</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-01-19 12:29:33 -0800</bug_when>
    <thetext>(In reply to comment #55)
&gt; (In reply to comment #54)
&gt; &gt; You could just slap the CachedAttribute attribute on the property and then (provided you&apos;re not doing any custom getters or anything the caching should automatic and correct) with SerislizedScriptValue
&gt; 
&gt; How could that guarantee that the object returned from both PopStateEvent.state and History.state are the same?

Admittedly, this patch doesn&apos;t even do that yet.  But it&apos;s something we&apos;ll need to fix.

Let&apos;s just talk tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539044</commentid>
    <comment_count>58</comment_count>
      <attachid>123150</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2012-01-19 14:39:21 -0800</bug_when>
    <thetext>Comment on attachment 123150
review comments fixed

Attachment 123150 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11247171</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539854</commentid>
    <comment_count>59</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-20 15:31:49 -0800</bug_when>
    <thetext>*** Bug 70876 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541997</commentid>
    <comment_count>60</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-24 21:44:15 -0800</bug_when>
    <thetext>&gt; Let&apos;s just talk tomorrow.

Any further thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542026</commentid>
    <comment_count>61</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-01-24 22:59:25 -0800</bug_when>
    <thetext>(In reply to comment #60)
&gt; &gt; Let&apos;s just talk tomorrow.
&gt; 
&gt; Any further thoughts?

Thanks for reminding us!  Oliver tried to track me down today but it was at a busy time.  We&apos;ll figure this out tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542788</commentid>
    <comment_count>62</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-01-25 17:07:04 -0800</bug_when>
    <thetext>Oliver and I talked it over.  Here&apos;s how we thing we should make this work.

- Currently the attribute on PopStateEvent.idl is a DOMObject.  This is wrong and it needs to be a SerializedScriptValue.
- The new attribute should not be a DOMObject.  It needs to be a SerializedScriptValue.
- We need to use the IDL attributes &quot;CachedAttribute, CustomGetter&quot;.  CachedAttribute is what makes the JS wrapper for the SerializedScriptValue cached so it hangs around.
- We need to change PopStateEvent.h/cpp to be created with a History object, or at the very least a Frame object.
- JSPopStateEvent::state will grab the relevant History object from the PopStateEvent implementationg, do a cached lookup for the JSHistory wrapper of that History, and just call its JSHistory::state.

Oliver, did I get the plan right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542790</commentid>
    <comment_count>63</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-01-25 17:09:33 -0800</bug_when>
    <thetext>(In reply to comment #62)
&gt; Oliver and I talked it over.  Here&apos;s how we thing we should make this work.
&gt; 
&gt; - Currently the attribute on PopStateEvent.idl is a DOMObject.  This is wrong and it needs to be a SerializedScriptValue.
&gt; - The new attribute should not be a DOMObject.  It needs to be a SerializedScriptValue.
&gt; - We need to use the IDL attributes &quot;CachedAttribute, CustomGetter&quot;.  CachedAttribute is what makes the JS wrapper for the SerializedScriptValue cached so it hangs around.

It gives your a correctly marked field to store the property in -- m_state (or m_whateverTheAttributeIs)

&gt; - We need to change PopStateEvent.h/cpp to be created with a History object, or at the very least a Frame object.
&gt; - JSPopStateEvent::state will grab the relevant History object from the PopStateEvent implementationg, do a cached lookup for the JSHistory wrapper of that History, and just call its JSHistory::state.

toJS(callFrame, whateverMyHistoryObject) should give you the required foo.

&gt; 
&gt; Oliver, did I get the plan right?

Yup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542796</commentid>
    <comment_count>64</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-25 17:14:06 -0800</bug_when>
    <thetext>Alright, i&apos;ll give that plan a shot this week, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546441</commentid>
    <comment_count>65</comment_count>
      <attachid>124811</attachid>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-31 13:31:11 -0800</bug_when>
    <thetext>Created attachment 124811
First attempt at a full proper solution</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546464</commentid>
    <comment_count>66</comment_count>
      <attachid>124811</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-01-31 13:56:54 -0800</bug_when>
    <thetext>Comment on attachment 124811
First attempt at a full proper solution

Attachment 124811 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11393096</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546599</commentid>
    <comment_count>67</comment_count>
      <attachid>124811</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-31 16:06:00 -0800</bug_when>
    <thetext>Comment on attachment 124811
First attempt at a full proper solution

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

r- due to removed PopStateEvent constructor.

It is good to show the whole image of your intended change, but it might be better to split the big patch into sub-patches for review, so that each sub-patch is small enough to confirm that it is correct.

&gt; Source/WebCore/dom/PopStateEvent.idl:31
&gt; +        readonly attribute [CustomGetter] DOMObject state;

Why did you remove [ConstructorTemplate=Event] and [InitializedByConstructor]? Then I am afraid that &quot;new PopStateEvent()&quot; wouldn&apos;t work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546612</commentid>
    <comment_count>68</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-31 16:23:55 -0800</bug_when>
    <thetext>Ok, let me make a new bug for the popstate stuff to make things a bit easier.

(In reply to comment #67)
&gt; (From update of attachment 124811 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124811&amp;action=review
&gt; 
&gt; r- due to removed PopStateEvent constructor.
&gt; 
&gt; It is good to show the whole image of your intended change, but it might be better to split the big patch into sub-patches for review, so that each sub-patch is small enough to confirm that it is correct.
&gt; 
&gt; &gt; Source/WebCore/dom/PopStateEvent.idl:31
&gt; &gt; +        readonly attribute [CustomGetter] DOMObject state;
&gt; 
&gt; Why did you remove [ConstructorTemplate=Event] and [InitializedByConstructor]? Then I am afraid that &quot;new PopStateEvent()&quot; wouldn&apos;t work.

I might&apos;ve been too eager in removing stuff wrt ConstructorTemplate, i&apos;ll put it back in. Now that the state is taken directly from the history object how would InitializedByConstructor work in this case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546629</commentid>
    <comment_count>69</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-31 16:38:47 -0800</bug_when>
    <thetext>(In reply to comment #68)
&gt; I might&apos;ve been too eager in removing stuff wrt ConstructorTemplate, i&apos;ll put it back in. Now that the state is taken directly from the history object how would InitializedByConstructor work in this case?

I am still not sure why we need to (or whether we should) take |state| directly from the history object. The spec (http://dev.w3.org/html5/spec/Overview.html#popstateevent) says that |state| is a readonly attribute of PopStateEvent and &quot;The |state| attribute must return the value it was initialized to&quot;. So I think it is natural to keep |state| (not in a history object but) in a PopStateEvent object. If you want to cache the deserialized |state| somewhere for performance, you can cache it in the PopStateEvent object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546639</commentid>
    <comment_count>70</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-01-31 16:49:26 -0800</bug_when>
    <thetext>(In reply to comment #69)
&gt; (In reply to comment #68)
&gt; &gt; I might&apos;ve been too eager in removing stuff wrt ConstructorTemplate, i&apos;ll put it back in. Now that the state is taken directly from the history object how would InitializedByConstructor work in this case?
&gt; 
&gt; I am still not sure why we need to (or whether we should) take |state| directly from the history object. The spec (http://dev.w3.org/html5/spec/Overview.html#popstateevent) says that |state| is a readonly attribute of PopStateEvent and &quot;The |state| attribute must return the value it was initialized to&quot;. So I think it is natural to keep |state| (not in a history object but) in a PopStateEvent object. If you want to cache the deserialized |state| somewhere for performance, you can cache it in the PopStateEvent object.

See the discussion above on how PopStateEvent.state and history.state have to refer to the same object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546649</commentid>
    <comment_count>71</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-31 16:58:30 -0800</bug_when>
    <thetext>(In reply to comment #70)
&gt; (In reply to comment #69)
&gt; &gt; (In reply to comment #68)
&gt; 
&gt; See the discussion above on how PopStateEvent.state and history.state have to refer to the same object.

Ah, I got it.

&gt; &gt; &gt; I might&apos;ve been too eager in removing stuff wrt ConstructorTemplate, i&apos;ll put it back in. Now that the state is taken directly from the history object how would InitializedByConstructor work in this case?

Then, I guess you need to write custom Event constructor. You can write bindings/js/JSPopStateEventConstructorCustom.cpp by customizing constructJSPopStateEvent() and fillPopStateEventInit() in WebKitBuild/Debug/DerivedSources/WebCore/JSPopStateEvent.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546653</commentid>
    <comment_count>72</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-31 17:00:59 -0800</bug_when>
    <thetext>(In reply to comment #71)
&gt; (In reply to comment #70)
&gt; &gt; (In reply to comment #69)
&gt; Then, I guess you need to write custom Event constructor. You can write bindings/js/JSPopStateEventConstructorCustom.cpp by customizing constructJSPopStateEvent() and fillPopStateEventInit() in WebKitBuild/Debug/DerivedSources/WebCore/JSPopStateEvent.cpp.

The IDL would be

    interface PopStateEvent [
        CustomConstructor
    ] : Event {
        readonly attribute [CustomGetter] DOMObject state;
    };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546661</commentid>
    <comment_count>73</comment_count>
      <attachid>124856</attachid>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-31 17:11:00 -0800</bug_when>
    <thetext>Created attachment 124856
history.state</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546682</commentid>
    <comment_count>74</comment_count>
      <attachid>124856</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-31 17:30:45 -0800</bug_when>
    <thetext>Comment on attachment 124856
history.state

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

r- due to history-&gt;stateChanged()

&gt; Source/WebCore/bindings/js/JSHistoryCustom.cpp:172
&gt; +    if (!cachedValue.isEmpty() &amp;&amp; !history-&gt;stateChanged())

I guess this might be dangerous. What happens if another call path updates history.state? For example,

(1) JSHistory::state() caches 1111 in |m_state|.
(2) Another call path updates history.state to 2222.
(3) Another call path calls History::state(), which returns 2222.
(4) JSHistory::state() is called again. It calls history-&gt;stateChanged() and it returns false. Consequently, JSHistory::state() will return the cached 1111.

&gt; Source/WebCore/page/History.idl:40
&gt; +        readonly attribute [CachedAttribute, Custom] SerializedScriptValue state;

[CachedAttribute] is not necessary, since the getter and setter are written as a custom getter and setter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546700</commentid>
    <comment_count>75</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-31 17:54:43 -0800</bug_when>
    <thetext>(In reply to comment #74)
&gt; (From update of attachment 124856 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124856&amp;action=review
&gt; 
&gt; r- due to history-&gt;stateChanged()
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSHistoryCustom.cpp:172
&gt; &gt; +    if (!cachedValue.isEmpty() &amp;&amp; !history-&gt;stateChanged())
&gt; 
&gt; I guess this might be dangerous. What happens if another call path updates history.state? For example,
&gt; 
&gt; (1) JSHistory::state() caches 1111 in |m_state|.
&gt; (2) Another call path updates history.state to 2222.
&gt; (3) Another call path calls History::state(), which returns 2222.
&gt; (4) JSHistory::state() is called again. It calls history-&gt;stateChanged() and it returns false. Consequently, JSHistory::state() will return the cached 1111.

Is the relationship between a History and a {JS,V8}History not 1-to-1? On what situation would there be multiple JSHistory objects using the same History object? Maybe i can make a test for that.

&gt; &gt; Source/WebCore/page/History.idl:40
&gt; &gt; +        readonly attribute [CachedAttribute, Custom] SerializedScriptValue state;
&gt; 
&gt; [CachedAttribute] is not necessary, since the getter and setter are written as a custom getter and setter.

[CachedAttribute] declares a m_state member that&apos;s used in the custom getter to store the value (in JSC).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546707</commentid>
    <comment_count>76</comment_count>
      <attachid>124856</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-31 18:19:00 -0800</bug_when>
    <thetext>Comment on attachment 124856
history.state

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

&gt;&gt;&gt; Source/WebCore/bindings/js/JSHistoryCustom.cpp:172
&gt;&gt;&gt; +    if (!cachedValue.isEmpty() &amp;&amp; !history-&gt;stateChanged())
&gt;&gt; 
&gt;&gt; I guess this might be dangerous. What happens if another call path updates history.state? For example,
&gt;&gt; 
&gt;&gt; (1) JSHistory::state() caches 1111 in |m_state|.
&gt;&gt; (2) Another call path updates history.state to 2222.
&gt;&gt; (3) Another call path calls History::state(), which returns 2222.
&gt;&gt; (4) JSHistory::state() is called again. It calls history-&gt;stateChanged() and it returns false. Consequently, JSHistory::state() will return the cached 1111.
&gt; 
&gt; Is the relationship between a History and a {JS,V8}History not 1-to-1? On what situation would there be multiple JSHistory objects using the same History object? Maybe i can make a test for that.

Sorry, the above example was wrong. But if PopStateEvent.state and history.state have to refer to the same object, isn&apos;t there any possibility like this? (sorry if I am still wrong)

(1) history.state  // JSHistory::state() caches 1111 in |m_state|.
(2) history.pushState(2222, &quot;foo&quot;) // history.state is updated to 2222.
(3) popStateEvent.state // History::state() changes |m_lastStateObjectRequested| from 1111 to 2222.
(4) history.state // history-&gt;stateChanged() returns false, and history.state returns 1111.

&gt;&gt;&gt; Source/WebCore/page/History.idl:40
&gt;&gt;&gt; +        readonly attribute [CachedAttribute, Custom] SerializedScriptValue state;
&gt;&gt; 
&gt;&gt; [CachedAttribute] is not necessary, since the getter and setter are written as a custom getter and setter.
&gt; 
&gt; [CachedAttribute] declares a m_state member that&apos;s used in the custom getter to store the value (in JSC).

Makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546741</commentid>
    <comment_count>77</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-01-31 19:30:47 -0800</bug_when>
    <thetext>(In reply to comment #76)
&gt; (From update of attachment 124856 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124856&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/bindings/js/JSHistoryCustom.cpp:172
&gt; &gt;&gt;&gt; +    if (!cachedValue.isEmpty() &amp;&amp; !history-&gt;stateChanged())
&gt; &gt;&gt; 
&gt; &gt;&gt; I guess this might be dangerous. What happens if another call path updates history.state? For example,
&gt; &gt;&gt; 
&gt; &gt;&gt; (1) JSHistory::state() caches 1111 in |m_state|.
&gt; &gt;&gt; (2) Another call path updates history.state to 2222.
&gt; &gt;&gt; (3) Another call path calls History::state(), which returns 2222.
&gt; &gt;&gt; (4) JSHistory::state() is called again. It calls history-&gt;stateChanged() and it returns false. Consequently, JSHistory::state() will return the cached 1111.
&gt; &gt; 
&gt; &gt; Is the relationship between a History and a {JS,V8}History not 1-to-1? On what situation would there be multiple JSHistory objects using the same History object? Maybe i can make a test for that.
&gt; 
&gt; Sorry, the above example was wrong. But if PopStateEvent.state and history.state have to refer to the same object, isn&apos;t there any possibility like this? (sorry if I am still wrong)
&gt; 
&gt; (1) history.state  // JSHistory::state() caches 1111 in |m_state|.
&gt; (2) history.pushState(2222, &quot;foo&quot;) // history.state is updated to 2222.
&gt; (3) popStateEvent.state // History::state() changes |m_lastStateObjectRequested| from 1111 to 2222.
&gt; (4) history.state // history-&gt;stateChanged() returns false, and history.state returns 1111.

In that particular case, pushState will reset the cached value (which is probably superfluous), but let&apos;s say it was history.back() or the user with the back button, JSPopStateEvent::state is going through JSHistory::state, not History::state directly, so if there&apos;s a 1-to-1 mapping, the only one calling History::state is JSHistory::state and everything should be fine (as far as i can see).

In any case, it&apos;s a good observation, i can modify the deserialization test slightly to cover this, or make a new test to make it more explicit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546748</commentid>
    <comment_count>78</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-01-31 19:40:38 -0800</bug_when>
    <thetext>(In reply to comment #77)
&gt; In that particular case, pushState will reset the cached value (which is probably superfluous), but let&apos;s say it was history.back() or the user with the back button, JSPopStateEvent::state is going through JSHistory::state, not History::state directly, so if there&apos;s a 1-to-1 mapping, the only one calling History::state is JSHistory::state and everything should be fine (as far as i can see).

Makes sense! Thanks for the clarification.

&gt; In any case, it&apos;s a good observation, i can modify the deserialization test slightly to cover this, or make a new test to make it more explicit.

Good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548194</commentid>
    <comment_count>79</comment_count>
      <attachid>124856</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-02-02 15:27:29 -0800</bug_when>
    <thetext>Comment on attachment 124856
history.state

Thanks for the patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548504</commentid>
    <comment_count>80</comment_count>
      <attachid>125274</attachid>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-02-03 00:03:45 -0800</bug_when>
    <thetext>Created attachment 125274
Patch.

Same patch as before, to get another EWS run</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548505</commentid>
    <comment_count>81</comment_count>
      <attachid>125274</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-02-03 00:06:55 -0800</bug_when>
    <thetext>Comment on attachment 125274
Patch.

You can use &quot;--no-review --no-obsolete&quot; option on the ./webkit-patch command in order to avoid invalidating r+ that you got before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548537</commentid>
    <comment_count>82</comment_count>
      <attachid>125274</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-02-03 00:53:40 -0800</bug_when>
    <thetext>Comment on attachment 125274
Patch.

Attachment 125274 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11423168</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548563</commentid>
    <comment_count>83</comment_count>
      <attachid>125274</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-03 01:24:37 -0800</bug_when>
    <thetext>Comment on attachment 125274
Patch.

Attachment 125274 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11420223

New failing tests:
fast/loader/stateobjects/state-attribute-object-types.html
fast/dom/Window/window-appendages-cleared.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549577</commentid>
    <comment_count>84</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-02-05 04:31:15 -0800</bug_when>
    <thetext>I can&apos;t reproduce the chromium test failure here on my machine on a mac chromium port build...

As to the gtk thing, i&apos;m not sure what i should do, i see that, for instance, MessageEvent.idl only does the custom bindings stuff for js, should something like that be done here as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549629</commentid>
    <comment_count>85</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-02-05 16:20:18 -0800</bug_when>
    <thetext>(In reply to comment #84)
&gt; I can&apos;t reproduce the chromium test failure here on my machine on a mac chromium port build...
&gt; 
&gt; As to the gtk thing, i&apos;m not sure what i should do, i see that, for instance, MessageEvent.idl only does the custom bindings stuff for js, should something like that be done here as well?

Here are the results on my local Chromium Linux:

http://haraken.info/null/window-appendages-cleared-diff.txt
http://haraken.info/null/state-attribute-object-types-diff.txt

Can you fix it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550072</commentid>
    <comment_count>86</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-06 09:52:37 -0800</bug_when>
    <thetext>With chromium I&apos;ve found it easier to just commit and rebaseline results using garden-o-matic.  The other bots are more problematic.  We used to have the EWS bots upload failed test results, but we don&apos;t anymore, sadly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550222</commentid>
    <comment_count>87</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-02-06 13:03:31 -0800</bug_when>
    <thetext>(In reply to comment #85)
&gt; (In reply to comment #84)
&gt; &gt; I can&apos;t reproduce the chromium test failure here on my machine on a mac chromium port build...
&gt; &gt; 
&gt; &gt; As to the gtk thing, i&apos;m not sure what i should do, i see that, for instance, MessageEvent.idl only does the custom bindings stuff for js, should something like that be done here as well?
&gt; 
&gt; Here are the results on my local Chromium Linux:
&gt; 
&gt; http://haraken.info/null/window-appendages-cleared-diff.txt
&gt; http://haraken.info/null/state-attribute-object-types-diff.txt
&gt; 
&gt; Can you fix it?

Yeah, i can fix those.

Any thoughts on the gtk issues?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550382</commentid>
    <comment_count>88</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-02-06 16:05:57 -0800</bug_when>
    <thetext>(In reply to comment #87)
&gt; &gt; http://haraken.info/null/state-attribute-object-types-diff.txt
&gt; &gt; 
&gt; &gt; Can you fix it?
&gt; 
&gt; Yeah, i can fix those.

Thanks, you can fix it so that the result won&apos;t depend on a time zone.

&gt; Any thoughts on the gtk issues?

Maybe you need to modify CodeGeneratorGObject.pm so that it supports SerializedScriptValue with [CachedAttribute] IDL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551583</commentid>
    <comment_count>89</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-02-07 17:13:53 -0800</bug_when>
    <thetext>(In reply to comment #88)
&gt; 
&gt; &gt; Any thoughts on the gtk issues?
&gt; 
&gt; Maybe you need to modify CodeGeneratorGObject.pm so that it supports SerializedScriptValue with [CachedAttribute] IDL.

That looks non-trivial (at least for someone with zero knowledge of GObject, like me). I haven&apos;t even managed to build the gtk port on my mac.

Might someone else be persuaded to add that support? or maybe there&apos;s some other temporary workaround that we could use for now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551589</commentid>
    <comment_count>90</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-02-07 17:22:45 -0800</bug_when>
    <thetext>(In reply to comment #89)
&gt; (In reply to comment #88)
&gt; &gt; 
&gt; &gt; &gt; Any thoughts on the gtk issues?
&gt; &gt; 
&gt; &gt; Maybe you need to modify CodeGeneratorGObject.pm so that it supports SerializedScriptValue with [CachedAttribute] IDL.
&gt; 
&gt; That looks non-trivial (at least for someone with zero knowledge of GObject, like me). I haven&apos;t even managed to build the gtk port on my mac.
&gt; 
&gt; Might someone else be persuaded to add that support? or maybe there&apos;s some other temporary workaround that we could use for now?

OK, I&apos;ll make a change in bug 78059, which might solve your issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551590</commentid>
    <comment_count>91</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-07 17:24:46 -0800</bug_when>
    <thetext>&gt; Might someone else be persuaded to add that support? or maybe there&apos;s some other temporary workaround that we could use for now?

We could ifdef this feature not to be available in LANGUAGE_GOBJECT (or whatever the preprocessor variable is called).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551600</commentid>
    <comment_count>92</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-02-07 17:34:26 -0800</bug_when>
    <thetext>(In reply to comment #90)
&gt; (In reply to comment #89)
&gt; &gt; (In reply to comment #88)
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Any thoughts on the gtk issues?
&gt; &gt; &gt; 
&gt; &gt; &gt; Maybe you need to modify CodeGeneratorGObject.pm so that it supports SerializedScriptValue with [CachedAttribute] IDL.
&gt; &gt; 
&gt; &gt; That looks non-trivial (at least for someone with zero knowledge of GObject, like me). I haven&apos;t even managed to build the gtk port on my mac.
&gt; &gt; 
&gt; &gt; Might someone else be persuaded to add that support? or maybe there&apos;s some other temporary workaround that we could use for now?
&gt; 
&gt; OK, I&apos;ll make a change in bug 78059, which might solve your issue.

Thanks!

I&apos;ll fix the tests and upload a new patch once that one has landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551850</commentid>
    <comment_count>93</comment_count>
      <attachid>126022</attachid>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-02-08 00:17:07 -0800</bug_when>
    <thetext>Created attachment 126022
Fixed tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551852</commentid>
    <comment_count>94</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-02-08 00:18:41 -0800</bug_when>
    <thetext>Let&apos;s wait for the bot results:-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551860</commentid>
    <comment_count>95</comment_count>
    <who name="Pablo Flouret">pf</who>
    <bug_when>2012-02-08 00:46:26 -0800</bug_when>
    <thetext>All green this time :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551938</commentid>
    <comment_count>96</comment_count>
      <attachid>126022</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-08 02:39:27 -0800</bug_when>
    <thetext>Comment on attachment 126022
Fixed tests

Clearing flags on attachment: 126022

Committed r107058: &lt;http://trac.webkit.org/changeset/107058&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551939</commentid>
    <comment_count>97</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-08 02:39:40 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121987</attachid>
            <date>2012-01-11 00:10:44 -0800</date>
            <delta_ts>2012-01-13 11:20:09 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>bug-76035-20120111001043.patch</filename>
            <type>text/plain</type>
            <size>8957</size>
            <attacher name="Pablo Flouret">pf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NDY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTM3NzUxZTMzOTQ2Zjc2
ZDc3MTBjNDZkOWU0ODFkMWU4MzAwNjMwZS4uYzhlZTlhYzBlYjVkNmVmNDhmY2FmNzQ3ZTZhMzM0
YTA1ZDYzYmQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTAxLTExICBQYWJs
byBGbG91cmV0ICA8cGFibG9mQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBBZGQgc3RhdGUgYXR0
cmlidXRlIHRvIGhpc3RvcnkncyBkb20gaW50ZXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMv
cHVzaHN0YXRlLXN0YXRlLWF0dHJpYnV0ZS1vYmplY3QtdHlwZXMuaHRtbAorCisgICAgICAgICog
YmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSGlz
dG9yeTo6c3RhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhpc3RvcnlDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhIaXN0b3J5OjpzdGF0ZUFjY2Vzc29yR2V0dGVy
KToKKyAgICAgICAgKiBwYWdlL0hpc3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9y
eTo6c3RhdGVPYmplY3QpOgorICAgICAgICAqIHBhZ2UvSGlzdG9yeS5oOgorICAgICAgICAqIHBh
Z2UvSGlzdG9yeS5pZGw6CisKIDIwMTItMDEtMTAgIFBhYmxvIEZsb3VyZXQgIDxwYWJsb2ZAbW90
b3JvbGEuY29tPgogCiAgICAgICAgIEZpeCBpbmNvbnNpc3RlbnQgdGV4dCBzZWxlY3Rpb24gYmVo
YXZpb3Igd2l0aCBvcHRpb24tc2hpZnQtbGVmdC9yaWdodC91cC9kb3duLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKaW5kZXggNzJlYTU0MjRjN2Mx
MmYzYTY3MmJjN2Q3MzllMTFkZWRmYjQ4MThjNy4uNzcwMGNhZGE2YzBhM2Q3NGFlMTViNmE1YjZj
MDVhNzc0ZDk5YzJkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNI
aXN0b3J5Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3Rv
cnlDdXN0b20uY3BwCkBAIC0xNjQsNiArMTY0LDEyIEBAIHZvaWQgSlNIaXN0b3J5OjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
CiAgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWVzLCBtb2RlKTsKIH0KIAorSlNWYWx1ZSBKU0hpc3Rvcnk6OnN0YXRlKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKK3sKKyAgICBIaXN0b3J5KiBoaXN0b3J5ID0gc3RhdGljX2Nhc3Q8SGlzdG9y
eSo+KGltcGwoKSk7CisgICAgcmV0dXJuIGhpc3RvcnktPnN0YXRlT2JqZWN0KCktPmRlc2VyaWFs
aXplKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCAwKTsKK30KKwogSlNWYWx1ZSBKU0hpc3Rvcnk6OnB1
c2hTdGF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gaGlzdG9yeVN0YXRlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywg
ZXhlYy0+YXJndW1lbnQoMCksIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhIaXN0b3J5Q3VzdG9tLmNwcAppbmRleCA4OTU2MTA5MGNhMTQ5ZGJkMWVm
NzAzNmE5MWNkM2E5YTdlZmJhNjhiLi5lZmRjYTQzN2FlYmY4NzUwNzQwM2E5NmRlNWZiZGQ2Yzkw
NWQ0M2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhI
aXN0b3J5Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhIaXN0b3J5Q3VzdG9tLmNwcApAQCAtNDEsNiArNDEsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIaXN0b3J5OjpzdGF0ZUFjY2Vzc29yR2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQoreworICAgIEhpc3RvcnkqIGhpc3RvcnkgPSBWOEhpc3Rvcnk6OnRvTmF0aXZlKGluZm8u
SG9sZGVyKCkpOworICAgIHJldHVybiBoaXN0b3J5LT5zdGF0ZU9iamVjdCgpLT5kZXNlcmlhbGl6
ZSgpOworfQorCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIaXN0b3J5OjpwdXNoU3RhdGVDYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIGJvb2wgZGlkVGhyb3cgPSBm
YWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuY3BwCmluZGV4IDFmNWEzOWYyODc1ODRmN2MyNzQ4YjMz
ZTEwOTllNjY0ZDE5MmFlNjguLjFhMDdjMTNjZmEwMTgwYTg3NDgzNTY0ODU0ZjYzNDIzOWQ4MmFh
ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
ckNsaWVudC5oIgorI2luY2x1ZGUgIkhpc3RvcnlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSGlz
dG9yeUl0ZW0uaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKQEAgLTEwNyw2ICsxMDgsMTcgQEAgS1VSTCBIaXN0b3J5Ojp1cmxGb3JTdGF0ZShjb25zdCBT
dHJpbmcmIHVybFN0cmluZykKICAgICByZXR1cm4gS1VSTChiYXNlVVJMLCB1cmxTdHJpbmcpOwog
fQogCitTZXJpYWxpemVkU2NyaXB0VmFsdWUqIEhpc3Rvcnk6OnN0YXRlT2JqZWN0KCkgY29uc3QK
K3sKKyAgICBpZiAobV9mcmFtZSkgeworICAgICAgICBIaXN0b3J5SXRlbSogaGlzdG9yeUl0ZW0g
PSBtX2ZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpOworICAgICAgICBp
ZiAoaGlzdG9yeUl0ZW0gJiYgaGlzdG9yeUl0ZW0tPnN0YXRlT2JqZWN0KCkpCisgICAgICAgICAg
ICByZXR1cm4gaGlzdG9yeUl0ZW0tPnN0YXRlT2JqZWN0KCk7CisgICAgfQorCisgICAgcmV0dXJu
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCk7Cit9CisKIHZvaWQgSGlzdG9yeTo6
c3RhdGVPYmplY3RBZGRlZChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwg
Y29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIFN0YXRlT2JqZWN0
VHlwZSBzdGF0ZU9iamVjdFR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghbV9m
cmFtZSB8fCAhbV9mcmFtZS0+cGFnZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9IaXN0b3J5LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuaAppbmRleCBiZDUwZmNj
ZDJiODYxZDllNjQxOGU5NzRmNDJkZmIyYjJiNWY5MWNlLi4zNTc5ZWYzNzQzYmEzYTA2MjQyODI4
OTk3MDQ0OWZhZTY2YTYzMjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3Rv
cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuaApAQCAtNTYsNiArNTYsOCBA
QCBwdWJsaWM6CiAgICAgICAgIFN0YXRlT2JqZWN0UHVzaCwKICAgICAgICAgU3RhdGVPYmplY3RS
ZXBsYWNlCiAgICAgfTsKKworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc3RhdGVPYmplY3Qo
KSBjb25zdDsKICAgICB2b2lkIHN0YXRlT2JqZWN0QWRkZWQoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+LCBjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBTdHJpbmcmIHVybCwgU3Rh
dGVPYmplY3RUeXBlLCBFeGNlcHRpb25Db2RlJik7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0
b3J5LmlkbAppbmRleCBmZjM3MDFlZDI3NmQ0ZjU2OThkYTZhMDUzMGUwNjYzODBhMzNiMWMxLi40
MWU4MTI1OGEwYzQwZDVjN2JiNDRhM2RkM2Q5ZDJjZWIwZWI1NDE5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlz
dG9yeS5pZGwKQEAgLTM3LDYgKzM3LDcgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIE9taXRD
b25zdHJ1Y3RvcgogICAgIF0gSGlzdG9yeSB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1
bnNpZ25lZCBsb25nIGxlbmd0aDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDdXN0b21H
ZXR0ZXJdIERPTU9iamVjdCBzdGF0ZTsKIAogICAgICAgICBbRG9Ob3RDaGVja0RvbWFpblNlY3Vy
aXR5LCBDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSB2b2lkIGJhY2soKTsKICAgICAg
ICAgW0RvTm90Q2hlY2tEb21haW5TZWN1cml0eSwgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dF0gdm9pZCBmb3J3YXJkKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYzk4ZmE1OTg3ZjFhMjBhY2VlOGMwMTIwZjI4
YThlMDk5ZDVmMDZkYy4uMjIzZGNmMWE0MDc1YzY4ZWRlNzY0MzcxMzk2NTMwNTBkZGIwMTljMyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTAxLTExICBQYWJsbyBGbG91cmV0ICA8cGFibG9m
QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBBZGQgc3RhdGUgYXR0cmlidXRlIHRvIGhpc3Rvcnkn
cyBkb20gaW50ZXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzYwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGZhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUtc3RhdGUtYXR0cmli
dXRlLW9iamVjdC10eXBlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvbG9h
ZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUtc3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBlcy5o
dG1sOiBBZGRlZC4KKwogMjAxMi0wMS0xMCAgUGFibG8gRmxvdXJldCAgPHBhYmxvZkBtb3Rvcm9s
YS5jb20+CiAKICAgICAgICAgRml4IGluY29uc2lzdGVudCB0ZXh0IHNlbGVjdGlvbiBiZWhhdmlv
ciB3aXRoIG9wdGlvbi1zaGlmdC1sZWZ0L3JpZ2h0L3VwL2Rvd24uCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvcHVzaHN0YXRlLXN0YXRlLWF0dHJpYnV0
ZS1vYmplY3QtdHlwZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3Rh
dGVvYmplY3RzL3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jMWE4N2E3OGZiYzY4OTNmMGM2ZTFmOTk1ODRjZWRiNTNlYjg2NjEx
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3Rz
L3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDE1IEBACitUaGlzIHRlc3QgY2FsbHMgcHVzaFN0YXRlIHdpdGggc3RhdGUgb2JqZWN0
cyBvZiBhbGwgdGhlIGRpZmZlcmVudCBvYmplY3QgdHlwZXMgc3VwcG9ydGVkIGJ5IHRoZSBIVE1M
NSAiaW50ZXJuYWwgc3RydWN0dXJlZCBjbG9uaW5nIGFsZ29yaXRobSIgYW5kIG1ha2VzIHN1cmUg
dGhlIHN0YXRlIGF0dHJpYnV0ZSByZXR1cm5zIHRoZSBleHBlY3RlZCBvYmplY3RzLgorCitTdGF0
ZSBpcyBpbml0aWFsbHkgbnVsbCAodHlwZSBvYmplY3QpCitTdGF0ZSBwdXNoZWQgLSB1bmRlZmlu
ZWQgKHR5cGUgdW5kZWZpbmVkKQorU3RhdGUgcHVzaGVkIC0gbnVsbCAodHlwZSBvYmplY3QpCitT
dGF0ZSBwdXNoZWQgLSBmYWxzZSAodHlwZSBib29sZWFuKQorU3RhdGUgcHVzaGVkIC0gdHJ1ZSAo
dHlwZSBib29sZWFuKQorU3RhdGUgcHVzaGVkIC0gNDIgKHR5cGUgbnVtYmVyKQorU3RhdGUgcHVz
aGVkIC0gU3RyaW5nICh0eXBlIHN0cmluZykKK1N0YXRlIHB1c2hlZCAtIDAgKHR5cGUgb2JqZWN0
KQorU3RhdGUgcHVzaGVkIC0gL2Zvby9naSAodHlwZSBvYmplY3QpCitTdGF0ZSBwdXNoZWQgLSAg
KHR5cGUgb2JqZWN0KQorU3RhdGUgcHVzaGVkIC0gW29iamVjdCBPYmplY3RdICh0eXBlIG9iamVj
dCkKK1N0YXRlIHB1c2hlZCAtIFtvYmplY3QgSW1hZ2VEYXRhXSAodHlwZSBvYmplY3QpCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUt
c3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBlcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2Fk
ZXIvc3RhdGVvYmplY3RzL3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjM1YTNkNzkzMzYxNzhiYzJiYzRhMDJmMmUyODk5MDNmNGY5YjA3NAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9w
dXNoc3RhdGUtc3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBlcy5odG1sCkBAIC0wLDAgKzEsNTcg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5jbGVh
ckJhY2tGb3J3YXJkTGlzdCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKK30KKworZnVuY3Rpb24gbG9nKHR4dCkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgibG9nZ2VyIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodHh0ICsgIlxu
IikpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBsb2coIlN0YXRlIGlzIGluaXRp
YWxseSAiICsgaGlzdG9yeS5zdGF0ZSArICIgKHR5cGUgIiArIHR5cGVvZiBoaXN0b3J5LnN0YXRl
ICsgIikiKTsKKyAgICBwdXNoQW5kVGVzdFN0YXRlKHVuZGVmaW5lZCwgInVuZGVmaW5lZCBlbnRy
eSIpOworICAgIHB1c2hBbmRUZXN0U3RhdGUobnVsbCwgIm51bGwgZW50cnkiKTsKKyAgICBwdXNo
QW5kVGVzdFN0YXRlKGZhbHNlLCAiZmFsc2UgZW50cnkiKTsKKyAgICBwdXNoQW5kVGVzdFN0YXRl
KHRydWUsICJ0cnVlIGVudHJ5Iik7CisgICAgcHVzaEFuZFRlc3RTdGF0ZSg0MiwgIk51bWJlciBl
bnRyeSIpOworICAgIHB1c2hBbmRUZXN0U3RhdGUoIlN0cmluZyIsICJTdHJpbmcgZW50cnkiKTsK
KyAgICBwdXNoQW5kVGVzdFN0YXRlKG5ldyBEYXRlKDApLCAiRGF0ZSBlbnRyeSIpOworICAgIHB1
c2hBbmRUZXN0U3RhdGUobmV3IFJlZ0V4cCgiZm9vIiwgImdpIiksICJSZWdFeHAgZW50cnkiKTsK
KyAgICBwdXNoQW5kVGVzdFN0YXRlKG5ldyBBcnJheSwgIkFycmF5IGVudHJ5Iik7CisgICAgcHVz
aEFuZFRlc3RTdGF0ZShuZXcgT2JqZWN0LCAiT2JqZWN0IGVudHJ5Iik7CisgICAgcHVzaEFuZFRl
c3RTdGF0ZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIp
LmNyZWF0ZUltYWdlRGF0YSgxMCwxMCksICJJbWFnZURhdGEgZW50cnkiKTsKKworLyogVGhlIGZv
bGxvd2luZyBhcmUgbm90IHlldCB3ZWxsIGVub3VnaCBzdXBwb3J0ZWQgaW4gV2ViS2l0IHRvIG1l
YW5pbmdmdWxseSB0ZXN0IGhlcmU6CisgICAgaGlzdG9yeS5wdXNoQW5kU3RhdGUoW0Jsb2JdLCAi
QmxvYiBlbnRyeSIpOworICAgIGhpc3RvcnkucHVzaEFuZFN0YXRlKFtGaWxlXSwgIkZpbGUgZW50
cnkiKTsKKyAgICBoaXN0b3J5LnB1c2hBbmRTdGF0ZShbRmlsZUxpc3RdLCAiRmlsZUxpc3QgZW50
cnkiKTsKKyovCit9CisKK2Z1bmN0aW9uIHB1c2hBbmRUZXN0U3RhdGUoZGF0YSwgdGl0bGUpCit7
CisgICAgaGlzdG9yeS5wdXNoU3RhdGUoZGF0YSwgdGl0bGUpOworICAgIHZhciBzdGF0ZSA9IGhp
c3Rvcnkuc3RhdGU7CisKKyAgICBpZiAoc3RhdGUgaW5zdGFuY2VvZiBEYXRlKQorICAgICAgICBs
b2coIlN0YXRlIHB1c2hlZCAtICIgKyBzdGF0ZS5nZXRUaW1lKCkgKyAiICh0eXBlICIgKyB0eXBl
b2Ygc3RhdGUgKyAiKSIpOworICAgIGVsc2UKKyAgICAgICAgbG9nKCJTdGF0ZSBwdXNoZWQgLSAi
ICsgc3RhdGUgKyAiICh0eXBlICIgKyB0eXBlb2Ygc3RhdGUgKyAiKSIpOworfQorCis8L3Njcmlw
dD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxwPgorVGhpcyB0ZXN0IGNhbGxzIHB1c2hT
dGF0ZSB3aXRoIHN0YXRlIG9iamVjdHMgb2YgYWxsIHRoZSBkaWZmZXJlbnQgb2JqZWN0IHR5cGVz
IHN1cHBvcnRlZCBieSB0aGUKK0hUTUw1ICJpbnRlcm5hbCBzdHJ1Y3R1cmVkIGNsb25pbmcgYWxn
b3JpdGhtIiBhbmQgbWFrZXMgc3VyZSB0aGUgc3RhdGUgYXR0cmlidXRlIHJldHVybnMgdGhlIGV4
cGVjdGVkIG9iamVjdHMuCis8L3A+Cis8cHJlIGlkPSJsb2dnZXIiPjwvcHJlPgorPC9ib2R5Pgor
PC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122471</attachid>
            <date>2012-01-13 11:20:15 -0800</date>
            <delta_ts>2012-01-13 16:11:51 -0800</delta_ts>
            <desc>use only one deserialization for history.state</desc>
            <filename>bug-76035-20120113112014.patch</filename>
            <type>text/plain</type>
            <size>17766</size>
            <attacher name="Pablo Flouret">pf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0OTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGMyYmEwNjAzODFmOWZh
YzUxMTMwNmI5ZDQ4Mjk4YWMwYjI4NmRhZS4uZWMxOTUyNmQzZTQwNmQwNGYzMmRiYjkwODBlZjM0
NTlhMzMwYWQ5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTAxLTEzICBQYWJs
byBGbG91cmV0ICA8cGFibG9mQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBBZGQgc3RhdGUgYXR0
cmlidXRlIHRvIGhpc3RvcnkncyBkb20gaW50ZXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogZmFzdC9sb2FkZXIvc3RhdGVvYmplY3Rz
L3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLmh0bWwKKyAgICAgICAgICAg
ICAgIGZhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUtc3RhdGUtYXR0cmlidXRlLW9u
bHktb25lLWRlc2VyaWFsaXphdGlvbi5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hp
c3RvcnlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIaXN0b3J5OjpzdGF0ZSk6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOEhpc3Rvcnk6OnN0YXRlQWNjZXNzb3JHZXR0ZXIpOgorICAgICAgICAqIGhp
c3RvcnkvSGlzdG9yeUl0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06OnJl
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpzZXRVUkwpOgorICAgICAgICAo
V2ViQ29yZTo6SGlzdG9yeUl0ZW06OnNldFN0YXRlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
Okhpc3RvcnlJdGVtOjpzZXREZXNlcmlhbGl6ZWRTdGF0ZU9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpIaXN0b3J5SXRlbTo6Y2xlYXJEZXNlcmlhbGl6ZWRTdGF0ZU9iamVjdCk6CisgICAgICAg
ICogaGlzdG9yeS9IaXN0b3J5SXRlbS5oOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06
OmRlc2VyaWFsaXplZFN0YXRlT2JqZWN0KToKKyAgICAgICAgKiBwYWdlL0hpc3RvcnkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeTo6c2VyaWFsaXplZFN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6Okhpc3Rvcnk6OnN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3Rvcnk6OnNldFN0
YXRlKToKKyAgICAgICAgKiBwYWdlL0hpc3RvcnkuaDoKKyAgICAgICAgKiBwYWdlL0hpc3Rvcnku
aWRsOgorCiAyMDEyLTAxLTEzICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgIDxrdWJvQHByb2Z1c2lv
bi5tb2JpPgogCiAgICAgICAgIFtzb3VwXSBJbml0aWFsaXplIG1fc291cEZsYWdzIGluIGFsbCBS
ZXNvdXJjZVJlc3BvbnNlIGNvbnN0cnVjdG9ycy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCmluZGV4IDcyZWE1NDI0YzdjMTJmM2E2NzJiYzdkNzM5
ZTExZGVkZmI0ODE4YzcuLmVhNzZhYTdmMzk3N2JlNDBkYjFiNmJjMjEyN2UwMzIzZjA3Njc2ZTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcApA
QCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIaXN0b3J5
LmgiCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0
VmFsdWUuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rpb24uaD4KIApAQCAtMTY0LDYgKzE2
NSwyMCBAQCB2b2lkIEpTSGlzdG9yeTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TgogICAgIEJhc2U6OmdldE93blByb3BlcnR5
TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKK0pTVmFs
dWUgSlNIaXN0b3J5OjpzdGF0ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgSGlzdG9y
eSogaGlzdG9yeSA9IHN0YXRpY19jYXN0PEhpc3RvcnkqPihpbXBsKCkpOworCisgICAgU2NyaXB0
VmFsdWUgc3RhdGUgPSBoaXN0b3J5LT5zdGF0ZSgpOworCisgICAgaWYgKHN0YXRlLmhhc05vVmFs
dWUoKSkgeworICAgICAgICBzdGF0ZSA9IFNjcmlwdFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
aGlzdG9yeS0+c2VyaWFsaXplZFN0YXRlKCktPmRlc2VyaWFsaXplKGV4ZWMsIGdsb2JhbE9iamVj
dCgpLCAwKSk7CisgICAgICAgIGhpc3RvcnktPnNldFN0YXRlKHN0YXRlKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gc3RhdGUuanNWYWx1ZSgpOworfQorCiBKU1ZhbHVlIEpTSGlzdG9yeTo6cHVzaFN0
YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBoaXN0b3J5U3RhdGUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBleGVj
LT5hcmd1bWVudCgwKSwgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhIaXN0b3J5Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhpc3RvcnlDdXN0b20uY3BwCmluZGV4IDg5NTYxMDkwY2ExNDlkYmQxZWY3MDM2
YTkxY2QzYTlhN2VmYmE2OGIuLjU0ZWViYmQ1NjMzODg1MDkxOGY3ODRmNDgzYTNlMjhlZmFjOTlk
MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhpc3Rv
cnlDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhp
c3RvcnlDdXN0b20uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCiAjaW5jbHVkZSAiSGlzdG9yeS5oIgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAj
aW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgi
CiAjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKQEAgLTQxLDYgKzQyLDIwIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SGlzdG9yeTo6c3RhdGVB
Y2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKK3sKKyAgICBIaXN0b3J5KiBoaXN0b3J5ID0gVjhIaXN0b3J5Ojp0b05h
dGl2ZShpbmZvLkhvbGRlcigpKTsKKworICAgIFNjcmlwdFZhbHVlIHN0YXRlID0gaGlzdG9yeS0+
c3RhdGUoKTsKKworICAgIGlmIChzdGF0ZS5oYXNOb1ZhbHVlKCkpIHsKKyAgICAgICAgc3RhdGUg
PSBTY3JpcHRWYWx1ZShoaXN0b3J5LT5zZXJpYWxpemVkU3RhdGUoKS0+ZGVzZXJpYWxpemUoKSk7
CisgICAgICAgIGhpc3RvcnktPnNldFN0YXRlKHN0YXRlKTsKKyAgICB9CisKKyAgICByZXR1cm4g
c3RhdGUudjhWYWx1ZSgpOworfQorCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIaXN0b3J5Ojpw
dXNoU3RhdGVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIGJvb2wg
ZGlkVGhyb3cgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlz
dG9yeUl0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKaW5k
ZXggMjFjODFlZGU3ZWZlMjYxYWQ4Njk3NTFkY2Y5ZThmMmE0MGE1ZTg5Mi4uOTI4ODNkNDE0ZDdk
YWQ4MGUzNjUxZjQzYjI4OWUxMDJkNThjN2E1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0
b3J5SXRlbS5jcHAKQEAgLTIwMCw2ICsyMDAsNyBAQCB2b2lkIEhpc3RvcnlJdGVtOjpyZXNldCgp
CiAgICAgbV9pdGVtU2VxdWVuY2VOdW1iZXIgPSBnZW5lcmF0ZVNlcXVlbmNlTnVtYmVyKCk7CiAK
ICAgICBtX3N0YXRlT2JqZWN0ID0gMDsKKyAgICBtX2Rlc2VyaWFsaXplZFN0YXRlT2JqZWN0ID0g
U2NyaXB0VmFsdWUoKTsKICAgICBtX2RvY3VtZW50U2VxdWVuY2VOdW1iZXIgPSBnZW5lcmF0ZVNl
cXVlbmNlTnVtYmVyKCk7CiAKICAgICBtX2Zvcm1EYXRhID0gMDsKQEAgLTI4Miw2ICsyODMsNyBA
QCB2b2lkIEhpc3RvcnlJdGVtOjpzZXRVUkwoY29uc3QgS1VSTCYgdXJsKQogICAgIHBhZ2VDYWNo
ZSgpLT5yZW1vdmUodGhpcyk7CiAgICAgc2V0VVJMU3RyaW5nKHVybC5zdHJpbmcoKSk7CiAgICAg
Y2xlYXJEb2N1bWVudFN0YXRlKCk7CisgICAgY2xlYXJEZXNlcmlhbGl6ZWRTdGF0ZU9iamVjdCgp
OwogfQogCiB2b2lkIEhpc3RvcnlJdGVtOjpzZXRPcmlnaW5hbFVSTFN0cmluZyhjb25zdCBTdHJp
bmcmIHVybFN0cmluZykKQEAgLTQ1Niw2ICs0NTgsMTcgQEAgdm9pZCBIaXN0b3J5SXRlbTo6c2V0
SXNUYXJnZXRJdGVtKGJvb2wgZmxhZykKIHZvaWQgSGlzdG9yeUl0ZW06OnNldFN0YXRlT2JqZWN0
KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBvYmplY3QpCiB7CiAgICAgbV9zdGF0
ZU9iamVjdCA9IG9iamVjdDsKKyAgICBjbGVhckRlc2VyaWFsaXplZFN0YXRlT2JqZWN0KCk7Cit9
CisKK3ZvaWQgSGlzdG9yeUl0ZW06OnNldERlc2VyaWFsaXplZFN0YXRlT2JqZWN0KFNjcmlwdFZh
bHVlJiBvYmplY3QpCit7CisgICAgbV9kZXNlcmlhbGl6ZWRTdGF0ZU9iamVjdCA9IG9iamVjdDsK
K30KKwordm9pZCBIaXN0b3J5SXRlbTo6Y2xlYXJEZXNlcmlhbGl6ZWRTdGF0ZU9iamVjdCgpCit7
CisgICAgbV9kZXNlcmlhbGl6ZWRTdGF0ZU9iamVjdCA9IFNjcmlwdFZhbHVlKCk7CiB9CiAKIHZv
aWQgSGlzdG9yeUl0ZW06OmFkZENoaWxkSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBjaGls
ZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uaAppbmRleCA4NjE5ZDBjMzQ2YmY4NmI5
ZTcyOTI2OTYyOWQzODI1YjcwMmY2YjczLi5iNWUzYTYzMzMwNzJiY2I5YjNiNTE1MjgzNjFhZTky
YmIxMDNhMTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5oCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAt
NTMsNiArNTQsNyBAQCBjbGFzcyBIaXN0b3J5SXRlbTsKIGNsYXNzIEltYWdlOwogY2xhc3MgS1VS
TDsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKK2NsYXNzIFNjcmlwdFZhbHVlOwogY2xhc3MgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOwogCiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8SGlzdG9yeUl0ZW0+
ID4gSGlzdG9yeUl0ZW1WZWN0b3I7CkBAIC0xNDEsNiArMTQzLDkgQEAgcHVibGljOgogICAgIAog
ICAgIHZvaWQgc2V0U3RhdGVPYmplY3QoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IG9iamVjdCk7CiAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBzdGF0ZU9iamVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGVPYmplY3QuZ2V0KCk7IH0KKyAgICB2b2lkIHNldERlc2VyaWFsaXpl
ZFN0YXRlT2JqZWN0KFNjcmlwdFZhbHVlJik7CisgICAgdm9pZCBjbGVhckRlc2VyaWFsaXplZFN0
YXRlT2JqZWN0KCk7CisgICAgU2NyaXB0VmFsdWUgZGVzZXJpYWxpemVkU3RhdGVPYmplY3QoKSBj
b25zdCB7IHJldHVybiBtX2Rlc2VyaWFsaXplZFN0YXRlT2JqZWN0OyB9OwogCiAgICAgdm9pZCBz
ZXRJdGVtU2VxdWVuY2VOdW1iZXIobG9uZyBsb25nIG51bWJlcikgeyBtX2l0ZW1TZXF1ZW5jZU51
bWJlciA9IG51bWJlcjsgfQogICAgIGxvbmcgbG9uZyBpdGVtU2VxdWVuY2VOdW1iZXIoKSBjb25z
dCB7IHJldHVybiBtX2l0ZW1TZXF1ZW5jZU51bWJlcjsgfQpAQCAtMjcwLDYgKzI3NSw3IEBAIHBy
aXZhdGU6CiAKICAgICAvLyBTdXBwb3J0IGZvciBIVE1MNSBIaXN0b3J5CiAgICAgUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbV9zdGF0ZU9iamVjdDsKKyAgICBTY3JpcHRWYWx1ZSBtX2Rl
c2VyaWFsaXplZFN0YXRlT2JqZWN0OwogICAgIAogICAgIC8vIGluZm8gdXNlZCB0byByZXBvc3Qg
Zm9ybSBkYXRhCiAgICAgUmVmUHRyPEZvcm1EYXRhPiBtX2Zvcm1EYXRhOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlz
dG9yeS5jcHAKaW5kZXggMWY1YTM5ZjI4NzU4NGY3YzI3NDhiMzNlMTA5OWU2NjRkMTkyYWU2OC4u
ZDU0M2ZiNTQwMGJmODYzYzQzOGZkOTNiZjI4ZjU3NDgyNWM5ZjAzZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hp
c3RvcnkuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVk
ZSAiSGlzdG9yeUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1
ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgpAQCAtMTA3LDYgKzEwOCwz
OCBAQCBLVVJMIEhpc3Rvcnk6OnVybEZvclN0YXRlKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQog
ICAgIHJldHVybiBLVVJMKGJhc2VVUkwsIHVybFN0cmluZyk7CiB9CiAKK1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSogSGlzdG9yeTo6c2VyaWFsaXplZFN0YXRlKCkgY29uc3QKK3sKKyAgICBpZiAobV9m
cmFtZSkgeworICAgICAgICBIaXN0b3J5SXRlbSogaGlzdG9yeUl0ZW0gPSBtX2ZyYW1lLT5sb2Fk
ZXIoKS0+aGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpOworICAgICAgICBpZiAoaGlzdG9yeUl0ZW0g
JiYgaGlzdG9yeUl0ZW0tPnN0YXRlT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gaGlzdG9y
eUl0ZW0tPnN0YXRlT2JqZWN0KCk7CisgICAgfQorCisgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6bnVsbFZhbHVlKCk7Cit9CisKK1NjcmlwdFZhbHVlIEhpc3Rvcnk6OnN0YXRlKCkg
Y29uc3QKK3sKKyAgICBpZiAobV9mcmFtZSkgeworICAgICAgICBIaXN0b3J5SXRlbSogaGlzdG9y
eUl0ZW0gPSBtX2ZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpOworICAg
ICAgICBpZiAoaGlzdG9yeUl0ZW0pCisgICAgICAgICAgICByZXR1cm4gaGlzdG9yeUl0ZW0tPmRl
c2VyaWFsaXplZFN0YXRlT2JqZWN0KCk7CisgICAgfQorCisgICAgcmV0dXJuIFNjcmlwdFZhbHVl
KCk7Cit9CisKK3ZvaWQgSGlzdG9yeTo6c2V0U3RhdGUoU2NyaXB0VmFsdWUmIG9iamVjdCkKK3sK
KyAgICBpZiAobV9mcmFtZSkgeworICAgICAgICBIaXN0b3J5SXRlbSogaGlzdG9yeUl0ZW0gPSBt
X2ZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpOworICAgICAgICBpZiAo
aGlzdG9yeUl0ZW0pCisgICAgICAgICAgICBoaXN0b3J5SXRlbS0+c2V0RGVzZXJpYWxpemVkU3Rh
dGVPYmplY3Qob2JqZWN0KTsKKyAgICB9CisKK30KKwogdm9pZCBIaXN0b3J5OjpzdGF0ZU9iamVj
dEFkZGVkKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBjb25zdCBTdHJp
bmcmIHRpdGxlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZywgU3RhdGVPYmplY3RUeXBlIHN0YXRl
T2JqZWN0VHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFtX2ZyYW1lIHx8ICFt
X2ZyYW1lLT5wYWdlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3Rvcnku
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5oCmluZGV4IGJkNTBmY2NkMmI4NjFkOWU2
NDE4ZTk3NGY0MmRmYjJiMmI1ZjkxY2UuLmJkODQ3ZjQ2MDZlYzk3ZjNkNWJjN2U0MjZlYjg0NWJj
NjBlMzQzNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5oCkBAIC0zNiw2ICszNiw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJhbWU7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OworY2xhc3MgU2NyaXB0VmFsdWU7CiBjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiB0eXBl
ZGVmIGludCBFeGNlcHRpb25Db2RlOwogCkBAIC01Niw2ICs1NywxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIFN0YXRlT2JqZWN0UHVzaCwKICAgICAgICAgU3RhdGVPYmplY3RSZXBsYWNlCiAgICAgfTsK
KworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc2VyaWFsaXplZFN0YXRlKCkgY29uc3Q7Cisg
ICAgU2NyaXB0VmFsdWUgc3RhdGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFN0YXRlKFNjcmlwdFZh
bHVlJik7CisKICAgICB2b2lkIHN0YXRlT2JqZWN0QWRkZWQoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+LCBjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBTdHJpbmcmIHVybCwgU3Rh
dGVPYmplY3RUeXBlLCBFeGNlcHRpb25Db2RlJik7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0
b3J5LmlkbAppbmRleCBmZjM3MDFlZDI3NmQ0ZjU2OThkYTZhMDUzMGUwNjYzODBhMzNiMWMxLi40
MWU4MTI1OGEwYzQwZDVjN2JiNDRhM2RkM2Q5ZDJjZWIwZWI1NDE5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlz
dG9yeS5pZGwKQEAgLTM3LDYgKzM3LDcgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIE9taXRD
b25zdHJ1Y3RvcgogICAgIF0gSGlzdG9yeSB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1
bnNpZ25lZCBsb25nIGxlbmd0aDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDdXN0b21H
ZXR0ZXJdIERPTU9iamVjdCBzdGF0ZTsKIAogICAgICAgICBbRG9Ob3RDaGVja0RvbWFpblNlY3Vy
aXR5LCBDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSB2b2lkIGJhY2soKTsKICAgICAg
ICAgW0RvTm90Q2hlY2tEb21haW5TZWN1cml0eSwgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dF0gdm9pZCBmb3J3YXJkKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOWNhYWVjNTc3NGZhMDMyZGZjZDM1ZjZiNmJh
MWNlNWE5NGMyYTJlNC4uOGJlYWRiYmE4N2UzMzI3ODA1NWUyYmRjNDBlYTFmMDExZDRlNjYwNiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAxLTEzICBQYWJsbyBGbG91cmV0ICA8cGFibG9m
QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBBZGQgc3RhdGUgYXR0cmlidXRlIHRvIGhpc3Rvcnkn
cyBkb20gaW50ZXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzYwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGZhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUtc3RhdGUtYXR0cmli
dXRlLW9iamVjdC10eXBlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvbG9h
ZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUtc3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBlcy5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvcHVzaHN0YXRl
LXN0YXRlLWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6YXRpb24tZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvcHVzaHN0YXRlLXN0YXRl
LWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6YXRpb24uaHRtbDogQWRkZWQuCisKIDIwMTIt
MDEtMTMgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBb
Y2hyb21pdW1dIE1hcmsgYSBmbGFreSB0ZXN0IGFzIGZsYWt5CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvcHVzaHN0YXRlLXN0YXRlLWF0dHJpYnV0ZS1v
YmplY3QtdHlwZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVv
YmplY3RzL3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jMWE4N2E3OGZiYzY4OTNmMGM2ZTFmOTk1ODRjZWRiNTNlYjg2NjExCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3B1
c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDE1IEBACitUaGlzIHRlc3QgY2FsbHMgcHVzaFN0YXRlIHdpdGggc3RhdGUgb2JqZWN0cyBv
ZiBhbGwgdGhlIGRpZmZlcmVudCBvYmplY3QgdHlwZXMgc3VwcG9ydGVkIGJ5IHRoZSBIVE1MNSAi
aW50ZXJuYWwgc3RydWN0dXJlZCBjbG9uaW5nIGFsZ29yaXRobSIgYW5kIG1ha2VzIHN1cmUgdGhl
IHN0YXRlIGF0dHJpYnV0ZSByZXR1cm5zIHRoZSBleHBlY3RlZCBvYmplY3RzLgorCitTdGF0ZSBp
cyBpbml0aWFsbHkgbnVsbCAodHlwZSBvYmplY3QpCitTdGF0ZSBwdXNoZWQgLSB1bmRlZmluZWQg
KHR5cGUgdW5kZWZpbmVkKQorU3RhdGUgcHVzaGVkIC0gbnVsbCAodHlwZSBvYmplY3QpCitTdGF0
ZSBwdXNoZWQgLSBmYWxzZSAodHlwZSBib29sZWFuKQorU3RhdGUgcHVzaGVkIC0gdHJ1ZSAodHlw
ZSBib29sZWFuKQorU3RhdGUgcHVzaGVkIC0gNDIgKHR5cGUgbnVtYmVyKQorU3RhdGUgcHVzaGVk
IC0gU3RyaW5nICh0eXBlIHN0cmluZykKK1N0YXRlIHB1c2hlZCAtIDAgKHR5cGUgb2JqZWN0KQor
U3RhdGUgcHVzaGVkIC0gL2Zvby9naSAodHlwZSBvYmplY3QpCitTdGF0ZSBwdXNoZWQgLSAgKHR5
cGUgb2JqZWN0KQorU3RhdGUgcHVzaGVkIC0gW29iamVjdCBPYmplY3RdICh0eXBlIG9iamVjdCkK
K1N0YXRlIHB1c2hlZCAtIFtvYmplY3QgSW1hZ2VEYXRhXSAodHlwZSBvYmplY3QpCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUtc3Rh
dGUtYXR0cmlidXRlLW9iamVjdC10eXBlcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIv
c3RhdGVvYmplY3RzL3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZjM1YTNkNzkzMzYxNzhiYzJiYzRhMDJmMmUyODk5MDNmNGY5YjA3NAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNo
c3RhdGUtc3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBlcy5odG1sCkBAIC0wLDAgKzEsNTcgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5jbGVhckJh
Y2tGb3J3YXJkTGlzdCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
K30KKworZnVuY3Rpb24gbG9nKHR4dCkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
bG9nZ2VyIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodHh0ICsgIlxuIikp
OworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBsb2coIlN0YXRlIGlzIGluaXRpYWxs
eSAiICsgaGlzdG9yeS5zdGF0ZSArICIgKHR5cGUgIiArIHR5cGVvZiBoaXN0b3J5LnN0YXRlICsg
IikiKTsKKyAgICBwdXNoQW5kVGVzdFN0YXRlKHVuZGVmaW5lZCwgInVuZGVmaW5lZCBlbnRyeSIp
OworICAgIHB1c2hBbmRUZXN0U3RhdGUobnVsbCwgIm51bGwgZW50cnkiKTsKKyAgICBwdXNoQW5k
VGVzdFN0YXRlKGZhbHNlLCAiZmFsc2UgZW50cnkiKTsKKyAgICBwdXNoQW5kVGVzdFN0YXRlKHRy
dWUsICJ0cnVlIGVudHJ5Iik7CisgICAgcHVzaEFuZFRlc3RTdGF0ZSg0MiwgIk51bWJlciBlbnRy
eSIpOworICAgIHB1c2hBbmRUZXN0U3RhdGUoIlN0cmluZyIsICJTdHJpbmcgZW50cnkiKTsKKyAg
ICBwdXNoQW5kVGVzdFN0YXRlKG5ldyBEYXRlKDApLCAiRGF0ZSBlbnRyeSIpOworICAgIHB1c2hB
bmRUZXN0U3RhdGUobmV3IFJlZ0V4cCgiZm9vIiwgImdpIiksICJSZWdFeHAgZW50cnkiKTsKKyAg
ICBwdXNoQW5kVGVzdFN0YXRlKG5ldyBBcnJheSwgIkFycmF5IGVudHJ5Iik7CisgICAgcHVzaEFu
ZFRlc3RTdGF0ZShuZXcgT2JqZWN0LCAiT2JqZWN0IGVudHJ5Iik7CisgICAgcHVzaEFuZFRlc3RT
dGF0ZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpLmNy
ZWF0ZUltYWdlRGF0YSgxMCwxMCksICJJbWFnZURhdGEgZW50cnkiKTsKKworLyogVGhlIGZvbGxv
d2luZyBhcmUgbm90IHlldCB3ZWxsIGVub3VnaCBzdXBwb3J0ZWQgaW4gV2ViS2l0IHRvIG1lYW5p
bmdmdWxseSB0ZXN0IGhlcmU6CisgICAgaGlzdG9yeS5wdXNoQW5kU3RhdGUoW0Jsb2JdLCAiQmxv
YiBlbnRyeSIpOworICAgIGhpc3RvcnkucHVzaEFuZFN0YXRlKFtGaWxlXSwgIkZpbGUgZW50cnki
KTsKKyAgICBoaXN0b3J5LnB1c2hBbmRTdGF0ZShbRmlsZUxpc3RdLCAiRmlsZUxpc3QgZW50cnki
KTsKKyovCit9CisKK2Z1bmN0aW9uIHB1c2hBbmRUZXN0U3RhdGUoZGF0YSwgdGl0bGUpCit7Cisg
ICAgaGlzdG9yeS5wdXNoU3RhdGUoZGF0YSwgdGl0bGUpOworICAgIHZhciBzdGF0ZSA9IGhpc3Rv
cnkuc3RhdGU7CisKKyAgICBpZiAoc3RhdGUgaW5zdGFuY2VvZiBEYXRlKQorICAgICAgICBsb2co
IlN0YXRlIHB1c2hlZCAtICIgKyBzdGF0ZS5nZXRUaW1lKCkgKyAiICh0eXBlICIgKyB0eXBlb2Yg
c3RhdGUgKyAiKSIpOworICAgIGVsc2UKKyAgICAgICAgbG9nKCJTdGF0ZSBwdXNoZWQgLSAiICsg
c3RhdGUgKyAiICh0eXBlICIgKyB0eXBlb2Ygc3RhdGUgKyAiKSIpOworfQorCis8L3NjcmlwdD4K
Kzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxwPgorVGhpcyB0ZXN0IGNhbGxzIHB1c2hTdGF0
ZSB3aXRoIHN0YXRlIG9iamVjdHMgb2YgYWxsIHRoZSBkaWZmZXJlbnQgb2JqZWN0IHR5cGVzIHN1
cHBvcnRlZCBieSB0aGUKK0hUTUw1ICJpbnRlcm5hbCBzdHJ1Y3R1cmVkIGNsb25pbmcgYWxnb3Jp
dGhtIiBhbmQgbWFrZXMgc3VyZSB0aGUgc3RhdGUgYXR0cmlidXRlIHJldHVybnMgdGhlIGV4cGVj
dGVkIG9iamVjdHMuCis8L3A+Cis8cHJlIGlkPSJsb2dnZXIiPjwvcHJlPgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3B1
c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb25seS1vbmUtZGVzZXJpYWxpemF0aW9uLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUtc3Rh
dGUtYXR0cmlidXRlLW9ubHktb25lLWRlc2VyaWFsaXphdGlvbi1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMWZkNzVkN2ZhMDgwNTk2NmI1Y2Q4ZWIzMjk5YWRiZDMwMzEwMmU3MgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUt
c3RhdGUtYXR0cmlidXRlLW9ubHktb25lLWRlc2VyaWFsaXphdGlvbi1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSwxNyBAQAorTWFrZSBzdXJlIHRoZSBzYW1lIGRlc2VyaWFsaXphdGlvbiBvZiB0aGUg
c3RhdGUgb2JqZWN0IGlzIHVzZWQgZXZlcnkgdGltZSAoYm90aCBpbiB0aGUgaGlzdG9yeSBvYmpl
Y3QgYW5kIHBvcHN0YXRlIGV2ZW50cykuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIGhpc3Rvcnkuc3RhdGUgIT09IHN0YXRlT2JqZWN0IGlzIHRydWUKK1BBU1MgaGlzdG9y
eS5zdGF0ZSA9PT0gc3RhdGVPYmplY3QgaXMgdHJ1ZQorCitJbnNpZGUgcG9wc3RhdGUgZXZlbnQK
KworUEFTUyBoaXN0b3J5LnN0YXRlICE9PSBzdGF0ZU9iamVjdCBpcyB0cnVlCitQQVNTIGV2ZW50
LnN0YXRlICE9PSBzdGF0ZU9iamVjdCBpcyB0cnVlCitGQUlMIGV2ZW50LnN0YXRlID09PSBoaXN0
b3J5LnN0YXRlIHNob3VsZCBiZSB0cnVlLiBXYXMgZmFsc2UuCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb25seS1v
bmUtZGVzZXJpYWxpemF0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9i
amVjdHMvcHVzaHN0YXRlLXN0YXRlLWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6YXRpb24u
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41ZWJlYmNmNjNlNTJkZGIwMTA1YWYyMTc0YmUzNDU2ZDUzNDBmZDg0
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3Rz
L3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb25seS1vbmUtZGVzZXJpYWxpemF0aW9uLmh0bWwK
QEAgLTAsMCArMSw2MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxz
Y3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkLz4KKzxib2R5PgorPHAgaWQ9ZGVzY3JpcHRpb24+Cis8L3A+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisgICAgZGVzY3JpcHRpb24oIk1ha2Ugc3VyZSB0aGUgc2Ft
ZSBkZXNlcmlhbGl6YXRpb24gb2YgdGhlIHN0YXRlIG9iamVjdCBpcyB1c2VkIGV2ZXJ5IHRpbWUg
KGJvdGggaW4gdGhlIGhpc3Rvcnkgb2JqZWN0IGFuZCBwb3BzdGF0ZSBldmVudHMpLiIpOworCisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5jbGVhckJhY2tGb3J3YXJkTGlzdCgpOworICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisK
KyAgICAvLyBDcmVhdGUgYSBuZXcgb2JqZWN0LgorICAgIHZhciBzdGF0ZU9iamVjdCA9IFsiYSJd
OworCisgICAgLy8gVXNlIGl0IGFzIHRoZSBzdGF0ZSBvYmplY3QgaW4gYSByZXBsYWNlU3RhdGUu
ICBUaGlzIGNsb25lcyB0aGUgb2JqZWN0LgorICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKHN0YXRl
T2JqZWN0LCBudWxsLCBudWxsKTsKKworICAgIC8vIFNpbmNlIHRoZSBhY3R1YWwgaGlzdG9yeS5z
dGF0ZSBpcyBhIHN0cnVjdHVyZWQgY2xvbmUsIGl0IHNob3VsZCBub3QgbWF0Y2ggb3VyIG9yaWdp
bmFsIG9iamVjdC4KKyAgICBzaG91bGRCZVRydWUoImhpc3Rvcnkuc3RhdGUgIT09IHN0YXRlT2Jq
ZWN0Iik7CisKKyAgICAvLyBOb3cgbGV0J3MgcmVmZXRjaCBhIGNvcHkgb2YgaGlzdG9yeS5zdGF0
ZSB0byBzdG9yZTsKKyAgICBzdGF0ZU9iamVjdCA9IGhpc3Rvcnkuc3RhdGU7CisKKyAgICAvLyBP
dXIgcmVmZXJlbmNlIGFuZCB0aGUgaGlzdG9yeS5zdGF0ZSBpdHNlbGYgc2hvdWxkIGJlIHRoZSBz
YW1lLiAgVGhpcyBpcyBub3cgQWRhbSdzIG9yaWdpbmFsIGFzc2VydGlvbi4KKyAgICBzaG91bGRC
ZVRydWUoImhpc3Rvcnkuc3RhdGUgPT09IHN0YXRlT2JqZWN0Iik7CisKKyAgICAvLyBOb3cgbGV0
J3MgZG8gYSBwdXNoc3RhdGUgdG8gYWRkIGEgaGlzdG9yeSBlbnRyeS4KKyAgICBoaXN0b3J5LnB1
c2hTdGF0ZShudWxsLCBudWxsLCBudWxsKTsKKworICAgIC8vIE5vdyBhZGQgYSBoYW5kbGVyIGZv
ciB0aGUgcG9wc3RhdGUgZXZlbnQuCisgICAgd2luZG93Lm9ucG9wc3RhdGUgPSBmdW5jdGlvbihl
dmVudCkgeworICAgICAgICBkZWJ1ZygiXG5JbnNpZGUgcG9wc3RhdGUgZXZlbnRcbiIpOworICAg
ICAgICAvLyBPdXIgc3RvcmVkIHJlZmVyZW5jZSB0byBzdGF0ZU9iamVjdCB3aWxsIG5vdCBtYXRj
aCB0aGUgY3VycmVudCBzdGF0ZSBvYmplY3QsIGFzIGl0IGlzIGEgc3RydWN0dXJlZCBjbG9uZSBv
ZiB0aGUgaGlzdG9yeSBpdGVtJ3Mgc3RhdGUgb2JqZWN0LgorICAgICAgICBzaG91bGRCZVRydWUo
Imhpc3Rvcnkuc3RhdGUgIT09IHN0YXRlT2JqZWN0Iik7CisgICAgICAgIC8vIE91ciBzdG9yZWQg
cmVmZXJlbmNlIHRvIHN0YXRlT2JqZWN0IHdpbGwgbm90IG1hdGNoIHRoZSBzdGF0ZSBvYmplY3Qg
aW4gdGhpcyBwb3Agc3RhdGUgZXZlbnQsIGFzIGl0IGlzIHRoZSBzYW1lIGFzIGhpc3Rvcnkuc3Rh
dGUgd2hpY2ggaXMgYSBzdHJ1Y3R1cmVkIGNsb25lIG9mIHRoZSBoaXN0b3J5IGl0ZW0ncyBzdGF0
ZSBvYmplY3QuCisgICAgICAgIHNob3VsZEJlVHJ1ZSgiZXZlbnQuc3RhdGUgIT09IHN0YXRlT2Jq
ZWN0Iik7CisgICAgICAgIC8vIFRoZSBldmVudCdzIHN0YXRlIG9iamVjdCBhbmQgdGhlIGN1cnJl
bnQgc3RhdGUgb2JqZWN0IHNob3VsZCBtYXRjaC4KKyAgICAgICAgc2hvdWxkQmVUcnVlKCJldmVu
dC5zdGF0ZSA9PT0gaGlzdG9yeS5zdGF0ZSIpOyAvLyBUaGlzIGZhaWxzIGZvciBub3csIG5lZWRz
IHRvIGJlIGZpeGVkLgorCisgICAgICAgIHZhciBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
c2NyaXB0Iik7CisgICAgICAgIHMuc3JjID0gIi4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiOworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHMpOworICAgICAgICBz
ZXRUaW1lb3V0KGZpbmlzaEpTVGVzdCwgMCk7CisgICAgfQorCisgICAgLy8gTm93IGxldCdzIGdv
IGJhY2sgdG8gb3VyIG9yaWdpbmFsIGhpc3RvcnkgZW50cnkgd2hpY2ggaGFzIGEgc3RhdGUgb2Jq
ZWN0IHRoYXQgd2UndmUgc3RvcmVkIGEgcmVmZXJlbmNlIHRvIGFscmVhZHkuCisgICAgLy8gVGhp
cyB3aWxsIGZpcmUgb3VyIHBvcHN0YXRlIGV2ZW50IGhhbmRsZXIgYWJvdmUuCisgICAgaGlzdG9y
eS5iYWNrKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122518</attachid>
            <date>2012-01-13 16:11:57 -0800</date>
            <delta_ts>2012-01-15 20:33:22 -0800</delta_ts>
            <desc>new try based on brady&apos;s suggestions</desc>
            <filename>bug-76035-20120113161156.patch</filename>
            <type>text/plain</type>
            <size>17259</size>
            <attacher name="Pablo Flouret">pf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0OTgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWE4ZjEzMTU0OTk5ODNk
NjkzOTFmZWM0ZGY5OGEzODU1OWEzODkzZC4uM2YwYzFjN2I2NDgwMWM4N2E4NWUwYTg3ZmYxZDg3
ZTdlNDU0NjlmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMxIEBACiAyMDEyLTAxLTEzICBQYWJs
byBGbG91cmV0ICA8cGFibG9mQG1vdG9yb2xhLmNvbT4KIAorICAgICAgICBBZGQgc3RhdGUgYXR0
cmlidXRlIHRvIGhpc3RvcnkncyBkb20gaW50ZXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogZmFzdC9sb2FkZXIvc3RhdGVvYmplY3Rz
L3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLmh0bWwKKyAgICAgICAgICAg
ICAgIGZhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUtc3RhdGUtYXR0cmlidXRlLW9u
bHktb25lLWRlc2VyaWFsaXphdGlvbi5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hp
c3RvcnlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIaXN0b3J5OjpzdGF0ZSk6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHA6CisgICAgICAg
ICogaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5SXRl
bTo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06OnNldFVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpIaXN0b3J5SXRlbTo6c2V0U3RhdGVPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SGlzdG9yeUl0ZW06OmNsZWFyRGVzZXJpYWxpemVkU3RhdGVPYmplY3QpOgorICAgICAg
ICAqIGhpc3RvcnkvSGlzdG9yeUl0ZW0uaDoKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVt
OjpkZXNlcmlhbGl6ZWRTdGF0ZU9iamVjdCk6CisgICAgICAgICogcGFnZS9IaXN0b3J5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okhpc3Rvcnk6OnN0YXRlKToKKyAgICAgICAgKiBwYWdlL0hpc3Rv
cnkuaDoKKyAgICAgICAgKiBwYWdlL0hpc3RvcnkuaWRsOgorCisKKzIwMTItMDEtMTMgIFBhYmxv
IEZsb3VyZXQgIDxwYWJsb2ZAbW90b3JvbGEuY29tPgorCiAgICAgICAgIEZpeCBjb21waWxhdGlv
biBlcnJvcnMgb24gYnVpbGQtd2Via2l0IC0tZGVidWcgLS1uby12aWRlbyBvbiBtYWMuCiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg2NwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAppbmRleCA3MmVh
NTQyNGM3YzEyZjNhNjcyYmM3ZDczOWUxMWRlZGZiNDgxOGM3Li40N2YzZGIwZGE5M2U3YTkwOGNl
OGE5MDc4ZjgwMDA4OTc0NmNjOGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSGlzdG9yeUN1c3RvbS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiSGlzdG9yeS5oIgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5j
bHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0
aW9uLmg+CiAKQEAgLTE2NCw2ICsxNjUsMTMgQEAgdm9pZCBKU0hpc3Rvcnk6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU4KICAg
ICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZXMsIG1vZGUpOwogfQogCitKU1ZhbHVlIEpTSGlzdG9yeTo6c3RhdGUoRXhlY1N0YXRlKiBleGVj
KSBjb25zdAoreworICAgIEhpc3RvcnkqIGhpc3RvcnkgPSBzdGF0aWNfY2FzdDxIaXN0b3J5Kj4o
aW1wbCgpKTsKKyAgICBTY3JpcHRWYWx1ZSBzdGF0ZSA9IGhpc3RvcnktPnN0YXRlKGV4ZWMpOwor
ICAgIHJldHVybiBzdGF0ZS5oYXNOb1ZhbHVlKCkgPyBqc051bGwoKSA6IHN0YXRlLmpzVmFsdWUo
KTsKK30KKwogSlNWYWx1ZSBKU0hpc3Rvcnk6OnB1c2hTdGF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaGlzdG9yeVN0YXRlID0gU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIDApOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1c3Rv
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIaXN0b3J5Q3VzdG9t
LmNwcAppbmRleCA4OTU2MTA5MGNhMTQ5ZGJkMWVmNzAzNmE5MWNkM2E5YTdlZmJhNjhiLi45ZmY5
NjcyNjNjNDhmOGM1M2UyNjQyNmQxNzU2MmU2M2VmYmI3MzBiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIaXN0b3J5Q3VzdG9tLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIaXN0b3J5Q3VzdG9tLmNwcApAQCAtMzMs
NiArMzMsNyBAQAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkhpc3Rv
cnkuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4QmluZGluZ1N0
YXRlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCmluZGV4IDIxYzgxZWRl
N2VmZTI2MWFkODY5NzUxZGNmOWU4ZjJhNDBhNWU4OTIuLjlmM2IzMmEzNzU2YTIyYTE1OTAxOWU0
YjA5MDdmNTYyZTVlZDZiOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlz
dG9yeUl0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3Bw
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAi
UGFnZUNhY2hlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiU2Ny
aXB0VmFsdWUuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMjAwLDYgKzIwMSw3IEBA
IHZvaWQgSGlzdG9yeUl0ZW06OnJlc2V0KCkKICAgICBtX2l0ZW1TZXF1ZW5jZU51bWJlciA9IGdl
bmVyYXRlU2VxdWVuY2VOdW1iZXIoKTsKIAogICAgIG1fc3RhdGVPYmplY3QgPSAwOworICAgIGNs
ZWFyRGVzZXJpYWxpemVkU3RhdGVPYmplY3QoKTsKICAgICBtX2RvY3VtZW50U2VxdWVuY2VOdW1i
ZXIgPSBnZW5lcmF0ZVNlcXVlbmNlTnVtYmVyKCk7CiAKICAgICBtX2Zvcm1EYXRhID0gMDsKQEAg
LTI4Miw2ICsyODQsNyBAQCB2b2lkIEhpc3RvcnlJdGVtOjpzZXRVUkwoY29uc3QgS1VSTCYgdXJs
KQogICAgIHBhZ2VDYWNoZSgpLT5yZW1vdmUodGhpcyk7CiAgICAgc2V0VVJMU3RyaW5nKHVybC5z
dHJpbmcoKSk7CiAgICAgY2xlYXJEb2N1bWVudFN0YXRlKCk7CisgICAgY2xlYXJEZXNlcmlhbGl6
ZWRTdGF0ZU9iamVjdCgpOwogfQogCiB2b2lkIEhpc3RvcnlJdGVtOjpzZXRPcmlnaW5hbFVSTFN0
cmluZyhjb25zdCBTdHJpbmcmIHVybFN0cmluZykKQEAgLTQ1Niw2ICs0NTksMTMgQEAgdm9pZCBI
aXN0b3J5SXRlbTo6c2V0SXNUYXJnZXRJdGVtKGJvb2wgZmxhZykKIHZvaWQgSGlzdG9yeUl0ZW06
OnNldFN0YXRlT2JqZWN0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBvYmplY3Qp
CiB7CiAgICAgbV9zdGF0ZU9iamVjdCA9IG9iamVjdDsKKyAgICBjbGVhckRlc2VyaWFsaXplZFN0
YXRlT2JqZWN0KCk7Cit9CisKK3ZvaWQgSGlzdG9yeUl0ZW06OmNsZWFyRGVzZXJpYWxpemVkU3Rh
dGVPYmplY3QoKQoreworICAgIGlmICghbV9kZXNlcmlhbGl6ZWRTdGF0ZU9iamVjdC5oYXNOb1Zh
bHVlKCkpCisgICAgICAgIG1fZGVzZXJpYWxpemVkU3RhdGVPYmplY3QgPSBTY3JpcHRWYWx1ZSgp
OwogfQogCiB2b2lkIEhpc3RvcnlJdGVtOjphZGRDaGlsZEl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5
SXRlbT4gY2hpbGQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJ
dGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmgKaW5kZXggODYxOWQw
YzM0NmJmODZiOWU3MjkyNjk2MjlkMzgyNWI3MDJmNmI3My4uYTg1NDQ1YjNjNDljMDFjZDEwZjAz
YWExNGFiZDAwYzMzMGFiMmI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9I
aXN0b3J5SXRlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uaApA
QCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KQEAgLTUzLDYgKzU0LDcgQEAgY2xhc3MgSGlzdG9yeUl0ZW07CiBjbGFzcyBJbWFnZTsK
IGNsYXNzIEtVUkw7CiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBTY3JpcHRWYWx1ZTsK
IGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIAogdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEhp
c3RvcnlJdGVtPiA+IEhpc3RvcnlJdGVtVmVjdG9yOwpAQCAtMTQxLDYgKzE0Myw3IEBAIHB1Ymxp
YzoKICAgICAKICAgICB2b2lkIHNldFN0YXRlT2JqZWN0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBvYmplY3QpOwogICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc3RhdGVPYmpl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlT2JqZWN0LmdldCgpOyB9CisgICAgU2NyaXB0VmFs
dWUmIGRlc2VyaWFsaXplZFN0YXRlT2JqZWN0KCkgeyByZXR1cm4gbV9kZXNlcmlhbGl6ZWRTdGF0
ZU9iamVjdDsgfQogCiAgICAgdm9pZCBzZXRJdGVtU2VxdWVuY2VOdW1iZXIobG9uZyBsb25nIG51
bWJlcikgeyBtX2l0ZW1TZXF1ZW5jZU51bWJlciA9IG51bWJlcjsgfQogICAgIGxvbmcgbG9uZyBp
dGVtU2VxdWVuY2VOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1TZXF1ZW5jZU51bWJlcjsg
fQpAQCAtMjI4LDYgKzIzMSw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGVuY29kZUJhY2tGb3J3
YXJkVHJlZU5vZGUoRW5jb2RlciYpIGNvbnN0OwogCisgICAgdm9pZCBjbGVhckRlc2VyaWFsaXpl
ZFN0YXRlT2JqZWN0KCk7CisKICAgICAvKiBXaGVuIGFkZGluZyBuZXcgbWVtYmVyIHZhcmlhYmxl
cyB0byB0aGlzIGNsYXNzLCBwbGVhc2Ugbm90aWZ5IHRoZSBRdCB0ZWFtLgogICAgICAqIHF0L0hp
c3RvcnlJdGVtUXQuY3BwIGNvbnRhaW5zIGNvZGUgdG8gc2VyaWFsaXplIGhpc3RvcnkgaXRlbXMu
CiAgICAgICovCkBAIC0yNzAsNiArMjc1LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIFN1cHBvcnQg
Zm9yIEhUTUw1IEhpc3RvcnkKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtX3N0
YXRlT2JqZWN0OworICAgIFNjcmlwdFZhbHVlIG1fZGVzZXJpYWxpemVkU3RhdGVPYmplY3Q7CiAg
ICAgCiAgICAgLy8gaW5mbyB1c2VkIHRvIHJlcG9zdCBmb3JtIGRhdGEKICAgICBSZWZQdHI8Rm9y
bURhdGE+IG1fZm9ybURhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3Rv
cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmNwcAppbmRleCAxZjVhMzlmMjg3
NTg0ZjdjMjc0OGIzM2UxMDk5ZTY2NGQxOTJhZTY4Li40ZGVjMjYyNjk5MjQ2ZDc4MmFiODk5NGM5
NDNjOGJiNTc2MjVmZmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3Rvcnku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5jcHAKQEAgLTMyLDggKzMyLDEw
IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiSGlzdG9yeUNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJT
Y3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTEw
Nyw2ICsxMDksMjYgQEAgS1VSTCBIaXN0b3J5Ojp1cmxGb3JTdGF0ZShjb25zdCBTdHJpbmcmIHVy
bFN0cmluZykKICAgICByZXR1cm4gS1VSTChiYXNlVVJMLCB1cmxTdHJpbmcpOwogfQogCitTY3Jp
cHRWYWx1ZSBIaXN0b3J5OjpzdGF0ZShTY3JpcHRTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICBp
ZiAobV9mcmFtZSkgeworICAgICAgICBpZiAoSGlzdG9yeUl0ZW0qIGhpc3RvcnlJdGVtID0gbV9m
cmFtZS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKSkgeworICAgICAgICAgICAg
U2NyaXB0VmFsdWUmIHN0YXRlID0gaGlzdG9yeUl0ZW0tPmRlc2VyaWFsaXplZFN0YXRlT2JqZWN0
KCk7CisgICAgICAgICAgICBpZiAoc3RhdGUuaGFzTm9WYWx1ZSgpICYmIGhpc3RvcnlJdGVtLT5z
dGF0ZU9iamVjdCgpKSB7CisjaWYgVVNFKFY4KQorICAgICAgICAgICAgICAgIHN0YXRlID0gU2Ny
aXB0VmFsdWUoaGlzdG9yeUl0ZW0tPnN0YXRlT2JqZWN0KCktPmRlc2VyaWFsaXplKCkpOworI2Vs
c2UKKyAgICAgICAgICAgICAgICBBU1NFUlQoZXhlYyk7CisgICAgICAgICAgICAgICAgc3RhdGUg
PSBTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoZXhlYywgaGlzdG9yeUl0ZW0tPnN0YXRlT2JqZWN0
KCkpOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc3RhdGU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKK30KKwogdm9pZCBI
aXN0b3J5OjpzdGF0ZU9iamVjdEFkZGVkKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBkYXRhLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZywgU3Rh
dGVPYmplY3RUeXBlIHN0YXRlT2JqZWN0VHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
aWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5wYWdlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0hpc3RvcnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5oCmluZGV4
IGJkNTBmY2NkMmI4NjFkOWU2NDE4ZTk3NGY0MmRmYjJiMmI1ZjkxY2UuLjc1NGNmOTIwNDkyNTUz
NTFkZWMwZDIxY2I4NmU2YmYzMzg0MDMyNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvSGlzdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5oCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNpbmNsdWRlICJET01XaW5kb3dQcm9wZXJ0eS5oIgogI2luY2x1ZGUgIktV
UkwuaCIKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgpAQCAtMzYsNiArMzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZyYW1lOwog
Y2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIFNjcmlwdFZhbHVlOwogY2xhc3Mg
U2VyaWFsaXplZFNjcmlwdFZhbHVlOwogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIApAQCAt
NTYsNiArNTgsOSBAQCBwdWJsaWM6CiAgICAgICAgIFN0YXRlT2JqZWN0UHVzaCwKICAgICAgICAg
U3RhdGVPYmplY3RSZXBsYWNlCiAgICAgfTsKKworICAgIFNjcmlwdFZhbHVlIHN0YXRlKFNjcmlw
dFN0YXRlKiBleGVjID0gMCkgY29uc3Q7CisKICAgICB2b2lkIHN0YXRlT2JqZWN0QWRkZWQoUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25z
dCBTdHJpbmcmIHVybCwgU3RhdGVPYmplY3RUeXBlLCBFeGNlcHRpb25Db2RlJik7CiAKIHByaXZh
dGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuaWRsIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9IaXN0b3J5LmlkbAppbmRleCBmZjM3MDFlZDI3NmQ0ZjU2OThkYTZhMDUz
MGUwNjYzODBhMzNiMWMxLi5mMGI2NTY2ODY1NGM1ZTFjNmNlMmZlOGY5NmZmMTdlNzJmOWY5ZWQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuaWRsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5pZGwKQEAgLTM3LDYgKzM3LDcgQEAgbW9kdWxlIHdpbmRv
dyB7CiAgICAgICAgIE9taXRDb25zdHJ1Y3RvcgogICAgIF0gSGlzdG9yeSB7CiAgICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXJdIERPTU9iamVjdCBzdGF0ZTsKIAogICAgICAgICBb
RG9Ob3RDaGVja0RvbWFpblNlY3VyaXR5LCBDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0
XSB2b2lkIGJhY2soKTsKICAgICAgICAgW0RvTm90Q2hlY2tEb21haW5TZWN1cml0eSwgQ2FsbFdp
dGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gdm9pZCBmb3J3YXJkKCk7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTAzN2Qw
YTM1ODdjZTBkMGFmYjY1MWRhMWI5YTM4YmQ1NDU3ODMzMi4uMTI2ZWM0NWZhNWQ5OGUyZTQ3YTAy
YmM0MTZkNWZlNGM3NWQ0ZWM5OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAxLTEzICBQ
YWJsbyBGbG91cmV0ICA8cGFibG9mQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBBZGQgc3RhdGUg
YXR0cmlidXRlIHRvIGhpc3RvcnkncyBkb20gaW50ZXJmYWNlLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMzUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9w
dXNoc3RhdGUtc3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBlcy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUtc3RhdGUtYXR0
cmlidXRlLW9iamVjdC10eXBlcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9z
dGF0ZW9iamVjdHMvcHVzaHN0YXRlLXN0YXRlLWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6
YXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9i
amVjdHMvcHVzaHN0YXRlLXN0YXRlLWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6YXRpb24u
aHRtbDogQWRkZWQuCisKIDIwMTItMDEtMTMgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBh
cHBsZS5jb20+CiAKICAgICAgICAgQWRkIG5ldyBiYXNlbGluZXMgZm9yIHZhcmlvdXMgY29tcG9z
aXRpbmcgdGVzdHMgd2hpY2ggZGlkbid0IGhhdmUgTWFjIHJlc3VsdHMuCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvcHVzaHN0YXRlLXN0YXRlLWF0dHJp
YnV0ZS1vYmplY3QtdHlwZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIv
c3RhdGVvYmplY3RzL3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jMWE4N2E3OGZiYzY4OTNmMGM2ZTFmOTk1ODRjZWRiNTNlYjg2
NjExCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmpl
Y3RzL3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDE1IEBACitUaGlzIHRlc3QgY2FsbHMgcHVzaFN0YXRlIHdpdGggc3RhdGUgb2Jq
ZWN0cyBvZiBhbGwgdGhlIGRpZmZlcmVudCBvYmplY3QgdHlwZXMgc3VwcG9ydGVkIGJ5IHRoZSBI
VE1MNSAiaW50ZXJuYWwgc3RydWN0dXJlZCBjbG9uaW5nIGFsZ29yaXRobSIgYW5kIG1ha2VzIHN1
cmUgdGhlIHN0YXRlIGF0dHJpYnV0ZSByZXR1cm5zIHRoZSBleHBlY3RlZCBvYmplY3RzLgorCitT
dGF0ZSBpcyBpbml0aWFsbHkgbnVsbCAodHlwZSBvYmplY3QpCitTdGF0ZSBwdXNoZWQgLSB1bmRl
ZmluZWQgKHR5cGUgdW5kZWZpbmVkKQorU3RhdGUgcHVzaGVkIC0gbnVsbCAodHlwZSBvYmplY3Qp
CitTdGF0ZSBwdXNoZWQgLSBmYWxzZSAodHlwZSBib29sZWFuKQorU3RhdGUgcHVzaGVkIC0gdHJ1
ZSAodHlwZSBib29sZWFuKQorU3RhdGUgcHVzaGVkIC0gNDIgKHR5cGUgbnVtYmVyKQorU3RhdGUg
cHVzaGVkIC0gU3RyaW5nICh0eXBlIHN0cmluZykKK1N0YXRlIHB1c2hlZCAtIDAgKHR5cGUgb2Jq
ZWN0KQorU3RhdGUgcHVzaGVkIC0gL2Zvby9naSAodHlwZSBvYmplY3QpCitTdGF0ZSBwdXNoZWQg
LSAgKHR5cGUgb2JqZWN0KQorU3RhdGUgcHVzaGVkIC0gW29iamVjdCBPYmplY3RdICh0eXBlIG9i
amVjdCkKK1N0YXRlIHB1c2hlZCAtIFtvYmplY3QgSW1hZ2VEYXRhXSAodHlwZSBvYmplY3QpCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3Rh
dGUtc3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBlcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9s
b2FkZXIvc3RhdGVvYmplY3RzL3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVz
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjM1YTNkNzkzMzYxNzhiYzJiYzRhMDJmMmUyODk5MDNmNGY5YjA3
NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0
cy9wdXNoc3RhdGUtc3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBlcy5odG1sCkBAIC0wLDAgKzEs
NTcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2lmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5j
bGVhckJhY2tGb3J3YXJkTGlzdCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKK30KKworZnVuY3Rpb24gbG9nKHR4dCkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgibG9nZ2VyIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodHh0ICsg
IlxuIikpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBsb2coIlN0YXRlIGlzIGlu
aXRpYWxseSAiICsgaGlzdG9yeS5zdGF0ZSArICIgKHR5cGUgIiArIHR5cGVvZiBoaXN0b3J5LnN0
YXRlICsgIikiKTsKKyAgICBwdXNoQW5kVGVzdFN0YXRlKHVuZGVmaW5lZCwgInVuZGVmaW5lZCBl
bnRyeSIpOworICAgIHB1c2hBbmRUZXN0U3RhdGUobnVsbCwgIm51bGwgZW50cnkiKTsKKyAgICBw
dXNoQW5kVGVzdFN0YXRlKGZhbHNlLCAiZmFsc2UgZW50cnkiKTsKKyAgICBwdXNoQW5kVGVzdFN0
YXRlKHRydWUsICJ0cnVlIGVudHJ5Iik7CisgICAgcHVzaEFuZFRlc3RTdGF0ZSg0MiwgIk51bWJl
ciBlbnRyeSIpOworICAgIHB1c2hBbmRUZXN0U3RhdGUoIlN0cmluZyIsICJTdHJpbmcgZW50cnki
KTsKKyAgICBwdXNoQW5kVGVzdFN0YXRlKG5ldyBEYXRlKDApLCAiRGF0ZSBlbnRyeSIpOworICAg
IHB1c2hBbmRUZXN0U3RhdGUobmV3IFJlZ0V4cCgiZm9vIiwgImdpIiksICJSZWdFeHAgZW50cnki
KTsKKyAgICBwdXNoQW5kVGVzdFN0YXRlKG5ldyBBcnJheSwgIkFycmF5IGVudHJ5Iik7CisgICAg
cHVzaEFuZFRlc3RTdGF0ZShuZXcgT2JqZWN0LCAiT2JqZWN0IGVudHJ5Iik7CisgICAgcHVzaEFu
ZFRlc3RTdGF0ZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIy
ZCIpLmNyZWF0ZUltYWdlRGF0YSgxMCwxMCksICJJbWFnZURhdGEgZW50cnkiKTsKKworLyogVGhl
IGZvbGxvd2luZyBhcmUgbm90IHlldCB3ZWxsIGVub3VnaCBzdXBwb3J0ZWQgaW4gV2ViS2l0IHRv
IG1lYW5pbmdmdWxseSB0ZXN0IGhlcmU6CisgICAgaGlzdG9yeS5wdXNoQW5kU3RhdGUoW0Jsb2Jd
LCAiQmxvYiBlbnRyeSIpOworICAgIGhpc3RvcnkucHVzaEFuZFN0YXRlKFtGaWxlXSwgIkZpbGUg
ZW50cnkiKTsKKyAgICBoaXN0b3J5LnB1c2hBbmRTdGF0ZShbRmlsZUxpc3RdLCAiRmlsZUxpc3Qg
ZW50cnkiKTsKKyovCit9CisKK2Z1bmN0aW9uIHB1c2hBbmRUZXN0U3RhdGUoZGF0YSwgdGl0bGUp
Cit7CisgICAgaGlzdG9yeS5wdXNoU3RhdGUoZGF0YSwgdGl0bGUpOworICAgIHZhciBzdGF0ZSA9
IGhpc3Rvcnkuc3RhdGU7CisKKyAgICBpZiAoc3RhdGUgaW5zdGFuY2VvZiBEYXRlKQorICAgICAg
ICBsb2coIlN0YXRlIHB1c2hlZCAtICIgKyBzdGF0ZS5nZXRUaW1lKCkgKyAiICh0eXBlICIgKyB0
eXBlb2Ygc3RhdGUgKyAiKSIpOworICAgIGVsc2UKKyAgICAgICAgbG9nKCJTdGF0ZSBwdXNoZWQg
LSAiICsgc3RhdGUgKyAiICh0eXBlICIgKyB0eXBlb2Ygc3RhdGUgKyAiKSIpOworfQorCis8L3Nj
cmlwdD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxwPgorVGhpcyB0ZXN0IGNhbGxzIHB1
c2hTdGF0ZSB3aXRoIHN0YXRlIG9iamVjdHMgb2YgYWxsIHRoZSBkaWZmZXJlbnQgb2JqZWN0IHR5
cGVzIHN1cHBvcnRlZCBieSB0aGUKK0hUTUw1ICJpbnRlcm5hbCBzdHJ1Y3R1cmVkIGNsb25pbmcg
YWxnb3JpdGhtIiBhbmQgbWFrZXMgc3VyZSB0aGUgc3RhdGUgYXR0cmlidXRlIHJldHVybnMgdGhl
IGV4cGVjdGVkIG9iamVjdHMuCis8L3A+Cis8cHJlIGlkPSJsb2dnZXIiPjwvcHJlPgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmpl
Y3RzL3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb25seS1vbmUtZGVzZXJpYWxpemF0aW9uLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3Rh
dGUtc3RhdGUtYXR0cmlidXRlLW9ubHktb25lLWRlc2VyaWFsaXphdGlvbi1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMWZkNzVkN2ZhMDgwNTk2NmI1Y2Q4ZWIzMjk5YWRiZDMwMzEwMmU3MgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNo
c3RhdGUtc3RhdGUtYXR0cmlidXRlLW9ubHktb25lLWRlc2VyaWFsaXphdGlvbi1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwxNyBAQAorTWFrZSBzdXJlIHRoZSBzYW1lIGRlc2VyaWFsaXphdGlvbiBv
ZiB0aGUgc3RhdGUgb2JqZWN0IGlzIHVzZWQgZXZlcnkgdGltZSAoYm90aCBpbiB0aGUgaGlzdG9y
eSBvYmplY3QgYW5kIHBvcHN0YXRlIGV2ZW50cykuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIGhpc3Rvcnkuc3RhdGUgIT09IHN0YXRlT2JqZWN0IGlzIHRydWUKK1BBU1Mg
aGlzdG9yeS5zdGF0ZSA9PT0gc3RhdGVPYmplY3QgaXMgdHJ1ZQorCitJbnNpZGUgcG9wc3RhdGUg
ZXZlbnQKKworUEFTUyBoaXN0b3J5LnN0YXRlICE9PSBzdGF0ZU9iamVjdCBpcyB0cnVlCitQQVNT
IGV2ZW50LnN0YXRlICE9PSBzdGF0ZU9iamVjdCBpcyB0cnVlCitGQUlMIGV2ZW50LnN0YXRlID09
PSBoaXN0b3J5LnN0YXRlIHNob3VsZCBiZSB0cnVlLiBXYXMgZmFsc2UuCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUt
b25seS1vbmUtZGVzZXJpYWxpemF0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9z
dGF0ZW9iamVjdHMvcHVzaHN0YXRlLXN0YXRlLWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6
YXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZWJlYmNmNjNlNTJkZGIwMTA1YWYyMTc0YmUzNDU2ZDUz
NDBmZDg0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVv
YmplY3RzL3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb25seS1vbmUtZGVzZXJpYWxpemF0aW9u
Lmh0bWwKQEAgLTAsMCArMSw2MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
ICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPC9oZWFkLz4KKzxib2R5PgorPHAgaWQ9ZGVzY3JpcHRpb24+Cis8L3A+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisgICAgZGVzY3JpcHRpb24oIk1ha2Ugc3VyZSB0
aGUgc2FtZSBkZXNlcmlhbGl6YXRpb24gb2YgdGhlIHN0YXRlIG9iamVjdCBpcyB1c2VkIGV2ZXJ5
IHRpbWUgKGJvdGggaW4gdGhlIGhpc3Rvcnkgb2JqZWN0IGFuZCBwb3BzdGF0ZSBldmVudHMpLiIp
OworCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5jbGVhckJhY2tGb3J3YXJkTGlzdCgpOworICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRy
dWU7CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgb2JqZWN0LgorICAgIHZhciBzdGF0ZU9iamVjdCA9
IFsiYSJdOworCisgICAgLy8gVXNlIGl0IGFzIHRoZSBzdGF0ZSBvYmplY3QgaW4gYSByZXBsYWNl
U3RhdGUuICBUaGlzIGNsb25lcyB0aGUgb2JqZWN0LgorICAgIGhpc3RvcnkucmVwbGFjZVN0YXRl
KHN0YXRlT2JqZWN0LCBudWxsLCBudWxsKTsKKworICAgIC8vIFNpbmNlIHRoZSBhY3R1YWwgaGlz
dG9yeS5zdGF0ZSBpcyBhIHN0cnVjdHVyZWQgY2xvbmUsIGl0IHNob3VsZCBub3QgbWF0Y2ggb3Vy
IG9yaWdpbmFsIG9iamVjdC4KKyAgICBzaG91bGRCZVRydWUoImhpc3Rvcnkuc3RhdGUgIT09IHN0
YXRlT2JqZWN0Iik7CisKKyAgICAvLyBOb3cgbGV0J3MgcmVmZXRjaCBhIGNvcHkgb2YgaGlzdG9y
eS5zdGF0ZSB0byBzdG9yZTsKKyAgICBzdGF0ZU9iamVjdCA9IGhpc3Rvcnkuc3RhdGU7CisKKyAg
ICAvLyBPdXIgcmVmZXJlbmNlIGFuZCB0aGUgaGlzdG9yeS5zdGF0ZSBpdHNlbGYgc2hvdWxkIGJl
IHRoZSBzYW1lLiAgVGhpcyBpcyBub3cgQWRhbSdzIG9yaWdpbmFsIGFzc2VydGlvbi4KKyAgICBz
aG91bGRCZVRydWUoImhpc3Rvcnkuc3RhdGUgPT09IHN0YXRlT2JqZWN0Iik7CisKKyAgICAvLyBO
b3cgbGV0J3MgZG8gYSBwdXNoc3RhdGUgdG8gYWRkIGEgaGlzdG9yeSBlbnRyeS4KKyAgICBoaXN0
b3J5LnB1c2hTdGF0ZShudWxsLCBudWxsLCBudWxsKTsKKworICAgIC8vIE5vdyBhZGQgYSBoYW5k
bGVyIGZvciB0aGUgcG9wc3RhdGUgZXZlbnQuCisgICAgd2luZG93Lm9ucG9wc3RhdGUgPSBmdW5j
dGlvbihldmVudCkgeworICAgICAgICBkZWJ1ZygiXG5JbnNpZGUgcG9wc3RhdGUgZXZlbnRcbiIp
OworICAgICAgICAvLyBPdXIgc3RvcmVkIHJlZmVyZW5jZSB0byBzdGF0ZU9iamVjdCB3aWxsIG5v
dCBtYXRjaCB0aGUgY3VycmVudCBzdGF0ZSBvYmplY3QsIGFzIGl0IGlzIGEgc3RydWN0dXJlZCBj
bG9uZSBvZiB0aGUgaGlzdG9yeSBpdGVtJ3Mgc3RhdGUgb2JqZWN0LgorICAgICAgICBzaG91bGRC
ZVRydWUoImhpc3Rvcnkuc3RhdGUgIT09IHN0YXRlT2JqZWN0Iik7CisgICAgICAgIC8vIE91ciBz
dG9yZWQgcmVmZXJlbmNlIHRvIHN0YXRlT2JqZWN0IHdpbGwgbm90IG1hdGNoIHRoZSBzdGF0ZSBv
YmplY3QgaW4gdGhpcyBwb3Agc3RhdGUgZXZlbnQsIGFzIGl0IGlzIHRoZSBzYW1lIGFzIGhpc3Rv
cnkuc3RhdGUgd2hpY2ggaXMgYSBzdHJ1Y3R1cmVkIGNsb25lIG9mIHRoZSBoaXN0b3J5IGl0ZW0n
cyBzdGF0ZSBvYmplY3QuCisgICAgICAgIHNob3VsZEJlVHJ1ZSgiZXZlbnQuc3RhdGUgIT09IHN0
YXRlT2JqZWN0Iik7CisgICAgICAgIC8vIFRoZSBldmVudCdzIHN0YXRlIG9iamVjdCBhbmQgdGhl
IGN1cnJlbnQgc3RhdGUgb2JqZWN0IHNob3VsZCBtYXRjaC4KKyAgICAgICAgc2hvdWxkQmVUcnVl
KCJldmVudC5zdGF0ZSA9PT0gaGlzdG9yeS5zdGF0ZSIpOyAvLyBUaGlzIGZhaWxzIGZvciBub3cs
IG5lZWRzIHRvIGJlIGZpeGVkLgorCisgICAgICAgIHZhciBzID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgic2NyaXB0Iik7CisgICAgICAgIHMuc3JjID0gIi4uLy4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiOworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHMpOworICAg
ICAgICBzZXRUaW1lb3V0KGZpbmlzaEpTVGVzdCwgMCk7CisgICAgfQorCisgICAgLy8gTm93IGxl
dCdzIGdvIGJhY2sgdG8gb3VyIG9yaWdpbmFsIGhpc3RvcnkgZW50cnkgd2hpY2ggaGFzIGEgc3Rh
dGUgb2JqZWN0IHRoYXQgd2UndmUgc3RvcmVkIGEgcmVmZXJlbmNlIHRvIGFscmVhZHkuCisgICAg
Ly8gVGhpcyB3aWxsIGZpcmUgb3VyIHBvcHN0YXRlIGV2ZW50IGhhbmRsZXIgYWJvdmUuCisgICAg
aGlzdG9yeS5iYWNrKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122586</attachid>
            <date>2012-01-15 20:33:29 -0800</date>
            <delta_ts>2012-01-17 18:31:48 -0800</delta_ts>
            <desc>add [CallWith] support for attributes and cleanup from review comments</desc>
            <filename>bug-76035-20120115203328.patch</filename>
            <type>text/plain</type>
            <size>47574</size>
            <attacher name="Pablo Flouret">pf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0OTgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWE4ZjEzMTU0OTk5ODNk
NjkzOTFmZWM0ZGY5OGEzODU1OWEzODkzZC4uMzVhNDE0OTFhMjkxN2FmZjFkMzU1OTMzMDQxZTBk
ZDQ5MTJlNjMxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEyLTAxLTE0ICBQYWJs
byBGbG91cmV0ICA8cGFibG9mQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBBZGQgc3RhdGUgYXR0
cmlidXRlIHRvIGhpc3RvcnkncyBkb20gaW50ZXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUbyBiZSBhYmxlIHRvIGtlZXAgYSBzaW5nbGUgZGVz
ZXJpYWxpemF0aW9uIG9mIHRoZSBzdGF0ZSBvYmplY3QsIHRoZQorICAgICAgICBkZXNlcmlhbGl6
ZWQgc2NyaXB0IHZhbHVlIGlzIGtlcHQgYWxvbmdzaWRlIHRoZSBzZXJpYWxpemVkIHN0YXRlIG9i
amVjdAorICAgICAgICBpbiB0aGUgSGlzdG9yeUl0ZW0sIHdoaWNoIGFsc28gdGFrZXMgY2FyZSBv
ZiB0aGUgZGVzZXJpYWxpemF0aW9uLiBUbyBiZQorICAgICAgICBhYmxlIHRvIGRvIHRoZSBkZXNl
cmlhbGl6YXRpb24gdGhlcmUgaW5zdGVhZCBvZiBkb2luZyBpdCBpbiB0aGUgYmluZGluZworICAg
ICAgICBjb2RlLCBbQ2FsbFdpdGhdIHN1cHBvcnQgZm9yIGF0dHJpYnV0ZXMgd2FzIGFkZGVkIGlu
IHRoZSBKUy9WOCBpZGwgY29kZQorICAgICAgICBnZW5lcmF0b3JzLgorCisgICAgICAgIFRlc3Rz
OiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvcHVzaHN0YXRlLXN0YXRlLWF0dHJpYnV0ZS1vYmpl
Y3QtdHlwZXMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3B1
c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb25seS1vbmUtZGVzZXJpYWxpemF0aW9uLmh0bWwKKwor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHA6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0VmFsdWU6
OlNjcmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUF0dHJpYnV0ZUNhbGxXaXRo
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAg
ICAgKEdlbmVyYXRlTm9ybWFsQXR0ckdldHRlcik6CisgICAgICAgIChHZW5lcmF0ZU5vcm1hbEF0
dHJTZXR0ZXIpOgorICAgICAgICAoR2VuZXJhdGVBdHRyaWJ1dGVDYWxsV2l0aCk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmli
dXRlUmFpc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0
ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpX
aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaDoKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJu
YWw6OndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdE9iakludGVybmFsOjp3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVBdHRyU2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBdHRyaWJ1dGVBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRl
cm5hbDo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVBdHRyU2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRl
UmFpc2VzQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Ondp
dGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0F0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdE9iakludGVybmFsOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJh
aXNlc0F0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjp3aXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0F0dHJTZXR0ZXIpOgorICAgICAg
ICAqIGhpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0
ZW06OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpzZXRVUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06OnNldFN0YXRlT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6Okhpc3RvcnlJdGVtOjpnZXRPckNyZWF0ZURlc2VyaWFsaXplZFN0YXRlT2JqZWN0KToK
KyAgICAgICAgKiBoaXN0b3J5L0hpc3RvcnlJdGVtLmg6CisgICAgICAgICogcGFnZS9IaXN0b3J5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okhpc3Rvcnk6OnN0YXRlKToKKyAgICAgICAgKiBwYWdl
L0hpc3RvcnkuaDoKKyAgICAgICAgKiBwYWdlL0hpc3RvcnkuaWRsOgorCiAyMDEyLTAxLTEzICBQ
YWJsbyBGbG91cmV0ICA8cGFibG9mQG1vdG9yb2xhLmNvbT4KIAogICAgICAgICBGaXggY29tcGls
YXRpb24gZXJyb3JzIG9uIGJ1aWxkLXdlYmtpdCAtLWRlYnVnIC0tbm8tdmlkZW8gb24gbWFjLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKaW5kZXgg
NzJlYTU0MjRjN2MxMmYzYTY3MmJjN2Q3MzllMTFkZWRmYjQ4MThjNy4uMGExNjkyMjRkODgyZDE2
MzgwYzA5OTE0YjcxYmVmN2I5ODhjZmJmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkhpc3RvcnkuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgog
I2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNG
dW5jdGlvbi5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAK
aW5kZXggYmZhOTNhYTg3MDdiMDlhOWUzYjRiNjMxMzdhMmJkM2U4ZTYzMmYyYy4uYTZmNjI5YmI5
Y2JmNGI3NDg0Y2RmYjYwYTdiZmVmMDZkNmE1ZWM4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdFZhbHVlLmNwcApAQCAtNDQsNiArNDQsMTQgQEAgdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitTY3JpcHRWYWx1ZTo6U2NyaXB0VmFsdWUo
Y29uc3QgU2NyaXB0VmFsdWUmIHZhbHVlKQoreworICAgIGlmICghdmFsdWUubV92YWx1ZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV92YWx1ZSA9IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4o
dmFsdWUubV92YWx1ZSk7Cit9CisKIGJvb2wgU2NyaXB0VmFsdWU6OmdldFN0cmluZyhTY3JpcHRT
dGF0ZSogc2NyaXB0U3RhdGUsIFN0cmluZyYgcmVzdWx0KSBjb25zdAogewogICAgIGlmICghbV92
YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVl
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCmluZGV4IGE0ZDU5
N2E5MTc1NjZlOWMyMTA1N2U1ZDVmZDQzMzc3YWM1OWU5YTQuLmE5MWE3ZDcwMzg2YWM5MDU1OTIz
MmMyYjZhNDZlZmMxNjQzY2IyODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
VmFsdWUuaApAQCAtNDksNiArNDksNyBAQCBjbGFzcyBTY3JpcHRWYWx1ZSB7CiBwdWJsaWM6CiAg
ICAgU2NyaXB0VmFsdWUoKSB7IH0KICAgICBTY3JpcHRWYWx1ZShKU0M6OkpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSA6IG1fdmFsdWUoZ2xvYmFsRGF0YSwgdmFs
dWUpIHt9CisgICAgU2NyaXB0VmFsdWUoY29uc3QgU2NyaXB0VmFsdWUmKTsKICAgICB2aXJ0dWFs
IH5TY3JpcHRWYWx1ZSgpIHt9CiAKICAgICBKU0M6OkpTVmFsdWUganNWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggMDRmYTdiYjY3ZWNkMjE3YzY5OGY1YTg0
NjU5ZjBjYjU2NzNmY2RiYy4uODI3MGZhNjZiYzZhY2Y1Mzg3OTk4MzgxZDQ5MTI0YWFiZGVjNTUy
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0KQEAgLTE3NjQsNyArMTc2NCwxMSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgICAgICAgICAgICAgICAgICAjIE9uY2UgSlNET01XcmFwcGVycyBoYXZlIGEgYmFjay1w
b2ludGVyIHRvIHRoZSBnbG9iYWxPYmplY3Qgd2UgY2FuIHBhc3MgY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCkKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0
dXJuIEpTIiAuICRjb25zdHJ1Y3RvclR5cGUgLiAiOjpnZXRDb25zdHJ1Y3RvcihleGVjLCBjYXN0
ZWRUaGlzKTtcbiIpOwogICAgICAgICAgICAgICAgIH0gZWxzaWYgKCFAeyRhdHRyaWJ1dGUtPmdl
dHRlckV4Y2VwdGlvbnN9KSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIFVOVVNFRF9QQVJBTShleGVjKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBteSAk
Y2FsbFdpdGggPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
YWxsV2l0aCJ9OworICAgICAgICAgICAgICAgICAgICBteSAkY2FsbFdpdGhBcmcgPSAiIjsKKwor
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0o
ZXhlYyk7XG4iKSBpZiAoISRjYWxsV2l0aCk7CisKICAgICAgICAgICAgICAgICAgICAgbXkgJGNh
Y2hlSW5kZXggPSAwOwogICAgICAgICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FjaGVkQXR0cmlidXRlIn0pIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICRjYWNoZUluZGV4ID0gJGN1cnJlbnRDYWNoZWRBdHRyaWJ1dGU7CkBA
IC0xNzczLDE0ICsxNzc3LDE5IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGNhY2hl
ZFZhbHVlO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgICAg
ICBpZiAoJGNhbGxXaXRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkY2FsbFdpdGhBcmcg
PSBHZW5lcmF0ZUF0dHJpYnV0ZUNhbGxXaXRoKCRjYWxsV2l0aCwgXEBpbXBsQ29udGVudCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICBpZiAoJHN2Z0xpc3RQ
cm9wZXJ0eVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLCAwLCAkaW1wbENsYXNzTmFtZSwgImNhc3RlZFRoaXMtPmltcGwoKS0+JGltcGxH
ZXR0ZXJGdW5jdGlvbk5hbWUoKSIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICAi
IC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGltcGxDbGFzc05h
bWUsICJjYXN0ZWRUaGlzLT5pbXBsKCktPiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCRjYWxsV2l0
aEFyZykiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9IGVs
c2lmICgkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5
VHlwZSYgaW1wbCA9IGNhc3RlZFRoaXMtPmltcGwoKS0+cHJvcGVydHlSZWZlcmVuY2UoKTtcbiIp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5
VHlwZSBlcSAiZmxvYXQiKSB7ICMgU3BlY2lhbCBjYXNlIGZvciBKU1NWR051bWJlcgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVz
dWx0ID0gICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW1w
bENsYXNzTmFtZSwgImltcGwiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGltcGxDbGFzc05hbWUsICJpbXBsLiRpbXBsR2V0dGVy
RnVuY3Rpb25OYW1lKCkiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gICIg
LiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW1wbENsYXNzTmFt
ZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoJGNhbGxXaXRoQXJnKSIsICJjYXN0ZWRU
aGlzIikgLiAiO1xuIik7CisKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG15ICgkZnVuY3Rpb25O
YW1lLCBAYXJndW1lbnRzKSA9ICRjb2RlR2VuZXJhdG9yLT5HZXR0ZXJFeHByZXNzaW9uKFwlaW1w
bEluY2x1ZGVzLCAkaW50ZXJmYWNlTmFtZSwgJGF0dHJpYnV0ZSk7CkBAIC0xNzkzLDYgKzE4MDIs
MTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAkZnVuY3Rpb25OYW1lID0gImltcGwtPiR7ZnVuY3Rpb25OYW1lfSI7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkY2FsbFdpdGgp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsICRjYWxs
V2l0aEFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAg
ICAgICAgIG15ICRqc1R5cGUgPSBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LCAwLCAkaW1wbENsYXNzTmFtZSwgIiR7ZnVuY3Rpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJn
dW1lbnRzKSAuICIpIiwgImNhc3RlZFRoaXMiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXBsID0gc3RhdGljX2Nhc3Q8
JGltcGxDbGFzc05hbWUqPihjYXN0ZWRUaGlzLT5pbXBsKCkpO1xuIik7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBlKCR0eXBlKSkg
ewpAQCAtMTgwNywxMyArMTgyMCwyMSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gcmVzdWx0O1xu
Iik7CiAKICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBteSAk
Y2FsbFdpdGggPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
YWxsV2l0aCJ9OworICAgICAgICAgICAgICAgICAgICBteSBAYXJndW1lbnRzID0gKCJlYyIpOwor
CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwO1xuIik7ICAgICAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAgICAgICAg
ICBpZiAoJGNhbGxXaXRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0KEBhcmd1
bWVudHMsIEdlbmVyYXRlQXR0cmlidXRlQ2FsbFdpdGgoJGNhbGxXaXRoLCBcQGltcGxDb250ZW50
KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICBpZiAoJHN2
Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUgaW1w
bCgqY2FzdGVkVGhpcy0+aW1wbCgpKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pT
VmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW1wbENsYXNzTmFtZSwgImltcGwuJGlt
cGxHZXR0ZXJGdW5jdGlvbk5hbWUoZWMpIiwgImNhc3RlZFRoaXMiKSAuICI7XG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTQzo6SlNWYWx1ZSBy
ZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGlt
cGxDbGFzc05hbWUsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBqb2luKCIsICIs
IEBhcmd1bWVudHMpIC4gIikiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOwogICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgJGltcGxDbGFzc05hbWUqIGltcGwgPSBzdGF0aWNfY2FzdDwkaW1wbENsYXNzTmFt
ZSo+KGNhc3RlZFRoaXMtPmltcGwoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9K
U1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGltcGxDbGFzc05hbWUsICJpbXBsLT4k
aW1wbEdldHRlckZ1bmN0aW9uTmFtZShlYykiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNDOjpKU1ZhbHVl
IHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAk
aW1wbENsYXNzTmFtZSwgImltcGwtPiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBqb2luKCIs
ICIsIEBhcmd1bWVudHMpIC4gIikiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOwogICAgICAgICAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTtcbiIpOwpAQCAtMjAwOSw2ICsyMDMwLDE3IEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZnVuY3Rp
b25OYW1lID0gImltcGwtPiR7ZnVuY3Rpb25OYW1lfSI7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkY2FsbFdp
dGggPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0
aCJ9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGNhbGxXaXRoKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGNhbGxXaXRoIGVxICJTY3Jp
cHRTdGF0ZSIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNo
aWZ0KEBhcmd1bWVudHMsICJleGVjIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRl
eHQgPSBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTtcbiIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2hpZnQoQGFyZ3VtZW50cywgInNjcmlwdENvbnRl
eHQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGFyZ3VtZW50cywgImVjIikgaWYgQHskYXR0cmlidXRlLT5zZXR0ZXJFeGNlcHRpb25z
fTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgJHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIik7XG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTtcbiIpIGlmIEB7JGF0dHJpYnV0ZS0+c2V0dGVyRXhj
ZXB0aW9uc307CkBAIC0yMzYxLDYgKzIzOTMsMjQgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJp
bmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiB9CiAKK3N1YiBHZW5lcmF0ZUF0dHJpYnV0
ZUNhbGxXaXRoCit7CisgICAgbXkgJGNhbGxXaXRoID0gc2hpZnQ7CisgICAgbXkgJG91dHB1dEFy
cmF5ID0gc2hpZnQ7CisgICAgbXkgJGNhbGxXaXRoQXJnID0gIkNPTVBJTEVfQVNTRVJUKGZhbHNl
KSI7CisKKyAgICBpZiAoJGNhbGxXaXRoIGVxICJTY3JpcHRTdGF0ZSIpIHsKKyAgICAgICAgJGNh
bGxXaXRoQXJnID0gImV4ZWMiOworICAgIH0gZWxzaWYgKCRjYWxsV2l0aCBlcSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCIpIHsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBzdGF0aWNfY2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCFzY3Jp
cHRDb250ZXh0KVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsKKyAgICAgICAgJGNhbGxXaXRoQXJnID0gInNjcmlwdENv
bnRleHQiOworICAgIH0KKworICAgIHJldHVybiAkY2FsbFdpdGhBcmc7Cit9CisKIHN1YiBHZW5l
cmF0ZUFyZ3VtZW50c0NvdW50Q2hlY2sKIHsKICAgICBteSAkb3V0cHV0QXJyYXkgPSBzaGlmdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0KaW5kZXggN2IxODRhN2ExYzg0ZmVjMDQxZTg5NmNlZDdmMDUwOTg1MzQxM2Q3OS4uNmNhZGZm
MjhlNGZkZGU3MDNmNDdmYmQzYTMxOGYzY2ZlNzQ4OWUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTg5OSw4ICs4OTks
MTkgQEAgRU5ECiAKICAgICBteSAkcmV0dXJuVHlwZSA9IEdldFR5cGVGcm9tU2lnbmF0dXJlKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZSk7CiAgICAgbXkgJGdldHRlclN0cmluZzsKKyAgICBteSAkaGFz
U2NyaXB0U3RhdGUgPSAwOworCiAgICAgaWYgKCRnZXR0ZXJTdHJpbmdVc2VzSW1wKSB7CiAgICAg
ICAgIG15ICgkZnVuY3Rpb25OYW1lLCBAYXJndW1lbnRzKSA9ICRjb2RlR2VuZXJhdG9yLT5HZXR0
ZXJFeHByZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlTmFtZSwgJGF0dHJpYnV0ZSk7
CisKKyAgICAgICAgbXkgJGNhbGxXaXRoID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifTsKKyAgICAgICAgbXkgJGNhbGxXaXRoQXJnOworCisg
ICAgICAgIGlmICgkY2FsbFdpdGgpIHsKKyAgICAgICAgICAgICgkY2FsbFdpdGhBcmcsICRoYXNT
Y3JpcHRTdGF0ZSkgPSBHZW5lcmF0ZUF0dHJpYnV0ZUNhbGxXaXRoKCRjYWxsV2l0aCwgXEBpbXBs
Q29udGVudERlY2xzLCAxKTsKKyAgICAgICAgICAgIHB1c2goQGFyZ3VtZW50cywgJGNhbGxXaXRo
QXJnKTsKKyAgICAgICAgfQorCiAgICAgICAgIHB1c2goQGFyZ3VtZW50cywgImVjIikgaWYgJHVz
ZUV4Y2VwdGlvbnM7CiAgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5In0pIHsKICAgICAgICAgICAgIG15ICRpbXBsZW1l
bnRlZEJ5ID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1w
bGVtZW50ZWRCeSJ9OwpAQCAtOTMwLDYgKzk0MSwxMiBAQCBFTkQKICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgJG5hdGl2ZVR5cGUgdiA9ICRnZXR0ZXJTdHJpbmc7XG4i
KTsKICAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCBHZW5lcmF0ZVNl
dERPTUV4Y2VwdGlvbigiICAgICIpKTsKKworICAgICAgICBpZiAoJGhhc1NjcmlwdFN0YXRlKSB7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSlcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUuZXhjZXB0aW9uKCkpO1xuIik7CisgICAgICAg
IH0KKwogICAgICAgICAkcmVzdWx0ID0gInYiOwogICAgICAgICAkcmVzdWx0IC49ICIucmVsZWFz
ZSgpIiBpZiAoSXNSZWZQdHJUeXBlKCRyZXR1cm5UeXBlKSk7CiAgICAgfSBlbHNlIHsKQEAgLTEx
MjIsNiArMTEzOSw3IEBAIEVORAogICAgIH0KIAogICAgIG15ICR1c2VFeGNlcHRpb25zID0gMSBp
ZiBAeyRhdHRyaWJ1dGUtPnNldHRlckV4Y2VwdGlvbnN9OworICAgIG15ICRoYXNTY3JpcHRTdGF0
ZSA9IDA7CiAKICAgICBpZiAoJHVzZUV4Y2VwdGlvbnMpIHsKICAgICAgICAgQWRkVG9JbXBsSW5j
bHVkZXMoIkV4Y2VwdGlvbkNvZGUuaCIpOwpAQCAtMTE1Miw2ICsxMTcwLDE1IEBAIEVORAogICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIik7XG4iKTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIG15ICgkZnVuY3Rpb25OYW1lLCBAYXJndW1lbnRzKSA9ICRjb2RlR2Vu
ZXJhdG9yLT5TZXR0ZXJFeHByZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlTmFtZSwg
JGF0dHJpYnV0ZSk7CisKKyAgICAgICAgICAgIG15ICRjYWxsV2l0aCA9ICRhdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn07CisgICAgICAgICAgICBt
eSAkY2FsbFdpdGhBcmc7CisKKyAgICAgICAgICAgIGlmICgkY2FsbFdpdGgpIHsKKyAgICAgICAg
ICAgICAgICAoJGNhbGxXaXRoQXJnLCAkaGFzU2NyaXB0U3RhdGUpID0gR2VuZXJhdGVBdHRyaWJ1
dGVDYWxsV2l0aCgkY2FsbFdpdGgsIFxAaW1wbENvbnRlbnREZWNscywgMCk7CisgICAgICAgICAg
ICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCAkY2FsbFdpdGhBcmcpOworICAgICAgICAgICAgfQor
CiAgICAgICAgICAgICBwdXNoKEBhcmd1bWVudHMsICRyZXN1bHQpOwogICAgICAgICAgICAgcHVz
aChAYXJndW1lbnRzLCAiZWMiKSBpZiAkdXNlRXhjZXB0aW9uczsKICAgICAgICAgICAgIGlmICgk
YXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5
In0pIHsKQEAgLTE0NTQsNiArMTQ4MSwzMCBAQCBFTkQKICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCAiI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25h
bFN0cmluZzsKIH0KIAorc3ViIEdlbmVyYXRlQXR0cmlidXRlQ2FsbFdpdGgKK3sKKyAgICBteSAk
Y2FsbFdpdGggPSBzaGlmdDsKKyAgICBteSAkb3V0cHV0QXJyYXkgPSBzaGlmdDsKKyAgICBteSAk
cmV0dXJuSWZOdWxsU2NyaXB0Q29udGV4dCA9IHNoaWZ0OworICAgIG15ICRjYWxsV2l0aEFyZyA9
ICJDT01QSUxFX0FTU0VSVChmYWxzZSkiOworICAgIG15ICRoYXNTY3JpcHRTdGF0ZSA9IDA7CisK
KyAgICBpZiAoJGNhbGxXaXRoIGVxICJTY3JpcHRTdGF0ZSIpIHsKKyAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIEVtcHR5U2NyaXB0U3RhdGUgc3RhdGU7XG4iKTsKKyAgICAgICAgJGNh
bGxXaXRoQXJnID0gIiZzdGF0ZSI7CisgICAgICAgICRoYXNTY3JpcHRTdGF0ZSA9IDE7CisgICAg
fSBlbHNpZiAoJGNhbGxXaXRoIGVxICJTY3JpcHRFeGVjdXRpb25Db250ZXh0IikgeworICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
Q29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTtcbiIpOworICAgICAgICBpZiAo
JHJldHVybklmTnVsbFNjcmlwdENvbnRleHQpIHsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBpZiAoIXNjcmlwdENvbnRleHQpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTtcbiIpOworICAgICAg
ICB9CisgICAgICAgICRjYWxsV2l0aEFyZyA9ICJzY3JpcHRDb250ZXh0IjsKKyAgICB9CisKKyAg
ICByZXR1cm4gKCRjYWxsV2l0aEFyZywgJGhhc1NjcmlwdFN0YXRlKTsKK30KKwogc3ViIEdlbmVy
YXRlQXJndW1lbnRzQ291bnRDaGVjawogewogICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmNwcAppbmRleCBlOTFhMTE0MDM4OTY2ZmM3MmQ4OTU3NjQ3YjI1NjU1YTVlOTAzMmY1Li5lNDg4
YTUxOGIzMjQwMjJiZTNhYjM5ZWI2Y2IyYWVhNzc5MDZmN2RjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApAQCAtMTA3
LDYgKzEwNywxMCBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqVGFibGVW
YWx1ZXNbXSA9CiAgICAgeyAic3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iLCBEb250RGVs
ZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpz
VGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKSwgKGludHB0cl90KXNldEpTVGVz
dE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uLCBOb0ludHJpbnNpYyB9LAogICAgIHsg
InN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpTdHJpbmdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbiksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0
aFNldHRlckV4Y2VwdGlvbiwgTm9JbnRyaW5zaWMgfSwKICAgICB7ICJjdXN0b21BdHRyIiwgRG9u
dERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
Pihqc1Rlc3RPYmpDdXN0b21BdHRyKSwgKGludHB0cl90KXNldEpTVGVzdE9iakN1c3RvbUF0dHIs
IE5vSW50cmluc2ljIH0sCisgICAgeyAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlIiwgRG9udERl
bGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2Jq
V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlLCBOb0ludHJpbnNpYyB9LAorICAgIHsgIndpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEF0dHJpYnV0ZSksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSwgTm9JbnRyaW5zaWMgfSwKKyAgICB7ICJ3aXRoU2Ny
aXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0
dHJpYnV0ZVJhaXNlcyksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRy
aWJ1dGVSYWlzZXMsIE5vSW50cmluc2ljIH0sCisgICAgeyAid2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBdHRyaWJ1dGVSYWlzZXMiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QXR0cmlidXRlUmFpc2VzKSwgKGludHB0cl90KXNldEpTVGVzdE9ialdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzLCBOb0ludHJpbnNpYyB9LAogICAgIHsgInNj
cmlwdFN0cmluZ0F0dHIiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqU2NyaXB0U3RyaW5nQXR0
ciksIChpbnRwdHJfdCkwLCBOb0ludHJpbnNpYyB9LAogI2lmIEVOQUJMRShDb25kaXRpb24xKQog
ICAgIHsgImNvbmRpdGlvbmFsQXR0cjEiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjEp
LCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMSwgTm9JbnRyaW5zaWMgfSwK
QEAgLTEzOSw3ICsxNDMsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2Jq
VGFibGVWYWx1ZXNbXSA9CiAgICAgeyAwLCAwLCAwLCAwLCBOb0ludHJpbnNpYyB9CiB9OwogCi1z
dGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdE9ialRhYmxlID0geyAxMzYsIDEyNywgSlNUZXN0
T2JqVGFibGVWYWx1ZXMsIDAgfTsKK3N0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0T2JqVGFi
bGUgPSB7IDEzNywgMTI3LCBKU1Rlc3RPYmpUYWJsZVZhbHVlcywgMCB9OwogLyogSGFzaCB0YWJs
ZSBmb3IgY29uc3RydWN0b3IgKi8KIAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVz
dE9iakNvbnN0cnVjdG9yVGFibGVWYWx1ZXNbXSA9CkBAIC02MzEsNiArNjM1LDUyIEBAIEpTVmFs
dWUganNUZXN0T2JqQ3VzdG9tQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2Us
IGNvbnN0IElkZW50aWZpZXImCiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3Rh
dGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVu
dGlmaWVyJikKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rl
c3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNf
Y2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzTnVtYmVyKGltcGwtPndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShleGVjKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3Qg
SWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8
SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
aWYgKCFzY3JpcHRDb250ZXh0KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBU
ZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSAoaW1wbC0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
dHRyaWJ1dGUoc2NyaXB0Q29udGV4dCkuaGFzTm9WYWx1ZSgpID8ganNOdWxsKCkgOiBpbXBsLT53
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShzY3JpcHRDb250ZXh0KS5qc1ZhbHVl
KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2Ny
aXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNl
LCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0
aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2Fz
dGVkVGhpcy0+aW1wbCgpKTsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gKGltcGwtPndpdGhT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhleGVjLCBlYykuaGFzTm9WYWx1ZSgpID8ganNOdWxs
KCkgOiBpbXBsLT53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoZXhlYywgZWMpLmpzVmFs
dWUoKSk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCisKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRy
aWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVu
dGlmaWVyJikKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rl
c3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBzdGF0aWNfY2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIXNjcmlwdENvbnRleHQpCisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2Jq
Kj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gKGltcGwt
PndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKHNjcmlwdENvbnRleHQs
IGVjKS5oYXNOb1ZhbHVlKCkgPyBqc051bGwoKSA6IGltcGwtPndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QXR0cmlidXRlUmFpc2VzKHNjcmlwdENvbnRleHQsIGVjKS5qc1ZhbHVlKCkpOworICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCiBK
U1ZhbHVlIGpzVGVzdE9ialNjcmlwdFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKIHsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOwpAQCAtMTAx
Nyw2ICsxMDY3LDQ0IEBAIHZvaWQgc2V0SlNUZXN0T2JqQ3VzdG9tQXR0cihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlCiB9CiAKIAordm9pZCBzZXRK
U1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KTsKKyAgICBUZXN0T2JqKiBp
bXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgaW1w
bC0+c2V0V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKGV4ZWMsIHZhbHVlLnRvSW50MzIoZXhlYykp
OworfQorCisKK3ZvaWQgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoq
Pih0aGlzT2JqZWN0KTsKKyAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+
KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
Q29udGV4dCA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGltcGwtPnNldFdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKHNjcmlwdENvbnRleHQsIGV4ZWMtPmds
b2JhbERhdGEoKSwgdmFsdWUpOworfQorCisKK3ZvaWQgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0
YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nh
c3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19j
YXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGltcGwtPnNldFdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhleGVjLCBl
eGVjLT5nbG9iYWxEYXRhKCksIHZhbHVlLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKK30KKworCit2b2lkIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8
SlNUZXN0T2JqKj4odGhpc09iamVjdCk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0
PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBzdGF0aWNfY2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpbXBsLT5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEF0dHJpYnV0ZVJhaXNlcyhzY3JpcHRDb250ZXh0LCBleGVjLT5nbG9iYWxEYXRhKCksIHZh
bHVlLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKK30KKworCiAjaWYgRU5B
QkxFKENvbmRpdGlvbjEpCiB2b2lkIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjEoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
aCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaApp
bmRleCBhZTQwNDFkZTY3YTliY2VhZjViNGIxMzY5NzdjZTg3NTk0MTZmZjIzLi40NWY5ZmI3MzE3
Y2IzZjUxMjM3NWRkNzNhMzIwZDgxMWM5MTVhMmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCkBAIC0yNDksNiArMjQ5LDE0
IEBAIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1CiB2b2lkIHNldEpTVGVzdE9ialN0cmluZ0F0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6
SlNWYWx1ZSk7CiBKU0M6OkpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0cihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CiB2b2lkIHNldEpTVGVz
dE9iakN1c3RvbUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1Zh
bHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwordm9p
ZCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Cit2b2lkIHNldEpTVGVzdE9ialdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVj
dCosIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRl
QXR0cmlidXRlUmFpc2VzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6
OklkZW50aWZpZXImKTsKK3ZvaWQgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRl
UmFpc2VzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CitK
U0M6OkpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVS
YWlzZXMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYpOwordm9pZCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0
ZVJhaXNlcyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOwog
SlNDOjpKU1ZhbHVlIGpzVGVzdE9ialNjcmlwdFN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwogSlNDOjpKU1ZhbHVlIGpzVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjEoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYpOwogdm9pZCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKaW5kZXggZWQzMzhj
NmIyMWQ3MThiY2VmMzMyOGMxNDEyMmZhYjM4MjY0ODQ4NS4uMGJhYjY5MzYwOTQxMTAxM2E3NmJj
NmUxOGY3NGU4YTJmMGVmMzJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0T2JqLmlkbApAQCAtMTA5LDYgKzEwOSwxMyBAQCBtb2R1bGUgdGVzdCB7
CiAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICAgICAgICAgW0NhbGxXaXRoPVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRdIHZvaWQgd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
IAorICAgICAgICBhdHRyaWJ1dGUgW0NhbGxXaXRoPVNjcmlwdFN0YXRlXSBsb25nIHdpdGhTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZTsKKyAgICAgICAgYXR0cmlidXRlIFtDYWxsV2l0aD1TY3JpcHRFeGVj
dXRpb25Db250ZXh0XSBET01PYmplY3Qgd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1
dGU7CisgICAgICAgIGF0dHJpYnV0ZSBbQ2FsbFdpdGg9U2NyaXB0U3RhdGVdIERPTU9iamVjdCB3
aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMKKyAgICAgICAgICAgIGdldHRlciByYWlzZXMo
RE9NRXhjZXB0aW9uKTsKKyAgICAgICAgYXR0cmlidXRlIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRp
b25Db250ZXh0XSBET01PYmplY3Qgd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVS
YWlzZXMKKyAgICAgICAgICAgIGdldHRlciByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKwogICAgICAg
ICAvLyAnT3B0aW9uYWwnIGV4dGVuZGVkIGF0dHJpYnV0ZQogICAgICAgICB2b2lkICAgIG1ldGhv
ZFdpdGhPcHRpb25hbEFyZyhpbiBbT3B0aW9uYWxdIGxvbmcgb3B0KTsKICAgICAgICAgdm9pZCAg
ICBtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhpbiBsb25nIG5vbk9wdCwg
aW4gW09wdGlvbmFsXSBsb25nIG9wdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCmluZGV4IDE3YzBhMDNhZDJhZTc0YTQ5
YmJiMTFiYzc2MTkxZjhiYTE3ZTJhZTIuLjVjYjUwMjhiN2Y4ZWYyZmNjM2Y1Y2E1MjUxOTczNGQ0
NDBmNTAxMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiU2NyaXB0
QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0Q2FsbFN0YWNrRmFjdG9yeS5oIgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVk
ZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5j
bHVkZSAiVjhCaW5kaW5nTWFjcm9zLmgiCkBAIC01MTQsNiArNTE1LDEwMiBAQCBzdGF0aWMgdm9p
ZCBzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsCiAgICAgcmV0dXJuOwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRT
KCJET00uVGVzdE9iai53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUuX2dldCIpOworICAgIFRlc3RP
YmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgRW1wdHlT
Y3JpcHRTdGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPndpdGhT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZSgmc3RhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2l0aFNjcmlw
dFN0YXRlQXR0cmlidXRlQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7
CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUuX3Nl
dCIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIo
KSk7CisgICAgaW50IHYgPSB0b0ludDMyKHZhbHVlKTsKKyAgICBFbXB0eVNjcmlwdFN0YXRlIHN0
YXRlOworICAgIGltcC0+c2V0V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKCZzdGF0ZSwgdik7Cisg
ICAgcmV0dXJuOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QXR0cmlidXRlQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRP
TS5UZXN0T2JqLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlLl9nZXQiKTsKKyAg
ICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgaWYgKCFzY3JpcHRDb250ZXh0KQorICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOworICAgIHJldHVybiBpbXAtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QXR0cmlidXRlKHNjcmlwdENvbnRleHQpLnY4VmFsdWUoKTsKK30KKworc3RhdGljIHZvaWQgd2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLndpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QXR0cmlidXRlLl9zZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRl
c3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIFNjcmlwdFZhbHVlIHYgPSBTY3Jp
cHRWYWx1ZSh2YWx1ZSk7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4
dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpbXAtPnNldFdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QXR0cmlidXRlKHNjcmlwdENvbnRleHQsIFdURjo6Z2V0UHRyKHYpKTsK
KyAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlw
dFN0YXRlQXR0cmlidXRlUmFpc2VzQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFt
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5U
ZXN0T2JqLndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcy5fZ2V0Iik7CisgICAgVGVzdE9i
aiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBFbXB0eVNjcmlwdFN0YXRlIHN0YXRlOworICAgIFNjcmlwdFZh
bHVlIHYgPSBpbXAtPndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcygmc3RhdGUsIGVjKTsK
KyAgICBpZiAoVU5MSUtFTFkoZWMpKSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlv
bihlYyk7CisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICB9Cisg
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihz
dGF0ZS5leGNlcHRpb24oKSk7CisgICAgcmV0dXJuIHYucmVsZWFzZSgpLnY4VmFsdWUoKTsKK30K
Kworc3RhdGljIHZvaWQgd2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzQXR0clNldHRlcih2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9i
ai53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMuX3NldCIpOworICAgIFRlc3RPYmoqIGlt
cCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgU2NyaXB0VmFsdWUg
diA9IFNjcmlwdFZhbHVlKHZhbHVlKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBF
bXB0eVNjcmlwdFN0YXRlIHN0YXRlOworICAgIGltcC0+c2V0V2l0aFNjcmlwdFN0YXRlQXR0cmli
dXRlUmFpc2VzKCZzdGF0ZSwgV1RGOjpnZXRQdHIodiksIGVjKTsKKyAgICBpZiAoVU5MSUtFTFko
ZWMpKQorICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOworICAgIHJldHVybjsK
K30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEF0dHJpYnV0ZVJhaXNlc0F0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVz
dE9iai53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcy5fZ2V0Iik7Cisg
ICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRDb250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghc2NyaXB0
Q29udGV4dCkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICBTY3JpcHRWYWx1
ZSB2ID0gaW1wLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhzY3Jp
cHRDb250ZXh0LCBlYyk7CisgICAgaWYgKFVOTElLRUxZKGVjKSkgeworICAgICAgICBWOFByb3h5
OjpzZXRET01FeGNlcHRpb24oZWMpOworICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFs
dWU+KCk7CisgICAgfQorICAgIHJldHVybiB2LnJlbGVhc2UoKS52OFZhbHVlKCk7Cit9CisKK3N0
YXRpYyB2b2lkIHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzQXR0clNl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFs
dWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00u
VGVzdE9iai53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcy5fc2V0Iik7
CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsK
KyAgICBTY3JpcHRWYWx1ZSB2ID0gU2NyaXB0VmFsdWUodmFsdWUpOworICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBn
ZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaW1wLT5zZXRXaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhzY3JpcHRDb250ZXh0LCBXVEY6OmdldFB0cih2KSwg
ZWMpOworICAgIGlmIChVTkxJS0VMWShlYykpCisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2Vw
dGlvbihlYyk7CisgICAgcmV0dXJuOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHNjcmlwdFN0cmluZ0F0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RP
Ymouc2NyaXB0U3RyaW5nQXR0ci5fZ2V0Iik7CkBAIC0xNTIyLDYgKzE2MTksMTQgQEAgc3RhdGlj
IGNvbnN0IEJhdGNoZWRBdHRyaWJ1dGUgVGVzdE9iakF0dHJzW10gPSB7CiAgICAgeyJzdHJpbmdB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbiIsIFRlc3RPYmpJbnRlcm5hbDo6c3RyaW5nQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyLCBUZXN0T2JqSW50ZXJuYWw6OnN0cmluZ0F0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uQXR0clNldHRlciwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2
ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlB
dHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCiAgICAgLy8gQXR0cmli
dXRlICdjdXN0b21BdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJ0N1c3RvbScpCiAg
ICAgeyJjdXN0b21BdHRyIiwgVjhUZXN0T2JqOjpjdXN0b21BdHRyQWNjZXNzb3JHZXR0ZXIsIFY4
VGVzdE9iajo6Y3VzdG9tQXR0ckFjY2Vzc29yU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRp
Y19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQ
cm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKKyAgICAv
LyBBdHRyaWJ1dGUgJ3dpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZScgKFR5cGU6ICdhdHRyaWJ1dGUn
IEV4dEF0dHI6ICdDYWxsV2l0aCcpCisgICAgeyJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUiLCBU
ZXN0T2JqSW50ZXJuYWw6OndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUF0dHJHZXR0ZXIsIFRlc3RP
YmpJbnRlcm5hbDo6d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlQXR0clNldHRlciwgMCAvKiBubyBk
YXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0
aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5j
ZSAqL30sCisgICAgLy8gQXR0cmlidXRlICd3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJp
YnV0ZScgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICdDYWxsV2l0aCcpCisgICAgeyJ3aXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIsIFRlc3RPYmpJbnRlcm5hbDo6d2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVBdHRyR2V0dGVyLCBUZXN0T2JqSW50ZXJuYWw6
OndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlQXR0clNldHRlciwgMCAvKiBubyBk
YXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0
aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5j
ZSAqL30sCisgICAgLy8gQXR0cmlidXRlICd3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMn
IChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnQ2FsbFdpdGgnKQorICAgIHsid2l0aFNjcmlw
dFN0YXRlQXR0cmlidXRlUmFpc2VzIiwgVGVzdE9iakludGVybmFsOjp3aXRoU2NyaXB0U3RhdGVB
dHRyaWJ1dGVSYWlzZXNBdHRyR2V0dGVyLCBUZXN0T2JqSW50ZXJuYWw6OndpdGhTY3JpcHRTdGF0
ZUF0dHJpYnV0ZVJhaXNlc0F0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8
djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5
QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAorICAgIC8vIEF0dHJp
YnV0ZSAnd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMnIChUeXBlOiAn
YXR0cmlidXRlJyBFeHRBdHRyOiAnQ2FsbFdpdGgnKQorICAgIHsid2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMiLCBUZXN0T2JqSW50ZXJuYWw6OndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzQXR0ckdldHRlciwgVGVzdE9iakludGVybmFsOjp3
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0F0dHJTZXR0ZXIsIDAgLyog
bm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwg
c3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5z
dGFuY2UgKi99LAogICAgIC8vIEF0dHJpYnV0ZSAnc2NyaXB0U3RyaW5nQXR0cicgKFR5cGU6ICdy
ZWFkb25seSBhdHRyaWJ1dGUnIEV4dEF0dHI6ICdDb252ZXJ0U2NyaXB0U3RyaW5nJykKICAgICB7
InNjcmlwdFN0cmluZ0F0dHIiLCBUZXN0T2JqSW50ZXJuYWw6OnNjcmlwdFN0cmluZ0F0dHJBdHRy
R2V0dGVyLCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9s
Pih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5v
bmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKaW5kZXggMjFjODFlZGU3ZWZlMjYxYWQ4Njk3
NTFkY2Y5ZThmMmE0MGE1ZTg5Mi4uZTNjOTU5NzBkNTZlNGFkM2ZkNmI1YzdlZTQwNWRhZmUyOGVk
ZDgzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgog
I2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0yMDAsNiArMjAxLDcgQEAgdm9pZCBIaXN0b3J5
SXRlbTo6cmVzZXQoKQogICAgIG1faXRlbVNlcXVlbmNlTnVtYmVyID0gZ2VuZXJhdGVTZXF1ZW5j
ZU51bWJlcigpOwogCiAgICAgbV9zdGF0ZU9iamVjdCA9IDA7CisgICAgbV9kZXNlcmlhbGl6ZWRT
dGF0ZU9iamVjdC5jbGVhcigpOwogICAgIG1fZG9jdW1lbnRTZXF1ZW5jZU51bWJlciA9IGdlbmVy
YXRlU2VxdWVuY2VOdW1iZXIoKTsKIAogICAgIG1fZm9ybURhdGEgPSAwOwpAQCAtMjgyLDYgKzI4
NCw3IEBAIHZvaWQgSGlzdG9yeUl0ZW06OnNldFVSTChjb25zdCBLVVJMJiB1cmwpCiAgICAgcGFn
ZUNhY2hlKCktPnJlbW92ZSh0aGlzKTsKICAgICBzZXRVUkxTdHJpbmcodXJsLnN0cmluZygpKTsK
ICAgICBjbGVhckRvY3VtZW50U3RhdGUoKTsKKyAgICBtX2Rlc2VyaWFsaXplZFN0YXRlT2JqZWN0
LmNsZWFyKCk7CiB9CiAKIHZvaWQgSGlzdG9yeUl0ZW06OnNldE9yaWdpbmFsVVJMU3RyaW5nKGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nKQpAQCAtNDU2LDYgKzQ1OSwyMSBAQCB2b2lkIEhpc3RvcnlJ
dGVtOjpzZXRJc1RhcmdldEl0ZW0oYm9vbCBmbGFnKQogdm9pZCBIaXN0b3J5SXRlbTo6c2V0U3Rh
dGVPYmplY3QoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG9iamVjdCkKIHsKICAg
ICBtX3N0YXRlT2JqZWN0ID0gb2JqZWN0OworICAgIG1fZGVzZXJpYWxpemVkU3RhdGVPYmplY3Qu
Y2xlYXIoKTsKK30KKworU2NyaXB0VmFsdWUqIEhpc3RvcnlJdGVtOjpnZXRPckNyZWF0ZURlc2Vy
aWFsaXplZFN0YXRlT2JqZWN0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkKK3sKKyAgICBpZiAo
IW1fZGVzZXJpYWxpemVkU3RhdGVPYmplY3QpIHsKKyAgICAgICAgaWYgKCFtX3N0YXRlT2JqZWN0
KQorICAgICAgICAgICAgbV9kZXNlcmlhbGl6ZWRTdGF0ZU9iamVjdCA9IGFkb3B0UHRyKG5ldyBT
Y3JpcHRWYWx1ZSgpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBTY3JpcHRWYWx1ZSBk
ZXNlcmlhbGl6ZWRTdGF0ZU9iamVjdCA9IFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShzY3JpcHRT
dGF0ZSwgbV9zdGF0ZU9iamVjdC5nZXQoKSk7CisgICAgICAgICAgICBtX2Rlc2VyaWFsaXplZFN0
YXRlT2JqZWN0ID0gYWRvcHRQdHIobmV3IFNjcmlwdFZhbHVlKGRlc2VyaWFsaXplZFN0YXRlT2Jq
ZWN0KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbV9kZXNlcmlhbGl6ZWRTdGF0
ZU9iamVjdC5nZXQoKTsKIH0KIAogdm9pZCBIaXN0b3J5SXRlbTo6YWRkQ2hpbGRJdGVtKFBhc3NS
ZWZQdHI8SGlzdG9yeUl0ZW0+IGNoaWxkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlz
dG9yeS9IaXN0b3J5SXRlbS5oIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5o
CmluZGV4IDg2MTlkMGMzNDZiZjg2YjllNzI5MjY5NjI5ZDM4MjViNzAyZjZiNzMuLjY0ZjRiNzY2
MzQ0MDhkZTQ1MzNhYmRjNDdlMGFlZmY1M2M3ZTBhMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hp
c3RvcnlJdGVtLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkludFBvaW50LmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CkBAIC01Myw2ICs1NCw3IEBAIGNsYXNzIEhpc3RvcnlJdGVtOwog
Y2xhc3MgSW1hZ2U7CiBjbGFzcyBLVVJMOwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworY2xhc3Mg
U2NyaXB0VmFsdWU7CiBjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiAKIHR5cGVkZWYgVmVj
dG9yPFJlZlB0cjxIaXN0b3J5SXRlbT4gPiBIaXN0b3J5SXRlbVZlY3RvcjsKQEAgLTE0MSw2ICsx
NDMsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzZXRTdGF0ZU9iamVjdChQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gb2JqZWN0KTsKICAgICBTZXJpYWxpemVkU2NyaXB0VmFs
dWUqIHN0YXRlT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZU9iamVjdC5nZXQoKTsgfQor
ICAgIFNjcmlwdFZhbHVlKiBnZXRPckNyZWF0ZURlc2VyaWFsaXplZFN0YXRlT2JqZWN0KFNjcmlw
dFN0YXRlKik7CiAKICAgICB2b2lkIHNldEl0ZW1TZXF1ZW5jZU51bWJlcihsb25nIGxvbmcgbnVt
YmVyKSB7IG1faXRlbVNlcXVlbmNlTnVtYmVyID0gbnVtYmVyOyB9CiAgICAgbG9uZyBsb25nIGl0
ZW1TZXF1ZW5jZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1faXRlbVNlcXVlbmNlTnVtYmVyOyB9
CkBAIC0yNzAsNiArMjczLDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIFN1cHBvcnQgZm9yIEhUTUw1
IEhpc3RvcnkKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtX3N0YXRlT2JqZWN0
OworICAgIE93blB0cjxTY3JpcHRWYWx1ZT4gbV9kZXNlcmlhbGl6ZWRTdGF0ZU9iamVjdDsKICAg
ICAKICAgICAvLyBpbmZvIHVzZWQgdG8gcmVwb3N0IGZvcm0gZGF0YQogICAgIFJlZlB0cjxGb3Jt
RGF0YT4gbV9mb3JtRGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9y
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuY3BwCmluZGV4IDFmNWEzOWYyODc1
ODRmN2MyNzQ4YjMzZTEwOTllNjY0ZDE5MmFlNjguLmFjNjg1MTA4ZDk1NTZiYzQyZmQwZGY3Y2Nm
MGM4YzA5YjE1MjRhZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmNwcApAQCAtMzIsOCArMzIsMTAg
QEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJIaXN0b3J5Q29udHJvbGxlci5oIgog
I2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlNj
cmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZXJp
YWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpAQCAtMTA3
LDYgKzEwOSwxNiBAQCBLVVJMIEhpc3Rvcnk6OnVybEZvclN0YXRlKGNvbnN0IFN0cmluZyYgdXJs
U3RyaW5nKQogICAgIHJldHVybiBLVVJMKGJhc2VVUkwsIHVybFN0cmluZyk7CiB9CiAKK1Njcmlw
dFZhbHVlIEhpc3Rvcnk6OnN0YXRlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkgY29uc3QKK3sK
KyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOworCisgICAg
SGlzdG9yeUl0ZW0qIGhpc3RvcnlJdGVtID0gbV9mcmFtZS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+
Y3VycmVudEl0ZW0oKTsKKworICAgIHJldHVybiBoaXN0b3J5SXRlbSA/ICpoaXN0b3J5SXRlbS0+
Z2V0T3JDcmVhdGVEZXNlcmlhbGl6ZWRTdGF0ZU9iamVjdChzY3JpcHRTdGF0ZSkgOiBTY3JpcHRW
YWx1ZSgpOworfQorCiB2b2lkIEhpc3Rvcnk6OnN0YXRlT2JqZWN0QWRkZWQoUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nLCBTdGF0ZU9iamVjdFR5cGUgc3RhdGVPYmplY3RUeXBlLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPnBhZ2UoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9IaXN0b3J5LmgKaW5kZXggYmQ1MGZjY2QyYjg2MWQ5ZTY0MThlOTc0ZjQyZGZiMmIyYjVm
OTFjZS4uZGY2ZmQxNjczYTc2Yzc4MDViYmMyYjlhZjFmZGU4OWU3NjliZGJlYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9IaXN0b3J5LmgKQEAgLTI4LDYgKzI4LDggQEAKIAogI2luY2x1ZGUgIkRPTVdpbmRvd1Byb3Bl
cnR5LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCisjaW5j
bHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTU2LDYg
KzU4LDkgQEAgcHVibGljOgogICAgICAgICBTdGF0ZU9iamVjdFB1c2gsCiAgICAgICAgIFN0YXRl
T2JqZWN0UmVwbGFjZQogICAgIH07CisKKyAgICBTY3JpcHRWYWx1ZSBzdGF0ZShTY3JpcHRTdGF0
ZSopIGNvbnN0OworCiAgICAgdm9pZCBzdGF0ZU9iamVjdEFkZGVkKFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiB1cmws
IFN0YXRlT2JqZWN0VHlwZSwgRXhjZXB0aW9uQ29kZSYpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
SGlzdG9yeS5pZGwKaW5kZXggZmYzNzAxZWQyNzZkNGY1Njk4ZGE2YTA1MzBlMDY2MzgwYTMzYjFj
MS4uMGQwNzA5ZDQ4N2QzODdkYzViMTJmZDg5NWZkYTFhNzEzYzA4ODM2YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0hpc3RvcnkuaWRsCkBAIC0zNyw2ICszNyw3IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBP
bWl0Q29uc3RydWN0b3IKICAgICBdIEhpc3RvcnkgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ2Fs
bFdpdGg9U2NyaXB0U3RhdGVdIERPTU9iamVjdCBzdGF0ZTsKIAogICAgICAgICBbRG9Ob3RDaGVj
a0RvbWFpblNlY3VyaXR5LCBDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSB2b2lkIGJh
Y2soKTsKICAgICAgICAgW0RvTm90Q2hlY2tEb21haW5TZWN1cml0eSwgQ2FsbFdpdGg9U2NyaXB0
RXhlY3V0aW9uQ29udGV4dF0gdm9pZCBmb3J3YXJkKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTAzN2QwYTM1ODdjZTBk
MGFmYjY1MWRhMWI5YTM4YmQ1NDU3ODMzMi4uMDRkMzc1NTRjZTA1ZmExNjg4OWVhZWI4YmJmYWFm
MTAyMDAyMTk1NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAxLTE0ICBQYWJsbyBGbG91
cmV0ICA8cGFibG9mQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBBZGQgc3RhdGUgYXR0cmlidXRl
IHRvIGhpc3RvcnkncyBkb20gaW50ZXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUt
c3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUtc3RhdGUtYXR0cmlidXRlLW9i
amVjdC10eXBlcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVj
dHMvcHVzaHN0YXRlLXN0YXRlLWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6YXRpb24tZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvcHVz
aHN0YXRlLXN0YXRlLWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6YXRpb24uaHRtbDogQWRk
ZWQuCisKIDIwMTItMDEtMTMgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+
CiAKICAgICAgICAgQWRkIG5ldyBiYXNlbGluZXMgZm9yIHZhcmlvdXMgY29tcG9zaXRpbmcgdGVz
dHMgd2hpY2ggZGlkbid0IGhhdmUgTWFjIHJlc3VsdHMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvcHVzaHN0YXRlLXN0YXRlLWF0dHJpYnV0ZS1vYmpl
Y3QtdHlwZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmpl
Y3RzL3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jMWE4N2E3OGZiYzY4OTNmMGM2ZTFmOTk1ODRjZWRiNTNlYjg2NjExCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3B1c2hz
dGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDE1IEBACitUaGlzIHRlc3QgY2FsbHMgcHVzaFN0YXRlIHdpdGggc3RhdGUgb2JqZWN0cyBvZiBh
bGwgdGhlIGRpZmZlcmVudCBvYmplY3QgdHlwZXMgc3VwcG9ydGVkIGJ5IHRoZSBIVE1MNSAiaW50
ZXJuYWwgc3RydWN0dXJlZCBjbG9uaW5nIGFsZ29yaXRobSIgYW5kIG1ha2VzIHN1cmUgdGhlIHN0
YXRlIGF0dHJpYnV0ZSByZXR1cm5zIHRoZSBleHBlY3RlZCBvYmplY3RzLgorCitTdGF0ZSBpcyBp
bml0aWFsbHkgbnVsbCAodHlwZSBvYmplY3QpCitTdGF0ZSBwdXNoZWQgLSB1bmRlZmluZWQgKHR5
cGUgdW5kZWZpbmVkKQorU3RhdGUgcHVzaGVkIC0gbnVsbCAodHlwZSBvYmplY3QpCitTdGF0ZSBw
dXNoZWQgLSBmYWxzZSAodHlwZSBib29sZWFuKQorU3RhdGUgcHVzaGVkIC0gdHJ1ZSAodHlwZSBi
b29sZWFuKQorU3RhdGUgcHVzaGVkIC0gNDIgKHR5cGUgbnVtYmVyKQorU3RhdGUgcHVzaGVkIC0g
U3RyaW5nICh0eXBlIHN0cmluZykKK1N0YXRlIHB1c2hlZCAtIDAgKHR5cGUgb2JqZWN0KQorU3Rh
dGUgcHVzaGVkIC0gL2Zvby9naSAodHlwZSBvYmplY3QpCitTdGF0ZSBwdXNoZWQgLSAgKHR5cGUg
b2JqZWN0KQorU3RhdGUgcHVzaGVkIC0gW29iamVjdCBPYmplY3RdICh0eXBlIG9iamVjdCkKK1N0
YXRlIHB1c2hlZCAtIFtvYmplY3QgSW1hZ2VEYXRhXSAodHlwZSBvYmplY3QpCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUtc3RhdGUt
YXR0cmlidXRlLW9iamVjdC10eXBlcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3Rh
dGVvYmplY3RzL3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZjM1YTNkNzkzMzYxNzhiYzJiYzRhMDJmMmUyODk5MDNmNGY5YjA3NAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3Rh
dGUtc3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBlcy5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5jbGVhckJhY2tG
b3J3YXJkTGlzdCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKK30K
KworZnVuY3Rpb24gbG9nKHR4dCkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9n
Z2VyIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodHh0ICsgIlxuIikpOwor
fQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBsb2coIlN0YXRlIGlzIGluaXRpYWxseSAi
ICsgaGlzdG9yeS5zdGF0ZSArICIgKHR5cGUgIiArIHR5cGVvZiBoaXN0b3J5LnN0YXRlICsgIiki
KTsKKyAgICBwdXNoQW5kVGVzdFN0YXRlKHVuZGVmaW5lZCwgInVuZGVmaW5lZCBlbnRyeSIpOwor
ICAgIHB1c2hBbmRUZXN0U3RhdGUobnVsbCwgIm51bGwgZW50cnkiKTsKKyAgICBwdXNoQW5kVGVz
dFN0YXRlKGZhbHNlLCAiZmFsc2UgZW50cnkiKTsKKyAgICBwdXNoQW5kVGVzdFN0YXRlKHRydWUs
ICJ0cnVlIGVudHJ5Iik7CisgICAgcHVzaEFuZFRlc3RTdGF0ZSg0MiwgIk51bWJlciBlbnRyeSIp
OworICAgIHB1c2hBbmRUZXN0U3RhdGUoIlN0cmluZyIsICJTdHJpbmcgZW50cnkiKTsKKyAgICBw
dXNoQW5kVGVzdFN0YXRlKG5ldyBEYXRlKDApLCAiRGF0ZSBlbnRyeSIpOworICAgIHB1c2hBbmRU
ZXN0U3RhdGUobmV3IFJlZ0V4cCgiZm9vIiwgImdpIiksICJSZWdFeHAgZW50cnkiKTsKKyAgICBw
dXNoQW5kVGVzdFN0YXRlKG5ldyBBcnJheSwgIkFycmF5IGVudHJ5Iik7CisgICAgcHVzaEFuZFRl
c3RTdGF0ZShuZXcgT2JqZWN0LCAiT2JqZWN0IGVudHJ5Iik7CisgICAgcHVzaEFuZFRlc3RTdGF0
ZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpLmNyZWF0
ZUltYWdlRGF0YSgxMCwxMCksICJJbWFnZURhdGEgZW50cnkiKTsKKworLyogVGhlIGZvbGxvd2lu
ZyBhcmUgbm90IHlldCB3ZWxsIGVub3VnaCBzdXBwb3J0ZWQgaW4gV2ViS2l0IHRvIG1lYW5pbmdm
dWxseSB0ZXN0IGhlcmU6CisgICAgaGlzdG9yeS5wdXNoQW5kU3RhdGUoW0Jsb2JdLCAiQmxvYiBl
bnRyeSIpOworICAgIGhpc3RvcnkucHVzaEFuZFN0YXRlKFtGaWxlXSwgIkZpbGUgZW50cnkiKTsK
KyAgICBoaXN0b3J5LnB1c2hBbmRTdGF0ZShbRmlsZUxpc3RdLCAiRmlsZUxpc3QgZW50cnkiKTsK
KyovCit9CisKK2Z1bmN0aW9uIHB1c2hBbmRUZXN0U3RhdGUoZGF0YSwgdGl0bGUpCit7CisgICAg
aGlzdG9yeS5wdXNoU3RhdGUoZGF0YSwgdGl0bGUpOworICAgIHZhciBzdGF0ZSA9IGhpc3Rvcnku
c3RhdGU7CisKKyAgICBpZiAoc3RhdGUgaW5zdGFuY2VvZiBEYXRlKQorICAgICAgICBsb2coIlN0
YXRlIHB1c2hlZCAtICIgKyBzdGF0ZS5nZXRUaW1lKCkgKyAiICh0eXBlICIgKyB0eXBlb2Ygc3Rh
dGUgKyAiKSIpOworICAgIGVsc2UKKyAgICAgICAgbG9nKCJTdGF0ZSBwdXNoZWQgLSAiICsgc3Rh
dGUgKyAiICh0eXBlICIgKyB0eXBlb2Ygc3RhdGUgKyAiKSIpOworfQorCis8L3NjcmlwdD4KKzxi
b2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxwPgorVGhpcyB0ZXN0IGNhbGxzIHB1c2hTdGF0ZSB3
aXRoIHN0YXRlIG9iamVjdHMgb2YgYWxsIHRoZSBkaWZmZXJlbnQgb2JqZWN0IHR5cGVzIHN1cHBv
cnRlZCBieSB0aGUKK0hUTUw1ICJpbnRlcm5hbCBzdHJ1Y3R1cmVkIGNsb25pbmcgYWxnb3JpdGht
IiBhbmQgbWFrZXMgc3VyZSB0aGUgc3RhdGUgYXR0cmlidXRlIHJldHVybnMgdGhlIGV4cGVjdGVk
IG9iamVjdHMuCis8L3A+Cis8cHJlIGlkPSJsb2dnZXIiPjwvcHJlPgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3B1c2hz
dGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb25seS1vbmUtZGVzZXJpYWxpemF0aW9uLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUtc3RhdGUt
YXR0cmlidXRlLW9ubHktb25lLWRlc2VyaWFsaXphdGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMWZkNzVkN2ZhMDgwNTk2NmI1Y2Q4ZWIzMjk5YWRiZDMwMzEwMmU3MgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUtc3Rh
dGUtYXR0cmlidXRlLW9ubHktb25lLWRlc2VyaWFsaXphdGlvbi1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxNyBAQAorTWFrZSBzdXJlIHRoZSBzYW1lIGRlc2VyaWFsaXphdGlvbiBvZiB0aGUgc3Rh
dGUgb2JqZWN0IGlzIHVzZWQgZXZlcnkgdGltZSAoYm90aCBpbiB0aGUgaGlzdG9yeSBvYmplY3Qg
YW5kIHBvcHN0YXRlIGV2ZW50cykuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTIGhpc3Rvcnkuc3RhdGUgIT09IHN0YXRlT2JqZWN0IGlzIHRydWUKK1BBU1MgaGlzdG9yeS5z
dGF0ZSA9PT0gc3RhdGVPYmplY3QgaXMgdHJ1ZQorCitJbnNpZGUgcG9wc3RhdGUgZXZlbnQKKwor
UEFTUyBoaXN0b3J5LnN0YXRlICE9PSBzdGF0ZU9iamVjdCBpcyB0cnVlCitQQVNTIGV2ZW50LnN0
YXRlICE9PSBzdGF0ZU9iamVjdCBpcyB0cnVlCitGQUlMIGV2ZW50LnN0YXRlID09PSBoaXN0b3J5
LnN0YXRlIHNob3VsZCBiZSB0cnVlLiBXYXMgZmFsc2UuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9sb2FkZXIvc3RhdGVvYmplY3RzL3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb25seS1vbmUt
ZGVzZXJpYWxpemF0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVj
dHMvcHVzaHN0YXRlLXN0YXRlLWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6YXRpb24uaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41ZWJlYmNmNjNlNTJkZGIwMTA1YWYyMTc0YmUzNDU2ZDUzNDBmZDg0Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3B1
c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb25seS1vbmUtZGVzZXJpYWxpemF0aW9uLmh0bWwKQEAg
LTAsMCArMSw2MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3Jp
cHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9o
ZWFkLz4KKzxib2R5PgorPHAgaWQ9ZGVzY3JpcHRpb24+Cis8L3A+Cis8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KKzxzY3JpcHQ+CisgICAgZGVzY3JpcHRpb24oIk1ha2Ugc3VyZSB0aGUgc2FtZSBk
ZXNlcmlhbGl6YXRpb24gb2YgdGhlIHN0YXRlIG9iamVjdCBpcyB1c2VkIGV2ZXJ5IHRpbWUgKGJv
dGggaW4gdGhlIGhpc3Rvcnkgb2JqZWN0IGFuZCBwb3BzdGF0ZSBldmVudHMpLiIpOworCisgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5jbGVhckJhY2tGb3J3YXJkTGlzdCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKKyAgICB9CisKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAg
ICAvLyBDcmVhdGUgYSBuZXcgb2JqZWN0LgorICAgIHZhciBzdGF0ZU9iamVjdCA9IFsiYSJdOwor
CisgICAgLy8gVXNlIGl0IGFzIHRoZSBzdGF0ZSBvYmplY3QgaW4gYSByZXBsYWNlU3RhdGUuICBU
aGlzIGNsb25lcyB0aGUgb2JqZWN0LgorICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKHN0YXRlT2Jq
ZWN0LCBudWxsLCBudWxsKTsKKworICAgIC8vIFNpbmNlIHRoZSBhY3R1YWwgaGlzdG9yeS5zdGF0
ZSBpcyBhIHN0cnVjdHVyZWQgY2xvbmUsIGl0IHNob3VsZCBub3QgbWF0Y2ggb3VyIG9yaWdpbmFs
IG9iamVjdC4KKyAgICBzaG91bGRCZVRydWUoImhpc3Rvcnkuc3RhdGUgIT09IHN0YXRlT2JqZWN0
Iik7CisKKyAgICAvLyBOb3cgbGV0J3MgcmVmZXRjaCBhIGNvcHkgb2YgaGlzdG9yeS5zdGF0ZSB0
byBzdG9yZTsKKyAgICBzdGF0ZU9iamVjdCA9IGhpc3Rvcnkuc3RhdGU7CisKKyAgICAvLyBPdXIg
cmVmZXJlbmNlIGFuZCB0aGUgaGlzdG9yeS5zdGF0ZSBpdHNlbGYgc2hvdWxkIGJlIHRoZSBzYW1l
LiAgVGhpcyBpcyBub3cgQWRhbSdzIG9yaWdpbmFsIGFzc2VydGlvbi4KKyAgICBzaG91bGRCZVRy
dWUoImhpc3Rvcnkuc3RhdGUgPT09IHN0YXRlT2JqZWN0Iik7CisKKyAgICAvLyBOb3cgbGV0J3Mg
ZG8gYSBwdXNoc3RhdGUgdG8gYWRkIGEgaGlzdG9yeSBlbnRyeS4KKyAgICBoaXN0b3J5LnB1c2hT
dGF0ZShudWxsLCBudWxsLCBudWxsKTsKKworICAgIC8vIE5vdyBhZGQgYSBoYW5kbGVyIGZvciB0
aGUgcG9wc3RhdGUgZXZlbnQuCisgICAgd2luZG93Lm9ucG9wc3RhdGUgPSBmdW5jdGlvbihldmVu
dCkgeworICAgICAgICBkZWJ1ZygiXG5JbnNpZGUgcG9wc3RhdGUgZXZlbnRcbiIpOworICAgICAg
ICAvLyBPdXIgc3RvcmVkIHJlZmVyZW5jZSB0byBzdGF0ZU9iamVjdCB3aWxsIG5vdCBtYXRjaCB0
aGUgY3VycmVudCBzdGF0ZSBvYmplY3QsIGFzIGl0IGlzIGEgc3RydWN0dXJlZCBjbG9uZSBvZiB0
aGUgaGlzdG9yeSBpdGVtJ3Mgc3RhdGUgb2JqZWN0LgorICAgICAgICBzaG91bGRCZVRydWUoImhp
c3Rvcnkuc3RhdGUgIT09IHN0YXRlT2JqZWN0Iik7CisgICAgICAgIC8vIE91ciBzdG9yZWQgcmVm
ZXJlbmNlIHRvIHN0YXRlT2JqZWN0IHdpbGwgbm90IG1hdGNoIHRoZSBzdGF0ZSBvYmplY3QgaW4g
dGhpcyBwb3Agc3RhdGUgZXZlbnQsIGFzIGl0IGlzIHRoZSBzYW1lIGFzIGhpc3Rvcnkuc3RhdGUg
d2hpY2ggaXMgYSBzdHJ1Y3R1cmVkIGNsb25lIG9mIHRoZSBoaXN0b3J5IGl0ZW0ncyBzdGF0ZSBv
YmplY3QuCisgICAgICAgIHNob3VsZEJlVHJ1ZSgiZXZlbnQuc3RhdGUgIT09IHN0YXRlT2JqZWN0
Iik7CisgICAgICAgIC8vIFRoZSBldmVudCdzIHN0YXRlIG9iamVjdCBhbmQgdGhlIGN1cnJlbnQg
c3RhdGUgb2JqZWN0IHNob3VsZCBtYXRjaC4KKyAgICAgICAgc2hvdWxkQmVUcnVlKCJldmVudC5z
dGF0ZSA9PT0gaGlzdG9yeS5zdGF0ZSIpOyAvLyBUaGlzIGZhaWxzIGZvciBub3csIG5lZWRzIHRv
IGJlIGZpeGVkLgorCisgICAgICAgIHZhciBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2Ny
aXB0Iik7CisgICAgICAgIHMuc3JjID0gIi4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiOworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHMpOworICAgICAgICBzZXRU
aW1lb3V0KGZpbmlzaEpTVGVzdCwgMCk7CisgICAgfQorCisgICAgLy8gTm93IGxldCdzIGdvIGJh
Y2sgdG8gb3VyIG9yaWdpbmFsIGhpc3RvcnkgZW50cnkgd2hpY2ggaGFzIGEgc3RhdGUgb2JqZWN0
IHRoYXQgd2UndmUgc3RvcmVkIGEgcmVmZXJlbmNlIHRvIGFscmVhZHkuCisgICAgLy8gVGhpcyB3
aWxsIGZpcmUgb3VyIHBvcHN0YXRlIGV2ZW50IGhhbmRsZXIgYWJvdmUuCisgICAgaGlzdG9yeS5i
YWNrKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122857</attachid>
            <date>2012-01-17 18:31:56 -0800</date>
            <delta_ts>2012-01-17 23:07:27 -0800</delta_ts>
            <desc>[CallWith] support for attributes in jsc/v8 generators</desc>
            <filename>bug-76035-20120117183155.patch</filename>
            <type>text/plain</type>
            <size>54884</size>
            <attacher name="Pablo Flouret">pf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2M4NTIxOWFmMWZjZWZj
Y2UwOTY0M2MzNzVhNGYwYzFmMGM3ZGNiNC4uNTQ0ZGNjNjVmOTJlNGZhYjNhZDViMzE3OGI5ZTg1
NWNkZGQyMzhlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEyLTAxLTE3ICBQYWJs
byBGbG91cmV0ICA8cGFibG9mQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBBZGQgW0NhbGxXaXRo
XSBzdXBwb3J0IGZvciBhdHRyaWJ1dGVzIGluIEpTQy9WOCBpZGwgY29kZSBnZW5lcmF0b3JzLgor
ICAgICAgICBQYXJ0IG9mIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NjAzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQXR0cmlidXRlQ2FsbFdpdGgpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAoR2Vu
ZXJhdGVOb3JtYWxBdHRyR2V0dGVyKToKKyAgICAgICAgKEdlbmVyYXRlTm9ybWFsQXR0clNldHRl
cik6CisgICAgICAgIChHZW5lcmF0ZUF0dHJpYnV0ZUNhbGxXaXRoKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwOgorICAgICAgICAoV2ViRE9N
VGVzdE9iajo6d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkRPTVRlc3RP
Ymo6OnNldFdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJET01UZXN0T2Jq
Ojp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJET01U
ZXN0T2JqOjpzZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJET01UZXN0T2JqOjp3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMpOgorICAgICAg
ICAoV2ViRE9NVGVzdE9iajo6c2V0V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKToKKyAg
ICAgICAgKFdlYkRPTVRlc3RPYmo6OndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRl
UmFpc2VzKToKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OnNldFdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QXR0cmlidXRlUmFpc2VzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
Q1BQL1dlYkRPTVRlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0T2JqLmNwcDoKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3dpdGhfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rl
c3Rfb2JqX3NldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGUpOgorICAgICAgICAod2Via2l0
X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYXR0cmlidXRl
KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlv
bl9jb250ZXh0X2F0dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93
aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKToKKyAgICAgICAgKHdlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X3dpdGhfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZV9yYWlzZXMpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRf
YXR0cmlidXRlX3JhaXNlcyk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRo
X3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGVfcmFpc2VzKToKKyAgICAgICAgKHdl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfY2xhc3Nf
aW5pdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0
dHJpYnV0ZVJhaXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmli
dXRlUmFpc2VzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW06CisgICAg
ICAgICgtW0RPTVRlc3RPYmogd2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlXSk6CisgICAgICAgICgt
W0RPTVRlc3RPYmogc2V0V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlOl0pOgorICAgICAgICAoLVtE
T01UZXN0T2JqIHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlXSk6CisgICAgICAg
ICgtW0RPTVRlc3RPYmogc2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGU6XSk6
CisgICAgICAgICgtW0RPTVRlc3RPYmogd2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzXSk6
CisgICAgICAgICgtW0RPTVRlc3RPYmogc2V0V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2Vz
Ol0pOgorICAgICAgICAoLVtET01UZXN0T2JqIHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0
cmlidXRlUmFpc2VzXSk6CisgICAgICAgICgtW0RPTVRlc3RPYmogc2V0V2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXM6XSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RPYmouaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjp3aXRoU2Ny
aXB0U3RhdGVBdHRyaWJ1dGVBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJ
bnRlcm5hbDo6d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlQXR0clNldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmli
dXRlQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OndpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlQXR0clNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0T2JqSW50ZXJuYWw6OndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0F0dHJH
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjp3aXRoU2NyaXB0U3Rh
dGVBdHRyaWJ1dGVSYWlzZXNBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJ
bnRlcm5hbDo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNBdHRyR2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6d2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNBdHRyU2V0dGVyKToKKwogMjAxMi0wMS0xNiAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbSW50ZXJuYWxz
XSBtZW1iZXIgdmFyYWlibGVzIHNob3VsZCBmb2xsb3cgbmFtaW5nIGNvbnZlbnRpb24uCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmlu
ZGV4IDA0ZmE3YmI2N2VjZDIxN2M2OThmNWE4NDY1OWYwY2I1NjczZmNkYmMuLjRlNDNhMjdhZWU0
ODRkYWU1NGQyYjM0MWM2NDM3NmRhOGE1ZWY1MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0xNzY0LDcgKzE3NjQsMTEg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgIyBPbmNl
IEpTRE9NV3JhcHBlcnMgaGF2ZSBhIGJhY2stcG9pbnRlciB0byB0aGUgZ2xvYmFsT2JqZWN0IHdl
IGNhbiBwYXNzIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpCiAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4g
Ijo6Z2V0Q29uc3RydWN0b3IoZXhlYywgY2FzdGVkVGhpcyk7XG4iKTsKICAgICAgICAgICAgICAg
ICB9IGVsc2lmICghQHskYXR0cmlidXRlLT5nZXR0ZXJFeGNlcHRpb25zfSkgewotICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0oZXhlYyk7XG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgbXkgJGNhbGxXaXRoID0gJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifTsKKyAgICAgICAgICAgICAgICAg
ICAgbXkgJGNhbGxXaXRoQXJnID0gIiI7CisKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKGV4ZWMpO1xuIikgaWYgKCEkY2FsbFdpdGgpOwor
CiAgICAgICAgICAgICAgICAgICAgIG15ICRjYWNoZUluZGV4ID0gMDsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNh
Y2hlZEF0dHJpYnV0ZSJ9KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAkY2FjaGVJbmRleCA9
ICRjdXJyZW50Q2FjaGVkQXR0cmlidXRlOwpAQCAtMTc3MywxNCArMTc3NywxOSBAQCBzdWIgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTtcbiIpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCRjYWxsV2l0aCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgJGNhbGxXaXRoQXJnID0gR2VuZXJhdGVBdHRyaWJ1dGVDYWxsV2l0aCgk
Y2FsbFdpdGgsIFxAaW1wbENvbnRlbnQpOworICAgICAgICAgICAgICAgICAgICB9CisKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCRzdmdMaXN0UHJvcGVydHlUeXBlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICAiIC4g
TmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGltcGxDbGFzc05hbWUs
ICJjYXN0ZWRUaGlzLT5pbXBsKCktPiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCkiLCAiY2FzdGVk
VGhpcyIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAgIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRl
LT5zaWduYXR1cmUsIDAsICRpbXBsQ2xhc3NOYW1lLCAiY2FzdGVkVGhpcy0+aW1wbCgpLT4kaW1w
bEdldHRlckZ1bmN0aW9uTmFtZSgkY2FsbFdpdGhBcmcpIiwgImNhc3RlZFRoaXMiKSAuICI7XG4i
KTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNpZiAoJHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVy
dHlUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUmIGltcGwgPSBjYXN0ZWRUaGlzLT5pbXBs
KCktPnByb3BlcnR5UmVmZXJlbmNlKCk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUgZXEgImZsb2F0IikgeyAjIFNwZWNpYWwg
Y2FzZSBmb3IgSlNTVkdOdW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGltcGxDbGFzc05hbWUsICJpbXBsIiwgImNhc3RlZFRo
aXMiKSAuICI7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1
bHQgPSAgIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbXBs
Q2xhc3NOYW1lLCAiaW1wbC4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgpIiwgImNhc3RlZFRoaXMi
KSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZSwgMCwgJGltcGxDbGFzc05hbWUsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25O
YW1lKCRjYWxsV2l0aEFyZykiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOworCiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBteSAoJGZ1bmN0aW9uTmFtZSwgQGFyZ3VtZW50cykgPSAkY29kZUdlbmVy
YXRvci0+R2V0dGVyRXhwcmVzc2lvbihcJWltcGxJbmNsdWRlcywgJGludGVyZmFjZU5hbWUsICRh
dHRyaWJ1dGUpOwpAQCAtMTc5Myw2ICsxODAyLDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICJpbXBsLT4k
e2Z1bmN0aW9uTmFtZX0iOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoJGNhbGxXaXRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaGlmdChAYXJndW1lbnRzLCAkY2FsbFdpdGhBcmcpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgICAgICBteSAkanNUeXBlID0gTmF0aXZlVG9K
U1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGltcGxDbGFzc05hbWUsICIke2Z1bmN0
aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSIsICJjYXN0ZWRUaGlzIik7
CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkaW1wbENs
YXNzTmFtZSogaW1wbCA9IHN0YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1lKj4oY2FzdGVkVGhpcy0+
aW1wbCgpKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9y
LT5Jc1NWR0FuaW1hdGVkVHlwZSgkdHlwZSkpIHsKQEAgLTE4MDcsMTMgKzE4MjAsMjEgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgcmV0dXJuIHJlc3VsdDtcbiIpOwogCiAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgbXkgJGNhbGxXaXRoID0gJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifTsKKyAgICAgICAgICAgICAgICAg
ICAgbXkgQGFyZ3VtZW50cyA9ICgiZWMiKTsKKwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBFeGNlcHRpb25Db2RlIGVjID0gMDtcbiIpOyAgICAgICAgICAgICAg
ICAgICAgCisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCRjYWxsV2l0aCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCBHZW5lcmF0ZUF0dHJpYnV0ZUNhbGxX
aXRoKCRjYWxsV2l0aCwgXEBpbXBsQ29udGVudCkpOworICAgICAgICAgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgICAgICAgICAgaWYgKCRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHN2Z1By
b3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlIGltcGwoKmNhc3RlZFRoaXMtPmltcGwoKSk7XG4iKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTQzo6SlNW
YWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwg
MCwgJGltcGxDbGFzc05hbWUsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKGVjKSIsICJj
YXN0ZWRUaGlzIikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgk
YXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbXBsQ2xhc3NOYW1lLCAiaW1wbC4kaW1wbEdldHRl
ckZ1bmN0aW9uTmFtZSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpIiwgImNhc3RlZFRo
aXMiKSAuICI7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXBs
ID0gc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05hbWUqPihjYXN0ZWRUaGlzLT5pbXBsKCkpO1xuIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU0M6OkpT
VmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUs
IDAsICRpbXBsQ2xhc3NOYW1lLCAiaW1wbC0+JGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoZWMpIiwg
ImNhc3RlZFRoaXMiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVl
KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGltcGxDbGFzc05hbWUsICJpbXBsLT4kaW1wbEdl
dHRlckZ1bmN0aW9uTmFtZSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpIiwgImNhc3Rl
ZFRoaXMiKSAuICI7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
XG4iKTsKQEAgLTIwMDksNiArMjAzMCwxMyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICJpbXBsLT4ke2Z1bmN0aW9uTmFt
ZX0iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbXkgJGNhbGxXaXRoID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCRjYWxsV2l0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbXkgJGNhbGxXaXRoQXJnID0gR2VuZXJhdGVBdHRyaWJ1dGVDYWxsV2l0aCgkY2FsbFdp
dGgsIFxAaW1wbENvbnRlbnQsIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaGlmdChAYXJndW1lbnRzLCAkY2FsbFdpdGhBcmcpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
YXJndW1lbnRzLCAiZWMiKSBpZiBAeyRhdHRyaWJ1dGUtPnNldHRlckV4Y2VwdGlvbnN9OwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2Z1
bmN0aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKTtcbiIpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpO1xuIikgaWYgQHskYXR0cmlidXRlLT5zZXR0ZXJFeGNlcHRpb25z
fTsKQEAgLTIzNjEsNiArMjM4OSwyNSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
IHB1c2goQGltcGxDb250ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cbiIp
IGlmICRjb25kaXRpb25hbFN0cmluZzsKIH0KIAorc3ViIEdlbmVyYXRlQXR0cmlidXRlQ2FsbFdp
dGgKK3sKKyAgICBteSAkY2FsbFdpdGggPSBzaGlmdDsKKyAgICBteSAkb3V0cHV0QXJyYXkgPSBz
aGlmdDsKKyAgICBteSAkcmV0dXJuVm9pZCA9IHNoaWZ0IHx8IDA7CisgICAgbXkgJGNhbGxXaXRo
QXJnID0gIkNPTVBJTEVfQVNTRVJUKGZhbHNlKSI7CisKKyAgICBpZiAoJGNhbGxXaXRoIGVxICJT
Y3JpcHRTdGF0ZSIpIHsKKyAgICAgICAgJGNhbGxXaXRoQXJnID0gImV4ZWMiOworICAgIH0gZWxz
aWYgKCRjYWxsV2l0aCBlcSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dCIpIHsKKyAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRl
eHQgPSBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTtcbiIpOworICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgaWYgKCFzY3JpcHRDb250ZXh0KVxuIik7CisgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIiAuICgkcmV0dXJuVm9pZCA/ICIiIDogIiBq
c1VuZGVmaW5lZCgpIikgLiAiO1xuIik7CisgICAgICAgICRjYWxsV2l0aEFyZyA9ICJzY3JpcHRD
b250ZXh0IjsKKyAgICB9CisKKyAgICByZXR1cm4gJGNhbGxXaXRoQXJnOworfQorCiBzdWIgR2Vu
ZXJhdGVBcmd1bWVudHNDb3VudENoZWNrCiB7CiAgICAgbXkgJG91dHB1dEFycmF5ID0gc2hpZnQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4
LnBtCmluZGV4IDdiMTg0YTdhMWM4NGZlYzA0MWU4OTZjZWQ3ZjA1MDk4NTM0MTNkNzkuLjkyMWY5
NDVhNTQzY2FhMzRmZDNjZmZhNTBkM2M2ZmYxMTE0NTBkZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC04OTksOCArODk5
LDE2IEBAIEVORAogCiAgICAgbXkgJHJldHVyblR5cGUgPSBHZXRUeXBlRnJvbVNpZ25hdHVyZSgk
YXR0cmlidXRlLT5zaWduYXR1cmUpOwogICAgIG15ICRnZXR0ZXJTdHJpbmc7CisgICAgbXkgJGNh
bGxXaXRoID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2Fs
bFdpdGgifSB8fCAiIjsKKwogICAgIGlmICgkZ2V0dGVyU3RyaW5nVXNlc0ltcCkgewogICAgICAg
ICBteSAoJGZ1bmN0aW9uTmFtZSwgQGFyZ3VtZW50cykgPSAkY29kZUdlbmVyYXRvci0+R2V0dGVy
RXhwcmVzc2lvbihcJWltcGxJbmNsdWRlcywgJGludGVyZmFjZU5hbWUsICRhdHRyaWJ1dGUpOwor
CisgICAgICAgIGlmICgkY2FsbFdpdGgpIHsKKyAgICAgICAgICAgIG15ICRjYWxsV2l0aEFyZyA9
IEdlbmVyYXRlQXR0cmlidXRlQ2FsbFdpdGgoJGNhbGxXaXRoLCBcQGltcGxDb250ZW50RGVjbHMp
OworICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCAkY2FsbFdpdGhBcmcpOworICAgICAgICB9
CisKICAgICAgICAgcHVzaChAYXJndW1lbnRzLCAiZWMiKSBpZiAkdXNlRXhjZXB0aW9uczsKICAg
ICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Iklt
cGxlbWVudGVkQnkifSkgewogICAgICAgICAgICAgbXkgJGltcGxlbWVudGVkQnkgPSAkYXR0cmli
dXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5In07CkBA
IC05MzAsNiArOTM4LDEyIEBAIEVORAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgIiAgICAkbmF0aXZlVHlwZSB2ID0gJGdldHRlclN0cmluZztcbiIpOwogICAgICAgICB9CiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIEdlbmVyYXRlU2V0RE9NRXhjZXB0aW9uKCIg
ICAgIikpOworCisgICAgICAgIGlmICgkY2FsbFdpdGggZXEgIlNjcmlwdFN0YXRlIikgeworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLmV4Y2VwdGlvbigpKTtcbiIpOworICAgICAgICB9CisK
ICAgICAgICAgJHJlc3VsdCA9ICJ2IjsKICAgICAgICAgJHJlc3VsdCAuPSAiLnJlbGVhc2UoKSIg
aWYgKElzUmVmUHRyVHlwZSgkcmV0dXJuVHlwZSkpOwogICAgIH0gZWxzZSB7CkBAIC0xMTI4LDYg
KzExNDIsOCBAQCBFTkQKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDtcbiIpOwogICAgIH0KIAorICAgIG15ICRjYWxsV2l0aCA9ICRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn0gfHwgIiI7
CisKICAgICBpZiAoJGltcGxDbGFzc05hbWUgZXEgIlNWR051bWJlciIpIHsKICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgIiAgICAqaW1wID0gJHJlc3VsdDtcbiIpOwogICAgIH0gZWxz
ZSB7CkBAIC0xMTUyLDYgKzExNjgsMTIgQEAgRU5ECiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCAiKTtcbiIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbXkgKCRm
dW5jdGlvbk5hbWUsIEBhcmd1bWVudHMpID0gJGNvZGVHZW5lcmF0b3ItPlNldHRlckV4cHJlc3Np
b24oXCVpbXBsSW5jbHVkZXMsICRpbnRlcmZhY2VOYW1lLCAkYXR0cmlidXRlKTsKKworICAgICAg
ICAgICAgaWYgKCRjYWxsV2l0aCkgeworICAgICAgICAgICAgICAgIG15ICRjYWxsV2l0aEFyZyA9
IEdlbmVyYXRlQXR0cmlidXRlQ2FsbFdpdGgoJGNhbGxXaXRoLCBcQGltcGxDb250ZW50RGVjbHMs
IDEpOworICAgICAgICAgICAgICAgIHB1c2goQGFyZ3VtZW50cywgJGNhbGxXaXRoQXJnKTsKKyAg
ICAgICAgICAgIH0KKwogICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCAkcmVzdWx0KTsKICAg
ICAgICAgICAgIHB1c2goQGFyZ3VtZW50cywgImVjIikgaWYgJHVzZUV4Y2VwdGlvbnM7CiAgICAg
ICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SW1wbGVtZW50ZWRCeSJ9KSB7CkBAIC0xMTcxLDYgKzExOTMsMTEgQEAgRU5ECiAgICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihl
Yyk7XG4iKTsKICAgICB9CiAKKyAgICBpZiAoJGNhbGxXaXRoIGVxICJTY3JpcHRTdGF0ZSIpIHsK
KyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgICAgdGhy
b3dFcnJvcihzdGF0ZS5leGNlcHRpb24oKSk7XG4iKTsKKyAgICB9CisKICAgICBpZiAoJHN2Z05h
dGl2ZVR5cGUpIHsKICAgICAgICAgaWYgKCR1c2VFeGNlcHRpb25zKSB7CiAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGlmICghZWMpXG4iKTsKQEAgLTE0NTQsNiArMTQ4
MSwyOCBAQCBFTkQKICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiI2VuZGlmIC8vICR7Y29u
ZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKIH0KIAorc3ViIEdl
bmVyYXRlQXR0cmlidXRlQ2FsbFdpdGgKK3sKKyAgICBteSAkY2FsbFdpdGggPSBzaGlmdDsKKyAg
ICBteSAkb3V0cHV0QXJyYXkgPSBzaGlmdDsKKyAgICBteSAkcmV0dXJuVm9pZCA9IHNoaWZ0IHx8
IDA7CisgICAgbXkgJGNhbGxXaXRoQXJnID0gIkNPTVBJTEVfQVNTRVJUKGZhbHNlKSI7CisKKyAg
ICBpZiAoJGNhbGxXaXRoIGVxICJTY3JpcHRTdGF0ZSIpIHsKKyAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIFNjcmlwdFN0YXRlKiBzdGF0ZSA9IFNjcmlwdFN0YXRlOjpjdXJyZW50KCk7
XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghc3RhdGUpXG4iKTsK
KyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4iIC4gKCRyZXR1cm5W
b2lkID8gIiIgOiAiIHY4OjpVbmRlZmluZWQoKSIpIC4gIjtcbiIpOworICAgICAgICAkY2FsbFdp
dGhBcmcgPSAic3RhdGUiOworICAgIH0gZWxzaWYgKCRjYWxsV2l0aCBlcSAiU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCIpIHsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghc2NyaXB0Q29u
dGV4dClcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiIg
LiAoJHJldHVyblZvaWQgPyAiIiA6ICIgdjg6OlVuZGVmaW5lZCgpIikgLiAiO1xuIik7CisgICAg
ICAgICRjYWxsV2l0aEFyZyA9ICJzY3JpcHRDb250ZXh0IjsKKyAgICB9CisKKyAgICByZXR1cm4g
JGNhbGxXaXRoQXJnOworfQorCiBzdWIgR2VuZXJhdGVBcmd1bWVudHNDb3VudENoZWNrCiB7CiAg
ICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcAppbmRleCA5ZGFjMmRh
OGE5YWIwOTAyZmRhMjU4NWU0NTllMDgwNTJkM2M0NmEzLi45YTlmM2YxODJlY2Y4Y2QwMTBiNDkz
YmMwYTRiZGVhNTcwYzY1OWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAKQEAgLTUxOSw2ICs1MTks
ODAgQEAgdm9pZCBXZWJET01UZXN0T2JqOjpzZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bihjb25zdCBXZWJET01TdHJpbmcmIG5ld1N0cmkKICAgICB3ZWJET01SYWlzZUVycm9yKHN0YXRp
Y19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7CiB9CiAKK2ludCBXZWJET01UZXN0T2Jq
Ojp3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBpbXBsKCktPndpdGhTY3JpcHRTdGF0ZUF0
dHJpYnV0ZSgpOworfQorCit2b2lkIFdlYkRPTVRlc3RPYmo6OnNldFdpdGhTY3JpcHRTdGF0ZUF0
dHJpYnV0ZShpbnQgbmV3V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKQoreworICAgIGlmICghaW1w
bCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnNldFdpdGhTY3JpcHRTdGF0ZUF0
dHJpYnV0ZShuZXdXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUpOworfQorCitXZWJET01UZXN0T2Jq
IFdlYkRPTVRlc3RPYmo6OndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKCkgY29u
c3QKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTVRlc3RPYmooKTsK
KworICAgIHJldHVybiB0b1dlYktpdChXVEY6OmdldFB0cihpbXBsKCktPndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlKCkpKTsKK30KKwordm9pZCBXZWJET01UZXN0T2JqOjpzZXRX
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShjb25zdCBXZWJET01UZXN0T2JqJiBu
ZXdXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSkKK3sKKyAgICBpZiAoIWltcGwo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW1wbCgpLT5zZXRXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEF0dHJpYnV0ZSh0b1dlYkNvcmUobmV3V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
dHRyaWJ1dGUpKTsKK30KKworV2ViRE9NVGVzdE9iaiBXZWJET01UZXN0T2JqOjp3aXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dGVSYWlzZXMoKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQorICAgICAg
ICByZXR1cm4gV2ViRE9NVGVzdE9iaigpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgV2ViRE9NVGVzdE9iaiByZXN1bHQgPSB0b1dlYktpdChXVEY6OmdldFB0cihp
bXBsKCktPndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhlYykpKTsKKyAgICB3ZWJET01S
YWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCBXZWJET01UZXN0T2JqOjpzZXRXaXRoU2NyaXB0U3RhdGVB
dHRyaWJ1dGVSYWlzZXMoY29uc3QgV2ViRE9NVGVzdE9iaiYgbmV3V2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlUmFpc2VzKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpbXBsKCktPnNldFdpdGhTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyh0b1dlYkNvcmUobmV3V2l0aFNjcmlwdFN0YXRlQXR0cmli
dXRlUmFpc2VzKSwgZWMpOworICAgIHdlYkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9N
RXhjZXB0aW9uQ29kZT4oZWMpKTsKK30KKworV2ViRE9NVGVzdE9iaiBXZWJET01UZXN0T2JqOjp3
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcygpIGNvbnN0Cit7CisgICAg
aWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybiBXZWJET01UZXN0T2JqKCk7CisKKyAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJET01UZXN0T2JqIHJlc3VsdCA9IHRv
V2ViS2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRy
aWJ1dGVSYWlzZXMoZWMpKSk7CisgICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJE
T01FeGNlcHRpb25Db2RlPihlYykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgV2Vi
RE9NVGVzdE9iajo6c2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMo
Y29uc3QgV2ViRE9NVGVzdE9iaiYgbmV3V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1
dGVSYWlzZXMpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGltcGwoKS0+c2V0V2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXModG9XZWJDb3JlKG5ld1dpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKSwgZWMpOworICAgIHdlYkRPTVJhaXNlRXJyb3Io
c3RhdGljX2Nhc3Q8V2ViRE9NRXhjZXB0aW9uQ29kZT4oZWMpKTsKK30KKwogV2ViRE9NU3RyaW5n
IFdlYkRPTVRlc3RPYmo6OnNjcmlwdFN0cmluZ0F0dHIoKSBjb25zdAogewogICAgIGlmICghaW1w
bCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQ
UC9XZWJET01UZXN0T2JqLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
Q1BQL1dlYkRPTVRlc3RPYmouaAppbmRleCA0M2ZkOThjMDI5YTY0ZDRmZGUzZjdmNzIwYWFhMzk1
NWM3YjRmYzAyLi5iM2NjZWEyOTZjNjNlNDJmMzY2ZWI4OWFhOTMwMjVlZDc1ZTAyNWMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRl
c3RPYmouaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RPYmouaApAQCAtMTI0LDYgKzEyNCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRT
dHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihjb25zdCBXZWJET01TdHJpbmcmKTsKICAgICBX
ZWJET01TdHJpbmcgc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSBjb25zdDsKICAgICB2
b2lkIHNldFN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKGNvbnN0IFdlYkRPTVN0cmluZyYp
OworICAgIGludCB3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKSBjb25zdDsKKyAgICB2b2lkIHNl
dFdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShpbnQpOworICAgIFdlYkRPTVRlc3RPYmogd2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKGNvbnN0IFdlYkRPTVRlc3RPYmomKTsKKyAg
ICBXZWJET01UZXN0T2JqIHdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcygpIGNvbnN0Owor
ICAgIHZvaWQgc2V0V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKGNvbnN0IFdlYkRPTVRl
c3RPYmomKTsKKyAgICBXZWJET01UZXN0T2JqIHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0
cmlidXRlUmFpc2VzKCkgY29uc3Q7CisgICAgdm9pZCBzZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEF0dHJpYnV0ZVJhaXNlcyhjb25zdCBXZWJET01UZXN0T2JqJik7CiAgICAgV2ViRE9NU3Ry
aW5nIHNjcmlwdFN0cmluZ0F0dHIoKSBjb25zdDsKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKICAg
ICBpbnQgY29uZGl0aW9uYWxBdHRyMSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
T2JqLmNwcAppbmRleCA3MDE0N2NiODEwYmZiMGYxNDliNmM2MjhjMWU3OGM1NTc0MjM0ODRlLi45
ZGU0OThkYmRlZmFhOTVlNzI1ZDlhZTg0YjNmZjM2OWU3MGM2NDZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2Jq
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0T2JqLmNwcApAQCAtMTA4Miw2ICsxMDgyLDEyMyBAQCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX3NldF9zdHJpbmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVz
dE9iaiogc2VsZgogICAgIH0KIH0KIAorZ2xvbmcKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dp
dGhfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXMgPSBpdGVtLT53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1
dGUoKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xv
bmcgdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0V2l0aFNjcmlwdFN0YXRlQXR0cmli
dXRlKHZhbHVlKTsKK30KKworV2ViS2l0RE9NVGVzdE9iaioKK3dlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0
T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRl
c3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBdHRyaWJ1dGUoKSk7CisgICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQo
Z19yZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVz
dF9vYmpfc2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZShXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVy
dGVkX3ZhbHVlID0gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gTlVMTCkgeworICAgICAgICBjb252
ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOworICAgICAgICBnX3JldHVybl9pZl9m
YWlsKGNvbnZlcnRlZF92YWx1ZSk7CisgICAgfQorICAgIGl0ZW0tPnNldFdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlKGNvbnZlcnRlZF92YWx1ZSk7Cit9CisKK1dlYktpdERPTVRl
c3RPYmoqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1
dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBQYXNz
UmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNj
cmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3Nl
dF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiks
IGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIFdlYktpdERPTVRlc3RPYmoq
IHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2
b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVf
cmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIHZhbHVlLCBH
RXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKKyAgICBpZiAo
dmFsdWUgIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUo
dmFsdWUpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7CisgICAg
fQorICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldFdpdGhT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhjb252ZXJ0ZWRfdmFsdWUsIGVjKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhl
Yyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJp
bmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisK
K1dlYktpdERPTVRlc3RPYmoqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9l
eGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IEdFcnJvciAqKmVycm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0g
V1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlz
ZXMoZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5u
YW1lKTsKKyAgICB9CisgICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19y
ZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZV9yYWlzZXMoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUsIEdFcnJvciAqKmVy
cm9yKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOworICAgIGlmICh2YWx1ZSAhPSBO
VUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7Cisg
ICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsKKyAgICB9CisgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0V2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoY29udmVydGVkX3ZhbHVlLCBlYyk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2Mo
ZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQor
CiBnY2hhcioKIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3NjcmlwdF9zdHJpbmdfYXR0cihXZWJL
aXRET01UZXN0T2JqKiBzZWxmKQogewpAQCAtMTMzNCw2ICsxNDUxLDEwIEBAIGVudW0gewogICAg
IFBST1BfU1RSSU5HX0FUVFJfV0lUSF9HRVRURVJfRVhDRVBUSU9OLAogICAgIFBST1BfU1RSSU5H
X0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OLAogICAgIFBST1BfQ1VTVE9NX0FUVFIsCisgICAg
UFJPUF9XSVRIX1NDUklQVF9TVEFURV9BVFRSSUJVVEUsCisgICAgUFJPUF9XSVRIX1NDUklQVF9F
WEVDVVRJT05fQ09OVEVYVF9BVFRSSUJVVEUsCisgICAgUFJPUF9XSVRIX1NDUklQVF9TVEFURV9B
VFRSSUJVVEVfUkFJU0VTLAorICAgIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRf
QVRUUklCVVRFX1JBSVNFUywKICAgICBQUk9QX1NDUklQVF9TVFJJTkdfQVRUUiwKICNpZiBFTkFC
TEUoQ29uZGl0aW9uMSkKICAgICBQUk9QX0NPTkRJVElPTkFMX0FUVFIxLApAQCAtMTQ4MCw2ICsx
NjAxLDExIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Byb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uCiAgICAgICAgIGNvcmVTZWxmLT5zZXRT
dHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihXVEY6OlN0cmluZzo6ZnJvbVVURjgoZ192YWx1
ZV9nZXRfc3RyaW5nKHZhbHVlKSksIGVjKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIGNh
c2UgUFJPUF9XSVRIX1NDUklQVF9TVEFURV9BVFRSSUJVVEU6CisgICAgeworICAgICAgICBjb3Jl
U2VsZi0+c2V0V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKChnX3ZhbHVlX2dldF9sb25nKHZhbHVl
KSkpOworICAgICAgICBicmVhazsKKyAgICB9CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCiAgICAg
Y2FzZSBQUk9QX0NPTkRJVElPTkFMX0FUVFIxOgogICAgIHsKQEAgLTE2NjQsNiArMTc5MCwzMSBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BfaWQsIEdWYQogICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5zdHJpbmdBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbigpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIFBST1BfV0lUSF9T
Q1JJUFRfU1RBVEVfQVRUUklCVVRFOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2
YWx1ZSwgY29yZVNlbGYtPndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9B
VFRSSUJVVEU6CisgICAgeworICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0g
Y29yZVNlbGYtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKCk7CisgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfV0lUSF9TQ1JJUFRfU1RBVEVfQVRUUklC
VVRFX1JBSVNFUzoKKyAgICB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPndpdGhT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhlYyk7CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVj
dCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQVRUUklCVVRFX1JB
SVNFUzoKKyAgICB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
ICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPndpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKGVjKTsKKyAgICAgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQogICAgIGNhc2UgUFJPUF9TQ1JJUFRfU1RSSU5HX0FUVFI6CiAgICAgewogICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5z
Y3JpcHRTdHJpbmdBdHRyKCkpKTsKQEAgLTE5NjIsNiArMjExMywzNiBAQCBHX01BWExPTkcsIC8q
IG1heCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiIiwgLyogZGVmYXVsdCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CiAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1dJVEhfU0NSSVBUX1NUQVRFX0FU
VFJJQlVURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3Bl
Y19sb25nKCJ3aXRoLXNjcmlwdC1zdGF0ZS1hdHRyaWJ1dGUiLCAvKiBuYW1lICovCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0
X29ial93aXRoLXNjcmlwdC1zdGF0ZS1hdHRyaWJ1dGUiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAq
LworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAicmVhZC13cml0ZSAgZ2xvbmcgVGVzdE9iai53aXRoLXNjcmlwdC1zdGF0ZS1hdHRyaWJ1
dGUiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUg
Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR19NSU5MT05HLCAvKiBtaW4gKi8KK0dfTUFYTE9ORywgLyogbWF4ICovCiswLCAvKiBk
ZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQVRUUklCVVRF
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVj
dCgid2l0aC1zY3JpcHQtZXhlY3V0aW9uLWNvbnRleHQtYXR0cmlidXRlIiwgLyogbmFtZSAqLwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAidGVzdF9vYmpfd2l0aC1zY3JpcHQtZXhlY3V0aW9uLWNvbnRleHQtYXR0cmlidXRlIiwgLyog
c2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIFdlYktpdERPTVRlc3RPYmoqIFRl
c3RPYmoud2l0aC1zY3JpcHQtZXhlY3V0aW9uLWNvbnRleHQtYXR0cmlidXRlIiwgLyogbG9uZ2Vy
IC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9U
WVBFX0RPTV9URVNUX09CSiwgLyogZ29iamVjdCB0eXBlICovCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFz
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfV0lUSF9TQ1JJUFRf
U1RBVEVfQVRUUklCVVRFX1JBSVNFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdfcGFyYW1fc3BlY19vYmplY3QoIndpdGgtc2NyaXB0LXN0YXRlLWF0dHJpYnV0ZS1yYWlz
ZXMiLCAvKiBuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial93aXRoLXNjcmlwdC1zdGF0ZS1hdHRyaWJ1dGUt
cmFpc2VzIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIFdlYktpdERP
TVRlc3RPYmoqIFRlc3RPYmoud2l0aC1zY3JpcHQtc3RhdGUtYXR0cmlidXRlLXJhaXNlcyIsIC8q
IGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
RUJLSVRfVFlQRV9ET01fVEVTVF9PQkosIC8qIGdvYmplY3QgdHlwZSAqLworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1dJVEhf
U0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FUVFJJQlVURV9SQUlTRVMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJ3aXRoLXNjcmlwdC1l
eGVjdXRpb24tY29udGV4dC1hdHRyaWJ1dGUtcmFpc2VzIiwgLyogbmFtZSAqLworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9v
Ympfd2l0aC1zY3JpcHQtZXhlY3V0aW9uLWNvbnRleHQtYXR0cmlidXRlLXJhaXNlcyIsIC8qIHNo
b3J0IGRlc2NyaXB0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRlICBXZWJLaXRET01UZXN0T2JqKiBUZXN0
T2JqLndpdGgtc2NyaXB0LWV4ZWN1dGlvbi1jb250ZXh0LWF0dHJpYnV0ZS1yYWlzZXMiLCAvKiBs
b25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VC
S0lUX1RZUEVfRE9NX1RFU1RfT0JKLCAvKiBnb2JqZWN0IHR5cGUgKi8KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVj
dENsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9TQ1JJUFRf
U1RSSU5HX0FUVFIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKCJzY3JpcHQtc3RyaW5nLWF0dHIiLCAvKiBuYW1lICovCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29i
al9zY3JpcHQtc3RyaW5nLWF0dHIiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE9iai5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdE9iai5oCmluZGV4IGE2MGI5N2VlYTM4ZjAyYjc1ZDE1YmQzMzVjM2E0MmVi
NDI5M2JkNzMuLjdkODNmOWJmMmY1MWI3YzIwMGZlNDQ3YjRmOTQwN2I5MjczNmEwMTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RPYmouaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgKQEAgLTk3NCw2ICs5NzQsOTQgQEAgV0VCS0lUX0FQ
SSB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cl93aXRoX3NldHRlcl9l
eGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJy
b3IgKiplcnJvcik7CiAKIC8qKgorICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3Jp
cHRfc3RhdGVfYXR0cmlidXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKKyAqCisg
KiBSZXR1cm5zOgorICoKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV90ZXN0X29i
al9nZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3dpdGhfc2NyaXB0X3N0YXRlX2F0
dHJpYnV0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCisgKiBAdmFsdWU6IEEgI2ds
b25nCisgKgorICogUmV0dXJuczoKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGdsb25nIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NVGVzdE9iagorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKToKKyAqCisq
Ki8KK1dFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRoX3NjcmlwdF9l
eGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9i
agorICogQHZhbHVlOiBBICNXZWJLaXRET01UZXN0T2JqCisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIG5vbmUpOgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3NldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZV9yYWlzZXM6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIG5vbmUpOgorICoKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0
T2JqKgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRl
X3JhaXNlcyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcik7CisKKy8qKgor
ICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3Jh
aXNlczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCisgKiBAdmFsdWU6IEEgI1dlYktp
dERPTVRlc3RPYmoKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBub25lKToKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSwgR0Vycm9yICoqZXJyb3IpOworCisvKioKKyAq
IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0
dHJpYnV0ZV9yYWlzZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagorICogQGVycm9y
OiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOgorICoKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9z
Y3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBHRXJyb3IgKiplcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYXR0cmlidXRlX3JhaXNlczoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCisgKiBAdmFsdWU6IEEgI1dlYktpdERPTVRlc3RPYmoK
KyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKToKKyAq
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0aF9zY3Jp
cHRfZXhlY3V0aW9uX2NvbnRleHRfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSwgR0Vycm9yICoqZXJyb3IpOworCisvKioKICAq
IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3NjcmlwdF9zdHJpbmdfYXR0cjoKICAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0T2JqCiAgKgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAppbmRleCBlOTFhMTE0MDM4OTY2ZmM3MmQ4
OTU3NjQ3YjI1NjU1YTVlOTAzMmY1Li4yYzNkNjI5ODFmYjlmYjZjYjdlNzViYTE2NzA2NmY4YzAy
ZDExOTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcApAQCAtMTA3LDYgKzEwNywxMCBAQCBzdGF0aWMgY29uc3QgSGFz
aFRhYmxlVmFsdWUgSlNUZXN0T2JqVGFibGVWYWx1ZXNbXSA9CiAgICAgeyAic3RyaW5nQXR0cldp
dGhHZXR0ZXJFeGNlcHRpb24iLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJv
cGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhj
ZXB0aW9uKSwgKGludHB0cl90KXNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uLCBOb0ludHJpbnNpYyB9LAogICAgIHsgInN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
IiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jPihqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbiksIChpbnRwdHJf
dClzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbiwgTm9JbnRyaW5zaWMg
fSwKICAgICB7ICJjdXN0b21BdHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpDdXN0b21BdHRyKSwgKGludHB0
cl90KXNldEpTVGVzdE9iakN1c3RvbUF0dHIsIE5vSW50cmluc2ljIH0sCisgICAgeyAid2l0aFNj
cmlwdFN0YXRlQXR0cmlidXRlIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1
dGUpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlLCBOb0lu
dHJpbnNpYyB9LAorICAgIHsgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlIiwg
RG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jPihqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSksIChpbnRw
dHJfdClzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSwgTm9J
bnRyaW5zaWMgfSwKKyAgICB7ICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiLCBEb250
RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyksIChpbnRwdHJfdClzZXRK
U1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMsIE5vSW50cmluc2ljIH0sCisg
ICAgeyAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMiLCBEb250RGVs
ZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpz
VGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKSwgKGludHB0
cl90KXNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2Vz
LCBOb0ludHJpbnNpYyB9LAogICAgIHsgInNjcmlwdFN0cmluZ0F0dHIiLCBEb250RGVsZXRlIHwg
UmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0T2JqU2NyaXB0U3RyaW5nQXR0ciksIChpbnRwdHJfdCkwLCBOb0ludHJpbnNpYyB9
LAogI2lmIEVOQUJMRShDb25kaXRpb24xKQogICAgIHsgImNvbmRpdGlvbmFsQXR0cjEiLCBEb250
RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjEpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqQ29uZGl0
aW9uYWxBdHRyMSwgTm9JbnRyaW5zaWMgfSwKQEAgLTEzOSw3ICsxNDMsNyBAQCBzdGF0aWMgY29u
c3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqVGFibGVWYWx1ZXNbXSA9CiAgICAgeyAwLCAwLCAw
LCAwLCBOb0ludHJpbnNpYyB9CiB9OwogCi1zdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdE9i
alRhYmxlID0geyAxMzYsIDEyNywgSlNUZXN0T2JqVGFibGVWYWx1ZXMsIDAgfTsKK3N0YXRpYyBj
b25zdCBIYXNoVGFibGUgSlNUZXN0T2JqVGFibGUgPSB7IDEzNywgMTI3LCBKU1Rlc3RPYmpUYWJs
ZVZhbHVlcywgMCB9OwogLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KIAogc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9iakNvbnN0cnVjdG9yVGFibGVWYWx1ZXNbXSA9
CkBAIC02MzEsNiArNjM1LDUyIEBAIEpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0cihFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImCiB9CiAKIAorSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOwor
ICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1w
bCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwtPndpdGhTY3JpcHRTdGF0
ZUF0dHJpYnV0ZShleGVjKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitKU1ZhbHVlIGpz
VGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2Up
KTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gc3RhdGljX2Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFzY3JpcHRDb250ZXh0KQorICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVz
dE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4
ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLT53aXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShzY3JpcHRDb250ZXh0KSkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKKworSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1
dGVSYWlzZXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlm
aWVyJikKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RP
YmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgp
KTsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC0+d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFp
c2VzKGV4ZWMsIGVjKSkpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwg
Y29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gc3Rh
dGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFzY3JpcHRDb250ZXh0KQorICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nh
c3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNDOjpKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGlt
cGwtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKHNjcmlwdENvbnRl
eHQsIGVjKSkpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworCiBKU1ZhbHVlIGpzVGVzdE9ialNjcmlwdFN0cmluZ0F0dHIoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKIHsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90
QmFzZSkpOwpAQCAtMTAxNyw2ICsxMDY3LDQ4IEBAIHZvaWQgc2V0SlNUZXN0T2JqQ3VzdG9tQXR0
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlCiB9
CiAKIAordm9pZCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KTsK
KyAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmlt
cGwoKSk7CisgICAgaW1wbC0+c2V0V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKGV4ZWMsIHZhbHVl
LnRvSW50MzIoZXhlYykpOworfQorCisKK3ZvaWQgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBdHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNf
Y2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KTsKKyAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGlj
X2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0Q29udGV4dCA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgIGlmICghc2NyaXB0Q29udGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgIGltcGwtPnNldFdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKHNjcmlwdENvbnRleHQsIHRvVGVzdE9i
aih2YWx1ZSkpOworfQorCisKK3ZvaWQgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmli
dXRlUmFpc2VzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0
T2JqKj4odGhpc09iamVjdCk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RP
YmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGltcGwtPnNldFdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhleGVjLCB0b1Rlc3RPYmoo
dmFsdWUpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKK30KKworCit2b2lk
IHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4odGhpc09i
amVjdCk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRU
aGlzLT5pbXBsKCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKKyAgICBpZiAoIXNjcmlwdENvbnRleHQpCisgICAgICAgIHJldHVybjsKKyAgICBpbXBsLT5z
ZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhzY3JpcHRDb250ZXh0
LCB0b1Rlc3RPYmoodmFsdWUpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
K30KKworCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCiB2b2lkIHNldEpTVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjEoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPYmouaAppbmRleCBhZTQwNDFkZTY3YTliY2VhZjViNGIxMzY5NzdjZTg3NTk0MTZm
ZjIzLi40NWY5ZmI3MzE3Y2IzZjUxMjM3NWRkNzNhMzIwZDgxMWM5MTVhMmY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCkBA
IC0yNDksNiArMjQ5LDE0IEBAIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNl
dHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1CiB2b2lkIHNldEpTVGVz
dE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CiBKU0M6OkpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7
CiB2b2lkIHNldEpTVGVzdE9iakN1c3RvbUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3Rh
dGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRl
bnRpZmllciYpOwordm9pZCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Cit2b2lkIHNldEpT
VGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2Jq
V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK3ZvaWQgc2V0SlNUZXN0T2JqV2l0aFNjcmlw
dFN0YXRlQXR0cmlidXRlUmFpc2VzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpT
Qzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBdHRyaWJ1dGVSYWlzZXMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYpOwordm9pZCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEF0dHJpYnV0ZVJhaXNlcyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBK
U0M6OkpTVmFsdWUpOwogSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialNjcmlwdFN0cmluZ0F0dHIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwogSlND
OjpKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjEoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwogdm9pZCBzZXRKU1Rlc3RPYmpDb25k
aXRpb25hbEF0dHIxKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2Jq
Qy9ET01UZXN0T2JqLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2Jq
Qy9ET01UZXN0T2JqLmgKaW5kZXggMjgyOTk1YWU4OTEzYTFiMTg3ZTE2YjQyZjNmZjhiOTRjNjE3
OWFlYi4uZjA2NGZjZWU1ZDMyYjBkYWNiYzZmMjcwNjU0OWMyYjQzMmZhOTE2MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RP
YmouaApAQCAtMTE5LDYgKzExOSwxNCBAQCBlbnVtIHsKIC0gKHZvaWQpc2V0U3RyaW5nQXR0cldp
dGhTZXR0ZXJFeGNlcHRpb246KE5TU3RyaW5nICopbmV3U3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNl
cHRpb247CiAtIChpbnQpY3VzdG9tQXR0cjsKIC0gKHZvaWQpc2V0Q3VzdG9tQXR0cjooaW50KW5l
d0N1c3RvbUF0dHI7CistIChpbnQpd2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlOworLSAodm9pZClz
ZXRXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGU6KGludCluZXdXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1
dGU7CistIChET01UZXN0T2JqICopd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGU7
CistICh2b2lkKXNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlOihET01UZXN0
T2JqICopbmV3V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGU7CistIChET01UZXN0
T2JqICopd2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzOworLSAodm9pZClzZXRXaXRoU2Ny
aXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXM6KERPTVRlc3RPYmogKiluZXdXaXRoU2NyaXB0U3RhdGVB
dHRyaWJ1dGVSYWlzZXM7CistIChET01UZXN0T2JqICopd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBdHRyaWJ1dGVSYWlzZXM7CistICh2b2lkKXNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QXR0cmlidXRlUmFpc2VzOihET01UZXN0T2JqICopbmV3V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBdHRyaWJ1dGVSYWlzZXM7CiAtIChOU1N0cmluZyAqKXNjcmlwdFN0cmluZ0F0dHI7CiAjaWYg
RU5BQkxFKENvbmRpdGlvbjEpCiAtIChpbnQpY29uZGl0aW9uYWxBdHRyMTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1t
CmluZGV4IDA4ZjFmMWU3YWMzZmQxY2U4Mzc3MDQzYTBjZjNiOGExYzM0OWE0ZjQuLjE5NmQyNGQ5
ZTkzY2Q3NTJlM2YzMGZmZjQyNDY1NTM3NTAxNDlhZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQpAQCAtNDM2
LDYgKzQzNiw3MCBAQAogICAgIElNUEwtPnNldEN1c3RvbUF0dHIobmV3Q3VzdG9tQXR0cik7CiB9
CiAKKy0gKGludCl3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIElNUEwtPndpdGhTY3JpcHRTdGF0
ZUF0dHJpYnV0ZSgpOworfQorCistICh2b2lkKXNldFdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZToo
aW50KW5ld1dpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBJTVBMLT5zZXRXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1
dGUobmV3V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKTsKK30KKworLSAoRE9NVGVzdE9iaiAqKXdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVybiBraXQoV1RGOjpnZXRQdHIoSU1QTC0+
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoKSkpOworfQorCistICh2b2lkKXNl
dFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlOihET01UZXN0T2JqICopbmV3V2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgQVNTRVJUKG5ld1dpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QXR0cmlidXRlKTsKKworICAgIElNUEwtPnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QXR0cmlidXRlKGNvcmUobmV3V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUp
KTsKK30KKworLSAoRE9NVGVzdE9iaiAqKXdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcwor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBET01UZXN0T2JqICpyZXN1bHQgPSBraXQoV1RG
OjpnZXRQdHIoSU1QTC0+d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKGVjKSkpOworICAg
IFdlYkNvcmU6OnJhaXNlT25ET01FcnJvcihlYyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
LSAodm9pZClzZXRXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXM6KERPTVRlc3RPYmogKilu
ZXdXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgQVNTRVJUKG5ld1dpdGhTY3JpcHRTdGF0ZUF0dHJp
YnV0ZVJhaXNlcyk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBJ
TVBMLT5zZXRXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoY29yZShuZXdXaXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dGVSYWlzZXMpLCBlYyk7CisgICAgV2ViQ29yZTo6cmFpc2VPbkRPTUVycm9y
KGVjKTsKK30KKworLSAoRE9NVGVzdE9iaiAqKXdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0
cmlidXRlUmFpc2VzCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIERPTVRlc3RPYmogKnJl
c3VsdCA9IGtpdChXVEY6OmdldFB0cihJTVBMLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0
dHJpYnV0ZVJhaXNlcyhlYykpKTsKKyAgICBXZWJDb3JlOjpyYWlzZU9uRE9NRXJyb3IoZWMpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpc2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBdHRyaWJ1dGVSYWlzZXM6KERPTVRlc3RPYmogKiluZXdXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEF0dHJpYnV0ZVJhaXNlcworeworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBBU1NFUlQobmV3V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRy
aWJ1dGVSYWlzZXMpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
SU1QTC0+c2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoY29yZShu
ZXdXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyksIGVjKTsKKyAgICBX
ZWJDb3JlOjpyYWlzZU9uRE9NRXJyb3IoZWMpOworfQorCiAtIChOU1N0cmluZyAqKXNjcmlwdFN0
cmluZ0F0dHIKIHsKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKaW5k
ZXggZWQzMzhjNmIyMWQ3MThiY2VmMzMyOGMxNDEyMmZhYjM4MjY0ODQ4NS4uNzNmZDE5YjdiYzBi
YjcyMDRhZmIwOThlOWEwM2JmODg3MDUxY2U4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbApAQCAtMTA5LDYgKzEwOSwxMyBAQCBtb2R1
bGUgdGVzdCB7CiAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICAgICAgICAgW0Nh
bGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIHZvaWQgd2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKIAorICAgICAgICBhdHRyaWJ1dGUgW0NhbGxXaXRoPVNjcmlwdFN0YXRlXSBsb25n
IHdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZTsKKyAgICAgICAgYXR0cmlidXRlIFtDYWxsV2l0aD1T
Y3JpcHRFeGVjdXRpb25Db250ZXh0XSBUZXN0T2JqIHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QXR0cmlidXRlOworICAgICAgICBhdHRyaWJ1dGUgW0NhbGxXaXRoPVNjcmlwdFN0YXRlXSBUZXN0
T2JqIHdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcworICAgICAgICAgICAgZ2V0dGVyIHJh
aXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBhdHRyaWJ1dGUgW0NhbGxXaXRoPVNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRdIFRlc3RPYmogd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1
dGVSYWlzZXMKKyAgICAgICAgICAgIGdldHRlciByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKwogICAg
ICAgICAvLyAnT3B0aW9uYWwnIGV4dGVuZGVkIGF0dHJpYnV0ZQogICAgICAgICB2b2lkICAgIG1l
dGhvZFdpdGhPcHRpb25hbEFyZyhpbiBbT3B0aW9uYWxdIGxvbmcgb3B0KTsKICAgICAgICAgdm9p
ZCAgICBtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhpbiBsb25nIG5vbk9w
dCwgaW4gW09wdGlvbmFsXSBsb25nIG9wdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCmluZGV4IDE3YzBhMDNhZDJhZTc0
YTQ5YmJiMTFiYzc2MTkxZjhiYTE3ZTJhZTIuLjYzMzZkZTQ2MzE5YWMyZDlmZmMzZDVlY2VlZWUz
NzNiYjE3NDZhZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC01MTQsNiArNTE0LDExOCBAQCBzdGF0aWMgdm9p
ZCBzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsCiAgICAgcmV0dXJuOwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRT
KCJET00uVGVzdE9iai53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUuX2dldCIpOworICAgIFRlc3RP
YmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgU2NyaXB0
U3RhdGUqIHN0YXRlID0gU2NyaXB0U3RhdGU6OmN1cnJlbnQoKTsKKyAgICBpZiAoIXN0YXRlKQor
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHJldHVybiB2ODo6SW50ZWdlcjo6
TmV3KGltcC0+d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKHN0YXRlKSk7Cit9CisKK3N0YXRpYyB2
b2lkIHdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJ
bmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoud2l0aFNjcmlwdFN0YXRl
QXR0cmlidXRlLl9zZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOworICAgIGludCB2ID0gdG9JbnQzMih2YWx1ZSk7CisgICAgU2NyaXB0
U3RhdGUqIHN0YXRlID0gU2NyaXB0U3RhdGU6OmN1cnJlbnQoKTsKKyAgICBpZiAoIXN0YXRlKQor
ICAgICAgICByZXR1cm47CisgICAgaW1wLT5zZXRXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoc3Rh
dGUsIHYpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgdGhyb3dFcnJv
cihzdGF0ZS5leGNlcHRpb24oKSk7CisgICAgcmV0dXJuOworfQorCitzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlQXR0ckdldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5m
bykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLndpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QXR0cmlidXRlLl9nZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0
aXZlKGluZm8uSG9sZGVyKCkpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENv
bnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFzY3JpcHRDb250
ZXh0KQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHJldHVybiB0b1Y4KGlt
cC0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoc2NyaXB0Q29udGV4dCkpOwor
fQorCitzdGF0aWMgdm9pZCB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUF0dHJT
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZh
bHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9N
LlRlc3RPYmoud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUuX3NldCIpOworICAg
IFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAg
VGVzdE9iaiogdiA9IFY4VGVzdE9iajo6SGFzSW5zdGFuY2UodmFsdWUpID8gVjhUZXN0T2JqOjp0
b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSkgOiAwOworICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgaWYgKCFzY3JpcHRDb250ZXh0KQorICAgICAgICByZXR1cm47CisgICAg
aW1wLT5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShzY3JpcHRDb250ZXh0
LCBXVEY6OmdldFB0cih2KSk7CisgICAgcmV0dXJuOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0F0dHJHZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7Cisg
ICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMu
X2dldCIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgU2NyaXB0U3RhdGUqIHN0YXRl
ID0gU2NyaXB0U3RhdGU6OmN1cnJlbnQoKTsKKyAgICBpZiAoIXN0YXRlKQorICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIFJlZlB0cjxUZXN0T2JqPiB2ID0gaW1wLT53aXRoU2Ny
aXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoc3RhdGUsIGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoZWMp
KSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CisgICAgICAgIHJldHVy
biB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICB9CisgICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZS5leGNlcHRpb24oKSk7Cisg
ICAgcmV0dXJuIHRvVjgodi5yZWxlYXNlKCkpOworfQorCitzdGF0aWMgdm9pZCB3aXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dGVSYWlzZXNBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5m
bykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0
ZVJhaXNlcy5fc2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKKyAgICBUZXN0T2JqKiB2ID0gVjhUZXN0T2JqOjpIYXNJbnN0YW5jZSh2
YWx1ZSkgPyBWOFRlc3RPYmo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qo
dmFsdWUpKSA6IDA7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgU2NyaXB0U3RhdGUq
IHN0YXRlID0gU2NyaXB0U3RhdGU6OmN1cnJlbnQoKTsKKyAgICBpZiAoIXN0YXRlKQorICAgICAg
ICByZXR1cm47CisgICAgaW1wLT5zZXRXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoc3Rh
dGUsIFdURjo6Z2V0UHRyKHYpLCBlYyk7CisgICAgaWYgKFVOTElLRUxZKGVjKSkKKyAgICAgICAg
VjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIHRocm93RXJyb3Ioc3RhdGUuZXhjZXB0aW9uKCkpOworICAgIHJldHVybjsK
K30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEF0dHJpYnV0ZVJhaXNlc0F0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVz
dE9iai53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcy5fZ2V0Iik7Cisg
ICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRDb250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghc2NyaXB0
Q29udGV4dCkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICBSZWZQdHI8VGVz
dE9iaj4gdiA9IGltcC0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMo
c2NyaXB0Q29udGV4dCwgZWMpOworICAgIGlmIChVTkxJS0VMWShlYykpIHsKKyAgICAgICAgVjhQ
cm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6
OlZhbHVlPigpOworICAgIH0KKyAgICByZXR1cm4gdG9WOCh2LnJlbGVhc2UoKSk7Cit9CisKK3N0
YXRpYyB2b2lkIHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzQXR0clNl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFs
dWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00u
VGVzdE9iai53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcy5fc2V0Iik7
CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsK
KyAgICBUZXN0T2JqKiB2ID0gVjhUZXN0T2JqOjpIYXNJbnN0YW5jZSh2YWx1ZSkgPyBWOFRlc3RP
Ymo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpKSA6IDA7Cisg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0Q29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIXNjcmlw
dENvbnRleHQpCisgICAgICAgIHJldHVybjsKKyAgICBpbXAtPnNldFdpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QXR0cmlidXRlUmFpc2VzKHNjcmlwdENvbnRleHQsIFdURjo6Z2V0UHRyKHYpLCBl
Yyk7CisgICAgaWYgKFVOTElLRUxZKGVjKSkKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0
aW9uKGVjKTsKKyAgICByZXR1cm47Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
c2NyaXB0U3RyaW5nQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9i
ai5zY3JpcHRTdHJpbmdBdHRyLl9nZXQiKTsKQEAgLTE1MjIsNiArMTYzNCwxNCBAQCBzdGF0aWMg
Y29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSBUZXN0T2JqQXR0cnNbXSA9IHsKICAgICB7InN0cmluZ0F0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uIiwgVGVzdE9iakludGVybmFsOjpzdHJpbmdBdHRyV2l0aFNl
dHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIsIFRlc3RPYmpJbnRlcm5hbDo6c3RyaW5nQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4
OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0
dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKICAgICAvLyBBdHRyaWJ1
dGUgJ2N1c3RvbUF0dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnQ3VzdG9tJykKICAg
ICB7ImN1c3RvbUF0dHIiLCBWOFRlc3RPYmo6OmN1c3RvbUF0dHJBY2Nlc3NvckdldHRlciwgVjhU
ZXN0T2JqOjpjdXN0b21BdHRyQWNjZXNzb3JTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGlj
X2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlBy
b3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAorICAgIC8v
IEF0dHJpYnV0ZSAnd2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlJyAoVHlwZTogJ2F0dHJpYnV0ZScg
RXh0QXR0cjogJ0NhbGxXaXRoJykKKyAgICB7IndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSIsIFRl
c3RPYmpJbnRlcm5hbDo6d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlQXR0ckdldHRlciwgVGVzdE9i
akludGVybmFsOjp3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVBdHRyU2V0dGVyLCAwIC8qIG5vIGRh
dGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRp
Y19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNl
ICovfSwKKyAgICAvLyBBdHRyaWJ1dGUgJ3dpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmli
dXRlJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJ0NhbGxXaXRoJykKKyAgICB7IndpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlIiwgVGVzdE9iakludGVybmFsOjp3aXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUF0dHJHZXR0ZXIsIFRlc3RPYmpJbnRlcm5hbDo6
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVBdHRyU2V0dGVyLCAwIC8qIG5vIGRh
dGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRp
Y19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNl
ICovfSwKKyAgICAvLyBBdHRyaWJ1dGUgJ3dpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcycg
KFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICdDYWxsV2l0aCcpCisgICAgeyJ3aXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dGVSYWlzZXMiLCBUZXN0T2JqSW50ZXJuYWw6OndpdGhTY3JpcHRTdGF0ZUF0
dHJpYnV0ZVJhaXNlc0F0dHJHZXR0ZXIsIFRlc3RPYmpJbnRlcm5hbDo6d2l0aFNjcmlwdFN0YXRl
QXR0cmlidXRlUmFpc2VzQXR0clNldHRlciwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2
ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlB
dHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCisgICAgLy8gQXR0cmli
dXRlICd3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcycgKFR5cGU6ICdh
dHRyaWJ1dGUnIEV4dEF0dHI6ICdDYWxsV2l0aCcpCisgICAgeyJ3aXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEF0dHJpYnV0ZVJhaXNlcyIsIFRlc3RPYmpJbnRlcm5hbDo6d2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNBdHRyR2V0dGVyLCBUZXN0T2JqSW50ZXJuYWw6Ondp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzQXR0clNldHRlciwgMCAvKiBu
byBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBz
dGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0
YW5jZSAqL30sCiAgICAgLy8gQXR0cmlidXRlICdzY3JpcHRTdHJpbmdBdHRyJyAoVHlwZTogJ3Jl
YWRvbmx5IGF0dHJpYnV0ZScgRXh0QXR0cjogJ0NvbnZlcnRTY3JpcHRTdHJpbmcnKQogICAgIHsi
c2NyaXB0U3RyaW5nQXR0ciIsIFRlc3RPYmpJbnRlcm5hbDo6c2NyaXB0U3RyaW5nQXR0ckF0dHJH
ZXR0ZXIsIDAsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+
KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9u
ZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAogI2lmIEVOQUJMRShDb25kaXRpb24xKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122860</attachid>
            <date>2012-01-17 18:40:47 -0800</date>
            <delta_ts>2012-01-19 11:06:03 -0800</delta_ts>
            <desc>history.state part, reworked</desc>
            <filename>bug-76035-20120117184047.patch</filename>
            <type>text/plain</type>
            <size>19198</size>
            <attacher name="Pablo Flouret">pf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTQ0ZGNjNjVmOTJlNGZh
YjNhZDViMzE3OGI5ZTg1NWNkZGQyMzhlYy4uN2Y1Y2U0YWU0ODk2MDk1MmIzN2U2NDBlMzZkNjI5
ZDBjMzcwODJjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM1IEBACiAyMDEyLTAxLTE3ICBQYWJs
byBGbG91cmV0ICA8cGFibG9mQG1vdG9yb2xhLmNvbT4KIAorICAgICAgICBBZGQgc3RhdGUgYXR0
cmlidXRlIHRvIGhpc3RvcnkncyBkb20gaW50ZXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogZmFzdC9sb2FkZXIvc3RhdGVvYmplY3Rz
L3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLmh0bWwKKyAgICAgICAgICAg
ICAgIGZhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUtc3RhdGUtYXR0cmlidXRlLW9u
bHktb25lLWRlc2VyaWFsaXphdGlvbi5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hp
c3RvcnlDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpTY3JpcHRWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dFZhbHVlOjpudWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRWYWx1ZTo6dW5kZWZpbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpudWxs
KToKKyAgICAgICAgKiBoaXN0b3J5L0hpc3RvcnlJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okhpc3RvcnlJdGVtOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5SXRlbTo6c2V0
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpzZXRTdGF0ZU9iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIaXN0b3J5SXRlbTo6Z2V0T3JDcmVhdGVEZXNlcmlhbGl6ZWRTdGF0
ZU9iamVjdCk6CisgICAgICAgICogaGlzdG9yeS9IaXN0b3J5SXRlbS5oOgorICAgICAgICAqIHBh
Z2UvSGlzdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5OjpzdGF0ZSk6CisgICAg
ICAgICogcGFnZS9IaXN0b3J5Lmg6CisgICAgICAgICogcGFnZS9IaXN0b3J5LmlkbDoKKworMjAx
Mi0wMS0xNyAgUGFibG8gRmxvdXJldCAgPHBhYmxvZkBtb3Rvcm9sYS5jb20+CisKICAgICAgICAg
QWRkIFtDYWxsV2l0aF0gc3VwcG9ydCBmb3IgYXR0cmlidXRlcyBpbiBKU0MvVjggaWRsIGNvZGUg
Z2VuZXJhdG9ycy4KICAgICAgICAgUGFydCBvZiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzYwMzUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIaXN0b3J5Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlz
dG9yeUN1c3RvbS5jcHAKaW5kZXggNzJlYTU0MjRjN2MxMmYzYTY3MmJjN2Q3MzllMTFkZWRmYjQ4
MThjNy4uMGExNjkyMjRkODgyZDE2MzgwYzA5OTE0YjcxYmVmN2I5ODhjZmJmYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCkBAIC0zMSw2ICsz
MSw3IEBACiAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhpc3RvcnkuaCIKKyNpbmNs
dWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgog
I2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRWYWx1ZS5jcHAKaW5kZXggYmZhOTNhYTg3MDdiMDlhOWUzYjRiNjMxMzdhMmJk
M2U4ZTYzMmYyYy4uMWZlODE3Yzc4NDE4ZWI1ZGFkMTE4MWFmOGRkMmNmMDE3MzRhYWU4MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcApAQCAtNDQsNiArNDQs
MTQgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitTY3Jp
cHRWYWx1ZTo6U2NyaXB0VmFsdWUoY29uc3QgU2NyaXB0VmFsdWUmIHZhbHVlKQoreworICAgIGlm
ICghdmFsdWUubV92YWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV92YWx1ZSA9IEpTQzo6
U3Ryb25nPEpTQzo6VW5rbm93bj4odmFsdWUubV92YWx1ZSk7Cit9CisKIGJvb2wgU2NyaXB0VmFs
dWU6OmdldFN0cmluZyhTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIFN0cmluZyYgcmVzdWx0KSBj
b25zdAogewogICAgIGlmICghbV92YWx1ZSkKQEAgLTExMCw2ICsxMTgsMTYgQEAgU2NyaXB0VmFs
dWUgU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgU2Vy
aWFsaXplZFNjcmlwdFYKICAgICByZXR1cm4gU2NyaXB0VmFsdWUoc2NyaXB0U3RhdGUtPmdsb2Jh
bERhdGEoKSwgdmFsdWUtPmRlc2VyaWFsaXplKHNjcmlwdFN0YXRlLCBzY3JpcHRTdGF0ZS0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCAwLCB0aHJvd0V4Y2VwdGlvbnMpKTsKIH0KIAorU2NyaXB0VmFs
dWUgU2NyaXB0VmFsdWU6OnVuZGVmaW5lZChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCit7Cisg
ICAgcmV0dXJuIFNjcmlwdFZhbHVlKHNjcmlwdFN0YXRlLT5nbG9iYWxEYXRhKCksIEpTQzo6anNV
bmRlZmluZWQoKSk7Cit9CisKK1NjcmlwdFZhbHVlIFNjcmlwdFZhbHVlOjpudWxsKFNjcmlwdFN0
YXRlKiBzY3JpcHRTdGF0ZSkKK3sKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUoc2NyaXB0U3RhdGUt
Pmdsb2JhbERhdGEoKSwgSlNDOjpqc051bGwoKSk7Cit9CisKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQogc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGpzVG9JbnNwZWN0b3JWYWx1ZShT
Y3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIEpTVmFsdWUgdmFsdWUsIGludCBtYXhEZXB0aCkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCmluZGV4IGE0ZDU5N2E5MTc1
NjZlOWMyMTA1N2U1ZDVmZDQzMzc3YWM1OWU5YTQuLmRhN2ZiNzI2NWVmZjdlNjc5YTY3ZjdiZjNi
ODI0N2YwMmQ3M2YxMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUu
aApAQCAtNDksNiArNDksNyBAQCBjbGFzcyBTY3JpcHRWYWx1ZSB7CiBwdWJsaWM6CiAgICAgU2Ny
aXB0VmFsdWUoKSB7IH0KICAgICBTY3JpcHRWYWx1ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSA6IG1fdmFsdWUoZ2xvYmFsRGF0YSwgdmFsdWUpIHt9
CisgICAgU2NyaXB0VmFsdWUoY29uc3QgU2NyaXB0VmFsdWUmKTsKICAgICB2aXJ0dWFsIH5TY3Jp
cHRWYWx1ZSgpIHt9CiAKICAgICBKU0M6OkpTVmFsdWUganNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWUuZ2V0KCk7IH0KQEAgLTY2LDcgKzY3LDggQEAgcHVibGljOgogICAgIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemUoU2NyaXB0U3RhdGUqLCBTZXJpYWxp
emF0aW9uRXJyb3JNb2RlID0gVGhyb3dpbmcpOwogICAgIHN0YXRpYyBTY3JpcHRWYWx1ZSBkZXNl
cmlhbGl6ZShTY3JpcHRTdGF0ZSosIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSosIFNlcmlhbGl6YXRp
b25FcnJvck1vZGUgPSBUaHJvd2luZyk7CiAKLSAgICBzdGF0aWMgU2NyaXB0VmFsdWUgdW5kZWZp
bmVkKCk7CisgICAgc3RhdGljIFNjcmlwdFZhbHVlIHVuZGVmaW5lZChTY3JpcHRTdGF0ZSopOwor
ICAgIHN0YXRpYyBTY3JpcHRWYWx1ZSBudWxsKFNjcmlwdFN0YXRlKik7CiAKICNpZiBFTkFCTEUo
SU5TUEVDVE9SKQogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHRvSW5zcGVjdG9yVmFs
dWUoU2NyaXB0U3RhdGUqKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRW
YWx1ZS5oCmluZGV4IGQ0MTI5MDFmZGFkOTUwZWU4NmY4YjlkZWVkY2IxNzgyZDE1YTAxMWUuLjA0
MmY4YWEyN2I2NjcxMTA5NWIzNGZkNjM4OTE3ZjQxYmZjZmFlYWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaApAQCAtMTMzLDcgKzEzMywxNyBAQCBwdWJsaWM6CiAg
ICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZShTY3JpcHRTdGF0
ZSopOwogICAgIHN0YXRpYyBTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZShTY3JpcHRTdGF0ZSosIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSopOwogCi0gICAgc3RhdGljIFNjcmlwdFZhbHVlIHVuZGVmaW5l
ZCgpIHsgcmV0dXJuIFNjcmlwdFZhbHVlKHY4OjpVbmRlZmluZWQoKSk7IH0KKyAgICBzdGF0aWMg
U2NyaXB0VmFsdWUgdW5kZWZpbmVkKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IDApCisgICAg
eworICAgICAgICBVTlVTRURfUEFSQU0oc2NyaXB0U3RhdGUpOworICAgICAgICByZXR1cm4gU2Ny
aXB0VmFsdWUodjg6OlVuZGVmaW5lZCgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgU2NyaXB0VmFs
dWUgbnVsbChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSAwKQorICAgIHsKKyAgICAgICAgVU5V
U0VEX1BBUkFNKHNjcmlwdFN0YXRlKTsKKyAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHY4OjpO
dWxsKCkpOworICAgIH0KIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvaGlz
dG9yeS9IaXN0b3J5SXRlbS5jcHAKaW5kZXggMjFjODFlZGU3ZWZlMjYxYWQ4Njk3NTFkY2Y5ZThm
MmE0MGE1ZTg5Mi4uMmRiNTEwNThhZjYwOGE1NDY1Zjg2YjkzMzcwNGUxZDE4MTVjN2IwMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlICJJY29uRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUg
IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2lu
Y2x1ZGUgPHN0ZGlvLmg+CkBAIC0yMDAsNiArMjAxLDcgQEAgdm9pZCBIaXN0b3J5SXRlbTo6cmVz
ZXQoKQogICAgIG1faXRlbVNlcXVlbmNlTnVtYmVyID0gZ2VuZXJhdGVTZXF1ZW5jZU51bWJlcigp
OwogCiAgICAgbV9zdGF0ZU9iamVjdCA9IDA7CisgICAgbV9kZXNlcmlhbGl6ZWRTdGF0ZU9iamVj
dC5jbGVhcigpOwogICAgIG1fZG9jdW1lbnRTZXF1ZW5jZU51bWJlciA9IGdlbmVyYXRlU2VxdWVu
Y2VOdW1iZXIoKTsKIAogICAgIG1fZm9ybURhdGEgPSAwOwpAQCAtMjgyLDYgKzI4NCw3IEBAIHZv
aWQgSGlzdG9yeUl0ZW06OnNldFVSTChjb25zdCBLVVJMJiB1cmwpCiAgICAgcGFnZUNhY2hlKCkt
PnJlbW92ZSh0aGlzKTsKICAgICBzZXRVUkxTdHJpbmcodXJsLnN0cmluZygpKTsKICAgICBjbGVh
ckRvY3VtZW50U3RhdGUoKTsKKyAgICBtX2Rlc2VyaWFsaXplZFN0YXRlT2JqZWN0LmNsZWFyKCk7
CiB9CiAKIHZvaWQgSGlzdG9yeUl0ZW06OnNldE9yaWdpbmFsVVJMU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdXJsU3RyaW5nKQpAQCAtNDU2LDYgKzQ1OSwyMSBAQCB2b2lkIEhpc3RvcnlJdGVtOjpzZXRJ
c1RhcmdldEl0ZW0oYm9vbCBmbGFnKQogdm9pZCBIaXN0b3J5SXRlbTo6c2V0U3RhdGVPYmplY3Qo
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG9iamVjdCkKIHsKICAgICBtX3N0YXRl
T2JqZWN0ID0gb2JqZWN0OworICAgIG1fZGVzZXJpYWxpemVkU3RhdGVPYmplY3QuY2xlYXIoKTsK
K30KKworU2NyaXB0VmFsdWUqIEhpc3RvcnlJdGVtOjpnZXRPckNyZWF0ZURlc2VyaWFsaXplZFN0
YXRlT2JqZWN0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkKK3sKKyAgICBpZiAoIW1fZGVzZXJp
YWxpemVkU3RhdGVPYmplY3QpIHsKKyAgICAgICAgaWYgKCFtX3N0YXRlT2JqZWN0KQorICAgICAg
ICAgICAgbV9kZXNlcmlhbGl6ZWRTdGF0ZU9iamVjdCA9IGFkb3B0UHRyKG5ldyBTY3JpcHRWYWx1
ZShTY3JpcHRWYWx1ZTo6bnVsbChzY3JpcHRTdGF0ZSkpKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZWRTdGF0ZU9iamVjdCA9IFNjcmlwdFZhbHVl
OjpkZXNlcmlhbGl6ZShzY3JpcHRTdGF0ZSwgbV9zdGF0ZU9iamVjdC5nZXQoKSk7CisgICAgICAg
ICAgICBtX2Rlc2VyaWFsaXplZFN0YXRlT2JqZWN0ID0gYWRvcHRQdHIobmV3IFNjcmlwdFZhbHVl
KGRlc2VyaWFsaXplZFN0YXRlT2JqZWN0KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gbV9kZXNlcmlhbGl6ZWRTdGF0ZU9iamVjdC5nZXQoKTsKIH0KIAogdm9pZCBIaXN0b3J5SXRl
bTo6YWRkQ2hpbGRJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IGNoaWxkKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5oIGIvU291cmNlL1dlYkNvcmUv
aGlzdG9yeS9IaXN0b3J5SXRlbS5oCmluZGV4IDg2MTlkMGMzNDZiZjg2YjllNzI5MjY5NjI5ZDM4
MjViNzAyZjZiNzMuLjY0ZjRiNzY2MzQ0MDhkZTQ1MzNhYmRjNDdlMGFlZmY1M2M3ZTBhMDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lu
Y2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRl
ICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC01Myw2ICs1NCw3IEBA
IGNsYXNzIEhpc3RvcnlJdGVtOwogY2xhc3MgSW1hZ2U7CiBjbGFzcyBLVVJMOwogY2xhc3MgUmVz
b3VyY2VSZXF1ZXN0OworY2xhc3MgU2NyaXB0VmFsdWU7CiBjbGFzcyBTZXJpYWxpemVkU2NyaXB0
VmFsdWU7CiAKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxIaXN0b3J5SXRlbT4gPiBIaXN0b3J5SXRl
bVZlY3RvcjsKQEAgLTE0MSw2ICsxNDMsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzZXRT
dGF0ZU9iamVjdChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gb2JqZWN0KTsKICAg
ICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHN0YXRlT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZU9iamVjdC5nZXQoKTsgfQorICAgIFNjcmlwdFZhbHVlKiBnZXRPckNyZWF0ZURlc2VyaWFs
aXplZFN0YXRlT2JqZWN0KFNjcmlwdFN0YXRlKik7CiAKICAgICB2b2lkIHNldEl0ZW1TZXF1ZW5j
ZU51bWJlcihsb25nIGxvbmcgbnVtYmVyKSB7IG1faXRlbVNlcXVlbmNlTnVtYmVyID0gbnVtYmVy
OyB9CiAgICAgbG9uZyBsb25nIGl0ZW1TZXF1ZW5jZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1f
aXRlbVNlcXVlbmNlTnVtYmVyOyB9CkBAIC0yNzAsNiArMjczLDcgQEAgcHJpdmF0ZToKIAogICAg
IC8vIFN1cHBvcnQgZm9yIEhUTUw1IEhpc3RvcnkKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBtX3N0YXRlT2JqZWN0OworICAgIE93blB0cjxTY3JpcHRWYWx1ZT4gbV9kZXNlcmlh
bGl6ZWRTdGF0ZU9iamVjdDsKICAgICAKICAgICAvLyBpbmZvIHVzZWQgdG8gcmVwb3N0IGZvcm0g
ZGF0YQogICAgIFJlZlB0cjxGb3JtRGF0YT4gbV9mb3JtRGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3Rvcnku
Y3BwCmluZGV4IDFmNWEzOWYyODc1ODRmN2MyNzQ4YjMzZTEwOTllNjY0ZDE5MmFlNjguLjljNWU5
NWVlZGNkZGE2ZTgzM2QzMGQ5YmFiNDk4YTY4ODc1YzE2M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvSGlzdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5
LmNwcApAQCAtMzIsOCArMzIsMTAgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJI
aXN0b3J5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgpAQCAtMTA3LDYgKzEwOSwxNiBAQCBLVVJMIEhpc3Rvcnk6OnVybEZvclN0
YXRlKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQogICAgIHJldHVybiBLVVJMKGJhc2VVUkwsIHVy
bFN0cmluZyk7CiB9CiAKK1NjcmlwdFZhbHVlIEhpc3Rvcnk6OnN0YXRlKFNjcmlwdFN0YXRlKiBz
Y3JpcHRTdGF0ZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybiBT
Y3JpcHRWYWx1ZTo6bnVsbChzY3JpcHRTdGF0ZSk7CisKKyAgICBIaXN0b3J5SXRlbSogaGlzdG9y
eUl0ZW0gPSBtX2ZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpOworCisg
ICAgcmV0dXJuIGhpc3RvcnlJdGVtID8gKmhpc3RvcnlJdGVtLT5nZXRPckNyZWF0ZURlc2VyaWFs
aXplZFN0YXRlT2JqZWN0KHNjcmlwdFN0YXRlKSA6IFNjcmlwdFZhbHVlOjpudWxsKHNjcmlwdFN0
YXRlKTsKK30KKwogdm9pZCBIaXN0b3J5OjpzdGF0ZU9iamVjdEFkZGVkKFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBTdHJp
bmcmIHVybFN0cmluZywgU3RhdGVPYmplY3RUeXBlIHN0YXRlT2JqZWN0VHlwZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5wYWdlKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvSGlzdG9yeS5oCmluZGV4IGJkNTBmY2NkMmI4NjFkOWU2NDE4ZTk3NGY0MmRmYjJiMmI1Zjkx
Y2UuLmRmNmZkMTY3M2E3NmM3ODA1YmJjMmI5YWYxZmRlODllNzY5YmRiZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
SGlzdG9yeS5oCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpbmNsdWRlICJET01XaW5kb3dQcm9wZXJ0
eS5oIgogI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgorI2luY2x1
ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC01Niw2ICs1
OCw5IEBAIHB1YmxpYzoKICAgICAgICAgU3RhdGVPYmplY3RQdXNoLAogICAgICAgICBTdGF0ZU9i
amVjdFJlcGxhY2UKICAgICB9OworCisgICAgU2NyaXB0VmFsdWUgc3RhdGUoU2NyaXB0U3RhdGUq
KSBjb25zdDsKKwogICAgIHZvaWQgc3RhdGVPYmplY3RBZGRlZChQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgdXJsLCBT
dGF0ZU9iamVjdFR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hp
c3RvcnkuaWRsCmluZGV4IGZmMzcwMWVkMjc2ZDRmNTY5OGRhNmEwNTMwZTA2NjM4MGEzM2IxYzEu
LjBkMDcwOWQ0ODdkMzg3ZGM1YjEyZmQ4OTVmZGExYTcxM2MwODgzNmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9I
aXN0b3J5LmlkbApAQCAtMzcsNiArMzcsNyBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgT21p
dENvbnN0cnVjdG9yCiAgICAgXSBIaXN0b3J5IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IHVuc2lnbmVkIGxvbmcgbGVuZ3RoOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0NhbGxX
aXRoPVNjcmlwdFN0YXRlXSBET01PYmplY3Qgc3RhdGU7CiAKICAgICAgICAgW0RvTm90Q2hlY2tE
b21haW5TZWN1cml0eSwgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gdm9pZCBiYWNr
KCk7CiAgICAgICAgIFtEb05vdENoZWNrRG9tYWluU2VjdXJpdHksIENhbGxXaXRoPVNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRdIHZvaWQgZm9yd2FyZCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGFjM2RhM2UxZDM5ODlkNWFi
YzM0NjJkZDE2NmFmMzI3YjU1MTMyZWMuLjYxMGMwNTdlOGQ2MDIwZjMxNDdmMWQ2ZjJlNDUyYWNk
NTc2MjA0NzUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMS0xNyAgUGFibG8gRmxvdXJl
dCAgPHBhYmxvZkBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgQWRkIHN0YXRlIGF0dHJpYnV0ZSB0
byBoaXN0b3J5J3MgZG9tIGludGVyZmFjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc2MDM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvcHVzaHN0YXRlLXN0
YXRlLWF0dHJpYnV0ZS1vYmplY3QtdHlwZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvcHVzaHN0YXRlLXN0YXRlLWF0dHJpYnV0ZS1vYmpl
Y3QtdHlwZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9sb2FkZXIvc3RhdGVvYmplY3Rz
L3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb25seS1vbmUtZGVzZXJpYWxpemF0aW9uLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3B1c2hz
dGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb25seS1vbmUtZGVzZXJpYWxpemF0aW9uLmh0bWw6IEFkZGVk
LgorCiAyMDEyLTAxLTE3ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgW1F0XSBVbnJldmlld2VkIG1vcm5pbmcgZ2FyZGVuaW5nLgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3B1c2hzdGF0ZS1zdGF0ZS1hdHRy
aWJ1dGUtb2JqZWN0LXR5cGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVy
L3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUtc3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBlcy1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzFhODdhNzhmYmM2ODkzZjBjNmUxZjk5NTg0Y2VkYjUzZWI4
NjYxMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2Jq
ZWN0cy9wdXNoc3RhdGUtc3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBlcy1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwxNSBAQAorVGhpcyB0ZXN0IGNhbGxzIHB1c2hTdGF0ZSB3aXRoIHN0YXRlIG9i
amVjdHMgb2YgYWxsIHRoZSBkaWZmZXJlbnQgb2JqZWN0IHR5cGVzIHN1cHBvcnRlZCBieSB0aGUg
SFRNTDUgImludGVybmFsIHN0cnVjdHVyZWQgY2xvbmluZyBhbGdvcml0aG0iIGFuZCBtYWtlcyBz
dXJlIHRoZSBzdGF0ZSBhdHRyaWJ1dGUgcmV0dXJucyB0aGUgZXhwZWN0ZWQgb2JqZWN0cy4KKwor
U3RhdGUgaXMgaW5pdGlhbGx5IG51bGwgKHR5cGUgb2JqZWN0KQorU3RhdGUgcHVzaGVkIC0gdW5k
ZWZpbmVkICh0eXBlIHVuZGVmaW5lZCkKK1N0YXRlIHB1c2hlZCAtIG51bGwgKHR5cGUgb2JqZWN0
KQorU3RhdGUgcHVzaGVkIC0gZmFsc2UgKHR5cGUgYm9vbGVhbikKK1N0YXRlIHB1c2hlZCAtIHRy
dWUgKHR5cGUgYm9vbGVhbikKK1N0YXRlIHB1c2hlZCAtIDQyICh0eXBlIG51bWJlcikKK1N0YXRl
IHB1c2hlZCAtIFN0cmluZyAodHlwZSBzdHJpbmcpCitTdGF0ZSBwdXNoZWQgLSAwICh0eXBlIG9i
amVjdCkKK1N0YXRlIHB1c2hlZCAtIC9mb28vZ2kgKHR5cGUgb2JqZWN0KQorU3RhdGUgcHVzaGVk
IC0gICh0eXBlIG9iamVjdCkKK1N0YXRlIHB1c2hlZCAtIFtvYmplY3QgT2JqZWN0XSAodHlwZSBv
YmplY3QpCitTdGF0ZSBwdXNoZWQgLSBbb2JqZWN0IEltYWdlRGF0YV0gKHR5cGUgb2JqZWN0KQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvcHVzaHN0
YXRlLXN0YXRlLWF0dHJpYnV0ZS1vYmplY3QtdHlwZXMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
bG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUtc3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBl
cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmYzNWEzZDc5MzM2MTc4YmMyYmM0YTAyZjJlMjg5OTAzZjRmOWIw
NzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVj
dHMvcHVzaHN0YXRlLXN0YXRlLWF0dHJpYnV0ZS1vYmplY3QtdHlwZXMuaHRtbApAQCAtMCwwICsx
LDU3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorCitpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
Y2xlYXJCYWNrRm9yd2FyZExpc3QoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7Cit9CisKK2Z1bmN0aW9uIGxvZyh0eHQpCit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImxvZ2dlciIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHR4dCAr
ICJcbiIpKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgbG9nKCJTdGF0ZSBpcyBp
bml0aWFsbHkgIiArIGhpc3Rvcnkuc3RhdGUgKyAiICh0eXBlICIgKyB0eXBlb2YgaGlzdG9yeS5z
dGF0ZSArICIpIik7CisgICAgcHVzaEFuZFRlc3RTdGF0ZSh1bmRlZmluZWQsICJ1bmRlZmluZWQg
ZW50cnkiKTsKKyAgICBwdXNoQW5kVGVzdFN0YXRlKG51bGwsICJudWxsIGVudHJ5Iik7CisgICAg
cHVzaEFuZFRlc3RTdGF0ZShmYWxzZSwgImZhbHNlIGVudHJ5Iik7CisgICAgcHVzaEFuZFRlc3RT
dGF0ZSh0cnVlLCAidHJ1ZSBlbnRyeSIpOworICAgIHB1c2hBbmRUZXN0U3RhdGUoNDIsICJOdW1i
ZXIgZW50cnkiKTsKKyAgICBwdXNoQW5kVGVzdFN0YXRlKCJTdHJpbmciLCAiU3RyaW5nIGVudHJ5
Iik7CisgICAgcHVzaEFuZFRlc3RTdGF0ZShuZXcgRGF0ZSgwKSwgIkRhdGUgZW50cnkiKTsKKyAg
ICBwdXNoQW5kVGVzdFN0YXRlKG5ldyBSZWdFeHAoImZvbyIsICJnaSIpLCAiUmVnRXhwIGVudHJ5
Iik7CisgICAgcHVzaEFuZFRlc3RTdGF0ZShuZXcgQXJyYXksICJBcnJheSBlbnRyeSIpOworICAg
IHB1c2hBbmRUZXN0U3RhdGUobmV3IE9iamVjdCwgIk9iamVjdCBlbnRyeSIpOworICAgIHB1c2hB
bmRUZXN0U3RhdGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgi
MmQiKS5jcmVhdGVJbWFnZURhdGEoMTAsMTApLCAiSW1hZ2VEYXRhIGVudHJ5Iik7CisKKy8qIFRo
ZSBmb2xsb3dpbmcgYXJlIG5vdCB5ZXQgd2VsbCBlbm91Z2ggc3VwcG9ydGVkIGluIFdlYktpdCB0
byBtZWFuaW5nZnVsbHkgdGVzdCBoZXJlOgorICAgIGhpc3RvcnkucHVzaEFuZFN0YXRlKFtCbG9i
XSwgIkJsb2IgZW50cnkiKTsKKyAgICBoaXN0b3J5LnB1c2hBbmRTdGF0ZShbRmlsZV0sICJGaWxl
IGVudHJ5Iik7CisgICAgaGlzdG9yeS5wdXNoQW5kU3RhdGUoW0ZpbGVMaXN0XSwgIkZpbGVMaXN0
IGVudHJ5Iik7CisqLworfQorCitmdW5jdGlvbiBwdXNoQW5kVGVzdFN0YXRlKGRhdGEsIHRpdGxl
KQoreworICAgIGhpc3RvcnkucHVzaFN0YXRlKGRhdGEsIHRpdGxlKTsKKyAgICB2YXIgc3RhdGUg
PSBoaXN0b3J5LnN0YXRlOworCisgICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgRGF0ZSkKKyAgICAg
ICAgbG9nKCJTdGF0ZSBwdXNoZWQgLSAiICsgc3RhdGUuZ2V0VGltZSgpICsgIiAodHlwZSAiICsg
dHlwZW9mIHN0YXRlICsgIikiKTsKKyAgICBlbHNlCisgICAgICAgIGxvZygiU3RhdGUgcHVzaGVk
IC0gIiArIHN0YXRlICsgIiAodHlwZSAiICsgdHlwZW9mIHN0YXRlICsgIikiKTsKK30KKworPC9z
Y3JpcHQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8cD4KK1RoaXMgdGVzdCBjYWxscyBw
dXNoU3RhdGUgd2l0aCBzdGF0ZSBvYmplY3RzIG9mIGFsbCB0aGUgZGlmZmVyZW50IG9iamVjdCB0
eXBlcyBzdXBwb3J0ZWQgYnkgdGhlCitIVE1MNSAiaW50ZXJuYWwgc3RydWN0dXJlZCBjbG9uaW5n
IGFsZ29yaXRobSIgYW5kIG1ha2VzIHN1cmUgdGhlIHN0YXRlIGF0dHJpYnV0ZSByZXR1cm5zIHRo
ZSBleHBlY3RlZCBvYmplY3RzLgorPC9wPgorPHByZSBpZD0ibG9nZ2VyIj48L3ByZT4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2Jq
ZWN0cy9wdXNoc3RhdGUtc3RhdGUtYXR0cmlidXRlLW9ubHktb25lLWRlc2VyaWFsaXphdGlvbi1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvcHVzaHN0
YXRlLXN0YXRlLWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6YXRpb24tZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjFmZDc1ZDdmYTA4MDU5NjZiNWNkOGViMzI5OWFkYmQzMDMxMDJlNzIKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvcHVz
aHN0YXRlLXN0YXRlLWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6YXRpb24tZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMTcgQEAKK01ha2Ugc3VyZSB0aGUgc2FtZSBkZXNlcmlhbGl6YXRpb24g
b2YgdGhlIHN0YXRlIG9iamVjdCBpcyB1c2VkIGV2ZXJ5IHRpbWUgKGJvdGggaW4gdGhlIGhpc3Rv
cnkgb2JqZWN0IGFuZCBwb3BzdGF0ZSBldmVudHMpLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyBoaXN0b3J5LnN0YXRlICE9PSBzdGF0ZU9iamVjdCBpcyB0cnVlCitQQVNT
IGhpc3Rvcnkuc3RhdGUgPT09IHN0YXRlT2JqZWN0IGlzIHRydWUKKworSW5zaWRlIHBvcHN0YXRl
IGV2ZW50CisKK1BBU1MgaGlzdG9yeS5zdGF0ZSAhPT0gc3RhdGVPYmplY3QgaXMgdHJ1ZQorUEFT
UyBldmVudC5zdGF0ZSAhPT0gc3RhdGVPYmplY3QgaXMgdHJ1ZQorRkFJTCBldmVudC5zdGF0ZSA9
PT0gaGlzdG9yeS5zdGF0ZSBzaG91bGQgYmUgdHJ1ZS4gV2FzIGZhbHNlLgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUtc3RhdGUtYXR0cmlidXRl
LW9ubHktb25lLWRlc2VyaWFsaXphdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIv
c3RhdGVvYmplY3RzL3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb25seS1vbmUtZGVzZXJpYWxp
emF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWViZWJjZjYzZTUyZGRiMDEwNWFmMjE3NGJlMzQ1NmQ1
MzQwZmQ4NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRl
b2JqZWN0cy9wdXNoc3RhdGUtc3RhdGUtYXR0cmlidXRlLW9ubHktb25lLWRlc2VyaWFsaXphdGlv
bi5odG1sCkBAIC0wLDAgKzEsNjAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZC8+Cis8Ym9keT4KKzxwIGlkPWRlc2NyaXB0aW9uPgorPC9wPgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorICAgIGRlc2NyaXB0aW9uKCJNYWtlIHN1cmUg
dGhlIHNhbWUgZGVzZXJpYWxpemF0aW9uIG9mIHRoZSBzdGF0ZSBvYmplY3QgaXMgdXNlZCBldmVy
eSB0aW1lIChib3RoIGluIHRoZSBoaXN0b3J5IG9iamVjdCBhbmQgcG9wc3RhdGUgZXZlbnRzKS4i
KTsKKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuY2xlYXJCYWNrRm9yd2FyZExpc3QoKTsKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0
cnVlOworCisgICAgLy8gQ3JlYXRlIGEgbmV3IG9iamVjdC4KKyAgICB2YXIgc3RhdGVPYmplY3Qg
PSBbImEiXTsKKworICAgIC8vIFVzZSBpdCBhcyB0aGUgc3RhdGUgb2JqZWN0IGluIGEgcmVwbGFj
ZVN0YXRlLiAgVGhpcyBjbG9uZXMgdGhlIG9iamVjdC4KKyAgICBoaXN0b3J5LnJlcGxhY2VTdGF0
ZShzdGF0ZU9iamVjdCwgbnVsbCwgbnVsbCk7CisKKyAgICAvLyBTaW5jZSB0aGUgYWN0dWFsIGhp
c3Rvcnkuc3RhdGUgaXMgYSBzdHJ1Y3R1cmVkIGNsb25lLCBpdCBzaG91bGQgbm90IG1hdGNoIG91
ciBvcmlnaW5hbCBvYmplY3QuCisgICAgc2hvdWxkQmVUcnVlKCJoaXN0b3J5LnN0YXRlICE9PSBz
dGF0ZU9iamVjdCIpOworCisgICAgLy8gTm93IGxldCdzIHJlZmV0Y2ggYSBjb3B5IG9mIGhpc3Rv
cnkuc3RhdGUgdG8gc3RvcmU7CisgICAgc3RhdGVPYmplY3QgPSBoaXN0b3J5LnN0YXRlOworCisg
ICAgLy8gT3VyIHJlZmVyZW5jZSBhbmQgdGhlIGhpc3Rvcnkuc3RhdGUgaXRzZWxmIHNob3VsZCBi
ZSB0aGUgc2FtZS4gIFRoaXMgaXMgbm93IEFkYW0ncyBvcmlnaW5hbCBhc3NlcnRpb24uCisgICAg
c2hvdWxkQmVUcnVlKCJoaXN0b3J5LnN0YXRlID09PSBzdGF0ZU9iamVjdCIpOworCisgICAgLy8g
Tm93IGxldCdzIGRvIGEgcHVzaHN0YXRlIHRvIGFkZCBhIGhpc3RvcnkgZW50cnkuCisgICAgaGlz
dG9yeS5wdXNoU3RhdGUobnVsbCwgbnVsbCwgbnVsbCk7CisKKyAgICAvLyBOb3cgYWRkIGEgaGFu
ZGxlciBmb3IgdGhlIHBvcHN0YXRlIGV2ZW50LgorICAgIHdpbmRvdy5vbnBvcHN0YXRlID0gZnVu
Y3Rpb24oZXZlbnQpIHsKKyAgICAgICAgZGVidWcoIlxuSW5zaWRlIHBvcHN0YXRlIGV2ZW50XG4i
KTsKKyAgICAgICAgLy8gT3VyIHN0b3JlZCByZWZlcmVuY2UgdG8gc3RhdGVPYmplY3Qgd2lsbCBu
b3QgbWF0Y2ggdGhlIGN1cnJlbnQgc3RhdGUgb2JqZWN0LCBhcyBpdCBpcyBhIHN0cnVjdHVyZWQg
Y2xvbmUgb2YgdGhlIGhpc3RvcnkgaXRlbSdzIHN0YXRlIG9iamVjdC4KKyAgICAgICAgc2hvdWxk
QmVUcnVlKCJoaXN0b3J5LnN0YXRlICE9PSBzdGF0ZU9iamVjdCIpOworICAgICAgICAvLyBPdXIg
c3RvcmVkIHJlZmVyZW5jZSB0byBzdGF0ZU9iamVjdCB3aWxsIG5vdCBtYXRjaCB0aGUgc3RhdGUg
b2JqZWN0IGluIHRoaXMgcG9wIHN0YXRlIGV2ZW50LCBhcyBpdCBpcyB0aGUgc2FtZSBhcyBoaXN0
b3J5LnN0YXRlIHdoaWNoIGlzIGEgc3RydWN0dXJlZCBjbG9uZSBvZiB0aGUgaGlzdG9yeSBpdGVt
J3Mgc3RhdGUgb2JqZWN0LgorICAgICAgICBzaG91bGRCZVRydWUoImV2ZW50LnN0YXRlICE9PSBz
dGF0ZU9iamVjdCIpOworICAgICAgICAvLyBUaGUgZXZlbnQncyBzdGF0ZSBvYmplY3QgYW5kIHRo
ZSBjdXJyZW50IHN0YXRlIG9iamVjdCBzaG91bGQgbWF0Y2guCisgICAgICAgIHNob3VsZEJlVHJ1
ZSgiZXZlbnQuc3RhdGUgPT09IGhpc3Rvcnkuc3RhdGUiKTsgLy8gVGhpcyBmYWlscyBmb3Igbm93
LCBuZWVkcyB0byBiZSBmaXhlZC4KKworICAgICAgICB2YXIgcyA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoInNjcmlwdCIpOworICAgICAgICBzLnNyYyA9ICIuLi8uLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIjsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzKTsKKyAg
ICAgICAgc2V0VGltZW91dChmaW5pc2hKU1Rlc3QsIDApOworICAgIH0KKworICAgIC8vIE5vdyBs
ZXQncyBnbyBiYWNrIHRvIG91ciBvcmlnaW5hbCBoaXN0b3J5IGVudHJ5IHdoaWNoIGhhcyBhIHN0
YXRlIG9iamVjdCB0aGF0IHdlJ3ZlIHN0b3JlZCBhIHJlZmVyZW5jZSB0byBhbHJlYWR5LgorICAg
IC8vIFRoaXMgd2lsbCBmaXJlIG91ciBwb3BzdGF0ZSBldmVudCBoYW5kbGVyIGFib3ZlLgorICAg
IGhpc3RvcnkuYmFjaygpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123150</attachid>
            <date>2012-01-19 11:06:11 -0800</date>
            <delta_ts>2012-01-31 13:31:02 -0800</delta_ts>
            <desc>review comments fixed</desc>
            <filename>bug-76035-20120119110610.patch</filename>
            <type>text/plain</type>
            <size>19075</size>
            <attacher name="Pablo Flouret">pf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTk0NTgzYTU4N2RkMWU0
ODdlMjBkMmYxOGJjMWJlMDNiYjcyYzAwNi4uMmJkZWUyZjM4YmM2ZWEyNmE5YTgzZmEyYmRlYTcy
ZDBhZTg3NDM2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAxLTE3ICBQYWJs
byBGbG91cmV0ICA8cGFibG9mQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBBZGQgc3RhdGUgYXR0
cmlidXRlIHRvIGhpc3RvcnkncyBkb20gaW50ZXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogZmFzdC9sb2FkZXIvc3RhdGVvYmplY3Rz
L3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLmh0bWwKKyAgICAgICAgICAg
ICAgIGZhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUtc3RhdGUtYXR0cmlidXRlLW9u
bHktb25lLWRlc2VyaWFsaXphdGlvbi5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hp
c3RvcnlDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpTY3JpcHRWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dFZhbHVlOjpudWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRWYWx1ZTo6dW5kZWZpbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpudWxs
KToKKyAgICAgICAgKiBoaXN0b3J5L0hpc3RvcnlJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okhpc3RvcnlJdGVtOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5SXRlbTo6c2V0
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpzZXRTdGF0ZU9iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIaXN0b3J5SXRlbTo6Z2V0T3JDcmVhdGVEZXNlcmlhbGl6ZWRTdGF0
ZU9iamVjdCk6CisgICAgICAgICogaGlzdG9yeS9IaXN0b3J5SXRlbS5oOgorICAgICAgICAqIHBh
Z2UvSGlzdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5OjpzdGF0ZSk6CisgICAg
ICAgICogcGFnZS9IaXN0b3J5Lmg6CisgICAgICAgICogcGFnZS9IaXN0b3J5LmlkbDoKKwogMjAx
Mi0wMS0xOCAgVnNldm9sb2QgVmxhc292ICA8dnNldmlrQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBVbnNhZmUgY3Jvc3Mgb3JpZ2luIGFjY2VzcyBlcnJvcnMgc2hvdWxk
IHNob3cgc3RhY2sgdHJhY2UgaW4gY29uc29sZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCmluZGV4IDcyZWE1NDI0YzdjMTJmM2E2NzJiYzdkNzM5
ZTExZGVkZmI0ODE4YzcuLjBhMTY5MjI0ZDg4MmQxNjM4MGMwOTkxNGI3MWJlZjdiOTg4Y2ZiZmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcApA
QCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIaXN0b3J5
LmgiCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0
VmFsdWUuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rpb24uaD4KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCmluZGV4IGJmYTkzYWE4NzA3YjA5YTllM2I0
YjYzMTM3YTJiZDNlOGU2MzJmMmMuLjFmZTgxN2M3ODQxOGViNWRhZDExODFhZjhkZDJjZjAxNzM0
YWFlODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAKQEAg
LTQ0LDYgKzQ0LDE0IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorU2NyaXB0VmFsdWU6OlNjcmlwdFZhbHVlKGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSkK
K3sKKyAgICBpZiAoIXZhbHVlLm1fdmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdmFs
dWUgPSBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+KHZhbHVlLm1fdmFsdWUpOworfQorCiBib29s
IFNjcmlwdFZhbHVlOjpnZXRTdHJpbmcoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBTdHJpbmcm
IHJlc3VsdCkgY29uc3QKIHsKICAgICBpZiAoIW1fdmFsdWUpCkBAIC0xMTAsNiArMTE4LDE2IEBA
IFNjcmlwdFZhbHVlIFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShTY3JpcHRTdGF0ZSogc2NyaXB0
U3RhdGUsIFNlcmlhbGl6ZWRTY3JpcHRWCiAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHNjcmlwdFN0
YXRlLT5nbG9iYWxEYXRhKCksIHZhbHVlLT5kZXNlcmlhbGl6ZShzY3JpcHRTdGF0ZSwgc2NyaXB0
U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgMCwgdGhyb3dFeGNlcHRpb25zKSk7CiB9CiAK
K1NjcmlwdFZhbHVlIFNjcmlwdFZhbHVlOjp1bmRlZmluZWQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0
YXRlKQoreworICAgIHJldHVybiBTY3JpcHRWYWx1ZShzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgp
LCBKU0M6OmpzVW5kZWZpbmVkKCkpOworfQorCitTY3JpcHRWYWx1ZSBTY3JpcHRWYWx1ZTo6bnVs
bChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCit7CisgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHNj
cmlwdFN0YXRlLT5nbG9iYWxEYXRhKCksIEpTQzo6anNOdWxsKCkpOworfQorCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBqc1RvSW5zcGVj
dG9yVmFsdWUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBpbnQgbWF4
RGVwdGgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRW
YWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaAppbmRleCBh
NGQ1OTdhOTE3NTY2ZTljMjEwNTdlNWQ1ZmQ0MzM3N2FjNTllOWE0Li5kYTdmYjcyNjVlZmY3ZTY3
OWE2N2Y3YmYzYjgyNDdmMDJkNzNmMTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdFZhbHVlLmgKQEAgLTQ5LDYgKzQ5LDcgQEAgY2xhc3MgU2NyaXB0VmFsdWUgewogcHVibGlj
OgogICAgIFNjcmlwdFZhbHVlKCkgeyB9CiAgICAgU2NyaXB0VmFsdWUoSlNDOjpKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgOiBtX3ZhbHVlKGdsb2JhbERhdGEs
IHZhbHVlKSB7fQorICAgIFNjcmlwdFZhbHVlKGNvbnN0IFNjcmlwdFZhbHVlJik7CiAgICAgdmly
dHVhbCB+U2NyaXB0VmFsdWUoKSB7fQogCiAgICAgSlNDOjpKU1ZhbHVlIGpzVmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CkBAIC02Niw3ICs2Nyw4IEBAIHB1YmxpYzoKICAg
ICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplKFNjcmlwdFN0YXRl
KiwgU2VyaWFsaXphdGlvbkVycm9yTW9kZSA9IFRocm93aW5nKTsKICAgICBzdGF0aWMgU2NyaXB0
VmFsdWUgZGVzZXJpYWxpemUoU2NyaXB0U3RhdGUqLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqLCBT
ZXJpYWxpemF0aW9uRXJyb3JNb2RlID0gVGhyb3dpbmcpOwogCi0gICAgc3RhdGljIFNjcmlwdFZh
bHVlIHVuZGVmaW5lZCgpOworICAgIHN0YXRpYyBTY3JpcHRWYWx1ZSB1bmRlZmluZWQoU2NyaXB0
U3RhdGUqKTsKKyAgICBzdGF0aWMgU2NyaXB0VmFsdWUgbnVsbChTY3JpcHRTdGF0ZSopOwogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB0b0lu
c3BlY3RvclZhbHVlKFNjcmlwdFN0YXRlKikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0VmFsdWUuaAppbmRleCBkNDEyOTAxZmRhZDk1MGVlODZmOGI5ZGVlZGNiMTc4MmQx
NWEwMTFlLi4wNDJmOGFhMjdiNjY3MTEwOTViMzRmZDYzODkxN2Y0MWJmY2ZhZWFhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmgKQEAgLTEzMyw3ICsxMzMsMTcgQEAg
cHVibGljOgogICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemUo
U2NyaXB0U3RhdGUqKTsKICAgICBzdGF0aWMgU2NyaXB0VmFsdWUgZGVzZXJpYWxpemUoU2NyaXB0
U3RhdGUqLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqKTsKIAotICAgIHN0YXRpYyBTY3JpcHRWYWx1
ZSB1bmRlZmluZWQoKSB7IHJldHVybiBTY3JpcHRWYWx1ZSh2ODo6VW5kZWZpbmVkKCkpOyB9Cisg
ICAgc3RhdGljIFNjcmlwdFZhbHVlIHVuZGVmaW5lZChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUg
PSAwKQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmlwdFN0YXRlKTsKKyAgICAgICAg
cmV0dXJuIFNjcmlwdFZhbHVlKHY4OjpVbmRlZmluZWQoKSk7CisgICAgfQorCisgICAgc3RhdGlj
IFNjcmlwdFZhbHVlIG51bGwoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gMCkKKyAgICB7Cisg
ICAgICAgIFVOVVNFRF9QQVJBTShzY3JpcHRTdGF0ZSk7CisgICAgICAgIHJldHVybiBTY3JpcHRW
YWx1ZSh2ODo6TnVsbCgpKTsKKyAgICB9CiAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCmluZGV4IDIxYzgxZWRlN2VmZTI2MWFkODY5
NzUxZGNmOWU4ZjJhNDBhNWU4OTIuLjg3OGI5OWY1ZjhmOTM2MmI1Mzg5ZTU4YTc2OTUyNjlmMDQx
NjQzZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUGFnZUNhY2hlLmgi
CiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIK
ICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMjAwLDYgKzIwMSw3IEBAIHZvaWQgSGlzdG9y
eUl0ZW06OnJlc2V0KCkKICAgICBtX2l0ZW1TZXF1ZW5jZU51bWJlciA9IGdlbmVyYXRlU2VxdWVu
Y2VOdW1iZXIoKTsKIAogICAgIG1fc3RhdGVPYmplY3QgPSAwOworICAgIG1fZGVzZXJpYWxpemVk
U3RhdGVPYmplY3QuY2xlYXIoKTsKICAgICBtX2RvY3VtZW50U2VxdWVuY2VOdW1iZXIgPSBnZW5l
cmF0ZVNlcXVlbmNlTnVtYmVyKCk7CiAKICAgICBtX2Zvcm1EYXRhID0gMDsKQEAgLTI4Miw2ICsy
ODQsNyBAQCB2b2lkIEhpc3RvcnlJdGVtOjpzZXRVUkwoY29uc3QgS1VSTCYgdXJsKQogICAgIHBh
Z2VDYWNoZSgpLT5yZW1vdmUodGhpcyk7CiAgICAgc2V0VVJMU3RyaW5nKHVybC5zdHJpbmcoKSk7
CiAgICAgY2xlYXJEb2N1bWVudFN0YXRlKCk7CisgICAgbV9kZXNlcmlhbGl6ZWRTdGF0ZU9iamVj
dC5jbGVhcigpOwogfQogCiB2b2lkIEhpc3RvcnlJdGVtOjpzZXRPcmlnaW5hbFVSTFN0cmluZyhj
b25zdCBTdHJpbmcmIHVybFN0cmluZykKQEAgLTQ1Niw2ICs0NTksMTYgQEAgdm9pZCBIaXN0b3J5
SXRlbTo6c2V0SXNUYXJnZXRJdGVtKGJvb2wgZmxhZykKIHZvaWQgSGlzdG9yeUl0ZW06OnNldFN0
YXRlT2JqZWN0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBvYmplY3QpCiB7CiAg
ICAgbV9zdGF0ZU9iamVjdCA9IG9iamVjdDsKKyAgICBtX2Rlc2VyaWFsaXplZFN0YXRlT2JqZWN0
LmNsZWFyKCk7Cit9CisKK1NjcmlwdFZhbHVlKiBIaXN0b3J5SXRlbTo6Z2V0T3JDcmVhdGVEZXNl
cmlhbGl6ZWRTdGF0ZU9iamVjdChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCit7CisgICAgaWYg
KG1fZGVzZXJpYWxpemVkU3RhdGVPYmplY3QpCisgICAgICAgIHJldHVybiBtX2Rlc2VyaWFsaXpl
ZFN0YXRlT2JqZWN0LmdldCgpOworCisgICAgbV9kZXNlcmlhbGl6ZWRTdGF0ZU9iamVjdCA9IG1f
c3RhdGVPYmplY3QgPyBhZG9wdFB0cihuZXcgU2NyaXB0VmFsdWUoU2NyaXB0VmFsdWU6OmRlc2Vy
aWFsaXplKHNjcmlwdFN0YXRlLCBtX3N0YXRlT2JqZWN0LmdldCgpKSkpIDogYWRvcHRQdHIobmV3
IFNjcmlwdFZhbHVlKFNjcmlwdFZhbHVlOjpudWxsKHNjcmlwdFN0YXRlKSkpOworICAgIHJldHVy
biBtX2Rlc2VyaWFsaXplZFN0YXRlT2JqZWN0LmdldCgpOwogfQogCiB2b2lkIEhpc3RvcnlJdGVt
OjphZGRDaGlsZEl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gY2hpbGQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9o
aXN0b3J5L0hpc3RvcnlJdGVtLmgKaW5kZXggODYxOWQwYzM0NmJmODZiOWU3MjkyNjk2MjlkMzgy
NWI3MDJmNmI3My4uNjRmNGI3NjYzNDQwOGRlNDUzM2FiZGM0N2UwYWVmZjUzYzdlMGEwMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5j
bHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
IlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTUzLDYgKzU0LDcgQEAg
Y2xhc3MgSGlzdG9yeUl0ZW07CiBjbGFzcyBJbWFnZTsKIGNsYXNzIEtVUkw7CiBjbGFzcyBSZXNv
dXJjZVJlcXVlc3Q7CitjbGFzcyBTY3JpcHRWYWx1ZTsKIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTsKIAogdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEhpc3RvcnlJdGVtPiA+IEhpc3RvcnlJdGVt
VmVjdG9yOwpAQCAtMTQxLDYgKzE0Myw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHNldFN0
YXRlT2JqZWN0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBvYmplY3QpOwogICAg
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc3RhdGVPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlT2JqZWN0LmdldCgpOyB9CisgICAgU2NyaXB0VmFsdWUqIGdldE9yQ3JlYXRlRGVzZXJpYWxp
emVkU3RhdGVPYmplY3QoU2NyaXB0U3RhdGUqKTsKIAogICAgIHZvaWQgc2V0SXRlbVNlcXVlbmNl
TnVtYmVyKGxvbmcgbG9uZyBudW1iZXIpIHsgbV9pdGVtU2VxdWVuY2VOdW1iZXIgPSBudW1iZXI7
IH0KICAgICBsb25nIGxvbmcgaXRlbVNlcXVlbmNlTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9p
dGVtU2VxdWVuY2VOdW1iZXI7IH0KQEAgLTI3MCw2ICsyNzMsNyBAQCBwcml2YXRlOgogCiAgICAg
Ly8gU3VwcG9ydCBmb3IgSFRNTDUgSGlzdG9yeQogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IG1fc3RhdGVPYmplY3Q7CisgICAgT3duUHRyPFNjcmlwdFZhbHVlPiBtX2Rlc2VyaWFs
aXplZFN0YXRlT2JqZWN0OwogICAgIAogICAgIC8vIGluZm8gdXNlZCB0byByZXBvc3QgZm9ybSBk
YXRhCiAgICAgUmVmUHRyPEZvcm1EYXRhPiBtX2Zvcm1EYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9IaXN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5j
cHAKaW5kZXggMWY1YTM5ZjI4NzU4NGY3YzI3NDhiMzNlMTA5OWU2NjRkMTkyYWU2OC4uZmIwYTI4
NGIxNmE5ZGRiZjYxMDEyNGEzYzEyYTgwZDczODBiOTJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9IaXN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3Rvcnku
Y3BwCkBAIC0zMiw4ICszMiwxMCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkhp
c3RvcnlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKICNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CkBAIC0xMDcsNiArMTA5LDE1IEBAIEtVUkwgSGlzdG9yeTo6dXJsRm9yU3Rh
dGUoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCiAgICAgcmV0dXJuIEtVUkwoYmFzZVVSTCwgdXJs
U3RyaW5nKTsKIH0KIAorU2NyaXB0VmFsdWUgSGlzdG9yeTo6c3RhdGUoU2NyaXB0U3RhdGUqIHNj
cmlwdFN0YXRlKSBjb25zdAoreworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIFNj
cmlwdFZhbHVlOjpudWxsKHNjcmlwdFN0YXRlKTsKKworICAgIEhpc3RvcnlJdGVtKiBoaXN0b3J5
SXRlbSA9IG1fZnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPmN1cnJlbnRJdGVtKCk7CisgICAg
cmV0dXJuIGhpc3RvcnlJdGVtID8gKmhpc3RvcnlJdGVtLT5nZXRPckNyZWF0ZURlc2VyaWFsaXpl
ZFN0YXRlT2JqZWN0KHNjcmlwdFN0YXRlKSA6IFNjcmlwdFZhbHVlOjpudWxsKHNjcmlwdFN0YXRl
KTsKK30KKwogdm9pZCBIaXN0b3J5OjpzdGF0ZU9iamVjdEFkZGVkKFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBkYXRhLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBTdHJpbmcm
IHVybFN0cmluZywgU3RhdGVPYmplY3RUeXBlIHN0YXRlT2JqZWN0VHlwZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5wYWdlKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
SGlzdG9yeS5oCmluZGV4IGJkNTBmY2NkMmI4NjFkOWU2NDE4ZTk3NGY0MmRmYjJiMmI1ZjkxY2Uu
LmRmNmZkMTY3M2E3NmM3ODA1YmJjMmI5YWYxZmRlODllNzY5YmRiZWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlz
dG9yeS5oCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpbmNsdWRlICJET01XaW5kb3dQcm9wZXJ0eS5o
IgogI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgorI2luY2x1ZGUg
IlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC01Niw2ICs1OCw5
IEBAIHB1YmxpYzoKICAgICAgICAgU3RhdGVPYmplY3RQdXNoLAogICAgICAgICBTdGF0ZU9iamVj
dFJlcGxhY2UKICAgICB9OworCisgICAgU2NyaXB0VmFsdWUgc3RhdGUoU2NyaXB0U3RhdGUqKSBj
b25zdDsKKwogICAgIHZvaWQgc3RhdGVPYmplY3RBZGRlZChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgdXJsLCBTdGF0
ZU9iamVjdFR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3Rv
cnkuaWRsCmluZGV4IGZmMzcwMWVkMjc2ZDRmNTY5OGRhNmEwNTMwZTA2NjM4MGEzM2IxYzEuLjBk
MDcwOWQ0ODdkMzg3ZGM1YjEyZmQ4OTVmZGExYTcxM2MwODgzNmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0
b3J5LmlkbApAQCAtMzcsNiArMzcsNyBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgT21pdENv
bnN0cnVjdG9yCiAgICAgXSBIaXN0b3J5IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVu
c2lnbmVkIGxvbmcgbGVuZ3RoOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0NhbGxXaXRo
PVNjcmlwdFN0YXRlXSBET01PYmplY3Qgc3RhdGU7CiAKICAgICAgICAgW0RvTm90Q2hlY2tEb21h
aW5TZWN1cml0eSwgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gdm9pZCBiYWNrKCk7
CiAgICAgICAgIFtEb05vdENoZWNrRG9tYWluU2VjdXJpdHksIENhbGxXaXRoPVNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRdIHZvaWQgZm9yd2FyZCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDQzNzAyOTFjMTVhOGM0NDdkYTRl
MzEzYjg5Zjc1Yzc0NTE0YjQ4OTQuLmY4NzAyY2FmZmUxNDcxMzU3Mjk4Y2VhYjJlZDdiNmYzYTIy
ZjIzYzUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMS0xNyAgUGFibG8gRmxvdXJldCAg
PHBhYmxvZkBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgQWRkIHN0YXRlIGF0dHJpYnV0ZSB0byBo
aXN0b3J5J3MgZG9tIGludGVyZmFjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc2MDM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvcHVzaHN0YXRlLXN0YXRl
LWF0dHJpYnV0ZS1vYmplY3QtdHlwZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvcHVzaHN0YXRlLXN0YXRlLWF0dHJpYnV0ZS1vYmplY3Qt
dHlwZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3B1
c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb25seS1vbmUtZGVzZXJpYWxpemF0aW9uLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3B1c2hzdGF0
ZS1zdGF0ZS1hdHRyaWJ1dGUtb25seS1vbmUtZGVzZXJpYWxpemF0aW9uLmh0bWw6IEFkZGVkLgor
CiAyMDEyLTAxLTE4ICBWc2V2b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IFVuc2FmZSBjcm9zcyBvcmlnaW4gYWNjZXNzIGVycm9ycyBz
aG91bGQgc2hvdyBzdGFjayB0cmFjZSBpbiBjb25zb2xlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb2Jq
ZWN0LXR5cGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2Jq
ZWN0cy9wdXNoc3RhdGUtc3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBlcy1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYzFhODdhNzhmYmM2ODkzZjBjNmUxZjk5NTg0Y2VkYjUzZWI4NjYxMQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNo
c3RhdGUtc3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBlcy1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwxNSBAQAorVGhpcyB0ZXN0IGNhbGxzIHB1c2hTdGF0ZSB3aXRoIHN0YXRlIG9iamVjdHMgb2Yg
YWxsIHRoZSBkaWZmZXJlbnQgb2JqZWN0IHR5cGVzIHN1cHBvcnRlZCBieSB0aGUgSFRNTDUgImlu
dGVybmFsIHN0cnVjdHVyZWQgY2xvbmluZyBhbGdvcml0aG0iIGFuZCBtYWtlcyBzdXJlIHRoZSBz
dGF0ZSBhdHRyaWJ1dGUgcmV0dXJucyB0aGUgZXhwZWN0ZWQgb2JqZWN0cy4KKworU3RhdGUgaXMg
aW5pdGlhbGx5IG51bGwgKHR5cGUgb2JqZWN0KQorU3RhdGUgcHVzaGVkIC0gdW5kZWZpbmVkICh0
eXBlIHVuZGVmaW5lZCkKK1N0YXRlIHB1c2hlZCAtIG51bGwgKHR5cGUgb2JqZWN0KQorU3RhdGUg
cHVzaGVkIC0gZmFsc2UgKHR5cGUgYm9vbGVhbikKK1N0YXRlIHB1c2hlZCAtIHRydWUgKHR5cGUg
Ym9vbGVhbikKK1N0YXRlIHB1c2hlZCAtIDQyICh0eXBlIG51bWJlcikKK1N0YXRlIHB1c2hlZCAt
IFN0cmluZyAodHlwZSBzdHJpbmcpCitTdGF0ZSBwdXNoZWQgLSAwICh0eXBlIG9iamVjdCkKK1N0
YXRlIHB1c2hlZCAtIC9mb28vZ2kgKHR5cGUgb2JqZWN0KQorU3RhdGUgcHVzaGVkIC0gICh0eXBl
IG9iamVjdCkKK1N0YXRlIHB1c2hlZCAtIFtvYmplY3QgT2JqZWN0XSAodHlwZSBvYmplY3QpCitT
dGF0ZSBwdXNoZWQgLSBbb2JqZWN0IEltYWdlRGF0YV0gKHR5cGUgb2JqZWN0KQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvcHVzaHN0YXRlLXN0YXRl
LWF0dHJpYnV0ZS1vYmplY3QtdHlwZXMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0
YXRlb2JqZWN0cy9wdXNoc3RhdGUtc3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBlcy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmYzNWEzZDc5MzM2MTc4YmMyYmM0YTAyZjJlMjg5OTAzZjRmOWIwNzQKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvcHVzaHN0
YXRlLXN0YXRlLWF0dHJpYnV0ZS1vYmplY3QtdHlwZXMuaHRtbApAQCAtMCwwICsxLDU3IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorCitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuY2xlYXJCYWNr
Rm9yd2FyZExpc3QoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cit9
CisKK2Z1bmN0aW9uIGxvZyh0eHQpCit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxv
Z2dlciIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHR4dCArICJcbiIpKTsK
K30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgbG9nKCJTdGF0ZSBpcyBpbml0aWFsbHkg
IiArIGhpc3Rvcnkuc3RhdGUgKyAiICh0eXBlICIgKyB0eXBlb2YgaGlzdG9yeS5zdGF0ZSArICIp
Iik7CisgICAgcHVzaEFuZFRlc3RTdGF0ZSh1bmRlZmluZWQsICJ1bmRlZmluZWQgZW50cnkiKTsK
KyAgICBwdXNoQW5kVGVzdFN0YXRlKG51bGwsICJudWxsIGVudHJ5Iik7CisgICAgcHVzaEFuZFRl
c3RTdGF0ZShmYWxzZSwgImZhbHNlIGVudHJ5Iik7CisgICAgcHVzaEFuZFRlc3RTdGF0ZSh0cnVl
LCAidHJ1ZSBlbnRyeSIpOworICAgIHB1c2hBbmRUZXN0U3RhdGUoNDIsICJOdW1iZXIgZW50cnki
KTsKKyAgICBwdXNoQW5kVGVzdFN0YXRlKCJTdHJpbmciLCAiU3RyaW5nIGVudHJ5Iik7CisgICAg
cHVzaEFuZFRlc3RTdGF0ZShuZXcgRGF0ZSgwKSwgIkRhdGUgZW50cnkiKTsKKyAgICBwdXNoQW5k
VGVzdFN0YXRlKG5ldyBSZWdFeHAoImZvbyIsICJnaSIpLCAiUmVnRXhwIGVudHJ5Iik7CisgICAg
cHVzaEFuZFRlc3RTdGF0ZShuZXcgQXJyYXksICJBcnJheSBlbnRyeSIpOworICAgIHB1c2hBbmRU
ZXN0U3RhdGUobmV3IE9iamVjdCwgIk9iamVjdCBlbnRyeSIpOworICAgIHB1c2hBbmRUZXN0U3Rh
dGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKS5jcmVh
dGVJbWFnZURhdGEoMTAsMTApLCAiSW1hZ2VEYXRhIGVudHJ5Iik7CisKKy8qIFRoZSBmb2xsb3dp
bmcgYXJlIG5vdCB5ZXQgd2VsbCBlbm91Z2ggc3VwcG9ydGVkIGluIFdlYktpdCB0byBtZWFuaW5n
ZnVsbHkgdGVzdCBoZXJlOgorICAgIGhpc3RvcnkucHVzaEFuZFN0YXRlKFtCbG9iXSwgIkJsb2Ig
ZW50cnkiKTsKKyAgICBoaXN0b3J5LnB1c2hBbmRTdGF0ZShbRmlsZV0sICJGaWxlIGVudHJ5Iik7
CisgICAgaGlzdG9yeS5wdXNoQW5kU3RhdGUoW0ZpbGVMaXN0XSwgIkZpbGVMaXN0IGVudHJ5Iik7
CisqLworfQorCitmdW5jdGlvbiBwdXNoQW5kVGVzdFN0YXRlKGRhdGEsIHRpdGxlKQoreworICAg
IGhpc3RvcnkucHVzaFN0YXRlKGRhdGEsIHRpdGxlKTsKKyAgICB2YXIgc3RhdGUgPSBoaXN0b3J5
LnN0YXRlOworCisgICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgRGF0ZSkKKyAgICAgICAgbG9nKCJT
dGF0ZSBwdXNoZWQgLSAiICsgc3RhdGUuZ2V0VGltZSgpICsgIiAodHlwZSAiICsgdHlwZW9mIHN0
YXRlICsgIikiKTsKKyAgICBlbHNlCisgICAgICAgIGxvZygiU3RhdGUgcHVzaGVkIC0gIiArIHN0
YXRlICsgIiAodHlwZSAiICsgdHlwZW9mIHN0YXRlICsgIikiKTsKK30KKworPC9zY3JpcHQ+Cis8
Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8cD4KK1RoaXMgdGVzdCBjYWxscyBwdXNoU3RhdGUg
d2l0aCBzdGF0ZSBvYmplY3RzIG9mIGFsbCB0aGUgZGlmZmVyZW50IG9iamVjdCB0eXBlcyBzdXBw
b3J0ZWQgYnkgdGhlCitIVE1MNSAiaW50ZXJuYWwgc3RydWN0dXJlZCBjbG9uaW5nIGFsZ29yaXRo
bSIgYW5kIG1ha2VzIHN1cmUgdGhlIHN0YXRlIGF0dHJpYnV0ZSByZXR1cm5zIHRoZSBleHBlY3Rl
ZCBvYmplY3RzLgorPC9wPgorPHByZSBpZD0ibG9nZ2VyIj48L3ByZT4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNo
c3RhdGUtc3RhdGUtYXR0cmlidXRlLW9ubHktb25lLWRlc2VyaWFsaXphdGlvbi1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvcHVzaHN0YXRlLXN0YXRl
LWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6YXRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjFmZDc1ZDdmYTA4MDU5NjZiNWNkOGViMzI5OWFkYmQzMDMxMDJlNzIKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvcHVzaHN0YXRlLXN0
YXRlLWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6YXRpb24tZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMTcgQEAKK01ha2Ugc3VyZSB0aGUgc2FtZSBkZXNlcmlhbGl6YXRpb24gb2YgdGhlIHN0
YXRlIG9iamVjdCBpcyB1c2VkIGV2ZXJ5IHRpbWUgKGJvdGggaW4gdGhlIGhpc3Rvcnkgb2JqZWN0
IGFuZCBwb3BzdGF0ZSBldmVudHMpLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
UEFTUyBoaXN0b3J5LnN0YXRlICE9PSBzdGF0ZU9iamVjdCBpcyB0cnVlCitQQVNTIGhpc3Rvcnku
c3RhdGUgPT09IHN0YXRlT2JqZWN0IGlzIHRydWUKKworSW5zaWRlIHBvcHN0YXRlIGV2ZW50CisK
K1BBU1MgaGlzdG9yeS5zdGF0ZSAhPT0gc3RhdGVPYmplY3QgaXMgdHJ1ZQorUEFTUyBldmVudC5z
dGF0ZSAhPT0gc3RhdGVPYmplY3QgaXMgdHJ1ZQorRkFJTCBldmVudC5zdGF0ZSA9PT0gaGlzdG9y
eS5zdGF0ZSBzaG91bGQgYmUgdHJ1ZS4gV2FzIGZhbHNlLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wdXNoc3RhdGUtc3RhdGUtYXR0cmlidXRlLW9ubHktb25l
LWRlc2VyaWFsaXphdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmpl
Y3RzL3B1c2hzdGF0ZS1zdGF0ZS1hdHRyaWJ1dGUtb25seS1vbmUtZGVzZXJpYWxpemF0aW9uLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNWViZWJjZjYzZTUyZGRiMDEwNWFmMjE3NGJlMzQ1NmQ1MzQwZmQ4NAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9w
dXNoc3RhdGUtc3RhdGUtYXR0cmlidXRlLW9ubHktb25lLWRlc2VyaWFsaXphdGlvbi5odG1sCkBA
IC0wLDAgKzEsNjAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2Ny
aXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwv
aGVhZC8+Cis8Ym9keT4KKzxwIGlkPWRlc2NyaXB0aW9uPgorPC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0PgorICAgIGRlc2NyaXB0aW9uKCJNYWtlIHN1cmUgdGhlIHNhbWUg
ZGVzZXJpYWxpemF0aW9uIG9mIHRoZSBzdGF0ZSBvYmplY3QgaXMgdXNlZCBldmVyeSB0aW1lIChi
b3RoIGluIHRoZSBoaXN0b3J5IG9iamVjdCBhbmQgcG9wc3RhdGUgZXZlbnRzKS4iKTsKKworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuY2xlYXJCYWNrRm9yd2FyZExpc3QoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7CisgICAgfQorCisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworCisg
ICAgLy8gQ3JlYXRlIGEgbmV3IG9iamVjdC4KKyAgICB2YXIgc3RhdGVPYmplY3QgPSBbImEiXTsK
KworICAgIC8vIFVzZSBpdCBhcyB0aGUgc3RhdGUgb2JqZWN0IGluIGEgcmVwbGFjZVN0YXRlLiAg
VGhpcyBjbG9uZXMgdGhlIG9iamVjdC4KKyAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShzdGF0ZU9i
amVjdCwgbnVsbCwgbnVsbCk7CisKKyAgICAvLyBTaW5jZSB0aGUgYWN0dWFsIGhpc3Rvcnkuc3Rh
dGUgaXMgYSBzdHJ1Y3R1cmVkIGNsb25lLCBpdCBzaG91bGQgbm90IG1hdGNoIG91ciBvcmlnaW5h
bCBvYmplY3QuCisgICAgc2hvdWxkQmVUcnVlKCJoaXN0b3J5LnN0YXRlICE9PSBzdGF0ZU9iamVj
dCIpOworCisgICAgLy8gTm93IGxldCdzIHJlZmV0Y2ggYSBjb3B5IG9mIGhpc3Rvcnkuc3RhdGUg
dG8gc3RvcmU7CisgICAgc3RhdGVPYmplY3QgPSBoaXN0b3J5LnN0YXRlOworCisgICAgLy8gT3Vy
IHJlZmVyZW5jZSBhbmQgdGhlIGhpc3Rvcnkuc3RhdGUgaXRzZWxmIHNob3VsZCBiZSB0aGUgc2Ft
ZS4gIFRoaXMgaXMgbm93IEFkYW0ncyBvcmlnaW5hbCBhc3NlcnRpb24uCisgICAgc2hvdWxkQmVU
cnVlKCJoaXN0b3J5LnN0YXRlID09PSBzdGF0ZU9iamVjdCIpOworCisgICAgLy8gTm93IGxldCdz
IGRvIGEgcHVzaHN0YXRlIHRvIGFkZCBhIGhpc3RvcnkgZW50cnkuCisgICAgaGlzdG9yeS5wdXNo
U3RhdGUobnVsbCwgbnVsbCwgbnVsbCk7CisKKyAgICAvLyBOb3cgYWRkIGEgaGFuZGxlciBmb3Ig
dGhlIHBvcHN0YXRlIGV2ZW50LgorICAgIHdpbmRvdy5vbnBvcHN0YXRlID0gZnVuY3Rpb24oZXZl
bnQpIHsKKyAgICAgICAgZGVidWcoIlxuSW5zaWRlIHBvcHN0YXRlIGV2ZW50XG4iKTsKKyAgICAg
ICAgLy8gT3VyIHN0b3JlZCByZWZlcmVuY2UgdG8gc3RhdGVPYmplY3Qgd2lsbCBub3QgbWF0Y2gg
dGhlIGN1cnJlbnQgc3RhdGUgb2JqZWN0LCBhcyBpdCBpcyBhIHN0cnVjdHVyZWQgY2xvbmUgb2Yg
dGhlIGhpc3RvcnkgaXRlbSdzIHN0YXRlIG9iamVjdC4KKyAgICAgICAgc2hvdWxkQmVUcnVlKCJo
aXN0b3J5LnN0YXRlICE9PSBzdGF0ZU9iamVjdCIpOworICAgICAgICAvLyBPdXIgc3RvcmVkIHJl
ZmVyZW5jZSB0byBzdGF0ZU9iamVjdCB3aWxsIG5vdCBtYXRjaCB0aGUgc3RhdGUgb2JqZWN0IGlu
IHRoaXMgcG9wIHN0YXRlIGV2ZW50LCBhcyBpdCBpcyB0aGUgc2FtZSBhcyBoaXN0b3J5LnN0YXRl
IHdoaWNoIGlzIGEgc3RydWN0dXJlZCBjbG9uZSBvZiB0aGUgaGlzdG9yeSBpdGVtJ3Mgc3RhdGUg
b2JqZWN0LgorICAgICAgICBzaG91bGRCZVRydWUoImV2ZW50LnN0YXRlICE9PSBzdGF0ZU9iamVj
dCIpOworICAgICAgICAvLyBUaGUgZXZlbnQncyBzdGF0ZSBvYmplY3QgYW5kIHRoZSBjdXJyZW50
IHN0YXRlIG9iamVjdCBzaG91bGQgbWF0Y2guCisgICAgICAgIHNob3VsZEJlVHJ1ZSgiZXZlbnQu
c3RhdGUgPT09IGhpc3Rvcnkuc3RhdGUiKTsgLy8gVGhpcyBmYWlscyBmb3Igbm93LCBuZWVkcyB0
byBiZSBmaXhlZC4KKworICAgICAgICB2YXIgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNj
cmlwdCIpOworICAgICAgICBzLnNyYyA9ICIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIjsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzKTsKKyAgICAgICAgc2V0
VGltZW91dChmaW5pc2hKU1Rlc3QsIDApOworICAgIH0KKworICAgIC8vIE5vdyBsZXQncyBnbyBi
YWNrIHRvIG91ciBvcmlnaW5hbCBoaXN0b3J5IGVudHJ5IHdoaWNoIGhhcyBhIHN0YXRlIG9iamVj
dCB0aGF0IHdlJ3ZlIHN0b3JlZCBhIHJlZmVyZW5jZSB0byBhbHJlYWR5LgorICAgIC8vIFRoaXMg
d2lsbCBmaXJlIG91ciBwb3BzdGF0ZSBldmVudCBoYW5kbGVyIGFib3ZlLgorICAgIGhpc3Rvcnku
YmFjaygpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124811</attachid>
            <date>2012-01-31 13:31:11 -0800</date>
            <delta_ts>2012-01-31 17:10:48 -0800</delta_ts>
            <desc>First attempt at a full proper solution</desc>
            <filename>bug-76035-20120131133110.patch</filename>
            <type>text/plain</type>
            <size>31861</size>
            <attacher name="Pablo Flouret">pf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1OTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTRhZWViMjMzYmY0YTE0
MjViN2FmNzZiZWJkZWVhMzRmZDVmMWNlNS4uNTAxZGE3MDVkYTVlMjAyMWVmMzFjMzYwMDkwYTcz
NTZjZDI0ZWIyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTAxLTMxICBQYWJs
byBGbG91cmV0ICA8cGFibG9mQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBBZGQgc3RhdGUgYXR0
cmlidXRlIHRvIGhpc3RvcnkncyBkb20gaW50ZXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUYWtlIHNwZWNpYWwgY2FyZSB0aGF0IG9ubHkgb25l
IGRlc2VyaWFsaXphdGlvbiBvZiBlYWNoIHN0YXRlIG9iamVjdCBpcworICAgICAgICB1c2VkIChp
bmNsdWRpbmcgaW4gdGhlIFBvcFN0YXRlRXZlbnRzKS4KKworICAgICAgICBUZXN0czogZmFzdC9s
b2FkZXIvc3RhdGVvYmplY3RzL3N0YXRlLWF0dHJpYnV0ZS1vYmplY3QtdHlwZXMuaHRtbAorICAg
ICAgICAgICAgICAgZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3N0YXRlLWF0dHJpYnV0ZS1vbmx5
LW9uZS1kZXNlcmlhbGl6YXRpb24uaHRtbAorCisgICAgICAgICogYmluZGluZ3MvanMvSlNIaXN0
b3J5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSGlzdG9yeTo6c3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0hpc3Rvcnk6OnB1c2hTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU0hpc3Rvcnk6OnJlcGxhY2VTdGF0ZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTUG9wU3RhdGVFdmVudDo6c3RhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OEhpc3RvcnlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhIaXN0b3J5OjpzdGF0ZUFj
Y2Vzc29yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhI
aXN0b3J5OjpwdXNoU3RhdGVDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOEhpc3Rvcnk6
OnJlcGxhY2VTdGF0ZUNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhQ
b3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4UG9wU3RhdGVFdmVu
dDo6c3RhdGVBY2Nlc3NvckdldHRlcik6CisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjppbXBsaWNpdENsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpz
dGF0ZVBvcHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZW5xdWV1ZVBvcHN0YXRl
RXZlbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoRG9jdW1lbnQpOgor
CisgICAgICAgIFBvcFN0YXRlRXZlbnQgdGFrZXMgYSBIaXN0b3J5IG9iamVjdCBub3cgaW5zdGVh
ZCBvZiB0aGUgc3RhdGUgb2JqZWN0IGluCisgICAgICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBm
b3JtLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gcGFzcyBhcm91bmQgdGhlCisgICAgICAgIHN0YXRl
T2JqZWN0IGluIHRoZSBtZXRob2RzIHRoYXQgbGVhZCB0byB0aGUgZGlzcGF0Y2ggb2YgdGhlIGV2
ZW50LiBUaGUKKyAgICAgICAgY3VycmVudCBoaXN0b3J5IGl0ZW0gaW4gdGhlIGRvbSB3aW5kb3cg
aXMgdXNlZCBkaXJlY3RseS4KKworICAgICAgICAqIGRvbS9Qb3BTdGF0ZUV2ZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBvcFN0YXRlRXZlbnQ6OlBvcFN0YXRlRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UG9wU3RhdGVFdmVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBkb20vUG9wU3RhdGVF
dmVudC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChQb3BTdGF0ZUV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBvcFN0YXRlRXZlbnQ6Omhpc3RvcnkpOgorICAgICAgICAqIGRvbS9Q
b3BTdGF0ZUV2ZW50LmlkbDoKKworICAgICAgICAqIGhpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkRnJhbWVCYXNlOjpyZXN0b3JlKToKKyAgICAgICAgKiBs
b2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OkZy
YW1lTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkaWRCZWdpbkRvY3Vt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpsb2FkSW5TYW1lRG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZCk6
CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmg6CisgICAgICAgIChGcmFtZUxvYWRlcik6
CisKKyAgICAgICAgU2FtZSBjb21tZW50IGZyb20gdGhlIERvY3VtZW50IGNoYW5nZXMgYXBwbGll
cy4KKworICAgICAgICAqIHBhZ2UvSGlzdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXN0
b3J5OjpIaXN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3Rvcnk6OnN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeTo6c3RhdGVJbnRlcm5hbCk6
CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5OjpzdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIHBh
Z2UvSGlzdG9yeS5oOgorICAgICAgICAoSGlzdG9yeSk6CisgICAgICAgICgpOgorICAgICAgICAq
IHBhZ2UvSGlzdG9yeS5pZGw6CisKIDIwMTItMDEtMjYgIFBhYmxvIEZsb3VyZXQgIDxwYWJsb2ZA
bW90b3JvbGEuY29tPgogCiAgICAgICAgIEZpeCBiYWQgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIEpT
QyBpZGwgY29kZSBnZW5lcmF0b3IgZm9yIFtDYWNoZWRBdHRyaWJ1dGVdIGF0dHJpYnV0ZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCmluZGV4IDcy
ZWE1NDI0YzdjMTJmM2E2NzJiYzdkNzM5ZTExZGVkZmI0ODE4YzcuLmUxMWI5NTcxZGJkNmJjZjE5
M2U4ZmEzZjg4ZWI3NzNmNWQzNmRjMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIaXN0b3J5Q3VzdG9tLmNwcApAQCAtMTY0LDYgKzE2NCwyMCBAQCB2b2lkIEpTSGlzdG9y
eTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TgogICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKK0pTVmFsdWUgSlNIaXN0b3J5OjpzdGF0ZShF
eGVjU3RhdGUgKmV4ZWMpIGNvbnN0Cit7CisgICAgSGlzdG9yeSogaGlzdG9yeSA9IHN0YXRpY19j
YXN0PEhpc3RvcnkqPihpbXBsKCkpOworCisgICAgSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IG1fc3Rh
dGUuZ2V0KCk7CisgICAgaWYgKCFjYWNoZWRWYWx1ZS5pc0VtcHR5KCkgJiYgIWhpc3RvcnktPnN0
YXRlQ2hhbmdlZCgpKQorICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7CisKKyAgICBTZXJpYWxp
emVkU2NyaXB0VmFsdWUqIHNlcmlhbGl6ZWQgPSBoaXN0b3J5LT5zdGF0ZSgpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gc2VyaWFsaXplZCA/IHNlcmlhbGl6ZWQtPmRlc2VyaWFsaXplKGV4ZWMsIGds
b2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOworICAgIGNvbnN0X2Nhc3Q8SlNIaXN0b3J5Kj4o
dGhpcyktPm1fc3RhdGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgcmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCiBKU1ZhbHVlIEpTSGlzdG9yeTo6cHVzaFN0YXRlKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBoaXN0b3J5
U3RhdGUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBleGVjLT5hcmd1bWVu
dCgwKSwgMCk7CkBAIC0xODUsNiArMTk5LDggQEAgSlNWYWx1ZSBKU0hpc3Rvcnk6OnB1c2hTdGF0
ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaW1wbCgpLT5zdGF0ZU9iamVjdEFkZGVkKGhpc3RvcnlT
dGF0ZS5yZWxlYXNlKCksIHRpdGxlLCB1cmwsIEhpc3Rvcnk6OlN0YXRlT2JqZWN0UHVzaCwgZWMp
OwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAKKyAgICBtX3N0YXRlLmNsZWFyKCk7
CisKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApAQCAtMjA5LDYgKzIyNSw4IEBAIEpT
VmFsdWUgSlNIaXN0b3J5OjpyZXBsYWNlU3RhdGUoRXhlY1N0YXRlKiBleGVjKQogICAgIGltcGwo
KS0+c3RhdGVPYmplY3RBZGRlZChoaXN0b3J5U3RhdGUucmVsZWFzZSgpLCB0aXRsZSwgdXJsLCBI
aXN0b3J5OjpTdGF0ZU9iamVjdFJlcGxhY2UsIGVjKTsKICAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpOwogCisgICAgbV9zdGF0ZS5jbGVhcigpOworCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3Rh
dGVFdmVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRl
RXZlbnRDdXN0b20uY3BwCmluZGV4IDM4ZWRmYjY4ZGQ2MWY2OTEyODAzOTgwNDg2N2M1ZDE2MDk1
N2EyYTEuLjBjZDQ4YjAxM2VkYTViM2I1NGFmZGFlMTNmYzJjYmI0NWU4ODhhNjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3RvbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNw
cApAQCAtMzAsNiArMzAsOCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpbmNsdWRlICJI
aXN0b3J5LmgiCisjaW5jbHVkZSAiSlNIaXN0b3J5LmgiCiAjaW5jbHVkZSAiSlNQb3BTdGF0ZUV2
ZW50LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBAIC0zOSwxMiArNDEsMTEgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogSlNWYWx1ZSBKU1BvcFN0YXRlRXZlbnQ6OnN0YXRlKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKIHsKICAgICBQb3BTdGF0ZUV2ZW50KiBldmVudCA9IHN0YXRpY19jYXN0PFBv
cFN0YXRlRXZlbnQqPihpbXBsKCkpOwotICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc2VyaWFs
aXplZFN0YXRlID0gZXZlbnQtPnNlcmlhbGl6ZWRTdGF0ZSgpOwotICAgIGlmIChzZXJpYWxpemVk
U3RhdGUpCi0gICAgICAgIHJldHVybiBzZXJpYWxpemVkU3RhdGUtPmRlc2VyaWFsaXplKGV4ZWMs
IGdsb2JhbE9iamVjdCgpLCAwKTsKLSAgICBpZiAoIWV2ZW50LT5zdGF0ZSgpLmhhc05vVmFsdWUo
KSkKLSAgICAgICAgcmV0dXJuIGV2ZW50LT5zdGF0ZSgpLmpzVmFsdWUoKTsKLSAgICByZXR1cm4g
anNOdWxsKCk7CisgICAgSGlzdG9yeSogaGlzdG9yeSA9IGV2ZW50LT5oaXN0b3J5KCk7CisgICAg
aWYgKCFoaXN0b3J5KQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgSlNIaXN0b3J5KiBq
c0hpc3RvcnkgPSBzdGF0aWNfY2FzdDxKU0hpc3RvcnkqPih0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCgpLCBoaXN0b3J5KS5hc0NlbGwoKSk7CisgICAgcmV0dXJuIGpzSGlzdG9yeS0+Z2V0KGV4ZWMs
IElkZW50aWZpZXIoZXhlYywgInN0YXRlIikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIaXN0b3J5
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhpc3RvcnlD
dXN0b20uY3BwCmluZGV4IDg5NTYxMDkwY2ExNDlkYmQxZWY3MDM2YTkxY2QzYTlhN2VmYmE2OGIu
LmExYmQ3NmIyYWJlNDA2M2VlYTdjNjVjYzc3ZTZhN2QwOTMyMzlmYmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhpc3RvcnlDdXN0b20uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhpc3RvcnlDdXN0b20uY3BwCkBA
IC00MSw2ICs0MSwyNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3Y4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOEhpc3Rvcnk6OnN0YXRlQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRT
KCJET00uSGlzdG9yeS5zdGF0ZSIpOworICAgIEhpc3RvcnkqIGhpc3RvcnkgPSBWOEhpc3Rvcnk6
OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworCisgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBw
cm9wZXJ0eU5hbWUgPSB2ODo6U3RyaW5nOjpOZXdTeW1ib2woInN0YXRlIik7CisgICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHZhbHVlID0gaW5mby5Ib2xkZXIoKS0+R2V0SGlkZGVuVmFsdWUocHJv
cGVydHlOYW1lKTsKKworICAgIGlmICghdmFsdWUuSXNFbXB0eSgpICYmICFoaXN0b3J5LT5zdGF0
ZUNoYW5nZWQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgU2VyaWFsaXplZFNjcmlw
dFZhbHVlKiBzZXJpYWxpemVkID0gaGlzdG9yeS0+c3RhdGUoKTsKKyAgICB2YWx1ZSA9IHNlcmlh
bGl6ZWQgPyBzZXJpYWxpemVkLT5kZXNlcmlhbGl6ZSgpIDogdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KHY4OjpOdWxsKCkpOworICAgIGluZm8uSG9sZGVyKCktPlNldEhpZGRlblZhbHVlKHByb3BlcnR5
TmFtZSwgdmFsdWUpOworCisgICAgcmV0dXJuIHZhbHVlOworfQorCiB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhIaXN0b3J5OjpwdXNoU3RhdGVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBh
cmdzKQogewogICAgIGJvb2wgZGlkVGhyb3cgPSBmYWxzZTsKQEAgLTYyLDYgKzgwLDcgQEAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4SGlzdG9yeTo6cHVzaFN0YXRlQ2FsbGJhY2soY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncykKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBIaXN0b3J5
KiBoaXN0b3J5ID0gVjhIaXN0b3J5Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBoaXN0
b3J5LT5zdGF0ZU9iamVjdEFkZGVkKGhpc3RvcnlTdGF0ZS5yZWxlYXNlKCksIHRpdGxlLCB1cmws
IEhpc3Rvcnk6OlN0YXRlT2JqZWN0UHVzaCwgZWMpOworICAgIGFyZ3MuSG9sZGVyKCktPkRlbGV0
ZUhpZGRlblZhbHVlKHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgic3RhdGUiKSk7CiAgICAgcmV0dXJu
IHRocm93RXJyb3IoZWMpOwogfQogCkBAIC04Niw2ICsxMDUsNyBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhIaXN0b3J5OjpyZXBsYWNlU3RhdGVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIEhpc3RvcnkqIGhpc3Rvcnkg
PSBWOEhpc3Rvcnk6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIGhpc3RvcnktPnN0YXRl
T2JqZWN0QWRkZWQoaGlzdG9yeVN0YXRlLnJlbGVhc2UoKSwgdGl0bGUsIHVybCwgSGlzdG9yeTo6
U3RhdGVPYmplY3RSZXBsYWNlLCBlYyk7CisgICAgYXJncy5Ib2xkZXIoKS0+RGVsZXRlSGlkZGVu
VmFsdWUodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJzdGF0ZSIpKTsKICAgICByZXR1cm4gdGhyb3dF
cnJvcihlYyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFBvcFN0YXRlRXZlbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4UG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKaW5kZXggNTdjZTIzOGZlZTQyZTBh
NmIyMDNhZGZlMjQwYWY4OWY0YjU5N2ZmNy4uNGY5ZDJmYTg5NzgyZWZiNjI2ZDE1MDA3MWIwMDNl
Mjc5MGM2NjVjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4UG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4UG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKQEAgLTMxLDggKzMxLDEwIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVjhQb3BTdGF0ZUV2ZW50LmgiCiAKKyNpbmNs
dWRlICJIaXN0b3J5LmgiCiAjaW5jbHVkZSAiUG9wU3RhdGVFdmVudC5oIgogI2luY2x1ZGUgIlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgIlY4SGlzdG9yeS5oIgogI2luY2x1ZGUg
IlY4UHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDIsMTIgKzQ0LDExIEBAIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOFBvcFN0YXRlRXZlbnQ6OnN0YXRlQWNjZXNzb3JHZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+CiAgICAgSU5DX1NUQVRTKCJET00uUG9wU3RhdGVFdmVudC5z
dGF0ZSIpOwogCiAgICAgUG9wU3RhdGVFdmVudCogZXZlbnQgPSBWOFBvcFN0YXRlRXZlbnQ6OnRv
TmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc2VyaWFs
aXplZFN0YXRlID0gZXZlbnQtPnNlcmlhbGl6ZWRTdGF0ZSgpOwotICAgIGlmIChzZXJpYWxpemVk
U3RhdGUpCi0gICAgICAgIHJldHVybiBzZXJpYWxpemVkU3RhdGUtPmRlc2VyaWFsaXplKCk7Ci0g
ICAgaWYgKCFldmVudC0+c3RhdGUoKS5oYXNOb1ZhbHVlKCkpCi0gICAgICAgIHJldHVybiBldmVu
dC0+c3RhdGUoKS52OFZhbHVlKCk7Ci0gICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgSGlzdG9y
eSogaGlzdG9yeSA9IGV2ZW50LT5oaXN0b3J5KCk7CisgICAgaWYgKCFoaXN0b3J5KQorICAgICAg
ICByZXR1cm4gdjg6Ok51bGwoKTsKKworICAgIHJldHVybiB0b1Y4KGhpc3RvcnkpLkFzPHY4OjpP
YmplY3Q+KCktPkdldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woInN0YXRlIikpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAzYWJiM2FkYTli
Y2I1MWYwMWYwMjQ3NWE4MTkxNjczYmRlYThhMWExLi4yOWZmMjEzYmYwNDM3YmIyNTA5YjY1MjFm
MmE2NDQ2YmNmOGZmY2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTc4LDYgKzc4LDcg
QEAKICNpbmNsdWRlICJHZW9sb2NhdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJIYXNoQ2hh
bmdlRXZlbnQuaCIKICNpbmNsdWRlICJIaXN0b2dyYW1TdXBwb3J0LmgiCisjaW5jbHVkZSAiSGlz
dG9yeS5oIgogI2luY2x1ZGUgIkhUTUxBbGxDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEFu
Y2hvckVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKQEAgLTM5Myw2ICsz
OTQsNyBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmws
IGJvb2wgaXNYSFRNTCwgYm9vbCBpc0hUTUwpCiAgICAgLCBtX3RpdGxlU2V0RXhwbGljaXRseShm
YWxzZSkKICAgICAsIG1fdXBkYXRlRm9jdXNBcHBlYXJhbmNlVGltZXIodGhpcywgJkRvY3VtZW50
Ojp1cGRhdGVGb2N1c0FwcGVhcmFuY2VUaW1lckZpcmVkKQogICAgICwgbV9sb2FkRXZlbnRGaW5p
c2hlZChmYWxzZSkKKyAgICAsIG1fc2hvdWxkRW5xdWV1ZVBvcFN0YXRlRXZlbnQoZmFsc2UpCiAg
ICAgLCBtX3N0YXJ0VGltZShjdXJyZW50VGltZSgpKQogICAgICwgbV9vdmVyTWluaW11bUxheW91
dFRocmVzaG9sZChmYWxzZSkKICAgICAsIG1fc2NyaXB0UnVubmVyKFNjcmlwdFJ1bm5lcjo6Y3Jl
YXRlKHRoaXMpKQpAQCAtMjI0NCw3ICsyMjQ2LDggQEAgdm9pZCBEb2N1bWVudDo6aW1wbGljaXRD
bG9zZSgpCiAgICAgSW1hZ2VMb2FkZXI6OmRpc3BhdGNoUGVuZGluZ0xvYWRFdmVudHMoKTsKICAg
ICBkaXNwYXRjaFdpbmRvd0xvYWRFdmVudCgpOwogICAgIGVucXVldWVQYWdlc2hvd0V2ZW50KFBh
Z2VzaG93RXZlbnROb3RQZXJzaXN0ZWQpOwotICAgIGVucXVldWVQb3BzdGF0ZUV2ZW50KG1fcGVu
ZGluZ1N0YXRlT2JqZWN0ID8gbV9wZW5kaW5nU3RhdGVPYmplY3QucmVsZWFzZSgpIDogU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7CisgICAgZW5xdWV1ZVBvcHN0YXRlRXZlbnQo
KTsKKyAgICBtX3Nob3VsZEVucXVldWVQb3BTdGF0ZUV2ZW50ID0gZmFsc2U7CiAgICAgCiAgICAg
aWYgKGYpCiAgICAgICAgIGYtPmxvYWRlcigpLT5oYW5kbGVkT25sb2FkRXZlbnRzKCk7CkBAIC00
NzQ2LDcgKzQ3NDksNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVVUkxGb3JQdXNoT3JSZXBsYWNl
U3RhdGUoY29uc3QgS1VSTCYgdXJsKQogICAgICAgICBkb2N1bWVudExvYWRlci0+cmVwbGFjZVJl
cXVlc3RVUkxGb3JTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKHVybCk7CiB9CiAKLXZvaWQgRG9jdW1l
bnQ6OnN0YXRlUG9wcGVkKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc3RhdGVPYmplY3QpCit2b2lk
IERvY3VtZW50OjpzdGF0ZVBvcHBlZCgpCiB7CiAgICAgaWYgKCFmcmFtZSgpKQogICAgICAgICBy
ZXR1cm47CkBAIC00NzU0LDkgKzQ3NTcsOSBAQCB2b2lkIERvY3VtZW50OjpzdGF0ZVBvcHBlZChT
ZXJpYWxpemVkU2NyaXB0VmFsdWUqIHN0YXRlT2JqZWN0KQogICAgIC8vIFBlciBzdGVwIDExIG9m
IHNlY3Rpb24gNi41LjkgKGhpc3RvcnkgdHJhdmVyc2FsKSBvZiB0aGUgSFRNTDUgc3BlYywgd2Ug
CiAgICAgLy8gZGVmZXIgZmlyaW5nIG9mIHBvcHN0YXRlIHVudGlsIHdlJ3JlIGluIHRoZSBjb21w
bGV0ZSBzdGF0ZS4KICAgICBpZiAobV9yZWFkeVN0YXRlID09IENvbXBsZXRlKQotICAgICAgICBl
bnF1ZXVlUG9wc3RhdGVFdmVudChzdGF0ZU9iamVjdCk7CisgICAgICAgIGVucXVldWVQb3BzdGF0
ZUV2ZW50KCk7CiAgICAgZWxzZQotICAgICAgICBtX3BlbmRpbmdTdGF0ZU9iamVjdCA9IHN0YXRl
T2JqZWN0OworICAgICAgICBtX3Nob3VsZEVucXVldWVQb3BTdGF0ZUV2ZW50ID0gdHJ1ZTsKIH0K
IAogdm9pZCBEb2N1bWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlU29vbihib29sIHJlc3RvcmVQ
cmV2aW91c1NlbGVjdGlvbikKQEAgLTQ5ODQsMTAgKzQ5ODcsMTAgQEAgdm9pZCBEb2N1bWVudDo6
ZW5xdWV1ZUhhc2hjaGFuZ2VFdmVudChjb25zdCBTdHJpbmcmIG9sZFVSTCwgY29uc3QgU3RyaW5n
JiBuZXdVUkwKICAgICBlbnF1ZXVlV2luZG93RXZlbnQoSGFzaENoYW5nZUV2ZW50OjpjcmVhdGUo
b2xkVVJMLCBuZXdVUkwpKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6ZW5xdWV1ZVBvcHN0YXRlRXZl
bnQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHN0YXRlT2JqZWN0KQordm9pZCBE
b2N1bWVudDo6ZW5xdWV1ZVBvcHN0YXRlRXZlbnQoKQogewogICAgIC8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzYyMDIgUG9wc3RhdGUgZXZlbnQgbmVl
ZHMgdG8gZmlyZSBhc3luY2hyb25vdXNseQotICAgIGRpc3BhdGNoV2luZG93RXZlbnQoUG9wU3Rh
dGVFdmVudDo6Y3JlYXRlKHN0YXRlT2JqZWN0KSk7CisgICAgZGlzcGF0Y2hXaW5kb3dFdmVudChQ
b3BTdGF0ZUV2ZW50OjpjcmVhdGUoZG9tV2luZG93KCkgPyBkb21XaW5kb3coKS0+aGlzdG9yeSgp
IDogMCkpOwogfQogCiB2b2lkIERvY3VtZW50OjphZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoTWVk
aWFDYW5TdGFydExpc3RlbmVyKiBsaXN0ZW5lcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggZmRi
Mzk4ODc1ZjUxNGRmZmM0YzcwMzk3MjFiMWE3NTc0N2NiYjk3Yi4uNzM1NWVmYmNiMWVjODQyOTFj
YjAxYzFhYWRhNjc3NTUwMjAxMjYwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTEwMTUsNyAr
MTAxNSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFNlY3VyaXR5T3JpZ2luKFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+KTsKIAogICAgIHZvaWQgdXBkYXRlVVJMRm9yUHVzaE9yUmVwbGFjZVN0
YXRlKGNvbnN0IEtVUkwmKTsKLSAgICB2b2lkIHN0YXRlUG9wcGVkKFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSopOworICAgIHZvaWQgc3RhdGVQb3BwZWQoKTsKIAogICAgIGJvb2wgcHJvY2Vzc2luZ0xv
YWRFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc2luZ0xvYWRFdmVudDsgfQogICAgIGJv
b2wgbG9hZEV2ZW50RmluaXNoZWQoKSBjb25zdCB7IHJldHVybiBtX2xvYWRFdmVudEZpbmlzaGVk
OyB9CkBAIC0xMDM4LDcgKzEwMzgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbnF1ZXVlRG9jdW1l
bnRFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CiAgICAgdm9pZCBlbnF1ZXVlUGFnZXNob3dFdmVu
dChQYWdlc2hvd0V2ZW50UGVyc2lzdGVuY2UpOwogICAgIHZvaWQgZW5xdWV1ZUhhc2hjaGFuZ2VF
dmVudChjb25zdCBTdHJpbmcmIG9sZFVSTCwgY29uc3QgU3RyaW5nJiBuZXdVUkwpOwotICAgIHZv
aWQgZW5xdWV1ZVBvcHN0YXRlRXZlbnQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHN0YXRlT2JqZWN0KTsKKyAgICB2b2lkIGVucXVldWVQb3BzdGF0ZUV2ZW50KCk7CiAgICAgdmly
dHVhbCBEb2N1bWVudEV2ZW50UXVldWUqIGV2ZW50UXVldWUoKSBjb25zdCB7IHJldHVybiBtX2V2
ZW50UXVldWUuZ2V0KCk7IH0KIAogICAgIHZvaWQgYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKE1l
ZGlhQ2FuU3RhcnRMaXN0ZW5lciopOwpAQCAtMTMzOCw3ICsxMzM4LDggQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fcHJvY2Vzc2luZ0xvYWRFdmVudDsKICAgICBib29sIG1fbG9hZEV2ZW50RmluaXNo
ZWQ7CiAKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtX3BlbmRpbmdTdGF0ZU9i
amVjdDsKKyAgICBib29sIG1fc2hvdWxkRW5xdWV1ZVBvcFN0YXRlRXZlbnQ7CisKICAgICBkb3Vi
bGUgbV9zdGFydFRpbWU7CiAgICAgYm9vbCBtX292ZXJNaW5pbXVtTGF5b3V0VGhyZXNob2xkOwog
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwCmluZGV4IDhkMGNiNzI5MjQ5ZjVj
MmVmZGY5ZDJmYjIxY2VhMjRlMTY3ZjhiYmYuLjUyYmM5NjgzYTNkOTM5MDk4ZjBlNjBjZjZiNjEz
YjhiNmUxYWM0ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5jcHAKQEAgLTI4LDM2
ICsyOCwxOSBAQAogI2luY2x1ZGUgIlBvcFN0YXRlRXZlbnQuaCIKIAogI2luY2x1ZGUgIkV2ZW50
TmFtZXMuaCIKKyNpbmNsdWRlICJIaXN0b3J5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
UG9wU3RhdGVFdmVudEluaXQ6OlBvcFN0YXRlRXZlbnRJbml0KCkKLXsKLX0KLQogUG9wU3RhdGVF
dmVudDo6UG9wU3RhdGVFdmVudCgpCiAgICAgOiBFdmVudChldmVudE5hbWVzKCkucG9wc3RhdGVF
dmVudCwgZmFsc2UsIHRydWUpCi0gICAgLCBtX3NlcmlhbGl6ZWRTdGF0ZSgwKQotewotfQotCi1Q
b3BTdGF0ZUV2ZW50OjpQb3BTdGF0ZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29u
c3QgUG9wU3RhdGVFdmVudEluaXQmIGluaXRpYWxpemVyKQotICAgIDogRXZlbnQodHlwZSwgaW5p
dGlhbGl6ZXIpCi0gICAgLCBtX3N0YXRlKGluaXRpYWxpemVyLnN0YXRlKQotICAgICwgbV9zZXJp
YWxpemVkU3RhdGUoMCkKLXsKLX0KLQotUG9wU3RhdGVFdmVudDo6UG9wU3RhdGVFdmVudChjb25z
dCBTY3JpcHRWYWx1ZSYgc3RhdGUpCi0gICAgOiBFdmVudChldmVudE5hbWVzKCkucG9wc3RhdGVF
dmVudCwgZmFsc2UsIHRydWUpCi0gICAgLCBtX3N0YXRlKHN0YXRlKQotICAgICwgbV9zZXJpYWxp
emVkU3RhdGUoMCkKKyAgICAsIG1faGlzdG9yeSgwKQogewogfQogCi1Qb3BTdGF0ZUV2ZW50OjpQ
b3BTdGF0ZUV2ZW50KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVk
U3RhdGUpCitQb3BTdGF0ZUV2ZW50OjpQb3BTdGF0ZUV2ZW50KFBhc3NSZWZQdHI8SGlzdG9yeT4g
aGlzdG9yeSkKICAgICA6IEV2ZW50KGV2ZW50TmFtZXMoKS5wb3BzdGF0ZUV2ZW50LCBmYWxzZSwg
dHJ1ZSkKLSAgICAsIG1fc2VyaWFsaXplZFN0YXRlKHNlcmlhbGl6ZWRTdGF0ZSkKKyAgICAsIG1f
aGlzdG9yeShoaXN0b3J5KQogewogfQogCkBAIC03MCwxOSArNTMsOSBAQCBQYXNzUmVmUHRyPFBv
cFN0YXRlRXZlbnQ+IFBvcFN0YXRlRXZlbnQ6OmNyZWF0ZSgpCiAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBQb3BTdGF0ZUV2ZW50KTsKIH0KIAotUGFzc1JlZlB0cjxQb3BTdGF0ZUV2ZW50PiBQb3BT
dGF0ZUV2ZW50OjpjcmVhdGUoY29uc3QgU2NyaXB0VmFsdWUmIHN0YXRlKQotewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgUG9wU3RhdGVFdmVudChzdGF0ZSkpOwotfQotCi1QYXNzUmVmUHRyPFBv
cFN0YXRlRXZlbnQ+IFBvcFN0YXRlRXZlbnQ6OmNyZWF0ZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gc2VyaWFsaXplZFN0YXRlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
UG9wU3RhdGVFdmVudChzZXJpYWxpemVkU3RhdGUpKTsKLX0KLQotUGFzc1JlZlB0cjxQb3BTdGF0
ZUV2ZW50PiBQb3BTdGF0ZUV2ZW50OjpjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBj
b25zdCBQb3BTdGF0ZUV2ZW50SW5pdCYgaW5pdGlhbGl6ZXIpCitQYXNzUmVmUHRyPFBvcFN0YXRl
RXZlbnQ+IFBvcFN0YXRlRXZlbnQ6OmNyZWF0ZShQYXNzUmVmUHRyPEhpc3Rvcnk+IGhpc3Rvcnkp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQb3BTdGF0ZUV2ZW50KHR5cGUsIGluaXRpYWxp
emVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQb3BTdGF0ZUV2ZW50KGhpc3RvcnkpKTsK
IH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBQb3BTdGF0ZUV2ZW50OjppbnRlcmZhY2VOYW1lKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5oCmluZGV4IDUxMjVmYzFjYThhMDhlNDA4
NDliMTI4YTdhZWZhMTg3NTNmZjMwYmIuLjEzMjgwMGZhOTZkZjU0ZjgzNjhmNTEyZDNjNjJiZmIy
ZDgxMWVjZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaApAQCAtMjgsMzggKzI4LDI2
IEBACiAjZGVmaW5lIFBvcFN0YXRlRXZlbnRfaAogCiAjaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNs
dWRlICJTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBQb3BTdGF0ZUV2ZW50SW5pdCA6IHB1Ymxp
YyBFdmVudEluaXQgewotICAgIFBvcFN0YXRlRXZlbnRJbml0KCk7Ci0KLSAgICBTY3JpcHRWYWx1
ZSBzdGF0ZTsKLX07CitjbGFzcyBIaXN0b3J5OwogCiBjbGFzcyBQb3BTdGF0ZUV2ZW50IDogcHVi
bGljIEV2ZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Qb3BTdGF0ZUV2ZW50KCk7CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8UG9wU3RhdGVFdmVudD4gY3JlYXRlKCk7Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8UG9wU3RhdGVFdmVudD4gY3JlYXRlKGNvbnN0IFNjcmlwdFZhbHVlJik7Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8UG9wU3RhdGVFdmVudD4gY3JlYXRlKFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UG9wU3RhdGVFdmVudD4g
Y3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IFBvcFN0YXRlRXZlbnRJbml0Jik7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8UG9wU3RhdGVFdmVudD4gY3JlYXRlKFBhc3NSZWZQdHI8SGlz
dG9yeT4pOwogCi0gICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBzZXJpYWxpemVkU3RhdGUoKSBj
b25zdCB7IHJldHVybiBtX3NlcmlhbGl6ZWRTdGF0ZS5nZXQoKTsgfQotICAgIFNjcmlwdFZhbHVl
IHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIEhpc3RvcnkqIGhpc3Rvcnko
KSBjb25zdCB7IHJldHVybiBtX2hpc3RvcnkuZ2V0KCk7IH0KIAogICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgUG9w
U3RhdGVFdmVudCgpOwotICAgIFBvcFN0YXRlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiwgY29u
c3QgUG9wU3RhdGVFdmVudEluaXQmKTsKLSAgICBleHBsaWNpdCBQb3BTdGF0ZUV2ZW50KGNvbnN0
IFNjcmlwdFZhbHVlJik7Ci0gICAgZXhwbGljaXQgUG9wU3RhdGVFdmVudChQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOworICAgIGV4cGxpY2l0IFBvcFN0YXRlRXZlbnQoUGFzc1Jl
ZlB0cjxIaXN0b3J5Pik7CiAKLSAgICBTY3JpcHRWYWx1ZSBtX3N0YXRlOwotICAgIFJlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1fc2VyaWFsaXplZFN0YXRlOworICAgIFJlZlB0cjxIaXN0
b3J5PiBtX2hpc3Rvcnk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vUG9wU3RhdGVFdmVudC5pZGwKaW5kZXggNThhZDk1MjczNWM5ZTRiZGM5ZDBkNjhlZWQ0M2Uw
OTMxMGVmNDk2OC4uNTRhZWUzOTRmYmQ5MmRiN2IzMzBkMzRlMDIyMmM1NTNlNzVlODgzMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaWRsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmlkbApAQCAtMjcsMTAgKzI3LDggQEAKIG1vZHVs
ZSBldmVudHMgewogCiAjaWYgIWRlZmluZWQoTEFOR1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQ
Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1FdmVudAotICAg
IF0gUG9wU3RhdGVFdmVudCA6IEV2ZW50IHsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtJ
bml0aWFsaXplZEJ5Q29uc3RydWN0b3IsIEN1c3RvbUdldHRlcl0gRE9NT2JqZWN0IHN0YXRlOwor
ICAgIGludGVyZmFjZSBQb3BTdGF0ZUV2ZW50IDogRXZlbnQgeworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgW0N1c3RvbUdldHRlcl0gRE9NT2JqZWN0IHN0YXRlOwogICAgIH07CiAjZW5kaWYK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcAppbmRleCA2MGZhYjA0M2Y5MDAy
MDkxNDE0MTQ1OTAzN2E1MmFkOGFhMmZiYWIzLi5iNjAyYmNlYzU4Y2YxNWUwNzYzMmFiZmJhNjA3
Njc0ZjY4ZWJkZGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZy
YW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcApAQCAt
MTI4LDkgKzEyOCw3IEBAIHZvaWQgQ2FjaGVkRnJhbWVCYXNlOjpyZXN0b3JlKCkKICAgICAgICAg
bV9jaGlsZEZyYW1lc1tpXS0+b3BlbigpOwogCiAgICAgbV9kb2N1bWVudC0+ZW5xdWV1ZVBhZ2Vz
aG93RXZlbnQoUGFnZXNob3dFdmVudFBlcnNpc3RlZCk7Ci0gICAgCi0gICAgSGlzdG9yeUl0ZW0q
IGhpc3RvcnlJdGVtID0gZnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPmN1cnJlbnRJdGVtKCk7
Ci0gICAgbV9kb2N1bWVudC0+ZW5xdWV1ZVBvcHN0YXRlRXZlbnQoaGlzdG9yeUl0ZW0gJiYgaGlz
dG9yeUl0ZW0tPnN0YXRlT2JqZWN0KCkgPyBoaXN0b3J5SXRlbS0+c3RhdGVPYmplY3QoKSA6IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOworICAgIG1fZG9jdW1lbnQtPmVucXVl
dWVQb3BzdGF0ZUV2ZW50KCk7CiAgICAgCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBp
ZiAobV9kb2N1bWVudC0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpUT1VDSF9MSVNURU5FUikp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCBlNjc2Yzk0YWNiOGNiYmRi
YWE2MWRkNGMzYjE1NGVhMDQwZDBhMDg3Li5hNDhjZGFlNWRkYWE4ODMyM2YzMjRjMjgwNDRjN2M3
NzUxOTY3ZjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTE4NSw2
ICsxODUsNyBAQCBGcmFtZUxvYWRlcjo6RnJhbWVMb2FkZXIoRnJhbWUqIGZyYW1lLCBGcmFtZUxv
YWRlckNsaWVudCogY2xpZW50KQogICAgICwgbV9wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3Bh
dGNoZWQoTm9EaXNtaXNzYWwpCiAgICAgLCBtX2lzQ29tcGxldGUoZmFsc2UpCiAgICAgLCBtX2lz
TG9hZGluZ01haW5SZXNvdXJjZShmYWxzZSkKKyAgICAsIG1fc2hvdWxkUG9wU3RhdGUoZmFsc2Up
CiAgICAgLCBtX2hhc1JlY2VpdmVkRmlyc3REYXRhKGZhbHNlKQogICAgICwgbV9uZWVkc0NsZWFy
KGZhbHNlKQogICAgICwgbV9jaGVja1RpbWVyKHRoaXMsICZGcmFtZUxvYWRlcjo6Y2hlY2tUaW1l
ckZpcmVkKQpAQCAtNjI0LDkgKzYyNSw5IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmRpZEJlZ2luRG9j
dW1lbnQoYm9vbCBkaXNwYXRjaCkKICAgICBtX2lzTG9hZGluZ01haW5SZXNvdXJjZSA9IHRydWU7
CiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2V0UmVhZHlTdGF0ZShEb2N1bWVudDo6TG9hZGlu
Zyk7CiAKLSAgICBpZiAobV9wZW5kaW5nU3RhdGVPYmplY3QpIHsKLSAgICAgICAgbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+c3RhdGVQb3BwZWQobV9wZW5kaW5nU3RhdGVPYmplY3QuZ2V0KCkpOwotICAg
ICAgICBtX3BlbmRpbmdTdGF0ZU9iamVjdC5jbGVhcigpOworICAgIGlmIChtX3Nob3VsZFBvcFN0
YXRlKSB7CisgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnN0YXRlUG9wcGVkKCk7CisgICAg
ICAgIG1fc2hvdWxkUG9wU3RhdGUgPSBmYWxzZTsKICAgICB9CiAKICAgICBpZiAoZGlzcGF0Y2gp
CkBAIC0xMDUzLDcgKzEwNTQsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkSW5TYW1lRG9jdW1l
bnQoY29uc3QgS1VSTCYgdXJsLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHN0YQogCiAgICAgbV9j
bGllbnQtPmRpc3BhdGNoRGlkTmF2aWdhdGVXaXRoaW5QYWdlKCk7CiAKLSAgICBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5zdGF0ZVBvcHBlZChzdGF0ZU9iamVjdCA/IHN0YXRlT2JqZWN0IDogU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
c3RhdGVQb3BwZWQoKTsKICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRQb3BTdGF0ZVdpdGhpblBh
Z2UoKTsKICAgICAKICAgICBpZiAoaGFzaENoYW5nZSkgewpAQCAtMTg4Myw4ICsxODg0LDcgQEAg
dm9pZCBGcmFtZUxvYWRlcjo6dHJhbnNpdGlvblRvQ29tbWl0dGVkKFBhc3NSZWZQdHI8Q2FjaGVk
UGFnZT4gY2FjaGVkUGFnZSkKICAgICAgICAgICAgICAgICBoaXN0b3J5KCktPnVwZGF0ZUZvckJh
Y2tGb3J3YXJkTmF2aWdhdGlvbigpOwogCiAgICAgICAgICAgICAgICAgLy8gRm9yIGNhY2hlZCBw
YWdlcywgQ2FjaGVkRnJhbWU6OnJlc3RvcmUgd2lsbCB0YWtlIGNhcmUgb2YgZmlyaW5nIHRoZSBw
b3BzdGF0ZSBldmVudCB3aXRoIHRoZSBoaXN0b3J5IGl0ZW0ncyBzdGF0ZSBvYmplY3QKLSAgICAg
ICAgICAgICAgICBpZiAoaGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpICYmICFjYWNoZWRQYWdlKQot
ICAgICAgICAgICAgICAgICAgICBtX3BlbmRpbmdTdGF0ZU9iamVjdCA9IGhpc3RvcnkoKS0+Y3Vy
cmVudEl0ZW0oKS0+c3RhdGVPYmplY3QoKTsKKyAgICAgICAgICAgICAgICBtX3Nob3VsZFBvcFN0
YXRlID0gaGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpICYmICFjYWNoZWRQYWdlOwogCiAgICAgICAg
ICAgICAgICAgLy8gQ3JlYXRlIGEgZG9jdW1lbnQgdmlldyBmb3IgdGhpcyBkb2N1bWVudCwgb3Ig
dXNlZCB0aGUgY2FjaGVkIHZpZXcuCiAgICAgICAgICAgICAgICAgaWYgKGNhY2hlZFBhZ2UpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKaW5kZXggMWU3N2I3YzYyOWQxODI2ZWM4Yjc4
NGNmZDMxZjlhNWYzZTc2MzdhOC4uYzhjMWI0Nzg3ZTgwYjhhM2M2NjgxZDE1YjM2NzYwZGFjMWQ5
Njg2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKQEAgLTQwNSw3ICs0MDUsNyBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0NvbXBsZXRlOwogICAgIGJvb2wgbV9pc0xvYWRpbmdN
YWluUmVzb3VyY2U7CiAKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtX3BlbmRp
bmdTdGF0ZU9iamVjdDsKKyAgICBib29sIG1fc2hvdWxkUG9wU3RhdGU7CiAKICAgICBib29sIG1f
aGFzUmVjZWl2ZWRGaXJzdERhdGE7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
SGlzdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuY3BwCmluZGV4IDFmNWEz
OWYyODc1ODRmN2MyNzQ4YjMzZTEwOTllNjY0ZDE5MmFlNjguLmExZjlhMDVmNjYxYzEzZmYyYWQ2
ZDYyOWVhODdhZTc0ZTg1YTJhZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlz
dG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmNwcApAQCAtNDIsNiAr
NDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEhpc3Rvcnk6Okhpc3RvcnkoRnJhbWUqIGZy
YW1lKQogICAgIDogRE9NV2luZG93UHJvcGVydHkoZnJhbWUpCisgICAgLCBtX2xhc3RTdGF0ZU9i
amVjdFJlcXVlc3RlZCgwKQogewogfQogCkBAIC01NCw2ICs1NSwyOCBAQCB1bnNpZ25lZCBIaXN0
b3J5OjpsZW5ndGgoKSBjb25zdAogICAgIHJldHVybiBtX2ZyYW1lLT5wYWdlKCktPmJhY2tGb3J3
YXJkKCktPmNvdW50KCk7CiB9CiAKK1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogSGlzdG9yeTo6c3Rh
dGUoKQoreworICAgIG1fbGFzdFN0YXRlT2JqZWN0UmVxdWVzdGVkID0gc3RhdGVJbnRlcm5hbCgp
OworICAgIHJldHVybiBtX2xhc3RTdGF0ZU9iamVjdFJlcXVlc3RlZDsKK30KKworU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKiBIaXN0b3J5OjpzdGF0ZUludGVybmFsKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fZnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKEhpc3RvcnlJdGVtKiBoaXN0
b3J5SXRlbSA9IG1fZnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPmN1cnJlbnRJdGVtKCkpCisg
ICAgICAgIHJldHVybiBoaXN0b3J5SXRlbS0+c3RhdGVPYmplY3QoKTsKKworICAgIHJldHVybiAw
OworfQorCitib29sIEhpc3Rvcnk6OnN0YXRlQ2hhbmdlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fbGFzdFN0YXRlT2JqZWN0UmVxdWVzdGVkICE9IHN0YXRlSW50ZXJuYWwoKTsKK30KKwogdm9p
ZCBIaXN0b3J5OjpiYWNrKCkKIHsKICAgICBnbygtMSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0hpc3RvcnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5oCmluZGV4
IGJkNTBmY2NkMmI4NjFkOWU2NDE4ZTk3NGY0MmRmYjJiMmI1ZjkxY2UuLmJkNmY2YWEyMTMxNWZh
NTVmZWVkYzQ1MjdkMGQzMmNiMzkwYzJlNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvSGlzdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5oCkBAIC00NCw2
ICs0NCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIaXN0b3J5PiBjcmVhdGUo
RnJhbWUqIGZyYW1lKSB7IHJldHVybiBhZG9wdFJlZihuZXcgSGlzdG9yeShmcmFtZSkpOyB9CiAK
ICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUq
IHN0YXRlKCk7CisgICAgYm9vbCBzdGF0ZUNoYW5nZWQoKSBjb25zdDsKICAgICB2b2lkIGJhY2so
KTsKICAgICB2b2lkIGZvcndhcmQoKTsKICAgICB2b2lkIGdvKGludCBkaXN0YW5jZSk7CkBAIC02
Miw2ICs2NCwxMCBAQCBwcml2YXRlOgogICAgIGV4cGxpY2l0IEhpc3RvcnkoRnJhbWUqKTsKIAog
ICAgIEtVUkwgdXJsRm9yU3RhdGUoY29uc3QgU3RyaW5nJiB1cmwpOworCisgICAgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKiBzdGF0ZUludGVybmFsKCkgY29uc3Q7CisKKyAgICBTZXJpYWxpemVkU2Ny
aXB0VmFsdWUqIG1fbGFzdFN0YXRlT2JqZWN0UmVxdWVzdGVkOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmlkbCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5pZGwKaW5kZXggZmYzNzAxZWQyNzZkNGY1Njk4
ZGE2YTA1MzBlMDY2MzgwYTMzYjFjMS4uNjc3OTQ1OGVlZmE5NWQxNjY4ODEyZDVhZTdjZTQ0NGJh
ZDFkOTFkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuaWRsCkBAIC0zNyw2ICszNyw3IEBAIG1vZHVs
ZSB3aW5kb3cgewogICAgICAgICBPbWl0Q29uc3RydWN0b3IKICAgICBdIEhpc3RvcnkgewogICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7CisgICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBbQ2FjaGVkQXR0cmlidXRlLCBDdXN0b21dIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSBzdGF0ZTsKIAogICAgICAgICBbRG9Ob3RDaGVja0RvbWFpblNlY3VyaXR5LCBDYWxs
V2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSB2b2lkIGJhY2soKTsKICAgICAgICAgW0RvTm90
Q2hlY2tEb21haW5TZWN1cml0eSwgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gdm9p
ZCBmb3J3YXJkKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggNWVlNmI1YzgyYWRiYWEzOTllNzEwNTc1ZjYzZWNhYjQ0NWI3
OWZlMy4uMzlhNzhiYzE0MjFjYzMwMTZmZDUyNTA5OGY0ZjQ2OGNlZjU2MDBlOCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE1IEBACisyMDEyLTAxLTMxICBQYWJsbyBGbG91cmV0ICA8cGFibG9mQG1vdG9yb2xh
LmNvbT4KKworICAgICAgICBBZGQgc3RhdGUgYXR0cmlidXRlIHRvIGhpc3RvcnkncyBkb20gaW50
ZXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzYwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGZhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3N0
YXRlLWF0dHJpYnV0ZS1vYmplY3QtdHlwZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9s
b2FkZXIvc3RhdGVvYmplY3RzL3N0YXRlLWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6YXRp
b24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVj
dHMvc3RhdGUtYXR0cmlidXRlLW9ubHktb25lLWRlc2VyaWFsaXphdGlvbi5odG1sOiBBZGRlZC4K
KwogMjAxMi0wMS0yNSAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgTGF5b3V0IFRlc3QgZmFzdC9qcy9kZmctdWludDMyYXJyYXktb3ZlcmZsb3ctdmFsdWVz
Lmh0bWwgaXMgc2xvdyBvbiBDaHJvbWl1bSBEZWJ1ZyBib3RzCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvc3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBl
cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvc3Rh
dGUtYXR0cmlidXRlLW9iamVjdC10eXBlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTA0MjE2
OWQzNjBkZTY4MzIyOTYyMzUwNjcxNDljODEwNTVmMGVmOQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0
LXR5cGVzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI1IEBACitUaGlzIHRlc3QgY2FsbHMgcHVz
aFN0YXRlIHdpdGggc3RhdGUgb2JqZWN0cyBvZiBhbGwgdGhlIGRpZmZlcmVudCBvYmplY3QgdHlw
ZXMgc3VwcG9ydGVkIGJ5IHRoZSBIVE1MNSAiaW50ZXJuYWwgc3RydWN0dXJlZCBjbG9uaW5nIGFs
Z29yaXRobSIgYW5kIG1ha2VzIHN1cmUgdGhlIHN0YXRlIGF0dHJpYnV0ZSByZXR1cm5zIHRoZSBl
eHBlY3RlZCBvYmplY3RzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBo
aXN0b3J5LnN0YXRlIGlzIGRlZmluZWQuCisKK2hpc3Rvcnkuc3RhdGUgc2hvdWxkIGluaXRpYWxs
eSBiZSBudWxsLgorUEFTUyBoaXN0b3J5LnN0YXRlIGlzIG51bGwKKworUEFTUyBoaXN0b3J5LnN0
YXRlIGlzIHVuZGVmaW5lZC4KK1BBU1MgaGlzdG9yeS5zdGF0ZSBpcyBudWxsCitQQVNTIGhpc3Rv
cnkuc3RhdGUgaXMgZmFsc2UKK1BBU1MgaGlzdG9yeS5zdGF0ZSBpcyB0cnVlCitQQVNTIGhpc3Rv
cnkuc3RhdGUgaXMgNDIKK1BBU1MgaGlzdG9yeS5zdGF0ZSBpcyAiU3RyaW5nIgorUEFTUyBoaXN0
b3J5LnN0YXRlID09ICdXZWQgRGVjIDMxIDE5NjkgMTY6MDA6MDAgR01ULTA4MDAgKFBTVCknIGlz
IHRydWUKK1BBU1MgaGlzdG9yeS5zdGF0ZSA9PSAnL2Zvby9naScgaXMgdHJ1ZQorUEFTUyBoaXN0
b3J5LnN0YXRlID09ICcnIGlzIHRydWUKK1BBU1MgaGlzdG9yeS5zdGF0ZSA9PSAnW29iamVjdCBP
YmplY3RdJyBpcyB0cnVlCitQQVNTIGhpc3Rvcnkuc3RhdGUgPT0gJ1tvYmplY3QgSW1hZ2VEYXRh
XScgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9z
dGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRl
ci9zdGF0ZW9iamVjdHMvc3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBlcy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjE2YjlhYmIyZWQ2MTU4YWQwYjY3YTVhMjMxNzc4NTFlNjdjNDdiMjkKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvc3RhdGUtYXR0cmli
dXRlLW9iamVjdC10eXBlcy5odG1sCkBAIC0wLDAgKzEsNDQgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZC8+Cis8Ym9keT4KKzxzY3JpcHQ+CisgICAgZGVz
Y3JpcHRpb24oJ1RoaXMgdGVzdCBjYWxscyBwdXNoU3RhdGUgd2l0aCBzdGF0ZSBvYmplY3RzIG9m
IGFsbCB0aGUgZGlmZmVyZW50IG9iamVjdCB0eXBlcyBzdXBwb3J0ZWQgYnkgdGhlIEhUTUw1ICJp
bnRlcm5hbCBzdHJ1Y3R1cmVkIGNsb25pbmcgYWxnb3JpdGhtIiBhbmQgbWFrZXMgc3VyZSB0aGUg
c3RhdGUgYXR0cmlidXRlIHJldHVybnMgdGhlIGV4cGVjdGVkIG9iamVjdHMuJyk7CisKKyAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5jbGVhckJhY2tGb3J3YXJkTGlzdCgpOworCisgICAgc2hvdWxkQmVEZWZpbmVkKCJoaXN0
b3J5LnN0YXRlIik7CisgICAgZGVidWcoIlxuaGlzdG9yeS5zdGF0ZSBzaG91bGQgaW5pdGlhbGx5
IGJlIG51bGwuIik7CisgICAgc2hvdWxkQmVOdWxsKCJoaXN0b3J5LnN0YXRlIik7CisgICAgZGVi
dWcoIiIpOworCisgICAgaGlzdG9yeS5wdXNoU3RhdGUodW5kZWZpbmVkLCAidW5kZWZpbmVkIGVu
dHJ5Iik7CisgICAgc2hvdWxkQmVVbmRlZmluZWQoImhpc3Rvcnkuc3RhdGUiKTsKKyAgICBoaXN0
b3J5LnB1c2hTdGF0ZShudWxsLCAibnVsbCBlbnRyeSIpOworICAgIHNob3VsZEJlTnVsbCgiaGlz
dG9yeS5zdGF0ZSIpOworICAgIGhpc3RvcnkucHVzaFN0YXRlKGZhbHNlLCAiZmFsc2UgZW50cnki
KTsKKyAgICBzaG91bGRCZUZhbHNlKCJoaXN0b3J5LnN0YXRlIik7CisgICAgaGlzdG9yeS5wdXNo
U3RhdGUodHJ1ZSwgInRydWUgZW50cnkiKTsKKyAgICBzaG91bGRCZVRydWUoImhpc3Rvcnkuc3Rh
dGUiKTsKKyAgICBoaXN0b3J5LnB1c2hTdGF0ZSg0MiwgIk51bWJlciBlbnRyeSIpOworICAgIHNo
b3VsZEJlKCJoaXN0b3J5LnN0YXRlIiwgIjQyIik7CisgICAgaGlzdG9yeS5wdXNoU3RhdGUoIlN0
cmluZyIsICJTdHJpbmcgZW50cnkiKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImhpc3Rv
cnkuc3RhdGUiLCAiU3RyaW5nIik7CisgICAgaGlzdG9yeS5wdXNoU3RhdGUobmV3IERhdGUoMCks
ICJEYXRlIGVudHJ5Iik7CisgICAgc2hvdWxkRXZhbHVhdGVUbygiaGlzdG9yeS5zdGF0ZSIsIG5l
dyBEYXRlKDApKTsKKyAgICBoaXN0b3J5LnB1c2hTdGF0ZShuZXcgUmVnRXhwKCJmb28iLCAiZ2ki
KSwgIlJlZ0V4cCBlbnRyeSIpOworICAgIHNob3VsZEV2YWx1YXRlVG8oImhpc3Rvcnkuc3RhdGUi
LCBuZXcgUmVnRXhwKCJmb28iLCAiZ2kiKSk7CisgICAgaGlzdG9yeS5wdXNoU3RhdGUobmV3IEFy
cmF5LCAiQXJyYXkgZW50cnkiKTsKKyAgICBzaG91bGRFdmFsdWF0ZVRvKCJoaXN0b3J5LnN0YXRl
IiwgbmV3IEFycmF5KTsKKyAgICBoaXN0b3J5LnB1c2hTdGF0ZShuZXcgT2JqZWN0LCAiT2JqZWN0
IGVudHJ5Iik7CisgICAgc2hvdWxkRXZhbHVhdGVUbygiaGlzdG9yeS5zdGF0ZSIsIG5ldyBPYmpl
Y3QpOworICAgIGhpc3RvcnkucHVzaFN0YXRlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZh
cyIpLmdldENvbnRleHQoIjJkIikuY3JlYXRlSW1hZ2VEYXRhKDEwLDEwKSwgIkltYWdlRGF0YSBl
bnRyeSIpOworICAgIHNob3VsZEV2YWx1YXRlVG8oImhpc3Rvcnkuc3RhdGUiLCBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpLmNyZWF0ZUltYWdlRGF0YSgx
MCwxMCkpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9zdGF0ZS1hdHRyaWJ1dGUtb25seS1v
bmUtZGVzZXJpYWxpemF0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVy
L3N0YXRlb2JqZWN0cy9zdGF0ZS1hdHRyaWJ1dGUtb25seS1vbmUtZGVzZXJpYWxpemF0aW9uLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTkxNTVlOWJkNDU0OWVkNjVkNmFjOGFjZmE2ODYwZTlh
ZDM0OGJiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVv
YmplY3RzL3N0YXRlLWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6YXRpb24tZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMTkgQEAKK01ha2Ugc3VyZSB0aGUgc2FtZSBkZXNlcmlhbGl6YXRpb24g
b2YgdGhlIHN0YXRlIG9iamVjdCBpcyB1c2VkIGV2ZXJ5IHRpbWUgKGJvdGggaW4gdGhlIGhpc3Rv
cnkgb2JqZWN0IGFuZCBwb3BzdGF0ZSBldmVudHMpLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyBoaXN0b3J5LnN0YXRlIGlzIGRlZmluZWQuCitQQVNTIGhpc3Rvcnkuc3Rh
dGUgPT09IGhpc3Rvcnkuc3RhdGUgaXMgdHJ1ZQorUEFTUyBoaXN0b3J5LnN0YXRlICE9PSBzdGF0
ZU9iamVjdCBpcyB0cnVlCitQQVNTIGhpc3Rvcnkuc3RhdGUgPT09IHN0YXRlT2JqZWN0IGlzIHRy
dWUKKworSW5zaWRlIHBvcHN0YXRlIGV2ZW50CisKK1BBU1MgaGlzdG9yeS5zdGF0ZSAhPT0gc3Rh
dGVPYmplY3QgaXMgdHJ1ZQorUEFTUyBwb3BTdGF0ZUV2ZW50LnN0YXRlICE9PSBzdGF0ZU9iamVj
dCBpcyB0cnVlCitQQVNTIHBvcFN0YXRlRXZlbnQuc3RhdGUgPT09IGhpc3Rvcnkuc3RhdGUgaXMg
dHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9zdGF0ZS1h
dHRyaWJ1dGUtb25seS1vbmUtZGVzZXJpYWxpemF0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L2xvYWRlci9zdGF0ZW9iamVjdHMvc3RhdGUtYXR0cmlidXRlLW9ubHktb25lLWRlc2VyaWFsaXph
dGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk1Mjk0OTU3YjMyMjA5Y2UzMWJjMGY5MmM0YmUyMWFhYzQ4
NzUyNzIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9i
amVjdHMvc3RhdGUtYXR0cmlidXRlLW9ubHktb25lLWRlc2VyaWFsaXphdGlvbi5odG1sCkBAIC0w
LDAgKzEsNjEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0
IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZC8+Cis8Ym9keT4KKzxzY3JpcHQ+CisgICAgZGVzY3JpcHRpb24oIk1ha2Ugc3VyZSB0aGUgc2Ft
ZSBkZXNlcmlhbGl6YXRpb24gb2YgdGhlIHN0YXRlIG9iamVjdCBpcyB1c2VkIGV2ZXJ5IHRpbWUg
KGJvdGggaW4gdGhlIGhpc3Rvcnkgb2JqZWN0IGFuZCBwb3BzdGF0ZSBldmVudHMpLiIpOworCisg
ICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuY2xlYXJCYWNrRm9y
d2FyZExpc3QoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworICAgIH0KKworICAgIHNob3VsZEJlRGVmaW5lZCgiaGlzdG9yeS5zdGF0ZSIpOworCisgICAg
Ly8gQ3JlYXRlIGEgbmV3IG9iamVjdC4KKyAgICB2YXIgc3RhdGVPYmplY3QgPSBbImEiXTsKKwor
ICAgIC8vIFVzZSBpdCBhcyB0aGUgc3RhdGUgb2JqZWN0IGluIGEgcmVwbGFjZVN0YXRlLiAgVGhp
cyBjbG9uZXMgdGhlIG9iamVjdC4KKyAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShzdGF0ZU9iamVj
dCwgbnVsbCwgbnVsbCk7CisKKyAgICBzaG91bGRCZVRydWUoImhpc3Rvcnkuc3RhdGUgPT09IGhp
c3Rvcnkuc3RhdGUiKTsKKworICAgIC8vIFNpbmNlIHRoZSBhY3R1YWwgaGlzdG9yeS5zdGF0ZSBp
cyBhIHN0cnVjdHVyZWQgY2xvbmUsIGl0IHNob3VsZCBub3QgbWF0Y2ggb3VyIG9yaWdpbmFsIG9i
amVjdC4KKyAgICBzaG91bGRCZVRydWUoImhpc3Rvcnkuc3RhdGUgIT09IHN0YXRlT2JqZWN0Iik7
CisKKyAgICAvLyBOb3cgbGV0J3MgcmVmZXRjaCBhIGNvcHkgb2YgaGlzdG9yeS5zdGF0ZSB0byBz
dG9yZTsKKyAgICBzdGF0ZU9iamVjdCA9IGhpc3Rvcnkuc3RhdGU7CisKKyAgICAvLyBPdXIgcmVm
ZXJlbmNlIGFuZCB0aGUgaGlzdG9yeS5zdGF0ZSBpdHNlbGYgc2hvdWxkIGJlIHRoZSBzYW1lLiAg
VGhpcyBpcyBub3cgQWRhbSdzIG9yaWdpbmFsIGFzc2VydGlvbi4KKyAgICBzaG91bGRCZVRydWUo
Imhpc3Rvcnkuc3RhdGUgPT09IHN0YXRlT2JqZWN0Iik7CisKKyAgICAvLyBOb3cgbGV0J3MgZG8g
YSBwdXNoc3RhdGUgdG8gYWRkIGEgaGlzdG9yeSBlbnRyeS4KKyAgICBoaXN0b3J5LnB1c2hTdGF0
ZShudWxsLCBudWxsLCBudWxsKTsKKworICAgIC8vIE5vdyBhZGQgYSBoYW5kbGVyIGZvciB0aGUg
cG9wc3RhdGUgZXZlbnQuCisgICAgdmFyIHBvcFN0YXRlRXZlbnQ7CisgICAgd2luZG93Lm9ucG9w
c3RhdGUgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGRlYnVnKCJcbkluc2lkZSBwb3BzdGF0ZSBl
dmVudFxuIik7CisgICAgICAgIHBvcFN0YXRlRXZlbnQgPSBlOworICAgICAgICAvLyBPdXIgc3Rv
cmVkIHJlZmVyZW5jZSB0byBzdGF0ZU9iamVjdCB3aWxsIG5vdCBtYXRjaCB0aGUgY3VycmVudCBz
dGF0ZSBvYmplY3QsIGFzIGl0IGlzIGEgc3RydWN0dXJlZCBjbG9uZSBvZiB0aGUgaGlzdG9yeSBp
dGVtJ3Mgc3RhdGUgb2JqZWN0LgorICAgICAgICBzaG91bGRCZVRydWUoImhpc3Rvcnkuc3RhdGUg
IT09IHN0YXRlT2JqZWN0Iik7CisgICAgICAgIC8vIE91ciBzdG9yZWQgcmVmZXJlbmNlIHRvIHN0
YXRlT2JqZWN0IHdpbGwgbm90IG1hdGNoIHRoZSBzdGF0ZSBvYmplY3QgaW4gdGhpcyBwb3Agc3Rh
dGUgZXZlbnQsIGFzIGl0IGlzIHRoZSBzYW1lIGFzIGhpc3Rvcnkuc3RhdGUgd2hpY2ggaXMgYSBz
dHJ1Y3R1cmVkIGNsb25lIG9mIHRoZSBoaXN0b3J5IGl0ZW0ncyBzdGF0ZSBvYmplY3QuCisgICAg
ICAgIHNob3VsZEJlVHJ1ZSgicG9wU3RhdGVFdmVudC5zdGF0ZSAhPT0gc3RhdGVPYmplY3QiKTsK
KyAgICAgICAgLy8gVGhlIGV2ZW50J3Mgc3RhdGUgb2JqZWN0IGFuZCB0aGUgY3VycmVudCBzdGF0
ZSBvYmplY3Qgc2hvdWxkIG1hdGNoLgorICAgICAgICBzaG91bGRCZVRydWUoInBvcFN0YXRlRXZl
bnQuc3RhdGUgPT09IGhpc3Rvcnkuc3RhdGUiKTsKKworICAgICAgICB2YXIgcyA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOworICAgICAgICBzLnNyYyA9ICIuLi8uLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIjsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGls
ZChzKTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2hKU1Rlc3QsIDApOworICAgIH0KKworICAg
IC8vIE5vdyBsZXQncyBnbyBiYWNrIHRvIG91ciBvcmlnaW5hbCBoaXN0b3J5IGVudHJ5IHdoaWNo
IGhhcyBhIHN0YXRlIG9iamVjdCB0aGF0IHdlJ3ZlIHN0b3JlZCBhIHJlZmVyZW5jZSB0byBhbHJl
YWR5LgorICAgIC8vIFRoaXMgd2lsbCBmaXJlIG91ciBwb3BzdGF0ZSBldmVudCBoYW5kbGVyIGFi
b3ZlLgorICAgIGhpc3RvcnkuYmFjaygpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124856</attachid>
            <date>2012-01-31 17:11:00 -0800</date>
            <delta_ts>2012-02-03 00:03:33 -0800</delta_ts>
            <desc>history.state</desc>
            <filename>bug-76035-20120131171059.patch</filename>
            <type>text/plain</type>
            <size>16039</size>
            <attacher name="Pablo Flouret">pf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1OTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTRhZWViMjMzYmY0YTE0
MjViN2FmNzZiZWJkZWVhMzRmZDVmMWNlNS4uMDRlNjlmZDI0NmY3ODFiYWM1OWFjYzJlODhiMDBh
NWFhYThjNTdhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTAxLTMxICBQYWJs
byBGbG91cmV0ICA8cGFibG9mQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBBZGQgc3RhdGUgYXR0
cmlidXRlIHRvIGhpc3RvcnkncyBkb20gaW50ZXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogZmFzdC9sb2FkZXIvc3RhdGVvYmplY3Rz
L3N0YXRlLWF0dHJpYnV0ZS1vYmplY3QtdHlwZXMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9s
b2FkZXIvc3RhdGVvYmplY3RzL3N0YXRlLWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6YXRp
b24uaHRtbAorCisgICAgICAgICogYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTSGlzdG9yeTo6c3RhdGUpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0hpc3Rvcnk6OnB1c2hTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0hpc3Rvcnk6OnJlcGxhY2VTdGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SGlzdG9yeUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEhpc3Rvcnk6OnN0YXRl
QWNjZXNzb3JHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OEhpc3Rvcnk6OnB1c2hTdGF0ZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4SGlzdG9y
eTo6cmVwbGFjZVN0YXRlQ2FsbGJhY2spOgorICAgICAgICAqIHBhZ2UvSGlzdG9yeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIaXN0b3J5OjpIaXN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6Okhp
c3Rvcnk6OnN0YXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SGlz
dG9yeTo6c3RhdGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5OjpzdGF0ZUNo
YW5nZWQpOgorICAgICAgICAqIHBhZ2UvSGlzdG9yeS5oOgorICAgICAgICAoSGlzdG9yeSk6Cisg
ICAgICAgICgpOgorICAgICAgICAqIHBhZ2UvSGlzdG9yeS5pZGw6CisKIDIwMTItMDEtMjYgIFBh
YmxvIEZsb3VyZXQgIDxwYWJsb2ZAbW90b3JvbGEuY29tPgogCiAgICAgICAgIEZpeCBiYWQgY29k
ZSBnZW5lcmF0ZWQgYnkgdGhlIEpTQyBpZGwgY29kZSBnZW5lcmF0b3IgZm9yIFtDYWNoZWRBdHRy
aWJ1dGVdIGF0dHJpYnV0ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSGlzdG9yeUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3Rv
cnlDdXN0b20uY3BwCmluZGV4IDcyZWE1NDI0YzdjMTJmM2E2NzJiYzdkNzM5ZTExZGVkZmI0ODE4
YzcuLmUxMWI5NTcxZGJkNmJjZjE5M2U4ZmEzZjg4ZWI3NzNmNWQzNmRjMGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcApAQCAtMTY0LDYgKzE2
NCwyMCBAQCB2b2lkIEpTSGlzdG9yeTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TgogICAgIEJhc2U6OmdldE93blByb3BlcnR5
TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKK0pTVmFs
dWUgSlNIaXN0b3J5OjpzdGF0ZShFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0Cit7CisgICAgSGlzdG9y
eSogaGlzdG9yeSA9IHN0YXRpY19jYXN0PEhpc3RvcnkqPihpbXBsKCkpOworCisgICAgSlNWYWx1
ZSBjYWNoZWRWYWx1ZSA9IG1fc3RhdGUuZ2V0KCk7CisgICAgaWYgKCFjYWNoZWRWYWx1ZS5pc0Vt
cHR5KCkgJiYgIWhpc3RvcnktPnN0YXRlQ2hhbmdlZCgpKQorICAgICAgICByZXR1cm4gY2FjaGVk
VmFsdWU7CisKKyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHNlcmlhbGl6ZWQgPSBoaXN0b3J5
LT5zdGF0ZSgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gc2VyaWFsaXplZCA/IHNlcmlhbGl6ZWQt
PmRlc2VyaWFsaXplKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOworICAgIGNv
bnN0X2Nhc3Q8SlNIaXN0b3J5Kj4odGhpcyktPm1fc3RhdGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBKU1ZhbHVlIEpTSGlz
dG9yeTo6cHVzaFN0YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBoaXN0b3J5U3RhdGUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgMCk7CkBAIC0xODUsNiArMTk5LDggQEAgSlNWYWx1
ZSBKU0hpc3Rvcnk6OnB1c2hTdGF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaW1wbCgpLT5zdGF0
ZU9iamVjdEFkZGVkKGhpc3RvcnlTdGF0ZS5yZWxlYXNlKCksIHRpdGxlLCB1cmwsIEhpc3Rvcnk6
OlN0YXRlT2JqZWN0UHVzaCwgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAK
KyAgICBtX3N0YXRlLmNsZWFyKCk7CisKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApA
QCAtMjA5LDYgKzIyNSw4IEBAIEpTVmFsdWUgSlNIaXN0b3J5OjpyZXBsYWNlU3RhdGUoRXhlY1N0
YXRlKiBleGVjKQogICAgIGltcGwoKS0+c3RhdGVPYmplY3RBZGRlZChoaXN0b3J5U3RhdGUucmVs
ZWFzZSgpLCB0aXRsZSwgdXJsLCBIaXN0b3J5OjpTdGF0ZU9iamVjdFJlcGxhY2UsIGVjKTsKICAg
ICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogCisgICAgbV9zdGF0ZS5jbGVhcigpOworCiAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhpc3RvcnlDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHAKaW5kZXggODk1NjEwOTBjYTE0
OWRiZDFlZjcwMzZhOTFjZDNhOWE3ZWZiYTY4Yi4uYTFiZDc2YjJhYmU0MDYzZWVhN2M2NWNjNzdl
NmE3ZDA5MzIzOWZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHAKQEAgLTQxLDYgKzQxLDI0IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SGlzdG9yeTo6c3RhdGVBY2Nl
c3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29y
SW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5IaXN0b3J5LnN0YXRlIik7CisgICAg
SGlzdG9yeSogaGlzdG9yeSA9IFY4SGlzdG9yeTo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisK
KyAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHByb3BlcnR5TmFtZSA9IHY4OjpTdHJpbmc6Ok5l
d1N5bWJvbCgic3RhdGUiKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSBpbmZv
LkhvbGRlcigpLT5HZXRIaWRkZW5WYWx1ZShwcm9wZXJ0eU5hbWUpOworCisgICAgaWYgKCF2YWx1
ZS5Jc0VtcHR5KCkgJiYgIWhpc3RvcnktPnN0YXRlQ2hhbmdlZCgpKQorICAgICAgICByZXR1cm4g
dmFsdWU7CisKKyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHNlcmlhbGl6ZWQgPSBoaXN0b3J5
LT5zdGF0ZSgpOworICAgIHZhbHVlID0gc2VyaWFsaXplZCA/IHNlcmlhbGl6ZWQtPmRlc2VyaWFs
aXplKCkgOiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjg6Ok51bGwoKSk7CisgICAgaW5mby5Ib2xk
ZXIoKS0+U2V0SGlkZGVuVmFsdWUocHJvcGVydHlOYW1lLCB2YWx1ZSk7CisKKyAgICByZXR1cm4g
dmFsdWU7Cit9CisKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhpc3Rvcnk6OnB1c2hTdGF0ZUNh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgYm9vbCBkaWRUaHJvdyA9
IGZhbHNlOwpAQCAtNjIsNiArODAsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIaXN0b3J5
OjpwdXNoU3RhdGVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwogICAgIEhpc3RvcnkqIGhpc3RvcnkgPSBWOEhpc3Rvcnk6OnRvTmF0
aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIGhpc3RvcnktPnN0YXRlT2JqZWN0QWRkZWQoaGlzdG9y
eVN0YXRlLnJlbGVhc2UoKSwgdGl0bGUsIHVybCwgSGlzdG9yeTo6U3RhdGVPYmplY3RQdXNoLCBl
Yyk7CisgICAgYXJncy5Ib2xkZXIoKS0+RGVsZXRlSGlkZGVuVmFsdWUodjg6OlN0cmluZzo6TmV3
U3ltYm9sKCJzdGF0ZSIpKTsKICAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7CiB9CiAKQEAgLTg2
LDYgKzEwNSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhpc3Rvcnk6OnJlcGxhY2VTdGF0
ZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAgICAgSGlzdG9yeSogaGlzdG9yeSA9IFY4SGlzdG9yeTo6dG9OYXRpdmUoYXJncy5I
b2xkZXIoKSk7CiAgICAgaGlzdG9yeS0+c3RhdGVPYmplY3RBZGRlZChoaXN0b3J5U3RhdGUucmVs
ZWFzZSgpLCB0aXRsZSwgdXJsLCBIaXN0b3J5OjpTdGF0ZU9iamVjdFJlcGxhY2UsIGVjKTsKKyAg
ICBhcmdzLkhvbGRlcigpLT5EZWxldGVIaWRkZW5WYWx1ZSh2ODo6U3RyaW5nOjpOZXdTeW1ib2wo
InN0YXRlIikpOwogICAgIHJldHVybiB0aHJvd0Vycm9yKGVjKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlz
dG9yeS5jcHAKaW5kZXggMWY1YTM5ZjI4NzU4NGY3YzI3NDhiMzNlMTA5OWU2NjRkMTkyYWU2OC4u
YTFmOWEwNWY2NjFjMTNmZjJhZDZkNjI5ZWE4N2FlNzRlODVhMmFmYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hp
c3RvcnkuY3BwCkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSGlzdG9y
eTo6SGlzdG9yeShGcmFtZSogZnJhbWUpCiAgICAgOiBET01XaW5kb3dQcm9wZXJ0eShmcmFtZSkK
KyAgICAsIG1fbGFzdFN0YXRlT2JqZWN0UmVxdWVzdGVkKDApCiB7CiB9CiAKQEAgLTU0LDYgKzU1
LDI4IEBAIHVuc2lnbmVkIEhpc3Rvcnk6Omxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZnJh
bWUtPnBhZ2UoKS0+YmFja0ZvcndhcmQoKS0+Y291bnQoKTsKIH0KIAorU2VyaWFsaXplZFNjcmlw
dFZhbHVlKiBIaXN0b3J5OjpzdGF0ZSgpCit7CisgICAgbV9sYXN0U3RhdGVPYmplY3RSZXF1ZXN0
ZWQgPSBzdGF0ZUludGVybmFsKCk7CisgICAgcmV0dXJuIG1fbGFzdFN0YXRlT2JqZWN0UmVxdWVz
dGVkOworfQorCitTZXJpYWxpemVkU2NyaXB0VmFsdWUqIEhpc3Rvcnk6OnN0YXRlSW50ZXJuYWwo
KSBjb25zdAoreworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp
ZiAoSGlzdG9yeUl0ZW0qIGhpc3RvcnlJdGVtID0gbV9mcmFtZS0+bG9hZGVyKCktPmhpc3Rvcnko
KS0+Y3VycmVudEl0ZW0oKSkKKyAgICAgICAgcmV0dXJuIGhpc3RvcnlJdGVtLT5zdGF0ZU9iamVj
dCgpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgSGlzdG9yeTo6c3RhdGVDaGFuZ2VkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXN0U3RhdGVPYmplY3RSZXF1ZXN0ZWQgIT0gc3RhdGVJ
bnRlcm5hbCgpOworfQorCiB2b2lkIEhpc3Rvcnk6OmJhY2soKQogewogICAgIGdvKC0xKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9IaXN0b3J5LmgKaW5kZXggYmQ1MGZjY2QyYjg2MWQ5ZTY0MThlOTc0ZjQyZGZiMmIyYjVm
OTFjZS4uYmQ2ZjZhYTIxMzE1ZmE1NWZlZWRjNDUyN2QwZDMyY2IzOTBjMmU1OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9IaXN0b3J5LmgKQEAgLTQ0LDYgKzQ0LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEhpc3Rvcnk+IGNyZWF0ZShGcmFtZSogZnJhbWUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBI
aXN0b3J5KGZyYW1lKSk7IH0KIAogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSogc3RhdGUoKTsKKyAgICBib29sIHN0YXRlQ2hhbmdlZCgpIGNv
bnN0OwogICAgIHZvaWQgYmFjaygpOwogICAgIHZvaWQgZm9yd2FyZCgpOwogICAgIHZvaWQgZ28o
aW50IGRpc3RhbmNlKTsKQEAgLTYyLDYgKzY0LDEwIEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQg
SGlzdG9yeShGcmFtZSopOwogCiAgICAgS1VSTCB1cmxGb3JTdGF0ZShjb25zdCBTdHJpbmcmIHVy
bCk7CisKKyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHN0YXRlSW50ZXJuYWwoKSBjb25zdDsK
KworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogbV9sYXN0U3RhdGVPYmplY3RSZXF1ZXN0ZWQ7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0hpc3RvcnkuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmlkbAppbmRl
eCBmZjM3MDFlZDI3NmQ0ZjU2OThkYTZhMDUzMGUwNjYzODBhMzNiMWMxLi42Nzc5NDU4ZWVmYTk1
ZDE2Njg4MTJkNWFlN2NlNDQ0YmFkMWQ5MWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0hpc3RvcnkuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5pZGwKQEAg
LTM3LDYgKzM3LDcgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIE9taXRDb25zdHJ1Y3Rvcgog
ICAgIF0gSGlzdG9yeSB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25n
IGxlbmd0aDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDYWNoZWRBdHRyaWJ1dGUsIEN1
c3RvbV0gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHN0YXRlOwogCiAgICAgICAgIFtEb05vdENoZWNr
RG9tYWluU2VjdXJpdHksIENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIHZvaWQgYmFj
aygpOwogICAgICAgICBbRG9Ob3RDaGVja0RvbWFpblNlY3VyaXR5LCBDYWxsV2l0aD1TY3JpcHRF
eGVjdXRpb25Db250ZXh0XSB2b2lkIGZvcndhcmQoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1ZWU2YjVjODJhZGJhYTM5
OWU3MTA1NzVmNjNlY2FiNDQ1Yjc5ZmUzLi4zOWE3OGJjMTQyMWNjMzAxNmZkNTI1MDk4ZjRmNDY4
Y2VmNTYwMGU4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDEtMzEgIFBhYmxvIEZsb3Vy
ZXQgIDxwYWJsb2ZAbW90b3JvbGEuY29tPgorCisgICAgICAgIEFkZCBzdGF0ZSBhdHRyaWJ1dGUg
dG8gaGlzdG9yeSdzIGRvbSBpbnRlcmZhY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03NjAzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3N0YXRlLWF0dHJp
YnV0ZS1vYmplY3QtdHlwZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2xv
YWRlci9zdGF0ZW9iamVjdHMvc3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBlcy5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvc3RhdGUtYXR0cmlidXRlLW9u
bHktb25lLWRlc2VyaWFsaXphdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9zdGF0ZS1hdHRyaWJ1dGUtb25seS1vbmUtZGVzZXJpYWxp
emF0aW9uLmh0bWw6IEFkZGVkLgorCiAyMDEyLTAxLTI1ICBMZXZpIFdlaW50cmF1YiAgPGxldml3
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBMYXlvdXQgVGVzdCBmYXN0L2pzL2RmZy11aW50MzJh
cnJheS1vdmVyZmxvdy12YWx1ZXMuaHRtbCBpcyBzbG93IG9uIENocm9taXVtIERlYnVnIGJvdHMK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9zdGF0ZS1h
dHRyaWJ1dGUtb2JqZWN0LXR5cGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbG9h
ZGVyL3N0YXRlb2JqZWN0cy9zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lMDQyMTY5ZDM2MGRlNjgzMjI5NjIzNTA2NzE0OWM4MTA1NWYwZWY5Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3N0
YXRlLWF0dHJpYnV0ZS1vYmplY3QtdHlwZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjUgQEAK
K1RoaXMgdGVzdCBjYWxscyBwdXNoU3RhdGUgd2l0aCBzdGF0ZSBvYmplY3RzIG9mIGFsbCB0aGUg
ZGlmZmVyZW50IG9iamVjdCB0eXBlcyBzdXBwb3J0ZWQgYnkgdGhlIEhUTUw1ICJpbnRlcm5hbCBz
dHJ1Y3R1cmVkIGNsb25pbmcgYWxnb3JpdGhtIiBhbmQgbWFrZXMgc3VyZSB0aGUgc3RhdGUgYXR0
cmlidXRlIHJldHVybnMgdGhlIGV4cGVjdGVkIG9iamVjdHMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitQQVNTIGhpc3Rvcnkuc3RhdGUgaXMgZGVmaW5lZC4KKworaGlzdG9yeS5z
dGF0ZSBzaG91bGQgaW5pdGlhbGx5IGJlIG51bGwuCitQQVNTIGhpc3Rvcnkuc3RhdGUgaXMgbnVs
bAorCitQQVNTIGhpc3Rvcnkuc3RhdGUgaXMgdW5kZWZpbmVkLgorUEFTUyBoaXN0b3J5LnN0YXRl
IGlzIG51bGwKK1BBU1MgaGlzdG9yeS5zdGF0ZSBpcyBmYWxzZQorUEFTUyBoaXN0b3J5LnN0YXRl
IGlzIHRydWUKK1BBU1MgaGlzdG9yeS5zdGF0ZSBpcyA0MgorUEFTUyBoaXN0b3J5LnN0YXRlIGlz
ICJTdHJpbmciCitQQVNTIGhpc3Rvcnkuc3RhdGUgPT0gJ1dlZCBEZWMgMzEgMTk2OSAxNjowMDow
MCBHTVQtMDgwMCAoUFNUKScgaXMgdHJ1ZQorUEFTUyBoaXN0b3J5LnN0YXRlID09ICcvZm9vL2dp
JyBpcyB0cnVlCitQQVNTIGhpc3Rvcnkuc3RhdGUgPT0gJycgaXMgdHJ1ZQorUEFTUyBoaXN0b3J5
LnN0YXRlID09ICdbb2JqZWN0IE9iamVjdF0nIGlzIHRydWUKK1BBU1MgaGlzdG9yeS5zdGF0ZSA9
PSAnW29iamVjdCBJbWFnZURhdGFdJyBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9s
b2FkZXIvc3RhdGVvYmplY3RzL3N0YXRlLWF0dHJpYnV0ZS1vYmplY3QtdHlwZXMuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0
LXR5cGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTZiOWFiYjJlZDYxNThhZDBiNjdhNWEyMzE3Nzg1MWU2
N2M0N2IyOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRl
b2JqZWN0cy9zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLmh0bWwKQEAgLTAsMCArMSw0NCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkLz4KKzxib2R5
PgorPHNjcmlwdD4KKyAgICBkZXNjcmlwdGlvbignVGhpcyB0ZXN0IGNhbGxzIHB1c2hTdGF0ZSB3
aXRoIHN0YXRlIG9iamVjdHMgb2YgYWxsIHRoZSBkaWZmZXJlbnQgb2JqZWN0IHR5cGVzIHN1cHBv
cnRlZCBieSB0aGUgSFRNTDUgImludGVybmFsIHN0cnVjdHVyZWQgY2xvbmluZyBhbGdvcml0aG0i
IGFuZCBtYWtlcyBzdXJlIHRoZSBzdGF0ZSBhdHRyaWJ1dGUgcmV0dXJucyB0aGUgZXhwZWN0ZWQg
b2JqZWN0cy4nKTsKKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmNsZWFyQmFja0ZvcndhcmRMaXN0KCk7CisKKyAgICBz
aG91bGRCZURlZmluZWQoImhpc3Rvcnkuc3RhdGUiKTsKKyAgICBkZWJ1ZygiXG5oaXN0b3J5LnN0
YXRlIHNob3VsZCBpbml0aWFsbHkgYmUgbnVsbC4iKTsKKyAgICBzaG91bGRCZU51bGwoImhpc3Rv
cnkuc3RhdGUiKTsKKyAgICBkZWJ1ZygiIik7CisKKyAgICBoaXN0b3J5LnB1c2hTdGF0ZSh1bmRl
ZmluZWQsICJ1bmRlZmluZWQgZW50cnkiKTsKKyAgICBzaG91bGRCZVVuZGVmaW5lZCgiaGlzdG9y
eS5zdGF0ZSIpOworICAgIGhpc3RvcnkucHVzaFN0YXRlKG51bGwsICJudWxsIGVudHJ5Iik7Cisg
ICAgc2hvdWxkQmVOdWxsKCJoaXN0b3J5LnN0YXRlIik7CisgICAgaGlzdG9yeS5wdXNoU3RhdGUo
ZmFsc2UsICJmYWxzZSBlbnRyeSIpOworICAgIHNob3VsZEJlRmFsc2UoImhpc3Rvcnkuc3RhdGUi
KTsKKyAgICBoaXN0b3J5LnB1c2hTdGF0ZSh0cnVlLCAidHJ1ZSBlbnRyeSIpOworICAgIHNob3Vs
ZEJlVHJ1ZSgiaGlzdG9yeS5zdGF0ZSIpOworICAgIGhpc3RvcnkucHVzaFN0YXRlKDQyLCAiTnVt
YmVyIGVudHJ5Iik7CisgICAgc2hvdWxkQmUoImhpc3Rvcnkuc3RhdGUiLCAiNDIiKTsKKyAgICBo
aXN0b3J5LnB1c2hTdGF0ZSgiU3RyaW5nIiwgIlN0cmluZyBlbnRyeSIpOworICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygiaGlzdG9yeS5zdGF0ZSIsICJTdHJpbmciKTsKKyAgICBoaXN0b3J5LnB1
c2hTdGF0ZShuZXcgRGF0ZSgwKSwgIkRhdGUgZW50cnkiKTsKKyAgICBzaG91bGRFdmFsdWF0ZVRv
KCJoaXN0b3J5LnN0YXRlIiwgbmV3IERhdGUoMCkpOworICAgIGhpc3RvcnkucHVzaFN0YXRlKG5l
dyBSZWdFeHAoImZvbyIsICJnaSIpLCAiUmVnRXhwIGVudHJ5Iik7CisgICAgc2hvdWxkRXZhbHVh
dGVUbygiaGlzdG9yeS5zdGF0ZSIsIG5ldyBSZWdFeHAoImZvbyIsICJnaSIpKTsKKyAgICBoaXN0
b3J5LnB1c2hTdGF0ZShuZXcgQXJyYXksICJBcnJheSBlbnRyeSIpOworICAgIHNob3VsZEV2YWx1
YXRlVG8oImhpc3Rvcnkuc3RhdGUiLCBuZXcgQXJyYXkpOworICAgIGhpc3RvcnkucHVzaFN0YXRl
KG5ldyBPYmplY3QsICJPYmplY3QgZW50cnkiKTsKKyAgICBzaG91bGRFdmFsdWF0ZVRvKCJoaXN0
b3J5LnN0YXRlIiwgbmV3IE9iamVjdCk7CisgICAgaGlzdG9yeS5wdXNoU3RhdGUoZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKS5jcmVhdGVJbWFnZURhdGEo
MTAsMTApLCAiSW1hZ2VEYXRhIGVudHJ5Iik7CisgICAgc2hvdWxkRXZhbHVhdGVUbygiaGlzdG9y
eS5zdGF0ZSIsIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJk
IikuY3JlYXRlSW1hZ2VEYXRhKDEwLDEwKSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3N0
YXRlLWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6YXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3N0YXRlLWF0dHJpYnV0ZS1vbmx5LW9u
ZS1kZXNlcmlhbGl6YXRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzZDAxMTdmOTlkZDhm
YWJhNmJkNTI0NGZkNzQ1Yzc0ZGE2OWRmYzAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvc3RhdGUtYXR0cmlidXRlLW9ubHktb25lLWRlc2Vy
aWFsaXphdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBAQAorTWFrZSBzdXJlIHRoZSBz
YW1lIGRlc2VyaWFsaXphdGlvbiBvZiB0aGUgc3RhdGUgb2JqZWN0IGlzIHVzZWQgZXZlcnkgdGlt
ZSAoYm90aCBpbiB0aGUgaGlzdG9yeSBvYmplY3QgYW5kIHBvcHN0YXRlIGV2ZW50cykuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGhpc3Rvcnkuc3RhdGUgaXMgZGVmaW5l
ZC4KK1BBU1MgaGlzdG9yeS5zdGF0ZSA9PT0gaGlzdG9yeS5zdGF0ZSBpcyB0cnVlCitQQVNTIGhp
c3Rvcnkuc3RhdGUgIT09IHN0YXRlT2JqZWN0IGlzIHRydWUKK1BBU1MgaGlzdG9yeS5zdGF0ZSA9
PT0gc3RhdGVPYmplY3QgaXMgdHJ1ZQorCitJbnNpZGUgcG9wc3RhdGUgZXZlbnQKKworUEFTUyBo
aXN0b3J5LnN0YXRlICE9PSBzdGF0ZU9iamVjdCBpcyB0cnVlCitQQVNTIHBvcFN0YXRlRXZlbnQu
c3RhdGUgIT09IHN0YXRlT2JqZWN0IGlzIHRydWUKK0ZBSUwgcG9wU3RhdGVFdmVudC5zdGF0ZSA9
PT0gaGlzdG9yeS5zdGF0ZSBzaG91bGQgYmUgdHJ1ZS4gV2FzIGZhbHNlLgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9zdGF0ZS1hdHRyaWJ1dGUtb25seS1vbmUt
ZGVzZXJpYWxpemF0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVj
dHMvc3RhdGUtYXR0cmlidXRlLW9ubHktb25lLWRlc2VyaWFsaXphdGlvbi5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjA4MzcyMWQzODM0ODk2MDAyYjZiZjViMjM1OTExMDJiMWMzZmVhZGMKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvc3RhdGUtYXR0cmli
dXRlLW9ubHktb25lLWRlc2VyaWFsaXphdGlvbi5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZC8+Cis8Ym9keT4KKzxzY3Jp
cHQ+CisgICAgZGVzY3JpcHRpb24oIk1ha2Ugc3VyZSB0aGUgc2FtZSBkZXNlcmlhbGl6YXRpb24g
b2YgdGhlIHN0YXRlIG9iamVjdCBpcyB1c2VkIGV2ZXJ5IHRpbWUgKGJvdGggaW4gdGhlIGhpc3Rv
cnkgb2JqZWN0IGFuZCBwb3BzdGF0ZSBldmVudHMpLiIpOworCisgICAgd2luZG93LmpzVGVzdElz
QXN5bmMgPSB0cnVlOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuY2xlYXJCYWNrRm9yd2FyZExpc3QoKTsKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIHNo
b3VsZEJlRGVmaW5lZCgiaGlzdG9yeS5zdGF0ZSIpOworCisgICAgLy8gQ3JlYXRlIGEgbmV3IG9i
amVjdC4KKyAgICB2YXIgc3RhdGVPYmplY3QgPSBbImEiXTsKKworICAgIC8vIFVzZSBpdCBhcyB0
aGUgc3RhdGUgb2JqZWN0IGluIGEgcmVwbGFjZVN0YXRlLiAgVGhpcyBjbG9uZXMgdGhlIG9iamVj
dC4KKyAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShzdGF0ZU9iamVjdCwgbnVsbCwgbnVsbCk7CisK
KyAgICBzaG91bGRCZVRydWUoImhpc3Rvcnkuc3RhdGUgPT09IGhpc3Rvcnkuc3RhdGUiKTsKKwor
ICAgIC8vIFNpbmNlIHRoZSBhY3R1YWwgaGlzdG9yeS5zdGF0ZSBpcyBhIHN0cnVjdHVyZWQgY2xv
bmUsIGl0IHNob3VsZCBub3QgbWF0Y2ggb3VyIG9yaWdpbmFsIG9iamVjdC4KKyAgICBzaG91bGRC
ZVRydWUoImhpc3Rvcnkuc3RhdGUgIT09IHN0YXRlT2JqZWN0Iik7CisKKyAgICAvLyBOb3cgbGV0
J3MgcmVmZXRjaCBhIGNvcHkgb2YgaGlzdG9yeS5zdGF0ZSB0byBzdG9yZTsKKyAgICBzdGF0ZU9i
amVjdCA9IGhpc3Rvcnkuc3RhdGU7CisKKyAgICAvLyBPdXIgcmVmZXJlbmNlIGFuZCB0aGUgaGlz
dG9yeS5zdGF0ZSBpdHNlbGYgc2hvdWxkIGJlIHRoZSBzYW1lLiAgVGhpcyBpcyBub3cgQWRhbSdz
IG9yaWdpbmFsIGFzc2VydGlvbi4KKyAgICBzaG91bGRCZVRydWUoImhpc3Rvcnkuc3RhdGUgPT09
IHN0YXRlT2JqZWN0Iik7CisKKyAgICAvLyBOb3cgbGV0J3MgZG8gYSBwdXNoc3RhdGUgdG8gYWRk
IGEgaGlzdG9yeSBlbnRyeS4KKyAgICBoaXN0b3J5LnB1c2hTdGF0ZShudWxsLCBudWxsLCBudWxs
KTsKKworICAgIC8vIE5vdyBhZGQgYSBoYW5kbGVyIGZvciB0aGUgcG9wc3RhdGUgZXZlbnQuCisg
ICAgdmFyIHBvcFN0YXRlRXZlbnQ7CisgICAgd2luZG93Lm9ucG9wc3RhdGUgPSBmdW5jdGlvbihl
KSB7CisgICAgICAgIGRlYnVnKCJcbkluc2lkZSBwb3BzdGF0ZSBldmVudFxuIik7CisgICAgICAg
IHBvcFN0YXRlRXZlbnQgPSBlOworICAgICAgICAvLyBPdXIgc3RvcmVkIHJlZmVyZW5jZSB0byBz
dGF0ZU9iamVjdCB3aWxsIG5vdCBtYXRjaCB0aGUgY3VycmVudCBzdGF0ZSBvYmplY3QsIGFzIGl0
IGlzIGEgc3RydWN0dXJlZCBjbG9uZSBvZiB0aGUgaGlzdG9yeSBpdGVtJ3Mgc3RhdGUgb2JqZWN0
LgorICAgICAgICBzaG91bGRCZVRydWUoImhpc3Rvcnkuc3RhdGUgIT09IHN0YXRlT2JqZWN0Iik7
CisgICAgICAgIC8vIE91ciBzdG9yZWQgcmVmZXJlbmNlIHRvIHN0YXRlT2JqZWN0IHdpbGwgbm90
IG1hdGNoIHRoZSBzdGF0ZSBvYmplY3QgaW4gdGhpcyBwb3Agc3RhdGUgZXZlbnQsIGFzIGl0IGlz
IHRoZSBzYW1lIGFzIGhpc3Rvcnkuc3RhdGUgd2hpY2ggaXMgYSBzdHJ1Y3R1cmVkIGNsb25lIG9m
IHRoZSBoaXN0b3J5IGl0ZW0ncyBzdGF0ZSBvYmplY3QuCisgICAgICAgIHNob3VsZEJlVHJ1ZSgi
cG9wU3RhdGVFdmVudC5zdGF0ZSAhPT0gc3RhdGVPYmplY3QiKTsKKyAgICAgICAgLy8gVGhlIGV2
ZW50J3Mgc3RhdGUgb2JqZWN0IGFuZCB0aGUgY3VycmVudCBzdGF0ZSBvYmplY3Qgc2hvdWxkIG1h
dGNoLgorICAgICAgICBzaG91bGRCZVRydWUoInBvcFN0YXRlRXZlbnQuc3RhdGUgPT09IGhpc3Rv
cnkuc3RhdGUiKTsgLy8gVGhpcyBmYWlscyBmb3Igbm93LCBuZWVkcyB0byBiZSBmaXhlZC4KKwor
ICAgICAgICB2YXIgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOworICAgICAg
ICBzLnNyYyA9ICIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIjsKKyAgICAgICAg
ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzKTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2hK
U1Rlc3QsIDApOworICAgIH0KKworICAgIC8vIE5vdyBsZXQncyBnbyBiYWNrIHRvIG91ciBvcmln
aW5hbCBoaXN0b3J5IGVudHJ5IHdoaWNoIGhhcyBhIHN0YXRlIG9iamVjdCB0aGF0IHdlJ3ZlIHN0
b3JlZCBhIHJlZmVyZW5jZSB0byBhbHJlYWR5LgorICAgIC8vIFRoaXMgd2lsbCBmaXJlIG91ciBw
b3BzdGF0ZSBldmVudCBoYW5kbGVyIGFib3ZlLgorICAgIGhpc3RvcnkuYmFjaygpOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125274</attachid>
            <date>2012-02-03 00:03:45 -0800</date>
            <delta_ts>2012-02-08 00:16:55 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>bug-76035-20120203000344.patch</filename>
            <type>text/plain</type>
            <size>16039</size>
            <attacher name="Pablo Flouret">pf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1OTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTRhZWViMjMzYmY0YTE0
MjViN2FmNzZiZWJkZWVhMzRmZDVmMWNlNS4uMDRlNjlmZDI0NmY3ODFiYWM1OWFjYzJlODhiMDBh
NWFhYThjNTdhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTAxLTMxICBQYWJs
byBGbG91cmV0ICA8cGFibG9mQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBBZGQgc3RhdGUgYXR0
cmlidXRlIHRvIGhpc3RvcnkncyBkb20gaW50ZXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogZmFzdC9sb2FkZXIvc3RhdGVvYmplY3Rz
L3N0YXRlLWF0dHJpYnV0ZS1vYmplY3QtdHlwZXMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9s
b2FkZXIvc3RhdGVvYmplY3RzL3N0YXRlLWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6YXRp
b24uaHRtbAorCisgICAgICAgICogYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTSGlzdG9yeTo6c3RhdGUpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0hpc3Rvcnk6OnB1c2hTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0hpc3Rvcnk6OnJlcGxhY2VTdGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SGlzdG9yeUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEhpc3Rvcnk6OnN0YXRl
QWNjZXNzb3JHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OEhpc3Rvcnk6OnB1c2hTdGF0ZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4SGlzdG9y
eTo6cmVwbGFjZVN0YXRlQ2FsbGJhY2spOgorICAgICAgICAqIHBhZ2UvSGlzdG9yeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIaXN0b3J5OjpIaXN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6Okhp
c3Rvcnk6OnN0YXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SGlz
dG9yeTo6c3RhdGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5OjpzdGF0ZUNo
YW5nZWQpOgorICAgICAgICAqIHBhZ2UvSGlzdG9yeS5oOgorICAgICAgICAoSGlzdG9yeSk6Cisg
ICAgICAgICgpOgorICAgICAgICAqIHBhZ2UvSGlzdG9yeS5pZGw6CisKIDIwMTItMDEtMjYgIFBh
YmxvIEZsb3VyZXQgIDxwYWJsb2ZAbW90b3JvbGEuY29tPgogCiAgICAgICAgIEZpeCBiYWQgY29k
ZSBnZW5lcmF0ZWQgYnkgdGhlIEpTQyBpZGwgY29kZSBnZW5lcmF0b3IgZm9yIFtDYWNoZWRBdHRy
aWJ1dGVdIGF0dHJpYnV0ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSGlzdG9yeUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3Rv
cnlDdXN0b20uY3BwCmluZGV4IDcyZWE1NDI0YzdjMTJmM2E2NzJiYzdkNzM5ZTExZGVkZmI0ODE4
YzcuLmUxMWI5NTcxZGJkNmJjZjE5M2U4ZmEzZjg4ZWI3NzNmNWQzNmRjMGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcApAQCAtMTY0LDYgKzE2
NCwyMCBAQCB2b2lkIEpTSGlzdG9yeTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TgogICAgIEJhc2U6OmdldE93blByb3BlcnR5
TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKK0pTVmFs
dWUgSlNIaXN0b3J5OjpzdGF0ZShFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0Cit7CisgICAgSGlzdG9y
eSogaGlzdG9yeSA9IHN0YXRpY19jYXN0PEhpc3RvcnkqPihpbXBsKCkpOworCisgICAgSlNWYWx1
ZSBjYWNoZWRWYWx1ZSA9IG1fc3RhdGUuZ2V0KCk7CisgICAgaWYgKCFjYWNoZWRWYWx1ZS5pc0Vt
cHR5KCkgJiYgIWhpc3RvcnktPnN0YXRlQ2hhbmdlZCgpKQorICAgICAgICByZXR1cm4gY2FjaGVk
VmFsdWU7CisKKyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHNlcmlhbGl6ZWQgPSBoaXN0b3J5
LT5zdGF0ZSgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gc2VyaWFsaXplZCA/IHNlcmlhbGl6ZWQt
PmRlc2VyaWFsaXplKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOworICAgIGNv
bnN0X2Nhc3Q8SlNIaXN0b3J5Kj4odGhpcyktPm1fc3RhdGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBKU1ZhbHVlIEpTSGlz
dG9yeTo6cHVzaFN0YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBoaXN0b3J5U3RhdGUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwgMCk7CkBAIC0xODUsNiArMTk5LDggQEAgSlNWYWx1
ZSBKU0hpc3Rvcnk6OnB1c2hTdGF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaW1wbCgpLT5zdGF0
ZU9iamVjdEFkZGVkKGhpc3RvcnlTdGF0ZS5yZWxlYXNlKCksIHRpdGxlLCB1cmwsIEhpc3Rvcnk6
OlN0YXRlT2JqZWN0UHVzaCwgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAK
KyAgICBtX3N0YXRlLmNsZWFyKCk7CisKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApA
QCAtMjA5LDYgKzIyNSw4IEBAIEpTVmFsdWUgSlNIaXN0b3J5OjpyZXBsYWNlU3RhdGUoRXhlY1N0
YXRlKiBleGVjKQogICAgIGltcGwoKS0+c3RhdGVPYmplY3RBZGRlZChoaXN0b3J5U3RhdGUucmVs
ZWFzZSgpLCB0aXRsZSwgdXJsLCBIaXN0b3J5OjpTdGF0ZU9iamVjdFJlcGxhY2UsIGVjKTsKICAg
ICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogCisgICAgbV9zdGF0ZS5jbGVhcigpOworCiAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhpc3RvcnlDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHAKaW5kZXggODk1NjEwOTBjYTE0
OWRiZDFlZjcwMzZhOTFjZDNhOWE3ZWZiYTY4Yi4uYTFiZDc2YjJhYmU0MDYzZWVhN2M2NWNjNzdl
NmE3ZDA5MzIzOWZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHAKQEAgLTQxLDYgKzQxLDI0IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SGlzdG9yeTo6c3RhdGVBY2Nl
c3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29y
SW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5IaXN0b3J5LnN0YXRlIik7CisgICAg
SGlzdG9yeSogaGlzdG9yeSA9IFY4SGlzdG9yeTo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisK
KyAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHByb3BlcnR5TmFtZSA9IHY4OjpTdHJpbmc6Ok5l
d1N5bWJvbCgic3RhdGUiKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSBpbmZv
LkhvbGRlcigpLT5HZXRIaWRkZW5WYWx1ZShwcm9wZXJ0eU5hbWUpOworCisgICAgaWYgKCF2YWx1
ZS5Jc0VtcHR5KCkgJiYgIWhpc3RvcnktPnN0YXRlQ2hhbmdlZCgpKQorICAgICAgICByZXR1cm4g
dmFsdWU7CisKKyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHNlcmlhbGl6ZWQgPSBoaXN0b3J5
LT5zdGF0ZSgpOworICAgIHZhbHVlID0gc2VyaWFsaXplZCA/IHNlcmlhbGl6ZWQtPmRlc2VyaWFs
aXplKCkgOiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjg6Ok51bGwoKSk7CisgICAgaW5mby5Ib2xk
ZXIoKS0+U2V0SGlkZGVuVmFsdWUocHJvcGVydHlOYW1lLCB2YWx1ZSk7CisKKyAgICByZXR1cm4g
dmFsdWU7Cit9CisKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhpc3Rvcnk6OnB1c2hTdGF0ZUNh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgYm9vbCBkaWRUaHJvdyA9
IGZhbHNlOwpAQCAtNjIsNiArODAsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIaXN0b3J5
OjpwdXNoU3RhdGVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwogICAgIEhpc3RvcnkqIGhpc3RvcnkgPSBWOEhpc3Rvcnk6OnRvTmF0
aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIGhpc3RvcnktPnN0YXRlT2JqZWN0QWRkZWQoaGlzdG9y
eVN0YXRlLnJlbGVhc2UoKSwgdGl0bGUsIHVybCwgSGlzdG9yeTo6U3RhdGVPYmplY3RQdXNoLCBl
Yyk7CisgICAgYXJncy5Ib2xkZXIoKS0+RGVsZXRlSGlkZGVuVmFsdWUodjg6OlN0cmluZzo6TmV3
U3ltYm9sKCJzdGF0ZSIpKTsKICAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7CiB9CiAKQEAgLTg2
LDYgKzEwNSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhpc3Rvcnk6OnJlcGxhY2VTdGF0
ZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAgICAgSGlzdG9yeSogaGlzdG9yeSA9IFY4SGlzdG9yeTo6dG9OYXRpdmUoYXJncy5I
b2xkZXIoKSk7CiAgICAgaGlzdG9yeS0+c3RhdGVPYmplY3RBZGRlZChoaXN0b3J5U3RhdGUucmVs
ZWFzZSgpLCB0aXRsZSwgdXJsLCBIaXN0b3J5OjpTdGF0ZU9iamVjdFJlcGxhY2UsIGVjKTsKKyAg
ICBhcmdzLkhvbGRlcigpLT5EZWxldGVIaWRkZW5WYWx1ZSh2ODo6U3RyaW5nOjpOZXdTeW1ib2wo
InN0YXRlIikpOwogICAgIHJldHVybiB0aHJvd0Vycm9yKGVjKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlz
dG9yeS5jcHAKaW5kZXggMWY1YTM5ZjI4NzU4NGY3YzI3NDhiMzNlMTA5OWU2NjRkMTkyYWU2OC4u
YTFmOWEwNWY2NjFjMTNmZjJhZDZkNjI5ZWE4N2FlNzRlODVhMmFmYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hp
c3RvcnkuY3BwCkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSGlzdG9y
eTo6SGlzdG9yeShGcmFtZSogZnJhbWUpCiAgICAgOiBET01XaW5kb3dQcm9wZXJ0eShmcmFtZSkK
KyAgICAsIG1fbGFzdFN0YXRlT2JqZWN0UmVxdWVzdGVkKDApCiB7CiB9CiAKQEAgLTU0LDYgKzU1
LDI4IEBAIHVuc2lnbmVkIEhpc3Rvcnk6Omxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZnJh
bWUtPnBhZ2UoKS0+YmFja0ZvcndhcmQoKS0+Y291bnQoKTsKIH0KIAorU2VyaWFsaXplZFNjcmlw
dFZhbHVlKiBIaXN0b3J5OjpzdGF0ZSgpCit7CisgICAgbV9sYXN0U3RhdGVPYmplY3RSZXF1ZXN0
ZWQgPSBzdGF0ZUludGVybmFsKCk7CisgICAgcmV0dXJuIG1fbGFzdFN0YXRlT2JqZWN0UmVxdWVz
dGVkOworfQorCitTZXJpYWxpemVkU2NyaXB0VmFsdWUqIEhpc3Rvcnk6OnN0YXRlSW50ZXJuYWwo
KSBjb25zdAoreworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp
ZiAoSGlzdG9yeUl0ZW0qIGhpc3RvcnlJdGVtID0gbV9mcmFtZS0+bG9hZGVyKCktPmhpc3Rvcnko
KS0+Y3VycmVudEl0ZW0oKSkKKyAgICAgICAgcmV0dXJuIGhpc3RvcnlJdGVtLT5zdGF0ZU9iamVj
dCgpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgSGlzdG9yeTo6c3RhdGVDaGFuZ2VkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXN0U3RhdGVPYmplY3RSZXF1ZXN0ZWQgIT0gc3RhdGVJ
bnRlcm5hbCgpOworfQorCiB2b2lkIEhpc3Rvcnk6OmJhY2soKQogewogICAgIGdvKC0xKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9IaXN0b3J5LmgKaW5kZXggYmQ1MGZjY2QyYjg2MWQ5ZTY0MThlOTc0ZjQyZGZiMmIyYjVm
OTFjZS4uYmQ2ZjZhYTIxMzE1ZmE1NWZlZWRjNDUyN2QwZDMyY2IzOTBjMmU1OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9IaXN0b3J5LmgKQEAgLTQ0LDYgKzQ0LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEhpc3Rvcnk+IGNyZWF0ZShGcmFtZSogZnJhbWUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBI
aXN0b3J5KGZyYW1lKSk7IH0KIAogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSogc3RhdGUoKTsKKyAgICBib29sIHN0YXRlQ2hhbmdlZCgpIGNv
bnN0OwogICAgIHZvaWQgYmFjaygpOwogICAgIHZvaWQgZm9yd2FyZCgpOwogICAgIHZvaWQgZ28o
aW50IGRpc3RhbmNlKTsKQEAgLTYyLDYgKzY0LDEwIEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQg
SGlzdG9yeShGcmFtZSopOwogCiAgICAgS1VSTCB1cmxGb3JTdGF0ZShjb25zdCBTdHJpbmcmIHVy
bCk7CisKKyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHN0YXRlSW50ZXJuYWwoKSBjb25zdDsK
KworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogbV9sYXN0U3RhdGVPYmplY3RSZXF1ZXN0ZWQ7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0hpc3RvcnkuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmlkbAppbmRl
eCBmZjM3MDFlZDI3NmQ0ZjU2OThkYTZhMDUzMGUwNjYzODBhMzNiMWMxLi42Nzc5NDU4ZWVmYTk1
ZDE2Njg4MTJkNWFlN2NlNDQ0YmFkMWQ5MWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0hpc3RvcnkuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5pZGwKQEAg
LTM3LDYgKzM3LDcgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIE9taXRDb25zdHJ1Y3Rvcgog
ICAgIF0gSGlzdG9yeSB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25n
IGxlbmd0aDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDYWNoZWRBdHRyaWJ1dGUsIEN1
c3RvbV0gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHN0YXRlOwogCiAgICAgICAgIFtEb05vdENoZWNr
RG9tYWluU2VjdXJpdHksIENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIHZvaWQgYmFj
aygpOwogICAgICAgICBbRG9Ob3RDaGVja0RvbWFpblNlY3VyaXR5LCBDYWxsV2l0aD1TY3JpcHRF
eGVjdXRpb25Db250ZXh0XSB2b2lkIGZvcndhcmQoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1ZWU2YjVjODJhZGJhYTM5
OWU3MTA1NzVmNjNlY2FiNDQ1Yjc5ZmUzLi4zOWE3OGJjMTQyMWNjMzAxNmZkNTI1MDk4ZjRmNDY4
Y2VmNTYwMGU4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDEtMzEgIFBhYmxvIEZsb3Vy
ZXQgIDxwYWJsb2ZAbW90b3JvbGEuY29tPgorCisgICAgICAgIEFkZCBzdGF0ZSBhdHRyaWJ1dGUg
dG8gaGlzdG9yeSdzIGRvbSBpbnRlcmZhY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03NjAzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3N0YXRlLWF0dHJp
YnV0ZS1vYmplY3QtdHlwZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2xv
YWRlci9zdGF0ZW9iamVjdHMvc3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBlcy5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvc3RhdGUtYXR0cmlidXRlLW9u
bHktb25lLWRlc2VyaWFsaXphdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9zdGF0ZS1hdHRyaWJ1dGUtb25seS1vbmUtZGVzZXJpYWxp
emF0aW9uLmh0bWw6IEFkZGVkLgorCiAyMDEyLTAxLTI1ICBMZXZpIFdlaW50cmF1YiAgPGxldml3
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBMYXlvdXQgVGVzdCBmYXN0L2pzL2RmZy11aW50MzJh
cnJheS1vdmVyZmxvdy12YWx1ZXMuaHRtbCBpcyBzbG93IG9uIENocm9taXVtIERlYnVnIGJvdHMK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9zdGF0ZS1h
dHRyaWJ1dGUtb2JqZWN0LXR5cGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbG9h
ZGVyL3N0YXRlb2JqZWN0cy9zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lMDQyMTY5ZDM2MGRlNjgzMjI5NjIzNTA2NzE0OWM4MTA1NWYwZWY5Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3N0
YXRlLWF0dHJpYnV0ZS1vYmplY3QtdHlwZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjUgQEAK
K1RoaXMgdGVzdCBjYWxscyBwdXNoU3RhdGUgd2l0aCBzdGF0ZSBvYmplY3RzIG9mIGFsbCB0aGUg
ZGlmZmVyZW50IG9iamVjdCB0eXBlcyBzdXBwb3J0ZWQgYnkgdGhlIEhUTUw1ICJpbnRlcm5hbCBz
dHJ1Y3R1cmVkIGNsb25pbmcgYWxnb3JpdGhtIiBhbmQgbWFrZXMgc3VyZSB0aGUgc3RhdGUgYXR0
cmlidXRlIHJldHVybnMgdGhlIGV4cGVjdGVkIG9iamVjdHMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitQQVNTIGhpc3Rvcnkuc3RhdGUgaXMgZGVmaW5lZC4KKworaGlzdG9yeS5z
dGF0ZSBzaG91bGQgaW5pdGlhbGx5IGJlIG51bGwuCitQQVNTIGhpc3Rvcnkuc3RhdGUgaXMgbnVs
bAorCitQQVNTIGhpc3Rvcnkuc3RhdGUgaXMgdW5kZWZpbmVkLgorUEFTUyBoaXN0b3J5LnN0YXRl
IGlzIG51bGwKK1BBU1MgaGlzdG9yeS5zdGF0ZSBpcyBmYWxzZQorUEFTUyBoaXN0b3J5LnN0YXRl
IGlzIHRydWUKK1BBU1MgaGlzdG9yeS5zdGF0ZSBpcyA0MgorUEFTUyBoaXN0b3J5LnN0YXRlIGlz
ICJTdHJpbmciCitQQVNTIGhpc3Rvcnkuc3RhdGUgPT0gJ1dlZCBEZWMgMzEgMTk2OSAxNjowMDow
MCBHTVQtMDgwMCAoUFNUKScgaXMgdHJ1ZQorUEFTUyBoaXN0b3J5LnN0YXRlID09ICcvZm9vL2dp
JyBpcyB0cnVlCitQQVNTIGhpc3Rvcnkuc3RhdGUgPT0gJycgaXMgdHJ1ZQorUEFTUyBoaXN0b3J5
LnN0YXRlID09ICdbb2JqZWN0IE9iamVjdF0nIGlzIHRydWUKK1BBU1MgaGlzdG9yeS5zdGF0ZSA9
PSAnW29iamVjdCBJbWFnZURhdGFdJyBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9s
b2FkZXIvc3RhdGVvYmplY3RzL3N0YXRlLWF0dHJpYnV0ZS1vYmplY3QtdHlwZXMuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0
LXR5cGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTZiOWFiYjJlZDYxNThhZDBiNjdhNWEyMzE3Nzg1MWU2
N2M0N2IyOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRl
b2JqZWN0cy9zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLmh0bWwKQEAgLTAsMCArMSw0NCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkLz4KKzxib2R5
PgorPHNjcmlwdD4KKyAgICBkZXNjcmlwdGlvbignVGhpcyB0ZXN0IGNhbGxzIHB1c2hTdGF0ZSB3
aXRoIHN0YXRlIG9iamVjdHMgb2YgYWxsIHRoZSBkaWZmZXJlbnQgb2JqZWN0IHR5cGVzIHN1cHBv
cnRlZCBieSB0aGUgSFRNTDUgImludGVybmFsIHN0cnVjdHVyZWQgY2xvbmluZyBhbGdvcml0aG0i
IGFuZCBtYWtlcyBzdXJlIHRoZSBzdGF0ZSBhdHRyaWJ1dGUgcmV0dXJucyB0aGUgZXhwZWN0ZWQg
b2JqZWN0cy4nKTsKKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmNsZWFyQmFja0ZvcndhcmRMaXN0KCk7CisKKyAgICBz
aG91bGRCZURlZmluZWQoImhpc3Rvcnkuc3RhdGUiKTsKKyAgICBkZWJ1ZygiXG5oaXN0b3J5LnN0
YXRlIHNob3VsZCBpbml0aWFsbHkgYmUgbnVsbC4iKTsKKyAgICBzaG91bGRCZU51bGwoImhpc3Rv
cnkuc3RhdGUiKTsKKyAgICBkZWJ1ZygiIik7CisKKyAgICBoaXN0b3J5LnB1c2hTdGF0ZSh1bmRl
ZmluZWQsICJ1bmRlZmluZWQgZW50cnkiKTsKKyAgICBzaG91bGRCZVVuZGVmaW5lZCgiaGlzdG9y
eS5zdGF0ZSIpOworICAgIGhpc3RvcnkucHVzaFN0YXRlKG51bGwsICJudWxsIGVudHJ5Iik7Cisg
ICAgc2hvdWxkQmVOdWxsKCJoaXN0b3J5LnN0YXRlIik7CisgICAgaGlzdG9yeS5wdXNoU3RhdGUo
ZmFsc2UsICJmYWxzZSBlbnRyeSIpOworICAgIHNob3VsZEJlRmFsc2UoImhpc3Rvcnkuc3RhdGUi
KTsKKyAgICBoaXN0b3J5LnB1c2hTdGF0ZSh0cnVlLCAidHJ1ZSBlbnRyeSIpOworICAgIHNob3Vs
ZEJlVHJ1ZSgiaGlzdG9yeS5zdGF0ZSIpOworICAgIGhpc3RvcnkucHVzaFN0YXRlKDQyLCAiTnVt
YmVyIGVudHJ5Iik7CisgICAgc2hvdWxkQmUoImhpc3Rvcnkuc3RhdGUiLCAiNDIiKTsKKyAgICBo
aXN0b3J5LnB1c2hTdGF0ZSgiU3RyaW5nIiwgIlN0cmluZyBlbnRyeSIpOworICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygiaGlzdG9yeS5zdGF0ZSIsICJTdHJpbmciKTsKKyAgICBoaXN0b3J5LnB1
c2hTdGF0ZShuZXcgRGF0ZSgwKSwgIkRhdGUgZW50cnkiKTsKKyAgICBzaG91bGRFdmFsdWF0ZVRv
KCJoaXN0b3J5LnN0YXRlIiwgbmV3IERhdGUoMCkpOworICAgIGhpc3RvcnkucHVzaFN0YXRlKG5l
dyBSZWdFeHAoImZvbyIsICJnaSIpLCAiUmVnRXhwIGVudHJ5Iik7CisgICAgc2hvdWxkRXZhbHVh
dGVUbygiaGlzdG9yeS5zdGF0ZSIsIG5ldyBSZWdFeHAoImZvbyIsICJnaSIpKTsKKyAgICBoaXN0
b3J5LnB1c2hTdGF0ZShuZXcgQXJyYXksICJBcnJheSBlbnRyeSIpOworICAgIHNob3VsZEV2YWx1
YXRlVG8oImhpc3Rvcnkuc3RhdGUiLCBuZXcgQXJyYXkpOworICAgIGhpc3RvcnkucHVzaFN0YXRl
KG5ldyBPYmplY3QsICJPYmplY3QgZW50cnkiKTsKKyAgICBzaG91bGRFdmFsdWF0ZVRvKCJoaXN0
b3J5LnN0YXRlIiwgbmV3IE9iamVjdCk7CisgICAgaGlzdG9yeS5wdXNoU3RhdGUoZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKS5jcmVhdGVJbWFnZURhdGEo
MTAsMTApLCAiSW1hZ2VEYXRhIGVudHJ5Iik7CisgICAgc2hvdWxkRXZhbHVhdGVUbygiaGlzdG9y
eS5zdGF0ZSIsIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJk
IikuY3JlYXRlSW1hZ2VEYXRhKDEwLDEwKSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3N0
YXRlLWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6YXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3N0YXRlLWF0dHJpYnV0ZS1vbmx5LW9u
ZS1kZXNlcmlhbGl6YXRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzZDAxMTdmOTlkZDhm
YWJhNmJkNTI0NGZkNzQ1Yzc0ZGE2OWRmYzAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvc3RhdGUtYXR0cmlidXRlLW9ubHktb25lLWRlc2Vy
aWFsaXphdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBAQAorTWFrZSBzdXJlIHRoZSBz
YW1lIGRlc2VyaWFsaXphdGlvbiBvZiB0aGUgc3RhdGUgb2JqZWN0IGlzIHVzZWQgZXZlcnkgdGlt
ZSAoYm90aCBpbiB0aGUgaGlzdG9yeSBvYmplY3QgYW5kIHBvcHN0YXRlIGV2ZW50cykuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGhpc3Rvcnkuc3RhdGUgaXMgZGVmaW5l
ZC4KK1BBU1MgaGlzdG9yeS5zdGF0ZSA9PT0gaGlzdG9yeS5zdGF0ZSBpcyB0cnVlCitQQVNTIGhp
c3Rvcnkuc3RhdGUgIT09IHN0YXRlT2JqZWN0IGlzIHRydWUKK1BBU1MgaGlzdG9yeS5zdGF0ZSA9
PT0gc3RhdGVPYmplY3QgaXMgdHJ1ZQorCitJbnNpZGUgcG9wc3RhdGUgZXZlbnQKKworUEFTUyBo
aXN0b3J5LnN0YXRlICE9PSBzdGF0ZU9iamVjdCBpcyB0cnVlCitQQVNTIHBvcFN0YXRlRXZlbnQu
c3RhdGUgIT09IHN0YXRlT2JqZWN0IGlzIHRydWUKK0ZBSUwgcG9wU3RhdGVFdmVudC5zdGF0ZSA9
PT0gaGlzdG9yeS5zdGF0ZSBzaG91bGQgYmUgdHJ1ZS4gV2FzIGZhbHNlLgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9zdGF0ZS1hdHRyaWJ1dGUtb25seS1vbmUt
ZGVzZXJpYWxpemF0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVj
dHMvc3RhdGUtYXR0cmlidXRlLW9ubHktb25lLWRlc2VyaWFsaXphdGlvbi5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjA4MzcyMWQzODM0ODk2MDAyYjZiZjViMjM1OTExMDJiMWMzZmVhZGMKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvc3RhdGUtYXR0cmli
dXRlLW9ubHktb25lLWRlc2VyaWFsaXphdGlvbi5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZC8+Cis8Ym9keT4KKzxzY3Jp
cHQ+CisgICAgZGVzY3JpcHRpb24oIk1ha2Ugc3VyZSB0aGUgc2FtZSBkZXNlcmlhbGl6YXRpb24g
b2YgdGhlIHN0YXRlIG9iamVjdCBpcyB1c2VkIGV2ZXJ5IHRpbWUgKGJvdGggaW4gdGhlIGhpc3Rv
cnkgb2JqZWN0IGFuZCBwb3BzdGF0ZSBldmVudHMpLiIpOworCisgICAgd2luZG93LmpzVGVzdElz
QXN5bmMgPSB0cnVlOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuY2xlYXJCYWNrRm9yd2FyZExpc3QoKTsKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIHNo
b3VsZEJlRGVmaW5lZCgiaGlzdG9yeS5zdGF0ZSIpOworCisgICAgLy8gQ3JlYXRlIGEgbmV3IG9i
amVjdC4KKyAgICB2YXIgc3RhdGVPYmplY3QgPSBbImEiXTsKKworICAgIC8vIFVzZSBpdCBhcyB0
aGUgc3RhdGUgb2JqZWN0IGluIGEgcmVwbGFjZVN0YXRlLiAgVGhpcyBjbG9uZXMgdGhlIG9iamVj
dC4KKyAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShzdGF0ZU9iamVjdCwgbnVsbCwgbnVsbCk7CisK
KyAgICBzaG91bGRCZVRydWUoImhpc3Rvcnkuc3RhdGUgPT09IGhpc3Rvcnkuc3RhdGUiKTsKKwor
ICAgIC8vIFNpbmNlIHRoZSBhY3R1YWwgaGlzdG9yeS5zdGF0ZSBpcyBhIHN0cnVjdHVyZWQgY2xv
bmUsIGl0IHNob3VsZCBub3QgbWF0Y2ggb3VyIG9yaWdpbmFsIG9iamVjdC4KKyAgICBzaG91bGRC
ZVRydWUoImhpc3Rvcnkuc3RhdGUgIT09IHN0YXRlT2JqZWN0Iik7CisKKyAgICAvLyBOb3cgbGV0
J3MgcmVmZXRjaCBhIGNvcHkgb2YgaGlzdG9yeS5zdGF0ZSB0byBzdG9yZTsKKyAgICBzdGF0ZU9i
amVjdCA9IGhpc3Rvcnkuc3RhdGU7CisKKyAgICAvLyBPdXIgcmVmZXJlbmNlIGFuZCB0aGUgaGlz
dG9yeS5zdGF0ZSBpdHNlbGYgc2hvdWxkIGJlIHRoZSBzYW1lLiAgVGhpcyBpcyBub3cgQWRhbSdz
IG9yaWdpbmFsIGFzc2VydGlvbi4KKyAgICBzaG91bGRCZVRydWUoImhpc3Rvcnkuc3RhdGUgPT09
IHN0YXRlT2JqZWN0Iik7CisKKyAgICAvLyBOb3cgbGV0J3MgZG8gYSBwdXNoc3RhdGUgdG8gYWRk
IGEgaGlzdG9yeSBlbnRyeS4KKyAgICBoaXN0b3J5LnB1c2hTdGF0ZShudWxsLCBudWxsLCBudWxs
KTsKKworICAgIC8vIE5vdyBhZGQgYSBoYW5kbGVyIGZvciB0aGUgcG9wc3RhdGUgZXZlbnQuCisg
ICAgdmFyIHBvcFN0YXRlRXZlbnQ7CisgICAgd2luZG93Lm9ucG9wc3RhdGUgPSBmdW5jdGlvbihl
KSB7CisgICAgICAgIGRlYnVnKCJcbkluc2lkZSBwb3BzdGF0ZSBldmVudFxuIik7CisgICAgICAg
IHBvcFN0YXRlRXZlbnQgPSBlOworICAgICAgICAvLyBPdXIgc3RvcmVkIHJlZmVyZW5jZSB0byBz
dGF0ZU9iamVjdCB3aWxsIG5vdCBtYXRjaCB0aGUgY3VycmVudCBzdGF0ZSBvYmplY3QsIGFzIGl0
IGlzIGEgc3RydWN0dXJlZCBjbG9uZSBvZiB0aGUgaGlzdG9yeSBpdGVtJ3Mgc3RhdGUgb2JqZWN0
LgorICAgICAgICBzaG91bGRCZVRydWUoImhpc3Rvcnkuc3RhdGUgIT09IHN0YXRlT2JqZWN0Iik7
CisgICAgICAgIC8vIE91ciBzdG9yZWQgcmVmZXJlbmNlIHRvIHN0YXRlT2JqZWN0IHdpbGwgbm90
IG1hdGNoIHRoZSBzdGF0ZSBvYmplY3QgaW4gdGhpcyBwb3Agc3RhdGUgZXZlbnQsIGFzIGl0IGlz
IHRoZSBzYW1lIGFzIGhpc3Rvcnkuc3RhdGUgd2hpY2ggaXMgYSBzdHJ1Y3R1cmVkIGNsb25lIG9m
IHRoZSBoaXN0b3J5IGl0ZW0ncyBzdGF0ZSBvYmplY3QuCisgICAgICAgIHNob3VsZEJlVHJ1ZSgi
cG9wU3RhdGVFdmVudC5zdGF0ZSAhPT0gc3RhdGVPYmplY3QiKTsKKyAgICAgICAgLy8gVGhlIGV2
ZW50J3Mgc3RhdGUgb2JqZWN0IGFuZCB0aGUgY3VycmVudCBzdGF0ZSBvYmplY3Qgc2hvdWxkIG1h
dGNoLgorICAgICAgICBzaG91bGRCZVRydWUoInBvcFN0YXRlRXZlbnQuc3RhdGUgPT09IGhpc3Rv
cnkuc3RhdGUiKTsgLy8gVGhpcyBmYWlscyBmb3Igbm93LCBuZWVkcyB0byBiZSBmaXhlZC4KKwor
ICAgICAgICB2YXIgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOworICAgICAg
ICBzLnNyYyA9ICIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIjsKKyAgICAgICAg
ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzKTsKKyAgICAgICAgc2V0VGltZW91dChmaW5pc2hK
U1Rlc3QsIDApOworICAgIH0KKworICAgIC8vIE5vdyBsZXQncyBnbyBiYWNrIHRvIG91ciBvcmln
aW5hbCBoaXN0b3J5IGVudHJ5IHdoaWNoIGhhcyBhIHN0YXRlIG9iamVjdCB0aGF0IHdlJ3ZlIHN0
b3JlZCBhIHJlZmVyZW5jZSB0byBhbHJlYWR5LgorICAgIC8vIFRoaXMgd2lsbCBmaXJlIG91ciBw
b3BzdGF0ZSBldmVudCBoYW5kbGVyIGFib3ZlLgorICAgIGhpc3RvcnkuYmFjaygpOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126022</attachid>
            <date>2012-02-08 00:17:07 -0800</date>
            <delta_ts>2012-02-08 02:39:27 -0800</delta_ts>
            <desc>Fixed tests</desc>
            <filename>bug-76035-20120208001705.patch</filename>
            <type>text/plain</type>
            <size>16732</size>
            <attacher name="Pablo Flouret">pf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MDIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjcxMWI1NzY1MjU2NzA2
OGIwODFkOTc1YTY0YTc1NDBiZjRjZjRjYi4uMmNiY2YwYjc4OTM2NjkzYWNiOGJlOWI4NTkxM2Yx
ZjcyNjcxY2FhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAyLTA3ICBQYWJs
byBGbG91cmV0ICA8cGFibG9mQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBBZGQgc3RhdGUgYXR0
cmlidXRlIHRvIGhpc3RvcnkncyBkb20gaW50ZXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogZmFzdC9sb2FkZXIvc3RhdGVvYmplY3Rz
L3N0YXRlLWF0dHJpYnV0ZS1vYmplY3QtdHlwZXMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9s
b2FkZXIvc3RhdGVvYmplY3RzL3N0YXRlLWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6YXRp
b24uaHRtbAorCisgICAgICAgICogYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTSGlzdG9yeTo6c3RhdGUpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0hpc3Rvcnk6OnB1c2hTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0hpc3Rvcnk6OnJlcGxhY2VTdGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SGlzdG9yeUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEhpc3Rvcnk6OnN0YXRl
QWNjZXNzb3JHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OEhpc3Rvcnk6OnB1c2hTdGF0ZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4SGlzdG9y
eTo6cmVwbGFjZVN0YXRlQ2FsbGJhY2spOgorICAgICAgICAqIHBhZ2UvSGlzdG9yeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIaXN0b3J5OjpIaXN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6Okhp
c3Rvcnk6OnN0YXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SGlz
dG9yeTo6c3RhdGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5OjpzdGF0ZUNo
YW5nZWQpOgorICAgICAgICAqIHBhZ2UvSGlzdG9yeS5oOgorICAgICAgICAoSGlzdG9yeSk6Cisg
ICAgICAgICogcGFnZS9IaXN0b3J5LmlkbDoKKwogMjAxMi0wMi0wNyAgQ2hyaXMgUGFsbWVyICA8
cGFsbWVyQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmVzb2x2ZSBjcmFzaCBpbiBGcmFtZUxvYWRl
cjo6Y2hlY2tUaW1lckZpcmVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIaXN0b3J5Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlz
dG9yeUN1c3RvbS5jcHAKaW5kZXggMWFlZGI4NmY5OWM3MGU3Y2Y3ZGY4NGZlOTNhMjMxOTYwMjAx
YTVmZi4uNDgwNjU4YjUxMTgyYzJlY2UyOWVkNTdkZGVjYTM1YjI2YzI5ZTA4MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCkBAIC0xNjQsNiAr
MTY0LDIwIEBAIHZvaWQgSlNIaXN0b3J5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOCiAgICAgQmFzZTo6Z2V0T3duUHJvcGVy
dHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAorSlNW
YWx1ZSBKU0hpc3Rvcnk6OnN0YXRlKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKK3sKKyAgICBIaXN0
b3J5KiBoaXN0b3J5ID0gc3RhdGljX2Nhc3Q8SGlzdG9yeSo+KGltcGwoKSk7CisKKyAgICBKU1Zh
bHVlIGNhY2hlZFZhbHVlID0gbV9zdGF0ZS5nZXQoKTsKKyAgICBpZiAoIWNhY2hlZFZhbHVlLmlz
RW1wdHkoKSAmJiAhaGlzdG9yeS0+c3RhdGVDaGFuZ2VkKCkpCisgICAgICAgIHJldHVybiBjYWNo
ZWRWYWx1ZTsKKworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc2VyaWFsaXplZCA9IGhpc3Rv
cnktPnN0YXRlKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBzZXJpYWxpemVkID8gc2VyaWFsaXpl
ZC0+ZGVzZXJpYWxpemUoZXhlYywgZ2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7CisgICAg
Y29uc3RfY2FzdDxKU0hpc3RvcnkqPih0aGlzKS0+bV9zdGF0ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEpTVmFsdWUgSlNI
aXN0b3J5OjpwdXNoU3RhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFJlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IGhpc3RvcnlTdGF0ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCAwKTsKQEAgLTE4NSw2ICsxOTksOCBAQCBKU1Zh
bHVlIEpTSGlzdG9yeTo6cHVzaFN0YXRlKEV4ZWNTdGF0ZSogZXhlYykKICAgICBpbXBsKCktPnN0
YXRlT2JqZWN0QWRkZWQoaGlzdG9yeVN0YXRlLnJlbGVhc2UoKSwgdGl0bGUsIHVybCwgSGlzdG9y
eTo6U3RhdGVPYmplY3RQdXNoLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
IAorICAgIG1fc3RhdGUuY2xlYXIoKTsKKwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
CkBAIC0yMDksNiArMjI1LDggQEAgSlNWYWx1ZSBKU0hpc3Rvcnk6OnJlcGxhY2VTdGF0ZShFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgaW1wbCgpLT5zdGF0ZU9iamVjdEFkZGVkKGhpc3RvcnlTdGF0ZS5y
ZWxlYXNlKCksIHRpdGxlLCB1cmwsIEhpc3Rvcnk6OlN0YXRlT2JqZWN0UmVwbGFjZSwgZWMpOwog
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAKKyAgICBtX3N0YXRlLmNsZWFyKCk7CisK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIaXN0b3J5Q3VzdG9tLmNwcAppbmRleCA4OTU2MTA5MGNh
MTQ5ZGJkMWVmNzAzNmE5MWNkM2E5YTdlZmJhNjhiLi5hMWJkNzZiMmFiZTQwNjNlZWE3YzY1Y2M3
N2U2YTdkMDkzMjM5ZmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhIaXN0b3J5Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhIaXN0b3J5Q3VzdG9tLmNwcApAQCAtNDEsNiArNDEsMjQgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIaXN0b3J5OjpzdGF0ZUFj
Y2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLkhpc3Rvcnkuc3RhdGUiKTsKKyAg
ICBIaXN0b3J5KiBoaXN0b3J5ID0gVjhIaXN0b3J5Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsK
KworICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gcHJvcGVydHlOYW1lID0gdjg6OlN0cmluZzo6
TmV3U3ltYm9sKCJzdGF0ZSIpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSA9IGlu
Zm8uSG9sZGVyKCktPkdldEhpZGRlblZhbHVlKHByb3BlcnR5TmFtZSk7CisKKyAgICBpZiAoIXZh
bHVlLklzRW1wdHkoKSAmJiAhaGlzdG9yeS0+c3RhdGVDaGFuZ2VkKCkpCisgICAgICAgIHJldHVy
biB2YWx1ZTsKKworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc2VyaWFsaXplZCA9IGhpc3Rv
cnktPnN0YXRlKCk7CisgICAgdmFsdWUgPSBzZXJpYWxpemVkID8gc2VyaWFsaXplZC0+ZGVzZXJp
YWxpemUoKSA6IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2ODo6TnVsbCgpKTsKKyAgICBpbmZvLkhv
bGRlcigpLT5TZXRIaWRkZW5WYWx1ZShwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKworICAgIHJldHVy
biB2YWx1ZTsKK30KKwogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SGlzdG9yeTo6cHVzaFN0YXRl
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBib29sIGRpZFRocm93
ID0gZmFsc2U7CkBAIC02Miw2ICs4MCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhpc3Rv
cnk6OnB1c2hTdGF0ZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgSGlzdG9yeSogaGlzdG9yeSA9IFY4SGlzdG9yeTo6dG9O
YXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgaGlzdG9yeS0+c3RhdGVPYmplY3RBZGRlZChoaXN0
b3J5U3RhdGUucmVsZWFzZSgpLCB0aXRsZSwgdXJsLCBIaXN0b3J5OjpTdGF0ZU9iamVjdFB1c2gs
IGVjKTsKKyAgICBhcmdzLkhvbGRlcigpLT5EZWxldGVIaWRkZW5WYWx1ZSh2ODo6U3RyaW5nOjpO
ZXdTeW1ib2woInN0YXRlIikpOwogICAgIHJldHVybiB0aHJvd0Vycm9yKGVjKTsKIH0KIApAQCAt
ODYsNiArMTA1LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SGlzdG9yeTo6cmVwbGFjZVN0
YXRlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKICAgICBIaXN0b3J5KiBoaXN0b3J5ID0gVjhIaXN0b3J5Ojp0b05hdGl2ZShhcmdz
LkhvbGRlcigpKTsKICAgICBoaXN0b3J5LT5zdGF0ZU9iamVjdEFkZGVkKGhpc3RvcnlTdGF0ZS5y
ZWxlYXNlKCksIHRpdGxlLCB1cmwsIEhpc3Rvcnk6OlN0YXRlT2JqZWN0UmVwbGFjZSwgZWMpOwor
ICAgIGFyZ3MuSG9sZGVyKCktPkRlbGV0ZUhpZGRlblZhbHVlKHY4OjpTdHJpbmc6Ok5ld1N5bWJv
bCgic3RhdGUiKSk7CiAgICAgcmV0dXJuIHRocm93RXJyb3IoZWMpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9I
aXN0b3J5LmNwcAppbmRleCAxZjVhMzlmMjg3NTg0ZjdjMjc0OGIzM2UxMDk5ZTY2NGQxOTJhZTY4
Li5hMWY5YTA1ZjY2MWMxM2ZmMmFkNmQ2MjllYTg3YWU3NGU4NWEyYWZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
SGlzdG9yeS5jcHAKQEAgLTQyLDYgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBIaXN0
b3J5OjpIaXN0b3J5KEZyYW1lKiBmcmFtZSkKICAgICA6IERPTVdpbmRvd1Byb3BlcnR5KGZyYW1l
KQorICAgICwgbV9sYXN0U3RhdGVPYmplY3RSZXF1ZXN0ZWQoMCkKIHsKIH0KIApAQCAtNTQsNiAr
NTUsMjggQEAgdW5zaWduZWQgSGlzdG9yeTo6bGVuZ3RoKCkgY29uc3QKICAgICByZXR1cm4gbV9m
cmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5jb3VudCgpOwogfQogCitTZXJpYWxpemVkU2Ny
aXB0VmFsdWUqIEhpc3Rvcnk6OnN0YXRlKCkKK3sKKyAgICBtX2xhc3RTdGF0ZU9iamVjdFJlcXVl
c3RlZCA9IHN0YXRlSW50ZXJuYWwoKTsKKyAgICByZXR1cm4gbV9sYXN0U3RhdGVPYmplY3RSZXF1
ZXN0ZWQ7Cit9CisKK1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogSGlzdG9yeTo6c3RhdGVJbnRlcm5h
bCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGlmIChIaXN0b3J5SXRlbSogaGlzdG9yeUl0ZW0gPSBtX2ZyYW1lLT5sb2FkZXIoKS0+aGlzdG9y
eSgpLT5jdXJyZW50SXRlbSgpKQorICAgICAgICByZXR1cm4gaGlzdG9yeUl0ZW0tPnN0YXRlT2Jq
ZWN0KCk7CisKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBIaXN0b3J5OjpzdGF0ZUNoYW5nZWQo
KSBjb25zdAoreworICAgIHJldHVybiBtX2xhc3RTdGF0ZU9iamVjdFJlcXVlc3RlZCAhPSBzdGF0
ZUludGVybmFsKCk7Cit9CisKIHZvaWQgSGlzdG9yeTo6YmFjaygpCiB7CiAgICAgZ28oLTEpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0hpc3RvcnkuaAppbmRleCBiZDUwZmNjZDJiODYxZDllNjQxOGU5NzRmNDJkZmIyYjJi
NWY5MWNlLi5iZDZmNmFhMjEzMTVmYTU1ZmVlZGM0NTI3ZDBkMzJjYjM5MGMyZTU4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0hpc3RvcnkuaApAQCAtNDQsNiArNDQsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SGlzdG9yeT4gY3JlYXRlKEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IEhpc3RvcnkoZnJhbWUpKTsgfQogCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAg
U2VyaWFsaXplZFNjcmlwdFZhbHVlKiBzdGF0ZSgpOworICAgIGJvb2wgc3RhdGVDaGFuZ2VkKCkg
Y29uc3Q7CiAgICAgdm9pZCBiYWNrKCk7CiAgICAgdm9pZCBmb3J3YXJkKCk7CiAgICAgdm9pZCBn
byhpbnQgZGlzdGFuY2UpOwpAQCAtNjIsNiArNjQsMTAgQEAgcHJpdmF0ZToKICAgICBleHBsaWNp
dCBIaXN0b3J5KEZyYW1lKik7CiAKICAgICBLVVJMIHVybEZvclN0YXRlKGNvbnN0IFN0cmluZyYg
dXJsKTsKKworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc3RhdGVJbnRlcm5hbCgpIGNvbnN0
OworCisgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBtX2xhc3RTdGF0ZU9iamVjdFJlcXVlc3Rl
ZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvSGlzdG9yeS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuaWRsCmlu
ZGV4IGU1ZTdkNjg0NzEwY2ZmMzg1ZTE1Y2I4Mjg1ZTM4N2E2ZTBlMGU3ZTAuLjQ0Nzg3YmY5MGM1
NWIyMmU2YjA5MDljMjIyZjA5MjE1ZTc3YTJkOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvSGlzdG9yeS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmlkbApA
QCAtMzcsNiArMzcsNyBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgT21pdENvbnN0cnVjdG9y
CiAgICAgXSBIaXN0b3J5IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxv
bmcgbGVuZ3RoOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0NhY2hlZEF0dHJpYnV0ZSwg
Q3VzdG9tXSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgc3RhdGU7CiAKICAgICAgICAgW0RvTm90Q2hl
Y2tEb21haW5TZWN1cml0eSwgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gdm9pZCBi
YWNrKCk7CiAgICAgICAgIFtEb05vdENoZWNrRG9tYWluU2VjdXJpdHksIENhbGxXaXRoPVNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRdIHZvaWQgZm9yd2FyZCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDk4ZTAyZmVkOGY3MWM2
NjQzMDM1ZGQ1ZTZlNzc0NDMyNjc2M2FmYTQuLjdjNmM2MDY0NDAwMGZmYzRhOThjZWUxN2RjZjJl
MmM5MzI3MjcxNTQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0wMi0wNyAgUGFibG8gRmxv
dXJldCAgPHBhYmxvZkBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgQWRkIHN0YXRlIGF0dHJpYnV0
ZSB0byBoaXN0b3J5J3MgZG9tIGludGVyZmFjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2RvbS9XaW5kb3cvd2luZG93LWFwcGVuZGFnZXMt
Y2xlYXJlZC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9sb2FkZXIvc3RhdGVvYmplY3Rz
L3N0YXRlLWF0dHJpYnV0ZS1vYmplY3QtdHlwZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvc3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBl
cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvc3RhdGUt
YXR0cmlidXRlLW9ubHktb25lLWRlc2VyaWFsaXphdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9zdGF0ZS1hdHRyaWJ1dGUtb25seS1v
bmUtZGVzZXJpYWxpemF0aW9uLmh0bWw6IEFkZGVkLgorCiAyMDEyLTAyLTA3ICBDaHJpcyBQYWxt
ZXIgIDxwYWxtZXJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXNvbHZlIGNyYXNoIGluIEZyYW1l
TG9hZGVyOjpjaGVja1RpbWVyRmlyZWQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9XaW5kb3cvd2luZG93LWFwcGVuZGFnZXMtY2xlYXJlZC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LWFwcGVuZGFnZXMtY2xlYXJlZC1leHBlY3RlZC50
eHQKaW5kZXggODUwNmVmYTBjYTJlMWQwODg3MmI5NzIzZWJjZGE0MGViM2Y2NzUyOC4uN2I3NjE0
YzNlZjNlNDYwZTM4M2UxZWJkMTEyYmM0MGIxOTVjZmExNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1hcHBlbmRhZ2VzLWNsZWFyZWQtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctYXBwZW5kYWdlcy1jbGVh
cmVkLWV4cGVjdGVkLnR4dApAQCAtNCw2ICs0LDcgQEAgUEFTUyBoaXN0b3J5LmdvID09ICJMRUZU
T1ZFUiIgaXMgZmFsc2UKIFBBU1MgaGlzdG9yeS5sZW5ndGggPT0gIkxFRlRPVkVSIiBpcyBmYWxz
ZQogUEFTUyBoaXN0b3J5LnB1c2hTdGF0ZSA9PSAiTEVGVE9WRVIiIGlzIGZhbHNlCiBQQVNTIGhp
c3RvcnkucmVwbGFjZVN0YXRlID09ICJMRUZUT1ZFUiIgaXMgZmFsc2UKK1BBU1MgaGlzdG9yeS5z
dGF0ZSA9PSAiTEVGVE9WRVIiIGlzIGZhbHNlCiBQQVNTIGxvY2F0aW9uLmFzc2lnbiA9PSAiTEVG
VE9WRVIiIGlzIGZhbHNlCiBQQVNTIGxvY2F0aW9uLmhhc2ggPT0gIkxFRlRPVkVSIiBpcyBmYWxz
ZQogUEFTUyBsb2NhdGlvbi5ob3N0ID09ICJMRUZUT1ZFUiIgaXMgZmFsc2UKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9zdGF0ZS1hdHRyaWJ1dGUtb2Jq
ZWN0LXR5cGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2Jq
ZWN0cy9zdGF0ZS1hdHRyaWJ1dGUtb2JqZWN0LXR5cGVzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yMjUzMDZiMDk4NzY4NWQ3YmVkMDA1MWI2Njk3ZDBhYjFjYzZjMGQyCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3N0YXRlLWF0dHJpYnV0
ZS1vYmplY3QtdHlwZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjUgQEAKK1RoaXMgdGVzdCBj
YWxscyBwdXNoU3RhdGUgd2l0aCBzdGF0ZSBvYmplY3RzIG9mIGFsbCB0aGUgZGlmZmVyZW50IG9i
amVjdCB0eXBlcyBzdXBwb3J0ZWQgYnkgdGhlIEhUTUw1ICJpbnRlcm5hbCBzdHJ1Y3R1cmVkIGNs
b25pbmcgYWxnb3JpdGhtIiBhbmQgbWFrZXMgc3VyZSB0aGUgc3RhdGUgYXR0cmlidXRlIHJldHVy
bnMgdGhlIGV4cGVjdGVkIG9iamVjdHMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIGhpc3Rvcnkuc3RhdGUgaXMgZGVmaW5lZC4KKworaGlzdG9yeS5zdGF0ZSBzaG91bGQg
aW5pdGlhbGx5IGJlIG51bGwuCitQQVNTIGhpc3Rvcnkuc3RhdGUgaXMgbnVsbAorCitQQVNTIGhp
c3Rvcnkuc3RhdGUgaXMgdW5kZWZpbmVkLgorUEFTUyBoaXN0b3J5LnN0YXRlIGlzIG51bGwKK1BB
U1MgaGlzdG9yeS5zdGF0ZSBpcyBmYWxzZQorUEFTUyBoaXN0b3J5LnN0YXRlIGlzIHRydWUKK1BB
U1MgaGlzdG9yeS5zdGF0ZSBpcyA0MgorUEFTUyBoaXN0b3J5LnN0YXRlIGlzICJTdHJpbmciCitQ
QVNTICtoaXN0b3J5LnN0YXRlIGlzICsobmV3IERhdGUoMCkpCitQQVNTIGhpc3Rvcnkuc3RhdGUg
PT0gJy9mb28vZ2knIGlzIHRydWUKK1BBU1MgaGlzdG9yeS5zdGF0ZSA9PSAnJyBpcyB0cnVlCitQ
QVNTIGhpc3Rvcnkuc3RhdGUgPT0gJ1tvYmplY3QgT2JqZWN0XScgaXMgdHJ1ZQorUEFTUyBoaXN0
b3J5LnN0YXRlID09ICdbb2JqZWN0IEltYWdlRGF0YV0nIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvc3RhdGUtYXR0cmlidXRlLW9iamVjdC10eXBl
cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3N0YXRlLWF0dHJp
YnV0ZS1vYmplY3QtdHlwZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMDg5YjIyZmU5NzAzMTllNmUzN2Q4
NDU1NTRkZjI2ZjBiZjZjZmU4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9s
b2FkZXIvc3RhdGVvYmplY3RzL3N0YXRlLWF0dHJpYnV0ZS1vYmplY3QtdHlwZXMuaHRtbApAQCAt
MCwwICsxLDQ0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlw
dCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQvPgorPGJvZHk+Cis8c2NyaXB0PgorICAgIGRlc2NyaXB0aW9uKCdUaGlzIHRlc3QgY2FsbHMg
cHVzaFN0YXRlIHdpdGggc3RhdGUgb2JqZWN0cyBvZiBhbGwgdGhlIGRpZmZlcmVudCBvYmplY3Qg
dHlwZXMgc3VwcG9ydGVkIGJ5IHRoZSBIVE1MNSAiaW50ZXJuYWwgc3RydWN0dXJlZCBjbG9uaW5n
IGFsZ29yaXRobSIgYW5kIG1ha2VzIHN1cmUgdGhlIHN0YXRlIGF0dHJpYnV0ZSByZXR1cm5zIHRo
ZSBleHBlY3RlZCBvYmplY3RzLicpOworCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuY2xlYXJCYWNrRm9yd2FyZExpc3Qo
KTsKKworICAgIHNob3VsZEJlRGVmaW5lZCgiaGlzdG9yeS5zdGF0ZSIpOworICAgIGRlYnVnKCJc
bmhpc3Rvcnkuc3RhdGUgc2hvdWxkIGluaXRpYWxseSBiZSBudWxsLiIpOworICAgIHNob3VsZEJl
TnVsbCgiaGlzdG9yeS5zdGF0ZSIpOworICAgIGRlYnVnKCIiKTsKKworICAgIGhpc3RvcnkucHVz
aFN0YXRlKHVuZGVmaW5lZCwgInVuZGVmaW5lZCBlbnRyeSIpOworICAgIHNob3VsZEJlVW5kZWZp
bmVkKCJoaXN0b3J5LnN0YXRlIik7CisgICAgaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgIm51bGwg
ZW50cnkiKTsKKyAgICBzaG91bGRCZU51bGwoImhpc3Rvcnkuc3RhdGUiKTsKKyAgICBoaXN0b3J5
LnB1c2hTdGF0ZShmYWxzZSwgImZhbHNlIGVudHJ5Iik7CisgICAgc2hvdWxkQmVGYWxzZSgiaGlz
dG9yeS5zdGF0ZSIpOworICAgIGhpc3RvcnkucHVzaFN0YXRlKHRydWUsICJ0cnVlIGVudHJ5Iik7
CisgICAgc2hvdWxkQmVUcnVlKCJoaXN0b3J5LnN0YXRlIik7CisgICAgaGlzdG9yeS5wdXNoU3Rh
dGUoNDIsICJOdW1iZXIgZW50cnkiKTsKKyAgICBzaG91bGRCZSgiaGlzdG9yeS5zdGF0ZSIsICI0
MiIpOworICAgIGhpc3RvcnkucHVzaFN0YXRlKCJTdHJpbmciLCAiU3RyaW5nIGVudHJ5Iik7Cisg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJoaXN0b3J5LnN0YXRlIiwgIlN0cmluZyIpOworICAg
IGhpc3RvcnkucHVzaFN0YXRlKG5ldyBEYXRlKDApLCAiRGF0ZSBlbnRyeSIpOworICAgIHNob3Vs
ZEJlKCIraGlzdG9yeS5zdGF0ZSIsICIrKG5ldyBEYXRlKDApKSIpOworICAgIGhpc3RvcnkucHVz
aFN0YXRlKG5ldyBSZWdFeHAoImZvbyIsICJnaSIpLCAiUmVnRXhwIGVudHJ5Iik7CisgICAgc2hv
dWxkRXZhbHVhdGVUbygiaGlzdG9yeS5zdGF0ZSIsIG5ldyBSZWdFeHAoImZvbyIsICJnaSIpKTsK
KyAgICBoaXN0b3J5LnB1c2hTdGF0ZShuZXcgQXJyYXksICJBcnJheSBlbnRyeSIpOworICAgIHNo
b3VsZEV2YWx1YXRlVG8oImhpc3Rvcnkuc3RhdGUiLCBuZXcgQXJyYXkpOworICAgIGhpc3Rvcnku
cHVzaFN0YXRlKG5ldyBPYmplY3QsICJPYmplY3QgZW50cnkiKTsKKyAgICBzaG91bGRFdmFsdWF0
ZVRvKCJoaXN0b3J5LnN0YXRlIiwgbmV3IE9iamVjdCk7CisgICAgaGlzdG9yeS5wdXNoU3RhdGUo
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKS5jcmVhdGVJ
bWFnZURhdGEoMTAsMTApLCAiSW1hZ2VEYXRhIGVudHJ5Iik7CisgICAgc2hvdWxkRXZhbHVhdGVU
bygiaGlzdG9yeS5zdGF0ZSIsIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENv
bnRleHQoIjJkIikuY3JlYXRlSW1hZ2VEYXRhKDEwLDEwKSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVv
YmplY3RzL3N0YXRlLWF0dHJpYnV0ZS1vbmx5LW9uZS1kZXNlcmlhbGl6YXRpb24tZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3N0YXRlLWF0dHJpYnV0
ZS1vbmx5LW9uZS1kZXNlcmlhbGl6YXRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzZDAx
MTdmOTlkZDhmYWJhNmJkNTI0NGZkNzQ1Yzc0ZGE2OWRmYzAKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvc3RhdGUtYXR0cmlidXRlLW9ubHkt
b25lLWRlc2VyaWFsaXphdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBAQAorTWFrZSBz
dXJlIHRoZSBzYW1lIGRlc2VyaWFsaXphdGlvbiBvZiB0aGUgc3RhdGUgb2JqZWN0IGlzIHVzZWQg
ZXZlcnkgdGltZSAoYm90aCBpbiB0aGUgaGlzdG9yeSBvYmplY3QgYW5kIHBvcHN0YXRlIGV2ZW50
cykuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGhpc3Rvcnkuc3RhdGUg
aXMgZGVmaW5lZC4KK1BBU1MgaGlzdG9yeS5zdGF0ZSA9PT0gaGlzdG9yeS5zdGF0ZSBpcyB0cnVl
CitQQVNTIGhpc3Rvcnkuc3RhdGUgIT09IHN0YXRlT2JqZWN0IGlzIHRydWUKK1BBU1MgaGlzdG9y
eS5zdGF0ZSA9PT0gc3RhdGVPYmplY3QgaXMgdHJ1ZQorCitJbnNpZGUgcG9wc3RhdGUgZXZlbnQK
KworUEFTUyBoaXN0b3J5LnN0YXRlICE9PSBzdGF0ZU9iamVjdCBpcyB0cnVlCitQQVNTIHBvcFN0
YXRlRXZlbnQuc3RhdGUgIT09IHN0YXRlT2JqZWN0IGlzIHRydWUKK0ZBSUwgcG9wU3RhdGVFdmVu
dC5zdGF0ZSA9PT0gaGlzdG9yeS5zdGF0ZSBzaG91bGQgYmUgdHJ1ZS4gV2FzIGZhbHNlLgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9zdGF0ZS1hdHRyaWJ1dGUt
b25seS1vbmUtZGVzZXJpYWxpemF0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9z
dGF0ZW9iamVjdHMvc3RhdGUtYXR0cmlidXRlLW9ubHktb25lLWRlc2VyaWFsaXphdGlvbi5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA4MzcyMWQzODM0ODk2MDAyYjZiZjViMjM1OTExMDJiMWMzZmVhZGMKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvc3Rh
dGUtYXR0cmlidXRlLW9ubHktb25lLWRlc2VyaWFsaXphdGlvbi5odG1sCkBAIC0wLDAgKzEsNjEg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZC8+Cis8Ym9k
eT4KKzxzY3JpcHQ+CisgICAgZGVzY3JpcHRpb24oIk1ha2Ugc3VyZSB0aGUgc2FtZSBkZXNlcmlh
bGl6YXRpb24gb2YgdGhlIHN0YXRlIG9iamVjdCBpcyB1c2VkIGV2ZXJ5IHRpbWUgKGJvdGggaW4g
dGhlIGhpc3Rvcnkgb2JqZWN0IGFuZCBwb3BzdGF0ZSBldmVudHMpLiIpOworCisgICAgd2luZG93
LmpzVGVzdElzQXN5bmMgPSB0cnVlOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuY2xlYXJCYWNrRm9yd2FyZExpc3Qo
KTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0K
KworICAgIHNob3VsZEJlRGVmaW5lZCgiaGlzdG9yeS5zdGF0ZSIpOworCisgICAgLy8gQ3JlYXRl
IGEgbmV3IG9iamVjdC4KKyAgICB2YXIgc3RhdGVPYmplY3QgPSBbImEiXTsKKworICAgIC8vIFVz
ZSBpdCBhcyB0aGUgc3RhdGUgb2JqZWN0IGluIGEgcmVwbGFjZVN0YXRlLiAgVGhpcyBjbG9uZXMg
dGhlIG9iamVjdC4KKyAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShzdGF0ZU9iamVjdCwgbnVsbCwg
bnVsbCk7CisKKyAgICBzaG91bGRCZVRydWUoImhpc3Rvcnkuc3RhdGUgPT09IGhpc3Rvcnkuc3Rh
dGUiKTsKKworICAgIC8vIFNpbmNlIHRoZSBhY3R1YWwgaGlzdG9yeS5zdGF0ZSBpcyBhIHN0cnVj
dHVyZWQgY2xvbmUsIGl0IHNob3VsZCBub3QgbWF0Y2ggb3VyIG9yaWdpbmFsIG9iamVjdC4KKyAg
ICBzaG91bGRCZVRydWUoImhpc3Rvcnkuc3RhdGUgIT09IHN0YXRlT2JqZWN0Iik7CisKKyAgICAv
LyBOb3cgbGV0J3MgcmVmZXRjaCBhIGNvcHkgb2YgaGlzdG9yeS5zdGF0ZSB0byBzdG9yZTsKKyAg
ICBzdGF0ZU9iamVjdCA9IGhpc3Rvcnkuc3RhdGU7CisKKyAgICAvLyBPdXIgcmVmZXJlbmNlIGFu
ZCB0aGUgaGlzdG9yeS5zdGF0ZSBpdHNlbGYgc2hvdWxkIGJlIHRoZSBzYW1lLiAgVGhpcyBpcyBu
b3cgQWRhbSdzIG9yaWdpbmFsIGFzc2VydGlvbi4KKyAgICBzaG91bGRCZVRydWUoImhpc3Rvcnku
c3RhdGUgPT09IHN0YXRlT2JqZWN0Iik7CisKKyAgICAvLyBOb3cgbGV0J3MgZG8gYSBwdXNoc3Rh
dGUgdG8gYWRkIGEgaGlzdG9yeSBlbnRyeS4KKyAgICBoaXN0b3J5LnB1c2hTdGF0ZShudWxsLCBu
dWxsLCBudWxsKTsKKworICAgIC8vIE5vdyBhZGQgYSBoYW5kbGVyIGZvciB0aGUgcG9wc3RhdGUg
ZXZlbnQuCisgICAgdmFyIHBvcFN0YXRlRXZlbnQ7CisgICAgd2luZG93Lm9ucG9wc3RhdGUgPSBm
dW5jdGlvbihlKSB7CisgICAgICAgIGRlYnVnKCJcbkluc2lkZSBwb3BzdGF0ZSBldmVudFxuIik7
CisgICAgICAgIHBvcFN0YXRlRXZlbnQgPSBlOworICAgICAgICAvLyBPdXIgc3RvcmVkIHJlZmVy
ZW5jZSB0byBzdGF0ZU9iamVjdCB3aWxsIG5vdCBtYXRjaCB0aGUgY3VycmVudCBzdGF0ZSBvYmpl
Y3QsIGFzIGl0IGlzIGEgc3RydWN0dXJlZCBjbG9uZSBvZiB0aGUgaGlzdG9yeSBpdGVtJ3Mgc3Rh
dGUgb2JqZWN0LgorICAgICAgICBzaG91bGRCZVRydWUoImhpc3Rvcnkuc3RhdGUgIT09IHN0YXRl
T2JqZWN0Iik7CisgICAgICAgIC8vIE91ciBzdG9yZWQgcmVmZXJlbmNlIHRvIHN0YXRlT2JqZWN0
IHdpbGwgbm90IG1hdGNoIHRoZSBzdGF0ZSBvYmplY3QgaW4gdGhpcyBwb3Agc3RhdGUgZXZlbnQs
IGFzIGl0IGlzIHRoZSBzYW1lIGFzIGhpc3Rvcnkuc3RhdGUgd2hpY2ggaXMgYSBzdHJ1Y3R1cmVk
IGNsb25lIG9mIHRoZSBoaXN0b3J5IGl0ZW0ncyBzdGF0ZSBvYmplY3QuCisgICAgICAgIHNob3Vs
ZEJlVHJ1ZSgicG9wU3RhdGVFdmVudC5zdGF0ZSAhPT0gc3RhdGVPYmplY3QiKTsKKyAgICAgICAg
Ly8gVGhlIGV2ZW50J3Mgc3RhdGUgb2JqZWN0IGFuZCB0aGUgY3VycmVudCBzdGF0ZSBvYmplY3Qg
c2hvdWxkIG1hdGNoLgorICAgICAgICBzaG91bGRCZVRydWUoInBvcFN0YXRlRXZlbnQuc3RhdGUg
PT09IGhpc3Rvcnkuc3RhdGUiKTsgLy8gVGhpcyBmYWlscyBmb3Igbm93LCBuZWVkcyB0byBiZSBm
aXhlZC4KKworICAgICAgICB2YXIgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIp
OworICAgICAgICBzLnNyYyA9ICIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIjsK
KyAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzKTsKKyAgICAgICAgc2V0VGltZW91
dChmaW5pc2hKU1Rlc3QsIDApOworICAgIH0KKworICAgIC8vIE5vdyBsZXQncyBnbyBiYWNrIHRv
IG91ciBvcmlnaW5hbCBoaXN0b3J5IGVudHJ5IHdoaWNoIGhhcyBhIHN0YXRlIG9iamVjdCB0aGF0
IHdlJ3ZlIHN0b3JlZCBhIHJlZmVyZW5jZSB0byBhbHJlYWR5LgorICAgIC8vIFRoaXMgd2lsbCBm
aXJlIG91ciBwb3BzdGF0ZSBldmVudCBoYW5kbGVyIGFib3ZlLgorICAgIGhpc3RvcnkuYmFjaygp
OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>