<?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>201402</bug_id>
          
          <creation_ts>2019-09-02 09:27:54 -0700</creation_ts>
          <short_desc>REGRESSION (r249367): m_decodingPromises grows indefinitely until ImageLoader destruction</short_desc>
          <delta_ts>2019-09-09 15:52:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>WebKit Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=201243</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Regression</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>201243</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1567211</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-09-02 09:27:54 -0700</bug_when>
    <thetext>By code inspection, m_decodingPromises never shrinks, it can only get larger. There are two issues with this:

1. Memory footprint only gets larger.
2. There may be a correctness issues here: we may try to resolve or reject already resolved or rejected decoding promises.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567217</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-02 10:25:02 -0700</bug_when>
    <thetext>&lt;rdar://problem/54952907&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567677</commentid>
    <comment_count>2</comment_count>
      <attachid>377964</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-09-04 00:44:48 -0700</bug_when>
    <thetext>Created attachment 377964
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567766</commentid>
    <comment_count>3</comment_count>
      <attachid>377964</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-09-04 09:03:08 -0700</bug_when>
    <thetext>Comment on attachment 377964
Patch

Thank you for looking into this so quickly and writing a test! On a tangentially relate note there might be a better solution:

1. Making the reject*() resolve*() code private member functions since they only operate on class instance data.
2. .clear() is ever so slightly less efficient compared to WTFMove()ing the m_decodingPromises into a local since .clear() calls .shrink(0) and that function has quite a few branches and more inlined function calls to restore inline capacity, etc etc. And m_decodingPromises has no inline capacity. In comparison, there is less code emitted (less branches and less inlined function calls) needed to move a Vector (just a swap()) and construct an empty Vector.
3. The only use for pendingDecodePromisesCount() is for testing. Maybe adding a ForTesting() suffix to its name would make this clear to people that they should not use it for non-testing purposes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567767</commentid>
    <comment_count>4</comment_count>
      <attachid>377964</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-09-04 09:04:34 -0700</bug_when>
    <thetext>Comment on attachment 377964
Patch

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

&gt; LayoutTests/fast/images/decode-resolve-reject-no-leak.html:2
&gt; +&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;

Should this be js-test-pre.js?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567816</commentid>
    <comment_count>5</comment_count>
      <attachid>377997</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-09-04 12:00:22 -0700</bug_when>
    <thetext>Created attachment 377997
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567828</commentid>
    <comment_count>6</comment_count>
      <attachid>377997</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-09-04 12:41:44 -0700</bug_when>
    <thetext>Comment on attachment 377997
Patch

Thank you for updating the patch and adding non-static member functions. However the optimal solution would not have static member functions because :

1. There are no callers other than this class and this class passes instance data to them.
2. Compiler generates out-of-band function calls for the static and symbols are in the binary, which increase code size.


