<?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>174739</bug_id>
          
          <creation_ts>2017-07-21 18:25:27 -0700</creation_ts>
          <short_desc>Web Inspector: capture an async stack trace when web content calls addEventListener</short_desc>
          <delta_ts>2017-07-28 17:33:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>174738</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Matt Baker">mattbaker</reporter>
          <assigned_to name="Matt Baker">mattbaker</assigned_to>
          <cc>bburg</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1331233</commentid>
    <comment_count>0</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-21 18:25:27 -0700</bug_when>
    <thetext>Summary:
Capture an async stack trace when web content calls addEventListener.

- Add a new WebCore::AsynchronousCallType::EventListener enum value (this enum added in XXXX)
- Instrument EventTarget
- Add instrumentation end points to PageDebuggerAgent

Note:
Requires no new UI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331245</commentid>
    <comment_count>1</comment_count>
      <attachid>316160</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-21 19:20:16 -0700</bug_when>
    <thetext>Created attachment 316160
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331247</commentid>
    <comment_count>2</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-21 19:21:16 -0700</bug_when>
    <thetext>Patch won&apos;t apply to TOT until the blocking issue lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331248</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-07-21 19:21:38 -0700</bug_when>
    <thetext>&lt;rdar://problem/33468197&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331249</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-07-21 19:22:08 -0700</bug_when>
    <thetext>&lt;rdar://problem/33468189&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331488</commentid>
    <comment_count>5</comment_count>
      <attachid>316244</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-23 17:55:23 -0700</bug_when>
    <thetext>Created attachment 316244
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331657</commentid>
    <comment_count>6</comment_count>
      <attachid>316244</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-07-24 10:08:42 -0700</bug_when>
    <thetext>Comment on attachment 316244
Patch

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

r- because it needs rebasing.

&gt; Source/WebCore/dom/EventTarget.cpp:-72
&gt; -    return ensureEventTargetData().eventListenerMap.add(eventType, WTFMove(listener), { options.capture, options.passive, options.once });

This code seems kinda touchy for performance. Maybe you should check with Ryosuke to learn how to check whether this is a serious perf regression (adding hooks here on the hot path).

&gt; Source/WebCore/dom/EventTarget.cpp:72
&gt; +    bool listenerIsScriptDebuggable = listener-&gt;type() == EventListener::JSEventListenerType &amp;&amp; !listener-&gt;wasCreatedFromMarkup();

Move this next to the use site. Also this name is wonky. What about listenerExecutesJavaScript or listenerCanBeDebugged?

The !listener-&gt;wasCreatedFromMarkup() exclusion deserves some explanation here or in the ChangeLog. Why can&apos;t we debug that?

