<?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>86906</bug_id>
          
          <creation_ts>2012-05-18 15:12:04 -0700</creation_ts>
          <short_desc>GeneratorGeneratedImage should cache intermediate images</short_desc>
          <delta_ts>2012-06-01 18:41:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>adele</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dino</cc>
    
    <cc>eoconnor</cc>
    
    <cc>gustavo</cc>
    
    <cc>philn</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>628137</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-05-18 15:12:04 -0700</bug_when>
    <thetext>Some pages include complicated, expensive, large gradients (the only currently implemented GeneratorGeneratedImage). Worse yet, some include them in fixed-position elements, which we currently have to repaint every frame during a scroll.

We should temporarily cache gradients while they&apos;re being used to relieve some of this stress on the graphics library.

We have measured significant (&gt;2x!) speedups scrolling some high-profile public sites on the Mac port.

&lt;rdar://problem/11484852&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628138</commentid>
    <comment_count>1</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-05-18 15:12:10 -0700</bug_when>
    <thetext>I have a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628182</commentid>
    <comment_count>2</comment_count>
      <attachid>142805</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-05-18 15:48:32 -0700</bug_when>
    <thetext>Created attachment 142805
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628221</commentid>
    <comment_count>3</comment_count>
      <attachid>142805</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-18 16:17:15 -0700</bug_when>
    <thetext>Comment on attachment 142805
patch

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

&gt; Source/WebCore/platform/graphics/Gradient.cpp:267
&gt; +    struct {
&gt; +        bool radial;
&gt; +        FloatPoint p0;
&gt; +        FloatPoint p1;
&gt; +        float r0;
&gt; +        float r1;
&gt; +        float aspectRatio;
&gt; +        mutable Vector&lt;ColorStop, 2&gt; stops;
&gt; +        mutable int lastStop;
&gt; +        GradientSpreadMethod spreadMethod;
&gt; +        AffineTransform gradientSpaceTransformation;
&gt; +    } parameters = {
&gt; +        m_radial,
&gt; +        m_p0,
&gt; +        m_p1,
&gt; +        m_r0,
&gt; +        m_r1,
&gt; +        m_aspectRatio,
&gt; +        m_stops,
&gt; +        m_lastStop,
&gt; +        m_spreadMethod,
&gt; +        m_gradientSpaceTransformation
&gt; +    };
&gt; +

Is there a guarantee there there aren&apos;t uninitialized bytes of padding here (say, after the first bool)?

I don&apos;t think you need the mutables here.

&gt; Source/WebCore/platform/graphics/Gradient.h:101
&gt; +        void setP0(const FloatPoint&amp; p) { m_p0 = p; clearHashCache(); }
&gt; +        void setP1(const FloatPoint&amp; p) { m_p1 = p; clearHashCache(); }

You should compare old and new values before clearing the hash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628224</commentid>
    <comment_count>4</comment_count>
      <attachid>142805</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-18 16:18:21 -0700</bug_when>
    <thetext>Comment on attachment 142805
patch

Attachment 142805 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12733001</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628230</commentid>
    <comment_count>5</comment_count>
      <attachid>142805</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-18 16:21:21 -0700</bug_when>
    <thetext>Comment on attachment 142805
patch

Attachment 142805 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12732008</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628231</commentid>
    <comment_count>6</comment_count>
      <attachid>142805</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-18 16:21:30 -0700</bug_when>
    <thetext>Comment on attachment 142805
patch

Attachment 142805 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12719980</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628255</commentid>
    <comment_count>7</comment_count>
      <attachid>142805</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-18 16:43:38 -0700</bug_when>
    <thetext>Comment on attachment 142805
patch

Attachment 142805 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12724614</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628300</commentid>
    <comment_count>8</comment_count>
      <attachid>142805</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-05-18 17:55:34 -0700</bug_when>
    <thetext>Comment on attachment 142805
patch

Attachment 142805 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12723819</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628396</commentid>
    <comment_count>9</comment_count>
      <attachid>142805</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-19 04:52:02 -0700</bug_when>
    <thetext>Comment on attachment 142805
patch

Attachment 142805 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12733141</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628831</commentid>
    <comment_count>10</comment_count>
      <attachid>142957</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-05-21 00:06:47 -0700</bug_when>
    <thetext>Created attachment 142957
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628842</commentid>
    <comment_count>11</comment_count>
      <attachid>142957</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-21 00:37:13 -0700</bug_when>
    <thetext>Comment on attachment 142957
patch

Attachment 142957 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12730554</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628843</commentid>
    <comment_count>12</comment_count>
      <attachid>142957</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-21 00:41:00 -0700</bug_when>
    <thetext>Comment on attachment 142957
patch

Attachment 142957 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12728867</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628844</commentid>
    <comment_count>13</comment_count>
      <attachid>142957</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-21 00:44:24 -0700</bug_when>
    <thetext>Comment on attachment 142957
patch

Attachment 142957 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12733533</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628846</commentid>
    <comment_count>14</comment_count>
      <attachid>142959</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-05-21 00:47:52 -0700</bug_when>
    <thetext>Created attachment 142959
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629729</commentid>
    <comment_count>15</comment_count>
      <attachid>142959</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-05-21 16:59:19 -0700</bug_when>
    <thetext>Comment on attachment 142959
patch

Seems like smfr&apos;s comments were addressed. I have one non-important naming question - why clearHashCache() yet m_cacheHash?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629753</commentid>
    <comment_count>16</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-05-21 17:28:32 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 142959 [details])
&gt; Seems like smfr&apos;s comments were addressed. I have one non-important naming question - why clearHashCache() yet m_cacheHash?

Thanks, Dean!

Fixed your naming question, landed in http://trac.webkit.org/changeset/117858</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630448</commentid>
    <comment_count>17</comment_count>
      <attachid>142959</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-22 09:34:38 -0700</bug_when>
    <thetext>Comment on attachment 142959
patch

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

&gt; Source/WebCore/ChangeLog:22
&gt; +        (Generator):

The change log has a lot of bogus lines like this in it. Please edit those out by hand if the list is not good. Better, cultivate the having of adding per-function comments.

&gt; Source/WebCore/platform/graphics/Generator.h:42
&gt; +    virtual unsigned hash() = 0;

Should this be const?

&gt; Source/WebCore/platform/graphics/GeneratorGeneratedImage.cpp:67
&gt; +    if (!m_cachedImageBuffer
&gt; +        || m_cachedGeneratorHash != generatorHash
&gt; +        || m_cachedAdjustedSize != adjustedSize

I think this would read better if these checks were all on one line.

&gt; Source/WebCore/platform/graphics/GeneratorGeneratedImage.cpp:69
&gt; +        // Create a BitmapImage and call drawPattern on it.

This comment that you moved is not good. Since it just says what the code does and adds nothing you should remove it.

&gt; Source/WebCore/platform/graphics/GeneratorGeneratedImage.cpp:75
&gt; +        GraphicsContext* graphicsContext = m_cachedImageBuffer-&gt;context();

I don’t think this local variable adds clarity. I’d just do it in one line.

&gt; Source/WebCore/platform/graphics/GeneratorGeneratedImage.cpp:76
&gt; +        graphicsContext-&gt;fillRect(FloatRect(FloatPoint(), adjustedSize), *m_generator.get());

Should not need the get() here, since the * operator should be implemented.

&gt; Source/WebCore/platform/graphics/GeneratorGeneratedImage.h:68
&gt; +    class GeneratedImageCacheTimer : public TimerBase {

It would be much better if you factored the timer I wrote for the other cache so we could share, instead of copying and pasting.

&gt; Source/WebCore/platform/graphics/GeneratorGeneratedImage.h:72
&gt; +        GeneratedImageCacheTimer(GeneratorGeneratedImage * parent)
&gt; +        : m_shouldRestartWhenTimerFires(false)
&gt; +        , m_parent(parent) { }

This isn’t our usual format. That would be:

    GeneratedImageCacheTimer(GeneratorGeneratedImage* parent)
        : m_shouldRestartWhenTimerFires(false)
        , m_parent(parent)
    {
    }

&gt; Source/WebCore/platform/graphics/GeneratorGeneratedImage.h:82
&gt; +        };
&gt; +    private:

Extra unneeded semicolon here. Should add a blank line before &quot;private&quot;.

&gt; Source/WebCore/platform/graphics/GeneratorGeneratedImage.h:83
&gt; +        virtual void fired() OVERRIDE

I don’t think it’s beneficial to have this function definition here in the header.

&gt; Source/WebCore/platform/graphics/GeneratorGeneratedImage.h:95
&gt; +        };

Extra semicolon here.

&gt; Source/WebCore/platform/graphics/GeneratorGeneratedImage.h:103
&gt; +    GeneratedImageCacheTimer m_cacheTimer;

A timer is a pretty big object. This makes generated image objects considerably bigger. Is there some way we can share a global timer instead of having a timer on each generated image?

&gt; Source/WebCore/platform/graphics/Gradient.cpp:264
&gt; +    memset(&amp;parameters, 0, sizeof(parameters));

You need a “why” comment here. It’s critical to do this memset, but not obvious why to most readers.

&gt; Source/WebCore/platform/graphics/Gradient.cpp:276
&gt; +    unsigned parametersHash = StringHasher::hashMemory(&amp;parameters, sizeof(parameters));

StringHasher has some requirements for the size of the memory passed in. Do we have a guarantee that this structure will meet those requirements?

&gt; Source/WebCore/platform/graphics/Gradient.cpp:278
&gt; +    ColorStop * stopData = m_stops.data();

This local variable doesn’t add value. I suggest omitting it. Also the * has an extra space before it.

&gt; Source/WebCore/platform/graphics/Gradient.cpp:283
&gt; +    std::pair&lt;unsigned, unsigned&gt; hashes(parametersHash, stopHash);
&gt; +    
&gt; +    m_cachedHash = DefaultHash&lt;std::pair&lt;unsigned, unsigned&gt; &gt;::Hash::hash(hashes);

A better way to hash two 32-bit values together is to turn them into a 64-bit integer and hash that. We could make a helper function to make that cleaner or just write this:

    m_cachedHash = intHash((static_cast&lt;uint64_t&gt;(parametersHash) &lt;&lt; 32) | stopHash);

Another way to do it would be to make StringHasher more flexible so we can hash two batches of memory and get the overall hash.

&gt; Source/WebCore/platform/graphics/Gradient.h:176
&gt; +        void clearHashCache() { m_cachedHash = 0; }

I’d call this function invalidateHash().

&gt; Source/WebCore/platform/graphics/GraphicsContext.cpp:794
&gt; +    AffineTransform localTransform = getCTM();
&gt; +    AffineTransform bufferTransform = buffer-&gt;context()-&gt;getCTM();
&gt; +
&gt; +    if (localTransform.xScale() != bufferTransform.xScale() || localTransform.yScale() != bufferTransform.yScale())
&gt; +        return false;
&gt; +
&gt; +    if (isAcceleratedContext() != buffer-&gt;context()-&gt;isAcceleratedContext())
&gt; +        return false;
&gt; +
&gt; +    return true;

I’d like to see a helper function named scalesMatch. With that you could eliminate CTM locals and write it like this:

    GraphicsContext* bufferContext = buffer-&gt;context();
    return scalesMatch(getCTM(), bufferContext-&gt;getCTM())) &amp;&amp; isAcceleratedContext() == bufferContext-&gt;isAcceleratedContext();

I think that would be clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630586</commentid>
    <comment_count>18</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-05-22 11:31:51 -0700</bug_when>
    <thetext>Thanks Darin. I have slapped my own wrists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633004</commentid>
    <comment_count>19</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-05-24 11:38:36 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 142959 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=142959&amp;action=review

Darin: sorry I haven&apos;t gotten to this quicker; these are all excellent points! I will post a followup patch, I just have to finish factoring out the timer. Might get split into a few patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637475</commentid>
    <comment_count>20</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-05-30 11:31:59 -0700</bug_when>
    <thetext>Timer refactor is http://trac.webkit.org/changeset/118942</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639917</commentid>
    <comment_count>21</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-06-01 18:41:28 -0700</bug_when>
    <thetext>Everything else except switching to a single timer is in http://trac.webkit.org/changeset/119307</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142805</attachid>
            <date>2012-05-18 15:48:32 -0700</date>
            <delta_ts>2012-05-21 00:06:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>gradient-cache.diff</filename>
            <type>text/plain</type>
            <size>15343</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MDYyMTE3Li45NWFjNmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUg
QEAKKzIwMTItMDUtMTggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2Ugc2hvdWxkIGNhY2hlIGludGVybWVkaWF0
ZSBpbWFnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg2OTA2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTQ4NDg1Mj4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDYWNoZSBnZW5lcmF0ZWQgaW1hZ2Vz
IGluIEdlbmVyYXRvckdlbmVyYXRlZEltYWdlLiBUaGUgY2FjaGUgaXMgaW52YWxpZGF0ZWQ6Cisg
ICAgICAgICAgICBhKSBpZiB0aGUgR2VuZXJhdG9yJ3MgaGFzaCBjaGFuZ2VzLgorICAgICAgICAg
ICAgYikgaWYgdGhlIHJlbmRlcmVkIHNpemUgY2hhbmdlcy4KKyAgICAgICAgICAgIGMpIGlmIHRo
ZSBjYWNoZWQgaW1hZ2UgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIGRlc3RpbmF0aW9uIGNvbnRl
eHQgKGFjY2VsZXJhdGlvbiBzdGF0ZSBvciBDVE0gc2NhbGUpLgorICAgICAgICAgICAgZCkgYWZ0
ZXIgb25lIHNlY29uZCBvZiBkaXN1c2UuCisKKyAgICAgICAgQWRkIGEgaGFzaCgpIGZ1bmN0aW9u
IHRvIEdlbmVyYXRvciwgd2hpY2ggc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXMK
KyAgICAgICAgdG8gcHJvdmlkZSBhIHN0cmFpZ2h0Zm9yd2FyZCB3YXkgdG8gZGV0ZXJtaW5lIGlm
IEdlbmVyYXRvcnMgaGF2ZSBiZWVuIG11dGF0ZWQKKyAgICAgICAgaW4gYSB3YXkgdGhhdCB3aWxs
IGFmZmVjdCB0aGUgcmVzdWx0YW50IHJlbmRlcmluZy4KKworICAgICAgICBObyBuZXcgdGVzdHMs
IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gQ29ycmVjdG5lc3MgaXMgY292ZXJlZCBieSB0aGUg
bXVsdGl0dWRlIG9mIGV4aXN0aW5nIGdyYWRpZW50IHRlc3RzLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR2VuZXJhdG9yLmg6CisgICAgICAgIChHZW5lcmF0b3IpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvckdlbmVyYXRlZEltYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdlbmVyYXRvckdlbmVyYXRlZEltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2U6On5HZW5lcmF0b3JHZW5lcmF0ZWRJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZTo6R2VuZXJhdG9y
R2VuZXJhdGVkSW1hZ2UpOgorICAgICAgICAoR2VuZXJhdGVkSW1hZ2VDYWNoZVRpbWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdlbmVyYXRvckdlbmVyYXRlZEltYWdlOjpHZW5lcmF0ZWRJbWFnZUNh
Y2hlVGltZXI6OkdlbmVyYXRlZEltYWdlQ2FjaGVUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpH
ZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZTo6R2VuZXJhdGVkSW1hZ2VDYWNoZVRpbWVyOjpyZXN0YXJ0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFkaWVudDo6R3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6
OmFkZENvbG9yU3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c29ydFN0b3BzSWZO
ZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNldFNwcmVhZE1ldGhvZCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0R3JhZGllbnRTcGFjZVRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6aGFzaCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhZGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRQMCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0UDEpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhZGllbnQ6OnNldFN0YXJ0UmFkaXVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50Ojpz
ZXRFbmRSYWRpdXMpOgorICAgICAgICAoR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
ZGllbnQ6OmNsZWFySGFzaENhY2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojppc0Nv
bXBhdGlibGVXaXRoQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0
KToKKwogMjAxMi0wNS0xNiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4K
IAogICAgICAgICBTY3JvbGxiYXIgbGF5ZXJzIHNob3VsZCByZXNwZWN0IGFjY2VsZXJhdGVkIGRy
YXdpbmcgc2V0dGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR2VuZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0
b3IuaAppbmRleCBiNjRkMDUxLi5iMmI0NWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HZW5lcmF0b3IuaApAQCAtMzksNiArMzksNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgdmlydHVhbCB2b2lkIGZpbGwoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQYXJhbWV0ZXJzRm9yVGlsZWREcmF3aW5nKElu
dFNpemUmIC8qIHNpemUgKi8sIEZsb2F0UmVjdCYgLyogc3JjUmVjdCAqLykgeyB9CisgICAgdmly
dHVhbCB1bnNpZ25lZCBoYXNoKCkgPSAwOwogfTsKIAogfSAvL25hbWVzcGFjZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9yR2VuZXJhdGVkSW1h
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9yR2VuZXJh
dGVkSW1hZ2UuY3BwCmluZGV4IGFkMTE2NWYuLmRkNzA2YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvckdlbmVyYXRlZEltYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0b3JHZW5lcmF0ZWRJbWFn
ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSwgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTYxLDE3ICs2MCwyOCBAQCB2b2lkIEdlbmVyYXRvckdlbmVyYXRlZEltYWdlOjpkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBjb25zdCBGbAogICAgIGFkanVzdGVk
UGF0dGVybkNUTS5zY2FsZSgxLjAgLyB4U2NhbGUsIDEuMCAvIHlTY2FsZSk7CiAgICAgYWRqdXN0
ZWRTcmNSZWN0LnNjYWxlKHhTY2FsZSwgeVNjYWxlKTsKIAotICAgIC8vIENyZWF0ZSBhIEJpdG1h
cEltYWdlIGFuZCBjYWxsIGRyYXdQYXR0ZXJuIG9uIGl0LgotICAgIE93blB0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIgPSBkZXN0Q29udGV4dC0+Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihhZGp1
c3RlZFNpemUpOwotICAgIGlmICghaW1hZ2VCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICB1
bnNpZ25lZCBnZW5lcmF0b3JIYXNoID0gbV9nZW5lcmF0b3ItPmhhc2goKTsKIAotICAgIC8vIEZp
bGwgd2l0aCB0aGUgZ2VuZXJhdGVkIGltYWdlLgotICAgIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKLSAgICBncmFwaGljc0NvbnRleHQt
PmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFkanVzdGVkU2l6ZSksICptX2dlbmVy
YXRvci5nZXQoKSk7CisgICAgaWYgKCFtX2NhY2hlZEltYWdlQnVmZmVyCisgICAgICAgIHx8IG1f
Y2FjaGVkR2VuZXJhdG9ySGFzaCAhPSBnZW5lcmF0b3JIYXNoCisgICAgICAgIHx8IG1fY2FjaGVk
QWRqdXN0ZWRTaXplICE9IGFkanVzdGVkU2l6ZQorICAgICAgICB8fCAhZGVzdENvbnRleHQtPmlz
Q29tcGF0aWJsZVdpdGhCdWZmZXIobV9jYWNoZWRJbWFnZUJ1ZmZlci5nZXQoKSkpIHsKKyAgICAg
ICAgLy8gQ3JlYXRlIGEgQml0bWFwSW1hZ2UgYW5kIGNhbGwgZHJhd1BhdHRlcm4gb24gaXQuCisg
ICAgICAgIG1fY2FjaGVkSW1hZ2VCdWZmZXIgPSBkZXN0Q29udGV4dC0+Y3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcihhZGp1c3RlZFNpemUpOworICAgICAgICBpZiAoIW1fY2FjaGVkSW1hZ2VCdWZmZXIp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gRmlsbCB3aXRoIHRoZSBnZW5lcmF0
ZWQgaW1hZ2UuCisgICAgICAgIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0ID0gbV9j
YWNoZWRJbWFnZUJ1ZmZlci0+Y29udGV4dCgpOworICAgICAgICBncmFwaGljc0NvbnRleHQtPmZp
bGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFkanVzdGVkU2l6ZSksICptX2dlbmVyYXRv
ci5nZXQoKSk7CisKKyAgICAgICAgbV9jYWNoZWRHZW5lcmF0b3JIYXNoID0gZ2VuZXJhdG9ySGFz
aDsKKyAgICAgICAgbV9jYWNoZWRBZGp1c3RlZFNpemUgPSBhZGp1c3RlZFNpemU7CisgICAgfQog
CiAgICAgLy8gVGlsZSB0aGUgaW1hZ2UgYnVmZmVyIGludG8gdGhlIGNvbnRleHQuCi0gICAgaW1h
Z2VCdWZmZXItPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBhZGp1c3RlZFNyY1JlY3QsIGFkanVz
dGVkUGF0dGVybkNUTSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3AsIGRlc3RS
ZWN0KTsKKyAgICBtX2NhY2hlZEltYWdlQnVmZmVyLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwg
YWRqdXN0ZWRTcmNSZWN0LCBhZGp1c3RlZFBhdHRlcm5DVE0sIHBoYXNlLCBzdHlsZUNvbG9yU3Bh
Y2UsIGNvbXBvc2l0ZU9wLCBkZXN0UmVjdCk7CisgICAgbV9jYWNoZVRpbWVyLnJlc3RhcnQoKTsK
IH0KIAogdm9pZCBHZW5lcmF0ZWRJbWFnZTo6Y29tcHV0ZUludHJpbnNpY0RpbWVuc2lvbnMoTGVu
Z3RoJiBpbnRyaW5zaWNXaWR0aCwgTGVuZ3RoJiBpbnRyaW5zaWNIZWlnaHQsIEZsb2F0U2l6ZSYg
aW50cmluc2ljUmF0aW8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UuaAppbmRleCA1MDljYTczLi41MDlmOTE3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0b3JH
ZW5lcmF0ZWRJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dl
bmVyYXRvckdlbmVyYXRlZEltYWdlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDEyIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxOCArMjks
MjYgQEAKICNpbmNsdWRlICJHZW5lcmF0ZWRJbWFnZS5oIgogI2luY2x1ZGUgIkdlbmVyYXRvci5o
IgogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRl
ICJJbnRTaXplLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGNvbnN0IGludCBnZW5lcmF0ZWRJbWFn
ZUNhY2hlQ2xlYXJEZWxheSA9IDE7CisKIGNsYXNzIEdlbmVyYXRvckdlbmVyYXRlZEltYWdlIDog
cHVibGljIEdlbmVyYXRlZEltYWdlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxH
ZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZT4gY3JlYXRlKFBhc3NSZWZQdHI8R2VuZXJhdG9yPiBnZW5l
cmF0b3IsIGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEdlbmVyYXRvckdlbmVyYXRlZEltYWdlKGdlbmVyYXRvciwgc2l6ZSkpOwogICAgIH0K
LSAgICB2aXJ0dWFsIH5HZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZSgpIHsgfQorCisgICAgdmlydHVh
bCB+R2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UoKQorICAgIHsKKyAgICAgICAgbV9jYWNoZVRpbWVy
LnN0b3AoKTsKKyAgICB9CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsK
QEAgLTQ5LDExICs1Nyw1MCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBHZW5lcmF0b3JHZW5lcmF0ZWRJ
bWFnZShQYXNzUmVmUHRyPEdlbmVyYXRvcj4gZ2VuZXJhdG9yLCBjb25zdCBJbnRTaXplJiBzaXpl
KQogICAgICAgICA6IG1fZ2VuZXJhdG9yKGdlbmVyYXRvcikKKyAgICAgICAgLCBtX2NhY2hlVGlt
ZXIodGhpcykKICAgICB7CiAgICAgICAgIG1fc2l6ZSA9IHNpemU7CiAgICAgfQogCisgICAgY2xh
c3MgR2VuZXJhdGVkSW1hZ2VDYWNoZVRpbWVyIDogcHJpdmF0ZSBUaW1lckJhc2UgeworICAgICAg
ICBmcmllbmQgR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2U7CisgICAgcHVibGljOgorICAgICAgICBH
ZW5lcmF0ZWRJbWFnZUNhY2hlVGltZXIoR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UgKiBwYXJlbnQp
CisgICAgICAgICAgICA6IG1fc2hvdWxkUmVzdGFydFdoZW5UaW1lckZpcmVzKGZhbHNlKQorICAg
ICAgICAgICAgLCBtX3BhcmVudChwYXJlbnQpIHsgfQorCisgICAgICAgIHZvaWQgcmVzdGFydCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpc0FjdGl2ZSgpKSB7CisgICAgICAgICAgICAg
ICAgbV9zaG91bGRSZXN0YXJ0V2hlblRpbWVyRmlyZXMgPSB0cnVlOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXJ0T25lU2hvdChnZW5lcmF0
ZWRJbWFnZUNhY2hlQ2xlYXJEZWxheSk7CisgICAgICAgIH07CisgICAgcHJpdmF0ZToKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGZpcmVkKCkgT1ZFUlJJREUKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG1fc2hvdWxkUmVzdGFydFdoZW5UaW1lckZpcmVzKSB7CisgICAgICAgICAgICAgICAgbV9z
aG91bGRSZXN0YXJ0V2hlblRpbWVyRmlyZXMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBzdGFy
dE9uZVNob3QoZ2VuZXJhdGVkSW1hZ2VDYWNoZUNsZWFyRGVsYXkpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1fcGFyZW50KSB7Cisg
ICAgICAgICAgICAgICAgbV9wYXJlbnQtPm1fY2FjaGVkSW1hZ2VCdWZmZXIgPSAwOworICAgICAg
ICAgICAgICAgIG1fcGFyZW50LT5tX2NhY2hlZEFkanVzdGVkU2l6ZSA9IEludFNpemUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgYm9vbCBtX3Nob3VsZFJlc3RhcnRXaGVu
VGltZXJGaXJlczsKKyAgICAgICAgR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UqIG1fcGFyZW50Owor
ICAgIH07CisKICAgICBSZWZQdHI8R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKKworICAgIE93blB0
cjxJbWFnZUJ1ZmZlcj4gbV9jYWNoZWRJbWFnZUJ1ZmZlcjsKKyAgICBHZW5lcmF0ZWRJbWFnZUNh
Y2hlVGltZXIgbV9jYWNoZVRpbWVyOworICAgIEludFNpemUgbV9jYWNoZWRBZGp1c3RlZFNpemU7
CisgICAgdW5zaWduZWQgbV9jYWNoZWRHZW5lcmF0b3JIYXNoOwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCmluZGV4IGZjN2I3NDEuLjIx
Nzk4NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRp
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5j
cHAKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL1N0cmluZ0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi9V
bnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Myw2ICs0NCw3IEBAIEdy
YWRpZW50OjpHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYg
cDEpCiAgICAgLCBtX3N0b3BzU29ydGVkKGZhbHNlKQogICAgICwgbV9sYXN0U3RvcCgwKQogICAg
ICwgbV9zcHJlYWRNZXRob2QoU3ByZWFkTWV0aG9kUGFkKQorICAgICwgbV9jYWNoZWRIYXNoKDAp
CiB7CiAgICAgcGxhdGZvcm1Jbml0KCk7CiB9CkBAIC01Nyw2ICs1OSw3IEBAIEdyYWRpZW50OjpH
cmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9pbnQm
IHAxLCBmbG9hdCByCiAgICAgLCBtX3N0b3BzU29ydGVkKGZhbHNlKQogICAgICwgbV9sYXN0U3Rv
cCgwKQogICAgICwgbV9zcHJlYWRNZXRob2QoU3ByZWFkTWV0aG9kUGFkKQorICAgICwgbV9jYWNo
ZWRIYXNoKDApCiB7CiAgICAgcGxhdGZvcm1Jbml0KCk7CiB9CkBAIC05OSw2ICsxMDIsOCBAQCB2
b2lkIEdyYWRpZW50OjphZGRDb2xvclN0b3AoZmxvYXQgdmFsdWUsIGNvbnN0IENvbG9yJiBjb2xv
cikKIAogICAgIG1fc3RvcHNTb3J0ZWQgPSBmYWxzZTsKICAgICBwbGF0Zm9ybURlc3Ryb3koKTsK
KworICAgIGNsZWFySGFzaENhY2hlKCk7CiB9CiAKIHZvaWQgR3JhZGllbnQ6OmFkZENvbG9yU3Rv
cChjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wJiBzdG9wKQpAQCAtMTA3LDYgKzExMiw4IEBAIHZv
aWQgR3JhZGllbnQ6OmFkZENvbG9yU3RvcChjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wJiBzdG9w
KQogCiAgICAgbV9zdG9wc1NvcnRlZCA9IGZhbHNlOwogICAgIHBsYXRmb3JtRGVzdHJveSgpOwor
CisgICAgY2xlYXJIYXNoQ2FjaGUoKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVT
dG9wcyhjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wJiBhLCBjb25zdCBHcmFkaWVudDo6Q29sb3JT
dG9wJiBiKQpAQCAtMTI1LDYgKzEzMiw4IEBAIHZvaWQgR3JhZGllbnQ6OnNvcnRTdG9wc0lmTmVj
ZXNzYXJ5KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3RkOjpzdGFibGVfc29ydChtX3N0b3Bz
LmJlZ2luKCksIG1fc3RvcHMuZW5kKCksIGNvbXBhcmVTdG9wcyk7CisKKyAgICBjbGVhckhhc2hD
YWNoZSgpOwogfQogCiB2b2lkIEdyYWRpZW50OjpnZXRDb2xvcihmbG9hdCB2YWx1ZSwgZmxvYXQq
IHIsIGZsb2F0KiBnLCBmbG9hdCogYiwgZmxvYXQqIGEpIGNvbnN0CkBAIC0yMDksMTIgKzIxOCwx
NiBAQCB2b2lkIEdyYWRpZW50OjpzZXRTcHJlYWRNZXRob2QoR3JhZGllbnRTcHJlYWRNZXRob2Qg
c3ByZWFkTWV0aG9kKQogICAgIC8vIEZJWE1FOiBTaG91bGQgaXQgYmVjb21lIG5lY2Vzc2FyeSwg
YWxsb3cgY2FsbHMgdG8gdGhpcyBtZXRob2QgYWZ0ZXIgbV9ncmFkaWVudCBoYXMgYmVlbiBzZXQu
CiAgICAgQVNTRVJUKG1fZ3JhZGllbnQgPT0gMCk7CiAgICAgbV9zcHJlYWRNZXRob2QgPSBzcHJl
YWRNZXRob2Q7CisKKyAgICBjbGVhckhhc2hDYWNoZSgpOwogfQogCiB2b2lkIEdyYWRpZW50Ojpz
ZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRT
cGFjZVRyYW5zZm9ybWF0aW9uKQogeyAKICAgICBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlv
biA9IGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKICAgICBzZXRQbGF0Zm9ybUdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0oZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKTsKKworICAgIGNsZWFy
SGFzaENhY2hlKCk7CiB9CiAKICNpZiAhVVNFKFNLSUEpICYmICFVU0UoQ0FJUk8pCkBAIC0yMjMs
NSArMjM2LDM4IEBAIHZvaWQgR3JhZGllbnQ6OnNldFBsYXRmb3JtR3JhZGllbnRTcGFjZVRyYW5z
Zm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKQogfQogI2VuZGlmCiAKK3Vuc2lnbmVkIEdyYWRp
ZW50OjpoYXNoKCkKK3sKKyAgICBpZiAobV9jYWNoZWRIYXNoKQorICAgICAgICByZXR1cm4gbV9j
YWNoZWRIYXNoOworCisgICAgc3RydWN0IHsKKyAgICAgICAgYm9vbCByYWRpYWw7CisgICAgICAg
IEZsb2F0UG9pbnQgcDA7CisgICAgICAgIEZsb2F0UG9pbnQgcDE7CisgICAgICAgIGZsb2F0IHIw
OworICAgICAgICBmbG9hdCByMTsKKyAgICAgICAgZmxvYXQgYXNwZWN0UmF0aW87CisgICAgICAg
IG11dGFibGUgVmVjdG9yPENvbG9yU3RvcCwgMj4gc3RvcHM7CisgICAgICAgIG11dGFibGUgaW50
IGxhc3RTdG9wOworICAgICAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2Q7Cisg
ICAgICAgIEFmZmluZVRyYW5zZm9ybSBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247CisgICAg
fSBwYXJhbWV0ZXJzID0geworICAgICAgICBtX3JhZGlhbCwKKyAgICAgICAgbV9wMCwKKyAgICAg
ICAgbV9wMSwKKyAgICAgICAgbV9yMCwKKyAgICAgICAgbV9yMSwKKyAgICAgICAgbV9hc3BlY3RS
YXRpbywKKyAgICAgICAgbV9zdG9wcywKKyAgICAgICAgbV9sYXN0U3RvcCwKKyAgICAgICAgbV9z
cHJlYWRNZXRob2QsCisgICAgICAgIG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uCisgICAg
fTsKKworICAgIG1fY2FjaGVkSGFzaCA9IFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeSgmcGFyYW1l
dGVycywgc2l6ZW9mKHBhcmFtZXRlcnMpKTsKKworICAgIHJldHVybiBtX2NhY2hlZEhhc2g7Cit9
CiAKIH0gLy9uYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFk
aWVudC5oCmluZGV4IDYwYTQ1MzguLjcwMDMyZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhZGllbnQuaApAQCAtOTcsMTQgKzk3LDE0IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcDAoKSBjb25zdCB7IHJldHVybiBtX3Aw
OyB9CiAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHAxKCkgY29uc3QgeyByZXR1cm4gbV9wMTsg
fQogCi0gICAgICAgIHZvaWQgc2V0UDAoY29uc3QgRmxvYXRQb2ludCYgcCkgeyBtX3AwID0gcDsg
fQotICAgICAgICB2b2lkIHNldFAxKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgbV9wMSA9IHA7IH0K
KyAgICAgICAgdm9pZCBzZXRQMChjb25zdCBGbG9hdFBvaW50JiBwKSB7IG1fcDAgPSBwOyBjbGVh
ckhhc2hDYWNoZSgpOyB9CisgICAgICAgIHZvaWQgc2V0UDEoY29uc3QgRmxvYXRQb2ludCYgcCkg
eyBtX3AxID0gcDsgY2xlYXJIYXNoQ2FjaGUoKTsgfQogCiAgICAgICAgIGZsb2F0IHN0YXJ0UmFk
aXVzKCkgY29uc3QgeyByZXR1cm4gbV9yMDsgfQogICAgICAgICBmbG9hdCBlbmRSYWRpdXMoKSBj
b25zdCB7IHJldHVybiBtX3IxOyB9CiAKLSAgICAgICAgdm9pZCBzZXRTdGFydFJhZGl1cyhmbG9h
dCByKSB7IG1fcjAgPSByOyB9Ci0gICAgICAgIHZvaWQgc2V0RW5kUmFkaXVzKGZsb2F0IHIpIHsg
bV9yMSA9IHI7IH0KKyAgICAgICAgdm9pZCBzZXRTdGFydFJhZGl1cyhmbG9hdCByKSB7IG1fcjAg
PSByOyBjbGVhckhhc2hDYWNoZSgpOyB9CisgICAgICAgIHZvaWQgc2V0RW5kUmFkaXVzKGZsb2F0
IHIpIHsgbV9yMSA9IHI7IGNsZWFySGFzaENhY2hlKCk7IH0KICAgICAgICAgCiAgICAgICAgIGZs
b2F0IGFzcGVjdFJhdGlvKCkgY29uc3QgeyByZXR1cm4gbV9hc3BlY3RSYXRpbzsgfQogCkBAIC0x
MzgsNiArMTM4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgc2V0UGxh
dGZvcm1HcmFkaWVudFNwYWNlVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGll
bnRTcGFjZVRyYW5zZm9ybWF0aW9uKTsKIAorICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGhhc2go
KSBPVkVSUklERTsKKyAgICAgICAgdm9pZCBjbGVhckhhc2hDYWNoZSgpIHsgbV9jYWNoZWRIYXNo
ID0gMDsgfQorCiAjaWYgVVNFKENHKQogICAgICAgICB2b2lkIHBhaW50KENHQ29udGV4dFJlZik7
CiAgICAgICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0Kik7CkBAIC0xNTUsNiArMTU4LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgZmluZFN0b3AoZmxvYXQgdmFsdWUp
IGNvbnN0OwogICAgICAgICB2b2lkIHNvcnRTdG9wc0lmTmVjZXNzYXJ5KCk7CiAKKyAgICAgICAg
Ly8gS2VlcCBhbnkgcGFyYW1ldGVycyByZWxldmFudCB0byByZW5kZXJpbmcgaW4gc3luYyB3aXRo
IHRoZSBzdHJ1Y3R1cmUgaW4gR3JhZGllbnQ6Omhhc2goKS4KICAgICAgICAgYm9vbCBtX3JhZGlh
bDsKICAgICAgICAgRmxvYXRQb2ludCBtX3AwOwogICAgICAgICBGbG9hdFBvaW50IG1fcDE7CkBA
IC0xNjcsNiArMTcxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBHcmFkaWVudFNw
cmVhZE1ldGhvZCBtX3NwcmVhZE1ldGhvZDsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1fZ3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOwogCisgICAgICAgIHVuc2lnbmVkIG1fY2FjaGVkSGFz
aDsKKwogICAgICAgICBQbGF0Zm9ybUdyYWRpZW50IG1fZ3JhZGllbnQ7CiAKICNpZiBVU0UoQ0FJ
Uk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcAppbmRleCA2NDAyYjQ4Li4wMjBlNzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTc4MCw2ICs3
ODAsMjAgQEAgUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGNvbnN0IEludFNpemUmIHMKICAgICByZXR1cm4gYnVmZmVyLnJlbGVh
c2UoKTsKIH0KIAorYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQ29tcGF0aWJsZVdpdGhCdWZmZXIo
SW1hZ2VCdWZmZXIqIGJ1ZmZlcikgY29uc3QKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxU
cmFuc2Zvcm0gPSBnZXRDVE0oKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYnVmZmVyVHJhbnNmb3Jt
ID0gYnVmZmVyLT5jb250ZXh0KCktPmdldENUTSgpOworCisgICAgaWYgKGxvY2FsVHJhbnNmb3Jt
LnhTY2FsZSgpICE9IGJ1ZmZlclRyYW5zZm9ybS54U2NhbGUoKSB8fCBsb2NhbFRyYW5zZm9ybS55
U2NhbGUoKSAhPSBidWZmZXJUcmFuc2Zvcm0ueVNjYWxlKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChpc0FjY2VsZXJhdGVkQ29udGV4dCgpICE9IGJ1ZmZlci0+Y29udGV4dCgp
LT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogI2lmICFVU0UoQ0cpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQogewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCAxYzgxODkxLi4z
MTJlODg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaApAQCAtNDI0LDYgKzQyNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhpcyBjb250
ZXh0LCB3aXRoIHN1aXRhYmxlIHJlc29sdXRpb24KICAgICAgICAgLy8gZm9yIGRyYXdpbmcgaW50
byB0aGUgYnVmZmVyIGFuZCB0aGVuIGludG8gdGhpcyBjb250ZXh0LgogICAgICAgICBQYXNzT3du
UHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEludFNpemUmKSBj
b25zdDsKKyAgICAgICAgYm9vbCBpc0NvbXBhdGlibGVXaXRoQnVmZmVyKEltYWdlQnVmZmVyKikg
Y29uc3Q7CiAKICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSBkZXZpY2Ugc2Nh
bGUgZmFjdG9yIHRvIHRoZSBjb250ZXh0LCBtYWtpbmcgdGhlIGNvbnRleHQgY2FwYWJsZSBvZgog
ICAgICAgICAvLyBhY3RpbmcgYXMgYSBiYXNlLWxldmVsIGNvbnRleHQgZm9yIGEgSGlEUEkgZW52
aXJvbm1lbnQuCg==
</data>
<flag name="commit-queue"
          id="149235"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142957</attachid>
            <date>2012-05-21 00:06:47 -0700</date>
            <delta_ts>2012-05-21 00:47:52 -0700</delta_ts>
            <desc>patch</desc>
            <filename>scroll.diff</filename>
            <type>text/plain</type>
            <size>16534</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MDYyMTE3Li45NWFjNmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUg
QEAKKzIwMTItMDUtMTggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2Ugc2hvdWxkIGNhY2hlIGludGVybWVkaWF0
ZSBpbWFnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg2OTA2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTQ4NDg1Mj4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDYWNoZSBnZW5lcmF0ZWQgaW1hZ2Vz
IGluIEdlbmVyYXRvckdlbmVyYXRlZEltYWdlLiBUaGUgY2FjaGUgaXMgaW52YWxpZGF0ZWQ6Cisg
ICAgICAgICAgICBhKSBpZiB0aGUgR2VuZXJhdG9yJ3MgaGFzaCBjaGFuZ2VzLgorICAgICAgICAg
ICAgYikgaWYgdGhlIHJlbmRlcmVkIHNpemUgY2hhbmdlcy4KKyAgICAgICAgICAgIGMpIGlmIHRo
ZSBjYWNoZWQgaW1hZ2UgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIGRlc3RpbmF0aW9uIGNvbnRl
eHQgKGFjY2VsZXJhdGlvbiBzdGF0ZSBvciBDVE0gc2NhbGUpLgorICAgICAgICAgICAgZCkgYWZ0
ZXIgb25lIHNlY29uZCBvZiBkaXN1c2UuCisKKyAgICAgICAgQWRkIGEgaGFzaCgpIGZ1bmN0aW9u
IHRvIEdlbmVyYXRvciwgd2hpY2ggc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXMK
KyAgICAgICAgdG8gcHJvdmlkZSBhIHN0cmFpZ2h0Zm9yd2FyZCB3YXkgdG8gZGV0ZXJtaW5lIGlm
IEdlbmVyYXRvcnMgaGF2ZSBiZWVuIG11dGF0ZWQKKyAgICAgICAgaW4gYSB3YXkgdGhhdCB3aWxs
IGFmZmVjdCB0aGUgcmVzdWx0YW50IHJlbmRlcmluZy4KKworICAgICAgICBObyBuZXcgdGVzdHMs
IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gQ29ycmVjdG5lc3MgaXMgY292ZXJlZCBieSB0aGUg
bXVsdGl0dWRlIG9mIGV4aXN0aW5nIGdyYWRpZW50IHRlc3RzLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR2VuZXJhdG9yLmg6CisgICAgICAgIChHZW5lcmF0b3IpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvckdlbmVyYXRlZEltYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdlbmVyYXRvckdlbmVyYXRlZEltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2U6On5HZW5lcmF0b3JHZW5lcmF0ZWRJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZTo6R2VuZXJhdG9y
R2VuZXJhdGVkSW1hZ2UpOgorICAgICAgICAoR2VuZXJhdGVkSW1hZ2VDYWNoZVRpbWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdlbmVyYXRvckdlbmVyYXRlZEltYWdlOjpHZW5lcmF0ZWRJbWFnZUNh
Y2hlVGltZXI6OkdlbmVyYXRlZEltYWdlQ2FjaGVUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpH
ZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZTo6R2VuZXJhdGVkSW1hZ2VDYWNoZVRpbWVyOjpyZXN0YXJ0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFkaWVudDo6R3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6
OmFkZENvbG9yU3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c29ydFN0b3BzSWZO
ZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNldFNwcmVhZE1ldGhvZCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0R3JhZGllbnRTcGFjZVRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6aGFzaCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhZGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRQMCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0UDEpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhZGllbnQ6OnNldFN0YXJ0UmFkaXVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50Ojpz
ZXRFbmRSYWRpdXMpOgorICAgICAgICAoR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
ZGllbnQ6OmNsZWFySGFzaENhY2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojppc0Nv
bXBhdGlibGVXaXRoQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0
KToKKwogMjAxMi0wNS0xNiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4K
IAogICAgICAgICBTY3JvbGxiYXIgbGF5ZXJzIHNob3VsZCByZXNwZWN0IGFjY2VsZXJhdGVkIGRy
YXdpbmcgc2V0dGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR2VuZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0
b3IuaAppbmRleCBiNjRkMDUxLi5iMmI0NWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HZW5lcmF0b3IuaApAQCAtMzksNiArMzksNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgdmlydHVhbCB2b2lkIGZpbGwoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQYXJhbWV0ZXJzRm9yVGlsZWREcmF3aW5nKElu
dFNpemUmIC8qIHNpemUgKi8sIEZsb2F0UmVjdCYgLyogc3JjUmVjdCAqLykgeyB9CisgICAgdmly
dHVhbCB1bnNpZ25lZCBoYXNoKCkgPSAwOwogfTsKIAogfSAvL25hbWVzcGFjZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9yR2VuZXJhdGVkSW1h
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9yR2VuZXJh
dGVkSW1hZ2UuY3BwCmluZGV4IGFkMTE2NWYuLmRkNzA2YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvckdlbmVyYXRlZEltYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0b3JHZW5lcmF0ZWRJbWFn
ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSwgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTYxLDE3ICs2MCwyOCBAQCB2b2lkIEdlbmVyYXRvckdlbmVyYXRlZEltYWdlOjpkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBjb25zdCBGbAogICAgIGFkanVzdGVk
UGF0dGVybkNUTS5zY2FsZSgxLjAgLyB4U2NhbGUsIDEuMCAvIHlTY2FsZSk7CiAgICAgYWRqdXN0
ZWRTcmNSZWN0LnNjYWxlKHhTY2FsZSwgeVNjYWxlKTsKIAotICAgIC8vIENyZWF0ZSBhIEJpdG1h
cEltYWdlIGFuZCBjYWxsIGRyYXdQYXR0ZXJuIG9uIGl0LgotICAgIE93blB0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIgPSBkZXN0Q29udGV4dC0+Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihhZGp1
c3RlZFNpemUpOwotICAgIGlmICghaW1hZ2VCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICB1
bnNpZ25lZCBnZW5lcmF0b3JIYXNoID0gbV9nZW5lcmF0b3ItPmhhc2goKTsKIAotICAgIC8vIEZp
bGwgd2l0aCB0aGUgZ2VuZXJhdGVkIGltYWdlLgotICAgIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKLSAgICBncmFwaGljc0NvbnRleHQt
PmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFkanVzdGVkU2l6ZSksICptX2dlbmVy
YXRvci5nZXQoKSk7CisgICAgaWYgKCFtX2NhY2hlZEltYWdlQnVmZmVyCisgICAgICAgIHx8IG1f
Y2FjaGVkR2VuZXJhdG9ySGFzaCAhPSBnZW5lcmF0b3JIYXNoCisgICAgICAgIHx8IG1fY2FjaGVk
QWRqdXN0ZWRTaXplICE9IGFkanVzdGVkU2l6ZQorICAgICAgICB8fCAhZGVzdENvbnRleHQtPmlz
Q29tcGF0aWJsZVdpdGhCdWZmZXIobV9jYWNoZWRJbWFnZUJ1ZmZlci5nZXQoKSkpIHsKKyAgICAg
ICAgLy8gQ3JlYXRlIGEgQml0bWFwSW1hZ2UgYW5kIGNhbGwgZHJhd1BhdHRlcm4gb24gaXQuCisg
ICAgICAgIG1fY2FjaGVkSW1hZ2VCdWZmZXIgPSBkZXN0Q29udGV4dC0+Y3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcihhZGp1c3RlZFNpemUpOworICAgICAgICBpZiAoIW1fY2FjaGVkSW1hZ2VCdWZmZXIp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gRmlsbCB3aXRoIHRoZSBnZW5lcmF0
ZWQgaW1hZ2UuCisgICAgICAgIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0ID0gbV9j
YWNoZWRJbWFnZUJ1ZmZlci0+Y29udGV4dCgpOworICAgICAgICBncmFwaGljc0NvbnRleHQtPmZp
bGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFkanVzdGVkU2l6ZSksICptX2dlbmVyYXRv
ci5nZXQoKSk7CisKKyAgICAgICAgbV9jYWNoZWRHZW5lcmF0b3JIYXNoID0gZ2VuZXJhdG9ySGFz
aDsKKyAgICAgICAgbV9jYWNoZWRBZGp1c3RlZFNpemUgPSBhZGp1c3RlZFNpemU7CisgICAgfQog
CiAgICAgLy8gVGlsZSB0aGUgaW1hZ2UgYnVmZmVyIGludG8gdGhlIGNvbnRleHQuCi0gICAgaW1h
Z2VCdWZmZXItPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBhZGp1c3RlZFNyY1JlY3QsIGFkanVz
dGVkUGF0dGVybkNUTSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3AsIGRlc3RS
ZWN0KTsKKyAgICBtX2NhY2hlZEltYWdlQnVmZmVyLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwg
YWRqdXN0ZWRTcmNSZWN0LCBhZGp1c3RlZFBhdHRlcm5DVE0sIHBoYXNlLCBzdHlsZUNvbG9yU3Bh
Y2UsIGNvbXBvc2l0ZU9wLCBkZXN0UmVjdCk7CisgICAgbV9jYWNoZVRpbWVyLnJlc3RhcnQoKTsK
IH0KIAogdm9pZCBHZW5lcmF0ZWRJbWFnZTo6Y29tcHV0ZUludHJpbnNpY0RpbWVuc2lvbnMoTGVu
Z3RoJiBpbnRyaW5zaWNXaWR0aCwgTGVuZ3RoJiBpbnRyaW5zaWNIZWlnaHQsIEZsb2F0U2l6ZSYg
aW50cmluc2ljUmF0aW8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UuaAppbmRleCA1MDljYTczLi4wYWU2NmI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0b3JH
ZW5lcmF0ZWRJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dl
bmVyYXRvckdlbmVyYXRlZEltYWdlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDEyIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxOCArMjks
MjggQEAKICNpbmNsdWRlICJHZW5lcmF0ZWRJbWFnZS5oIgogI2luY2x1ZGUgIkdlbmVyYXRvci5o
IgogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRl
ICJJbnRTaXplLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGNvbnN0IGludCBnZW5lcmF0ZWRJbWFn
ZUNhY2hlQ2xlYXJEZWxheSA9IDE7CisKK2NsYXNzIEdlbmVyYXRvckdlbmVyYXRlZEltYWdlOwor
CiBjbGFzcyBHZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZSA6IHB1YmxpYyBHZW5lcmF0ZWRJbWFnZSB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2U+
IGNyZWF0ZShQYXNzUmVmUHRyPEdlbmVyYXRvcj4gZ2VuZXJhdG9yLCBjb25zdCBJbnRTaXplJiBz
aXplKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmF0b3JHZW5lcmF0
ZWRJbWFnZShnZW5lcmF0b3IsIHNpemUpKTsKICAgICB9Ci0gICAgdmlydHVhbCB+R2VuZXJhdG9y
R2VuZXJhdGVkSW1hZ2UoKSB7IH0KKworICAgIHZpcnR1YWwgfkdlbmVyYXRvckdlbmVyYXRlZElt
YWdlKCkKKyAgICB7CisgICAgICAgIG1fY2FjaGVUaW1lci5zdG9wKCk7CisgICAgfQogCiBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CkBAIC00OSwxMSArNTksNTAgQEAgcHJv
dGVjdGVkOgogCiAgICAgR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UoUGFzc1JlZlB0cjxHZW5lcmF0
b3I+IGdlbmVyYXRvciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgOiBtX2dlbmVyYXRv
cihnZW5lcmF0b3IpCisgICAgICAgICwgbV9jYWNoZVRpbWVyKHRoaXMpCiAgICAgewogICAgICAg
ICBtX3NpemUgPSBzaXplOwogICAgIH0KIAorICAgIGNsYXNzIEdlbmVyYXRlZEltYWdlQ2FjaGVU
aW1lciA6IHB1YmxpYyBUaW1lckJhc2UgeworICAgICAgICBmcmllbmQgR2VuZXJhdG9yR2VuZXJh
dGVkSW1hZ2U7CisgICAgcHVibGljOgorICAgICAgICBHZW5lcmF0ZWRJbWFnZUNhY2hlVGltZXIo
R2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UgKiBwYXJlbnQpCisgICAgICAgICAgICA6IG1fc2hvdWxk
UmVzdGFydFdoZW5UaW1lckZpcmVzKGZhbHNlKQorICAgICAgICAgICAgLCBtX3BhcmVudChwYXJl
bnQpIHsgfQorCisgICAgICAgIHZvaWQgcmVzdGFydCgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChpc0FjdGl2ZSgpKSB7CisgICAgICAgICAgICAgICAgbV9zaG91bGRSZXN0YXJ0V2hlblRp
bWVyRmlyZXMgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHN0YXJ0T25lU2hvdChnZW5lcmF0ZWRJbWFnZUNhY2hlQ2xlYXJEZWxheSk7
CisgICAgICAgIH07CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpcmVkKCkg
T1ZFUlJJREUKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fc2hvdWxkUmVzdGFydFdoZW5U
aW1lckZpcmVzKSB7CisgICAgICAgICAgICAgICAgbV9zaG91bGRSZXN0YXJ0V2hlblRpbWVyRmly
ZXMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBzdGFydE9uZVNob3QoZ2VuZXJhdGVkSW1hZ2VD
YWNoZUNsZWFyRGVsYXkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKG1fcGFyZW50KSB7CisgICAgICAgICAgICAgICAgbV9wYXJlbnQt
Pm1fY2FjaGVkSW1hZ2VCdWZmZXIuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBtX3BhcmVudC0+
bV9jYWNoZWRBZGp1c3RlZFNpemUgPSBJbnRTaXplKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH07CisgICAgICAgIGJvb2wgbV9zaG91bGRSZXN0YXJ0V2hlblRpbWVyRmlyZXM7CisgICAgICAg
IEdlbmVyYXRvckdlbmVyYXRlZEltYWdlKiBtX3BhcmVudDsKKyAgICB9OworCiAgICAgUmVmUHRy
PEdlbmVyYXRvcj4gbV9nZW5lcmF0b3I7CisKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1fY2Fj
aGVkSW1hZ2VCdWZmZXI7CisgICAgR2VuZXJhdGVkSW1hZ2VDYWNoZVRpbWVyIG1fY2FjaGVUaW1l
cjsKKyAgICBJbnRTaXplIG1fY2FjaGVkQWRqdXN0ZWRTaXplOworICAgIHVuc2lnbmVkIG1fY2Fj
aGVkR2VuZXJhdG9ySGFzaDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50LmNwcAppbmRleCBmYzdiNzQxLi4xNzNjYjJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCkBAIC0yOSw2ICsyOSw4IEBA
CiAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
PHd0Zi9IYXNoRnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ0hhc2hlci5oPgogI2lu
Y2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Myw2
ICs0NSw3IEBAIEdyYWRpZW50OjpHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3Qg
RmxvYXRQb2ludCYgcDEpCiAgICAgLCBtX3N0b3BzU29ydGVkKGZhbHNlKQogICAgICwgbV9sYXN0
U3RvcCgwKQogICAgICwgbV9zcHJlYWRNZXRob2QoU3ByZWFkTWV0aG9kUGFkKQorICAgICwgbV9j
YWNoZWRIYXNoKDApCiB7CiAgICAgcGxhdGZvcm1Jbml0KCk7CiB9CkBAIC01Nyw2ICs2MCw3IEBA
IEdyYWRpZW50OjpHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0
IEZsb2F0UG9pbnQmIHAxLCBmbG9hdCByCiAgICAgLCBtX3N0b3BzU29ydGVkKGZhbHNlKQogICAg
ICwgbV9sYXN0U3RvcCgwKQogICAgICwgbV9zcHJlYWRNZXRob2QoU3ByZWFkTWV0aG9kUGFkKQor
ICAgICwgbV9jYWNoZWRIYXNoKDApCiB7CiAgICAgcGxhdGZvcm1Jbml0KCk7CiB9CkBAIC05OSw2
ICsxMDMsOCBAQCB2b2lkIEdyYWRpZW50OjphZGRDb2xvclN0b3AoZmxvYXQgdmFsdWUsIGNvbnN0
IENvbG9yJiBjb2xvcikKIAogICAgIG1fc3RvcHNTb3J0ZWQgPSBmYWxzZTsKICAgICBwbGF0Zm9y
bURlc3Ryb3koKTsKKworICAgIGNsZWFySGFzaENhY2hlKCk7CiB9CiAKIHZvaWQgR3JhZGllbnQ6
OmFkZENvbG9yU3RvcChjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wJiBzdG9wKQpAQCAtMTA3LDYg
KzExMyw4IEBAIHZvaWQgR3JhZGllbnQ6OmFkZENvbG9yU3RvcChjb25zdCBHcmFkaWVudDo6Q29s
b3JTdG9wJiBzdG9wKQogCiAgICAgbV9zdG9wc1NvcnRlZCA9IGZhbHNlOwogICAgIHBsYXRmb3Jt
RGVzdHJveSgpOworCisgICAgY2xlYXJIYXNoQ2FjaGUoKTsKIH0KIAogc3RhdGljIGlubGluZSBi
b29sIGNvbXBhcmVTdG9wcyhjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wJiBhLCBjb25zdCBHcmFk
aWVudDo6Q29sb3JTdG9wJiBiKQpAQCAtMTI1LDYgKzEzMyw4IEBAIHZvaWQgR3JhZGllbnQ6OnNv
cnRTdG9wc0lmTmVjZXNzYXJ5KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3RkOjpzdGFibGVf
c29ydChtX3N0b3BzLmJlZ2luKCksIG1fc3RvcHMuZW5kKCksIGNvbXBhcmVTdG9wcyk7CisKKyAg
ICBjbGVhckhhc2hDYWNoZSgpOwogfQogCiB2b2lkIEdyYWRpZW50OjpnZXRDb2xvcihmbG9hdCB2
YWx1ZSwgZmxvYXQqIHIsIGZsb2F0KiBnLCBmbG9hdCogYiwgZmxvYXQqIGEpIGNvbnN0CkBAIC0y
MDgsMTMgKzIxOCwyNCBAQCB2b2lkIEdyYWRpZW50OjpzZXRTcHJlYWRNZXRob2QoR3JhZGllbnRT
cHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKQogewogICAgIC8vIEZJWE1FOiBTaG91bGQgaXQgYmVj
b21lIG5lY2Vzc2FyeSwgYWxsb3cgY2FsbHMgdG8gdGhpcyBtZXRob2QgYWZ0ZXIgbV9ncmFkaWVu
dCBoYXMgYmVlbiBzZXQuCiAgICAgQVNTRVJUKG1fZ3JhZGllbnQgPT0gMCk7CisKKyAgICBpZiAo
bV9zcHJlYWRNZXRob2QgPT0gc3ByZWFkTWV0aG9kKQorICAgICAgICByZXR1cm47CisKICAgICBt
X3NwcmVhZE1ldGhvZCA9IHNwcmVhZE1ldGhvZDsKKworICAgIGNsZWFySGFzaENhY2hlKCk7CiB9
CiAKIHZvaWQgR3JhZGllbnQ6OnNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pCi17IAoreworICAgIGlmICht
X2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiA9PSBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRp
b24pCisgICAgICAgIHJldHVybjsKKwogICAgIG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9u
ID0gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOwogICAgIHNldFBsYXRmb3JtR3JhZGllbnRT
cGFjZVRyYW5zZm9ybShncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pOworCisgICAgY2xlYXJI
YXNoQ2FjaGUoKTsKIH0KIAogI2lmICFVU0UoU0tJQSkgJiYgIVVTRShDQUlSTykKQEAgLTIyMyw1
ICsyNDQsNDUgQEAgdm9pZCBHcmFkaWVudDo6c2V0UGxhdGZvcm1HcmFkaWVudFNwYWNlVHJhbnNm
b3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpCiB9CiAjZW5kaWYKIAordW5zaWduZWQgR3JhZGll
bnQ6Omhhc2goKQoreworICAgIGlmIChtX2NhY2hlZEhhc2gpCisgICAgICAgIHJldHVybiBtX2Nh
Y2hlZEhhc2g7CisKKyAgICBzdHJ1Y3QgeworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ3JhZGll
bnRTcGFjZVRyYW5zZm9ybWF0aW9uOworICAgICAgICBGbG9hdFBvaW50IHAwOworICAgICAgICBG
bG9hdFBvaW50IHAxOworICAgICAgICBmbG9hdCByMDsKKyAgICAgICAgZmxvYXQgcjE7CisgICAg
ICAgIGZsb2F0IGFzcGVjdFJhdGlvOworICAgICAgICBpbnQgbGFzdFN0b3A7CisgICAgICAgIEdy
YWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZDsKKyAgICAgICAgYm9vbCByYWRpYWw7Cisg
ICAgfSBwYXJhbWV0ZXJzOworICAgIAorICAgIG1lbXNldCgmcGFyYW1ldGVycywgMCwgc2l6ZW9m
KHBhcmFtZXRlcnMpKTsKKyAgICAKKyAgICBwYXJhbWV0ZXJzLmdyYWRpZW50U3BhY2VUcmFuc2Zv
cm1hdGlvbiA9IG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOworICAgIHBhcmFtZXRlcnMu
cDAgPSBtX3AwOworICAgIHBhcmFtZXRlcnMucDEgPSBtX3AxOworICAgIHBhcmFtZXRlcnMucjAg
PSBtX3IwOworICAgIHBhcmFtZXRlcnMucjEgPSBtX3IxOworICAgIHBhcmFtZXRlcnMuYXNwZWN0
UmF0aW8gPSBtX2FzcGVjdFJhdGlvOworICAgIHBhcmFtZXRlcnMubGFzdFN0b3AgPSBtX2xhc3RT
dG9wOworICAgIHBhcmFtZXRlcnMuc3ByZWFkTWV0aG9kID0gbV9zcHJlYWRNZXRob2Q7CisgICAg
cGFyYW1ldGVycy5yYWRpYWwgPSBtX3JhZGlhbDsKKworICAgIHVuc2lnbmVkIHBhcmFtZXRlcnNI
YXNoID0gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KCZwYXJhbWV0ZXJzLCBzaXplb2YocGFyYW1l
dGVycykpOworICAgIAorICAgIENvbG9yU3RvcCAqIHN0b3BEYXRhID0gbV9zdG9wcy5kYXRhKCk7
CisgICAgdW5zaWduZWQgc3RvcEhhc2ggPSBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoc3RvcERh
dGEsIG1fc3RvcHMuc2l6ZSgpICogc2l6ZW9mKENvbG9yU3RvcCkpOworICAgIAorICAgIHN0ZDo6
cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGhhc2hlcyhwYXJhbWV0ZXJzSGFzaCwgc3RvcEhhc2gp
OworICAgIAorICAgIG1fY2FjaGVkSGFzaCA9IERlZmF1bHRIYXNoPHN0ZDo6cGFpcjx1bnNpZ25l
ZCwgdW5zaWduZWQ+ID46Okhhc2g6Omhhc2goaGFzaGVzKTsKKworICAgIHJldHVybiBtX2NhY2hl
ZEhhc2g7Cit9CiAKIH0gLy9uYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFkaWVudC5oCmluZGV4IDYwYTQ1MzguLjMwNmVkZmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaApAQCAtOTcsMTUgKzk3LDQ5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcDAoKSBjb25zdCB7IHJl
dHVybiBtX3AwOyB9CiAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHAxKCkgY29uc3QgeyByZXR1
cm4gbV9wMTsgfQogCi0gICAgICAgIHZvaWQgc2V0UDAoY29uc3QgRmxvYXRQb2ludCYgcCkgeyBt
X3AwID0gcDsgfQotICAgICAgICB2b2lkIHNldFAxKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgbV9w
MSA9IHA7IH0KKyAgICAgICAgdm9pZCBzZXRQMChjb25zdCBGbG9hdFBvaW50JiBwKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAobV9wMCA9PSBwKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9wMCA9IHA7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNsZWFySGFzaENhY2hlKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZv
aWQgc2V0UDEoY29uc3QgRmxvYXRQb2ludCYgcCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG1fcDEgPT0gcCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1fcDEgPSBwOworICAgICAgICAgICAgCisgICAgICAgICAgICBjbGVhckhhc2hDYWNo
ZSgpOworICAgICAgICB9CiAKICAgICAgICAgZmxvYXQgc3RhcnRSYWRpdXMoKSBjb25zdCB7IHJl
dHVybiBtX3IwOyB9CiAgICAgICAgIGZsb2F0IGVuZFJhZGl1cygpIGNvbnN0IHsgcmV0dXJuIG1f
cjE7IH0KIAotICAgICAgICB2b2lkIHNldFN0YXJ0UmFkaXVzKGZsb2F0IHIpIHsgbV9yMCA9IHI7
IH0KLSAgICAgICAgdm9pZCBzZXRFbmRSYWRpdXMoZmxvYXQgcikgeyBtX3IxID0gcjsgfQotICAg
ICAgICAKKyAgICAgICAgdm9pZCBzZXRTdGFydFJhZGl1cyhmbG9hdCByKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobV9yMCA9PSByKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgbV9yMCA9IHI7CisKKyAgICAgICAgICAgIGNsZWFySGFzaENhY2hlKCk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIHNldEVuZFJhZGl1cyhmbG9hdCByKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobV9yMSA9PSByKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgbV9yMSA9IHI7CisKKyAgICAgICAgICAgIGNsZWFySGFzaENhY2hlKCk7CisgICAg
ICAgIH0KKwogICAgICAgICBmbG9hdCBhc3BlY3RSYXRpbygpIGNvbnN0IHsgcmV0dXJuIG1fYXNw
ZWN0UmF0aW87IH0KIAogI2lmIE9TKFdJTkNFKSAmJiAhUExBVEZPUk0oUVQpCkBAIC0xMzgsNiAr
MTcyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1H
cmFkaWVudFNwYWNlVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFj
ZVRyYW5zZm9ybWF0aW9uKTsKIAorICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGhhc2goKSBPVkVS
UklERTsKKyAgICAgICAgdm9pZCBjbGVhckhhc2hDYWNoZSgpIHsgbV9jYWNoZWRIYXNoID0gMDsg
fQorCiAjaWYgVVNFKENHKQogICAgICAgICB2b2lkIHBhaW50KENHQ29udGV4dFJlZik7CiAgICAg
ICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0Kik7CkBAIC0xNTUsNiArMTkyLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgZmluZFN0b3AoZmxvYXQgdmFsdWUpIGNvbnN0
OwogICAgICAgICB2b2lkIHNvcnRTdG9wc0lmTmVjZXNzYXJ5KCk7CiAKKyAgICAgICAgLy8gS2Vl
cCBhbnkgcGFyYW1ldGVycyByZWxldmFudCB0byByZW5kZXJpbmcgaW4gc3luYyB3aXRoIHRoZSBz
dHJ1Y3R1cmUgaW4gR3JhZGllbnQ6Omhhc2goKS4KICAgICAgICAgYm9vbCBtX3JhZGlhbDsKICAg
ICAgICAgRmxvYXRQb2ludCBtX3AwOwogICAgICAgICBGbG9hdFBvaW50IG1fcDE7CkBAIC0xNjcs
NiArMjA1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBHcmFkaWVudFNwcmVhZE1l
dGhvZCBtX3NwcmVhZE1ldGhvZDsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1fZ3JhZGllbnRT
cGFjZVRyYW5zZm9ybWF0aW9uOwogCisgICAgICAgIHVuc2lnbmVkIG1fY2FjaGVkSGFzaDsKKwog
ICAgICAgICBQbGF0Zm9ybUdyYWRpZW50IG1fZ3JhZGllbnQ7CiAKICNpZiBVU0UoQ0FJUk8pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmNwcAppbmRleCA2NDAyYjQ4Li4wMjBlNzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTc4MCw2ICs3ODAsMjAg
QEAgUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVDb21wYXRp
YmxlQnVmZmVyKGNvbnN0IEludFNpemUmIHMKICAgICByZXR1cm4gYnVmZmVyLnJlbGVhc2UoKTsK
IH0KIAorYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQ29tcGF0aWJsZVdpdGhCdWZmZXIoSW1hZ2VC
dWZmZXIqIGJ1ZmZlcikgY29uc3QKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zv
cm0gPSBnZXRDVE0oKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYnVmZmVyVHJhbnNmb3JtID0gYnVm
ZmVyLT5jb250ZXh0KCktPmdldENUTSgpOworCisgICAgaWYgKGxvY2FsVHJhbnNmb3JtLnhTY2Fs
ZSgpICE9IGJ1ZmZlclRyYW5zZm9ybS54U2NhbGUoKSB8fCBsb2NhbFRyYW5zZm9ybS55U2NhbGUo
KSAhPSBidWZmZXJUcmFuc2Zvcm0ueVNjYWxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChpc0FjY2VsZXJhdGVkQ29udGV4dCgpICE9IGJ1ZmZlci0+Y29udGV4dCgpLT5pc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogI2lmICFVU0UoQ0cpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1B
cHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCAxYzgxODkxLi4zMTJlODg1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaApAQCAtNDI0LDYgKzQyNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
Ly8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhpcyBjb250ZXh0LCB3
aXRoIHN1aXRhYmxlIHJlc29sdXRpb24KICAgICAgICAgLy8gZm9yIGRyYXdpbmcgaW50byB0aGUg
YnVmZmVyIGFuZCB0aGVuIGludG8gdGhpcyBjb250ZXh0LgogICAgICAgICBQYXNzT3duUHRyPElt
YWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEludFNpemUmKSBjb25zdDsK
KyAgICAgICAgYm9vbCBpc0NvbXBhdGlibGVXaXRoQnVmZmVyKEltYWdlQnVmZmVyKikgY29uc3Q7
CiAKICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSBkZXZpY2Ugc2NhbGUgZmFj
dG9yIHRvIHRoZSBjb250ZXh0LCBtYWtpbmcgdGhlIGNvbnRleHQgY2FwYWJsZSBvZgogICAgICAg
ICAvLyBhY3RpbmcgYXMgYSBiYXNlLWxldmVsIGNvbnRleHQgZm9yIGEgSGlEUEkgZW52aXJvbm1l
bnQuCg==
</data>
<flag name="commit-queue"
          id="149416"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142959</attachid>
            <date>2012-05-21 00:47:52 -0700</date>
            <delta_ts>2012-05-22 09:34:38 -0700</delta_ts>
            <desc>patch</desc>
            <filename>scroll.diff</filename>
            <type>text/plain</type>
            <size>16554</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MDYyMTE3Li45NWFjNmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUg
QEAKKzIwMTItMDUtMTggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2Ugc2hvdWxkIGNhY2hlIGludGVybWVkaWF0
ZSBpbWFnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg2OTA2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTQ4NDg1Mj4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDYWNoZSBnZW5lcmF0ZWQgaW1hZ2Vz
IGluIEdlbmVyYXRvckdlbmVyYXRlZEltYWdlLiBUaGUgY2FjaGUgaXMgaW52YWxpZGF0ZWQ6Cisg
ICAgICAgICAgICBhKSBpZiB0aGUgR2VuZXJhdG9yJ3MgaGFzaCBjaGFuZ2VzLgorICAgICAgICAg
ICAgYikgaWYgdGhlIHJlbmRlcmVkIHNpemUgY2hhbmdlcy4KKyAgICAgICAgICAgIGMpIGlmIHRo
ZSBjYWNoZWQgaW1hZ2UgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIGRlc3RpbmF0aW9uIGNvbnRl
eHQgKGFjY2VsZXJhdGlvbiBzdGF0ZSBvciBDVE0gc2NhbGUpLgorICAgICAgICAgICAgZCkgYWZ0
ZXIgb25lIHNlY29uZCBvZiBkaXN1c2UuCisKKyAgICAgICAgQWRkIGEgaGFzaCgpIGZ1bmN0aW9u
IHRvIEdlbmVyYXRvciwgd2hpY2ggc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXMK
KyAgICAgICAgdG8gcHJvdmlkZSBhIHN0cmFpZ2h0Zm9yd2FyZCB3YXkgdG8gZGV0ZXJtaW5lIGlm
IEdlbmVyYXRvcnMgaGF2ZSBiZWVuIG11dGF0ZWQKKyAgICAgICAgaW4gYSB3YXkgdGhhdCB3aWxs
IGFmZmVjdCB0aGUgcmVzdWx0YW50IHJlbmRlcmluZy4KKworICAgICAgICBObyBuZXcgdGVzdHMs
IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gQ29ycmVjdG5lc3MgaXMgY292ZXJlZCBieSB0aGUg
bXVsdGl0dWRlIG9mIGV4aXN0aW5nIGdyYWRpZW50IHRlc3RzLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR2VuZXJhdG9yLmg6CisgICAgICAgIChHZW5lcmF0b3IpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvckdlbmVyYXRlZEltYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdlbmVyYXRvckdlbmVyYXRlZEltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2U6On5HZW5lcmF0b3JHZW5lcmF0ZWRJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZTo6R2VuZXJhdG9y
R2VuZXJhdGVkSW1hZ2UpOgorICAgICAgICAoR2VuZXJhdGVkSW1hZ2VDYWNoZVRpbWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdlbmVyYXRvckdlbmVyYXRlZEltYWdlOjpHZW5lcmF0ZWRJbWFnZUNh
Y2hlVGltZXI6OkdlbmVyYXRlZEltYWdlQ2FjaGVUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpH
ZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZTo6R2VuZXJhdGVkSW1hZ2VDYWNoZVRpbWVyOjpyZXN0YXJ0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFkaWVudDo6R3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6
OmFkZENvbG9yU3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c29ydFN0b3BzSWZO
ZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNldFNwcmVhZE1ldGhvZCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0R3JhZGllbnRTcGFjZVRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6aGFzaCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhZGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRQMCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0UDEpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhZGllbnQ6OnNldFN0YXJ0UmFkaXVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50Ojpz
ZXRFbmRSYWRpdXMpOgorICAgICAgICAoR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
ZGllbnQ6OmNsZWFySGFzaENhY2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojppc0Nv
bXBhdGlibGVXaXRoQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0
KToKKwogMjAxMi0wNS0xNiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4K
IAogICAgICAgICBTY3JvbGxiYXIgbGF5ZXJzIHNob3VsZCByZXNwZWN0IGFjY2VsZXJhdGVkIGRy
YXdpbmcgc2V0dGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR2VuZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0
b3IuaAppbmRleCBiNjRkMDUxLi5iMmI0NWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HZW5lcmF0b3IuaApAQCAtMzksNiArMzksNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgdmlydHVhbCB2b2lkIGZpbGwoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQYXJhbWV0ZXJzRm9yVGlsZWREcmF3aW5nKElu
dFNpemUmIC8qIHNpemUgKi8sIEZsb2F0UmVjdCYgLyogc3JjUmVjdCAqLykgeyB9CisgICAgdmly
dHVhbCB1bnNpZ25lZCBoYXNoKCkgPSAwOwogfTsKIAogfSAvL25hbWVzcGFjZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9yR2VuZXJhdGVkSW1h
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9yR2VuZXJh
dGVkSW1hZ2UuY3BwCmluZGV4IGFkMTE2NWYuLmRkNzA2YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvckdlbmVyYXRlZEltYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0b3JHZW5lcmF0ZWRJbWFn
ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSwgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTYxLDE3ICs2MCwyOCBAQCB2b2lkIEdlbmVyYXRvckdlbmVyYXRlZEltYWdlOjpkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBjb25zdCBGbAogICAgIGFkanVzdGVk
UGF0dGVybkNUTS5zY2FsZSgxLjAgLyB4U2NhbGUsIDEuMCAvIHlTY2FsZSk7CiAgICAgYWRqdXN0
ZWRTcmNSZWN0LnNjYWxlKHhTY2FsZSwgeVNjYWxlKTsKIAotICAgIC8vIENyZWF0ZSBhIEJpdG1h
cEltYWdlIGFuZCBjYWxsIGRyYXdQYXR0ZXJuIG9uIGl0LgotICAgIE93blB0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIgPSBkZXN0Q29udGV4dC0+Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihhZGp1
c3RlZFNpemUpOwotICAgIGlmICghaW1hZ2VCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICB1
bnNpZ25lZCBnZW5lcmF0b3JIYXNoID0gbV9nZW5lcmF0b3ItPmhhc2goKTsKIAotICAgIC8vIEZp
bGwgd2l0aCB0aGUgZ2VuZXJhdGVkIGltYWdlLgotICAgIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKLSAgICBncmFwaGljc0NvbnRleHQt
PmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFkanVzdGVkU2l6ZSksICptX2dlbmVy
YXRvci5nZXQoKSk7CisgICAgaWYgKCFtX2NhY2hlZEltYWdlQnVmZmVyCisgICAgICAgIHx8IG1f
Y2FjaGVkR2VuZXJhdG9ySGFzaCAhPSBnZW5lcmF0b3JIYXNoCisgICAgICAgIHx8IG1fY2FjaGVk
QWRqdXN0ZWRTaXplICE9IGFkanVzdGVkU2l6ZQorICAgICAgICB8fCAhZGVzdENvbnRleHQtPmlz
Q29tcGF0aWJsZVdpdGhCdWZmZXIobV9jYWNoZWRJbWFnZUJ1ZmZlci5nZXQoKSkpIHsKKyAgICAg
ICAgLy8gQ3JlYXRlIGEgQml0bWFwSW1hZ2UgYW5kIGNhbGwgZHJhd1BhdHRlcm4gb24gaXQuCisg
ICAgICAgIG1fY2FjaGVkSW1hZ2VCdWZmZXIgPSBkZXN0Q29udGV4dC0+Y3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcihhZGp1c3RlZFNpemUpOworICAgICAgICBpZiAoIW1fY2FjaGVkSW1hZ2VCdWZmZXIp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gRmlsbCB3aXRoIHRoZSBnZW5lcmF0
ZWQgaW1hZ2UuCisgICAgICAgIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0ID0gbV9j
YWNoZWRJbWFnZUJ1ZmZlci0+Y29udGV4dCgpOworICAgICAgICBncmFwaGljc0NvbnRleHQtPmZp
bGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFkanVzdGVkU2l6ZSksICptX2dlbmVyYXRv
ci5nZXQoKSk7CisKKyAgICAgICAgbV9jYWNoZWRHZW5lcmF0b3JIYXNoID0gZ2VuZXJhdG9ySGFz
aDsKKyAgICAgICAgbV9jYWNoZWRBZGp1c3RlZFNpemUgPSBhZGp1c3RlZFNpemU7CisgICAgfQog
CiAgICAgLy8gVGlsZSB0aGUgaW1hZ2UgYnVmZmVyIGludG8gdGhlIGNvbnRleHQuCi0gICAgaW1h
Z2VCdWZmZXItPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBhZGp1c3RlZFNyY1JlY3QsIGFkanVz
dGVkUGF0dGVybkNUTSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3AsIGRlc3RS
ZWN0KTsKKyAgICBtX2NhY2hlZEltYWdlQnVmZmVyLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwg
YWRqdXN0ZWRTcmNSZWN0LCBhZGp1c3RlZFBhdHRlcm5DVE0sIHBoYXNlLCBzdHlsZUNvbG9yU3Bh
Y2UsIGNvbXBvc2l0ZU9wLCBkZXN0UmVjdCk7CisgICAgbV9jYWNoZVRpbWVyLnJlc3RhcnQoKTsK
IH0KIAogdm9pZCBHZW5lcmF0ZWRJbWFnZTo6Y29tcHV0ZUludHJpbnNpY0RpbWVuc2lvbnMoTGVu
Z3RoJiBpbnRyaW5zaWNXaWR0aCwgTGVuZ3RoJiBpbnRyaW5zaWNIZWlnaHQsIEZsb2F0U2l6ZSYg
aW50cmluc2ljUmF0aW8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UuaAppbmRleCA1MDljYTczLi5mM2I5NTk1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0b3JH
ZW5lcmF0ZWRJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dl
bmVyYXRvckdlbmVyYXRlZEltYWdlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDEyIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxOCArMjks
MjkgQEAKICNpbmNsdWRlICJHZW5lcmF0ZWRJbWFnZS5oIgogI2luY2x1ZGUgIkdlbmVyYXRvci5o
IgogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRl
ICJJbnRTaXplLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGNvbnN0IGludCBnZW5lcmF0ZWRJbWFn
ZUNhY2hlQ2xlYXJEZWxheSA9IDE7CisKK2NsYXNzIEdlbmVyYXRlZEltYWdlQ2FjaGVUaW1lcjsK
KwogY2xhc3MgR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UgOiBwdWJsaWMgR2VuZXJhdGVkSW1hZ2Ug
eworICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZUNhY2hlVGltZXI7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2U+IGNyZWF0ZShQYXNz
UmVmUHRyPEdlbmVyYXRvcj4gZ2VuZXJhdG9yLCBjb25zdCBJbnRTaXplJiBzaXplKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZShnZW5l
cmF0b3IsIHNpemUpKTsKICAgICB9Ci0gICAgdmlydHVhbCB+R2VuZXJhdG9yR2VuZXJhdGVkSW1h
Z2UoKSB7IH0KKworICAgIHZpcnR1YWwgfkdlbmVyYXRvckdlbmVyYXRlZEltYWdlKCkKKyAgICB7
CisgICAgICAgIG1fY2FjaGVUaW1lci5zdG9wKCk7CisgICAgfQogCiBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvcik7CkBAIC00OSwxMSArNjAsNDkgQEAgcHJvdGVjdGVkOgogCiAg
ICAgR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UoUGFzc1JlZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRv
ciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgOiBtX2dlbmVyYXRvcihnZW5lcmF0b3Ip
CisgICAgICAgICwgbV9jYWNoZVRpbWVyKHRoaXMpCiAgICAgewogICAgICAgICBtX3NpemUgPSBz
aXplOwogICAgIH0KKyAgICAKKyAgICBjbGFzcyBHZW5lcmF0ZWRJbWFnZUNhY2hlVGltZXIgOiBw
dWJsaWMgVGltZXJCYXNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEdlbmVyYXRlZEltYWdlQ2Fj
aGVUaW1lcihHZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZSAqIHBhcmVudCkKKyAgICAgICAgOiBtX3No
b3VsZFJlc3RhcnRXaGVuVGltZXJGaXJlcyhmYWxzZSkKKyAgICAgICAgLCBtX3BhcmVudChwYXJl
bnQpIHsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCByZXN0YXJ0KCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGlzQWN0aXZlKCkpIHsKKyAgICAgICAgICAgICAgICBtX3Nob3VsZFJlc3Rh
cnRXaGVuVGltZXJGaXJlcyA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgc3RhcnRPbmVTaG90KGdlbmVyYXRlZEltYWdlQ2FjaGVDbGVh
ckRlbGF5KTsKKyAgICAgICAgfTsKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIHZvaWQg
ZmlyZWQoKSBPVkVSUklERQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9zaG91bGRSZXN0
YXJ0V2hlblRpbWVyRmlyZXMpIHsKKyAgICAgICAgICAgICAgICBtX3Nob3VsZFJlc3RhcnRXaGVu
VGltZXJGaXJlcyA9IGZhbHNlOworICAgICAgICAgICAgICAgIHN0YXJ0T25lU2hvdChnZW5lcmF0
ZWRJbWFnZUNhY2hlQ2xlYXJEZWxheSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9wYXJlbnQpIHsKKyAgICAg
ICAgICAgICAgICBtX3BhcmVudC0+bV9jYWNoZWRJbWFnZUJ1ZmZlci5jbGVhcigpOworICAgICAg
ICAgICAgICAgIG1fcGFyZW50LT5tX2NhY2hlZEFkanVzdGVkU2l6ZSA9IEludFNpemUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgYm9vbCBtX3Nob3VsZFJlc3RhcnRXaGVu
VGltZXJGaXJlczsKKyAgICAgICAgR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UqIG1fcGFyZW50Owor
ICAgIH07CiAKICAgICBSZWZQdHI8R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKKworICAgIE93blB0
cjxJbWFnZUJ1ZmZlcj4gbV9jYWNoZWRJbWFnZUJ1ZmZlcjsKKyAgICBHZW5lcmF0ZWRJbWFnZUNh
Y2hlVGltZXIgbV9jYWNoZVRpbWVyOworICAgIEludFNpemUgbV9jYWNoZWRBZGp1c3RlZFNpemU7
CisgICAgdW5zaWduZWQgbV9jYWNoZWRHZW5lcmF0b3JIYXNoOwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCmluZGV4IGZjN2I3NDEuLjE3
M2NiMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRp
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5j
cHAKQEAgLTI5LDYgKzI5LDggQEAKIAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
U3RyaW5nSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTQzLDYgKzQ1LDcgQEAgR3JhZGllbnQ6OkdyYWRpZW50KGNvbnN0IEZs
b2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSkKICAgICAsIG1fc3RvcHNTb3J0ZWQo
ZmFsc2UpCiAgICAgLCBtX2xhc3RTdG9wKDApCiAgICAgLCBtX3NwcmVhZE1ldGhvZChTcHJlYWRN
ZXRob2RQYWQpCisgICAgLCBtX2NhY2hlZEhhc2goMCkKIHsKICAgICBwbGF0Zm9ybUluaXQoKTsK
IH0KQEAgLTU3LDYgKzYwLDcgQEAgR3JhZGllbnQ6OkdyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQm
IHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIKICAgICAsIG1fc3Rv
cHNTb3J0ZWQoZmFsc2UpCiAgICAgLCBtX2xhc3RTdG9wKDApCiAgICAgLCBtX3NwcmVhZE1ldGhv
ZChTcHJlYWRNZXRob2RQYWQpCisgICAgLCBtX2NhY2hlZEhhc2goMCkKIHsKICAgICBwbGF0Zm9y
bUluaXQoKTsKIH0KQEAgLTk5LDYgKzEwMyw4IEBAIHZvaWQgR3JhZGllbnQ6OmFkZENvbG9yU3Rv
cChmbG9hdCB2YWx1ZSwgY29uc3QgQ29sb3ImIGNvbG9yKQogCiAgICAgbV9zdG9wc1NvcnRlZCA9
IGZhbHNlOwogICAgIHBsYXRmb3JtRGVzdHJveSgpOworCisgICAgY2xlYXJIYXNoQ2FjaGUoKTsK
IH0KIAogdm9pZCBHcmFkaWVudDo6YWRkQ29sb3JTdG9wKGNvbnN0IEdyYWRpZW50OjpDb2xvclN0
b3AmIHN0b3ApCkBAIC0xMDcsNiArMTEzLDggQEAgdm9pZCBHcmFkaWVudDo6YWRkQ29sb3JTdG9w
KGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3AmIHN0b3ApCiAKICAgICBtX3N0b3BzU29ydGVkID0g
ZmFsc2U7CiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CisKKyAgICBjbGVhckhhc2hDYWNoZSgpOwog
fQogCiBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVN0b3BzKGNvbnN0IEdyYWRpZW50OjpDb2xv
clN0b3AmIGEsIGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3AmIGIpCkBAIC0xMjUsNiArMTMzLDgg
QEAgdm9pZCBHcmFkaWVudDo6c29ydFN0b3BzSWZOZWNlc3NhcnkoKQogICAgICAgICByZXR1cm47
CiAKICAgICBzdGQ6OnN0YWJsZV9zb3J0KG1fc3RvcHMuYmVnaW4oKSwgbV9zdG9wcy5lbmQoKSwg
Y29tcGFyZVN0b3BzKTsKKworICAgIGNsZWFySGFzaENhY2hlKCk7CiB9CiAKIHZvaWQgR3JhZGll
bnQ6OmdldENvbG9yKGZsb2F0IHZhbHVlLCBmbG9hdCogciwgZmxvYXQqIGcsIGZsb2F0KiBiLCBm
bG9hdCogYSkgY29uc3QKQEAgLTIwOCwxMyArMjE4LDI0IEBAIHZvaWQgR3JhZGllbnQ6OnNldFNw
cmVhZE1ldGhvZChHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QpCiB7CiAgICAgLy8g
RklYTUU6IFNob3VsZCBpdCBiZWNvbWUgbmVjZXNzYXJ5LCBhbGxvdyBjYWxscyB0byB0aGlzIG1l
dGhvZCBhZnRlciBtX2dyYWRpZW50IGhhcyBiZWVuIHNldC4KICAgICBBU1NFUlQobV9ncmFkaWVu
dCA9PSAwKTsKKworICAgIGlmIChtX3NwcmVhZE1ldGhvZCA9PSBzcHJlYWRNZXRob2QpCisgICAg
ICAgIHJldHVybjsKKwogICAgIG1fc3ByZWFkTWV0aG9kID0gc3ByZWFkTWV0aG9kOworCisgICAg
Y2xlYXJIYXNoQ2FjaGUoKTsKIH0KIAogdm9pZCBHcmFkaWVudDo6c2V0R3JhZGllbnRTcGFjZVRy
YW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlv
bikKLXsgCit7CisgICAgaWYgKG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uID09IGdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm1hdGlvbikKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9ncmFkaWVu
dFNwYWNlVHJhbnNmb3JtYXRpb24gPSBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247CiAgICAg
c2V0UGxhdGZvcm1HcmFkaWVudFNwYWNlVHJhbnNmb3JtKGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1h
dGlvbik7CisKKyAgICBjbGVhckhhc2hDYWNoZSgpOwogfQogCiAjaWYgIVVTRShTS0lBKSAmJiAh
VVNFKENBSVJPKQpAQCAtMjIzLDUgKzI0NCw0NSBAQCB2b2lkIEdyYWRpZW50OjpzZXRQbGF0Zm9y
bUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikKIH0KICNlbmRp
ZgogCit1bnNpZ25lZCBHcmFkaWVudDo6aGFzaCgpCit7CisgICAgaWYgKG1fY2FjaGVkSGFzaCkK
KyAgICAgICAgcmV0dXJuIG1fY2FjaGVkSGFzaDsKKworICAgIHN0cnVjdCB7CisgICAgICAgIEFm
ZmluZVRyYW5zZm9ybSBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247CisgICAgICAgIEZsb2F0
UG9pbnQgcDA7CisgICAgICAgIEZsb2F0UG9pbnQgcDE7CisgICAgICAgIGZsb2F0IHIwOworICAg
ICAgICBmbG9hdCByMTsKKyAgICAgICAgZmxvYXQgYXNwZWN0UmF0aW87CisgICAgICAgIGludCBs
YXN0U3RvcDsKKyAgICAgICAgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kOworICAg
ICAgICBib29sIHJhZGlhbDsKKyAgICB9IHBhcmFtZXRlcnM7CisgICAgCisgICAgbWVtc2V0KCZw
YXJhbWV0ZXJzLCAwLCBzaXplb2YocGFyYW1ldGVycykpOworICAgIAorICAgIHBhcmFtZXRlcnMu
Z3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uID0gbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRp
b247CisgICAgcGFyYW1ldGVycy5wMCA9IG1fcDA7CisgICAgcGFyYW1ldGVycy5wMSA9IG1fcDE7
CisgICAgcGFyYW1ldGVycy5yMCA9IG1fcjA7CisgICAgcGFyYW1ldGVycy5yMSA9IG1fcjE7Cisg
ICAgcGFyYW1ldGVycy5hc3BlY3RSYXRpbyA9IG1fYXNwZWN0UmF0aW87CisgICAgcGFyYW1ldGVy
cy5sYXN0U3RvcCA9IG1fbGFzdFN0b3A7CisgICAgcGFyYW1ldGVycy5zcHJlYWRNZXRob2QgPSBt
X3NwcmVhZE1ldGhvZDsKKyAgICBwYXJhbWV0ZXJzLnJhZGlhbCA9IG1fcmFkaWFsOworCisgICAg
dW5zaWduZWQgcGFyYW1ldGVyc0hhc2ggPSBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoJnBhcmFt
ZXRlcnMsIHNpemVvZihwYXJhbWV0ZXJzKSk7CisgICAgCisgICAgQ29sb3JTdG9wICogc3RvcERh
dGEgPSBtX3N0b3BzLmRhdGEoKTsKKyAgICB1bnNpZ25lZCBzdG9wSGFzaCA9IFN0cmluZ0hhc2hl
cjo6aGFzaE1lbW9yeShzdG9wRGF0YSwgbV9zdG9wcy5zaXplKCkgKiBzaXplb2YoQ29sb3JTdG9w
KSk7CisgICAgCisgICAgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gaGFzaGVzKHBhcmFt
ZXRlcnNIYXNoLCBzdG9wSGFzaCk7CisgICAgCisgICAgbV9jYWNoZWRIYXNoID0gRGVmYXVsdEhh
c2g8c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gPjo6SGFzaDo6aGFzaChoYXNoZXMpOwor
CisgICAgcmV0dXJuIG1fY2FjaGVkSGFzaDsKK30KIAogfSAvL25hbWVzcGFjZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgKaW5kZXggNjBhNDUzOC4uMzA2ZWRm
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCkBAIC05
NywxNSArOTcsNDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBGbG9hdFBv
aW50JiBwMCgpIGNvbnN0IHsgcmV0dXJuIG1fcDA7IH0KICAgICAgICAgY29uc3QgRmxvYXRQb2lu
dCYgcDEoKSBjb25zdCB7IHJldHVybiBtX3AxOyB9CiAKLSAgICAgICAgdm9pZCBzZXRQMChjb25z
dCBGbG9hdFBvaW50JiBwKSB7IG1fcDAgPSBwOyB9Ci0gICAgICAgIHZvaWQgc2V0UDEoY29uc3Qg
RmxvYXRQb2ludCYgcCkgeyBtX3AxID0gcDsgfQorICAgICAgICB2b2lkIHNldFAwKGNvbnN0IEZs
b2F0UG9pbnQmIHApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3AwID09IHApCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX3AwID0gcDsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgY2xlYXJIYXNoQ2FjaGUoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRQMShjb25zdCBGbG9hdFBvaW50JiBwKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAobV9wMSA9PSBwKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9wMSA9IHA7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNsZWFySGFzaENhY2hlKCk7CisgICAgICAgIH0KIAogICAgICAgICBmbG9hdCBzdGFy
dFJhZGl1cygpIGNvbnN0IHsgcmV0dXJuIG1fcjA7IH0KICAgICAgICAgZmxvYXQgZW5kUmFkaXVz
KCkgY29uc3QgeyByZXR1cm4gbV9yMTsgfQogCi0gICAgICAgIHZvaWQgc2V0U3RhcnRSYWRpdXMo
ZmxvYXQgcikgeyBtX3IwID0gcjsgfQotICAgICAgICB2b2lkIHNldEVuZFJhZGl1cyhmbG9hdCBy
KSB7IG1fcjEgPSByOyB9Ci0gICAgICAgIAorICAgICAgICB2b2lkIHNldFN0YXJ0UmFkaXVzKGZs
b2F0IHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3IwID09IHIpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBtX3IwID0gcjsKKworICAgICAgICAgICAgY2xl
YXJIYXNoQ2FjaGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0RW5kUmFkaXVzKGZs
b2F0IHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3IxID09IHIpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBtX3IxID0gcjsKKworICAgICAgICAgICAgY2xl
YXJIYXNoQ2FjaGUoKTsKKyAgICAgICAgfQorCiAgICAgICAgIGZsb2F0IGFzcGVjdFJhdGlvKCkg
Y29uc3QgeyByZXR1cm4gbV9hc3BlY3RSYXRpbzsgfQogCiAjaWYgT1MoV0lOQ0UpICYmICFQTEFU
Rk9STShRVCkKQEAgLTEzOCw2ICsxNzIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgdm9pZCBzZXRQbGF0Zm9ybUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pOwogCisgICAgICAgIHZpcnR1YWwg
dW5zaWduZWQgaGFzaCgpIE9WRVJSSURFOworICAgICAgICB2b2lkIGNsZWFySGFzaENhY2hlKCkg
eyBtX2NhY2hlZEhhc2ggPSAwOyB9CisKICNpZiBVU0UoQ0cpCiAgICAgICAgIHZvaWQgcGFpbnQo
Q0dDb250ZXh0UmVmKTsKICAgICAgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqKTsKQEAg
LTE1NSw2ICsxOTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGludCBmaW5kU3Rv
cChmbG9hdCB2YWx1ZSkgY29uc3Q7CiAgICAgICAgIHZvaWQgc29ydFN0b3BzSWZOZWNlc3Nhcnko
KTsKIAorICAgICAgICAvLyBLZWVwIGFueSBwYXJhbWV0ZXJzIHJlbGV2YW50IHRvIHJlbmRlcmlu
ZyBpbiBzeW5jIHdpdGggdGhlIHN0cnVjdHVyZSBpbiBHcmFkaWVudDo6aGFzaCgpLgogICAgICAg
ICBib29sIG1fcmFkaWFsOwogICAgICAgICBGbG9hdFBvaW50IG1fcDA7CiAgICAgICAgIEZsb2F0
UG9pbnQgbV9wMTsKQEAgLTE2Nyw2ICsyMDUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIEdyYWRpZW50U3ByZWFkTWV0aG9kIG1fc3ByZWFkTWV0aG9kOwogICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247CiAKKyAgICAgICAgdW5zaWdu
ZWQgbV9jYWNoZWRIYXNoOworCiAgICAgICAgIFBsYXRmb3JtR3JhZGllbnQgbV9ncmFkaWVudDsK
IAogI2lmIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDY0MDJiNDguLjAyMGU3NTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNw
cApAQCAtNzgwLDYgKzc4MCwyMCBAQCBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBHcmFwaGljc0Nv
bnRleHQ6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgSW50U2l6ZSYgcwogICAgIHJldHVy
biBidWZmZXIucmVsZWFzZSgpOwogfQogCitib29sIEdyYXBoaWNzQ29udGV4dDo6aXNDb21wYXRp
YmxlV2l0aEJ1ZmZlcihJbWFnZUJ1ZmZlciogYnVmZmVyKSBjb25zdAoreworICAgIEFmZmluZVRy
YW5zZm9ybSBsb2NhbFRyYW5zZm9ybSA9IGdldENUTSgpOworICAgIEFmZmluZVRyYW5zZm9ybSBi
dWZmZXJUcmFuc2Zvcm0gPSBidWZmZXItPmNvbnRleHQoKS0+Z2V0Q1RNKCk7CisKKyAgICBpZiAo
bG9jYWxUcmFuc2Zvcm0ueFNjYWxlKCkgIT0gYnVmZmVyVHJhbnNmb3JtLnhTY2FsZSgpIHx8IGxv
Y2FsVHJhbnNmb3JtLnlTY2FsZSgpICE9IGJ1ZmZlclRyYW5zZm9ybS55U2NhbGUoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgIT0gYnVm
ZmVyLT5jb250ZXh0KCktPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCiAjaWYgIVVTRShDRykKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpCiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmlu
ZGV4IDFjODE4OTEuLjMxMmU4ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC00MjQsNiArNDI0LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUg
d2l0aCB0aGlzIGNvbnRleHQsIHdpdGggc3VpdGFibGUgcmVzb2x1dGlvbgogICAgICAgICAvLyBm
b3IgZHJhd2luZyBpbnRvIHRoZSBidWZmZXIgYW5kIHRoZW4gaW50byB0aGlzIGNvbnRleHQuCiAg
ICAgICAgIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29u
c3QgSW50U2l6ZSYpIGNvbnN0OworICAgICAgICBib29sIGlzQ29tcGF0aWJsZVdpdGhCdWZmZXIo
SW1hZ2VCdWZmZXIqKSBjb25zdDsKIAogICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMg
dGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNvbnRleHQsIG1ha2luZyB0aGUgY29udGV4
dCBjYXBhYmxlIG9mCiAgICAgICAgIC8vIGFjdGluZyBhcyBhIGJhc2UtbGV2ZWwgY29udGV4dCBm
b3IgYSBIaURQSSBlbnZpcm9ubWVudC4K
</data>
<flag name="review"
          id="149538"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>