<?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>179165</bug_id>
          
          <creation_ts>2017-11-02 03:55:55 -0700</creation_ts>
          <short_desc>[GStreamer] move MediaSample implementation out of mse/</short_desc>
          <delta_ts>2018-01-03 02:59:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Philippe Normand">pnormand</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>eocanha</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1367289</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2017-11-02 03:55:55 -0700</bug_when>
    <thetext>This isn&apos;t specific to MSE and can be reused elsewhere (for WebRTC). So it should be moved one directory down. Also the ::platformMediaSample() method should be easy to implement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1385394</commentid>
    <comment_count>1</comment_count>
      <attachid>330370</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-01-03 01:01:10 -0800</bug_when>
    <thetext>Created attachment 330370
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1385399</commentid>
    <comment_count>2</comment_count>
      <attachid>330370</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-01-03 01:30:47 -0800</bug_when>
    <thetext>Comment on attachment 330370
Patch

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

I have a few comments, I know you are only copying the code, but it&apos;s probably a good time to clean it up.

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerMediaSample.cpp:30
&gt; +GStreamerMediaSample::GStreamerMediaSample(GstSample* sample, const FloatSize&amp; presentationSize, const AtomicString&amp; trackId)

This could receive a GRefPtr&lt;GstSample&gt;&amp;&amp; instead.

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerMediaSample.cpp:31
&gt; +    : MediaSample()

Is this needed?

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerMediaSample.cpp:36
&gt; +    , m_size(0)

Move this to the header.

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerMediaSample.cpp:38
&gt; +    , m_flags(MediaSample::IsSync)

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerMediaSample.cpp:77
&gt; +    GStreamerMediaSample* gstreamerMediaSample = new GStreamerMediaSample(nullptr, presentationSize, trackId);
&gt; +    gstreamerMediaSample-&gt;m_pts = pts;
&gt; +    gstreamerMediaSample-&gt;m_dts = dts;
&gt; +    gstreamerMediaSample-&gt;m_duration = duration;
&gt; +    gstreamerMediaSample-&gt;m_flags = MediaSample::IsNonDisplaying;
&gt; +    return adoptRef(*gstreamerMediaSample);