&gt; Source/WebCore/dom/EventTarget.cpp:76
&gt; +    if (listenerIsScriptDebuggable) {

To minimize perf impact you should guard the extra work here (iterating the listeners) on InspectorInstrumentation::hasFrontends().

&gt; Source/WebCore/dom/EventTarget.cpp:118
&gt; +    auto&amp; listenersForType = eventListeners(eventType);

To minimize perf impact you should guard the extra work here (iterating the listeners) on InspectorInstrumentation::hasFrontends().

&gt; Source/WebCore/dom/EventTarget.cpp:120
&gt; +        if (registeredListener-&gt;callback() == listener &amp;&amp; registeredListener-&gt;useCapture() == options.capture) {

What is the purpose of this check for usesCapture?

&gt; Source/WebCore/inspector/InspectorInstrumentation.cpp:354
&gt; +void InspectorInstrumentation::didRegisterEventListenerImpl(InstrumentingAgents&amp; instrumentingAgents, const RegisteredEventListener&amp; listener, ScriptExecutionContext&amp; context)

Applies throughout: please rename to add (so we have add/remove method pairs inside inspector).

&gt; Source/WebCore/inspector/PageDebuggerAgent.cpp:176
&gt; +    int listenerIdentifier = m_nextEventListenerIdentifier++;

Please use an unsigned type for the identifier key. Adding a typedef would be nice too, so the HashMap type parameters are a little less vague.

&gt; Source/WebCore/inspector/PageDebuggerAgent.cpp:179
&gt; +    didScheduleAsyncCall(scriptState, static_cast&lt;int&gt;(AsynchronousCallType::EventListener), listenerIdentifier, listener.isOnce());

what!? don&apos;t cast away the enum type here. Do it inside the methods if they need to use the value for hashing or whatever. Please fix the existing call sites, this is not good.

&gt; Source/WebCore/inspector/PageDebuggerAgent.cpp:184
&gt; +    auto eventListenerIterator = m_registeredEventListeners.find(&amp;listener);

Nit: you can just do `auto it = ...`. There&apos;s only one iterator, naming it is not helpful.

&gt; Source/WebCore/inspector/PageDebuggerAgent.cpp:195
&gt; +    auto eventListenerIterator = m_registeredEventListeners.find(&amp;listener);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332050</commentid>
    <comment_count>7</comment_count>
      <attachid>316244</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-25 12:53:28 -0700</bug_when>
    <thetext>Comment on attachment 316244
Patch

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

`

&gt;&gt; Source/WebCore/dom/EventTarget.cpp:-72
&gt;&gt; -    return ensureEventTargetData().eventListenerMap.add(eventType, WTFMove(listener), { options.capture, options.passive, options.once });
&gt; 
&gt; This code seems kinda touchy for performance. Maybe you should check with Ryosuke to learn how to check whether this is a serious perf regression (adding hooks here on the hot path).

Will investigate. At the very least the call to &quot;auto&amp; listenersForType = ...&quot; should be moved to InspectorInstrumentation and guarded on the presence of frontends.

&gt;&gt; Source/WebCore/dom/EventTarget.cpp:72
&gt;&gt; +    bool listenerIsScriptDebuggable = listener-&gt;type() == EventListener::JSEventListenerType &amp;&amp; !listener-&gt;wasCreatedFromMarkup();
&gt; 
&gt; Move this next to the use site. Also this name is wonky. What about listenerExecutesJavaScript or listenerCanBeDebugged?
&gt; 
&gt; The !listener-&gt;wasCreatedFromMarkup() exclusion deserves some explanation here or in the ChangeLog. Why can&apos;t we debug that?

I agree this is a poor name. Maybe `listenerCreatedFromScript` would be more appropriate. The reason for ignoring listeners created from markup (&lt;a onclick=&quot;didClick()&quot;&gt;), is that no script call stack is associated with the event listener&apos;s registration.

&gt;&gt; Source/WebCore/dom/EventTarget.cpp:76
&gt;&gt; +    if (listenerIsScriptDebuggable) {
&gt; 
&gt; To minimize perf impact you should guard the extra work here (iterating the listeners) on InspectorInstrumentation::hasFrontends().

EventTarget::eventListeners is public, so this step can be moved into InspectorInstrumentation. EventTarget will need to be passed to the instrumentation instead of ScriptExecutionContext (which can be retrieved from the former).

&gt;&gt; Source/WebCore/dom/EventTarget.cpp:120
&gt;&gt; +        if (registeredListener-&gt;callback() == listener &amp;&amp; registeredListener-&gt;useCapture() == options.capture) {
&gt; 
&gt; What is the purpose of this check for usesCapture?

The same callback can be registered a second time so long as the `capture` option differs. See EventListenerMap::add.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332075</commentid>
    <comment_count>8</comment_count>
      <attachid>316244</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-25 13:51:22 -0700</bug_when>
    <thetext>Comment on attachment 316244
Patch

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

&gt;&gt; Source/WebCore/inspector/PageDebuggerAgent.cpp:176
&gt;&gt; +    int listenerIdentifier = m_nextEventListenerIdentifier++;
&gt; 
&gt; Please use an unsigned type for the identifier key. Adding a typedef would be nice too, so the HashMap type parameters are a little less vague.

The identifier is signed to be consistent with requestAnimationFrame and DOMTimer identifiers handed out in WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332082</commentid>
    <comment_count>9</comment_count>
      <attachid>316244</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-07-25 14:05:16 -0700</bug_when>
    <thetext>Comment on attachment 316244
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/EventTarget.cpp:72
&gt;&gt;&gt; +    bool listenerIsScriptDebuggable = listener-&gt;type() == EventListener::JSEventListenerType &amp;&amp; !listener-&gt;wasCreatedFromMarkup();
&gt;&gt; 
&gt;&gt; Move this next to the use site. Also this name is wonky. What about listenerExecutesJavaScript or listenerCanBeDebugged?
&gt;&gt; 
&gt;&gt; The !listener-&gt;wasCreatedFromMarkup() exclusion deserves some explanation here or in the ChangeLog. Why can&apos;t we debug that?
&gt; 
&gt; I agree this is a poor name. Maybe `listenerCreatedFromScript` would be more appropriate. The reason for ignoring listeners created from markup (&lt;a onclick=&quot;didClick()&quot;&gt;), is that no script call stack is associated with the event listener&apos;s registration.

Perhaps in a future patch, we could capture the call stack for the operation that creates the associated markup (i.e., the innerHTML setter, DOM mutation APIs, or loading HTML in a particular document).

&gt;&gt;&gt; Source/WebCore/dom/EventTarget.cpp:120
&gt;&gt;&gt; +        if (registeredListener-&gt;callback() == listener &amp;&amp; registeredListener-&gt;useCapture() == options.capture) {
&gt;&gt; 
&gt;&gt; What is the purpose of this check for usesCapture?
&gt; 
&gt; The same callback can be registered a second time so long as the `capture` option differs. See EventListenerMap::add.

oh, interesting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332529</commentid>
    <comment_count>10</comment_count>
      <attachid>316504</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-26 18:30:47 -0700</bug_when>
    <thetext>Created attachment 316504
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332530</commentid>
    <comment_count>11</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-26 18:34:09 -0700</bug_when>
    <thetext>EventTarget instrumentation changed to do no work when no Inspector frontends aren&apos;t present.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332531</commentid>
    <comment_count>12</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-26 18:35:28 -0700</bug_when>
    <thetext>(In reply to Matt Baker from comment #11)
&gt; EventTarget instrumentation changed to do no work when no Inspector
&gt; frontends aren&apos;t present.

&gt;_&lt;

Only does work when Inspector frontends are present.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332992</commentid>
    <comment_count>13</comment_count>
      <attachid>316504</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-07-28 10:34:57 -0700</bug_when>
    <thetext>Comment on attachment 316504
Patch

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

What happens if the page or frame containing the event listeners navigates? I don&apos;t see that we are clearing that anywhere.

&gt; Source/WebCore/dom/EventTarget.cpp:71
&gt; +    bool listenerCreatedFromScript = listener-&gt;type() == EventListener::JSEventListenerType &amp;&amp; !listener-&gt;wasCreatedFromMarkup();

Move this local next to the use site. It isn&apos;t needed prior to the first early exit.

&gt; Source/WebCore/inspector/PageDebuggerAgent.cpp:169
&gt; +    auto&amp; listener = eventListeners.last();

Please use the concrete type here. Auto is fine for the collection above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1333106</commentid>
    <comment_count>14</comment_count>
      <attachid>316504</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-28 16:07:28 -0700</bug_when>
    <thetext>Comment on attachment 316504
Patch

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

&gt;&gt; Source/WebCore/dom/EventTarget.cpp:71
&gt;&gt; +    bool listenerCreatedFromScript = listener-&gt;type() == EventListener::JSEventListenerType &amp;&amp; !listener-&gt;wasCreatedFromMarkup();
&gt; 
&gt; Move this local next to the use site. It isn&apos;t needed prior to the first early exit.

This needs to come before we WTFMove the listener.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1333110</commentid>
    <comment_count>15</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-28 16:16:38 -0700</bug_when>
    <thetext>(In reply to Brian Burg from comment #13)
&gt; Comment on attachment 316504 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=316504&amp;action=review
&gt; 
&gt; What happens if the page or frame containing the event listeners navigates?
&gt; I don&apos;t see that we are clearing that anywhere.

PageDebuggerAgent overrides didClearAsyncStackData, which is called when the global object is cleared. This is unnecessarily complex — PageDebuggerAgent can just clear its data in didClearMainFrameWindowObject:

void PageDebuggerAgent::didClearMainFrameWindowObject()
{
    didClearGlobalObject();

+    m_registeredEventListeners.clear();
+    m_nextEventListenerIdentifier = 1;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1333118</commentid>
    <comment_count>16</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-28 16:23:23 -0700</bug_when>
    <thetext>(In reply to Matt Baker from comment #15)
&gt; (In reply to Brian Burg from comment #13)
&gt; &gt; Comment on attachment 316504 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=316504&amp;action=review
&gt; &gt; 
&gt; &gt; What happens if the page or frame containing the event listeners navigates?
&gt; &gt; I don&apos;t see that we are clearing that anywhere.
&gt; 
&gt; PageDebuggerAgent overrides didClearAsyncStackData, which is called when the
&gt; global object is cleared. This is unnecessarily complex — PageDebuggerAgent
&gt; can just clear its data in didClearMainFrameWindowObject:
&gt; 
&gt; void PageDebuggerAgent::didClearMainFrameWindowObject()
&gt; {
&gt;     didClearGlobalObject();
&gt; 
&gt; +    m_registeredEventListeners.clear();
&gt; +    m_nextEventListenerIdentifier = 1;
&gt; }

Nevermind. The hook `didClearAsyncStackTraceData()` is needed, since there are multiple things in the InspectorDebuggerAgent that can cause async data top be cleared:

- Window object cleared
- Agent disabled
- Change to async stack trace depth setting</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1333121</commentid>
    <comment_count>17</comment_count>
      <attachid>316685</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-07-28 16:38:29 -0700</bug_when>
    <thetext>Created attachment 316685
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1333135</commentid>
    <comment_count>18</comment_count>
      <attachid>316685</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-07-28 17:05:11 -0700</bug_when>
    <thetext>Comment on attachment 316685
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1333140</commentid>
    <comment_count>19</comment_count>
      <attachid>316685</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-28 17:33:16 -0700</bug_when>
    <thetext>Comment on attachment 316685
Patch

Clearing flags on attachment: 316685

Committed r220036: &lt;http://trac.webkit.org/changeset/220036&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1333141</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-28 17:33:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316160</attachid>
            <date>2017-07-21 19:20:16 -0700</date>
            <delta_ts>2017-07-23 17:55:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174739-20170721192013.patch</filename>
            <type>text/plain</type>
            <size>22222</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5NzQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
NDYzM2JiNDExMDc0MGJlNDZlZjU0MjljOGQ5MzIxODIyNmRkY2NjLi40MjkxNzg5YWI3OTg5N2Ix
ZThlOGFhM2Q5ZTk5ZTk5NWRkYmNkN2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAxNy0wNy0yMSAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogY2FwdHVyZSBhbiBhc3luYyBzdGFjayB0cmFjZSB3
aGVuIHdlYiBjb250ZW50IGNhbGxzIGFkZEV2ZW50TGlzdGVuZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDczOQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsbG93IGRlYnVnZ2VyIGFnZW50cyB0byBw
ZXJmb3JtIGN1c3RvbSBsb2dpYyB3aGVuIGFzeW5jaHJvbm91cyBzdGFjaworICAgICAgICB0cmFj
ZSBkYXRhIGlzIGNsZWFyZWQuIEZvciBleGFtcGxlLCB0aGUgUGFnZURlYnVnZ2VyQWdlbnQgd291
bGQgY2xlYXIKKyAgICAgICAgaXRzIGxpc3Qgb2YgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMgZm9yIHdo
aWNoIGNhbGwgc3RhY2tzIGhhdmUgYmVlbiByZWNvcmRlZC4KKworICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6
Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNsZWFyQXN5bmNTdGFja1RyYWNlRGF0YSk6CisgICAg
ICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmg6CisKIDIwMTct
MDctMjEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFJlZmFjdG9y
IE1BU00gcHJvYmUgQ1BVU3RhdGUgdG8gdXNlIGFycmF5cyBmb3IgcmVnaXN0ZXIgc3RvcmFnZS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNjMwYTk5MmJiZmQ4ZTlhZTk4MDE1MjMwMDY4OTQ0MjY1YjE4MjE3Li40
YjY4MjE2NTAxYjA0ZGUwNWQ2MThkNzc5ZDcxNTVlNzczZTY1NmNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDEgQEAKKzIwMTctMDctMjEgIE1hdHQgQmFrZXIgIDxtYXR0YmFrZXJAYXBwbGUuY29t
PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGNhcHR1cmUgYW4gYXN5bmMgc3RhY2sgdHJhY2Ug
d2hlbiB3ZWIgY29udGVudCBjYWxscyBhZGRFdmVudExpc3RlbmVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ3MzkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBpbnNwZWN0b3IvZGVidWdnZXIv
YXN5bmMtc3RhY2stdHJhY2UuaHRtbAorCisgICAgICAgIEFkZCBpbnN0cnVtZW50YXRpb24gdG8g
RXZlbnRUYXJnZXQgdG8gc3VwcG9ydCBzaG93aW5nIGFzeW5jaHJvbm91cworICAgICAgICBzdGFj
ayB0cmFjZXMgd2hlbiB0aGUgZGVidWdnZXIgYnJlYWtzIGluIGEgc2NyaXB0IGV2ZW50IGxpc3Rl
bmVyLgorCisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFy
Z2V0OjpmaXJlRXZlbnRMaXN0ZW5lcnMpOgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckFzeW5jaHJvbm91c0NhbGxUeXBlLmg6CisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkUmVnaXN0ZXJFdmVudExpc3RlbmVySW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZW1vdmVFdmVudExpc3RlbmVySW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxIYW5kbGVF
dmVudEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRIYW5kbGVFdmVudEltcGwpOgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRSZWdpc3RlckV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxIYW5kbGVFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEhhbmRsZUV2ZW50KToKKwor
ICAgICAgICAqIGluc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6ZGlkQ2xlYXJBc3luY1N0YWNrVHJhY2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpkaWRSZWdpc3RlckV2ZW50TGlzdGVu
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZURlYnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVFdmVu
dExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50Ojp3aWxsSGFu
ZGxlRXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oOgorCiAy
MDE3LTA3LTIxICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRHJv
cCBtYWtlX2RvbV9leGNlcHRpb25zLnBsIHNjcmlwdCB0aGF0IHdlIG9ubHkgaGF2ZSBET01FeGNl
cHRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggODg2ZWRmNTQ3MDgz
MGY2ZTBiOGY0MWU4NDU2Mzc4Mzc2MTFjYTNlMy4uOTkwMDQzMjUwMmY3NmU3ZDkyZTM5YzZlNzBk
NTNjMzdjOWEwZmY1YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTEx
NDAsNiArMTE0MCw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2xlYXJBc3luY1N0
YWNrVHJhY2VEYXRhKCkKIHsKICAgICBtX3BlbmRpbmdBc3luY0NhbGxzLmNsZWFyKCk7CiAgICAg
bV9jdXJyZW50QXN5bmNDYWxsSWRlbnRpZmllciA9IHN0ZDo6bnVsbG9wdDsKKworICAgIGRpZENs
ZWFyQXN5bmNTdGFja1RyYWNlRGF0YSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCAxNDU2ZGJjZDA0OWU3YmQwMmVkN2Ey
ODI4ZDYwMzQ4NjU3NTNjMTU4Li5hYzIyYjhmZjY1OWZmZDdlNjlmYWUyN2M5YTI5YjhmMzg1ZWYy
OGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCkBAIC0xMzAsNiArMTMwLDcgQEAg
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgU3RyaW5nIHNvdXJjZU1hcFVSTEZvclNjcmlwdChjb25z
dCBTY3JpcHQmKTsKIAogICAgIHZvaWQgZGlkQ2xlYXJHbG9iYWxPYmplY3QoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2xlYXJBc3luY1N0YWNrVHJhY2VEYXRhKCkgeyB9CiAKIHByaXZhdGU6CiAg
ICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpDYWxsRnJhbWU+PiBjdXJyZW50Q2FsbEZyYW1lcyhjb25zdCBJbmplY3RlZFNjcmlw
dCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKaW5kZXggN2Y3ZGMwMzFiYTQ1ODM1ZGZl
Y2M2MWRlMTQwMmJjNjlmZDY0N2Q1ZC4uNTU2YmJmYWJjNDNiM2Q0MGNhZjg4NTJhZTBlMzQzOWJj
ZGMwZDRkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCkBAIC02OSw3ICs2OSwxNiBA
QCBib29sIEV2ZW50VGFyZ2V0Ojppc01lc3NhZ2VQb3J0KCkgY29uc3QKIAogYm9vbCBFdmVudFRh
cmdldDo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVm
PEV2ZW50TGlzdGVuZXI+JiYgbGlzdGVuZXIsIGNvbnN0IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25z
JiBvcHRpb25zKQogewotICAgIHJldHVybiBlbnN1cmVFdmVudFRhcmdldERhdGEoKS5ldmVudExp
c3RlbmVyTWFwLmFkZChldmVudFR5cGUsIFdURk1vdmUobGlzdGVuZXIpLCB7IG9wdGlvbnMuY2Fw
dHVyZSwgb3B0aW9ucy5wYXNzaXZlLCBvcHRpb25zLm9uY2UgfSk7CisgICAgYm9vbCBsaXN0ZW5l
cklzU2NyaXB0RGVidWdnYWJsZSA9IGxpc3RlbmVyLT50eXBlKCkgPT0gRXZlbnRMaXN0ZW5lcjo6
SlNFdmVudExpc3RlbmVyVHlwZSAmJiAhbGlzdGVuZXItPndhc0NyZWF0ZWRGcm9tTWFya3VwKCk7
CisgICAgaWYgKCFlbnN1cmVFdmVudFRhcmdldERhdGEoKS5ldmVudExpc3RlbmVyTWFwLmFkZChl
dmVudFR5cGUsIFdURk1vdmUobGlzdGVuZXIpLCB7IG9wdGlvbnMuY2FwdHVyZSwgb3B0aW9ucy5w
YXNzaXZlLCBvcHRpb25zLm9uY2UgfSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChsaXN0ZW5lcklzU2NyaXB0RGVidWdnYWJsZSkgeworICAgICAgICBhdXRvJiBsaXN0ZW5lcnNG
b3JUeXBlID0gZXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBlKTsKKyAgICAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRSZWdpc3RlckV2ZW50TGlzdGVuZXIoKnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSwgKmxpc3RlbmVyc0ZvclR5cGUubGFzdCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogdm9pZCBFdmVudFRhcmdldDo6YWRkRXZlbnRMaXN0ZW5lckZvckJpbmRpbmdz
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mJiBs
aXN0ZW5lciwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnNPckJvb2xlYW4mJiB2YXJpYW50KQpAQCAt
MTAzLDcgKzExMiwxOCBAQCB2b2lkIEV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyRm9y
QmluZGluZ3MoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsCiBib29sIEV2ZW50VGFyZ2V0
OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVu
dExpc3RlbmVyJiBsaXN0ZW5lciwgY29uc3QgTGlzdGVuZXJPcHRpb25zJiBvcHRpb25zKQogewog
ICAgIGF1dG8qIGRhdGEgPSBldmVudFRhcmdldERhdGEoKTsKLSAgICByZXR1cm4gZGF0YSAmJiBk
YXRhLT5ldmVudExpc3RlbmVyTWFwLnJlbW92ZShldmVudFR5cGUsIGxpc3RlbmVyLCBvcHRpb25z
LmNhcHR1cmUpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
YXV0byYgbGlzdGVuZXJzRm9yVHlwZSA9IGV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7CisgICAg
Zm9yIChhdXRvJiByZWdpc3RlcmVkTGlzdGVuZXIgOiBsaXN0ZW5lcnNGb3JUeXBlKSB7CisgICAg
ICAgIGlmIChyZWdpc3RlcmVkTGlzdGVuZXItPmNhbGxiYWNrKCkgPT0gbGlzdGVuZXIgJiYgcmVn
aXN0ZXJlZExpc3RlbmVyLT51c2VDYXB0dXJlKCkgPT0gb3B0aW9ucy5jYXB0dXJlKSB7CisgICAg
ICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZW1vdmVFdmVudExpc3RlbmVy
KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICpyZWdpc3RlcmVkTGlzdGVuZXIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZGF0YS0+ZXZlbnRM
aXN0ZW5lck1hcC5yZW1vdmUoZXZlbnRUeXBlLCBsaXN0ZW5lciwgb3B0aW9ucy5jYXB0dXJlKTsK
IH0KIAogYm9vbCBFdmVudFRhcmdldDo6c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmUHRyPEV2ZW50TGlzdGVuZXI+JiYgbGlzdGVuZXIs
IERPTVdyYXBwZXJXb3JsZCYgaXNvbGF0ZWRXb3JsZCkKQEAgLTI2MCw4ICsyODAsOSBAQCB2b2lk
IEV2ZW50VGFyZ2V0OjpmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQmIGV2ZW50LCBFdmVudExpc3Rl
bmVyVmVjdG9yIGxpc3RlbmVycwogICAgICAgICBpZiAocmVnaXN0ZXJlZExpc3RlbmVyLT5pc1Bh
c3NpdmUoKSkKICAgICAgICAgICAgIGV2ZW50LnNldEluUGFzc2l2ZUxpc3RlbmVyKHRydWUpOwog
Ci0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEhhbmRsZUV2ZW50KGNvbnRl
eHQsIGV2ZW50KTsKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsSGFuZGxl
RXZlbnQoY29udGV4dCwgZXZlbnQsICpyZWdpc3RlcmVkTGlzdGVuZXIpOwogICAgICAgICByZWdp
c3RlcmVkTGlzdGVuZXItPmNhbGxiYWNrKCkuaGFuZGxlRXZlbnQoY29udGV4dCwgJmV2ZW50KTsK
KyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRIYW5kbGVFdmVudChjb250ZXh0
KTsKIAogICAgICAgICBpZiAocmVnaXN0ZXJlZExpc3RlbmVyLT5pc1Bhc3NpdmUoKSkKICAgICAg
ICAgICAgIGV2ZW50LnNldEluUGFzc2l2ZUxpc3RlbmVyKGZhbHNlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBc3luY2hyb25vdXNDYWxsVHlwZS5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFzeW5jaHJvbm91c0NhbGxUeXBlLmgK
aW5kZXggMTE3ZjhlNGE4YTAwZDJiMWVmYzZkOGVkZGI3NjhlM2YzNzdmMDVjNC4uYWQ4MTY2ZWU1
OThhNzBmZGZiZTA5YTVhZTQ0NjE2ODE1YjA1NzI4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckFzeW5jaHJvbm91c0NhbGxUeXBlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFzeW5jaHJvbm91c0NhbGxUeXBlLmgKQEAgLTI5
LDYgKzI5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBlbnVtIGNsYXNzIEFzeW5jaHJvbm91
c0NhbGxUeXBlIHsKICAgICBBbmltYXRpb25GcmFtZSA9IDEsCisgICAgRXZlbnRMaXN0ZW5lciwK
ICAgICBUaW1lciwKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKaW5kZXggMzBlZjY1ZTJkZWQ5OWViZjZjNzZmYzVh
ZGNlODU2OGQyOTVkMDkxNy4uZWUzYTgxNzlmYjJkZTIxNWY5MzZhYzdmZDQ2MmMzNWFkNWU2NTEz
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5jcHAKQEAgLTM1MSw2ICszNTEsMTggQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZFJlbW92ZVRpbWVySW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVt
ZW4KICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkUmVtb3ZlVGltZXIodGltZXJJZCwgZnJhbWVG
b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpKTsKIH0KIAordm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZFJlZ2lzdGVyRXZlbnRMaXN0ZW5lckltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXImIGxpc3RlbmVyLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQoreworICAgIGlm
IChQYWdlRGVidWdnZXJBZ2VudCogcGFnZURlYnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLnBhZ2VEZWJ1Z2dlckFnZW50KCkpCisgICAgICAgIHBhZ2VEZWJ1Z2dlckFnZW50LT5kaWRS
ZWdpc3RlckV2ZW50TGlzdGVuZXIoY29udGV4dCwgbGlzdGVuZXIpOworfQorCit2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZUV2ZW50TGlzdGVuZXJJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyJiBsaXN0ZW5lcikKK3sKKyAgICBpZiAoUGFnZURlYnVnZ2VyQWdlbnQqIHBhZ2VEZWJ1
Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5wYWdlRGVidWdnZXJBZ2VudCgpKQorICAg
ICAgICBwYWdlRGVidWdnZXJBZ2VudC0+d2lsbFJlbW92ZUV2ZW50TGlzdGVuZXIobGlzdGVuZXIp
OworfQorCiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsQ2FsbEZ1bmN0aW9uSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUsIGludCBzY3JpcHRMaW5lLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewogICAgIGludCB0aW1lbGluZUFnZW50
SWQgPSAwOwpAQCAtMzc5LDExICszOTEsMjAgQEAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnRJbXBsKEkKICAg
ICByZXR1cm4gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKGluc3RydW1lbnRpbmdBZ2Vu
dHMsIHRpbWVsaW5lQWdlbnRJZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsSGFuZGxlRXZlbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdB
Z2VudHMsIGNvbnN0IEV2ZW50JiBldmVudCkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsSGFuZGxlRXZlbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdB
Z2VudHMsIGNvbnN0IEV2ZW50JiBldmVudCwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIm
IGxpc3RlbmVyKQogeworICAgIGlmIChQYWdlRGVidWdnZXJBZ2VudCogcGFnZURlYnVnZ2VyQWdl
bnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnBhZ2VEZWJ1Z2dlckFnZW50KCkpCisgICAgICAgIHBh
Z2VEZWJ1Z2dlckFnZW50LT53aWxsSGFuZGxlRXZlbnQobGlzdGVuZXIpOworCiAgICAgcGF1c2VP
bk5hdGl2ZUV2ZW50SWZOZWVkZWQoaW5zdHJ1bWVudGluZ0FnZW50cywgdHJ1ZSwgZXZlbnQudHlw
ZSgpLCBmYWxzZSk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRIYW5k
bGVFdmVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cykKK3sK
KyAgICBpZiAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMuaW5zcGVjdG9yRGVidWdnZXJBZ2VudCgpKQorICAgICAgICBkZWJ1Z2dlckFn
ZW50LT5kaWREaXNwYXRjaEFzeW5jQ2FsbCgpOworfQorCiB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkRGlzcGF0Y2hFdmVudEltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ29va2llJiBjb29raWUpCiB7CiAgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRp
bWVsaW5lQWdlbnQgPSByZXRyaWV2ZVRpbWVsaW5lQWdlbnQoY29va2llKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAppbmRleCBj
MDFjMTNiZGRmMTNmOGZkNTFlM2E3M2Q4YzFlYjc3MjJiYjAyNTA1Li4zNDNkNDUwZjExZWQxNGI0
NDQ3MTAzMWI5OWYwYTA0ODgyNmJjNTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCkBAIC02OSw2ICs2OSw3IEBAIGNsYXNz
IEluc3RydW1lbnRpbmdBZ2VudHM7CiBjbGFzcyBOZXR3b3JrTG9hZE1ldHJpY3M7CiBjbGFzcyBO
b2RlOwogY2xhc3MgUHNldWRvRWxlbWVudDsKK2NsYXNzIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
OwogY2xhc3MgUmVuZGVyTGF5ZXI7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZXNvdXJj
ZUxvYWRlcjsKQEAgLTEyNyw5ICsxMjgsMTIgQEAgcHVibGljOgogCiAgICAgc3RhdGljIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsQ2FsbEZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUsIGludCBzY3JpcHRMaW5lKTsKICAg
ICBzdGF0aWMgdm9pZCBkaWRDYWxsRnVuY3Rpb24oY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ29va2llJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIHN0YXRpYyB2b2lkIGRp
ZFJlZ2lzdGVyRXZlbnRMaXN0ZW5lcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgUmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXImKTsKKyAgICBzdGF0aWMgdm9pZCB3aWxsUmVtb3ZlRXZlbnRM
aXN0ZW5lcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlz
dGVuZXImKTsKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxE
aXNwYXRjaEV2ZW50KERvY3VtZW50JiwgY29uc3QgRXZlbnQmLCBib29sIGhhc0V2ZW50TGlzdGVu
ZXJzKTsKICAgICBzdGF0aWMgdm9pZCBkaWREaXNwYXRjaEV2ZW50KGNvbnN0IEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbkNvb2tpZSYpOwotICAgIHN0YXRpYyB2b2lkIHdpbGxIYW5kbGVFdmVudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRXZlbnQmKTsKKyAgICBzdGF0aWMgdm9pZCB3
aWxsSGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IEV2ZW50JiwgY29u
c3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRIYW5kbGVF
dmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSB3aWxsRGlzcGF0Y2hFdmVudE9uV2luZG93KEZyYW1lKiwgY29uc3Qg
RXZlbnQmLCBET01XaW5kb3cmKTsKICAgICBzdGF0aWMgdm9pZCBkaWREaXNwYXRjaEV2ZW50T25X
aW5kb3coY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CiAgICAgc3RhdGlj
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsRXZhbHVhdGVTY3JpcHQoRnJhbWUm
LCBjb25zdCBTdHJpbmcmIHVybCwgaW50IGxpbmVOdW1iZXIpOwpAQCAtMjg1LDggKzI4OSwxMSBA
QCBwcml2YXRlOgogCiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3
aWxsQ2FsbEZ1bmN0aW9uSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgY29uc3QgU3RyaW5nJiBz
Y3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogICAg
IHN0YXRpYyB2b2lkIGRpZENhbGxGdW5jdGlvbkltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIHN0YXRpYyB2b2lk
IGRpZFJlZ2lzdGVyRXZlbnRMaXN0ZW5lckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIGNvbnN0
IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOworICAg
IHN0YXRpYyB2b2lkIHdpbGxSZW1vdmVFdmVudExpc3RlbmVySW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImKTsKICAgICBzdGF0aWMgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxEaXNwYXRjaEV2ZW50SW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzJiwgRG9jdW1lbnQmLCBjb25zdCBFdmVudCYsIGJvb2wgaGFzRXZlbnRMaXN0ZW5l
cnMpOwotICAgIHN0YXRpYyB2b2lkIHdpbGxIYW5kbGVFdmVudEltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyYsIGNvbnN0IEV2ZW50Jik7CisgICAgc3RhdGljIHZvaWQgd2lsbEhhbmRsZUV2ZW50SW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzJiwgY29uc3QgRXZlbnQmLCBjb25zdCBSZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lciYpOworICAgIHN0YXRpYyB2b2lkIGRpZEhhbmRsZUV2ZW50SW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzJik7CiAgICAgc3RhdGljIHZvaWQgZGlkRGlzcGF0Y2hFdmVudEltcGwoY29u
c3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CiAgICAgc3RhdGljIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsRGlzcGF0Y2hFdmVudE9uV2luZG93SW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzJiwgY29uc3QgRXZlbnQmLCBET01XaW5kb3cmKTsKICAgICBzdGF0aWMg
dm9pZCBkaWREaXNwYXRjaEV2ZW50T25XaW5kb3dJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSYpOwpAQCAtNjI5LDYgKzYzNiwyMCBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZFJlbW92ZVRpbWVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbgogICAgICAgICBkaWRSZW1vdmVUaW1lckltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIHRp
bWVySWQsIGNvbnRleHQpOwogfQogCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZFJlZ2lzdGVyRXZlbnRMaXN0ZW5lcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIpCit7CisgICAgRkFT
VF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdB
Z2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4
dChjb250ZXh0KSkKKyAgICAgICAgZGlkUmVnaXN0ZXJFdmVudExpc3RlbmVySW1wbCgqaW5zdHJ1
bWVudGluZ0FnZW50cywgbGlzdGVuZXIsIGNvbnRleHQpOworfQorCitpbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZW1vdmVFdmVudExpc3RlbmVyKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBsaXN0
ZW5lcikKK3sKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKKyAgICBp
ZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRp
bmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQpKQorICAgICAgICB3aWxsUmVtb3ZlRXZlbnRMaXN0
ZW5lckltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGxpc3RlbmVyKTsKK30KKwogaW5saW5lIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxDYWxsRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3Ry
aW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9O
T19GUk9OVEVORFMoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCkpOwpAQCAtNjU5LDEx
ICs2ODAsMTggQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREaXNw
YXRjaEV2ZW50KGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnQKICAgICAgICAgZGlkRGlzcGF0Y2hF
dmVudEltcGwoY29va2llKTsKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsSGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29u
c3QgRXZlbnQmIGV2ZW50KQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsSGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgRXZl
bnQmIGV2ZW50LCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIpCit7Cisg
ICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9y
Q29udGV4dChjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIHdpbGxIYW5kbGVFdmVudEltcGwoKmlu
c3RydW1lbnRpbmdBZ2VudHMsIGV2ZW50LCBsaXN0ZW5lcik7Cit9CisKK2lubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgp
KTsKICAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGlu
c3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICByZXR1cm4gd2ls
bEhhbmRsZUV2ZW50SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZXZlbnQpOworICAgICAgICBy
ZXR1cm4gZGlkSGFuZGxlRXZlbnRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzKTsKIH0KIAogaW5s
aW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxEaXNwYXRjaEV2ZW50T25XaW5kb3coRnJhbWUqIGZyYW1lLCBjb25zdCBFdmVudCYg
ZXZlbnQsIERPTVdpbmRvdyYgd2luZG93KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Q
YWdlRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggMDRkNzJlODUyMGIwNGRhOWE0NWRmNDE2ODgzOGMy
YWU5MmY3ZWNlNy4uM2NlOWNiOGMwYzIwMzQyOWUzZmEwYWY2OGI0ZTY3ZWZjOWMxOTkyZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCkBAIC00
Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VDb25zb2xlQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiUGFnZVNjcmlwdERlYnVnU2VydmVyLmgiCisjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Lmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0TWFuYWdlci5oPgpAQCAtOTQsNiArOTUsMTIgQEAgU3RyaW5nIFBhZ2VEZWJ1Z2dl
ckFnZW50Ojpzb3VyY2VNYXBVUkxGb3JTY3JpcHQoY29uc3QgU2NyaXB0JiBzY3JpcHQpCiAgICAg
cmV0dXJuIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNvdXJjZU1hcFVSTEZvclNjcmlwdChzY3Jp
cHQpOwogfQogCit2b2lkIFBhZ2VEZWJ1Z2dlckFnZW50OjpkaWRDbGVhckFzeW5jU3RhY2tUcmFj
ZURhdGEoKQoreworICAgIG1fcmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJzLmNsZWFyKCk7CisgICAg
bV9uZXh0RXZlbnRMaXN0ZW5lcklkZW50aWZpZXIgPSAxOworfQorCiB2b2lkIFBhZ2VEZWJ1Z2dl
ckFnZW50OjptdXRlQ29uc29sZSgpCiB7CiAgICAgUGFnZUNvbnNvbGVDbGllbnQ6Om11dGUoKTsK
QEAgLTE1Miw2ICsxNTksNDYgQEAgdm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6bWFpbkZyYW1lTmF2
aWdhdGVkKCkKICAgICBzZXRTdXBwcmVzc0FsbFBhdXNlcyhmYWxzZSk7CiB9CiAKK3ZvaWQgUGFn
ZURlYnVnZ2VyQWdlbnQ6OmRpZFJlZ2lzdGVyRXZlbnRMaXN0ZW5lcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIp
Cit7CisgICAgaWYgKCFicmVha3BvaW50c0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAobV9yZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcnMuY29udGFpbnMoJmxpc3RlbmVyKSkgewor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IGNvbnRleHQuZXhlY1N0YXRlKCk7Cisg
ICAgaWYgKCFzY3JpcHRTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IGxpc3RlbmVy
SWRlbnRpZmllciA9IG1fbmV4dEV2ZW50TGlzdGVuZXJJZGVudGlmaWVyKys7CisgICAgbV9yZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lcnMuc2V0KCZsaXN0ZW5lciwgbGlzdGVuZXJJZGVudGlmaWVyKTsK
KworICAgIGRpZFNjaGVkdWxlQXN5bmNDYWxsKHNjcmlwdFN0YXRlLCBzdGF0aWNfY2FzdDxpbnQ+
KEFzeW5jaHJvbm91c0NhbGxUeXBlOjpFdmVudExpc3RlbmVyKSwgbGlzdGVuZXJJZGVudGlmaWVy
LCBsaXN0ZW5lci5pc09uY2UoKSk7Cit9CisKK3ZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OndpbGxS
ZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBsaXN0ZW5l
cikKK3sKKyAgICBhdXRvIGV2ZW50TGlzdGVuZXJJdGVyYXRvciA9IG1fcmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXJzLmZpbmQoJmxpc3RlbmVyKTsKKyAgICBpZiAoZXZlbnRMaXN0ZW5lckl0ZXJhdG9y
ID09IG1fcmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJzLmVuZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBkaWRDYW5jZWxBc3luY0NhbGwoc3RhdGljX2Nhc3Q8aW50PihBc3luY2hyb25vdXNDYWxs
VHlwZTo6RXZlbnRMaXN0ZW5lciksIGV2ZW50TGlzdGVuZXJJdGVyYXRvci0+dmFsdWUpOworCisg
ICAgbV9yZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcnMucmVtb3ZlKGV2ZW50TGlzdGVuZXJJdGVyYXRv
cik7Cit9CisKK3ZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OndpbGxIYW5kbGVFdmVudChjb25zdCBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIpCit7CisgICAgYXV0byBldmVudExpc3Rl
bmVySXRlcmF0b3IgPSBtX3JlZ2lzdGVyZWRFdmVudExpc3RlbmVycy5maW5kKCZsaXN0ZW5lcik7
CisgICAgaWYgKGV2ZW50TGlzdGVuZXJJdGVyYXRvciA9PSBtX3JlZ2lzdGVyZWRFdmVudExpc3Rl
bmVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2lsbERpc3BhdGNoQXN5bmNDYWxs
KHN0YXRpY19jYXN0PGludD4oQXN5bmNocm9ub3VzQ2FsbFR5cGU6OkV2ZW50TGlzdGVuZXIpLCBl
dmVudExpc3RlbmVySXRlcmF0b3ItPnZhbHVlKTsKK30KKwogdm9pZCBQYWdlRGVidWdnZXJBZ2Vu
dDo6ZGlkUmVxdWVzdEFuaW1hdGlvbkZyYW1lKGludCBjYWxsYmFja0lkLCBEb2N1bWVudCogZG9j
dW1lbnQpCiB7CiAgICAgaWYgKCFicmVha3BvaW50c0FjdGl2ZSgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaAppbmRleCA4YTE2ZTlhYWNjNGQ2ODllNGZh
MzA3MWUxZmJmNTM5N2YwZjQ3MzhmLi4xZDYxN2JhMmM0YTU2NzUyNjM2NWIzZDE4ZTllMDVmODE4
MThmMWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2Vy
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQu
aApAQCAtNTMsNiArNTMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYWluRnJhbWVTdG9wcGVkTG9h
ZGluZygpOwogICAgIHZvaWQgbWFpbkZyYW1lTmF2aWdhdGVkKCk7CiAKKyAgICB2b2lkIGRpZFJl
Z2lzdGVyRXZlbnRMaXN0ZW5lcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgUmVnaXN0
ZXJlZEV2ZW50TGlzdGVuZXImKTsKKyAgICB2b2lkIHdpbGxSZW1vdmVFdmVudExpc3RlbmVyKGNv
bnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJik7CisgICAgdm9pZCB3aWxsSGFuZGxlRXZlbnQo
Y29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImKTsKICAgICB2b2lkIGRpZFJlcXVlc3RBbmlt
YXRpb25GcmFtZShpbnQgY2FsbGJhY2tJZCwgRG9jdW1lbnQqKTsKICAgICB2b2lkIHdpbGxGaXJl
QW5pbWF0aW9uRnJhbWUoaW50IGNhbGxiYWNrSWQpOwogICAgIHZvaWQgZGlkQ2FuY2VsQW5pbWF0
aW9uRnJhbWUoaW50IGNhbGxiYWNrSWQpOwpAQCAtNjMsNiArNjYsOCBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICBTdHJpbmcgc291cmNlTWFwVVJMRm9yU2NyaXB0KGNvbnN0IFNjcmlwdCYpIG92ZXJyaWRl
OwogCisgICAgdm9pZCBkaWRDbGVhckFzeW5jU3RhY2tUcmFjZURhdGEoKSBvdmVycmlkZTsKKwog
cHJpdmF0ZToKICAgICB2b2lkIG11dGVDb25zb2xlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB1bm11
dGVDb25zb2xlKCkgb3ZlcnJpZGU7CkBAIC03Niw2ICs4MSw5IEBAIHByaXZhdGU6CiAKICAgICBJ
bnNwZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAgIEluc3BlY3Rvck92ZXJsYXkqIG1f
b3ZlcmxheSB7IG51bGxwdHIgfTsKKworICAgIEhhc2hNYXA8Y29uc3QgUmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXIqLCBpbnQ+IG1fcmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJzOworICAgIGludCBtX25l
eHRFdmVudExpc3RlbmVySWRlbnRpZmllciB7IDEgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCBiZjAxMDhjOWM5YzdmMDZmMmY4YzAzMzY4N2NlMjk5MzcyNDk0MzNhLi4x
YjA2MGVhMjNlMTk5MDk1M2I1MDIyY2Y4NjNkM2E3OGRkZjJkMWQ1IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMTctMDctMjEgIE1hdHQgQmFrZXIgIDxtYXR0YmFrZXJAYXBwbGUuY29tPgorCisg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IGNhcHR1cmUgYW4gYXN5bmMgc3RhY2sgdHJhY2Ugd2hlbiB3
ZWIgY29udGVudCBjYWxscyBhZGRFdmVudExpc3RlbmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ3MzkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGVzdCBjYXNlIGNoZWNraW5nIHRoYXQgYXN5
bmMgc3RhY2sgdHJhY2VzIGFyZSByZWNvcmRlZCBmb3IgYWRkRXZlbnRMaXN0ZW5lci4KKworICAg
ICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9hc3luYy1zdGFjay10cmFjZS1leHBlY3RlZC50eHQ6
CisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL2FzeW5jLXN0YWNrLXRyYWNlLmh0bWw6CisK
IDIwMTctMDctMjEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAg
IEdldCByaWQgb2YgV2ViQ29yZSBJY29uRGF0YWJhc2UgY29kZS4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9hc3luYy1zdGFjay10cmFjZS1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYXN5bmMtc3RhY2stdHJhY2UtZXhwZWN0
ZWQudHh0CmluZGV4IGZlM2NhNTY1MTA1YjE4MDUxZWVmZWNkNzA0NGFhZjBjMTNjZTNmMGMuLjZk
NDJkZWRlZGRjMWFiN2NjY2QzZjQxODJiMTQzOTk2YTZiMjNlMzcgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9hc3luYy1zdGFjay10cmFjZS1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2FzeW5jLXN0YWNrLXRyYWNlLWV4
cGVjdGVkLnR4dApAQCAtNjQsNiArNjQsMTggQEAgQVNZTkMgQ0FMTCBTVEFDSzoKIDM6IC0tLSBz
ZXRJbnRlcnZhbCAtLS0KIDQ6IFtGXSB0ZXN0UmVmZXJlbmNlQ291bnRpbmcKIDU6IFtQXSBHbG9i
YWwgQ29kZQorCistLSBSdW5uaW5nIHRlc3QgY2FzZTogQ2hlY2tBc3luY1N0YWNrVHJhY2UuQWRk
RXZlbnRMaXN0ZW5lcgorUEFVU0UgIzEKK0NBTEwgU1RBQ0s6CiswOiBbRl0gcGF1c2VUaGVuRmlu
aXNoVGVzdAorMTogW0ZdIGNsaWNrRmlyZWQKKzI6IFtGXSB0ZXN0QWRkRXZlbnRMaXN0ZW5lcgor
MzogW1BdIEdsb2JhbCBDb2RlCitBU1lOQyBDQUxMIFNUQUNLOgorNDogLS0tIGFkZEV2ZW50TGlz
dGVuZXIgLS0tCis1OiBbRl0gdGVzdEFkZEV2ZW50TGlzdGVuZXIKKzY6IFtQXSBHbG9iYWwgQ29k
ZQogLS0gUnVubmluZyB0ZXN0IHNldHVwLgogU2F2ZSBEZWJ1Z2dlck1hbmFnZXIuYXN5bmNTdGFj
a1RyYWNlRGVwdGgKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2Vy
L2FzeW5jLXN0YWNrLXRyYWNlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIv
YXN5bmMtc3RhY2stdHJhY2UuaHRtbAppbmRleCBkMTE2MWIxN2ExYzk2MDE4MjllOGY4MDU1OWVk
ZWI4OWI5YWI4M2NmLi5iMGEwNDYwNjZhMmJhZjk5NTIwYTJhNGE5YzQxOTAwZmI3MWVkMDY1IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYXN5bmMtc3RhY2stdHJh
Y2UuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYXN5bmMtc3RhY2st
dHJhY2UuaHRtbApAQCAtNDEsNiArNDEsMTUgQEAgZnVuY3Rpb24gdGVzdFJlZmVyZW5jZUNvdW50
aW5nKCkgewogICAgIH0sIHRpbWVyRGVsYXkpOwogfQogCitmdW5jdGlvbiB0ZXN0QWRkRXZlbnRM
aXN0ZW5lcigpIHsKKyAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwg
ZnVuY3Rpb24gY2xpY2tGaXJlZCgpIHsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVu
dExpc3RlbmVyKCJjbGljayIsIGNsaWNrRmlyZWQpOworICAgICAgICBwYXVzZVRoZW5GaW5pc2hU
ZXN0KCk7CisgICAgfSk7CisKKyAgICBkb2N1bWVudC5ib2R5LmNsaWNrKCk7Cit9CisKIGZ1bmN0
aW9uIHJlY3Vyc2l2ZUNhbGxUaGVuVGVzdCh0ZXN0RnVuY3Rpb24sIGRlcHRoKSB7CiAgICAgaWYg
KGRlcHRoKSB7CiAgICAgICAgIHJlY3Vyc2l2ZUNhbGxUaGVuVGVzdCh0ZXN0RnVuY3Rpb24sIGRl
cHRoIC0gMSk7CkBAIC05Myw2ICsxMDIsNyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICBhZGRTaW1w
bGVUZXN0Q2FzZSgiU2V0SW50ZXJ2YWwiLCAidGVzdFNldEludGVydmFsKDMpIik7CiAgICAgYWRk
U2ltcGxlVGVzdENhc2UoIkNoYWluZWRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAidGVzdENoYWlu
ZWRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSIpOwogICAgIGFkZFNpbXBsZVRlc3RDYXNlKCJSZWZl
cmVuY2VDb3VudGluZyIsICJ0ZXN0UmVmZXJlbmNlQ291bnRpbmcoKSIpOworICAgIGFkZFNpbXBs
ZVRlc3RDYXNlKCJBZGRFdmVudExpc3RlbmVyIiwgInRlc3RBZGRFdmVudExpc3RlbmVyKCkiKTsK
IAogICAgIGZ1bmN0aW9uIHNldHVwKHJlc29sdmUpIHsKICAgICAgICAgSW5zcGVjdG9yVGVzdC5s
b2coIlNhdmUgRGVidWdnZXJNYW5hZ2VyLmFzeW5jU3RhY2tUcmFjZURlcHRoIik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316244</attachid>
            <date>2017-07-23 17:55:23 -0700</date>
            <delta_ts>2017-07-26 18:30:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174739-20170723175522.patch</filename>
            <type>text/plain</type>
            <size>22500</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5NzY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
NmE5MjliNGViYzQ0MDg2MjZiYmFjNGI3MmFkYmQzY2IwMzQ3M2VlLi4zYTg1ZjlmZjM3ZGRkOWQ3
NWRiYjdlZDlhN2I2ZjM1ODMyNzY5NmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAxNy0wNy0yMyAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogY2FwdHVyZSBhbiBhc3luYyBzdGFjayB0cmFjZSB3
aGVuIHdlYiBjb250ZW50IGNhbGxzIGFkZEV2ZW50TGlzdGVuZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDczOQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsbG93IGRlYnVnZ2VyIGFnZW50cyB0byBw
ZXJmb3JtIGN1c3RvbSBsb2dpYyB3aGVuIGFzeW5jaHJvbm91cyBzdGFjaworICAgICAgICB0cmFj
ZSBkYXRhIGlzIGNsZWFyZWQuIEZvciBleGFtcGxlLCB0aGUgUGFnZURlYnVnZ2VyQWdlbnQgd291
bGQgY2xlYXIKKyAgICAgICAgaXRzIGxpc3Qgb2YgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMgZm9yIHdo
aWNoIGNhbGwgc3RhY2tzIGhhdmUgYmVlbiByZWNvcmRlZC4KKworICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6
Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNsZWFyQXN5bmNTdGFja1RyYWNlRGF0YSk6CisgICAg
ICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmg6CisKIDIwMTct
MDctMTQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBJdCBzaG91
bGQgYmUgZWFzeSB0byBkZWNpZGUgaG93IFdlYktpdCB5aWVsZHMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjODFj
Yzc1ZWYyNDI5MjBhNzE4ZjUzNjFlYjFjZGJjMmQzMzU2NTdhLi4xMmM5N2JjODQwMDJkMzY3ZDdh
NGVkMmVjNmFiOTgyYjRlNmU5ZjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTct
MDctMjMgIE1hdHQgQmFrZXIgIDxtYXR0YmFrZXJAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IGNhcHR1cmUgYW4gYXN5bmMgc3RhY2sgdHJhY2Ugd2hlbiB3ZWIgY29udGVudCBj
YWxscyBhZGRFdmVudExpc3RlbmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzQ3MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUZXN0OiBpbnNwZWN0b3IvZGVidWdnZXIvYXN5bmMtc3RhY2stdHJhY2Uu
aHRtbAorCisgICAgICAgIEFkZCBpbnN0cnVtZW50YXRpb24gdG8gRXZlbnRUYXJnZXQgdG8gc3Vw
cG9ydCBzaG93aW5nIGFzeW5jaHJvbm91cworICAgICAgICBzdGFjayB0cmFjZXMgd2hlbiB0aGUg
ZGVidWdnZXIgYnJlYWtzIGluIGEgc2NyaXB0IGV2ZW50IGxpc3RlbmVyLgorCisgICAgICAgICog
ZG9tL0V2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjphZGRF
dmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVu
dExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpmaXJlRXZlbnRMaXN0
ZW5lcnMpOgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFzeW5jaHJvbm91c0NhbGxU
eXBlLmg6CisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVnaXN0
ZXJFdmVudExpc3RlbmVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxSZW1vdmVFdmVudExpc3RlbmVySW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxIYW5kbGVFdmVudEltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRIYW5kbGVFdmVudEltcGwp
OgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWdpc3RlckV2ZW50
TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsUmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OndpbGxIYW5kbGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZEhhbmRsZUV2ZW50KToKKworICAgICAgICAqIGluc3BlY3Rv
ci9QYWdlRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJB
Z2VudDo6ZGlkQ2xlYXJBc3luY1N0YWNrVHJhY2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2VEZWJ1Z2dlckFnZW50OjpkaWRSZWdpc3RlckV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZURlYnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50Ojp3aWxsSGFuZGxlRXZlbnQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oOgorCiAyMDE3LTA3LTIyICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgRml4ZWQgYnVpbGRpbmcgZm9yIG1h
Y09TIDEwLjEyIHdpdGggdGhlIG1hY09TIDEwLjEzIFNESyBhZnRlciByMjE5NjQ0LgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCA4ODZlZGY1NDcwODMwZjZlMGI4ZjQxZTg0
NTYzNzgzNzYxMWNhM2UzLi45OTAwNDMyNTAyZjc2ZTdkOTJlMzljNmU3MGQ1M2MzN2M5YTBmZjVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAtMTE0MCw2ICsxMTQwLDgg
QEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjbGVhckFzeW5jU3RhY2tUcmFjZURhdGEo
KQogewogICAgIG1fcGVuZGluZ0FzeW5jQ2FsbHMuY2xlYXIoKTsKICAgICBtX2N1cnJlbnRBc3lu
Y0NhbGxJZGVudGlmaWVyID0gc3RkOjpudWxsb3B0OworCisgICAgZGlkQ2xlYXJBc3luY1N0YWNr
VHJhY2VEYXRhKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJB
Z2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5oCmluZGV4IDE0NTZkYmNkMDQ5ZTdiZDAyZWQ3YTI4MjhkNjAzNDg2NTc1
M2MxNTguLmFjMjJiOGZmNjU5ZmZkN2U2OWZhZTI3YzlhMjliOGYzODVlZjI4ZWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVn
Z2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTEzMCw2ICsxMzAsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCBTdHJpbmcgc291cmNlTWFwVVJMRm9yU2NyaXB0KGNvbnN0IFNjcmlwdCYpOwog
CiAgICAgdm9pZCBkaWRDbGVhckdsb2JhbE9iamVjdCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRD
bGVhckFzeW5jU3RhY2tUcmFjZURhdGEoKSB7IH0KIAogcHJpdmF0ZToKICAgICBSZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxG
cmFtZT4+IGN1cnJlbnRDYWxsRnJhbWVzKGNvbnN0IEluamVjdGVkU2NyaXB0Jik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50VGFyZ2V0LmNwcAppbmRleCBhMzYzNzU1NzM4OGMxMjNhYTgwN2E5ZjNmZGNjNzBh
YWE2NzZjMmZlLi40MDFlMGEwNDFjNmFlY2U3NGEzZDU5ODA1YzZiZTQ1MzkyNzE1NmUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKQEAgLTY5LDcgKzY5LDE2IEBAIGJvb2wgRXZlbnRU
YXJnZXQ6OmlzTWVzc2FnZVBvcnQoKSBjb25zdAogCiBib29sIEV2ZW50VGFyZ2V0OjphZGRFdmVu
dExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBSZWY8RXZlbnRMaXN0ZW5l
cj4mJiBsaXN0ZW5lciwgY29uc3QgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMmIG9wdGlvbnMpCiB7
Ci0gICAgcmV0dXJuIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpLmV2ZW50TGlzdGVuZXJNYXAuYWRk
KGV2ZW50VHlwZSwgV1RGTW92ZShsaXN0ZW5lciksIHsgb3B0aW9ucy5jYXB0dXJlLCBvcHRpb25z
LnBhc3NpdmUsIG9wdGlvbnMub25jZSB9KTsKKyAgICBib29sIGxpc3RlbmVySXNTY3JpcHREZWJ1
Z2dhYmxlID0gbGlzdGVuZXItPnR5cGUoKSA9PSBFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVu
ZXJUeXBlICYmICFsaXN0ZW5lci0+d2FzQ3JlYXRlZEZyb21NYXJrdXAoKTsKKyAgICBpZiAoIWVu
c3VyZUV2ZW50VGFyZ2V0RGF0YSgpLmV2ZW50TGlzdGVuZXJNYXAuYWRkKGV2ZW50VHlwZSwgV1RG
TW92ZShsaXN0ZW5lciksIHsgb3B0aW9ucy5jYXB0dXJlLCBvcHRpb25zLnBhc3NpdmUsIG9wdGlv
bnMub25jZSB9KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGxpc3RlbmVySXNT
Y3JpcHREZWJ1Z2dhYmxlKSB7CisgICAgICAgIGF1dG8mIGxpc3RlbmVyc0ZvclR5cGUgPSBldmVu
dExpc3RlbmVycyhldmVudFR5cGUpOworICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZFJlZ2lzdGVyRXZlbnRMaXN0ZW5lcigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqbGlz
dGVuZXJzRm9yVHlwZS5sYXN0KCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwogfQogCiB2
b2lkIEV2ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyRm9yQmluZGluZ3MoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIFJlZlB0cjxFdmVudExpc3RlbmVyPiYmIGxpc3RlbmVyLCBBZGRF
dmVudExpc3RlbmVyT3B0aW9uc09yQm9vbGVhbiYmIHZhcmlhbnQpCkBAIC0xMDMsNyArMTEyLDE4
IEBAIHZvaWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXJGb3JCaW5kaW5ncyhjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwKIGJvb2wgRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50
TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxp
c3RlbmVyLCBjb25zdCBMaXN0ZW5lck9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgYXV0byogZGF0
YSA9IGV2ZW50VGFyZ2V0RGF0YSgpOwotICAgIHJldHVybiBkYXRhICYmIGRhdGEtPmV2ZW50TGlz
dGVuZXJNYXAucmVtb3ZlKGV2ZW50VHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMuY2FwdHVyZSk7Cisg
ICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBsaXN0ZW5l
cnNGb3JUeXBlID0gZXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBlKTsKKyAgICBmb3IgKGF1dG8mIHJl
Z2lzdGVyZWRMaXN0ZW5lciA6IGxpc3RlbmVyc0ZvclR5cGUpIHsKKyAgICAgICAgaWYgKHJlZ2lz
dGVyZWRMaXN0ZW5lci0+Y2FsbGJhY2soKSA9PSBsaXN0ZW5lciAmJiByZWdpc3RlcmVkTGlzdGVu
ZXItPnVzZUNhcHR1cmUoKSA9PSBvcHRpb25zLmNhcHR1cmUpIHsKKyAgICAgICAgICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZUV2ZW50TGlzdGVuZXIoKnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSwgKnJlZ2lzdGVyZWRMaXN0ZW5lcik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBkYXRhLT5ldmVudExpc3RlbmVyTWFwLnJl
bW92ZShldmVudFR5cGUsIGxpc3RlbmVyLCBvcHRpb25zLmNhcHR1cmUpOwogfQogCiBib29sIEV2
ZW50VGFyZ2V0OjpzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mJiBsaXN0ZW5lciwgRE9NV3JhcHBlcldv
cmxkJiBpc29sYXRlZFdvcmxkKQpAQCAtMjYxLDggKzI4MSw5IEBAIHZvaWQgRXZlbnRUYXJnZXQ6
OmZpcmVFdmVudExpc3RlbmVycyhFdmVudCYgZXZlbnQsIEV2ZW50TGlzdGVuZXJWZWN0b3IgbGlz
dGVuZXJzCiAgICAgICAgIGlmIChyZWdpc3RlcmVkTGlzdGVuZXItPmlzUGFzc2l2ZSgpKQogICAg
ICAgICAgICAgZXZlbnQuc2V0SW5QYXNzaXZlTGlzdGVuZXIodHJ1ZSk7CiAKLSAgICAgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsSGFuZGxlRXZlbnQoJmNvbnRleHQsIGV2ZW50KTsK
KyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsSGFuZGxlRXZlbnQoY29udGV4
dCwgZXZlbnQsICpyZWdpc3RlcmVkTGlzdGVuZXIpOwogICAgICAgICByZWdpc3RlcmVkTGlzdGVu
ZXItPmNhbGxiYWNrKCkuaGFuZGxlRXZlbnQoY29udGV4dCwgZXZlbnQpOworICAgICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEhhbmRsZUV2ZW50KGNvbnRleHQpOwogCiAgICAgICAg
IGlmIChyZWdpc3RlcmVkTGlzdGVuZXItPmlzUGFzc2l2ZSgpKQogICAgICAgICAgICAgZXZlbnQu
c2V0SW5QYXNzaXZlTGlzdGVuZXIoZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckFzeW5jaHJvbm91c0NhbGxUeXBlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXN5bmNocm9ub3VzQ2FsbFR5cGUuaAppbmRleCAxMTdmOGU0
YThhMDBkMmIxZWZjNmQ4ZWRkYjc2OGUzZjM3N2YwNWM0Li5hZDgxNjZlZTU5OGE3MGZkZmJlMDlh
NWFlNDQ2MTY4MTViMDU3Mjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQXN5bmNocm9ub3VzQ2FsbFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQXN5bmNocm9ub3VzQ2FsbFR5cGUuaApAQCAtMjksNiArMjksNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gY2xhc3MgQXN5bmNocm9ub3VzQ2FsbFR5cGUgewog
ICAgIEFuaW1hdGlvbkZyYW1lID0gMSwKKyAgICBFdmVudExpc3RlbmVyLAogICAgIFRpbWVyLAog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmNwcAppbmRleCAzMGVmNjVlMmRlZDk5ZWJmNmM3NmZjNWFkY2U4NTY4ZDI5NWQw
OTE3Li5lZTNhODE3OWZiMmRlMjE1ZjkzNmFjN2ZkNDYyYzM1YWQ1ZTY1MTMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNw
cApAQCAtMzUxLDYgKzM1MSwxOCBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
UmVtb3ZlVGltZXJJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbgogICAgICAgICB0
aW1lbGluZUFnZW50LT5kaWRSZW1vdmVUaW1lcih0aW1lcklkLCBmcmFtZUZvclNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoY29udGV4dCkpOwogfQogCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkUmVnaXN0ZXJFdmVudExpc3RlbmVySW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIs
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKFBhZ2VEZWJ1Z2dl
ckFnZW50KiBwYWdlRGVidWdnZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMucGFnZURlYnVn
Z2VyQWdlbnQoKSkKKyAgICAgICAgcGFnZURlYnVnZ2VyQWdlbnQtPmRpZFJlZ2lzdGVyRXZlbnRM
aXN0ZW5lcihjb250ZXh0LCBsaXN0ZW5lcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsUmVtb3ZlRXZlbnRMaXN0ZW5lckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYg
aW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIGxpc3Rl
bmVyKQoreworICAgIGlmIChQYWdlRGVidWdnZXJBZ2VudCogcGFnZURlYnVnZ2VyQWdlbnQgPSBp
bnN0cnVtZW50aW5nQWdlbnRzLnBhZ2VEZWJ1Z2dlckFnZW50KCkpCisgICAgICAgIHBhZ2VEZWJ1
Z2dlckFnZW50LT53aWxsUmVtb3ZlRXZlbnRMaXN0ZW5lcihsaXN0ZW5lcik7Cit9CisKIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxD
YWxsRnVuY3Rpb25JbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMs
IGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSwgaW50IHNjcmlwdExpbmUsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgaW50IHRpbWVsaW5lQWdlbnRJZCA9IDA7CkBAIC0z
NzksMTEgKzM5MSwyMCBAQCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVudEltcGwoSQogICAgIHJldHVybiBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoaW5zdHJ1bWVudGluZ0FnZW50cywgdGltZWxpbmVB
Z2VudElkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxIYW5kbGVF
dmVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3Qg
RXZlbnQmIGV2ZW50KQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxIYW5kbGVF
dmVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3Qg
RXZlbnQmIGV2ZW50LCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIpCiB7
CisgICAgaWYgKFBhZ2VEZWJ1Z2dlckFnZW50KiBwYWdlRGVidWdnZXJBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMucGFnZURlYnVnZ2VyQWdlbnQoKSkKKyAgICAgICAgcGFnZURlYnVnZ2VyQWdl
bnQtPndpbGxIYW5kbGVFdmVudChsaXN0ZW5lcik7CisKICAgICBwYXVzZU9uTmF0aXZlRXZlbnRJ
Zk5lZWRlZChpbnN0cnVtZW50aW5nQWdlbnRzLCB0cnVlLCBldmVudC50eXBlKCksIGZhbHNlKTsK
IH0KIAordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEhhbmRsZUV2ZW50SW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzKQoreworICAgIGlmIChJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5p
bnNwZWN0b3JEZWJ1Z2dlckFnZW50KCkpCisgICAgICAgIGRlYnVnZ2VyQWdlbnQtPmRpZERpc3Bh
dGNoQXN5bmNDYWxsKCk7Cit9CisKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRE
aXNwYXRjaEV2ZW50SW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmIGNv
b2tpZSkKIHsKICAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9
IHJldHJpZXZlVGltZWxpbmVBZ2VudChjb29raWUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCmluZGV4IGMwMWMxM2JkZGYxM2Y4
ZmQ1MWUzYTczZDhjMWViNzcyMmJiMDI1MDUuLjY5Nzg4YTc5MTc3YTMxNmQyNTM0MTNkMTQ5NDM5
MjA4MjZlNTRlN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmgKQEAgLTY5LDYgKzY5LDcgQEAgY2xhc3MgSW5zdHJ1bWVudGlu
Z0FnZW50czsKIGNsYXNzIE5ldHdvcmtMb2FkTWV0cmljczsKIGNsYXNzIE5vZGU7CiBjbGFzcyBQ
c2V1ZG9FbGVtZW50OworY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI7CiBjbGFzcyBSZW5k
ZXJMYXllcjsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlc291cmNlTG9hZGVyOwpAQCAt
MTI3LDkgKzEyOCwxMiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llIHdpbGxDYWxsRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IFN0cmluZyYgc2NyaXB0TmFtZSwgaW50IHNjcmlwdExpbmUpOwogICAgIHN0YXRpYyB2b2lk
IGRpZENhbGxGdW5jdGlvbihjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgc3RhdGljIHZvaWQgZGlkUmVnaXN0ZXJFdmVu
dExpc3RlbmVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBSZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lciYpOworICAgIHN0YXRpYyB2b2lkIHdpbGxSZW1vdmVFdmVudExpc3RlbmVyKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYpOwogICAg
IHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbERpc3BhdGNoRXZlbnQo
RG9jdW1lbnQmLCBjb25zdCBFdmVudCYsIGJvb2wgaGFzRXZlbnRMaXN0ZW5lcnMpOwogICAgIHN0
YXRpYyB2b2lkIGRpZERpc3BhdGNoRXZlbnQoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llJik7Ci0gICAgc3RhdGljIHZvaWQgd2lsbEhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBjb25zdCBFdmVudCYpOworICAgIHN0YXRpYyB2b2lkIHdpbGxIYW5kbGVFdmVu
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRXZlbnQmLCBjb25zdCBSZWdpc3RlcmVk
RXZlbnRMaXN0ZW5lciYpOworICAgIHN0YXRpYyB2b2lkIGRpZEhhbmRsZUV2ZW50KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmKTsKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llIHdpbGxEaXNwYXRjaEV2ZW50T25XaW5kb3coRnJhbWUqLCBjb25zdCBFdmVudCYsIERPTVdp
bmRvdyYpOwogICAgIHN0YXRpYyB2b2lkIGRpZERpc3BhdGNoRXZlbnRPbldpbmRvdyhjb25zdCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llIHdpbGxFdmFsdWF0ZVNjcmlwdChGcmFtZSYsIGNvbnN0IFN0cmlu
ZyYgdXJsLCBpbnQgbGluZU51bWJlcik7CkBAIC0yODUsOCArMjg5LDExIEBAIHByaXZhdGU6CiAK
ICAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxDYWxsRnVuY3Rp
b25JbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUsIGlu
dCBzY3JpcHRMaW5lLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAgICAgc3RhdGljIHZvaWQg
ZGlkQ2FsbEZ1bmN0aW9uSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUm
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgc3RhdGljIHZvaWQgZGlkUmVnaXN0ZXJF
dmVudExpc3RlbmVySW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgY29uc3QgUmVnaXN0ZXJlZEV2
ZW50TGlzdGVuZXImLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CisgICAgc3RhdGljIHZvaWQg
d2lsbFJlbW92ZUV2ZW50TGlzdGVuZXJJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBjb25zdCBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYpOwogICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25Db29raWUgd2lsbERpc3BhdGNoRXZlbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBE
b2N1bWVudCYsIGNvbnN0IEV2ZW50JiwgYm9vbCBoYXNFdmVudExpc3RlbmVycyk7Ci0gICAgc3Rh
dGljIHZvaWQgd2lsbEhhbmRsZUV2ZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgY29uc3Qg
RXZlbnQmKTsKKyAgICBzdGF0aWMgdm9pZCB3aWxsSGFuZGxlRXZlbnRJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMmLCBjb25zdCBFdmVudCYsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJik7
CisgICAgc3RhdGljIHZvaWQgZGlkSGFuZGxlRXZlbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMm
KTsKICAgICBzdGF0aWMgdm9pZCBkaWREaXNwYXRjaEV2ZW50SW1wbChjb25zdCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUmKTsKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ29va2llIHdpbGxEaXNwYXRjaEV2ZW50T25XaW5kb3dJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMmLCBjb25zdCBFdmVudCYsIERPTVdpbmRvdyYpOwogICAgIHN0YXRpYyB2b2lkIGRpZERpc3Bh
dGNoRXZlbnRPbldpbmRvd0ltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2ll
Jik7CkBAIC02MjksNiArNjM2LDIwIEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkUmVtb3ZlVGltZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29uCiAgICAgICAg
IGRpZFJlbW92ZVRpbWVySW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgdGltZXJJZCwgY29udGV4
dCk7CiB9CiAKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVnaXN0
ZXJFdmVudExpc3RlbmVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyJiBsaXN0ZW5lcikKK3sKKyAgICBGQVNUX1JFVFVSTl9JRl9O
T19GUk9OVEVORFModm9pZCgpKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQpKQor
ICAgICAgICBkaWRSZWdpc3RlckV2ZW50TGlzdGVuZXJJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRz
LCBsaXN0ZW5lciwgY29udGV4dCk7Cit9CisKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbFJlbW92ZUV2ZW50TGlzdGVuZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyKQoreworICAg
IEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOworICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNv
bnRleHQoY29udGV4dCkpCisgICAgICAgIHdpbGxSZW1vdmVFdmVudExpc3RlbmVySW1wbCgqaW5z
dHJ1bWVudGluZ0FnZW50cywgbGlzdGVuZXIpOworfQorCiBpbmxpbmUgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbENhbGxGdW5jdGlv
bihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHNjcmlwdE5h
bWUsIGludCBzY3JpcHRMaW5lKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyhJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoKSk7CkBAIC02NTksMTEgKzY4MCwxOCBAQCBp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRXZlbnQoY29u
c3QgSW5zcGVjdG9ySW5zdHJ1bWVudAogICAgICAgICBkaWREaXNwYXRjaEV2ZW50SW1wbChjb29r
aWUpOwogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxIYW5k
bGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBFdmVudCYgZXZl
bnQpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxIYW5kbGVFdmVu
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBFdmVudCYgZXZlbnQsIGNv
bnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBsaXN0ZW5lcikKK3sKKyAgICBGQVNUX1JFVFVS
Tl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGNvbnRl
eHQpKQorICAgICAgICByZXR1cm4gd2lsbEhhbmRsZUV2ZW50SW1wbCgqaW5zdHJ1bWVudGluZ0Fn
ZW50cywgZXZlbnQsIGxpc3RlbmVyKTsKK30KKworaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRIYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
KQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwogICAgIGlmIChJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0Fn
ZW50c0ZvckNvbnRleHQoY29udGV4dCkpCi0gICAgICAgIHJldHVybiB3aWxsSGFuZGxlRXZlbnRJ
bXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBldmVudCk7CisgICAgICAgIHJldHVybiBkaWRIYW5k
bGVFdmVudEltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMpOwogfQogCiBpbmxpbmUgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3Bh
dGNoRXZlbnRPbldpbmRvdyhGcmFtZSogZnJhbWUsIGNvbnN0IEV2ZW50JiBldmVudCwgRE9NV2lu
ZG93JiB3aW5kb3cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURl
YnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFn
ZW50LmNwcAppbmRleCAwNGQ3MmU4NTIwYjA0ZGE5YTQ1ZGY0MTY4ODM4YzJhZTkyZjdlY2U3Li4z
Y2U5Y2I4YzBjMjAzNDI5ZTNmYTBhZjY4YjRlNjdlZmM5YzE5OTJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAKQEAgLTQyLDYgKzQyLDcgQEAK
ICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUNvbnNvbGVDbGllbnQuaCIKICNpbmNs
dWRlICJQYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHQuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmg+CkBAIC05NCw2ICs5NSwxMiBAQCBTdHJpbmcgUGFnZURlYnVnZ2VyQWdlbnQ6OnNvdXJj
ZU1hcFVSTEZvclNjcmlwdChjb25zdCBTY3JpcHQmIHNjcmlwdCkKICAgICByZXR1cm4gSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6c291cmNlTWFwVVJMRm9yU2NyaXB0KHNjcmlwdCk7CiB9CiAKK3Zv
aWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmRpZENsZWFyQXN5bmNTdGFja1RyYWNlRGF0YSgpCit7Cisg
ICAgbV9yZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcnMuY2xlYXIoKTsKKyAgICBtX25leHRFdmVudExp
c3RlbmVySWRlbnRpZmllciA9IDE7Cit9CisKIHZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6Om11dGVD
b25zb2xlKCkKIHsKICAgICBQYWdlQ29uc29sZUNsaWVudDo6bXV0ZSgpOwpAQCAtMTUyLDYgKzE1
OSw0NiBAQCB2b2lkIFBhZ2VEZWJ1Z2dlckFnZW50OjptYWluRnJhbWVOYXZpZ2F0ZWQoKQogICAg
IHNldFN1cHByZXNzQWxsUGF1c2VzKGZhbHNlKTsKIH0KIAordm9pZCBQYWdlRGVidWdnZXJBZ2Vu
dDo6ZGlkUmVnaXN0ZXJFdmVudExpc3RlbmVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBsaXN0ZW5lcikKK3sKKyAgICBpZiAo
IWJyZWFrcG9pbnRzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3JlZ2lz
dGVyZWRFdmVudExpc3RlbmVycy5jb250YWlucygmbGlzdGVuZXIpKSB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNDOjpFeGVj
U3RhdGUqIHNjcmlwdFN0YXRlID0gY29udGV4dC5leGVjU3RhdGUoKTsKKyAgICBpZiAoIXNjcmlw
dFN0YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgbGlzdGVuZXJJZGVudGlmaWVyID0g
bV9uZXh0RXZlbnRMaXN0ZW5lcklkZW50aWZpZXIrKzsKKyAgICBtX3JlZ2lzdGVyZWRFdmVudExp
c3RlbmVycy5zZXQoJmxpc3RlbmVyLCBsaXN0ZW5lcklkZW50aWZpZXIpOworCisgICAgZGlkU2No
ZWR1bGVBc3luY0NhbGwoc2NyaXB0U3RhdGUsIHN0YXRpY19jYXN0PGludD4oQXN5bmNocm9ub3Vz
Q2FsbFR5cGU6OkV2ZW50TGlzdGVuZXIpLCBsaXN0ZW5lcklkZW50aWZpZXIsIGxpc3RlbmVyLmlz
T25jZSgpKTsKK30KKwordm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6d2lsbFJlbW92ZUV2ZW50TGlz
dGVuZXIoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyKQoreworICAgIGF1
dG8gZXZlbnRMaXN0ZW5lckl0ZXJhdG9yID0gbV9yZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcnMuZmlu
ZCgmbGlzdGVuZXIpOworICAgIGlmIChldmVudExpc3RlbmVySXRlcmF0b3IgPT0gbV9yZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lcnMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRpZENhbmNl
bEFzeW5jQ2FsbChzdGF0aWNfY2FzdDxpbnQ+KEFzeW5jaHJvbm91c0NhbGxUeXBlOjpFdmVudExp
c3RlbmVyKSwgZXZlbnRMaXN0ZW5lckl0ZXJhdG9yLT52YWx1ZSk7CisKKyAgICBtX3JlZ2lzdGVy
ZWRFdmVudExpc3RlbmVycy5yZW1vdmUoZXZlbnRMaXN0ZW5lckl0ZXJhdG9yKTsKK30KKwordm9p
ZCBQYWdlRGVidWdnZXJBZ2VudDo6d2lsbEhhbmRsZUV2ZW50KGNvbnN0IFJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyJiBsaXN0ZW5lcikKK3sKKyAgICBhdXRvIGV2ZW50TGlzdGVuZXJJdGVyYXRvciA9
IG1fcmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJzLmZpbmQoJmxpc3RlbmVyKTsKKyAgICBpZiAoZXZl
bnRMaXN0ZW5lckl0ZXJhdG9yID09IG1fcmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJzLmVuZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICB3aWxsRGlzcGF0Y2hBc3luY0NhbGwoc3RhdGljX2Nhc3Q8
aW50PihBc3luY2hyb25vdXNDYWxsVHlwZTo6RXZlbnRMaXN0ZW5lciksIGV2ZW50TGlzdGVuZXJJ
dGVyYXRvci0+dmFsdWUpOworfQorCiB2b2lkIFBhZ2VEZWJ1Z2dlckFnZW50OjpkaWRSZXF1ZXN0
QW5pbWF0aW9uRnJhbWUoaW50IGNhbGxiYWNrSWQsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAg
ICBpZiAoIWJyZWFrcG9pbnRzQWN0aXZlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Q
YWdlRGVidWdnZXJBZ2VudC5oCmluZGV4IDhhMTZlOWFhY2M0ZDY4OWU0ZmEzMDcxZTFmYmY1Mzk3
ZjBmNDczOGYuLjhhZjNjMTg2ZWQxYTUxOGM4MWNhNjk3MWMwYzdkMWM0OWEzZGE0OGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oCkBAIC0zOSw2ICsz
OSw4IEBAIGNsYXNzIERvY3VtZW50OwogY2xhc3MgSW5zcGVjdG9yT3ZlcmxheTsKIGNsYXNzIElu
c3BlY3RvclBhZ2VBZ2VudDsKIGNsYXNzIFBhZ2U7CitjbGFzcyBSZWdpc3RlcmVkRXZlbnRMaXN0
ZW5lcjsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIGNsYXNzIFBhZ2VEZWJ1Z2dl
ckFnZW50IGZpbmFsIDogcHVibGljIFdlYkRlYnVnZ2VyQWdlbnQgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFBhZ2VEZWJ1Z2dlckFnZW50KTsKQEAgLTUzLDYgKzU1LDkgQEAgcHVibGljOgog
ICAgIHZvaWQgbWFpbkZyYW1lU3RvcHBlZExvYWRpbmcoKTsKICAgICB2b2lkIG1haW5GcmFtZU5h
dmlnYXRlZCgpOwogCisgICAgdm9pZCBkaWRSZWdpc3RlckV2ZW50TGlzdGVuZXIoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJik7CisgICAgdm9p
ZCB3aWxsUmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYp
OworICAgIHZvaWQgd2lsbEhhbmRsZUV2ZW50KGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
Jik7CiAgICAgdm9pZCBkaWRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaW50IGNhbGxiYWNrSWQsIERv
Y3VtZW50Kik7CiAgICAgdm9pZCB3aWxsRmlyZUFuaW1hdGlvbkZyYW1lKGludCBjYWxsYmFja0lk
KTsKICAgICB2b2lkIGRpZENhbmNlbEFuaW1hdGlvbkZyYW1lKGludCBjYWxsYmFja0lkKTsKQEAg
LTYzLDYgKzY4LDggQEAgcHJvdGVjdGVkOgogCiAgICAgU3RyaW5nIHNvdXJjZU1hcFVSTEZvclNj
cmlwdChjb25zdCBTY3JpcHQmKSBvdmVycmlkZTsKIAorICAgIHZvaWQgZGlkQ2xlYXJBc3luY1N0
YWNrVHJhY2VEYXRhKCkgb3ZlcnJpZGU7CisKIHByaXZhdGU6CiAgICAgdm9pZCBtdXRlQ29uc29s
ZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIG92ZXJyaWRlOwpAQCAtNzYs
NiArODMsOSBAQCBwcml2YXRlOgogCiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2Vu
dDsKICAgICBJbnNwZWN0b3JPdmVybGF5KiBtX292ZXJsYXkgeyBudWxscHRyIH07CisKKyAgICBI
YXNoTWFwPGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyKiwgaW50PiBtX3JlZ2lzdGVyZWRF
dmVudExpc3RlbmVyczsKKyAgICBpbnQgbV9uZXh0RXZlbnRMaXN0ZW5lcklkZW50aWZpZXIgeyAx
IH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNjUxZjU3OWFjY2MwYTVj
NTUyNDcyNmVhYjU1NThmOTkwYjVhYjA2OC4uODE2NDFkYzYzNmI1MzFjNzEwMTYwMjRlNGViM2M0
ZjA1YzU2ZDVjNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE3LTA3LTIzIE1hdHQgQmFrZXIg
IDxtYXR0YmFrZXJAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGNhcHR1cmUg
YW4gYXN5bmMgc3RhY2sgdHJhY2Ugd2hlbiB3ZWIgY29udGVudCBjYWxscyBhZGRFdmVudExpc3Rl
bmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ3
MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
dGVzdCBjYXNlIGNoZWNraW5nIHRoYXQgYXN5bmMgc3RhY2sgdHJhY2VzIGFyZSByZWNvcmRlZCBm
b3IgYWRkRXZlbnRMaXN0ZW5lci4KKworICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9hc3lu
Yy1zdGFjay10cmFjZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2Vy
L2FzeW5jLXN0YWNrLXRyYWNlLmh0bWw6CisKIDIwMTctMDctMjIgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBNZXJnZSBFeGNlcHRpb25CYXNlIGludG8gRE9NRXhj
ZXB0aW9uIGFuZCBkcm9wIGN1c3RvbSB0b1N0cmluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2RlYnVnZ2VyL2FzeW5jLXN0YWNrLXRyYWNlLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9hc3luYy1zdGFjay10cmFjZS1leHBlY3RlZC50eHQK
aW5kZXggZmUzY2E1NjUxMDViMTgwNTFlZWZlY2Q3MDQ0YWFmMGMxM2NlM2YwYy4uNmQ0MmRlZGVk
ZGMxYWI3Y2NjZDNmNDE4MmIxNDM5OTZhNmIyM2UzNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2RlYnVnZ2VyL2FzeW5jLXN0YWNrLXRyYWNlLWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYXN5bmMtc3RhY2stdHJhY2UtZXhwZWN0ZWQu
dHh0CkBAIC02NCw2ICs2NCwxOCBAQCBBU1lOQyBDQUxMIFNUQUNLOgogMzogLS0tIHNldEludGVy
dmFsIC0tLQogNDogW0ZdIHRlc3RSZWZlcmVuY2VDb3VudGluZwogNTogW1BdIEdsb2JhbCBDb2Rl
CisKKy0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBDaGVja0FzeW5jU3RhY2tUcmFjZS5BZGRFdmVudExp
c3RlbmVyCitQQVVTRSAjMQorQ0FMTCBTVEFDSzoKKzA6IFtGXSBwYXVzZVRoZW5GaW5pc2hUZXN0
CisxOiBbRl0gY2xpY2tGaXJlZAorMjogW0ZdIHRlc3RBZGRFdmVudExpc3RlbmVyCiszOiBbUF0g
R2xvYmFsIENvZGUKK0FTWU5DIENBTEwgU1RBQ0s6Cis0OiAtLS0gYWRkRXZlbnRMaXN0ZW5lciAt
LS0KKzU6IFtGXSB0ZXN0QWRkRXZlbnRMaXN0ZW5lcgorNjogW1BdIEdsb2JhbCBDb2RlCiAtLSBS
dW5uaW5nIHRlc3Qgc2V0dXAuCiBTYXZlIERlYnVnZ2VyTWFuYWdlci5hc3luY1N0YWNrVHJhY2VE
ZXB0aAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYXN5bmMt
c3RhY2stdHJhY2UuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9hc3luYy1z
dGFjay10cmFjZS5odG1sCmluZGV4IGQxMTYxYjE3YTFjOTYwMTgyOWU4ZjgwNTU5ZWRlYjg5Yjlh
YjgzY2YuLmIwYTA0NjA2NmEyYmFmOTk1MjBhMmE0YTljNDE5MDBmYjcxZWQwNjUgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9hc3luYy1zdGFjay10cmFjZS5odG1s
CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9hc3luYy1zdGFjay10cmFjZS5o
dG1sCkBAIC00MSw2ICs0MSwxNSBAQCBmdW5jdGlvbiB0ZXN0UmVmZXJlbmNlQ291bnRpbmcoKSB7
CiAgICAgfSwgdGltZXJEZWxheSk7CiB9CiAKK2Z1bmN0aW9uIHRlc3RBZGRFdmVudExpc3RlbmVy
KCkgeworICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlv
biBjbGlja0ZpcmVkKCkgeworICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVu
ZXIoImNsaWNrIiwgY2xpY2tGaXJlZCk7CisgICAgICAgIHBhdXNlVGhlbkZpbmlzaFRlc3QoKTsK
KyAgICB9KTsKKworICAgIGRvY3VtZW50LmJvZHkuY2xpY2soKTsKK30KKwogZnVuY3Rpb24gcmVj
dXJzaXZlQ2FsbFRoZW5UZXN0KHRlc3RGdW5jdGlvbiwgZGVwdGgpIHsKICAgICBpZiAoZGVwdGgp
IHsKICAgICAgICAgcmVjdXJzaXZlQ2FsbFRoZW5UZXN0KHRlc3RGdW5jdGlvbiwgZGVwdGggLSAx
KTsKQEAgLTkzLDYgKzEwMiw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgIGFkZFNpbXBsZVRlc3RD
YXNlKCJTZXRJbnRlcnZhbCIsICJ0ZXN0U2V0SW50ZXJ2YWwoMykiKTsKICAgICBhZGRTaW1wbGVU
ZXN0Q2FzZSgiQ2hhaW5lZFJlcXVlc3RBbmltYXRpb25GcmFtZSIsICJ0ZXN0Q2hhaW5lZFJlcXVl
c3RBbmltYXRpb25GcmFtZSgpIik7CiAgICAgYWRkU2ltcGxlVGVzdENhc2UoIlJlZmVyZW5jZUNv
dW50aW5nIiwgInRlc3RSZWZlcmVuY2VDb3VudGluZygpIik7CisgICAgYWRkU2ltcGxlVGVzdENh
c2UoIkFkZEV2ZW50TGlzdGVuZXIiLCAidGVzdEFkZEV2ZW50TGlzdGVuZXIoKSIpOwogCiAgICAg
ZnVuY3Rpb24gc2V0dXAocmVzb2x2ZSkgewogICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiU2F2
ZSBEZWJ1Z2dlck1hbmFnZXIuYXN5bmNTdGFja1RyYWNlRGVwdGgiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316504</attachid>
            <date>2017-07-26 18:30:47 -0700</date>
            <delta_ts>2017-07-28 16:38:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174739-20170726183045.patch</filename>
            <type>text/plain</type>
            <size>23509</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5ODkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
OWIwMjA5OGMyMzJjY2QxOTJiZTA1Y2FhNWRjOWFhNDdkZjBiMzVjLi5kNGExNGVjYjI1MDgyNGQx
M2ZiNTNiYWFkYjA5MDcyNzQ5OWNkYjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOSBAQAorMjAxNy0wNy0yNiAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogY2FwdHVyZSBhbiBhc3luYyBzdGFjayB0cmFjZSB3
aGVuIHdlYiBjb250ZW50IGNhbGxzIGFkZEV2ZW50TGlzdGVuZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDczOQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMzM0NjgxOTc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWxsb3cgZGVidWdnZXIgYWdlbnRzIHRvIHBlcmZvcm0gY3VzdG9tIGxvZ2ljIHdo
ZW4gYXN5bmNocm9ub3VzIHN0YWNrCisgICAgICAgIHRyYWNlIGRhdGEgaXMgY2xlYXJlZC4gRm9y
IGV4YW1wbGUsIHRoZSBQYWdlRGVidWdnZXJBZ2VudCB3b3VsZCBjbGVhcgorICAgICAgICBpdHMg
bGlzdCBvZiByZWdpc3RlcmVkIGxpc3RlbmVycyBmb3Igd2hpY2ggY2FsbCBzdGFja3MgaGF2ZSBi
ZWVuIHJlY29yZGVkLgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6Y2xlYXJBc3luY1N0YWNrVHJhY2VEYXRhKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoKKwogMjAxNy0wNy0yNSAgTWF0dCBCYWtlciAgPG1h
dHRiYWtlckBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogUmVmYWN0b3Jpbmc6
IGV4dHJhY3QgYXN5bmMgc3RhY2sgdHJhY2UgbG9naWMgZnJvbSBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCBkOWQzOTJkN2I4ODgxNmIyMjM0NjA0YWQyN2RlZjU3NjQ5YjYw
NzhkLi5mNzNlYzY1Mzk5MGIyY2Q5NTE0YjlkZTVmNmZkOWY1OTM0N2ExMjFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzcgQEAKKzIwMTctMDctMjYgIE1hdHQgQmFrZXIgIDxtYXR0YmFrZXJAYXBw
bGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGNhcHR1cmUgYW4gYXN5bmMgc3RhY2sg
dHJhY2Ugd2hlbiB3ZWIgY29udGVudCBjYWxscyBhZGRFdmVudExpc3RlbmVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ3MzkKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzMzNDY4MTk3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRlc3Q6IGluc3BlY3Rvci9kZWJ1Z2dlci9hc3luYy1zdGFjay10cmFj
ZS5odG1sCisKKyAgICAgICAgQWRkIGluc3RydW1lbnRhdGlvbiB0byBFdmVudFRhcmdldCB0byBz
dXBwb3J0IHNob3dpbmcgYXN5bmNocm9ub3VzCisgICAgICAgIHN0YWNrIHRyYWNlcyB3aGVuIHRo
ZSBkZWJ1Z2dlciBicmVha3MgaW4gYSBzY3JpcHQgZXZlbnQgbGlzdGVuZXIuCisKKyAgICAgICAg
KiBkb20vRXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6OmFk
ZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6OnJlbW92ZUV2
ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6OmZpcmVFdmVudExp
c3RlbmVycyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEFkZEV2
ZW50TGlzdGVuZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d2lsbFJlbW92ZUV2ZW50TGlzdGVuZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEhhbmRsZUV2ZW50SW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEhhbmRsZUV2ZW50SW1wbCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRBZGRFdmVudExpc3RlbmVyKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZUV2
ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsSGFuZGxlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRIYW5kbGVFdmVudCk6CisgICAgICAgICogaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dl
ckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpkaWRDbGVh
ckFzeW5jU3RhY2tUcmFjZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZURlYnVnZ2VyQWdl
bnQ6OmRpZEFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZURlYnVnZ2Vy
QWdlbnQ6OndpbGxSZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VE
ZWJ1Z2dlckFnZW50Ojp3aWxsSGFuZGxlRXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9QYWdl
RGVidWdnZXJBZ2VudC5oOgorCiAyMDE3LTA3LTI1ICBNYXR0IEJha2VyICA8bWF0dGJha2VyQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBSZWZhY3RvcmluZzogZXh0cmFjdCBh
c3luYyBzdGFjayB0cmFjZSBsb2dpYyBmcm9tIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCA4MGViNGYzZTU2Njg3ZmM1N2FmMTc5
NWJjOTYyZGE4MTkzYzdiMzc0Li4yNGU5MDM5MzY4MDI1ZWQzMzZmZWJhZWZlNWVkMWQ0Y2QxZmU4
MmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAtMTE0NSw2ICsxMTQ1
LDggQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjbGVhckFzeW5jU3RhY2tUcmFjZURh
dGEoKQogewogICAgIG1fcGVuZGluZ0FzeW5jQ2FsbHMuY2xlYXIoKTsKICAgICBtX2N1cnJlbnRB
c3luY0NhbGxJZGVudGlmaWVyID0gc3RkOjpudWxsb3B0OworCisgICAgZGlkQ2xlYXJBc3luY1N0
YWNrVHJhY2VEYXRhKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDUxZWIzOGVkMjg4ZTU2NjE4YzAyMDUwOGM2ZjdkYmYw
ZTU2OGJmMTguLjBiMDczZjUwMTEzMjI4NTRlMGUwNWZiOTZlYzhjZmViNDQ5ZjlkMjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTkzLDYgKzkzLDcgQEAgcHVibGljOgogCiAg
ICAgZW51bSBjbGFzcyBBc3luY0NhbGxUeXBlIHsKICAgICAgICAgRE9NVGltZXIsCisgICAgICAg
IEV2ZW50TGlzdGVuZXIsCiAgICAgICAgIFJlcXVlc3RBbmltYXRpb25GcmFtZSwKICAgICB9Owog
CkBAIC0xMzUsNiArMTM2LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgU3RyaW5nIHNvdXJj
ZU1hcFVSTEZvclNjcmlwdChjb25zdCBTY3JpcHQmKTsKIAogICAgIHZvaWQgZGlkQ2xlYXJHbG9i
YWxPYmplY3QoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xlYXJBc3luY1N0YWNrVHJhY2VEYXRh
KCkgeyB9CiAKIHByaXZhdGU6CiAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBjdXJyZW50Q2FsbEZyYW1l
cyhjb25zdCBJbmplY3RlZFNjcmlwdCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKaW5k
ZXggMDRjYjNiZjQ0YTY4MzhkYjQwZTJhMTY3ZDJkOTI4YmFkZDY1N2I5NS4uMWJhNGM2MTBjZDdk
NjJmNWVlOTMxOGU2Y2QzMmI2OWFkYWNjMzI0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQu
Y3BwCkBAIC02OCw3ICs2OCwxNCBAQCBib29sIEV2ZW50VGFyZ2V0Ojppc01lc3NhZ2VQb3J0KCkg
Y29uc3QKIAogYm9vbCBFdmVudFRhcmdldDo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgUmVmPEV2ZW50TGlzdGVuZXI+JiYgbGlzdGVuZXIsIGNvbnN0IEFk
ZEV2ZW50TGlzdGVuZXJPcHRpb25zJiBvcHRpb25zKQogewotICAgIHJldHVybiBlbnN1cmVFdmVu
dFRhcmdldERhdGEoKS5ldmVudExpc3RlbmVyTWFwLmFkZChldmVudFR5cGUsIFdURk1vdmUobGlz
dGVuZXIpLCB7IG9wdGlvbnMuY2FwdHVyZSwgb3B0aW9ucy5wYXNzaXZlLCBvcHRpb25zLm9uY2Ug
fSk7CisgICAgYm9vbCBsaXN0ZW5lckNyZWF0ZWRGcm9tU2NyaXB0ID0gbGlzdGVuZXItPnR5cGUo
KSA9PSBFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVuZXJUeXBlICYmICFsaXN0ZW5lci0+d2Fz
Q3JlYXRlZEZyb21NYXJrdXAoKTsKKyAgICBpZiAoIWVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpLmV2
ZW50TGlzdGVuZXJNYXAuYWRkKGV2ZW50VHlwZSwgV1RGTW92ZShsaXN0ZW5lciksIHsgb3B0aW9u
cy5jYXB0dXJlLCBvcHRpb25zLnBhc3NpdmUsIG9wdGlvbnMub25jZSB9KSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKGxpc3RlbmVyQ3JlYXRlZEZyb21TY3JpcHQpCisgICAgICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQWRkRXZlbnRMaXN0ZW5lcigqdGhpcywgZXZl
bnRUeXBlKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEV2ZW50VGFyZ2V0OjphZGRF
dmVudExpc3RlbmVyRm9yQmluZGluZ3MoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFJl
ZlB0cjxFdmVudExpc3RlbmVyPiYmIGxpc3RlbmVyLCBBZGRFdmVudExpc3RlbmVyT3B0aW9uc09y
Qm9vbGVhbiYmIHZhcmlhbnQpCkBAIC0xMDIsNyArMTA5LDEyIEBAIHZvaWQgRXZlbnRUYXJnZXQ6
OnJlbW92ZUV2ZW50TGlzdGVuZXJGb3JCaW5kaW5ncyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwKIGJvb2wgRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBjb25zdCBMaXN0ZW5l
ck9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgYXV0byogZGF0YSA9IGV2ZW50VGFyZ2V0RGF0YSgp
OwotICAgIHJldHVybiBkYXRhICYmIGRhdGEtPmV2ZW50TGlzdGVuZXJNYXAucmVtb3ZlKGV2ZW50
VHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMuY2FwdHVyZSk7CisgICAgaWYgKCFkYXRhKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZW1v
dmVFdmVudExpc3RlbmVyKCp0aGlzLCBldmVudFR5cGUsIGxpc3RlbmVyLCBvcHRpb25zLmNhcHR1
cmUpOworCisgICAgcmV0dXJuIGRhdGEtPmV2ZW50TGlzdGVuZXJNYXAucmVtb3ZlKGV2ZW50VHlw
ZSwgbGlzdGVuZXIsIG9wdGlvbnMuY2FwdHVyZSk7CiB9CiAKIGJvb2wgRXZlbnRUYXJnZXQ6OnNl
dEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFJl
ZlB0cjxFdmVudExpc3RlbmVyPiYmIGxpc3RlbmVyLCBET01XcmFwcGVyV29ybGQmIGlzb2xhdGVk
V29ybGQpCkBAIC0yNjAsOCArMjcyLDkgQEAgdm9pZCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlz
dGVuZXJzKEV2ZW50JiBldmVudCwgRXZlbnRMaXN0ZW5lclZlY3RvciBsaXN0ZW5lcnMKICAgICAg
ICAgaWYgKHJlZ2lzdGVyZWRMaXN0ZW5lci0+aXNQYXNzaXZlKCkpCiAgICAgICAgICAgICBldmVu
dC5zZXRJblBhc3NpdmVMaXN0ZW5lcih0cnVlKTsKIAotICAgICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxIYW5kbGVFdmVudCgmY29udGV4dCwgZXZlbnQpOworICAgICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxIYW5kbGVFdmVudChjb250ZXh0LCBldmVudCwgKnJl
Z2lzdGVyZWRMaXN0ZW5lcik7CiAgICAgICAgIHJlZ2lzdGVyZWRMaXN0ZW5lci0+Y2FsbGJhY2so
KS5oYW5kbGVFdmVudChjb250ZXh0LCBldmVudCk7CisgICAgICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkSGFuZGxlRXZlbnQoY29udGV4dCk7CiAKICAgICAgICAgaWYgKHJlZ2lzdGVy
ZWRMaXN0ZW5lci0+aXNQYXNzaXZlKCkpCiAgICAgICAgICAgICBldmVudC5zZXRJblBhc3NpdmVM
aXN0ZW5lcihmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCmluZGV4IDAxMzc0YTdjYWJlZmJiZWEzMWU2NTUwYTZm
MWZiNjhkMjgyYmY3NDYuLjVhMjhiYzFlMjQzZjY3MDcyYzQwMmNjMDExZDdjODU0ZWYyNDgyMzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uY3BwCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIK
KyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29uc29s
ZUFnZW50LmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogI2luY2x1
ZGUgIldlYlNvY2tldEZyYW1lLmgiCkBAIC0zNTAsNiArMzUxLDE4IEBAIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRSZW1vdmVUaW1lckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYg
aW5zdHJ1bWVuCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZFJlbW92ZVRpbWVyKHRpbWVySWQs
IGZyYW1lRm9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KSk7CiB9CiAKK3ZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRBZGRFdmVudExpc3RlbmVySW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBFdmVudFRhcmdldCYgdGFyZ2V0LCBjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKK3sKKyAgICBpZiAoUGFnZURlYnVnZ2VyQWdlbnQq
IHBhZ2VEZWJ1Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5wYWdlRGVidWdnZXJBZ2Vu
dCgpKQorICAgICAgICBwYWdlRGVidWdnZXJBZ2VudC0+ZGlkQWRkRXZlbnRMaXN0ZW5lcih0YXJn
ZXQsIGV2ZW50VHlwZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
UmVtb3ZlRXZlbnRMaXN0ZW5lckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGlu
Z0FnZW50cywgRXZlbnRUYXJnZXQmIHRhcmdldCwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIGNhcHR1cmUpCit7CisgICAgaWYgKFBh
Z2VEZWJ1Z2dlckFnZW50KiBwYWdlRGVidWdnZXJBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMu
cGFnZURlYnVnZ2VyQWdlbnQoKSkKKyAgICAgICAgcGFnZURlYnVnZ2VyQWdlbnQtPndpbGxSZW1v
dmVFdmVudExpc3RlbmVyKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lciwgY2FwdHVyZSk7Cit9
CisKIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxDYWxsRnVuY3Rpb25JbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRp
bmdBZ2VudHMsIGNvbnN0IFN0cmluZyYgc2NyaXB0TmFtZSwgaW50IHNjcmlwdExpbmUsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgaW50IHRpbWVsaW5lQWdlbnRJZCA9
IDA7CkBAIC0zNzgsMTEgKzM5MSwyMCBAQCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVudEltcGwoSQogICAgIHJl
dHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoaW5zdHJ1bWVudGluZ0FnZW50cywg
dGltZWxpbmVBZ2VudElkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxIYW5kbGVFdmVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50
cywgY29uc3QgRXZlbnQmIGV2ZW50KQordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxIYW5kbGVFdmVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50
cywgY29uc3QgRXZlbnQmIGV2ZW50LCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgbGlz
dGVuZXIpCiB7CisgICAgaWYgKFBhZ2VEZWJ1Z2dlckFnZW50KiBwYWdlRGVidWdnZXJBZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMucGFnZURlYnVnZ2VyQWdlbnQoKSkKKyAgICAgICAgcGFnZURl
YnVnZ2VyQWdlbnQtPndpbGxIYW5kbGVFdmVudChsaXN0ZW5lcik7CisKICAgICBwYXVzZU9uTmF0
aXZlRXZlbnRJZk5lZWRlZChpbnN0cnVtZW50aW5nQWdlbnRzLCB0cnVlLCBldmVudC50eXBlKCks
IGZhbHNlKTsKIH0KIAordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEhhbmRsZUV2
ZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzKQoreworICAg
IGlmIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy5pbnNwZWN0b3JEZWJ1Z2dlckFnZW50KCkpCisgICAgICAgIGRlYnVnZ2VyQWdlbnQt
PmRpZERpc3BhdGNoQXN5bmNDYWxsKCk7Cit9CisKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWREaXNwYXRjaEV2ZW50SW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWUmIGNvb2tpZSkKIHsKICAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxp
bmVBZ2VudCA9IHJldHJpZXZlVGltZWxpbmVBZ2VudChjb29raWUpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCmluZGV4IGQ1NGIy
ZWFjMWJiNmQ3ZGYyNjE2YzQ4ODc5OWZhOGU4MDBmZGY0YTcuLjFkZDJiNWNiYjUyYTMwZDcxZjEy
NDAwNjU4MzZiYTM5NGYzNjViNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRl
ICJDU1NTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oIgog
I2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUg
IkZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxl
bWVudC5oIgpAQCAtNDEsNyArNDIsNiBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IlN0b3JhZ2VBcmVhLmgiCiAjaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKICNpbmNsdWRl
ICJXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyLmgiCkBAIC02MywxNyArNjMsMjAgQEAgY2xhc3Mg
RE9NV3JhcHBlcldvcmxkOwogY2xhc3MgRGF0YWJhc2U7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNz
IERvY3VtZW50TG9hZGVyOworY2xhc3MgRXZlbnRMaXN0ZW5lcjsKIGNsYXNzIEhUVFBIZWFkZXJN
YXA7CiBjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50OwogY2xhc3MgSW5zdHJ1bWVudGluZ0Fn
ZW50czsKIGNsYXNzIE5ldHdvcmtMb2FkTWV0cmljczsKIGNsYXNzIE5vZGU7CiBjbGFzcyBQc2V1
ZG9FbGVtZW50OworY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI7CiBjbGFzcyBSZW5kZXJM
YXllcjsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlc291cmNlTG9hZGVyOwogY2xhc3Mg
UmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKK2NsYXNzIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIGNsYXNzIFNoYWRvd1Jvb3Q7
CiBjbGFzcyBVUkw7CkBAIC0xMjcsOSArMTMwLDEyIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbENhbGxGdW5jdGlvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSk7
CiAgICAgc3RhdGljIHZvaWQgZGlkQ2FsbEZ1bmN0aW9uKGNvbnN0IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBzdGF0aWMgdm9p
ZCBkaWRBZGRFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUpOworICAgIHN0YXRpYyB2b2lkIHdpbGxSZW1vdmVFdmVudExpc3RlbmVyKEV2ZW50
VGFyZ2V0JiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImLCBi
b29sIGNhcHR1cmUpOwogICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUg
d2lsbERpc3BhdGNoRXZlbnQoRG9jdW1lbnQmLCBjb25zdCBFdmVudCYsIGJvb2wgaGFzRXZlbnRM
aXN0ZW5lcnMpOwogICAgIHN0YXRpYyB2b2lkIGRpZERpc3BhdGNoRXZlbnQoY29uc3QgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7Ci0gICAgc3RhdGljIHZvaWQgd2lsbEhhbmRsZUV2
ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBFdmVudCYpOworICAgIHN0YXRpYyB2
b2lkIHdpbGxIYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRXZlbnQm
LCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYpOworICAgIHN0YXRpYyB2b2lkIGRpZEhh
bmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKICAgICBzdGF0aWMgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxEaXNwYXRjaEV2ZW50T25XaW5kb3coRnJhbWUqLCBj
b25zdCBFdmVudCYsIERPTVdpbmRvdyYpOwogICAgIHN0YXRpYyB2b2lkIGRpZERpc3BhdGNoRXZl
bnRPbldpbmRvdyhjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKICAgICBz
dGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxFdmFsdWF0ZVNjcmlwdChG
cmFtZSYsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbGluZU51bWJlcik7CkBAIC0yODUsOCArMjkx
LDExIEBAIHByaXZhdGU6CiAKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llIHdpbGxDYWxsRnVuY3Rpb25JbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBjb25zdCBTdHJp
bmcmIHNjcmlwdE5hbWUsIGludCBzY3JpcHRMaW5lLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7
CiAgICAgc3RhdGljIHZvaWQgZGlkQ2FsbEZ1bmN0aW9uSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgc3RhdGlj
IHZvaWQgZGlkQWRkRXZlbnRMaXN0ZW5lckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEV2ZW50
VGFyZ2V0JiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpOworICAgIHN0YXRpYyB2b2lk
IHdpbGxSZW1vdmVFdmVudExpc3RlbmVySW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgRXZlbnRU
YXJnZXQmLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYsIGJv
b2wgY2FwdHVyZSk7CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3
aWxsRGlzcGF0Y2hFdmVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIERvY3VtZW50JiwgY29u
c3QgRXZlbnQmLCBib29sIGhhc0V2ZW50TGlzdGVuZXJzKTsKLSAgICBzdGF0aWMgdm9pZCB3aWxs
SGFuZGxlRXZlbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBjb25zdCBFdmVudCYpOworICAg
IHN0YXRpYyB2b2lkIHdpbGxIYW5kbGVFdmVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIGNv
bnN0IEV2ZW50JiwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImKTsKKyAgICBzdGF0aWMg
dm9pZCBkaWRIYW5kbGVFdmVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYpOwogICAgIHN0YXRp
YyB2b2lkIGRpZERpc3BhdGNoRXZlbnRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvb2tpZSYpOwogICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2ls
bERpc3BhdGNoRXZlbnRPbldpbmRvd0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIGNvbnN0IEV2
ZW50JiwgRE9NV2luZG93Jik7CiAgICAgc3RhdGljIHZvaWQgZGlkRGlzcGF0Y2hFdmVudE9uV2lu
ZG93SW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKQEAgLTYyOSw2
ICs2MzgsMjAgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZW1v
dmVUaW1lcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb24KICAgICAgICAgZGlkUmVtb3ZlVGlt
ZXJJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCB0aW1lcklkLCBjb250ZXh0KTsKIH0KIAoraW5s
aW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRBZGRFdmVudExpc3RlbmVyKEV2
ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQoreworICAg
IEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOworICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNv
bnRleHQodGFyZ2V0LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCisgICAgICAgIGRpZEFkZEV2
ZW50TGlzdGVuZXJJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCB0YXJnZXQsIGV2ZW50VHlwZSk7
Cit9CisKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZUV2
ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXQmIHRhcmdldCwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIGNhcHR1cmUpCit7CisgICAgRkFT
VF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdB
Z2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4
dCh0YXJnZXQuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKKyAgICAgICAgd2lsbFJlbW92ZUV2
ZW50TGlzdGVuZXJJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCB0YXJnZXQsIGV2ZW50VHlwZSwg
bGlzdGVuZXIsIGNhcHR1cmUpOworfQorCiBpbmxpbmUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbENhbGxGdW5jdGlvbihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUsIGludCBz
Y3JpcHRMaW5lKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyhJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUoKSk7CkBAIC02NTksMTEgKzY4MiwxOCBAQCBpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRXZlbnQoY29uc3QgSW5zcGVj
dG9ySW5zdHJ1bWVudAogICAgICAgICBkaWREaXNwYXRjaEV2ZW50SW1wbChjb29raWUpOwogfQog
Ci1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxIYW5kbGVFdmVudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBFdmVudCYgZXZlbnQpCitpbmxp
bmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxIYW5kbGVFdmVudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBFdmVudCYgZXZlbnQsIGNvbnN0IFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyJiBsaXN0ZW5lcikKK3sKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19G
Uk9OVEVORFModm9pZCgpKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQpKQorICAg
ICAgICByZXR1cm4gd2lsbEhhbmRsZUV2ZW50SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZXZl
bnQsIGxpc3RlbmVyKTsKK30KKworaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRIYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQogewogICAg
IEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwogICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNv
bnRleHQoY29udGV4dCkpCi0gICAgICAgIHJldHVybiB3aWxsSGFuZGxlRXZlbnRJbXBsKCppbnN0
cnVtZW50aW5nQWdlbnRzLCBldmVudCk7CisgICAgICAgIHJldHVybiBkaWRIYW5kbGVFdmVudElt
cGwoKmluc3RydW1lbnRpbmdBZ2VudHMpOwogfQogCiBpbmxpbmUgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnRP
bldpbmRvdyhGcmFtZSogZnJhbWUsIGNvbnN0IEV2ZW50JiBldmVudCwgRE9NV2luZG93JiB3aW5k
b3cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcApp
bmRleCAzNmYwNmY1OTgyMGJkZThlNmQwNWI0MWM0MTBlMGJhNDBhN2Y0YjEzLi45N2QyZTMwNWFi
MGQ4ZjBmMTVmN2MyN2U4NGFiMzk3NjJkNmU4Yzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5jcHAKQEAgLTM0LDYgKzM0LDggQEAKIAogI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJF
dmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JPdmVybGF5LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUGFnZUFnZW50LmgiCiAjaW5jbHVk
ZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgpAQCAtNDEsNiArNDMsNyBAQAogI2luY2x1ZGUgIlBh
Z2UuaCIKICNpbmNsdWRlICJQYWdlQ29uc29sZUNsaWVudC5oIgogI2luY2x1ZGUgIlBhZ2VTY3Jp
cHREZWJ1Z1NlcnZlci5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNp
bmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbmplY3RlZFNjcmlw
dC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuaD4KQEAgLTkz
LDYgKzk2LDEyIEBAIFN0cmluZyBQYWdlRGVidWdnZXJBZ2VudDo6c291cmNlTWFwVVJMRm9yU2Ny
aXB0KGNvbnN0IFNjcmlwdCYgc2NyaXB0KQogICAgIHJldHVybiBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50Ojpzb3VyY2VNYXBVUkxGb3JTY3JpcHQoc2NyaXB0KTsKIH0KIAordm9pZCBQYWdlRGVidWdn
ZXJBZ2VudDo6ZGlkQ2xlYXJBc3luY1N0YWNrVHJhY2VEYXRhKCkKK3sKKyAgICBtX3JlZ2lzdGVy
ZWRFdmVudExpc3RlbmVycy5jbGVhcigpOworICAgIG1fbmV4dEV2ZW50TGlzdGVuZXJJZGVudGlm
aWVyID0gMTsKK30KKwogdm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6bXV0ZUNvbnNvbGUoKQogewog
ICAgIFBhZ2VDb25zb2xlQ2xpZW50OjptdXRlKCk7CkBAIC0xNTEsNiArMTYwLDUxIEBAIHZvaWQg
UGFnZURlYnVnZ2VyQWdlbnQ6Om1haW5GcmFtZU5hdmlnYXRlZCgpCiAgICAgc2V0U3VwcHJlc3NB
bGxQYXVzZXMoZmFsc2UpOwogfQogCit2b2lkIFBhZ2VEZWJ1Z2dlckFnZW50OjpkaWRBZGRFdmVu
dExpc3RlbmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlKQoreworICAgIGlmICghYnJlYWtwb2ludHNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byYgZXZlbnRMaXN0ZW5lcnMgPSB0YXJnZXQuZXZlbnRMaXN0ZW5lcnMoZXZlbnRU
eXBlKTsKKyAgICBhdXRvJiBsaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXJzLmxhc3QoKTsKKyAgICBp
ZiAobV9yZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcnMuY29udGFpbnMobGlzdGVuZXIuZ2V0KCkpKSB7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlID0gdGFyZ2V0LnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+ZXhlY1N0YXRlKCk7CisgICAgaWYgKCFzY3JpcHRTdGF0ZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaW50IGlkZW50aWZpZXIgPSBtX25leHRFdmVudExpc3RlbmVySWRlbnRp
ZmllcisrOworICAgIG1fcmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJzLnNldChsaXN0ZW5lci5nZXQo
KSwgaWRlbnRpZmllcik7CisKKyAgICBkaWRTY2hlZHVsZUFzeW5jQ2FsbChzY3JpcHRTdGF0ZSwg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6QXN5bmNDYWxsVHlwZTo6RXZlbnRMaXN0ZW5lciwgaWRl
bnRpZmllciwgbGlzdGVuZXItPmlzT25jZSgpKTsKK30KKwordm9pZCBQYWdlRGVidWdnZXJBZ2Vu
dDo6d2lsbFJlbW92ZUV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXQmIHRhcmdldCwgY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIGNhcHR1
cmUpCit7CisgICAgYXV0byYgZXZlbnRMaXN0ZW5lcnMgPSB0YXJnZXQuZXZlbnRMaXN0ZW5lcnMo
ZXZlbnRUeXBlKTsKKyAgICBzaXplX3QgbGlzdGVuZXJJbmRleCA9IGV2ZW50TGlzdGVuZXJzLmZp
bmRNYXRjaGluZyhbJl0oYXV0byYgcmVnaXN0ZXJlZExpc3RlbmVyKSB7CisgICAgICAgIHJldHVy
biAmcmVnaXN0ZXJlZExpc3RlbmVyLT5jYWxsYmFjaygpID09ICZsaXN0ZW5lciAmJiByZWdpc3Rl
cmVkTGlzdGVuZXItPnVzZUNhcHR1cmUoKSA9PSBjYXB0dXJlOworICAgIH0pOworCisgICAgaWYg
KGxpc3RlbmVySW5kZXggPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBp
ZGVudGlmaWVyID0gbV9yZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcnMudGFrZShldmVudExpc3RlbmVy
c1tsaXN0ZW5lckluZGV4XS5nZXQoKSk7CisgICAgZGlkQ2FuY2VsQXN5bmNDYWxsKEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OkFzeW5jQ2FsbFR5cGU6OkV2ZW50TGlzdGVuZXIsIGlkZW50aWZpZXIp
OworfQorCit2b2lkIFBhZ2VEZWJ1Z2dlckFnZW50Ojp3aWxsSGFuZGxlRXZlbnQoY29uc3QgUmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyKQoreworICAgIGF1dG8gZXZlbnRMaXN0ZW5l
ckl0ZXJhdG9yID0gbV9yZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcnMuZmluZCgmbGlzdGVuZXIpOwor
ICAgIGlmIChldmVudExpc3RlbmVySXRlcmF0b3IgPT0gbV9yZWdpc3RlcmVkRXZlbnRMaXN0ZW5l
cnMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHdpbGxEaXNwYXRjaEFzeW5jQ2FsbChJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpBc3luY0NhbGxUeXBlOjpFdmVudExpc3RlbmVyLCBldmVu
dExpc3RlbmVySXRlcmF0b3ItPnZhbHVlKTsKK30KKwogdm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6
ZGlkUmVxdWVzdEFuaW1hdGlvbkZyYW1lKGludCBjYWxsYmFja0lkLCBEb2N1bWVudCYgZG9jdW1l
bnQpCiB7CiAgICAgaWYgKCFicmVha3BvaW50c0FjdGl2ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaAppbmRleCAxZDdlYzY4M2QxMTA4NjQyNWJmMDEw
NGQwODYzNGFiMzRiYWU4OTNjLi4xNjZmMWRkMDY3OGQ4OTIxYzlmNjI2NDVkN2ViMWRjYzhlZTA1
NDdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuaApA
QCAtMzYsOSArMzYsMTIgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7
CitjbGFzcyBFdmVudExpc3RlbmVyOworY2xhc3MgRXZlbnRUYXJnZXQ7CiBjbGFzcyBJbnNwZWN0
b3JPdmVybGF5OwogY2xhc3MgSW5zcGVjdG9yUGFnZUFnZW50OwogY2xhc3MgUGFnZTsKK2NsYXNz
IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOwogCiBjbGFzcyBQYWdlRGVidWdnZXJBZ2VudCBmaW5h
bCA6IHB1YmxpYyBXZWJEZWJ1Z2dlckFnZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQ
YWdlRGVidWdnZXJBZ2VudCk7CkBAIC01NywxMiArNjAsMTggQEAgcHVibGljOgogICAgIHZvaWQg
d2lsbEZpcmVBbmltYXRpb25GcmFtZShpbnQgY2FsbGJhY2tJZCk7CiAgICAgdm9pZCBkaWRDYW5j
ZWxBbmltYXRpb25GcmFtZShpbnQgY2FsbGJhY2tJZCk7CiAKKyAgICB2b2lkIGRpZEFkZEV2ZW50
TGlzdGVuZXIoRXZlbnRUYXJnZXQmLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7Cisg
ICAgdm9pZCB3aWxsUmVtb3ZlRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYsIGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyJiwgYm9vbCBjYXB0dXJlKTsKKyAgICB2
b2lkIHdpbGxIYW5kbGVFdmVudChjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYpOworCiBw
cm90ZWN0ZWQ6CiAgICAgdm9pZCBlbmFibGUoKSBvdmVycmlkZTsKICAgICB2b2lkIGRpc2FibGUo
Ym9vbCBpc0JlaW5nRGVzdHJveWVkKSBvdmVycmlkZTsKIAogICAgIFN0cmluZyBzb3VyY2VNYXBV
UkxGb3JTY3JpcHQoY29uc3QgU2NyaXB0Jikgb3ZlcnJpZGU7CiAKKyAgICB2b2lkIGRpZENsZWFy
QXN5bmNTdGFja1RyYWNlRGF0YSgpIG92ZXJyaWRlOworCiBwcml2YXRlOgogICAgIHZvaWQgbXV0
ZUNvbnNvbGUoKSBvdmVycmlkZTsKICAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKSBvdmVycmlkZTsK
QEAgLTc2LDYgKzg1LDkgQEAgcHJpdmF0ZToKIAogICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9w
YWdlQWdlbnQ7CiAgICAgSW5zcGVjdG9yT3ZlcmxheSogbV9vdmVybGF5IHsgbnVsbHB0ciB9Owor
CisgICAgSGFzaE1hcDxjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciosIGludD4gbV9yZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lcnM7CisgICAgaW50IG1fbmV4dEV2ZW50TGlzdGVuZXJJZGVudGlm
aWVyIHsgMSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGU0ZGMzYTA3
ODdjZjdhODg4ZjE5MGJiZjBkMjZkMTUxN2I1ZTVlYmQuLjRhOGY2OTM1NmNkNWE4MjZkZmFjNDY5
OGQ3MDJiYjJhODQxMDcwZmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0wNy0yNiAgTWF0
dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
Y2FwdHVyZSBhbiBhc3luYyBzdGFjayB0cmFjZSB3aGVuIHdlYiBjb250ZW50IGNhbGxzIGFkZEV2
ZW50TGlzdGVuZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NDczOQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzM0NjgxOTc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRlc3QgY2FzZSBjaGVj
a2luZyB0aGF0IGFzeW5jIHN0YWNrIHRyYWNlcyBhcmUgcmVjb3JkZWQgZm9yIGFkZEV2ZW50TGlz
dGVuZXIuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIvYXN5bmMtc3RhY2stdHJhY2Ut
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9hc3luYy1zdGFjay10
cmFjZS5odG1sOgorCiAyMDE3LTA3LTI1ICBNYXR0IExld2lzICA8amxld2lzM0BhcHBsZS5jb20+
CiAKICAgICAgICAgTWFya2VkIG11bHRpcGxlIGZhc3QvIHRlc3RzIGFzIGNyYXNoaW5nIG9uIEhp
Z2ggU2llcnJhIFdLMS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dl
ci9hc3luYy1zdGFjay10cmFjZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
ZGVidWdnZXIvYXN5bmMtc3RhY2stdHJhY2UtZXhwZWN0ZWQudHh0CmluZGV4IGZlM2NhNTY1MTA1
YjE4MDUxZWVmZWNkNzA0NGFhZjBjMTNjZTNmMGMuLjZkNDJkZWRlZGRjMWFiN2NjY2QzZjQxODJi
MTQzOTk2YTZiMjNlMzcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dl
ci9hc3luYy1zdGFjay10cmFjZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2RlYnVnZ2VyL2FzeW5jLXN0YWNrLXRyYWNlLWV4cGVjdGVkLnR4dApAQCAtNjQsNiArNjQs
MTggQEAgQVNZTkMgQ0FMTCBTVEFDSzoKIDM6IC0tLSBzZXRJbnRlcnZhbCAtLS0KIDQ6IFtGXSB0
ZXN0UmVmZXJlbmNlQ291bnRpbmcKIDU6IFtQXSBHbG9iYWwgQ29kZQorCistLSBSdW5uaW5nIHRl
c3QgY2FzZTogQ2hlY2tBc3luY1N0YWNrVHJhY2UuQWRkRXZlbnRMaXN0ZW5lcgorUEFVU0UgIzEK
K0NBTEwgU1RBQ0s6CiswOiBbRl0gcGF1c2VUaGVuRmluaXNoVGVzdAorMTogW0ZdIGNsaWNrRmly
ZWQKKzI6IFtGXSB0ZXN0QWRkRXZlbnRMaXN0ZW5lcgorMzogW1BdIEdsb2JhbCBDb2RlCitBU1lO
QyBDQUxMIFNUQUNLOgorNDogLS0tIGFkZEV2ZW50TGlzdGVuZXIgLS0tCis1OiBbRl0gdGVzdEFk
ZEV2ZW50TGlzdGVuZXIKKzY6IFtQXSBHbG9iYWwgQ29kZQogLS0gUnVubmluZyB0ZXN0IHNldHVw
LgogU2F2ZSBEZWJ1Z2dlck1hbmFnZXIuYXN5bmNTdGFja1RyYWNlRGVwdGgKIApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2FzeW5jLXN0YWNrLXRyYWNlLmh0bWwg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYXN5bmMtc3RhY2stdHJhY2UuaHRtbApp
bmRleCBkMTE2MWIxN2ExYzk2MDE4MjllOGY4MDU1OWVkZWI4OWI5YWI4M2NmLi5iMGEwNDYwNjZh
MmJhZjk5NTIwYTJhNGE5YzQxOTAwZmI3MWVkMDY1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvZGVidWdnZXIvYXN5bmMtc3RhY2stdHJhY2UuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvZGVidWdnZXIvYXN5bmMtc3RhY2stdHJhY2UuaHRtbApAQCAtNDEsNiArNDEs
MTUgQEAgZnVuY3Rpb24gdGVzdFJlZmVyZW5jZUNvdW50aW5nKCkgewogICAgIH0sIHRpbWVyRGVs
YXkpOwogfQogCitmdW5jdGlvbiB0ZXN0QWRkRXZlbnRMaXN0ZW5lcigpIHsKKyAgICBkb2N1bWVu
dC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24gY2xpY2tGaXJlZCgpIHsK
KyAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsIGNsaWNr
RmlyZWQpOworICAgICAgICBwYXVzZVRoZW5GaW5pc2hUZXN0KCk7CisgICAgfSk7CisKKyAgICBk
b2N1bWVudC5ib2R5LmNsaWNrKCk7Cit9CisKIGZ1bmN0aW9uIHJlY3Vyc2l2ZUNhbGxUaGVuVGVz
dCh0ZXN0RnVuY3Rpb24sIGRlcHRoKSB7CiAgICAgaWYgKGRlcHRoKSB7CiAgICAgICAgIHJlY3Vy
c2l2ZUNhbGxUaGVuVGVzdCh0ZXN0RnVuY3Rpb24sIGRlcHRoIC0gMSk7CkBAIC05Myw2ICsxMDIs
NyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICBhZGRTaW1wbGVUZXN0Q2FzZSgiU2V0SW50ZXJ2YWwi
LCAidGVzdFNldEludGVydmFsKDMpIik7CiAgICAgYWRkU2ltcGxlVGVzdENhc2UoIkNoYWluZWRS
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAidGVzdENoYWluZWRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUo
KSIpOwogICAgIGFkZFNpbXBsZVRlc3RDYXNlKCJSZWZlcmVuY2VDb3VudGluZyIsICJ0ZXN0UmVm
ZXJlbmNlQ291bnRpbmcoKSIpOworICAgIGFkZFNpbXBsZVRlc3RDYXNlKCJBZGRFdmVudExpc3Rl
bmVyIiwgInRlc3RBZGRFdmVudExpc3RlbmVyKCkiKTsKIAogICAgIGZ1bmN0aW9uIHNldHVwKHJl
c29sdmUpIHsKICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlNhdmUgRGVidWdnZXJNYW5hZ2Vy
LmFzeW5jU3RhY2tUcmFjZURlcHRoIik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316685</attachid>
            <date>2017-07-28 16:38:29 -0700</date>
            <delta_ts>2017-07-28 17:33:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174739-20170728163828.patch</filename>
            <type>text/plain</type>
            <size>23638</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIwMDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
MGUxMzc2OGI5MjBlYTlkM2U5OTFjMDhhNjAyMWJkMmQ1Y2ZkY2NiLi4wZTE0MWRhYjUyZjUyZWE3
YTg4ODMyZWE0NzUwMmFmNDc0ZDUwYzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOSBAQAorMjAxNy0wNy0yOCAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogY2FwdHVyZSBhbiBhc3luYyBzdGFjayB0cmFjZSB3
aGVuIHdlYiBjb250ZW50IGNhbGxzIGFkZEV2ZW50TGlzdGVuZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDczOQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMzM0NjgxOTc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWxsb3cgZGVidWdnZXIgYWdlbnRzIHRvIHBlcmZvcm0gY3VzdG9tIGxvZ2ljIHdo
ZW4gYXN5bmNocm9ub3VzIHN0YWNrCisgICAgICAgIHRyYWNlIGRhdGEgaXMgY2xlYXJlZC4gRm9y
IGV4YW1wbGUsIHRoZSBQYWdlRGVidWdnZXJBZ2VudCB3b3VsZCBjbGVhcgorICAgICAgICBpdHMg
bGlzdCBvZiByZWdpc3RlcmVkIGxpc3RlbmVycyBmb3Igd2hpY2ggY2FsbCBzdGFja3MgaGF2ZSBi
ZWVuIHJlY29yZGVkLgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6Y2xlYXJBc3luY1N0YWNrVHJhY2VEYXRhKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoKKwogMjAxNy0wNy0yOCAgWXVzdWtlIFN1enVraSAg
PHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBBU1NFUlRJT04gRkFJTEVEOiBjYW5k
aWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QgfHwgY2FuZGlkYXRlLT5vcCgpID09IFBo
YW50b21EaXJlY3RBcmd1bWVudHMgfHwgY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DbG9uZWRB
cmd1bWVudHMgfHwgY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21TcHJlYWQgfHwgY2FuZGlkYXRl
LT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjNWM4Njlj
ZDRlY2Q2MzQyNmRiMTdmMjU0NWRjMzI4NjA5MmYwZmJhLi44YTBmZjFhZmQ5OTEyZjY4MTVmMTU2
ZTI0OGRkOGZmNzk0MjZkZmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTctMDct
MjggIE1hdHQgQmFrZXIgIDxtYXR0YmFrZXJAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IGNhcHR1cmUgYW4gYXN5bmMgc3RhY2sgdHJhY2Ugd2hlbiB3ZWIgY29udGVudCBjYWxs
cyBhZGRFdmVudExpc3RlbmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzQ3MzkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzNDY4MTk3PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IGluc3Bl
Y3Rvci9kZWJ1Z2dlci9hc3luYy1zdGFjay10cmFjZS5odG1sCisKKyAgICAgICAgQWRkIGluc3Ry
dW1lbnRhdGlvbiB0byBFdmVudFRhcmdldCB0byBzdXBwb3J0IHNob3dpbmcgYXN5bmNocm9ub3Vz
CisgICAgICAgIHN0YWNrIHRyYWNlcyB3aGVuIHRoZSBkZWJ1Z2dlciBicmVha3MgaW4gYSBzY3Jp
cHQgZXZlbnQgbGlzdGVuZXIuCisKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRUYXJnZXQ6OmZpcmVFdmVudExpc3RlbmVycyk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEFkZEV2ZW50TGlzdGVuZXJJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZUV2ZW50TGlzdGVu
ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bEhhbmRsZUV2ZW50SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZEhhbmRsZUV2ZW50SW1wbCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRBZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsSGFuZGxlRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRIYW5kbGVFdmVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2VEZWJ1Z2dlckFnZW50OjpkaWRDbGVhckFzeW5jU3RhY2tUcmFjZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZURlYnVnZ2VyQWdlbnQ6OmRpZEFkZEV2ZW50TGlzdGVuZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZURlYnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVFdmVudExpc3Rl
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VEZWJ1Z2dlckFnZW50Ojp3aWxsSGFuZGxlRXZl
bnQpOgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oOgorCiAyMDE3LTA3
LTI4ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAg
W21hY09TXSBSZWVkZXIncyBkZWZhdWx0cyBmb250IGlzIFRpbWVzIGluc3RlYWQgb2YgU2FuIEZy
YW5jaXNjbwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCA4MGViNGYzZTU2
Njg3ZmM1N2FmMTc5NWJjOTYyZGE4MTkzYzdiMzc0Li4yNGU5MDM5MzY4MDI1ZWQzMzZmZWJhZWZl
NWVkMWQ0Y2QxZmU4MmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAt
MTE0NSw2ICsxMTQ1LDggQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjbGVhckFzeW5j
U3RhY2tUcmFjZURhdGEoKQogewogICAgIG1fcGVuZGluZ0FzeW5jQ2FsbHMuY2xlYXIoKTsKICAg
ICBtX2N1cnJlbnRBc3luY0NhbGxJZGVudGlmaWVyID0gc3RkOjpudWxsb3B0OworCisgICAgZGlk
Q2xlYXJBc3luY1N0YWNrVHJhY2VEYXRhKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDUxZWIzOGVkMjg4ZTU2NjE4YzAy
MDUwOGM2ZjdkYmYwZTU2OGJmMTguLjBiMDczZjUwMTEzMjI4NTRlMGUwNWZiOTZlYzhjZmViNDQ5
ZjlkMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTkzLDYgKzkzLDcgQEAg
cHVibGljOgogCiAgICAgZW51bSBjbGFzcyBBc3luY0NhbGxUeXBlIHsKICAgICAgICAgRE9NVGlt
ZXIsCisgICAgICAgIEV2ZW50TGlzdGVuZXIsCiAgICAgICAgIFJlcXVlc3RBbmltYXRpb25GcmFt
ZSwKICAgICB9OwogCkBAIC0xMzUsNiArMTM2LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
U3RyaW5nIHNvdXJjZU1hcFVSTEZvclNjcmlwdChjb25zdCBTY3JpcHQmKTsKIAogICAgIHZvaWQg
ZGlkQ2xlYXJHbG9iYWxPYmplY3QoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xlYXJBc3luY1N0
YWNrVHJhY2VEYXRhKCkgeyB9CiAKIHByaXZhdGU6CiAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBjdXJy
ZW50Q2FsbEZyYW1lcyhjb25zdCBJbmplY3RlZFNjcmlwdCYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRh
cmdldC5jcHAKaW5kZXggMDRjYjNiZjQ0YTY4MzhkYjQwZTJhMTY3ZDJkOTI4YmFkZDY1N2I5NS4u
NmE1MjM3NDVkMWYxMmI2ZDY5NDNjNjNhMGFiMzU1ZGM4YWMzNTMwYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnRUYXJnZXQuY3BwCkBAIC02OCw3ICs2OCwxNSBAQCBib29sIEV2ZW50VGFyZ2V0Ojppc01l
c3NhZ2VQb3J0KCkgY29uc3QKIAogYm9vbCBFdmVudFRhcmdldDo6YWRkRXZlbnRMaXN0ZW5lcihj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmPEV2ZW50TGlzdGVuZXI+JiYgbGlzdGVu
ZXIsIGNvbnN0IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zJiBvcHRpb25zKQogewotICAgIHJldHVy
biBlbnN1cmVFdmVudFRhcmdldERhdGEoKS5ldmVudExpc3RlbmVyTWFwLmFkZChldmVudFR5cGUs
IFdURk1vdmUobGlzdGVuZXIpLCB7IG9wdGlvbnMuY2FwdHVyZSwgb3B0aW9ucy5wYXNzaXZlLCBv
cHRpb25zLm9uY2UgfSk7CisgICAgYm9vbCBsaXN0ZW5lckNyZWF0ZWRGcm9tU2NyaXB0ID0gbGlz
dGVuZXItPnR5cGUoKSA9PSBFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVuZXJUeXBlICYmICFs
aXN0ZW5lci0+d2FzQ3JlYXRlZEZyb21NYXJrdXAoKTsKKworICAgIGlmICghZW5zdXJlRXZlbnRU
YXJnZXREYXRhKCkuZXZlbnRMaXN0ZW5lck1hcC5hZGQoZXZlbnRUeXBlLCBXVEZNb3ZlKGxpc3Rl
bmVyKSwgeyBvcHRpb25zLmNhcHR1cmUsIG9wdGlvbnMucGFzc2l2ZSwgb3B0aW9ucy5vbmNlIH0p
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobGlzdGVuZXJDcmVhdGVkRnJvbVNj
cmlwdCkKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRBZGRFdmVudExpc3Rl
bmVyKCp0aGlzLCBldmVudFR5cGUpOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRXZl
bnRUYXJnZXQ6OmFkZEV2ZW50TGlzdGVuZXJGb3JCaW5kaW5ncyhjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSwgUmVmUHRyPEV2ZW50TGlzdGVuZXI+JiYgbGlzdGVuZXIsIEFkZEV2ZW50TGlz
dGVuZXJPcHRpb25zT3JCb29sZWFuJiYgdmFyaWFudCkKQEAgLTEwMiw3ICsxMTAsMTIgQEAgdm9p
ZCBFdmVudFRhcmdldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lckZvckJpbmRpbmdzKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLAogYm9vbCBFdmVudFRhcmdldDo6cmVtb3ZlRXZlbnRMaXN0ZW5l
cihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIs
IGNvbnN0IExpc3RlbmVyT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBhdXRvKiBkYXRhID0gZXZl
bnRUYXJnZXREYXRhKCk7Ci0gICAgcmV0dXJuIGRhdGEgJiYgZGF0YS0+ZXZlbnRMaXN0ZW5lck1h
cC5yZW1vdmUoZXZlbnRUeXBlLCBsaXN0ZW5lciwgb3B0aW9ucy5jYXB0dXJlKTsKKyAgICBpZiAo
IWRhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d2lsbFJlbW92ZUV2ZW50TGlzdGVuZXIoKnRoaXMsIGV2ZW50VHlwZSwgbGlzdGVuZXIs
IG9wdGlvbnMuY2FwdHVyZSk7CisKKyAgICByZXR1cm4gZGF0YS0+ZXZlbnRMaXN0ZW5lck1hcC5y
ZW1vdmUoZXZlbnRUeXBlLCBsaXN0ZW5lciwgb3B0aW9ucy5jYXB0dXJlKTsKIH0KIAogYm9vbCBF
dmVudFRhcmdldDo6c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSwgUmVmUHRyPEV2ZW50TGlzdGVuZXI+JiYgbGlzdGVuZXIsIERPTVdyYXBwZXJX
b3JsZCYgaXNvbGF0ZWRXb3JsZCkKQEAgLTI2MCw4ICsyNzMsOSBAQCB2b2lkIEV2ZW50VGFyZ2V0
OjpmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQmIGV2ZW50LCBFdmVudExpc3RlbmVyVmVjdG9yIGxp
c3RlbmVycwogICAgICAgICBpZiAocmVnaXN0ZXJlZExpc3RlbmVyLT5pc1Bhc3NpdmUoKSkKICAg
ICAgICAgICAgIGV2ZW50LnNldEluUGFzc2l2ZUxpc3RlbmVyKHRydWUpOwogCi0gICAgICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEhhbmRsZUV2ZW50KCZjb250ZXh0LCBldmVudCk7
CisgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEhhbmRsZUV2ZW50KGNvbnRl
eHQsIGV2ZW50LCAqcmVnaXN0ZXJlZExpc3RlbmVyKTsKICAgICAgICAgcmVnaXN0ZXJlZExpc3Rl
bmVyLT5jYWxsYmFjaygpLmhhbmRsZUV2ZW50KGNvbnRleHQsIGV2ZW50KTsKKyAgICAgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRIYW5kbGVFdmVudChjb250ZXh0KTsKIAogICAgICAg
ICBpZiAocmVnaXN0ZXJlZExpc3RlbmVyLT5pc1Bhc3NpdmUoKSkKICAgICAgICAgICAgIGV2ZW50
LnNldEluUGFzc2l2ZUxpc3RlbmVyKGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKaW5kZXggZWVlZjg0MzlmYjdk
ZmVlZjQxMjIzNDBjNDEyMTAwMGU3ZGYyYWViZS4uYzc0OTJjOTM5NzZiNTZlNGFkYzE5MTE1NDBi
OTExNWMyYmI3MDg5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2NyaXB0
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNs
dWRlICJXZWJDb25zb2xlQWdlbnQuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlLmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0RnJhbWUuaCIKQEAgLTM1MCw2ICszNTEsMTggQEAg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlbW92ZVRpbWVySW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzJiBpbnN0cnVtZW4KICAgICAgICAgdGltZWxpbmVBZ2VudC0+ZGlkUmVtb3Zl
VGltZXIodGltZXJJZCwgZnJhbWVGb3JTY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpKTsK
IH0KIAordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEFkZEV2ZW50TGlzdGVuZXJJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEV2ZW50VGFyZ2V0
JiB0YXJnZXQsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQoreworICAgIGlmIChQYWdl
RGVidWdnZXJBZ2VudCogcGFnZURlYnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLnBh
Z2VEZWJ1Z2dlckFnZW50KCkpCisgICAgICAgIHBhZ2VEZWJ1Z2dlckFnZW50LT5kaWRBZGRFdmVu
dExpc3RlbmVyKHRhcmdldCwgZXZlbnRUeXBlKTsKK30KKwordm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxSZW1vdmVFdmVudExpc3RlbmVySW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiBpbnN0cnVtZW50aW5nQWdlbnRzLCBFdmVudFRhcmdldCYgdGFyZ2V0LCBjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2FwdHVyZSkK
K3sKKyAgICBpZiAoUGFnZURlYnVnZ2VyQWdlbnQqIHBhZ2VEZWJ1Z2dlckFnZW50ID0gaW5zdHJ1
bWVudGluZ0FnZW50cy5wYWdlRGVidWdnZXJBZ2VudCgpKQorICAgICAgICBwYWdlRGVidWdnZXJB
Z2VudC0+d2lsbFJlbW92ZUV2ZW50TGlzdGVuZXIodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVy
LCBjYXB0dXJlKTsKK30KKwogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbENhbGxGdW5jdGlvbkltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2Ny
aXB0TGluZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKICAgICBpbnQgdGlt
ZWxpbmVBZ2VudElkID0gMDsKQEAgLTM3OCwxMSArMzkxLDIwIEBAIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50
SW1wbChJCiAgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZShpbnN0cnVt
ZW50aW5nQWdlbnRzLCB0aW1lbGluZUFnZW50SWQpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6d2lsbEhhbmRsZUV2ZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBjb25zdCBFdmVudCYgZXZlbnQpCit2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6d2lsbEhhbmRsZUV2ZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBjb25zdCBFdmVudCYgZXZlbnQsIGNvbnN0IFJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyJiBsaXN0ZW5lcikKIHsKKyAgICBpZiAoUGFnZURlYnVnZ2VyQWdlbnQqIHBhZ2VE
ZWJ1Z2dlckFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5wYWdlRGVidWdnZXJBZ2VudCgpKQor
ICAgICAgICBwYWdlRGVidWdnZXJBZ2VudC0+d2lsbEhhbmRsZUV2ZW50KGxpc3RlbmVyKTsKKwog
ICAgIHBhdXNlT25OYXRpdmVFdmVudElmTmVlZGVkKGluc3RydW1lbnRpbmdBZ2VudHMsIHRydWUs
IGV2ZW50LnR5cGUoKSwgZmFsc2UpOwogfQogCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkSGFuZGxlRXZlbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdB
Z2VudHMpCit7CisgICAgaWYgKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQg
PSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckRlYnVnZ2VyQWdlbnQoKSkKKyAgICAgICAg
ZGVidWdnZXJBZ2VudC0+ZGlkRGlzcGF0Y2hBc3luY0NhbGwoKTsKK30KKwogdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRXZlbnRJbXBsKGNvbnN0IEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbkNvb2tpZSYgY29va2llKQogewogICAgIGlmIChJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50KiB0aW1lbGluZUFnZW50ID0gcmV0cmlldmVUaW1lbGluZUFnZW50KGNvb2tpZSkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmgKaW5kZXggNjFmNDJjNzY5NmEwMDA4ODIwOWUyMGU1NWY1Nzg0OTUyNWQ1OGEyYS4uODhkZDkz
MWViOGRhZDE4YjRkZTgwNGU1NzU1NWMyOWQ5NzUwOTVjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaApAQCAtMzYsNiArMzYs
NyBAQAogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJEb2N1
bWVudFRocmVhZGFibGVMb2FkZXIuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAi
RXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJGb3JtRGF0YS5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKQEAgLTQzLDcgKzQ0LDYgQEAKICNpbmNs
dWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgogI2luY2x1ZGUgIldvcmtl
ckdsb2JhbFNjb3BlLmgiCiAjaW5jbHVkZSAiV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5oIgpA
QCAtNjUsMTcgKzY1LDIwIEBAIGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKIGNsYXNzIERhdGFiYXNl
OwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBEb2N1bWVudExvYWRlcjsKK2NsYXNzIEV2ZW50TGlz
dGVuZXI7CiBjbGFzcyBIVFRQSGVhZGVyTWFwOwogY2xhc3MgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiBjbGFzcyBOZXR3b3JrTG9hZE1ldHJpY3M7
CiBjbGFzcyBOb2RlOwogY2xhc3MgUHNldWRvRWxlbWVudDsKK2NsYXNzIFJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyOwogY2xhc3MgUmVuZGVyTGF5ZXI7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFz
cyBSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKIGNsYXNzIFJlc291cmNl
UmVzcG9uc2U7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2VjdXJpdHlP
cmlnaW47CiBjbGFzcyBTaGFkb3dSb290OwogY2xhc3MgVVJMOwpAQCAtMTI5LDkgKzEzMiwxMiBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdp
bGxDYWxsRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgc2Ny
aXB0TmFtZSwgaW50IHNjcmlwdExpbmUpOwogICAgIHN0YXRpYyB2b2lkIGRpZENhbGxGdW5jdGlv
bihjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmLCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0Kik7CisgICAgc3RhdGljIHZvaWQgZGlkQWRkRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdl
dCYsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKKyAgICBzdGF0aWMgdm9pZCB3aWxs
UmVtb3ZlRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlLCBFdmVudExpc3RlbmVyJiwgYm9vbCBjYXB0dXJlKTsKICAgICBzdGF0aWMgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxEaXNwYXRjaEV2ZW50KERvY3VtZW50JiwgY29u
c3QgRXZlbnQmLCBib29sIGhhc0V2ZW50TGlzdGVuZXJzKTsKICAgICBzdGF0aWMgdm9pZCBkaWRE
aXNwYXRjaEV2ZW50KGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYpOwotICAg
IHN0YXRpYyB2b2lkIHdpbGxIYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29u
c3QgRXZlbnQmKTsKKyAgICBzdGF0aWMgdm9pZCB3aWxsSGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIGNvbnN0IEV2ZW50JiwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIm
KTsKKyAgICBzdGF0aWMgdm9pZCBkaWRIYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
Jik7CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsRGlzcGF0
Y2hFdmVudE9uV2luZG93KEZyYW1lKiwgY29uc3QgRXZlbnQmLCBET01XaW5kb3cmKTsKICAgICBz
dGF0aWMgdm9pZCBkaWREaXNwYXRjaEV2ZW50T25XaW5kb3coY29uc3QgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llJik7CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSB3aWxsRXZhbHVhdGVTY3JpcHQoRnJhbWUmLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IGxp
bmVOdW1iZXIpOwpAQCAtMjg5LDggKzI5NSwxMSBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsQ2FsbEZ1bmN0aW9uSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzJiwgY29uc3QgU3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogICAgIHN0YXRpYyB2b2lkIGRpZENhbGxGdW5jdGlv
bkltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopOworICAgIHN0YXRpYyB2b2lkIGRpZEFkZEV2ZW50TGlzdGVuZXJJbXBsKElu
c3RydW1lbnRpbmdBZ2VudHMmLCBFdmVudFRhcmdldCYsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlKTsKKyAgICBzdGF0aWMgdm9pZCB3aWxsUmVtb3ZlRXZlbnRMaXN0ZW5lckltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyYsIEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIEV2ZW50TGlzdGVuZXImLCBib29sIGNhcHR1cmUpOwogICAgIHN0YXRpYyBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbERpc3BhdGNoRXZlbnRJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMmLCBEb2N1bWVudCYsIGNvbnN0IEV2ZW50JiwgYm9vbCBoYXNFdmVudExpc3RlbmVy
cyk7Ci0gICAgc3RhdGljIHZvaWQgd2lsbEhhbmRsZUV2ZW50SW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiwgY29uc3QgRXZlbnQmKTsKKyAgICBzdGF0aWMgdm9pZCB3aWxsSGFuZGxlRXZlbnRJbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMmLCBjb25zdCBFdmVudCYsIGNvbnN0IFJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyJik7CisgICAgc3RhdGljIHZvaWQgZGlkSGFuZGxlRXZlbnRJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMmKTsKICAgICBzdGF0aWMgdm9pZCBkaWREaXNwYXRjaEV2ZW50SW1wbChjb25z
dCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKICAgICBzdGF0aWMgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxEaXNwYXRjaEV2ZW50T25XaW5kb3dJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMmLCBjb25zdCBFdmVudCYsIERPTVdpbmRvdyYpOwogICAgIHN0YXRpYyB2
b2lkIGRpZERpc3BhdGNoRXZlbnRPbldpbmRvd0ltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llJik7CkBAIC02MzUsNiArNjQ0LDIwIEBAIGlubGluZSB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkUmVtb3ZlVGltZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29uCiAgICAgICAgIGRpZFJlbW92ZVRpbWVySW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgdGlt
ZXJJZCwgY29udGV4dCk7CiB9CiAKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkQWRkRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYgdGFyZ2V0LCBjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSkKK3sKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9p
ZCgpKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KHRhcmdldC5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpKQorICAgICAgICBkaWRBZGRFdmVudExpc3RlbmVySW1wbCgqaW5zdHJ1bWVudGluZ0Fn
ZW50cywgdGFyZ2V0LCBldmVudFR5cGUpOworfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OndpbGxSZW1vdmVFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQs
IGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lciwg
Ym9vbCBjYXB0dXJlKQoreworICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkp
OworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5z
dHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQodGFyZ2V0LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSkpCisgICAgICAgIHdpbGxSZW1vdmVFdmVudExpc3RlbmVySW1wbCgqaW5zdHJ1bWVudGluZ0Fn
ZW50cywgdGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyLCBjYXB0dXJlKTsKK30KKwogaW5saW5l
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxDYWxsRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiBzY3JpcHROYW1lLCBpbnQgc2NyaXB0TGluZSkKIHsKICAgICBGQVNUX1JFVFVSTl9J
Rl9OT19GUk9OVEVORFMoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCkpOwpAQCAtNjY1
LDExICs2ODgsMTggQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRE
aXNwYXRjaEV2ZW50KGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnQKICAgICAgICAgZGlkRGlzcGF0
Y2hFdmVudEltcGwoY29va2llKTsKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsSGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRXZlbnQmIGV2ZW50KQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsSGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RXZlbnQmIGV2ZW50LCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIpCit7
CisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRz
Rm9yQ29udGV4dChjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIHdpbGxIYW5kbGVFdmVudEltcGwo
Kmluc3RydW1lbnRpbmdBZ2VudHMsIGV2ZW50LCBsaXN0ZW5lcik7Cit9CisKK2lubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9p
ZCgpKTsKICAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9
IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQpKQotICAgICAgICByZXR1cm4g
d2lsbEhhbmRsZUV2ZW50SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZXZlbnQpOworICAgICAg
ICByZXR1cm4gZGlkSGFuZGxlRXZlbnRJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzKTsKIH0KIAog
aW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxEaXNwYXRjaEV2ZW50T25XaW5kb3coRnJhbWUqIGZyYW1lLCBjb25zdCBFdmVu
dCYgZXZlbnQsIERPTVdpbmRvdyYgd2luZG93KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9QYWdlRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggMzZmMDZmNTk4MjBiZGU4ZTZkMDViNDFjNDEw
ZTBiYTQwYTdmNGIxMy4uNmEwNmJhMzZjYzU1Mzc2Y2I3Yzc3ODc5ZTU4NTM1Njk3N2Y2MzMyMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCkBA
IC0zNCw2ICszNCw4IEBACiAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2ZW50
VGFyZ2V0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yT3ZlcmxheS5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvclBhZ2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKQEAgLTQx
LDYgKzQzLDcgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUNvbnNvbGVDbGll
bnQuaCIKICNpbmNsdWRlICJQYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaCIKKyNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmg+CkBAIC05Myw2ICs5NiwxMiBAQCBTdHJpbmcgUGFnZURlYnVnZ2Vy
QWdlbnQ6OnNvdXJjZU1hcFVSTEZvclNjcmlwdChjb25zdCBTY3JpcHQmIHNjcmlwdCkKICAgICBy
ZXR1cm4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c291cmNlTWFwVVJMRm9yU2NyaXB0KHNjcmlw
dCk7CiB9CiAKK3ZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmRpZENsZWFyQXN5bmNTdGFja1RyYWNl
RGF0YSgpCit7CisgICAgbV9yZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcnMuY2xlYXIoKTsKKyAgICBt
X25leHRFdmVudExpc3RlbmVySWRlbnRpZmllciA9IDE7Cit9CisKIHZvaWQgUGFnZURlYnVnZ2Vy
QWdlbnQ6Om11dGVDb25zb2xlKCkKIHsKICAgICBQYWdlQ29uc29sZUNsaWVudDo6bXV0ZSgpOwpA
QCAtMTUxLDYgKzE2MCw1MSBAQCB2b2lkIFBhZ2VEZWJ1Z2dlckFnZW50OjptYWluRnJhbWVOYXZp
Z2F0ZWQoKQogICAgIHNldFN1cHByZXNzQWxsUGF1c2VzKGZhbHNlKTsKIH0KIAordm9pZCBQYWdl
RGVidWdnZXJBZ2VudDo6ZGlkQWRkRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYgdGFyZ2V0LCBj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKK3sKKyAgICBpZiAoIWJyZWFrcG9pbnRzQWN0
aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIGV2ZW50TGlzdGVuZXJzID0gdGFy
Z2V0LmV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7CisgICAgY29uc3QgUmVmUHRyPFJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyPiYgbGlzdGVuZXIgPSBldmVudExpc3RlbmVycy5sYXN0KCk7CisgICAg
aWYgKG1fcmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJzLmNvbnRhaW5zKGxpc3RlbmVyLmdldCgpKSkg
eworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IHRhcmdldC5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmV4ZWNTdGF0ZSgpOworICAgIGlmICghc2NyaXB0U3RhdGUpCisgICAgICAg
IHJldHVybjsKKworICAgIGludCBpZGVudGlmaWVyID0gbV9uZXh0RXZlbnRMaXN0ZW5lcklkZW50
aWZpZXIrKzsKKyAgICBtX3JlZ2lzdGVyZWRFdmVudExpc3RlbmVycy5zZXQobGlzdGVuZXIuZ2V0
KCksIGlkZW50aWZpZXIpOworCisgICAgZGlkU2NoZWR1bGVBc3luY0NhbGwoc2NyaXB0U3RhdGUs
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OkFzeW5jQ2FsbFR5cGU6OkV2ZW50TGlzdGVuZXIsIGlk
ZW50aWZpZXIsIGxpc3RlbmVyLT5pc09uY2UoKSk7Cit9CisKK3ZvaWQgUGFnZURlYnVnZ2VyQWdl
bnQ6OndpbGxSZW1vdmVFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lciwgYm9vbCBjYXB0
dXJlKQoreworICAgIGF1dG8mIGV2ZW50TGlzdGVuZXJzID0gdGFyZ2V0LmV2ZW50TGlzdGVuZXJz
KGV2ZW50VHlwZSk7CisgICAgc2l6ZV90IGxpc3RlbmVySW5kZXggPSBldmVudExpc3RlbmVycy5m
aW5kTWF0Y2hpbmcoWyZdKGF1dG8mIHJlZ2lzdGVyZWRMaXN0ZW5lcikgeworICAgICAgICByZXR1
cm4gJnJlZ2lzdGVyZWRMaXN0ZW5lci0+Y2FsbGJhY2soKSA9PSAmbGlzdGVuZXIgJiYgcmVnaXN0
ZXJlZExpc3RlbmVyLT51c2VDYXB0dXJlKCkgPT0gY2FwdHVyZTsKKyAgICB9KTsKKworICAgIGlm
IChsaXN0ZW5lckluZGV4ID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQg
aWRlbnRpZmllciA9IG1fcmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJzLnRha2UoZXZlbnRMaXN0ZW5l
cnNbbGlzdGVuZXJJbmRleF0uZ2V0KCkpOworICAgIGRpZENhbmNlbEFzeW5jQ2FsbChJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpBc3luY0NhbGxUeXBlOjpFdmVudExpc3RlbmVyLCBpZGVudGlmaWVy
KTsKK30KKwordm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6d2lsbEhhbmRsZUV2ZW50KGNvbnN0IFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyJiBsaXN0ZW5lcikKK3sKKyAgICBhdXRvIGl0ID0gbV9yZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lcnMuZmluZCgmbGlzdGVuZXIpOworICAgIGlmIChpdCA9PSBtX3Jl
Z2lzdGVyZWRFdmVudExpc3RlbmVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2ls
bERpc3BhdGNoQXN5bmNDYWxsKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OkFzeW5jQ2FsbFR5cGU6
OkV2ZW50TGlzdGVuZXIsIGl0LT52YWx1ZSk7Cit9CisKIHZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6
OmRpZFJlcXVlc3RBbmltYXRpb25GcmFtZShpbnQgY2FsbGJhY2tJZCwgRG9jdW1lbnQmIGRvY3Vt
ZW50KQogewogICAgIGlmICghYnJlYWtwb2ludHNBY3RpdmUoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmgKaW5kZXggMWQ3ZWM2ODNkMTEwODY0MjViZjAx
MDRkMDg2MzRhYjM0YmFlODkzYy4uMTY2ZjFkZDA2NzhkODkyMWM5ZjYyNjQ1ZDdlYjFkY2M4ZWUw
NTQ3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFn
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VEZWJ1Z2dlckFnZW50LmgK
QEAgLTM2LDkgKzM2LDEyIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50
OworY2xhc3MgRXZlbnRMaXN0ZW5lcjsKK2NsYXNzIEV2ZW50VGFyZ2V0OwogY2xhc3MgSW5zcGVj
dG9yT3ZlcmxheTsKIGNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsKIGNsYXNzIFBhZ2U7CitjbGFz
cyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjsKIAogY2xhc3MgUGFnZURlYnVnZ2VyQWdlbnQgZmlu
YWwgOiBwdWJsaWMgV2ViRGVidWdnZXJBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
UGFnZURlYnVnZ2VyQWdlbnQpOwpAQCAtNTcsMTIgKzYwLDE4IEBAIHB1YmxpYzoKICAgICB2b2lk
IHdpbGxGaXJlQW5pbWF0aW9uRnJhbWUoaW50IGNhbGxiYWNrSWQpOwogICAgIHZvaWQgZGlkQ2Fu
Y2VsQW5pbWF0aW9uRnJhbWUoaW50IGNhbGxiYWNrSWQpOwogCisgICAgdm9pZCBkaWRBZGRFdmVu
dExpc3RlbmVyKEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpOwor
ICAgIHZvaWQgd2lsbFJlbW92ZUV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXQmLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYsIGJvb2wgY2FwdHVyZSk7CisgICAg
dm9pZCB3aWxsSGFuZGxlRXZlbnQoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImKTsKKwog
cHJvdGVjdGVkOgogICAgIHZvaWQgZW5hYmxlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaXNhYmxl
KGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkgb3ZlcnJpZGU7CiAKICAgICBTdHJpbmcgc291cmNlTWFw
VVJMRm9yU2NyaXB0KGNvbnN0IFNjcmlwdCYpIG92ZXJyaWRlOwogCisgICAgdm9pZCBkaWRDbGVh
ckFzeW5jU3RhY2tUcmFjZURhdGEoKSBvdmVycmlkZTsKKwogcHJpdmF0ZToKICAgICB2b2lkIG11
dGVDb25zb2xlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB1bm11dGVDb25zb2xlKCkgb3ZlcnJpZGU7
CkBAIC03Niw2ICs4NSw5IEBAIHByaXZhdGU6CiAKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1f
cGFnZUFnZW50OwogICAgIEluc3BlY3Rvck92ZXJsYXkqIG1fb3ZlcmxheSB7IG51bGxwdHIgfTsK
KworICAgIEhhc2hNYXA8Y29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIqLCBpbnQ+IG1fcmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXJzOworICAgIGludCBtX25leHRFdmVudExpc3RlbmVySWRlbnRp
ZmllciB7IDEgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4OGE5MjE4
YWY2OTFiNjQxYTdmNGEwZjE3NWVmMDM0MTFmZDFiNzFkLi5kMDQ4ZDFiNWYwNzVkMzI0ZTNkYjFh
MDBlM2ZkZjNmODgxMzE3Y2Y3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTctMDctMjggIE1h
dHQgQmFrZXIgIDxtYXR0YmFrZXJAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6
IGNhcHR1cmUgYW4gYXN5bmMgc3RhY2sgdHJhY2Ugd2hlbiB3ZWIgY29udGVudCBjYWxscyBhZGRF
dmVudExpc3RlbmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzQ3MzkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzNDY4MTk3PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0ZXN0IGNhc2UgY2hl
Y2tpbmcgdGhhdCBhc3luYyBzdGFjayB0cmFjZXMgYXJlIHJlY29yZGVkIGZvciBhZGRFdmVudExp
c3RlbmVyLgorCisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL2FzeW5jLXN0YWNrLXRyYWNl
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIvYXN5bmMtc3RhY2st
dHJhY2UuaHRtbDoKKwogMjAxNy0wNy0yOCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRA
YXBwbGUuY29tPgogCiAgICAgICAgIFttYWNPU10gUmVlZGVyJ3MgZGVmYXVsdHMgZm9udCBpcyBU
aW1lcyBpbnN0ZWFkIG9mIFNhbiBGcmFuY2lzY28KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9kZWJ1Z2dlci9hc3luYy1zdGFjay10cmFjZS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYXN5bmMtc3RhY2stdHJhY2UtZXhwZWN0ZWQudHh0Cmlu
ZGV4IGZlM2NhNTY1MTA1YjE4MDUxZWVmZWNkNzA0NGFhZjBjMTNjZTNmMGMuLjZkNDJkZWRlZGRj
MWFiN2NjY2QzZjQxODJiMTQzOTk2YTZiMjNlMzcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9kZWJ1Z2dlci9hc3luYy1zdGFjay10cmFjZS1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2FzeW5jLXN0YWNrLXRyYWNlLWV4cGVjdGVkLnR4
dApAQCAtNjQsNiArNjQsMTggQEAgQVNZTkMgQ0FMTCBTVEFDSzoKIDM6IC0tLSBzZXRJbnRlcnZh
bCAtLS0KIDQ6IFtGXSB0ZXN0UmVmZXJlbmNlQ291bnRpbmcKIDU6IFtQXSBHbG9iYWwgQ29kZQor
CistLSBSdW5uaW5nIHRlc3QgY2FzZTogQ2hlY2tBc3luY1N0YWNrVHJhY2UuQWRkRXZlbnRMaXN0
ZW5lcgorUEFVU0UgIzEKK0NBTEwgU1RBQ0s6CiswOiBbRl0gcGF1c2VUaGVuRmluaXNoVGVzdAor
MTogW0ZdIGNsaWNrRmlyZWQKKzI6IFtGXSB0ZXN0QWRkRXZlbnRMaXN0ZW5lcgorMzogW1BdIEds
b2JhbCBDb2RlCitBU1lOQyBDQUxMIFNUQUNLOgorNDogLS0tIGFkZEV2ZW50TGlzdGVuZXIgLS0t
Cis1OiBbRl0gdGVzdEFkZEV2ZW50TGlzdGVuZXIKKzY6IFtQXSBHbG9iYWwgQ29kZQogLS0gUnVu
bmluZyB0ZXN0IHNldHVwLgogU2F2ZSBEZWJ1Z2dlck1hbmFnZXIuYXN5bmNTdGFja1RyYWNlRGVw
dGgKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2FzeW5jLXN0
YWNrLXRyYWNlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYXN5bmMtc3Rh
Y2stdHJhY2UuaHRtbAppbmRleCBkMTE2MWIxN2ExYzk2MDE4MjllOGY4MDU1OWVkZWI4OWI5YWI4
M2NmLi5iMGEwNDYwNjZhMmJhZjk5NTIwYTJhNGE5YzQxOTAwZmI3MWVkMDY1IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYXN5bmMtc3RhY2stdHJhY2UuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYXN5bmMtc3RhY2stdHJhY2UuaHRt
bApAQCAtNDEsNiArNDEsMTUgQEAgZnVuY3Rpb24gdGVzdFJlZmVyZW5jZUNvdW50aW5nKCkgewog
ICAgIH0sIHRpbWVyRGVsYXkpOwogfQogCitmdW5jdGlvbiB0ZXN0QWRkRXZlbnRMaXN0ZW5lcigp
IHsKKyAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24g
Y2xpY2tGaXJlZCgpIHsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVy
KCJjbGljayIsIGNsaWNrRmlyZWQpOworICAgICAgICBwYXVzZVRoZW5GaW5pc2hUZXN0KCk7Cisg
ICAgfSk7CisKKyAgICBkb2N1bWVudC5ib2R5LmNsaWNrKCk7Cit9CisKIGZ1bmN0aW9uIHJlY3Vy
c2l2ZUNhbGxUaGVuVGVzdCh0ZXN0RnVuY3Rpb24sIGRlcHRoKSB7CiAgICAgaWYgKGRlcHRoKSB7
CiAgICAgICAgIHJlY3Vyc2l2ZUNhbGxUaGVuVGVzdCh0ZXN0RnVuY3Rpb24sIGRlcHRoIC0gMSk7
CkBAIC05Myw2ICsxMDIsNyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICBhZGRTaW1wbGVUZXN0Q2Fz
ZSgiU2V0SW50ZXJ2YWwiLCAidGVzdFNldEludGVydmFsKDMpIik7CiAgICAgYWRkU2ltcGxlVGVz
dENhc2UoIkNoYWluZWRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAidGVzdENoYWluZWRSZXF1ZXN0
QW5pbWF0aW9uRnJhbWUoKSIpOwogICAgIGFkZFNpbXBsZVRlc3RDYXNlKCJSZWZlcmVuY2VDb3Vu
dGluZyIsICJ0ZXN0UmVmZXJlbmNlQ291bnRpbmcoKSIpOworICAgIGFkZFNpbXBsZVRlc3RDYXNl
KCJBZGRFdmVudExpc3RlbmVyIiwgInRlc3RBZGRFdmVudExpc3RlbmVyKCkiKTsKIAogICAgIGZ1
bmN0aW9uIHNldHVwKHJlc29sdmUpIHsKICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlNhdmUg
RGVidWdnZXJNYW5hZ2VyLmFzeW5jU3RhY2tUcmFjZURlcHRoIik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>