<?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>133435</bug_id>
          
          <creation_ts>2014-06-01 10:34:09 -0700</creation_ts>
          <short_desc>[MSE] Appends of overlapping sample data do not clear existing samples properly.</short_desc>
          <delta_ts>2014-06-01 22:17:43 -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>New Bugs</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1012837</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-06-01 10:34:09 -0700</bug_when>
    <thetext>[MSE] Appends of overlapping sample data do not clear existing samples properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012838</commentid>
    <comment_count>1</comment_count>
      <attachid>232348</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-06-01 10:43:38 -0700</bug_when>
    <thetext>Created attachment 232348
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012863</commentid>
    <comment_count>2</comment_count>
      <attachid>232348</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-06-01 14:46:44 -0700</bug_when>
    <thetext>Comment on attachment 232348
Patch

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

&gt; Source/WTF/wtf/MediaTime.cpp:380
&gt; +    out.printf(&quot;{%lld/%d, %lf}&quot;, m_timeValue, m_timeScale, toDouble());

The format string here says that m_timeValue is long long and m_timeScale is int, but they are actually int64_t and int32_t. To make this portable you need to either cast to the built-in types or use the PRId64 and PRId32 macros &lt;http://en.cppreference.com/w/cpp/types/integer&gt;.

Also, there is no value in using %lf instead of just %f. Also, %f uses a pretty ugly format with lots of zeros after the decimal point.

&gt; Source/WTF/wtf/MediaTime.h:102
&gt; +    void dump(PrintStream&amp; out) const;

I don’t think the name “out” here helps.

&gt; Source/WebCore/Modules/mediasource/SampleMap.cpp:86
&gt; +class SamplePresentationTimeIsWithinRangeComparator {
&gt; +public:

I suggest just making this a struct instead of the class/public combination.

&gt; Source/WebCore/Modules/mediasource/SampleMap.cpp:87
&gt; +    bool operator()(std::pair&lt;MediaTime, MediaTime&gt; range, std::pair&lt;MediaTime, RefPtr&lt;MediaSample&gt;&gt; value)

For the second argument a const std::pair&amp; would be better to avoid churning the RefPtr. Same for the SamplePresentationTimeIsInsideRangeComparator.

&gt; Source/WebCore/Modules/mediasource/SampleMap.cpp:91
&gt; +    bool operator()(std::pair&lt;MediaTime, RefPtr&lt;MediaSample&gt;&gt; value, std::pair&lt;MediaTime, MediaTime&gt; range)

For the first argument a const std::pair&amp; would be better to avoid churning the RefPtr. Same for the SamplePresentationTimeIsInsideRangeComparator.

&gt; Source/WebCore/Modules/mediasource/SampleMap.cpp:207
&gt;      std::pair&lt;MediaTime, MediaTime&gt; range(begin, end);

I suspect we can use the new { begin, end } syntax and thus not need to make a local temporary.

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:1459
&gt; +Vector&lt;String&gt; SourceBuffer::bufferedSamplesForTrackID(AtomicString trackID)

A shame to churn the reference count of the atomic string. Should take a const AtomicString&amp; instead to avoid that.

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:1470
&gt; +    for (auto sampleIter = trackBuffer.samples.decodeBegin(); sampleIter != trackBuffer.samples.decodeEnd(); ++sampleIter) {
&gt; +        MediaSample* sample = sampleIter-&gt;second.get();
&gt; +        sampleDescriptions.append(toString(*sample));
&gt; +    }

If only the functions were named begin/end instead of decodeBegin/decodeEnd we could use a newfangled for loop for this. Good idea for future refactoring. I don’t think the local variable is needed:

    sampleDescriptions.append(toString(*sampleIter-&gt;second));

&gt; Source/WebCore/platform/MediaSample.h:29
&gt; +#include &quot;FloatSize.h&quot;

No need to include this. We can just forward-declare FloatSize in this header.

&gt; Source/WebCore/platform/MediaSample.h:30
&gt; +#include &lt;wtf/Forward.h&gt;

Are you sure this is needed for PrintStream? Doesn’t one of the other headers include Forward.h?

&gt; Source/WebCore/platform/MediaSample.h:74
&gt; +    virtual void dump(PrintStream&amp; out) const = 0;

I don’t think we need the name &quot;out&quot; here.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:297
&gt; +    virtual FloatSize presentationSize() const override;

Does this need to be public? I would make it and all these other overrides private.

Also, the explicit declaration and definition of the destructor is not needed and should be removed.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:301
&gt; +    virtual void dump(PrintStream&amp;) const override;

Same here.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:303
&gt;  protected:

Why protected instead of private?

&gt; Source/WebCore/platform/mock/mediasource/MockSourceBufferPrivate.cpp:57
&gt; +    virtual FloatSize presentationSize() const override { return FloatSize(); }

This stuff should all be private, and the destructor need not be defined.

&gt; Source/WebCore/testing/Internals.h:330
&gt; +    Vector&lt;String&gt; bufferedSamplesForTrackID(SourceBuffer*, AtomicString);

Should use const AtomicString&amp; to avoid churning the string’s reference count.

&gt; Source/WebCore/testing/Internals.idl:282
&gt; +    [Conditional=MEDIA_SOURCE] DOMString[] bufferedSamplesForTrackID(SourceBuffer buffer, DOMString trackID);
&gt; +

Don’t need this extra blank line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012894</commentid>
    <comment_count>3</comment_count>
      <attachid>232348</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-06-01 21:23:39 -0700</bug_when>
    <thetext>Comment on attachment 232348
Patch

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

&gt;&gt; Source/WTF/wtf/MediaTime.cpp:380
&gt;&gt; +    out.printf(&quot;{%lld/%d, %lf}&quot;, m_timeValue, m_timeScale, toDouble());
&gt; 
&gt; The format string here says that m_timeValue is long long and m_timeScale is int, but they are actually int64_t and int32_t. To make this portable you need to either cast to the built-in types or use the PRId64 and PRId32 macros &lt;http://en.cppreference.com/w/cpp/types/integer&gt;.
&gt; 
&gt; Also, there is no value in using %lf instead of just %f. Also, %f uses a pretty ugly format with lots of zeros after the decimal point.

Yes, to make this work on EFL and avoid all the 64-bit vs. 32-bit printf differences, I&apos;ll modify this to just use out.print(), which has overrides for all the various types used here.

&gt;&gt; Source/WTF/wtf/MediaTime.h:102
&gt;&gt; +    void dump(PrintStream&amp; out) const;
&gt; 
&gt; I don’t think the name “out” here helps.

I&apos;ll remove it.

&gt;&gt; Source/WebCore/Modules/mediasource/SampleMap.cpp:86
&gt;&gt; +public:
&gt; 
&gt; I suggest just making this a struct instead of the class/public combination.

Sure thing.

&gt;&gt; Source/WebCore/Modules/mediasource/SampleMap.cpp:87
&gt;&gt; +    bool operator()(std::pair&lt;MediaTime, MediaTime&gt; range, std::pair&lt;MediaTime, RefPtr&lt;MediaSample&gt;&gt; value)
&gt; 
&gt; For the second argument a const std::pair&amp; would be better to avoid churning the RefPtr. Same for the SamplePresentationTimeIsInsideRangeComparator.

Ok. I tried just a reference and got a template error, but a const ref seems to work.

&gt;&gt; Source/WebCore/Modules/mediasource/SampleMap.cpp:91
&gt;&gt; +    bool operator()(std::pair&lt;MediaTime, RefPtr&lt;MediaSample&gt;&gt; value, std::pair&lt;MediaTime, MediaTime&gt; range)
&gt; 
&gt; For the first argument a const std::pair&amp; would be better to avoid churning the RefPtr. Same for the SamplePresentationTimeIsInsideRangeComparator.

Ok.

&gt;&gt; Source/WebCore/Modules/mediasource/SampleMap.cpp:207
&gt;&gt;      std::pair&lt;MediaTime, MediaTime&gt; range(begin, end);
&gt; 
&gt; I suspect we can use the new { begin, end } syntax and thus not need to make a local temporary.

Looks like no.  Since equal_range is a template, it can&apos;t infer the type being passed in that field.

&gt;&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:1459
&gt;&gt; +Vector&lt;String&gt; SourceBuffer::bufferedSamplesForTrackID(AtomicString trackID)
&gt; 
&gt; A shame to churn the reference count of the atomic string. Should take a const AtomicString&amp; instead to avoid that.

Ok.  There are a few other places in this section of code that take bare AtomicStrings. I&apos;ll clean them up in future patches.

&gt;&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:1470
&gt;&gt; +    }
&gt; 
&gt; If only the functions were named begin/end instead of decodeBegin/decodeEnd we could use a newfangled for loop for this. Good idea for future refactoring. I don’t think the local variable is needed:
&gt; 
&gt;     sampleDescriptions.append(toString(*sampleIter-&gt;second));

The deal is: a SampleMap is a two-way structure. It maps both the decodeTime and presentationTime of given samples, so there needs to be a way to differentiate between iterating in decode order and presentation order.

But I could come up with a shorthand like &quot;trackBuffer.samples.decodeOrder.begin()&quot; which would allow us to use the new C++11 loops.

&gt;&gt; Source/WebCore/platform/MediaSample.h:29
&gt;&gt; +#include &quot;FloatSize.h&quot;
&gt; 
&gt; No need to include this. We can just forward-declare FloatSize in this header.

I don&apos;t think we can, since presentationSize returns a bare FloatSize, not a ref or ptr.

&gt;&gt; Source/WebCore/platform/MediaSample.h:30
&gt;&gt; +#include &lt;wtf/Forward.h&gt;
&gt; 
&gt; Are you sure this is needed for PrintStream? Doesn’t one of the other headers include Forward.h?

Looks like AtomicString.h includes Forward.h, by way of StringImpl.h.  I&apos;ll remove it.

&gt;&gt; Source/WebCore/platform/MediaSample.h:74
&gt;&gt; +    virtual void dump(PrintStream&amp; out) const = 0;
&gt; 
&gt; I don’t think we need the name &quot;out&quot; here.

I&apos;ll remove it.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:297
&gt;&gt; +    virtual FloatSize presentationSize() const override;
&gt; 
&gt; Does this need to be public? I would make it and all these other overrides private.
&gt; 
&gt; Also, the explicit declaration and definition of the destructor is not needed and should be removed.

I&apos;ve had it beaten into my head that all classes with virtual methods must have an explicit virtual destructor.  The implicit destructor will not be marked virtual.

I&apos;ll make all the methods private.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:301
&gt;&gt; +    virtual void dump(PrintStream&amp;) const override;
&gt; 
&gt; Same here.

Ok.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:303
&gt;&gt;  protected:
&gt; 
&gt; Why protected instead of private?

No subclasses of this class exist, so there&apos;s no good reason.  We can always revert to protected if some future subclass requires it.

&gt;&gt; Source/WebCore/platform/mock/mediasource/MockSourceBufferPrivate.cpp:57
&gt;&gt; +    virtual FloatSize presentationSize() const override { return FloatSize(); }
&gt; 
&gt; This stuff should all be private, and the destructor need not be defined.

I really don&apos;t like leaving virtual destructors off virtual classes.  Even though no subclass of this class exists, it can lead to memory leaks if someone subclasses this class in the future without adding a virtual destructor.

I&apos;ll make it all private though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012900</commentid>
    <comment_count>4</comment_count>
      <attachid>232366</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-06-01 21:44:01 -0700</bug_when>
    <thetext>Created attachment 232366
Patch for landing

Addressed Darin&apos;s comments, and should fix the EFL builders.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012905</commentid>
    <comment_count>5</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-06-01 22:17:43 -0700</bug_when>
    <thetext>Committed r169523: &lt;http://trac.webkit.org/changeset/169523&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232348</attachid>
            <date>2014-06-01 10:43:38 -0700</date>
            <delta_ts>2014-06-01 21:23:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133435-20140601104313.patch</filename>
            <type>text/plain</type>
            <size>30752</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5NTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDRhN2YzMTIxNDMxZjcwMzIzNDExZWVi
