<?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>179690</bug_id>
          
          <creation_ts>2017-11-14 13:28:21 -0800</creation_ts>
          <short_desc>[MSE] Use correct range end checks in sourceBufferPrivateDidReceiveSample()</short_desc>
          <delta_ts>2017-12-01 21:40:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alicia Boya García">aboya</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>calvaris</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eocanha</cc>
    
    <cc>jer.noble</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1371545</commentid>
    <comment_count>0</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2017-11-14 13:28:21 -0800</bug_when>
    <thetext>The Coded Frame Processing algorithm as defined in
https://www.w3.org/TR/media-source/#sourcebuffer-coded-frame-processing states:

1.14. Remove existing coded frames in track buffer:
 -&gt; If highest end timestamp for track buffer is not set:
       [...]
 -&gt; If highest end timestamp for track buffer is set and less than or 
    equal to presentation timestamp:
       Remove all coded frames from track buffer that have a 
       presentation timestamp greater than or equal to highest end 
       timestamp and less than frame end timestamp.

Note the removal range is closed-open [a, b). WebKit is actually removing
frames using an open-closed range (a, b], which causes frames not to be removed
in situations where they should and frames to be removed in situations when
they should not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371548</commentid>
    <comment_count>1</comment_count>
      <attachid>326918</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2017-11-14 13:35:20 -0800</bug_when>
    <thetext>Created attachment 326918
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371564</commentid>
    <comment_count>2</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-11-14 14:02:38 -0800</bug_when>
    <thetext>Thanks for writing these tests. But I&apos;m curious what the behavior of this change is when faced with appends like:

// PTS, duration
[0, 2]
[2, 2]
[1, 2]

I would argue that the correct results would be:

buffered.length == 1
buffered.start(0) == 1
buffered.end(0) == 3