How will the static be used in the future? Could they be deferred until that future comes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567830</commentid>
    <comment_count>7</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-09-04 12:48:02 -0700</bug_when>
    <thetext>(In reply to Daniel Bates from comment #6)
&gt; Comment on attachment 377997 [details]
&gt; Patch
&gt; 
&gt; Thank you for updating the patch and adding non-static member functions.
&gt; However the optimal solution would not have static member functions because :
&gt; 
&gt; 1. There are no callers other than this class and this class passes instance
&gt; data to them.
&gt; 2. Compiler generates out-of-band function calls for the static and symbols
&gt; are in the binary, which increase code size.
&gt; 
&gt; 
&gt; How will the static be used in the future? Could they be deferred until that
&gt; future comes?

Never mind. I see why you added them to handle:

bitmapImage.decode([promises = WTFMove(m_decodingPromises)]()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567837</commentid>
    <comment_count>8</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-09-04 13:02:09 -0700</bug_when>
    <thetext>Sorry I didn&apos;t mean to mislead you about the static functions. It would have been beneficial to have an explanation in the ChangeLog on why the static functions were needed. I like your original patch more now after discovering this fact. The beta solution is:

1. Add a static, inline, non-member function to resolve promises that takes a rvalue reference Vector.
2. Add private member function (marked inline in .cpp; read: not marked inline in header) to resolve promise function that takes rvalue reference Vector and const char* and turns around and calls (1).
3. Add a private member function (marked Inline in .cpp) to **reject*** promises that takes a const char*.
4. A remark in the ChangeLog for (1) that explains that decoding is async and need to take care to move Vector in capture in case more promises become pending between time of capture and time decode completes.

A static, non-member functions to reject promises is not necessary and should be inlined into (3).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567839</commentid>
    <comment_count>9</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-09-04 13:04:54 -0700</bug_when>
    <thetext>(In reply to Daniel Bates from comment #8)
&gt; Sorry I didn&apos;t mean to mislead you about the static functions. It would have
&gt; been beneficial to have an explanation in the ChangeLog on why the static
&gt; functions were needed. I like your original patch more now after discovering
&gt; this fact. The beta solution is:
&gt; 

*best

&gt; 1. Add a static, inline, non-member function to resolve promises that takes
&gt; a rvalue reference Vector.
&gt; 2. Add private member function (marked inline in .cpp; read: not marked
&gt; inline in header) to resolve promise function that takes rvalue reference
&gt; Vector and const char* and turns around and calls (1).

^^^ Not correct, I meant:

Add private member function (marked inline in .cpp; read: not marked inline in header) to resolve promise function that takes const char* and turns around and calls (1).

(No need to take rvalue ref Vector)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568144</commentid>
    <comment_count>10</comment_count>
      <attachid>378089</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-09-05 09:42:26 -0700</bug_when>
    <thetext>Created attachment 378089
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568463</commentid>
    <comment_count>11</comment_count>
      <attachid>378089</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-09-06 02:48:37 -0700</bug_when>
    <thetext>Comment on attachment 378089
Patch

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

&gt; Source/WebCore/loader/ImageLoader.cpp:294
&gt; +    resolvePromises(WTFMove(m_decodingPromises));

It seems simpler to just inline resolvePromises here.
If you want to keep the move promises before iterating over, it can be written as:

ASSERT(!m_decodingPromises.isEmpty());
auto promises = WTFMove(m_decodingPromises);
for (auto&amp; promise : promises)
    promise-&gt;....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568499</commentid>
    <comment_count>12</comment_count>
      <attachid>378089</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-09-06 06:59:40 -0700</bug_when>
    <thetext>Comment on attachment 378089
Patch

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

Thanks for updating the patch. It doesn&apos;t quite match the description in comment 8 and comment 9, but it&apos;s really close..

&gt; Source/WebCore/loader/ImageLoader.cpp:278
&gt; +static inline void resolvePromises(Vector&lt;RefPtr&lt;DeferredPromise&gt;&gt; promises)

It is error prone and inefficient to take promises by value because:

1. Doing so performs a copy of the Vector, which is inefficient.
2. Since the Vector is of RefPtr copying means ref&apos;ing things not actually copying them, which is confusing.

It would be better to pass by rvalue reference.

&gt; Source/WebCore/loader/ImageLoader.cpp:285
&gt; +static inline void rejectPromises(Vector&lt;RefPtr&lt;DeferredPromise&gt;&gt; promises, const char* message)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568500</commentid>
    <comment_count>13</comment_count>
      <attachid>378089</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-09-06 07:02:35 -0700</bug_when>
    <thetext>Comment on attachment 378089
Patch

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

&gt;&gt; Source/WebCore/loader/ImageLoader.cpp:294
&gt;&gt; +    resolvePromises(WTFMove(m_decodingPromises));
&gt; 
&gt; It seems simpler to just inline resolvePromises here.
&gt; If you want to keep the move promises before iterating over, it can be written as:
&gt; 
&gt; ASSERT(!m_decodingPromises.isEmpty());
&gt; auto promises = WTFMove(m_decodingPromises);
&gt; for (auto&amp; promise : promises)
&gt;     promise-&gt;....

This is not possible because of line 451</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568501</commentid>
    <comment_count>14</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-09-06 07:07:35 -0700</bug_when>
    <thetext>&gt; 2. Since the Vector is of RefPtr copying means ref&apos;ing things not actually
&gt; copying them, which is confusing.

In that specific case, it is not inefficient since all callers are providing an r-value of the vector and not a const reference.
I agree though it is better to pass by rvalue reference, no caller is calling the functions by const reference.

&gt; It would be better to pass by rvalue reference.

Agreed.

&gt; &gt; ASSERT(!m_decodingPromises.isEmpty());
&gt; &gt; auto promises = WTFMove(m_decodingPromises);
&gt; &gt; for (auto&amp; promise : promises)
&gt; &gt;     promise-&gt;....
&gt; 
&gt; This is not possible because of line 451

True!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568502</commentid>
    <comment_count>15</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-09-06 07:13:53 -0700</bug_when>
    <thetext>r=me too!

Everything I wrote in comment 12 is optional.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568634</commentid>
    <comment_count>16</comment_count>
      <attachid>378217</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-09-06 12:28:49 -0700</bug_when>
    <thetext>Created attachment 378217
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568729</commentid>
    <comment_count>17</comment_count>
      <attachid>378217</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-06 15:15:57 -0700</bug_when>
    <thetext>Comment on attachment 378217
Patch

Clearing flags on attachment: 378217

Committed r249594: &lt;https://trac.webkit.org/changeset/249594&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568730</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-06 15:16:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377964</attachid>
            <date>2019-09-04 00:44:48 -0700</date>
            <delta_ts>2019-09-04 12:00:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201402-20190904004447.patch</filename>
            <type>text/plain</type>
            <size>13307</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5NDU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDRiZjhkNDg1YzVlZTU5
YmFhM2E1NGE3YzQ0NTBiNTFhODU2NzlhNi4uMTEyOTQ5MjIyOTMxMmE0ODk4ZjUyMjJiMDEyY2Ex
ZjY4YTI5ZWI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE5LTA5LTA0ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVT
U0lPTiAocjI0OTM2Nyk6IG1fZGVjb2RpbmdQcm9taXNlcyBncm93cyBpbmRlZmluaXRlbHkgdW50
aWwgSW1hZ2VMb2FkZXIgZGVzdHJ1Y3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwMTQwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFBhc3MgdGhlIHByb21pc2VzIHRvIHJlc29sdmVEZWNvZGVQcm9t
aXNlcygpIGFuZCByZWplY3REZWNvZGVQcm9taXNlcygpCisgICAgICAgIGFzIGFuIGx2YWx1ZSBy
ZWZlcmVuY2UgYW5kIGNsZWFyIGl0IG9uY2UgYWxsIHRoZSBwcm9taXNlcyBhcmUgcmVzb2x2ZWQK
KyAgICAgICAgb3IgcmVqZWN0ZWQuCisKKyAgICAgICAgQWRkIGFuIGludGVybmFsIEFQSSB0byBy
ZXR1cm4gdGhlIGNvdW50IG9mIHRoZSBwZW5kaW5nIHByb21pc2VzIG9mIGFuCisgICAgICAgIEhU
TUxJbWFnZUVsZW1lbnQuIFRoaXMgaW50ZXJuYWwgQVBJIHdpbGwgYmUgdXNlZCBpbiB0aGUgYXR0
YWNoZWQgdGVzdC4KKworICAgICAgICBUZXN0OiBmYXN0L2ltYWdlcy9kZWNvZGUtcmVzb2x2ZS1y
ZWplY3Qtbm8tbGVhay5odG1sCisKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnBlbmRpbmdEZWNvZGVQcm9taXNl
c0NvdW50IGNvbnN0KToKKyAgICAgICAgKiBsb2FkZXIvSW1hZ2VMb2FkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cmVzb2x2ZURlY29kZVByb21pc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnJl
amVjdERlY29kZVByb21pc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTG9hZGVyOjpub3Rp
ZnlGaW5pc2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxvYWRlcjo6ZGVjb2RlKToKKyAg
ICAgICAgKiBsb2FkZXIvSW1hZ2VMb2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTG9h
ZGVyOjpwZW5kaW5nRGVjb2RlUHJvbWlzZXNDb3VudCBjb25zdCk6CisgICAgICAgICogdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjppbWFnZVBlbmRp
bmdEZWNvZGVQcm9taXNlc0NvdW50KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKwogMjAxOS0wOS0wMyAgV2Vuc29uIEhz
aWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbbWFjQ2F0YWx5c3RdIFVu
YWJsZSB0byB1cGxvYWQgbm9uLWltYWdlIGZpbGVzIHVzaW5nIGRyYWcgYW5kIGRyb3AKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgKaW5kZXggYTU5Y2ZiMjFhZWZlZDY5YzZmMTFj
NzY0ZTBkN2YwYzE2ZjU3MDA4MC4uMjI5ZTFhNmFmOGRmMDJmOTNmYmY5MGMyMjE2NWY3YjNjZjhm
YWEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgKQEAgLTEwNCw2ICsx
MDQsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkg
Y29uc3QgeyByZXR1cm4gbV9pbWFnZUxvYWRlci5oYXNQZW5kaW5nQWN0aXZpdHkoKTsgfQorICAg
IHNpemVfdCBwZW5kaW5nRGVjb2RlUHJvbWlzZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW1h
Z2VMb2FkZXIucGVuZGluZ0RlY29kZVByb21pc2VzQ291bnQoKTsgfQogCiAgICAgYm9vbCBjYW5D
b250YWluUmFuZ2VFbmRQb2ludCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCmluZGV4IDZmZDNkZDFjYTY3ZDkxM2M0
N2M3YTcwYzJkOWM3NDlmOWQyODI0MjguLjRiZGFhZjZhMGQ0NzZjMDA5Nzc0ODNjMmMxZjc0NzVj
MjRhNTFlYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcApAQCAtMjc1LDE4
ICsyNzUsMjAgQEAgdm9pZCBJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnRJZ25vcmluZ1By
ZXZpb3VzRXJyb3IoKQogICAgIHVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgdm9pZCByZXNvbHZlRGVjb2RlUHJvbWlzZXMoVmVjdG9yPFJlZlB0cjxEZWZlcnJlZFByb21p
c2U+PiYmIHByb21pc2VzKQorc3RhdGljIGlubGluZSB2b2lkIHJlc29sdmVEZWNvZGVQcm9taXNl
cyhWZWN0b3I8UmVmUHRyPERlZmVycmVkUHJvbWlzZT4+JiBwcm9taXNlcykKIHsKICAgICBBU1NF
UlQoIXByb21pc2VzLmlzRW1wdHkoKSk7CiAgICAgZm9yIChhdXRvJiBwcm9taXNlIDogcHJvbWlz
ZXMpCiAgICAgICAgIHByb21pc2UtPnJlc29sdmUoKTsKKyAgICBwcm9taXNlcy5jbGVhcigpOwog
fQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVqZWN0RGVjb2RlUHJvbWlzZXMoVmVjdG9yPFJlZlB0
cjxEZWZlcnJlZFByb21pc2U+PiYmIHByb21pc2VzLCBjb25zdCBjaGFyKiBtZXNzYWdlKQorc3Rh
dGljIGlubGluZSB2b2lkIHJlamVjdERlY29kZVByb21pc2VzKFZlY3RvcjxSZWZQdHI8RGVmZXJy
ZWRQcm9taXNlPj4mIHByb21pc2VzLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewogICAgIEFTU0VS
VCghcHJvbWlzZXMuaXNFbXB0eSgpKTsKICAgICBmb3IgKGF1dG8mIHByb21pc2UgOiBwcm9taXNl
cykKICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KEV4Y2VwdGlvbiB7IEVuY29kaW5nRXJyb3IsIG1l
c3NhZ2UgfSk7CisgICAgcHJvbWlzZXMuY2xlYXIoKTsKIH0KIAogdm9pZCBJbWFnZUxvYWRlcjo6
bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQpAQCAtMzEzLDcgKzMxNSw3
IEBAIHZvaWQgSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiByZXNv
dXJjZSkKICAgICAgICAgZWxlbWVudCgpLmRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVz
c2FnZVNvdXJjZTo6U2VjdXJpdHksIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIG1lc3NhZ2UpOwogCiAg
ICAgICAgIGlmIChoYXNQZW5kaW5nRGVjb2RlUHJvbWlzZXMoKSkKLSAgICAgICAgICAgIHJlamVj
dERlY29kZVByb21pc2VzKFdURk1vdmUobV9kZWNvZGluZ1Byb21pc2VzKSwgIkFjY2VzcyBjb250
cm9sIGVycm9yLiIpOworICAgICAgICAgICAgcmVqZWN0RGVjb2RlUHJvbWlzZXMobV9kZWNvZGlu
Z1Byb21pc2VzLCAiQWNjZXNzIGNvbnRyb2wgZXJyb3IuIik7CiAgICAgICAgIAogICAgICAgICBB
U1NFUlQoIW1faGFzUGVuZGluZ0xvYWRFdmVudCk7CiAKQEAgLTMyNSw3ICszMjcsNyBAQCB2b2lk
IEltYWdlTG9hZGVyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCiAK
ICAgICBpZiAobV9pbWFnZS0+d2FzQ2FuY2VsZWQoKSkgewogICAgICAgICBpZiAoaGFzUGVuZGlu
Z0RlY29kZVByb21pc2VzKCkpCi0gICAgICAgICAgICByZWplY3REZWNvZGVQcm9taXNlcyhXVEZN
b3ZlKG1fZGVjb2RpbmdQcm9taXNlcyksICJMb2FkaW5nIHdhcyBjYW5jZWxlZC4iKTsKKyAgICAg
ICAgICAgIHJlamVjdERlY29kZVByb21pc2VzKG1fZGVjb2RpbmdQcm9taXNlcywgIkxvYWRpbmcg
d2FzIGNhbmNlbGVkLiIpOwogICAgICAgICBtX2hhc1BlbmRpbmdMb2FkRXZlbnQgPSBmYWxzZTsK
ICAgICAgICAgLy8gT25seSBjb25zaWRlciB1cGRhdGluZyB0aGUgcHJvdGVjdGlvbiByZWYtY291
bnQgb2YgdGhlIEVsZW1lbnQgaW1tZWRpYXRlbHkgYmVmb3JlIHJldHVybmluZwogICAgICAgICAv
LyBmcm9tIHRoaXMgZnVuY3Rpb24gYXMgZG9pbmcgc28gbWlnaHQgcmVzdWx0IGluIHRoZSBkZXN0
cnVjdGlvbiBvZiB0aGlzIEltYWdlTG9hZGVyLgpAQCAtNDAyLDEzICs0MDQsMTMgQEAgdm9pZCBJ
bWFnZUxvYWRlcjo6ZGVjb2RlKFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKICAgICBt
X2RlY29kaW5nUHJvbWlzZXMuYXBwZW5kKFdURk1vdmUocHJvbWlzZSkpOwogCiAgICAgaWYgKCFl
bGVtZW50KCkuZG9jdW1lbnQoKS5kb21XaW5kb3coKSkgewotICAgICAgICByZWplY3REZWNvZGVQ
cm9taXNlcyhXVEZNb3ZlKG1fZGVjb2RpbmdQcm9taXNlcyksICJJbmFjdGl2ZSBkb2N1bWVudC4i
KTsKKyAgICAgICAgcmVqZWN0RGVjb2RlUHJvbWlzZXMobV9kZWNvZGluZ1Byb21pc2VzLCAiSW5h
Y3RpdmUgZG9jdW1lbnQuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBBdG9tU3Ry
aW5nIGF0dHIgPSBlbGVtZW50KCkuaW1hZ2VTb3VyY2VVUkwoKTsKICAgICBpZiAoc3RyaXBMZWFk
aW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGF0dHIpLmlzRW1wdHkoKSkgewotICAgICAgICByZWpl
Y3REZWNvZGVQcm9taXNlcyhXVEZNb3ZlKG1fZGVjb2RpbmdQcm9taXNlcyksICJNaXNzaW5nIHNv
dXJjZSBVUkwuIik7CisgICAgICAgIHJlamVjdERlY29kZVByb21pc2VzKG1fZGVjb2RpbmdQcm9t
aXNlcywgIk1pc3Npbmcgc291cmNlIFVSTC4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtNDIxLDI0ICs0MjMsMjQgQEAgdm9pZCBJbWFnZUxvYWRlcjo6ZGVjb2RlKCkKICAgICBBU1NF
UlQoaGFzUGVuZGluZ0RlY29kZVByb21pc2VzKCkpOwogICAgIAogICAgIGlmICghZWxlbWVudCgp
LmRvY3VtZW50KCkuZG9tV2luZG93KCkpIHsKLSAgICAgICAgcmVqZWN0RGVjb2RlUHJvbWlzZXMo
V1RGTW92ZShtX2RlY29kaW5nUHJvbWlzZXMpLCAiSW5hY3RpdmUgZG9jdW1lbnQuIik7CisgICAg
ICAgIHJlamVjdERlY29kZVByb21pc2VzKG1fZGVjb2RpbmdQcm9taXNlcywgIkluYWN0aXZlIGRv
Y3VtZW50LiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCFtX2ltYWdlIHx8
ICFtX2ltYWdlLT5pbWFnZSgpIHx8IG1faW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkgewotICAgICAg
ICByZWplY3REZWNvZGVQcm9taXNlcyhXVEZNb3ZlKG1fZGVjb2RpbmdQcm9taXNlcyksICJMb2Fk
aW5nIGVycm9yLiIpOworICAgICAgICByZWplY3REZWNvZGVQcm9taXNlcyhtX2RlY29kaW5nUHJv
bWlzZXMsICJMb2FkaW5nIGVycm9yLiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
SW1hZ2UqIGltYWdlID0gbV9pbWFnZS0+aW1hZ2UoKTsKICAgICBpZiAoIWlzPEJpdG1hcEltYWdl
PihpbWFnZSkpIHsKLSAgICAgICAgcmVzb2x2ZURlY29kZVByb21pc2VzKFdURk1vdmUobV9kZWNv
ZGluZ1Byb21pc2VzKSk7CisgICAgICAgIHJlc29sdmVEZWNvZGVQcm9taXNlcyhtX2RlY29kaW5n
UHJvbWlzZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYXV0byYgYml0bWFwSW1h
Z2UgPSBkb3duY2FzdDxCaXRtYXBJbWFnZT4oKmltYWdlKTsKICAgICBiaXRtYXBJbWFnZS5kZWNv
ZGUoW3Byb21pc2VzID0gV1RGTW92ZShtX2RlY29kaW5nUHJvbWlzZXMpXSgpIG11dGFibGUgewot
ICAgICAgICByZXNvbHZlRGVjb2RlUHJvbWlzZXMoV1RGTW92ZShwcm9taXNlcykpOworICAgICAg
ICByZXNvbHZlRGVjb2RlUHJvbWlzZXMocHJvbWlzZXMpOwogICAgIH0pOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9JbWFnZUxvYWRlci5oCmluZGV4IDMzYjYxZmJlZmMzMzg3YTE4MDgwNDM3OTYwM2Q1
NWM5MWRlZGNkYjIuLmE3ZGM0ODllZjA0YjE2ZWUzNDBhYjc2MzY0ZDYwNGNmYjU1OTRjN2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5oCkBAIC02MSw2ICs2MSw3IEBAIHB1YmxpYzoK
ICAgICBDYWNoZWRJbWFnZSogaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9
CiAgICAgdm9pZCBjbGVhckltYWdlKCk7IC8vIENhbmNlbHMgcGVuZGluZyBiZWZvcmVsb2FkIGFu
ZCBsb2FkIGV2ZW50cywgYW5kIGRvZXNuJ3QgZGlzcGF0Y2ggbmV3IG9uZXMuCiAgICAgCisgICAg
c2l6ZV90IHBlbmRpbmdEZWNvZGVQcm9taXNlc0NvdW50KCkgY29uc3QgeyByZXR1cm4gbV9kZWNv
ZGluZ1Byb21pc2VzLnNpemUoKTsgfQogICAgIHZvaWQgZGVjb2RlKFJlZjxEZWZlcnJlZFByb21p
c2U+JiYpOwogCiAgICAgdm9pZCBzZXRMb2FkTWFudWFsbHkoYm9vbCBsb2FkTWFudWFsbHkpIHsg
bV9sb2FkTWFudWFsbHkgPSBsb2FkTWFudWFsbHk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAppbmRleCBiNDcxZGU1YjkwNGYxYmNjOTFkMjcxMGUyMjhmOTU4ZWQyNjEwYTlkLi45
Y2JlNjZmM2Q2NjA2ODA3ZjIwZmE5OGQ4ZDUzMWE1OWM2ZjRhODVjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCkBAIC04NjYsNiArODY2LDExIEBAIGJvb2wgSW50ZXJuYWxzOjpp
c0ltYWdlQW5pbWF0aW5nKEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCiAgICAgcmV0dXJuIGlt
YWdlICYmIChpbWFnZS0+aXNBbmltYXRpbmcoKSB8fCBpbWFnZS0+YW5pbWF0aW9uUGVuZGluZygp
KTsKIH0KIAordW5zaWduZWQgSW50ZXJuYWxzOjppbWFnZVBlbmRpbmdEZWNvZGVQcm9taXNlc0Nv
dW50KEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgcmV0dXJuIGVsZW1lbnQucGVu
ZGluZ0RlY29kZVByb21pc2VzQ291bnQoKTsKK30KKwogdm9pZCBJbnRlcm5hbHM6OnNldENsZWFy
RGVjb2RlckFmdGVyQXN5bmNGcmFtZVJlcXVlc3RGb3JUZXN0aW5nKEhUTUxJbWFnZUVsZW1lbnQm
IGVsZW1lbnQsIGJvb2wgZW5hYmxlZCkKIHsKICAgICBpZiAoYXV0byogYml0bWFwSW1hZ2UgPSBi
aXRtYXBJbWFnZUZyb21JbWFnZUVsZW1lbnQoZWxlbWVudCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuaAppbmRleCAyZDc4ZDhhMzhhN2I2MmRjYmU4Nzg2NzJlN2U1ZmY2YjNkZTE2YmM5Li42
NGRiMjZiN2VlODZjYWVmYjA1OTI0ODkwODcyMTExNGY3NDY3NjE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmgKQEAgLTE1NCw2ICsxNTQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJ
bWFnZUZyYW1lRGVjb2RpbmdEdXJhdGlvbihIVE1MSW1hZ2VFbGVtZW50JiwgZmxvYXQgZHVyYXRp
b24pOwogICAgIHZvaWQgcmVzZXRJbWFnZUFuaW1hdGlvbihIVE1MSW1hZ2VFbGVtZW50Jik7CiAg
ICAgYm9vbCBpc0ltYWdlQW5pbWF0aW5nKEhUTUxJbWFnZUVsZW1lbnQmKTsKKyAgICB1bnNpZ25l
ZCBpbWFnZVBlbmRpbmdEZWNvZGVQcm9taXNlc0NvdW50KEhUTUxJbWFnZUVsZW1lbnQmKTsKICAg
ICB2b2lkIHNldENsZWFyRGVjb2RlckFmdGVyQXN5bmNGcmFtZVJlcXVlc3RGb3JUZXN0aW5nKEhU
TUxJbWFnZUVsZW1lbnQmLCBib29sIGVuYWJsZWQpOwogICAgIHVuc2lnbmVkIGltYWdlRGVjb2Rl
Q291bnQoSFRNTEltYWdlRWxlbWVudCYpOwogICAgIHVuc2lnbmVkIHBkZkRvY3VtZW50Q2FjaGlu
Z0NvdW50KEhUTUxJbWFnZUVsZW1lbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlk
bAppbmRleCAzMWVmMWRlY2VmY2QwMTliMWEwYjFhYzkyNjMyMDVjNTQ2ODk5ZmUyLi5iNzVhOTE4
MzNlMjViNDIzMDA3YjEyMWYxOWFjMGMxYzE2YzYyNzQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuaWRsCkBAIC0zNjksNiArMzY5LDcgQEAgZW51bSBDb21wb3NpdGluZ1BvbGljeSB7
CiAgICAgdm9pZCBzZXRJbWFnZUZyYW1lRGVjb2RpbmdEdXJhdGlvbihIVE1MSW1hZ2VFbGVtZW50
IGVsZW1lbnQsIHVucmVzdHJpY3RlZCBmbG9hdCBkdXJhdGlvbik7CiAgICAgdm9pZCByZXNldElt
YWdlQW5pbWF0aW9uKEhUTUxJbWFnZUVsZW1lbnQgZWxlbWVudCk7CiAgICAgYm9vbGVhbiBpc0lt
YWdlQW5pbWF0aW5nKEhUTUxJbWFnZUVsZW1lbnQgZWxlbWVudCk7CisgICAgdW5zaWduZWQgbG9u
ZyBpbWFnZVBlbmRpbmdEZWNvZGVQcm9taXNlc0NvdW50KEhUTUxJbWFnZUVsZW1lbnQgZWxlbWVu
dCk7CiAgICAgdm9pZCBzZXRDbGVhckRlY29kZXJBZnRlckFzeW5jRnJhbWVSZXF1ZXN0Rm9yVGVz
dGluZyhIVE1MSW1hZ2VFbGVtZW50IGVsZW1lbnQsIGJvb2xlYW4gZW5hYmxlZCk7CiAgICAgdW5z
aWduZWQgbG9uZyBpbWFnZURlY29kZUNvdW50KEhUTUxJbWFnZUVsZW1lbnQgZWxlbWVudCk7CiAg
ICAgdW5zaWduZWQgbG9uZyBwZGZEb2N1bWVudENhY2hpbmdDb3VudChIVE1MSW1hZ2VFbGVtZW50
IGVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IGNlYWNmMmIyZWQzMWVlYjg4ZDc2MWRhMDhmMjVlODQzZWZhZThh
NGUuLjg5ZDNjZjVlZTNmYTcwNzExMWZlZTcwMjc3OGIzNjkxZGUyNGNjMTUgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAxOS0wOS0wNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgorCisgICAgICAgIFJFR1JFU1NJT04gKHIyNDkzNjcpOiBtX2RlY29kaW5nUHJv
bWlzZXMgZ3Jvd3MgaW5kZWZpbml0ZWx5IHVudGlsIEltYWdlTG9hZGVyIGRlc3RydWN0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE0MDIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvaW1h
Z2VzL2RlY29kZS1yZXNvbHZlLXJlamVjdC1uby1sZWFrLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9pbWFnZXMvZGVjb2RlLXJlc29sdmUtcmVqZWN0LW5vLWxlYWsuaHRtbDog
QWRkZWQuCisKIDIwMTktMDktMDMgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxl
LmNvbT4KIAogICAgICAgICBbV0hMU0xdIEltcGxlbWVudCBTYW1wbGVMZXZlbCgpLCBTYW1wbGVC
aWFzKCksIGFuZCBTYW1wbGVHcmFkKCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaW1h
Z2VzL2RlY29kZS1yZXNvbHZlLXJlamVjdC1uby1sZWFrLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3QvaW1hZ2VzL2RlY29kZS1yZXNvbHZlLXJlamVjdC1uby1sZWFrLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xYjJlZjllNWZkMWJjMDQwNGYyM2EyOTkwOGRmMjUwMWIwNzBiMWIyCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvZGVjb2RlLXJlc29sdmUt
cmVqZWN0LW5vLWxlYWstZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTMgQEAKK1Rlc3QgSFRNTElt
YWdlRWxlbWVudDo6ZGVjb2RlKCkgZG9lcyBub3QgbGVhayB0aGUgcGVuZGluZyBwcm9taXNlcyBh
ZnRlciByZXNvbHZpbmcgb3IgcmVqZWN0aW5nIHRoZW0uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitEZWNvZGluZyBhIHZhbGlkIGltYWdlIC0gcHJvbWlzZXMgd2lsbCBiZSByZXNv
bHZlZDoKK1BBU1MgaW50ZXJuYWxzLmltYWdlUGVuZGluZ0RlY29kZVByb21pc2VzQ291bnQoaW1h
Z2UpIGlzIDAKK0RlY29kaW5nIGEgYnJva2VuIGltYWdlIC0gcHJvbWlzZXMgd2lsbCBiZSByZWpl
Y3RlZDoKK1BBU1MgaW50ZXJuYWxzLmltYWdlUGVuZGluZ0RlY29kZVByb21pc2VzQ291bnQoaW1h
Z2UpIGlzIDAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9kZWNvZGUtcmVzb2x2ZS1y
ZWplY3Qtbm8tbGVhay5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvZGVjb2RlLXJlc29s
dmUtcmVqZWN0LW5vLWxlYWsuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZjI3ODE2ZjM2NTFiZDIyYmMxMGM3
NjY2MTY3ZTgxYThkZDM0N2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9p
bWFnZXMvZGVjb2RlLXJlc29sdmUtcmVqZWN0LW5vLWxlYWsuaHRtbApAQCAtMCwwICsxLDYyIEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC5q
cyI+PC9zY3JpcHQ+Cis8Ym9keT4KKyAgICA8c2NyaXB0PgorICAgICAgICB2YXIgaW1hZ2UgPSBu
ZXcgSW1hZ2U7CisKKyAgICAgICAgZGVzY3JpcHRpb24oJ1Rlc3QgSFRNTEltYWdlRWxlbWVudDo6
ZGVjb2RlKCkgZG9lcyBub3QgbGVhayB0aGUgcGVuZGluZyBwcm9taXNlcyBhZnRlciByZXNvbHZp
bmcgb3IgcmVqZWN0aW5nIHRoZW0uJyk7CisgICAgICAgIGpzVGVzdElzQXN5bmMgPSB0cnVlOwor
CisgICAgICAgIGZ1bmN0aW9uIGRlY29kZU11bHRpcGxlKGltYWdlLCBtdWx0aXBsZUNvdW50KSB7
CisgICAgICAgICAgICB2YXIgcHJvbWlzZXMgPSBbXTsKKyAgICAgICAgICAgIGZvciAoaW5kZXgg
PSAwOyBpbmRleCA8IG11bHRpcGxlQ291bnQ7ICsraW5kZXgpCisgICAgICAgICAgICAgICAgcHJv
bWlzZXMucHVzaChpbWFnZS5kZWNvZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gcHJvbWlzZXM7
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiByZXNvbHZlU2luZ2xlKGltYWdlLCBzaW5n
bGVDb3VudCkgeworICAgICAgICAgICAgaWYgKCFzaW5nbGVDb3VudCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAgICAgICByZXR1cm4gaW1hZ2UuZGVj
b2RlKCkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVTaW5nbGUo
aW1hZ2UsIHNpbmdsZUNvdW50IC0gMSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bmN0aW9uIHJlamVjdFNpbmdsZShpbWFnZSwgc2luZ2xlQ291bnQpIHsKKyAgICAg
ICAgICAgIGlmICghc2luZ2xlQ291bnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2Uu
cmVqZWN0KCk7CisgICAgICAgICAgICByZXR1cm4gaW1hZ2UuZGVjb2RlKCkuY2F0Y2goKCkgPT4g
eworICAgICAgICAgICAgICAgIHJldHVybiByZWplY3RTaW5nbGUoaW1hZ2UsIHNpbmdsZUNvdW50
IC0gMSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGRl
Y29kZVZhbGlkSW1hZ2UoaW1hZ2UsIG11bHRpcGxlQ291bnQsIHNpbmdsZUNvdW50KSB7CisgICAg
ICAgICAgICBkZWJ1ZygiRGVjb2RpbmcgYSB2YWxpZCBpbWFnZSAtIHByb21pc2VzIHdpbGwgYmUg
cmVzb2x2ZWQ6Iik7CisgICAgICAgICAgICBpbWFnZS5zcmMgPSAicmVzb3VyY2VzL2dyZWVuLTEw
MHgxMDAuc3ZnIjsKKyAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChkZWNvZGVNdWx0aXBs
ZShpbWFnZSwgbXVsdGlwbGVDb3VudCkpLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIHJl
dHVybiByZXNvbHZlU2luZ2xlKGltYWdlLCBzaW5nbGVDb3VudCk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGRlY29kZUJyb2tlbkltYWdlKGltYWdlLCBt
dWx0aXBsZUNvdW50LCBzaW5nbGVDb3VudCkgeworICAgICAgICAgICAgZGVidWcoIkRlY29kaW5n
IGEgYnJva2VuIGltYWdlIC0gcHJvbWlzZXMgd2lsbCBiZSByZWplY3RlZDoiKTsKKyAgICAgICAg
ICAgIGltYWdlLnNyYyA9ICIiOworICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGRlY29k
ZU11bHRpcGxlKGltYWdlLCBtdWx0aXBsZUNvdW50KSkuY2F0Y2goKCkgPT4geworICAgICAgICAg
ICAgICAgIHJldHVybiByZWplY3RTaW5nbGUoaW1hZ2UsIHNpbmdsZUNvdW50KTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ZGVjb2RlVmFsaWRJbWFnZShpbWFnZSwgMTAwLCAxMDApLnRoZW4oKCkgPT4geworICAgICAgICAg
ICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICAgICAgICAgICAgICBzaG91bGRC
ZVplcm8oImludGVybmFscy5pbWFnZVBlbmRpbmdEZWNvZGVQcm9taXNlc0NvdW50KGltYWdlKSIp
OworICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGVCcm9rZW5JbWFnZShpbWFnZSwgMTAwLCAx
MDApOworICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4geworICAgICAgICAgICAgICAgIGlmICh3
aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICAgICAgICAgICAgICBzaG91bGRCZVplcm8oImludGVy
bmFscy5pbWFnZVBlbmRpbmdEZWNvZGVQcm9taXNlc0NvdW50KGltYWdlKSIpOworICAgICAgICAg
ICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pKCk7Cisg
ICAgPC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377997</attachid>
            <date>2019-09-04 12:00:22 -0700</date>
            <delta_ts>2019-09-05 09:42:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201402-20190904120021.patch</filename>
            <type>text/plain</type>
            <size>14470</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTQ4MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE5LTA5LTA0ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lP
TiAocjI0OTM2Nyk6IG1fZGVjb2RpbmdQcm9taXNlcyBncm93cyBpbmRlZmluaXRlbHkgdW50aWwg
SW1hZ2VMb2FkZXIgZGVzdHJ1Y3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMTQwMgorCisgICAgICAgIFJldmlld2VkIGJ5IERhbmllbCBCYXRl
cy4KKworICAgICAgICBNb3ZlIG1fZGVjb2RpbmdQcm9taXNlcyB0byBhIGxvY2FsIHZhcmlhYmxl
IHRoZW4gcmVzb2x2ZSBvciByZWplY3QgZWFjaAorICAgICAgICBwcm9taXNlLiBUaGlzIHdpbGwg
Y2xlYXIgbV9kZWNvZGluZ1Byb21pc2VzIGFuZCBmaXggdGhlIGxlYWsuCisKKyAgICAgICAgQWRk
IGFuIGludGVybmFsIEFQSSB0byByZXR1cm4gdGhlIGNvdW50IG9mIHRoZSBwZW5kaW5nIHByb21p
c2VzIG9mIGFuCisgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQuIFRoaXMgaW50ZXJuYWwgQVBJIHdp
bGwgYmUgdXNlZCBpbiB0aGUgYXR0YWNoZWQgdGVzdC4KKworICAgICAgICBUZXN0OiBmYXN0L2lt
YWdlcy9kZWNvZGUtcmVzb2x2ZS1yZWplY3Qtbm8tbGVhay5odG1sCisKKyAgICAgICAgKiBodG1s
L0hUTUxJbWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6
OnBlbmRpbmdEZWNvZGVQcm9taXNlc0NvdW50Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgICog
bG9hZGVyL0ltYWdlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTG9hZGVyOjpy
ZXNvbHZlRGVjb2RlUHJvbWlzZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMb2FkZXI6OnJl
amVjdERlY29kZVByb21pc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTG9hZGVyOjpub3Rp
ZnlGaW5pc2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxvYWRlcjo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnJlc29sdmVEZWNvZGVQcm9taXNlcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpyZWplY3REZWNvZGVQcm9taXNlcyk6IERlbGV0ZWQuCisgICAgICAgICogbG9h
ZGVyL0ltYWdlTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxvYWRlcjo6cGVuZGlu
Z0RlY29kZVByb21pc2VzQ291bnRGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKiB0ZXN0aW5n
L0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmltYWdlUGVuZGlu
Z0RlY29kZVByb21pc2VzQ291bnRGb3JUZXN0aW5nKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVy
bmFscy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKwogMjAxOS0wOS0wNCAg
WW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgQWJzdHJhY3Qgb3V0
IFdlYlNvY2tldENoYW5uZWwgbWVzc2FnZSBxdWV1ZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDI0OTQ4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEltYWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDcgQEAg
cHVibGljOgogI2VuZGlmCiAKICAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IHsg
cmV0dXJuIG1faW1hZ2VMb2FkZXIuaGFzUGVuZGluZ0FjdGl2aXR5KCk7IH0KKyAgICBzaXplX3Qg
cGVuZGluZ0RlY29kZVByb21pc2VzQ291bnRGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9p
bWFnZUxvYWRlci5wZW5kaW5nRGVjb2RlUHJvbWlzZXNDb3VudEZvclRlc3RpbmcoKTsgfQogCiAg
ICAgYm9vbCBjYW5Db250YWluUmFuZ2VFbmRQb2ludCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAkocmV2
aXNpb24gMjQ5NDgwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjc1LDIwICsyNzUsMzQgQEAgdm9pZCBJbWFnZUxvYWRlcjo6dXBk
YXRlRnJvbUVsZW1lbnRJZ25vcgogICAgIHVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgdm9pZCByZXNvbHZlRGVjb2RlUHJvbWlzZXMoVmVjdG9yPFJlZlB0cjxEZWZlcnJl
ZFByb21pc2U+PiYmIHByb21pc2VzKQordm9pZCBJbWFnZUxvYWRlcjo6cmVzb2x2ZURlY29kZVBy
b21pc2VzKFZlY3RvcjxSZWZQdHI8RGVmZXJyZWRQcm9taXNlPj4mIHByb21pc2VzKQogewogICAg
IEFTU0VSVCghcHJvbWlzZXMuaXNFbXB0eSgpKTsKICAgICBmb3IgKGF1dG8mIHByb21pc2UgOiBw
cm9taXNlcykKICAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZSgpOwogfQogCi1zdGF0aWMgaW5saW5l
IHZvaWQgcmVqZWN0RGVjb2RlUHJvbWlzZXMoVmVjdG9yPFJlZlB0cjxEZWZlcnJlZFByb21pc2U+
PiYmIHByb21pc2VzLCBjb25zdCBjaGFyKiBtZXNzYWdlKQordm9pZCBJbWFnZUxvYWRlcjo6cmVq
ZWN0RGVjb2RlUHJvbWlzZXMoVmVjdG9yPFJlZlB0cjxEZWZlcnJlZFByb21pc2U+PiYgcHJvbWlz
ZXMsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiB7CiAgICAgQVNTRVJUKCFwcm9taXNlcy5pc0VtcHR5
KCkpOwogICAgIGZvciAoYXV0byYgcHJvbWlzZSA6IHByb21pc2VzKQogICAgICAgICBwcm9taXNl
LT5yZWplY3QoRXhjZXB0aW9uIHsgRW5jb2RpbmdFcnJvciwgbWVzc2FnZSB9KTsKIH0KIAordm9p
ZCBJbWFnZUxvYWRlcjo6cmVzb2x2ZURlY29kZVByb21pc2VzKCkKK3sKKyAgICBBU1NFUlQoaGFz
UGVuZGluZ0RlY29kZVByb21pc2VzKCkpOworICAgIGF1dG8gcHJvbWlzZXMgPSBXVEZNb3ZlKG1f
ZGVjb2RpbmdQcm9taXNlcyk7CisgICAgcmVzb2x2ZURlY29kZVByb21pc2VzKHByb21pc2VzKTsK
K30KKwordm9pZCBJbWFnZUxvYWRlcjo6cmVqZWN0RGVjb2RlUHJvbWlzZXMoY29uc3QgY2hhciog
bWVzc2FnZSkKK3sKKyAgICBBU1NFUlQoaGFzUGVuZGluZ0RlY29kZVByb21pc2VzKCkpOworICAg
IGF1dG8gcHJvbWlzZXMgPSBXVEZNb3ZlKG1fZGVjb2RpbmdQcm9taXNlcyk7CisgICAgcmVqZWN0
RGVjb2RlUHJvbWlzZXMocHJvbWlzZXMsIG1lc3NhZ2UpOworfQorCiB2b2lkIEltYWdlTG9hZGVy
Ojpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCiB7CiAgICAgQVNTRVJU
KG1fZmFpbGVkTG9hZFVSTC5pc0VtcHR5KCkpOwpAQCAtMzEzLDcgKzMyNyw3IEBAIHZvaWQgSW1h
Z2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFIKICAgICAgICAgZWxlbWVudCgpLmRvY3Vt
ZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6U2VjdXJpdHksIE1lc3NhZ2VM
ZXZlbDo6RXJyb3IsIG1lc3NhZ2UpOwogCiAgICAgICAgIGlmIChoYXNQZW5kaW5nRGVjb2RlUHJv
bWlzZXMoKSkKLSAgICAgICAgICAgIHJlamVjdERlY29kZVByb21pc2VzKFdURk1vdmUobV9kZWNv
ZGluZ1Byb21pc2VzKSwgIkFjY2VzcyBjb250cm9sIGVycm9yLiIpOworICAgICAgICAgICAgcmVq
ZWN0RGVjb2RlUHJvbWlzZXMoIkFjY2VzcyBjb250cm9sIGVycm9yLiIpOwogICAgICAgICAKICAg
ICAgICAgQVNTRVJUKCFtX2hhc1BlbmRpbmdMb2FkRXZlbnQpOwogCkBAIC0zMjUsNyArMzM5LDcg
QEAgdm9pZCBJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUgogCiAgICAgaWYgKG1f
aW1hZ2UtPndhc0NhbmNlbGVkKCkpIHsKICAgICAgICAgaWYgKGhhc1BlbmRpbmdEZWNvZGVQcm9t
aXNlcygpKQotICAgICAgICAgICAgcmVqZWN0RGVjb2RlUHJvbWlzZXMoV1RGTW92ZShtX2RlY29k
aW5nUHJvbWlzZXMpLCAiTG9hZGluZyB3YXMgY2FuY2VsZWQuIik7CisgICAgICAgICAgICByZWpl
Y3REZWNvZGVQcm9taXNlcygiTG9hZGluZyB3YXMgY2FuY2VsZWQuIik7CiAgICAgICAgIG1faGFz
UGVuZGluZ0xvYWRFdmVudCA9IGZhbHNlOwogICAgICAgICAvLyBPbmx5IGNvbnNpZGVyIHVwZGF0
aW5nIHRoZSBwcm90ZWN0aW9uIHJlZi1jb3VudCBvZiB0aGUgRWxlbWVudCBpbW1lZGlhdGVseSBi
ZWZvcmUgcmV0dXJuaW5nCiAgICAgICAgIC8vIGZyb20gdGhpcyBmdW5jdGlvbiBhcyBkb2luZyBz
byBtaWdodCByZXN1bHQgaW4gdGhlIGRlc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VMb2FkZXIuCkBA
IC00MDIsMTMgKzQxNiwxMyBAQCB2b2lkIEltYWdlTG9hZGVyOjpkZWNvZGUoUmVmPERlZmVycmVk
UHJvCiAgICAgbV9kZWNvZGluZ1Byb21pc2VzLmFwcGVuZChXVEZNb3ZlKHByb21pc2UpKTsKIAog
ICAgIGlmICghZWxlbWVudCgpLmRvY3VtZW50KCkuZG9tV2luZG93KCkpIHsKLSAgICAgICAgcmVq
ZWN0RGVjb2RlUHJvbWlzZXMoV1RGTW92ZShtX2RlY29kaW5nUHJvbWlzZXMpLCAiSW5hY3RpdmUg
ZG9jdW1lbnQuIik7CisgICAgICAgIHJlamVjdERlY29kZVByb21pc2VzKCJJbmFjdGl2ZSBkb2N1
bWVudC4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEF0b21TdHJpbmcgYXR0ciA9
IGVsZW1lbnQoKS5pbWFnZVNvdXJjZVVSTCgpOwogICAgIGlmIChzdHJpcExlYWRpbmdBbmRUcmFp
bGluZ0hUTUxTcGFjZXMoYXR0cikuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlamVjdERlY29kZVBy
b21pc2VzKFdURk1vdmUobV9kZWNvZGluZ1Byb21pc2VzKSwgIk1pc3Npbmcgc291cmNlIFVSTC4i
KTsKKyAgICAgICAgcmVqZWN0RGVjb2RlUHJvbWlzZXMoIk1pc3Npbmcgc291cmNlIFVSTC4iKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDIxLDI0ICs0MzUsMjQgQEAgdm9pZCBJbWFn
ZUxvYWRlcjo6ZGVjb2RlKCkKICAgICBBU1NFUlQoaGFzUGVuZGluZ0RlY29kZVByb21pc2VzKCkp
OwogICAgIAogICAgIGlmICghZWxlbWVudCgpLmRvY3VtZW50KCkuZG9tV2luZG93KCkpIHsKLSAg
ICAgICAgcmVqZWN0RGVjb2RlUHJvbWlzZXMoV1RGTW92ZShtX2RlY29kaW5nUHJvbWlzZXMpLCAi
SW5hY3RpdmUgZG9jdW1lbnQuIik7CisgICAgICAgIHJlamVjdERlY29kZVByb21pc2VzKCJJbmFj
dGl2ZSBkb2N1bWVudC4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICghbV9p
bWFnZSB8fCAhbV9pbWFnZS0+aW1hZ2UoKSB8fCBtX2ltYWdlLT5lcnJvck9jY3VycmVkKCkpIHsK
LSAgICAgICAgcmVqZWN0RGVjb2RlUHJvbWlzZXMoV1RGTW92ZShtX2RlY29kaW5nUHJvbWlzZXMp
LCAiTG9hZGluZyBlcnJvci4iKTsKKyAgICAgICAgcmVqZWN0RGVjb2RlUHJvbWlzZXMoIkxvYWRp
bmcgZXJyb3IuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBJbWFnZSogaW1hZ2Ug
PSBtX2ltYWdlLT5pbWFnZSgpOwogICAgIGlmICghaXM8Qml0bWFwSW1hZ2U+KGltYWdlKSkgewot
ICAgICAgICByZXNvbHZlRGVjb2RlUHJvbWlzZXMoV1RGTW92ZShtX2RlY29kaW5nUHJvbWlzZXMp
KTsKKyAgICAgICAgcmVzb2x2ZURlY29kZVByb21pc2VzKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBhdXRvJiBiaXRtYXBJbWFnZSA9IGRvd25jYXN0PEJpdG1hcEltYWdlPigqaW1h
Z2UpOwogICAgIGJpdG1hcEltYWdlLmRlY29kZShbcHJvbWlzZXMgPSBXVEZNb3ZlKG1fZGVjb2Rp
bmdQcm9taXNlcyldKCkgbXV0YWJsZSB7Ci0gICAgICAgIHJlc29sdmVEZWNvZGVQcm9taXNlcyhX
VEZNb3ZlKHByb21pc2VzKSk7CisgICAgICAgIHJlc29sdmVEZWNvZGVQcm9taXNlcyhwcm9taXNl
cyk7CiAgICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5oCShy
ZXZpc2lvbiAyNDk0ODApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgQ2FjaGVkSW1hZ2Uq
IGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQogICAgIHZvaWQgY2xlYXJJ
bWFnZSgpOyAvLyBDYW5jZWxzIHBlbmRpbmcgYmVmb3JlbG9hZCBhbmQgbG9hZCBldmVudHMsIGFu
ZCBkb2Vzbid0IGRpc3BhdGNoIG5ldyBvbmVzLgogICAgIAorICAgIHNpemVfdCBwZW5kaW5nRGVj
b2RlUHJvbWlzZXNDb3VudEZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBtX2RlY29kaW5nUHJv
bWlzZXMuc2l6ZSgpOyB9CiAgICAgdm9pZCBkZWNvZGUoUmVmPERlZmVycmVkUHJvbWlzZT4mJik7
CiAKICAgICB2b2lkIHNldExvYWRNYW51YWxseShib29sIGxvYWRNYW51YWxseSkgeyBtX2xvYWRN
YW51YWxseSA9IGxvYWRNYW51YWxseTsgfQpAQCAtOTQsNiArOTUsMTAgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGNsZWFySW1hZ2VXaXRob3V0Q29uc2lkZXJpbmdQZW5kaW5nTG9hZEV2ZW50KCk7CiAg
ICAgdm9pZCBjbGVhckZhaWxlZExvYWRVUkwoKTsKIAorICAgIHN0YXRpYyB2b2lkIHJlc29sdmVE
ZWNvZGVQcm9taXNlcyhWZWN0b3I8UmVmUHRyPERlZmVycmVkUHJvbWlzZT4+Jik7CisgICAgc3Rh
dGljIHZvaWQgcmVqZWN0RGVjb2RlUHJvbWlzZXMoVmVjdG9yPFJlZlB0cjxEZWZlcnJlZFByb21p
c2U+PiYsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOworICAgIHZvaWQgcmVzb2x2ZURlY29kZVByb21p
c2VzKCk7CisgICAgdm9pZCByZWplY3REZWNvZGVQcm9taXNlcyhjb25zdCBjaGFyKiBtZXNzYWdl
KTsKICAgICBib29sIGhhc1BlbmRpbmdEZWNvZGVQcm9taXNlcygpIGNvbnN0IHsgcmV0dXJuICFt
X2RlY29kaW5nUHJvbWlzZXMuaXNFbXB0eSgpOyB9CiAgICAgdm9pZCBkZWNvZGUoKTsKICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9uIDI0OTQ4MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODY2LDYgKzg2NiwxMSBAQCBib29sIEludGVybmFsczo6aXNJbWFnZUFuaW1hdGluZyhIVE1M
SW1hCiAgICAgcmV0dXJuIGltYWdlICYmIChpbWFnZS0+aXNBbmltYXRpbmcoKSB8fCBpbWFnZS0+
YW5pbWF0aW9uUGVuZGluZygpKTsKIH0KIAordW5zaWduZWQgSW50ZXJuYWxzOjppbWFnZVBlbmRp
bmdEZWNvZGVQcm9taXNlc0NvdW50Rm9yVGVzdGluZyhIVE1MSW1hZ2VFbGVtZW50JiBlbGVtZW50
KQoreworICAgIHJldHVybiBlbGVtZW50LnBlbmRpbmdEZWNvZGVQcm9taXNlc0NvdW50Rm9yVGVz
dGluZygpOworfQorCiB2b2lkIEludGVybmFsczo6c2V0Q2xlYXJEZWNvZGVyQWZ0ZXJBc3luY0Zy
YW1lUmVxdWVzdEZvclRlc3RpbmcoSFRNTEltYWdlRWxlbWVudCYgZWxlbWVudCwgYm9vbCBlbmFi
bGVkKQogewogICAgIGlmIChhdXRvKiBiaXRtYXBJbWFnZSA9IGJpdG1hcEltYWdlRnJvbUltYWdl
RWxlbWVudChlbGVtZW50KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkocmV2
aXNpb24gMjQ5NDgwKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTU0LDYgKzE1NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEltYWdl
RnJhbWVEZWNvZGluZ0R1cmF0aW9uKEhUTUxJbWFnZUVsZW1lbnQmLCBmbG9hdCBkdXJhdGlvbik7
CiAgICAgdm9pZCByZXNldEltYWdlQW5pbWF0aW9uKEhUTUxJbWFnZUVsZW1lbnQmKTsKICAgICBi
b29sIGlzSW1hZ2VBbmltYXRpbmcoSFRNTEltYWdlRWxlbWVudCYpOworICAgIHVuc2lnbmVkIGlt
YWdlUGVuZGluZ0RlY29kZVByb21pc2VzQ291bnRGb3JUZXN0aW5nKEhUTUxJbWFnZUVsZW1lbnQm
KTsKICAgICB2b2lkIHNldENsZWFyRGVjb2RlckFmdGVyQXN5bmNGcmFtZVJlcXVlc3RGb3JUZXN0
aW5nKEhUTUxJbWFnZUVsZW1lbnQmLCBib29sIGVuYWJsZWQpOwogICAgIHVuc2lnbmVkIGltYWdl
RGVjb2RlQ291bnQoSFRNTEltYWdlRWxlbWVudCYpOwogICAgIHVuc2lnbmVkIHBkZkRvY3VtZW50
Q2FjaGluZ0NvdW50KEhUTUxJbWFnZUVsZW1lbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5pZGwJKHJldmlzaW9uIDI0OTQ4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzY5LDYgKzM2OSw3IEBAIGVudW0g
Q29tcG9zaXRpbmdQb2xpY3kgewogICAgIHZvaWQgc2V0SW1hZ2VGcmFtZURlY29kaW5nRHVyYXRp
b24oSFRNTEltYWdlRWxlbWVudCBlbGVtZW50LCB1bnJlc3RyaWN0ZWQgZmxvYXQgZHVyYXRpb24p
OwogICAgIHZvaWQgcmVzZXRJbWFnZUFuaW1hdGlvbihIVE1MSW1hZ2VFbGVtZW50IGVsZW1lbnQp
OwogICAgIGJvb2xlYW4gaXNJbWFnZUFuaW1hdGluZyhIVE1MSW1hZ2VFbGVtZW50IGVsZW1lbnQp
OworICAgIHVuc2lnbmVkIGxvbmcgaW1hZ2VQZW5kaW5nRGVjb2RlUHJvbWlzZXNDb3VudEZvclRl
c3RpbmcoSFRNTEltYWdlRWxlbWVudCBlbGVtZW50KTsKICAgICB2b2lkIHNldENsZWFyRGVjb2Rl
ckFmdGVyQXN5bmNGcmFtZVJlcXVlc3RGb3JUZXN0aW5nKEhUTUxJbWFnZUVsZW1lbnQgZWxlbWVu
dCwgYm9vbGVhbiBlbmFibGVkKTsKICAgICB1bnNpZ25lZCBsb25nIGltYWdlRGVjb2RlQ291bnQo
SFRNTEltYWdlRWxlbWVudCBlbGVtZW50KTsKICAgICB1bnNpZ25lZCBsb25nIHBkZkRvY3VtZW50
Q2FjaGluZ0NvdW50KEhUTUxJbWFnZUVsZW1lbnQgZWxlbWVudCk7CkluZGV4OiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyNDk0ODApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMyBAQAorMjAxOS0wOS0wNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgorCisgICAgICAgIFJFR1JFU1NJT04gKHIyNDkzNjcpOiBtX2RlY29kaW5nUHJv
bWlzZXMgZ3Jvd3MgaW5kZWZpbml0ZWx5IHVudGlsIEltYWdlTG9hZGVyIGRlc3RydWN0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE0MDIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvaW1h
Z2VzL2RlY29kZS1yZXNvbHZlLXJlamVjdC1uby1sZWFrLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9pbWFnZXMvZGVjb2RlLXJlc29sdmUtcmVqZWN0LW5vLWxlYWsuaHRtbDog
QWRkZWQuCisKIDIwMTktMDktMDQgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFw
cGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjQ5MzY0KTogTGF5b3V0IFRlc3Qgd2Vi
Z3B1L3RleHR1cmUtdHJpYW5nbGUtc3RyaXAuaHRtbCBpcyBGYWlsaW5nCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2ltYWdlcy9kZWNvZGUtcmVzb2x2ZS1yZWplY3Qtbm8tbGVhay1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvZGVjb2RlLXJlc29sdmUt
cmVqZWN0LW5vLWxlYWstZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvaW1hZ2VzL2RlY29kZS1yZXNvbHZlLXJlamVjdC1uby1sZWFrLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1IEBACitUZXN0IEhUTUxJbWFnZUVsZW1lbnQ6OmRl
Y29kZSgpIGRvZXMgbm90IGxlYWsgdGhlIHBlbmRpbmcgcHJvbWlzZXMgYWZ0ZXIgcmVzb2x2aW5n
IG9yIHJlamVjdGluZyB0aGVtLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworRGVj
b2RpbmcgYSBiaXRtYXAgaW1hZ2UgLSBwcm9taXNlcyB3aWxsIGJlIHJlc29sdmVkOgorUEFTUyBp
bnRlcm5hbHMuaW1hZ2VQZW5kaW5nRGVjb2RlUHJvbWlzZXNDb3VudEZvclRlc3RpbmcoaW1hZ2Up
IGlzIDAKK0RlY29kaW5nIGEgU1ZHIGltYWdlIC0gcHJvbWlzZXMgd2lsbCBiZSByZXNvbHZlZDoK
K1BBU1MgaW50ZXJuYWxzLmltYWdlUGVuZGluZ0RlY29kZVByb21pc2VzQ291bnRGb3JUZXN0aW5n
KGltYWdlKSBpcyAwCitEZWNvZGluZyBhIGJyb2tlbiBpbWFnZSAtIHByb21pc2VzIHdpbGwgYmUg
cmVqZWN0ZWQ6CitQQVNTIGludGVybmFscy5pbWFnZVBlbmRpbmdEZWNvZGVQcm9taXNlc0NvdW50
Rm9yVGVzdGluZyhpbWFnZSkgaXMgMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2RlY29kZS1y
ZXNvbHZlLXJlamVjdC1uby1sZWFrLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9pbWFnZXMvZGVjb2RlLXJlc29sdmUtcmVqZWN0LW5vLWxlYWsuaHRtbAkobm9uZXhpc3RlbnQp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9kZWNvZGUtcmVzb2x2ZS1yZWplY3Qtbm8tbGVh
ay5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKzwhRE9DVFlQRSBodG1sPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
Ym9keT4KKyAgICA8c2NyaXB0PgorICAgICAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2U7CisKKyAg
ICAgICAgZGVzY3JpcHRpb24oJ1Rlc3QgSFRNTEltYWdlRWxlbWVudDo6ZGVjb2RlKCkgZG9lcyBu
b3QgbGVhayB0aGUgcGVuZGluZyBwcm9taXNlcyBhZnRlciByZXNvbHZpbmcgb3IgcmVqZWN0aW5n
IHRoZW0uJyk7CisgICAgICAgIGpzVGVzdElzQXN5bmMgPSB0cnVlOworCisgICAgICAgIGZ1bmN0
aW9uIGRlY29kZU11bHRpcGxlKGltYWdlLCBtdWx0aXBsZUNvdW50KSB7CisgICAgICAgICAgICB2
YXIgcHJvbWlzZXMgPSBbXTsKKyAgICAgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IG11
bHRpcGxlQ291bnQ7ICsraW5kZXgpCisgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbWFn
ZS5kZWNvZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gcHJvbWlzZXM7CisgICAgICAgIH0KKwor
ICAgICAgICBmdW5jdGlvbiByZXNvbHZlU2luZ2xlKGltYWdlLCBzaW5nbGVDb3VudCkgeworICAg
ICAgICAgICAgaWYgKCFzaW5nbGVDb3VudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlz
ZS5yZXNvbHZlKCk7CisgICAgICAgICAgICByZXR1cm4gaW1hZ2UuZGVjb2RlKCkudGhlbigoKSA9
PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVTaW5nbGUoaW1hZ2UsIHNpbmdsZUNv
dW50IC0gMSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IHJlamVjdFNpbmdsZShpbWFnZSwgc2luZ2xlQ291bnQpIHsKKyAgICAgICAgICAgIGlmICghc2lu
Z2xlQ291bnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7CisgICAg
ICAgICAgICByZXR1cm4gaW1hZ2UuZGVjb2RlKCkuY2F0Y2goKCkgPT4geworICAgICAgICAgICAg
ICAgIHJldHVybiByZWplY3RTaW5nbGUoaW1hZ2UsIHNpbmdsZUNvdW50IC0gMSk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGRlY29kZUJpdG1hcEltYWdl
KGltYWdlLCBtdWx0aXBsZUNvdW50LCBzaW5nbGVDb3VudCkgeworICAgICAgICAgICAgZGVidWco
IkRlY29kaW5nIGEgYml0bWFwIGltYWdlIC0gcHJvbWlzZXMgd2lsbCBiZSByZXNvbHZlZDoiKTsK
KyAgICAgICAgICAgIGltYWdlLnNyYyA9ICJyZXNvdXJjZXMvcmVkLTQwMHg0MDAucG5nIjsKKyAg
ICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChkZWNvZGVNdWx0aXBsZShpbWFnZSwgbXVsdGlw
bGVDb3VudCkpLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlU2lu
Z2xlKGltYWdlLCBzaW5nbGVDb3VudCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bmN0aW9uIGRlY29kZVNWR0ltYWdlKGltYWdlLCBtdWx0aXBsZUNvdW50LCBzaW5n
bGVDb3VudCkgeworICAgICAgICAgICAgZGVidWcoIkRlY29kaW5nIGEgU1ZHIGltYWdlIC0gcHJv
bWlzZXMgd2lsbCBiZSByZXNvbHZlZDoiKTsKKyAgICAgICAgICAgIGltYWdlLnNyYyA9ICJyZXNv
dXJjZXMvZ3JlZW4tMTAweDEwMC5zdmciOworICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxs
KGRlY29kZU11bHRpcGxlKGltYWdlLCBtdWx0aXBsZUNvdW50KSkudGhlbigoKSA9PiB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVTaW5nbGUoaW1hZ2UsIHNpbmdsZUNvdW50KTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZGVjb2RlQnJva2Vu
SW1hZ2UoaW1hZ2UsIG11bHRpcGxlQ291bnQsIHNpbmdsZUNvdW50KSB7CisgICAgICAgICAgICBk
ZWJ1ZygiRGVjb2RpbmcgYSBicm9rZW4gaW1hZ2UgLSBwcm9taXNlcyB3aWxsIGJlIHJlamVjdGVk
OiIpOworICAgICAgICAgICAgaW1hZ2Uuc3JjID0gIiI7CisgICAgICAgICAgICByZXR1cm4gUHJv
bWlzZS5hbGwoZGVjb2RlTXVsdGlwbGUoaW1hZ2UsIG11bHRpcGxlQ291bnQpKS5jYXRjaCgoKSA9
PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdFNpbmdsZShpbWFnZSwgc2luZ2xlQ291
bnQpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICAoZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBkZWNvZGVCaXRtYXBJbWFnZShpbWFnZSwgMTAsIDEwKS50aGVuKCgpID0+
IHsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmludGVybmFscykKKyAgICAgICAgICAgICAg
ICAgICAgc2hvdWxkQmVaZXJvKCJpbnRlcm5hbHMuaW1hZ2VQZW5kaW5nRGVjb2RlUHJvbWlzZXND
b3VudEZvclRlc3RpbmcoaW1hZ2UpIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlY29kZVNW
R0ltYWdlKGltYWdlLCAxMCwgMTApOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAg
ICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgICAgICAgICAgICAgIHNo
b3VsZEJlWmVybygiaW50ZXJuYWxzLmltYWdlUGVuZGluZ0RlY29kZVByb21pc2VzQ291bnRGb3JU
ZXN0aW5nKGltYWdlKSIpOworICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGVCcm9rZW5JbWFn
ZShpbWFnZSwgMTAsIDEwKTsKKyAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHsKKyAgICAgICAg
ICAgICAgICBpZiAod2luZG93LmludGVybmFscykKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxk
QmVaZXJvKCJpbnRlcm5hbHMuaW1hZ2VQZW5kaW5nRGVjb2RlUHJvbWlzZXNDb3VudEZvclRlc3Rp
bmcoaW1hZ2UpIik7CisgICAgICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSkoKTsKKyAgICA8L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378089</attachid>
            <date>2019-09-05 09:42:26 -0700</date>
            <delta_ts>2019-09-06 12:28:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201402-20190905094225.patch</filename>
            <type>text/plain</type>
            <size>14558</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTUzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE5LTA5LTA1ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lP
TiAocjI0OTM2Nyk6IG1fZGVjb2RpbmdQcm9taXNlcyBncm93cyBpbmRlZmluaXRlbHkgdW50aWwg
SW1hZ2VMb2FkZXIgZGVzdHJ1Y3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMTQwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1vdmUgbV9kZWNvZGluZ1Byb21pc2VzIHRvIGZ1bmN0aW9ucyB3aGlj
aCB0YWtlIGEgdmVjdG9yIG9mIHByb21pc2VzLgorICAgICAgICBUaGVzZSBmdW5jdGlvbiByZXNv
bHZlcyBhbmQgcmVqZWN0cyB0aGUgcHJvbWlzZXMuIFRoaXMgd2lsbCBjbGVhcgorICAgICAgICBt
X2RlY29kaW5nUHJvbWlzZXMgYW5kIGZpeCB0aGUgbGVhay4KKworICAgICAgICBBZGQgYW4gaW50
ZXJuYWwgQVBJIHdoaWNoIHJldHVybnMgdGhlIGNvdW50IG9mIHRoZSBwZW5kaW5nIHByb21pc2Vz
IG9mCisgICAgICAgIGFuIEhUTUxJbWFnZUVsZW1lbnQuIFRoaXMgaW50ZXJuYWwgQVBJIHdpbGwg
YmUgdXNlZCBpbiB0aGUgYXR0YWNoZWQgdGVzdC4KKworICAgICAgICBUZXN0OiBmYXN0L2ltYWdl
cy9kZWNvZGUtcmVzb2x2ZS1yZWplY3Qtbm8tbGVhay5odG1sCisKKyAgICAgICAgKiBodG1sL0hU
TUxJbWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnBl
bmRpbmdEZWNvZGVQcm9taXNlc0NvdW50Rm9yVGVzdGluZyBjb25zdCk6CisgICAgICAgICogbG9h
ZGVyL0ltYWdlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVQcm9taXNlcyk6
CisgICAgICAgIEltYWdlTG9hZGVyOjpkZWNvZGUoKSBjYWxscyBCaXRtYXBJbWFnZTo6ZGVjb2Rl
KCkgYW5kIG1vdmVzIG1fZGVjb2RpbmdQcm9taXNlcworICAgICAgICBpbiBjYXB0dXJlLiBXaGVu
IGRlY29kaW5nIGZpbmlzaGVzLCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byByZXNvbHZlIHRo
ZQorICAgICAgICBwcm9taXNlcy4gQnV0IEltYWdlTG9hZGVyIG1pZ2h0IGdldCBkZWxldGVkIGJl
Zm9yZSB0aGUgaW1hZ2UgZGVjb2RpbmcKKyAgICAgICAgZmluaXNoZXMuIFNvIHRoaXMgZnVuY3Rp
b24gaGFzIHRvIGJlIHN0YXRpYy4KKworICAgICAgICAoV2ViQ29yZTo6cmVqZWN0UHJvbWlzZXMp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMb2FkZXI6OnJlc29sdmVEZWNvZGVQcm9taXNlcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxvYWRlcjo6cmVqZWN0RGVjb2RlUHJvbWlzZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlTG9hZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2
ZURlY29kZVByb21pc2VzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlamVjdERlY29k
ZVByb21pc2VzKTogRGVsZXRlZC4KKyAgICAgICAgKiBsb2FkZXIvSW1hZ2VMb2FkZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlTG9hZGVyOjpwZW5kaW5nRGVjb2RlUHJvbWlzZXNDb3VudEZv
clRlc3RpbmcgY29uc3QpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkludGVybmFsczo6aW1hZ2VQZW5kaW5nRGVjb2RlUHJvbWlzZXNDb3VudEZv
clRlc3RpbmcpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6CisgICAgICAgICogdGVz
dGluZy9JbnRlcm5hbHMuaWRsOgorCiAyMDE5LTA5LTA1ICBLZWl0aCBSb2xsaW4gIDxrcm9sbGlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggaW1wbGljaXQgY29udmVyc2lvbiB0aGF0IGxvc2Vz
IHByZWNpc2lvbgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgJKHJl
dmlzaW9uIDI0OTUwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAg
ICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VMb2FkZXIu
aGFzUGVuZGluZ0FjdGl2aXR5KCk7IH0KKyAgICBzaXplX3QgcGVuZGluZ0RlY29kZVByb21pc2Vz
Q291bnRGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUxvYWRlci5wZW5kaW5nRGVj
b2RlUHJvbWlzZXNDb3VudEZvclRlc3RpbmcoKTsgfQogCiAgICAgYm9vbCBjYW5Db250YWluUmFu
Z2VFbmRQb2ludCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAkocmV2aXNpb24gMjQ5NTA0KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc1
LDIwICsyNzUsMzAgQEAgdm9pZCBJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnRJZ25vcgog
ICAgIHVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZXNvbHZl
RGVjb2RlUHJvbWlzZXMoVmVjdG9yPFJlZlB0cjxEZWZlcnJlZFByb21pc2U+PiYmIHByb21pc2Vz
KQorc3RhdGljIGlubGluZSB2b2lkIHJlc29sdmVQcm9taXNlcyhWZWN0b3I8UmVmUHRyPERlZmVy
cmVkUHJvbWlzZT4+IHByb21pc2VzKQogewogICAgIEFTU0VSVCghcHJvbWlzZXMuaXNFbXB0eSgp
KTsKICAgICBmb3IgKGF1dG8mIHByb21pc2UgOiBwcm9taXNlcykKICAgICAgICAgcHJvbWlzZS0+
cmVzb2x2ZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVqZWN0RGVjb2RlUHJvbWlzZXMo
VmVjdG9yPFJlZlB0cjxEZWZlcnJlZFByb21pc2U+PiYmIHByb21pc2VzLCBjb25zdCBjaGFyKiBt
ZXNzYWdlKQorc3RhdGljIGlubGluZSB2b2lkIHJlamVjdFByb21pc2VzKFZlY3RvcjxSZWZQdHI8
RGVmZXJyZWRQcm9taXNlPj4gcHJvbWlzZXMsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiB7CiAgICAg
QVNTRVJUKCFwcm9taXNlcy5pc0VtcHR5KCkpOwogICAgIGZvciAoYXV0byYgcHJvbWlzZSA6IHBy
b21pc2VzKQogICAgICAgICBwcm9taXNlLT5yZWplY3QoRXhjZXB0aW9uIHsgRW5jb2RpbmdFcnJv
ciwgbWVzc2FnZSB9KTsKIH0KIAoraW5saW5lIHZvaWQgSW1hZ2VMb2FkZXI6OnJlc29sdmVEZWNv
ZGVQcm9taXNlcygpCit7CisgICAgcmVzb2x2ZVByb21pc2VzKFdURk1vdmUobV9kZWNvZGluZ1By
b21pc2VzKSk7Cit9CisKK2lubGluZSB2b2lkIEltYWdlTG9hZGVyOjpyZWplY3REZWNvZGVQcm9t
aXNlcyhjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIHJlamVjdFByb21pc2VzKFdURk1vdmUo
bV9kZWNvZGluZ1Byb21pc2VzKSwgbWVzc2FnZSk7Cit9CisKIHZvaWQgSW1hZ2VMb2FkZXI6Om5v
dGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKIHsKICAgICBBU1NFUlQobV9m
YWlsZWRMb2FkVVJMLmlzRW1wdHkoKSk7CkBAIC0zMTMsNyArMzIzLDcgQEAgdm9pZCBJbWFnZUxv
YWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUgogICAgICAgICBlbGVtZW50KCkuZG9jdW1lbnQo
KS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpTZWN1cml0eSwgTWVzc2FnZUxldmVs
OjpFcnJvciwgbWVzc2FnZSk7CiAKICAgICAgICAgaWYgKGhhc1BlbmRpbmdEZWNvZGVQcm9taXNl
cygpKQotICAgICAgICAgICAgcmVqZWN0RGVjb2RlUHJvbWlzZXMoV1RGTW92ZShtX2RlY29kaW5n
UHJvbWlzZXMpLCAiQWNjZXNzIGNvbnRyb2wgZXJyb3IuIik7CisgICAgICAgICAgICByZWplY3RE
ZWNvZGVQcm9taXNlcygiQWNjZXNzIGNvbnRyb2wgZXJyb3IuIik7CiAgICAgICAgIAogICAgICAg
ICBBU1NFUlQoIW1faGFzUGVuZGluZ0xvYWRFdmVudCk7CiAKQEAgLTMyNSw3ICszMzUsNyBAQCB2
b2lkIEltYWdlTG9hZGVyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSCiAKICAgICBpZiAobV9pbWFn
ZS0+d2FzQ2FuY2VsZWQoKSkgewogICAgICAgICBpZiAoaGFzUGVuZGluZ0RlY29kZVByb21pc2Vz
KCkpCi0gICAgICAgICAgICByZWplY3REZWNvZGVQcm9taXNlcyhXVEZNb3ZlKG1fZGVjb2RpbmdQ
cm9taXNlcyksICJMb2FkaW5nIHdhcyBjYW5jZWxlZC4iKTsKKyAgICAgICAgICAgIHJlamVjdERl
Y29kZVByb21pc2VzKCJMb2FkaW5nIHdhcyBjYW5jZWxlZC4iKTsKICAgICAgICAgbV9oYXNQZW5k
aW5nTG9hZEV2ZW50ID0gZmFsc2U7CiAgICAgICAgIC8vIE9ubHkgY29uc2lkZXIgdXBkYXRpbmcg
dGhlIHByb3RlY3Rpb24gcmVmLWNvdW50IG9mIHRoZSBFbGVtZW50IGltbWVkaWF0ZWx5IGJlZm9y
ZSByZXR1cm5pbmcKICAgICAgICAgLy8gZnJvbSB0aGlzIGZ1bmN0aW9uIGFzIGRvaW5nIHNvIG1p
Z2h0IHJlc3VsdCBpbiB0aGUgZGVzdHJ1Y3Rpb24gb2YgdGhpcyBJbWFnZUxvYWRlci4KQEAgLTQw
MiwxMyArNDEyLDEzIEBAIHZvaWQgSW1hZ2VMb2FkZXI6OmRlY29kZShSZWY8RGVmZXJyZWRQcm8K
ICAgICBtX2RlY29kaW5nUHJvbWlzZXMuYXBwZW5kKFdURk1vdmUocHJvbWlzZSkpOwogCiAgICAg
aWYgKCFlbGVtZW50KCkuZG9jdW1lbnQoKS5kb21XaW5kb3coKSkgewotICAgICAgICByZWplY3RE
ZWNvZGVQcm9taXNlcyhXVEZNb3ZlKG1fZGVjb2RpbmdQcm9taXNlcyksICJJbmFjdGl2ZSBkb2N1
bWVudC4iKTsKKyAgICAgICAgcmVqZWN0RGVjb2RlUHJvbWlzZXMoIkluYWN0aXZlIGRvY3VtZW50
LiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgQXRvbVN0cmluZyBhdHRyID0gZWxl
bWVudCgpLmltYWdlU291cmNlVVJMKCk7CiAgICAgaWYgKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5n
SFRNTFNwYWNlcyhhdHRyKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVqZWN0RGVjb2RlUHJvbWlz
ZXMoV1RGTW92ZShtX2RlY29kaW5nUHJvbWlzZXMpLCAiTWlzc2luZyBzb3VyY2UgVVJMLiIpOwor
ICAgICAgICByZWplY3REZWNvZGVQcm9taXNlcygiTWlzc2luZyBzb3VyY2UgVVJMLiIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MjEsMjQgKzQzMSwyNCBAQCB2b2lkIEltYWdlTG9h
ZGVyOjpkZWNvZGUoKQogICAgIEFTU0VSVChoYXNQZW5kaW5nRGVjb2RlUHJvbWlzZXMoKSk7CiAg
ICAgCiAgICAgaWYgKCFlbGVtZW50KCkuZG9jdW1lbnQoKS5kb21XaW5kb3coKSkgewotICAgICAg
ICByZWplY3REZWNvZGVQcm9taXNlcyhXVEZNb3ZlKG1fZGVjb2RpbmdQcm9taXNlcyksICJJbmFj
dGl2ZSBkb2N1bWVudC4iKTsKKyAgICAgICAgcmVqZWN0RGVjb2RlUHJvbWlzZXMoIkluYWN0aXZl
IGRvY3VtZW50LiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCFtX2ltYWdl
IHx8ICFtX2ltYWdlLT5pbWFnZSgpIHx8IG1faW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkgewotICAg
ICAgICByZWplY3REZWNvZGVQcm9taXNlcyhXVEZNb3ZlKG1fZGVjb2RpbmdQcm9taXNlcyksICJM
b2FkaW5nIGVycm9yLiIpOworICAgICAgICByZWplY3REZWNvZGVQcm9taXNlcygiTG9hZGluZyBl
cnJvci4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEltYWdlKiBpbWFnZSA9IG1f
aW1hZ2UtPmltYWdlKCk7CiAgICAgaWYgKCFpczxCaXRtYXBJbWFnZT4oaW1hZ2UpKSB7Ci0gICAg
ICAgIHJlc29sdmVEZWNvZGVQcm9taXNlcyhXVEZNb3ZlKG1fZGVjb2RpbmdQcm9taXNlcykpOwor
ICAgICAgICByZXNvbHZlRGVjb2RlUHJvbWlzZXMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGF1dG8mIGJpdG1hcEltYWdlID0gZG93bmNhc3Q8Qml0bWFwSW1hZ2U+KCppbWFnZSk7
CiAgICAgYml0bWFwSW1hZ2UuZGVjb2RlKFtwcm9taXNlcyA9IFdURk1vdmUobV9kZWNvZGluZ1By
b21pc2VzKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgcmVzb2x2ZURlY29kZVByb21pc2VzKFdURk1v
dmUocHJvbWlzZXMpKTsKKyAgICAgICAgcmVzb2x2ZVByb21pc2VzKFdURk1vdmUocHJvbWlzZXMp
KTsKICAgICB9KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmgJKHJl
dmlzaW9uIDI0OTUwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBAIHB1YmxpYzoKICAgICBDYWNoZWRJbWFnZSog
aW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CiAgICAgdm9pZCBjbGVhcklt
YWdlKCk7IC8vIENhbmNlbHMgcGVuZGluZyBiZWZvcmVsb2FkIGFuZCBsb2FkIGV2ZW50cywgYW5k
IGRvZXNuJ3QgZGlzcGF0Y2ggbmV3IG9uZXMuCiAgICAgCisgICAgc2l6ZV90IHBlbmRpbmdEZWNv
ZGVQcm9taXNlc0NvdW50Rm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RpbmdQcm9t
aXNlcy5zaXplKCk7IH0KICAgICB2b2lkIGRlY29kZShSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsK
IAogICAgIHZvaWQgc2V0TG9hZE1hbnVhbGx5KGJvb2wgbG9hZE1hbnVhbGx5KSB7IG1fbG9hZE1h
bnVhbGx5ID0gbG9hZE1hbnVhbGx5OyB9CkBAIC05NSw2ICs5Niw4IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBjbGVhckZhaWxlZExvYWRVUkwoKTsKIAogICAgIGJvb2wgaGFzUGVuZGluZ0RlY29kZVBy
b21pc2VzKCkgY29uc3QgeyByZXR1cm4gIW1fZGVjb2RpbmdQcm9taXNlcy5pc0VtcHR5KCk7IH0K
KyAgICB2b2lkIHJlc29sdmVEZWNvZGVQcm9taXNlcygpOworICAgIHZvaWQgcmVqZWN0RGVjb2Rl
UHJvbWlzZXMoY29uc3QgY2hhciogbWVzc2FnZSk7CiAgICAgdm9pZCBkZWNvZGUoKTsKICAgICAK
ICAgICB2b2lkIHRpbWVyRmlyZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAJKHJldmlzaW9uIDI0OTUwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODY4LDYgKzg2OCwxMSBAQCBib29sIEludGVybmFs
czo6aXNJbWFnZUFuaW1hdGluZyhIVE1MSW1hCiAgICAgcmV0dXJuIGltYWdlICYmIChpbWFnZS0+
aXNBbmltYXRpbmcoKSB8fCBpbWFnZS0+YW5pbWF0aW9uUGVuZGluZygpKTsKIH0KIAordW5zaWdu
ZWQgSW50ZXJuYWxzOjppbWFnZVBlbmRpbmdEZWNvZGVQcm9taXNlc0NvdW50Rm9yVGVzdGluZyhI
VE1MSW1hZ2VFbGVtZW50JiBlbGVtZW50KQoreworICAgIHJldHVybiBlbGVtZW50LnBlbmRpbmdE
ZWNvZGVQcm9taXNlc0NvdW50Rm9yVGVzdGluZygpOworfQorCiB2b2lkIEludGVybmFsczo6c2V0
Q2xlYXJEZWNvZGVyQWZ0ZXJBc3luY0ZyYW1lUmVxdWVzdEZvclRlc3RpbmcoSFRNTEltYWdlRWxl
bWVudCYgZWxlbWVudCwgYm9vbCBlbmFibGVkKQogewogICAgIGlmIChhdXRvKiBiaXRtYXBJbWFn
ZSA9IGJpdG1hcEltYWdlRnJvbUltYWdlRWxlbWVudChlbGVtZW50KSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuaAkocmV2aXNpb24gMjQ5NTA0KQorKysgU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDYgKzE1NCw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldEltYWdlRnJhbWVEZWNvZGluZ0R1cmF0aW9uKEhUTUxJbWFnZUVs
ZW1lbnQmLCBmbG9hdCBkdXJhdGlvbik7CiAgICAgdm9pZCByZXNldEltYWdlQW5pbWF0aW9uKEhU
TUxJbWFnZUVsZW1lbnQmKTsKICAgICBib29sIGlzSW1hZ2VBbmltYXRpbmcoSFRNTEltYWdlRWxl
bWVudCYpOworICAgIHVuc2lnbmVkIGltYWdlUGVuZGluZ0RlY29kZVByb21pc2VzQ291bnRGb3JU
ZXN0aW5nKEhUTUxJbWFnZUVsZW1lbnQmKTsKICAgICB2b2lkIHNldENsZWFyRGVjb2RlckFmdGVy
QXN5bmNGcmFtZVJlcXVlc3RGb3JUZXN0aW5nKEhUTUxJbWFnZUVsZW1lbnQmLCBib29sIGVuYWJs
ZWQpOwogICAgIHVuc2lnbmVkIGltYWdlRGVjb2RlQ291bnQoSFRNTEltYWdlRWxlbWVudCYpOwog
ICAgIHVuc2lnbmVkIHBkZkRvY3VtZW50Q2FjaGluZ0NvdW50KEhUTUxJbWFnZUVsZW1lbnQmKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHJldmlzaW9uIDI0OTUwNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMzY5LDYgKzM2OSw3IEBAIGVudW0gQ29tcG9zaXRpbmdQb2xpY3kgewogICAgIHZvaWQgc2V0
SW1hZ2VGcmFtZURlY29kaW5nRHVyYXRpb24oSFRNTEltYWdlRWxlbWVudCBlbGVtZW50LCB1bnJl
c3RyaWN0ZWQgZmxvYXQgZHVyYXRpb24pOwogICAgIHZvaWQgcmVzZXRJbWFnZUFuaW1hdGlvbihI
VE1MSW1hZ2VFbGVtZW50IGVsZW1lbnQpOwogICAgIGJvb2xlYW4gaXNJbWFnZUFuaW1hdGluZyhI
VE1MSW1hZ2VFbGVtZW50IGVsZW1lbnQpOworICAgIHVuc2lnbmVkIGxvbmcgaW1hZ2VQZW5kaW5n
RGVjb2RlUHJvbWlzZXNDb3VudEZvclRlc3RpbmcoSFRNTEltYWdlRWxlbWVudCBlbGVtZW50KTsK
ICAgICB2b2lkIHNldENsZWFyRGVjb2RlckFmdGVyQXN5bmNGcmFtZVJlcXVlc3RGb3JUZXN0aW5n
KEhUTUxJbWFnZUVsZW1lbnQgZWxlbWVudCwgYm9vbGVhbiBlbmFibGVkKTsKICAgICB1bnNpZ25l
ZCBsb25nIGltYWdlRGVjb2RlQ291bnQoSFRNTEltYWdlRWxlbWVudCBlbGVtZW50KTsKICAgICB1
bnNpZ25lZCBsb25nIHBkZkRvY3VtZW50Q2FjaGluZ0NvdW50KEhUTUxJbWFnZUVsZW1lbnQgZWxl
bWVudCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDk1MDQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxOS0wOS0wNSAgU2FpZCBBYm91
LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFJFR1JFU1NJT04g
KHIyNDkzNjcpOiBtX2RlY29kaW5nUHJvbWlzZXMgZ3Jvd3MgaW5kZWZpbml0ZWx5IHVudGlsIElt
YWdlTG9hZGVyIGRlc3RydWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDE0MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIGZhc3QvaW1hZ2VzL2RlY29kZS1yZXNvbHZlLXJlamVjdC1uby1sZWFr
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9pbWFnZXMvZGVjb2RlLXJlc29s
dmUtcmVqZWN0LW5vLWxlYWsuaHRtbDogQWRkZWQuCisKIDIwMTktMDktMDQgIEpvc2VwaCBQZWNv
cmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBMb2Nh
bCBPdmVycmlkZXMgLSBQcm92aWRlIHN1YnN0aXR1dGlvbiBjb250ZW50IGZvciByZXNvdXJjZSBs
b2FkcyAoVVJMIGJhc2VkKQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvZGVjb2RlLXJl
c29sdmUtcmVqZWN0LW5vLWxlYWstZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvaW1hZ2VzL2RlY29kZS1yZXNvbHZlLXJlamVjdC1uby1sZWFrLWV4cGVjdGVkLnR4
dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9kZWNvZGUtcmVzb2x2
ZS1yZWplY3Qtbm8tbGVhay1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NSBAQAorVGVzdCBIVE1MSW1hZ2VFbGVtZW50OjpkZWNvZGUoKSBkb2VzIG5vdCBsZWFrIHRoZSBw
ZW5kaW5nIHByb21pc2VzIGFmdGVyIHJlc29sdmluZyBvciByZWplY3RpbmcgdGhlbS4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0RlY29kaW5nIGEgYml0bWFwIGltYWdlIC0gcHJv
bWlzZXMgd2lsbCBiZSByZXNvbHZlZDoKK1BBU1MgaW50ZXJuYWxzLmltYWdlUGVuZGluZ0RlY29k
ZVByb21pc2VzQ291bnRGb3JUZXN0aW5nKGltYWdlKSBpcyAwCitEZWNvZGluZyBhIFNWRyBpbWFn
ZSAtIHByb21pc2VzIHdpbGwgYmUgcmVzb2x2ZWQ6CitQQVNTIGludGVybmFscy5pbWFnZVBlbmRp
bmdEZWNvZGVQcm9taXNlc0NvdW50Rm9yVGVzdGluZyhpbWFnZSkgaXMgMAorRGVjb2RpbmcgYSBi
cm9rZW4gaW1hZ2UgLSBwcm9taXNlcyB3aWxsIGJlIHJlamVjdGVkOgorUEFTUyBpbnRlcm5hbHMu
aW1hZ2VQZW5kaW5nRGVjb2RlUHJvbWlzZXNDb3VudEZvclRlc3RpbmcoaW1hZ2UpIGlzIDAKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9kZWNvZGUtcmVzb2x2ZS1yZWplY3Qtbm8tbGVhay5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2RlY29kZS1yZXNvbHZlLXJl
amVjdC1uby1sZWFrLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9pbWFn
ZXMvZGVjb2RlLXJlc29sdmUtcmVqZWN0LW5vLWxlYWsuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDc0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPGJvZHk+CisgICAgPHNjcmlwdD4KKyAgICAg
ICAgdmFyIGltYWdlID0gbmV3IEltYWdlOworCisgICAgICAgIGRlc2NyaXB0aW9uKCdUZXN0IEhU
TUxJbWFnZUVsZW1lbnQ6OmRlY29kZSgpIGRvZXMgbm90IGxlYWsgdGhlIHBlbmRpbmcgcHJvbWlz
ZXMgYWZ0ZXIgcmVzb2x2aW5nIG9yIHJlamVjdGluZyB0aGVtLicpOworICAgICAgICBqc1Rlc3RJ
c0FzeW5jID0gdHJ1ZTsKKworICAgICAgICBmdW5jdGlvbiBkZWNvZGVNdWx0aXBsZShpbWFnZSwg
bXVsdGlwbGVDb3VudCkgeworICAgICAgICAgICAgdmFyIHByb21pc2VzID0gW107CisgICAgICAg
ICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBtdWx0aXBsZUNvdW50OyArK2luZGV4KQorICAg
ICAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1hZ2UuZGVjb2RlKCkpOworICAgICAgICAgICAg
cmV0dXJuIHByb21pc2VzOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZVNp
bmdsZShpbWFnZSwgc2luZ2xlQ291bnQpIHsKKyAgICAgICAgICAgIGlmICghc2luZ2xlQ291bnQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworICAgICAgICAgICAg
cmV0dXJuIGltYWdlLmRlY29kZSgpLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIHJldHVy
biByZXNvbHZlU2luZ2xlKGltYWdlLCBzaW5nbGVDb3VudCAtIDEpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiByZWplY3RTaW5nbGUoaW1hZ2UsIHNpbmds
ZUNvdW50KSB7CisgICAgICAgICAgICBpZiAoIXNpbmdsZUNvdW50KQorICAgICAgICAgICAgICAg
IHJldHVybiBQcm9taXNlLnJlamVjdCgpOworICAgICAgICAgICAgcmV0dXJuIGltYWdlLmRlY29k
ZSgpLmNhdGNoKCgpID0+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0U2luZ2xlKGlt
YWdlLCBzaW5nbGVDb3VudCAtIDEpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAg
ICAgICBmdW5jdGlvbiBkZWNvZGVCaXRtYXBJbWFnZShpbWFnZSwgbXVsdGlwbGVDb3VudCwgc2lu
Z2xlQ291bnQpIHsKKyAgICAgICAgICAgIGRlYnVnKCJEZWNvZGluZyBhIGJpdG1hcCBpbWFnZSAt
IHByb21pc2VzIHdpbGwgYmUgcmVzb2x2ZWQ6Iik7CisgICAgICAgICAgICBpbWFnZS5zcmMgPSAi
cmVzb3VyY2VzL3JlZC00MDB4NDAwLnBuZyI7CisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5h
bGwoZGVjb2RlTXVsdGlwbGUoaW1hZ2UsIG11bHRpcGxlQ291bnQpKS50aGVuKCgpID0+IHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVNpbmdsZShpbWFnZSwgc2luZ2xlQ291bnQpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBkZWNvZGVTVkdJ
bWFnZShpbWFnZSwgbXVsdGlwbGVDb3VudCwgc2luZ2xlQ291bnQpIHsKKyAgICAgICAgICAgIGRl
YnVnKCJEZWNvZGluZyBhIFNWRyBpbWFnZSAtIHByb21pc2VzIHdpbGwgYmUgcmVzb2x2ZWQ6Iik7
CisgICAgICAgICAgICBpbWFnZS5zcmMgPSAicmVzb3VyY2VzL2dyZWVuLTEwMHgxMDAuc3ZnIjsK
KyAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChkZWNvZGVNdWx0aXBsZShpbWFnZSwgbXVs
dGlwbGVDb3VudCkpLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZl
U2luZ2xlKGltYWdlLCBzaW5nbGVDb3VudCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIGRlY29kZUJyb2tlbkltYWdlKGltYWdlLCBtdWx0aXBsZUNvdW50
LCBzaW5nbGVDb3VudCkgeworICAgICAgICAgICAgZGVidWcoIkRlY29kaW5nIGEgYnJva2VuIGlt
YWdlIC0gcHJvbWlzZXMgd2lsbCBiZSByZWplY3RlZDoiKTsKKyAgICAgICAgICAgIGltYWdlLnNy
YyA9ICIiOworICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGRlY29kZU11bHRpcGxlKGlt
YWdlLCBtdWx0aXBsZUNvdW50KSkuY2F0Y2goKCkgPT4geworICAgICAgICAgICAgICAgIHJldHVy
biByZWplY3RTaW5nbGUoaW1hZ2UsIHNpbmdsZUNvdW50KTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9CisKKyAgICAgICAgKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGVjb2RlQml0bWFw
SW1hZ2UoaW1hZ2UsIDEwLCAxMCkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKHdp
bmRvdy5pbnRlcm5hbHMpCisgICAgICAgICAgICAgICAgICAgIHNob3VsZEJlWmVybygiaW50ZXJu
YWxzLmltYWdlUGVuZGluZ0RlY29kZVByb21pc2VzQ291bnRGb3JUZXN0aW5nKGltYWdlKSIpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGVTVkdJbWFnZShpbWFnZSwgMTAsIDEwKTsKKyAg
ICAgICAgICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaW50
ZXJuYWxzKQorICAgICAgICAgICAgICAgICAgICBzaG91bGRCZVplcm8oImludGVybmFscy5pbWFn
ZVBlbmRpbmdEZWNvZGVQcm9taXNlc0NvdW50Rm9yVGVzdGluZyhpbWFnZSkiKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZGVjb2RlQnJva2VuSW1hZ2UoaW1hZ2UsIDEwLCAxMCk7CisgICAgICAg
ICAgICB9KS5jYXRjaCgoKSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5h
bHMpCisgICAgICAgICAgICAgICAgICAgIHNob3VsZEJlWmVybygiaW50ZXJuYWxzLmltYWdlUGVu
ZGluZ0RlY29kZVByb21pc2VzQ291bnRGb3JUZXN0aW5nKGltYWdlKSIpOworICAgICAgICAgICAg
ICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pKCk7CisgICAg
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378217</attachid>
            <date>2019-09-06 12:28:49 -0700</date>
            <delta_ts>2019-09-06 15:15:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201402-20190906122848.patch</filename>
            <type>text/plain</type>
            <size>14967</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTU3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE5LTA5LTA2ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lP
TiAocjI0OTM2Nyk6IG1fZGVjb2RpbmdQcm9taXNlcyBncm93cyBpbmRlZmluaXRlbHkgdW50aWwg
SW1hZ2VMb2FkZXIgZGVzdHJ1Y3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMTQwMgorCisgICAgICAgIFJldmlld2VkIGJ5IFlvdWVubiBGYWJs
ZXQgYW5kIERhbmllbCBCYXRlcy4KKworICAgICAgICBBZGQgdGhlIHN0YXRpYyBmdW5jdGlvbnMg
cmVzb2x2ZVByb21pc2VzKCkgYW5kIHJlamVjdFByb21pc2VzKCkuIFRoZXNlIAorICAgICAgICBm
dW5jdGlvbnMgdGFrZSBhbiBsdmFsdWUgcmVmZXJlbmNlIHRvIGEgVmVjdG9yIG9mIHByb21pc2Vz
LiBJbnNpZGUgdGhlbSwKKyAgICAgICAgdGhlIGx2YWx1ZSByZWZlcmVuY2UgYXJndW1lbnQgYXJl
IGV4Y2hhbmdlZCB3aXRoIGFuIGVtcHR5IFZlY3RvciBvZgorICAgICAgICBwcm9taXNlcyB0aGVu
IHRoZSBwcm9taXNlcyBhcmUgcHJvY2Vzc2VkLiBUaGlzIGNsZWFycyBtX2RlY29kaW5nUHJvbWlz
ZXMKKyAgICAgICAgYW5kIGZpeGVzIHRoZSBsZWFrLgorCisgICAgICAgIEFkZCBhbiBpbnRlcm5h
bCBBUEkgd2hpY2ggcmV0dXJucyB0aGUgY291bnQgb2YgdGhlIHBlbmRpbmcgcHJvbWlzZXMgb2YK
KyAgICAgICAgYW4gSFRNTEltYWdlRWxlbWVudC4gVGhpcyBpbnRlcm5hbCBBUEkgd2lsbCBiZSB1
c2VkIGluIHRoZSBhdHRhY2hlZCB0ZXN0LgorCisgICAgICAgIFRlc3Q6IGZhc3QvaW1hZ2VzL2Rl
Y29kZS1yZXNvbHZlLXJlamVjdC1uby1sZWFrLmh0bWwKKworICAgICAgICAqIGh0bWwvSFRNTElt
YWdlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6cGVuZGlu
Z0RlY29kZVByb21pc2VzQ291bnRGb3JUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKiBsb2FkZXIv
SW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZVByb21pc2VzKToKKyAg
ICAgICAgSW1hZ2VMb2FkZXI6OmRlY29kZSgpIGNhbGxzIEJpdG1hcEltYWdlOjpkZWNvZGUoKSBh
bmQgbW92ZXMgbV9kZWNvZGluZ1Byb21pc2VzCisgICAgICAgIGluIGNhcHR1cmUuIFdoZW4gZGVj
b2RpbmcgZmluaXNoZXMsIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHJlc29sdmUgdGhlCisg
ICAgICAgIHByb21pc2VzLiBCdXQgSW1hZ2VMb2FkZXIgbWlnaHQgZ2V0IGRlbGV0ZWQgYmVmb3Jl
IHRoZSBpbWFnZSBkZWNvZGluZworICAgICAgICBmaW5pc2hlcy4gU28gdGhpcyBmdW5jdGlvbiBo
YXMgdG8gYmUgc3RhdGljLgorCisgICAgICAgIChXZWJDb3JlOjpyZWplY3RQcm9taXNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUxvYWRlcjo6cmVzb2x2ZURlY29kZVByb21pc2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlTG9hZGVyOjpyZWplY3REZWNvZGVQcm9taXNlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VMb2FkZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlRGVj
b2RlUHJvbWlzZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cmVqZWN0RGVjb2RlUHJv
bWlzZXMpOiBEZWxldGVkLgorICAgICAgICAqIGxvYWRlci9JbWFnZUxvYWRlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VMb2FkZXI6OnBlbmRpbmdEZWNvZGVQcm9taXNlc0NvdW50Rm9yVGVz
dGluZyBjb25zdCk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzOjppbWFnZVBlbmRpbmdEZWNvZGVQcm9taXNlc0NvdW50Rm9yVGVz
dGluZyk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKiB0ZXN0aW5n
L0ludGVybmFscy5pZGw6CisKIDIwMTktMDktMDYgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBXaGVuIGRpc2FibGluZyBsZWdhY3kgcHJpdmF0
ZSBicm93c2luZyBmb3IgdGVzdGluZywgY2hhbmdlIHRoZSBTZXNzaW9uSUQgYmFjayB0byB3aGF0
IGl0IHdhcywgbm90IHRoZSBkZWZhdWx0U2Vzc2lvbklECkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gMjQ5NTc5KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9pbWFnZUxvYWRlci5oYXNQZW5kaW5nQWN0aXZpdHkoKTsgfQorICAgIHNpemVf
dCBwZW5kaW5nRGVjb2RlUHJvbWlzZXNDb3VudEZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBt
X2ltYWdlTG9hZGVyLnBlbmRpbmdEZWNvZGVQcm9taXNlc0NvdW50Rm9yVGVzdGluZygpOyB9CiAK
ICAgICBib29sIGNhbkNvbnRhaW5SYW5nZUVuZFBvaW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCShy
ZXZpc2lvbiAyNDk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsMjAgKzI3NSwzMiBAQCB2b2lkIEltYWdlTG9hZGVyOjp1
cGRhdGVGcm9tRWxlbWVudElnbm9yCiAgICAgdXBkYXRlRnJvbUVsZW1lbnQoKTsKIH0KIAotc3Rh
dGljIGlubGluZSB2b2lkIHJlc29sdmVEZWNvZGVQcm9taXNlcyhWZWN0b3I8UmVmUHRyPERlZmVy
cmVkUHJvbWlzZT4+JiYgcHJvbWlzZXMpCitzdGF0aWMgaW5saW5lIHZvaWQgcmVzb2x2ZVByb21p
c2VzKFZlY3RvcjxSZWZQdHI8RGVmZXJyZWRQcm9taXNlPj4mIHByb21pc2VzKQogewogICAgIEFT
U0VSVCghcHJvbWlzZXMuaXNFbXB0eSgpKTsKLSAgICBmb3IgKGF1dG8mIHByb21pc2UgOiBwcm9t
aXNlcykKKyAgICBhdXRvIHByb21pc2VzVG9CZVJlc29sdmVkID0gc3RkOjpleGNoYW5nZShwcm9t
aXNlcywgeyB9KTsKKyAgICBmb3IgKGF1dG8mIHByb21pc2UgOiBwcm9taXNlc1RvQmVSZXNvbHZl
ZCkKICAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQg
cmVqZWN0RGVjb2RlUHJvbWlzZXMoVmVjdG9yPFJlZlB0cjxEZWZlcnJlZFByb21pc2U+PiYmIHBy
b21pc2VzLCBjb25zdCBjaGFyKiBtZXNzYWdlKQorc3RhdGljIGlubGluZSB2b2lkIHJlamVjdFBy
b21pc2VzKFZlY3RvcjxSZWZQdHI8RGVmZXJyZWRQcm9taXNlPj4mIHByb21pc2VzLCBjb25zdCBj
aGFyKiBtZXNzYWdlKQogewogICAgIEFTU0VSVCghcHJvbWlzZXMuaXNFbXB0eSgpKTsKLSAgICBm
b3IgKGF1dG8mIHByb21pc2UgOiBwcm9taXNlcykKKyAgICBhdXRvIHByb21pc2VzVG9CZVJlamVj
dGVkID0gc3RkOjpleGNoYW5nZShwcm9taXNlcywgeyB9KTsKKyAgICBmb3IgKGF1dG8mIHByb21p
c2UgOiBwcm9taXNlc1RvQmVSZWplY3RlZCkKICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KEV4Y2Vw
dGlvbiB7IEVuY29kaW5nRXJyb3IsIG1lc3NhZ2UgfSk7CiB9CiAKK2lubGluZSB2b2lkIEltYWdl
TG9hZGVyOjpyZXNvbHZlRGVjb2RlUHJvbWlzZXMoKQoreworICAgIHJlc29sdmVQcm9taXNlcyht
X2RlY29kaW5nUHJvbWlzZXMpOworfQorCitpbmxpbmUgdm9pZCBJbWFnZUxvYWRlcjo6cmVqZWN0
RGVjb2RlUHJvbWlzZXMoY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICByZWplY3RQcm9taXNl
cyhtX2RlY29kaW5nUHJvbWlzZXMsIG1lc3NhZ2UpOworfQorCiB2b2lkIEltYWdlTG9hZGVyOjpu
b3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCiB7CiAgICAgQVNTRVJUKG1f
ZmFpbGVkTG9hZFVSTC5pc0VtcHR5KCkpOwpAQCAtMzEzLDcgKzMyNSw3IEBAIHZvaWQgSW1hZ2VM
b2FkZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFIKICAgICAgICAgZWxlbWVudCgpLmRvY3VtZW50
KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6U2VjdXJpdHksIE1lc3NhZ2VMZXZl
bDo6RXJyb3IsIG1lc3NhZ2UpOwogCiAgICAgICAgIGlmIChoYXNQZW5kaW5nRGVjb2RlUHJvbWlz
ZXMoKSkKLSAgICAgICAgICAgIHJlamVjdERlY29kZVByb21pc2VzKFdURk1vdmUobV9kZWNvZGlu
Z1Byb21pc2VzKSwgIkFjY2VzcyBjb250cm9sIGVycm9yLiIpOworICAgICAgICAgICAgcmVqZWN0
RGVjb2RlUHJvbWlzZXMoIkFjY2VzcyBjb250cm9sIGVycm9yLiIpOwogICAgICAgICAKICAgICAg
ICAgQVNTRVJUKCFtX2hhc1BlbmRpbmdMb2FkRXZlbnQpOwogCkBAIC0zMjUsNyArMzM3LDcgQEAg
dm9pZCBJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUgogCiAgICAgaWYgKG1faW1h
Z2UtPndhc0NhbmNlbGVkKCkpIHsKICAgICAgICAgaWYgKGhhc1BlbmRpbmdEZWNvZGVQcm9taXNl
cygpKQotICAgICAgICAgICAgcmVqZWN0RGVjb2RlUHJvbWlzZXMoV1RGTW92ZShtX2RlY29kaW5n
UHJvbWlzZXMpLCAiTG9hZGluZyB3YXMgY2FuY2VsZWQuIik7CisgICAgICAgICAgICByZWplY3RE
ZWNvZGVQcm9taXNlcygiTG9hZGluZyB3YXMgY2FuY2VsZWQuIik7CiAgICAgICAgIG1faGFzUGVu
ZGluZ0xvYWRFdmVudCA9IGZhbHNlOwogICAgICAgICAvLyBPbmx5IGNvbnNpZGVyIHVwZGF0aW5n
IHRoZSBwcm90ZWN0aW9uIHJlZi1jb3VudCBvZiB0aGUgRWxlbWVudCBpbW1lZGlhdGVseSBiZWZv
cmUgcmV0dXJuaW5nCiAgICAgICAgIC8vIGZyb20gdGhpcyBmdW5jdGlvbiBhcyBkb2luZyBzbyBt
aWdodCByZXN1bHQgaW4gdGhlIGRlc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VMb2FkZXIuCkBAIC00
MDIsMTMgKzQxNCwxMyBAQCB2b2lkIEltYWdlTG9hZGVyOjpkZWNvZGUoUmVmPERlZmVycmVkUHJv
CiAgICAgbV9kZWNvZGluZ1Byb21pc2VzLmFwcGVuZChXVEZNb3ZlKHByb21pc2UpKTsKIAogICAg
IGlmICghZWxlbWVudCgpLmRvY3VtZW50KCkuZG9tV2luZG93KCkpIHsKLSAgICAgICAgcmVqZWN0
RGVjb2RlUHJvbWlzZXMoV1RGTW92ZShtX2RlY29kaW5nUHJvbWlzZXMpLCAiSW5hY3RpdmUgZG9j
dW1lbnQuIik7CisgICAgICAgIHJlamVjdERlY29kZVByb21pc2VzKCJJbmFjdGl2ZSBkb2N1bWVu
dC4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEF0b21TdHJpbmcgYXR0ciA9IGVs
ZW1lbnQoKS5pbWFnZVNvdXJjZVVSTCgpOwogICAgIGlmIChzdHJpcExlYWRpbmdBbmRUcmFpbGlu
Z0hUTUxTcGFjZXMoYXR0cikuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlamVjdERlY29kZVByb21p
c2VzKFdURk1vdmUobV9kZWNvZGluZ1Byb21pc2VzKSwgIk1pc3Npbmcgc291cmNlIFVSTC4iKTsK
KyAgICAgICAgcmVqZWN0RGVjb2RlUHJvbWlzZXMoIk1pc3Npbmcgc291cmNlIFVSTC4iKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDIxLDI0ICs0MzMsMjQgQEAgdm9pZCBJbWFnZUxv
YWRlcjo6ZGVjb2RlKCkKICAgICBBU1NFUlQoaGFzUGVuZGluZ0RlY29kZVByb21pc2VzKCkpOwog
ICAgIAogICAgIGlmICghZWxlbWVudCgpLmRvY3VtZW50KCkuZG9tV2luZG93KCkpIHsKLSAgICAg
ICAgcmVqZWN0RGVjb2RlUHJvbWlzZXMoV1RGTW92ZShtX2RlY29kaW5nUHJvbWlzZXMpLCAiSW5h
Y3RpdmUgZG9jdW1lbnQuIik7CisgICAgICAgIHJlamVjdERlY29kZVByb21pc2VzKCJJbmFjdGl2
ZSBkb2N1bWVudC4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICghbV9pbWFn
ZSB8fCAhbV9pbWFnZS0+aW1hZ2UoKSB8fCBtX2ltYWdlLT5lcnJvck9jY3VycmVkKCkpIHsKLSAg
ICAgICAgcmVqZWN0RGVjb2RlUHJvbWlzZXMoV1RGTW92ZShtX2RlY29kaW5nUHJvbWlzZXMpLCAi
TG9hZGluZyBlcnJvci4iKTsKKyAgICAgICAgcmVqZWN0RGVjb2RlUHJvbWlzZXMoIkxvYWRpbmcg
ZXJyb3IuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBJbWFnZSogaW1hZ2UgPSBt
X2ltYWdlLT5pbWFnZSgpOwogICAgIGlmICghaXM8Qml0bWFwSW1hZ2U+KGltYWdlKSkgewotICAg
ICAgICByZXNvbHZlRGVjb2RlUHJvbWlzZXMoV1RGTW92ZShtX2RlY29kaW5nUHJvbWlzZXMpKTsK
KyAgICAgICAgcmVzb2x2ZURlY29kZVByb21pc2VzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBhdXRvJiBiaXRtYXBJbWFnZSA9IGRvd25jYXN0PEJpdG1hcEltYWdlPigqaW1hZ2Up
OwogICAgIGJpdG1hcEltYWdlLmRlY29kZShbcHJvbWlzZXMgPSBXVEZNb3ZlKG1fZGVjb2RpbmdQ
cm9taXNlcyldKCkgbXV0YWJsZSB7Ci0gICAgICAgIHJlc29sdmVEZWNvZGVQcm9taXNlcyhXVEZN
b3ZlKHByb21pc2VzKSk7CisgICAgICAgIHJlc29sdmVQcm9taXNlcyhwcm9taXNlcyk7CiAgICAg
fSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5oCShyZXZpc2lvbiAy
NDk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNjEsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgQ2FjaGVkSW1hZ2UqIGltYWdlKCkg
Y29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQogICAgIHZvaWQgY2xlYXJJbWFnZSgpOyAv
LyBDYW5jZWxzIHBlbmRpbmcgYmVmb3JlbG9hZCBhbmQgbG9hZCBldmVudHMsIGFuZCBkb2Vzbid0
IGRpc3BhdGNoIG5ldyBvbmVzLgogICAgIAorICAgIHNpemVfdCBwZW5kaW5nRGVjb2RlUHJvbWlz
ZXNDb3VudEZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBtX2RlY29kaW5nUHJvbWlzZXMuc2l6
ZSgpOyB9CiAgICAgdm9pZCBkZWNvZGUoUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CiAKICAgICB2
b2lkIHNldExvYWRNYW51YWxseShib29sIGxvYWRNYW51YWxseSkgeyBtX2xvYWRNYW51YWxseSA9
IGxvYWRNYW51YWxseTsgfQpAQCAtOTUsNiArOTYsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xl
YXJGYWlsZWRMb2FkVVJMKCk7CiAKICAgICBib29sIGhhc1BlbmRpbmdEZWNvZGVQcm9taXNlcygp
IGNvbnN0IHsgcmV0dXJuICFtX2RlY29kaW5nUHJvbWlzZXMuaXNFbXB0eSgpOyB9CisgICAgdm9p
ZCByZXNvbHZlRGVjb2RlUHJvbWlzZXMoKTsKKyAgICB2b2lkIHJlamVjdERlY29kZVByb21pc2Vz
KGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwogICAgIHZvaWQgZGVjb2RlKCk7CiAgICAgCiAgICAgdm9p
ZCB0aW1lckZpcmVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCShy
ZXZpc2lvbiAyNDk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3MCw2ICs4NzAsMTEgQEAgYm9vbCBJbnRlcm5hbHM6OmlzSW1h
Z2VBbmltYXRpbmcoSFRNTEltYQogICAgIHJldHVybiBpbWFnZSAmJiAoaW1hZ2UtPmlzQW5pbWF0
aW5nKCkgfHwgaW1hZ2UtPmFuaW1hdGlvblBlbmRpbmcoKSk7CiB9CiAKK3Vuc2lnbmVkIEludGVy
bmFsczo6aW1hZ2VQZW5kaW5nRGVjb2RlUHJvbWlzZXNDb3VudEZvclRlc3RpbmcoSFRNTEltYWdl
RWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxlbWVudC5wZW5kaW5nRGVjb2RlUHJv
bWlzZXNDb3VudEZvclRlc3RpbmcoKTsKK30KKwogdm9pZCBJbnRlcm5hbHM6OnNldENsZWFyRGVj
b2RlckFmdGVyQXN5bmNGcmFtZVJlcXVlc3RGb3JUZXN0aW5nKEhUTUxJbWFnZUVsZW1lbnQmIGVs
ZW1lbnQsIGJvb2wgZW5hYmxlZCkKIHsKICAgICBpZiAoYXV0byogYml0bWFwSW1hZ2UgPSBiaXRt
YXBJbWFnZUZyb21JbWFnZUVsZW1lbnQoZWxlbWVudCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmgJKHJldmlzaW9uIDI0OTU3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw2ICsxNTQsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRJbWFnZUZyYW1lRGVjb2RpbmdEdXJhdGlvbihIVE1MSW1hZ2VFbGVtZW50Jiwg
ZmxvYXQgZHVyYXRpb24pOwogICAgIHZvaWQgcmVzZXRJbWFnZUFuaW1hdGlvbihIVE1MSW1hZ2VF
bGVtZW50Jik7CiAgICAgYm9vbCBpc0ltYWdlQW5pbWF0aW5nKEhUTUxJbWFnZUVsZW1lbnQmKTsK
KyAgICB1bnNpZ25lZCBpbWFnZVBlbmRpbmdEZWNvZGVQcm9taXNlc0NvdW50Rm9yVGVzdGluZyhI
VE1MSW1hZ2VFbGVtZW50Jik7CiAgICAgdm9pZCBzZXRDbGVhckRlY29kZXJBZnRlckFzeW5jRnJh
bWVSZXF1ZXN0Rm9yVGVzdGluZyhIVE1MSW1hZ2VFbGVtZW50JiwgYm9vbCBlbmFibGVkKTsKICAg
ICB1bnNpZ25lZCBpbWFnZURlY29kZUNvdW50KEhUTUxJbWFnZUVsZW1lbnQmKTsKICAgICB1bnNp
Z25lZCBwZGZEb2N1bWVudENhY2hpbmdDb3VudChIVE1MSW1hZ2VFbGVtZW50Jik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCShyZXZpc2lvbiAyNDk1NzkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw2
ICszNjksNyBAQCBlbnVtIENvbXBvc2l0aW5nUG9saWN5IHsKICAgICB2b2lkIHNldEltYWdlRnJh
bWVEZWNvZGluZ0R1cmF0aW9uKEhUTUxJbWFnZUVsZW1lbnQgZWxlbWVudCwgdW5yZXN0cmljdGVk
IGZsb2F0IGR1cmF0aW9uKTsKICAgICB2b2lkIHJlc2V0SW1hZ2VBbmltYXRpb24oSFRNTEltYWdl
RWxlbWVudCBlbGVtZW50KTsKICAgICBib29sZWFuIGlzSW1hZ2VBbmltYXRpbmcoSFRNTEltYWdl
RWxlbWVudCBlbGVtZW50KTsKKyAgICB1bnNpZ25lZCBsb25nIGltYWdlUGVuZGluZ0RlY29kZVBy
b21pc2VzQ291bnRGb3JUZXN0aW5nKEhUTUxJbWFnZUVsZW1lbnQgZWxlbWVudCk7CiAgICAgdm9p
ZCBzZXRDbGVhckRlY29kZXJBZnRlckFzeW5jRnJhbWVSZXF1ZXN0Rm9yVGVzdGluZyhIVE1MSW1h
Z2VFbGVtZW50IGVsZW1lbnQsIGJvb2xlYW4gZW5hYmxlZCk7CiAgICAgdW5zaWduZWQgbG9uZyBp
bWFnZURlY29kZUNvdW50KEhUTUxJbWFnZUVsZW1lbnQgZWxlbWVudCk7CiAgICAgdW5zaWduZWQg
bG9uZyBwZGZEb2N1bWVudENhY2hpbmdDb3VudChIVE1MSW1hZ2VFbGVtZW50IGVsZW1lbnQpOwpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gMjQ5NTc5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTktMDktMDYgIFNhaWQgQWJvdS1IYWxsYXdh
ICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9OIChyMjQ5MzY3
KTogbV9kZWNvZGluZ1Byb21pc2VzIGdyb3dzIGluZGVmaW5pdGVseSB1bnRpbCBJbWFnZUxvYWRl
ciBkZXN0cnVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjAxNDAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWW91ZW5uIEZhYmxldCBhbmQgRGFu
aWVsIEJhdGVzLgorCisgICAgICAgICogZmFzdC9pbWFnZXMvZGVjb2RlLXJlc29sdmUtcmVqZWN0
LW5vLWxlYWstZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ltYWdlcy9kZWNv
ZGUtcmVzb2x2ZS1yZWplY3Qtbm8tbGVhay5odG1sOiBBZGRlZC4KKwogMjAxOS0wOS0wNiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIGZpeCB0eXBvIGluIHIyNDkyMTYKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaW1hZ2Vz
L2RlY29kZS1yZXNvbHZlLXJlamVjdC1uby1sZWFrLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9kZWNvZGUtcmVzb2x2ZS1yZWplY3Qtbm8tbGVhay1l
eHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvZGVj
b2RlLXJlc29sdmUtcmVqZWN0LW5vLWxlYWstZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTUgQEAKK1Rlc3QgSFRNTEltYWdlRWxlbWVudDo6ZGVjb2RlKCkgZG9lcyBub3Qg
bGVhayB0aGUgcGVuZGluZyBwcm9taXNlcyBhZnRlciByZXNvbHZpbmcgb3IgcmVqZWN0aW5nIHRo
ZW0uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitEZWNvZGluZyBhIGJpdG1hcCBp
bWFnZSAtIHByb21pc2VzIHdpbGwgYmUgcmVzb2x2ZWQ6CitQQVNTIGludGVybmFscy5pbWFnZVBl
bmRpbmdEZWNvZGVQcm9taXNlc0NvdW50Rm9yVGVzdGluZyhpbWFnZSkgaXMgMAorRGVjb2Rpbmcg
YSBTVkcgaW1hZ2UgLSBwcm9taXNlcyB3aWxsIGJlIHJlc29sdmVkOgorUEFTUyBpbnRlcm5hbHMu
aW1hZ2VQZW5kaW5nRGVjb2RlUHJvbWlzZXNDb3VudEZvclRlc3RpbmcoaW1hZ2UpIGlzIDAKK0Rl
Y29kaW5nIGEgYnJva2VuIGltYWdlIC0gcHJvbWlzZXMgd2lsbCBiZSByZWplY3RlZDoKK1BBU1Mg
aW50ZXJuYWxzLmltYWdlUGVuZGluZ0RlY29kZVByb21pc2VzQ291bnRGb3JUZXN0aW5nKGltYWdl
KSBpcyAwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvZGVjb2RlLXJlc29sdmUtcmVqZWN0LW5v
LWxlYWsuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9kZWNvZGUt
cmVzb2x2ZS1yZWplY3Qtbm8tbGVhay5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvaW1hZ2VzL2RlY29kZS1yZXNvbHZlLXJlamVjdC1uby1sZWFrLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxib2R5PgorICAgIDxzY3Jp
cHQ+CisgICAgICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZTsKKworICAgICAgICBkZXNjcmlwdGlv
bignVGVzdCBIVE1MSW1hZ2VFbGVtZW50OjpkZWNvZGUoKSBkb2VzIG5vdCBsZWFrIHRoZSBwZW5k
aW5nIHByb21pc2VzIGFmdGVyIHJlc29sdmluZyBvciByZWplY3RpbmcgdGhlbS4nKTsKKyAgICAg
ICAganNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICAgICAgZnVuY3Rpb24gZGVjb2RlTXVsdGlw
bGUoaW1hZ2UsIG11bHRpcGxlQ291bnQpIHsKKyAgICAgICAgICAgIHZhciBwcm9taXNlcyA9IFtd
OworICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbXVsdGlwbGVDb3VudDsgKytp
bmRleCkKKyAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltYWdlLmRlY29kZSgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBwcm9taXNlczsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IHJlc29sdmVTaW5nbGUoaW1hZ2UsIHNpbmdsZUNvdW50KSB7CisgICAgICAgICAgICBpZiAoIXNp
bmdsZUNvdW50KQorICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKKyAg
ICAgICAgICAgIHJldHVybiBpbWFnZS5kZWNvZGUoKS50aGVuKCgpID0+IHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzb2x2ZVNpbmdsZShpbWFnZSwgc2luZ2xlQ291bnQgLSAxKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcmVqZWN0U2luZ2xlKGlt
YWdlLCBzaW5nbGVDb3VudCkgeworICAgICAgICAgICAgaWYgKCFzaW5nbGVDb3VudCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTsKKyAgICAgICAgICAgIHJldHVybiBp
bWFnZS5kZWNvZGUoKS5jYXRjaCgoKSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVj
dFNpbmdsZShpbWFnZSwgc2luZ2xlQ291bnQgLSAxKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9CisKKyAgICAgICAgZnVuY3Rpb24gZGVjb2RlQml0bWFwSW1hZ2UoaW1hZ2UsIG11bHRpcGxl
Q291bnQsIHNpbmdsZUNvdW50KSB7CisgICAgICAgICAgICBkZWJ1ZygiRGVjb2RpbmcgYSBiaXRt
YXAgaW1hZ2UgLSBwcm9taXNlcyB3aWxsIGJlIHJlc29sdmVkOiIpOworICAgICAgICAgICAgaW1h
Z2Uuc3JjID0gInJlc291cmNlcy9yZWQtNDAweDQwMC5wbmciOworICAgICAgICAgICAgcmV0dXJu
IFByb21pc2UuYWxsKGRlY29kZU11bHRpcGxlKGltYWdlLCBtdWx0aXBsZUNvdW50KSkudGhlbigo
KSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVTaW5nbGUoaW1hZ2UsIHNpbmds
ZUNvdW50KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24g
ZGVjb2RlU1ZHSW1hZ2UoaW1hZ2UsIG11bHRpcGxlQ291bnQsIHNpbmdsZUNvdW50KSB7CisgICAg
ICAgICAgICBkZWJ1ZygiRGVjb2RpbmcgYSBTVkcgaW1hZ2UgLSBwcm9taXNlcyB3aWxsIGJlIHJl
c29sdmVkOiIpOworICAgICAgICAgICAgaW1hZ2Uuc3JjID0gInJlc291cmNlcy9ncmVlbi0xMDB4
MTAwLnN2ZyI7CisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoZGVjb2RlTXVsdGlwbGUo
aW1hZ2UsIG11bHRpcGxlQ291bnQpKS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVzb2x2ZVNpbmdsZShpbWFnZSwgc2luZ2xlQ291bnQpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBkZWNvZGVCcm9rZW5JbWFnZShpbWFnZSwgbXVs
dGlwbGVDb3VudCwgc2luZ2xlQ291bnQpIHsKKyAgICAgICAgICAgIGRlYnVnKCJEZWNvZGluZyBh
IGJyb2tlbiBpbWFnZSAtIHByb21pc2VzIHdpbGwgYmUgcmVqZWN0ZWQ6Iik7CisgICAgICAgICAg
ICBpbWFnZS5zcmMgPSAiIjsKKyAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChkZWNvZGVN
dWx0aXBsZShpbWFnZSwgbXVsdGlwbGVDb3VudCkpLmNhdGNoKCgpID0+IHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVqZWN0U2luZ2xlKGltYWdlLCBzaW5nbGVDb3VudCk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRl
Y29kZUJpdG1hcEltYWdlKGltYWdlLCAxMCwgMTApLnRoZW4oKCkgPT4geworICAgICAgICAgICAg
ICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICAgICAgICAgICAgICBzaG91bGRCZVpl
cm8oImludGVybmFscy5pbWFnZVBlbmRpbmdEZWNvZGVQcm9taXNlc0NvdW50Rm9yVGVzdGluZyhp
bWFnZSkiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlU1ZHSW1hZ2UoaW1hZ2UsIDEw
LCAxMCk7CisgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICBpZiAo
d2luZG93LmludGVybmFscykKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmVaZXJvKCJpbnRl
cm5hbHMuaW1hZ2VQZW5kaW5nRGVjb2RlUHJvbWlzZXNDb3VudEZvclRlc3RpbmcoaW1hZ2UpIik7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlY29kZUJyb2tlbkltYWdlKGltYWdlLCAxMCwgMTAp
OworICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4geworICAgICAgICAgICAgICAgIGlmICh3aW5k
b3cuaW50ZXJuYWxzKQorICAgICAgICAgICAgICAgICAgICBzaG91bGRCZVplcm8oImludGVybmFs
cy5pbWFnZVBlbmRpbmdEZWNvZGVQcm9taXNlc0NvdW50Rm9yVGVzdGluZyhpbWFnZSkiKTsKKyAg
ICAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
KSgpOworICAgIDwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
</data>

          </attachment>
      

    </bug>

</bugzilla>