MTRkNmRlOTAyZDBmMjA4OTIuLmJjZmUxNDA5MjlkNWQ5NjJiOWQ4ODY3NjNlNjMyZjYyMWUxMjI1
NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTQtMDYtMDEgIEplciBOb2JsZSAgPGplci5ub2Js
ZUBhcHBsZS5jb20+CisKKyAgICAgICAgW01TRV0gQXBwZW5kcyBvZiBvdmVybGFwcGluZyBzYW1w
bGUgZGF0YSBkbyBub3QgY2xlYXIgZXhpc3Rpbmcgc2FtcGxlcyBwcm9wZXJseS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzQzNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIGR1bXAgbWV0aG9k
IHRvIE1lZGlhVGltZSwgc28gdGhhdCBNZWRpYVRpbWVzIGNhbiBiZSBlYXNpbHkgY29udmVydGVk
IHRvIHN0cmluZ3MgKGZvciBsb2dnaW5nIHB1cnBvc2VzKS4KKworICAgICAgICAqIHd0Zi9NZWRp
YVRpbWUuY3BwOgorICAgICAgICAoV1RGOjpNZWRpYVRpbWU6OmR1bXApOgorICAgICAgICAqIHd0
Zi9NZWRpYVRpbWUuaDoKKwogMjAxNC0wNS0yOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEVuYWJsZSBjc3Mgaml0IGJ5IGRlZmF1bHQgb24g
YXJtNjQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggMDMxNzEyOTVlYjAwZDE2OGFmMDdiMWQyZmY4Mzc2NWQwOWQ0
MmM5OS4uY2JmZmUyMDkyMTgxOWEyZTYyZmFkYjYxMjU4YWFjYjc5NWQ2NWRjNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDU3IEBACisyMDE0LTA2LTAxICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBw
bGUuY29tPgorCisgICAgICAgIFtNU0VdIEFwcGVuZHMgb2Ygb3ZlcmxhcHBpbmcgc2FtcGxlIGRh
dGEgZG8gbm90IGNsZWFyIGV4aXN0aW5nIHNhbXBsZXMgcHJvcGVybHkuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM0MzUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBtZWRpYS9tZWRpYS1zb3Vy
Y2UvbWVkaWEtc291cmNlLW92ZXJsYXBwaW5nLWFwcGVuZC5odG1sCisKKyAgICAgICAgVGhlIE1T
RSBzcGVjIGhhcyBhIHNwZWMgZXJyb3IgaW4gaG93IGl0IHJlbW92ZXMgb3ZlcmxhcHBpbmcgZnJh
bWVzLiBUaGUgaW50ZW50aW9uIHNlZW1zIHRvIGJlCisgICAgICAgIHRvIGNoZWNrIGZvciBvdmVy
bGFwcGluZyBzYW1wbGVzIG9ubHkgd2hlbiB0aGUgaW5jb21pbmcgc2FtcGxlIGluY3JlYXNlcyB0
aGUgaGlnaGVzdCBwcmVzZW50YXRpb24gdGltZQorICAgICAgICBmaWVsZC4gQnV0IGR1ZSB0byBh
IG1pc21hdGNoIGluIHRoZSByYW5nZSBvZiBhIHNhbXBsZSwgZGVmaW5lZCBhcyBbc3RhcnQsIGVu
ZCksIGFuZCB0aGUgY2hlY2ssIHdoaWNoIAorICAgICAgICB0cmVhdHMgdGhlIGVuZCBhcyBpbmNs
dXNpdmUsIHRoZSBvdmVybGFwcGluZyBjaGVjayBpcyBhbG1vc3QgbmV2ZXIgcnVuLgorCisgICAg
ICAgIEFkZCB0aGUgc2FtcGxlIGNvbXBhcmlzb24gbG9naWMgdG8gbWF0Y2ggW3N0YXJ0LCBlbmQp
IHJhbmdlcywgYW5kIHJlbmFtZSB0aGUgZXhpc3RpbmcgY2hlY2sgdG8gZGlmZmVyZW50aWF0ZQor
ICAgICAgICBpdCBmcm9tIHRoZSBuZXcgb25lOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3Vy
Y2UvU2FtcGxlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNhbXBsZVByZXNlbnRhdGlvblRp
bWVJc0luc2lkZVJhbmdlQ29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3Jl
OjpTYW1wbGVQcmVzZW50YXRpb25UaW1lSXNXaXRoaW5SYW5nZUNvbXBhcmF0b3I6Om9wZXJhdG9y
KCkpOgorICAgICAgICAoV2ViQ29yZTo6U2FtcGxlTWFwOjpmaW5kU2FtcGxlc0JldHdlZW5QcmVz
ZW50YXRpb25UaW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpTYW1wbGVNYXA6OmZpbmRTYW1wbGVz
V2l0aGluUHJlc2VudGF0aW9uUmFuZ2UpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2Uv
U2FtcGxlTWFwLmg6CisKKyAgICAgICAgVXBkYXRlIHRoZSBvdmVybGFwcGluZyBjaGVjayB0byBv
Y2N1ciB3aGVuZXZlciB0aGUgaGlnaGVzdCBwcmVzZW50YXRpb24gdGltZSBpbmNyZWFzZXMsIGFu
ZCB1cGRhdGUgdGhlCisgICAgICAgIGxvZ2ljIHdpdGhpbiB0aGF0IGNoZWNrIHRvIGNhdGNoIGFs
bCBvdmVybGFwcGluZyBmcmFtZXMuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3Vy
Y2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpzb3VyY2VCdWZm
ZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlU2FtcGxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJ
RCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaDoKKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjoKKworICAgICAgICBBZGQgYSBkdW1wIG1ldGhvZCB0byBNZWRp
YVNhbXBsZSBzbyB0aGF0IHNhbXBsZXMgY2FuIGJlIGVhc2lseSBjb252ZXJ0ZWQgdG8gYSBzdHJp
bmcgZm9yIHRlc3RpbmcuCisgICAgICAgICogcGxhdGZvcm0vTWVkaWFTYW1wbGUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2
YXRlQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlQVZGT2JqQzo6cHJl
c2VudGF0aW9uU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZUFWRk9iakM6OmR1
bXApOgorCisgICAgICAgIFVwZGF0ZSB0aGUgTW9jayBNU0UgaW1wbGVtZW50YXRpb24gdG8gcGFz
cyBhbG9uZyBhICJnZW5lcmF0aW9uIiBmaWVsZCwgdG8gYWlkIGluIHRlc3RpbmcuCisgICAgICAg
ICogcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrQm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1vY2tTYW1wbGVCb3g6Ok1vY2tTYW1wbGVCb3gpOgorICAgICAgICAqIHBsYXRmb3JtL21v
Y2svbWVkaWFzb3VyY2UvTW9ja0JveC5oOgorICAgICAgICAqIHBsYXRmb3JtL21vY2svbWVkaWFz
b3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a01lZGlhU2FtcGxlOjpkdW1wKToKKworICAgICAgICBBZGQgYSBtZXRob2QgdG8gaW50ZXJuYWxz
IHRvIGR1bXAgdGhlIGJ1ZmZlcmVkIHNhbXBsZXMgdG8gc3RyaW5nLgorICAgICAgICAqIE1vZHVs
ZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlcjo6YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJRCk6CisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmJ1ZmZlcmVkU2FtcGxlc0ZvclRyYWNr
SUQpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6CisgICAgICAgICogdGVzdGluZy9J
bnRlcm5hbHMuaWRsOgorCiAyMDE0LTA1LTMxICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5A
d2Via2l0Lm9yZz4KIAogICAgICAgICBDU1MgSklUIGNsZWFudXA6IG1vdmUgdHdvIHV0aWxpdHkg
ZnVuY3Rpb25zIG91dCBvZiB0aGUgcHJvcGVydGllcy1tYXRjaGVyIHNlY3Rpb24KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL01lZGlhVGltZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NZWRpYVRp
bWUuY3BwCmluZGV4IDQ1YjVhNGNmOGQ5MDdmM2IzMTgwNzEyMTI5MGFiMzYyZWViMWUyMmQuLjc1
NDE1MDYzMDBiNzEyNzJlMTNiNjQ0YjQ5ZWNiZjk0OWE1ZTRjMTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL01lZGlhVGltZS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvTWVkaWFUaW1lLmNw
cApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYv
Q2hlY2tlZEFyaXRobWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMzc0LDYgKzM3
NSwxMSBAQCB2b2lkIE1lZGlhVGltZTo6c2V0VGltZVNjYWxlKGludDMyX3QgdGltZVNjYWxlKQog
ICAgIG1fdGltZVNjYWxlID0gdGltZVNjYWxlOwogfQogCit2b2lkIE1lZGlhVGltZTo6ZHVtcChQ
cmludFN0cmVhbSAmb3V0KSBjb25zdAoreworICAgIG91dC5wcmludGYoInslbGxkLyVkLCAlbGZ9
IiwgbV90aW1lVmFsdWUsIG1fdGltZVNjYWxlLCB0b0RvdWJsZSgpKTsKK30KKwogTWVkaWFUaW1l
IGFicyhjb25zdCBNZWRpYVRpbWUmIHJocykKIHsKICAgICBpZiAocmhzLmlzSW52YWxpZCgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTWVkaWFUaW1lLmggYi9Tb3VyY2UvV1RGL3d0Zi9N
ZWRpYVRpbWUuaAppbmRleCAyM2YyNTJkOWQzOGQwZmM1MTM3ZDdjOTAwY2IzNWVkNWE1ZWQ3NGVl
Li5jNGIxOGNlYWI2MmM4ZjEzYjRjNGExMzVmZTNhMjljYTkxMDM3MjkyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9NZWRpYVRpbWUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NZWRpYVRpbWUu
aApAQCAtMzgsNiArMzgsOCBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAorY2xhc3MgUHJpbnRTdHJl
YW07CisKIGNsYXNzIFdURl9FWFBPUlRfUFJJVkFURSBNZWRpYVRpbWUgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtOTcsOSArOTksMTEgQEAgcHVibGljOgogICAg
IGNvbnN0IGludDY0X3QmIHRpbWVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZVZhbHVlOyB9
CiAgICAgY29uc3QgaW50MzJfdCYgdGltZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV90aW1lU2Nh
bGU7IH0KIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKwogICAgIGZy
aWVuZCBXVEZfRVhQT1JUX1BSSVZBVEUgTWVkaWFUaW1lIGFicyhjb25zdCBNZWRpYVRpbWUmIHJo
cyk7CiBwcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBpbnQzMl90IERlZmF1bHRUaW1lU2NhbGUg
PSA2MDAwOworICAgIHN0YXRpYyBjb25zdCBpbnQzMl90IERlZmF1bHRUaW1lU2NhbGUgPSAxMDAw
MDAwMDsKICAgICBzdGF0aWMgY29uc3QgaW50MzJfdCBNYXhpbXVtVGltZVNjYWxlOwogCiAgICAg
dm9pZCBzZXRUaW1lU2NhbGUoaW50MzJfdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc291cmNlL1NhbXBsZU1hcC5jcHAKaW5kZXggNDE3Y2YwMzM5MmE4MWNiZjNjNWUyYjNk
NjM2Y2M0ZGIzMTA3NzM4OC4uYmRjMGM4M2JlOWY0ZGNlMWEyNjJhYTZiYjEzMWU2ZDY5NzE2MzIx
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVN
YXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFw
LmNwcApAQCAtNjgsNyArNjgsOCBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAotY2xhc3MgU2FtcGxl
UHJlc2VudGF0aW9uVGltZUlzV2l0aGluUmFuZ2VDb21wYXJhdG9yIHsKKy8vIFNhbXBsZVByZXNl
bnRhdGlvblRpbWVJc0luc2lkZVJhbmdlQ29tcGFyYXRvciBtYXRjaGVzIChyYW5nZS5maXJzdCwg
cmFuZ2Uuc2Vjb25kXQorY2xhc3MgU2FtcGxlUHJlc2VudGF0aW9uVGltZUlzSW5zaWRlUmFuZ2VD
b21wYXJhdG9yIHsKIHB1YmxpYzoKICAgICBib29sIG9wZXJhdG9yKCkoc3RkOjpwYWlyPE1lZGlh
VGltZSwgTWVkaWFUaW1lPiByYW5nZSwgc3RkOjpwYWlyPE1lZGlhVGltZSwgUmVmUHRyPE1lZGlh
U2FtcGxlPj4gdmFsdWUpCiAgICAgewpAQCAtNzYsNiArNzcsMTkgQEAgcHVibGljOgogICAgIH0K
ICAgICBib29sIG9wZXJhdG9yKCkoc3RkOjpwYWlyPE1lZGlhVGltZSwgUmVmUHRyPE1lZGlhU2Ft
cGxlPj4gdmFsdWUsIHN0ZDo6cGFpcjxNZWRpYVRpbWUsIE1lZGlhVGltZT4gcmFuZ2UpCiAgICAg
eworICAgICAgICByZXR1cm4gdmFsdWUuZmlyc3QgPD0gcmFuZ2UuZmlyc3Q7CisgICAgfQorfTsK
KworLy8gU2FtcGxlUHJlc2VudGF0aW9uVGltZUlzV2l0aGluUmFuZ2VDb21wYXJhdG9yIG1hdGNo
ZXMgW3JhbmdlLmZpcnN0LCByYW5nZS5zZWNvbmQpCitjbGFzcyBTYW1wbGVQcmVzZW50YXRpb25U
aW1lSXNXaXRoaW5SYW5nZUNvbXBhcmF0b3IgeworcHVibGljOgorICAgIGJvb2wgb3BlcmF0b3Io
KShzdGQ6OnBhaXI8TWVkaWFUaW1lLCBNZWRpYVRpbWU+IHJhbmdlLCBzdGQ6OnBhaXI8TWVkaWFU
aW1lLCBSZWZQdHI8TWVkaWFTYW1wbGU+PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBy
YW5nZS5zZWNvbmQgPD0gdmFsdWUuZmlyc3Q7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3IoKShz
dGQ6OnBhaXI8TWVkaWFUaW1lLCBSZWZQdHI8TWVkaWFTYW1wbGU+PiB2YWx1ZSwgc3RkOjpwYWly
PE1lZGlhVGltZSwgTWVkaWFUaW1lPiByYW5nZSkKKyAgICB7CiAgICAgICAgIHJldHVybiB2YWx1
ZS5maXJzdCA8IHJhbmdlLmZpcnN0OwogICAgIH0KIH07CkBAIC0xOTEsNiArMjA1LDEyIEBAIFNh
bXBsZU1hcDo6aXRlcmF0b3IgU2FtcGxlTWFwOjpmaW5kU3luY1NhbXBsZUFmdGVyRGVjb2RlSXRl
cmF0b3IoaXRlcmF0b3IgY3VycmVuCiBTYW1wbGVNYXA6Oml0ZXJhdG9yX3JhbmdlIFNhbXBsZU1h
cDo6ZmluZFNhbXBsZXNCZXR3ZWVuUHJlc2VudGF0aW9uVGltZXMoY29uc3QgTWVkaWFUaW1lJiBi
ZWdpbiwgY29uc3QgTWVkaWFUaW1lJiBlbmQpCiB7CiAgICAgc3RkOjpwYWlyPE1lZGlhVGltZSwg
TWVkaWFUaW1lPiByYW5nZShiZWdpbiwgZW5kKTsKKyAgICByZXR1cm4gc3RkOjplcXVhbF9yYW5n
ZShwcmVzZW50YXRpb25CZWdpbigpLCBwcmVzZW50YXRpb25FbmQoKSwgcmFuZ2UsIFNhbXBsZVBy
ZXNlbnRhdGlvblRpbWVJc0luc2lkZVJhbmdlQ29tcGFyYXRvcigpKTsKK30KKworU2FtcGxlTWFw
OjppdGVyYXRvcl9yYW5nZSBTYW1wbGVNYXA6OmZpbmRTYW1wbGVzV2l0aGluUHJlc2VudGF0aW9u
UmFuZ2UoY29uc3QgTWVkaWFUaW1lJiBiZWdpbiwgY29uc3QgTWVkaWFUaW1lJiBlbmQpCit7Cisg
ICAgc3RkOjpwYWlyPE1lZGlhVGltZSwgTWVkaWFUaW1lPiByYW5nZShiZWdpbiwgZW5kKTsKICAg
ICByZXR1cm4gc3RkOjplcXVhbF9yYW5nZShwcmVzZW50YXRpb25CZWdpbigpLCBwcmVzZW50YXRp
b25FbmQoKSwgcmFuZ2UsIFNhbXBsZVByZXNlbnRhdGlvblRpbWVJc1dpdGhpblJhbmdlQ29tcGFy
YXRvcigpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNv
dXJjZS9TYW1wbGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2Ft
cGxlTWFwLmgKaW5kZXggZjI1NTQ2ZDgyMDM2OGQxYzk4ODg2ZTg3MTU4YjZjNDk4YzgzYWI0MS4u
MjkwY2UyZDNiZDNjZDYxYjBiNGIwNDk1OGRkNjRiZTFlNzk3YTMxMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5oCkBAIC03NSw2ICs3NSw3IEBA
IHB1YmxpYzoKICAgICBpdGVyYXRvciBmaW5kU3luY1NhbXBsZUFmdGVyRGVjb2RlSXRlcmF0b3Io
aXRlcmF0b3IpOwogCiAgICAgaXRlcmF0b3JfcmFuZ2UgZmluZFNhbXBsZXNCZXR3ZWVuUHJlc2Vu
dGF0aW9uVGltZXMoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1lJik7CisgICAgaXRl
cmF0b3JfcmFuZ2UgZmluZFNhbXBsZXNXaXRoaW5QcmVzZW50YXRpb25SYW5nZShjb25zdCBNZWRp
YVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmKTsKICAgICByZXZlcnNlX2l0ZXJhdG9yX3JhbmdlIGZp
bmREZXBlbmRlbnRTYW1wbGVzKE1lZGlhU2FtcGxlKik7CiAgICAgCiBwcml2YXRlOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCmlu
ZGV4IGQyZGJjNzc0NTQ0ZThjMDJhZWU3NDdlMmUyNWZhYjMyNmUyYzhhYmYuLmMyYTZhZWJhMDk1
MmExNGRmZGY5YzdhYmMzMmYyNGQzMmM5YTM1NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAKQEAgLTczMSw2ICs3MzEsOSBA
QCB2b2lkIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFs
aXphdGlvblNlZ21lbnQoU291cmNlQnVmZgogICAgICAgICAgICAgQVNTRVJUKHRleHRUcmFjayk7
CiAgICAgICAgICAgICB0b0luYmFuZFRleHRUcmFjayh0ZXh0VHJhY2spLT5zZXRQcml2YXRlKHRl
eHRUcmFja0luZm8udHJhY2spOwogICAgICAgICB9CisKKyAgICAgICAgZm9yIChhdXRvJiB0cmFj
a0J1ZmZlciA6IG1fdHJhY2tCdWZmZXJNYXAudmFsdWVzKCkpCisgICAgICAgICAgICB0cmFja0J1
ZmZlci5uZWVkUmFuZG9tQWNjZXNzRmxhZyA9IHRydWU7CiAgICAgfQogCiAgICAgLy8gNC4gTGV0
IGFjdGl2ZSB0cmFjayBmbGFnIGVxdWFsIGZhbHNlLgpAQCAtMTA3NCwxMCArMTA3Nyw5IEBAIHZv
aWQgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZVNhbXBsZShTb3Vy
Y2VCdWZmZXJQcml2YXRlKiwgUGFzCiAgICAgICAgIFNhbXBsZU1hcDo6TWFwVHlwZSBlcmFzZWRT
YW1wbGVzOwogICAgICAgICBNZWRpYVRpbWUgbWljcm9zZWNvbmQoMSwgMTAwMDAwMCk7CiAKLSAg
ICAgICAgLy8gMS4xNCBJZiBsYXN0IGRlY29kZSB0aW1lc3RhbXAgZm9yIHRyYWNrIGJ1ZmZlciBp
cyB1bnNldCBhbmQgdGhlcmUgaXMgYSBjb2RlZCBmcmFtZSBpbgotICAgICAgICAvLyB0cmFjayBi
dWZmZXIgd2l0aCBhIHByZXNlbnRhdGlvbiB0aW1lc3RhbXAgbGVzcyB0aGFuIG9yIGVxdWFsIHRv
IHByZXNlbnRhdGlvbiB0aW1lc3RhbXAKLSAgICAgICAgLy8gYW5kIHByZXNlbnRhdGlvbiB0aW1l
c3RhbXAgaXMgbGVzcyB0aGFuIHRoaXMgY29kZWQgZnJhbWUncyBwcmVzZW50YXRpb24gdGltZXN0
YW1wIHBsdXMKLSAgICAgICAgLy8gaXRzIGZyYW1lIGR1cmF0aW9uLCB0aGVuIHJ1biB0aGUgZm9s
bG93aW5nIHN0ZXBzOgorICAgICAgICAvLyAxLjE0IElmIGxhc3QgZGVjb2RlIHRpbWVzdGFtcCBm
b3IgdHJhY2sgYnVmZmVyIGlzIHVuc2V0IGFuZCBwcmVzZW50YXRpb24gdGltZXN0YW1wIGZhbGxz
CisgICAgICAgIC8vIGZhbGxzIHdpdGhpbiB0aGUgcHJlc2VudGF0aW9uIGludGVydmFsIG9mIGEg
Y29kZWQgZnJhbWUgaW4gdHJhY2sgYnVmZmVyLCB0aGVuIHJ1biB0aGUKKyAgICAgICAgLy8gZm9s
bG93aW5nIHN0ZXBzOgogICAgICAgICBpZiAodHJhY2tCdWZmZXIubGFzdERlY29kZVRpbWVzdGFt
cC5pc0ludmFsaWQoKSkgewogICAgICAgICAgICAgYXV0byBpdGVyID0gdHJhY2tCdWZmZXIuc2Ft
cGxlcy5maW5kU2FtcGxlQ29udGFpbmluZ1ByZXNlbnRhdGlvblRpbWUocHJlc2VudGF0aW9uVGlt
ZXN0YW1wKTsKICAgICAgICAgICAgIGlmIChpdGVyICE9IHRyYWNrQnVmZmVyLnNhbXBsZXMucHJl
c2VudGF0aW9uRW5kKCkpIHsKQEAgLTExMjIsMTAgKzExMjQsMTAgQEAgdm9pZCBTb3VyY2VCdWZm
ZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlU2FtcGxlKFNvdXJjZUJ1ZmZlclByaXZh
dGUqLCBQYXMKICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIGhpZ2hlc3QgcHJlc2VudGF0aW9u
IHRpbWVzdGFtcCBmb3IgdHJhY2sgYnVmZmVyIGlzIHNldCBhbmQgbGVzcyB0aGFuIHByZXNlbnRh
dGlvbiB0aW1lc3RhbXAKLSAgICAgICAgaWYgKHRyYWNrQnVmZmVyLmhpZ2hlc3RQcmVzZW50YXRp
b25UaW1lc3RhbXAuaXNWYWxpZCgpICYmIHRyYWNrQnVmZmVyLmhpZ2hlc3RQcmVzZW50YXRpb25U
aW1lc3RhbXAgPCBwcmVzZW50YXRpb25UaW1lc3RhbXApIHsKKyAgICAgICAgaWYgKHRyYWNrQnVm
ZmVyLmhpZ2hlc3RQcmVzZW50YXRpb25UaW1lc3RhbXAuaXNWYWxpZCgpICYmIHRyYWNrQnVmZmVy
LmhpZ2hlc3RQcmVzZW50YXRpb25UaW1lc3RhbXAgPD0gcHJlc2VudGF0aW9uVGltZXN0YW1wKSB7
CiAgICAgICAgICAgICAvLyBSZW1vdmUgYWxsIGNvZGVkIGZyYW1lcyBmcm9tIHRyYWNrIGJ1ZmZl
ciB0aGF0IGhhdmUgYSBwcmVzZW50YXRpb24gdGltZXN0YW1wIGdyZWF0ZXIgdGhhbiBoaWdoZXN0
CiAgICAgICAgICAgICAvLyBwcmVzZW50YXRpb24gdGltZXN0YW1wIGFuZCBsZXNzIHRoYW4gb3Ig
ZXF1YWwgdG8gZnJhbWUgZW5kIHRpbWVzdGFtcC4KLSAgICAgICAgICAgIGF1dG8gaXRlcl9wYWly
ID0gdHJhY2tCdWZmZXIuc2FtcGxlcy5maW5kU2FtcGxlc0JldHdlZW5QcmVzZW50YXRpb25UaW1l
cyh0cmFja0J1ZmZlci5oaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wLCBmcmFtZUVuZFRpbWVz
dGFtcCk7CisgICAgICAgICAgICBhdXRvIGl0ZXJfcGFpciA9IHRyYWNrQnVmZmVyLnNhbXBsZXMu
ZmluZFNhbXBsZXNXaXRoaW5QcmVzZW50YXRpb25SYW5nZSh0cmFja0J1ZmZlci5oaWdoZXN0UHJl
c2VudGF0aW9uVGltZXN0YW1wLCBmcmFtZUVuZFRpbWVzdGFtcCk7CiAgICAgICAgICAgICBpZiAo
aXRlcl9wYWlyLmZpcnN0ICE9IHRyYWNrQnVmZmVyLnNhbXBsZXMucHJlc2VudGF0aW9uRW5kKCkp
CiAgICAgICAgICAgICAgICAgZXJhc2VkU2FtcGxlcy5pbnNlcnQoaXRlcl9wYWlyLmZpcnN0LCBp
dGVyX3BhaXIuc2Vjb25kKTsKICAgICAgICAgfQpAQCAtMTQ1NCw2ICsxNDU2LDIxIEBAIHZvaWQg
U291cmNlQnVmZmVyOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3QoKQogICAgICAgICBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPnZtKCkuaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoZXh0cmFNZW1v
cnlDb3N0RGVsdGEpOwogfQogCitWZWN0b3I8U3RyaW5nPiBTb3VyY2VCdWZmZXI6OmJ1ZmZlcmVk
U2FtcGxlc0ZvclRyYWNrSUQoQXRvbWljU3RyaW5nIHRyYWNrSUQpCit7CisgICAgYXV0byBpdCA9
IG1fdHJhY2tCdWZmZXJNYXAuZmluZCh0cmFja0lEKTsKKyAgICBpZiAoaXQgPT0gbV90cmFja0J1
ZmZlck1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CisKKyAgICBU
cmFja0J1ZmZlciYgdHJhY2tCdWZmZXIgPSBpdC0+dmFsdWU7CisgICAgVmVjdG9yPFN0cmluZz4g
c2FtcGxlRGVzY3JpcHRpb25zOworICAgIGZvciAoYXV0byBzYW1wbGVJdGVyID0gdHJhY2tCdWZm
ZXIuc2FtcGxlcy5kZWNvZGVCZWdpbigpOyBzYW1wbGVJdGVyICE9IHRyYWNrQnVmZmVyLnNhbXBs
ZXMuZGVjb2RlRW5kKCk7ICsrc2FtcGxlSXRlcikgeworICAgICAgICBNZWRpYVNhbXBsZSogc2Ft
cGxlID0gc2FtcGxlSXRlci0+c2Vjb25kLmdldCgpOworICAgICAgICBzYW1wbGVEZXNjcmlwdGlv
bnMuYXBwZW5kKHRvU3RyaW5nKCpzYW1wbGUpKTsKKyAgICB9CisgICAgcmV0dXJuIHNhbXBsZURl
c2NyaXB0aW9uczsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oCmluZGV4
IGM4YjJiN2U3NzExZWU3MWMyYWIwNjY2NTYwZmVlNjgyMWE5ZTI0ZmQuLjRlYTgxNzFlYjM3OTE1
ZGU2YTYwOTQ0M2MwNjE5Mzk4ZGJlMzhlOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaApAQCAtMTU4LDYgKzE1OCwxMCBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeUNvc3QoKTsKIAorICAgIC8vIEludGVy
bmFscworICAgIGZyaWVuZCBjbGFzcyBJbnRlcm5hbHM7CisgICAgVmVjdG9yPFN0cmluZz4gYnVm
ZmVyZWRTYW1wbGVzRm9yVHJhY2tJRChBdG9taWNTdHJpbmcpOworCiAgICAgUmVmPFNvdXJjZUJ1
ZmZlclByaXZhdGU+IG1fcHJpdmF0ZTsKICAgICBNZWRpYVNvdXJjZSogbV9zb3VyY2U7CiAgICAg
R2VuZXJpY0V2ZW50UXVldWUgbV9hc3luY0V2ZW50UXVldWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmlu
ZGV4IDU5ZTkzYWVhM2I3ZDI5MTgwMDM5ODdhYjMyOWRkNjdiYzczZTIyNDcuLmI0YmE4YTc4NGUw
YTk1MjY0NDMxNTVhNTcwNzkyZmY2YTcwOGRjOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0z
MTU3LDYgKzMxNTcsOCBAQCBfX1pON1dlYkNvcmUxMlJlbmRlck9iamVjdDE5cmVzZXRUZXh0QXV0
b3NpemluZ0V2CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCitfX1pON1dlYkNv
cmUxMlNvdXJjZUJ1ZmZlcjI1YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJREVOM1dURjEyQXRvbWlj
U3RyaW5nRQorX19aTjdXZWJDb3JlMTR0b1NvdXJjZUJ1ZmZlckVOM0pTQzdKU1ZhbHVlRQogX19a
TjdXZWJDb3JlMjZNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTE5cmVnaXN0ZXJNZWRpYUVuZ2lu
ZUVQRnZQRk4zV1RGMTBQYXNzT3duUHRySU5TXzI3TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNl
RUVFUE5TXzExTWVkaWFQbGF5ZXJFRVBGdlJOUzFfN0hhc2hTZXRJTlMxXzZTdHJpbmdFTlMxXzEw
U3RyaW5nSGFzaEVOUzFfMTBIYXNoVHJhaXRzSVNBX0VFRUVFUEZOUzVfMTJTdXBwb3J0c1R5cGVF
UktOU18yOE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnNFRVBGdlJOUzFfNlZlY3RvcklTQV9M
bTBFTlMxXzE1Q3Jhc2hPbk92ZXJmbG93RUVFRVBGdnZFUEZ2UktTQV9FUEZiU1hfU1hfRUUKICNl
bmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVkaWFTYW1wbGUuaAppbmRleCBhN2NmZGRiMWI5
YjNmODExMWViMGYzNWQ4Zjc1MGE5Mjk1NjM5Y2E1Li44NzA3NWI4YzMwOGM4Y2RlNmRlYzE5MGY3
NDVkYThmYTExMjNmMmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRp
YVNhbXBsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKQEAg
LTI2LDYgKzI2LDggQEAKICNpZm5kZWYgTWVkaWFTYW1wbGVfaAogI2RlZmluZSBNZWRpYVNhbXBs
ZV9oCiAKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
I2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgpAQCAtNTYsNiArNTgsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBNZWRpYVRpbWUgZHVyYXRpb24oKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBBdG9taWNTdHJpbmcgdHJhY2tJRCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHNpemVf
dCBzaXplSW5CeXRlcygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBwcmVzZW50
YXRpb25TaXplKCkgY29uc3QgPSAwOwogCiAgICAgZW51bSBTYW1wbGVGbGFncyB7CiAgICAgICAg
IE5vbmUgPSAwLApAQCAtNjcsNiArNzAsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzU3luYygp
IGNvbnN0IHsgcmV0dXJuIGZsYWdzKCkgJiBJc1N5bmM7IH0KICAgICBib29sIGlzTm9uRGlzcGxh
eWluZygpIGNvbnN0IHsgcmV0dXJuIGZsYWdzKCkgJiBOb25EaXNwbGF5aW5nOyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdCA9IDA7CiB9OwogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
Lm1tCmluZGV4IDE2MzQ3Y2ZiODhhZDllOTI5Njc2NTFlZmQzZDc5MGI1ZjM4Nzk1MWYuLjkxOTE5
MGQ4YWNiOTQ4ZDFmNGY5Yjc1MjdlYjdkNDkzNTdiYWQ3ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tCkBAIC0yOTQsOSAr
Mjk0LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIE1lZGlhVGltZSBkdXJhdGlvbigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRvTWVkaWFUaW1lKENNU2FtcGxlQnVmZmVyR2V0RHVyYXRpb24o
bV9zYW1wbGUuZ2V0KCkpKTsgfQogICAgIHZpcnR1YWwgQXRvbWljU3RyaW5nIHRyYWNrSUQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX2lkOyB9CiAgICAgdmlydHVhbCBzaXplX3Qgc2l6ZUlu
Qnl0ZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDTVNhbXBsZUJ1ZmZlckdldFRvdGFsU2Ft
cGxlU2l6ZShtX3NhbXBsZS5nZXQoKSk7IH0KKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBwcmVzZW50
YXRpb25TaXplKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIFNhbXBsZUZsYWdzIGZs
YWdzKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBQbGF0Zm9ybVNhbXBsZSBwbGF0Zm9y
bVNhbXBsZSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Qgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICBNZWRpYVNhbXBsZUFWRk9iakMoQ01T
YW1wbGVCdWZmZXJSZWYgc2FtcGxlLCBpbnQgdHJhY2tJRCkKQEAgLTMzOSw2ICszNDEsMjAgQEAg
TWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzIE1lZGlhU2FtcGxlQVZGT2JqQzo6ZmxhZ3MoKSBjb25z
dAogICAgIHJldHVybiBTYW1wbGVGbGFncyhyZXR1cm5WYWx1ZSk7CiB9CiAKK0Zsb2F0U2l6ZSBN
ZWRpYVNhbXBsZUFWRk9iakM6OnByZXNlbnRhdGlvblNpemUoKSBjb25zdAoreworICAgIENNRm9y
bWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBDTVNhbXBsZUJ1ZmZlckdldEZv
cm1hdERlc2NyaXB0aW9uKG1fc2FtcGxlLmdldCgpKTsKKyAgICBpZiAoQ01Gb3JtYXREZXNjcmlw
dGlvbkdldE1lZGlhVHlwZShmb3JtYXREZXNjcmlwdGlvbikgIT0ga0NNTWVkaWFUeXBlX1ZpZGVv
KQorICAgICAgICByZXR1cm4gRmxvYXRTaXplKCk7CisKKyAgICByZXR1cm4gRmxvYXRTaXplKENN
VmlkZW9Gb3JtYXREZXNjcmlwdGlvbkdldFByZXNlbnRhdGlvbkRpbWVuc2lvbnMoZm9ybWF0RGVz
Y3JpcHRpb24sIHRydWUsIHRydWUpKTsgCit9CisKK3ZvaWQgTWVkaWFTYW1wbGVBVkZPYmpDOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJ7UFRTKCIsIHBy
ZXNlbnRhdGlvblRpbWUoKSwgIiksIERUUygiLCBkZWNvZGVUaW1lKCksICIpLCBkdXJhdGlvbigi
LCBkdXJhdGlvbigpLCAiKSwgZmxhZ3MoIiwgKGludClmbGFncygpLCAiKSwgcHJlc2VudGF0aW9u
U2l6ZSgiLCBwcmVzZW50YXRpb25TaXplKCksICIpfSIpOworfQorCiAjcHJhZ21hIG1hcmsgLQog
I3ByYWdtYSBtYXJrIE1lZGlhRGVzY3JpcHRpb25BVkZPYmpDCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja0JveC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tCb3guY3BwCmluZGV4IDRlN2Fi
ZDhjY2Q0MWI4YTA1N2Y5M2RmNDcxOGIzOGRkZWM3NzM2MWQuLmFlYzA0NWMyNTdmYjczY2QwZGU4
ZDY1ZGZhY2UyNDg2MTdjY2FiZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21vY2svbWVkaWFzb3VyY2UvTW9ja0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrQm94LmNwcApAQCAtMTEyLDcgKzExMiw3IEBAIGNvbnN0
IFN0cmluZyYgTW9ja0luaXRpYWxpemF0aW9uQm94Ojp0eXBlKCkKIE1vY2tTYW1wbGVCb3g6Ok1v
Y2tTYW1wbGVCb3goQXJyYXlCdWZmZXIqIGRhdGEpCiAgICAgOiBNb2NrQm94KGRhdGEpCiB7Ci0g
ICAgQVNTRVJUKG1fbGVuZ3RoID09IDI5KTsKKyAgICBBU1NFUlQobV9sZW5ndGggPT0gMzApOwog
CiAgICAgUmVmUHRyPEpTQzo6RGF0YVZpZXc+IHZpZXcgPSBKU0M6OkRhdGFWaWV3OjpjcmVhdGUo
ZGF0YSwgMCwgZGF0YS0+Ynl0ZUxlbmd0aCgpKTsKICAgICBpbnQzMl90IHRpbWVTY2FsZSA9IHZp
ZXctPmdldDxpbnQzMl90Pig4LCB0cnVlKTsKQEAgLTEyOCw2ICsxMjgsNyBAQCBNb2NrU2FtcGxl
Qm94OjpNb2NrU2FtcGxlQm94KEFycmF5QnVmZmVyKiBkYXRhKQogCiAgICAgbV90cmFja0lEID0g
dmlldy0+Z2V0PGludDMyX3Q+KDI0LCB0cnVlKTsKICAgICBtX2ZsYWdzID0gdmlldy0+Z2V0PHVp
bnQ4X3Q+KDI4LCB0cnVlKTsKKyAgICBtX2dlbmVyYXRpb24gPSB2aWV3LT5nZXQ8dWludDhfdD4o
MjksIHRydWUpOwogfQogCiBjb25zdCBTdHJpbmcmIE1vY2tTYW1wbGVCb3g6OnR5cGUoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrQm94
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tCb3guaApp
bmRleCA1ZWQ0YTVmOGY4MzkzNWQ4ZmJmOGEwZTM0YjE3NDljOWY0ZmRhMzRmLi5iYmFiNmJiMzIx
OWJjZjAyYmJhY2I2ZmFlM2Y4ZTkxOGI2YjEwMzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tCb3guaApAQCAtMTE3LDYgKzExNyw3IEBA
IHByb3RlY3RlZDoKIC8vIDQgYnl0ZXMgOiBzaWduZWQgOiBkdXJhdGlvbiB0aW1lIHZhbHVlCiAv
LyA0IGJ5dGVzIDogc2lnbmVkIDogdHJhY2sgSUQKIC8vIDEgYnl0ZSAgOiB1bnNpZ25lZCA6IGZs
YWdzCisvLyAxIGJ5dGUgIDogdW5zaWduZWQgOiBnZW5lcmF0aW9uCiAvLwogY2xhc3MgTW9ja1Nh
bXBsZUJveCBmaW5hbCA6IHB1YmxpYyBNb2NrQm94IHsKIHB1YmxpYzoKQEAgLTEyOCw2ICsxMjks
NyBAQCBwdWJsaWM6CiAgICAgTWVkaWFUaW1lIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9k
dXJhdGlvbjsgfQogICAgIGludDMyX3QgdHJhY2tJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tJ
RDsgfQogICAgIHVpbnQ4X3QgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9CisgICAg
dWludDhfdCBnZW5lcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9nZW5lcmF0aW9uOyB9CiAKICAg
ICBlbnVtIHsKICAgICAgICAgSXNTeW5jID0gMSA8PCAwLApAQCAtMTQ2LDYgKzE0OCw3IEBAIHBy
b3RlY3RlZDoKICAgICBNZWRpYVRpbWUgbV9kdXJhdGlvbjsKICAgICBpbnQzMl90IG1fdHJhY2tJ
RDsKICAgICB1aW50OF90IG1fZmxhZ3M7CisgICAgdWludDhfdCBtX2dlbmVyYXRpb247CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNl
L01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21v
Y2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCmluZGV4IDQ0YzNiY2Zj
ZTAyYTdjMTU1NmE2Zjc2OGMyMjYwNDY3ZTI1OWQzNTQuLjYzZDMyMjEyMDcyNTQwMDI3YTlhZWEw
NzBlZWQwZTIwODk5MDFjOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21v
Y2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUu
Y3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVu
dC5oIgogI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+Cisj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NTEsOSArNTIsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTWVkaWFUaW1lIGR1cmF0aW9uKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9ib3guZHVyYXRpb24oKTsgfQogICAgIHZpcnR1YWwg
QXRvbWljU3RyaW5nIHRyYWNrSUQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2lkOyB9CiAg
ICAgdmlydHVhbCBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBz
aXplb2YobV9ib3gpOyB9Ci0KICAgICB2aXJ0dWFsIFNhbXBsZUZsYWdzIGZsYWdzKCkgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCBQbGF0Zm9ybVNhbXBsZSBwbGF0Zm9ybVNhbXBsZSgpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgRmxvYXRTaXplIHByZXNlbnRhdGlvblNpemUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBGbG9hdFNpemUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB1bnNpZ25lZCBnZW5lcmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9ib3guZ2VuZXJhdGlvbigpOyB9CiAKIHByb3RlY3RlZDoKICAgICBN
b2NrTWVkaWFTYW1wbGUoY29uc3QgTW9ja1NhbXBsZUJveCYgYm94KQpAQCAtODAsNiArODQsMTEg
QEAgUGxhdGZvcm1TYW1wbGUgTW9ja01lZGlhU2FtcGxlOjpwbGF0Zm9ybVNhbXBsZSgpCiAgICAg
cmV0dXJuIHNhbXBsZTsKIH0KIAordm9pZCBNb2NrTWVkaWFTYW1wbGU6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIntQVFMoIiwgcHJlc2VudGF0aW9uVGlt
ZSgpLCAiKSwgRFRTKCIsIGRlY29kZVRpbWUoKSwgIiksIGR1cmF0aW9uKCIsIGR1cmF0aW9uKCks
ICIpLCBmbGFncygiLCAoaW50KWZsYWdzKCksICIpLCBnZW5lcmF0aW9uKCIsIGdlbmVyYXRpb24o
KSwgIil9Iik7Cit9CisKIGNsYXNzIE1vY2tNZWRpYURlc2NyaXB0aW9uIGZpbmFsIDogcHVibGlj
IE1lZGlhRGVzY3JpcHRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8TW9ja01lZGlh
RGVzY3JpcHRpb24+IGNyZWF0ZShjb25zdCBNb2NrVHJhY2tCb3gmIGJveCkgeyByZXR1cm4gYWRv
cHRSZWYobmV3IE1vY2tNZWRpYURlc2NyaXB0aW9uKGJveCkpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAKaW5kZXggNjJjYzQ1ZTAyOTM1MjRmZDA1Njc3NmE3MGVmYjg0OWMzZjI5
MTI0OC4uYTA3Y2Q2YTI3NTQwYjM3NjM1OGNjMWI5YjUwY2RkZTY5ZTEzMWE4MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtODgsNiArODgsNyBAQAogI2luY2x1ZGUgIlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAi
U2hhZG93Um9vdC5oIgorI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlNwZWxs
Q2hlY2tlci5oIgogI2luY2x1ZGUgIlN0YXRpY05vZGVMaXN0LmgiCiAjaW5jbHVkZSAiU3R5bGVT
aGVldENvbnRlbnRzLmgiCkBAIC0yMjQ0LDYgKzIyNDUsMTQgQEAgdm9pZCBJbnRlcm5hbHM6Omlu
aXRpYWxpemVNb2NrTWVkaWFTb3VyY2UoKQogI2VuZGlmCiAgICAgTWVkaWFQbGF5ZXJGYWN0b3J5
U3VwcG9ydDo6Y2FsbFJlZ2lzdGVyTWVkaWFFbmdpbmUoTW9ja01lZGlhUGxheWVyTWVkaWFTb3Vy
Y2U6OnJlZ2lzdGVyTWVkaWFFbmdpbmUpOwogfQorCitWZWN0b3I8U3RyaW5nPiBJbnRlcm5hbHM6
OmJ1ZmZlcmVkU2FtcGxlc0ZvclRyYWNrSUQoU291cmNlQnVmZmVyKiBidWZmZXIsIEF0b21pY1N0
cmluZyB0cmFja0lEKQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gVmVjdG9y
PFN0cmluZz4oKTsKKworICAgIHJldHVybiBidWZmZXItPmJ1ZmZlcmVkU2FtcGxlc0ZvclRyYWNr
SUQodHJhY2tJRCk7Cit9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFTykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5oCmluZGV4IDdmYTkwZmRkMTcxNzc0MjVjMTdjYmE3ODIyNDBjNGRhZjFm
OWY2MmIuLmI3NmFhZmNiZjRlZjBhZjU3MTg5NTRhMGU1NGQ2YmVlMTM1MTVlN2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuaApAQCAtNTgsNiArNTgsNyBAQCBjbGFzcyBQYWdlOwogY2xh
c3MgUmFuZ2U7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOworY2xhc3MgU291cmNlQnVmZmVyOwogY2xhc3MgVGltZVJhbmdlczsKIGNs
YXNzIFR5cGVDb252ZXJzaW9uczsKIApAQCAtMzI2LDYgKzMyNyw3IEBAIHB1YmxpYzoKIAogI2lm
IEVOQUJMRShNRURJQV9TT1VSQ0UpCiAgICAgdm9pZCBpbml0aWFsaXplTW9ja01lZGlhU291cmNl
KCk7CisgICAgVmVjdG9yPFN0cmluZz4gYnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJRChTb3VyY2VC
dWZmZXIqLCBBdG9taWNTdHJpbmcpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVklERU8pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKaW5kZXggNmI3M2ExYWY5YmE2NWEwODE4Zjc2YWJh
YzczYzAyODQ3ZjJmNzU3OC4uZDFhNTJjZTg4MmUyZGU0NzI0ZGJhM2MzNTgzZjZjNzhhYzA0ZjY3
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbApAQCAtMjc2LDggKzI3NiwxMCBA
QAogICAgIFtSYWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gaXNQbHVnaW5TbmFwc2hvdHRlZChFbGVt
ZW50IGVsZW1lbnQpOwogCiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gQ2xpZW50UmVjdCBzZWxlY3Rp
b25Cb3VuZHMoKTsKLSAgICAKKwogICAgIFtDb25kaXRpb25hbD1NRURJQV9TT1VSQ0VdIHZvaWQg
aW5pdGlhbGl6ZU1vY2tNZWRpYVNvdXJjZSgpOworICAgIFtDb25kaXRpb25hbD1NRURJQV9TT1VS
Q0VdIERPTVN0cmluZ1tdIGJ1ZmZlcmVkU2FtcGxlc0ZvclRyYWNrSUQoU291cmNlQnVmZmVyIGJ1
ZmZlciwgRE9NU3RyaW5nIHRyYWNrSUQpOworCiAKICAgICBbQ29uZGl0aW9uYWw9VklERU9dIHZv
aWQgYmVnaW5NZWRpYVNlc3Npb25JbnRlcnJ1cHRpb24oKTsKICAgICBbQ29uZGl0aW9uYWw9VklE
RU9dIHZvaWQgZW5kTWVkaWFTZXNzaW9uSW50ZXJydXB0aW9uKERPTVN0cmluZyBmbGFncyk7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggZTQ1Mjc1NjdmZThhNzkxNWJjNzdjMDYzNDFlODBhZTVjM2EyMzdhYi4uNWVjNjhhZjkx
NjQxNzJmYzlhYmFhNGQ0OWIwYjJjNmNmZDk0ZTgyMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisy
MDE0LTA2LTAxICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFtN
U0VdIEFwcGVuZHMgb2Ygb3ZlcmxhcHBpbmcgc2FtcGxlIGRhdGEgZG8gbm90IGNsZWFyIGV4aXN0
aW5nIHNhbXBsZXMgcHJvcGVybHkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzM0MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2Utb3ZlcmxhcHBp
bmctYXBwZW5kLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogbWVkaWEvbWVkaWEtc291
cmNlL21lZGlhLXNvdXJjZS1vdmVybGFwcGluZy1hcHBlbmQuaHRtbDogQWRkZWQuCisgICAgICAg
ICogbWVkaWEvbWVkaWEtc291cmNlL21vY2stbWVkaWEtc291cmNlLmpzOgorCiAyMDE0LTA1LTMx
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGVzdCBmYWls
dXJlIGZyb20gdGhlIHByZXZpb3VzIGNoZWNrLWluLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
bWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1vdmVybGFwcGluZy1hcHBlbmQtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1vdmVy
bGFwcGluZy1hcHBlbmQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzZGMzMmEyYjg0MDdiNzM3
OTk0ZDQ1MTY5NmNmYzBiYTczMzI0NTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9t
ZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLW92ZXJsYXBwaW5nLWFwcGVuZC1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwzNSBAQAorCitSVU4odmlkZW8uc3JjID0gVVJMLmNyZWF0ZU9iamVj
dFVSTChzb3VyY2UpKQorRVZFTlQoc291cmNlb3BlbikKK1JVTihzb3VyY2VCdWZmZXIgPSBzb3Vy
Y2UuYWRkU291cmNlQnVmZmVyKCJ2aWRlby9tb2NrOyBjb2RlY3M9bW9jayIpKQorUlVOKHNvdXJj
ZUJ1ZmZlci5hcHBlbmRCdWZmZXIoaW5pdFNlZ21lbnQpKQorRVZFTlQodXBkYXRlZW5kKQorUlVO
KHNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxlcykpCitFVkVOVCh1cGRhdGVlbmQpCitF
WFBFQ1RFRCAoYnVmZmVyZWRTYW1wbGVzLmxlbmd0aCA9PSAnNicpIE9LCit7UFRTKHswLzEwMDAs
IDAuMDAwMDAwfSksIERUUyh7MC8xMDAwLCAwLjAwMDAwMH0pLCBkdXJhdGlvbih7MTAwMC8xMDAw
LCAxLjAwMDAwMH0pLCBmbGFncygxKSwgZ2VuZXJhdGlvbigwKX0KK3tQVFMoezEwMDAvMTAwMCwg
MS4wMDAwMDB9KSwgRFRTKHsxMDAwLzEwMDAsIDEuMDAwMDAwfSksIGR1cmF0aW9uKHsxMDAwLzEw
MDAsIDEuMDAwMDAwfSksIGZsYWdzKDApLCBnZW5lcmF0aW9uKDApfQore1BUUyh7MjAwMC8xMDAw
LCAyLjAwMDAwMH0pLCBEVFMoezIwMDAvMTAwMCwgMi4wMDAwMDB9KSwgZHVyYXRpb24oezEwMDAv
MTAwMCwgMS4wMDAwMDB9KSwgZmxhZ3MoMCksIGdlbmVyYXRpb24oMCl9Cit7UFRTKHszMDAwLzEw
MDAsIDMuMDAwMDAwfSksIERUUyh7MzAwMC8xMDAwLCAzLjAwMDAwMH0pLCBkdXJhdGlvbih7MTAw
MC8xMDAwLCAxLjAwMDAwMH0pLCBmbGFncygxKSwgZ2VuZXJhdGlvbigwKX0KK3tQVFMoezQwMDAv
MTAwMCwgNC4wMDAwMDB9KSwgRFRTKHs0MDAwLzEwMDAsIDQuMDAwMDAwfSksIGR1cmF0aW9uKHsx
MDAwLzEwMDAsIDEuMDAwMDAwfSksIGZsYWdzKDApLCBnZW5lcmF0aW9uKDApfQore1BUUyh7NTAw
MC8xMDAwLCA1LjAwMDAwMH0pLCBEVFMoezUwMDAvMTAwMCwgNS4wMDAwMDB9KSwgZHVyYXRpb24o
ezEwMDAvMTAwMCwgMS4wMDAwMDB9KSwgZmxhZ3MoMCksIGdlbmVyYXRpb24oMCl9CitSVU4oc291
cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKSkKK0VWRU5UKHVwZGF0ZWVuZCkKK0VYUEVD
VEVEIChidWZmZXJlZFNhbXBsZXMubGVuZ3RoID09ICc2JykgT0sKK3tQVFMoezAvMTAwMCwgMC4w
MDAwMDB9KSwgRFRTKHswLzEwMDAsIDAuMDAwMDAwfSksIGR1cmF0aW9uKHsxMDAwLzEwMDAsIDEu
MDAwMDAwfSksIGZsYWdzKDEpLCBnZW5lcmF0aW9uKDEpfQore1BUUyh7MTAwMC8xMDAwLCAxLjAw
MDAwMH0pLCBEVFMoezEwMDAvMTAwMCwgMS4wMDAwMDB9KSwgZHVyYXRpb24oezEwMDAvMTAwMCwg
MS4wMDAwMDB9KSwgZmxhZ3MoMCksIGdlbmVyYXRpb24oMSl9Cit7UFRTKHsyMDAwLzEwMDAsIDIu
MDAwMDAwfSksIERUUyh7MjAwMC8xMDAwLCAyLjAwMDAwMH0pLCBkdXJhdGlvbih7MTAwMC8xMDAw
LCAxLjAwMDAwMH0pLCBmbGFncygwKSwgZ2VuZXJhdGlvbigxKX0KK3tQVFMoezMwMDAvMTAwMCwg
My4wMDAwMDB9KSwgRFRTKHszMDAwLzEwMDAsIDMuMDAwMDAwfSksIGR1cmF0aW9uKHsxMDAwLzEw
MDAsIDEuMDAwMDAwfSksIGZsYWdzKDEpLCBnZW5lcmF0aW9uKDEpfQore1BUUyh7NDAwMC8xMDAw
LCA0LjAwMDAwMH0pLCBEVFMoezQwMDAvMTAwMCwgNC4wMDAwMDB9KSwgZHVyYXRpb24oezEwMDAv
MTAwMCwgMS4wMDAwMDB9KSwgZmxhZ3MoMCksIGdlbmVyYXRpb24oMSl9Cit7UFRTKHs1MDAwLzEw
MDAsIDUuMDAwMDAwfSksIERUUyh7NTAwMC8xMDAwLCA1LjAwMDAwMH0pLCBkdXJhdGlvbih7MTAw
MC8xMDAwLCAxLjAwMDAwMH0pLCBmbGFncygwKSwgZ2VuZXJhdGlvbigxKX0KK1JVTihzb3VyY2VC
dWZmZXIuYXBwZW5kQnVmZmVyKHNhbXBsZXMpKQorRVZFTlQodXBkYXRlZW5kKQorRVhQRUNURUQg
KGJ1ZmZlcmVkU2FtcGxlcy5sZW5ndGggPT0gJzYnKSBPSwore1BUUyh7MC8xMDAwLCAwLjAwMDAw
MH0pLCBEVFMoezAvMTAwMCwgMC4wMDAwMDB9KSwgZHVyYXRpb24oezEwMDAvMTAwMCwgMS4wMDAw
MDB9KSwgZmxhZ3MoMSksIGdlbmVyYXRpb24oMil9Cit7UFRTKHsyMDAwLzEwMDAsIDIuMDAwMDAw
fSksIERUUyh7MTAwMC8xMDAwLCAxLjAwMDAwMH0pLCBkdXJhdGlvbih7MTAwMC8xMDAwLCAxLjAw
MDAwMH0pLCBmbGFncygwKSwgZ2VuZXJhdGlvbigyKX0KK3tQVFMoezEwMDAvMTAwMCwgMS4wMDAw
MDB9KSwgRFRTKHsyMDAwLzEwMDAsIDIuMDAwMDAwfSksIGR1cmF0aW9uKHsxMDAwLzEwMDAsIDEu
MDAwMDAwfSksIGZsYWdzKDApLCBnZW5lcmF0aW9uKDIpfQore1BUUyh7MzAwMC8xMDAwLCAzLjAw
MDAwMH0pLCBEVFMoezMwMDAvMTAwMCwgMy4wMDAwMDB9KSwgZHVyYXRpb24oezEwMDAvMTAwMCwg
MS4wMDAwMDB9KSwgZmxhZ3MoMSksIGdlbmVyYXRpb24oMil9Cit7UFRTKHs1MDAwLzEwMDAsIDUu
MDAwMDAwfSksIERUUyh7NDAwMC8xMDAwLCA0LjAwMDAwMH0pLCBkdXJhdGlvbih7MTAwMC8xMDAw
LCAxLjAwMDAwMH0pLCBmbGFncygwKSwgZ2VuZXJhdGlvbigyKX0KK3tQVFMoezQwMDAvMTAwMCwg
NC4wMDAwMDB9KSwgRFRTKHs1MDAwLzEwMDAsIDUuMDAwMDAwfSksIGR1cmF0aW9uKHsxMDAwLzEw
MDAsIDEuMDAwMDAwfSksIGZsYWdzKDApLCBnZW5lcmF0aW9uKDIpfQorRU5EIE9GIFRFU1QKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1v
dmVybGFwcGluZy1hcHBlbmQuaHRtbCBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9t
ZWRpYS1zb3VyY2Utb3ZlcmxhcHBpbmctYXBwZW5kLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGY0MjA3YjAx
OThjZjdkNDI2MGRiZTVhZDdiMzc1OTYyYmNjMDY3YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2Utb3ZlcmxhcHBpbmctYXBwZW5k
Lmh0bWwKQEAgLTAsMCArMSw5NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
ICAgIDx0aXRsZT5tb2NrLW1lZGlhLXNvdXJjZTwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Im1v
Y2stbWVkaWEtc291cmNlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vdmlkZW8t
dGVzdC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICB2YXIgc291cmNlOworICAgIHZh
ciBzb3VyY2VCdWZmZXI7CisgICAgdmFyIGluaXRTZWdtZW50OworICAgIHZhciBzYW1wbGVzOwor
ICAgIHZhciBidWZmZXJlZFNhbXBsZXM7CisKKyAgICBpZiAod2luZG93LmludGVybmFscykKKyAg
ICAgICAgaW50ZXJuYWxzLmluaXRpYWxpemVNb2NrTWVkaWFTb3VyY2UoKTsKKworICAgIGZ1bmN0
aW9uIHJ1blRlc3QoKQorICAgIHsKKyAgICAgICAgZmluZE1lZGlhRWxlbWVudCgpOworCisgICAg
ICAgIHNvdXJjZSA9IG5ldyBNZWRpYVNvdXJjZSgpOworICAgICAgICB3YWl0Rm9yRXZlbnRPbihz
b3VyY2UsICdzb3VyY2VvcGVuJywgc291cmNlT3Blbik7CisgICAgICAgIHJ1bigndmlkZW8uc3Jj
ID0gVVJMLmNyZWF0ZU9iamVjdFVSTChzb3VyY2UpJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24g
c291cmNlT3BlbigpCisgICAgeworICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZlciA9IHNvdXJjZS5h
ZGRTb3VyY2VCdWZmZXIoInZpZGVvL21vY2s7IGNvZGVjcz1tb2NrIiknKTsKKyAgICAgICAgd2Fp
dEZvckV2ZW50T24oc291cmNlQnVmZmVyLCAndXBkYXRlZW5kJywgbG9hZE9yZGVyZWRTYW1wbGVz
LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIGluaXRTZWdtZW50ID0gbWFrZUFJbml0KDgsIFttYWtl
QVRyYWNrKDEsICdtb2NrJywgVFJBQ0tfS0lORC5WSURFTyldKTsKKyAgICAgICAgcnVuKCdzb3Vy
Y2VCdWZmZXIuYXBwZW5kQnVmZmVyKGluaXRTZWdtZW50KScpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGxvYWRPcmRlcmVkU2FtcGxlcygpCisgICAgeworICAgICAgIHNhbXBsZXMgPSBjb25jYXRl
bmF0ZVNhbXBsZXMoWworICAgICAgICAgICAgbWFrZUFTYW1wbGUoMCwgMCwgMSwgMSwgU0FNUExF
X0ZMQUcuU1lOQywgMCksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSgxLCAxLCAxLCAxLCBTQU1Q
TEVfRkxBRy5OT05FLCAwKSwKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDIsIDIsIDEsIDEsIFNB
TVBMRV9GTEFHLk5PTkUsIDApLAorICAgICAgICAgICAgbWFrZUFTYW1wbGUoMywgMywgMSwgMSwg
U0FNUExFX0ZMQUcuU1lOQywgMCksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSg0LCA0LCAxLCAx
LCBTQU1QTEVfRkxBRy5OT05FLCAwKSwKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDUsIDUsIDEs
IDEsIFNBTVBMRV9GTEFHLk5PTkUsIDApLAorICAgICAgICBdKTsKKyAgICAgICAgd2FpdEZvckV2
ZW50T24oc291cmNlQnVmZmVyLCAndXBkYXRlZW5kJywgbG9hZE1vcmVPcmRlcmVkU2FtcGxlcywg
ZmFsc2UsIHRydWUpOworICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2Ft
cGxlcyknKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBsb2FkTW9yZU9yZGVyZWRTYW1wbGVzKCkK
KyAgICB7CisgICAgICAgIGJ1ZmZlcmVkU2FtcGxlcyA9IGludGVybmFscy5idWZmZXJlZFNhbXBs
ZXNGb3JUcmFja0lEKHNvdXJjZUJ1ZmZlciwgMSk7CisgICAgICAgIHRlc3RFeHBlY3RlZCgiYnVm
ZmVyZWRTYW1wbGVzLmxlbmd0aCIsIDYpOworICAgICAgICBidWZmZXJlZFNhbXBsZXMuZm9yRWFj
aChjb25zb2xlV3JpdGUpOworCisgICAgICAgIHNhbXBsZXMgPSBjb25jYXRlbmF0ZVNhbXBsZXMo
WworICAgICAgICAgICAgbWFrZUFTYW1wbGUoMCwgMCwgMSwgMSwgU0FNUExFX0ZMQUcuU1lOQywg
MSksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSgxLCAxLCAxLCAxLCBTQU1QTEVfRkxBRy5OT05F
LCAxKSwKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDIsIDIsIDEsIDEsIFNBTVBMRV9GTEFHLk5P
TkUsIDEpLAorICAgICAgICAgICAgbWFrZUFTYW1wbGUoMywgMywgMSwgMSwgU0FNUExFX0ZMQUcu
U1lOQywgMSksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSg0LCA0LCAxLCAxLCBTQU1QTEVfRkxB
Ry5OT05FLCAxKSwKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDUsIDUsIDEsIDEsIFNBTVBMRV9G
TEFHLk5PTkUsIDEpLAorICAgICAgICBdKTsKKyAgICAgICAgd2FpdEZvckV2ZW50T24oc291cmNl
QnVmZmVyLCAndXBkYXRlZW5kJywgbG9hZFVub3JkZXJlZFNhbXBsZXMsIGZhbHNlLCB0cnVlKTsK
KyAgICAgICAgcnVuKCdzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKHNhbXBsZXMpJyk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gbG9hZFVub3JkZXJlZFNhbXBsZXMoKQorICAgIHsKKyAgICAgICAg
YnVmZmVyZWRTYW1wbGVzID0gaW50ZXJuYWxzLmJ1ZmZlcmVkU2FtcGxlc0ZvclRyYWNrSUQoc291
cmNlQnVmZmVyLCAxKTsKKyAgICAgICAgdGVzdEV4cGVjdGVkKCJidWZmZXJlZFNhbXBsZXMubGVu
Z3RoIiwgNik7CisgICAgICAgIGJ1ZmZlcmVkU2FtcGxlcy5mb3JFYWNoKGNvbnNvbGVXcml0ZSk7
CisKKyAgICAgICAgc2FtcGxlcyA9IGNvbmNhdGVuYXRlU2FtcGxlcyhbCisgICAgICAgICAgICBt
YWtlQVNhbXBsZSgwLCAwLCAxLCAxLCBTQU1QTEVfRkxBRy5TWU5DLCAyKSwKKyAgICAgICAgICAg
IG1ha2VBU2FtcGxlKDIsIDEsIDEsIDEsIFNBTVBMRV9GTEFHLk5PTkUsIDIpLAorICAgICAgICAg
ICAgbWFrZUFTYW1wbGUoMSwgMiwgMSwgMSwgU0FNUExFX0ZMQUcuTk9ORSwgMiksCisgICAgICAg
ICAgICBtYWtlQVNhbXBsZSgzLCAzLCAxLCAxLCBTQU1QTEVfRkxBRy5TWU5DLCAyKSwKKyAgICAg
ICAgICAgIG1ha2VBU2FtcGxlKDUsIDQsIDEsIDEsIFNBTVBMRV9GTEFHLk5PTkUsIDIpLAorICAg
ICAgICAgICAgbWFrZUFTYW1wbGUoNCwgNSwgMSwgMSwgU0FNUExFX0ZMQUcuTk9ORSwgMiksCisg
ICAgICAgIF0pOworICAgICAgICB3YWl0Rm9yRXZlbnRPbihzb3VyY2VCdWZmZXIsICd1cGRhdGVl
bmQnLCBzYW1wbGVzQWRkZWQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgcnVuKCdzb3VyY2VCdWZm
ZXIuYXBwZW5kQnVmZmVyKHNhbXBsZXMpJyk7CisgICAgfQorCisgICAgIGZ1bmN0aW9uIHNhbXBs
ZXNBZGRlZCgpCisgICAgeworICAgICAgICBidWZmZXJlZFNhbXBsZXMgPSBpbnRlcm5hbHMuYnVm
ZmVyZWRTYW1wbGVzRm9yVHJhY2tJRChzb3VyY2VCdWZmZXIsIDEpOworICAgICAgICB0ZXN0RXhw
ZWN0ZWQoImJ1ZmZlcmVkU2FtcGxlcy5sZW5ndGgiLCA2KTsKKyAgICAgICAgYnVmZmVyZWRTYW1w
bGVzLmZvckVhY2goY29uc29sZVdyaXRlKTsKKworICAgICAgICBlbmRUZXN0KCk7CisgICAgfQor
ICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorICAgIDx2
aWRlbz48L3ZpZGVvPgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvbWVk
aWEtc291cmNlL21vY2stbWVkaWEtc291cmNlLmpzIGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEt
c291cmNlL21vY2stbWVkaWEtc291cmNlLmpzCmluZGV4IDdlNGQ3OTQyYzM2NGNiMWJjMmQ0ZGM4
NmU2ZThiZDliYzNmOGQzNjQuLjI4YmJlNDI4OWMyYjU1MGExMzRhNzhmZDBkMGFiYzViYWRhMGE4
MGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tb2NrLW1lZGlh
LXNvdXJjZS5qcworKysgYi9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbW9jay1tZWRp
YS1zb3VyY2UuanMKQEAgLTE2LDggKzE2LDggQEAgdmFyIFNBTVBMRV9GTEFHID0gewogICAgIERF
TEFZRUQ6IDEgPDwgMywKIH07CiAKLWZ1bmN0aW9uIG1ha2VBU2FtcGxlKHByZXNlbnRhdGlvblRp
bWUsIGRlY29kZVRpbWUsIGR1cmF0aW9uLCB0cmFja0lELCBmbGFncykgewotICAgIHZhciBieXRl
TGVuZ3RoID0gMjk7CitmdW5jdGlvbiBtYWtlQVNhbXBsZShwcmVzZW50YXRpb25UaW1lLCBkZWNv
ZGVUaW1lLCBkdXJhdGlvbiwgdHJhY2tJRCwgZmxhZ3MsIGdlbmVyYXRpb24pIHsKKyAgICB2YXIg
Ynl0ZUxlbmd0aCA9IDMwOwogICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZUxl
bmd0aCk7CiAgICAgdmFyIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTsKICAgICBhcnJh
eS5zZXQoc3RyaW5nVG9BcnJheSgnc21wbCcpKTsKQEAgLTMyLDggKzMyLDkgQEAgZnVuY3Rpb24g
bWFrZUFTYW1wbGUocHJlc2VudGF0aW9uVGltZSwgZGVjb2RlVGltZSwgZHVyYXRpb24sIHRyYWNr
SUQsIGZsYWdzKSB7CiAgICAgdmlldy5zZXRJbnQzMigyMCwgZHVyYXRpb24gKiB0aW1lU2NhbGUs
IHRydWUpOwogICAgIHZpZXcuc2V0SW50MzIoMjQsIHRyYWNrSUQsIHRydWUpOwogICAgIHZpZXcu
c2V0VWludDgoMjgsIGZsYWdzKTsKKyAgICB2aWV3LnNldFVpbnQ4KDI5LCBnZW5lcmF0aW9uKTsK
IAotICAgIHJldHVybiBidWZmZXI7CisgICAgcmV0dXJuIGJ1ZmZlcgogfQogCiBmdW5jdGlvbiBj
b25jYXRlbmF0ZVNhbXBsZXMoc2FtcGxlcykgewo=
</data>
<flag name="review"
          id="256848"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232366</attachid>
            <date>2014-06-01 21:44:01 -0700</date>
            <delta_ts>2014-06-01 21:44:01 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-133435-20140601214336.patch</filename>
            <type>text/plain</type>
            <size>32355</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5NTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDRhN2YzMTIxNDMxZjcwMzIzNDExZWVi