I&apos;m not sure what this patch&apos;s results would be, as it stands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371566</commentid>
    <comment_count>3</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-11-14 14:13:28 -0800</bug_when>
    <thetext>(In reply to Jer Noble from comment #2)
&gt; Thanks for writing these tests. But I&apos;m curious what the behavior of this
&gt; change is when faced with appends like:
&gt; 
&gt; // PTS, duration
&gt; [0, 2]
&gt; [2, 2]
&gt; [1, 2]
&gt; 
&gt; I would argue that the correct results would be:
&gt; 
&gt; buffered.length == 1
&gt; buffered.start(0) == 1
&gt; buffered.end(0) == 3
&gt; 
&gt; I&apos;m not sure what this patch&apos;s results would be, as it stands.

I modified the test from your patch to issue appends in the order I specified above, and when run against ToT (i.e., without your fix), it gets:

{PTS({0/1000 = 0.000000}), DTS({0/1000 = 0.000000}), duration({2000/1000 = 2.000000}), flags(1), generation(0)}
{PTS({1000/1000 = 1.000000}), DTS({1000/1000 = 1.000000}), duration({2000/1000 = 2.000000}), flags(1), generation(0)}
EXPECTED (sourceBuffer.buffered.length == &apos;1&apos;) OK
EXPECTED (sourceBuffer.buffered.start(0) == &apos;0&apos;) OK
EXPECTED (sourceBuffer.buffered.end(0) == &apos;3&apos;) OK

So it removes the second sample, but not the first, and leaves overlapping samples in the track buffer, which I think is incorrect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371577</commentid>
    <comment_count>4</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-11-14 14:28:44 -0800</bug_when>
    <thetext>So I think I remember why we no longer seem to use the SampleIsLessThanMediaTimeComparator objects. We used to, when this was originally implemented, by using std::lower_bound(m_samples.begin(), m_samples.end(), SampleIsGreaterThanMediaTimeComparator).  But std::lower_bound doesn&apos;t actually do a binary search; it can&apos;t, because map::iterators aren&apos;t random access.  map::lower_bound does do a binary search, but it can&apos;t take a comparator, because it can&apos;t guarantee that the map is sorted in comparator order.  So we re-wrote all the algorithms to use the map::lower_bound (et. all.) algorithms, since those are O(log(n)) rather than the O(n) of the std::lower_bound functions.

I think we can still implement this using the map functions though, even accounting for duration.

Given a sample whose PTS is /pS/ and whose duration is /d/ and whose presentation end time is /pS/ + /d/ = /pE/, the end of the removal range is the first sample whose PTS &gt; /pE/, and the start of the removal range is the first sample whose /pE&apos;/ &gt; /pS/.  Finding the end of the range is easy, it&apos;s map.upper_bound(/pE/). Finding the start is harder, because it requires a comparator.  But because our sample map is (supposed to be) non-overlapping, we can just find the first sample whose PTS &gt; /ps/, and then look at the previous sample. If its PTS + duration &gt; /pS/, the previous sample is the start, otherwise the current sample is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371588</commentid>
    <comment_count>5</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2017-11-14 15:00:52 -0800</bug_when>
    <thetext>(In reply to Jer Noble from comment #2)
&gt; Thanks for writing these tests. But I&apos;m curious what the behavior of this
&gt; change is when faced with appends like:
&gt; 
&gt; // PTS, duration
&gt; [0, 2]
&gt; [2, 2]
&gt; [1, 2]
&gt; 
&gt; I would argue that the correct results would be:
&gt; 
&gt; buffered.length == 1
&gt; buffered.start(0) == 1
&gt; buffered.end(0) == 3
&gt; 
&gt; I&apos;m not sure what this patch&apos;s results would be, as it stands.

It would produce the results the spec says, whether good or bad...

In this case it would depend on whether the DTSs are consecutive so the frames are considered part of the same Coded Frame Group.

If they are all part of the same Coded Frame Group, none of the conditions would evaluate true so no frames would be deleted:

1.13. If last decode timestamp for track buffer is unset (false) ...
1.14.a. If highest end timestamp for track buffer is not set (false).
1.14.b. If highest end timestamp for track buffer is set (true) and less than or equal to presentation timestamp (false).

{PTS({0/1000 = 0.000000}), DTS({0/1000 = 0.000000}), duration({2000/1000 = 2.000000}), flags(1), generation(0)}
{PTS({2000/1000 = 2.000000}), DTS({1000/1000 = 1.000000}), duration({2000/1000 = 2.000000}), flags(1), generation(0)}
{PTS({1000/1000 = 1.000000}), DTS({2000/1000 = 2.000000}), duration({2000/1000 = 2.000000}), flags(1), generation(0)}

If at least the last frame starts a new Coded Frame Group (e.g. by having a lesser DTS than the previous one):

1.13. (enters in the condition but the frame is not removed because its PTS is not within the 1 microsecond window [PTS, PTS+1µs) ).
1.14.a. If highest end timestamp for track buffer is not set: (true)
  Remove all coded frames from track buffer that have a presentation timestamp greater than or equal to presentation timestamp and less than frame end timestamp. (removes the previous frame)
1.14.b. If highest end timestamp for track buffer is set (false) ...

{PTS({0/1000 = 0.000000}), DTS({0/1000 = 0.000000}), duration({2000/1000 = 2.000000}), flags(1), generation(0)}
{PTS({1000/1000 = 1.000000}), DTS({0/1000 = 0.000000}), duration({2000/1000 = 2.000000}), flags(1), generation(0)}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371662</commentid>
    <comment_count>6</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-11-14 16:48:22 -0800</bug_when>
    <thetext>(In reply to Alicia Boya García from comment #5)
&gt; (In reply to Jer Noble from comment #2)
&gt; &gt; Thanks for writing these tests. But I&apos;m curious what the behavior of this
&gt; &gt; change is when faced with appends like:
&gt; &gt; 
&gt; &gt; // PTS, duration
&gt; &gt; [0, 2]
&gt; &gt; [2, 2]
&gt; &gt; [1, 2]
&gt; &gt; 
&gt; &gt; I would argue that the correct results would be:
&gt; &gt; 
&gt; &gt; buffered.length == 1
&gt; &gt; buffered.start(0) == 1
&gt; &gt; buffered.end(0) == 3
&gt; &gt; 
&gt; &gt; I&apos;m not sure what this patch&apos;s results would be, as it stands.
&gt; 
&gt; It would produce the results the spec says, whether good or bad...
&gt; 
&gt; In this case it would depend on whether the DTSs are consecutive so the
&gt; frames are considered part of the same Coded Frame Group.
&gt; 
&gt; If they are all part of the same Coded Frame Group, none of the conditions
&gt; would evaluate true so no frames would be deleted:
&gt; 
&gt; 1.13. If last decode timestamp for track buffer is unset (false) ...
&gt; 1.14.a. If highest end timestamp for track buffer is not set (false).
&gt; 1.14.b. If highest end timestamp for track buffer is set (true) and less
&gt; than or equal to presentation timestamp (false).
&gt; 
&gt; {PTS({0/1000 = 0.000000}), DTS({0/1000 = 0.000000}), duration({2000/1000 =
&gt; 2.000000}), flags(1), generation(0)}
&gt; {PTS({2000/1000 = 2.000000}), DTS({1000/1000 = 1.000000}),
&gt; duration({2000/1000 = 2.000000}), flags(1), generation(0)}
&gt; {PTS({1000/1000 = 1.000000}), DTS({2000/1000 = 2.000000}),
&gt; duration({2000/1000 = 2.000000}), flags(1), generation(0)}
&gt; 
&gt; If at least the last frame starts a new Coded Frame Group (e.g. by having a
&gt; lesser DTS than the previous one):
&gt; 
&gt; 1.13. (enters in the condition but the frame is not removed because its PTS
&gt; is not within the 1 microsecond window [PTS, PTS+1µs) ).
&gt; 1.14.a. If highest end timestamp for track buffer is not set: (true)
&gt;   Remove all coded frames from track buffer that have a presentation
&gt; timestamp greater than or equal to presentation timestamp and less than
&gt; frame end timestamp. (removes the previous frame)
&gt; 1.14.b. If highest end timestamp for track buffer is set (false) ...
&gt; 
&gt; {PTS({0/1000 = 0.000000}), DTS({0/1000 = 0.000000}), duration({2000/1000 =
&gt; 2.000000}), flags(1), generation(0)}
&gt; {PTS({1000/1000 = 1.000000}), DTS({0/1000 = 0.000000}), duration({2000/1000
&gt; = 2.000000}), flags(1), generation(0)}

Yuck. I really don&apos;t like the idea of having overlapping samples in this case. I would propose that we willfully violate the spec in this case in one of two ways:

Option 1: Remove the overlapping sample.  This obeys (I believe) the spirit of the specification and ensures that no samples can overlap inside the track buffer.

Option 2: Truncate the duration of the overlapping sample.  This solves the overlapping sample problem without actually removing the sample itself.  Has the possible benefit of matching GStreamer&apos;s behavior, where duration is ignored anyway.

Option 1 would be easier to implement; it&apos;s a cross platform change to the sample append code.

Option 2 would require changes to MediaSample and all its derived classes to add a new virtual &quot;setDuration()&quot; method.

WDYT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371683</commentid>
    <comment_count>7</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2017-11-14 18:04:02 -0800</bug_when>
    <thetext>(In reply to Jer Noble from comment #6)

I&apos;d argue for removing samples over modifying them, unless we have a convincing use case for doing otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371695</commentid>
    <comment_count>8</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2017-11-14 18:45:46 -0800</bug_when>
    <thetext>If we are going to diverge from spec-defined behavior, here is an idea: drop
all three removal steps (1.13, 1.14a and 1.14b) and replace them with this
single one:

Remove every existing frame in the track buffer whose presentation range
intersects with the range [PTS+1µs, PTS+DUR-1µs).

I think that is much simpler to understand and makes for more user-predictable
behavior yet still takes JS float conversion effects into account and
algorithmic complexity need not be affected... the most common case should be
still easy to keep O(1) and there should be no much problem in getting the
O(log(n)) search to work (just look at presentation end for the upper bound,
which should be no problem since the ordering of samples is the same whether we
consider PTS or presentation end because both values are monotonically
increasing...).

This simple rule should handle all the real cases that are handled by the
current approach just fine and fix those that are unspecified by the current
MSE spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376839</commentid>
    <comment_count>9</comment_count>
      <attachid>328100</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2017-12-01 09:26:32 -0800</bug_when>
    <thetext>Created attachment 328100
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376961</commentid>
    <comment_count>10</comment_count>
      <attachid>328100</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-12-01 12:12:58 -0800</bug_when>
    <thetext>Comment on attachment 328100
Patch

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

r=me with nit:

&gt; Tools/TestWebKitAPI/Tests/WebCore/SampleMap.cpp:-232
&gt; -TEST_F(SampleMapTest, findSamplesWithinPresentationRange)
&gt; -{
&gt; -    auto&amp; presentationMap = map.presentationOrder();
&gt; -    auto iterator_range = presentationMap.findSamplesWithinPresentationRange(MediaTime(0, 1), MediaTime(1, 1));
&gt; -    EXPECT_EQ(MediaTime(1, 1), iterator_range.first-&gt;second-&gt;presentationTime());
&gt; -    EXPECT_EQ(MediaTime(2, 1), iterator_range.second-&gt;second-&gt;presentationTime());
&gt; -
&gt; -    iterator_range = presentationMap.findSamplesWithinPresentationRange(MediaTime(1, 2), MediaTime(3, 2));
&gt; -    EXPECT_EQ(MediaTime(1, 1), iterator_range.first-&gt;second-&gt;presentationTime());
&gt; -    EXPECT_EQ(MediaTime(2, 1), iterator_range.second-&gt;second-&gt;presentationTime());
&gt; -
&gt; -    iterator_range = presentationMap.findSamplesWithinPresentationRange(MediaTime(9, 1), MediaTime(21, 1));
&gt; -    EXPECT_EQ(MediaTime(11, 1), iterator_range.first-&gt;second-&gt;presentationTime());
&gt; -    EXPECT_TRUE(presentationMap.end() == iterator_range.second);
&gt; -
&gt; -    iterator_range = presentationMap.findSamplesWithinPresentationRange(MediaTime(-1, 1), MediaTime(0, 1));
&gt; -    EXPECT_EQ(MediaTime(0, 1), iterator_range.first-&gt;second-&gt;presentationTime());
&gt; -    EXPECT_EQ(MediaTime(1, 1), iterator_range.second-&gt;second-&gt;presentationTime());
&gt; -
&gt; -    iterator_range = presentationMap.findSamplesWithinPresentationRange(MediaTime(10, 1), MediaTime(21, 2));
&gt; -    EXPECT_TRUE(presentationMap.end() == iterator_range.first);
&gt; -    EXPECT_TRUE(presentationMap.end() == iterator_range.second);
&gt; -
&gt; -    iterator_range = presentationMap.findSamplesWithinPresentationRange(MediaTime(20, 1), MediaTime(21, 1));
&gt; -    EXPECT_TRUE(presentationMap.end() == iterator_range.first);
&gt; -    EXPECT_TRUE(presentationMap.end() == iterator_range.second);
&gt; -}
&gt; -

Please restore this test (with the new name and possibly new values) before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377001</commentid>
    <comment_count>11</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2017-12-01 13:05:14 -0800</bug_when>
    <thetext>On an unrelated note...

Following the conversation from earlier, I&apos;ve been experimenting with a new frame removal algorithm for some time, but I found it to be non-trivial because of unrelated bugs popping out from many parts of the code and the underlying libraries.

This patch is the same as before, with that test file fixed by removing the references to the deleted function.

Efforts to improve on the algorithm proposed by the W3C can be tracked in a different bugzilla issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377144</commentid>
    <comment_count>12</comment_count>
      <attachid>328182</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2017-12-01 16:21:52 -0800</bug_when>
    <thetext>Created attachment 328182
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377229</commentid>
    <comment_count>13</comment_count>
      <attachid>328182</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-01 21:39:34 -0800</bug_when>
    <thetext>Comment on attachment 328182
Patch

Clearing flags on attachment: 328182

Committed r225442: &lt;https://trac.webkit.org/changeset/225442&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377230</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-01 21:39:36 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377231</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-01 21:40:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/35812250&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326918</attachid>
            <date>2017-11-14 13:35:20 -0800</date>
            <delta_ts>2017-12-01 09:26:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179690-20171114223515.patch</filename>
            <type>text/plain</type>
            <size>16040</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0MjI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2VlNDk2MWU1NzEyZGYx
ODM1YTAzZjY2ZTUwN2I1NzEyMWNiZTBmYi4uMDZhODEyMDc0MDIwZjcxM2M5YjRhOWI0ZDAyZTEy
YzE5Zjg4MzhlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE3LTExLTE0ICBBbGlj
aWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbTVNFXSBVc2Ug
Y29ycmVjdCByYW5nZSBlbmQgY2hlY2tzIGluIHNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZl
U2FtcGxlKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3OTY5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoZSBDb2RlZCBGcmFtZSBQcm9jZXNzaW5nIGFsZ29yaXRobSBhcyBkZWZpbmVkIGluCisgICAg
ICAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9tZWRpYS1zb3VyY2UvI3NvdXJjZWJ1ZmZlci1jb2Rl
ZC1mcmFtZS1wcm9jZXNzaW5nIHN0YXRlczoKKworICAgICAgICAxLjE0LiBSZW1vdmUgZXhpc3Rp
bmcgY29kZWQgZnJhbWVzIGluIHRyYWNrIGJ1ZmZlcjoKKyAgICAgICAgIC0+IElmIGhpZ2hlc3Qg
ZW5kIHRpbWVzdGFtcCBmb3IgdHJhY2sgYnVmZmVyIGlzIG5vdCBzZXQ6CisgICAgICAgICAgICAg
ICBbLi4uXQorICAgICAgICAgLT4gSWYgaGlnaGVzdCBlbmQgdGltZXN0YW1wIGZvciB0cmFjayBi
dWZmZXIgaXMgc2V0IGFuZCBsZXNzIHRoYW4gb3IKKyAgICAgICAgICAgIGVxdWFsIHRvIHByZXNl
bnRhdGlvbiB0aW1lc3RhbXA6CisgICAgICAgICAgICAgICBSZW1vdmUgYWxsIGNvZGVkIGZyYW1l
cyBmcm9tIHRyYWNrIGJ1ZmZlciB0aGF0IGhhdmUgYQorICAgICAgICAgICAgICAgcHJlc2VudGF0
aW9uIHRpbWVzdGFtcCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gaGlnaGVzdCBlbmQKKyAgICAg
ICAgICAgICAgIHRpbWVzdGFtcCBhbmQgbGVzcyB0aGFuIGZyYW1lIGVuZCB0aW1lc3RhbXAuCisK
KyAgICAgICAgTm90ZSB0aGUgcmVtb3ZhbCByYW5nZSBpcyBjbG9zZWQtb3BlbiBbYSwgYikuIFdl
YktpdCBpcyBhY3R1YWxseSByZW1vdmluZworICAgICAgICBmcmFtZXMgdXNpbmcgYW4gb3Blbi1j
bG9zZWQgcmFuZ2UgKGEsIGJdLCB3aGljaCBjYXVzZXMgZnJhbWVzIG5vdCB0byBiZSByZW1vdmVk
CisgICAgICAgIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhleSBzaG91bGQgYW5kIGZyYW1lcyB0byBi
ZSByZW1vdmVkIGluIHNpdHVhdGlvbnMgd2hlbgorICAgICAgICB0aGV5IHNob3VsZCBub3QuCisK
KyAgICAgICAgVGVzdHM6IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtcmFuZ2UtZW5k
LWZyYW1lLW5vdC1yZW1vdmVkLmh0bWwKKyAgICAgICAgICAgICAgIG1lZGlhL21lZGlhLXNvdXJj
ZS9tZWRpYS1zb3VyY2UtcmFuZ2Utc3RhcnQtZnJhbWUtcmVwbGFjZWQuaHRtbAorCisgICAgICAg
ICogTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6OmZpbmRTYW1wbGVzQmV0d2VlblByZXNlbnRhdGlv
blRpbWVzRnJvbUVuZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAu
aDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZl
U2FtcGxlKToKKwogMjAxNy0xMC0zMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
IAogICAgICAgICBBc3NlcnQgdGhhdCBubyBzY3JpcHQgaXMgZXhlY3V0ZWQgZHVyaW5nIExheW91
dFBoYXNlOjpJblJlbmRlclRyZWVMYXlvdXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzb3VyY2UvU2FtcGxlTWFwLmNwcAppbmRleCBhZjVmNGU0Mzg2YzM2ZjdhNmY4ZTliNTdm
Y2E1ZGNkYzc2ZjRiMDI4Li5hYjU3NzJmNDAwYTEwZTljOWRiMDYxYzEwMzBjZWQ4MTY3MGIwMWRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1h
cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAu
Y3BwCkBAIC0yODQsMjggKzI4NCwyMSBAQCBQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6aXRl
cmF0b3JfcmFuZ2UgUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6OmZpbmRTYW1wbAogICAgIHJl
dHVybiB7IGxvd2VyX2JvdW5kLCB1cHBlcl9ib3VuZCB9OwogfQogCi1QcmVzZW50YXRpb25PcmRl
clNhbXBsZU1hcDo6aXRlcmF0b3JfcmFuZ2UgUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6OmZp
bmRTYW1wbGVzV2l0aGluUHJlc2VudGF0aW9uUmFuZ2UoY29uc3QgTWVkaWFUaW1lJiBiZWdpblRp
bWUsIGNvbnN0IE1lZGlhVGltZSYgZW5kVGltZSkKK1ByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFw
OjppdGVyYXRvcl9yYW5nZSBQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6ZmluZFNhbXBsZXNC
ZXR3ZWVuUHJlc2VudGF0aW9uVGltZXNGcm9tRW5kKGNvbnN0IE1lZGlhVGltZSYgYmVnaW5UaW1l
LCBjb25zdCBNZWRpYVRpbWUmIGVuZFRpbWUpCiB7Ci0gICAgLy8gc3RhcnRUaW1lIGlzIG5vdCBp
bmNsdXNpdmUsIHNvIHVzZSB1cHBlcl9ib3VuZCB0byBleGNsdWRlIHNhbXBsZXMgd2hpY2ggc3Rh
cnQgZXhhY3RseSBhdCBzdGFydFRpbWUuCi0gICAgLy8gZW5kVGltZSBpcyBpbmNsdXNpdmUsIHNv
IHVzZSB1cHBlcl9ib3VuZCB0byBpbmNsdWRlIHNhbXBsZXMgd2hpY2ggc3RhcnQgZXhhY3RseSBh
dCBlbmRUaW1lLgotICAgIGF1dG8gbG93ZXJfYm91bmQgPSBtX3NhbXBsZXMudXBwZXJfYm91bmQo
YmVnaW5UaW1lKTsKLSAgICBhdXRvIHVwcGVyX2JvdW5kID0gbV9zYW1wbGVzLnVwcGVyX2JvdW5k
KGVuZFRpbWUpOwotICAgIGlmIChsb3dlcl9ib3VuZCA9PSB1cHBlcl9ib3VuZCkKLSAgICAgICAg
cmV0dXJuIHsgZW5kKCksIGVuZCgpIH07Ci0gICAgcmV0dXJuIHsgbG93ZXJfYm91bmQsIHVwcGVy
X2JvdW5kIH07Ci19Ci0KLVByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFwOjppdGVyYXRvcl9yYW5n
ZSBQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6ZmluZFNhbXBsZXNXaXRoaW5QcmVzZW50YXRp
b25SYW5nZUZyb21FbmQoY29uc3QgTWVkaWFUaW1lJiBiZWdpblRpbWUsIGNvbnN0IE1lZGlhVGlt
ZSYgZW5kVGltZSkKLXsKLSAgICByZXZlcnNlX2l0ZXJhdG9yIHJhbmdlRW5kID0gc3RkOjpmaW5k
X2lmKHJiZWdpbigpLCByZW5kKCksIFsmYmVnaW5UaW1lXShhdXRvJiB2YWx1ZSkgewotICAgICAg
ICByZXR1cm4gdmFsdWUuc2Vjb25kLT5wcmVzZW50YXRpb25UaW1lKCkgPD0gYmVnaW5UaW1lOwor
ICAgIHJldmVyc2VfaXRlcmF0b3IgcmFuZ2VFbmQgPSBzdGQ6OmZpbmRfaWYocmJlZ2luKCksIHJl
bmQoKSwgWyZlbmRUaW1lXShhdXRvJiB2YWx1ZSkgeworICAgICAgICByZXR1cm4gdmFsdWUuZmly
c3QgPCBlbmRUaW1lOwogICAgIH0pOwogCi0gICAgcmV2ZXJzZV9pdGVyYXRvciByYW5nZVN0YXJ0
ID0gc3RkOjpmaW5kX2lmKHJiZWdpbigpLCByYW5nZUVuZCwgWyZlbmRUaW1lXShhdXRvJiB2YWx1
ZSkgewotICAgICAgICByZXR1cm4gdmFsdWUuc2Vjb25kLT5wcmVzZW50YXRpb25UaW1lKCkgPD0g
ZW5kVGltZTsKKyAgICByZXZlcnNlX2l0ZXJhdG9yIHJhbmdlU3RhcnQgPSBzdGQ6OmZpbmRfaWYo
cmFuZ2VFbmQsIHJiZWdpbigpLCBbJmJlZ2luVGltZV0oYXV0byYgdmFsdWUpIHsKKyAgICAgICAg
cmV0dXJuIHZhbHVlLmZpcnN0IDwgYmVnaW5UaW1lOwogICAgIH0pOwogCi0gICAgcmV0dXJuIGl0
ZXJhdG9yX3JhbmdlKHJhbmdlRW5kLmJhc2UoKSwgcmFuZ2VTdGFydC5iYXNlKCkpOworICAgIGlm
IChyYW5nZVN0YXJ0ID09IHJhbmdlRW5kKQorICAgICAgICByZXR1cm4geyBlbmQoKSwgZW5kKCkg
fTsKKworICAgIC8vICggcmFuZ2VTdGFydCwgcmFuZ2VFbmQgXSA9PSBbIHJhbmdlU3RhcnQuYmFz
ZSgpLCByYW5nZUVuZC5iYXNlKCkgKQorICAgIHJldHVybiB7IHJhbmdlU3RhcnQuYmFzZSgpLCBy
YW5nZUVuZC5iYXNlKCkgfTsKIH0KIAogRGVjb2RlT3JkZXJTYW1wbGVNYXA6OnJldmVyc2VfaXRl
cmF0b3JfcmFuZ2UgRGVjb2RlT3JkZXJTYW1wbGVNYXA6OmZpbmREZXBlbmRlbnRTYW1wbGVzKE1l
ZGlhU2FtcGxlKiBzYW1wbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc291cmNlL1NhbXBsZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJj
ZS9TYW1wbGVNYXAuaAppbmRleCBkNjI4NWJmMWE5Y2JjNTU2OWQwM2RmMjJiOWVmMGNkYmQwYTNi
ZjdkLi4zOTMxOWZjMGIxMDJjYjg3NDE0MGJlN2ZiNGEwYjdlY2VhYjQwZWNlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmgKQEAgLTYzLDggKzYz
LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHJldmVyc2VfaXRlcmF0b3IgcmV2ZXJz
ZUZpbmRTYW1wbGVDb250YWluaW5nUHJlc2VudGF0aW9uVGltZShjb25zdCBNZWRpYVRpbWUmKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCByZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VGaW5kU2FtcGxlQmVm
b3JlUHJlc2VudGF0aW9uVGltZShjb25zdCBNZWRpYVRpbWUmKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBpdGVyYXRvcl9yYW5nZSBmaW5kU2FtcGxlc0JldHdlZW5QcmVzZW50YXRpb25UaW1lcyhjb25z
dCBNZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBpdGVy
YXRvcl9yYW5nZSBmaW5kU2FtcGxlc1dpdGhpblByZXNlbnRhdGlvblJhbmdlKGNvbnN0IE1lZGlh
VGltZSYsIGNvbnN0IE1lZGlhVGltZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIGl0ZXJhdG9yX3Jh
bmdlIGZpbmRTYW1wbGVzV2l0aGluUHJlc2VudGF0aW9uUmFuZ2VGcm9tRW5kKGNvbnN0IE1lZGlh
VGltZSYsIGNvbnN0IE1lZGlhVGltZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIGl0ZXJhdG9yX3Jh
bmdlIGZpbmRTYW1wbGVzQmV0d2VlblByZXNlbnRhdGlvblRpbWVzRnJvbUVuZChjb25zdCBNZWRp
YVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmKTsKIAogcHJpdmF0ZToKICAgICBNYXBUeXBlIG1fc2Ft
cGxlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291
cmNlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNl
QnVmZmVyLmNwcAppbmRleCBiNDJiOWVjNmU0NjliODA1MWE2NjlhYWE4Y2Y4NjU4ZjgyMmIxMGVl
Li5lZjQ3YzMwZTc0NDAxY2UxZTViOGIwMTlhNzFkM2EzZjBmMGY4ZDg2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCkBAIC0x
NTM3LDkgKzE1MzcsMTEgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVE
aWRSZWNlaXZlU2FtcGxlKE1lZGlhU2FtcGxlJiBzYW1wbGUpCiAKICAgICAgICAgICAgICAgICBQ
cmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6aXRlcmF0b3JfcmFuZ2UgcmFuZ2U7CiAgICAgICAg
ICAgICAgICAgaWYgKGhpZ2hlc3RCdWZmZXJlZFRpbWUgLSB0cmFja0J1ZmZlci5oaWdoZXN0UHJl
c2VudGF0aW9uVGltZXN0YW1wIDwgdHJhY2tCdWZmZXIubGFzdEZyYW1lRHVyYXRpb24pCi0gICAg
ICAgICAgICAgICAgICAgIHJhbmdlID0gdHJhY2tCdWZmZXIuc2FtcGxlcy5wcmVzZW50YXRpb25P
cmRlcigpLmZpbmRTYW1wbGVzV2l0aGluUHJlc2VudGF0aW9uUmFuZ2VGcm9tRW5kKHRyYWNrQnVm
ZmVyLmhpZ2hlc3RQcmVzZW50YXRpb25UaW1lc3RhbXAsIGZyYW1lRW5kVGltZXN0YW1wKTsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5ldyBmcmFtZSBpcyBhdCB0aGUgZW5kIG9mIHRo
ZSBidWZmZXJlZCByYW5nZXMsIHBlcmZvcm0gYSBzZXF1ZW50aWFsIHNjYW4gZnJvbSBlbmQgKE8o
MSkpLgorICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRyYWNrQnVmZmVyLnNhbXBsZXMucHJl
c2VudGF0aW9uT3JkZXIoKS5maW5kU2FtcGxlc0JldHdlZW5QcmVzZW50YXRpb25UaW1lc0Zyb21F
bmQodHJhY2tCdWZmZXIuaGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcCwgZnJhbWVFbmRUaW1l
c3RhbXApOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2Ug
PSB0cmFja0J1ZmZlci5zYW1wbGVzLnByZXNlbnRhdGlvbk9yZGVyKCkuZmluZFNhbXBsZXNXaXRo
aW5QcmVzZW50YXRpb25SYW5nZSh0cmFja0J1ZmZlci5oaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0
YW1wLCBmcmFtZUVuZFRpbWVzdGFtcCk7CisgICAgICAgICAgICAgICAgICAgIC8vIEluIGFueSBv
dGhlciBjYXNlLCBwZXJmb3JtIGEgYmluYXJ5IHNlYXJjaCAoTyhsb2cobikpLgorICAgICAgICAg
ICAgICAgICAgICByYW5nZSA9IHRyYWNrQnVmZmVyLnNhbXBsZXMucHJlc2VudGF0aW9uT3JkZXIo
KS5maW5kU2FtcGxlc0JldHdlZW5QcmVzZW50YXRpb25UaW1lcyh0cmFja0J1ZmZlci5oaWdoZXN0
UHJlc2VudGF0aW9uVGltZXN0YW1wLCBmcmFtZUVuZFRpbWVzdGFtcCk7CiAKICAgICAgICAgICAg
ICAgICBpZiAocmFuZ2UuZmlyc3QgIT0gdHJhY2tCdWZmZXIuc2FtcGxlcy5wcmVzZW50YXRpb25P
cmRlcigpLmVuZCgpKQogICAgICAgICAgICAgICAgICAgICBlcmFzZWRTYW1wbGVzLmFkZFJhbmdl
KHJhbmdlLmZpcnN0LCByYW5nZS5zZWNvbmQpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDU2M2UzZGIzYjU5YTJmNTZkNzI1
YWM0Zjc5Y2VjMTI4MzM1OTQ3YWUuLjRmMmVjOWZmMDc0MTk3OGJkYWI3NzZjZTkzZmI3MWFhODE5
YzU1MmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNy0xMS0xNCAgQWxpY2lhIEJveWEgR2Fy
Y8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW01TRV0gVXNlIGNvcnJlY3QgcmFu
Z2UgZW5kIGNoZWNrcyBpbiBzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZVNhbXBsZSgpCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk2OTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0ZXN0
IGNhc2VzIGZvciBidWcgIzE3OTY5MC4KKworICAgICAgICAqIG1lZGlhL21lZGlhLXNvdXJjZS9t
ZWRpYS1zb3VyY2UtcmFuZ2UtZW5kLWZyYW1lLW5vdC1yZW1vdmVkLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1yYW5nZS1lbmQt
ZnJhbWUtbm90LXJlbW92ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogbWVkaWEvbWVkaWEtc291
cmNlL21lZGlhLXNvdXJjZS1yYW5nZS1zdGFydC1mcmFtZS1yZXBsYWNlZC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtcmFuZ2Ut
c3RhcnQtZnJhbWUtcmVwbGFjZWQuaHRtbDogQWRkZWQuCisKIDIwMTctMTAtMzEgIERldmluIFJv
dXNzbyAgPHdlYmtpdEBkZXZpbnJvdXNzby5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjog
cmVwbGFjZSBDYW52YXMgc3RhY2sgaXRlcmF0aW9uIHdpdGggY3JlYXRlU2NyaXB0Q2FsbFN0YWNr
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNl
LXJhbmdlLWVuZC1mcmFtZS1ub3QtcmVtb3ZlZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9t
ZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLXJhbmdlLWVuZC1mcmFtZS1ub3QtcmVtb3Zl
ZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJjOWI2Y2RiYzQ5YzY5NTNiYzc4MWE1ODdjZDBk
MDZiMzViMTliYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNv
dXJjZS9tZWRpYS1zb3VyY2UtcmFuZ2UtZW5kLWZyYW1lLW5vdC1yZW1vdmVkLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDIyIEBACisKK1JVTih2aWRlby5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJM
KHNvdXJjZSkpCitFVkVOVChzb3VyY2VvcGVuKQorUlVOKHNvdXJjZUJ1ZmZlciA9IHNvdXJjZS5h
ZGRTb3VyY2VCdWZmZXIoInZpZGVvL21vY2s7IGNvZGVjcz1tb2NrIikpCitSVU4oc291cmNlQnVm
ZmVyLmFwcGVuZEJ1ZmZlcihpbml0U2VnbWVudCkpCitFVkVOVCh1cGRhdGVlbmQpCitSVU4oc291
cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKSkKK0VWRU5UKHVwZGF0ZWVuZCkKK1JVTihz
b3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKHNhbXBsZXMpKQorRVZFTlQodXBkYXRlZW5kKQorRVhQ
RUNURUQgKGJ1ZmZlcmVkU2FtcGxlcy5sZW5ndGggPT0gJzYnKSBPSwore1BUUyh7MC8xMDAwID0g
MC4wMDAwMDB9KSwgRFRTKHswLzEwMDAgPSAwLjAwMDAwMH0pLCBkdXJhdGlvbih7MTAwMC8xMDAw
ID0gMS4wMDAwMDB9KSwgZmxhZ3MoMSksIGdlbmVyYXRpb24oMCl9Cit7UFRTKHsxMDAwLzEwMDAg
PSAxLjAwMDAwMH0pLCBEVFMoezEwMDAvMTAwMCA9IDEuMDAwMDAwfSksIGR1cmF0aW9uKHsxMDAw
LzEwMDAgPSAxLjAwMDAwMH0pLCBmbGFncygxKSwgZ2VuZXJhdGlvbigwKX0KK3tQVFMoezIwMDAv
MTAwMCA9IDIuMDAwMDAwfSksIERUUyh7MjAwMC8xMDAwID0gMi4wMDAwMDB9KSwgZHVyYXRpb24o
ezEwMDAvMTAwMCA9IDEuMDAwMDAwfSksIGZsYWdzKDEpLCBnZW5lcmF0aW9uKDApfQore1BUUyh7
MzAwMC8xMDAwID0gMy4wMDAwMDB9KSwgRFRTKHszMDAwLzEwMDAgPSAzLjAwMDAwMH0pLCBkdXJh
dGlvbih7MTAwMC8xMDAwID0gMS4wMDAwMDB9KSwgZmxhZ3MoMSksIGdlbmVyYXRpb24oMCl9Cit7
UFRTKHs0MDAwLzEwMDAgPSA0LjAwMDAwMH0pLCBEVFMoezQwMDAvMTAwMCA9IDQuMDAwMDAwfSks
IGR1cmF0aW9uKHsxMDAwLzEwMDAgPSAxLjAwMDAwMH0pLCBmbGFncygxKSwgZ2VuZXJhdGlvbigw
KX0KK3tQVFMoezUwMDAvMTAwMCA9IDUuMDAwMDAwfSksIERUUyh7NTAwMC8xMDAwID0gNS4wMDAw
MDB9KSwgZHVyYXRpb24oezEwMDAvMTAwMCA9IDEuMDAwMDAwfSksIGZsYWdzKDEpLCBnZW5lcmF0
aW9uKDApfQorRVhQRUNURUQgKHNvdXJjZUJ1ZmZlci5idWZmZXJlZC5sZW5ndGggPT0gJzEnKSBP
SworRVhQRUNURUQgKHNvdXJjZUJ1ZmZlci5idWZmZXJlZC5zdGFydCgwKSA9PSAnMCcpIE9LCitF
WFBFQ1RFRCAoc291cmNlQnVmZmVyLmJ1ZmZlcmVkLmVuZCgwKSA9PSAnNicpIE9LCitFTkQgT0Yg
VEVTVAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEt
c291cmNlLXJhbmdlLWVuZC1mcmFtZS1ub3QtcmVtb3ZlZC5odG1sIGIvTGF5b3V0VGVzdHMvbWVk
aWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1yYW5nZS1lbmQtZnJhbWUtbm90LXJlbW92ZWQu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40ZTQ0OGRlNDBiZDJkYzgxYTdkMjhkMGYzM2ViMDdlZjY3MGY1MDky
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlh
LXNvdXJjZS1yYW5nZS1lbmQtZnJhbWUtbm90LXJlbW92ZWQuaHRtbApAQCAtMCwwICsxLDcyIEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPm1lZGlhLXNvdXJj
ZS1yYW5nZS1lbmRzPC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0ibW9jay1tZWRpYS1zb3VyY2Uu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi92aWRlby10ZXN0LmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0PgorICAgIHZhciBzb3VyY2U7CisgICAgdmFyIHNvdXJjZUJ1ZmZlcjsK
KyAgICB2YXIgaW5pdFNlZ21lbnQ7CisgICAgdmFyIHNhbXBsZXM7CisgICAgdmFyIGJ1ZmZlcmVk
U2FtcGxlczsKKworICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICBpbnRlcm5hbHMu
aW5pdGlhbGl6ZU1vY2tNZWRpYVNvdXJjZSgpOworCisgICAgZnVuY3Rpb24gcnVuVGVzdCgpCisg
ICAgeworICAgICAgICBmaW5kTWVkaWFFbGVtZW50KCk7CisKKyAgICAgICAgc291cmNlID0gbmV3
IE1lZGlhU291cmNlKCk7CisgICAgICAgIHdhaXRGb3JFdmVudE9uKHNvdXJjZSwgJ3NvdXJjZW9w
ZW4nLCBzb3VyY2VPcGVuKTsKKyAgICAgICAgcnVuKCd2aWRlby5zcmMgPSBVUkwuY3JlYXRlT2Jq
ZWN0VVJMKHNvdXJjZSknKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzb3VyY2VPcGVuKCkKKyAg
ICB7CisgICAgICAgIHJ1bignc291cmNlQnVmZmVyID0gc291cmNlLmFkZFNvdXJjZUJ1ZmZlcigi
dmlkZW8vbW9jazsgY29kZWNzPW1vY2siKScpOworICAgICAgICB3YWl0Rm9yRXZlbnRPbihzb3Vy
Y2VCdWZmZXIsICd1cGRhdGVlbmQnLCBsb2FkU2FtcGxlczEsIGZhbHNlLCB0cnVlKTsKKyAgICAg
ICAgaW5pdFNlZ21lbnQgPSBtYWtlQUluaXQoNiwgW21ha2VBVHJhY2soMSwgJ21vY2snLCBUUkFD
S19LSU5ELlZJREVPKV0pOworICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIo
aW5pdFNlZ21lbnQpJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gbG9hZFNhbXBsZXMxKCkKKyAg
ICB7CisgICAgICAgIHNhbXBsZXMgPSBjb25jYXRlbmF0ZVNhbXBsZXMoWworICAgICAgICAgICAg
bWFrZUFTYW1wbGUoMywgMywgMSwgMSwgU0FNUExFX0ZMQUcuU1lOQywgMCksCisgICAgICAgICAg
ICBtYWtlQVNhbXBsZSg0LCA0LCAxLCAxLCBTQU1QTEVfRkxBRy5TWU5DLCAwKSwKKyAgICAgICAg
ICAgIG1ha2VBU2FtcGxlKDUsIDUsIDEsIDEsIFNBTVBMRV9GTEFHLlNZTkMsIDApLAorICAgICAg
ICBdKTsKKyAgICAgICAgd2FpdEZvckV2ZW50T24oc291cmNlQnVmZmVyLCAndXBkYXRlZW5kJywg
bG9hZFNhbXBsZXMyLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHJ1bignc291cmNlQnVmZmVyLmFw
cGVuZEJ1ZmZlcihzYW1wbGVzKScpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGxvYWRTYW1wbGVz
MigpCisgICAgeworICAgICAgICBzYW1wbGVzID0gY29uY2F0ZW5hdGVTYW1wbGVzKFsKKyAgICAg
ICAgICAgIG1ha2VBU2FtcGxlKDAsIDAsIDEsIDEsIFNBTVBMRV9GTEFHLlNZTkMsIDApLAorICAg
ICAgICAgICAgbWFrZUFTYW1wbGUoMSwgMSwgMSwgMSwgU0FNUExFX0ZMQUcuU1lOQywgMCksCisg
ICAgICAgICAgICBtYWtlQVNhbXBsZSgyLCAyLCAxLCAxLCBTQU1QTEVfRkxBRy5TWU5DLCAwKSwK
KyAgICAgICAgXSk7CisgICAgICAgIHdhaXRGb3JFdmVudE9uKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0
ZWVuZCcsIHNhbXBsZXNBZGRlZCwgZmFsc2UsIHRydWUpOworICAgICAgICBydW4oJ3NvdXJjZUJ1
ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxlcyknKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzYW1w
bGVzQWRkZWQoKQorICAgIHsKKyAgICAgICAgYnVmZmVyZWRTYW1wbGVzID0gaW50ZXJuYWxzLmJ1
ZmZlcmVkU2FtcGxlc0ZvclRyYWNrSUQoc291cmNlQnVmZmVyLCAxKTsKKyAgICAgICAgdGVzdEV4
cGVjdGVkKCJidWZmZXJlZFNhbXBsZXMubGVuZ3RoIiwgNik7CisgICAgICAgIGJ1ZmZlcmVkU2Ft
cGxlcy5mb3JFYWNoKGNvbnNvbGVXcml0ZSk7CisKKyAgICAgICAgdGVzdEV4cGVjdGVkKCJzb3Vy
Y2VCdWZmZXIuYnVmZmVyZWQubGVuZ3RoIiwgMSk7CisgICAgICAgIHRlc3RFeHBlY3RlZCgic291
cmNlQnVmZmVyLmJ1ZmZlcmVkLnN0YXJ0KDApIiwgMCk7CisgICAgICAgIHRlc3RFeHBlY3RlZCgi
c291cmNlQnVmZmVyLmJ1ZmZlcmVkLmVuZCgwKSIsIDYpOworCisgICAgICAgIGVuZFRlc3QoKTsK
KyAgICB9CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+
CisgICAgPHZpZGVvPjwvdmlkZW8+Cis8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9t
ZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLXJhbmdlLXN0YXJ0LWZyYW1lLXJlcGxhY2Vk
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3Vy
Y2UtcmFuZ2Utc3RhcnQtZnJhbWUtcmVwbGFjZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1
MzA4YWQ0Mjc2NTA3NzFhMjViOWMzMDNlYzUwYjMxZmVhY2NkNzIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLXJhbmdlLXN0YXJ0
LWZyYW1lLXJlcGxhY2VkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACisKK1JVTih2aWRl
by5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHNvdXJjZSkpCitFVkVOVChzb3VyY2VvcGVuKQor
UlVOKHNvdXJjZUJ1ZmZlciA9IHNvdXJjZS5hZGRTb3VyY2VCdWZmZXIoInZpZGVvL21vY2s7IGNv
ZGVjcz1tb2NrIikpCitSVU4oc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihpbml0U2VnbWVudCkp
CitFVkVOVCh1cGRhdGVlbmQpCitSVU4oc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVz
KSkKK0VWRU5UKHVwZGF0ZWVuZCkKK1JVTihzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKHNhbXBs
ZXMpKQorRVZFTlQodXBkYXRlZW5kKQore1BUUyh7MC8xMDAwID0gMC4wMDAwMDB9KSwgRFRTKHsw
LzEwMDAgPSAwLjAwMDAwMH0pLCBkdXJhdGlvbih7MTAwMC8xMDAwID0gMS4wMDAwMDB9KSwgZmxh
Z3MoMSksIGdlbmVyYXRpb24oMCl9Cit7UFRTKHsxMDAwLzEwMDAgPSAxLjAwMDAwMH0pLCBEVFMo
ezEwMDAvMTAwMCA9IDEuMDAwMDAwfSksIGR1cmF0aW9uKHsyMDAwLzEwMDAgPSAyLjAwMDAwMH0p
LCBmbGFncygxKSwgZ2VuZXJhdGlvbigwKX0KK0VYUEVDVEVEIChzb3VyY2VCdWZmZXIuYnVmZmVy
ZWQubGVuZ3RoID09ICcxJykgT0sKK0VYUEVDVEVEIChzb3VyY2VCdWZmZXIuYnVmZmVyZWQuc3Rh
cnQoMCkgPT0gJzAnKSBPSworRVhQRUNURUQgKHNvdXJjZUJ1ZmZlci5idWZmZXJlZC5lbmQoMCkg
PT0gJzMnKSBPSworRU5EIE9GIFRFU1QKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEv
bWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1yYW5nZS1zdGFydC1mcmFtZS1yZXBsYWNlZC5odG1s
IGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1yYW5nZS1zdGFy
dC1mcmFtZS1yZXBsYWNlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhiYmI3M2MzYjBiMjc2OGM0YjZhMzU4
N2RhZTk5NTVlYjYxODUzNjQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tZWRpYS9t
ZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLXJhbmdlLXN0YXJ0LWZyYW1lLXJlcGxhY2VkLmh0bWwK
QEAgLTAsMCArMSw2OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0
aXRsZT5tZWRpYS1zb3VyY2UtcmFuZ2Utc3RhcnQtZnJhbWUtcmVwbGFjZWQ8L3RpdGxlPgorICAg
IDxzY3JpcHQgc3JjPSJtb2NrLW1lZGlhLXNvdXJjZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9Ii4uL3ZpZGVvLXRlc3QuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgdmFy
IHNvdXJjZTsKKyAgICB2YXIgc291cmNlQnVmZmVyOworICAgIHZhciBpbml0U2VnbWVudDsKKyAg
ICB2YXIgc2FtcGxlczsKKyAgICB2YXIgYnVmZmVyZWRTYW1wbGVzOworCisgICAgaWYgKHdpbmRv
dy5pbnRlcm5hbHMpCisgICAgICAgIGludGVybmFscy5pbml0aWFsaXplTW9ja01lZGlhU291cmNl
KCk7CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkKKyAgICB7CisgICAgICAgIGZpbmRNZWRpYUVs
ZW1lbnQoKTsKKworICAgICAgICBzb3VyY2UgPSBuZXcgTWVkaWFTb3VyY2UoKTsKKyAgICAgICAg
d2FpdEZvckV2ZW50T24oc291cmNlLCAnc291cmNlb3BlbicsIHNvdXJjZU9wZW4pOworICAgICAg
ICBydW4oJ3ZpZGVvLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoc291cmNlKScpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHNvdXJjZU9wZW4oKQorICAgIHsKKyAgICAgICAgcnVuKCdzb3VyY2VC
dWZmZXIgPSBzb3VyY2UuYWRkU291cmNlQnVmZmVyKCJ2aWRlby9tb2NrOyBjb2RlY3M9bW9jayIp
Jyk7CisgICAgICAgIHdhaXRGb3JFdmVudE9uKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcsIGxv
YWRTYW1wbGVzMSwgZmFsc2UsIHRydWUpOworICAgICAgICBpbml0U2VnbWVudCA9IG1ha2VBSW5p
dCgzLCBbbWFrZUFUcmFjaygxLCAnbW9jaycsIFRSQUNLX0tJTkQuVklERU8pXSk7CisgICAgICAg
IHJ1bignc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihpbml0U2VnbWVudCknKTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBsb2FkU2FtcGxlczEoKQorICAgIHsKKyAgICAgICAgc2FtcGxlcyA9IGNv
bmNhdGVuYXRlU2FtcGxlcyhbCisgICAgICAgICAgICBtYWtlQVNhbXBsZSgxLCAxLCAxLCAxLCBT
QU1QTEVfRkxBRy5TWU5DLCAwKSwKKyAgICAgICAgXSk7CisgICAgICAgIHdhaXRGb3JFdmVudE9u
KHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcsIGxvYWRTYW1wbGVzMiwgZmFsc2UsIHRydWUpOwor
ICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxlcyknKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBsb2FkU2FtcGxlczIoKQorICAgIHsKKyAgICAgICAgc2FtcGxlcyA9
IGNvbmNhdGVuYXRlU2FtcGxlcyhbCisgICAgICAgICAgICAvLyBOZXcgQ29kZWQgRnJhbWUgR3Jv
dXAgKERUUyB3ZW50IGJhY2t3YXJkcykKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDAsIDAsIDEs
IDEsIFNBTVBMRV9GTEFHLlNZTkMsIDApLAorICAgICAgICAgICAgbWFrZUFTYW1wbGUoMSwgMSwg
MiwgMSwgU0FNUExFX0ZMQUcuU1lOQywgMCksIC8vIGR1cmF0aW9uID0gMgorICAgICAgICBdKTsK
KyAgICAgICAgd2FpdEZvckV2ZW50T24oc291cmNlQnVmZmVyLCAndXBkYXRlZW5kJywgc2FtcGxl
c0FkZGVkLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHJ1bignc291cmNlQnVmZmVyLmFwcGVuZEJ1
ZmZlcihzYW1wbGVzKScpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNhbXBsZXNBZGRlZCgpCisg
ICAgeworICAgICAgICBidWZmZXJlZFNhbXBsZXMgPSBpbnRlcm5hbHMuYnVmZmVyZWRTYW1wbGVz
Rm9yVHJhY2tJRChzb3VyY2VCdWZmZXIsIDEpOworICAgICAgICBidWZmZXJlZFNhbXBsZXMuZm9y
RWFjaChjb25zb2xlV3JpdGUpOworCisgICAgICAgIHRlc3RFeHBlY3RlZCgic291cmNlQnVmZmVy
LmJ1ZmZlcmVkLmxlbmd0aCIsIDEpOworICAgICAgICB0ZXN0RXhwZWN0ZWQoInNvdXJjZUJ1ZmZl
ci5idWZmZXJlZC5zdGFydCgwKSIsIDApOworICAgICAgICB0ZXN0RXhwZWN0ZWQoInNvdXJjZUJ1
ZmZlci5idWZmZXJlZC5lbmQoMCkiLCAzKTsKKworICAgICAgICBlbmRUZXN0KCk7CisgICAgfQor
ICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorICAgIDx2
aWRlbz48L3ZpZGVvPgorPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328100</attachid>
            <date>2017-12-01 09:26:32 -0800</date>
            <delta_ts>2017-12-01 16:21:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179690-20171201182630.patch</filename>
            <type>text/plain</type>
            <size>18330</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0MjI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2VlNDk2MWU1NzEyZGYx
ODM1YTAzZjY2ZTUwN2I1NzEyMWNiZTBmYi4uMDZhODEyMDc0MDIwZjcxM2M5YjRhOWI0ZDAyZTEy
YzE5Zjg4MzhlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE3LTExLTE0ICBBbGlj
aWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbTVNFXSBVc2Ug
Y29ycmVjdCByYW5nZSBlbmQgY2hlY2tzIGluIHNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZl
U2FtcGxlKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3OTY5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoZSBDb2RlZCBGcmFtZSBQcm9jZXNzaW5nIGFsZ29yaXRobSBhcyBkZWZpbmVkIGluCisgICAg
ICAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9tZWRpYS1zb3VyY2UvI3NvdXJjZWJ1ZmZlci1jb2Rl
ZC1mcmFtZS1wcm9jZXNzaW5nIHN0YXRlczoKKworICAgICAgICAxLjE0LiBSZW1vdmUgZXhpc3Rp
bmcgY29kZWQgZnJhbWVzIGluIHRyYWNrIGJ1ZmZlcjoKKyAgICAgICAgIC0+IElmIGhpZ2hlc3Qg
ZW5kIHRpbWVzdGFtcCBmb3IgdHJhY2sgYnVmZmVyIGlzIG5vdCBzZXQ6CisgICAgICAgICAgICAg
ICBbLi4uXQorICAgICAgICAgLT4gSWYgaGlnaGVzdCBlbmQgdGltZXN0YW1wIGZvciB0cmFjayBi
dWZmZXIgaXMgc2V0IGFuZCBsZXNzIHRoYW4gb3IKKyAgICAgICAgICAgIGVxdWFsIHRvIHByZXNl
bnRhdGlvbiB0aW1lc3RhbXA6CisgICAgICAgICAgICAgICBSZW1vdmUgYWxsIGNvZGVkIGZyYW1l
cyBmcm9tIHRyYWNrIGJ1ZmZlciB0aGF0IGhhdmUgYQorICAgICAgICAgICAgICAgcHJlc2VudGF0
aW9uIHRpbWVzdGFtcCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gaGlnaGVzdCBlbmQKKyAgICAg
ICAgICAgICAgIHRpbWVzdGFtcCBhbmQgbGVzcyB0aGFuIGZyYW1lIGVuZCB0aW1lc3RhbXAuCisK
KyAgICAgICAgTm90ZSB0aGUgcmVtb3ZhbCByYW5nZSBpcyBjbG9zZWQtb3BlbiBbYSwgYikuIFdl
YktpdCBpcyBhY3R1YWxseSByZW1vdmluZworICAgICAgICBmcmFtZXMgdXNpbmcgYW4gb3Blbi1j
bG9zZWQgcmFuZ2UgKGEsIGJdLCB3aGljaCBjYXVzZXMgZnJhbWVzIG5vdCB0byBiZSByZW1vdmVk
CisgICAgICAgIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhleSBzaG91bGQgYW5kIGZyYW1lcyB0byBi
ZSByZW1vdmVkIGluIHNpdHVhdGlvbnMgd2hlbgorICAgICAgICB0aGV5IHNob3VsZCBub3QuCisK
KyAgICAgICAgVGVzdHM6IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtcmFuZ2UtZW5k
LWZyYW1lLW5vdC1yZW1vdmVkLmh0bWwKKyAgICAgICAgICAgICAgIG1lZGlhL21lZGlhLXNvdXJj
ZS9tZWRpYS1zb3VyY2UtcmFuZ2Utc3RhcnQtZnJhbWUtcmVwbGFjZWQuaHRtbAorCisgICAgICAg
ICogTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6OmZpbmRTYW1wbGVzQmV0d2VlblByZXNlbnRhdGlv
blRpbWVzRnJvbUVuZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAu
aDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZl
U2FtcGxlKToKKwogMjAxNy0xMC0zMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
IAogICAgICAgICBBc3NlcnQgdGhhdCBubyBzY3JpcHQgaXMgZXhlY3V0ZWQgZHVyaW5nIExheW91
dFBoYXNlOjpJblJlbmRlclRyZWVMYXlvdXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzb3VyY2UvU2FtcGxlTWFwLmNwcAppbmRleCBhZjVmNGU0Mzg2YzM2ZjdhNmY4ZTliNTdm
Y2E1ZGNkYzc2ZjRiMDI4Li5hYjU3NzJmNDAwYTEwZTljOWRiMDYxYzEwMzBjZWQ4MTY3MGIwMWRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1h
cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAu
Y3BwCkBAIC0yODQsMjggKzI4NCwyMSBAQCBQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6aXRl
cmF0b3JfcmFuZ2UgUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6OmZpbmRTYW1wbAogICAgIHJl
dHVybiB7IGxvd2VyX2JvdW5kLCB1cHBlcl9ib3VuZCB9OwogfQogCi1QcmVzZW50YXRpb25PcmRl
clNhbXBsZU1hcDo6aXRlcmF0b3JfcmFuZ2UgUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6OmZp
bmRTYW1wbGVzV2l0aGluUHJlc2VudGF0aW9uUmFuZ2UoY29uc3QgTWVkaWFUaW1lJiBiZWdpblRp
bWUsIGNvbnN0IE1lZGlhVGltZSYgZW5kVGltZSkKK1ByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFw
OjppdGVyYXRvcl9yYW5nZSBQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6ZmluZFNhbXBsZXNC
ZXR3ZWVuUHJlc2VudGF0aW9uVGltZXNGcm9tRW5kKGNvbnN0IE1lZGlhVGltZSYgYmVnaW5UaW1l
LCBjb25zdCBNZWRpYVRpbWUmIGVuZFRpbWUpCiB7Ci0gICAgLy8gc3RhcnRUaW1lIGlzIG5vdCBp
bmNsdXNpdmUsIHNvIHVzZSB1cHBlcl9ib3VuZCB0byBleGNsdWRlIHNhbXBsZXMgd2hpY2ggc3Rh
cnQgZXhhY3RseSBhdCBzdGFydFRpbWUuCi0gICAgLy8gZW5kVGltZSBpcyBpbmNsdXNpdmUsIHNv
IHVzZSB1cHBlcl9ib3VuZCB0byBpbmNsdWRlIHNhbXBsZXMgd2hpY2ggc3RhcnQgZXhhY3RseSBh
dCBlbmRUaW1lLgotICAgIGF1dG8gbG93ZXJfYm91bmQgPSBtX3NhbXBsZXMudXBwZXJfYm91bmQo
YmVnaW5UaW1lKTsKLSAgICBhdXRvIHVwcGVyX2JvdW5kID0gbV9zYW1wbGVzLnVwcGVyX2JvdW5k
KGVuZFRpbWUpOwotICAgIGlmIChsb3dlcl9ib3VuZCA9PSB1cHBlcl9ib3VuZCkKLSAgICAgICAg
cmV0dXJuIHsgZW5kKCksIGVuZCgpIH07Ci0gICAgcmV0dXJuIHsgbG93ZXJfYm91bmQsIHVwcGVy
X2JvdW5kIH07Ci19Ci0KLVByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFwOjppdGVyYXRvcl9yYW5n
ZSBQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6ZmluZFNhbXBsZXNXaXRoaW5QcmVzZW50YXRp
b25SYW5nZUZyb21FbmQoY29uc3QgTWVkaWFUaW1lJiBiZWdpblRpbWUsIGNvbnN0IE1lZGlhVGlt
ZSYgZW5kVGltZSkKLXsKLSAgICByZXZlcnNlX2l0ZXJhdG9yIHJhbmdlRW5kID0gc3RkOjpmaW5k
X2lmKHJiZWdpbigpLCByZW5kKCksIFsmYmVnaW5UaW1lXShhdXRvJiB2YWx1ZSkgewotICAgICAg
ICByZXR1cm4gdmFsdWUuc2Vjb25kLT5wcmVzZW50YXRpb25UaW1lKCkgPD0gYmVnaW5UaW1lOwor
ICAgIHJldmVyc2VfaXRlcmF0b3IgcmFuZ2VFbmQgPSBzdGQ6OmZpbmRfaWYocmJlZ2luKCksIHJl
bmQoKSwgWyZlbmRUaW1lXShhdXRvJiB2YWx1ZSkgeworICAgICAgICByZXR1cm4gdmFsdWUuZmly
c3QgPCBlbmRUaW1lOwogICAgIH0pOwogCi0gICAgcmV2ZXJzZV9pdGVyYXRvciByYW5nZVN0YXJ0
ID0gc3RkOjpmaW5kX2lmKHJiZWdpbigpLCByYW5nZUVuZCwgWyZlbmRUaW1lXShhdXRvJiB2YWx1
ZSkgewotICAgICAgICByZXR1cm4gdmFsdWUuc2Vjb25kLT5wcmVzZW50YXRpb25UaW1lKCkgPD0g
ZW5kVGltZTsKKyAgICByZXZlcnNlX2l0ZXJhdG9yIHJhbmdlU3RhcnQgPSBzdGQ6OmZpbmRfaWYo
cmFuZ2VFbmQsIHJiZWdpbigpLCBbJmJlZ2luVGltZV0oYXV0byYgdmFsdWUpIHsKKyAgICAgICAg
cmV0dXJuIHZhbHVlLmZpcnN0IDwgYmVnaW5UaW1lOwogICAgIH0pOwogCi0gICAgcmV0dXJuIGl0
ZXJhdG9yX3JhbmdlKHJhbmdlRW5kLmJhc2UoKSwgcmFuZ2VTdGFydC5iYXNlKCkpOworICAgIGlm
IChyYW5nZVN0YXJ0ID09IHJhbmdlRW5kKQorICAgICAgICByZXR1cm4geyBlbmQoKSwgZW5kKCkg
fTsKKworICAgIC8vICggcmFuZ2VTdGFydCwgcmFuZ2VFbmQgXSA9PSBbIHJhbmdlU3RhcnQuYmFz
ZSgpLCByYW5nZUVuZC5iYXNlKCkgKQorICAgIHJldHVybiB7IHJhbmdlU3RhcnQuYmFzZSgpLCBy
YW5nZUVuZC5iYXNlKCkgfTsKIH0KIAogRGVjb2RlT3JkZXJTYW1wbGVNYXA6OnJldmVyc2VfaXRl
cmF0b3JfcmFuZ2UgRGVjb2RlT3JkZXJTYW1wbGVNYXA6OmZpbmREZXBlbmRlbnRTYW1wbGVzKE1l
ZGlhU2FtcGxlKiBzYW1wbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc291cmNlL1NhbXBsZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJj
ZS9TYW1wbGVNYXAuaAppbmRleCBkNjI4NWJmMWE5Y2JjNTU2OWQwM2RmMjJiOWVmMGNkYmQwYTNi
ZjdkLi4zOTMxOWZjMGIxMDJjYjg3NDE0MGJlN2ZiNGEwYjdlY2VhYjQwZWNlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmgKQEAgLTYzLDggKzYz
LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHJldmVyc2VfaXRlcmF0b3IgcmV2ZXJz
ZUZpbmRTYW1wbGVDb250YWluaW5nUHJlc2VudGF0aW9uVGltZShjb25zdCBNZWRpYVRpbWUmKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCByZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VGaW5kU2FtcGxlQmVm
b3JlUHJlc2VudGF0aW9uVGltZShjb25zdCBNZWRpYVRpbWUmKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBpdGVyYXRvcl9yYW5nZSBmaW5kU2FtcGxlc0JldHdlZW5QcmVzZW50YXRpb25UaW1lcyhjb25z
dCBNZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBpdGVy
YXRvcl9yYW5nZSBmaW5kU2FtcGxlc1dpdGhpblByZXNlbnRhdGlvblJhbmdlKGNvbnN0IE1lZGlh
VGltZSYsIGNvbnN0IE1lZGlhVGltZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIGl0ZXJhdG9yX3Jh
bmdlIGZpbmRTYW1wbGVzV2l0aGluUHJlc2VudGF0aW9uUmFuZ2VGcm9tRW5kKGNvbnN0IE1lZGlh
VGltZSYsIGNvbnN0IE1lZGlhVGltZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIGl0ZXJhdG9yX3Jh
bmdlIGZpbmRTYW1wbGVzQmV0d2VlblByZXNlbnRhdGlvblRpbWVzRnJvbUVuZChjb25zdCBNZWRp
YVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmKTsKIAogcHJpdmF0ZToKICAgICBNYXBUeXBlIG1fc2Ft
cGxlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291
cmNlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNl
QnVmZmVyLmNwcAppbmRleCBiNDJiOWVjNmU0NjliODA1MWE2NjlhYWE4Y2Y4NjU4ZjgyMmIxMGVl
Li5lZjQ3YzMwZTc0NDAxY2UxZTViOGIwMTlhNzFkM2EzZjBmMGY4ZDg2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCkBAIC0x
NTM3LDkgKzE1MzcsMTEgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVE
aWRSZWNlaXZlU2FtcGxlKE1lZGlhU2FtcGxlJiBzYW1wbGUpCiAKICAgICAgICAgICAgICAgICBQ
cmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6aXRlcmF0b3JfcmFuZ2UgcmFuZ2U7CiAgICAgICAg
ICAgICAgICAgaWYgKGhpZ2hlc3RCdWZmZXJlZFRpbWUgLSB0cmFja0J1ZmZlci5oaWdoZXN0UHJl
c2VudGF0aW9uVGltZXN0YW1wIDwgdHJhY2tCdWZmZXIubGFzdEZyYW1lRHVyYXRpb24pCi0gICAg
ICAgICAgICAgICAgICAgIHJhbmdlID0gdHJhY2tCdWZmZXIuc2FtcGxlcy5wcmVzZW50YXRpb25P
cmRlcigpLmZpbmRTYW1wbGVzV2l0aGluUHJlc2VudGF0aW9uUmFuZ2VGcm9tRW5kKHRyYWNrQnVm
ZmVyLmhpZ2hlc3RQcmVzZW50YXRpb25UaW1lc3RhbXAsIGZyYW1lRW5kVGltZXN0YW1wKTsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5ldyBmcmFtZSBpcyBhdCB0aGUgZW5kIG9mIHRo
ZSBidWZmZXJlZCByYW5nZXMsIHBlcmZvcm0gYSBzZXF1ZW50aWFsIHNjYW4gZnJvbSBlbmQgKE8o
MSkpLgorICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRyYWNrQnVmZmVyLnNhbXBsZXMucHJl
c2VudGF0aW9uT3JkZXIoKS5maW5kU2FtcGxlc0JldHdlZW5QcmVzZW50YXRpb25UaW1lc0Zyb21F
bmQodHJhY2tCdWZmZXIuaGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcCwgZnJhbWVFbmRUaW1l
c3RhbXApOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2Ug
PSB0cmFja0J1ZmZlci5zYW1wbGVzLnByZXNlbnRhdGlvbk9yZGVyKCkuZmluZFNhbXBsZXNXaXRo
aW5QcmVzZW50YXRpb25SYW5nZSh0cmFja0J1ZmZlci5oaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0
YW1wLCBmcmFtZUVuZFRpbWVzdGFtcCk7CisgICAgICAgICAgICAgICAgICAgIC8vIEluIGFueSBv
dGhlciBjYXNlLCBwZXJmb3JtIGEgYmluYXJ5IHNlYXJjaCAoTyhsb2cobikpLgorICAgICAgICAg
ICAgICAgICAgICByYW5nZSA9IHRyYWNrQnVmZmVyLnNhbXBsZXMucHJlc2VudGF0aW9uT3JkZXIo
KS5maW5kU2FtcGxlc0JldHdlZW5QcmVzZW50YXRpb25UaW1lcyh0cmFja0J1ZmZlci5oaWdoZXN0
UHJlc2VudGF0aW9uVGltZXN0YW1wLCBmcmFtZUVuZFRpbWVzdGFtcCk7CiAKICAgICAgICAgICAg
ICAgICBpZiAocmFuZ2UuZmlyc3QgIT0gdHJhY2tCdWZmZXIuc2FtcGxlcy5wcmVzZW50YXRpb25P
cmRlcigpLmVuZCgpKQogICAgICAgICAgICAgICAgICAgICBlcmFzZWRTYW1wbGVzLmFkZFJhbmdl
KHJhbmdlLmZpcnN0LCByYW5nZS5zZWNvbmQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL1NhbXBsZU1hcC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvU2FtcGxlTWFwLmNwcAppbmRleCAzMzYzYTZiNjUyN2U0ZWE3MWZjZTE0MmI3
ZGUxMTI5OTQ5YWNiODdkLi4xYzI5NjhmMjUyYTA1Y2I3Y2I3MjkzMGM3MjRlZGQ4MWNlN2JjYzI2
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2FtcGxlTWFw
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2FtcGxlTWFwLmNw
cApAQCAtMjAyLDM0ICsyMDIsNiBAQCBURVNUX0YoU2FtcGxlTWFwVGVzdCwgZmluZFNhbXBsZXNC
ZXR3ZWVuUHJlc2VudGF0aW9uVGltZXMpCiAgICAgRVhQRUNUX1RSVUUocHJlc2VudGF0aW9uTWFw
LmVuZCgpID09IGl0ZXJhdG9yX3JhbmdlLnNlY29uZCk7CiB9CiAKLVRFU1RfRihTYW1wbGVNYXBU
ZXN0LCBmaW5kU2FtcGxlc1dpdGhpblByZXNlbnRhdGlvblJhbmdlKQotewotICAgIGF1dG8mIHBy
ZXNlbnRhdGlvbk1hcCA9IG1hcC5wcmVzZW50YXRpb25PcmRlcigpOwotICAgIGF1dG8gaXRlcmF0
b3JfcmFuZ2UgPSBwcmVzZW50YXRpb25NYXAuZmluZFNhbXBsZXNXaXRoaW5QcmVzZW50YXRpb25S
YW5nZShNZWRpYVRpbWUoMCwgMSksIE1lZGlhVGltZSgxLCAxKSk7Ci0gICAgRVhQRUNUX0VRKE1l
ZGlhVGltZSgxLCAxKSwgaXRlcmF0b3JfcmFuZ2UuZmlyc3QtPnNlY29uZC0+cHJlc2VudGF0aW9u
VGltZSgpKTsKLSAgICBFWFBFQ1RfRVEoTWVkaWFUaW1lKDIsIDEpLCBpdGVyYXRvcl9yYW5nZS5z
ZWNvbmQtPnNlY29uZC0+cHJlc2VudGF0aW9uVGltZSgpKTsKLQotICAgIGl0ZXJhdG9yX3Jhbmdl
ID0gcHJlc2VudGF0aW9uTWFwLmZpbmRTYW1wbGVzV2l0aGluUHJlc2VudGF0aW9uUmFuZ2UoTWVk
aWFUaW1lKDEsIDIpLCBNZWRpYVRpbWUoMywgMikpOwotICAgIEVYUEVDVF9FUShNZWRpYVRpbWUo
MSwgMSksIGl0ZXJhdG9yX3JhbmdlLmZpcnN0LT5zZWNvbmQtPnByZXNlbnRhdGlvblRpbWUoKSk7
Ci0gICAgRVhQRUNUX0VRKE1lZGlhVGltZSgyLCAxKSwgaXRlcmF0b3JfcmFuZ2Uuc2Vjb25kLT5z
ZWNvbmQtPnByZXNlbnRhdGlvblRpbWUoKSk7Ci0KLSAgICBpdGVyYXRvcl9yYW5nZSA9IHByZXNl
bnRhdGlvbk1hcC5maW5kU2FtcGxlc1dpdGhpblByZXNlbnRhdGlvblJhbmdlKE1lZGlhVGltZSg5
LCAxKSwgTWVkaWFUaW1lKDIxLCAxKSk7Ci0gICAgRVhQRUNUX0VRKE1lZGlhVGltZSgxMSwgMSks
IGl0ZXJhdG9yX3JhbmdlLmZpcnN0LT5zZWNvbmQtPnByZXNlbnRhdGlvblRpbWUoKSk7Ci0gICAg
RVhQRUNUX1RSVUUocHJlc2VudGF0aW9uTWFwLmVuZCgpID09IGl0ZXJhdG9yX3JhbmdlLnNlY29u
ZCk7Ci0KLSAgICBpdGVyYXRvcl9yYW5nZSA9IHByZXNlbnRhdGlvbk1hcC5maW5kU2FtcGxlc1dp
dGhpblByZXNlbnRhdGlvblJhbmdlKE1lZGlhVGltZSgtMSwgMSksIE1lZGlhVGltZSgwLCAxKSk7
Ci0gICAgRVhQRUNUX0VRKE1lZGlhVGltZSgwLCAxKSwgaXRlcmF0b3JfcmFuZ2UuZmlyc3QtPnNl
Y29uZC0+cHJlc2VudGF0aW9uVGltZSgpKTsKLSAgICBFWFBFQ1RfRVEoTWVkaWFUaW1lKDEsIDEp
LCBpdGVyYXRvcl9yYW5nZS5zZWNvbmQtPnNlY29uZC0+cHJlc2VudGF0aW9uVGltZSgpKTsKLQot
ICAgIGl0ZXJhdG9yX3JhbmdlID0gcHJlc2VudGF0aW9uTWFwLmZpbmRTYW1wbGVzV2l0aGluUHJl
c2VudGF0aW9uUmFuZ2UoTWVkaWFUaW1lKDEwLCAxKSwgTWVkaWFUaW1lKDIxLCAyKSk7Ci0gICAg
RVhQRUNUX1RSVUUocHJlc2VudGF0aW9uTWFwLmVuZCgpID09IGl0ZXJhdG9yX3JhbmdlLmZpcnN0
KTsKLSAgICBFWFBFQ1RfVFJVRShwcmVzZW50YXRpb25NYXAuZW5kKCkgPT0gaXRlcmF0b3JfcmFu
Z2Uuc2Vjb25kKTsKLQotICAgIGl0ZXJhdG9yX3JhbmdlID0gcHJlc2VudGF0aW9uTWFwLmZpbmRT
YW1wbGVzV2l0aGluUHJlc2VudGF0aW9uUmFuZ2UoTWVkaWFUaW1lKDIwLCAxKSwgTWVkaWFUaW1l
KDIxLCAxKSk7Ci0gICAgRVhQRUNUX1RSVUUocHJlc2VudGF0aW9uTWFwLmVuZCgpID09IGl0ZXJh
dG9yX3JhbmdlLmZpcnN0KTsKLSAgICBFWFBFQ1RfVFJVRShwcmVzZW50YXRpb25NYXAuZW5kKCkg
PT0gaXRlcmF0b3JfcmFuZ2Uuc2Vjb25kKTsKLX0KLQogVEVTVF9GKFNhbXBsZU1hcFRlc3QsIHJl
dmVyc2VGaW5kU2FtcGxlQmVmb3JlUHJlc2VudGF0aW9uVGltZSkKIHsKICAgICBhdXRvJiBwcmVz
ZW50YXRpb25NYXAgPSBtYXAucHJlc2VudGF0aW9uT3JkZXIoKTsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1NjNlM2RiM2I1
OWEyZjU2ZDcyNWFjNGY3OWNlYzEyODMzNTk0N2FlLi40ZjJlYzlmZjA3NDE5NzhiZGFiNzc2Y2U5
M2ZiNzFhYTgxOWM1NTJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTctMTEtMTQgIEFsaWNp
YSBCb3lhIEdhcmPDrWEgIDxhYm95YUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtNU0VdIFVzZSBj
b3JyZWN0IHJhbmdlIGVuZCBjaGVja3MgaW4gc291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVT
YW1wbGUoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc5NjkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkZWQgdGVzdCBjYXNlcyBmb3IgYnVnICMxNzk2OTAuCisKKyAgICAgICAgKiBtZWRpYS9tZWRp
YS1zb3VyY2UvbWVkaWEtc291cmNlLXJhbmdlLWVuZC1mcmFtZS1ub3QtcmVtb3ZlZC1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2Ut
cmFuZ2UtZW5kLWZyYW1lLW5vdC1yZW1vdmVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIG1lZGlh
L21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtcmFuZ2Utc3RhcnQtZnJhbWUtcmVwbGFjZWQtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291
cmNlLXJhbmdlLXN0YXJ0LWZyYW1lLXJlcGxhY2VkLmh0bWw6IEFkZGVkLgorCiAyMDE3LTEwLTMx
ICBEZXZpbiBSb3Vzc28gIDx3ZWJraXRAZGV2aW5yb3Vzc28uY29tPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IHJlcGxhY2UgQ2FudmFzIHN0YWNrIGl0ZXJhdGlvbiB3aXRoIGNyZWF0ZVNjcmlw
dENhbGxTdGFjawpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21l
ZGlhLXNvdXJjZS1yYW5nZS1lbmQtZnJhbWUtbm90LXJlbW92ZWQtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1yYW5nZS1lbmQtZnJhbWUt
bm90LXJlbW92ZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiYzliNmNkYmM0OWM2OTUzYmM3
ODFhNTg3Y2QwZDA2YjM1YjE5YmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tZWRp
YS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLXJhbmdlLWVuZC1mcmFtZS1ub3QtcmVtb3ZlZC1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwyMiBAQAorCitSVU4odmlkZW8uc3JjID0gVVJMLmNyZWF0
ZU9iamVjdFVSTChzb3VyY2UpKQorRVZFTlQoc291cmNlb3BlbikKK1JVTihzb3VyY2VCdWZmZXIg
PSBzb3VyY2UuYWRkU291cmNlQnVmZmVyKCJ2aWRlby9tb2NrOyBjb2RlY3M9bW9jayIpKQorUlVO
KHNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoaW5pdFNlZ21lbnQpKQorRVZFTlQodXBkYXRlZW5k
KQorUlVOKHNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxlcykpCitFVkVOVCh1cGRhdGVl
bmQpCitSVU4oc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKSkKK0VWRU5UKHVwZGF0
ZWVuZCkKK0VYUEVDVEVEIChidWZmZXJlZFNhbXBsZXMubGVuZ3RoID09ICc2JykgT0sKK3tQVFMo
ezAvMTAwMCA9IDAuMDAwMDAwfSksIERUUyh7MC8xMDAwID0gMC4wMDAwMDB9KSwgZHVyYXRpb24o
ezEwMDAvMTAwMCA9IDEuMDAwMDAwfSksIGZsYWdzKDEpLCBnZW5lcmF0aW9uKDApfQore1BUUyh7
MTAwMC8xMDAwID0gMS4wMDAwMDB9KSwgRFRTKHsxMDAwLzEwMDAgPSAxLjAwMDAwMH0pLCBkdXJh
dGlvbih7MTAwMC8xMDAwID0gMS4wMDAwMDB9KSwgZmxhZ3MoMSksIGdlbmVyYXRpb24oMCl9Cit7
UFRTKHsyMDAwLzEwMDAgPSAyLjAwMDAwMH0pLCBEVFMoezIwMDAvMTAwMCA9IDIuMDAwMDAwfSks
IGR1cmF0aW9uKHsxMDAwLzEwMDAgPSAxLjAwMDAwMH0pLCBmbGFncygxKSwgZ2VuZXJhdGlvbigw
KX0KK3tQVFMoezMwMDAvMTAwMCA9IDMuMDAwMDAwfSksIERUUyh7MzAwMC8xMDAwID0gMy4wMDAw
MDB9KSwgZHVyYXRpb24oezEwMDAvMTAwMCA9IDEuMDAwMDAwfSksIGZsYWdzKDEpLCBnZW5lcmF0
aW9uKDApfQore1BUUyh7NDAwMC8xMDAwID0gNC4wMDAwMDB9KSwgRFRTKHs0MDAwLzEwMDAgPSA0
LjAwMDAwMH0pLCBkdXJhdGlvbih7MTAwMC8xMDAwID0gMS4wMDAwMDB9KSwgZmxhZ3MoMSksIGdl
bmVyYXRpb24oMCl9Cit7UFRTKHs1MDAwLzEwMDAgPSA1LjAwMDAwMH0pLCBEVFMoezUwMDAvMTAw
MCA9IDUuMDAwMDAwfSksIGR1cmF0aW9uKHsxMDAwLzEwMDAgPSAxLjAwMDAwMH0pLCBmbGFncygx
KSwgZ2VuZXJhdGlvbigwKX0KK0VYUEVDVEVEIChzb3VyY2VCdWZmZXIuYnVmZmVyZWQubGVuZ3Ro
ID09ICcxJykgT0sKK0VYUEVDVEVEIChzb3VyY2VCdWZmZXIuYnVmZmVyZWQuc3RhcnQoMCkgPT0g
JzAnKSBPSworRVhQRUNURUQgKHNvdXJjZUJ1ZmZlci5idWZmZXJlZC5lbmQoMCkgPT0gJzYnKSBP
SworRU5EIE9GIFRFU1QKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291
cmNlL21lZGlhLXNvdXJjZS1yYW5nZS1lbmQtZnJhbWUtbm90LXJlbW92ZWQuaHRtbCBiL0xheW91
dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtcmFuZ2UtZW5kLWZyYW1lLW5v
dC1yZW1vdmVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGU0NDhkZTQwYmQyZGM4MWE3ZDI4ZDBmMzNlYjA3
ZWY2NzBmNTA5MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNv
dXJjZS9tZWRpYS1zb3VyY2UtcmFuZ2UtZW5kLWZyYW1lLW5vdC1yZW1vdmVkLmh0bWwKQEAgLTAs
MCArMSw3MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5t
ZWRpYS1zb3VyY2UtcmFuZ2UtZW5kczwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Im1vY2stbWVk
aWEtc291cmNlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vdmlkZW8tdGVzdC5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICB2YXIgc291cmNlOworICAgIHZhciBzb3Vy
Y2VCdWZmZXI7CisgICAgdmFyIGluaXRTZWdtZW50OworICAgIHZhciBzYW1wbGVzOworICAgIHZh
ciBidWZmZXJlZFNhbXBsZXM7CisKKyAgICBpZiAod2luZG93LmludGVybmFscykKKyAgICAgICAg
aW50ZXJuYWxzLmluaXRpYWxpemVNb2NrTWVkaWFTb3VyY2UoKTsKKworICAgIGZ1bmN0aW9uIHJ1
blRlc3QoKQorICAgIHsKKyAgICAgICAgZmluZE1lZGlhRWxlbWVudCgpOworCisgICAgICAgIHNv
dXJjZSA9IG5ldyBNZWRpYVNvdXJjZSgpOworICAgICAgICB3YWl0Rm9yRXZlbnRPbihzb3VyY2Us
ICdzb3VyY2VvcGVuJywgc291cmNlT3Blbik7CisgICAgICAgIHJ1bigndmlkZW8uc3JjID0gVVJM
LmNyZWF0ZU9iamVjdFVSTChzb3VyY2UpJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gc291cmNl
T3BlbigpCisgICAgeworICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZlciA9IHNvdXJjZS5hZGRTb3Vy
Y2VCdWZmZXIoInZpZGVvL21vY2s7IGNvZGVjcz1tb2NrIiknKTsKKyAgICAgICAgd2FpdEZvckV2
ZW50T24oc291cmNlQnVmZmVyLCAndXBkYXRlZW5kJywgbG9hZFNhbXBsZXMxLCBmYWxzZSwgdHJ1
ZSk7CisgICAgICAgIGluaXRTZWdtZW50ID0gbWFrZUFJbml0KDYsIFttYWtlQVRyYWNrKDEsICdt
b2NrJywgVFJBQ0tfS0lORC5WSURFTyldKTsKKyAgICAgICAgcnVuKCdzb3VyY2VCdWZmZXIuYXBw
ZW5kQnVmZmVyKGluaXRTZWdtZW50KScpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGxvYWRTYW1w
bGVzMSgpCisgICAgeworICAgICAgICBzYW1wbGVzID0gY29uY2F0ZW5hdGVTYW1wbGVzKFsKKyAg
ICAgICAgICAgIG1ha2VBU2FtcGxlKDMsIDMsIDEsIDEsIFNBTVBMRV9GTEFHLlNZTkMsIDApLAor
ICAgICAgICAgICAgbWFrZUFTYW1wbGUoNCwgNCwgMSwgMSwgU0FNUExFX0ZMQUcuU1lOQywgMCks
CisgICAgICAgICAgICBtYWtlQVNhbXBsZSg1LCA1LCAxLCAxLCBTQU1QTEVfRkxBRy5TWU5DLCAw
KSwKKyAgICAgICAgXSk7CisgICAgICAgIHdhaXRGb3JFdmVudE9uKHNvdXJjZUJ1ZmZlciwgJ3Vw
ZGF0ZWVuZCcsIGxvYWRTYW1wbGVzMiwgZmFsc2UsIHRydWUpOworICAgICAgICBydW4oJ3NvdXJj
ZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxlcyknKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBs
b2FkU2FtcGxlczIoKQorICAgIHsKKyAgICAgICAgc2FtcGxlcyA9IGNvbmNhdGVuYXRlU2FtcGxl
cyhbCisgICAgICAgICAgICBtYWtlQVNhbXBsZSgwLCAwLCAxLCAxLCBTQU1QTEVfRkxBRy5TWU5D
LCAwKSwKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDEsIDEsIDEsIDEsIFNBTVBMRV9GTEFHLlNZ
TkMsIDApLAorICAgICAgICAgICAgbWFrZUFTYW1wbGUoMiwgMiwgMSwgMSwgU0FNUExFX0ZMQUcu
U1lOQywgMCksCisgICAgICAgIF0pOworICAgICAgICB3YWl0Rm9yRXZlbnRPbihzb3VyY2VCdWZm
ZXIsICd1cGRhdGVlbmQnLCBzYW1wbGVzQWRkZWQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgcnVu
KCdzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKHNhbXBsZXMpJyk7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gc2FtcGxlc0FkZGVkKCkKKyAgICB7CisgICAgICAgIGJ1ZmZlcmVkU2FtcGxlcyA9IGlu
dGVybmFscy5idWZmZXJlZFNhbXBsZXNGb3JUcmFja0lEKHNvdXJjZUJ1ZmZlciwgMSk7CisgICAg
ICAgIHRlc3RFeHBlY3RlZCgiYnVmZmVyZWRTYW1wbGVzLmxlbmd0aCIsIDYpOworICAgICAgICBi
dWZmZXJlZFNhbXBsZXMuZm9yRWFjaChjb25zb2xlV3JpdGUpOworCisgICAgICAgIHRlc3RFeHBl
Y3RlZCgic291cmNlQnVmZmVyLmJ1ZmZlcmVkLmxlbmd0aCIsIDEpOworICAgICAgICB0ZXN0RXhw
ZWN0ZWQoInNvdXJjZUJ1ZmZlci5idWZmZXJlZC5zdGFydCgwKSIsIDApOworICAgICAgICB0ZXN0
RXhwZWN0ZWQoInNvdXJjZUJ1ZmZlci5idWZmZXJlZC5lbmQoMCkiLCA2KTsKKworICAgICAgICBl
bmRUZXN0KCk7CisgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJy
dW5UZXN0KCkiPgorICAgIDx2aWRlbz48L3ZpZGVvPgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1yYW5nZS1zdGFydC1mcmFt
ZS1yZXBsYWNlZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2Uv
bWVkaWEtc291cmNlLXJhbmdlLXN0YXJ0LWZyYW1lLXJlcGxhY2VkLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42NTMwOGFkNDI3NjUwNzcxYTI1YjljMzAzZWM1MGIzMWZlYWNjZDcyCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1y
YW5nZS1zdGFydC1mcmFtZS1yZXBsYWNlZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNyBAQAor
CitSVU4odmlkZW8uc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChzb3VyY2UpKQorRVZFTlQoc291
cmNlb3BlbikKK1JVTihzb3VyY2VCdWZmZXIgPSBzb3VyY2UuYWRkU291cmNlQnVmZmVyKCJ2aWRl
by9tb2NrOyBjb2RlY3M9bW9jayIpKQorUlVOKHNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoaW5p
dFNlZ21lbnQpKQorRVZFTlQodXBkYXRlZW5kKQorUlVOKHNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZm
ZXIoc2FtcGxlcykpCitFVkVOVCh1cGRhdGVlbmQpCitSVU4oc291cmNlQnVmZmVyLmFwcGVuZEJ1
ZmZlcihzYW1wbGVzKSkKK0VWRU5UKHVwZGF0ZWVuZCkKK3tQVFMoezAvMTAwMCA9IDAuMDAwMDAw
fSksIERUUyh7MC8xMDAwID0gMC4wMDAwMDB9KSwgZHVyYXRpb24oezEwMDAvMTAwMCA9IDEuMDAw
MDAwfSksIGZsYWdzKDEpLCBnZW5lcmF0aW9uKDApfQore1BUUyh7MTAwMC8xMDAwID0gMS4wMDAw
MDB9KSwgRFRTKHsxMDAwLzEwMDAgPSAxLjAwMDAwMH0pLCBkdXJhdGlvbih7MjAwMC8xMDAwID0g
Mi4wMDAwMDB9KSwgZmxhZ3MoMSksIGdlbmVyYXRpb24oMCl9CitFWFBFQ1RFRCAoc291cmNlQnVm
ZmVyLmJ1ZmZlcmVkLmxlbmd0aCA9PSAnMScpIE9LCitFWFBFQ1RFRCAoc291cmNlQnVmZmVyLmJ1
ZmZlcmVkLnN0YXJ0KDApID09ICcwJykgT0sKK0VYUEVDVEVEIChzb3VyY2VCdWZmZXIuYnVmZmVy
ZWQuZW5kKDApID09ICczJykgT0sKK0VORCBPRiBURVNUCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtcmFuZ2Utc3RhcnQtZnJhbWUtcmVw
bGFjZWQuaHRtbCBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2Ut
cmFuZ2Utc3RhcnQtZnJhbWUtcmVwbGFjZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YmJiNzNjM2IwYjI3
NjhjNGI2YTM1ODdkYWU5OTU1ZWI2MTg1MzY0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1yYW5nZS1zdGFydC1mcmFtZS1yZXBs
YWNlZC5odG1sCkBAIC0wLDAgKzEsNjkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKyAgICA8dGl0bGU+bWVkaWEtc291cmNlLXJhbmdlLXN0YXJ0LWZyYW1lLXJlcGxhY2VkPC90
aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0ibW9jay1tZWRpYS1zb3VyY2UuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSIuLi92aWRlby10ZXN0LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
PgorICAgIHZhciBzb3VyY2U7CisgICAgdmFyIHNvdXJjZUJ1ZmZlcjsKKyAgICB2YXIgaW5pdFNl
Z21lbnQ7CisgICAgdmFyIHNhbXBsZXM7CisgICAgdmFyIGJ1ZmZlcmVkU2FtcGxlczsKKworICAg
IGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICBpbnRlcm5hbHMuaW5pdGlhbGl6ZU1vY2tN
ZWRpYVNvdXJjZSgpOworCisgICAgZnVuY3Rpb24gcnVuVGVzdCgpCisgICAgeworICAgICAgICBm
aW5kTWVkaWFFbGVtZW50KCk7CisKKyAgICAgICAgc291cmNlID0gbmV3IE1lZGlhU291cmNlKCk7
CisgICAgICAgIHdhaXRGb3JFdmVudE9uKHNvdXJjZSwgJ3NvdXJjZW9wZW4nLCBzb3VyY2VPcGVu
KTsKKyAgICAgICAgcnVuKCd2aWRlby5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHNvdXJjZSkn
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzb3VyY2VPcGVuKCkKKyAgICB7CisgICAgICAgIHJ1
bignc291cmNlQnVmZmVyID0gc291cmNlLmFkZFNvdXJjZUJ1ZmZlcigidmlkZW8vbW9jazsgY29k
ZWNzPW1vY2siKScpOworICAgICAgICB3YWl0Rm9yRXZlbnRPbihzb3VyY2VCdWZmZXIsICd1cGRh
dGVlbmQnLCBsb2FkU2FtcGxlczEsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgaW5pdFNlZ21lbnQg
PSBtYWtlQUluaXQoMywgW21ha2VBVHJhY2soMSwgJ21vY2snLCBUUkFDS19LSU5ELlZJREVPKV0p
OworICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoaW5pdFNlZ21lbnQpJyk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gbG9hZFNhbXBsZXMxKCkKKyAgICB7CisgICAgICAgIHNh
bXBsZXMgPSBjb25jYXRlbmF0ZVNhbXBsZXMoWworICAgICAgICAgICAgbWFrZUFTYW1wbGUoMSwg
MSwgMSwgMSwgU0FNUExFX0ZMQUcuU1lOQywgMCksCisgICAgICAgIF0pOworICAgICAgICB3YWl0
Rm9yRXZlbnRPbihzb3VyY2VCdWZmZXIsICd1cGRhdGVlbmQnLCBsb2FkU2FtcGxlczIsIGZhbHNl
LCB0cnVlKTsKKyAgICAgICAgcnVuKCdzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKHNhbXBsZXMp
Jyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gbG9hZFNhbXBsZXMyKCkKKyAgICB7CisgICAgICAg
IHNhbXBsZXMgPSBjb25jYXRlbmF0ZVNhbXBsZXMoWworICAgICAgICAgICAgLy8gTmV3IENvZGVk
IEZyYW1lIEdyb3VwIChEVFMgd2VudCBiYWNrd2FyZHMpCisgICAgICAgICAgICBtYWtlQVNhbXBs
ZSgwLCAwLCAxLCAxLCBTQU1QTEVfRkxBRy5TWU5DLCAwKSwKKyAgICAgICAgICAgIG1ha2VBU2Ft
cGxlKDEsIDEsIDIsIDEsIFNBTVBMRV9GTEFHLlNZTkMsIDApLCAvLyBkdXJhdGlvbiA9IDIKKyAg
ICAgICAgXSk7CisgICAgICAgIHdhaXRGb3JFdmVudE9uKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVu
ZCcsIHNhbXBsZXNBZGRlZCwgZmFsc2UsIHRydWUpOworICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZl
ci5hcHBlbmRCdWZmZXIoc2FtcGxlcyknKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzYW1wbGVz
QWRkZWQoKQorICAgIHsKKyAgICAgICAgYnVmZmVyZWRTYW1wbGVzID0gaW50ZXJuYWxzLmJ1ZmZl
cmVkU2FtcGxlc0ZvclRyYWNrSUQoc291cmNlQnVmZmVyLCAxKTsKKyAgICAgICAgYnVmZmVyZWRT
YW1wbGVzLmZvckVhY2goY29uc29sZVdyaXRlKTsKKworICAgICAgICB0ZXN0RXhwZWN0ZWQoInNv
dXJjZUJ1ZmZlci5idWZmZXJlZC5sZW5ndGgiLCAxKTsKKyAgICAgICAgdGVzdEV4cGVjdGVkKCJz
b3VyY2VCdWZmZXIuYnVmZmVyZWQuc3RhcnQoMCkiLCAwKTsKKyAgICAgICAgdGVzdEV4cGVjdGVk
KCJzb3VyY2VCdWZmZXIuYnVmZmVyZWQuZW5kKDApIiwgMyk7CisKKyAgICAgICAgZW5kVGVzdCgp
OworICAgIH0KKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgp
Ij4KKyAgICA8dmlkZW8+PC92aWRlbz4KKzwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328182</attachid>
            <date>2017-12-01 16:21:52 -0800</date>
            <delta_ts>2017-12-01 21:39:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179690-20171202012150.patch</filename>
            <type>text/plain</type>
            <size>19361</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0MjI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2VlNDk2MWU1NzEyZGYx
ODM1YTAzZjY2ZTUwN2I1NzEyMWNiZTBmYi4uMDZhODEyMDc0MDIwZjcxM2M5YjRhOWI0ZDAyZTEy
YzE5Zjg4MzhlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE3LTExLTE0ICBBbGlj
aWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbTVNFXSBVc2Ug
Y29ycmVjdCByYW5nZSBlbmQgY2hlY2tzIGluIHNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZl
U2FtcGxlKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3OTY5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoZSBDb2RlZCBGcmFtZSBQcm9jZXNzaW5nIGFsZ29yaXRobSBhcyBkZWZpbmVkIGluCisgICAg
ICAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9tZWRpYS1zb3VyY2UvI3NvdXJjZWJ1ZmZlci1jb2Rl
ZC1mcmFtZS1wcm9jZXNzaW5nIHN0YXRlczoKKworICAgICAgICAxLjE0LiBSZW1vdmUgZXhpc3Rp
bmcgY29kZWQgZnJhbWVzIGluIHRyYWNrIGJ1ZmZlcjoKKyAgICAgICAgIC0+IElmIGhpZ2hlc3Qg
ZW5kIHRpbWVzdGFtcCBmb3IgdHJhY2sgYnVmZmVyIGlzIG5vdCBzZXQ6CisgICAgICAgICAgICAg
ICBbLi4uXQorICAgICAgICAgLT4gSWYgaGlnaGVzdCBlbmQgdGltZXN0YW1wIGZvciB0cmFjayBi
dWZmZXIgaXMgc2V0IGFuZCBsZXNzIHRoYW4gb3IKKyAgICAgICAgICAgIGVxdWFsIHRvIHByZXNl
bnRhdGlvbiB0aW1lc3RhbXA6CisgICAgICAgICAgICAgICBSZW1vdmUgYWxsIGNvZGVkIGZyYW1l
cyBmcm9tIHRyYWNrIGJ1ZmZlciB0aGF0IGhhdmUgYQorICAgICAgICAgICAgICAgcHJlc2VudGF0
aW9uIHRpbWVzdGFtcCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gaGlnaGVzdCBlbmQKKyAgICAg
ICAgICAgICAgIHRpbWVzdGFtcCBhbmQgbGVzcyB0aGFuIGZyYW1lIGVuZCB0aW1lc3RhbXAuCisK
KyAgICAgICAgTm90ZSB0aGUgcmVtb3ZhbCByYW5nZSBpcyBjbG9zZWQtb3BlbiBbYSwgYikuIFdl
YktpdCBpcyBhY3R1YWxseSByZW1vdmluZworICAgICAgICBmcmFtZXMgdXNpbmcgYW4gb3Blbi1j
bG9zZWQgcmFuZ2UgKGEsIGJdLCB3aGljaCBjYXVzZXMgZnJhbWVzIG5vdCB0byBiZSByZW1vdmVk
CisgICAgICAgIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhleSBzaG91bGQgYW5kIGZyYW1lcyB0byBi
ZSByZW1vdmVkIGluIHNpdHVhdGlvbnMgd2hlbgorICAgICAgICB0aGV5IHNob3VsZCBub3QuCisK
KyAgICAgICAgVGVzdHM6IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtcmFuZ2UtZW5k
LWZyYW1lLW5vdC1yZW1vdmVkLmh0bWwKKyAgICAgICAgICAgICAgIG1lZGlhL21lZGlhLXNvdXJj
ZS9tZWRpYS1zb3VyY2UtcmFuZ2Utc3RhcnQtZnJhbWUtcmVwbGFjZWQuaHRtbAorCisgICAgICAg
ICogTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6OmZpbmRTYW1wbGVzQmV0d2VlblByZXNlbnRhdGlv
blRpbWVzRnJvbUVuZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAu
aDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZl
U2FtcGxlKToKKwogMjAxNy0xMC0zMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
IAogICAgICAgICBBc3NlcnQgdGhhdCBubyBzY3JpcHQgaXMgZXhlY3V0ZWQgZHVyaW5nIExheW91
dFBoYXNlOjpJblJlbmRlclRyZWVMYXlvdXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzb3VyY2UvU2FtcGxlTWFwLmNwcAppbmRleCBhZjVmNGU0Mzg2YzM2ZjdhNmY4ZTliNTdm
Y2E1ZGNkYzc2ZjRiMDI4Li40NWU4NmMyY2FmOTEzOGFlZmYwZmIxZTZlZTA5MDZhMWZhNGFiMDA5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1h
cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAu
Y3BwCkBAIC0yODQsMjggKzI4NCwyMSBAQCBQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6aXRl
cmF0b3JfcmFuZ2UgUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6OmZpbmRTYW1wbAogICAgIHJl
dHVybiB7IGxvd2VyX2JvdW5kLCB1cHBlcl9ib3VuZCB9OwogfQogCi1QcmVzZW50YXRpb25PcmRl
clNhbXBsZU1hcDo6aXRlcmF0b3JfcmFuZ2UgUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6OmZp
bmRTYW1wbGVzV2l0aGluUHJlc2VudGF0aW9uUmFuZ2UoY29uc3QgTWVkaWFUaW1lJiBiZWdpblRp
bWUsIGNvbnN0IE1lZGlhVGltZSYgZW5kVGltZSkKK1ByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFw
OjppdGVyYXRvcl9yYW5nZSBQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6ZmluZFNhbXBsZXNC
ZXR3ZWVuUHJlc2VudGF0aW9uVGltZXNGcm9tRW5kKGNvbnN0IE1lZGlhVGltZSYgYmVnaW5UaW1l
LCBjb25zdCBNZWRpYVRpbWUmIGVuZFRpbWUpCiB7Ci0gICAgLy8gc3RhcnRUaW1lIGlzIG5vdCBp
bmNsdXNpdmUsIHNvIHVzZSB1cHBlcl9ib3VuZCB0byBleGNsdWRlIHNhbXBsZXMgd2hpY2ggc3Rh
cnQgZXhhY3RseSBhdCBzdGFydFRpbWUuCi0gICAgLy8gZW5kVGltZSBpcyBpbmNsdXNpdmUsIHNv
IHVzZSB1cHBlcl9ib3VuZCB0byBpbmNsdWRlIHNhbXBsZXMgd2hpY2ggc3RhcnQgZXhhY3RseSBh
dCBlbmRUaW1lLgotICAgIGF1dG8gbG93ZXJfYm91bmQgPSBtX3NhbXBsZXMudXBwZXJfYm91bmQo
YmVnaW5UaW1lKTsKLSAgICBhdXRvIHVwcGVyX2JvdW5kID0gbV9zYW1wbGVzLnVwcGVyX2JvdW5k
KGVuZFRpbWUpOwotICAgIGlmIChsb3dlcl9ib3VuZCA9PSB1cHBlcl9ib3VuZCkKLSAgICAgICAg
cmV0dXJuIHsgZW5kKCksIGVuZCgpIH07Ci0gICAgcmV0dXJuIHsgbG93ZXJfYm91bmQsIHVwcGVy
X2JvdW5kIH07Ci19Ci0KLVByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFwOjppdGVyYXRvcl9yYW5n
ZSBQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6ZmluZFNhbXBsZXNXaXRoaW5QcmVzZW50YXRp
b25SYW5nZUZyb21FbmQoY29uc3QgTWVkaWFUaW1lJiBiZWdpblRpbWUsIGNvbnN0IE1lZGlhVGlt
ZSYgZW5kVGltZSkKLXsKLSAgICByZXZlcnNlX2l0ZXJhdG9yIHJhbmdlRW5kID0gc3RkOjpmaW5k
X2lmKHJiZWdpbigpLCByZW5kKCksIFsmYmVnaW5UaW1lXShhdXRvJiB2YWx1ZSkgewotICAgICAg
ICByZXR1cm4gdmFsdWUuc2Vjb25kLT5wcmVzZW50YXRpb25UaW1lKCkgPD0gYmVnaW5UaW1lOwor
ICAgIHJldmVyc2VfaXRlcmF0b3IgcmFuZ2VFbmQgPSBzdGQ6OmZpbmRfaWYocmJlZ2luKCksIHJl
bmQoKSwgWyZlbmRUaW1lXShhdXRvJiB2YWx1ZSkgeworICAgICAgICByZXR1cm4gdmFsdWUuZmly
c3QgPCBlbmRUaW1lOwogICAgIH0pOwogCi0gICAgcmV2ZXJzZV9pdGVyYXRvciByYW5nZVN0YXJ0
ID0gc3RkOjpmaW5kX2lmKHJiZWdpbigpLCByYW5nZUVuZCwgWyZlbmRUaW1lXShhdXRvJiB2YWx1
ZSkgewotICAgICAgICByZXR1cm4gdmFsdWUuc2Vjb25kLT5wcmVzZW50YXRpb25UaW1lKCkgPD0g
ZW5kVGltZTsKKyAgICByZXZlcnNlX2l0ZXJhdG9yIHJhbmdlU3RhcnQgPSBzdGQ6OmZpbmRfaWYo
cmFuZ2VFbmQsIHJlbmQoKSwgWyZiZWdpblRpbWVdKGF1dG8mIHZhbHVlKSB7CisgICAgICAgIHJl
dHVybiB2YWx1ZS5maXJzdCA8IGJlZ2luVGltZTsKICAgICB9KTsKIAotICAgIHJldHVybiBpdGVy
YXRvcl9yYW5nZShyYW5nZUVuZC5iYXNlKCksIHJhbmdlU3RhcnQuYmFzZSgpKTsKKyAgICBpZiAo
cmFuZ2VTdGFydCA9PSByYW5nZUVuZCkKKyAgICAgICAgcmV0dXJuIHsgZW5kKCksIGVuZCgpIH07
CisKKyAgICAvLyAoIHJhbmdlU3RhcnQsIHJhbmdlRW5kIF0gPT0gWyByYW5nZVN0YXJ0LmJhc2Uo
KSwgcmFuZ2VFbmQuYmFzZSgpICkKKyAgICByZXR1cm4geyByYW5nZVN0YXJ0LmJhc2UoKSwgcmFu
Z2VFbmQuYmFzZSgpIH07CiB9CiAKIERlY29kZU9yZGVyU2FtcGxlTWFwOjpyZXZlcnNlX2l0ZXJh
dG9yX3JhbmdlIERlY29kZU9yZGVyU2FtcGxlTWFwOjpmaW5kRGVwZW5kZW50U2FtcGxlcyhNZWRp
YVNhbXBsZSogc2FtcGxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXNvdXJjZS9TYW1wbGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
U2FtcGxlTWFwLmgKaW5kZXggZDYyODViZjFhOWNiYzU1NjlkMDNkZjIyYjllZjBjZGJkMGEzYmY3
ZC4uMzkzMTlmYzBiMTAyY2I4NzQxNDBiZTdmYjRhMGI3ZWNlYWI0MGVjZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5oCkBAIC02Myw4ICs2Myw3
IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCByZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VG
aW5kU2FtcGxlQ29udGFpbmluZ1ByZXNlbnRhdGlvblRpbWUoY29uc3QgTWVkaWFUaW1lJik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgcmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlRmluZFNhbXBsZUJlZm9y
ZVByZXNlbnRhdGlvblRpbWUoY29uc3QgTWVkaWFUaW1lJik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
aXRlcmF0b3JfcmFuZ2UgZmluZFNhbXBsZXNCZXR3ZWVuUHJlc2VudGF0aW9uVGltZXMoY29uc3Qg
TWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1lJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgaXRlcmF0
b3JfcmFuZ2UgZmluZFNhbXBsZXNXaXRoaW5QcmVzZW50YXRpb25SYW5nZShjb25zdCBNZWRpYVRp
bWUmLCBjb25zdCBNZWRpYVRpbWUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBpdGVyYXRvcl9yYW5n
ZSBmaW5kU2FtcGxlc1dpdGhpblByZXNlbnRhdGlvblJhbmdlRnJvbUVuZChjb25zdCBNZWRpYVRp
bWUmLCBjb25zdCBNZWRpYVRpbWUmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBpdGVyYXRvcl9yYW5n
ZSBmaW5kU2FtcGxlc0JldHdlZW5QcmVzZW50YXRpb25UaW1lc0Zyb21FbmQoY29uc3QgTWVkaWFU
aW1lJiwgY29uc3QgTWVkaWFUaW1lJik7CiAKIHByaXZhdGU6CiAgICAgTWFwVHlwZSBtX3NhbXBs
ZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJj
ZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1
ZmZlci5jcHAKaW5kZXggYjQyYjllYzZlNDY5YjgwNTFhNjY5YWFhOGNmODY1OGY4MjJiMTBlZS4u
ZWY0N2MzMGU3NDQwMWNlMWU1YjhiMDE5YTcxZDNhM2YwZjBmOGQ4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcApAQCAtMTUz
Nyw5ICsxNTM3LDExIEBAIHZvaWQgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlk
UmVjZWl2ZVNhbXBsZShNZWRpYVNhbXBsZSYgc2FtcGxlKQogCiAgICAgICAgICAgICAgICAgUHJl
c2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6Oml0ZXJhdG9yX3JhbmdlIHJhbmdlOwogICAgICAgICAg
ICAgICAgIGlmIChoaWdoZXN0QnVmZmVyZWRUaW1lIC0gdHJhY2tCdWZmZXIuaGlnaGVzdFByZXNl
bnRhdGlvblRpbWVzdGFtcCA8IHRyYWNrQnVmZmVyLmxhc3RGcmFtZUR1cmF0aW9uKQotICAgICAg
ICAgICAgICAgICAgICByYW5nZSA9IHRyYWNrQnVmZmVyLnNhbXBsZXMucHJlc2VudGF0aW9uT3Jk
ZXIoKS5maW5kU2FtcGxlc1dpdGhpblByZXNlbnRhdGlvblJhbmdlRnJvbUVuZCh0cmFja0J1ZmZl
ci5oaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wLCBmcmFtZUVuZFRpbWVzdGFtcCk7CisgICAg
ICAgICAgICAgICAgICAgIC8vIElmIHRoZSBuZXcgZnJhbWUgaXMgYXQgdGhlIGVuZCBvZiB0aGUg
YnVmZmVyZWQgcmFuZ2VzLCBwZXJmb3JtIGEgc2VxdWVudGlhbCBzY2FuIGZyb20gZW5kIChPKDEp
KS4KKyAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0cmFja0J1ZmZlci5zYW1wbGVzLnByZXNl
bnRhdGlvbk9yZGVyKCkuZmluZFNhbXBsZXNCZXR3ZWVuUHJlc2VudGF0aW9uVGltZXNGcm9tRW5k
KHRyYWNrQnVmZmVyLmhpZ2hlc3RQcmVzZW50YXRpb25UaW1lc3RhbXAsIGZyYW1lRW5kVGltZXN0
YW1wKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJhbmdlID0g
dHJhY2tCdWZmZXIuc2FtcGxlcy5wcmVzZW50YXRpb25PcmRlcigpLmZpbmRTYW1wbGVzV2l0aGlu
UHJlc2VudGF0aW9uUmFuZ2UodHJhY2tCdWZmZXIuaGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFt
cCwgZnJhbWVFbmRUaW1lc3RhbXApOworICAgICAgICAgICAgICAgICAgICAvLyBJbiBhbnkgb3Ro
ZXIgY2FzZSwgcGVyZm9ybSBhIGJpbmFyeSBzZWFyY2ggKE8obG9nKG4pKS4KKyAgICAgICAgICAg
ICAgICAgICAgcmFuZ2UgPSB0cmFja0J1ZmZlci5zYW1wbGVzLnByZXNlbnRhdGlvbk9yZGVyKCku
ZmluZFNhbXBsZXNCZXR3ZWVuUHJlc2VudGF0aW9uVGltZXModHJhY2tCdWZmZXIuaGlnaGVzdFBy
ZXNlbnRhdGlvblRpbWVzdGFtcCwgZnJhbWVFbmRUaW1lc3RhbXApOwogCiAgICAgICAgICAgICAg
ICAgaWYgKHJhbmdlLmZpcnN0ICE9IHRyYWNrQnVmZmVyLnNhbXBsZXMucHJlc2VudGF0aW9uT3Jk
ZXIoKS5lbmQoKSkKICAgICAgICAgICAgICAgICAgICAgZXJhc2VkU2FtcGxlcy5hZGRSYW5nZShy
YW5nZS5maXJzdCwgcmFuZ2Uuc2Vjb25kKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9TYW1wbGVNYXAuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL1NhbXBsZU1hcC5jcHAKaW5kZXggMzM2M2E2YjY1MjdlNGVhNzFmY2UxNDJiN2Rl
MTEyOTk0OWFjYjg3ZC4uYzc5N2Y1MGYxODEwMTA5MWVmMjQxNWJiZGI0MDc3OTE3ZWZmODEyMyAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1NhbXBsZU1hcC5j
cHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1NhbXBsZU1hcC5jcHAK
QEAgLTIwMiwzMCArMjAyLDMwIEBAIFRFU1RfRihTYW1wbGVNYXBUZXN0LCBmaW5kU2FtcGxlc0Jl
dHdlZW5QcmVzZW50YXRpb25UaW1lcykKICAgICBFWFBFQ1RfVFJVRShwcmVzZW50YXRpb25NYXAu
ZW5kKCkgPT0gaXRlcmF0b3JfcmFuZ2Uuc2Vjb25kKTsKIH0KIAotVEVTVF9GKFNhbXBsZU1hcFRl
c3QsIGZpbmRTYW1wbGVzV2l0aGluUHJlc2VudGF0aW9uUmFuZ2UpCitURVNUX0YoU2FtcGxlTWFw
VGVzdCwgZmluZFNhbXBsZXNCZXR3ZWVuUHJlc2VudGF0aW9uVGltZXNGcm9tRW5kKQogewogICAg
IGF1dG8mIHByZXNlbnRhdGlvbk1hcCA9IG1hcC5wcmVzZW50YXRpb25PcmRlcigpOwotICAgIGF1
dG8gaXRlcmF0b3JfcmFuZ2UgPSBwcmVzZW50YXRpb25NYXAuZmluZFNhbXBsZXNXaXRoaW5QcmVz
ZW50YXRpb25SYW5nZShNZWRpYVRpbWUoMCwgMSksIE1lZGlhVGltZSgxLCAxKSk7Ci0gICAgRVhQ
RUNUX0VRKE1lZGlhVGltZSgxLCAxKSwgaXRlcmF0b3JfcmFuZ2UuZmlyc3QtPnNlY29uZC0+cHJl
c2VudGF0aW9uVGltZSgpKTsKLSAgICBFWFBFQ1RfRVEoTWVkaWFUaW1lKDIsIDEpLCBpdGVyYXRv
cl9yYW5nZS5zZWNvbmQtPnNlY29uZC0+cHJlc2VudGF0aW9uVGltZSgpKTsKKyAgICBhdXRvIGl0
ZXJhdG9yX3JhbmdlID0gcHJlc2VudGF0aW9uTWFwLmZpbmRTYW1wbGVzQmV0d2VlblByZXNlbnRh
dGlvblRpbWVzRnJvbUVuZChNZWRpYVRpbWUoMCwgMSksIE1lZGlhVGltZSgxLCAxKSk7CisgICAg
RVhQRUNUX0VRKE1lZGlhVGltZSgwLCAxKSwgaXRlcmF0b3JfcmFuZ2UuZmlyc3QtPnNlY29uZC0+
cHJlc2VudGF0aW9uVGltZSgpKTsKKyAgICBFWFBFQ1RfRVEoTWVkaWFUaW1lKDEsIDEpLCBpdGVy
YXRvcl9yYW5nZS5zZWNvbmQtPnNlY29uZC0+cHJlc2VudGF0aW9uVGltZSgpKTsKIAotICAgIGl0
ZXJhdG9yX3JhbmdlID0gcHJlc2VudGF0aW9uTWFwLmZpbmRTYW1wbGVzV2l0aGluUHJlc2VudGF0
aW9uUmFuZ2UoTWVkaWFUaW1lKDEsIDIpLCBNZWRpYVRpbWUoMywgMikpOworICAgIGl0ZXJhdG9y
X3JhbmdlID0gcHJlc2VudGF0aW9uTWFwLmZpbmRTYW1wbGVzQmV0d2VlblByZXNlbnRhdGlvblRp
bWVzRnJvbUVuZChNZWRpYVRpbWUoMSwgMiksIE1lZGlhVGltZSgzLCAyKSk7CiAgICAgRVhQRUNU
X0VRKE1lZGlhVGltZSgxLCAxKSwgaXRlcmF0b3JfcmFuZ2UuZmlyc3QtPnNlY29uZC0+cHJlc2Vu
dGF0aW9uVGltZSgpKTsKICAgICBFWFBFQ1RfRVEoTWVkaWFUaW1lKDIsIDEpLCBpdGVyYXRvcl9y
YW5nZS5zZWNvbmQtPnNlY29uZC0+cHJlc2VudGF0aW9uVGltZSgpKTsKIAotICAgIGl0ZXJhdG9y
X3JhbmdlID0gcHJlc2VudGF0aW9uTWFwLmZpbmRTYW1wbGVzV2l0aGluUHJlc2VudGF0aW9uUmFu
Z2UoTWVkaWFUaW1lKDksIDEpLCBNZWRpYVRpbWUoMjEsIDEpKTsKLSAgICBFWFBFQ1RfRVEoTWVk
aWFUaW1lKDExLCAxKSwgaXRlcmF0b3JfcmFuZ2UuZmlyc3QtPnNlY29uZC0+cHJlc2VudGF0aW9u
VGltZSgpKTsKKyAgICBpdGVyYXRvcl9yYW5nZSA9IHByZXNlbnRhdGlvbk1hcC5maW5kU2FtcGxl
c0JldHdlZW5QcmVzZW50YXRpb25UaW1lc0Zyb21FbmQoTWVkaWFUaW1lKDksIDEpLCBNZWRpYVRp
bWUoMjEsIDEpKTsKKyAgICBFWFBFQ1RfRVEoTWVkaWFUaW1lKDksIDEpLCBpdGVyYXRvcl9yYW5n
ZS5maXJzdC0+c2Vjb25kLT5wcmVzZW50YXRpb25UaW1lKCkpOwogICAgIEVYUEVDVF9UUlVFKHBy
ZXNlbnRhdGlvbk1hcC5lbmQoKSA9PSBpdGVyYXRvcl9yYW5nZS5zZWNvbmQpOwogCi0gICAgaXRl
cmF0b3JfcmFuZ2UgPSBwcmVzZW50YXRpb25NYXAuZmluZFNhbXBsZXNXaXRoaW5QcmVzZW50YXRp
b25SYW5nZShNZWRpYVRpbWUoLTEsIDEpLCBNZWRpYVRpbWUoMCwgMSkpOwotICAgIEVYUEVDVF9F
UShNZWRpYVRpbWUoMCwgMSksIGl0ZXJhdG9yX3JhbmdlLmZpcnN0LT5zZWNvbmQtPnByZXNlbnRh
dGlvblRpbWUoKSk7Ci0gICAgRVhQRUNUX0VRKE1lZGlhVGltZSgxLCAxKSwgaXRlcmF0b3JfcmFu
Z2Uuc2Vjb25kLT5zZWNvbmQtPnByZXNlbnRhdGlvblRpbWUoKSk7CisgICAgaXRlcmF0b3JfcmFu
Z2UgPSBwcmVzZW50YXRpb25NYXAuZmluZFNhbXBsZXNCZXR3ZWVuUHJlc2VudGF0aW9uVGltZXNG
cm9tRW5kKE1lZGlhVGltZSgtMSwgMSksIE1lZGlhVGltZSgwLCAxKSk7CisgICAgRVhQRUNUX1RS
VUUocHJlc2VudGF0aW9uTWFwLmVuZCgpID09IGl0ZXJhdG9yX3JhbmdlLmZpcnN0KTsKKyAgICBF
WFBFQ1RfVFJVRShwcmVzZW50YXRpb25NYXAuZW5kKCkgPT0gaXRlcmF0b3JfcmFuZ2Uuc2Vjb25k
KTsKIAotICAgIGl0ZXJhdG9yX3JhbmdlID0gcHJlc2VudGF0aW9uTWFwLmZpbmRTYW1wbGVzV2l0
aGluUHJlc2VudGF0aW9uUmFuZ2UoTWVkaWFUaW1lKDEwLCAxKSwgTWVkaWFUaW1lKDIxLCAyKSk7
CisgICAgaXRlcmF0b3JfcmFuZ2UgPSBwcmVzZW50YXRpb25NYXAuZmluZFNhbXBsZXNCZXR3ZWVu
UHJlc2VudGF0aW9uVGltZXNGcm9tRW5kKE1lZGlhVGltZSgxOSwgMiksIE1lZGlhVGltZSgxMCwg
MSkpOwogICAgIEVYUEVDVF9UUlVFKHByZXNlbnRhdGlvbk1hcC5lbmQoKSA9PSBpdGVyYXRvcl9y
YW5nZS5maXJzdCk7CiAgICAgRVhQRUNUX1RSVUUocHJlc2VudGF0aW9uTWFwLmVuZCgpID09IGl0
ZXJhdG9yX3JhbmdlLnNlY29uZCk7CiAKLSAgICBpdGVyYXRvcl9yYW5nZSA9IHByZXNlbnRhdGlv
bk1hcC5maW5kU2FtcGxlc1dpdGhpblByZXNlbnRhdGlvblJhbmdlKE1lZGlhVGltZSgyMCwgMSks
IE1lZGlhVGltZSgyMSwgMSkpOworICAgIGl0ZXJhdG9yX3JhbmdlID0gcHJlc2VudGF0aW9uTWFw
LmZpbmRTYW1wbGVzQmV0d2VlblByZXNlbnRhdGlvblRpbWVzRnJvbUVuZChNZWRpYVRpbWUoMjAs
IDEpLCBNZWRpYVRpbWUoMjEsIDEpKTsKICAgICBFWFBFQ1RfVFJVRShwcmVzZW50YXRpb25NYXAu
ZW5kKCkgPT0gaXRlcmF0b3JfcmFuZ2UuZmlyc3QpOwogICAgIEVYUEVDVF9UUlVFKHByZXNlbnRh
dGlvbk1hcC5lbmQoKSA9PSBpdGVyYXRvcl9yYW5nZS5zZWNvbmQpOwogfQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDU2M2Uz
ZGIzYjU5YTJmNTZkNzI1YWM0Zjc5Y2VjMTI4MzM1OTQ3YWUuLjRmMmVjOWZmMDc0MTk3OGJkYWI3
NzZjZTkzZmI3MWFhODE5YzU1MmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNy0xMS0xNCAg
QWxpY2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW01TRV0g
VXNlIGNvcnJlY3QgcmFuZ2UgZW5kIGNoZWNrcyBpbiBzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVj
ZWl2ZVNhbXBsZSgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzk2OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGRlZCB0ZXN0IGNhc2VzIGZvciBidWcgIzE3OTY5MC4KKworICAgICAgICAqIG1lZGlh
L21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtcmFuZ2UtZW5kLWZyYW1lLW5vdC1yZW1vdmVkLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNv
dXJjZS1yYW5nZS1lbmQtZnJhbWUtbm90LXJlbW92ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICog
bWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1yYW5nZS1zdGFydC1mcmFtZS1yZXBsYWNl
ZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIG1lZGlhL21lZGlhLXNvdXJjZS9tZWRp
YS1zb3VyY2UtcmFuZ2Utc3RhcnQtZnJhbWUtcmVwbGFjZWQuaHRtbDogQWRkZWQuCisKIDIwMTct
MTAtMzEgIERldmluIFJvdXNzbyAgPHdlYmtpdEBkZXZpbnJvdXNzby5jb20+CiAKICAgICAgICAg
V2ViIEluc3BlY3RvcjogcmVwbGFjZSBDYW52YXMgc3RhY2sgaXRlcmF0aW9uIHdpdGggY3JlYXRl
U2NyaXB0Q2FsbFN0YWNrCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3Vy
Y2UvbWVkaWEtc291cmNlLXJhbmdlLWVuZC1mcmFtZS1ub3QtcmVtb3ZlZC1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLXJhbmdlLWVuZC1m
cmFtZS1ub3QtcmVtb3ZlZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJjOWI2Y2RiYzQ5YzY5
NTNiYzc4MWE1ODdjZDBkMDZiMzViMTliYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtcmFuZ2UtZW5kLWZyYW1lLW5vdC1yZW1v
dmVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIyIEBACisKK1JVTih2aWRlby5zcmMgPSBVUkwu
Y3JlYXRlT2JqZWN0VVJMKHNvdXJjZSkpCitFVkVOVChzb3VyY2VvcGVuKQorUlVOKHNvdXJjZUJ1
ZmZlciA9IHNvdXJjZS5hZGRTb3VyY2VCdWZmZXIoInZpZGVvL21vY2s7IGNvZGVjcz1tb2NrIikp
CitSVU4oc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihpbml0U2VnbWVudCkpCitFVkVOVCh1cGRh
dGVlbmQpCitSVU4oc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKSkKK0VWRU5UKHVw
ZGF0ZWVuZCkKK1JVTihzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKHNhbXBsZXMpKQorRVZFTlQo
dXBkYXRlZW5kKQorRVhQRUNURUQgKGJ1ZmZlcmVkU2FtcGxlcy5sZW5ndGggPT0gJzYnKSBPSwor
e1BUUyh7MC8xMDAwID0gMC4wMDAwMDB9KSwgRFRTKHswLzEwMDAgPSAwLjAwMDAwMH0pLCBkdXJh
dGlvbih7MTAwMC8xMDAwID0gMS4wMDAwMDB9KSwgZmxhZ3MoMSksIGdlbmVyYXRpb24oMCl9Cit7
UFRTKHsxMDAwLzEwMDAgPSAxLjAwMDAwMH0pLCBEVFMoezEwMDAvMTAwMCA9IDEuMDAwMDAwfSks
IGR1cmF0aW9uKHsxMDAwLzEwMDAgPSAxLjAwMDAwMH0pLCBmbGFncygxKSwgZ2VuZXJhdGlvbigw
KX0KK3tQVFMoezIwMDAvMTAwMCA9IDIuMDAwMDAwfSksIERUUyh7MjAwMC8xMDAwID0gMi4wMDAw
MDB9KSwgZHVyYXRpb24oezEwMDAvMTAwMCA9IDEuMDAwMDAwfSksIGZsYWdzKDEpLCBnZW5lcmF0
aW9uKDApfQore1BUUyh7MzAwMC8xMDAwID0gMy4wMDAwMDB9KSwgRFRTKHszMDAwLzEwMDAgPSAz
LjAwMDAwMH0pLCBkdXJhdGlvbih7MTAwMC8xMDAwID0gMS4wMDAwMDB9KSwgZmxhZ3MoMSksIGdl
bmVyYXRpb24oMCl9Cit7UFRTKHs0MDAwLzEwMDAgPSA0LjAwMDAwMH0pLCBEVFMoezQwMDAvMTAw
MCA9IDQuMDAwMDAwfSksIGR1cmF0aW9uKHsxMDAwLzEwMDAgPSAxLjAwMDAwMH0pLCBmbGFncygx
KSwgZ2VuZXJhdGlvbigwKX0KK3tQVFMoezUwMDAvMTAwMCA9IDUuMDAwMDAwfSksIERUUyh7NTAw
MC8xMDAwID0gNS4wMDAwMDB9KSwgZHVyYXRpb24oezEwMDAvMTAwMCA9IDEuMDAwMDAwfSksIGZs
YWdzKDEpLCBnZW5lcmF0aW9uKDApfQorRVhQRUNURUQgKHNvdXJjZUJ1ZmZlci5idWZmZXJlZC5s
ZW5ndGggPT0gJzEnKSBPSworRVhQRUNURUQgKHNvdXJjZUJ1ZmZlci5idWZmZXJlZC5zdGFydCgw
KSA9PSAnMCcpIE9LCitFWFBFQ1RFRCAoc291cmNlQnVmZmVyLmJ1ZmZlcmVkLmVuZCgwKSA9PSAn
NicpIE9LCitFTkQgT0YgVEVTVAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS9tZWRp
YS1zb3VyY2UvbWVkaWEtc291cmNlLXJhbmdlLWVuZC1mcmFtZS1ub3QtcmVtb3ZlZC5odG1sIGIv
TGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1yYW5nZS1lbmQtZnJh
bWUtbm90LXJlbW92ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZTQ0OGRlNDBiZDJkYzgxYTdkMjhkMGYz
M2ViMDdlZjY3MGY1MDkyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVk
aWEtc291cmNlL21lZGlhLXNvdXJjZS1yYW5nZS1lbmQtZnJhbWUtbm90LXJlbW92ZWQuaHRtbApA
QCAtMCwwICsxLDcyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRp
dGxlPm1lZGlhLXNvdXJjZS1yYW5nZS1lbmRzPC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0ibW9j
ay1tZWRpYS1zb3VyY2UuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi92aWRlby10
ZXN0LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgIHZhciBzb3VyY2U7CisgICAgdmFy
IHNvdXJjZUJ1ZmZlcjsKKyAgICB2YXIgaW5pdFNlZ21lbnQ7CisgICAgdmFyIHNhbXBsZXM7Cisg
ICAgdmFyIGJ1ZmZlcmVkU2FtcGxlczsKKworICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAg
ICAgICBpbnRlcm5hbHMuaW5pdGlhbGl6ZU1vY2tNZWRpYVNvdXJjZSgpOworCisgICAgZnVuY3Rp
b24gcnVuVGVzdCgpCisgICAgeworICAgICAgICBmaW5kTWVkaWFFbGVtZW50KCk7CisKKyAgICAg
ICAgc291cmNlID0gbmV3IE1lZGlhU291cmNlKCk7CisgICAgICAgIHdhaXRGb3JFdmVudE9uKHNv
dXJjZSwgJ3NvdXJjZW9wZW4nLCBzb3VyY2VPcGVuKTsKKyAgICAgICAgcnVuKCd2aWRlby5zcmMg
PSBVUkwuY3JlYXRlT2JqZWN0VVJMKHNvdXJjZSknKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBz
b3VyY2VPcGVuKCkKKyAgICB7CisgICAgICAgIHJ1bignc291cmNlQnVmZmVyID0gc291cmNlLmFk
ZFNvdXJjZUJ1ZmZlcigidmlkZW8vbW9jazsgY29kZWNzPW1vY2siKScpOworICAgICAgICB3YWl0
Rm9yRXZlbnRPbihzb3VyY2VCdWZmZXIsICd1cGRhdGVlbmQnLCBsb2FkU2FtcGxlczEsIGZhbHNl
LCB0cnVlKTsKKyAgICAgICAgaW5pdFNlZ21lbnQgPSBtYWtlQUluaXQoNiwgW21ha2VBVHJhY2so
MSwgJ21vY2snLCBUUkFDS19LSU5ELlZJREVPKV0pOworICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZl
ci5hcHBlbmRCdWZmZXIoaW5pdFNlZ21lbnQpJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gbG9h
ZFNhbXBsZXMxKCkKKyAgICB7CisgICAgICAgIHNhbXBsZXMgPSBjb25jYXRlbmF0ZVNhbXBsZXMo
WworICAgICAgICAgICAgbWFrZUFTYW1wbGUoMywgMywgMSwgMSwgU0FNUExFX0ZMQUcuU1lOQywg
MCksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSg0LCA0LCAxLCAxLCBTQU1QTEVfRkxBRy5TWU5D
LCAwKSwKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDUsIDUsIDEsIDEsIFNBTVBMRV9GTEFHLlNZ
TkMsIDApLAorICAgICAgICBdKTsKKyAgICAgICAgd2FpdEZvckV2ZW50T24oc291cmNlQnVmZmVy
LCAndXBkYXRlZW5kJywgbG9hZFNhbXBsZXMyLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHJ1bign
c291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKScpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGxvYWRTYW1wbGVzMigpCisgICAgeworICAgICAgICBzYW1wbGVzID0gY29uY2F0ZW5hdGVT
YW1wbGVzKFsKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDAsIDAsIDEsIDEsIFNBTVBMRV9GTEFH
LlNZTkMsIDApLAorICAgICAgICAgICAgbWFrZUFTYW1wbGUoMSwgMSwgMSwgMSwgU0FNUExFX0ZM
QUcuU1lOQywgMCksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSgyLCAyLCAxLCAxLCBTQU1QTEVf
RkxBRy5TWU5DLCAwKSwKKyAgICAgICAgXSk7CisgICAgICAgIHdhaXRGb3JFdmVudE9uKHNvdXJj
ZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcsIHNhbXBsZXNBZGRlZCwgZmFsc2UsIHRydWUpOworICAgICAg
ICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxlcyknKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBzYW1wbGVzQWRkZWQoKQorICAgIHsKKyAgICAgICAgYnVmZmVyZWRTYW1wbGVz
ID0gaW50ZXJuYWxzLmJ1ZmZlcmVkU2FtcGxlc0ZvclRyYWNrSUQoc291cmNlQnVmZmVyLCAxKTsK
KyAgICAgICAgdGVzdEV4cGVjdGVkKCJidWZmZXJlZFNhbXBsZXMubGVuZ3RoIiwgNik7CisgICAg
ICAgIGJ1ZmZlcmVkU2FtcGxlcy5mb3JFYWNoKGNvbnNvbGVXcml0ZSk7CisKKyAgICAgICAgdGVz
dEV4cGVjdGVkKCJzb3VyY2VCdWZmZXIuYnVmZmVyZWQubGVuZ3RoIiwgMSk7CisgICAgICAgIHRl
c3RFeHBlY3RlZCgic291cmNlQnVmZmVyLmJ1ZmZlcmVkLnN0YXJ0KDApIiwgMCk7CisgICAgICAg
IHRlc3RFeHBlY3RlZCgic291cmNlQnVmZmVyLmJ1ZmZlcmVkLmVuZCgwKSIsIDYpOworCisgICAg
ICAgIGVuZFRlc3QoKTsKKyAgICB9CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxv
YWQ9InJ1blRlc3QoKSI+CisgICAgPHZpZGVvPjwvdmlkZW8+Cis8L2JvZHk+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLXJhbmdlLXN0YXJ0
LWZyYW1lLXJlcGxhY2VkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNv
dXJjZS9tZWRpYS1zb3VyY2UtcmFuZ2Utc3RhcnQtZnJhbWUtcmVwbGFjZWQtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjY1MzA4YWQ0Mjc2NTA3NzFhMjViOWMzMDNlYzUwYjMxZmVhY2NkNzIKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291
cmNlLXJhbmdlLXN0YXJ0LWZyYW1lLXJlcGxhY2VkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3
IEBACisKK1JVTih2aWRlby5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHNvdXJjZSkpCitFVkVO
VChzb3VyY2VvcGVuKQorUlVOKHNvdXJjZUJ1ZmZlciA9IHNvdXJjZS5hZGRTb3VyY2VCdWZmZXIo
InZpZGVvL21vY2s7IGNvZGVjcz1tb2NrIikpCitSVU4oc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZl
cihpbml0U2VnbWVudCkpCitFVkVOVCh1cGRhdGVlbmQpCitSVU4oc291cmNlQnVmZmVyLmFwcGVu
ZEJ1ZmZlcihzYW1wbGVzKSkKK0VWRU5UKHVwZGF0ZWVuZCkKK1JVTihzb3VyY2VCdWZmZXIuYXBw
ZW5kQnVmZmVyKHNhbXBsZXMpKQorRVZFTlQodXBkYXRlZW5kKQore1BUUyh7MC8xMDAwID0gMC4w
MDAwMDB9KSwgRFRTKHswLzEwMDAgPSAwLjAwMDAwMH0pLCBkdXJhdGlvbih7MTAwMC8xMDAwID0g
MS4wMDAwMDB9KSwgZmxhZ3MoMSksIGdlbmVyYXRpb24oMCl9Cit7UFRTKHsxMDAwLzEwMDAgPSAx
LjAwMDAwMH0pLCBEVFMoezEwMDAvMTAwMCA9IDEuMDAwMDAwfSksIGR1cmF0aW9uKHsyMDAwLzEw
MDAgPSAyLjAwMDAwMH0pLCBmbGFncygxKSwgZ2VuZXJhdGlvbigwKX0KK0VYUEVDVEVEIChzb3Vy
Y2VCdWZmZXIuYnVmZmVyZWQubGVuZ3RoID09ICcxJykgT0sKK0VYUEVDVEVEIChzb3VyY2VCdWZm
ZXIuYnVmZmVyZWQuc3RhcnQoMCkgPT0gJzAnKSBPSworRVhQRUNURUQgKHNvdXJjZUJ1ZmZlci5i
dWZmZXJlZC5lbmQoMCkgPT0gJzMnKSBPSworRU5EIE9GIFRFU1QKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1yYW5nZS1zdGFydC1mcmFt
ZS1yZXBsYWNlZC5odG1sIGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNv
dXJjZS1yYW5nZS1zdGFydC1mcmFtZS1yZXBsYWNlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhiYmI3M2Mz
YjBiMjc2OGM0YjZhMzU4N2RhZTk5NTVlYjYxODUzNjQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLXJhbmdlLXN0YXJ0LWZyYW1l
LXJlcGxhY2VkLmh0bWwKQEAgLTAsMCArMSw2OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorICAgIDx0aXRsZT5tZWRpYS1zb3VyY2UtcmFuZ2Utc3RhcnQtZnJhbWUtcmVwbGFj
ZWQ8L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSJtb2NrLW1lZGlhLXNvdXJjZS5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL3ZpZGVvLXRlc3QuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQ+CisgICAgdmFyIHNvdXJjZTsKKyAgICB2YXIgc291cmNlQnVmZmVyOworICAgIHZhciBp
bml0U2VnbWVudDsKKyAgICB2YXIgc2FtcGxlczsKKyAgICB2YXIgYnVmZmVyZWRTYW1wbGVzOwor
CisgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgIGludGVybmFscy5pbml0aWFsaXpl
TW9ja01lZGlhU291cmNlKCk7CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkKKyAgICB7CisgICAg
ICAgIGZpbmRNZWRpYUVsZW1lbnQoKTsKKworICAgICAgICBzb3VyY2UgPSBuZXcgTWVkaWFTb3Vy
Y2UoKTsKKyAgICAgICAgd2FpdEZvckV2ZW50T24oc291cmNlLCAnc291cmNlb3BlbicsIHNvdXJj
ZU9wZW4pOworICAgICAgICBydW4oJ3ZpZGVvLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoc291
cmNlKScpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNvdXJjZU9wZW4oKQorICAgIHsKKyAgICAg
ICAgcnVuKCdzb3VyY2VCdWZmZXIgPSBzb3VyY2UuYWRkU291cmNlQnVmZmVyKCJ2aWRlby9tb2Nr
OyBjb2RlY3M9bW9jayIpJyk7CisgICAgICAgIHdhaXRGb3JFdmVudE9uKHNvdXJjZUJ1ZmZlciwg
J3VwZGF0ZWVuZCcsIGxvYWRTYW1wbGVzMSwgZmFsc2UsIHRydWUpOworICAgICAgICBpbml0U2Vn
bWVudCA9IG1ha2VBSW5pdCgzLCBbbWFrZUFUcmFjaygxLCAnbW9jaycsIFRSQUNLX0tJTkQuVklE
RU8pXSk7CisgICAgICAgIHJ1bignc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihpbml0U2VnbWVu
dCknKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBsb2FkU2FtcGxlczEoKQorICAgIHsKKyAgICAg
ICAgc2FtcGxlcyA9IGNvbmNhdGVuYXRlU2FtcGxlcyhbCisgICAgICAgICAgICBtYWtlQVNhbXBs
ZSgxLCAxLCAxLCAxLCBTQU1QTEVfRkxBRy5TWU5DLCAwKSwKKyAgICAgICAgXSk7CisgICAgICAg
IHdhaXRGb3JFdmVudE9uKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcsIGxvYWRTYW1wbGVzMiwg
ZmFsc2UsIHRydWUpOworICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2Ft
cGxlcyknKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBsb2FkU2FtcGxlczIoKQorICAgIHsKKyAg
ICAgICAgc2FtcGxlcyA9IGNvbmNhdGVuYXRlU2FtcGxlcyhbCisgICAgICAgICAgICAvLyBOZXcg
Q29kZWQgRnJhbWUgR3JvdXAgKERUUyB3ZW50IGJhY2t3YXJkcykKKyAgICAgICAgICAgIG1ha2VB
U2FtcGxlKDAsIDAsIDEsIDEsIFNBTVBMRV9GTEFHLlNZTkMsIDApLAorICAgICAgICAgICAgbWFr
ZUFTYW1wbGUoMSwgMSwgMiwgMSwgU0FNUExFX0ZMQUcuU1lOQywgMCksIC8vIGR1cmF0aW9uID0g
MgorICAgICAgICBdKTsKKyAgICAgICAgd2FpdEZvckV2ZW50T24oc291cmNlQnVmZmVyLCAndXBk
YXRlZW5kJywgc2FtcGxlc0FkZGVkLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHJ1bignc291cmNl
QnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKScpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNh
bXBsZXNBZGRlZCgpCisgICAgeworICAgICAgICBidWZmZXJlZFNhbXBsZXMgPSBpbnRlcm5hbHMu
YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJRChzb3VyY2VCdWZmZXIsIDEpOworICAgICAgICBidWZm
ZXJlZFNhbXBsZXMuZm9yRWFjaChjb25zb2xlV3JpdGUpOworCisgICAgICAgIHRlc3RFeHBlY3Rl
ZCgic291cmNlQnVmZmVyLmJ1ZmZlcmVkLmxlbmd0aCIsIDEpOworICAgICAgICB0ZXN0RXhwZWN0
ZWQoInNvdXJjZUJ1ZmZlci5idWZmZXJlZC5zdGFydCgwKSIsIDApOworICAgICAgICB0ZXN0RXhw
ZWN0ZWQoInNvdXJjZUJ1ZmZlci5idWZmZXJlZC5lbmQoMCkiLCAzKTsKKworICAgICAgICBlbmRU
ZXN0KCk7CisgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5U
ZXN0KCkiPgorICAgIDx2aWRlbz48L3ZpZGVvPgorPC9ib2R5Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>