Since constructor is private, I would use a different constructor instead of using the early return when sample is nullptr in the constructor.

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerMediaSample.cpp:95
&gt; +    GstBuffer* buffer = gst_sample_get_buffer(m_sample.get());
&gt; +    if (buffer) {

if (auto* buffer = gst_sample_get_buffer(m_sample.get()) {

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerMediaSample.cpp:104
&gt; +    PlatformSample sample = { PlatformSample::GStreamerSampleType, { .gstSample = m_sample.get() } };
&gt; +    return sample;

Can&apos;t we just return { PlatformSample::GStreamerSampleType, { .gstSample = m_sample.get() } }; ?

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerMediaSample.h:28
&gt; +#include &lt;gst/gst.h&gt;

Would it be possible to forward declare GstSample and GstCaps? or is this required for anything else?

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerMediaSample.h:33
&gt; +class GStreamerMediaSample : public MediaSample {

This is the GStreamer implementation of MediaSample, so I would call this MediaSampleGStreamer instead. Also add final if no other class derives from this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1385404</commentid>
    <comment_count>3</comment_count>
      <attachid>330370</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-01-03 02:18:27 -0800</bug_when>
    <thetext>Comment on attachment 330370
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerMediaSample.cpp:31
&gt;&gt; +    : MediaSample()
&gt; 
&gt; Is this needed?

Likely not!

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerMediaSample.cpp:36
&gt;&gt; +    , m_size(0)
&gt; 
&gt; Move this to the header.

Sure!

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerMediaSample.cpp:38
&gt;&gt; +    , m_flags(MediaSample::IsSync)
&gt; 
&gt; Ditto.

Ok!

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerMediaSample.cpp:77
&gt;&gt; +    return adoptRef(*gstreamerMediaSample);
&gt; 
&gt; Since constructor is private, I would use a different constructor instead of using the early return when sample is nullptr in the constructor.

Ok!

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerMediaSample.cpp:95
&gt;&gt; +    if (buffer) {
&gt; 
&gt; if (auto* buffer = gst_sample_get_buffer(m_sample.get()) {

Ok!

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerMediaSample.cpp:104
&gt;&gt; +    return sample;
&gt; 
&gt; Can&apos;t we just return { PlatformSample::GStreamerSampleType, { .gstSample = m_sample.get() } }; ?

../../Source/WebCore/platform/graphics/gstreamer/GStreamerMediaSample.cpp:98:83: internal compiler error: in reshape_init_class, at cp/decl.c:5802
     return { PlatformSample::GStreamerSampleType, { .gstSample = m_sample.get() } };
                                                                                   ^

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerMediaSample.h:28
&gt;&gt; +#include &lt;gst/gst.h&gt;
&gt; 
&gt; Would it be possible to forward declare GstSample and GstCaps? or is this required for anything else?

Forward declaration is already done in GRefPtrGStreamer.h. But yeah you are right.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerMediaSample.h:33
&gt;&gt; +class GStreamerMediaSample : public MediaSample {
&gt; 
&gt; This is the GStreamer implementation of MediaSample, so I would call this MediaSampleGStreamer instead. Also add final if no other class derives from this one.

Ok, I&apos;ll also rename the files then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1385407</commentid>
    <comment_count>4</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-01-03 02:58:48 -0800</bug_when>
    <thetext>Committed r226357: &lt;https://trac.webkit.org/changeset/226357&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1385408</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-03 02:59:33 -0800</bug_when>
    <thetext>&lt;rdar://problem/36272737&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330370</attachid>
            <date>2018-01-03 01:01:10 -0800</date>
            <delta_ts>2018-01-03 01:30:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179165-20180103090108.patch</filename>
            <type>text/plain</type>
            <size>21564</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2MzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGZlY2Y5YjQyYTVkM2Q0
YTI1YTcxMjY0ODYwMTI1ZjY0ZjZkODEzZS4uYjVhNDRiMzI3NTE2ODk4ZGVjM2YyNTkxZTdjZDc3
MzhkMjhjZDg1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE4LTAxLTAzICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBHU3RyZWFtZXJN
ZWRpYVNhbXBsZTogbW92ZSBvdXQgb2YgbXNlLworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5MTY1CisgICAgICAgIE5lZWQgdGhlIGJ1ZyBVUkwgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIG1vZHVsZSBpc24ndCBzcGVjaWZpYyB0byBNU0UgYW5kIGNh
biBwb3RlbnRpYWxseSBiZSByZXVzZWQKKyAgICAgICAgZWxzZXdoZXJlLCBmb3IgV2ViUlRDIGZv
ciBpbnN0YW5jZS4gQWRkaXRpb25hbGx5IHRoZQorICAgICAgICA6OnBsYXRmb3JtU2FtcGxlKCkg
bWV0aG9kIHdhcyBpbXBsZW1lbnRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL0dTdHJlYW1lci5j
bWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9NZWRpYVNhbXBsZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVNhbXBsZS5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0dTdHJl
YW1lck1lZGlhU2FtcGxlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhU2Ft
cGxlOjpwbGF0Zm9ybVNhbXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dTdHJlYW1lck1lZGlhU2FtcGxlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0dTdHJlYW1lck1lZGlhU2FtcGxlLmguCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrUGlwZWxpbmU6OmVucXVldWVTYW1wbGUp
OgorCiAyMDE4LTAxLTAzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KIAogICAgICAgICBbR1RLXSBDcmFzaCBkZXN0cm95aW5nIFdlYkNvcmU6OkZpbGVNb25pdG9y
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKaW5kZXggN2UyMjRkNzc0NzU0
NGFkMzdkMzg4ZDdjNzRiOWY2ZTYyNTA4ZDgwZi4uYzA0ZThmY2NjODY5OGIxZjQwOTMzYmMzNTg4
ZTk4NmQxZmY4NzExNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVh
bWVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpA
QCAtOCw2ICs4LDcgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQogICAg
IGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcAorICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTYW1wbGUuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJVdGlsaXRpZXMuY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVh
bWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMjUsNyArMjYsNiBAQCBpZiAoRU5BQkxFX1ZJREVPIE9S
IEVOQUJMRV9XRUJfQVVESU8pCiAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L21zZS9BcHBlbmRQaXBlbGluZS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9HU3RyZWFtZXJNZWRpYURlc2NyaXB0aW9uLmNwcAotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL0dTdHJlYW1lck1lZGlhU2FtcGxlLmNwcAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNv
dXJjZUNsaWVudEdTdHJlYW1lck1TRS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9NZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9N
ZWRpYVNhbXBsZS5oCmluZGV4IDlmM2ZjZmQwNzY2MzQwZTc0YzE4NTYzMjQ0ZWY3NDliODcyYWI2
MDEuLmI0ZWM0OWNiMWE5YjBhZDhlZjY1NTgwM2MyM2VmZjU3ZGRiYzBlZDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTWVkaWFTYW1wbGUuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPHd0
Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCiB0eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1
ZmZlciAqQ01TYW1wbGVCdWZmZXJSZWY7Cit0eXBlZGVmIHN0cnVjdCBfR3N0U2FtcGxlIEdzdFNh
bXBsZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MywxMCArNDQsMTIgQEAgc3RydWN0
IFBsYXRmb3JtU2FtcGxlIHsKICAgICAgICAgTm9uZSwKICAgICAgICAgTW9ja1NhbXBsZUJveFR5
cGUsCiAgICAgICAgIENNU2FtcGxlQnVmZmVyVHlwZSwKKyAgICAgICAgR1N0cmVhbWVyU2FtcGxl
VHlwZSwKICAgICB9IHR5cGU7CiAgICAgdW5pb24gewogICAgICAgICBNb2NrU2FtcGxlQm94KiBt
b2NrU2FtcGxlQm94OwogICAgICAgICBDTVNhbXBsZUJ1ZmZlclJlZiBjbVNhbXBsZUJ1ZmZlcjsK
KyAgICAgICAgR3N0U2FtcGxlKiBnc3RTYW1wbGU7CiAgICAgfSBzYW1wbGU7CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVh
bWVyTWVkaWFTYW1wbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dTdHJlYW1lck1lZGlhU2FtcGxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZDdiMzhmOWNlNzk4
OGU4MjM0NjcxZWY3ZTg3ZDkwNDEyMTAzZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU2FtcGxlLmNw
cApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyTWVkaWFTYW1wbGUuaCIKKworI2luY2x1ZGUg
IkdTdHJlYW1lclV0aWxpdGllcy5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVB
TUVSKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dTdHJlYW1lck1lZGlhU2FtcGxlOjpHU3Ry
ZWFtZXJNZWRpYVNhbXBsZShHc3RTYW1wbGUqIHNhbXBsZSwgY29uc3QgRmxvYXRTaXplJiBwcmVz
ZW50YXRpb25TaXplLCBjb25zdCBBdG9taWNTdHJpbmcmIHRyYWNrSWQpCisgICAgOiBNZWRpYVNh
bXBsZSgpCisgICAgLCBtX3B0cyhNZWRpYVRpbWU6Onplcm9UaW1lKCkpCisgICAgLCBtX2R0cyhN
ZWRpYVRpbWU6Onplcm9UaW1lKCkpCisgICAgLCBtX2R1cmF0aW9uKE1lZGlhVGltZTo6emVyb1Rp
bWUoKSkKKyAgICAsIG1fdHJhY2tJZCh0cmFja0lkKQorICAgICwgbV9zaXplKDApCisgICAgLCBt
X3ByZXNlbnRhdGlvblNpemUocHJlc2VudGF0aW9uU2l6ZSkKKyAgICAsIG1fZmxhZ3MoTWVkaWFT
YW1wbGU6OklzU3luYykKK3sKKworICAgIGlmICghc2FtcGxlKQorICAgICAgICByZXR1cm47CisK
KyAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihzYW1wbGUpOwor
ICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGNyZWF0ZU1lZGlh
VGltZSA9CisgICAgICAgIFtdKEdzdENsb2NrVGltZSB0aW1lKSAtPiBNZWRpYVRpbWUgeworICAg
ICAgICAgICAgcmV0dXJuIE1lZGlhVGltZShHU1RfVElNRV9BU19VU0VDT05EUyh0aW1lKSwgR19V
U0VDX1BFUl9TRUMpOworICAgICAgICB9OworCisgICAgaWYgKEdTVF9CVUZGRVJfUFRTX0lTX1ZB
TElEKGJ1ZmZlcikpCisgICAgICAgIG1fcHRzID0gY3JlYXRlTWVkaWFUaW1lKEdTVF9CVUZGRVJf
UFRTKGJ1ZmZlcikpOworICAgIGlmIChHU1RfQlVGRkVSX0RUU19JU19WQUxJRChidWZmZXIpIHx8
IEdTVF9CVUZGRVJfUFRTX0lTX1ZBTElEKGJ1ZmZlcikpCisgICAgICAgIG1fZHRzID0gY3JlYXRl
TWVkaWFUaW1lKEdTVF9CVUZGRVJfRFRTX09SX1BUUyhidWZmZXIpKTsKKyAgICBpZiAoR1NUX0JV
RkZFUl9EVVJBVElPTl9JU19WQUxJRChidWZmZXIpKQorICAgICAgICBtX2R1cmF0aW9uID0gY3Jl
YXRlTWVkaWFUaW1lKEdTVF9CVUZGRVJfRFVSQVRJT04oYnVmZmVyKSk7CisKKyAgICBtX3NpemUg
PSBnc3RfYnVmZmVyX2dldF9zaXplKGJ1ZmZlcik7CisgICAgbV9zYW1wbGUgPSBzYW1wbGU7CisK
KyAgICBpZiAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19E
RUxUQV9VTklUKSkKKyAgICAgICAgbV9mbGFncyA9IE1lZGlhU2FtcGxlOjpOb25lOworCisgICAg
aWYgKEdTVF9CVUZGRVJfRkxBR19JU19TRVQoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfREVDT0RF
X09OTFkpKQorICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8TWVkaWFTYW1wbGU6OlNhbXBs
ZUZsYWdzPihtX2ZsYWdzIHwgTWVkaWFTYW1wbGU6OklzTm9uRGlzcGxheWluZyk7Cit9CisKK1Jl
ZjxHU3RyZWFtZXJNZWRpYVNhbXBsZT4gR1N0cmVhbWVyTWVkaWFTYW1wbGU6OmNyZWF0ZUZha2VT
YW1wbGUoR3N0Q2FwcyosIE1lZGlhVGltZSBwdHMsIE1lZGlhVGltZSBkdHMsIE1lZGlhVGltZSBk
dXJhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBwcmVzZW50YXRpb25TaXplLCBjb25zdCBBdG9taWNT
dHJpbmcmIHRyYWNrSWQpCit7CisgICAgR1N0cmVhbWVyTWVkaWFTYW1wbGUqIGdzdHJlYW1lck1l
ZGlhU2FtcGxlID0gbmV3IEdTdHJlYW1lck1lZGlhU2FtcGxlKG51bGxwdHIsIHByZXNlbnRhdGlv
blNpemUsIHRyYWNrSWQpOworICAgIGdzdHJlYW1lck1lZGlhU2FtcGxlLT5tX3B0cyA9IHB0czsK
KyAgICBnc3RyZWFtZXJNZWRpYVNhbXBsZS0+bV9kdHMgPSBkdHM7CisgICAgZ3N0cmVhbWVyTWVk
aWFTYW1wbGUtPm1fZHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICBnc3RyZWFtZXJNZWRpYVNhbXBs
ZS0+bV9mbGFncyA9IE1lZGlhU2FtcGxlOjpJc05vbkRpc3BsYXlpbmc7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpnc3RyZWFtZXJNZWRpYVNhbXBsZSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFT
YW1wbGU6OmFwcGx5UHRzT2Zmc2V0KE1lZGlhVGltZSB0aW1lc3RhbXBPZmZzZXQpCit7CisgICAg
aWYgKG1fcHRzID4gdGltZXN0YW1wT2Zmc2V0KSB7CisgICAgICAgIG1fZHVyYXRpb24gPSBtX2R1
cmF0aW9uICsgKG1fcHRzIC0gdGltZXN0YW1wT2Zmc2V0KTsKKyAgICAgICAgbV9wdHMgPSB0aW1l
c3RhbXBPZmZzZXQ7CisgICAgfQorfQorCit2b2lkIEdTdHJlYW1lck1lZGlhU2FtcGxlOjpvZmZz
ZXRUaW1lc3RhbXBzQnkoY29uc3QgTWVkaWFUaW1lJiB0aW1lc3RhbXBPZmZzZXQpCit7CisgICAg
aWYgKCF0aW1lc3RhbXBPZmZzZXQpCisgICAgICAgIHJldHVybjsKKyAgICBtX3B0cyArPSB0aW1l
c3RhbXBPZmZzZXQ7CisgICAgbV9kdHMgKz0gdGltZXN0YW1wT2Zmc2V0OworICAgIEdzdEJ1ZmZl
ciogYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKG1fc2FtcGxlLmdldCgpKTsKKyAgICBp
ZiAoYnVmZmVyKSB7CisgICAgICAgIEdTVF9CVUZGRVJfUFRTKGJ1ZmZlcikgPSB0b0dzdENsb2Nr
VGltZShtX3B0cyk7CisgICAgICAgIEdTVF9CVUZGRVJfRFRTKGJ1ZmZlcikgPSB0b0dzdENsb2Nr
VGltZShtX2R0cyk7CisgICAgfQorfQorCitQbGF0Zm9ybVNhbXBsZSBHU3RyZWFtZXJNZWRpYVNh
bXBsZTo6cGxhdGZvcm1TYW1wbGUoKQoreworICAgIFBsYXRmb3JtU2FtcGxlIHNhbXBsZSA9IHsg
UGxhdGZvcm1TYW1wbGU6OkdTdHJlYW1lclNhbXBsZVR5cGUsIHsgLmdzdFNhbXBsZSA9IG1fc2Ft
cGxlLmdldCgpIH0gfTsKKyAgICByZXR1cm4gc2FtcGxlOworfQorCitSZWY8TWVkaWFTYW1wbGU+
IEdTdHJlYW1lck1lZGlhU2FtcGxlOjpjcmVhdGVOb25EaXNwbGF5aW5nQ29weSgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3NhbXBsZSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZha2VTYW1wbGUobnVs
bHB0ciwgbV9wdHMsIG1fZHRzLCBtX2R1cmF0aW9uLCBtX3ByZXNlbnRhdGlvblNpemUsIG1fdHJh
Y2tJZCk7CisKKyAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlciht
X3NhbXBsZS5nZXQoKSk7CisgICAgR1NUX0JVRkZFUl9GTEFHX1NFVChidWZmZXIsIEdTVF9CVUZG
RVJfRkxBR19ERUNPREVfT05MWSk7CisKKyAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X3NhbXBsZV9n
ZXRfY2FwcyhtX3NhbXBsZS5nZXQoKSk7CisgICAgR3N0U2VnbWVudCogc2VnbWVudCA9IGdzdF9z
YW1wbGVfZ2V0X3NlZ21lbnQobV9zYW1wbGUuZ2V0KCkpOworICAgIGNvbnN0IEdzdFN0cnVjdHVy
ZSogb3JpZ2luYWxJbmZvID0gZ3N0X3NhbXBsZV9nZXRfaW5mbyhtX3NhbXBsZS5nZXQoKSk7Cisg
ICAgR3N0U3RydWN0dXJlKiBpbmZvID0gb3JpZ2luYWxJbmZvID8gZ3N0X3N0cnVjdHVyZV9jb3B5
KG9yaWdpbmFsSW5mbykgOiBudWxscHRyOworICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBzYW1wbGUg
PSBhZG9wdEdSZWYoZ3N0X3NhbXBsZV9uZXcoYnVmZmVyLCBjYXBzLCBzZWdtZW50LCBpbmZvKSk7
CisKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHU3RyZWFtZXJNZWRpYVNhbXBsZShzYW1wbGUu
Z2V0KCksIG1fcHJlc2VudGF0aW9uU2l6ZSwgbV90cmFja0lkKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUuCisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
R1N0cmVhbWVyTWVkaWFTYW1wbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVNhbXBsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3NWEwMzg1MWFk
MDc5NjRiZDRhODc0MjA2NDkwY2U4OTdjZWM2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTYW1wbGUu
aApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTAorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAiRmxv
YXRTaXplLmgiCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIk1lZGlh
U2FtcGxlLmgiCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21p
Y1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lck1lZGlh
U2FtcGxlIDogcHVibGljIE1lZGlhU2FtcGxlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEdT
dHJlYW1lck1lZGlhU2FtcGxlPiBjcmVhdGUoR3N0U2FtcGxlKiBzYW1wbGUsIGNvbnN0IEZsb2F0
U2l6ZSYgcHJlc2VudGF0aW9uU2l6ZSwgY29uc3QgQXRvbWljU3RyaW5nJiB0cmFja0lkKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR1N0cmVhbWVyTWVkaWFTYW1wbGUoc2Ft
cGxlLCBwcmVzZW50YXRpb25TaXplLCB0cmFja0lkKSk7CisgICAgfQorCisgICAgc3RhdGljIFJl
ZjxHU3RyZWFtZXJNZWRpYVNhbXBsZT4gY3JlYXRlRmFrZVNhbXBsZShHc3RDYXBzKiwgTWVkaWFU
aW1lIHB0cywgTWVkaWFUaW1lIGR0cywgTWVkaWFUaW1lIGR1cmF0aW9uLCBjb25zdCBGbG9hdFNp
emUmIHByZXNlbnRhdGlvblNpemUsIGNvbnN0IEF0b21pY1N0cmluZyYgdHJhY2tJZCk7CisKKyAg
ICB2b2lkIGFwcGx5UHRzT2Zmc2V0KE1lZGlhVGltZSk7CisgICAgTWVkaWFUaW1lIHByZXNlbnRh
dGlvblRpbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3B0czsgfQorICAgIE1lZGlhVGlt
ZSBkZWNvZGVUaW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kdHM7IH0KKyAgICBNZWRp
YVRpbWUgZHVyYXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2R1cmF0aW9uOyB9Cisg
ICAgQXRvbWljU3RyaW5nIHRyYWNrSUQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3RyYWNr
SWQ7IH0KKyAgICB2b2lkIHNldFRyYWNrSUQoY29uc3QgU3RyaW5nJiB0cmFja0lkKSBvdmVycmlk
ZSB7IG1fdHJhY2tJZCA9IHRyYWNrSWQ7IH0KKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX3NpemU7IH0KKyAgICBGbG9hdFNpemUgcHJlc2VudGF0aW9u
U2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcHJlc2VudGF0aW9uU2l6ZTsgfQorICAg
IHZvaWQgb2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlOworICAg
IHZvaWQgc2V0VGltZXN0YW1wcyhjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmKSBv
dmVycmlkZSB7IH0KKyAgICBib29sIGlzRGl2aXNhYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBzdGQ6OnBhaXI8UmVmUHRyPE1lZGlhU2FtcGxlPiwgUmVmUHRyPE1l
ZGlhU2FtcGxlPj4gZGl2aWRlKGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlICB7IHJldHVybiB7
IG51bGxwdHIsIG51bGxwdHIgfTsgfQorICAgIFJlZjxNZWRpYVNhbXBsZT4gY3JlYXRlTm9uRGlz
cGxheWluZ0NvcHkoKSBjb25zdCBvdmVycmlkZTsKKyAgICBTYW1wbGVGbGFncyBmbGFncygpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZmxhZ3M7IH0KKyAgICBQbGF0Zm9ybVNhbXBsZSBwbGF0
Zm9ybVNhbXBsZSgpIG92ZXJyaWRlOworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
IG92ZXJyaWRlIHsgfQorCitwcml2YXRlOgorICAgIEdTdHJlYW1lck1lZGlhU2FtcGxlKEdzdFNh
bXBsZSosIGNvbnN0IEZsb2F0U2l6ZSYgcHJlc2VudGF0aW9uU2l6ZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiB0cmFja0lkKTsKKyAgICB2aXJ0dWFsIH5HU3RyZWFtZXJNZWRpYVNhbXBsZSgpID0gZGVm
YXVsdDsKKworICAgIE1lZGlhVGltZSBtX3B0czsKKyAgICBNZWRpYVRpbWUgbV9kdHM7CisgICAg
TWVkaWFUaW1lIG1fZHVyYXRpb247CisgICAgQXRvbWljU3RyaW5nIG1fdHJhY2tJZDsKKyAgICBz
aXplX3QgbV9zaXplOworICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBtX3NhbXBsZTsKKyAgICBGbG9h
dFNpemUgbV9wcmVzZW50YXRpb25TaXplOworICAgIE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFncyBt
X2ZsYWdzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZS4KKworI2VuZGlmIC8vIEVOQUJM
RShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvR1N0cmVhbWVyTWVkaWFTYW1wbGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9HU3RyZWFtZXJN
ZWRpYVNhbXBsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5NTEwMDM0YTY4
MDA5ODdlYjM0OTg2NWVjZjZiZGMzZmZkZDRmNjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9HU3RyZWFtZXJNZWRpYVNhbXBsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
MjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAg
Qi5WLgotICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiR1N0cmVhbWVyTWVkaWFTYW1wbGUuaCIKLQotI2luY2x1ZGUgIkdTdHJlYW1l
clV0aWxpdGllcy5oIgotCi0jaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBF
TkFCTEUoTUVESUFfU09VUkNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdTdHJlYW1lck1l
ZGlhU2FtcGxlOjpHU3RyZWFtZXJNZWRpYVNhbXBsZShHc3RTYW1wbGUqIHNhbXBsZSwgY29uc3Qg
RmxvYXRTaXplJiBwcmVzZW50YXRpb25TaXplLCBjb25zdCBBdG9taWNTdHJpbmcmIHRyYWNrSWQp
Ci0gICAgOiBNZWRpYVNhbXBsZSgpCi0gICAgLCBtX3B0cyhNZWRpYVRpbWU6Onplcm9UaW1lKCkp
Ci0gICAgLCBtX2R0cyhNZWRpYVRpbWU6Onplcm9UaW1lKCkpCi0gICAgLCBtX2R1cmF0aW9uKE1l
ZGlhVGltZTo6emVyb1RpbWUoKSkKLSAgICAsIG1fdHJhY2tJZCh0cmFja0lkKQotICAgICwgbV9z
aXplKDApCi0gICAgLCBtX3ByZXNlbnRhdGlvblNpemUocHJlc2VudGF0aW9uU2l6ZSkKLSAgICAs
IG1fZmxhZ3MoTWVkaWFTYW1wbGU6OklzU3luYykKLXsKLQotICAgIGlmICghc2FtcGxlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1
ZmZlcihzYW1wbGUpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dXRvIGNyZWF0ZU1lZGlhVGltZSA9Ci0gICAgICAgIFtdKEdzdENsb2NrVGltZSB0aW1lKSAtPiBN
ZWRpYVRpbWUgewotICAgICAgICAgICAgcmV0dXJuIE1lZGlhVGltZShHU1RfVElNRV9BU19VU0VD
T05EUyh0aW1lKSwgR19VU0VDX1BFUl9TRUMpOwotICAgICAgICB9OwotCi0gICAgaWYgKEdTVF9C
VUZGRVJfUFRTX0lTX1ZBTElEKGJ1ZmZlcikpCi0gICAgICAgIG1fcHRzID0gY3JlYXRlTWVkaWFU
aW1lKEdTVF9CVUZGRVJfUFRTKGJ1ZmZlcikpOwotICAgIGlmIChHU1RfQlVGRkVSX0RUU19JU19W
QUxJRChidWZmZXIpIHx8IEdTVF9CVUZGRVJfUFRTX0lTX1ZBTElEKGJ1ZmZlcikpCi0gICAgICAg
IG1fZHRzID0gY3JlYXRlTWVkaWFUaW1lKEdTVF9CVUZGRVJfRFRTX09SX1BUUyhidWZmZXIpKTsK
LSAgICBpZiAoR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRChidWZmZXIpKQotICAgICAgICBt
X2R1cmF0aW9uID0gY3JlYXRlTWVkaWFUaW1lKEdTVF9CVUZGRVJfRFVSQVRJT04oYnVmZmVyKSk7
Ci0KLSAgICBtX3NpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplKGJ1ZmZlcik7Ci0gICAgbV9zYW1w
bGUgPSBzYW1wbGU7Ci0KLSAgICBpZiAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVChidWZmZXIsIEdT
VF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKSkKLSAgICAgICAgbV9mbGFncyA9IE1lZGlhU2FtcGxl
OjpOb25lOwotCi0gICAgaWYgKEdTVF9CVUZGRVJfRkxBR19JU19TRVQoYnVmZmVyLCBHU1RfQlVG
RkVSX0ZMQUdfREVDT0RFX09OTFkpKQotICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8TWVk
aWFTYW1wbGU6OlNhbXBsZUZsYWdzPihtX2ZsYWdzIHwgTWVkaWFTYW1wbGU6OklzTm9uRGlzcGxh
eWluZyk7Ci19Ci0KLVJlZjxHU3RyZWFtZXJNZWRpYVNhbXBsZT4gR1N0cmVhbWVyTWVkaWFTYW1w
bGU6OmNyZWF0ZUZha2VTYW1wbGUoR3N0Q2FwcyosIE1lZGlhVGltZSBwdHMsIE1lZGlhVGltZSBk
dHMsIE1lZGlhVGltZSBkdXJhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBwcmVzZW50YXRpb25TaXpl
LCBjb25zdCBBdG9taWNTdHJpbmcmIHRyYWNrSWQpCi17Ci0gICAgR1N0cmVhbWVyTWVkaWFTYW1w
bGUqIGdzdHJlYW1lck1lZGlhU2FtcGxlID0gbmV3IEdTdHJlYW1lck1lZGlhU2FtcGxlKG51bGxw
dHIsIHByZXNlbnRhdGlvblNpemUsIHRyYWNrSWQpOwotICAgIGdzdHJlYW1lck1lZGlhU2FtcGxl
LT5tX3B0cyA9IHB0czsKLSAgICBnc3RyZWFtZXJNZWRpYVNhbXBsZS0+bV9kdHMgPSBkdHM7Ci0g
ICAgZ3N0cmVhbWVyTWVkaWFTYW1wbGUtPm1fZHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgICBnc3Ry
ZWFtZXJNZWRpYVNhbXBsZS0+bV9mbGFncyA9IE1lZGlhU2FtcGxlOjpJc05vbkRpc3BsYXlpbmc7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpnc3RyZWFtZXJNZWRpYVNhbXBsZSk7Ci19Ci0KLXZvaWQg
R1N0cmVhbWVyTWVkaWFTYW1wbGU6OmFwcGx5UHRzT2Zmc2V0KE1lZGlhVGltZSB0aW1lc3RhbXBP
ZmZzZXQpCi17Ci0gICAgaWYgKG1fcHRzID4gdGltZXN0YW1wT2Zmc2V0KSB7Ci0gICAgICAgIG1f
ZHVyYXRpb24gPSBtX2R1cmF0aW9uICsgKG1fcHRzIC0gdGltZXN0YW1wT2Zmc2V0KTsKLSAgICAg
ICAgbV9wdHMgPSB0aW1lc3RhbXBPZmZzZXQ7Ci0gICAgfQotfQotCi12b2lkIEdTdHJlYW1lck1l
ZGlhU2FtcGxlOjpvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3QgTWVkaWFUaW1lJiB0aW1lc3RhbXBP
ZmZzZXQpCi17Ci0gICAgaWYgKCF0aW1lc3RhbXBPZmZzZXQpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX3B0cyArPSB0aW1lc3RhbXBPZmZzZXQ7Ci0gICAgbV9kdHMgKz0gdGltZXN0YW1wT2Zmc2V0
OwotICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKG1fc2FtcGxl
LmdldCgpKTsKLSAgICBpZiAoYnVmZmVyKSB7Ci0gICAgICAgIEdTVF9CVUZGRVJfUFRTKGJ1ZmZl
cikgPSB0b0dzdENsb2NrVGltZShtX3B0cyk7Ci0gICAgICAgIEdTVF9CVUZGRVJfRFRTKGJ1ZmZl
cikgPSB0b0dzdENsb2NrVGltZShtX2R0cyk7Ci0gICAgfQotfQotCi1SZWY8TWVkaWFTYW1wbGU+
IEdTdHJlYW1lck1lZGlhU2FtcGxlOjpjcmVhdGVOb25EaXNwbGF5aW5nQ29weSgpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX3NhbXBsZSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZha2VTYW1wbGUobnVs
bHB0ciwgbV9wdHMsIG1fZHRzLCBtX2R1cmF0aW9uLCBtX3ByZXNlbnRhdGlvblNpemUsIG1fdHJh
Y2tJZCk7Ci0KLSAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlciht
X3NhbXBsZS5nZXQoKSk7Ci0gICAgR1NUX0JVRkZFUl9GTEFHX1NFVChidWZmZXIsIEdTVF9CVUZG
RVJfRkxBR19ERUNPREVfT05MWSk7Ci0KLSAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X3NhbXBsZV9n
ZXRfY2FwcyhtX3NhbXBsZS5nZXQoKSk7Ci0gICAgR3N0U2VnbWVudCogc2VnbWVudCA9IGdzdF9z
YW1wbGVfZ2V0X3NlZ21lbnQobV9zYW1wbGUuZ2V0KCkpOwotICAgIGNvbnN0IEdzdFN0cnVjdHVy
ZSogb3JpZ2luYWxJbmZvID0gZ3N0X3NhbXBsZV9nZXRfaW5mbyhtX3NhbXBsZS5nZXQoKSk7Ci0g
ICAgR3N0U3RydWN0dXJlKiBpbmZvID0gb3JpZ2luYWxJbmZvID8gZ3N0X3N0cnVjdHVyZV9jb3B5
KG9yaWdpbmFsSW5mbykgOiBudWxscHRyOwotICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBzYW1wbGUg
PSBhZG9wdEdSZWYoZ3N0X3NhbXBsZV9uZXcoYnVmZmVyLCBjYXBzLCBzZWdtZW50LCBpbmZvKSk7
Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHU3RyZWFtZXJNZWRpYVNhbXBsZShzYW1wbGUu
Z2V0KCksIG1fcHJlc2VudGF0aW9uU2l6ZSwgbV90cmFja0lkKSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUuCi0KLSNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9HU3RyZWFtZXJNZWRp
YVNhbXBsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9HU3RyZWFtZXJNZWRpYVNhbXBsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
OWUxMmI1YzNmNmUwZTAzNGZmNzlhZGFhZTM4MDZjMTQwNjk4OTNlLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9tc2UvR1N0cmVhbWVyTWVkaWFTYW1wbGUuaAorKysgL2Rldi9udWxs
CkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9T
T1VSQ0UpCi0KLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJHUmVmUHRyR1N0cmVh
bWVyLmgiCi0jaW5jbHVkZSAiTWVkaWFTYW1wbGUuaCIKLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgR1N0cmVhbWVyTWVkaWFTYW1wbGUgOiBwdWJsaWMgTWVkaWFTYW1wbGUgewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8R1N0cmVhbWVyTWVkaWFTYW1wbGU+IGNyZWF0ZShHc3RTYW1w
bGUqIHNhbXBsZSwgY29uc3QgRmxvYXRTaXplJiBwcmVzZW50YXRpb25TaXplLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHRyYWNrSWQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBH
U3RyZWFtZXJNZWRpYVNhbXBsZShzYW1wbGUsIHByZXNlbnRhdGlvblNpemUsIHRyYWNrSWQpKTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgUmVmPEdTdHJlYW1lck1lZGlhU2FtcGxlPiBjcmVhdGVGYWtl
U2FtcGxlKEdzdENhcHMqLCBNZWRpYVRpbWUgcHRzLCBNZWRpYVRpbWUgZHRzLCBNZWRpYVRpbWUg
ZHVyYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgcHJlc2VudGF0aW9uU2l6ZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiB0cmFja0lkKTsKLQotICAgIHZvaWQgYXBwbHlQdHNPZmZzZXQoTWVkaWFUaW1lKTsK
LSAgICBNZWRpYVRpbWUgcHJlc2VudGF0aW9uVGltZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fcHRzOyB9Ci0gICAgTWVkaWFUaW1lIGRlY29kZVRpbWUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX2R0czsgfQotICAgIE1lZGlhVGltZSBkdXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICBBdG9taWNTdHJpbmcgdHJhY2tJRCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1fdHJhY2tJZDsgfQotICAgIHZvaWQgc2V0VHJhY2tJRChjb25zdCBT
dHJpbmcmIHRyYWNrSWQpIG92ZXJyaWRlIHsgbV90cmFja0lkID0gdHJhY2tJZDsgfQotICAgIHNp
emVfdCBzaXplSW5CeXRlcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc2l6ZTsgfQotICAg
IEdzdFNhbXBsZSogc2FtcGxlKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGUuZ2V0KCk7IH0KLSAg
ICBGbG9hdFNpemUgcHJlc2VudGF0aW9uU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
cHJlc2VudGF0aW9uU2l6ZTsgfQotICAgIHZvaWQgb2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0IE1l
ZGlhVGltZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0VGltZXN0YW1wcyhjb25zdCBNZWRpYVRp
bWUmLCBjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZSB7IH0KLSAgICBib29sIGlzRGl2aXNhYmxl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBzdGQ6OnBhaXI8UmVmUHRy
PE1lZGlhU2FtcGxlPiwgUmVmUHRyPE1lZGlhU2FtcGxlPj4gZGl2aWRlKGNvbnN0IE1lZGlhVGlt
ZSYpIG92ZXJyaWRlICB7IHJldHVybiB7IG51bGxwdHIsIG51bGxwdHIgfTsgfQotICAgIFJlZjxN
ZWRpYVNhbXBsZT4gY3JlYXRlTm9uRGlzcGxheWluZ0NvcHkoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBTYW1wbGVGbGFncyBmbGFncygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZmxhZ3M7IH0K
LSAgICBQbGF0Zm9ybVNhbXBsZSBwbGF0Zm9ybVNhbXBsZSgpIG92ZXJyaWRlICB7IHJldHVybiBQ
bGF0Zm9ybVNhbXBsZSgpOyB9Ci0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Qgb3Zl
cnJpZGUgeyB9Ci0KLXByaXZhdGU6Ci0gICAgR1N0cmVhbWVyTWVkaWFTYW1wbGUoR3N0U2FtcGxl
KiwgY29uc3QgRmxvYXRTaXplJiBwcmVzZW50YXRpb25TaXplLCBjb25zdCBBdG9taWNTdHJpbmcm
IHRyYWNrSWQpOwotICAgIHZpcnR1YWwgfkdTdHJlYW1lck1lZGlhU2FtcGxlKCkgPSBkZWZhdWx0
OwotCi0gICAgTWVkaWFUaW1lIG1fcHRzOwotICAgIE1lZGlhVGltZSBtX2R0czsKLSAgICBNZWRp
YVRpbWUgbV9kdXJhdGlvbjsKLSAgICBBdG9taWNTdHJpbmcgbV90cmFja0lkOwotICAgIHNpemVf
dCBtX3NpemU7Ci0gICAgR1JlZlB0cjxHc3RTYW1wbGU+IG1fc2FtcGxlOwotICAgIEZsb2F0U2l6
ZSBtX3ByZXNlbnRhdGlvblNpemU7Ci0gICAgTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzIG1fZmxh
Z3M7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlLgotCi0jZW5kaWYgLy8gVVNFKEdTVFJF
QU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvUGxheWJhY2tQaXBlbGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL1BsYXliYWNrUGlwZWxpbmUuY3BwCmluZGV4IDdlNjA2OTQ5
MjJlYTQzMjZmYzllY2NiNmViNTc4ZDNmMTNhMGI5ZTAuLjZiZDkyNTBhNTIxMGFlNGU2ZjY4NDAw
MGYzZjc3MDQyNDZkOTY3N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9tc2UvUGxheWJhY2tQaXBlbGluZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmNw
cApAQCAtNTAxLDExICs1MDEsMTEgQEAgdm9pZCBQbGF5YmFja1BpcGVsaW5lOjplbnF1ZXVlU2Ft
cGxlKFJlZjxNZWRpYVNhbXBsZT4mJiBtZWRpYVNhbXBsZSkKICAgICAvLyBPbmx5IG1vZGlmaWVk
IGJ5IHRoZSBtYWluIHRocmVhZCwgbm8gbmVlZCB0byBsb2NrLgogICAgIE1lZGlhVGltZSBsYXN0
RW5xdWV1ZWRUaW1lID0gc3RyZWFtLT5sYXN0RW5xdWV1ZWRUaW1lOwogCi0gICAgR1N0cmVhbWVy
TWVkaWFTYW1wbGUqIHNhbXBsZSA9IHN0YXRpY19jYXN0PEdTdHJlYW1lck1lZGlhU2FtcGxlKj4o
bWVkaWFTYW1wbGUucHRyKCkpOwotICAgIGlmIChzYW1wbGUtPnNhbXBsZSgpICYmIGdzdF9zYW1w
bGVfZ2V0X2J1ZmZlcihzYW1wbGUtPnNhbXBsZSgpKSkgewotICAgICAgICBHUmVmUHRyPEdzdFNh
bXBsZT4gZ3N0U2FtcGxlID0gc2FtcGxlLT5zYW1wbGUoKTsKKyAgICBBU1NFUlQobWVkaWFTYW1w
bGUtPnBsYXRmb3JtU2FtcGxlKCkudHlwZSA9PSBQbGF0Zm9ybVNhbXBsZTo6R1N0cmVhbWVyU2Ft
cGxlVHlwZSk7CisgICAgR1JlZlB0cjxHc3RTYW1wbGU+IGdzdFNhbXBsZSA9IG1lZGlhU2FtcGxl
LT5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBsZS5nc3RTYW1wbGU7CisgICAgaWYgKGdzdFNhbXBsZSAm
JiBnc3Rfc2FtcGxlX2dldF9idWZmZXIoZ3N0U2FtcGxlLmdldCgpKSkgewogICAgICAgICBHc3RC
dWZmZXIqIGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihnc3RTYW1wbGUuZ2V0KCkpOwot
ICAgICAgICBsYXN0RW5xdWV1ZWRUaW1lID0gc2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCk7Cisg
ICAgICAgIGxhc3RFbnF1ZXVlZFRpbWUgPSBtZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgp
OwogCiAgICAgICAgIEdTVF9CVUZGRVJfRkxBR19VTlNFVChidWZmZXIsIEdTVF9CVUZGRVJfRkxB
R19ERUNPREVfT05MWSk7CiAgICAgICAgIHB1c2hTYW1wbGUoR1NUX0FQUF9TUkMoYXBwc3JjKSwg
Z3N0U2FtcGxlLmdldCgpKTsK
</data>
<flag name="review"
          id="349388"
          type_id="1"
          status="+"
          setter="cgarcia"
    />
          </attachment>
      

    </bug>

</bugzilla>