MTRkNmRlOTAyZDBmMjA4OTIuLmJjZmUxNDA5MjlkNWQ5NjJiOWQ4ODY3NjNlNjMyZjYyMWUxMjI1
NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTQtMDYtMDEgIEplciBOb2JsZSAgPGplci5ub2Js
ZUBhcHBsZS5jb20+CisKKyAgICAgICAgW01TRV0gQXBwZW5kcyBvZiBvdmVybGFwcGluZyBzYW1w
bGUgZGF0YSBkbyBub3QgY2xlYXIgZXhpc3Rpbmcgc2FtcGxlcyBwcm9wZXJseS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzQzNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIGR1bXAgbWV0aG9k
IHRvIE1lZGlhVGltZSwgc28gdGhhdCBNZWRpYVRpbWVzIGNhbiBiZSBlYXNpbHkgY29udmVydGVk
IHRvIHN0cmluZ3MgKGZvciBsb2dnaW5nIHB1cnBvc2VzKS4KKworICAgICAgICAqIHd0Zi9NZWRp
YVRpbWUuY3BwOgorICAgICAgICAoV1RGOjpNZWRpYVRpbWU6OmR1bXApOgorICAgICAgICAqIHd0
Zi9NZWRpYVRpbWUuaDoKKwogMjAxNC0wNS0yOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEVuYWJsZSBjc3Mgaml0IGJ5IGRlZmF1bHQgb24g
YXJtNjQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggMDMxNzEyOTVlYjAwZDE2OGFmMDdiMWQyZmY4Mzc2NWQwOWQ0
MmM5OS4uY2JmZmUyMDkyMTgxOWEyZTYyZmFkYjYxMjU4YWFjYjc5NWQ2NWRjNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDU3IEBACisyMDE0LTA2LTAxICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBw
bGUuY29tPgorCisgICAgICAgIFtNU0VdIEFwcGVuZHMgb2Ygb3ZlcmxhcHBpbmcgc2FtcGxlIGRh
dGEgZG8gbm90IGNsZWFyIGV4aXN0aW5nIHNhbXBsZXMgcHJvcGVybHkuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM0MzUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBtZWRpYS9tZWRpYS1zb3Vy
Y2UvbWVkaWEtc291cmNlLW92ZXJsYXBwaW5nLWFwcGVuZC5odG1sCisKKyAgICAgICAgVGhlIE1T
RSBzcGVjIGhhcyBhIHNwZWMgZXJyb3IgaW4gaG93IGl0IHJlbW92ZXMgb3ZlcmxhcHBpbmcgZnJh
bWVzLiBUaGUgaW50ZW50aW9uIHNlZW1zIHRvIGJlCisgICAgICAgIHRvIGNoZWNrIGZvciBvdmVy
bGFwcGluZyBzYW1wbGVzIG9ubHkgd2hlbiB0aGUgaW5jb21pbmcgc2FtcGxlIGluY3JlYXNlcyB0
aGUgaGlnaGVzdCBwcmVzZW50YXRpb24gdGltZQorICAgICAgICBmaWVsZC4gQnV0IGR1ZSB0byBh
IG1pc21hdGNoIGluIHRoZSByYW5nZSBvZiBhIHNhbXBsZSwgZGVmaW5lZCBhcyBbc3RhcnQsIGVu
ZCksIGFuZCB0aGUgY2hlY2ssIHdoaWNoIAorICAgICAgICB0cmVhdHMgdGhlIGVuZCBhcyBpbmNs
dXNpdmUsIHRoZSBvdmVybGFwcGluZyBjaGVjayBpcyBhbG1vc3QgbmV2ZXIgcnVuLgorCisgICAg
ICAgIEFkZCB0aGUgc2FtcGxlIGNvbXBhcmlzb24gbG9naWMgdG8gbWF0Y2ggW3N0YXJ0LCBlbmQp
IHJhbmdlcywgYW5kIHJlbmFtZSB0aGUgZXhpc3RpbmcgY2hlY2sgdG8gZGlmZmVyZW50aWF0ZQor
ICAgICAgICBpdCBmcm9tIHRoZSBuZXcgb25lOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3Vy
Y2UvU2FtcGxlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNhbXBsZVByZXNlbnRhdGlvblRp
bWVJc0luc2lkZVJhbmdlQ29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3Jl
OjpTYW1wbGVQcmVzZW50YXRpb25UaW1lSXNXaXRoaW5SYW5nZUNvbXBhcmF0b3I6Om9wZXJhdG9y
KCkpOgorICAgICAgICAoV2ViQ29yZTo6U2FtcGxlTWFwOjpmaW5kU2FtcGxlc0JldHdlZW5QcmVz
ZW50YXRpb25UaW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpTYW1wbGVNYXA6OmZpbmRTYW1wbGVz
V2l0aGluUHJlc2VudGF0aW9uUmFuZ2UpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2Uv
U2FtcGxlTWFwLmg6CisKKyAgICAgICAgVXBkYXRlIHRoZSBvdmVybGFwcGluZyBjaGVjayB0byBv
Y2N1ciB3aGVuZXZlciB0aGUgaGlnaGVzdCBwcmVzZW50YXRpb24gdGltZSBpbmNyZWFzZXMsIGFu
ZCB1cGRhdGUgdGhlCisgICAgICAgIGxvZ2ljIHdpdGhpbiB0aGF0IGNoZWNrIHRvIGNhdGNoIGFs
bCBvdmVybGFwcGluZyBmcmFtZXMuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3Vy
Y2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpzb3VyY2VCdWZm
ZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlU2FtcGxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJ
RCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaDoKKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjoKKworICAgICAgICBBZGQgYSBkdW1wIG1ldGhvZCB0byBNZWRp
YVNhbXBsZSBzbyB0aGF0IHNhbXBsZXMgY2FuIGJlIGVhc2lseSBjb252ZXJ0ZWQgdG8gYSBzdHJp
bmcgZm9yIHRlc3RpbmcuCisgICAgICAgICogcGxhdGZvcm0vTWVkaWFTYW1wbGUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2
YXRlQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlQVZGT2JqQzo6cHJl
c2VudGF0aW9uU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZUFWRk9iakM6OmR1
bXApOgorCisgICAgICAgIFVwZGF0ZSB0aGUgTW9jayBNU0UgaW1wbGVtZW50YXRpb24gdG8gcGFz
cyBhbG9uZyBhICJnZW5lcmF0aW9uIiBmaWVsZCwgdG8gYWlkIGluIHRlc3RpbmcuCisgICAgICAg
ICogcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrQm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1vY2tTYW1wbGVCb3g6Ok1vY2tTYW1wbGVCb3gpOgorICAgICAgICAqIHBsYXRmb3JtL21v
Y2svbWVkaWFzb3VyY2UvTW9ja0JveC5oOgorICAgICAgICAqIHBsYXRmb3JtL21vY2svbWVkaWFz
b3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a01lZGlhU2FtcGxlOjpkdW1wKToKKworICAgICAgICBBZGQgYSBtZXRob2QgdG8gaW50ZXJuYWxz
IHRvIGR1bXAgdGhlIGJ1ZmZlcmVkIHNhbXBsZXMgdG8gc3RyaW5nLgorICAgICAgICAqIE1vZHVs
ZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlcjo6YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJRCk6CisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmJ1ZmZlcmVkU2FtcGxlc0ZvclRyYWNr
SUQpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6CisgICAgICAgICogdGVzdGluZy9J
bnRlcm5hbHMuaWRsOgorCiAyMDE0LTA1LTMxICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5A
d2Via2l0Lm9yZz4KIAogICAgICAgICBDU1MgSklUIGNsZWFudXA6IG1vdmUgdHdvIHV0aWxpdHkg
ZnVuY3Rpb25zIG91dCBvZiB0aGUgcHJvcGVydGllcy1tYXRjaGVyIHNlY3Rpb24KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL01lZGlhVGltZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NZWRpYVRp
bWUuY3BwCmluZGV4IDQ1YjVhNGNmOGQ5MDdmM2IzMTgwNzEyMTI5MGFiMzYyZWViMWUyMmQuLjgx
NzZlYTJjOWNjMmRmNGIwOThjYjJiZGM5MDQ1MGFlOWZmZjdlOWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL01lZGlhVGltZS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvTWVkaWFUaW1lLmNw
cApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYv
Q2hlY2tlZEFyaXRobWV0aWMuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMzc0LDYgKzM3
NSwxMSBAQCB2b2lkIE1lZGlhVGltZTo6c2V0VGltZVNjYWxlKGludDMyX3QgdGltZVNjYWxlKQog
ICAgIG1fdGltZVNjYWxlID0gdGltZVNjYWxlOwogfQogCit2b2lkIE1lZGlhVGltZTo6ZHVtcChQ
cmludFN0cmVhbSAmb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgieyIsIG1fdGltZVZhbHVl
LCAiLyIsIG1fdGltZVNjYWxlLCAiLCAiLCB0b0RvdWJsZSgpLCAifSIpOworfQorCiBNZWRpYVRp
bWUgYWJzKGNvbnN0IE1lZGlhVGltZSYgcmhzKQogewogICAgIGlmIChyaHMuaXNJbnZhbGlkKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NZWRpYVRpbWUuaCBiL1NvdXJjZS9XVEYvd3Rm
L01lZGlhVGltZS5oCmluZGV4IDIzZjI1MmQ5ZDM4ZDBmYzUxMzdkN2M5MDBjYjM1ZWQ1YTVlZDc0
ZWUuLmM0YjE4Y2VhYjYyYzhmMTNiNGM0YTEzNWZlM2EyOWNhOTEwMzcyOTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL01lZGlhVGltZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL01lZGlhVGlt
ZS5oCkBAIC0zOCw2ICszOCw4IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCitjbGFzcyBQcmludFN0
cmVhbTsKKwogY2xhc3MgV1RGX0VYUE9SVF9QUklWQVRFIE1lZGlhVGltZSB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC05Nyw5ICs5OSwxMSBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgaW50NjRfdCYgdGltZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV90aW1lVmFsdWU7
IH0KICAgICBjb25zdCBpbnQzMl90JiB0aW1lU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3RpbWVT
Y2FsZTsgfQogCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCiAgICAg
ZnJpZW5kIFdURl9FWFBPUlRfUFJJVkFURSBNZWRpYVRpbWUgYWJzKGNvbnN0IE1lZGlhVGltZSYg
cmhzKTsKIHByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IGludDMyX3QgRGVmYXVsdFRpbWVTY2Fs
ZSA9IDYwMDA7CisgICAgc3RhdGljIGNvbnN0IGludDMyX3QgRGVmYXVsdFRpbWVTY2FsZSA9IDEw
MDAwMDAwOwogICAgIHN0YXRpYyBjb25zdCBpbnQzMl90IE1heGltdW1UaW1lU2NhbGU7CiAKICAg
ICB2b2lkIHNldFRpbWVTY2FsZShpbnQzMl90KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmNwcAppbmRleCA0MTdjZjAzMzkyYTgxY2JmM2M1ZTJi
M2Q2MzZjYzRkYjMxMDc3Mzg4Li5iMDkzYTVmODcyNTg0OGNmNzQ3ZjdkYTQwNzk2OGRkNDE3MzJh
MzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBs
ZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVN
YXAuY3BwCkBAIC02OCwxMyArNjgsMjUgQEAgcHVibGljOgogICAgIH0KIH07CiAKLWNsYXNzIFNh
bXBsZVByZXNlbnRhdGlvblRpbWVJc1dpdGhpblJhbmdlQ29tcGFyYXRvciB7Ci1wdWJsaWM6Ci0g
ICAgYm9vbCBvcGVyYXRvcigpKHN0ZDo6cGFpcjxNZWRpYVRpbWUsIE1lZGlhVGltZT4gcmFuZ2Us
IHN0ZDo6cGFpcjxNZWRpYVRpbWUsIFJlZlB0cjxNZWRpYVNhbXBsZT4+IHZhbHVlKQorLy8gU2Ft
cGxlUHJlc2VudGF0aW9uVGltZUlzSW5zaWRlUmFuZ2VDb21wYXJhdG9yIG1hdGNoZXMgKHJhbmdl
LmZpcnN0LCByYW5nZS5zZWNvbmRdCitzdHJ1Y3QgU2FtcGxlUHJlc2VudGF0aW9uVGltZUlzSW5z
aWRlUmFuZ2VDb21wYXJhdG9yIHsKKyAgICBib29sIG9wZXJhdG9yKCkoc3RkOjpwYWlyPE1lZGlh
VGltZSwgTWVkaWFUaW1lPiByYW5nZSwgY29uc3Qgc3RkOjpwYWlyPE1lZGlhVGltZSwgUmVmUHRy
PE1lZGlhU2FtcGxlPj4mIHZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIHJhbmdlLnNlY29u
ZCA8IHZhbHVlLmZpcnN0OwogICAgIH0KLSAgICBib29sIG9wZXJhdG9yKCkoc3RkOjpwYWlyPE1l
ZGlhVGltZSwgUmVmUHRyPE1lZGlhU2FtcGxlPj4gdmFsdWUsIHN0ZDo6cGFpcjxNZWRpYVRpbWUs
IE1lZGlhVGltZT4gcmFuZ2UpCisgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHN0ZDo6cGFpcjxN
ZWRpYVRpbWUsIFJlZlB0cjxNZWRpYVNhbXBsZT4+JiB2YWx1ZSwgc3RkOjpwYWlyPE1lZGlhVGlt
ZSwgTWVkaWFUaW1lPiByYW5nZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5maXJzdCA8
PSByYW5nZS5maXJzdDsKKyAgICB9Cit9OworCisvLyBTYW1wbGVQcmVzZW50YXRpb25UaW1lSXNX
aXRoaW5SYW5nZUNvbXBhcmF0b3IgbWF0Y2hlcyBbcmFuZ2UuZmlyc3QsIHJhbmdlLnNlY29uZCkK
K3N0cnVjdCBTYW1wbGVQcmVzZW50YXRpb25UaW1lSXNXaXRoaW5SYW5nZUNvbXBhcmF0b3Igewor
ICAgIGJvb2wgb3BlcmF0b3IoKShzdGQ6OnBhaXI8TWVkaWFUaW1lLCBNZWRpYVRpbWU+IHJhbmdl
LCBjb25zdCBzdGQ6OnBhaXI8TWVkaWFUaW1lLCBSZWZQdHI8TWVkaWFTYW1wbGU+PiYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gcmFuZ2Uuc2Vjb25kIDw9IHZhbHVlLmZpcnN0OworICAg
IH0KKyAgICBib29sIG9wZXJhdG9yKCkoY29uc3Qgc3RkOjpwYWlyPE1lZGlhVGltZSwgUmVmUHRy
PE1lZGlhU2FtcGxlPj4mIHZhbHVlLCBzdGQ6OnBhaXI8TWVkaWFUaW1lLCBNZWRpYVRpbWU+IHJh
bmdlKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZhbHVlLmZpcnN0IDwgcmFuZ2UuZmlyc3Q7CiAg
ICAgfQpAQCAtMTkxLDYgKzIwMywxMiBAQCBTYW1wbGVNYXA6Oml0ZXJhdG9yIFNhbXBsZU1hcDo6
ZmluZFN5bmNTYW1wbGVBZnRlckRlY29kZUl0ZXJhdG9yKGl0ZXJhdG9yIGN1cnJlbgogU2FtcGxl
TWFwOjppdGVyYXRvcl9yYW5nZSBTYW1wbGVNYXA6OmZpbmRTYW1wbGVzQmV0d2VlblByZXNlbnRh
dGlvblRpbWVzKGNvbnN0IE1lZGlhVGltZSYgYmVnaW4sIGNvbnN0IE1lZGlhVGltZSYgZW5kKQog
ewogICAgIHN0ZDo6cGFpcjxNZWRpYVRpbWUsIE1lZGlhVGltZT4gcmFuZ2UoYmVnaW4sIGVuZCk7
CisgICAgcmV0dXJuIHN0ZDo6ZXF1YWxfcmFuZ2UocHJlc2VudGF0aW9uQmVnaW4oKSwgcHJlc2Vu
dGF0aW9uRW5kKCksIHJhbmdlLCBTYW1wbGVQcmVzZW50YXRpb25UaW1lSXNJbnNpZGVSYW5nZUNv
bXBhcmF0b3IoKSk7Cit9CisKK1NhbXBsZU1hcDo6aXRlcmF0b3JfcmFuZ2UgU2FtcGxlTWFwOjpm
aW5kU2FtcGxlc1dpdGhpblByZXNlbnRhdGlvblJhbmdlKGNvbnN0IE1lZGlhVGltZSYgYmVnaW4s
IGNvbnN0IE1lZGlhVGltZSYgZW5kKQoreworICAgIHN0ZDo6cGFpcjxNZWRpYVRpbWUsIE1lZGlh
VGltZT4gcmFuZ2UoYmVnaW4sIGVuZCk7CiAgICAgcmV0dXJuIHN0ZDo6ZXF1YWxfcmFuZ2UocHJl
c2VudGF0aW9uQmVnaW4oKSwgcHJlc2VudGF0aW9uRW5kKCksIHJhbmdlLCBTYW1wbGVQcmVzZW50
YXRpb25UaW1lSXNXaXRoaW5SYW5nZUNvbXBhcmF0b3IoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5oCmluZGV4IGYyNTU0NmQ4MjAzNjhk
MWM5ODg4NmU4NzE1OGI2YzQ5OGM4M2FiNDEuLjI5MGNlMmQzYmQzY2Q2MWIwYjRiMDQ5NThkZDY0
YmUxZTc5N2EzMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3Vy
Y2UvU2FtcGxlTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9T
YW1wbGVNYXAuaApAQCAtNzUsNiArNzUsNyBAQCBwdWJsaWM6CiAgICAgaXRlcmF0b3IgZmluZFN5
bmNTYW1wbGVBZnRlckRlY29kZUl0ZXJhdG9yKGl0ZXJhdG9yKTsKIAogICAgIGl0ZXJhdG9yX3Jh
bmdlIGZpbmRTYW1wbGVzQmV0d2VlblByZXNlbnRhdGlvblRpbWVzKGNvbnN0IE1lZGlhVGltZSYs
IGNvbnN0IE1lZGlhVGltZSYpOworICAgIGl0ZXJhdG9yX3JhbmdlIGZpbmRTYW1wbGVzV2l0aGlu
UHJlc2VudGF0aW9uUmFuZ2UoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1lJik7CiAg
ICAgcmV2ZXJzZV9pdGVyYXRvcl9yYW5nZSBmaW5kRGVwZW5kZW50U2FtcGxlcyhNZWRpYVNhbXBs
ZSopOwogICAgIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAppbmRleCBkMmRiYzc3NDU0NGU4YzAyYWVlNzQ3ZTJl
MjVmYWIzMjZlMmM4YWJmLi4yNmJjYjUyNzcyMzMzYWY1YWMyNDg3ODg4YjU4MTk4NGUyMzcxMmFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1
ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VC
dWZmZXIuY3BwCkBAIC03MzEsNiArNzMxLDkgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1
ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KFNvdXJjZUJ1ZmYKICAg
ICAgICAgICAgIEFTU0VSVCh0ZXh0VHJhY2spOwogICAgICAgICAgICAgdG9JbmJhbmRUZXh0VHJh
Y2sodGV4dFRyYWNrKS0+c2V0UHJpdmF0ZSh0ZXh0VHJhY2tJbmZvLnRyYWNrKTsKICAgICAgICAg
fQorCisgICAgICAgIGZvciAoYXV0byYgdHJhY2tCdWZmZXIgOiBtX3RyYWNrQnVmZmVyTWFwLnZh
bHVlcygpKQorICAgICAgICAgICAgdHJhY2tCdWZmZXIubmVlZFJhbmRvbUFjY2Vzc0ZsYWcgPSB0
cnVlOwogICAgIH0KIAogICAgIC8vIDQuIExldCBhY3RpdmUgdHJhY2sgZmxhZyBlcXVhbCBmYWxz
ZS4KQEAgLTEwNzQsMTAgKzEwNzcsOSBAQCB2b2lkIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVy
UHJpdmF0ZURpZFJlY2VpdmVTYW1wbGUoU291cmNlQnVmZmVyUHJpdmF0ZSosIFBhcwogICAgICAg
ICBTYW1wbGVNYXA6Ok1hcFR5cGUgZXJhc2VkU2FtcGxlczsKICAgICAgICAgTWVkaWFUaW1lIG1p
Y3Jvc2Vjb25kKDEsIDEwMDAwMDApOwogCi0gICAgICAgIC8vIDEuMTQgSWYgbGFzdCBkZWNvZGUg
dGltZXN0YW1wIGZvciB0cmFjayBidWZmZXIgaXMgdW5zZXQgYW5kIHRoZXJlIGlzIGEgY29kZWQg
ZnJhbWUgaW4KLSAgICAgICAgLy8gdHJhY2sgYnVmZmVyIHdpdGggYSBwcmVzZW50YXRpb24gdGlt
ZXN0YW1wIGxlc3MgdGhhbiBvciBlcXVhbCB0byBwcmVzZW50YXRpb24gdGltZXN0YW1wCi0gICAg
ICAgIC8vIGFuZCBwcmVzZW50YXRpb24gdGltZXN0YW1wIGlzIGxlc3MgdGhhbiB0aGlzIGNvZGVk
IGZyYW1lJ3MgcHJlc2VudGF0aW9uIHRpbWVzdGFtcCBwbHVzCi0gICAgICAgIC8vIGl0cyBmcmFt
ZSBkdXJhdGlvbiwgdGhlbiBydW4gdGhlIGZvbGxvd2luZyBzdGVwczoKKyAgICAgICAgLy8gMS4x
NCBJZiBsYXN0IGRlY29kZSB0aW1lc3RhbXAgZm9yIHRyYWNrIGJ1ZmZlciBpcyB1bnNldCBhbmQg
cHJlc2VudGF0aW9uIHRpbWVzdGFtcCBmYWxscworICAgICAgICAvLyBmYWxscyB3aXRoaW4gdGhl
IHByZXNlbnRhdGlvbiBpbnRlcnZhbCBvZiBhIGNvZGVkIGZyYW1lIGluIHRyYWNrIGJ1ZmZlciwg
dGhlbiBydW4gdGhlCisgICAgICAgIC8vIGZvbGxvd2luZyBzdGVwczoKICAgICAgICAgaWYgKHRy
YWNrQnVmZmVyLmxhc3REZWNvZGVUaW1lc3RhbXAuaXNJbnZhbGlkKCkpIHsKICAgICAgICAgICAg
IGF1dG8gaXRlciA9IHRyYWNrQnVmZmVyLnNhbXBsZXMuZmluZFNhbXBsZUNvbnRhaW5pbmdQcmVz
ZW50YXRpb25UaW1lKHByZXNlbnRhdGlvblRpbWVzdGFtcCk7CiAgICAgICAgICAgICBpZiAoaXRl
ciAhPSB0cmFja0J1ZmZlci5zYW1wbGVzLnByZXNlbnRhdGlvbkVuZCgpKSB7CkBAIC0xMTIyLDEw
ICsxMTI0LDEwIEBAIHZvaWQgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVj
ZWl2ZVNhbXBsZShTb3VyY2VCdWZmZXJQcml2YXRlKiwgUGFzCiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBJZiBoaWdoZXN0IHByZXNlbnRhdGlvbiB0aW1lc3RhbXAgZm9yIHRyYWNrIGJ1ZmZlciBp
cyBzZXQgYW5kIGxlc3MgdGhhbiBwcmVzZW50YXRpb24gdGltZXN0YW1wCi0gICAgICAgIGlmICh0
cmFja0J1ZmZlci5oaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wLmlzVmFsaWQoKSAmJiB0cmFj
a0J1ZmZlci5oaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wIDwgcHJlc2VudGF0aW9uVGltZXN0
YW1wKSB7CisgICAgICAgIGlmICh0cmFja0J1ZmZlci5oaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0
YW1wLmlzVmFsaWQoKSAmJiB0cmFja0J1ZmZlci5oaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1w
IDw9IHByZXNlbnRhdGlvblRpbWVzdGFtcCkgewogICAgICAgICAgICAgLy8gUmVtb3ZlIGFsbCBj
b2RlZCBmcmFtZXMgZnJvbSB0cmFjayBidWZmZXIgdGhhdCBoYXZlIGEgcHJlc2VudGF0aW9uIHRp
bWVzdGFtcCBncmVhdGVyIHRoYW4gaGlnaGVzdAogICAgICAgICAgICAgLy8gcHJlc2VudGF0aW9u
IHRpbWVzdGFtcCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGZyYW1lIGVuZCB0aW1lc3RhbXAu
Ci0gICAgICAgICAgICBhdXRvIGl0ZXJfcGFpciA9IHRyYWNrQnVmZmVyLnNhbXBsZXMuZmluZFNh
bXBsZXNCZXR3ZWVuUHJlc2VudGF0aW9uVGltZXModHJhY2tCdWZmZXIuaGlnaGVzdFByZXNlbnRh
dGlvblRpbWVzdGFtcCwgZnJhbWVFbmRUaW1lc3RhbXApOworICAgICAgICAgICAgYXV0byBpdGVy
X3BhaXIgPSB0cmFja0J1ZmZlci5zYW1wbGVzLmZpbmRTYW1wbGVzV2l0aGluUHJlc2VudGF0aW9u
UmFuZ2UodHJhY2tCdWZmZXIuaGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcCwgZnJhbWVFbmRU
aW1lc3RhbXApOwogICAgICAgICAgICAgaWYgKGl0ZXJfcGFpci5maXJzdCAhPSB0cmFja0J1ZmZl
ci5zYW1wbGVzLnByZXNlbnRhdGlvbkVuZCgpKQogICAgICAgICAgICAgICAgIGVyYXNlZFNhbXBs
ZXMuaW5zZXJ0KGl0ZXJfcGFpci5maXJzdCwgaXRlcl9wYWlyLnNlY29uZCk7CiAgICAgICAgIH0K
QEAgLTE0NTQsNiArMTQ1NiwyMCBAQCB2b2lkIFNvdXJjZUJ1ZmZlcjo6cmVwb3J0RXh0cmFNZW1v
cnlDb3N0KCkKICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT52bSgpLmhlYXAucmVw
b3J0RXh0cmFNZW1vcnlDb3N0KGV4dHJhTWVtb3J5Q29zdERlbHRhKTsKIH0KIAorVmVjdG9yPFN0
cmluZz4gU291cmNlQnVmZmVyOjpidWZmZXJlZFNhbXBsZXNGb3JUcmFja0lEKGNvbnN0IEF0b21p
Y1N0cmluZyYgdHJhY2tJRCkKK3sKKyAgICBhdXRvIGl0ID0gbV90cmFja0J1ZmZlck1hcC5maW5k
KHRyYWNrSUQpOworICAgIGlmIChpdCA9PSBtX3RyYWNrQnVmZmVyTWFwLmVuZCgpKQorICAgICAg
ICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKKworICAgIFRyYWNrQnVmZmVyJiB0cmFja0J1ZmZl
ciA9IGl0LT52YWx1ZTsKKyAgICBWZWN0b3I8U3RyaW5nPiBzYW1wbGVEZXNjcmlwdGlvbnM7Cisg
ICAgZm9yIChhdXRvIHNhbXBsZUl0ZXIgPSB0cmFja0J1ZmZlci5zYW1wbGVzLmRlY29kZUJlZ2lu
KCk7IHNhbXBsZUl0ZXIgIT0gdHJhY2tCdWZmZXIuc2FtcGxlcy5kZWNvZGVFbmQoKTsgKytzYW1w
bGVJdGVyKQorICAgICAgICBzYW1wbGVEZXNjcmlwdGlvbnMuYXBwZW5kKHRvU3RyaW5nKCpzYW1w
bGVJdGVyLT5zZWNvbmQpKTsKKworICAgIHJldHVybiBzYW1wbGVEZXNjcmlwdGlvbnM7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaAppbmRleCBjOGIyYjdlNzcxMWVlNzFj
MmFiMDY2NjU2MGZlZTY4MjFhOWUyNGZkLi44ODg4MWRjZjY3NDg3MTM5ODdlZDc1ODJmZjg2OGVk
MzRmNzA1ZTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L1NvdXJjZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
U291cmNlQnVmZmVyLmgKQEAgLTE1OCw2ICsxNTgsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
cmVwb3J0RXh0cmFNZW1vcnlDb3N0KCk7CiAKKyAgICAvLyBJbnRlcm5hbHMKKyAgICBmcmllbmQg
Y2xhc3MgSW50ZXJuYWxzOworICAgIFZlY3RvcjxTdHJpbmc+IGJ1ZmZlcmVkU2FtcGxlc0ZvclRy
YWNrSUQoY29uc3QgQXRvbWljU3RyaW5nJik7CisKICAgICBSZWY8U291cmNlQnVmZmVyUHJpdmF0
ZT4gbV9wcml2YXRlOwogICAgIE1lZGlhU291cmNlKiBtX3NvdXJjZTsKICAgICBHZW5lcmljRXZl
bnRRdWV1ZSBtX2FzeW5jRXZlbnRRdWV1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggNTllOTNh
ZWEzYjdkMjkxODAwMzk4N2FiMzI5ZGQ2N2JjNzNlMjI0Ny4uYzcyMjBjNTdmMzI3Mjk3N2M5ODk1
MzZhNmEwYjU2NWJmOTA5ZGE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTMxNTcsNiArMzE1
Nyw4IEBAIF9fWk43V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTlyZXNldFRleHRBdXRvc2l6aW5nRXYK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKK19fWk43V2ViQ29yZTEyU291cmNl
QnVmZmVyMjVidWZmZXJlZFNhbXBsZXNGb3JUcmFja0lERVJLTjNXVEYxMkF0b21pY1N0cmluZ0UK
K19fWk43V2ViQ29yZTE0dG9Tb3VyY2VCdWZmZXJFTjNKU0M3SlNWYWx1ZUUKIF9fWk43V2ViQ29y
ZTI2TW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UxOXJlZ2lzdGVyTWVkaWFFbmdpbmVFUEZ2UEZO
M1dURjEwUGFzc093blB0cklOU18yN01lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZUVFRVBOU18x
MU1lZGlhUGxheWVyRUVQRnZSTlMxXzdIYXNoU2V0SU5TMV82U3RyaW5nRU5TMV8xMFN0cmluZ0hh
c2hFTlMxXzEwSGFzaFRyYWl0c0lTQV9FRUVFRVBGTlM1XzEyU3VwcG9ydHNUeXBlRVJLTlNfMjhN
ZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzRUVQRnZSTlMxXzZWZWN0b3JJU0FfTG0wRU5TMV8x
NUNyYXNoT25PdmVyZmxvd0VFRUVQRnZ2RVBGdlJLU0FfRVBGYlNYX1NYX0VFCiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVkaWFTYW1wbGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKaW5kZXggYTdjZmRkYjFiOWIzZjgxMTFl
YjBmMzVkOGY3NTBhOTI5NTYzOWNhNS4uOTllNTcyMThkNjA2NWI4MTdkY2RjMWRkN2M2NzViMTc5
ODlkYTQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVkaWFTYW1wbGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oCkBAIC0yNiw2ICsy
Niw3IEBACiAjaWZuZGVmIE1lZGlhU2FtcGxlX2gKICNkZWZpbmUgTWVkaWFTYW1wbGVfaAogCisj
aW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+
CkBAIC01Niw2ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIE1lZGlhVGltZSBkdXJhdGlv
bigpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEF0b21pY1N0cmluZyB0cmFja0lEKCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgRmxvYXRTaXplIHByZXNlbnRhdGlvblNpemUoKSBjb25zdCA9IDA7CiAKICAgICBlbnVt
IFNhbXBsZUZsYWdzIHsKICAgICAgICAgTm9uZSA9IDAsCkBAIC02Nyw2ICs2OSw4IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaXNTeW5jKCkgY29uc3QgeyByZXR1cm4gZmxhZ3MoKSAmIElzU3luYzsg
fQogICAgIGJvb2wgaXNOb25EaXNwbGF5aW5nKCkgY29uc3QgeyByZXR1cm4gZmxhZ3MoKSAmIE5v
bkRpc3BsYXlpbmc7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3QgPSAwOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VC
dWZmZXJQcml2YXRlQVZGT2JqQy5tbQppbmRleCAxNjM0N2NmYjg4YWQ5ZTkyOTY3NjUxZWZkM2Q3
OTBiNWYzODc5NTFmLi41ODY4MGZkOWQ1YmZlNGRkYTMwZjk0YWJkYzUxZjg4OTFmYjI2MjhlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZG
T2JqQy5tbQpAQCAtMjg5LDIxICsyODksMjMgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8
TWVkaWFTYW1wbGVBVkZPYmpDPiBjcmVhdGUoQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlLCBpbnQg
dHJhY2tJRCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhU2FtcGxlQVZGT2JqQyhzYW1wbGUs
IHRyYWNrSUQpKTsgfQogICAgIHZpcnR1YWwgfk1lZGlhU2FtcGxlQVZGT2JqQygpIHsgfQogCitw
cml2YXRlOgorICAgIE1lZGlhU2FtcGxlQVZGT2JqQyhDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUs
IGludCB0cmFja0lEKQorICAgICAgICA6IG1fc2FtcGxlKHNhbXBsZSkKKyAgICAgICAgLCBtX2lk
KFN0cmluZzo6Zm9ybWF0KCIlZCIsIHRyYWNrSUQpKQorICAgIHsKKyAgICB9CisKICAgICB2aXJ0
dWFsIE1lZGlhVGltZSBwcmVzZW50YXRpb25UaW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dG9NZWRpYVRpbWUoQ01TYW1wbGVCdWZmZXJHZXRQcmVzZW50YXRpb25UaW1lU3RhbXAobV9zYW1w
bGUuZ2V0KCkpKTsgfQogICAgIHZpcnR1YWwgTWVkaWFUaW1lIGRlY29kZVRpbWUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0b01lZGlhVGltZShDTVNhbXBsZUJ1ZmZlckdldERlY29kZVRpbWVT
dGFtcChtX3NhbXBsZS5nZXQoKSkpOyB9CiAgICAgdmlydHVhbCBNZWRpYVRpbWUgZHVyYXRpb24o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0b01lZGlhVGltZShDTVNhbXBsZUJ1ZmZlckdldER1
cmF0aW9uKG1fc2FtcGxlLmdldCgpKSk7IH0KICAgICB2aXJ0dWFsIEF0b21pY1N0cmluZyB0cmFj
a0lEKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9pZDsgfQogICAgIHZpcnR1YWwgc2l6ZV90
IHNpemVJbkJ5dGVzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ01TYW1wbGVCdWZmZXJHZXRU
b3RhbFNhbXBsZVNpemUobV9zYW1wbGUuZ2V0KCkpOyB9CisgICAgdmlydHVhbCBGbG9hdFNpemUg
cHJlc2VudGF0aW9uU2l6ZSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBTYW1wbGVG
bGFncyBmbGFncygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgUGxhdGZvcm1TYW1wbGUg
cGxhdGZvcm1TYW1wbGUoKSBvdmVycmlkZTsKLQotcHJvdGVjdGVkOgotICAgIE1lZGlhU2FtcGxl
QVZGT2JqQyhDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUsIGludCB0cmFja0lEKQotICAgICAgICA6
IG1fc2FtcGxlKHNhbXBsZSkKLSAgICAgICAgLCBtX2lkKFN0cmluZzo6Zm9ybWF0KCIlZCIsIHRy
YWNrSUQpKQotICAgIHsKLSAgICB9CisgICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gbV9z
YW1wbGU7CiAgICAgQXRvbWljU3RyaW5nIG1faWQ7CkBAIC0zMzksNiArMzQxLDIwIEBAIE1lZGlh
U2FtcGxlOjpTYW1wbGVGbGFncyBNZWRpYVNhbXBsZUFWRk9iakM6OmZsYWdzKCkgY29uc3QKICAg
ICByZXR1cm4gU2FtcGxlRmxhZ3MocmV0dXJuVmFsdWUpOwogfQogCitGbG9hdFNpemUgTWVkaWFT
YW1wbGVBVkZPYmpDOjpwcmVzZW50YXRpb25TaXplKCkgY29uc3QKK3sKKyAgICBDTUZvcm1hdERl
c2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0gQ01TYW1wbGVCdWZmZXJHZXRGb3JtYXRE
ZXNjcmlwdGlvbihtX3NhbXBsZS5nZXQoKSk7CisgICAgaWYgKENNRm9ybWF0RGVzY3JpcHRpb25H
ZXRNZWRpYVR5cGUoZm9ybWF0RGVzY3JpcHRpb24pICE9IGtDTU1lZGlhVHlwZV9WaWRlbykKKyAg
ICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgpOworCisgICAgcmV0dXJuIEZsb2F0U2l6ZShDTVZpZGVv
Rm9ybWF0RGVzY3JpcHRpb25HZXRQcmVzZW50YXRpb25EaW1lbnNpb25zKGZvcm1hdERlc2NyaXB0
aW9uLCB0cnVlLCB0cnVlKSk7IAorfQorCit2b2lkIE1lZGlhU2FtcGxlQVZGT2JqQzo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgie1BUUygiLCBwcmVzZW50
YXRpb25UaW1lKCksICIpLCBEVFMoIiwgZGVjb2RlVGltZSgpLCAiKSwgZHVyYXRpb24oIiwgZHVy
YXRpb24oKSwgIiksIGZsYWdzKCIsIChpbnQpZmxhZ3MoKSwgIiksIHByZXNlbnRhdGlvblNpemUo
IiwgcHJlc2VudGF0aW9uU2l6ZSgpLCAiKX0iKTsKK30KKwogI3ByYWdtYSBtYXJrIC0KICNwcmFn
bWEgbWFyayBNZWRpYURlc2NyaXB0aW9uQVZGT2JqQwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tCb3guY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrQm94LmNwcAppbmRleCA0ZTdhYmQ4Y2Nk
NDFiOGEwNTdmOTNkZjQ3MThiMzhkZGVjNzczNjFkLi5hZWMwNDVjMjU3ZmI3M2NkMGRlOGQ2NWRm
YWNlMjQ4NjE3Y2NhYmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2Nr
L21lZGlhc291cmNlL01vY2tCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21v
Y2svbWVkaWFzb3VyY2UvTW9ja0JveC5jcHAKQEAgLTExMiw3ICsxMTIsNyBAQCBjb25zdCBTdHJp
bmcmIE1vY2tJbml0aWFsaXphdGlvbkJveDo6dHlwZSgpCiBNb2NrU2FtcGxlQm94OjpNb2NrU2Ft
cGxlQm94KEFycmF5QnVmZmVyKiBkYXRhKQogICAgIDogTW9ja0JveChkYXRhKQogewotICAgIEFT
U0VSVChtX2xlbmd0aCA9PSAyOSk7CisgICAgQVNTRVJUKG1fbGVuZ3RoID09IDMwKTsKIAogICAg
IFJlZlB0cjxKU0M6OkRhdGFWaWV3PiB2aWV3ID0gSlNDOjpEYXRhVmlldzo6Y3JlYXRlKGRhdGEs
IDAsIGRhdGEtPmJ5dGVMZW5ndGgoKSk7CiAgICAgaW50MzJfdCB0aW1lU2NhbGUgPSB2aWV3LT5n
ZXQ8aW50MzJfdD4oOCwgdHJ1ZSk7CkBAIC0xMjgsNiArMTI4LDcgQEAgTW9ja1NhbXBsZUJveDo6
TW9ja1NhbXBsZUJveChBcnJheUJ1ZmZlciogZGF0YSkKIAogICAgIG1fdHJhY2tJRCA9IHZpZXct
PmdldDxpbnQzMl90PigyNCwgdHJ1ZSk7CiAgICAgbV9mbGFncyA9IHZpZXctPmdldDx1aW50OF90
PigyOCwgdHJ1ZSk7CisgICAgbV9nZW5lcmF0aW9uID0gdmlldy0+Z2V0PHVpbnQ4X3Q+KDI5LCB0
cnVlKTsKIH0KIAogY29uc3QgU3RyaW5nJiBNb2NrU2FtcGxlQm94Ojp0eXBlKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja0JveC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrQm94LmgKaW5kZXgg
NWVkNGE1ZjhmODM5MzVkOGZiZjhhMGUzNGIxNzQ5YzlmNGZkYTM0Zi4uYmJhYjZiYjMyMTliY2Yw
MmJiYWNiNmZhZTNmOGU5MThiNmIxMDMyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrQm94LmgKQEAgLTExNyw2ICsxMTcsNyBAQCBwcm90
ZWN0ZWQ6CiAvLyA0IGJ5dGVzIDogc2lnbmVkIDogZHVyYXRpb24gdGltZSB2YWx1ZQogLy8gNCBi
eXRlcyA6IHNpZ25lZCA6IHRyYWNrIElECiAvLyAxIGJ5dGUgIDogdW5zaWduZWQgOiBmbGFncwor
Ly8gMSBieXRlICA6IHVuc2lnbmVkIDogZ2VuZXJhdGlvbgogLy8KIGNsYXNzIE1vY2tTYW1wbGVC
b3ggZmluYWwgOiBwdWJsaWMgTW9ja0JveCB7CiBwdWJsaWM6CkBAIC0xMjgsNiArMTI5LDcgQEAg
cHVibGljOgogICAgIE1lZGlhVGltZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRp
b247IH0KICAgICBpbnQzMl90IHRyYWNrSUQoKSBjb25zdCB7IHJldHVybiBtX3RyYWNrSUQ7IH0K
ICAgICB1aW50OF90IGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFnczsgfQorICAgIHVpbnQ4
X3QgZ2VuZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZ2VuZXJhdGlvbjsgfQogCiAgICAgZW51
bSB7CiAgICAgICAgIElzU3luYyA9IDEgPDwgMCwKQEAgLTE0Niw2ICsxNDgsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgTWVkaWFUaW1lIG1fZHVyYXRpb247CiAgICAgaW50MzJfdCBtX3RyYWNrSUQ7CiAg
ICAgdWludDhfdCBtX2ZsYWdzOworICAgIHVpbnQ4X3QgbV9nZW5lcmF0aW9uOwogfTsKIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2Nr
U291cmNlQnVmZmVyUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21l
ZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcAppbmRleCA0NGMzYmNmY2UwMmE3
YzE1NTZhNmY3NjhjMjI2MDQ2N2UyNTlkMzU0Li4yM2U2YzEyYzU2YjI2YTA2YjA5Y2FlYmVkODNh
NTNkODkyM2NiNTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21l
ZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcApA
QCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQuaCIK
ICNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5oPgorI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDIx
ICs0NywyNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxNb2NrTWVkaWFTYW1wbGU+IGNy
ZWF0ZShjb25zdCBNb2NrU2FtcGxlQm94JiBib3gpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBNb2Nr
TWVkaWFTYW1wbGUoYm94KSk7IH0KICAgICB2aXJ0dWFsIH5Nb2NrTWVkaWFTYW1wbGUoKSB7IH0K
IAorcHJpdmF0ZToKKyAgICBNb2NrTWVkaWFTYW1wbGUoY29uc3QgTW9ja1NhbXBsZUJveCYgYm94
KQorICAgICAgICA6IG1fYm94KGJveCkKKyAgICAgICAgLCBtX2lkKFN0cmluZzo6Zm9ybWF0KCIl
ZCIsIGJveC50cmFja0lEKCkpKQorICAgIHsKKyAgICB9CisKICAgICB2aXJ0dWFsIE1lZGlhVGlt
ZSBwcmVzZW50YXRpb25UaW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9ib3gucHJlc2Vu
dGF0aW9uVGltZXN0YW1wKCk7IH0KICAgICB2aXJ0dWFsIE1lZGlhVGltZSBkZWNvZGVUaW1lKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9ib3guZGVjb2RlVGltZXN0YW1wKCk7IH0KICAgICB2
aXJ0dWFsIE1lZGlhVGltZSBkdXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYm94
LmR1cmF0aW9uKCk7IH0KICAgICB2aXJ0dWFsIEF0b21pY1N0cmluZyB0cmFja0lEKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9pZDsgfQogICAgIHZpcnR1YWwgc2l6ZV90IHNpemVJbkJ5dGVz
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc2l6ZW9mKG1fYm94KTsgfQotCiAgICAgdmlydHVh
bCBTYW1wbGVGbGFncyBmbGFncygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgUGxhdGZv
cm1TYW1wbGUgcGxhdGZvcm1TYW1wbGUoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIEZsb2F0U2l6
ZSBwcmVzZW50YXRpb25TaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRTaXplKCk7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwog
Ci1wcm90ZWN0ZWQ6Ci0gICAgTW9ja01lZGlhU2FtcGxlKGNvbnN0IE1vY2tTYW1wbGVCb3gmIGJv
eCkKLSAgICAgICAgOiBtX2JveChib3gpCi0gICAgICAgICwgbV9pZChTdHJpbmc6OmZvcm1hdCgi
JWQiLCBib3gudHJhY2tJRCgpKSkKLSAgICB7Ci0gICAgfQorICAgIHVuc2lnbmVkIGdlbmVyYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2JveC5nZW5lcmF0aW9uKCk7IH0KIAogICAgIE1vY2tTYW1w
bGVCb3ggbV9ib3g7CiAgICAgQXRvbWljU3RyaW5nIG1faWQ7CkBAIC04MCw2ICs4NCwxMSBAQCBQ
bGF0Zm9ybVNhbXBsZSBNb2NrTWVkaWFTYW1wbGU6OnBsYXRmb3JtU2FtcGxlKCkKICAgICByZXR1
cm4gc2FtcGxlOwogfQogCit2b2lkIE1vY2tNZWRpYVNhbXBsZTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgie1BUUygiLCBwcmVzZW50YXRpb25UaW1lKCks
ICIpLCBEVFMoIiwgZGVjb2RlVGltZSgpLCAiKSwgZHVyYXRpb24oIiwgZHVyYXRpb24oKSwgIiks
IGZsYWdzKCIsIChpbnQpZmxhZ3MoKSwgIiksIGdlbmVyYXRpb24oIiwgZ2VuZXJhdGlvbigpLCAi
KX0iKTsKK30KKwogY2xhc3MgTW9ja01lZGlhRGVzY3JpcHRpb24gZmluYWwgOiBwdWJsaWMgTWVk
aWFEZXNjcmlwdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxNb2NrTWVkaWFEZXNj
cmlwdGlvbj4gY3JlYXRlKGNvbnN0IE1vY2tUcmFja0JveCYgYm94KSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgTW9ja01lZGlhRGVzY3JpcHRpb24oYm94KSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcAppbmRleCA2MmNjNDVlMDI5MzUyNGZkMDU2Nzc2YTcwZWZiODQ5YzNmMjkxMjQ4
Li45MjQ2MTFiZWRlMDVjNjcyMTk1NTk5Y2NlZDY0OTgxZTRiZmQ2MTg2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC04OCw2ICs4OCw3IEBACiAjaW5jbHVkZSAiU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFk
b3dSb290LmgiCisjaW5jbHVkZSAiU291cmNlQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3BlbGxDaGVj
a2VyLmgiCiAjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0
Q29udGVudHMuaCIKQEAgLTIyNDQsNiArMjI0NSwxNCBAQCB2b2lkIEludGVybmFsczo6aW5pdGlh
bGl6ZU1vY2tNZWRpYVNvdXJjZSgpCiAjZW5kaWYKICAgICBNZWRpYVBsYXllckZhY3RvcnlTdXBw
b3J0OjpjYWxsUmVnaXN0ZXJNZWRpYUVuZ2luZShNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6
cmVnaXN0ZXJNZWRpYUVuZ2luZSk7CiB9CisKK1ZlY3RvcjxTdHJpbmc+IEludGVybmFsczo6YnVm
ZmVyZWRTYW1wbGVzRm9yVHJhY2tJRChTb3VyY2VCdWZmZXIqIGJ1ZmZlciwgY29uc3QgQXRvbWlj
U3RyaW5nJiB0cmFja0lEKQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gVmVj
dG9yPFN0cmluZz4oKTsKKworICAgIHJldHVybiBidWZmZXItPmJ1ZmZlcmVkU2FtcGxlc0ZvclRy
YWNrSUQodHJhY2tJRCk7Cit9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5oCmluZGV4IDdmYTkwZmRkMTcxNzc0MjVjMTdjYmE3ODIyNDBjNGRh
ZjFmOWY2MmIuLjJmMGI4ZjJmMTZhMDVkYTA5NzdkNmU3MmNjMTY2YTc2YTgwMDNmZTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaApAQCAtNTgsNiArNTgsNyBAQCBjbGFzcyBQYWdlOwog
Y2xhc3MgUmFuZ2U7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2VyaWFs
aXplZFNjcmlwdFZhbHVlOworY2xhc3MgU291cmNlQnVmZmVyOwogY2xhc3MgVGltZVJhbmdlczsK
IGNsYXNzIFR5cGVDb252ZXJzaW9uczsKIApAQCAtMzI2LDYgKzMyNyw3IEBAIHB1YmxpYzoKIAog
I2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAgICAgdm9pZCBpbml0aWFsaXplTW9ja01lZGlhU291
cmNlKCk7CisgICAgVmVjdG9yPFN0cmluZz4gYnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJRChTb3Vy
Y2VCdWZmZXIqLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJ
REVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IDZiNzNhMWFmOWJhNjVh
MDgxOGY3NmFiYWM3M2MwMjg0N2YyZjc1NzguLmM2NzY4ZjNhNGQwZDI2NzkyOTBkMjE0NGI0ZTYz
N2E3NDk0ODM2NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKQEAgLTI3Niw4
ICsyNzYsOSBAQAogICAgIFtSYWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gaXNQbHVnaW5TbmFwc2hv
dHRlZChFbGVtZW50IGVsZW1lbnQpOwogCiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gQ2xpZW50UmVj
dCBzZWxlY3Rpb25Cb3VuZHMoKTsKLSAgICAKKwogICAgIFtDb25kaXRpb25hbD1NRURJQV9TT1VS
Q0VdIHZvaWQgaW5pdGlhbGl6ZU1vY2tNZWRpYVNvdXJjZSgpOworICAgIFtDb25kaXRpb25hbD1N
RURJQV9TT1VSQ0VdIERPTVN0cmluZ1tdIGJ1ZmZlcmVkU2FtcGxlc0ZvclRyYWNrSUQoU291cmNl
QnVmZmVyIGJ1ZmZlciwgRE9NU3RyaW5nIHRyYWNrSUQpOwogCiAgICAgW0NvbmRpdGlvbmFsPVZJ
REVPXSB2b2lkIGJlZ2luTWVkaWFTZXNzaW9uSW50ZXJydXB0aW9uKCk7CiAgICAgW0NvbmRpdGlv
bmFsPVZJREVPXSB2b2lkIGVuZE1lZGlhU2Vzc2lvbkludGVycnVwdGlvbihET01TdHJpbmcgZmxh
Z3MpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IGU0NTI3NTY3ZmU4YTc5MTViYzc3YzA2MzQxZTgwYWU1YzNhMjM3YWIuLjVl
YzY4YWY5MTY0MTcyZmM5YWJhYTRkNDliMGIyYzZjZmQ5NGU4MjIgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NCBAQAorMjAxNC0wNi0wMSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKworICAg
ICAgICBbTVNFXSBBcHBlbmRzIG9mIG92ZXJsYXBwaW5nIHNhbXBsZSBkYXRhIGRvIG5vdCBjbGVh
ciBleGlzdGluZyBzYW1wbGVzIHByb3Blcmx5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzNDM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLW92
ZXJsYXBwaW5nLWFwcGVuZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIG1lZGlhL21l
ZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2Utb3ZlcmxhcHBpbmctYXBwZW5kLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIG1lZGlhL21lZGlhLXNvdXJjZS9tb2NrLW1lZGlhLXNvdXJjZS5qczoKKwogMjAx
NC0wNS0zMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRl
c3QgZmFpbHVyZSBmcm9tIHRoZSBwcmV2aW91cyBjaGVjay1pbi4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2Utb3ZlcmxhcHBpbmctYXBwZW5k
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3Vy
Y2Utb3ZlcmxhcHBpbmctYXBwZW5kLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zM2RjMzJhMmI4
NDA3YjczNzk5NGQ0NTE2OTZjZmMwYmE3MzMyNDU2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1vdmVybGFwcGluZy1hcHBlbmQt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzUgQEAKKworUlVOKHZpZGVvLnNyYyA9IFVSTC5jcmVh
dGVPYmplY3RVUkwoc291cmNlKSkKK0VWRU5UKHNvdXJjZW9wZW4pCitSVU4oc291cmNlQnVmZmVy
ID0gc291cmNlLmFkZFNvdXJjZUJ1ZmZlcigidmlkZW8vbW9jazsgY29kZWNzPW1vY2siKSkKK1JV
Tihzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKGluaXRTZWdtZW50KSkKK0VWRU5UKHVwZGF0ZWVu
ZCkKK1JVTihzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKHNhbXBsZXMpKQorRVZFTlQodXBkYXRl
ZW5kKQorRVhQRUNURUQgKGJ1ZmZlcmVkU2FtcGxlcy5sZW5ndGggPT0gJzYnKSBPSwore1BUUyh7
MC8xMDAwLCAwLjAwMDAwMH0pLCBEVFMoezAvMTAwMCwgMC4wMDAwMDB9KSwgZHVyYXRpb24oezEw
MDAvMTAwMCwgMS4wMDAwMDB9KSwgZmxhZ3MoMSksIGdlbmVyYXRpb24oMCl9Cit7UFRTKHsxMDAw
LzEwMDAsIDEuMDAwMDAwfSksIERUUyh7MTAwMC8xMDAwLCAxLjAwMDAwMH0pLCBkdXJhdGlvbih7
MTAwMC8xMDAwLCAxLjAwMDAwMH0pLCBmbGFncygwKSwgZ2VuZXJhdGlvbigwKX0KK3tQVFMoezIw
MDAvMTAwMCwgMi4wMDAwMDB9KSwgRFRTKHsyMDAwLzEwMDAsIDIuMDAwMDAwfSksIGR1cmF0aW9u
KHsxMDAwLzEwMDAsIDEuMDAwMDAwfSksIGZsYWdzKDApLCBnZW5lcmF0aW9uKDApfQore1BUUyh7
MzAwMC8xMDAwLCAzLjAwMDAwMH0pLCBEVFMoezMwMDAvMTAwMCwgMy4wMDAwMDB9KSwgZHVyYXRp
b24oezEwMDAvMTAwMCwgMS4wMDAwMDB9KSwgZmxhZ3MoMSksIGdlbmVyYXRpb24oMCl9Cit7UFRT
KHs0MDAwLzEwMDAsIDQuMDAwMDAwfSksIERUUyh7NDAwMC8xMDAwLCA0LjAwMDAwMH0pLCBkdXJh
dGlvbih7MTAwMC8xMDAwLCAxLjAwMDAwMH0pLCBmbGFncygwKSwgZ2VuZXJhdGlvbigwKX0KK3tQ
VFMoezUwMDAvMTAwMCwgNS4wMDAwMDB9KSwgRFRTKHs1MDAwLzEwMDAsIDUuMDAwMDAwfSksIGR1
cmF0aW9uKHsxMDAwLzEwMDAsIDEuMDAwMDAwfSksIGZsYWdzKDApLCBnZW5lcmF0aW9uKDApfQor
UlVOKHNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxlcykpCitFVkVOVCh1cGRhdGVlbmQp
CitFWFBFQ1RFRCAoYnVmZmVyZWRTYW1wbGVzLmxlbmd0aCA9PSAnNicpIE9LCit7UFRTKHswLzEw
MDAsIDAuMDAwMDAwfSksIERUUyh7MC8xMDAwLCAwLjAwMDAwMH0pLCBkdXJhdGlvbih7MTAwMC8x
MDAwLCAxLjAwMDAwMH0pLCBmbGFncygxKSwgZ2VuZXJhdGlvbigxKX0KK3tQVFMoezEwMDAvMTAw
MCwgMS4wMDAwMDB9KSwgRFRTKHsxMDAwLzEwMDAsIDEuMDAwMDAwfSksIGR1cmF0aW9uKHsxMDAw
LzEwMDAsIDEuMDAwMDAwfSksIGZsYWdzKDApLCBnZW5lcmF0aW9uKDEpfQore1BUUyh7MjAwMC8x
MDAwLCAyLjAwMDAwMH0pLCBEVFMoezIwMDAvMTAwMCwgMi4wMDAwMDB9KSwgZHVyYXRpb24oezEw
MDAvMTAwMCwgMS4wMDAwMDB9KSwgZmxhZ3MoMCksIGdlbmVyYXRpb24oMSl9Cit7UFRTKHszMDAw
LzEwMDAsIDMuMDAwMDAwfSksIERUUyh7MzAwMC8xMDAwLCAzLjAwMDAwMH0pLCBkdXJhdGlvbih7
MTAwMC8xMDAwLCAxLjAwMDAwMH0pLCBmbGFncygxKSwgZ2VuZXJhdGlvbigxKX0KK3tQVFMoezQw
MDAvMTAwMCwgNC4wMDAwMDB9KSwgRFRTKHs0MDAwLzEwMDAsIDQuMDAwMDAwfSksIGR1cmF0aW9u
KHsxMDAwLzEwMDAsIDEuMDAwMDAwfSksIGZsYWdzKDApLCBnZW5lcmF0aW9uKDEpfQore1BUUyh7
NTAwMC8xMDAwLCA1LjAwMDAwMH0pLCBEVFMoezUwMDAvMTAwMCwgNS4wMDAwMDB9KSwgZHVyYXRp
b24oezEwMDAvMTAwMCwgMS4wMDAwMDB9KSwgZmxhZ3MoMCksIGdlbmVyYXRpb24oMSl9CitSVU4o
c291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKSkKK0VWRU5UKHVwZGF0ZWVuZCkKK0VY
UEVDVEVEIChidWZmZXJlZFNhbXBsZXMubGVuZ3RoID09ICc2JykgT0sKK3tQVFMoezAvMTAwMCwg
MC4wMDAwMDB9KSwgRFRTKHswLzEwMDAsIDAuMDAwMDAwfSksIGR1cmF0aW9uKHsxMDAwLzEwMDAs
IDEuMDAwMDAwfSksIGZsYWdzKDEpLCBnZW5lcmF0aW9uKDIpfQore1BUUyh7MjAwMC8xMDAwLCAy
LjAwMDAwMH0pLCBEVFMoezEwMDAvMTAwMCwgMS4wMDAwMDB9KSwgZHVyYXRpb24oezEwMDAvMTAw
MCwgMS4wMDAwMDB9KSwgZmxhZ3MoMCksIGdlbmVyYXRpb24oMil9Cit7UFRTKHsxMDAwLzEwMDAs
IDEuMDAwMDAwfSksIERUUyh7MjAwMC8xMDAwLCAyLjAwMDAwMH0pLCBkdXJhdGlvbih7MTAwMC8x
MDAwLCAxLjAwMDAwMH0pLCBmbGFncygwKSwgZ2VuZXJhdGlvbigyKX0KK3tQVFMoezMwMDAvMTAw
MCwgMy4wMDAwMDB9KSwgRFRTKHszMDAwLzEwMDAsIDMuMDAwMDAwfSksIGR1cmF0aW9uKHsxMDAw
LzEwMDAsIDEuMDAwMDAwfSksIGZsYWdzKDEpLCBnZW5lcmF0aW9uKDIpfQore1BUUyh7NTAwMC8x
MDAwLCA1LjAwMDAwMH0pLCBEVFMoezQwMDAvMTAwMCwgNC4wMDAwMDB9KSwgZHVyYXRpb24oezEw
MDAvMTAwMCwgMS4wMDAwMDB9KSwgZmxhZ3MoMCksIGdlbmVyYXRpb24oMil9Cit7UFRTKHs0MDAw
LzEwMDAsIDQuMDAwMDAwfSksIERUUyh7NTAwMC8xMDAwLCA1LjAwMDAwMH0pLCBkdXJhdGlvbih7
MTAwMC8xMDAwLCAxLjAwMDAwMH0pLCBmbGFncygwKSwgZ2VuZXJhdGlvbigyKX0KK0VORCBPRiBU
RVNUCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1z
b3VyY2Utb3ZlcmxhcHBpbmctYXBwZW5kLmh0bWwgYi9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1z
b3VyY2UvbWVkaWEtc291cmNlLW92ZXJsYXBwaW5nLWFwcGVuZC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRm
NDIwN2IwMTk4Y2Y3ZDQyNjBkYmU1YWQ3YjM3NTk2MmJjYzA2N2IKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLW92ZXJsYXBwaW5n
LWFwcGVuZC5odG1sCkBAIC0wLDAgKzEsOTYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKyAgICA8dGl0bGU+bW9jay1tZWRpYS1zb3VyY2U8L3RpdGxlPgorICAgIDxzY3JpcHQg
c3JjPSJtb2NrLW1lZGlhLXNvdXJjZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4u
L3ZpZGVvLXRlc3QuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgdmFyIHNvdXJjZTsK
KyAgICB2YXIgc291cmNlQnVmZmVyOworICAgIHZhciBpbml0U2VnbWVudDsKKyAgICB2YXIgc2Ft
cGxlczsKKyAgICB2YXIgYnVmZmVyZWRTYW1wbGVzOworCisgICAgaWYgKHdpbmRvdy5pbnRlcm5h
bHMpCisgICAgICAgIGludGVybmFscy5pbml0aWFsaXplTW9ja01lZGlhU291cmNlKCk7CisKKyAg
ICBmdW5jdGlvbiBydW5UZXN0KCkKKyAgICB7CisgICAgICAgIGZpbmRNZWRpYUVsZW1lbnQoKTsK
KworICAgICAgICBzb3VyY2UgPSBuZXcgTWVkaWFTb3VyY2UoKTsKKyAgICAgICAgd2FpdEZvckV2
ZW50T24oc291cmNlLCAnc291cmNlb3BlbicsIHNvdXJjZU9wZW4pOworICAgICAgICBydW4oJ3Zp
ZGVvLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoc291cmNlKScpOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHNvdXJjZU9wZW4oKQorICAgIHsKKyAgICAgICAgcnVuKCdzb3VyY2VCdWZmZXIgPSBz
b3VyY2UuYWRkU291cmNlQnVmZmVyKCJ2aWRlby9tb2NrOyBjb2RlY3M9bW9jayIpJyk7CisgICAg
ICAgIHdhaXRGb3JFdmVudE9uKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcsIGxvYWRPcmRlcmVk
U2FtcGxlcywgZmFsc2UsIHRydWUpOworICAgICAgICBpbml0U2VnbWVudCA9IG1ha2VBSW5pdCg4
LCBbbWFrZUFUcmFjaygxLCAnbW9jaycsIFRSQUNLX0tJTkQuVklERU8pXSk7CisgICAgICAgIHJ1
bignc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihpbml0U2VnbWVudCknKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBsb2FkT3JkZXJlZFNhbXBsZXMoKQorICAgIHsKKyAgICAgICBzYW1wbGVzID0g
Y29uY2F0ZW5hdGVTYW1wbGVzKFsKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDAsIDAsIDEsIDEs
IFNBTVBMRV9GTEFHLlNZTkMsIDApLAorICAgICAgICAgICAgbWFrZUFTYW1wbGUoMSwgMSwgMSwg
MSwgU0FNUExFX0ZMQUcuTk9ORSwgMCksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSgyLCAyLCAx
LCAxLCBTQU1QTEVfRkxBRy5OT05FLCAwKSwKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDMsIDMs
IDEsIDEsIFNBTVBMRV9GTEFHLlNZTkMsIDApLAorICAgICAgICAgICAgbWFrZUFTYW1wbGUoNCwg
NCwgMSwgMSwgU0FNUExFX0ZMQUcuTk9ORSwgMCksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSg1
LCA1LCAxLCAxLCBTQU1QTEVfRkxBRy5OT05FLCAwKSwKKyAgICAgICAgXSk7CisgICAgICAgIHdh
aXRGb3JFdmVudE9uKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcsIGxvYWRNb3JlT3JkZXJlZFNh
bXBsZXMsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgcnVuKCdzb3VyY2VCdWZmZXIuYXBwZW5kQnVm
ZmVyKHNhbXBsZXMpJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gbG9hZE1vcmVPcmRlcmVkU2Ft
cGxlcygpCisgICAgeworICAgICAgICBidWZmZXJlZFNhbXBsZXMgPSBpbnRlcm5hbHMuYnVmZmVy
ZWRTYW1wbGVzRm9yVHJhY2tJRChzb3VyY2VCdWZmZXIsIDEpOworICAgICAgICB0ZXN0RXhwZWN0
ZWQoImJ1ZmZlcmVkU2FtcGxlcy5sZW5ndGgiLCA2KTsKKyAgICAgICAgYnVmZmVyZWRTYW1wbGVz
LmZvckVhY2goY29uc29sZVdyaXRlKTsKKworICAgICAgICBzYW1wbGVzID0gY29uY2F0ZW5hdGVT
YW1wbGVzKFsKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDAsIDAsIDEsIDEsIFNBTVBMRV9GTEFH
LlNZTkMsIDEpLAorICAgICAgICAgICAgbWFrZUFTYW1wbGUoMSwgMSwgMSwgMSwgU0FNUExFX0ZM
QUcuTk9ORSwgMSksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSgyLCAyLCAxLCAxLCBTQU1QTEVf
RkxBRy5OT05FLCAxKSwKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDMsIDMsIDEsIDEsIFNBTVBM
RV9GTEFHLlNZTkMsIDEpLAorICAgICAgICAgICAgbWFrZUFTYW1wbGUoNCwgNCwgMSwgMSwgU0FN
UExFX0ZMQUcuTk9ORSwgMSksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSg1LCA1LCAxLCAxLCBT
QU1QTEVfRkxBRy5OT05FLCAxKSwKKyAgICAgICAgXSk7CisgICAgICAgIHdhaXRGb3JFdmVudE9u
KHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcsIGxvYWRVbm9yZGVyZWRTYW1wbGVzLCBmYWxzZSwg
dHJ1ZSk7CisgICAgICAgIHJ1bignc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKScp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGxvYWRVbm9yZGVyZWRTYW1wbGVzKCkKKyAgICB7Cisg
ICAgICAgIGJ1ZmZlcmVkU2FtcGxlcyA9IGludGVybmFscy5idWZmZXJlZFNhbXBsZXNGb3JUcmFj
a0lEKHNvdXJjZUJ1ZmZlciwgMSk7CisgICAgICAgIHRlc3RFeHBlY3RlZCgiYnVmZmVyZWRTYW1w
bGVzLmxlbmd0aCIsIDYpOworICAgICAgICBidWZmZXJlZFNhbXBsZXMuZm9yRWFjaChjb25zb2xl
V3JpdGUpOworCisgICAgICAgIHNhbXBsZXMgPSBjb25jYXRlbmF0ZVNhbXBsZXMoWworICAgICAg
ICAgICAgbWFrZUFTYW1wbGUoMCwgMCwgMSwgMSwgU0FNUExFX0ZMQUcuU1lOQywgMiksCisgICAg
ICAgICAgICBtYWtlQVNhbXBsZSgyLCAxLCAxLCAxLCBTQU1QTEVfRkxBRy5OT05FLCAyKSwKKyAg
ICAgICAgICAgIG1ha2VBU2FtcGxlKDEsIDIsIDEsIDEsIFNBTVBMRV9GTEFHLk5PTkUsIDIpLAor
ICAgICAgICAgICAgbWFrZUFTYW1wbGUoMywgMywgMSwgMSwgU0FNUExFX0ZMQUcuU1lOQywgMiks
CisgICAgICAgICAgICBtYWtlQVNhbXBsZSg1LCA0LCAxLCAxLCBTQU1QTEVfRkxBRy5OT05FLCAy
KSwKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDQsIDUsIDEsIDEsIFNBTVBMRV9GTEFHLk5PTkUs
IDIpLAorICAgICAgICBdKTsKKyAgICAgICAgd2FpdEZvckV2ZW50T24oc291cmNlQnVmZmVyLCAn
dXBkYXRlZW5kJywgc2FtcGxlc0FkZGVkLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHJ1bignc291
cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKScpOworICAgIH0KKworICAgICBmdW5jdGlv
biBzYW1wbGVzQWRkZWQoKQorICAgIHsKKyAgICAgICAgYnVmZmVyZWRTYW1wbGVzID0gaW50ZXJu
YWxzLmJ1ZmZlcmVkU2FtcGxlc0ZvclRyYWNrSUQoc291cmNlQnVmZmVyLCAxKTsKKyAgICAgICAg
dGVzdEV4cGVjdGVkKCJidWZmZXJlZFNhbXBsZXMubGVuZ3RoIiwgNik7CisgICAgICAgIGJ1ZmZl
cmVkU2FtcGxlcy5mb3JFYWNoKGNvbnNvbGVXcml0ZSk7CisKKyAgICAgICAgZW5kVGVzdCgpOwor
ICAgIH0KKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4K
KyAgICA8dmlkZW8+PC92aWRlbz4KKzwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL21l
ZGlhL21lZGlhLXNvdXJjZS9tb2NrLW1lZGlhLXNvdXJjZS5qcyBiL0xheW91dFRlc3RzL21lZGlh
L21lZGlhLXNvdXJjZS9tb2NrLW1lZGlhLXNvdXJjZS5qcwppbmRleCA3ZTRkNzk0MmMzNjRjYjFi
YzJkNGRjODZlNmU4YmQ5YmMzZjhkMzY0Li4yOGJiZTQyODljMmI1NTBhMTM0YTc4ZmQwZDBhYmM1
YmFkYTBhODBiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbW9j
ay1tZWRpYS1zb3VyY2UuanMKKysrIGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21v
Y2stbWVkaWEtc291cmNlLmpzCkBAIC0xNiw4ICsxNiw4IEBAIHZhciBTQU1QTEVfRkxBRyA9IHsK
ICAgICBERUxBWUVEOiAxIDw8IDMsCiB9OwogCi1mdW5jdGlvbiBtYWtlQVNhbXBsZShwcmVzZW50
YXRpb25UaW1lLCBkZWNvZGVUaW1lLCBkdXJhdGlvbiwgdHJhY2tJRCwgZmxhZ3MpIHsKLSAgICB2
YXIgYnl0ZUxlbmd0aCA9IDI5OworZnVuY3Rpb24gbWFrZUFTYW1wbGUocHJlc2VudGF0aW9uVGlt
ZSwgZGVjb2RlVGltZSwgZHVyYXRpb24sIHRyYWNrSUQsIGZsYWdzLCBnZW5lcmF0aW9uKSB7Cisg
ICAgdmFyIGJ5dGVMZW5ndGggPSAzMDsKICAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVy
KGJ5dGVMZW5ndGgpOwogICAgIHZhciBhcnJheSA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7CiAg
ICAgYXJyYXkuc2V0KHN0cmluZ1RvQXJyYXkoJ3NtcGwnKSk7CkBAIC0zMiw4ICszMiw5IEBAIGZ1
bmN0aW9uIG1ha2VBU2FtcGxlKHByZXNlbnRhdGlvblRpbWUsIGRlY29kZVRpbWUsIGR1cmF0aW9u
LCB0cmFja0lELCBmbGFncykgewogICAgIHZpZXcuc2V0SW50MzIoMjAsIGR1cmF0aW9uICogdGlt
ZVNjYWxlLCB0cnVlKTsKICAgICB2aWV3LnNldEludDMyKDI0LCB0cmFja0lELCB0cnVlKTsKICAg
ICB2aWV3LnNldFVpbnQ4KDI4LCBmbGFncyk7CisgICAgdmlldy5zZXRVaW50OCgyOSwgZ2VuZXJh
dGlvbik7CiAKLSAgICByZXR1cm4gYnVmZmVyOworICAgIHJldHVybiBidWZmZXIKIH0KIAogZnVu
Y3Rpb24gY29uY2F0ZW5hdGVTYW1wbGVzKHNhbXBsZXMpIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>