<?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>227194</bug_id>
          
          <creation_ts>2021-06-20 10:39:03 -0700</creation_ts>
          <short_desc>ResizeObserver / IntersectionObserver memory leak on detached &amp; out of reference elements</short_desc>
          <delta_ts>2021-08-01 17:48:42 -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>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>228679</blocked>
    
    <blocked>228693</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jake Archibald">jaffathecake</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>bill</cc>
    
    <cc>cathiechen</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>emilio</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1771173</commentid>
    <comment_count>0</comment_count>
    <who name="Jake Archibald">jaffathecake</who>
    <bug_when>2021-06-20 10:39:03 -0700</bug_when>
    <thetext>```
const weakMap = new WeakMap();

button.onclick = () =&gt; {
  const el = document.createElement(&apos;div&apos;);

  weakMap.set(el, new Uint8Array(1000 * 1000 * 100));

  new ResizeObserver(
    () =&gt; console.log(&apos;resize&apos;, el.getBoundingClientRect())
  ).observe(el);

  document.body.append(el);
  setTimeout(() =&gt; el.remove(), 0);
}
```

Each click leaks an element. In this case that&apos;s 100mb.

Demo: https://static-misc-3.glitch.me/leaky-resize-observer/

The same happens with IntersectionObserver.

This seems unexpected because the element no longer has the means to resize or intersect, as it can no longer be reattached to the document. Also, MutationObserver and event listeners do not cause this sort of leak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772942</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-27 10:39:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/79839851&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773113</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-06-28 10:19:20 -0700</bug_when>
    <thetext>Now fixed in Gecko (https://bugzilla.mozilla.org/show_bug.cgi?id=1717362) and Chromium (https://bugs.chromium.org/p/chromium/issues/detail?id=1220041).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774391</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-07-02 02:06:59 -0700</bug_when>
    <thetext>Oh, intersting. I think I misunderstood the semantics of ResizeObserver / InteractionObserver when I was advising Cathie to keep JS wrapper alive for these objects. We can&apos;t use GCReachableRef in these observers since m_pendingTargets aren&apos;t really transient entires but rather persistent entires that are always there while an element is being observed. Instead, we need to make visitChildren of JSResizeObserver and JSInteractionObserver each visit the opaque root of the observed nodes. This in turn implies that we need a lock for these data structures since visitChildren will be called concurrently to the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1775626</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-07-08 00:09:40 -0700</bug_when>
    <thetext>WTF? IntersectionObserver and ResizeObserver are ActiveDOMObjects? That doesn&apos;t make any sense whatsoever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1775844</commentid>
    <comment_count>5</comment_count>
      <attachid>433178</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-07-08 16:02:25 -0700</bug_when>
    <thetext>Created attachment 433178
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1775934</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-07-09 00:35:12 -0700</bug_when>
    <thetext>LOL, intersection-observer/root-element-deleted.html is failing because the test is asserting a bad GC behavior that I fixed in this very patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1775947</commentid>
    <comment_count>7</comment_count>
      <attachid>433204</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-07-09 02:19:06 -0700</bug_when>
    <thetext>Created attachment 433204
Fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776054</commentid>
    <comment_count>8</comment_count>
      <attachid>433204</attachid>
    <who name="cathiechen">cathiechen</who>
    <bug_when>2021-07-09 12:49:59 -0700</bug_when>
    <thetext>Comment on attachment 433204
Fixes the bug

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

Hi Ryosuke,
Thanks for working on this!

&gt; Source/WebCore/ChangeLog:13
&gt; +        ResizeObserver and IntersectionObserver may get new observation entries queued later.

Hmmm, I don&apos;t quite understand here. I think it seems right to keep ResizeObserver and IntersectionObserver&apos;s JS wrapper objects if there are observed elements.

Not sure if I understand it correctly.
Since now only the elements inside the active observations using GCReachableRef, so gc is able to remove the other elements.
Then it will call `Element::~Element()` and `Element::disconnectFromResizeObservers()`. And the element will be removed from ResizeObserver.
As to the elements inside the active observations, they should be removed after the active observations are cleared.

&gt; LayoutTests/resize-observer/resize-observer-should-not-leak-observed-nodes.html:37
&gt; +function createIntersectionObserver()

Do you mean createResizeObserver here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776056</commentid>
    <comment_count>9</comment_count>
      <attachid>433234</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-07-09 12:52:55 -0700</bug_when>
    <thetext>Created attachment 433234
Fixed the test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776091</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-07-09 15:24:55 -0700</bug_when>
    <thetext>(In reply to cathiechen from comment #8)
&gt; Comment on attachment 433204 [details]
&gt; Fixes the bug
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=433204&amp;action=review
&gt; 
&gt; Hi Ryosuke,
&gt; Thanks for working on this!
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:13
&gt; &gt; +        ResizeObserver and IntersectionObserver may get new observation entries queued later.
&gt; 
&gt; Hmmm, I don&apos;t quite understand here. I think it seems right to keep
&gt; ResizeObserver and IntersectionObserver&apos;s JS wrapper objects if there are
&gt; observed elements.

That&apos;s not right quite. We need to keep ResizeObserver &amp; IntersectionObserver so long as their respective observed nodes are themselves kept alive. Consider the scenario in which ResizeObserver R_1 observes an element E_1. Note that this relationship never ends unless the observation of E_1 is explicitly cleared for R_1, which may never happen. R_1 can&apos;t just stop observing E_1 when E_1 is disconnected from a document because it can be connected to a document later. But when can it be inserted back? It could be 10ms from now, or 10 million years from now. We never know.

The correct way to think of the lifetime of ResizeObserver &amp; IntersectionObserver is that they must be kept alive so long as their observed elements are also kept alive. The way we achieve this condition is by treating those observed elements&apos;s opaque roots as opaque roots of ResizeObserver &amp; IntersectionObserver.

&gt; Not sure if I understand it correctly.
&gt; Since now only the elements inside the active observations using
&gt; GCReachableRef, so gc is able to remove the other elements.

That&apos;s right. This is precisely what this bug is about. We need to be able to GC the observed elements of ResizeObserver &amp; IntersectionObserver if they&apos;re otherwise inaccessible to the script. The easiest way to think of the GC model is that the observed nodes and ResizeObserver are in the same strongly connected component in the GC heap. Either all of them will get collected at the same time, or none of them will get collected. This is so because if ResizeObserver exists without any active observations, there is no way for scripts to gain access to nodes it&apos;s observing. So the only way ResizeObserver must be kept is when JS has access to ResizeObserver itself or some of the observed nodes are kept alive by an external reference (e.g. JS reference or maybe it&apos;s connected to an active document).

&gt; As to the elements inside the active observations, they should be removed
&gt; after the active observations are cleared.

Right. For active observations, the situation is a bit different. Because active observation is a mechanism by which observed nodes can be re-exposed to scripts at a later time, we must make sure such nodes&apos; JS wrappers are kept alive even if it&apos;s not a part of any document and there is JS reference to it. In this case, ResizeObserver is the one that must keep its JS wrapper alive. i.e. ResizeObserver conceptually / semantically acts as an opaque root of these nodes.

&gt; &gt; LayoutTests/resize-observer/resize-observer-should-not-leak-observed-nodes.html:37
&gt; &gt; +function createIntersectionObserver()
&gt; 
&gt; Do you mean createResizeObserver here?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776098</commentid>
    <comment_count>11</comment_count>
      <attachid>433234</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-07-09 15:46:05 -0700</bug_when>
    <thetext>Comment on attachment 433234
Fixed the test

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

&gt; Source/WebCore/page/IntersectionObserver.cpp:129
&gt; +        ASSERT(is&lt;Element&gt;(root));

nit: This assertion is not needed since downcast&lt;&gt;() below will do the same check.

&gt; Source/WebCore/page/IntersectionObserver.cpp:144
&gt; +        ASSERT(is&lt;Element&gt;(root));

ditto.

&gt; Source/WebCore/page/IntersectionObserver.cpp:292
&gt; +    for (auto&amp; target : m_observationTargets) {

How is this thread safe?

Cannot m_observationTargets be modified on the main thread while we&apos;re iterating over it here on the GC thread?

&gt; Source/WebCore/page/ResizeObserver.cpp:137
&gt; +    for (auto&amp; observation : m_observations) {

Same comment about thread safety.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776099</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-07-09 15:49:30 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #11)
&gt; Comment on attachment 433234 [details]
&gt; Fixed the test
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=433234&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/IntersectionObserver.cpp:129
&gt; &gt; +        ASSERT(is&lt;Element&gt;(root));
&gt; 
&gt; nit: This assertion is not needed since downcast&lt;&gt;() below will do the same
&gt; check.

Sure, will remove.

&gt; &gt; Source/WebCore/page/IntersectionObserver.cpp:144
&gt; &gt; +        ASSERT(is&lt;Element&gt;(root));
&gt; 
&gt; ditto.

Done.

&gt; &gt; Source/WebCore/page/IntersectionObserver.cpp:292
&gt; &gt; +    for (auto&amp; target : m_observationTargets) {
&gt; 
&gt; How is this thread safe?
&gt; 
&gt; Cannot m_observationTargets be modified on the main thread while we&apos;re
&gt; iterating over it here on the GC thread?

This is safe because isReachableFromOpaqueRoots runs while the main thread is paused. So it could run in a GC thread but not while the main thread is running.

&gt; &gt; Source/WebCore/page/ResizeObserver.cpp:137
&gt; &gt; +    for (auto&amp; observation : m_observations) {
&gt; 
&gt; Same comment about thread safety.

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776110</commentid>
    <comment_count>13</comment_count>
      <attachid>433249</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-07-09 17:15:38 -0700</bug_when>
    <thetext>Created attachment 433249
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776118</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-07-09 18:03:11 -0700</bug_when>
    <thetext>Committed r279800 (239565@main): &lt;https://commits.webkit.org/239565@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 433249.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776134</commentid>
    <comment_count>15</comment_count>
    <who name="cathiechen">cathiechen</who>
    <bug_when>2021-07-10 03:45:24 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #10)
&gt; That&apos;s not right quite. We need to keep ResizeObserver &amp;
&gt; IntersectionObserver so long as their respective observed nodes are
&gt; themselves kept alive. Consider the scenario in which ResizeObserver R_1
&gt; observes an element E_1. Note that this relationship never ends unless the
&gt; observation of E_1 is explicitly cleared for R_1, which may never happen.
&gt; R_1 can&apos;t just stop observing E_1 when E_1 is disconnected from a document
&gt; because it can be connected to a document later. But when can it be inserted
&gt; back? It could be 10ms from now, or 10 million years from now. We never know.
&gt; 

I see...
In the test case, the element is passed to setTimeout() and is not cleared explicitly. And it can not be gc somehow which causes ResizeObserver &amp; IntersectionObserver leak. 

Thanks for the explanation!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776144</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-07-10 10:31:34 -0700</bug_when>
    <thetext>(In reply to cathiechen from comment #15)
&gt; (In reply to Ryosuke Niwa from comment #10)
&gt; &gt; That&apos;s not right quite. We need to keep ResizeObserver &amp;
&gt; &gt; IntersectionObserver so long as their respective observed nodes are
&gt; &gt; themselves kept alive. Consider the scenario in which ResizeObserver R_1
&gt; &gt; observes an element E_1. Note that this relationship never ends unless the
&gt; &gt; observation of E_1 is explicitly cleared for R_1, which may never happen.
&gt; &gt; R_1 can&apos;t just stop observing E_1 when E_1 is disconnected from a document
&gt; &gt; because it can be connected to a document later. But when can it be inserted
&gt; &gt; back? It could be 10ms from now, or 10 million years from now. We never know.
&gt; &gt; 
&gt; 
&gt; I see...
&gt; In the test case, the element is passed to setTimeout() and is not cleared
&gt; explicitly. And it can not be gc somehow which causes ResizeObserver &amp;
&gt; IntersectionObserver leak.

Right. To be precise here, the issue is that a JS function which is used as a callback of ResizeObserver captures the element (because it&apos;s in the outer scope). Since ResizeObserver is kept alive as it has an observed element (i.e. JSResizeObserver::isReachableFromOpaqueRoots will return true), this JS callback is also kept alive (via JSResizeObserver::visitAdditionalChildren).

As more general rule, GCReachableRef and ActiveDOMObject aren&apos;t appropriate mechanism to keep objects alive unless there is a known time limit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780909</commentid>
    <comment_count>17</comment_count>
      <attachid>433249</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-07-30 12:36:53 -0700</bug_when>
    <thetext>Comment on attachment 433249
Patch for landing

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

&gt; Source/WebCore/ChangeLog:17
&gt; +        would use their respective observed nodes as opaque roots. i.e. so long as any of the observed

I am investigating rdar://81057759. I see that IntersectionObserver maintains a queue of pending entries (m_queuedEntries). What makes sure that the IntersectionObserver wrapper stays alive after its observed node has been collected but there are still queued entries that will be dispatched later on?

We seem to have a wrapper lifetime bug and this is one possible explanation for it (which may or may not be correct).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780977</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-07-30 16:06:31 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #17)
&gt; Comment on attachment 433249 [details]
&gt; Patch for landing
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=433249&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:17
&gt; &gt; +        would use their respective observed nodes as opaque roots. i.e. so long as any of the observed
&gt; 
&gt; I am investigating rdar://81057759. I see that IntersectionObserver
&gt; maintains a queue of pending entries (m_queuedEntries). What makes sure that
&gt; the IntersectionObserver wrapper stays alive after its observed node has
&gt; been collected but there are still queued entries that will be dispatched
&gt; later on?
&gt; 
&gt; We seem to have a wrapper lifetime bug and this is one possible explanation
&gt; for it (which may or may not be correct).

Hm... IntersectionObserver::isReachableFromOpaqueRoots returns true if any of the observation target (m_observationTargets) is still reachable. And any element that was added to m_queuedEntries is also added to m_pendingTargets which keeps its wrapper alive with GCReachableRef so in theory, it should be fine.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433178</attachid>
            <date>2021-07-08 16:02:25 -0700</date>
            <delta_ts>2021-07-09 02:19:00 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>wip227194.patch</filename>
            <type>text/plain</type>
            <size>25210</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXJDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnRlcnNlY3Rp
b25PYnNlcnZlckN1c3RvbS5jcHAKaW5kZXggN2MxYjVmMWExYWE1Li5jYTgyYzZkODVjZDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2
ZXJDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0
aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCkBAIC0zNiw4ICszNiwxOSBAQCB2b2lkIEpTSW50ZXJzZWN0
aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgaWYgKGF1dG8qIGNhbGxiYWNrID0gd3JhcHBlZCgpLmNhbGxiYWNrQ29uY3VycmVudGx5
KCkpCiAgICAgICAgIGNhbGxiYWNrLT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CisgICAgdmlz
aXRvci5hZGRPcGFxdWVSb290KHJvb3Qod3JhcHBlZCgpLnJvb3QoKSkpOwogfQogCiBERUZJTkVf
VklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0ludGVyc2VjdGlvbk9ic2VydmVyKTsKIAorYm9v
bCBKU0ludGVyc2VjdGlvbk9ic2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBjaGFyKipyZWFzb24pCit7CisgICAgaWYgKGpzQ2Fz
dDxKU0ludGVyc2VjdGlvbk9ic2VydmVyKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpLT53cmFw
cGVkKCkuaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHModmlzaXRvcikpIHsKKyAgICAgICAgaWYg
KFVOTElLRUxZKHJlYXNvbikpCisgICAgICAgICAgICAqcmVhc29uID0gIlJlYWNoYWJsZSBmcm9t
IG9ic2VydmVkIG5vZGVzIjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAppbmRleCAzNGQ3
NzkzYjBlOTQuLmE2MjA1MTI5ZWJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAKQEAgLTQxLDQgKzQxLDE0IEBAIHZv
aWQgSlNSZXNpemVPYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oVmlzaXRvciYgdmlz
aXRvcikKIAogREVGSU5FX1ZJU0lUX0FERElUSU9OQUxfQ0hJTERSRU4oSlNSZXNpemVPYnNlcnZl
cik7CiAKK2Jvb2wgSlNSZXNpemVPYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIEpTQzo6QWJzdHJh
Y3RTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgY2hhcioqcmVhc29uKQoreworICAgIGlmIChq
c0Nhc3Q8SlNSZXNpemVPYnNlcnZlcio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKS0+d3JhcHBl
ZCgpLmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKHZpc2l0b3IpKSB7CisgICAgICAgIGlmIChV
TkxJS0VMWShyZWFzb24pKQorICAgICAgICAgICAgKnJlYXNvbiA9ICJSZWFjaGFibGUgZnJvbSBv
YnNlcnZlZCBub2RlcyI7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CmluZGV4IDNjZTg2MjBkNDI5NC4uYTA0ODcwYTVhYWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKQEAgLTc5MTEsNyArNzkxMSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZUludGVyc2VjdGlv
bk9ic2VydmF0aW9ucygpCiAgICAgICAgIGF1dG8gdGltZXN0YW1wID0gb2JzZXJ2ZXItPm5vd1Rp
bWVzdGFtcCgpOwogICAgICAgICBpZiAoIXRpbWVzdGFtcCkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBmb3IgKEVsZW1lbnQqIHRhcmdldCA6IG9ic2VydmVyLT5vYnNlcnZhdGlvblRh
cmdldHMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHRhcmdldCA6IG9ic2VydmVyLT5jb3B5T2Jz
ZXJ2YXRpb25UYXJnZXRzKCkpIHsKICAgICAgICAgICAgIGF1dG8mIHRhcmdldFJlZ2lzdHJhdGlv
bnMgPSB0YXJnZXQtPmludGVyc2VjdGlvbk9ic2VydmVyRGF0YUlmRXhpc3RzKCktPnJlZ2lzdHJh
dGlvbnM7CiAgICAgICAgICAgICBhdXRvIGluZGV4ID0gdGFyZ2V0UmVnaXN0cmF0aW9ucy5maW5k
TWF0Y2hpbmcoW29ic2VydmVyXShhdXRvJiByZWdpc3RyYXRpb24pIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVnaXN0cmF0aW9uLm9ic2VydmVyLmdldCgpID09IG9ic2VydmVyOwpAQCAtNzky
MCw3ICs3OTIwLDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlSW50ZXJzZWN0aW9uT2JzZXJ2YXRp
b25zKCkKICAgICAgICAgICAgIGF1dG8mIHJlZ2lzdHJhdGlvbiA9IHRhcmdldFJlZ2lzdHJhdGlv
bnNbaW5kZXhdOwogCiAgICAgICAgICAgICBib29sIGlzU2FtZU9yaWdpbk9ic2VydmF0aW9uID0g
JnRhcmdldC0+ZG9jdW1lbnQoKSA9PSB0aGlzIHx8IHRhcmdldC0+ZG9jdW1lbnQoKS5zZWN1cml0
eU9yaWdpbigpLmlzU2FtZU9yaWdpbkRvbWFpbihzZWN1cml0eU9yaWdpbigpKTsKLSAgICAgICAg
ICAgIGF1dG8gaW50ZXJzZWN0aW9uU3RhdGUgPSBjb21wdXRlSW50ZXJzZWN0aW9uU3RhdGUoKmZy
YW1lVmlldywgKm9ic2VydmVyLCAqdGFyZ2V0LCBpc1NhbWVPcmlnaW5PYnNlcnZhdGlvbik7Cisg
ICAgICAgICAgICBhdXRvIGludGVyc2VjdGlvblN0YXRlID0gY29tcHV0ZUludGVyc2VjdGlvblN0
YXRlKCpmcmFtZVZpZXcsICpvYnNlcnZlciwgdGFyZ2V0LmdldCgpLCBpc1NhbWVPcmlnaW5PYnNl
cnZhdGlvbik7CiAKICAgICAgICAgICAgIGZsb2F0IGludGVyc2VjdGlvblJhdGlvID0gMDsKICAg
ICAgICAgICAgIHNpemVfdCB0aHJlc2hvbGRJbmRleCA9IDA7CkBAIC03OTY4LDcgKzc5NjgsNyBA
QCB2b2lkIERvY3VtZW50Ojp1cGRhdGVJbnRlcnNlY3Rpb25PYnNlcnZhdGlvbnMoKQogICAgICAg
ICAgICAgICAgICAgICB7IHRhcmdldEJvdW5kaW5nQ2xpZW50UmVjdC54KCksIHRhcmdldEJvdW5k
aW5nQ2xpZW50UmVjdC55KCksIHRhcmdldEJvdW5kaW5nQ2xpZW50UmVjdC53aWR0aCgpLCB0YXJn
ZXRCb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0KCkgfSwKICAgICAgICAgICAgICAgICAgICAgeyBj
bGllbnRJbnRlcnNlY3Rpb25SZWN0LngoKSwgY2xpZW50SW50ZXJzZWN0aW9uUmVjdC55KCksIGNs
aWVudEludGVyc2VjdGlvblJlY3Qud2lkdGgoKSwgY2xpZW50SW50ZXJzZWN0aW9uUmVjdC5oZWln
aHQoKSB9LAogICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb25SYXRpbywKLSAgICAgICAg
ICAgICAgICAgICAgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKHRhcmdldCks
CiAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZEluZGV4ID4gMCwKICAgICAgICAgICAgICAg
ICB9KSk7CiAgICAgICAgICAgICAgICAgbmVlZE5vdGlmeSA9IHRydWU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0xhenlMb2FkRnJhbWVPYnNlcnZlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0xhenlMb2FkRnJhbWVPYnNlcnZlci5jcHAKaW5kZXggN2MyYmExNWE1MTRlLi43
NDBmZWExODUzZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGF6eUxvYWRGcmFt
ZU9ic2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0xhenlMb2FkRnJhbWVPYnNl
cnZlci5jcHAKQEAgLTEwMyw3ICsxMDMsNyBAQCBJbnRlcnNlY3Rpb25PYnNlcnZlciogTGF6eUxv
YWRGcmFtZU9ic2VydmVyOjppbnRlcnNlY3Rpb25PYnNlcnZlcihEb2N1bWVudCYgZG9jdQogCiBi
b29sIExhenlMb2FkRnJhbWVPYnNlcnZlcjo6aXNPYnNlcnZlZChFbGVtZW50JiBlbGVtZW50KSBj
b25zdAogewotICAgIHJldHVybiBtX29ic2VydmVyICYmIG1fb2JzZXJ2ZXItPm9ic2VydmF0aW9u
VGFyZ2V0cygpLmNvbnRhaW5zKCZlbGVtZW50KTsKKyAgICByZXR1cm4gbV9vYnNlcnZlciAmJiBt
X29ic2VydmVyLT5pc09ic2VydmluZyhlbGVtZW50KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9MYXp5TG9hZEltYWdlT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9MYXp5TG9hZEltYWdlT2JzZXJ2ZXIuY3BwCmluZGV4IGY2YzY0MjBkY2I3Ny4uMTRm
MmRlZmMyMjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0xhenlMb2FkSW1hZ2VP
YnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9MYXp5TG9hZEltYWdlT2JzZXJ2
ZXIuY3BwCkBAIC05NSw3ICs5NSw3IEBAIEludGVyc2VjdGlvbk9ic2VydmVyKiBMYXp5TG9hZElt
YWdlT2JzZXJ2ZXI6OmludGVyc2VjdGlvbk9ic2VydmVyKERvY3VtZW50JiBkb2N1CiAKIGJvb2wg
TGF6eUxvYWRJbWFnZU9ic2VydmVyOjppc09ic2VydmVkKEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fb2JzZXJ2ZXIgJiYgbV9vYnNlcnZlci0+b2JzZXJ2YXRpb25UYXJn
ZXRzKCkuY29udGFpbnMoJmVsZW1lbnQpOworICAgIHJldHVybiBtX29ic2VydmVyICYmIG1fb2Jz
ZXJ2ZXItPmlzT2JzZXJ2aW5nKGVsZW1lbnQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwCmluZGV4IDE0YmFlYTBkZmU0My4uNzcwNjdjNDFj
M2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2VydmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmNwcApA
QCAtODYsNyArODYsNyBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8TGVuZ3RoQm94PiBwYXJzZVJvb3RN
YXJnaW4oU3RyaW5nJiByb290TWFyZ2luKQogCiBFeGNlcHRpb25PcjxSZWY8SW50ZXJzZWN0aW9u
T2JzZXJ2ZXI+PiBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVu
dCwgUmVmPEludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2s+JiYgY2FsbGJhY2ssIEludGVyc2Vj
dGlvbk9ic2VydmVyOjpJbml0JiYgaW5pdCkKIHsKLSAgICBDb250YWluZXJOb2RlKiByb290ID0g
bnVsbHB0cjsKKyAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcm9vdDsKICAgICBpZiAoaW5pdC5y
b290KSB7CiAgICAgICAgIFdURjo6c3dpdGNoT24oKmluaXQucm9vdCwgWyZyb290XSAoUmVmUHRy
PEVsZW1lbnQ+IGVsZW1lbnQpIHsKICAgICAgICAgICAgIHJvb3QgPSBlbGVtZW50LmdldCgpOwpA
QCAtMTEyLDM3ICsxMTIsMzYgQEAgRXhjZXB0aW9uT3I8UmVmPEludGVyc2VjdGlvbk9ic2VydmVy
Pj4gSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OmNyZWF0ZShEb2N1bWVudCYgZG8KICAgICAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiRmFpbGVkIHRvIGNvbnN0cnVjdCAnSW50
ZXJzZWN0aW9uT2JzZXJ2ZXInOiBhbGwgdGhyZXNob2xkcyBtdXN0IGxpZSBpbiB0aGUgcmFuZ2Ug
WzAuMCwgMS4wXS4iIH07CiAgICAgfQogCi0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXIoZG9jdW1lbnQsIFdURk1vdmUoY2FsbGJhY2spLCByb290LCByb290TWFy
Z2luT3JFeGNlcHRpb24ucmVsZWFzZVJldHVyblZhbHVlKCksIFdURk1vdmUodGhyZXNob2xkcykp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihkb2N1bWVu
dCwgV1RGTW92ZShjYWxsYmFjayksIHJvb3QuZ2V0KCksIHJvb3RNYXJnaW5PckV4Y2VwdGlvbi5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSwgV1RGTW92ZSh0aHJlc2hvbGRzKSkpOwogfQogCiBJbnRlcnNl
Y3Rpb25PYnNlcnZlcjo6SW50ZXJzZWN0aW9uT2JzZXJ2ZXIoRG9jdW1lbnQmIGRvY3VtZW50LCBS
ZWY8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjaz4mJiBjYWxsYmFjaywgQ29udGFpbmVyTm9k
ZSogcm9vdCwgTGVuZ3RoQm94JiYgcGFyc2VkUm9vdE1hcmdpbiwgVmVjdG9yPGRvdWJsZT4mJiB0
aHJlc2hvbGRzKQotICAgIDogQWN0aXZlRE9NT2JqZWN0KGNhbGxiYWNrLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpCi0gICAgLCBtX3Jvb3Qocm9vdCkKKyAgICA6IG1fcm9vdChtYWtlV2Vha1B0
cihyb290KSkKICAgICAsIG1fcm9vdE1hcmdpbihXVEZNb3ZlKHBhcnNlZFJvb3RNYXJnaW4pKQog
ICAgICwgbV90aHJlc2hvbGRzKFdURk1vdmUodGhyZXNob2xkcykpCiAgICAgLCBtX2NhbGxiYWNr
KFdURk1vdmUoY2FsbGJhY2spKQogewotICAgIGlmIChpczxEb2N1bWVudD4obV9yb290KSkgewot
ICAgICAgICBhdXRvJiBvYnNlcnZlckRhdGEgPSBkb3duY2FzdDxEb2N1bWVudD4oKm1fcm9vdCku
ZW5zdXJlSW50ZXJzZWN0aW9uT2JzZXJ2ZXJEYXRhKCk7CisgICAgaWYgKGlzPERvY3VtZW50Pihy
b290KSkgeworICAgICAgICBhdXRvJiBvYnNlcnZlckRhdGEgPSBkb3duY2FzdDxEb2N1bWVudD4o
KnJvb3QpLmVuc3VyZUludGVyc2VjdGlvbk9ic2VydmVyRGF0YSgpOwogICAgICAgICBvYnNlcnZl
ckRhdGEub2JzZXJ2ZXJzLmFwcGVuZChtYWtlV2Vha1B0cih0aGlzKSk7Ci0gICAgfSBlbHNlIGlm
IChtX3Jvb3QpIHsKLSAgICAgICAgQVNTRVJUKGlzPEVsZW1lbnQ+KG1fcm9vdCkpOwotICAgICAg
ICBhdXRvJiBvYnNlcnZlckRhdGEgPSBkb3duY2FzdDxFbGVtZW50PigqbV9yb290KS5lbnN1cmVJ
bnRlcnNlY3Rpb25PYnNlcnZlckRhdGEoKTsKKyAgICB9IGVsc2UgaWYgKHJvb3QpIHsKKyAgICAg
ICAgQVNTRVJUKGlzPEVsZW1lbnQ+KHJvb3QpKTsKKyAgICAgICAgYXV0byYgb2JzZXJ2ZXJEYXRh
ID0gZG93bmNhc3Q8RWxlbWVudD4oKnJvb3QpLmVuc3VyZUludGVyc2VjdGlvbk9ic2VydmVyRGF0
YSgpOwogICAgICAgICBvYnNlcnZlckRhdGEub2JzZXJ2ZXJzLmFwcGVuZChtYWtlV2Vha1B0cih0
aGlzKSk7CiAgICAgfSBlbHNlIGlmIChhdXRvKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCkpCiAg
ICAgICAgIG1faW1wbGljaXRSb290RG9jdW1lbnQgPSBtYWtlV2Vha1B0cihmcmFtZS0+bWFpbkZy
YW1lKCkuZG9jdW1lbnQoKSk7CiAKICAgICBzdGQ6OnNvcnQobV90aHJlc2hvbGRzLmJlZ2luKCks
IG1fdGhyZXNob2xkcy5lbmQoKSk7Ci0gICAgc3VzcGVuZElmTmVlZGVkKCk7CiB9CiAKIEludGVy
c2VjdGlvbk9ic2VydmVyOjp+SW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKQogewotICAgIGlmIChpczxE
b2N1bWVudD4obV9yb290KSkgewotICAgICAgICBkb3duY2FzdDxEb2N1bWVudD4oKm1fcm9vdCku
aW50ZXJzZWN0aW9uT2JzZXJ2ZXJEYXRhSWZFeGlzdHMoKS0+b2JzZXJ2ZXJzLnJlbW92ZUZpcnN0
KHRoaXMpOwotICAgIH0gZWxzZSBpZiAobV9yb290KSB7Ci0gICAgICAgIEFTU0VSVChpczxFbGVt
ZW50PihtX3Jvb3QpKTsKLSAgICAgICAgZG93bmNhc3Q8RWxlbWVudD4oKm1fcm9vdCkuaW50ZXJz
ZWN0aW9uT2JzZXJ2ZXJEYXRhSWZFeGlzdHMoKS0+b2JzZXJ2ZXJzLnJlbW92ZUZpcnN0KHRoaXMp
OworICAgIFJlZlB0ciByb290ID0gbV9yb290LmdldCgpOworICAgIGlmIChpczxEb2N1bWVudD4o
cm9vdCkpIHsKKyAgICAgICAgZG93bmNhc3Q8RG9jdW1lbnQ+KCpyb290KS5pbnRlcnNlY3Rpb25P
YnNlcnZlckRhdGFJZkV4aXN0cygpLT5vYnNlcnZlcnMucmVtb3ZlRmlyc3QodGhpcyk7CisgICAg
fSBlbHNlIGlmIChyb290KSB7CisgICAgICAgIEFTU0VSVChpczxFbGVtZW50Pihyb290KSk7Cisg
ICAgICAgIGRvd25jYXN0PEVsZW1lbnQ+KCpyb290KS5pbnRlcnNlY3Rpb25PYnNlcnZlckRhdGFJ
ZkV4aXN0cygpLT5vYnNlcnZlcnMucmVtb3ZlRmlyc3QodGhpcyk7CiAgICAgfQogICAgIGRpc2Nv
bm5lY3QoKTsKIH0KQEAgLTE1OSwxMiArMTU4LDE3IEBAIFN0cmluZyBJbnRlcnNlY3Rpb25PYnNl
cnZlcjo6cm9vdE1hcmdpbigpIGNvbnN0CiAKIHZvaWQgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6Om9i
c2VydmUoRWxlbWVudCYgdGFyZ2V0KQogewotICAgIGlmICghdHJhY2tpbmdEb2N1bWVudCgpIHx8
ICFtX2NhbGxiYWNrIHx8IG1fb2JzZXJ2YXRpb25UYXJnZXRzLmNvbnRhaW5zKCZ0YXJnZXQpKQor
ICAgIGlmICghdHJhY2tpbmdEb2N1bWVudCgpIHx8ICFtX2NhbGxiYWNrIHx8IGlzT2JzZXJ2aW5n
KHRhcmdldCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHRhcmdldC5lbnN1cmVJbnRlcnNlY3Rp
b25PYnNlcnZlckRhdGEoKS5yZWdpc3RyYXRpb25zLmFwcGVuZCh7IG1ha2VXZWFrUHRyKHRoaXMp
LCBzdGQ6Om51bGxvcHQgfSk7CiAgICAgYm9vbCBoYWRPYnNlcnZhdGlvblRhcmdldHMgPSBoYXNP
YnNlcnZhdGlvblRhcmdldHMoKTsKLSAgICBtX29ic2VydmF0aW9uVGFyZ2V0cy5hcHBlbmQoJnRh
cmdldCk7CisKKyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX29ic2VydmF0aW9uVGFy
Z2V0c0xvY2sgfTsKKyAgICAgICAgbV9vYnNlcnZhdGlvblRhcmdldHMuYXBwZW5kKG1ha2VXZWFr
UHRyKHRhcmdldCkpOworICAgIH0KKwogICAgIGF1dG8qIGRvY3VtZW50ID0gdHJhY2tpbmdEb2N1
bWVudCgpOwogICAgIGlmICghaGFkT2JzZXJ2YXRpb25UYXJnZXRzKQogICAgICAgICBkb2N1bWVu
dC0+YWRkSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKnRoaXMpOwpAQCAtMTc2LDggKzE4MCwxMSBAQCB2
b2lkIEludGVyc2VjdGlvbk9ic2VydmVyOjp1bm9ic2VydmUoRWxlbWVudCYgdGFyZ2V0KQogICAg
IGlmICghcmVtb3ZlVGFyZ2V0UmVnaXN0cmF0aW9uKHRhcmdldCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGJvb2wgcmVtb3ZlZCA9IG1fb2JzZXJ2YXRpb25UYXJnZXRzLnJlbW92ZUZpcnN0KCZ0
YXJnZXQpOwotICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CisgICAgeworICAg
ICAgICBMb2NrZXIgbG9ja2VyIHsgbV9vYnNlcnZhdGlvblRhcmdldHNMb2NrIH07CisgICAgICAg
IGJvb2wgcmVtb3ZlZCA9IG1fb2JzZXJ2YXRpb25UYXJnZXRzLnJlbW92ZUZpcnN0KCZ0YXJnZXQp
OworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOworICAgIH0KIAogICAg
IGlmICghaGFzT2JzZXJ2YXRpb25UYXJnZXRzKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIGRvY3Vt
ZW50ID0gdHJhY2tpbmdEb2N1bWVudCgpKQpAQCAtMTk1LDYgKzIwMiwzMSBAQCB2b2lkIEludGVy
c2VjdGlvbk9ic2VydmVyOjpkaXNjb25uZWN0KCkKICAgICAgICAgZG9jdW1lbnQtPnJlbW92ZUlu
dGVyc2VjdGlvbk9ic2VydmVyKCp0aGlzKTsKIH0KIAorYm9vbCBJbnRlcnNlY3Rpb25PYnNlcnZl
cjo6aGFzT2JzZXJ2YXRpb25UYXJnZXRzKCkgY29uc3QKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsg
bV9vYnNlcnZhdGlvblRhcmdldHNMb2NrIH07CisgICAgcmV0dXJuIG1fb2JzZXJ2YXRpb25UYXJn
ZXRzLnNpemUoKTsKK30KKworYm9vbCBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6aXNPYnNlcnZpbmco
Y29uc3QgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9v
YnNlcnZhdGlvblRhcmdldHNMb2NrIH07CisgICAgcmV0dXJuIG1fb2JzZXJ2YXRpb25UYXJnZXRz
LmZpbmRNYXRjaGluZyhbJl0oYXV0byYgdGFyZ2V0KSB7CisgICAgICAgIHJldHVybiB0YXJnZXQu
Z2V0KCkgPT0gJmVsZW1lbnQ7CisgICAgfSkgIT0gbm90Rm91bmQ7Cit9CisKK1ZlY3RvcjxSZWY8
RWxlbWVudD4+IEludGVyc2VjdGlvbk9ic2VydmVyOjpjb3B5T2JzZXJ2YXRpb25UYXJnZXRzKCkg
Y29uc3QKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9vYnNlcnZhdGlvblRhcmdldHNMb2NrIH07
CisgICAgcmV0dXJuIFdURjo6Y29tcGFjdE1hcChtX29ic2VydmF0aW9uVGFyZ2V0cywgW10oYXV0
byYgZWxlbWVudFdlYWtQdHIpIC0+IHN0ZDo6b3B0aW9uYWw8UmVmPEVsZW1lbnQ+PiB7CisgICAg
ICAgIGF1dG8qIGVsZW1lbnQgPSBlbGVtZW50V2Vha1B0ci5nZXQoKTsKKyAgICAgICAgaWYgKCFl
bGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJu
IFJlZiB7ICplbGVtZW50IH07CisgICAgfSk7Cit9CisKIGF1dG8gSW50ZXJzZWN0aW9uT2JzZXJ2
ZXI6OnRha2VSZWNvcmRzKCkgLT4gVGFrZW5SZWNvcmRzCiB7CiAgICAgcmV0dXJuIHsgV1RGTW92
ZShtX3F1ZXVlZEVudHJpZXMpLCBXVEZNb3ZlKG1fcGVuZGluZ1RhcmdldHMpIH07CkBAIC0yMDIs
NyArMjM0LDExIEBAIGF1dG8gSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnRha2VSZWNvcmRzKCkgLT4g
VGFrZW5SZWNvcmRzCiAKIHZvaWQgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnRhcmdldERlc3Ryb3ll
ZChFbGVtZW50JiB0YXJnZXQpCiB7Ci0gICAgbV9vYnNlcnZhdGlvblRhcmdldHMucmVtb3ZlRmly
c3QoJnRhcmdldCk7CisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9vYnNlcnZhdGlv
blRhcmdldHNMb2NrIH07CisgICAgICAgIG1fb2JzZXJ2YXRpb25UYXJnZXRzLnJlbW92ZUZpcnN0
KCZ0YXJnZXQpOworICAgIH0KKwogICAgIGlmICghaGFzT2JzZXJ2YXRpb25UYXJnZXRzKCkpIHsK
ICAgICAgICAgaWYgKGF1dG8qIGRvY3VtZW50ID0gdHJhY2tpbmdEb2N1bWVudCgpKQogICAgICAg
ICAgICAgZG9jdW1lbnQtPnJlbW92ZUludGVyc2VjdGlvbk9ic2VydmVyKCp0aGlzKTsKQEAgLTIy
MywxMSArMjU5LDE1IEBAIGJvb2wgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnJlbW92ZVRhcmdldFJl
Z2lzdHJhdGlvbihFbGVtZW50JiB0YXJnZXQpCiAKIHZvaWQgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6
OnJlbW92ZUFsbFRhcmdldHMoKQogewotICAgIGZvciAoYXV0byogdGFyZ2V0IDogbV9vYnNlcnZh
dGlvblRhcmdldHMpIHsKKyAgICBhdXRvIG9ic2VydmF0aW9uVGFyZ2V0cyA9IChbdGhpc10oKSB7
CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX29ic2VydmF0aW9uVGFyZ2V0c0xvY2sgfTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9vYnNlcnZhdGlvblRhcmdldHMsIHsgfSk7Cisg
ICAgfSkoKTsKKworICAgIGZvciAoYXV0byYgdGFyZ2V0IDogb2JzZXJ2YXRpb25UYXJnZXRzKSB7
CiAgICAgICAgIGJvb2wgcmVtb3ZlZCA9IHJlbW92ZVRhcmdldFJlZ2lzdHJhdGlvbigqdGFyZ2V0
KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKICAgICB9Ci0gICAg
bV9vYnNlcnZhdGlvblRhcmdldHMuY2xlYXIoKTsKIH0KIAogdm9pZCBJbnRlcnNlY3Rpb25PYnNl
cnZlcjo6cm9vdERlc3Ryb3llZCgpCkBAIC0yNzksMjQgKzMxOSw2IEBAIHZvaWQgSW50ZXJzZWN0
aW9uT2JzZXJ2ZXI6Om5vdGlmeSgpCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRG
aXJlT2JzZXJ2ZXJDYWxsYmFjaygqY29udGV4dCk7CiB9CiAKLWJvb2wgSW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXI6OnZpcnR1YWxIYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAotewotICAgIHJldHVybiAo
aGFzT2JzZXJ2YXRpb25UYXJnZXRzKCkgJiYgdHJhY2tpbmdEb2N1bWVudCgpKSB8fCAhbV9xdWV1
ZWRFbnRyaWVzLmlzRW1wdHkoKTsKLX0KLQotY29uc3QgY2hhciogSW50ZXJzZWN0aW9uT2JzZXJ2
ZXI6OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAotewotICAgIHJldHVybiAiSW50ZXJzZWN0
aW9uT2JzZXJ2ZXIiOwotfQotCi12b2lkIEludGVyc2VjdGlvbk9ic2VydmVyOjpzdG9wKCkKLXsK
LSAgICBkaXNjb25uZWN0KCk7Ci0gICAgbV9jYWxsYmFjayA9IG51bGxwdHI7Ci0gICAgbV9xdWV1
ZWRFbnRyaWVzLmNsZWFyKCk7Ci0gICAgbV9wZW5kaW5nVGFyZ2V0cy5jbGVhcigpOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5URVJTRUNUSU9OX09C
U0VSVkVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNl
cnZlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5oCmluZGV4
IGY1MDlkMzU2NTE4ZC4uOTNlYWE5YjdmOWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRl
cnNlY3Rpb25PYnNlcnZlci5oCkBAIC0yNyw4ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoSU5URVJT
RUNUSU9OX09CU0VSVkVSKQogCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiR0NSZWFjaGFibGVSZWYuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW50
ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjay5oIgogI2luY2x1ZGUgIkludGVyc2VjdGlvbk9ic2Vy
dmVyRW50cnkuaCIKICNpbmNsdWRlICJMZW5ndGhCb3guaCIKQEAgLTQwLDcgKzQwLDYgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBFbGVtZW50OwogY2xh
c3MgQ29udGFpbmVyTm9kZTsKIAogc3RydWN0IEludGVyc2VjdGlvbk9ic2VydmVyUmVnaXN0cmF0
aW9uIHsKQEAgLTYwLDcgKzU5LDcgQEAgc3RydWN0IEludGVyc2VjdGlvbk9ic2VydmVyRGF0YSB7
CiAgICAgVmVjdG9yPEludGVyc2VjdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiByZWdpc3RyYXRp
b25zOwogfTsKIAotY2xhc3MgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgOiBwdWJsaWMgUmVmQ291bnRl
ZDxJbnRlcnNlY3Rpb25PYnNlcnZlcj4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBD
YW5NYWtlV2Vha1B0cjxJbnRlcnNlY3Rpb25PYnNlcnZlcj4geworY2xhc3MgSW50ZXJzZWN0aW9u
T2JzZXJ2ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnRlcnNlY3Rpb25PYnNlcnZlcj4sIHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxJbnRlcnNlY3Rpb25PYnNlcnZlcj4gewogcHVibGljOgogICAgIHN0
cnVjdCBJbml0IHsKICAgICAgICAgc3RkOjpvcHRpb25hbDxWYXJpYW50PFJlZlB0cjxFbGVtZW50
PiwgUmVmUHRyPERvY3VtZW50Pj4+IHJvb3Q7CkBAIC03NCwxNiArNzMsMTkgQEAgcHVibGljOgog
CiAgICAgRG9jdW1lbnQqIHRyYWNraW5nRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3Jvb3Qg
PyAmbV9yb290LT5kb2N1bWVudCgpIDogbV9pbXBsaWNpdFJvb3REb2N1bWVudC5nZXQoKTsgfQog
Ci0gICAgQ29udGFpbmVyTm9kZSogcm9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdDsgfQorICAg
IENvbnRhaW5lck5vZGUqIHJvb3QoKSBjb25zdCB7IHJldHVybiBtX3Jvb3QuZ2V0KCk7IH0KICAg
ICBTdHJpbmcgcm9vdE1hcmdpbigpIGNvbnN0OwogICAgIGNvbnN0IExlbmd0aEJveCYgcm9vdE1h
cmdpbkJveCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdE1hcmdpbjsgfQogICAgIGNvbnN0IFZlY3Rv
cjxkb3VibGU+JiB0aHJlc2hvbGRzKCkgY29uc3QgeyByZXR1cm4gbV90aHJlc2hvbGRzOyB9Ci0g
ICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiBvYnNlcnZhdGlvblRhcmdldHMoKSBjb25zdCB7IHJl
dHVybiBtX29ic2VydmF0aW9uVGFyZ2V0czsgfQogCiAgICAgdm9pZCBvYnNlcnZlKEVsZW1lbnQm
KTsKICAgICB2b2lkIHVub2JzZXJ2ZShFbGVtZW50Jik7CiAgICAgdm9pZCBkaXNjb25uZWN0KCk7
CiAKKyAgICBib29sIGhhc09ic2VydmF0aW9uVGFyZ2V0cygpIGNvbnN0OworICAgIGJvb2wgaXNP
YnNlcnZpbmcoY29uc3QgRWxlbWVudCYpIGNvbnN0OworICAgIFZlY3RvcjxSZWY8RWxlbWVudD4+
IGNvcHlPYnNlcnZhdGlvblRhcmdldHMoKSBjb25zdDsKKwogICAgIHN0cnVjdCBUYWtlblJlY29y
ZHMgewogICAgICAgICBWZWN0b3I8UmVmPEludGVyc2VjdGlvbk9ic2VydmVyRW50cnk+PiByZWNv
cmRzOwogICAgICAgICBWZWN0b3I8R0NSZWFjaGFibGVSZWY8RWxlbWVudD4+IHBlbmRpbmdUYXJn
ZXRzOwpAQCAtOTEsNyArOTMsNiBAQCBwdWJsaWM6CiAgICAgVGFrZW5SZWNvcmRzIHRha2VSZWNv
cmRzKCk7CiAKICAgICB2b2lkIHRhcmdldERlc3Ryb3llZChFbGVtZW50Jik7Ci0gICAgYm9vbCBo
YXNPYnNlcnZhdGlvblRhcmdldHMoKSBjb25zdCB7IHJldHVybiBtX29ic2VydmF0aW9uVGFyZ2V0
cy5zaXplKCk7IH0KICAgICB2b2lkIHJvb3REZXN0cm95ZWQoKTsKIAogICAgIHN0ZDo6b3B0aW9u
YWw8UmVkdWNlZFJlc29sdXRpb25TZWNvbmRzPiBub3dUaW1lc3RhbXAoKSBjb25zdDsKQEAgLTEw
MSwyMyArMTAyLDMwIEBAIHB1YmxpYzoKIAogICAgIEludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJh
Y2sqIGNhbGxiYWNrQ29uY3VycmVudGx5KCkgeyByZXR1cm4gbV9jYWxsYmFjay5nZXQoKTsgfQog
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICBib29sIGlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKFZpc2l0b3ImIHZpc2l0b3IpCisgICAgeworICAgICAgICBMb2NrZXIgbG9j
a2VyIHsgbV9vYnNlcnZhdGlvblRhcmdldHNMb2NrIH07CisgICAgICAgIGZvciAoYXV0byYgdGFy
Z2V0IDogbV9vYnNlcnZhdGlvblRhcmdldHMpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBlbGVt
ZW50ID0gdGFyZ2V0LmdldCgpOyBlbGVtZW50ICYmIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290
KGVsZW1lbnQtPm9wYXF1ZVJvb3QoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogcHJpdmF0ZToKICAgICBJ
bnRlcnNlY3Rpb25PYnNlcnZlcihEb2N1bWVudCYsIFJlZjxJbnRlcnNlY3Rpb25PYnNlcnZlckNh
bGxiYWNrPiYmLCBDb250YWluZXJOb2RlKiByb290LCBMZW5ndGhCb3gmJiBwYXJzZWRSb290TWFy
Z2luLCBWZWN0b3I8ZG91YmxlPiYmIHRocmVzaG9sZHMpOwogCi0gICAgLy8gQWN0aXZlRE9NT2Jq
ZWN0LgotICAgIGJvb2wgdmlydHVhbEhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IG92ZXJyaWRl
OwotICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKLQogICAgIGJvb2wgcmVtb3ZlVGFyZ2V0UmVnaXN0
cmF0aW9uKEVsZW1lbnQmKTsKICAgICB2b2lkIHJlbW92ZUFsbFRhcmdldHMoKTsKIAogICAgIFdl
YWtQdHI8RG9jdW1lbnQ+IG1faW1wbGljaXRSb290RG9jdW1lbnQ7Ci0gICAgQ29udGFpbmVyTm9k
ZSogbV9yb290OworICAgIFdlYWtQdHI8Q29udGFpbmVyTm9kZT4gbV9yb290OwogICAgIExlbmd0
aEJveCBtX3Jvb3RNYXJnaW47CiAgICAgVmVjdG9yPGRvdWJsZT4gbV90aHJlc2hvbGRzOwogICAg
IFJlZlB0cjxJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrPiBtX2NhbGxiYWNrOwotICAgIFZl
Y3RvcjxFbGVtZW50Kj4gbV9vYnNlcnZhdGlvblRhcmdldHM7CisgICAgVmVjdG9yPFdlYWtQdHI8
RWxlbWVudD4+IG1fb2JzZXJ2YXRpb25UYXJnZXRzIFdURl9HVUFSREVEX0JZX0xPQ0sobV9vYnNl
cnZhdGlvblRhcmdldHNMb2NrKTsKKyAgICBtdXRhYmxlIExvY2sgbV9vYnNlcnZhdGlvblRhcmdl
dHNMb2NrOwogICAgIFZlY3RvcjxHQ1JlYWNoYWJsZVJlZjxFbGVtZW50Pj4gbV9wZW5kaW5nVGFy
Z2V0czsKICAgICBWZWN0b3I8UmVmPEludGVyc2VjdGlvbk9ic2VydmVyRW50cnk+PiBtX3F1ZXVl
ZEVudHJpZXM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rp
b25PYnNlcnZlci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2VydmVy
LmlkbAppbmRleCA5ODA5NTYzNTNlNWQuLjdhZGNlODIxYTA4MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5pZGwKQEAgLTI2LDExICsyNiwxMiBAQAogLy8g
aHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9JbnRlcnNlY3Rpb25PYnNlcnZlci8KIAogWwotICAgIEFj
dGl2ZURPTU9iamVjdCwKICAgICBDb25kaXRpb25hbD1JTlRFUlNFQ1RJT05fT0JTRVJWRVIsCiAg
ICAgRW5hYmxlZEJ5U2V0dGluZz1JbnRlcnNlY3Rpb25PYnNlcnZlciwKICAgICBFeHBvc2VkPVdp
bmRvdywKICAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKKyAgICBDdXN0b21Jc1JlYWNoYWJsZSwK
KyAgICBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlCiBdIGludGVyZmFjZSBJbnRlcnNlY3Rpb25P
YnNlcnZlciB7CiAgICAgW0NhbGxXaXRoPURvY3VtZW50XSBjb25zdHJ1Y3RvcihJbnRlcnNlY3Rp
b25PYnNlcnZlckNhbGxiYWNrIGNhbGxiYWNrLCBvcHRpb25hbCBJbnRlcnNlY3Rpb25PYnNlcnZl
ckluaXQgb3B0aW9ucyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXpl
T2JzZXJ2YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZhdGlvbi5j
cHAKaW5kZXggN2MxYTkyMzA3MmNkLi5lMzRjMDk1ZDA1Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUmVzaXplT2JzZXJ2YXRpb24uY3BwCkBAIC0zNCwxMyArMzQsMTMgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1SZWY8UmVzaXplT2JzZXJ2YXRpb24+IFJlc2l6ZU9ic2VydmF0aW9uOjpj
cmVhdGUoRWxlbWVudCogdGFyZ2V0KQorUmVmPFJlc2l6ZU9ic2VydmF0aW9uPiBSZXNpemVPYnNl
cnZhdGlvbjo6Y3JlYXRlKEVsZW1lbnQmIHRhcmdldCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBSZXNpemVPYnNlcnZhdGlvbih0YXJnZXQpKTsKIH0KIAotUmVzaXplT2JzZXJ2YXRpb246
OlJlc2l6ZU9ic2VydmF0aW9uKEVsZW1lbnQqIGVsZW1lbnQpCi0gICAgOiBtX3RhcmdldChlbGVt
ZW50KQorUmVzaXplT2JzZXJ2YXRpb246OlJlc2l6ZU9ic2VydmF0aW9uKEVsZW1lbnQmIGVsZW1l
bnQpCisgICAgOiBtX3RhcmdldCB7IG1ha2VXZWFrUHRyKGVsZW1lbnQpIH0KIHsKIH0KIApAQCAt
OTIsNyArOTIsNyBAQCBib29sIFJlc2l6ZU9ic2VydmF0aW9uOjplbGVtZW50U2l6ZUNoYW5nZWQo
TGF5b3V0U2l6ZSYgY3VycmVudFNpemUpIGNvbnN0CiBzaXplX3QgUmVzaXplT2JzZXJ2YXRpb246
OnRhcmdldEVsZW1lbnREZXB0aCgpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgZGVwdGggPSAwOwot
ICAgIGZvciAoRWxlbWVudCogb3duZXJFbGVtZW50ICA9IG1fdGFyZ2V0OyBvd25lckVsZW1lbnQ7
IG93bmVyRWxlbWVudCA9IG93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKSkg
eworICAgIGZvciAoRWxlbWVudCogb3duZXJFbGVtZW50ID0gbV90YXJnZXQuZ2V0KCk7IG93bmVy
RWxlbWVudDsgb3duZXJFbGVtZW50ID0gb3duZXJFbGVtZW50LT5kb2N1bWVudCgpLm93bmVyRWxl
bWVudCgpKSB7CiAgICAgICAgIGZvciAoRWxlbWVudCogcGFyZW50ID0gb3duZXJFbGVtZW50OyBw
YXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50RWxlbWVudCgpKQogICAgICAgICAgICAgKytk
ZXB0aDsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2Vy
dmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmF0aW9uLmgKaW5kZXgg
YzdkYjFmZGVjYTUzLi44NWY5ZTA2ZjlmZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUmVzaXplT2JzZXJ2YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9i
c2VydmF0aW9uLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAK
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzgsNyArMzksNyBAQCBjbGFzcyBFbGVtZW50Owog
Y2xhc3MgUmVzaXplT2JzZXJ2YXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxSZXNpemVPYnNlcnZh
dGlvbj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8UmVzaXplT2JzZXJ2YXRpb24+IGNyZWF0ZShFbGVtZW50KiB0YXJnZXQpOworICAgIHN0
YXRpYyBSZWY8UmVzaXplT2JzZXJ2YXRpb24+IGNyZWF0ZShFbGVtZW50JiB0YXJnZXQpOwogCiAg
ICAgflJlc2l6ZU9ic2VydmF0aW9uKCk7CiAKQEAgLTQ4LDEzICs0OSwxMyBAQCBwdWJsaWM6CiAg
ICAgRmxvYXRSZWN0IGNvbXB1dGVDb250ZW50UmVjdCgpIGNvbnN0OwogCiAgICAgYm9vbCBlbGVt
ZW50U2l6ZUNoYW5nZWQoTGF5b3V0U2l6ZSYpIGNvbnN0OwotICAgIEVsZW1lbnQqIHRhcmdldCgp
IGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0OyB9CisgICAgRWxlbWVudCogdGFyZ2V0KCkgY29uc3Qg
eyByZXR1cm4gbV90YXJnZXQuZ2V0KCk7IH0KICAgICBzaXplX3QgdGFyZ2V0RWxlbWVudERlcHRo
KCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgUmVzaXplT2JzZXJ2YXRpb24oRWxlbWVudCogdGFy
Z2V0KTsKKyAgICBSZXNpemVPYnNlcnZhdGlvbihFbGVtZW50JiB0YXJnZXQpOwogCi0gICAgRWxl
bWVudCogbV90YXJnZXQ7CisgICAgV2Vha1B0cjxFbGVtZW50PiBtX3RhcmdldDsKICAgICBMYXlv
dXRTaXplIG1fbGFzdE9ic2VydmF0aW9uU2l6ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNp
emVPYnNlcnZlci5jcHAKaW5kZXggNTUwMDM2YmU1MGU3Li5hMWZkNjA1NmRkYzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwCkBAIC00MCwxMSArNDAsOSBAQCBSZWY8UmVz
aXplT2JzZXJ2ZXI+IFJlc2l6ZU9ic2VydmVyOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBS
ZWY8UmVzaXplT2JzZXJ2ZQogfQogCiBSZXNpemVPYnNlcnZlcjo6UmVzaXplT2JzZXJ2ZXIoRG9j
dW1lbnQmIGRvY3VtZW50LCBSZWY8UmVzaXplT2JzZXJ2ZXJDYWxsYmFjaz4mJiBjYWxsYmFjaykK
LSAgICA6IEFjdGl2ZURPTU9iamVjdChjYWxsYmFjay0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KQotICAgICwgbV9kb2N1bWVudChtYWtlV2Vha1B0cihkb2N1bWVudCkpCisgICAgOiBtX2RvY3Vt
ZW50KG1ha2VXZWFrUHRyKGRvY3VtZW50KSkKICAgICAsIG1fY2FsbGJhY2soV1RGTW92ZShjYWxs
YmFjaykpCiB7Ci0gICAgc3VzcGVuZElmTmVlZGVkKCk7CiB9CiAKIFJlc2l6ZU9ic2VydmVyOjp+
UmVzaXplT2JzZXJ2ZXIoKQpAQCAtNjksOCArNjcsMTEgQEAgdm9pZCBSZXNpemVPYnNlcnZlcjo6
b2JzZXJ2ZShFbGVtZW50JiB0YXJnZXQpCiAgICAgYXV0byYgb2JzZXJ2ZXJEYXRhID0gdGFyZ2V0
LmVuc3VyZVJlc2l6ZU9ic2VydmVyRGF0YSgpOwogICAgIG9ic2VydmVyRGF0YS5vYnNlcnZlcnMu
YXBwZW5kKG1ha2VXZWFrUHRyKHRoaXMpKTsKIAotICAgIG1fb2JzZXJ2YXRpb25zLmFwcGVuZChS
ZXNpemVPYnNlcnZhdGlvbjo6Y3JlYXRlKCZ0YXJnZXQpKTsKLSAgICBtX3BlbmRpbmdUYXJnZXRz
LmFwcGVuZCh0YXJnZXQpOworICAgIG1fb2JzZXJ2YXRpb25zLmFwcGVuZChSZXNpemVPYnNlcnZh
dGlvbjo6Y3JlYXRlKHRhcmdldCkpOworICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1f
b2JzZXJ2YXRpb25UYXJnZXRzTG9jayB9OworICAgICAgICBtX29ic2VydmF0aW9uVGFyZ2V0cy5h
cHBlbmQobWFrZVdlYWtQdHIodGFyZ2V0KSk7CisgICAgfQogCiAgICAgaWYgKG1fZG9jdW1lbnQp
IHsKICAgICAgICAgbV9kb2N1bWVudC0+YWRkUmVzaXplT2JzZXJ2ZXIoKnRoaXMpOwpAQCAtMTA3
LDYgKzEwOCw3IEBAIHNpemVfdCBSZXNpemVPYnNlcnZlcjo6Z2F0aGVyT2JzZXJ2YXRpb25zKHNp
emVfdCBkZWVwZXJUaGFuKQogICAgICAgICAgICAgaWYgKGRlcHRoID4gZGVlcGVyVGhhbikgewog
ICAgICAgICAgICAgICAgIG9ic2VydmF0aW9uLT51cGRhdGVPYnNlcnZhdGlvblNpemUoY3VycmVu
dFNpemUpOwogICAgICAgICAgICAgICAgIG1fYWN0aXZlT2JzZXJ2YXRpb25zLmFwcGVuZChvYnNl
cnZhdGlvbi5nZXQoKSk7CisgICAgICAgICAgICAgICAgbV9hY3RpdmVPYnNlcnZhdGlvblRhcmdl
dHMuYXBwZW5kKCpvYnNlcnZhdGlvbi0+dGFyZ2V0KCkpOwogICAgICAgICAgICAgICAgIG1pbk9i
c2VydmVkRGVwdGggPSBzdGQ6Om1pbihkZXB0aCwgbWluT2JzZXJ2ZWREZXB0aCk7CiAgICAgICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBtX2hhc1NraXBwZWRPYnNlcnZhdGlvbnMgPSB0
cnVlOwpAQCAtMTQ5LDE0ICsxNTEsMTggQEAgdm9pZCBSZXNpemVPYnNlcnZlcjo6cmVtb3ZlQWxs
VGFyZ2V0cygpCiAgICAgICAgIGJvb2wgcmVtb3ZlZCA9IHJlbW92ZVRhcmdldCgqb2JzZXJ2YXRp
b24tPnRhcmdldCgpKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsK
ICAgICB9Ci0gICAgbV9wZW5kaW5nVGFyZ2V0cy5jbGVhcigpOworICAgIG1fYWN0aXZlT2JzZXJ2
YXRpb25UYXJnZXRzLmNsZWFyKCk7CiAgICAgbV9hY3RpdmVPYnNlcnZhdGlvbnMuY2xlYXIoKTsK
ICAgICBtX29ic2VydmF0aW9ucy5jbGVhcigpOworICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tl
ciB7IG1fb2JzZXJ2YXRpb25UYXJnZXRzTG9jayB9OworICAgICAgICBtX29ic2VydmF0aW9uVGFy
Z2V0cy5jbGVhcigpOworICAgIH0KIH0KIAogYm9vbCBSZXNpemVPYnNlcnZlcjo6cmVtb3ZlT2Jz
ZXJ2YXRpb24oY29uc3QgRWxlbWVudCYgdGFyZ2V0KQogewotICAgIG1fcGVuZGluZ1RhcmdldHMu
cmVtb3ZlRmlyc3RNYXRjaGluZyhbJnRhcmdldF0oYXV0byYgcGVuZGluZ1RhcmdldCkgeworICAg
IG1fYWN0aXZlT2JzZXJ2YXRpb25UYXJnZXRzLnJlbW92ZUZpcnN0TWF0Y2hpbmcoWyZ0YXJnZXRd
KGF1dG8mIHBlbmRpbmdUYXJnZXQpIHsKICAgICAgICAgcmV0dXJuIHBlbmRpbmdUYXJnZXQucHRy
KCkgPT0gJnRhcmdldDsKICAgICB9KTsKIApAQCAtMTY0LDI3ICsxNzAsMTggQEAgYm9vbCBSZXNp
emVPYnNlcnZlcjo6cmVtb3ZlT2JzZXJ2YXRpb24oY29uc3QgRWxlbWVudCYgdGFyZ2V0KQogICAg
ICAgICByZXR1cm4gb2JzZXJ2YXRpb24tPnRhcmdldCgpID09ICZ0YXJnZXQ7CiAgICAgfSk7CiAK
KyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX29ic2VydmF0aW9uVGFyZ2V0c0xvY2sg
fTsKKyAgICAgICAgbV9vYnNlcnZhdGlvblRhcmdldHMucmVtb3ZlRmlyc3RNYXRjaGluZyhbJnRh
cmdldF0oYXV0byYgb2JzZXJ2YXRpb25UYXJnZXQpIHsKKyAgICAgICAgICAgIHJldHVybiBvYnNl
cnZhdGlvblRhcmdldC5nZXQoKSA9PSAmdGFyZ2V0OworICAgICAgICB9KTsKKyAgICB9CisKICAg
ICByZXR1cm4gbV9vYnNlcnZhdGlvbnMucmVtb3ZlRmlyc3RNYXRjaGluZyhbJnRhcmdldF0oYXV0
byYgb2JzZXJ2YXRpb24pIHsKICAgICAgICAgcmV0dXJuIG9ic2VydmF0aW9uLT50YXJnZXQoKSA9
PSAmdGFyZ2V0OwogICAgIH0pOwogfQogCi1ib29sIFJlc2l6ZU9ic2VydmVyOjp2aXJ0dWFsSGFz
UGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKGhhc09ic2VydmF0aW9ucygp
ICYmIG1fZG9jdW1lbnQpIHx8ICFtX2FjdGl2ZU9ic2VydmF0aW9ucy5pc0VtcHR5KCk7Ci19Ci0K
LWNvbnN0IGNoYXIqIFJlc2l6ZU9ic2VydmVyOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gIlJlc2l6ZU9ic2VydmVyIjsKLX0KLQotdm9pZCBSZXNpemVPYnNlcnZl
cjo6c3RvcCgpCi17Ci0gICAgZGlzY29ubmVjdCgpOwotICAgIG1fY2FsbGJhY2sgPSBudWxscHRy
OwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoUkVTSVpF
X09CU0VSVkVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5oCmluZGV4IGU0MTU2ZjMx
ZTMwZS4uZjQ3ZDRhYmM5OTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6
ZU9ic2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5oCkBA
IC0yNywyNSArMjcsMjQgQEAKIAogI2lmIEVOQUJMRShSRVNJWkVfT0JTRVJWRVIpCiAKLSNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJHQ1JlYWNoYWJsZVJlZi5oIgorI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJSZXNpemVPYnNlcnZhdGlvbi5oIgogI2luY2x1
ZGUgIlJlc2l6ZU9ic2VydmVyQ2FsbGJhY2suaCIKKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsKLWNsYXNzIEVsZW1lbnQ7CiAKIHN0
cnVjdCBSZXNpemVPYnNlcnZlckRhdGEgewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9D
QVRFRDsKICAgICBWZWN0b3I8V2Vha1B0cjxSZXNpemVPYnNlcnZlcj4+IG9ic2VydmVyczsKIH07
CiAKLWNsYXNzIFJlc2l6ZU9ic2VydmVyIDogcHVibGljIFJlZkNvdW50ZWQ8UmVzaXplT2JzZXJ2
ZXI+LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVzaXpl
T2JzZXJ2ZXI+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK2NsYXNzIFJlc2l6ZU9i
c2VydmVyIDogcHVibGljIFJlZkNvdW50ZWQ8UmVzaXplT2JzZXJ2ZXI+LCBwdWJsaWMgQ2FuTWFr
ZVdlYWtQdHI8UmVzaXplT2JzZXJ2ZXI+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFJlc2l6
ZU9ic2VydmVyPiBjcmVhdGUoRG9jdW1lbnQmLCBSZWY8UmVzaXplT2JzZXJ2ZXJDYWxsYmFjaz4m
Jik7CiAgICAgflJlc2l6ZU9ic2VydmVyKCk7CkBAIC02NiwxNCArNjUsMjAgQEAgcHVibGljOgog
CiAgICAgUmVzaXplT2JzZXJ2ZXJDYWxsYmFjayogY2FsbGJhY2tDb25jdXJyZW50bHkoKSB7IHJl
dHVybiBtX2NhbGxiYWNrLmdldCgpOyB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgorICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoVmlzaXRvciYgdmlzaXRvcikK
KyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX29ic2VydmF0aW9uVGFyZ2V0c0xvY2sg
fTsKKyAgICAgICAgZm9yIChhdXRvJiB0YXJnZXQgOiBtX29ic2VydmF0aW9uVGFyZ2V0cykgewor
ICAgICAgICAgICAgaWYgKHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHRhcmdldC5nZXQoKS0+
b3BhcXVlUm9vdCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiBwcml2YXRlOgogICAgIFJlc2l6ZU9ic2Vy
dmVyKERvY3VtZW50JiwgUmVmPFJlc2l6ZU9ic2VydmVyQ2FsbGJhY2s+JiYpOwogCi0gICAgLy8g
QWN0aXZlRE9NT2JqZWN0LgotICAgIGJvb2wgdmlydHVhbEhhc1BlbmRpbmdBY3Rpdml0eSgpIGNv
bnN0IG92ZXJyaWRlOwotICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKLQogICAgIGJvb2wgcmVtb3Zl
VGFyZ2V0KEVsZW1lbnQmKTsKICAgICB2b2lkIHJlbW92ZUFsbFRhcmdldHMoKTsKICAgICBib29s
IHJlbW92ZU9ic2VydmF0aW9uKGNvbnN0IEVsZW1lbnQmKTsKQEAgLTgxLDkgKzg2LDExIEBAIHBy
aXZhdGU6CiAgICAgV2Vha1B0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICBSZWZQdHI8UmVz
aXplT2JzZXJ2ZXJDYWxsYmFjaz4gbV9jYWxsYmFjazsKICAgICBWZWN0b3I8UmVmPFJlc2l6ZU9i
c2VydmF0aW9uPj4gbV9vYnNlcnZhdGlvbnM7CisgICAgVmVjdG9yPFdlYWtQdHI8RWxlbWVudD4+
IG1fb2JzZXJ2YXRpb25UYXJnZXRzIFdURl9HVUFSREVEX0JZX0xPQ0sobV9vYnNlcnZhdGlvblRh
cmdldHNMb2NrKTsKKyAgICBMb2NrIG1fb2JzZXJ2YXRpb25UYXJnZXRzTG9jazsKIAogICAgIFZl
Y3RvcjxSZWY8UmVzaXplT2JzZXJ2YXRpb24+PiBtX2FjdGl2ZU9ic2VydmF0aW9uczsKLSAgICBW
ZWN0b3I8R0NSZWFjaGFibGVSZWY8RWxlbWVudD4+IG1fcGVuZGluZ1RhcmdldHM7CisgICAgVmVj
dG9yPEdDUmVhY2hhYmxlUmVmPEVsZW1lbnQ+PiBtX2FjdGl2ZU9ic2VydmF0aW9uVGFyZ2V0czsK
ICAgICBib29sIG1faGFzU2tpcHBlZE9ic2VydmF0aW9ucyB7IGZhbHNlIH07CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuaWRsCmluZGV4IDA1ZTg0N2Q5MDA4My4uM2JmZjYz
OGVmNzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmlk
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmlkbApAQCAtMjYsMTEg
KzI2LDEyIEBACiAvLyBodHRwczovL3dpY2cuZ2l0aHViLmlvL1Jlc2l6ZU9ic2VydmVyLwogCiBb
Ci0gICAgQWN0aXZlRE9NT2JqZWN0LAogICAgIENvbmRpdGlvbmFsPVJFU0laRV9PQlNFUlZFUiwK
ICAgICBFbmFibGVkQnlTZXR0aW5nPVJlc2l6ZU9ic2VydmVyLAogICAgIEV4cG9zZWQ9V2luZG93
LAogICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAorICAgIEN1c3RvbUlzUmVhY2hhYmxlLAorICAg
IEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUKIF0gaW50ZXJmYWNlIFJlc2l6ZU9ic2VydmVyIHsK
ICAgICBbQ2FsbFdpdGg9RG9jdW1lbnRdIGNvbnN0cnVjdG9yKFJlc2l6ZU9ic2VydmVyQ2FsbGJh
Y2sgY2FsbGJhY2spOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433204</attachid>
            <date>2021-07-09 02:19:06 -0700</date>
            <delta_ts>2021-07-09 12:52:52 -0700</delta_ts>
            <desc>Fixes the bug</desc>
            <filename>bug-227194-20210709021905.patch</filename>
            <type>text/plain</type>
            <size>42107</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5NzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmM1MWI3OWE4YWFhNjIz
ZGY4NTRmYzBkODg3MWFkN2ZjMDgyODA3Ny4uM2Q3OTdmNzI5NzhjOWEyMWJkYzhjMDIwOGExMGZk
YjQ5Mzg1OTczMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDIxLTA3LTA5ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlc2l6ZU9ic2VydmVyIC8g
SW50ZXJzZWN0aW9uT2JzZXJ2ZXIgbWVtb3J5IGxlYWsgb24gZGV0YWNoZWQgJiBvdXQgb2YgcmVm
ZXJlbmNlIGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjcxOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc5ODM5ODUxPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBtZW1vcnkgbGVh
ayB3YXMgY2F1c2VkIGJ5IFJlc2l6ZU9ic2VydmVyIGFuZCBJbnRlcnNlY3Rpb25PYnNlcnZlciBr
ZWVwaW5nIHRoZWlyIHJlc3BlY3RpdmUKKyAgICAgICAgSlMgd3JhcHBlciBvYmplY3RzIGFsaXZl
IHNvIGxvbmcgYXMgdGhlcmUgYXJlIHNvbWUgb2JzZXJ2ZWQgZWxlbWVudHMgYnkgaGF2aW5nIHBl
bmRpbmcKKyAgICAgICAgYWN0aXZpdHkgYXMgQWN0aXZlRE9NT2JqZWN0cy4gVGhpcyBpcyBub3Qg
dGhlIHJpZ2h0IEdDIG1vZGVsIGZvciB0aGVzZSBKUyB3cmFwcGVyIG9iamVjdHMKKyAgICAgICAg
c2luY2UgdGhlcmUgaXMgbm8gb2J2aW91cyBlbmQgdG8gdGhlc2UgYWN0aXZpdGllcy4gU28gbG9u
ZyBhcyB0aGUgb2JzZXJ2ZWQgbm9kZXMgYXJlIGFsaXZlLAorICAgICAgICBSZXNpemVPYnNlcnZl
ciBhbmQgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgbWF5IGdldCBuZXcgb2JzZXJ2YXRpb24gZW50cmll
cyBxdWV1ZWQgbGF0ZXIuCisKKyAgICAgICAgVG8gYWRkcmVzcyB0aGlzIGlzc3VlLCB0aGlzIHBh
dGNoIHJld29ya3MgdGhlIHdheSBSZXNpemVPYnNlcnZlciBhbmQgSW50ZXJzZWN0aW9uT2JzZXJ2
ZXIga2VlcAorICAgICAgICB0aGVpciBKUyB3cmFwcGVycyBhbGl2ZS4gTmFtZWx5LCB0aGV5J3Jl
IG5vIGxvbmdlciBBY3RpdmVET01PYmplY3RzLiBJbnN0ZWFkLCB0aGVpciBKUyB3cmFwcGVycwor
ICAgICAgICB3b3VsZCB1c2UgdGhlaXIgcmVzcGVjdGl2ZSBvYnNlcnZlZCBub2RlcyBhcyBvcGFx
dWUgcm9vdHMuIGkuZS4gc28gbG9uZyBhcyBhbnkgb2YgdGhlIG9ic2VydmVkCisgICAgICAgIG5v
ZGVzIGFyZSBrZXB0IGFsaXZlIGJ5IEdDLCB0aGVuIGl0cyBvYnNlcnZlcidzIEpTIHdyYXBwZXIg
aXMga2VwdCBhbGl2ZS4KKworICAgICAgICBSZXNpemVPYnNlcnZlciBoYWQgYW4gYWRkaXRpb25h
bCBidWcgdGhhdCBldmVyeSBvYnNlcnZlZCBub2RlIHdhcyBrZXB0IHVzaW5nIEdDUmVhY2hhYmxl
UmVmLAorICAgICAgICB3aGljaCBvYnZpb3VzbHkgbGVha2VkIGV2ZXJ5IG9ic2VydmVkIG5vZGUg
dW50aWwgdGhlIG9ic2VydmF0aW9ucyB3ZXJlIGV4cGxpY2l0bHkgY2xlYXJlZC4KKyAgICAgICAg
VGhpcyBwYXRjaCBtYWtlcyBvbmx5IHRoZSB0YXJnZXQgZWxlbWVudHMgb2YgdGhlIGFjdGl2ZSBv
YnNlcnZhdGlvbnMgKGkuZS4gdGhlcmUgYXJlIGVudHJpZXMKKyAgICAgICAgdG8gYmUgZGVsaXZl
cmVkIHRvIHRoZSBvYnNlcnZlciBjYWxsYmFjaykgYXJlIGtlcHQgYWxpdmUgd2l0aCBHQ1JlYWNo
YWJsZVJlZiBhcyBkb25lIHdpdGgKKyAgICAgICAgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgYW5kIE11
dGF0aW9uT2JzZXJ2ZXIuCisKKyAgICAgICAgRmluYWxseSwgdGhpcyBwYXRjaCBmaXhlcyB0aGUg
YnVnIHRoYXQgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgd2Fzbid0IGtlZXBpbmcgaXRzIHJvb3Qgbm9k
ZSBhbGl2ZS4KKyAgICAgICAgV2UgZXZlbiBoYWQgYSB0ZXN0IHdoaWNoIHdhcyB0ZXN0aW5nIHRo
aXMgZXJyb25lb3VzbHkgYmVoYXZpb3IuIFRoZSB0ZXN0IGhhcyBiZWVuIHJld3JpdHRlbiB0bwor
ICAgICAgICBleHBlY3QgdGhlIG5ldyBiZWhhdmlvci4KKworICAgICAgICBUZXN0czogaW50ZXJz
ZWN0aW9uLW9ic2VydmVyL2ludGVyc2VjdGlvbi1vYnNlcnZlci1zaG91bGQtbm90LWxlYWstb2Jz
ZXJ2ZWQtbm9kZXMuaHRtbAorICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uLW9ic2VydmVyL3Jv
b3QtZWxlbWVudC1kZWxldGVkLmh0bWwKKyAgICAgICAgICAgICAgIHJlc2l6ZS1vYnNlcnZlci9y
ZXNpemUtb2JzZXJ2ZXItc2hvdWxkLW5vdC1sZWFrLW9ic2VydmVkLW5vZGVzLmh0bWwKKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNJbnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4pOiBBZGQgdGhlIHJvb3Qgbm9kZSBhcyBhbiBvcGFxdWUgcm9vdC4KKyAgICAgICAgVGhp
cyBoYXMgYW4gZWZmZWN0IG9mIGtlZXBpbmcgdGhlIHJvb3Qgbm9kZSBhbGl2ZSBzbyBsb25nIGFz
IEludGVyc2VjdGlvbk9ic2VydmVyIGlzIGFsaXZlLgorICAgICAgICAoV2ViQ29yZTo6SlNJbnRl
cnNlY3Rpb25PYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6IEFkZGVk
LgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNSZXNpemVPYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyk6IEFkZGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlSW50ZXJzZWN0aW9uT2JzZXJ2YXRpb25zKToKKyAgICAg
ICAgKiBodG1sL0xhenlMb2FkRnJhbWVPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXp5TG9hZEZyYW1lT2JzZXJ2ZXI6OmlzT2JzZXJ2ZWQgY29uc3QpOgorICAgICAgICAqIGh0bWwv
TGF6eUxvYWRJbWFnZU9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxhenlMb2FkSW1h
Z2VPYnNlcnZlcjo6aXNPYnNlcnZlZCBjb25zdCk6CisgICAgICAgICogcGFnZS9JbnRlcnNlY3Rp
b25PYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3Rpb25PYnNlcnZlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVyc2VjdGlvbk9ic2VydmVyOjpJbnRlcnNl
Y3Rpb25PYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3Rpb25PYnNlcnZlcjo6
fkludGVyc2VjdGlvbk9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVyc2VjdGlvbk9i
c2VydmVyOjppc09ic2VydmluZyBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJzZWN0aW9uT2JzZXJ2ZXI6Om9ic2VydmUpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0
aW9uT2JzZXJ2ZXI6OnZpcnR1YWxIYXNQZW5kaW5nQWN0aXZpdHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OmFjdGl2ZURPTU9iamVjdE5h
bWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9uT2JzZXJ2
ZXI6OnN0b3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9uT2JzZXJ2
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzIGNvbnN0KTogQWRkZWQuCisgICAgICAgICog
cGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0
aW9uT2JzZXJ2ZXI6OnJvb3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9u
T2JzZXJ2ZXI6Om9ic2VydmF0aW9uVGFyZ2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcnNlY3Rpb25PYnNlcnZlcjo6aGFzT2JzZXJ2YXRpb25UYXJnZXRzIGNvbnN0KToKKyAgICAg
ICAgKiBwYWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmlkbDoKKyAgICAgICAgKiBwYWdlL1Jlc2l6
ZU9ic2VydmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc2l6ZU9ic2VydmF0aW9uOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzaXplT2JzZXJ2YXRpb246OlJlc2l6ZU9ic2Vy
dmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc2l6ZU9ic2VydmF0aW9uOjp0YXJnZXRFbGVt
ZW50RGVwdGggY29uc3QpOgorICAgICAgICAqIHBhZ2UvUmVzaXplT2JzZXJ2YXRpb24uaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc2l6ZU9ic2VydmF0aW9uOjp0YXJnZXQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzaXplT2JzZXJ2YXRpb24pOiBSZW5hbWVkIG1fcGVuZGluZ1RhcmdldHMg
dG8gbV9hY3RpdmVPYnNlcnZhdGlvblRhcmdldHMgdG8gcmVmbGVjdAorICAgICAgICB0aGUgbmV3
IHNlbWFudGljcy4KKyAgICAgICAgKiBwYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlc2l6ZU9ic2VydmVyOjpSZXNpemVPYnNlcnZlcik6CisgICAgICAgIChXZWJD
b3JlOjpSZXNpemVPYnNlcnZlcjo6b2JzZXJ2ZSk6IERvbid0IHN0b3JlIHRoZSBuZXcgb2JzZXJ2
YXRpb24gdGFyZ2V0IHdpdGggR0NSZWFjaGFibGVSZWYgYXMKKyAgICAgICAgdGhhdCB3b3VsZCBy
ZXN1bHQgaW4gYW4gaW1tZWRpYXRlIGxlYWsgb2YgdGhpcyBlbGVtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6UmVzaXplT2JzZXJ2ZXI6OmdhdGhlck9ic2VydmF0aW9ucyk6IE5vdyB0aGF0IHdlIGhh
dmUgYW4gYWN0aXZlIG9ic2VydmF0aW9uIChpLmUuIHRoZXJlCisgICAgICAgIGlzIGFuIGVudHJ5
IHRvIGJlIGRlbGl2ZXJlZCB0byB0aGUgSlMgY2FsbGJhY2spLCBzdG9yZSB0aGUgdGFyZ2V0IGVs
ZW1lbnQgdXNpbmcgR0NSZWFjaGFibGVSZWYuCisgICAgICAgIFRoaXMga2VlcHMgdGhlIEpTIHdy
YXBwZXIgb2YgdGhpcyB0YXJnZXQgZWxlbWVudCBhbGl2ZSBiZXR3ZWVuIG5vdyBhbmQgd2hlbiB0
aGUgSlMgY2FsbGJhY2sgaXMKKyAgICAgICAgbm90aWZpZWQgb2YgdGhpcyBlbGVtZW50J3MgcmVz
aXplLiBXaXRob3V0IHRoaXMgR0NSZWFjaGFibGVSZWYsIEpTIHdyYXBwZXIgb2YgdGhlIGVsZW1l
bnQgY2FuIGJlCisgICAgICAgIGVycm9uZW91c2x5IGNvbGxlY3RlZCB3aGVuIHRoZXJlIGlzIG5v
IEpTIHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBhbmQgdGhlIGVsZW1lbnQgaXMgbm8gbG9uZ2Vy
IGluCisgICAgICAgIGFueSBsaXZlIGRvY3VtZW50LiBOb3RlIHRoYXQgdGhpcyBHQyBiZWhhdmlv
ciBpcyBhbHJlYWR5IHRlc3RlZCBieSBleGlzdGluZyB0ZXN0cy4gVGhpcyBwYXRjaAorICAgICAg
ICBzaW1wbHkgZGVsYXlzIHRoZSB1c2Ugb2YgR0NSZWFjaGFibGVSZWYgZnJvbSB3aGVuIFJlc2l6
ZU9ic2VydmVyIHN0YXJ0ZWQgb2JzZXJ2aW5nIHRoaXMgZWxlbWVudAorICAgICAgICB0byB3aGVu
IHdlIGNyZWF0ZWQgYW4gYWN0aXZlIG9ic2VydmF0aW9uIGZvciB0aGUgZWxlbWVudDsgdGhpcyBp
cyBiZWNhdXNlIEdDUmVhY2hhYmxlUmVmIGxpa2UKKyAgICAgICAgYSBwZW5kaW5nIGFjdGl2aXR5
IG9mIEFjdGl2ZURPTU9iamVjdCBpcyBvbmx5IGFwcHJvcHJpYXRlIHdoZW4gdGhlcmUgaXMgYSBk
ZWZpbml0ZSBlbmQgdG8gaXQuCisgICAgICAgIChXZWJDb3JlOjpSZXNpemVPYnNlcnZlcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlc2l6ZU9ic2VydmVyOjpyZW1vdmVBbGxUYXJnZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c2l6ZU9ic2VydmVyOjpyZW1vdmVPYnNlcnZhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNp
emVPYnNlcnZlcjo6dmlydHVhbEhhc1BlbmRpbmdBY3Rpdml0eSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZXNpemVPYnNlcnZlcjo6YWN0aXZlRE9NT2JqZWN0TmFtZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNpemVPYnNlcnZlcjo6c3RvcCk6IERl
bGV0ZWQuCisgICAgICAgICogcGFnZS9SZXNpemVPYnNlcnZlci5oOgorICAgICAgICAqIHBhZ2Uv
UmVzaXplT2JzZXJ2ZXIuaWRsOgorCiAyMDIxLTA3LTA3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgT3VyIHN0cnVjdHVyZWQgY2xvbmluZyBpbXBsZW1lbnRhdGlv
biBkb2VzIG5vdCBlbmNvZGUgYWxsIG9mIFJlZ0V4cCdzIGZsYWdzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20u
Y3BwCmluZGV4IDdjMWI1ZjFhMWFhNWQ2MzgzZTdjMjExNDk0ZWJkMjQ3ZTY1YjA2ZDQuLjA1NjA4
MTA5YjViNzFhYmNhYmIyNmQ0MTk3YWQ1YjNiMDliMzQ4MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20u
Y3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNJ
bnRlcnNlY3Rpb25PYnNlcnZlci5oIgogCisjaW5jbHVkZSAiSlNOb2RlQ3VzdG9tLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0zNiw4ICszNywxOSBAQCB2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIGNhbGxi
YWNrID0gd3JhcHBlZCgpLmNhbGxiYWNrQ29uY3VycmVudGx5KCkpCiAgICAgICAgIGNhbGxiYWNr
LT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJv
b3Qod3JhcHBlZCgpLnJvb3QoKSkpOwogfQogCiBERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElM
RFJFTihKU0ludGVyc2VjdGlvbk9ic2VydmVyKTsKIAorYm9vbCBKU0ludGVyc2VjdGlvbk9ic2Vy
dmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKipyZWFzb24pCit7CisgICAgaWYgKGpzQ2FzdDxKU0ludGVyc2VjdGlvbk9ic2Vy
dmVyKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpLT53cmFwcGVkKCkuaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHModmlzaXRvcikpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCisg
ICAgICAgICAgICAqcmVhc29uID0gIlJlYWNoYWJsZSBmcm9tIG9ic2VydmVkIG5vZGVzIjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAppbmRleCAzNGQ3NzkzYjBlOTQxMDkyZGY4N2ViZmEw
NTIwYjQzYmVhMmM5ZTdhLi5hNjIwNTEyOWViZTg2NzQ3MmQ2YTdjNTkwNTE3YmJmNTlkZDVlZDI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVy
Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2Vy
dmVyQ3VzdG9tLmNwcApAQCAtNDEsNCArNDEsMTQgQEAgdm9pZCBKU1Jlc2l6ZU9ic2VydmVyOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogCiBERUZJTkVfVklTSVRf
QURESVRJT05BTF9DSElMRFJFTihKU1Jlc2l6ZU9ic2VydmVyKTsKIAorYm9vbCBKU1Jlc2l6ZU9i
c2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKipyZWFzb24pCit7CisgICAgaWYgKGpzQ2FzdDxKU1Jlc2l6ZU9ic2VydmVy
Kj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpLT53cmFwcGVkKCkuaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHModmlzaXRvcikpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCisgICAg
ICAgICAgICAqcmVhc29uID0gIlJlYWNoYWJsZSBmcm9tIG9ic2VydmVkIG5vZGVzIjsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggM2NlODYyMGQ0Mjk0ZTg5
NjcyNzEyNzY1MzRhNjc4NDM1MjFhZjljNi4uOTI2OWJlOTc0YjUzM2Q3ZmM4NjUyYzY0M2UwNDRi
MGI4ZGFhMTQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC03OTExLDcgKzc5MTEsNyBA
QCB2b2lkIERvY3VtZW50Ojp1cGRhdGVJbnRlcnNlY3Rpb25PYnNlcnZhdGlvbnMoKQogICAgICAg
ICBhdXRvIHRpbWVzdGFtcCA9IG9ic2VydmVyLT5ub3dUaW1lc3RhbXAoKTsKICAgICAgICAgaWYg
KCF0aW1lc3RhbXApCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yIChFbGVtZW50
KiB0YXJnZXQgOiBvYnNlcnZlci0+b2JzZXJ2YXRpb25UYXJnZXRzKCkpIHsKKyAgICAgICAgZm9y
IChhdXRvJiB0YXJnZXQgOiBvYnNlcnZlci0+b2JzZXJ2YXRpb25UYXJnZXRzKCkpIHsKICAgICAg
ICAgICAgIGF1dG8mIHRhcmdldFJlZ2lzdHJhdGlvbnMgPSB0YXJnZXQtPmludGVyc2VjdGlvbk9i
c2VydmVyRGF0YUlmRXhpc3RzKCktPnJlZ2lzdHJhdGlvbnM7CiAgICAgICAgICAgICBhdXRvIGlu
ZGV4ID0gdGFyZ2V0UmVnaXN0cmF0aW9ucy5maW5kTWF0Y2hpbmcoW29ic2VydmVyXShhdXRvJiBy
ZWdpc3RyYXRpb24pIHsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVnaXN0cmF0aW9uLm9ic2Vy
dmVyLmdldCgpID09IG9ic2VydmVyOwpAQCAtNzk2OCw3ICs3OTY4LDcgQEAgdm9pZCBEb2N1bWVu
dDo6dXBkYXRlSW50ZXJzZWN0aW9uT2JzZXJ2YXRpb25zKCkKICAgICAgICAgICAgICAgICAgICAg
eyB0YXJnZXRCb3VuZGluZ0NsaWVudFJlY3QueCgpLCB0YXJnZXRCb3VuZGluZ0NsaWVudFJlY3Qu
eSgpLCB0YXJnZXRCb3VuZGluZ0NsaWVudFJlY3Qud2lkdGgoKSwgdGFyZ2V0Qm91bmRpbmdDbGll
bnRSZWN0LmhlaWdodCgpIH0sCiAgICAgICAgICAgICAgICAgICAgIHsgY2xpZW50SW50ZXJzZWN0
aW9uUmVjdC54KCksIGNsaWVudEludGVyc2VjdGlvblJlY3QueSgpLCBjbGllbnRJbnRlcnNlY3Rp
b25SZWN0LndpZHRoKCksIGNsaWVudEludGVyc2VjdGlvblJlY3QuaGVpZ2h0KCkgfSwKICAgICAg
ICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uUmF0aW8sCi0gICAgICAgICAgICAgICAgICAgIHRh
cmdldCwKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmdldCgpLAogICAgICAgICAgICAgICAg
ICAgICB0aHJlc2hvbGRJbmRleCA+IDAsCiAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAg
ICAgICAgIG5lZWROb3RpZnkgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9MYXp5TG9hZEZyYW1lT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9MYXp5TG9h
ZEZyYW1lT2JzZXJ2ZXIuY3BwCmluZGV4IDdjMmJhMTVhNTE0ZTQzZGQ5NzIyNzUxMDllM2RiOTQy
ZTg1MjMyYjYuLjc0MGZlYTE4NTNlNDQ5Y2Y0NDFkZmU1YWJhZGMwZGU1MzFkNTUxOWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGF6eUxvYWRGcmFtZU9ic2VydmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0xhenlMb2FkRnJhbWVPYnNlcnZlci5jcHAKQEAgLTEwMyw3
ICsxMDMsNyBAQCBJbnRlcnNlY3Rpb25PYnNlcnZlciogTGF6eUxvYWRGcmFtZU9ic2VydmVyOjpp
bnRlcnNlY3Rpb25PYnNlcnZlcihEb2N1bWVudCYgZG9jdQogCiBib29sIExhenlMb2FkRnJhbWVP
YnNlcnZlcjo6aXNPYnNlcnZlZChFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewotICAgIHJldHVy
biBtX29ic2VydmVyICYmIG1fb2JzZXJ2ZXItPm9ic2VydmF0aW9uVGFyZ2V0cygpLmNvbnRhaW5z
KCZlbGVtZW50KTsKKyAgICByZXR1cm4gbV9vYnNlcnZlciAmJiBtX29ic2VydmVyLT5pc09ic2Vy
dmluZyhlbGVtZW50KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9M
YXp5TG9hZEltYWdlT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9MYXp5TG9hZElt
YWdlT2JzZXJ2ZXIuY3BwCmluZGV4IGY2YzY0MjBkY2I3N2Q1M2M2YmEwZTIyM2YzYmNhMDQ3ZGM0
ZTk4ZWQuLjE0ZjJkZWZjMjI2ZmIwZmIwM2MyNzU4NmU2YzE3ODlmNzFmN2M5NDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGF6eUxvYWRJbWFnZU9ic2VydmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0xhenlMb2FkSW1hZ2VPYnNlcnZlci5jcHAKQEAgLTk1LDcgKzk1
LDcgQEAgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIqIExhenlMb2FkSW1hZ2VPYnNlcnZlcjo6aW50ZXJz
ZWN0aW9uT2JzZXJ2ZXIoRG9jdW1lbnQmIGRvY3UKIAogYm9vbCBMYXp5TG9hZEltYWdlT2JzZXJ2
ZXI6OmlzT2JzZXJ2ZWQoRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9v
YnNlcnZlciAmJiBtX29ic2VydmVyLT5vYnNlcnZhdGlvblRhcmdldHMoKS5jb250YWlucygmZWxl
bWVudCk7CisgICAgcmV0dXJuIG1fb2JzZXJ2ZXIgJiYgbV9vYnNlcnZlci0+aXNPYnNlcnZpbmco
ZWxlbWVudCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNl
cnZlci5jcHAKaW5kZXggMTRiYWVhMGRmZTQzNTZiYjk3OTU4ZWY3MzRkMGJjM2RkZTM2YTc5YS4u
YzVlN2ZkMmEwZjA3NjA4YmFkMDYyYWZjZGMxZTNiODJiZGMwZjU5NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNp
bmNsdWRlICJJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXJFbnRyeS5oIgogI2luY2x1ZGUgIlBlcmZvcm1hbmNlLmgiCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg2LDcgKzg3LDcgQEAg
c3RhdGljIEV4Y2VwdGlvbk9yPExlbmd0aEJveD4gcGFyc2VSb290TWFyZ2luKFN0cmluZyYgcm9v
dE1hcmdpbikKIAogRXhjZXB0aW9uT3I8UmVmPEludGVyc2VjdGlvbk9ic2VydmVyPj4gSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXI6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIFJlZjxJbnRlcnNlY3Rp
b25PYnNlcnZlckNhbGxiYWNrPiYmIGNhbGxiYWNrLCBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6SW5p
dCYmIGluaXQpCiB7Ci0gICAgQ29udGFpbmVyTm9kZSogcm9vdCA9IG51bGxwdHI7CisgICAgUmVm
UHRyPENvbnRhaW5lck5vZGU+IHJvb3Q7CiAgICAgaWYgKGluaXQucm9vdCkgewogICAgICAgICBX
VEY6OnN3aXRjaE9uKCppbml0LnJvb3QsIFsmcm9vdF0gKFJlZlB0cjxFbGVtZW50PiBlbGVtZW50
KSB7CiAgICAgICAgICAgICByb290ID0gZWxlbWVudC5nZXQoKTsKQEAgLTExMiwzNyArMTEzLDM2
IEBAIEV4Y2VwdGlvbk9yPFJlZjxJbnRlcnNlY3Rpb25PYnNlcnZlcj4+IEludGVyc2VjdGlvbk9i
c2VydmVyOjpjcmVhdGUoRG9jdW1lbnQmIGRvCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgUmFuZ2VFcnJvciwgIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ0ludGVyc2VjdGlvbk9ic2VydmVy
JzogYWxsIHRocmVzaG9sZHMgbXVzdCBsaWUgaW4gdGhlIHJhbmdlIFswLjAsIDEuMF0uIiB9Owog
ICAgIH0KIAotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGRv
Y3VtZW50LCBXVEZNb3ZlKGNhbGxiYWNrKSwgcm9vdCwgcm9vdE1hcmdpbk9yRXhjZXB0aW9uLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpLCBXVEZNb3ZlKHRocmVzaG9sZHMpKSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZG9jdW1lbnQsIFdURk1vdmUoY2FsbGJh
Y2spLCByb290LmdldCgpLCByb290TWFyZ2luT3JFeGNlcHRpb24ucmVsZWFzZVJldHVyblZhbHVl
KCksIFdURk1vdmUodGhyZXNob2xkcykpKTsKIH0KIAogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6Oklu
dGVyc2VjdGlvbk9ic2VydmVyKERvY3VtZW50JiBkb2N1bWVudCwgUmVmPEludGVyc2VjdGlvbk9i
c2VydmVyQ2FsbGJhY2s+JiYgY2FsbGJhY2ssIENvbnRhaW5lck5vZGUqIHJvb3QsIExlbmd0aEJv
eCYmIHBhcnNlZFJvb3RNYXJnaW4sIFZlY3Rvcjxkb3VibGU+JiYgdGhyZXNob2xkcykKLSAgICA6
IEFjdGl2ZURPTU9iamVjdChjYWxsYmFjay0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAg
ICwgbV9yb290KHJvb3QpCisgICAgOiBtX3Jvb3QobWFrZVdlYWtQdHIocm9vdCkpCiAgICAgLCBt
X3Jvb3RNYXJnaW4oV1RGTW92ZShwYXJzZWRSb290TWFyZ2luKSkKICAgICAsIG1fdGhyZXNob2xk
cyhXVEZNb3ZlKHRocmVzaG9sZHMpKQogICAgICwgbV9jYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNr
KSkKIHsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KG1fcm9vdCkpIHsKLSAgICAgICAgYXV0byYgb2Jz
ZXJ2ZXJEYXRhID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCptX3Jvb3QpLmVuc3VyZUludGVyc2VjdGlv
bk9ic2VydmVyRGF0YSgpOworICAgIGlmIChpczxEb2N1bWVudD4ocm9vdCkpIHsKKyAgICAgICAg
YXV0byYgb2JzZXJ2ZXJEYXRhID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpyb290KS5lbnN1cmVJbnRl
cnNlY3Rpb25PYnNlcnZlckRhdGEoKTsKICAgICAgICAgb2JzZXJ2ZXJEYXRhLm9ic2VydmVycy5h
cHBlbmQobWFrZVdlYWtQdHIodGhpcykpOwotICAgIH0gZWxzZSBpZiAobV9yb290KSB7Ci0gICAg
ICAgIEFTU0VSVChpczxFbGVtZW50PihtX3Jvb3QpKTsKLSAgICAgICAgYXV0byYgb2JzZXJ2ZXJE
YXRhID0gZG93bmNhc3Q8RWxlbWVudD4oKm1fcm9vdCkuZW5zdXJlSW50ZXJzZWN0aW9uT2JzZXJ2
ZXJEYXRhKCk7CisgICAgfSBlbHNlIGlmIChyb290KSB7CisgICAgICAgIEFTU0VSVChpczxFbGVt
ZW50Pihyb290KSk7CisgICAgICAgIGF1dG8mIG9ic2VydmVyRGF0YSA9IGRvd25jYXN0PEVsZW1l
bnQ+KCpyb290KS5lbnN1cmVJbnRlcnNlY3Rpb25PYnNlcnZlckRhdGEoKTsKICAgICAgICAgb2Jz
ZXJ2ZXJEYXRhLm9ic2VydmVycy5hcHBlbmQobWFrZVdlYWtQdHIodGhpcykpOwogICAgIH0gZWxz
ZSBpZiAoYXV0byogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpKQogICAgICAgICBtX2ltcGxpY2l0
Um9vdERvY3VtZW50ID0gbWFrZVdlYWtQdHIoZnJhbWUtPm1haW5GcmFtZSgpLmRvY3VtZW50KCkp
OwogCiAgICAgc3RkOjpzb3J0KG1fdGhyZXNob2xkcy5iZWdpbigpLCBtX3RocmVzaG9sZHMuZW5k
KCkpOwotICAgIHN1c3BlbmRJZk5lZWRlZCgpOwogfQogCiBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6
fkludGVyc2VjdGlvbk9ic2VydmVyKCkKIHsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KG1fcm9vdCkp
IHsKLSAgICAgICAgZG93bmNhc3Q8RG9jdW1lbnQ+KCptX3Jvb3QpLmludGVyc2VjdGlvbk9ic2Vy
dmVyRGF0YUlmRXhpc3RzKCktPm9ic2VydmVycy5yZW1vdmVGaXJzdCh0aGlzKTsKLSAgICB9IGVs
c2UgaWYgKG1fcm9vdCkgewotICAgICAgICBBU1NFUlQoaXM8RWxlbWVudD4obV9yb290KSk7Ci0g
ICAgICAgIGRvd25jYXN0PEVsZW1lbnQ+KCptX3Jvb3QpLmludGVyc2VjdGlvbk9ic2VydmVyRGF0
YUlmRXhpc3RzKCktPm9ic2VydmVycy5yZW1vdmVGaXJzdCh0aGlzKTsKKyAgICBSZWZQdHIgcm9v
dCA9IG1fcm9vdC5nZXQoKTsKKyAgICBpZiAoaXM8RG9jdW1lbnQ+KHJvb3QpKSB7CisgICAgICAg
IGRvd25jYXN0PERvY3VtZW50Pigqcm9vdCkuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJEYXRhSWZFeGlz
dHMoKS0+b2JzZXJ2ZXJzLnJlbW92ZUZpcnN0KHRoaXMpOworICAgIH0gZWxzZSBpZiAocm9vdCkg
eworICAgICAgICBBU1NFUlQoaXM8RWxlbWVudD4ocm9vdCkpOworICAgICAgICBkb3duY2FzdDxF
bGVtZW50Pigqcm9vdCkuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJEYXRhSWZFeGlzdHMoKS0+b2JzZXJ2
ZXJzLnJlbW92ZUZpcnN0KHRoaXMpOwogICAgIH0KICAgICBkaXNjb25uZWN0KCk7CiB9CkBAIC0x
NTcsMTQgKzE1NywyMiBAQCBTdHJpbmcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnJvb3RNYXJnaW4o
KSBjb25zdAogICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKK2Jvb2wg
SW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OmlzT2JzZXJ2aW5nKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb2JzZXJ2YXRpb25UYXJnZXRzLmZpbmRNYXRjaGluZyhb
Jl0oYXV0byYgdGFyZ2V0KSB7CisgICAgICAgIHJldHVybiB0YXJnZXQuZ2V0KCkgPT0gJmVsZW1l
bnQ7CisgICAgfSkgIT0gbm90Rm91bmQ7Cit9CisKIHZvaWQgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6
Om9ic2VydmUoRWxlbWVudCYgdGFyZ2V0KQogewotICAgIGlmICghdHJhY2tpbmdEb2N1bWVudCgp
IHx8ICFtX2NhbGxiYWNrIHx8IG1fb2JzZXJ2YXRpb25UYXJnZXRzLmNvbnRhaW5zKCZ0YXJnZXQp
KQorICAgIGlmICghdHJhY2tpbmdEb2N1bWVudCgpIHx8ICFtX2NhbGxiYWNrIHx8IGlzT2JzZXJ2
aW5nKHRhcmdldCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHRhcmdldC5lbnN1cmVJbnRlcnNl
Y3Rpb25PYnNlcnZlckRhdGEoKS5yZWdpc3RyYXRpb25zLmFwcGVuZCh7IG1ha2VXZWFrUHRyKHRo
aXMpLCBzdGQ6Om51bGxvcHQgfSk7CiAgICAgYm9vbCBoYWRPYnNlcnZhdGlvblRhcmdldHMgPSBo
YXNPYnNlcnZhdGlvblRhcmdldHMoKTsKLSAgICBtX29ic2VydmF0aW9uVGFyZ2V0cy5hcHBlbmQo
JnRhcmdldCk7CisgICAgbV9vYnNlcnZhdGlvblRhcmdldHMuYXBwZW5kKG1ha2VXZWFrUHRyKHRh
cmdldCkpOworCiAgICAgYXV0byogZG9jdW1lbnQgPSB0cmFja2luZ0RvY3VtZW50KCk7CiAgICAg
aWYgKCFoYWRPYnNlcnZhdGlvblRhcmdldHMpCiAgICAgICAgIGRvY3VtZW50LT5hZGRJbnRlcnNl
Y3Rpb25PYnNlcnZlcigqdGhpcyk7CkBAIC0yMjMsNyArMjMxLDcgQEAgYm9vbCBJbnRlcnNlY3Rp
b25PYnNlcnZlcjo6cmVtb3ZlVGFyZ2V0UmVnaXN0cmF0aW9uKEVsZW1lbnQmIHRhcmdldCkKIAog
dm9pZCBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6cmVtb3ZlQWxsVGFyZ2V0cygpCiB7Ci0gICAgZm9y
IChhdXRvKiB0YXJnZXQgOiBtX29ic2VydmF0aW9uVGFyZ2V0cykgeworICAgIGZvciAoYXV0byYg
dGFyZ2V0IDogbV9vYnNlcnZhdGlvblRhcmdldHMpIHsKICAgICAgICAgYm9vbCByZW1vdmVkID0g
cmVtb3ZlVGFyZ2V0UmVnaXN0cmF0aW9uKCp0YXJnZXQpOwogICAgICAgICBBU1NFUlRfVU5VU0VE
KHJlbW92ZWQsIHJlbW92ZWQpOwogICAgIH0KQEAgLTI3OSwyMiArMjg3LDEzIEBAIHZvaWQgSW50
ZXJzZWN0aW9uT2JzZXJ2ZXI6Om5vdGlmeSgpCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRGaXJlT2JzZXJ2ZXJDYWxsYmFjaygqY29udGV4dCk7CiB9CiAKLWJvb2wgSW50ZXJzZWN0
aW9uT2JzZXJ2ZXI6OnZpcnR1YWxIYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAotewotICAgIHJl
dHVybiAoaGFzT2JzZXJ2YXRpb25UYXJnZXRzKCkgJiYgdHJhY2tpbmdEb2N1bWVudCgpKSB8fCAh
bV9xdWV1ZWRFbnRyaWVzLmlzRW1wdHkoKTsKLX0KLQotY29uc3QgY2hhciogSW50ZXJzZWN0aW9u
T2JzZXJ2ZXI6OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAotewotICAgIHJldHVybiAiSW50
ZXJzZWN0aW9uT2JzZXJ2ZXIiOwotfQotCi12b2lkIEludGVyc2VjdGlvbk9ic2VydmVyOjpzdG9w
KCkKK2Jvb2wgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKLSAgICBkaXNjb25u
ZWN0KCk7Ci0gICAgbV9jYWxsYmFjayA9IG51bGxwdHI7Ci0gICAgbV9xdWV1ZWRFbnRyaWVzLmNs
ZWFyKCk7Ci0gICAgbV9wZW5kaW5nVGFyZ2V0cy5jbGVhcigpOworICAgIGZvciAoYXV0byYgdGFy
Z2V0IDogbV9vYnNlcnZhdGlvblRhcmdldHMpIHsKKyAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQg
PSB0YXJnZXQuZ2V0KCk7IGVsZW1lbnQgJiYgdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3QoZWxl
bWVudC0+b3BhcXVlUm9vdCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuaAppbmRleCBmNTA5ZDM1NjUxOGQyMTc0YTkw
YzUwMzlkMTE2YjM4MTBjN2RmY2EzLi5jMzEyNzJiNTYyZjFmZWMyZGM3N2VlNTM2NzdmNjM3MTMx
M2FjMTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2Vy
dmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5oCkBA
IC0yNyw3ICsyNyw2IEBACiAKICNpZiBFTkFCTEUoSU5URVJTRUNUSU9OX09CU0VSVkVSKQogCi0j
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiR0NSZWFjaGFibGVSZWYuaCIK
ICNpbmNsdWRlICJJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSW50
ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeS5oIgpAQCAtMzcsNiArMzYsMTIgQEAKICNpbmNsdWRlIDx3
dGYvV2Vha1B0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKKworfQorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwpAQCAtNjAsNyArNjUsNyBAQCBzdHJ1Y3QgSW50
ZXJzZWN0aW9uT2JzZXJ2ZXJEYXRhIHsKICAgICBWZWN0b3I8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJS
ZWdpc3RyYXRpb24+IHJlZ2lzdHJhdGlvbnM7CiB9OwogCi1jbGFzcyBJbnRlcnNlY3Rpb25PYnNl
cnZlciA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVyc2VjdGlvbk9ic2VydmVyPiwgcHVibGljIEFj
dGl2ZURPTU9iamVjdCwgcHVibGljIENhbk1ha2VXZWFrUHRyPEludGVyc2VjdGlvbk9ic2VydmVy
PiB7CitjbGFzcyBJbnRlcnNlY3Rpb25PYnNlcnZlciA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVy
c2VjdGlvbk9ic2VydmVyPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPEludGVyc2VjdGlvbk9ic2Vy
dmVyPiB7CiBwdWJsaWM6CiAgICAgc3RydWN0IEluaXQgewogICAgICAgICBzdGQ6Om9wdGlvbmFs
PFZhcmlhbnQ8UmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8RG9jdW1lbnQ+Pj4gcm9vdDsKQEAgLTc0
LDExICs3OSwxMyBAQCBwdWJsaWM6CiAKICAgICBEb2N1bWVudCogdHJhY2tpbmdEb2N1bWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fcm9vdCA/ICZtX3Jvb3QtPmRvY3VtZW50KCkgOiBtX2ltcGxpY2l0
Um9vdERvY3VtZW50LmdldCgpOyB9CiAKLSAgICBDb250YWluZXJOb2RlKiByb290KCkgY29uc3Qg
eyByZXR1cm4gbV9yb290OyB9CisgICAgQ29udGFpbmVyTm9kZSogcm9vdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcm9vdC5nZXQoKTsgfQogICAgIFN0cmluZyByb290TWFyZ2luKCkgY29uc3Q7CiAgICAg
Y29uc3QgTGVuZ3RoQm94JiByb290TWFyZ2luQm94KCkgY29uc3QgeyByZXR1cm4gbV9yb290TWFy
Z2luOyB9CiAgICAgY29uc3QgVmVjdG9yPGRvdWJsZT4mIHRocmVzaG9sZHMoKSBjb25zdCB7IHJl
dHVybiBtX3RocmVzaG9sZHM7IH0KLSAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+IG9ic2VydmF0
aW9uVGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fb2JzZXJ2YXRpb25UYXJnZXRzOyB9CisgICAg
Y29uc3QgVmVjdG9yPFdlYWtQdHI8RWxlbWVudD4+JiBvYnNlcnZhdGlvblRhcmdldHMoKSBjb25z
dCB7IHJldHVybiBtX29ic2VydmF0aW9uVGFyZ2V0czsgfQorICAgIGJvb2wgaGFzT2JzZXJ2YXRp
b25UYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV9vYnNlcnZhdGlvblRhcmdldHMuc2l6ZSgpOyB9
CisgICAgYm9vbCBpc09ic2VydmluZyhjb25zdCBFbGVtZW50JikgY29uc3Q7CiAKICAgICB2b2lk
IG9ic2VydmUoRWxlbWVudCYpOwogICAgIHZvaWQgdW5vYnNlcnZlKEVsZW1lbnQmKTsKQEAgLTkx
LDcgKzk4LDYgQEAgcHVibGljOgogICAgIFRha2VuUmVjb3JkcyB0YWtlUmVjb3JkcygpOwogCiAg
ICAgdm9pZCB0YXJnZXREZXN0cm95ZWQoRWxlbWVudCYpOwotICAgIGJvb2wgaGFzT2JzZXJ2YXRp
b25UYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV9vYnNlcnZhdGlvblRhcmdldHMuc2l6ZSgpOyB9
CiAgICAgdm9pZCByb290RGVzdHJveWVkKCk7CiAKICAgICBzdGQ6Om9wdGlvbmFsPFJlZHVjZWRS
ZXNvbHV0aW9uU2Vjb25kcz4gbm93VGltZXN0YW1wKCkgY29uc3Q7CkBAIC0xMDAsMjQgKzEwNiwy
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3RpZnkoKTsKIAogICAgIEludGVyc2VjdGlvbk9ic2Vy
dmVyQ2FsbGJhY2sqIGNhbGxiYWNrQ29uY3VycmVudGx5KCkgeyByZXR1cm4gbV9jYWxsYmFjay5n
ZXQoKTsgfQorICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgSW50ZXJzZWN0aW9uT2JzZXJ2
ZXIoRG9jdW1lbnQmLCBSZWY8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjaz4mJiwgQ29udGFp
bmVyTm9kZSogcm9vdCwgTGVuZ3RoQm94JiYgcGFyc2VkUm9vdE1hcmdpbiwgVmVjdG9yPGRvdWJs
ZT4mJiB0aHJlc2hvbGRzKTsKIAotICAgIC8vIEFjdGl2ZURPTU9iamVjdC4KLSAgICBib29sIHZp
cnR1YWxIYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICBjb25zdCBjaGFy
KiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wKCkg
b3ZlcnJpZGU7Ci0KICAgICBib29sIHJlbW92ZVRhcmdldFJlZ2lzdHJhdGlvbihFbGVtZW50Jik7
CiAgICAgdm9pZCByZW1vdmVBbGxUYXJnZXRzKCk7CiAKICAgICBXZWFrUHRyPERvY3VtZW50PiBt
X2ltcGxpY2l0Um9vdERvY3VtZW50OwotICAgIENvbnRhaW5lck5vZGUqIG1fcm9vdDsKKyAgICBX
ZWFrUHRyPENvbnRhaW5lck5vZGU+IG1fcm9vdDsKICAgICBMZW5ndGhCb3ggbV9yb290TWFyZ2lu
OwogICAgIFZlY3Rvcjxkb3VibGU+IG1fdGhyZXNob2xkczsKICAgICBSZWZQdHI8SW50ZXJzZWN0
aW9uT2JzZXJ2ZXJDYWxsYmFjaz4gbV9jYWxsYmFjazsKLSAgICBWZWN0b3I8RWxlbWVudCo+IG1f
b2JzZXJ2YXRpb25UYXJnZXRzOworICAgIFZlY3RvcjxXZWFrUHRyPEVsZW1lbnQ+PiBtX29ic2Vy
dmF0aW9uVGFyZ2V0czsKICAgICBWZWN0b3I8R0NSZWFjaGFibGVSZWY8RWxlbWVudD4+IG1fcGVu
ZGluZ1RhcmdldHM7CiAgICAgVmVjdG9yPFJlZjxJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Pj4g
bV9xdWV1ZWRFbnRyaWVzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50
ZXJzZWN0aW9uT2JzZXJ2ZXIuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25P
YnNlcnZlci5pZGwKaW5kZXggOTgwOTU2MzUzZTVkZDVjNDNmZDBlZGM1NjhiYzMyN2FhOWRlYWE1
Yy4uN2FkY2U4MjFhMDgxNGJlMjMxYWJhZmNhYjViYjNiM2NmNDI2NDZiZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5pZGwKQEAgLTI2LDExICsyNiwxMiBA
QAogLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9JbnRlcnNlY3Rpb25PYnNlcnZlci8KIAogWwot
ICAgIEFjdGl2ZURPTU9iamVjdCwKICAgICBDb25kaXRpb25hbD1JTlRFUlNFQ1RJT05fT0JTRVJW
RVIsCiAgICAgRW5hYmxlZEJ5U2V0dGluZz1JbnRlcnNlY3Rpb25PYnNlcnZlciwKICAgICBFeHBv
c2VkPVdpbmRvdywKICAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKKyAgICBDdXN0b21Jc1JlYWNo
YWJsZSwKKyAgICBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlCiBdIGludGVyZmFjZSBJbnRlcnNl
Y3Rpb25PYnNlcnZlciB7CiAgICAgW0NhbGxXaXRoPURvY3VtZW50XSBjb25zdHJ1Y3RvcihJbnRl
cnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrIGNhbGxiYWNrLCBvcHRpb25hbCBJbnRlcnNlY3Rpb25P
YnNlcnZlckluaXQgb3B0aW9ucyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UmVzaXplT2JzZXJ2YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZh
dGlvbi5jcHAKaW5kZXggN2MxYTkyMzA3MmNkYzAwMmYxZThlZTlhMDYzNWY3YTYzNzNkNzkyZi4u
ZTM0YzA5NWQwNWNhYjhhZWI3MDVmODRiN2FkNjkyNGQxYmEzZTRhMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9SZXNpemVPYnNlcnZhdGlvbi5jcHAKQEAgLTM0LDEzICszNCwxMyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxSZXNpemVPYnNlcnZhdGlvbj4gUmVzaXplT2JzZXJ2YXRp
b246OmNyZWF0ZShFbGVtZW50KiB0YXJnZXQpCitSZWY8UmVzaXplT2JzZXJ2YXRpb24+IFJlc2l6
ZU9ic2VydmF0aW9uOjpjcmVhdGUoRWxlbWVudCYgdGFyZ2V0KQogewogICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFJlc2l6ZU9ic2VydmF0aW9uKHRhcmdldCkpOwogfQogCi1SZXNpemVPYnNlcnZh
dGlvbjo6UmVzaXplT2JzZXJ2YXRpb24oRWxlbWVudCogZWxlbWVudCkKLSAgICA6IG1fdGFyZ2V0
KGVsZW1lbnQpCitSZXNpemVPYnNlcnZhdGlvbjo6UmVzaXplT2JzZXJ2YXRpb24oRWxlbWVudCYg
ZWxlbWVudCkKKyAgICA6IG1fdGFyZ2V0IHsgbWFrZVdlYWtQdHIoZWxlbWVudCkgfQogewogfQog
CkBAIC05Miw3ICs5Miw3IEBAIGJvb2wgUmVzaXplT2JzZXJ2YXRpb246OmVsZW1lbnRTaXplQ2hh
bmdlZChMYXlvdXRTaXplJiBjdXJyZW50U2l6ZSkgY29uc3QKIHNpemVfdCBSZXNpemVPYnNlcnZh
dGlvbjo6dGFyZ2V0RWxlbWVudERlcHRoKCkgY29uc3QKIHsKICAgICB1bnNpZ25lZCBkZXB0aCA9
IDA7Ci0gICAgZm9yIChFbGVtZW50KiBvd25lckVsZW1lbnQgID0gbV90YXJnZXQ7IG93bmVyRWxl
bWVudDsgb3duZXJFbGVtZW50ID0gb3duZXJFbGVtZW50LT5kb2N1bWVudCgpLm93bmVyRWxlbWVu
dCgpKSB7CisgICAgZm9yIChFbGVtZW50KiBvd25lckVsZW1lbnQgPSBtX3RhcmdldC5nZXQoKTsg
b3duZXJFbGVtZW50OyBvd25lckVsZW1lbnQgPSBvd25lckVsZW1lbnQtPmRvY3VtZW50KCkub3du
ZXJFbGVtZW50KCkpIHsKICAgICAgICAgZm9yIChFbGVtZW50KiBwYXJlbnQgPSBvd25lckVsZW1l
bnQ7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRFbGVtZW50KCkpCiAgICAgICAgICAg
ICArK2RlcHRoOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXpl
T2JzZXJ2YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2YXRpb24uaApp
bmRleCBjN2RiMWZkZWNhNTM4MTAyMWNkNmQzZDQ2N2NmYjY1MDU2M2IyMTJkLi44NWY5ZTA2Zjlm
ZTZiMDBkNDlhNzI4MGQ2OWU3ODlhM2U5YzZlNDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1Jlc2l6ZU9ic2VydmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNp
emVPYnNlcnZhdGlvbi5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiTGF5b3V0U2l6ZS5o
IgogCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDcgKzM5LDcgQEAgY2xhc3MgRWxlbWVu
dDsKIGNsYXNzIFJlc2l6ZU9ic2VydmF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8UmVzaXplT2Jz
ZXJ2YXRpb24+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPFJlc2l6ZU9ic2VydmF0aW9uPiBjcmVhdGUoRWxlbWVudCogdGFyZ2V0KTsKKyAg
ICBzdGF0aWMgUmVmPFJlc2l6ZU9ic2VydmF0aW9uPiBjcmVhdGUoRWxlbWVudCYgdGFyZ2V0KTsK
IAogICAgIH5SZXNpemVPYnNlcnZhdGlvbigpOwogCkBAIC00OCwxMyArNDksMTMgQEAgcHVibGlj
OgogICAgIEZsb2F0UmVjdCBjb21wdXRlQ29udGVudFJlY3QoKSBjb25zdDsKIAogICAgIGJvb2wg
ZWxlbWVudFNpemVDaGFuZ2VkKExheW91dFNpemUmKSBjb25zdDsKLSAgICBFbGVtZW50KiB0YXJn
ZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQorICAgIEVsZW1lbnQqIHRhcmdldCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGFyZ2V0LmdldCgpOyB9CiAgICAgc2l6ZV90IHRhcmdldEVsZW1lbnRE
ZXB0aCgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIFJlc2l6ZU9ic2VydmF0aW9uKEVsZW1lbnQq
IHRhcmdldCk7CisgICAgUmVzaXplT2JzZXJ2YXRpb24oRWxlbWVudCYgdGFyZ2V0KTsKIAotICAg
IEVsZW1lbnQqIG1fdGFyZ2V0OworICAgIFdlYWtQdHI8RWxlbWVudD4gbV90YXJnZXQ7CiAgICAg
TGF5b3V0U2l6ZSBtX2xhc3RPYnNlcnZhdGlvblNpemU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UmVzaXplT2JzZXJ2ZXIuY3BwCmluZGV4IDU1MDAzNmJlNTBlNzhlNDY2Mjg2ZDMxMTdmNWY4YTFk
ZmZjZWQyOTAuLjBjYTU3OWU0MzQ3M2ZhNjA0ZWJlYzZiMGE5ZGMyMjQyNWE5ODVkYjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgog
I2luY2x1ZGUgIlJlc2l6ZU9ic2VydmVyRW50cnkuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTQwLDExICs0MSw5IEBAIFJlZjxSZXNpemVPYnNlcnZlcj4gUmVzaXplT2JzZXJ2ZXI6OmNy
ZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIFJlZjxSZXNpemVPYnNlcnZlCiB9CiAKIFJlc2l6ZU9i
c2VydmVyOjpSZXNpemVPYnNlcnZlcihEb2N1bWVudCYgZG9jdW1lbnQsIFJlZjxSZXNpemVPYnNl
cnZlckNhbGxiYWNrPiYmIGNhbGxiYWNrKQotICAgIDogQWN0aXZlRE9NT2JqZWN0KGNhbGxiYWNr
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgLCBtX2RvY3VtZW50KG1ha2VXZWFrUHRy
KGRvY3VtZW50KSkKKyAgICA6IG1fZG9jdW1lbnQobWFrZVdlYWtQdHIoZG9jdW1lbnQpKQogICAg
ICwgbV9jYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSkKIHsKLSAgICBzdXNwZW5kSWZOZWVkZWQo
KTsKIH0KIAogUmVzaXplT2JzZXJ2ZXI6On5SZXNpemVPYnNlcnZlcigpCkBAIC02OSw4ICs2OCw3
IEBAIHZvaWQgUmVzaXplT2JzZXJ2ZXI6Om9ic2VydmUoRWxlbWVudCYgdGFyZ2V0KQogICAgIGF1
dG8mIG9ic2VydmVyRGF0YSA9IHRhcmdldC5lbnN1cmVSZXNpemVPYnNlcnZlckRhdGEoKTsKICAg
ICBvYnNlcnZlckRhdGEub2JzZXJ2ZXJzLmFwcGVuZChtYWtlV2Vha1B0cih0aGlzKSk7CiAKLSAg
ICBtX29ic2VydmF0aW9ucy5hcHBlbmQoUmVzaXplT2JzZXJ2YXRpb246OmNyZWF0ZSgmdGFyZ2V0
KSk7Ci0gICAgbV9wZW5kaW5nVGFyZ2V0cy5hcHBlbmQodGFyZ2V0KTsKKyAgICBtX29ic2VydmF0
aW9ucy5hcHBlbmQoUmVzaXplT2JzZXJ2YXRpb246OmNyZWF0ZSh0YXJnZXQpKTsKIAogICAgIGlm
IChtX2RvY3VtZW50KSB7CiAgICAgICAgIG1fZG9jdW1lbnQtPmFkZFJlc2l6ZU9ic2VydmVyKCp0
aGlzKTsKQEAgLTEwNyw2ICsxMDUsNyBAQCBzaXplX3QgUmVzaXplT2JzZXJ2ZXI6OmdhdGhlck9i
c2VydmF0aW9ucyhzaXplX3QgZGVlcGVyVGhhbikKICAgICAgICAgICAgIGlmIChkZXB0aCA+IGRl
ZXBlclRoYW4pIHsKICAgICAgICAgICAgICAgICBvYnNlcnZhdGlvbi0+dXBkYXRlT2JzZXJ2YXRp
b25TaXplKGN1cnJlbnRTaXplKTsKICAgICAgICAgICAgICAgICBtX2FjdGl2ZU9ic2VydmF0aW9u
cy5hcHBlbmQob2JzZXJ2YXRpb24uZ2V0KCkpOworICAgICAgICAgICAgICAgIG1fYWN0aXZlT2Jz
ZXJ2YXRpb25UYXJnZXRzLmFwcGVuZCgqb2JzZXJ2YXRpb24tPnRhcmdldCgpKTsKICAgICAgICAg
ICAgICAgICBtaW5PYnNlcnZlZERlcHRoID0gc3RkOjptaW4oZGVwdGgsIG1pbk9ic2VydmVkRGVw
dGgpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbV9oYXNTa2lwcGVkT2Jz
ZXJ2YXRpb25zID0gdHJ1ZTsKQEAgLTEzMyw2ICsxMzIsMTUgQEAgdm9pZCBSZXNpemVPYnNlcnZl
cjo6ZGVsaXZlck9ic2VydmF0aW9ucygpCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRGaXJlT2JzZXJ2ZXJDYWxsYmFjaygqY29udGV4dCk7CiB9CiAKK2Jvb2wgUmVzaXplT2JzZXJ2
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIG9ic2VydmF0aW9uIDogbV9vYnNlcnZh
dGlvbnMpIHsKKyAgICAgICAgaWYgKGF1dG8qIHRhcmdldCA9IG9ic2VydmF0aW9uLT50YXJnZXQo
KTsgdGFyZ2V0ICYmIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHRhcmdldC0+b3BhcXVlUm9v
dCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIGJvb2wgUmVzaXplT2JzZXJ2ZXI6OnJlbW92ZVRhcmdldChFbGVtZW50JiB0YXJnZXQp
CiB7CiAgICAgYXV0byogb2JzZXJ2ZXJEYXRhID0gdGFyZ2V0LnJlc2l6ZU9ic2VydmVyRGF0YSgp
OwpAQCAtMTQ5LDE0ICsxNTcsMTQgQEAgdm9pZCBSZXNpemVPYnNlcnZlcjo6cmVtb3ZlQWxsVGFy
Z2V0cygpCiAgICAgICAgIGJvb2wgcmVtb3ZlZCA9IHJlbW92ZVRhcmdldCgqb2JzZXJ2YXRpb24t
PnRhcmdldCgpKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKICAg
ICB9Ci0gICAgbV9wZW5kaW5nVGFyZ2V0cy5jbGVhcigpOworICAgIG1fYWN0aXZlT2JzZXJ2YXRp
b25UYXJnZXRzLmNsZWFyKCk7CiAgICAgbV9hY3RpdmVPYnNlcnZhdGlvbnMuY2xlYXIoKTsKICAg
ICBtX29ic2VydmF0aW9ucy5jbGVhcigpOwogfQogCiBib29sIFJlc2l6ZU9ic2VydmVyOjpyZW1v
dmVPYnNlcnZhdGlvbihjb25zdCBFbGVtZW50JiB0YXJnZXQpCiB7Ci0gICAgbV9wZW5kaW5nVGFy
Z2V0cy5yZW1vdmVGaXJzdE1hdGNoaW5nKFsmdGFyZ2V0XShhdXRvJiBwZW5kaW5nVGFyZ2V0KSB7
CisgICAgbV9hY3RpdmVPYnNlcnZhdGlvblRhcmdldHMucmVtb3ZlRmlyc3RNYXRjaGluZyhbJnRh
cmdldF0oYXV0byYgcGVuZGluZ1RhcmdldCkgewogICAgICAgICByZXR1cm4gcGVuZGluZ1Rhcmdl
dC5wdHIoKSA9PSAmdGFyZ2V0OwogICAgIH0pOwogCkBAIC0xNjksMjIgKzE3Nyw2IEBAIGJvb2wg
UmVzaXplT2JzZXJ2ZXI6OnJlbW92ZU9ic2VydmF0aW9uKGNvbnN0IEVsZW1lbnQmIHRhcmdldCkK
ICAgICB9KTsKIH0KIAotYm9vbCBSZXNpemVPYnNlcnZlcjo6dmlydHVhbEhhc1BlbmRpbmdBY3Rp
dml0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChoYXNPYnNlcnZhdGlvbnMoKSAmJiBtX2RvY3Vt
ZW50KSB8fCAhbV9hY3RpdmVPYnNlcnZhdGlvbnMuaXNFbXB0eSgpOwotfQotCi1jb25zdCBjaGFy
KiBSZXNpemVPYnNlcnZlcjo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuICJSZXNpemVPYnNlcnZlciI7Ci19Ci0KLXZvaWQgUmVzaXplT2JzZXJ2ZXI6OnN0b3AoKQot
ewotICAgIGRpc2Nvbm5lY3QoKTsKLSAgICBtX2NhbGxiYWNrID0gbnVsbHB0cjsKLX0KLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFJFU0laRV9PQlNFUlZFUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuaAppbmRleCBlNDE1NmYzMWUzMGUyNjUxNDk1
NDAxOTI0NGU3N2I5MzgwYjAzMTA5Li42ZjRmNjk3YzY2M2FhYjRhMDJkOGJiNGY1NjdkMWQ2MGJl
ZmIxMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5oCkBAIC0yNywxMyArMjcs
MTkgQEAKIAogI2lmIEVOQUJMRShSRVNJWkVfT0JTRVJWRVIpCiAKLSNpbmNsdWRlICJBY3RpdmVE
T01PYmplY3QuaCIKICNpbmNsdWRlICJHQ1JlYWNoYWJsZVJlZi5oIgogI2luY2x1ZGUgIlJlc2l6
ZU9ic2VydmF0aW9uLmgiCiAjaW5jbHVkZSAiUmVzaXplT2JzZXJ2ZXJDYWxsYmFjay5oIgorI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvV2Vha1B0ci5oPgogCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQWJzdHJhY3RTbG90
VmlzaXRvcjsKKworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwpA
QCAtNDQsOCArNTAsNyBAQCBzdHJ1Y3QgUmVzaXplT2JzZXJ2ZXJEYXRhIHsKICAgICBWZWN0b3I8
V2Vha1B0cjxSZXNpemVPYnNlcnZlcj4+IG9ic2VydmVyczsKIH07CiAKLWNsYXNzIFJlc2l6ZU9i
c2VydmVyIDogcHVibGljIFJlZkNvdW50ZWQ8UmVzaXplT2JzZXJ2ZXI+LCBwdWJsaWMgQWN0aXZl
RE9NT2JqZWN0LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVzaXplT2JzZXJ2ZXI+IHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK2NsYXNzIFJlc2l6ZU9ic2VydmVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8UmVzaXplT2JzZXJ2ZXI+LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVzaXplT2Jz
ZXJ2ZXI+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFJlc2l6ZU9ic2VydmVyPiBjcmVhdGUo
RG9jdW1lbnQmLCBSZWY8UmVzaXplT2JzZXJ2ZXJDYWxsYmFjaz4mJik7CiAgICAgflJlc2l6ZU9i
c2VydmVyKCk7CkBAIC02NSwxNSArNzAsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGFzU2tp
cHBlZE9ic2VydmF0aW9ucyhib29sIHNraXBwZWQpIHsgbV9oYXNTa2lwcGVkT2JzZXJ2YXRpb25z
ID0gc2tpcHBlZDsgfQogCiAgICAgUmVzaXplT2JzZXJ2ZXJDYWxsYmFjayogY2FsbGJhY2tDb25j
dXJyZW50bHkoKSB7IHJldHVybiBtX2NhbGxiYWNrLmdldCgpOyB9CisgICAgYm9vbCBpc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKIAog
cHJpdmF0ZToKICAgICBSZXNpemVPYnNlcnZlcihEb2N1bWVudCYsIFJlZjxSZXNpemVPYnNlcnZl
ckNhbGxiYWNrPiYmKTsKIAotICAgIC8vIEFjdGl2ZURPTU9iamVjdC4KLSAgICBib29sIHZpcnR1
YWxIYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICBjb25zdCBjaGFyKiBh
Y3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wKCkgb3Zl
cnJpZGU7Ci0KICAgICBib29sIHJlbW92ZVRhcmdldChFbGVtZW50Jik7CiAgICAgdm9pZCByZW1v
dmVBbGxUYXJnZXRzKCk7CiAgICAgYm9vbCByZW1vdmVPYnNlcnZhdGlvbihjb25zdCBFbGVtZW50
Jik7CkBAIC04Myw3ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZjxSZXNpemVPYnNl
cnZhdGlvbj4+IG1fb2JzZXJ2YXRpb25zOwogCiAgICAgVmVjdG9yPFJlZjxSZXNpemVPYnNlcnZh
dGlvbj4+IG1fYWN0aXZlT2JzZXJ2YXRpb25zOwotICAgIFZlY3RvcjxHQ1JlYWNoYWJsZVJlZjxF
bGVtZW50Pj4gbV9wZW5kaW5nVGFyZ2V0czsKKyAgICBWZWN0b3I8R0NSZWFjaGFibGVSZWY8RWxl
bWVudD4+IG1fYWN0aXZlT2JzZXJ2YXRpb25UYXJnZXRzOwogICAgIGJvb2wgbV9oYXNTa2lwcGVk
T2JzZXJ2YXRpb25zIHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUmVzaXplT2JzZXJ2ZXIuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNl
cnZlci5pZGwKaW5kZXggMDVlODQ3ZDkwMDgzMTY2Njc1YTVhNzdlOTVlNWM4ZWU5ZjgyZjZkZS4u
M2JmZjYzOGVmNzY2YjhhZWZmMDdjNmE2NmRmMjU5NzRmNTExZTQyNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9SZXNpemVPYnNlcnZlci5pZGwKQEAgLTI2LDExICsyNiwxMiBAQAogLy8gaHR0cHM6Ly93
aWNnLmdpdGh1Yi5pby9SZXNpemVPYnNlcnZlci8KIAogWwotICAgIEFjdGl2ZURPTU9iamVjdCwK
ICAgICBDb25kaXRpb25hbD1SRVNJWkVfT0JTRVJWRVIsCiAgICAgRW5hYmxlZEJ5U2V0dGluZz1S
ZXNpemVPYnNlcnZlciwKICAgICBFeHBvc2VkPVdpbmRvdywKICAgICBKU0N1c3RvbU1hcmtGdW5j
dGlvbiwKKyAgICBDdXN0b21Jc1JlYWNoYWJsZSwKKyAgICBJbXBsZW1lbnRhdGlvbkxhY2tzVlRh
YmxlCiBdIGludGVyZmFjZSBSZXNpemVPYnNlcnZlciB7CiAgICAgW0NhbGxXaXRoPURvY3VtZW50
XSBjb25zdHJ1Y3RvcihSZXNpemVPYnNlcnZlckNhbGxiYWNrIGNhbGxiYWNrKTsKIApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IGE0YWQ4ZGNmNWMwMjZlOTYxZTk1OGZjMDgzN2YwMGE4YzJjZWQyYjQuLjJjNzIwODEyZTE2NWQz
OGQ4MDI0ZjFiMjQ1ZDBkMDM4ZDNiZDQzNTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAyMS0w
Ny0wOSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXNpemVP
YnNlcnZlciAvIEludGVyc2VjdGlvbk9ic2VydmVyIG1lbW9yeSBsZWFrIG9uIGRldGFjaGVkICYg
b3V0IG9mIHJlZmVyZW5jZSBlbGVtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MTk0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83OTgzOTg1
MT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRl
ZCByZWdyZXNzaW9uIHRlc3RzIGZvciBsZWFraW5nIG5vZGVzIHdpdGggSW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXIgYW5kIFJlc2l6ZU9ic2V2ZXIuCisKKyAgICAgICAgQWxzbyByZXdyb3RlIGludGVyc2Vj
dGlvbi1vYnNlcnZlci9yb290LWVsZW1lbnQtZGVsZXRlZC5odG1sIHNpbmNlIHRoZSB0ZXN0IHdh
cyBwcmV2aW91c2x5IGFzc2VydGluZworICAgICAgICB0aGF0IEludGVyc2VjdGlvbk9ic2VydmVy
LnJvb3QgYmVjb21lcyBudWxsIGlmIGl0IHdhcyBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50LCB3
aGljaCBpcyB3cm9uZy4KKworICAgICAgICAqIGludGVyc2VjdGlvbi1vYnNlcnZlci9pbnRlcnNl
Y3Rpb24tb2JzZXJ2ZXItc2hvdWxkLW5vdC1sZWFrLW9ic2VydmVkLW5vZGVzLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogaW50ZXJzZWN0aW9uLW9ic2VydmVyL2ludGVyc2VjdGlvbi1v
YnNlcnZlci1zaG91bGQtbm90LWxlYWstb2JzZXJ2ZWQtbm9kZXMuaHRtbDogQWRkZWQuCisgICAg
ICAgICogaW50ZXJzZWN0aW9uLW9ic2VydmVyL3Jvb3QtZWxlbWVudC1kZWxldGVkLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBpbnRlcnNlY3Rpb24tb2JzZXJ2ZXIvcm9vdC1lbGVtZW50LWRlbGV0
ZWQuaHRtbDoKKyAgICAgICAgKiByZXNpemUtb2JzZXJ2ZXIvcmVzaXplLW9ic2VydmVyLXNob3Vs
ZC1ub3QtbGVhay1vYnNlcnZlZC1ub2Rlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHJlc2l6ZS1vYnNlcnZlci9yZXNpemUtb2JzZXJ2ZXItc2hvdWxkLW5vdC1sZWFrLW9ic2VydmVk
LW5vZGVzLmh0bWw6IEFkZGVkLgorCiAyMDIxLTA3LTA3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgT3VyIHN0cnVjdHVyZWQgY2xvbmluZyBpbXBsZW1lbnRhdGlv
biBkb2VzIG5vdCBlbmNvZGUgYWxsIG9mIFJlZ0V4cCdzIGZsYWdzCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXIvaW50ZXJzZWN0aW9uLW9ic2VydmVyLXNob3Vs
ZC1ub3QtbGVhay1vYnNlcnZlZC1ub2Rlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnRl
cnNlY3Rpb24tb2JzZXJ2ZXIvaW50ZXJzZWN0aW9uLW9ic2VydmVyLXNob3VsZC1ub3QtbGVhay1v
YnNlcnZlZC1ub2Rlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjE1ZmM1Yjg0NjNmZTM4YzJk
ZDFhMDQzM2Q3M2MwYzI4ZWViN2Q2MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2lu
dGVyc2VjdGlvbi1vYnNlcnZlci9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXItc2hvdWxkLW5vdC1sZWFr
LW9ic2VydmVkLW5vZGVzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKK1RoaXMgdGVzdHMg
b2JzZXJ2aW5nIGFuIGVsZW1lbnQgd2l0aCBhbiBJbnRlcnNlY3Rpb25PYnNlcnZlciBhbmQgcmVt
b3ZpbmcgdGhlIGVsZW1lbnQgZnJvbSB0aGUgZG9jdW1lbnQuCitUaGUgZWxlbWVudCBzaG91bGQg
YmVjb21lIGVsaWdpYmxlIGZvciBHQyBhdCBzb21lIHBvaW50LgorCitQQVNTCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXIvaW50ZXJzZWN0aW9uLW9ic2VydmVy
LXNob3VsZC1ub3QtbGVhay1vYnNlcnZlZC1ub2Rlcy5odG1sIGIvTGF5b3V0VGVzdHMvaW50ZXJz
ZWN0aW9uLW9ic2VydmVyL2ludGVyc2VjdGlvbi1vYnNlcnZlci1zaG91bGQtbm90LWxlYWstb2Jz
ZXJ2ZWQtbm9kZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNDY1MmQ0NzJlNjU4NDlmZTc2ZTBiYTg4OTk5
YTdjMjFjZWUzNjE0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW50ZXJzZWN0aW9u
LW9ic2VydmVyL2ludGVyc2VjdGlvbi1vYnNlcnZlci1zaG91bGQtbm90LWxlYWstb2JzZXJ2ZWQt
bm9kZXMuaHRtbApAQCAtMCwwICsxLDUyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJv
ZHk+Cis8cHJlIGlkPSJsb2ciPlRoaXMgdGVzdHMgb2JzZXJ2aW5nIGFuIGVsZW1lbnQgd2l0aCBh
biBJbnRlcnNlY3Rpb25PYnNlcnZlciBhbmQgcmVtb3ZpbmcgdGhlIGVsZW1lbnQgZnJvbSB0aGUg
ZG9jdW1lbnQuCitUaGUgZWxlbWVudCBzaG91bGQgYmVjb21lIGVsaWdpYmxlIGZvciBHQyBhdCBz
b21lIHBvaW50LgorCis8L3ByZT4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvZ2MuanMiPjwv
c2NyaXB0PgorPHNjcmlwdD4KKworbGV0IGluaXRpYWxOb2RlQ291bnQ7CitmdW5jdGlvbiBydW5U
ZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy50ZXN0UnVubmVyIHx8ICF3aW5kb3cuaW50ZXJuYWxz
KSB7CisgICAgICAgIGxvZy50ZXh0Q29udGVudCArPSAnRkFJTCAtIFRoaXMgdGVzdCByZXF1aXJl
cyBpbnRlcm5hbHMnOyAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0ZXN0UnVubmVyLmR1
bXBBc1RleHQoKTsKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICBzZXRUaW1l
b3V0KCgpID0+IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpLCAzMDAwKTsKKworICAgIGluaXRpYWxO
b2RlQ291bnQgPSBpbnRlcm5hbHMucmVmZXJlbmNpbmdOb2RlQ291bnQoZG9jdW1lbnQpOworCisg
ICAgY29uc3QgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJzID0gW107CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDA7ICsraSkKKyAgICAgICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJzLnB1c2goY3JlYXRl
SW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKSk7CisKKyAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkg
PT4geworICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgICAgIGdjKCk7CisgICAg
ICAgICAgICBsb2cudGV4dENvbnRlbnQgKz0gaW50ZXJuYWxzLnJlZmVyZW5jaW5nTm9kZUNvdW50
KGRvY3VtZW50KSA8IGluaXRpYWxOb2RlQ291bnQgKyBpbnRlcnNlY3Rpb25PYnNlcnZlcnMubGVu
Z3RoICogMC44ID8gJ1BBU1MnIDogJ0ZBSUwgLSBMZXNzIHRoYW4gMjAlIG9mIG5vZGVzIHdlcmUg
Y29sbGVjdGVkLicKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAg
ICB9LCAwKTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gY3JlYXRlSW50ZXJzZWN0aW9uT2JzZXJ2
ZXIoKQoreworICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KTsKKyAgICBjb25zdCBpbnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNl
cnZlcigoKSA9PiB7IH0pLm9ic2VydmUoZWxlbWVudCk7CisgICAgZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChlbGVtZW50KTsKKyAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgZWxlbWVu
dC5yZW1vdmUoKTsKKyAgICB9LCAwKTsKKyAgICByZXR1cm4gaW50ZXJzZWN0aW9uT2JzZXJ2ZXI7
Cit9CisKK29ubG9hZCA9IHJ1blRlc3Q7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW50ZXJzZWN0aW9uLW9ic2VydmVyL3Jvb3QtZWxlbWVu
dC1kZWxldGVkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ludGVyc2VjdGlvbi1vYnNlcnZl
ci9yb290LWVsZW1lbnQtZGVsZXRlZC1leHBlY3RlZC50eHQKaW5kZXggNmZlOTVhOWJmNDA0YWUy
NWM5ZjViNDEyNjI0ZjAzMmFiNjA2YTdjYy4uMGE1OTM5OWIyYzBmYjA3NjI0OTI4YzA0NWNkYjA2
ZGZlNjcxMTUzZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW50ZXJzZWN0aW9uLW9ic2VydmVy
L3Jvb3QtZWxlbWVudC1kZWxldGVkLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnRl
cnNlY3Rpb24tb2JzZXJ2ZXIvcm9vdC1lbGVtZW50LWRlbGV0ZWQtZXhwZWN0ZWQudHh0CkBAIC0x
LDMgKzEsMjUgQEAKK1RoaXMgdGVzdHMgcmVtb3ZpbmcgdGhlIHJvb3Qgbm9kZSBvZiBJbnRlcnNl
Y3Rpb25PYnNlcnZlci4gVGhlIHJvb3Qgbm9kZSBzaG91bGQgYmUgZWxpZ2libGUgZm9yIEdDLgog
Ci1QQVNTIEludGVyc2VjdGlvbk9ic2VydmVyIGRvZXNuJ3Qga2VlcCB1bnJlYWNoYWJsZSByb290
IGFsaXZlCitUZXN0IDE6IFBBU1MKK1Rlc3QgMjogUEFTUworVGVzdCAzOiBQQVNTCitUZXN0IDQ6
IFBBU1MKK1Rlc3QgNTogUEFTUworVGVzdCA2OiBQQVNTCitUZXN0IDc6IFBBU1MKK1Rlc3QgODog
UEFTUworVGVzdCA5OiBQQVNTCitUZXN0IDEwOiBQQVNTCitUZXN0IDExOiBQQVNTCitUZXN0IDEy
OiBQQVNTCitUZXN0IDEzOiBQQVNTCitUZXN0IDE0OiBQQVNTCitUZXN0IDE1OiBQQVNTCitUZXN0
IDE2OiBQQVNTCitUZXN0IDE3OiBQQVNTCitUZXN0IDE4OiBQQVNTCitUZXN0IDE5OiBQQVNTCitU
ZXN0IDIwOiBQQVNTCitOb2RlIGNvdW50OiBQQVNTCitJbnRlcnNlY3Rpb24gb2JzZXJ2ZXIgY291
bnQ6IFBBU1MKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW50ZXJzZWN0aW9uLW9ic2VydmVy
L3Jvb3QtZWxlbWVudC1kZWxldGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnRlcnNlY3Rpb24tb2Jz
ZXJ2ZXIvcm9vdC1lbGVtZW50LWRlbGV0ZWQuaHRtbAppbmRleCA3ZTcyYzRlMDM0MmE3Yzc1ZGI1
MmZkZjFmZjFkNzgxYWExZjYwYWFhLi41OWU3YzM3OWY1YzA4NTMyYjVhNDFhZjcxYjBjYzZhNTg0
YmU5YmJiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXIvcm9v
dC1lbGVtZW50LWRlbGV0ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnRlcnNlY3Rpb24tb2Jz
ZXJ2ZXIvcm9vdC1lbGVtZW50LWRlbGV0ZWQuaHRtbApAQCAtMSw0NCArMSw5NSBAQAogPCFET0NU
WVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBJbnRlcnNlY3Rpb25PYnNlcnZlckVu
YWJsZWQ9dHJ1ZSBdIC0tPgogPGhlYWQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9nYy5qcyI+
PC9zY3JpcHQ+CiA8Ym9keT4KKzxwcmUgaWQ9ImxvZyI+VGhpcyB0ZXN0cyByZW1vdmluZyB0aGUg
cm9vdCBub2RlIG9mIEludGVyc2VjdGlvbk9ic2VydmVyLiBUaGUgcm9vdCBub2RlIHNob3VsZCBi
ZSBlbGlnaWJsZSBmb3IgR0MuCiAKLTxkaXYgaWQ9InJvb3QiIHN0eWxlPSJwb3NpdGlvbjphYnNv
bHV0ZSI+Ci0gICAgPGRpdiBpZD0idGFyZ2V0IiBzdHlsZT0id2lkdGg6IDEwMHB4OyBoZWlnaHQ6
IDEwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbiI+PC9kaXY+Ci08L2Rpdj4KLQorPC9wcmU+
CiA8c2NyaXB0PgotICAgIGZ1bmN0aW9uIG9ic2VydmVyU2hvdWxkQmVSZW1vdmVkKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7Ci0gICAgICAg
ICAgICBoYW5kbGUgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBH
Q0NvbnRyb2xsZXIuY29sbGVjdCgpOwotICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHMgJiYg
aW50ZXJuYWxzLm51bWJlck9mSW50ZXJzZWN0aW9uT2JzZXJ2ZXJzKGRvY3VtZW50KSA9PSAwKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaGFuZGxlKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmVzb2x2ZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sIDEw
KTsKLSAgICAgICAgfSk7CisKK2Z1bmN0aW9uIGNyZWF0ZVJvb3Qocm9vdElkKQoreworICAgIGNv
bnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIGNvbnRh
aW5lci5pbm5lckhUTUwgPSBgPGRpdiBpZD0iJHtyb290SWR9IiBjbGFzcz0icm9vdCIgc3R5bGU9
InBvc2l0aW9uOmFic29sdXRlIj48ZGl2IGNsYXNzPSJ0YXJnZXQiIHN0eWxlPSJ3aWR0aDogMTAw
cHg7IGhlaWdodDogMTAwcHg7IGJhY2tncm91bmQtY29sb3I6IGdyZWVuIj48L2Rpdj48L2Rpdj5g
OworICAgIGNvbnN0IHJvb3QgPSBjb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncm9v
dCcpWzBdOworICAgIHJvb3QucmVtb3ZlKCk7CisgICAgcmV0dXJuIHJvb3Q7Cit9CisKK2xldCBp
bml0aWFsTm9kZUNvdW50ID0gMDsKK3dpbmRvdy5vbmxvYWQgPSAoKSA9PiB7CisgICAgaWYgKCF3
aW5kb3cudGVzdFJ1bm5lciB8fCAhd2luZG93LmludGVybmFscykgeworICAgICAgICBsb2cudGV4
dENvbnRlbnQgKz0gJ0ZBSUwgLSBUaGlzIHRlc3QgcmVxdWlyZXMgaW50ZXJuYWxzJzsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaW50ZXJuYWxzLm51bWJlck9mSW50ZXJzZWN0aW9u
T2JzZXJ2ZXJzKGRvY3VtZW50KSkgeworICAgICAgICBsb2cudGV4dENvbnRlbnQgKz0gJ0ZBSUwg
LSBJbml0aWFsIGludGVyc2VjdGlvbiBvYnNlcnZlciBjb3VudCBpcyBub3QgemVybyc7CisgICAg
ICAgIHJldHVybjsKICAgICB9CisgICAgaW5pdGlhbE5vZGVDb3VudCA9IGludGVybmFscy5yZWZl
cmVuY2luZ05vZGVDb3VudChkb2N1bWVudCk7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7
CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgc2V0VGltZW91dCgoKSA9PiB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKSwgNTAwMCk7CisgICAgcnVuVGVzdCgxKTsKK30KKworY29u
c3QgdG90YWxUZXN0Q291bnQgPSAyMDsKK2Z1bmN0aW9uIHJ1blRlc3QodGVzdE51bWJlcikgewor
ICAgIGxvZy50ZXh0Q29udGVudCArPSBgVGVzdCAke3Rlc3ROdW1iZXJ9OiBgOworICAgIGNvbnN0
IHJvb3RJZCA9ICdyb290LScgKyB0ZXN0TnVtYmVyOworICAgIGxldCByb290ID0gY3JlYXRlUm9v
dChyb290SWQpOworICAgIHJvb3QuYWxpdmUgPSB0cnVlOworICAgIGRvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQocm9vdCk7CisKKyAgICBsZXQgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXIoKCkgPT4geyB9LCB7IHJvb3QgfSk7CisgICAgbGV0IHRhcmdldCA9IHJvb3QuZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZSgndGFyZ2V0JylbMF07CisgICAgaWYgKG9ic2VydmVyLnJvb3QgIT0g
cm9vdCkKKyAgICAgICAgcmV0dXJuIHRlc3RGYWlsZWQodGVzdE51bWJlciwgJ29ic2VydmVyLnJv
b3QgIT0gcm9vdCBhZnRlciBjb25zdHJ1Y3Rpb24nKTsKKyAgICBvYnNlcnZlci5vYnNlcnZlKHRh
cmdldCk7CisKKyAgICByb290LnJlbW92ZSgpOworICAgIHJvb3QgPSBudWxsOworICAgIHRhcmdl
dCA9IG51bGw7CisgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgb2JzZXJ2ZXIudGFrZVJlY29yZHMoKTsKKyAgICAgICAgZ2MoKTsKKworICAgICAgICBpZiAo
IW9ic2VydmVyLnJvb3QpCisgICAgICAgICAgICByZXR1cm4gdGVzdEZhaWxlZCh0ZXN0TnVtYmVy
LCAnb2JzZXJ2ZXIucm9vdCBpcyBudWxsJyk7CisgICAgICAgIGlmIChvYnNlcnZlci5yb290Lmlk
ICE9IHJvb3RJZCkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0RmFpbGVkKHRlc3ROdW1iZXIsIGBv
YnNlcnZlci5yb290LmlkICgke29ic2VydmVyLnJvb3QuaWR9KSAhPSByb290SWQgKCR7cm9vdElk
fSkgYWZ0ZXIgcnVubmluZyByQUYgYW5kIEdDYCk7CisgICAgICAgIGlmICghb2JzZXJ2ZXIucm9v
dC5hbGl2ZSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0RmFpbGVkKHRlc3ROdW1iZXIsICdvYnNl
cnZlci5hbGl2ZSBpcyBmYWxzZScpOworCisgICAgICAgIG9ic2VydmVyID0gbnVsbDsKKyAgICAg
ICAgZ2MoKTsKKworICAgICAgICBsb2cudGV4dENvbnRlbnQgKz0gJ1BBU1Ncbic7CisKKyAgICAg
ICAgaWYgKHRlc3ROdW1iZXIgPCB0b3RhbFRlc3RDb3VudCkKKyAgICAgICAgICAgIHNldFRpbWVv
dXQoKCkgPT4gcnVuVGVzdCh0ZXN0TnVtYmVyICsgMSksIDApOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGZpbmlzaCh0ZXN0TnVtYmVyKSwgMCk7CisgICAgfSk7
Cit9CisKK2Z1bmN0aW9uIHRlc3RGYWlsZWQodGVzdE51bWJlciwgZXJyb3IpCit7CisgICAgbG9n
LnRleHRDb250ZW50ICs9IGBGQUlMOiAke2Vycm9yfVxuYDsKKyAgICBmaW5pc2godGVzdE51bWJl
cik7Cit9CisKK2Z1bmN0aW9uIGZpbmlzaChmaW5pc2hlZFRlc3RDb3VudCkKK3sKKyAgICBsb2cu
dGV4dENvbnRlbnQgKz0gJ05vZGUgY291bnQ6ICc7CisgICAgbG9nLnRleHRDb250ZW50ICs9IChp
bnRlcm5hbHMucmVmZXJlbmNpbmdOb2RlQ291bnQoZG9jdW1lbnQpIDwgaW5pdGlhbE5vZGVDb3Vu
dCArIDIgKiBmaW5pc2hlZFRlc3RDb3VudCAqIDAuOCkgPyAnUEFTUycgOiAnRkFJTCAtIExlc3Mg
dGhhbiAyMCUgb2YgdGhlIHJvb3Qgbm9kZXMgd2VyZSBjb2xsZWN0ZWQnOworICAgIGxvZy50ZXh0
Q29udGVudCArPSAnXG4nOworICAgIGxvZy50ZXh0Q29udGVudCArPSAnSW50ZXJzZWN0aW9uIG9i
c2VydmVyIGNvdW50OiAnOworICAgIGxvZy50ZXh0Q29udGVudCArPSAoaW50ZXJuYWxzLm51bWJl
ck9mSW50ZXJzZWN0aW9uT2JzZXJ2ZXJzKGRvY3VtZW50KSA8IGZpbmlzaGVkVGVzdENvdW50ICog
MC44KSA/ICdQQVNTJyA6ICdGQUlMIC0gTGVzcyB0aGFuIDIwJSBvZiB0aGUgaW50ZXJzZWN0aW9u
IG9ic2VydmVycyB3ZXJlIGNvbGxlY3RlZCc7CisgICAgbG9nLnRleHRDb250ZW50ICs9ICdcbic7
CisgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CiAKLSAgICBhc3luY190ZXN0KGZ1bmN0
aW9uKHQpIHsKLSAgICAgICAgdmFyIHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm9v
dCcpOwotICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVu
Y3Rpb24oKSB7fSwgeyByb290OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm9vdCcpIH0pOzsK
LSAgICAgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YXJnZXQnKTsK
LSAgICAgICAgYXNzZXJ0X2VxdWFscyhvYnNlcnZlci5yb290LCByb290LCAnT2JzZXJ2ZXIgc3Rh
cnRzIG91dCB3aXRoIG5vbi1udWxsIHJvb3QnKTsKLSAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0
YXJnZXQpOwotICAgICAgICBhc3NlcnRfZXF1YWxzKGludGVybmFscy5udW1iZXJPZkludGVyc2Vj
dGlvbk9ic2VydmVycyhkb2N1bWVudCksIDEpOwotICAgICAgICByb290LnBhcmVudE5vZGUucmVt
b3ZlQ2hpbGQocm9vdCk7Ci0gICAgICAgIHJvb3QgPSBudWxsOwotICAgICAgICB0YXJnZXQgPSBu
dWxsOwotICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICBvYnNlcnZlci50YWtlUmVjb3JkcygpOwotICAgICAgICAgICAgb2JzZXJ2ZXJTaG91bGRC
ZVJlbW92ZWQoKS50aGVuKHQuc3RlcF9mdW5jX2RvbmUoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgYXNzZXJ0X2VxdWFscyhvYnNlcnZlci5yb290LCBudWxsLCAnT2JzZXJ2ZXIgaGFzIG51
bGwgcm9vdCBhZnRlciByb290IGVsZW1lbnQgaXMgZGVzdHJveWVkJyk7Ci0gICAgICAgICAgICB9
KSk7Ci0gICAgICAgIH0pOwotICAgIH0sICJJbnRlcnNlY3Rpb25PYnNlcnZlciBkb2Vzbid0IGtl
ZXAgdW5yZWFjaGFibGUgcm9vdCBhbGl2ZSIpOwogPC9zY3JpcHQ+CiA8L2JvZHk+CiA8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9yZXNpemUtb2JzZXJ2ZXIvcmVzaXplLW9ic2VydmVy
LXNob3VsZC1ub3QtbGVhay1vYnNlcnZlZC1ub2Rlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9yZXNpemUtb2JzZXJ2ZXIvcmVzaXplLW9ic2VydmVyLXNob3VsZC1ub3QtbGVhay1vYnNlcnZl
ZC1ub2Rlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjcwOTE0MWFhOTkzYzE3MmNhNWUxNmIz
NTcxYjc3YjE2MWFjNzRmMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3Jlc2l6ZS1v
YnNlcnZlci9yZXNpemUtb2JzZXJ2ZXItc2hvdWxkLW5vdC1sZWFrLW9ic2VydmVkLW5vZGVzLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKK1RoaXMgdGVzdHMgb2JzZXJ2aW5nIGFuIGVsZW1l
bnQgd2l0aCBhbiBSZXNpemVPYnNlcnZlciBhbmQgcmVtb3ZpbmcgdGhlIGVsZW1lbnQgZnJvbSB0
aGUgZG9jdW1lbnQuCitUaGUgZWxlbWVudCBzaG91bGQgYmVjb21lIGVsaWdpYmxlIGZvciBHQyBh
dCBzb21lIHBvaW50LgorCitQQVNTCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9yZXNpemUtb2Jz
ZXJ2ZXIvcmVzaXplLW9ic2VydmVyLXNob3VsZC1ub3QtbGVhay1vYnNlcnZlZC1ub2Rlcy5odG1s
IGIvTGF5b3V0VGVzdHMvcmVzaXplLW9ic2VydmVyL3Jlc2l6ZS1vYnNlcnZlci1zaG91bGQtbm90
LWxlYWstb2JzZXJ2ZWQtbm9kZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODkwYTUyMWRkZmE5Mjg4ZjBj
YzYyMWI1MzE2MTMwZDhmMDI2MWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcmVz
aXplLW9ic2VydmVyL3Jlc2l6ZS1vYnNlcnZlci1zaG91bGQtbm90LWxlYWstb2JzZXJ2ZWQtbm9k
ZXMuaHRtbApAQCAtMCwwICsxLDUyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+
Cis8cHJlIGlkPSJsb2ciPlRoaXMgdGVzdHMgb2JzZXJ2aW5nIGFuIGVsZW1lbnQgd2l0aCBhbiBS
ZXNpemVPYnNlcnZlciBhbmQgcmVtb3ZpbmcgdGhlIGVsZW1lbnQgZnJvbSB0aGUgZG9jdW1lbnQu
CitUaGUgZWxlbWVudCBzaG91bGQgYmVjb21lIGVsaWdpYmxlIGZvciBHQyBhdCBzb21lIHBvaW50
LgorCis8L3ByZT4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvZ2MuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdD4KKworbGV0IGluaXRpYWxOb2RlQ291bnQ7CitmdW5jdGlvbiBydW5UZXN0KCkKK3sK
KyAgICBpZiAoIXdpbmRvdy50ZXN0UnVubmVyIHx8ICF3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAg
ICAgIGxvZy50ZXh0Q29udGVudCArPSAnRkFJTCAtIFRoaXMgdGVzdCByZXF1aXJlcyBpbnRlcm5h
bHMnOyAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQo
KTsKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICBzZXRUaW1lb3V0KCgpID0+
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpLCAzMDAwKTsKKworICAgIGluaXRpYWxOb2RlQ291bnQg
PSBpbnRlcm5hbHMucmVmZXJlbmNpbmdOb2RlQ291bnQoZG9jdW1lbnQpOworCisgICAgY29uc3Qg
aW50ZXJzZWN0aW9uT2JzZXJ2ZXJzID0gW107CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7
ICsraSkKKyAgICAgICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJzLnB1c2goY3JlYXRlSW50ZXJzZWN0
aW9uT2JzZXJ2ZXIoKSk7CisKKyAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4geworICAg
ICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgICAgIGdjKCk7CisgICAgICAgICAgICBs
b2cudGV4dENvbnRlbnQgKz0gaW50ZXJuYWxzLnJlZmVyZW5jaW5nTm9kZUNvdW50KGRvY3VtZW50
KSA8IGluaXRpYWxOb2RlQ291bnQgKyBpbnRlcnNlY3Rpb25PYnNlcnZlcnMubGVuZ3RoICogMC44
ID8gJ1BBU1MnIDogJ0ZBSUwgLSBMZXNzIHRoYW4gMjAlIG9mIG5vZGVzIHdlcmUgY29sbGVjdGVk
LicKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9LCAwKTsK
KyAgICB9KTsKK30KKworZnVuY3Rpb24gY3JlYXRlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKQorewor
ICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBj
b25zdCBpbnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7IH0p
Lm9ic2VydmUoZWxlbWVudCk7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50
KTsKKyAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgZWxlbWVudC5yZW1vdmUoKTsKKyAg
ICB9LCAwKTsKKyAgICByZXR1cm4gaW50ZXJzZWN0aW9uT2JzZXJ2ZXI7Cit9CisKK29ubG9hZCA9
IHJ1blRlc3Q7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433234</attachid>
            <date>2021-07-09 12:52:55 -0700</date>
            <delta_ts>2021-07-09 17:15:34 -0700</delta_ts>
            <desc>Fixed the test</desc>
            <filename>bug-227194-20210709125254.patch</filename>
            <type>text/plain</type>
            <size>41959</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5NzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmM1MWI3OWE4YWFhNjIz
ZGY4NTRmYzBkODg3MWFkN2ZjMDgyODA3Ny4uM2Q3OTdmNzI5NzhjOWEyMWJkYzhjMDIwOGExMGZk
YjQ5Mzg1OTczMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDIxLTA3LTA5ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlc2l6ZU9ic2VydmVyIC8g
SW50ZXJzZWN0aW9uT2JzZXJ2ZXIgbWVtb3J5IGxlYWsgb24gZGV0YWNoZWQgJiBvdXQgb2YgcmVm
ZXJlbmNlIGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjcxOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc5ODM5ODUxPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBtZW1vcnkgbGVh
ayB3YXMgY2F1c2VkIGJ5IFJlc2l6ZU9ic2VydmVyIGFuZCBJbnRlcnNlY3Rpb25PYnNlcnZlciBr
ZWVwaW5nIHRoZWlyIHJlc3BlY3RpdmUKKyAgICAgICAgSlMgd3JhcHBlciBvYmplY3RzIGFsaXZl
IHNvIGxvbmcgYXMgdGhlcmUgYXJlIHNvbWUgb2JzZXJ2ZWQgZWxlbWVudHMgYnkgaGF2aW5nIHBl
bmRpbmcKKyAgICAgICAgYWN0aXZpdHkgYXMgQWN0aXZlRE9NT2JqZWN0cy4gVGhpcyBpcyBub3Qg
dGhlIHJpZ2h0IEdDIG1vZGVsIGZvciB0aGVzZSBKUyB3cmFwcGVyIG9iamVjdHMKKyAgICAgICAg
c2luY2UgdGhlcmUgaXMgbm8gb2J2aW91cyBlbmQgdG8gdGhlc2UgYWN0aXZpdGllcy4gU28gbG9u
ZyBhcyB0aGUgb2JzZXJ2ZWQgbm9kZXMgYXJlIGFsaXZlLAorICAgICAgICBSZXNpemVPYnNlcnZl
ciBhbmQgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgbWF5IGdldCBuZXcgb2JzZXJ2YXRpb24gZW50cmll
cyBxdWV1ZWQgbGF0ZXIuCisKKyAgICAgICAgVG8gYWRkcmVzcyB0aGlzIGlzc3VlLCB0aGlzIHBh
dGNoIHJld29ya3MgdGhlIHdheSBSZXNpemVPYnNlcnZlciBhbmQgSW50ZXJzZWN0aW9uT2JzZXJ2
ZXIga2VlcAorICAgICAgICB0aGVpciBKUyB3cmFwcGVycyBhbGl2ZS4gTmFtZWx5LCB0aGV5J3Jl
IG5vIGxvbmdlciBBY3RpdmVET01PYmplY3RzLiBJbnN0ZWFkLCB0aGVpciBKUyB3cmFwcGVycwor
ICAgICAgICB3b3VsZCB1c2UgdGhlaXIgcmVzcGVjdGl2ZSBvYnNlcnZlZCBub2RlcyBhcyBvcGFx
dWUgcm9vdHMuIGkuZS4gc28gbG9uZyBhcyBhbnkgb2YgdGhlIG9ic2VydmVkCisgICAgICAgIG5v
ZGVzIGFyZSBrZXB0IGFsaXZlIGJ5IEdDLCB0aGVuIGl0cyBvYnNlcnZlcidzIEpTIHdyYXBwZXIg
aXMga2VwdCBhbGl2ZS4KKworICAgICAgICBSZXNpemVPYnNlcnZlciBoYWQgYW4gYWRkaXRpb25h
bCBidWcgdGhhdCBldmVyeSBvYnNlcnZlZCBub2RlIHdhcyBrZXB0IHVzaW5nIEdDUmVhY2hhYmxl
UmVmLAorICAgICAgICB3aGljaCBvYnZpb3VzbHkgbGVha2VkIGV2ZXJ5IG9ic2VydmVkIG5vZGUg
dW50aWwgdGhlIG9ic2VydmF0aW9ucyB3ZXJlIGV4cGxpY2l0bHkgY2xlYXJlZC4KKyAgICAgICAg
VGhpcyBwYXRjaCBtYWtlcyBvbmx5IHRoZSB0YXJnZXQgZWxlbWVudHMgb2YgdGhlIGFjdGl2ZSBv
YnNlcnZhdGlvbnMgKGkuZS4gdGhlcmUgYXJlIGVudHJpZXMKKyAgICAgICAgdG8gYmUgZGVsaXZl
cmVkIHRvIHRoZSBvYnNlcnZlciBjYWxsYmFjaykgYXJlIGtlcHQgYWxpdmUgd2l0aCBHQ1JlYWNo
YWJsZVJlZiBhcyBkb25lIHdpdGgKKyAgICAgICAgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgYW5kIE11
dGF0aW9uT2JzZXJ2ZXIuCisKKyAgICAgICAgRmluYWxseSwgdGhpcyBwYXRjaCBmaXhlcyB0aGUg
YnVnIHRoYXQgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgd2Fzbid0IGtlZXBpbmcgaXRzIHJvb3Qgbm9k
ZSBhbGl2ZS4KKyAgICAgICAgV2UgZXZlbiBoYWQgYSB0ZXN0IHdoaWNoIHdhcyB0ZXN0aW5nIHRo
aXMgZXJyb25lb3VzbHkgYmVoYXZpb3IuIFRoZSB0ZXN0IGhhcyBiZWVuIHJld3JpdHRlbiB0bwor
ICAgICAgICBleHBlY3QgdGhlIG5ldyBiZWhhdmlvci4KKworICAgICAgICBUZXN0czogaW50ZXJz
ZWN0aW9uLW9ic2VydmVyL2ludGVyc2VjdGlvbi1vYnNlcnZlci1zaG91bGQtbm90LWxlYWstb2Jz
ZXJ2ZWQtbm9kZXMuaHRtbAorICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uLW9ic2VydmVyL3Jv
b3QtZWxlbWVudC1kZWxldGVkLmh0bWwKKyAgICAgICAgICAgICAgIHJlc2l6ZS1vYnNlcnZlci9y
ZXNpemUtb2JzZXJ2ZXItc2hvdWxkLW5vdC1sZWFrLW9ic2VydmVkLW5vZGVzLmh0bWwKKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNJbnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4pOiBBZGQgdGhlIHJvb3Qgbm9kZSBhcyBhbiBvcGFxdWUgcm9vdC4KKyAgICAgICAgVGhp
cyBoYXMgYW4gZWZmZWN0IG9mIGtlZXBpbmcgdGhlIHJvb3Qgbm9kZSBhbGl2ZSBzbyBsb25nIGFz
IEludGVyc2VjdGlvbk9ic2VydmVyIGlzIGFsaXZlLgorICAgICAgICAoV2ViQ29yZTo6SlNJbnRl
cnNlY3Rpb25PYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6IEFkZGVk
LgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNSZXNpemVPYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyk6IEFkZGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlSW50ZXJzZWN0aW9uT2JzZXJ2YXRpb25zKToKKyAgICAg
ICAgKiBodG1sL0xhenlMb2FkRnJhbWVPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXp5TG9hZEZyYW1lT2JzZXJ2ZXI6OmlzT2JzZXJ2ZWQgY29uc3QpOgorICAgICAgICAqIGh0bWwv
TGF6eUxvYWRJbWFnZU9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxhenlMb2FkSW1h
Z2VPYnNlcnZlcjo6aXNPYnNlcnZlZCBjb25zdCk6CisgICAgICAgICogcGFnZS9JbnRlcnNlY3Rp
b25PYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3Rpb25PYnNlcnZlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVyc2VjdGlvbk9ic2VydmVyOjpJbnRlcnNl
Y3Rpb25PYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3Rpb25PYnNlcnZlcjo6
fkludGVyc2VjdGlvbk9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVyc2VjdGlvbk9i
c2VydmVyOjppc09ic2VydmluZyBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJzZWN0aW9uT2JzZXJ2ZXI6Om9ic2VydmUpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0
aW9uT2JzZXJ2ZXI6OnZpcnR1YWxIYXNQZW5kaW5nQWN0aXZpdHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OmFjdGl2ZURPTU9iamVjdE5h
bWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9uT2JzZXJ2
ZXI6OnN0b3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9uT2JzZXJ2
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzIGNvbnN0KTogQWRkZWQuCisgICAgICAgICog
cGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0
aW9uT2JzZXJ2ZXI6OnJvb3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9u
T2JzZXJ2ZXI6Om9ic2VydmF0aW9uVGFyZ2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcnNlY3Rpb25PYnNlcnZlcjo6aGFzT2JzZXJ2YXRpb25UYXJnZXRzIGNvbnN0KToKKyAgICAg
ICAgKiBwYWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmlkbDoKKyAgICAgICAgKiBwYWdlL1Jlc2l6
ZU9ic2VydmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc2l6ZU9ic2VydmF0aW9uOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzaXplT2JzZXJ2YXRpb246OlJlc2l6ZU9ic2Vy
dmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc2l6ZU9ic2VydmF0aW9uOjp0YXJnZXRFbGVt
ZW50RGVwdGggY29uc3QpOgorICAgICAgICAqIHBhZ2UvUmVzaXplT2JzZXJ2YXRpb24uaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc2l6ZU9ic2VydmF0aW9uOjp0YXJnZXQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzaXplT2JzZXJ2YXRpb24pOiBSZW5hbWVkIG1fcGVuZGluZ1RhcmdldHMg
dG8gbV9hY3RpdmVPYnNlcnZhdGlvblRhcmdldHMgdG8gcmVmbGVjdAorICAgICAgICB0aGUgbmV3
IHNlbWFudGljcy4KKyAgICAgICAgKiBwYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlc2l6ZU9ic2VydmVyOjpSZXNpemVPYnNlcnZlcik6CisgICAgICAgIChXZWJD
b3JlOjpSZXNpemVPYnNlcnZlcjo6b2JzZXJ2ZSk6IERvbid0IHN0b3JlIHRoZSBuZXcgb2JzZXJ2
YXRpb24gdGFyZ2V0IHdpdGggR0NSZWFjaGFibGVSZWYgYXMKKyAgICAgICAgdGhhdCB3b3VsZCBy
ZXN1bHQgaW4gYW4gaW1tZWRpYXRlIGxlYWsgb2YgdGhpcyBlbGVtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6UmVzaXplT2JzZXJ2ZXI6OmdhdGhlck9ic2VydmF0aW9ucyk6IE5vdyB0aGF0IHdlIGhh
dmUgYW4gYWN0aXZlIG9ic2VydmF0aW9uIChpLmUuIHRoZXJlCisgICAgICAgIGlzIGFuIGVudHJ5
IHRvIGJlIGRlbGl2ZXJlZCB0byB0aGUgSlMgY2FsbGJhY2spLCBzdG9yZSB0aGUgdGFyZ2V0IGVs
ZW1lbnQgdXNpbmcgR0NSZWFjaGFibGVSZWYuCisgICAgICAgIFRoaXMga2VlcHMgdGhlIEpTIHdy
YXBwZXIgb2YgdGhpcyB0YXJnZXQgZWxlbWVudCBhbGl2ZSBiZXR3ZWVuIG5vdyBhbmQgd2hlbiB0
aGUgSlMgY2FsbGJhY2sgaXMKKyAgICAgICAgbm90aWZpZWQgb2YgdGhpcyBlbGVtZW50J3MgcmVz
aXplLiBXaXRob3V0IHRoaXMgR0NSZWFjaGFibGVSZWYsIEpTIHdyYXBwZXIgb2YgdGhlIGVsZW1l
bnQgY2FuIGJlCisgICAgICAgIGVycm9uZW91c2x5IGNvbGxlY3RlZCB3aGVuIHRoZXJlIGlzIG5v
IEpTIHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBhbmQgdGhlIGVsZW1lbnQgaXMgbm8gbG9uZ2Vy
IGluCisgICAgICAgIGFueSBsaXZlIGRvY3VtZW50LiBOb3RlIHRoYXQgdGhpcyBHQyBiZWhhdmlv
ciBpcyBhbHJlYWR5IHRlc3RlZCBieSBleGlzdGluZyB0ZXN0cy4gVGhpcyBwYXRjaAorICAgICAg
ICBzaW1wbHkgZGVsYXlzIHRoZSB1c2Ugb2YgR0NSZWFjaGFibGVSZWYgZnJvbSB3aGVuIFJlc2l6
ZU9ic2VydmVyIHN0YXJ0ZWQgb2JzZXJ2aW5nIHRoaXMgZWxlbWVudAorICAgICAgICB0byB3aGVu
IHdlIGNyZWF0ZWQgYW4gYWN0aXZlIG9ic2VydmF0aW9uIGZvciB0aGUgZWxlbWVudDsgdGhpcyBp
cyBiZWNhdXNlIEdDUmVhY2hhYmxlUmVmIGxpa2UKKyAgICAgICAgYSBwZW5kaW5nIGFjdGl2aXR5
IG9mIEFjdGl2ZURPTU9iamVjdCBpcyBvbmx5IGFwcHJvcHJpYXRlIHdoZW4gdGhlcmUgaXMgYSBk
ZWZpbml0ZSBlbmQgdG8gaXQuCisgICAgICAgIChXZWJDb3JlOjpSZXNpemVPYnNlcnZlcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlc2l6ZU9ic2VydmVyOjpyZW1vdmVBbGxUYXJnZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c2l6ZU9ic2VydmVyOjpyZW1vdmVPYnNlcnZhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNp
emVPYnNlcnZlcjo6dmlydHVhbEhhc1BlbmRpbmdBY3Rpdml0eSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZXNpemVPYnNlcnZlcjo6YWN0aXZlRE9NT2JqZWN0TmFtZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNpemVPYnNlcnZlcjo6c3RvcCk6IERl
bGV0ZWQuCisgICAgICAgICogcGFnZS9SZXNpemVPYnNlcnZlci5oOgorICAgICAgICAqIHBhZ2Uv
UmVzaXplT2JzZXJ2ZXIuaWRsOgorCiAyMDIxLTA3LTA3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgT3VyIHN0cnVjdHVyZWQgY2xvbmluZyBpbXBsZW1lbnRhdGlv
biBkb2VzIG5vdCBlbmNvZGUgYWxsIG9mIFJlZ0V4cCdzIGZsYWdzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20u
Y3BwCmluZGV4IDdjMWI1ZjFhMWFhNWQ2MzgzZTdjMjExNDk0ZWJkMjQ3ZTY1YjA2ZDQuLjA1NjA4
MTA5YjViNzFhYmNhYmIyNmQ0MTk3YWQ1YjNiMDliMzQ4MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20u
Y3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNJ
bnRlcnNlY3Rpb25PYnNlcnZlci5oIgogCisjaW5jbHVkZSAiSlNOb2RlQ3VzdG9tLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0zNiw4ICszNywxOSBAQCB2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIGNhbGxi
YWNrID0gd3JhcHBlZCgpLmNhbGxiYWNrQ29uY3VycmVudGx5KCkpCiAgICAgICAgIGNhbGxiYWNr
LT52aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJv
b3Qod3JhcHBlZCgpLnJvb3QoKSkpOwogfQogCiBERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElM
RFJFTihKU0ludGVyc2VjdGlvbk9ic2VydmVyKTsKIAorYm9vbCBKU0ludGVyc2VjdGlvbk9ic2Vy
dmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKipyZWFzb24pCit7CisgICAgaWYgKGpzQ2FzdDxKU0ludGVyc2VjdGlvbk9ic2Vy
dmVyKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpLT53cmFwcGVkKCkuaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHModmlzaXRvcikpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCisg
ICAgICAgICAgICAqcmVhc29uID0gIlJlYWNoYWJsZSBmcm9tIG9ic2VydmVkIG5vZGVzIjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNSZXNpemVPYnNlcnZlckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1Jlc2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAppbmRleCAzNGQ3NzkzYjBlOTQxMDkyZGY4N2ViZmEw
NTIwYjQzYmVhMmM5ZTdhLi5hNjIwNTEyOWViZTg2NzQ3MmQ2YTdjNTkwNTE3YmJmNTlkZDVlZDI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVy
Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2Vy
dmVyQ3VzdG9tLmNwcApAQCAtNDEsNCArNDEsMTQgQEAgdm9pZCBKU1Jlc2l6ZU9ic2VydmVyOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogCiBERUZJTkVfVklTSVRf
QURESVRJT05BTF9DSElMRFJFTihKU1Jlc2l6ZU9ic2VydmVyKTsKIAorYm9vbCBKU1Jlc2l6ZU9i
c2VydmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBjb25zdCBjaGFyKipyZWFzb24pCit7CisgICAgaWYgKGpzQ2FzdDxKU1Jlc2l6ZU9ic2VydmVy
Kj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpLT53cmFwcGVkKCkuaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHModmlzaXRvcikpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCisgICAg
ICAgICAgICAqcmVhc29uID0gIlJlYWNoYWJsZSBmcm9tIG9ic2VydmVkIG5vZGVzIjsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggM2NlODYyMGQ0Mjk0ZTg5
NjcyNzEyNzY1MzRhNjc4NDM1MjFhZjljNi4uOTI2OWJlOTc0YjUzM2Q3ZmM4NjUyYzY0M2UwNDRi
MGI4ZGFhMTQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC03OTExLDcgKzc5MTEsNyBA
QCB2b2lkIERvY3VtZW50Ojp1cGRhdGVJbnRlcnNlY3Rpb25PYnNlcnZhdGlvbnMoKQogICAgICAg
ICBhdXRvIHRpbWVzdGFtcCA9IG9ic2VydmVyLT5ub3dUaW1lc3RhbXAoKTsKICAgICAgICAgaWYg
KCF0aW1lc3RhbXApCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yIChFbGVtZW50
KiB0YXJnZXQgOiBvYnNlcnZlci0+b2JzZXJ2YXRpb25UYXJnZXRzKCkpIHsKKyAgICAgICAgZm9y
IChhdXRvJiB0YXJnZXQgOiBvYnNlcnZlci0+b2JzZXJ2YXRpb25UYXJnZXRzKCkpIHsKICAgICAg
ICAgICAgIGF1dG8mIHRhcmdldFJlZ2lzdHJhdGlvbnMgPSB0YXJnZXQtPmludGVyc2VjdGlvbk9i
c2VydmVyRGF0YUlmRXhpc3RzKCktPnJlZ2lzdHJhdGlvbnM7CiAgICAgICAgICAgICBhdXRvIGlu
ZGV4ID0gdGFyZ2V0UmVnaXN0cmF0aW9ucy5maW5kTWF0Y2hpbmcoW29ic2VydmVyXShhdXRvJiBy
ZWdpc3RyYXRpb24pIHsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVnaXN0cmF0aW9uLm9ic2Vy
dmVyLmdldCgpID09IG9ic2VydmVyOwpAQCAtNzk2OCw3ICs3OTY4LDcgQEAgdm9pZCBEb2N1bWVu
dDo6dXBkYXRlSW50ZXJzZWN0aW9uT2JzZXJ2YXRpb25zKCkKICAgICAgICAgICAgICAgICAgICAg
eyB0YXJnZXRCb3VuZGluZ0NsaWVudFJlY3QueCgpLCB0YXJnZXRCb3VuZGluZ0NsaWVudFJlY3Qu
eSgpLCB0YXJnZXRCb3VuZGluZ0NsaWVudFJlY3Qud2lkdGgoKSwgdGFyZ2V0Qm91bmRpbmdDbGll
bnRSZWN0LmhlaWdodCgpIH0sCiAgICAgICAgICAgICAgICAgICAgIHsgY2xpZW50SW50ZXJzZWN0
aW9uUmVjdC54KCksIGNsaWVudEludGVyc2VjdGlvblJlY3QueSgpLCBjbGllbnRJbnRlcnNlY3Rp
b25SZWN0LndpZHRoKCksIGNsaWVudEludGVyc2VjdGlvblJlY3QuaGVpZ2h0KCkgfSwKICAgICAg
ICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uUmF0aW8sCi0gICAgICAgICAgICAgICAgICAgIHRh
cmdldCwKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmdldCgpLAogICAgICAgICAgICAgICAg
ICAgICB0aHJlc2hvbGRJbmRleCA+IDAsCiAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAg
ICAgICAgIG5lZWROb3RpZnkgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9MYXp5TG9hZEZyYW1lT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9MYXp5TG9h
ZEZyYW1lT2JzZXJ2ZXIuY3BwCmluZGV4IDdjMmJhMTVhNTE0ZTQzZGQ5NzIyNzUxMDllM2RiOTQy
ZTg1MjMyYjYuLjc0MGZlYTE4NTNlNDQ5Y2Y0NDFkZmU1YWJhZGMwZGU1MzFkNTUxOWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGF6eUxvYWRGcmFtZU9ic2VydmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0xhenlMb2FkRnJhbWVPYnNlcnZlci5jcHAKQEAgLTEwMyw3
ICsxMDMsNyBAQCBJbnRlcnNlY3Rpb25PYnNlcnZlciogTGF6eUxvYWRGcmFtZU9ic2VydmVyOjpp
bnRlcnNlY3Rpb25PYnNlcnZlcihEb2N1bWVudCYgZG9jdQogCiBib29sIExhenlMb2FkRnJhbWVP
YnNlcnZlcjo6aXNPYnNlcnZlZChFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewotICAgIHJldHVy
biBtX29ic2VydmVyICYmIG1fb2JzZXJ2ZXItPm9ic2VydmF0aW9uVGFyZ2V0cygpLmNvbnRhaW5z
KCZlbGVtZW50KTsKKyAgICByZXR1cm4gbV9vYnNlcnZlciAmJiBtX29ic2VydmVyLT5pc09ic2Vy
dmluZyhlbGVtZW50KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9M
YXp5TG9hZEltYWdlT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9MYXp5TG9hZElt
YWdlT2JzZXJ2ZXIuY3BwCmluZGV4IGY2YzY0MjBkY2I3N2Q1M2M2YmEwZTIyM2YzYmNhMDQ3ZGM0
ZTk4ZWQuLjE0ZjJkZWZjMjI2ZmIwZmIwM2MyNzU4NmU2YzE3ODlmNzFmN2M5NDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGF6eUxvYWRJbWFnZU9ic2VydmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0xhenlMb2FkSW1hZ2VPYnNlcnZlci5jcHAKQEAgLTk1LDcgKzk1
LDcgQEAgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIqIExhenlMb2FkSW1hZ2VPYnNlcnZlcjo6aW50ZXJz
ZWN0aW9uT2JzZXJ2ZXIoRG9jdW1lbnQmIGRvY3UKIAogYm9vbCBMYXp5TG9hZEltYWdlT2JzZXJ2
ZXI6OmlzT2JzZXJ2ZWQoRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9v
YnNlcnZlciAmJiBtX29ic2VydmVyLT5vYnNlcnZhdGlvblRhcmdldHMoKS5jb250YWlucygmZWxl
bWVudCk7CisgICAgcmV0dXJuIG1fb2JzZXJ2ZXIgJiYgbV9vYnNlcnZlci0+aXNPYnNlcnZpbmco
ZWxlbWVudCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNl
cnZlci5jcHAKaW5kZXggMTRiYWVhMGRmZTQzNTZiYjk3OTU4ZWY3MzRkMGJjM2RkZTM2YTc5YS4u
YzVlN2ZkMmEwZjA3NjA4YmFkMDYyYWZjZGMxZTNiODJiZGMwZjU5NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNp
bmNsdWRlICJJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXJFbnRyeS5oIgogI2luY2x1ZGUgIlBlcmZvcm1hbmNlLmgiCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg2LDcgKzg3LDcgQEAg
c3RhdGljIEV4Y2VwdGlvbk9yPExlbmd0aEJveD4gcGFyc2VSb290TWFyZ2luKFN0cmluZyYgcm9v
dE1hcmdpbikKIAogRXhjZXB0aW9uT3I8UmVmPEludGVyc2VjdGlvbk9ic2VydmVyPj4gSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXI6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIFJlZjxJbnRlcnNlY3Rp
b25PYnNlcnZlckNhbGxiYWNrPiYmIGNhbGxiYWNrLCBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6SW5p
dCYmIGluaXQpCiB7Ci0gICAgQ29udGFpbmVyTm9kZSogcm9vdCA9IG51bGxwdHI7CisgICAgUmVm
UHRyPENvbnRhaW5lck5vZGU+IHJvb3Q7CiAgICAgaWYgKGluaXQucm9vdCkgewogICAgICAgICBX
VEY6OnN3aXRjaE9uKCppbml0LnJvb3QsIFsmcm9vdF0gKFJlZlB0cjxFbGVtZW50PiBlbGVtZW50
KSB7CiAgICAgICAgICAgICByb290ID0gZWxlbWVudC5nZXQoKTsKQEAgLTExMiwzNyArMTEzLDM2
IEBAIEV4Y2VwdGlvbk9yPFJlZjxJbnRlcnNlY3Rpb25PYnNlcnZlcj4+IEludGVyc2VjdGlvbk9i
c2VydmVyOjpjcmVhdGUoRG9jdW1lbnQmIGRvCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgUmFuZ2VFcnJvciwgIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ0ludGVyc2VjdGlvbk9ic2VydmVy
JzogYWxsIHRocmVzaG9sZHMgbXVzdCBsaWUgaW4gdGhlIHJhbmdlIFswLjAsIDEuMF0uIiB9Owog
ICAgIH0KIAotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGRv
Y3VtZW50LCBXVEZNb3ZlKGNhbGxiYWNrKSwgcm9vdCwgcm9vdE1hcmdpbk9yRXhjZXB0aW9uLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpLCBXVEZNb3ZlKHRocmVzaG9sZHMpKSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZG9jdW1lbnQsIFdURk1vdmUoY2FsbGJh
Y2spLCByb290LmdldCgpLCByb290TWFyZ2luT3JFeGNlcHRpb24ucmVsZWFzZVJldHVyblZhbHVl
KCksIFdURk1vdmUodGhyZXNob2xkcykpKTsKIH0KIAogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6Oklu
dGVyc2VjdGlvbk9ic2VydmVyKERvY3VtZW50JiBkb2N1bWVudCwgUmVmPEludGVyc2VjdGlvbk9i
c2VydmVyQ2FsbGJhY2s+JiYgY2FsbGJhY2ssIENvbnRhaW5lck5vZGUqIHJvb3QsIExlbmd0aEJv
eCYmIHBhcnNlZFJvb3RNYXJnaW4sIFZlY3Rvcjxkb3VibGU+JiYgdGhyZXNob2xkcykKLSAgICA6
IEFjdGl2ZURPTU9iamVjdChjYWxsYmFjay0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAg
ICwgbV9yb290KHJvb3QpCisgICAgOiBtX3Jvb3QobWFrZVdlYWtQdHIocm9vdCkpCiAgICAgLCBt
X3Jvb3RNYXJnaW4oV1RGTW92ZShwYXJzZWRSb290TWFyZ2luKSkKICAgICAsIG1fdGhyZXNob2xk
cyhXVEZNb3ZlKHRocmVzaG9sZHMpKQogICAgICwgbV9jYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNr
KSkKIHsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KG1fcm9vdCkpIHsKLSAgICAgICAgYXV0byYgb2Jz
ZXJ2ZXJEYXRhID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCptX3Jvb3QpLmVuc3VyZUludGVyc2VjdGlv
bk9ic2VydmVyRGF0YSgpOworICAgIGlmIChpczxEb2N1bWVudD4ocm9vdCkpIHsKKyAgICAgICAg
YXV0byYgb2JzZXJ2ZXJEYXRhID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpyb290KS5lbnN1cmVJbnRl
cnNlY3Rpb25PYnNlcnZlckRhdGEoKTsKICAgICAgICAgb2JzZXJ2ZXJEYXRhLm9ic2VydmVycy5h
cHBlbmQobWFrZVdlYWtQdHIodGhpcykpOwotICAgIH0gZWxzZSBpZiAobV9yb290KSB7Ci0gICAg
ICAgIEFTU0VSVChpczxFbGVtZW50PihtX3Jvb3QpKTsKLSAgICAgICAgYXV0byYgb2JzZXJ2ZXJE
YXRhID0gZG93bmNhc3Q8RWxlbWVudD4oKm1fcm9vdCkuZW5zdXJlSW50ZXJzZWN0aW9uT2JzZXJ2
ZXJEYXRhKCk7CisgICAgfSBlbHNlIGlmIChyb290KSB7CisgICAgICAgIEFTU0VSVChpczxFbGVt
ZW50Pihyb290KSk7CisgICAgICAgIGF1dG8mIG9ic2VydmVyRGF0YSA9IGRvd25jYXN0PEVsZW1l
bnQ+KCpyb290KS5lbnN1cmVJbnRlcnNlY3Rpb25PYnNlcnZlckRhdGEoKTsKICAgICAgICAgb2Jz
ZXJ2ZXJEYXRhLm9ic2VydmVycy5hcHBlbmQobWFrZVdlYWtQdHIodGhpcykpOwogICAgIH0gZWxz
ZSBpZiAoYXV0byogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpKQogICAgICAgICBtX2ltcGxpY2l0
Um9vdERvY3VtZW50ID0gbWFrZVdlYWtQdHIoZnJhbWUtPm1haW5GcmFtZSgpLmRvY3VtZW50KCkp
OwogCiAgICAgc3RkOjpzb3J0KG1fdGhyZXNob2xkcy5iZWdpbigpLCBtX3RocmVzaG9sZHMuZW5k
KCkpOwotICAgIHN1c3BlbmRJZk5lZWRlZCgpOwogfQogCiBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6
fkludGVyc2VjdGlvbk9ic2VydmVyKCkKIHsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KG1fcm9vdCkp
IHsKLSAgICAgICAgZG93bmNhc3Q8RG9jdW1lbnQ+KCptX3Jvb3QpLmludGVyc2VjdGlvbk9ic2Vy
dmVyRGF0YUlmRXhpc3RzKCktPm9ic2VydmVycy5yZW1vdmVGaXJzdCh0aGlzKTsKLSAgICB9IGVs
c2UgaWYgKG1fcm9vdCkgewotICAgICAgICBBU1NFUlQoaXM8RWxlbWVudD4obV9yb290KSk7Ci0g
ICAgICAgIGRvd25jYXN0PEVsZW1lbnQ+KCptX3Jvb3QpLmludGVyc2VjdGlvbk9ic2VydmVyRGF0
YUlmRXhpc3RzKCktPm9ic2VydmVycy5yZW1vdmVGaXJzdCh0aGlzKTsKKyAgICBSZWZQdHIgcm9v
dCA9IG1fcm9vdC5nZXQoKTsKKyAgICBpZiAoaXM8RG9jdW1lbnQ+KHJvb3QpKSB7CisgICAgICAg
IGRvd25jYXN0PERvY3VtZW50Pigqcm9vdCkuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJEYXRhSWZFeGlz
dHMoKS0+b2JzZXJ2ZXJzLnJlbW92ZUZpcnN0KHRoaXMpOworICAgIH0gZWxzZSBpZiAocm9vdCkg
eworICAgICAgICBBU1NFUlQoaXM8RWxlbWVudD4ocm9vdCkpOworICAgICAgICBkb3duY2FzdDxF
bGVtZW50Pigqcm9vdCkuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJEYXRhSWZFeGlzdHMoKS0+b2JzZXJ2
ZXJzLnJlbW92ZUZpcnN0KHRoaXMpOwogICAgIH0KICAgICBkaXNjb25uZWN0KCk7CiB9CkBAIC0x
NTcsMTQgKzE1NywyMiBAQCBTdHJpbmcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnJvb3RNYXJnaW4o
KSBjb25zdAogICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKK2Jvb2wg
SW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OmlzT2JzZXJ2aW5nKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb2JzZXJ2YXRpb25UYXJnZXRzLmZpbmRNYXRjaGluZyhb
Jl0oYXV0byYgdGFyZ2V0KSB7CisgICAgICAgIHJldHVybiB0YXJnZXQuZ2V0KCkgPT0gJmVsZW1l
bnQ7CisgICAgfSkgIT0gbm90Rm91bmQ7Cit9CisKIHZvaWQgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6
Om9ic2VydmUoRWxlbWVudCYgdGFyZ2V0KQogewotICAgIGlmICghdHJhY2tpbmdEb2N1bWVudCgp
IHx8ICFtX2NhbGxiYWNrIHx8IG1fb2JzZXJ2YXRpb25UYXJnZXRzLmNvbnRhaW5zKCZ0YXJnZXQp
KQorICAgIGlmICghdHJhY2tpbmdEb2N1bWVudCgpIHx8ICFtX2NhbGxiYWNrIHx8IGlzT2JzZXJ2
aW5nKHRhcmdldCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHRhcmdldC5lbnN1cmVJbnRlcnNl
Y3Rpb25PYnNlcnZlckRhdGEoKS5yZWdpc3RyYXRpb25zLmFwcGVuZCh7IG1ha2VXZWFrUHRyKHRo
aXMpLCBzdGQ6Om51bGxvcHQgfSk7CiAgICAgYm9vbCBoYWRPYnNlcnZhdGlvblRhcmdldHMgPSBo
YXNPYnNlcnZhdGlvblRhcmdldHMoKTsKLSAgICBtX29ic2VydmF0aW9uVGFyZ2V0cy5hcHBlbmQo
JnRhcmdldCk7CisgICAgbV9vYnNlcnZhdGlvblRhcmdldHMuYXBwZW5kKG1ha2VXZWFrUHRyKHRh
cmdldCkpOworCiAgICAgYXV0byogZG9jdW1lbnQgPSB0cmFja2luZ0RvY3VtZW50KCk7CiAgICAg
aWYgKCFoYWRPYnNlcnZhdGlvblRhcmdldHMpCiAgICAgICAgIGRvY3VtZW50LT5hZGRJbnRlcnNl
Y3Rpb25PYnNlcnZlcigqdGhpcyk7CkBAIC0yMjMsNyArMjMxLDcgQEAgYm9vbCBJbnRlcnNlY3Rp
b25PYnNlcnZlcjo6cmVtb3ZlVGFyZ2V0UmVnaXN0cmF0aW9uKEVsZW1lbnQmIHRhcmdldCkKIAog
dm9pZCBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6cmVtb3ZlQWxsVGFyZ2V0cygpCiB7Ci0gICAgZm9y
IChhdXRvKiB0YXJnZXQgOiBtX29ic2VydmF0aW9uVGFyZ2V0cykgeworICAgIGZvciAoYXV0byYg
dGFyZ2V0IDogbV9vYnNlcnZhdGlvblRhcmdldHMpIHsKICAgICAgICAgYm9vbCByZW1vdmVkID0g
cmVtb3ZlVGFyZ2V0UmVnaXN0cmF0aW9uKCp0YXJnZXQpOwogICAgICAgICBBU1NFUlRfVU5VU0VE
KHJlbW92ZWQsIHJlbW92ZWQpOwogICAgIH0KQEAgLTI3OSwyMiArMjg3LDEzIEBAIHZvaWQgSW50
ZXJzZWN0aW9uT2JzZXJ2ZXI6Om5vdGlmeSgpCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRGaXJlT2JzZXJ2ZXJDYWxsYmFjaygqY29udGV4dCk7CiB9CiAKLWJvb2wgSW50ZXJzZWN0
aW9uT2JzZXJ2ZXI6OnZpcnR1YWxIYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAotewotICAgIHJl
dHVybiAoaGFzT2JzZXJ2YXRpb25UYXJnZXRzKCkgJiYgdHJhY2tpbmdEb2N1bWVudCgpKSB8fCAh
bV9xdWV1ZWRFbnRyaWVzLmlzRW1wdHkoKTsKLX0KLQotY29uc3QgY2hhciogSW50ZXJzZWN0aW9u
T2JzZXJ2ZXI6OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAotewotICAgIHJldHVybiAiSW50
ZXJzZWN0aW9uT2JzZXJ2ZXIiOwotfQotCi12b2lkIEludGVyc2VjdGlvbk9ic2VydmVyOjpzdG9w
KCkKK2Jvb2wgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKLSAgICBkaXNjb25u
ZWN0KCk7Ci0gICAgbV9jYWxsYmFjayA9IG51bGxwdHI7Ci0gICAgbV9xdWV1ZWRFbnRyaWVzLmNs
ZWFyKCk7Ci0gICAgbV9wZW5kaW5nVGFyZ2V0cy5jbGVhcigpOworICAgIGZvciAoYXV0byYgdGFy
Z2V0IDogbV9vYnNlcnZhdGlvblRhcmdldHMpIHsKKyAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQg
PSB0YXJnZXQuZ2V0KCk7IGVsZW1lbnQgJiYgdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3QoZWxl
bWVudC0+b3BhcXVlUm9vdCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuaAppbmRleCBmNTA5ZDM1NjUxOGQyMTc0YTkw
YzUwMzlkMTE2YjM4MTBjN2RmY2EzLi5jMzEyNzJiNTYyZjFmZWMyZGM3N2VlNTM2NzdmNjM3MTMx
M2FjMTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2Vy
dmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5oCkBA
IC0yNyw3ICsyNyw2IEBACiAKICNpZiBFTkFCTEUoSU5URVJTRUNUSU9OX09CU0VSVkVSKQogCi0j
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiR0NSZWFjaGFibGVSZWYuaCIK
ICNpbmNsdWRlICJJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSW50
ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeS5oIgpAQCAtMzcsNiArMzYsMTIgQEAKICNpbmNsdWRlIDx3
dGYvV2Vha1B0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgQWJzdHJhY3RTbG90VmlzaXRvcjsKKworfQorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwpAQCAtNjAsNyArNjUsNyBAQCBzdHJ1Y3QgSW50
ZXJzZWN0aW9uT2JzZXJ2ZXJEYXRhIHsKICAgICBWZWN0b3I8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJS
ZWdpc3RyYXRpb24+IHJlZ2lzdHJhdGlvbnM7CiB9OwogCi1jbGFzcyBJbnRlcnNlY3Rpb25PYnNl
cnZlciA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVyc2VjdGlvbk9ic2VydmVyPiwgcHVibGljIEFj
dGl2ZURPTU9iamVjdCwgcHVibGljIENhbk1ha2VXZWFrUHRyPEludGVyc2VjdGlvbk9ic2VydmVy
PiB7CitjbGFzcyBJbnRlcnNlY3Rpb25PYnNlcnZlciA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVy
c2VjdGlvbk9ic2VydmVyPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPEludGVyc2VjdGlvbk9ic2Vy
dmVyPiB7CiBwdWJsaWM6CiAgICAgc3RydWN0IEluaXQgewogICAgICAgICBzdGQ6Om9wdGlvbmFs
PFZhcmlhbnQ8UmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8RG9jdW1lbnQ+Pj4gcm9vdDsKQEAgLTc0
LDExICs3OSwxMyBAQCBwdWJsaWM6CiAKICAgICBEb2N1bWVudCogdHJhY2tpbmdEb2N1bWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fcm9vdCA/ICZtX3Jvb3QtPmRvY3VtZW50KCkgOiBtX2ltcGxpY2l0
Um9vdERvY3VtZW50LmdldCgpOyB9CiAKLSAgICBDb250YWluZXJOb2RlKiByb290KCkgY29uc3Qg
eyByZXR1cm4gbV9yb290OyB9CisgICAgQ29udGFpbmVyTm9kZSogcm9vdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcm9vdC5nZXQoKTsgfQogICAgIFN0cmluZyByb290TWFyZ2luKCkgY29uc3Q7CiAgICAg
Y29uc3QgTGVuZ3RoQm94JiByb290TWFyZ2luQm94KCkgY29uc3QgeyByZXR1cm4gbV9yb290TWFy
Z2luOyB9CiAgICAgY29uc3QgVmVjdG9yPGRvdWJsZT4mIHRocmVzaG9sZHMoKSBjb25zdCB7IHJl
dHVybiBtX3RocmVzaG9sZHM7IH0KLSAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+IG9ic2VydmF0
aW9uVGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fb2JzZXJ2YXRpb25UYXJnZXRzOyB9CisgICAg
Y29uc3QgVmVjdG9yPFdlYWtQdHI8RWxlbWVudD4+JiBvYnNlcnZhdGlvblRhcmdldHMoKSBjb25z
dCB7IHJldHVybiBtX29ic2VydmF0aW9uVGFyZ2V0czsgfQorICAgIGJvb2wgaGFzT2JzZXJ2YXRp
b25UYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV9vYnNlcnZhdGlvblRhcmdldHMuc2l6ZSgpOyB9
CisgICAgYm9vbCBpc09ic2VydmluZyhjb25zdCBFbGVtZW50JikgY29uc3Q7CiAKICAgICB2b2lk
IG9ic2VydmUoRWxlbWVudCYpOwogICAgIHZvaWQgdW5vYnNlcnZlKEVsZW1lbnQmKTsKQEAgLTkx
LDcgKzk4LDYgQEAgcHVibGljOgogICAgIFRha2VuUmVjb3JkcyB0YWtlUmVjb3JkcygpOwogCiAg
ICAgdm9pZCB0YXJnZXREZXN0cm95ZWQoRWxlbWVudCYpOwotICAgIGJvb2wgaGFzT2JzZXJ2YXRp
b25UYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV9vYnNlcnZhdGlvblRhcmdldHMuc2l6ZSgpOyB9
CiAgICAgdm9pZCByb290RGVzdHJveWVkKCk7CiAKICAgICBzdGQ6Om9wdGlvbmFsPFJlZHVjZWRS
ZXNvbHV0aW9uU2Vjb25kcz4gbm93VGltZXN0YW1wKCkgY29uc3Q7CkBAIC0xMDAsMjQgKzEwNiwy
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3RpZnkoKTsKIAogICAgIEludGVyc2VjdGlvbk9ic2Vy
dmVyQ2FsbGJhY2sqIGNhbGxiYWNrQ29uY3VycmVudGx5KCkgeyByZXR1cm4gbV9jYWxsYmFjay5n
ZXQoKTsgfQorICAgIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFj
dFNsb3RWaXNpdG9yJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgSW50ZXJzZWN0aW9uT2JzZXJ2
ZXIoRG9jdW1lbnQmLCBSZWY8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjaz4mJiwgQ29udGFp
bmVyTm9kZSogcm9vdCwgTGVuZ3RoQm94JiYgcGFyc2VkUm9vdE1hcmdpbiwgVmVjdG9yPGRvdWJs
ZT4mJiB0aHJlc2hvbGRzKTsKIAotICAgIC8vIEFjdGl2ZURPTU9iamVjdC4KLSAgICBib29sIHZp
cnR1YWxIYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICBjb25zdCBjaGFy
KiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wKCkg
b3ZlcnJpZGU7Ci0KICAgICBib29sIHJlbW92ZVRhcmdldFJlZ2lzdHJhdGlvbihFbGVtZW50Jik7
CiAgICAgdm9pZCByZW1vdmVBbGxUYXJnZXRzKCk7CiAKICAgICBXZWFrUHRyPERvY3VtZW50PiBt
X2ltcGxpY2l0Um9vdERvY3VtZW50OwotICAgIENvbnRhaW5lck5vZGUqIG1fcm9vdDsKKyAgICBX
ZWFrUHRyPENvbnRhaW5lck5vZGU+IG1fcm9vdDsKICAgICBMZW5ndGhCb3ggbV9yb290TWFyZ2lu
OwogICAgIFZlY3Rvcjxkb3VibGU+IG1fdGhyZXNob2xkczsKICAgICBSZWZQdHI8SW50ZXJzZWN0
aW9uT2JzZXJ2ZXJDYWxsYmFjaz4gbV9jYWxsYmFjazsKLSAgICBWZWN0b3I8RWxlbWVudCo+IG1f
b2JzZXJ2YXRpb25UYXJnZXRzOworICAgIFZlY3RvcjxXZWFrUHRyPEVsZW1lbnQ+PiBtX29ic2Vy
dmF0aW9uVGFyZ2V0czsKICAgICBWZWN0b3I8R0NSZWFjaGFibGVSZWY8RWxlbWVudD4+IG1fcGVu
ZGluZ1RhcmdldHM7CiAgICAgVmVjdG9yPFJlZjxJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Pj4g
bV9xdWV1ZWRFbnRyaWVzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50
ZXJzZWN0aW9uT2JzZXJ2ZXIuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25P
YnNlcnZlci5pZGwKaW5kZXggOTgwOTU2MzUzZTVkZDVjNDNmZDBlZGM1NjhiYzMyN2FhOWRlYWE1
Yy4uN2FkY2U4MjFhMDgxNGJlMjMxYWJhZmNhYjViYjNiM2NmNDI2NDZiZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5pZGwKQEAgLTI2LDExICsyNiwxMiBA
QAogLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9JbnRlcnNlY3Rpb25PYnNlcnZlci8KIAogWwot
ICAgIEFjdGl2ZURPTU9iamVjdCwKICAgICBDb25kaXRpb25hbD1JTlRFUlNFQ1RJT05fT0JTRVJW
RVIsCiAgICAgRW5hYmxlZEJ5U2V0dGluZz1JbnRlcnNlY3Rpb25PYnNlcnZlciwKICAgICBFeHBv
c2VkPVdpbmRvdywKICAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKKyAgICBDdXN0b21Jc1JlYWNo
YWJsZSwKKyAgICBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlCiBdIGludGVyZmFjZSBJbnRlcnNl
Y3Rpb25PYnNlcnZlciB7CiAgICAgW0NhbGxXaXRoPURvY3VtZW50XSBjb25zdHJ1Y3RvcihJbnRl
cnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrIGNhbGxiYWNrLCBvcHRpb25hbCBJbnRlcnNlY3Rpb25P
YnNlcnZlckluaXQgb3B0aW9ucyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UmVzaXplT2JzZXJ2YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZh
dGlvbi5jcHAKaW5kZXggN2MxYTkyMzA3MmNkYzAwMmYxZThlZTlhMDYzNWY3YTYzNzNkNzkyZi4u
ZTM0YzA5NWQwNWNhYjhhZWI3MDVmODRiN2FkNjkyNGQxYmEzZTRhMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9SZXNpemVPYnNlcnZhdGlvbi5jcHAKQEAgLTM0LDEzICszNCwxMyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxSZXNpemVPYnNlcnZhdGlvbj4gUmVzaXplT2JzZXJ2YXRp
b246OmNyZWF0ZShFbGVtZW50KiB0YXJnZXQpCitSZWY8UmVzaXplT2JzZXJ2YXRpb24+IFJlc2l6
ZU9ic2VydmF0aW9uOjpjcmVhdGUoRWxlbWVudCYgdGFyZ2V0KQogewogICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFJlc2l6ZU9ic2VydmF0aW9uKHRhcmdldCkpOwogfQogCi1SZXNpemVPYnNlcnZh
dGlvbjo6UmVzaXplT2JzZXJ2YXRpb24oRWxlbWVudCogZWxlbWVudCkKLSAgICA6IG1fdGFyZ2V0
KGVsZW1lbnQpCitSZXNpemVPYnNlcnZhdGlvbjo6UmVzaXplT2JzZXJ2YXRpb24oRWxlbWVudCYg
ZWxlbWVudCkKKyAgICA6IG1fdGFyZ2V0IHsgbWFrZVdlYWtQdHIoZWxlbWVudCkgfQogewogfQog
CkBAIC05Miw3ICs5Miw3IEBAIGJvb2wgUmVzaXplT2JzZXJ2YXRpb246OmVsZW1lbnRTaXplQ2hh
bmdlZChMYXlvdXRTaXplJiBjdXJyZW50U2l6ZSkgY29uc3QKIHNpemVfdCBSZXNpemVPYnNlcnZh
dGlvbjo6dGFyZ2V0RWxlbWVudERlcHRoKCkgY29uc3QKIHsKICAgICB1bnNpZ25lZCBkZXB0aCA9
IDA7Ci0gICAgZm9yIChFbGVtZW50KiBvd25lckVsZW1lbnQgID0gbV90YXJnZXQ7IG93bmVyRWxl
bWVudDsgb3duZXJFbGVtZW50ID0gb3duZXJFbGVtZW50LT5kb2N1bWVudCgpLm93bmVyRWxlbWVu
dCgpKSB7CisgICAgZm9yIChFbGVtZW50KiBvd25lckVsZW1lbnQgPSBtX3RhcmdldC5nZXQoKTsg
b3duZXJFbGVtZW50OyBvd25lckVsZW1lbnQgPSBvd25lckVsZW1lbnQtPmRvY3VtZW50KCkub3du
ZXJFbGVtZW50KCkpIHsKICAgICAgICAgZm9yIChFbGVtZW50KiBwYXJlbnQgPSBvd25lckVsZW1l
bnQ7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRFbGVtZW50KCkpCiAgICAgICAgICAg
ICArK2RlcHRoOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXpl
T2JzZXJ2YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2YXRpb24uaApp
bmRleCBjN2RiMWZkZWNhNTM4MTAyMWNkNmQzZDQ2N2NmYjY1MDU2M2IyMTJkLi44NWY5ZTA2Zjlm
ZTZiMDBkNDlhNzI4MGQ2OWU3ODlhM2U5YzZlNDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1Jlc2l6ZU9ic2VydmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNp
emVPYnNlcnZhdGlvbi5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiTGF5b3V0U2l6ZS5o
IgogCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDcgKzM5LDcgQEAgY2xhc3MgRWxlbWVu
dDsKIGNsYXNzIFJlc2l6ZU9ic2VydmF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8UmVzaXplT2Jz
ZXJ2YXRpb24+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPFJlc2l6ZU9ic2VydmF0aW9uPiBjcmVhdGUoRWxlbWVudCogdGFyZ2V0KTsKKyAg
ICBzdGF0aWMgUmVmPFJlc2l6ZU9ic2VydmF0aW9uPiBjcmVhdGUoRWxlbWVudCYgdGFyZ2V0KTsK
IAogICAgIH5SZXNpemVPYnNlcnZhdGlvbigpOwogCkBAIC00OCwxMyArNDksMTMgQEAgcHVibGlj
OgogICAgIEZsb2F0UmVjdCBjb21wdXRlQ29udGVudFJlY3QoKSBjb25zdDsKIAogICAgIGJvb2wg
ZWxlbWVudFNpemVDaGFuZ2VkKExheW91dFNpemUmKSBjb25zdDsKLSAgICBFbGVtZW50KiB0YXJn
ZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQorICAgIEVsZW1lbnQqIHRhcmdldCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGFyZ2V0LmdldCgpOyB9CiAgICAgc2l6ZV90IHRhcmdldEVsZW1lbnRE
ZXB0aCgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIFJlc2l6ZU9ic2VydmF0aW9uKEVsZW1lbnQq
IHRhcmdldCk7CisgICAgUmVzaXplT2JzZXJ2YXRpb24oRWxlbWVudCYgdGFyZ2V0KTsKIAotICAg
IEVsZW1lbnQqIG1fdGFyZ2V0OworICAgIFdlYWtQdHI8RWxlbWVudD4gbV90YXJnZXQ7CiAgICAg
TGF5b3V0U2l6ZSBtX2xhc3RPYnNlcnZhdGlvblNpemU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UmVzaXplT2JzZXJ2ZXIuY3BwCmluZGV4IDU1MDAzNmJlNTBlNzhlNDY2Mjg2ZDMxMTdmNWY4YTFk
ZmZjZWQyOTAuLjBjYTU3OWU0MzQ3M2ZhNjA0ZWJlYzZiMGE5ZGMyMjQyNWE5ODVkYjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgog
I2luY2x1ZGUgIlJlc2l6ZU9ic2VydmVyRW50cnkuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9BYnN0cmFjdFNsb3RWaXNpdG9ySW5saW5lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTQwLDExICs0MSw5IEBAIFJlZjxSZXNpemVPYnNlcnZlcj4gUmVzaXplT2JzZXJ2ZXI6OmNy
ZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIFJlZjxSZXNpemVPYnNlcnZlCiB9CiAKIFJlc2l6ZU9i
c2VydmVyOjpSZXNpemVPYnNlcnZlcihEb2N1bWVudCYgZG9jdW1lbnQsIFJlZjxSZXNpemVPYnNl
cnZlckNhbGxiYWNrPiYmIGNhbGxiYWNrKQotICAgIDogQWN0aXZlRE9NT2JqZWN0KGNhbGxiYWNr
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgLCBtX2RvY3VtZW50KG1ha2VXZWFrUHRy
KGRvY3VtZW50KSkKKyAgICA6IG1fZG9jdW1lbnQobWFrZVdlYWtQdHIoZG9jdW1lbnQpKQogICAg
ICwgbV9jYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSkKIHsKLSAgICBzdXNwZW5kSWZOZWVkZWQo
KTsKIH0KIAogUmVzaXplT2JzZXJ2ZXI6On5SZXNpemVPYnNlcnZlcigpCkBAIC02OSw4ICs2OCw3
IEBAIHZvaWQgUmVzaXplT2JzZXJ2ZXI6Om9ic2VydmUoRWxlbWVudCYgdGFyZ2V0KQogICAgIGF1
dG8mIG9ic2VydmVyRGF0YSA9IHRhcmdldC5lbnN1cmVSZXNpemVPYnNlcnZlckRhdGEoKTsKICAg
ICBvYnNlcnZlckRhdGEub2JzZXJ2ZXJzLmFwcGVuZChtYWtlV2Vha1B0cih0aGlzKSk7CiAKLSAg
ICBtX29ic2VydmF0aW9ucy5hcHBlbmQoUmVzaXplT2JzZXJ2YXRpb246OmNyZWF0ZSgmdGFyZ2V0
KSk7Ci0gICAgbV9wZW5kaW5nVGFyZ2V0cy5hcHBlbmQodGFyZ2V0KTsKKyAgICBtX29ic2VydmF0
aW9ucy5hcHBlbmQoUmVzaXplT2JzZXJ2YXRpb246OmNyZWF0ZSh0YXJnZXQpKTsKIAogICAgIGlm
IChtX2RvY3VtZW50KSB7CiAgICAgICAgIG1fZG9jdW1lbnQtPmFkZFJlc2l6ZU9ic2VydmVyKCp0
aGlzKTsKQEAgLTEwNyw2ICsxMDUsNyBAQCBzaXplX3QgUmVzaXplT2JzZXJ2ZXI6OmdhdGhlck9i
c2VydmF0aW9ucyhzaXplX3QgZGVlcGVyVGhhbikKICAgICAgICAgICAgIGlmIChkZXB0aCA+IGRl
ZXBlclRoYW4pIHsKICAgICAgICAgICAgICAgICBvYnNlcnZhdGlvbi0+dXBkYXRlT2JzZXJ2YXRp
b25TaXplKGN1cnJlbnRTaXplKTsKICAgICAgICAgICAgICAgICBtX2FjdGl2ZU9ic2VydmF0aW9u
cy5hcHBlbmQob2JzZXJ2YXRpb24uZ2V0KCkpOworICAgICAgICAgICAgICAgIG1fYWN0aXZlT2Jz
ZXJ2YXRpb25UYXJnZXRzLmFwcGVuZCgqb2JzZXJ2YXRpb24tPnRhcmdldCgpKTsKICAgICAgICAg
ICAgICAgICBtaW5PYnNlcnZlZERlcHRoID0gc3RkOjptaW4oZGVwdGgsIG1pbk9ic2VydmVkRGVw
dGgpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbV9oYXNTa2lwcGVkT2Jz
ZXJ2YXRpb25zID0gdHJ1ZTsKQEAgLTEzMyw2ICsxMzIsMTUgQEAgdm9pZCBSZXNpemVPYnNlcnZl
cjo6ZGVsaXZlck9ic2VydmF0aW9ucygpCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRGaXJlT2JzZXJ2ZXJDYWxsYmFjaygqY29udGV4dCk7CiB9CiAKK2Jvb2wgUmVzaXplT2JzZXJ2
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6QWJzdHJhY3RTbG90VmlzaXRvciYg
dmlzaXRvcikgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIG9ic2VydmF0aW9uIDogbV9vYnNlcnZh
dGlvbnMpIHsKKyAgICAgICAgaWYgKGF1dG8qIHRhcmdldCA9IG9ic2VydmF0aW9uLT50YXJnZXQo
KTsgdGFyZ2V0ICYmIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHRhcmdldC0+b3BhcXVlUm9v
dCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIGJvb2wgUmVzaXplT2JzZXJ2ZXI6OnJlbW92ZVRhcmdldChFbGVtZW50JiB0YXJnZXQp
CiB7CiAgICAgYXV0byogb2JzZXJ2ZXJEYXRhID0gdGFyZ2V0LnJlc2l6ZU9ic2VydmVyRGF0YSgp
OwpAQCAtMTQ5LDE0ICsxNTcsMTQgQEAgdm9pZCBSZXNpemVPYnNlcnZlcjo6cmVtb3ZlQWxsVGFy
Z2V0cygpCiAgICAgICAgIGJvb2wgcmVtb3ZlZCA9IHJlbW92ZVRhcmdldCgqb2JzZXJ2YXRpb24t
PnRhcmdldCgpKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKICAg
ICB9Ci0gICAgbV9wZW5kaW5nVGFyZ2V0cy5jbGVhcigpOworICAgIG1fYWN0aXZlT2JzZXJ2YXRp
b25UYXJnZXRzLmNsZWFyKCk7CiAgICAgbV9hY3RpdmVPYnNlcnZhdGlvbnMuY2xlYXIoKTsKICAg
ICBtX29ic2VydmF0aW9ucy5jbGVhcigpOwogfQogCiBib29sIFJlc2l6ZU9ic2VydmVyOjpyZW1v
dmVPYnNlcnZhdGlvbihjb25zdCBFbGVtZW50JiB0YXJnZXQpCiB7Ci0gICAgbV9wZW5kaW5nVGFy
Z2V0cy5yZW1vdmVGaXJzdE1hdGNoaW5nKFsmdGFyZ2V0XShhdXRvJiBwZW5kaW5nVGFyZ2V0KSB7
CisgICAgbV9hY3RpdmVPYnNlcnZhdGlvblRhcmdldHMucmVtb3ZlRmlyc3RNYXRjaGluZyhbJnRh
cmdldF0oYXV0byYgcGVuZGluZ1RhcmdldCkgewogICAgICAgICByZXR1cm4gcGVuZGluZ1Rhcmdl
dC5wdHIoKSA9PSAmdGFyZ2V0OwogICAgIH0pOwogCkBAIC0xNjksMjIgKzE3Nyw2IEBAIGJvb2wg
UmVzaXplT2JzZXJ2ZXI6OnJlbW92ZU9ic2VydmF0aW9uKGNvbnN0IEVsZW1lbnQmIHRhcmdldCkK
ICAgICB9KTsKIH0KIAotYm9vbCBSZXNpemVPYnNlcnZlcjo6dmlydHVhbEhhc1BlbmRpbmdBY3Rp
dml0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChoYXNPYnNlcnZhdGlvbnMoKSAmJiBtX2RvY3Vt
ZW50KSB8fCAhbV9hY3RpdmVPYnNlcnZhdGlvbnMuaXNFbXB0eSgpOwotfQotCi1jb25zdCBjaGFy
KiBSZXNpemVPYnNlcnZlcjo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuICJSZXNpemVPYnNlcnZlciI7Ci19Ci0KLXZvaWQgUmVzaXplT2JzZXJ2ZXI6OnN0b3AoKQot
ewotICAgIGRpc2Nvbm5lY3QoKTsKLSAgICBtX2NhbGxiYWNrID0gbnVsbHB0cjsKLX0KLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFJFU0laRV9PQlNFUlZFUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuaAppbmRleCBlNDE1NmYzMWUzMGUyNjUxNDk1
NDAxOTI0NGU3N2I5MzgwYjAzMTA5Li42ZjRmNjk3YzY2M2FhYjRhMDJkOGJiNGY1NjdkMWQ2MGJl
ZmIxMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5oCkBAIC0yNywxMyArMjcs
MTkgQEAKIAogI2lmIEVOQUJMRShSRVNJWkVfT0JTRVJWRVIpCiAKLSNpbmNsdWRlICJBY3RpdmVE
T01PYmplY3QuaCIKICNpbmNsdWRlICJHQ1JlYWNoYWJsZVJlZi5oIgogI2luY2x1ZGUgIlJlc2l6
ZU9ic2VydmF0aW9uLmgiCiAjaW5jbHVkZSAiUmVzaXplT2JzZXJ2ZXJDYWxsYmFjay5oIgorI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvV2Vha1B0ci5oPgogCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQWJzdHJhY3RTbG90
VmlzaXRvcjsKKworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwpA
QCAtNDQsOCArNTAsNyBAQCBzdHJ1Y3QgUmVzaXplT2JzZXJ2ZXJEYXRhIHsKICAgICBWZWN0b3I8
V2Vha1B0cjxSZXNpemVPYnNlcnZlcj4+IG9ic2VydmVyczsKIH07CiAKLWNsYXNzIFJlc2l6ZU9i
c2VydmVyIDogcHVibGljIFJlZkNvdW50ZWQ8UmVzaXplT2JzZXJ2ZXI+LCBwdWJsaWMgQWN0aXZl
RE9NT2JqZWN0LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVzaXplT2JzZXJ2ZXI+IHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK2NsYXNzIFJlc2l6ZU9ic2VydmVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8UmVzaXplT2JzZXJ2ZXI+LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVzaXplT2Jz
ZXJ2ZXI+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFJlc2l6ZU9ic2VydmVyPiBjcmVhdGUo
RG9jdW1lbnQmLCBSZWY8UmVzaXplT2JzZXJ2ZXJDYWxsYmFjaz4mJik7CiAgICAgflJlc2l6ZU9i
c2VydmVyKCk7CkBAIC02NSwxNSArNzAsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGFzU2tp
cHBlZE9ic2VydmF0aW9ucyhib29sIHNraXBwZWQpIHsgbV9oYXNTa2lwcGVkT2JzZXJ2YXRpb25z
ID0gc2tpcHBlZDsgfQogCiAgICAgUmVzaXplT2JzZXJ2ZXJDYWxsYmFjayogY2FsbGJhY2tDb25j
dXJyZW50bHkoKSB7IHJldHVybiBtX2NhbGxiYWNrLmdldCgpOyB9CisgICAgYm9vbCBpc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsKIAog
cHJpdmF0ZToKICAgICBSZXNpemVPYnNlcnZlcihEb2N1bWVudCYsIFJlZjxSZXNpemVPYnNlcnZl
ckNhbGxiYWNrPiYmKTsKIAotICAgIC8vIEFjdGl2ZURPTU9iamVjdC4KLSAgICBib29sIHZpcnR1
YWxIYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICBjb25zdCBjaGFyKiBh
Y3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wKCkgb3Zl
cnJpZGU7Ci0KICAgICBib29sIHJlbW92ZVRhcmdldChFbGVtZW50Jik7CiAgICAgdm9pZCByZW1v
dmVBbGxUYXJnZXRzKCk7CiAgICAgYm9vbCByZW1vdmVPYnNlcnZhdGlvbihjb25zdCBFbGVtZW50
Jik7CkBAIC04Myw3ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZjxSZXNpemVPYnNl
cnZhdGlvbj4+IG1fb2JzZXJ2YXRpb25zOwogCiAgICAgVmVjdG9yPFJlZjxSZXNpemVPYnNlcnZh
dGlvbj4+IG1fYWN0aXZlT2JzZXJ2YXRpb25zOwotICAgIFZlY3RvcjxHQ1JlYWNoYWJsZVJlZjxF
bGVtZW50Pj4gbV9wZW5kaW5nVGFyZ2V0czsKKyAgICBWZWN0b3I8R0NSZWFjaGFibGVSZWY8RWxl
bWVudD4+IG1fYWN0aXZlT2JzZXJ2YXRpb25UYXJnZXRzOwogICAgIGJvb2wgbV9oYXNTa2lwcGVk
T2JzZXJ2YXRpb25zIHsgZmFsc2UgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUmVzaXplT2JzZXJ2ZXIuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNl
cnZlci5pZGwKaW5kZXggMDVlODQ3ZDkwMDgzMTY2Njc1YTVhNzdlOTVlNWM4ZWU5ZjgyZjZkZS4u
M2JmZjYzOGVmNzY2YjhhZWZmMDdjNmE2NmRmMjU5NzRmNTExZTQyNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9SZXNpemVPYnNlcnZlci5pZGwKQEAgLTI2LDExICsyNiwxMiBAQAogLy8gaHR0cHM6Ly93
aWNnLmdpdGh1Yi5pby9SZXNpemVPYnNlcnZlci8KIAogWwotICAgIEFjdGl2ZURPTU9iamVjdCwK
ICAgICBDb25kaXRpb25hbD1SRVNJWkVfT0JTRVJWRVIsCiAgICAgRW5hYmxlZEJ5U2V0dGluZz1S
ZXNpemVPYnNlcnZlciwKICAgICBFeHBvc2VkPVdpbmRvdywKICAgICBKU0N1c3RvbU1hcmtGdW5j
dGlvbiwKKyAgICBDdXN0b21Jc1JlYWNoYWJsZSwKKyAgICBJbXBsZW1lbnRhdGlvbkxhY2tzVlRh
YmxlCiBdIGludGVyZmFjZSBSZXNpemVPYnNlcnZlciB7CiAgICAgW0NhbGxXaXRoPURvY3VtZW50
XSBjb25zdHJ1Y3RvcihSZXNpemVPYnNlcnZlckNhbGxiYWNrIGNhbGxiYWNrKTsKIApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IGE0YWQ4ZGNmNWMwMjZlOTYxZTk1OGZjMDgzN2YwMGE4YzJjZWQyYjQuLjJjNzIwODEyZTE2NWQz
OGQ4MDI0ZjFiMjQ1ZDBkMDM4ZDNiZDQzNTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAyMS0w
Ny0wOSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXNpemVP
YnNlcnZlciAvIEludGVyc2VjdGlvbk9ic2VydmVyIG1lbW9yeSBsZWFrIG9uIGRldGFjaGVkICYg
b3V0IG9mIHJlZmVyZW5jZSBlbGVtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MTk0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83OTgzOTg1
MT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRl
ZCByZWdyZXNzaW9uIHRlc3RzIGZvciBsZWFraW5nIG5vZGVzIHdpdGggSW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXIgYW5kIFJlc2l6ZU9ic2V2ZXIuCisKKyAgICAgICAgQWxzbyByZXdyb3RlIGludGVyc2Vj
dGlvbi1vYnNlcnZlci9yb290LWVsZW1lbnQtZGVsZXRlZC5odG1sIHNpbmNlIHRoZSB0ZXN0IHdh
cyBwcmV2aW91c2x5IGFzc2VydGluZworICAgICAgICB0aGF0IEludGVyc2VjdGlvbk9ic2VydmVy
LnJvb3QgYmVjb21lcyBudWxsIGlmIGl0IHdhcyBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50LCB3
aGljaCBpcyB3cm9uZy4KKworICAgICAgICAqIGludGVyc2VjdGlvbi1vYnNlcnZlci9pbnRlcnNl
Y3Rpb24tb2JzZXJ2ZXItc2hvdWxkLW5vdC1sZWFrLW9ic2VydmVkLW5vZGVzLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogaW50ZXJzZWN0aW9uLW9ic2VydmVyL2ludGVyc2VjdGlvbi1v
YnNlcnZlci1zaG91bGQtbm90LWxlYWstb2JzZXJ2ZWQtbm9kZXMuaHRtbDogQWRkZWQuCisgICAg
ICAgICogaW50ZXJzZWN0aW9uLW9ic2VydmVyL3Jvb3QtZWxlbWVudC1kZWxldGVkLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBpbnRlcnNlY3Rpb24tb2JzZXJ2ZXIvcm9vdC1lbGVtZW50LWRlbGV0
ZWQuaHRtbDoKKyAgICAgICAgKiByZXNpemUtb2JzZXJ2ZXIvcmVzaXplLW9ic2VydmVyLXNob3Vs
ZC1ub3QtbGVhay1vYnNlcnZlZC1ub2Rlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHJlc2l6ZS1vYnNlcnZlci9yZXNpemUtb2JzZXJ2ZXItc2hvdWxkLW5vdC1sZWFrLW9ic2VydmVk
LW5vZGVzLmh0bWw6IEFkZGVkLgorCiAyMDIxLTA3LTA3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgT3VyIHN0cnVjdHVyZWQgY2xvbmluZyBpbXBsZW1lbnRhdGlv
biBkb2VzIG5vdCBlbmNvZGUgYWxsIG9mIFJlZ0V4cCdzIGZsYWdzCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXIvaW50ZXJzZWN0aW9uLW9ic2VydmVyLXNob3Vs
ZC1ub3QtbGVhay1vYnNlcnZlZC1ub2Rlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnRl
cnNlY3Rpb24tb2JzZXJ2ZXIvaW50ZXJzZWN0aW9uLW9ic2VydmVyLXNob3VsZC1ub3QtbGVhay1v
YnNlcnZlZC1ub2Rlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjE1ZmM1Yjg0NjNmZTM4YzJk
ZDFhMDQzM2Q3M2MwYzI4ZWViN2Q2MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2lu
dGVyc2VjdGlvbi1vYnNlcnZlci9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXItc2hvdWxkLW5vdC1sZWFr
LW9ic2VydmVkLW5vZGVzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKK1RoaXMgdGVzdHMg
b2JzZXJ2aW5nIGFuIGVsZW1lbnQgd2l0aCBhbiBJbnRlcnNlY3Rpb25PYnNlcnZlciBhbmQgcmVt
b3ZpbmcgdGhlIGVsZW1lbnQgZnJvbSB0aGUgZG9jdW1lbnQuCitUaGUgZWxlbWVudCBzaG91bGQg
YmVjb21lIGVsaWdpYmxlIGZvciBHQyBhdCBzb21lIHBvaW50LgorCitQQVNTCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXIvaW50ZXJzZWN0aW9uLW9ic2VydmVy
LXNob3VsZC1ub3QtbGVhay1vYnNlcnZlZC1ub2Rlcy5odG1sIGIvTGF5b3V0VGVzdHMvaW50ZXJz
ZWN0aW9uLW9ic2VydmVyL2ludGVyc2VjdGlvbi1vYnNlcnZlci1zaG91bGQtbm90LWxlYWstb2Jz
ZXJ2ZWQtbm9kZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDAwZDA0YzQwOTc0YzJjM2Q2YjdhZGQ0MDkw
ZjA1YWM0NTZlMDIyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW50ZXJzZWN0aW9u
LW9ic2VydmVyL2ludGVyc2VjdGlvbi1vYnNlcnZlci1zaG91bGQtbm90LWxlYWstb2JzZXJ2ZWQt
bm9kZXMuaHRtbApAQCAtMCwwICsxLDUxIEBACis8IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10
ZXN0LXJ1bm5lciBbIEludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZD10cnVlIF0gLS0+Cis8aHRt
bD4KKzxib2R5PgorPHByZSBpZD0ibG9nIj5UaGlzIHRlc3RzIG9ic2VydmluZyBhbiBlbGVtZW50
IHdpdGggYW4gSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgYW5kIHJlbW92aW5nIHRoZSBlbGVtZW50IGZy
b20gdGhlIGRvY3VtZW50LgorVGhlIGVsZW1lbnQgc2hvdWxkIGJlY29tZSBlbGlnaWJsZSBmb3Ig
R0MgYXQgc29tZSBwb2ludC4KKworPC9wcmU+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2dj
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2xldCBpbml0aWFsTm9kZUNvdW50OworZnVuY3Rp
b24gcnVuVGVzdCgpCit7CisgICAgaWYgKCF3aW5kb3cudGVzdFJ1bm5lciB8fCAhd2luZG93Lmlu
dGVybmFscykgeworICAgICAgICBsb2cudGV4dENvbnRlbnQgKz0gJ0ZBSUwgLSBUaGlzIHRlc3Qg
cmVxdWlyZXMgaW50ZXJuYWxzJzsgCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdGVzdFJ1
bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisKKyAg
ICBpbml0aWFsTm9kZUNvdW50ID0gaW50ZXJuYWxzLnJlZmVyZW5jaW5nTm9kZUNvdW50KGRvY3Vt
ZW50KTsKKworICAgIGNvbnN0IGludGVyc2VjdGlvbk9ic2VydmVycyA9IFtdOworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIGludGVyc2VjdGlvbk9ic2VydmVycy5w
dXNoKGNyZWF0ZUludGVyc2VjdGlvbk9ic2VydmVyKCkpOworCisgICAgcmVxdWVzdEFuaW1hdGlv
bkZyYW1lKCgpID0+IHsKKyAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CisgICAgICAgICAgICBn
YygpOworICAgICAgICAgICAgbG9nLnRleHRDb250ZW50ICs9IGludGVybmFscy5yZWZlcmVuY2lu
Z05vZGVDb3VudChkb2N1bWVudCkgPCBpbml0aWFsTm9kZUNvdW50ICsgaW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXJzLmxlbmd0aCAqIDAuOCA/ICdQQVNTJyA6ICdGQUlMIC0gTGVzcyB0aGFuIDIwJSBvZiBu
b2RlcyB3ZXJlIGNvbGxlY3RlZC4nCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKKyAgICAgICAgfSwgMCk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUludGVyc2Vj
dGlvbk9ic2VydmVyKCkKK3sKKyAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2Jyk7CisgICAgY29uc3QgaW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBuZXcgSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXIoKCkgPT4geyB9KS5vYnNlcnZlKGVsZW1lbnQpOworICAgIGRvY3VtZW50
LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CisgICAgc2V0VGltZW91dCgoKSA9PiB7CisgICAg
ICAgIGVsZW1lbnQucmVtb3ZlKCk7CisgICAgfSwgMCk7CisgICAgcmV0dXJuIGludGVyc2VjdGlv
bk9ic2VydmVyOworfQorCitvbmxvYWQgPSBydW5UZXN0OworCis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ludGVyc2VjdGlvbi1vYnNlcnZlci9y
b290LWVsZW1lbnQtZGVsZXRlZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnRlcnNlY3Rp
b24tb2JzZXJ2ZXIvcm9vdC1lbGVtZW50LWRlbGV0ZWQtZXhwZWN0ZWQudHh0CmluZGV4IDZmZTk1
YTliZjQwNGFlMjVjOWY1YjQxMjYyNGYwMzJhYjYwNmE3Y2MuLjBhNTkzOTliMmMwZmIwNzYyNDky
OGMwNDVjZGIwNmRmZTY3MTE1M2UgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ludGVyc2VjdGlv
bi1vYnNlcnZlci9yb290LWVsZW1lbnQtZGVsZXRlZC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvaW50ZXJzZWN0aW9uLW9ic2VydmVyL3Jvb3QtZWxlbWVudC1kZWxldGVkLWV4cGVjdGVk
LnR4dApAQCAtMSwzICsxLDI1IEBACitUaGlzIHRlc3RzIHJlbW92aW5nIHRoZSByb290IG5vZGUg
b2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuIFRoZSByb290IG5vZGUgc2hvdWxkIGJlIGVsaWdpYmxl
IGZvciBHQy4KIAotUEFTUyBJbnRlcnNlY3Rpb25PYnNlcnZlciBkb2Vzbid0IGtlZXAgdW5yZWFj
aGFibGUgcm9vdCBhbGl2ZQorVGVzdCAxOiBQQVNTCitUZXN0IDI6IFBBU1MKK1Rlc3QgMzogUEFT
UworVGVzdCA0OiBQQVNTCitUZXN0IDU6IFBBU1MKK1Rlc3QgNjogUEFTUworVGVzdCA3OiBQQVNT
CitUZXN0IDg6IFBBU1MKK1Rlc3QgOTogUEFTUworVGVzdCAxMDogUEFTUworVGVzdCAxMTogUEFT
UworVGVzdCAxMjogUEFTUworVGVzdCAxMzogUEFTUworVGVzdCAxNDogUEFTUworVGVzdCAxNTog
UEFTUworVGVzdCAxNjogUEFTUworVGVzdCAxNzogUEFTUworVGVzdCAxODogUEFTUworVGVzdCAx
OTogUEFTUworVGVzdCAyMDogUEFTUworTm9kZSBjb3VudDogUEFTUworSW50ZXJzZWN0aW9uIG9i
c2VydmVyIGNvdW50OiBQQVNTCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ludGVyc2VjdGlv
bi1vYnNlcnZlci9yb290LWVsZW1lbnQtZGVsZXRlZC5odG1sIGIvTGF5b3V0VGVzdHMvaW50ZXJz
ZWN0aW9uLW9ic2VydmVyL3Jvb3QtZWxlbWVudC1kZWxldGVkLmh0bWwKaW5kZXggN2U3MmM0ZTAz
NDJhN2M3NWRiNTJmZGYxZmYxZDc4MWFhMWY2MGFhYS4uNTllN2MzNzlmNWMwODUzMmI1YTQxYWY3
MWIwY2M2YTU4NGJlOWJiYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW50ZXJzZWN0aW9uLW9i
c2VydmVyL3Jvb3QtZWxlbWVudC1kZWxldGVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW50ZXJz
ZWN0aW9uLW9ic2VydmVyL3Jvb3QtZWxlbWVudC1kZWxldGVkLmh0bWwKQEAgLTEsNDQgKzEsOTUg
QEAKIDwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgSW50ZXJzZWN0aW9u
T2JzZXJ2ZXJFbmFibGVkPXRydWUgXSAtLT4KIDxoZWFkPgotPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJj
ZXMvZ2MuanMiPjwvc2NyaXB0PgogPGJvZHk+Cis8cHJlIGlkPSJsb2ciPlRoaXMgdGVzdHMgcmVt
b3ZpbmcgdGhlIHJvb3Qgbm9kZSBvZiBJbnRlcnNlY3Rpb25PYnNlcnZlci4gVGhlIHJvb3Qgbm9k
ZSBzaG91bGQgYmUgZWxpZ2libGUgZm9yIEdDLgogCi08ZGl2IGlkPSJyb290IiBzdHlsZT0icG9z
aXRpb246YWJzb2x1dGUiPgotICAgIDxkaXYgaWQ9InRhcmdldCIgc3R5bGU9IndpZHRoOiAxMDBw
eDsgaGVpZ2h0OiAxMDBweDsgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW4iPjwvZGl2PgotPC9kaXY+
Ci0KKzwvcHJlPgogPHNjcmlwdD4KLSAgICBmdW5jdGlvbiBvYnNlcnZlclNob3VsZEJlUmVtb3Zl
ZCgpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkg
ewotICAgICAgICAgICAgaGFuZGxlID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKLSAgICAgICAgICAgICAgICBpZiAoaW50
ZXJuYWxzICYmIGludGVybmFscy5udW1iZXJPZkludGVyc2VjdGlvbk9ic2VydmVycyhkb2N1bWVu
dCkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGhhbmRsZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9LCAxMCk7Ci0gICAgICAgIH0pOworCitmdW5jdGlvbiBjcmVhdGVSb290KHJvb3RJZCkK
K3sKKyAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsK
KyAgICBjb250YWluZXIuaW5uZXJIVE1MID0gYDxkaXYgaWQ9IiR7cm9vdElkfSIgY2xhc3M9InJv
b3QiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZSI+PGRpdiBjbGFzcz0idGFyZ2V0IiBzdHlsZT0i
d2lkdGg6IDEwMHB4OyBoZWlnaHQ6IDEwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbiI+PC9k
aXY+PC9kaXY+YDsKKyAgICBjb25zdCByb290ID0gY29udGFpbmVyLmdldEVsZW1lbnRzQnlDbGFz
c05hbWUoJ3Jvb3QnKVswXTsKKyAgICByb290LnJlbW92ZSgpOworICAgIHJldHVybiByb290Owor
fQorCitsZXQgaW5pdGlhbE5vZGVDb3VudCA9IDA7Cit3aW5kb3cub25sb2FkID0gKCkgPT4gewor
ICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIgfHwgIXdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAg
ICAgbG9nLnRleHRDb250ZW50ICs9ICdGQUlMIC0gVGhpcyB0ZXN0IHJlcXVpcmVzIGludGVybmFs
cyc7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGludGVybmFscy5udW1iZXJPZklu
dGVyc2VjdGlvbk9ic2VydmVycyhkb2N1bWVudCkpIHsKKyAgICAgICAgbG9nLnRleHRDb250ZW50
ICs9ICdGQUlMIC0gSW5pdGlhbCBpbnRlcnNlY3Rpb24gb2JzZXJ2ZXIgY291bnQgaXMgbm90IHpl
cm8nOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGluaXRpYWxOb2RlQ291bnQgPSBpbnRl
cm5hbHMucmVmZXJlbmNpbmdOb2RlQ291bnQoZG9jdW1lbnQpOworICAgIHRlc3RSdW5uZXIuZHVt
cEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgIHNldFRpbWVv
dXQoKCkgPT4gdGVzdFJ1bm5lci5ub3RpZnlEb25lKCksIDUwMDApOworICAgIHJ1blRlc3QoMSk7
Cit9CisKK2NvbnN0IHRvdGFsVGVzdENvdW50ID0gMjA7CitmdW5jdGlvbiBydW5UZXN0KHRlc3RO
dW1iZXIpIHsKKyAgICBsb2cudGV4dENvbnRlbnQgKz0gYFRlc3QgJHt0ZXN0TnVtYmVyfTogYDsK
KyAgICBjb25zdCByb290SWQgPSAncm9vdC0nICsgdGVzdE51bWJlcjsKKyAgICBsZXQgcm9vdCA9
IGNyZWF0ZVJvb3Qocm9vdElkKTsKKyAgICByb290LmFsaXZlID0gdHJ1ZTsKKyAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKHJvb3QpOworCisgICAgbGV0IG9ic2VydmVyID0gbmV3IEludGVy
c2VjdGlvbk9ic2VydmVyKCgpID0+IHsgfSwgeyByb290IH0pOworICAgIGxldCB0YXJnZXQgPSBy
b290LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RhcmdldCcpWzBdOworICAgIGlmIChvYnNlcnZl
ci5yb290ICE9IHJvb3QpCisgICAgICAgIHJldHVybiB0ZXN0RmFpbGVkKHRlc3ROdW1iZXIsICdv
YnNlcnZlci5yb290ICE9IHJvb3QgYWZ0ZXIgY29uc3RydWN0aW9uJyk7CisgICAgb2JzZXJ2ZXIu
b2JzZXJ2ZSh0YXJnZXQpOworCisgICAgcm9vdC5yZW1vdmUoKTsKKyAgICByb290ID0gbnVsbDsK
KyAgICB0YXJnZXQgPSBudWxsOworICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAo
KSB7CisgICAgICAgIG9ic2VydmVyLnRha2VSZWNvcmRzKCk7CisgICAgICAgIGdjKCk7CisKKyAg
ICAgICAgaWYgKCFvYnNlcnZlci5yb290KQorICAgICAgICAgICAgcmV0dXJuIHRlc3RGYWlsZWQo
dGVzdE51bWJlciwgJ29ic2VydmVyLnJvb3QgaXMgbnVsbCcpOworICAgICAgICBpZiAob2JzZXJ2
ZXIucm9vdC5pZCAhPSByb290SWQpCisgICAgICAgICAgICByZXR1cm4gdGVzdEZhaWxlZCh0ZXN0
TnVtYmVyLCBgb2JzZXJ2ZXIucm9vdC5pZCAoJHtvYnNlcnZlci5yb290LmlkfSkgIT0gcm9vdElk
ICgke3Jvb3RJZH0pIGFmdGVyIHJ1bm5pbmcgckFGIGFuZCBHQ2ApOworICAgICAgICBpZiAoIW9i
c2VydmVyLnJvb3QuYWxpdmUpCisgICAgICAgICAgICByZXR1cm4gdGVzdEZhaWxlZCh0ZXN0TnVt
YmVyLCAnb2JzZXJ2ZXIuYWxpdmUgaXMgZmFsc2UnKTsKKworICAgICAgICBvYnNlcnZlciA9IG51
bGw7CisgICAgICAgIGdjKCk7CisKKyAgICAgICAgbG9nLnRleHRDb250ZW50ICs9ICdQQVNTXG4n
OworCisgICAgICAgIGlmICh0ZXN0TnVtYmVyIDwgdG90YWxUZXN0Q291bnQpCisgICAgICAgICAg
ICBzZXRUaW1lb3V0KCgpID0+IHJ1blRlc3QodGVzdE51bWJlciArIDEpLCAwKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBmaW5pc2godGVzdE51bWJlciksIDAp
OworICAgIH0pOworfQorCitmdW5jdGlvbiB0ZXN0RmFpbGVkKHRlc3ROdW1iZXIsIGVycm9yKQor
eworICAgIGxvZy50ZXh0Q29udGVudCArPSBgRkFJTDogJHtlcnJvcn1cbmA7CisgICAgZmluaXNo
KHRlc3ROdW1iZXIpOworfQorCitmdW5jdGlvbiBmaW5pc2goZmluaXNoZWRUZXN0Q291bnQpCit7
CisgICAgbG9nLnRleHRDb250ZW50ICs9ICdOb2RlIGNvdW50OiAnOworICAgIGxvZy50ZXh0Q29u
dGVudCArPSAoaW50ZXJuYWxzLnJlZmVyZW5jaW5nTm9kZUNvdW50KGRvY3VtZW50KSA8IGluaXRp
YWxOb2RlQ291bnQgKyAyICogZmluaXNoZWRUZXN0Q291bnQgKiAwLjgpID8gJ1BBU1MnIDogJ0ZB
SUwgLSBMZXNzIHRoYW4gMjAlIG9mIHRoZSByb290IG5vZGVzIHdlcmUgY29sbGVjdGVkJzsKKyAg
ICBsb2cudGV4dENvbnRlbnQgKz0gJ1xuJzsKKyAgICBsb2cudGV4dENvbnRlbnQgKz0gJ0ludGVy
c2VjdGlvbiBvYnNlcnZlciBjb3VudDogJzsKKyAgICBsb2cudGV4dENvbnRlbnQgKz0gKGludGVy
bmFscy5udW1iZXJPZkludGVyc2VjdGlvbk9ic2VydmVycyhkb2N1bWVudCkgPCBmaW5pc2hlZFRl
c3RDb3VudCAqIDAuOCkgPyAnUEFTUycgOiAnRkFJTCAtIExlc3MgdGhhbiAyMCUgb2YgdGhlIGlu
dGVyc2VjdGlvbiBvYnNlcnZlcnMgd2VyZSBjb2xsZWN0ZWQnOworICAgIGxvZy50ZXh0Q29udGVu
dCArPSAnXG4nOworICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQogCi0gICAgYXN5bmNf
dGVzdChmdW5jdGlvbih0KSB7Ci0gICAgICAgIHZhciByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3Jvb3QnKTsKLSAgICAgICAgdmFyIG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9i
c2VydmVyKGZ1bmN0aW9uKCkge30sIHsgcm9vdDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jv
b3QnKSB9KTs7Ci0gICAgICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
dGFyZ2V0Jyk7Ci0gICAgICAgIGFzc2VydF9lcXVhbHMob2JzZXJ2ZXIucm9vdCwgcm9vdCwgJ09i
c2VydmVyIHN0YXJ0cyBvdXQgd2l0aCBub24tbnVsbCByb290Jyk7Ci0gICAgICAgIG9ic2VydmVy
Lm9ic2VydmUodGFyZ2V0KTsKLSAgICAgICAgYXNzZXJ0X2VxdWFscyhpbnRlcm5hbHMubnVtYmVy
T2ZJbnRlcnNlY3Rpb25PYnNlcnZlcnMoZG9jdW1lbnQpLCAxKTsKLSAgICAgICAgcm9vdC5wYXJl
bnROb2RlLnJlbW92ZUNoaWxkKHJvb3QpOwotICAgICAgICByb290ID0gbnVsbDsKLSAgICAgICAg
dGFyZ2V0ID0gbnVsbDsKLSAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgb2JzZXJ2ZXIudGFrZVJlY29yZHMoKTsKLSAgICAgICAgICAgIG9ic2Vy
dmVyU2hvdWxkQmVSZW1vdmVkKCkudGhlbih0LnN0ZXBfZnVuY19kb25lKGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMob2JzZXJ2ZXIucm9vdCwgbnVsbCwgJ09ic2Vy
dmVyIGhhcyBudWxsIHJvb3QgYWZ0ZXIgcm9vdCBlbGVtZW50IGlzIGRlc3Ryb3llZCcpOwotICAg
ICAgICAgICAgfSkpOwotICAgICAgICB9KTsKLSAgICB9LCAiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIg
ZG9lc24ndCBrZWVwIHVucmVhY2hhYmxlIHJvb3QgYWxpdmUiKTsKIDwvc2NyaXB0PgogPC9ib2R5
PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcmVzaXplLW9ic2VydmVyL3Jlc2l6
ZS1vYnNlcnZlci1zaG91bGQtbm90LWxlYWstb2JzZXJ2ZWQtbm9kZXMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvcmVzaXplLW9ic2VydmVyL3Jlc2l6ZS1vYnNlcnZlci1zaG91bGQtbm90LWxl
YWstb2JzZXJ2ZWQtbm9kZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3MDkxNDFhYTk5M2Mx
NzJjYTVlMTZiMzU3MWI3N2IxNjFhYzc0ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9yZXNpemUtb2JzZXJ2ZXIvcmVzaXplLW9ic2VydmVyLXNob3VsZC1ub3QtbGVhay1vYnNlcnZl
ZC1ub2Rlcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0IEBACitUaGlzIHRlc3RzIG9ic2Vydmlu
ZyBhbiBlbGVtZW50IHdpdGggYW4gUmVzaXplT2JzZXJ2ZXIgYW5kIHJlbW92aW5nIHRoZSBlbGVt
ZW50IGZyb20gdGhlIGRvY3VtZW50LgorVGhlIGVsZW1lbnQgc2hvdWxkIGJlY29tZSBlbGlnaWJs
ZSBmb3IgR0MgYXQgc29tZSBwb2ludC4KKworUEFTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cmVzaXplLW9ic2VydmVyL3Jlc2l6ZS1vYnNlcnZlci1zaG91bGQtbm90LWxlYWstb2JzZXJ2ZWQt
bm9kZXMuaHRtbCBiL0xheW91dFRlc3RzL3Jlc2l6ZS1vYnNlcnZlci9yZXNpemUtb2JzZXJ2ZXIt
c2hvdWxkLW5vdC1sZWFrLW9ic2VydmVkLW5vZGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjJhYzZkZDJj
MGU0ZDhkZTU5Y2RjZWVjMjE0YjE5MDdiZTc1MjkyOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3Jlc2l6ZS1vYnNlcnZlci9yZXNpemUtb2JzZXJ2ZXItc2hvdWxkLW5vdC1sZWFrLW9i
c2VydmVkLW5vZGVzLmh0bWwKQEAgLTAsMCArMSw0NyBAQAorPCFET0NUWVBFIGh0bWw+PCEtLSB3
ZWJraXQtdGVzdC1ydW5uZXIgWyBSZXNpemVPYnNlcnZlckVuYWJsZWQ9dHJ1ZSBdIC0tPgorPGh0
bWw+Cis8Ym9keT4KKzxwcmUgaWQ9ImxvZyI+VGhpcyB0ZXN0cyBvYnNlcnZpbmcgYW4gZWxlbWVu
dCB3aXRoIGFuIFJlc2l6ZU9ic2VydmVyIGFuZCByZW1vdmluZyB0aGUgZWxlbWVudCBmcm9tIHRo
ZSBkb2N1bWVudC4KK1RoZSBlbGVtZW50IHNob3VsZCBiZWNvbWUgZWxpZ2libGUgZm9yIEdDIGF0
IHNvbWUgcG9pbnQuCisKKzwvcHJlPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9nYy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitsZXQgaW5pdGlhbE5vZGVDb3VudDsKK2Z1bmN0aW9uIHJ1
blRlc3QoKQoreworICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIgfHwgIXdpbmRvdy5pbnRlcm5h
bHMpIHsKKyAgICAgICAgbG9nLnRleHRDb250ZW50ICs9ICdGQUlMIC0gVGhpcyB0ZXN0IHJlcXVp
cmVzIGludGVybmFscyc7IAorICAgICAgICByZXR1cm47CisgICAgfQorICAgIHRlc3RSdW5uZXIu
ZHVtcEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworCisgICAgaW5p
dGlhbE5vZGVDb3VudCA9IGludGVybmFscy5yZWZlcmVuY2luZ05vZGVDb3VudChkb2N1bWVudCk7
CisKKyAgICBjb25zdCByZXNpemVPYnNlcnZlckNvdW50ID0gMTAwOworICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgcmVzaXplT2JzZXJ2ZXJDb3VudDsgKytpKQorICAgICAgICBjcmVhdGVSZXNpemVP
YnNlcnZlcigpOworCisgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKKyAgICAgICAg
Z2MoKTsKKyAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CisgICAgICAgICAgICBnYygpOworICAg
ICAgICAgICAgbG9nLnRleHRDb250ZW50ICs9IGludGVybmFscy5yZWZlcmVuY2luZ05vZGVDb3Vu
dChkb2N1bWVudCkgPCBpbml0aWFsTm9kZUNvdW50ICsgcmVzaXplT2JzZXJ2ZXJDb3VudCAqIDAu
OTUgPyAnUEFTUycgOiAnRkFJTCAtIExlc3MgdGhhbiAyMCUgb2Ygbm9kZXMgd2VyZSBjb2xsZWN0
ZWQuJworICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0sIDAp
OworICAgIH0pOworfQorCitmdW5jdGlvbiBjcmVhdGVSZXNpemVPYnNlcnZlcigpCit7CisgICAg
Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIGNvbnN0
IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHsgfSkub2JzZXJ2ZShl
bGVtZW50KTsKK30KKworb25sb2FkID0gcnVuVGVzdDsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433249</attachid>
            <date>2021-07-09 17:15:38 -0700</date>
            <delta_ts>2021-07-09 18:03:13 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-227194-20210709171537.patch</filename>
            <type>text/plain</type>
            <size>41877</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5NzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmM1MWI3OWE4YWFhNjIz
ZGY4NTRmYzBkODg3MWFkN2ZjMDgyODA3Ny4uMjdmZjQyYzRkZDQwNTllOTYzZDg1ZGIxOWU2NWZk
NzEzZTZiYjM0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDIxLTA3LTA5ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlc2l6ZU9ic2VydmVyIC8g
SW50ZXJzZWN0aW9uT2JzZXJ2ZXIgbWVtb3J5IGxlYWsgb24gZGV0YWNoZWQgJiBvdXQgb2YgcmVm
ZXJlbmNlIGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjcxOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc5ODM5ODUxPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgIFRoZSBtZW1vcnkgbGVhayB3
YXMgY2F1c2VkIGJ5IFJlc2l6ZU9ic2VydmVyIGFuZCBJbnRlcnNlY3Rpb25PYnNlcnZlciBrZWVw
aW5nIHRoZWlyIHJlc3BlY3RpdmUKKyAgICAgICAgSlMgd3JhcHBlciBvYmplY3RzIGFsaXZlIHNv
IGxvbmcgYXMgdGhlcmUgYXJlIHNvbWUgb2JzZXJ2ZWQgZWxlbWVudHMgYnkgaGF2aW5nIHBlbmRp
bmcKKyAgICAgICAgYWN0aXZpdHkgYXMgQWN0aXZlRE9NT2JqZWN0cy4gVGhpcyBpcyBub3QgdGhl
IHJpZ2h0IEdDIG1vZGVsIGZvciB0aGVzZSBKUyB3cmFwcGVyIG9iamVjdHMKKyAgICAgICAgc2lu
Y2UgdGhlcmUgaXMgbm8gb2J2aW91cyBlbmQgdG8gdGhlc2UgYWN0aXZpdGllcy4gU28gbG9uZyBh
cyB0aGUgb2JzZXJ2ZWQgbm9kZXMgYXJlIGFsaXZlLAorICAgICAgICBSZXNpemVPYnNlcnZlciBh
bmQgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgbWF5IGdldCBuZXcgb2JzZXJ2YXRpb24gZW50cmllcyBx
dWV1ZWQgbGF0ZXIuCisKKyAgICAgICAgVG8gYWRkcmVzcyB0aGlzIGlzc3VlLCB0aGlzIHBhdGNo
IHJld29ya3MgdGhlIHdheSBSZXNpemVPYnNlcnZlciBhbmQgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIg
a2VlcAorICAgICAgICB0aGVpciBKUyB3cmFwcGVycyBhbGl2ZS4gTmFtZWx5LCB0aGV5J3JlIG5v
IGxvbmdlciBBY3RpdmVET01PYmplY3RzLiBJbnN0ZWFkLCB0aGVpciBKUyB3cmFwcGVycworICAg
ICAgICB3b3VsZCB1c2UgdGhlaXIgcmVzcGVjdGl2ZSBvYnNlcnZlZCBub2RlcyBhcyBvcGFxdWUg
cm9vdHMuIGkuZS4gc28gbG9uZyBhcyBhbnkgb2YgdGhlIG9ic2VydmVkCisgICAgICAgIG5vZGVz
IGFyZSBrZXB0IGFsaXZlIGJ5IEdDLCB0aGVuIGl0cyBvYnNlcnZlcidzIEpTIHdyYXBwZXIgaXMg
a2VwdCBhbGl2ZS4KKworICAgICAgICBSZXNpemVPYnNlcnZlciBoYWQgYW4gYWRkaXRpb25hbCBi
dWcgdGhhdCBldmVyeSBvYnNlcnZlZCBub2RlIHdhcyBrZXB0IHVzaW5nIEdDUmVhY2hhYmxlUmVm
LAorICAgICAgICB3aGljaCBvYnZpb3VzbHkgbGVha2VkIGV2ZXJ5IG9ic2VydmVkIG5vZGUgdW50
aWwgdGhlIG9ic2VydmF0aW9ucyB3ZXJlIGV4cGxpY2l0bHkgY2xlYXJlZC4KKyAgICAgICAgVGhp
cyBwYXRjaCBtYWtlcyBvbmx5IHRoZSB0YXJnZXQgZWxlbWVudHMgb2YgdGhlIGFjdGl2ZSBvYnNl
cnZhdGlvbnMgKGkuZS4gdGhlcmUgYXJlIGVudHJpZXMKKyAgICAgICAgdG8gYmUgZGVsaXZlcmVk
IHRvIHRoZSBvYnNlcnZlciBjYWxsYmFjaykgYXJlIGtlcHQgYWxpdmUgd2l0aCBHQ1JlYWNoYWJs
ZVJlZiBhcyBkb25lIHdpdGgKKyAgICAgICAgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgYW5kIE11dGF0
aW9uT2JzZXJ2ZXIuCisKKyAgICAgICAgRmluYWxseSwgdGhpcyBwYXRjaCBmaXhlcyB0aGUgYnVn
IHRoYXQgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgd2Fzbid0IGtlZXBpbmcgaXRzIHJvb3Qgbm9kZSBh
bGl2ZS4KKyAgICAgICAgV2UgZXZlbiBoYWQgYSB0ZXN0IHdoaWNoIHdhcyB0ZXN0aW5nIHRoaXMg
ZXJyb25lb3VzbHkgYmVoYXZpb3IuIFRoZSB0ZXN0IGhhcyBiZWVuIHJld3JpdHRlbiB0bworICAg
ICAgICBleHBlY3QgdGhlIG5ldyBiZWhhdmlvci4KKworICAgICAgICBUZXN0czogaW50ZXJzZWN0
aW9uLW9ic2VydmVyL2ludGVyc2VjdGlvbi1vYnNlcnZlci1zaG91bGQtbm90LWxlYWstb2JzZXJ2
ZWQtbm9kZXMuaHRtbAorICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uLW9ic2VydmVyL3Jvb3Qt
ZWxlbWVudC1kZWxldGVkLmh0bWwKKyAgICAgICAgICAgICAgIHJlc2l6ZS1vYnNlcnZlci9yZXNp
emUtb2JzZXJ2ZXItc2hvdWxkLW5vdC1sZWFrLW9ic2VydmVkLW5vZGVzLmh0bWwKKworICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNJbnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4pOiBBZGQgdGhlIHJvb3Qgbm9kZSBhcyBhbiBvcGFxdWUgcm9vdC4KKyAgICAgICAgVGhpcyBo
YXMgYW4gZWZmZWN0IG9mIGtlZXBpbmcgdGhlIHJvb3Qgbm9kZSBhbGl2ZSBzbyBsb25nIGFzIElu
dGVyc2VjdGlvbk9ic2VydmVyIGlzIGFsaXZlLgorICAgICAgICAoV2ViQ29yZTo6SlNJbnRlcnNl
Y3Rpb25PYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6IEFkZGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVzaXplT2JzZXJ2ZXJDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNSZXNpemVPYnNlcnZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyk6IEFkZGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6dXBkYXRlSW50ZXJzZWN0aW9uT2JzZXJ2YXRpb25zKToKKyAgICAgICAg
KiBodG1sL0xhenlMb2FkRnJhbWVPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXp5
TG9hZEZyYW1lT2JzZXJ2ZXI6OmlzT2JzZXJ2ZWQgY29uc3QpOgorICAgICAgICAqIGh0bWwvTGF6
eUxvYWRJbWFnZU9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxhenlMb2FkSW1hZ2VP
YnNlcnZlcjo6aXNPYnNlcnZlZCBjb25zdCk6CisgICAgICAgICogcGFnZS9JbnRlcnNlY3Rpb25P
YnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3Rpb25PYnNlcnZlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVyc2VjdGlvbk9ic2VydmVyOjpJbnRlcnNlY3Rp
b25PYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3Rpb25PYnNlcnZlcjo6fklu
dGVyc2VjdGlvbk9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVyc2VjdGlvbk9ic2Vy
dmVyOjppc09ic2VydmluZyBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJz
ZWN0aW9uT2JzZXJ2ZXI6Om9ic2VydmUpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9u
T2JzZXJ2ZXI6OnZpcnR1YWxIYXNQZW5kaW5nQWN0aXZpdHkgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OmFjdGl2ZURPTU9iamVjdE5hbWUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9uT2JzZXJ2ZXI6
OnN0b3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9uT2JzZXJ2ZXI6
OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzIGNvbnN0KTogQWRkZWQuCisgICAgICAgICogcGFn
ZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9u
T2JzZXJ2ZXI6OnJvb3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXI6Om9ic2VydmF0aW9uVGFyZ2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRl
cnNlY3Rpb25PYnNlcnZlcjo6aGFzT2JzZXJ2YXRpb25UYXJnZXRzIGNvbnN0KToKKyAgICAgICAg
KiBwYWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmlkbDoKKyAgICAgICAgKiBwYWdlL1Jlc2l6ZU9i
c2VydmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc2l6ZU9ic2VydmF0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzaXplT2JzZXJ2YXRpb246OlJlc2l6ZU9ic2VydmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc2l6ZU9ic2VydmF0aW9uOjp0YXJnZXRFbGVtZW50
RGVwdGggY29uc3QpOgorICAgICAgICAqIHBhZ2UvUmVzaXplT2JzZXJ2YXRpb24uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc2l6ZU9ic2VydmF0aW9uOjp0YXJnZXQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzaXplT2JzZXJ2YXRpb24pOiBSZW5hbWVkIG1fcGVuZGluZ1RhcmdldHMgdG8g
bV9hY3RpdmVPYnNlcnZhdGlvblRhcmdldHMgdG8gcmVmbGVjdAorICAgICAgICB0aGUgbmV3IHNl
bWFudGljcy4KKyAgICAgICAgKiBwYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc2l6ZU9ic2VydmVyOjpSZXNpemVPYnNlcnZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNpemVPYnNlcnZlcjo6b2JzZXJ2ZSk6IERvbid0IHN0b3JlIHRoZSBuZXcgb2JzZXJ2YXRp
b24gdGFyZ2V0IHdpdGggR0NSZWFjaGFibGVSZWYgYXMKKyAgICAgICAgdGhhdCB3b3VsZCByZXN1
bHQgaW4gYW4gaW1tZWRpYXRlIGxlYWsgb2YgdGhpcyBlbGVtZW50LgorICAgICAgICAoV2ViQ29y
ZTo6UmVzaXplT2JzZXJ2ZXI6OmdhdGhlck9ic2VydmF0aW9ucyk6IE5vdyB0aGF0IHdlIGhhdmUg
YW4gYWN0aXZlIG9ic2VydmF0aW9uIChpLmUuIHRoZXJlCisgICAgICAgIGlzIGFuIGVudHJ5IHRv
IGJlIGRlbGl2ZXJlZCB0byB0aGUgSlMgY2FsbGJhY2spLCBzdG9yZSB0aGUgdGFyZ2V0IGVsZW1l
bnQgdXNpbmcgR0NSZWFjaGFibGVSZWYuCisgICAgICAgIFRoaXMga2VlcHMgdGhlIEpTIHdyYXBw
ZXIgb2YgdGhpcyB0YXJnZXQgZWxlbWVudCBhbGl2ZSBiZXR3ZWVuIG5vdyBhbmQgd2hlbiB0aGUg
SlMgY2FsbGJhY2sgaXMKKyAgICAgICAgbm90aWZpZWQgb2YgdGhpcyBlbGVtZW50J3MgcmVzaXpl
LiBXaXRob3V0IHRoaXMgR0NSZWFjaGFibGVSZWYsIEpTIHdyYXBwZXIgb2YgdGhlIGVsZW1lbnQg
Y2FuIGJlCisgICAgICAgIGVycm9uZW91c2x5IGNvbGxlY3RlZCB3aGVuIHRoZXJlIGlzIG5vIEpT
IHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBhbmQgdGhlIGVsZW1lbnQgaXMgbm8gbG9uZ2VyIGlu
CisgICAgICAgIGFueSBsaXZlIGRvY3VtZW50LiBOb3RlIHRoYXQgdGhpcyBHQyBiZWhhdmlvciBp
cyBhbHJlYWR5IHRlc3RlZCBieSBleGlzdGluZyB0ZXN0cy4gVGhpcyBwYXRjaAorICAgICAgICBz
aW1wbHkgZGVsYXlzIHRoZSB1c2Ugb2YgR0NSZWFjaGFibGVSZWYgZnJvbSB3aGVuIFJlc2l6ZU9i
c2VydmVyIHN0YXJ0ZWQgb2JzZXJ2aW5nIHRoaXMgZWxlbWVudAorICAgICAgICB0byB3aGVuIHdl
IGNyZWF0ZWQgYW4gYWN0aXZlIG9ic2VydmF0aW9uIGZvciB0aGUgZWxlbWVudDsgdGhpcyBpcyBi
ZWNhdXNlIEdDUmVhY2hhYmxlUmVmIGxpa2UKKyAgICAgICAgYSBwZW5kaW5nIGFjdGl2aXR5IG9m
IEFjdGl2ZURPTU9iamVjdCBpcyBvbmx5IGFwcHJvcHJpYXRlIHdoZW4gdGhlcmUgaXMgYSBkZWZp
bml0ZSBlbmQgdG8gaXQuCisgICAgICAgIChXZWJDb3JlOjpSZXNpemVPYnNlcnZlcjo6aXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
c2l6ZU9ic2VydmVyOjpyZW1vdmVBbGxUYXJnZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc2l6
ZU9ic2VydmVyOjpyZW1vdmVPYnNlcnZhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNpemVP
YnNlcnZlcjo6dmlydHVhbEhhc1BlbmRpbmdBY3Rpdml0eSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZXNpemVPYnNlcnZlcjo6YWN0aXZlRE9NT2JqZWN0TmFtZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNpemVPYnNlcnZlcjo6c3RvcCk6IERlbGV0
ZWQuCisgICAgICAgICogcGFnZS9SZXNpemVPYnNlcnZlci5oOgorICAgICAgICAqIHBhZ2UvUmVz
aXplT2JzZXJ2ZXIuaWRsOgorCiAyMDIxLTA3LTA3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgT3VyIHN0cnVjdHVyZWQgY2xvbmluZyBpbXBsZW1lbnRhdGlvbiBk
b2VzIG5vdCBlbmNvZGUgYWxsIG9mIFJlZ0V4cCdzIGZsYWdzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ludGVyc2VjdGlvbk9ic2VydmVyQ3VzdG9tLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20uY3Bw
CmluZGV4IDdjMWI1ZjFhMWFhNWQ2MzgzZTdjMjExNDk0ZWJkMjQ3ZTY1YjA2ZDQuLjA1NjA4MTA5
YjViNzFhYmNhYmIyNmQ0MTk3YWQ1YjNiMDliMzQ4MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDdXN0b20uY3Bw
CkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNJbnRl
cnNlY3Rpb25PYnNlcnZlci5oIgogCisjaW5jbHVkZSAiSlNOb2RlQ3VzdG9tLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0zNiw4ICszNywxOSBAQCB2b2lkIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKGF1dG8qIGNhbGxiYWNr
ID0gd3JhcHBlZCgpLmNhbGxiYWNrQ29uY3VycmVudGx5KCkpCiAgICAgICAgIGNhbGxiYWNrLT52
aXNpdEpTRnVuY3Rpb24odmlzaXRvcik7CisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qo
d3JhcHBlZCgpLnJvb3QoKSkpOwogfQogCiBERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJF
TihKU0ludGVyc2VjdGlvbk9ic2VydmVyKTsKIAorYm9vbCBKU0ludGVyc2VjdGlvbk9ic2VydmVy
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25z
dCBjaGFyKipyZWFzb24pCit7CisgICAgaWYgKGpzQ2FzdDxKU0ludGVyc2VjdGlvbk9ic2VydmVy
Kj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpLT53cmFwcGVkKCkuaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHModmlzaXRvcikpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCisgICAg
ICAgICAgICAqcmVhc29uID0gIlJlYWNoYWJsZSBmcm9tIG9ic2VydmVkIG5vZGVzIjsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNS
ZXNpemVPYnNlcnZlckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jl
c2l6ZU9ic2VydmVyQ3VzdG9tLmNwcAppbmRleCAzNGQ3NzkzYjBlOTQxMDkyZGY4N2ViZmEwNTIw
YjQzYmVhMmM5ZTdhLi5hNjIwNTEyOWViZTg2NzQ3MmQ2YTdjNTkwNTE3YmJmNTlkZDVlZDI0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVyQ3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jlc2l6ZU9ic2VydmVy
Q3VzdG9tLmNwcApAQCAtNDEsNCArNDEsMTQgQEAgdm9pZCBKU1Jlc2l6ZU9ic2VydmVyOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihWaXNpdG9yJiB2aXNpdG9yKQogCiBERUZJTkVfVklTSVRfQURE
SVRJT05BTF9DSElMRFJFTihKU1Jlc2l6ZU9ic2VydmVyKTsKIAorYm9vbCBKU1Jlc2l6ZU9ic2Vy
dmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBj
b25zdCBjaGFyKipyZWFzb24pCit7CisgICAgaWYgKGpzQ2FzdDxKU1Jlc2l6ZU9ic2VydmVyKj4o
aGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpLT53cmFwcGVkKCkuaXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHModmlzaXRvcikpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCisgICAgICAg
ICAgICAqcmVhc29uID0gIlJlYWNoYWJsZSBmcm9tIG9ic2VydmVkIG5vZGVzIjsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggM2NlODYyMGQ0Mjk0ZTg5Njcy
NzEyNzY1MzRhNjc4NDM1MjFhZjljNi4uOTI2OWJlOTc0YjUzM2Q3ZmM4NjUyYzY0M2UwNDRiMGI4
ZGFhMTQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC03OTExLDcgKzc5MTEsNyBAQCB2
b2lkIERvY3VtZW50Ojp1cGRhdGVJbnRlcnNlY3Rpb25PYnNlcnZhdGlvbnMoKQogICAgICAgICBh
dXRvIHRpbWVzdGFtcCA9IG9ic2VydmVyLT5ub3dUaW1lc3RhbXAoKTsKICAgICAgICAgaWYgKCF0
aW1lc3RhbXApCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yIChFbGVtZW50KiB0
YXJnZXQgOiBvYnNlcnZlci0+b2JzZXJ2YXRpb25UYXJnZXRzKCkpIHsKKyAgICAgICAgZm9yIChh
dXRvJiB0YXJnZXQgOiBvYnNlcnZlci0+b2JzZXJ2YXRpb25UYXJnZXRzKCkpIHsKICAgICAgICAg
ICAgIGF1dG8mIHRhcmdldFJlZ2lzdHJhdGlvbnMgPSB0YXJnZXQtPmludGVyc2VjdGlvbk9ic2Vy
dmVyRGF0YUlmRXhpc3RzKCktPnJlZ2lzdHJhdGlvbnM7CiAgICAgICAgICAgICBhdXRvIGluZGV4
ID0gdGFyZ2V0UmVnaXN0cmF0aW9ucy5maW5kTWF0Y2hpbmcoW29ic2VydmVyXShhdXRvJiByZWdp
c3RyYXRpb24pIHsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVnaXN0cmF0aW9uLm9ic2VydmVy
LmdldCgpID09IG9ic2VydmVyOwpAQCAtNzk2OCw3ICs3OTY4LDcgQEAgdm9pZCBEb2N1bWVudDo6
dXBkYXRlSW50ZXJzZWN0aW9uT2JzZXJ2YXRpb25zKCkKICAgICAgICAgICAgICAgICAgICAgeyB0
YXJnZXRCb3VuZGluZ0NsaWVudFJlY3QueCgpLCB0YXJnZXRCb3VuZGluZ0NsaWVudFJlY3QueSgp
LCB0YXJnZXRCb3VuZGluZ0NsaWVudFJlY3Qud2lkdGgoKSwgdGFyZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0LmhlaWdodCgpIH0sCiAgICAgICAgICAgICAgICAgICAgIHsgY2xpZW50SW50ZXJzZWN0aW9u
UmVjdC54KCksIGNsaWVudEludGVyc2VjdGlvblJlY3QueSgpLCBjbGllbnRJbnRlcnNlY3Rpb25S
ZWN0LndpZHRoKCksIGNsaWVudEludGVyc2VjdGlvblJlY3QuaGVpZ2h0KCkgfSwKICAgICAgICAg
ICAgICAgICAgICAgaW50ZXJzZWN0aW9uUmF0aW8sCi0gICAgICAgICAgICAgICAgICAgIHRhcmdl
dCwKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmdldCgpLAogICAgICAgICAgICAgICAgICAg
ICB0aHJlc2hvbGRJbmRleCA+IDAsCiAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAg
ICAgIG5lZWROb3RpZnkgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9M
YXp5TG9hZEZyYW1lT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9MYXp5TG9hZEZy
YW1lT2JzZXJ2ZXIuY3BwCmluZGV4IDdjMmJhMTVhNTE0ZTQzZGQ5NzIyNzUxMDllM2RiOTQyZTg1
MjMyYjYuLjc0MGZlYTE4NTNlNDQ5Y2Y0NDFkZmU1YWJhZGMwZGU1MzFkNTUxOWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGF6eUxvYWRGcmFtZU9ic2VydmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0xhenlMb2FkRnJhbWVPYnNlcnZlci5jcHAKQEAgLTEwMyw3ICsx
MDMsNyBAQCBJbnRlcnNlY3Rpb25PYnNlcnZlciogTGF6eUxvYWRGcmFtZU9ic2VydmVyOjppbnRl
cnNlY3Rpb25PYnNlcnZlcihEb2N1bWVudCYgZG9jdQogCiBib29sIExhenlMb2FkRnJhbWVPYnNl
cnZlcjo6aXNPYnNlcnZlZChFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewotICAgIHJldHVybiBt
X29ic2VydmVyICYmIG1fb2JzZXJ2ZXItPm9ic2VydmF0aW9uVGFyZ2V0cygpLmNvbnRhaW5zKCZl
bGVtZW50KTsKKyAgICByZXR1cm4gbV9vYnNlcnZlciAmJiBtX29ic2VydmVyLT5pc09ic2Vydmlu
ZyhlbGVtZW50KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9MYXp5
TG9hZEltYWdlT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9MYXp5TG9hZEltYWdl
T2JzZXJ2ZXIuY3BwCmluZGV4IGY2YzY0MjBkY2I3N2Q1M2M2YmEwZTIyM2YzYmNhMDQ3ZGM0ZTk4
ZWQuLjE0ZjJkZWZjMjI2ZmIwZmIwM2MyNzU4NmU2YzE3ODlmNzFmN2M5NDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvTGF6eUxvYWRJbWFnZU9ic2VydmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0xhenlMb2FkSW1hZ2VPYnNlcnZlci5jcHAKQEAgLTk1LDcgKzk1LDcg
QEAgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIqIExhenlMb2FkSW1hZ2VPYnNlcnZlcjo6aW50ZXJzZWN0
aW9uT2JzZXJ2ZXIoRG9jdW1lbnQmIGRvY3UKIAogYm9vbCBMYXp5TG9hZEltYWdlT2JzZXJ2ZXI6
OmlzT2JzZXJ2ZWQoRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9vYnNl
cnZlciAmJiBtX29ic2VydmVyLT5vYnNlcnZhdGlvblRhcmdldHMoKS5jb250YWlucygmZWxlbWVu
dCk7CisgICAgcmV0dXJuIG1fb2JzZXJ2ZXIgJiYgbV9vYnNlcnZlci0+aXNPYnNlcnZpbmcoZWxl
bWVudCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZXJzZWN0
aW9uT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZl
ci5jcHAKaW5kZXggMTRiYWVhMGRmZTQzNTZiYjk3OTU4ZWY3MzRkMGJjM2RkZTM2YTc5YS4uZTg2
NjM4MzkwOWQ1NjNlY2JlODEyZjQyYjgxMWYxZTQ4OTM4NzMxOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNs
dWRlICJJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSW50ZXJzZWN0
aW9uT2JzZXJ2ZXJFbnRyeS5oIgogI2luY2x1ZGUgIlBlcmZvcm1hbmNlLmgiCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg2LDcgKzg3LDcgQEAgc3Rh
dGljIEV4Y2VwdGlvbk9yPExlbmd0aEJveD4gcGFyc2VSb290TWFyZ2luKFN0cmluZyYgcm9vdE1h
cmdpbikKIAogRXhjZXB0aW9uT3I8UmVmPEludGVyc2VjdGlvbk9ic2VydmVyPj4gSW50ZXJzZWN0
aW9uT2JzZXJ2ZXI6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIFJlZjxJbnRlcnNlY3Rpb25P
YnNlcnZlckNhbGxiYWNrPiYmIGNhbGxiYWNrLCBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6SW5pdCYm
IGluaXQpCiB7Ci0gICAgQ29udGFpbmVyTm9kZSogcm9vdCA9IG51bGxwdHI7CisgICAgUmVmUHRy
PENvbnRhaW5lck5vZGU+IHJvb3Q7CiAgICAgaWYgKGluaXQucm9vdCkgewogICAgICAgICBXVEY6
OnN3aXRjaE9uKCppbml0LnJvb3QsIFsmcm9vdF0gKFJlZlB0cjxFbGVtZW50PiBlbGVtZW50KSB7
CiAgICAgICAgICAgICByb290ID0gZWxlbWVudC5nZXQoKTsKQEAgLTExMiwzOCArMTEzLDM0IEBA
IEV4Y2VwdGlvbk9yPFJlZjxJbnRlcnNlY3Rpb25PYnNlcnZlcj4+IEludGVyc2VjdGlvbk9ic2Vy
dmVyOjpjcmVhdGUoRG9jdW1lbnQmIGRvCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
UmFuZ2VFcnJvciwgIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ0ludGVyc2VjdGlvbk9ic2VydmVyJzog
YWxsIHRocmVzaG9sZHMgbXVzdCBsaWUgaW4gdGhlIHJhbmdlIFswLjAsIDEuMF0uIiB9OwogICAg
IH0KIAotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGRvY3Vt
ZW50LCBXVEZNb3ZlKGNhbGxiYWNrKSwgcm9vdCwgcm9vdE1hcmdpbk9yRXhjZXB0aW9uLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpLCBXVEZNb3ZlKHRocmVzaG9sZHMpKSk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZG9jdW1lbnQsIFdURk1vdmUoY2FsbGJhY2sp
LCByb290LmdldCgpLCByb290TWFyZ2luT3JFeGNlcHRpb24ucmVsZWFzZVJldHVyblZhbHVlKCks
IFdURk1vdmUodGhyZXNob2xkcykpKTsKIH0KIAogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OkludGVy
c2VjdGlvbk9ic2VydmVyKERvY3VtZW50JiBkb2N1bWVudCwgUmVmPEludGVyc2VjdGlvbk9ic2Vy
dmVyQ2FsbGJhY2s+JiYgY2FsbGJhY2ssIENvbnRhaW5lck5vZGUqIHJvb3QsIExlbmd0aEJveCYm
IHBhcnNlZFJvb3RNYXJnaW4sIFZlY3Rvcjxkb3VibGU+JiYgdGhyZXNob2xkcykKLSAgICA6IEFj
dGl2ZURPTU9iamVjdChjYWxsYmFjay0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICwg
bV9yb290KHJvb3QpCisgICAgOiBtX3Jvb3QobWFrZVdlYWtQdHIocm9vdCkpCiAgICAgLCBtX3Jv
b3RNYXJnaW4oV1RGTW92ZShwYXJzZWRSb290TWFyZ2luKSkKICAgICAsIG1fdGhyZXNob2xkcyhX
VEZNb3ZlKHRocmVzaG9sZHMpKQogICAgICwgbV9jYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSkK
IHsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KG1fcm9vdCkpIHsKLSAgICAgICAgYXV0byYgb2JzZXJ2
ZXJEYXRhID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCptX3Jvb3QpLmVuc3VyZUludGVyc2VjdGlvbk9i
c2VydmVyRGF0YSgpOworICAgIGlmIChpczxEb2N1bWVudD4ocm9vdCkpIHsKKyAgICAgICAgYXV0
byYgb2JzZXJ2ZXJEYXRhID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpyb290KS5lbnN1cmVJbnRlcnNl
Y3Rpb25PYnNlcnZlckRhdGEoKTsKICAgICAgICAgb2JzZXJ2ZXJEYXRhLm9ic2VydmVycy5hcHBl
bmQobWFrZVdlYWtQdHIodGhpcykpOwotICAgIH0gZWxzZSBpZiAobV9yb290KSB7Ci0gICAgICAg
IEFTU0VSVChpczxFbGVtZW50PihtX3Jvb3QpKTsKLSAgICAgICAgYXV0byYgb2JzZXJ2ZXJEYXRh
ID0gZG93bmNhc3Q8RWxlbWVudD4oKm1fcm9vdCkuZW5zdXJlSW50ZXJzZWN0aW9uT2JzZXJ2ZXJE
YXRhKCk7CisgICAgfSBlbHNlIGlmIChyb290KSB7CisgICAgICAgIGF1dG8mIG9ic2VydmVyRGF0
YSA9IGRvd25jYXN0PEVsZW1lbnQ+KCpyb290KS5lbnN1cmVJbnRlcnNlY3Rpb25PYnNlcnZlckRh
dGEoKTsKICAgICAgICAgb2JzZXJ2ZXJEYXRhLm9ic2VydmVycy5hcHBlbmQobWFrZVdlYWtQdHIo
dGhpcykpOwogICAgIH0gZWxzZSBpZiAoYXV0byogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpKQog
ICAgICAgICBtX2ltcGxpY2l0Um9vdERvY3VtZW50ID0gbWFrZVdlYWtQdHIoZnJhbWUtPm1haW5G
cmFtZSgpLmRvY3VtZW50KCkpOwogCiAgICAgc3RkOjpzb3J0KG1fdGhyZXNob2xkcy5iZWdpbigp
LCBtX3RocmVzaG9sZHMuZW5kKCkpOwotICAgIHN1c3BlbmRJZk5lZWRlZCgpOwogfQogCiBJbnRl
cnNlY3Rpb25PYnNlcnZlcjo6fkludGVyc2VjdGlvbk9ic2VydmVyKCkKIHsKLSAgICBpZiAoaXM8
RG9jdW1lbnQ+KG1fcm9vdCkpIHsKLSAgICAgICAgZG93bmNhc3Q8RG9jdW1lbnQ+KCptX3Jvb3Qp
LmludGVyc2VjdGlvbk9ic2VydmVyRGF0YUlmRXhpc3RzKCktPm9ic2VydmVycy5yZW1vdmVGaXJz
dCh0aGlzKTsKLSAgICB9IGVsc2UgaWYgKG1fcm9vdCkgewotICAgICAgICBBU1NFUlQoaXM8RWxl
bWVudD4obV9yb290KSk7Ci0gICAgICAgIGRvd25jYXN0PEVsZW1lbnQ+KCptX3Jvb3QpLmludGVy
c2VjdGlvbk9ic2VydmVyRGF0YUlmRXhpc3RzKCktPm9ic2VydmVycy5yZW1vdmVGaXJzdCh0aGlz
KTsKLSAgICB9CisgICAgUmVmUHRyIHJvb3QgPSBtX3Jvb3QuZ2V0KCk7CisgICAgaWYgKGlzPERv
Y3VtZW50Pihyb290KSkKKyAgICAgICAgZG93bmNhc3Q8RG9jdW1lbnQ+KCpyb290KS5pbnRlcnNl
Y3Rpb25PYnNlcnZlckRhdGFJZkV4aXN0cygpLT5vYnNlcnZlcnMucmVtb3ZlRmlyc3QodGhpcyk7
CisgICAgZWxzZSBpZiAocm9vdCkKKyAgICAgICAgZG93bmNhc3Q8RWxlbWVudD4oKnJvb3QpLmlu
dGVyc2VjdGlvbk9ic2VydmVyRGF0YUlmRXhpc3RzKCktPm9ic2VydmVycy5yZW1vdmVGaXJzdCh0
aGlzKTsKICAgICBkaXNjb25uZWN0KCk7CiB9CiAKQEAgLTE1NywxNCArMTU0LDIyIEBAIFN0cmlu
ZyBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6cm9vdE1hcmdpbigpIGNvbnN0CiAgICAgcmV0dXJuIHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAorYm9vbCBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6
aXNPYnNlcnZpbmcoY29uc3QgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9vYnNlcnZhdGlvblRhcmdldHMuZmluZE1hdGNoaW5nKFsmXShhdXRvJiB0YXJnZXQpIHsKKyAg
ICAgICAgcmV0dXJuIHRhcmdldC5nZXQoKSA9PSAmZWxlbWVudDsKKyAgICB9KSAhPSBub3RGb3Vu
ZDsKK30KKwogdm9pZCBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6b2JzZXJ2ZShFbGVtZW50JiB0YXJn
ZXQpCiB7Ci0gICAgaWYgKCF0cmFja2luZ0RvY3VtZW50KCkgfHwgIW1fY2FsbGJhY2sgfHwgbV9v
YnNlcnZhdGlvblRhcmdldHMuY29udGFpbnMoJnRhcmdldCkpCisgICAgaWYgKCF0cmFja2luZ0Rv
Y3VtZW50KCkgfHwgIW1fY2FsbGJhY2sgfHwgaXNPYnNlcnZpbmcodGFyZ2V0KSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgdGFyZ2V0LmVuc3VyZUludGVyc2VjdGlvbk9ic2VydmVyRGF0YSgpLnJl
Z2lzdHJhdGlvbnMuYXBwZW5kKHsgbWFrZVdlYWtQdHIodGhpcyksIHN0ZDo6bnVsbG9wdCB9KTsK
ICAgICBib29sIGhhZE9ic2VydmF0aW9uVGFyZ2V0cyA9IGhhc09ic2VydmF0aW9uVGFyZ2V0cygp
OwotICAgIG1fb2JzZXJ2YXRpb25UYXJnZXRzLmFwcGVuZCgmdGFyZ2V0KTsKKyAgICBtX29ic2Vy
dmF0aW9uVGFyZ2V0cy5hcHBlbmQobWFrZVdlYWtQdHIodGFyZ2V0KSk7CisKICAgICBhdXRvKiBk
b2N1bWVudCA9IHRyYWNraW5nRG9jdW1lbnQoKTsKICAgICBpZiAoIWhhZE9ic2VydmF0aW9uVGFy
Z2V0cykKICAgICAgICAgZG9jdW1lbnQtPmFkZEludGVyc2VjdGlvbk9ic2VydmVyKCp0aGlzKTsK
QEAgLTIyMyw3ICsyMjgsNyBAQCBib29sIEludGVyc2VjdGlvbk9ic2VydmVyOjpyZW1vdmVUYXJn
ZXRSZWdpc3RyYXRpb24oRWxlbWVudCYgdGFyZ2V0KQogCiB2b2lkIEludGVyc2VjdGlvbk9ic2Vy
dmVyOjpyZW1vdmVBbGxUYXJnZXRzKCkKIHsKLSAgICBmb3IgKGF1dG8qIHRhcmdldCA6IG1fb2Jz
ZXJ2YXRpb25UYXJnZXRzKSB7CisgICAgZm9yIChhdXRvJiB0YXJnZXQgOiBtX29ic2VydmF0aW9u
VGFyZ2V0cykgewogICAgICAgICBib29sIHJlbW92ZWQgPSByZW1vdmVUYXJnZXRSZWdpc3RyYXRp
b24oKnRhcmdldCk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CiAg
ICAgfQpAQCAtMjc5LDIyICsyODQsMTMgQEAgdm9pZCBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6bm90
aWZ5KCkKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZpcmVPYnNlcnZlckNhbGxi
YWNrKCpjb250ZXh0KTsKIH0KIAotYm9vbCBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6dmlydHVhbEhh
c1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Citib29sIEludGVyc2VjdGlvbk9ic2VydmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIChoYXNPYnNlcnZhdGlvblRhcmdldHMoKSAmJiB0cmFja2lu
Z0RvY3VtZW50KCkpIHx8ICFtX3F1ZXVlZEVudHJpZXMuaXNFbXB0eSgpOwotfQotCi1jb25zdCBj
aGFyKiBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuICJJbnRlcnNlY3Rpb25PYnNlcnZlciI7Ci19Ci0KLXZvaWQgSW50ZXJzZWN0
aW9uT2JzZXJ2ZXI6OnN0b3AoKQotewotICAgIGRpc2Nvbm5lY3QoKTsKLSAgICBtX2NhbGxiYWNr
ID0gbnVsbHB0cjsKLSAgICBtX3F1ZXVlZEVudHJpZXMuY2xlYXIoKTsKLSAgICBtX3BlbmRpbmdU
YXJnZXRzLmNsZWFyKCk7CisgICAgZm9yIChhdXRvJiB0YXJnZXQgOiBtX29ic2VydmF0aW9uVGFy
Z2V0cykgeworICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IHRhcmdldC5nZXQoKTsgZWxlbWVu
dCAmJiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChlbGVtZW50LT5vcGFxdWVSb290KCkpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9J
bnRlcnNlY3Rpb25PYnNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25P
YnNlcnZlci5oCmluZGV4IGY1MDlkMzU2NTE4ZDIxNzRhOTBjNTAzOWQxMTZiMzgxMGM3ZGZjYTMu
LmMzMTI3MmI1NjJmMWZlYzJkYzc3ZWU1MzY3N2Y2MzcxMzEzYWMxNDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmgKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2lm
IEVOQUJMRShJTlRFUlNFQ1RJT05fT0JTRVJWRVIpCiAKLSNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKICNpbmNsdWRlICJHQ1JlYWNoYWJsZVJlZi5oIgogI2luY2x1ZGUgIkludGVyc2VjdGlv
bk9ic2VydmVyQ2FsbGJhY2suaCIKICNpbmNsdWRlICJJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5
LmgiCkBAIC0zNyw2ICszNiwxMiBAQAogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBYnN0
cmFjdFNsb3RWaXNpdG9yOworCit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9j
dW1lbnQ7CkBAIC02MCw3ICs2NSw3IEBAIHN0cnVjdCBJbnRlcnNlY3Rpb25PYnNlcnZlckRhdGEg
ewogICAgIFZlY3RvcjxJbnRlcnNlY3Rpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4gcmVnaXN0cmF0
aW9uczsKIH07CiAKLWNsYXNzIEludGVyc2VjdGlvbk9ic2VydmVyIDogcHVibGljIFJlZkNvdW50
ZWQ8SW50ZXJzZWN0aW9uT2JzZXJ2ZXI+LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMg
Q2FuTWFrZVdlYWtQdHI8SW50ZXJzZWN0aW9uT2JzZXJ2ZXI+IHsKK2NsYXNzIEludGVyc2VjdGlv
bk9ic2VydmVyIDogcHVibGljIFJlZkNvdW50ZWQ8SW50ZXJzZWN0aW9uT2JzZXJ2ZXI+LCBwdWJs
aWMgQ2FuTWFrZVdlYWtQdHI8SW50ZXJzZWN0aW9uT2JzZXJ2ZXI+IHsKIHB1YmxpYzoKICAgICBz
dHJ1Y3QgSW5pdCB7CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8RWxlbWVu
dD4sIFJlZlB0cjxEb2N1bWVudD4+PiByb290OwpAQCAtNzQsMTEgKzc5LDEzIEBAIHB1YmxpYzoK
IAogICAgIERvY3VtZW50KiB0cmFja2luZ0RvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9yb290
ID8gJm1fcm9vdC0+ZG9jdW1lbnQoKSA6IG1faW1wbGljaXRSb290RG9jdW1lbnQuZ2V0KCk7IH0K
IAotICAgIENvbnRhaW5lck5vZGUqIHJvb3QoKSBjb25zdCB7IHJldHVybiBtX3Jvb3Q7IH0KKyAg
ICBDb250YWluZXJOb2RlKiByb290KCkgY29uc3QgeyByZXR1cm4gbV9yb290LmdldCgpOyB9CiAg
ICAgU3RyaW5nIHJvb3RNYXJnaW4oKSBjb25zdDsKICAgICBjb25zdCBMZW5ndGhCb3gmIHJvb3RN
YXJnaW5Cb3goKSBjb25zdCB7IHJldHVybiBtX3Jvb3RNYXJnaW47IH0KICAgICBjb25zdCBWZWN0
b3I8ZG91YmxlPiYgdGhyZXNob2xkcygpIGNvbnN0IHsgcmV0dXJuIG1fdGhyZXNob2xkczsgfQot
ICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4gb2JzZXJ2YXRpb25UYXJnZXRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9vYnNlcnZhdGlvblRhcmdldHM7IH0KKyAgICBjb25zdCBWZWN0b3I8V2Vha1B0cjxF
bGVtZW50Pj4mIG9ic2VydmF0aW9uVGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fb2JzZXJ2YXRp
b25UYXJnZXRzOyB9CisgICAgYm9vbCBoYXNPYnNlcnZhdGlvblRhcmdldHMoKSBjb25zdCB7IHJl
dHVybiBtX29ic2VydmF0aW9uVGFyZ2V0cy5zaXplKCk7IH0KKyAgICBib29sIGlzT2JzZXJ2aW5n
KGNvbnN0IEVsZW1lbnQmKSBjb25zdDsKIAogICAgIHZvaWQgb2JzZXJ2ZShFbGVtZW50Jik7CiAg
ICAgdm9pZCB1bm9ic2VydmUoRWxlbWVudCYpOwpAQCAtOTEsNyArOTgsNiBAQCBwdWJsaWM6CiAg
ICAgVGFrZW5SZWNvcmRzIHRha2VSZWNvcmRzKCk7CiAKICAgICB2b2lkIHRhcmdldERlc3Ryb3ll
ZChFbGVtZW50Jik7Ci0gICAgYm9vbCBoYXNPYnNlcnZhdGlvblRhcmdldHMoKSBjb25zdCB7IHJl
dHVybiBtX29ic2VydmF0aW9uVGFyZ2V0cy5zaXplKCk7IH0KICAgICB2b2lkIHJvb3REZXN0cm95
ZWQoKTsKIAogICAgIHN0ZDo6b3B0aW9uYWw8UmVkdWNlZFJlc29sdXRpb25TZWNvbmRzPiBub3dU
aW1lc3RhbXAoKSBjb25zdDsKQEAgLTEwMCwyNCArMTA2LDIwIEBAIHB1YmxpYzoKICAgICB2b2lk
IG5vdGlmeSgpOwogCiAgICAgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjayogY2FsbGJhY2tD
b25jdXJyZW50bHkoKSB7IHJldHVybiBtX2NhbGxiYWNrLmdldCgpOyB9CisgICAgYm9vbCBpc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkFic3RyYWN0U2xvdFZpc2l0b3ImKSBjb25zdDsK
IAogcHJpdmF0ZToKICAgICBJbnRlcnNlY3Rpb25PYnNlcnZlcihEb2N1bWVudCYsIFJlZjxJbnRl
cnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrPiYmLCBDb250YWluZXJOb2RlKiByb290LCBMZW5ndGhC
b3gmJiBwYXJzZWRSb290TWFyZ2luLCBWZWN0b3I8ZG91YmxlPiYmIHRocmVzaG9sZHMpOwogCi0g
ICAgLy8gQWN0aXZlRE9NT2JqZWN0LgotICAgIGJvb2wgdmlydHVhbEhhc1BlbmRpbmdBY3Rpdml0
eSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUo
KSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKLQogICAgIGJvb2wg
cmVtb3ZlVGFyZ2V0UmVnaXN0cmF0aW9uKEVsZW1lbnQmKTsKICAgICB2b2lkIHJlbW92ZUFsbFRh
cmdldHMoKTsKIAogICAgIFdlYWtQdHI8RG9jdW1lbnQ+IG1faW1wbGljaXRSb290RG9jdW1lbnQ7
Ci0gICAgQ29udGFpbmVyTm9kZSogbV9yb290OworICAgIFdlYWtQdHI8Q29udGFpbmVyTm9kZT4g
bV9yb290OwogICAgIExlbmd0aEJveCBtX3Jvb3RNYXJnaW47CiAgICAgVmVjdG9yPGRvdWJsZT4g
bV90aHJlc2hvbGRzOwogICAgIFJlZlB0cjxJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrPiBt
X2NhbGxiYWNrOwotICAgIFZlY3RvcjxFbGVtZW50Kj4gbV9vYnNlcnZhdGlvblRhcmdldHM7Cisg
ICAgVmVjdG9yPFdlYWtQdHI8RWxlbWVudD4+IG1fb2JzZXJ2YXRpb25UYXJnZXRzOwogICAgIFZl
Y3RvcjxHQ1JlYWNoYWJsZVJlZjxFbGVtZW50Pj4gbV9wZW5kaW5nVGFyZ2V0czsKICAgICBWZWN0
b3I8UmVmPEludGVyc2VjdGlvbk9ic2VydmVyRW50cnk+PiBtX3F1ZXVlZEVudHJpZXM7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmlkbAppbmRleCA5ODA5
NTYzNTNlNWRkNWM0M2ZkMGVkYzU2OGJjMzI3YWE5ZGVhYTVjLi43YWRjZTgyMWEwODE0YmUyMzFh
YmFmY2FiNWJiM2IzY2Y0MjY0NmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0lu
dGVyc2VjdGlvbk9ic2VydmVyLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVyc2Vj
dGlvbk9ic2VydmVyLmlkbApAQCAtMjYsMTEgKzI2LDEyIEBACiAvLyBodHRwczovL3dpY2cuZ2l0
aHViLmlvL0ludGVyc2VjdGlvbk9ic2VydmVyLwogCiBbCi0gICAgQWN0aXZlRE9NT2JqZWN0LAog
ICAgIENvbmRpdGlvbmFsPUlOVEVSU0VDVElPTl9PQlNFUlZFUiwKICAgICBFbmFibGVkQnlTZXR0
aW5nPUludGVyc2VjdGlvbk9ic2VydmVyLAogICAgIEV4cG9zZWQ9V2luZG93LAogICAgIEpTQ3Vz
dG9tTWFya0Z1bmN0aW9uLAorICAgIEN1c3RvbUlzUmVhY2hhYmxlLAorICAgIEltcGxlbWVudGF0
aW9uTGFja3NWVGFibGUKIF0gaW50ZXJmYWNlIEludGVyc2VjdGlvbk9ic2VydmVyIHsKICAgICBb
Q2FsbFdpdGg9RG9jdW1lbnRdIGNvbnN0cnVjdG9yKEludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJh
Y2sgY2FsbGJhY2ssIG9wdGlvbmFsIEludGVyc2VjdGlvbk9ic2VydmVySW5pdCBvcHRpb25zKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZhdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmF0aW9uLmNwcAppbmRleCA3YzFhOTIz
MDcyY2RjMDAyZjFlOGVlOWEwNjM1ZjdhNjM3M2Q3OTJmLi5lMzRjMDk1ZDA1Y2FiOGFlYjcwNWY4
NGI3YWQ2OTI0ZDFiYTNlNGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6
ZU9ic2VydmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmF0
aW9uLmNwcApAQCAtMzQsMTMgKzM0LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVm
PFJlc2l6ZU9ic2VydmF0aW9uPiBSZXNpemVPYnNlcnZhdGlvbjo6Y3JlYXRlKEVsZW1lbnQqIHRh
cmdldCkKK1JlZjxSZXNpemVPYnNlcnZhdGlvbj4gUmVzaXplT2JzZXJ2YXRpb246OmNyZWF0ZShF
bGVtZW50JiB0YXJnZXQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVzaXplT2JzZXJ2
YXRpb24odGFyZ2V0KSk7CiB9CiAKLVJlc2l6ZU9ic2VydmF0aW9uOjpSZXNpemVPYnNlcnZhdGlv
bihFbGVtZW50KiBlbGVtZW50KQotICAgIDogbV90YXJnZXQoZWxlbWVudCkKK1Jlc2l6ZU9ic2Vy
dmF0aW9uOjpSZXNpemVPYnNlcnZhdGlvbihFbGVtZW50JiBlbGVtZW50KQorICAgIDogbV90YXJn
ZXQgeyBtYWtlV2Vha1B0cihlbGVtZW50KSB9CiB7CiB9CiAKQEAgLTkyLDcgKzkyLDcgQEAgYm9v
bCBSZXNpemVPYnNlcnZhdGlvbjo6ZWxlbWVudFNpemVDaGFuZ2VkKExheW91dFNpemUmIGN1cnJl
bnRTaXplKSBjb25zdAogc2l6ZV90IFJlc2l6ZU9ic2VydmF0aW9uOjp0YXJnZXRFbGVtZW50RGVw
dGgoKSBjb25zdAogewogICAgIHVuc2lnbmVkIGRlcHRoID0gMDsKLSAgICBmb3IgKEVsZW1lbnQq
IG93bmVyRWxlbWVudCAgPSBtX3RhcmdldDsgb3duZXJFbGVtZW50OyBvd25lckVsZW1lbnQgPSBv
d25lckVsZW1lbnQtPmRvY3VtZW50KCkub3duZXJFbGVtZW50KCkpIHsKKyAgICBmb3IgKEVsZW1l
bnQqIG93bmVyRWxlbWVudCA9IG1fdGFyZ2V0LmdldCgpOyBvd25lckVsZW1lbnQ7IG93bmVyRWxl
bWVudCA9IG93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKSkgewogICAgICAg
ICBmb3IgKEVsZW1lbnQqIHBhcmVudCA9IG93bmVyRWxlbWVudDsgcGFyZW50OyBwYXJlbnQgPSBw
YXJlbnQtPnBhcmVudEVsZW1lbnQoKSkKICAgICAgICAgICAgICsrZGVwdGg7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZhdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZhdGlvbi5oCmluZGV4IGM3ZGIxZmRlY2E1MzgxMDIx
Y2Q2ZDNkNDY3Y2ZiNjUwNTYzYjIxMmQuLjg1ZjllMDZmOWZlNmIwMGQ0OWE3MjgwZDY5ZTc4OWEz
ZTljNmU0ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2YXRp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmF0aW9uLmgKQEAgLTMw
LDYgKzMwLDcgQEAKICNpbmNsdWRlICJMYXlvdXRTaXplLmgiCiAKICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMzgsNyArMzksNyBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgUmVzaXplT2JzZXJ2
YXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxSZXNpemVPYnNlcnZhdGlvbj4gewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVzaXplT2JzZXJ2
YXRpb24+IGNyZWF0ZShFbGVtZW50KiB0YXJnZXQpOworICAgIHN0YXRpYyBSZWY8UmVzaXplT2Jz
ZXJ2YXRpb24+IGNyZWF0ZShFbGVtZW50JiB0YXJnZXQpOwogCiAgICAgflJlc2l6ZU9ic2VydmF0
aW9uKCk7CiAKQEAgLTQ4LDEzICs0OSwxMyBAQCBwdWJsaWM6CiAgICAgRmxvYXRSZWN0IGNvbXB1
dGVDb250ZW50UmVjdCgpIGNvbnN0OwogCiAgICAgYm9vbCBlbGVtZW50U2l6ZUNoYW5nZWQoTGF5
b3V0U2l6ZSYpIGNvbnN0OwotICAgIEVsZW1lbnQqIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1f
dGFyZ2V0OyB9CisgICAgRWxlbWVudCogdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQu
Z2V0KCk7IH0KICAgICBzaXplX3QgdGFyZ2V0RWxlbWVudERlcHRoKCkgY29uc3Q7CiAKIHByaXZh
dGU6Ci0gICAgUmVzaXplT2JzZXJ2YXRpb24oRWxlbWVudCogdGFyZ2V0KTsKKyAgICBSZXNpemVP
YnNlcnZhdGlvbihFbGVtZW50JiB0YXJnZXQpOwogCi0gICAgRWxlbWVudCogbV90YXJnZXQ7Cisg
ICAgV2Vha1B0cjxFbGVtZW50PiBtX3RhcmdldDsKICAgICBMYXlvdXRTaXplIG1fbGFzdE9ic2Vy
dmF0aW9uU2l6ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXpl
T2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5jcHAKaW5k
ZXggNTUwMDM2YmU1MGU3OGU0NjYyODZkMzExN2Y1ZjhhMWRmZmNlZDI5MC4uMGNhNTc5ZTQzNDcz
ZmE2MDRlYmVjNmIwYTlkYzIyNDI1YTk4NWRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9SZXNpemVPYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVP
YnNlcnZlci5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiUmVzaXplT2JzZXJ2
ZXJFbnRyeS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Fic3RyYWN0U2xvdFZpc2l0b3JJ
bmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsMTEgKzQxLDkgQEAgUmVm
PFJlc2l6ZU9ic2VydmVyPiBSZXNpemVPYnNlcnZlcjo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVu
dCwgUmVmPFJlc2l6ZU9ic2VydmUKIH0KIAogUmVzaXplT2JzZXJ2ZXI6OlJlc2l6ZU9ic2VydmVy
KERvY3VtZW50JiBkb2N1bWVudCwgUmVmPFJlc2l6ZU9ic2VydmVyQ2FsbGJhY2s+JiYgY2FsbGJh
Y2spCi0gICAgOiBBY3RpdmVET01PYmplY3QoY2FsbGJhY2stPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSkKLSAgICAsIG1fZG9jdW1lbnQobWFrZVdlYWtQdHIoZG9jdW1lbnQpKQorICAgIDogbV9k
b2N1bWVudChtYWtlV2Vha1B0cihkb2N1bWVudCkpCiAgICAgLCBtX2NhbGxiYWNrKFdURk1vdmUo
Y2FsbGJhY2spKQogewotICAgIHN1c3BlbmRJZk5lZWRlZCgpOwogfQogCiBSZXNpemVPYnNlcnZl
cjo6flJlc2l6ZU9ic2VydmVyKCkKQEAgLTY5LDggKzY4LDcgQEAgdm9pZCBSZXNpemVPYnNlcnZl
cjo6b2JzZXJ2ZShFbGVtZW50JiB0YXJnZXQpCiAgICAgYXV0byYgb2JzZXJ2ZXJEYXRhID0gdGFy
Z2V0LmVuc3VyZVJlc2l6ZU9ic2VydmVyRGF0YSgpOwogICAgIG9ic2VydmVyRGF0YS5vYnNlcnZl
cnMuYXBwZW5kKG1ha2VXZWFrUHRyKHRoaXMpKTsKIAotICAgIG1fb2JzZXJ2YXRpb25zLmFwcGVu
ZChSZXNpemVPYnNlcnZhdGlvbjo6Y3JlYXRlKCZ0YXJnZXQpKTsKLSAgICBtX3BlbmRpbmdUYXJn
ZXRzLmFwcGVuZCh0YXJnZXQpOworICAgIG1fb2JzZXJ2YXRpb25zLmFwcGVuZChSZXNpemVPYnNl
cnZhdGlvbjo6Y3JlYXRlKHRhcmdldCkpOwogCiAgICAgaWYgKG1fZG9jdW1lbnQpIHsKICAgICAg
ICAgbV9kb2N1bWVudC0+YWRkUmVzaXplT2JzZXJ2ZXIoKnRoaXMpOwpAQCAtMTA3LDYgKzEwNSw3
IEBAIHNpemVfdCBSZXNpemVPYnNlcnZlcjo6Z2F0aGVyT2JzZXJ2YXRpb25zKHNpemVfdCBkZWVw
ZXJUaGFuKQogICAgICAgICAgICAgaWYgKGRlcHRoID4gZGVlcGVyVGhhbikgewogICAgICAgICAg
ICAgICAgIG9ic2VydmF0aW9uLT51cGRhdGVPYnNlcnZhdGlvblNpemUoY3VycmVudFNpemUpOwog
ICAgICAgICAgICAgICAgIG1fYWN0aXZlT2JzZXJ2YXRpb25zLmFwcGVuZChvYnNlcnZhdGlvbi5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgbV9hY3RpdmVPYnNlcnZhdGlvblRhcmdldHMuYXBwZW5k
KCpvYnNlcnZhdGlvbi0+dGFyZ2V0KCkpOwogICAgICAgICAgICAgICAgIG1pbk9ic2VydmVkRGVw
dGggPSBzdGQ6Om1pbihkZXB0aCwgbWluT2JzZXJ2ZWREZXB0aCk7CiAgICAgICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgICAgICBtX2hhc1NraXBwZWRPYnNlcnZhdGlvbnMgPSB0cnVlOwpAQCAt
MTMzLDYgKzEzMiwxNSBAQCB2b2lkIFJlc2l6ZU9ic2VydmVyOjpkZWxpdmVyT2JzZXJ2YXRpb25z
KCkKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZpcmVPYnNlcnZlckNhbGxiYWNr
KCpjb250ZXh0KTsKIH0KIAorYm9vbCBSZXNpemVPYnNlcnZlcjo6aXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAoreworICAg
IGZvciAoYXV0byYgb2JzZXJ2YXRpb24gOiBtX29ic2VydmF0aW9ucykgeworICAgICAgICBpZiAo
YXV0byogdGFyZ2V0ID0gb2JzZXJ2YXRpb24tPnRhcmdldCgpOyB0YXJnZXQgJiYgdmlzaXRvci5j
b250YWluc09wYXF1ZVJvb3QodGFyZ2V0LT5vcGFxdWVSb290KCkpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBSZXNpemVPYnNl
cnZlcjo6cmVtb3ZlVGFyZ2V0KEVsZW1lbnQmIHRhcmdldCkKIHsKICAgICBhdXRvKiBvYnNlcnZl
ckRhdGEgPSB0YXJnZXQucmVzaXplT2JzZXJ2ZXJEYXRhKCk7CkBAIC0xNDksMTQgKzE1NywxNCBA
QCB2b2lkIFJlc2l6ZU9ic2VydmVyOjpyZW1vdmVBbGxUYXJnZXRzKCkKICAgICAgICAgYm9vbCBy
ZW1vdmVkID0gcmVtb3ZlVGFyZ2V0KCpvYnNlcnZhdGlvbi0+dGFyZ2V0KCkpOwogICAgICAgICBB
U1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwogICAgIH0KLSAgICBtX3BlbmRpbmdUYXJn
ZXRzLmNsZWFyKCk7CisgICAgbV9hY3RpdmVPYnNlcnZhdGlvblRhcmdldHMuY2xlYXIoKTsKICAg
ICBtX2FjdGl2ZU9ic2VydmF0aW9ucy5jbGVhcigpOwogICAgIG1fb2JzZXJ2YXRpb25zLmNsZWFy
KCk7CiB9CiAKIGJvb2wgUmVzaXplT2JzZXJ2ZXI6OnJlbW92ZU9ic2VydmF0aW9uKGNvbnN0IEVs
ZW1lbnQmIHRhcmdldCkKIHsKLSAgICBtX3BlbmRpbmdUYXJnZXRzLnJlbW92ZUZpcnN0TWF0Y2hp
bmcoWyZ0YXJnZXRdKGF1dG8mIHBlbmRpbmdUYXJnZXQpIHsKKyAgICBtX2FjdGl2ZU9ic2VydmF0
aW9uVGFyZ2V0cy5yZW1vdmVGaXJzdE1hdGNoaW5nKFsmdGFyZ2V0XShhdXRvJiBwZW5kaW5nVGFy
Z2V0KSB7CiAgICAgICAgIHJldHVybiBwZW5kaW5nVGFyZ2V0LnB0cigpID09ICZ0YXJnZXQ7CiAg
ICAgfSk7CiAKQEAgLTE2OSwyMiArMTc3LDYgQEAgYm9vbCBSZXNpemVPYnNlcnZlcjo6cmVtb3Zl
T2JzZXJ2YXRpb24oY29uc3QgRWxlbWVudCYgdGFyZ2V0KQogICAgIH0pOwogfQogCi1ib29sIFJl
c2l6ZU9ic2VydmVyOjp2aXJ0dWFsSGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gKGhhc09ic2VydmF0aW9ucygpICYmIG1fZG9jdW1lbnQpIHx8ICFtX2FjdGl2ZU9ic2Vy
dmF0aW9ucy5pc0VtcHR5KCk7Ci19Ci0KLWNvbnN0IGNoYXIqIFJlc2l6ZU9ic2VydmVyOjphY3Rp
dmVET01PYmplY3ROYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIlJlc2l6ZU9ic2VydmVyIjsK
LX0KLQotdm9pZCBSZXNpemVPYnNlcnZlcjo6c3RvcCgpCi17Ci0gICAgZGlzY29ubmVjdCgpOwot
ICAgIG1fY2FsbGJhY2sgPSBudWxscHRyOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoUkVTSVpFX09CU0VSVkVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVP
YnNlcnZlci5oCmluZGV4IGU0MTU2ZjMxZTMwZTI2NTE0OTU0MDE5MjQ0ZTc3YjkzODBiMDMxMDku
LjZmNGY2OTdjNjYzYWFiNGEwMmQ4YmI0ZjU2N2QxZDYwYmVmYjExYTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1Jlc2l6ZU9ic2VydmVyLmgKQEAgLTI3LDEzICsyNywxOSBAQAogCiAjaWYgRU5BQkxFKFJF
U0laRV9PQlNFUlZFUikKIAotI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUg
IkdDUmVhY2hhYmxlUmVmLmgiCiAjaW5jbHVkZSAiUmVzaXplT2JzZXJ2YXRpb24uaCIKICNpbmNs
dWRlICJSZXNpemVPYnNlcnZlckNhbGxiYWNrLmgiCisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBBYnN0cmFjdFNsb3RWaXNpdG9yOworCit9CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7CkBAIC00NCw4ICs1MCw3IEBAIHN0cnVj
dCBSZXNpemVPYnNlcnZlckRhdGEgewogICAgIFZlY3RvcjxXZWFrUHRyPFJlc2l6ZU9ic2VydmVy
Pj4gb2JzZXJ2ZXJzOwogfTsKIAotY2xhc3MgUmVzaXplT2JzZXJ2ZXIgOiBwdWJsaWMgUmVmQ291
bnRlZDxSZXNpemVPYnNlcnZlcj4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBDYW5N
YWtlV2Vha1B0cjxSZXNpemVPYnNlcnZlcj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworY2xhc3MgUmVzaXplT2JzZXJ2ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxSZXNpemVPYnNlcnZl
cj4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZXNpemVPYnNlcnZlcj4gewogcHVibGljOgogICAg
IHN0YXRpYyBSZWY8UmVzaXplT2JzZXJ2ZXI+IGNyZWF0ZShEb2N1bWVudCYsIFJlZjxSZXNpemVP
YnNlcnZlckNhbGxiYWNrPiYmKTsKICAgICB+UmVzaXplT2JzZXJ2ZXIoKTsKQEAgLTY1LDE1ICs3
MCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIYXNTa2lwcGVkT2JzZXJ2YXRpb25zKGJvb2wg
c2tpcHBlZCkgeyBtX2hhc1NraXBwZWRPYnNlcnZhdGlvbnMgPSBza2lwcGVkOyB9CiAKICAgICBS
ZXNpemVPYnNlcnZlckNhbGxiYWNrKiBjYWxsYmFja0NvbmN1cnJlbnRseSgpIHsgcmV0dXJuIG1f
Y2FsbGJhY2suZ2V0KCk7IH0KKyAgICBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6QWJzdHJhY3RTbG90VmlzaXRvciYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFJlc2l6ZU9i
c2VydmVyKERvY3VtZW50JiwgUmVmPFJlc2l6ZU9ic2VydmVyQ2FsbGJhY2s+JiYpOwogCi0gICAg
Ly8gQWN0aXZlRE9NT2JqZWN0LgotICAgIGJvb2wgdmlydHVhbEhhc1BlbmRpbmdBY3Rpdml0eSgp
IGNvbnN0IG92ZXJyaWRlOwotICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBj
b25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKLQogICAgIGJvb2wgcmVt
b3ZlVGFyZ2V0KEVsZW1lbnQmKTsKICAgICB2b2lkIHJlbW92ZUFsbFRhcmdldHMoKTsKICAgICBi
b29sIHJlbW92ZU9ic2VydmF0aW9uKGNvbnN0IEVsZW1lbnQmKTsKQEAgLTgzLDcgKzg0LDcgQEAg
cHJpdmF0ZToKICAgICBWZWN0b3I8UmVmPFJlc2l6ZU9ic2VydmF0aW9uPj4gbV9vYnNlcnZhdGlv
bnM7CiAKICAgICBWZWN0b3I8UmVmPFJlc2l6ZU9ic2VydmF0aW9uPj4gbV9hY3RpdmVPYnNlcnZh
dGlvbnM7Ci0gICAgVmVjdG9yPEdDUmVhY2hhYmxlUmVmPEVsZW1lbnQ+PiBtX3BlbmRpbmdUYXJn
ZXRzOworICAgIFZlY3RvcjxHQ1JlYWNoYWJsZVJlZjxFbGVtZW50Pj4gbV9hY3RpdmVPYnNlcnZh
dGlvblRhcmdldHM7CiAgICAgYm9vbCBtX2hhc1NraXBwZWRPYnNlcnZhdGlvbnMgeyBmYWxzZSB9
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmlkbAppbmRleCAwNWU4NDdk
OTAwODMxNjY2NzVhNWE3N2U5NWU1YzhlZTlmODJmNmRlLi4zYmZmNjM4ZWY3NjZiOGFlZmYwN2M2
YTY2ZGYyNTk3NGY1MTFlNDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6
ZU9ic2VydmVyLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmlk
bApAQCAtMjYsMTEgKzI2LDEyIEBACiAvLyBodHRwczovL3dpY2cuZ2l0aHViLmlvL1Jlc2l6ZU9i
c2VydmVyLwogCiBbCi0gICAgQWN0aXZlRE9NT2JqZWN0LAogICAgIENvbmRpdGlvbmFsPVJFU0la
RV9PQlNFUlZFUiwKICAgICBFbmFibGVkQnlTZXR0aW5nPVJlc2l6ZU9ic2VydmVyLAogICAgIEV4
cG9zZWQ9V2luZG93LAogICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAorICAgIEN1c3RvbUlzUmVh
Y2hhYmxlLAorICAgIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUKIF0gaW50ZXJmYWNlIFJlc2l6
ZU9ic2VydmVyIHsKICAgICBbQ2FsbFdpdGg9RG9jdW1lbnRdIGNvbnN0cnVjdG9yKFJlc2l6ZU9i
c2VydmVyQ2FsbGJhY2sgY2FsbGJhY2spOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYTRhZDhkY2Y1YzAyNmU5NjFlOTU4
ZmMwODM3ZjAwYThjMmNlZDJiNC4uMDZmNDBkNWI1N2M3MmI5MDJiN2U4YjAzOWU0YmQ3OWJiZjc4
NDc5NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDIxLTA3LTA5ICBSeW9zdWtlIE5pd2EgIDxy
bml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlc2l6ZU9ic2VydmVyIC8gSW50ZXJzZWN0aW9u
T2JzZXJ2ZXIgbWVtb3J5IGxlYWsgb24gZGV0YWNoZWQgJiBvdXQgb2YgcmVmZXJlbmNlIGVsZW1l
bnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcx
OTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc5ODM5ODUxPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IENocmlzIER1bWV6LgorCisgICAgICAgIEFkZGVkIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIGxl
YWtpbmcgbm9kZXMgd2l0aCBJbnRlcnNlY3Rpb25PYnNlcnZlciBhbmQgUmVzaXplT2JzZXZlci4K
KworICAgICAgICBBbHNvIHJld3JvdGUgaW50ZXJzZWN0aW9uLW9ic2VydmVyL3Jvb3QtZWxlbWVu
dC1kZWxldGVkLmh0bWwgc2luY2UgdGhlIHRlc3Qgd2FzIHByZXZpb3VzbHkgYXNzZXJ0aW5nCisg
ICAgICAgIHRoYXQgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucm9vdCBiZWNvbWVzIG51bGwgaWYgaXQg
d2FzIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQsIHdoaWNoIGlzIHdyb25nLgorCisgICAgICAg
ICogaW50ZXJzZWN0aW9uLW9ic2VydmVyL2ludGVyc2VjdGlvbi1vYnNlcnZlci1zaG91bGQtbm90
LWxlYWstb2JzZXJ2ZWQtbm9kZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBpbnRl
cnNlY3Rpb24tb2JzZXJ2ZXIvaW50ZXJzZWN0aW9uLW9ic2VydmVyLXNob3VsZC1ub3QtbGVhay1v
YnNlcnZlZC1ub2Rlcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBpbnRlcnNlY3Rpb24tb2JzZXJ2
ZXIvcm9vdC1lbGVtZW50LWRlbGV0ZWQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGludGVyc2Vj
dGlvbi1vYnNlcnZlci9yb290LWVsZW1lbnQtZGVsZXRlZC5odG1sOgorICAgICAgICAqIHJlc2l6
ZS1vYnNlcnZlci9yZXNpemUtb2JzZXJ2ZXItc2hvdWxkLW5vdC1sZWFrLW9ic2VydmVkLW5vZGVz
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcmVzaXplLW9ic2VydmVyL3Jlc2l6ZS1v
YnNlcnZlci1zaG91bGQtbm90LWxlYWstb2JzZXJ2ZWQtbm9kZXMuaHRtbDogQWRkZWQuCisKIDIw
MjEtMDctMDcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBPdXIg
c3RydWN0dXJlZCBjbG9uaW5nIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGVuY29kZSBhbGwgb2Yg
UmVnRXhwJ3MgZmxhZ3MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ludGVyc2VjdGlvbi1vYnNl
cnZlci9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXItc2hvdWxkLW5vdC1sZWFrLW9ic2VydmVkLW5vZGVz
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ludGVyc2VjdGlvbi1vYnNlcnZlci9pbnRlcnNl
Y3Rpb24tb2JzZXJ2ZXItc2hvdWxkLW5vdC1sZWFrLW9ic2VydmVkLW5vZGVzLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iMTVmYzViODQ2M2ZlMzhjMmRkMWEwNDMzZDczYzBjMjhlZWI3ZDYwCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW50ZXJzZWN0aW9uLW9ic2VydmVyL2ludGVy
c2VjdGlvbi1vYnNlcnZlci1zaG91bGQtbm90LWxlYWstb2JzZXJ2ZWQtbm9kZXMtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsNCBAQAorVGhpcyB0ZXN0cyBvYnNlcnZpbmcgYW4gZWxlbWVudCB3aXRo
IGFuIEludGVyc2VjdGlvbk9ic2VydmVyIGFuZCByZW1vdmluZyB0aGUgZWxlbWVudCBmcm9tIHRo
ZSBkb2N1bWVudC4KK1RoZSBlbGVtZW50IHNob3VsZCBiZWNvbWUgZWxpZ2libGUgZm9yIEdDIGF0
IHNvbWUgcG9pbnQuCisKK1BBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ludGVyc2VjdGlv
bi1vYnNlcnZlci9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXItc2hvdWxkLW5vdC1sZWFrLW9ic2VydmVk
LW5vZGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXIvaW50ZXJzZWN0
aW9uLW9ic2VydmVyLXNob3VsZC1ub3QtbGVhay1vYnNlcnZlZC1ub2Rlcy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQ0MDBkMDRjNDA5NzRjMmMzZDZiN2FkZDQwOTBmMDVhYzQ1NmUwMjIKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXIvaW50ZXJzZWN0aW9uLW9i
c2VydmVyLXNob3VsZC1ub3QtbGVhay1vYnNlcnZlZC1ub2Rlcy5odG1sCkBAIC0wLDAgKzEsNTEg
QEAKKzwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgSW50ZXJzZWN0aW9u
T2JzZXJ2ZXJFbmFibGVkPXRydWUgXSAtLT4KKzxodG1sPgorPGJvZHk+Cis8cHJlIGlkPSJsb2ci
PlRoaXMgdGVzdHMgb2JzZXJ2aW5nIGFuIGVsZW1lbnQgd2l0aCBhbiBJbnRlcnNlY3Rpb25PYnNl
cnZlciBhbmQgcmVtb3ZpbmcgdGhlIGVsZW1lbnQgZnJvbSB0aGUgZG9jdW1lbnQuCitUaGUgZWxl
bWVudCBzaG91bGQgYmVjb21lIGVsaWdpYmxlIGZvciBHQyBhdCBzb21lIHBvaW50LgorCis8L3By
ZT4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvZ2MuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4K
KworbGV0IGluaXRpYWxOb2RlQ291bnQ7CitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBpZiAo
IXdpbmRvdy50ZXN0UnVubmVyIHx8ICF3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAgIGxvZy50
ZXh0Q29udGVudCArPSAnRkFJTCAtIFRoaXMgdGVzdCByZXF1aXJlcyBpbnRlcm5hbHMnOyAKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICB0
ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKworICAgIGluaXRpYWxOb2RlQ291bnQgPSBpbnRl
cm5hbHMucmVmZXJlbmNpbmdOb2RlQ291bnQoZG9jdW1lbnQpOworCisgICAgY29uc3QgaW50ZXJz
ZWN0aW9uT2JzZXJ2ZXJzID0gW107CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7ICsraSkK
KyAgICAgICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJzLnB1c2goY3JlYXRlSW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXIoKSk7CisKKyAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4geworICAgICAgICBz
ZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgICAgIGdjKCk7CisgICAgICAgICAgICBsb2cudGV4
dENvbnRlbnQgKz0gaW50ZXJuYWxzLnJlZmVyZW5jaW5nTm9kZUNvdW50KGRvY3VtZW50KSA8IGlu
aXRpYWxOb2RlQ291bnQgKyBpbnRlcnNlY3Rpb25PYnNlcnZlcnMubGVuZ3RoICogMC44ID8gJ1BB
U1MnIDogJ0ZBSUwgLSBMZXNzIHRoYW4gMjAlIG9mIG5vZGVzIHdlcmUgY29sbGVjdGVkLicKKyAg
ICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9LCAwKTsKKyAgICB9
KTsKK30KKworZnVuY3Rpb24gY3JlYXRlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKQoreworICAgIGNv
bnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBjb25zdCBp
bnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoKSA9PiB7IH0p
Lm9ic2VydmUoZWxlbWVudCk7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50
KTsKKyAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgZWxlbWVudC5yZW1vdmUoKTsKKyAg
ICB9LCAwKTsKKyAgICByZXR1cm4gaW50ZXJzZWN0aW9uT2JzZXJ2ZXI7Cit9CisKK29ubG9hZCA9
IHJ1blRlc3Q7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW50ZXJzZWN0aW9uLW9ic2VydmVyL3Jvb3QtZWxlbWVudC1kZWxldGVkLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2ludGVyc2VjdGlvbi1vYnNlcnZlci9yb290LWVsZW1lbnQt
ZGVsZXRlZC1leHBlY3RlZC50eHQKaW5kZXggNmZlOTVhOWJmNDA0YWUyNWM5ZjViNDEyNjI0ZjAz
MmFiNjA2YTdjYy4uMGE1OTM5OWIyYzBmYjA3NjI0OTI4YzA0NWNkYjA2ZGZlNjcxMTUzZSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW50ZXJzZWN0aW9uLW9ic2VydmVyL3Jvb3QtZWxlbWVudC1k
ZWxldGVkLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnRlcnNlY3Rpb24tb2JzZXJ2
ZXIvcm9vdC1lbGVtZW50LWRlbGV0ZWQtZXhwZWN0ZWQudHh0CkBAIC0xLDMgKzEsMjUgQEAKK1Ro
aXMgdGVzdHMgcmVtb3ZpbmcgdGhlIHJvb3Qgbm9kZSBvZiBJbnRlcnNlY3Rpb25PYnNlcnZlci4g
VGhlIHJvb3Qgbm9kZSBzaG91bGQgYmUgZWxpZ2libGUgZm9yIEdDLgogCi1QQVNTIEludGVyc2Vj
dGlvbk9ic2VydmVyIGRvZXNuJ3Qga2VlcCB1bnJlYWNoYWJsZSByb290IGFsaXZlCitUZXN0IDE6
IFBBU1MKK1Rlc3QgMjogUEFTUworVGVzdCAzOiBQQVNTCitUZXN0IDQ6IFBBU1MKK1Rlc3QgNTog
UEFTUworVGVzdCA2OiBQQVNTCitUZXN0IDc6IFBBU1MKK1Rlc3QgODogUEFTUworVGVzdCA5OiBQ
QVNTCitUZXN0IDEwOiBQQVNTCitUZXN0IDExOiBQQVNTCitUZXN0IDEyOiBQQVNTCitUZXN0IDEz
OiBQQVNTCitUZXN0IDE0OiBQQVNTCitUZXN0IDE1OiBQQVNTCitUZXN0IDE2OiBQQVNTCitUZXN0
IDE3OiBQQVNTCitUZXN0IDE4OiBQQVNTCitUZXN0IDE5OiBQQVNTCitUZXN0IDIwOiBQQVNTCitO
b2RlIGNvdW50OiBQQVNTCitJbnRlcnNlY3Rpb24gb2JzZXJ2ZXIgY291bnQ6IFBBU1MKIApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW50ZXJzZWN0aW9uLW9ic2VydmVyL3Jvb3QtZWxlbWVudC1k
ZWxldGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXIvcm9vdC1lbGVt
ZW50LWRlbGV0ZWQuaHRtbAppbmRleCA3ZTcyYzRlMDM0MmE3Yzc1ZGI1MmZkZjFmZjFkNzgxYWEx
ZjYwYWFhLi41OWU3YzM3OWY1YzA4NTMyYjVhNDFhZjcxYjBjYzZhNTg0YmU5YmJiIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXIvcm9vdC1lbGVtZW50LWRlbGV0
ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXIvcm9vdC1lbGVt
ZW50LWRlbGV0ZWQuaHRtbApAQCAtMSw0NCArMSw5NSBAQAogPCFET0NUWVBFIGh0bWw+PCEtLSB3
ZWJraXQtdGVzdC1ydW5uZXIgWyBJbnRlcnNlY3Rpb25PYnNlcnZlckVuYWJsZWQ9dHJ1ZSBdIC0t
PgogPGhlYWQ+Ci08c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Nj
cmlwdD4KLTxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9nYy5qcyI+PC9zY3JpcHQ+CiA8Ym9k
eT4KKzxwcmUgaWQ9ImxvZyI+VGhpcyB0ZXN0cyByZW1vdmluZyB0aGUgcm9vdCBub2RlIG9mIElu
dGVyc2VjdGlvbk9ic2VydmVyLiBUaGUgcm9vdCBub2RlIHNob3VsZCBiZSBlbGlnaWJsZSBmb3Ig
R0MuCiAKLTxkaXYgaWQ9InJvb3QiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZSI+Ci0gICAgPGRp
diBpZD0idGFyZ2V0IiBzdHlsZT0id2lkdGg6IDEwMHB4OyBoZWlnaHQ6IDEwMHB4OyBiYWNrZ3Jv
dW5kLWNvbG9yOiBncmVlbiI+PC9kaXY+Ci08L2Rpdj4KLQorPC9wcmU+CiA8c2NyaXB0PgotICAg
IGZ1bmN0aW9uIG9ic2VydmVyU2hvdWxkQmVSZW1vdmVkKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7Ci0gICAgICAgICAgICBoYW5kbGUgPSBz
ZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBHQ0NvbnRyb2xsZXIuY29s
bGVjdCgpOwotICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHMgJiYgaW50ZXJuYWxzLm51bWJl
ck9mSW50ZXJzZWN0aW9uT2JzZXJ2ZXJzKGRvY3VtZW50KSA9PSAwKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNsZWFySW50ZXJ2YWwoaGFuZGxlKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzb2x2
ZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sIDEwKTsKLSAgICAgICAgfSk7
CisKK2Z1bmN0aW9uIGNyZWF0ZVJvb3Qocm9vdElkKQoreworICAgIGNvbnN0IGNvbnRhaW5lciA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIGNvbnRhaW5lci5pbm5lckhUTUwg
PSBgPGRpdiBpZD0iJHtyb290SWR9IiBjbGFzcz0icm9vdCIgc3R5bGU9InBvc2l0aW9uOmFic29s
dXRlIj48ZGl2IGNsYXNzPSJ0YXJnZXQiIHN0eWxlPSJ3aWR0aDogMTAwcHg7IGhlaWdodDogMTAw
cHg7IGJhY2tncm91bmQtY29sb3I6IGdyZWVuIj48L2Rpdj48L2Rpdj5gOworICAgIGNvbnN0IHJv
b3QgPSBjb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncm9vdCcpWzBdOworICAgIHJv
b3QucmVtb3ZlKCk7CisgICAgcmV0dXJuIHJvb3Q7Cit9CisKK2xldCBpbml0aWFsTm9kZUNvdW50
ID0gMDsKK3dpbmRvdy5vbmxvYWQgPSAoKSA9PiB7CisgICAgaWYgKCF3aW5kb3cudGVzdFJ1bm5l
ciB8fCAhd2luZG93LmludGVybmFscykgeworICAgICAgICBsb2cudGV4dENvbnRlbnQgKz0gJ0ZB
SUwgLSBUaGlzIHRlc3QgcmVxdWlyZXMgaW50ZXJuYWxzJzsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoaW50ZXJuYWxzLm51bWJlck9mSW50ZXJzZWN0aW9uT2JzZXJ2ZXJzKGRvY3Vt
ZW50KSkgeworICAgICAgICBsb2cudGV4dENvbnRlbnQgKz0gJ0ZBSUwgLSBJbml0aWFsIGludGVy
c2VjdGlvbiBvYnNlcnZlciBjb3VudCBpcyBub3QgemVybyc7CisgICAgICAgIHJldHVybjsKICAg
ICB9CisgICAgaW5pdGlhbE5vZGVDb3VudCA9IGludGVybmFscy5yZWZlcmVuY2luZ05vZGVDb3Vu
dChkb2N1bWVudCk7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1bm5l
ci53YWl0VW50aWxEb25lKCk7CisgICAgc2V0VGltZW91dCgoKSA9PiB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKSwgNTAwMCk7CisgICAgcnVuVGVzdCgxKTsKK30KKworY29uc3QgdG90YWxUZXN0Q291
bnQgPSAyMDsKK2Z1bmN0aW9uIHJ1blRlc3QodGVzdE51bWJlcikgeworICAgIGxvZy50ZXh0Q29u
dGVudCArPSBgVGVzdCAke3Rlc3ROdW1iZXJ9OiBgOworICAgIGNvbnN0IHJvb3RJZCA9ICdyb290
LScgKyB0ZXN0TnVtYmVyOworICAgIGxldCByb290ID0gY3JlYXRlUm9vdChyb290SWQpOworICAg
IHJvb3QuYWxpdmUgPSB0cnVlOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocm9vdCk7
CisKKyAgICBsZXQgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKCkgPT4geyB9
LCB7IHJvb3QgfSk7CisgICAgbGV0IHRhcmdldCA9IHJvb3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSgndGFyZ2V0JylbMF07CisgICAgaWYgKG9ic2VydmVyLnJvb3QgIT0gcm9vdCkKKyAgICAgICAg
cmV0dXJuIHRlc3RGYWlsZWQodGVzdE51bWJlciwgJ29ic2VydmVyLnJvb3QgIT0gcm9vdCBhZnRl
ciBjb25zdHJ1Y3Rpb24nKTsKKyAgICBvYnNlcnZlci5vYnNlcnZlKHRhcmdldCk7CisKKyAgICBy
b290LnJlbW92ZSgpOworICAgIHJvb3QgPSBudWxsOworICAgIHRhcmdldCA9IG51bGw7CisgICAg
cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgb2JzZXJ2ZXIudGFr
ZVJlY29yZHMoKTsKKyAgICAgICAgZ2MoKTsKKworICAgICAgICBpZiAoIW9ic2VydmVyLnJvb3Qp
CisgICAgICAgICAgICByZXR1cm4gdGVzdEZhaWxlZCh0ZXN0TnVtYmVyLCAnb2JzZXJ2ZXIucm9v
dCBpcyBudWxsJyk7CisgICAgICAgIGlmIChvYnNlcnZlci5yb290LmlkICE9IHJvb3RJZCkKKyAg
ICAgICAgICAgIHJldHVybiB0ZXN0RmFpbGVkKHRlc3ROdW1iZXIsIGBvYnNlcnZlci5yb290Lmlk
ICgke29ic2VydmVyLnJvb3QuaWR9KSAhPSByb290SWQgKCR7cm9vdElkfSkgYWZ0ZXIgcnVubmlu
ZyByQUYgYW5kIEdDYCk7CisgICAgICAgIGlmICghb2JzZXJ2ZXIucm9vdC5hbGl2ZSkKKyAgICAg
ICAgICAgIHJldHVybiB0ZXN0RmFpbGVkKHRlc3ROdW1iZXIsICdvYnNlcnZlci5hbGl2ZSBpcyBm
YWxzZScpOworCisgICAgICAgIG9ic2VydmVyID0gbnVsbDsKKyAgICAgICAgZ2MoKTsKKworICAg
ICAgICBsb2cudGV4dENvbnRlbnQgKz0gJ1BBU1Ncbic7CisKKyAgICAgICAgaWYgKHRlc3ROdW1i
ZXIgPCB0b3RhbFRlc3RDb3VudCkKKyAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcnVuVGVz
dCh0ZXN0TnVtYmVyICsgMSksIDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRUaW1l
b3V0KCgpID0+IGZpbmlzaCh0ZXN0TnVtYmVyKSwgMCk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9u
IHRlc3RGYWlsZWQodGVzdE51bWJlciwgZXJyb3IpCit7CisgICAgbG9nLnRleHRDb250ZW50ICs9
IGBGQUlMOiAke2Vycm9yfVxuYDsKKyAgICBmaW5pc2godGVzdE51bWJlcik7Cit9CisKK2Z1bmN0
aW9uIGZpbmlzaChmaW5pc2hlZFRlc3RDb3VudCkKK3sKKyAgICBsb2cudGV4dENvbnRlbnQgKz0g
J05vZGUgY291bnQ6ICc7CisgICAgbG9nLnRleHRDb250ZW50ICs9IChpbnRlcm5hbHMucmVmZXJl
bmNpbmdOb2RlQ291bnQoZG9jdW1lbnQpIDwgaW5pdGlhbE5vZGVDb3VudCArIDIgKiBmaW5pc2hl
ZFRlc3RDb3VudCAqIDAuOCkgPyAnUEFTUycgOiAnRkFJTCAtIExlc3MgdGhhbiAyMCUgb2YgdGhl
IHJvb3Qgbm9kZXMgd2VyZSBjb2xsZWN0ZWQnOworICAgIGxvZy50ZXh0Q29udGVudCArPSAnXG4n
OworICAgIGxvZy50ZXh0Q29udGVudCArPSAnSW50ZXJzZWN0aW9uIG9ic2VydmVyIGNvdW50OiAn
OworICAgIGxvZy50ZXh0Q29udGVudCArPSAoaW50ZXJuYWxzLm51bWJlck9mSW50ZXJzZWN0aW9u
T2JzZXJ2ZXJzKGRvY3VtZW50KSA8IGZpbmlzaGVkVGVzdENvdW50ICogMC44KSA/ICdQQVNTJyA6
ICdGQUlMIC0gTGVzcyB0aGFuIDIwJSBvZiB0aGUgaW50ZXJzZWN0aW9uIG9ic2VydmVycyB3ZXJl
IGNvbGxlY3RlZCc7CisgICAgbG9nLnRleHRDb250ZW50ICs9ICdcbic7CisgICAgdGVzdFJ1bm5l
ci5ub3RpZnlEb25lKCk7Cit9CiAKLSAgICBhc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKLSAgICAg
ICAgdmFyIHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm9vdCcpOwotICAgICAgICB2
YXIgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKSB7fSwgeyBy
b290OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm9vdCcpIH0pOzsKLSAgICAgICAgdmFyIHRh
cmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YXJnZXQnKTsKLSAgICAgICAgYXNzZXJ0
X2VxdWFscyhvYnNlcnZlci5yb290LCByb290LCAnT2JzZXJ2ZXIgc3RhcnRzIG91dCB3aXRoIG5v
bi1udWxsIHJvb3QnKTsKLSAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXQpOwotICAgICAg
ICBhc3NlcnRfZXF1YWxzKGludGVybmFscy5udW1iZXJPZkludGVyc2VjdGlvbk9ic2VydmVycyhk
b2N1bWVudCksIDEpOwotICAgICAgICByb290LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocm9vdCk7
Ci0gICAgICAgIHJvb3QgPSBudWxsOwotICAgICAgICB0YXJnZXQgPSBudWxsOwotICAgICAgICBy
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBvYnNlcnZlci50
YWtlUmVjb3JkcygpOwotICAgICAgICAgICAgb2JzZXJ2ZXJTaG91bGRCZVJlbW92ZWQoKS50aGVu
KHQuc3RlcF9mdW5jX2RvbmUoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0X2Vx
dWFscyhvYnNlcnZlci5yb290LCBudWxsLCAnT2JzZXJ2ZXIgaGFzIG51bGwgcm9vdCBhZnRlciBy
b290IGVsZW1lbnQgaXMgZGVzdHJveWVkJyk7Ci0gICAgICAgICAgICB9KSk7Ci0gICAgICAgIH0p
OwotICAgIH0sICJJbnRlcnNlY3Rpb25PYnNlcnZlciBkb2Vzbid0IGtlZXAgdW5yZWFjaGFibGUg
cm9vdCBhbGl2ZSIpOwogPC9zY3JpcHQ+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9yZXNpemUtb2JzZXJ2ZXIvcmVzaXplLW9ic2VydmVyLXNob3VsZC1ub3QtbGVh
ay1vYnNlcnZlZC1ub2Rlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9yZXNpemUtb2JzZXJ2
ZXIvcmVzaXplLW9ic2VydmVyLXNob3VsZC1ub3QtbGVhay1vYnNlcnZlZC1ub2Rlcy1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjcwOTE0MWFhOTkzYzE3MmNhNWUxNmIzNTcxYjc3YjE2MWFjNzRm
MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3Jlc2l6ZS1vYnNlcnZlci9yZXNpemUt
b2JzZXJ2ZXItc2hvdWxkLW5vdC1sZWFrLW9ic2VydmVkLW5vZGVzLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDQgQEAKK1RoaXMgdGVzdHMgb2JzZXJ2aW5nIGFuIGVsZW1lbnQgd2l0aCBhbiBSZXNp
emVPYnNlcnZlciBhbmQgcmVtb3ZpbmcgdGhlIGVsZW1lbnQgZnJvbSB0aGUgZG9jdW1lbnQuCitU
aGUgZWxlbWVudCBzaG91bGQgYmVjb21lIGVsaWdpYmxlIGZvciBHQyBhdCBzb21lIHBvaW50Lgor
CitQQVNTCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9yZXNpemUtb2JzZXJ2ZXIvcmVzaXplLW9i
c2VydmVyLXNob3VsZC1ub3QtbGVhay1vYnNlcnZlZC1ub2Rlcy5odG1sIGIvTGF5b3V0VGVzdHMv
cmVzaXplLW9ic2VydmVyL3Jlc2l6ZS1vYnNlcnZlci1zaG91bGQtbm90LWxlYWstb2JzZXJ2ZWQt
bm9kZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMmFjNmRkMmMwZTRkOGRlNTljZGNlZWMyMTRiMTkwN2Jl
NzUyOTI4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcmVzaXplLW9ic2VydmVyL3Jl
c2l6ZS1vYnNlcnZlci1zaG91bGQtbm90LWxlYWstb2JzZXJ2ZWQtbm9kZXMuaHRtbApAQCAtMCww
ICsxLDQ3IEBACis8IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIFJlc2l6
ZU9ic2VydmVyRW5hYmxlZD10cnVlIF0gLS0+Cis8aHRtbD4KKzxib2R5PgorPHByZSBpZD0ibG9n
Ij5UaGlzIHRlc3RzIG9ic2VydmluZyBhbiBlbGVtZW50IHdpdGggYW4gUmVzaXplT2JzZXJ2ZXIg
YW5kIHJlbW92aW5nIHRoZSBlbGVtZW50IGZyb20gdGhlIGRvY3VtZW50LgorVGhlIGVsZW1lbnQg
c2hvdWxkIGJlY29tZSBlbGlnaWJsZSBmb3IgR0MgYXQgc29tZSBwb2ludC4KKworPC9wcmU+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2djLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2xl
dCBpbml0aWFsTm9kZUNvdW50OworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgaWYgKCF3aW5k
b3cudGVzdFJ1bm5lciB8fCAhd2luZG93LmludGVybmFscykgeworICAgICAgICBsb2cudGV4dENv
bnRlbnQgKz0gJ0ZBSUwgLSBUaGlzIHRlc3QgcmVxdWlyZXMgaW50ZXJuYWxzJzsgCisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7CisKKyAgICBpbml0aWFsTm9kZUNvdW50ID0gaW50ZXJuYWxz
LnJlZmVyZW5jaW5nTm9kZUNvdW50KGRvY3VtZW50KTsKKworICAgIGNvbnN0IHJlc2l6ZU9ic2Vy
dmVyQ291bnQgPSAxMDA7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpemVPYnNlcnZlckNv
dW50OyArK2kpCisgICAgICAgIGNyZWF0ZVJlc2l6ZU9ic2VydmVyKCk7CisKKyAgICByZXF1ZXN0
QW5pbWF0aW9uRnJhbWUoKCkgPT4geworICAgICAgICBnYygpOworICAgICAgICBzZXRUaW1lb3V0
KCgpID0+IHsKKyAgICAgICAgICAgIGdjKCk7CisgICAgICAgICAgICBsb2cudGV4dENvbnRlbnQg
Kz0gaW50ZXJuYWxzLnJlZmVyZW5jaW5nTm9kZUNvdW50KGRvY3VtZW50KSA8IGluaXRpYWxOb2Rl
Q291bnQgKyByZXNpemVPYnNlcnZlckNvdW50ICogMC45NSA/ICdQQVNTJyA6ICdGQUlMIC0gTGVz
cyB0aGFuIDIwJSBvZiBub2RlcyB3ZXJlIGNvbGxlY3RlZC4nCisgICAgICAgICAgICB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfSwgMCk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9u
IGNyZWF0ZVJlc2l6ZU9ic2VydmVyKCkKK3sKKyAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVz
aXplT2JzZXJ2ZXIoKCkgPT4geyB9KS5vYnNlcnZlKGVsZW1lbnQpOworfQorCitvbmxvYWQgPSBy
dW5UZXN0OworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>